diff --git a/build/rollup.js b/build/rollup.js index 8e4c5910e..75b4f7a1d 100644 --- a/build/rollup.js +++ b/build/rollup.js @@ -1,5 +1,5 @@ import Bundler from "./Bundler.js"; -var bundler = new Bundler("4.9.3", process.env.TARGET); +var bundler = new Bundler("5.0.0-alpha.0", process.env.TARGET); module.exports = bundler.bundle(); diff --git a/dist/js/tabulator.js b/dist/js/tabulator.js index 14149fb6e..e4eb992c5 100644 --- a/dist/js/tabulator.js +++ b/dist/js/tabulator.js @@ -1,4 +1,4 @@ -/* Tabulator v4.9.3 (c) Oliver Folkerd 2021 */ +/* Tabulator v5.0.0-alpha.0 (c) Oliver Folkerd 2021 */ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : typeof define === 'function' && define.amd ? define(factory) : @@ -122,6 +122,18 @@ }; } + function _toConsumableArray(arr) { + return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); + } + + function _arrayWithoutHoles(arr) { + if (Array.isArray(arr)) return _arrayLikeToArray(arr); + } + + function _iterableToArray(iter) { + if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); + } + function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); @@ -139,6 +151,10 @@ return arr2; } + function _nonIterableSpread() { + throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); + } + function _createForOfIteratorHelper(o, allowArrayLike) { var it; @@ -197,274 +213,48 @@ } var defaultOptions = { + debugEventsExternal: false, + //flag to console log events + debugEventsInternal: false, + //flag to console log events + debugInvalidOptions: true, + //allow toggling of invalid option warnings height: false, //height of tabulator minHeight: false, //minimum height of tabulator maxHeight: false, //maximum height of tabulator - layout: "fitData", - ///layout type "fitColumns" | "fitData" - layoutColumnsOnNewData: false, - //update column widths on setData - columnMinWidth: 40, - //minimum global width for a column columnMaxWidth: false, //minimum global width for a column columnHeaderVertAlign: "top", //vertical alignment of column headers - resizableColumns: true, - //resizable columns - resizableRows: false, - //resizable rows - autoResize: true, - //auto resize table columns: [], //store for colum header info - columnDefaults: false, + columnDefaults: {}, //store column default props - cellHozAlign: "", - //horizontal align columns - cellVertAlign: "", - //vertical align columns - headerHozAlign: "", - //horizontal header alignment - data: [], + data: false, //default starting data autoColumns: false, //build columns from data row structure autoColumnsDefinitions: false, - reactiveData: false, - //enable data reactivity nestedFieldSeparator: ".", //seperatpr for nested data - tooltips: false, - //Tool tip value - tooltipsHeader: false, - //Tool tip for headers tooltipGenerationMode: "load", //when to generate tooltips - initialSort: false, - //initial sorting criteria - initialFilter: false, - //initial filtering criteria - initialHeaderFilter: false, - //initial header filtering criteria - columnHeaderSortMulti: true, - //multiple or single column sorting - sortOrderReverse: false, - //reverse internal sort ordering - headerSort: true, - //set default global header sort - headerSortTristate: false, - //set default tristate header sorting - headerSortElement: "
", - //header sort element footerElement: false, //hold footer element index: "id", //filed for row index textDirection: "auto", - keybindings: [], - //array for keybindings - tabEndNewRow: false, - //create new row when tab to end of table - invalidOptionWarnings: true, - //allow toggling of invalid option warnings - clipboard: false, - //enable clipboard - clipboardCopyStyled: true, - //formatted table data - clipboardCopyConfig: false, - //clipboard config - clipboardCopyFormatter: false, - //DEPRICATED - REMOVE in 5.0 - clipboardCopyRowRange: "active", - //restrict clipboard to visible rows only - clipboardPasteParser: "table", - //convert pasted clipboard data to rows - clipboardPasteAction: "insert", - //how to insert pasted data into the table - clipboardCopied: function clipboardCopied() {}, - //data has been copied to the clipboard - clipboardPasted: function clipboardPasted() {}, - //data has been pasted into the table - clipboardPasteError: function clipboardPasteError() {}, - //data has not successfully been pasted into the table - downloadReady: function downloadReady(data, blob) { - return blob; - }, - //function to manipulate download data - downloadComplete: false, - //function to manipulate download data - downloadConfig: {}, - //download config - downloadRowRange: "active", - //restrict download to active rows only - dataTree: false, - //enable data tree - dataTreeFilter: true, - //filter child rows - dataTreeSort: true, - //sort child rows - dataTreeElementColumn: false, - dataTreeBranchElement: true, - //show data tree branch element - dataTreeChildIndent: 9, - //data tree child indent in px - dataTreeChildField: "_children", - //data tre column field to look for child rows - dataTreeCollapseElement: false, - //data tree row collapse element - dataTreeExpandElement: false, - //data tree row expand element - dataTreeStartExpanded: false, - dataTreeRowExpanded: function dataTreeRowExpanded() {}, - //row has been expanded - dataTreeRowCollapsed: function dataTreeRowCollapsed() {}, - //row has been collapsed - dataTreeChildColumnCalcs: false, - //include visible data tree rows in column calculations - dataTreeSelectPropagate: false, - //seleccting a parent row selects its children - printAsHtml: false, - //enable print as html - printFormatter: false, - //printing page formatter - printHeader: false, - //page header contents - printFooter: false, - //page footer contents - printStyled: true, - //enable print as html styling - printRowRange: "visible", - //restrict print to visible rows only - printConfig: {}, - //print config options addRowPos: "bottom", //position to insert blank rows, top|bottom - selectable: "highlight", - //highlight rows on hover - selectableRangeMode: "drag", - //highlight rows on hover - selectableRollingSelection: true, - //roll selection once maximum number of selectable rows is reached - selectablePersistence: true, - // maintain selection when table view is updated - selectableCheck: function selectableCheck(data, row) { - return true; - }, - //check wheather row is selectable - headerFilterLiveFilterDelay: 300, - //delay before updating column after user types in header filter - headerFilterPlaceholder: false, - //placeholder text to display in header filters headerVisible: true, //hide header - history: false, - //enable edit history - locale: false, - //current system language - langs: {}, - virtualDom: true, - //enable DOM virtualization - virtualDomBuffer: 0, + renderVertical: "virtual", + renderHorizontal: "basic", + renderVerticalBuffer: 0, // set virtual DOM buffer size - virtualDomHoz: false, - //enable horizontal DOM virtualization - persistence: false, - persistenceID: "", - //key for persistent storage - persistenceMode: true, - //mode for storing persistence information - persistenceReaderFunc: false, - //function for handling persistence data reading - persistenceWriterFunc: false, - //function for handling persistence data writing - responsiveLayout: false, - //responsive layout flags - responsiveLayoutCollapseStartOpen: true, - //start showing collapsed data - responsiveLayoutCollapseUseFormatters: true, - //responsive layout collapse formatter - responsiveLayoutCollapseFormatter: false, - //responsive layout collapse formatter - pagination: false, - //set pagination type - paginationSize: false, - //set number of rows to a page - paginationInitialPage: 1, - //initail page to show on load - paginationButtonCount: 5, - // set count of page button - paginationSizeSelector: false, - //add pagination size selector element - paginationElement: false, - //element to hold pagination numbers - paginationDataSent: {}, - //pagination data sent to the server - paginationDataReceived: {}, - //pagination data received from the server - paginationAddRow: "page", - //add rows on table or page - ajaxURL: false, - //url for ajax loading - ajaxURLGenerator: false, - ajaxParams: {}, - //params for ajax loading - ajaxConfig: "get", - //ajax request type - ajaxContentType: "form", - //ajax request type - ajaxRequestFunc: false, - //promise function - ajaxLoader: true, - //show loader - ajaxLoaderLoading: false, - //loader element - ajaxLoaderError: false, - //loader element - ajaxFiltering: false, - ajaxSorting: false, - ajaxProgressiveLoad: false, - //progressive loading - ajaxProgressiveLoadDelay: 0, - //delay between requests - ajaxProgressiveLoadScrollMargin: 0, - //margin before scroll begins - groupBy: false, - //enable table grouping and set field to group by - groupStartOpen: true, - //starting state of group - groupValues: false, - groupUpdateOnCellEdit: false, - groupHeader: false, - //header generation function - groupHeaderPrint: null, - groupHeaderClipboard: null, - groupHeaderHtmlOutput: null, - groupHeaderDownload: null, - htmlOutputConfig: false, - //html outypu config - movableColumns: false, - //enable movable columns - movableRows: false, - //enable movable rows - movableRowsConnectedTables: false, - //tables for movable rows to be connected to - movableRowsConnectedElements: false, - //other elements for movable rows to be connected to - movableRowsSender: false, - movableRowsReceiver: "insert", - movableRowsSendingStart: function movableRowsSendingStart() {}, - movableRowsSent: function movableRowsSent() {}, - movableRowsSentFailed: function movableRowsSentFailed() {}, - movableRowsSendingStop: function movableRowsSendingStop() {}, - movableRowsReceivingStart: function movableRowsReceivingStart() {}, - movableRowsReceived: function movableRowsReceived() {}, - movableRowsReceivedFailed: function movableRowsReceivedFailed() {}, - movableRowsReceivingStop: function movableRowsReceivingStop() {}, - movableRowsElementDrop: function movableRowsElementDrop() {}, scrollToRowPosition: "top", scrollToRowIfVisible: true, scrollToColumnPosition: "left", @@ -474,109 +264,201 @@ rowFormatterClipboard: null, rowFormatterHtmlOutput: null, placeholder: false, - //table building callbacks - tableBuilding: function tableBuilding() {}, - tableBuilt: function tableBuilt() {}, - //render callbacks - renderStarted: function renderStarted() {}, - renderComplete: function renderComplete() {}, - //row callbacks - rowClick: false, - rowDblClick: false, - rowContext: false, - rowTap: false, - rowDblTap: false, - rowTapHold: false, - rowMouseEnter: false, - rowMouseLeave: false, - rowMouseOver: false, - rowMouseOut: false, - rowMouseMove: false, - rowContextMenu: false, - rowClickMenu: false, - rowAdded: function rowAdded() {}, - rowDeleted: function rowDeleted() {}, - rowMoved: function rowMoved() {}, - rowUpdated: function rowUpdated() {}, - rowSelectionChanged: function rowSelectionChanged() {}, - rowSelected: function rowSelected() {}, - rowDeselected: function rowDeselected() {}, - rowResized: function rowResized() {}, - //cell callbacks - //row callbacks - cellClick: false, - cellDblClick: false, - cellContext: false, - cellTap: false, - cellDblTap: false, - cellTapHold: false, - cellMouseEnter: false, - cellMouseLeave: false, - cellMouseOver: false, - cellMouseOut: false, - cellMouseMove: false, - cellEditing: function cellEditing() {}, - cellEdited: function cellEdited() {}, - cellEditCancelled: function cellEditCancelled() {}, - //column callbacks - columnMoved: false, - columnResized: function columnResized() {}, - columnTitleChanged: function columnTitleChanged() {}, - columnVisibilityChanged: function columnVisibilityChanged() {}, - //HTML iport callbacks - htmlImporting: function htmlImporting() {}, - htmlImported: function htmlImported() {}, - //data callbacks - dataLoading: function dataLoading() {}, - dataLoaded: function dataLoaded() {}, - dataChanged: false, - //ajax callbacks - ajaxRequesting: function ajaxRequesting() {}, - ajaxResponse: false, - ajaxError: function ajaxError() {}, - //filtering callbacks - dataFiltering: false, - dataFiltered: false, - //sorting callbacks - dataSorting: function dataSorting() {}, - dataSorted: function dataSorted() {}, - //grouping callbacks - groupToggleElement: "arrow", - groupClosedShowCalcs: false, - dataGrouping: function dataGrouping() {}, - dataGrouped: false, - groupVisibilityChanged: function groupVisibilityChanged() {}, - groupClick: false, - groupDblClick: false, - groupContext: false, - groupContextMenu: false, - groupClickMenu: false, - groupTap: false, - groupDblTap: false, - groupTapHold: false, - columnCalcs: true, - //pagination callbacks - pageLoaded: function pageLoaded() {}, - //localization callbacks - localized: function localized() {}, - //validation callbacks - validationMode: "blocking", - validationFailed: function validationFailed() {}, - //history callbacks - historyUndo: function historyUndo() {}, - historyRedo: function historyRedo() {}, - //scroll callbacks - scrollHorizontal: function scrollHorizontal() {}, - scrollVertical: function scrollVertical() {} + dataLoader: true, + dataLoaderLoading: false, + dataLoaderError: false, + dataSendParams: {}, + dataReceiveParams: {} }; + var CoreFeature = /*#__PURE__*/function () { + function CoreFeature(table) { + _classCallCheck(this, CoreFeature); + + this.table = table; + } ////////////////////////////////////////// + /////////////// DataLoad ///////////////// + ////////////////////////////////////////// + + + _createClass(CoreFeature, [{ + key: "reloadData", + value: function reloadData(data, silent) { + return this.table.dataLoader.load(data, undefined, undefined, undefined, silent); + } ////////////////////////////////////////// + ///////////// Localization /////////////// + ////////////////////////////////////////// + + }, { + key: "langText", + value: function langText() { + var _this$table$modules$l; + + return (_this$table$modules$l = this.table.modules.localize).getText.apply(_this$table$modules$l, arguments); + } + }, { + key: "langBind", + value: function langBind() { + var _this$table$modules$l2; + + return (_this$table$modules$l2 = this.table.modules.localize).bind.apply(_this$table$modules$l2, arguments); + } + }, { + key: "langLocale", + value: function langLocale() { + var _this$table$modules$l3; + + return (_this$table$modules$l3 = this.table.modules.localize).getLocale.apply(_this$table$modules$l3, arguments); + } ////////////////////////////////////////// + ////////// Inter Table Comms ///////////// + ////////////////////////////////////////// + + }, { + key: "commsConnections", + value: function commsConnections() { + var _this$table$modules$c; + + return (_this$table$modules$c = this.table.modules.comms).getConnections.apply(_this$table$modules$c, arguments); + } + }, { + key: "commsSend", + value: function commsSend() { + var _this$table$modules$c2; + + return (_this$table$modules$c2 = this.table.modules.comms).send.apply(_this$table$modules$c2, arguments); + } ////////////////////////////////////////// + //////////////// Layout ///////////////// + ////////////////////////////////////////// + + }, { + key: "layoutMode", + value: function layoutMode() { + return this.table.modules.layout.getMode(); + } + }, { + key: "layoutRefresh", + value: function layoutRefresh() { + return this.table.modules.layout.layout(); + } ////////////////////////////////////////// + /////////////// Event Bus //////////////// + ////////////////////////////////////////// + + }, { + key: "subscribe", + value: function subscribe() { + var _this$table$eventBus; + + (_this$table$eventBus = this.table.eventBus).subscribe.apply(_this$table$eventBus, arguments); + } + }, { + key: "unsubscribe", + value: function unsubscribe() { + var _this$table$eventBus2; + + (_this$table$eventBus2 = this.table.eventBus).unsubscribe.apply(_this$table$eventBus2, arguments); + } + }, { + key: "subscribed", + value: function subscribed(key) { + this.table.eventBus.subscribed(key); + } + }, { + key: "subscriptionChange", + value: function subscriptionChange() { + var _this$table$eventBus3; + + (_this$table$eventBus3 = this.table.eventBus).subscriptionChange.apply(_this$table$eventBus3, arguments); + } + }, { + key: "dispatch", + value: function dispatch() { + var _this$table$eventBus4; + + (_this$table$eventBus4 = this.table.eventBus).dispatch.apply(_this$table$eventBus4, arguments); + } + }, { + key: "chain", + value: function chain() { + var _this$table$eventBus5; + + return (_this$table$eventBus5 = this.table.eventBus).chain.apply(_this$table$eventBus5, arguments); + } + }, { + key: "confirm", + value: function confirm() { + var _this$table$eventBus6; + + return (_this$table$eventBus6 = this.table.eventBus).confirm.apply(_this$table$eventBus6, arguments); + } + }, { + key: "dispatchExternal", + value: function dispatchExternal() { + var _this$table$externalE; + + (_this$table$externalE = this.table.externalEvents).dispatch.apply(_this$table$externalE, arguments); + } + }, { + key: "subscribedExternal", + value: function subscribedExternal(key) { + this.table.externalEvents.subscribed(key); + } + }, { + key: "subscriptionChangeExternal", + value: function subscriptionChangeExternal() { + var _this$table$externalE2; + + (_this$table$externalE2 = this.table.externalEvents).subscriptionChange.apply(_this$table$externalE2, arguments); + } ////////////////////////////////////////// + //////////////// Options ///////////////// + ////////////////////////////////////////// + + }, { + key: "options", + value: function options(key, value) { + if (typeof value !== "undefined") { + this.table.options[key] = value; + } + + return this.table.options[key]; + } + }, { + key: "setOption", + value: function setOption(key, value) { + if (typeof value !== "undefined") { + this.table.options[key] = value; + } + + return this.table.options[key]; + } ////////////////////////////////////////// + //////////////// Modules ///////////////// + ////////////////////////////////////////// + + }, { + key: "module", + value: function module(key) { + return this.table.module(key); + } + }]); + + return CoreFeature; + }(); + //public column object - var ColumnComponent$1 = /*#__PURE__*/function () { + var ColumnComponent = /*#__PURE__*/function () { function ColumnComponent(column) { _classCallCheck(this, ColumnComponent); this._column = column; this.type = "ColumnComponent"; + return new Proxy(this, { + get: function get(target, name, receiver) { + if (typeof target[name] !== "undefined") { + return target[name]; + } else { + return target._column.table.componentFunctionBinder.handle("column", target._column, name); + } + } + }); } _createClass(ColumnComponent, [{ @@ -679,34 +561,6 @@ value: function getTable() { return this._column.table; } - }, { - key: "headerFilterFocus", - value: function headerFilterFocus() { - if (this._column.table.modExists("filter", true)) { - this._column.table.modules.filter.setHeaderFilterFocus(this._column); - } - } - }, { - key: "reloadHeaderFilter", - value: function reloadHeaderFilter() { - if (this._column.table.modExists("filter", true)) { - this._column.table.modules.filter.reloadHeaderFilter(this._column); - } - } - }, { - key: "getHeaderFilterValue", - value: function getHeaderFilterValue() { - if (this._column.table.modExists("filter", true)) { - return this._column.table.modules.filter.getHeaderFilterValue(this._column); - } - } - }, { - key: "setHeaderFilterValue", - value: function setHeaderFilterValue(value) { - if (this._column.table.modExists("filter", true)) { - this._column.table.modules.filter.setHeaderFilterValue(this._column, value); - } - } }, { key: "move", value: function move(to, after) { @@ -753,31 +607,49 @@ result = this._column.setWidth(width); } - if (this._column.table.options.virtualDomHoz) { - this._column.table.vdomHoz.reinitialize(true); - } + this._column.table.columnManager.renderer.rerenderColumns(true); return result; } - }, { - key: "validate", - value: function validate() { - return this._column.validate(); - } }]); return ColumnComponent; }(); - var defaultOptions$1 = ["title", "field", "columns", "visible", "hozAlign", "vertAlign", "width", "minWidth", "maxWidth", "widthGrow", "widthShrink", "resizable", "frozen", "responsive", "tooltip", "cssClass", "rowHandle", "print", "htmlOutput", "sorter", "sorterParams", "formatter", "formatterParams", "variableHeight", "editable", "editor", "editorParams", "validator", "mutator", "mutatorParams", "mutatorData", "mutatorDataParams", "mutatorEdit", "mutatorEditParams", "mutatorClipboard", "mutatorClipboardParams", "accessor", "accessorParams", "accessorData", "accessorDataParams", "accessorDownload", "accessorDownloadParams", "accessorClipboard", "accessorClipboardParams", "accessorPrint", "accessorPrintParams", "accessorHtmlOutput", "accessorHtmlOutputParams", "clipboard", "download", "topCalc", "topCalcParams", "topCalcFormatter", "topCalcFormatterParams", "bottomCalc", "bottomCalcParams", "bottomCalcFormatter", "bottomCalcFormatterParams", "cellClick", "cellDblClick", "cellContext", "cellTap", "cellDblTap", "cellTapHold", "cellMouseEnter", "cellMouseLeave", "cellMouseOver", "cellMouseOut", "cellMouseMove", "cellEditing", "cellEdited", "cellEditCancelled", "headerSort", "headerSortStartingDir", "headerSortTristate", "headerClick", "headerDblClick", "headerContext", "headerTap", "headerDblTap", "headerTapHold", "headerTooltip", "headerVertical", "headerHozAlign", "editableTitle", "titleFormatter", "titleFormatterParams", "headerFilter", "headerFilterPlaceholder", "headerFilterParams", "headerFilterEmptyCheck", "headerFilterFunc", "headerFilterFuncParams", "headerFilterLiveFilter", "print", "headerContextMenu", "headerMenu", "contextMenu", // "headerClickMenu", - "clickMenu", "formatterPrint", "formatterPrintParams", "formatterClipboard", "formatterClipboardParams", "formatterHtmlOutput", "formatterHtmlOutputParams", "titlePrint", "titleClipboard", "titleHtmlOutput", "titleDownload"]; + var defaultOptions$1 = { + "title": undefined, + "field": undefined, + "columns": undefined, + "visible": undefined, + "hozAlign": undefined, + "vertAlign": undefined, + "width": undefined, + "minWidth": 40, + "maxWidth": undefined, + "tooltip": undefined, + "cssClass": undefined, + "variableHeight": undefined, + "headerTooltip": undefined, + "headerVertical": undefined, + "headerHozAlign": undefined, + "editableTitle": undefined + }; //public cell object - var CellComponent$1 = /*#__PURE__*/function () { + var CellComponent = /*#__PURE__*/function () { function CellComponent(cell) { _classCallCheck(this, CellComponent); this._cell = cell; + return new Proxy(this, { + get: function get(target, name, receiver) { + if (typeof target[name] !== "undefined") { + return target[name]; + } else { + return target._cell.table.componentFunctionBinder.handle("cell", target._cell, name); + } + } + }); } _createClass(CellComponent, [{ @@ -839,50 +711,6 @@ value: function restoreInitialValue() { this._cell.setValueActual(this._cell.initialValue); } - }, { - key: "edit", - value: function edit(force) { - return this._cell.edit(force); - } - }, { - key: "cancelEdit", - value: function cancelEdit() { - this._cell.cancelEdit(); - } - }, { - key: "isEdited", - value: function isEdited() { - return !!this._cell.modules.edit && this._cell.modules.edit.edited; - } - }, { - key: "clearEdited", - value: function clearEdited() { - if (this._cell.table.modExists("edit", true)) { - this._cell.table.modules.edit.clearEdited(this._cell); - } - } - }, { - key: "isValid", - value: function isValid() { - return this._cell.modules.validate ? !this._cell.modules.validate.invalid : true; - } - }, { - key: "validate", - value: function validate() { - return this._cell.validate(); - } - }, { - key: "clearValidation", - value: function clearValidation() { - if (this._cell.table.modExists("validate", true)) { - this._cell.table.modules.validate.clearValidation(this._cell); - } - } - }, { - key: "nav", - value: function nav() { - return this._cell.nav(); - } }, { key: "checkHeight", value: function checkHeight() { @@ -903,25 +731,34 @@ return CellComponent; }(); - var Cell$1 = /*#__PURE__*/function () { + var Cell$1 = /*#__PURE__*/function (_CoreFeature) { + _inherits(Cell, _CoreFeature); + + var _super = _createSuper(Cell); + function Cell(column, row) { + var _this; + _classCallCheck(this, Cell); - this.table = column.table; - this.column = column; - this.row = row; - this.element = null; - this.value = null; - this.initialValue; - this.oldValue = null; - this.modules = {}; - this.height = null; - this.width = null; - this.minWidth = null; - this.component = null; - this.loaded = false; //track if the cell has been added to the DOM yet + _this = _super.call(this, column.table); + _this.table = column.table; + _this.column = column; + _this.row = row; + _this.element = null; + _this.value = null; + _this.initialValue; + _this.oldValue = null; + _this.modules = {}; + _this.height = null; + _this.width = null; + _this.minWidth = null; + _this.component = null; + _this.loaded = false; //track if the cell has been added to the DOM yet + + _this.build(); - this.build(); + return _this; } //////////////// Setup Functions ///////////////// //generate element @@ -948,10 +785,9 @@ }, { key: "_configureCell", value: function _configureCell() { - var _this = this; + var _this2 = this; - var cellEvents = this.column.cellEvents, - element = this.element, + var element = this.element, field = this.column.getField(), vertAligns = { top: "flex-start", @@ -990,393 +826,123 @@ if (this.table.options.tooltipGenerationMode === "hover") { element.addEventListener("mouseenter", function (e) { - _this._generateTooltip(); + _this2._generateTooltip(); }); } - this._bindClickEvents(cellEvents); - - this._bindTouchEvents(cellEvents); - - this._bindMouseEvents(cellEvents); - - if (this.column.modules.edit) { - this.table.modules.edit.bindEditor(this); - } - - if (this.column.definition.rowHandle && this.table.options.movableRows !== false && this.table.modExists("moveRow")) { - this.table.modules.moveRow.initializeCell(this); - } //hide cell if not visible - + this.dispatch("cell-init", this); //hide cell if not visible if (!this.column.visible) { this.hide(); } - } - }, { - key: "_bindClickEvents", - value: function _bindClickEvents(cellEvents) { - var _this2 = this; - - var element = this.element; //set event bindings - - if (cellEvents.cellClick || this.table.options.cellClick) { - element.addEventListener("click", function (e) { - var component = _this2.getComponent(); - - if (cellEvents.cellClick) { - cellEvents.cellClick.call(_this2.table, e, component); - } - - if (_this2.table.options.cellClick) { - _this2.table.options.cellClick.call(_this2.table, e, component); - } - }); - } + } //generate cell contents - if (cellEvents.cellDblClick || this.table.options.cellDblClick) { - element.addEventListener("dblclick", function (e) { - var component = _this2.getComponent(); + }, { + key: "_generateContents", + value: function _generateContents() { + var _this3 = this; - if (cellEvents.cellDblClick) { - cellEvents.cellDblClick.call(_this2.table, e, component); - } + var val; + val = this.chain("cell-format", this, null, function () { + return _this3.element.innerHTML = _this3.value; + }); - if (_this2.table.options.cellDblClick) { - _this2.table.options.cellDblClick.call(_this2.table, e, component); - } - }); - } else { - element.addEventListener("dblclick", function (e) { - if (_this2.table.modExists("edit")) { - if (_this2.table.modules.edit.currentCell === _this2) { - return; //prevent instant selection of editor content + switch (_typeof(val)) { + case "object": + if (val instanceof Node) { + //clear previous cell contents + while (this.element.firstChild) { + this.element.removeChild(this.element.firstChild); } - } - e.preventDefault(); + this.element.appendChild(val); + } else { + this.element.innerHTML = ""; - try { - if (document.selection) { - // IE - var range = document.body.createTextRange(); - range.moveToElementText(_this2.element); - range.select(); - } else if (window.getSelection) { - var range = document.createRange(); - range.selectNode(_this2.element); - window.getSelection().removeAllRanges(); - window.getSelection().addRange(range); + if (val != null) { + console.warn("Format Error - Formatter has returned a type of object, the only valid formatter object return is an instance of Node, the formatter returned:", val); } - } catch (e) {} - }); - } + } - if (cellEvents.cellContext || this.table.options.cellContext) { - element.addEventListener("contextmenu", function (e) { - var component = _this2.getComponent(); + break; - if (cellEvents.cellContext) { - cellEvents.cellContext.call(_this2.table, e, component); - } + case "undefined": + case "null": + this.element.innerHTML = ""; + break; - if (_this2.table.options.cellContext) { - _this2.table.options.cellContext.call(_this2.table, e, component); - } - }); + default: + this.element.innerHTML = val; } } }, { - key: "_bindMouseEvents", - value: function _bindMouseEvents(cellEvents) { - var _this3 = this; - - var element = this.element; + key: "cellRendered", + value: function cellRendered() { + this.dispatch("cell-rendered", this); + } //generate tooltip text - if (cellEvents.cellMouseEnter || this.table.options.cellMouseEnter) { - element.addEventListener("mouseenter", function (e) { - var component = _this3.getComponent(); + }, { + key: "_generateTooltip", + value: function _generateTooltip() { + var tooltip = this.column.tooltip; - if (cellEvents.cellMouseEnter) { - cellEvents.cellMouseEnter.call(_this3.table, e, component); - } + if (tooltip) { + if (tooltip === true) { + tooltip = this.value; + } else if (typeof tooltip == "function") { + tooltip = tooltip(this.getComponent()); - if (_this3.table.options.cellMouseEnter) { - _this3.table.options.cellMouseEnter.call(_this3.table, e, component); + if (tooltip === false) { + tooltip = ""; } - }); - } - - if (cellEvents.cellMouseLeave || this.table.options.cellMouseLeave) { - element.addEventListener("mouseleave", function (e) { - var component = _this3.getComponent(); + } - if (cellEvents.cellMouseLeave) { - cellEvents.cellMouseLeave.call(_this3.table, e, component); - } + if (typeof tooltip === "undefined") { + tooltip = ""; + } - if (_this3.table.options.cellMouseLeave) { - _this3.table.options.cellMouseLeave.call(_this3.table, e, component); - } - }); + this.element.setAttribute("title", tooltip); + } else { + this.element.setAttribute("title", ""); } + } //////////////////// Getters //////////////////// - if (cellEvents.cellMouseOver || this.table.options.cellMouseOver) { - element.addEventListener("mouseover", function (e) { - var component = _this3.getComponent(); - - if (cellEvents.cellMouseOver) { - cellEvents.cellMouseOver.call(_this3.table, e, component); - } + }, { + key: "getElement", + value: function getElement(containerOnly) { + if (!this.loaded) { + this.loaded = true; - if (_this3.table.options.cellMouseOver) { - _this3.table.options.cellMouseOver.call(_this3.table, e, component); - } - }); + if (!containerOnly) { + this.layoutElement(); + } } - if (cellEvents.cellMouseOut || this.table.options.cellMouseOut) { - element.addEventListener("mouseout", function (e) { - var component = _this3.getComponent(); - - if (cellEvents.cellMouseOut) { - cellEvents.cellMouseOut.call(_this3.table, e, component); - } - - if (_this3.table.options.cellMouseOut) { - _this3.table.options.cellMouseOut.call(_this3.table, e, component); - } - }); - } - - if (cellEvents.cellMouseMove || this.table.options.cellMouseMove) { - element.addEventListener("mousemove", function (e) { - var component = _this3.getComponent(); - - if (cellEvents.cellMouseMove) { - cellEvents.cellMouseMove.call(_this3.table, e, component); - } - - if (_this3.table.options.cellMouseMove) { - _this3.table.options.cellMouseMove.call(_this3.table, e, component); - } - }); - } - } - }, { - key: "_bindTouchEvents", - value: function _bindTouchEvents(cellEvents) { - var _this4 = this; - - var element = this.element, - dblTap, - tapHold, - tap; - - if (cellEvents.cellTap || this.table.options.cellTap) { - tap = false; - element.addEventListener("touchstart", function (e) { - tap = true; - }, { - passive: true - }); - element.addEventListener("touchend", function (e) { - if (tap) { - var component = _this4.getComponent(); - - if (cellEvents.cellTap) { - cellEvents.cellTap.call(_this4.table, e, component); - } - - if (_this4.table.options.cellTap) { - _this4.table.options.cellTap.call(_this4.table, e, component); - } - } - - tap = false; - }); - } - - if (cellEvents.cellDblTap || this.table.options.cellDblTap) { - dblTap = null; - element.addEventListener("touchend", function (e) { - if (dblTap) { - clearTimeout(dblTap); - dblTap = null; - - var component = _this4.getComponent(); - - if (cellEvents.cellDblTap) { - cellEvents.cellDblTap.call(_this4.table, e, component); - } - - if (_this4.table.options.cellDblTap) { - _this4.table.options.cellDblTap.call(_this4.table, e, component); - } - } else { - dblTap = setTimeout(function () { - clearTimeout(dblTap); - dblTap = null; - }, 300); - } - }); - } - - if (cellEvents.cellTapHold || this.table.options.cellTapHold) { - tapHold = null; - element.addEventListener("touchstart", function (e) { - clearTimeout(tapHold); - tapHold = setTimeout(function () { - clearTimeout(tapHold); - tapHold = null; - tap = false; - - var component = _this4.getComponent(); - - if (cellEvents.cellTapHold) { - cellEvents.cellTapHold.call(_this4.table, e, component); - } - - if (_this4.table.options.cellTapHold) { - _this4.table.options.cellTapHold.call(_this4.table, e, component); - } - }, 1000); - }, { - passive: true - }); - element.addEventListener("touchend", function (e) { - clearTimeout(tapHold); - tapHold = null; - }); - } - } //generate cell contents - - }, { - key: "_generateContents", - value: function _generateContents() { - var val; - - if (this.table.modExists("format")) { - val = this.table.modules.format.formatValue(this); - } else { - val = this.element.innerHTML = this.value; - } - - switch (_typeof(val)) { - case "object": - if (val instanceof Node) { - //clear previous cell contents - while (this.element.firstChild) { - this.element.removeChild(this.element.firstChild); - } - - this.element.appendChild(val); - } else { - this.element.innerHTML = ""; - - if (val != null) { - console.warn("Format Error - Formatter has returned a type of object, the only valid formatter object return is an instance of Node, the formatter returned:", val); - } - } - - break; - - case "undefined": - case "null": - this.element.innerHTML = ""; - break; - - default: - this.element.innerHTML = val; - } - } - }, { - key: "cellRendered", - value: function cellRendered() { - if (this.table.modExists("format") && this.table.modules.format.cellRendered) { - this.table.modules.format.cellRendered(this); - } - } //generate tooltip text - - }, { - key: "_generateTooltip", - value: function _generateTooltip() { - var tooltip = this.column.tooltip; - - if (tooltip) { - if (tooltip === true) { - tooltip = this.value; - } else if (typeof tooltip == "function") { - tooltip = tooltip(this.getComponent()); - - if (tooltip === false) { - tooltip = ""; - } - } - - if (typeof tooltip === "undefined") { - tooltip = ""; - } - - this.element.setAttribute("title", tooltip); - } else { - this.element.setAttribute("title", ""); - } - } //////////////////// Getters //////////////////// - - }, { - key: "getElement", - value: function getElement(containerOnly) { - if (!this.loaded) { - this.loaded = true; - - if (!containerOnly) { - this.layoutElement(); - } - } - - return this.element; - } - }, { - key: "getValue", - value: function getValue() { - return this.value; - } - }, { - key: "getOldValue", - value: function getOldValue() { - return this.oldValue; - } //////////////////// Actions //////////////////// + return this.element; + } + }, { + key: "getValue", + value: function getValue() { + return this.value; + } + }, { + key: "getOldValue", + value: function getOldValue() { + return this.oldValue; + } //////////////////// Actions //////////////////// }, { key: "setValue", value: function setValue(value, mutate) { - var changed = this.setValueProcessData(value, mutate), - component; + var changed = this.setValueProcessData(value, mutate); if (changed) { - if (this.table.options.history && this.table.modExists("history")) { - this.table.modules.history.action("cellEdit", this, { - oldValue: this.oldValue, - newValue: this.value - }); - } - - component = this.getComponent(); - - if (this.column.cellEvents.cellEdited) { - this.column.cellEvents.cellEdited.call(this.table, component); - } - - if (this.table.options.groupUpdateOnCellEdit && this.table.options.groupBy && this.table.modExists("groupRows")) { - this.table.modules.groupRows.reassignRowToGroup(this.row); - } - + this.dispatch("cell-value-updated", this); this.cellRendered(); - this.table.options.cellEdited.call(this.table, component); + this.dispatchExternal("cellEdited", this.getComponent()); - if (this.table.options.dataChanged) { - this.table.options.dataChanged.call(this.table, this.table.rowManager.getData()); + if (this.subscribedExternal("dataChanged")) { + this.dispatchExternal("dataChanged", this.table.rowManager.getData()); } } } @@ -1389,28 +955,14 @@ changed = true; if (mutate) { - if (this.column.modules.mutate) { - value = this.table.modules.mutator.transformCell(this, value); - } + value = this.chain("cell-value-changing", [this, value], null, value); } } this.setValueActual(value); - if (changed && this.table.modExists("columnCalcs")) { - if (this.column.definition.topCalc || this.column.definition.bottomCalc) { - if (this.table.options.groupBy && this.table.modExists("groupRows")) { - if (this.table.options.columnCalcs == "table" || this.table.options.columnCalcs == "both") { - this.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows); - } - - if (this.table.options.columnCalcs != "table") { - this.table.modules.columnCalcs.recalcRowGroup(this.row); - } - } else { - this.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows); - } - } + if (changed) { + this.dispatch("cell-value-changed", this); } return changed; @@ -1420,16 +972,9 @@ value: function setValueActual(value) { this.oldValue = this.value; this.value = value; - - if (this.table.options.reactiveData && this.table.modExists("reactiveData")) { - this.table.modules.reactiveData.block(); - } - + this.dispatch("cell-value-save-before", this); this.column.setFieldValue(this.row.data, value); - - if (this.table.options.reactiveData && this.table.modExists("reactiveData")) { - this.table.modules.reactiveData.unblock(); - } + this.dispatch("cell-value-save-after", this); if (this.loaded) { this.layoutElement(); @@ -1440,21 +985,9 @@ value: function layoutElement() { this._generateContents(); - this._generateTooltip(); //set resizable handles - - - if (this.table.options.resizableColumns && this.table.modExists("resizeColumns") && this.row.type === "row") { - this.table.modules.resizeColumns.initializeColumn("cell", this.column, this.element); - } - - if ((this.column.definition.contextMenu || this.column.definition.clickMenu) && this.table.modExists("menu")) { - this.table.modules.menu.initializeCell(this); - } //handle frozen cells - + this._generateTooltip(); - if (this.table.modExists("frozenColumns")) { - this.table.modules.frozenColumns.layoutElement(this.element, this.column); - } + this.dispatch("cell-layout", this); } }, { key: "setWidth", @@ -1518,265 +1051,125 @@ value: function hide() { this.element.style.display = "none"; } - }, { - key: "edit", - value: function edit(force) { - if (this.table.modExists("edit", true)) { - return this.table.modules.edit.editCell(this, force); - } - } - }, { - key: "cancelEdit", - value: function cancelEdit() { - if (this.table.modExists("edit", true)) { - var editing = this.table.modules.edit.getCurrentCell(); - - if (editing && editing._getSelf() === this) { - this.table.modules.edit.cancelEdit(); - } else { - console.warn("Cancel Editor Error - This cell is not currently being edited "); - } - } - } - }, { - key: "validate", - value: function validate() { - if (this.column.modules.validate && this.table.modExists("validate", true)) { - var valid = this.table.modules.validate.validate(this.column.modules.validate, this, this.getValue()); - return valid === true; - } else { - return true; - } - } }, { key: "delete", value: function _delete() { + this.dispatch("cell-delete", this); + if (!this.table.rowManager.redrawBlock && this.element.parentNode) { this.element.parentNode.removeChild(this.element); } - if (this.modules.validate && this.modules.validate.invalid) { - this.table.modules.validate.clearValidation(this); - } - - if (this.modules.edit && this.modules.edit.edited) { - this.table.modules.edit.clearEdited(this); - } - - if (this.table.options.history) { - this.table.modules.history.clearComponentHistory(this); - } - this.element = false; this.column.deleteCell(this); this.row.deleteCell(this); this.calcs = {}; - } //////////////// Navigation ///////////////// + } + }, { + key: "getIndex", + value: function getIndex() { + return this.row.getCellIndex(this); + } //////////////// Object Generation ///////////////// }, { - key: "nav", - value: function nav() { - var self = this, - nextCell = false, - index = this.row.getCellIndex(this); - return { - next: function next() { - var nextCell = this.right(), - nextRow; + key: "getComponent", + value: function getComponent() { + if (!this.component) { + this.component = new CellComponent(this); + } - if (!nextCell) { - nextRow = self.table.rowManager.nextDisplayRow(self.row, true); + return this.component; + } + }]); - if (nextRow) { - nextCell = nextRow.findNextEditableCell(-1); + return Cell; + }(CoreFeature); - if (nextCell) { - nextCell.edit(); - return true; - } - } - } else { - return true; - } + var Column$1 = /*#__PURE__*/function (_CoreFeature) { + _inherits(Column, _CoreFeature); - return false; - }, - prev: function prev() { - var nextCell = this.left(), - prevRow; + var _super = _createSuper(Column); - if (!nextCell) { - prevRow = self.table.rowManager.prevDisplayRow(self.row, true); + function Column(def, parent) { + var _this; - if (prevRow) { - nextCell = prevRow.findPrevEditableCell(prevRow.cells.length); + _classCallCheck(this, Column); - if (nextCell) { - nextCell.edit(); - return true; - } - } - } else { - return true; - } + _this = _super.call(this, parent.table); + _this.definition = def; //column definition - return false; - }, - left: function left() { - nextCell = self.row.findPrevEditableCell(index); + _this.parent = parent; //hold parent object - if (nextCell) { - nextCell.edit(); - return true; - } else { - return false; - } - }, - right: function right() { - nextCell = self.row.findNextEditableCell(index); + _this.type = "column"; //type of element - if (nextCell) { - nextCell.edit(); - return true; - } else { - return false; - } - }, - up: function up() { - var nextRow = self.table.rowManager.prevDisplayRow(self.row, true); - - if (nextRow) { - nextRow.cells[index].edit(); - } - }, - down: function down() { - var nextRow = self.table.rowManager.nextDisplayRow(self.row, true); - - if (nextRow) { - nextRow.cells[index].edit(); - } - } - }; - } - }, { - key: "getIndex", - value: function getIndex() { - this.row.getCellIndex(this); - } //////////////// Object Generation ///////////////// - - }, { - key: "getComponent", - value: function getComponent() { - if (!this.component) { - this.component = new CellComponent$1(this); - } - - return this.component; - } - }]); - - return Cell; - }(); + _this.columns = []; //child columns - var Column$1 = /*#__PURE__*/function () { - function Column(def, parent) { - var _this = this; - - _classCallCheck(this, Column); + _this.cells = []; //cells bound to this column - this.table = parent.table; - this.definition = def; //column definition + _this.element = _this.createElement(); //column header element - this.parent = parent; //hold parent object + _this.contentElement = false; + _this.titleHolderElement = false; + _this.titleElement = false; + _this.groupElement = _this.createGroupElement(); //column group holder element - this.type = "column"; //type of element + _this.isGroup = false; + _this.tooltip = false; //hold column tooltip - this.columns = []; //child columns + _this.hozAlign = ""; //horizontal text alignment - this.cells = []; //cells bound to this column - - this.element = this.createElement(); //column header element - - this.contentElement = false; - this.titleHolderElement = false; - this.titleElement = false; - this.groupElement = this.createGroupElement(); //column group holder element + _this.vertAlign = ""; //vert text alignment + //multi dimensional filed handling - this.isGroup = false; - this.tooltip = false; //hold column tooltip + _this.field = ""; + _this.fieldStructure = ""; + _this.getFieldValue = ""; + _this.setFieldValue = ""; + _this.titleFormatterRendered = false; - this.hozAlign = ""; //horizontal text alignment + _this.mapDefinitions(); - this.vertAlign = ""; //vert text alignment - //multi dimensional filed handling + _this.setField(_this.definition.field); - this.field = ""; - this.fieldStructure = ""; - this.getFieldValue = ""; - this.setFieldValue = ""; - this.titleFormatterRendered = false; - this.mapDefinitionDefaults(); - this.setField(this.definition.field); - - if (this.table.options.invalidOptionWarnings) { - this.checkDefinition(); - } - - this.modules = {}; //hold module variables; - - this.cellEvents = { - cellClick: false, - cellDblClick: false, - cellContext: false, - cellTap: false, - cellDblTap: false, - cellTapHold: false, - cellMouseEnter: false, - cellMouseLeave: false, - cellMouseOver: false, - cellMouseOut: false, - cellMouseMove: false - }; - this.width = null; //column width + _this.modules = {}; //hold module variables; - this.widthStyled = ""; //column width prestyled to improve render efficiency + _this.width = null; //column width - this.maxWidth = null; //column maximum width + _this.widthStyled = ""; //column width prestyled to improve render efficiency - this.maxWidthStyled = ""; //column maximum prestyled to improve render efficiency + _this.maxWidth = null; //column maximum width - this.minWidth = null; //column minimum width + _this.maxWidthStyled = ""; //column maximum prestyled to improve render efficiency - this.minWidthStyled = ""; //column minimum prestyled to improve render efficiency + _this.minWidth = null; //column minimum width - this.widthFixed = false; //user has specified a width for this column + _this.minWidthStyled = ""; //column minimum prestyled to improve render efficiency - this.visible = true; //default visible state + _this.widthFixed = false; //user has specified a width for this column - this.component = null; + _this.visible = true; //default visible state - this._mapDepricatedFunctionality(); //initialize column + _this.component = null; //initialize column + if (_this.definition.columns) { + _this.isGroup = true; - if (def.columns) { - this.isGroup = true; - def.columns.forEach(function (def, i) { - var newCol = new Column(def, _this); + _this.definition.columns.forEach(function (def, i) { + var newCol = new Column(def, _assertThisInitialized(_this)); _this.attachColumn(newCol); }); - this.checkColumnVisibility(); + + _this.checkColumnVisibility(); } else { - parent.registerColumnField(this); + parent.registerColumnField(_assertThisInitialized(_this)); } - if (def.rowHandle && this.table.options.movableRows !== false && this.table.modExists("moveRow")) { - this.table.modules.moveRow.setHandle(true); - } + _this._initialize(); - this._buildHeader(); + _this.bindModuleColumns(); - this.bindModuleColumns(); + return _this; } _createClass(Column, [{ @@ -1796,9 +1189,9 @@ return el; } }, { - key: "mapDefinitionDefaults", - value: function mapDefinitionDefaults() { - var defaults = this.table.options.columnDefaults; + key: "mapDefinitions", + value: function mapDefinitions() { + var defaults = this.table.options.columnDefaults; //map columnDefaults onto column definitions if (defaults) { for (var key in defaults) { @@ -1807,6 +1200,8 @@ } } } + + this.definition = this.table.columnManager.optionsList.generate(Column.defaultOptionList, this.definition); } }, { key: "checkDefinition", @@ -1862,12 +1257,12 @@ var def = this.definition; //set header tooltips - var tooltip = def.headerTooltip || def.tooltip === false ? def.headerTooltip : this.table.options.tooltipsHeader; + var tooltip = typeof def.headerTooltip === "undefined" ? def.tooltip : def.headerTooltip; if (tooltip) { if (tooltip === true) { if (def.field) { - this.table.modules.localize.bind("columns|" + def.field, function (value) { + this.langBind("columns|" + def.field, function (value) { _this3.element.setAttribute("title", value || def.title); }); } else { @@ -1890,8 +1285,8 @@ } //build header element }, { - key: "_buildHeader", - value: function _buildHeader() { + key: "_initialize", + value: function _initialize() { var _this4 = this; var def = this.definition; @@ -1918,41 +1313,8 @@ this._buildColumnHeader(); } - this.setTooltip(); //set resizable handles - - if (this.table.options.resizableColumns && this.table.modExists("resizeColumns")) { - this.table.modules.resizeColumns.initializeColumn("header", this, this.element); - } //set resizable handles - - - if (def.headerFilter && this.table.modExists("filter") && this.table.modExists("edit")) { - if (typeof def.headerFilterPlaceholder !== "undefined" && def.field) { - this.table.modules.localize.setHeaderFilterColumnPlaceholder(def.field, def.headerFilterPlaceholder); - } - - this.table.modules.filter.initializeColumn(this); - } //set resizable handles - - - if (this.table.modExists("frozenColumns")) { - this.table.modules.frozenColumns.initializeColumn(this); - } //set movable column - - - if (this.table.options.movableColumns && !this.isGroup && this.table.modExists("moveColumn")) { - this.table.modules.moveColumn.initializeColumn(this); - } //set calcs column - - - if ((def.topCalc || def.bottomCalc) && this.table.modExists("columnCalcs")) { - this.table.modules.columnCalcs.initializeColumn(this); - } //handle persistence - - - if (this.table.modExists("persistence") && this.table.modules.persistence.config.columns) { - this.table.modules.persistence.initializeColumn(this); - } //update header tooltip on mouse enter - + this.setTooltip(); + this.dispatch("column-init", this); //update header tooltip on mouse enter this.element.addEventListener("mouseenter", function (e) { _this4.setTooltip(); @@ -2036,66 +1398,6 @@ clearTimeout(tapHold); tapHold = null; }); - } //store column cell click event bindings - - - if (typeof def.cellClick == "function") { - this.cellEvents.cellClick = def.cellClick; - } - - if (typeof def.cellDblClick == "function") { - this.cellEvents.cellDblClick = def.cellDblClick; - } - - if (typeof def.cellContext == "function") { - this.cellEvents.cellContext = def.cellContext; - } //store column mouse event bindings - - - if (typeof def.cellMouseEnter == "function") { - this.cellEvents.cellMouseEnter = def.cellMouseEnter; - } - - if (typeof def.cellMouseLeave == "function") { - this.cellEvents.cellMouseLeave = def.cellMouseLeave; - } - - if (typeof def.cellMouseOver == "function") { - this.cellEvents.cellMouseOver = def.cellMouseOver; - } - - if (typeof def.cellMouseOut == "function") { - this.cellEvents.cellMouseOut = def.cellMouseOut; - } - - if (typeof def.cellMouseMove == "function") { - this.cellEvents.cellMouseMove = def.cellMouseMove; - } //setup column cell tap event bindings - - - if (typeof def.cellTap == "function") { - this.cellEvents.cellTap = def.cellTap; - } - - if (typeof def.cellDblTap == "function") { - this.cellEvents.cellDblTap = def.cellDblTap; - } - - if (typeof def.cellTapHold == "function") { - this.cellEvents.cellTapHold = def.cellTapHold; - } //setup column cell edit callbacks - - - if (typeof def.cellEdited == "function") { - this.cellEvents.cellEdited = def.cellEdited; - } - - if (typeof def.cellEditing == "function") { - this.cellEvents.cellEditing = def.cellEditing; - } - - if (typeof def.cellEditCancelled == "function") { - this.cellEvents.cellEditCancelled = def.cellEditCancelled; } } //build header element for header @@ -2106,47 +1408,7 @@ var def = this.definition, table = this.table; - //set column sorter - - if (table.modExists("sort")) { - table.modules.sort.initializeColumn(this, this.titleHolderElement); - } //set column header context menu - - - if ((def.headerContextMenu || def.headerClickMenu || def.headerMenu) && table.modExists("menu")) { - table.modules.menu.initializeColumnHeader(this); - } //set column formatter - - - if (table.modExists("format")) { - table.modules.format.initializeColumn(this); - } //set column editor - - - if (typeof def.editor != "undefined" && table.modExists("edit")) { - table.modules.edit.initializeColumn(this); - } //set colum validator - - - if (typeof def.validator != "undefined" && table.modExists("validate")) { - table.modules.validate.initializeColumn(this); - } //set column mutator - - - if (table.modExists("mutator")) { - table.modules.mutator.initializeColumn(this); - } //set column accessor - - - if (table.modExists("accessor")) { - table.modules.accessor.initializeColumn(this); - } //set respoviveLayout - - - if (_typeof(table.options.responsiveLayout) && table.modExists("responsiveLayout")) { - table.modules.responsiveLayout.initializeColumn(this); - } //set column visibility - + this.dispatch("column-layout", this); //set column visibility if (typeof def.visible != "undefined") { if (def.visible) { @@ -2169,21 +1431,19 @@ } //set min width if present - this.setMinWidth(typeof def.minWidth == "undefined" ? this.table.options.columnMinWidth : parseInt(def.minWidth)); + this.setMinWidth(parseInt(def.minWidth)); - if (def.maxWidth || this.table.options.columnMaxWidth) { - if (def.maxWidth !== false) { - this.setMaxWidth(typeof def.maxWidth == "undefined" ? this.table.options.columnMaxWidth : parseInt(def.maxWidth)); - } + if (def.maxWidth) { + this.setMaxWidth(parseInt(def.maxWidth)); } this.reinitializeWidth(); //set tooltip if present - this.tooltip = this.definition.tooltip || this.definition.tooltip === false ? this.definition.tooltip : this.table.options.tooltips; //set orizontal text alignment + this.tooltip = this.definition.tooltip; //set orizontal text alignment - this.hozAlign = typeof this.definition.hozAlign == "undefined" ? this.table.options.cellHozAlign : this.definition.hozAlign; - this.vertAlign = typeof this.definition.vertAlign == "undefined" ? this.table.options.cellVertAlign : this.definition.vertAlign; - this.titleElement.style.textAlign = this.definition.headerHozAlign || this.table.options.headerHozAlign; + this.hozAlign = this.definition.hozAlign; + this.vertAlign = this.definition.vertAlign; + this.titleElement.style.textAlign = this.definition.headerHozAlign; } }, { key: "_buildColumnHeaderContent", @@ -2205,8 +1465,7 @@ value: function _buildColumnHeaderTitle() { var _this7 = this; - var def = this.definition, - table = this.table; + var def = this.definition; var titleHolderElement = document.createElement("div"); titleHolderElement.classList.add("tabulator-col-title"); @@ -2219,12 +1478,13 @@ }); titleElement.addEventListener("change", function () { def.title = titleElement.value; - table.options.columnTitleChanged.call(_this7.table, _this7.getComponent()); + + _this7.dispatchExternal("columnTitleChanged", _this7.getComponent()); }); titleHolderElement.appendChild(titleElement); if (def.field) { - table.modules.localize.bind("columns|" + def.field, function (text) { + this.langBind("columns|" + def.field, function (text) { titleElement.value = text || def.title || " "; }); } else { @@ -2232,7 +1492,7 @@ } } else { if (def.field) { - table.modules.localize.bind("columns|" + def.field, function (text) { + this.langBind("columns|" + def.field, function (text) { _this7._formatColumnHeaderTitle(titleHolderElement, text || def.title || " "); }); } else { @@ -2245,57 +1505,35 @@ }, { key: "_formatColumnHeaderTitle", value: function _formatColumnHeaderTitle(el, title) { - var _this8 = this; - - var formatter, contents, params, mockCell, onRendered; - - if (this.definition.titleFormatter && this.table.modExists("format")) { - formatter = this.table.modules.format.getFormatter(this.definition.titleFormatter); - - onRendered = function onRendered(callback) { - _this8.titleFormatterRendered = callback; - }; + var contents = this.chain("column-format", [this, title, el], null, function () { + return title; + }); - mockCell = { - getValue: function getValue() { - return title; - }, - getElement: function getElement() { - return el; + switch (_typeof(contents)) { + case "object": + if (contents instanceof Node) { + el.appendChild(contents); + } else { + el.innerHTML = ""; + console.warn("Format Error - Title formatter has returned a type of object, the only valid formatter object return is an instance of Node, the formatter returned:", contents); } - }; - params = this.definition.titleFormatterParams || {}; - params = typeof params === "function" ? params() : params; - contents = formatter.call(this.table.modules.format, mockCell, params, onRendered); - - switch (_typeof(contents)) { - case "object": - if (contents instanceof Node) { - el.appendChild(contents); - } else { - el.innerHTML = ""; - console.warn("Format Error - Title formatter has returned a type of object, the only valid formatter object return is an instance of Node, the formatter returned:", contents); - } - break; + break; - case "undefined": - case "null": - el.innerHTML = ""; - break; + case "undefined": + case "null": + el.innerHTML = ""; + break; - default: - el.innerHTML = contents; - } - } else { - el.innerHTML = title; + default: + el.innerHTML = contents; } } //build header element for column group }, { key: "_buildGroupHeader", value: function _buildGroupHeader() { - var _this9 = this; + var _this8 = this; this.element.classList.add("tabulator-col-group"); this.element.setAttribute("role", "columngroup"); @@ -2304,16 +1542,11 @@ if (this.definition.cssClass) { var classeNames = this.definition.cssClass.split(" "); classeNames.forEach(function (className) { - _this9.element.classList.add(className); + _this8.element.classList.add(className); }); - } //set column header context menu - - - if ((this.definition.headerContextMenu || this.definition.headerMenu) && this.table.modExists("menu")) { - this.table.modules.menu.initializeColumnHeader(this); } - this.titleElement.style.textAlign = this.definition.headerHozAlign || this.table.options.headerHozAlign; + this.titleElement.style.textAlign = this.definition.headerHozAlign; this.element.appendChild(this.groupElement); } //flat field lookup @@ -2528,7 +1761,7 @@ if (visible) { this.show(); - this.parent.table.options.columnVisibilityChanged.call(this.table, this.getComponent(), false); + this.dispatchExternal("columnVisibilityChanged", this.getComponent(), false); } else { this.hide(); } @@ -2555,24 +1788,18 @@ this.table.columnManager._verticalAlignHeaders(); - if (this.table.options.persistence && this.table.modExists("persistence", true) && this.table.modules.persistence.config.columns) { - this.table.modules.persistence.save("columns"); - } - - if (!responsiveToggle && this.table.options.responsiveLayout && this.table.modExists("responsiveLayout", true)) { - this.table.modules.responsiveLayout.updateColumnVisibility(this, this.visible); - } + this.dispatch("column-show", this, responsiveToggle); if (!silent) { - this.table.options.columnVisibilityChanged.call(this.table, this.getComponent(), true); + this.dispatchExternal("columnVisibilityChanged", this.getComponent(), true); } if (this.parent.isGroup) { this.parent.matchChildWidths(); } - if (!this.silent && this.table.options.virtualDomHoz) { - this.table.vdomHoz.reinitialize(); + if (!this.silent) { + this.table.columnManager.renderer.rerenderColumns(); } } } //hide column @@ -2593,25 +1820,18 @@ this.cells.forEach(function (cell) { cell.hide(); }); - - if (this.table.options.persistence && this.table.modExists("persistence", true) && this.table.modules.persistence.config.columns) { - this.table.modules.persistence.save("columns"); - } - - if (!responsiveToggle && this.table.options.responsiveLayout && this.table.modExists("responsiveLayout", true)) { - this.table.modules.responsiveLayout.updateColumnVisibility(this, this.visible); - } + this.dispatch("column-hide", this); if (!silent) { - this.table.options.columnVisibilityChanged.call(this.table, this.getComponent(), false); + this.dispatchExternal("columnVisibilityChanged", this.getComponent(), false); } if (this.parent.isGroup) { this.parent.matchChildWidths(); } - if (!this.silent && this.table.options.virtualDomHoz) { - this.table.vdomHoz.reinitialize(); + if (!this.silent) { + this.table.columnManager.renderer.rerenderColumns(); } } } @@ -2677,12 +1897,9 @@ if (this.parent.isGroup) { this.parent.matchChildWidths(); - } //set resizable handles - - - if (this.table.modExists("frozenColumns")) { - this.table.modules.frozenColumns.layout(); } + + this.dispatch("column-width", this); } }, { key: "checkCellHeights", @@ -2750,47 +1967,40 @@ }, { key: "delete", value: function _delete() { - var _this10 = this; + var _this9 = this; return new Promise(function (resolve, reject) { - if (_this10.isGroup) { - _this10.columns.forEach(function (column) { + if (_this9.isGroup) { + _this9.columns.forEach(function (column) { column["delete"](); }); - } //cancel edit if column is currently being edited - - - if (_this10.table.modExists("edit")) { - if (_this10.table.modules.edit.currentCell.column === _this10) { - _this10.table.modules.edit.cancelEdit(); - } } - var cellCount = _this10.cells.length; + _this9.dispatch("column-delete", _this9); + + var cellCount = _this9.cells.length; for (var i = 0; i < cellCount; i++) { - _this10.cells[0]["delete"](); + _this9.cells[0]["delete"](); } - if (_this10.element.parentNode) { - _this10.element.parentNode.removeChild(_this10.element); + if (_this9.element.parentNode) { + _this9.element.parentNode.removeChild(_this9.element); } - _this10.element = false; - _this10.contentElement = false; - _this10.titleElement = false; - _this10.groupElement = false; + _this9.element = false; + _this9.contentElement = false; + _this9.titleElement = false; + _this9.groupElement = false; - if (_this10.parent.isGroup) { - _this10.parent.removeChild(_this10); + if (_this9.parent.isGroup) { + _this9.parent.removeChild(_this9); } - _this10.table.columnManager.deregisterColumn(_this10); + _this9.table.columnManager.deregisterColumn(_this9); - if (_this10.table.options.virtualDomHoz) { - _this10.table.vdomHoz.reinitialize(true); - } + _this9.table.columnManager.renderer.rerenderColumns(true); resolve(); }); @@ -2801,17 +2011,6 @@ if (this.titleFormatterRendered) { this.titleFormatterRendered(); } - } - }, { - key: "validate", - value: function validate() { - var invalid = []; - this.cells.forEach(function (cell) { - if (!cell.validate()) { - invalid.push(cell.getComponent()); - } - }); - return invalid.length ? invalid : true; } //////////////// Cell Management ///////////////// //generate cell for this column @@ -2853,18 +2052,11 @@ if (typeof this.definition.width !== "undefined" && !force) { this.setWidth(this.definition.width); - } //hide header filters to prevent them altering column width - - - if (this.table.modExists("filter")) { - this.table.modules.filter.hideHeaderFilterElements(); } - this.fitToData(); //show header filters again after layout is complete - - if (this.table.modExists("filter")) { - this.table.modules.filter.showHeaderFilterElements(); - } + this.dispatch("column-width-fit-before", this); + this.fitToData(); + this.dispatch("column-width-fit-after", this); } //set column width to maximum cell width }, { @@ -2896,22 +2088,22 @@ }, { key: "updateDefinition", value: function updateDefinition(updates) { - var _this11 = this; + var _this10 = this; return new Promise(function (resolve, reject) { var definition; - if (!_this11.isGroup) { - if (!_this11.parent.isGroup) { - definition = Object.assign({}, _this11.getDefinition()); + if (!_this10.isGroup) { + if (!_this10.parent.isGroup) { + definition = Object.assign({}, _this10.getDefinition()); definition = Object.assign(definition, updates); - _this11.table.columnManager.addColumn(definition, false, _this11).then(function (column) { - if (definition.field == _this11.field) { - _this11.field = false; //cleair field name to prevent deletion of duplicate column from arrays + _this10.table.columnManager.addColumn(definition, false, _this10).then(function (column) { + if (definition.field == _this10.field) { + _this10.field = false; //cleair field name to prevent deletion of duplicate column from arrays } - _this11["delete"]().then(function () { + _this10["delete"]().then(function () { resolve(column.getComponent()); })["catch"](function (err) { reject(err); @@ -2943,7 +2135,7 @@ key: "getComponent", value: function getComponent() { if (!this.component) { - this.component = new ColumnComponent$1(this); + this.component = new ColumnComponent(this); } return this.component; @@ -2951,11 +2143,11 @@ }]); return Column; - }(); + }(CoreFeature); Column$1.defaultOptionList = defaultOptions$1; - var Helpers = /*#__PURE__*/function () { + var Helpers$1 = /*#__PURE__*/function () { function Helpers() { _classCallCheck(this, Helpers); } @@ -2996,2824 +2188,2276 @@ return Helpers; }(); - var ColumnManager = /*#__PURE__*/function () { - function ColumnManager(table) { - _classCallCheck(this, ColumnManager); - - this.table = table; //hold parent table - - this.blockHozScrollEvent = false; - this.headersElement = this.createHeadersElement(); - this.element = this.createHeaderElement(); //containing element - - this.rowManager = null; //hold row manager object - - this.columns = []; // column definition object - - this.columnsByIndex = []; //columns by index - - this.columnsByField = {}; //columns by field - - this.scrollLeft = 0; - this.element.insertBefore(this.headersElement, this.element.firstChild); - } ////////////// Setup Functions ///////////////// + var OptionsList = /*#__PURE__*/function () { + function OptionsList(table, msgType) { + _classCallCheck(this, OptionsList); + this.table = table; + this.msgType = msgType; + this.registeredDefaults = {}; + } - _createClass(ColumnManager, [{ - key: "createHeadersElement", - value: function createHeadersElement() { - var el = document.createElement("div"); - el.classList.add("tabulator-headers"); - return el; + _createClass(OptionsList, [{ + key: "register", + value: function register(option, value) { + this.registeredDefaults[option] = value; } }, { - key: "createHeaderElement", - value: function createHeaderElement() { - var el = document.createElement("div"); - el.classList.add("tabulator-header"); + key: "generate", + value: function generate(defaultOptions) { + var userOptions = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + var output = Object.assign({}, this.registeredDefaults); + Object.assign(output, defaultOptions); - if (!this.table.options.headerVisible) { - el.classList.add("tabulator-header-hidden"); + if (userOptions.debugInvalidOptions !== false || this.table.options.debugInvalidOptions) { + for (var key in userOptions) { + if (!output.hasOwnProperty(key)) { + console.warn("Invalid " + this.msgType + " option:", key); + } + } } - return el; - } - }, { - key: "initialize", - value: function initialize() {//scroll body along with header - // this.element.addEventListener("scroll", (e) => { - // if(!this.blockHozScrollEvent){ - // this.table.rowManager.scrollHorizontal(this.element.scrollLeft); - // } - // }); - } //link to row manager + for (var key in output) { + if (key in userOptions) { + output[key] = userOptions[key]; + } else { + if (Array.isArray(output[key])) { + output[key] = Object.assign([], output[key]); + } else if (_typeof(output[key]) === "object" && output[key] !== null) { + output[key] = Object.assign({}, output[key]); + } else if (typeof output[key] === "undefined") { + delete output[key]; + } + } + } - }, { - key: "setRowManager", - value: function setRowManager(manager) { - this.rowManager = manager; - } //return containing element + return output; + } + }]); - }, { - key: "getElement", - value: function getElement() { - return this.element; - } //return header containing element + return OptionsList; + }(); - }, { - key: "getHeadersElement", - value: function getHeadersElement() { - return this.headersElement; - } //scroll horizontally to match table body + var Renderer = /*#__PURE__*/function (_CoreFeature) { + _inherits(Renderer, _CoreFeature); - }, { - key: "scrollHorizontal", - value: function scrollHorizontal(left) { - var hozAdjust = 0, - scrollWidth = this.element.scrollWidth - this.table.element.clientWidth; // this.tempScrollBlock(); + var _super = _createSuper(Renderer); - this.element.scrollLeft = left; //adjust for vertical scrollbar moving table when present + function Renderer(table) { + var _this; - if (left > scrollWidth) { - hozAdjust = left - scrollWidth; - this.element.style.marginLeft = -hozAdjust + "px"; - } else { - this.element.style.marginLeft = 0; - } //keep frozen columns fixed in position - //this._calcFrozenColumnsPos(hozAdjust + 3); + _classCallCheck(this, Renderer); + _this = _super.call(this, table); + _this.elementVertical = table.rowManager.element; + _this.elementHorizontal = table.columnManager.element; + _this.tableElement = table.rowManager.tableElement; + _this.verticalFillMode = "fit"; // used by row manager to determin how to size the render area ("fit" - fits container to the contents, "fill" - fills the contianer without resizing it) - this.scrollLeft = left; + return _this; + } /////////////////////////////////// + /////// Internal Bindings ///////// + /////////////////////////////////// - if (this.table.modExists("frozenColumns")) { - this.table.modules.frozenColumns.scrollHorizontal(); - } - } ///////////// Column Setup Functions ///////////// + _createClass(Renderer, [{ + key: "initialize", + value: function initialize() {//initialize core functionality + } }, { - key: "generateColumnsFromRowData", - value: function generateColumnsFromRowData(data) { - var cols = [], - definitions = this.table.options.autoColumnsDefinitions, - row, - sorter; + key: "clearRows", + value: function clearRows() {//clear down existing rows layout + } + }, { + key: "clearColumns", + value: function clearColumns() {//clear down existing columns layout + } + }, { + key: "reinitializeColumnWidths", + value: function reinitializeColumnWidths(columns) {//resize columns to fit data + } + }, { + key: "renderRows", + value: function renderRows() {//render rows from a clean slate + } + }, { + key: "renderColumns", + value: function renderColumns() {//render columns from a clean slate + } + }, { + key: "rerenderRows", + value: function rerenderRows(callback) { + // rerender rows and keep position + if (callback) { + callback(); + } + } + }, { + key: "rerenderColumns", + value: function rerenderColumns(update, blockRedraw) {//rerender columns + } + }, { + key: "renderRowCells", + value: function renderRowCells(row) {//render the cells in a row + } + }, { + key: "rerenderRowCells", + value: function rerenderRowCells(row, force) {//rerender the cells in a row + } + }, { + key: "scrollColumns", + value: function scrollColumns(left, dir) {//handle horizontal scrolling + } + }, { + key: "scrollRows", + value: function scrollRows(top, dir) {//handle vertical scolling + } + }, { + key: "resize", + value: function resize() {//container has rezied, carry out any needed recalculations (DO NOT RERENDER IN THIS FUNCTION) + } + }, { + key: "scrollToRow", + value: function scrollToRow(row) {//scroll to a specific row + } + }, { + key: "scrollToRowNearestTop", + value: function scrollToRowNearestTop(row) {//determin weather the row is nearest the top or bottom of the table, retur true for top or false for bottom + } + }, { + key: "visibleRows", + value: function visibleRows(includingBuffer) { + //return the visible rows + return []; + } /////////////////////////////////// + //////// Helper Functions ///////// + /////////////////////////////////// - if (data && data.length) { - row = data[0]; + }, { + key: "rows", + value: function rows() { + return this.table.rowManager.getDisplayRows(); + } + }, { + key: "styleRow", + value: function styleRow(row, index) { + var rowEl = row.getElement(); - for (var key in row) { - var col = { - field: key, - title: key - }; - var value = row[key]; + if (index % 2) { + rowEl.classList.add("tabulator-row-even"); + rowEl.classList.remove("tabulator-row-odd"); + } else { + rowEl.classList.add("tabulator-row-odd"); + rowEl.classList.remove("tabulator-row-even"); + } + } /////////////////////////////////// + /////// External Triggers ///////// + /////// (DO NOT OVERRIDE) ///////// + /////////////////////////////////// - switch (_typeof(value)) { - case "undefined": - sorter = "string"; - break; + }, { + key: "clear", + value: function clear() { + //clear down existing layout + this.clearRows(); + this.clearColumns(); + } + }, { + key: "render", + value: function render() { + //render from a clean slate + this.renderRows(); + this.renderColumns(); + } + }, { + key: "rerender", + value: function rerender(callback) { + // rerender and keep position + this.rerenderRows(); + this.rerenderColumns(); + } + }, { + key: "scrollToRowPosition", + value: function scrollToRowPosition(row, position, ifVisible) { + var _this2 = this; - case "boolean": - sorter = "boolean"; - break; + var rowIndex = this.rows().indexOf(row), + rowEl = row.getElement(), + offset = 0; + return new Promise(function (resolve, reject) { + if (rowIndex > -1) { + if (typeof ifVisible === "undefined") { + ifVisible = _this2.table.options.scrollToRowIfVisible; + } //check row visibility - case "object": - if (Array.isArray(value)) { - sorter = "array"; - } else { - sorter = "string"; - } - break; + if (!ifVisible) { + if (Helpers$1.elVisible(rowEl)) { + offset = Helpers$1.elOffset(rowEl).top - Helpers$1.elOffset(_this2.elementVertical).top; - default: - if (!isNaN(value) && value !== "") { - sorter = "number"; - } else { - if (value.match(/((^[0-9]+[a-z]+)|(^[a-z]+[0-9]+))+$/i)) { - sorter = "alphanum"; - } else { - sorter = "string"; - } + if (offset > 0 && offset < _this2.elementVertical.clientHeight - rowEl.offsetHeight) { + return false; } + } + } - break; + if (typeof position === "undefined") { + position = _this2.table.options.scrollToRowPosition; } - col.sorter = sorter; - cols.push(col); - } + if (position === "nearest") { + position = _this2.scrollToRowNearestTop(row) ? "top" : "bottom"; + } //scroll to row - if (definitions) { - switch (_typeof(definitions)) { - case "function": - this.table.options.columns = definitions.call(this.table, cols); - break; - case "object": - if (Array.isArray(definitions)) { - cols.forEach(function (col) { - var match = definitions.find(function (def) { - return def.field === col.field; - }); + _this2.scrollToRow(row); //align to correct position - if (match) { - Object.assign(col, match); - } - }); + + switch (position) { + case "middle": + case "center": + if (_this2.elementVertical.scrollHeight - _this2.elementVertical.scrollTop == _this2.elementVertical.clientHeight) { + _this2.elementVertical.scrollTop = _this2.elementVertical.scrollTop + (rowEl.offsetTop - _this2.elementVertical.scrollTop) - (_this2.elementVertical.scrollHeight - rowEl.offsetTop) / 2; } else { - cols.forEach(function (col) { - if (definitions[col.field]) { - Object.assign(col, definitions[col.field]); - } - }); + _this2.elementVertical.scrollTop = _this2.elementVertical.scrollTop - _this2.elementVertical.clientHeight / 2; + } + + break; + + case "bottom": + if (_this2.elementVertical.scrollHeight - _this2.elementVertical.scrollTop == _this2.elementVertical.clientHeight) { + _this2.elementVertical.scrollTop = _this2.elementVertical.scrollTop - (_this2.elementVertical.scrollHeight - rowEl.offsetTop) + rowEl.offsetHeight; + } else { + _this2.elementVertical.scrollTop = _this2.elementVertical.scrollTop - _this2.elementVertical.clientHeight + rowEl.offsetHeight; } - this.table.options.columns = cols; break; } + + resolve(); } else { - this.table.options.columns = cols; + console.warn("Scroll Error - Row not visible"); + reject("Scroll Error - Row not visible"); } + }); + } + }]); - this.setColumns(this.table.options.columns); - } + return Renderer; + }(CoreFeature); + + var BaiscHorizontal = /*#__PURE__*/function (_Renderer) { + _inherits(BaiscHorizontal, _Renderer); + + var _super = _createSuper(BaiscHorizontal); + + function BaiscHorizontal(table) { + _classCallCheck(this, BaiscHorizontal); + + return _super.call(this, table); + } + + _createClass(BaiscHorizontal, [{ + key: "renderRowCells", + value: function renderRowCells(row) { + row.cells.forEach(function (cell) { + row.element.appendChild(cell.getElement()); + cell.cellRendered(); + }); } }, { - key: "setColumns", - value: function setColumns(cols, row) { - var _this = this; + key: "reinitializeColumnWidths", + value: function reinitializeColumnWidths(columns) { + columns.forEach(function (column) { + column.reinitializeWidth(); + }); + } + }]); - while (this.headersElement.firstChild) { - this.headersElement.removeChild(this.headersElement.firstChild); - } + return BaiscHorizontal; + }(Renderer); - this.columns = []; - this.columnsByIndex = []; - this.columnsByField = {}; //reset frozen columns + var VirtualDomHorizontal = /*#__PURE__*/function (_Renderer) { + _inherits(VirtualDomHorizontal, _Renderer); - if (this.table.modExists("frozenColumns")) { - this.table.modules.frozenColumns.reset(); - } + var _super = _createSuper(VirtualDomHorizontal); - cols.forEach(function (def, i) { - _this._addColumn(def); - }); + function VirtualDomHorizontal(table) { + var _this; - this._reIndexColumns(); + _classCallCheck(this, VirtualDomHorizontal); - if (this.table.options.responsiveLayout && this.table.modExists("responsiveLayout", true)) { - this.table.modules.responsiveLayout.initialize(); + _this = _super.call(this, table); + _this.leftCol = 0; + _this.rightCol = 0; + _this.scrollLeft = 0; + _this.vDomScrollPosLeft = 0; + _this.vDomScrollPosRight = 0; + _this.vDomPadLeft = 0; + _this.vDomPadRight = 0; + _this.fitDataColAvg = 0; + _this.window = 200; //pixel margin to make column visible before it is shown on screen + + _this.initialized = false; + _this.columns = []; + return _this; + } + + _createClass(VirtualDomHorizontal, [{ + key: "initialize", + value: function initialize() { + this.compatabilityCheck(); + } + }, { + key: "compatabilityCheck", + value: function compatabilityCheck() { + var columns = this.options("columns"), + frozen = false, + ok = true; + + if (this.options("layout") == "fitDataTable") { + console.warn("Horizontal Vitrual DOM is not compatible with fitDataTable layout mode"); + ok = false; } - if (this.table.options.virtualDomHoz) { - this.table.vdomHoz.reinitialize(false, true); + if (this.options("responsiveLayout")) { + console.warn("Horizontal Vitrual DOM is not compatible with responsive columns"); + ok = false; } - this.redraw(true); - } - }, { - key: "_addColumn", - value: function _addColumn(definition, before, nextToColumn) { - var column = new Column$1(definition, this), - colEl = column.getElement(), - index = nextToColumn ? this.findColumnIndex(nextToColumn) : nextToColumn; + if (this.options("rtl")) { + console.warn("Horizontal Vitrual DOM is not currently compatible with RTL text direction"); + ok = false; + } - if (nextToColumn && index > -1) { - var parentIndex = this.columns.indexOf(nextToColumn.getTopColumn()); - var nextEl = nextToColumn.getElement(); + if (columns) { + frozen = columns.find(function (col) { + return col.frozen; + }); - if (before) { - this.columns.splice(parentIndex, 0, column); - nextEl.parentNode.insertBefore(colEl, nextEl); - } else { - this.columns.splice(parentIndex + 1, 0, column); - nextEl.parentNode.insertBefore(colEl, nextEl.nextSibling); - } - } else { - if (before) { - this.columns.unshift(column); - this.headersElement.insertBefore(column.getElement(), this.headersElement.firstChild); - } else { - this.columns.push(column); - this.headersElement.appendChild(column.getElement()); + if (frozen) { + console.warn("Horizontal Vitrual DOM is not compatible with frozen columns"); + ok = false; } + } - column.columnRendered(); + if (!ok) { + options.virtualDomHoz = false; } - return column; - } + return ok; + } ////////////////////////////////////// + ///////// Public Functions /////////// + ////////////////////////////////////// + }, { - key: "registerColumnField", - value: function registerColumnField(col) { - if (col.definition.field) { - this.columnsByField[col.definition.field] = col; - } + key: "renderColumns", + value: function renderColumns(row, force) { + this.dataChange(); } }, { - key: "registerColumnPosition", - value: function registerColumnPosition(col) { - this.columnsByIndex.push(col); + key: "scrollColumns", + value: function scrollColumns(left, dir) { + if (this.scrollLeft != left) { + this.scrollLeft = left; + this.scroll(left - (this.vDomScrollPosLeft + this.window)); + } } }, { - key: "_reIndexColumns", - value: function _reIndexColumns() { - this.columnsByIndex = []; - this.columns.forEach(function (column) { - column.reRegisterPosition(); - }); - } //ensure column headers take up the correct amount of space in column groups - - }, { - key: "_verticalAlignHeaders", - value: function _verticalAlignHeaders() { + key: "rerenderColumns", + value: function rerenderColumns(update, blockRedraw) { var _this2 = this; - var minHeight = 0; - this.columns.forEach(function (column) { - var height; - column.clearVerticalAlign(); - height = column.getHeight(); + var old = { + cols: this.columns, + leftCol: this.leftCol, + rightCol: this.rightCol + }; - if (height > minHeight) { - minHeight = height; - } - }); - this.columns.forEach(function (column) { - column.verticalAlign(_this2.table.options.columnHeaderVertAlign, minHeight); - }); - this.rowManager.adjustTableSize(); - } //////////////// Column Details ///////////////// + if (update && !this.initialized) { + return; + } - }, { - key: "findColumn", - value: function findColumn(subject) { - if (_typeof(subject) == "object") { - if (subject instanceof Column$1) { - //subject is column element - return subject; - } else if (subject instanceof ColumnComponent) { - //subject is public column component - return subject._getSelf() || false; - } else if (typeof HTMLElement !== "undefined" && subject instanceof HTMLElement) { - //subject is a HTML element of the column header - var match = this.columns.find(function (column) { - return column.element === subject; - }); - return match || false; - } - } else { - //subject should be treated as the field name of the column - return this.columnsByField[subject] || false; - } //catch all for any other type of input + this.clear(); + this.scrollLeft = this.elementVertical.scrollLeft; + this.vDomScrollPosLeft = this.scrollLeft - this.window; + this.vDomScrollPosRight = this.scrollLeft + this.elementVertical.clientWidth + this.window; + var colPos = 0; + this.table.columnManager.columnsByIndex.forEach(function (column) { + var config = {}; + if (column.visible) { + var width = column.getWidth(); + config.leftPos = colPos; + config.rightPos = colPos + width; + config.width = width; - return false; - } - }, { - key: "getColumnByField", - value: function getColumnByField(field) { - return this.columnsByField[field]; - } - }, { - key: "getColumnsByFieldRoot", - value: function getColumnsByFieldRoot(root) { - var _this3 = this; + if (_this2.options("layout") === "fitData") { + config.fitDataCheck = true; + } - var matches = []; - Object.keys(this.columnsByField).forEach(function (field) { - var fieldRoot = field.split(".")[0]; + if (colPos + width > _this2.vDomScrollPosLeft && colPos < _this2.vDomScrollPosRight) { + //column is visible + if (_this2.leftCol == -1) { + _this2.leftCol = _this2.columns.length; + _this2.vDomPadLeft = colPos; + } - if (fieldRoot === root) { - matches.push(_this3.columnsByField[field]); - } - }); - return matches; - } - }, { - key: "getColumnByIndex", - value: function getColumnByIndex(index) { - return this.columnsByIndex[index]; - } - }, { - key: "getFirstVisibileColumn", - value: function getFirstVisibileColumn(index) { - var index = this.columnsByIndex.findIndex(function (col) { - return col.visible; - }); - return index > -1 ? this.columnsByIndex[index] : false; - } - }, { - key: "getColumns", - value: function getColumns() { - return this.columns; - } - }, { - key: "findColumnIndex", - value: function findColumnIndex(column) { - return this.columnsByIndex.findIndex(function (col) { - return column === col; - }); - } //return all columns that are not groups + _this2.rightCol = _this2.columns.length; + } else { + // column is hidden + if (_this2.leftCol !== -1) { + _this2.vDomPadRight += width; + } + } - }, { - key: "getRealColumns", - value: function getRealColumns() { - return this.columnsByIndex; - } //travers across columns and call action + _this2.columns.push(column); - }, { - key: "traverse", - value: function traverse(callback) { - this.columnsByIndex.forEach(function (column, i) { - callback(column, i); + column.modules.vdomHoz = config; + colPos += width; + } }); - } //get defintions of actual columns + this.tableElement.style.paddingLeft = this.vDomPadLeft + "px"; + this.tableElement.style.paddingRight = this.vDomPadRight + "px"; + this.initialized = true; - }, { - key: "getDefinitions", - value: function getDefinitions(active) { - var output = []; - this.columnsByIndex.forEach(function (column) { - if (!active || active && column.visible) { - output.push(column.getDefinition()); + if (!blockRedraw) { + if (!update || this.reinitChanged(old)) { + this.renitializeRows(); } - }); - return output; - } //get full nested definition tree + } - }, { - key: "getDefinitionTree", - value: function getDefinitionTree() { - var output = []; - this.columns.forEach(function (column) { - output.push(column.getDefinition(true)); - }); - return output; + this.elementVertical.scrollLeft = this.scrollLeft; } }, { - key: "getComponents", - value: function getComponents(structured) { - var output = [], - columns = structured ? this.columns : this.columnsByIndex; - columns.forEach(function (column) { - output.push(column.getComponent()); - }); - return output; + key: "renderRowCells", + value: function renderRowCells(row) { + if (this.initialized) { + this.initializeRow(row); + } else { + row.cells.forEach(function (cell) { + row.element.appendChild(cell.getElement()); + cell.cellRendered(); + }); + } } }, { - key: "getWidth", - value: function getWidth() { - var width = 0; - this.columnsByIndex.forEach(function (column) { - if (column.visible) { - width += column.getWidth(); - } - }); - return width; + key: "rerenderRowCells", + value: function rerenderRowCells(row, force) { + this.reinitializeRow(row, force); } }, { - key: "moveColumn", - value: function moveColumn(from, to, after) { - this.moveColumnActual(from, to, after); - - if (this.table.options.responsiveLayout && this.table.modExists("responsiveLayout", true)) { - this.table.modules.responsiveLayout.initialize(); + key: "reinitializeColumnWidths", + value: function reinitializeColumnWidths(columns) { + for (var i = this.leftCol; i <= this.rightCol; i++) { + this.columns[i].reinitializeWidth(); } + } ////////////////////////////////////// + //////// Internal Rendering ////////// + ////////////////////////////////////// - if (this.table.modExists("columnCalcs")) { - this.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows); - } + }, { + key: "deinitialize", + value: function deinitialize() { + this.initialized = false; + } + }, { + key: "clear", + value: function clear() { + this.columns = []; + this.leftCol = -1; + this.rightCol = 0; + this.vDomScrollPosLeft = 0; + this.vDomScrollPosRight = 0; + this.vDomPadLeft = 0; + this.vDomPadRight = 0; + } + }, { + key: "dataChange", + value: function dataChange() { + var _this3 = this; - to.element.parentNode.insertBefore(from.element, to.element); + var change = false, + collsWidth = 0, + colEnd = 0, + row, + rowEl; - if (after) { - to.element.parentNode.insertBefore(to.element, from.element); - } + if (this.options("layout") === "fitData") { + this.table.columnManager.columnsByIndex.forEach(function (column) { + if (!column.definition.width && column.visible) { + change = true; + } + }); - this._verticalAlignHeaders(); + if (change) { + if (change && this.table.rowManager.getDisplayRows().length) { + this.vDomScrollPosRight = this.scrollLeft + this.elementVertical.clientWidth + this.window; + var row = this.chain("rows-sample", [1], [], function () { + return _this3.table.rowManager.getDisplayRows()[0]; + })[0]; - this.table.rowManager.reinitialize(); - } - }, { - key: "moveColumnActual", - value: function moveColumnActual(from, to, after) { - if (from.parent.isGroup) { - this._moveColumnInArray(from.parent.columns, from, to, after); - } else { - this._moveColumnInArray(this.columns, from, to, after); - } + if (row) { + rowEl = row.getElement(); + row.generateCells(); + this.tableElement.appendChild(rowEl); - this._moveColumnInArray(this.columnsByIndex, from, to, after, true); + for (var colEnd = 0; colEnd < row.cells.length; colEnd++) { + var cell = row.cells[colEnd]; + rowEl.appendChild(cell.getElement()); + cell.column.reinitializeWidth(); + collsWidth += cell.column.getWidth(); - if (this.table.options.responsiveLayout && this.table.modExists("responsiveLayout", true)) { - this.table.modules.responsiveLayout.initialize(); - } + if (collsWidth > this.vDomScrollPosRight) { + break; + } + } - if (this.table.options.virtualDomHoz) { - this.table.vdomHoz.reinitialize(true); - } + rowEl.parentNode.removeChild(rowEl); + this.fitDataColAvg = Math.floor(collsWidth / (colEnd + 1)); - if (this.table.options.columnMoved) { - this.table.options.columnMoved.call(this.table, from.getComponent(), this.table.columnManager.getComponents()); - } + for (colEnd; colEnd < this.table.columnManager.columnsByIndex.length; colEnd++) { + this.table.columnManager.columnsByIndex[colEnd].setWidth(this.fitDataColAvg); + } - if (this.table.options.persistence && this.table.modExists("persistence", true) && this.table.modules.persistence.config.columns) { - this.table.modules.persistence.save("columns"); + this.rerenderColumns(false, true); + } + } + } + } else { + if (this.options("layout") === "fitColumns") { + this.layoutRefresh(); + this.rerenderColumns(false, true); + } } } }, { - key: "_moveColumnInArray", - value: function _moveColumnInArray(columns, from, to, after, updateRows) { + key: "reinitChanged", + value: function reinitChanged(old) { var _this4 = this; - var fromIndex = columns.indexOf(from), - toIndex, - rows = []; - - if (fromIndex > -1) { - columns.splice(fromIndex, 1); - toIndex = columns.indexOf(to); - - if (toIndex > -1) { - if (after) { - toIndex = toIndex + 1; - } - } else { - toIndex = fromIndex; - } - - columns.splice(toIndex, 0, from); - - if (updateRows) { - if (this.table.options.dataTree && this.table.modExists("dataTree", true)) { - this.table.rowManager.rows.forEach(function (row) { - rows = rows.concat(_this4.table.modules.dataTree.getTreeChildren(row, false, true)); - }); - } - - rows = rows.concat(this.table.rowManager.rows); - rows.forEach(function (row) { - if (row.cells.length) { - var cell = row.cells.splice(fromIndex, 1)[0]; - row.cells.splice(toIndex, 0, cell); - } - }); - } - } - } - }, { - key: "scrollToColumn", - value: function scrollToColumn(column, position, ifVisible) { - var _this5 = this; - - var left = 0, - offset = 0, - adjust = 0, - colEl = column.getElement(); - return new Promise(function (resolve, reject) { - if (typeof position === "undefined") { - position = _this5.table.options.scrollToColumnPosition; - } - - if (typeof ifVisible === "undefined") { - ifVisible = _this5.table.options.scrollToColumnIfVisible; - } - - if (column.visible) { - //align to correct position - switch (position) { - case "middle": - case "center": - adjust = -_this5.element.clientWidth / 2; - break; - - case "right": - adjust = colEl.clientWidth - _this5.headersElement.clientWidth; - break; - } //check column visibility - - - if (!ifVisible) { - offset = colEl.offsetLeft; - - if (offset > 0 && offset + colEl.offsetWidth < _this5.element.clientWidth) { - return false; - } - } //calculate scroll position - - - left = colEl.offsetLeft + adjust; - left = Math.max(Math.min(left, _this5.table.rowManager.element.scrollWidth - _this5.table.rowManager.element.clientWidth), 0); - - _this5.table.rowManager.scrollHorizontal(left); - - _this5.scrollHorizontal(left); - - resolve(); - } else { - console.warn("Scroll Error - Column not visible"); - reject("Scroll Error - Column not visible"); - } - }); - } //////////////// Cell Management ///////////////// - - }, { - key: "generateCells", - value: function generateCells(row) { - var cells = []; - this.columnsByIndex.forEach(function (column) { - cells.push(column.generateCell(row)); - }); - return cells; - } //////////////// Column Management ///////////////// - - }, { - key: "getFlexBaseWidth", - value: function getFlexBaseWidth() { - var totalWidth = this.table.element.clientWidth, - //table element width - fixedWidth = 0; //adjust for vertical scrollbar if present + var match = true; - if (this.rowManager.element.scrollHeight > this.rowManager.element.clientHeight) { - totalWidth -= this.rowManager.element.offsetWidth - this.rowManager.element.clientWidth; + if (old.cols.length !== this.columns.length || old.leftCol !== this.leftCol || old.rightCol !== this.rightCol) { + return true; } - this.columnsByIndex.forEach(function (column) { - var width, minWidth, colWidth; - - if (column.visible) { - width = column.definition.width || 0; - minWidth = typeof column.minWidth == "undefined" ? this.table.options.columnMinWidth : parseInt(column.minWidth); - - if (typeof width == "string") { - if (width.indexOf("%") > -1) { - colWidth = totalWidth / 100 * parseInt(width); - } else { - colWidth = parseInt(width); - } - } else { - colWidth = width; - } - - fixedWidth += colWidth > minWidth ? colWidth : minWidth; + old.cols.forEach(function (col, i) { + if (col !== _this4.columns[i]) { + match = false; } }); - return fixedWidth; + return !match; } }, { - key: "addColumn", - value: function addColumn(definition, before, nextToColumn) { - var _this6 = this; - - return new Promise(function (resolve, reject) { - var column = _this6._addColumn(definition, before, nextToColumn); - - _this6._reIndexColumns(); - - if (_this6.table.options.responsiveLayout && _this6.table.modExists("responsiveLayout", true)) { - _this6.table.modules.responsiveLayout.initialize(); - } - - if (_this6.table.modExists("columnCalcs")) { - _this6.table.modules.columnCalcs.recalc(_this6.table.rowManager.activeRows); - } - - _this6.redraw(true); - - if (_this6.table.modules.layout.getMode() != "fitColumns") { - column.reinitializeWidth(); - } - - _this6._verticalAlignHeaders(); - - _this6.table.rowManager.reinitialize(); - - if (_this6.table.options.virtualDomHoz) { - _this6.table.vdomHoz.reinitialize(); - } + key: "renitializeRows", + value: function renitializeRows() { + var _this5 = this; - resolve(column); + var rows = this.table.rowManager.getVisibleRows(); + rows.forEach(function (row) { + _this5.reinitializeRow(row, true); }); - } //remove column from system - - }, { - key: "deregisterColumn", - value: function deregisterColumn(column) { - var field = column.getField(), - index; //remove from field list - - if (field) { - delete this.columnsByField[field]; - } //remove from index list - - - index = this.columnsByIndex.indexOf(column); - - if (index > -1) { - this.columnsByIndex.splice(index, 1); - } //remove from column list - - - index = this.columns.indexOf(column); - - if (index > -1) { - this.columns.splice(index, 1); - } - - if (this.table.options.responsiveLayout && this.table.modExists("responsiveLayout", true)) { - this.table.modules.responsiveLayout.initialize(); - } - - this._verticalAlignHeaders(); - - this.redraw(); - } //redraw columns - + } }, { - key: "redraw", - value: function redraw(force) { - if (force) { - if (Helpers.elVisible(this.element)) { - this._verticalAlignHeaders(); - } - - this.table.rowManager.resetScroll(); - this.table.rowManager.reinitialize(); - } + key: "scroll", + value: function scroll(diff) { + this.vDomScrollPosLeft += diff; + this.vDomScrollPosRight += diff; - if (["fitColumns", "fitDataStretch"].indexOf(this.table.modules.layout.getMode()) > -1) { - this.table.modules.layout.layout(); + if (diff > this.elementVertical.clientWidth * .8) { + this.rerenderColumns(); } else { - if (force) { - this.table.modules.layout.layout(); + if (diff > 0) { + //scroll right + this.addColRight(); + this.removeColLeft(); } else { - if (this.table.options.responsiveLayout && this.table.modExists("responsiveLayout", true)) { - this.table.modules.responsiveLayout.update(); - } - } - } - - if (this.table.modExists("frozenColumns")) { - this.table.modules.frozenColumns.layout(); - } - - if (this.table.modExists("columnCalcs")) { - this.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows); - } - - if (force) { - if (this.table.options.persistence && this.table.modExists("persistence", true) && this.table.modules.persistence.config.columns) { - this.table.modules.persistence.save("columns"); - } - - if (this.table.modExists("columnCalcs")) { - this.table.modules.columnCalcs.redraw(); + //scroll left + this.addColLeft(); + this.removeColRight(); } } - - this.table.footerManager.redraw(); - } - }]); - - return ColumnManager; - }(); - - //public row object - var RowComponent$1 = /*#__PURE__*/function () { - function RowComponent(row) { - _classCallCheck(this, RowComponent); - - this._row = row; - } - - _createClass(RowComponent, [{ - key: "getData", - value: function getData(transform) { - return this._row.getData(transform); } }, { - key: "getElement", - value: function getElement() { - return this._row.getElement(); + key: "colPositionAdjust", + value: function colPositionAdjust(start, end, diff) { + for (var i = start; i < end; i++) { + var column = this.columns[i]; + column.modules.vdomHoz.leftPos += diff; + column.modules.vdomHoz.rightPos += diff; + } } }, { - key: "getCells", - value: function getCells() { - var cells = []; - - this._row.getCells().forEach(function (cell) { - cells.push(cell.getComponent()); - }); - - return cells; - } - }, { - key: "getCell", - value: function getCell(column) { - var cell = this._row.getCell(column); - - return cell ? cell.getComponent() : false; - } - }, { - key: "getIndex", - value: function getIndex() { - return this._row.getData("data")[this._row.table.options.index]; - } - }, { - key: "getPosition", - value: function getPosition(active) { - return this._row.table.rowManager.getRowPosition(this._row, active); - } - }, { - key: "delete", - value: function _delete() { - return this._row["delete"](); - } - }, { - key: "scrollTo", - value: function scrollTo() { - return this._row.table.rowManager.scrollToRow(this._row); - } - }, { - key: "pageTo", - value: function pageTo() { - if (this._row.table.modExists("page", true)) { - return this._row.table.modules.page.setPageToRow(this._row); - } - } - }, { - key: "move", - value: function move(to, after) { - this._row.moveToRow(to, after); - } - }, { - key: "update", - value: function update(data) { - return this._row.updateData(data); - } - }, { - key: "normalizeHeight", - value: function normalizeHeight() { - this._row.normalizeHeight(true); - } - }, { - key: "select", - value: function select() { - this._row.table.modules.selectRow.selectRows(this._row); - } - }, { - key: "deselect", - value: function deselect() { - this._row.table.modules.selectRow.deselectRows(this._row); - } - }, { - key: "toggleSelect", - value: function toggleSelect() { - this._row.table.modules.selectRow.toggleRow(this._row); - } - }, { - key: "isSelected", - value: function isSelected() { - return this._row.table.modules.selectRow.isRowSelected(this._row); - } - }, { - key: "_getSelf", - value: function _getSelf() { - return this._row; - } - }, { - key: "validate", - value: function validate() { - return this._row.validate(); - } - }, { - key: "freeze", - value: function freeze() { - if (this._row.table.modExists("frozenRows", true)) { - this._row.table.modules.frozenRows.freezeRow(this._row); - } - } - }, { - key: "unfreeze", - value: function unfreeze() { - if (this._row.table.modExists("frozenRows", true)) { - this._row.table.modules.frozenRows.unfreezeRow(this._row); - } - } - }, { - key: "isFrozen", - value: function isFrozen() { - if (this._row.table.modExists("frozenRows", true)) { - var index = this._row.table.modules.frozenRows.rows.indexOf(this._row); - - return index > -1; - } - - return false; - } - }, { - key: "treeCollapse", - value: function treeCollapse() { - if (this._row.table.modExists("dataTree", true)) { - this._row.table.modules.dataTree.collapseRow(this._row); - } - } - }, { - key: "treeExpand", - value: function treeExpand() { - if (this._row.table.modExists("dataTree", true)) { - this._row.table.modules.dataTree.expandRow(this._row); - } - } - }, { - key: "treeToggle", - value: function treeToggle() { - if (this._row.table.modExists("dataTree", true)) { - this._row.table.modules.dataTree.toggleRow(this._row); - } - } - }, { - key: "getTreeParent", - value: function getTreeParent() { - if (this._row.table.modExists("dataTree", true)) { - return this._row.table.modules.dataTree.getTreeParent(this._row); - } - - return false; - } - }, { - key: "getTreeChildren", - value: function getTreeChildren() { - if (this._row.table.modExists("dataTree", true)) { - return this._row.table.modules.dataTree.getTreeChildren(this._row, true); - } - - return false; - } - }, { - key: "addTreeChild", - value: function addTreeChild(data, pos, index) { - if (this._row.table.modExists("dataTree", true)) { - return this._row.table.modules.dataTree.addTreeChildRow(this._row, data, pos, index); - } - - return false; - } - }, { - key: "reformat", - value: function reformat() { - return this._row.reinitialize(); - } - }, { - key: "getGroup", - value: function getGroup() { - return this._row.getGroup().getComponent(); - } - }, { - key: "getTable", - value: function getTable() { - return this._row.table; - } - }, { - key: "getNextRow", - value: function getNextRow() { - var row = this._row.nextRow(); - - return row ? row.getComponent() : row; - } - }, { - key: "getPrevRow", - value: function getPrevRow() { - var row = this._row.prevRow(); - - return row ? row.getComponent() : row; - } - }]); - - return RowComponent; - }(); - - var Row$1 = /*#__PURE__*/function () { - function Row(data, parent) { - var type = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : "row"; - - _classCallCheck(this, Row); - - this.table = parent.table; - this.parent = parent; - this.data = {}; - this.type = type; //type of element - - this.element = false; - this.modules = {}; //hold module variables; - - this.cells = []; - this.height = 0; //hold element height - - this.heightStyled = ""; //hold element height prestyled to improve render efficiency - - this.manualHeight = false; //user has manually set row height - - this.outerHeight = 0; //holde lements outer height - - this.initialized = false; //element has been rendered - - this.heightInitialized = false; //element has resized cells to fit - - this.component = null; - this.created = false; - this.setData(data); - } - - _createClass(Row, [{ - key: "create", - value: function create() { - if (!this.created) { - this.created = true; - this.generateElement(); - } - } - }, { - key: "createElement", - value: function createElement() { - var el = document.createElement("div"); - el.classList.add("tabulator-row"); - el.setAttribute("role", "row"); - this.element = el; - } - }, { - key: "getElement", - value: function getElement() { - this.create(); - return this.element; - } - }, { - key: "detachElement", - value: function detachElement() { - if (this.element && this.element.parentNode) { - this.element.parentNode.removeChild(this.element); - } - } - }, { - key: "generateElement", - value: function generateElement() { - var _this = this; - - var dblTap, tapHold, tap; - this.createElement(); //set row selection characteristics - - if (this.table.options.selectable !== false && this.table.modExists("selectRow")) { - this.table.modules.selectRow.initializeRow(this); - } //setup movable rows - - - if (this.table.options.movableRows !== false && this.table.modExists("moveRow")) { - this.table.modules.moveRow.initializeRow(this); - } //setup data tree - - - if (this.table.options.dataTree !== false && this.table.modExists("dataTree")) { - this.table.modules.dataTree.initializeRow(this); - } //setup column colapse container - - - if (this.table.options.responsiveLayout === "collapse" && this.table.modExists("responsiveLayout")) { - this.table.modules.responsiveLayout.initializeRow(this); - } //set column menu - - - if ((this.table.options.rowContextMenu || this.table.options.rowClickMenu) && this.table.modExists("menu")) { - this.table.modules.menu.initializeRow(this); - } //handle row click events - - - if (this.table.options.rowClick) { - this.element.addEventListener("click", function (e) { - _this.table.options.rowClick(e, _this.getComponent()); - }); - } - - if (this.table.options.rowDblClick) { - this.element.addEventListener("dblclick", function (e) { - _this.table.options.rowDblClick(e, _this.getComponent()); - }); - } - - if (this.table.options.rowContext) { - this.element.addEventListener("contextmenu", function (e) { - _this.table.options.rowContext(e, _this.getComponent()); - }); - } //handle mouse events - - - if (this.table.options.rowMouseEnter) { - this.element.addEventListener("mouseenter", function (e) { - _this.table.options.rowMouseEnter(e, _this.getComponent()); - }); - } - - if (this.table.options.rowMouseLeave) { - this.element.addEventListener("mouseleave", function (e) { - _this.table.options.rowMouseLeave(e, _this.getComponent()); - }); - } - - if (this.table.options.rowMouseOver) { - this.element.addEventListener("mouseover", function (e) { - _this.table.options.rowMouseOver(e, _this.getComponent()); - }); - } - - if (this.table.options.rowMouseOut) { - this.element.addEventListener("mouseout", function (e) { - _this.table.options.rowMouseOut(e, _this.getComponent()); - }); - } - - if (this.table.options.rowMouseMove) { - this.element.addEventListener("mousemove", function (e) { - _this.table.options.rowMouseMove(e, _this.getComponent()); - }); - } - - if (this.table.options.rowTap) { - tap = false; - this.element.addEventListener("touchstart", function (e) { - tap = true; - }, { - passive: true - }); - this.element.addEventListener("touchend", function (e) { - if (tap) { - _this.table.options.rowTap(e, _this.getComponent()); - } - - tap = false; - }); - } - - if (this.table.options.rowDblTap) { - dblTap = null; - this.element.addEventListener("touchend", function (e) { - if (dblTap) { - clearTimeout(dblTap); - dblTap = null; - - _this.table.options.rowDblTap(e, _this.getComponent()); - } else { - dblTap = setTimeout(function () { - clearTimeout(dblTap); - dblTap = null; - }, 300); - } - }); - } - - if (this.table.options.rowTapHold) { - tapHold = null; - this.element.addEventListener("touchstart", function (e) { - clearTimeout(tapHold); - tapHold = setTimeout(function () { - clearTimeout(tapHold); - tapHold = null; - tap = false; - - _this.table.options.rowTapHold(e, _this.getComponent()); - }, 1000); - }, { - passive: true - }); - this.element.addEventListener("touchend", function (e) { - clearTimeout(tapHold); - tapHold = null; - }); - } - } - }, { - key: "generateCells", - value: function generateCells() { - this.cells = this.table.columnManager.generateCells(this); - } //functions to setup on first render - - }, { - key: "initialize", - value: function initialize(force) { - var _this2 = this; - - this.create(); - - if (!this.initialized || force) { - this.deleteCells(); - - while (this.element.firstChild) { - this.element.removeChild(this.element.firstChild); - } //handle frozen cells - - - if (this.table.modExists("frozenColumns")) { - this.table.modules.frozenColumns.layoutRow(this); - } - - this.generateCells(); - - if (this.table.options.virtualDomHoz && this.table.vdomHoz.initialized) { - this.table.vdomHoz.initializeRow(this); - } else { - this.cells.forEach(function (cell) { - _this2.element.appendChild(cell.getElement()); + key: "addColRight", + value: function addColRight() { + var column = this.columns[this.rightCol + 1], + rows; + if (column && column.modules.vdomHoz.leftPos <= this.vDomScrollPosRight) { + rows = this.table.rowManager.getVisibleRows(); + rows.forEach(function (row) { + if (row.type !== "group") { + var cell = row.getCell(column); + row.getElement().appendChild(cell.getElement()); cell.cellRendered(); - }); - } - - if (force) { - this.normalizeHeight(); - } //setup movable rows - - - if (this.table.options.dataTree && this.table.modExists("dataTree")) { - this.table.modules.dataTree.layoutRow(this); - } //setup column colapse container - + } + }); + this.fitDataColActualWidthCheck(column); + this.rightCol++; - if (this.table.options.responsiveLayout === "collapse" && this.table.modExists("responsiveLayout")) { - this.table.modules.responsiveLayout.layoutRow(this); + if (this.rightCol >= this.columns.length - 1) { + this.vDomPadRight = 0; + } else { + this.vDomPadRight -= column.getWidth(); } - if (this.table.options.rowFormatter) { - this.table.options.rowFormatter(this.getComponent()); - } //set resizable handles + this.tableElement.style.paddingRight = this.vDomPadRight + "px"; + this.addColRight(); + } + } + }, { + key: "addColLeft", + value: function addColLeft() { + var column = this.columns[this.leftCol - 1], + rows; + if (column && column.modules.vdomHoz.rightPos >= this.vDomScrollPosLeft) { + var rows = this.table.rowManager.getVisibleRows(); + rows.forEach(function (row) { + if (row.type !== "group") { + var cell = row.getCell(column); + row.getElement().prepend(cell.getElement()); + cell.cellRendered(); + } + }); + this.fitDataColActualWidthCheck(column); - if (this.table.options.resizableRows && this.table.modExists("resizeRows")) { - this.table.modules.resizeRows.initializeRow(this); + if (!this.leftCol) { + this.vDomPadLeft = 0; + } else { + this.vDomPadLeft -= column.getWidth(); } - this.initialized = true; - } else { - if (this.table.options.virtualDomHoz) { - this.table.vdomHoz.reinitializeRow(this); - } + this.tableElement.style.paddingLeft = this.vDomPadLeft + "px"; + this.leftCol--; + this.addColLeft(); } } }, { - key: "reinitializeHeight", - value: function reinitializeHeight() { - this.heightInitialized = false; + key: "removeColRight", + value: function removeColRight(column) { + var column = this.columns[this.rightCol], + rows; - if (this.element && this.element.offsetParent !== null) { - this.normalizeHeight(true); + if (column && column.modules.vdomHoz.leftPos > this.vDomScrollPosRight) { + rows = this.table.rowManager.getVisibleRows(); + column.modules.vdomHoz.visible = false; + rows.forEach(function (row) { + if (row.type !== "group") { + var cell = row.getCell(column); + row.getElement().removeChild(cell.getElement()); + } + }); + this.vDomPadRight += column.getWidth(); + this.tableElement.style.paddingRight = this.vDomPadRight + "px"; + this.rightCol--; + this.removeColRight(); } } }, { - key: "reinitialize", - value: function reinitialize(children) { - this.initialized = false; - this.heightInitialized = false; - - if (!this.manualHeight) { - this.height = 0; - this.heightStyled = ""; - } - - if (this.element && this.element.offsetParent !== null) { - this.initialize(true); - } + key: "removeColLeft", + value: function removeColLeft() { + var column = this.columns[this.leftCol], + rows; - if (this.table.options.dataTree && this.table.modExists("dataTree", true)) { - this.table.modules.dataTree.getTreeChildren(this, false, true).forEach(function (child) { - child.reinitialize(true); + if (column && column.modules.vdomHoz.rightPos < this.vDomScrollPosLeft) { + rows = this.table.rowManager.getVisibleRows(); + rows.forEach(function (row) { + if (row.type !== "group") { + var cell = row.getCell(column); + row.getElement().removeChild(cell.getElement()); + } }); + this.vDomPadLeft += column.getWidth(); + this.tableElement.style.paddingLeft = this.vDomPadLeft + "px"; + this.leftCol++; + this.removeColLeft(); } - } //get heights when doing bulk row style calcs in virtual DOM - + } }, { - key: "calcHeight", - value: function calcHeight(force) { - var maxHeight = 0, - minHeight = this.table.options.resizableRows ? this.element.clientHeight : 0; - this.cells.forEach(function (cell) { - var height = cell.getHeight(); + key: "fitDataColActualWidthCheck", + value: function fitDataColActualWidthCheck(column) { + var newWidth, widthDiff; - if (height > maxHeight) { - maxHeight = height; + if (column.modules.vdomHoz.fitDataCheck) { + column.reinitializeWidth(); + newWidth = column.getWidth(); + widthDiff = newWidth - column.modules.vdomHoz.width; + + if (widthDiff) { + column.modules.vdomHoz.rightPos += widthDiff; + column.modules.vdomHoz.width = newWidth; + this.colPositionAdjust(this.rightCol + 2, this.columns.length, widthDiff); } - }); - if (force) { - this.height = Math.max(maxHeight, minHeight); - } else { - this.height = this.manualHeight ? this.height : Math.max(maxHeight, minHeight); + column.modules.vdomHoz.fitDataCheck = false; } + } + }, { + key: "initializeRow", + value: function initializeRow(row) { + if (row.type !== "group") { + row.modules.vdomHoz = { + leftCol: this.leftCol, + rightCol: this.rightCol + }; - this.heightStyled = this.height ? this.height + "px" : ""; - this.outerHeight = this.element.offsetHeight; - } //set of cells + for (var i = this.leftCol; i <= this.rightCol; i++) { + var column = this.columns[i]; - }, { - key: "setCellHeight", - value: function setCellHeight() { - this.cells.forEach(function (cell) { - cell.setHeight(); - }); - this.heightInitialized = true; + if (column && column.visible) { + var cell = row.getCell(column); + row.getElement().appendChild(cell.getElement()); + cell.cellRendered(); + } + } + } } }, { - key: "clearCellHeight", - value: function clearCellHeight() { - this.cells.forEach(function (cell) { - cell.clearHeight(); - }); - } //normalize the height of elements in the row + key: "reinitializeRow", + value: function reinitializeRow(row, force) { + if (row.type !== "group") { + if (force || !row.modules.vdomHoz || row.modules.vdomHoz.leftCol !== this.leftCol || row.modules.vdomHoz.rightCol !== this.rightCol) { + var rowEl = row.getElement(); - }, { - key: "normalizeHeight", - value: function normalizeHeight(force) { - if (force) { - this.clearCellHeight(); + while (rowEl.firstChild) { + rowEl.removeChild(rowEl.firstChild); + } + + this.initializeRow(row); + } } + } + }]); - this.calcHeight(force); - this.setCellHeight(); - } //set height of rows + return VirtualDomHorizontal; + }(Renderer); - }, { - key: "setHeight", - value: function setHeight(height, force) { - if (this.height != height || force) { - this.manualHeight = true; - this.height = height; - this.heightStyled = height ? height + "px" : ""; - this.setCellHeight(); // this.outerHeight = this.element.outerHeight(); + var ColumnManager = /*#__PURE__*/function (_CoreFeature) { + _inherits(ColumnManager, _CoreFeature); - this.outerHeight = this.element.offsetHeight; - } - } //return rows outer height + var _super = _createSuper(ColumnManager); - }, { - key: "getHeight", - value: function getHeight() { - return this.outerHeight; - } //return rows outer Width + function ColumnManager(table) { + var _this; - }, { - key: "getWidth", - value: function getWidth() { - return this.element.offsetWidth; - } //////////////// Cell Management ///////////////// + _classCallCheck(this, ColumnManager); - }, { - key: "deleteCell", - value: function deleteCell(cell) { - var index = this.cells.indexOf(cell); + _this = _super.call(this, table); + _this.blockHozScrollEvent = false; + _this.headersElement = null; + _this.element = null; //containing element - if (index > -1) { - this.cells.splice(index, 1); - } - } //////////////// Data Management ///////////////// + _this.columns = []; // column definition object - }, { - key: "setData", - value: function setData(data) { - if (this.table.modExists("mutator")) { - data = this.table.modules.mutator.transformRow(data, "data"); + _this.columnsByIndex = []; //columns by index + + _this.columnsByField = {}; //columns by field + + _this.scrollLeft = 0; + _this.optionsList = new OptionsList(_this.table, "column definition"); + _this.renderer = null; + return _this; + } ////////////// Setup Functions ///////////////// + + + _createClass(ColumnManager, [{ + key: "initialize", + value: function initialize() { + this.initializeRenderer(); + this.headersElement = this.createHeadersElement(); + this.element = this.createHeaderElement(); + this.element.insertBefore(this.headersElement, this.element.firstChild); + this.subscribe("scroll-horizontal", this.scrollHorizontal.bind(this)); + } + }, { + key: "initializeRenderer", + value: function initializeRenderer() { + var renderClass; + var renderers = { + "virtual": VirtualDomHorizontal, + "basic": BaiscHorizontal + }; + + if (typeof this.table.options.renderVertical === "string") { + renderClass = renderers[this.table.options.renderVertical]; + } else { + renderClass = this.table.options.renderVertical; } - this.data = data; + if (renderClass) { + this.renderer = new renderClass(this.table, this.element, this.tableElement); + this.renderer.initialize(); + } else { + console.error("Unable to find matching renderer:", table.options.renderVertical); + } + } + }, { + key: "createHeadersElement", + value: function createHeadersElement() { + var el = document.createElement("div"); + el.classList.add("tabulator-headers"); + return el; + } + }, { + key: "createHeaderElement", + value: function createHeaderElement() { + var el = document.createElement("div"); + el.classList.add("tabulator-header"); - if (this.table.options.reactiveData && this.table.modExists("reactiveData", true)) { - this.table.modules.reactiveData.watchRow(this); + if (!this.table.options.headerVisible) { + el.classList.add("tabulator-header-hidden"); } - } //update the rows data + + return el; + } //return containing element }, { - key: "updateData", - value: function updateData(updatedData) { - var _this3 = this; + key: "getElement", + value: function getElement() { + return this.element; + } //return header containing element - var visible = this.element && Helpers.elVisible(this.element), - tempData = {}, - newRowData; - return new Promise(function (resolve, reject) { - if (typeof updatedData === "string") { - updatedData = JSON.parse(updatedData); - } + }, { + key: "getHeadersElement", + value: function getHeadersElement() { + return this.headersElement; + } //scroll horizontally to match table body - if (_this3.table.options.reactiveData && _this3.table.modExists("reactiveData", true)) { - _this3.table.modules.reactiveData.block(); - } //mutate incomming data if needed + }, { + key: "scrollHorizontal", + value: function scrollHorizontal(left) { + var hozAdjust = 0, + scrollWidth = this.element.scrollWidth - this.table.element.clientWidth; // this.tempScrollBlock(); + this.element.scrollLeft = left; //adjust for vertical scrollbar moving table when present - if (_this3.table.modExists("mutator")) { - tempData = Object.assign(tempData, _this3.data); - tempData = Object.assign(tempData, updatedData); - newRowData = _this3.table.modules.mutator.transformRow(tempData, "data", updatedData); - } else { - newRowData = updatedData; - } //set data + if (left > scrollWidth) { + hozAdjust = left - scrollWidth; + this.element.style.marginLeft = -hozAdjust + "px"; + } else { + this.element.style.marginLeft = 0; + } + this.scrollLeft = left; + this.renderer.scrollColumns(left); + } ///////////// Column Setup Functions ///////////// - for (var attrname in newRowData) { - _this3.data[attrname] = newRowData[attrname]; - } + }, { + key: "generateColumnsFromRowData", + value: function generateColumnsFromRowData(data) { + var cols = [], + definitions = this.table.options.autoColumnsDefinitions, + row, + sorter; - if (_this3.table.options.reactiveData && _this3.table.modExists("reactiveData", true)) { - _this3.table.modules.reactiveData.unblock(); - } //update affected cells only + if (data && data.length) { + row = data[0]; + for (var key in row) { + var col = { + field: key, + title: key + }; + var value = row[key]; - for (var attrname in updatedData) { - var columns = _this3.table.columnManager.getColumnsByFieldRoot(attrname); + switch (_typeof(value)) { + case "undefined": + sorter = "string"; + break; - columns.forEach(function (column) { - var cell = _this3.getCell(column.getField()); + case "boolean": + sorter = "boolean"; + break; - if (cell) { - var value = column.getFieldValue(newRowData); + case "object": + if (Array.isArray(value)) { + sorter = "array"; + } else { + sorter = "string"; + } - if (cell.getValue() != value) { - cell.setValueProcessData(value); + break; - if (visible) { - cell.cellRendered(); + default: + if (!isNaN(value) && value !== "") { + sorter = "number"; + } else { + if (value.match(/((^[0-9]+[a-z]+)|(^[a-z]+[0-9]+))+$/i)) { + sorter = "alphanum"; + } else { + sorter = "string"; } } - } - }); + + break; + } + + col.sorter = sorter; + cols.push(col); } - if (_this3.table.options.groupUpdateOnCellEdit && _this3.table.options.groupBy && _this3.table.modExists("groupRows")) { - _this3.table.modules.groupRows.reassignRowToGroup(_this3.row); - } //Partial reinitialization if visible + if (definitions) { + switch (_typeof(definitions)) { + case "function": + this.table.options.columns = definitions.call(this.table, cols); + break; + case "object": + if (Array.isArray(definitions)) { + cols.forEach(function (col) { + var match = definitions.find(function (def) { + return def.field === col.field; + }); - if (visible) { - _this3.normalizeHeight(true); + if (match) { + Object.assign(col, match); + } + }); + } else { + cols.forEach(function (col) { + if (definitions[col.field]) { + Object.assign(col, definitions[col.field]); + } + }); + } - if (_this3.table.options.rowFormatter) { - _this3.table.options.rowFormatter(_this3.getComponent()); + this.table.options.columns = cols; + break; } } else { - _this3.initialized = false; - _this3.height = 0; - _this3.heightStyled = ""; + this.table.options.columns = cols; } - if (_this3.table.options.dataTree !== false && _this3.table.modExists("dataTree") && _this3.table.modules.dataTree.redrawNeeded(updatedData)) { - _this3.table.modules.dataTree.initializeRow(_this3); - - if (visible) { - _this3.table.modules.dataTree.layoutRow(_this3); - - _this3.table.rowManager.refreshActiveData("tree", false, true); - } - } //this.reinitialize(); + this.setColumns(this.table.options.columns); + } + } + }, { + key: "setColumns", + value: function setColumns(cols, row) { + var _this2 = this; + while (this.headersElement.firstChild) { + this.headersElement.removeChild(this.headersElement.firstChild); + } - _this3.table.options.rowUpdated.call(_this3.table, _this3.getComponent()); + this.columns = []; + this.columnsByIndex = []; + this.columnsByField = {}; + this.dispatch("columns-loading"); + cols.forEach(function (def, i) { + _this2._addColumn(def); + }); - if (_this3.table.options.dataChanged) { - _this3.table.options.dataChanged.call(_this3.table, _this3.table.rowManager.getData()); - } + this._reIndexColumns(); - resolve(); - }); + this.dispatch("columns-loaded"); + this.renderer.rerenderColumns(false, true); + this.redraw(true); } }, { - key: "getData", - value: function getData(transform) { - if (transform) { - if (this.table.modExists("accessor")) { - return this.table.modules.accessor.transformRow(this, transform); + key: "_addColumn", + value: function _addColumn(definition, before, nextToColumn) { + var column = new Column$1(definition, this), + colEl = column.getElement(), + index = nextToColumn ? this.findColumnIndex(nextToColumn) : nextToColumn; + + if (nextToColumn && index > -1) { + var parentIndex = this.columns.indexOf(nextToColumn.getTopColumn()); + var nextEl = nextToColumn.getElement(); + + if (before) { + this.columns.splice(parentIndex, 0, column); + nextEl.parentNode.insertBefore(colEl, nextEl); + } else { + this.columns.splice(parentIndex + 1, 0, column); + nextEl.parentNode.insertBefore(colEl, nextEl.nextSibling); + } + } else { + if (before) { + this.columns.unshift(column); + this.headersElement.insertBefore(column.getElement(), this.headersElement.firstChild); + } else { + this.columns.push(column); + this.headersElement.appendChild(column.getElement()); } + + column.columnRendered(); } - return this.data; + return column; } }, { - key: "getCell", - value: function getCell(column) { - var match = false; - column = this.table.columnManager.findColumn(column); - match = this.cells.find(function (cell) { - return cell.column === column; - }); - return match; + key: "registerColumnField", + value: function registerColumnField(col) { + if (col.definition.field) { + this.columnsByField[col.definition.field] = col; + } } }, { - key: "getCellIndex", - value: function getCellIndex(findCell) { - return this.cells.findIndex(function (cell) { - return cell === findCell; - }); + key: "registerColumnPosition", + value: function registerColumnPosition(col) { + this.columnsByIndex.push(col); } }, { - key: "findNextEditableCell", - value: function findNextEditableCell(index) { - var nextCell = false; + key: "_reIndexColumns", + value: function _reIndexColumns() { + this.columnsByIndex = []; + this.columns.forEach(function (column) { + column.reRegisterPosition(); + }); + } //ensure column headers take up the correct amount of space in column groups - if (index < this.cells.length - 1) { - for (var i = index + 1; i < this.cells.length; i++) { - var cell = this.cells[i]; + }, { + key: "_verticalAlignHeaders", + value: function _verticalAlignHeaders() { + var _this3 = this; - if (cell.column.modules.edit && Helpers.elVisible(cell.getElement())) { - var allowEdit = true; + var minHeight = 0; + this.columns.forEach(function (column) { + var height; + column.clearVerticalAlign(); + height = column.getHeight(); - if (typeof cell.column.modules.edit.check == "function") { - allowEdit = cell.column.modules.edit.check(cell.getComponent()); - } + if (height > minHeight) { + minHeight = height; + } + }); + this.columns.forEach(function (column) { + column.verticalAlign(_this3.table.options.columnHeaderVertAlign, minHeight); + }); + this.table.rowManager.adjustTableSize(); + } //////////////// Column Details ///////////////// - if (allowEdit) { - nextCell = cell; - break; - } - } + }, { + key: "findColumn", + value: function findColumn(subject) { + if (_typeof(subject) == "object") { + if (subject instanceof Column$1) { + //subject is column element + return subject; + } else if (subject instanceof ColumnComponent) { + //subject is public column component + return subject._getSelf() || false; + } else if (typeof HTMLElement !== "undefined" && subject instanceof HTMLElement) { + //subject is a HTML element of the column header + var match = this.columns.find(function (column) { + return column.element === subject; + }); + return match || false; } - } + } else { + //subject should be treated as the field name of the column + return this.columnsByField[subject] || false; + } //catch all for any other type of input - return nextCell; + + return false; + } + }, { + key: "getColumnByField", + value: function getColumnByField(field) { + return this.columnsByField[field]; } }, { - key: "findPrevEditableCell", - value: function findPrevEditableCell(index) { - var prevCell = false; - - if (index > 0) { - for (var i = index - 1; i >= 0; i--) { - var cell = this.cells[i], - allowEdit = true; + key: "getColumnsByFieldRoot", + value: function getColumnsByFieldRoot(root) { + var _this4 = this; - if (cell.column.modules.edit && Helpers.elVisible(cell.getElement())) { - if (typeof cell.column.modules.edit.check == "function") { - allowEdit = cell.column.modules.edit.check(cell.getComponent()); - } + var matches = []; + Object.keys(this.columnsByField).forEach(function (field) { + var fieldRoot = field.split(".")[0]; - if (allowEdit) { - prevCell = cell; - break; - } - } + if (fieldRoot === root) { + matches.push(_this4.columnsByField[field]); } - } - - return prevCell; - } - }, { - key: "getCells", - value: function getCells() { - return this.cells; + }); + return matches; } }, { - key: "nextRow", - value: function nextRow() { - var row = this.table.rowManager.nextDisplayRow(this, true); - return row || false; + key: "getColumnByIndex", + value: function getColumnByIndex(index) { + return this.columnsByIndex[index]; } }, { - key: "prevRow", - value: function prevRow() { - var row = this.table.rowManager.prevDisplayRow(this, true); - return row || false; + key: "getFirstVisibileColumn", + value: function getFirstVisibileColumn(index) { + var index = this.columnsByIndex.findIndex(function (col) { + return col.visible; + }); + return index > -1 ? this.columnsByIndex[index] : false; } }, { - key: "moveToRow", - value: function moveToRow(to, before) { - var toRow = this.table.rowManager.findRow(to); - - if (toRow) { - this.table.rowManager.moveRowActual(this, toRow, !before); - this.table.rowManager.refreshActiveData("display", false, true); - } else { - console.warn("Move Error - No matching row found:", to); - } + key: "getColumns", + value: function getColumns() { + return this.columns; } }, { - key: "validate", - value: function validate() { - var invalid = []; - this.cells.forEach(function (cell) { - if (!cell.validate()) { - invalid.push(cell.getComponent()); - } + key: "findColumnIndex", + value: function findColumnIndex(column) { + return this.columnsByIndex.findIndex(function (col) { + return column === col; }); - return invalid.length ? invalid : true; - } ///////////////////// Actions ///////////////////// + } //return all columns that are not groups }, { - key: "delete", - value: function _delete() { - var _this4 = this; - - return new Promise(function (resolve, reject) { - var index, rows; - - if (_this4.table.options.history && _this4.table.modExists("history")) { - if (_this4.table.options.groupBy && _this4.table.modExists("groupRows")) { - rows = _this4.getGroup().rows; - index = rows.indexOf(_this4); - - if (index) { - index = rows[index - 1]; - } - } else { - index = _this4.table.rowManager.getRowIndex(_this4); + key: "getRealColumns", + value: function getRealColumns() { + return this.columnsByIndex; + } //travers across columns and call action - if (index) { - index = _this4.table.rowManager.rows[index - 1]; - } - } + }, { + key: "traverse", + value: function traverse(callback) { + this.columnsByIndex.forEach(function (column, i) { + callback(column, i); + }); + } //get defintions of actual columns - _this4.table.modules.history.action("rowDelete", _this4, { - data: _this4.getData(), - pos: !index, - index: index - }); + }, { + key: "getDefinitions", + value: function getDefinitions(active) { + var output = []; + this.columnsByIndex.forEach(function (column) { + if (!active || active && column.visible) { + output.push(column.getDefinition()); } + }); + return output; + } //get full nested definition tree - _this4.deleteActual(); - - resolve(); + }, { + key: "getDefinitionTree", + value: function getDefinitionTree() { + var output = []; + this.columns.forEach(function (column) { + output.push(column.getDefinition(true)); }); + return output; } }, { - key: "deleteActual", - value: function deleteActual(blockRedraw) { - var index = this.table.rowManager.getRowIndex(this); - this.detatchModules(); // if(this.table.options.dataTree && this.table.modExists("dataTree")){ - // this.table.modules.dataTree.collapseRow(this, true); - // } - //remove any reactive data watchers from row object - - if (this.table.options.reactiveData && this.table.modExists("reactiveData", true)) ; //remove from group - + key: "getComponents", + value: function getComponents(structured) { + var output = [], + columns = structured ? this.columns : this.columnsByIndex; + columns.forEach(function (column) { + output.push(column.getComponent()); + }); + return output; + } + }, { + key: "getWidth", + value: function getWidth() { + var width = 0; + this.columnsByIndex.forEach(function (column) { + if (column.visible) { + width += column.getWidth(); + } + }); + return width; + } + }, { + key: "moveColumn", + value: function moveColumn(from, to, after) { + this.moveColumnActual(from, to, after); + to.element.parentNode.insertBefore(from.element, to.element); - if (this.modules.group) { - this.modules.group.removeRow(this); + if (after) { + to.element.parentNode.insertBefore(to.element, from.element); } - this.table.rowManager.deleteRow(this, blockRedraw); - this.deleteCells(); - this.initialized = false; - this.heightInitialized = false; - this.element = false; - - if (this.table.options.dataTree && this.table.modExists("dataTree", true)) { - this.table.modules.dataTree.rowDelete(this); - } //recalc column calculations if present - + this._verticalAlignHeaders(); - if (this.table.modExists("columnCalcs")) { - if (this.table.options.groupBy && this.table.modExists("groupRows")) { - this.table.modules.columnCalcs.recalcRowGroup(this); - } else { - this.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows); - } - } + this.table.rowManager.reinitialize(); } }, { - key: "detatchModules", - value: function detatchModules() { - //deselect row if it is selected - if (this.table.modExists("selectRow")) { - this.table.modules.selectRow._deselectRow(this, true); - } //cancel edit if row is currently being edited + key: "moveColumnActual", + value: function moveColumnActual(from, to, after) { + if (from.parent.isGroup) { + this._moveColumnInArray(from.parent.columns, from, to, after); + } else { + this._moveColumnInArray(this.columns, from, to, after); + } + this._moveColumnInArray(this.columnsByIndex, from, to, after, true); - if (this.table.modExists("edit")) { - if (this.table.modules.edit.currentCell.row === this) { - this.table.modules.edit.cancelEdit(); - } - } + this.renderer.rerenderColumns(true); + this.dispatch("column-moved", from, to, after); - if (this.table.modExists("frozenRows")) { - this.table.modules.frozenRows.detachRow(this); + if (this.subscribedExternal("columnMoved")) { + this.dispatchExternal("columnMoved", from.getComponent(), this.table.columnManager.getComponents()); } } }, { - key: "deleteCells", - value: function deleteCells() { - var cellCount = this.cells.length; + key: "_moveColumnInArray", + value: function _moveColumnInArray(columns, from, to, after, updateRows) { + var fromIndex = columns.indexOf(from), + toIndex, + rows = []; - for (var i = 0; i < cellCount; i++) { - this.cells[0]["delete"](); - } - } - }, { - key: "wipe", - value: function wipe() { - this.detatchModules(); - this.deleteCells(); + if (fromIndex > -1) { + columns.splice(fromIndex, 1); + toIndex = columns.indexOf(to); - if (this.element) { - while (this.element.firstChild) { - this.element.removeChild(this.element.firstChild); + if (toIndex > -1) { + if (after) { + toIndex = toIndex + 1; + } + } else { + toIndex = fromIndex; } - if (this.element.parentNode) { - this.element.parentNode.removeChild(this.element); + columns.splice(toIndex, 0, from); + + if (updateRows) { + rows = this.chain("column-moving-rows", [from, to, after], null, []) || []; + rows = rows.concat(this.table.rowManager.rows); + rows.forEach(function (row) { + if (row.cells.length) { + var cell = row.cells.splice(fromIndex, 1)[0]; + row.cells.splice(toIndex, 0, cell); + } + }); } } - - this.element = false; - this.modules = {}; } }, { - key: "getGroup", - value: function getGroup() { - return this.modules.group || false; - } //////////////// Object Generation ///////////////// - - }, { - key: "getComponent", - value: function getComponent() { - if (!this.component) { - this.component = new RowComponent$1(this); - } - - return this.component; - } - }]); - - return Row; - }(); - - var RowManager = /*#__PURE__*/function () { - function RowManager(table) { - _classCallCheck(this, RowManager); - - this.table = table; - this.element = this.createHolderElement(); //containing element - - this.tableElement = this.createTableElement(); //table element - - this.heightFixer = this.createTableElement(); //table element - - this.columnManager = null; //hold column manager object + key: "scrollToColumn", + value: function scrollToColumn(column, position, ifVisible) { + var _this5 = this; - this.height = 0; //hold height of table element + var left = 0, + offset = 0, + adjust = 0, + colEl = column.getElement(); + return new Promise(function (resolve, reject) { + if (typeof position === "undefined") { + position = _this5.table.options.scrollToColumnPosition; + } - this.firstRender = false; //handle first render + if (typeof ifVisible === "undefined") { + ifVisible = _this5.table.options.scrollToColumnIfVisible; + } - this.renderMode = "virtual"; //current rendering mode + if (column.visible) { + //align to correct position + switch (position) { + case "middle": + case "center": + adjust = -_this5.element.clientWidth / 2; + break; - this.fixedHeight = false; //current rendering mode + case "right": + adjust = colEl.clientWidth - _this5.headersElement.clientWidth; + break; + } //check column visibility - this.rows = []; //hold row data objects - this.activeRows = []; //rows currently available to on display in the table + if (!ifVisible) { + offset = colEl.offsetLeft; - this.activeRowsCount = 0; //count of active rows + if (offset > 0 && offset + colEl.offsetWidth < _this5.element.clientWidth) { + return false; + } + } //calculate scroll position - this.displayRows = []; //rows currently on display in the table - this.displayRowsCount = 0; //count of display rows + left = colEl.offsetLeft + adjust; + left = Math.max(Math.min(left, _this5.table.rowManager.element.scrollWidth - _this5.table.rowManager.element.clientWidth), 0); - this.scrollTop = 0; - this.scrollLeft = 0; - this.vDomRowHeight = 20; //approximation of row heights for padding + _this5.table.rowManager.scrollHorizontal(left); - this.vDomTop = 0; //hold position for first rendered row in the virtual DOM + _this5.scrollHorizontal(left); - this.vDomBottom = 0; //hold possition for last rendered row in the virtual DOM + resolve(); + } else { + console.warn("Scroll Error - Column not visible"); + reject("Scroll Error - Column not visible"); + } + }); + } //////////////// Cell Management ///////////////// - this.vDomScrollPosTop = 0; //last scroll position of the vDom top; + }, { + key: "generateCells", + value: function generateCells(row) { + var cells = []; + this.columnsByIndex.forEach(function (column) { + cells.push(column.generateCell(row)); + }); + return cells; + } //////////////// Column Management ///////////////// - this.vDomScrollPosBottom = 0; //last scroll position of the vDom bottom; + }, { + key: "getFlexBaseWidth", + value: function getFlexBaseWidth() { + var totalWidth = this.table.element.clientWidth, + //table element width + fixedWidth = 0; //adjust for vertical scrollbar if present - this.vDomTopPad = 0; //hold value of padding for top of virtual DOM + if (this.table.rowManager.element.scrollHeight > this.table.rowManager.element.clientHeight) { + totalWidth -= this.table.rowManager.element.offsetWidth - this.table.rowManager.element.clientWidth; + } - this.vDomBottomPad = 0; //hold value of padding for bottom of virtual DOM + this.columnsByIndex.forEach(function (column) { + var width, minWidth, colWidth; - this.vDomMaxRenderChain = 90; //the maximum number of dom elements that can be rendered in 1 go + if (column.visible) { + width = column.definition.width || 0; + minWidth = parseInt(column.minWidth); - this.vDomWindowBuffer = 0; //window row buffer before removing elements, to smooth scrolling + if (typeof width == "string") { + if (width.indexOf("%") > -1) { + colWidth = totalWidth / 100 * parseInt(width); + } else { + colWidth = parseInt(width); + } + } else { + colWidth = width; + } - this.vDomWindowMinTotalRows = 20; //minimum number of rows to be generated in virtual dom (prevent buffering issues on tables with tall rows) + fixedWidth += colWidth > minWidth ? colWidth : minWidth; + } + }); + return fixedWidth; + } + }, { + key: "addColumn", + value: function addColumn(definition, before, nextToColumn) { + var _this6 = this; - this.vDomWindowMinMarginRows = 5; //minimum number of rows to be generated in virtual dom margin + return new Promise(function (resolve, reject) { + var column = _this6._addColumn(definition, before, nextToColumn); - this.vDomTopNewRows = []; //rows to normalize after appending to optimize render speed + _this6._reIndexColumns(); - this.vDomBottomNewRows = []; //rows to normalize after appending to optimize render speed + _this6.dispatch("column-add", definition, before, nextToColumn); - this.rowNumColumn = false; //hold column component for row number column + _this6.redraw(true); - this.redrawBlock = false; //prevent redraws to allow multiple data manipulations becore continuing + if (_this6.layoutMode() != "fitColumns") { + column.reinitializeWidth(); + } - this.redrawBlockRestoreConfig = false; //store latest redraw function calls for when redraw is needed + _this6._verticalAlignHeaders(); - this.redrawBlockRederInPosition = false; //store latest redraw function calls for when redraw is needed - } //////////////// Setup Functions ///////////////// + _this6.table.rowManager.reinitialize(); + _this6.renderer.rerenderColumns(); - _createClass(RowManager, [{ - key: "createHolderElement", - value: function createHolderElement() { - var el = document.createElement("div"); - el.classList.add("tabulator-tableHolder"); - el.setAttribute("tabindex", 0); - return el; - } - }, { - key: "createTableElement", - value: function createTableElement() { - var el = document.createElement("div"); - el.classList.add("tabulator-table"); - return el; - } //return containing element + resolve(column); + }); + } //remove column from system }, { - key: "getElement", - value: function getElement() { - return this.element; - } //return table element + key: "deregisterColumn", + value: function deregisterColumn(column) { + var field = column.getField(), + index; //remove from field list - }, { - key: "getTableElement", - value: function getTableElement() { - return this.tableElement; - } //return position of row in table + if (field) { + delete this.columnsByField[field]; + } //remove from index list - }, { - key: "getRowPosition", - value: function getRowPosition(row, active) { - if (active) { - return this.activeRows.indexOf(row); - } else { - return this.rows.indexOf(row); - } - } //link to column manager - }, { - key: "setColumnManager", - value: function setColumnManager(manager) { - this.columnManager = manager; - } - }, { - key: "initialize", - value: function initialize() { - var _this = this; + index = this.columnsByIndex.indexOf(column); - this.setRenderMode(); //initialize manager + if (index > -1) { + this.columnsByIndex.splice(index, 1); + } //remove from column list - this.element.appendChild(this.tableElement); - this.firstRender = true; //scroll header along with table body - this.element.addEventListener("scroll", function () { - var left = _this.element.scrollLeft; //handle horizontal scrolling + index = this.columns.indexOf(column); - if (_this.scrollLeft != left) { - _this.columnManager.scrollHorizontal(left); + if (index > -1) { + this.columns.splice(index, 1); + } - if (_this.table.options.groupBy) { - _this.table.modules.groupRows.scrollHeaders(left); - } + this._verticalAlignHeaders(); - if (_this.table.modExists("columnCalcs")) { - _this.table.modules.columnCalcs.scrollHorizontal(left); - } + this.redraw(); + } //redraw columns - _this.table.options.scrollHorizontal(left); + }, { + key: "redraw", + value: function redraw(force) { + if (force) { + if (Helpers$1.elVisible(this.element)) { + this._verticalAlignHeaders(); } - _this.scrollLeft = left; - }); //handle virtual dom scrolling + this.table.rowManager.resetScroll(); + this.table.rowManager.reinitialize(); + } - if (this.renderMode === "virtual") { - this.element.addEventListener("scroll", function () { - var top = _this.element.scrollTop; - var dir = _this.scrollTop > top; //handle verical scrolling + if (!this.confirm("table-redrawing", force)) { + this.layoutRefresh(); + } - if (_this.scrollTop != top) { - _this.scrollTop = top; + this.dispatch("table-redraw", force); + this.table.footerManager.redraw(); + } + }]); - _this.scrollVertical(dir); + return ColumnManager; + }(CoreFeature); - if (_this.table.options.ajaxProgressiveLoad == "scroll") { - _this.table.modules.ajax.nextPage(_this.element.scrollHeight - _this.element.clientHeight - top); - } + //public row object + var RowComponent$1 = /*#__PURE__*/function () { + function RowComponent(row) { + _classCallCheck(this, RowComponent); - _this.table.options.scrollVertical(top); - } else { - _this.scrollTop = top; - } - }); + this._row = row; + return new Proxy(this, { + get: function get(target, name, receiver) { + if (typeof target[name] !== "undefined") { + return target[name]; + } else { + return target._row.table.componentFunctionBinder.handle("row", target._row, name); + } } - } ////////////////// Row Manipulation ////////////////// + }); + } + _createClass(RowComponent, [{ + key: "getData", + value: function getData(transform) { + return this._row.getData(transform); + } }, { - key: "findRow", - value: function findRow(subject) { - var _this2 = this; - - if (_typeof(subject) == "object") { - if (subject instanceof Row$1) { - //subject is row element - return subject; - } else if (subject instanceof RowComponent) { - //subject is public row component - return subject._getSelf() || false; - } else if (typeof HTMLElement !== "undefined" && subject instanceof HTMLElement) { - //subject is a HTML element of the row - var match = this.rows.find(function (row) { - return row.getElement() === subject; - }); - return match || false; - } - } else if (typeof subject == "undefined" || subject === null) { - return false; - } else { - //subject should be treated as the index of the row - var _match = this.rows.find(function (row) { - return row.data[_this2.table.options.index] == subject; - }); + key: "getElement", + value: function getElement() { + return this._row.getElement(); + } + }, { + key: "getCells", + value: function getCells() { + var cells = []; - return _match || false; - } //catch all for any other type of input + this._row.getCells().forEach(function (cell) { + cells.push(cell.getComponent()); + }); + return cells; + } + }, { + key: "getCell", + value: function getCell(column) { + var cell = this._row.getCell(column); - return false; + return cell ? cell.getComponent() : false; + } + }, { + key: "getIndex", + value: function getIndex() { + return this._row.getData("data")[this._row.table.options.index]; + } + }, { + key: "getPosition", + value: function getPosition(active) { + return this._row.table.rowManager.getRowPosition(this._row, active); + } + }, { + key: "delete", + value: function _delete() { + return this._row["delete"](); + } + }, { + key: "scrollTo", + value: function scrollTo() { + return this._row.table.rowManager.scrollToRow(this._row); + } + }, { + key: "move", + value: function move(to, after) { + this._row.moveToRow(to, after); + } + }, { + key: "update", + value: function update(data) { + return this._row.updateData(data); + } + }, { + key: "normalizeHeight", + value: function normalizeHeight() { + this._row.normalizeHeight(true); } }, { - key: "getRowFromDataObject", - value: function getRowFromDataObject(data) { - var match = this.rows.find(function (row) { - return row.data === data; - }); - return match || false; + key: "_getSelf", + value: function _getSelf() { + return this._row; } }, { - key: "getRowFromPosition", - value: function getRowFromPosition(position, active) { - if (active) { - return this.activeRows[position]; - } else { - return this.rows[position]; - } + key: "reformat", + value: function reformat() { + return this._row.reinitialize(); } }, { - key: "scrollToRow", - value: function scrollToRow(row, position, ifVisible) { - var _this3 = this; - - var rowIndex = this.getDisplayRows().indexOf(row), - rowEl = row.getElement(), - rowTop, - offset = 0; - return new Promise(function (resolve, reject) { - if (rowIndex > -1) { - if (typeof position === "undefined") { - position = _this3.table.options.scrollToRowPosition; - } - - if (typeof ifVisible === "undefined") { - ifVisible = _this3.table.options.scrollToRowIfVisible; - } + key: "getTable", + value: function getTable() { + return this._row.table; + } + }, { + key: "getNextRow", + value: function getNextRow() { + var row = this._row.nextRow(); - if (position === "nearest") { - switch (_this3.renderMode) { - case "classic": - rowTop = Helpers.elOffset(rowEl).top; - position = Math.abs(_this3.element.scrollTop - rowTop) > Math.abs(_this3.element.scrollTop + _this3.element.clientHeight - rowTop) ? "bottom" : "top"; - break; + return row ? row.getComponent() : row; + } + }, { + key: "getPrevRow", + value: function getPrevRow() { + var row = this._row.prevRow(); - case "virtual": - position = Math.abs(_this3.vDomTop - rowIndex) > Math.abs(_this3.vDomBottom - rowIndex) ? "bottom" : "top"; - break; - } - } //check row visibility + return row ? row.getComponent() : row; + } + }]); + return RowComponent; + }(); - if (!ifVisible) { - if (Helpers.elVisible(rowEl)) { - offset = Helpers.elOffset(rowEl).top - Helpers.elOffset(_this3.element).top; + var Row$1 = /*#__PURE__*/function (_CoreFeature) { + _inherits(Row, _CoreFeature); - if (offset > 0 && offset < _this3.element.clientHeight - rowEl.offsetHeight) { - return false; - } - } - } //scroll to row + var _super = _createSuper(Row); + function Row(data, parent) { + var _this; - switch (_this3.renderMode) { - case "classic": - _this3.element.scrollTop = Helpers.elOffset(rowEl).top - Helpers.elOffset(_this3.element).top + _this3.element.scrollTop; - break; + var type = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : "row"; - case "virtual": - _this3._virtualRenderFill(rowIndex, true); + _classCallCheck(this, Row); - break; - } //align to correct position + _this = _super.call(this, parent.table); + _this.parent = parent; + _this.data = {}; + _this.type = type; //type of element + _this.element = false; + _this.modules = {}; //hold module variables; - switch (position) { - case "middle": - case "center": - if (_this3.element.scrollHeight - _this3.element.scrollTop == _this3.element.clientHeight) { - _this3.element.scrollTop = _this3.element.scrollTop + (rowEl.offsetTop - _this3.element.scrollTop) - (_this3.element.scrollHeight - rowEl.offsetTop) / 2; - } else { - _this3.element.scrollTop = _this3.element.scrollTop - _this3.element.clientHeight / 2; - } + _this.cells = []; + _this.height = 0; //hold element height - break; + _this.heightStyled = ""; //hold element height prestyled to improve render efficiency - case "bottom": - if (_this3.element.scrollHeight - _this3.element.scrollTop == _this3.element.clientHeight) { - _this3.element.scrollTop = _this3.element.scrollTop - (_this3.element.scrollHeight - rowEl.offsetTop) + rowEl.offsetHeight; - } else { - _this3.element.scrollTop = _this3.element.scrollTop - _this3.element.clientHeight + rowEl.offsetHeight; - } + _this.manualHeight = false; //user has manually set row height - break; - } + _this.outerHeight = 0; //holde lements outer height - resolve(); - } else { - console.warn("Scroll Error - Row not visible"); - reject("Scroll Error - Row not visible"); - } - }); - } ////////////////// Data Handling ////////////////// + _this.initialized = false; //element has been rendered - }, { - key: "setData", - value: function setData(data, renderInPosition, columnsChanged) { - var _this4 = this; + _this.heightInitialized = false; //element has resized cells to fit - return new Promise(function (resolve, reject) { - if (renderInPosition && _this4.getDisplayRows().length) { - if (_this4.table.options.pagination) { - _this4._setDataActual(data, true); - } else { - _this4.reRenderInPosition(function () { - _this4._setDataActual(data); - }); - } - } else { - if (_this4.table.options.autoColumns && columnsChanged) { - _this4.table.columnManager.generateColumnsFromRowData(data); - } + _this.component = null; + _this.created = false; - _this4.resetScroll(); + _this.setData(data); - _this4._setDataActual(data); - } + return _this; + } - resolve(); - }); + _createClass(Row, [{ + key: "create", + value: function create() { + if (!this.created) { + this.created = true; + this.generateElement(); + } } }, { - key: "_setDataActual", - value: function _setDataActual(data, renderInPosition) { - var _this5 = this; - - this.table.options.dataLoading.call(this.table, data); + key: "createElement", + value: function createElement() { + var el = document.createElement("div"); + el.classList.add("tabulator-row"); + el.setAttribute("role", "row"); + this.element = el; + } + }, { + key: "getElement", + value: function getElement() { + this.create(); + return this.element; + } + }, { + key: "detachElement", + value: function detachElement() { + if (this.element && this.element.parentNode) { + this.element.parentNode.removeChild(this.element); + } + } + }, { + key: "generateElement", + value: function generateElement() { + this.createElement(); + this.dispatch("row-init", this); + } + }, { + key: "generateCells", + value: function generateCells() { + this.cells = this.table.columnManager.generateCells(this); + } //functions to setup on first render - this._wipeElements(); + }, { + key: "initialize", + value: function initialize(force) { + this.create(); - if (this.table.options.history && this.table.modExists("history")) { - this.table.modules.history.clear(); - } + if (!this.initialized || force) { + this.deleteCells(); - if (Array.isArray(data)) { - if (this.table.modExists("selectRow")) { - this.table.modules.selectRow.clearSelectionData(); + while (this.element.firstChild) { + this.element.removeChild(this.element.firstChild); } - if (this.table.options.reactiveData && this.table.modExists("reactiveData", true)) { - this.table.modules.reactiveData.watchData(data); + this.dispatch("row-layout-before", this); + this.generateCells(); + this.table.columnManager.renderer.renderRowCells(this); + + if (force) { + this.normalizeHeight(); } - data.forEach(function (def, i) { - if (def && _typeof(def) === "object") { - var row = new Row$1(def, _this5); + this.dispatch("row-layout", this); - _this5.rows.push(row); - } else { - console.warn("Data Loading Warning - Invalid row data detected and ignored, expecting object but received:", def); - } - }); - this.refreshActiveData(false, false, renderInPosition); - this.table.options.dataLoaded.call(this.table, data); + if (this.table.options.rowFormatter) { + this.table.options.rowFormatter(this.getComponent()); + } + + this.dispatch("row-layout-after", this); + this.initialized = true; } else { - console.error("Data Loading Error - Unable to process data due to invalid data type \nExpecting: array \nReceived: ", _typeof(data), "\nData: ", data); + this.table.columnManager.renderer.rerenderRowCells(this); } } }, { - key: "_wipeElements", - value: function _wipeElements() { - this.rows.forEach(function (row) { - row.wipe(); - }); + key: "reinitializeHeight", + value: function reinitializeHeight() { + this.heightInitialized = false; - if (this.table.options.groupBy && this.table.modExists("groupRows")) { - this.table.modules.groupRows.wipe(); + if (this.element && this.element.offsetParent !== null) { + this.normalizeHeight(true); } - - this.rows = []; - this.activeRows = []; - this.activeRowsCount = 0; - this.displayRows = []; - this.displayRowsCount = 0; - this.adjustTableSize(); } }, { - key: "deleteRow", - value: function deleteRow(row, blockRedraw) { - var allIndex = this.rows.indexOf(row), - activeIndex = this.activeRows.indexOf(row); + key: "reinitialize", + value: function reinitialize(children) { + this.initialized = false; + this.heightInitialized = false; - if (activeIndex > -1) { - this.activeRows.splice(activeIndex, 1); + if (!this.manualHeight) { + this.height = 0; + this.heightStyled = ""; + } + + if (this.element && this.element.offsetParent !== null) { + this.initialize(true); + } + + this.dispatch("row-relayout", this); + } //get heights when doing bulk row style calcs in virtual DOM + + }, { + key: "calcHeight", + value: function calcHeight(force) { + var maxHeight = 0, + minHeight = this.table.options.resizableRows ? this.element.clientHeight : 0; + this.cells.forEach(function (cell) { + var height = cell.getHeight(); + + if (height > maxHeight) { + maxHeight = height; + } + }); + + if (force) { + this.height = Math.max(maxHeight, minHeight); + } else { + this.height = this.manualHeight ? this.height : Math.max(maxHeight, minHeight); } - if (allIndex > -1) { - this.rows.splice(allIndex, 1); + this.heightStyled = this.height ? this.height + "px" : ""; + this.outerHeight = this.element.offsetHeight; + } //set of cells + + }, { + key: "setCellHeight", + value: function setCellHeight() { + this.cells.forEach(function (cell) { + cell.setHeight(); + }); + this.heightInitialized = true; + } + }, { + key: "clearCellHeight", + value: function clearCellHeight() { + this.cells.forEach(function (cell) { + cell.clearHeight(); + }); + } //normalize the height of elements in the row + + }, { + key: "normalizeHeight", + value: function normalizeHeight(force) { + if (force) { + this.clearCellHeight(); } - this.setActiveRows(this.activeRows); - this.displayRowIterator(function (rows) { - var displayIndex = rows.indexOf(row); + this.calcHeight(force); + this.setCellHeight(); + } //set height of rows - if (displayIndex > -1) { - rows.splice(displayIndex, 1); - } - }); + }, { + key: "setHeight", + value: function setHeight(height, force) { + if (this.height != height || force) { + this.manualHeight = true; + this.height = height; + this.heightStyled = height ? height + "px" : ""; + this.setCellHeight(); // this.outerHeight = this.element.outerHeight(); - if (!blockRedraw) { - this.reRenderInPosition(); + this.outerHeight = this.element.offsetHeight; } + } //return rows outer height - this.regenerateRowNumbers(); - this.table.options.rowDeleted.call(this.table, row.getComponent()); + }, { + key: "getHeight", + value: function getHeight() { + return this.outerHeight; + } //return rows outer Width - if (this.table.options.dataChanged) { - this.table.options.dataChanged.call(this.table, this.getData()); - } + }, { + key: "getWidth", + value: function getWidth() { + return this.element.offsetWidth; + } //////////////// Cell Management ///////////////// - if (this.table.options.groupBy && this.table.modExists("groupRows")) { - this.table.modules.groupRows.updateGroupRows(true); - } else if (this.table.options.pagination && this.table.modExists("page")) { - this.refreshActiveData(false, false, true); - } else { - if (this.table.options.pagination && this.table.modExists("page")) { - this.refreshActiveData("page"); - } - } - } }, { - key: "addRow", - value: function addRow(data, pos, index, blockRedraw) { - var row = this.addRowActual(data, pos, index, blockRedraw); + key: "deleteCell", + value: function deleteCell(cell) { + var index = this.cells.indexOf(cell); - if (this.table.options.history && this.table.modExists("history")) { - this.table.modules.history.action("rowAdd", row, { - data: data, - pos: pos, - index: index - }); + if (index > -1) { + this.cells.splice(index, 1); } + } //////////////// Data Management ///////////////// - return row; - } //add multiple rows + }, { + key: "setData", + value: function setData(data) { + this.data = this.chain("row-data-init-before", [this, data], null, data); + this.dispatch("row-data-init-after", this); + } //update the rows data }, { - key: "addRows", - value: function addRows(data, pos, index) { - var _this6 = this; + key: "updateData", + value: function updateData(updatedData) { + var _this2 = this; - var rows = []; + var visible = this.element && Helpers$1.elVisible(this.element), + tempData = {}, + newRowData; return new Promise(function (resolve, reject) { - pos = _this6.findAddRowPos(pos); - - if (!Array.isArray(data)) { - data = [data]; + if (typeof updatedData === "string") { + updatedData = JSON.parse(updatedData); } - data.length - 1; + _this2.dispatch("row-data-save-before", _this2); - if (typeof index == "undefined" && pos || typeof index !== "undefined" && !pos) { - data.reverse(); + if (_this2.subscribed("row-data-changing")) { + tempData = Object.assign(tempData, _this2.data); + tempData = Object.assign(tempData, updatedData); } - data.forEach(function (item, i) { - var row = _this6.addRow(item, pos, index, true); - - rows.push(row); - }); - - if (_this6.table.options.groupBy && _this6.table.modExists("groupRows")) { - _this6.table.modules.groupRows.updateGroupRows(true); - } else if (_this6.table.options.pagination && _this6.table.modExists("page")) { - _this6.refreshActiveData(false, false, true); - } else { - _this6.reRenderInPosition(); - } //recalc column calculations if present - + newRowData = _this2.chain("row-data-changing", [_this2, tempData, updatedData], null, updatedData); //set data - if (_this6.table.modExists("columnCalcs")) { - _this6.table.modules.columnCalcs.recalc(_this6.table.rowManager.activeRows); + for (var attrname in newRowData) { + _this2.data[attrname] = newRowData[attrname]; } - _this6.regenerateRowNumbers(); - - resolve(rows); - }); - } - }, { - key: "findAddRowPos", - value: function findAddRowPos(pos) { - if (typeof pos === "undefined") { - pos = this.table.options.addRowPos; - } - - if (pos === "pos") { - pos = true; - } - - if (pos === "bottom") { - pos = false; - } - - return pos; - } - }, { - key: "addRowActual", - value: function addRowActual(data, pos, index, blockRedraw) { - var row = data instanceof Row$1 ? data : new Row$1(data || {}, this), - top = this.findAddRowPos(pos), - allIndex = -1, - activeIndex, - dispRows; - - if (!index && this.table.options.pagination && this.table.options.paginationAddRow == "page") { - dispRows = this.getDisplayRows(); + _this2.dispatch("row-data-save-after", _this2); //update affected cells only - if (top) { - if (dispRows.length) { - index = dispRows[0]; - } else { - if (this.activeRows.length) { - index = this.activeRows[this.activeRows.length - 1]; - top = false; - } - } - } else { - if (dispRows.length) { - index = dispRows[dispRows.length - 1]; - top = dispRows.length < this.table.modules.page.getPageSize() ? false : true; - } - } - } - if (typeof index !== "undefined") { - index = this.findRow(index); - } + for (var attrname in updatedData) { + var columns = _this2.table.columnManager.getColumnsByFieldRoot(attrname); - if (this.table.options.groupBy && this.table.modExists("groupRows")) { - this.table.modules.groupRows.assignRowToGroup(row); - var groupRows = row.getGroup().rows; + columns.forEach(function (column) { + var cell = _this2.getCell(column.getField()); - if (groupRows.length > 1) { - if (!index || index && groupRows.indexOf(index) == -1) { - if (top) { - if (groupRows[0] !== row) { - index = groupRows[0]; + if (cell) { + var value = column.getFieldValue(newRowData); - this._moveRowInArray(row.getGroup().rows, row, index, !top); - } - } else { - if (groupRows[groupRows.length - 1] !== row) { - index = groupRows[groupRows.length - 1]; + if (cell.getValue() != value) { + cell.setValueProcessData(value); - this._moveRowInArray(row.getGroup().rows, row, index, !top); + if (visible) { + cell.cellRendered(); + } } } - } else { - this._moveRowInArray(row.getGroup().rows, row, index, !top); - } - } - } + }); + } //Partial reinitialization if visible - if (index) { - allIndex = this.rows.indexOf(index); - } - if (index && allIndex > -1) { - activeIndex = this.activeRows.indexOf(index); - this.displayRowIterator(function (rows) { - var displayIndex = rows.indexOf(index); + if (visible) { + _this2.normalizeHeight(true); - if (displayIndex > -1) { - rows.splice(top ? displayIndex : displayIndex + 1, 0, row); + if (_this2.table.options.rowFormatter) { + _this2.table.options.rowFormatter(_this2.getComponent()); } - }); - - if (activeIndex > -1) { - this.activeRows.splice(top ? activeIndex : activeIndex + 1, 0, row); - } - - this.rows.splice(top ? allIndex : allIndex + 1, 0, row); - } else { - if (top) { - this.displayRowIterator(function (rows) { - rows.unshift(row); - }); - this.activeRows.unshift(row); - this.rows.unshift(row); } else { - this.displayRowIterator(function (rows) { - rows.push(row); - }); - this.activeRows.push(row); - this.rows.push(row); + _this2.initialized = false; + _this2.height = 0; + _this2.heightStyled = ""; } - } - this.setActiveRows(this.activeRows); - this.table.options.rowAdded.call(this.table, row.getComponent()); + _this2.dispatch("row-data-changed", _this2, visible, updatedData); //this.reinitialize(); - if (this.table.options.dataChanged) { - this.table.options.dataChanged.call(this.table, this.getData()); - } - if (!blockRedraw) { - this.reRenderInPosition(); - } + _this2.dispatchExternal("rowUpdated", _this2.getComponent()); - return row; + if (_this2.subscribedExternal.subscribed("dataChanged")) { + _this2.dispatchExternal("dataChanged", _this2.table.rowManager.getData()); + } + + resolve(); + }); } }, { - key: "moveRow", - value: function moveRow(from, to, after) { - if (this.table.options.history && this.table.modExists("history")) { - this.table.modules.history.action("rowMove", from, { - posFrom: this.getRowPosition(from), - posTo: this.getRowPosition(to), - to: to, - after: after - }); + key: "getData", + value: function getData(transform) { + if (transform) { + return this.chain("row-data-retrieve", [this, transform], null, this.data); } - this.moveRowActual(from, to, after); - this.regenerateRowNumbers(); - this.table.options.rowMoved.call(this.table, from.getComponent()); + return this.data; } }, { - key: "moveRowActual", - value: function moveRowActual(from, to, after) { - var _this7 = this; - - this._moveRowInArray(this.rows, from, to, after); - - this._moveRowInArray(this.activeRows, from, to, after); - - this.displayRowIterator(function (rows) { - _this7._moveRowInArray(rows, from, to, after); + key: "getCell", + value: function getCell(column) { + var match = false; + column = this.table.columnManager.findColumn(column); + match = this.cells.find(function (cell) { + return cell.column === column; }); - - if (this.table.options.groupBy && this.table.modExists("groupRows")) { - if (!after && to instanceof Group) { - to = this.table.rowManager.prevDisplayRow(from) || to; - } - - var toGroup = to.getGroup(); - var fromGroup = from.getGroup(); - - if (toGroup === fromGroup) { - this._moveRowInArray(toGroup.rows, from, to, after); - } else { - if (fromGroup) { - fromGroup.removeRow(from); - } - - toGroup.insertRow(from, to, after); - } - } + return match; } }, { - key: "_moveRowInArray", - value: function _moveRowInArray(rows, from, to, after) { - var fromIndex, toIndex, start, end; - - if (from !== to) { - fromIndex = rows.indexOf(from); - - if (fromIndex > -1) { - rows.splice(fromIndex, 1); - toIndex = rows.indexOf(to); - - if (toIndex > -1) { - if (after) { - rows.splice(toIndex + 1, 0, from); - } else { - rows.splice(toIndex, 0, from); - } - } else { - rows.splice(fromIndex, 0, from); - } - } //restyle rows - - - if (rows === this.getDisplayRows()) { - start = fromIndex < toIndex ? fromIndex : toIndex; - end = toIndex > fromIndex ? toIndex : fromIndex + 1; - - for (var i = start; i <= end; i++) { - if (rows[i]) { - this.styleRow(rows[i], i); - } - } - } - } + key: "getCellIndex", + value: function getCellIndex(findCell) { + return this.cells.findIndex(function (cell) { + return cell === findCell; + }); } }, { - key: "clearData", - value: function clearData() { - this.setData([]); + key: "findCell", + value: function findCell(subject) { + return this.cells.find(function (cell) { + return cell.element === subject; + }); } }, { - key: "getRowIndex", - value: function getRowIndex(row) { - return this.findRowIndex(row, this.rows); + key: "getCells", + value: function getCells() { + return this.cells; } }, { - key: "getDisplayRowIndex", - value: function getDisplayRowIndex(row) { - var index = this.getDisplayRows().indexOf(row); - return index > -1 ? index : false; + key: "nextRow", + value: function nextRow() { + var row = this.table.rowManager.nextDisplayRow(this, true); + return row || false; } }, { - key: "nextDisplayRow", - value: function nextDisplayRow(row, rowOnly) { - var index = this.getDisplayRowIndex(row), - nextRow = false; - - if (index !== false && index < this.displayRowsCount - 1) { - nextRow = this.getDisplayRows()[index + 1]; - } - - if (nextRow && (!(nextRow instanceof Row$1) || nextRow.type != "row")) { - return this.nextDisplayRow(nextRow, rowOnly); - } - - return nextRow; + key: "prevRow", + value: function prevRow() { + var row = this.table.rowManager.prevDisplayRow(this, true); + return row || false; } }, { - key: "prevDisplayRow", - value: function prevDisplayRow(row, rowOnly) { - var index = this.getDisplayRowIndex(row), - prevRow = false; - - if (index) { - prevRow = this.getDisplayRows()[index - 1]; - } + key: "moveToRow", + value: function moveToRow(to, before) { + var toRow = this.table.rowManager.findRow(to); - if (rowOnly && prevRow && (!(prevRow instanceof Row$1) || prevRow.type != "row")) { - return this.prevDisplayRow(prevRow, rowOnly); + if (toRow) { + this.table.rowManager.moveRowActual(this, toRow, !before); + this.table.rowManager.refreshActiveData("display", false, true); + } else { + console.warn("Move Error - No matching row found:", to); } + } ///////////////////// Actions ///////////////////// - return prevRow; - } }, { - key: "findRowIndex", - value: function findRowIndex(row, list) { - var rowIndex; - row = this.findRow(row); + key: "delete", + value: function _delete() { + var _this3 = this; - if (row) { - rowIndex = list.indexOf(row); + return new Promise(function (resolve, reject) { + _this3.dispatch("row-delete", _this3); - if (rowIndex > -1) { - return rowIndex; - } - } + _this3.deleteActual(); - return false; - } - }, { - key: "getData", - value: function getData(active, transform) { - var output = [], - rows = this.getRows(active); - rows.forEach(function (row) { - if (row.type == "row") { - output.push(row.getData(transform || "data")); - } + resolve(); }); - return output; } }, { - key: "getComponents", - value: function getComponents(active) { - var output = [], - rows = this.getRows(active); - rows.forEach(function (row) { - output.push(row.getComponent()); - }); - return output; + key: "deleteActual", + value: function deleteActual(blockRedraw) { + var index = this.table.rowManager.getRowIndex(this); + this.detatchModules(); + this.table.rowManager.deleteRow(this, blockRedraw); + this.deleteCells(); + this.initialized = false; + this.heightInitialized = false; + this.element = false; + this.dispatch("row-deleted", this); } }, { - key: "getDataCount", - value: function getDataCount(active) { - var rows = this.getRows(active); - return rows.length; + key: "detatchModules", + value: function detatchModules() { + this.dispatch("row-deleting", this); } }, { - key: "_genRemoteRequest", - value: function _genRemoteRequest() { - var _this8 = this; - - var table = this.table, - options = table.options, - params = {}; - - if (table.modExists("page")) { - //set sort data if defined - if (options.ajaxSorting) { - var sorters = this.table.modules.sort.getSort(); - sorters.forEach(function (item) { - delete item.column; - }); - params[this.table.modules.page.paginationDataSentNames.sorters] = sorters; - } //set filter data if defined - - - if (options.ajaxFiltering) { - var filters = this.table.modules.filter.getFilters(true, true); - params[this.table.modules.page.paginationDataSentNames.filters] = filters; - } + key: "deleteCells", + value: function deleteCells() { + var cellCount = this.cells.length; - this.table.modules.ajax.setParams(params, true); + for (var i = 0; i < cellCount; i++) { + this.cells[0]["delete"](); } - - table.modules.ajax.sendRequest().then(function (data) { - _this8._setDataActual(data, true); - })["catch"](function (e) {}); - } //choose the path to refresh data after a filter update - + } }, { - key: "filterRefresh", - value: function filterRefresh() { - var table = this.table, - options = table.options, - left = this.scrollLeft; - - if (options.ajaxFiltering) { - if (options.pagination == "remote" && table.modExists("page")) { - table.modules.page.reset(true); - table.modules.page.setPage(1).then(function () {})["catch"](function () {}); - } else if (options.ajaxProgressiveLoad) { - table.modules.ajax.loadData().then(function () {})["catch"](function () {}); - } else { - //assume data is url, make ajax call to url to get data - this._genRemoteRequest(); - } - } else { - this.refreshActiveData("filter"); - } + key: "wipe", + value: function wipe() { + this.detatchModules(); + this.deleteCells(); - this.scrollHorizontal(left); - } //choose the path to refresh data after a sorter update + if (this.element) { + while (this.element.firstChild) { + this.element.removeChild(this.element.firstChild); + } - }, { - key: "sorterRefresh", - value: function sorterRefresh(loadOrignalData) { - var table = this.table, - options = this.table.options, - left = this.scrollLeft; - - if (options.ajaxSorting) { - if ((options.pagination == "remote" || options.progressiveLoad) && table.modExists("page")) { - table.modules.page.reset(true); - table.modules.page.setPage(1).then(function () {})["catch"](function () {}); - } else if (options.ajaxProgressiveLoad) { - table.modules.ajax.loadData().then(function () {})["catch"](function () {}); - } else { - //assume data is url, make ajax call to url to get data - this._genRemoteRequest(); + if (this.element.parentNode) { + this.element.parentNode.removeChild(this.element); } - } else { - this.refreshActiveData(loadOrignalData ? "filter" : "sort"); } - this.scrollHorizontal(left); + this.element = false; + this.modules = {}; } }, { - key: "scrollHorizontal", - value: function scrollHorizontal(left) { - this.scrollLeft = left; - this.element.scrollLeft = left; + key: "getGroup", + value: function getGroup() { + return this.modules.group || false; + } //////////////// Object Generation ///////////////// - if (this.table.options.groupBy) { - this.table.modules.groupRows.scrollHeaders(left); + }, { + key: "getComponent", + value: function getComponent() { + if (!this.component) { + this.component = new RowComponent$1(this); } - if (this.table.modExists("columnCalcs")) { - this.table.modules.columnCalcs.scrollHorizontal(left); - } - } //set active data set + return this.component; + } + }]); - }, { - key: "refreshActiveData", - value: function refreshActiveData(stage, skipStage, renderInPosition) { - var table = this.table, - cascadeOrder = ["all", "filter", "sort", "display", "freeze", "group", "tree", "page"], - displayIndex; + return Row; + }(CoreFeature); - if (this.redrawBlock) { - if (!this.redrawBlockRestoreConfig || cascadeOrder.indexOf(stage) < cascadeOrder.indexOf(this.redrawBlockRestoreConfig.stage)) { - this.redrawBlockRestoreConfig = { - stage: stage, - skipStage: skipStage, - renderInPosition: renderInPosition - }; - } + var BaiscVertical = /*#__PURE__*/function (_Renderer) { + _inherits(BaiscVertical, _Renderer); - return; - } else { - if (this.table.modExists("edit")) { - this.table.modules.edit.cancelEdit(); - } + var _super = _createSuper(BaiscVertical); - if (!stage) { - stage = "all"; - } + function BaiscVertical(table) { + var _this; - if (table.options.selectable && !table.options.selectablePersistence && table.modExists("selectRow")) { - table.modules.selectRow.deselectRows(); - } //cascade through data refresh stages + _classCallCheck(this, BaiscVertical); + _this = _super.call(this, table); + _this.verticalFillMode = "fill"; + _this.scrollTop = 0; + _this.scrollLeft = 0; + _this.scrollTop = 0; + _this.scrollLeft = 0; + return _this; + } - switch (stage) { - case "all": - case "filter": - if (!skipStage) { - if (table.modExists("filter")) { - this.setActiveRows(table.modules.filter.filter(this.rows)); - } else { - this.setActiveRows(this.rows.slice(0)); - } - } else { - skipStage = false; - } + _createClass(BaiscVertical, [{ + key: "clearRows", + value: function clearRows() { + var element = this.tableElement; // element.children.detach(); - case "sort": - if (!skipStage) { - if (table.modExists("sort")) { - table.modules.sort.sort(this.activeRows); - } - } else { - skipStage = false; - } //regenerate row numbers for row number formatter if in use + while (element.firstChild) { + element.removeChild(element.firstChild); + } + element.scrollTop = 0; + element.scrollLeft = 0; + element.style.minWidth = ""; + element.style.minHeight = ""; + element.style.display = ""; + element.style.visibility = ""; + } + }, { + key: "renderRows", + value: function renderRows() { + var _this2 = this; - this.regenerateRowNumbers(); - //generic stage to allow for pipeline trigger after the data manipulation stage + var element = this.tableElement, + onlyGroupHeaders = true; + this.rows().forEach(function (row, index) { + _this2.styleRow(row, index); - case "display": - this.resetDisplayRows(); + element.appendChild(row.getElement()); + row.initialize(true); - case "freeze": - if (!skipStage) { - if (this.table.modExists("frozenRows")) { - if (table.modules.frozenRows.isFrozen()) { - if (!table.modules.frozenRows.getDisplayIndex()) { - table.modules.frozenRows.setDisplayIndex(this.getNextDisplayIndex()); - } + if (row.type !== "group") { + onlyGroupHeaders = false; + } + }); + + if (onlyGroupHeaders) { + element.style.minWidth = this.table.columnManager.getWidth() + "px"; + } else { + element.style.minWidth = ""; + } + } + }, { + key: "rerenderRows", + value: function rerenderRows(callback) { + this.render(); - displayIndex = table.modules.frozenRows.getDisplayIndex(); - displayIndex = this.setDisplayRows(table.modules.frozenRows.getRows(this.getDisplayRows(displayIndex - 1)), displayIndex); + if (callback) { + callback(); + } + } + }, { + key: "scrollToRowNearestTop", + value: function scrollToRowNearestTop(row) { + var rowTop = Helpers$1.elOffset(row.getElement()).top; + return !(Math.abs(this.elementVertical.scrollTop - rowTop) > Math.abs(this.elementVertical.scrollTop + this.elementVertical.clientHeight - rowTop)); + } + }, { + key: "scrollToRow", + value: function scrollToRow(row) { + var rowEl = row.getElement(); + this.elementVertical.scrollTop = Helpers$1.elOffset(rowEl).top - Helpers$1.elOffset(this.elementVertical).top + this.elementVertical.scrollTop; + } + }, { + key: "visibleRows", + value: function visibleRows(includingBuffer) { + return this.rows(); + } + }]); - if (displayIndex !== true) { - table.modules.frozenRows.setDisplayIndex(displayIndex); - } - } - } - } else { - skipStage = false; - } + return BaiscVertical; + }(Renderer); - case "group": - if (!skipStage) { - if (table.options.groupBy && table.modExists("groupRows")) { - if (!table.modules.groupRows.getDisplayIndex()) { - table.modules.groupRows.setDisplayIndex(this.getNextDisplayIndex()); - } + var VirtualDomVertical = /*#__PURE__*/function (_Renderer) { + _inherits(VirtualDomVertical, _Renderer); - displayIndex = table.modules.groupRows.getDisplayIndex(); - displayIndex = this.setDisplayRows(table.modules.groupRows.getRows(this.getDisplayRows(displayIndex - 1)), displayIndex); + var _super = _createSuper(VirtualDomVertical); - if (displayIndex !== true) { - table.modules.groupRows.setDisplayIndex(displayIndex); - } - } - } else { - skipStage = false; - } + function VirtualDomVertical(table) { + var _this; - case "tree": - if (!skipStage) { - if (table.options.dataTree && table.modExists("dataTree")) { - if (!table.modules.dataTree.getDisplayIndex()) { - table.modules.dataTree.setDisplayIndex(this.getNextDisplayIndex()); - } + _classCallCheck(this, VirtualDomVertical); - displayIndex = table.modules.dataTree.getDisplayIndex(); - displayIndex = this.setDisplayRows(table.modules.dataTree.getRows(this.getDisplayRows(displayIndex - 1)), displayIndex); + _this = _super.call(this, table); + _this.verticalFillMode = "fill"; + _this.scrollTop = 0; + _this.scrollLeft = 0; + _this.vDomRowHeight = 20; //approximation of row heights for padding - if (displayIndex !== true) { - table.modules.dataTree.setDisplayIndex(displayIndex); - } - } - } else { - skipStage = false; - } + _this.vDomTop = 0; //hold position for first rendered row in the virtual DOM - if (table.options.pagination && table.modExists("page") && !renderInPosition) { - if (table.modules.page.getMode() == "local") { - table.modules.page.reset(); - } - } + _this.vDomBottom = 0; //hold possition for last rendered row in the virtual DOM - case "page": - if (!skipStage) { - if (table.options.pagination && table.modExists("page")) { - if (!table.modules.page.getDisplayIndex()) { - table.modules.page.setDisplayIndex(this.getNextDisplayIndex()); - } + _this.vDomScrollPosTop = 0; //last scroll position of the vDom top; - displayIndex = table.modules.page.getDisplayIndex(); + _this.vDomScrollPosBottom = 0; //last scroll position of the vDom bottom; - if (table.modules.page.getMode() == "local") { - table.modules.page.setMaxRows(this.getDisplayRows(displayIndex - 1).length); - } + _this.vDomTopPad = 0; //hold value of padding for top of virtual DOM - displayIndex = this.setDisplayRows(table.modules.page.getRows(this.getDisplayRows(displayIndex - 1)), displayIndex); + _this.vDomBottomPad = 0; //hold value of padding for bottom of virtual DOM - if (displayIndex !== true) { - table.modules.page.setDisplayIndex(displayIndex); - } - } - } else { - skipStage = false; - } + _this.vDomMaxRenderChain = 90; //the maximum number of dom elements that can be rendered in 1 go - } + _this.vDomWindowBuffer = 0; //window row buffer before removing elements, to smooth scrolling - if (Helpers.elVisible(this.element)) { - if (renderInPosition) { - this.reRenderInPosition(); - } else { - if (stage === "all" && this.table.options.virtualDomHoz) { - this.table.vdomHoz.dataChange(); - } + _this.vDomWindowMinTotalRows = 20; //minimum number of rows to be generated in virtual dom (prevent buffering issues on tables with tall rows) - this.renderTable(); + _this.vDomWindowMinMarginRows = 5; //minimum number of rows to be generated in virtual dom margin - if (table.options.layoutColumnsOnNewData) { - this.table.columnManager.redraw(true); - } - } - } + _this.vDomTopNewRows = []; //rows to normalize after appending to optimize render speed - if (table.modExists("columnCalcs")) { - table.modules.columnCalcs.recalc(this.activeRows); - } - } - } //regenerate row numbers for row number formatter if in use + _this.vDomBottomNewRows = []; //rows to normalize after appending to optimize render speed - }, { - key: "regenerateRowNumbers", - value: function regenerateRowNumbers() { - var _this9 = this; + return _this; + } ////////////////////////////////////// + ///////// Public Functions /////////// + ////////////////////////////////////// - if (this.rowNumColumn) { - this.activeRows.forEach(function (row) { - var cell = row.getCell(_this9.rowNumColumn); - if (cell) { - cell._generateContents(); - } - }); + _createClass(VirtualDomVertical, [{ + key: "clearRows", + value: function clearRows() { + var element = this.tableElement; // element.children.detach(); + + while (element.firstChild) { + element.removeChild(element.firstChild); } + + element.style.paddingTop = ""; + element.style.paddingBottom = ""; + element.style.minWidth = ""; + element.style.minHeight = ""; + element.style.display = ""; + element.style.visibility = ""; + this.elementVertical.scrollTop = 0; + this.elementVertical.scrollLeft = 0; + this.scrollTop = 0; + this.scrollLeft = 0; + this.vDomTop = 0; + this.vDomBottom = 0; + this.vDomTopPad = 0; + this.vDomBottomPad = 0; + this.vDomScrollPosTop = 0; + this.vDomScrollPosBottom = 0; } }, { - key: "setActiveRows", - value: function setActiveRows(activeRows) { - this.activeRows = activeRows; - this.activeRowsCount = this.activeRows.length; - } //reset display rows array - + key: "renderRows", + value: function renderRows() { + this._virtualRenderFill(); + } }, { - key: "resetDisplayRows", - value: function resetDisplayRows() { - this.displayRows = []; - this.displayRows.push(this.activeRows.slice(0)); - this.displayRowsCount = this.displayRows[0].length; + key: "rerenderRows", + value: function rerenderRows(callback) { + var scrollTop = this.elementVertical.scrollTop; + var topRow = false; + var topOffset = false; + var left = this.table.rowManager.scrollLeft; + var rows = this.rows(); - if (this.table.modExists("frozenRows")) { - this.table.modules.frozenRows.setDisplayIndex(0); - } + for (var i = this.vDomTop; i <= this.vDomBottom; i++) { + if (rows[i]) { + var diff = scrollTop - rows[i].getElement().offsetTop; - if (this.table.options.groupBy && this.table.modExists("groupRows")) { - this.table.modules.groupRows.setDisplayIndex(0); + if (topOffset === false || Math.abs(diff) < topOffset) { + topOffset = diff; + topRow = i; + } else { + break; + } + } } - if (this.table.options.pagination && this.table.modExists("page")) { - this.table.modules.page.setDisplayIndex(0); + if (callback) { + callback(); } + + this._virtualRenderFill(topRow === false ? this.rows.length - 1 : topRow, true, topOffset || 0); + + this.scrollColumns(left); } }, { - key: "getNextDisplayIndex", - value: function getNextDisplayIndex() { - return this.displayRows.length; - } //set display row pipeline data - + key: "scrollColumns", + value: function scrollColumns(left) { + this.table.rowManager.scrollHorizontal(left); + } }, { - key: "setDisplayRows", - value: function setDisplayRows(displayRows, index) { - var output = true; + key: "scrollRows", + value: function scrollRows(top, dir) { + var topDiff = top - this.vDomScrollPosTop; + var bottomDiff = top - this.vDomScrollPosBottom; + var margin = this.vDomWindowBuffer * 2; + var rows = this.rows(); + this.scrollTop = top; - if (index && typeof this.displayRows[index] != "undefined") { - this.displayRows[index] = displayRows; - output = true; + if (-topDiff > margin || bottomDiff > margin) { + //if big scroll redraw table; + var left = this.table.rowManager.scrollLeft; + + this._virtualRenderFill(Math.floor(this.elementVertical.scrollTop / this.elementVertical.scrollHeight * rows.length)); + + this.scrollColumns(left); } else { - this.displayRows.push(displayRows); - output = index = this.displayRows.length - 1; - } + if (dir) { + //scrolling up + if (topDiff < 0) { + this._addTopRow(rows, -topDiff); + } - if (index == this.displayRows.length - 1) { - this.displayRowsCount = this.displayRows[this.displayRows.length - 1].length; - } + if (bottomDiff < 0) { + //hide bottom row if needed + if (this.vDomScrollHeight - this.scrollTop > this.vDomWindowBuffer) { + this._removeBottomRow(rows, -bottomDiff); + } else { + this.vDomScrollPosBottom = this.scrollTop; + } + } + } else { + if (bottomDiff >= 0) { + this._addBottomRow(rows, bottomDiff); + } //scrolling down - return output; + + if (topDiff >= 0) { + //hide top row if needed + if (this.scrollTop > this.vDomWindowBuffer) { + this._removeTopRow(rows, topDiff); + } else { + this.vDomScrollPosTop = this.scrollTop; + } + } + } + } } }, { - key: "getDisplayRows", - value: function getDisplayRows(index) { - if (typeof index == "undefined") { - return this.displayRows.length ? this.displayRows[this.displayRows.length - 1] : []; - } else { - return this.displayRows[index] || []; + key: "resize", + value: function resize() { + this.vDomWindowBuffer = this.table.options.renderVerticalBuffer || this.elementVertical.clientHeight; + } + }, { + key: "scrollToRowNearestTop", + value: function scrollToRowNearestTop(row) { + var rowIndex = this.rows().indexOf(row); + return !(Math.abs(this.vDomTop - rowIndex) > Math.abs(this.vDomBottom - rowIndex)); + } + }, { + key: "scrollToRow", + value: function scrollToRow(row) { + var index = this.rows().indexOf(row); + + if (index > -1) { + this._virtualRenderFill(index, true); } } }, { - key: "getVisibleRows", - value: function getVisibleRows(viewable) { - var topEdge = this.element.scrollTop, - bottomEdge = this.element.clientHeight + topEdge, + key: "visibleRows", + value: function visibleRows(includingBuffer) { + var topEdge = this.elementVertical.scrollTop, + bottomEdge = this.elementVertical.clientHeight + topEdge, topFound = false, topRow = 0, bottomRow = 0, - rows = this.getDisplayRows(); - - if (viewable) { - this.getDisplayRows(); + rows = this.rows(); + if (includingBuffer) { + topRow = this.vDomTop; + bottomRow = this.vDomBottom; + } else { for (var i = this.vDomTop; i <= this.vDomBottom; i++) { if (rows[i]) { if (!topFound) { @@ -5837,3773 +4481,4044 @@ } } } - } else { - topRow = this.vDomTop; - bottomRow = this.vDomBottom; } - return rows.slice(topRow, bottomRow + 1); - } //repeat action accross display rows + return rows.slice(topRow, bottomRow + 1); + } ////////////////////////////////////// + //////// Internal Rendering ////////// + ////////////////////////////////////// + //full virtual render + + }, { + key: "_virtualRenderFill", + value: function _virtualRenderFill(position, forceMove, offset) { + var element = this.tableElement, + holder = this.elementVertical, + topPad = 0, + rowsHeight = 0, + heightOccupied = 0, + topPadHeight = 0, + i = 0, + rows = this.rows(), + rowsCount = rows.length, + containerHeight = this.elementVertical.clientHeight; + position = position || 0; + offset = offset || 0; + + if (!position) { + this.clear(); + } else { + while (element.firstChild) { + element.removeChild(element.firstChild); + } //check if position is too close to bottom of table + + + heightOccupied = (rowsCount - position + 1) * this.vDomRowHeight; + + if (heightOccupied < containerHeight) { + position -= Math.ceil((containerHeight - heightOccupied) / this.vDomRowHeight); + + if (position < 0) { + position = 0; + } + } //calculate initial pad + + + topPad = Math.min(Math.max(Math.floor(this.vDomWindowBuffer / this.vDomRowHeight), this.vDomWindowMinMarginRows), position); + position -= topPad; + } + + if (rowsCount && Helpers$1.elVisible(this.elementVertical)) { + this.vDomTop = position; + this.vDomBottom = position - 1; + + while ((rowsHeight <= containerHeight + this.vDomWindowBuffer || i < this.vDomWindowMinTotalRows) && this.vDomBottom < rowsCount - 1) { + var index = this.vDomBottom + 1, + row = rows[index], + rowHeight = 0; + this.styleRow(row, index); + element.appendChild(row.getElement()); + row.initialize(); + + if (!row.heightInitialized) { + row.normalizeHeight(true); + } + + rowHeight = row.getHeight(); + + if (i < topPad) { + topPadHeight += rowHeight; + } else { + rowsHeight += rowHeight; + } + + if (rowHeight > this.vDomWindowBuffer) { + this.vDomWindowBuffer = rowHeight * 2; + } + + this.vDomBottom++; + i++; + } + + if (!position) { + this.vDomTopPad = 0; //adjust rowheight to match average of rendered elements + + this.vDomRowHeight = Math.floor((rowsHeight + topPadHeight) / i); + this.vDomBottomPad = this.vDomRowHeight * (rowsCount - this.vDomBottom - 1); + this.vDomScrollHeight = topPadHeight + rowsHeight + this.vDomBottomPad - containerHeight; + } else { + this.vDomTopPad = !forceMove ? this.scrollTop - topPadHeight : this.vDomRowHeight * this.vDomTop + offset; + this.vDomBottomPad = this.vDomBottom == rowsCount - 1 ? 0 : Math.max(this.vDomScrollHeight - this.vDomTopPad - rowsHeight - topPadHeight, 0); + } + + element.style.paddingTop = this.vDomTopPad + "px"; + element.style.paddingBottom = this.vDomBottomPad + "px"; + + if (forceMove) { + this.scrollTop = this.vDomTopPad + topPadHeight + offset - (this.elementVertical.scrollWidth > this.elementVertical.clientWidth ? this.elementVertical.offsetHeight - containerHeight : 0); + } + + this.scrollTop = Math.min(this.scrollTop, this.elementVertical.scrollHeight - containerHeight); //adjust for horizontal scrollbar if present (and not at top of table) + + if (this.elementVertical.scrollWidth > this.elementVertical.offsetWidth && forceMove) { + this.scrollTop += this.elementVertical.offsetHeight - containerHeight; + } + + this.vDomScrollPosTop = this.scrollTop; + this.vDomScrollPosBottom = this.scrollTop; + holder.scrollTop = this.scrollTop; + this.dispatch("render-virtual-fill"); + } + } + }, { + key: "_addTopRow", + value: function _addTopRow(rows, fillableSpace) { + var table = this.tableElement, + addedRows = [], + paddingAdjust = 0, + index = this.vDomTop - 1, + i = 0; + + while (true) { + if (this.vDomTop) { + var row = rows[index], + rowHeight = void 0, + initialized = void 0; + + if (row && i < this.vDomMaxRenderChain) { + rowHeight = row.getHeight() || this.vDomRowHeight; + initialized = row.initialized; + + if (fillableSpace >= rowHeight) { + this.styleRow(row, index); + table.insertBefore(row.getElement(), table.firstChild); + + if (!row.initialized || !row.heightInitialized) { + addedRows.push(row); + } + + row.initialize(); + + if (!initialized) { + rowHeight = row.getElement().offsetHeight; + + if (rowHeight > this.vDomWindowBuffer) { + this.vDomWindowBuffer = rowHeight * 2; + } + } + + fillableSpace -= rowHeight; + paddingAdjust += rowHeight; + this.vDomTop--; + index--; + i++; + } else { + break; + } + } else { + break; + } + } else { + break; + } + } + + for (var _i = 0, _addedRows = addedRows; _i < _addedRows.length; _i++) { + var _row = _addedRows[_i]; + + _row.clearCellHeight(); + } + + this._quickNormalizeRowHeight(addedRows); + + if (paddingAdjust) { + this.vDomTopPad -= paddingAdjust; + + if (this.vDomTopPad < 0) { + this.vDomTopPad = index * this.vDomRowHeight; + } + + if (index < 1) { + this.vDomTopPad = 0; + } + + table.style.paddingTop = this.vDomTopPad + "px"; + this.vDomScrollPosTop -= paddingAdjust; + } + } + }, { + key: "_removeTopRow", + value: function _removeTopRow(rows, fillableSpace) { + var removableRows = [], + paddingAdjust = 0, + i = 0; + + while (true) { + var row = rows[this.vDomTop], + rowHeight = void 0; + + if (row && i < this.vDomMaxRenderChain) { + rowHeight = row.getHeight() || this.vDomRowHeight; + + if (fillableSpace >= rowHeight) { + this.vDomTop++; + fillableSpace -= rowHeight; + paddingAdjust += rowHeight; + removableRows.push(row); + i++; + } else { + break; + } + } else { + break; + } + } + + for (var _i2 = 0, _removableRows = removableRows; _i2 < _removableRows.length; _i2++) { + var _row2 = _removableRows[_i2]; - }, { - key: "displayRowIterator", - value: function displayRowIterator(callback) { - this.displayRows.forEach(callback); - this.displayRowsCount = this.displayRows[this.displayRows.length - 1].length; - } //return only actual rows (not group headers etc) + var rowEl = _row2.getElement(); + if (rowEl.parentNode) { + rowEl.parentNode.removeChild(rowEl); + } + } + + if (paddingAdjust) { + this.vDomTopPad += paddingAdjust; + this.tableElement.style.paddingTop = this.vDomTopPad + "px"; + this.vDomScrollPosTop += this.vDomTop ? paddingAdjust : paddingAdjust + this.vDomWindowBuffer; + } + } }, { - key: "getRows", - value: function getRows(active) { - var rows; + key: "_addBottomRow", + value: function _addBottomRow(rows, fillableSpace) { + var table = this.tableElement, + addedRows = [], + paddingAdjust = 0, + index = this.vDomBottom + 1, + i = 0; - switch (active) { - case "active": - rows = this.activeRows; - break; + while (true) { + var row = rows[index], + rowHeight = void 0, + initialized = void 0; - case "display": - rows = this.table.rowManager.getDisplayRows(); - break; + if (row && i < this.vDomMaxRenderChain) { + rowHeight = row.getHeight() || this.vDomRowHeight; + initialized = row.initialized; - case "visible": - rows = this.getVisibleRows(true); - break; + if (fillableSpace >= rowHeight) { + this.styleRow(row, index); + table.appendChild(row.getElement()); - case "selected": - rows = this.table.modules.selectRow.selectedRows; - break; + if (!row.initialized || !row.heightInitialized) { + addedRows.push(row); + } - default: - rows = this.rows; - } + row.initialize(); - return rows; - } ///////////////// Table Rendering ///////////////// - //trigger rerender of table in current position + if (!initialized) { + rowHeight = row.getElement().offsetHeight; - }, { - key: "reRenderInPosition", - value: function reRenderInPosition(callback) { - if (this.getRenderMode() == "virtual") { - if (this.redrawBlock) { - if (callback) { - callback(); + if (rowHeight > this.vDomWindowBuffer) { + this.vDomWindowBuffer = rowHeight * 2; + } + } + + fillableSpace -= rowHeight; + paddingAdjust += rowHeight; + this.vDomBottom++; + index++; + i++; } else { - this.redrawBlockRederInPosition = true; + break; } } else { - var scrollTop = this.element.scrollTop; - var topRow = false; - var topOffset = false; - var left = this.scrollLeft; - var rows = this.getDisplayRows(); + break; + } + } - for (var i = this.vDomTop; i <= this.vDomBottom; i++) { - if (rows[i]) { - var diff = scrollTop - rows[i].getElement().offsetTop; + for (var _i3 = 0, _addedRows2 = addedRows; _i3 < _addedRows2.length; _i3++) { + var _row3 = _addedRows2[_i3]; - if (topOffset === false || Math.abs(diff) < topOffset) { - topOffset = diff; - topRow = i; - } else { - break; - } - } - } + _row3.clearCellHeight(); + } - if (callback) { - callback(); - } + this._quickNormalizeRowHeight(addedRows); - this._virtualRenderFill(topRow === false ? this.displayRowsCount - 1 : topRow, true, topOffset || 0); + if (paddingAdjust) { + this.vDomBottomPad -= paddingAdjust; - this.scrollHorizontal(left); + if (this.vDomBottomPad < 0 || index == rows.length - 1) { + this.vDomBottomPad = 0; } - } else { - this.renderTable(); - if (callback) { - callback(); - } + table.style.paddingBottom = this.vDomBottomPad + "px"; + this.vDomScrollPosBottom += paddingAdjust; } } }, { - key: "setRenderMode", - value: function setRenderMode() { - if (this.table.options.virtualDom) { - this.renderMode = "virtual"; - - if (this.table.element.clientHeight || this.table.options.height) { - this.fixedHeight = true; + key: "_removeBottomRow", + value: function _removeBottomRow(rows, fillableSpace) { + var removableRows = [], + paddingAdjust = 0, + i = 0; + + while (true) { + var row = rows[this.vDomBottom], + rowHeight = void 0; + + if (row && i < this.vDomMaxRenderChain) { + rowHeight = row.getHeight() || this.vDomRowHeight; + + if (fillableSpace >= rowHeight) { + this.vDomBottom--; + fillableSpace -= rowHeight; + paddingAdjust += rowHeight; + removableRows.push(row); + i++; + } else { + break; + } } else { - this.fixedHeight = false; + break; } - } else { - this.renderMode = "classic"; } - } - }, { - key: "getRenderMode", - value: function getRenderMode() { - return this.renderMode; - } - }, { - key: "renderTable", - value: function renderTable() { - this.table.options.renderStarted.call(this.table); - this.element.scrollTop = 0; - switch (this.renderMode) { - case "classic": - this._simpleRender(); + for (var _i4 = 0, _removableRows2 = removableRows; _i4 < _removableRows2.length; _i4++) { + var _row4 = _removableRows2[_i4]; - break; - - case "virtual": - this._virtualRenderFill(); + var rowEl = _row4.getElement(); - break; + if (rowEl.parentNode) { + rowEl.parentNode.removeChild(rowEl); + } } - if (this.firstRender) { - if (this.displayRowsCount) { - this.firstRender = false; - this.table.modules.layout.layout(); - } else { - this.renderEmptyScroll(); + if (paddingAdjust) { + this.vDomBottomPad += paddingAdjust; + + if (this.vDomBottomPad < 0) { + this.vDomBottomPad = 0; } - } - if (this.table.modExists("frozenColumns")) { - this.table.modules.frozenColumns.layout(); + this.tableElement.style.paddingBottom = this.vDomBottomPad + "px"; + this.vDomScrollPosBottom -= paddingAdjust; } + } + }, { + key: "_quickNormalizeRowHeight", + value: function _quickNormalizeRowHeight(rows) { + var _iterator = _createForOfIteratorHelper(rows), + _step; - if (!this.displayRowsCount) { - if (this.table.options.placeholder) { - this.table.options.placeholder.setAttribute("tabulator-render-mode", this.renderMode); - this.getElement().appendChild(this.table.options.placeholder); - this.table.options.placeholder.style.width = this.table.columnManager.getWidth() + "px"; + try { + for (_iterator.s(); !(_step = _iterator.n()).done;) { + var row = _step.value; + row.calcHeight(); } + } catch (err) { + _iterator.e(err); + } finally { + _iterator.f(); } - this.table.options.renderComplete.call(this.table); - } //simple render on heightless table + var _iterator2 = _createForOfIteratorHelper(rows), + _step2; - }, { - key: "_simpleRender", - value: function _simpleRender() { - this._clearVirtualDom(); + try { + for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) { + var _row5 = _step2.value; - if (this.displayRowsCount) { - this.checkClassicModeGroupHeaderWidth(); - } else { - this.renderEmptyScroll(); + _row5.setCellHeight(); + } + } catch (err) { + _iterator2.e(err); + } finally { + _iterator2.f(); } } - }, { - key: "checkClassicModeGroupHeaderWidth", - value: function checkClassicModeGroupHeaderWidth() { - var _this10 = this; + }]); - var element = this.tableElement, - onlyGroupHeaders = true; - this.getDisplayRows().forEach(function (row, index) { - _this10.styleRow(row, index); + return VirtualDomVertical; + }(Renderer); - element.appendChild(row.getElement()); - row.initialize(true); + var RowManager = /*#__PURE__*/function (_CoreFeature) { + _inherits(RowManager, _CoreFeature); - if (row.type !== "group") { - onlyGroupHeaders = false; - } - }); + var _super = _createSuper(RowManager); - if (onlyGroupHeaders) { - element.style.minWidth = this.table.columnManager.getWidth() + "px"; - } else { - element.style.minWidth = ""; - } - } //show scrollbars on empty table div + function RowManager(table) { + var _this; - }, { - key: "renderEmptyScroll", - value: function renderEmptyScroll() { - if (this.table.options.placeholder) { - this.tableElement.style.display = "none"; - } else { - this.tableElement.style.minWidth = this.table.columnManager.getWidth() + "px"; // this.tableElement.style.minHeight = "1px"; - // this.tableElement.style.visibility = "hidden"; - } - } - }, { - key: "_clearVirtualDom", - value: function _clearVirtualDom() { - var element = this.tableElement; + _classCallCheck(this, RowManager); - if (this.table.options.placeholder && this.table.options.placeholder.parentNode) { - this.table.options.placeholder.parentNode.removeChild(this.table.options.placeholder); - } // element.children.detach(); + _this = _super.call(this, table); + _this.element = _this.createHolderElement(); //containing element + _this.tableElement = _this.createTableElement(); //table element - while (element.firstChild) { - element.removeChild(element.firstChild); - } + _this.heightFixer = _this.createTableElement(); //table element - element.style.paddingTop = ""; - element.style.paddingBottom = ""; - element.style.minWidth = ""; - element.style.minHeight = ""; - element.style.display = ""; - element.style.visibility = ""; - this.scrollTop = 0; - this.scrollLeft = 0; - this.vDomTop = 0; - this.vDomBottom = 0; - this.vDomTopPad = 0; - this.vDomBottomPad = 0; + _this.firstRender = false; //handle first render + + _this.renderMode = "virtual"; //current rendering mode + + _this.fixedHeight = false; //current rendering mode + + _this.rows = []; //hold row data objects + + _this.activeRowsPipeline = []; //hold caluclation of active rows + + _this.activeRows = []; //rows currently available to on display in the table + + _this.activeRowsCount = 0; //count of active rows + + _this.displayRows = []; //rows currently on display in the table + + _this.displayRowsCount = 0; //count of display rows + + _this.scrollTop = 0; + _this.scrollLeft = 0; + _this.rowNumColumn = false; //hold column component for row number column + + _this.redrawBlock = false; //prevent redraws to allow multiple data manipulations becore continuing + + _this.redrawBlockRestoreConfig = false; //store latest redraw function calls for when redraw is needed + + _this.redrawBlockRederInPosition = false; //store latest redraw function calls for when redraw is needed + + _this.dataPipeline = []; //hold data pipeline tasks + + _this.displayPipeline = []; //hold data display pipeline tasks + + _this.renderer = null; + return _this; + } //////////////// Setup Functions ///////////////// + + + _createClass(RowManager, [{ + key: "createHolderElement", + value: function createHolderElement() { + var el = document.createElement("div"); + el.classList.add("tabulator-tableHolder"); + el.setAttribute("tabindex", 0); + return el; } }, { - key: "styleRow", - value: function styleRow(row, index) { - var rowEl = row.getElement(); + key: "createTableElement", + value: function createTableElement() { + var el = document.createElement("div"); + el.classList.add("tabulator-table"); + return el; + } //return containing element - if (index % 2) { - rowEl.classList.add("tabulator-row-even"); - rowEl.classList.remove("tabulator-row-odd"); - } else { - rowEl.classList.add("tabulator-row-odd"); - rowEl.classList.remove("tabulator-row-even"); - } - } //full virtual render + }, { + key: "getElement", + value: function getElement() { + return this.element; + } //return table element }, { - key: "_virtualRenderFill", - value: function _virtualRenderFill(position, forceMove, offset) { - var element = this.tableElement, - holder = this.element, - topPad = 0, - rowsHeight = 0, - topPadHeight = 0, - i = 0, - onlyGroupHeaders = true, - rows = this.getDisplayRows(); - position = position || 0; - offset = offset || 0; + key: "getTableElement", + value: function getTableElement() { + return this.tableElement; + } //return position of row in table - if (!position) { - this._clearVirtualDom(); + }, { + key: "getRowPosition", + value: function getRowPosition(row, active) { + if (active) { + return this.activeRows.indexOf(row); } else { - while (element.firstChild) { - element.removeChild(element.firstChild); - } //check if position is too close to bottom of table + return this.rows.indexOf(row); + } + } + }, { + key: "initialize", + value: function initialize() { + var _this2 = this; + + this.initializeRenderer(); //initialize manager + + this.element.appendChild(this.tableElement); + this.firstRender = true; //scroll header along with table body + this.element.addEventListener("scroll", function () { + var left = _this2.element.scrollLeft, + leftDir = _this2.scrollLeft > left, + top = _this2.element.scrollTop, + topDir = _this2.scrollTop > top; //handle horizontal scrolling - var heightOccupied = (this.displayRowsCount - position + 1) * this.vDomRowHeight; + if (_this2.scrollLeft != left) { + _this2.scrollLeft = left; - if (heightOccupied < this.height) { - position -= Math.ceil((this.height - heightOccupied) / this.vDomRowHeight); + _this2.dispatch("scroll-horizontal", left, leftDir); - if (position < 0) { - position = 0; - } - } //calculate initial pad + _this2.dispatchExternal("scrollHorizontal", left, leftDir); + } //handle verical scrolling - topPad = Math.min(Math.max(Math.floor(this.vDomWindowBuffer / this.vDomRowHeight), this.vDomWindowMinMarginRows), position); - position -= topPad; - } + if (_this2.scrollTop != top) { + _this2.scrollTop = top; - if (this.displayRowsCount && Helpers.elVisible(this.element)) { - this.vDomTop = position; - this.vDomBottom = position - 1; + _this2.renderer.scrollRows(top, topDir); - while ((rowsHeight <= this.height + this.vDomWindowBuffer || i < this.vDomWindowMinTotalRows) && this.vDomBottom < this.displayRowsCount - 1) { - var index = this.vDomBottom + 1, - row = rows[index], - rowHeight = 0; - this.styleRow(row, index); - element.appendChild(row.getElement()); - row.initialize(); + _this2.dispatch("scroll-vertical", top, topDir); - if (!row.heightInitialized) { - row.normalizeHeight(true); - } + _this2.dispatchExternal("scrollVertical", top, topDir); + } + }); + } ////////////////// Row Manipulation ////////////////// - rowHeight = row.getHeight(); + }, { + key: "findRow", + value: function findRow(subject) { + var _this3 = this; - if (i < topPad) { - topPadHeight += rowHeight; - } else { - rowsHeight += rowHeight; - } + if (_typeof(subject) == "object") { + if (subject instanceof Row$1) { + //subject is row element + return subject; + } else if (subject instanceof RowComponent$1) { + //subject is public row component + return subject._getSelf() || false; + } else if (typeof HTMLElement !== "undefined" && subject instanceof HTMLElement) { + //subject is a HTML element of the row + var match = this.rows.find(function (row) { + return row.getElement() === subject; + }); + return match || false; + } + } else if (typeof subject == "undefined" || subject === null) { + return false; + } else { + //subject should be treated as the index of the row + var _match = this.rows.find(function (row) { + return row.data[_this3.table.options.index] == subject; + }); - if (rowHeight > this.vDomWindowBuffer) { - this.vDomWindowBuffer = rowHeight * 2; - } + return _match || false; + } //catch all for any other type of input - if (row.type !== "group") { - onlyGroupHeaders = false; - } - this.vDomBottom++; - i++; - } + return false; + } + }, { + key: "getRowFromDataObject", + value: function getRowFromDataObject(data) { + var match = this.rows.find(function (row) { + return row.data === data; + }); + return match || false; + } + }, { + key: "getRowFromPosition", + value: function getRowFromPosition(position, active) { + if (active) { + return this.activeRows[position]; + } else { + return this.rows[position]; + } + } + }, { + key: "scrollToRow", + value: function scrollToRow(row, position, ifVisible) { + return this.renderer.scrollToRowPosition(row, position, ifVisible); + } ////////////////// Data Handling ////////////////// - if (!position) { - this.vDomTopPad = 0; //adjust rowheight to match average of rendered elements + }, { + key: "setData", + value: function setData(data, renderInPosition, columnsChanged) { + var _this4 = this; - this.vDomRowHeight = Math.floor((rowsHeight + topPadHeight) / i); - this.vDomBottomPad = this.vDomRowHeight * (this.displayRowsCount - this.vDomBottom - 1); - this.vDomScrollHeight = topPadHeight + rowsHeight + this.vDomBottomPad - this.height; + return new Promise(function (resolve, reject) { + if (renderInPosition && _this4.getDisplayRows().length) { + if (_this4.table.options.pagination) { + _this4._setDataActual(data, true); + } else { + _this4.reRenderInPosition(function () { + _this4._setDataActual(data); + }); + } } else { - this.vDomTopPad = !forceMove ? this.scrollTop - topPadHeight : this.vDomRowHeight * this.vDomTop + offset; - this.vDomBottomPad = this.vDomBottom == this.displayRowsCount - 1 ? 0 : Math.max(this.vDomScrollHeight - this.vDomTopPad - rowsHeight - topPadHeight, 0); - } + if (_this4.table.options.autoColumns && columnsChanged) { + _this4.table.columnManager.generateColumnsFromRowData(data); + } - element.style.paddingTop = this.vDomTopPad + "px"; - element.style.paddingBottom = this.vDomBottomPad + "px"; + _this4.resetScroll(); - if (forceMove) { - this.scrollTop = this.vDomTopPad + topPadHeight + offset - (this.element.scrollWidth > this.element.clientWidth ? this.element.offsetHeight - this.element.clientHeight : 0); + _this4._setDataActual(data); } - this.scrollTop = Math.min(this.scrollTop, this.element.scrollHeight - this.height); //adjust for horizontal scrollbar if present (and not at top of table) + resolve(); + }); + } + }, { + key: "_setDataActual", + value: function _setDataActual(data, renderInPosition) { + var _this5 = this; - if (this.element.scrollWidth > this.element.offsetWidth && forceMove) { - this.scrollTop += this.element.offsetHeight - this.element.clientHeight; - } + this.dispatchExternal("dataProcessing", data); - this.vDomScrollPosTop = this.scrollTop; - this.vDomScrollPosBottom = this.scrollTop; - holder.scrollTop = this.scrollTop; - element.style.minWidth = onlyGroupHeaders ? this.table.columnManager.getWidth() + "px" : ""; + this._wipeElements(); - if (this.table.options.groupBy) { - if (this.table.modules.layout.getMode() != "fitDataFill" && this.displayRowsCount == this.table.modules.groupRows.countGroups()) { - this.tableElement.style.minWidth = this.table.columnManager.getWidth(); + if (Array.isArray(data)) { + this.dispatch("data-processing", data); + data.forEach(function (def, i) { + if (def && _typeof(def) === "object") { + var row = new Row$1(def, _this5); + + _this5.rows.push(row); + } else { + console.warn("Data Loading Warning - Invalid row data detected and ignored, expecting object but received:", def); } - } + }); + this.refreshActiveData(false, false, renderInPosition); + this.dispatch("data-processed", data); + this.dispatchExternal("dataProcesed", data); } else { - this.renderEmptyScroll(); + console.error("Data Loading Error - Unable to process data due to invalid data type \nExpecting: array \nReceived: ", _typeof(data), "\nData: ", data); } + } + }, { + key: "_wipeElements", + value: function _wipeElements() { + this.dispatch("rows-wipe"); + this.rows.forEach(function (row) { + row.wipe(); + }); + this.rows = []; + this.activeRows = []; + this.activeRowsPipeline = []; + this.activeRowsCount = 0; + this.displayRows = []; + this.displayRowsCount = 0; + this.adjustTableSize(); + } + }, { + key: "deleteRow", + value: function deleteRow(row, blockRedraw) { + var allIndex = this.rows.indexOf(row), + activeIndex = this.activeRows.indexOf(row); - if (!this.fixedHeight) { - this.adjustTableSize(); + if (activeIndex > -1) { + this.activeRows.splice(activeIndex, 1); } - } //handle vertical scrolling - }, { - key: "scrollVertical", - value: function scrollVertical(dir) { - var topDiff = this.scrollTop - this.vDomScrollPosTop; - var bottomDiff = this.scrollTop - this.vDomScrollPosBottom; - var margin = this.vDomWindowBuffer * 2; + if (allIndex > -1) { + this.rows.splice(allIndex, 1); + } - if (-topDiff > margin || bottomDiff > margin) { - //if big scroll redraw table; - var left = this.scrollLeft; + this.setActiveRows(this.activeRows); + this.displayRowIterator(function (rows) { + var displayIndex = rows.indexOf(row); - this._virtualRenderFill(Math.floor(this.element.scrollTop / this.element.scrollHeight * this.displayRowsCount)); + if (displayIndex > -1) { + rows.splice(displayIndex, 1); + } + }); - this.scrollHorizontal(left); - } else { - if (dir) { - //scrolling up - if (topDiff < 0) { - this._addTopRow(-topDiff); - } + if (!blockRedraw) { + this.reRenderInPosition(); + } - if (bottomDiff < 0) { - //hide bottom row if needed - if (this.vDomScrollHeight - this.scrollTop > this.vDomWindowBuffer) { - this._removeBottomRow(-bottomDiff); - } else { - this.vDomScrollPosBottom = this.scrollTop; - } - } - } else { - //scrolling down - if (topDiff >= 0) { - //hide top row if needed - if (this.scrollTop > this.vDomWindowBuffer) { - this._removeTopRow(topDiff); - } else { - this.vDomScrollPosTop = this.scrollTop; - } - } + this.regenerateRowNumbers(); + this.dispatchExternal("rowDeleted", row.getComponent()); - if (bottomDiff >= 0) { - this._addBottomRow(bottomDiff); - } - } + if (this.subscribedExternal("dataChanged")) { + this.dispatchExternal("dataChanged", this.getData()); } } }, { - key: "_addTopRow", - value: function _addTopRow(topDiff) { - var i = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; - var table = this.tableElement, - rows = this.getDisplayRows(); - - if (this.vDomTop) { - var index = this.vDomTop - 1, - topRow = rows[index], - topRowHeight = topRow.getHeight() || this.vDomRowHeight; //hide top row if needed - - if (topDiff >= topRowHeight) { - this.styleRow(topRow, index); - table.insertBefore(topRow.getElement(), table.firstChild); - - if (!topRow.initialized || !topRow.heightInitialized) { - this.vDomTopNewRows.push(topRow); + key: "addRow", + value: function addRow(data, pos, index, blockRedraw) { + var row = this.addRowActual(data, pos, index, blockRedraw); + this.dispatch("row-added", row, data, pos, index); + return row; + } //add multiple rows - if (!topRow.heightInitialized) { - topRow.clearCellHeight(); - } - } + }, { + key: "addRows", + value: function addRows(data, pos, index) { + var _this6 = this; - topRow.initialize(); - this.vDomTopPad -= topRowHeight; + var rows = []; + return new Promise(function (resolve, reject) { + pos = _this6.findAddRowPos(pos); - if (this.vDomTopPad < 0) { - this.vDomTopPad = index * this.vDomRowHeight; - } + if (!Array.isArray(data)) { + data = [data]; + } - if (!index) { - this.vDomTopPad = 0; - } + data.length - 1; - table.style.paddingTop = this.vDomTopPad + "px"; - this.vDomScrollPosTop -= topRowHeight; - this.vDomTop--; + if (typeof index == "undefined" && pos || typeof index !== "undefined" && !pos) { + data.reverse(); } - topDiff = -(this.scrollTop - this.vDomScrollPosTop); + data.forEach(function (item, i) { + var row = _this6.addRow(item, pos, index, true); - if (topRow.getHeight() > this.vDomWindowBuffer) { - this.vDomWindowBuffer = topRow.getHeight() * 2; - } + rows.push(row); + }); - if (i < this.vDomMaxRenderChain && this.vDomTop && topDiff >= (rows[this.vDomTop - 1].getHeight() || this.vDomRowHeight)) { - this._addTopRow(topDiff, i + 1); + if (_this6.subscribed("row-added")) { + _this6.dispatch("row-added", row, data, pos, index); } else { - this._quickNormalizeRowHeight(this.vDomTopNewRows); + _this6.reRenderInPosition(); } - } + + _this6.regenerateRowNumbers(); + + resolve(rows); + }); } }, { - key: "_removeTopRow", - value: function _removeTopRow(topDiff) { - var table = this.tableElement, - topRow = this.getDisplayRows()[this.vDomTop], - topRowHeight = topRow.getHeight() || this.vDomRowHeight; + key: "findAddRowPos", + value: function findAddRowPos(pos) { + if (typeof pos === "undefined") { + pos = this.table.options.addRowPos; + } - if (topDiff >= topRowHeight) { - var rowEl = topRow.getElement(); - rowEl.parentNode.removeChild(rowEl); - this.vDomTopPad += topRowHeight; - table.style.paddingTop = this.vDomTopPad + "px"; - this.vDomScrollPosTop += this.vDomTop ? topRowHeight : topRowHeight + this.vDomWindowBuffer; - this.vDomTop++; - topDiff = this.scrollTop - this.vDomScrollPosTop; + if (pos === "pos") { + pos = true; + } - this._removeTopRow(topDiff); + if (pos === "bottom") { + pos = false; } + + return pos; } }, { - key: "_addBottomRow", - value: function _addBottomRow(bottomDiff) { - var i = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; - var table = this.tableElement, - rows = this.getDisplayRows(); + key: "addRowActual", + value: function addRowActual(data, pos, index, blockRedraw) { + var row = data instanceof Row$1 ? data : new Row$1(data || {}, this), + top = this.findAddRowPos(pos), + allIndex = -1, + activeIndex, + chainResult; - if (this.vDomBottom < this.displayRowsCount - 1) { - var index = this.vDomBottom + 1, - bottomRow = rows[index], - bottomRowHeight = bottomRow.getHeight() || this.vDomRowHeight; //hide bottom row if needed + if (!index) { + chainResult = this.chain("row-adding-position", [row, top], null, { + index: index, + top: top + }); + index = chainResult.index; + top = chainResult.top; + } - if (bottomDiff >= bottomRowHeight) { - this.styleRow(bottomRow, index); - table.appendChild(bottomRow.getElement()); + if (typeof index !== "undefined") { + index = this.findRow(index); + } - if (!bottomRow.initialized || !bottomRow.heightInitialized) { - this.vDomBottomNewRows.push(bottomRow); + index = this.chain("row-adding-index", [row, index, top], null, index); - if (!bottomRow.heightInitialized) { - bottomRow.clearCellHeight(); - } - } + if (index) { + allIndex = this.rows.indexOf(index); + } - bottomRow.initialize(); - this.vDomBottomPad -= bottomRowHeight; + if (index && allIndex > -1) { + activeIndex = this.activeRows.indexOf(index); + this.displayRowIterator(function (rows) { + var displayIndex = rows.indexOf(index); - if (this.vDomBottomPad < 0 || index == this.displayRowsCount - 1) { - this.vDomBottomPad = 0; + if (displayIndex > -1) { + rows.splice(top ? displayIndex : displayIndex + 1, 0, row); } + }); - table.style.paddingBottom = this.vDomBottomPad + "px"; - this.vDomScrollPosBottom += bottomRowHeight; - this.vDomBottom++; - } - - bottomDiff = this.scrollTop - this.vDomScrollPosBottom; - - if (bottomRow.getHeight() > this.vDomWindowBuffer) { - this.vDomWindowBuffer = bottomRow.getHeight() * 2; + if (activeIndex > -1) { + this.activeRows.splice(top ? activeIndex : activeIndex + 1, 0, row); } - if (i < this.vDomMaxRenderChain && this.vDomBottom < this.displayRowsCount - 1 && bottomDiff >= (rows[this.vDomBottom + 1].getHeight() || this.vDomRowHeight)) { - this._addBottomRow(bottomDiff, i + 1); + this.rows.splice(top ? allIndex : allIndex + 1, 0, row); + } else { + if (top) { + this.displayRowIterator(function (rows) { + rows.unshift(row); + }); + this.activeRows.unshift(row); + this.rows.unshift(row); } else { - this._quickNormalizeRowHeight(this.vDomBottomNewRows); + this.displayRowIterator(function (rows) { + rows.push(row); + }); + this.activeRows.push(row); + this.rows.push(row); } } - } - }, { - key: "_removeBottomRow", - value: function _removeBottomRow(bottomDiff) { - var table = this.tableElement, - bottomRow = this.getDisplayRows()[this.vDomBottom], - bottomRowHeight = bottomRow.getHeight() || this.vDomRowHeight; - - if (bottomDiff >= bottomRowHeight) { - var rowEl = bottomRow.getElement(); - - if (rowEl.parentNode) { - rowEl.parentNode.removeChild(rowEl); - } - this.vDomBottomPad += bottomRowHeight; - - if (this.vDomBottomPad < 0) { - this.vDomBottomPad = 0; - } + this.setActiveRows(this.activeRows); + this.dispatchExternal("rowAdded", row.getComponent()); - table.style.paddingBottom = this.vDomBottomPad + "px"; - this.vDomScrollPosBottom -= bottomRowHeight; - this.vDomBottom--; - bottomDiff = -(this.scrollTop - this.vDomScrollPosBottom); + if (this.subscribedExternal("dataChanged")) { + this.dispatchExternal("dataChanged", this.table.rowManager.getData()); + } - this._removeBottomRow(bottomDiff); + if (!blockRedraw) { + this.reRenderInPosition(); } + + return row; } }, { - key: "_quickNormalizeRowHeight", - value: function _quickNormalizeRowHeight(rows) { - rows.forEach(function (row) { - row.calcHeight(); - }); - rows.forEach(function (row) { - row.setCellHeight(); - }); - rows.length = 0; - } //normalize height of active rows - + key: "moveRow", + value: function moveRow(from, to, after) { + this.dispatch("row-move", from, to, after); + this.moveRowActual(from, to, after); + this.regenerateRowNumbers(); + this.dispatch("row-moved", from, to, after); + this.dispatchExternal("rowMoved", from.getComponent()); + } }, { - key: "normalizeHeight", - value: function normalizeHeight() { - this.activeRows.forEach(function (row) { - row.normalizeHeight(); - }); - } //adjust the height of the table holder to fit in the Tabulator element + key: "moveRowActual", + value: function moveRowActual(from, to, after) { + var _this7 = this; + this.moveRowInArray(this.rows, from, to, after); + this.moveRowInArray(this.activeRows, from, to, after); + this.displayRowIterator(function (rows) { + _this7.moveRowInArray(rows, from, to, after); + }); + this.dispatch("row-moving", from, to, after); + } }, { - key: "adjustTableSize", - value: function adjustTableSize() { - var initialHeight = this.element.clientHeight, - modExists; + key: "moveRowInArray", + value: function moveRowInArray(rows, from, to, after) { + var fromIndex, toIndex, start, end; - if (this.renderMode === "virtual") { - var otherHeight = Math.floor(this.columnManager.getElement().getBoundingClientRect().height + (this.table.footerManager && this.table.footerManager.active && !this.table.footerManager.external ? this.table.footerManager.getElement().getBoundingClientRect().height : 0)); + if (from !== to) { + fromIndex = rows.indexOf(from); - if (this.fixedHeight) { - this.element.style.minHeight = "calc(100% - " + otherHeight + "px)"; - this.element.style.height = "calc(100% - " + otherHeight + "px)"; - this.element.style.maxHeight = "calc(100% - " + otherHeight + "px)"; - } else { - this.element.style.height = ""; - this.element.style.height = this.table.element.clientHeight - otherHeight + "px"; - this.element.scrollTop = this.scrollTop; - } + if (fromIndex > -1) { + rows.splice(fromIndex, 1); + toIndex = rows.indexOf(to); + + if (toIndex > -1) { + if (after) { + rows.splice(toIndex + 1, 0, from); + } else { + rows.splice(toIndex, 0, from); + } + } else { + rows.splice(fromIndex, 0, from); + } + } //restyle rows - this.height = this.element.clientHeight; - this.vDomWindowBuffer = this.table.options.virtualDomBuffer || this.height; //check if the table has changed size when dealing with variable height tables - if (!this.fixedHeight && initialHeight != this.element.clientHeight) { - modExists = this.table.modExists("resizeTable"); + if (rows === this.getDisplayRows()) { + start = fromIndex < toIndex ? fromIndex : toIndex; + end = toIndex > fromIndex ? toIndex : fromIndex + 1; - if (modExists && !this.table.modules.resizeTable.autoResize || !modExists) { - this.redraw(); + for (var i = start; i <= end; i++) { + if (rows[i]) { + this.styleRow(rows[i], i); + } } } } - } //renitialize all rows - + } }, { - key: "reinitialize", - value: function reinitialize() { - this.rows.forEach(function (row) { - row.reinitialize(true); - }); - } //prevent table from being redrawn - + key: "clearData", + value: function clearData() { + this.setData([]); + } }, { - key: "blockRedraw", - value: function blockRedraw() { - this.redrawBlock = true; - this.redrawBlockRestoreConfig = false; - } //restore table redrawing - + key: "getRowIndex", + value: function getRowIndex(row) { + return this.findRowIndex(row, this.rows); + } }, { - key: "restoreRedraw", - value: function restoreRedraw() { - this.redrawBlock = false; - - if (this.redrawBlockRestoreConfig) { - this.refreshActiveData(this.redrawBlockRestoreConfig.stage, this.redrawBlockRestoreConfig.skipStage, this.redrawBlockRestoreConfig.renderInPosition); - this.redrawBlockRestoreConfig = false; - } else { - if (this.redrawBlockRederInPosition) { - this.reRenderInPosition(); - } - } - - this.redrawBlockRederInPosition = false; - } //redraw table - + key: "getDisplayRowIndex", + value: function getDisplayRowIndex(row) { + var index = this.getDisplayRows().indexOf(row); + return index > -1 ? index : false; + } }, { - key: "redraw", - value: function redraw(force) { - var left = this.scrollLeft; - this.adjustTableSize(); - this.table.tableWidth = this.table.element.clientWidth; + key: "nextDisplayRow", + value: function nextDisplayRow(row, rowOnly) { + var index = this.getDisplayRowIndex(row), + nextRow = false; - if (!force) { - if (this.renderMode == "classic") { - if (this.table.options.groupBy) { - this.refreshActiveData("group", false, false); - } else { - this._simpleRender(); - } - } else { - this.reRenderInPosition(); - this.scrollHorizontal(left); - } + if (index !== false && index < this.displayRowsCount - 1) { + nextRow = this.getDisplayRows()[index + 1]; + } - if (!this.displayRowsCount) { - if (this.table.options.placeholder) { - this.getElement().appendChild(this.table.options.placeholder); - } - } - } else { - this.renderTable(); + if (nextRow && (!(nextRow instanceof Row$1) || nextRow.type != "row")) { + return this.nextDisplayRow(nextRow, rowOnly); } + + return nextRow; } }, { - key: "resetScroll", - value: function resetScroll() { - this.element.scrollLeft = 0; - this.element.scrollTop = 0; + key: "prevDisplayRow", + value: function prevDisplayRow(row, rowOnly) { + var index = this.getDisplayRowIndex(row), + prevRow = false; - if (this.table.browser === "ie") { - var event = document.createEvent("Event"); - event.initEvent("scroll", false, true); - this.element.dispatchEvent(event); - } else { - this.element.dispatchEvent(new Event('scroll')); + if (index) { + prevRow = this.getDisplayRows()[index - 1]; } - } - }]); - - return RowManager; - }(); - - var FooterManager = /*#__PURE__*/function () { - function FooterManager(table) { - _classCallCheck(this, FooterManager); - this.table = table; - this.active = false; - this.element = this.createElement(); //containing element - - this.external = false; - this.links = []; - - this._initialize(); - } + if (rowOnly && prevRow && (!(prevRow instanceof Row$1) || prevRow.type != "row")) { + return this.prevDisplayRow(prevRow, rowOnly); + } - _createClass(FooterManager, [{ - key: "createElement", - value: function createElement() { - var el = document.createElement("div"); - el.classList.add("tabulator-footer"); - return el; + return prevRow; } }, { - key: "_initialize", - value: function _initialize(element) { - if (this.table.options.footerElement) { - switch (_typeof(this.table.options.footerElement)) { - case "string": - if (this.table.options.footerElement[0] === "<") { - this.element.innerHTML = this.table.options.footerElement; - } else { - this.external = true; - this.element = document.querySelector(this.table.options.footerElement); - } + key: "findRowIndex", + value: function findRowIndex(row, list) { + var rowIndex; + row = this.findRow(row); - break; + if (row) { + rowIndex = list.indexOf(row); - default: - this.element = this.table.options.footerElement; - break; + if (rowIndex > -1) { + return rowIndex; } } + + return false; } }, { - key: "getElement", - value: function getElement() { - return this.element; + key: "getData", + value: function getData(active, transform) { + var output = [], + rows = this.getRows(active); + rows.forEach(function (row) { + if (row.type == "row") { + output.push(row.getData(transform || "data")); + } + }); + return output; } }, { - key: "append", - value: function append(element, parent) { - this.activate(parent); - this.element.appendChild(element); - this.table.rowManager.adjustTableSize(); + key: "getComponents", + value: function getComponents(active) { + var output = [], + rows = this.getRows(active); + rows.forEach(function (row) { + output.push(row.getComponent()); + }); + return output; } }, { - key: "prepend", - value: function prepend(element, parent) { - this.activate(parent); - this.element.insertBefore(element, this.element.firstChild); - this.table.rowManager.adjustTableSize(); + key: "getDataCount", + value: function getDataCount(active) { + var rows = this.getRows(active); + return rows.length; } }, { - key: "remove", - value: function remove(element) { - element.parentNode.removeChild(element); - this.deactivate(); + key: "scrollHorizontal", + value: function scrollHorizontal(left) { + this.scrollLeft = left; + this.element.scrollLeft = left; + this.dispatch("scroll-horizontal", left); } }, { - key: "deactivate", - value: function deactivate(force) { - if (!this.element.firstChild || force) { - if (!this.external) { - this.element.parentNode.removeChild(this.element); - } - - this.active = false; + key: "registerDataPipelineHandler", + value: function registerDataPipelineHandler(handler, priority) { + if (typeof priority !== "undefined") { + this.dataPipeline.push({ + handler: handler, + priority: priority + }); + this.dataPipeline.sort(function (a, b) { + return a.priority - b.priority; + }); + } else { + console.error("Data pipeline handlers must have a priority in order to be registered"); } } }, { - key: "activate", - value: function activate(parent) { - if (!this.active) { - this.active = true; - - if (!this.external) { - this.table.element.appendChild(this.getElement()); - this.table.element.style.display = ''; - } + key: "registerDisplayPipelineHandler", + value: function registerDisplayPipelineHandler(handler, priority) { + if (typeof priority !== "undefined") { + this.displayPipeline.push({ + handler: handler, + priority: priority + }); + this.displayPipeline.sort(function (a, b) { + return a.priority - b.priority; + }); + } else { + console.error("Display pipeline handlers must have a priority in order to be registered"); } + } //set active data set - if (parent) { - this.links.push(parent); - } - } }, { - key: "redraw", - value: function redraw() { - this.links.forEach(function (link) { - link.footerRedraw(); - }); - } - }]); - - return FooterManager; - }(); - - var TableRegistry = /*#__PURE__*/function () { - function TableRegistry() { - _classCallCheck(this, TableRegistry); - } + key: "refreshActiveData", + value: function refreshActiveData(handler, skipStage, renderInPosition) { + var table = this.table, + stage = "", + index = 0, + cascadeOrder = ["all", "dataPipeline", "display", "displayPipeline", "end"]; - _createClass(TableRegistry, null, [{ - key: "register", - value: function register(table) { - TableRegistry.tables.push(table); - } - }, { - key: "deregister", - value: function deregister(table) { - var index = TableRegistry.tables.indexOf(table); + if (typeof handler === "function") { + index = this.dataPipeline.findIndex(function (item) { + return item.handler === handler; + }); - if (index > -1) { - TableRegistry.tables.splice(index, 1); - } - } - }, { - key: "lookupTable", - value: function lookupTable(query, silent) { - var results = [], - matches, - match; + if (index > -1) { + stage = "dataPipeline"; - if (typeof query === "string") { - matches = document.querySelectorAll(query); + if (skipStage) { + if (index == this.dataPipeline.length - 1) { + stage = "display"; + } else { + index++; + } + } + } else { + index = this.displayPipeline.findIndex(function (item) { + return item.handler === handler; + }); - if (matches.length) { - for (var i = 0; i < matches.length; i++) { - match = TableRegistry.matchElement(matches[i]); + if (index > -1) { + stage = "displayPipeline"; - if (match) { - results.push(match); + if (skipStage) { + if (index == this.displayPipeline.length - 1) { + stage = "end"; + } else { + index++; + } } + } else { + console.error("Unable to refresh data, invalid handler provided", handler); + return; } } - } else if (typeof HTMLElement !== "undefined" && query instanceof HTMLElement || query instanceof Tabulator$1) { - match = TableRegistry.matchElement(query); + } else { + stage = handler || "all"; + index = 0; + } - if (match) { - results.push(match); + if (this.redrawBlock) { + if (!this.redrawBlockRestoreConfig || this.redrawBlockRestoreConfig && (this.redrawBlockRestoreConfig.stage === stage && index < this.redrawBlockRestoreConfig.index || cascadeOrder.indexOf(stage) < cascadeOrder.indexOf(this.redrawBlockRestoreConfig.stage))) { + this.redrawBlockRestoreConfig = { + handler: handler, + skipStage: skipStage, + renderInPosition: renderInPosition, + stage: stage, + index: index + }; } - } else if (Array.isArray(query)) { - query.forEach(function (item) { - results = results.concat(TableRegistry.lookupTable(item)); - }); + + return; } else { - if (!silent) { - console.warn("Table Connection Error - Invalid Selector", query); + this.dispatch("data-refeshing"); + + if (!handler) { + this.activeRowsPipeline[0] = this.rows.slice(0); + } //cascade through data refresh stages + + + switch (stage) { + case "all": //handle case where alldata needs refreshing + + case "dataPipeline": + for (var i = index; i < this.dataPipeline.length; i++) { + var result = this.dataPipeline[i].handler(this.activeRowsPipeline[i].slice(0)); + this.activeRowsPipeline[i + 1] = result || this.activeRowsPipeline[i].slice(0); + } + + this.setActiveRows(this.activeRowsPipeline[this.dataPipeline.length]); + this.regenerateRowNumbers(); + + case "display": + index = 0; + this.resetDisplayRows(); + + case "displayPipeline": + for (var _i = index; _i < this.displayPipeline.length; _i++) { + var _result = this.displayPipeline[_i].handler((_i ? this.getDisplayRows(_i - 1) : this.activeRows).slice(0), renderInPosition); + + this.setDisplayRows(_result || this.getDisplayRows(_i - 1).slice(0), _i); + } + } - } - return results; - } - }, { - key: "matchElement", - value: function matchElement(element) { - return TableRegistry.tables.find(function (table) { - return element instanceof Tabulator$1 ? table === element : table.element === element; - }); - } - }]); + if (Helpers$1.elVisible(this.element)) { + if (renderInPosition) { + this.reRenderInPosition(); + } else { + if (!handler) { + this.table.columnManager.renderer.renderColumns(); + } - return TableRegistry; - }(); + this.renderTable(); - TableRegistry.tables = []; + if (table.options.layoutColumnsOnNewData) { + this.table.columnManager.redraw(true); + } + } + } - var Module = /*#__PURE__*/function () { - function Module(table, name) { - _classCallCheck(this, Module); + this.dispatch("data-refeshed"); + } + } //regenerate row numbers for row number formatter if in use - this.table = table; - } + }, { + key: "regenerateRowNumbers", + value: function regenerateRowNumbers() { + var _this8 = this; - _createClass(Module, [{ - key: "register", - value: function register() {} - }]); + if (this.rowNumColumn) { + this.activeRows.forEach(function (row) { + var cell = row.getCell(_this8.rowNumColumn); - return Module; - }(); + if (cell) { + cell._generateContents(); + } + }); + } + } + }, { + key: "setActiveRows", + value: function setActiveRows(activeRows) { + this.activeRows = activeRows; + this.activeRowsCount = this.activeRows.length; + } //reset display rows array - //resize columns to fit data they contain - function fitData (columns) { - if (this.table.options.virtualDomHoz) { - this.table.vdomHoz.fitDataLayoutOverride(); - } else { - columns.forEach(function (column) { - column.reinitializeWidth(); - }); - } + }, { + key: "resetDisplayRows", + value: function resetDisplayRows() { + this.displayRows = []; + this.displayRows.push(this.activeRows.slice(0)); + this.displayRowsCount = this.displayRows[0].length; + } + }, { + key: "getNextDisplayIndex", + value: function getNextDisplayIndex() { + return this.displayRows.length; + } //set display row pipeline data + + }, { + key: "setDisplayRows", + value: function setDisplayRows(displayRows, index) { + var output = true; + + if (index && typeof this.displayRows[index] != "undefined") { + this.displayRows[index] = displayRows; + output = true; + } else { + this.displayRows.push(displayRows); + output = index = this.displayRows.length - 1; + } - if (this.table.options.responsiveLayout && this.table.modExists("responsiveLayout", true)) { - this.table.modules.responsiveLayout.update(); - } - } + if (index == this.displayRows.length - 1) { + this.displayRowsCount = this.displayRows[this.displayRows.length - 1].length; + } - //resize columns to fit data they contain and stretch row to fill table, also used for fitDataTable - function fitDataGeneral (columns) { - columns.forEach(function (column) { - column.reinitializeWidth(); - }); + return output; + } + }, { + key: "getDisplayRows", + value: function getDisplayRows(index) { + if (typeof index == "undefined") { + return this.displayRows.length ? this.displayRows[this.displayRows.length - 1] : []; + } else { + return this.displayRows[index] || []; + } + } + }, { + key: "getVisibleRows", + value: function getVisibleRows(viewable) { + return this.renderer.visibleRows(!viewable); + } //repeat action accross display rows - if (this.table.options.responsiveLayout && this.table.modExists("responsiveLayout", true)) { - this.table.modules.responsiveLayout.update(); - } - } + }, { + key: "displayRowIterator", + value: function displayRowIterator(callback) { + this.activeRowsPipeline.forEach(callback); + this.displayRows.forEach(callback); + this.displayRowsCount = this.displayRows[this.displayRows.length - 1].length; + } //return only actual rows (not group headers etc) - //resize columns to fit data the contain and stretch last column to fill table - function fitDataStretch (columns) { - var _this = this; + }, { + key: "getRows", + value: function getRows(type) { + var rows; - var colsWidth = 0, - tableWidth = this.table.rowManager.element.clientWidth, - gap = 0, - lastCol = false; - columns.forEach(function (column, i) { - if (!column.widthFixed) { - column.reinitializeWidth(); - } + switch (type) { + case "active": + rows = this.activeRows; + break; - if (_this.table.options.responsiveLayout ? column.modules.responsive.visible : column.visible) { - lastCol = column; - } + case "display": + rows = this.table.rowManager.getDisplayRows(); + break; - if (column.visible) { - colsWidth += column.getWidth(); - } - }); + case "visible": + rows = this.getVisibleRows(true); + break; - if (lastCol) { - gap = tableWidth - colsWidth + lastCol.getWidth(); + default: + rows = this.chain("rows-retrieve", type, null, this.rows) || this.rows; + } - if (this.table.options.responsiveLayout && this.table.modExists("responsiveLayout", true)) { - lastCol.setWidth(0); - this.table.modules.responsiveLayout.update(); - } + return rows; + } ///////////////// Table Rendering ///////////////// + //trigger rerender of table in current position - if (gap > 0) { - lastCol.setWidth(gap); - } else { - lastCol.reinitializeWidth(); - } - } else { - if (this.table.options.responsiveLayout && this.table.modExists("responsiveLayout", true)) { - this.table.modules.responsiveLayout.update(); + }, { + key: "reRenderInPosition", + value: function reRenderInPosition(callback) { + if (this.redrawBlock) { + if (callback) { + callback(); + } else { + this.redrawBlockRederInPosition = true; + } + } else { + this.renderer.rerenderRows(callback); + } } - } - } - - //resize columns to fit - function fitColumns (columns) { - var totalWidth = this.table.element.clientWidth; //table element width + }, { + key: "initializeRenderer", + value: function initializeRenderer() { + var renderClass; + var renderers = { + "virtual": VirtualDomVertical, + "basic": BaiscVertical + }; - var fixedWidth = 0; //total width of columns with a defined width + if (typeof this.table.options.renderVertical === "string") { + renderClass = renderers[this.table.options.renderVertical]; + } else { + renderClass = this.table.options.renderVertical; + } - var flexWidth = 0; //total width available to flexible columns + if (renderClass) { + this.renderer = new renderClass(this.table, this.element, this.tableElement); + this.renderer.initialize(); - var flexGrowUnits = 0; //total number of widthGrow blocks accross all columns + if (this.table.element.clientHeight || this.table.options.height) { + this.fixedHeight = true; + } else { + this.fixedHeight = false; + } + } else { + console.error("Unable to find matching renderer:", table.options.renderVertical); + } + } + }, { + key: "getRenderMode", + value: function getRenderMode() { + return this.renderMode; + } + }, { + key: "renderTable", + value: function renderTable() { + this.dispatchExternal("renderStarted"); + this.element.scrollTop = 0; - var flexColWidth = 0; //desired width of flexible columns + if (this.displayRowsCount) { + this._clearTable(); - var flexColumns = []; //array of flexible width columns + this.renderer.renderRows(); - var fixedShrinkColumns = []; //array of fixed width columns that can shrink + if (this.firstRender) { + this.firstRender = false; + this.layoutRefresh(); + } + } else { + this.renderEmptyScroll(); + } - var flexShrinkUnits = 0; //total number of widthShrink blocks accross all columns + if (!this.fixedHeight) { + this.adjustTableSize(); + } - var overflowWidth = 0; //horizontal overflow width + this.dispatch("table-layout"); - var gapFill = 0; //number of pixels to be added to final column to close and half pixel gaps + if (!this.displayRowsCount) { + if (this.table.options.placeholder) { + this.table.options.placeholder.setAttribute("tabulator-render-mode", this.renderMode); + this.getElement().appendChild(this.table.options.placeholder); + this.table.options.placeholder.style.width = this.table.columnManager.getWidth() + "px"; + } + } - function calcWidth(width) { - var colWidth; + this.dispatchExternal("renderComplete"); + } //show scrollbars on empty table div - if (typeof width == "string") { - if (width.indexOf("%") > -1) { - colWidth = totalWidth / 100 * parseInt(width); + }, { + key: "renderEmptyScroll", + value: function renderEmptyScroll() { + if (this.table.options.placeholder) { + this.tableElement.style.display = "none"; } else { - colWidth = parseInt(width); + this.tableElement.style.minWidth = this.table.columnManager.getWidth() + "px"; // this.tableElement.style.minHeight = "1px"; + // this.tableElement.style.visibility = "hidden"; } - } else { - colWidth = width; } + }, { + key: "_clearTable", + value: function _clearTable() { + var element = this.tableElement; - return colWidth; - } //ensure columns resize to take up the correct amount of space + if (this.table.options.placeholder && this.table.options.placeholder.parentNode) { + this.table.options.placeholder.parentNode.removeChild(this.table.options.placeholder); + } + this.scrollTop = 0; + this.scrollLeft = 0; + this.renderer.clearRows(); + } + }, { + key: "styleRow", + value: function styleRow(row, index) { + var rowEl = row.getElement(); - function scaleColumns(columns, freeSpace, colWidth, shrinkCols) { - var oversizeCols = [], - oversizeSpace = 0, - remainingSpace = 0, - nextColWidth = 0, - remainingFlexGrowUnits = flexGrowUnits, - gap = 0, - changeUnits = 0, - undersizeCols = []; + if (index % 2) { + rowEl.classList.add("tabulator-row-even"); + rowEl.classList.remove("tabulator-row-odd"); + } else { + rowEl.classList.add("tabulator-row-odd"); + rowEl.classList.remove("tabulator-row-even"); + } + } //normalize height of active rows - function calcGrow(col) { - return colWidth * (col.column.definition.widthGrow || 1); - } + }, { + key: "normalizeHeight", + value: function normalizeHeight() { + this.activeRows.forEach(function (row) { + row.normalizeHeight(); + }); + } //adjust the height of the table holder to fit in the Tabulator element - function calcShrink(col) { - return calcWidth(col.width) - colWidth * (col.column.definition.widthShrink || 0); - } + }, { + key: "adjustTableSize", + value: function adjustTableSize() { + var initialHeight = this.element.clientHeight; - columns.forEach(function (col, i) { - var width = shrinkCols ? calcShrink(col) : calcGrow(col); + if (this.renderer.verticalFillMode === "fill") { + var otherHeight = Math.floor(this.table.columnManager.getElement().getBoundingClientRect().height + (this.table.footerManager && this.table.footerManager.active && !this.table.footerManager.external ? this.table.footerManager.getElement().getBoundingClientRect().height : 0)); - if (col.column.minWidth >= width) { - oversizeCols.push(col); - } else { - if (col.column.maxWidth && col.column.maxWidth < width) { - col.width = col.column.maxWidth; - freeSpace -= col.column.maxWidth; - remainingFlexGrowUnits -= shrinkCols ? col.column.definition.widthShrink || 1 : col.column.definition.widthGrow || 1; + if (this.fixedHeight) { + this.element.style.minHeight = "calc(100% - " + otherHeight + "px)"; + this.element.style.height = "calc(100% - " + otherHeight + "px)"; + this.element.style.maxHeight = "calc(100% - " + otherHeight + "px)"; + } else { + this.element.style.height = ""; + this.element.style.height = this.table.element.clientHeight - otherHeight + "px"; + this.element.scrollTop = this.scrollTop; + } - if (remainingFlexGrowUnits) { - colWidth = Math.floor(freeSpace / remainingFlexGrowUnits); + this.renderer.resize(); //check if the table has changed size when dealing with variable height tables + + if (!this.fixedHeight && initialHeight != this.element.clientHeight) { + if (this.subscribed("table-resize")) { + this.dispatch("table-resize"); + } else { + this.redraw(); } - } else { - undersizeCols.push(col); - changeUnits += shrinkCols ? col.column.definition.widthShrink || 1 : col.column.definition.widthGrow || 1; } } - }); - - if (oversizeCols.length) { - oversizeCols.forEach(function (col) { - oversizeSpace += shrinkCols ? col.width - col.column.minWidth : col.column.minWidth; - col.width = col.column.minWidth; - }); - remainingSpace = freeSpace - oversizeSpace; - nextColWidth = changeUnits ? Math.floor(remainingSpace / changeUnits) : remainingSpace; - gap = remainingSpace - nextColWidth * changeUnits; - gap += scaleColumns(undersizeCols, remainingSpace, nextColWidth, shrinkCols); - } else { - gap = changeUnits ? freeSpace - Math.floor(freeSpace / changeUnits) * changeUnits : freeSpace; - undersizeCols.forEach(function (column) { - column.width = shrinkCols ? calcShrink(column) : calcGrow(column); - }); - } + } //renitialize all rows - return gap; - } + }, { + key: "reinitialize", + value: function reinitialize() { + this.rows.forEach(function (row) { + row.reinitialize(true); + }); + } //prevent table from being redrawn - if (this.table.options.responsiveLayout && this.table.modExists("responsiveLayout", true)) { - this.table.modules.responsiveLayout.update(); - } //adjust for vertical scrollbar if present + }, { + key: "blockRedraw", + value: function blockRedraw() { + this.redrawBlock = true; + this.redrawBlockRestoreConfig = false; + } //restore table redrawing + }, { + key: "restoreRedraw", + value: function restoreRedraw() { + this.redrawBlock = false; - if (this.table.rowManager.element.scrollHeight > this.table.rowManager.element.clientHeight) { - totalWidth -= this.table.rowManager.element.offsetWidth - this.table.rowManager.element.clientWidth; - } + if (this.redrawBlockRestoreConfig) { + this.refreshActiveData(this.redrawBlockRestoreConfig.handler, this.redrawBlockRestoreConfig.skipStage, this.redrawBlockRestoreConfig.renderInPosition); + this.redrawBlockRestoreConfig = false; + } else { + if (this.redrawBlockRederInPosition) { + this.reRenderInPosition(); + } + } - columns.forEach(function (column) { - var width, minWidth, colWidth; + this.redrawBlockRederInPosition = false; + } //redraw table - if (column.visible) { - width = column.definition.width; - minWidth = parseInt(column.minWidth); + }, { + key: "redraw", + value: function redraw(force) { + var left = this.scrollLeft; + this.adjustTableSize(); + this.table.tableWidth = this.table.element.clientWidth; - if (width) { - colWidth = calcWidth(width); - fixedWidth += colWidth > minWidth ? colWidth : minWidth; + if (!force) { + this.reRenderInPosition(); + this.scrollHorizontal(left); - if (column.definition.widthShrink) { - fixedShrinkColumns.push({ - column: column, - width: colWidth > minWidth ? colWidth : minWidth - }); - flexShrinkUnits += column.definition.widthShrink; + if (!this.displayRowsCount) { + if (this.table.options.placeholder) { + this.getElement().appendChild(this.table.options.placeholder); + } } } else { - flexColumns.push({ - column: column, - width: 0 - }); - flexGrowUnits += column.definition.widthGrow || 1; + this.renderTable(); } } - }); //calculate available space - - flexWidth = totalWidth - fixedWidth; //calculate correct column size - - flexColWidth = Math.floor(flexWidth / flexGrowUnits); //generate column widths - - var gapFill = scaleColumns(flexColumns, flexWidth, flexColWidth, false); //increase width of last column to account for rounding errors - - if (flexColumns.length && gapFill > 0) { - flexColumns[flexColumns.length - 1].width += +gapFill; - } //caculate space for columns to be shrunk into - - - flexColumns.forEach(function (col) { - flexWidth -= col.width; - }); - overflowWidth = Math.abs(gapFill) + flexWidth; //shrink oversize columns if there is no available space + }, { + key: "resetScroll", + value: function resetScroll() { + this.element.scrollLeft = 0; + this.element.scrollTop = 0; - if (overflowWidth > 0 && flexShrinkUnits) { - gapFill = scaleColumns(fixedShrinkColumns, overflowWidth, Math.floor(overflowWidth / flexShrinkUnits), true); - } //decrease width of last column to account for rounding errors + if (this.table.browser === "ie") { + var event = document.createEvent("Event"); + event.initEvent("scroll", false, true); + this.element.dispatchEvent(event); + } else { + this.element.dispatchEvent(new Event('scroll')); + } + } + }]); + return RowManager; + }(CoreFeature); - if (fixedShrinkColumns.length) { - fixedShrinkColumns[fixedShrinkColumns.length - 1].width -= gapFill; - } + var FooterManager = /*#__PURE__*/function (_CoreFeature) { + _inherits(FooterManager, _CoreFeature); - flexColumns.forEach(function (col) { - col.column.setWidth(col.width); - }); - fixedShrinkColumns.forEach(function (col) { - col.column.setWidth(col.width); - }); - } + var _super = _createSuper(FooterManager); - var defaultModes = { - fitData: fitData, - fitDataFill: fitDataGeneral, - fitDataTable: fitDataGeneral, - fitDataStretch: fitDataStretch, - fitColumns: fitColumns - }; + function FooterManager(table) { + var _this; - var Layout = /*#__PURE__*/function (_Module) { - _inherits(Layout, _Module); + _classCallCheck(this, FooterManager); - var _super = _createSuper(Layout); + _this = _super.call(this, table); + _this.active = false; + _this.element = _this.createElement(); //containing element - function Layout(table) { - var _this; + _this.external = false; + _this.links = []; - _classCallCheck(this, Layout); + _this.initializeElement(); - _this = _super.call(this, table, "layout"); - _this.mode = null; return _this; - } //initialize layout system - + } - _createClass(Layout, [{ + _createClass(FooterManager, [{ key: "initialize", - value: function initialize(layout) { - if (Layout.modes[layout]) { - this.mode = layout; - } else { - console.warn("Layout Error - invalid mode set, defaulting to 'fitData' : " + layout); - this.mode = 'fitData'; - } - - this.table.element.setAttribute("tabulator-layout", this.mode); + value: function initialize() {} + }, { + key: "createElement", + value: function createElement() { + var el = document.createElement("div"); + el.classList.add("tabulator-footer"); + return el; } }, { - key: "getMode", - value: function getMode() { - return this.mode; - } //trigger table layout + key: "initializeElement", + value: function initializeElement(element) { + if (this.table.options.footerElement) { + switch (_typeof(this.table.options.footerElement)) { + case "string": + if (this.table.options.footerElement[0] === "<") { + this.element.innerHTML = this.table.options.footerElement; + } else { + this.external = true; + this.element = document.querySelector(this.table.options.footerElement); + } - }, { - key: "layout", - value: function layout() { - Layout.modes[this.mode].call(this, this.table.columnManager.columnsByIndex); + break; - if (this.mode.indexOf("fitData") === 0 && this.table.options.persistence && this.table.modExists("persistence", true) && this.table.modules.persistence.config.columns) { - this.table.modules.persistence.save("columns"); + default: + this.element = this.table.options.footerElement; + break; + } } } - }]); - - return Layout; - }(Module); + }, { + key: "getElement", + value: function getElement() { + return this.element; + } + }, { + key: "append", + value: function append(element, parent) { + this.activate(parent); + this.element.appendChild(element); + this.table.rowManager.adjustTableSize(); + } + }, { + key: "prepend", + value: function prepend(element, parent) { + this.activate(parent); + this.element.insertBefore(element, this.element.firstChild); + this.table.rowManager.adjustTableSize(); + } + }, { + key: "remove", + value: function remove(element) { + element.parentNode.removeChild(element); + this.deactivate(); + } + }, { + key: "deactivate", + value: function deactivate(force) { + if (!this.element.firstChild || force) { + if (!this.external) { + this.element.parentNode.removeChild(this.element); + } - Layout.moduleName = "layout"; //load defaults + this.active = false; + } + } + }, { + key: "activate", + value: function activate(parent) { + if (!this.active) { + this.active = true; - Layout.modes = defaultModes; + if (!this.external) { + this.table.element.appendChild(this.getElement()); + this.table.element.style.display = ''; + } + } - var defaultLangs = { - "default": { - //hold default locale text - "groups": { - "item": "item", - "items": "items" - }, - "columns": {}, - "ajax": { - "loading": "Loading", - "error": "Error" - }, - "pagination": { - "page_size": "Page Size", - "page_title": "Show Page", - "first": "First", - "first_title": "First Page", - "last": "Last", - "last_title": "Last Page", - "prev": "Prev", - "prev_title": "Prev Page", - "next": "Next", - "next_title": "Next Page", - "all": "All" - }, - "headerFilters": { - "default": "filter column...", - "columns": {} + if (parent) { + this.links.push(parent); + } } - } - }; + }, { + key: "redraw", + value: function redraw() { + this.links.forEach(function (link) { + link.footerRedraw(); + }); + } + }]); - var Localize = /*#__PURE__*/function (_Module) { - _inherits(Localize, _Module); + return FooterManager; + }(CoreFeature); - var _super = _createSuper(Localize); + var InteractionManager = /*#__PURE__*/function (_CoreFeature) { + _inherits(InteractionManager, _CoreFeature); - function Localize(table) { + var _super = _createSuper(InteractionManager); + + function InteractionManager(table) { var _this; - _classCallCheck(this, Localize); + _classCallCheck(this, InteractionManager); _this = _super.call(this, table); - _this.locale = "default"; //current locale + _this.el = _this.table.element; + _this.abortClasses = ["tabulator-headers", "tabulator-table"]; + _this.previousTargets = {}; + _this.listeners = ["click", "dblclick", "contextmenu", "mouseenter", "mouseleave", "mouseover", "mouseout", "mousemove", "touchstart", "touchend"]; + _this.componentMap = { + "tabulator-cell": "cell", + "tabulator-row": "row", + "tabulator-group": "group", + "tabulator-col": "column" + }; - _this.lang = false; //current language + _this.buildListenerMap(); - _this.bindings = {}; //update events to call when locale is changed + _this.bindSubscriptionWatchers(); - _this.langList = {}; return _this; } - _createClass(Localize, [{ - key: "initialize", - value: function initialize() { - this.langList = Helpers.deepClone(Localize.langs); - } //set header placehoder - + _createClass(InteractionManager, [{ + key: "buildListenerMap", + value: function buildListenerMap() { + var listenerMap = {}; + this.listeners.forEach(function (listener) { + listenerMap[listener] = { + handler: null, + components: [] + }; + }); + this.listeners = listenerMap; + } }, { - key: "setHeaderFilterPlaceholder", - value: function setHeaderFilterPlaceholder(placeholder) { - this.langList["default"].headerFilters["default"] = placeholder; - } //set header filter placeholder by column + key: "bindSubscriptionWatchers", + value: function bindSubscriptionWatchers() { + var listeners = Object.keys(this.listeners), + components = Object.values(this.componentMap); - }, { - key: "setHeaderFilterColumnPlaceholder", - value: function setHeaderFilterColumnPlaceholder(column, placeholder) { - this.langList["default"].headerFilters.columns[column] = placeholder; + for (var _i = 0, _components = components; _i < _components.length; _i++) { + var comp = _components[_i]; - if (this.lang && !this.lang.headerFilters.columns[column]) { - this.lang.headerFilters.columns[column] = placeholder; - } - } //setup a lang description object + var _iterator = _createForOfIteratorHelper(listeners), + _step; + try { + for (_iterator.s(); !(_step = _iterator.n()).done;) { + var listener = _step.value; + var key = comp + "-" + listener; + this.subscriptionChange(key, this.subscriptionChanged.bind(this, comp, listener)); + } + } catch (err) { + _iterator.e(err); + } finally { + _iterator.f(); + } + } + } }, { - key: "installLang", - value: function installLang(locale, lang) { - if (this.langList[locale]) { - this._setLangProp(this.langList[locale], lang); + key: "subscriptionChanged", + value: function subscriptionChanged(component, key, added) { + var listener = this.listeners[key].components, + index = listener.indexOf(component), + changed = false; + + if (added) { + if (index === -1) { + listener.push(component); + changed = true; + } } else { - this.langList[locale] = lang; + if (!this.subscribed(component + "-" + key)) { + if (index > -1) { + listener.splice(index, 1); + changed = true; + } + } + } + + if (changed) { + this.updateEventListeners(); } } }, { - key: "_setLangProp", - value: function _setLangProp(lang, values) { - for (var key in values) { - if (lang[key] && _typeof(lang[key]) == "object") { - this._setLangProp(lang[key], values[key]); + key: "updateEventListeners", + value: function updateEventListeners() { + for (var key in this.listeners) { + var listener = this.listeners[key]; + + if (listener.components.length) { + if (!listener.handler) { + listener.handler = this.track.bind(this, key); + this.el.addEventListener(key, listener.handler); // this.el.addEventListener(key, listener.handler, {passive: true}) + } } else { - lang[key] = values[key]; + if (listener.handler) { + this.el.removeEventListener(key, listener.handler); + listener.handler = null; + } } } - } //set current locale - + } }, { - key: "setLocale", - value: function setLocale(desiredLocale) { - desiredLocale = desiredLocale || "default"; //fill in any matching languge values + key: "track", + value: function track(type, e) { + var targets = this.findTargets(e.path); + targets = this.bindComponents(type, targets); + this.triggerEvents(type, e, targets); + } + }, { + key: "findTargets", + value: function findTargets(path) { + var _this2 = this; - function traverseLang(trans, path) { - for (var prop in trans) { - if (_typeof(trans[prop]) == "object") { - if (!path[prop]) { - path[prop] = {}; - } + var targets = {}; + var componentMap = Object.keys(this.componentMap); - traverseLang(trans[prop], path[prop]); - } else { - path[prop] = trans[prop]; - } - } - } //determing correct locale to load + var _iterator2 = _createForOfIteratorHelper(path), + _step2; + try { + for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) { + var el = _step2.value; + var classList = el.classList ? _toConsumableArray(el.classList) : []; + var abort = classList.filter(function (item) { + return _this2.abortClasses.includes(item); + }); - if (desiredLocale === true && navigator.language) { - //get local from system - desiredLocale = navigator.language.toLowerCase(); - } + if (abort.length) { + break; + } - if (desiredLocale) { - //if locale is not set, check for matching top level locale else use default - if (!this.langList[desiredLocale]) { - var prefix = desiredLocale.split("-")[0]; + var elTargets = classList.filter(function (item) { + return componentMap.includes(item); + }); - if (this.langList[prefix]) { - console.warn("Localization Error - Exact matching locale not found, using closest match: ", desiredLocale, prefix); - desiredLocale = prefix; - } else { - console.warn("Localization Error - Matching locale not found, using default: ", desiredLocale); - desiredLocale = "default"; + var _iterator3 = _createForOfIteratorHelper(elTargets), + _step3; + + try { + for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) { + var target = _step3.value; + targets[this.componentMap[target]] = el; + } + } catch (err) { + _iterator3.e(err); + } finally { + _iterator3.f(); } } + } catch (err) { + _iterator2.e(err); + } finally { + _iterator2.f(); } - this.locale = desiredLocale; //load default lang template - - this.lang = Helpers.deepClone(this.langList["default"] || {}); - - if (desiredLocale != "default") { - traverseLang(this.langList[desiredLocale], this.lang); + if (targets.group && targets.group === targets.row) { + delete targets.row; } - this.table.options.localized.call(this.table, this.locale, this.lang); + return targets; + } + }, { + key: "bindComponents", + value: function bindComponents(type, targets) { + var _this3 = this; + + //ensure row component is looked up before cell + var keys = Object.keys(targets).reverse(), + listener = this.listeners[type], + targetMatches = {}; - this._executeBindings(); - } //get current locale + var _iterator4 = _createForOfIteratorHelper(keys), + _step4; - }, { - key: "getLocale", - value: function getLocale(locale) { - return this.locale; - } //get lang object for given local or current if none provided + try { + var _loop = function _loop() { + var key = _step4.value; + var component = void 0; + var target = targets[key]; + var previousTarget = _this3.previousTargets[key]; + + if (previousTarget && previousTarget.target === target) { + component = previousTarget.component; + } else { + switch (key) { + case "row": + case "group": + if (listener.components.includes("row") || listener.components.includes("cell")) { + var rows = _this3.table.rowManager.getVisibleRows(); - }, { - key: "getLang", - value: function getLang(locale) { - return locale ? this.langList[locale] : this.lang; - } //get text for current locale + component = rows.find(function (row) { + return row.getElement() === target; + }); + } - }, { - key: "getText", - value: function getText(path, value) { - var path = value ? path + "|" + value : path, - pathArray = path.split("|"), - text = this._getLangElement(pathArray, this.locale); // if(text === false){ - // console.warn("Localization Error - Matching localized text not found for given path: ", path); - // } + break; + case "column": + if (listener.components.includes("column")) { + component = _this3.table.columnManager.findColumn(target); + } - return text || ""; - } //traverse langs object and find localized copy + break; - }, { - key: "_getLangElement", - value: function _getLangElement(path, locale) { - var root = this.lang; - path.forEach(function (level) { - var rootPath; + case "cell": + if (listener.components.includes("cell")) { + component = targets["row"].findCell(target); + } - if (root) { - rootPath = root[level]; + break; + } + } - if (typeof rootPath != "undefined") { - root = rootPath; - } else { - root = false; + if (component) { + targets[key] = component; + targetMatches[key] = { + target: target, + component: component + }; } - } - }); - return root; - } //set update binding + }; - }, { - key: "bind", - value: function bind(path, callback) { - if (!this.bindings[path]) { - this.bindings[path] = []; + for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) { + _loop(); + } + } catch (err) { + _iterator4.e(err); + } finally { + _iterator4.f(); } - this.bindings[path].push(callback); - callback(this.getText(path), this.lang); - } //itterate through bindings and trigger updates - + this.previousTargets = targetMatches; + return targets; + } }, { - key: "_executeBindings", - value: function _executeBindings() { - var _this2 = this; - - var _loop = function _loop(path) { - _this2.bindings[path].forEach(function (binding) { - binding(_this2.getText(path), _this2.lang); - }); - }; + key: "triggerEvents", + value: function triggerEvents(type, e, targets) { + var listener = this.listeners[type]; - for (var path in this.bindings) { - _loop(path); + for (var key in targets) { + if (targets[key] && listener.components.includes(key)) { + this.dispatch(key + "-" + type, e, targets[key]); + } } } }]); - return Localize; - }(Module); - - Localize.moduleName = "localize"; //load defaults - - Localize.langs = defaultLangs; - - var Comms = /*#__PURE__*/function (_Module) { - _inherits(Comms, _Module); - - var _super = _createSuper(Comms); + return InteractionManager; + }(CoreFeature); - function Comms() { - _classCallCheck(this, Comms); + var ComponentFuctionBinder = /*#__PURE__*/function () { + function ComponentFuctionBinder(table) { + _classCallCheck(this, ComponentFuctionBinder); - return _super.apply(this, arguments); + this.table = table; + this.bindings = {}; } - _createClass(Comms, [{ - key: "getConnections", - value: function getConnections(selectors) { - var _this = this; - - var connections = [], - connection; - connection = Tabulator.comms.lookupTable(selectors); - connection.forEach(function (con) { - if (_this.table !== con) { - connections.push(con); - } - }); - return connections; - } - }, { - key: "send", - value: function send(selectors, module, action, data) { - var _this2 = this; - - var connections = this.getConnections(selectors); - connections.forEach(function (connection) { - connection.tableComms(_this2.table.element, module, action, data); - }); + _createClass(ComponentFuctionBinder, [{ + key: "bind", + value: function bind(type, funcName, handler) { + if (!this.bindings[type]) { + this.bindings[type] = {}; + } - if (!connections.length && selectors) { - console.warn("Table Connection Error - No tables matching selector found", selectors); + if (this.bindings[type][funcName]) { + console.warn("Unable to bind component handler, a matching function name is already bound", type, funcName, hanlder); + } else { + this.bindings[type][funcName] = handler; } - } - }, { - key: "receive", - value: function receive(table, module, action, data) { - if (this.table.modExists(module)) { - return this.table.modules[module].commsReceived(table, action, data); + } + }, { + key: "handle", + value: function handle(type, component, name) { + if (this.bindings[type] && this.bindings[type][name]) { + return this.bindings[type][name].bind(null, component); } else { - console.warn("Inter-table Comms Error - no such module:", module); + console.error("The " + type + " component does not have a " + name + " function, have you checked that you have the correct Tabulator module installed?"); } } }]); - return Comms; - }(Module); + return ComponentFuctionBinder; + }(); - Comms.moduleName = "comms"; + var DataLoader = /*#__PURE__*/function (_CoreFeature) { + _inherits(DataLoader, _CoreFeature); - var coreModules = /*#__PURE__*/Object.freeze({ - __proto__: null, - LayoutModule: Layout, - LocalizeModule: Localize, - CommsModule: Comms - }); + var _super = _createSuper(DataLoader); - var ModuleBinder = /*#__PURE__*/function () { - function ModuleBinder(tabulator, modules) { - _classCallCheck(this, ModuleBinder); + function DataLoader(table) { + var _this; - this.bindStaticFuctionality(tabulator); - this.bindModules(tabulator, coreModules); + _classCallCheck(this, DataLoader); - if (modules) { - this.bindModules(tabulator, modules); - } - } + _this = _super.call(this, table); + _this.loaderElement = _this.createLoaderElement(); //loader message div - _createClass(ModuleBinder, [{ - key: "bindStaticFuctionality", - value: function bindStaticFuctionality(tabulator) { - tabulator.moduleBindings = {}; + _this.msgElement = _this.createMsgElement(); //message element - tabulator.extendModule = function (name, property, values) { - if (tabulator.moduleBindings[name]) { - var source = tabulator.moduleBindings[name].prototype[property]; + _this.loadingElement = null; + _this.errorElement = null; + _this.requestOrder = 0; //prevent requests comming out of sequence if overridden by another load request - if (source) { - if (_typeof(values) == "object") { - for (var key in values) { - source[key] = values[key]; - } - } else { - console.warn("Module Error - Invalid value type, it must be an object"); - } - } else { - console.warn("Module Error - property does not exist:", property); - } + _this.loading = false; + return _this; + } + + _createClass(DataLoader, [{ + key: "initialize", + value: function initialize() { + var template; + this.loaderElement.appendChild(this.msgElement); + + if (this.table.options.dataLoaderLoading) { + if (typeof this.table.options.dataLoaderLoading == "string") { + template = document.createElement('template'); + template.innerHTML = this.table.options.dataLoaderLoading.trim(); + this.loadingElement = template.content.firstChild; } else { - console.warn("Module Error - module does not exist:", name); + this.loadingElement = this.table.options.dataLoaderLoading; } - }; + } - tabulator.registerModule = function (modules) { - if (!Array.isArray(modules)) { - modules = [modules]; + if (this.table.options.dataLoaderError) { + if (typeof this.table.options.dataLoaderError == "string") { + template = document.createElement('template'); + template.innerHTML = this.table.options.dataLoaderError.trim(); + this.errorElement = template.content.firstChild; + } else { + this.errorElement = this.table.options.dataLoaderError; } + } + } + }, { + key: "createLoaderElement", + value: function createLoaderElement() { + var el = document.createElement("div"); + el.classList.add("tabulator-loader"); + return el; + } + }, { + key: "createMsgElement", + value: function createMsgElement() { + var el = document.createElement("div"); + el.classList.add("tabulator-loader-msg"); + el.setAttribute("role", "alert"); + return el; + } + }, { + key: "load", + value: function load(data, params, config, replace, silent) { + var _this2 = this; - modules.forEach(function (mod) { - tabulator.registerModuleBinding(mod); - }); - }; - - tabulator.registerModuleBinding = function (mod) { - tabulator.moduleBindings[mod.moduleName] = mod; - }; + var requestNo = ++this.requestOrder; + this.dispatchExternal("dataLoading", data); //parse json data to array - tabulator.findTable = function (query) { - var results = TableRegistry.lookupTable(query, true); - return Array.isArray(results) && !results.length ? false : results; - }; //ensure that module are bound to instantiated function + if (data && (data.indexOf("{") == 0 || data.indexOf("[") == 0)) { + data = JSON.parse(data); + } + if (this.confirm("data-loading", data, params, config, silent)) { + this.loading = true; - tabulator.prototype.bindModules = function () { - this.modules = {}; + if (!silent) { + this.showLoader(); + } //get params for request - for (var name in tabulator.moduleBindings) { - this.modules[name] = new tabulator.moduleBindings[name](this); - } - }; - } - }, { - key: "bindModules", - value: function bindModules(tabulator, modules) { - var mods = Object.values(modules); - tabulator.registerModule(mods); - } - }]); - return ModuleBinder; - }(); + var params = this.chain("data-params", [data, config, silent], params || {}, {}); + params = this.mapParams(params, this.table.options.dataSendParams); + var result = this.chain("data-load", [data, params, config, silent], Promise.resolve([])); + return result.then(function (response) { + if (!Array.isArray(response) && _typeof(response) == "object") { + response = _this2.mapParams(response, _this2.objectInvert(_this2.table.options.dataReceiveParams)); + } - var VirtualDomHorizontal = /*#__PURE__*/function () { - function VirtualDomHorizontal(table) { - _classCallCheck(this, VirtualDomHorizontal); + var rowData = _this2.chain("data-loaded", response, null, response); - this.table = table; - this.element = this.table.rowManager.tableElement; - this.holderEl = this.table.rowManager.element; - this.leftCol = 0; - this.rightCol = 0; - this.scrollLeft = 0; - this.vDomScrollPosLeft = 0; - this.vDomScrollPosRight = 0; - this.vDomPadLeft = 0; - this.vDomPadRight = 0; - this.fitDataColAvg = 0; - this.window = 200; //pixel margin to make column visible before it is shown on screen + if (requestNo == _this2.requestOrder) { + _this2.hideLoader(); - this.initialized = false; - this.columns = []; + if (rowData !== false) { + _this2.dispatchExternal("dataLoaded", data); - if (this.compatabilityCheck()) { - this.initialize(); - } - } + _this2.table.rowManager.setData(rowData, replace, !replace); + } + } else { + console.warn("Data Load Response Blocked - An active data load request was blocked by an attempt to change table data while the request was being made"); + } + })["catch"](function (error) { + console.error("Data Load Error: ", error); - _createClass(VirtualDomHorizontal, [{ - key: "compatabilityCheck", - value: function compatabilityCheck() { - var options = this.table.options, - frozen = false, - ok = true; + _this2.dispatchExternal("dataLoadError", error); - if (options.layout == "fitDataTable") { - console.warn("Horizontal Vitrual DOM is not compatible with fitDataTable layout mode"); - ok = false; - } + if (!silent) { + _this2.showError(); + } - if (options.responsiveLayout) { - console.warn("Horizontal Vitrual DOM is not compatible with responsive columns"); - ok = false; + setTimeout(function () { + _this2.hideLoader(); + }, 3000); + })["finally"](function () { + _this2.loading = false; + }); + } else { + this.dispatchExternal("dataLoaded", data); + this.table.rowManager.setData(data, replace, !replace); + return Promise.resolve(); } + } + }, { + key: "mapParams", + value: function mapParams(params, map) { + var output = {}; - if (this.table.rtl) { - console.warn("Horizontal Vitrual DOM is not currently compatible with RTL text direction"); - ok = false; + for (var key in params) { + output[map.hasOwnProperty(key) ? map[key] : key] = params[key]; } - if (options.columns) { - frozen = options.columns.find(function (col) { - return col.frozen; - }); - - if (frozen) { - console.warn("Horizontal Vitrual DOM is not compatible with frozen columns"); - ok = false; - } - } + return output; + } + }, { + key: "objectInvert", + value: function objectInvert(obj) { + var output = {}; - if (!ok) { - options.virtualDomHoz = false; + for (var key in obj) { + output[obj[key]] = key; } - return ok; + return output; } }, { - key: "initialize", - value: function initialize() { - var _this = this; + key: "blockActiveLoad", + value: function blockActiveLoad() { + this.requestOrder++; + } + }, { + key: "showLoader", + value: function showLoader() { + var shouldLoad = typeof this.table.options.dataLoader === "function" ? this.table.options.dataLoader() : this.table.options.dataLoader; + + if (shouldLoad) { + this.hideLoader(); - this.holderEl.addEventListener("scroll", function () { - var left = _this.holderEl.scrollLeft; + while (this.msgElement.firstChild) { + this.msgElement.removeChild(this.msgElement.firstChild); + } - if (_this.scrollLeft != left) { - _this.scrollLeft = left; + this.msgElement.classList.remove("tabulator-error"); + this.msgElement.classList.add("tabulator-loading"); - _this.scroll(left - (_this.vDomScrollPosLeft + _this.window)); + if (this.loadingElement) { + this.msgElement.appendChild(this.loadingElement); + } else { + this.msgElement.innerHTML = this.langText("data|loading"); } - }); + + this.table.element.appendChild(this.loaderElement); + } } }, { - key: "deinitialize", - value: function deinitialize() { - this.initialized = false; + key: "showError", + value: function showError() { + this.hideLoader(); + + while (this.msgElement.firstChild) { + this.msgElement.removeChild(this.msgElement.firstChild); + } + + this.msgElement.classList.remove("tabulator-loading"); + this.msgElement.classList.add("tabulator-error"); + + if (this.errorElement) { + this.msgElement.appendChild(this.errorElement); + } else { + this.msgElement.innerHTML = this.langText("data|error"); + } + + this.table.element.appendChild(this.loaderElement); } }, { - key: "clear", - value: function clear() { - this.columns = []; - this.leftCol = -1; - this.rightCol = 0; - this.vDomScrollPosLeft = 0; - this.vDomScrollPosRight = 0; - this.vDomPadLeft = 0; - this.vDomPadRight = 0; + key: "hideLoader", + value: function hideLoader() { + if (this.loaderElement.parentNode) { + this.loaderElement.parentNode.removeChild(this.loaderElement); + } } - }, { - key: "dataChange", - value: function dataChange() { - var change = false, - collsWidth = 0, - colEnd = 0, - group, - row, - rowEl; + }]); - if (this.table.options.layout === "fitData") { - this.table.columnManager.columnsByIndex.forEach(function (column) { - if (!column.definition.width && column.visible) { - change = true; - } - }); + return DataLoader; + }(CoreFeature); - if (change) { - if (change && this.table.rowManager.getDisplayRows().length) { - this.vDomScrollPosRight = this.scrollLeft + this.holderEl.clientWidth + this.window; + var ExternalEventBus = /*#__PURE__*/function () { + function ExternalEventBus(optionsList, debug) { + _classCallCheck(this, ExternalEventBus); - if (this.table.options.groupBy) { - group = this.table.modules.groupRows.getGroups(false)[0]; - row = group.getRows(false)[0]; - } else { - row = this.table.rowManager.getDisplayRows()[0]; - } + this.events = {}; + this.optionsList = optionsList || {}; + this.subscriptionNotifiers = {}; + this.dispatch = debug ? this._debugDispatch.bind(this) : this._dispatch.bind(this); + this.debug = debug; + } - if (row) { - rowEl = row.getElement(); - row.generateCells(); - this.element.appendChild(rowEl); + _createClass(ExternalEventBus, [{ + key: "subscriptionChange", + value: function subscriptionChange(key, callback) { + if (!this.subscriptionNotifiers[key]) { + this.subscriptionNotifiers[key] = []; + } - for (var colEnd = 0; colEnd < row.cells.length; colEnd++) { - var cell = row.cells[colEnd]; - rowEl.appendChild(cell.getElement()); - cell.column.reinitializeWidth(); - collsWidth += cell.column.getWidth(); + this.subscriptionNotifiers[key].push(callback); - if (collsWidth > this.vDomScrollPosRight) { - break; - } - } + if (this.subscribed(key)) { + this._notifiySubscriptionChange(key, true); + } + } + }, { + key: "subscribe", + value: function subscribe(key, callback) { + if (!this.events[key]) { + this.events[key] = []; + } - rowEl.parentNode.removeChild(rowEl); - this.fitDataColAvg = Math.floor(collsWidth / (colEnd + 1)); + this.events[key].push(callback); + + this._notifiySubscriptionChange(key, true); + } + }, { + key: "unsubscribe", + value: function unsubscribe(key, callback) { + var index; - for (colEnd; colEnd < this.table.columnManager.columnsByIndex.length; colEnd++) { - this.table.columnManager.columnsByIndex[colEnd].setWidth(this.fitDataColAvg); - } + if (this.events[key]) { + if (callback) { + index = this.events[key].findIndex(function (item) { + return item === callback; + }); - this.reinitialize(false, true); - } + if (index > -1) { + this.events[key].splice(index, 1); + } else { + console.warn("Cannot remove event, no matching event found:", key, callback); + return; } + } else { + delete this.events[key]; } } else { - if (this.table.options.layout === "fitColumns") { - this.table.modules.layout.layout(); - this.table.vdomHoz.reinitialize(false, true); - } + console.warn("Cannot remove event, no events set on:", key); + return; } + + this._notifiySubscriptionChange(key, false); } }, { - key: "fitDataLayoutOverride", - value: function fitDataLayoutOverride() { - for (var i = this.leftCol; i <= this.rightCol; i++) { - this.columns[i].reinitializeWidth(); + key: "subscribed", + value: function subscribed(key) { + return this.events[key] && this.events[key].length; + } + }, { + key: "_notifiySubscriptionChange", + value: function _notifiySubscriptionChange(key, subscribed) { + var notifiers = this.subscriptionNotifiers[key]; + + if (notifiers) { + notifiers.forEach(function (callback) { + callback(subscribed); + }); } } }, { - key: "reinitialize", - value: function reinitialize(update, blockRedraw) { - var _this2 = this; + key: "_dispatch", + value: function _dispatch() { + var _this = this; - var old = { - cols: this.columns, - leftCol: this.leftCol, - rightCol: this.rightCol - }; + var args = Array.from(arguments), + key = args.shift(), + result; - if (update && !this.initialized) { - return; + if (this.events[key]) { + this.events[key].forEach(function (callback, i) { + var callResult = callback.apply(_this, args); + + if (!i) { + result = callResult; + } + }); } - this.clear(); - this.scrollLeft = this.holderEl.scrollLeft; - this.vDomScrollPosLeft = this.scrollLeft - this.window; - this.vDomScrollPosRight = this.scrollLeft + this.holderEl.clientWidth + this.window; - var colPos = 0; - this.table.columnManager.columnsByIndex.forEach(function (column) { - var config = {}; + return result; + } + }, { + key: "_debugDispatch", + value: function _debugDispatch() { + var args = Array.from(arguments), + key = args[0]; + args[0] = "ExternalEvent:" + args[0]; - if (column.visible) { - var width = column.getWidth(); - config.leftPos = colPos; - config.rightPos = colPos + width; - config.width = width; + if (this.debug === true || this.debug.includes(key)) { + var _console; - if (_this18.table.options.layout === "fitData") { - config.fitDataCheck = true; - } + (_console = console).log.apply(_console, _toConsumableArray(args)); + } - if (colPos + width > _this2.vDomScrollPosLeft && colPos < _this2.vDomScrollPosRight) { - //column is visible - if (_this2.leftCol == -1) { - _this2.leftCol = _this2.columns.length; - _this2.vDomPadLeft = colPos; - } + return this._dispatch.apply(this, arguments); + } + }]); - _this2.rightCol = _this2.columns.length; - } else { - // column is hidden - if (_this2.leftCol !== -1) { - _this2.vDomPadRight += width; - } - } + return ExternalEventBus; + }(); - _this2.columns.push(column); + var InternalEventBus = /*#__PURE__*/function () { + function InternalEventBus(debug) { + _classCallCheck(this, InternalEventBus); - column.modules.vdomHoz = config; - colPos += width; - } - }); - this.element.style.paddingLeft = this.vDomPadLeft + "px"; - this.element.style.paddingRight = this.vDomPadRight + "px"; - this.initialized = true; + this.events = {}; + this.subscriptionNotifiers = {}; + this.dispatch = debug ? this._debugDispatch.bind(this) : this._dispatch.bind(this); + this.chain = debug ? this._debugChain.bind(this) : this._chain.bind(this); + this.confirm = debug ? this._debugConfirm.bind(this) : this._confirm.bind(this); + this.debug = debug; + } - if (!blockRedraw) { - if (!update || this.reinitChanged(old)) { - this.renitializeRows(); - } + _createClass(InternalEventBus, [{ + key: "subscriptionChange", + value: function subscriptionChange(key, callback) { + if (!this.subscriptionNotifiers[key]) { + this.subscriptionNotifiers[key] = []; } - this.holderEl.scrollLeft = this.scrollLeft; + this.subscriptionNotifiers[key].push(callback); + + if (this.subscribed(key)) { + this._notifiySubscriptionChange(key, true); + } } }, { - key: "reinitChanged", - value: function reinitChanged(old) { - var _this3 = this; - - var match = true; + key: "subscribe", + value: function subscribe(key, callback) { + var priority = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 10000; - if (old.cols.length !== this.columns.length || old.leftCol !== this.leftCol || old.rightCol !== this.rightCol) { - return true; + if (!this.events[key]) { + this.events[key] = []; } - old.cols.forEach(function (col, i) { - if (col !== _this3.columns[i]) { - match = false; - } + this.events[key].push({ + callback: callback, + priority: priority }); - return !match; - } - }, { - key: "renitializeRows", - value: function renitializeRows() { - var _this4 = this; - - var rows = this.table.rowManager.getVisibleRows(); - rows.forEach(function (row) { - _this4.reinitializeRow(row, true); + this.events[key].sort(function (a, b) { + return a.priority - b.priority; }); + + this._notifiySubscriptionChange(key, true); } }, { - key: "scroll", - value: function scroll(diff) { - this.vDomScrollPosLeft += diff; - this.vDomScrollPosRight += diff; + key: "unsubscribe", + value: function unsubscribe(key, callback) { + var index; - if (diff > this.holderEl.clientWidth * .8) { - this.reinitialize(); - } else { - if (diff > 0) { - //scroll right - this.addColRight(); - this.removeColLeft(); - } else { - //scroll left - this.addColLeft(); - this.removeColRight(); + if (this.events[key]) { + if (callback) { + index = this.events[key].findIndex(function (item) { + return item.callback === callback; + }); + + if (index > -1) { + this.events[key].splice(index, 1); + } else { + console.warn("Cannot remove event, no matching event found:", key, callback); + return; + } } + } else { + console.warn("Cannot remove event, no events set on:", key); + return; } + + this._notifiySubscriptionChange(key, false); } }, { - key: "colPositionAdjust", - value: function colPositionAdjust(start, end, diff) { - for (var i = start; i < end; i++) { - var column = this.columns[i]; - column.modules.vdomHoz.leftPos += diff; - column.modules.vdomHoz.rightPos += diff; + key: "subscribed", + value: function subscribed(key) { + return this.events[key] && this.events[key].length; + } + }, { + key: "_chain", + value: function _chain(key, args, initialValue, fallback) { + var _this = this; + + var value = initialValue; + + if (!Array.isArray(args)) { + args = [args]; + } + + if (this.subscribed(key)) { + this.events[key].forEach(function (subscriber, i) { + value = subscriber.callback.apply(_this, args.concat([value])); + }); + return value; + } else { + return typeof fallback === "function" ? fallback() : fallback; } } }, { - key: "addColRight", - value: function addColRight() { - var column = this.columns[this.rightCol + 1], - rows; + key: "_confirm", + value: function _confirm(key, args) { + var _this2 = this; - if (column && column.modules.vdomHoz.leftPos <= this.vDomScrollPosRight) { - rows = this.table.rowManager.getVisibleRows(); - rows.forEach(function (row) { - if (row.type !== "group") { - var cell = row.getCell(column); - row.getElement().appendChild(cell.getElement()); - cell.cellRendered(); + var confirmed = false; + + if (!Array.isArray(args)) { + args = [args]; + } + + if (this.subscribed(key)) { + this.events[key].forEach(function (subscriber, i) { + if (subscriber.callback.apply(_this2, args)) { + confirmed = true; } }); - this.fitDataColActualWidthCheck(column); - this.rightCol++; + } - if (this.rightCol >= this.columns.length - 1) { - this.vDomPadRight = 0; - } else { - this.vDomPadRight -= column.getWidth(); - } + return confirmed; + } + }, { + key: "_notifiySubscriptionChange", + value: function _notifiySubscriptionChange(key, subscribed) { + var notifiers = this.subscriptionNotifiers[key]; - this.element.style.paddingRight = this.vDomPadRight + "px"; - this.addColRight(); + if (notifiers) { + notifiers.forEach(function (callback) { + callback(subscribed); + }); } } }, { - key: "addColLeft", - value: function addColLeft() { - var column = this.columns[this.leftCol - 1], - rows; + key: "_dispatch", + value: function _dispatch() { + var _this3 = this; - if (column && column.modules.vdomHoz.rightPos >= this.vDomScrollPosLeft) { - var rows = this.table.rowManager.getVisibleRows(); - rows.forEach(function (row) { - if (row.type !== "group") { - var cell = row.getCell(column); - row.getElement().prepend(cell.getElement()); - cell.cellRendered(); - } + var args = Array.from(arguments), + key = args.shift(); + + if (this.events[key]) { + this.events[key].forEach(function (subscriber) { + var callResult = subscriber.callback.apply(_this3, args); }); - this.fitDataColActualWidthCheck(column); + } + } + }, { + key: "_debugDispatch", + value: function _debugDispatch() { + var args = Array.from(arguments), + key = args[0]; + args[0] = "InternalEvent:" + key; - if (!this.leftCol) { - this.vDomPadLeft = 0; - } else { - this.vDomPadLeft -= column.getWidth(); - } + if (this.debug === true || this.debug.includes(key)) { + var _console; - this.element.style.paddingLeft = this.vDomPadLeft + "px"; - this.leftCol--; - this.addColLeft(); + (_console = console).log.apply(_console, _toConsumableArray(args)); + } + + return this._dispatch.apply(this, arguments); + } + }, { + key: "_debugChain", + value: function _debugChain() { + var args = Array.from(arguments), + key = args[0]; + args[0] = "InternalEvent:" + key; + + if (this.debug === true || this.debug.includes(key)) { + var _console2; + + (_console2 = console).log.apply(_console2, _toConsumableArray(args)); } + + return this._chain.apply(this, arguments); } }, { - key: "removeColRight", - value: function removeColRight(column) { - var column = this.columns[this.rightCol], - rows; + key: "_debugConfirm", + value: function _debugConfirm() { + var args = Array.from(arguments), + key = args[0]; + args[0] = "InternalEvent:" + key; - if (column && column.modules.vdomHoz.leftPos > this.vDomScrollPosRight) { - rows = this.table.rowManager.getVisibleRows(); - column.modules.vdomHoz.visible = false; - rows.forEach(function (row) { - if (row.type !== "group") { - var cell = row.getCell(column); - row.getElement().removeChild(cell.getElement()); - } - }); - this.vDomPadRight += column.getWidth(); - this.element.style.paddingRight = this.vDomPadRight + "px"; - this.rightCol--; - this.removeColRight(); + if (this.debug === true || this.debug.includes(key)) { + var _console3; + + (_console3 = console).log.apply(_console3, _toConsumableArray(args)); + } + + return this._confirm.apply(this, arguments); + } + }]); + + return InternalEventBus; + }(); + + var TableRegistry = /*#__PURE__*/function () { + function TableRegistry() { + _classCallCheck(this, TableRegistry); + } + + _createClass(TableRegistry, null, [{ + key: "register", + value: function register(table) { + TableRegistry.tables.push(table); + } + }, { + key: "deregister", + value: function deregister(table) { + var index = TableRegistry.tables.indexOf(table); + + if (index > -1) { + TableRegistry.tables.splice(index, 1); } } }, { - key: "removeColLeft", - value: function removeColLeft() { - var column = this.columns[this.leftCol], - rows; + key: "lookupTable", + value: function lookupTable(query, silent) { + var results = [], + matches, + match; - if (column && column.modules.vdomHoz.rightPos < this.vDomScrollPosLeft) { - rows = this.table.rowManager.getVisibleRows(); - rows.forEach(function (row) { - if (row.type !== "group") { - var cell = row.getCell(column); - row.getElement().removeChild(cell.getElement()); + if (typeof query === "string") { + matches = document.querySelectorAll(query); + + if (matches.length) { + for (var i = 0; i < matches.length; i++) { + match = TableRegistry.matchElement(matches[i]); + + if (match) { + results.push(match); + } } + } + } else if (typeof HTMLElement !== "undefined" && query instanceof HTMLElement || query instanceof Tabulator$1) { + match = TableRegistry.matchElement(query); + + if (match) { + results.push(match); + } + } else if (Array.isArray(query)) { + query.forEach(function (item) { + results = results.concat(TableRegistry.lookupTable(item)); }); - this.vDomPadLeft += column.getWidth(); - this.element.style.paddingLeft = this.vDomPadLeft + "px"; - this.leftCol++; - this.removeColLeft(); + } else { + if (!silent) { + console.warn("Table Connection Error - Invalid Selector", query); + } } + + return results; } }, { - key: "fitDataColActualWidthCheck", - value: function fitDataColActualWidthCheck(column) { - var newWidth, widthDiff; + key: "matchElement", + value: function matchElement(element) { + return TableRegistry.tables.find(function (table) { + return element instanceof Tabulator$1 ? table === element : table.element === element; + }); + } + }]); - if (column.modules.vdomHoz.fitDataCheck) { - column.reinitializeWidth(); - newWidth = column.getWidth(); - widthDiff = newWidth - column.modules.vdomHoz.width; + return TableRegistry; + }(); - if (widthDiff) { - column.modules.vdomHoz.rightPos += widthDiff; - column.modules.vdomHoz.width = newWidth; - this.colPositionAdjust(this.rightCol + 2, this.columns.length, widthDiff); - } + TableRegistry.tables = []; - column.modules.vdomHoz.fitDataCheck = false; - } + var Module = /*#__PURE__*/function (_CoreFeature) { + _inherits(Module, _CoreFeature); + + var _super = _createSuper(Module); + + function Module(table, name) { + var _this; + + _classCallCheck(this, Module); + + _this = _super.call(this, table); + _this._handler = null; + return _this; + } + + _createClass(Module, [{ + key: "initialize", + value: function initialize() {// setup module when table is initialized, to be overriden in module + } /////////////////////////////////// + ////// Options Registration /////// + /////////////////////////////////// + + }, { + key: "registerTableOption", + value: function registerTableOption(key, value) { + this.table.optionsList.register(key, value); } }, { - key: "initializeRow", - value: function initializeRow(row) { - if (row.type !== "group") { - row.modules.vdomHoz = { - leftCol: this.leftCol, - rightCol: this.rightCol - }; - - for (var i = this.leftCol; i <= this.rightCol; i++) { - var column = this.columns[i]; + key: "registerColumnOption", + value: function registerColumnOption(key, value) { + this.table.columnManager.optionsList.register(key, value); + } /////////////////////////////////// + /// Public Function Registation /// + /////////////////////////////////// - if (column && column.visible) { - var cell = row.getCell(column); - row.getElement().appendChild(cell.getElement()); - cell.cellRendered(); - } - } + }, { + key: "registerTableFunction", + value: function registerTableFunction(name, func) { + if (typeof this.table[name] === "undefined") { + this.table[name] = func; + } else { + console.warn("Unable to bind table function, name already in use", name); } } }, { - key: "reinitializeRow", - value: function reinitializeRow(row, force) { - if (row.type !== "group") { - if (force || !row.modules.vdomHoz || row.modules.vdomHoz.leftCol !== this.leftCol || row.modules.vdomHoz.rightCol !== this.rightCol) { - var rowEl = row.getElement(); + key: "registerComponentFunction", + value: function registerComponentFunction(component, func, handler) { + return this.table.componentFunctionBinder.bind(component, func, handler); + } /////////////////////////////////// + ////////// Data Pipeline ////////// + /////////////////////////////////// - while (rowEl.firstChild) { - rowEl.removeChild(rowEl.firstChild); - } + }, { + key: "registerDataHandler", + value: function registerDataHandler(handler, priority) { + this.table.rowManager.registerDataPipelineHandler(handler, priority); + this._handler = handler; + } + }, { + key: "registerDisplayHandler", + value: function registerDisplayHandler(handler, priority) { + this.table.rowManager.registerDisplayPipelineHandler(handler, priority); + this._handler = handler; + } + }, { + key: "refreshData", + value: function refreshData(renderInPosition, handler) { + if (!handler) { + handler = this._handler; + } - this.initializeRow(row); - } + if (handler) { + this.table.rowManager.refreshActiveData(handler, false, renderInPosition); } } }]); - return VirtualDomHorizontal; - }(); - - var Tabulator$1 = /*#__PURE__*/function () { - function Tabulator(element, options) { - _classCallCheck(this, Tabulator); - - this.options = {}; - this.columnManager = null; // hold Column Manager + return Module; + }(CoreFeature); - this.rowManager = null; //hold Row Manager + //resize columns to fit data they contain + function fitData (columns) { + this.table.columnManager.renderer.reinitializeColumnWidths(columns); - this.footerManager = null; //holder Footer Manager + if (this.table.options.responsiveLayout && this.table.modExists("responsiveLayout", true)) { + this.table.modules.responsiveLayout.update(); + } + } - this.vdomHoz = null; //holder horizontal virtual dom + //resize columns to fit data they contain and stretch row to fill table, also used for fitDataTable + function fitDataGeneral (columns) { + columns.forEach(function (column) { + column.reinitializeWidth(); + }); - this.browser = ""; //hold current browser type + if (this.table.options.responsiveLayout && this.table.modExists("responsiveLayout", true)) { + this.table.modules.responsiveLayout.update(); + } + } - this.browserSlow = false; //handle reduced functionality for slower browsers + //resize columns to fit data the contain and stretch last column to fill table + function fitDataStretch (columns) { + var _this = this; - this.browserMobile = false; //check if running on moble, prevent resize cancelling edit on keyboard appearence + var colsWidth = 0, + tableWidth = this.table.rowManager.element.clientWidth, + gap = 0, + lastCol = false; + columns.forEach(function (column, i) { + if (!column.widthFixed) { + column.reinitializeWidth(); + } - this.rtl = false; //check if the table is in RTL mode + if (_this.table.options.responsiveLayout ? column.modules.responsive.visible : column.visible) { + lastCol = column; + } - this.modules = {}; //hold all modules bound to this table + if (column.visible) { + colsWidth += column.getWidth(); + } + }); - if (this.initializeElement(element)) { - this.initializeOptions(options || {}); + if (lastCol) { + gap = tableWidth - colsWidth + lastCol.getWidth(); - this._create(); + if (this.table.options.responsiveLayout && this.table.modExists("responsiveLayout", true)) { + lastCol.setWidth(0); + this.table.modules.responsiveLayout.update(); } - TableRegistry.register(this); //register table for inderdevice communication + if (gap > 0) { + lastCol.setWidth(gap); + } else { + lastCol.reinitializeWidth(); + } + } else { + if (this.table.options.responsiveLayout && this.table.modExists("responsiveLayout", true)) { + this.table.modules.responsiveLayout.update(); + } } + } - _createClass(Tabulator, [{ - key: "initializeOptions", - value: function initializeOptions(options) { - var defaults = Tabulator.defaultOptions; //warn user if option is not available + //resize columns to fit + function fitColumns (columns) { + var totalWidth = this.table.element.clientWidth; //table element width - if (options.invalidOptionWarnings !== false) { - for (var key in options) { - if (typeof defaults[key] === "undefined") { - console.warn("Invalid table constructor option:", key); - } - } - } //assign options to table + var fixedWidth = 0; //total width of columns with a defined width + var flexWidth = 0; //total width available to flexible columns - for (var key in defaults) { - if (key in options) { - this.options[key] = options[key]; - } else { - if (Array.isArray(defaults[key])) { - this.options[key] = Object.assign([], defaults[key]); - } else if (_typeof(defaults[key]) === "object" && defaults[key] !== null) { - this.options[key] = Object.assign({}, defaults[key]); - } else { - this.options[key] = defaults[key]; - } - } - } - } - }, { - key: "initializeElement", - value: function initializeElement(element) { - if (typeof HTMLElement !== "undefined" && element instanceof HTMLElement) { - this.element = element; - return true; - } else if (typeof element === "string") { - this.element = document.querySelector(element); + var flexGrowUnits = 0; //total number of widthGrow blocks accross all columns - if (this.element) { - return true; - } else { - console.error("Tabulator Creation Error - no element found matching selector: ", element); - return false; - } + var flexColWidth = 0; //desired width of flexible columns + + var flexColumns = []; //array of flexible width columns + + var fixedShrinkColumns = []; //array of fixed width columns that can shrink + + var flexShrinkUnits = 0; //total number of widthShrink blocks accross all columns + + var overflowWidth = 0; //horizontal overflow width + + var gapFill = 0; //number of pixels to be added to final column to close and half pixel gaps + + function calcWidth(width) { + var colWidth; + + if (typeof width == "string") { + if (width.indexOf("%") > -1) { + colWidth = totalWidth / 100 * parseInt(width); } else { - console.error("Tabulator Creation Error - Invalid element provided:", element); - return false; + colWidth = parseInt(width); } + } else { + colWidth = width; } - }, { - key: "rtlCheck", - value: function rtlCheck() { - var style = window.getComputedStyle(this.element); - switch (this.options.textDirection) { - case "auto": - if (style.direction !== "rtl") { - break; - } + return colWidth; + } //ensure columns resize to take up the correct amount of space - case "rtl": - this.element.classList.add("tabulator-rtl"); - this.rtl = true; - break; - case "ltr": - this.element.classList.add("tabulator-ltr"); + function scaleColumns(columns, freeSpace, colWidth, shrinkCols) { + var oversizeCols = [], + oversizeSpace = 0, + remainingSpace = 0, + nextColWidth = 0, + remainingFlexGrowUnits = flexGrowUnits, + gap = 0, + changeUnits = 0, + undersizeCols = []; - default: - this.rtl = false; - } - } //convert depricated functionality to new functions + function calcGrow(col) { + return colWidth * (col.column.definition.widthGrow || 1); + } - }, { - key: "_mapDepricatedFunctionality", - value: function _mapDepricatedFunctionality() {//all previously deprecated functionality removed in the 5.0 release + function calcShrink(col) { + return calcWidth(col.width) - colWidth * (col.column.definition.widthShrink || 0); } - }, { - key: "_clearSelection", - value: function _clearSelection() { - this.element.classList.add("tabulator-block-select"); - if (window.getSelection) { - if (window.getSelection().empty) { - // Chrome - window.getSelection().empty(); - } else if (window.getSelection().removeAllRanges) { - // Firefox - window.getSelection().removeAllRanges(); + columns.forEach(function (col, i) { + var width = shrinkCols ? calcShrink(col) : calcGrow(col); + + if (col.column.minWidth >= width) { + oversizeCols.push(col); + } else { + if (col.column.maxWidth && col.column.maxWidth < width) { + col.width = col.column.maxWidth; + freeSpace -= col.column.maxWidth; + remainingFlexGrowUnits -= shrinkCols ? col.column.definition.widthShrink || 1 : col.column.definition.widthGrow || 1; + + if (remainingFlexGrowUnits) { + colWidth = Math.floor(freeSpace / remainingFlexGrowUnits); + } + } else { + undersizeCols.push(col); + changeUnits += shrinkCols ? col.column.definition.widthShrink || 1 : col.column.definition.widthGrow || 1; } - } else if (document.selection) { - // IE? - document.selection.empty(); } + }); - this.element.classList.remove("tabulator-block-select"); - } //concreate table + if (oversizeCols.length) { + oversizeCols.forEach(function (col) { + oversizeSpace += shrinkCols ? col.width - col.column.minWidth : col.column.minWidth; + col.width = col.column.minWidth; + }); + remainingSpace = freeSpace - oversizeSpace; + nextColWidth = changeUnits ? Math.floor(remainingSpace / changeUnits) : remainingSpace; + gap = remainingSpace - nextColWidth * changeUnits; + gap += scaleColumns(undersizeCols, remainingSpace, nextColWidth, shrinkCols); + } else { + gap = changeUnits ? freeSpace - Math.floor(freeSpace / changeUnits) * changeUnits : freeSpace; + undersizeCols.forEach(function (column) { + column.width = shrinkCols ? calcShrink(column) : calcGrow(column); + }); + } - }, { - key: "_create", - value: function _create() { - this._clearObjectPointers(); + return gap; + } - this._mapDepricatedFunctionality(); + if (this.table.options.responsiveLayout && this.table.modExists("responsiveLayout", true)) { + this.table.modules.responsiveLayout.update(); + } //adjust for vertical scrollbar if present - this.bindModules(); - this.rtlCheck(); - if (this.element.tagName === "TABLE") { - if (this.modExists("htmlTableImport", true)) { - this.modules.htmlTableImport.parseTable(); - } - } + if (this.table.rowManager.element.scrollHeight > this.table.rowManager.element.clientHeight) { + totalWidth -= this.table.rowManager.element.offsetWidth - this.table.rowManager.element.clientWidth; + } - this.columnManager = new ColumnManager(this); - this.rowManager = new RowManager(this); - this.footerManager = new FooterManager(this); - this.columnManager.setRowManager(this.rowManager); - this.rowManager.setColumnManager(this.columnManager); + columns.forEach(function (column) { + var width, minWidth, colWidth; - if (this.options.virtualDomHoz) { - this.vdomHoz = new VirtualDomHorizontal(this); - } + if (column.visible) { + width = column.definition.width; + minWidth = parseInt(column.minWidth); - this._buildElement(); + if (width) { + colWidth = calcWidth(width); + fixedWidth += colWidth > minWidth ? colWidth : minWidth; - this._loadInitialData(); - } //clear pointers to objects in default config object + if (column.definition.widthShrink) { + fixedShrinkColumns.push({ + column: column, + width: colWidth > minWidth ? colWidth : minWidth + }); + flexShrinkUnits += column.definition.widthShrink; + } + } else { + flexColumns.push({ + column: column, + width: 0 + }); + flexGrowUnits += column.definition.widthGrow || 1; + } + } + }); //calculate available space - }, { - key: "_clearObjectPointers", - value: function _clearObjectPointers() { - this.options.columns = this.options.columns.slice(0); + flexWidth = totalWidth - fixedWidth; //calculate correct column size - if (!this.options.reactiveData) { - this.options.data = this.options.data.slice(0); - } - } //build tabulator element + flexColWidth = Math.floor(flexWidth / flexGrowUnits); //generate column widths - }, { - key: "_buildElement", - value: function _buildElement() { - var _this = this; + var gapFill = scaleColumns(flexColumns, flexWidth, flexColWidth, false); //increase width of last column to account for rounding errors - var element = this.element, - mod = this.modules, - options = this.options; - options.tableBuilding.call(this); - element.classList.add("tabulator"); - element.setAttribute("role", "grid"); //empty element + if (flexColumns.length && gapFill > 0) { + flexColumns[flexColumns.length - 1].width += +gapFill; + } //caculate space for columns to be shrunk into - while (element.firstChild) { - element.removeChild(element.firstChild); - } //set table height + flexColumns.forEach(function (col) { + flexWidth -= col.width; + }); + overflowWidth = Math.abs(gapFill) + flexWidth; //shrink oversize columns if there is no available space - if (options.height) { - options.height = isNaN(options.height) ? options.height : options.height + "px"; - element.style.height = options.height; - } //set table min height + if (overflowWidth > 0 && flexShrinkUnits) { + gapFill = scaleColumns(fixedShrinkColumns, overflowWidth, Math.floor(overflowWidth / flexShrinkUnits), true); + } //decrease width of last column to account for rounding errors - if (options.minHeight !== false) { - options.minHeight = isNaN(options.minHeight) ? options.minHeight : options.minHeight + "px"; - element.style.minHeight = options.minHeight; - } //set table maxHeight + if (fixedShrinkColumns.length) { + fixedShrinkColumns[fixedShrinkColumns.length - 1].width -= gapFill; + } + flexColumns.forEach(function (col) { + col.column.setWidth(col.width); + }); + fixedShrinkColumns.forEach(function (col) { + col.column.setWidth(col.width); + }); + } - if (options.maxHeight !== false) { - options.maxHeight = isNaN(options.maxHeight) ? options.maxHeight : options.maxHeight + "px"; - element.style.maxHeight = options.maxHeight; - } + var defaultModes = { + fitData: fitData, + fitDataFill: fitDataGeneral, + fitDataTable: fitDataGeneral, + fitDataStretch: fitDataStretch, + fitColumns: fitColumns + }; - this.columnManager.initialize(); - this.rowManager.initialize(); + var Layout = /*#__PURE__*/function (_Module) { + _inherits(Layout, _Module); - this._detectBrowser(); + var _super = _createSuper(Layout); - if (this.modExists("layout", true)) { - mod.layout.initialize(options.layout); - } //set localization + function Layout(table) { + var _this; + _classCallCheck(this, Layout); - mod.localize.initialize(); + _this = _super.call(this, table, "layout"); + _this.mode = null; - if (options.headerFilterPlaceholder !== false) { - mod.localize.setHeaderFilterPlaceholder(options.headerFilterPlaceholder); - } + _this.registerTableOption("layout", "fitData"); //layout type - for (var locale in options.langs) { - mod.localize.installLang(locale, options.langs[locale]); - } - mod.localize.setLocale(options.locale); //configure placeholder element + _this.registerTableOption("layoutColumnsOnNewData", false); //update column widths on setData - if (typeof options.placeholder == "string") { - var el = document.createElement("div"); - el.classList.add("tabulator-placeholder"); - var span = document.createElement("span"); - span.innerHTML = options.placeholder; - el.appendChild(span); - options.placeholder = el; - } //build table elements + _this.registerColumnOption("widthGrow"); - element.appendChild(this.columnManager.getElement()); - element.appendChild(this.rowManager.getElement()); + _this.registerColumnOption("widthShrink"); - if (options.footerElement) { - this.footerManager.activate(); - } + return _this; + } //initialize layout system - if (options.persistence && this.modExists("persistence", true)) { - mod.persistence.initialize(); - } - if (options.movableRows && this.modExists("moveRow")) { - mod.moveRow.initialize(); - } + _createClass(Layout, [{ + key: "initialize", + value: function initialize() { + var layout = this.table.options.layout; - if (options.autoColumns && this.options.data) { - this.columnManager.generateColumnsFromRowData(this.options.data); + if (Layout.modes[layout]) { + this.mode = layout; + } else { + console.warn("Layout Error - invalid mode set, defaulting to 'fitData' : " + layout); + this.mode = 'fitData'; } - if (this.modExists("columnCalcs")) { - mod.columnCalcs.initialize(); - } + this.table.element.setAttribute("tabulator-layout", this.mode); + } + }, { + key: "getMode", + value: function getMode() { + return this.mode; + } //trigger table layout - this.columnManager.setColumns(options.columns); + }, { + key: "layout", + value: function layout() { + Layout.modes[this.mode].call(this, this.table.columnManager.columnsByIndex); + this.dispatch("layout-refreshed"); + } + }]); - if (options.dataTree && this.modExists("dataTree", true)) { - mod.dataTree.initialize(); - } + return Layout; + }(Module); - if (this.modExists("frozenRows")) { - this.modules.frozenRows.initialize(); - } + Layout.moduleName = "layout"; //load defaults - if ((options.persistence && this.modExists("persistence", true) && mod.persistence.config.sort || options.initialSort) && this.modExists("sort", true)) { - var sorters = []; + Layout.modes = defaultModes; - if (options.persistence && this.modExists("persistence", true) && mod.persistence.config.sort) { - sorters = mod.persistence.load("sort"); + var defaultLangs = { + "default": { + //hold default locale text + "groups": { + "item": "item", + "items": "items" + }, + "columns": {}, + "data": { + "loading": "Loading", + "error": "Error" + }, + "pagination": { + "page_size": "Page Size", + "page_title": "Show Page", + "first": "First", + "first_title": "First Page", + "last": "Last", + "last_title": "Last Page", + "prev": "Prev", + "prev_title": "Prev Page", + "next": "Next", + "next_title": "Next Page", + "all": "All" + }, + "headerFilters": { + "default": "filter column...", + "columns": {} + } + } + }; - if (sorters === false && options.initialSort) { - sorters = options.initialSort; - } - } else if (options.initialSort) { - sorters = options.initialSort; - } + var Localize = /*#__PURE__*/function (_Module) { + _inherits(Localize, _Module); - mod.sort.setSort(sorters); - } + var _super = _createSuper(Localize); - if ((options.persistence && this.modExists("persistence", true) && mod.persistence.config.filter || options.initialFilter) && this.modExists("filter", true)) { - var filters = []; + function Localize(table) { + var _this; - if (options.persistence && this.modExists("persistence", true) && mod.persistence.config.filter) { - filters = mod.persistence.load("filter"); + _classCallCheck(this, Localize); - if (filters === false && options.initialFilter) { - filters = options.initialFilter; - } - } else if (options.initialFilter) { - filters = options.initialFilter; - } + _this = _super.call(this, table); + _this.locale = "default"; //current locale - mod.filter.setFilter(filters); - } + _this.lang = false; //current language - if (options.initialHeaderFilter && this.modExists("filter", true)) { - options.initialHeaderFilter.forEach(function (item) { - var column = _this.columnManager.findColumn(item.field); + _this.bindings = {}; //update events to call when locale is changed - if (column) { - mod.filter.setHeaderFilterValue(column, item.value); - } else { - console.warn("Column Filter Error - No matching column found:", item.field); - return false; - } - }); - } + _this.langList = {}; - if (this.modExists("ajax")) { - mod.ajax.initialize(); - } + _this.registerTableOption("locale", false); //current system language - if (options.pagination && this.modExists("page", true)) { - mod.page.initialize(); - } - if (options.groupBy && this.modExists("groupRows", true)) { - mod.groupRows.initialize(); - } + _this.registerTableOption("langs", {}); - if (this.modExists("keybindings")) { - mod.keybindings.initialize(); - } + return _this; + } - if (this.modExists("selectRow")) { - mod.selectRow.clearSelectionData(true); - } + _createClass(Localize, [{ + key: "initialize", + value: function initialize() { + this.langList = Helpers$1.deepClone(Localize.langs); - if (options.autoResize && this.modExists("resizeTable")) { - mod.resizeTable.initialize(); + if (this.table.options.columnDefaults.headerFilterPlaceholder !== false) { + this.setHeaderFilterPlaceholder(this.table.options.columnDefaults.headerFilterPlaceholder); } - if (this.modExists("clipboard")) { - mod.clipboard.initialize(); + for (var locale in this.table.options.langs) { + this.installLang(locale, this.table.options.langs[locale]); } - if (options.printAsHtml && this.modExists("print")) { - mod.print.initialize(); - } + this.setLocale(this.table.options.locale); + this.registerTableFunction("setLocale", this.setLocale.bind(this)); + this.registerTableFunction("getLocale", this.getLocale.bind(this)); + this.registerTableFunction("getLang", this.getLang.bind(this)); + } //set header placehoder - options.tableBuilt.call(this); - } }, { - key: "_loadInitialData", - value: function _loadInitialData() { - var _this2 = this; + key: "setHeaderFilterPlaceholder", + value: function setHeaderFilterPlaceholder(placeholder) { + this.langList["default"].headerFilters["default"] = placeholder; + } //set header filter placeholder by column - if (this.options.pagination && this.modExists("page")) { - this.modules.page.reset(true, true); + }, { + key: "setHeaderFilterColumnPlaceholder", + value: function setHeaderFilterColumnPlaceholder(column, placeholder) { + this.langList["default"].headerFilters.columns[column] = placeholder; - if (this.options.pagination == "local") { - if (this.options.data.length) { - this.rowManager.setData(this.options.data, false, true); - } else { - if ((this.options.ajaxURL || this.options.ajaxURLGenerator) && this.modExists("ajax")) { - this.modules.ajax.loadData(false, true).then(function () {})["catch"](function () { - if (_this2.options.paginationInitialPage) { - _this2.modules.page.setPage(_this2.options.paginationInitialPage); - } - }); - return; - } else { - this.rowManager.setData(this.options.data, false, true); - } - } + if (this.lang && !this.lang.headerFilters.columns[column]) { + this.lang.headerFilters.columns[column] = placeholder; + } + } //setup a lang description object - if (this.options.paginationInitialPage) { - this.modules.page.setPage(this.options.paginationInitialPage); - } - } else { - if (this.options.ajaxURL) { - this.modules.page.setPage(this.options.paginationInitialPage).then(function () {})["catch"](function () {}); - } else { - this.rowManager.setData([], false, true); - } - } + }, { + key: "installLang", + value: function installLang(locale, lang) { + if (this.langList[locale]) { + this._setLangProp(this.langList[locale], lang); } else { - if (this.options.data.length) { - this.rowManager.setData(this.options.data); + this.langList[locale] = lang; + } + } + }, { + key: "_setLangProp", + value: function _setLangProp(lang, values) { + for (var key in values) { + if (lang[key] && _typeof(lang[key]) == "object") { + this._setLangProp(lang[key], values[key]); } else { - if ((this.options.ajaxURL || this.options.ajaxURLGenerator) && this.modExists("ajax")) { - this.modules.ajax.loadData(false, true).then(function () {})["catch"](function () {}); - } else { - this.rowManager.setData(this.options.data, false, true); - } + lang[key] = values[key]; } } - } //deconstructor + } //set current locale }, { - key: "destroy", - value: function destroy() { - var element = this.element; - comms(this); //deregister table from inderdevice communication + key: "setLocale", + value: function setLocale(desiredLocale) { + desiredLocale = desiredLocale || "default"; //fill in any matching languge values - if (this.options.reactiveData && this.modExists("reactiveData", true)) { - this.modules.reactiveData.unwatchData(); - } //clear row data + function traverseLang(trans, path) { + for (var prop in trans) { + if (_typeof(trans[prop]) == "object") { + if (!path[prop]) { + path[prop] = {}; + } + traverseLang(trans[prop], path[prop]); + } else { + path[prop] = trans[prop]; + } + } + } //determing correct locale to load - this.rowManager.rows.forEach(function (row) { - row.wipe(); - }); - this.rowManager.rows = []; - this.rowManager.activeRows = []; - this.rowManager.displayRows = []; //clear event bindings - if (this.options.autoResize && this.modExists("resizeTable")) { - this.modules.resizeTable.clearBindings(); + if (desiredLocale === true && navigator.language) { + //get local from system + desiredLocale = navigator.language.toLowerCase(); } - if (this.modExists("keybindings")) { - this.modules.keybindings.clearBindings(); - } //clear DOM - + if (desiredLocale) { + //if locale is not set, check for matching top level locale else use default + if (!this.langList[desiredLocale]) { + var prefix = desiredLocale.split("-")[0]; - while (element.firstChild) { - element.removeChild(element.firstChild); + if (this.langList[prefix]) { + console.warn("Localization Error - Exact matching locale not found, using closest match: ", desiredLocale, prefix); + desiredLocale = prefix; + } else { + console.warn("Localization Error - Matching locale not found, using default: ", desiredLocale); + desiredLocale = "default"; + } + } } - element.classList.remove("tabulator"); - } - }, { - key: "_detectBrowser", - value: function _detectBrowser() { - var ua = navigator.userAgent || navigator.vendor || window.opera; + this.locale = desiredLocale; //load default lang template - if (ua.indexOf("Trident") > -1) { - this.browser = "ie"; - this.browserSlow = true; - } else if (ua.indexOf("Edge") > -1) { - this.browser = "edge"; - this.browserSlow = true; - } else if (ua.indexOf("Firefox") > -1) { - this.browser = "firefox"; - this.browserSlow = false; - } else { - this.browser = "other"; - this.browserSlow = false; - } + this.lang = Helpers$1.deepClone(this.langList["default"] || {}); - this.browserMobile = /(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i.test(ua) || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(ua.substr(0, 4)); - } ////////////////// Data Handling ////////////////// - //block table redrawing + if (desiredLocale != "default") { + traverseLang(this.langList[desiredLocale], this.lang); + } - }, { - key: "blockRedraw", - value: function blockRedraw() { - return this.rowManager.blockRedraw(); - } //restore table redrawing + this.dispatchExternal("localized", this.locale, this.lang); - }, { - key: "restoreRedraw", - value: function restoreRedraw() { - return this.rowManager.restoreRedraw(); - } //local data from local file + this._executeBindings(); + } //get current locale }, { - key: "setDataFromLocalFile", - value: function setDataFromLocalFile(extensions) { - var _this3 = this; - - return new Promise(function (resolve, reject) { - var input = document.createElement("input"); - input.type = "file"; - input.accept = extensions || ".json,application/json"; - input.addEventListener("change", function (e) { - var file = input.files[0], - reader = new FileReader(), - data; - reader.readAsText(file); - - reader.onload = function (e) { - try { - data = JSON.parse(reader.result); - } catch (e) { - console.warn("File Load Error - File contents is invalid JSON", e); - reject(e); - return; - } - - _this3.setData(data).then(function (data) { - resolve(data); - })["catch"](function (err) { - resolve(err); - }); - }; - - reader.onerror = function (e) { - console.warn("File Load Error - Unable to read file"); - reject(); - }; - }); - input.click(); - }); - } //load data + key: "getLocale", + value: function getLocale(locale) { + return this.locale; + } //get lang object for given local or current if none provided }, { - key: "setData", - value: function setData(data, params, config) { - if (this.modExists("ajax")) { - this.modules.ajax.blockActiveRequest(); - } + key: "getLang", + value: function getLang(locale) { + return locale ? this.langList[locale] : this.lang; + } //get text for current locale - return this._setData(data, params, config, false, true); - } }, { - key: "_setData", - value: function _setData(data, params, config, inPosition, columnsChanged) { - if (typeof data === "string") { - if (data.indexOf("{") == 0 || data.indexOf("[") == 0) { - //data is a json encoded string - return this.rowManager.setData(JSON.parse(data), inPosition, columnsChanged); - } else { - if (this.modExists("ajax", true)) { - if (params) { - this.modules.ajax.setParams(params); - } - - if (config) { - this.modules.ajax.setConfig(config); - } + key: "getText", + value: function getText(path, value) { + var path = value ? path + "|" + value : path, + pathArray = path.split("|"), + text = this._getLangElement(pathArray, this.locale); // if(text === false){ + // console.warn("Localization Error - Matching localized text not found for given path: ", path); + // } - this.modules.ajax.setUrl(data); - if (this.options.pagination == "remote" && this.modExists("page", true)) { - this.modules.page.reset(true, true); - return this.modules.page.setPage(1); - } else { - //assume data is url, make ajax call to url to get data - return this.modules.ajax.loadData(inPosition, columnsChanged); - } - } - } - } else { - if (data) { - //asume data is already an object - return this.rowManager.setData(data, inPosition, columnsChanged); - } else { - //no data provided, check if ajaxURL is present; - if (this.modExists("ajax") && (this.modules.ajax.getUrl || this.options.ajaxURLGenerator)) { - if (this.options.pagination == "remote" && this.modExists("page", true)) { - this.modules.page.reset(true, true); - return this.modules.page.setPage(1); - } else { - return this.modules.ajax.loadData(inPosition, columnsChanged); - } - } else { - //empty data - return this.rowManager.setData([], inPosition, columnsChanged); - } - } - } - } //clear data + return text || ""; + } //traverse langs object and find localized copy }, { - key: "clearData", - value: function clearData() { - if (this.modExists("ajax")) { - this.modules.ajax.blockActiveRequest(); - } - - this.rowManager.clearData(); - } //get table data array + key: "_getLangElement", + value: function _getLangElement(path, locale) { + var root = this.lang; + path.forEach(function (level) { + var rootPath; - }, { - key: "getData", - value: function getData(active) { - return this.rowManager.getData(active); - } //get table data array count + if (root) { + rootPath = root[level]; - }, { - key: "getDataCount", - value: function getDataCount(active) { - return this.rowManager.getDataCount(active); - } //search for specific row components + if (typeof rootPath != "undefined") { + root = rootPath; + } else { + root = false; + } + } + }); + return root; + } //set update binding }, { - key: "searchRows", - value: function searchRows(field, type, value) { - if (this.modExists("filter", true)) { - return this.modules.filter.search("rows", field, type, value); + key: "bind", + value: function bind(path, callback) { + if (!this.bindings[path]) { + this.bindings[path] = []; } - } //search for specific data - }, { - key: "searchData", - value: function searchData(field, type, value) { - if (this.modExists("filter", true)) { - return this.modules.filter.search("data", field, type, value); - } - } //get table html + this.bindings[path].push(callback); + callback(this.getText(path), this.lang); + } //itterate through bindings and trigger updates }, { - key: "getHtml", - value: function getHtml(visible, style, config) { - if (this.modExists("export", true)) { - return this.modules["export"].getHtml(visible, style, config); - } - } //get print html + key: "_executeBindings", + value: function _executeBindings() { + var _this2 = this; - }, { - key: "print", - value: function print(visible, style, config) { - if (this.modExists("print", true)) { - return this.modules.print.printFullscreen(visible, style, config); - } - } //retrieve Ajax URL + var _loop = function _loop(path) { + _this2.bindings[path].forEach(function (binding) { + binding(_this2.getText(path), _this2.lang); + }); + }; - }, { - key: "getAjaxUrl", - value: function getAjaxUrl() { - if (this.modExists("ajax", true)) { - return this.modules.ajax.getUrl(); + for (var path in this.bindings) { + _loop(path); } - } //replace data, keeping table in position with same sort + } + }]); - }, { - key: "replaceData", - value: function replaceData(data, params, config) { - if (this.modExists("ajax")) { - this.modules.ajax.blockActiveRequest(); - } + return Localize; + }(Module); - return this._setData(data, params, config, true); - } //update table data + Localize.moduleName = "localize"; //load defaults - }, { - key: "updateData", - value: function updateData(data) { - var _this4 = this; + Localize.langs = defaultLangs; - var responses = 0; - return new Promise(function (resolve, reject) { - if (_this4.modExists("ajax")) { - _this4.modules.ajax.blockActiveRequest(); - } + var Comms = /*#__PURE__*/function (_Module) { + _inherits(Comms, _Module); - if (typeof data === "string") { - data = JSON.parse(data); - } + var _super = _createSuper(Comms); - if (data) { - data.forEach(function (item) { - var row = _this4.rowManager.findRow(item[_this4.options.index]); + function Comms(table) { + _classCallCheck(this, Comms); - if (row) { - responses++; - row.updateData(item).then(function () { - responses--; + return _super.call(this, table); + } - if (!responses) { - resolve(); - } - }); - } - }); - } else { - console.warn("Update Error - No data provided"); - reject("Update Error - No data provided"); - } - }); + _createClass(Comms, [{ + key: "initialize", + value: function initialize() { + this.registerTableFunction("tableComms", this.receive.bind(this)); } }, { - key: "addData", - value: function addData(data, pos, index) { - var _this5 = this; - - return new Promise(function (resolve, reject) { - if (_this5.modExists("ajax")) { - _this5.modules.ajax.blockActiveRequest(); - } + key: "getConnections", + value: function getConnections(selectors) { + var _this = this; - if (typeof data === "string") { - data = JSON.parse(data); + var connections = [], + connection; + connection = Tabulator.comms.lookupTable(selectors); + connection.forEach(function (con) { + if (_this.table !== con) { + connections.push(con); } + }); + return connections; + } + }, { + key: "send", + value: function send(selectors, module, action, data) { + var _this2 = this; - if (data) { - _this5.rowManager.addRows(data, pos, index).then(function (rows) { - var output = []; - rows.forEach(function (row) { - output.push(row.getComponent()); - }); - resolve(output); - }); - } else { - console.warn("Update Error - No data provided"); - reject("Update Error - No data provided"); - } + var connections = this.getConnections(selectors); + connections.forEach(function (connection) { + connection.tableComms(_this2.table.element, module, action, data); }); - } //update table data + if (!connections.length && selectors) { + console.warn("Table Connection Error - No tables matching selector found", selectors); + } + } }, { - key: "updateOrAddData", - value: function updateOrAddData(data) { - var _this6 = this; + key: "receive", + value: function receive(table, module, action, data) { + if (this.table.modExists(module)) { + return this.table.modules[module].commsReceived(table, action, data); + } else { + console.warn("Inter-table Comms Error - no such module:", module); + } + } + }]); - var rows = [], - responses = 0; - return new Promise(function (resolve, reject) { - if (_this6.modExists("ajax")) { - _this6.modules.ajax.blockActiveRequest(); - } + return Comms; + }(Module); - if (typeof data === "string") { - data = JSON.parse(data); - } + Comms.moduleName = "comms"; - if (data) { - data.forEach(function (item) { - var row = _this6.rowManager.findRow(item[_this6.options.index]); + var coreModules = /*#__PURE__*/Object.freeze({ + __proto__: null, + LayoutModule: Layout, + LocalizeModule: Localize, + CommsModule: Comms + }); - responses++; + var ModuleBinder = /*#__PURE__*/function () { + function ModuleBinder(tabulator, modules) { + _classCallCheck(this, ModuleBinder); - if (row) { - row.updateData(item).then(function () { - responses--; - rows.push(row.getComponent()); + this.bindStaticFuctionality(tabulator); + this.bindModules(tabulator, coreModules, true); - if (!responses) { - resolve(rows); - } - }); - } else { - _this6.rowManager.addRows(item).then(function (newRows) { - responses--; - rows.push(newRows[0].getComponent()); + if (modules) { + this.bindModules(tabulator, modules); + } + } - if (!responses) { - resolve(rows); - } - }); + _createClass(ModuleBinder, [{ + key: "bindStaticFuctionality", + value: function bindStaticFuctionality(tabulator) { + tabulator.moduleBindings = {}; + + tabulator.extendModule = function (name, property, values) { + if (tabulator.moduleBindings[name]) { + var source = tabulator.moduleBindings[name].prototype[property]; + + if (source) { + if (_typeof(values) == "object") { + for (var key in values) { + source[key] = values[key]; + } + } else { + console.warn("Module Error - Invalid value type, it must be an object"); } - }); + } else { + console.warn("Module Error - property does not exist:", property); + } } else { - console.warn("Update Error - No data provided"); - reject("Update Error - No data provided"); + console.warn("Module Error - module does not exist:", name); } - }); - } //get row object + }; - }, { - key: "getRow", - value: function getRow(index) { - var row = this.rowManager.findRow(index); + tabulator.registerModule = function (modules) { + if (!Array.isArray(modules)) { + modules = [modules]; + } - if (row) { - return row.getComponent(); - } else { - console.warn("Find Error - No matching row found:", index); - return false; - } - } //get row object + modules.forEach(function (mod) { + tabulator.registerModuleBinding(mod); + }); + }; - }, { - key: "getRowFromPosition", - value: function getRowFromPosition(position, active) { - var row = this.rowManager.getRowFromPosition(position, active); + tabulator.registerModuleBinding = function (mod) { + tabulator.moduleBindings[mod.moduleName] = mod; + }; - if (row) { - return row.getComponent(); - } else { - console.warn("Find Error - No matching row found:", position); - return false; + tabulator.findTable = function (query) { + var results = TableRegistry.lookupTable(query, true); + return Array.isArray(results) && !results.length ? false : results; + }; //ensure that module are bound to instantiated function + + + tabulator.prototype.bindModules = function () { + this.modules = {}; + + for (var name in tabulator.moduleBindings) { + var mod = tabulator.moduleBindings[name]; + this.modules[name] = new mod(this); + + if (mod.prototype.moduleCore) { + this.modulesCore[name] = this.modules[name]; + } else { + this.modulesRegular[name] = this.modules[name]; + } + } + }; + } + }, { + key: "bindModules", + value: function bindModules(tabulator, modules, core) { + var mods = Object.values(modules); + + if (core) { + mods.forEach(function (mod) { + mod.prototype.moduleCore = true; + }); } - } //delete row from table - }, { - key: "deleteRow", - value: function deleteRow(index) { - var _this7 = this; + tabulator.registerModule(mods); + } + }]); - return new Promise(function (resolve, reject) { - var count = 0, - successCount = 0, - foundRows = []; + return ModuleBinder; + }(); - function doneCheck() { - count++; + var Tabulator$1 = /*#__PURE__*/function () { + function Tabulator(element, options) { + var _this = this; - if (count == index.length) { - if (successCount) { - this.rowManager.reRenderInPosition(); - resolve(); - } - } - } + _classCallCheck(this, Tabulator); - if (!Array.isArray(index)) { - index = [index]; - } //find matching rows + this.options = {}; + this.columnManager = null; // hold Column Manager + this.rowManager = null; //hold Row Manager - index.forEach(function (item) { - var row = _this7.rowManager.findRow(item, true); + this.footerManager = null; //holder Footer Manager - if (row) { - foundRows.push(row); - } else { - console.warn("Delete Error - No matching row found:", item); - reject("Delete Error - No matching row found"); - doneCheck(); - } - }); //sort rows into correct order to ensure smooth delete from table + this.vdomHoz = null; //holder horizontal virtual dom - foundRows.sort(function (a, b) { - return _this7.rowManager.rows.indexOf(a) > _this7.rowManager.rows.indexOf(b) ? 1 : -1; - }); - foundRows.forEach(function (row) { - row["delete"]().then(function () { - successCount++; - doneCheck(); - })["catch"](function (err) { - doneCheck(); - reject(err); - }); - }); - }); - } //add row to table + this.externalEvents = null; //handle external event messaging - }, { - key: "addRow", - value: function addRow(data, pos, index) { - var _this8 = this; + this.eventBus = null; //handle internal event messaging - return new Promise(function (resolve, reject) { - if (typeof data === "string") { - data = JSON.parse(data); - } + this.interactionMonitor = false; //track user interaction - _this8.rowManager.addRows(data, pos, index).then(function (rows) { - //recalc column calculations if present - if (_this8.modExists("columnCalcs")) { - _this8.modules.columnCalcs.recalc(_this8.rowManager.activeRows); - } + this.browser = ""; //hold current browser type - resolve(rows[0].getComponent()); - }); - }); - } //update a row if it exitsts otherwise create it + this.browserSlow = false; //handle reduced functionality for slower browsers - }, { - key: "updateOrAddRow", - value: function updateOrAddRow(index, data) { - var _this9 = this; + this.browserMobile = false; //check if running on moble, prevent resize cancelling edit on keyboard appearence - return new Promise(function (resolve, reject) { - var row = _this9.rowManager.findRow(index); + this.rtl = false; //check if the table is in RTL mode - if (typeof data === "string") { - data = JSON.parse(data); - } + this.componentFunctionBinder = new ComponentFuctionBinder(this); //bind component functions - if (row) { - row.updateData(data).then(function () { - //recalc column calculations if present - if (_this9.modExists("columnCalcs")) { - _this9.modules.columnCalcs.recalc(_this9.rowManager.activeRows); - } + this.dataLoader = false; //bind component functions - resolve(row.getComponent()); - })["catch"](function (err) { - reject(err); - }); - } else { - row = _this9.rowManager.addRows(data).then(function (rows) { - //recalc column calculations if present - if (_this9.modExists("columnCalcs")) { - _this9.modules.columnCalcs.recalc(_this9.rowManager.activeRows); - } + this.modules = {}; //hold all modules bound to this table - resolve(rows[0].getComponent()); - })["catch"](function (err) { - reject(err); - }); - } - }); - } //update row data + this.modulesCore = {}; //hold core modules bound to this table (for initialization purposes) - }, { - key: "updateRow", - value: function updateRow(index, data) { - var _this10 = this; + this.modulesRegular = {}; //hold regular modules bound to this table (for initialization purposes) - return new Promise(function (resolve, reject) { - var row = _this10.rowManager.findRow(index); + this.optionsList = new OptionsList(this, "table constructor"); - if (typeof data === "string") { - data = JSON.parse(data); - } + if (this.initializeElement(element)) { + this.initialzeCoreSystems(options); //delay table creation to allow event bindings immediatly after the constructor - if (row) { - row.updateData(data).then(function () { - resolve(row.getComponent()); - })["catch"](function (err) { - reject(err); - }); - } else { - console.warn("Update Error - No matching row found:", index); - reject("Update Error - No matching row found"); - } + setTimeout(function () { + _this._create(); }); - } //scroll to row in DOM + } - }, { - key: "scrollToRow", - value: function scrollToRow(index, position, ifVisible) { - var _this11 = this; + TableRegistry.register(this); //register table for inderdevice communication + } - return new Promise(function (resolve, reject) { - var row = _this11.rowManager.findRow(index); + _createClass(Tabulator, [{ + key: "initializeElement", + value: function initializeElement(element) { + if (typeof HTMLElement !== "undefined" && element instanceof HTMLElement) { + this.element = element; + return true; + } else if (typeof element === "string") { + this.element = document.querySelector(element); - if (row) { - _this11.rowManager.scrollToRow(row, position, ifVisible).then(function () { - resolve(); - })["catch"](function (err) { - reject(err); - }); + if (this.element) { + return true; } else { - console.warn("Scroll Error - No matching row found:", index); - reject("Scroll Error - No matching row found"); + console.error("Tabulator Creation Error - no element found matching selector: ", element); + return false; } - }); - } - }, { - key: "moveRow", - value: function moveRow(from, to, after) { - var fromRow = this.rowManager.findRow(from); - - if (fromRow) { - fromRow.moveToRow(to, after); } else { - console.warn("Move Error - No matching row found:", from); + console.error("Tabulator Creation Error - Invalid element provided:", element); + return false; } } }, { - key: "getRows", - value: function getRows(active) { - return this.rowManager.getComponents(active); - } //get position of row in table + key: "initialzeCoreSystems", + value: function initialzeCoreSystems(options) { + this.columnManager = new ColumnManager(this); + this.rowManager = new RowManager(this); + this.footerManager = new FooterManager(this); + this.dataLoader = new DataLoader(this); + this.bindModules(); + this.options = this.optionsList.generate(Tabulator.defaultOptions, options); - }, { - key: "getRowPosition", - value: function getRowPosition(index, active) { - var row = this.rowManager.findRow(index); + this._clearObjectPointers(); - if (row) { - return this.rowManager.getRowPosition(row, active); - } else { - console.warn("Position Error - No matching row found:", index); - return false; - } - } //copy table data to clipboard + this._mapDepricatedFunctionality(); + this.externalEvents = new ExternalEventBus(this.options, this.options.debugEventsExternal); + this.eventBus = new InternalEventBus(this.options.debugEventsInternal); + this.interactionMonitor = new InteractionManager(this); + this.dataLoader.initialize(); + this.columnManager.initialize(); + this.rowManager.initialize(); + this.footerManager.initialize(); + } }, { - key: "copyToClipboard", - value: function copyToClipboard(selector) { - if (this.modExists("clipboard", true)) { - this.modules.clipboard.copy(selector); + key: "rtlCheck", + value: function rtlCheck() { + var style = window.getComputedStyle(this.element); + + switch (this.options.textDirection) { + case "auto": + if (style.direction !== "rtl") { + break; + } + + case "rtl": + this.element.classList.add("tabulator-rtl"); + this.rtl = true; + break; + + case "ltr": + this.element.classList.add("tabulator-ltr"); + + default: + this.rtl = false; } - } /////////////// Column Functions /////////////// + } //convert depricated functionality to new functions }, { - key: "setColumns", - value: function setColumns(definition) { - this.columnManager.setColumns(definition); - } - }, { - key: "getColumns", - value: function getColumns(structured) { - return this.columnManager.getComponents(structured); + key: "_mapDepricatedFunctionality", + value: function _mapDepricatedFunctionality() {//all previously deprecated functionality removed in the 5.0 release } }, { - key: "getColumn", - value: function getColumn(field) { - var col = this.columnManager.findColumn(field); + key: "_clearSelection", + value: function _clearSelection() { + this.element.classList.add("tabulator-block-select"); - if (col) { - return col.getComponent(); - } else { - console.warn("Find Error - No matching column found:", field); - return false; + if (window.getSelection) { + if (window.getSelection().empty) { + // Chrome + window.getSelection().empty(); + } else if (window.getSelection().removeAllRanges) { + // Firefox + window.getSelection().removeAllRanges(); + } + } else if (document.selection) { + // IE? + document.selection.empty(); } - } - }, { - key: "getColumnDefinitions", - value: function getColumnDefinitions() { - return this.columnManager.getDefinitionTree(); - } + + this.element.classList.remove("tabulator-block-select"); + } //concreate table + }, { - key: "getColumnLayout", - value: function getColumnLayout() { - if (this.modExists("persistence", true)) { - return this.modules.persistence.parseColumns(this.columnManager.getColumns()); - } - } + key: "_create", + value: function _create() { + this.externalEvents.dispatch("tableBuilding"); + this.eventBus.dispatch("table-building"); + this.rtlCheck(); + + this._buildElement(); + + this._loadInitialData(); + } //clear pointers to objects in default config object + }, { - key: "setColumnLayout", - value: function setColumnLayout(layout) { - if (this.modExists("persistence", true)) { - this.columnManager.setColumns(this.modules.persistence.mergeDefinition(this.options.columns, layout)); - return true; + key: "_clearObjectPointers", + value: function _clearObjectPointers() { + this.options.columns = this.options.columns.slice(0); + + if (this.options.data && !this.options.reactiveData) { + this.options.data = this.options.data.slice(0); } + } //build tabulator element - return false; - } }, { - key: "showColumn", - value: function showColumn(field) { - var column = this.columnManager.findColumn(field); + key: "_buildElement", + value: function _buildElement() { + var element = this.element, + options = this.options; + element.classList.add("tabulator"); + element.setAttribute("role", "grid"); //empty element - if (column) { - column.show(); + while (element.firstChild) { + element.removeChild(element.firstChild); + } //set table height - if (this.options.responsiveLayout && this.modExists("responsiveLayout", true)) { - this.modules.responsiveLayout.update(); - } - } else { - console.warn("Column Show Error - No matching column found:", field); - return false; - } - } - }, { - key: "hideColumn", - value: function hideColumn(field) { - var column = this.columnManager.findColumn(field); - if (column) { - column.hide(); + if (options.height) { + options.height = isNaN(options.height) ? options.height : options.height + "px"; + element.style.height = options.height; + } //set table min height - if (this.options.responsiveLayout && this.modExists("responsiveLayout", true)) { - this.modules.responsiveLayout.update(); - } - } else { - console.warn("Column Hide Error - No matching column found:", field); - return false; - } - } - }, { - key: "toggleColumn", - value: function toggleColumn(field) { - var column = this.columnManager.findColumn(field); - if (column) { - if (column.visible) { - column.hide(); - } else { - column.show(); - } - } else { - console.warn("Column Visibility Toggle Error - No matching column found:", field); - return false; + if (options.minHeight !== false) { + options.minHeight = isNaN(options.minHeight) ? options.minHeight : options.minHeight + "px"; + element.style.minHeight = options.minHeight; + } //set table maxHeight + + + if (options.maxHeight !== false) { + options.maxHeight = isNaN(options.maxHeight) ? options.maxHeight : options.maxHeight + "px"; + element.style.maxHeight = options.maxHeight; } - } - }, { - key: "addColumn", - value: function addColumn(definition, before, field) { - var _this12 = this; - return new Promise(function (resolve, reject) { - var column = _this12.columnManager.findColumn(field); + this.columnManager.initialize(); + this.rowManager.initialize(); - _this12.columnManager.addColumn(definition, before, column).then(function (column) { - resolve(column.getComponent()); - })["catch"](function (err) { - reject(err); - }); - }); - } - }, { - key: "deleteColumn", - value: function deleteColumn(field) { - var _this13 = this; + this._detectBrowser(); //initialize core modules - return new Promise(function (resolve, reject) { - var column = _this13.columnManager.findColumn(field); - if (column) { - column["delete"]().then(function () { - resolve(); - })["catch"](function (err) { - reject(err); - }); - } else { - console.warn("Column Delete Error - No matching column found:", field); - reject(); - } - }); - } - }, { - key: "updateColumnDefinition", - value: function updateColumnDefinition(field, definition) { - var _this14 = this; + for (var key in this.modulesCore) { + var mod = this.modulesCore[key]; + mod.initialize(); + } //configure placeholder element - return new Promise(function (resolve, reject) { - var column = _this14.columnManager.findColumn(field); - if (column) { - column.updateDefinition(definition).then(function (col) { - resolve(col); - })["catch"](function (err) { - reject(err); - }); - } else { - console.warn("Column Update Error - No matching column found:", field); - reject(); - } - }); - } - }, { - key: "moveColumn", - value: function moveColumn(from, to, after) { - var fromColumn = this.columnManager.findColumn(from); - var toColumn = this.columnManager.findColumn(to); + if (typeof options.placeholder == "string") { + var el = document.createElement("div"); + el.classList.add("tabulator-placeholder"); + var span = document.createElement("span"); + span.innerHTML = options.placeholder; + el.appendChild(span); + options.placeholder = el; + } //build table elements - if (fromColumn) { - if (toColumn) { - this.columnManager.moveColumn(fromColumn, toColumn, after); - } else { - console.warn("Move Error - No matching column found:", toColumn); - } - } else { - console.warn("Move Error - No matching column found:", from); + + element.appendChild(this.columnManager.getElement()); + element.appendChild(this.rowManager.getElement()); + + if (options.footerElement) { + this.footerManager.activate(); } - } //scroll to column in DOM - }, { - key: "scrollToColumn", - value: function scrollToColumn(field, position, ifVisible) { - var _this15 = this; + if (options.autoColumns && this.options.data) { + this.columnManager.generateColumnsFromRowData(this.options.data); + } //initialize regular modules - return new Promise(function (resolve, reject) { - var column = _this15.columnManager.findColumn(field); - if (column) { - _this15.columnManager.scrollToColumn(column, position, ifVisible).then(function () { - resolve(); - })["catch"](function (err) { - reject(err); - }); - } else { - console.warn("Scroll Error - No matching column found:", field); - reject("Scroll Error - No matching column found"); - } - }); - } //////////// Localization Functions //////////// + for (var _key in this.modulesRegular) { + var _mod = this.modulesRegular[_key]; - }, { - key: "setLocale", - value: function setLocale(locale) { - this.modules.localize.setLocale(locale); - } - }, { - key: "getLocale", - value: function getLocale() { - return this.modules.localize.getLocale(); + _mod.initialize(); + } + + this.columnManager.setColumns(options.columns); + this.eventBus.dispatch("table-built"); + this.externalEvents.dispatch("tableBuilt"); } }, { - key: "getLang", - value: function getLang(locale) { - return this.modules.localize.getLang(locale); - } //////////// General Public Functions //////////// - //redraw list without updating data + key: "_loadInitialData", + value: function _loadInitialData() { + this.dataLoader.load(this.options.data); + } //deconstructor }, { - key: "redraw", - value: function redraw(force) { - this.columnManager.redraw(force); - this.rowManager.redraw(force); + key: "destroy", + value: function destroy() { + var element = this.element; + TableRegistry.deregister(this); //deregister table from inderdevice communication + + this.eventBus.dispatch("table-destroy"); //clear row data + + this.rowManager.rows.forEach(function (row) { + row.wipe(); + }); + this.rowManager.rows = []; + this.rowManager.activeRows = []; + this.rowManager.displayRows = []; //clear DOM + + while (element.firstChild) { + element.removeChild(element.firstChild); + } + + element.classList.remove("tabulator"); } }, { - key: "setHeight", - value: function setHeight(height) { - if (this.rowManager.renderMode !== "classic") { - this.options.height = isNaN(height) ? height : height + "px"; - this.element.style.height = this.options.height; - this.rowManager.setRenderMode(); - this.rowManager.redraw(); + key: "_detectBrowser", + value: function _detectBrowser() { + var ua = navigator.userAgent || navigator.vendor || window.opera; + + if (ua.indexOf("Trident") > -1) { + this.browser = "ie"; + this.browserSlow = true; + } else if (ua.indexOf("Edge") > -1) { + this.browser = "edge"; + this.browserSlow = true; + } else if (ua.indexOf("Firefox") > -1) { + this.browser = "firefox"; + this.browserSlow = false; } else { - console.warn("setHeight function is not available in classic render mode"); + this.browser = "other"; + this.browserSlow = false; } - } ///////////////////// Sorting //////////////////// + + this.browserMobile = /(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i.test(ua) || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(ua.substr(0, 4)); + } ////////////////// Data Handling ////////////////// + //block table redrawing }, { - key: "setSort", - value: function setSort(sortList, dir) { - if (this.modExists("sort", true)) { - this.modules.sort.setSort(sortList, dir); - this.rowManager.sorterRefresh(); - } - } + key: "blockRedraw", + value: function blockRedraw() { + return this.rowManager.blockRedraw(); + } //restore table redrawing + }, { - key: "getSorters", - value: function getSorters() { - if (this.modExists("sort", true)) { - return this.modules.sort.getSort(); - } - } + key: "restoreRedraw", + value: function restoreRedraw() { + return this.rowManager.restoreRedraw(); + } //local data from local file + }, { - key: "clearSort", - value: function clearSort() { - if (this.modExists("sort", true)) { - this.modules.sort.clear(); - this.rowManager.sorterRefresh(); - } - } ///////////////////// Filtering //////////////////// - //set standard filters + key: "setDataFromLocalFile", + value: function setDataFromLocalFile(extensions) { + var _this2 = this; + + return new Promise(function (resolve, reject) { + var input = document.createElement("input"); + input.type = "file"; + input.accept = extensions || ".json,application/json"; + input.addEventListener("change", function (e) { + var file = input.files[0], + reader = new FileReader(), + data; + reader.readAsText(file); + + reader.onload = function (e) { + try { + data = JSON.parse(reader.result); + } catch (e) { + console.warn("File Load Error - File contents is invalid JSON", e); + reject(e); + return; + } + + _this2.setData(data).then(function (data) { + resolve(data); + })["catch"](function (err) { + resolve(err); + }); + }; + + reader.onerror = function (e) { + console.warn("File Load Error - Unable to read file"); + reject(); + }; + }); + input.click(); + }); + } //load data }, { - key: "setFilter", - value: function setFilter(field, type, value, params) { - if (this.modExists("filter", true)) { - this.modules.filter.setFilter(field, type, value, params); - this.rowManager.filterRefresh(); - } - } //set standard filters + key: "setData", + value: function setData(data, params, config) { + return this.dataLoader.load(data, params, config, false); + } //clear data }, { - key: "refreshFilter", - value: function refreshFilter() { - if (this.modExists("filter", true)) { - this.rowManager.filterRefresh(); - } - } //add filter to array + key: "clearData", + value: function clearData() { + this.dataLoader.blockActiveLoad(); + this.rowManager.clearData(); + } //get table data array }, { - key: "addFilter", - value: function addFilter(field, type, value, params) { - if (this.modExists("filter", true)) { - this.modules.filter.addFilter(field, type, value, params); - this.rowManager.filterRefresh(); - } - } //get all filters + key: "getData", + value: function getData(active) { + return this.rowManager.getData(active); + } //get table data array count }, { - key: "getFilters", - value: function getFilters(all) { - if (this.modExists("filter", true)) { - return this.modules.filter.getFilters(all); - } - } + key: "getDataCount", + value: function getDataCount(active) { + return this.rowManager.getDataCount(active); + } //replace data, keeping table in position with same sort + }, { - key: "setHeaderFilterFocus", - value: function setHeaderFilterFocus(field) { - if (this.modExists("filter", true)) { - var column = this.columnManager.findColumn(field); + key: "replaceData", + value: function replaceData(data, params, config) { + return this.dataLoader.load(data, params, config, true, true); + } //update table data - if (column) { - this.modules.filter.setHeaderFilterFocus(column); - } else { - console.warn("Column Filter Focus Error - No matching column found:", field); - return false; - } - } - } }, { - key: "getHeaderFilterValue", - value: function getHeaderFilterValue(field) { - if (this.modExists("filter", true)) { - var column = this.columnManager.findColumn(field); + key: "updateData", + value: function updateData(data) { + var _this3 = this; - if (column) { - return this.modules.filter.getHeaderFilterValue(column); - } else { - console.warn("Column Filter Error - No matching column found:", field); + var responses = 0; + return new Promise(function (resolve, reject) { + _this3.dataLoader.blockActiveLoad(); + + if (typeof data === "string") { + data = JSON.parse(data); } - } - } - }, { - key: "setHeaderFilterValue", - value: function setHeaderFilterValue(field, value) { - if (this.modExists("filter", true)) { - var column = this.columnManager.findColumn(field); - if (column) { - this.modules.filter.setHeaderFilterValue(column, value); + if (data) { + data.forEach(function (item) { + var row = _this3.rowManager.findRow(item[_this3.options.index]); + + if (row) { + responses++; + row.updateData(item).then(function () { + responses--; + + if (!responses) { + resolve(); + } + }); + } + }); } else { - console.warn("Column Filter Error - No matching column found:", field); - return false; + console.warn("Update Error - No data provided"); + reject("Update Error - No data provided"); } - } + }); } }, { - key: "getHeaderFilters", - value: function getHeaderFilters() { - if (this.modExists("filter", true)) { - return this.modules.filter.getHeaderFilters(); - } - } //remove filter from array + key: "addData", + value: function addData(data, pos, index) { + var _this4 = this; - }, { - key: "removeFilter", - value: function removeFilter(field, type, value) { - if (this.modExists("filter", true)) { - this.modules.filter.removeFilter(field, type, value); - this.rowManager.filterRefresh(); - } - } //clear filters + return new Promise(function (resolve, reject) { + _this4.dataLoader.blockActiveLoad(); - }, { - key: "clearFilter", - value: function clearFilter(all) { - if (this.modExists("filter", true)) { - this.modules.filter.clearFilter(all); - this.rowManager.filterRefresh(); - } - } //clear header filters + if (typeof data === "string") { + data = JSON.parse(data); + } - }, { - key: "clearHeaderFilter", - value: function clearHeaderFilter() { - if (this.modExists("filter", true)) { - this.modules.filter.clearHeaderFilter(); - this.rowManager.filterRefresh(); - } - } ///////////////////// select //////////////////// + if (data) { + _this4.rowManager.addRows(data, pos, index).then(function (rows) { + var output = []; + rows.forEach(function (row) { + output.push(row.getComponent()); + }); + resolve(output); + }); + } else { + console.warn("Update Error - No data provided"); + reject("Update Error - No data provided"); + } + }); + } //update table data }, { - key: "selectRow", - value: function selectRow(rows) { - if (this.modExists("selectRow", true)) { - this.modules.selectRow.selectRows(rows); - } - } - }, { - key: "deselectRow", - value: function deselectRow(rows) { - if (this.modExists("selectRow", true)) { - this.modules.selectRow.deselectRows(rows); - } - } - }, { - key: "toggleSelectRow", - value: function toggleSelectRow(row) { - if (this.modExists("selectRow", true)) { - this.modules.selectRow.toggleRow(row); - } - } - }, { - key: "getSelectedRows", - value: function getSelectedRows() { - if (this.modExists("selectRow", true)) { - return this.modules.selectRow.getSelectedRows(); - } - } - }, { - key: "getSelectedData", - value: function getSelectedData() { - if (this.modExists("selectRow", true)) { - return this.modules.selectRow.getSelectedData(); - } - } ///////////////////// validation //////////////////// + key: "updateOrAddData", + value: function updateOrAddData(data) { + var _this5 = this; - }, { - key: "getInvalidCells", - value: function getInvalidCells() { - if (this.modExists("validate", true)) { - return this.modules.validate.getInvalidCells(); - } - } - }, { - key: "clearCellValidation", - value: function clearCellValidation(cells) { - var _this16 = this; + var rows = [], + responses = 0; + return new Promise(function (resolve, reject) { + _this5.dataLoader.blockActiveLoad(); - if (this.modExists("validate", true)) { - if (!cells) { - cells = this.modules.validate.getInvalidCells(); + if (typeof data === "string") { + data = JSON.parse(data); } - if (!Array.isArray(cells)) { - cells = [cells]; - } + if (data) { + data.forEach(function (item) { + var row = _this5.rowManager.findRow(item[_this5.options.index]); - cells.forEach(function (cell) { - _this16.modules.validate.clearValidation(cell._getSelf()); - }); - } - } - }, { - key: "validate", - value: function validate(cells) { - var output = []; //clear row data + responses++; - this.rowManager.rows.forEach(function (row) { - var valid = row.validate(); + if (row) { + row.updateData(item).then(function () { + responses--; + rows.push(row.getComponent()); - if (valid !== true) { - output = output.concat(valid); + if (!responses) { + resolve(rows); + } + }); + } else { + _this5.rowManager.addRows(item).then(function (newRows) { + responses--; + rows.push(newRows[0].getComponent()); + + if (!responses) { + resolve(rows); + } + }); + } + }); + } else { + console.warn("Update Error - No data provided"); + reject("Update Error - No data provided"); } }); - return output.length ? output : true; - } //////////// Pagination Functions //////////// + } //get row object }, { - key: "setMaxPage", - value: function setMaxPage(max) { - if (this.options.pagination && this.modExists("page")) { - this.modules.page.setMaxPage(max); + key: "getRow", + value: function getRow(index) { + var row = this.rowManager.findRow(index); + + if (row) { + return row.getComponent(); } else { + console.warn("Find Error - No matching row found:", index); return false; } - } + } //get row object + }, { - key: "setPage", - value: function setPage(page) { - if (this.options.pagination && this.modExists("page")) { - return this.modules.page.setPage(page); + key: "getRowFromPosition", + value: function getRowFromPosition(position, active) { + var row = this.rowManager.getRowFromPosition(position, active); + + if (row) { + return row.getComponent(); } else { - return new Promise(function (resolve, reject) { - reject(); - }); + console.warn("Find Error - No matching row found:", position); + return false; } - } + } //delete row from table + }, { - key: "setPageToRow", - value: function setPageToRow(row) { - var _this17 = this; + key: "deleteRow", + value: function deleteRow(index) { + var _this6 = this; + + return new Promise(function (resolve, reject) { + var count = 0, + successCount = 0, + foundRows = []; + + function doneCheck() { + count++; + + if (count == index.length) { + if (successCount) { + this.rowManager.reRenderInPosition(); + resolve(); + } + } + } + + if (!Array.isArray(index)) { + index = [index]; + } //find matching rows + + + index.forEach(function (item) { + var row = _this6.rowManager.findRow(item, true); + + if (row) { + foundRows.push(row); + } else { + console.warn("Delete Error - No matching row found:", item); + reject("Delete Error - No matching row found"); + doneCheck(); + } + }); //sort rows into correct order to ensure smooth delete from table + + foundRows.sort(function (a, b) { + return _this6.rowManager.rows.indexOf(a) > _this6.rowManager.rows.indexOf(b) ? 1 : -1; + }); + foundRows.forEach(function (row) { + row["delete"]().then(function () { + successCount++; + doneCheck(); + })["catch"](function (err) { + doneCheck(); + reject(err); + }); + }); + }); + } //add row to table - return new Promise(function (resolve, reject) { - if (_this17.options.pagination && _this17.modExists("page")) { - row = _this17.rowManager.findRow(row); + }, { + key: "addRow", + value: function addRow(data, pos, index) { + if (typeof data === "string") { + data = JSON.parse(data); + } - if (row) { - _this17.modules.page.setPageToRow(row).then(function () { - resolve(); - })["catch"](function () { - reject(); - }); - } else { - reject(); - } - } else { - reject(); - } + return this.rowManager.addRows(data, pos, index).then(function (rows) { + return rows[0].getComponent(); }); - } + } //update a row if it exitsts otherwise create it + }, { - key: "setPageSize", - value: function setPageSize(size) { - if (this.options.pagination && this.modExists("page")) { - this.modules.page.setPageSize(size); - this.modules.page.setPage(1).then(function () {})["catch"](function () {}); + key: "updateOrAddRow", + value: function updateOrAddRow(index, data) { + var row = this.rowManager.findRow(index); + + if (typeof data === "string") { + data = JSON.parse(data); + } + + if (row) { + return row.updateData(data).then(function () { + return row.getComponent(); + }); } else { - return false; + return this.rowManager.addRows(data).then(function (rows) { + return rows[0].getComponent(); + }); } - } + } //update row data + }, { - key: "getPageSize", - value: function getPageSize() { - if (this.options.pagination && this.modExists("page", true)) { - return this.modules.page.getPageSize(); + key: "updateRow", + value: function updateRow(index, data) { + var row = this.rowManager.findRow(index); + + if (typeof data === "string") { + data = JSON.parse(data); } - } - }, { - key: "previousPage", - value: function previousPage() { - if (this.options.pagination && this.modExists("page")) { - this.modules.page.previousPage(); + + if (row) { + return row.updateData(data).then(function () { + resolve(row.getComponent()); + }); } else { - return false; + console.warn("Update Error - No matching row found:", index); + return Promise.reject("Update Error - No matching row found"); } - } + } //scroll to row in DOM + }, { - key: "nextPage", - value: function nextPage() { - if (this.options.pagination && this.modExists("page")) { - this.modules.page.nextPage(); + key: "scrollToRow", + value: function scrollToRow(index, position, ifVisible) { + var row = this.rowManager.findRow(index); + + if (row) { + return this.rowManager.scrollToRow(row, position, ifVisible); } else { - return false; + console.warn("Scroll Error - No matching row found:", index); + return Promise.reject("Scroll Error - No matching row found"); } } }, { - key: "getPage", - value: function getPage() { - if (this.options.pagination && this.modExists("page")) { - return this.modules.page.getPage(); + key: "moveRow", + value: function moveRow(from, to, after) { + var fromRow = this.rowManager.findRow(from); + + if (fromRow) { + fromRow.moveToRow(to, after); } else { - return false; + console.warn("Move Error - No matching row found:", from); } } }, { - key: "getPageMax", - value: function getPageMax() { - if (this.options.pagination && this.modExists("page")) { - return this.modules.page.getPageMax(); - } else { - return false; - } - } ///////////////// Grouping Functions /////////////// + key: "getRows", + value: function getRows(active) { + return this.rowManager.getComponents(active); + } //get position of row in table }, { - key: "setGroupBy", - value: function setGroupBy(groups) { - if (this.modExists("groupRows", true)) { - this.options.groupBy = groups; - this.modules.groupRows.initialize(); - this.rowManager.refreshActiveData("display"); + key: "getRowPosition", + value: function getRowPosition(index, active) { + var row = this.rowManager.findRow(index); - if (this.options.persistence && this.modExists("persistence", true) && this.modules.persistence.config.group) { - this.modules.persistence.save("group"); - } + if (row) { + return this.rowManager.getRowPosition(row, active); } else { + console.warn("Position Error - No matching row found:", index); return false; } + } /////////////// Column Functions /////////////// + + }, { + key: "setColumns", + value: function setColumns(definition) { + this.columnManager.setColumns(definition); } }, { - key: "setGroupValues", - value: function setGroupValues(groupValues) { - if (this.modExists("groupRows", true)) { - this.options.groupValues = groupValues; - this.modules.groupRows.initialize(); - this.rowManager.refreshActiveData("display"); - - if (this.options.persistence && this.modExists("persistence", true) && this.modules.persistence.config.group) { - this.modules.persistence.save("group"); - } - } else { - return false; - } + key: "getColumns", + value: function getColumns(structured) { + return this.columnManager.getComponents(structured); } }, { - key: "setGroupStartOpen", - value: function setGroupStartOpen(values) { - if (this.modExists("groupRows", true)) { - this.options.groupStartOpen = values; - this.modules.groupRows.initialize(); - - if (this.options.groupBy) { - this.rowManager.refreshActiveData("group"); + key: "getColumn", + value: function getColumn(field) { + var col = this.columnManager.findColumn(field); - if (this.options.persistence && this.modExists("persistence", true) && this.modules.persistence.config.group) { - this.modules.persistence.save("group"); - } - } else { - console.warn("Grouping Update - cant refresh view, no groups have been set"); - } + if (col) { + return col.getComponent(); } else { + console.warn("Find Error - No matching column found:", field); return false; } } }, { - key: "setGroupHeader", - value: function setGroupHeader(values) { - if (this.modExists("groupRows", true)) { - this.options.groupHeader = values; - this.modules.groupRows.initialize(); - - if (this.options.groupBy) { - this.rowManager.refreshActiveData("group"); - - if (this.options.persistence && this.modExists("persistence", true) && this.modules.persistence.config.group) { - this.modules.persistence.save("group"); - } - } else { - console.warn("Grouping Update - cant refresh view, no groups have been set"); - } - } else { - return false; - } + key: "getColumnDefinitions", + value: function getColumnDefinitions() { + return this.columnManager.getDefinitionTree(); } }, { - key: "getGroups", - value: function getGroups(values) { - if (this.modExists("groupRows", true)) { - return this.modules.groupRows.getGroups(true); + key: "showColumn", + value: function showColumn(field) { + var column = this.columnManager.findColumn(field); + + if (column) { + column.show(); } else { + console.warn("Column Show Error - No matching column found:", field); return false; } - } // get grouped table data in the same format as getData() - - }, { - key: "getGroupedData", - value: function getGroupedData() { - if (this.modExists("groupRows", true)) { - return this.options.groupBy ? this.modules.groupRows.getGroupedData() : this.getData(); - } - } - }, { - key: "getEditedCells", - value: function getEditedCells() { - if (this.modExists("edit", true)) { - return this.modules.edit.getEditedCells(); - } } }, { - key: "clearCellEdited", - value: function clearCellEdited(cells) { - var _this18 = this; - - if (this.modExists("edit", true)) { - if (!cells) { - cells = this.modules.edit.getEditedCells(); - } - - if (!Array.isArray(cells)) { - cells = [cells]; - } - - cells.forEach(function (cell) { - _this18.modules.edit.clearEdited(cell._getSelf()); - }); - } - } ///////////////// Column Calculation Functions /////////////// + key: "hideColumn", + value: function hideColumn(field) { + var column = this.columnManager.findColumn(field); - }, { - key: "getCalcResults", - value: function getCalcResults() { - if (this.modExists("columnCalcs", true)) { - return this.modules.columnCalcs.getResults(); + if (column) { + column.hide(); } else { + console.warn("Column Hide Error - No matching column found:", field); return false; } } }, { - key: "recalc", - value: function recalc() { - if (this.modExists("columnCalcs", true)) { - this.modules.columnCalcs.recalcAll(this.rowManager.activeRows); - } - } /////////////// Navigation Management ////////////// - - }, { - key: "navigatePrev", - value: function navigatePrev() { - var cell = false; - - if (this.modExists("edit", true)) { - cell = this.modules.edit.currentCell; + key: "toggleColumn", + value: function toggleColumn(field) { + var column = this.columnManager.findColumn(field); - if (cell) { - return cell.nav().prev(); + if (column) { + if (column.visible) { + column.hide(); + } else { + column.show(); } + } else { + console.warn("Column Visibility Toggle Error - No matching column found:", field); + return false; } - - return false; } }, { - key: "navigateNext", - value: function navigateNext() { - var cell = false; - - if (this.modExists("edit", true)) { - cell = this.modules.edit.currentCell; - - if (cell) { - return cell.nav().next(); - } - } - - return false; + key: "addColumn", + value: function addColumn(definition, before, field) { + var column = this.columnManager.findColumn(field); + return this.columnManager.addColumn(definition, before, column).then(function (column) { + returncolumn.getComponent(); + }); } }, { - key: "navigateLeft", - value: function navigateLeft() { - var cell = false; - - if (this.modExists("edit", true)) { - cell = this.modules.edit.currentCell; + key: "deleteColumn", + value: function deleteColumn(field) { + var column = this.columnManager.findColumn(field); - if (cell) { - e.preventDefault(); - return cell.nav().left(); - } + if (column) { + return column["delete"](); + } else { + console.warn("Column Delete Error - No matching column found:", field); + return Promise.reject(); } - - return false; } }, { - key: "navigateRight", - value: function navigateRight() { - var cell = false; - - if (this.modExists("edit", true)) { - cell = this.modules.edit.currentCell; + key: "updateColumnDefinition", + value: function updateColumnDefinition(field, definition) { + var column = this.columnManager.findColumn(field); - if (cell) { - e.preventDefault(); - return cell.nav().right(); - } + if (column) { + return column.updateDefinition(definition); + } else { + console.warn("Column Update Error - No matching column found:", field); + return Promise.reject(); } - - return false; } }, { - key: "navigateUp", - value: function navigateUp() { - var cell = false; - - if (this.modExists("edit", true)) { - cell = this.modules.edit.currentCell; + key: "moveColumn", + value: function moveColumn(from, to, after) { + var fromColumn = this.columnManager.findColumn(from); + var toColumn = this.columnManager.findColumn(to); - if (cell) { - e.preventDefault(); - return cell.nav().up(); + if (fromColumn) { + if (toColumn) { + this.columnManager.moveColumn(fromColumn, toColumn, after); + } else { + console.warn("Move Error - No matching column found:", toColumn); } + } else { + console.warn("Move Error - No matching column found:", from); } + } //scroll to column in DOM - return false; - } }, { - key: "navigateDown", - value: function navigateDown() { - var cell = false; + key: "scrollToColumn", + value: function scrollToColumn(field, position, ifVisible) { + var _this7 = this; - if (this.modExists("edit", true)) { - cell = this.modules.edit.currentCell; + return new Promise(function (resolve, reject) { + var column = _this7.columnManager.findColumn(field); - if (cell) { - e.preventDefault(); - return cell.nav().down(); + if (column) { + return _this7.columnManager.scrollToColumn(column, position, ifVisible); + } else { + console.warn("Scroll Error - No matching column found:", field); + return Promise.reject("Scroll Error - No matching column found"); } - } - - return false; - } /////////////// History Management ////////////// + }); + } //////////// General Public Functions //////////// + //redraw list without updating data }, { - key: "undo", - value: function undo() { - if (this.options.history && this.modExists("history", true)) { - return this.modules.history.undo(); - } else { - return false; - } + key: "redraw", + value: function redraw(force) { + this.columnManager.redraw(force); + this.rowManager.redraw(force); } }, { - key: "redo", - value: function redo() { - if (this.options.history && this.modExists("history", true)) { - return this.modules.history.redo(); - } else { - return false; - } - } + key: "setHeight", + value: function setHeight(height) { + this.options.height = isNaN(height) ? height : height + "px"; + this.element.style.height = this.options.height; + this.rowManager.initializeRenderer(); + this.rowManager.redraw(); + } //////////////////// Event Bus /////////////////// + }, { - key: "getHistoryUndoSize", - value: function getHistoryUndoSize() { - if (this.options.history && this.modExists("history", true)) { - return this.modules.history.getHistoryUndoSize(); - } else { - return false; - } + key: "on", + value: function on(key, callback) { + this.externalEvents.subscribe(key, callback); } }, { - key: "getHistoryRedoSize", - value: function getHistoryRedoSize() { - if (this.options.history && this.modExists("history", true)) { - return this.modules.history.getHistoryRedoSize(); - } else { - return false; - } + key: "off", + value: function off(key, callback) { + this.externalEvents.unsubscribe(key, callback); } }, { - key: "clearHistory", - value: function clearHistory() { - if (this.options.history && this.modExists("history", true)) { - return this.modules.history.clear(); - } else { - return false; - } - } /////////////// Download Management ////////////// + key: "dispatchEvent", + value: function dispatchEvent() { + var _this$externalEvents; - }, { - key: "download", - value: function download(type, filename, options, active) { - if (this.modExists("download", true)) { - this.modules.download.download(type, filename, options, active); - } - } - }, { - key: "downloadToTab", - value: function downloadToTab(type, filename, options, active) { - if (this.modExists("download", true)) { - this.modules.download.download(type, filename, options, active, true); - } - } /////////// Inter Table Communications /////////// + var args = Array.from(arguments), + key = args.shift(); - }, { - key: "tableComms", - value: function tableComms(table, module, action, data) { - this.modules.comms.receive(table, module, action, data); + (_this$externalEvents = this.externalEvents).dispatch.apply(_this$externalEvents, arguments); } ////////////// Extension Management ////////////// }, { @@ -9619,6 +8534,17 @@ return false; } } + }, { + key: "module", + value: function module(key) { + var mod = this.modules[key]; + + if (!mod) { + console.error("Tabulator module not installed: " + key); + } + + return mod; + } }]); return Tabulator; @@ -9644,11 +8570,41 @@ _this = _super.call(this, table); _this.allowedTypes = ["", "data", "download", "clipboard", "print", "htmlOutput"]; //list of accessor types - return _this; - } //initialize column accessor + _this.registerColumnOption("accessor"); + _this.registerColumnOption("accessorParams"); + + _this.registerColumnOption("accessorData"); + + _this.registerColumnOption("accessorDataParams"); + + _this.registerColumnOption("accessorDownload"); + + _this.registerColumnOption("accessorDownloadParams"); + + _this.registerColumnOption("accessorClipboard"); + + _this.registerColumnOption("accessorClipboardParams"); + + _this.registerColumnOption("accessorPrint"); + + _this.registerColumnOption("accessorPrintParams"); + + _this.registerColumnOption("accessorHtmlOutput"); + + _this.registerColumnOption("accessorHtmlOutputParams"); + + return _this; + } _createClass(Accessor, [{ + key: "initialize", + value: function initialize() { + this.subscribe("column-layout", this.initializeColumn.bind(this)); + this.subscribe("row-data-retrieve", this.transformRow.bind(this)); + } //initialize column accessor + + }, { key: "initializeColumn", value: function initializeColumn(column) { var match = false, @@ -9703,7 +8659,7 @@ var key = "accessor" + (type.charAt(0).toUpperCase() + type.slice(1)), rowComponent = row.getComponent(); //clone data object with deep copy to isolate internal data from returned result - var data = Helpers.deepClone(row.data || {}); + var data = Helpers$1.deepClone(row.data || {}); this.table.columnManager.traverse(function (column) { var value, accessor, params, colCompnent; @@ -9736,12 +8692,43 @@ method: "GET" }; + function generateParamsList(data, prefix) { + var output = []; + prefix = prefix || ""; + + if (Array.isArray(data)) { + data.forEach(function (item, i) { + output = output.concat(generateParamsList(item, prefix ? prefix + "[" + i + "]" : i)); + }); + } else if (_typeof(data) === "object") { + for (var key in data) { + output = output.concat(generateParamsList(data[key], prefix ? prefix + "[" + key + "]" : key)); + } + } else { + output.push({ + key: prefix, + value: data + }); + } + + return output; + } + + function serializeParams(params) { + var output = generateParamsList(params), + encoded = []; + output.forEach(function (item) { + encoded.push(encodeURIComponent(item.key) + "=" + encodeURIComponent(item.value)); + }); + return encoded.join("&"); + } + function defaultURLGenerator (url, config, params) { if (url) { if (params && Object.keys(params).length) { if (!config.method || config.method.toLowerCase() == "get") { config.method = "get"; - url += (url.includes("?") ? "&" : "?") + this.modules.ajax.serializeParams(params); + url += (url.includes("?") ? "&" : "?") + serializeParams(params); } } } @@ -9873,17 +8860,30 @@ _this.urlGenerator = false; _this.params = false; //request parameters - _this.loaderElement = _this.createLoaderElement(); //loader message div + _this.loaderPromise = false; - _this.msgElement = _this.createMsgElement(); //message element + _this.registerTableOption("ajaxURL", false); //url for ajax loading - _this.loadingElement = false; - _this.errorElement = false; - _this.loaderPromise = false; - _this.progressiveLoad = false; - _this.loading = false; - _this.requestOrder = 0; //prevent requests comming out of sequence if overridden by another load request + _this.registerTableOption("ajaxURLGenerator", false); + + _this.registerTableOption("ajaxParams", {}); //params for ajax loading + + + _this.registerTableOption("ajaxConfig", "get"); //ajax request type + + + _this.registerTableOption("ajaxContentType", "form"); //ajax request type + + + _this.registerTableOption("ajaxRequestFunc", false); //promise function + + + _this.registerTableOption("ajaxRequesting", function () {}); + + _this.registerTableOption("ajaxResponse", false); + + _this.contentTypeFormatters = Ajax.contentTypeFormatters; return _this; } //initialize setup options @@ -9891,32 +8891,9 @@ _createClass(Ajax, [{ key: "initialize", value: function initialize() { - var template; - this.loaderElement.appendChild(this.msgElement); - - if (this.table.options.ajaxLoaderLoading) { - if (typeof this.table.options.ajaxLoaderLoading == "string") { - template = document.createElement('template'); - template.innerHTML = this.table.options.ajaxLoaderLoading.trim(); - this.loadingElement = template.content.firstChild; - } else { - this.loadingElement = this.table.options.ajaxLoaderLoading; - } - } - this.loaderPromise = this.table.options.ajaxRequestFunc || Ajax.defaultLoaderPromise; this.urlGenerator = this.table.options.ajaxURLGenerator || Ajax.defaultURLGenerator; - if (this.table.options.ajaxLoaderError) { - if (typeof this.table.options.ajaxLoaderError == "string") { - template = document.createElement('template'); - template.innerHTML = this.table.options.ajaxLoaderError.trim(); - this.errorElement = template.content.firstChild; - } else { - this.errorElement = this.table.options.ajaxLoaderError; - } - } - if (this.table.options.ajaxParams) { this.setParams(this.table.options.ajaxParams); } @@ -9929,280 +8906,113 @@ this.setUrl(this.table.options.ajaxURL); } - if (this.table.options.ajaxProgressiveLoad) { - if (this.table.options.pagination) { - this.progressiveLoad = false; - console.error("Progressive Load Error - Pagination and progressive load cannot be used at the same time"); - } else { - if (this.table.modExists("page")) { - this.progressiveLoad = this.table.options.ajaxProgressiveLoad; - this.table.modules.page.initializeProgressive(this.progressiveLoad); - } else { - console.error("Pagination plugin is required for progressive ajax loading"); - } - } - } - } - }, { - key: "createLoaderElement", - value: function createLoaderElement() { - var el = document.createElement("div"); - el.classList.add("tabulator-loader"); - return el; + this.registerTableFunction("getAjaxUrl", this.getUrl.bind(this)); + this.subscribe("data-loading", this.requestDataCheck.bind(this)); + this.subscribe("data-load", this.requestData.bind(this)); } }, { - key: "createMsgElement", - value: function createMsgElement() { - var el = document.createElement("div"); - el.classList.add("tabulator-loader-msg"); - el.setAttribute("role", "alert"); - return el; - } //set ajax params - - }, { - key: "setParams", - value: function setParams(params, update) { - if (update) { - this.params = this.params || {}; - - for (var key in params) { - this.params[key] = params[key]; - } - } else { - this.params = params; - } + key: "requestDataCheck", + value: function requestDataCheck(data, params, config, silent) { + return !!(!data && this.url || typeof data === "string"); } }, { - key: "getParams", - value: function getParams() { - return this.params || {}; - } //load config object - - }, { - key: "setConfig", - value: function setConfig(config) { - this._loadDefaultConfig(); - - if (typeof config == "string") { - this.config.method = config; - } else { - for (var key in config) { - this.config[key] = config[key]; + key: "requestData", + value: function requestData(data, params, config, silent, previousData) { + if (this.requestDataCheck(data)) { + if (data) { + this.setUrl(data); } - } - } //create config object from default - - }, { - key: "_loadDefaultConfig", - value: function _loadDefaultConfig(force) { - if (!this.config || force) { - this.config = {}; //load base config from defaults - for (var key in Ajax.defaultConfig) { - this.config[key] = Ajax.defaultConfig[key]; + if (params) { + this.setParams(params, true); } - } - } //set request url - - }, { - key: "setUrl", - value: function setUrl(url) { - this.url = url; - } //get request url - - }, { - key: "getUrl", - value: function getUrl() { - return this.url; - } //lstandard loading function - - }, { - key: "loadData", - value: function loadData(inPosition, columnsChanged) { - if (this.progressiveLoad) { - return this._loadDataProgressive(); - } else { - return this._loadDataStandard(inPosition, columnsChanged); - } - } - }, { - key: "nextPage", - value: function nextPage(diff) { - var margin; - - if (!this.loading) { - margin = this.table.options.ajaxProgressiveLoadScrollMargin || this.table.rowManager.getElement().clientHeight * 2; - if (diff < margin) { - this.table.modules.page.nextPage().then(function () {})["catch"](function () {}); + if (config) { + this.setConfig(config); } - } - } - }, { - key: "blockActiveRequest", - value: function blockActiveRequest() { - this.requestOrder++; - } - }, { - key: "_loadDataProgressive", - value: function _loadDataProgressive() { - this.table.rowManager.setData([]); - return this.table.modules.page.setPage(1); - } - }, { - key: "_loadDataStandard", - value: function _loadDataStandard(inPosition, columnsChanged) { - var _this2 = this; - - return new Promise(function (resolve, reject) { - _this2.sendRequest(inPosition).then(function (data) { - _this2.table.rowManager.setData(data, inPosition, columnsChanged).then(function () { - resolve(); - })["catch"](function (e) { - reject(e); - }); - })["catch"](function (e) { - reject(e); - }); - }); - } - }, { - key: "generateParamsList", - value: function generateParamsList(data, prefix) { - var _this3 = this; - var output = []; - prefix = prefix || ""; - - if (Array.isArray(data)) { - data.forEach(function (item, i) { - output = output.concat(_this3.generateParamsList(item, prefix ? prefix + "[" + i + "]" : i)); - }); - } else if (_typeof(data) === "object") { - for (var key in data) { - output = output.concat(this.generateParamsList(data[key], prefix ? prefix + "[" + key + "]" : key)); - } + return this.sendRequest(); } else { - output.push({ - key: prefix, - value: data - }); + return previousData; } - - return output; - } - }, { - key: "serializeParams", - value: function serializeParams(params) { - var output = this.generateParamsList(params), - encoded = []; - output.forEach(function (item) { - encoded.push(encodeURIComponent(item.key) + "=" + encodeURIComponent(item.value)); - }); - return encoded.join("&"); - } //send ajax request + } //set ajax params }, { - key: "sendRequest", - value: function sendRequest(silent) { - var _this4 = this; - - var url = this.url, - requestNo; - this.requestOrder++; - requestNo = this.requestOrder; - - this._loadDefaultConfig(); - - return new Promise(function (resolve, reject) { - if (_this4.table.options.ajaxRequesting.call(_this4.table, _this4.url, _this4.params) !== false) { - _this4.loading = true; - - if (!silent) { - _this4.showLoader(); - } - - _this4.loaderPromise(url, _this4.config, _this4.params).then(function (data) { - if (requestNo === _this4.requestOrder) { - if (_this4.table.options.ajaxResponse) { - data = _this4.table.options.ajaxResponse.call(_this4.table, _this4.url, _this4.params, data); - } - - resolve(data); - - _this4.hideLoader(); - - _this4.loading = false; - } else { - console.warn("Ajax Response Blocked - An active ajax request was blocked by an attempt to change table data while the request was being made"); - } - })["catch"](function (error) { - console.error("Ajax Load Error: ", error); - - _this4.table.options.ajaxError.call(_this4.table, error); - - _this4.showError(); - - setTimeout(function () { - _this4.hideLoader(); - }, 3000); - _this4.loading = false; - reject(error); - }); - } else { - reject(); + key: "setParams", + value: function setParams(params, update) { + if (update) { + this.params = this.params || {}; + + for (var key in params) { + this.params[key] = params[key]; } - }); + } else { + this.params = params; + } } }, { - key: "showLoader", - value: function showLoader() { - var shouldLoad = typeof this.table.options.ajaxLoader === "function" ? this.table.options.ajaxLoader() : this.table.options.ajaxLoader; + key: "getParams", + value: function getParams() { + return this.params || {}; + } //load config object - if (shouldLoad) { - this.hideLoader(); + }, { + key: "setConfig", + value: function setConfig(config) { + this._loadDefaultConfig(); - while (this.msgElement.firstChild) { - this.msgElement.removeChild(this.msgElement.firstChild); + if (typeof config == "string") { + this.config.method = config; + } else { + for (var key in config) { + this.config[key] = config[key]; } + } + } //create config object from default - this.msgElement.classList.remove("tabulator-error"); - this.msgElement.classList.add("tabulator-loading"); + }, { + key: "_loadDefaultConfig", + value: function _loadDefaultConfig(force) { + if (!this.config || force) { + this.config = {}; //load base config from defaults - if (this.loadingElement) { - this.msgElement.appendChild(this.loadingElement); - } else { - this.msgElement.innerHTML = this.table.modules.localize.getText("ajax|loading"); + for (var key in Ajax.defaultConfig) { + this.config[key] = Ajax.defaultConfig[key]; } - - this.table.element.appendChild(this.loaderElement); } - } + } //set request url + }, { - key: "showError", - value: function showError() { - this.hideLoader(); + key: "setUrl", + value: function setUrl(url) { + this.url = url; + } //get request url - while (this.msgElement.firstChild) { - this.msgElement.removeChild(this.msgElement.firstChild); - } + }, { + key: "getUrl", + value: function getUrl() { + return this.url; + } //send ajax request - this.msgElement.classList.remove("tabulator-loading"); - this.msgElement.classList.add("tabulator-error"); + }, { + key: "sendRequest", + value: function sendRequest(silent) { + var _this2 = this; - if (this.errorElement) { - this.msgElement.appendChild(this.errorElement); - } else { - this.msgElement.innerHTML = this.table.modules.localize.getText("ajax|error"); - } + var url = this.url; - this.table.element.appendChild(this.loaderElement); - } - }, { - key: "hideLoader", - value: function hideLoader() { - if (this.loaderElement.parentNode) { - this.loaderElement.parentNode.removeChild(this.loaderElement); + this._loadDefaultConfig(); + + if (this.table.options.ajaxRequesting.call(this.table, this.url, this.params) !== false) { + return this.loaderPromise(url, this.config, this.params).then(function (data) { + if (_this2.table.options.ajaxResponse) { + data = _this2.table.options.ajaxResponse.call(_this2.table, _this2.url, _this2.params, data); + } + + return data; + }); + } else { + return Promise.reject(); } } }]); @@ -10318,6 +9128,31 @@ _this.rowRange = false; _this.blocked = true; //block copy actions not originating from this command + _this.registerTableOption("clipboard", false); //enable clipboard + + + _this.registerTableOption("clipboardCopyStyled", true); //formatted table data + + + _this.registerTableOption("clipboardCopyConfig", false); //clipboard config + + + _this.registerTableOption("clipboardCopyFormatter", false); //DEPRICATED - REMOVE in 5.0 + + + _this.registerTableOption("clipboardCopyRowRange", "active"); //restrict clipboard to visible rows only + + + _this.registerTableOption("clipboardPasteParser", "table"); //convert pasted clipboard data to rows + + + _this.registerTableOption("clipboardPasteAction", "insert"); //how to insert pasted data into the table + + + _this.registerColumnOption("clipboard"); + + _this.registerColumnOption("titleClipboard"); + return _this; } @@ -10370,7 +9205,7 @@ } } - _this2.table.options.clipboardCopied.call(_this2.table, plain, html); + _this2.dispatchExternal("clipboardCopied", plain, html); _this2.reset(); } @@ -10385,6 +9220,7 @@ this.setPasteParser(this.table.options.clipboardPasteParser); this.setPasteAction(this.table.options.clipboardPasteAction); + this.registerTableFunction("copyToClipboard", this.copy.bind(this)); } }, { key: "reset", @@ -10518,9 +9354,9 @@ } rows = this.pasteAction.call(this, rowData); - this.table.options.clipboardPasted.call(this.table, data, rowData, rows); + this.dispatchExternal("clipboardPasted", data, rowData, rows); } else { - this.table.options.clipboardPasteError.call(this.table, data); + this.dispatchExternal("clipboardPasteError", data); } } } @@ -10582,6 +9418,15 @@ _classCallCheck(this, CalcComponent); this._row = row; + return new Proxy(this, { + get: function get(target, name, receiver) { + if (typeof target[name] !== "undefined") { + return target[name]; + } else { + return target._row.table.componentFunctionBinder.handle("row", target._row, name); + } + } + }); } _createClass(CalcComponent, [{ @@ -10726,7 +9571,23 @@ _this.topInitialized = false; _this.botInitialized = false; - _this.initialize(); + _this.registerTableOption("columnCalcs", true); + + _this.registerColumnOption("topCalc"); + + _this.registerColumnOption("topCalcParams"); + + _this.registerColumnOption("topCalcFormatter"); + + _this.registerColumnOption("topCalcFormatterParams"); + + _this.registerColumnOption("bottomCalc"); + + _this.registerColumnOption("bottomCalcParams"); + + _this.registerColumnOption("bottomCalcFormatter"); + + _this.registerColumnOption("bottomCalcFormatterParams"); return _this; } @@ -10744,14 +9605,79 @@ this.genColumn = new Column$1({ field: "value" }, this); - } //dummy functions to handle being mock column manager + this.subscribe("cell-value-changed", this.cellValueChanged.bind(this)); + this.subscribe("column-init", this.initializeColumnCheck.bind(this)); + this.subscribe("row-deleted", this.rowsUpdated.bind(this)); + this.subscribe("scroll-horizontal", this.scrollHorizontal.bind(this)); + this.subscribe("row-added", this.rowsUpdated.bind(this)); + this.subscribe("column-moved", this.recalcActiveRows.bind(this)); + this.subscribe("column-add", this.recalcActiveRows.bind(this)); + this.subscribe("data-refeshed", this.recalcActiveRows.bind(this)); + this.subscribe("table-redraw", this.tableRedraw.bind(this)); + this.registerTableFunction("getCalcResults", this.getResults.bind(this)); + this.registerTableFunction("recalc", this.userRecalc.bind(this)); + } + }, { + key: "tableRedraw", + value: function tableRedraw(force) { + this.recalc(this.table.rowManager.activeRows); + + if (force) { + this.redraw(); + } + } /////////////////////////////////// + ///////// Table Functions ///////// + /////////////////////////////////// }, { - key: "registerColumnField", - value: function registerColumnField() {} + key: "userRecalc", + value: function userRecalc() { + this.recalc(this.table.rowManager.activeRows); + } /////////////////////////////////// + ///////// Internal Logic ////////// + /////////////////////////////////// + + }, { + key: "rowsUpdated", + value: function rowsUpdated(row) { + if (this.table.options.groupBy) { + this.recalcRowGroup(this); + } else { + this.recalcActiveRows(); + } + } + }, { + key: "recalcActiveRows", + value: function recalcActiveRows() { + this.recalc(this.table.rowManager.activeRows); + } + }, { + key: "cellValueChanged", + value: function cellValueChanged(cell) { + if (cell.column.definition.topCalc || cell.column.definition.bottomCalc) { + if (this.table.options.groupBy) { + if (this.table.options.columnCalcs == "table" || this.table.options.columnCalcs == "both") { + this.recalcActiveRows(); + } + + if (this.table.options.columnCalcs != "table") { + this.recalcRowGroup(cell.row); + } + } else { + this.recalcActiveRows(); + } + } + } + }, { + key: "initializeColumnCheck", + value: function initializeColumnCheck(column) { + if (column.definition.topCalc || column.definition.bottomCalc) { + this.initializeColumn(column); + } + } //initialize column calcs + }, { key: "initializeColumn", - //initialize column calcs value: function initializeColumn(column) { var def = column.definition; var config = { @@ -10810,7 +9736,11 @@ } } } - } + } //dummy functions to handle being mock column manager + + }, { + key: "registerColumnField", + value: function registerColumnField() {} }, { key: "removeCalcs", value: function removeCalcs() { @@ -10914,7 +9844,7 @@ if (this.topCalcs.length || this.botCalcs.length) { if (this.table.options.columnCalcs !== "group") { - this.recalc(this.table.rowManager.activeRows); + this.recalcActiveRows(); } if (this.table.options.groupBy && this.table.options.columnCalcs !== "table") { @@ -11002,11 +9932,11 @@ row.component = false; row.getComponent = function () { - if (!_this4.component) { - _this4.component = new CalcComponent(_this4); + if (!row.component) { + row.component = new CalcComponent(_this4); } - return _this4.component; + return row.component; }; row.generateCells = function () { @@ -11045,7 +9975,7 @@ } }); - _this4.cells = cells; + row.cells = cells; }; return row; @@ -11169,82 +10099,168 @@ _this.startOpen = function () {}; _this.displayIndex = 0; + + _this.registerTableOption("dataTree", false); //enable data tree + + + _this.registerTableOption("dataTreeFilter", true); //filter child rows + + + _this.registerTableOption("dataTreeSort", true); //sort child rows + + + _this.registerTableOption("dataTreeElementColumn", false); + + _this.registerTableOption("dataTreeBranchElement", true); //show data tree branch element + + + _this.registerTableOption("dataTreeChildIndent", 9); //data tree child indent in px + + + _this.registerTableOption("dataTreeChildField", "_children"); //data tre column field to look for child rows + + + _this.registerTableOption("dataTreeCollapseElement", false); //data tree row collapse element + + + _this.registerTableOption("dataTreeExpandElement", false); //data tree row expand element + + + _this.registerTableOption("dataTreeStartExpanded", false); + + _this.registerTableOption("dataTreeChildColumnCalcs", false); //include visible data tree rows in column calculations + + + _this.registerTableOption("dataTreeSelectPropagate", false); //seleccting a parent row selects its children + //register component functions + + + _this.registerComponentFunction("row", "treeCollapse", _this.collapseRow.bind(_assertThisInitialized(_this))); + + _this.registerComponentFunction("row", "treeExpand", _this.expandRow.bind(_assertThisInitialized(_this))); + + _this.registerComponentFunction("row", "treeToggle", _this.toggleRow.bind(_assertThisInitialized(_this))); + + _this.registerComponentFunction("row", "getTreeParent", _this.getTreeParent.bind(_assertThisInitialized(_this))); + + _this.registerComponentFunction("row", "getTreeChildren", _this.getRowChildren.bind(_assertThisInitialized(_this))); + + _this.registerComponentFunction("row", "addTreeChild", _this.addTreeChildRow.bind(_assertThisInitialized(_this))); + return _this; } _createClass(DataTree, [{ key: "initialize", value: function initialize() { - var dummyEl = null, - firstCol = this.table.columnManager.getFirstVisibileColumn(), - options = this.table.options; - this.field = options.dataTreeChildField; - this.indent = options.dataTreeChildIndent; - this.elementField = options.dataTreeElementColumn || (firstCol ? firstCol.field : false); - - if (options.dataTreeBranchElement) { - if (options.dataTreeBranchElement === true) { - this.branchEl = document.createElement("div"); - this.branchEl.classList.add("tabulator-data-tree-branch"); - } else { - if (typeof options.dataTreeBranchElement === "string") { - dummyEl = document.createElement("div"); - dummyEl.innerHTML = options.dataTreeBranchElement; - this.branchEl = dummyEl.firstChild; + if (this.table.options.dataTree) { + var dummyEl = null, + firstCol = this.table.columnManager.getFirstVisibileColumn(), + options = this.table.options; + this.field = options.dataTreeChildField; + this.indent = options.dataTreeChildIndent; + this.elementField = options.dataTreeElementColumn || (firstCol ? firstCol.field : false); + + if (options.dataTreeBranchElement) { + if (options.dataTreeBranchElement === true) { + this.branchEl = document.createElement("div"); + this.branchEl.classList.add("tabulator-data-tree-branch"); } else { - this.branchEl = options.dataTreeBranchElement; + if (typeof options.dataTreeBranchElement === "string") { + dummyEl = document.createElement("div"); + dummyEl.innerHTML = options.dataTreeBranchElement; + this.branchEl = dummyEl.firstChild; + } else { + this.branchEl = options.dataTreeBranchElement; + } } } - } - if (options.dataTreeCollapseElement) { - if (typeof options.dataTreeCollapseElement === "string") { - dummyEl = document.createElement("div"); - dummyEl.innerHTML = options.dataTreeCollapseElement; - this.collapseEl = dummyEl.firstChild; + if (options.dataTreeCollapseElement) { + if (typeof options.dataTreeCollapseElement === "string") { + dummyEl = document.createElement("div"); + dummyEl.innerHTML = options.dataTreeCollapseElement; + this.collapseEl = dummyEl.firstChild; + } else { + this.collapseEl = options.dataTreeCollapseElement; + } } else { - this.collapseEl = options.dataTreeCollapseElement; + this.collapseEl = document.createElement("div"); + this.collapseEl.classList.add("tabulator-data-tree-control"); + this.collapseEl.tabIndex = 0; + this.collapseEl.innerHTML = "
"; } - } else { - this.collapseEl = document.createElement("div"); - this.collapseEl.classList.add("tabulator-data-tree-control"); - this.collapseEl.tabIndex = 0; - this.collapseEl.innerHTML = "
"; - } - if (options.dataTreeExpandElement) { - if (typeof options.dataTreeExpandElement === "string") { - dummyEl = document.createElement("div"); - dummyEl.innerHTML = options.dataTreeExpandElement; - this.expandEl = dummyEl.firstChild; + if (options.dataTreeExpandElement) { + if (typeof options.dataTreeExpandElement === "string") { + dummyEl = document.createElement("div"); + dummyEl.innerHTML = options.dataTreeExpandElement; + this.expandEl = dummyEl.firstChild; + } else { + this.expandEl = options.dataTreeExpandElement; + } } else { - this.expandEl = options.dataTreeExpandElement; + this.expandEl = document.createElement("div"); + this.expandEl.classList.add("tabulator-data-tree-control"); + this.expandEl.tabIndex = 0; + this.expandEl.innerHTML = "
"; } - } else { - this.expandEl = document.createElement("div"); - this.expandEl.classList.add("tabulator-data-tree-control"); - this.expandEl.tabIndex = 0; - this.expandEl.innerHTML = "
"; - } - switch (_typeof(options.dataTreeStartExpanded)) { - case "boolean": - this.startOpen = function (row, index) { - return options.dataTreeStartExpanded; - }; + switch (_typeof(options.dataTreeStartExpanded)) { + case "boolean": + this.startOpen = function (row, index) { + return options.dataTreeStartExpanded; + }; - break; + break; - case "function": - this.startOpen = options.dataTreeStartExpanded; - break; + case "function": + this.startOpen = options.dataTreeStartExpanded; + break; - default: - this.startOpen = function (row, index) { - return options.dataTreeStartExpanded[index]; - }; + default: + this.startOpen = function (row, index) { + return options.dataTreeStartExpanded[index]; + }; - break; + break; + } + + this.subscribe("row-init", this.initializeRow.bind(this)); + this.subscribe("row-layout", this.layoutRow.bind(this)); + this.subscribe("row-relayout", this.layoutRow.bind(this)); + this.subscribe("row-deleted", this.rowDelete.bind(this), 0); + this.subscribe("row-data-changed", this.rowDataChanged.bind(this), 10); + this.subscribe("column-moving-rows", this.columnMoving.bind(this)); + this.registerDisplayHandler(this.getRows.bind(this), 30); + } + } + }, { + key: "getRowChildren", + value: function getRowChildren(row) { + return this.getTreeChildren(row, true); + } + }, { + key: "columnMoving", + value: function columnMoving() { + var _this2 = this; + + var rows = []; + this.table.rowManager.rows.forEach(function (row) { + rows = rows.concat(_this2.getTreeChildren(row, false, true)); + }); + return rows; + } + }, { + key: "rowDataChanged", + value: function rowDataChanged(row, visible, updatedData) { + if (this.redrawNeeded(updatedData)) { + this.initializeRow(row); + + if (visible) { + this.layoutRow(row); + this.refreshData(true); + } } } }, { @@ -11271,6 +10287,14 @@ children: children }; } + }, { + key: "reinitializeRowChildren", + value: function reinitializeRowChildren(row) { + var children = this.getTreeChildren(row, false, true); + children.forEach(function (child) { + child.reinitialize(true); + }); + } }, { key: "layoutRow", value: function layoutRow(row) { @@ -11319,7 +10343,7 @@ }, { key: "generateControlElement", value: function generateControlElement(row, el) { - var _this2 = this; + var _this3 = this; var config = row.modules.dataTree, el = el || row.getCells()[0].getElement(), @@ -11331,14 +10355,14 @@ config.controlEl.addEventListener("click", function (e) { e.stopPropagation(); - _this2.collapseRow(row); + _this3.collapseRow(row); }); } else { config.controlEl = this.expandEl.cloneNode(true); config.controlEl.addEventListener("click", function (e) { e.stopPropagation(); - _this2.expandRow(row); + _this3.expandRow(row); }); } @@ -11366,7 +10390,7 @@ }, { key: "getRows", value: function getRows(rows) { - var _this3 = this; + var _this4 = this; var output = []; rows.forEach(function (row, i) { @@ -11378,7 +10402,7 @@ config = row.modules.dataTree.children; if (!config.index && config.children !== false) { - children = _this3.getChildren(row); + children = _this4.getChildren(row); children.forEach(function (child) { child.create(); output.push(child); @@ -11391,7 +10415,7 @@ }, { key: "getChildren", value: function getChildren(row, allChildren) { - var _this4 = this; + var _this5 = this; var config = row.modules.dataTree, children = [], @@ -11415,7 +10439,7 @@ children.forEach(function (child) { output.push(child); - var subChildren = _this4.getChildren(child); + var subChildren = _this5.getChildren(child); subChildren.forEach(function (sub) { output.push(sub); @@ -11428,7 +10452,7 @@ }, { key: "generateChildren", value: function generateChildren(row) { - var _this5 = this; + var _this6 = this; var children = []; var childArray = row.getData()[this.field]; @@ -11438,13 +10462,13 @@ } childArray.forEach(function (childData) { - var childRow = new Row$1(childData || {}, _this5.table.rowManager); + var childRow = new Row$1(childData || {}, _this6.table.rowManager); childRow.create(); childRow.modules.dataTree.index = row.modules.dataTree.index + 1; childRow.modules.dataTree.parent = row; if (childRow.modules.dataTree.children) { - childRow.modules.dataTree.open = _this5.startOpen(childRow.getComponent(), childRow.modules.dataTree.index); + childRow.modules.dataTree.open = _this6.startOpen(childRow.getComponent(), childRow.modules.dataTree.index); } children.push(childRow); @@ -11459,8 +10483,8 @@ if (config.children !== false) { config.open = true; row.reinitialize(); - this.table.rowManager.refreshActiveData("tree", false, true); - this.table.options.dataTreeRowExpanded(row.getComponent(), row.modules.dataTree.index); + this.refreshData(true); + this.dispatchExternal("dataTreeRowExpanded", row.getComponent(), row.modules.dataTree.index); } } }, { @@ -11471,8 +10495,8 @@ if (config.children !== false) { config.open = false; row.reinitialize(); - this.table.rowManager.refreshActiveData("tree", false, true); - this.table.options.dataTreeRowCollapsed(row.getComponent(), row.modules.dataTree.index); + this.refreshData(true); + this.dispatchExternal("dataTreeRowCollapsed", getComponent(), row.modules.dataTree.index); } } }, { @@ -11541,7 +10565,7 @@ this.layoutRow(parent); } - this.table.rowManager.refreshActiveData("tree", false, true); + this.refreshData(true); } }, { key: "addTreeChildRow", @@ -11575,12 +10599,12 @@ this.initializeRow(row); this.layoutRow(row); - this.table.rowManager.refreshActiveData("tree", false, true); + this.refreshData(true); } }, { key: "findChildIndex", value: function findChildIndex(subject, parent) { - var _this6 = this; + var _this7 = this; var match = false; @@ -11607,7 +10631,7 @@ } else { //subject should be treated as the index of the row match = parent.data[this.field].find(function (row) { - return row.data[_this6.table.options.index] == subject; + return row.data[_this7.table.options.index] == subject; }); } @@ -11627,7 +10651,7 @@ }, { key: "getTreeChildren", value: function getTreeChildren(row, component, recurse) { - var _this7 = this; + var _this8 = this; var config = row.modules.dataTree, output = []; @@ -11642,7 +10666,7 @@ output.push(component ? childRow.getComponent() : childRow); if (recurse) { - output = output.concat(_this7.getTreeChildren(childRow, component, recurse)); + output = output.concat(_this8.getTreeChildren(childRow, component, recurse)); } } }); @@ -11880,7 +10904,8 @@ var self = this, sheetName = options.sheetName || "Sheet1", workbook = XLSX.utils.book_new(), - output; + tableFeatures = new CoreFeature(this); + output; workbook.SheetNames = []; workbook.Sheets = {}; @@ -11948,7 +10973,7 @@ workbook.Sheets[sheet] = generateSheet(); } else { workbook.SheetNames.push(sheet); - this.modules.comms.send(options.sheets[sheet], "download", "intercept", { + tableFeatures.commsSend(options.sheets[sheet], "download", "intercept", { type: "xlsx", options: { sheetOnly: true @@ -12009,13 +11034,49 @@ var _super = _createSuper(Download); function Download(table) { + var _this; + _classCallCheck(this, Download); - return _super.call(this, table); - } //trigger file download + _this = _super.call(this, table); + + _this.registerTableOption("downloadReady", function (data, blob) { + return blob; + }); //function to manipulate download data + + + _this.registerTableOption("downloadConfig", {}); //download config + + + _this.registerTableOption("downloadRowRange", "active"); //restrict download to active rows only + + + _this.registerColumnOption("download"); + + _this.registerColumnOption("titleDownload"); + + return _this; + } + + _createClass(Download, [{ + key: "initialize", + value: function initialize() { + this.registerTableFunction("download", this.download.bind(this)); + this.registerTableFunction("downloadToTab", this.downloadToTab.bind(this)); + } /////////////////////////////////// + ///////// Table Functions ///////// + /////////////////////////////////// + }, { + key: "downloadToTab", + value: function downloadToTab(type, filename, options, active) { + this.download(type, filename, options, active, true); + } /////////////////////////////////// + ///////// Internal Logic ////////// + /////////////////////////////////// + //trigger file download - _createClass(Download, [{ + }, { key: "download", value: function download(type, filename, options, range, interceptCallback) { var downloadFunc = false; @@ -12079,7 +11140,7 @@ type: mime }), filename = filename || "Tabulator." + (typeof type === "function" ? "txt" : type); - blob = this.table.options.downloadReady.call(this.table, data, blob); + blob = this.table.options.downloadReady(data, blob); if (blob) { if (newTab) { @@ -12100,9 +11161,7 @@ } } - if (this.table.options.downloadComplete) { - this.table.options.downloadComplete(); - } + this.dispatchExternal("downloadComplete"); } } }, { @@ -12123,7 +11182,83 @@ Download.downloaders = defaultDownloaders; - //input element + function maskInput(el, options) { + var mask = options.mask, + maskLetter = typeof options.maskLetterChar !== "undefined" ? options.maskLetterChar : "A", + maskNumber = typeof options.maskNumberChar !== "undefined" ? options.maskNumberChar : "9", + maskWildcard = typeof options.maskWildcardChar !== "undefined" ? options.maskWildcardChar : "*"; + + function fillSymbols(index) { + var symbol = mask[index]; + + if (typeof symbol !== "undefined" && symbol !== maskWildcard && symbol !== maskLetter && symbol !== maskNumber) { + el.value = el.value + "" + symbol; + fillSymbols(index + 1); + } + } + + el.addEventListener("keydown", function (e) { + var index = el.value.length, + _char = e.key; + + if (e.keyCode > 46) { + if (index >= mask.length) { + e.preventDefault(); + e.stopPropagation(); + return false; + } else { + switch (mask[index]) { + case maskLetter: + if (_char.toUpperCase() == _char.toLowerCase()) { + e.preventDefault(); + e.stopPropagation(); + return false; + } + + break; + + case maskNumber: + if (isNaN(_char)) { + e.preventDefault(); + e.stopPropagation(); + return false; + } + + break; + + case maskWildcard: + break; + + default: + if (_char !== mask[index]) { + e.preventDefault(); + e.stopPropagation(); + return false; + } + + } + } + } + + return; + }); + el.addEventListener("keyup", function (e) { + if (e.keyCode > 46) { + if (options.maskAutoFill) { + fillSymbols(el.value.length); + } + } + }); + + if (!el.placeholder) { + el.placeholder = mask; + } + + if (options.maskAutoFill) { + fillSymbols(el.value.length); + } + } + function input (cell, onRendered, success, cancel, editorParams) { //create and style input var cellValue = cell.getValue(), @@ -12185,13 +11320,12 @@ }); if (editorParams.mask) { - this.table.modules.edit.maskInput(input, editorParams); + maskInput(input, editorParams); } return input; } - //resizable text area element function textarea (cell, onRendered, success, cancel, editorParams) { var cellValue = cell.getValue(), vertNav = editorParams.verticalNavigation || "hybrid", @@ -12289,13 +11423,12 @@ }); if (editorParams.mask) { - this.table.modules.edit.maskInput(input, editorParams); + maskInput(input, editorParams); } return input; } - //input element with type of number function number (cell, onRendered, success, cancel, editorParams) { var cellValue = cell.getValue(), vertNav = editorParams.verticalNavigation || "editor", @@ -12394,7 +11527,7 @@ }); if (editorParams.mask) { - this.table.modules.edit.maskInput(input, editorParams); + maskInput(input, editorParams); } return input; @@ -12845,7 +11978,7 @@ parseItems(editorParams.values || [], initialDisplayValue); } - var offset = Helpers.elOffset(cellEl); + var offset = Helpers$1.elOffset(cellEl); listEl.style.minWidth = cellEl.offsetWidth + "px"; listEl.style.top = offset.top + cellEl.offsetHeight + "px"; listEl.style.left = offset.left + "px"; @@ -13297,13 +12430,11 @@ function showList() { if (!listEl.parentNode) { - console.log("show", initialDisplayValue); - while (listEl.firstChild) { listEl.removeChild(listEl.firstChild); } - var offset = Helpers.elOffset(cellEl); + var offset = Helpers$1.elOffset(cellEl); listEl.style.minWidth = cellEl.offsetWidth + "px"; listEl.style.top = offset.top + cellEl.offsetHeight + "px"; listEl.style.left = offset.left + "px"; @@ -13462,7 +12593,7 @@ }); if (editorParams.mask) { - this.table.modules.edit.maskInput(input, editorParams); + maskInput(input, editorParams); } setTimeout(function () { @@ -13824,30 +12955,397 @@ tickCross: tickCross }; - var Edit = /*#__PURE__*/function (_Module) { - _inherits(Edit, _Module); + var Edit = /*#__PURE__*/function (_Module) { + _inherits(Edit, _Module); + + var _super = _createSuper(Edit); + + function Edit(table) { + var _this; + + _classCallCheck(this, Edit); + + _this = _super.call(this, table); + _this.currentCell = false; //hold currently editing cell + + _this.mouseClick = false; //hold mousedown state to prevent click binding being overriden by editor opening + + _this.recursionBlock = false; //prevent focus recursion + + _this.invalidEdit = false; + _this.editedCells = []; + _this.editors = Edit.editors; + + _this.registerColumnOption("editable"); + + _this.registerColumnOption("editor"); + + _this.registerColumnOption("editorParams"); + + _this.registerColumnOption("cellEditing"); + + _this.registerColumnOption("cellEdited"); + + _this.registerColumnOption("cellEditCancelled"); + + _this.registerTableFunction("getEditedCells", _this.getEditedCells.bind(_assertThisInitialized(_this))); + + _this.registerTableFunction("clearCellEdited", _this.clearCellEdited.bind(_assertThisInitialized(_this))); + + _this.registerTableFunction("navigatePrev", _this.navigatePrev.bind(_assertThisInitialized(_this))); + + _this.registerTableFunction("navigateNext", _this.navigateNext.bind(_assertThisInitialized(_this))); + + _this.registerTableFunction("navigateLeft", _this.navigateLeft.bind(_assertThisInitialized(_this))); + + _this.registerTableFunction("navigateRight", _this.navigateRight.bind(_assertThisInitialized(_this))); + + _this.registerTableFunction("navigateUp", _this.navigateUp.bind(_assertThisInitialized(_this))); + + _this.registerTableFunction("navigateDown", _this.navigateDown.bind(_assertThisInitialized(_this))); + + _this.registerComponentFunction("cell", "isEdited", _this.cellisEdited.bind(_assertThisInitialized(_this))); + + _this.registerComponentFunction("cell", "clearEdited", _this.clearEdited.bind(_assertThisInitialized(_this))); + + _this.registerComponentFunction("cell", "edit", _this.editCell.bind(_assertThisInitialized(_this))); + + _this.registerComponentFunction("cell", "cancelEdit", _this.cellCancelEdit.bind(_assertThisInitialized(_this))); + + _this.registerComponentFunction("cell", "navigatePrev", _this.navigatePrev.bind(_assertThisInitialized(_this))); + + _this.registerComponentFunction("cell", "navigateNext", _this.navigateNext.bind(_assertThisInitialized(_this))); + + _this.registerComponentFunction("cell", "navigateLeft", _this.navigateLeft.bind(_assertThisInitialized(_this))); + + _this.registerComponentFunction("cell", "navigateRight", _this.navigateRight.bind(_assertThisInitialized(_this))); + + _this.registerComponentFunction("cell", "navigateUp", _this.navigateUp.bind(_assertThisInitialized(_this))); + + _this.registerComponentFunction("cell", "navigateDown", _this.navigateDown.bind(_assertThisInitialized(_this))); + + return _this; + } + + _createClass(Edit, [{ + key: "initialize", + value: function initialize() { + this.subscribe("cell-init", this.bindEditor.bind(this)); + this.subscribe("cell-delete", this.clearEdited.bind(this)); + this.subscribe("column-layout", this.initializeColumnCheck.bind(this)); + this.subscribe("column-delete", this.columnDeleteCheck.bind(this)); + this.subscribe("row-deleting", this.rowDeleteCheck.bind(this)); + this.subscribe("data-refeshing", this.cancelEdit.bind(this)); + this.subscribe("keybinding-nav-prev", this.navigatePrev.bind(this)); + this.subscribe("keybinding-nav-next", this.keybindingNavigateNext.bind(this)); + this.subscribe("keybinding-nav-left", this.navigateLeft.bind(this)); + this.subscribe("keybinding-nav-right", this.navigateRight.bind(this)); + this.subscribe("keybinding-nav-up", this.navigateUp.bind(this)); + this.subscribe("keybinding-nav-down", this.navigateDown.bind(this)); + } /////////////////////////////////// + ////// Keybinding Functions /////// + /////////////////////////////////// + + }, { + key: "keybindingNavigateNext", + value: function keybindingNavigateNext(e) { + var cell = this.currentCell, + newRow = this.options("tabEndNewRow"); + + if (cell) { + if (!this.navigateNext(e)) { + if (newRow) { + cell.getElement().firstChild.blur(); + + if (newRow === true) { + newRow = this.table.addRow({}); + } else { + if (typeof newRow == "function") { + newRow = this.table.addRow(newRow(cell.row.getComponent())); + } else { + newRow = this.table.addRow(Object.assign({}, newRow)); + } + } + + newRow.then(function () { + setTimeout(function () { + nav.next(); + }); + }); + } + } + } + } /////////////////////////////////// + ///////// Cell Functions ////////// + /////////////////////////////////// + + }, { + key: "cellisEdited", + value: function cellisEdited(cell) { + return !!cell.modules.edit && cell.modules.edit.edited; + } + }, { + key: "cellCancelEdit", + value: function cellCancelEdit(cell) { + if (cell === this.currentCell) { + this.table.modules.edit.cancelEdit(); + } else { + console.warn("Cancel Editor Error - This cell is not currently being edited "); + } + } /////////////////////////////////// + ///////// Table Functions ///////// + /////////////////////////////////// + + }, { + key: "clearCellEdited", + value: function clearCellEdited(cells) { + var _this2 = this; + + if (!cells) { + cells = this.modules.edit.getEditedCells(); + } + + if (!Array.isArray(cells)) { + cells = [cells]; + } + + cells.forEach(function (cell) { + _this2.modules.edit.clearEdited(cell._getSelf()); + }); + } + }, { + key: "navigatePrev", + value: function navigatePrev(e) { + var cell = this.currentCell, + nextCell, + prevRow; + + if (cell) { + if (e) { + e.preventDefault(); + } + + nextCell = this.navigateLeft(); + + if (nextCell) { + return true; + } else { + prevRow = this.table.rowManager.prevDisplayRow(cell.row, true); + + if (prevRow) { + nextCell = this.findNextEditableCell(prevRow, prevRow.cells.length); + + if (nextCell) { + nextCell.edit(); + return true; + } + } + } + } + + return false; + } + }, { + key: "navigateNext", + value: function navigateNext(e) { + var cell = this.currentCell, + nextCell, + nextRow; + + if (cell) { + if (e) { + e.preventDefault(); + } + + nextCell = this.navigateRight(); + + if (nextCell) { + return true; + } else { + nextRow = this.table.rowManager.nextDisplayRow(cell.row, true); + + if (nextRow) { + nextCell = this.findNextEditableCell(nextRow, -1); + + if (nextCell) { + nextCell.edit(); + return true; + } + } + } + } + + return false; + } + }, { + key: "navigateLeft", + value: function navigateLeft(e) { + var cell = this.currentCell, + index, + nextCell; + + if (cell) { + if (e) { + e.preventDefault(); + } + + index = cell.getIndex(); + nextCell = this.findPrevEditableCell(cell.row, index); + + if (nextCell) { + nextCell.edit(); + return true; + } + } + + return false; + } + }, { + key: "navigateRight", + value: function navigateRight(e) { + var cell = this.currentCell, + index, + nextCell; + + if (cell) { + if (e) { + e.preventDefault(); + } + + index = cell.getIndex(); + nextCell = this.findNextEditableCell(cell.row, index); + + if (nextCell) { + nextCell.edit(); + return true; + } + } + + return false; + } + }, { + key: "navigateUp", + value: function navigateUp(e) { + var cell = this.currentCell, + index, + nextRow; + + if (cell) { + if (e) { + e.preventDefault(); + } + + index = cell.getIndex(); + nextRow = this.table.rowManager.prevDisplayRow(cell.row, true); + + if (nextRow) { + nextRow.cells[index].edit(); + return true; + } + } + + return false; + } + }, { + key: "navigateDown", + value: function navigateDown(e) { + var cell = this.currentCell, + index, + nextRow; + + if (cell) { + if (e) { + e.preventDefault(); + } + + index = cell.getIndex(); + nextRow = this.table.rowManager.nextDisplayRow(cell.row, true); + + if (nextRow) { + nextRow.cells[index].edit(); + return true; + } + } + + return false; + } + }, { + key: "findNextEditableCell", + value: function findNextEditableCell(row, index) { + var nextCell = false; + + if (index < row.cells.length - 1) { + for (var i = index + 1; i < row.cells.length; i++) { + var cell = row.cells[i]; - var _super = _createSuper(Edit); + if (cell.column.modules.edit && Helpers.elVisible(cell.getElement())) { + var allowEdit = true; - function Edit(table) { - var _this; + if (typeof cell.column.modules.edit.check == "function") { + allowEdit = cell.column.modules.edit.check(cell.getComponent()); + } - _classCallCheck(this, Edit); + if (allowEdit) { + nextCell = cell; + break; + } + } + } + } - _this = _super.call(this, table); - _this.currentCell = false; //hold currently editing cell + return nextCell; + } + }, { + key: "findPrevEditableCell", + value: function findPrevEditableCell(row, index) { + var prevCell = false; - _this.mouseClick = false; //hold mousedown state to prevent click binding being overriden by editor opening + if (index > 0) { + for (var i = index - 1; i >= 0; i--) { + var cell = row.cells[i], + allowEdit = true; - _this.recursionBlock = false; //prevent focus recursion + if (cell.column.modules.edit && Helpers.elVisible(cell.getElement())) { + if (typeof cell.column.modules.edit.check == "function") { + allowEdit = cell.column.modules.edit.check(cell.getComponent()); + } - _this.invalidEdit = false; - _this.editedCells = []; - return _this; - } //initialize column editor + if (allowEdit) { + prevCell = cell; + break; + } + } + } + } + return prevCell; + } /////////////////////////////////// + ///////// Internal Logic ////////// + /////////////////////////////////// - _createClass(Edit, [{ + }, { + key: "initializeColumnCheck", + value: function initializeColumnCheck(column) { + if (typeof column.definition.editor !== "undefined") { + this.initializeColumn(column); + } + } + }, { + key: "columnDeleteCheck", + value: function columnDeleteCheck(column) { + if (this.currentCell && this.currentCell.column === column) { + this.cancelEdit(); + } + } + }, { + key: "rowDeleteCheck", + value: function rowDeleteCheck(row) { + if (this.currentCell && this.currentCell.row === row) { + this.cancelEdit(); + } + } //initialize column editor + + }, { key: "initializeColumn", value: function initializeColumn(column) { var config = { @@ -13859,8 +13357,8 @@ switch (_typeof(column.definition.editor)) { case "string": - if (Edit.editors[column.definition.editor]) { - config.editor = Edit.editors[column.definition.editor]; + if (this.editors[column.definition.editor]) { + config.editor = this.editors[column.definition.editor]; } else { console.warn("Editor Error - No such editor found: ", column.definition.editor); } @@ -13874,10 +13372,10 @@ case "boolean": if (column.definition.editor === true) { if (typeof column.definition.formatter !== "function") { - if (Edit.editors[column.definition.formatter]) { - config.editor = Edit.editors[column.definition.formatter]; + if (this.editors[column.definition.formatter]) { + config.editor = this.editors[column.definition.formatter]; } else { - config.editor = Edit.editors["input"]; + config.editor = this.editors["input"]; } } else { console.warn("Editor Error - Cannot auto lookup editor for a custom formatter: ", column.definition.formatter); @@ -13936,39 +13434,41 @@ cell.row.normalizeHeight(true); } - if (cell.column.cellEvents.cellEditCancelled) { - cell.column.cellEvents.cellEditCancelled.call(this.table, component); + if (cell.column.definition.cellEditCancelled) { + cell.column.definition.cellEditCancelled.call(this.table, component); } - this.table.options.cellEditCancelled.call(this.table, component); + this.dispatchExternal("cellEditCancelled", component); } } //return a formatted value for a cell }, { key: "bindEditor", value: function bindEditor(cell) { - var self = this, - element = cell.getElement(true); - element.setAttribute("tabindex", 0); - element.addEventListener("click", function (e) { - if (!element.classList.contains("tabulator-editing")) { - element.focus({ - preventScroll: true - }); - } - }); - element.addEventListener("mousedown", function (e) { - if (e.button === 2) { - e.preventDefault(); - } else { - self.mouseClick = true; - } - }); - element.addEventListener("focus", function (e) { - if (!self.recursionBlock) { - self.edit(cell, e, false); - } - }); + if (cell.column.modules.edit) { + var self = this, + element = cell.getElement(true); + element.setAttribute("tabindex", 0); + element.addEventListener("click", function (e) { + if (!element.classList.contains("tabulator-editing")) { + element.focus({ + preventScroll: true + }); + } + }); + element.addEventListener("mousedown", function (e) { + if (e.button === 2) { + e.preventDefault(); + } else { + self.mouseClick = true; + } + }); + element.addEventListener("focus", function (e) { + if (!self.recursionBlock) { + self.edit(cell, e, false); + } + }); + } } }, { key: "focusCellNoEvent", @@ -14016,9 +13516,9 @@ rightEdge -= parseInt(this.table.modules.frozenColumns.rightMargin); } - if (this.table.options.virtualDomHoz) { - leftEdge -= parseInt(this.table.vdomHoz.vDomPadLeft); - rightEdge -= parseInt(this.table.vdomHoz.vDomPadLeft); + if (this.table.options.renderHorizontal === "virtual") { + leftEdge -= parseInt(this.table.columnManager.renderer.vDomPadLeft); + rightEdge -= parseInt(this.table.columnManager.renderer.vDomPadLeft); } if (cellEl.offsetLeft < leftEdge) { @@ -14080,7 +13580,7 @@ if (valid !== true) { element.classList.add("tabulator-validation-fail"); - self.table.options.validationFailed.call(self.table, cell.getComponent(), value, valid); + self.table.externalEvents.dispatch("validationFailed", cell.getComponent(), value, valid); return false; } @@ -14090,7 +13590,7 @@ element.classList.add("tabulator-validation-fail"); self.focusCellNoEvent(cell, true); rendered(); - self.table.options.validationFailed.call(self.table, cell.getComponent(), value, valid); + self.table.externalEvents.dispatch("validationFailed", cell.getComponent(), value, valid); return false; } } @@ -14135,16 +13635,16 @@ if (this.mouseClick) { this.mouseClick = false; - if (cell.column.cellEvents.cellClick) { - cell.column.cellEvents.cellClick.call(this.table, e, component); + if (cell.column.definition.cellClick) { + cell.column.definition.cellClick.call(this.table, e, component); } } - if (cell.column.cellEvents.cellEditing) { - cell.column.cellEvents.cellEditing.call(this.table, component); + if (cell.column.definition.cellEditing) { + cell.column.definition.cellEditing.call(this.table, component); } - self.table.options.cellEditing.call(this.table, component); + this.dispatchExternal("cellEditing", component); params = typeof cell.column.modules.edit.params === "function" ? cell.column.modules.edit.params(component) : cell.column.modules.edit.params; cellEditor = cell.column.modules.edit.editor.call(self, component, onRendered, success, cancel, params); //if editor returned, add to DOM, if false, abort edit @@ -14190,84 +13690,6 @@ return false; } } - }, { - key: "maskInput", - value: function maskInput(el, options) { - var mask = options.mask, - maskLetter = typeof options.maskLetterChar !== "undefined" ? options.maskLetterChar : "A", - maskNumber = typeof options.maskNumberChar !== "undefined" ? options.maskNumberChar : "9", - maskWildcard = typeof options.maskWildcardChar !== "undefined" ? options.maskWildcardChar : "*"; - - function fillSymbols(index) { - var symbol = mask[index]; - - if (typeof symbol !== "undefined" && symbol !== maskWildcard && symbol !== maskLetter && symbol !== maskNumber) { - el.value = el.value + "" + symbol; - fillSymbols(index + 1); - } - } - - el.addEventListener("keydown", function (e) { - var index = el.value.length, - _char = e.key; - - if (e.keyCode > 46) { - if (index >= mask.length) { - e.preventDefault(); - e.stopPropagation(); - return false; - } else { - switch (mask[index]) { - case maskLetter: - if (_char.toUpperCase() == _char.toLowerCase()) { - e.preventDefault(); - e.stopPropagation(); - return false; - } - - break; - - case maskNumber: - if (isNaN(_char)) { - e.preventDefault(); - e.stopPropagation(); - return false; - } - - break; - - case maskWildcard: - break; - - default: - if (_char !== mask[index]) { - e.preventDefault(); - e.stopPropagation(); - return false; - } - - } - } - } - - return; - }); - el.addEventListener("keyup", function (e) { - if (e.keyCode > 46) { - if (options.maskAutoFill) { - fillSymbols(el.value.length); - } - } - }); - - if (!el.placeholder) { - el.placeholder = mask; - } - - if (options.maskAutoFill) { - fillSymbols(el.value.length); - } - } }, { key: "getEditedCells", value: function getEditedCells() { @@ -14338,10 +13760,29 @@ _this.config = {}; _this.cloneTableStyle = true; _this.colVisProp = ""; + + _this.registerTableOption("htmlOutputConfig", false); //html outypu config + + + _this.registerColumnOption("htmlOutput"); + + _this.registerColumnOption("titleHtmlOutput"); + return _this; } _createClass(Export, [{ + key: "initialize", + value: function initialize() { + this.registerTableFunction("getHtml", this.getHtml.bind(this)); + } /////////////////////////////////// + ///////// Table Functions ///////// + /////////////////////////////////// + /////////////////////////////////// + ///////// Internal Logic ////////// + /////////////////////////////////// + + }, { key: "generateExportList", value: function generateExportList(config, style, range, colVisProp) { this.cloneTableStyle = style; @@ -15020,11 +14461,220 @@ _this.prevHeaderFilterChangeCheck = "{}"; _this.changed = false; //has filtering changed since last render - return _this; - } //initialize column header filter + _this.registerTableOption("filterMode", "local"); //local or remote filtering + + + _this.registerTableOption("initialFilter", false); //initial filtering criteria + + + _this.registerTableOption("initialHeaderFilter", false); //initial header filtering criteria + + + _this.registerTableOption("headerFilterLiveFilterDelay", 300); //delay before updating column after user types in header filter + + + _this.registerColumnOption("headerFilter"); + + _this.registerColumnOption("headerFilterPlaceholder"); + + _this.registerColumnOption("headerFilterParams"); + + _this.registerColumnOption("headerFilterEmptyCheck"); + + _this.registerColumnOption("headerFilterFunc"); + + _this.registerColumnOption("headerFilterFuncParams"); + + _this.registerColumnOption("headerFilterLiveFilter"); + + _this.registerTableFunction("searchRows", _this.searchRows.bind(_assertThisInitialized(_this))); + + _this.registerTableFunction("searchData", _this.searchData.bind(_assertThisInitialized(_this))); + + _this.registerTableFunction("setFilter", _this.userSetFilter.bind(_assertThisInitialized(_this))); + + _this.registerTableFunction("refreshFilter", _this.userRefreshFilter.bind(_assertThisInitialized(_this))); + + _this.registerTableFunction("addFilter", _this.userAddFilter.bind(_assertThisInitialized(_this))); + + _this.registerTableFunction("getFilters", _this.getFilters.bind(_assertThisInitialized(_this))); + + _this.registerTableFunction("setHeaderFilterFocus", _this.userSetHeaderFilterFocus.bind(_assertThisInitialized(_this))); + + _this.registerTableFunction("getHeaderFilterValue", _this.userGetHeaderFilterValue.bind(_assertThisInitialized(_this))); + + _this.registerTableFunction("setHeaderFilterValue", _this.userSetHeaderFilterValue.bind(_assertThisInitialized(_this))); + + _this.registerTableFunction("getHeaderFilters", _this.getHeaderFilters.bind(_assertThisInitialized(_this))); + + _this.registerTableFunction("removeFilter", _this.userRemoveFilter.bind(_assertThisInitialized(_this))); + + _this.registerTableFunction("clearFilter", _this.userClearFilter.bind(_assertThisInitialized(_this))); + + _this.registerTableFunction("clearHeaderFilter", _this.userClearHeaderFilter.bind(_assertThisInitialized(_this))); + + _this.registerComponentFunction("column", "headerFilterFocus", _this.setHeaderFilterFocus.bind(_assertThisInitialized(_this))); + _this.registerComponentFunction("column", "reloadHeaderFilter", _this.reloadHeaderFilter.bind(_assertThisInitialized(_this))); + + _this.registerComponentFunction("column", "getHeaderFilterValue", _this.getHeaderFilterValue.bind(_assertThisInitialized(_this))); + + _this.registerComponentFunction("column", "setHeaderFilterValue", _this.setHeaderFilterValue.bind(_assertThisInitialized(_this))); + + return _this; + } _createClass(Filter, [{ + key: "initialize", + value: function initialize() { + this.subscribe("column-init", this.initializeColumnHeaderFilter.bind(this)); + this.subscribe("column-width-fit-before", this.hideHeaderFilterElements.bind(this)); + this.subscribe("column-width-fit-after", this.showHeaderFilterElements.bind(this)); + this.subscribe("table-built", this.tableBuilt.bind(this)); + + if (this.table.options.filterMode === "remote") { + this.subscribe("data-params", this.remoteFilterParams.bind(this)); + } + + this.registerDataHandler(this.filter.bind(this), 10); + } + }, { + key: "tableBuilt", + value: function tableBuilt() { + var _this2 = this; + + if (this.table.options.initialFilter) { + this.setFilter(this.table.options.initialFilter); + } + + if (this.table.options.initialHeaderFilter) { + this.table.options.initialHeaderFilter.forEach(function (item) { + var column = _this2.table.columnManager.findColumn(item.field); + + if (column) { + _this2.setHeaderFilterValue(column, item.value); + } else { + console.warn("Column Filter Error - No matching column found:", item.field); + return false; + } + }); + } + } + }, { + key: "remoteFilterParams", + value: function remoteFilterParams(data, config, silent, params) { + params.filter = this.getFilters(true, true); + return params; + } /////////////////////////////////// + ///////// Table Functions ///////// + /////////////////////////////////// + //set standard filters + + }, { + key: "userSetFilter", + value: function userSetFilter(field, type, value, params) { + this.setFilter(field, type, value, params); + this.refreshFilter(); + } //set standard filters + + }, { + key: "userRefreshFilter", + value: function userRefreshFilter() { + this.refreshFilter(); + } //add filter to array + + }, { + key: "userAddFilter", + value: function userAddFilter(field, type, value, params) { + this.addFilter(field, type, value, params); + this.refreshFilter(); + } + }, { + key: "userSetHeaderFilterFocus", + value: function userSetHeaderFilterFocus(field) { + var column = this.table.columnManager.findColumn(field); + + if (column) { + this.setHeaderFilterFocus(column); + } else { + console.warn("Column Filter Focus Error - No matching column found:", field); + return false; + } + } + }, { + key: "userGetHeaderFilterValue", + value: function userGetHeaderFilterValue(field) { + var column = this.table.columnManager.findColumn(field); + + if (column) { + return this.getHeaderFilterValue(column); + } else { + console.warn("Column Filter Error - No matching column found:", field); + } + } + }, { + key: "userSetHeaderFilterValue", + value: function userSetHeaderFilterValue(field, value) { + var column = this.table.columnManager.findColumn(field); + + if (column) { + this.setHeaderFilterValue(column, value); + } else { + console.warn("Column Filter Error - No matching column found:", field); + return false; + } + } //remove filter from array + + }, { + key: "userRemoveFilter", + value: function userRemoveFilter(field, type, value) { + this.removeFilter(field, type, value); + this.refreshFilter(); + } //clear filters + + }, { + key: "userClearFilter", + value: function userClearFilter(all) { + this.clearFilter(all); + this.refreshFilter(); + } //clear header filters + + }, { + key: "userClearHeaderFilter", + value: function userClearHeaderFilter() { + this.clearHeaderFilter(); + this.refreshFilter(); + } //search for specific row components + + }, { + key: "searchRows", + value: function searchRows(field, type, value) { + return this.search("rows", field, type, value); + } //search for specific data + + }, { + key: "searchData", + value: function searchData(field, type, value) { + return this.search("data", field, type, value); + } /////////////////////////////////// + ///////// Internal Logic ////////// + /////////////////////////////////// + + }, { + key: "initializeColumnHeaderFilter", + value: function initializeColumnHeaderFilter(column) { + var def = column.definition; + + if (def.headerFilter) { + if (typeof def.headerFilterPlaceholder !== "undefined" && def.field) { + this.module("localize").setHeaderFilterColumnPlaceholder(def.field, def.headerFilterPlaceholder); + } + + this.initializeColumn(column); + } + } //initialize column header filter + + }, { key: "initializeColumn", value: function initializeColumn(column, value) { var self = this, @@ -15111,8 +14761,8 @@ if (self.prevHeaderFilterChangeCheck !== filterChangeCheck) { self.prevHeaderFilterChangeCheck = filterChangeCheck; - self.changed = true; - self.table.rowManager.filterRefresh(); + self.trackChanges(); + self.refreshFilter(); } } @@ -15130,7 +14780,7 @@ }, { key: "generateHeaderFilterElement", value: function generateHeaderFilterElement(column, initialValue, reinitialize) { - var _this2 = this; + var _this3 = this; var self = this, success = column.modules.filter.success, @@ -15234,12 +14884,12 @@ if (field) { - self.table.modules.localize.bind("headerFilters|columns|" + column.definition.field, function (value) { - editorElement.setAttribute("placeholder", typeof value !== "undefined" && value ? value : self.table.modules.localize.getText("headerFilters|default")); + self.langBind("headerFilters|columns|" + column.definition.field, function (value) { + editorElement.setAttribute("placeholder", typeof value !== "undefined" && value ? value : self.langText("headerFilters|default")); }); } else { - self.table.modules.localize.bind("headerFilters|default", function (value) { - editorElement.setAttribute("placeholder", typeof self.column.definition.headerFilterPlaceholder !== "undefined" && self.column.definition.headerFilterPlaceholder ? self.column.definition.headerFilterPlaceholder : value); + self.langBind("headerFilters|default", function (value) { + editorElement.setAttribute("placeholder", value); }); } //focus on element on click @@ -15249,12 +14899,12 @@ editorElement.focus(); }); editorElement.addEventListener("focus", function (e) { - var left = _this2.table.columnManager.element.scrollLeft; + var left = _this3.table.columnManager.element.scrollLeft; - if (left !== _this2.table.rowManager.element.scrollLeft) { - _this2.table.rowManager.scrollHorizontal(left); + if (left !== _this3.table.rowManager.element.scrollLeft) { + _this3.table.rowManager.scrollHorizontal(left); - _this2.table.columnManager.scrollHorizontal(left); + _this3.table.columnManager.scrollHorizontal(left); } }); //live update filters as user types @@ -15373,6 +15023,25 @@ console.warn("Column Filter Error - No header filter set on column:", column.getField()); } } + } + }, { + key: "refreshFilter", + value: function refreshFilter() { + if (this.table.options.filterMode === "remote") { + this.reloadData(); + } else { + this.refreshData(); + } //TODO - Persist left position of row manager + // left = this.scrollLeft; + // this.scrollHorizontal(left); + + } //check if the filters has changed since last use + + }, { + key: "trackChanges", + value: function trackChanges() { + this.changed = true; + this.dispatch("filter-changed"); } //check if the filters has changed since last use }, { @@ -15386,8 +15055,7 @@ }, { key: "setFilter", value: function setFilter(field, type, value, params) { - var self = this; - self.filterList = []; + this.filterList = []; if (!Array.isArray(field)) { field = [{ @@ -15398,13 +15066,13 @@ }]; } - self.addFilter(field); + this.addFilter(field); } //add filter to array }, { key: "addFilter", value: function addFilter(field, type, value, params) { - var self = this; + var _this4 = this; if (!Array.isArray(field)) { field = [{ @@ -15416,23 +15084,19 @@ } field.forEach(function (filter) { - filter = self.findFilter(filter); + filter = _this4.findFilter(filter); if (filter) { - self.filterList.push(filter); - self.changed = true; + _this4.filterList.push(filter); + + _this4.changed = true; } }); - - if (this.table.options.persistence && this.table.modExists("persistence", true) && this.table.modules.persistence.config.filter) { - this.table.modules.persistence.save("filter"); - } } }, { key: "findFilter", value: function findFilter(filter) { - var self = this, - column; + var column; if (Array.isArray(filter)) { return this.findSubFilters(filter); @@ -15446,7 +15110,7 @@ }; } else { if (Filter.filters[filter.type]) { - column = self.table.columnManager.getColumnByField(filter.field); + column = this.table.columnManager.getColumnByField(filter.field); if (column) { filterFunc = function filterFunc(data) { @@ -15468,10 +15132,11 @@ }, { key: "findSubFilters", value: function findSubFilters(filters) { - var self = this, - output = []; + var _this5 = this; + + var output = []; filters.forEach(function (filter) { - filter = self.findFilter(filter); + filter = _this5.findFilter(filter); if (filter) { output.push(filter); @@ -15504,14 +15169,14 @@ }, { key: "filtersToArray", value: function filtersToArray(filterList, ajax) { - var _this3 = this; + var _this6 = this; var output = []; filterList.forEach(function (filter) { var item; if (Array.isArray(filter)) { - output.push(_this3.filtersToArray(filter, ajax)); + output.push(_this6.filtersToArray(filter, ajax)); } else { item = { field: filter.field, @@ -15550,7 +15215,7 @@ }, { key: "removeFilter", value: function removeFilter(field, type, value) { - var self = this; + var _this7 = this; if (!Array.isArray(field)) { field = [{ @@ -15564,26 +15229,22 @@ var index = -1; if (_typeof(filter.field) == "object") { - index = self.filterList.findIndex(function (element) { + index = _this7.filterList.findIndex(function (element) { return filter === element; }); } else { - index = self.filterList.findIndex(function (element) { + index = _this7.filterList.findIndex(function (element) { return filter.field === element.field && filter.type === element.type && filter.value === element.value; }); } if (index > -1) { - self.filterList.splice(index, 1); - self.changed = true; + _this7.filterList.splice(index, 1); } else { console.warn("Filter Error - No matching filter type found, ignoring: ", filter.type); } }); - - if (this.table.options.persistence && this.table.modExists("persistence", true) && this.table.modules.persistence.config.filter) { - this.table.modules.persistence.save("filter"); - } + this.trackChanges(); } //clear filters }, { @@ -15595,35 +15256,34 @@ this.clearHeaderFilter(); } - this.changed = true; - - if (this.table.options.persistence && this.table.modExists("persistence", true) && this.table.modules.persistence.config.filter) { - this.table.modules.persistence.save("filter"); - } + this.trackChanges(); } //clear header filters }, { key: "clearHeaderFilter", value: function clearHeaderFilter() { - var self = this; + var _this8 = this; + this.headerFilters = {}; - self.prevHeaderFilterChangeCheck = "{}"; + this.prevHeaderFilterChangeCheck = "{}"; this.headerFilterColumns.forEach(function (column) { if (typeof column.modules.filter.value !== "undefined") { delete column.modules.filter.value; } column.modules.filter.prevSuccess = undefined; - self.reloadHeaderFilter(column); + + _this8.reloadHeaderFilter(column); }); - this.changed = true; + this.trackChanges(); } //search data and return matching rows }, { key: "search", value: function search(searchType, field, type, value) { - var self = this, - activeRows = [], + var _this9 = this; + + var activeRows = [], filterList = []; if (!Array.isArray(field)) { @@ -15635,7 +15295,7 @@ } field.forEach(function (filter) { - filter = self.findFilter(filter); + filter = _this9.findFilter(filter); if (filter) { filterList.push(filter); @@ -15644,7 +15304,7 @@ this.table.rowManager.rows.forEach(function (row) { var match = true; filterList.forEach(function (filter) { - if (!self.filterRecurse(filter, row.getData())) { + if (!_this9.filterRecurse(filter, row.getData())) { match = false; } }); @@ -15659,17 +15319,18 @@ }, { key: "filter", value: function filter(rowList, filters) { - var self = this, - activeRows = [], + var _this10 = this; + + var activeRows = [], activeRowComponents = []; - if (self.table.options.dataFiltering) { - self.table.options.dataFiltering.call(self.table, self.getFilters()); + if (this.subscribedExternal("dataFiltering")) { + this.dispatchExternal("dataFiltering", this.getFilters()); } - if (!self.table.options.ajaxFiltering && (self.filterList.length || Object.keys(self.headerFilters).length)) { + if (this.table.options.filterMode !== "remote" && (this.filterList.length || Object.keys(this.headerFilters).length)) { rowList.forEach(function (row) { - if (self.filterRow(row)) { + if (_this10.filterRow(row)) { activeRows.push(row); } }); @@ -15677,11 +15338,11 @@ activeRows = rowList.slice(0); } - if (self.table.options.dataFiltered) { + if (this.subscribedExternal("dataFiltered")) { activeRows.forEach(function (row) { activeRowComponents.push(row.getComponent()); }); - self.table.options.dataFiltered.call(self.table, self.getFilters(), activeRowComponents); + this.dispatchExternal("dataFiltered", this.getFilters(), activeRowComponents); } return activeRows; @@ -15690,17 +15351,18 @@ }, { key: "filterRow", value: function filterRow(row, filters) { - var self = this, - match = true, + var _this11 = this; + + var match = true, data = row.getData(); - self.filterList.forEach(function (filter) { - if (!self.filterRecurse(filter, data)) { + this.filterList.forEach(function (filter) { + if (!_this11.filterRecurse(filter, data)) { match = false; } }); - for (var field in self.headerFilters) { - if (!self.headerFilters[field].func(data)) { + for (var field in this.headerFilters) { + if (!this.headerFilters[field].func(data)) { match = false; } } @@ -15710,12 +15372,13 @@ }, { key: "filterRecurse", value: function filterRecurse(filter, data) { - var self = this, - match = false; + var _this12 = this; + + var match = false; if (Array.isArray(filter)) { filter.forEach(function (subFilter) { - if (self.filterRecurse(subFilter, data)) { + if (_this12.filterRecurse(subFilter, data)) { match = true; } }); @@ -16291,15 +15954,47 @@ var _super = _createSuper(Format); - function Format() { + function Format(table) { + var _this; + _classCallCheck(this, Format); - return _super.apply(this, arguments); + _this = _super.call(this, table); + + _this.registerColumnOption("formatter"); + + _this.registerColumnOption("formatterParams"); + + _this.registerColumnOption("formatterPrint"); + + _this.registerColumnOption("formatterPrintParams"); + + _this.registerColumnOption("formatterClipboard"); + + _this.registerColumnOption("formatterClipboardParams"); + + _this.registerColumnOption("formatterHtmlOutput"); + + _this.registerColumnOption("formatterHtmlOutputParams"); + + _this.registerColumnOption("titleFormatter"); + + _this.registerColumnOption("titleFormatterParams"); + + return _this; } _createClass(Format, [{ + key: "initialize", + value: function initialize() { + this.subscribe("cell-format", this.formatValue.bind(this)); + this.subscribe("cell-rendered", this.cellRendered.bind(this)); + this.subscribe("column-layout", this.initializeColumn.bind(this)); + this.subscribe("column-format", this.formatHeader.bind(this)); + } //initialize column formatter + + }, { key: "initializeColumn", - //initialize column formatter value: function initializeColumn(column) { column.modules.format = this.lookupFormatter(column, ""); @@ -16352,6 +16047,34 @@ cell.modules.format.renderedCallback(); cell.modules.format.rendered = true; } + } //return a formatted value for a column header + + }, { + key: "formatHeader", + value: function formatHeader(column, title, el) { + var formatter, params, onRendered, mockCell; + + if (column.definition.titleFormatter) { + formatter = this.getFormatter(column.definition.titleFormatter); + + onRendered = function onRendered(callback) { + column.titleFormatterRendered = callback; + }; + + mockCell = { + getValue: function getValue() { + return title; + }, + getElement: function getElement() { + return el; + } + }; + params = column.definition.titleFormatterParams || {}; + params = typeof params === "function" ? params() : params; + return formatter.call(this, mockCell, params, onRendered); + } else { + return title; + } } //return a formatted value for a cell }, { @@ -16475,6 +16198,9 @@ _this.initializationMode = "left"; _this.active = false; _this.scrollEndTimer = false; + + _this.registerColumnOption("frozen"); + return _this; } //reset initial state @@ -16491,6 +16217,23 @@ this.active = false; this.table.columnManager.headersElement.style.marginLeft = 0; this.table.columnManager.element.style.paddingRight = 0; + } + }, { + key: "initialize", + value: function initialize() { + this.subscribe("cell-layout", this.layoutCell.bind(this)); + this.subscribe("column-init", this.initializeColumn.bind(this)); + this.subscribe("column-width", this.layout.bind(this)); + this.subscribe("row-layout-before", this.layoutRow.bind(this)); + this.subscribe("table-layout", this.layout.bind(this)); + this.subscribe("scroll-horizontal", this.scrollHorizontal.bind(this)); + this.subscribe("columns-loading", this.reset.bind(this)); + this.subscribe("table-redraw", this.layout.bind(this)); + } + }, { + key: "layoutCell", + value: function layoutCell(cell) { + this.layoutElement(cell.element, cell.column); } //initialize specific column }, { @@ -16735,8 +16478,13 @@ _this = _super.call(this, table); _this.topElement = document.createElement("div"); - _this.rows = []; - _this.displayIndex = 0; //index in display pipeline + _this.rows = []; //register component functions + + _this.registerComponentFunction("row", "freeze", _this.freezeRow.bind(_assertThisInitialized(_this))); + + _this.registerComponentFunction("row", "unfreeze", _this.unfreezeRow.bind(_assertThisInitialized(_this))); + + _this.registerComponentFunction("row", "isFrozen", _this.isRowFrozen.bind(_assertThisInitialized(_this))); return _this; } @@ -16748,16 +16496,14 @@ this.topElement.classList.add("tabulator-frozen-rows-holder"); // this.table.columnManager.element.append(this.topElement); this.table.columnManager.getElement().insertBefore(this.topElement, this.table.columnManager.headersElement.nextSibling); + this.subscribe("row-deleting", this.detachRow.bind(this)); + this.registerDisplayHandler(this.getRows.bind(this), 10); } }, { - key: "setDisplayIndex", - value: function setDisplayIndex(index) { - this.displayIndex = index; - } - }, { - key: "getDisplayIndex", - value: function getDisplayIndex() { - return this.displayIndex; + key: "isRowFrozen", + value: function isRowFrozen(row) { + var index = this.rows.indexOf(row); + return index > -1; } }, { key: "isFrozen", @@ -16839,7 +16585,90 @@ FrozenRows.moduleName = "frozenRows"; - var Group$1 = /*#__PURE__*/function () { + //public group object + var GroupComponent = /*#__PURE__*/function () { + function GroupComponent(group) { + _classCallCheck(this, GroupComponent); + + this._group = group; + this.type = "GroupComponent"; + return new Proxy(this, { + get: function get(target, name, receiver) { + if (typeof target[name] !== "undefined") { + return target[name]; + } else { + return target._group.table.componentFunctionBinder.handle("row", target._group, name); + } + } + }); + } + + _createClass(GroupComponent, [{ + key: "getKey", + value: function getKey() { + return this._group.key; + } + }, { + key: "getField", + value: function getField() { + return this._group.field; + } + }, { + key: "getElement", + value: function getElement() { + return this._group.element; + } + }, { + key: "getRows", + value: function getRows() { + return this._group.getRows(true); + } + }, { + key: "getSubGroups", + value: function getSubGroups() { + return this._group.getSubGroups(true); + } + }, { + key: "getParentGroup", + value: function getParentGroup() { + return this._group.parent ? this._group.parent.getComponent() : false; + } + }, { + key: "isVisible", + value: function isVisible() { + return this._group.visible; + } + }, { + key: "show", + value: function show() { + this._group.show(); + } + }, { + key: "hide", + value: function hide() { + this._group.hide(); + } + }, { + key: "toggle", + value: function toggle() { + this._group.toggleVisibility(); + } + }, { + key: "_getSelf", + value: function _getSelf() { + return this._group; + } + }, { + key: "getTable", + value: function getTable() { + return this._group.groupManager.table; + } + }]); + + return GroupComponent; + }(); + + var Group = /*#__PURE__*/function () { function Group(groupManager, parent, level, key, field, generator, oldGroup) { _classCallCheck(this, Group); @@ -16921,25 +16750,7 @@ value: function addBindings() { var _this2 = this; - var dblTap, tapHold, tap, toggleElement; //handle group click events - - if (this.groupManager.table.options.groupClick) { - this.element.addEventListener("click", function (e) { - _this2.groupManager.table.options.groupClick.call(_this2.groupManager.table, e, _this2.getComponent()); - }); - } - - if (this.groupManager.table.options.groupDblClick) { - this.element.addEventListener("dblclick", function (e) { - _this2.groupManager.table.options.groupDblClick.call(_this2.groupManager.table, e, _this2.getComponent()); - }); - } - - if (this.groupManager.table.options.groupContext) { - this.element.addEventListener("contextmenu", function (e) { - _this2.groupManager.table.options.groupContext.call(_this2.groupManager.table, e, _this2.getComponent()); - }); - } + var dblTap, tapHold, tap, toggleElement; if ((this.groupManager.table.options.groupContextMenu || this.groupManager.table.options.groupClickMenu) && this.groupManager.table.modExists("menu")) { this.groupManager.table.modules.menu.initializeGroup.call(this.groupManager.table.modules.menu, this); @@ -17289,7 +17100,7 @@ this.groupManager.updateGroupRows(true); } - this.groupManager.table.options.groupVisibilityChanged.call(this.table, this.getComponent(), false); + this.groupManager.table.externalEvents.dispatch("groupVisibilityChanged", this.getComponent(), false); } }, { key: "show", @@ -17325,7 +17136,7 @@ this.groupManager.updateGroupRows(true); } - this.groupManager.table.options.groupVisibilityChanged.call(this.table, this.getComponent(), true); + this.groupManager.table.externalEvents.dispatch("groupVisibilityChanged", this.getComponent(), true); } }, { key: "_visSet", @@ -17462,7 +17273,7 @@ this.initialized = false; this.height = 0; - if (Helpers.elVisible(this.element)) { + if (Helpers$1.elVisible(this.element)) { this.initialize(true); } } @@ -17538,6 +17349,48 @@ _this.groups = {}; //hold row groups _this.displayIndex = 0; //index in display pipeline + //register table options + + _this.registerTableOption("groupBy", false); //enable table grouping and set field to group by + + + _this.registerTableOption("groupStartOpen", true); //starting state of group + + + _this.registerTableOption("groupValues", false); + + _this.registerTableOption("groupUpdateOnCellEdit", false); + + _this.registerTableOption("groupHeader", false); //header generation function + + + _this.registerTableOption("groupHeaderPrint", null); + + _this.registerTableOption("groupHeaderClipboard", null); + + _this.registerTableOption("groupHeaderHtmlOutput", null); + + _this.registerTableOption("groupHeaderDownload", null); + + _this.registerTableOption("groupToggleElement", "arrow"); + + _this.registerTableOption("groupClosedShowCalcs", false); //register table functions + + + _this.registerTableFunction("setGroupBy", _this.setGroupBy.bind(_assertThisInitialized(_this))); + + _this.registerTableFunction("setGroupValues", _this.setGroupValues.bind(_assertThisInitialized(_this))); + + _this.registerTableFunction("setGroupStartOpen", _this.setGroupStartOpen.bind(_assertThisInitialized(_this))); + + _this.registerTableFunction("setGroupHeader", _this.setGroupHeader.bind(_assertThisInitialized(_this))); + + _this.registerTableFunction("getGroups", _this.userGetGroups.bind(_assertThisInitialized(_this))); + + _this.registerTableFunction("getGroupedData", _this.userGetGroupedData.bind(_assertThisInitialized(_this))); //register component functions + + + _this.registerComponentFunction("row", "getGroup", _this.rowGetGroup.bind(_assertThisInitialized(_this))); return _this; } //initialize group configuration @@ -17548,94 +17401,268 @@ value: function initialize() { var _this2 = this; - var groupBy = this.table.options.groupBy, - startOpen = this.table.options.groupStartOpen, - groupHeader = this.table.options.groupHeader; - this.allowedValues = this.table.options.groupValues; + if (this.table.options.groupBy) { + var groupBy = this.table.options.groupBy, + startOpen = this.table.options.groupStartOpen, + groupHeader = this.table.options.groupHeader; + this.allowedValues = this.table.options.groupValues; - if (Array.isArray(groupBy) && Array.isArray(groupHeader) && groupBy.length > groupHeader.length) { - console.warn("Error creating group headers, groupHeader array is shorter than groupBy array"); - } + if (Array.isArray(groupBy) && Array.isArray(groupHeader) && groupBy.length > groupHeader.length) { + console.warn("Error creating group headers, groupHeader array is shorter than groupBy array"); + } - this.headerGenerator = [function () { - return ""; - }]; - this.startOpen = [function () { - return false; - }]; //starting state of group + this.headerGenerator = [function () { + return ""; + }]; + this.startOpen = [function () { + return false; + }]; //starting state of group - this.table.modules.localize.bind("groups|item", function (langValue, lang) { - _this2.headerGenerator[0] = function (value, count, data) { - //header layout function - return (typeof value === "undefined" ? "" : value) + "(" + count + " " + (count === 1 ? langValue : lang.groups.items) + ")"; - }; + this.langBind("groups|item", function (langValue, lang) { + _this2.headerGenerator[0] = function (value, count, data) { + //header layout function + return (typeof value === "undefined" ? "" : value) + "(" + count + " " + (count === 1 ? langValue : lang.groups.items) + ")"; + }; + }); + this.groupIDLookups = []; + + if (Array.isArray(groupBy) || groupBy) { + if (this.table.modExists("columnCalcs") && this.table.options.columnCalcs != "table" && this.table.options.columnCalcs != "both") { + this.table.modules.columnCalcs.removeCalcs(); + } + } else { + if (this.table.modExists("columnCalcs") && this.table.options.columnCalcs != "group") { + var cols = this.table.columnManager.getRealColumns(); + cols.forEach(function (col) { + if (col.definition.topCalc) { + _this2.table.modules.columnCalcs.initializeTopRow(); + } + + if (col.definition.bottomCalc) { + _this2.table.modules.columnCalcs.initializeBottomRow(); + } + }); + } + } + + if (!Array.isArray(groupBy)) { + groupBy = [groupBy]; + } + + groupBy.forEach(function (group, i) { + var lookupFunc, column; + + if (typeof group == "function") { + lookupFunc = group; + } else { + column = _this2.table.columnManager.getColumnByField(group); + + if (column) { + lookupFunc = function lookupFunc(data) { + return column.getFieldValue(data); + }; + } else { + lookupFunc = function lookupFunc(data) { + return data[group]; + }; + } + } + + _this2.groupIDLookups.push({ + field: typeof group === "function" ? false : group, + func: lookupFunc, + values: _this2.allowedValues ? _this2.allowedValues[i] : false + }); + }); + + if (startOpen) { + if (!Array.isArray(startOpen)) { + startOpen = [startOpen]; + } + + startOpen.forEach(function (level) { + }); + this.startOpen = startOpen; + } + + if (groupHeader) { + this.headerGenerator = Array.isArray(groupHeader) ? groupHeader : [groupHeader]; + } + + if (this.table.options.groupUpdateOnCellEdit) { + this.subscribe("cell-value-updated", this.cellUpdated.bind(this)); + this.subscribe("row-data-changed", this.reassignRowToGroup.bind(this), 0); + } + + this.subscribe("row-deleting", this.rowDeleting.bind(this)); + this.subscribe("row-deleted", this.rowsUpdated.bind(this)); + this.subscribe("scroll-horizontal", this.scrollHeaders.bind(this)); + this.subscribe("rows-wipe", this.wipe.bind(this)); + this.subscribe("rows-added", this.rowsUpdated.bind(this)); + this.subscribe("row-moving", this.rowMoving.bind(this)); + this.subscribe("row-adding-index", this.rowAddingIndex.bind(this)); + this.subscribe("rows-sample", this.rowSample.bind(this)); + this.subscribe("render-virtual-fill", this.rowAddingIndex.bind(this)); + this.registerDisplayHandler(this.getRows.bind(this), 20); + this.initialized = true; + } + } + }, { + key: "rowSample", + value: function rowSample(rows, prevValue) { + var group = this.getGroups(false)[0]; + prevValue.push(group.getRows(false)[0]); + return prevValue; + } + }, { + key: "virtualRenderFill", + value: function virtualRenderFill() { + var el = this.table.rowManager.tableElement; + rows = this.table.rowManager.getVisibleRows(); + rows = rows.filter(function (row) { + return row.type !== "group"; }); - this.groupIDLookups = []; + el.style.minWidth = !rows.length ? this.table.columnManager.getWidth() + "px" : ""; // if(this.table.options.groupBy){ + // if(this.layoutMode() != "fitDataFill" && rowsCount == this.table.modules.groupRows.countGroups()){ + // el.style.minWidth = this.table.columnManager.getWidth() + "px"; + // } + // } + } + }, { + key: "rowAddingIndex", + value: function rowAddingIndex(row, index, top) { + this.assignRowToGroup(row); + var groupRows = row.modules.group.rows; + + if (groupRows.length > 1) { + if (!index || index && groupRows.indexOf(index) == -1) { + if (top) { + if (groupRows[0] !== row) { + index = groupRows[0]; + this.table.rowManager.moveRowInArray(row.modules.group.rows, row, index, !top); + } + } else { + if (groupRows[groupRows.length - 1] !== row) { + index = groupRows[groupRows.length - 1]; + this.table.rowManager.moveRowInArray(row.modules.group.rows, row, index, !top); + } + } + } else { + this.table.rowManager.moveRowInArray(row.modules.group.rows, row, index, !top); + } + } + + return index; + } + }, { + key: "trackChanges", + value: function trackChanges() { + this.dispatch("group-changed"); + } /////////////////////////////////// + ///////// Table Functions ///////// + /////////////////////////////////// + + }, { + key: "setGroupBy", + value: function setGroupBy(groups) { + this.table.options.groupBy = groups; + this.initialize(); + this.refreshData(false, "display"); + this.trackChanges(); + } + }, { + key: "setGroupValues", + value: function setGroupValues(groupValues) { + this.table.options.groupValues = groupValues; + this.initialize(); + this.refreshData(false, "display"); + this.trackChanges(); + } + }, { + key: "setGroupStartOpen", + value: function setGroupStartOpen(values) { + this.table.options.groupStartOpen = values; + this.initialize(); - if (Array.isArray(groupBy) || groupBy) { - if (this.table.modExists("columnCalcs") && this.table.options.columnCalcs != "table" && this.table.options.columnCalcs != "both") { - this.table.modules.columnCalcs.removeCalcs(); - } + if (this.table.options.groupBy) { + this.refreshData(); + this.trackChanges(); } else { - if (this.table.modExists("columnCalcs") && this.table.options.columnCalcs != "group") { - var cols = this.table.columnManager.getRealColumns(); - cols.forEach(function (col) { - if (col.definition.topCalc) { - _this2.table.modules.columnCalcs.initializeTopRow(); - } - - if (col.definition.bottomCalc) { - _this2.table.modules.columnCalcs.initializeBottomRow(); - } - }); - } + console.warn("Grouping Update - cant refresh view, no groups have been set"); } + } + }, { + key: "setGroupHeader", + value: function setGroupHeader(values) { + this.table.options.groupHeader = values; + this.initialize(); - if (!Array.isArray(groupBy)) { - groupBy = [groupBy]; + if (this.table.options.groupBy) { + this.refreshData(); + this.trackChanges(); + } else { + console.warn("Grouping Update - cant refresh view, no groups have been set"); } + } + }, { + key: "userGetGroups", + value: function userGetGroups(values) { + return this.getGroups(true); + } // get grouped table data in the same format as getData() - groupBy.forEach(function (group, i) { - var lookupFunc, column; + }, { + key: "userGetGroupedData", + value: function userGetGroupedData() { + return this.table.options.groupBy ? this.getGroupedData() : this.getData(); + } /////////////////////////////////////// + ///////// Component Functions ///////// + /////////////////////////////////////// - if (typeof group == "function") { - lookupFunc = group; - } else { - column = _this2.table.columnManager.getColumnByField(group); + }, { + key: "rowGetGroup", + value: function rowGetGroup(row) { + return row.modules.group ? row.modules.group.getComponent() : false; + } /////////////////////////////////// + ///////// Internal Logic ////////// + /////////////////////////////////// - if (column) { - lookupFunc = function lookupFunc(data) { - return column.getFieldValue(data); - }; - } else { - lookupFunc = function lookupFunc(data) { - return data[group]; - }; - } - } + }, { + key: "rowMoving", + value: function rowMoving(from, to, after) { + if (!after && to instanceof Group) { + to = this.table.rowManager.prevDisplayRow(from) || to; + } - _this2.groupIDLookups.push({ - field: typeof group === "function" ? false : group, - func: lookupFunc, - values: _this2.allowedValues ? _this2.allowedValues[i] : false - }); - }); + var toGroup = to.modules.group; + var fromGroup = from.modules.group; - if (startOpen) { - if (!Array.isArray(startOpen)) { - startOpen = [startOpen]; + if (toGroup === fromGroup) { + this.table.rowManager.moveRowInArray(toGroup.rows, from, to, after); + } else { + if (fromGroup) { + fromGroup.removeRow(from); } - startOpen.forEach(function (level) { - }); - this.startOpen = startOpen; + toGroup.insertRow(from, to, after); } - - if (groupHeader) { - this.headerGenerator = Array.isArray(groupHeader) ? groupHeader : [groupHeader]; + } + }, { + key: "rowDeleting", + value: function rowDeleting(row) { + //remove from group + if (row.modules.group) { + row.modules.group.removeRow(row); } - - this.initialized = true; + } + }, { + key: "rowsUpdated", + value: function rowsUpdated(row) { + this.updateGroupRows(true); + } + }, { + key: "cellUpdated", + value: function cellUpdated(cell) { + this.reassignRowToGroup(cell.row); } }, { key: "setDisplayIndex", @@ -17652,11 +17679,11 @@ key: "getRows", value: function getRows(rows) { if (this.groupIDLookups.length) { - this.table.options.dataGrouping.call(this.table); + this.dispatchExternal("dataGrouping"); this.generateGroups(rows); - if (this.table.options.dataGrouped) { - this.table.options.dataGrouped.call(this.table, this.getGroups(true)); + if (this.subscribedExternal("dataGrouped")) { + this.dispatchExternal("dataGrouped", this.getGroups(true)); } return this.updateGroupRows(); @@ -17666,10 +17693,10 @@ } }, { key: "getGroups", - value: function getGroups(compoment) { + value: function getGroups(component) { var groupComponents = []; this.groupList.forEach(function (group) { - groupComponents.push(compoment ? group.getComponent() : group); + groupComponents.push(component ? group.getComponent() : group); }); return groupComponents; } @@ -17784,7 +17811,7 @@ var groupKey = level + "_" + groupID, group; oldGroups = oldGroups || []; - group = new Group$1(this, false, level, groupID, this.groupIDLookups[0].field, this.headerGenerator[0], oldGroups[groupKey]); + group = new Group(this, false, level, groupID, this.groupIDLookups[0].field, this.headerGenerator[0], oldGroups[groupKey]); this.groups[groupKey] = group; this.groupList.push(group); } @@ -17814,19 +17841,21 @@ }, { key: "reassignRowToGroup", value: function reassignRowToGroup(row) { - var oldRowGroup = row.getGroup(), - oldGroupPath = oldRowGroup.getPath(), - newGroupPath = this.getExpectedPath(row), - samePath = true; // figure out if new group path is the same as old group path + if (row.type === "row") { + var oldRowGroup = row.modules.group, + oldGroupPath = oldRowGroup.getPath(), + newGroupPath = this.getExpectedPath(row), + samePath = true; // figure out if new group path is the same as old group path - var samePath = oldGroupPath.length == newGroupPath.length && oldGroupPath.every(function (element, index) { - return element === newGroupPath[index]; - }); // refresh if they new path and old path aren't the same (aka the row's groupings have changed) + var samePath = oldGroupPath.length == newGroupPath.length && oldGroupPath.every(function (element, index) { + return element === newGroupPath[index]; + }); // refresh if they new path and old path aren't the same (aka the row's groupings have changed) - if (!samePath) { - oldRowGroup.removeRow(row); - this.assignRowToGroup(row, this.groups); - this.table.rowManager.refreshActiveData("group", false, true); + if (!samePath) { + oldRowGroup.removeRow(row); + this.assignRowToGroup(row, this.groups); + this.refreshData(true); + } } } }, { @@ -17854,7 +17883,7 @@ this.setDisplayIndex(displayIndex); } - this.table.rowManager.refreshActiveData("group", true, true); + this.refreshData(true); } return output; @@ -17862,8 +17891,8 @@ }, { key: "scrollHeaders", value: function scrollHeaders(left) { - if (this.table.options.virtualDomHoz) { - left -= this.table.vdomHoz.vDomPadLeft; + if (this.table.options.renderHorizontal === "virtual") { + left -= this.table.columnManager.renderer.vDomPadLeft; } left = left + "px"; @@ -17950,10 +17979,85 @@ _this = _super.call(this, table); _this.history = []; _this.index = -1; + + _this.registerTableOption("history", false); //enable edit history + + return _this; } _createClass(History, [{ + key: "initialize", + value: function initialize() { + if (this.table.options.history) { + this.subscribe("cell-value-updated", this.layoutCell.bind(this)); + this.subscribe("cell-delete", this.clearComponentHistory.bind(this)); + this.subscribe("row-delete", this.rowDeleted.bind(this)); + this.subscribe("rows-wipe", this.clear.bind(this)); + this.subscribe("row-added", this.clear.bind(this)); + this.subscribe("row-move", this.rowMoved.bind(this)); + } + + this.registerTableFunction("undo", this.undo.bind(this)); + this.registerTableFunction("redo", this.redo.bind(this)); + this.registerTableFunction("getHistoryUndoSize", this.getHistoryUndoSize.bind(this)); + this.registerTableFunction("getHistoryRedoSize", this.getHistoryRedoSize.bind(this)); + this.registerTableFunction("clearHistory", this.clear.bind(this)); + } + }, { + key: "rowMoved", + value: function rowMoved(from, to, after) { + this.action("rowMove", from, { + posFrom: this.table.rowManager.getRowPosition(from), + posTo: this.table.rowManager.getRowPosition(to), + to: to, + after: after + }); + } + }, { + key: "rowAdded", + value: function rowAdded(row, data, pos, index) { + this.action("rowAdd", row, { + data: data, + pos: pos, + index: index + }); + } + }, { + key: "rowDeleted", + value: function rowDeleted(row) { + var index, rows; + + if (this.table.options.groupBy) { + rows = row.getComponent().getGroup().rows; + index = rows.indexOf(row); + + if (index) { + index = rows[index - 1]; + } + } else { + index = row.table.rowManager.getRowIndex(row); + + if (index) { + index = row.table.rowManager.rows[index - 1]; + } + } + + this.history.action("rowDelete", row, { + data: row.getData(), + pos: !index, + index: index + }); + } + }, { + key: "cellUpdated", + value: function cellUpdated(cell) { + this.action("cellEdit", cell, { + oldValue: cell.oldValue, + newValue: cell.value + }); + } + }, { key: "clear", value: function clear() { this.history = []; @@ -18004,7 +18108,7 @@ var action = this.history[this.index]; History.undoers[action.type].call(this, action); this.index--; - this.table.options.historyUndo.call(this.table, action.type, action.component.getComponent(), action.data); + this.dispatchExternal("historyUndo", action.type, action.component.getComponent(), action.data); return true; } else { console.warn("History Undo Error - No more history to undo"); @@ -18018,7 +18122,7 @@ this.index++; var action = this.history[this.index]; History.redoers[action.type].call(this, action); - this.table.options.historyRedo.call(this.table, action.type, action.component.getComponent(), action.data); + this.dispatchExternal("historyRedo", action.type, action.component.getComponent(), action.data); return true; } else { console.warn("History Redo Error - No more history to redo"); @@ -18072,6 +18176,18 @@ } _createClass(HtmlTableImport, [{ + key: "initialize", + value: function initialize() { + this.subscribe("table-building", this.tableElementCheck.bind(this)); + } + }, { + key: "tableElementCheck", + value: function tableElementCheck() { + if (this.table.element.tagName === "TABLE") { + this.parseTable(); + } + } + }, { key: "parseTable", value: function parseTable() { var element = this.table.element, @@ -18081,7 +18197,7 @@ rows = element.getElementsByTagName("tbody")[0], data = []; this.hasIndex = false; - this.table.options.htmlImporting.call(this.table); + this.dispatchExternal("htmlImporting"); rows = rows ? rows.getElementsByTagName("tr") : []; //check for tablator inline options this._extractOptions(element, options); @@ -18128,7 +18244,7 @@ element.parentNode.replaceChild(newElement, element); options.data = data; - this.table.options.htmlImported.call(this.table); + this.dispatchExternal("htmlImported"); this.table.element = newElement; } //extract tabulator attribute options @@ -18249,6 +18365,334 @@ HtmlTableImport.moduleName = "htmlTableImport"; + var Interaction = /*#__PURE__*/function (_Module) { + _inherits(Interaction, _Module); + + var _super = _createSuper(Interaction); + + function Interaction(table) { + var _this; + + _classCallCheck(this, Interaction); + + _this = _super.call(this, table); + _this.eventMap = { + //row events + rowClick: "row-click", + rowDblClick: "row-dblclick", + rowContext: "row-contextmenu", + rowMouseEnter: "row-mouseenter", + rowMouseLeave: "row-mouseleave", + rowMouseOver: "row-mouseover", + rowMouseOut: "row-mouseout", + rowMouseMove: "row-mousemove", + rowTap: "row", + rowDblTap: "row", + rowTapHold: "row", + //cell events + cellClick: "cell-click", + cellDblClick: "cell-dblclick", + cellContext: "cell-contextmenu", + cellMouseEnter: "cell-mouseenter", + cellMouseLeave: "cell-mouseleave", + cellMouseOver: "cell-mouseover", + cellMouseOut: "cell-mouseout", + cellMouseMove: "cell-mousemove", + cellTap: "cell", + cellDblTap: "cell", + cellTapHold: "cell", + //column header events + headerClick: "column-click", + headerDblClick: "column-dblclick", + headerContext: "column-contextmenu", + headerMouseEnter: "column-mouseenter", + headerMouseLeave: "column-mouseleave", + headerMouseOver: "column-mouseover", + headerMouseOut: "column-mouseout", + headerMouseMove: "column-mousemove", + headerTap: "column", + headerDblTap: "column", + headerTapHold: "column", + //group header + groupClick: "group-click", + groupDblClick: "group-dblclick", + groupContext: "group-contextmenu", + groupMouseEnter: "group-mouseenter", + groupMouseLeave: "group-mouseleave", + groupMouseOver: "group-mouseover", + groupMouseOut: "group-mouseout", + groupMouseMove: "group-mousemove", + groupTap: "group", + groupDblTap: "group", + groupTapHold: "group" + }; + _this.subscribers = {}; + _this.touchSubscribers = {}; + _this.columnSubscribers = {}; + _this.touchWatchers = { + row: { + tap: null, + tapDbl: null, + tapHold: null + }, + cell: { + tap: null, + tapDbl: null, + tapHold: null + }, + column: { + tap: null, + tapDbl: null, + tapHold: null + } + }; + + _this.registerColumnOption("headerClick"); + + _this.registerColumnOption("headerDblClick"); + + _this.registerColumnOption("headerContext"); + + _this.registerColumnOption("headerMouseEnter"); + + _this.registerColumnOption("headerMouseLeave"); + + _this.registerColumnOption("headerMouseOver"); + + _this.registerColumnOption("headerMouseOut"); + + _this.registerColumnOption("headerMouseMove"); + + _this.registerColumnOption("headerTap"); + + _this.registerColumnOption("headerDblTap"); + + _this.registerColumnOption("headerTapHold"); + + _this.registerColumnOption("cellClick"); + + _this.registerColumnOption("cellDblClick"); + + _this.registerColumnOption("cellContext"); + + _this.registerColumnOption("cellMouseEnter"); + + _this.registerColumnOption("cellMouseLeave"); + + _this.registerColumnOption("cellMouseOver"); + + _this.registerColumnOption("cellMouseOut"); + + _this.registerColumnOption("cellMouseMove"); + + _this.registerColumnOption("cellTap"); + + _this.registerColumnOption("cellDblTap"); + + _this.registerColumnOption("cellTapHold"); + + return _this; + } + + _createClass(Interaction, [{ + key: "initialize", + value: function initialize() { + this.initializeExternalEvents(); + this.subscribe("column-init", this.initializeColumn.bind(this)); + this.subscribe("cell-dblclick", this.cellContentsSelectionFixer.bind(this)); + } + }, { + key: "cellContentsSelectionFixer", + value: function cellContentsSelectionFixer(e, cell) { + if (this.table.modExists("edit")) { + if (this.table.modules.edit.currentCell === this) { + return; //prevent instant selection of editor content + } + } + + e.preventDefault(); + + try { + if (document.selection) { + // IE + var range = document.body.createTextRange(); + range.moveToElementText(this.element); + range.select(); + } else if (window.getSelection) { + var range = document.createRange(); + range.selectNode(this.element); + window.getSelection().removeAllRanges(); + window.getSelection().addRange(range); + } + } catch (e) {} + } + }, { + key: "initializeExternalEvents", + value: function initializeExternalEvents() { + for (var key in this.eventMap) { + this.subscriptionChangeExternal(key, this.subscriptionChanged.bind(this, key)); + } + } + }, { + key: "subscriptionChanged", + value: function subscriptionChanged(key, added) { + + if (added) { + if (!this.subscribers[key]) { + if (this.eventMap[key].includes("-")) { + this.subscribers[key] = this.handle.bind(this, key); + this.subscribe(this.eventMap[key], this.subscribers[key]); + } else { + this.subscribeTouchEvents(key); + } + } + } else { + if (this.eventMap[key].includes("-")) { + if (this.subscribers[key] && !this.columnSubscribers[key] && !this.subscribedExternal(key)) { + this.unsubscribe(this.eventMap[key], this.subscribers[key]); + delete this.subscribers[key]; + } + } else { + this.unsubscribeTouchEvents(key); + } + } + } + }, { + key: "subscribeTouchEvents", + value: function subscribeTouchEvents(key) { + var type = this.eventMap[key]; + + if (!this.touchSubscribers[type + "-touchstart"]) { + this.touchSubscribers[type + "-touchstart"] = this.handleTouch.bind(this, type, "start"); + this.touchSubscribers[type + "-touchend"] = this.handleTouch.bind(this, type, "end"); + this.subscribe(type + "-touchstart", this.touchSubscribers[type + "-touchstart"]); + this.subscribe(type + "-touchend", this.touchSubscribers[type + "-touchend"]); + } + + this.subscribers[key] = true; + } + }, { + key: "unsubscribeTouchEvents", + value: function unsubscribeTouchEvents(key) { + var notouch = true, + type = this.eventMap[key]; + + if (this.subscribers[key] && !this.subscribedExternal(key)) { + delete this.subscribers[key]; + + for (var i in this.eventMap) { + if (this.eventMap[i] === type) { + if (this.subscribers[i]) { + notouch = false; + } + } + } + + if (notouch) { + this.unsubscribe(type + "-touchstart", this.touchSubscribers[type + "-touchstart"]); + this.unsubscribe(type + "-touchend", this.touchSubscribers[type + "-touchend"]); + delete this.touchSubscribers[type + "-touchstart"]; + delete this.touchSubscribers[type + "-touchend"]; + } + } + } + }, { + key: "initializeColumn", + value: function initializeColumn(column) { + var def = column.definition; + + for (var key in this.eventMap) { + if (def[key]) { + this.subscriptionChanged(key, true); + + if (!this.columnSubscribers[key]) { + this.columnSubscribers[key] = []; + } + + this.columnSubscribers[key].push(column); + } + } + } + }, { + key: "handle", + value: function handle(action, e, component) { + this.dispatchEvent(action, e, component); + } + }, { + key: "handleTouch", + value: function handleTouch(type, action, e, component) { + var _this2 = this; + + var watchers = this.touchWatchers[type]; + + if (type === "column") { + type = "header"; + } + + switch (action) { + case "start": + watchers.tap = true; + clearTimeout(watchers.tapHold); + watchers.tapHold = setTimeout(function () { + clearTimeout(watchers.tapHold); + watchers.tapHold = null; + watchers.tap = null; + clearTimeout(watchers.tapDbl); + watchers.tapDbl = null; + + _this2.dispatchEvent(type + "TapHold", e, component); + }, 1000); + break; + + case "end": + if (watchers.tap) { + watchers.tap = null; + this.dispatchEvent(type + "Tap", e, component); + } + + if (watchers.tapDbl) { + clearTimeout(watchers.tapDbl); + watchers.tapDbl = null; + this.dispatchEvent(type + "DblTap", e, component); + } else { + watchers.tapDbl = setTimeout(function () { + clearTimeout(watchers.tapDbl); + watchers.tapDbl = null; + }, 300); + } + + clearTimeout(watchers.tapHold); + watchers.tapHold = null; + break; + } + } + }, { + key: "dispatchEvent", + value: function dispatchEvent(action, e, component) { + var componentObj = component.getComponent(), + callback; + + if (this.columnSubscribers[action]) { + if (component instanceof Cell$1) { + callback = component.column.definition[action]; + } else if (component instanceof Column$1) { + callback = component.definition[action]; + } + + if (callback) { + callback(e, componentObj); + } + } + + this.dispatchExternal(action, e, componentObj); + } + }]); + + return Interaction; + }(Module); + + Interaction.moduleName = "interaction"; + var defaultBindings = { navPrev: "shift + 9", navNext: 9, @@ -18270,7 +18714,7 @@ }, scrollPageUp: function scrollPageUp(e) { var rowManager = this.table.rowManager, - newPos = rowManager.scrollTop - rowManager.height, + newPos = rowManager.scrollTop - rowManager.element.clientHeight, scrollMax = rowManager.element.scrollHeight; e.preventDefault(); @@ -18286,7 +18730,7 @@ }, scrollPageDown: function scrollPageDown(e) { var rowManager = this.table.rowManager, - newPos = rowManager.scrollTop + rowManager.height, + newPos = rowManager.scrollTop + rowManager.element.clientHeight, scrollMax = rowManager.element.scrollHeight; e.preventDefault(); @@ -18321,100 +18765,22 @@ this.table.element.focus(); }, navPrev: function navPrev(e) { - var cell = false; - - if (this.table.modExists("edit")) { - cell = this.table.modules.edit.currentCell; - - if (cell) { - e.preventDefault(); - cell.nav().prev(); - } - } + this.dispatch("keybinding-nav-prev", e); }, navNext: function navNext(e) { - var cell = false; - var newRow = this.table.options.tabEndNewRow; - var nav; - - if (this.table.modExists("edit")) { - cell = this.table.modules.edit.currentCell; - - if (cell) { - e.preventDefault(); - nav = cell.nav(); - - if (!nav.next()) { - if (newRow) { - cell.getElement().firstChild.blur(); - - if (newRow === true) { - newRow = this.table.addRow({}); - } else { - if (typeof newRow == "function") { - newRow = this.table.addRow(newRow(cell.row.getComponent())); - } else { - newRow = this.table.addRow(Object.assign({}, newRow)); - } - } - - newRow.then(function () { - setTimeout(function () { - nav.next(); - }); - }); - } - } - } - } + this.dispatch("keybinding-nav-next", e); }, - navLeft: function navLeft(e) { - var cell = false; - - if (this.table.modExists("edit")) { - cell = this.table.modules.edit.currentCell; - - if (cell) { - e.preventDefault(); - cell.nav().left(); - } - } + navLeft: function navLeft(e) { + this.dispatch("keybinding-nav-left", e); }, navRight: function navRight(e) { - var cell = false; - - if (this.table.modExists("edit")) { - cell = this.table.modules.edit.currentCell; - - if (cell) { - e.preventDefault(); - cell.nav().right(); - } - } + this.dispatch("keybinding-nav-right", e); }, navUp: function navUp(e) { - var cell = false; - - if (this.table.modExists("edit")) { - cell = this.table.modules.edit.currentCell; - - if (cell) { - e.preventDefault(); - cell.nav().up(); - } - } + this.dispatch("keybinding-nav-up", e); }, navDown: function navDown(e) { - var cell = false; - - if (this.table.modExists("edit")) { - cell = this.table.modules.edit.currentCell; - - if (cell) { - e.preventDefault(); - cell.nav().down(); - } - } + this.dispatch("keybinding-nav-down", e); }, undo: function undo(e) { var cell = false; @@ -18464,6 +18830,13 @@ _this.pressedKeys = null; _this.keyupBinding = false; _this.keydownBinding = false; + + _this.registerTableOption("keybindings", []); //array for keybindings + + + _this.registerTableOption("tabEndNewRow", false); //create new row when tab to end of table + + return _this; } @@ -18489,6 +18862,8 @@ this.mapBindings(mergedBindings); this.bindEvents(); } + + this.subscribe("table-destroy", this.clearBindings.bind(this)); } }, { key: "mapBindings", @@ -18650,10 +19025,50 @@ _this.escEvent = _this.escMenu.bind(_assertThisInitialized(_this)); _this.nestedMenuBlock = false; _this.positionReversedX = false; + + _this.registerTableOption("rowContextMenu", false); + + _this.registerTableOption("rowClickMenu", false); + + _this.registerTableOption("groupContextMenu", false); + + _this.registerTableOption("groupClickMenu", false); + + _this.registerColumnOption("headerContextMenu"); + + _this.registerColumnOption("headerMenu"); + + _this.registerColumnOption("contextMenu"); + + _this.registerColumnOption("clickMenu"); + return _this; } _createClass(Menu, [{ + key: "initialize", + value: function initialize() { + this.subscribe("cell-layout", this.layoutCell.bind(this)); + this.subscribe("column-init", this.initializeColumn.bind(this)); + this.subscribe("row-init", this.initializeRow.bind(this)); + } + }, { + key: "layoutCell", + value: function layoutCell(cell) { + if (cell.column.definition.contextMenu || cell.column.definition.clickMenu) { + this.initializeCell(cell); + } + } + }, { + key: "initializeColumn", + value: function initializeColumn(column) { + var def = column.definition; + + if (def.headerContextMenu || def.headerClickMenu || def.headerMenu) { + this.initializeColumnHeader(this); + } + } + }, { key: "initializeColumnHeader", value: function initializeColumnHeader(column) { var _this2 = this; @@ -18882,7 +19297,7 @@ y = touch ? e.touches[0].pageY : e.pageY; this.positionReversedX = false; } else { - parentOffset = Helpers.elOffset(parentEl); + parentOffset = Helpers$1.elOffset(parentEl); x = parentOffset.left + parentEl.offsetWidth; y = parentOffset.top - 1; } @@ -18990,6 +19405,10 @@ _this.touchMove = false; _this.moveHover = _this.moveHover.bind(_assertThisInitialized(_this)); _this.endMove = _this.endMove.bind(_assertThisInitialized(_this)); + + _this.registerTableOption("movableColumns", false); //enable movable columns + + return _this; } @@ -19001,6 +19420,11 @@ el.classList.add("tabulator-col-placeholder"); return el; } + }, { + key: "initialize", + value: function initialize() { + this.subscribe("column-init", this.initializeColumn.bind(this)); + } }, { key: "initializeColumn", value: function initializeColumn(column) { @@ -19013,7 +19437,7 @@ config.mousemove = function (e) { if (column.parent === self.moving.parent) { - if ((self.touchMove ? e.touches[0].pageX : e.pageX) - Helpers.elOffset(colEl).left + self.table.columnManager.element.scrollLeft > column.getWidth() / 2) { + if ((self.touchMove ? e.touches[0].pageX : e.pageX) - Helpers$1.elOffset(colEl).left + self.table.columnManager.element.scrollLeft > column.getWidth() / 2) { if (self.toCol !== column || !self.toColAfter) { colEl.parentNode.insertBefore(self.placeholderElement, colEl.nextSibling); self.moveColumn(column, true); @@ -19140,7 +19564,7 @@ value: function startMove(e, column) { var element = column.getElement(); this.moving = column; - this.startX = (this.touchMove ? e.touches[0].pageX : e.pageX) - Helpers.elOffset(element).left; + this.startX = (this.touchMove ? e.touches[0].pageX : e.pageX) - Helpers$1.elOffset(element).left; this.table.element.classList.add("tabulator-block-select"); //create placeholder this.placeholderElement.style.width = column.getWidth() + "px"; @@ -19232,7 +19656,7 @@ var columnHolder = this.table.columnManager.getElement(), scrollLeft = columnHolder.scrollLeft, - xPos = (this.touchMove ? e.touches[0].pageX : e.pageX) - Helpers.elOffset(columnHolder).left + scrollLeft, + xPos = (this.touchMove ? e.touches[0].pageX : e.pageX) - Helpers$1.elOffset(columnHolder).left + scrollLeft, scrollPos; this.hoverElement.style.left = xPos - this.startX + "px"; @@ -19304,6 +19728,22 @@ _this.connections = []; _this.connectedTable = false; _this.connectedRow = false; + + _this.registerTableOption("movableRows", false); //enable movable rows + + + _this.registerTableOption("movableRowsConnectedTables", false); //tables for movable rows to be connected to + + + _this.registerTableOption("movableRowsConnectedElements", false); //other elements for movable rows to be connected to + + + _this.registerTableOption("movableRowsSender", false); + + _this.registerTableOption("movableRowsReceiver", "insert"); + + _this.registerColumnOption("rowHandle"); + return _this; } @@ -19317,15 +19757,15 @@ } }, { key: "initialize", - value: function initialize(handle) { - this.connectionSelectorsTables = this.table.options.movableRowsConnectedTables; - this.connectionSelectorsElements = this.table.options.movableRowsConnectedElements; - this.connection = this.connectionSelectorsTables || this.connectionSelectorsElements; - } - }, { - key: "setHandle", - value: function setHandle(handle) { - this.hasHandle = handle; + value: function initialize() { + if (this.table.options.movableRows) { + this.connectionSelectorsTables = this.table.options.movableRowsConnectedTables; + this.connectionSelectorsElements = this.table.options.movableRowsConnectedElements; + this.connection = this.connectionSelectorsTables || this.connectionSelectorsElements; + this.subscribe("cell-init", this.initializeCell.bind(this)); + this.subscribe("column-init", this.initializeColumn.bind(this)); + this.subscribe("row-init", this.initializeRow.bind(this)); + } } }, { key: "initializeGroupHeader", @@ -19340,7 +19780,7 @@ config.mousemove = function (e) { - if (e.pageY - Helpers.elOffset(group.element).top + self.table.rowManager.element.scrollTop > group.getHeight() / 2) { + if (e.pageY - Helpers$1.elOffset(group.element).top + self.table.rowManager.element.scrollTop > group.getHeight() / 2) { if (self.toRow !== group || !self.toRowAfter) { var rowEl = group.getElement(); rowEl.parentNode.insertBefore(self.placeholderElement, rowEl.nextSibling); @@ -19375,7 +19815,7 @@ config.mousemove = function (e) { var rowEl = row.getElement(); - if (e.pageY - Helpers.elOffset(rowEl).top + self.table.rowManager.element.scrollTop > row.getHeight() / 2) { + if (e.pageY - Helpers$1.elOffset(rowEl).top + self.table.rowManager.element.scrollTop > row.getHeight() / 2) { if (self.toRow !== row || !self.toRowAfter) { rowEl.parentNode.insertBefore(self.placeholderElement, rowEl.nextSibling); self.moveRow(row, true); @@ -19409,26 +19849,35 @@ row.modules.moveRow = config; } + }, { + key: "initializeColumn", + value: function initializeColumn(column) { + if (column.definition.rowHandle && this.table.options.movableRows !== false) { + this.hasHandle = true; + } + } }, { key: "initializeCell", value: function initializeCell(cell) { - var self = this, - cellEl = cell.getElement(true); - cellEl.addEventListener("mousedown", function (e) { - if (e.which === 1) { - self.checkTimeout = setTimeout(function () { - self.startMove(e, cell.row); - }, self.checkPeriod); - } - }); - cellEl.addEventListener("mouseup", function (e) { - if (e.which === 1) { - if (self.checkTimeout) { - clearTimeout(self.checkTimeout); + if (cell.column.definition.rowHandle && this.table.options.movableRows !== false) { + var self = this, + cellEl = cell.getElement(true); + cellEl.addEventListener("mousedown", function (e) { + if (e.which === 1) { + self.checkTimeout = setTimeout(function () { + self.startMove(e, cell.row); + }, self.checkPeriod); } - } - }); - this.bindTouchEvents(cell.row, cellEl); + }); + cellEl.addEventListener("mouseup", function (e) { + if (e.which === 1) { + if (self.checkTimeout) { + clearTimeout(self.checkTimeout); + } + } + }); + this.bindTouchEvents(cell.row, cellEl); + } } }, { key: "bindTouchEvents", @@ -19660,7 +20109,7 @@ key: "elementRowDrop", value: function elementRowDrop(e, element, row) { if (this.table.options.movableRowsElementDrop) { - this.table.options.movableRowsElementDrop(e, element, row ? row.getComponent() : false); + this.dispatchExternal("movableRowsElementDrop", e, element, row ? row.getComponent() : false); } } //establish connection with other tables @@ -19672,9 +20121,9 @@ var connectionTables; if (this.connectionSelectorsTables) { - connectionTables = this.table.modules.comms.getConnections(this.connectionSelectorsTables); - this.table.options.movableRowsSendingStart.call(this.table, connectionTables); - this.table.modules.comms.send(this.connectionSelectorsTables, "moveRow", "connect", { + connectionTables = this.commsConnections(this.connectionSelectorsTables); + this.dispatchExternal("movableRowsSendingStart", connectionTables); + this.commsSend(this.connectionSelectorsTables, "moveRow", "connect", { row: row }); } @@ -19711,9 +20160,9 @@ var connectionTables; if (this.connectionSelectorsTables) { - connectionTables = this.table.modules.comms.getConnections(this.connectionSelectorsTables); - this.table.options.movableRowsSendingStop.call(this.table, connectionTables); - this.table.modules.comms.send(this.connectionSelectorsTables, "moveRow", "disconnect"); + connectionTables = this.commsConnections(this.connectionSelectorsTables); + this.dispatchExternal("movableRowsSendingStop", connectionTables); + this.commsSend(this.connectionSelectorsTables, "moveRow", "disconnect"); } this.connectionElements.forEach(function (element) { @@ -19737,7 +20186,7 @@ }); this.tableRowDropEvent = this.tableRowDrop.bind(this); this.table.element.addEventListener("mouseup", this.tableRowDropEvent); - this.table.options.movableRowsReceivingStart.call(this.table, row, table); + this.dispatchExternal("movableRowsReceivingStart", row, table); return true; } else { console.warn("Move Row Error - Table cannot accept connection, already connected to table:", this.connectedTable); @@ -19758,7 +20207,7 @@ } }); this.table.element.removeEventListener("mouseup", this.tableRowDropEvent); - this.table.options.movableRowsReceivingStop.call(this.table, table); + this.dispatchExternal("movableRowsReceivingStop", table); } else { console.warn("Move Row Error - trying to disconnect from non connected table"); } @@ -19787,9 +20236,9 @@ } } - this.table.options.movableRowsSent.call(this.table, this.moving.getComponent(), row ? row.getComponent() : undefined, table); + this.dispatchExternal("movableRowsSent", this.moving.getComponent(), row ? row.getComponent() : undefined, table); } else { - this.table.options.movableRowsSentFailed.call(this.table, this.moving.getComponent(), row ? row.getComponent() : undefined, table); + this.dispatchExternal("movableRowsSentFailed", this.moving.getComponent(), row ? row.getComponent() : undefined, table); } this.endMove(); @@ -19818,12 +20267,12 @@ } if (success) { - this.table.options.movableRowsReceived.call(this.table, this.connectedRow.getComponent(), row ? row.getComponent() : undefined, this.connectedTable); + this.dispatchExternal("movableRowsReceived", this.connectedRow.getComponent(), row ? row.getComponent() : undefined, this.connectedTable); } else { - this.table.options.movableRowsReceivedFailed.call(this.table, this.connectedRow.getComponent(), row ? row.getComponent() : undefined, this.connectedTable); + this.dispatchExternal("movableRowsReceivedFailed", this.connectedRow.getComponent(), row ? row.getComponent() : undefined, this.connectedTable); } - this.table.modules.comms.send(this.connectedTable, "moveRow", "dropcomplete", { + this.commsSend(this.connectedTable, "moveRow", "dropcomplete", { row: row, success: success }); @@ -19897,11 +20346,41 @@ _this.allowedTypes = ["", "data", "edit", "clipboard"]; //list of muatation types _this.enabled = true; - return _this; - } //initialize column mutator + _this.registerColumnOption("mutator"); + + _this.registerColumnOption("mutatorParams"); + + _this.registerColumnOption("mutatorData"); + + _this.registerColumnOption("mutatorDataParams"); + + _this.registerColumnOption("mutatorEdit"); + + _this.registerColumnOption("mutatorEditParams"); + + _this.registerColumnOption("mutatorClipboard"); + + _this.registerColumnOption("mutatorClipboardParams"); + + return _this; + } _createClass(Mutator, [{ + key: "initialize", + value: function initialize() { + this.subscribe("cell-value-changing", this.transformCell.bind(this)); + this.subscribe("column-layout", this.initializeColumn.bind(this)); + this.subscribe("row-data-init-before", this.rowDataChanged.bind(this)); + this.subscribe("row-data-changing", this.rowDataChanged.bind(this)); + } + }, { + key: "rowDataChanged", + value: function rowDataChanged(row, tempData, updatedData) { + return this.transformRow(tempData, "data", updatedData); + } //initialize column mutator + + }, { key: "initializeColumn", value: function initializeColumn(column) { var _this2 = this; @@ -19984,16 +20463,18 @@ }, { key: "transformCell", value: function transformCell(cell, value) { - var mutator = cell.column.modules.mutate.mutatorEdit || cell.column.modules.mutate.mutator || false, - tempData = {}; + if (cell.column.modules.mutate) { + var mutator = cell.column.modules.mutate.mutatorEdit || cell.column.modules.mutate.mutator || false, + tempData = {}; - if (mutator) { - tempData = Object.assign(tempData, cell.row.getData()); - cell.column.setFieldValue(tempData, value); - return mutator.mutator(value, tempData, "edit", mutator.params, cell.getComponent()); - } else { - return value; + if (mutator) { + tempData = Object.assign(tempData, cell.row.getData()); + cell.column.setFieldValue(tempData, value); + return mutator.mutator(value, tempData, "edit", mutator.params, cell.getComponent()); + } } + + return value; } }, { key: "enable", @@ -20014,19 +20495,6 @@ Mutator.mutators = defaultMutators; - var defaultDataSentNames = { - "page": "page", - "size": "size", - "sorters": "sorters", - "filters": "filters" - }; - - var defaultDataReceivedNames = { - "current_page": "current_page", - "last_page": "last_page", - "data": "data" - }; - var Page = /*#__PURE__*/function (_Module) { _inherits(Page, _Module); @@ -20047,16 +20515,237 @@ _this.displayIndex = 0; //index in display pipeline _this.initialLoad = true; + _this.dataChanging = false; //flag to check if data is being changed by this module + _this.pageSizes = []; - _this.dataReceivedNames = {}; - _this.dataSentNames = {}; + _this.dataReceivedNames = {}; //TODO - remove once pagimation update is complete + + _this.dataSentNames = {}; //TODO - remove once pagimation update is complete + + _this.registerTableOption("pagination", false); //set pagination type + + + _this.registerTableOption("paginationMode", "local"); //local or remote pagination + - _this.createElements(); + _this.registerTableOption("paginationSize", false); //set number of rows to a page + + + _this.registerTableOption("paginationInitialPage", 1); //initail page to show on load + + + _this.registerTableOption("paginationButtonCount", 5); // set count of page button + + + _this.registerTableOption("paginationSizeSelector", false); //add pagination size selector element + + + _this.registerTableOption("paginationElement", false); //element to hold pagination numbers + // this.registerTableOption("paginationDataSent", {}); //pagination data sent to the server + // this.registerTableOption("paginationDataReceived", {}); //pagination data received from the server + + + _this.registerTableOption("paginationAddRow", "page"); //add rows on table or page + + + _this.registerTableOption("progressiveLoad", false); //progressive loading + + + _this.registerTableOption("progressiveLoadDelay", 0); //delay between requests + + + _this.registerTableOption("progressiveLoadScrollMargin", 0); //margin before scroll begins + + + _this.registerTableFunction("setMaxPage", _this.setMaxPage.bind(_assertThisInitialized(_this))); + + _this.registerTableFunction("setPage", _this.setPage.bind(_assertThisInitialized(_this))); + + _this.registerTableFunction("setPageToRow", _this.userSetPageToRow.bind(_assertThisInitialized(_this))); + + _this.registerTableFunction("setPageSize", _this.userSetPageSize.bind(_assertThisInitialized(_this))); + + _this.registerTableFunction("getPageSize", _this.getPageSize.bind(_assertThisInitialized(_this))); + + _this.registerTableFunction("previousPage", _this.previousPage.bind(_assertThisInitialized(_this))); + + _this.registerTableFunction("nextPage", _this.nextPage.bind(_assertThisInitialized(_this))); + + _this.registerTableFunction("getPage", _this.getPage.bind(_assertThisInitialized(_this))); + + _this.registerTableFunction("getPageMax", _this.getPageMax.bind(_assertThisInitialized(_this))); //register component functions + + + _this.registerComponentFunction("row", "pageTo", _this.setPageToRow.bind(_assertThisInitialized(_this))); return _this; } _createClass(Page, [{ + key: "initialize", + value: function initialize() { + if (this.table.options.pagination) { + this.subscribe("row-deleted", this.rowsUpdated.bind(this)); + this.subscribe("row-adding-position", this.rowAddingPosition.bind(this)); + this.subscribe("row-added", this.rowsUpdated.bind(this)); + this.subscribe("data-processed", this.initialLoadComplete.bind(this)); + this.subscribe("table-built", this.calculatePageSizes.bind(this)); + + if (this.table.options.paginationMode === "remote") { + this.subscribe("data-params", this.remotePageParams.bind(this)); + this.subscribe("data-loaded", this._parseRemoteData.bind(this)); + } + + if (this.table.options.progressiveLoad) { + console.error("Progressive Load Error - Pagination and progressive load cannot be used at the same time"); + } + + this.registerDisplayHandler(this.restOnRenderBefore.bind(this), 40); + this.registerDisplayHandler(this.getRows.bind(this), 50); + this.createElements(); + this.initializePaginator(); + } else if (this.table.options.progressiveLoad) { + this.subscribe("data-params", this.remotePageParams.bind(this)); + this.subscribe("data-loaded", this._parseRemoteData.bind(this)); + this.initializeProgressive(this.table.options.progressiveLoad); + + if (this.table.options.progressiveLoad === "scroll") { + this.subscribe("scroll-vertical", this.scrollVertical.bind(this)); + } + } + } + }, { + key: "rowAddingPosition", + value: function rowAddingPosition(row, top) { + var rowManager = this.table.rowManager, + dispRows = rowManager.getDisplayRows(), + index; + + if (top) { + if (dispRows.length) { + index = dispRows[0]; + } else { + if (rowManager.activeRows.length) { + index = rowManager.activeRows[rowManager.activeRows.length - 1]; + top = false; + } + } + } else { + if (dispRows.length) { + index = dispRows[dispRows.length - 1]; + top = dispRows.length < this.size ? false : true; + } + } + + return { + index: index, + top: top + }; + } + }, { + key: "calculatePageSizes", + value: function calculatePageSizes() { + var testElRow, testElCell; + + if (this.table.options.paginationSize) { + this.size = this.table.options.paginationSize; + } else { + testElRow = document.createElement("div"); + testElRow.classList.add("tabulator-row"); + testElRow.style.visibility = "hidden"; + testElCell = document.createElement("div"); + testElCell.classList.add("tabulator-cell"); + testElCell.innerHTML = "Page Row Test"; + testElRow.appendChild(testElCell); + this.table.rowManager.getTableElement().appendChild(testElRow); + this.size = Math.floor(this.table.rowManager.getElement().clientHeight / testElRow.offsetHeight); + this.table.rowManager.getTableElement().removeChild(testElRow); + } + } + }, { + key: "initialLoadComplete", + value: function initialLoadComplete() { + this.initialLoad = false; + } + }, { + key: "remotePageParams", + value: function remotePageParams(data, config, silent, params) { + if (!this.initialLoad) { + if (this.progressiveLoad && !silent || !this.progressiveLoad && !this.dataChanging) { + this.reset(true); + } + } //configure request params + + + params.page = this.page; //set page size if defined + + if (this.size) { + params.size = this.size; + } + + return params; + } /////////////////////////////////// + ///////// Table Functions ///////// + /////////////////////////////////// + + }, { + key: "userSetPageToRow", + value: function userSetPageToRow(row) { + if (this.table.options.pagination) { + row = this.rowManager.findRow(row); + + if (row) { + return this.setPageToRow(row); + } + } + + return Promise.reject(); + } + }, { + key: "userSetPageSize", + value: function userSetPageSize(size) { + if (this.table.options.pagination) { + this.setPageSize(size); + return this.setPage(1); + } else { + return false; + } + } /////////////////////////////////// + ///////// Internal Logic ////////// + /////////////////////////////////// + + }, { + key: "scrollVertical", + value: function scrollVertical(top, dir) { + var element, diff, margin; + + if (!dir && !this.table.dataLoader.loading) { + element = this.table.rowManager.getElement(); + diff = element.scrollHeight - element.clientHeight - top; + margin = this.table.options.progressiveLoadScrollMargin || element.clientHeight * 2; + + if (diff < margin) { + this.nextPage(); + } + } + } + }, { + key: "restOnRenderBefore", + value: function restOnRenderBefore(rows, renderInPosition) { + if (!renderInPosition) { + if (this.mode === "local") { + this.reset(); + } + } + + return rows; + } + }, { + key: "rowsUpdated", + value: function rowsUpdated() { + this.refreshData(true, "all"); + } + }, { key: "createElements", value: function createElements() { var button; @@ -20122,7 +20811,7 @@ itemEl.value = item; if (item === true) { - _this2.table.modules.localize.bind("pagination|all", function (value) { + _this2.langBind("pagination|all", function (value) { itemEl.innerHTML = value; }); } else { @@ -20131,131 +20820,119 @@ _this2.pageSizeSelect.appendChild(itemEl); }); - this.pageSizeSelect.value = this.size; - } - } //setup pageination - - }, { - key: "initialize", - value: function initialize(hidden) { - var _this3 = this; - - var pageSelectLabel, testElRow, testElCell; //update param names - - this.dataSentNames = Object.assign({}, Page.defaultDataSentNames); - this.dataSentNames = Object.assign(this.dataSentNames, this.table.options.paginationDataSent); - this.dataReceivedNames = Object.assign({}, Page.defaultDataReceivedNames); - this.dataReceivedNames = Object.assign(this.dataReceivedNames, this.table.options.paginationDataReceived); //build pagination element - //bind localizations - - this.table.modules.localize.bind("pagination|first", function (value) { - _this3.firstBut.innerHTML = value; - }); - this.table.modules.localize.bind("pagination|first_title", function (value) { - _this3.firstBut.setAttribute("aria-label", value); - - _this3.firstBut.setAttribute("title", value); - }); - this.table.modules.localize.bind("pagination|prev", function (value) { - _this3.prevBut.innerHTML = value; - }); - this.table.modules.localize.bind("pagination|prev_title", function (value) { - _this3.prevBut.setAttribute("aria-label", value); - - _this3.prevBut.setAttribute("title", value); - }); - this.table.modules.localize.bind("pagination|next", function (value) { - _this3.nextBut.innerHTML = value; - }); - this.table.modules.localize.bind("pagination|next_title", function (value) { - _this3.nextBut.setAttribute("aria-label", value); - - _this3.nextBut.setAttribute("title", value); - }); - this.table.modules.localize.bind("pagination|last", function (value) { - _this3.lastBut.innerHTML = value; - }); - this.table.modules.localize.bind("pagination|last_title", function (value) { - _this3.lastBut.setAttribute("aria-label", value); + this.pageSizeSelect.value = this.size; + } + } //setup pageination - _this3.lastBut.setAttribute("title", value); - }); //click bindings + }, { + key: "initializePaginator", + value: function initializePaginator(hidden) { + var _this3 = this; - this.firstBut.addEventListener("click", function () { - _this3.setPage(1).then(function () {})["catch"](function () {}); - }); - this.prevBut.addEventListener("click", function () { - _this3.previousPage().then(function () {})["catch"](function () {}); - }); - this.nextBut.addEventListener("click", function () { - _this3.nextPage().then(function () {})["catch"](function () {}); - }); - this.lastBut.addEventListener("click", function () { - _this3.setPage(_this3.max).then(function () {})["catch"](function () {}); - }); + var pageSelectLabel; - if (this.table.options.paginationElement) { - this.element = this.table.options.paginationElement; - } + if (!hidden) { + //build pagination element + //bind localizations + this.langBind("pagination|first", function (value) { + _this3.firstBut.innerHTML = value; + }); + this.langBind("pagination|first_title", function (value) { + _this3.firstBut.setAttribute("aria-label", value); - if (this.pageSizeSelect) { - pageSelectLabel = document.createElement("label"); - this.table.modules.localize.bind("pagination|page_size", function (value) { - _this3.pageSizeSelect.setAttribute("aria-label", value); + _this3.firstBut.setAttribute("title", value); + }); + this.langBind("pagination|prev", function (value) { + _this3.prevBut.innerHTML = value; + }); + this.langBind("pagination|prev_title", function (value) { + _this3.prevBut.setAttribute("aria-label", value); - _this3.pageSizeSelect.setAttribute("title", value); + _this3.prevBut.setAttribute("title", value); + }); + this.langBind("pagination|next", function (value) { + _this3.nextBut.innerHTML = value; + }); + this.langBind("pagination|next_title", function (value) { + _this3.nextBut.setAttribute("aria-label", value); - pageSelectLabel.innerHTML = value; + _this3.nextBut.setAttribute("title", value); }); - this.element.appendChild(pageSelectLabel); - this.element.appendChild(this.pageSizeSelect); - this.pageSizeSelect.addEventListener("change", function (e) { - _this3.setPageSize(_this3.pageSizeSelect.value == "true" ? true : _this3.pageSizeSelect.value); + this.langBind("pagination|last", function (value) { + _this3.lastBut.innerHTML = value; + }); + this.langBind("pagination|last_title", function (value) { + _this3.lastBut.setAttribute("aria-label", value); + + _this3.lastBut.setAttribute("title", value); + }); //click bindings - _this3.setPage(1).then(function () {})["catch"](function () {}); + this.firstBut.addEventListener("click", function () { + _this3.setPage(1); + }); + this.prevBut.addEventListener("click", function () { + _this3.previousPage(); + }); + this.nextBut.addEventListener("click", function () { + _this3.nextPage(); + }); + this.lastBut.addEventListener("click", function () { + _this3.setPage(_this3.max); }); - } //append to DOM + if (this.table.options.paginationElement) { + this.element = this.table.options.paginationElement; + } - this.element.appendChild(this.firstBut); - this.element.appendChild(this.prevBut); - this.element.appendChild(this.pagesElement); - this.element.appendChild(this.nextBut); - this.element.appendChild(this.lastBut); + if (this.pageSizeSelect) { + pageSelectLabel = document.createElement("label"); + this.langBind("pagination|page_size", function (value) { + _this3.pageSizeSelect.setAttribute("aria-label", value); - if (!this.table.options.paginationElement && !hidden) { - this.table.footerManager.append(this.element, this); - } //set default values + _this3.pageSizeSelect.setAttribute("title", value); + pageSelectLabel.innerHTML = value; + }); + this.element.appendChild(pageSelectLabel); + this.element.appendChild(this.pageSizeSelect); + this.pageSizeSelect.addEventListener("change", function (e) { + _this3.setPageSize(_this3.pageSizeSelect.value == "true" ? true : _this3.pageSizeSelect.value); - this.mode = this.table.options.pagination; + _this3.setPage(1); + }); + } //append to DOM - if (this.table.options.paginationSize) { - this.size = this.table.options.paginationSize; - } else { - testElRow = document.createElement("div"); - testElRow.classList.add("tabulator-row"); - testElRow.style.visibility = hidden; - testElCell = document.createElement("div"); - testElCell.classList.add("tabulator-cell"); - testElCell.innerHTML = "Page Row Test"; - testElRow.appendChild(testElCell); - this.table.rowManager.getTableElement().appendChild(testElRow); - this.size = Math.floor(this.table.rowManager.getElement().clientHeight / testElRow.offsetHeight); - this.table.rowManager.getTableElement().removeChild(testElRow); - } // this.page = this.table.options.paginationInitialPage || 1; + this.element.appendChild(this.firstBut); + this.element.appendChild(this.prevBut); + this.element.appendChild(this.pagesElement); + this.element.appendChild(this.nextBut); + this.element.appendChild(this.lastBut); + + if (!this.table.options.paginationElement && !hidden) { + this.table.footerManager.append(this.element, this); + } + + this.page = this.table.options.paginationInitialPage; + this.count = this.table.options.paginationButtonCount; + this.generatePageSizeSelectList(); + } //set default values - this.count = this.table.options.paginationButtonCount; - this.generatePageSizeSelectList(); + + this.mode = this.table.options.paginationMode; } }, { key: "initializeProgressive", value: function initializeProgressive(mode) { - this.initialize(true); + this.initializePaginator(true); this.mode = "progressive_" + mode; this.progressiveLoad = true; } + }, { + key: "trackChanges", + value: function trackChanges() { + this.dispatch("page-changed"); + } }, { key: "setDisplayIndex", value: function setDisplayIndex(index) { @@ -20283,16 +20960,12 @@ }, { key: "reset", - value: function reset(force, columnsChanged) { - if (this.mode == "local" || force) { - this.page = 1; - } - - if (columnsChanged) { - this.initialLoad = true; + value: function reset(force) { + if (!this.initialLoad) { + if (this.mode == "local" || force) { + this.page = 1; + } } - - return true; } //set the maxmum page }, { @@ -20310,8 +20983,6 @@ }, { key: "setPage", value: function setPage(page) { - var _this4 = this; - switch (page) { case "first": return this.setPage(1); @@ -20326,50 +20997,30 @@ return this.setPage(this.max); } - return new Promise(function (resolve, reject) { - page = parseInt(page); - - if (page > 0 && page <= _this4.max || _this4.mode !== "local") { - _this4.page = page; - - _this4.trigger().then(function () { - resolve(); - })["catch"](function () { - reject(); - }); + page = parseInt(page); - if (_this4.table.options.persistence && _this4.table.modExists("persistence", true) && _this4.table.modules.persistence.config.page) { - _this4.table.modules.persistence.save("page"); - } - } else { - console.warn("Pagination Error - Requested page is out of range of 1 - " + _this4.max + ":", page); - reject(); - } - }); + if (page > 0 && page <= this.max || this.mode !== "local") { + this.page = page; + this.trackChanges(); + return this.trigger(); + } else { + console.warn("Pagination Error - Requested page is out of range of 1 - " + this.max + ":", page); + return Promise.reject(); + } } }, { key: "setPageToRow", value: function setPageToRow(row) { - var _this5 = this; + var rows = this.table.rowManager.getDisplayRows(this.displayIndex - 1); + var index = rows.indexOf(row); - return new Promise(function (resolve, reject) { - var rows = _this5.table.rowManager.getDisplayRows(_this5.displayIndex - 1); - - var index = rows.indexOf(row); - - if (index > -1) { - var page = _this5.size === true ? 1 : Math.ceil((index + 1) / _this5.size); - - _this5.setPage(page).then(function () { - resolve(); - })["catch"](function () { - reject(); - }); - } else { - console.warn("Pagination Error - Requested row is not visible"); - reject(); - } - }); + if (index > -1) { + var page = this.size === true ? 1 : Math.ceil((index + 1) / this.size); + return this.setPage(page); + } else { + console.warn("Pagination Error - Requested row is not visible"); + return Promise.reject(); + } } }, { key: "setPageSize", @@ -20387,9 +21038,7 @@ this.generatePageSizeSelectList(); } - if (this.table.options.persistence && this.table.modExists("persistence", true) && this.table.modules.persistence.config.page) { - this.table.modules.persistence.save("page"); - } + this.trackChanges(); } //setup the pagination buttons }, { @@ -20431,7 +21080,7 @@ }, { key: "_generatePageButton", value: function _generatePageButton(page) { - var _this6 = this; + var _this4 = this; var button = document.createElement("button"); button.classList.add("tabulator-page"); @@ -20442,14 +21091,14 @@ button.setAttribute("type", "button"); button.setAttribute("role", "button"); - this.table.modules.localize.bind("pagination|page_title", function (value) { + this.langBind("pagination|page_title", function (value) { button.setAttribute("aria-label", value + " " + page); button.setAttribute("title", value + " " + page); }); button.setAttribute("data-page", page); button.textContent = page; button.addEventListener("click", function (e) { - _this6.setPage(page).then(function () {})["catch"](function () {}); + _this4.setPage(page); }); return button; } //previous page @@ -20457,54 +21106,30 @@ }, { key: "previousPage", value: function previousPage() { - var _this7 = this; - - return new Promise(function (resolve, reject) { - if (_this7.page > 1) { - _this7.page--; - - _this7.trigger().then(function () { - resolve(); - })["catch"](function () { - reject(); - }); - - if (_this7.table.options.persistence && _this7.table.modExists("persistence", true) && _this7.table.modules.persistence.config.page) { - _this7.table.modules.persistence.save("page"); - } - } else { - console.warn("Pagination Error - Previous page would be less than page 1:", 0); - reject(); - } - }); + if (this.page > 1) { + this.page--; + this.trackChanges(); + return this.trigger(); + } else { + console.warn("Pagination Error - Previous page would be less than page 1:", 0); + return Promise.reject(); + } } //next page }, { key: "nextPage", value: function nextPage() { - var _this8 = this; - - return new Promise(function (resolve, reject) { - if (_this8.page < _this8.max) { - _this8.page++; - - _this8.trigger().then(function () { - resolve(); - })["catch"](function () { - reject(); - }); - - if (_this8.table.options.persistence && _this8.table.modExists("persistence", true) && _this8.table.modules.persistence.config.page) { - _this8.table.modules.persistence.save("page"); - } - } else { - if (!_this8.progressiveLoad) { - console.warn("Pagination Error - Next page would be greater than maximum page of " + _this8.max + ":", _this8.max + 1); - } - - reject(); + if (this.page < this.max) { + this.page++; + this.trackChanges(); + return this.trigger(); + } else { + if (!this.progressiveLoad) { + console.warn("Pagination Error - Next page would be greater than maximum page of " + this.max + ":", this.max + 1); } - }); + + return Promise.reject(); + } } //return current page number }, { @@ -20536,6 +21161,7 @@ if (this.mode == "local") { output = []; + this.setMaxRows(data.length); if (this.size === true) { start = 0; @@ -20563,147 +21189,89 @@ }, { key: "trigger", value: function trigger() { - var _this9 = this; + var _this5 = this; var left; - return new Promise(function (resolve, reject) { - switch (_this9.mode) { - case "local": - left = _this9.table.rowManager.scrollLeft; - - _this9.table.rowManager.refreshActiveData("page"); - - _this9.table.rowManager.scrollHorizontal(left); - - _this9.table.options.pageLoaded.call(_this9.table, _this9.getPage()); - - resolve(); - break; - - case "remote": - case "progressive_load": - case "progressive_scroll": - _this9.table.modules.ajax.blockActiveRequest(); - - _this9._getRemotePage().then(function () { - resolve(); - })["catch"](function () { - reject(); - }); - - break; - - default: - console.warn("Pagination Error - no such pagination mode:", _this9.mode); - reject(); - } - }); - } - }, { - key: "_getRemotePage", - value: function _getRemotePage() { - var _this10 = this; - - var oldParams, pageParams; - return new Promise(function (resolve, reject) { - if (!_this10.table.modExists("ajax", true)) { - reject(); - } //record old params and restore after request has been made - - - oldParams = Helpers.deepClone(_this10.table.modules.ajax.getParams() || {}); - pageParams = _this10.table.modules.ajax.getParams(); //configure request params - - pageParams[_this10.dataSentNames.page] = _this10.page; //set page size if defined - - if (_this10.size) { - pageParams[_this10.dataSentNames.size] = _this10.size; - } //set sort data if defined + switch (this.mode) { + case "local": + left = this.table.rowManager.scrollLeft; + this.refreshData(); + this.table.rowManager.scrollHorizontal(left); + this.dispatchExternal("pageLoaded", this.getPage()); + return Promise.resolve(); - if (_this10.table.options.ajaxSorting && _this10.table.modExists("sort")) { - var sorters = _this10.table.modules.sort.getSort(); - - sorters.forEach(function (item) { - delete item.column; + case "remote": + this.dataChanging = true; + return this.reloadData(null)["finally"](function () { + _this5.dataChanging = false; }); - pageParams[_this10.dataSentNames.sorters] = sorters; - } //set filter data if defined - - - if (_this10.table.options.ajaxFiltering && _this10.table.modExists("filter")) { - var filters = _this10.table.modules.filter.getFilters(true, true); - - pageParams[_this10.dataSentNames.filters] = filters; - } - - _this10.table.modules.ajax.setParams(pageParams); - _this10.table.modules.ajax.sendRequest(_this10.progressiveLoad).then(function (data) { - _this10._parseRemoteData(data); + case "progressive_load": + case "progressive_scroll": + return this.reloadData(null, true); - resolve(); - })["catch"](function (e) { - reject(); - }); - - _this10.table.modules.ajax.setParams(oldParams); - }); + default: + console.warn("Pagination Error - no such pagination mode:", this.mode); + return Promise.reject(); + } } }, { key: "_parseRemoteData", value: function _parseRemoteData(data) { - var _this11 = this; + var _this6 = this; - var left, data, margin; + var data, margin; - if (typeof data[this.dataReceivedNames.last_page] === "undefined") { + if (typeof data.last_page === "undefined") { console.warn("Remote Pagination Error - Server response missing '" + this.dataReceivedNames.last_page + "' property"); } - if (data[this.dataReceivedNames.data]) { - this.max = parseInt(data[this.dataReceivedNames.last_page]) || 1; + if (data.data) { + this.max = parseInt(data.last_page) || 1; if (this.progressiveLoad) { switch (this.mode) { case "progressive_load": if (this.page == 1) { - this.table.rowManager.setData(data[this.dataReceivedNames.data], false, this.initialLoad && this.page == 1); + this.table.rowManager.setData(data.data, false, this.page == 1); } else { - this.table.rowManager.addRows(data[this.dataReceivedNames.data]); + this.table.rowManager.addRows(data.data); } if (this.page < this.max) { setTimeout(function () { - _this11.nextPage().then(function () {})["catch"](function () {}); - }, this.table.options.ajaxProgressiveLoadDelay); + _this6.nextPage(); + }, this.table.options.progressiveLoadDelay); } break; case "progressive_scroll": - data = this.table.rowManager.getData().concat(data[this.dataReceivedNames.data]); - this.table.rowManager.setData(data, true, this.initialLoad && this.page == 1); - margin = this.table.options.ajaxProgressiveLoadScrollMargin || this.table.rowManager.element.clientHeight * 2; + data = this.table.rowManager.getData().concat(data.data); + this.table.rowManager.setData(data, this.page !== 1, this.page == 1); + margin = this.table.options.progressiveLoadScrollMargin || this.table.rowManager.element.clientHeight * 2; if (this.table.rowManager.element.scrollHeight <= this.table.rowManager.element.clientHeight + margin) { - this.nextPage().then(function () {})["catch"](function () {}); + setTimeout(function () { + _this6.nextPage(); + }); } break; } + + return false; } else { - left = this.table.rowManager.scrollLeft; - this.table.rowManager.setData(data[this.dataReceivedNames.data], false, this.initialLoad && this.page == 1); - this.table.rowManager.scrollHorizontal(left); - this.table.columnManager.scrollHorizontal(left); - this.table.options.pageLoaded.call(this.table, this.getPage()); + // left = this.table.rowManager.scrollLeft; + this.dispatchExternal("pageLoaded", this.getPage()); // this.table.rowManager.scrollHorizontal(left); + // this.table.columnManager.scrollHorizontal(left); } - - this.initialLoad = false; } else { console.warn("Remote Pagination Error - Server response missing '" + this.dataReceivedNames.data + "' property"); } + + return data.data; } //handle the footer element being redrawn }, { @@ -20726,10 +21294,7 @@ return Page; }(Module); - Page.moduleName = "page"; //load defaults - - Page.defaultDataSentNames = defaultDataSentNames; - Page.defaultDataReceivedNames = defaultDataReceivedNames; + Page.moduleName = "page"; // read peristence information from storage var defaultReaders = { @@ -20789,6 +21354,21 @@ _this.config = {}; _this.readFunc = false; _this.writeFunc = false; + + _this.registerTableOption("persistence", false); + + _this.registerTableOption("persistenceID", ""); //key for persistent storage + + + _this.registerTableOption("persistenceMode", true); //mode for storing persistence information + + + _this.registerTableOption("persistenceReaderFunc", false); //function for handling persistence data reading + + + _this.registerTableOption("persistenceWriterFunc", false); //function for handling persistence data writing + + return _this; } // Test for whether localStorage is available for use. @@ -20810,95 +21390,167 @@ }, { key: "initialize", value: function initialize() { - //determine persistent layout storage type - var mode = this.table.options.persistenceMode, - id = this.table.options.persistenceID, - retreivedData; - this.mode = mode !== true ? mode : this.localStorageTest() ? "local" : "cookie"; - - if (this.table.options.persistenceReaderFunc) { - if (typeof this.table.options.persistenceReaderFunc === "function") { - this.readFunc = this.table.options.persistenceReaderFunc; - } else { - if (Persistence.readers[this.table.options.persistenceReaderFunc]) { - this.readFunc = Persistence.readers[this.table.options.persistenceReaderFunc]; + if (this.table.options.persistence) { + //determine persistent layout storage type + var mode = this.table.options.persistenceMode, + id = this.table.options.persistenceID, + retreivedData; + this.mode = mode !== true ? mode : this.localStorageTest() ? "local" : "cookie"; + + if (this.table.options.persistenceReaderFunc) { + if (typeof this.table.options.persistenceReaderFunc === "function") { + this.readFunc = this.table.options.persistenceReaderFunc; } else { - console.warn("Persistence Read Error - invalid reader set", this.table.options.persistenceReaderFunc); + if (Persistence.readers[this.table.options.persistenceReaderFunc]) { + this.readFunc = Persistence.readers[this.table.options.persistenceReaderFunc]; + } else { + console.warn("Persistence Read Error - invalid reader set", this.table.options.persistenceReaderFunc); + } } - } - } else { - if (Persistence.readers[this.mode]) { - this.readFunc = Persistence.readers[this.mode]; } else { - console.warn("Persistence Read Error - invalid reader set", this.mode); + if (Persistence.readers[this.mode]) { + this.readFunc = Persistence.readers[this.mode]; + } else { + console.warn("Persistence Read Error - invalid reader set", this.mode); + } } - } - if (this.table.options.persistenceWriterFunc) { - if (typeof this.table.options.persistenceWriterFunc === "function") { - this.writeFunc = this.table.options.persistenceWriterFunc; - } else { - if (Persistence.writers[this.table.options.persistenceWriterFunc]) { - this.writeFunc = Persistence.writers[this.table.options.persistenceWriterFunc]; + if (this.table.options.persistenceWriterFunc) { + if (typeof this.table.options.persistenceWriterFunc === "function") { + this.writeFunc = this.table.options.persistenceWriterFunc; } else { - console.warn("Persistence Write Error - invalid reader set", this.table.options.persistenceWriterFunc); + if (Persistence.writers[this.table.options.persistenceWriterFunc]) { + this.writeFunc = Persistence.writers[this.table.options.persistenceWriterFunc]; + } else { + console.warn("Persistence Write Error - invalid reader set", this.table.options.persistenceWriterFunc); + } } - } - } else { - if (Persistence.writers[this.mode]) { - this.writeFunc = Persistence.writers[this.mode]; } else { - console.warn("Persistence Write Error - invalid writer set", this.mode); - } - } //set storage tag + if (Persistence.writers[this.mode]) { + this.writeFunc = Persistence.writers[this.mode]; + } else { + console.warn("Persistence Write Error - invalid writer set", this.mode); + } + } //set storage tag - this.id = "tabulator-" + (id || this.table.element.getAttribute("id") || ""); - this.config = { - sort: this.table.options.persistence === true || this.table.options.persistence.sort, - filter: this.table.options.persistence === true || this.table.options.persistence.filter, - group: this.table.options.persistence === true || this.table.options.persistence.group, - page: this.table.options.persistence === true || this.table.options.persistence.page, - columns: this.table.options.persistence === true ? ["title", "width", "visible"] : this.table.options.persistence.columns - }; //load pagination data if needed + this.id = "tabulator-" + (id || this.table.element.getAttribute("id") || ""); + this.config = { + sort: this.table.options.persistence === true || this.table.options.persistence.sort, + filter: this.table.options.persistence === true || this.table.options.persistence.filter, + group: this.table.options.persistence === true || this.table.options.persistence.group, + page: this.table.options.persistence === true || this.table.options.persistence.page, + columns: this.table.options.persistence === true ? ["title", "width", "visible"] : this.table.options.persistence.columns + }; //load pagination data if needed - if (this.config.page) { - retreivedData = this.retreiveData("page"); + if (this.config.page) { + retreivedData = this.retreiveData("page"); - if (retreivedData) { - if (typeof retreivedData.paginationSize !== "undefined" && (this.config.page === true || this.config.page.size)) { - this.table.options.paginationSize = retreivedData.paginationSize; + if (retreivedData) { + if (typeof retreivedData.paginationSize !== "undefined" && (this.config.page === true || this.config.page.size)) { + this.table.options.paginationSize = retreivedData.paginationSize; + } + + if (typeof retreivedData.paginationInitialPage !== "undefined" && (this.config.page === true || this.config.page.page)) { + this.table.options.paginationInitialPage = retreivedData.paginationInitialPage; + } } + } //load group data if needed + - if (typeof retreivedData.paginationInitialPage !== "undefined" && (this.config.page === true || this.config.page.page)) { - this.table.options.paginationInitialPage = retreivedData.paginationInitialPage; + if (this.config.group) { + retreivedData = this.retreiveData("group"); + + if (retreivedData) { + if (typeof retreivedData.groupBy !== "undefined" && (this.config.group === true || this.config.group.groupBy)) { + this.table.options.groupBy = retreivedData.groupBy; + } + + if (typeof retreivedData.groupStartOpen !== "undefined" && (this.config.group === true || this.config.group.groupStartOpen)) { + this.table.options.groupStartOpen = retreivedData.groupStartOpen; + } + + if (typeof retreivedData.groupHeader !== "undefined" && (this.config.group === true || this.config.group.groupHeader)) { + this.table.options.groupHeader = retreivedData.groupHeader; + } } } - } //load group data if needed + if (this.config.columns) { + this.table.options.columns = this.load("columns", this.table.options.columns); + this.subscribe("column-init", this.initializeColumn.bind(this)); + this.subscribe("column-show", this.save.bind(this, "columns")); + this.subscribe("column-hide", this.save.bind(this, "columns")); + this.subscribe("column-moved", this.save.bind(this, "columns")); + this.subscribe("table-built", this.tableBuilt.bind(this), 0); + } - if (this.config.group) { - retreivedData = this.retreiveData("group"); + this.subscribe("table-redraw", this.tableRedraw.bind(this)); + this.subscribe("filter-changed", this.eventSave.bind(this, "filter")); + this.subscribe("sort-changed", this.eventSave.bind(this, "sort")); + this.subscribe("group-changed", this.eventSave.bind(this, "group")); + this.subscribe("page-changed", this.eventSave.bind(this, "page")); + this.subscribe("column-resized", this.eventSave.bind(this, "columns")); + this.subscribe("layout-refreshed", this.eventSave.bind(this, "columns")); + } - if (retreivedData) { - if (typeof retreivedData.groupBy !== "undefined" && (this.config.group === true || this.config.group.groupBy)) { - this.table.options.groupBy = retreivedData.groupBy; - } + this.registerTableFunction("getColumnLayout", this.getColumnLayout.bind(this)); + this.registerTableFunction("setColumnLayout", this.setColumnLayout.bind(this)); + } + }, { + key: "eventSave", + value: function eventSave(type) { + if (this.config[type]) { + this.save(type); + } + } + }, { + key: "tableBuilt", + value: function tableBuilt() { + var options = this.table.options, + sorters, + filters; - if (typeof retreivedData.groupStartOpen !== "undefined" && (this.config.group === true || this.config.group.groupStartOpen)) { - this.table.options.groupStartOpen = retreivedData.groupStartOpen; - } + if (this.config.sort) { + sorters = this.load("sort"); - if (typeof retreivedData.groupHeader !== "undefined" && (this.config.group === true || this.config.group.groupHeader)) { - this.table.options.groupHeader = retreivedData.groupHeader; - } + if (!sorters === false) { + this.table.initialSort = sorters; } } - if (this.config.columns) { - this.table.options.columns = this.load("columns", this.table.options.columns); + if (this.config.filter) { + filters = this.load("filter"); + + if (!filters === false) { + this.table.initialFilter = filters; + } + } + } + }, { + key: "tableRedraw", + value: function tableRedraw(force) { + if (force && this.config.columns) { + this.save("columns"); } + } /////////////////////////////////// + ///////// Table Functions ///////// + /////////////////////////////////// + + }, { + key: "getColumnLayout", + value: function getColumnLayout() { + return this.parseColumns(this.table.columnManager.getColumns()); } + }, { + key: "setColumnLayout", + value: function setColumnLayout(layout) { + this.table.columnManager.setColumns(this.mergeDefinition(this.table.options.columns, layout)); + return true; + } /////////////////////////////////// + ///////// Internal Logic ////////// + /////////////////////////////////// + }, { key: "initializeColumn", value: function initializeColumn(column) { @@ -21151,36 +21803,72 @@ } }]); - return Persistence; - }(Module); + return Persistence; + }(Module); + + Persistence.moduleName = "persistence"; //load defaults + + Persistence.readers = defaultReaders; + Persistence.writers = defaultWriters; + + var Print = /*#__PURE__*/function (_Module) { + _inherits(Print, _Module); + + var _super = _createSuper(Print); + + function Print(table) { + var _this; + + _classCallCheck(this, Print); + + _this = _super.call(this, table); + _this.element = false; + _this.manualBlock = false; + + _this.registerTableOption("printAsHtml", false); //enable print as html + + + _this.registerTableOption("printFormatter", false); //printing page formatter + + + _this.registerTableOption("printHeader", false); //page header contents + + + _this.registerTableOption("printFooter", false); //page footer contents + + + _this.registerTableOption("printStyled", true); //enable print as html styling + - Persistence.moduleName = "persistence"; //load defaults + _this.registerTableOption("printRowRange", "visible"); //restrict print to visible rows only - Persistence.readers = defaultReaders; - Persistence.writers = defaultWriters; - var Print = /*#__PURE__*/function (_Module) { - _inherits(Print, _Module); + _this.registerTableOption("printConfig", {}); //print config options - var _super = _createSuper(Print); - function Print(table) { - var _this; + _this.registerColumnOption("print"); - _classCallCheck(this, Print); + _this.registerColumnOption("titlePrint"); - _this = _super.call(this, table); - _this.element = false; - _this.manualBlock = false; return _this; } _createClass(Print, [{ key: "initialize", value: function initialize() { - window.addEventListener("beforeprint", this.replaceTable.bind(this)); - window.addEventListener("afterprint", this.cleanup.bind(this)); - } + if (this.table.options.printAsHtml) { + window.addEventListener("beforeprint", this.replaceTable.bind(this)); + window.addEventListener("afterprint", this.cleanup.bind(this)); + } + + this.registerTableFunction("print", this.printFullscreen.bind(this)); + } /////////////////////////////////// + ///////// Table Functions ///////// + /////////////////////////////////// + /////////////////////////////////// + ///////// Internal Logic ////////// + /////////////////////////////////// + }, { key: "replaceTable", value: function replaceTable() { @@ -21280,10 +21968,28 @@ _this.origFuncs = {}; // hold original data array functions to allow replacement after data is done with _this.currentVersion = 0; + + _this.registerTableOption("reactiveData", false); //enable data reactivity + + return _this; } _createClass(ReactiveData, [{ + key: "initialize", + value: function initialize() { + if (this.table.options.reactiveData) { + this.subscribe("cell-value-save-before", this.block.bind(this)); + this.subscribe("cell-value-save-after", this.unblock.bind(this)); + this.subscribe("row-data-save-before", this.block.bind(this)); + this.subscribe("row-data-save-after", this.unblock.bind(this)); + this.subscribe("row-data-init-after", this.watchRow.bind(this)); + this.subscribe("data-processing", this.watchData.bind(this)); + this.subscribe("data-processing", this.watchData.bind(this)); + this.subscribe("table-destroy", this.unwatchData.bind(this)); + } + } + }, { key: "watchData", value: function watchData(data) { var self = this, @@ -21588,15 +22294,37 @@ _this.startWidth = false; _this.handle = null; _this.prevHandle = null; + + _this.registerColumnOption("resizable", true); + return _this; } _createClass(ResizeColumns, [{ + key: "initialize", + value: function initialize() { + // if(this.table.options.resizableColumns){ + this.subscribe("cell-layout", this.layoutCellHandles.bind(this)); + this.subscribe("column-init", this.layoutColumnHeader.bind(this)); // } + } + }, { + key: "layoutCellHandles", + value: function layoutCellHandles(cell) { + if (cell.row.type === "row") { + this.initializeColumn("cell", cell.column, cell.element); + } + } + }, { + key: "layoutColumnHeader", + value: function layoutColumnHeader(column) { + this.initializeColumn("header", column, column.element); + } + }, { key: "initializeColumn", value: function initializeColumn(type, column, element) { var self = this, variableHeight = false, - mode = this.table.options.resizableColumns; //set column resize mode + mode = column.definition.resizable; //set column resize mode if (type === "header") { variableHeight = column.definition.formatter == "textarea" || column.definition.variableHeight; @@ -21683,7 +22411,7 @@ }, { key: "_checkResizability", value: function _checkResizability(column) { - return typeof column.definition.resizable != "undefined" ? column.definition.resizable : this.table.options.resizableColumns; + return column.definition.resizable; } }, { key: "_mouseDown", @@ -21699,9 +22427,7 @@ column.setWidth(self.startWidth + ((typeof e.screenX === "undefined" ? e.touches[0].screenX : e.screenX) - self.startX)); } - if (self.table.options.virtualDomHoz) { - self.table.vdomHoz.reinitialize(true); - } + self.table.columnManager.renderer.rerenderColumns(true); if (!self.table.browserSlow && column.modules.resize && column.modules.resize.variableHeight) { column.checkCellHeights(); @@ -21723,12 +22449,8 @@ handle.removeEventListener("touchmove", mouseMove); handle.removeEventListener("touchend", mouseUp); self.table.element.classList.remove("tabulator-block-select"); - - if (self.table.options.persistence && self.table.modExists("persistence", true) && self.table.modules.persistence.config.columns) { - self.table.modules.persistence.save("columns"); - } - - self.table.options.columnResized.call(self.table, column.getComponent()); + self.dispatch("column-resized", column); + self.table.externalEvents.dispatch("columnResized", column.getComponent()); } e.stopPropagation(); //prevent resize from interfereing with movable columns @@ -21770,10 +22492,21 @@ _this.startHeight = false; _this.handle = null; _this.prevHandle = null; + + _this.registerTableOption("resizableRows", false); //resizable rows + + return _this; } _createClass(ResizeRows, [{ + key: "initialize", + value: function initialize() { + if (this.table.options.resizableRows) { + this.subscribe("row-layout-after", this.initializeRow.bind(this)); + } + } + }, { key: "initializeRow", value: function initializeRow(row) { var self = this, @@ -21837,7 +22570,7 @@ handle.removeEventListener("touchmove", mouseMove); handle.removeEventListener("touchend", mouseUp); self.table.element.classList.remove("tabulator-block-select"); - self.table.options.rowResized.call(this.table, row.getComponent()); + this.dispatchExternal("rowResized", row.getComponent()); } e.stopPropagation(); //prevent resize from interfereing with movable columns @@ -21881,90 +22614,97 @@ _this.containerHeight = 0; _this.containerWidth = 0; _this.autoResize = false; + + _this.registerTableOption("autoResize", true); //auto resize table + + return _this; } _createClass(ResizeTable, [{ key: "initialize", - value: function initialize(row) { + value: function initialize() { var _this2 = this; - var table = this.table, - tableStyle; - this.tableHeight = table.element.clientHeight; - this.tableWidth = table.element.clientWidth; - - if (table.element.parentNode) { - this.containerHeight = table.element.parentNode.clientHeight; - this.containerWidth = table.element.parentNode.clientWidth; - } - - if (typeof ResizeObserver !== "undefined" && table.rowManager.getRenderMode() === "virtual") { - this.autoResize = true; - this.observer = new ResizeObserver(function (entry) { - if (!table.browserMobile || table.browserMobile && !table.modules.edit.currentCell) { - var nodeHeight = Math.floor(entry[0].contentRect.height); - var nodeWidth = Math.floor(entry[0].contentRect.width); - - if (_this2.tableHeight != nodeHeight || _this2.tableWidth != nodeWidth) { - _this2.tableHeight = nodeHeight; - _this2.tableWidth = nodeWidth; - - if (table.element.parentNode) { - _this2.containerHeight = table.element.parentNode.clientHeight; - _this2.containerWidth = table.element.parentNode.clientWidth; - } - - if (table.options.virtualDomHoz) { - table.vdomHoz.reinitialize(true); - } + if (this.table.options.autoResize) { + var table = this.table, + tableStyle; + this.tableHeight = table.element.clientHeight; + this.tableWidth = table.element.clientWidth; - table.redraw(); - } - } - }); - this.observer.observe(table.element); - tableStyle = window.getComputedStyle(table.element); + if (table.element.parentNode) { + this.containerHeight = table.element.parentNode.clientHeight; + this.containerWidth = table.element.parentNode.clientWidth; + } - if (this.table.element.parentNode && !this.table.rowManager.fixedHeight && (tableStyle.getPropertyValue("max-height") || tableStyle.getPropertyValue("min-height"))) { - this.containerObserver = new ResizeObserver(function (entry) { + if (typeof ResizeObserver !== "undefined" && table.rowManager.getRenderMode() === "virtual") { + this.autoResize = true; + this.observer = new ResizeObserver(function (entry) { if (!table.browserMobile || table.browserMobile && !table.modules.edit.currentCell) { var nodeHeight = Math.floor(entry[0].contentRect.height); var nodeWidth = Math.floor(entry[0].contentRect.width); - if (_this2.containerHeight != nodeHeight || _this2.containerWidth != nodeWidth) { - _this2.containerHeight = nodeHeight; - _this2.containerWidth = nodeWidth; - _this2.tableHeight = table.element.clientHeight; - _this2.tableWidth = table.element.clientWidth; + if (_this2.tableHeight != nodeHeight || _this2.tableWidth != nodeWidth) { + _this2.tableHeight = nodeHeight; + _this2.tableWidth = nodeWidth; + + if (table.element.parentNode) { + _this2.containerHeight = table.element.parentNode.clientHeight; + _this2.containerWidth = table.element.parentNode.clientWidth; + } + + _this2.table.columnManager.renderer.rerenderColumns(true); + + table.redraw(); } + } + }); + this.observer.observe(table.element); + tableStyle = window.getComputedStyle(table.element); + + if (this.table.element.parentNode && !this.table.rowManager.fixedHeight && (tableStyle.getPropertyValue("max-height") || tableStyle.getPropertyValue("min-height"))) { + this.containerObserver = new ResizeObserver(function (entry) { + if (!table.browserMobile || table.browserMobile && !table.modules.edit.currentCell) { + var nodeHeight = Math.floor(entry[0].contentRect.height); + var nodeWidth = Math.floor(entry[0].contentRect.width); + + if (_this2.containerHeight != nodeHeight || _this2.containerWidth != nodeWidth) { + _this2.containerHeight = nodeHeight; + _this2.containerWidth = nodeWidth; + _this2.tableHeight = table.element.clientHeight; + _this2.tableWidth = table.element.clientWidth; + } - if (table.options.virtualDomHoz) { - table.vdomHoz.reinitialize(true); + table.columnManager.renderer.rerenderColumns(true); + table.redraw(); } + }); + this.containerObserver.observe(this.table.element.parentNode); + } + this.subscribe("table-resize", this.tableResized.bind(this)); + } else { + this.binding = function () { + if (!table.browserMobile || table.browserMobile && !table.modules.edit.currentCell) { + table.columnManager.renderer.rerenderColumns(true); table.redraw(); } - }); - this.containerObserver.observe(this.table.element.parentNode); - } - } else { - this.binding = function () { - if (!table.browserMobile || table.browserMobile && !table.modules.edit.currentCell) { - if (table.options.virtualDomHoz) { - table.vdomHoz.reinitialize(true); - } + }; - table.redraw(); - } - }; + window.addEventListener("resize", this.binding); + } - window.addEventListener("resize", this.binding); + this.subscribe("table-destroy", this.clearBindings.bind(this)); } } + }, { + key: "tableResized", + value: function tableResized() { + this.table.rowManager.redraw(); + } }, { key: "clearBindings", - value: function clearBindings(row) { + value: function clearBindings() { if (this.binding) { window.removeEventListener("resize", this.binding); } @@ -22002,6 +22742,21 @@ _this.collapseFormatter = []; _this.collapseStartOpen = true; _this.collapseHandleColumn = false; + + _this.registerTableOption("responsiveLayout", false); //responsive layout flags + + + _this.registerTableOption("responsiveLayoutCollapseStartOpen", true); //start showing collapsed data + + + _this.registerTableOption("responsiveLayoutCollapseUseFormatters", true); //responsive layout collapse formatter + + + _this.registerTableOption("responsiveLayoutCollapseFormatter", false); //responsive layout collapse formatter + + + _this.registerColumnOption("responsive"); + return _this; } //generate resposive columns list @@ -22009,8 +22764,35 @@ _createClass(ResponsiveLayout, [{ key: "initialize", value: function initialize() { - var self = this, - columns = []; + + if (this.table.options.responsiveLayout) { + this.subscribe("column-layout", this.initializeColumn.bind(this)); + this.subscribe("column-show", this.updateColumnVisibility.bind(this)); + this.subscribe("column-hide", this.updateColumnVisibility.bind(this)); + this.subscribe("columns-loaded", this.initializeResponsivity.bind(this)); + this.subscribe("column-moved", this.initializeResponsivity.bind(this)); + this.subscribe("column-add", this.initializeResponsivity.bind(this)); + this.subscribe("column-delete", this.initializeResponsivity.bind(this)); + this.subscribe("table-redrawing", this.tableRedraw.bind(this)); + + if (this.table.options.responsiveLayout === "collapse") { + this.subscribe("row-init", this.initializeRow.bind(this)); + this.subscribe("row-layout", this.layoutRow.bind(this)); + } + } + } + }, { + key: "tableRedraw", + value: function tableRedraw(force) { + if (["fitColumns", "fitDataStretch"].indexOf(this.layoutMode()) === -1) { + if (!force) { + this.update(); + } + } + } + }, { + key: "initializeResponsivity", + value: function initializeResponsivity() { this.mode = this.table.options.responsiveLayout; this.collapseFormatter = this.table.options.responsiveLayoutCollapseFormatter || this.formatCollapsedData; this.collapseStartOpen = this.table.options.responsiveLayoutCollapseStartOpen; @@ -22108,12 +22890,12 @@ }, { key: "updateColumnVisibility", - value: function updateColumnVisibility(column, visible) { - - if (column.modules.responsive) { - column.modules.responsive.visible = visible; + value: function updateColumnVisibility(column, responsiveToggle) { + if (!responsiveToggle && column.modules.responsive) { + column.modules.responsive.visible = column.visible; this.initialize(); - } + } //this.update(); + } }, { key: "hideColumn", @@ -22284,7 +23066,7 @@ var node_content; var titleHighlight = document.createElement("strong"); titleData.appendChild(titleHighlight); - this.table.modules.localize.bind("columns|" + item.field, function (text) { + this.langBind("columns|" + item.field, function (text) { titleHighlight.innerText = text || item.title; }); @@ -22330,10 +23112,70 @@ _this.headerCheckboxElement = null; // hold header select element + _this.registerTableOption("selectable", "highlight"); //highlight rows on hover + + + _this.registerTableOption("selectableRangeMode", "drag"); //highlight rows on hover + + + _this.registerTableOption("selectableRollingSelection", true); //roll selection once maximum number of selectable rows is reached + + + _this.registerTableOption("selectablePersistence", true); // maintain selection when table view is updated + + + _this.registerTableOption("selectableCheck", function (data, row) { + return true; + }); //check wheather row is selectable + + + _this.registerTableFunction("selectRow", _this.selectRows.bind(_assertThisInitialized(_this))); + + _this.registerTableFunction("deselectRow", _this.deselectRows.bind(_assertThisInitialized(_this))); + + _this.registerTableFunction("toggleSelectRow", _this.toggleRow.bind(_assertThisInitialized(_this))); + + _this.registerTableFunction("getSelectedRows", _this.getSelectedRows.bind(_assertThisInitialized(_this))); + + _this.registerTableFunction("getSelectedData", _this.getSelectedData.bind(_assertThisInitialized(_this))); //register component functions + + + _this.registerComponentFunction("row", "select", _this.selectRows.bind(_assertThisInitialized(_this))); + + _this.registerComponentFunction("row", "deselect", _this.deselectRows.bind(_assertThisInitialized(_this))); + + _this.registerComponentFunction("row", "toggleSelect", _this.toggleRow.bind(_assertThisInitialized(_this))); + + _this.registerComponentFunction("row", "isSelected", _this.isRowSelected.bind(_assertThisInitialized(_this))); + return _this; } _createClass(SelectRow, [{ + key: "initialize", + value: function initialize() { + if (this.table.options.selectable !== false) { + this.subscribe("row-init", this.initializeRow.bind(this)); + this.subscribe("row-deleting", this.rowDeleted.bind(this)); + this.subscribe("rows-wipe", this.clearSelectionData.bind(this)); + this.subscribe("rows-retrieve", this.clearSelectionData.bind(this)); + + if (this.table.options.selectable && this.table.options.selectablePersistence) { + this.subscribe("data-refeshing", this.deselectRows.bind(this)); + } + } + } + }, { + key: "rowRetrieve", + value: function rowRetrieve(type, prevValue) { + return type === "selected" ? this.selectedRows : prevValue; + } + }, { + key: "rowDeleted", + value: function rowDeleted(row) { + this._deselectRow(row, true); + } + }, { key: "clearSelectionData", value: function clearSelectionData(silent) { this.selecting = false; @@ -22341,7 +23183,7 @@ this.selectPrev = []; this.selectedRows = []; - if (!silent) { + if (silent !== true) { this._rowSelectionChanged(); } } @@ -22559,7 +23401,7 @@ } if (!silent) { - this.table.options.rowSelected.call(this.table, row.getComponent()); + this.dispatchExternal("rowSelected", row.getComponent()); } this._rowSelectionChanged(silent); @@ -22635,7 +23477,7 @@ } if (!silent) { - self.table.options.rowDeselected.call(this.table, row.getComponent()); + this.dispatchExternal("rowDeselected", row.getComponent()); } self._rowSelectionChanged(silent); @@ -22681,7 +23523,7 @@ } if (!silent) { - this.table.options.rowSelectionChanged.call(this.table, this.getSelectedData(), this.getSelectedRows()); + this.dispatchExternal("rowSelectionChanged", this.getSelectedData(), this.getSelectedRows()); } } }, { @@ -22796,7 +23638,7 @@ switch (_typeof(params.locale)) { case "boolean": if (params.locale) { - locale = this.table.modules.localize.getLocale(); + locale = this.langLocale(); } break; @@ -23006,15 +23848,92 @@ _this.changed = false; //has the sort changed since last render - return _this; - } //initialize column header for sorting + _this.registerTableOption("sortMode", "local"); //local or remote sorting + + + _this.registerTableOption("initialSort", false); //initial sorting criteria + + + _this.registerTableOption("columnHeaderSortMulti", true); //multiple or single column sorting + + + _this.registerTableOption("sortOrderReverse", false); //reverse internal sort ordering + + + _this.registerTableOption("headerSortElement", "
"); //header sort element + + + _this.registerColumnOption("sorter"); + + _this.registerColumnOption("sorterParams"); + + _this.registerColumnOption("headerSort", true); + + _this.registerColumnOption("headerSortStartingDir"); + _this.registerColumnOption("headerSortTristate"); + + return _this; + } _createClass(Sort, [{ + key: "initialize", + value: function initialize() { + this.subscribe("column-layout", this.initializeColumn.bind(this)); + this.subscribe("table-built", this.tableBuilt.bind(this)); + this.registerDataHandler(this.sort.bind(this), 20); + this.registerTableFunction("setSort", this.userSetSort.bind(this)); + this.registerTableFunction("getSorters", this.getSort.bind(this)); + this.registerTableFunction("clearSort", this.clearSort.bind(this)); + + if (this.table.options.sortMode === "remote") { + this.subscribe("data-params", this.remoteSortParams.bind(this)); + } + } + }, { + key: "tableBuilt", + value: function tableBuilt() { + if (this.table.options.initialSort) { + this.setSort(this.table.options.initialSort); + } + } + }, { + key: "remoteSortParams", + value: function remoteSortParams(data, config, silent, params) { + var sorters = this.getSort(); + sorters.forEach(function (item) { + delete item.column; + }); + params.sort = sorters; + return params; + } /////////////////////////////////// + ///////// Table Functions ///////// + /////////////////////////////////// + + }, { + key: "userSetSort", + value: function userSetSort(sortList, dir) { + this.setSort(sortList, dir); // this.table.rowManager.sorterRefresh(); + + this.refreshSort(); + } + }, { + key: "clearSort", + value: function clearSort() { + this.clear(); // this.table.rowManager.sorterRefresh(); + + this.refreshSort(); + } /////////////////////////////////// + ///////// Internal Logic ////////// + /////////////////////////////////// + //initialize column header for sorting + + }, { key: "initializeColumn", - value: function initializeColumn(column, content) { - var self = this, - sorter = false, + value: function initializeColumn(column) { + var _this2 = this; + + var sorter = false, colEl, arrowEl; @@ -23038,10 +23957,10 @@ dir: "none", params: column.definition.sorterParams || {}, startingDir: column.definition.headerSortStartingDir || "asc", - tristate: typeof column.definition.headerSortTristate !== "undefined" ? column.definition.headerSortTristate : this.table.options.headerSortTristate + tristate: column.definition.headerSortTristate }; - if (typeof column.definition.headerSort === "undefined" ? this.table.options.headerSort !== false : column.definition.headerSort !== false) { + if (column.definition.headerSort !== false) { colEl = column.getElement(); colEl.classList.add("tabulator-sortable"); arrowEl = document.createElement("div"); @@ -23054,7 +23973,7 @@ } //create sorter arrow - content.appendChild(arrowEl); + column.titleHolderElement.appendChild(arrowEl); column.modules.sort.element = arrowEl; //sort on click colEl.addEventListener("click", function (e) { @@ -23088,8 +24007,8 @@ } } - if (self.table.options.columnHeaderSortMulti && (e.shiftKey || e.ctrlKey)) { - sorters = self.getSort(); + if (_this2.table.options.columnHeaderSortMulti && (e.shiftKey || e.ctrlKey)) { + sorters = _this2.getSort(); match = sorters.findIndex(function (sorter) { return sorter.field === column.getField(); }); @@ -23114,20 +24033,33 @@ } //add to existing sort - self.setSort(sorters); + _this2.setSort(sorters); } else { if (dir == "none") { - self.clear(); + _this2.clear(); } else { //sort by column only - self.setSort(column, dir); + _this2.setSort(column, dir); } - } + } // this.table.rowManager.sorterRefresh(!this.sortList.length); - self.table.rowManager.sorterRefresh(!self.sortList.length); + + _this2.refreshSort(); } }); } + } + }, { + key: "refreshSort", + value: function refreshSort() { + if (this.table.options.sortMode === "remote") { + this.reloadData(); + } else { + this.refreshData(); + } //TODO - Persist left position of row manager + // left = this.scrollLeft; + // this.scrollHorizontal(left); + } //check if the sorters have changed since last use }, { @@ -23181,10 +24113,7 @@ } }); self.sortList = newSortList; - - if (this.table.options.persistence && this.table.modExists("persistence", true) && this.table.modules.persistence.config.sort) { - this.table.modules.persistence.save("sort"); - } + this.dispatch("sort-changed"); } //clear sorters }, { @@ -23242,13 +24171,13 @@ sortListActual = [], rowComponents = []; - if (self.table.options.dataSorting) { - self.table.options.dataSorting.call(self.table, self.getSort()); + if (this.subscribedExternal("dataSorting")) { + this.dispatchExternal("dataSorting", self.getSort()); } self.clearColumnHeaders(); - if (!self.table.options.ajaxSorting) { + if (this.table.options.sortMode !== "remote") { //build list of valid sorters and trigger column specific callbacks before sort begins sortList.forEach(function (item, i) { var sortObj = item.column.modules.sort; @@ -23275,11 +24204,11 @@ }); } - if (self.table.options.dataSorted) { + if (this.subscribedExternal("dataSorted")) { data.forEach(function (row) { rowComponents.push(row.getComponent()); }); - self.table.options.dataSorted.call(self.table, self.getSort(), rowComponents); + this.dispatchExternal("dataSorted", self.getSort(), rowComponents); } } //clear sort arrows on columns @@ -23304,7 +24233,7 @@ }, { key: "_sortItems", value: function _sortItems(data, sortList) { - var _this2 = this; + var _this3 = this; var sorterCount = sortList.length - 1; data.sort(function (a, b) { @@ -23312,7 +24241,7 @@ for (var i = sorterCount; i >= 0; i--) { var sortItem = sortList[i]; - result = _this2._sortRow(a, b, sortItem.column, sortItem.dir, sortItem.params); + result = _this3._sortRow(a, b, sortItem.column, sortItem.dir, sortItem.params); if (result !== 0) { break; @@ -23491,11 +24420,123 @@ _this = _super.call(this, table); _this.invalidCells = []; - return _this; - } //validate + _this.registerTableOption("validationMode", "blocking"); + + _this.registerColumnOption("validator"); + + _this.registerTableFunction("getInvalidCells", _this.getInvalidCells.bind(_assertThisInitialized(_this))); + + _this.registerTableFunction("clearCellValidation", _this.userClearCellValidation.bind(_assertThisInitialized(_this))); + + _this.registerTableFunction("validate", _this.userValidate.bind(_assertThisInitialized(_this))); + + _this.registerComponentFunction("cell", "isValid", _this.cellIsValid.bind(_assertThisInitialized(_this))); + + _this.registerComponentFunction("cell", "clearValidation", _this.clearValidation.bind(_assertThisInitialized(_this))); + + _this.registerComponentFunction("cell", "validate", _this.cellValidate.bind(_assertThisInitialized(_this))); + + _this.registerComponentFunction("column", "validate", _this.columnValidate.bind(_assertThisInitialized(_this))); + + _this.registerComponentFunction("row", "validate", _this.rowValidate.bind(_assertThisInitialized(_this))); + + return _this; + } _createClass(Validate, [{ + key: "initialize", + value: function initialize() { + this.subscribe("cell-delete", this.clearValidation.bind(this)); + this.subscribe("column-layout", this.initializeColumnCheck.bind(this)); + } /////////////////////////////////// + ////////// Cell Functions ///////// + /////////////////////////////////// + + }, { + key: "cellIsValid", + value: function cellIsValid(cell) { + return cell.modules.validate ? !cell.modules.validate.invalid : true; + } + }, { + key: "cellValidate", + value: function cellValidate(cell) { + return this.validate(cell.column.modules.validate, cell, cell.getValue()); + } /////////////////////////////////// + ///////// Column Functions //////// + /////////////////////////////////// + + }, { + key: "columnValidate", + value: function columnValidate(column) { + var invalid = []; + column.cells.forEach(function (cell) { + if (!this.cellValidate(cell)) { + invalid.push(cell.getComponent()); + } + }); + return invalid.length ? invalid : true; + } /////////////////////////////////// + ////////// Row Functions ////////// + /////////////////////////////////// + + }, { + key: "rowValidate", + value: function rowValidate(row) { + var invalid = []; + row.cells.forEach(function (cell) { + if (!this.cellValidate(cell)) { + invalid.push(cell.getComponent()); + } + }); + return invalid.length ? invalid : true; + } /////////////////////////////////// + ///////// Table Functions ///////// + /////////////////////////////////// + + }, { + key: "userClearCellValidation", + value: function userClearCellValidation(cells) { + var _this2 = this; + + if (!cells) { + cells = this.getInvalidCells(); + } + + if (!Array.isArray(cells)) { + cells = [cells]; + } + + cells.forEach(function (cell) { + _this2.clearValidation(cell._getSelf()); + }); + } + }, { + key: "userValidate", + value: function userValidate(cells) { + var output = []; //clear row data + + this.table.rowManager.rows.forEach(function (row) { + var valid = row.validate(); + + if (valid !== true) { + output = output.concat(valid); + } + }); + return output.length ? output : true; + } /////////////////////////////////// + ///////// Internal Logic ////////// + /////////////////////////////////// + + }, { + key: "initializeColumnCheck", + value: function initializeColumnCheck(column) { + if (typeof column.definition.validator !== "undefined") { + this.initializeColumn(column); + } + } //validate + + }, { key: "initializeColumn", value: function initializeColumn(column) { var self = this, @@ -23658,6 +24699,7 @@ GroupRowsModule: GroupRows, HistoryModule: History, HtmlTableImportModule: HtmlTableImport, + InteractionModule: Interaction, KeybindingsModule: Keybindings, MenuModule: Menu, MoveColumnsModule: MoveColumns, diff --git a/dist/js/tabulator.js.map b/dist/js/tabulator.js.map index a11d844fc..aa99b0db4 100644 --- a/dist/js/tabulator.js.map +++ b/dist/js/tabulator.js.map @@ -1 +1 @@ -{"version":3,"file":"tabulator.js","sources":["../../src/js/core/defaults/options.js","../../src/js/core/column/ColumnComponent.js","../../src/js/core/column/defaults/options.js","../../src/js/core/cell/CellComponent.js","../../src/js/core/cell/Cell.js","../../src/js/core/column/Column.js","../../src/js/core/Helpers.js","../../src/js/core/ColumnManager.js","../../src/js/core/row/RowComponent.js","../../src/js/core/row/Row.js","../../src/js/core/RowManager.js","../../src/js/core/FooterManager.js","../../src/js/core/TableRegistry.js","../../src/js/core/Module.js","../../src/js/modules/Layout/defaults/modes/fitData.js","../../src/js/modules/Layout/defaults/modes/fitDataGeneral.js","../../src/js/modules/Layout/defaults/modes/fitDataStretch.js","../../src/js/modules/Layout/defaults/modes/fitColumns.js","../../src/js/modules/Layout/defaults/modes.js","../../src/js/modules/Layout/Layout.js","../../src/js/modules/Localize/defaults/langs.js","../../src/js/modules/Localize/Localize.js","../../src/js/modules/Comms/Comms.js","../../src/js/core/ModuleBinder.js","../../src/js/core/renderers/VirtualDomHorizontal.js","../../src/js/core/Tabulator.js","../../src/js/modules/Accessor/defaults/accessors.js","../../src/js/modules/Accessor/Accessor.js","../../src/js/modules/Ajax/defaults/config.js","../../src/js/modules/Ajax/defaults/urlGenerator.js","../../src/js/modules/Ajax/defaults/loaderPromise.js","../../src/js/modules/Ajax/defaults/contentTypeFormatters.js","../../src/js/modules/Ajax/Ajax.js","../../src/js/modules/Clipboard/defaults/pasteActions.js","../../src/js/modules/Clipboard/defaults/pasteParsers.js","../../src/js/modules/Clipboard/Clipboard.js","../../src/js/modules/ColumnCalcs/CalcComponent.js","../../src/js/modules/ColumnCalcs/defaults/calculations.js","../../src/js/modules/ColumnCalcs/ColumnCalcs.js","../../src/js/modules/DataTree/DataTree.js","../../src/js/modules/Download/defaults/downloaders/csv.js","../../src/js/modules/Download/defaults/downloaders/json.js","../../src/js/modules/Download/defaults/downloaders/pdf.js","../../src/js/modules/Download/defaults/downloaders/xlsx.js","../../src/js/modules/Download/defaults/downloaders/html.js","../../src/js/modules/Download/defaults/downloaders.js","../../src/js/modules/Download/Download.js","../../src/js/modules/Edit/defaults/editors/input.js","../../src/js/modules/Edit/defaults/editors/textarea.js","../../src/js/modules/Edit/defaults/editors/number.js","../../src/js/modules/Edit/defaults/editors/range.js","../../src/js/modules/Edit/defaults/editors/select.js","../../src/js/modules/Edit/defaults/editors/autocomplete.js","../../src/js/modules/Edit/defaults/editors/star.js","../../src/js/modules/Edit/defaults/editors/progress.js","../../src/js/modules/Edit/defaults/editors/tickCross.js","../../src/js/modules/Edit/defaults/editors.js","../../src/js/modules/Edit/Edit.js","../../src/js/modules/Export/ExportRow.js","../../src/js/modules/Export/ExportColumn.js","../../src/js/modules/Export/Export.js","../../src/js/modules/Filter/defaults/filters.js","../../src/js/modules/Filter/Filter.js","../../src/js/modules/Format/defaults/formatters/plaintext.js","../../src/js/modules/Format/defaults/formatters/html.js","../../src/js/modules/Format/defaults/formatters/textarea.js","../../src/js/modules/Format/defaults/formatters/money.js","../../src/js/modules/Format/defaults/formatters/link.js","../../src/js/modules/Format/defaults/formatters/image.js","../../src/js/modules/Format/defaults/formatters/tickCross.js","../../src/js/modules/Format/defaults/formatters/datetime.js","../../src/js/modules/Format/defaults/formatters/datetimediff.js","../../src/js/modules/Format/defaults/formatters/lookup.js","../../src/js/modules/Format/defaults/formatters/star.js","../../src/js/modules/Format/defaults/formatters/traffic.js","../../src/js/modules/Format/defaults/formatters/progress.js","../../src/js/modules/Format/defaults/formatters/color.js","../../src/js/modules/Format/defaults/formatters/buttonTick.js","../../src/js/modules/Format/defaults/formatters/buttonCross.js","../../src/js/modules/Format/defaults/formatters/rownum.js","../../src/js/modules/Format/defaults/formatters/handle.js","../../src/js/modules/Format/defaults/formatters/responsiveCollapse.js","../../src/js/modules/Format/defaults/formatters/rowSelection.js","../../src/js/modules/Format/defaults/formatters.js","../../src/js/modules/Format/Format.js","../../src/js/modules/FrozenColumns/FrozenColumns.js","../../src/js/modules/FrozenRows/FrozenRows.js","../../src/js/modules/GroupRows/Group.js","../../src/js/modules/GroupRows/GroupRows.js","../../src/js/modules/History/defaults/undoers.js","../../src/js/modules/History/defaults/redoers.js","../../src/js/modules/History/History.js","../../src/js/modules/HtmlTableImport/HtmlTableImport.js","../../src/js/modules/Keybindings/defaults/bindings.js","../../src/js/modules/Keybindings/defaults/actions.js","../../src/js/modules/Keybindings/Keybindings.js","../../src/js/modules/Menu/Menu.js","../../src/js/modules/MoveColumns/MoveColumns.js","../../src/js/modules/MoveRows/MoveRows.js","../../src/js/modules/Mutator/defaults/mutators.js","../../src/js/modules/Mutator/Mutator.js","../../src/js/modules/Page/defaults/dataSentNames.js","../../src/js/modules/Page/defaults/dataReceivedNames.js","../../src/js/modules/Page/Page.js","../../src/js/modules/Persistence/defaults/readers.js","../../src/js/modules/Persistence/defaults/writers.js","../../src/js/modules/Persistence/Persistence.js","../../src/js/modules/Print/Print.js","../../src/js/modules/ReactiveData/ReactiveData.js","../../src/js/modules/ResizeColumns/ResizeColumns.js","../../src/js/modules/ResizeRows/ResizeRows.js","../../src/js/modules/ResizeTable/ResizeTable.js","../../src/js/modules/ResponsiveLayout/ResponsiveLayout.js","../../src/js/modules/SelectRow/SelectRow.js","../../src/js/modules/Sort/defaults/sorters/number.js","../../src/js/modules/Sort/defaults/sorters/string.js","../../src/js/modules/Sort/defaults/sorters/datetime.js","../../src/js/modules/Sort/defaults/sorters/date.js","../../src/js/modules/Sort/defaults/sorters/time.js","../../src/js/modules/Sort/defaults/sorters/boolean.js","../../src/js/modules/Sort/defaults/sorters/array.js","../../src/js/modules/Sort/defaults/sorters/exists.js","../../src/js/modules/Sort/defaults/sorters/alphanum.js","../../src/js/modules/Sort/defaults/sorters.js","../../src/js/modules/Sort/Sort.js","../../src/js/modules/Validate/defaults/validators.js","../../src/js/modules/Validate/Validate.js","../../src/js/core/TabulatorFull.js"],"sourcesContent":["export default {\r\n\theight:false, //height of tabulator\r\n\tminHeight:false, //minimum height of tabulator\r\n\tmaxHeight:false, //maximum height of tabulator\r\n\r\n\tlayout:\"fitData\", ///layout type \"fitColumns\" | \"fitData\"\r\n\tlayoutColumnsOnNewData:false, //update column widths on setData\r\n\r\n\tcolumnMinWidth:40, //minimum global width for a column\r\n\tcolumnMaxWidth:false, //minimum global width for a column\r\n\tcolumnHeaderVertAlign:\"top\", //vertical alignment of column headers\r\n\r\n\tresizableColumns:true, //resizable columns\r\n\tresizableRows:false, //resizable rows\r\n\tautoResize:true, //auto resize table\r\n\r\n\tcolumns:[],//store for colum header info\r\n\tcolumnDefaults:false, //store column default props\r\n\r\n\tcellHozAlign:\"\", //horizontal align columns\r\n\tcellVertAlign:\"\", //vertical align columns\r\n\theaderHozAlign:\"\", //horizontal header alignment\r\n\r\n\tdata:[], //default starting data\r\n\r\n\tautoColumns:false, //build columns from data row structure\r\n\tautoColumnsDefinitions:false,\r\n\r\n\treactiveData:false, //enable data reactivity\r\n\r\n\tnestedFieldSeparator:\".\", //seperatpr for nested data\r\n\r\n\ttooltips: false, //Tool tip value\r\n\ttooltipsHeader: false, //Tool tip for headers\r\n\ttooltipGenerationMode:\"load\", //when to generate tooltips\r\n\r\n\tinitialSort:false, //initial sorting criteria\r\n\tinitialFilter:false, //initial filtering criteria\r\n\tinitialHeaderFilter:false, //initial header filtering criteria\r\n\r\n\tcolumnHeaderSortMulti: true, //multiple or single column sorting\r\n\r\n\tsortOrderReverse:false, //reverse internal sort ordering\r\n\r\n\theaderSort:true, //set default global header sort\r\n\theaderSortTristate:false, //set default tristate header sorting\r\n\theaderSortElement:\"
\", //header sort element\r\n\r\n\tfooterElement:false, //hold footer element\r\n\r\n\tindex:\"id\", //filed for row index\r\n\r\n\ttextDirection:\"auto\",\r\n\r\n\tkeybindings:[], //array for keybindings\r\n\r\n\ttabEndNewRow:false, //create new row when tab to end of table\r\n\r\n\tinvalidOptionWarnings:true, //allow toggling of invalid option warnings\r\n\r\n\tclipboard:false, //enable clipboard\r\n\tclipboardCopyStyled:true, //formatted table data\r\n\tclipboardCopyConfig:false, //clipboard config\r\n\tclipboardCopyFormatter:false, //DEPRICATED - REMOVE in 5.0\r\n\tclipboardCopyRowRange:\"active\", //restrict clipboard to visible rows only\r\n\tclipboardPasteParser:\"table\", //convert pasted clipboard data to rows\r\n\tclipboardPasteAction:\"insert\", //how to insert pasted data into the table\r\n\r\n\tclipboardCopied:function(){}, //data has been copied to the clipboard\r\n\tclipboardPasted:function(){}, //data has been pasted into the table\r\n\tclipboardPasteError:function(){}, //data has not successfully been pasted into the table\r\n\r\n\tdownloadReady:function(data, blob){return blob;}, //function to manipulate download data\r\n\tdownloadComplete:false, //function to manipulate download data\r\n\tdownloadConfig:{},\t//download config\r\n\tdownloadRowRange:\"active\", //restrict download to active rows only\r\n\r\n\tdataTree:false, //enable data tree\r\n\tdataTreeFilter:true, //filter child rows\r\n\tdataTreeSort:true, //sort child rows\r\n\tdataTreeElementColumn:false,\r\n\tdataTreeBranchElement: true, //show data tree branch element\r\n\tdataTreeChildIndent:9, //data tree child indent in px\r\n\tdataTreeChildField:\"_children\", //data tre column field to look for child rows\r\n\tdataTreeCollapseElement:false, //data tree row collapse element\r\n\tdataTreeExpandElement:false, //data tree row expand element\r\n\tdataTreeStartExpanded:false,\r\n\tdataTreeRowExpanded:function(){}, //row has been expanded\r\n\tdataTreeRowCollapsed:function(){}, //row has been collapsed\r\n\tdataTreeChildColumnCalcs:false, //include visible data tree rows in column calculations\r\n\tdataTreeSelectPropagate:false, //seleccting a parent row selects its children\r\n\r\n\tprintAsHtml:false, //enable print as html\r\n\tprintFormatter:false, //printing page formatter\r\n\tprintHeader:false, //page header contents\r\n\tprintFooter:false, //page footer contents\r\n\tprintStyled:true, //enable print as html styling\r\n\tprintRowRange:\"visible\", //restrict print to visible rows only\r\n\tprintConfig:{}, //print config options\r\n\r\n\taddRowPos:\"bottom\", //position to insert blank rows, top|bottom\r\n\r\n\tselectable:\"highlight\", //highlight rows on hover\r\n\tselectableRangeMode: \"drag\", //highlight rows on hover\r\n\tselectableRollingSelection:true, //roll selection once maximum number of selectable rows is reached\r\n\tselectablePersistence:true, // maintain selection when table view is updated\r\n\tselectableCheck:function(data, row){return true;}, //check wheather row is selectable\r\n\r\n\theaderFilterLiveFilterDelay: 300, //delay before updating column after user types in header filter\r\n\theaderFilterPlaceholder: false, //placeholder text to display in header filters\r\n\r\n\theaderVisible:true, //hide header\r\n\r\n\thistory:false, //enable edit history\r\n\r\n\tlocale:false, //current system language\r\n\tlangs:{},\r\n\r\n\tvirtualDom:true, //enable DOM virtualization\r\n virtualDomBuffer:0, // set virtual DOM buffer size\r\n\tvirtualDomHoz:false, //enable horizontal DOM virtualization\r\n\r\n\tpersistence:false,\r\n\tpersistenceID:\"\", //key for persistent storage\r\n\tpersistenceMode:true, //mode for storing persistence information\r\n\tpersistenceReaderFunc:false, //function for handling persistence data reading\r\n\tpersistenceWriterFunc:false, //function for handling persistence data writing\r\n\r\n\r\n\tresponsiveLayout:false, //responsive layout flags\r\n\tresponsiveLayoutCollapseStartOpen:true, //start showing collapsed data\r\n\tresponsiveLayoutCollapseUseFormatters:true, //responsive layout collapse formatter\r\n\tresponsiveLayoutCollapseFormatter:false, //responsive layout collapse formatter\r\n\r\n\tpagination:false, //set pagination type\r\n\tpaginationSize:false, //set number of rows to a page\r\n\tpaginationInitialPage:1, //initail page to show on load\r\n\tpaginationButtonCount: 5, // set count of page button\r\n\tpaginationSizeSelector:false, //add pagination size selector element\r\n\tpaginationElement:false, //element to hold pagination numbers\r\n\tpaginationDataSent:{}, //pagination data sent to the server\r\n\tpaginationDataReceived:{}, //pagination data received from the server\r\n\tpaginationAddRow: \"page\", //add rows on table or page\r\n\r\n\tajaxURL:false, //url for ajax loading\r\n\tajaxURLGenerator:false,\r\n\tajaxParams:{}, //params for ajax loading\r\n\tajaxConfig:\"get\", //ajax request type\r\n\tajaxContentType:\"form\", //ajax request type\r\n\tajaxRequestFunc:false, //promise function\r\n\tajaxLoader:true, //show loader\r\n\tajaxLoaderLoading:false, //loader element\r\n\tajaxLoaderError:false, //loader element\r\n\tajaxFiltering:false,\r\n\tajaxSorting:false,\r\n\tajaxProgressiveLoad:false, //progressive loading\r\n\tajaxProgressiveLoadDelay:0, //delay between requests\r\n\tajaxProgressiveLoadScrollMargin:0, //margin before scroll begins\r\n\r\n\tgroupBy:false, //enable table grouping and set field to group by\r\n\tgroupStartOpen:true, //starting state of group\r\n\tgroupValues:false,\r\n\tgroupUpdateOnCellEdit:false,\r\n\r\n\tgroupHeader:false, //header generation function\r\n\tgroupHeaderPrint:null,\r\n\tgroupHeaderClipboard:null,\r\n\tgroupHeaderHtmlOutput:null,\r\n\tgroupHeaderDownload:null,\r\n\r\n\thtmlOutputConfig:false, //html outypu config\r\n\r\n\tmovableColumns:false, //enable movable columns\r\n\r\n\tmovableRows:false, //enable movable rows\r\n\tmovableRowsConnectedTables:false, //tables for movable rows to be connected to\r\n\tmovableRowsConnectedElements:false, //other elements for movable rows to be connected to\r\n\tmovableRowsSender:false,\r\n\tmovableRowsReceiver:\"insert\",\r\n\tmovableRowsSendingStart:function(){},\r\n\tmovableRowsSent:function(){},\r\n\tmovableRowsSentFailed:function(){},\r\n\tmovableRowsSendingStop:function(){},\r\n\tmovableRowsReceivingStart:function(){},\r\n\tmovableRowsReceived:function(){},\r\n\tmovableRowsReceivedFailed:function(){},\r\n\tmovableRowsReceivingStop:function(){},\r\n\tmovableRowsElementDrop:function(){},\r\n\r\n\tscrollToRowPosition:\"top\",\r\n\tscrollToRowIfVisible:true,\r\n\r\n\tscrollToColumnPosition:\"left\",\r\n\tscrollToColumnIfVisible:true,\r\n\r\n\trowFormatter:false,\r\n\trowFormatterPrint:null,\r\n\trowFormatterClipboard:null,\r\n\trowFormatterHtmlOutput:null,\r\n\r\n\tplaceholder:false,\r\n\r\n\t//table building callbacks\r\n\ttableBuilding:function(){},\r\n\ttableBuilt:function(){},\r\n\r\n\t//render callbacks\r\n\trenderStarted:function(){},\r\n\trenderComplete:function(){},\r\n\r\n\t//row callbacks\r\n\trowClick:false,\r\n\trowDblClick:false,\r\n\trowContext:false,\r\n\trowTap:false,\r\n\trowDblTap:false,\r\n\trowTapHold:false,\r\n\trowMouseEnter:false,\r\n\trowMouseLeave:false,\r\n\trowMouseOver:false,\r\n\trowMouseOut:false,\r\n\trowMouseMove:false,\r\n\trowContextMenu:false,\r\n\trowClickMenu:false,\r\n\trowAdded:function(){},\r\n\trowDeleted:function(){},\r\n\trowMoved:function(){},\r\n\trowUpdated:function(){},\r\n\trowSelectionChanged:function(){},\r\n\trowSelected:function(){},\r\n\trowDeselected:function(){},\r\n\trowResized:function(){},\r\n\r\n\t//cell callbacks\r\n\t//row callbacks\r\n\tcellClick:false,\r\n\tcellDblClick:false,\r\n\tcellContext:false,\r\n\tcellTap:false,\r\n\tcellDblTap:false,\r\n\tcellTapHold:false,\r\n\tcellMouseEnter:false,\r\n\tcellMouseLeave:false,\r\n\tcellMouseOver:false,\r\n\tcellMouseOut:false,\r\n\tcellMouseMove:false,\r\n\tcellEditing:function(){},\r\n\tcellEdited:function(){},\r\n\tcellEditCancelled:function(){},\r\n\r\n\t//column callbacks\r\n\tcolumnMoved:false,\r\n\tcolumnResized:function(){},\r\n\tcolumnTitleChanged:function(){},\r\n\tcolumnVisibilityChanged:function(){},\r\n\r\n\t//HTML iport callbacks\r\n\thtmlImporting:function(){},\r\n\thtmlImported:function(){},\r\n\r\n\t//data callbacks\r\n\tdataLoading:function(){},\r\n\tdataLoaded:function(){},\r\n\tdataChanged:false,\r\n\r\n\t//ajax callbacks\r\n\tajaxRequesting:function(){},\r\n\tajaxResponse:false,\r\n\tajaxError:function(){},\r\n\r\n\t//filtering callbacks\r\n\tdataFiltering:false,\r\n\tdataFiltered:false,\r\n\r\n\t//sorting callbacks\r\n\tdataSorting:function(){},\r\n\tdataSorted:function(){},\r\n\r\n\t//grouping callbacks\r\n\tgroupToggleElement:\"arrow\",\r\n\tgroupClosedShowCalcs:false,\r\n\tdataGrouping:function(){},\r\n\tdataGrouped:false,\r\n\tgroupVisibilityChanged:function(){},\r\n\tgroupClick:false,\r\n\tgroupDblClick:false,\r\n\tgroupContext:false,\r\n\tgroupContextMenu:false,\r\n\tgroupClickMenu:false,\r\n\tgroupTap:false,\r\n\tgroupDblTap:false,\r\n\tgroupTapHold:false,\r\n\r\n\tcolumnCalcs:true,\r\n\r\n\t//pagination callbacks\r\n\tpageLoaded:function(){},\r\n\r\n\t//localization callbacks\r\n\tlocalized:function(){},\r\n\r\n\t//validation callbacks\r\n\tvalidationMode:\"blocking\",\r\n\tvalidationFailed:function(){},\r\n\r\n\t//history callbacks\r\n\thistoryUndo:function(){},\r\n\thistoryRedo:function(){},\r\n\r\n\t//scroll callbacks\r\n\tscrollHorizontal:function(){},\r\n\tscrollVertical:function(){},\r\n};","//public column object\r\nexport default class ColumnComponent {\r\n\tconstructor (column){\r\n\t\tthis._column = column;\r\n\t\tthis.type = \"ColumnComponent\";\r\n\t}\r\n\r\n\tgetElement(){\r\n\t\treturn this._column.getElement();\r\n\t}\r\n\r\n\tgetDefinition(){\r\n\t\treturn this._column.getDefinition();\r\n\t}\r\n\r\n\tgetField(){\r\n\t\treturn this._column.getField();\r\n\t}\r\n\r\n\tgetCells(){\r\n\t\tvar cells = [];\r\n\r\n\t\tthis._column.cells.forEach(function(cell){\r\n\t\t\tcells.push(cell.getComponent());\r\n\t\t});\r\n\r\n\t\treturn cells;\r\n\t}\r\n\r\n\tisVisible(){\r\n\t\treturn this._column.visible;\r\n\t}\r\n\r\n\tshow(){\r\n\t\tif(this._column.isGroup){\r\n\t\t\tthis._column.columns.forEach(function(column){\r\n\t\t\t\tcolumn.show();\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tthis._column.show();\r\n\t\t}\r\n\t}\r\n\r\n\thide(){\r\n\t\tif(this._column.isGroup){\r\n\t\t\tthis._column.columns.forEach(function(column){\r\n\t\t\t\tcolumn.hide();\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tthis._column.hide();\r\n\t\t}\r\n\t}\r\n\r\n\ttoggle(){\r\n\t\tif(this._column.visible){\r\n\t\t\tthis.hide();\r\n\t\t}else{\r\n\t\t\tthis.show();\r\n\t\t}\r\n\t}\r\n\r\n\tdelete(){\r\n\t\treturn this._column.delete();\r\n\t}\r\n\r\n\tgetSubColumns(){\r\n\t\tvar output = [];\r\n\r\n\t\tif(this._column.columns.length){\r\n\t\t\tthis._column.columns.forEach(function(column){\r\n\t\t\t\toutput.push(column.getComponent());\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tgetParentColumn(){\r\n\t\treturn this._column.parent instanceof Column ? this._column.parent.getComponent() : false;\r\n\t}\r\n\r\n\t_getSelf(){\r\n\t\treturn this._column;\r\n\t}\r\n\r\n\tscrollTo(){\r\n\t\treturn this._column.table.columnManager.scrollToColumn(this._column);\r\n\t}\r\n\r\n\tgetTable(){\r\n\t\treturn this._column.table;\r\n\t}\r\n\r\n\theaderFilterFocus(){\r\n\t\tif(this._column.table.modExists(\"filter\", true)){\r\n\t\t\tthis._column.table.modules.filter.setHeaderFilterFocus(this._column);\r\n\t\t}\r\n\t}\r\n\r\n\treloadHeaderFilter(){\r\n\t\tif(this._column.table.modExists(\"filter\", true)){\r\n\t\t\tthis._column.table.modules.filter.reloadHeaderFilter(this._column);\r\n\t\t}\r\n\t}\r\n\r\n\tgetHeaderFilterValue(){\r\n\t\tif(this._column.table.modExists(\"filter\", true)){\r\n\t\t\treturn this._column.table.modules.filter.getHeaderFilterValue(this._column);\r\n\t\t}\r\n\t}\r\n\r\n\tsetHeaderFilterValue(value){\r\n\t\tif(this._column.table.modExists(\"filter\", true)){\r\n\t\t\tthis._column.table.modules.filter.setHeaderFilterValue(this._column, value);\r\n\t\t}\r\n\t}\r\n\r\n\tmove(to, after){\r\n\t\tvar toColumn = this._column.table.columnManager.findColumn(to);\r\n\r\n\t\tif(toColumn){\r\n\t\t\tthis._column.table.columnManager.moveColumn(this._column, toColumn, after)\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Move Error - No matching column found:\", toColumn);\r\n\t\t}\r\n\t}\r\n\r\n\tgetNextColumn(){\r\n\t\tvar nextCol = this._column.nextColumn();\r\n\r\n\t\treturn nextCol ? nextCol.getComponent() : false;\r\n\t}\r\n\r\n\tgetPrevColumn(){\r\n\t\tvar prevCol = this._column.prevColumn();\r\n\r\n\t\treturn prevCol ? prevCol.getComponent() : false;\r\n\t}\r\n\r\n\tupdateDefinition(updates){\r\n\t\treturn this._column.updateDefinition(updates);\r\n\t}\r\n\r\n\tgetWidth(){\r\n\t\treturn this._column.getWidth();\r\n\t}\r\n\r\n\tsetWidth(width){\r\n\t\tvar result;\r\n\r\n\t\tif(width === true){\r\n\t\t\tresult = this._column.reinitializeWidth(true);\r\n\t\t}else{\r\n\t\t\tresult = this._column.setWidth(width);\r\n\t\t}\r\n\r\n\t\tif(this._column.table.options.virtualDomHoz){\r\n\t\t\tthis._column.table.vdomHoz.reinitialize(true);\r\n\t\t}\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\tvalidate(){\r\n\t\treturn this._column.validate();\r\n\t}\r\n}","export default [\r\n\t\"title\",\r\n\t\"field\",\r\n\t\"columns\",\r\n\t\"visible\",\r\n\t\"hozAlign\",\r\n\t\"vertAlign\",\r\n\t\"width\",\r\n\t\"minWidth\",\r\n\t\"maxWidth\",\r\n\t\"widthGrow\",\r\n\t\"widthShrink\",\r\n\t\"resizable\",\r\n\t\"frozen\",\r\n\t\"responsive\",\r\n\t\"tooltip\",\r\n\t\"cssClass\",\r\n\t\"rowHandle\",\r\n\t\"print\",\r\n\t\"htmlOutput\",\r\n\t\"sorter\",\r\n\t\"sorterParams\",\r\n\t\"formatter\",\r\n\t\"formatterParams\",\r\n\t\"variableHeight\",\r\n\t\"editable\",\r\n\t\"editor\",\r\n\t\"editorParams\",\r\n\t\"validator\",\r\n\t\"mutator\",\r\n\t\"mutatorParams\",\r\n\t\"mutatorData\",\r\n\t\"mutatorDataParams\",\r\n\t\"mutatorEdit\",\r\n\t\"mutatorEditParams\",\r\n\t\"mutatorClipboard\",\r\n\t\"mutatorClipboardParams\",\r\n\t\"accessor\",\r\n\t\"accessorParams\",\r\n\t\"accessorData\",\r\n\t\"accessorDataParams\",\r\n\t\"accessorDownload\",\r\n\t\"accessorDownloadParams\",\r\n\t\"accessorClipboard\",\r\n\t\"accessorClipboardParams\",\r\n\t\"accessorPrint\",\r\n\t\"accessorPrintParams\",\r\n\t\"accessorHtmlOutput\",\r\n\t\"accessorHtmlOutputParams\",\r\n\t\"clipboard\",\r\n\t\"download\",\r\n\t\"topCalc\",\r\n\t\"topCalcParams\",\r\n\t\"topCalcFormatter\",\r\n\t\"topCalcFormatterParams\",\r\n\t\"bottomCalc\",\r\n\t\"bottomCalcParams\",\r\n\t\"bottomCalcFormatter\",\r\n\t\"bottomCalcFormatterParams\",\r\n\t\"cellClick\",\r\n\t\"cellDblClick\",\r\n\t\"cellContext\",\r\n\t\"cellTap\",\r\n\t\"cellDblTap\",\r\n\t\"cellTapHold\",\r\n\t\"cellMouseEnter\",\r\n\t\"cellMouseLeave\",\r\n\t\"cellMouseOver\",\r\n\t\"cellMouseOut\",\r\n\t\"cellMouseMove\",\r\n\t\"cellEditing\",\r\n\t\"cellEdited\",\r\n\t\"cellEditCancelled\",\r\n\t\"headerSort\",\r\n\t\"headerSortStartingDir\",\r\n\t\"headerSortTristate\",\r\n\t\"headerClick\",\r\n\t\"headerDblClick\",\r\n\t\"headerContext\",\r\n\t\"headerTap\",\r\n\t\"headerDblTap\",\r\n\t\"headerTapHold\",\r\n\t\"headerTooltip\",\r\n\t\"headerVertical\",\r\n\t\"headerHozAlign\",\r\n\t\"editableTitle\",\r\n\t\"titleFormatter\",\r\n\t\"titleFormatterParams\",\r\n\t\"headerFilter\",\r\n\t\"headerFilterPlaceholder\",\r\n\t\"headerFilterParams\",\r\n\t\"headerFilterEmptyCheck\",\r\n\t\"headerFilterFunc\",\r\n\t\"headerFilterFuncParams\",\r\n\t\"headerFilterLiveFilter\",\r\n\t\"print\",\r\n\t\"headerContextMenu\",\r\n\t\"headerMenu\",\r\n\t\"contextMenu\",\r\n\t// \"headerClickMenu\",\r\n\t\"clickMenu\",\r\n\t\"formatterPrint\",\r\n\t\"formatterPrintParams\",\r\n\t\"formatterClipboard\",\r\n\t\"formatterClipboardParams\",\r\n\t\"formatterHtmlOutput\",\r\n\t\"formatterHtmlOutputParams\",\r\n\t\"titlePrint\",\r\n\t\"titleClipboard\",\r\n\t\"titleHtmlOutput\",\r\n\t\"titleDownload\",\r\n];","//public cell object\r\nexport default class CellComponent {\r\n\r\n\tconstructor (cell){\r\n\t\tthis._cell = cell;\r\n\t}\r\n\r\n\tgetValue(){\r\n\t\treturn this._cell.getValue();\r\n\t}\r\n\r\n\tgetOldValue(){\r\n\t\treturn this._cell.getOldValue();\r\n\t}\r\n\r\n\tgetInitialValue(){\r\n\t\treturn this._cell.initialValue;\r\n\t}\r\n\r\n\tgetElement(){\r\n\t\treturn this._cell.getElement();\r\n\t}\r\n\r\n\tgetRow(){\r\n\t\treturn this._cell.row.getComponent();\r\n\t}\r\n\r\n\tgetData(){\r\n\t\treturn this._cell.row.getData();\r\n\t}\r\n\r\n\tgetField(){\r\n\t\treturn this._cell.column.getField();\r\n\t}\r\n\r\n\tgetColumn(){\r\n\t\treturn this._cell.column.getComponent();\r\n\t}\r\n\r\n\tsetValue(value, mutate){\r\n\t\tif(typeof mutate == \"undefined\"){\r\n\t\t\tmutate = true;\r\n\t\t}\r\n\r\n\t\tthis._cell.setValue(value, mutate);\r\n\t}\r\n\r\n\trestoreOldValue(){\r\n\t\tthis._cell.setValueActual(this._cell.getOldValue());\r\n\t}\r\n\r\n\trestoreInitialValue(){\r\n\t\tthis._cell.setValueActual(this._cell.initialValue);\r\n\t}\r\n\r\n\tedit(force){\r\n\t\treturn this._cell.edit(force);\r\n\t}\r\n\r\n\tcancelEdit(){\r\n\t\tthis._cell.cancelEdit();\r\n\t}\r\n\r\n\tisEdited(){\r\n\t\treturn !! this._cell.modules.edit && this._cell.modules.edit.edited;\r\n\t}\r\n\r\n\tclearEdited(){\r\n\t\tif(this._cell.table.modExists(\"edit\", true)){\r\n\t\t\tthis._cell.table.modules.edit.clearEdited(this._cell);\r\n\t\t}\r\n\t}\r\n\r\n\tisValid(){\r\n\t\treturn this._cell.modules.validate ? !this._cell.modules.validate.invalid : true;\r\n\t}\r\n\r\n\tvalidate(){\r\n\t\treturn this._cell.validate();\r\n\t}\r\n\r\n\tclearValidation(){\r\n\t\tif(this._cell.table.modExists(\"validate\", true)){\r\n\t\t\tthis._cell.table.modules.validate.clearValidation(this._cell);\r\n\t\t}\r\n\t}\r\n\r\n\tnav(){\r\n\t\treturn this._cell.nav();\r\n\t}\r\n\r\n\tcheckHeight(){\r\n\t\tthis._cell.checkHeight();\r\n\t}\r\n\r\n\tgetTable(){\r\n\t\treturn this._cell.table;\r\n\t}\r\n\r\n\t_getSelf(){\r\n\t\treturn this._cell;\r\n\t}\r\n}","import CellComponent from './CellComponent.js';\r\n\r\nexport default class Cell {\r\n\tconstructor(column, row){\r\n\t\tthis.table = column.table;\r\n\t\tthis.column = column;\r\n\t\tthis.row = row;\r\n\t\tthis.element = null;\r\n\t\tthis.value = null;\r\n\t\tthis.initialValue;\r\n\t\tthis.oldValue = null;\r\n\t\tthis.modules = {};\r\n\r\n\t\tthis.height = null;\r\n\t\tthis.width = null;\r\n\t\tthis.minWidth = null;\r\n\r\n\t\tthis.component = null;\r\n\r\n\t\tthis.loaded = false; //track if the cell has been added to the DOM yet\r\n\r\n\t\tthis.build();\r\n\t}\r\n\r\n\t//////////////// Setup Functions /////////////////\r\n\t//generate element\r\n\tbuild(){\r\n\t\tthis.generateElement();\r\n\r\n\t\tthis.setWidth();\r\n\r\n\t\tthis._configureCell();\r\n\r\n\t\tthis.setValueActual(this.column.getFieldValue(this.row.data));\r\n\r\n\t\tthis.initialValue = this.value;\r\n\t}\r\n\r\n\tgenerateElement(){\r\n\t\tthis.element = document.createElement('div');\r\n\t\tthis.element.className = \"tabulator-cell\";\r\n\t\tthis.element.setAttribute(\"role\", \"gridcell\");\r\n\t\tthis.element = this.element;\r\n\t}\r\n\r\n\t_configureCell(){\r\n\t\tvar cellEvents = this.column.cellEvents,\r\n\t\telement = this.element,\r\n\t\tfield = this.column.getField(),\r\n\t\tvertAligns = {\r\n\t\t\ttop:\"flex-start\",\r\n\t\t\tbottom:\"flex-end\",\r\n\t\t\tmiddle:\"center\",\r\n\t\t},\r\n\t\thozAligns = {\r\n\t\t\tleft:\"flex-start\",\r\n\t\t\tright:\"flex-end\",\r\n\t\t\tcenter:\"center\",\r\n\t\t};\r\n\r\n\t\t//set text alignment\r\n\t\telement.style.textAlign = this.column.hozAlign;\r\n\r\n\t\tif(this.column.vertAlign){\r\n\t\t\telement.style.display = \"inline-flex\";\r\n\r\n\t\t\telement.style.alignItems = vertAligns[this.column.vertAlign] || \"\";\r\n\r\n\t\t\tif(this.column.hozAlign){\r\n\t\t\t\telement.style.justifyContent = hozAligns[this.column.hozAlign] || \"\";\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(field){\r\n\t\t\telement.setAttribute(\"tabulator-field\", field);\r\n\t\t}\r\n\r\n\t\t//add class to cell if needed\r\n\t\tif(this.column.definition.cssClass){\r\n\t\t\tvar classNames = this.column.definition.cssClass.split(\" \")\r\n\t\t\tclassNames.forEach((className) => {\r\n\t\t\t\telement.classList.add(className)\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\t//update tooltip on mouse enter\r\n\t\tif (this.table.options.tooltipGenerationMode === \"hover\"){\r\n\t\t\telement.addEventListener(\"mouseenter\", (e) => {\r\n\t\t\t\tthis._generateTooltip();\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tthis._bindClickEvents(cellEvents);\r\n\r\n\t\tthis._bindTouchEvents(cellEvents);\r\n\r\n\t\tthis._bindMouseEvents(cellEvents);\r\n\r\n\t\tif(this.column.modules.edit){\r\n\t\t\tthis.table.modules.edit.bindEditor(this);\r\n\t\t}\r\n\r\n\t\tif(this.column.definition.rowHandle && this.table.options.movableRows !== false && this.table.modExists(\"moveRow\")){\r\n\t\t\tthis.table.modules.moveRow.initializeCell(this);\r\n\t\t}\r\n\r\n\t\t//hide cell if not visible\r\n\t\tif(!this.column.visible){\r\n\t\t\tthis.hide();\r\n\t\t}\r\n\t}\r\n\r\n\t_bindClickEvents(cellEvents){\r\n\t\tvar element = this.element;\r\n\r\n\t\t//set event bindings\r\n\t\tif (cellEvents.cellClick || this.table.options.cellClick){\r\n\t\t\telement.addEventListener(\"click\", (e) => {\r\n\t\t\t\tvar component = this.getComponent();\r\n\r\n\t\t\t\tif(cellEvents.cellClick){\r\n\t\t\t\t\tcellEvents.cellClick.call(this.table, e, component);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(this.table.options.cellClick){\r\n\t\t\t\t\tthis.table.options.cellClick.call(this.table, e, component);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif (cellEvents.cellDblClick || this.table.options.cellDblClick){\r\n\t\t\telement.addEventListener(\"dblclick\", (e) => {\r\n\t\t\t\tvar component = this.getComponent();\r\n\r\n\t\t\t\tif(cellEvents.cellDblClick){\r\n\t\t\t\t\tcellEvents.cellDblClick.call(this.table, e, component);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(this.table.options.cellDblClick){\r\n\t\t\t\t\tthis.table.options.cellDblClick.call(this.table, e, component);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\telement.addEventListener(\"dblclick\", (e) => {\r\n\t\t\t\tif(this.table.modExists(\"edit\")){\r\n\t\t\t\t\tif (this.table.modules.edit.currentCell === this){\r\n\t\t\t\t\t\treturn; //prevent instant selection of editor content\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\te.preventDefault();\r\n\r\n\t\t\t\ttry{\r\n\t\t\t\t\tif (document.selection) { // IE\r\n\t\t\t\t\t\tvar range = document.body.createTextRange();\r\n\t\t\t\t\t\trange.moveToElementText(this.element);\r\n\t\t\t\t\t\trange.select();\r\n\t\t\t\t\t} else if (window.getSelection) {\r\n\t\t\t\t\t\tvar range = document.createRange();\r\n\t\t\t\t\t\trange.selectNode(this.element);\r\n\t\t\t\t\t\twindow.getSelection().removeAllRanges();\r\n\t\t\t\t\t\twindow.getSelection().addRange(range);\r\n\t\t\t\t\t}\r\n\t\t\t\t}catch(e){}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif (cellEvents.cellContext || this.table.options.cellContext){\r\n\t\t\telement.addEventListener(\"contextmenu\", (e) => {\r\n\t\t\t\tvar component = this.getComponent();\r\n\r\n\t\t\t\tif(cellEvents.cellContext){\r\n\t\t\t\t\tcellEvents.cellContext.call(this.table, e, component);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(this.table.options.cellContext){\r\n\t\t\t\t\tthis.table.options.cellContext.call(this.table, e, component);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\t_bindMouseEvents(cellEvents){\r\n\t\tvar element = this.element;\r\n\r\n\t\tif (cellEvents.cellMouseEnter || this.table.options.cellMouseEnter){\r\n\t\t\telement.addEventListener(\"mouseenter\", (e) => {\r\n\t\t\t\tvar component = this.getComponent();\r\n\r\n\t\t\t\tif(cellEvents.cellMouseEnter){\r\n\t\t\t\t\tcellEvents.cellMouseEnter.call(this.table, e, component);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(this.table.options.cellMouseEnter){\r\n\t\t\t\t\tthis.table.options.cellMouseEnter.call(this.table, e, component);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif (cellEvents.cellMouseLeave || this.table.options.cellMouseLeave){\r\n\t\t\telement.addEventListener(\"mouseleave\", (e) => {\r\n\t\t\t\tvar component = this.getComponent();\r\n\r\n\t\t\t\tif(cellEvents.cellMouseLeave){\r\n\t\t\t\t\tcellEvents.cellMouseLeave.call(this.table, e, component);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(this.table.options.cellMouseLeave){\r\n\t\t\t\t\tthis.table.options.cellMouseLeave.call(this.table, e, component);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif (cellEvents.cellMouseOver || this.table.options.cellMouseOver){\r\n\t\t\telement.addEventListener(\"mouseover\", (e) => {\r\n\t\t\t\tvar component = this.getComponent();\r\n\r\n\t\t\t\tif(cellEvents.cellMouseOver){\r\n\t\t\t\t\tcellEvents.cellMouseOver.call(this.table, e, component);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(this.table.options.cellMouseOver){\r\n\t\t\t\t\tthis.table.options.cellMouseOver.call(this.table, e, component);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif (cellEvents.cellMouseOut || this.table.options.cellMouseOut){\r\n\t\t\telement.addEventListener(\"mouseout\", (e) => {\r\n\t\t\t\tvar component = this.getComponent();\r\n\r\n\t\t\t\tif(cellEvents.cellMouseOut){\r\n\t\t\t\t\tcellEvents.cellMouseOut.call(this.table, e, component);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(this.table.options.cellMouseOut){\r\n\t\t\t\t\tthis.table.options.cellMouseOut.call(this.table, e, component);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif (cellEvents.cellMouseMove || this.table.options.cellMouseMove){\r\n\t\t\telement.addEventListener(\"mousemove\", (e) => {\r\n\t\t\t\tvar component = this.getComponent();\r\n\r\n\t\t\t\tif(cellEvents.cellMouseMove){\r\n\t\t\t\t\tcellEvents.cellMouseMove.call(this.table, e, component);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(this.table.options.cellMouseMove){\r\n\t\t\t\t\tthis.table.options.cellMouseMove.call(this.table, e, component);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\t_bindTouchEvents(cellEvents){\r\n\t\tvar element = this.element,\r\n\t\tdblTap,\ttapHold, tap;\r\n\r\n\t\tif (cellEvents.cellTap || this.table.options.cellTap){\r\n\t\t\ttap = false;\r\n\r\n\t\t\telement.addEventListener(\"touchstart\", (e) => {\r\n\t\t\t\ttap = true;\r\n\t\t\t}, {passive: true});\r\n\r\n\t\t\telement.addEventListener(\"touchend\", (e) => {\r\n\t\t\t\tif(tap){\r\n\t\t\t\t\tvar component = this.getComponent();\r\n\r\n\t\t\t\t\tif(cellEvents.cellTap){\r\n\t\t\t\t\t\tcellEvents.cellTap.call(this.table, e, component);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif(this.table.options.cellTap){\r\n\t\t\t\t\t\tthis.table.options.cellTap.call(this.table, e, component);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\ttap = false;\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif (cellEvents.cellDblTap || this.table.options.cellDblTap){\r\n\t\t\tdblTap = null;\r\n\r\n\t\t\telement.addEventListener(\"touchend\", (e) => {\r\n\t\t\t\tif(dblTap){\r\n\t\t\t\t\tclearTimeout(dblTap);\r\n\t\t\t\t\tdblTap = null;\r\n\r\n\t\t\t\t\tvar component = this.getComponent();\r\n\r\n\t\t\t\t\tif(cellEvents.cellDblTap){\r\n\t\t\t\t\t\tcellEvents.cellDblTap.call(this.table, e, component);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif(this.table.options.cellDblTap){\r\n\t\t\t\t\t\tthis.table.options.cellDblTap.call(this.table, e, component);\r\n\t\t\t\t\t}\r\n\t\t\t\t}else{\r\n\r\n\t\t\t\t\tdblTap = setTimeout(() => {\r\n\t\t\t\t\t\tclearTimeout(dblTap);\r\n\t\t\t\t\t\tdblTap = null;\r\n\t\t\t\t\t}, 300);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif (cellEvents.cellTapHold || this.table.options.cellTapHold){\r\n\t\t\ttapHold = null;\r\n\r\n\t\t\telement.addEventListener(\"touchstart\", (e) => {\r\n\t\t\t\tclearTimeout(tapHold);\r\n\r\n\t\t\t\ttapHold = setTimeout(() => {\r\n\t\t\t\t\tclearTimeout(tapHold);\r\n\t\t\t\t\ttapHold = null;\r\n\t\t\t\t\ttap = false;\r\n\t\t\t\t\tvar component = this.getComponent();\r\n\r\n\t\t\t\t\tif(cellEvents.cellTapHold){\r\n\t\t\t\t\t\tcellEvents.cellTapHold.call(this.table, e, component);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif(this.table.options.cellTapHold){\r\n\t\t\t\t\t\tthis.table.options.cellTapHold.call(this.table, e, component);\r\n\t\t\t\t\t}\r\n\t\t\t\t}, 1000);\r\n\r\n\t\t\t}, {passive: true});\r\n\r\n\t\t\telement.addEventListener(\"touchend\", (e) => {\r\n\t\t\t\tclearTimeout(tapHold);\r\n\t\t\t\ttapHold = null;\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\t//generate cell contents\r\n\t_generateContents(){\r\n\t\tvar val;\r\n\r\n\t\tif(this.table.modExists(\"format\")){\r\n\t\t\tval = this.table.modules.format.formatValue(this);\r\n\t\t}else{\r\n\t\t\tval = this.element.innerHTML = this.value;\r\n\t\t}\r\n\r\n\t\tswitch(typeof val){\r\n\t\t\tcase \"object\":\r\n\t\t\tif(val instanceof Node){\r\n\r\n\t\t\t\t//clear previous cell contents\r\n\t\t\t\twhile(this.element.firstChild) this.element.removeChild(this.element.firstChild);\r\n\r\n\t\t\t\tthis.element.appendChild(val);\r\n\t\t\t}else{\r\n\t\t\t\tthis.element.innerHTML = \"\";\r\n\r\n\t\t\t\tif(val != null){\r\n\t\t\t\t\tconsole.warn(\"Format Error - Formatter has returned a type of object, the only valid formatter object return is an instance of Node, the formatter returned:\", val);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\t\t\tcase \"undefined\":\r\n\t\t\tcase \"null\":\r\n\t\t\tthis.element.innerHTML = \"\";\r\n\t\t\tbreak;\r\n\t\t\tdefault:\r\n\t\t\tthis.element.innerHTML = val;\r\n\t\t}\r\n\t}\r\n\r\n\tcellRendered(){\r\n\t\tif(this.table.modExists(\"format\") && this.table.modules.format.cellRendered){\r\n\t\t\tthis.table.modules.format.cellRendered(this);\r\n\t\t}\r\n\t}\r\n\r\n\t//generate tooltip text\r\n\t_generateTooltip(){\r\n\t\tvar tooltip = this.column.tooltip;\r\n\r\n\t\tif(tooltip){\r\n\t\t\tif(tooltip === true){\r\n\t\t\t\ttooltip = this.value;\r\n\t\t\t}else if(typeof(tooltip) == \"function\"){\r\n\t\t\t\ttooltip = tooltip(this.getComponent());\r\n\r\n\t\t\t\tif(tooltip === false){\r\n\t\t\t\t\ttooltip = \"\";\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif(typeof tooltip === \"undefined\"){\r\n\t\t\t\ttooltip = \"\";\r\n\t\t\t}\r\n\r\n\t\t\tthis.element.setAttribute(\"title\", tooltip);\r\n\t\t}else{\r\n\t\t\tthis.element.setAttribute(\"title\", \"\");\r\n\t\t}\r\n\t}\r\n\r\n\t//////////////////// Getters ////////////////////\r\n\tgetElement(containerOnly){\r\n\t\tif(!this.loaded){\r\n\t\t\tthis.loaded = true;\r\n\t\t\tif(!containerOnly){\r\n\t\t\t\tthis.layoutElement();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this.element;\r\n\t}\r\n\r\n\tgetValue(){\r\n\t\treturn this.value;\r\n\t}\r\n\r\n\tgetOldValue(){\r\n\t\treturn this.oldValue;\r\n\t}\r\n\r\n\t//////////////////// Actions ////////////////////\r\n\tsetValue(value, mutate){\r\n\t\tvar changed = this.setValueProcessData(value, mutate),\r\n\t\tcomponent;\r\n\r\n\t\tif(changed){\r\n\t\t\tif(this.table.options.history && this.table.modExists(\"history\")){\r\n\t\t\t\tthis.table.modules.history.action(\"cellEdit\", this, {oldValue:this.oldValue, newValue:this.value});\r\n\t\t\t}\r\n\r\n\t\t\tcomponent = this.getComponent();\r\n\r\n\t\t\tif(this.column.cellEvents.cellEdited){\r\n\t\t\t\tthis.column.cellEvents.cellEdited.call(this.table, component);\r\n\t\t\t}\r\n\r\n\t\t\tif(this.table.options.groupUpdateOnCellEdit && this.table.options.groupBy && this.table.modExists(\"groupRows\")) {\r\n\t\t\t\tthis.table.modules.groupRows.reassignRowToGroup(this.row);\r\n\t\t\t}\r\n\r\n\t\t\tthis.cellRendered();\r\n\r\n\t\t\tthis.table.options.cellEdited.call(this.table, component);\r\n\r\n\t\t\tif(this.table.options.dataChanged){\r\n\t\t\t\tthis.table.options.dataChanged.call(this.table, this.table.rowManager.getData());\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tsetValueProcessData(value, mutate){\r\n\t\tvar changed = false;\r\n\r\n\t\tif(this.value != value){\r\n\r\n\t\t\tchanged = true;\r\n\r\n\t\t\tif(mutate){\r\n\t\t\t\tif(this.column.modules.mutate){\r\n\t\t\t\t\tvalue = this.table.modules.mutator.transformCell(this, value);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.setValueActual(value);\r\n\r\n\t\tif(changed && this.table.modExists(\"columnCalcs\")){\r\n\t\t\tif(this.column.definition.topCalc || this.column.definition.bottomCalc){\r\n\t\t\t\tif(this.table.options.groupBy && this.table.modExists(\"groupRows\")){\r\n\r\n\t\t\t\t\tif(this.table.options.columnCalcs == \"table\" || this.table.options.columnCalcs == \"both\"){\r\n\t\t\t\t\t\tthis.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif(this.table.options.columnCalcs != \"table\"){\r\n\t\t\t\t\t\tthis.table.modules.columnCalcs.recalcRowGroup(this.row);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}else{\r\n\t\t\t\t\tthis.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn changed;\r\n\t}\r\n\r\n\tsetValueActual(value){\r\n\t\tthis.oldValue = this.value;\r\n\r\n\t\tthis.value = value;\r\n\r\n\t\tif(this.table.options.reactiveData && this.table.modExists(\"reactiveData\")){\r\n\t\t\tthis.table.modules.reactiveData.block();\r\n\t\t}\r\n\r\n\t\tthis.column.setFieldValue(this.row.data, value);\r\n\r\n\t\tif(this.table.options.reactiveData && this.table.modExists(\"reactiveData\")){\r\n\t\t\tthis.table.modules.reactiveData.unblock();\r\n\t\t}\r\n\r\n\t\tif(this.loaded){\r\n\t\t\tthis.layoutElement();\r\n\t\t}\r\n\t}\r\n\r\n\tlayoutElement(){\r\n\t\tthis._generateContents();\r\n\t\tthis._generateTooltip();\r\n\r\n\t\t//set resizable handles\r\n\t\tif(this.table.options.resizableColumns && this.table.modExists(\"resizeColumns\") && this.row.type === \"row\"){\r\n\t\t\tthis.table.modules.resizeColumns.initializeColumn(\"cell\", this.column, this.element);\r\n\t\t}\r\n\r\n\r\n\t\tif((this.column.definition.contextMenu || this.column.definition.clickMenu) && this.table.modExists(\"menu\")){\r\n\t\t\tthis.table.modules.menu.initializeCell(this);\r\n\t\t}\r\n\r\n\t\t//handle frozen cells\r\n\t\tif(this.table.modExists(\"frozenColumns\")){\r\n\t\t\tthis.table.modules.frozenColumns.layoutElement(this.element, this.column);\r\n\t\t}\r\n\t}\r\n\r\n\tsetWidth(){\r\n\t\tthis.width = this.column.width;\r\n\t\tthis.element.style.width = this.column.widthStyled;\r\n\t}\r\n\r\n\tclearWidth(){\r\n\t\tthis.width = \"\";\r\n\t\tthis.element.style.width = \"\";\r\n\t}\r\n\r\n\tgetWidth(){\r\n\t\treturn this.width || this.element.offsetWidth;\r\n\t}\r\n\r\n\tsetMinWidth(){\r\n\t\tthis.minWidth = this.column.minWidth;\r\n\t\tthis.element.style.minWidth = this.column.minWidthStyled;\r\n\t}\r\n\r\n\tsetMaxWidth(){\r\n\t\tthis.maxWidth = this.column.maxWidth;\r\n\t\tthis.element.style.maxWidth = this.column.maxWidthStyled;\r\n\t}\r\n\r\n\tcheckHeight(){\r\n\t\t// var height = this.element.css(\"height\");\r\n\t\tthis.row.reinitializeHeight();\r\n\t}\r\n\r\n\tclearHeight(){\r\n\t\tthis.element.style.height = \"\";\r\n\t\tthis.height = null;\r\n\t}\r\n\r\n\tsetHeight(){\r\n\t\tthis.height = this.row.height;\r\n\t\tthis.element.style.height = this.row.heightStyled;\r\n\t}\r\n\r\n\tgetHeight(){\r\n\t\treturn this.height || this.element.offsetHeight;\r\n\t}\r\n\r\n\tshow(){\r\n\t\tthis.element.style.display = this.column.vertAlign ? \"inline-flex\" : \"\";\r\n\t}\r\n\r\n\thide(){\r\n\t\tthis.element.style.display = \"none\";\r\n\t}\r\n\r\n\tedit(force){\r\n\t\tif(this.table.modExists(\"edit\", true)){\r\n\t\t\treturn this.table.modules.edit.editCell(this, force);\r\n\t\t}\r\n\t}\r\n\r\n\tcancelEdit(){\r\n\t\tif(this.table.modExists(\"edit\", true)){\r\n\t\t\tvar editing = this.table.modules.edit.getCurrentCell();\r\n\r\n\t\t\tif(editing && editing._getSelf() === this){\r\n\t\t\t\tthis.table.modules.edit.cancelEdit();\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Cancel Editor Error - This cell is not currently being edited \");\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tvalidate(){\r\n\t\tif(this.column.modules.validate && this.table.modExists(\"validate\", true)){\r\n\t\t\tvar valid = this.table.modules.validate.validate(this.column.modules.validate, this, this.getValue());\r\n\r\n\t\t\treturn valid === true;\r\n\t\t}else{\r\n\t\t\treturn true;\r\n\t\t}\r\n\t}\r\n\r\n\tdelete(){\r\n\t\tif(!this.table.rowManager.redrawBlock && this.element.parentNode){\r\n\t\t\tthis.element.parentNode.removeChild(this.element);\r\n\t\t}\r\n\r\n\t\tif(this.modules.validate && this.modules.validate.invalid){\r\n\t\t\tthis.table.modules.validate.clearValidation(this);\r\n\t\t}\r\n\r\n\t\tif(this.modules.edit && this.modules.edit.edited){\r\n\t\t\tthis.table.modules.edit.clearEdited(this);\r\n\t\t}\r\n\r\n\t\tif(this.table.options.history){\r\n\t\t\tthis.table.modules.history.clearComponentHistory(this);\r\n\t\t}\r\n\r\n\t\tthis.element = false;\r\n\t\tthis.column.deleteCell(this);\r\n\t\tthis.row.deleteCell(this);\r\n\t\tthis.calcs = {};\r\n\t}\r\n\r\n\t//////////////// Navigation /////////////////\r\n\tnav(){\r\n\t\tvar self = this,\r\n\t\tnextCell = false,\r\n\t\tindex = this.row.getCellIndex(this);\r\n\r\n\t\treturn {\r\n\t\t\tnext:function(){\r\n\t\t\t\tvar nextCell = this.right(),\r\n\t\t\t\tnextRow;\r\n\r\n\t\t\t\tif(!nextCell){\r\n\t\t\t\t\tnextRow = self.table.rowManager.nextDisplayRow(self.row, true);\r\n\r\n\t\t\t\t\tif(nextRow){\r\n\t\t\t\t\t\tnextCell = nextRow.findNextEditableCell(-1);\r\n\r\n\t\t\t\t\t\tif(nextCell){\r\n\t\t\t\t\t\t\tnextCell.edit();\r\n\t\t\t\t\t\t\treturn true;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}else{\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn false;\r\n\t\t\t},\r\n\t\t\tprev:function(){\r\n\t\t\t\tvar nextCell = this.left(),\r\n\t\t\t\tprevRow;\r\n\r\n\t\t\t\tif(!nextCell){\r\n\t\t\t\t\tprevRow = self.table.rowManager.prevDisplayRow(self.row, true);\r\n\r\n\t\t\t\t\tif(prevRow){\r\n\t\t\t\t\t\tnextCell = prevRow.findPrevEditableCell(prevRow.cells.length);\r\n\r\n\t\t\t\t\t\tif(nextCell){\r\n\t\t\t\t\t\t\tnextCell.edit();\r\n\t\t\t\t\t\t\treturn true;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}else{\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn false;\r\n\t\t\t},\r\n\t\t\tleft:function(){\r\n\r\n\t\t\t\tnextCell = self.row.findPrevEditableCell(index);\r\n\r\n\t\t\t\tif(nextCell){\r\n\t\t\t\t\tnextCell.edit();\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t}else{\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tright:function(){\r\n\t\t\t\tnextCell = self.row.findNextEditableCell(index);\r\n\r\n\t\t\t\tif(nextCell){\r\n\t\t\t\t\tnextCell.edit();\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t}else{\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tup:function(){\r\n\t\t\t\tvar nextRow = self.table.rowManager.prevDisplayRow(self.row, true);\r\n\r\n\t\t\t\tif(nextRow){\r\n\t\t\t\t\tnextRow.cells[index].edit();\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tdown:function(){\r\n\t\t\t\tvar nextRow = self.table.rowManager.nextDisplayRow(self.row, true);\r\n\r\n\t\t\t\tif(nextRow){\r\n\t\t\t\t\tnextRow.cells[index].edit();\r\n\t\t\t\t}\r\n\t\t\t},\r\n\r\n\t\t};\r\n\t}\r\n\r\n\tgetIndex(){\r\n\t\tthis.row.getCellIndex(this);\r\n\t}\r\n\r\n\t//////////////// Object Generation /////////////////\r\n\tgetComponent(){\r\n\t\tif(!this.component){\r\n\t\t\tthis.component = new CellComponent(this);\r\n\t\t}\r\n\r\n\t\treturn this.component;\r\n\t}\r\n}","import ColumnComponent from './ColumnComponent.js';\r\nimport defaultOptions from './defaults/options.js';\r\n\r\nimport Cell from '../cell/Cell.js';\r\n\r\nclass Column {\r\n\r\n\tconstructor(def, parent){\r\n\t\tthis.table = parent.table;\r\n\t\tthis.definition = def; //column definition\r\n\t\tthis.parent = parent; //hold parent object\r\n\t\tthis.type = \"column\"; //type of element\r\n\t\tthis.columns = []; //child columns\r\n\t\tthis.cells = []; //cells bound to this column\r\n\t\tthis.element = this.createElement(); //column header element\r\n\t\tthis.contentElement = false;\r\n\t\tthis.titleHolderElement = false;\r\n\t\tthis.titleElement = false;\r\n\t\tthis.groupElement = this.createGroupElement(); //column group holder element\r\n\t\tthis.isGroup = false;\r\n\t\tthis.tooltip = false; //hold column tooltip\r\n\t\tthis.hozAlign = \"\"; //horizontal text alignment\r\n\t\tthis.vertAlign = \"\"; //vert text alignment\r\n\r\n\t\t//multi dimensional filed handling\r\n\t\tthis.field =\"\";\r\n\t\tthis.fieldStructure = \"\";\r\n\t\tthis.getFieldValue = \"\";\r\n\t\tthis.setFieldValue = \"\";\r\n\r\n\t\tthis.titleFormatterRendered = false;\r\n\r\n\t\tthis.mapDefinitionDefaults();\r\n\r\n\t\tthis.setField(this.definition.field);\r\n\r\n\t\tif(this.table.options.invalidOptionWarnings){\r\n\t\t\tthis.checkDefinition();\r\n\t\t}\r\n\r\n\t\tthis.modules = {}; //hold module variables;\r\n\r\n\t\tthis.cellEvents = {\r\n\t\t\tcellClick:false,\r\n\t\t\tcellDblClick:false,\r\n\t\t\tcellContext:false,\r\n\t\t\tcellTap:false,\r\n\t\t\tcellDblTap:false,\r\n\t\t\tcellTapHold:false,\r\n\t\t\tcellMouseEnter:false,\r\n\t\t\tcellMouseLeave:false,\r\n\t\t\tcellMouseOver:false,\r\n\t\t\tcellMouseOut:false,\r\n\t\t\tcellMouseMove:false,\r\n\t\t};\r\n\r\n\t\tthis.width = null; //column width\r\n\t\tthis.widthStyled = \"\"; //column width prestyled to improve render efficiency\r\n\t\tthis.maxWidth = null; //column maximum width\r\n\t\tthis.maxWidthStyled = \"\"; //column maximum prestyled to improve render efficiency\r\n\t\tthis.minWidth = null; //column minimum width\r\n\t\tthis.minWidthStyled = \"\"; //column minimum prestyled to improve render efficiency\r\n\t\tthis.widthFixed = false; //user has specified a width for this column\r\n\r\n\t\tthis.visible = true; //default visible state\r\n\r\n\t\tthis.component = null;\r\n\r\n\t\tthis._mapDepricatedFunctionality();\r\n\r\n\t\t//initialize column\r\n\t\tif(def.columns){\r\n\r\n\t\t\tthis.isGroup = true;\r\n\r\n\t\t\tdef.columns.forEach((def, i) => {\r\n\t\t\t\tvar newCol = new Column(def, this);\r\n\t\t\t\tthis.attachColumn(newCol);\r\n\t\t\t});\r\n\r\n\t\t\tthis.checkColumnVisibility();\r\n\t\t}else{\r\n\t\t\tparent.registerColumnField(this);\r\n\t\t}\r\n\r\n\t\tif(def.rowHandle && this.table.options.movableRows !== false && this.table.modExists(\"moveRow\")){\r\n\t\t\tthis.table.modules.moveRow.setHandle(true);\r\n\t\t}\r\n\r\n\t\tthis._buildHeader();\r\n\r\n\t\tthis.bindModuleColumns();\r\n\t}\r\n\r\n\tcreateElement (){\r\n\t\tvar el = document.createElement(\"div\");\r\n\r\n\t\tel.classList.add(\"tabulator-col\");\r\n\t\tel.setAttribute(\"role\", \"columnheader\");\r\n\t\tel.setAttribute(\"aria-sort\", \"none\");\r\n\r\n\t\treturn el;\r\n\t}\r\n\r\n\tcreateGroupElement (){\r\n\t\tvar el = document.createElement(\"div\");\r\n\r\n\t\tel.classList.add(\"tabulator-col-group-cols\");\r\n\r\n\t\treturn el;\r\n\t}\r\n\r\n\tmapDefinitionDefaults(){\r\n\t\tvar defaults = this.table.options.columnDefaults;\r\n\r\n\t\tif(defaults){\r\n\t\t\tfor(let key in defaults){\r\n\t\t\t\tif(typeof this.definition[key] === \"undefined\"){\r\n\t\t\t\t\tthis.definition[key] = defaults[key];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tcheckDefinition(){\r\n\t\tObject.keys(this.definition).forEach((key) => {\r\n\t\t\tif(Column.defaultOptionList.indexOf(key) === -1){\r\n\t\t\t\tconsole.warn(\"Invalid column definition option in '\" + (this.field || this.definition.title) + \"' column:\", key)\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tsetField(field){\r\n\t\tthis.field = field;\r\n\t\tthis.fieldStructure = field ? (this.table.options.nestedFieldSeparator ? field.split(this.table.options.nestedFieldSeparator) : [field]) : [];\r\n\t\tthis.getFieldValue = this.fieldStructure.length > 1 ? this._getNestedData : this._getFlatData;\r\n\t\tthis.setFieldValue = this.fieldStructure.length > 1 ? this._setNestedData : this._setFlatData;\r\n\t}\r\n\r\n\t//register column position with column manager\r\n\tregisterColumnPosition(column){\r\n\t\tthis.parent.registerColumnPosition(column);\r\n\t}\r\n\r\n\t//register column position with column manager\r\n\tregisterColumnField(column){\r\n\t\tthis.parent.registerColumnField(column);\r\n\t}\r\n\r\n\t//trigger position registration\r\n\treRegisterPosition(){\r\n\t\tif(this.isGroup){\r\n\t\t\tthis.columns.forEach(function(column){\r\n\t\t\t\tcolumn.reRegisterPosition();\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tthis.registerColumnPosition(this);\r\n\t\t}\r\n\t}\r\n\r\n\t_mapDepricatedFunctionality(){\r\n\t\t//all previously deprecated functionality removed in the 5.0 release\r\n\t}\r\n\r\n\tsetTooltip(){\r\n\t\tvar def = this.definition;\r\n\r\n\t\t//set header tooltips\r\n\t\tvar tooltip = def.headerTooltip || def.tooltip === false ? def.headerTooltip : this.table.options.tooltipsHeader;\r\n\r\n\t\tif(tooltip){\r\n\t\t\tif(tooltip === true){\r\n\t\t\t\tif(def.field){\r\n\t\t\t\t\tthis.table.modules.localize.bind(\"columns|\" + def.field, (value) => {\r\n\t\t\t\t\t\tthis.element.setAttribute(\"title\", value || def.title);\r\n\t\t\t\t\t});\r\n\t\t\t\t}else{\r\n\t\t\t\t\tthis.element.setAttribute(\"title\", def.title);\r\n\t\t\t\t}\r\n\r\n\t\t\t}else{\r\n\t\t\t\tif(typeof(tooltip) == \"function\"){\r\n\t\t\t\t\ttooltip = tooltip(this.getComponent());\r\n\r\n\t\t\t\t\tif(tooltip === false){\r\n\t\t\t\t\t\ttooltip = \"\";\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.element.setAttribute(\"title\", tooltip);\r\n\t\t\t}\r\n\r\n\t\t}else{\r\n\t\t\tthis.element.setAttribute(\"title\", \"\");\r\n\t\t}\r\n\t}\r\n\r\n\t//build header element\r\n\t_buildHeader(){\r\n\t\tvar def = this.definition;\r\n\r\n\t\twhile(this.element.firstChild) this.element.removeChild(this.element.firstChild);\r\n\r\n\t\tif(def.headerVertical){\r\n\t\t\tthis.element.classList.add(\"tabulator-col-vertical\");\r\n\r\n\t\t\tif(def.headerVertical === \"flip\"){\r\n\t\t\t\tthis.element.classList.add(\"tabulator-col-vertical-flip\");\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.contentElement = this._bindEvents();\r\n\r\n\t\tthis.contentElement = this._buildColumnHeaderContent();\r\n\r\n\t\tthis.element.appendChild(this.contentElement);\r\n\r\n\t\tif(this.isGroup){\r\n\t\t\tthis._buildGroupHeader();\r\n\t\t}else{\r\n\t\t\tthis._buildColumnHeader();\r\n\t\t}\r\n\r\n\t\tthis.setTooltip();\r\n\r\n\t\t//set resizable handles\r\n\t\tif(this.table.options.resizableColumns && this.table.modExists(\"resizeColumns\")){\r\n\t\t\tthis.table.modules.resizeColumns.initializeColumn(\"header\", this, this.element);\r\n\t\t}\r\n\r\n\t\t//set resizable handles\r\n\t\tif(def.headerFilter && this.table.modExists(\"filter\") && this.table.modExists(\"edit\")){\r\n\t\t\tif(typeof def.headerFilterPlaceholder !== \"undefined\" && def.field){\r\n\t\t\t\tthis.table.modules.localize.setHeaderFilterColumnPlaceholder(def.field, def.headerFilterPlaceholder);\r\n\t\t\t}\r\n\r\n\t\t\tthis.table.modules.filter.initializeColumn(this);\r\n\t\t}\r\n\r\n\r\n\t\t//set resizable handles\r\n\t\tif(this.table.modExists(\"frozenColumns\")){\r\n\t\t\tthis.table.modules.frozenColumns.initializeColumn(this);\r\n\t\t}\r\n\r\n\t\t//set movable column\r\n\t\tif(this.table.options.movableColumns && !this.isGroup && this.table.modExists(\"moveColumn\")){\r\n\t\t\tthis.table.modules.moveColumn.initializeColumn(this);\r\n\t\t}\r\n\r\n\t\t//set calcs column\r\n\t\tif((def.topCalc || def.bottomCalc) && this.table.modExists(\"columnCalcs\")){\r\n\t\t\tthis.table.modules.columnCalcs.initializeColumn(this);\r\n\t\t}\r\n\r\n\t\t//handle persistence\r\n\t\tif(this.table.modExists(\"persistence\") && this.table.modules.persistence.config.columns){\r\n\t\t\tthis.table.modules.persistence.initializeColumn(this);\r\n\t\t}\r\n\r\n\r\n\t\t//update header tooltip on mouse enter\r\n\t\tthis.element.addEventListener(\"mouseenter\", (e) => {\r\n\t\t\tthis.setTooltip();\r\n\t\t});\r\n\t}\r\n\r\n\t_bindEvents(){\r\n\t\tvar def = this.definition,\r\n\t\tdblTap,\ttapHold, tap;\r\n\r\n\t\t//setup header click event bindings\r\n\t\tif(typeof(def.headerClick) == \"function\"){\r\n\t\t\tthis.element.addEventListener(\"click\", (e) => {def.headerClick(e, this.getComponent());});\r\n\t\t}\r\n\r\n\t\tif(typeof(def.headerDblClick) == \"function\"){\r\n\t\t\tthis.element.addEventListener(\"dblclick\", (e) => {def.headerDblClick(e, this.getComponent());});\r\n\t\t}\r\n\r\n\t\tif(typeof(def.headerContext) == \"function\"){\r\n\t\t\tthis.element.addEventListener(\"contextmenu\", (e) => {def.headerContext(e, this.getComponent());});\r\n\t\t}\r\n\r\n\t\t//setup header tap event bindings\r\n\t\tif(typeof(def.headerTap) == \"function\"){\r\n\t\t\ttap = false;\r\n\r\n\t\t\tthis.element.addEventListener(\"touchstart\", (e) => {\r\n\t\t\t\ttap = true;\r\n\t\t\t}, {passive: true});\r\n\r\n\t\t\tthis.element.addEventListener(\"touchend\", (e) => {\r\n\t\t\t\tif(tap){\r\n\t\t\t\t\tdef.headerTap(e, this.getComponent());\r\n\t\t\t\t}\r\n\r\n\t\t\t\ttap = false;\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif(typeof(def.headerDblTap) == \"function\"){\r\n\t\t\tdblTap = null;\r\n\r\n\t\t\tthis.element.addEventListener(\"touchend\", (e) => {\r\n\r\n\t\t\t\tif(dblTap){\r\n\t\t\t\t\tclearTimeout(dblTap);\r\n\t\t\t\t\tdblTap = null;\r\n\r\n\t\t\t\t\tdef.headerDblTap(e, this.getComponent());\r\n\t\t\t\t}else{\r\n\r\n\t\t\t\t\tdblTap = setTimeout(() => {\r\n\t\t\t\t\t\tclearTimeout(dblTap);\r\n\t\t\t\t\t\tdblTap = null;\r\n\t\t\t\t\t}, 300);\r\n\t\t\t\t}\r\n\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif(typeof(def.headerTapHold) == \"function\"){\r\n\t\t\ttapHold = null;\r\n\r\n\t\t\tthis.element.addEventListener(\"touchstart\", (e) => {\r\n\t\t\t\tclearTimeout(tapHold);\r\n\r\n\t\t\t\ttapHold = setTimeout(function(){\r\n\t\t\t\t\tclearTimeout(tapHold);\r\n\t\t\t\t\ttapHold = null;\r\n\t\t\t\t\ttap = false;\r\n\t\t\t\t\tdef.headerTapHold(e, this.getComponent());\r\n\t\t\t\t}, 1000);\r\n\r\n\t\t\t}, {passive: true});\r\n\r\n\t\t\tthis.element.addEventListener(\"touchend\", (e) => {\r\n\t\t\t\tclearTimeout(tapHold);\r\n\t\t\t\ttapHold = null;\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\t//store column cell click event bindings\r\n\t\tif(typeof(def.cellClick) == \"function\"){\r\n\t\t\tthis.cellEvents.cellClick = def.cellClick;\r\n\t\t}\r\n\r\n\t\tif(typeof(def.cellDblClick) == \"function\"){\r\n\t\t\tthis.cellEvents.cellDblClick = def.cellDblClick;\r\n\t\t}\r\n\r\n\t\tif(typeof(def.cellContext) == \"function\"){\r\n\t\t\tthis.cellEvents.cellContext = def.cellContext;\r\n\t\t}\r\n\r\n\t\t//store column mouse event bindings\r\n\t\tif(typeof(def.cellMouseEnter) == \"function\"){\r\n\t\t\tthis.cellEvents.cellMouseEnter = def.cellMouseEnter;\r\n\t\t}\r\n\r\n\t\tif(typeof(def.cellMouseLeave) == \"function\"){\r\n\t\t\tthis.cellEvents.cellMouseLeave = def.cellMouseLeave;\r\n\t\t}\r\n\r\n\t\tif(typeof(def.cellMouseOver) == \"function\"){\r\n\t\t\tthis.cellEvents.cellMouseOver = def.cellMouseOver;\r\n\t\t}\r\n\r\n\t\tif(typeof(def.cellMouseOut) == \"function\"){\r\n\t\t\tthis.cellEvents.cellMouseOut = def.cellMouseOut;\r\n\t\t}\r\n\r\n\t\tif(typeof(def.cellMouseMove) == \"function\"){\r\n\t\t\tthis.cellEvents.cellMouseMove = def.cellMouseMove;\r\n\t\t}\r\n\r\n\t\t//setup column cell tap event bindings\r\n\t\tif(typeof(def.cellTap) == \"function\"){\r\n\t\t\tthis.cellEvents.cellTap = def.cellTap;\r\n\t\t}\r\n\r\n\t\tif(typeof(def.cellDblTap) == \"function\"){\r\n\t\t\tthis.cellEvents.cellDblTap = def.cellDblTap;\r\n\t\t}\r\n\r\n\t\tif(typeof(def.cellTapHold) == \"function\"){\r\n\t\t\tthis.cellEvents.cellTapHold = def.cellTapHold;\r\n\t\t}\r\n\r\n\t\t//setup column cell edit callbacks\r\n\t\tif(typeof(def.cellEdited) == \"function\"){\r\n\t\t\tthis.cellEvents.cellEdited = def.cellEdited;\r\n\t\t}\r\n\r\n\t\tif(typeof(def.cellEditing) == \"function\"){\r\n\t\t\tthis.cellEvents.cellEditing = def.cellEditing;\r\n\t\t}\r\n\r\n\t\tif(typeof(def.cellEditCancelled) == \"function\"){\r\n\t\t\tthis.cellEvents.cellEditCancelled = def.cellEditCancelled;\r\n\t\t}\r\n\t}\r\n\r\n\t//build header element for header\r\n\t_buildColumnHeader(){\r\n\t\tvar def = this.definition,\r\n\t\ttable = this.table,\r\n\t\tsortable;\r\n\r\n\t\t//set column sorter\r\n\t\tif(table.modExists(\"sort\")){\r\n\t\t\ttable.modules.sort.initializeColumn(this, this.titleHolderElement);\r\n\t\t}\r\n\r\n\t\t//set column header context menu\r\n\t\tif((def.headerContextMenu || def.headerClickMenu || def.headerMenu) && table.modExists(\"menu\")){\r\n\t\t\ttable.modules.menu.initializeColumnHeader(this);\r\n\t\t}\r\n\r\n\t\t//set column formatter\r\n\t\tif(table.modExists(\"format\")){\r\n\t\t\ttable.modules.format.initializeColumn(this);\r\n\t\t}\r\n\r\n\t\t//set column editor\r\n\t\tif(typeof def.editor != \"undefined\" && table.modExists(\"edit\")){\r\n\t\t\ttable.modules.edit.initializeColumn(this);\r\n\t\t}\r\n\r\n\t\t//set colum validator\r\n\t\tif(typeof def.validator != \"undefined\" && table.modExists(\"validate\")){\r\n\t\t\ttable.modules.validate.initializeColumn(this);\r\n\t\t}\r\n\r\n\r\n\t\t//set column mutator\r\n\t\tif(table.modExists(\"mutator\")){\r\n\t\t\ttable.modules.mutator.initializeColumn(this);\r\n\t\t}\r\n\r\n\t\t//set column accessor\r\n\t\tif(table.modExists(\"accessor\")){\r\n\t\t\ttable.modules.accessor.initializeColumn(this);\r\n\t\t}\r\n\r\n\t\t//set respoviveLayout\r\n\t\tif(typeof table.options.responsiveLayout && table.modExists(\"responsiveLayout\")){\r\n\t\t\ttable.modules.responsiveLayout.initializeColumn(this);\r\n\t\t}\r\n\r\n\t\t//set column visibility\r\n\t\tif(typeof def.visible != \"undefined\"){\r\n\t\t\tif(def.visible){\r\n\t\t\t\tthis.show(true);\r\n\t\t\t}else{\r\n\t\t\t\tthis.hide(true);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//asign additional css classes to column header\r\n\t\tif(def.cssClass){\r\n\t\t\tvar classeNames = def.cssClass.split(\" \");\r\n\t\t\tclasseNames.forEach((className) => {\r\n\t\t\t\tthis.element.classList.add(className);\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif(def.field){\r\n\t\t\tthis.element.setAttribute(\"tabulator-field\", def.field);\r\n\t\t}\r\n\r\n\t\t//set min width if present\r\n\t\tthis.setMinWidth(typeof def.minWidth == \"undefined\" ? this.table.options.columnMinWidth : parseInt(def.minWidth));\r\n\r\n\t\tif(def.maxWidth || this.table.options.columnMaxWidth){\r\n\t\t\tif(def.maxWidth !== false){\r\n\t\t\t\tthis.setMaxWidth(typeof def.maxWidth == \"undefined\" ? this.table.options.columnMaxWidth : parseInt(def.maxWidth));\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.reinitializeWidth();\r\n\r\n\t\t//set tooltip if present\r\n\t\tthis.tooltip = this.definition.tooltip || this.definition.tooltip === false ? this.definition.tooltip : this.table.options.tooltips;\r\n\r\n\t\t//set orizontal text alignment\r\n\t\tthis.hozAlign = typeof(this.definition.hozAlign) == \"undefined\" ? this.table.options.cellHozAlign : this.definition.hozAlign;\r\n\t\tthis.vertAlign = typeof(this.definition.vertAlign) == \"undefined\" ? this.table.options.cellVertAlign : this.definition.vertAlign;\r\n\r\n\t\tthis.titleElement.style.textAlign = this.definition.headerHozAlign || this.table.options.headerHozAlign;\r\n\t}\r\n\r\n\t_buildColumnHeaderContent(){\r\n\t\tvar def = this.definition,\r\n\t\ttable = this.table;\r\n\r\n\t\tvar contentElement = document.createElement(\"div\");\r\n\t\tcontentElement.classList.add(\"tabulator-col-content\");\r\n\r\n\t\tthis.titleHolderElement = document.createElement(\"div\");\r\n\t\tthis.titleHolderElement.classList.add(\"tabulator-col-title-holder\");\r\n\r\n\t\tcontentElement.appendChild(this.titleHolderElement);\r\n\r\n\t\tthis.titleElement = this._buildColumnHeaderTitle();\r\n\r\n\t\tthis.titleHolderElement.appendChild(this.titleElement);\r\n\r\n\t\treturn contentElement;\r\n\t}\r\n\r\n\t//build title element of column\r\n\t_buildColumnHeaderTitle(){\r\n\t\tvar def = this.definition,\r\n\t\ttable = this.table,\r\n\t\ttitle;\r\n\r\n\t\tvar titleHolderElement = document.createElement(\"div\");\r\n\t\ttitleHolderElement.classList.add(\"tabulator-col-title\");\r\n\r\n\t\tif(def.editableTitle){\r\n\t\t\tvar titleElement = document.createElement(\"input\");\r\n\t\t\ttitleElement.classList.add(\"tabulator-title-editor\");\r\n\r\n\t\t\ttitleElement.addEventListener(\"click\", (e) => {\r\n\t\t\t\te.stopPropagation();\r\n\t\t\t\ttitleElement.focus();\r\n\t\t\t});\r\n\r\n\t\t\ttitleElement.addEventListener(\"change\", () => {\r\n\t\t\t\tdef.title = titleElement.value;\r\n\t\t\t\ttable.options.columnTitleChanged.call(this.table, this.getComponent());\r\n\t\t\t});\r\n\r\n\t\t\ttitleHolderElement.appendChild(titleElement);\r\n\r\n\t\t\tif(def.field){\r\n\t\t\t\ttable.modules.localize.bind(\"columns|\" + def.field, (text) => {\r\n\t\t\t\t\ttitleElement.value = text || (def.title || \" \");\r\n\t\t\t\t});\r\n\t\t\t}else{\r\n\t\t\t\ttitleElement.value = def.title || \" \";\r\n\t\t\t}\r\n\r\n\t\t}else{\r\n\t\t\tif(def.field){\r\n\t\t\t\ttable.modules.localize.bind(\"columns|\" + def.field, (text) => {\r\n\t\t\t\t\tthis._formatColumnHeaderTitle(titleHolderElement, text || (def.title || \" \"));\r\n\t\t\t\t});\r\n\t\t\t}else{\r\n\t\t\t\tthis._formatColumnHeaderTitle(titleHolderElement, def.title || \" \");\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn titleHolderElement;\r\n\t}\r\n\r\n\t_formatColumnHeaderTitle(el, title){\r\n\t\tvar formatter, contents, params, mockCell, onRendered;\r\n\r\n\t\tif(this.definition.titleFormatter && this.table.modExists(\"format\")){\r\n\r\n\t\t\tformatter = this.table.modules.format.getFormatter(this.definition.titleFormatter);\r\n\r\n\t\t\tonRendered = (callback) => {\r\n\t\t\t\tthis.titleFormatterRendered = callback;\r\n\t\t\t};\r\n\r\n\t\t\tmockCell = {\r\n\t\t\t\tgetValue:function(){\r\n\t\t\t\t\treturn title;\r\n\t\t\t\t},\r\n\t\t\t\tgetElement:function(){\r\n\t\t\t\t\treturn el;\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\tparams = this.definition.titleFormatterParams || {};\r\n\r\n\t\t\tparams = typeof params === \"function\" ? params() : params;\r\n\r\n\t\t\tcontents = formatter.call(this.table.modules.format, mockCell, params, onRendered);\r\n\r\n\t\t\tswitch(typeof contents){\r\n\t\t\t\tcase \"object\":\r\n\t\t\t\tif(contents instanceof Node){\r\n\t\t\t\t\tel.appendChild(contents);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tel.innerHTML = \"\";\r\n\t\t\t\t\tconsole.warn(\"Format Error - Title formatter has returned a type of object, the only valid formatter object return is an instance of Node, the formatter returned:\", contents);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\t\tcase \"undefined\":\r\n\t\t\t\tcase \"null\":\r\n\t\t\t\tel.innerHTML = \"\";\r\n\t\t\t\tbreak;\r\n\t\t\t\tdefault:\r\n\t\t\t\tel.innerHTML = contents;\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tel.innerHTML = title;\r\n\t\t}\r\n\t}\r\n\r\n\t//build header element for column group\r\n\t_buildGroupHeader(){\r\n\t\tthis.element.classList.add(\"tabulator-col-group\");\r\n\t\tthis.element.setAttribute(\"role\", \"columngroup\");\r\n\t\tthis.element.setAttribute(\"aria-title\", this.definition.title);\r\n\r\n\t\t//asign additional css classes to column header\r\n\t\tif(this.definition.cssClass){\r\n\t\t\tvar classeNames = this.definition.cssClass.split(\" \");\r\n\t\t\tclasseNames.forEach((className) => {\r\n\t\t\t\tthis.element.classList.add(className);\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\t//set column header context menu\r\n\t\tif ((this.definition.headerContextMenu || this.definition.headerMenu) && this.table.modExists(\"menu\")) {\r\n\t\t\tthis.table.modules.menu.initializeColumnHeader(this);\r\n\t\t}\r\n\r\n\t\tthis.titleElement.style.textAlign = this.definition.headerHozAlign || this.table.options.headerHozAlign;\r\n\r\n\t\tthis.element.appendChild(this.groupElement);\r\n\t}\r\n\r\n\t//flat field lookup\r\n\t_getFlatData(data){\r\n\t\treturn data[this.field];\r\n\t}\r\n\r\n\t//nested field lookup\r\n\t_getNestedData(data){\r\n\t\tvar dataObj = data,\r\n\t\tstructure = this.fieldStructure,\r\n\t\tlength = structure.length,\r\n\t\toutput;\r\n\r\n\t\tfor(let i = 0; i < length; i++){\r\n\r\n\t\t\tdataObj = dataObj[structure[i]];\r\n\r\n\t\t\toutput = dataObj;\r\n\r\n\t\t\tif(!dataObj){\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\t//flat field set\r\n\t_setFlatData(data, value){\r\n\t\tif(this.field){\r\n\t\t\tdata[this.field] = value;\r\n\t\t}\r\n\t}\r\n\r\n\t//nested field set\r\n\t_setNestedData(data, value){\r\n\t\tvar dataObj = data,\r\n\t\tstructure = this.fieldStructure,\r\n\t\tlength = structure.length;\r\n\r\n\t\tfor(let i = 0; i < length; i++){\r\n\r\n\t\t\tif(i == length -1){\r\n\t\t\t\tdataObj[structure[i]] = value;\r\n\t\t\t}else{\r\n\t\t\t\tif(!dataObj[structure[i]]){\r\n\t\t\t\t\tif(typeof value !== \"undefined\"){\r\n\t\t\t\t\t\tdataObj[structure[i]] = {};\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tdataObj = dataObj[structure[i]];\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//attach column to this group\r\n\tattachColumn(column){\r\n\t\tif(this.groupElement){\r\n\t\t\tthis.columns.push(column);\r\n\t\t\tthis.groupElement.appendChild(column.getElement());\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Column Warning - Column being attached to another column instead of column group\");\r\n\t\t}\r\n\t}\r\n\r\n\t//vertically align header in column\r\n\tverticalAlign(alignment, height){\r\n\r\n\t\t//calculate height of column header and group holder element\r\n\t\tvar parentHeight = this.parent.isGroup ? this.parent.getGroupElement().clientHeight : (height || this.parent.getHeadersElement().clientHeight);\r\n\t\t// var parentHeight = this.parent.isGroup ? this.parent.getGroupElement().clientHeight : this.parent.getHeadersElement().clientHeight;\r\n\r\n\t\tthis.element.style.height = parentHeight + \"px\";\r\n\r\n\t\tif(this.isGroup){\r\n\t\t\tthis.groupElement.style.minHeight = (parentHeight - this.contentElement.offsetHeight) + \"px\";\r\n\t\t}\r\n\r\n\t\t//vertically align cell contents\r\n\t\tif(!this.isGroup && alignment !== \"top\"){\r\n\t\t\tif(alignment === \"bottom\"){\r\n\t\t\t\tthis.element.style.paddingTop = (this.element.clientHeight - this.contentElement.offsetHeight) + \"px\";\r\n\t\t\t}else{\r\n\t\t\t\tthis.element.style.paddingTop = ((this.element.clientHeight - this.contentElement.offsetHeight) / 2) + \"px\";\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.columns.forEach(function(column){\r\n\t\t\tcolumn.verticalAlign(alignment);\r\n\t\t});\r\n\t}\r\n\r\n\t//clear vertical alignmenet\r\n\tclearVerticalAlign(){\r\n\t\tthis.element.style.paddingTop = \"\";\r\n\t\tthis.element.style.height = \"\";\r\n\t\tthis.element.style.minHeight = \"\";\r\n\t\tthis.groupElement.style.minHeight = \"\";\r\n\r\n\t\tthis.columns.forEach(function(column){\r\n\t\t\tcolumn.clearVerticalAlign();\r\n\t\t});\r\n\t}\r\n\r\n\tbindModuleColumns (){\r\n\t\t//check if rownum formatter is being used on a column\r\n\t\tif(this.definition.formatter == \"rownum\"){\r\n\t\t\tthis.table.rowManager.rowNumColumn = this;\r\n\t\t}\r\n\t}\r\n\r\n\t//// Retreive Column Information ////\r\n\t//return column header element\r\n\tgetElement(){\r\n\t\treturn this.element;\r\n\t}\r\n\r\n\t//return colunm group element\r\n\tgetGroupElement(){\r\n\t\treturn this.groupElement;\r\n\t}\r\n\r\n\t//return field name\r\n\tgetField(){\r\n\t\treturn this.field;\r\n\t}\r\n\r\n\t//return the first column in a group\r\n\tgetFirstColumn(){\r\n\t\tif(!this.isGroup){\r\n\t\t\treturn this;\r\n\t\t}else{\r\n\t\t\tif(this.columns.length){\r\n\t\t\t\treturn this.columns[0].getFirstColumn();\r\n\t\t\t}else{\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//return the last column in a group\r\n\tgetLastColumn(){\r\n\t\tif(!this.isGroup){\r\n\t\t\treturn this;\r\n\t\t}else{\r\n\t\t\tif(this.columns.length){\r\n\t\t\t\treturn this.columns[this.columns.length -1].getLastColumn();\r\n\t\t\t}else{\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//return all columns in a group\r\n\tgetColumns(){\r\n\t\treturn this.columns;\r\n\t}\r\n\r\n\t//return all columns in a group\r\n\tgetCells(){\r\n\t\treturn this.cells;\r\n\t}\r\n\r\n\t//retreive the top column in a group of columns\r\n\tgetTopColumn(){\r\n\t\tif(this.parent.isGroup){\r\n\t\t\treturn this.parent.getTopColumn();\r\n\t\t}else{\r\n\t\t\treturn this;\r\n\t\t}\r\n\t}\r\n\r\n\t//return column definition object\r\n\tgetDefinition(updateBranches){\r\n\t\tvar colDefs = [];\r\n\r\n\t\tif(this.isGroup && updateBranches){\r\n\t\t\tthis.columns.forEach(function(column){\r\n\t\t\t\tcolDefs.push(column.getDefinition(true));\r\n\t\t\t});\r\n\r\n\t\t\tthis.definition.columns = colDefs;\r\n\t\t}\r\n\r\n\t\treturn this.definition;\r\n\t}\r\n\r\n\t//////////////////// Actions ////////////////////\r\n\tcheckColumnVisibility(){\r\n\t\tvar visible = false;\r\n\r\n\t\tthis.columns.forEach(function(column){\r\n\t\t\tif(column.visible){\r\n\t\t\t\tvisible = true;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tif(visible){\r\n\t\t\tthis.show();\r\n\t\t\tthis.parent.table.options.columnVisibilityChanged.call(this.table, this.getComponent(), false);\r\n\t\t}else{\r\n\t\t\tthis.hide();\r\n\t\t}\r\n\t}\r\n\r\n\t//show column\r\n\tshow(silent, responsiveToggle){\r\n\t\tif(!this.visible){\r\n\t\t\tthis.visible = true;\r\n\r\n\t\t\tthis.element.style.display = \"\";\r\n\r\n\t\t\tif(this.parent.isGroup){\r\n\t\t\t\tthis.parent.checkColumnVisibility();\r\n\t\t\t}\r\n\r\n\t\t\tthis.cells.forEach(function(cell){\r\n\t\t\t\tcell.show();\r\n\t\t\t});\r\n\r\n\t\t\tif(!this.isGroup && this.width === null){\r\n\t\t\t\tthis.reinitializeWidth();\r\n\t\t\t}\r\n\r\n\t\t\tthis.table.columnManager._verticalAlignHeaders();\r\n\r\n\t\t\tif(this.table.options.persistence && this.table.modExists(\"persistence\", true) && this.table.modules.persistence.config.columns){\r\n\t\t\t\tthis.table.modules.persistence.save(\"columns\");\r\n\t\t\t}\r\n\r\n\t\t\tif(!responsiveToggle && this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)){\r\n\t\t\t\tthis.table.modules.responsiveLayout.updateColumnVisibility(this, this.visible);\r\n\t\t\t}\r\n\r\n\t\t\tif(!silent){\r\n\t\t\t\tthis.table.options.columnVisibilityChanged.call(this.table, this.getComponent(), true);\r\n\t\t\t}\r\n\r\n\t\t\tif(this.parent.isGroup){\r\n\t\t\t\tthis.parent.matchChildWidths();\r\n\t\t\t}\r\n\r\n\t\t\tif(!this.silent && this.table.options.virtualDomHoz){\r\n\t\t\t\tthis.table.vdomHoz.reinitialize();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//hide column\r\n\thide(silent, responsiveToggle){\r\n\t\tif(this.visible){\r\n\t\t\tthis.visible = false;\r\n\r\n\t\t\tthis.element.style.display = \"none\";\r\n\r\n\t\t\tthis.table.columnManager._verticalAlignHeaders();\r\n\r\n\t\t\tif(this.parent.isGroup){\r\n\t\t\t\tthis.parent.checkColumnVisibility();\r\n\t\t\t}\r\n\r\n\t\t\tthis.cells.forEach(function(cell){\r\n\t\t\t\tcell.hide();\r\n\t\t\t});\r\n\r\n\t\t\tif(this.table.options.persistence && this.table.modExists(\"persistence\", true) && this.table.modules.persistence.config.columns){\r\n\t\t\t\tthis.table.modules.persistence.save(\"columns\");\r\n\t\t\t}\r\n\r\n\t\t\tif(!responsiveToggle && this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)){\r\n\t\t\t\tthis.table.modules.responsiveLayout.updateColumnVisibility(this, this.visible);\r\n\t\t\t}\r\n\r\n\t\t\tif(!silent){\r\n\t\t\t\tthis.table.options.columnVisibilityChanged.call(this.table, this.getComponent(), false);\r\n\t\t\t}\r\n\r\n\t\t\tif(this.parent.isGroup){\r\n\t\t\t\tthis.parent.matchChildWidths();\r\n\t\t\t}\r\n\r\n\t\t\tif(!this.silent && this.table.options.virtualDomHoz){\r\n\t\t\t\tthis.table.vdomHoz.reinitialize();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tmatchChildWidths(){\r\n\t\tvar childWidth = 0;\r\n\r\n\t\tif(this.contentElement && this.columns.length){\r\n\t\t\tthis.columns.forEach(function(column){\r\n\t\t\t\tif(column.visible){\r\n\t\t\t\t\tchildWidth += column.getWidth();\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tthis.contentElement.style.maxWidth = (childWidth - 1) + \"px\";\r\n\r\n\t\t\tif(this.parent.isGroup){\r\n\t\t\t\tthis.parent.matchChildWidths();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tremoveChild(child){\r\n\t\tvar index = this.columns.indexOf(child);\r\n\r\n\t\tif(index > -1){\r\n\t\t\tthis.columns.splice(index, 1);\r\n\t\t}\r\n\r\n\t\tif(!this.columns.length){\r\n\t\t\tthis.delete();\r\n\t\t}\r\n\t}\r\n\r\n\tsetWidth(width){\r\n\t\tthis.widthFixed = true;\r\n\t\tthis.setWidthActual(width);\r\n\t}\r\n\r\n\tsetWidthActual(width){\r\n\t\tif(isNaN(width)){\r\n\t\t\twidth = Math.floor((this.table.element.clientWidth/100) * parseInt(width));\r\n\t\t}\r\n\r\n\t\twidth = Math.max(this.minWidth, width);\r\n\r\n\t\tif(this.maxWidth){\r\n\t\t\twidth = Math.min(this.maxWidth, width);\r\n\t\t}\r\n\r\n\t\tthis.width = width;\r\n\t\tthis.widthStyled = width ? width + \"px\" : \"\";\r\n\r\n\t\tthis.element.style.width = this.widthStyled;\r\n\r\n\t\tif(!this.isGroup){\r\n\t\t\tthis.cells.forEach(function(cell){\r\n\t\t\t\tcell.setWidth();\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif(this.parent.isGroup){\r\n\t\t\tthis.parent.matchChildWidths();\r\n\t\t}\r\n\r\n\t\t//set resizable handles\r\n\t\tif(this.table.modExists(\"frozenColumns\")){\r\n\t\t\tthis.table.modules.frozenColumns.layout();\r\n\t\t}\r\n\t}\r\n\r\n\tcheckCellHeights(){\r\n\t\tvar rows = [];\r\n\r\n\t\tthis.cells.forEach(function(cell){\r\n\t\t\tif(cell.row.heightInitialized){\r\n\t\t\t\tif(cell.row.getElement().offsetParent !== null){\r\n\t\t\t\t\trows.push(cell.row);\r\n\t\t\t\t\tcell.row.clearCellHeight();\r\n\t\t\t\t}else{\r\n\t\t\t\t\tcell.row.heightInitialized = false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\trows.forEach(function(row){\r\n\t\t\trow.calcHeight();\r\n\t\t});\r\n\r\n\t\trows.forEach(function(row){\r\n\t\t\trow.setCellHeight();\r\n\t\t});\r\n\t}\r\n\r\n\tgetWidth(){\r\n\t\tvar width = 0;\r\n\r\n\t\tif(this.isGroup){\r\n\t\t\tthis.columns.forEach(function(column){\r\n\t\t\t\tif(column.visible){\r\n\t\t\t\t\twidth += column.getWidth();\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\twidth = this.width;\r\n\t\t}\r\n\r\n\t\treturn width;\r\n\t}\r\n\r\n\tgetHeight(){\r\n\t\treturn this.element.offsetHeight;\r\n\t}\r\n\r\n\tsetMinWidth(minWidth){\r\n\t\tthis.minWidth = minWidth;\r\n\t\tthis.minWidthStyled = minWidth ? minWidth + \"px\" : \"\";\r\n\r\n\t\tthis.element.style.minWidth = this.minWidthStyled;\r\n\r\n\t\tthis.cells.forEach(function(cell){\r\n\t\t\tcell.setMinWidth();\r\n\t\t});\r\n\t}\r\n\r\n\tsetMaxWidth(maxWidth){\r\n\t\tthis.maxWidth = maxWidth;\r\n\t\tthis.maxWidthStyled = maxWidth ? maxWidth + \"px\" : \"\";\r\n\r\n\t\tthis.element.style.maxWidth = this.maxWidthStyled;\r\n\r\n\t\tthis.cells.forEach(function(cell){\r\n\t\t\tcell.setMaxWidth();\r\n\t\t});\r\n\t}\r\n\r\n\tdelete(){\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tvar index;\r\n\r\n\t\t\tif(this.isGroup){\r\n\t\t\t\tthis.columns.forEach(function(column){\r\n\t\t\t\t\tcolumn.delete();\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\t//cancel edit if column is currently being edited\r\n\t\t\tif(this.table.modExists(\"edit\")){\r\n\t\t\t\tif(this.table.modules.edit.currentCell.column === this){\r\n\t\t\t\t\tthis.table.modules.edit.cancelEdit();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tvar cellCount = this.cells.length;\r\n\r\n\t\t\tfor(let i = 0; i < cellCount; i++){\r\n\t\t\t\tthis.cells[0].delete();\r\n\t\t\t}\r\n\r\n\t\t\tif(this.element.parentNode){\r\n\t\t\t\tthis.element.parentNode.removeChild(this.element);\r\n\t\t\t}\r\n\r\n\t\t\tthis.element = false;\r\n\t\t\tthis.contentElement = false;\r\n\t\t\tthis.titleElement = false;\r\n\t\t\tthis.groupElement = false;\r\n\r\n\t\t\tif(this.parent.isGroup){\r\n\t\t\t\tthis.parent.removeChild(this);\r\n\t\t\t}\r\n\r\n\t\t\tthis.table.columnManager.deregisterColumn(this);\r\n\r\n\t\t\tif(this.table.options.virtualDomHoz){\r\n\t\t\t\tthis.table.vdomHoz.reinitialize(true);\r\n\t\t\t}\r\n\r\n\t\t\tresolve();\r\n\t\t});\r\n\t}\r\n\r\n\tcolumnRendered(){\r\n\t\tif(this.titleFormatterRendered){\r\n\t\t\tthis.titleFormatterRendered();\r\n\t\t}\r\n\t}\r\n\r\n\tvalidate(){\r\n\t\tvar invalid = [];\r\n\r\n\t\tthis.cells.forEach(function(cell){\r\n\t\t\tif(!cell.validate()){\r\n\t\t\t\tinvalid.push(cell.getComponent());\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn invalid.length ? invalid : true;\r\n\t}\r\n\r\n\t//////////////// Cell Management /////////////////\r\n\t//generate cell for this column\r\n\tgenerateCell(row){\r\n\t\tvar cell = new Cell(this, row);\r\n\r\n\t\tthis.cells.push(cell);\r\n\r\n\t\treturn cell;\r\n\t}\r\n\r\n\tnextColumn(){\r\n\t\tvar index = this.table.columnManager.findColumnIndex(this);\r\n\t\treturn index > -1 ? this._nextVisibleColumn(index + 1) : false;\r\n\t}\r\n\r\n\t_nextVisibleColumn(index){\r\n\t\tvar column = this.table.columnManager.getColumnByIndex(index);\r\n\t\treturn !column || column.visible ? column : this._nextVisibleColumn(index + 1);\r\n\t}\r\n\r\n\tprevColumn(){\r\n\t\tvar index = this.table.columnManager.findColumnIndex(this);\r\n\t\treturn index > -1 ? this._prevVisibleColumn(index - 1) : false;\r\n\t}\r\n\r\n\t_prevVisibleColumn(index){\r\n\t\tvar column = this.table.columnManager.getColumnByIndex(index);\r\n\t\treturn !column || column.visible ? column : this._prevVisibleColumn(index - 1);\r\n\t}\r\n\r\n\treinitializeWidth(force){\r\n\t\tthis.widthFixed = false;\r\n\r\n\t\t//set width if present\r\n\t\tif(typeof this.definition.width !== \"undefined\" && !force){\r\n\t\t\tthis.setWidth(this.definition.width);\r\n\t\t}\r\n\r\n\t\t//hide header filters to prevent them altering column width\r\n\t\tif(this.table.modExists(\"filter\")){\r\n\t\t\tthis.table.modules.filter.hideHeaderFilterElements();\r\n\t\t}\r\n\r\n\t\tthis.fitToData();\r\n\r\n\t\t//show header filters again after layout is complete\r\n\t\tif(this.table.modExists(\"filter\")){\r\n\t\t\tthis.table.modules.filter.showHeaderFilterElements();\r\n\t\t}\r\n\t}\r\n\r\n\t//set column width to maximum cell width\r\n\tfitToData(){\r\n\t\tif(!this.widthFixed){\r\n\t\t\tthis.element.style.width = \"\";\r\n\r\n\t\t\tthis.cells.forEach((cell) => {\r\n\t\t\t\tcell.clearWidth();\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tvar maxWidth = this.element.offsetWidth;\r\n\r\n\t\tif(!this.width || !this.widthFixed){\r\n\t\t\tthis.cells.forEach((cell) => {\r\n\t\t\t\tvar width = cell.getWidth();\r\n\r\n\t\t\t\tif(width > maxWidth){\r\n\t\t\t\t\tmaxWidth = width;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tif(maxWidth){\r\n\t\t\t\tthis.setWidthActual(maxWidth + 1);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tupdateDefinition(updates){\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tvar definition;\r\n\r\n\t\t\tif(!this.isGroup){\r\n\t\t\t\tif(!this.parent.isGroup){\r\n\t\t\t\t\tdefinition = Object.assign({}, this.getDefinition());\r\n\t\t\t\t\tdefinition = Object.assign(definition, updates);\r\n\r\n\t\t\t\t\tthis.table.columnManager.addColumn(definition, false, this)\r\n\t\t\t\t\t.then((column) => {\r\n\r\n\t\t\t\t\t\tif(definition.field == this.field){\r\n\t\t\t\t\t\t\tthis.field = false; //cleair field name to prevent deletion of duplicate column from arrays\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tthis.delete()\r\n\t\t\t\t\t\t.then(() => {\r\n\t\t\t\t\t\t\tresolve(column.getComponent());\r\n\t\t\t\t\t\t}).catch((err) => {\r\n\t\t\t\t\t\t\treject(err);\r\n\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t}).catch((err) => {\r\n\t\t\t\t\t\treject(err);\r\n\t\t\t\t\t});\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.warn(\"Column Update Error - The updateDefinition function is only available on ungrouped columns\");\r\n\t\t\t\t\treject(\"Column Update Error - The updateDefinition function is only available on columns, not column groups\");\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Column Update Error - The updateDefinition function is only available on ungrouped columns\");\r\n\t\t\t\treject(\"Column Update Error - The updateDefinition function is only available on columns, not column groups\");\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tdeleteCell(cell){\r\n\t\tvar index = this.cells.indexOf(cell);\r\n\r\n\t\tif(index > -1){\r\n\t\t\tthis.cells.splice(index, 1);\r\n\t\t}\r\n\t}\r\n\r\n\t//////////////// Object Generation /////////////////\r\n\tgetComponent(){\r\n\t\tif(!this.component){\r\n\t\t\tthis.component = new ColumnComponent(this);\r\n\t\t}\r\n\r\n\t\treturn this.component;\r\n\t}\r\n}\r\n\r\nColumn.defaultOptionList = defaultOptions;\r\n\r\nexport default Column;","export default class Helpers{\r\n\r\n\tstatic elVisible(el){\r\n\t\treturn !(el.offsetWidth <= 0 && el.offsetHeight <= 0);\r\n\t}\r\n\r\n\tstatic elOffset(el){\r\n\t\tvar box = el.getBoundingClientRect();\r\n\r\n\t\treturn {\r\n\t\t\ttop: box.top + window.pageYOffset - document.documentElement.clientTop,\r\n\t\t\tleft: box.left + window.pageXOffset - document.documentElement.clientLeft\r\n\t\t};\r\n\t}\r\n\r\n\tstatic deepClone(obj){\r\n\t\tvar clone = Object.assign(Array.isArray(obj) ? [] : {}, obj);\r\n\r\n\t\tfor(var i in obj) {\r\n\t\t\tif(obj[i] != null && typeof(obj[i]) === \"object\"){\r\n\t\t\t\tif (obj[i] instanceof Date) {\r\n\t\t\t\t\tclone[i] = new Date(obj[i]);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tclone[i] = this.deepClone(obj[i]);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn clone;\r\n\t}\r\n}","import Column from './column/Column.js';\r\nimport Helpers from './Helpers.js';\r\n\r\nexport default class ColumnManager {\r\n\r\n\tconstructor (table){\r\n\t\tthis.table = table; //hold parent table\r\n\t\tthis.blockHozScrollEvent = false;\r\n\t\tthis.headersElement = this.createHeadersElement();\r\n\t\tthis.element = this.createHeaderElement(); //containing element\r\n\t\tthis.rowManager = null; //hold row manager object\r\n\t\tthis.columns = []; // column definition object\r\n\t\tthis.columnsByIndex = []; //columns by index\r\n\t\tthis.columnsByField = {}; //columns by field\r\n\t\tthis.scrollLeft = 0;\r\n\r\n\t\tthis.element.insertBefore(this.headersElement, this.element.firstChild);\r\n\t}\r\n\r\n\t////////////// Setup Functions /////////////////\r\n\r\n\tcreateHeadersElement (){\r\n\t\tvar el = document.createElement(\"div\");\r\n\r\n\t\tel.classList.add(\"tabulator-headers\");\r\n\r\n\t\treturn el;\r\n\t}\r\n\r\n\tcreateHeaderElement (){\r\n\t\tvar el = document.createElement(\"div\");\r\n\r\n\t\tel.classList.add(\"tabulator-header\");\r\n\r\n\t\tif(!this.table.options.headerVisible){\r\n\t\t\tel.classList.add(\"tabulator-header-hidden\");\r\n\t\t}\r\n\r\n\t\treturn el;\r\n\t}\r\n\r\n\tinitialize (){\r\n\t\t//scroll body along with header\r\n\t\t// this.element.addEventListener(\"scroll\", (e) => {\r\n\t\t// \tif(!this.blockHozScrollEvent){\r\n\t\t// \t\tthis.table.rowManager.scrollHorizontal(this.element.scrollLeft);\r\n\t\t// \t}\r\n\t\t// });\r\n\t}\r\n\r\n\t//link to row manager\r\n\tsetRowManager(manager){\r\n\t\tthis.rowManager = manager;\r\n\t}\r\n\r\n\t//return containing element\r\n\tgetElement(){\r\n\t\treturn this.element;\r\n\t}\r\n\r\n\t//return header containing element\r\n\tgetHeadersElement(){\r\n\t\treturn this.headersElement;\r\n\t}\r\n\r\n\t//scroll horizontally to match table body\r\n\tscrollHorizontal(left){\r\n\t\tvar hozAdjust = 0,\r\n\t\tscrollWidth = this.element.scrollWidth - this.table.element.clientWidth;\r\n\r\n\t\t// this.tempScrollBlock();\r\n\t\tthis.element.scrollLeft = left;\r\n\r\n\t\t//adjust for vertical scrollbar moving table when present\r\n\t\tif(left > scrollWidth){\r\n\t\t\thozAdjust = left - scrollWidth;\r\n\t\t\tthis.element.style.marginLeft = (-(hozAdjust)) + \"px\";\r\n\t\t}else{\r\n\t\t\tthis.element.style.marginLeft = 0;\r\n\t\t}\r\n\r\n\t\t//keep frozen columns fixed in position\r\n\t\t//this._calcFrozenColumnsPos(hozAdjust + 3);\r\n\r\n\t\tthis.scrollLeft = left;\r\n\r\n\t\tif(this.table.modExists(\"frozenColumns\")){\r\n\t\t\tthis.table.modules.frozenColumns.scrollHorizontal();\r\n\t\t}\r\n\t}\r\n\r\n\t///////////// Column Setup Functions /////////////\r\n\tgenerateColumnsFromRowData(data){\r\n\t\tvar cols = [],\r\n\t\tdefinitions = this.table.options.autoColumnsDefinitions,\r\n\t\trow, sorter;\r\n\r\n\t\tif(data && data.length){\r\n\r\n\t\t\trow = data[0];\r\n\r\n\t\t\tfor(var key in row){\r\n\t\t\t\tlet col = {\r\n\t\t\t\t\tfield:key,\r\n\t\t\t\t\ttitle:key,\r\n\t\t\t\t};\r\n\r\n\t\t\t\tlet value = row[key];\r\n\r\n\t\t\t\tswitch(typeof value){\r\n\t\t\t\t\tcase \"undefined\":\r\n\t\t\t\t\tsorter = \"string\";\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase \"boolean\":\r\n\t\t\t\t\tsorter = \"boolean\";\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase \"object\":\r\n\t\t\t\t\tif(Array.isArray(value)){\r\n\t\t\t\t\t\tsorter = \"array\";\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tsorter = \"string\";\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tdefault:\r\n\t\t\t\t\tif(!isNaN(value) && value !== \"\"){\r\n\t\t\t\t\t\tsorter = \"number\";\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tif(value.match(/((^[0-9]+[a-z]+)|(^[a-z]+[0-9]+))+$/i)){\r\n\t\t\t\t\t\t\tsorter = \"alphanum\";\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\tsorter = \"string\";\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tcol.sorter = sorter;\r\n\r\n\t\t\t\tcols.push(col);\r\n\t\t\t}\r\n\r\n\t\t\tif(definitions){\r\n\r\n\t\t\t\tswitch(typeof definitions){\r\n\t\t\t\t\tcase \"function\":\r\n\t\t\t\t\t\tthis.table.options.columns = definitions.call(this.table, cols);\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase \"object\":\r\n\t\t\t\t\t\tif(Array.isArray(definitions)){\r\n\t\t\t\t\t\t\tcols.forEach((col) => {\r\n\t\t\t\t\t\t\t\tvar match = definitions.find((def) => {\r\n\t\t\t\t\t\t\t\t\treturn def.field === col.field;\r\n\t\t\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\t\t\tif(match){\r\n\t\t\t\t\t\t\t\t\tObject.assign(col, match);\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\tcols.forEach((col) => {\r\n\t\t\t\t\t\t\t\tif(definitions[col.field]){\r\n\t\t\t\t\t\t\t\t\tObject.assign(col, definitions[col.field]);\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tthis.table.options.columns = cols;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tthis.table.options.columns = cols;\r\n\t\t\t}\r\n\r\n\t\t\tthis.setColumns(this.table.options.columns);\r\n\t\t}\r\n\t}\r\n\r\n\tsetColumns(cols, row){\r\n\t\twhile(this.headersElement.firstChild) this.headersElement.removeChild(this.headersElement.firstChild);\r\n\r\n\t\tthis.columns = [];\r\n\t\tthis.columnsByIndex = [];\r\n\t\tthis.columnsByField = {};\r\n\r\n\t\t//reset frozen columns\r\n\t\tif(this.table.modExists(\"frozenColumns\")){\r\n\t\t\tthis.table.modules.frozenColumns.reset();\r\n\t\t}\r\n\r\n\t\tcols.forEach((def, i) => {\r\n\t\t\tthis._addColumn(def);\r\n\t\t});\r\n\r\n\t\tthis._reIndexColumns();\r\n\r\n\t\tif(this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)){\r\n\t\t\tthis.table.modules.responsiveLayout.initialize();\r\n\t\t}\r\n\r\n\t\tif(this.table.options.virtualDomHoz){\r\n\t\t\tthis.table.vdomHoz.reinitialize(false, true);\r\n\t\t}\r\n\r\n\t\tthis.redraw(true);\r\n\t}\r\n\r\n\t_addColumn(definition, before, nextToColumn){\r\n\t\tvar column = new Column(definition, this),\r\n\t\tcolEl = column.getElement(),\r\n\t\tindex = nextToColumn ? this.findColumnIndex(nextToColumn) : nextToColumn;\r\n\r\n\t\tif(nextToColumn && index > -1){\r\n\r\n\t\t\tvar parentIndex = this.columns.indexOf(nextToColumn.getTopColumn());\r\n\t\t\tvar nextEl = nextToColumn.getElement();\r\n\r\n\t\t\tif(before){\r\n\t\t\t\tthis.columns.splice(parentIndex, 0, column);\r\n\t\t\t\tnextEl.parentNode.insertBefore(colEl, nextEl);\r\n\t\t\t}else{\r\n\t\t\t\tthis.columns.splice(parentIndex + 1, 0, column);\r\n\t\t\t\tnextEl.parentNode.insertBefore(colEl, nextEl.nextSibling);\r\n\t\t\t}\r\n\r\n\t\t}else{\r\n\t\t\tif(before){\r\n\t\t\t\tthis.columns.unshift(column);\r\n\t\t\t\tthis.headersElement.insertBefore(column.getElement(), this.headersElement.firstChild);\r\n\t\t\t}else{\r\n\t\t\t\tthis.columns.push(column);\r\n\t\t\t\tthis.headersElement.appendChild(column.getElement());\r\n\t\t\t}\r\n\r\n\t\t\tcolumn.columnRendered();\r\n\t\t}\r\n\r\n\t\treturn column;\r\n\t}\r\n\r\n\tregisterColumnField(col){\r\n\t\tif(col.definition.field){\r\n\t\t\tthis.columnsByField[col.definition.field] = col;\r\n\t\t}\r\n\t}\r\n\r\n\tregisterColumnPosition(col){\r\n\t\tthis.columnsByIndex.push(col);\r\n\t}\r\n\r\n\t_reIndexColumns(){\r\n\t\tthis.columnsByIndex = [];\r\n\r\n\t\tthis.columns.forEach(function(column){\r\n\t\t\tcolumn.reRegisterPosition();\r\n\t\t});\r\n\t}\r\n\r\n\t//ensure column headers take up the correct amount of space in column groups\r\n\t_verticalAlignHeaders(){\r\n\t\tvar minHeight = 0;\r\n\r\n\t\tthis.columns.forEach((column) => {\r\n\t\t\tvar height;\r\n\r\n\t\t\tcolumn.clearVerticalAlign();\r\n\r\n\t\t\theight = column.getHeight();\r\n\r\n\t\t\tif(height > minHeight){\r\n\t\t\t\tminHeight = height;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tthis.columns.forEach((column) => {\r\n\t\t\tcolumn.verticalAlign(this.table.options.columnHeaderVertAlign, minHeight);\r\n\t\t});\r\n\r\n\t\tthis.rowManager.adjustTableSize();\r\n\t}\r\n\r\n\t//////////////// Column Details /////////////////\r\n\tfindColumn(subject){\r\n\t\tif(typeof subject == \"object\"){\r\n\r\n\t\t\tif(subject instanceof Column){\r\n\t\t\t\t//subject is column element\r\n\t\t\t\treturn subject;\r\n\t\t\t}else if(subject instanceof ColumnComponent){\r\n\t\t\t\t//subject is public column component\r\n\t\t\t\treturn subject._getSelf() || false;\r\n\t\t\t}else if(typeof HTMLElement !== \"undefined\" && subject instanceof HTMLElement){\r\n\t\t\t\t//subject is a HTML element of the column header\r\n\t\t\t\tlet match = this.columns.find((column) => {\r\n\t\t\t\t\treturn column.element === subject;\r\n\t\t\t\t});\r\n\r\n\t\t\t\treturn match || false;\r\n\t\t\t}\r\n\r\n\t\t}else{\r\n\t\t\t//subject should be treated as the field name of the column\r\n\t\t\treturn this.columnsByField[subject] || false;\r\n\t\t}\r\n\r\n\t\t//catch all for any other type of input\r\n\t\treturn false;\r\n\t}\r\n\r\n\tgetColumnByField(field){\r\n\t\treturn this.columnsByField[field];\r\n\t}\r\n\r\n\tgetColumnsByFieldRoot(root){\r\n\t\tvar matches = [];\r\n\r\n\t\tObject.keys(this.columnsByField).forEach((field) => {\r\n\t\t\tvar fieldRoot = field.split(\".\")[0];\r\n\t\t\tif(fieldRoot === root){\r\n\t\t\t\tmatches.push(this.columnsByField[field]);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn matches;\r\n\t}\r\n\r\n\tgetColumnByIndex(index){\r\n\t\treturn this.columnsByIndex[index];\r\n\t}\r\n\r\n\tgetFirstVisibileColumn(index){\r\n\t\tvar index = this.columnsByIndex.findIndex((col) => {\r\n\t\t\treturn col.visible;\r\n\t\t});\r\n\r\n\t\treturn index > -1 ? this.columnsByIndex[index] : false;\r\n\t}\r\n\r\n\tgetColumns(){\r\n\t\treturn this.columns;\r\n\t}\r\n\r\n\tfindColumnIndex(column){\r\n\t\treturn this.columnsByIndex.findIndex((col) => {\r\n\t\t\treturn column === col;\r\n\t\t});\r\n\t}\r\n\r\n\t//return all columns that are not groups\r\n\tgetRealColumns(){\r\n\t\treturn this.columnsByIndex;\r\n\t}\r\n\r\n\t//travers across columns and call action\r\n\ttraverse(callback){\r\n\t\tthis.columnsByIndex.forEach((column,i) =>{\r\n\t\t\tcallback(column, i);\r\n\t\t});\r\n\t}\r\n\r\n\t//get defintions of actual columns\r\n\tgetDefinitions(active){\r\n\t\tvar output = [];\r\n\r\n\t\tthis.columnsByIndex.forEach((column) => {\r\n\t\t\tif(!active || (active && column.visible)){\r\n\t\t\t\toutput.push(column.getDefinition());\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\t//get full nested definition tree\r\n\tgetDefinitionTree(){\r\n\t\tvar output = [];\r\n\r\n\t\tthis.columns.forEach((column) => {\r\n\t\t\toutput.push(column.getDefinition(true));\r\n\t\t});\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tgetComponents(structured){\r\n\t\tvar output = [],\r\n\t\tcolumns = structured ? this.columns : this.columnsByIndex;\r\n\r\n\t\tcolumns.forEach((column) => {\r\n\t\t\toutput.push(column.getComponent());\r\n\t\t});\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tgetWidth(){\r\n\t\tvar width = 0;\r\n\r\n\t\tthis.columnsByIndex.forEach((column) => {\r\n\t\t\tif(column.visible){\r\n\t\t\t\twidth += column.getWidth();\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn width;\r\n\t}\r\n\r\n\tmoveColumn(from, to, after){\r\n\t\tthis.moveColumnActual(from, to, after);\r\n\r\n\t\tif(this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)){\r\n\t\t\tthis.table.modules.responsiveLayout.initialize();\r\n\t\t}\r\n\r\n\t\tif(this.table.modExists(\"columnCalcs\")){\r\n\t\t\tthis.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows);\r\n\t\t}\r\n\r\n\t\tto.element.parentNode.insertBefore(from.element, to.element);\r\n\r\n\t\tif(after){\r\n\t\t\tto.element.parentNode.insertBefore(to.element, from.element);\r\n\t\t}\r\n\r\n\t\tthis._verticalAlignHeaders();\r\n\r\n\t\tthis.table.rowManager.reinitialize();\r\n\t}\r\n\r\n\tmoveColumnActual(from, to, after){\r\n\r\n\t\tif(from.parent.isGroup){\r\n\t\t\tthis._moveColumnInArray(from.parent.columns, from, to, after);\r\n\t\t}else{\r\n\t\t\tthis._moveColumnInArray(this.columns, from, to, after);\r\n\t\t}\r\n\r\n\t\tthis._moveColumnInArray(this.columnsByIndex, from, to, after, true);\r\n\r\n\t\tif(this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)){\r\n\t\t\tthis.table.modules.responsiveLayout.initialize();\r\n\t\t}\r\n\r\n\t\tif(this.table.options.virtualDomHoz){\r\n\t\t\tthis.table.vdomHoz.reinitialize(true);\r\n\t\t}\r\n\r\n\t\tif(this.table.options.columnMoved){\r\n\t\t\tthis.table.options.columnMoved.call(this.table, from.getComponent(), this.table.columnManager.getComponents());\r\n\t\t}\r\n\r\n\t\tif(this.table.options.persistence && this.table.modExists(\"persistence\", true) && this.table.modules.persistence.config.columns){\r\n\t\t\tthis.table.modules.persistence.save(\"columns\");\r\n\t\t}\r\n\t}\r\n\r\n\t_moveColumnInArray(columns, from, to, after, updateRows){\r\n\t\tvar\tfromIndex = columns.indexOf(from),\r\n\t\ttoIndex, rows = [];\r\n\r\n\t\tif (fromIndex > -1) {\r\n\r\n\t\t\tcolumns.splice(fromIndex, 1);\r\n\r\n\t\t\ttoIndex = columns.indexOf(to);\r\n\r\n\t\t\tif (toIndex > -1) {\r\n\r\n\t\t\t\tif(after){\r\n\t\t\t\t\ttoIndex = toIndex+1;\r\n\t\t\t\t}\r\n\r\n\t\t\t}else{\r\n\t\t\t\ttoIndex = fromIndex;\r\n\t\t\t}\r\n\r\n\t\t\tcolumns.splice(toIndex, 0, from);\r\n\r\n\t\t\tif(updateRows){\r\n\r\n\t\t\t\tif(this.table.options.dataTree && this.table.modExists(\"dataTree\", true)){\r\n\t\t\t\t\tthis.table.rowManager.rows.forEach((row) => {\r\n\t\t\t\t\t\trows = rows.concat(this.table.modules.dataTree.getTreeChildren(row, false, true));\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\r\n\t\t\t\trows = rows.concat(this.table.rowManager.rows);\r\n\r\n\t\t\t\trows.forEach(function(row){\r\n\t\t\t\t\tif(row.cells.length){\r\n\t\t\t\t\t\tvar cell = row.cells.splice(fromIndex, 1)[0];\r\n\t\t\t\t\t\trow.cells.splice(toIndex, 0, cell);\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tscrollToColumn(column, position, ifVisible){\r\n\t\tvar left = 0,\r\n\t\toffset = 0,\r\n\t\tadjust = 0,\r\n\t\tcolEl = column.getElement();\r\n\r\n\t\treturn new Promise((resolve, reject) => {\r\n\r\n\t\t\tif(typeof position === \"undefined\"){\r\n\t\t\t\tposition = this.table.options.scrollToColumnPosition;\r\n\t\t\t}\r\n\r\n\t\t\tif(typeof ifVisible === \"undefined\"){\r\n\t\t\t\tifVisible = this.table.options.scrollToColumnIfVisible;\r\n\t\t\t}\r\n\r\n\t\t\tif(column.visible){\r\n\r\n\t\t\t\t//align to correct position\r\n\t\t\t\tswitch(position){\r\n\t\t\t\t\tcase \"middle\":\r\n\t\t\t\t\tcase \"center\":\r\n\t\t\t\t\tadjust = -this.element.clientWidth / 2;\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase \"right\":\r\n\t\t\t\t\tadjust = colEl.clientWidth - this.headersElement.clientWidth;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//check column visibility\r\n\t\t\t\tif(!ifVisible){\r\n\r\n\t\t\t\t\toffset = colEl.offsetLeft;\r\n\r\n\t\t\t\t\tif(offset > 0 && offset + colEl.offsetWidth < this.element.clientWidth){\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//calculate scroll position\r\n\t\t\t\tleft = colEl.offsetLeft + adjust;\r\n\r\n\t\t\t\tleft = Math.max(Math.min(left, this.table.rowManager.element.scrollWidth - this.table.rowManager.element.clientWidth),0);\r\n\r\n\t\t\t\tthis.table.rowManager.scrollHorizontal(left);\r\n\t\t\t\tthis.scrollHorizontal(left);\r\n\r\n\t\t\t\tresolve();\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Scroll Error - Column not visible\");\r\n\t\t\t\treject(\"Scroll Error - Column not visible\");\r\n\t\t\t}\r\n\r\n\t\t});\r\n\t}\r\n\r\n\t//////////////// Cell Management /////////////////\r\n\tgenerateCells(row){\r\n\t\tvar cells = [];\r\n\r\n\t\tthis.columnsByIndex.forEach((column) => {\r\n\t\t\tcells.push(column.generateCell(row));\r\n\t\t});\r\n\r\n\t\treturn cells;\r\n\t}\r\n\r\n\t//////////////// Column Management /////////////////\r\n\tgetFlexBaseWidth(){\r\n\t\tvar totalWidth = this.table.element.clientWidth, //table element width\r\n\t\tfixedWidth = 0;\r\n\r\n\t\t//adjust for vertical scrollbar if present\r\n\t\tif(this.rowManager.element.scrollHeight > this.rowManager.element.clientHeight){\r\n\t\t\ttotalWidth -= this.rowManager.element.offsetWidth - this.rowManager.element.clientWidth;\r\n\t\t}\r\n\r\n\t\tthis.columnsByIndex.forEach(function(column){\r\n\t\t\tvar width, minWidth, colWidth;\r\n\r\n\t\t\tif(column.visible){\r\n\r\n\t\t\t\twidth = column.definition.width || 0;\r\n\r\n\t\t\t\tminWidth = typeof column.minWidth == \"undefined\" ? this.table.options.columnMinWidth : parseInt(column.minWidth);\r\n\r\n\t\t\t\tif(typeof(width) == \"string\"){\r\n\t\t\t\t\tif(width.indexOf(\"%\") > -1){\r\n\t\t\t\t\t\tcolWidth = (totalWidth / 100) * parseInt(width) ;\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tcolWidth = parseInt(width);\r\n\t\t\t\t\t}\r\n\t\t\t\t}else{\r\n\t\t\t\t\tcolWidth = width;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tfixedWidth += colWidth > minWidth ? colWidth : minWidth;\r\n\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn fixedWidth;\r\n\t}\r\n\r\n\taddColumn(definition, before, nextToColumn){\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tvar column = this._addColumn(definition, before, nextToColumn);\r\n\r\n\t\t\tthis._reIndexColumns();\r\n\r\n\t\t\tif(this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)){\r\n\t\t\t\tthis.table.modules.responsiveLayout.initialize();\r\n\t\t\t}\r\n\r\n\t\t\tif(this.table.modExists(\"columnCalcs\")){\r\n\t\t\t\tthis.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows);\r\n\t\t\t}\r\n\r\n\t\t\tthis.redraw(true);\r\n\r\n\t\t\tif(this.table.modules.layout.getMode() != \"fitColumns\"){\r\n\t\t\t\tcolumn.reinitializeWidth();\r\n\t\t\t}\r\n\r\n\t\t\tthis._verticalAlignHeaders();\r\n\r\n\t\t\tthis.table.rowManager.reinitialize();\r\n\r\n\t\t\tif(this.table.options.virtualDomHoz){\r\n\t\t\t\tthis.table.vdomHoz.reinitialize();\r\n\t\t\t}\r\n\r\n\t\t\tresolve(column);\r\n\t\t});\r\n\t}\r\n\r\n\t//remove column from system\r\n\tderegisterColumn(column){\r\n\t\tvar field = column.getField(),\r\n\t\tindex;\r\n\r\n\t\t//remove from field list\r\n\t\tif(field){\r\n\t\t\tdelete this.columnsByField[field];\r\n\t\t}\r\n\r\n\t\t//remove from index list\r\n\t\tindex = this.columnsByIndex.indexOf(column);\r\n\r\n\t\tif(index > -1){\r\n\t\t\tthis.columnsByIndex.splice(index, 1);\r\n\t\t}\r\n\r\n\t\t//remove from column list\r\n\t\tindex = this.columns.indexOf(column);\r\n\r\n\t\tif(index > -1){\r\n\t\t\tthis.columns.splice(index, 1);\r\n\t\t}\r\n\r\n\t\tif(this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)){\r\n\t\t\tthis.table.modules.responsiveLayout.initialize();\r\n\t\t}\r\n\r\n\t\tthis._verticalAlignHeaders();\r\n\r\n\t\tthis.redraw();\r\n\t}\r\n\r\n\t//redraw columns\r\n\tredraw(force){\r\n\t\tif(force){\r\n\t\t\tif(Helpers.elVisible(this.element)){\r\n\t\t\t\tthis._verticalAlignHeaders();\r\n\t\t\t}\r\n\r\n\t\t\tthis.table.rowManager.resetScroll();\r\n\t\t\tthis.table.rowManager.reinitialize();\r\n\t\t}\r\n\r\n\t\tif([\"fitColumns\", \"fitDataStretch\"].indexOf(this.table.modules.layout.getMode()) > -1){\r\n\t\t\tthis.table.modules.layout.layout();\r\n\t\t}else{\r\n\t\t\tif(force){\r\n\t\t\t\tthis.table.modules.layout.layout();\r\n\t\t\t}else{\r\n\t\t\t\tif(this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)){\r\n\t\t\t\t\tthis.table.modules.responsiveLayout.update();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(this.table.modExists(\"frozenColumns\")){\r\n\t\t\tthis.table.modules.frozenColumns.layout();\r\n\t\t}\r\n\r\n\t\tif(this.table.modExists(\"columnCalcs\")){\r\n\t\t\tthis.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows);\r\n\t\t}\r\n\r\n\t\tif(force){\r\n\t\t\tif(this.table.options.persistence && this.table.modExists(\"persistence\", true) && this.table.modules.persistence.config.columns){\r\n\t\t\t\tthis.table.modules.persistence.save(\"columns\");\r\n\t\t\t}\r\n\r\n\t\t\tif(this.table.modExists(\"columnCalcs\")){\r\n\t\t\t\tthis.table.modules.columnCalcs.redraw();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.table.footerManager.redraw();\r\n\t}\r\n}","//public row object\r\nexport default class RowComponent {\r\n\r\n\tconstructor (row){\r\n\t\tthis._row = row;\r\n\t}\r\n\r\n\tgetData(transform){\r\n\t\treturn this._row.getData(transform);\r\n\t}\r\n\r\n\tgetElement(){\r\n\t\treturn this._row.getElement();\r\n\t}\r\n\r\n\tgetCells(){\r\n\t\tvar cells = [];\r\n\r\n\t\tthis._row.getCells().forEach(function(cell){\r\n\t\t\tcells.push(cell.getComponent());\r\n\t\t});\r\n\r\n\t\treturn cells;\r\n\t}\r\n\r\n\tgetCell(column){\r\n\t\tvar cell = this._row.getCell(column);\r\n\t\treturn cell ? cell.getComponent() : false;\r\n\t}\r\n\r\n\tgetIndex(){\r\n\t\treturn this._row.getData(\"data\")[this._row.table.options.index];\r\n\t}\r\n\r\n\tgetPosition(active){\r\n\t\treturn this._row.table.rowManager.getRowPosition(this._row, active);\r\n\t}\r\n\r\n\tdelete(){\r\n\t\treturn this._row.delete();\r\n\t}\r\n\r\n\tscrollTo(){\r\n\t\treturn this._row.table.rowManager.scrollToRow(this._row);\r\n\t}\r\n\r\n\tpageTo(){\r\n\t\tif(this._row.table.modExists(\"page\", true)){\r\n\t\t\treturn this._row.table.modules.page.setPageToRow(this._row);\r\n\t\t}\r\n\t}\r\n\r\n\tmove(to, after){\r\n\t\tthis._row.moveToRow(to, after);\r\n\t}\r\n\r\n\tupdate(data){\r\n\t\treturn this._row.updateData(data);\r\n\t}\r\n\r\n\tnormalizeHeight(){\r\n\t\tthis._row.normalizeHeight(true);\r\n\t}\r\n\r\n\tselect(){\r\n\t\tthis._row.table.modules.selectRow.selectRows(this._row);\r\n\t}\r\n\r\n\tdeselect(){\r\n\t\tthis._row.table.modules.selectRow.deselectRows(this._row);\r\n\t}\r\n\r\n\ttoggleSelect(){\r\n\t\tthis._row.table.modules.selectRow.toggleRow(this._row);\r\n\t}\r\n\r\n\tisSelected(){\r\n\t\treturn this._row.table.modules.selectRow.isRowSelected(this._row);\r\n\t}\r\n\r\n\t_getSelf(){\r\n\t\treturn this._row;\r\n\t}\r\n\r\n\tvalidate(){\r\n\t\treturn this._row.validate();\r\n\t}\r\n\r\n\tfreeze(){\r\n\t\tif(this._row.table.modExists(\"frozenRows\", true)){\r\n\t\t\tthis._row.table.modules.frozenRows.freezeRow(this._row);\r\n\t\t}\r\n\t}\r\n\r\n\tunfreeze(){\r\n\t\tif(this._row.table.modExists(\"frozenRows\", true)){\r\n\t\t\tthis._row.table.modules.frozenRows.unfreezeRow(this._row);\r\n\t\t}\r\n\t}\r\n\r\n\tisFrozen(){\r\n\t\tif(this._row.table.modExists(\"frozenRows\", true)){\r\n\t\t\tvar index = this._row.table.modules.frozenRows.rows.indexOf(this._row);\r\n\t\t\treturn index > -1;\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t}\r\n\r\n\ttreeCollapse(){\r\n\t\tif(this._row.table.modExists(\"dataTree\", true)){\r\n\t\t\tthis._row.table.modules.dataTree.collapseRow(this._row);\r\n\t\t}\r\n\t}\r\n\r\n\ttreeExpand(){\r\n\t\tif(this._row.table.modExists(\"dataTree\", true)){\r\n\t\t\tthis._row.table.modules.dataTree.expandRow(this._row);\r\n\t\t}\r\n\t}\r\n\r\n\ttreeToggle(){\r\n\t\tif(this._row.table.modExists(\"dataTree\", true)){\r\n\t\t\tthis._row.table.modules.dataTree.toggleRow(this._row);\r\n\t\t}\r\n\t}\r\n\r\n\tgetTreeParent(){\r\n\t\tif(this._row.table.modExists(\"dataTree\", true)){\r\n\t\t\treturn this._row.table.modules.dataTree.getTreeParent(this._row);\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t}\r\n\r\n\tgetTreeChildren(){\r\n\t\tif(this._row.table.modExists(\"dataTree\", true)){\r\n\t\t\treturn this._row.table.modules.dataTree.getTreeChildren(this._row, true);\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t}\r\n\r\n\taddTreeChild(data, pos, index){\r\n\t\tif(this._row.table.modExists(\"dataTree\", true)){\r\n\t\t\treturn this._row.table.modules.dataTree.addTreeChildRow(this._row, data, pos, index);\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t}\r\n\r\n\treformat(){\r\n\t\treturn this._row.reinitialize();\r\n\t}\r\n\r\n\tgetGroup(){\r\n\t\treturn this._row.getGroup().getComponent();\r\n\t}\r\n\r\n\tgetTable(){\r\n\t\treturn this._row.table;\r\n\t}\r\n\r\n\tgetNextRow(){\r\n\t\tvar row = this._row.nextRow();\r\n\t\treturn row ? row.getComponent() : row;\r\n\t}\r\n\r\n\tgetPrevRow(){\r\n\t\tvar row = this._row.prevRow();\r\n\t\treturn row ? row.getComponent() : row;\r\n\t}\r\n}","import RowComponent from './RowComponent.js';\r\nimport Helpers from '../Helpers.js';\r\n\r\nexport default class Row {\r\n\tconstructor (data, parent, type = \"row\"){\r\n\t\tthis.table = parent.table;\r\n\t\tthis.parent = parent;\r\n\t\tthis.data = {};\r\n\t\tthis.type = type; //type of element\r\n\t\tthis.element = false;\r\n\t\tthis.modules = {}; //hold module variables;\r\n\t\tthis.cells = [];\r\n\t\tthis.height = 0; //hold element height\r\n\t\tthis.heightStyled = \"\"; //hold element height prestyled to improve render efficiency\r\n\t\tthis.manualHeight = false; //user has manually set row height\r\n\t\tthis.outerHeight = 0; //holde lements outer height\r\n\t\tthis.initialized = false; //element has been rendered\r\n\t\tthis.heightInitialized = false; //element has resized cells to fit\r\n\r\n\t\tthis.component = null;\r\n\r\n\t\tthis.created = false;\r\n\r\n\t\tthis.setData(data);\r\n\t}\r\n\r\n\tcreate(){\r\n\t\tif(!this.created){\r\n\t\t\tthis.created = true;\r\n\t\t\tthis.generateElement();\r\n\t\t}\r\n\t}\r\n\r\n\tcreateElement (){\r\n\t\tvar el = document.createElement(\"div\");\r\n\r\n\t\tel.classList.add(\"tabulator-row\");\r\n\t\tel.setAttribute(\"role\", \"row\");\r\n\r\n\t\tthis.element = el;\r\n\t}\r\n\r\n\tgetElement(){\r\n\t\tthis.create();\r\n\t\treturn this.element;\r\n\t}\r\n\r\n\tdetachElement(){\r\n\t\tif (this.element && this.element.parentNode){\r\n\t\t\tthis.element.parentNode.removeChild(this.element);\r\n\t\t}\r\n\t}\r\n\r\n\tgenerateElement(){\r\n\t\tvar dblTap,\ttapHold, tap;\r\n\r\n\t\tthis.createElement();\r\n\r\n\t\t//set row selection characteristics\r\n\t\tif(this.table.options.selectable !== false && this.table.modExists(\"selectRow\")){\r\n\t\t\tthis.table.modules.selectRow.initializeRow(this);\r\n\t\t}\r\n\r\n\t\t//setup movable rows\r\n\t\tif(this.table.options.movableRows !== false && this.table.modExists(\"moveRow\")){\r\n\t\t\tthis.table.modules.moveRow.initializeRow(this);\r\n\t\t}\r\n\r\n\t\t//setup data tree\r\n\t\tif(this.table.options.dataTree !== false && this.table.modExists(\"dataTree\")){\r\n\t\t\tthis.table.modules.dataTree.initializeRow(this);\r\n\t\t}\r\n\r\n\t\t//setup column colapse container\r\n\t\tif(this.table.options.responsiveLayout === \"collapse\" && this.table.modExists(\"responsiveLayout\")){\r\n\t\t\tthis.table.modules.responsiveLayout.initializeRow(this);\r\n\t\t}\r\n\r\n\t\t//set column menu\r\n\t\tif((this.table.options.rowContextMenu || this.table.options.rowClickMenu) && this.table.modExists(\"menu\")){\r\n\t\t\tthis.table.modules.menu.initializeRow(this);\r\n\t\t}\r\n\r\n\t\t//handle row click events\r\n\t\tif (this.table.options.rowClick){\r\n\t\t\tthis.element.addEventListener(\"click\", (e) => {\r\n\t\t\t\tthis.table.options.rowClick(e, this.getComponent());\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif (this.table.options.rowDblClick){\r\n\t\t\tthis.element.addEventListener(\"dblclick\", (e) => {\r\n\t\t\t\tthis.table.options.rowDblClick(e, this.getComponent());\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif (this.table.options.rowContext){\r\n\t\t\tthis.element.addEventListener(\"contextmenu\", (e) => {\r\n\t\t\t\tthis.table.options.rowContext(e, this.getComponent());\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\t//handle mouse events\r\n\t\tif (this.table.options.rowMouseEnter){\r\n\t\t\tthis.element.addEventListener(\"mouseenter\", (e) => {\r\n\t\t\t\tthis.table.options.rowMouseEnter(e, this.getComponent());\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif (this.table.options.rowMouseLeave){\r\n\t\t\tthis.element.addEventListener(\"mouseleave\", (e) => {\r\n\t\t\t\tthis.table.options.rowMouseLeave(e, this.getComponent());\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif (this.table.options.rowMouseOver){\r\n\t\t\tthis.element.addEventListener(\"mouseover\", (e) => {\r\n\t\t\t\tthis.table.options.rowMouseOver(e, this.getComponent());\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif (this.table.options.rowMouseOut){\r\n\t\t\tthis.element.addEventListener(\"mouseout\", (e) => {\r\n\t\t\t\tthis.table.options.rowMouseOut(e, this.getComponent());\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif (this.table.options.rowMouseMove){\r\n\t\t\tthis.element.addEventListener(\"mousemove\", (e) => {\r\n\t\t\t\tthis.table.options.rowMouseMove(e, this.getComponent());\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif (this.table.options.rowTap){\r\n\r\n\t\t\ttap = false;\r\n\r\n\t\t\tthis.element.addEventListener(\"touchstart\", (e) => {\r\n\t\t\t\ttap = true;\r\n\t\t\t}, {passive: true});\r\n\r\n\t\t\tthis.element.addEventListener(\"touchend\", (e) => {\r\n\t\t\t\tif(tap){\r\n\t\t\t\t\tthis.table.options.rowTap(e, this.getComponent());\r\n\t\t\t\t}\r\n\r\n\t\t\t\ttap = false;\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif (this.table.options.rowDblTap){\r\n\r\n\t\t\tdblTap = null;\r\n\r\n\t\t\tthis.element.addEventListener(\"touchend\", (e) => {\r\n\t\t\t\tif(dblTap){\r\n\t\t\t\t\tclearTimeout(dblTap);\r\n\t\t\t\t\tdblTap = null;\r\n\r\n\t\t\t\t\tthis.table.options.rowDblTap(e, this.getComponent());\r\n\t\t\t\t}else{\r\n\r\n\t\t\t\t\tdblTap = setTimeout(() => {\r\n\t\t\t\t\t\tclearTimeout(dblTap);\r\n\t\t\t\t\t\tdblTap = null;\r\n\t\t\t\t\t}, 300);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif (this.table.options.rowTapHold){\r\n\r\n\t\t\ttapHold = null;\r\n\r\n\t\t\tthis.element.addEventListener(\"touchstart\", (e) => {\r\n\t\t\t\tclearTimeout(tapHold);\r\n\r\n\t\t\t\ttapHold = setTimeout(() => {\r\n\t\t\t\t\tclearTimeout(tapHold);\r\n\t\t\t\t\ttapHold = null;\r\n\t\t\t\t\ttap = false;\r\n\t\t\t\t\tthis.table.options.rowTapHold(e, this.getComponent());\r\n\t\t\t\t}, 1000);\r\n\r\n\t\t\t}, {passive: true});\r\n\r\n\t\t\tthis.element.addEventListener(\"touchend\", (e) => {\r\n\t\t\t\tclearTimeout(tapHold);\r\n\t\t\t\ttapHold = null;\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tgenerateCells(){\r\n\t\tthis.cells = this.table.columnManager.generateCells(this);\r\n\t}\r\n\r\n\t//functions to setup on first render\r\n\tinitialize(force){\r\n\t\tthis.create();\r\n\r\n\t\tif(!this.initialized || force){\r\n\r\n\t\t\tthis.deleteCells();\r\n\r\n\t\t\twhile(this.element.firstChild) this.element.removeChild(this.element.firstChild);\r\n\r\n\t\t\t//handle frozen cells\r\n\t\t\tif(this.table.modExists(\"frozenColumns\")){\r\n\t\t\t\tthis.table.modules.frozenColumns.layoutRow(this);\r\n\t\t\t}\r\n\r\n\t\t\tthis.generateCells();\r\n\r\n\t\t\tif(this.table.options.virtualDomHoz && this.table.vdomHoz.initialized){\r\n\t\t\t\tthis.table.vdomHoz.initializeRow(this);\r\n\t\t\t}else{\r\n\t\t\t\tthis.cells.forEach((cell) => {\r\n\t\t\t\t\tthis.element.appendChild(cell.getElement());\r\n\t\t\t\t\tcell.cellRendered();\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\tif(force){\r\n\t\t\t\tthis.normalizeHeight();\r\n\t\t\t}\r\n\r\n\t\t\t//setup movable rows\r\n\t\t\tif(this.table.options.dataTree && this.table.modExists(\"dataTree\")){\r\n\t\t\t\tthis.table.modules.dataTree.layoutRow(this);\r\n\t\t\t}\r\n\r\n\t\t\t//setup column colapse container\r\n\t\t\tif(this.table.options.responsiveLayout === \"collapse\" && this.table.modExists(\"responsiveLayout\")){\r\n\t\t\t\tthis.table.modules.responsiveLayout.layoutRow(this);\r\n\t\t\t}\r\n\r\n\t\t\tif(this.table.options.rowFormatter){\r\n\t\t\t\tthis.table.options.rowFormatter(this.getComponent());\r\n\t\t\t}\r\n\r\n\t\t\t//set resizable handles\r\n\t\t\tif(this.table.options.resizableRows && this.table.modExists(\"resizeRows\")){\r\n\t\t\t\tthis.table.modules.resizeRows.initializeRow(this);\r\n\t\t\t}\r\n\r\n\t\t\tthis.initialized = true;\r\n\t\t}else{\r\n\t\t\tif(this.table.options.virtualDomHoz){\r\n\t\t\t\tthis.table.vdomHoz.reinitializeRow(this);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\treinitializeHeight(){\r\n\t\tthis.heightInitialized = false;\r\n\r\n\t\tif(this.element && this.element.offsetParent !== null){\r\n\t\t\tthis.normalizeHeight(true);\r\n\t\t}\r\n\t}\r\n\r\n\treinitialize(children){\r\n\t\tthis.initialized = false;\r\n\t\tthis.heightInitialized = false;\r\n\r\n\t\tif(!this.manualHeight){\r\n\t\t\tthis.height = 0;\r\n\t\t\tthis.heightStyled = \"\";\r\n\t\t}\r\n\r\n\t\tif(this.element && this.element.offsetParent !== null){\r\n\t\t\tthis.initialize(true);\r\n\t\t}\r\n\r\n\t\tif(this.table.options.dataTree && this.table.modExists(\"dataTree\", true)){\r\n\t\t\tthis.table.modules.dataTree.getTreeChildren(this, false, true).forEach(function(child){\r\n\t\t\t\tchild.reinitialize(true);\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\t//get heights when doing bulk row style calcs in virtual DOM\r\n\tcalcHeight(force){\r\n\r\n\t\tvar maxHeight = 0,\r\n\t\tminHeight = this.table.options.resizableRows ? this.element.clientHeight : 0;\r\n\r\n\t\tthis.cells.forEach(function(cell){\r\n\t\t\tvar height = cell.getHeight();\r\n\t\t\tif(height > maxHeight){\r\n\t\t\t\tmaxHeight = height;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tif(force){\r\n\t\t\tthis.height = Math.max(maxHeight, minHeight);\r\n\t\t}else{\r\n\t\t\tthis.height = this.manualHeight ? this.height : Math.max(maxHeight, minHeight);\r\n\t\t}\r\n\r\n\t\tthis.heightStyled = this.height ? this.height + \"px\" : \"\";\r\n\t\tthis.outerHeight = this.element.offsetHeight;\r\n\t}\r\n\r\n\t//set of cells\r\n\tsetCellHeight(){\r\n\t\tthis.cells.forEach(function(cell){\r\n\t\t\tcell.setHeight();\r\n\t\t});\r\n\r\n\t\tthis.heightInitialized = true;\r\n\t}\r\n\r\n\tclearCellHeight(){\r\n\t\tthis.cells.forEach(function(cell){\r\n\t\t\tcell.clearHeight();\r\n\t\t});\r\n\t}\r\n\r\n\t//normalize the height of elements in the row\r\n\tnormalizeHeight(force){\r\n\r\n\t\tif(force){\r\n\t\t\tthis.clearCellHeight();\r\n\t\t}\r\n\r\n\t\tthis.calcHeight(force);\r\n\r\n\t\tthis.setCellHeight();\r\n\t}\r\n\r\n\t//set height of rows\r\n\tsetHeight(height, force){\r\n\t\tif(this.height != height || force){\r\n\r\n\t\t\tthis.manualHeight = true;\r\n\r\n\t\t\tthis.height = height;\r\n\t\t\tthis.heightStyled = height ? height + \"px\" : \"\";\r\n\r\n\t\t\tthis.setCellHeight();\r\n\r\n\t\t\t// this.outerHeight = this.element.outerHeight();\r\n\t\t\tthis.outerHeight = this.element.offsetHeight;\r\n\t\t}\r\n\t}\r\n\r\n\t//return rows outer height\r\n\tgetHeight(){\r\n\t\treturn this.outerHeight;\r\n\t}\r\n\r\n\t//return rows outer Width\r\n\tgetWidth(){\r\n\t\treturn this.element.offsetWidth;\r\n\t}\r\n\r\n\t//////////////// Cell Management /////////////////\r\n\tdeleteCell(cell){\r\n\t\tvar index = this.cells.indexOf(cell);\r\n\r\n\t\tif(index > -1){\r\n\t\t\tthis.cells.splice(index, 1);\r\n\t\t}\r\n\t}\r\n\r\n\t//////////////// Data Management /////////////////\r\n\tsetData(data){\r\n\t\tif(this.table.modExists(\"mutator\")){\r\n\t\t\tdata = this.table.modules.mutator.transformRow(data, \"data\");\r\n\t\t}\r\n\r\n\t\tthis.data = data;\r\n\r\n\t\tif(this.table.options.reactiveData && this.table.modExists(\"reactiveData\", true)){\r\n\t\t\tthis.table.modules.reactiveData.watchRow(this);\r\n\t\t}\r\n\t}\r\n\r\n\t//update the rows data\r\n\tupdateData(updatedData){\r\n\t\tvar visible = this.element && Helpers.elVisible(this.element),\r\n\t\ttempData = {},\r\n\t\tnewRowData;\r\n\r\n\t\treturn new Promise((resolve, reject) => {\r\n\r\n\t\t\tif(typeof updatedData === \"string\"){\r\n\t\t\t\tupdatedData = JSON.parse(updatedData);\r\n\t\t\t}\r\n\r\n\t\t\tif(this.table.options.reactiveData && this.table.modExists(\"reactiveData\", true)){\r\n\t\t\t\tthis.table.modules.reactiveData.block();\r\n\t\t\t}\r\n\r\n\t\t\t//mutate incomming data if needed\r\n\t\t\tif(this.table.modExists(\"mutator\")){\r\n\r\n\t\t\t\ttempData = Object.assign(tempData, this.data);\r\n\t\t\t\ttempData = Object.assign(tempData, updatedData);\r\n\r\n\t\t\t\tnewRowData = this.table.modules.mutator.transformRow(tempData, \"data\", updatedData);\r\n\t\t\t}else{\r\n\t\t\t\tnewRowData = updatedData;\r\n\t\t\t}\r\n\r\n\t\t\t//set data\r\n\t\t\tfor (var attrname in newRowData) {\r\n\t\t\t\tthis.data[attrname] = newRowData[attrname];\r\n\t\t\t}\r\n\r\n\t\t\tif(this.table.options.reactiveData && this.table.modExists(\"reactiveData\", true)){\r\n\t\t\t\tthis.table.modules.reactiveData.unblock();\r\n\t\t\t}\r\n\r\n\t\t\t//update affected cells only\r\n\t\t\tfor (var attrname in updatedData) {\r\n\r\n\t\t\t\tlet columns = this.table.columnManager.getColumnsByFieldRoot(attrname);\r\n\r\n\t\t\t\tcolumns.forEach((column) => {\r\n\t\t\t\t\tlet cell = this.getCell(column.getField());\r\n\r\n\t\t\t\t\tif(cell){\r\n\t\t\t\t\t\tlet value = column.getFieldValue(newRowData);\r\n\t\t\t\t\t\tif(cell.getValue() != value){\r\n\t\t\t\t\t\t\tcell.setValueProcessData(value);\r\n\r\n\t\t\t\t\t\t\tif(visible){\r\n\t\t\t\t\t\t\t\tcell.cellRendered();\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\tif(this.table.options.groupUpdateOnCellEdit && this.table.options.groupBy && this.table.modExists(\"groupRows\")) {\r\n\t\t\t\tthis.table.modules.groupRows.reassignRowToGroup(this.row);\r\n\t\t\t}\r\n\r\n\t\t\t//Partial reinitialization if visible\r\n\t\t\tif(visible){\r\n\t\t\t\tthis.normalizeHeight(true);\r\n\r\n\t\t\t\tif(this.table.options.rowFormatter){\r\n\t\t\t\t\tthis.table.options.rowFormatter(this.getComponent());\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tthis.initialized = false;\r\n\t\t\t\tthis.height = 0;\r\n\t\t\t\tthis.heightStyled = \"\";\r\n\t\t\t}\r\n\r\n\t\t\tif(this.table.options.dataTree !== false && this.table.modExists(\"dataTree\") && this.table.modules.dataTree.redrawNeeded(updatedData)){\r\n\t\t\t\tthis.table.modules.dataTree.initializeRow(this);\r\n\r\n\t\t\t\tif(visible){\r\n\t\t\t\t\tthis.table.modules.dataTree.layoutRow(this);\r\n\t\t\t\t\tthis.table.rowManager.refreshActiveData(\"tree\", false, true);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\r\n\t\t\t//this.reinitialize();\r\n\r\n\t\t\tthis.table.options.rowUpdated.call(this.table, this.getComponent());\r\n\r\n\t\t\tif(this.table.options.dataChanged){\r\n\t\t\t\tthis.table.options.dataChanged.call(this.table, this.table.rowManager.getData());\r\n\t\t\t}\r\n\r\n\t\t\tresolve();\r\n\t\t});\r\n\t}\r\n\r\n\tgetData(transform){\r\n\t\tif(transform){\r\n\t\t\tif(this.table.modExists(\"accessor\")){\r\n\t\t\t\treturn this.table.modules.accessor.transformRow(this, transform);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this.data;\r\n\t}\r\n\r\n\tgetCell(column){\r\n\t\tvar match = false;\r\n\r\n\t\tcolumn = this.table.columnManager.findColumn(column);\r\n\r\n\t\tmatch = this.cells.find(function(cell){\r\n\t\t\treturn cell.column === column;\r\n\t\t});\r\n\r\n\t\treturn match;\r\n\t}\r\n\r\n\tgetCellIndex(findCell){\r\n\t\treturn this.cells.findIndex(function(cell){\r\n\t\t\treturn cell === findCell;\r\n\t\t});\r\n\t}\r\n\r\n\tfindNextEditableCell(index){\r\n\t\tvar nextCell = false;\r\n\r\n\t\tif(index < this.cells.length-1){\r\n\t\t\tfor(var i = index+1; i < this.cells.length; i++){\r\n\t\t\t\tlet cell = this.cells[i];\r\n\r\n\t\t\t\tif(cell.column.modules.edit && Helpers.elVisible(cell.getElement())){\r\n\t\t\t\t\tlet allowEdit = true;\r\n\r\n\t\t\t\t\tif(typeof cell.column.modules.edit.check == \"function\"){\r\n\t\t\t\t\t\tallowEdit = cell.column.modules.edit.check(cell.getComponent());\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif(allowEdit){\r\n\t\t\t\t\t\tnextCell = cell;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn nextCell;\r\n\t}\r\n\r\n\tfindPrevEditableCell(index){\r\n\t\tvar prevCell = false;\r\n\r\n\t\tif(index > 0){\r\n\t\t\tfor(var i = index-1; i >= 0; i--){\r\n\t\t\t\tlet cell = this.cells[i],\r\n\t\t\t\tallowEdit = true;\r\n\r\n\t\t\t\tif(cell.column.modules.edit && Helpers.elVisible(cell.getElement())){\r\n\t\t\t\t\tif(typeof cell.column.modules.edit.check == \"function\"){\r\n\t\t\t\t\t\tallowEdit = cell.column.modules.edit.check(cell.getComponent());\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif(allowEdit){\r\n\t\t\t\t\t\tprevCell = cell;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn prevCell;\r\n\t}\r\n\r\n\tgetCells(){\r\n\t\treturn this.cells;\r\n\t}\r\n\r\n\tnextRow(){\r\n\t\tvar row = this.table.rowManager.nextDisplayRow(this, true);\r\n\t\treturn row || false;\r\n\t}\r\n\r\n\tprevRow(){\r\n\t\tvar row = this.table.rowManager.prevDisplayRow(this, true);\r\n\t\treturn row || false;\r\n\t}\r\n\r\n\tmoveToRow(to, before){\r\n\t\tvar toRow = this.table.rowManager.findRow(to);\r\n\r\n\t\tif(toRow){\r\n\t\t\tthis.table.rowManager.moveRowActual(this, toRow, !before);\r\n\t\t\tthis.table.rowManager.refreshActiveData(\"display\", false, true);\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Move Error - No matching row found:\", to);\r\n\t\t}\r\n\t}\r\n\r\n\tvalidate(){\r\n\t\tvar invalid = [];\r\n\r\n\t\tthis.cells.forEach(function(cell){\r\n\t\t\tif(!cell.validate()){\r\n\t\t\t\tinvalid.push(cell.getComponent());\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn invalid.length ? invalid : true;\r\n\t}\r\n\r\n\t///////////////////// Actions /////////////////////\r\n\tdelete(){\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tvar index, rows;\r\n\r\n\t\t\tif(this.table.options.history && this.table.modExists(\"history\")){\r\n\r\n\t\t\t\tif(this.table.options.groupBy && this.table.modExists(\"groupRows\")){\r\n\t\t\t\t\trows = this.getGroup().rows\r\n\t\t\t\t\tindex = rows.indexOf(this);\r\n\r\n\t\t\t\t\tif(index){\r\n\t\t\t\t\t\tindex = rows[index-1];\r\n\t\t\t\t\t}\r\n\t\t\t\t}else{\r\n\t\t\t\t\tindex = this.table.rowManager.getRowIndex(this);\r\n\r\n\t\t\t\t\tif(index){\r\n\t\t\t\t\t\tindex = this.table.rowManager.rows[index-1];\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.table.modules.history.action(\"rowDelete\", this, {data:this.getData(), pos:!index, index:index});\r\n\t\t\t}\r\n\r\n\t\t\tthis.deleteActual();\r\n\r\n\t\t\tresolve();\r\n\t\t});\r\n\t}\r\n\r\n\tdeleteActual(blockRedraw){\r\n\t\tvar index = this.table.rowManager.getRowIndex(this);\r\n\r\n\t\tthis.detatchModules();\r\n\r\n\t\t// if(this.table.options.dataTree && this.table.modExists(\"dataTree\")){\r\n\t\t// \tthis.table.modules.dataTree.collapseRow(this, true);\r\n\t\t// }\r\n\r\n\t\t//remove any reactive data watchers from row object\r\n\t\tif(this.table.options.reactiveData && this.table.modExists(\"reactiveData\", true)){\r\n\t\t\t// this.table.modules.reactiveData.unwatchRow(this);\r\n\t\t}\r\n\r\n\t\t//remove from group\r\n\t\tif(this.modules.group){\r\n\t\t\tthis.modules.group.removeRow(this);\r\n\t\t}\r\n\r\n\t\tthis.table.rowManager.deleteRow(this, blockRedraw);\r\n\r\n\t\tthis.deleteCells();\r\n\r\n\t\tthis.initialized = false;\r\n\t\tthis.heightInitialized = false;\r\n\t\tthis.element = false;\r\n\r\n\t\tif(this.table.options.dataTree && this.table.modExists(\"dataTree\", true)){\r\n\t\t\tthis.table.modules.dataTree.rowDelete(this);\r\n\t\t}\r\n\r\n\t\t//recalc column calculations if present\r\n\t\tif(this.table.modExists(\"columnCalcs\")){\r\n\t\t\tif(this.table.options.groupBy && this.table.modExists(\"groupRows\")){\r\n\t\t\t\tthis.table.modules.columnCalcs.recalcRowGroup(this);\r\n\t\t\t}else{\r\n\t\t\t\tthis.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tdetatchModules(){\r\n\t\t//deselect row if it is selected\r\n\t\tif(this.table.modExists(\"selectRow\")){\r\n\t\t\tthis.table.modules.selectRow._deselectRow(this, true);\r\n\t\t}\r\n\r\n\t\t//cancel edit if row is currently being edited\r\n\t\tif(this.table.modExists(\"edit\")){\r\n\t\t\tif(this.table.modules.edit.currentCell.row === this){\r\n\t\t\t\tthis.table.modules.edit.cancelEdit();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(this.table.modExists(\"frozenRows\")){\r\n\t\t\tthis.table.modules.frozenRows.detachRow(this);\r\n\t\t}\r\n\t}\r\n\r\n\tdeleteCells(){\r\n\t\tvar cellCount = this.cells.length;\r\n\r\n\t\tfor(let i = 0; i < cellCount; i++){\r\n\t\t\tthis.cells[0].delete();\r\n\t\t}\r\n\t}\r\n\r\n\twipe(){\r\n\t\tthis.detatchModules();\r\n\t\tthis.deleteCells();\r\n\r\n\t\tif(this.element){\r\n\t\t\twhile(this.element.firstChild) this.element.removeChild(this.element.firstChild);\r\n\r\n\t\t\tif(this.element.parentNode){\r\n\t\t\t\tthis.element.parentNode.removeChild(this.element);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.element = false;\r\n\t\tthis.modules = {};\r\n\t}\r\n\r\n\tgetGroup(){\r\n\t\treturn this.modules.group || false;\r\n\t}\r\n\r\n\t//////////////// Object Generation /////////////////\r\n\tgetComponent(){\r\n\t\tif(!this.component){\r\n\t\t\tthis.component = new RowComponent(this);\r\n\t\t}\r\n\r\n\t\treturn this.component;\r\n\t}\r\n}","import Row from './row/Row.js';\r\nimport Helpers from './Helpers.js';\r\n\r\nexport default class RowManager {\r\n\r\n\tconstructor(table){\r\n\t\tthis.table = table;\r\n\t\tthis.element = this.createHolderElement(); //containing element\r\n\t\tthis.tableElement = this.createTableElement(); //table element\r\n\t\tthis.heightFixer = this.createTableElement(); //table element\r\n\t\tthis.columnManager = null; //hold column manager object\r\n\t\tthis.height = 0; //hold height of table element\r\n\r\n\t\tthis.firstRender = false; //handle first render\r\n\t\tthis.renderMode = \"virtual\"; //current rendering mode\r\n\t\tthis.fixedHeight = false; //current rendering mode\r\n\r\n\t\tthis.rows = []; //hold row data objects\r\n\t\tthis.activeRows = []; //rows currently available to on display in the table\r\n\t\tthis.activeRowsCount = 0; //count of active rows\r\n\r\n\t\tthis.displayRows = []; //rows currently on display in the table\r\n\t\tthis.displayRowsCount = 0; //count of display rows\r\n\r\n\t\tthis.scrollTop = 0;\r\n\t\tthis.scrollLeft = 0;\r\n\r\n\t\tthis.vDomRowHeight = 20; //approximation of row heights for padding\r\n\r\n\t\tthis.vDomTop = 0; //hold position for first rendered row in the virtual DOM\r\n\t\tthis.vDomBottom = 0; //hold possition for last rendered row in the virtual DOM\r\n\r\n\t\tthis.vDomScrollPosTop = 0; //last scroll position of the vDom top;\r\n\t\tthis.vDomScrollPosBottom = 0; //last scroll position of the vDom bottom;\r\n\r\n\t\tthis.vDomTopPad = 0; //hold value of padding for top of virtual DOM\r\n\t\tthis.vDomBottomPad = 0; //hold value of padding for bottom of virtual DOM\r\n\r\n\t\tthis.vDomMaxRenderChain = 90; //the maximum number of dom elements that can be rendered in 1 go\r\n\r\n\t\tthis.vDomWindowBuffer = 0; //window row buffer before removing elements, to smooth scrolling\r\n\r\n\t\tthis.vDomWindowMinTotalRows = 20; //minimum number of rows to be generated in virtual dom (prevent buffering issues on tables with tall rows)\r\n\t\tthis.vDomWindowMinMarginRows = 5; //minimum number of rows to be generated in virtual dom margin\r\n\r\n\t\tthis.vDomTopNewRows = []; //rows to normalize after appending to optimize render speed\r\n\t\tthis.vDomBottomNewRows = []; //rows to normalize after appending to optimize render speed\r\n\r\n\t\tthis.rowNumColumn = false; //hold column component for row number column\r\n\r\n\t\tthis.redrawBlock = false; //prevent redraws to allow multiple data manipulations becore continuing\r\n\t\tthis.redrawBlockRestoreConfig = false; //store latest redraw function calls for when redraw is needed\r\n\t\tthis.redrawBlockRederInPosition = false; //store latest redraw function calls for when redraw is needed\r\n\t}\r\n\r\n\t//////////////// Setup Functions /////////////////\r\n\r\n\tcreateHolderElement (){\r\n\t\tvar el = document.createElement(\"div\");\r\n\r\n\t\tel.classList.add(\"tabulator-tableHolder\");\r\n\t\tel.setAttribute(\"tabindex\", 0);\r\n\r\n\t\treturn el;\r\n\t}\r\n\r\n\tcreateTableElement (){\r\n\t\tvar el = document.createElement(\"div\");\r\n\r\n\t\tel.classList.add(\"tabulator-table\");\r\n\r\n\t\treturn el;\r\n\t}\r\n\r\n\t//return containing element\r\n\tgetElement(){\r\n\t\treturn this.element;\r\n\t}\r\n\r\n\t//return table element\r\n\tgetTableElement(){\r\n\t\treturn this.tableElement;\r\n\t}\r\n\r\n\t//return position of row in table\r\n\tgetRowPosition(row, active){\r\n\t\tif(active){\r\n\t\t\treturn this.activeRows.indexOf(row);\r\n\t\t}else{\r\n\t\t\treturn this.rows.indexOf(row);\r\n\t\t}\r\n\t}\r\n\r\n\t//link to column manager\r\n\tsetColumnManager(manager){\r\n\t\tthis.columnManager = manager;\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tthis.setRenderMode();\r\n\r\n\t\t//initialize manager\r\n\t\tthis.element.appendChild(this.tableElement);\r\n\r\n\t\tthis.firstRender = true;\r\n\r\n\t\t//scroll header along with table body\r\n\t\tthis.element.addEventListener(\"scroll\", () => {\r\n\t\t\tvar left = this.element.scrollLeft;\r\n\r\n\t\t\t//handle horizontal scrolling\r\n\t\t\tif(this.scrollLeft != left){\r\n\t\t\t\tthis.columnManager.scrollHorizontal(left);\r\n\r\n\t\t\t\tif(this.table.options.groupBy){\r\n\t\t\t\t\tthis.table.modules.groupRows.scrollHeaders(left);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(this.table.modExists(\"columnCalcs\")){\r\n\t\t\t\t\tthis.table.modules.columnCalcs.scrollHorizontal(left);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.table.options.scrollHorizontal(left);\r\n\t\t\t}\r\n\r\n\t\t\tthis.scrollLeft = left;\r\n\t\t});\r\n\r\n\t\t//handle virtual dom scrolling\r\n\t\tif(this.renderMode === \"virtual\"){\r\n\t\t\tthis.element.addEventListener(\"scroll\", () => {\r\n\t\t\t\tvar top = this.element.scrollTop;\r\n\t\t\t\tvar dir = this.scrollTop > top;\r\n\r\n\t\t\t\t//handle verical scrolling\r\n\t\t\t\tif(this.scrollTop != top){\r\n\t\t\t\t\tthis.scrollTop = top;\r\n\t\t\t\t\tthis.scrollVertical(dir);\r\n\r\n\t\t\t\t\tif(this.table.options.ajaxProgressiveLoad == \"scroll\"){\r\n\t\t\t\t\t\tthis.table.modules.ajax.nextPage(this.element.scrollHeight - this.element.clientHeight - top);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tthis.table.options.scrollVertical(top);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tthis.scrollTop = top;\r\n\t\t\t\t}\r\n\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\t////////////////// Row Manipulation //////////////////\r\n\tfindRow(subject){\r\n\t\tif(typeof subject == \"object\"){\r\n\t\t\tif(subject instanceof Row){\r\n\t\t\t\t//subject is row element\r\n\t\t\t\treturn subject;\r\n\t\t\t}else if(subject instanceof RowComponent){\r\n\t\t\t\t//subject is public row component\r\n\t\t\t\treturn subject._getSelf() || false;\r\n\t\t\t}else if(typeof HTMLElement !== \"undefined\" && subject instanceof HTMLElement){\r\n\t\t\t\t//subject is a HTML element of the row\r\n\t\t\t\tlet match = this.rows.find((row) => {\r\n\t\t\t\t\treturn row.getElement() === subject;\r\n\t\t\t\t});\r\n\r\n\t\t\t\treturn match || false;\r\n\t\t\t}\r\n\t\t}else if(typeof subject == \"undefined\" || subject === null){\r\n\t\t\treturn false;\r\n\t\t}else{\r\n\t\t\t//subject should be treated as the index of the row\r\n\t\t\tlet match = this.rows.find((row) => {\r\n\t\t\t\treturn row.data[this.table.options.index] == subject;\r\n\t\t\t});\r\n\r\n\t\t\treturn match || false;\r\n\t\t}\r\n\r\n\t\t//catch all for any other type of input\r\n\t\treturn false;\r\n\t}\r\n\r\n\tgetRowFromDataObject(data){\r\n\t\tvar match = this.rows.find((row) => {\r\n\t\t\treturn row.data === data;\r\n\t\t});\r\n\r\n\t\treturn match || false;\r\n\t}\r\n\r\n\tgetRowFromPosition(position, active){\r\n\t\tif(active){\r\n\t\t\treturn this.activeRows[position];\r\n\t\t}else{\r\n\t\t\treturn this.rows[position];\r\n\t\t}\r\n\t}\r\n\r\n\tscrollToRow(row, position, ifVisible){\r\n\t\tvar rowIndex = this.getDisplayRows().indexOf(row),\r\n\t\trowEl = row.getElement(),\r\n\t\trowTop,\r\n\t\toffset = 0;\r\n\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tif(rowIndex > -1){\r\n\r\n\t\t\t\tif(typeof position === \"undefined\"){\r\n\t\t\t\t\tposition = this.table.options.scrollToRowPosition;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(typeof ifVisible === \"undefined\"){\r\n\t\t\t\t\tifVisible = this.table.options.scrollToRowIfVisible;\r\n\t\t\t\t}\r\n\r\n\r\n\t\t\t\tif(position === \"nearest\"){\r\n\t\t\t\t\tswitch(this.renderMode){\r\n\t\t\t\t\t\tcase\"classic\":\r\n\t\t\t\t\t\trowTop = Helpers.elOffset(rowEl).top;\r\n\t\t\t\t\t\tposition = Math.abs(this.element.scrollTop - rowTop) > Math.abs(this.element.scrollTop + this.element.clientHeight - rowTop) ? \"bottom\" : \"top\";\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase\"virtual\":\r\n\t\t\t\t\t\tposition = Math.abs(this.vDomTop - rowIndex) > Math.abs(this.vDomBottom - rowIndex) ? \"bottom\" : \"top\";\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//check row visibility\r\n\t\t\t\tif(!ifVisible){\r\n\t\t\t\t\tif(Helpers.elVisible(rowEl)){\r\n\t\t\t\t\t\toffset = Helpers.elOffset(rowEl).top - Helpers.elOffset(this.element).top;\r\n\r\n\t\t\t\t\t\tif(offset > 0 && offset < this.element.clientHeight - rowEl.offsetHeight){\r\n\t\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//scroll to row\r\n\t\t\t\tswitch(this.renderMode){\r\n\t\t\t\t\tcase\"classic\":\r\n\t\t\t\t\tthis.element.scrollTop = Helpers.elOffset(rowEl).top - Helpers.elOffset(this.element).top + this.element.scrollTop;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase\"virtual\":\r\n\t\t\t\t\tthis._virtualRenderFill(rowIndex, true);\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//align to correct position\r\n\t\t\t\tswitch(position){\r\n\t\t\t\t\tcase \"middle\":\r\n\t\t\t\t\tcase \"center\":\r\n\r\n\t\t\t\t\tif(this.element.scrollHeight - this.element.scrollTop == this.element.clientHeight){\r\n\t\t\t\t\t\tthis.element.scrollTop = this.element.scrollTop + (rowEl.offsetTop - this.element.scrollTop) - ((this.element.scrollHeight - rowEl.offsetTop) / 2);\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tthis.element.scrollTop = this.element.scrollTop - (this.element.clientHeight / 2);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase \"bottom\":\r\n\r\n\t\t\t\t\tif(this.element.scrollHeight - this.element.scrollTop == this.element.clientHeight){\r\n\t\t\t\t\t\tthis.element.scrollTop = this.element.scrollTop - (this.element.scrollHeight - rowEl.offsetTop) + rowEl.offsetHeight;\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tthis.element.scrollTop = this.element.scrollTop - this.element.clientHeight + rowEl.offsetHeight;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tresolve();\r\n\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Scroll Error - Row not visible\");\r\n\t\t\t\treject(\"Scroll Error - Row not visible\");\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t////////////////// Data Handling //////////////////\r\n\tsetData(data, renderInPosition, columnsChanged){\r\n\t\treturn new Promise((resolve, reject)=>{\r\n\t\t\tif(renderInPosition && this.getDisplayRows().length){\r\n\t\t\t\tif(this.table.options.pagination){\r\n\t\t\t\t\tthis._setDataActual(data, true);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tthis.reRenderInPosition(() => {\r\n\t\t\t\t\t\tthis._setDataActual(data);\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tif(this.table.options.autoColumns && columnsChanged){\r\n\t\t\t\t\tthis.table.columnManager.generateColumnsFromRowData(data);\r\n\t\t\t\t}\r\n\t\t\t\tthis.resetScroll();\r\n\r\n\t\t\t\tthis._setDataActual(data);\r\n\r\n\t\t\t}\r\n\r\n\t\t\tresolve();\r\n\t\t});\r\n\t}\r\n\r\n\t_setDataActual(data, renderInPosition){\r\n\t\tthis.table.options.dataLoading.call(this.table, data);\r\n\r\n\t\tthis._wipeElements();\r\n\r\n\t\tif(this.table.options.history && this.table.modExists(\"history\")){\r\n\t\t\tthis.table.modules.history.clear();\r\n\t\t}\r\n\r\n\t\tif(Array.isArray(data)){\r\n\r\n\t\t\tif(this.table.modExists(\"selectRow\")){\r\n\t\t\t\tthis.table.modules.selectRow.clearSelectionData();\r\n\t\t\t}\r\n\r\n\t\t\tif(this.table.options.reactiveData && this.table.modExists(\"reactiveData\", true)){\r\n\t\t\t\tthis.table.modules.reactiveData.watchData(data);\r\n\t\t\t}\r\n\r\n\t\t\tdata.forEach((def, i) => {\r\n\t\t\t\tif(def && typeof def === \"object\"){\r\n\t\t\t\t\tvar row = new Row(def, this);\r\n\t\t\t\t\tthis.rows.push(row);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.warn(\"Data Loading Warning - Invalid row data detected and ignored, expecting object but received:\", def);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tthis.refreshActiveData(false, false, renderInPosition);\r\n\r\n\t\t\tthis.table.options.dataLoaded.call(this.table, data);\r\n\t\t}else{\r\n\t\t\tconsole.error(\"Data Loading Error - Unable to process data due to invalid data type \\nExpecting: array \\nReceived: \", typeof data, \"\\nData: \", data);\r\n\t\t}\r\n\t}\r\n\r\n\t_wipeElements(){\r\n\t\tthis.rows.forEach((row) => {\r\n\t\t\trow.wipe();\r\n\t\t});\r\n\r\n\t\tif(this.table.options.groupBy && this.table.modExists(\"groupRows\")){\r\n\t\t\tthis.table.modules.groupRows.wipe();\r\n\t\t}\r\n\r\n\t\tthis.rows = [];\r\n\t\tthis.activeRows = [];\r\n\t\tthis.activeRowsCount = 0;\r\n\t\tthis.displayRows = [];\r\n\t\tthis.displayRowsCount = 0;\r\n\r\n\t\tthis.adjustTableSize();\r\n\t}\r\n\r\n\tdeleteRow(row, blockRedraw){\r\n\t\tvar allIndex = this.rows.indexOf(row),\r\n\t\tactiveIndex = this.activeRows.indexOf(row);\r\n\r\n\t\tif(activeIndex > -1){\r\n\t\t\tthis.activeRows.splice(activeIndex, 1);\r\n\t\t}\r\n\r\n\t\tif(allIndex > -1){\r\n\t\t\tthis.rows.splice(allIndex, 1);\r\n\t\t}\r\n\r\n\t\tthis.setActiveRows(this.activeRows);\r\n\r\n\t\tthis.displayRowIterator((rows) => {\r\n\t\t\tvar displayIndex = rows.indexOf(row);\r\n\r\n\t\t\tif(displayIndex > -1){\r\n\t\t\t\trows.splice(displayIndex, 1);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tif(!blockRedraw){\r\n\t\t\tthis.reRenderInPosition();\r\n\t\t}\r\n\r\n\t\tthis.regenerateRowNumbers();\r\n\r\n\t\tthis.table.options.rowDeleted.call(this.table, row.getComponent());\r\n\r\n\t\tif(this.table.options.dataChanged){\r\n\t\t\tthis.table.options.dataChanged.call(this.table, this.getData());\r\n\t\t}\r\n\r\n\t\tif(this.table.options.groupBy && this.table.modExists(\"groupRows\")){\r\n\t\t\tthis.table.modules.groupRows.updateGroupRows(true);\r\n\t\t}else if(this.table.options.pagination && this.table.modExists(\"page\")){\r\n\t\t\tthis.refreshActiveData(false, false, true);\r\n\t\t}else{\r\n\t\t\tif(this.table.options.pagination && this.table.modExists(\"page\")){\r\n\t\t\t\tthis.refreshActiveData(\"page\");\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\taddRow(data, pos, index, blockRedraw){\r\n\t\tvar row = this.addRowActual(data, pos, index, blockRedraw);\r\n\r\n\t\tif(this.table.options.history && this.table.modExists(\"history\")){\r\n\t\t\tthis.table.modules.history.action(\"rowAdd\", row, {data:data, pos:pos, index:index});\r\n\t\t}\r\n\r\n\t\treturn row;\r\n\t}\r\n\r\n\t//add multiple rows\r\n\taddRows(data, pos, index){\r\n\t\tvar length = 0,\r\n\t\trows = [];\r\n\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tpos = this.findAddRowPos(pos);\r\n\r\n\t\t\tif(!Array.isArray(data)){\r\n\t\t\t\tdata = [data];\r\n\t\t\t}\r\n\r\n\t\t\tlength = data.length - 1;\r\n\r\n\t\t\tif((typeof index == \"undefined\" && pos) || (typeof index !== \"undefined\" && !pos)){\r\n\t\t\t\tdata.reverse();\r\n\t\t\t}\r\n\r\n\t\t\tdata.forEach((item, i) => {\r\n\t\t\t\tvar row = this.addRow(item, pos, index, true);\r\n\t\t\t\trows.push(row);\r\n\t\t\t});\r\n\r\n\t\t\tif(this.table.options.groupBy && this.table.modExists(\"groupRows\")){\r\n\t\t\t\tthis.table.modules.groupRows.updateGroupRows(true);\r\n\t\t\t}else if(this.table.options.pagination && this.table.modExists(\"page\")){\r\n\t\t\t\tthis.refreshActiveData(false, false, true);\r\n\t\t\t}else{\r\n\t\t\t\tthis.reRenderInPosition();\r\n\t\t\t}\r\n\r\n\t\t\t//recalc column calculations if present\r\n\t\t\tif(this.table.modExists(\"columnCalcs\")){\r\n\t\t\t\tthis.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows);\r\n\t\t\t}\r\n\r\n\t\t\tthis.regenerateRowNumbers();\r\n\t\t\tresolve(rows);\r\n\t\t});\r\n\t}\r\n\r\n\tfindAddRowPos(pos){\r\n\t\tif(typeof pos === \"undefined\"){\r\n\t\t\tpos = this.table.options.addRowPos;\r\n\t\t}\r\n\r\n\t\tif(pos === \"pos\"){\r\n\t\t\tpos = true;\r\n\t\t}\r\n\r\n\t\tif(pos === \"bottom\"){\r\n\t\t\tpos = false;\r\n\t\t}\r\n\r\n\t\treturn pos;\r\n\t}\r\n\r\n\taddRowActual(data, pos, index, blockRedraw){\r\n\t\tvar row = data instanceof Row ? data : new Row(data || {}, this),\r\n\t\ttop = this.findAddRowPos(pos),\r\n\t\tallIndex = -1,\r\n\t\tactiveIndex, dispRows;\r\n\r\n\t\tif(!index && this.table.options.pagination && this.table.options.paginationAddRow == \"page\"){\r\n\t\t\tdispRows = this.getDisplayRows();\r\n\r\n\t\t\tif(top){\r\n\t\t\t\tif(dispRows.length){\r\n\t\t\t\t\tindex = dispRows[0];\r\n\t\t\t\t}else{\r\n\t\t\t\t\tif(this.activeRows.length){\r\n\t\t\t\t\t\tindex = this.activeRows[this.activeRows.length-1];\r\n\t\t\t\t\t\ttop = false;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tif(dispRows.length){\r\n\t\t\t\t\tindex = dispRows[dispRows.length - 1];\r\n\t\t\t\t\ttop = dispRows.length < this.table.modules.page.getPageSize() ? false : true;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(typeof index !== \"undefined\"){\r\n\t\t\tindex = this.findRow(index);\r\n\t\t}\r\n\r\n\t\tif(this.table.options.groupBy && this.table.modExists(\"groupRows\")){\r\n\t\t\tthis.table.modules.groupRows.assignRowToGroup(row);\r\n\r\n\t\t\tvar groupRows = row.getGroup().rows;\r\n\r\n\t\t\tif(groupRows.length > 1){\r\n\r\n\t\t\t\tif(!index || (index && groupRows.indexOf(index) == -1)){\r\n\t\t\t\t\tif(top){\r\n\t\t\t\t\t\tif(groupRows[0] !== row){\r\n\t\t\t\t\t\t\tindex = groupRows[0];\r\n\t\t\t\t\t\t\tthis._moveRowInArray(row.getGroup().rows, row, index, !top);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tif(groupRows[groupRows.length -1] !== row){\r\n\t\t\t\t\t\t\tindex = groupRows[groupRows.length -1];\r\n\t\t\t\t\t\t\tthis._moveRowInArray(row.getGroup().rows, row, index, !top);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}else{\r\n\t\t\t\t\tthis._moveRowInArray(row.getGroup().rows, row, index, !top);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(index){\r\n\t\t\tallIndex = this.rows.indexOf(index);\r\n\t\t}\r\n\r\n\t\tif(index && allIndex > -1){\r\n\t\t\tactiveIndex = this.activeRows.indexOf(index);\r\n\r\n\t\t\tthis.displayRowIterator(function(rows){\r\n\t\t\t\tvar displayIndex = rows.indexOf(index);\r\n\r\n\t\t\t\tif(displayIndex > -1){\r\n\t\t\t\t\trows.splice((top ? displayIndex : displayIndex + 1), 0, row);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tif(activeIndex > -1){\r\n\t\t\t\tthis.activeRows.splice((top ? activeIndex : activeIndex + 1), 0, row);\r\n\t\t\t}\r\n\r\n\t\t\tthis.rows.splice((top ? allIndex : allIndex + 1), 0, row);\r\n\r\n\t\t}else{\r\n\r\n\t\t\tif(top){\r\n\r\n\t\t\t\tthis.displayRowIterator(function(rows){\r\n\t\t\t\t\trows.unshift(row);\r\n\t\t\t\t});\r\n\r\n\t\t\t\tthis.activeRows.unshift(row);\r\n\t\t\t\tthis.rows.unshift(row);\r\n\t\t\t}else{\r\n\t\t\t\tthis.displayRowIterator(function(rows){\r\n\t\t\t\t\trows.push(row);\r\n\t\t\t\t});\r\n\r\n\t\t\t\tthis.activeRows.push(row);\r\n\t\t\t\tthis.rows.push(row);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.setActiveRows(this.activeRows);\r\n\r\n\t\tthis.table.options.rowAdded.call(this.table, row.getComponent());\r\n\r\n\t\tif(this.table.options.dataChanged){\r\n\t\t\tthis.table.options.dataChanged.call(this.table, this.getData());\r\n\t\t}\r\n\r\n\t\tif(!blockRedraw){\r\n\t\t\tthis.reRenderInPosition();\r\n\t\t}\r\n\r\n\t\treturn row;\r\n\t}\r\n\r\n\tmoveRow(from, to, after){\r\n\t\tif(this.table.options.history && this.table.modExists(\"history\")){\r\n\t\t\tthis.table.modules.history.action(\"rowMove\", from, {posFrom:this.getRowPosition(from), posTo:this.getRowPosition(to), to:to, after:after});\r\n\t\t}\r\n\r\n\t\tthis.moveRowActual(from, to, after);\r\n\r\n\t\tthis.regenerateRowNumbers();\r\n\r\n\t\tthis.table.options.rowMoved.call(this.table, from.getComponent());\r\n\t}\r\n\r\n\tmoveRowActual(from, to, after){\r\n\t\tthis._moveRowInArray(this.rows, from, to, after);\r\n\t\tthis._moveRowInArray(this.activeRows, from, to, after);\r\n\r\n\t\tthis.displayRowIterator((rows) => {\r\n\t\t\tthis._moveRowInArray(rows, from, to, after);\r\n\t\t});\r\n\r\n\t\tif(this.table.options.groupBy && this.table.modExists(\"groupRows\")){\r\n\r\n\t\t\tif(!after && to instanceof Group){\r\n\t\t\t\tto = this.table.rowManager.prevDisplayRow(from) || to;\r\n\t\t\t}\r\n\r\n\t\t\tvar toGroup = to.getGroup();\r\n\t\t\tvar fromGroup = from.getGroup();\r\n\r\n\t\t\tif(toGroup === fromGroup){\r\n\t\t\t\tthis._moveRowInArray(toGroup.rows, from, to, after);\r\n\t\t\t}else{\r\n\t\t\t\tif(fromGroup){\r\n\t\t\t\t\tfromGroup.removeRow(from);\r\n\t\t\t\t}\r\n\r\n\t\t\t\ttoGroup.insertRow(from, to, after);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t_moveRowInArray(rows, from, to, after){\r\n\t\tvar\tfromIndex, toIndex, start, end;\r\n\r\n\t\tif(from !== to){\r\n\r\n\t\t\tfromIndex = rows.indexOf(from);\r\n\r\n\t\t\tif (fromIndex > -1) {\r\n\r\n\t\t\t\trows.splice(fromIndex, 1);\r\n\r\n\t\t\t\ttoIndex = rows.indexOf(to);\r\n\r\n\t\t\t\tif (toIndex > -1) {\r\n\r\n\t\t\t\t\tif(after){\r\n\t\t\t\t\t\trows.splice(toIndex+1, 0, from);\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\trows.splice(toIndex, 0, from);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}else{\r\n\t\t\t\t\trows.splice(fromIndex, 0, from);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t//restyle rows\r\n\t\t\tif(rows === this.getDisplayRows()){\r\n\r\n\t\t\t\tstart = fromIndex < toIndex ? fromIndex : toIndex;\r\n\t\t\t\tend = toIndex > fromIndex ? toIndex : fromIndex +1;\r\n\r\n\t\t\t\tfor(let i = start; i <= end; i++){\r\n\t\t\t\t\tif(rows[i]){\r\n\t\t\t\t\t\tthis.styleRow(rows[i], i);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tclearData(){\r\n\t\tthis.setData([]);\r\n\t}\r\n\r\n\tgetRowIndex(row){\r\n\t\treturn this.findRowIndex(row, this.rows);\r\n\t}\r\n\r\n\tgetDisplayRowIndex(row){\r\n\t\tvar index = this.getDisplayRows().indexOf(row);\r\n\t\treturn index > -1 ? index : false;\r\n\t}\r\n\r\n\tnextDisplayRow(row, rowOnly){\r\n\t\tvar index = this.getDisplayRowIndex(row),\r\n\t\tnextRow = false;\r\n\r\n\r\n\t\tif(index !== false && index < this.displayRowsCount -1){\r\n\t\t\tnextRow = this.getDisplayRows()[index+1];\r\n\t\t}\r\n\r\n\t\tif(nextRow && (!(nextRow instanceof Row) || nextRow.type != \"row\")){\r\n\t\t\treturn this.nextDisplayRow(nextRow, rowOnly);\r\n\t\t}\r\n\r\n\t\treturn nextRow;\r\n\t}\r\n\r\n\tprevDisplayRow(row, rowOnly){\r\n\t\tvar index = this.getDisplayRowIndex(row),\r\n\t\tprevRow = false;\r\n\r\n\t\tif(index){\r\n\t\t\tprevRow = this.getDisplayRows()[index-1];\r\n\t\t}\r\n\r\n\t\tif(rowOnly && prevRow && (!(prevRow instanceof Row) || prevRow.type != \"row\")){\r\n\t\t\treturn this.prevDisplayRow(prevRow, rowOnly);\r\n\t\t}\r\n\r\n\t\treturn prevRow;\r\n\t}\r\n\r\n\tfindRowIndex(row, list){\r\n\t\tvar rowIndex;\r\n\r\n\t\trow = this.findRow(row);\r\n\r\n\t\tif(row){\r\n\t\t\trowIndex = list.indexOf(row);\r\n\r\n\t\t\tif(rowIndex > -1){\r\n\t\t\t\treturn rowIndex;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t}\r\n\r\n\tgetData(active, transform){\r\n\t\tvar output = [],\r\n\t\trows = this.getRows(active);\r\n\r\n\t\trows.forEach(function(row){\r\n\t\t\tif(row.type == \"row\"){\r\n\t\t\t\toutput.push(row.getData(transform || \"data\"));\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tgetComponents(active){\r\n\t\tvar\toutput = [],\r\n\t\trows = this.getRows(active);\r\n\r\n\t\trows.forEach(function(row){\r\n\t\t\toutput.push(row.getComponent());\r\n\t\t});\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tgetDataCount(active){\r\n\t\tvar rows = this.getRows(active);\r\n\r\n\t\treturn rows.length;\r\n\t}\r\n\r\n\t_genRemoteRequest(){\r\n\t\tvar table = this.table,\r\n\t\toptions = table.options,\r\n\t\tparams = {};\r\n\r\n\t\tif(table.modExists(\"page\")){\r\n\t\t\t//set sort data if defined\r\n\t\t\tif(options.ajaxSorting){\r\n\t\t\t\tlet sorters = this.table.modules.sort.getSort();\r\n\r\n\t\t\t\tsorters.forEach(function(item){\r\n\t\t\t\t\tdelete item.column;\r\n\t\t\t\t});\r\n\r\n\t\t\t\tparams[this.table.modules.page.paginationDataSentNames.sorters] = sorters;\r\n\t\t\t}\r\n\r\n\t\t\t//set filter data if defined\r\n\t\t\tif(options.ajaxFiltering){\r\n\t\t\t\tlet filters = this.table.modules.filter.getFilters(true, true);\r\n\r\n\t\t\t\tparams[this.table.modules.page.paginationDataSentNames.filters] = filters;\r\n\t\t\t}\r\n\r\n\r\n\t\t\tthis.table.modules.ajax.setParams(params, true);\r\n\t\t}\r\n\r\n\t\ttable.modules.ajax.sendRequest()\r\n\t\t.then((data)=>{\r\n\t\t\tthis._setDataActual(data, true);\r\n\t\t})\r\n\t\t.catch((e)=>{});\r\n\t}\r\n\r\n\t//choose the path to refresh data after a filter update\r\n\tfilterRefresh(){\r\n\t\tvar table = this.table,\r\n\t\toptions = table.options,\r\n\t\tleft = this.scrollLeft;\r\n\r\n\t\tif(options.ajaxFiltering){\r\n\t\t\tif(options.pagination == \"remote\" && table.modExists(\"page\")){\r\n\t\t\t\ttable.modules.page.reset(true);\r\n\t\t\t\ttable.modules.page.setPage(1).then(()=>{}).catch(()=>{});\r\n\t\t\t}else if(options.ajaxProgressiveLoad){\r\n\t\t\t\ttable.modules.ajax.loadData().then(()=>{}).catch(()=>{});\r\n\t\t\t}else{\r\n\t\t\t\t//assume data is url, make ajax call to url to get data\r\n\t\t\t\tthis._genRemoteRequest();\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tthis.refreshActiveData(\"filter\");\r\n\t\t}\r\n\r\n\t\tthis.scrollHorizontal(left);\r\n\t}\r\n\r\n\t//choose the path to refresh data after a sorter update\r\n\tsorterRefresh(loadOrignalData){\r\n\t\tvar table = this.table,\r\n\t\toptions = this.table.options,\r\n\t\tleft = this.scrollLeft;\r\n\r\n\t\tif(options.ajaxSorting){\r\n\t\t\tif((options.pagination == \"remote\" || options.progressiveLoad) && table.modExists(\"page\")){\r\n\t\t\t\ttable.modules.page.reset(true);\r\n\t\t\t\ttable.modules.page.setPage(1).then(()=>{}).catch(()=>{});\r\n\t\t\t}else if(options.ajaxProgressiveLoad){\r\n\t\t\t\ttable.modules.ajax.loadData().then(()=>{}).catch(()=>{});\r\n\t\t\t}else{\r\n\t\t\t\t//assume data is url, make ajax call to url to get data\r\n\t\t\t\tthis._genRemoteRequest();\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tthis.refreshActiveData(loadOrignalData ? \"filter\" : \"sort\");\r\n\t\t}\r\n\r\n\t\tthis.scrollHorizontal(left);\r\n\t}\r\n\r\n\tscrollHorizontal(left){\r\n\t\tthis.scrollLeft = left;\r\n\t\tthis.element.scrollLeft = left;\r\n\r\n\t\tif(this.table.options.groupBy){\r\n\t\t\tthis.table.modules.groupRows.scrollHeaders(left);\r\n\t\t}\r\n\r\n\t\tif(this.table.modExists(\"columnCalcs\")){\r\n\t\t\tthis.table.modules.columnCalcs.scrollHorizontal(left);\r\n\t\t}\r\n\t}\r\n\r\n\t//set active data set\r\n\trefreshActiveData(stage, skipStage, renderInPosition){\r\n\t\tvar table = this.table,\r\n\t\tcascadeOrder = [\"all\", \"filter\", \"sort\", \"display\", \"freeze\", \"group\", \"tree\", \"page\"],\r\n\t\tdisplayIndex;\r\n\r\n\t\tif(this.redrawBlock){\r\n\r\n\t\t\tif(!this.redrawBlockRestoreConfig || (cascadeOrder.indexOf(stage) < cascadeOrder.indexOf(this.redrawBlockRestoreConfig.stage))){\r\n\t\t\t\tthis.redrawBlockRestoreConfig = {\r\n\t\t\t\t\tstage: stage,\r\n\t\t\t\t\tskipStage: skipStage,\r\n\t\t\t\t\trenderInPosition: renderInPosition,\r\n\t\t\t\t};\r\n\t\t\t}\r\n\r\n\t\t\treturn;\r\n\t\t}else{\r\n\r\n\t\t\tif(this.table.modExists(\"edit\")){\r\n\t\t\t\tthis.table.modules.edit.cancelEdit();\r\n\t\t\t}\r\n\r\n\t\t\tif(!stage){\r\n\t\t\t\tstage = \"all\";\r\n\t\t\t}\r\n\r\n\t\t\tif(table.options.selectable && !table.options.selectablePersistence && table.modExists(\"selectRow\")){\r\n\t\t\t\ttable.modules.selectRow.deselectRows();\r\n\t\t\t}\r\n\r\n\t\t\t//cascade through data refresh stages\r\n\t\t\tswitch(stage){\r\n\t\t\t\tcase \"all\":\r\n\r\n\t\t\t\tcase \"filter\":\r\n\t\t\t\tif(!skipStage){\r\n\t\t\t\t\tif(table.modExists(\"filter\")){\r\n\t\t\t\t\t\tthis.setActiveRows(table.modules.filter.filter(this.rows));\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tthis.setActiveRows(this.rows.slice(0));\r\n\t\t\t\t\t}\r\n\t\t\t\t}else{\r\n\t\t\t\t\tskipStage = false;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tcase \"sort\":\r\n\t\t\t\tif(!skipStage){\r\n\t\t\t\t\tif(table.modExists(\"sort\")){\r\n\t\t\t\t\t\ttable.modules.sort.sort(this.activeRows);\r\n\t\t\t\t\t}\r\n\t\t\t\t}else{\r\n\t\t\t\t\tskipStage = false;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//regenerate row numbers for row number formatter if in use\r\n\t\t\t\tthis.regenerateRowNumbers();\r\n\r\n\t\t\t\t//generic stage to allow for pipeline trigger after the data manipulation stage\r\n\t\t\t\tcase \"display\":\r\n\t\t\t\tthis.resetDisplayRows();\r\n\r\n\t\t\t\tcase \"freeze\":\r\n\t\t\t\tif(!skipStage){\r\n\t\t\t\t\tif(this.table.modExists(\"frozenRows\")){\r\n\t\t\t\t\t\tif(table.modules.frozenRows.isFrozen()){\r\n\t\t\t\t\t\t\tif(!table.modules.frozenRows.getDisplayIndex()){\r\n\t\t\t\t\t\t\t\ttable.modules.frozenRows.setDisplayIndex(this.getNextDisplayIndex());\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\tdisplayIndex = table.modules.frozenRows.getDisplayIndex();\r\n\r\n\t\t\t\t\t\t\tdisplayIndex = this.setDisplayRows(table.modules.frozenRows.getRows(this.getDisplayRows(displayIndex - 1)), displayIndex);\r\n\r\n\t\t\t\t\t\t\tif(displayIndex !== true){\r\n\t\t\t\t\t\t\t\ttable.modules.frozenRows.setDisplayIndex(displayIndex);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}else{\r\n\t\t\t\t\tskipStage = false;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tcase \"group\":\r\n\t\t\t\tif(!skipStage){\r\n\t\t\t\t\tif(table.options.groupBy && table.modExists(\"groupRows\")){\r\n\r\n\t\t\t\t\t\tif(!table.modules.groupRows.getDisplayIndex()){\r\n\t\t\t\t\t\t\ttable.modules.groupRows.setDisplayIndex(this.getNextDisplayIndex());\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tdisplayIndex = table.modules.groupRows.getDisplayIndex();\r\n\r\n\t\t\t\t\t\tdisplayIndex = this.setDisplayRows(table.modules.groupRows.getRows(this.getDisplayRows(displayIndex - 1)), displayIndex);\r\n\r\n\t\t\t\t\t\tif(displayIndex !== true){\r\n\t\t\t\t\t\t\ttable.modules.groupRows.setDisplayIndex(displayIndex);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}else{\r\n\t\t\t\t\tskipStage = false;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tcase \"tree\":\r\n\r\n\t\t\t\tif(!skipStage){\r\n\t\t\t\t\tif(table.options.dataTree && table.modExists(\"dataTree\")){\r\n\t\t\t\t\t\tif(!table.modules.dataTree.getDisplayIndex()){\r\n\t\t\t\t\t\t\ttable.modules.dataTree.setDisplayIndex(this.getNextDisplayIndex());\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tdisplayIndex = table.modules.dataTree.getDisplayIndex();\r\n\r\n\t\t\t\t\t\tdisplayIndex = this.setDisplayRows(table.modules.dataTree.getRows(this.getDisplayRows(displayIndex - 1)), displayIndex);\r\n\r\n\t\t\t\t\t\tif(displayIndex !== true){\r\n\t\t\t\t\t\t\ttable.modules.dataTree.setDisplayIndex(displayIndex);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}else{\r\n\t\t\t\t\tskipStage = false;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(table.options.pagination && table.modExists(\"page\") && !renderInPosition){\r\n\t\t\t\t\tif(table.modules.page.getMode() == \"local\"){\r\n\t\t\t\t\t\ttable.modules.page.reset();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tcase \"page\":\r\n\t\t\t\tif(!skipStage){\r\n\t\t\t\t\tif(table.options.pagination && table.modExists(\"page\")){\r\n\r\n\t\t\t\t\t\tif(!table.modules.page.getDisplayIndex()){\r\n\t\t\t\t\t\t\ttable.modules.page.setDisplayIndex(this.getNextDisplayIndex());\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tdisplayIndex = table.modules.page.getDisplayIndex();\r\n\r\n\t\t\t\t\t\tif(table.modules.page.getMode() == \"local\"){\r\n\t\t\t\t\t\t\ttable.modules.page.setMaxRows(this.getDisplayRows(displayIndex - 1).length);\r\n\t\t\t\t\t\t}\r\n\r\n\r\n\t\t\t\t\t\tdisplayIndex = this.setDisplayRows(table.modules.page.getRows(this.getDisplayRows(displayIndex - 1)), displayIndex);\r\n\r\n\t\t\t\t\t\tif(displayIndex !== true){\r\n\t\t\t\t\t\t\ttable.modules.page.setDisplayIndex(displayIndex);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}else{\r\n\t\t\t\t\tskipStage = false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\r\n\t\t\tif(Helpers.elVisible(this.element)){\r\n\t\t\t\tif(renderInPosition){\r\n\t\t\t\t\tthis.reRenderInPosition();\r\n\t\t\t\t}else{\r\n\r\n\t\t\t\t\tif(stage === \"all\" && this.table.options.virtualDomHoz){\r\n\t\t\t\t\t\tthis.table.vdomHoz.dataChange();\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tthis.renderTable();\r\n\r\n\t\t\t\t\tif(table.options.layoutColumnsOnNewData){\r\n\t\t\t\t\t\tthis.table.columnManager.redraw(true);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif(table.modExists(\"columnCalcs\")){\r\n\t\t\t\ttable.modules.columnCalcs.recalc(this.activeRows);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//regenerate row numbers for row number formatter if in use\r\n\tregenerateRowNumbers(){\r\n\t\tif(this.rowNumColumn){\r\n\t\t\tthis.activeRows.forEach((row) => {\r\n\t\t\t\tvar cell = row.getCell(this.rowNumColumn);\r\n\r\n\t\t\t\tif(cell){\r\n\t\t\t\t\tcell._generateContents();\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tsetActiveRows(activeRows){\r\n\t\tthis.activeRows = activeRows;\r\n\t\tthis.activeRowsCount = this.activeRows.length;\r\n\t}\r\n\r\n\t//reset display rows array\r\n\tresetDisplayRows(){\r\n\t\tthis.displayRows = [];\r\n\r\n\t\tthis.displayRows.push(this.activeRows.slice(0));\r\n\r\n\t\tthis.displayRowsCount = this.displayRows[0].length;\r\n\r\n\t\tif(this.table.modExists(\"frozenRows\")){\r\n\t\t\tthis.table.modules.frozenRows.setDisplayIndex(0);\r\n\t\t}\r\n\r\n\t\tif(this.table.options.groupBy && this.table.modExists(\"groupRows\")){\r\n\t\t\tthis.table.modules.groupRows.setDisplayIndex(0);\r\n\t\t}\r\n\r\n\t\tif(this.table.options.pagination && this.table.modExists(\"page\")){\r\n\t\t\tthis.table.modules.page.setDisplayIndex(0);\r\n\t\t}\r\n\t}\r\n\r\n\tgetNextDisplayIndex(){\r\n\t\treturn this.displayRows.length;\r\n\t}\r\n\r\n\t//set display row pipeline data\r\n\tsetDisplayRows(displayRows, index){\r\n\r\n\t\tvar output = true;\r\n\r\n\t\tif(index && typeof this.displayRows[index] != \"undefined\"){\r\n\t\t\tthis.displayRows[index] = displayRows;\r\n\t\t\toutput = true;\r\n\t\t}else{\r\n\t\t\tthis.displayRows.push(displayRows)\r\n\t\t\toutput = index = this.displayRows.length -1;\r\n\t\t}\r\n\r\n\t\tif(index == this.displayRows.length -1){\r\n\t\t\tthis.displayRowsCount = this.displayRows[this.displayRows.length -1].length;\r\n\t\t}\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tgetDisplayRows(index){\r\n\t\tif(typeof index == \"undefined\"){\r\n\t\t\treturn this.displayRows.length ? this.displayRows[this.displayRows.length -1] : [];\r\n\t\t}else{\r\n\t\t\treturn this.displayRows[index] || [];\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tgetVisibleRows(viewable){\r\n\t\tvar topEdge = this.element.scrollTop,\r\n\t\tbottomEdge = this.element.clientHeight + topEdge,\r\n\t\ttopFound = false,\r\n\t\ttopRow = 0,\r\n\t\tbottomRow = 0,\r\n\t\trows = this.getDisplayRows();\r\n\r\n\t\tif(viewable){\r\n\r\n\t\t\tthis.getDisplayRows();\r\n\t\t\tfor(var i = this.vDomTop; i <= this.vDomBottom; i++){\r\n\t\t\t\tif(rows[i]){\r\n\t\t\t\t\tif(!topFound){\r\n\t\t\t\t\t\tif((topEdge - rows[i].getElement().offsetTop) >= 0){\r\n\t\t\t\t\t\t\ttopRow = i;\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\ttopFound = true;\r\n\r\n\t\t\t\t\t\t\tif(bottomEdge - rows[i].getElement().offsetTop >= 0){\r\n\t\t\t\t\t\t\t\tbottomRow = i;\r\n\t\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tif(bottomEdge - rows[i].getElement().offsetTop >= 0){\r\n\t\t\t\t\t\t\tbottomRow = i;\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\ttopRow = this.vDomTop;\r\n\t\t\tbottomRow = this.vDomBottom;\r\n\t\t}\r\n\r\n\t\treturn rows.slice(topRow, bottomRow + 1);\r\n\t}\r\n\r\n\t//repeat action accross display rows\r\n\tdisplayRowIterator(callback){\r\n\t\tthis.displayRows.forEach(callback);\r\n\r\n\t\tthis.displayRowsCount = this.displayRows[this.displayRows.length -1].length;\r\n\t}\r\n\r\n\t//return only actual rows (not group headers etc)\r\n\tgetRows(active){\r\n\t\tvar rows;\r\n\r\n\t\tswitch(active){\r\n\t\t\tcase \"active\":\r\n\t\t\trows = this.activeRows;\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"display\":\r\n\t\t\trows = this.table.rowManager.getDisplayRows();\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"visible\":\r\n\t\t\trows = this.getVisibleRows(true);\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"selected\":\r\n\t\t\trows = this.table.modules.selectRow.selectedRows;\r\n\t\t\tbreak;\r\n\r\n\t\t\tdefault:\r\n\t\t\trows = this.rows;\r\n\t\t}\r\n\r\n\t\treturn rows;\r\n\t}\r\n\r\n\t///////////////// Table Rendering /////////////////\r\n\t//trigger rerender of table in current position\r\n\treRenderInPosition(callback){\r\n\t\tif(this.getRenderMode() == \"virtual\"){\r\n\r\n\t\t\tif(this.redrawBlock){\r\n\t\t\t\tif(callback){\r\n\t\t\t\t\tcallback();\r\n\t\t\t\t}else{\r\n\t\t\t\t\tthis.redrawBlockRederInPosition = true;\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tvar scrollTop = this.element.scrollTop;\r\n\t\t\t\tvar topRow = false;\r\n\t\t\t\tvar topOffset = false;\r\n\r\n\t\t\t\tvar left = this.scrollLeft;\r\n\r\n\t\t\t\tvar rows = this.getDisplayRows();\r\n\r\n\t\t\t\tfor(var i = this.vDomTop; i <= this.vDomBottom; i++){\r\n\r\n\t\t\t\t\tif(rows[i]){\r\n\t\t\t\t\t\tvar diff = scrollTop - rows[i].getElement().offsetTop;\r\n\r\n\t\t\t\t\t\tif(topOffset === false || Math.abs(diff) < topOffset){\r\n\t\t\t\t\t\t\ttopOffset = diff;\r\n\t\t\t\t\t\t\ttopRow = i;\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(callback){\r\n\t\t\t\t\tcallback();\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis._virtualRenderFill((topRow === false ? this.displayRowsCount - 1 : topRow), true, topOffset || 0);\r\n\r\n\t\t\t\tthis.scrollHorizontal(left);\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tthis.renderTable();\r\n\r\n\t\t\tif(callback){\r\n\t\t\t\tcallback();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tsetRenderMode(){\r\n\r\n\t\tif(this.table.options.virtualDom){\r\n\r\n\t\t\tthis.renderMode = \"virtual\";\r\n\r\n\t\t\tif((this.table.element.clientHeight || this.table.options.height)){\r\n\t\t\t\tthis.fixedHeight = true;\r\n\t\t\t}else{\r\n\t\t\t\tthis.fixedHeight = false;\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tthis.renderMode = \"classic\";\r\n\t\t}\r\n\t}\r\n\r\n\tgetRenderMode(){\r\n\t\treturn this.renderMode;\r\n\t}\r\n\r\n\trenderTable(){\r\n\r\n\t\tthis.table.options.renderStarted.call(this.table);\r\n\r\n\t\tthis.element.scrollTop = 0;\r\n\r\n\t\tswitch(this.renderMode){\r\n\t\t\tcase \"classic\":\r\n\t\t\tthis._simpleRender();\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"virtual\":\r\n\t\t\tthis._virtualRenderFill();\r\n\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\tif(this.firstRender){\r\n\t\t\tif(this.displayRowsCount){\r\n\t\t\t\tthis.firstRender = false;\r\n\t\t\t\tthis.table.modules.layout.layout();\r\n\t\t\t}else{\r\n\t\t\t\tthis.renderEmptyScroll();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(this.table.modExists(\"frozenColumns\")){\r\n\t\t\tthis.table.modules.frozenColumns.layout();\r\n\t\t}\r\n\r\n\t\tif(!this.displayRowsCount){\r\n\t\t\tif(this.table.options.placeholder){\r\n\r\n\t\t\t\tthis.table.options.placeholder.setAttribute(\"tabulator-render-mode\", this.renderMode);\r\n\r\n\t\t\t\tthis.getElement().appendChild(this.table.options.placeholder);\r\n\t\t\t\tthis.table.options.placeholder.style.width = this.table.columnManager.getWidth() + \"px\";\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.table.options.renderComplete.call(this.table);\r\n\t}\r\n\r\n\t//simple render on heightless table\r\n\t_simpleRender(){\r\n\t\tthis._clearVirtualDom();\r\n\r\n\t\tif(this.displayRowsCount){\r\n\t\t\tthis.checkClassicModeGroupHeaderWidth();\r\n\t\t}else{\r\n\t\t\tthis.renderEmptyScroll();\r\n\t\t}\r\n\t}\r\n\r\n\tcheckClassicModeGroupHeaderWidth(){\r\n\t\tvar element = this.tableElement,\r\n\t\tonlyGroupHeaders = true;\r\n\r\n\t\tthis.getDisplayRows().forEach((row, index) => {\r\n\t\t\tthis.styleRow(row, index);\r\n\t\t\telement.appendChild(row.getElement());\r\n\t\t\trow.initialize(true);\r\n\r\n\t\t\tif(row.type !== \"group\"){\r\n\t\t\t\tonlyGroupHeaders = false;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tif(onlyGroupHeaders){\r\n\t\t\telement.style.minWidth = this.table.columnManager.getWidth() + \"px\";\r\n\t\t}else{\r\n\t\t\telement.style.minWidth = \"\";\r\n\t\t}\r\n\t}\r\n\r\n\t//show scrollbars on empty table div\r\n\trenderEmptyScroll(){\r\n\t\tif(this.table.options.placeholder){\r\n\t\t\tthis.tableElement.style.display = \"none\";\r\n\t\t}else{\r\n\t\t\tthis.tableElement.style.minWidth = this.table.columnManager.getWidth() + \"px\";\r\n\t\t\t// this.tableElement.style.minHeight = \"1px\";\r\n\t\t\t// this.tableElement.style.visibility = \"hidden\";\r\n\t\t}\r\n\t}\r\n\r\n\t_clearVirtualDom(){\r\n\t\tvar element = this.tableElement;\r\n\r\n\t\tif(this.table.options.placeholder && this.table.options.placeholder.parentNode){\r\n\t\t\tthis.table.options.placeholder.parentNode.removeChild(this.table.options.placeholder);\r\n\t\t}\r\n\r\n\t\t// element.children.detach();\r\n\t\twhile(element.firstChild) element.removeChild(element.firstChild);\r\n\r\n\t\telement.style.paddingTop = \"\";\r\n\t\telement.style.paddingBottom = \"\";\r\n\t\telement.style.minWidth = \"\";\r\n\t\telement.style.minHeight = \"\";\r\n\t\telement.style.display = \"\";\r\n\t\telement.style.visibility = \"\";\r\n\r\n\t\tthis.scrollTop = 0;\r\n\t\tthis.scrollLeft = 0;\r\n\t\tthis.vDomTop = 0;\r\n\t\tthis.vDomBottom = 0;\r\n\t\tthis.vDomTopPad = 0;\r\n\t\tthis.vDomBottomPad = 0;\r\n\t}\r\n\r\n\tstyleRow(row, index){\r\n\t\tvar rowEl = row.getElement();\r\n\r\n\t\tif(index % 2){\r\n\t\t\trowEl.classList.add(\"tabulator-row-even\");\r\n\t\t\trowEl.classList.remove(\"tabulator-row-odd\");\r\n\t\t}else{\r\n\t\t\trowEl.classList.add(\"tabulator-row-odd\");\r\n\t\t\trowEl.classList.remove(\"tabulator-row-even\");\r\n\t\t}\r\n\t}\r\n\r\n\t//full virtual render\r\n\t_virtualRenderFill(position, forceMove, offset){\r\n\t\tvar\telement = this.tableElement,\r\n\t\tholder = this.element,\r\n\t\ttopPad = 0,\r\n\t\trowsHeight = 0,\r\n\t\ttopPadHeight = 0,\r\n\t\ti = 0,\r\n\t\tonlyGroupHeaders = true,\r\n\t\trows = this.getDisplayRows();\r\n\r\n\t\tposition = position || 0;\r\n\r\n\t\toffset = offset || 0;\r\n\r\n\t\tif(!position){\r\n\t\t\tthis._clearVirtualDom();\r\n\t\t}else{\r\n\t\t\twhile(element.firstChild) element.removeChild(element.firstChild);\r\n\r\n\t\t\t//check if position is too close to bottom of table\r\n\t\t\tlet heightOccupied = (this.displayRowsCount - position + 1) * this.vDomRowHeight;\r\n\r\n\t\t\tif(heightOccupied < this.height){\r\n\t\t\t\tposition -= Math.ceil((this.height - heightOccupied ) / this.vDomRowHeight);\r\n\r\n\t\t\t\tif(position < 0){\r\n\t\t\t\t\tposition = 0;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t//calculate initial pad\r\n\t\t\ttopPad = Math.min(Math.max(Math.floor(this.vDomWindowBuffer / this.vDomRowHeight), this.vDomWindowMinMarginRows), position);\r\n\t\t\tposition -= topPad;\r\n\t\t}\r\n\r\n\t\tif(this.displayRowsCount && Helpers.elVisible(this.element)){\r\n\t\t\tthis.vDomTop = position;\r\n\r\n\t\t\tthis.vDomBottom = position -1;\r\n\r\n\t\t\twhile ((rowsHeight <= this.height + this.vDomWindowBuffer || i < this.vDomWindowMinTotalRows) && this.vDomBottom < this.displayRowsCount -1){\r\n\t\t\t\tvar index = this.vDomBottom + 1,\r\n\t\t\t\trow = rows[index],\r\n\t\t\t\trowHeight = 0;\r\n\r\n\t\t\t\tthis.styleRow(row, index);\r\n\r\n\t\t\t\telement.appendChild(row.getElement());\r\n\r\n\t\t\t\trow.initialize();\r\n\r\n\t\t\t\tif(!row.heightInitialized){\r\n\t\t\t\t\trow.normalizeHeight(true);\r\n\t\t\t\t}\r\n\r\n\t\t\t\trowHeight = row.getHeight();\r\n\r\n\t\t\t\tif(i < topPad){\r\n\t\t\t\t\ttopPadHeight += rowHeight;\r\n\t\t\t\t}else{\r\n\t\t\t\t\trowsHeight += rowHeight;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(rowHeight > this.vDomWindowBuffer){\r\n\t\t\t\t\tthis.vDomWindowBuffer = rowHeight * 2;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(row.type !== \"group\"){\r\n\t\t\t\t\tonlyGroupHeaders = false;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.vDomBottom ++;\r\n\t\t\t\ti++;\r\n\t\t\t}\r\n\r\n\t\t\tif(!position){\r\n\t\t\t\tthis.vDomTopPad = 0;\r\n\t\t\t\t//adjust rowheight to match average of rendered elements\r\n\t\t\t\tthis.vDomRowHeight = Math.floor((rowsHeight + topPadHeight) / i);\r\n\t\t\t\tthis.vDomBottomPad = this.vDomRowHeight * (this.displayRowsCount - this.vDomBottom -1);\r\n\r\n\t\t\t\tthis.vDomScrollHeight = topPadHeight + rowsHeight + this.vDomBottomPad - this.height;\r\n\t\t\t}else{\r\n\t\t\t\tthis.vDomTopPad = !forceMove ? this.scrollTop - topPadHeight : (this.vDomRowHeight * this.vDomTop) + offset;\r\n\t\t\t\tthis.vDomBottomPad = this.vDomBottom == this.displayRowsCount-1 ? 0 : Math.max(this.vDomScrollHeight - this.vDomTopPad - rowsHeight - topPadHeight, 0);\r\n\t\t\t}\r\n\r\n\t\t\telement.style.paddingTop = this.vDomTopPad + \"px\";\r\n\t\t\telement.style.paddingBottom = this.vDomBottomPad + \"px\";\r\n\r\n\t\t\tif(forceMove){\r\n\t\t\t\tthis.scrollTop = this.vDomTopPad + (topPadHeight) + offset - (this.element.scrollWidth > this.element.clientWidth ? this.element.offsetHeight - this.element.clientHeight : 0);\r\n\t\t\t}\r\n\r\n\t\t\tthis.scrollTop = Math.min(this.scrollTop, this.element.scrollHeight - this.height);\r\n\r\n\t\t\t//adjust for horizontal scrollbar if present (and not at top of table)\r\n\t\t\tif(this.element.scrollWidth > this.element.offsetWidth && forceMove){\r\n\t\t\t\tthis.scrollTop += this.element.offsetHeight - this.element.clientHeight;\r\n\t\t\t}\r\n\r\n\t\t\tthis.vDomScrollPosTop = this.scrollTop;\r\n\t\t\tthis.vDomScrollPosBottom = this.scrollTop;\r\n\r\n\t\t\tholder.scrollTop = this.scrollTop;\r\n\r\n\t\t\telement.style.minWidth = onlyGroupHeaders ? this.table.columnManager.getWidth() + \"px\" : \"\";\r\n\r\n\t\t\tif(this.table.options.groupBy){\r\n\t\t\t\tif(this.table.modules.layout.getMode() != \"fitDataFill\" && this.displayRowsCount == this.table.modules.groupRows.countGroups()){\r\n\t\t\t\t\tthis.tableElement.style.minWidth = this.table.columnManager.getWidth();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tthis.renderEmptyScroll();\r\n\t\t}\r\n\r\n\t\tif(!this.fixedHeight){\r\n\t\t\tthis.adjustTableSize();\r\n\t\t}\r\n\t}\r\n\r\n\t//handle vertical scrolling\r\n\tscrollVertical(dir){\r\n\t\tvar topDiff = this.scrollTop - this.vDomScrollPosTop;\r\n\t\tvar bottomDiff = this.scrollTop - this.vDomScrollPosBottom;\r\n\t\tvar margin = this.vDomWindowBuffer * 2;\r\n\r\n\t\tif(-topDiff > margin || bottomDiff > margin){\r\n\t\t\t//if big scroll redraw table;\r\n\t\t\tvar left = this.scrollLeft;\r\n\t\t\tthis._virtualRenderFill(Math.floor((this.element.scrollTop / this.element.scrollHeight) * this.displayRowsCount));\r\n\t\t\tthis.scrollHorizontal(left);\r\n\t\t}else{\r\n\r\n\t\t\tif(dir){\r\n\t\t\t\t//scrolling up\r\n\t\t\t\tif(topDiff < 0){\r\n\r\n\t\t\t\t\tthis._addTopRow(-topDiff);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(bottomDiff < 0){\r\n\r\n\t\t\t\t\t//hide bottom row if needed\r\n\t\t\t\t\tif(this.vDomScrollHeight - this.scrollTop > this.vDomWindowBuffer){\r\n\t\t\t\t\t\tthis._removeBottomRow(-bottomDiff);\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tthis.vDomScrollPosBottom = this.scrollTop;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\t//scrolling down\r\n\t\t\t\tif(topDiff >= 0){\r\n\r\n\t\t\t\t\t//hide top row if needed\r\n\t\t\t\t\tif(this.scrollTop > this.vDomWindowBuffer){\r\n\r\n\t\t\t\t\t\tthis._removeTopRow(topDiff);\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tthis.vDomScrollPosTop = this.scrollTop;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(bottomDiff >= 0){\r\n\r\n\t\t\t\t\tthis._addBottomRow(bottomDiff);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t_addTopRow(topDiff, i=0){\r\n\t\tvar table = this.tableElement,\r\n\t\trows = this.getDisplayRows();\r\n\r\n\t\tif(this.vDomTop){\r\n\t\t\tlet index = this.vDomTop -1,\r\n\t\t\ttopRow = rows[index],\r\n\t\t\ttopRowHeight = topRow.getHeight() || this.vDomRowHeight;\r\n\r\n\t\t\t//hide top row if needed\r\n\t\t\tif(topDiff >= topRowHeight){\r\n\t\t\t\tthis.styleRow(topRow, index);\r\n\t\t\t\ttable.insertBefore(topRow.getElement(), table.firstChild);\r\n\t\t\t\tif(!topRow.initialized || !topRow.heightInitialized){\r\n\t\t\t\t\tthis.vDomTopNewRows.push(topRow);\r\n\r\n\t\t\t\t\tif(!topRow.heightInitialized){\r\n\t\t\t\t\t\ttopRow.clearCellHeight();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\ttopRow.initialize();\r\n\r\n\t\t\t\tthis.vDomTopPad -= topRowHeight;\r\n\r\n\t\t\t\tif(this.vDomTopPad < 0){\r\n\t\t\t\t\tthis.vDomTopPad = index * this.vDomRowHeight;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(!index){\r\n\t\t\t\t\tthis.vDomTopPad = 0;\r\n\t\t\t\t}\r\n\r\n\t\t\t\ttable.style.paddingTop = this.vDomTopPad + \"px\";\r\n\t\t\t\tthis.vDomScrollPosTop -= topRowHeight;\r\n\t\t\t\tthis.vDomTop--;\r\n\t\t\t}\r\n\r\n\t\t\ttopDiff = -(this.scrollTop - this.vDomScrollPosTop);\r\n\r\n\t\t\tif(topRow.getHeight() > this.vDomWindowBuffer){\r\n\t\t\t\tthis.vDomWindowBuffer = topRow.getHeight() * 2;\r\n\t\t\t}\r\n\r\n\t\t\tif(i < this.vDomMaxRenderChain && this.vDomTop && topDiff >= (rows[this.vDomTop -1].getHeight() || this.vDomRowHeight)){\r\n\t\t\t\tthis._addTopRow(topDiff, i+1);\r\n\t\t\t}else{\r\n\t\t\t\tthis._quickNormalizeRowHeight(this.vDomTopNewRows);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t_removeTopRow(topDiff){\r\n\t\tvar table = this.tableElement,\r\n\t\ttopRow = this.getDisplayRows()[this.vDomTop],\r\n\t\ttopRowHeight = topRow.getHeight() || this.vDomRowHeight;\r\n\r\n\t\tif(topDiff >= topRowHeight){\r\n\r\n\t\t\tvar rowEl = topRow.getElement();\r\n\t\t\trowEl.parentNode.removeChild(rowEl);\r\n\r\n\t\t\tthis.vDomTopPad += topRowHeight;\r\n\t\t\ttable.style.paddingTop = this.vDomTopPad + \"px\";\r\n\t\t\tthis.vDomScrollPosTop += this.vDomTop ? topRowHeight : topRowHeight + this.vDomWindowBuffer;\r\n\t\t\tthis.vDomTop++;\r\n\r\n\t\t\ttopDiff = this.scrollTop - this.vDomScrollPosTop;\r\n\r\n\t\t\tthis._removeTopRow(topDiff);\r\n\t\t}\r\n\t}\r\n\r\n\t_addBottomRow(bottomDiff, i=0){\r\n\t\tvar table = this.tableElement,\r\n\t\trows = this.getDisplayRows();\r\n\r\n\t\tif(this.vDomBottom < this.displayRowsCount -1){\r\n\t\t\tlet index = this.vDomBottom + 1,\r\n\t\t\tbottomRow = rows[index],\r\n\t\t\tbottomRowHeight = bottomRow.getHeight() || this.vDomRowHeight;\r\n\r\n\t\t\t//hide bottom row if needed\r\n\t\t\tif(bottomDiff >= bottomRowHeight){\r\n\t\t\t\tthis.styleRow(bottomRow, index);\r\n\t\t\t\ttable.appendChild(bottomRow.getElement());\r\n\r\n\t\t\t\tif(!bottomRow.initialized || !bottomRow.heightInitialized){\r\n\t\t\t\t\tthis.vDomBottomNewRows.push(bottomRow);\r\n\r\n\t\t\t\t\tif(!bottomRow.heightInitialized){\r\n\t\t\t\t\t\tbottomRow.clearCellHeight();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tbottomRow.initialize();\r\n\r\n\t\t\t\tthis.vDomBottomPad -= bottomRowHeight;\r\n\r\n\t\t\t\tif(this.vDomBottomPad < 0 || index == this.displayRowsCount -1){\r\n\t\t\t\t\tthis.vDomBottomPad = 0;\r\n\t\t\t\t}\r\n\r\n\t\t\t\ttable.style.paddingBottom = this.vDomBottomPad + \"px\";\r\n\t\t\t\tthis.vDomScrollPosBottom += bottomRowHeight;\r\n\t\t\t\tthis.vDomBottom++;\r\n\t\t\t}\r\n\r\n\t\t\tbottomDiff = this.scrollTop - this.vDomScrollPosBottom;\r\n\r\n\t\t\tif(bottomRow.getHeight() > this.vDomWindowBuffer){\r\n\t\t\t\tthis.vDomWindowBuffer = bottomRow.getHeight() * 2;\r\n\t\t\t}\r\n\r\n\t\t\tif(i < this.vDomMaxRenderChain && this.vDomBottom < this.displayRowsCount -1 && bottomDiff >= (rows[this.vDomBottom + 1].getHeight() || this.vDomRowHeight)){\r\n\t\t\t\tthis._addBottomRow(bottomDiff, i+1);\r\n\t\t\t}else{\r\n\t\t\t\tthis._quickNormalizeRowHeight(this.vDomBottomNewRows);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t_removeBottomRow(bottomDiff){\r\n\t\tvar table = this.tableElement,\r\n\t\tbottomRow = this.getDisplayRows()[this.vDomBottom],\r\n\t\tbottomRowHeight = bottomRow.getHeight() || this.vDomRowHeight;\r\n\r\n\t\tif(bottomDiff >= bottomRowHeight){\r\n\r\n\t\t\tvar rowEl = bottomRow.getElement();\r\n\r\n\t\t\tif(rowEl.parentNode){\r\n\t\t\t\trowEl.parentNode.removeChild(rowEl);\r\n\t\t\t}\r\n\r\n\t\t\tthis.vDomBottomPad += bottomRowHeight;\r\n\r\n\t\t\tif(this.vDomBottomPad < 0){\r\n\t\t\t\tthis.vDomBottomPad = 0;\r\n\t\t\t}\r\n\r\n\t\t\ttable.style.paddingBottom = this.vDomBottomPad + \"px\";\r\n\t\t\tthis.vDomScrollPosBottom -= bottomRowHeight;\r\n\t\t\tthis.vDomBottom--;\r\n\r\n\t\t\tbottomDiff = -(this.scrollTop - this.vDomScrollPosBottom);\r\n\r\n\t\t\tthis._removeBottomRow(bottomDiff);\r\n\t\t}\r\n\t}\r\n\r\n\t_quickNormalizeRowHeight(rows){\r\n\t\trows.forEach(function(row){\r\n\t\t\trow.calcHeight();\r\n\t\t});\r\n\r\n\t\trows.forEach(function(row){\r\n\t\t\trow.setCellHeight();\r\n\t\t});\r\n\r\n\t\trows.length = 0;\r\n\t}\r\n\r\n\t//normalize height of active rows\r\n\tnormalizeHeight(){\r\n\t\tthis.activeRows.forEach(function(row){\r\n\t\t\trow.normalizeHeight();\r\n\t\t});\r\n\t}\r\n\r\n\t//adjust the height of the table holder to fit in the Tabulator element\r\n\tadjustTableSize(){\r\n\t\tvar initialHeight = this.element.clientHeight,\r\n\t\tmodExists;\r\n\r\n\t\tif(this.renderMode === \"virtual\"){\r\n\r\n\t\t\tlet otherHeight = Math.floor(this.columnManager.getElement().getBoundingClientRect().height + (this.table.footerManager && this.table.footerManager.active && !this.table.footerManager.external ? this.table.footerManager.getElement().getBoundingClientRect().height : 0));\r\n\r\n\t\t\tif(this.fixedHeight){\r\n\t\t\t\tthis.element.style.minHeight = \"calc(100% - \" + otherHeight + \"px)\";\r\n\t\t\t\tthis.element.style.height = \"calc(100% - \" + otherHeight + \"px)\";\r\n\t\t\t\tthis.element.style.maxHeight = \"calc(100% - \" + otherHeight + \"px)\";\r\n\t\t\t}else{\r\n\t\t\t\tthis.element.style.height = \"\";\r\n\t\t\t\tthis.element.style.height = (this.table.element.clientHeight - otherHeight) + \"px\";\r\n\t\t\t\tthis.element.scrollTop = this.scrollTop;\r\n\t\t\t}\r\n\r\n\t\t\tthis.height = this.element.clientHeight;\r\n\t\t\tthis.vDomWindowBuffer = this.table.options.virtualDomBuffer || this.height;\r\n\r\n\t\t\t//check if the table has changed size when dealing with variable height tables\r\n\t\t\tif(!this.fixedHeight && initialHeight != this.element.clientHeight){\r\n\t\t\t\tmodExists = this.table.modExists(\"resizeTable\");\r\n\r\n\t\t\t\tif((modExists && !this.table.modules.resizeTable.autoResize) || !modExists){\r\n\t\t\t\t\tthis.redraw();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t}\r\n\t}\r\n\r\n\t//renitialize all rows\r\n\treinitialize(){\r\n\t\tthis.rows.forEach(function(row){\r\n\t\t\trow.reinitialize(true);\r\n\t\t});\r\n\t}\r\n\r\n\t//prevent table from being redrawn\r\n\tblockRedraw (){\r\n\t\tthis.redrawBlock = true;\r\n\t\tthis.redrawBlockRestoreConfig = false;\r\n\t}\r\n\r\n\t//restore table redrawing\r\n\trestoreRedraw (){\r\n\t\tthis.redrawBlock = false;\r\n\r\n\t\tif(this.redrawBlockRestoreConfig){\r\n\t\t\tthis.refreshActiveData(this.redrawBlockRestoreConfig.stage, this.redrawBlockRestoreConfig.skipStage, this.redrawBlockRestoreConfig.renderInPosition)\r\n\r\n\t\t\tthis.redrawBlockRestoreConfig = false;\r\n\t\t}else{\r\n\t\t\tif(this.redrawBlockRederInPosition){\r\n\t\t\t\tthis.reRenderInPosition();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.redrawBlockRederInPosition = false;\r\n\t}\r\n\r\n\t//redraw table\r\n\tredraw (force){\r\n\t\tvar pos = 0,\r\n\t\tleft = this.scrollLeft;\r\n\r\n\t\tthis.adjustTableSize();\r\n\r\n\t\tthis.table.tableWidth = this.table.element.clientWidth;\r\n\r\n\t\tif(!force){\r\n\t\t\tif(this.renderMode == \"classic\"){\r\n\r\n\t\t\t\tif(this.table.options.groupBy){\r\n\t\t\t\t\tthis.refreshActiveData(\"group\", false, false);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tthis._simpleRender();\r\n\t\t\t\t}\r\n\r\n\t\t\t}else{\r\n\t\t\t\tthis.reRenderInPosition();\r\n\t\t\t\tthis.scrollHorizontal(left);\r\n\t\t\t}\r\n\r\n\t\t\tif(!this.displayRowsCount){\r\n\t\t\t\tif(this.table.options.placeholder){\r\n\t\t\t\t\tthis.getElement().appendChild(this.table.options.placeholder);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t}else{\r\n\t\t\tthis.renderTable();\r\n\t\t}\r\n\t}\r\n\r\n\tresetScroll(){\r\n\t\tthis.element.scrollLeft = 0;\r\n\t\tthis.element.scrollTop = 0;\r\n\r\n\t\tif(this.table.browser === \"ie\"){\r\n\t\t\tvar event = document.createEvent(\"Event\");\r\n\t\t\tevent.initEvent(\"scroll\", false, true);\r\n\t\t\tthis.element.dispatchEvent(event);\r\n\t\t}else{\r\n\t\t\tthis.element.dispatchEvent(new Event('scroll'));\r\n\t\t}\r\n\t}\r\n}","export default class FooterManager {\r\n\r\n\tconstructor(table){\r\n\t\tthis.table = table;\r\n\t\tthis.active = false;\r\n\t\tthis.element = this.createElement(); //containing element\r\n\t\tthis.external = false;\r\n\t\tthis.links = [];\r\n\r\n\t\tthis._initialize();\r\n\t}\r\n\r\n\tcreateElement (){\r\n\t\tvar el = document.createElement(\"div\");\r\n\r\n\t\tel.classList.add(\"tabulator-footer\");\r\n\r\n\t\treturn el;\r\n\t}\r\n\r\n\t_initialize(element){\r\n\t\tif(this.table.options.footerElement){\r\n\r\n\t\t\tswitch(typeof this.table.options.footerElement){\r\n\t\t\t\tcase \"string\":\r\n\t\t\t\tif(this.table.options.footerElement[0] === \"<\"){\r\n\t\t\t\t\tthis.element.innerHTML = this.table.options.footerElement;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tthis.external = true;\r\n\t\t\t\t\tthis.element = document.querySelector(this.table.options.footerElement);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tdefault:\r\n\t\t\t\tthis.element = this.table.options.footerElement;\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tgetElement(){\r\n\t\treturn this.element;\r\n\t}\r\n\r\n\tappend(element, parent){\r\n\t\tthis.activate(parent);\r\n\r\n\t\tthis.element.appendChild(element);\r\n\t\tthis.table.rowManager.adjustTableSize();\r\n\t}\r\n\r\n\tprepend(element, parent){\r\n\t\tthis.activate(parent);\r\n\r\n\t\tthis.element.insertBefore(element, this.element.firstChild);\r\n\t\tthis.table.rowManager.adjustTableSize();\r\n\t}\r\n\r\n\tremove(element){\r\n\t\telement.parentNode.removeChild(element);\r\n\t\tthis.deactivate();\r\n\t}\r\n\r\n\tdeactivate(force){\r\n\t\tif(!this.element.firstChild || force){\r\n\t\t\tif(!this.external){\r\n\t\t\t\tthis.element.parentNode.removeChild(this.element);\r\n\t\t\t}\r\n\t\t\tthis.active = false;\r\n\t\t}\r\n\t}\r\n\r\n\tactivate(parent){\r\n\t\tif(!this.active){\r\n\t\t\tthis.active = true;\r\n\t\t\tif(!this.external){\r\n\t\t\t\tthis.table.element.appendChild(this.getElement());\r\n\t\t\t\tthis.table.element.style.display = '';\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(parent){\r\n\t\t\tthis.links.push(parent);\r\n\t\t}\r\n\t}\r\n\r\n\tredraw(){\r\n\t\tthis.links.forEach(function(link){\r\n\t\t\tlink.footerRedraw();\r\n\t\t});\r\n\t}\r\n}","import Tabulator from './Tabulator.js';\r\n\r\nclass TableRegistry {\r\n\r\n\tstatic register(table){\r\n\t\tTableRegistry.tables.push(table);\r\n\t}\r\n\r\n\tstatic deregister(table){\r\n\t\tvar index = TableRegistry.tables.indexOf(table);\r\n\r\n\t\tif(index > -1){\r\n\t\t\tTableRegistry.tables.splice(index, 1);\r\n\t\t}\r\n\t}\r\n\r\n\tstatic lookupTable(query, silent){\r\n\t\tvar results = [],\r\n\t\tmatches, match;\r\n\r\n\t\tif(typeof query === \"string\"){\r\n\t\t\tmatches = document.querySelectorAll(query);\r\n\r\n\t\t\tif(matches.length){\r\n\t\t\t\tfor(var i = 0; i < matches.length; i++){\r\n\t\t\t\t\tmatch = TableRegistry.matchElement(matches[i]);\r\n\r\n\t\t\t\t\tif(match){\r\n\t\t\t\t\t\tresults.push(match);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t}else if((typeof HTMLElement !== \"undefined\" && query instanceof HTMLElement) || query instanceof Tabulator){\r\n\t\t\tmatch = TableRegistry.matchElement(query);\r\n\r\n\t\t\tif(match){\r\n\t\t\t\tresults.push(match);\r\n\t\t\t}\r\n\t\t}else if(Array.isArray(query)){\r\n\t\t\tquery.forEach(function(item){\r\n\t\t\t\tresults = results.concat(TableRegistry.lookupTable(item));\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tif(!silent){\r\n\t\t\t\tconsole.warn(\"Table Connection Error - Invalid Selector\", query);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn results;\r\n\t}\r\n\r\n\tstatic matchElement(element){\r\n\t\treturn TableRegistry.tables.find(function(table){\r\n\t\t\treturn element instanceof Tabulator ? table === element : table.element === element;\r\n\t\t});\r\n\t}\r\n}\r\n\r\nTableRegistry.tables = [];\r\n\r\nexport default TableRegistry;","class Module{\r\n\r\n\tconstructor(table, name){\r\n\t\tthis.table = table;\r\n\t}\r\n\r\n\tregister(){\r\n\t}\r\n}\r\n\r\nexport default Module;","//resize columns to fit data they contain\r\nexport default function(columns){\r\n\tif(this.table.options.virtualDomHoz){\r\n\t\tthis.table.vdomHoz.fitDataLayoutOverride();\r\n\t}else{\r\n\t\tcolumns.forEach(function(column){\r\n\t\t\tcolumn.reinitializeWidth();\r\n\t\t});\r\n\t}\r\n\r\n\tif(this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)){\r\n\t\tthis.table.modules.responsiveLayout.update();\r\n\t}\r\n};","//resize columns to fit data they contain and stretch row to fill table, also used for fitDataTable\r\nexport default function(columns){\r\n\tcolumns.forEach(function(column){\r\n\t\tcolumn.reinitializeWidth();\r\n\t});\r\n\r\n\tif(this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)){\r\n\t\tthis.table.modules.responsiveLayout.update();\r\n\t}\r\n};","//resize columns to fit data the contain and stretch last column to fill table\r\nexport default function(columns){\r\n\tvar colsWidth = 0,\r\n\ttableWidth = this.table.rowManager.element.clientWidth,\r\n\tgap = 0,\r\n\tlastCol = false;\r\n\r\n\tcolumns.forEach((column, i) => {\r\n\t\tif(!column.widthFixed){\r\n\t\t\tcolumn.reinitializeWidth();\r\n\t\t}\r\n\r\n\t\tif(this.table.options.responsiveLayout ? column.modules.responsive.visible : column.visible){\r\n\t\t\tlastCol = column;\r\n\t\t}\r\n\r\n\t\tif(column.visible){\r\n\t\t\tcolsWidth += column.getWidth();\r\n\t\t}\r\n\t});\r\n\r\n\tif(lastCol){\r\n\t\tgap = tableWidth - colsWidth + lastCol.getWidth();\r\n\r\n\t\tif(this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)){\r\n\t\t\tlastCol.setWidth(0);\r\n\t\t\tthis.table.modules.responsiveLayout.update();\r\n\t\t}\r\n\r\n\t\tif(gap > 0){\r\n\t\t\tlastCol.setWidth(gap);\r\n\t\t}else{\r\n\t\t\tlastCol.reinitializeWidth();\r\n\t\t}\r\n\t}else{\r\n\t\tif(this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)){\r\n\t\t\tthis.table.modules.responsiveLayout.update();\r\n\t\t}\r\n\t}\r\n};","//resize columns to fit\r\nexport default function(columns){\r\n\tvar totalWidth = this.table.element.clientWidth; //table element width\r\n\tvar fixedWidth = 0; //total width of columns with a defined width\r\n\tvar flexWidth = 0; //total width available to flexible columns\r\n\tvar flexGrowUnits = 0; //total number of widthGrow blocks accross all columns\r\n\tvar flexColWidth = 0; //desired width of flexible columns\r\n\tvar flexColumns = []; //array of flexible width columns\r\n\tvar fixedShrinkColumns = []; //array of fixed width columns that can shrink\r\n\tvar flexShrinkUnits = 0; //total number of widthShrink blocks accross all columns\r\n\tvar overflowWidth = 0; //horizontal overflow width\r\n\tvar gapFill=0; //number of pixels to be added to final column to close and half pixel gaps\r\n\r\n\tfunction calcWidth(width){\r\n\t\tvar colWidth;\r\n\r\n\t\tif(typeof(width) == \"string\"){\r\n\t\t\tif(width.indexOf(\"%\") > -1){\r\n\t\t\t\tcolWidth = (totalWidth / 100) * parseInt(width);\r\n\t\t\t}else{\r\n\t\t\t\tcolWidth = parseInt(width);\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tcolWidth = width;\r\n\t\t}\r\n\r\n\t\treturn colWidth;\r\n\t}\r\n\r\n\t//ensure columns resize to take up the correct amount of space\r\n\tfunction scaleColumns(columns, freeSpace, colWidth, shrinkCols){\r\n\r\n\t\tvar oversizeCols = [],\r\n\t\toversizeSpace = 0,\r\n\t\tremainingSpace = 0,\r\n\t\tnextColWidth = 0,\r\n\t\tremainingFlexGrowUnits = flexGrowUnits,\r\n\t\tgap = 0,\r\n\t\tchangeUnits = 0,\r\n\t\tundersizeCols = [];\r\n\r\n\t\tfunction calcGrow(col){\r\n\t\t\treturn (colWidth * (col.column.definition.widthGrow || 1));\r\n\t\t}\r\n\r\n\t\tfunction calcShrink(col){\r\n\t\t\treturn (calcWidth(col.width) - (colWidth * (col.column.definition.widthShrink || 0)))\r\n\t\t}\r\n\r\n\t\tcolumns.forEach(function(col, i){\r\n\t\t\tvar width = shrinkCols ? calcShrink(col) : calcGrow(col);\r\n\t\t\tif(col.column.minWidth >= width){\r\n\t\t\t\toversizeCols.push(col);\r\n\t\t\t}else{\r\n\t\t\t\tif(col.column.maxWidth && col.column.maxWidth < width){\r\n\t\t\t\t\tcol.width = col.column.maxWidth;\r\n\t\t\t\t\tfreeSpace -= col.column.maxWidth;\r\n\r\n\t\t\t\t\tremainingFlexGrowUnits -= shrinkCols ? (col.column.definition.widthShrink || 1) : (col.column.definition.widthGrow || 1);\r\n\r\n\t\t\t\t\tif(remainingFlexGrowUnits){\r\n\t\t\t\t\t\tcolWidth = Math.floor(freeSpace/remainingFlexGrowUnits);\r\n\t\t\t\t\t}\r\n\t\t\t\t}else{\r\n\t\t\t\t\tundersizeCols.push(col);\r\n\t\t\t\t\tchangeUnits += shrinkCols ? (col.column.definition.widthShrink || 1) : (col.column.definition.widthGrow || 1);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tif(oversizeCols.length){\r\n\t\t\toversizeCols.forEach(function(col){\r\n\t\t\t\toversizeSpace += shrinkCols ? col.width - col.column.minWidth : col.column.minWidth;\r\n\t\t\t\tcol.width = col.column.minWidth;\r\n\t\t\t});\r\n\r\n\t\t\tremainingSpace = freeSpace - oversizeSpace;\r\n\r\n\t\t\tnextColWidth = changeUnits ? Math.floor(remainingSpace/changeUnits) : remainingSpace;\r\n\r\n\t\t\tgap = remainingSpace - (nextColWidth * changeUnits);\r\n\r\n\t\t\tgap += scaleColumns(undersizeCols, remainingSpace, nextColWidth, shrinkCols);\r\n\t\t}else{\r\n\t\t\tgap = changeUnits ? freeSpace - (Math.floor(freeSpace/changeUnits) * changeUnits) : freeSpace;\r\n\r\n\t\t\tundersizeCols.forEach(function(column){\r\n\t\t\t\tcolumn.width = shrinkCols ? calcShrink(column) : calcGrow(column);\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn gap;\r\n\t}\r\n\r\n\tif(this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)){\r\n\t\tthis.table.modules.responsiveLayout.update();\r\n\t}\r\n\r\n\t//adjust for vertical scrollbar if present\r\n\tif(this.table.rowManager.element.scrollHeight > this.table.rowManager.element.clientHeight){\r\n\t\ttotalWidth -= this.table.rowManager.element.offsetWidth - this.table.rowManager.element.clientWidth;\r\n\t}\r\n\r\n\tcolumns.forEach(function(column){\r\n\t\tvar width, minWidth, colWidth;\r\n\r\n\t\tif(column.visible){\r\n\r\n\t\t\twidth = column.definition.width;\r\n\t\t\tminWidth = parseInt(column.minWidth);\r\n\r\n\t\t\tif(width){\r\n\r\n\t\t\t\tcolWidth = calcWidth(width);\r\n\r\n\t\t\t\tfixedWidth += colWidth > minWidth ? colWidth : minWidth;\r\n\r\n\t\t\t\tif(column.definition.widthShrink){\r\n\t\t\t\t\tfixedShrinkColumns.push({\r\n\t\t\t\t\t\tcolumn:column,\r\n\t\t\t\t\t\twidth:colWidth > minWidth ? colWidth : minWidth\r\n\t\t\t\t\t});\r\n\t\t\t\t\tflexShrinkUnits += column.definition.widthShrink;\r\n\t\t\t\t}\r\n\r\n\t\t\t}else{\r\n\t\t\t\tflexColumns.push({\r\n\t\t\t\t\tcolumn:column,\r\n\t\t\t\t\twidth:0,\r\n\t\t\t\t});\r\n\t\t\t\tflexGrowUnits += column.definition.widthGrow || 1;\r\n\t\t\t}\r\n\t\t}\r\n\t});\r\n\r\n\t//calculate available space\r\n\tflexWidth = totalWidth - fixedWidth;\r\n\r\n\t//calculate correct column size\r\n\tflexColWidth = Math.floor(flexWidth / flexGrowUnits)\r\n\r\n\t//generate column widths\r\n\tvar gapFill = scaleColumns(flexColumns, flexWidth, flexColWidth, false);\r\n\r\n\t//increase width of last column to account for rounding errors\r\n\tif(flexColumns.length && gapFill > 0){\r\n\t\tflexColumns[flexColumns.length-1].width += + gapFill;\r\n\t}\r\n\r\n\t//caculate space for columns to be shrunk into\r\n\tflexColumns.forEach(function(col){\r\n\t\tflexWidth -= col.width;\r\n\t});\r\n\r\n\toverflowWidth = Math.abs(gapFill) + flexWidth;\r\n\r\n\t//shrink oversize columns if there is no available space\r\n\tif(overflowWidth > 0 && flexShrinkUnits){\r\n\t\tgapFill = scaleColumns(fixedShrinkColumns, overflowWidth, Math.floor(overflowWidth / flexShrinkUnits), true);\r\n\t}\r\n\r\n\t//decrease width of last column to account for rounding errors\r\n\tif(fixedShrinkColumns.length){\r\n\t\tfixedShrinkColumns[fixedShrinkColumns.length-1].width -= gapFill;\r\n\t}\r\n\r\n\tflexColumns.forEach(function(col){\r\n\t\tcol.column.setWidth(col.width);\r\n\t});\r\n\r\n\tfixedShrinkColumns.forEach(function(col){\r\n\t\tcol.column.setWidth(col.width);\r\n\t});\r\n};","import fitData from './modes/fitData.js';\r\nimport fitDataGeneral from './modes/fitDataGeneral.js';\r\nimport fitDataStretch from './modes/fitDataStretch.js';\r\nimport fitColumns from './modes/fitColumns.js';\r\n\r\nexport default {\r\n\tfitData:fitData,\r\n\tfitDataFill:fitDataGeneral,\r\n\tfitDataTable:fitDataGeneral,\r\n\tfitDataStretch:fitDataStretch,\r\n\tfitColumns:fitColumns ,\r\n};","import Module from '../../core/Module.js';\r\n\r\nimport defaultModes from './defaults/modes.js';\r\n\r\nclass Layout extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table, \"layout\");\r\n\r\n\t\tthis.mode = null;\r\n\t}\r\n\r\n\t//initialize layout system\r\n\tinitialize(layout){\r\n\t\tif(Layout.modes[layout]){\r\n\t\t\tthis.mode = layout;\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Layout Error - invalid mode set, defaulting to 'fitData' : \" + layout);\r\n\t\t\tthis.mode = 'fitData';\r\n\t\t}\r\n\r\n\t\tthis.table.element.setAttribute(\"tabulator-layout\", this.mode);\r\n\t}\r\n\r\n\tgetMode(){\r\n\t\treturn this.mode;\r\n\t}\r\n\r\n\t//trigger table layout\r\n\tlayout(){\r\n\t\tLayout.modes[this.mode].call(this, this.table.columnManager.columnsByIndex);\r\n\r\n\t\tif(this.mode.indexOf(\"fitData\") === 0 && this.table.options.persistence && this.table.modExists(\"persistence\", true) && this.table.modules.persistence.config.columns){\r\n\t\t\tthis.table.modules.persistence.save(\"columns\");\r\n\t\t}\r\n\t}\r\n}\r\n\r\nLayout.moduleName = \"layout\";\r\n\r\n//load defaults\r\nLayout.modes = defaultModes;\r\n\r\nexport default Layout;","export default {\r\n\t\"default\":{ //hold default locale text\r\n\t\t\"groups\":{\r\n\t\t\t\"item\":\"item\",\r\n\t\t\t\"items\":\"items\",\r\n\t\t},\r\n\t\t\"columns\":{\r\n\t\t},\r\n\t\t\"ajax\":{\r\n\t\t\t\"loading\":\"Loading\",\r\n\t\t\t\"error\":\"Error\",\r\n\t\t},\r\n\t\t\"pagination\":{\r\n\t\t\t\"page_size\":\"Page Size\",\r\n\t\t\t\"page_title\":\"Show Page\",\r\n\t\t\t\"first\":\"First\",\r\n\t\t\t\"first_title\":\"First Page\",\r\n\t\t\t\"last\":\"Last\",\r\n\t\t\t\"last_title\":\"Last Page\",\r\n\t\t\t\"prev\":\"Prev\",\r\n\t\t\t\"prev_title\":\"Prev Page\",\r\n\t\t\t\"next\":\"Next\",\r\n\t\t\t\"next_title\":\"Next Page\",\r\n\t\t\t\"all\":\"All\",\r\n\t\t},\r\n\t\t\"headerFilters\":{\r\n\t\t\t\"default\":\"filter column...\",\r\n\t\t\t\"columns\":{}\r\n\t\t}\r\n\t},\r\n};","import Module from '../../core/Module.js';\r\n\r\nimport Helpers from '../../core/Helpers.js';\r\n\r\nimport defaultLangs from './defaults/langs.js';\r\n\r\nclass Localize extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.locale = \"default\"; //current locale\r\n\t\tthis.lang = false; //current language\r\n\t\tthis.bindings = {}; //update events to call when locale is changed\r\n\t\tthis.langList = {};\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tthis.langList = Helpers.deepClone(Localize.langs);\r\n\t}\r\n\r\n\t//set header placehoder\r\n\tsetHeaderFilterPlaceholder(placeholder){\r\n\t\tthis.langList.default.headerFilters.default = placeholder;\r\n\t}\r\n\r\n\t//set header filter placeholder by column\r\n\tsetHeaderFilterColumnPlaceholder(column, placeholder){\r\n\t\tthis.langList.default.headerFilters.columns[column] = placeholder;\r\n\r\n\t\tif(this.lang && !this.lang.headerFilters.columns[column]){\r\n\t\t\tthis.lang.headerFilters.columns[column] = placeholder;\r\n\t\t}\r\n\t}\r\n\r\n\t//setup a lang description object\r\n\tinstallLang(locale, lang){\r\n\t\tif(this.langList[locale]){\r\n\t\t\tthis._setLangProp(this.langList[locale], lang);\r\n\t\t}else{\r\n\t\t\tthis.langList[locale] = lang;\r\n\t\t}\r\n\t}\r\n\r\n\t_setLangProp(lang, values){\r\n\t\tfor(let key in values){\r\n\t\t\tif(lang[key] && typeof lang[key] == \"object\"){\r\n\t\t\t\tthis._setLangProp(lang[key], values[key])\r\n\t\t\t}else{\r\n\t\t\t\tlang[key] = values[key];\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//set current locale\r\n\tsetLocale(desiredLocale){\r\n\t\tdesiredLocale = desiredLocale || \"default\";\r\n\r\n\t\t//fill in any matching languge values\r\n\t\tfunction traverseLang(trans, path){\r\n\t\t\tfor(var prop in trans){\r\n\t\t\t\tif(typeof trans[prop] == \"object\"){\r\n\t\t\t\t\tif(!path[prop]){\r\n\t\t\t\t\t\tpath[prop] = {};\r\n\t\t\t\t\t}\r\n\t\t\t\t\ttraverseLang(trans[prop], path[prop]);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tpath[prop] = trans[prop];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//determing correct locale to load\r\n\t\tif(desiredLocale === true && navigator.language){\r\n\t\t\t//get local from system\r\n\t\t\tdesiredLocale = navigator.language.toLowerCase();\r\n\t\t}\r\n\r\n\t\tif(desiredLocale){\r\n\t\t\t//if locale is not set, check for matching top level locale else use default\r\n\t\t\tif(!this.langList[desiredLocale]){\r\n\t\t\t\tlet prefix = desiredLocale.split(\"-\")[0];\r\n\r\n\t\t\t\tif(this.langList[prefix]){\r\n\t\t\t\t\tconsole.warn(\"Localization Error - Exact matching locale not found, using closest match: \", desiredLocale, prefix);\r\n\t\t\t\t\tdesiredLocale = prefix;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.warn(\"Localization Error - Matching locale not found, using default: \", desiredLocale);\r\n\t\t\t\t\tdesiredLocale = \"default\";\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.locale = desiredLocale;\r\n\r\n\t\t//load default lang template\r\n\t\tthis.lang = Helpers.deepClone(this.langList.default || {});\r\n\r\n\t\tif(desiredLocale != \"default\"){\r\n\t\t\ttraverseLang(this.langList[desiredLocale], this.lang);\r\n\t\t}\r\n\r\n\t\tthis.table.options.localized.call(this.table, this.locale, this.lang);\r\n\r\n\t\tthis._executeBindings();\r\n\t}\r\n\r\n\t//get current locale\r\n\tgetLocale(locale){\r\n\t\treturn this.locale;\r\n\t}\r\n\r\n\t//get lang object for given local or current if none provided\r\n\tgetLang(locale){\r\n\t\treturn locale ? this.langList[locale] : this.lang;\r\n\t}\r\n\r\n\t//get text for current locale\r\n\tgetText(path, value){\r\n\t\tvar path = value ? path + \"|\" + value : path,\r\n\t\tpathArray = path.split(\"|\"),\r\n\t\ttext = this._getLangElement(pathArray, this.locale);\r\n\r\n\t\t// if(text === false){\r\n\t\t// \tconsole.warn(\"Localization Error - Matching localized text not found for given path: \", path);\r\n\t\t// }\r\n\r\n\t\treturn text || \"\";\r\n\t}\r\n\r\n\t//traverse langs object and find localized copy\r\n\t_getLangElement(path, locale){\r\n\t\tvar root = this.lang;\r\n\r\n\t\tpath.forEach(function(level){\r\n\t\t\tvar rootPath;\r\n\r\n\t\t\tif(root){\r\n\t\t\t\trootPath = root[level];\r\n\r\n\t\t\t\tif(typeof rootPath != \"undefined\"){\r\n\t\t\t\t\troot = rootPath;\r\n\t\t\t\t}else{\r\n\t\t\t\t\troot = false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn root;\r\n\t}\r\n\r\n\t//set update binding\r\n\tbind(path, callback){\r\n\t\tif(!this.bindings[path]){\r\n\t\t\tthis.bindings[path] = [];\r\n\t\t}\r\n\r\n\t\tthis.bindings[path].push(callback);\r\n\r\n\t\tcallback(this.getText(path), this.lang);\r\n\t}\r\n\r\n\t//itterate through bindings and trigger updates\r\n\t_executeBindings(){\r\n\t\tfor(let path in this.bindings){\r\n\t\t\tthis.bindings[path].forEach((binding) => {\r\n\t\t\t\tbinding(this.getText(path), this.lang);\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n}\r\n\r\nLocalize.moduleName = \"localize\";\r\n\r\n//load defaults\r\nLocalize.langs = defaultLangs;\r\n\r\nexport default Localize;","import Module from '../../core/Module.js';\r\nimport TableRegistry from '../../core/TableRegistry.js';\r\n\r\nclass Comms extends Module{\r\n\r\n\tgetConnections(selectors){\r\n\t\tvar connections = [],\r\n\t\tconnection;\r\n\r\n\t\tconnection = Tabulator.comms.lookupTable(selectors);\r\n\r\n\t\tconnection.forEach((con) =>{\r\n\t\t\tif(this.table !== con){\r\n\t\t\t\tconnections.push(con);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn connections;\r\n\t}\r\n\r\n\tsend(selectors, module, action, data){\r\n\t\tvar connections = this.getConnections(selectors);\r\n\r\n\t\tconnections.forEach((connection) => {\r\n\t\t\tconnection.tableComms(this.table.element, module, action, data);\r\n\t\t});\r\n\r\n\t\tif(!connections.length && selectors){\r\n\t\t\tconsole.warn(\"Table Connection Error - No tables matching selector found\", selectors);\r\n\t\t}\r\n\t}\r\n\r\n\treceive(table, module, action, data){\r\n\t\tif(this.table.modExists(module)){\r\n\t\t\treturn this.table.modules[module].commsReceived(table, action, data);\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Inter-table Comms Error - no such module:\", module);\r\n\t\t}\r\n\t}\r\n}\r\n\r\nComms.moduleName = \"comms\";\r\n\r\nexport default Comms;","import * as coreModules from './modules/core.js';\r\nimport TableRegistry from './TableRegistry.js';\r\n\r\nexport default class ModuleBinder {\r\n\r\n\tconstructor(tabulator, modules){\r\n\t\tthis.bindStaticFuctionality(tabulator);\r\n\t\tthis.bindModules(tabulator, coreModules);\r\n\r\n\t\tif(modules){\r\n\t\t\tthis.bindModules(tabulator, modules);\r\n\t\t}\r\n\t}\r\n\r\n\tbindStaticFuctionality(tabulator){\r\n\r\n\t\ttabulator.moduleBindings = {};\r\n\r\n\t\ttabulator.extendModule = function(name, property, values){\r\n\t\t\tif(tabulator.moduleBindings[name]){\r\n\t\t\t\tvar source = tabulator.moduleBindings[name].prototype[property];\r\n\r\n\t\t\t\tif(source){\r\n\t\t\t\t\tif(typeof values == \"object\"){\r\n\t\t\t\t\t\tfor(let key in values){\r\n\t\t\t\t\t\t\tsource[key] = values[key];\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tconsole.warn(\"Module Error - Invalid value type, it must be an object\");\r\n\t\t\t\t\t}\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.warn(\"Module Error - property does not exist:\", property);\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Module Error - module does not exist:\", name);\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\ttabulator.registerModule = function(modules){\r\n\t\t\tif(!Array.isArray(modules)){\r\n\t\t\t\tmodules = [modules];\r\n\t\t\t}\r\n\r\n\t\t\tmodules.forEach((mod) => {\r\n\t\t\t\ttabulator.registerModuleBinding(mod)\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\ttabulator.registerModuleBinding = function(mod){\r\n\t\t\ttabulator.moduleBindings[mod.moduleName] = mod;\r\n\t\t};\r\n\r\n\t\ttabulator.findTable = function(query){\r\n\t\t\tvar results = TableRegistry.lookupTable(query, true);\r\n\t\t\treturn Array.isArray(results) && !results.length ? false : results;\r\n\t\t}\r\n\r\n\t\t//ensure that module are bound to instantiated function\r\n\t\ttabulator.prototype.bindModules = function(){\r\n\t\t\tthis.modules = {};\r\n\r\n\t\t\tfor(var name in tabulator.moduleBindings){\r\n\t\t\t\tthis.modules[name] = new tabulator.moduleBindings[name](this);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tbindModules(tabulator, modules){\r\n\t\tvar mods = Object.values(modules);\r\n\r\n\t\ttabulator.registerModule(mods);\r\n\t}\r\n}","export default class VirtualDomHorizontal {\r\n\tconstructor(table){\r\n\t\tthis.table = table;\r\n\r\n\t\tthis.element = this.table.rowManager.tableElement;\r\n\t\tthis.holderEl = this.table.rowManager.element;\r\n\r\n\t\tthis.leftCol = 0;\r\n\t\tthis.rightCol = 0;\r\n\t\tthis.scrollLeft = 0;\r\n\r\n\t\tthis.vDomScrollPosLeft = 0;\r\n\t\tthis.vDomScrollPosRight = 0;\r\n\r\n\t\tthis.vDomPadLeft = 0;\r\n\t\tthis.vDomPadRight = 0;\r\n\r\n\t\tthis.fitDataColAvg = 0;\r\n\r\n\t\tthis.window = 200; //pixel margin to make column visible before it is shown on screen\r\n\r\n\t\tthis.initialized = false;\r\n\r\n\t\tthis.columns = [];\r\n\r\n\t\tif(this.compatabilityCheck()){\r\n\t\t\tthis.initialize();\r\n\t\t}\r\n\t}\r\n\r\n\tcompatabilityCheck(){\r\n\t\tvar options = this.table.options,\r\n\t\tfrozen = false,\r\n\t\tok = true;\r\n\r\n\t\tif(options.layout == \"fitDataTable\"){\r\n\t\t\tconsole.warn(\"Horizontal Vitrual DOM is not compatible with fitDataTable layout mode\");\r\n\t\t\tok = false;\r\n\t\t}\r\n\r\n\t\tif(options.responsiveLayout){\r\n\t\t\tconsole.warn(\"Horizontal Vitrual DOM is not compatible with responsive columns\");\r\n\t\t\tok = false;\r\n\t\t}\r\n\r\n\t\tif(this.table.rtl){\r\n\t\t\tconsole.warn(\"Horizontal Vitrual DOM is not currently compatible with RTL text direction\");\r\n\t\t\tok = false;\r\n\t\t}\r\n\r\n\t\tif(options.columns){\r\n\t\t\tfrozen = options.columns.find((col) => {\r\n\t\t\t\treturn col.frozen;\r\n\t\t\t});\r\n\r\n\t\t\tif(frozen){\r\n\t\t\t\tconsole.warn(\"Horizontal Vitrual DOM is not compatible with frozen columns\");\r\n\t\t\t\tok = false;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(!ok){\r\n\t\t\toptions.virtualDomHoz = false;\r\n\t\t}\r\n\r\n\t\treturn ok;\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tthis.holderEl.addEventListener(\"scroll\", () => {\r\n\t\t\tvar left = this.holderEl.scrollLeft;\r\n\r\n\t\t\tif(this.scrollLeft != left){\r\n\t\t\t\tthis.scrollLeft = left;\r\n\t\t\t\tthis.scroll(left - (this.vDomScrollPosLeft + this.window));\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tdeinitialize(){\r\n\t\tthis.initialized = false;\r\n\t}\r\n\r\n\tclear(){\r\n\t\tthis.columns = [];\r\n\r\n\t\tthis.leftCol = -1;\r\n\t\tthis.rightCol = 0;\r\n\r\n\t\tthis.vDomScrollPosLeft = 0;\r\n\t\tthis.vDomScrollPosRight = 0;\r\n\t\tthis.vDomPadLeft = 0;\r\n\t\tthis.vDomPadRight = 0;\r\n\t}\r\n\r\n\tdataChange(){\r\n\t\tvar change = false,\r\n\t\tcollsWidth = 0,\r\n\t\tcolEnd = 0,\r\n\t\tgroup, row, rowEl;\r\n\r\n\t\tif(this.table.options.layout === \"fitData\"){\r\n\t\t\tthis.table.columnManager.columnsByIndex.forEach((column) => {\r\n\t\t\t\tif(!column.definition.width && column.visible){\r\n\t\t\t\t\tchange = true;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tif(change){\r\n\t\t\t\tif(change && this.table.rowManager.getDisplayRows().length){\r\n\r\n\t\t\t\t\tthis.vDomScrollPosRight = this.scrollLeft + this.holderEl.clientWidth + this.window;\r\n\r\n\t\t\t\t\tif(this.table.options.groupBy){\r\n\t\t\t\t\t\tgroup = this.table.modules.groupRows.getGroups(false)[0];\r\n\r\n\t\t\t\t\t\trow = group.getRows(false)[0];\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\trow = this.table.rowManager.getDisplayRows()[0];\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif(row){\r\n\r\n\t\t\t\t\t\trowEl = row.getElement();\r\n\r\n\t\t\t\t\t\trow.generateCells();\r\n\r\n\t\t\t\t\t\tthis.element.appendChild(rowEl);\r\n\r\n\t\t\t\t\t\tfor(var colEnd = 0; colEnd < row.cells.length; colEnd++){\r\n\t\t\t\t\t\t\tlet cell = row.cells[colEnd];\r\n\t\t\t\t\t\t\trowEl.appendChild(cell.getElement());\r\n\r\n\t\t\t\t\t\t\tcell.column.reinitializeWidth();\r\n\r\n\t\t\t\t\t\t\tcollsWidth += cell.column.getWidth();\r\n\r\n\t\t\t\t\t\t\tif(collsWidth > this.vDomScrollPosRight){\r\n\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\trowEl.parentNode.removeChild(rowEl);\r\n\r\n\t\t\t\t\t\tthis.fitDataColAvg = Math.floor(collsWidth / (colEnd + 1));\r\n\r\n\t\t\t\t\t\tfor(colEnd; colEnd < this.table.columnManager.columnsByIndex.length; colEnd++){\r\n\t\t\t\t\t\t\tthis.table.columnManager.columnsByIndex[colEnd].setWidth(this.fitDataColAvg);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tthis.reinitialize(false, true);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tif(this.table.options.layout === \"fitColumns\"){\r\n\t\t\t\tthis.table.modules.layout.layout();\r\n\t\t\t\tthis.table.vdomHoz.reinitialize(false, true);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tfitDataLayoutOverride(){\r\n\t\tfor(let i = this.leftCol; i <= this.rightCol; i++){\r\n\t\t\tthis.columns[i].reinitializeWidth();\r\n\t\t}\r\n\t}\r\n\r\n\treinitialize(update, blockRedraw){\r\n\t\tvar old = {\r\n\t\t\tcols:this.columns,\r\n\t\t\tleftCol:this.leftCol,\r\n\t\t\trightCol:this.rightCol,\r\n\t\t};\r\n\r\n\t\tif(update && !this.initialized){\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.clear();\r\n\r\n\t\tthis.scrollLeft = this.holderEl.scrollLeft;\r\n\r\n\t\tthis.vDomScrollPosLeft = this.scrollLeft - this.window;\r\n\t\tthis.vDomScrollPosRight = this.scrollLeft + this.holderEl.clientWidth + this.window;\r\n\r\n\t\tvar colPos = 0;\r\n\r\n\t\tthis.table.columnManager.columnsByIndex.forEach((column) => {\r\n\t\t\tvar config = {};\r\n\r\n\t\t\tif(column.visible){\r\n\t\t\t\tvar width = column.getWidth();\r\n\r\n\t\t\t\tconfig.leftPos = colPos;\r\n\t\t\t\tconfig.rightPos = colPos + width;\r\n\r\n\t\t\t\tconfig.width = width;\r\n\r\n\t\t\t\tif (_this18.table.options.layout === \"fitData\") {\r\n\r\n\t\t\t\t config.fitDataCheck = true;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif((colPos + width > this.vDomScrollPosLeft) && (colPos < this.vDomScrollPosRight)){\r\n\t \t\t//column is visible\r\n\r\n\t \t\tif(this.leftCol == -1){\r\n\t \t\t\tthis.leftCol = this.columns.length;\r\n\t \t\t\tthis.vDomPadLeft = colPos;\r\n\t \t\t}\r\n\r\n\t \t\tthis.rightCol = this.columns.length;\r\n\t \t}else{\r\n\t \t\t// column is hidden\r\n\t \t\tif(this.leftCol !== -1){\r\n\t \t\t\tthis.vDomPadRight += width;\r\n\t \t\t}\r\n\t \t}\r\n\r\n\t \tthis.columns.push(column);\r\n\r\n\t \tcolumn.modules.vdomHoz = config;\r\n\r\n\t \tcolPos += width;\r\n\t }\r\n\t });\r\n\r\n\t\tthis.element.style.paddingLeft = this.vDomPadLeft + \"px\";\r\n\t\tthis.element.style.paddingRight = this.vDomPadRight + \"px\";\r\n\r\n\t\tthis.initialized = true;\r\n\r\n\t\tif(!blockRedraw){\r\n\t\t\tif(!update || this.reinitChanged(old)){\r\n\t\t\t\tthis.renitializeRows();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.holderEl.scrollLeft = this.scrollLeft;\r\n\t}\r\n\r\n\treinitChanged(old){\r\n\t\tvar match = true;\r\n\r\n\t\tif(old.cols.length !== this.columns.length || old.leftCol !== this.leftCol || old.rightCol !== this.rightCol){\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\told.cols.forEach((col, i) => {\r\n\t\t\tif(col !== this.columns[i]){\r\n\t\t\t\tmatch = false;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn !match;\r\n\t}\r\n\r\n\trenitializeRows(){\r\n\t\tvar rows = this.table.rowManager.getVisibleRows();\r\n\t\trows.forEach((row) => {\r\n\t\t\tthis.reinitializeRow(row, true);\r\n\t\t});\r\n\t}\r\n\r\n\tscroll(diff){\r\n\t\tthis.vDomScrollPosLeft += diff;\r\n\t\tthis.vDomScrollPosRight += diff;\r\n\r\n\t\tif(diff > (this.holderEl.clientWidth * .8)){\r\n\t\t\tthis.reinitialize();\r\n\t\t}else{\r\n\t\t\tif(diff > 0){\r\n\t\t\t\t//scroll right\r\n\t\t\t\tthis.addColRight();\r\n\t\t\t\tthis.removeColLeft();\r\n\t\t\t}else{\r\n\t\t\t\t//scroll left\r\n\t\t\t\tthis.addColLeft();\r\n\t\t\t\tthis.removeColRight();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tcolPositionAdjust (start, end, diff){\r\n\t\tfor(let i = start; i < end; i++){\r\n\t\t\tlet column = this.columns[i];\r\n\r\n\t\t\tcolumn.modules.vdomHoz.leftPos += diff;\r\n\t\t\tcolumn.modules.vdomHoz.rightPos += diff;\r\n\t\t}\r\n\t}\r\n\r\n\taddColRight(){\r\n\t\tvar column = this.columns[this.rightCol + 1],\r\n\t\trows, newWidth, widthDiff;\r\n\r\n\t\tif(column && column.modules.vdomHoz.leftPos <= this.vDomScrollPosRight){\r\n\r\n\t\t\trows = this.table.rowManager.getVisibleRows();\r\n\r\n\t\t\trows.forEach((row) => {\r\n\t\t\t\tif(row.type !== \"group\"){\r\n\t\t\t\t\tvar cell = row.getCell(column);\r\n\t\t\t\t\trow.getElement().appendChild(cell.getElement());\r\n\t\t\t\t\tcell.cellRendered();\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tthis.fitDataColActualWidthCheck(column);\r\n\r\n\t\t\tthis.rightCol++;\r\n\r\n\t\t\tif(this.rightCol >= (this.columns.length - 1)){\r\n\t\t\t\tthis.vDomPadRight = 0;\r\n\t\t\t}else{\r\n\t\t\t\tthis.vDomPadRight -= column.getWidth();\r\n\t\t\t}\r\n\r\n\t\t\tthis.element.style.paddingRight = this.vDomPadRight + \"px\";\r\n\r\n\t\t\tthis.addColRight();\r\n\t\t}\r\n\t}\r\n\r\n\taddColLeft(){\r\n\t\tvar column = this.columns[this.leftCol - 1],\r\n\t\trows;\r\n\r\n\t\tif(column && column.modules.vdomHoz.rightPos >= this.vDomScrollPosLeft){\r\n\t\t\tvar rows = this.table.rowManager.getVisibleRows();\r\n\r\n\t\t\trows.forEach((row) => {\r\n\t\t\t\tif(row.type !== \"group\"){\r\n\t\t\t\t\tvar cell = row.getCell(column);\r\n\t\t\t\t\trow.getElement().prepend(cell.getElement());\r\n\t\t\t\t\tcell.cellRendered();\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tthis.fitDataColActualWidthCheck(column);\r\n\r\n\t\t\tif(!this.leftCol){\r\n\t\t\t\tthis.vDomPadLeft = 0;\r\n\t\t\t}else{\r\n\t\t\t\tthis.vDomPadLeft -= column.getWidth();\r\n\t\t\t}\r\n\r\n\t\t\tthis.element.style.paddingLeft = this.vDomPadLeft + \"px\";\r\n\r\n\t\t\tthis.leftCol--;\r\n\r\n\t\t\tthis.addColLeft();\r\n\t\t}\r\n\t}\r\n\r\n\tremoveColRight(column){\r\n\t\tvar column = this.columns[this.rightCol],\r\n\t\trows;\r\n\r\n\t\tif(column && column.modules.vdomHoz.leftPos > this.vDomScrollPosRight){\r\n\t\t\trows = this.table.rowManager.getVisibleRows();\r\n\r\n\t\t\tcolumn.modules.vdomHoz.visible = false;\r\n\r\n\t\t\trows.forEach((row) => {\r\n\t\t\t\tif(row.type !== \"group\"){\r\n\t\t\t\t\tvar cell = row.getCell(column);\r\n\t\t\t\t\trow.getElement().removeChild(cell.getElement());\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tthis.vDomPadRight += column.getWidth();\r\n\t\t\tthis.element.style.paddingRight = this.vDomPadRight + \"px\";\r\n\r\n\t\t\tthis.rightCol --;\r\n\r\n\t\t\tthis.removeColRight();\r\n\t\t}\r\n\t}\r\n\r\n\tremoveColLeft(){\r\n\t\tvar column = this.columns[this.leftCol],\r\n\t\trows;\r\n\r\n\t\tif(column && column.modules.vdomHoz.rightPos < this.vDomScrollPosLeft){\r\n\r\n\t\t\trows = this.table.rowManager.getVisibleRows();\r\n\r\n\t\t\trows.forEach((row) => {\r\n\t\t\t\tif(row.type !== \"group\"){\r\n\t\t\t\t\tvar cell = row.getCell(column);\r\n\t\t\t\t\trow.getElement().removeChild(cell.getElement());\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tthis.vDomPadLeft += column.getWidth();\r\n\t\t\tthis.element.style.paddingLeft = this.vDomPadLeft + \"px\";\r\n\r\n\t\t\tthis.leftCol ++;\r\n\r\n\t\t\tthis.removeColLeft();\r\n\t\t}\r\n\t}\r\n\r\n\tfitDataColActualWidthCheck(column){\r\n\t var newWidth, widthDiff;\r\n\r\n\t if(column.modules.vdomHoz.fitDataCheck){\r\n\t column.reinitializeWidth();\r\n\r\n\t newWidth = column.getWidth();\r\n\t widthDiff = newWidth - column.modules.vdomHoz.width;\r\n\r\n\t if(widthDiff){\r\n\t column.modules.vdomHoz.rightPos += widthDiff;\r\n\t column.modules.vdomHoz.width = newWidth;\r\n\t this.colPositionAdjust(this.rightCol + 2, this.columns.length, widthDiff);\r\n\t }\r\n\r\n\t column.modules.vdomHoz.fitDataCheck = false;\r\n\t }\r\n\t};\r\n\r\n\tinitializeRow(row){\r\n\t\tif(row.type !== \"group\"){\r\n\t\t\trow.modules.vdomHoz = {\r\n\t\t\t\tleftCol:this.leftCol,\r\n\t\t\t\trightCol:this.rightCol,\r\n\t\t\t};\r\n\r\n\t\t\tfor(let i = this.leftCol; i <= this.rightCol; i++){\r\n\t\t\t\tlet column = this.columns[i];\r\n\r\n\t\t\t\tif(column && column.visible){\r\n\t\t\t\t\tlet cell = row.getCell(column);\r\n\r\n\t\t\t\t\trow.getElement().appendChild(cell.getElement());\r\n\t\t\t\t\tcell.cellRendered();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\treinitializeRow(row, force){\r\n\t\tif(row.type !== \"group\"){\r\n\t\t\tif(force || !row.modules.vdomHoz || row.modules.vdomHoz.leftCol !== this.leftCol || row.modules.vdomHoz.rightCol !== this.rightCol){\r\n\t\t\t\tvar rowEl = row.getElement();\r\n\t\t\t\twhile(rowEl.firstChild) rowEl.removeChild(rowEl.firstChild);\r\n\r\n\t\t\t\tthis.initializeRow(row);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}","'use strict';\r\n\r\nimport defaultOptions from './defaults/options.js';\r\n\r\n\r\nimport ColumnManager from './ColumnManager.js';\r\nimport RowManager from './RowManager.js';\r\nimport FooterManager from './FooterManager.js';\r\n\r\nimport TableRegistry from './TableRegistry.js';\r\nimport ModuleBinder from './ModuleBinder.js';\r\n\r\nimport VirtualDomHorizontal from './renderers/VirtualDomHorizontal.js';\r\n\r\nclass Tabulator {\r\n\r\n\tconstructor(element, options){\r\n\r\n\t\tthis.options = {};\r\n\r\n\t\tthis.columnManager = null; // hold Column Manager\r\n\t\tthis.rowManager = null; //hold Row Manager\r\n\t\tthis.footerManager = null; //holder Footer Manager\r\n\t\tthis.vdomHoz = null; //holder horizontal virtual dom\r\n\r\n\t\tthis.browser = \"\"; //hold current browser type\r\n\t\tthis.browserSlow = false; //handle reduced functionality for slower browsers\r\n\t\tthis.browserMobile = false; //check if running on moble, prevent resize cancelling edit on keyboard appearence\r\n\t\tthis.rtl = false; //check if the table is in RTL mode\r\n\r\n\t\tthis.modules = {}; //hold all modules bound to this table\r\n\r\n\t\tif(this.initializeElement(element)){\r\n\t\t\tthis.initializeOptions(options || {});\r\n\t\t\tthis._create();\r\n\t\t}\r\n\r\n\t\tTableRegistry.register(this); //register table for inderdevice communication\r\n\t}\r\n\r\n\tinitializeOptions(options){\r\n\r\n\t\tvar defaults = Tabulator.defaultOptions;\r\n\r\n\t\t//warn user if option is not available\r\n\t\tif(options.invalidOptionWarnings !== false){\r\n\t\t\tfor (var key in options){\r\n\t\t\t\tif(typeof defaults[key] === \"undefined\"){\r\n\t\t\t\t\tconsole.warn(\"Invalid table constructor option:\", key)\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//assign options to table\r\n\t\tfor (var key in defaults){\r\n\t\t\tif(key in options){\r\n\t\t\t\tthis.options[key] = options[key];\r\n\t\t\t}else{\r\n\t\t\t\tif(Array.isArray(defaults[key])){\r\n\t\t\t\t\tthis.options[key] = Object.assign([], defaults[key]);\r\n\t\t\t\t}else if(typeof defaults[key] === \"object\" && defaults[key] !== null){\r\n\t\t\t\t\tthis.options[key] = Object.assign({}, defaults[key]);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tthis.options[key] = defaults[key];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tinitializeElement(element){\r\n\t\tif(typeof HTMLElement !== \"undefined\" && element instanceof HTMLElement){\r\n\t\t\tthis.element = element;\r\n\t\t\treturn true;\r\n\t\t}else if(typeof element === \"string\"){\r\n\t\t\tthis.element = document.querySelector(element);\r\n\r\n\t\t\tif(this.element){\r\n\t\t\t\treturn true;\r\n\t\t\t}else{\r\n\t\t\t\tconsole.error(\"Tabulator Creation Error - no element found matching selector: \", element);\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tconsole.error(\"Tabulator Creation Error - Invalid element provided:\", element);\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\trtlCheck(){\r\n\t\tvar style = window.getComputedStyle(this.element);\r\n\r\n\t\tswitch(this.options.textDirection){\r\n\t\t\tcase\"auto\":\r\n\t\t\tif(style.direction !== \"rtl\"){\r\n\t\t\t\tbreak;\r\n\t\t\t};\r\n\r\n\t\t\tcase \"rtl\":\r\n\t\t\tthis.element.classList.add(\"tabulator-rtl\");\r\n\t\t\tthis.rtl = true;\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"ltr\":\r\n\t\t\tthis.element.classList.add(\"tabulator-ltr\");\r\n\r\n\t\t\tdefault:\r\n\t\t\tthis.rtl = false;\r\n\t\t}\r\n\t}\r\n\r\n\t//convert depricated functionality to new functions\r\n\t_mapDepricatedFunctionality(){\r\n\t\t//all previously deprecated functionality removed in the 5.0 release\r\n\t}\r\n\r\n\t_clearSelection(){\r\n\r\n\t\tthis.element.classList.add(\"tabulator-block-select\");\r\n\r\n\t\tif (window.getSelection) {\r\n\t\t if (window.getSelection().empty) { // Chrome\r\n\t\t \twindow.getSelection().empty();\r\n\t\t } else if (window.getSelection().removeAllRanges) { // Firefox\r\n\t\t \twindow.getSelection().removeAllRanges();\r\n\t\t }\r\n\t\t} else if (document.selection) { // IE?\r\n\t\t\tdocument.selection.empty();\r\n\t\t}\r\n\r\n\t\tthis.element.classList.remove(\"tabulator-block-select\");\r\n\t}\r\n\r\n\t//concreate table\r\n\t_create(){\r\n\t\tthis._clearObjectPointers();\r\n\r\n\t\tthis._mapDepricatedFunctionality();\r\n\r\n\t\tthis.bindModules();\r\n\r\n\t\tthis.rtlCheck();\r\n\r\n\t\tif(this.element.tagName === \"TABLE\"){\r\n\t\t\tif(this.modExists(\"htmlTableImport\", true)){\r\n\t\t\t\tthis.modules.htmlTableImport.parseTable();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.columnManager = new ColumnManager(this);\r\n\t\tthis.rowManager = new RowManager(this);\r\n\t\tthis.footerManager = new FooterManager(this);\r\n\r\n\t\tthis.columnManager.setRowManager(this.rowManager);\r\n\t\tthis.rowManager.setColumnManager(this.columnManager);\r\n\r\n\t\tif(this.options.virtualDomHoz){\r\n\t\t\tthis.vdomHoz = new VirtualDomHorizontal(this);\r\n\t\t}\r\n\r\n\t\tthis._buildElement();\r\n\r\n\t\tthis._loadInitialData();\r\n\t}\r\n\r\n\t//clear pointers to objects in default config object\r\n\t_clearObjectPointers(){\r\n\t\tthis.options.columns = this.options.columns.slice(0);\r\n\r\n\t\tif(!this.options.reactiveData){\r\n\t\t\tthis.options.data = this.options.data.slice(0);\r\n\t\t}\r\n\t}\r\n\r\n\t//build tabulator element\r\n\t_buildElement(){\r\n\t\tvar element = this.element,\r\n\t\tmod = this.modules,\r\n\t\toptions = this.options;\r\n\r\n\t\toptions.tableBuilding.call(this);\r\n\r\n\t\telement.classList.add(\"tabulator\");\r\n\t\telement.setAttribute(\"role\", \"grid\");\r\n\r\n\t\t//empty element\r\n\t\twhile(element.firstChild) element.removeChild(element.firstChild);\r\n\r\n\t\t//set table height\r\n\t\tif(options.height){\r\n\t\t\toptions.height = isNaN(options.height) ? options.height : options.height + \"px\";\r\n\t\t\telement.style.height = options.height;\r\n\t\t}\r\n\r\n\t\t//set table min height\r\n\t\tif(options.minHeight !== false){\r\n\t\t\toptions.minHeight = isNaN(options.minHeight) ? options.minHeight : options.minHeight + \"px\";\r\n\t\t\telement.style.minHeight = options.minHeight;\r\n\t\t}\r\n\r\n\t\t//set table maxHeight\r\n\t\tif(options.maxHeight !== false){\r\n\t\t\toptions.maxHeight = isNaN(options.maxHeight) ? options.maxHeight : options.maxHeight + \"px\";\r\n\t\t\telement.style.maxHeight = options.maxHeight;\r\n\t\t}\r\n\r\n\t\tthis.columnManager.initialize();\r\n\t\tthis.rowManager.initialize();\r\n\r\n\t\tthis._detectBrowser();\r\n\r\n\t\tif(this.modExists(\"layout\", true)){\r\n\t\t\tmod.layout.initialize(options.layout);\r\n\t\t}\r\n\r\n\t\t//set localization\r\n\t\tmod.localize.initialize();\r\n\r\n\t\tif(options.headerFilterPlaceholder !== false){\r\n\t\t\tmod.localize.setHeaderFilterPlaceholder(options.headerFilterPlaceholder);\r\n\t\t}\r\n\r\n\t\tfor(let locale in options.langs){\r\n\t\t\tmod.localize.installLang(locale, options.langs[locale]);\r\n\t\t}\r\n\r\n\t\tmod.localize.setLocale(options.locale);\r\n\r\n\t\t//configure placeholder element\r\n\t\tif(typeof options.placeholder == \"string\"){\r\n\r\n\t\t\tvar el = document.createElement(\"div\");\r\n\t\t\tel.classList.add(\"tabulator-placeholder\");\r\n\r\n\t\t\tvar span = document.createElement(\"span\");\r\n\t\t\tspan.innerHTML = options.placeholder;\r\n\r\n\t\t\tel.appendChild(span);\r\n\r\n\t\t\toptions.placeholder = el;\r\n\t\t}\r\n\r\n\t\t//build table elements\r\n\t\telement.appendChild(this.columnManager.getElement());\r\n\t\telement.appendChild(this.rowManager.getElement());\r\n\r\n\t\tif(options.footerElement){\r\n\t\t\tthis.footerManager.activate();\r\n\t\t}\r\n\r\n\t\tif(options.persistence && this.modExists(\"persistence\", true)){\r\n\t\t\tmod.persistence.initialize();\r\n\t\t}\r\n\r\n\t\tif(options.movableRows && this.modExists(\"moveRow\")){\r\n\t\t\tmod.moveRow.initialize();\r\n\t\t}\r\n\r\n\t\tif(options.autoColumns && this.options.data){\r\n\t\t\tthis.columnManager.generateColumnsFromRowData(this.options.data);\r\n\t\t}\r\n\r\n\t\tif(this.modExists(\"columnCalcs\")){\r\n\t\t\tmod.columnCalcs.initialize();\r\n\t\t}\r\n\r\n\t\tthis.columnManager.setColumns(options.columns);\r\n\r\n\t\tif(options.dataTree && this.modExists(\"dataTree\", true)){\r\n\t\t\tmod.dataTree.initialize();\r\n\t\t}\r\n\r\n\t\tif(this.modExists(\"frozenRows\")){\r\n\t\t\tthis.modules.frozenRows.initialize();\r\n\t\t}\r\n\r\n\t\tif(((options.persistence && this.modExists(\"persistence\", true) && mod.persistence.config.sort) || options.initialSort) && this.modExists(\"sort\", true)){\r\n\t\t\tvar sorters = [];\r\n\r\n\t\t\tif(options.persistence && this.modExists(\"persistence\", true) && mod.persistence.config.sort){\r\n\t\t\t\tsorters = mod.persistence.load(\"sort\");\r\n\r\n\t\t\t\tif(sorters === false && options.initialSort){\r\n\t\t\t\t\tsorters = options.initialSort;\r\n\t\t\t\t}\r\n\t\t\t}else if(options.initialSort){\r\n\t\t\t\tsorters = options.initialSort;\r\n\t\t\t}\r\n\r\n\t\t\tmod.sort.setSort(sorters);\r\n\t\t}\r\n\r\n\t\tif(((options.persistence && this.modExists(\"persistence\", true) && mod.persistence.config.filter) || options.initialFilter) && this.modExists(\"filter\", true)){\r\n\t\t\tvar filters = [];\r\n\r\n\r\n\t\t\tif(options.persistence && this.modExists(\"persistence\", true) && mod.persistence.config.filter){\r\n\t\t\t\tfilters = mod.persistence.load(\"filter\");\r\n\r\n\t\t\t\tif(filters === false && options.initialFilter){\r\n\t\t\t\t\tfilters = options.initialFilter;\r\n\t\t\t\t}\r\n\t\t\t}else if(options.initialFilter){\r\n\t\t\t\tfilters = options.initialFilter;\r\n\t\t\t}\r\n\r\n\t\t\tmod.filter.setFilter(filters);\r\n\t\t}\r\n\r\n\t\tif(options.initialHeaderFilter && this.modExists(\"filter\", true)){\r\n\t\t\toptions.initialHeaderFilter.forEach((item) => {\r\n\r\n\t\t\t\tvar column = this.columnManager.findColumn(item.field);\r\n\r\n\t\t\t\tif(column){\r\n\t\t\t\t\tmod.filter.setHeaderFilterValue(column, item.value);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.warn(\"Column Filter Error - No matching column found:\", item.field);\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\r\n\t\tif(this.modExists(\"ajax\")){\r\n\t\t\tmod.ajax.initialize();\r\n\t\t}\r\n\r\n\t\tif(options.pagination && this.modExists(\"page\", true)){\r\n\t\t\tmod.page.initialize();\r\n\t\t}\r\n\r\n\t\tif(options.groupBy && this.modExists(\"groupRows\", true)){\r\n\t\t\tmod.groupRows.initialize();\r\n\t\t}\r\n\r\n\t\tif(this.modExists(\"keybindings\")){\r\n\t\t\tmod.keybindings.initialize();\r\n\t\t}\r\n\r\n\t\tif(this.modExists(\"selectRow\")){\r\n\t\t\tmod.selectRow.clearSelectionData(true);\r\n\t\t}\r\n\r\n\t\tif(options.autoResize && this.modExists(\"resizeTable\")){\r\n\t\t\tmod.resizeTable.initialize();\r\n\t\t}\r\n\r\n\t\tif(this.modExists(\"clipboard\")){\r\n\t\t\tmod.clipboard.initialize();\r\n\t\t}\r\n\r\n\t\tif(options.printAsHtml && this.modExists(\"print\")){\r\n\t\t\tmod.print.initialize();\r\n\t\t}\r\n\r\n\t\toptions.tableBuilt.call(this);\r\n\t}\r\n\r\n\t_loadInitialData(){\r\n\t\tif(this.options.pagination && this.modExists(\"page\")){\r\n\t\t\tthis.modules.page.reset(true, true);\r\n\r\n\t\t\tif(this.options.pagination == \"local\"){\r\n\t\t\t\tif(this.options.data.length){\r\n\t\t\t\t\tthis.rowManager.setData(this.options.data, false, true);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tif((this.options.ajaxURL || this.options.ajaxURLGenerator) && this.modExists(\"ajax\")){\r\n\t\t\t\t\t\tthis.modules.ajax.loadData(false, true).then(()=>{}).catch(()=>{\r\n\t\t\t\t\t\t\tif(this.options.paginationInitialPage){\r\n\t\t\t\t\t\t\t\tthis.modules.page.setPage(this.options.paginationInitialPage);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tthis.rowManager.setData(this.options.data, false, true);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(this.options.paginationInitialPage){\r\n\t\t\t\t\tthis.modules.page.setPage(this.options.paginationInitialPage);\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tif(this.options.ajaxURL){\r\n\t\t\t\t\tthis.modules.page.setPage(this.options.paginationInitialPage).then(()=>{}).catch(()=>{});\r\n\t\t\t\t}else{\r\n\t\t\t\t\tthis.rowManager.setData([], false, true);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tif(this.options.data.length){\r\n\t\t\t\tthis.rowManager.setData(this.options.data);\r\n\t\t\t}else{\r\n\t\t\t\tif((this.options.ajaxURL || this.options.ajaxURLGenerator) && this.modExists(\"ajax\")){\r\n\t\t\t\t\tthis.modules.ajax.loadData(false, true).then(()=>{}).catch(()=>{});\r\n\t\t\t\t}else{\r\n\t\t\t\t\tthis.rowManager.setData(this.options.data, false, true);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//deconstructor\r\n\tdestroy(){\r\n\t\tvar element = this.element;\r\n\r\n\t\tcomms(this); //deregister table from inderdevice communication\r\n\r\n\t\tif(this.options.reactiveData && this.modExists(\"reactiveData\", true)){\r\n\t\t\tthis.modules.reactiveData.unwatchData();\r\n\t\t}\r\n\r\n\t\t//clear row data\r\n\t\tthis.rowManager.rows.forEach(function(row){\r\n\t\t\trow.wipe();\r\n\t\t});\r\n\r\n\t\tthis.rowManager.rows = [];\r\n\t\tthis.rowManager.activeRows = [];\r\n\t\tthis.rowManager.displayRows = [];\r\n\r\n\t\t//clear event bindings\r\n\t\tif(this.options.autoResize && this.modExists(\"resizeTable\")){\r\n\t\t\tthis.modules.resizeTable.clearBindings();\r\n\t\t}\r\n\r\n\t\tif(this.modExists(\"keybindings\")){\r\n\t\t\tthis.modules.keybindings.clearBindings();\r\n\t\t}\r\n\r\n\t\t//clear DOM\r\n\t\twhile(element.firstChild) element.removeChild(element.firstChild);\r\n\t\telement.classList.remove(\"tabulator\");\r\n\t}\r\n\r\n\t_detectBrowser(){\r\n\t\tvar ua = navigator.userAgent||navigator.vendor||window.opera;\r\n\r\n\t\tif(ua.indexOf(\"Trident\") > -1){\r\n\t\t\tthis.browser = \"ie\";\r\n\t\t\tthis.browserSlow = true;\r\n\t\t}else if(ua.indexOf(\"Edge\") > -1){\r\n\t\t\tthis.browser = \"edge\";\r\n\t\t\tthis.browserSlow = true;\r\n\t\t}else if(ua.indexOf(\"Firefox\") > -1){\r\n\t\t\tthis.browser = \"firefox\";\r\n\t\t\tthis.browserSlow = false;\r\n\t\t}else{\r\n\t\t\tthis.browser = \"other\";\r\n\t\t\tthis.browserSlow = false;\r\n\t\t}\r\n\r\n\t\tthis.browserMobile = /(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i.test(ua)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\\-(n|u)|c55\\/|capi|ccwa|cdm\\-|cell|chtm|cldc|cmd\\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\\-s|devi|dica|dmob|do(c|p)o|ds(12|\\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\\-|_)|g1 u|g560|gene|gf\\-5|g\\-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd\\-(m|p|t)|hei\\-|hi(pt|ta)|hp( i|ip)|hs\\-c|ht(c(\\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\\-(20|go|ma)|i230|iac( |\\-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc\\-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|\\-[a-w])|libw|lynx|m1\\-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m\\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\\-2|po(ck|rt|se)|prox|psio|pt\\-g|qa\\-a|qc(07|12|21|32|60|\\-[2-7]|i\\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\\-|oo|p\\-)|sdk\\/|se(c(\\-|0|1)|47|mc|nd|ri)|sgh\\-|shar|sie(\\-|m)|sk\\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\\-|v\\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\\-|tdg\\-|tel(i|m)|tim\\-|t\\-mo|to(pl|sh)|ts(70|m\\-|m3|m5)|tx\\-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\\-|your|zeto|zte\\-/i.test(ua.substr(0,4));\r\n\t}\r\n\r\n\t////////////////// Data Handling //////////////////\r\n\t//block table redrawing\r\n\tblockRedraw(){\r\n\t\treturn this.rowManager.blockRedraw();\r\n\t}\r\n\r\n\t//restore table redrawing\r\n\trestoreRedraw(){\r\n\t\treturn this.rowManager.restoreRedraw();\r\n\t}\r\n\r\n\t//local data from local file\r\n\tsetDataFromLocalFile(extensions){\r\n\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tvar input = document.createElement(\"input\");\r\n\t\t\tinput.type = \"file\";\r\n\t\t\tinput.accept = extensions || \".json,application/json\";\r\n\r\n\t\t\tinput.addEventListener(\"change\", (e) => {\r\n\t\t\t\tvar file = input.files[0],\r\n\t\t\t\treader = new FileReader(),\r\n\t\t\t\tdata;\r\n\r\n\t\t\t\treader.readAsText(file);\r\n\r\n\t\t\t\treader.onload = (e) => {\r\n\r\n\t\t\t\t\ttry {\r\n\t\t\t\t\t\tdata = JSON.parse(reader.result);\r\n\t\t\t\t\t} catch(e) {\r\n\t\t\t\t\t\tconsole.warn(\"File Load Error - File contents is invalid JSON\", e);\r\n\t\t\t\t\t\treject(e);\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tthis.setData(data)\r\n\t\t\t\t\t.then((data) => {\r\n\t\t\t\t\t\tresolve(data);\r\n\t\t\t\t\t})\r\n\t\t\t\t\t.catch((err) => {\r\n\t\t\t\t\t\tresolve(err);\r\n\t\t\t\t\t});\r\n\t\t\t\t};\r\n\r\n\t\t\t\treader.onerror = (e) => {\r\n\t\t\t\t\tconsole.warn(\"File Load Error - Unable to read file\");\r\n\t\t\t\t\treject();\r\n\t\t\t\t};\r\n\t\t\t});\r\n\r\n\t\t\tinput.click();\r\n\t\t});\r\n\t}\r\n\r\n\t//load data\r\n\tsetData(data, params, config){\r\n\t\tif(this.modExists(\"ajax\")){\r\n\t\t\tthis.modules.ajax.blockActiveRequest();\r\n\t\t}\r\n\r\n\t\treturn this._setData(data, params, config, false, true);\r\n\t}\r\n\r\n\t_setData(data, params, config, inPosition, columnsChanged){\r\n\t\tif(typeof(data) === \"string\"){\r\n\t\t\tif (data.indexOf(\"{\") == 0 || data.indexOf(\"[\") == 0){\r\n\t\t\t\t//data is a json encoded string\r\n\t\t\t\treturn this.rowManager.setData(JSON.parse(data), inPosition, columnsChanged);\r\n\t\t\t}else{\r\n\r\n\t\t\t\tif(this.modExists(\"ajax\", true)){\r\n\t\t\t\t\tif(params){\r\n\t\t\t\t\t\tthis.modules.ajax.setParams(params);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif(config){\r\n\t\t\t\t\t\tthis.modules.ajax.setConfig(config);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tthis.modules.ajax.setUrl(data);\r\n\r\n\t\t\t\t\tif(this.options.pagination == \"remote\" && this.modExists(\"page\", true)){\r\n\t\t\t\t\t\tthis.modules.page.reset(true, true);\r\n\t\t\t\t\t\treturn this.modules.page.setPage(1);\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\t//assume data is url, make ajax call to url to get data\r\n\t\t\t\t\t\treturn this.modules.ajax.loadData(inPosition, columnsChanged);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tif(data){\r\n\t\t\t\t//asume data is already an object\r\n\t\t\t\treturn this.rowManager.setData(data, inPosition, columnsChanged);\r\n\t\t\t}else{\r\n\t\t\t\t//no data provided, check if ajaxURL is present;\r\n\t\t\t\tif(this.modExists(\"ajax\") && (this.modules.ajax.getUrl || this.options.ajaxURLGenerator)){\r\n\t\t\t\t\tif(this.options.pagination == \"remote\" && this.modExists(\"page\", true)){\r\n\t\t\t\t\t\tthis.modules.page.reset(true, true);\r\n\t\t\t\t\t\treturn this.modules.page.setPage(1);\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\treturn this.modules.ajax.loadData(inPosition, columnsChanged);\r\n\t\t\t\t\t}\r\n\t\t\t\t}else{\r\n\t\t\t\t\t//empty data\r\n\t\t\t\t\treturn this.rowManager.setData([], inPosition, columnsChanged);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//clear data\r\n\tclearData(){\r\n\t\tif(this.modExists(\"ajax\")){\r\n\t\t\tthis.modules.ajax.blockActiveRequest();\r\n\t\t}\r\n\r\n\t\tthis.rowManager.clearData();\r\n\t}\r\n\r\n\t//get table data array\r\n\tgetData(active){\r\n\t\treturn this.rowManager.getData(active);\r\n\t}\r\n\r\n\t//get table data array count\r\n\tgetDataCount(active){\r\n\t\treturn this.rowManager.getDataCount(active);\r\n\t}\r\n\r\n\t//search for specific row components\r\n\tsearchRows(field, type, value){\r\n\t\tif(this.modExists(\"filter\", true)){\r\n\t\t\treturn this.modules.filter.search(\"rows\", field, type, value);\r\n\t\t}\r\n\t}\r\n\r\n\t//search for specific data\r\n\tsearchData(field, type, value){\r\n\t\tif(this.modExists(\"filter\", true)){\r\n\t\t\treturn this.modules.filter.search(\"data\", field, type, value);\r\n\t\t}\r\n\t}\r\n\r\n\t//get table html\r\n\tgetHtml(visible, style, config){\r\n\t\tif(this.modExists(\"export\", true)){\r\n\t\t\treturn this.modules.export.getHtml(visible, style, config);\r\n\t\t}\r\n\t}\r\n\r\n\t//get print html\r\n\tprint(visible, style, config){\r\n\t\tif(this.modExists(\"print\", true)){\r\n\t\t\treturn this.modules.print.printFullscreen(visible, style, config);\r\n\t\t}\r\n\t}\r\n\r\n\t//retrieve Ajax URL\r\n\tgetAjaxUrl(){\r\n\t\tif(this.modExists(\"ajax\", true)){\r\n\t\t\treturn this.modules.ajax.getUrl();\r\n\t\t}\r\n\t}\r\n\r\n\t//replace data, keeping table in position with same sort\r\n\treplaceData(data, params, config){\r\n\t\tif(this.modExists(\"ajax\")){\r\n\t\t\tthis.modules.ajax.blockActiveRequest();\r\n\t\t}\r\n\r\n\t\treturn this._setData(data, params, config, true);\r\n\t}\r\n\r\n\t//update table data\r\n\tupdateData(data){\r\n\t\tvar responses = 0;\r\n\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tif(this.modExists(\"ajax\")){\r\n\t\t\t\tthis.modules.ajax.blockActiveRequest();\r\n\t\t\t}\r\n\r\n\t\t\tif(typeof data === \"string\"){\r\n\t\t\t\tdata = JSON.parse(data);\r\n\t\t\t}\r\n\r\n\t\t\tif(data){\r\n\t\t\t\tdata.forEach((item) => {\r\n\t\t\t\t\tvar row = this.rowManager.findRow(item[this.options.index]);\r\n\r\n\t\t\t\t\tif(row){\r\n\t\t\t\t\t\tresponses++;\r\n\r\n\t\t\t\t\t\trow.updateData(item)\r\n\t\t\t\t\t\t.then(()=>{\r\n\t\t\t\t\t\t\tresponses--;\r\n\r\n\t\t\t\t\t\t\tif(!responses){\r\n\t\t\t\t\t\t\t\tresolve();\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Update Error - No data provided\");\r\n\t\t\t\treject(\"Update Error - No data provided\");\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\taddData(data, pos, index){\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tif(this.modExists(\"ajax\")){\r\n\t\t\t\tthis.modules.ajax.blockActiveRequest();\r\n\t\t\t}\r\n\r\n\t\t\tif(typeof data === \"string\"){\r\n\t\t\t\tdata = JSON.parse(data);\r\n\t\t\t}\r\n\r\n\t\t\tif(data){\r\n\t\t\t\tthis.rowManager.addRows(data, pos, index)\r\n\t\t\t\t.then((rows) => {\r\n\t\t\t\t\tvar output = [];\r\n\r\n\t\t\t\t\trows.forEach(function(row){\r\n\t\t\t\t\t\toutput.push(row.getComponent());\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\tresolve(output);\r\n\t\t\t\t});\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Update Error - No data provided\");\r\n\t\t\t\treject(\"Update Error - No data provided\");\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t//update table data\r\n\tupdateOrAddData(data){\r\n\t\tvar rows = [],\r\n\t\tresponses = 0;\r\n\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tif(this.modExists(\"ajax\")){\r\n\t\t\t\tthis.modules.ajax.blockActiveRequest();\r\n\t\t\t}\r\n\r\n\t\t\tif(typeof data === \"string\"){\r\n\t\t\t\tdata = JSON.parse(data);\r\n\t\t\t}\r\n\r\n\t\t\tif(data){\r\n\t\t\t\tdata.forEach((item) => {\r\n\t\t\t\t\tvar row = this.rowManager.findRow(item[this.options.index]);\r\n\r\n\t\t\t\t\tresponses++;\r\n\r\n\t\t\t\t\tif(row){\r\n\t\t\t\t\t\trow.updateData(item)\r\n\t\t\t\t\t\t.then(()=>{\r\n\t\t\t\t\t\t\tresponses--;\r\n\t\t\t\t\t\t\trows.push(row.getComponent());\r\n\r\n\t\t\t\t\t\t\tif(!responses){\r\n\t\t\t\t\t\t\t\tresolve(rows);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tthis.rowManager.addRows(item)\r\n\t\t\t\t\t\t.then((newRows)=>{\r\n\t\t\t\t\t\t\tresponses--;\r\n\t\t\t\t\t\t\trows.push(newRows[0].getComponent());\r\n\r\n\t\t\t\t\t\t\tif(!responses){\r\n\t\t\t\t\t\t\t\tresolve(rows);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Update Error - No data provided\");\r\n\t\t\t\treject(\"Update Error - No data provided\");\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t//get row object\r\n\tgetRow(index){\r\n\t\tvar row = this.rowManager.findRow(index);\r\n\r\n\t\tif(row){\r\n\t\t\treturn row.getComponent();\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Find Error - No matching row found:\", index);\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\t//get row object\r\n\tgetRowFromPosition(position, active){\r\n\t\tvar row = this.rowManager.getRowFromPosition(position, active);\r\n\r\n\t\tif(row){\r\n\t\t\treturn row.getComponent();\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Find Error - No matching row found:\", position);\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\t//delete row from table\r\n\tdeleteRow(index){\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tvar count = 0,\r\n\t\t\tsuccessCount = 0,\r\n\t\t\tfoundRows = [];\r\n\r\n\t\t\tfunction doneCheck(){\r\n\t\t\t\tcount++;\r\n\r\n\t\t\t\tif(count == index.length){\r\n\t\t\t\t\tif(successCount){\r\n\t\t\t\t\t\tthis.rowManager.reRenderInPosition();\r\n\t\t\t\t\t\tresolve();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif(!Array.isArray(index)){\r\n\t\t\t\tindex = [index];\r\n\t\t\t}\r\n\r\n\t\t\t//find matching rows\r\n\t\t\tindex.forEach((item) =>{\r\n\t\t\t\tvar row = this.rowManager.findRow(item, true);\r\n\r\n\t\t\t\tif(row){\r\n\t\t\t\t\tfoundRows.push(row);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.warn(\"Delete Error - No matching row found:\", item);\r\n\t\t\t\t\treject(\"Delete Error - No matching row found\")\r\n\t\t\t\t\tdoneCheck();\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\t//sort rows into correct order to ensure smooth delete from table\r\n\t\t\tfoundRows.sort((a, b) => {\r\n\t\t\t\treturn this.rowManager.rows.indexOf(a) > this.rowManager.rows.indexOf(b) ? 1 : -1;\r\n\t\t\t});\r\n\r\n\t\t\tfoundRows.forEach((row) =>{\r\n\t\t\t\trow.delete()\r\n\t\t\t\t.then(() => {\r\n\t\t\t\t\tsuccessCount++;\r\n\t\t\t\t\tdoneCheck();\r\n\t\t\t\t})\r\n\t\t\t\t.catch((err) => {\r\n\t\t\t\t\tdoneCheck();\r\n\t\t\t\t\treject(err);\r\n\t\t\t\t});\r\n\t\t\t});\r\n\t\t});\r\n\t}\r\n\r\n\t//add row to table\r\n\taddRow(data, pos, index){\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tif(typeof data === \"string\"){\r\n\t\t\t\tdata = JSON.parse(data);\r\n\t\t\t}\r\n\r\n\t\t\tthis.rowManager.addRows(data, pos, index)\r\n\t\t\t.then((rows)=>{\r\n\t\t\t\t//recalc column calculations if present\r\n\t\t\t\tif(this.modExists(\"columnCalcs\")){\r\n\t\t\t\t\tthis.modules.columnCalcs.recalc(this.rowManager.activeRows);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tresolve(rows[0].getComponent());\r\n\t\t\t});\r\n\t\t});\r\n\t}\r\n\r\n\t//update a row if it exitsts otherwise create it\r\n\tupdateOrAddRow(index, data){\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tvar row = this.rowManager.findRow(index);\r\n\r\n\t\t\tif(typeof data === \"string\"){\r\n\t\t\t\tdata = JSON.parse(data);\r\n\t\t\t}\r\n\r\n\t\t\tif(row){\r\n\t\t\t\trow.updateData(data)\r\n\t\t\t\t.then(()=>{\r\n\t\t\t\t\t//recalc column calculations if present\r\n\t\t\t\t\tif(this.modExists(\"columnCalcs\")){\r\n\t\t\t\t\t\tthis.modules.columnCalcs.recalc(this.rowManager.activeRows);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tresolve(row.getComponent());\r\n\t\t\t\t})\r\n\t\t\t\t.catch((err)=>{\r\n\t\t\t\t\treject(err);\r\n\t\t\t\t});\r\n\t\t\t}else{\r\n\t\t\t\trow = this.rowManager.addRows(data)\r\n\t\t\t\t.then((rows)=>{\r\n\t\t\t\t\t//recalc column calculations if present\r\n\t\t\t\t\tif(this.modExists(\"columnCalcs\")){\r\n\t\t\t\t\t\tthis.modules.columnCalcs.recalc(this.rowManager.activeRows);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tresolve(rows[0].getComponent());\r\n\t\t\t\t})\r\n\t\t\t\t.catch((err)=>{\r\n\t\t\t\t\treject(err);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t//update row data\r\n\tupdateRow(index, data){\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tvar row = this.rowManager.findRow(index);\r\n\r\n\t\t\tif(typeof data === \"string\"){\r\n\t\t\t\tdata = JSON.parse(data);\r\n\t\t\t}\r\n\r\n\t\t\tif(row){\r\n\t\t\t\trow.updateData(data).then(()=>{\r\n\t\t\t\t\tresolve(row.getComponent());\r\n\t\t\t\t})\r\n\t\t\t\t.catch((err)=>{\r\n\t\t\t\t\treject(err);\r\n\t\t\t\t});\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Update Error - No matching row found:\", index);\r\n\t\t\t\treject(\"Update Error - No matching row found\");\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t//scroll to row in DOM\r\n\tscrollToRow(index, position, ifVisible){\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tvar row = this.rowManager.findRow(index);\r\n\r\n\t\t\tif(row){\r\n\t\t\t\tthis.rowManager.scrollToRow(row, position, ifVisible)\r\n\t\t\t\t.then(()=>{\r\n\t\t\t\t\tresolve();\r\n\t\t\t\t})\r\n\t\t\t\t.catch((err)=>{\r\n\t\t\t\t\treject(err);\r\n\t\t\t\t});\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Scroll Error - No matching row found:\", index);\r\n\t\t\t\treject(\"Scroll Error - No matching row found\");\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tmoveRow(from, to, after){\r\n\t\tvar fromRow = this.rowManager.findRow(from);\r\n\r\n\t\tif(fromRow){\r\n\t\t\tfromRow.moveToRow(to, after);\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Move Error - No matching row found:\", from);\r\n\t\t}\r\n\t}\r\n\r\n\tgetRows(active){\r\n\t\treturn this.rowManager.getComponents(active);\r\n\t}\r\n\r\n\t//get position of row in table\r\n\tgetRowPosition(index, active){\r\n\t\tvar row = this.rowManager.findRow(index);\r\n\r\n\t\tif(row){\r\n\t\t\treturn this.rowManager.getRowPosition(row, active);\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Position Error - No matching row found:\", index);\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\t//copy table data to clipboard\r\n\tcopyToClipboard(selector){\r\n\t\tif(this.modExists(\"clipboard\", true)){\r\n\t\t\tthis.modules.clipboard.copy(selector);\r\n\t\t}\r\n\t}\r\n\r\n\t/////////////// Column Functions ///////////////\r\n\tsetColumns(definition){\r\n\t\tthis.columnManager.setColumns(definition);\r\n\t}\r\n\r\n\tgetColumns(structured){\r\n\t\treturn this.columnManager.getComponents(structured);\r\n\t}\r\n\r\n\tgetColumn(field){\r\n\t\tvar col = this.columnManager.findColumn(field);\r\n\r\n\t\tif(col){\r\n\t\t\treturn col.getComponent();\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Find Error - No matching column found:\", field);\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\tgetColumnDefinitions(){\r\n\t\treturn this.columnManager.getDefinitionTree();\r\n\t}\r\n\r\n\tgetColumnLayout(){\r\n\t\tif(this.modExists(\"persistence\", true)){\r\n\t\t\treturn this.modules.persistence.parseColumns(this.columnManager.getColumns());\r\n\t\t}\r\n\t}\r\n\r\n\tsetColumnLayout(layout){\r\n\t\tif(this.modExists(\"persistence\", true)){\r\n\t\t\tthis.columnManager.setColumns(this.modules.persistence.mergeDefinition(this.options.columns, layout))\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn false;\r\n\t}\r\n\r\n\tshowColumn(field){\r\n\t\tvar column = this.columnManager.findColumn(field);\r\n\r\n\t\tif(column){\r\n\t\t\tcolumn.show();\r\n\r\n\t\t\tif(this.options.responsiveLayout && this.modExists(\"responsiveLayout\", true)){\r\n\t\t\t\tthis.modules.responsiveLayout.update();\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Column Show Error - No matching column found:\", field);\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\thideColumn(field){\r\n\t\tvar column = this.columnManager.findColumn(field);\r\n\r\n\t\tif(column){\r\n\t\t\tcolumn.hide();\r\n\r\n\t\t\tif(this.options.responsiveLayout && this.modExists(\"responsiveLayout\", true)){\r\n\t\t\t\tthis.modules.responsiveLayout.update();\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Column Hide Error - No matching column found:\", field);\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\ttoggleColumn(field){\r\n\t\tvar column = this.columnManager.findColumn(field);\r\n\r\n\t\tif(column){\r\n\t\t\tif(column.visible){\r\n\t\t\t\tcolumn.hide();\r\n\t\t\t}else{\r\n\t\t\t\tcolumn.show();\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Column Visibility Toggle Error - No matching column found:\", field);\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\taddColumn(definition, before, field){\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tvar column = this.columnManager.findColumn(field);\r\n\r\n\t\t\tthis.columnManager.addColumn(definition, before, column)\r\n\t\t\t.then((column) => {\r\n\t\t\t\tresolve(column.getComponent());\r\n\t\t\t}).catch((err) => {\r\n\t\t\t\treject(err);\r\n\t\t\t});\r\n\t\t});\r\n\t}\r\n\r\n\tdeleteColumn(field){\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tvar column = this.columnManager.findColumn(field);\r\n\r\n\t\t\tif(column){\r\n\t\t\t\tcolumn.delete()\r\n\t\t\t\t.then(() => {\r\n\t\t\t\t\tresolve();\r\n\t\t\t\t}).catch((err) => {\r\n\t\t\t\t\treject(err);\r\n\t\t\t\t});\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Column Delete Error - No matching column found:\", field);\r\n\t\t\t\treject();\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tupdateColumnDefinition(field, definition){\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tvar column = this.columnManager.findColumn(field);\r\n\r\n\t\t\tif(column){\r\n\t\t\t\tcolumn.updateDefinition(definition)\r\n\t\t\t\t.then((col) => {\r\n\t\t\t\t\tresolve(col);\r\n\t\t\t\t}).catch((err) => {\r\n\t\t\t\t\treject(err);\r\n\t\t\t\t});\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Column Update Error - No matching column found:\", field);\r\n\t\t\t\treject();\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tmoveColumn(from, to, after){\r\n\t\tvar fromColumn = this.columnManager.findColumn(from);\r\n\t\tvar toColumn = this.columnManager.findColumn(to);\r\n\r\n\t\tif(fromColumn){\r\n\t\t\tif(toColumn){\r\n\t\t\t\tthis.columnManager.moveColumn(fromColumn, toColumn, after)\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Move Error - No matching column found:\", toColumn);\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Move Error - No matching column found:\", from);\r\n\t\t}\r\n\t}\r\n\r\n\t//scroll to column in DOM\r\n\tscrollToColumn(field, position, ifVisible){\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tvar column = this.columnManager.findColumn(field);\r\n\r\n\t\t\tif(column){\r\n\t\t\t\tthis.columnManager.scrollToColumn(column, position, ifVisible)\r\n\t\t\t\t.then(()=>{\r\n\t\t\t\t\tresolve();\r\n\t\t\t\t})\r\n\t\t\t\t.catch((err)=>{\r\n\t\t\t\t\treject(err);\r\n\t\t\t\t});\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Scroll Error - No matching column found:\", field);\r\n\t\t\t\treject(\"Scroll Error - No matching column found\");\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t//////////// Localization Functions ////////////\r\n\tsetLocale(locale){\r\n\t\tthis.modules.localize.setLocale(locale);\r\n\t}\r\n\r\n\tgetLocale(){\r\n\t\treturn this.modules.localize.getLocale();\r\n\t}\r\n\r\n\tgetLang(locale){\r\n\t\treturn this.modules.localize.getLang(locale);\r\n\t}\r\n\r\n\t//////////// General Public Functions ////////////\r\n\t//redraw list without updating data\r\n\tredraw(force){\r\n\t\tthis.columnManager.redraw(force);\r\n\t\tthis.rowManager.redraw(force);\r\n\t}\r\n\r\n\tsetHeight(height){\r\n\r\n\t\tif(this.rowManager.renderMode !== \"classic\"){\r\n\t\t\tthis.options.height = isNaN(height) ? height : height + \"px\";\r\n\t\t\tthis.element.style.height = this.options.height;\r\n\t\t\tthis.rowManager.setRenderMode();\r\n\t\t\tthis.rowManager.redraw();\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"setHeight function is not available in classic render mode\");\r\n\t\t}\r\n\t}\r\n\r\n\t///////////////////// Sorting ////////////////////\r\n\tsetSort(sortList, dir){\r\n\t\tif(this.modExists(\"sort\", true)){\r\n\t\t\tthis.modules.sort.setSort(sortList, dir);\r\n\t\t\tthis.rowManager.sorterRefresh();\r\n\t\t}\r\n\t}\r\n\r\n\tgetSorters(){\r\n\t\tif(this.modExists(\"sort\", true)){\r\n\t\t\treturn this.modules.sort.getSort();\r\n\t\t}\r\n\t}\r\n\r\n\tclearSort(){\r\n\t\tif(this.modExists(\"sort\", true)){\r\n\t\t\tthis.modules.sort.clear();\r\n\t\t\tthis.rowManager.sorterRefresh();\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t///////////////////// Filtering ////////////////////\r\n\r\n\t//set standard filters\r\n\tsetFilter(field, type, value, params){\r\n\t\tif(this.modExists(\"filter\", true)){\r\n\t\t\tthis.modules.filter.setFilter(field, type, value, params);\r\n\t\t\tthis.rowManager.filterRefresh();\r\n\t\t}\r\n\t}\r\n\r\n\t//set standard filters\r\n\trefreshFilter(){\r\n\t\tif(this.modExists(\"filter\", true)){\r\n\t\t\tthis.rowManager.filterRefresh();\r\n\t\t}\r\n\t}\r\n\r\n\t//add filter to array\r\n\taddFilter(field, type, value, params){\r\n\t\tif(this.modExists(\"filter\", true)){\r\n\t\t\tthis.modules.filter.addFilter(field, type, value, params);\r\n\t\t\tthis.rowManager.filterRefresh();\r\n\t\t}\r\n\t}\r\n\r\n\t//get all filters\r\n\tgetFilters(all){\r\n\t\tif(this.modExists(\"filter\", true)){\r\n\t\t\treturn this.modules.filter.getFilters(all);\r\n\t\t}\r\n\t}\r\n\r\n\tsetHeaderFilterFocus(field){\r\n\t\tif(this.modExists(\"filter\", true)){\r\n\t\t\tvar column = this.columnManager.findColumn(field);\r\n\r\n\t\t\tif(column){\r\n\t\t\t\tthis.modules.filter.setHeaderFilterFocus(column);\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Column Filter Focus Error - No matching column found:\", field);\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tgetHeaderFilterValue(field) {\r\n\t\tif(this.modExists(\"filter\", true)){\r\n\t\t\tvar column = this.columnManager.findColumn(field);\r\n\r\n\t\t\tif(column){\r\n\t\t\t\treturn this.modules.filter.getHeaderFilterValue(column);\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Column Filter Error - No matching column found:\", field);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tsetHeaderFilterValue(field, value){\r\n\t\tif(this.modExists(\"filter\", true)){\r\n\t\t\tvar column = this.columnManager.findColumn(field);\r\n\r\n\t\t\tif(column){\r\n\t\t\t\tthis.modules.filter.setHeaderFilterValue(column, value);\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Column Filter Error - No matching column found:\", field);\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tgetHeaderFilters(){\r\n\t\tif(this.modExists(\"filter\", true)){\r\n\t\t\treturn this.modules.filter.getHeaderFilters();\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t//remove filter from array\r\n\tremoveFilter(field, type, value){\r\n\t\tif(this.modExists(\"filter\", true)){\r\n\t\t\tthis.modules.filter.removeFilter(field, type, value);\r\n\t\t\tthis.rowManager.filterRefresh();\r\n\t\t}\r\n\t}\r\n\r\n\t//clear filters\r\n\tclearFilter(all){\r\n\t\tif(this.modExists(\"filter\", true)){\r\n\t\t\tthis.modules.filter.clearFilter(all);\r\n\t\t\tthis.rowManager.filterRefresh();\r\n\t\t}\r\n\t}\r\n\r\n\t//clear header filters\r\n\tclearHeaderFilter(){\r\n\t\tif(this.modExists(\"filter\", true)){\r\n\t\t\tthis.modules.filter.clearHeaderFilter();\r\n\t\t\tthis.rowManager.filterRefresh();\r\n\t\t}\r\n\t}\r\n\r\n\t///////////////////// select ////////////////////\r\n\tselectRow(rows){\r\n\t\tif(this.modExists(\"selectRow\", true)){\r\n\t\t\tthis.modules.selectRow.selectRows(rows);\r\n\t\t}\r\n\t}\r\n\r\n\tdeselectRow(rows){\r\n\t\tif(this.modExists(\"selectRow\", true)){\r\n\t\t\tthis.modules.selectRow.deselectRows(rows);\r\n\t\t}\r\n\t}\r\n\r\n\ttoggleSelectRow(row){\r\n\t\tif(this.modExists(\"selectRow\", true)){\r\n\t\t\tthis.modules.selectRow.toggleRow(row);\r\n\t\t}\r\n\t}\r\n\r\n\tgetSelectedRows(){\r\n\t\tif(this.modExists(\"selectRow\", true)){\r\n\t\t\treturn this.modules.selectRow.getSelectedRows();\r\n\t\t}\r\n\t}\r\n\r\n\tgetSelectedData(){\r\n\t\tif(this.modExists(\"selectRow\", true)){\r\n\t\t\treturn this.modules.selectRow.getSelectedData();\r\n\t\t}\r\n\t}\r\n\r\n\t///////////////////// validation ////////////////////\r\n\tgetInvalidCells(){\r\n\t\tif(this.modExists(\"validate\", true)){\r\n\t\t\treturn this.modules.validate.getInvalidCells();\r\n\t\t}\r\n\t}\r\n\r\n\tclearCellValidation(cells){\r\n\r\n\t\tif(this.modExists(\"validate\", true)){\r\n\r\n\t\t\tif(!cells){\r\n\t\t\t\tcells = this.modules.validate.getInvalidCells();\r\n\t\t\t}\r\n\r\n\t\t\tif(!Array.isArray(cells)){\r\n\t\t\t\tcells = [cells];\r\n\t\t\t}\r\n\r\n\t\t\tcells.forEach((cell) => {\r\n\t\t\t\tthis.modules.validate.clearValidation(cell._getSelf());\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tvalidate(cells){\r\n\t\tvar output = [];\r\n\r\n\t\t//clear row data\r\n\t\tthis.rowManager.rows.forEach(function(row){\r\n\t\t\tvar valid = row.validate();\r\n\r\n\t\t\tif(valid !== true){\r\n\t\t\t\toutput = output.concat(valid);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn output.length ? output : true;\r\n\t}\r\n\r\n\t//////////// Pagination Functions ////////////\r\n\tsetMaxPage(max){\r\n\t\tif(this.options.pagination && this.modExists(\"page\")){\r\n\t\t\tthis.modules.page.setMaxPage(max);\r\n\t\t}else{\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\tsetPage(page){\r\n\t\tif(this.options.pagination && this.modExists(\"page\")){\r\n\t\t\treturn this.modules.page.setPage(page);\r\n\t\t}else{\r\n\t\t\treturn new Promise((resolve, reject) => { reject() });\r\n\t\t}\r\n\t}\r\n\r\n\tsetPageToRow(row){\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tif(this.options.pagination && this.modExists(\"page\")){\r\n\t\t\t\trow = this.rowManager.findRow(row);\r\n\r\n\t\t\t\tif(row){\r\n\t\t\t\t\tthis.modules.page.setPageToRow(row)\r\n\t\t\t\t\t.then(()=>{\r\n\t\t\t\t\t\tresolve();\r\n\t\t\t\t\t})\r\n\t\t\t\t\t.catch(()=>{\r\n\t\t\t\t\t\treject();\r\n\t\t\t\t\t});\r\n\t\t\t\t}else{\r\n\t\t\t\t\treject();\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\treject();\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tsetPageSize(size){\r\n\t\tif(this.options.pagination && this.modExists(\"page\")){\r\n\t\t\tthis.modules.page.setPageSize(size);\r\n\t\t\tthis.modules.page.setPage(1).then(()=>{}).catch(()=>{});\r\n\t\t}else{\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\tgetPageSize(){\r\n\t\tif(this.options.pagination && this.modExists(\"page\", true)){\r\n\t\t\treturn this.modules.page.getPageSize();\r\n\t\t}\r\n\t}\r\n\r\n\tpreviousPage(){\r\n\t\tif(this.options.pagination && this.modExists(\"page\")){\r\n\t\t\tthis.modules.page.previousPage();\r\n\t\t}else{\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\tnextPage(){\r\n\t\tif(this.options.pagination && this.modExists(\"page\")){\r\n\t\t\tthis.modules.page.nextPage();\r\n\t\t}else{\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\tgetPage(){\r\n\t\tif(this.options.pagination && this.modExists(\"page\")){\r\n\t\t\treturn this.modules.page.getPage();\r\n\t\t}else{\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\tgetPageMax(){\r\n\t\tif(this.options.pagination && this.modExists(\"page\")){\r\n\t\t\treturn this.modules.page.getPageMax();\r\n\t\t}else{\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\t///////////////// Grouping Functions ///////////////\r\n\tsetGroupBy(groups){\r\n\t\tif(this.modExists(\"groupRows\", true)){\r\n\t\t\tthis.options.groupBy = groups;\r\n\t\t\tthis.modules.groupRows.initialize();\r\n\t\t\tthis.rowManager.refreshActiveData(\"display\");\r\n\r\n\t\t\tif(this.options.persistence && this.modExists(\"persistence\", true) && this.modules.persistence.config.group){\r\n\t\t\t\tthis.modules.persistence.save(\"group\");\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\tsetGroupValues(groupValues){\r\n\t\tif(this.modExists(\"groupRows\", true)){\r\n\t\t\tthis.options.groupValues = groupValues;\r\n\t\t\tthis.modules.groupRows.initialize();\r\n\t\t\tthis.rowManager.refreshActiveData(\"display\");\r\n\r\n\t\t\tif(this.options.persistence && this.modExists(\"persistence\", true) && this.modules.persistence.config.group){\r\n\t\t\t\tthis.modules.persistence.save(\"group\");\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\tsetGroupStartOpen(values){\r\n\t\tif(this.modExists(\"groupRows\", true)){\r\n\t\t\tthis.options.groupStartOpen = values;\r\n\t\t\tthis.modules.groupRows.initialize();\r\n\t\t\tif(this.options.groupBy){\r\n\t\t\t\tthis.rowManager.refreshActiveData(\"group\");\r\n\r\n\t\t\t\tif(this.options.persistence && this.modExists(\"persistence\", true) && this.modules.persistence.config.group){\r\n\t\t\t\t\tthis.modules.persistence.save(\"group\");\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Grouping Update - cant refresh view, no groups have been set\");\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\tsetGroupHeader(values){\r\n\t\tif(this.modExists(\"groupRows\", true)){\r\n\t\t\tthis.options.groupHeader = values;\r\n\t\t\tthis.modules.groupRows.initialize();\r\n\t\t\tif(this.options.groupBy){\r\n\t\t\t\tthis.rowManager.refreshActiveData(\"group\");\r\n\r\n\t\t\t\tif(this.options.persistence && this.modExists(\"persistence\", true) && this.modules.persistence.config.group){\r\n\t\t\t\t\tthis.modules.persistence.save(\"group\");\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Grouping Update - cant refresh view, no groups have been set\");\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\tgetGroups(values){\r\n\t\tif(this.modExists(\"groupRows\", true)){\r\n\t\t\treturn this.modules.groupRows.getGroups(true);\r\n\t\t}else{\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\t// get grouped table data in the same format as getData()\r\n\tgetGroupedData(){\r\n\t\tif (this.modExists(\"groupRows\", true)){\r\n\t\t\treturn this.options.groupBy ?\r\n\t\t\tthis.modules.groupRows.getGroupedData() : this.getData()\r\n\t\t}\r\n\t}\r\n\r\n\tgetEditedCells(){\r\n\t\tif(this.modExists(\"edit\", true)){\r\n\t\t\treturn this.modules.edit.getEditedCells();\r\n\t\t}\r\n\t}\r\n\r\n\tclearCellEdited(cells){\r\n\t\tif(this.modExists(\"edit\", true)){\r\n\r\n\t\t\tif(!cells){\r\n\t\t\t\tcells = this.modules.edit.getEditedCells();\r\n\t\t\t}\r\n\r\n\t\t\tif(!Array.isArray(cells)){\r\n\t\t\t\tcells = [cells];\r\n\t\t\t}\r\n\r\n\t\t\tcells.forEach((cell) => {\r\n\t\t\t\tthis.modules.edit.clearEdited(cell._getSelf());\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\t///////////////// Column Calculation Functions ///////////////\r\n\tgetCalcResults(){\r\n\t\tif(this.modExists(\"columnCalcs\", true)){\r\n\t\t\treturn this.modules.columnCalcs.getResults();\r\n\t\t}else{\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\trecalc(){\r\n\t\tif(this.modExists(\"columnCalcs\", true)){\r\n\t\t\tthis.modules.columnCalcs.recalcAll(this.rowManager.activeRows);\r\n\t\t}\r\n\t}\r\n\r\n\t/////////////// Navigation Management //////////////\r\n\tnavigatePrev(){\r\n\t\tvar cell = false;\r\n\r\n\t\tif(this.modExists(\"edit\", true)){\r\n\t\t\tcell = this.modules.edit.currentCell;\r\n\r\n\t\t\tif(cell){\r\n\t\t\t\treturn cell.nav().prev();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t}\r\n\r\n\tnavigateNext(){\r\n\t\tvar cell = false;\r\n\r\n\t\tif(this.modExists(\"edit\", true)){\r\n\t\t\tcell = this.modules.edit.currentCell;\r\n\r\n\t\t\tif(cell){\r\n\t\t\t\treturn cell.nav().next();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t}\r\n\r\n\tnavigateLeft(){\r\n\t\tvar cell = false;\r\n\r\n\t\tif(this.modExists(\"edit\", true)){\r\n\t\t\tcell = this.modules.edit.currentCell;\r\n\r\n\t\t\tif(cell){\r\n\t\t\t\te.preventDefault();\r\n\t\t\t\treturn cell.nav().left();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t}\r\n\r\n\tnavigateRight(){\r\n\t\tvar cell = false;\r\n\r\n\t\tif(this.modExists(\"edit\", true)){\r\n\t\t\tcell = this.modules.edit.currentCell;\r\n\r\n\t\t\tif(cell){\r\n\t\t\t\te.preventDefault();\r\n\t\t\t\treturn cell.nav().right();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t}\r\n\r\n\tnavigateUp(){\r\n\t\tvar cell = false;\r\n\r\n\t\tif(this.modExists(\"edit\", true)){\r\n\t\t\tcell = this.modules.edit.currentCell;\r\n\r\n\t\t\tif(cell){\r\n\t\t\t\te.preventDefault();\r\n\t\t\t\treturn cell.nav().up();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t}\r\n\r\n\tnavigateDown(){\r\n\t\tvar cell = false;\r\n\r\n\t\tif(this.modExists(\"edit\", true)){\r\n\t\t\tcell = this.modules.edit.currentCell;\r\n\r\n\t\t\tif(cell){\r\n\t\t\t\te.preventDefault();\r\n\t\t\t\treturn cell.nav().down();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t}\r\n\r\n\t/////////////// History Management //////////////\r\n\tundo(){\r\n\t\tif(this.options.history && this.modExists(\"history\", true)){\r\n\t\t\treturn this.modules.history.undo();\r\n\t\t}else{\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\tredo(){\r\n\t\tif(this.options.history && this.modExists(\"history\", true)){\r\n\t\t\treturn this.modules.history.redo();\r\n\t\t}else{\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\tgetHistoryUndoSize(){\r\n\t\tif(this.options.history && this.modExists(\"history\", true)){\r\n\t\t\treturn this.modules.history.getHistoryUndoSize();\r\n\t\t}else{\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\tgetHistoryRedoSize(){\r\n\t\tif(this.options.history && this.modExists(\"history\", true)){\r\n\t\t\treturn this.modules.history.getHistoryRedoSize();\r\n\t\t}else{\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\tclearHistory(){\r\n\t\tif(this.options.history && this.modExists(\"history\", true)){\r\n\t\t\treturn this.modules.history.clear();\r\n\t\t}else{\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\t/////////////// Download Management //////////////\r\n\tdownload(type, filename, options, active){\r\n\t\tif(this.modExists(\"download\", true)){\r\n\t\t\tthis.modules.download.download(type, filename, options, active);\r\n\t\t}\r\n\t}\r\n\r\n\tdownloadToTab(type, filename, options, active){\r\n\t\tif(this.modExists(\"download\", true)){\r\n\t\t\tthis.modules.download.download(type, filename, options, active, true);\r\n\t\t}\r\n\t}\r\n\r\n\t/////////// Inter Table Communications ///////////\r\n\ttableComms(table, module, action, data){\r\n\t\tthis.modules.comms.receive(table, module, action, data);\r\n\t}\r\n\r\n\t////////////// Extension Management //////////////\r\n\tmodExists(plugin, required){\r\n\t\tif(this.modules[plugin]){\r\n\t\t\treturn true;\r\n\t\t}else{\r\n\t\t\tif(required){\r\n\t\t\t\tconsole.error(\"Tabulator Module Not Installed: \" + plugin);\r\n\t\t\t}\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n}\r\n\r\n//default setup options\r\nTabulator.defaultOptions = defaultOptions;\r\n\r\n//bind modules and static functionality\r\nnew ModuleBinder(Tabulator);\r\n\r\nexport default Tabulator;","export default {}","import Module from '../../core/Module.js';\r\nimport Helpers from '../../core/Helpers.js';\r\n\r\nimport defautlAccessors from './defaults/accessors.js';\r\n\r\nclass Accessor extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.allowedTypes = [\"\", \"data\", \"download\", \"clipboard\", \"print\", \"htmlOutput\"] //list of accessor types\r\n\t}\r\n\r\n\t//initialize column accessor\r\n\tinitializeColumn(column){\r\n\t\tvar match = false,\r\n\t\tconfig = {};\r\n\r\n\t\tthis.allowedTypes.forEach(function(type){\r\n\t\t\tvar key = \"accessor\" + (type.charAt(0).toUpperCase() + type.slice(1)),\r\n\t\t\taccessor;\r\n\r\n\t\t\tif(column.definition[key]){\r\n\t\t\t\taccessor = this.lookupAccessor(column.definition[key]);\r\n\r\n\t\t\t\tif(accessor){\r\n\t\t\t\t\tmatch = true;\r\n\r\n\t\t\t\t\tconfig[key] = {\r\n\t\t\t\t\t\taccessor:accessor,\r\n\t\t\t\t\t\tparams: column.definition[key + \"Params\"] || {},\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tif(match){\r\n\t\t\tcolumn.modules.accessor = config;\r\n\t\t}\r\n\t}\r\n\r\n\tlookupAccessor(value){\r\n\t\tvar accessor = false;\r\n\r\n\t\t//set column accessor\r\n\t\tswitch(typeof value){\r\n\t\t\tcase \"string\":\r\n\t\t\tif(Accessor.accessors[value]){\r\n\t\t\t\taccessor = Accessor.accessors[value]\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Accessor Error - No such accessor found, ignoring: \", value);\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"function\":\r\n\t\t\taccessor = value;\r\n\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\treturn accessor;\r\n\t}\r\n\r\n\t//apply accessor to row\r\n\ttransformRow(row, type){\r\n\t\tvar key = \"accessor\" + (type.charAt(0).toUpperCase() + type.slice(1)),\r\n\t\trowComponent = row.getComponent();\r\n\r\n\t\t//clone data object with deep copy to isolate internal data from returned result\r\n\t\tvar data = Helpers.deepClone(row.data || {});\r\n\r\n\t\tthis.table.columnManager.traverse(function(column){\r\n\t\t\tvar value, accessor, params, colCompnent;\r\n\r\n\t\t\tif(column.modules.accessor){\r\n\r\n\t\t\t\taccessor = column.modules.accessor[key] || column.modules.accessor.accessor || false;\r\n\r\n\t\t\t\tif(accessor){\r\n\t\t\t\t\tvalue = column.getFieldValue(data);\r\n\r\n\t\t\t\t\tif(value != \"undefined\"){\r\n\t\t\t\t\t\tcolCompnent = column.getComponent();\r\n\t\t\t\t\t\tparams = typeof accessor.params === \"function\" ? accessor.params(value, data, type, colCompnent, rowComponent) : accessor.params;\r\n\t\t\t\t\t\tcolumn.setFieldValue(data, accessor.accessor(value, data, type, params, colCompnent, rowComponent));\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn data;\r\n\t}\r\n}\r\n\r\n//load defaults\r\nAccessor.moduleName = \"accessor\";\r\nAccessor.accessors = defautlAccessors;\r\n\r\nexport default Accessor;","export default {\r\n\tmethod: \"GET\",\r\n};","export default function(url, config, params){\r\n\tif(url){\r\n\t\tif(params && Object.keys(params).length){\r\n\t\t\tif(!config.method || config.method.toLowerCase() == \"get\"){\r\n\t\t\t\tconfig.method = \"get\";\r\n\r\n\t\t\t\turl += (url.includes(\"?\") ? \"&\" : \"?\") + this.modules.ajax.serializeParams(params);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\treturn url;\r\n};","export default function(url, config, params){\r\n\tvar contentType;\r\n\r\n\treturn new Promise((resolve, reject) => {\r\n\t\t//set url\r\n\t\turl = this.urlGenerator.call(this.table, url, config, params);\r\n\r\n\t\t//set body content if not GET request\r\n\t\tif(config.method.toUpperCase() != \"GET\"){\r\n\t\t\tcontentType = typeof this.table.options.ajaxContentType === \"object\" ? this.table.options.ajaxContentType : this.contentTypeFormatters[this.table.options.ajaxContentType];\r\n\t\t\tif(contentType){\r\n\r\n\t\t\t\tfor(var key in contentType.headers){\r\n\t\t\t\t\tif(!config.headers){\r\n\t\t\t\t\t\tconfig.headers = {};\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif(typeof config.headers[key] === \"undefined\"){\r\n\t\t\t\t\t\tconfig.headers[key] = contentType.headers[key];\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tconfig.body = contentType.body.call(this, url, config, params);\r\n\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Ajax Error - Invalid ajaxContentType value:\", this.table.options.ajaxContentType);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(url){\r\n\t\t\t//configure headers\r\n\t\t\tif(typeof config.headers === \"undefined\"){\r\n\t\t\t\tconfig.headers = {};\r\n\t\t\t}\r\n\r\n\t\t\tif(typeof config.headers.Accept === \"undefined\"){\r\n\t\t\t\tconfig.headers.Accept = \"application/json\";\r\n\t\t\t}\r\n\r\n\t\t\tif(typeof config.headers[\"X-Requested-With\"] === \"undefined\"){\r\n\t\t\t\tconfig.headers[\"X-Requested-With\"] = \"XMLHttpRequest\";\r\n\t\t\t}\r\n\r\n\t\t\tif(typeof config.mode === \"undefined\"){\r\n\t\t\t\tconfig.mode = \"cors\";\r\n\t\t\t}\r\n\r\n\t\t\tif(config.mode == \"cors\"){\r\n\r\n\t\t\t\tif(typeof config.headers[\"Access-Control-Allow-Origin\"] === \"undefined\"){\r\n\t\t\t\t\tconfig.headers[\"Access-Control-Allow-Origin\"] = window.location.origin;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(typeof config.credentials === \"undefined\"){\r\n\t\t\t\t\tconfig.credentials = 'same-origin';\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tif(typeof config.credentials === \"undefined\"){\r\n\t\t\t\t\tconfig.credentials = 'include';\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t//send request\r\n\t\t\tfetch(url, config)\r\n\t\t\t.then((response)=>{\r\n\t\t\t\tif(response.ok) {\r\n\t\t\t\t\tresponse.json()\r\n\t\t\t\t\t.then((data)=>{\r\n\t\t\t\t\t\tresolve(data);\r\n\t\t\t\t\t}).catch((error)=>{\r\n\t\t\t\t\t\treject(error);\r\n\t\t\t\t\t\tconsole.warn(\"Ajax Load Error - Invalid JSON returned\", error);\r\n\t\t\t\t\t});\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.error(\"Ajax Load Error - Connection Error: \" + response.status, response.statusText);\r\n\t\t\t\t\treject(response);\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t\t.catch((error)=>{\r\n\t\t\t\tconsole.error(\"Ajax Load Error - Connection Error: \", error);\r\n\t\t\t\treject(error);\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Ajax Load Error - No URL Set\");\r\n\t\t\tresolve([]);\r\n\t\t}\r\n\t});\r\n};","export default {\r\n\t\"json\":{\r\n\t\theaders:{\r\n\t\t\t'Content-Type': 'application/json',\r\n\t\t},\r\n\t\tbody:function(url, config, params){\r\n\t\t\treturn JSON.stringify(params);\r\n\t\t},\r\n\t},\r\n\t\"form\":{\r\n\t\theaders:{\r\n\t\t},\r\n\t\tbody:function(url, config, params){\r\n\t\t\tvar output = this.generateParamsList(params),\r\n\t\t\tform = new FormData();\r\n\r\n\t\t\toutput.forEach(function(item){\r\n\t\t\t\tform.append(item.key, item.value);\r\n\t\t\t});\r\n\r\n\t\t\treturn form;\r\n\t\t},\r\n\t},\r\n};","import Module from '../../core/Module.js';\r\n\r\nimport defaultConfig from './defaults/config.js';\r\nimport defaultURLGenerator from './defaults/urlGenerator.js';\r\nimport defaultLoaderPromise from './defaults/loaderPromise.js';\r\nimport defaultContentTypeFormatters from './defaults/contentTypeFormatters.js';\r\n\r\nclass Ajax extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.config = false; //hold config object for ajax request\r\n\t\tthis.url = \"\"; //request URL\r\n\t\tthis.urlGenerator = false;\r\n\t\tthis.params = false; //request parameters\r\n\r\n\t\tthis.loaderElement = this.createLoaderElement(); //loader message div\r\n\t\tthis.msgElement = this.createMsgElement(); //message element\r\n\t\tthis.loadingElement = false;\r\n\t\tthis.errorElement = false;\r\n\t\tthis.loaderPromise = false;\r\n\r\n\t\tthis.progressiveLoad = false;\r\n\t\tthis.loading = false;\r\n\r\n\t\tthis.requestOrder = 0; //prevent requests comming out of sequence if overridden by another load request\r\n\t}\r\n\r\n\t//initialize setup options\r\n\tinitialize(){\r\n\t\tvar template;\r\n\r\n\t\tthis.loaderElement.appendChild(this.msgElement);\r\n\r\n\t\tif(this.table.options.ajaxLoaderLoading){\r\n\t\t\tif(typeof this.table.options.ajaxLoaderLoading == \"string\"){\r\n\t\t\t\ttemplate = document.createElement('template');\r\n\t\t\t\ttemplate.innerHTML = this.table.options.ajaxLoaderLoading.trim();\r\n\t\t\t\tthis.loadingElement = template.content.firstChild;\r\n\t\t\t}else{\r\n\t\t\t\tthis.loadingElement = this.table.options.ajaxLoaderLoading;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.loaderPromise = this.table.options.ajaxRequestFunc || Ajax.defaultLoaderPromise;\r\n\r\n\t\tthis.urlGenerator = this.table.options.ajaxURLGenerator || Ajax.defaultURLGenerator;\r\n\r\n\t\tif(this.table.options.ajaxLoaderError){\r\n\t\t\tif(typeof this.table.options.ajaxLoaderError == \"string\"){\r\n\t\t\t\ttemplate = document.createElement('template');\r\n\t\t\t\ttemplate.innerHTML = this.table.options.ajaxLoaderError.trim();\r\n\t\t\t\tthis.errorElement = template.content.firstChild;\r\n\t\t\t}else{\r\n\t\t\t\tthis.errorElement = this.table.options.ajaxLoaderError;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(this.table.options.ajaxParams){\r\n\t\t\tthis.setParams(this.table.options.ajaxParams);\r\n\t\t}\r\n\r\n\t\tif(this.table.options.ajaxConfig){\r\n\t\t\tthis.setConfig(this.table.options.ajaxConfig);\r\n\t\t}\r\n\r\n\t\tif(this.table.options.ajaxURL){\r\n\t\t\tthis.setUrl(this.table.options.ajaxURL);\r\n\t\t}\r\n\r\n\t\tif(this.table.options.ajaxProgressiveLoad){\r\n\t\t\tif(this.table.options.pagination){\r\n\t\t\t\tthis.progressiveLoad = false;\r\n\t\t\t\tconsole.error(\"Progressive Load Error - Pagination and progressive load cannot be used at the same time\");\r\n\t\t\t}else{\r\n\t\t\t\tif(this.table.modExists(\"page\")){\r\n\t\t\t\t\tthis.progressiveLoad = this.table.options.ajaxProgressiveLoad;\r\n\t\t\t\t\tthis.table.modules.page.initializeProgressive(this.progressiveLoad);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.error(\"Pagination plugin is required for progressive ajax loading\");\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tcreateLoaderElement(){\r\n\t\tvar el = document.createElement(\"div\");\r\n\t\tel.classList.add(\"tabulator-loader\");\r\n\t\treturn el;\r\n\t}\r\n\r\n\tcreateMsgElement(){\r\n\t\tvar el = document.createElement(\"div\");\r\n\r\n\t\tel.classList.add(\"tabulator-loader-msg\");\r\n\t\tel.setAttribute(\"role\", \"alert\");\r\n\r\n\t\treturn el;\r\n\t}\r\n\r\n\t//set ajax params\r\n\tsetParams(params, update){\r\n\t\tif(update){\r\n\t\t\tthis.params = this.params || {};\r\n\r\n\t\t\tfor(let key in params){\r\n\t\t\t\tthis.params[key] = params[key];\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tthis.params = params;\r\n\t\t}\r\n\t}\r\n\r\n\tgetParams(){\r\n\t\treturn this.params || {};\r\n\t}\r\n\r\n\t//load config object\r\n\tsetConfig(config){\r\n\t\tthis._loadDefaultConfig();\r\n\r\n\t\tif(typeof config == \"string\"){\r\n\t\t\tthis.config.method = config;\r\n\t\t}else{\r\n\t\t\tfor(let key in config){\r\n\t\t\t\tthis.config[key] = config[key];\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//create config object from default\r\n\t_loadDefaultConfig(force){\r\n\t\tif(!this.config || force){\r\n\r\n\t\t\tthis.config = {};\r\n\r\n\t\t\t//load base config from defaults\r\n\t\t\tfor(let key in Ajax.defaultConfig){\r\n\t\t\t\tthis.config[key] = Ajax.defaultConfig[key];\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//set request url\r\n\tsetUrl(url){\r\n\t\tthis.url = url;\r\n\t}\r\n\r\n\t//get request url\r\n\tgetUrl(){\r\n\t\treturn this.url;\r\n\t}\r\n\r\n\t//lstandard loading function\r\n\tloadData(inPosition, columnsChanged){\r\n\t\tif(this.progressiveLoad){\r\n\t\t\treturn this._loadDataProgressive();\r\n\t\t}else{\r\n\t\t\treturn this._loadDataStandard(inPosition, columnsChanged);\r\n\t\t}\r\n\t}\r\n\r\n\tnextPage(diff){\r\n\t\tvar margin;\r\n\r\n\t\tif(!this.loading){\r\n\r\n\t\t\tmargin = this.table.options.ajaxProgressiveLoadScrollMargin || (this.table.rowManager.getElement().clientHeight * 2);\r\n\r\n\t\t\tif(diff < margin){\r\n\t\t\t\tthis.table.modules.page.nextPage()\r\n\t\t\t\t.then(()=>{}).catch(()=>{});\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tblockActiveRequest(){\r\n\t\tthis.requestOrder ++;\r\n\t}\r\n\r\n\t_loadDataProgressive(){\r\n\t\tthis.table.rowManager.setData([]);\r\n\t\treturn this.table.modules.page.setPage(1);\r\n\t}\r\n\r\n\t_loadDataStandard(inPosition, columnsChanged){\r\n\t\treturn new Promise((resolve, reject)=>{\r\n\t\t\tthis.sendRequest(inPosition)\r\n\t\t\t.then((data)=>{\r\n\t\t\t\tthis.table.rowManager.setData(data, inPosition, columnsChanged)\r\n\t\t\t\t.then(()=>{\r\n\t\t\t\t\tresolve();\r\n\t\t\t\t})\r\n\t\t\t\t.catch((e)=>{\r\n\t\t\t\t\treject(e)\r\n\t\t\t\t});\r\n\t\t\t})\r\n\t\t\t.catch((e)=>{\r\n\t\t\t\treject(e)\r\n\t\t\t});\r\n\t\t});\r\n\t}\r\n\r\n\tgenerateParamsList(data, prefix){\r\n\t\tvar output = [];\r\n\r\n\t\tprefix = prefix || \"\";\r\n\r\n\t\tif(Array.isArray(data)){\r\n\t\t\tdata.forEach((item, i) => {\r\n\t\t\t\toutput = output.concat(this.generateParamsList(item, prefix ? prefix + \"[\" + i + \"]\" : i));\r\n\t\t\t});\r\n\t\t}else if (typeof data === \"object\"){\r\n\t\t\tfor (var key in data){\r\n\t\t\t\toutput = output.concat(this.generateParamsList(data[key], prefix ? prefix + \"[\" + key + \"]\" : key));\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\toutput.push({key:prefix, value:data});\r\n\t\t}\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tserializeParams(params){\r\n\t\tvar output = this.generateParamsList(params),\r\n\t\tencoded = [];\r\n\r\n\t\toutput.forEach(function(item){\r\n\t\t\tencoded.push(encodeURIComponent(item.key) + \"=\" + encodeURIComponent(item.value));\r\n\t\t});\r\n\r\n\t\treturn encoded.join(\"&\");\r\n\t}\r\n\r\n\t//send ajax request\r\n\tsendRequest(silent){\r\n\t\tvar url = this.url,\r\n\t\trequestNo, esc, query;\r\n\r\n\t\tthis.requestOrder ++;\r\n\t\trequestNo = this.requestOrder;\r\n\r\n\t\tthis._loadDefaultConfig();\r\n\r\n\t\treturn new Promise((resolve, reject)=>{\r\n\t\t\tif(this.table.options.ajaxRequesting.call(this.table, this.url, this.params) !== false){\r\n\r\n\t\t\t\tthis.loading = true;\r\n\r\n\t\t\t\tif(!silent){\r\n\t\t\t\t\tthis.showLoader();\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.loaderPromise(url, this.config, this.params).then((data)=>{\r\n\t\t\t\t\tif(requestNo === this.requestOrder){\r\n\t\t\t\t\t\tif(this.table.options.ajaxResponse){\r\n\t\t\t\t\t\t\tdata = this.table.options.ajaxResponse.call(this.table, this.url, this.params, data);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tresolve(data);\r\n\r\n\t\t\t\t\t\tthis.hideLoader();\r\n\t\t\t\t\t\tthis.loading = false;\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tconsole.warn(\"Ajax Response Blocked - An active ajax request was blocked by an attempt to change table data while the request was being made\");\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t})\r\n\t\t\t\t.catch((error)=>{\r\n\t\t\t\t\tconsole.error(\"Ajax Load Error: \", error);\r\n\t\t\t\t\tthis.table.options.ajaxError.call(this.table, error);\r\n\r\n\t\t\t\t\tthis.showError();\r\n\r\n\t\t\t\t\tsetTimeout(() => {\r\n\t\t\t\t\t\tthis.hideLoader();\r\n\t\t\t\t\t}, 3000);\r\n\r\n\t\t\t\t\tthis.loading = false;\r\n\r\n\t\t\t\t\treject(error);\r\n\t\t\t\t});\r\n\t\t\t}else{\r\n\t\t\t\treject();\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tshowLoader(){\r\n\t\tvar shouldLoad = typeof this.table.options.ajaxLoader === \"function\" ? this.table.options.ajaxLoader() : this.table.options.ajaxLoader;\r\n\r\n\t\tif(shouldLoad){\r\n\r\n\t\t\tthis.hideLoader();\r\n\r\n\t\t\twhile(this.msgElement.firstChild) this.msgElement.removeChild(this.msgElement.firstChild);\r\n\t\t\tthis.msgElement.classList.remove(\"tabulator-error\");\r\n\t\t\tthis.msgElement.classList.add(\"tabulator-loading\");\r\n\r\n\t\t\tif(this.loadingElement){\r\n\t\t\t\tthis.msgElement.appendChild(this.loadingElement);\r\n\t\t\t}else{\r\n\t\t\t\tthis.msgElement.innerHTML = this.table.modules.localize.getText(\"ajax|loading\");\r\n\t\t\t}\r\n\r\n\t\t\tthis.table.element.appendChild(this.loaderElement);\r\n\t\t}\r\n\t}\r\n\r\n\tshowError(){\r\n\t\tthis.hideLoader();\r\n\r\n\t\twhile(this.msgElement.firstChild) this.msgElement.removeChild(this.msgElement.firstChild);\r\n\t\tthis.msgElement.classList.remove(\"tabulator-loading\");\r\n\t\tthis.msgElement.classList.add(\"tabulator-error\");\r\n\r\n\t\tif(this.errorElement){\r\n\t\t\tthis.msgElement.appendChild(this.errorElement);\r\n\t\t}else{\r\n\t\t\tthis.msgElement.innerHTML = this.table.modules.localize.getText(\"ajax|error\");\r\n\t\t}\r\n\r\n\t\tthis.table.element.appendChild(this.loaderElement);\r\n\t}\r\n\r\n\thideLoader(){\r\n\t\tif(this.loaderElement.parentNode){\r\n\t\t\tthis.loaderElement.parentNode.removeChild(this.loaderElement);\r\n\t\t}\r\n\t}\r\n}\r\n\r\nAjax.moduleName = \"ajax\";\r\n\r\n//load defaults\r\nAjax.defaultConfig = defaultConfig;\r\nAjax.defaultURLGenerator = defaultURLGenerator;\r\nAjax.defaultLoaderPromise = defaultLoaderPromise;\r\nAjax.contentTypeFormatters = defaultContentTypeFormatters;\r\n\r\nexport default Ajax;","export default {\r\n\treplace:function(rows){\r\n\t\treturn this.table.setData(rows);\r\n\t},\r\n\tupdate:function(rows){\r\n\t\treturn this.table.updateOrAddData(rows);\r\n\t},\r\n\tinsert:function(rows){\r\n\t\treturn this.table.addData(rows);\r\n\t},\r\n};","export default {\r\n\ttable:function(clipboard){\r\n\t\tvar data = [],\r\n\t\tsuccess = false,\r\n\t\theaderFindSuccess = true,\r\n\t\tcolumns = this.table.columnManager.columns,\r\n\t\tcolumnMap = [],\r\n\t\trows = [];\r\n\r\n\t\t//get data from clipboard into array of columns and rows.\r\n\t\tclipboard = clipboard.split(\"\\n\");\r\n\r\n\t\tclipboard.forEach(function(row){\r\n\t\t\tdata.push(row.split(\"\\t\"));\r\n\t\t});\r\n\r\n\t\tif(data.length && !(data.length === 1 && data[0].length < 2)){\r\n\t\t\tsuccess = true;\r\n\r\n\t\t\t//check if headers are present by title\r\n\t\t\tdata[0].forEach(function(value){\r\n\t\t\t\tvar column = columns.find(function(column){\r\n\t\t\t\t\treturn value && column.definition.title && value.trim() && column.definition.title.trim() === value.trim();\r\n\t\t\t\t});\r\n\r\n\t\t\t\tif(column){\r\n\t\t\t\t\tcolumnMap.push(column);\r\n\t\t\t\t}else{\r\n\t\t\t\t\theaderFindSuccess = false;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\t//check if column headers are present by field\r\n\t\t\tif(!headerFindSuccess){\r\n\t\t\t\theaderFindSuccess = true;\r\n\t\t\t\tcolumnMap = [];\r\n\r\n\t\t\t\tdata[0].forEach(function(value){\r\n\t\t\t\t\tvar column = columns.find(function(column){\r\n\t\t\t\t\t\treturn value && column.field && value.trim() && column.field.trim() === value.trim();\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\tif(column){\r\n\t\t\t\t\t\tcolumnMap.push(column);\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\theaderFindSuccess = false;\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\tif(!headerFindSuccess){\r\n\t\t\t\t\tcolumnMap = this.table.columnManager.columnsByIndex;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t//remove header row if found\r\n\t\t\tif(headerFindSuccess){\r\n\t\t\t\tdata.shift();\r\n\t\t\t}\r\n\r\n\t\t\tdata.forEach(function(item){\r\n\t\t\t\tvar row = {};\r\n\r\n\t\t\t\titem.forEach(function(value, i){\r\n\t\t\t\t\tif(columnMap[i]){\r\n\t\t\t\t\t\trow[columnMap[i].field] = value;\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\trows.push(row);\r\n\t\t\t});\r\n\r\n\t\t\treturn rows;\r\n\t\t}else{\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n};","import Module from '../../core/Module.js';\r\n\r\nimport defaultPasteActions from './defaults/pasteActions.js';\r\nimport defaultPasteParsers from './defaults/pasteParsers.js';\r\n\r\nclass Clipboard extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.mode = true;\r\n\t\tthis.pasteParser = function(){};\r\n\t\tthis.pasteAction = function(){};\r\n\t\tthis.customSelection = false;\r\n\t\tthis.rowRange = false;\r\n\t\tthis.blocked = true; //block copy actions not originating from this command\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tthis.mode = this.table.options.clipboard;\r\n\r\n\t\tthis.rowRange = this.table.options.clipboardCopyRowRange;\r\n\r\n\t\tif(this.mode === true || this.mode === \"copy\"){\r\n\t\t\tthis.table.element.addEventListener(\"copy\", (e) => {\r\n\t\t\t\tvar plain, html, list;\r\n\r\n\t\t\t\tif(!this.blocked){\r\n\t\t\t\t\te.preventDefault();\r\n\r\n\t\t\t\t\tif(this.customSelection){\r\n\t\t\t\t\t\tplain = this.customSelection;\r\n\r\n\t\t\t\t\t\tif(this.table.options.clipboardCopyFormatter){\r\n\t\t\t\t\t\t\tplain = this.table.options.clipboardCopyFormatter(\"plain\", plain);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}else{\r\n\r\n\t\t\t\t\t\tvar list = this.table.modules.export.generateExportList(this.table.options.clipboardCopyConfig, this.table.options.clipboardCopyStyled, this.rowRange, \"clipboard\");\r\n\r\n\t\t\t\t\t\thtml = this.table.modules.export.genereateHTMLTable(list);\r\n\t\t\t\t\t\tplain = html ? this.generatePlainContent(list) : \"\";\r\n\r\n\t\t\t\t\t\tif(this.table.options.clipboardCopyFormatter){\r\n\t\t\t\t\t\t\tplain = this.table.options.clipboardCopyFormatter(\"plain\", plain);\r\n\t\t\t\t\t\t\thtml = this.table.options.clipboardCopyFormatter(\"html\", html);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (window.clipboardData && window.clipboardData.setData) {\r\n\t\t\t\t\t\twindow.clipboardData.setData('Text', plain);\r\n\t\t\t\t\t} else if (e.clipboardData && e.clipboardData.setData) {\r\n\t\t\t\t\t\te.clipboardData.setData('text/plain', plain);\r\n\t\t\t\t\t\tif(html){\r\n\t\t\t\t\t\t\te.clipboardData.setData('text/html', html);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} else if (e.originalEvent && e.originalEvent.clipboardData.setData) {\r\n\t\t\t\t\t\te.originalEvent.clipboardData.setData('text/plain', plain);\r\n\t\t\t\t\t\tif(html){\r\n\t\t\t\t\t\t\te.originalEvent.clipboardData.setData('text/html', html);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tthis.table.options.clipboardCopied.call(this.table, plain, html);\r\n\r\n\t\t\t\t\tthis.reset();\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif(this.mode === true || this.mode === \"paste\"){\r\n\t\t\tthis.table.element.addEventListener(\"paste\", (e) => {\r\n\t\t\t\tthis.paste(e);\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tthis.setPasteParser(this.table.options.clipboardPasteParser);\r\n\t\tthis.setPasteAction(this.table.options.clipboardPasteAction);\r\n\t}\r\n\r\n\treset(){\r\n\t\tthis.blocked = true;\r\n\t\tthis.customSelection = false;\r\n\t}\r\n\r\n\tgeneratePlainContent (list) {\r\n\t\tvar output = [];\r\n\r\n\t\tlist.forEach((row) => {\r\n\t\t\tvar rowData = [];\r\n\r\n\t\t\trow.columns.forEach((col) => {\r\n\t\t\t\tvar value = \"\";\r\n\r\n\t\t\t\tif(col){\r\n\r\n\t\t\t\t\tif(row.type === \"group\"){\r\n\t\t\t\t\t\tcol.value = col.component.getKey();\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif(col.value === null){\r\n\t\t\t\t\t\tvalue = \"\";\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tswitch(typeof col.value){\r\n\t\t\t\t\t\t\tcase \"object\":\r\n\t\t\t\t\t\t\tvalue = JSON.stringify(col.value);\r\n\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\t\tcase \"undefined\":\r\n\t\t\t\t\t\t\tvalue = \"\";\r\n\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\t\tdefault:\r\n\t\t\t\t\t\t\tvalue = col.value;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\trowData.push(value);\r\n\t\t\t});\r\n\r\n\t\t\toutput.push(rowData.join(\"\\t\"));\r\n\t\t});\r\n\r\n\t\treturn output.join(\"\\n\");\r\n\t}\r\n\r\n\tcopy (range, internal) {\r\n\t\tvar range, sel, textRange;\r\n\t\tthis.blocked = false;\r\n\t\tthis.customSelection = false;\r\n\r\n\t\tif (this.mode === true || this.mode === \"copy\") {\r\n\r\n\t\t\tthis.rowRange = range || this.table.options.clipboardCopyRowRange;\r\n\r\n\t\t\tif (typeof window.getSelection != \"undefined\" && typeof document.createRange != \"undefined\") {\r\n\t\t\t\trange = document.createRange();\r\n\t\t\t\trange.selectNodeContents(this.table.element);\r\n\t\t\t\tsel = window.getSelection();\r\n\r\n\t\t\t\tif (sel.toString() && internal) {\r\n\t\t\t\t\tthis.customSelection = sel.toString();\r\n\t\t\t\t}\r\n\r\n\t\t\t\tsel.removeAllRanges();\r\n\t\t\t\tsel.addRange(range);\r\n\t\t\t} else if (typeof document.selection != \"undefined\" && typeof document.body.createTextRange != \"undefined\") {\r\n\t\t\t\ttextRange = document.body.createTextRange();\r\n\t\t\t\ttextRange.moveToElementText(this.table.element);\r\n\t\t\t\ttextRange.select();\r\n\t\t\t}\r\n\r\n\t\t\tdocument.execCommand('copy');\r\n\r\n\t\t\tif (sel) {\r\n\t\t\t\tsel.removeAllRanges();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//PASTE EVENT HANDLING\r\n\tsetPasteAction(action){\r\n\r\n\t\tswitch(typeof action){\r\n\t\t\tcase \"string\":\r\n\t\t\tthis.pasteAction = Clipboard.pasteActions[action];\r\n\r\n\t\t\tif(!this.pasteAction){\r\n\t\t\t\tconsole.warn(\"Clipboard Error - No such paste action found:\", action);\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"function\":\r\n\t\t\tthis.pasteAction = action;\r\n\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\tsetPasteParser(parser){\r\n\t\tswitch(typeof parser){\r\n\t\t\tcase \"string\":\r\n\t\t\tthis.pasteParser = Clipboard.pasteParsers[parser];\r\n\r\n\t\t\tif(!this.pasteParser){\r\n\t\t\t\tconsole.warn(\"Clipboard Error - No such paste parser found:\", parser);\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"function\":\r\n\t\t\tthis.pasteParser = parser;\r\n\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\tpaste(e){\r\n\t\tvar data, rowData, rows;\r\n\r\n\t\tif(this.checkPaseOrigin(e)){\r\n\r\n\t\t\tdata = this.getPasteData(e);\r\n\r\n\t\t\trowData = this.pasteParser.call(this, data);\r\n\r\n\t\t\tif(rowData){\r\n\t\t\t\te.preventDefault();\r\n\r\n\t\t\t\tif(this.table.modExists(\"mutator\")){\r\n\t\t\t\t\trowData = this.mutateData(rowData);\r\n\t\t\t\t}\r\n\r\n\t\t\t\trows = this.pasteAction.call(this, rowData);\r\n\t\t\t\tthis.table.options.clipboardPasted.call(this.table, data, rowData, rows);\r\n\t\t\t}else{\r\n\t\t\t\tthis.table.options.clipboardPasteError.call(this.table, data);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tmutateData(data){\r\n\t\tvar output = [];\r\n\r\n\t\tif(Array.isArray(data)){\r\n\t\t\tdata.forEach((row) => {\r\n\t\t\t\toutput.push(this.table.modules.mutator.transformRow(row, \"clipboard\"));\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\toutput = data;\r\n\t\t}\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\r\n\tcheckPaseOrigin(e){\r\n\t\tvar valid = true;\r\n\r\n\t\tif(e.target.tagName != \"DIV\" || this.table.modules.edit.currentCell){\r\n\t\t\tvalid = false;\r\n\t\t}\r\n\r\n\t\treturn valid;\r\n\t}\r\n\r\n\tgetPasteData(e){\r\n\t\tvar data;\r\n\r\n\t\tif (window.clipboardData && window.clipboardData.getData) {\r\n\t\t\tdata = window.clipboardData.getData('Text');\r\n\t\t} else if (e.clipboardData && e.clipboardData.getData) {\r\n\t\t\tdata = e.clipboardData.getData('text/plain');\r\n\t\t} else if (e.originalEvent && e.originalEvent.clipboardData.getData) {\r\n\t\t\tdata = e.originalEvent.clipboardData.getData('text/plain');\r\n\t\t}\r\n\r\n\t\treturn data;\r\n\t}\r\n}\r\n\r\nClipboard.moduleName = \"clipboard\";\r\n\r\n//load defaults\r\nClipboard.pasteActions = defaultPasteActions;\r\nClipboard.pasteParsers = defaultPasteParsers;\r\n\r\nexport default Clipboard;","class CalcComponent{\r\n\tconstructor (row){\r\n\t\tthis._row = row;\r\n\t}\r\n\r\n\tgetData(transform){\r\n\t\treturn this._row.getData(transform);\r\n\t}\r\n\r\n\tgetElement(){\r\n\t\treturn this._row.getElement();\r\n\t}\r\n\r\n\tgetTable(){\r\n\t\treturn this._row.table;\r\n\t}\r\n\r\n\tgetCells(){\r\n\t\tvar cells = [];\r\n\r\n\t\tthis._row.getCells().forEach(function(cell){\r\n\t\t\tcells.push(cell.getComponent());\r\n\t\t});\r\n\r\n\t\treturn cells;\r\n\t}\r\n\r\n\tgetCell(column){\r\n\t\tvar cell = this._row.getCell(column);\r\n\t\treturn cell ? cell.getComponent() : false;\r\n\t}\r\n\r\n\t_getSelf(){\r\n\t\treturn this._row;\r\n\t}\r\n}\r\n\r\nexport default CalcComponent;","export default {\r\n\t\"avg\":function(values, data, calcParams){\r\n\t\tvar output = 0,\r\n\t\tprecision = typeof calcParams.precision !== \"undefined\" ? calcParams.precision : 2\r\n\r\n\t\tif(values.length){\r\n\t\t\toutput = values.reduce(function(sum, value){\r\n\t\t\t\treturn Number(sum) + Number(value);\r\n\t\t\t});\r\n\r\n\t\t\toutput = output / values.length;\r\n\r\n\t\t\toutput = precision !== false ? output.toFixed(precision) : output;\r\n\t\t}\r\n\r\n\t\treturn parseFloat(output).toString();\r\n\t},\r\n\t\"max\":function(values, data, calcParams){\r\n\t\tvar output = null,\r\n\t\tprecision = typeof calcParams.precision !== \"undefined\" ? calcParams.precision : false;\r\n\r\n\t\tvalues.forEach(function(value){\r\n\r\n\t\t\tvalue = Number(value);\r\n\r\n\t\t\tif(value > output || output === null){\r\n\t\t\t\toutput = value;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn output !== null ? (precision !== false ? output.toFixed(precision) : output) : \"\";\r\n\t},\r\n\t\"min\":function(values, data, calcParams){\r\n\t\tvar output = null,\r\n\t\tprecision = typeof calcParams.precision !== \"undefined\" ? calcParams.precision : false;\r\n\r\n\t\tvalues.forEach(function(value){\r\n\r\n\t\t\tvalue = Number(value);\r\n\r\n\t\t\tif(value < output || output === null){\r\n\t\t\t\toutput = value;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn output !== null ? (precision !== false ? output.toFixed(precision) : output) : \"\";\r\n\t},\r\n\t\"sum\":function(values, data, calcParams){\r\n\t\tvar output = 0,\r\n\t\tprecision = typeof calcParams.precision !== \"undefined\" ? calcParams.precision : false;\r\n\r\n\t\tif(values.length){\r\n\t\t\tvalues.forEach(function(value){\r\n\t\t\t\tvalue = Number(value);\r\n\r\n\t\t\t\toutput += !isNaN(value) ? Number(value) : 0;\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn precision !== false ? output.toFixed(precision) : output;\r\n\t},\r\n\t\"concat\":function(values, data, calcParams){\r\n\t\tvar output = 0;\r\n\r\n\t\tif(values.length){\r\n\t\t\toutput = values.reduce(function(sum, value){\r\n\t\t\t\treturn String(sum) + String(value);\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn output;\r\n\t},\r\n\t\"count\":function(values, data, calcParams){\r\n\t\tvar output = 0;\r\n\r\n\t\tif(values.length){\r\n\t\t\tvalues.forEach(function(value){\r\n\t\t\t\tif(value){\r\n\t\t\t\t\toutput ++;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn output;\r\n\t},\r\n};","import Module from '../../core/Module.js';\r\n\r\nimport CalcComponent from './CalcComponent.js';\r\n\r\nimport Cell from '../../core/cell/Cell.js';\r\nimport Column from '../../core/column/Column.js';\r\nimport Row from '../../core/row/Row.js';\r\n\r\nimport defaultCalculations from './defaults/calculations.js';\r\n\r\nclass ColumnCalcs extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.topCalcs = [];\r\n\t\tthis.botCalcs = [];\r\n\t\tthis.genColumn = false;\r\n\t\tthis.topElement = this.createElement();\r\n\t\tthis.botElement = this.createElement();\r\n\t\tthis.topRow = false;\r\n\t\tthis.botRow = false;\r\n\t\tthis.topInitialized = false;\r\n\t\tthis.botInitialized = false;\r\n\r\n\t\tthis.initialize();\r\n\t}\r\n\r\n\tcreateElement (){\r\n\t\tvar el = document.createElement(\"div\");\r\n\t\tel.classList.add(\"tabulator-calcs-holder\");\r\n\t\treturn el;\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tthis.genColumn = new Column({field:\"value\"}, this);\r\n\t}\r\n\r\n\t//dummy functions to handle being mock column manager\r\n\tregisterColumnField(){};\r\n\r\n\t//initialize column calcs\r\n\tinitializeColumn(column){\r\n\t\tvar def = column.definition\r\n\r\n\t\tvar config = {\r\n\t\t\ttopCalcParams:def.topCalcParams || {},\r\n\t\t\tbotCalcParams:def.bottomCalcParams || {},\r\n\t\t};\r\n\r\n\t\tif(def.topCalc){\r\n\r\n\t\t\tswitch(typeof def.topCalc){\r\n\t\t\t\tcase \"string\":\r\n\t\t\t\tif(ColumnCalcs.calculations[def.topCalc]){\r\n\t\t\t\t\tconfig.topCalc = ColumnCalcs.calculations[def.topCalc]\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.warn(\"Column Calc Error - No such calculation found, ignoring: \", def.topCalc);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"function\":\r\n\t\t\t\tconfig.topCalc = def.topCalc;\r\n\t\t\t\tbreak\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif(config.topCalc){\r\n\t\t\t\tcolumn.modules.columnCalcs = config;\r\n\t\t\t\tthis.topCalcs.push(column);\r\n\r\n\t\t\t\tif(this.table.options.columnCalcs != \"group\"){\r\n\t\t\t\t\tthis.initializeTopRow();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tif(def.bottomCalc){\r\n\t\t\tswitch(typeof def.bottomCalc){\r\n\t\t\t\tcase \"string\":\r\n\t\t\t\tif(ColumnCalcs.calculations[def.bottomCalc]){\r\n\t\t\t\t\tconfig.botCalc = ColumnCalcs.calculations[def.bottomCalc]\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.warn(\"Column Calc Error - No such calculation found, ignoring: \", def.bottomCalc);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"function\":\r\n\t\t\t\tconfig.botCalc = def.bottomCalc;\r\n\t\t\t\tbreak\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif(config.botCalc){\r\n\t\t\t\tcolumn.modules.columnCalcs = config;\r\n\t\t\t\tthis.botCalcs.push(column);\r\n\r\n\t\t\t\tif(this.table.options.columnCalcs != \"group\"){\r\n\t\t\t\t\tthis.initializeBottomRow();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tremoveCalcs(){\r\n\t\tvar changed = false;\r\n\r\n\t\tif(this.topInitialized){\r\n\t\t\tthis.topInitialized = false;\r\n\t\t\tthis.topElement.parentNode.removeChild(this.topElement);\r\n\t\t\tchanged = true;\r\n\t\t}\r\n\r\n\t\tif(this.botInitialized){\r\n\t\t\tthis.botInitialized = false;\r\n\t\t\tthis.table.footerManager.remove(this.botElement);\r\n\t\t\tchanged = true;\r\n\t\t}\r\n\r\n\t\tif(changed){\r\n\t\t\tthis.table.rowManager.adjustTableSize();\r\n\t\t}\r\n\t}\r\n\r\n\tinitializeTopRow(){\r\n\t\tif(!this.topInitialized){\r\n\t\t\tthis.table.columnManager.getElement().insertBefore(this.topElement, this.table.columnManager.headersElement.nextSibling);\r\n\t\t\tthis.topInitialized = true;\r\n\t\t}\r\n\t}\r\n\r\n\tinitializeBottomRow(){\r\n\t\tif(!this.botInitialized){\r\n\t\t\tthis.table.footerManager.prepend(this.botElement);\r\n\t\t\tthis.botInitialized = true;\r\n\t\t}\r\n\t}\r\n\r\n\tscrollHorizontal(left){\r\n\t\tif(this.botInitialized && this.botRow){\r\n\t\t\tthis.botRow.getElement().style.marginLeft = (-left) + \"px\";\r\n\t\t}\r\n\t}\r\n\r\n\trecalc(rows){\r\n\t\tvar data, row;\r\n\r\n\t\tif(this.topInitialized || this.botInitialized){\r\n\t\t\tdata = this.rowsToData(rows);\r\n\r\n\t\t\tif(this.topInitialized){\r\n\t\t\t\tif(this.topRow){\r\n\t\t\t\t\tthis.topRow.deleteCells();\r\n\t\t\t\t}\r\n\r\n\t\t\t\trow = this.generateRow(\"top\", this.rowsToData(rows))\r\n\t\t\t\tthis.topRow = row;\r\n\t\t\t\twhile(this.topElement.firstChild) this.topElement.removeChild(this.topElement.firstChild);\r\n\t\t\t\tthis.topElement.appendChild(row.getElement());\r\n\t\t\t\trow.initialize(true);\r\n\t\t\t}\r\n\r\n\t\t\tif(this.botInitialized){\r\n\t\t\t\tif(this.botRow){\r\n\t\t\t\t\tthis.botRow.deleteCells();\r\n\t\t\t\t}\r\n\r\n\t\t\t\trow = this.generateRow(\"bottom\", this.rowsToData(rows))\r\n\t\t\t\tthis.botRow = row;\r\n\t\t\t\twhile(this.botElement.firstChild) this.botElement.removeChild(this.botElement.firstChild);\r\n\t\t\t\tthis.botElement.appendChild(row.getElement());\r\n\t\t\t\trow.initialize(true);\r\n\t\t\t}\r\n\r\n\t\t\tthis.table.rowManager.adjustTableSize();\r\n\r\n\t\t\t//set resizable handles\r\n\t\t\tif(this.table.modExists(\"frozenColumns\")){\r\n\t\t\t\tthis.table.modules.frozenColumns.layout();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\trecalcRowGroup(row){\r\n\t\tthis.recalcGroup(this.table.modules.groupRows.getRowGroup(row));\r\n\t}\r\n\r\n\trecalcAll(){\r\n\t\tif(this.topCalcs.length || this.botCalcs.length){\r\n\t\t\tif(this.table.options.columnCalcs !== \"group\"){\r\n\t\t\t\tthis.recalc(this.table.rowManager.activeRows);\r\n\t\t\t}\r\n\r\n\t\t\tif(this.table.options.groupBy && this.table.options.columnCalcs !== \"table\"){\r\n\r\n\r\n\t\t\t\tvar groups = table.modules.groupRows.getChildGroups();\r\n\r\n\t\t\t\tgroups.forEach((group) => {\r\n\t\t\t\t\tthis.recalcGroup(group);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\trecalcGroup(group){\r\n\t\tvar data, rowData;\r\n\r\n\t\tif(group){\r\n\t\t\tif(group.calcs){\r\n\t\t\t\tif(group.calcs.bottom){\r\n\t\t\t\t\tdata = this.rowsToData(group.rows);\r\n\t\t\t\t\trowData = this.generateRowData(\"bottom\", data);\r\n\r\n\t\t\t\t\tgroup.calcs.bottom.updateData(rowData);\r\n\t\t\t\t\tgroup.calcs.bottom.reinitialize();\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(group.calcs.top){\r\n\t\t\t\t\tdata = this.rowsToData(group.rows);\r\n\t\t\t\t\trowData = this.generateRowData(\"top\", data);\r\n\r\n\t\t\t\t\tgroup.calcs.top.updateData(rowData);\r\n\t\t\t\t\tgroup.calcs.top.reinitialize();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//generate top stats row\r\n\tgenerateTopRow(rows){\r\n\t\treturn this.generateRow(\"top\", this.rowsToData(rows));\r\n\t}\r\n\t//generate bottom stats row\r\n\tgenerateBottomRow(rows){\r\n\t\treturn this.generateRow(\"bottom\", this.rowsToData(rows));\r\n\t}\r\n\r\n\trowsToData(rows){\r\n\t\tvar data = [];\r\n\r\n\t\trows.forEach((row) => {\r\n\t\t\tdata.push(row.getData());\r\n\r\n\t\t\tif(this.table.options.dataTree && this.table.options.dataTreeChildColumnCalcs){\r\n\t\t\t\tif(row.modules.dataTree.open){\r\n\t\t\t\t\tvar children = this.rowsToData(this.table.modules.dataTree.getFilteredTreeChildren(row));\r\n\t\t\t\t\tdata = data.concat(children);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn data;\r\n\t}\r\n\r\n\t//generate stats row\r\n\tgenerateRow(pos, data){\r\n\t\tvar rowData = this.generateRowData(pos, data),\r\n\t\trow;\r\n\r\n\t\tif(this.table.modExists(\"mutator\")){\r\n\t\t\tthis.table.modules.mutator.disable();\r\n\t\t}\r\n\r\n\t\trow = new Row(rowData, this, \"calc\");\r\n\r\n\t\tif(this.table.modExists(\"mutator\")){\r\n\t\t\tthis.table.modules.mutator.enable();\r\n\t\t}\r\n\r\n\t\trow.getElement().classList.add(\"tabulator-calcs\", \"tabulator-calcs-\" + pos);\r\n\r\n\t\trow.component = false;\r\n\r\n\t\trow.getComponent = () => {\r\n\t\t\tif(!this.component){\r\n\t\t\t\tthis.component = new CalcComponent(this);\r\n\t\t\t}\r\n\r\n\t\t\treturn this.component;\r\n\t\t};\r\n\r\n\t\trow.generateCells = () => {\r\n\r\n\t\t\tvar cells = [];\r\n\r\n\t\t\tthis.table.columnManager.columnsByIndex.forEach((column) => {\r\n\r\n\t\t\t\t\t//set field name of mock column\r\n\t\t\t\t\tthis.genColumn.setField(column.getField());\r\n\t\t\t\t\tthis.genColumn.hozAlign = column.hozAlign;\r\n\r\n\t\t\t\t\tif(column.definition[pos + \"CalcFormatter\"] && this.table.modExists(\"format\")){\r\n\t\t\t\t\t\tthis.genColumn.modules.format = {\r\n\t\t\t\t\t\t\tformatter: this.table.modules.format.getFormatter(column.definition[pos + \"CalcFormatter\"]),\r\n\t\t\t\t\t\t\tparams: column.definition[pos + \"CalcFormatterParams\"] || {},\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tthis.genColumn.modules.format = {\r\n\t\t\t\t\t\t\tformatter: this.table.modules.format.getFormatter(\"plaintext\"),\r\n\t\t\t\t\t\t\tparams:{}\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t//ensure css class defintion is replicated to calculation cell\r\n\t\t\t\t\tthis.genColumn.definition.cssClass = column.definition.cssClass;\r\n\r\n\t\t\t\t\t//generate cell and assign to correct column\r\n\t\t\t\t\tvar cell = new Cell(this.genColumn, row);\r\n\t\t\t\t\tcell.getElement();\r\n\t\t\t\t\tcell.column = column;\r\n\t\t\t\t\tcell.setWidth();\r\n\r\n\t\t\t\t\tcolumn.cells.push(cell);\r\n\t\t\t\t\tcells.push(cell);\r\n\r\n\t\t\t\t\tif(!column.visible){\r\n\t\t\t\t\t\tcell.hide();\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\tthis.cells = cells;\r\n\t\t};\r\n\r\n\t\treturn row;\r\n\t}\r\n\r\n\t//generate stats row\r\n\tgenerateRowData(pos, data){\r\n\t\tvar rowData = {},\r\n\t\tcalcs = pos == \"top\" ? this.topCalcs : this.botCalcs,\r\n\t\ttype = pos == \"top\" ? \"topCalc\" : \"botCalc\",\r\n\t\tparams, paramKey;\r\n\r\n\t\tcalcs.forEach(function(column){\r\n\t\t\tvar values = [];\r\n\r\n\t\t\tif(column.modules.columnCalcs && column.modules.columnCalcs[type]){\r\n\t\t\t\tdata.forEach(function(item){\r\n\t\t\t\t\tvalues.push(column.getFieldValue(item));\r\n\t\t\t\t});\r\n\r\n\t\t\t\tparamKey = type + \"Params\";\r\n\t\t\t\tparams = typeof column.modules.columnCalcs[paramKey] === \"function\" ? column.modules.columnCalcs[paramKey](values, data) : column.modules.columnCalcs[paramKey];\r\n\r\n\t\t\t\tcolumn.setFieldValue(rowData, column.modules.columnCalcs[type](values, data, params));\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn rowData;\r\n\t}\r\n\r\n\thasTopCalcs(){\r\n\t\treturn\t!!(this.topCalcs.length);\r\n\t}\r\n\r\n\thasBottomCalcs(){\r\n\t\treturn\t!!(this.botCalcs.length);\r\n\t}\r\n\r\n\t//handle table redraw\r\n\tredraw(){\r\n\t\tif(this.topRow){\r\n\t\t\tthis.topRow.normalizeHeight(true);\r\n\t\t}\r\n\t\tif(this.botRow){\r\n\t\t\tthis.botRow.normalizeHeight(true);\r\n\t\t}\r\n\t}\r\n\r\n\t//return the calculated\r\n\tgetResults(){\r\n\t\tvar results = {},\r\n\t\tgroups;\r\n\r\n\t\tif(this.table.options.groupBy && this.table.modExists(\"groupRows\")){\r\n\t\t\tgroups = this.table.modules.groupRows.getGroups(true);\r\n\r\n\t\t\tgroups.forEach((group) => {\r\n\t\t\t\tresults[group.getKey()] = this.getGroupResults(group);\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tresults = {\r\n\t\t\t\ttop: this.topRow ? this.topRow.getData() : {},\r\n\t\t\t\tbottom: this.botRow ? this.botRow.getData() : {},\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn results;\r\n\t}\r\n\r\n\t//get results from a group\r\n\tgetGroupResults(group){\r\n\t\tvar groupObj = group._getSelf(),\r\n\t\tsubGroups = group.getSubGroups(),\r\n\t\tsubGroupResults = {},\r\n\t\tresults = {};\r\n\r\n\t\tsubGroups.forEach((subgroup) => {\r\n\t\t\tsubGroupResults[subgroup.getKey()] = this.getGroupResults(subgroup);\r\n\t\t});\r\n\r\n\t\tresults = {\r\n\t\t\ttop: groupObj.calcs.top ? groupObj.calcs.top.getData() : {},\r\n\t\t\tbottom: groupObj.calcs.bottom ? groupObj.calcs.bottom.getData() : {},\r\n\t\t\tgroups: subGroupResults,\r\n\t\t}\r\n\r\n\t\treturn results;\r\n\t}\r\n}\r\n\r\nColumnCalcs.moduleName = \"columnCalcs\";\r\n\r\n//load defaults\r\nColumnCalcs.calculations = defaultCalculations;\r\n\r\nexport default ColumnCalcs;","import Module from '../../core/Module.js';\r\n\r\nimport Row from '../../core/row/Row.js';\r\n\r\nclass DataTree extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.indent = 10;\r\n\t\tthis.field = \"\";\r\n\t\tthis.collapseEl = null;\r\n\t\tthis.expandEl = null;\r\n\t\tthis.branchEl = null;\r\n\t\tthis.elementField = false;\r\n\r\n\t\tthis.startOpen = function(){};\r\n\r\n\t\tthis.displayIndex = 0;\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tvar dummyEl = null,\r\n\t\tfirstCol = this.table.columnManager.getFirstVisibileColumn(),\r\n\t\toptions = this.table.options;\r\n\r\n\t\tthis.field = options.dataTreeChildField;\r\n\t\tthis.indent = options.dataTreeChildIndent;\r\n\t\tthis.elementField = options.dataTreeElementColumn || (firstCol ? firstCol.field : false);\r\n\r\n\t\tif(options.dataTreeBranchElement){\r\n\r\n\t\t\tif(options.dataTreeBranchElement === true){\r\n\t\t\t\tthis.branchEl = document.createElement(\"div\");\r\n\t\t\t\tthis.branchEl.classList.add(\"tabulator-data-tree-branch\");\r\n\t\t\t}else{\r\n\t\t\t\tif(typeof options.dataTreeBranchElement === \"string\"){\r\n\t\t\t\t\tdummyEl = document.createElement(\"div\");\r\n\t\t\t\t\tdummyEl.innerHTML = options.dataTreeBranchElement;\r\n\t\t\t\t\tthis.branchEl = dummyEl.firstChild;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tthis.branchEl = options.dataTreeBranchElement;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(options.dataTreeCollapseElement){\r\n\t\t\tif(typeof options.dataTreeCollapseElement === \"string\"){\r\n\t\t\t\tdummyEl = document.createElement(\"div\");\r\n\t\t\t\tdummyEl.innerHTML = options.dataTreeCollapseElement;\r\n\t\t\t\tthis.collapseEl = dummyEl.firstChild;\r\n\t\t\t}else{\r\n\t\t\t\tthis.collapseEl = options.dataTreeCollapseElement;\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tthis.collapseEl = document.createElement(\"div\");\r\n\t\t\tthis.collapseEl.classList.add(\"tabulator-data-tree-control\");\r\n\t\t\tthis.collapseEl.tabIndex = 0;\r\n\t\t\tthis.collapseEl.innerHTML = \"
\";\r\n\t\t}\r\n\r\n\t\tif(options.dataTreeExpandElement){\r\n\t\t\tif(typeof options.dataTreeExpandElement === \"string\"){\r\n\t\t\t\tdummyEl = document.createElement(\"div\");\r\n\t\t\t\tdummyEl.innerHTML = options.dataTreeExpandElement;\r\n\t\t\t\tthis.expandEl = dummyEl.firstChild;\r\n\t\t\t}else{\r\n\t\t\t\tthis.expandEl = options.dataTreeExpandElement;\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tthis.expandEl = document.createElement(\"div\");\r\n\t\t\tthis.expandEl.classList.add(\"tabulator-data-tree-control\");\r\n\t\t\tthis.expandEl.tabIndex = 0;\r\n\t\t\tthis.expandEl.innerHTML = \"
\";\r\n\t\t}\r\n\r\n\r\n\t\tswitch(typeof options.dataTreeStartExpanded){\r\n\t\t\tcase \"boolean\":\r\n\t\t\tthis.startOpen = function(row, index){\r\n\t\t\t\treturn options.dataTreeStartExpanded;\r\n\t\t\t};\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"function\":\r\n\t\t\tthis.startOpen = options.dataTreeStartExpanded;\r\n\t\t\tbreak;\r\n\r\n\t\t\tdefault:\r\n\t\t\tthis.startOpen = function(row, index){\r\n\t\t\t\treturn options.dataTreeStartExpanded[index];\r\n\t\t\t};\r\n\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\tinitializeRow(row){\r\n\t\tvar childArray = row.getData()[this.field];\r\n\t\tvar isArray = Array.isArray(childArray);\r\n\r\n\t\tvar children = isArray || (!isArray && typeof childArray === \"object\" && childArray !== null);\r\n\r\n\t\tif(!children && row.modules.dataTree && row.modules.dataTree.branchEl){\r\n\t\t\trow.modules.dataTree.branchEl.parentNode.removeChild(row.modules.dataTree.branchEl);\r\n\t\t}\r\n\r\n\t\tif(!children && row.modules.dataTree && row.modules.dataTree.controlEl){\r\n\t\t\trow.modules.dataTree.controlEl.parentNode.removeChild(row.modules.dataTree.controlEl);\r\n\t\t}\r\n\r\n\t\trow.modules.dataTree = {\r\n\t\t\tindex: row.modules.dataTree ? row.modules.dataTree.index : 0,\r\n\t\t\topen: children ? (row.modules.dataTree ? row.modules.dataTree.open : this.startOpen(row.getComponent(), 0)) : false,\r\n\t\t\tcontrolEl: row.modules.dataTree && children ? row.modules.dataTree.controlEl : false,\r\n\t\t\tbranchEl: row.modules.dataTree && children ? row.modules.dataTree.branchEl : false,\r\n\t\t\tparent: row.modules.dataTree ? row.modules.dataTree.parent : false,\r\n\t\t\tchildren:children,\r\n\t\t};\r\n\t}\r\n\r\n\tlayoutRow(row){\r\n\t\tvar cell = this.elementField ? row.getCell(this.elementField) : row.getCells()[0],\r\n\t\tel = cell.getElement(),\r\n\t\tconfig = row.modules.dataTree;\r\n\r\n\t\tif(config.branchEl){\r\n\t\t\tif(config.branchEl.parentNode){\r\n\t\t\t\tconfig.branchEl.parentNode.removeChild(config.branchEl);\r\n\t\t\t}\r\n\t\t\tconfig.branchEl = false;\r\n\t\t}\r\n\r\n\t\tif(config.controlEl){\r\n\t\t\tif(config.controlEl.parentNode){\r\n\t\t\t\tconfig.controlEl.parentNode.removeChild(config.controlEl);\r\n\t\t\t}\r\n\t\t\tconfig.controlEl = false;\r\n\t\t}\r\n\r\n\t\tthis.generateControlElement(row, el);\r\n\r\n\t\trow.getElement().classList.add(\"tabulator-tree-level-\" + config.index);\r\n\r\n\t\tif(config.index){\r\n\t\t\tif(this.branchEl){\r\n\t\t\t\tconfig.branchEl = this.branchEl.cloneNode(true);\r\n\t\t\t\tel.insertBefore(config.branchEl, el.firstChild);\r\n\r\n\t\t\t\tif(this.table.rtl){\r\n\t\t\t\t\tconfig.branchEl.style.marginRight = (((config.branchEl.offsetWidth + config.branchEl.style.marginLeft) * (config.index - 1)) + (config.index * this.indent)) + \"px\";\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconfig.branchEl.style.marginLeft = (((config.branchEl.offsetWidth + config.branchEl.style.marginRight) * (config.index - 1)) + (config.index * this.indent)) + \"px\";\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\r\n\t\t\t\tif(this.table.rtl){\r\n\t\t\t\t\tel.style.paddingRight = parseInt(window.getComputedStyle(el, null).getPropertyValue('padding-right')) + (config.index * this.indent) + \"px\";\r\n\t\t\t\t}else{\r\n\t\t\t\t\tel.style.paddingLeft = parseInt(window.getComputedStyle(el, null).getPropertyValue('padding-left')) + (config.index * this.indent) + \"px\";\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tgenerateControlElement(row, el){\r\n\t\tvar config = row.modules.dataTree,\r\n\t\tel = el || row.getCells()[0].getElement(),\r\n\t\toldControl = config.controlEl;\r\n\r\n\t\tif(config.children !== false){\r\n\r\n\t\t\tif(config.open){\r\n\t\t\t\tconfig.controlEl = this.collapseEl.cloneNode(true);\r\n\t\t\t\tconfig.controlEl.addEventListener(\"click\", (e) => {\r\n\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\tthis.collapseRow(row);\r\n\t\t\t\t});\r\n\t\t\t}else{\r\n\t\t\t\tconfig.controlEl = this.expandEl.cloneNode(true);\r\n\t\t\t\tconfig.controlEl.addEventListener(\"click\", (e) => {\r\n\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\tthis.expandRow(row);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\tconfig.controlEl.addEventListener(\"mousedown\", (e) => {\r\n\t\t\t\te.stopPropagation();\r\n\t\t\t});\r\n\r\n\t\t\tif(oldControl && oldControl.parentNode === el){\r\n\t\t\t\toldControl.parentNode.replaceChild(config.controlEl,oldControl);\r\n\t\t\t}else{\r\n\t\t\t\tel.insertBefore(config.controlEl, el.firstChild);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tsetDisplayIndex (index) {\r\n\t\tthis.displayIndex = index;\r\n\t}\r\n\r\n\tgetDisplayIndex () {\r\n\t\treturn this.displayIndex;\r\n\t}\r\n\r\n\tgetRows(rows){\r\n\t\tvar output = [];\r\n\r\n\t\trows.forEach((row, i) => {\r\n\t\t\tvar config, children;\r\n\r\n\t\t\toutput.push(row);\r\n\r\n\t\t\tif(row instanceof Row){\r\n\r\n\t\t\t\trow.create();\r\n\r\n\t\t\t\tconfig = row.modules.dataTree.children;\r\n\r\n\t\t\t\tif(!config.index && config.children !== false){\r\n\t\t\t\t\tchildren = this.getChildren(row);\r\n\r\n\t\t\t\t\tchildren.forEach((child) => {\r\n\t\t\t\t\t\tchild.create();\r\n\t\t\t\t\t\toutput.push(child);\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tgetChildren(row, allChildren){\r\n\t\tvar config = row.modules.dataTree,\r\n\t\tchildren = [],\r\n\t\toutput = [];\r\n\r\n\t\tif(config.children !== false && (config.open || allChildren)){\r\n\t\t\tif(!Array.isArray(config.children)){\r\n\t\t\t\tconfig.children = this.generateChildren(row);\r\n\t\t\t}\r\n\r\n\t\t\tif(this.table.modExists(\"filter\") && this.table.options.dataTreeFilter){\r\n\t\t\t\tchildren = this.table.modules.filter.filter(config.children);\r\n\t\t\t}else{\r\n\t\t\t\tchildren = config.children;\r\n\t\t\t}\r\n\r\n\t\t\tif(this.table.modExists(\"sort\") && this.table.options.dataTreeSort){\r\n\t\t\t\tthis.table.modules.sort.sort(children);\r\n\t\t\t}\r\n\r\n\t\t\tchildren.forEach((child) => {\r\n\t\t\t\toutput.push(child);\r\n\r\n\t\t\t\tvar subChildren = this.getChildren(child);\r\n\r\n\t\t\t\tsubChildren.forEach((sub) => {\r\n\t\t\t\t\toutput.push(sub);\r\n\t\t\t\t});\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tgenerateChildren(row){\r\n\t\tvar children = [];\r\n\r\n\t\tvar childArray = row.getData()[this.field];\r\n\r\n\t\tif(!Array.isArray(childArray)){\r\n\t\t\tchildArray = [childArray];\r\n\t\t}\r\n\r\n\t\tchildArray.forEach((childData) => {\r\n\t\t\tvar childRow = new Row(childData || {}, this.table.rowManager);\r\n\r\n\t\t\tchildRow.create();\r\n\r\n\t\t\tchildRow.modules.dataTree.index = row.modules.dataTree.index + 1;\r\n\t\t\tchildRow.modules.dataTree.parent = row;\r\n\r\n\t\t\tif(childRow.modules.dataTree.children){\r\n\t\t\t\tchildRow.modules.dataTree.open = this.startOpen(childRow.getComponent(), childRow.modules.dataTree.index);\r\n\t\t\t}\r\n\t\t\tchildren.push(childRow);\r\n\t\t});\r\n\r\n\t\treturn children;\r\n\t}\r\n\r\n\texpandRow(row, silent){\r\n\t\tvar config = row.modules.dataTree;\r\n\r\n\t\tif(config.children !== false){\r\n\t\t\tconfig.open = true;\r\n\r\n\t\t\trow.reinitialize();\r\n\r\n\t\t\tthis.table.rowManager.refreshActiveData(\"tree\", false, true);\r\n\r\n\t\t\tthis.table.options.dataTreeRowExpanded(row.getComponent(), row.modules.dataTree.index);\r\n\t\t}\r\n\t}\r\n\r\n\tcollapseRow(row){\r\n\t\tvar config = row.modules.dataTree;\r\n\r\n\t\tif(config.children !== false){\r\n\t\t\tconfig.open = false;\r\n\r\n\t\t\trow.reinitialize();\r\n\r\n\t\t\tthis.table.rowManager.refreshActiveData(\"tree\", false, true);\r\n\r\n\t\t\tthis.table.options.dataTreeRowCollapsed(row.getComponent(), row.modules.dataTree.index);\r\n\t\t}\r\n\t}\r\n\r\n\ttoggleRow(row){\r\n\t\tvar config = row.modules.dataTree;\r\n\r\n\t\tif(config.children !== false){\r\n\t\t\tif(config.open){\r\n\t\t\t\tthis.collapseRow(row);\r\n\t\t\t}else{\r\n\t\t\t\tthis.expandRow(row);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tgetTreeParent(row){\r\n\t\treturn row.modules.dataTree.parent ? row.modules.dataTree.parent.getComponent() : false;\r\n\t}\r\n\r\n\tgetFilteredTreeChildren(row){\r\n\t\tvar config = row.modules.dataTree,\r\n\t\toutput = [], children;\r\n\r\n\t\tif(config.children){\r\n\r\n\t\t\tif(!Array.isArray(config.children)){\r\n\t\t\t\tconfig.children = this.generateChildren(row);\r\n\t\t\t}\r\n\r\n\t\t\tif(this.table.modExists(\"filter\") && this.table.options.dataTreeFilter){\r\n\t\t\t\tchildren = this.table.modules.filter.filter(config.children);\r\n\t\t\t}else{\r\n\t\t\t\tchildren = config.children;\r\n\t\t\t}\r\n\r\n\t\t\tchildren.forEach((childRow) => {\r\n\t\t\t\tif(childRow instanceof Row){\r\n\t\t\t\t\toutput.push(childRow);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\trowDelete(row){\r\n\t\tvar parent = row.modules.dataTree.parent,\r\n\t\tchildIndex;\r\n\r\n\t\tif(parent){\r\n\t\t\tchildIndex = this.findChildIndex(row, parent);\r\n\r\n\t\t\tif(childIndex !== false){\r\n\t\t\t\tparent.data[this.field].splice(childIndex, 1);\r\n\t\t\t}\r\n\r\n\t\t\tif(!parent.data[this.field].length){\r\n\t\t\t\tdelete parent.data[this.field];\r\n\t\t\t}\r\n\r\n\t\t\tthis.initializeRow(parent);\r\n\t\t\tthis.layoutRow(parent);\r\n\t\t}\r\n\r\n\t\tthis.table.rowManager.refreshActiveData(\"tree\", false, true);\r\n\t}\r\n\r\n\taddTreeChildRow(row, data, top, index){\r\n\t\tvar childIndex = false;\r\n\r\n\t\tif(typeof data === \"string\"){\r\n\t\t\tdata = JSON.parse(data);\r\n\t\t}\r\n\r\n\t\tif(!Array.isArray(row.data[this.field])){\r\n\t\t\trow.data[this.field] = [];\r\n\r\n\t\t\trow.modules.dataTree.open = this.startOpen(row.getComponent(), row.modules.dataTree.index);\r\n\t\t}\r\n\r\n\t\tif(typeof index !== \"undefined\"){\r\n\t\t\tchildIndex = this.findChildIndex(index, row);\r\n\r\n\t\t\tif(childIndex !== false){\r\n\t\t\t\trow.data[this.field].splice((top ? childIndex : childIndex + 1), 0, data);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(childIndex === false){\r\n\t\t\tif(top){\r\n\t\t\t\trow.data[this.field].unshift(data);\r\n\t\t\t}else{\r\n\t\t\t\trow.data[this.field].push(data);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.initializeRow(row);\r\n\t\tthis.layoutRow(row);\r\n\r\n\t\tthis.table.rowManager.refreshActiveData(\"tree\", false, true);\r\n\t}\r\n\r\n\tfindChildIndex(subject, parent){\r\n\t\tvar match = false;\r\n\r\n\t\tif(typeof subject == \"object\"){\r\n\r\n\t\t\tif(subject instanceof Row){\r\n\t\t\t\t//subject is row element\r\n\t\t\t\tmatch = subject.data;\r\n\t\t\t}else if(subject instanceof RowComponent){\r\n\t\t\t\t//subject is public row component\r\n\t\t\t\tmatch = subject._getSelf().data;\r\n\t\t\t}else if(typeof HTMLElement !== \"undefined\" && subject instanceof HTMLElement){\r\n\t\t\t\tif(parent.modules.dataTree){\r\n\t\t\t\t\tmatch = parent.modules.dataTree.children.find((childRow) => {\r\n\t\t\t\t\t\treturn childRow instanceof Row ? childRow.element === subject : false;\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\tif(match){\r\n\t\t\t\t\t\tmatch = match.data;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t}else if(typeof subject == \"undefined\" || subject === null){\r\n\t\t\tmatch = false\r\n\t\t}else{\r\n\t\t\t//subject should be treated as the index of the row\r\n\t\t\tmatch = parent.data[this.field].find((row) => {\r\n\t\t\t\treturn row.data[this.table.options.index] == subject;\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif(match){\r\n\r\n\t\t\tif(Array.isArray(parent.data[this.field])){\r\n\t\t\t\tmatch = parent.data[this.field].indexOf(match);\r\n\t\t\t}\r\n\r\n\t\t\tif(match == -1){\r\n\t\t\t\tmatch = false;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//catch all for any other type of input\r\n\r\n\t\treturn match;\r\n\t}\r\n\r\n\tgetTreeChildren(row, component, recurse){\r\n\t\tvar config = row.modules.dataTree,\r\n\t\toutput = [];\r\n\r\n\t\tif(config.children){\r\n\r\n\t\t\tif(!Array.isArray(config.children)){\r\n\t\t\t\tconfig.children = this.generateChildren(row);\r\n\t\t\t}\r\n\r\n\t\t\tconfig.children.forEach((childRow) => {\r\n\t\t\t\tif(childRow instanceof Row){\r\n\t\t\t\t\toutput.push(component ? childRow.getComponent() : childRow);\r\n\r\n\t\t\t\t\tif(recurse){\r\n\t\t\t\t\t\toutput = output.concat(this.getTreeChildren(childRow, component, recurse));\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tcheckForRestyle(cell){\r\n\t\tif(!cell.row.cells.indexOf(cell)){\r\n\t\t\tcell.row.reinitialize();\r\n\t\t}\r\n\t}\r\n\r\n\tgetChildField(){\r\n\t\treturn this.field;\r\n\t}\r\n\r\n\tredrawNeeded(data){\r\n\t\treturn (this.field ? typeof data[this.field] !== \"undefined\" : false) || (this.elementField ? typeof data[this.elementField] !== \"undefined\" : false);\r\n\t}\r\n}\r\n\r\nDataTree.moduleName = \"dataTree\";\r\n\r\nexport default DataTree;","export default function(list, options, setFileContents){\r\n\tvar delimiter = options && options.delimiter ? options.delimiter : \",\",\r\n\tfileContents = [],\r\n\theaders = [];\r\n\r\n\tlist.forEach((row) => {\r\n\t\tvar item = [];\r\n\r\n\t\tswitch(row.type){\r\n\t\t\tcase \"group\":\r\n\t\t\tconsole.warn(\"Download Warning - CSV downloader cannot process row groups\");\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"calc\":\r\n\t\t\tconsole.warn(\"Download Warning - CSV downloader cannot process column calculations\");\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"header\":\r\n\t\t\trow.columns.forEach((col, i) => {\r\n\t\t\t\tif(col && col.depth === 1){\r\n\t\t\t\t\theaders[i] = typeof col.value == \"undefined\" || col.value === null ? \"\" : ('\"' + String(col.value).split('\"').join('\"\"') + '\"');\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"row\":\r\n\t\t\trow.columns.forEach((col) => {\r\n\r\n\t\t\t\tif(col){\r\n\r\n\t\t\t\t\tswitch(typeof col.value){\r\n\t\t\t\t\t\tcase \"object\":\r\n\t\t\t\t\t\tcol.value = JSON.stringify(col.value);\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\tcase \"undefined\":\r\n\t\t\t\t\t\tcase \"null\":\r\n\t\t\t\t\t\tcol.value = \"\";\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\titem.push('\"' + String(col.value).split('\"').join('\"\"') + '\"');\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tfileContents.push(item.join(delimiter));\r\n\t\t\tbreak;\r\n\t\t}\r\n\t});\r\n\r\n\tif(headers.length){\r\n\t\tfileContents.unshift(headers.join(delimiter));\r\n\t}\r\n\r\n\tfileContents = fileContents.join(\"\\n\");\r\n\r\n\tif(options.bom){\r\n\t\tfileContents = \"\\ufeff\" + fileContents;\r\n\t}\r\n\r\n\tsetFileContents(fileContents, \"text/csv\");\r\n};","export default function(list, options, setFileContents){\r\n\tvar fileContents = [];\r\n\r\n\tlist.forEach((row) => {\r\n\t\tvar item = {};\r\n\r\n\t\tswitch(row.type){\r\n\t\t\tcase \"header\":\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"group\":\r\n\t\t\tconsole.warn(\"Download Warning - JSON downloader cannot process row groups\");\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"calc\":\r\n\t\t\tconsole.warn(\"Download Warning - JSON downloader cannot process column calculations\");\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"row\":\r\n\t\t\trow.columns.forEach((col) => {\r\n\t\t\t\tif(col){\r\n\t\t\t\t\titem[col.component.getField()] = col.value;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tfileContents.push(item);\r\n\t\t\tbreak;\r\n\t\t}\r\n\t});\r\n\r\n\tfileContents = JSON.stringify(fileContents, null, '\\t');\r\n\r\n\tsetFileContents(fileContents, \"application/json\");\r\n};","export default function(list, options, setFileContents){\r\n\tvar header = [],\r\n\tbody = [],\r\n\tautoTableParams = {},\r\n\trowGroupStyles = options.rowGroupStyles || {\r\n\t\tfontStyle: \"bold\",\r\n\t\tfontSize: 12,\r\n\t\tcellPadding: 6,\r\n\t\tfillColor: 220,\r\n\t},\r\n\trowCalcStyles = options.rowCalcStyles || {\r\n\t\tfontStyle: \"bold\",\r\n\t\tfontSize: 10,\r\n\t\tcellPadding: 4,\r\n\t\tfillColor: 232,\r\n\t},\r\n\tjsPDFParams = options.jsPDF || {},\r\n\ttitle = options && options.title ? options.title : \"\";\r\n\r\n\tif(!jsPDFParams.orientation){\r\n\t\tjsPDFParams.orientation = options.orientation || \"landscape\";\r\n\t}\r\n\r\n\tif(!jsPDFParams.unit){\r\n\t\tjsPDFParams.unit = \"pt\";\r\n\t}\r\n\r\n\t//parse row list\r\n\tlist.forEach((row) => {\r\n\t\tvar item = {};\r\n\r\n\t\tswitch(row.type){\r\n\t\t\tcase \"header\":\r\n\t\t\theader.push(parseRow(row));\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"group\":\r\n\t\t\tbody.push(parseRow(row, rowGroupStyles));\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"calc\":\r\n\t\t\tbody.push(parseRow(row, rowCalcStyles));\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"row\":\r\n\t\t\tbody.push(parseRow(row));\r\n\t\t\tbreak;\r\n\t\t}\r\n\t});\r\n\r\n\tfunction parseRow(row, styles){\r\n\t\tvar rowData = [];\r\n\r\n\t\trow.columns.forEach((col) =>{\r\n\t\t\tvar cell;\r\n\r\n\t\t\tif(col){\r\n\t\t\t\tswitch(typeof col.value){\r\n\t\t\t\t\tcase \"object\":\r\n\t\t\t\t\tcol.value = JSON.stringify(col.value);\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase \"undefined\":\r\n\t\t\t\t\tcase \"null\":\r\n\t\t\t\t\tcol.value = \"\";\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tcell = {\r\n\t\t\t\t\tcontent:col.value,\r\n\t\t\t\t\tcolSpan:col.width,\r\n\t\t\t\t\trowSpan:col.height,\r\n\t\t\t\t};\r\n\r\n\t\t\t\tif(styles){\r\n\t\t\t\t\tcell.styles = styles;\r\n\t\t\t\t}\r\n\r\n\t\t\t\trowData.push(cell);\r\n\t\t\t}else{\r\n\t\t\t\trowData.push(\"\");\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn rowData;\r\n\t}\r\n\r\n\r\n\t//configure PDF\r\n\tvar doc = new jsPDF(jsPDFParams); //set document to landscape, better for most tables\r\n\r\n\tif(options && options.autoTable){\r\n\t\tif(typeof options.autoTable === \"function\"){\r\n\t\t\tautoTableParams = options.autoTable(doc) || {};\r\n\t\t}else{\r\n\t\t\tautoTableParams = options.autoTable;\r\n\t\t}\r\n\t}\r\n\r\n\tif(title){\r\n\t\tautoTableParams.addPageContent = function(data) {\r\n\t\t\tdoc.text(title, 40, 30);\r\n\t\t};\r\n\t}\r\n\r\n\tautoTableParams.head = header;\r\n\tautoTableParams.body = body;\r\n\r\n\tdoc.autoTable(autoTableParams);\r\n\r\n\tif(options && options.documentProcessing){\r\n\t\toptions.documentProcessing(doc);\r\n\t}\r\n\r\n\tsetFileContents(doc.output(\"arraybuffer\"), \"application/pdf\");\r\n};","export default function(list, options, setFileContents){\r\n\tvar self = this,\r\n\tsheetName = options.sheetName || \"Sheet1\",\r\n\tworkbook = XLSX.utils.book_new(),\r\n\toutput;\r\n\r\n\tworkbook.SheetNames = [];\r\n\tworkbook.Sheets = {};\r\n\r\n\tfunction generateSheet(){\r\n\t\tvar rows = [],\r\n\t\tmerges = [],\r\n\t\tworksheet = {},\r\n\t\trange = {s: {c:0, r:0}, e: {c:(list[0] ? list[0].columns.reduce((a, b) => a + (b && b.width ? b.width : 1), 0) : 0), r:list.length }};\r\n\r\n\t\t//parse row list\r\n\t\tlist.forEach((row, i) => {\r\n\t\t\tvar rowData = [];\r\n\r\n\t\t\trow.columns.forEach(function(col, j){\r\n\r\n\t\t\t\tif(col){\r\n\t\t\t\t\trowData.push(!(col.value instanceof Date) && typeof col.value === \"object\" ? JSON.stringify(col.value) : col.value);\r\n\r\n\t\t\t\t\tif(col.width > 1 || col.height > -1){\r\n\t\t\t\t\t\tmerges.push({s:{r:i,c:j},e:{r:i + col.height - 1,c:j + col.width - 1}});\r\n\t\t\t\t\t}\r\n\t\t\t\t}else{\r\n\t\t\t\t\trowData.push(\"\");\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\trows.push(rowData);\r\n\t\t});\r\n\r\n\r\n\t\t//convert rows to worksheet\r\n\t\tXLSX.utils.sheet_add_aoa(worksheet, rows);\r\n\r\n\t\tworksheet['!ref'] = XLSX.utils.encode_range(range);\r\n\r\n\t\tif(merges.length){\r\n\t\t\tworksheet[\"!merges\"] = merges;\r\n\t\t}\r\n\r\n\t\treturn worksheet;\r\n\t}\r\n\r\n\tif(options.sheetOnly){\r\n\t\tsetFileContents(generateSheet());\r\n\t\treturn;\r\n\t}\r\n\r\n\tif(options.sheets){\r\n\t\tfor(var sheet in options.sheets){\r\n\r\n\t\t\tif(options.sheets[sheet] === true){\r\n\t\t\t\tworkbook.SheetNames.push(sheet);\r\n\t\t\t\tworkbook.Sheets[sheet] = generateSheet();\r\n\t\t\t}else{\r\n\r\n\t\t\t\tworkbook.SheetNames.push(sheet);\r\n\r\n\t\t\t\tthis.modules.comms.send(options.sheets[sheet], \"download\", \"intercept\",{\r\n\t\t\t\t\ttype:\"xlsx\",\r\n\t\t\t\t\toptions:{sheetOnly:true},\r\n\t\t\t\t\tactive:self.active,\r\n\t\t\t\t\tintercept:function(data){\r\n\t\t\t\t\t\tworkbook.Sheets[sheet] = data;\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\t}else{\r\n\t\tworkbook.SheetNames.push(sheetName);\r\n\t\tworkbook.Sheets[sheetName] = generateSheet();\r\n\t}\r\n\r\n\tif(options.documentProcessing){\r\n\t\tworkbook = options.documentProcessing(workbook);\r\n\t}\r\n\r\n\t//convert workbook to binary array\r\n\tfunction s2ab(s) {\r\n\t\tvar buf = new ArrayBuffer(s.length);\r\n\t\tvar view = new Uint8Array(buf);\r\n\t\tfor (var i=0; i!=s.length; ++i) view[i] = s.charCodeAt(i) & 0xFF;\r\n\t\t\treturn buf;\r\n\t}\r\n\r\n\toutput = XLSX.write(workbook, {bookType:'xlsx', bookSST:true, type: 'binary'});\r\n\r\n\tsetFileContents(s2ab(output), \"application/octet-stream\");\r\n};","export default function(list, options, setFileContents){\r\n\tif(this.modExists(\"export\", true)){\r\n\t\tsetFileContents(this.modules.export.genereateHTMLTable(list), \"text/html\");\r\n\t}\r\n};","import csv from './downloaders/csv.js';\r\nimport json from './downloaders/json.js';\r\nimport pdf from './downloaders/pdf.js';\r\nimport xlsx from './downloaders/xlsx.js';\r\nimport html from './downloaders/html.js';\r\n\r\nexport default {\r\n\tcsv:csv,\r\n\tjson:json,\r\n\tpdf:pdf,\r\n\txlsx:xlsx,\r\n\thtml:html,\r\n};","import Module from '../../core/Module.js';\r\n\r\nimport defaultDownloaders from './defaults/downloaders.js';\r\n\r\nclass Download extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\t}\r\n\r\n\t//trigger file download\r\n\tdownload(type, filename, options, range, interceptCallback){\r\n\t\tvar downloadFunc = false;\r\n\r\n\t\tfunction buildLink(data, mime){\r\n\t\t\tif(interceptCallback){\r\n\t\t\t\tif(interceptCallback === true){\r\n\t\t\t\t\tthis.triggerDownload(data, mime, type, filename, true);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tinterceptCallback(data);\r\n\t\t\t\t}\r\n\r\n\t\t\t}else{\r\n\t\t\t\tthis.triggerDownload(data, mime, type, filename);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(typeof type == \"function\"){\r\n\t\t\tdownloadFunc = type;\r\n\t\t}else{\r\n\t\t\tif(Download.downloaders[type]){\r\n\t\t\t\tdownloadFunc = Download.downloaders[type];\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Download Error - No such download type found: \", type);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(downloadFunc){\r\n\t\t\tvar list = this.generateExportList(range);\r\n\r\n\t\t\tdownloadFunc.call(this.table, list , options || {}, buildLink);\r\n\t\t}\r\n\t}\r\n\r\n\tgenerateExportList(range){\r\n\t\tvar list = this.table.modules.export.generateExportList(this.table.options.downloadConfig, false, range || this.table.options.downloadRowRange, \"download\");\r\n\r\n\t\t//assign group header formatter\r\n\t\tvar groupHeader = this.table.options.groupHeaderDownload;\r\n\r\n\t\tif(groupHeader && !Array.isArray(groupHeader)){\r\n\t\t\tgroupHeader = [groupHeader];\r\n\t\t}\r\n\r\n\t\tlist.forEach((row) => {\r\n\t\t\tvar group;\r\n\r\n\t\t\tif(row.type === \"group\"){\r\n\t\t\t\tgroup = row.columns[0];\r\n\r\n\t\t\t\tif(groupHeader && groupHeader[row.indent]){\r\n\t\t\t\t\tgroup.value = groupHeader[row.indent](group.value, row.component._group.getRowCount(), row.component._group.getData(), row.component);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn list;\r\n\t}\r\n\r\n\ttriggerDownload(data, mime, type, filename, newTab){\r\n\t\tvar element = document.createElement('a'),\r\n\t\tblob = new Blob([data],{type:mime}),\r\n\t\tfilename = filename || \"Tabulator.\" + (typeof type === \"function\" ? \"txt\" : type);\r\n\r\n\t\tblob = this.table.options.downloadReady.call(this.table, data, blob);\r\n\r\n\t\tif(blob){\r\n\r\n\t\t\tif(newTab){\r\n\t\t\t\twindow.open(window.URL.createObjectURL(blob));\r\n\t\t\t}else{\r\n\t\t\t\tif(navigator.msSaveOrOpenBlob){\r\n\t\t\t\t\tnavigator.msSaveOrOpenBlob(blob, filename);\r\n\t\t\t\t}else{\r\n\t\t\t\t\telement.setAttribute('href', window.URL.createObjectURL(blob));\r\n\r\n\t\t\t\t\t//set file title\r\n\t\t\t\t\telement.setAttribute('download', filename);\r\n\r\n\t\t\t\t\t//trigger download\r\n\t\t\t\t\telement.style.display = 'none';\r\n\t\t\t\t\tdocument.body.appendChild(element);\r\n\t\t\t\t\telement.click();\r\n\r\n\t\t\t\t\t//remove temporary link element\r\n\t\t\t\t\tdocument.body.removeChild(element);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\r\n\t\t\tif(this.table.options.downloadComplete){\r\n\t\t\t\tthis.table.options.downloadComplete();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tcommsReceived(table, action, data){\r\n\t\tswitch(action){\r\n\t\t\tcase \"intercept\":\r\n\t\t\tthis.download(data.type, \"\", data.options, data.active, data.intercept);\r\n\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n}\r\n\r\nDownload.moduleName = \"download\";\r\n\r\n//load defaults\r\nDownload.downloaders = defaultDownloaders;\r\n\r\nexport default Download;","//input element\r\nexport default function(cell, onRendered, success, cancel, editorParams){\r\n\t//create and style input\r\n\tvar cellValue = cell.getValue(),\r\n\tinput = document.createElement(\"input\");\r\n\r\n\tinput.setAttribute(\"type\", editorParams.search ? \"search\" : \"text\");\r\n\r\n\tinput.style.padding = \"4px\";\r\n\tinput.style.width = \"100%\";\r\n\tinput.style.boxSizing = \"border-box\";\r\n\r\n\tif(editorParams.elementAttributes && typeof editorParams.elementAttributes == \"object\"){\r\n\t\tfor (let key in editorParams.elementAttributes){\r\n\t\t\tif(key.charAt(0) == \"+\"){\r\n\t\t\t\tkey = key.slice(1);\r\n\t\t\t\tinput.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\r\n\t\t\t}else{\r\n\t\t\t\tinput.setAttribute(key, editorParams.elementAttributes[key]);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tinput.value = typeof cellValue !== \"undefined\" ? cellValue : \"\";\r\n\r\n\tonRendered(function(){\r\n\t\tinput.focus({preventScroll: true});\r\n\t\tinput.style.height = \"100%\";\r\n\t});\r\n\r\n\tfunction onChange(e){\r\n\t\tif(((cellValue === null || typeof cellValue === \"undefined\") && input.value !== \"\") || input.value !== cellValue){\r\n\t\t\tif(success(input.value)){\r\n\t\t\t\tcellValue = input.value; //persist value if successfully validated incase editor is used as header filter\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tcancel();\r\n\t\t}\r\n\t}\r\n\r\n\t//submit new value on blur or change\r\n\tinput.addEventListener(\"change\", onChange);\r\n\tinput.addEventListener(\"blur\", onChange);\r\n\r\n\t//submit new value on enter\r\n\tinput.addEventListener(\"keydown\", function(e){\r\n\t\tswitch(e.keyCode){\r\n\t\t\t// case 9:\r\n\t\t\tcase 13:\r\n\t\t\tonChange(e);\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 27:\r\n\t\t\tcancel();\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 35:\r\n\t\t\tcase 36:\r\n\t\t\te.stopPropagation();\r\n\t\t\tbreak;\r\n\t\t}\r\n\t});\r\n\r\n\tif(editorParams.mask){\r\n\t\tthis.table.modules.edit.maskInput(input, editorParams);\r\n\t}\r\n\r\n\treturn input;\r\n};","//resizable text area element\r\nexport default function(cell, onRendered, success, cancel, editorParams){\r\n var self = this,\r\n cellValue = cell.getValue(),\r\n vertNav = editorParams.verticalNavigation || \"hybrid\",\r\n value = String(cellValue !== null && typeof cellValue !== \"undefined\" ? cellValue : \"\"),\r\n count = (value.match(/(?:\\r\\n|\\r|\\n)/g) || []).length + 1,\r\n input = document.createElement(\"textarea\"),\r\n scrollHeight = 0;\r\n\r\n //create and style input\r\n input.style.display = \"block\";\r\n input.style.padding = \"2px\";\r\n input.style.height = \"100%\";\r\n input.style.width = \"100%\";\r\n input.style.boxSizing = \"border-box\";\r\n input.style.whiteSpace = \"pre-wrap\";\r\n input.style.resize = \"none\";\r\n\r\n if(editorParams.elementAttributes && typeof editorParams.elementAttributes == \"object\"){\r\n for (let key in editorParams.elementAttributes){\r\n if(key.charAt(0) == \"+\"){\r\n key = key.slice(1);\r\n input.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\r\n }else{\r\n input.setAttribute(key, editorParams.elementAttributes[key]);\r\n }\r\n }\r\n }\r\n\r\n input.value = value;\r\n\r\n onRendered(function(){\r\n input.focus({preventScroll: true});\r\n input.style.height = \"100%\";\r\n\r\n input.scrollHeight;\r\n input.style.height = input.scrollHeight + \"px\";\r\n cell.getRow().normalizeHeight();\r\n });\r\n\r\n function onChange(e){\r\n\r\n if(((cellValue === null || typeof cellValue === \"undefined\") && input.value !== \"\") || input.value !== cellValue){\r\n\r\n if(success(input.value)){\r\n cellValue = input.value; //persist value if successfully validated incase editor is used as header filter\r\n }\r\n\r\n setTimeout(function(){\r\n cell.getRow().normalizeHeight();\r\n },300)\r\n }else{\r\n cancel();\r\n }\r\n }\r\n\r\n //submit new value on blur or change\r\n input.addEventListener(\"change\", onChange);\r\n input.addEventListener(\"blur\", onChange);\r\n\r\n input.addEventListener(\"keyup\", function(){\r\n\r\n input.style.height = \"\";\r\n\r\n var heightNow = input.scrollHeight;\r\n\r\n input.style.height = heightNow + \"px\";\r\n\r\n if(heightNow != scrollHeight){\r\n scrollHeight = heightNow;\r\n cell.getRow().normalizeHeight();\r\n }\r\n });\r\n\r\n input.addEventListener(\"keydown\", function(e){\r\n\r\n switch(e.keyCode){\r\n case 27:\r\n cancel();\r\n break;\r\n\r\n case 38: //up arrow\r\n if(vertNav == \"editor\" || (vertNav == \"hybrid\" && input.selectionStart)){\r\n e.stopImmediatePropagation();\r\n e.stopPropagation();\r\n }\r\n\r\n break;\r\n\r\n case 40: //down arrow\r\n if(vertNav == \"editor\" || (vertNav == \"hybrid\" && input.selectionStart !== input.value.length)){\r\n e.stopImmediatePropagation();\r\n e.stopPropagation();\r\n }\r\n break;\r\n\r\n case 35:\r\n case 36:\r\n e.stopPropagation();\r\n break;\r\n }\r\n });\r\n\r\n if(editorParams.mask){\r\n this.table.modules.edit.maskInput(input, editorParams);\r\n }\r\n\r\n return input;\r\n};","//input element with type of number\r\nexport default function(cell, onRendered, success, cancel, editorParams){\r\n\tvar cellValue = cell.getValue(),\r\n\tvertNav = editorParams.verticalNavigation || \"editor\",\r\n\tinput = document.createElement(\"input\");\r\n\r\n\tinput.setAttribute(\"type\", \"number\");\r\n\r\n\tif(typeof editorParams.max != \"undefined\"){\r\n\t\tinput.setAttribute(\"max\", editorParams.max);\r\n\t}\r\n\r\n\tif(typeof editorParams.min != \"undefined\"){\r\n\t\tinput.setAttribute(\"min\", editorParams.min);\r\n\t}\r\n\r\n\tif(typeof editorParams.step != \"undefined\"){\r\n\t\tinput.setAttribute(\"step\", editorParams.step);\r\n\t}\r\n\r\n\t//create and style input\r\n\tinput.style.padding = \"4px\";\r\n\tinput.style.width = \"100%\";\r\n\tinput.style.boxSizing = \"border-box\";\r\n\r\n\tif(editorParams.elementAttributes && typeof editorParams.elementAttributes == \"object\"){\r\n\t\tfor (let key in editorParams.elementAttributes){\r\n\t\t\tif(key.charAt(0) == \"+\"){\r\n\t\t\t\tkey = key.slice(1);\r\n\t\t\t\tinput.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\r\n\t\t\t}else{\r\n\t\t\t\tinput.setAttribute(key, editorParams.elementAttributes[key]);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tinput.value = cellValue;\r\n\r\n\tvar blurFunc = function(e){\r\n\t\tonChange();\r\n\t};\r\n\r\n\tonRendered(function () {\r\n\t\t//submit new value on blur\r\n\t\tinput.removeEventListener(\"blur\", blurFunc);\r\n\r\n\t\tinput.focus({preventScroll: true});\r\n\t\tinput.style.height = \"100%\";\r\n\r\n\t\t//submit new value on blur\r\n\t\tinput.addEventListener(\"blur\", blurFunc);\r\n\t});\r\n\r\n\tfunction onChange(){\r\n\t\tvar value = input.value;\r\n\r\n\t\tif(!isNaN(value) && value !==\"\"){\r\n\t\t\tvalue = Number(value);\r\n\t\t}\r\n\r\n\t\tif(value !== cellValue){\r\n\t\t\tif(success(value)){\r\n\t\t\t\tcellValue = value; //persist value if successfully validated incase editor is used as header filter\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tcancel();\r\n\t\t}\r\n\t}\r\n\r\n\t//submit new value on enter\r\n\tinput.addEventListener(\"keydown\", function(e){\r\n\t\tswitch(e.keyCode){\r\n\t\t\tcase 13:\r\n\t\t\t// case 9:\r\n\t\t\tonChange();\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 27:\r\n\t\t\tcancel();\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 38: //up arrow\r\n\t\t\tcase 40: //down arrow\r\n\t\t\tif(vertNav == \"editor\"){\r\n\t\t\t\te.stopImmediatePropagation();\r\n\t\t\t\te.stopPropagation();\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 35:\r\n\t\t\tcase 36:\r\n\t\t\te.stopPropagation();\r\n\t\t\tbreak;\r\n\t\t}\r\n\t});\r\n\r\n\tif(editorParams.mask){\r\n\t\tthis.table.modules.edit.maskInput(input, editorParams);\r\n\t}\r\n\r\n\treturn input;\r\n};","//input element with type of number\r\nexport default function(cell, onRendered, success, cancel, editorParams){\r\n\tvar cellValue = cell.getValue(),\r\n\tinput = document.createElement(\"input\");\r\n\r\n\tinput.setAttribute(\"type\", \"range\");\r\n\r\n\tif (typeof editorParams.max != \"undefined\") {\r\n\t\tinput.setAttribute(\"max\", editorParams.max);\r\n\t}\r\n\r\n\tif (typeof editorParams.min != \"undefined\") {\r\n\t\tinput.setAttribute(\"min\", editorParams.min);\r\n\t}\r\n\r\n\tif (typeof editorParams.step != \"undefined\") {\r\n\t\tinput.setAttribute(\"step\", editorParams.step);\r\n\t}\r\n\r\n\t//create and style input\r\n\tinput.style.padding = \"4px\";\r\n\tinput.style.width = \"100%\";\r\n\tinput.style.boxSizing = \"border-box\";\r\n\r\n\tif(editorParams.elementAttributes && typeof editorParams.elementAttributes == \"object\"){\r\n\t\tfor (let key in editorParams.elementAttributes){\r\n\t\t\tif(key.charAt(0) == \"+\"){\r\n\t\t\t\tkey = key.slice(1);\r\n\t\t\t\tinput.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\r\n\t\t\t}else{\r\n\t\t\t\tinput.setAttribute(key, editorParams.elementAttributes[key]);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tinput.value = cellValue;\r\n\r\n\tonRendered(function () {\r\n\t\tinput.focus({preventScroll: true});\r\n\t\tinput.style.height = \"100%\";\r\n\t});\r\n\r\n\tfunction onChange(){\r\n\t\tvar value = input.value;\r\n\r\n\t\tif(!isNaN(value) && value !==\"\"){\r\n\t\t\tvalue = Number(value);\r\n\t\t}\r\n\r\n\t\tif(value != cellValue){\r\n\t\t\tif(success(value)){\r\n\t\t\t\tcellValue = value; //persist value if successfully validated incase editor is used as header filter\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tcancel();\r\n\t\t}\r\n\t}\r\n\r\n\t//submit new value on blur\r\n\tinput.addEventListener(\"blur\", function(e){\r\n\t\tonChange();\r\n\t});\r\n\r\n\t//submit new value on enter\r\n\tinput.addEventListener(\"keydown\", function(e){\r\n\t\tswitch(e.keyCode){\r\n\t\t\tcase 13:\r\n\t\t\t// case 9:\r\n\t\t\tonChange();\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 27:\r\n\t\t\tcancel();\r\n\t\t\tbreak;\r\n\t\t}\r\n\t});\r\n\r\n\treturn input;\r\n};","import Helpers from '../../../../core/Helpers.js';\r\n\r\n//dropdown select editor\r\nexport default function(cell, onRendered, success, cancel, editorParams){\r\n\tvar self = this,\r\n\tcellEl = cell.getElement(),\r\n\tinitialValue = cell.getValue(),\r\n\tvertNav = editorParams.verticalNavigation || \"editor\",\r\n\tinitialDisplayValue = typeof initialValue !== \"undefined\" || initialValue === null ? (Array.isArray(initialValue) ? initialValue : [initialValue]) : (typeof editorParams.defaultValue !== \"undefined\" ? editorParams.defaultValue : []),\r\n\tinput = document.createElement(\"input\"),\r\n\tlistEl = document.createElement(\"div\"),\r\n\tmultiselect = editorParams.multiselect,\r\n\tdataItems = [],\r\n\tcurrentItem = {},\r\n\tdisplayItems = [],\r\n\tcurrentItems = [],\r\n\tblurable = true,\r\n\tblockListShow = false,\r\n\tsearchWord = \"\",\r\n\tsearchWordTimeout = null;\r\n\r\n\tif(Array.isArray(editorParams) || (!Array.isArray(editorParams) && typeof editorParams === \"object\" && !editorParams.values)){\r\n\t\tconsole.warn(\"DEPRECATION WARNING - values for the select editor must now be passed into the values property of the editorParams object, not as the editorParams object\");\r\n\t\teditorParams = {values:editorParams};\r\n\t}\r\n\r\n\tfunction getUniqueColumnValues(field){\r\n\t\tvar output = {},\r\n\t\tdata = self.table.getData(),\r\n\t\tcolumn;\r\n\r\n\t\tif(field){\r\n\t\t\tcolumn = self.table.columnManager.getColumnByField(field);\r\n\t\t}else{\r\n\t\t\tcolumn = cell.getColumn()._getSelf();\r\n\t\t}\r\n\r\n\t\tif(column){\r\n\t\t\tdata.forEach(function(row){\r\n\t\t\t\tvar val = column.getFieldValue(row);\r\n\r\n\t\t\t\tif(val !== null && typeof val !== \"undefined\" && val !== \"\"){\r\n\t\t\t\t\toutput[val] = true;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"unable to find matching column to create select lookup list:\", field);\r\n\t\t}\r\n\r\n\t\treturn Object.keys(output);\r\n\t}\r\n\r\n\tfunction parseItems(inputValues, curentValues){\r\n\t\tvar dataList = [];\r\n\t\tvar displayList = [];\r\n\r\n\t\tfunction processComplexListItem(item){\r\n\t\t\tvar item = {\r\n\t\t\t\tlabel:item.label,\r\n\t\t\t\tvalue:item.value,\r\n\t\t\t\titemParams:item.itemParams,\r\n\t\t\t\telementAttributes: item.elementAttributes,\r\n\t\t\t\telement:false,\r\n\t\t\t};\r\n\r\n\t\t\t// if(item.value === curentValue || (!isNaN(parseFloat(item.value)) && !isNaN(parseFloat(item.value)) && parseFloat(item.value) === parseFloat(curentValue))){\r\n\t\t\t// \tsetCurrentItem(item);\r\n\t\t\t// }\r\n\r\n\t\t\tif(curentValues.indexOf(item.value) > -1){\r\n\t\t\t\tsetItem(item);\r\n\t\t\t}\r\n\r\n\t\t\tdataList.push(item);\r\n\t\t\tdisplayList.push(item);\r\n\r\n\t\t\treturn item;\r\n\t\t}\r\n\r\n\t\tif(typeof inputValues == \"function\"){\r\n\t\t\tinputValues = inputValues(cell);\r\n\t\t}\r\n\r\n\t\tif(Array.isArray(inputValues)){\r\n\t\t\tinputValues.forEach(function(value){\r\n\t\t\t\tvar item;\r\n\r\n\t\t\t\tif(typeof value === \"object\"){\r\n\r\n\t\t\t\t\tif(value.options){\r\n\t\t\t\t\t\titem = {\r\n\t\t\t\t\t\t\tlabel:value.label,\r\n\t\t\t\t\t\t\tgroup:true,\r\n\t\t\t\t\t\t\titemParams:value.itemParams,\r\n\t\t\t\t\t\t\telementAttributes:value.elementAttributes,\r\n\t\t\t\t\t\t\telement:false,\r\n\t\t\t\t\t\t};\r\n\r\n\t\t\t\t\t\tdisplayList.push(item);\r\n\r\n\t\t\t\t\t\tvalue.options.forEach(function(item){\r\n\t\t\t\t\t\t\tprocessComplexListItem(item);\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tprocessComplexListItem(value);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}else{\r\n\r\n\t\t\t\t\titem = {\r\n\t\t\t\t\t\tlabel:value,\r\n\t\t\t\t\t\tvalue:value,\r\n\t\t\t\t\t\telement:false,\r\n\t\t\t\t\t};\r\n\r\n\t\t\t\t\t// if(item.value === curentValue || (!isNaN(parseFloat(item.value)) && !isNaN(parseFloat(item.value)) && parseFloat(item.value) === parseFloat(curentValue))){\r\n\t\t\t\t\t// \tsetCurrentItem(item);\r\n\t\t\t\t\t// }\r\n\r\n\t\t\t\t\tif(curentValues.indexOf(item.value) > -1){\r\n\t\t\t\t\t\tsetItem(item);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tdataList.push(item);\r\n\t\t\t\t\tdisplayList.push(item);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tfor(var key in inputValues){\r\n\t\t\t\tvar item = {\r\n\t\t\t\t\tlabel:inputValues[key],\r\n\t\t\t\t\tvalue:key,\r\n\t\t\t\t\telement:false,\r\n\t\t\t\t};\r\n\r\n\t\t\t\t// if(item.value === curentValue || (!isNaN(parseFloat(item.value)) && !isNaN(parseFloat(item.value)) && parseFloat(item.value) === parseFloat(curentValue))){\r\n\t\t\t\t// \tsetCurrentItem(item);\r\n\t\t\t\t// }\r\n\r\n\t\t\t\tif(curentValues.indexOf(item.value) > -1){\r\n\t\t\t\t\tsetItem(item);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tdataList.push(item);\r\n\t\t\t\tdisplayList.push(item);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(editorParams.sortValuesList){\r\n\t\t\tdataList.sort((a, b) => {\r\n\t\t\t\treturn a.label < b.label ? -1 : (a.label > b.label ? 1 : 0);\r\n\t\t\t});\r\n\r\n\t\t\tdisplayList.sort((a, b) => {\r\n\t\t\t\treturn a.label < b.label ? -1 : (a.label > b.label ? 1 : 0);\r\n\t\t\t});\r\n\r\n\t\t\tif(editorParams.sortValuesList !== \"asc\"){\r\n\t\t\t\tdataList.reverse();\r\n\t\t\t\tdisplayList.reverse();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tdataItems = dataList;\r\n\t\tdisplayItems = displayList;\r\n\r\n\t\tfillList();\r\n\t}\r\n\r\n\tfunction fillList(){\r\n\t\twhile(listEl.firstChild) listEl.removeChild(listEl.firstChild);\r\n\r\n\t\tdisplayItems.forEach(function(item){\r\n\r\n\t\t\tvar el = item.element;\r\n\r\n\t\t\tif(!el){\r\n\t\t\t\tel = document.createElement(\"div\");\r\n\t\t\t\titem.label = editorParams.listItemFormatter ? editorParams.listItemFormatter(item.value, item.label, cell, el, item.itemParams) : item.label;\r\n\t\t\t\tif(item.group){\r\n\t\t\t\t\tel.classList.add(\"tabulator-edit-select-list-group\");\r\n\t\t\t\t\tel.tabIndex = 0;\r\n\t\t\t\t\tel.innerHTML = item.label === \"\" ? \" \" : item.label;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tel.classList.add(\"tabulator-edit-select-list-item\");\r\n\t\t\t\t\tel.tabIndex = 0;\r\n\t\t\t\t\tel.innerHTML = item.label === \"\" ? \" \" : item.label;\r\n\r\n\t\t\t\t\tel.addEventListener(\"click\", function(){\r\n\t\t\t\t\t\tblockListShow = true;\r\n\r\n\t\t\t\t\t\tsetTimeout(() => {\r\n\t\t\t\t\t\t\tblockListShow = false;\r\n\t\t\t\t\t\t}, 10);\r\n\r\n\t\t\t\t\t\t// setCurrentItem(item);\r\n\t\t\t\t\t\t// chooseItem();\r\n\t\t\t\t\t\tif(multiselect){\r\n\t\t\t\t\t\t\ttoggleItem(item);\r\n\t\t\t\t\t\t\tinput.focus();\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\tchooseItem(item);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\t// if(item === currentItem){\r\n\t\t\t\t\t// \tel.classList.add(\"active\");\r\n\t\t\t\t\t// }\r\n\r\n\t\t\t\t\tif(currentItems.indexOf(item) > -1){\r\n\t\t\t\t\t\tel.classList.add(\"active\");\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(item.elementAttributes && typeof item.elementAttributes == \"object\"){\r\n\t\t\t\t\tfor (let key in item.elementAttributes){\r\n\t\t\t\t\t\tif(key.charAt(0) == \"+\"){\r\n\t\t\t\t\t\t\tkey = key.slice(1);\r\n\t\t\t\t\t\t\tel.setAttribute(key, input.getAttribute(key) + item.elementAttributes[\"+\" + key]);\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\tel.setAttribute(key, item.elementAttributes[key]);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tel.addEventListener(\"mousedown\", function(){\r\n\t\t\t\t\tblurable = false;\r\n\r\n\t\t\t\t\tsetTimeout(function(){\r\n\t\t\t\t\t\tblurable = true;\r\n\t\t\t\t\t}, 10);\r\n\t\t\t\t});\r\n\r\n\t\t\t\titem.element = el;\r\n\r\n\r\n\t\t\t}\r\n\r\n\t\t\tlistEl.appendChild(el);\r\n\t\t});\r\n\t}\r\n\r\n\r\n\tfunction setCurrentItem(item, active){\r\n\r\n\t\tif(!multiselect && currentItem && currentItem.element){\r\n\t\t\tcurrentItem.element.classList.remove(\"active\");\r\n\t\t}\r\n\r\n\t\tif(currentItem && currentItem.element){\r\n\t\t\tcurrentItem.element.classList.remove(\"focused\");\r\n\t\t}\r\n\r\n\t\tcurrentItem = item;\r\n\r\n\t\tif(item.element){\r\n\t\t\titem.element.classList.add(\"focused\");\r\n\t\t\tif(active){\r\n\t\t\t\titem.element.classList.add(\"active\");\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(item && item.element && item.element.scrollIntoView){\r\n\t\t\titem.element.scrollIntoView({behavior: 'smooth', block: 'nearest', inline: 'start'});\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t// function chooseItem(){\r\n\t// \thideList();\r\n\r\n\t// \tif(initialValue !== currentItem.value){\r\n\t// \t\tinitialValue = currentItem.value;\r\n\t// \t\tsuccess(currentItem.value);\r\n\t// \t}else{\r\n\t// \t\tcancel();\r\n\t// \t}\r\n\t// }\r\n\r\n\tfunction setItem(item) {\r\n\t\tvar index = currentItems.indexOf(item);\r\n\r\n\t\tif(index == -1){\r\n\t\t\tcurrentItems.push(item);\r\n\t\t\tsetCurrentItem(item, true);\r\n\t\t}\r\n\r\n\t\tfillInput();\r\n\t}\r\n\r\n\tfunction unsetItem(index) {\r\n\t\tvar item = currentItems[index];\r\n\r\n\t\tif(index > -1){\r\n\t\t\tcurrentItems.splice(index, 1);\r\n\t\t\tif(item.element){\r\n\t\t\t\titem.element.classList.remove(\"active\");\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tfunction toggleItem(item) {\r\n\t\tif(!item){\r\n\t\t\titem = currentItem;\r\n\t\t}\r\n\r\n\t\tvar index = currentItems.indexOf(item);\r\n\r\n\t\tif(index > -1){\r\n\t\t\tunsetItem(index);\r\n\t\t}else{\r\n\t\t\tif(multiselect !== true && currentItems.length >= multiselect){\r\n\t\t\t\tunsetItem(0);\r\n\t\t\t}\r\n\r\n\t\t\tsetItem(item);\r\n\t\t}\r\n\r\n\t\tfillInput();\r\n\r\n\t}\r\n\r\n\tfunction chooseItem(item){\r\n\t\thideList();\r\n\r\n\t\tif(!item){\r\n\t\t\titem = currentItem;\r\n\t\t}\r\n\r\n\t\tif(item){\r\n\t\t\tinput.value = item.label;\r\n\t\t\tsuccess(item.value);\r\n\t\t}\r\n\r\n\t\tinitialDisplayValue = [item.value];\r\n\t}\r\n\r\n\r\n\tfunction chooseItems(silent){\r\n\t\tif(!silent){\r\n\t\t\thideList();\r\n\t\t}\r\n\r\n\t\tvar output = [];\r\n\r\n\t\tcurrentItems.forEach((item) => {\r\n\t\t\toutput.push(item.value);\r\n\t\t});\r\n\r\n\t\tinitialDisplayValue = output;\r\n\r\n\t\tsuccess(output);\r\n\t}\r\n\r\n\tfunction fillInput(){\r\n\t\tvar output = [];\r\n\r\n\t\tcurrentItems.forEach((item) => {\r\n\t\t\toutput.push(item.label);\r\n\t\t});\r\n\r\n\t\tinput.value = output.join(\", \");\r\n\r\n\t\tif(self.currentCell === false){\r\n\t\t\tchooseItems(true);\r\n\t\t}\r\n\t}\r\n\r\n\r\n\tfunction unsetItems() {\r\n\r\n\t\tvar len = currentItems.length;\r\n\r\n\t\tfor(let i = 0; i < len; i++){\r\n\t\t\tunsetItem(0);\r\n\t\t}\r\n\t}\r\n\r\n\tfunction cancelItem(){\r\n\t\thideList();\r\n\t\tcancel();\r\n\t}\r\n\r\n\tfunction showList(){\r\n\t\tcurrentItems = [];\r\n\r\n\t\tif(!listEl.parentNode){\r\n\t\t\tif(editorParams.values === true){\r\n\t\t\t\tparseItems(getUniqueColumnValues(), initialDisplayValue);\r\n\t\t\t}else if(typeof editorParams.values === \"string\"){\r\n\t\t\t\tparseItems(getUniqueColumnValues(editorParams.values), initialDisplayValue);\r\n\t\t\t}else{\r\n\t\t\t\tparseItems(editorParams.values || [], initialDisplayValue);\r\n\t\t\t}\r\n\r\n\r\n\t\t\tvar offset = Helpers.elOffset(cellEl);\r\n\r\n\t\t\tlistEl.style.minWidth = cellEl.offsetWidth + \"px\";\r\n\r\n\t\t\tlistEl.style.top = (offset.top + cellEl.offsetHeight) + \"px\";\r\n\t\t\tlistEl.style.left = offset.left + \"px\";\r\n\r\n\r\n\t\t\tlistEl.addEventListener(\"mousedown\", function(e){\r\n\t\t\t\tblurable = false;\r\n\r\n\t\t\t\tsetTimeout(function(){\r\n\t\t\t\t\tblurable = true;\r\n\t\t\t\t}, 10);\r\n\t\t\t});\r\n\r\n\t\t\tdocument.body.appendChild(listEl);\r\n\t\t}\r\n\t}\r\n\r\n\tfunction hideList(){\r\n\t\tif(listEl.parentNode){\r\n\t\t\tlistEl.parentNode.removeChild(listEl);\r\n\t\t}\r\n\r\n\t\tremoveScrollListener();\r\n\t}\r\n\r\n\tfunction removeScrollListener() {\r\n\t\tself.table.rowManager.element.removeEventListener(\"scroll\", cancelItem);\r\n\t}\r\n\r\n\tfunction scrollTovalue(char){\r\n\r\n\t\tclearTimeout(searchWordTimeout);\r\n\r\n\t\tvar character = String.fromCharCode(event.keyCode).toLowerCase();\r\n\t\tsearchWord += character.toLowerCase();\r\n\r\n\t\tvar match = dataItems.find((item) => {\r\n\t\t\treturn typeof item.label !== \"undefined\" && item.label.toLowerCase().startsWith(searchWord);\r\n\t\t});\r\n\r\n\t\tif(match){\r\n\t\t\tsetCurrentItem(match, !multiselect);\r\n\t\t}\r\n\r\n\t\tsearchWordTimeout = setTimeout(() => {\r\n\t\t\tsearchWord = \"\";\r\n\t\t}, 800)\r\n\t}\r\n\r\n\t//style input\r\n\tinput.setAttribute(\"type\", \"text\");\r\n\r\n\tinput.style.padding = \"4px\";\r\n\tinput.style.width = \"100%\";\r\n\tinput.style.boxSizing = \"border-box\";\r\n\tinput.style.cursor = \"default\";\r\n\tinput.readOnly = (this.currentCell != false);\r\n\r\n\tif(editorParams.elementAttributes && typeof editorParams.elementAttributes == \"object\"){\r\n\t\tfor (let key in editorParams.elementAttributes){\r\n\t\t\tif(key.charAt(0) == \"+\"){\r\n\t\t\t\tkey = key.slice(1);\r\n\t\t\t\tinput.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\r\n\t\t\t}else{\r\n\t\t\t\tinput.setAttribute(key, editorParams.elementAttributes[key]);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tinput.value = typeof initialValue !== \"undefined\" || initialValue === null ? initialValue : \"\";\r\n\r\n\t// if(editorParams.values === true){\r\n\t// \tparseItems(getUniqueColumnValues(), initialValue);\r\n\t// }else if(typeof editorParams.values === \"string\"){\r\n\t// \tparseItems(getUniqueColumnValues(editorParams.values), initialValue);\r\n\t// }else{\r\n\t// \tparseItems(editorParams.values || [], initialValue);\r\n\t// }\r\n\r\n\tinput.addEventListener(\"search\", function(e){\r\n\t\tif(!input.value){\r\n\t\t\tunsetItems();\r\n\t\t\tchooseItems();\r\n\t\t}\r\n\t});\r\n\r\n\t//allow key based navigation\r\n\tinput.addEventListener(\"keydown\", function(e){\r\n\t\tvar index;\r\n\r\n\t\tswitch(e.keyCode){\r\n\t\t\tcase 38: //up arrow\r\n\t\t\tindex = dataItems.indexOf(currentItem);\r\n\r\n\t\t\tif(vertNav == \"editor\" || (vertNav == \"hybrid\" && index)){\r\n\t\t\t\te.stopImmediatePropagation();\r\n\t\t\t\te.stopPropagation();\r\n\t\t\t\te.preventDefault();\r\n\r\n\t\t\t\tif(index > 0){\r\n\t\t\t\t\tsetCurrentItem(dataItems[index - 1], !multiselect);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 40: //down arrow\r\n\t\t\tindex = dataItems.indexOf(currentItem);\r\n\r\n\t\t\tif(vertNav == \"editor\" || (vertNav == \"hybrid\" && index < dataItems.length - 1)){\r\n\t\t\t\te.stopImmediatePropagation();\r\n\t\t\t\te.stopPropagation();\r\n\t\t\t\te.preventDefault();\r\n\r\n\t\t\t\tif(index < dataItems.length - 1){\r\n\t\t\t\t\tif(index == -1){\r\n\t\t\t\t\t\tsetCurrentItem(dataItems[0], !multiselect);\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tsetCurrentItem(dataItems[index + 1], !multiselect);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 37: //left arrow\r\n\t\t\tcase 39: //right arrow\r\n\t\t\te.stopImmediatePropagation();\r\n\t\t\te.stopPropagation();\r\n\t\t\te.preventDefault();\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 13: //enter\r\n\t\t\t// chooseItem();\r\n\r\n\t\t\tif(multiselect){\r\n\t\t\t\ttoggleItem();\r\n\t\t\t}else{\r\n\t\t\t\tchooseItem();\r\n\t\t\t}\r\n\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 27: //escape\r\n\t\t\tcancelItem();\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 9: //tab\r\n\t\t\tbreak;\r\n\r\n\t\t\tdefault:\r\n\t\t\tif(self.currentCell === false){\r\n\t\t\t\te.preventDefault();\r\n\t\t\t}\r\n\r\n\t\t\tif(e.keyCode >= 38 && e.keyCode <= 90){\r\n\t\t\t\tscrollTovalue(e.keyCode);\r\n\t\t\t}\r\n\t\t}\r\n\t});\r\n\r\n\tinput.addEventListener(\"blur\", function(e){\r\n\t\tif(blurable){\r\n\t\t\tif(multiselect){\r\n\t\t\t\tchooseItems();\r\n\t\t\t}else{\r\n\t\t\t\tcancelItem();\r\n\t\t\t}\r\n\t\t}\r\n\t});\r\n\r\n\tinput.addEventListener(\"focus\", function(e){\r\n\t\tif(!blockListShow){\r\n\t\t\tshowList();\r\n\t\t}\r\n\t});\r\n\r\n\t//style list element\r\n\tlistEl = document.createElement(\"div\");\r\n\tlistEl.classList.add(\"tabulator-edit-select-list\");\r\n\r\n\tonRendered(function(){\r\n\t\tinput.style.height = \"100%\";\r\n\t\tinput.focus({preventScroll: true});\r\n\t});\r\n\r\n\tsetTimeout(() => {\r\n\t\tthis.table.rowManager.element.addEventListener(\"scroll\", cancelItem);\r\n\t}, 10);\r\n\r\n\treturn input;\r\n};","import Helpers from '../../../../core/Helpers.js';\r\n\r\n//autocomplete\r\nexport default function(cell, onRendered, success, cancel, editorParams){\r\n\tvar self = this,\r\n\tcellEl = cell.getElement(),\r\n\tinitialValue = cell.getValue(),\r\n\tvertNav = editorParams.verticalNavigation || \"editor\",\r\n\tinitialDisplayValue = typeof initialValue !== \"undefined\" || initialValue === null ? initialValue : (typeof editorParams.defaultValue !== \"undefined\" ? editorParams.defaultValue : \"\"),\r\n\tinput = document.createElement(\"input\"),\r\n\tlistEl = document.createElement(\"div\"),\r\n\tallItems = [],\r\n\tdisplayItems = [],\r\n\tvalues = [],\r\n\tcurrentItem = false,\r\n\tblurable = true,\r\n\tuniqueColumnValues = false;\r\n\r\n\t//style input\r\n\tinput.setAttribute(\"type\", \"search\");\r\n\r\n\tinput.style.padding = \"4px\";\r\n\tinput.style.width = \"100%\";\r\n\tinput.style.boxSizing = \"border-box\";\r\n\r\n\tif(editorParams.elementAttributes && typeof editorParams.elementAttributes == \"object\"){\r\n\t\tfor (let key in editorParams.elementAttributes){\r\n\t\t\tif(key.charAt(0) == \"+\"){\r\n\t\t\t\tkey = key.slice(1);\r\n\t\t\t\tinput.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\r\n\t\t\t}else{\r\n\t\t\t\tinput.setAttribute(key, editorParams.elementAttributes[key]);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//style list element\r\n\tlistEl.classList.add(\"tabulator-edit-select-list\");\r\n\r\n\tlistEl.addEventListener(\"mousedown\", function(e){\r\n\t\tblurable = false;\r\n\r\n\t\tsetTimeout(function(){\r\n\t\t\tblurable = true;\r\n\t\t}, 10);\r\n\t});\r\n\r\n\r\n\tfunction genUniqueColumnValues(){\r\n\t\tif(editorParams.values === true){\r\n\t\t\tuniqueColumnValues = getUniqueColumnValues();\r\n\t\t}else if(typeof editorParams.values === \"string\"){\r\n\t\t\tuniqueColumnValues = getUniqueColumnValues(editorParams.values);\r\n\t\t}\r\n\t}\r\n\r\n\tfunction getUniqueColumnValues(field){\r\n\t\tvar output = {},\r\n\t\tdata = self.table.getData(),\r\n\t\tcolumn;\r\n\r\n\t\tif(field){\r\n\t\t\tcolumn = self.table.columnManager.getColumnByField(field);\r\n\t\t}else{\r\n\t\t\tcolumn = cell.getColumn()._getSelf();\r\n\t\t}\r\n\r\n\t\tif(column){\r\n\t\t\tdata.forEach(function(row){\r\n\t\t\t\tvar val = column.getFieldValue(row);\r\n\r\n\t\t\t\tif(val !== null && typeof val !== \"undefined\" && val !== \"\"){\r\n\t\t\t\t\toutput[val] = true;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tif(editorParams.sortValuesList){\r\n\t\t\t\tif(editorParams.sortValuesList == \"asc\"){\r\n\t\t\t\t\toutput = Object.keys(output).sort();\r\n\t\t\t\t}else{\r\n\t\t\t\t\toutput = Object.keys(output).sort().reverse();\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\toutput = Object.keys(output);\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"unable to find matching column to create autocomplete lookup list:\", field);\r\n\t\t}\r\n\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tfunction filterList(term, intialLoad){\r\n\t\tvar matches = [],\r\n\t\tvalues, items, searchEl;\r\n\r\n\t\t//lookup base values list\r\n\t\tif(uniqueColumnValues){\r\n\t\t\tvalues = uniqueColumnValues;\r\n\t\t}else{\r\n\t\t\tvalues = editorParams.values || [];\r\n\t\t}\r\n\r\n\t\tif(editorParams.searchFunc){\r\n\t\t\tmatches = editorParams.searchFunc(term, values);\r\n\r\n\t\t\tif(matches instanceof Promise){\r\n\r\n\t\t\t\taddNotice(typeof editorParams.searchingPlaceholder !== \"undefined\" ? editorParams.searchingPlaceholder : \"Searching...\");\r\n\r\n\t\t\t\tmatches.then((result) => {\r\n\t\t\t\t\tfillListIfNotEmpty(parseItems(result), intialLoad);\r\n\t\t\t\t}).catch((err) => {\r\n\t\t\t\t\tconsole.err(\"error in autocomplete search promise:\", err);\r\n\t\t\t\t});\r\n\r\n\t\t\t}else{\r\n\t\t\t\tfillListIfNotEmpty(parseItems(matches), intialLoad);\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\titems = parseItems(values);\r\n\r\n\t\t\tif(term === \"\"){\r\n\t\t\t\tif(editorParams.showListOnEmpty){\r\n\t\t\t\t\tmatches = items;\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\titems.forEach(function(item){\r\n\t\t\t\t\tif(item.value !== null || typeof item.value !== \"undefined\"){\r\n\t\t\t\t\t\tif(String(item.value).toLowerCase().indexOf(String(term).toLowerCase()) > -1 || String(item.title).toLowerCase().indexOf(String(term).toLowerCase()) > -1){\r\n\t\t\t\t\t\t\tmatches.push(item);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\tfillListIfNotEmpty(matches, intialLoad);\r\n\t\t}\r\n\t}\r\n\r\n\tfunction addNotice(notice){\r\n\t\tvar searchEl = document.createElement(\"div\");\r\n\r\n\t\tclearList();\r\n\r\n\t\tif(notice !== false){\r\n\t\t\tsearchEl.classList.add(\"tabulator-edit-select-list-notice\");\r\n\t\t\tsearchEl.tabIndex = 0;\r\n\r\n\t\t\tif(notice instanceof Node){\r\n\t\t\t\tsearchEl.appendChild(notice);\r\n\t\t\t}else{\r\n\t\t\t\tsearchEl.innerHTML = notice;\r\n\t\t\t}\r\n\r\n\t\t\tlistEl.appendChild(searchEl);\r\n\t\t}\r\n\t}\r\n\r\n\tfunction parseItems(inputValues){\r\n\t\tvar itemList = [];\r\n\r\n\t\tif(Array.isArray(inputValues)){\r\n\t\t\tinputValues.forEach(function(value){\r\n\r\n\t\t\t\tvar item = {};\r\n\r\n\t\t\t\tif(typeof value === \"object\"){\r\n\t\t\t\t\titem.title = editorParams.listItemFormatter ? editorParams.listItemFormatter(value.value, value.label) : value.label;\r\n\t\t\t\t\titem.value = value.value;\r\n\t\t\t\t}else{\r\n\t\t\t\t\titem.title = editorParams.listItemFormatter ? editorParams.listItemFormatter(value, value) : value;\r\n\t\t\t\t\titem.value = value;\r\n\t\t\t\t}\r\n\r\n\t\t\t\titemList.push(item);\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tfor(var key in inputValues){\r\n\t\t\t\tvar item = {\r\n\t\t\t\t\ttitle:editorParams.listItemFormatter ? editorParams.listItemFormatter(key, inputValues[key]) : inputValues[key],\r\n\t\t\t\t\tvalue:key,\r\n\t\t\t\t};\r\n\r\n\t\t\t\titemList.push(item);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn itemList;\r\n\t}\r\n\r\n\tfunction clearList(){\r\n\t\twhile(listEl.firstChild) listEl.removeChild(listEl.firstChild);\r\n\t}\r\n\r\n\tfunction fillListIfNotEmpty(items, intialLoad){\r\n\t\tif(items.length){\r\n\t\t\tfillList(items, intialLoad);\r\n\t\t}else{\r\n\t\t\tif(editorParams.emptyPlaceholder){\r\n\t\t\t\taddNotice(editorParams.emptyPlaceholder);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tfunction fillList(items, intialLoad){\r\n\t\tvar current = false;\r\n\r\n\t\tclearList();\r\n\r\n\t\tdisplayItems = items;\r\n\r\n\t\tdisplayItems.forEach(function(item){\r\n\t\t\tvar el = item.element;\r\n\r\n\t\t\tif(!el){\r\n\t\t\t\tel = document.createElement(\"div\");\r\n\t\t\t\tel.classList.add(\"tabulator-edit-select-list-item\");\r\n\t\t\t\tel.tabIndex = 0;\r\n\t\t\t\tel.innerHTML = item.title;\r\n\r\n\t\t\t\tel.addEventListener(\"click\", function(e){\r\n\t\t\t\t\tsetCurrentItem(item);\r\n\t\t\t\t\tchooseItem();\r\n\t\t\t\t});\r\n\r\n\t\t\t\tel.addEventListener(\"mousedown\", function(e){\r\n\t\t\t\t\tblurable = false;\r\n\r\n\t\t\t\t\tsetTimeout(function(){\r\n\t\t\t\t\t\tblurable = true;\r\n\t\t\t\t\t}, 10);\r\n\t\t\t\t});\r\n\r\n\t\t\t\titem.element = el;\r\n\r\n\t\t\t\tif(intialLoad && item.value == initialValue){\r\n\t\t\t\t\tinput.value = item.title;\r\n\t\t\t\t\titem.element.classList.add(\"active\");\r\n\t\t\t\t\tcurrent = true;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(item === currentItem){\r\n\t\t\t\t\titem.element.classList.add(\"active\");\r\n\t\t\t\t\tcurrent = true;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tlistEl.appendChild(el);\r\n\t\t});\r\n\r\n\t\tif(!current){\r\n\t\t\tsetCurrentItem(false);\r\n\t\t}\r\n\t}\r\n\r\n\tfunction chooseItem(){\r\n\t\thideList();\r\n\r\n\t\tif(currentItem){\r\n\t\t\tif(initialValue !== currentItem.value){\r\n\t\t\t\tinitialValue = currentItem.value;\r\n\t\t\t\tinput.value = currentItem.title;\r\n\t\t\t\tsuccess(currentItem.value);\r\n\t\t\t}else{\r\n\t\t\t\tcancel();\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tif(editorParams.freetext){\r\n\t\t\t\tinitialValue = input.value;\r\n\t\t\t\tsuccess(input.value);\r\n\t\t\t}else{\r\n\t\t\t\tif(editorParams.allowEmpty && input.value === \"\"){\r\n\t\t\t\t\tinitialValue = input.value;\r\n\t\t\t\t\tsuccess(input.value);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tcancel();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tfunction showList(){\r\n\t\tif(!listEl.parentNode){\r\n\r\n\t\t\tconsole.log(\"show\", initialDisplayValue)\r\n\t\t\twhile(listEl.firstChild) listEl.removeChild(listEl.firstChild);\r\n\r\n\t\t\tvar offset = Helpers.elOffset(cellEl);\r\n\r\n\t\t\tlistEl.style.minWidth = cellEl.offsetWidth + \"px\";\r\n\r\n\t\t\tlistEl.style.top = (offset.top + cellEl.offsetHeight) + \"px\";\r\n\t\t\tlistEl.style.left = offset.left + \"px\";\r\n\t\t\tdocument.body.appendChild(listEl);\r\n\t\t}\r\n\t}\r\n\r\n\tfunction setCurrentItem(item, showInputValue){\r\n\t\tif(currentItem && currentItem.element){\r\n\t\t\tcurrentItem.element.classList.remove(\"active\");\r\n\t\t}\r\n\r\n\t\tcurrentItem = item;\r\n\r\n\t\tif(item && item.element){\r\n\t\t\titem.element.classList.add(\"active\");\r\n\t\t}\r\n\r\n\t\tif(item && item.element && item.element.scrollIntoView){\r\n\t\t\titem.element.scrollIntoView({behavior: 'smooth', block: 'nearest', inline: 'start'});\r\n\t\t}\r\n\t}\r\n\r\n\tfunction hideList(){\r\n\t\tif(listEl.parentNode){\r\n\t\t\tlistEl.parentNode.removeChild(listEl);\r\n\t\t}\r\n\r\n\t\tremoveScrollListener();\r\n\t}\r\n\r\n\r\n\tfunction cancelItem(){\r\n\t\thideList();\r\n\t\tcancel();\r\n\t}\r\n\r\n\tfunction removeScrollListener() {\r\n\t\tself.table.rowManager.element.removeEventListener(\"scroll\", cancelItem);\r\n\t}\r\n\r\n\t//allow key based navigation\r\n\tinput.addEventListener(\"keydown\", function(e){\r\n\t\tvar index;\r\n\r\n\t\tswitch(e.keyCode){\r\n\t\t\tcase 38: //up arrow\r\n\t\t\tindex = displayItems.indexOf(currentItem);\r\n\r\n\t\t\tif(vertNav == \"editor\" || (vertNav == \"hybrid\" && index)){\r\n\t\t\t\te.stopImmediatePropagation();\r\n\t\t\t\te.stopPropagation();\r\n\t\t\t\te.preventDefault();\r\n\r\n\t\t\t\tif(index > 0){\r\n\t\t\t\t\tsetCurrentItem(displayItems[index - 1]);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tsetCurrentItem(false);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 40: //down arrow\r\n\r\n\t\t\tindex = displayItems.indexOf(currentItem);\r\n\r\n\t\t\tif(vertNav == \"editor\" || (vertNav == \"hybrid\" && index < displayItems.length - 1)){\r\n\r\n\t\t\t\te.stopImmediatePropagation();\r\n\t\t\t\te.stopPropagation();\r\n\t\t\t\te.preventDefault();\r\n\r\n\t\t\t\tif(index < displayItems.length - 1){\r\n\t\t\t\t\tif(index == -1){\r\n\t\t\t\t\t\tsetCurrentItem(displayItems[0]);\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tsetCurrentItem(displayItems[index + 1]);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\r\n\r\n\t\t\tcase 37: //left arrow\r\n\t\t\tcase 39: //right arrow\r\n\t\t\te.stopImmediatePropagation();\r\n\t\t\te.stopPropagation();\r\n\t\t\t// e.preventDefault();\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 13: //enter\r\n\t\t\tchooseItem();\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 27: //escape\r\n\t\t\tcancelItem();\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 36: //home\r\n\t\t\tcase 35: //end\r\n\t\t\t//prevent table navigation while using input element\r\n\t\t\te.stopImmediatePropagation();\r\n\t\t\tbreak;\r\n\t\t}\r\n\t});\r\n\r\n\tinput.addEventListener(\"keyup\", function(e){\r\n\r\n\t\tswitch(e.keyCode){\r\n\t\t\tcase 38: //up arrow\r\n\t\t\tcase 37: //left arrow\r\n\t\t\tcase 39: //up arrow\r\n\t\t\tcase 40: //right arrow\r\n\t\t\tcase 13: //enter\r\n\t\t\tcase 27: //escape\r\n\t\t\tbreak;\r\n\r\n\t\t\tdefault:\r\n\t\t\tfilterList(input.value);\r\n\t\t}\r\n\r\n\t});\r\n\r\n\tinput.addEventListener(\"search\", function(e){\r\n\t\tfilterList(input.value);\r\n\t});\r\n\r\n\tinput.addEventListener(\"blur\", function(e){\r\n\t\tif(blurable){\r\n\t\t\tchooseItem();\r\n\t\t}\r\n\t});\r\n\r\n\tinput.addEventListener(\"focus\", function(e){\r\n\t\tvar value = initialDisplayValue;\r\n\t\tgenUniqueColumnValues();\r\n\t\tshowList();\r\n\t\tinput.value = value;\r\n\t\tfilterList(value, true);\r\n\t});\r\n\r\n\r\n\tonRendered(function(){\r\n\t\tinput.style.height = \"100%\";\r\n\t\tinput.focus({preventScroll: true});\r\n\t});\r\n\r\n\tif(editorParams.mask){\r\n\t\tthis.table.modules.edit.maskInput(input, editorParams);\r\n\t}\r\n\r\n\tsetTimeout(() => {\r\n\t\tthis.table.rowManager.element.addEventListener(\"scroll\", cancelItem);\r\n\t}, 10);\r\n\r\n\tgenUniqueColumnValues();\r\n\tinput.value = initialDisplayValue;\r\n\tfilterList(initialDisplayValue, true);\r\n\r\n\treturn input;\r\n};","//star rating\r\nexport default function(cell, onRendered, success, cancel, editorParams){\r\n\tvar self = this,\r\n\telement = cell.getElement(),\r\n\tvalue = cell.getValue(),\r\n\tmaxStars = element.getElementsByTagName(\"svg\").length || 5,\r\n\tsize = element.getElementsByTagName(\"svg\")[0] ? element.getElementsByTagName(\"svg\")[0].getAttribute(\"width\") : 14,\r\n\tstars = [],\r\n\tstarsHolder = document.createElement(\"div\"),\r\n\tstar = document.createElementNS('http://www.w3.org/2000/svg', \"svg\");\r\n\r\n\r\n\t//change star type\r\n\tfunction starChange(val){\r\n\t\tstars.forEach(function(star, i){\r\n\t\t\tif(i < val){\r\n\t\t\t\tif(self.table.browser == \"ie\"){\r\n\t\t\t\t\tstar.setAttribute(\"class\", \"tabulator-star-active\");\r\n\t\t\t\t}else{\r\n\t\t\t\t\tstar.classList.replace(\"tabulator-star-inactive\", \"tabulator-star-active\");\r\n\t\t\t\t}\r\n\r\n\t\t\t\tstar.innerHTML = '';\r\n\t\t\t}else{\r\n\t\t\t\tif(self.table.browser == \"ie\"){\r\n\t\t\t\t\tstar.setAttribute(\"class\", \"tabulator-star-inactive\");\r\n\t\t\t\t}else{\r\n\t\t\t\t\tstar.classList.replace(\"tabulator-star-active\", \"tabulator-star-inactive\");\r\n\t\t\t\t}\r\n\r\n\t\t\t\tstar.innerHTML = '';\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t//build stars\r\n\tfunction buildStar(i){\r\n\r\n\t\tvar starHolder = document.createElement(\"span\");\r\n\t\tvar nextStar = star.cloneNode(true);\r\n\r\n\t\tstars.push(nextStar);\r\n\r\n\t\tstarHolder.addEventListener(\"mouseenter\", function(e){\r\n\t\t\te.stopPropagation();\r\n\t\t\te.stopImmediatePropagation();\r\n\t\t\tstarChange(i);\r\n\t\t});\r\n\r\n\t\tstarHolder.addEventListener(\"mousemove\", function(e){\r\n\t\t\te.stopPropagation();\r\n\t\t\te.stopImmediatePropagation();\r\n\t\t});\r\n\r\n\t\tstarHolder.addEventListener(\"click\", function(e){\r\n\t\t\te.stopPropagation();\r\n\t\t\te.stopImmediatePropagation();\r\n\t\t\tsuccess(i);\r\n\t\t\telement.blur();\r\n\t\t});\r\n\r\n\t\tstarHolder.appendChild(nextStar);\r\n\t\tstarsHolder.appendChild(starHolder);\r\n\r\n\t}\r\n\r\n\t//handle keyboard navigation value change\r\n\tfunction changeValue(val){\r\n\t\tvalue = val;\r\n\t\tstarChange(val);\r\n\t}\r\n\r\n\t//style cell\r\n\telement.style.whiteSpace = \"nowrap\";\r\n\telement.style.overflow = \"hidden\";\r\n\telement.style.textOverflow = \"ellipsis\";\r\n\r\n\t//style holding element\r\n\tstarsHolder.style.verticalAlign = \"middle\";\r\n\tstarsHolder.style.display = \"inline-block\";\r\n\tstarsHolder.style.padding = \"4px\";\r\n\r\n\t//style star\r\n\tstar.setAttribute(\"width\", size);\r\n\tstar.setAttribute(\"height\", size);\r\n\tstar.setAttribute(\"viewBox\", \"0 0 512 512\");\r\n\tstar.setAttribute(\"xml:space\", \"preserve\");\r\n\tstar.style.padding = \"0 1px\";\r\n\r\n\tif(editorParams.elementAttributes && typeof editorParams.elementAttributes == \"object\"){\r\n\t\tfor (let key in editorParams.elementAttributes){\r\n\t\t\tif(key.charAt(0) == \"+\"){\r\n\t\t\t\tkey = key.slice(1);\r\n\t\t\t\tstarsHolder.setAttribute(key, starsHolder.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\r\n\t\t\t}else{\r\n\t\t\t\tstarsHolder.setAttribute(key, editorParams.elementAttributes[key]);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//create correct number of stars\r\n\tfor(var i=1;i<= maxStars;i++){\r\n\t\tbuildStar(i);\r\n\t}\r\n\r\n\t//ensure value does not exceed number of stars\r\n\tvalue = Math.min(parseInt(value), maxStars);\r\n\r\n\t// set initial styling of stars\r\n\tstarChange(value);\r\n\r\n\tstarsHolder.addEventListener(\"mousemove\", function(e){\r\n\t\tstarChange(0);\r\n\t});\r\n\r\n\tstarsHolder.addEventListener(\"click\", function(e){\r\n\t\tsuccess(0);\r\n\t});\r\n\r\n\telement.addEventListener(\"blur\", function(e){\r\n\t\tcancel();\r\n\t});\r\n\r\n\t//allow key based navigation\r\n\telement.addEventListener(\"keydown\", function(e){\r\n\t\tswitch(e.keyCode){\r\n\t\t\tcase 39: //right arrow\r\n\t\t\tchangeValue(value + 1);\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 37: //left arrow\r\n\t\t\tchangeValue(value - 1);\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 13: //enter\r\n\t\t\tsuccess(value);\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 27: //escape\r\n\t\t\tcancel();\r\n\t\t\tbreak;\r\n\t\t}\r\n\t});\r\n\r\n\treturn starsHolder;\r\n};","//draggable progress bar\r\nexport default function(cell, onRendered, success, cancel, editorParams){\r\n\tvar element = cell.getElement(),\r\n\tmax = typeof editorParams.max === \"undefined\" ? ( element.getElementsByTagName(\"div\")[0].getAttribute(\"max\") || 100) : editorParams.max,\r\n\tmin = typeof editorParams.min === \"undefined\" ? ( element.getElementsByTagName(\"div\")[0].getAttribute(\"min\") || 0) : editorParams.min,\r\n\tpercent = (max - min) / 100,\r\n\tvalue = cell.getValue() || 0,\r\n\thandle = document.createElement(\"div\"),\r\n\tbar = document.createElement(\"div\"),\r\n\tmouseDrag, mouseDragWidth;\r\n\r\n\t//set new value\r\n\tfunction updateValue(){\r\n\t\tvar style = window.getComputedStyle(element, null);\r\n\r\n\t\tvar calcVal = (percent * Math.round(bar.offsetWidth / ((element.clientWidth - parseInt(style.getPropertyValue(\"padding-left\")) - parseInt(style.getPropertyValue(\"padding-right\")))/100))) + min;\r\n\t\tsuccess(calcVal);\r\n\t\telement.setAttribute(\"aria-valuenow\", calcVal);\r\n\t\telement.setAttribute(\"aria-label\", value);\r\n\t}\r\n\r\n\t//style handle\r\n\thandle.style.position = \"absolute\";\r\n\thandle.style.right = \"0\";\r\n\thandle.style.top = \"0\";\r\n\thandle.style.bottom = \"0\";\r\n\thandle.style.width = \"5px\";\r\n\thandle.classList.add(\"tabulator-progress-handle\");\r\n\r\n\t//style bar\r\n\tbar.style.display = \"inline-block\";\r\n\tbar.style.position = \"relative\";\r\n\t// bar.style.top = \"8px\";\r\n\t// bar.style.bottom = \"8px\";\r\n\t// bar.style.left = \"4px\";\r\n\t// bar.style.marginRight = \"4px\";\r\n\tbar.style.height = \"100%\";\r\n\tbar.style.backgroundColor = \"#488CE9\";\r\n\tbar.style.maxWidth = \"100%\";\r\n\tbar.style.minWidth = \"0%\";\r\n\r\n\tif(editorParams.elementAttributes && typeof editorParams.elementAttributes == \"object\"){\r\n\t\tfor (let key in editorParams.elementAttributes){\r\n\t\t\tif(key.charAt(0) == \"+\"){\r\n\t\t\t\tkey = key.slice(1);\r\n\t\t\t\tbar.setAttribute(key, bar.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\r\n\t\t\t}else{\r\n\t\t\t\tbar.setAttribute(key, editorParams.elementAttributes[key]);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//style cell\r\n\telement.style.padding = \"4px 4px\";\r\n\r\n\t//make sure value is in range\r\n\tvalue = Math.min(parseFloat(value), max);\r\n\tvalue = Math.max(parseFloat(value), min);\r\n\r\n\t//workout percentage\r\n\tvalue = Math.round((value - min) / percent);\r\n\t// bar.style.right = value + \"%\";\r\n\tbar.style.width = value + \"%\";\r\n\r\n\telement.setAttribute(\"aria-valuemin\", min);\r\n\telement.setAttribute(\"aria-valuemax\", max);\r\n\r\n\tbar.appendChild(handle);\r\n\r\n\thandle.addEventListener(\"mousedown\", function(e){\r\n\t\tmouseDrag = e.screenX;\r\n\t\tmouseDragWidth = bar.offsetWidth;\r\n\t});\r\n\r\n\thandle.addEventListener(\"mouseover\", function(){\r\n\t\thandle.style.cursor = \"ew-resize\";\r\n\t});\r\n\r\n\telement.addEventListener(\"mousemove\", function(e){\r\n\t\tif(mouseDrag){\r\n\t\t\tbar.style.width = (mouseDragWidth + e.screenX - mouseDrag) + \"px\";\r\n\t\t}\r\n\t});\r\n\r\n\telement.addEventListener(\"mouseup\", function(e){\r\n\t\tif(mouseDrag){\r\n\t\t\te.stopPropagation();\r\n\t\t\te.stopImmediatePropagation();\r\n\r\n\t\t\tmouseDrag = false;\r\n\t\t\tmouseDragWidth = false;\r\n\r\n\t\t\tupdateValue();\r\n\t\t}\r\n\t});\r\n\r\n\t//allow key based navigation\r\n\telement.addEventListener(\"keydown\", function(e){\r\n\t\tswitch(e.keyCode){\r\n\t\t\tcase 39: //right arrow\r\n\t\t\te.preventDefault();\r\n\t\t\tbar.style.width = (bar.clientWidth + element.clientWidth/100) + \"px\";\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 37: //left arrow\r\n\t\t\te.preventDefault();\r\n\t\t\tbar.style.width = (bar.clientWidth - element.clientWidth/100) + \"px\";\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 9: //tab\r\n\t\t\tcase 13: //enter\r\n\t\t\tupdateValue();\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 27: //escape\r\n\t\t\tcancel();\r\n\t\t\tbreak;\r\n\r\n\t\t}\r\n\t});\r\n\r\n\telement.addEventListener(\"blur\", function(){\r\n\t\tcancel();\r\n\t});\r\n\r\n\treturn bar;\r\n};","//checkbox\r\nexport default function(cell, onRendered, success, cancel, editorParams){\r\n\tvar value = cell.getValue(),\r\n\tinput = document.createElement(\"input\"),\r\n\ttristate = editorParams.tristate,\r\n\tindetermValue = typeof editorParams.indeterminateValue === \"undefined\" ? null : editorParams.indeterminateValue,\r\n\tindetermState = false;\r\n\r\n\tinput.setAttribute(\"type\", \"checkbox\");\r\n\tinput.style.marginTop = \"5px\";\r\n\tinput.style.boxSizing = \"border-box\";\r\n\r\n\tif(editorParams.elementAttributes && typeof editorParams.elementAttributes == \"object\"){\r\n\t\tfor (let key in editorParams.elementAttributes){\r\n\t\t\tif(key.charAt(0) == \"+\"){\r\n\t\t\t\tkey = key.slice(1);\r\n\t\t\t\tinput.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\r\n\t\t\t}else{\r\n\t\t\t\tinput.setAttribute(key, editorParams.elementAttributes[key]);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tinput.value = value;\r\n\r\n\tif(tristate && (typeof value === \"undefined\" || value === indetermValue || value === \"\")){\r\n\t\tindetermState = true;\r\n\t\tinput.indeterminate = true;\r\n\t}\r\n\r\n\tif(this.table.browser != \"firefox\"){ //prevent blur issue on mac firefox\r\n\t\tonRendered(function(){\r\n\t\t\tinput.focus({preventScroll: true});\r\n\t\t});\r\n\t}\r\n\r\n\tinput.checked = value === true || value === \"true\" || value === \"True\" || value === 1;\r\n\r\n\tonRendered(function(){\r\n\t\tinput.focus();\r\n\t});\r\n\r\n\tfunction setValue(blur){\r\n\t\tif(tristate){\r\n\t\t\tif(!blur){\r\n\t\t\t\tif(input.checked && !indetermState){\r\n\t\t\t\t\tinput.checked = false;\r\n\t\t\t\t\tinput.indeterminate = true;\r\n\t\t\t\t\tindetermState = true;\r\n\t\t\t\t\treturn indetermValue;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tindetermState = false;\r\n\t\t\t\t\treturn input.checked;\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tif(indetermState){\r\n\t\t\t\t\treturn indetermValue;\r\n\t\t\t\t}else{\r\n\t\t\t\t\treturn input.checked;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\treturn input.checked;\r\n\t\t}\r\n\t}\r\n\r\n\t//submit new value on blur\r\n\tinput.addEventListener(\"change\", function(e){\r\n\t\tsuccess(setValue());\r\n\t});\r\n\r\n\tinput.addEventListener(\"blur\", function(e){\r\n\t\tsuccess(setValue(true));\r\n\t});\r\n\r\n\t//submit new value on enter\r\n\tinput.addEventListener(\"keydown\", function(e){\r\n\t\tif(e.keyCode == 13){\r\n\t\t\tsuccess(setValue());\r\n\t\t}\r\n\t\tif(e.keyCode == 27){\r\n\t\t\tcancel();\r\n\t\t}\r\n\t});\r\n\r\n\treturn input;\r\n};","import input from './editors/input.js';\r\nimport textarea from './editors/textarea.js';\r\nimport number from './editors/number.js';\r\nimport range from './editors/range.js';\r\nimport select from './editors/select.js';\r\nimport autocomplete from './editors/autocomplete.js';\r\nimport star from './editors/star.js';\r\nimport progress from './editors/progress.js';\r\nimport tickCross from './editors/tickCross.js';\r\n\r\nexport default {\r\n\tinput:input,\r\n\ttextarea:textarea,\r\n number:number,\r\n range:range,\r\n\tselect:select,\r\n\tautocomplete:autocomplete,\r\n\tstar:star,\r\n\tprogress:progress,\r\n\ttickCross:tickCross,\r\n};","import Module from '../../core/Module.js';\r\n\r\nimport defaultEditors from './defaults/editors.js';\r\n\r\nclass Edit extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.currentCell = false; //hold currently editing cell\r\n\t\tthis.mouseClick = false; //hold mousedown state to prevent click binding being overriden by editor opening\r\n\t\tthis.recursionBlock = false; //prevent focus recursion\r\n\t\tthis.invalidEdit = false;\r\n\t\tthis.editedCells = [];\r\n\t}\r\n\r\n\t//initialize column editor\r\n\tinitializeColumn(column){\r\n\t\tvar self = this,\r\n\t\tconfig = {\r\n\t\t\teditor:false,\r\n\t\t\tblocked:false,\r\n\t\t\tcheck:column.definition.editable,\r\n\t\t\tparams:column.definition.editorParams || {}\r\n\t\t};\r\n\r\n\t\t//set column editor\r\n\t\tswitch(typeof column.definition.editor){\r\n\t\t\tcase \"string\":\r\n\t\t\t\tif(Edit.editors[column.definition.editor]){\r\n\t\t\t\t\tconfig.editor = Edit.editors[column.definition.editor];\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.warn(\"Editor Error - No such editor found: \", column.definition.editor);\r\n\t\t\t\t}\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"function\":\r\n\t\t\t\tconfig.editor = column.definition.editor;\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"boolean\":\r\n\t\t\t\tif(column.definition.editor === true){\r\n\t\t\t\t\tif(typeof column.definition.formatter !== \"function\"){\r\n\t\t\t\t\t\tif(Edit.editors[column.definition.formatter]){\r\n\t\t\t\t\t\t\tconfig.editor = Edit.editors[column.definition.formatter];\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\tconfig.editor = Edit.editors[\"input\"];\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tconsole.warn(\"Editor Error - Cannot auto lookup editor for a custom formatter: \", column.definition.formatter);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\tif(config.editor){\r\n\t\t\tcolumn.modules.edit = config;\r\n\t\t}\r\n\t}\r\n\r\n\tgetCurrentCell(){\r\n\t\treturn this.currentCell ? this.currentCell.getComponent() : false;\r\n\t}\r\n\r\n\tclearEditor(cancel){\r\n\t\tvar cell = this.currentCell,\r\n\t\tcellEl;\r\n\r\n\t\tthis.invalidEdit = false;\r\n\r\n\t\tif(cell){\r\n\t\t\tthis.currentCell = false;\r\n\r\n\t\t\tcellEl = cell.getElement();\r\n\r\n\t\t\tif(cancel){\r\n\t\t\t\tcell.validate();\r\n\t\t\t}else{\r\n\t\t\t\tcellEl.classList.remove(\"tabulator-validation-fail\");\r\n\t\t\t}\r\n\r\n\t\t\tcellEl.classList.remove(\"tabulator-editing\");\r\n\t\t\twhile(cellEl.firstChild) cellEl.removeChild(cellEl.firstChild);\r\n\r\n\t\t\tcell.row.getElement().classList.remove(\"tabulator-row-editing\");\r\n\t\t}\r\n\t}\r\n\r\n\tcancelEdit(){\r\n\t\tif(this.currentCell){\r\n\t\t\tvar cell = this.currentCell;\r\n\t\t\tvar component = this.currentCell.getComponent();\r\n\r\n\t\t\tthis.clearEditor(true);\r\n\t\t\tcell.setValueActual(cell.getValue());\r\n\t\t\tcell.cellRendered();\r\n\r\n\t\t\tif(cell.column.definition.editor == \"textarea\" || cell.column.definition.variableHeight){\r\n\t\t\t\tcell.row.normalizeHeight(true);\r\n\t\t\t}\r\n\r\n\t\t\tif(cell.column.cellEvents.cellEditCancelled){\r\n\t\t\t\tcell.column.cellEvents.cellEditCancelled.call(this.table, component);\r\n\t\t\t}\r\n\r\n\t\t\tthis.table.options.cellEditCancelled.call(this.table, component);\r\n\t\t}\r\n\t}\r\n\r\n\t//return a formatted value for a cell\r\n\tbindEditor(cell){\r\n\t\tvar self = this,\r\n\t\telement = cell.getElement(true);\r\n\r\n\t\telement.setAttribute(\"tabindex\", 0);\r\n\r\n\t\telement.addEventListener(\"click\", function(e){\r\n\t\t\tif(!element.classList.contains(\"tabulator-editing\")){\r\n\t\t\t\telement.focus({preventScroll: true});\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\telement.addEventListener(\"mousedown\", function(e){\r\n\t\t\tif (e.button === 2) {\r\n\t\t\t\te.preventDefault();\r\n\t\t\t}else{\r\n\t\t\t\tself.mouseClick = true;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\telement.addEventListener(\"focus\", function(e){\r\n\t\t\tif(!self.recursionBlock){\r\n\t\t\t\tself.edit(cell, e, false);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tfocusCellNoEvent(cell, block){\r\n\t\tthis.recursionBlock = true;\r\n\r\n\t\tif(!(block && this.table.browser === \"ie\")){\r\n\t\t\tcell.getElement().focus({preventScroll: true});\r\n\t\t}\r\n\r\n\t\tthis.recursionBlock = false;\r\n\t}\r\n\r\n\teditCell(cell, forceEdit){\r\n\t\tthis.focusCellNoEvent(cell);\r\n\t\tthis.edit(cell, false, forceEdit);\r\n\t}\r\n\r\n\tfocusScrollAdjust(cell){\r\n\t\tif(this.table.rowManager.getRenderMode() == \"virtual\"){\r\n\t\t\tvar topEdge = this.table.rowManager.element.scrollTop,\r\n\t\t\tbottomEdge = this.table.rowManager.element.clientHeight + this.table.rowManager.element.scrollTop,\r\n\t\t\trowEl = cell.row.getElement(),\r\n\t\t\toffset = rowEl.offsetTop;\r\n\r\n\t\t\tif(rowEl.offsetTop < topEdge){\r\n\t\t\t\tthis.table.rowManager.element.scrollTop -= (topEdge - rowEl.offsetTop);\r\n\t\t\t}else{\r\n\t\t\t\tif(rowEl.offsetTop + rowEl.offsetHeight > bottomEdge){\r\n\t\t\t\t\tthis.table.rowManager.element.scrollTop += (rowEl.offsetTop + rowEl.offsetHeight - bottomEdge);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tvar leftEdge = this.table.rowManager.element.scrollLeft,\r\n\t\t\trightEdge = this.table.rowManager.element.clientWidth + this.table.rowManager.element.scrollLeft,\r\n\t\t\tcellEl = cell.getElement(),\r\n\t\t\toffset = cellEl.offsetLeft;\r\n\r\n\t\t\tif(this.table.modExists(\"frozenColumns\")){\r\n\t\t\t\tleftEdge += parseInt(this.table.modules.frozenColumns.leftMargin);\r\n\t\t\t\trightEdge -= parseInt(this.table.modules.frozenColumns.rightMargin);\r\n\t\t\t}\r\n\r\n\t\t\tif(this.table.options.virtualDomHoz){\r\n\t\t\t\tleftEdge -= parseInt(this.table.vdomHoz.vDomPadLeft);\r\n\t\t\t\trightEdge -= parseInt(this.table.vdomHoz.vDomPadLeft);\r\n\t\t\t}\r\n\r\n\t\t\tif(cellEl.offsetLeft < leftEdge){\r\n\r\n\t\t\t\tthis.table.rowManager.element.scrollLeft -= (leftEdge - cellEl.offsetLeft);\r\n\t\t\t}else{\r\n\t\t\t\tif(cellEl.offsetLeft + cellEl.offsetWidth > rightEdge){\r\n\t\t\t\t\tthis.table.rowManager.element.scrollLeft += (cellEl.offsetLeft + cellEl.offsetWidth - rightEdge);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tedit(cell, e, forceEdit){\r\n\t\tvar self = this,\r\n\t\tallowEdit = true,\r\n\t\trendered = function(){},\r\n\t\telement = cell.getElement(),\r\n\t\tcellEditor, component, params;\r\n\r\n\t\t//prevent editing if another cell is refusing to leave focus (eg. validation fail)\r\n\t\tif(this.currentCell){\r\n\t\t\tif(!this.invalidEdit){\r\n\t\t\t\tthis.cancelEdit();\r\n\t\t\t}\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t//handle successfull value change\r\n\t\tfunction success(value){\r\n\t\t\tif(self.currentCell === cell){\r\n\t\t\t\tvar valid = true;\r\n\r\n\t\t\t\tif(cell.column.modules.validate && self.table.modExists(\"validate\") && self.table.options.validationMode != \"manual\"){\r\n\t\t\t\t\tvalid = self.table.modules.validate.validate(cell.column.modules.validate, cell, value);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(valid === true || self.table.options.validationMode === \"highlight\"){\r\n\t\t\t\t\tself.clearEditor();\r\n\r\n\r\n\t\t\t\t\tif(!cell.modules.edit){\r\n\t\t\t\t\t\tcell.modules.edit = {};\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tcell.modules.edit.edited = true;\r\n\r\n\t\t\t\t\tif(self.editedCells.indexOf(cell) == -1){\r\n\t\t\t\t\t\tself.editedCells.push(cell);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tcell.setValue(value, true);\r\n\r\n\t\t\t\t\tif(self.table.options.dataTree && self.table.modExists(\"dataTree\")){\r\n\t\t\t\t\t\tself.table.modules.dataTree.checkForRestyle(cell);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif(valid !== true){\r\n\t\t\t\t\t\telement.classList.add(\"tabulator-validation-fail\");\r\n\t\t\t\t\t\tself.table.options.validationFailed.call(self.table, cell.getComponent(), value, valid);\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tself.invalidEdit = true;\r\n\t\t\t\t\telement.classList.add(\"tabulator-validation-fail\");\r\n\t\t\t\t\tself.focusCellNoEvent(cell, true);\r\n\t\t\t\t\trendered();\r\n\t\t\t\t\tself.table.options.validationFailed.call(self.table, cell.getComponent(), value, valid);\r\n\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\t// console.warn(\"Edit Success Error - cannot call success on a cell that is no longer being edited\");\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//handle aborted edit\r\n\t\tfunction cancel(){\r\n\t\t\tif(self.currentCell === cell){\r\n\t\t\t\tself.cancelEdit();\r\n\r\n\t\t\t\tif(self.table.options.dataTree && self.table.modExists(\"dataTree\")){\r\n\t\t\t\t\tself.table.modules.dataTree.checkForRestyle(cell);\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\t// console.warn(\"Edit Success Error - cannot call cancel on a cell that is no longer being edited\");\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction onRendered(callback){\r\n\t\t\trendered = callback;\r\n\t\t}\r\n\r\n\t\tif(!cell.column.modules.edit.blocked){\r\n\t\t\tif(e){\r\n\t\t\t\te.stopPropagation();\r\n\t\t\t}\r\n\r\n\t\t\tswitch(typeof cell.column.modules.edit.check){\r\n\t\t\t\tcase \"function\":\r\n\t\t\t\tallowEdit = cell.column.modules.edit.check(cell.getComponent());\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"boolean\":\r\n\t\t\t\tallowEdit = cell.column.modules.edit.check;\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\r\n\t\t\tif(allowEdit || forceEdit){\r\n\r\n\t\t\t\tself.cancelEdit();\r\n\r\n\t\t\t\tself.currentCell = cell;\r\n\r\n\t\t\t\tthis.focusScrollAdjust(cell);\r\n\r\n\t\t\t\tcomponent = cell.getComponent();\r\n\r\n\t\t\t\tif(this.mouseClick){\r\n\t\t\t\t\tthis.mouseClick = false;\r\n\r\n\t\t\t\t\tif(cell.column.cellEvents.cellClick){\r\n\t\t\t\t\t\tcell.column.cellEvents.cellClick.call(this.table, e, component);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(cell.column.cellEvents.cellEditing){\r\n\t\t\t\t\tcell.column.cellEvents.cellEditing.call(this.table, component);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tself.table.options.cellEditing.call(this.table, component);\r\n\r\n\t\t\t\tparams = typeof cell.column.modules.edit.params === \"function\" ? cell.column.modules.edit.params(component) : cell.column.modules.edit.params;\r\n\r\n\t\t\t\tcellEditor = cell.column.modules.edit.editor.call(self, component, onRendered, success, cancel, params);\r\n\r\n\t\t\t\t//if editor returned, add to DOM, if false, abort edit\r\n\t\t\t\tif(cellEditor !== false){\r\n\r\n\t\t\t\t\tif(cellEditor instanceof Node){\r\n\t\t\t\t\t\telement.classList.add(\"tabulator-editing\");\r\n\t\t\t\t\t\tcell.row.getElement().classList.add(\"tabulator-row-editing\");\r\n\t\t\t\t\t\twhile(element.firstChild) element.removeChild(element.firstChild);\r\n\t\t\t\t\t\telement.appendChild(cellEditor);\r\n\r\n\t\t\t\t\t\t//trigger onRendered Callback\r\n\t\t\t\t\t\trendered();\r\n\r\n\t\t\t\t\t\t//prevent editing from triggering rowClick event\r\n\t\t\t\t\t\tvar children = element.children;\r\n\r\n\t\t\t\t\t\tfor (var i = 0; i < children.length; i++) {\r\n\t\t\t\t\t\t\tchildren[i].addEventListener(\"click\", function(e){\r\n\t\t\t\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tconsole.warn(\"Edit Error - Editor should return an instance of Node, the editor returned:\", cellEditor);\r\n\t\t\t\t\t\telement.blur();\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}else{\r\n\t\t\t\t\telement.blur();\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn true;\r\n\t\t\t}else{\r\n\t\t\t\tthis.mouseClick = false;\r\n\t\t\t\telement.blur();\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tthis.mouseClick = false;\r\n\t\t\telement.blur();\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\tmaskInput(el, options){\r\n\t\tvar mask = options.mask,\r\n\t\tmaskLetter = typeof options.maskLetterChar !== \"undefined\" ? options.maskLetterChar : \"A\",\r\n\t\tmaskNumber = typeof options.maskNumberChar !== \"undefined\" ? options.maskNumberChar : \"9\",\r\n\t\tmaskWildcard = typeof options.maskWildcardChar !== \"undefined\" ? options.maskWildcardChar : \"*\",\r\n\t\tsuccess = false;\r\n\r\n\t\tfunction fillSymbols(index){\r\n\t\t\tvar symbol = mask[index];\r\n\t\t\tif(typeof symbol !== \"undefined\" && symbol !== maskWildcard && symbol !== maskLetter && symbol !== maskNumber){\r\n\t\t\t\tel.value = el.value + \"\" + symbol;\r\n\t\t\t\tfillSymbols(index+1);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tel.addEventListener(\"keydown\", (e) => {\r\n\t\t\tvar index = el.value.length,\r\n\t\t\tchar = e.key;\r\n\r\n\t\t\tif(e.keyCode > 46){\r\n\t\t\t\tif(index >= mask.length){\r\n\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\tsuccess = false;\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tswitch(mask[index]){\r\n\t\t\t\t\t\tcase maskLetter:\r\n\t\t\t\t\t\tif(char.toUpperCase() == char.toLowerCase()){\r\n\t\t\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\t\t\tsuccess = false;\r\n\t\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\tcase maskNumber:\r\n\t\t\t\t\t\tif(isNaN(char)){\r\n\t\t\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\t\t\tsuccess = false;\r\n\t\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\tcase maskWildcard:\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\tdefault:\r\n\t\t\t\t\t\tif(char !== mask[index]){\r\n\t\t\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\t\t\tsuccess = false;\r\n\t\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tsuccess = true;\r\n\t\t\t}\r\n\r\n\t\t\treturn;\r\n\t\t});\r\n\r\n\t\tel.addEventListener(\"keyup\", (e) => {\r\n\t\t\tif(e.keyCode > 46){\r\n\t\t\t\tif(options.maskAutoFill){\r\n\t\t\t\t\tfillSymbols(el.value.length);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\r\n\t\tif(!el.placeholder){\r\n\t\t\tel.placeholder = mask;\r\n\t\t}\r\n\r\n\t\tif(options.maskAutoFill){\r\n\t\t\tfillSymbols(el.value.length);\r\n\t\t}\r\n\t}\r\n\r\n\tgetEditedCells(){\r\n\t\tvar output = [];\r\n\r\n\t\tthis.editedCells.forEach((cell) => {\r\n\t\t\toutput.push(cell.getComponent());\r\n\t\t});\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tclearEdited(cell){\r\n\t\tvar editIndex;\r\n\r\n\t\tif(cell.modules.edit && cell.modules.edit.edited){\r\n\t\t\tcell.modules.edit.edited = false;\r\n\r\n\t\t\tif(cell.modules.validate){\r\n\t\t\t\tcell.modules.validate.invalid = false;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\teditIndex = this.editedCells.indexOf(cell);\r\n\r\n\t\tif(editIndex > -1){\r\n\t\t\tthis.editedCells.splice(editIndex, 1);\r\n\t\t}\r\n\t}\r\n}\r\n\r\nEdit.moduleName = \"edit\";\r\n\r\n//load defaults\r\nEdit.editors = defaultEditors;\r\n\r\n\r\nexport default Edit;","class ExportRow{\r\n\tconstructor(type, columns, component, indent){\r\n\t\tthis.type = type;\r\n\t\tthis.columns = columns;\r\n\t\tthis.component = component || false;\r\n\t\tthis.indent = indent || 0;\r\n\t}\r\n}\r\n\r\nexport default ExportRow;","class ExportColumn{\r\n\tconstructor(value, component, width, height, depth){\r\n\t\tthis.value = value;\r\n\t\tthis.component = component || false;\r\n\t\tthis.width = width;\r\n\t\tthis.height = height;\r\n\t\tthis.depth = depth;\r\n\t}\r\n}\r\n\r\nexport default ExportColumn;","import Module from '../../core/Module.js';\r\n\r\nimport ExportRow from './ExportRow.js';\r\nimport ExportColumn from './ExportColumn.js';\r\n\r\nclass Export extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.config = {};\r\n\t\tthis.cloneTableStyle = true;\r\n\t\tthis.colVisProp = \"\";\r\n\t}\r\n\r\n\tgenerateExportList(config, style, range, colVisProp){\r\n\t\tthis.cloneTableStyle = style;\r\n\t\tthis.config = config || {};\r\n\t\tthis.colVisProp = colVisProp;\r\n\r\n\t\tvar headers = this.config.columnHeaders !== false ? this.headersToExportRows(this.generateColumnGroupHeaders()) : [];\r\n\t\tvar body = this.bodyToExportRows(this.rowLookup(range));\r\n\r\n\t\treturn headers.concat(body);\r\n\t}\r\n\r\n\tgenereateTable(config, style, range, colVisProp){\r\n\t\tvar list = this.generateExportList(config, style, range, colVisProp);\r\n\r\n\t\treturn this.genereateTableElement(list);\r\n\t}\r\n\r\n\trowLookup(range){\r\n\t\tvar rows = [];\r\n\r\n\t\tif(typeof range == \"function\"){\r\n\t\t\trange.call(this.table).forEach((row) =>{\r\n\t\t\t\trow = this.table.rowManager.findRow(row);\r\n\r\n\t\t\t\tif(row){\r\n\t\t\t\t\trows.push(row);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tswitch(range){\r\n\t\t\t\tcase true:\r\n\t\t\t\tcase \"visible\":\r\n\t\t\t\trows = this.table.rowManager.getVisibleRows(true);\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"all\":\r\n\t\t\t\trows = this.table.rowManager.rows;\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"selected\":\r\n\t\t\t\trows = this.table.modules.selectRow.selectedRows;\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"active\":\r\n\t\t\t\tdefault:\r\n\t\t\t\tif(this.table.options.pagination){\r\n\t\t\t\t\trows = this.table.rowManager.getDisplayRows(this.table.rowManager.displayRows.length - 2);\r\n\t\t\t\t}else{\r\n\t\t\t\t\trows = this.table.rowManager.getDisplayRows();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn Object.assign([], rows);\r\n\t}\r\n\r\n\tgenerateColumnGroupHeaders(){\r\n\t\tvar output = [];\r\n\r\n\t\tvar columns = this.config.columnGroups !== false ? this.table.columnManager.columns : this.table.columnManager.columnsByIndex;\r\n\r\n\t\tcolumns.forEach((column) => {\r\n\t\t\tvar colData = this.processColumnGroup(column);\r\n\r\n\t\t\tif(colData){\r\n\t\t\t\toutput.push(colData);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tprocessColumnGroup(column){\r\n\t\tvar subGroups = column.columns,\r\n\t\tmaxDepth = 0,\r\n\t\ttitle = column.definition[\"title\" + (this.colVisProp.charAt(0).toUpperCase() + this.colVisProp.slice(1))] || column.definition.title;\r\n\r\n\t\tvar groupData = {\r\n\t\t\ttitle:title,\r\n\t\t\tcolumn:column,\r\n\t\t\tdepth:1,\r\n\t\t};\r\n\r\n\t\tif(subGroups.length){\r\n\t\t\tgroupData.subGroups = [];\r\n\t\t\tgroupData.width = 0;\r\n\r\n\t\t\tsubGroups.forEach((subGroup) => {\r\n\t\t\t\tvar subGroupData = this.processColumnGroup(subGroup);\r\n\r\n\t\t\t\tif(subGroupData){\r\n\t\t\t\t\tgroupData.width += subGroupData.width;\r\n\t\t\t\t\tgroupData.subGroups.push(subGroupData);\r\n\r\n\t\t\t\t\tif(subGroupData.depth > maxDepth){\r\n\t\t\t\t\t\tmaxDepth = subGroupData.depth;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tgroupData.depth += maxDepth;\r\n\r\n\t\t\tif(!groupData.width){\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tif(this.columnVisCheck(column)){\r\n\t\t\t\tgroupData.width = 1;\r\n\t\t\t}else{\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn groupData;\r\n\t}\r\n\r\n\tcolumnVisCheck(column){\r\n\t\treturn column.definition[this.colVisProp] !== false && (column.visible || (!column.visible && column.definition[this.colVisProp]));\r\n\t}\r\n\r\n\theadersToExportRows(columns){\r\n\t\tvar headers = [],\r\n\t\theaderDepth = 0,\r\n\t\texportRows = [];\r\n\r\n\t\tfunction parseColumnGroup(column, level){\r\n\r\n\t\t\tvar depth = headerDepth - level;\r\n\r\n\t\t\tif(typeof headers[level] === \"undefined\"){\r\n\t\t\t\theaders[level] = [];\r\n\t\t\t}\r\n\r\n\t\t\tcolumn.height = column.subGroups ? 1 : (depth - column.depth) + 1;\r\n\r\n\t\t\theaders[level].push(column);\r\n\r\n\t\t\tif(column.height > 1){\r\n\t\t\t\tfor(let i = 1; i < column.height; i ++){\r\n\r\n\t\t\t\t\tif(typeof headers[level + i] === \"undefined\"){\r\n\t\t\t\t\t\theaders[level + i] = [];\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\theaders[level + i].push(false);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif(column.width > 1){\r\n\t\t\t\tfor(let i = 1; i < column.width; i ++){\r\n\t\t\t\t\theaders[level].push(false);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif(column.subGroups){\r\n\t\t\t\tcolumn.subGroups.forEach(function(subGroup){\r\n\t\t\t\t\tparseColumnGroup(subGroup, level+1);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//calculate maximum header debth\r\n\t\tcolumns.forEach(function(column){\r\n\t\t\tif(column.depth > headerDepth){\r\n\t\t\t\theaderDepth = column.depth;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tcolumns.forEach(function(column){\r\n\t\t\tparseColumnGroup(column,0);\r\n\t\t});\r\n\r\n\t\theaders.forEach((header) => {\r\n\t\t\tvar columns = [];\r\n\r\n\t\t\theader.forEach((col) => {\r\n\t\t\t\tif(col){\r\n\t\t\t\t\tcolumns.push(new ExportColumn(col.title, col.column.getComponent(), col.width, col.height, col.depth));\r\n\t\t\t\t}else{\r\n\t\t\t\t\tcolumns.push(null);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\texportRows.push(new ExportRow(\"header\", columns));\r\n\t\t});\r\n\r\n\t\treturn exportRows;\r\n\t}\r\n\r\n\tbodyToExportRows(rows){\r\n\r\n\t\tvar columns = [];\r\n\t\tvar exportRows = [];\r\n\r\n\t\tthis.table.columnManager.columnsByIndex.forEach((column) => {\r\n\t\t\tif (this.columnVisCheck(column)) {\r\n\t\t\t\tcolumns.push(column.getComponent());\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tif(this.config.columnCalcs !== false && this.table.modExists(\"columnCalcs\")){\r\n\t\t\tif(this.table.modules.columnCalcs.topInitialized){\r\n\t\t\t\trows.unshift(this.table.modules.columnCalcs.topRow);\r\n\t\t\t}\r\n\r\n\t\t\tif(this.table.modules.columnCalcs.botInitialized){\r\n\t\t\t\trows.push(this.table.modules.columnCalcs.botRow);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\trows = rows.filter((row) => {\r\n\t\t\tswitch(row.type){\r\n\t\t\t\tcase \"group\":\r\n\t\t\t\treturn this.config.rowGroups !== false;\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"calc\":\r\n\t\t\t\treturn this.config.columnCalcs !== false;\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"row\":\r\n\t\t\t\treturn !(this.table.options.dataTree && this.config.dataTree === false && row.modules.dataTree.parent);\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\r\n\t\t\treturn true;\r\n\t\t});\r\n\r\n\t\trows.forEach((row, i) => {\r\n\t\t\tvar rowData = row.getData(this.colVisProp);\r\n\t\t\tvar exportCols = [];\r\n\t\t\tvar indent = 0;\r\n\r\n\t\t\tswitch(row.type){\r\n\t\t\t\tcase \"group\":\r\n\t\t\t\tindent = row.level;\r\n\t\t\t\texportCols.push(new ExportColumn(row.key, row.getComponent(), columns.length, 1));\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"calc\" :\r\n\t\t\t\tcase \"row\" :\r\n\t\t\t\tcolumns.forEach((col) => {\r\n\t\t\t\t\texportCols.push(new ExportColumn(col._column.getFieldValue(rowData), col, 1, 1));\r\n\t\t\t\t});\r\n\r\n\t\t\t\tif(this.table.options.dataTree && this.config.dataTree !== false){\r\n\t\t\t\t\tindent = row.modules.dataTree.index;\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\r\n\t\t\texportRows.push(new ExportRow(row.type, exportCols, row.getComponent(), indent));\r\n\t\t});\r\n\r\n\t\treturn exportRows;\r\n\t}\r\n\r\n\tgenereateTableElement(list){\r\n\t\tvar table = document.createElement(\"table\"),\r\n\t\theaderEl = document.createElement(\"thead\"),\r\n\t\tbodyEl = document.createElement(\"tbody\"),\r\n\t\tstyles = this.lookupTableStyles(),\r\n\t\trowFormatter = this.table.options[\"rowFormatter\" + (this.colVisProp.charAt(0).toUpperCase() + this.colVisProp.slice(1))],\r\n\t\tsetup = {};\r\n\r\n\t\tsetup.rowFormatter = rowFormatter !== null ? rowFormatter : this.table.options.rowFormatter;\r\n\r\n\t\tif(this.table.options.dataTree &&this.config.dataTree !== false && this.table.modExists(\"columnCalcs\")){\r\n\t\t\tsetup.treeElementField = this.table.modules.dataTree.elementField;\r\n\t\t}\r\n\r\n\t\t//assign group header formatter\r\n\t\tsetup.groupHeader = this.table.options[\"groupHeader\" + (this.colVisProp.charAt(0).toUpperCase() + this.colVisProp.slice(1))];\r\n\r\n\t\tif(setup.groupHeader && !Array.isArray(setup.groupHeader)){\r\n\t\t\tsetup.groupHeader = [setup.groupHeader];\r\n\t\t}\r\n\r\n\t\ttable.classList.add(\"tabulator-print-table\");\r\n\r\n\t\tthis.mapElementStyles(this.table.columnManager.getHeadersElement(), headerEl, [\"border-top\", \"border-left\", \"border-right\", \"border-bottom\", \"background-color\", \"color\", \"font-weight\", \"font-family\", \"font-size\"]);\r\n\r\n\r\n\t\tif(list.length > 1000){\r\n\t\t\tconsole.warn(\"It may take a long time to render an HTML table with more than 1000 rows\");\r\n\t\t}\r\n\r\n\t\tlist.forEach((row, i) => {\r\n\t\t\tswitch(row.type){\r\n\t\t\t\tcase \"header\":\r\n\t\t\t\theaderEl.appendChild(this.genereateHeaderElement(row, setup, styles));\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"group\":\r\n\t\t\t\tbodyEl.appendChild(this.genereateGroupElement(row, setup, styles));\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"calc\":\r\n\t\t\t\tbodyEl.appendChild(this.genereateCalcElement(row, setup, styles));\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"row\":\r\n\t\t\t\tlet rowEl = this.genereateRowElement(row, setup, styles);\r\n\t\t\t\tthis.mapElementStyles(((i % 2) && styles.evenRow) ? styles.evenRow : styles.oddRow, rowEl, [\"border-top\", \"border-left\", \"border-right\", \"border-bottom\", \"color\", \"font-weight\", \"font-family\", \"font-size\", \"background-color\"]);\r\n\t\t\t\tbodyEl.appendChild(rowEl);\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tif(headerEl.innerHTML){\r\n\t\t\ttable.appendChild(headerEl);\r\n\t\t}\r\n\r\n\t\ttable.appendChild(bodyEl);\r\n\r\n\r\n\t\tthis.mapElementStyles(this.table.element, table, [\"border-top\", \"border-left\", \"border-right\", \"border-bottom\"]);\r\n\t\treturn table;\r\n\t}\r\n\r\n\tlookupTableStyles(){\r\n\t\tvar styles = {};\r\n\r\n\t\t//lookup row styles\r\n\t\tif(this.cloneTableStyle && window.getComputedStyle){\r\n\t\t\tstyles.oddRow = this.table.element.querySelector(\".tabulator-row-odd:not(.tabulator-group):not(.tabulator-calcs)\");\r\n\t\t\tstyles.evenRow = this.table.element.querySelector(\".tabulator-row-even:not(.tabulator-group):not(.tabulator-calcs)\");\r\n\t\t\tstyles.calcRow = this.table.element.querySelector(\".tabulator-row.tabulator-calcs\");\r\n\t\t\tstyles.firstRow = this.table.element.querySelector(\".tabulator-row:not(.tabulator-group):not(.tabulator-calcs)\");\r\n\t\t\tstyles.firstGroup = this.table.element.getElementsByClassName(\"tabulator-group\")[0];\r\n\r\n\t\t\tif(styles.firstRow){\r\n\t\t\t\tstyles.styleCells = styles.firstRow.getElementsByClassName(\"tabulator-cell\");\r\n\t\t\t\tstyles.firstCell = styles.styleCells[0];\r\n\t\t\t\tstyles.lastCell = styles.styleCells[styles.styleCells.length - 1];\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn styles;\r\n\t}\r\n\r\n\tgenereateHeaderElement(row, setup, styles){\r\n\t\tvar rowEl = document.createElement(\"tr\");\r\n\r\n\t\trow.columns.forEach((column) => {\r\n\t\t\tif(column){\r\n\t\t\t\tvar cellEl = document.createElement(\"th\");\r\n\t\t\t\tvar classNames = column.component._column.definition.cssClass ? column.component._column.definition.cssClass.split(\" \") : [];\r\n\r\n\t\t\t\tcellEl.colSpan = column.width;\r\n\t\t\t\tcellEl.rowSpan = column.height;\r\n\r\n\t\t\t\tcellEl.innerHTML = column.value;\r\n\r\n\t\t\t\tif(this.cloneTableStyle){\r\n\t\t\t\t\tcellEl.style.boxSizing = \"border-box\";\r\n\t\t\t\t}\r\n\r\n\t\t\t\tclassNames.forEach(function(className) {\r\n\t\t\t\t\tcellEl.classList.add(className);\r\n\t\t\t\t});\r\n\r\n\t\t\t\tthis.mapElementStyles(column.component.getElement(), cellEl, [\"text-align\", \"border-top\", \"border-left\", \"border-right\", \"border-bottom\", \"background-color\", \"color\", \"font-weight\", \"font-family\", \"font-size\"]);\r\n\t\t\t\tthis.mapElementStyles(column.component._column.contentElement, cellEl, [\"padding-top\", \"padding-left\", \"padding-right\", \"padding-bottom\"]);\r\n\r\n\t\t\t\tif(column.component._column.visible){\r\n\t\t\t\t\tthis.mapElementStyles(column.component.getElement(), cellEl, [\"width\"]);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tif(column.component._column.definition.width){\r\n\t\t\t\t\t\tcellEl.style.width = column.component._column.definition.width + \"px\";\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(column.component._column.parent){\r\n\t\t\t\t\tthis.mapElementStyles(column.component._column.parent.groupElement, cellEl, [\"border-top\"]);\r\n\t\t\t\t}\r\n\r\n\t\t\t\trowEl.appendChild(cellEl);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn rowEl;\r\n\t}\r\n\r\n\tgenereateGroupElement(row, setup, styles){\r\n\r\n\t\tvar rowEl = document.createElement(\"tr\"),\r\n\t\tcellEl = document.createElement(\"td\"),\r\n\t\tgroup = row.columns[0];\r\n\r\n\t\trowEl.classList.add(\"tabulator-print-table-row\");\r\n\r\n\t\tif(setup.groupHeader && setup.groupHeader[row.indent]){\r\n\t\t\tgroup.value = setup.groupHeader[row.indent](group.value, row.component._group.getRowCount(), row.component._group.getData(), row.component);\r\n\t\t}else{\r\n\t\t\tif(setup.groupHeader === false){\r\n\t\t\t\tgroup.value = group.value;\r\n\t\t\t}else{\r\n\t\t\t\tgroup.value = row.component._group.generator(group.value, row.component._group.getRowCount(), row.component._group.getData(), row.component);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tcellEl.colSpan = group.width;\r\n\t\tcellEl.innerHTML = group.value;\r\n\r\n\t\trowEl.classList.add(\"tabulator-print-table-group\");\r\n\t\trowEl.classList.add(\"tabulator-group-level-\" + row.indent);\r\n\r\n\t\tif(group.component.isVisible()){\r\n\t\t\trowEl.classList.add(\"tabulator-group-visible\");\r\n\t\t}\r\n\r\n\t\tthis.mapElementStyles(styles.firstGroup, rowEl, [\"border-top\", \"border-left\", \"border-right\", \"border-bottom\", \"color\", \"font-weight\", \"font-family\", \"font-size\", \"background-color\"]);\r\n\t\tthis.mapElementStyles(styles.firstGroup, cellEl, [\"padding-top\", \"padding-left\", \"padding-right\", \"padding-bottom\"]);\r\n\r\n\t\trowEl.appendChild(cellEl);\r\n\r\n\t\treturn rowEl;\r\n\t}\r\n\r\n\tgenereateCalcElement(row, setup, styles){\r\n\t\tvar rowEl = this.genereateRowElement(row, setup, styles);\r\n\r\n\t\trowEl.classList.add(\"tabulator-print-table-calcs\");\r\n\t\tthis.mapElementStyles(styles.calcRow, rowEl, [\"border-top\", \"border-left\", \"border-right\", \"border-bottom\", \"color\", \"font-weight\", \"font-family\", \"font-size\", \"background-color\"]);\r\n\r\n\t\treturn rowEl;\r\n\t}\r\n\r\n\tgenereateRowElement(row, setup, styles){\r\n\t\tvar rowEl = document.createElement(\"tr\");\r\n\r\n\t\trowEl.classList.add(\"tabulator-print-table-row\");\r\n\r\n\t\trow.columns.forEach((col) => {\r\n\r\n\t\t\tif(col){\r\n\t\t\t\tvar cellEl = document.createElement(\"td\"),\r\n\t\t\t\tcolumn = col.component._column,\r\n\t\t\t\tvalue = col.value;\r\n\r\n\t\t\t\tvar cellWrapper = {\r\n\t\t\t\t\tmodules:{},\r\n\t\t\t\t\tgetValue:function(){\r\n\t\t\t\t\t\treturn value;\r\n\t\t\t\t\t},\r\n\t\t\t\t\tgetField:function(){\r\n\t\t\t\t\t\treturn column.definition.field;\r\n\t\t\t\t\t},\r\n\t\t\t\t\tgetElement:function(){\r\n\t\t\t\t\t\treturn cellEl;\r\n\t\t\t\t\t},\r\n\t\t\t\t\tgetColumn:function(){\r\n\t\t\t\t\t\treturn column.getComponent();\r\n\t\t\t\t\t},\r\n\t\t\t\t\tgetData:function(){\r\n\t\t\t\t\t\treturn row.component.getData();\r\n\t\t\t\t\t},\r\n\t\t\t\t\tgetRow:function(){\r\n\t\t\t\t\t\treturn row.component;\r\n\t\t\t\t\t},\r\n\t\t\t\t\tgetComponent:function(){\r\n\t\t\t\t\t\treturn cellWrapper;\r\n\t\t\t\t\t},\r\n\t\t\t\t\tcolumn:column,\r\n\t\t\t\t};\r\n\r\n\t\t\t\tvar classNames = column.definition.cssClass ? column.definition.cssClass.split(\" \") : [];\r\n\r\n\t\t\t\tclassNames.forEach(function(className) {\r\n\t\t\t\t\tcellEl.classList.add(className);\r\n\t\t\t\t});\r\n\r\n\t\t\t\tif(this.table.modExists(\"format\") && this.config.formatCells !== false){\r\n\t\t\t\t\tvalue = this.table.modules.format.formatExportValue(cellWrapper, this.colVisProp);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tswitch(typeof value){\r\n\t\t\t\t\t\tcase \"object\":\r\n\t\t\t\t\t\tvalue = JSON.stringify(value);\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\tcase \"undefined\":\r\n\t\t\t\t\t\tcase \"null\":\r\n\t\t\t\t\t\tvalue = \"\";\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\tdefault:\r\n\t\t\t\t\t\tvalue = value;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(value instanceof Node){\r\n\t\t\t\t\tcellEl.appendChild(value);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tcellEl.innerHTML = value;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(styles.firstCell){\r\n\t\t\t\t\tthis.mapElementStyles(styles.firstCell, cellEl, [\"padding-top\", \"padding-left\", \"padding-right\", \"padding-bottom\", \"border-top\", \"border-left\", \"border-right\", \"border-bottom\", \"color\", \"font-weight\", \"font-family\", \"font-size\"]);\r\n\r\n\t\t\t\t\tif(column.definition.align){\r\n\t\t\t\t\t\tcellEl.style.textAlign = column.definition.align;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(this.table.options.dataTree && this.config.dataTree !== false){\r\n\t\t\t\t\tif((setup.treeElementField && setup.treeElementField == column.field) || (!setup.treeElementField && i == 0)){\r\n\t\t\t\t\t\tif(row.component._row.modules.dataTree.controlEl){\r\n\t\t\t\t\t\t\tcellEl.insertBefore(row.component._row.modules.dataTree.controlEl.cloneNode(true), cellEl.firstChild);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif(row.component._row.modules.dataTree.branchEl){\r\n\t\t\t\t\t\t\tcellEl.insertBefore(row.component._row.modules.dataTree.branchEl.cloneNode(true), cellEl.firstChild);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\trowEl.appendChild(cellEl);\r\n\r\n\t\t\t\tif(cellWrapper.modules.format && cellWrapper.modules.format.renderedCallback){\r\n\t\t\t\t\tcellWrapper.modules.format.renderedCallback();\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(setup.rowFormatter && this.config.formatCells !== false){\r\n\t\t\t\t\tsetup.rowFormatter(row.component);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn rowEl;\r\n\t}\r\n\r\n\tgenereateHTMLTable(list){\r\n\t\tvar holder = document.createElement(\"div\");\r\n\r\n\t\tholder.appendChild(this.genereateTableElement(list));\r\n\r\n\t\treturn holder.innerHTML;\r\n\t}\r\n\r\n\tgetHtml(visible, style, config, colVisProp){\r\n\t\tvar list = this.generateExportList(config || this.table.options.htmlOutputConfig, style, visible, colVisProp || \"htmlOutput\");\r\n\r\n\t\treturn this.genereateHTMLTable(list);\r\n\t}\r\n\r\n\tmapElementStyles(from, to, props){\r\n\t\tif(this.cloneTableStyle && from && to){\r\n\r\n\t\t\tvar lookup = {\r\n\t\t\t\t\"background-color\" : \"backgroundColor\",\r\n\t\t\t\t\"color\" : \"fontColor\",\r\n\t\t\t\t\"width\" : \"width\",\r\n\t\t\t\t\"font-weight\" : \"fontWeight\",\r\n\t\t\t\t\"font-family\" : \"fontFamily\",\r\n\t\t\t\t\"font-size\" : \"fontSize\",\r\n\t\t\t\t\"text-align\" : \"textAlign\",\r\n\t\t\t\t\"border-top\" : \"borderTop\",\r\n\t\t\t\t\"border-left\" : \"borderLeft\",\r\n\t\t\t\t\"border-right\" : \"borderRight\",\r\n\t\t\t\t\"border-bottom\" : \"borderBottom\",\r\n\t\t\t\t\"padding-top\" : \"paddingTop\",\r\n\t\t\t\t\"padding-left\" : \"paddingLeft\",\r\n\t\t\t\t\"padding-right\" : \"paddingRight\",\r\n\t\t\t\t\"padding-bottom\" : \"paddingBottom\",\r\n\t\t\t};\r\n\r\n\t\t\tif(window.getComputedStyle){\r\n\t\t\t\tvar fromStyle = window.getComputedStyle(from);\r\n\r\n\t\t\t\tprops.forEach(function(prop){\r\n\t\t\t\t\tto.style[lookup[prop]] = fromStyle.getPropertyValue(prop);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n\r\nExport.moduleName = \"export\";\r\n\r\nexport default Export;\r\n","export default {\r\n\r\n\t//equal to\r\n\t\"=\":function(filterVal, rowVal, rowData, filterParams){\r\n\t\treturn rowVal == filterVal ? true : false;\r\n\t},\r\n\r\n\t//less than\r\n\t\"<\":function(filterVal, rowVal, rowData, filterParams){\r\n\t\treturn rowVal < filterVal ? true : false;\r\n\t},\r\n\r\n\t//less than or equal to\r\n\t\"<=\":function(filterVal, rowVal, rowData, filterParams){\r\n\t\treturn rowVal <= filterVal ? true : false;\r\n\t},\r\n\r\n\t//greater than\r\n\t\">\":function(filterVal, rowVal, rowData, filterParams){\r\n\t\treturn rowVal > filterVal ? true : false;\r\n\t},\r\n\r\n\t//greater than or equal to\r\n\t\">=\":function(filterVal, rowVal, rowData, filterParams){\r\n\t\treturn rowVal >= filterVal ? true : false;\r\n\t},\r\n\r\n\t//not equal to\r\n\t\"!=\":function(filterVal, rowVal, rowData, filterParams){\r\n\t\treturn rowVal != filterVal ? true : false;\r\n\t},\r\n\r\n\t\"regex\":function(filterVal, rowVal, rowData, filterParams){\r\n\r\n\t\tif(typeof filterVal == \"string\"){\r\n\t\t\tfilterVal = new RegExp(filterVal);\r\n\t\t}\r\n\r\n\t\treturn filterVal.test(rowVal);\r\n\t},\r\n\r\n\t//contains the string\r\n\t\"like\":function(filterVal, rowVal, rowData, filterParams){\r\n\t\tif(filterVal === null || typeof filterVal === \"undefined\"){\r\n\t\t\treturn rowVal === filterVal ? true : false;\r\n\t\t}else{\r\n\t\t\tif(typeof rowVal !== 'undefined' && rowVal !== null){\r\n\t\t\t\treturn String(rowVal).toLowerCase().indexOf(filterVal.toLowerCase()) > -1;\r\n\t\t\t}\r\n\t\t\telse{\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\t//contains the keywords\r\n\t\"keywords\":function(filterVal, rowVal, rowData, filterParams){\r\n\t\tvar keywords = filterVal.toLowerCase().split(typeof filterParams.separator === \"undefined\" ? \" \" : filterParams.separator),\r\n\t\tvalue = String(rowVal === null || typeof rowVal === \"undefined\" ? \"\" : rowVal).toLowerCase(),\r\n\t\tmatches = [];\r\n\r\n\t\tkeywords.forEach((keyword) =>{\r\n\t\t\tif(value.includes(keyword)){\r\n\t\t\t\tmatches.push(true);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn filterParams.matchAll ? matches.length === keywords.length : !!matches.length;\r\n\t},\r\n\r\n\t//starts with the string\r\n\t\"starts\":function(filterVal, rowVal, rowData, filterParams){\r\n\t\tif(filterVal === null || typeof filterVal === \"undefined\"){\r\n\t\t\treturn rowVal === filterVal ? true : false;\r\n\t\t}else{\r\n\t\t\tif(typeof rowVal !== 'undefined' && rowVal !== null){\r\n\t\t\t\treturn String(rowVal).toLowerCase().startsWith(filterVal.toLowerCase());\r\n\t\t\t}\r\n\t\t\telse{\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\t//ends with the string\r\n\t\"ends\":function(filterVal, rowVal, rowData, filterParams){\r\n\t\tif(filterVal === null || typeof filterVal === \"undefined\"){\r\n\t\t\treturn rowVal === filterVal ? true : false;\r\n\t\t}else{\r\n\t\t\tif(typeof rowVal !== 'undefined' && rowVal !== null){\r\n\t\t\t\treturn String(rowVal).toLowerCase().endsWith(filterVal.toLowerCase());\r\n\t\t\t}\r\n\t\t\telse{\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\t//in array\r\n\t\"in\":function(filterVal, rowVal, rowData, filterParams){\r\n\t\tif(Array.isArray(filterVal)){\r\n\t\t\treturn filterVal.length ? filterVal.indexOf(rowVal) > -1 : true;\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Filter Error - filter value is not an array:\", filterVal);\r\n\t\t\treturn false;\r\n\t\t}\r\n\t},\r\n};","import Module from '../../core/Module.js';\r\n\r\nimport defaultFilters from './defaults/filters.js';\r\n\r\nclass Filter extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.filterList = []; //hold filter list\r\n\t\tthis.headerFilters = {}; //hold column filters\r\n\t\tthis.headerFilterColumns = []; //hold columns that use header filters\r\n\r\n\t\tthis.prevHeaderFilterChangeCheck = \"\";\r\n\t\tthis.prevHeaderFilterChangeCheck = \"{}\";\r\n\r\n\t\tthis.changed = false; //has filtering changed since last render\r\n\t}\r\n\r\n\t//initialize column header filter\r\n\tinitializeColumn(column, value){\r\n\t\tvar self = this,\r\n\t\tfield = column.getField(),\r\n\t\tparams;\r\n\r\n\t\t//handle successfull value change\r\n\t\tfunction success(value){\r\n\t\t\tvar filterType = (column.modules.filter.tagType == \"input\" && column.modules.filter.attrType == \"text\") || column.modules.filter.tagType == \"textarea\" ? \"partial\" : \"match\",\r\n\t\t\ttype = \"\",\r\n\t\t\tfilterChangeCheck = \"\",\r\n\t\t\tfilterFunc;\r\n\r\n\t\t\tif(typeof column.modules.filter.prevSuccess === \"undefined\" || column.modules.filter.prevSuccess !== value){\r\n\r\n\t\t\t\tcolumn.modules.filter.prevSuccess = value;\r\n\r\n\t\t\t\tif(!column.modules.filter.emptyFunc(value)){\r\n\t\t\t\t\tcolumn.modules.filter.value = value;\r\n\r\n\t\t\t\t\tswitch(typeof column.definition.headerFilterFunc){\r\n\t\t\t\t\t\tcase \"string\":\r\n\t\t\t\t\t\tif(Filter.filters[column.definition.headerFilterFunc]){\r\n\t\t\t\t\t\t\ttype = column.definition.headerFilterFunc;\r\n\t\t\t\t\t\t\tfilterFunc = function(data){\r\n\t\t\t\t\t\t\t\tvar params = column.definition.headerFilterFuncParams || {};\r\n\t\t\t\t\t\t\t\tvar fieldVal = column.getFieldValue(data);\r\n\r\n\t\t\t\t\t\t\t\tparams = typeof params === \"function\" ? params(value, fieldVal, data) : params;\r\n\r\n\t\t\t\t\t\t\t\treturn Filter.filters[column.definition.headerFilterFunc](value, fieldVal, data, params);\r\n\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\tconsole.warn(\"Header Filter Error - Matching filter function not found: \", column.definition.headerFilterFunc);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\tcase \"function\":\r\n\t\t\t\t\t\tfilterFunc = function(data){\r\n\t\t\t\t\t\t\tvar params = column.definition.headerFilterFuncParams || {};\r\n\t\t\t\t\t\t\tvar fieldVal = column.getFieldValue(data);\r\n\r\n\t\t\t\t\t\t\tparams = typeof params === \"function\" ? params(value, fieldVal, data) : params;\r\n\r\n\t\t\t\t\t\t\treturn column.definition.headerFilterFunc(value, fieldVal, data, params);\r\n\t\t\t\t\t\t};\r\n\r\n\t\t\t\t\t\ttype = filterFunc;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif(!filterFunc){\r\n\t\t\t\t\t\tswitch(filterType){\r\n\t\t\t\t\t\t\tcase \"partial\":\r\n\t\t\t\t\t\t\tfilterFunc = function(data){\r\n\t\t\t\t\t\t\t\tvar colVal = column.getFieldValue(data);\r\n\r\n\t\t\t\t\t\t\t\tif(typeof colVal !== 'undefined' && colVal !== null){\r\n\t\t\t\t\t\t\t\t\treturn String(colVal).toLowerCase().indexOf(String(value).toLowerCase()) > -1;\r\n\t\t\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t\ttype = \"like\";\r\n\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\t\tdefault:\r\n\t\t\t\t\t\t\tfilterFunc = function(data){\r\n\t\t\t\t\t\t\t\treturn column.getFieldValue(data) == value;\r\n\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t\ttype = \"=\";\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tself.headerFilters[field] = {value:value, func:filterFunc, type:type, params:params || {}};\r\n\r\n\t\t\t\t}else{\r\n\t\t\t\t\tdelete self.headerFilters[field];\r\n\t\t\t\t}\r\n\r\n\t\t\t\tfilterChangeCheck = JSON.stringify(self.headerFilters);\r\n\r\n\t\t\t\tif(self.prevHeaderFilterChangeCheck !== filterChangeCheck){\r\n\t\t\t\t\tself.prevHeaderFilterChangeCheck = filterChangeCheck;\r\n\r\n\t\t\t\t\tself.changed = true;\r\n\t\t\t\t\tself.table.rowManager.filterRefresh();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\tcolumn.modules.filter = {\r\n\t\t\tsuccess:success,\r\n\t\t\tattrType:false,\r\n\t\t\ttagType:false,\r\n\t\t\temptyFunc:false,\r\n\t\t};\r\n\r\n\t\tthis.generateHeaderFilterElement(column);\r\n\t}\r\n\r\n\tgenerateHeaderFilterElement(column, initialValue, reinitialize){\r\n\t\tvar self = this,\r\n\t\tsuccess = column.modules.filter.success,\r\n\t\tfield = column.getField(),\r\n\t\tfilterElement, editor, editorElement, cellWrapper, typingTimer, searchTrigger, params;\r\n\r\n\t\t//handle aborted edit\r\n\t\tfunction cancel(){}\r\n\r\n\t\tif(column.modules.filter.headerElement && column.modules.filter.headerElement.parentNode){\r\n\t\t\tcolumn.contentElement.removeChild(column.modules.filter.headerElement.parentNode);\r\n\t\t}\r\n\r\n\t\tif(field){\r\n\r\n\t\t\t//set empty value function\r\n\t\t\tcolumn.modules.filter.emptyFunc = column.definition.headerFilterEmptyCheck || function(value){\r\n\t\t\t\treturn !value && value !== \"0\" && value !== 0;\r\n\t\t\t};\r\n\r\n\t\t\tfilterElement = document.createElement(\"div\");\r\n\t\t\tfilterElement.classList.add(\"tabulator-header-filter\");\r\n\r\n\t\t\t//set column editor\r\n\t\t\tswitch(typeof column.definition.headerFilter){\r\n\t\t\t\tcase \"string\":\r\n\t\t\t\tif(self.table.modules.edit.editors[column.definition.headerFilter]){\r\n\t\t\t\t\teditor = self.table.modules.edit.editors[column.definition.headerFilter];\r\n\r\n\t\t\t\t\tif((column.definition.headerFilter === \"tick\" || column.definition.headerFilter === \"tickCross\") && !column.definition.headerFilterEmptyCheck){\r\n\t\t\t\t\t\tcolumn.modules.filter.emptyFunc = function(value){\r\n\t\t\t\t\t\t\treturn value !== true && value !== false;\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t}\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.warn(\"Filter Error - Cannot build header filter, No such editor found: \", column.definition.editor);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"function\":\r\n\t\t\t\teditor = column.definition.headerFilter;\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"boolean\":\r\n\t\t\t\tif(column.modules.edit && column.modules.edit.editor){\r\n\t\t\t\t\teditor = column.modules.edit.editor;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tif(column.definition.formatter && self.table.modules.edit.editors[column.definition.formatter]){\r\n\t\t\t\t\t\teditor = self.table.modules.edit.editors[column.definition.formatter];\r\n\r\n\t\t\t\t\t\tif((column.definition.formatter === \"tick\" || column.definition.formatter === \"tickCross\") && !column.definition.headerFilterEmptyCheck){\r\n\t\t\t\t\t\t\tcolumn.modules.filter.emptyFunc = function(value){\r\n\t\t\t\t\t\t\t\treturn value !== true && value !== false;\r\n\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\teditor = self.table.modules.edit.editors[\"input\"];\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\r\n\t\t\tif(editor){\r\n\r\n\t\t\t\tcellWrapper = {\r\n\t\t\t\t\tgetValue:function(){\r\n\t\t\t\t\t\treturn typeof initialValue !== \"undefined\" ? initialValue : \"\";\r\n\t\t\t\t\t},\r\n\t\t\t\t\tgetField:function(){\r\n\t\t\t\t\t\treturn column.definition.field;\r\n\t\t\t\t\t},\r\n\t\t\t\t\tgetElement:function(){\r\n\t\t\t\t\t\treturn filterElement;\r\n\t\t\t\t\t},\r\n\t\t\t\t\tgetColumn:function(){\r\n\t\t\t\t\t\treturn column.getComponent();\r\n\t\t\t\t\t},\r\n\t\t\t\t\tgetRow:function(){\r\n\t\t\t\t\t\treturn {\r\n\t\t\t\t\t\t\tnormalizeHeight:function(){\r\n\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t}\r\n\t\t\t\t};\r\n\r\n\t\t\t\tparams = column.definition.headerFilterParams || {};\r\n\r\n\t\t\t\tparams = typeof params === \"function\" ? params.call(self.table) : params;\r\n\r\n\t\t\t\teditorElement = editor.call(this.table.modules.edit, cellWrapper, function(){}, success, cancel, params);\r\n\r\n\t\t\t\tif(!editorElement){\r\n\t\t\t\t\tconsole.warn(\"Filter Error - Cannot add filter to \" + field + \" column, editor returned a value of false\");\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(!(editorElement instanceof Node)){\r\n\t\t\t\t\tconsole.warn(\"Filter Error - Cannot add filter to \" + field + \" column, editor should return an instance of Node, the editor returned:\", editorElement);\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//set Placeholder Text\r\n\t\t\t\tif(field){\r\n\t\t\t\t\tself.table.modules.localize.bind(\"headerFilters|columns|\" + column.definition.field, function(value){\r\n\t\t\t\t\t\teditorElement.setAttribute(\"placeholder\", typeof value !== \"undefined\" && value ? value : self.table.modules.localize.getText(\"headerFilters|default\"));\r\n\t\t\t\t\t});\r\n\t\t\t\t}else{\r\n\t\t\t\t\tself.table.modules.localize.bind(\"headerFilters|default\", function(value){\r\n\t\t\t\t\t\teditorElement.setAttribute(\"placeholder\", typeof self.column.definition.headerFilterPlaceholder !== \"undefined\" && self.column.definition.headerFilterPlaceholder ? self.column.definition.headerFilterPlaceholder : value);\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//focus on element on click\r\n\t\t\t\teditorElement.addEventListener(\"click\", function(e){\r\n\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\teditorElement.focus();\r\n\t\t\t\t});\r\n\r\n\t\t\t\teditorElement.addEventListener(\"focus\", (e) => {\r\n\t\t\t\t\tvar left = this.table.columnManager.element.scrollLeft;\r\n\r\n\t\t\t\t\tif(left !== this.table.rowManager.element.scrollLeft){\r\n\t\t\t\t\t\tthis.table.rowManager.scrollHorizontal(left);\r\n\t\t\t\t\t\tthis.table.columnManager.scrollHorizontal(left);\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\t//live update filters as user types\r\n\t\t\t\ttypingTimer = false;\r\n\r\n\t\t\t\tsearchTrigger = function(e){\r\n\t\t\t\t\tif(typingTimer){\r\n\t\t\t\t\t\tclearTimeout(typingTimer);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\ttypingTimer = setTimeout(function(){\r\n\t\t\t\t\t\tsuccess(editorElement.value);\r\n\t\t\t\t\t},self.table.options.headerFilterLiveFilterDelay);\r\n\t\t\t\t};\r\n\r\n\t\t\t\tcolumn.modules.filter.headerElement = editorElement;\r\n\t\t\t\tcolumn.modules.filter.attrType = editorElement.hasAttribute(\"type\") ? editorElement.getAttribute(\"type\").toLowerCase() : \"\" ;\r\n\t\t\t\tcolumn.modules.filter.tagType = editorElement.tagName.toLowerCase();\r\n\r\n\t\t\t\tif(column.definition.headerFilterLiveFilter !== false){\r\n\r\n\t\t\t\t\tif (\r\n\t\t\t\t\t\t!(\r\n\t\t\t\t\t\t\tcolumn.definition.headerFilter === 'autocomplete' ||\r\n\t\t\t\t\t\t\tcolumn.definition.headerFilter === 'tickCross' ||\r\n\t\t\t\t\t\t\t((column.definition.editor === 'autocomplete' ||\r\n\t\t\t\t\t\t\t\tcolumn.definition.editor === 'tickCross') &&\r\n\t\t\t\t\t\t\tcolumn.definition.headerFilter === true)\r\n\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t) {\r\n\t\t\t\t\t\teditorElement.addEventListener(\"keyup\", searchTrigger);\r\n\t\t\t\t\teditorElement.addEventListener(\"search\", searchTrigger);\r\n\r\n\r\n\t\t\t\t\t//update number filtered columns on change\r\n\t\t\t\t\tif(column.modules.filter.attrType == \"number\"){\r\n\t\t\t\t\t\teditorElement.addEventListener(\"change\", function(e){\r\n\t\t\t\t\t\t\tsuccess(editorElement.value);\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t//change text inputs to search inputs to allow for clearing of field\r\n\t\t\t\t\tif(column.modules.filter.attrType == \"text\" && this.table.browser !== \"ie\"){\r\n\t\t\t\t\t\teditorElement.setAttribute(\"type\", \"search\");\r\n\t\t\t\t\t\t// editorElement.off(\"change blur\"); //prevent blur from triggering filter and preventing selection click\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\t\t//prevent input and select elements from propegating click to column sorters etc\r\n\t\t\t\t\tif(column.modules.filter.tagType == \"input\" || column.modules.filter.tagType == \"select\" || column.modules.filter.tagType == \"textarea\"){\r\n\t\t\t\t\t\teditorElement.addEventListener(\"mousedown\",function(e){\r\n\t\t\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tfilterElement.appendChild(editorElement);\r\n\r\n\t\t\t\tcolumn.contentElement.appendChild(filterElement);\r\n\r\n\t\t\t\tif(!reinitialize){\r\n\t\t\t\t\tself.headerFilterColumns.push(column);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Filter Error - Cannot add header filter, column has no field set:\", column.definition.title);\r\n\t\t}\r\n\t}\r\n\r\n\t//hide all header filter elements (used to ensure correct column widths in \"fitData\" layout mode)\r\n\thideHeaderFilterElements(){\r\n\t\tthis.headerFilterColumns.forEach(function(column){\r\n\t\t\tif(column.modules.filter && column.modules.filter.headerElement){\r\n\t\t\t\tcolumn.modules.filter.headerElement.style.display = 'none';\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t//show all header filter elements (used to ensure correct column widths in \"fitData\" layout mode)\r\n\tshowHeaderFilterElements(){\r\n\t\tthis.headerFilterColumns.forEach(function(column){\r\n\t\t\tif(column.modules.filter && column.modules.filter.headerElement){\r\n\t\t\t\tcolumn.modules.filter.headerElement.style.display = '';\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t//programatically set focus of header filter\r\n\tsetHeaderFilterFocus(column){\r\n\t\tif(column.modules.filter && column.modules.filter.headerElement){\r\n\t\t\tcolumn.modules.filter.headerElement.focus();\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Column Filter Focus Error - No header filter set on column:\", column.getField());\r\n\t\t}\r\n\t}\r\n\r\n\t//programmatically get value of header filter\r\n\tgetHeaderFilterValue(column){\r\n\t\tif(column.modules.filter && column.modules.filter.headerElement){\r\n\t\t\treturn column.modules.filter.headerElement.value;\r\n\t\t} else {\r\n\t\t\tconsole.warn(\"Column Filter Error - No header filter set on column:\", column.getField());\r\n\t\t}\r\n\t}\r\n\r\n\t//programatically set value of header filter\r\n\tsetHeaderFilterValue(column, value){\r\n\t\tif (column){\r\n\t\t\tif(column.modules.filter && column.modules.filter.headerElement){\r\n\t\t\t\tthis.generateHeaderFilterElement(column, value, true);\r\n\t\t\t\tcolumn.modules.filter.success(value);\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Column Filter Error - No header filter set on column:\", column.getField());\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\treloadHeaderFilter(column){\r\n\t\tif (column){\r\n\t\t\tif(column.modules.filter && column.modules.filter.headerElement){\r\n\t\t\t\tthis.generateHeaderFilterElement(column, column.modules.filter.value, true);\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Column Filter Error - No header filter set on column:\", column.getField());\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//check if the filters has changed since last use\r\n\thasChanged(){\r\n\t\tvar changed = this.changed;\r\n\t\tthis.changed = false;\r\n\t\treturn changed;\r\n\t}\r\n\r\n\t//set standard filters\r\n\tsetFilter(field, type, value, params){\r\n\t\tvar self = this;\r\n\r\n\t\tself.filterList = [];\r\n\r\n\t\tif(!Array.isArray(field)){\r\n\t\t\tfield = [{field:field, type:type, value:value, params:params}];\r\n\t\t}\r\n\r\n\t\tself.addFilter(field);\r\n\t}\r\n\r\n\t//add filter to array\r\n\taddFilter(field, type, value, params){\r\n\t\tvar self = this;\r\n\r\n\t\tif(!Array.isArray(field)){\r\n\t\t\tfield = [{field:field, type:type, value:value, params:params}];\r\n\t\t}\r\n\r\n\t\tfield.forEach(function(filter){\r\n\r\n\t\t\tfilter = self.findFilter(filter);\r\n\r\n\t\t\tif(filter){\r\n\t\t\t\tself.filterList.push(filter);\r\n\r\n\t\t\t\tself.changed = true;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tif(this.table.options.persistence && this.table.modExists(\"persistence\", true) && this.table.modules.persistence.config.filter){\r\n\t\t\tthis.table.modules.persistence.save(\"filter\");\r\n\t\t}\r\n\t}\r\n\r\n\tfindFilter(filter){\r\n\t\tvar self = this,\r\n\t\tcolumn;\r\n\r\n\t\tif(Array.isArray(filter)){\r\n\t\t\treturn this.findSubFilters(filter);\r\n\t\t}\r\n\r\n\t\tvar filterFunc = false;\r\n\r\n\t\tif(typeof filter.field == \"function\"){\r\n\t\t\tfilterFunc = function(data){\r\n\t\t\t\treturn filter.field(data, filter.type || {})// pass params to custom filter function\r\n\t\t\t};\r\n\t\t}else{\r\n\r\n\t\t\tif(Filter.filters[filter.type]){\r\n\r\n\t\t\t\tcolumn = self.table.columnManager.getColumnByField(filter.field);\r\n\r\n\t\t\t\tif(column){\r\n\t\t\t\t\tfilterFunc = function(data){\r\n\t\t\t\t\t\treturn Filter.filters[filter.type](filter.value, column.getFieldValue(data), data, filter.params || {});\r\n\t\t\t\t\t};\r\n\t\t\t\t}else{\r\n\t\t\t\t\tfilterFunc = function(data){\r\n\t\t\t\t\t\treturn Filter.filters[filter.type](filter.value, data[filter.field], data, filter.params || {});\r\n\t\t\t\t\t};\r\n\t\t\t\t}\r\n\r\n\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Filter Error - No such filter type found, ignoring: \", filter.type);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfilter.func = filterFunc;\r\n\r\n\t\treturn filter.func ? filter : false;\r\n\t}\r\n\r\n\tfindSubFilters(filters){\r\n\t\tvar self = this,\r\n\t\toutput = [];\r\n\r\n\t\tfilters.forEach(function(filter){\r\n\t\t\tfilter = self.findFilter(filter);\r\n\r\n\t\t\tif(filter){\r\n\t\t\t\toutput.push(filter);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn output.length ? output : false;\r\n\t}\r\n\r\n\t//get all filters\r\n\tgetFilters(all, ajax){\r\n\t\tvar output = [];\r\n\r\n\t\tif(all){\r\n\t\t\toutput = this.getHeaderFilters();\r\n\t\t}\r\n\r\n\t\tif(ajax){\r\n\t\t\toutput.forEach(function(item){\r\n\t\t\t\tif(typeof item.type == \"function\"){\r\n\t\t\t\t\titem.type = \"function\";\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\toutput = output.concat(this.filtersToArray(this.filterList, ajax));\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\t//filter to Object\r\n\tfiltersToArray(filterList, ajax){\r\n\t\tvar output = [];\r\n\r\n\t\tfilterList.forEach((filter) => {\r\n\t\t\tvar item;\r\n\r\n\t\t\tif(Array.isArray(filter)){\r\n\t\t\t\toutput.push(this.filtersToArray(filter, ajax));\r\n\t\t\t}else{\r\n\t\t\t\titem = {field:filter.field, type:filter.type, value:filter.value}\r\n\r\n\t\t\t\tif(ajax){\r\n\t\t\t\t\tif(typeof item.type == \"function\"){\r\n\t\t\t\t\t\titem.type = \"function\";\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\toutput.push(item);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\t//get all filters\r\n\tgetHeaderFilters(){\r\n\t\tvar self = this,\r\n\t\toutput = [];\r\n\r\n\t\tfor(var key in this.headerFilters){\r\n\t\t\toutput.push({field:key, type:this.headerFilters[key].type, value:this.headerFilters[key].value});\r\n\t\t}\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\t//remove filter from array\r\n\tremoveFilter(field, type, value){\r\n\t\tvar self = this;\r\n\r\n\t\tif(!Array.isArray(field)){\r\n\t\t\tfield = [{field:field, type:type, value:value}];\r\n\t\t}\r\n\r\n\t\tfield.forEach(function(filter){\r\n\t\t\tvar index = -1;\r\n\r\n\t\t\tif(typeof filter.field == \"object\"){\r\n\t\t\t\tindex = self.filterList.findIndex(function(element){\r\n\t\t\t\t\treturn filter === element;\r\n\t\t\t\t});\r\n\t\t\t}else{\r\n\t\t\t\tindex = self.filterList.findIndex(function(element){\r\n\t\t\t\t\treturn filter.field === element.field && filter.type === element.type && filter.value === element.value;\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\tif(index > -1){\r\n\t\t\t\tself.filterList.splice(index, 1);\r\n\t\t\t\tself.changed = true;\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Filter Error - No matching filter type found, ignoring: \", filter.type);\r\n\t\t\t}\r\n\r\n\t\t});\r\n\r\n\t\tif(this.table.options.persistence && this.table.modExists(\"persistence\", true) && this.table.modules.persistence.config.filter){\r\n\t\t\tthis.table.modules.persistence.save(\"filter\");\r\n\t\t}\r\n\t}\r\n\r\n\t//clear filters\r\n\tclearFilter(all){\r\n\t\tthis.filterList = [];\r\n\r\n\t\tif(all){\r\n\t\t\tthis.clearHeaderFilter();\r\n\t\t}\r\n\r\n\t\tthis.changed = true;\r\n\r\n\t\tif(this.table.options.persistence && this.table.modExists(\"persistence\", true) && this.table.modules.persistence.config.filter){\r\n\t\t\tthis.table.modules.persistence.save(\"filter\");\r\n\t\t}\r\n\t}\r\n\r\n\t//clear header filters\r\n\tclearHeaderFilter(){\r\n\t\tvar self = this;\r\n\r\n\t\tthis.headerFilters = {};\r\n\t\tself.prevHeaderFilterChangeCheck = \"{}\";\r\n\r\n\t\tthis.headerFilterColumns.forEach(function(column){\r\n\t\t\tif(typeof column.modules.filter.value !== \"undefined\"){\r\n\t\t\t\tdelete column.modules.filter.value;\r\n\t\t\t}\r\n\t\t\tcolumn.modules.filter.prevSuccess = undefined;\r\n\t\t\tself.reloadHeaderFilter(column);\r\n\t\t});\r\n\r\n\t\tthis.changed = true;\r\n\t}\r\n\r\n\t//search data and return matching rows\r\n\tsearch (searchType, field, type, value){\r\n\t\tvar self = this,\r\n\t\tactiveRows = [],\r\n\t\tfilterList = [];\r\n\r\n\t\tif(!Array.isArray(field)){\r\n\t\t\tfield = [{field:field, type:type, value:value}];\r\n\t\t}\r\n\r\n\t\tfield.forEach(function(filter){\r\n\t\t\tfilter = self.findFilter(filter);\r\n\r\n\t\t\tif(filter){\r\n\t\t\t\tfilterList.push(filter);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tthis.table.rowManager.rows.forEach(function(row){\r\n\t\t\tvar match = true;\r\n\r\n\t\t\tfilterList.forEach(function(filter){\r\n\t\t\t\tif(!self.filterRecurse(filter, row.getData())){\r\n\t\t\t\t\tmatch = false;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tif(match){\r\n\t\t\t\tactiveRows.push(searchType === \"data\" ? row.getData(\"data\") : row.getComponent());\r\n\t\t\t}\r\n\r\n\t\t});\r\n\r\n\t\treturn activeRows;\r\n\t}\r\n\r\n\t//filter row array\r\n\tfilter(rowList, filters){\r\n\t\tvar self = this,\r\n\t\tactiveRows = [],\r\n\t\tactiveRowComponents = [];\r\n\r\n\t\tif(self.table.options.dataFiltering){\r\n\t\t\tself.table.options.dataFiltering.call(self.table, self.getFilters());\r\n\t\t}\r\n\r\n\t\tif(!self.table.options.ajaxFiltering && (self.filterList.length || Object.keys(self.headerFilters).length)){\r\n\r\n\t\t\trowList.forEach(function(row){\r\n\t\t\t\tif(self.filterRow(row)){\r\n\t\t\t\t\tactiveRows.push(row);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t}else{\r\n\t\t\tactiveRows = rowList.slice(0);\r\n\t\t}\r\n\r\n\t\tif(self.table.options.dataFiltered){\r\n\r\n\t\t\tactiveRows.forEach(function(row){\r\n\t\t\t\tactiveRowComponents.push(row.getComponent());\r\n\t\t\t});\r\n\r\n\t\t\tself.table.options.dataFiltered.call(self.table, self.getFilters(), activeRowComponents);\r\n\t\t}\r\n\r\n\t\treturn activeRows;\r\n\t}\r\n\r\n\t//filter individual row\r\n\tfilterRow(row, filters){\r\n\t\tvar self = this,\r\n\t\tmatch = true,\r\n\t\tdata = row.getData();\r\n\r\n\t\tself.filterList.forEach(function(filter){\r\n\t\t\tif(!self.filterRecurse(filter, data)){\r\n\t\t\t\tmatch = false;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\r\n\t\tfor(var field in self.headerFilters){\r\n\t\t\tif(!self.headerFilters[field].func(data)){\r\n\t\t\t\tmatch = false;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn match;\r\n\t}\r\n\r\n\tfilterRecurse(filter, data){\r\n\t\tvar self = this,\r\n\t\tmatch = false;\r\n\r\n\t\tif(Array.isArray(filter)){\r\n\t\t\tfilter.forEach(function(subFilter){\r\n\t\t\t\tif(self.filterRecurse(subFilter, data)){\r\n\t\t\t\t\tmatch = true;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tmatch = filter.func(data);\r\n\t\t}\r\n\r\n\t\treturn match;\r\n\t}\r\n}\r\n\r\nFilter.moduleName = \"filter\";\r\n\r\n//load defaults\r\nFilter.filters = defaultFilters;\r\n\r\nexport default Filter;","export default function(cell, formatterParams, onRendered){\r\n\treturn this.emptyToSpace(this.sanitizeHTML(cell.getValue()));\r\n};","export default function(cell, formatterParams, onRendered){\r\n\treturn cell.getValue();\r\n};","export default function(cell, formatterParams, onRendered){\r\n\tcell.getElement().style.whiteSpace = \"pre-wrap\";\r\n\treturn this.emptyToSpace(this.sanitizeHTML(cell.getValue()));\r\n};","export default function(cell, formatterParams, onRendered){\r\n\tvar floatVal = parseFloat(cell.getValue()),\r\n\tnumber, integer, decimal, rgx;\r\n\r\n\tvar decimalSym = formatterParams.decimal || \".\";\r\n\tvar thousandSym = formatterParams.thousand || \",\";\r\n\tvar symbol = formatterParams.symbol || \"\";\r\n\tvar after = !!formatterParams.symbolAfter;\r\n\tvar precision = typeof formatterParams.precision !== \"undefined\" ? formatterParams.precision : 2;\r\n\r\n\tif(isNaN(floatVal)){\r\n\t\treturn this.emptyToSpace(this.sanitizeHTML(cell.getValue()));\r\n\t}\r\n\r\n\tnumber = precision !== false ? floatVal.toFixed(precision) : floatVal;\r\n\tnumber = String(number).split(\".\");\r\n\r\n\tinteger = number[0];\r\n\tdecimal = number.length > 1 ? decimalSym + number[1] : \"\";\r\n\r\n\trgx = /(\\d+)(\\d{3})/;\r\n\r\n\twhile (rgx.test(integer)){\r\n\t\tinteger = integer.replace(rgx, \"$1\" + thousandSym + \"$2\");\r\n\t}\r\n\r\n\treturn after ? integer + decimal + symbol : symbol + integer + decimal;\r\n};","export default function(cell, formatterParams, onRendered){\r\n\tvar value = cell.getValue(),\r\n\turlPrefix = formatterParams.urlPrefix || \"\",\r\n\tdownload = formatterParams.download,\r\n\tlabel = value,\r\n\tel = document.createElement(\"a\"),\r\n\tdata;\r\n\r\n\tif(formatterParams.labelField){\r\n\t\tdata = cell.getData();\r\n\t\tlabel = data[formatterParams.labelField];\r\n\t}\r\n\r\n\tif(formatterParams.label){\r\n\t\tswitch(typeof formatterParams.label){\r\n\t\t\tcase \"string\":\r\n\t\t\tlabel = formatterParams.label;\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"function\":\r\n\t\t\tlabel = formatterParams.label(cell);\r\n\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\tif(label){\r\n\t\tif(formatterParams.urlField){\r\n\t\t\tdata = cell.getData();\r\n\t\t\tvalue = data[formatterParams.urlField];\r\n\t\t}\r\n\r\n\t\tif(formatterParams.url){\r\n\t\t\tswitch(typeof formatterParams.url){\r\n\t\t\t\tcase \"string\":\r\n\t\t\t\tvalue = formatterParams.url;\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"function\":\r\n\t\t\t\tvalue = formatterParams.url(cell);\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tel.setAttribute(\"href\", urlPrefix + value);\r\n\r\n\t\tif(formatterParams.target){\r\n\t\t\tel.setAttribute(\"target\", formatterParams.target);\r\n\t\t}\r\n\r\n\t\tif(formatterParams.download){\r\n\r\n\t\t\tif(typeof download == \"function\"){\r\n\t\t\t\tdownload = download(cell);\r\n\t\t\t}else{\r\n\t\t\t\tdownload = download === true ? \"\" : download;\r\n\t\t\t}\r\n\r\n\t\t\tel.setAttribute(\"download\", download);\r\n\t\t}\r\n\r\n\t\tel.innerHTML = this.emptyToSpace(this.sanitizeHTML(label));\r\n\r\n\t\treturn el;\r\n\t}else{\r\n\t\treturn \" \";\r\n\t}\r\n};","export default function(cell, formatterParams, onRendered){\r\n\tvar el = document.createElement(\"img\"),\r\n\tsrc = cell.getValue();\r\n\r\n\tif(formatterParams.urlPrefix){\r\n\t\tsrc = formatterParams.urlPrefix + cell.getValue();\r\n\t}\r\n\r\n\tif(formatterParams.urlSuffix){\r\n\t\tsrc = src + formatterParams.urlSuffix;\r\n\t}\r\n\r\n\tel.setAttribute(\"src\", src);\r\n\r\n\tswitch(typeof formatterParams.height){\r\n\t\tcase \"number\":\r\n\t\tel.style.height = formatterParams.height + \"px\";\r\n\t\tbreak;\r\n\r\n\t\tcase \"string\":\r\n\t\tel.style.height = formatterParams.height;\r\n\t\tbreak;\r\n\t}\r\n\r\n\tswitch(typeof formatterParams.width){\r\n\t\tcase \"number\":\r\n\t\tel.style.width = formatterParams.width + \"px\";\r\n\t\tbreak;\r\n\r\n\t\tcase \"string\":\r\n\t\tel.style.width = formatterParams.width;\r\n\t\tbreak;\r\n\t}\r\n\r\n\tel.addEventListener(\"load\", function(){\r\n\t\tcell.getRow().normalizeHeight();\r\n\t});\r\n\r\n\treturn el;\r\n};","export default function(cell, formatterParams, onRendered){\r\n\tvar value = cell.getValue(),\r\n\telement = cell.getElement(),\r\n\tempty = formatterParams.allowEmpty,\r\n\ttruthy = formatterParams.allowTruthy,\r\n\ttick = typeof formatterParams.tickElement !== \"undefined\" ? formatterParams.tickElement : '',\r\n\tcross = typeof formatterParams.crossElement !== \"undefined\" ? formatterParams.crossElement : '';\r\n\r\n\tif((truthy && value) || (value === true || value === \"true\" || value === \"True\" || value === 1 || value === \"1\")){\r\n\t\telement.setAttribute(\"aria-checked\", true);\r\n\t\treturn tick || \"\";\r\n\t}else{\r\n\t\tif(empty && (value === \"null\" || value === \"\" || value === null || typeof value === \"undefined\")){\r\n\t\t\telement.setAttribute(\"aria-checked\", \"mixed\");\r\n\t\t\treturn \"\";\r\n\t\t}else{\r\n\t\t\telement.setAttribute(\"aria-checked\", false);\r\n\t\t\treturn cross || \"\";\r\n\t\t}\r\n\t}\r\n};","export default function(cell, formatterParams, onRendered){\r\n\tvar inputFormat = formatterParams.inputFormat || \"YYYY-MM-DD hh:mm:ss\";\r\n\tvar\toutputFormat = formatterParams.outputFormat || \"DD/MM/YYYY hh:mm:ss\";\r\n\tvar\tinvalid = typeof formatterParams.invalidPlaceholder !== \"undefined\" ? formatterParams.invalidPlaceholder : \"\";\r\n\tvar value = cell.getValue();\r\n\r\n\tvar newDatetime = moment(value, inputFormat);\r\n\r\n\tif(newDatetime.isValid()){\r\n\t\treturn formatterParams.timezone ? newDatetime.tz(formatterParams.timezone).format(outputFormat) : newDatetime.format(outputFormat);\r\n\t}else{\r\n\r\n\t\tif(invalid === true){\r\n\t\t\treturn value;\r\n\t\t}else if(typeof invalid === \"function\"){\r\n\t\t\treturn invalid(value);\r\n\t\t}else{\r\n\t\t\treturn invalid;\r\n\t\t}\r\n\t}\r\n};","export default function datetime(cell, formatterParams, onRendered) {\r\n\tvar inputFormat = formatterParams.inputFormat || \"YYYY-MM-DD hh:mm:ss\";\r\n\tvar invalid = typeof formatterParams.invalidPlaceholder !== \"undefined\" ? formatterParams.invalidPlaceholder : \"\";\r\n\tvar suffix = typeof formatterParams.suffix !== \"undefined\" ? formatterParams.suffix : false;\r\n\tvar unit = typeof formatterParams.unit !== \"undefined\" ? formatterParams.unit : undefined;\r\n\tvar humanize = typeof formatterParams.humanize !== \"undefined\" ? formatterParams.humanize : false;\r\n\tvar date = typeof formatterParams.date !== \"undefined\" ? formatterParams.date : moment();\r\n\tvar value = cell.getValue();\r\n\r\n\tvar newDatetime = moment(value, inputFormat);\r\n\r\n\tif (newDatetime.isValid()) {\r\n\t\tif(humanize){\r\n\t\t\treturn moment.duration(newDatetime.diff(date)).humanize(suffix);\r\n\t\t}else{\r\n\t\t\treturn newDatetime.diff(date, unit) + (suffix ? \" \" + suffix : \"\");\r\n\t\t}\r\n\r\n\t} else {\r\n\r\n\t\tif (invalid === true) {\r\n\t\t\treturn value;\r\n\t\t} else if (typeof invalid === \"function\") {\r\n\t\t\treturn invalid(value);\r\n\t\t} else {\r\n\t\t\treturn invalid;\r\n\t\t}\r\n\t}\r\n};","export default function (cell, formatterParams, onRendered) {\r\n\tvar value = cell.getValue();\r\n\r\n\tif (typeof formatterParams[value] === \"undefined\") {\r\n\t\tconsole.warn('Missing display value for ' + value);\r\n\t\treturn value;\r\n\t}\r\n\r\n\treturn formatterParams[value];\r\n};","export default function(cell, formatterParams, onRendered){\r\n\tvar value = cell.getValue(),\r\n\telement = cell.getElement(),\r\n\tmaxStars = formatterParams && formatterParams.stars ? formatterParams.stars : 5,\r\n\tstars = document.createElement(\"span\"),\r\n\tstar = document.createElementNS('http://www.w3.org/2000/svg', \"svg\"),\r\n\tstarActive = '',\r\n\tstarInactive = '';\r\n\r\n\t//style stars holder\r\n\tstars.style.verticalAlign = \"middle\";\r\n\r\n\t//style star\r\n\tstar.setAttribute(\"width\", \"14\");\r\n\tstar.setAttribute(\"height\", \"14\");\r\n\tstar.setAttribute(\"viewBox\", \"0 0 512 512\");\r\n\tstar.setAttribute(\"xml:space\", \"preserve\");\r\n\tstar.style.padding = \"0 1px\";\r\n\r\n\tvalue = value && !isNaN(value) ? parseInt(value) : 0;\r\n\r\n\tvalue = Math.max(0, Math.min(value, maxStars));\r\n\r\n\tfor(var i=1;i<= maxStars;i++){\r\n\t\tvar nextStar = star.cloneNode(true);\r\n\t\tnextStar.innerHTML = i <= value ? starActive : starInactive;\r\n\r\n\t\tstars.appendChild(nextStar);\r\n\t}\r\n\r\n\telement.style.whiteSpace = \"nowrap\";\r\n\telement.style.overflow = \"hidden\";\r\n\telement.style.textOverflow = \"ellipsis\";\r\n\r\n\telement.setAttribute(\"aria-label\", value);\r\n\r\n\treturn stars;\r\n};","export default function(cell, formatterParams, onRendered){\r\n\tvar value = this.sanitizeHTML(cell.getValue()) || 0,\r\n\tel = document.createElement(\"span\"),\r\n\tmax = formatterParams && formatterParams.max ? formatterParams.max : 100,\r\n\tmin = formatterParams && formatterParams.min ? formatterParams.min : 0,\r\n\tcolors = formatterParams && typeof formatterParams.color !== \"undefined\" ? formatterParams.color : [\"red\", \"orange\", \"green\"],\r\n\tcolor = \"#666666\",\r\n\tpercent, percentValue;\r\n\r\n\tif(isNaN(value) || typeof cell.getValue() === \"undefined\"){\r\n\t\treturn;\r\n\t}\r\n\r\n\tel.classList.add(\"tabulator-traffic-light\");\r\n\r\n\t//make sure value is in range\r\n\tpercentValue = parseFloat(value) <= max ? parseFloat(value) : max;\r\n\tpercentValue = parseFloat(percentValue) >= min ? parseFloat(percentValue) : min;\r\n\r\n\t//workout percentage\r\n\tpercent = (max - min) / 100;\r\n\tpercentValue = Math.round((percentValue - min) / percent);\r\n\r\n\t//set color\r\n\tswitch(typeof colors){\r\n\t\tcase \"string\":\r\n\t\tcolor = colors;\r\n\t\tbreak;\r\n\t\tcase \"function\":\r\n\t\tcolor = colors(value);\r\n\t\tbreak;\r\n\t\tcase \"object\":\r\n\t\tif(Array.isArray(colors)){\r\n\t\t\tvar unit = 100 / colors.length;\r\n\t\t\tvar index = Math.floor(percentValue / unit);\r\n\r\n\t\t\tindex = Math.min(index, colors.length - 1);\r\n\t\t\tindex = Math.max(index, 0);\r\n\t\t\tcolor = colors[index];\r\n\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\tel.style.backgroundColor = color;\r\n\r\n\treturn el;\r\n};","export default function(cell, formatterParams, onRendered){ //progress bar\r\n\tvar value = this.sanitizeHTML(cell.getValue()) || 0,\r\n\telement = cell.getElement(),\r\n\tmax = formatterParams && formatterParams.max ? formatterParams.max : 100,\r\n\tmin = formatterParams && formatterParams.min ? formatterParams.min : 0,\r\n\tlegendAlign = formatterParams && formatterParams.legendAlign ? formatterParams.legendAlign : \"center\",\r\n\tpercent, percentValue, color, legend, legendColor, top, left, right, bottom;\r\n\r\n\t//make sure value is in range\r\n\tpercentValue = parseFloat(value) <= max ? parseFloat(value) : max;\r\n\tpercentValue = parseFloat(percentValue) >= min ? parseFloat(percentValue) : min;\r\n\r\n\t//workout percentage\r\n\tpercent = (max - min) / 100;\r\n\tpercentValue = Math.round((percentValue - min) / percent);\r\n\r\n\t//set bar color\r\n\tswitch(typeof formatterParams.color){\r\n\t\tcase \"string\":\r\n\t\tcolor = formatterParams.color;\r\n\t\tbreak;\r\n\t\tcase \"function\":\r\n\t\tcolor = formatterParams.color(value);\r\n\t\tbreak;\r\n\t\tcase \"object\":\r\n\t\tif(Array.isArray(formatterParams.color)){\r\n\t\t\tvar unit = 100 / formatterParams.color.length;\r\n\t\t\tvar index = Math.floor(percentValue / unit);\r\n\r\n\t\t\tindex = Math.min(index, formatterParams.color.length - 1);\r\n\t\t\tindex = Math.max(index, 0);\r\n\t\t\tcolor = formatterParams.color[index];\r\n\t\t\tbreak;\r\n\t\t}\r\n\t\tdefault:\r\n\t\tcolor = \"#2DC214\";\r\n\t}\r\n\r\n\t//generate legend\r\n\tswitch(typeof formatterParams.legend){\r\n\t\tcase \"string\":\r\n\t\tlegend = formatterParams.legend;\r\n\t\tbreak;\r\n\t\tcase \"function\":\r\n\t\tlegend = formatterParams.legend(value);\r\n\t\tbreak;\r\n\t\tcase \"boolean\":\r\n\t\tlegend = value;\r\n\t\tbreak;\r\n\t\tdefault:\r\n\t\tlegend = false;\r\n\t}\r\n\r\n\t//set legend color\r\n\tswitch(typeof formatterParams.legendColor){\r\n\t\tcase \"string\":\r\n\t\tlegendColor = formatterParams.legendColor;\r\n\t\tbreak;\r\n\t\tcase \"function\":\r\n\t\tlegendColor = formatterParams.legendColor(value);\r\n\t\tbreak;\r\n\t\tcase \"object\":\r\n\t\tif(Array.isArray(formatterParams.legendColor)){\r\n\t\t\tvar unit = 100 / formatterParams.legendColor.length;\r\n\t\t\tvar index = Math.floor(percentValue / unit);\r\n\r\n\t\t\tindex = Math.min(index, formatterParams.legendColor.length - 1);\r\n\t\t\tindex = Math.max(index, 0);\r\n\t\t\tlegendColor = formatterParams.legendColor[index];\r\n\t\t}\r\n\t\tbreak;\r\n\t\tdefault:\r\n\t\tlegendColor = \"#000\";\r\n\t}\r\n\r\n\telement.style.minWidth = \"30px\";\r\n\telement.style.position = \"relative\";\r\n\r\n\telement.setAttribute(\"aria-label\", percentValue);\r\n\r\n\tvar barEl = document.createElement(\"div\");\r\n\tbarEl.style.display = \"inline-block\";\r\n\tbarEl.style.position = \"relative\";\r\n\tbarEl.style.width = percentValue + \"%\";\r\n\tbarEl.style.backgroundColor = color;\r\n\tbarEl.style.height = \"100%\";\r\n\r\n\tbarEl.setAttribute('data-max', max);\r\n\tbarEl.setAttribute('data-min', min);\r\n\r\n\r\n\tif(legend){\r\n\t\tvar legendEl = document.createElement(\"div\");\r\n\t\tlegendEl.style.position = \"absolute\";\r\n\t\tlegendEl.style.top = \"4px\";\r\n\t\tlegendEl.style.left = 0;\r\n\t\tlegendEl.style.textAlign = legendAlign;\r\n\t\tlegendEl.style.width = \"100%\";\r\n\t\tlegendEl.style.color = legendColor;\r\n\t\tlegendEl.innerHTML = legend;\r\n\t}\r\n\r\n\tonRendered(function(){\r\n\r\n\t\t//handle custom element needed if formatter is to be included in printed/downloaded output\r\n\t\tif(!(cell instanceof CellComponent)){\r\n\t\t\tvar holderEl = document.createElement(\"div\");\r\n\t\t\tholderEl.style.position = \"absolute\";\r\n\t\t\tholderEl.style.top = \"4px\";\r\n\t\t\tholderEl.style.bottom = \"4px\";\r\n\t\t\tholderEl.style.left = \"4px\";\r\n\t\t\tholderEl.style.right = \"4px\";\r\n\r\n\t\t\telement.appendChild(holderEl);\r\n\r\n\t\t\telement = holderEl;\r\n\t\t}\r\n\r\n\t\telement.appendChild(barEl);\r\n\r\n\t\tif(legend){\r\n\t\t\telement.appendChild(legendEl);\r\n\t\t}\r\n\t});\r\n\r\n\treturn \"\";\r\n};","export default function(cell, formatterParams, onRendered){\r\n\tcell.getElement().style.backgroundColor = this.sanitizeHTML(cell.getValue());\r\n\treturn \"\";\r\n};","export default function(cell, formatterParams, onRendered){\r\n\treturn '';\r\n};","export default function(cell, formatterParams, onRendered){\r\n\treturn '';\r\n};","export default function(cell, formatterParams, onRendered){\r\n\treturn this.table.rowManager.activeRows.indexOf(cell.getRow()._getSelf()) + 1;\r\n};","export default function(cell, formatterParams, onRendered){\r\n\tcell.getElement().classList.add(\"tabulator-row-handle\");\r\n\treturn \"
\";\r\n};","export default function(cell, formatterParams, onRendered){\r\n\tvar open = false,\r\n\tel = document.createElement(\"div\"),\r\n\tconfig = cell.getRow()._row.modules.responsiveLayout;\r\n\r\n\tel.classList.add(\"tabulator-responsive-collapse-toggle\");\r\n\tel.innerHTML = \"+-\";\r\n\r\n\tcell.getElement().classList.add(\"tabulator-row-handle\");\r\n\r\n\tfunction toggleList(isOpen){\r\n\t\tvar collapseEl = config.element;\r\n\r\n\t\tconfig.open = isOpen;\r\n\r\n\t\tif(collapseEl){\r\n\r\n\t\t\tif(config.open){\r\n\t\t\t\tel.classList.add(\"open\");\r\n\t\t\t\tcollapseEl.style.display = '';\r\n\t\t\t}else{\r\n\t\t\t\tel.classList.remove(\"open\");\r\n\t\t\t\tcollapseEl.style.display = 'none';\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tel.addEventListener(\"click\", function(e){\r\n\t\te.stopImmediatePropagation();\r\n\t\ttoggleList(!config.open);\r\n\t});\r\n\r\n\ttoggleList(config.open);\r\n\r\n\treturn el;\r\n};","export default function(cell, formatterParams, onRendered){\r\n\tvar checkbox = document.createElement(\"input\");\r\n\r\n\tcheckbox.type = 'checkbox';\r\n\r\n\tif(this.table.modExists(\"selectRow\", true)){\r\n\r\n\t\tcheckbox.addEventListener(\"click\", (e) => {\r\n\t\t\te.stopPropagation();\r\n\t\t});\r\n\r\n\t\tif(typeof cell.getRow == 'function'){\r\n\t\t\tvar row = cell.getRow();\r\n\r\n\t\t\tif(row instanceof RowComponent){\r\n\r\n\t\t\t\tcheckbox.addEventListener(\"change\", (e) => {\r\n\t\t\t\t\trow.toggleSelect();\r\n\t\t\t\t});\r\n\r\n\t\t\t\tcheckbox.checked = row.isSelected && row.isSelected();\r\n\t\t\t\tthis.table.modules.selectRow.registerRowSelectCheckbox(row, checkbox);\r\n\t\t\t}else{\r\n\t\t\t\tcheckbox = \"\";\r\n\t\t\t}\r\n\t\t}else {\r\n\t\t\tcheckbox.addEventListener(\"change\", (e) => {\r\n\t\t\t\tif(this.table.modules.selectRow.selectedRows.length){\r\n\t\t\t\t\tthis.table.deselectRow();\r\n\t\t\t\t}else {\r\n\t\t\t\t\tthis.table.selectRow(formatterParams.rowRange);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tthis.table.modules.selectRow.registerHeaderSelectCheckbox(checkbox);\r\n\t\t}\r\n\t}\r\n\r\n\treturn checkbox;\r\n};","import plaintext from './formatters/plaintext.js';\r\nimport html from './formatters/html.js';\r\nimport textarea from './formatters/textarea.js';\r\nimport money from './formatters/money.js';\r\nimport link from './formatters/link.js';\r\nimport image from './formatters/image.js';\r\nimport tickCross from './formatters/tickCross.js';\r\nimport datetime from './formatters/datetime.js';\r\nimport datetimediff from './formatters/datetimediff.js';\r\nimport lookup from './formatters/lookup.js';\r\nimport star from './formatters/star.js';\r\nimport traffic from './formatters/traffic.js';\r\nimport progress from './formatters/progress.js';\r\nimport color from './formatters/color.js';\r\nimport buttonTick from './formatters/buttonTick.js';\r\nimport buttonCross from './formatters/buttonCross.js';\r\nimport rownum from './formatters/rownum.js';\r\nimport handle from './formatters/handle.js';\r\nimport responsiveCollapse from './formatters/responsiveCollapse.js';\r\nimport rowSelection from './formatters/rowSelection.js';\r\n\r\nexport default {\r\n\tplaintext:plaintext,\r\n\thtml:html,\r\n\ttextarea:textarea,\r\n\tmoney:money,\r\n\tlink:link,\r\n\timage:image,\r\n\ttickCross:tickCross,\r\n\tdatetime:datetime,\r\n\tdatetimediff:datetimediff,\r\n\tlookup:lookup,\r\n\tstar:star,\r\n\ttraffic:traffic,\r\n\tprogress:progress,\r\n\tcolor:color,\r\n\tbuttonTick:buttonTick,\r\n\tbuttonCross:buttonCross,\r\n\trownum:rownum,\r\n\thandle:handle,\r\n\tresponsiveCollapse:responsiveCollapse,\r\n\trowSelection:rowSelection,\r\n};","import Module from '../../core/Module.js';\r\n\r\nimport defaultFormatters from './defaults/formatters.js';\r\n\r\nclass Format extends Module{\r\n\r\n\t//initialize column formatter\r\n\tinitializeColumn(column){\r\n\t\tcolumn.modules.format = this.lookupFormatter(column, \"\");\r\n\r\n\t\tif(typeof column.definition.formatterPrint !== \"undefined\"){\r\n\t\t\tcolumn.modules.format.print = this.lookupFormatter(column, \"Print\");\r\n\t\t}\r\n\r\n\t\tif(typeof column.definition.formatterClipboard !== \"undefined\"){\r\n\t\t\tcolumn.modules.format.clipboard = this.lookupFormatter(column, \"Clipboard\");\r\n\t\t}\r\n\r\n\t\tif(typeof column.definition.formatterHtmlOutput !== \"undefined\"){\r\n\t\t\tcolumn.modules.format.htmlOutput = this.lookupFormatter(column, \"HtmlOutput\");\r\n\t\t}\r\n\t}\r\n\r\n\tlookupFormatter(column, type){\r\n\t\tvar config = {params:column.definition[\"formatter\" + type + \"Params\"] || {}},\r\n\t\tformatter = column.definition[\"formatter\" + type];\r\n\r\n\t\t//set column formatter\r\n\t\tswitch(typeof formatter){\r\n\t\t\tcase \"string\":\r\n\t\t\tif(Format.formatters[formatter]){\r\n\t\t\t\tconfig.formatter = Format.formatters[formatter];\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Formatter Error - No such formatter found: \", formatter);\r\n\t\t\t\tconfig.formatter = Format.formatters.plaintext;\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"function\":\r\n\t\t\tconfig.formatter = formatter;\r\n\t\t\tbreak;\r\n\r\n\t\t\tdefault:\r\n\t\t\tconfig.formatter = Format.formatters.plaintext;\r\n\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\treturn config;\r\n\t}\r\n\r\n\tcellRendered(cell){\r\n\t\tif(cell.modules.format && cell.modules.format.renderedCallback && !cell.modules.format.rendered){\r\n\t\t\tcell.modules.format.renderedCallback();\r\n\t\t\tcell.modules.format.rendered = true;\r\n\t\t}\r\n\t}\r\n\r\n\t//return a formatted value for a cell\r\n\tformatValue(cell){\r\n\t\tvar component = cell.getComponent(),\r\n\t\tparams = typeof cell.column.modules.format.params === \"function\" ? cell.column.modules.format.params(component) : cell.column.modules.format.params;\r\n\r\n\t\tfunction onRendered(callback){\r\n\t\t\tif(!cell.modules.format){\r\n\t\t\t\tcell.modules.format = {};\r\n\t\t\t}\r\n\r\n\t\t\tcell.modules.format.renderedCallback = callback;\r\n\t\t\tcell.modules.format.rendered = false;\r\n\t\t}\r\n\r\n\t\treturn cell.column.modules.format.formatter.call(this, component, params, onRendered);\r\n\t}\r\n\r\n\tformatExportValue(cell, type){\r\n\t\tvar formatter = cell.column.modules.format[type],\r\n\t\tparams;\r\n\r\n\t\tif(formatter){\r\n\t\t\tparams = typeof formatter.params === \"function\" ? formatter.params(component) : formatter.params;\r\n\r\n\t\t\tfunction onRendered(callback){\r\n\t\t\t\tif(!cell.modules.format){\r\n\t\t\t\t\tcell.modules.format = {};\r\n\t\t\t\t}\r\n\r\n\t\t\t\tcell.modules.format.renderedCallback = callback;\r\n\t\t\t\tcell.modules.format.rendered = false;\r\n\t\t\t}\r\n\r\n\t\t\treturn formatter.formatter.call(this, cell.getComponent(), params, onRendered);\r\n\r\n\t\t}else{\r\n\t\t\treturn this.formatValue(cell);\r\n\t\t}\r\n\t}\r\n\r\n\tsanitizeHTML(value){\r\n\t\tif(value){\r\n\t\t\tvar entityMap = {\r\n\t\t\t\t'&': '&',\r\n\t\t\t\t'<': '<',\r\n\t\t\t\t'>': '>',\r\n\t\t\t\t'\"': '"',\r\n\t\t\t\t\"'\": ''',\r\n\t\t\t\t'/': '/',\r\n\t\t\t\t'`': '`',\r\n\t\t\t\t'=': '='\r\n\t\t\t};\r\n\r\n\t\t\treturn String(value).replace(/[&<>\"'`=\\/]/g, function (s) {\r\n\t\t\t\treturn entityMap[s];\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\treturn value;\r\n\t\t}\r\n\t}\r\n\r\n\temptyToSpace(value){\r\n\t\treturn value === null || typeof value === \"undefined\" || value === \"\" ? \" \" : value;\r\n\t}\r\n\r\n\t//get formatter for cell\r\n\tgetFormatter(formatter){\r\n\t\tvar formatter;\r\n\r\n\t\tswitch(typeof formatter){\r\n\t\t\tcase \"string\":\r\n\t\t\tif(Format.formatters[formatter]){\r\n\t\t\t\tformatter = Format.formatters[formatter]\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Formatter Error - No such formatter found: \", formatter);\r\n\t\t\t\tformatter = Format.formatters.plaintext;\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"function\":\r\n\t\t\tformatter = formatter;\r\n\t\t\tbreak;\r\n\r\n\t\t\tdefault:\r\n\t\t\tformatter = Format.formatters.plaintext;\r\n\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\treturn formatter;\r\n\t}\r\n}\r\n\r\nFormat.moduleName = \"format\";\r\n\r\n//load defaults\r\nFormat.formatters = defaultFormatters;\r\n\r\nexport default Format;","import Module from '../../core/Module.js';\r\n\r\nclass FrozenColumns extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.leftColumns = [];\r\n\t\tthis.rightColumns = [];\r\n\t\tthis.leftMargin = 0;\r\n\t\tthis.rightMargin = 0;\r\n\t\tthis.rightPadding = 0;\r\n\t\tthis.initializationMode = \"left\";\r\n\t\tthis.active = false;\r\n\t\tthis.scrollEndTimer = false;\r\n\t}\r\n\r\n\t//reset initial state\r\n\treset(){\r\n\t\tthis.initializationMode = \"left\";\r\n\t\tthis.leftColumns = [];\r\n\t\tthis.rightColumns = [];\r\n\t\tthis.leftMargin = 0;\r\n\t\tthis.rightMargin = 0;\r\n\t\tthis.rightMargin = 0;\r\n\t\tthis.active = false;\r\n\r\n\t\tthis.table.columnManager.headersElement.style.marginLeft = 0;\r\n\t\tthis.table.columnManager.element.style.paddingRight = 0;\r\n\t}\r\n\r\n\t//initialize specific column\r\n\tinitializeColumn(column){\r\n\t\tvar config = {margin:0, edge:false};\r\n\r\n\t\tif(!column.isGroup){\r\n\r\n\t\t\tif(this.frozenCheck(column)){\r\n\r\n\t\t\t\tconfig.position = this.initializationMode;\r\n\r\n\t\t\t\tif(this.initializationMode == \"left\"){\r\n\t\t\t\t\tthis.leftColumns.push(column);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tthis.rightColumns.unshift(column);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.active = true;\r\n\r\n\t\t\t\tcolumn.modules.frozen = config;\r\n\t\t\t}else{\r\n\t\t\t\tthis.initializationMode = \"right\";\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tfrozenCheck(column){\r\n\t\tvar frozen = false;\r\n\r\n\t\tif(column.parent.isGroup && column.definition.frozen){\r\n\t\t\tconsole.warn(\"Frozen Column Error - Parent column group must be frozen, not individual columns or sub column groups\");\r\n\t\t}\r\n\r\n\t\tif(column.parent.isGroup){\r\n\t\t\treturn this.frozenCheck(column.parent);\r\n\t\t}else{\r\n\t\t\treturn column.definition.frozen;\r\n\t\t}\r\n\r\n\t\treturn frozen;\r\n\t}\r\n\r\n\t//quick layout to smooth horizontal scrolling\r\n\tscrollHorizontal(){\r\n\t\tvar rows;\r\n\r\n\t\tif(this.active){\r\n\t\t\tclearTimeout(this.scrollEndTimer);\r\n\r\n\t\t\t//layout all rows after scroll is complete\r\n\t\t\tthis.scrollEndTimer = setTimeout(() => {\r\n\t\t\t\tthis.layout();\r\n\t\t\t}, 100);\r\n\r\n\t\t\trows = this.table.rowManager.getVisibleRows();\r\n\r\n\t\t\tthis.calcMargins();\r\n\r\n\t\t\tthis.layoutColumnPosition();\r\n\r\n\t\t\tthis.layoutCalcRows();\r\n\r\n\t\t\trows.forEach((row) => {\r\n\t\t\t\tif(row.type === \"row\"){\r\n\t\t\t\t\tthis.layoutRow(row);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tthis.table.rowManager.tableElement.style.marginRight = this.rightMargin;\r\n\t\t}\r\n\t}\r\n\r\n\t//calculate margins for rows\r\n\tcalcMargins(){\r\n\t\tthis.leftMargin = this._calcSpace(this.leftColumns, this.leftColumns.length) + \"px\";\r\n\t\tthis.table.columnManager.headersElement.style.marginLeft = this.leftMargin;\r\n\r\n\t\tthis.rightMargin = this._calcSpace(this.rightColumns, this.rightColumns.length) + \"px\";\r\n\t\tthis.table.columnManager.element.style.paddingRight = this.rightMargin;\r\n\r\n\t\t//calculate right frozen columns\r\n\t\tthis.rightPadding = this.table.rowManager.element.clientWidth + this.table.columnManager.scrollLeft;\r\n\t}\r\n\r\n\t//layout calculation rows\r\n\tlayoutCalcRows(){\r\n\t\tif(this.table.modExists(\"columnCalcs\")){\r\n\t\t\tif(this.table.modules.columnCalcs.topInitialized && this.table.modules.columnCalcs.topRow){\r\n\t\t\t\tthis.layoutRow(this.table.modules.columnCalcs.topRow);\r\n\t\t\t}\r\n\t\t\tif(this.table.modules.columnCalcs.botInitialized && this.table.modules.columnCalcs.botRow){\r\n\t\t\t\tthis.layoutRow(this.table.modules.columnCalcs.botRow);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//calculate column positions and layout headers\r\n\tlayoutColumnPosition(allCells){\r\n\r\n\t\tvar leftParents = [];\r\n\r\n\t\tthis.leftColumns.forEach((column, i) => {\r\n\t\t\tcolumn.modules.frozen.margin = (this._calcSpace(this.leftColumns, i) + this.table.columnManager.scrollLeft) + \"px\";\r\n\r\n\t\t\tif(i == this.leftColumns.length - 1){\r\n\t\t\t\tcolumn.modules.frozen.edge = true;\r\n\t\t\t}else{\r\n\t\t\t\tcolumn.modules.frozen.edge = false;\r\n\t\t\t}\r\n\r\n\t\t\tif(column.parent.isGroup){\r\n\t\t\t\tvar parentEl = this.getColGroupParentElement(column);\r\n\t\t\t\tif(!leftParents.includes(parentEl)){\r\n\t\t\t\t\tthis.layoutElement(parentEl, column);\r\n\t\t\t\t\tleftParents.push(parentEl);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(column.modules.frozen.edge){\r\n\t\t\t\t\tparentEl.classList.add(\"tabulator-frozen-\" + column.modules.frozen.position);\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tthis.layoutElement(column.getElement(), column);\r\n\t\t\t}\r\n\r\n\t\t\tif(allCells){\r\n\t\t\t\tcolumn.cells.forEach((cell) => {\r\n\t\t\t\t\tthis.layoutElement(cell.getElement(true), column);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tthis.rightColumns.forEach((column, i) => {\r\n\t\t\tcolumn.modules.frozen.margin = (this.rightPadding - this._calcSpace(this.rightColumns, i + 1)) + \"px\";\r\n\r\n\t\t\tif(i == this.rightColumns.length - 1){\r\n\t\t\t\tcolumn.modules.frozen.edge = true;\r\n\t\t\t}else{\r\n\t\t\t\tcolumn.modules.frozen.edge = false;\r\n\t\t\t}\r\n\r\n\r\n\t\t\tif(column.parent.isGroup){\r\n\t\t\t\tthis.layoutElement(this.getColGroupParentElement(column), column);\r\n\t\t\t}else{\r\n\t\t\t\tthis.layoutElement(column.getElement(), column);\r\n\t\t\t}\r\n\r\n\t\t\tif(allCells){\r\n\t\t\t\tcolumn.cells.forEach((cell) => {\r\n\t\t\t\t\tthis.layoutElement(cell.getElement(true), column);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tgetColGroupParentElement(column){\r\n\t\treturn column.parent.isGroup ? this.getColGroupParentElement(column.parent) : column.getElement();\r\n\t}\r\n\r\n\t//layout columns appropropriatly\r\n\tlayout(){\r\n\t\tvar rightMargin = 0;\r\n\r\n\t\tif(this.active){\r\n\r\n\t\t\t//calculate row padding\r\n\t\t\tthis.calcMargins();\r\n\r\n\t\t\tthis.table.rowManager.getDisplayRows().forEach((row) =>{\r\n\t\t\t\tif(row.type === \"row\"){\r\n\t\t\t\t\tthis.layoutRow(row);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tthis.layoutCalcRows();\r\n\r\n\t\t\t//calculate left columns\r\n\t\t\tthis.layoutColumnPosition(true);\r\n\r\n\t\t\tthis.table.rowManager.tableElement.style.marginRight = this.rightMargin;\r\n\t\t}\r\n\t}\r\n\r\n\tlayoutRow(row){\r\n\t\tvar rowEl = row.getElement();\r\n\r\n\t\trowEl.style.paddingLeft = this.leftMargin;\r\n\r\n\t\tthis.leftColumns.forEach((column) => {\r\n\t\t\tvar cell = row.getCell(column);\r\n\r\n\t\t\tif(cell){\r\n\t\t\t\tthis.layoutElement(cell.getElement(true), column);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tthis.rightColumns.forEach((column) => {\r\n\t\t\tvar cell = row.getCell(column);\r\n\r\n\t\t\tif(cell){\r\n\t\t\t\tthis.layoutElement(cell.getElement(true), column);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tlayoutElement(element, column){\r\n\r\n\t\tif(column.modules.frozen){\r\n\t\t\telement.style.position = \"absolute\";\r\n\t\t\telement.style.left = column.modules.frozen.margin;\r\n\r\n\t\t\telement.classList.add(\"tabulator-frozen\");\r\n\r\n\t\t\tif(column.modules.frozen.edge){\r\n\t\t\t\telement.classList.add(\"tabulator-frozen-\" + column.modules.frozen.position);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t_calcSpace(columns, index){\r\n\t\tvar width = 0;\r\n\r\n\t\tfor (let i = 0; i < index; i++){\r\n\t\t\tif(columns[i].visible){\r\n\t\t\t\twidth += columns[i].getWidth();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn width;\r\n\t}\r\n}\r\n\r\nFrozenColumns.moduleName = \"frozenColumns\";\r\n\r\nexport default FrozenColumns;","import Module from '../../core/Module.js';\r\n\r\nclass FrozenRows extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.topElement = document.createElement(\"div\");\r\n\t\tthis.rows = [];\r\n\t\tthis.displayIndex = 0; //index in display pipeline\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tthis.rows = [];\r\n\r\n\t\tthis.topElement.classList.add(\"tabulator-frozen-rows-holder\");\r\n\r\n\t\t// this.table.columnManager.element.append(this.topElement);\r\n\t\tthis.table.columnManager.getElement().insertBefore(this.topElement, this.table.columnManager.headersElement.nextSibling);\r\n\t}\r\n\r\n\tsetDisplayIndex(index){\r\n\t\tthis.displayIndex = index;\r\n\t}\r\n\r\n\tgetDisplayIndex(){\r\n\t\treturn this.displayIndex;\r\n\t}\r\n\r\n\tisFrozen(){\r\n\t\treturn !!this.rows.length;\r\n\t}\r\n\r\n\t//filter frozen rows out of display data\r\n\tgetRows(rows){\r\n\t\tvar self = this,\r\n\t\tfrozen = [],\r\n\t\toutput = rows.slice(0);\r\n\r\n\t\tthis.rows.forEach(function(row){\r\n\t\t\tvar index = output.indexOf(row);\r\n\r\n\t\t\tif(index > -1){\r\n\t\t\t\toutput.splice(index, 1);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tfreezeRow(row){\r\n\t\tif(!row.modules.frozen){\r\n\t\t\trow.modules.frozen = true;\r\n\t\t\tthis.topElement.appendChild(row.getElement());\r\n\t\t\trow.initialize();\r\n\t\t\trow.normalizeHeight();\r\n\t\t\tthis.table.rowManager.adjustTableSize();\r\n\r\n\t\t\tthis.rows.push(row);\r\n\r\n\t\t\tthis.table.rowManager.refreshActiveData(\"display\");\r\n\r\n\t\t\tthis.styleRows();\r\n\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Freeze Error - Row is already frozen\");\r\n\t\t}\r\n\t}\r\n\r\n\tunfreezeRow(row){\r\n\t\tvar index = this.rows.indexOf(row);\r\n\r\n\t\tif(row.modules.frozen){\r\n\r\n\t\t\trow.modules.frozen = false;\r\n\r\n\t\t\tthis.detachRow(row);\r\n\r\n\t\t\tthis.table.rowManager.adjustTableSize();\r\n\r\n\t\t\tthis.table.rowManager.refreshActiveData(\"display\");\r\n\r\n\t\t\tif(this.rows.length){\r\n\t\t\t\tthis.styleRows();\r\n\t\t\t}\r\n\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Freeze Error - Row is already unfrozen\");\r\n\t\t}\r\n\t}\r\n\r\n\tdetachRow(row){\r\n\t\tvar index = this.rows.indexOf(row);\r\n\r\n\t\tif(index > -1){\r\n\t\t\tvar rowEl = row.getElement();\r\n\t\t\trowEl.parentNode.removeChild(rowEl);\r\n\r\n\t\t\tthis.rows.splice(index, 1);\r\n\t\t}\r\n\t}\r\n\r\n\tstyleRows(row){\r\n\t\tthis.rows.forEach((row, i) => {\r\n\t\t\tthis.table.rowManager.styleRow(row, i);\r\n\t\t});\r\n\t}\r\n}\r\n\r\nFrozenRows.moduleName = \"frozenRows\";\r\n\r\nexport default FrozenRows;","import Helpers from '../../core/Helpers.js';\r\n\r\n//Group functions\r\nclass Group{\r\n\r\n\tconstructor(groupManager, parent, level, key, field, generator, oldGroup){\r\n\t\tthis.groupManager = groupManager;\r\n\t\tthis.parent = parent;\r\n\t\tthis.key = key;\r\n\t\tthis.level = level;\r\n\t\tthis.field = field;\r\n\t\tthis.hasSubGroups = level < (groupManager.groupIDLookups.length - 1);\r\n\t\tthis.addRow = this.hasSubGroups ? this._addRowToGroup : this._addRow;\r\n\t\tthis.type = \"group\"; //type of element\r\n\t\tthis.old = oldGroup;\r\n\t\tthis.rows = [];\r\n\t\tthis.groups = [];\r\n\t\tthis.groupList = [];\r\n\t\tthis.generator = generator;\r\n\t\tthis.elementContents = false;\r\n\t\tthis.height = 0;\r\n\t\tthis.outerHeight = 0;\r\n\t\tthis.initialized = false;\r\n\t\tthis.calcs = {};\r\n\t\tthis.initialized = false;\r\n\t\tthis.modules = {};\r\n\t\tthis.arrowElement = false;\r\n\r\n\t\tthis.visible = oldGroup ? oldGroup.visible : (typeof groupManager.startOpen[level] !== \"undefined\" ? groupManager.startOpen[level] : groupManager.startOpen[0]);\r\n\r\n\t\tthis.component = null;\r\n\r\n\t\tthis.createElements();\r\n\t\tthis.addBindings();\r\n\r\n\t\tthis.createValueGroups();\r\n\t}\r\n\r\n\twipe(){\r\n\t\tif(this.groupList.length){\r\n\t\t\tthis.groupList.forEach(function(group){\r\n\t\t\t\tgroup.wipe();\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tthis.element = false;\r\n\t\t\tthis.arrowElement = false;\r\n\t\t\tthis.elementContents = false;\r\n\t\t}\r\n\t}\r\n\r\n\tcreateElements(){\r\n\t\tvar arrow = document.createElement(\"div\");\r\n\t\tarrow.classList.add(\"tabulator-arrow\");\r\n\r\n\t\tthis.element = document.createElement(\"div\");\r\n\t\tthis.element.classList.add(\"tabulator-row\");\r\n\t\tthis.element.classList.add(\"tabulator-group\");\r\n\t\tthis.element.classList.add(\"tabulator-group-level-\" + this.level);\r\n\t\tthis.element.setAttribute(\"role\", \"rowgroup\");\r\n\r\n\t\tthis.arrowElement = document.createElement(\"div\");\r\n\t\tthis.arrowElement.classList.add(\"tabulator-group-toggle\");\r\n\t\tthis.arrowElement.appendChild(arrow);\r\n\r\n\t\t//setup movable rows\r\n\t\tif(this.groupManager.table.options.movableRows !== false && this.groupManager.table.modExists(\"moveRow\")){\r\n\t\t\tthis.groupManager.table.modules.moveRow.initializeGroupHeader(this);\r\n\t\t}\r\n\t}\r\n\r\n\tcreateValueGroups(){\r\n\t\tvar level = this.level + 1;\r\n\t\tif(this.groupManager.allowedValues && this.groupManager.allowedValues[level]){\r\n\t\t\tthis.groupManager.allowedValues[level].forEach((value) => {\r\n\t\t\t\tthis._createGroup(value, level);\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\taddBindings(){\r\n\t\tvar dblTap,\ttapHold, tap, toggleElement;\r\n\r\n\t\t//handle group click events\r\n\t\tif (this.groupManager.table.options.groupClick){\r\n\t\t\tthis.element.addEventListener(\"click\", (e) => {\r\n\t\t\t\tthis.groupManager.table.options.groupClick.call(this.groupManager.table, e, this.getComponent());\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif (this.groupManager.table.options.groupDblClick){\r\n\t\t\tthis.element.addEventListener(\"dblclick\", (e) => {\r\n\t\t\t\tthis.groupManager.table.options.groupDblClick.call(this.groupManager.table, e, this.getComponent());\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif (this.groupManager.table.options.groupContext){\r\n\t\t\tthis.element.addEventListener(\"contextmenu\", (e) => {\r\n\t\t\t\tthis.groupManager.table.options.groupContext.call(this.groupManager.table, e, this.getComponent());\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif ((this.groupManager.table.options.groupContextMenu || this.groupManager.table.options.groupClickMenu) && this.groupManager.table.modExists(\"menu\")){\r\n\t\t\tthis.groupManager.table.modules.menu.initializeGroup.call(this.groupManager.table.modules.menu, this);\r\n\t\t}\r\n\r\n\t\tif (this.groupManager.table.options.groupTap){\r\n\t\t\ttap = false;\r\n\r\n\t\t\tthis.element.addEventListener(\"touchstart\", (e) => {\r\n\t\t\t\ttap = true;\r\n\t\t\t}, {passive: true});\r\n\r\n\t\t\tthis.element.addEventListener(\"touchend\", (e) => {\r\n\t\t\t\tif(tap){\r\n\t\t\t\t\tthis.groupManager.table.options.groupTap(e, this.getComponent());\r\n\t\t\t\t}\r\n\r\n\t\t\t\ttap = false;\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif (this.groupManager.table.options.groupDblTap){\r\n\t\t\tdblTap = null;\r\n\r\n\t\t\tthis.element.addEventListener(\"touchend\", (e) => {\r\n\t\t\t\tif(dblTap){\r\n\t\t\t\t\tclearTimeout(dblTap);\r\n\t\t\t\t\tdblTap = null;\r\n\r\n\t\t\t\t\tthis.groupManager.table.options.groupDblTap(e, this.getComponent());\r\n\t\t\t\t}else{\r\n\r\n\t\t\t\t\tdblTap = setTimeout(() => {\r\n\t\t\t\t\t\tclearTimeout(dblTap);\r\n\t\t\t\t\t\tdblTap = null;\r\n\t\t\t\t\t}, 300);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif (this.groupManager.table.options.groupTapHold){\r\n\t\t\ttapHold = null;\r\n\r\n\t\t\tthis.element.addEventListener(\"touchstart\", (e) => {\r\n\t\t\t\tclearTimeout(tapHold);\r\n\r\n\t\t\t\ttapHold = setTimeout(() => {\r\n\t\t\t\t\tclearTimeout(tapHold);\r\n\t\t\t\t\ttapHold = null;\r\n\t\t\t\t\ttap = false;\r\n\t\t\t\t\tthis.groupManager.table.options.groupTapHold(e, this.getComponent());\r\n\t\t\t\t}, 1000);\r\n\r\n\t\t\t}, {passive: true});\r\n\r\n\t\t\tthis.element.addEventListener(\"touchend\", (e) => {\r\n\t\t\t\tclearTimeout(tapHold);\r\n\t\t\t\ttapHold = null;\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif(this.groupManager.table.options.groupToggleElement){\r\n\t\t\ttoggleElement = this.groupManager.table.options.groupToggleElement == \"arrow\" ? this.arrowElement : this.element;\r\n\r\n\t\t\ttoggleElement.addEventListener(\"click\", (e) => {\r\n\t\t\t\te.stopPropagation();\r\n\t\t\t\te.stopImmediatePropagation();\r\n\t\t\t\tthis.toggleVisibility();\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\t_createGroup(groupID, level){\r\n\t\tvar groupKey = level + \"_\" + groupID;\r\n\t\tvar group = new Group(this.groupManager, this, level, groupID, this.groupManager.groupIDLookups[level].field, this.groupManager.headerGenerator[level] || this.groupManager.headerGenerator[0], this.old ? this.old.groups[groupKey] : false);\r\n\r\n\t\tthis.groups[groupKey] = group;\r\n\t\tthis.groupList.push(group);\r\n\t}\r\n\r\n\t_addRowToGroup(row){\r\n\r\n\t\tvar level = this.level + 1;\r\n\r\n\t\tif(this.hasSubGroups){\r\n\t\t\tvar groupID = this.groupManager.groupIDLookups[level].func(row.getData()),\r\n\t\t\tgroupKey = level + \"_\" + groupID;\r\n\r\n\t\t\tif(this.groupManager.allowedValues && this.groupManager.allowedValues[level]){\r\n\t\t\t\tif(this.groups[groupKey]){\r\n\t\t\t\t\tthis.groups[groupKey].addRow(row);\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tif(!this.groups[groupKey]){\r\n\t\t\t\t\tthis._createGroup(groupID, level);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.groups[groupKey].addRow(row);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t_addRow(row){\r\n\t\tthis.rows.push(row);\r\n\t\trow.modules.group = this;\r\n\t}\r\n\r\n\tinsertRow(row, to, after){\r\n\t\tvar data = this.conformRowData({});\r\n\r\n\t\trow.updateData(data);\r\n\r\n\t\tvar toIndex = this.rows.indexOf(to);\r\n\r\n\t\tif(toIndex > -1){\r\n\t\t\tif(after){\r\n\t\t\t\tthis.rows.splice(toIndex+1, 0, row);\r\n\t\t\t}else{\r\n\t\t\t\tthis.rows.splice(toIndex, 0, row);\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tif(after){\r\n\t\t\t\tthis.rows.push(row);\r\n\t\t\t}else{\r\n\t\t\t\tthis.rows.unshift(row);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\trow.modules.group = this;\r\n\r\n\t\tthis.generateGroupHeaderContents();\r\n\r\n\t\tif(this.groupManager.table.modExists(\"columnCalcs\") && this.groupManager.table.options.columnCalcs != \"table\"){\r\n\t\t\tthis.groupManager.table.modules.columnCalcs.recalcGroup(this);\r\n\t\t}\r\n\r\n\t\tthis.groupManager.updateGroupRows(true);\r\n\t}\r\n\r\n\tscrollHeader(left){\r\n\t\tthis.arrowElement.style.marginLeft = left;\r\n\r\n\t\tthis.groupList.forEach(function(child){\r\n\t\t\tchild.scrollHeader(left);\r\n\t\t});\r\n\t}\r\n\r\n\tgetRowIndex(row){}\r\n\r\n\t//update row data to match grouping contraints\r\n\tconformRowData(data){\r\n\t\tif(this.field){\r\n\t\t\tdata[this.field] = this.key;\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Data Conforming Error - Cannot conform row data to match new group as groupBy is a function\");\r\n\t\t}\r\n\r\n\t\tif(this.parent){\r\n\t\t\tdata = this.parent.conformRowData(data);\r\n\t\t}\r\n\r\n\t\treturn data;\r\n\t}\r\n\r\n\tremoveRow(row){\r\n\t\tvar index = this.rows.indexOf(row);\r\n\t\tvar el = row.getElement();\r\n\r\n\r\n\t\tif(index > -1){\r\n\t\t\tthis.rows.splice(index, 1);\r\n\t\t}\r\n\r\n\t\tif(!this.groupManager.table.options.groupValues && !this.rows.length){\r\n\t\t\tif(this.parent){\r\n\t\t\t\tthis.parent.removeGroup(this);\r\n\t\t\t}else{\r\n\t\t\t\tthis.groupManager.removeGroup(this);\r\n\t\t\t}\r\n\r\n\t\t\tthis.groupManager.updateGroupRows(true);\r\n\t\t}else{\r\n\r\n\t\t\tif(el.parentNode){\r\n\t\t\t\tel.parentNode.removeChild(el);\r\n\t\t\t}\r\n\r\n\t\t\tthis.generateGroupHeaderContents();\r\n\r\n\t\t\tif(this.groupManager.table.modExists(\"columnCalcs\") && this.groupManager.table.options.columnCalcs != \"table\"){\r\n\t\t\t\tthis.groupManager.table.modules.columnCalcs.recalcGroup(this);\r\n\t\t\t}\r\n\r\n\t\t}\r\n\t}\r\n\r\n\tremoveGroup(group){\r\n\t\tvar groupKey = group.level + \"_\" + group.key,\r\n\t\tindex;\r\n\r\n\t\tif(this.groups[groupKey]){\r\n\t\t\tdelete this.groups[groupKey];\r\n\r\n\t\t\tindex = this.groupList.indexOf(group);\r\n\r\n\t\t\tif(index > -1){\r\n\t\t\t\tthis.groupList.splice(index, 1);\r\n\t\t\t}\r\n\r\n\t\t\tif(!this.groupList.length){\r\n\t\t\t\tif(this.parent){\r\n\t\t\t\t\tthis.parent.removeGroup(this);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tthis.groupManager.removeGroup(this);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tgetHeadersAndRows(noCalc){\r\n\t\tvar output = [];\r\n\r\n\t\toutput.push(this);\r\n\r\n\t\tthis._visSet();\r\n\r\n\t\tif(this.visible){\r\n\t\t\tif(this.groupList.length){\r\n\t\t\t\tthis.groupList.forEach(function(group){\r\n\t\t\t\t\toutput = output.concat(group.getHeadersAndRows(noCalc));\r\n\t\t\t\t});\r\n\r\n\t\t\t}else{\r\n\t\t\t\tif(!noCalc && this.groupManager.table.options.columnCalcs != \"table\" && this.groupManager.table.modExists(\"columnCalcs\") && this.groupManager.table.modules.columnCalcs.hasTopCalcs()){\r\n\t\t\t\t\tif(this.calcs.top){\r\n\t\t\t\t\t\tthis.calcs.top.detachElement();\r\n\t\t\t\t\t\tthis.calcs.top.deleteCells();\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tthis.calcs.top = this.groupManager.table.modules.columnCalcs.generateTopRow(this.rows);\r\n\t\t\t\t\toutput.push(this.calcs.top);\r\n\t\t\t\t}\r\n\r\n\t\t\t\toutput = output.concat(this.rows);\r\n\r\n\t\t\t\tif(!noCalc && this.groupManager.table.options.columnCalcs != \"table\" && this.groupManager.table.modExists(\"columnCalcs\") && this.groupManager.table.modules.columnCalcs.hasBottomCalcs()){\r\n\t\t\t\t\tif(this.calcs.bottom){\r\n\t\t\t\t\t\tthis.calcs.bottom.detachElement();\r\n\t\t\t\t\t\tthis.calcs.bottom.deleteCells();\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tthis.calcs.bottom = this.groupManager.table.modules.columnCalcs.generateBottomRow(this.rows);\r\n\t\t\t\t\toutput.push(this.calcs.bottom);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tif(!this.groupList.length && this.groupManager.table.options.columnCalcs != \"table\"){\r\n\r\n\t\t\t\tif(this.groupManager.table.modExists(\"columnCalcs\")){\r\n\r\n\t\t\t\t\tif(!noCalc && this.groupManager.table.modules.columnCalcs.hasTopCalcs()){\r\n\t\t\t\t\t\tif(this.calcs.top){\r\n\t\t\t\t\t\t\tthis.calcs.top.detachElement();\r\n\t\t\t\t\t\t\tthis.calcs.top.deleteCells();\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif(this.groupManager.table.options.groupClosedShowCalcs){\r\n\t\t\t\t\t\t\tthis.calcs.top = this.groupManager.table.modules.columnCalcs.generateTopRow(this.rows);\r\n\t\t\t\t\t\t\toutput.push(this.calcs.top);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif(!noCalc && this.groupManager.table.modules.columnCalcs.hasBottomCalcs()){\r\n\t\t\t\t\t\tif(this.calcs.bottom){\r\n\t\t\t\t\t\t\tthis.calcs.bottom.detachElement();\r\n\t\t\t\t\t\t\tthis.calcs.bottom.deleteCells();\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif(this.groupManager.table.options.groupClosedShowCalcs){\r\n\t\t\t\t\t\t\tthis.calcs.bottom = this.groupManager.table.modules.columnCalcs.generateBottomRow(this.rows);\r\n\t\t\t\t\t\t\toutput.push(this.calcs.bottom);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tgetData(visible, transform){\r\n\t\tvar output = [];\r\n\r\n\t\tthis._visSet();\r\n\r\n\t\tif(!visible || (visible && this.visible)){\r\n\t\t\tthis.rows.forEach((row) => {\r\n\t\t\t\toutput.push(row.getData(transform || \"data\"));\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tgetRowCount(){\r\n\t\tvar count = 0;\r\n\r\n\t\tif(this.groupList.length){\r\n\t\t\tthis.groupList.forEach((group) => {\r\n\t\t\t\tcount += group.getRowCount();\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tcount = this.rows.length;\r\n\t\t}\r\n\t\treturn count;\r\n\t}\r\n\r\n\ttoggleVisibility(){\r\n\t\tif(this.visible){\r\n\t\t\tthis.hide();\r\n\t\t}else{\r\n\t\t\tthis.show();\r\n\t\t}\r\n\t}\r\n\r\n\thide(){\r\n\t\tthis.visible = false;\r\n\r\n\t\tif(this.groupManager.table.rowManager.getRenderMode() == \"classic\" && !this.groupManager.table.options.pagination){\r\n\r\n\t\t\tthis.element.classList.remove(\"tabulator-group-visible\");\r\n\r\n\t\t\tif(this.groupList.length){\r\n\t\t\t\tthis.groupList.forEach((group) => {\r\n\r\n\t\t\t\t\tvar rows = group.getHeadersAndRows();\r\n\r\n\t\t\t\t\trows.forEach((row) => {\r\n\t\t\t\t\t\trow.detachElement();\r\n\t\t\t\t\t});\r\n\t\t\t\t});\r\n\r\n\t\t\t}else{\r\n\t\t\t\tthis.rows.forEach((row) => {\r\n\t\t\t\t\tvar rowEl = row.getElement();\r\n\t\t\t\t\trowEl.parentNode.removeChild(rowEl);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\tthis.groupManager.table.rowManager.setDisplayRows(this.groupManager.updateGroupRows(), this.groupManager.getDisplayIndex());\r\n\r\n\t\t\tthis.groupManager.table.rowManager.checkClassicModeGroupHeaderWidth();\r\n\r\n\t\t}else{\r\n\t\t\tthis.groupManager.updateGroupRows(true);\r\n\t\t}\r\n\r\n\t\tthis.groupManager.table.options.groupVisibilityChanged.call(this.table, this.getComponent(), false);\r\n\t}\r\n\r\n\tshow(){\r\n\t\tthis.visible = true;\r\n\r\n\t\tif(this.groupManager.table.rowManager.getRenderMode() == \"classic\" && !this.groupManager.table.options.pagination){\r\n\r\n\t\t\tthis.element.classList.add(\"tabulator-group-visible\");\r\n\r\n\t\t\tvar prev = this.getElement();\r\n\r\n\t\t\tif(this.groupList.length){\r\n\t\t\t\tthis.groupList.forEach((group) => {\r\n\t\t\t\t\tvar rows = group.getHeadersAndRows();\r\n\r\n\t\t\t\t\trows.forEach((row) => {\r\n\t\t\t\t\t\tvar rowEl = row.getElement();\r\n\t\t\t\t\t\tprev.parentNode.insertBefore(rowEl, prev.nextSibling);\r\n\t\t\t\t\t\trow.initialize();\r\n\t\t\t\t\t\tprev = rowEl;\r\n\t\t\t\t\t});\r\n\t\t\t\t});\r\n\r\n\t\t\t}else{\r\n\t\t\t\tthis.rows.forEach((row) => {\r\n\t\t\t\t\tvar rowEl = row.getElement();\r\n\t\t\t\t\tprev.parentNode.insertBefore(rowEl, prev.nextSibling);\r\n\t\t\t\t\trow.initialize();\r\n\t\t\t\t\tprev = rowEl;\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\tthis.groupManager.table.rowManager.setDisplayRows(this.groupManager.updateGroupRows(), this.groupManager.getDisplayIndex());\r\n\r\n\t\t\tthis.groupManager.table.rowManager.checkClassicModeGroupHeaderWidth();\r\n\t\t}else{\r\n\t\t\tthis.groupManager.updateGroupRows(true);\r\n\t\t}\r\n\r\n\t\tthis.groupManager.table.options.groupVisibilityChanged.call(this.table, this.getComponent(), true);\r\n\t}\r\n\r\n\t_visSet(){\r\n\t\tvar data = [];\r\n\r\n\t\tif(typeof this.visible == \"function\"){\r\n\r\n\t\t\tthis.rows.forEach(function(row){\r\n\t\t\t\tdata.push(row.getData());\r\n\t\t\t});\r\n\r\n\t\t\tthis.visible = this.visible(this.key, this.getRowCount(), data, this.getComponent());\r\n\t\t}\r\n\t}\r\n\r\n\tgetRowGroup(row){\r\n\t\tvar match = false;\r\n\t\tif(this.groupList.length){\r\n\t\t\tthis.groupList.forEach(function(group){\r\n\t\t\t\tvar result = group.getRowGroup(row);\r\n\r\n\t\t\t\tif(result){\r\n\t\t\t\t\tmatch = result;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tif(this.rows.find(function(item){\r\n\t\t\t\treturn item === row;\r\n\t\t\t})){\r\n\t\t\t\tmatch = this;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn match;\r\n\t}\r\n\r\n\tgetSubGroups(component){\r\n\t\tvar output = [];\r\n\r\n\t\tthis.groupList.forEach(function(child){\r\n\t\t\toutput.push(component ? child.getComponent() : child);\r\n\t\t});\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tgetRows(compoment){\r\n\t\tvar output = [];\r\n\r\n\t\tthis.rows.forEach(function(row){\r\n\t\t\toutput.push(compoment ? row.getComponent() : row);\r\n\t\t});\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tgenerateGroupHeaderContents(){\r\n\t\tvar data = [];\r\n\r\n\t\tthis.rows.forEach(function(row){\r\n\t\t\tdata.push(row.getData());\r\n\t\t});\r\n\r\n\t\tthis.elementContents = this.generator(this.key, this.getRowCount(), data, this.getComponent());\r\n\r\n\t\twhile(this.element.firstChild) this.element.removeChild(this.element.firstChild);\r\n\r\n\t\tif(typeof this.elementContents === \"string\"){\r\n\t\t\tthis.element.innerHTML = this.elementContents;\r\n\t\t}else{\r\n\t\t\tthis.element.appendChild(this.elementContents);\r\n\t\t}\r\n\r\n\t\tthis.element.insertBefore(this.arrowElement, this.element.firstChild);\r\n\t}\r\n\r\n\tgetPath(path = []) {\r\n\t\tpath.unshift(this.key);\r\n\t\tif(this.parent) {\r\n\t\t\tthis.parent.getPath(path);\r\n\t\t}\r\n\t\treturn path;\r\n\t}\r\n\r\n\t////////////// Standard Row Functions //////////////\r\n\r\n\tgetElement(){\r\n\t\tthis.addBindingsd = false;\r\n\r\n\t\tthis._visSet();\r\n\r\n\t\tif(this.visible){\r\n\t\t\tthis.element.classList.add(\"tabulator-group-visible\");\r\n\t\t}else{\r\n\t\t\tthis.element.classList.remove(\"tabulator-group-visible\");\r\n\t\t}\r\n\r\n\t\tfor(var i = 0; i < this.element.childNodes.length; ++i){\r\n\t\t\tthis.element.childNodes[i].parentNode.removeChild(this.element.childNodes[i]);\r\n\t\t}\r\n\r\n\t\tthis.generateGroupHeaderContents();\r\n\r\n\t\t// this.addBindings();\r\n\r\n\t\treturn this.element;\r\n\t}\r\n\r\n\tdetachElement(){\r\n\t\tif (this.element && this.element.parentNode){\r\n\t\t\tthis.element.parentNode.removeChild(this.element);\r\n\t\t}\r\n\t}\r\n\r\n\t//normalize the height of elements in the row\r\n\tnormalizeHeight(){\r\n\t\tthis.setHeight(this.element.clientHeight);\r\n\t}\r\n\r\n\tinitialize(force){\r\n\t\tif(!this.initialized || force){\r\n\t\t\tthis.normalizeHeight();\r\n\t\t\tthis.initialized = true;\r\n\t\t}\r\n\t}\r\n\r\n\treinitialize(){\r\n\t\tthis.initialized = false;\r\n\t\tthis.height = 0;\r\n\r\n\t\tif(Helpers.elVisible(this.element)){\r\n\t\t\tthis.initialize(true);\r\n\t\t}\r\n\t}\r\n\r\n\tsetHeight(height){\r\n\t\tif(this.height != height){\r\n\t\t\tthis.height = height;\r\n\t\t\tthis.outerHeight = this.element.offsetHeight;\r\n\t\t}\r\n\t}\r\n\r\n\t//return rows outer height\r\n\tgetHeight(){\r\n\t\treturn this.outerHeight;\r\n\t}\r\n\r\n\tgetGroup(){\r\n\t\treturn this;\r\n\t}\r\n\r\n\treinitializeHeight(){}\r\n\r\n\tcalcHeight(){}\r\n\r\n\tsetCellHeight(){}\r\n\r\n\tclearCellHeight(){}\r\n\r\n\t//////////////// Object Generation /////////////////\r\n\tgetComponent(){\r\n\t\tif(!this.component){\r\n\t\t\tthis.component = new GroupComponent(this);\r\n\t\t}\r\n\r\n\t\treturn this.component;\r\n\t}\r\n}\r\n\r\nexport default Group;","import Module from '../../core/Module.js';\r\n\r\nimport GroupComponent from './GroupComponent.js';\r\nimport Group from './Group.js';\r\n\r\nclass GroupRows extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.groupIDLookups = false; //enable table grouping and set field to group by\r\n\t\tthis.startOpen = [function(){return false;}]; //starting state of group\r\n\t\tthis.headerGenerator = [function(){return \"\";}];\r\n\t\tthis.groupList = []; //ordered list of groups\r\n\t\tthis.allowedValues = false;\r\n\t\tthis.groups = {}; //hold row groups\r\n\t\tthis.displayIndex = 0; //index in display pipeline\r\n\t}\r\n\r\n\t//initialize group configuration\r\n\tinitialize(){\r\n\t\tvar groupBy = this.table.options.groupBy,\r\n\t\tstartOpen = this.table.options.groupStartOpen,\r\n\t\tgroupHeader = this.table.options.groupHeader;\r\n\r\n\t\tthis.allowedValues = this.table.options.groupValues;\r\n\r\n\t\tif(Array.isArray(groupBy) && Array.isArray(groupHeader) && groupBy.length > groupHeader.length){\r\n\t\t\tconsole.warn(\"Error creating group headers, groupHeader array is shorter than groupBy array\");\r\n\t\t}\r\n\r\n\t\tthis.headerGenerator = [function(){return \"\";}];\r\n\t\tthis.startOpen = [function(){return false;}]; //starting state of group\r\n\r\n\t\tthis.table.modules.localize.bind(\"groups|item\", (langValue, lang) => {\r\n\t\t\tthis.headerGenerator[0] = (value, count, data) => { //header layout function\r\n\t\t\t\treturn (typeof value === \"undefined\" ? \"\" : value) + \"(\" + count + \" \" + ((count === 1) ? langValue : lang.groups.items) + \")\";\r\n\t\t\t};\r\n\t\t});\r\n\r\n\t\tthis.groupIDLookups = [];\r\n\r\n\t\tif(Array.isArray(groupBy) || groupBy){\r\n\t\t\tif(this.table.modExists(\"columnCalcs\") && this.table.options.columnCalcs != \"table\" && this.table.options.columnCalcs != \"both\"){\r\n\t\t\t\tthis.table.modules.columnCalcs.removeCalcs();\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tif(this.table.modExists(\"columnCalcs\") && this.table.options.columnCalcs != \"group\"){\r\n\r\n\t\t\t\tvar cols = this.table.columnManager.getRealColumns();\r\n\r\n\t\t\t\tcols.forEach((col) => {\r\n\t\t\t\t\tif(col.definition.topCalc){\r\n\t\t\t\t\t\tthis.table.modules.columnCalcs.initializeTopRow();\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif(col.definition.bottomCalc){\r\n\t\t\t\t\t\tthis.table.modules.columnCalcs.initializeBottomRow();\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(!Array.isArray(groupBy)){\r\n\t\t\tgroupBy = [groupBy];\r\n\t\t}\r\n\r\n\t\tgroupBy.forEach((group, i) => {\r\n\t\t\tvar lookupFunc, column;\r\n\r\n\t\t\tif(typeof group == \"function\"){\r\n\t\t\t\tlookupFunc = group;\r\n\t\t\t}else{\r\n\t\t\t\tcolumn = this.table.columnManager.getColumnByField(group);\r\n\r\n\t\t\t\tif(column){\r\n\t\t\t\t\tlookupFunc = function(data){\r\n\t\t\t\t\t\treturn column.getFieldValue(data);\r\n\t\t\t\t\t};\r\n\t\t\t\t}else{\r\n\t\t\t\t\tlookupFunc = function(data){\r\n\t\t\t\t\t\treturn data[group];\r\n\t\t\t\t\t};\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tthis.groupIDLookups.push({\r\n\t\t\t\tfield: typeof group === \"function\" ? false : group,\r\n\t\t\t\tfunc:lookupFunc,\r\n\t\t\t\tvalues:this.allowedValues ? this.allowedValues[i] : false,\r\n\t\t\t});\r\n\t\t});\r\n\r\n\t\tif(startOpen){\r\n\t\t\tif(!Array.isArray(startOpen)){\r\n\t\t\t\tstartOpen = [startOpen];\r\n\t\t\t}\r\n\r\n\t\t\tstartOpen.forEach((level) => {\r\n\t\t\t\tlevel = typeof level == \"function\" ? level : function(){return true;};\r\n\t\t\t});\r\n\r\n\t\t\tthis.startOpen = startOpen;\r\n\t\t}\r\n\r\n\t\tif(groupHeader){\r\n\t\t\tthis.headerGenerator = Array.isArray(groupHeader) ? groupHeader : [groupHeader];\r\n\t\t}\r\n\r\n\t\tthis.initialized = true;\r\n\t}\r\n\r\n\tsetDisplayIndex(index){\r\n\t\tthis.displayIndex = index;\r\n\t}\r\n\r\n\tgetDisplayIndex(){\r\n\t\treturn this.displayIndex;\r\n\t}\r\n\r\n\t//return appropriate rows with group headers\r\n\tgetRows(rows){\r\n\t\tif(this.groupIDLookups.length){\r\n\r\n\t\t\tthis.table.options.dataGrouping.call(this.table);\r\n\r\n\t\t\tthis.generateGroups(rows);\r\n\r\n\t\t\tif(this.table.options.dataGrouped){\r\n\t\t\t\tthis.table.options.dataGrouped.call(this.table, this.getGroups(true));\r\n\t\t\t}\r\n\r\n\t\t\treturn this.updateGroupRows();\r\n\r\n\t\t}else{\r\n\t\t\treturn rows.slice(0);\r\n\t\t}\r\n\t}\r\n\r\n\tgetGroups(compoment){\r\n\t\tvar groupComponents = [];\r\n\r\n\t\tthis.groupList.forEach(function(group){\r\n\t\t\tgroupComponents.push(compoment ? group.getComponent() : group);\r\n\t\t});\r\n\r\n\t\treturn groupComponents;\r\n\t}\r\n\r\n\tgetChildGroups(group){\r\n\t\tvar groupComponents = [];\r\n\r\n\t\tif(!group){\r\n\t\t\tgroup = this;\r\n\t\t}\r\n\r\n\t\tgroup.groupList.forEach((child) => {\r\n\t\t\tif(child.groupList.length){\r\n\t\t\t\tgroupComponents = groupComponents.concat(this.getChildGroups(child));\r\n\t\t\t}else{\r\n\t\t\t\tgroupComponents.push(child);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn groupComponents;\r\n\t}\r\n\r\n\twipe(){\r\n\t\tthis.groupList.forEach(function(group){\r\n\t\t\tgroup.wipe();\r\n\t\t});\r\n\t}\r\n\r\n\tpullGroupListData(groupList) {\r\n\t\tvar groupListData = [];\r\n\r\n\t\tgroupList.forEach((group) => {\r\n\t\t\tvar groupHeader = {};\r\n\t\t\tgroupHeader.level = 0;\r\n\t\t\tgroupHeader.rowCount = 0;\r\n\t\t\tgroupHeader.headerContent = \"\";\r\n\t\t\tvar childData = [];\r\n\r\n\t\t\tif (group.hasSubGroups) {\r\n\t\t\t\tchildData = this.pullGroupListData(group.groupList);\r\n\r\n\t\t\t\tgroupHeader.level = group.level;\r\n\t\t\t\tgroupHeader.rowCount = childData.length - group.groupList.length; // data length minus number of sub-headers\r\n\t\t\t\tgroupHeader.headerContent = group.generator(group.key, groupHeader.rowCount, group.rows, group);\r\n\r\n\t\t\t\tgroupListData.push(groupHeader);\r\n\t\t\t\tgroupListData = groupListData.concat(childData);\r\n\t\t\t}\r\n\r\n\t\t\telse {\r\n\t\t\t\tgroupHeader.level = group.level;\r\n\t\t\t\tgroupHeader.headerContent = group.generator(group.key, group.rows.length, group.rows, group);\r\n\t\t\t\tgroupHeader.rowCount = group.getRows().length;\r\n\r\n\t\t\t\tgroupListData.push(groupHeader);\r\n\r\n\t\t\t\tgroup.getRows().forEach((row) => {\r\n\t\t\t\t\tgroupListData.push(row.getData(\"data\"));\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn groupListData\r\n\t}\r\n\r\n\tgetGroupedData(){\r\n\r\n\t\treturn this.pullGroupListData(this.groupList);\r\n\t}\r\n\r\n\tgetRowGroup(row){\r\n\t\tvar match = false;\r\n\r\n\t\tthis.groupList.forEach((group) => {\r\n\t\t\tvar result = group.getRowGroup(row);\r\n\r\n\t\t\tif(result){\r\n\t\t\t\tmatch = result;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn match;\r\n\t}\r\n\r\n\tcountGroups(){\r\n\t\treturn this.groupList.length;\r\n\t}\r\n\r\n\tgenerateGroups(rows){\r\n\t\tvar oldGroups = this.groups;\r\n\r\n\t\tthis.groups = {};\r\n\t\tthis.groupList =[];\r\n\r\n\t\tif(this.allowedValues && this.allowedValues[0]){\r\n\t\t\tthis.allowedValues[0].forEach((value) => {\r\n\t\t\t\tthis.createGroup(value, 0, oldGroups);\r\n\t\t\t});\r\n\r\n\t\t\trows.forEach((row) => {\r\n\t\t\t\tthis.assignRowToExistingGroup(row, oldGroups);\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\trows.forEach((row) => {\r\n\t\t\t\tthis.assignRowToGroup(row, oldGroups);\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tcreateGroup(groupID, level, oldGroups){\r\n\t\tvar groupKey = level + \"_\" + groupID,\r\n\t\tgroup;\r\n\r\n\t\toldGroups = oldGroups || [];\r\n\r\n\t\tgroup = new Group(this, false, level, groupID, this.groupIDLookups[0].field, this.headerGenerator[0], oldGroups[groupKey]);\r\n\r\n\t\tthis.groups[groupKey] = group;\r\n\t\tthis.groupList.push(group);\r\n\t}\r\n\r\n\tassignRowToExistingGroup(row, oldGroups){\r\n\t\tvar groupID = this.groupIDLookups[0].func(row.getData()),\r\n\t\tgroupKey = \"0_\" + groupID;\r\n\r\n\t\tif(this.groups[groupKey]){\r\n\t\t\tthis.groups[groupKey].addRow(row);\r\n\t\t}\r\n\t}\r\n\r\n\tassignRowToGroup(row, oldGroups){\r\n\t\tvar groupID = this.groupIDLookups[0].func(row.getData()),\r\n\t\tnewGroupNeeded = !this.groups[\"0_\" + groupID];\r\n\r\n\t\tif(newGroupNeeded){\r\n\t\t\tthis.createGroup(groupID, 0, oldGroups);\r\n\t\t}\r\n\r\n\t\tthis.groups[\"0_\" + groupID].addRow(row);\r\n\r\n\t\treturn !newGroupNeeded;\r\n\t}\r\n\r\n\treassignRowToGroup(row){\r\n\t\tvar oldRowGroup = row.getGroup(),\r\n\t\t\toldGroupPath = oldRowGroup.getPath(),\r\n\t\t\tnewGroupPath = this.getExpectedPath(row),\r\n\t\t\tsamePath = true;\r\n\r\n\t\t// figure out if new group path is the same as old group path\r\n\t\tvar samePath = (oldGroupPath.length == newGroupPath.length) && oldGroupPath.every((element, index) => {\r\n\t\t\treturn element === newGroupPath[index];\r\n\t\t});\r\n\r\n\t\t// refresh if they new path and old path aren't the same (aka the row's groupings have changed)\r\n\t\tif(!samePath) {\r\n\t\t\toldRowGroup.removeRow(row);\r\n\t\t\tthis.assignRowToGroup(row, this.groups);\r\n\t\t\tthis.table.rowManager.refreshActiveData(\"group\", false, true);\r\n\t\t}\r\n\t}\r\n\r\n\tgetExpectedPath(row) {\r\n\t\tvar groupPath = [], rowData = row.getData();\r\n\r\n\t\tthis.groupIDLookups.forEach((groupId) => {\r\n\t\t\tgroupPath.push(groupId.func(rowData));\r\n\t\t});\r\n\r\n\t\treturn groupPath;\r\n\t}\r\n\r\n\tupdateGroupRows(force){\r\n\t\tvar output = [],\r\n\t\toldRowCount;\r\n\r\n\t\tthis.groupList.forEach((group) => {\r\n\t\t\toutput = output.concat(group.getHeadersAndRows());\r\n\t\t});\r\n\r\n\t\t//force update of table display\r\n\t\tif(force){\r\n\t\t\tvar displayIndex = this.table.rowManager.setDisplayRows(output, this.getDisplayIndex());\r\n\r\n\t\t\tif(displayIndex !== true){\r\n\t\t\t\tthis.setDisplayIndex(displayIndex);\r\n\t\t\t}\r\n\r\n\t\t\tthis.table.rowManager.refreshActiveData(\"group\", true, true);\r\n\t\t}\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tscrollHeaders(left){\r\n\t\tif(this.table.options.virtualDomHoz){\r\n\t\t\tleft -= this.table.vdomHoz.vDomPadLeft;\r\n\t\t}\r\n\r\n\t\tleft = left + \"px\";\r\n\r\n\t\tthis.groupList.forEach((group) => {\r\n\t\t\tgroup.scrollHeader(left);\r\n\t\t});\r\n\t}\r\n\r\n\tremoveGroup(group){\r\n\t\tvar groupKey = group.level + \"_\" + group.key,\r\n\t\tindex;\r\n\r\n\t\tif(this.groups[groupKey]){\r\n\t\t\tdelete this.groups[groupKey];\r\n\r\n\t\t\tindex = this.groupList.indexOf(group);\r\n\r\n\t\t\tif(index > -1){\r\n\t\t\t\tthis.groupList.splice(index, 1);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n\r\nGroupRows.moduleName = \"groupRows\";\r\n\r\nexport default GroupRows;","export default {\r\n\tcellEdit: function(action){\r\n\t\taction.component.setValueProcessData(action.data.oldValue);\r\n\t},\r\n\r\n\trowAdd: function(action){\r\n\t\taction.component.deleteActual();\r\n\t},\r\n\r\n\trowDelete: function(action){\r\n\t\tvar newRow = this.table.rowManager.addRowActual(action.data.data, action.data.pos, action.data.index);\r\n\r\n\t\tif(this.table.options.groupBy && this.table.modExists(\"groupRows\")){\r\n\t\t\tthis.table.modules.groupRows.updateGroupRows(true);\r\n\t\t}\r\n\r\n\t\tthis._rebindRow(action.component, newRow);\r\n\t},\r\n\r\n\trowMove: function(action){\r\n\t\tthis.table.rowManager.moveRowActual(action.component, this.table.rowManager.rows[action.data.posFrom], !action.data.after);\r\n\t\tthis.table.rowManager.redraw();\r\n\t},\r\n};","export default {\r\n\tcellEdit: function(action){\r\n\t\taction.component.setValueProcessData(action.data.newValue);\r\n\t},\r\n\r\n\trowAdd: function(action){\r\n\t\tvar newRow = this.table.rowManager.addRowActual(action.data.data, action.data.pos, action.data.index);\r\n\r\n\t\tif(this.table.options.groupBy && this.table.modExists(\"groupRows\")){\r\n\t\t\tthis.table.modules.groupRows.updateGroupRows(true);\r\n\t\t}\r\n\r\n\t\tthis._rebindRow(action.component, newRow);\r\n\t},\r\n\r\n\trowDelete:function(action){\r\n\t\taction.component.deleteActual();\r\n\t},\r\n\r\n\trowMove: function(action){\r\n\t\tthis.table.rowManager.moveRowActual(action.component, this.table.rowManager.rows[action.data.posTo], action.data.after);\r\n\t\tthis.table.rowManager.redraw();\r\n\t},\r\n};","import Module from '../../core/Module.js';\r\n\r\nimport defaultUndoers from './defaults/undoers.js';\r\nimport defaultRedoers from './defaults/redoers.js';\r\n\r\nclass History extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.history = [];\r\n\t\tthis.index = -1;\r\n\t}\r\n\r\n\tclear(){\r\n\t\tthis.history = [];\r\n\t\tthis.index = -1;\r\n\t}\r\n\r\n\taction(type, component, data){\r\n\t\tthis.history = this.history.slice(0, this.index + 1);\r\n\r\n\t\tthis.history.push({\r\n\t\t\ttype:type,\r\n\t\t\tcomponent:component,\r\n\t\t\tdata:data,\r\n\t\t});\r\n\r\n\t\tthis.index ++;\r\n\t}\r\n\r\n\tgetHistoryUndoSize(){\r\n\t\treturn this.index + 1;\r\n\t}\r\n\r\n\tgetHistoryRedoSize(){\r\n\t\treturn this.history.length - (this.index + 1);\r\n\t}\r\n\r\n\tclearComponentHistory(component){\r\n\t\tvar index = this.history.findIndex(function(item){\r\n\t\t\treturn item.component === component;\r\n\t\t});\r\n\r\n\t\tif(index > -1){\r\n\t\t\tthis.history.splice(index, 1);\r\n\t \t\tif(index <= this.index){\r\n\t \t\t\tthis.index--;\r\n\t \t\t}\r\n\r\n\t \t\tthis.clearComponentHistory(component);\r\n\t\t}\r\n\t}\r\n\r\n\tundo(){\r\n\t\tif(this.index > -1){\r\n\t\t\tlet action = this.history[this.index];\r\n\r\n\t\t\tHistory.undoers[action.type].call(this, action);\r\n\r\n\t\t\tthis.index--;\r\n\r\n\t\t\tthis.table.options.historyUndo.call(this.table, action.type, action.component.getComponent(), action.data);\r\n\r\n\t\t\treturn true;\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"History Undo Error - No more history to undo\");\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\tredo(){\r\n\t\tif(this.history.length-1 > this.index){\r\n\r\n\t\t\tthis.index++;\r\n\r\n\t\t\tlet action = this.history[this.index];\r\n\r\n\t\t\tHistory.redoers[action.type].call(this, action);\r\n\r\n\t\t\tthis.table.options.historyRedo.call(this.table, action.type, action.component.getComponent(), action.data);\r\n\r\n\t\t\treturn true;\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"History Redo Error - No more history to redo\");\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\t//rebind rows to new element after deletion\r\n\t_rebindRow(oldRow, newRow){\r\n\t\tthis.history.forEach(function(action){\r\n\t\t\tif(action.component instanceof Row){\r\n\t\t\t\tif(action.component === oldRow){\r\n\t\t\t\t\taction.component = newRow;\r\n\t\t\t\t}\r\n\t\t\t}else if(action.component instanceof Cell){\r\n\t\t\t\tif(action.component.row === oldRow){\r\n\t\t\t\t\tvar field = action.component.column.getField();\r\n\r\n\t\t\t\t\tif(field){\r\n\t\t\t\t\t\taction.component = newRow.getCell(field);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n}\r\n\r\nHistory.moduleName = \"history\";\r\n\r\n//load defaults\r\nHistory.undoers = defaultUndoers;\r\nHistory.redoers = defaultRedoers;\r\n\r\nexport default History;","import Module from '../../core/Module.js';\r\n\r\nclass HtmlTableImport extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.fieldIndex = [];\r\n\t\tthis.hasIndex = false;\r\n\t}\r\n\r\n\tparseTable(){\r\n\t\tvar element = this.table.element,\r\n\t\toptions = this.table.options,\r\n\t\tcolumns = options.columns,\r\n\t\theaders = element.getElementsByTagName(\"th\"),\r\n\t\trows = element.getElementsByTagName(\"tbody\")[0],\r\n\t\tdata = [],\r\n\t\tnewTable;\r\n\r\n\t\tthis.hasIndex = false;\r\n\r\n\t\tthis.table.options.htmlImporting.call(this.table);\r\n\r\n\t\trows = rows ? rows.getElementsByTagName(\"tr\") : [];\r\n\r\n\t\t//check for tablator inline options\r\n\t\tthis._extractOptions(element, options);\r\n\r\n\t\tif(headers.length){\r\n\t\t\tthis._extractHeaders(headers, rows);\r\n\t\t}else{\r\n\t\t\tthis._generateBlankHeaders(headers, rows);\r\n\t\t}\r\n\r\n\t\t//iterate through table rows and build data set\r\n\t\tfor(var index = 0; index < rows.length; index++){\r\n\t\t\tvar row = rows[index],\r\n\t\t\tcells = row.getElementsByTagName(\"td\"),\r\n\t\t\titem = {};\r\n\r\n\t\t\t//create index if the dont exist in table\r\n\t\t\tif(!this.hasIndex){\r\n\t\t\t\titem[options.index] = index;\r\n\t\t\t}\r\n\r\n\t\t\tfor(var i = 0; i < cells.length; i++){\r\n\t\t\t\tvar cell = cells[i];\r\n\t\t\t\tif(typeof this.fieldIndex[i] !== \"undefined\"){\r\n\t\t\t\t\titem[this.fieldIndex[i]] = cell.innerHTML;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t//add row data to item\r\n\t\t\tdata.push(item);\r\n\t\t}\r\n\r\n\t\t//create new element\r\n\t\tvar newElement = document.createElement(\"div\");\r\n\r\n\t\t//transfer attributes to new element\r\n\t\tvar attributes = element.attributes;\r\n\r\n\t\t// loop through attributes and apply them on div\r\n\r\n\t\tfor(var i in attributes){\r\n\t\t\tif(typeof attributes[i] == \"object\"){\r\n\t\t\t\tnewElement.setAttribute(attributes[i].name, attributes[i].value);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// replace table with div element\r\n\t\telement.parentNode.replaceChild(newElement, element);\r\n\r\n\t\toptions.data = data;\r\n\r\n\t\tthis.table.options.htmlImported.call(this.table);\r\n\r\n\t\tthis.table.element = newElement;\r\n\t}\r\n\r\n\t//extract tabulator attribute options\r\n\t_extractOptions(element, options, defaultOptions){\r\n\t\tvar attributes = element.attributes;\r\n\t\tvar optionsArr = defaultOptions ? Object.assign([], defaultOptions) : Object.keys(options);\r\n\t\tvar optionsList = {};\r\n\r\n\t\toptionsArr.forEach((item) => {\r\n\t\t\toptionsList[item.toLowerCase()] = item;\r\n\t\t});\r\n\r\n\t\tfor(var index in attributes){\r\n\t\t\tvar attrib = attributes[index];\r\n\t\t\tvar name;\r\n\r\n\t\t\tif(attrib && typeof attrib == \"object\" && attrib.name && attrib.name.indexOf(\"tabulator-\") === 0){\r\n\t\t\t\tname = attrib.name.replace(\"tabulator-\", \"\");\r\n\r\n\t\t\t\tif(typeof optionsList[name] !== \"undefined\"){\r\n\t\t\t\t\toptions[optionsList[name]] = this._attribValue(attrib.value);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//get value of attribute\r\n\t_attribValue(value){\r\n\t\tif(value === \"true\"){\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\tif(value === \"false\"){\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\treturn value;\r\n\t}\r\n\r\n\t//find column if it has already been defined\r\n\t_findCol(title){\r\n\t\tvar match = this.table.options.columns.find((column) => {\r\n\t\t\treturn column.title === title;\r\n\t\t});\r\n\r\n\t\treturn match || false;\r\n\t}\r\n\r\n\t//extract column from headers\r\n\t_extractHeaders(headers, rows){\r\n\t\tfor(var index = 0; index < headers.length; index++){\r\n\t\t\tvar header = headers[index],\r\n\t\t\texists = false,\r\n\t\t\tcol = this._findCol(header.textContent),\r\n\t\t\twidth, attributes;\r\n\r\n\t\t\tif(col){\r\n\t\t\t\texists = true;\r\n\t\t\t}else{\r\n\t\t\t\tcol = {title:header.textContent.trim()};\r\n\t\t\t}\r\n\r\n\t\t\tif(!col.field) {\r\n\t\t\t\tcol.field = header.textContent.trim().toLowerCase().replace(\" \", \"_\");\r\n\t\t\t}\r\n\r\n\t\t\twidth = header.getAttribute(\"width\");\r\n\r\n\t\t\tif(width && !col.width)\t{\r\n\t\t\t\tcol.width = width;\r\n\t\t\t}\r\n\r\n\t\t\t//check for tablator inline options\r\n\t\t\tattributes = header.attributes;\r\n\r\n\t\t\t// //check for tablator inline options\r\n\t\t\tthis._extractOptions(header, col, Column.prototype.defaultOptionList);\r\n\r\n\t\t\tthis.fieldIndex[index] = col.field;\r\n\r\n\t\t\tif(col.field == this.table.options.index){\r\n\t\t\t\tthis.hasIndex = true;\r\n\t\t\t}\r\n\r\n\t\t\tif(!exists){\r\n\t\t\t\tthis.table.options.columns.push(col);\r\n\t\t\t}\r\n\r\n\t\t}\r\n\t}\r\n\r\n\t//generate blank headers\r\n\t_generateBlankHeaders(headers, rows){\r\n\t\tfor(var index = 0; index < headers.length; index++){\r\n\t\t\tvar header = headers[index],\r\n\t\t\tcol = {title:\"\", field:\"col\" + index};\r\n\r\n\t\t\tthis.fieldIndex[index] = col.field;\r\n\r\n\t\t\tvar width = header.getAttribute(\"width\");\r\n\r\n\t\t\tif(width){\r\n\t\t\t\tcol.width = width;\r\n\t\t\t}\r\n\r\n\t\t\tthis.table.options.columns.push(col);\r\n\t\t}\r\n\t}\r\n}\r\n\r\nHtmlTableImport.moduleName = \"htmlTableImport\";\r\n\r\nexport default HtmlTableImport;","export default {\r\n\tnavPrev:\"shift + 9\",\r\n\tnavNext:9,\r\n\tnavUp:38,\r\n\tnavDown:40,\r\n\tscrollPageUp:33,\r\n\tscrollPageDown:34,\r\n\tscrollToStart:36,\r\n\tscrollToEnd:35,\r\n\tundo:\"ctrl + 90\",\r\n\tredo:\"ctrl + 89\",\r\n\tcopyToClipboard:\"ctrl + 67\",\r\n};","export default {\r\n\tkeyBlock:function(e){\r\n\t\te.stopPropagation();\r\n\t\te.preventDefault();\r\n\t},\r\n\tscrollPageUp:function(e){\r\n\t\tvar rowManager = this.table.rowManager,\r\n\t\tnewPos = rowManager.scrollTop - rowManager.height,\r\n\t\tscrollMax = rowManager.element.scrollHeight;\r\n\r\n\t\te.preventDefault();\r\n\r\n\t\tif(rowManager.displayRowsCount){\r\n\t\t\tif(newPos >= 0){\r\n\t\t\t\trowManager.element.scrollTop = newPos;\r\n\t\t\t}else{\r\n\t\t\t\trowManager.scrollToRow(rowManager.getDisplayRows()[0]);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.table.element.focus();\r\n\t},\r\n\tscrollPageDown:function(e){\r\n\t\tvar rowManager = this.table.rowManager,\r\n\t\tnewPos = rowManager.scrollTop + rowManager.height,\r\n\t\tscrollMax = rowManager.element.scrollHeight;\r\n\r\n\t\te.preventDefault();\r\n\r\n\t\tif(rowManager.displayRowsCount){\r\n\t\t\tif(newPos <= scrollMax){\r\n\t\t\t\trowManager.element.scrollTop = newPos;\r\n\t\t\t}else{\r\n\t\t\t\trowManager.scrollToRow(rowManager.getDisplayRows()[rowManager.displayRowsCount - 1]);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.table.element.focus();\r\n\r\n\t},\r\n\tscrollToStart:function(e){\r\n\t\tvar rowManager = this.table.rowManager;\r\n\r\n\t\te.preventDefault();\r\n\r\n\t\tif(rowManager.displayRowsCount){\r\n\t\t\trowManager.scrollToRow(rowManager.getDisplayRows()[0]);\r\n\t\t}\r\n\r\n\t\tthis.table.element.focus();\r\n\t},\r\n\tscrollToEnd:function(e){\r\n\t\tvar rowManager = this.table.rowManager;\r\n\r\n\t\te.preventDefault();\r\n\r\n\t\tif(rowManager.displayRowsCount){\r\n\t\t\trowManager.scrollToRow(rowManager.getDisplayRows()[rowManager.displayRowsCount - 1]);\r\n\t\t}\r\n\r\n\t\tthis.table.element.focus();\r\n\t},\r\n\tnavPrev:function(e){\r\n\t\tvar cell = false;\r\n\r\n\t\tif(this.table.modExists(\"edit\")){\r\n\t\t\tcell = this.table.modules.edit.currentCell;\r\n\r\n\t\t\tif(cell){\r\n\t\t\t\te.preventDefault();\r\n\t\t\t\tcell.nav().prev();\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\tnavNext:function(e){\r\n\t\tvar cell = false;\r\n\t\tvar newRow = this.table.options.tabEndNewRow;\r\n\t\tvar nav;\r\n\r\n\t\tif(this.table.modExists(\"edit\")){\r\n\t\t\tcell = this.table.modules.edit.currentCell;\r\n\r\n\t\t\tif(cell){\r\n\t\t\t\te.preventDefault();\r\n\r\n\t\t\t\tnav = cell.nav();\r\n\r\n\t\t\t\tif(!nav.next()){\r\n\t\t\t\t\tif(newRow){\r\n\r\n\t\t\t\t\t\tcell.getElement().firstChild.blur();\r\n\r\n\t\t\t\t\t\tif(newRow === true){\r\n\t\t\t\t\t\t\tnewRow = this.table.addRow({})\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\tif(typeof newRow == \"function\"){\r\n\t\t\t\t\t\t\t\tnewRow = this.table.addRow(newRow(cell.row.getComponent()))\r\n\t\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\t\tnewRow = this.table.addRow(Object.assign({}, newRow));\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tnewRow.then(() => {\r\n\t\t\t\t\t\t\tsetTimeout(() => {\r\n\t\t\t\t\t\t\t\tnav.next();\r\n\t\t\t\t\t\t\t})\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\tnavLeft:function(e){\r\n\t\tvar cell = false;\r\n\r\n\t\tif(this.table.modExists(\"edit\")){\r\n\t\t\tcell = this.table.modules.edit.currentCell;\r\n\r\n\t\t\tif(cell){\r\n\t\t\t\te.preventDefault();\r\n\t\t\t\tcell.nav().left();\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\tnavRight:function(e){\r\n\t\tvar cell = false;\r\n\r\n\t\tif(this.table.modExists(\"edit\")){\r\n\t\t\tcell = this.table.modules.edit.currentCell;\r\n\r\n\t\t\tif(cell){\r\n\t\t\t\te.preventDefault();\r\n\t\t\t\tcell.nav().right();\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\tnavUp:function(e){\r\n\t\tvar cell = false;\r\n\r\n\t\tif(this.table.modExists(\"edit\")){\r\n\t\t\tcell = this.table.modules.edit.currentCell;\r\n\r\n\t\t\tif(cell){\r\n\t\t\t\te.preventDefault();\r\n\t\t\t\tcell.nav().up();\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\tnavDown:function(e){\r\n\t\tvar cell = false;\r\n\r\n\t\tif(this.table.modExists(\"edit\")){\r\n\t\t\tcell = this.table.modules.edit.currentCell;\r\n\r\n\t\t\tif(cell){\r\n\t\t\t\te.preventDefault();\r\n\t\t\t\tcell.nav().down();\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\tundo:function(e){\r\n\t\tvar cell = false;\r\n\t\tif(this.table.options.history && this.table.modExists(\"history\") && this.table.modExists(\"edit\")){\r\n\r\n\t\t\tcell = this.table.modules.edit.currentCell;\r\n\r\n\t\t\tif(!cell){\r\n\t\t\t\te.preventDefault();\r\n\t\t\t\tthis.table.modules.history.undo();\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\tredo:function(e){\r\n\t\tvar cell = false;\r\n\t\tif(this.table.options.history && this.table.modExists(\"history\") && this.table.modExists(\"edit\")){\r\n\r\n\t\t\tcell = this.table.modules.edit.currentCell;\r\n\r\n\t\t\tif(!cell){\r\n\t\t\t\te.preventDefault();\r\n\t\t\t\tthis.table.modules.history.redo();\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\tcopyToClipboard:function(e){\r\n\t\tif(!this.table.modules.edit.currentCell){\r\n\t\t\tif(this.table.modExists(\"clipboard\", true)){\r\n\t\t\t\tthis.table.modules.clipboard.copy(false, true);\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n};","import Module from '../../core/Module.js';\r\n\r\nimport defaultBindings from './defaults/bindings.js';\r\nimport defaultActions from './defaults/actions.js';\r\n\r\nclass Keybindings extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.watchKeys = null;\r\n\t\tthis.pressedKeys = null;\r\n\t\tthis.keyupBinding = false;\r\n\t\tthis.keydownBinding = false;\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tvar bindings = this.table.options.keybindings,\r\n\t\tmergedBindings = {};\r\n\r\n\t\tthis.watchKeys = {};\r\n\t\tthis.pressedKeys = [];\r\n\r\n\t\tif(bindings !== false){\r\n\r\n\t\t\tfor(let key in Keybindings.bindings){\r\n\t\t\t\tmergedBindings[key] = Keybindings.bindings[key];\r\n\t\t\t}\r\n\r\n\t\t\tif(Object.keys(bindings).length){\r\n\r\n\t\t\t\tfor(let key in bindings){\r\n\t\t\t\t\tmergedBindings[key] = bindings[key];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tthis.mapBindings(mergedBindings);\r\n\t\t\tthis.bindEvents();\r\n\t\t}\r\n\t}\r\n\r\n\tmapBindings(bindings){\r\n\t\tfor(let key in bindings){\r\n\t\t\tif(Keybindings.actions[key]){\r\n\t\t\t\tif(bindings[key]){\r\n\t\t\t\t\tif(typeof bindings[key] !== \"object\"){\r\n\t\t\t\t\t\tbindings[key] = [bindings[key]];\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tbindings[key].forEach((binding) => {\r\n\t\t\t\t\t\tthis.mapBinding(key, binding);\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Key Binding Error - no such action:\", key);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tmapBinding(action, symbolsList){\r\n\t\tvar binding = {\r\n\t\t\taction: Keybindings.actions[action],\r\n\t\t\tkeys: [],\r\n\t\t\tctrl: false,\r\n\t\t\tshift: false,\r\n\t\t\tmeta: false,\r\n\t\t};\r\n\r\n\t\tvar symbols = symbolsList.toString().toLowerCase().split(\" \").join(\"\").split(\"+\");\r\n\r\n\t\tsymbols.forEach((symbol) => {\r\n\t\t\tswitch(symbol){\r\n\t\t\t\tcase \"ctrl\":\r\n\t\t\t\tbinding.ctrl = true;\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"shift\":\r\n\t\t\t\tbinding.shift = true;\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"meta\":\r\n\t\t\t\tbinding.meta = true;\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tdefault:\r\n\t\t\t\tsymbol = parseInt(symbol);\r\n\t\t\t\tbinding.keys.push(symbol);\r\n\r\n\t\t\t\tif(!this.watchKeys[symbol]){\r\n\t\t\t\t\tthis.watchKeys[symbol] = [];\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.watchKeys[symbol].push(binding);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tbindEvents(){\r\n\t\tvar self = this;\r\n\r\n\t\tthis.keyupBinding = function(e){\r\n\t\t\tvar code = e.keyCode;\r\n\t\t\tvar bindings = self.watchKeys[code];\r\n\r\n\t\t\tif(bindings){\r\n\r\n\t\t\t\tself.pressedKeys.push(code);\r\n\r\n\t\t\t\tbindings.forEach(function(binding){\r\n\t\t\t\t\tself.checkBinding(e, binding);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tthis.keydownBinding = function(e){\r\n\t\t\tvar code = e.keyCode;\r\n\t\t\tvar bindings = self.watchKeys[code];\r\n\r\n\t\t\tif(bindings){\r\n\r\n\t\t\t\tvar index = self.pressedKeys.indexOf(code);\r\n\r\n\t\t\t\tif(index > -1){\r\n\t\t\t\t\tself.pressedKeys.splice(index, 1);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tthis.table.element.addEventListener(\"keydown\", this.keyupBinding);\r\n\r\n\t\tthis.table.element.addEventListener(\"keyup\", this.keydownBinding);\r\n\t}\r\n\r\n\tclearBindings(){\r\n\t\tif(this.keyupBinding){\r\n\t\t\tthis.table.element.removeEventListener(\"keydown\", this.keyupBinding);\r\n\t\t}\r\n\r\n\t\tif(this.keydownBinding){\r\n\t\t\tthis.table.element.removeEventListener(\"keyup\", this.keydownBinding);\r\n\t\t}\r\n\t}\r\n\r\n\tcheckBinding(e, binding){\r\n\t\tvar match = true;\r\n\r\n\t\tif(e.ctrlKey == binding.ctrl && e.shiftKey == binding.shift && e.metaKey == binding.meta){\r\n\t\t\tbinding.keys.forEach((key) => {\r\n\t\t\t\tvar index = this.pressedKeys.indexOf(key);\r\n\r\n\t\t\t\tif(index == -1){\r\n\t\t\t\t\tmatch = false;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tif(match){\r\n\t\t\t\tbinding.action.call(this, e);\r\n\t\t\t}\r\n\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t}\r\n}\r\n\r\nKeybindings.moduleName = \"keybindings\";\r\n\r\n//load defaults\r\nKeybindings.bindings = defaultBindings;\r\nKeybindings.actions = defaultActions;\r\n\r\nexport default Keybindings;","import Module from '../../core/Module.js';\r\nimport Helpers from '../../core/Helpers.js';\r\n\r\nclass Menu extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.menuElements = [];\r\n\t\tthis.blurEvent = this.hideMenu.bind(this);\r\n\t\tthis.escEvent = this.escMenu.bind(this);\r\n\t\tthis.nestedMenuBlock = false;\r\n\t\tthis.positionReversedX = false;\r\n\t}\r\n\r\n\tinitializeColumnHeader(column){\r\n\t\tvar headerMenuEl;\r\n\r\n\t\tif(column.definition.headerContextMenu){\r\n\t\t\tcolumn.getElement().addEventListener(\"contextmenu\", this.LoadMenuEvent.bind(this, column, column.definition.headerContextMenu));\r\n\t\t\tthis.tapHold(column, column.definition.headerContextMenu);\r\n\t\t}\r\n\r\n\t\t// if(column.definition.headerClickMenu){\r\n\t\t// \tcolumn.getElement().addEventListener(\"click\", this.LoadMenuEvent.bind(this, column, column.definition.headerClickMenu));\r\n\t\t// }\r\n\r\n\t\tif(column.definition.headerMenu){\r\n\r\n\t\t\theaderMenuEl = document.createElement(\"span\");\r\n\t\t\theaderMenuEl.classList.add(\"tabulator-header-menu-button\");\r\n\t\t\theaderMenuEl.innerHTML = \"⋮\";\r\n\r\n\t\t\theaderMenuEl.addEventListener(\"click\", (e) => {\r\n\t\t\t\te.stopPropagation();\r\n\t\t\t\te.preventDefault();\r\n\r\n\t\t\t\tthis.LoadMenuEvent(column, column.definition.headerMenu, e);\r\n\t\t\t});\r\n\r\n\t\t\tcolumn.titleElement.insertBefore(headerMenuEl, column.titleElement.firstChild);\r\n\t\t}\r\n\t}\r\n\r\n\tLoadMenuEvent(component, menu, e){\r\n\t\tmenu = typeof menu == \"function\" ? menu.call(this.table, component.getComponent(), e) : menu;\r\n\r\n\t\t// if(component instanceof Cell){\r\n\t\t// \te.stopImmediatePropagation();\r\n\t\t// }\r\n\r\n\t\tthis.loadMenu(e, component, menu);\r\n\t}\r\n\r\n\ttapHold(component, menu){\r\n\t\tvar element = component.getElement(),\r\n\t\ttapHold = null,\r\n\t\tloaded = false;\r\n\r\n\t\telement.addEventListener(\"touchstart\", (e) => {\r\n\t\t\tclearTimeout(tapHold);\r\n\t\t\tloaded = false;\r\n\r\n\t\t\ttapHold = setTimeout(() => {\r\n\t\t\t\tclearTimeout(tapHold);\r\n\t\t\t\ttapHold = null;\r\n\t\t\t\tloaded = true;\r\n\r\n\t\t\t\tthis.LoadMenuEvent(component, menu, e);\r\n\t\t\t}, 1000);\r\n\r\n\t\t}, {passive: true});\r\n\r\n\t\telement.addEventListener(\"touchend\", (e) => {\r\n\t\t\tclearTimeout(tapHold);\r\n\t\t\ttapHold = null;\r\n\r\n\t\t\tif(loaded){\r\n\t\t\t\te.preventDefault();\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tinitializeCell(cell){\r\n\t\tif(cell.column.definition.contextMenu){\r\n\t\t\tcell.getElement(true).addEventListener(\"contextmenu\", this.LoadMenuEvent.bind(this, cell, cell.column.definition.contextMenu));\r\n\t\t\tthis.tapHold(cell, cell.column.definition.contextMenu);\r\n\t\t}\r\n\r\n\t\tif(cell.column.definition.clickMenu){\r\n\t\t\tcell.getElement(true).addEventListener(\"click\", this.LoadMenuEvent.bind(this, cell, cell.column.definition.clickMenu));\r\n\t\t}\r\n\t}\r\n\r\n\tinitializeRow(row){\r\n\t\tif(this.table.options.rowContextMenu){\r\n\t\t\trow.getElement().addEventListener(\"contextmenu\", this.LoadMenuEvent.bind(this, row, this.table.options.rowContextMenu));\r\n\t\t\tthis.tapHold(row, this.table.options.rowContextMenu);\r\n\t\t}\r\n\r\n\t\tif(this.table.options.rowClickMenu){\r\n\t\t\trow.getElement().addEventListener(\"click\", this.LoadMenuEvent.bind(this, row, this.table.options.rowClickMenu));\r\n\t\t}\r\n\t}\r\n\r\n\tinitializeGroup (group){\r\n\t\tif(this.table.options.groupContextMenu){\r\n\t\t\tgroup.getElement().addEventListener(\"contextmenu\", this.LoadMenuEvent.bind(this, group, this.table.options.groupContextMenu));\r\n\t\t\tthis.tapHold(group, this.table.options.groupContextMenu);\r\n\t\t}\r\n\r\n\t\tif(this.table.options.groupClickMenu){\r\n\t\t\tgroup.getElement().addEventListener(\"click\", this.LoadMenuEvent.bind(this, group, this.table.options.groupClickMenu));\r\n\t\t}\r\n\t}\r\n\r\n\tloadMenu(e, component, menu, parentEl){\r\n\r\n\t\tvar touch = !(e instanceof MouseEvent);\r\n\r\n\t\tvar menuEl = document.createElement(\"div\");\r\n\t\tmenuEl.classList.add(\"tabulator-menu\");\r\n\r\n\t\tif(!touch){\r\n\t\t\te.preventDefault();\r\n\t\t}\r\n\r\n\t\t//abort if no menu set\r\n\t\tif(!menu || !menu.length){\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif(!parentEl){\r\n\t\t\tif(this.nestedMenuBlock){\r\n\t\t\t\t//abort if child menu already open\r\n\t\t\t\tif(this.isOpen()){\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tthis.nestedMenuBlock = setTimeout(() => {\r\n\t\t\t\t\tthis.nestedMenuBlock = false;\r\n\t\t\t\t}, 100)\r\n\t\t\t}\r\n\r\n\t\t\tthis.hideMenu();\r\n\t\t\tthis.menuElements = [];\r\n\t\t}\r\n\r\n\t\tmenu.forEach((item) => {\r\n\t\t\tvar itemEl = document.createElement(\"div\"),\r\n\t\t\tlabel = item.label,\r\n\t\t\tdisabled = item.disabled;\r\n\r\n\t\t\tif(item.separator){\r\n\t\t\t\titemEl.classList.add(\"tabulator-menu-separator\");\r\n\t\t\t}else{\r\n\t\t\t\titemEl.classList.add(\"tabulator-menu-item\");\r\n\r\n\t\t\t\tif(typeof label == \"function\"){\r\n\t\t\t\t\tlabel = label.call(this.table, component.getComponent());\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(label instanceof Node){\r\n\t\t\t\t\titemEl.appendChild(label);\r\n\t\t\t\t}else{\r\n\t\t\t\t\titemEl.innerHTML = label;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(typeof disabled == \"function\"){\r\n\t\t\t\t\tdisabled = disabled.call(this.table, component.getComponent());\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(disabled){\r\n\t\t\t\t\titemEl.classList.add(\"tabulator-menu-item-disabled\");\r\n\t\t\t\t\titemEl.addEventListener(\"click\", (e) => {\r\n\t\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\t});\r\n\t\t\t\t}else{\r\n\t\t\t\t\tif(item.menu && item.menu.length){\r\n\t\t\t\t\t\titemEl.addEventListener(\"click\", (e) => {\r\n\t\t\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\t\t\tthis.hideOldSubMenus(menuEl);\r\n\t\t\t\t\t\t\tthis.loadMenu(e, component, item.menu, itemEl);\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tif(item.action){\r\n\t\t\t\t\t\t\titemEl.addEventListener(\"click\", (e) => {\r\n\t\t\t\t\t\t\t\titem.action(e, component.getComponent());\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(item.menu && item.menu.length){\r\n\t\t\t\t\titemEl.classList.add(\"tabulator-menu-item-submenu\");\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tmenuEl.appendChild(itemEl);\r\n\t\t});\r\n\r\n\t\tmenuEl.addEventListener(\"click\", (e) => {\r\n\t\t\tthis.hideMenu();\r\n\t\t});\r\n\r\n\t\tthis.menuElements.push(menuEl);\r\n\t\tthis.positionMenu(menuEl, parentEl, touch, e);\r\n\t}\r\n\r\n\thideOldSubMenus(menuEl){\r\n\t\tvar index = this.menuElements.indexOf(menuEl);\r\n\r\n\t\tif(index > -1){\r\n\t\t\tfor(let i = this.menuElements.length - 1; i > index; i--){\r\n\t\t\t\tvar el = this.menuElements[i];\r\n\r\n\t\t\t\tif(el.parentNode){\r\n\t\t\t\t\tel.parentNode.removeChild(el);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.menuElements.pop();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tpositionMenu(element, parentEl, touch, e){\r\n\t\tvar docHeight = Math.max(document.body.offsetHeight, window.innerHeight),\r\n\t\tx, y, parentOffset;\r\n\r\n\t\tif(!parentEl){\r\n\t\t\tx = touch ? e.touches[0].pageX : e.pageX;\r\n\t\t\ty = touch ? e.touches[0].pageY : e.pageY;\r\n\r\n\t\t\tthis.positionReversedX = false;\r\n\t\t}else{\r\n\t\t\tparentOffset = Helpers.elOffset(parentEl);\r\n\t\t\tx = parentOffset.left + parentEl.offsetWidth;\r\n\t\t\ty = parentOffset.top - 1;\r\n\t\t}\r\n\r\n\t\telement.style.top = y + \"px\";\r\n\t\telement.style.left = x + \"px\";\r\n\r\n\t\tsetTimeout(() => {\r\n\t\t\tthis.table.rowManager.element.addEventListener(\"scroll\", this.blurEvent);\r\n\t\t\tdocument.body.addEventListener(\"click\", this.blurEvent);\r\n\t\t\tdocument.body.addEventListener(\"contextmenu\", this.blurEvent);\r\n\t\t\twindow.addEventListener(\"resize\", this.blurEvent);\r\n\t\t\tdocument.body.addEventListener(\"keydown\", this.escEvent);\r\n\t\t}, 100);\r\n\r\n\t\tdocument.body.appendChild(element);\r\n\r\n\t\t//move menu to start on bottom edge if it is too close to the edge of the screen\r\n\t\tif((y + element.offsetHeight) >= docHeight){\r\n\t\t\telement.style.top = \"\";\r\n\r\n\t\t\tif(parentEl){\r\n\t\t\t\telement.style.bottom = (docHeight - parentOffset.top - parentEl.offsetHeight - 1) + \"px\";\r\n\t\t\t}else{\r\n\t\t\t\telement.style.bottom = (docHeight - y) + \"px\";\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//move menu to start on right edge if it is too close to the edge of the screen\r\n\t\tif((x + element.offsetWidth) >= document.body.offsetWidth || this.positionReversedX){\r\n\t\t\telement.style.left = \"\";\r\n\r\n\t\t\tif(parentEl){\r\n\t\t\t\telement.style.right = (document.documentElement.offsetWidth - parentOffset.left) + \"px\";\r\n\t\t\t}else{\r\n\t\t\t\telement.style.right = (document.documentElement.offsetWidth - x) + \"px\";\r\n\t\t\t}\r\n\r\n\t\t\tthis.positionReversedX = true;\r\n\t\t}\r\n\t}\r\n\r\n\tisOpen(){\r\n\t\treturn !!this.menuElements.length;\r\n\t}\r\n\r\n\tescMenu(e){\r\n\t\tif(e.keyCode == 27){\r\n\t\t\tthis.hideMenu();\r\n\t\t}\r\n\t}\r\n\r\n\thideMenu(){\r\n\t\tthis.menuElements.forEach((menuEl) => {\r\n\t\t\tif(menuEl.parentNode){\r\n\t\t\t\tmenuEl.parentNode.removeChild(menuEl);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tdocument.body.removeEventListener(\"keydown\", this.escEvent);\r\n\t\tdocument.body.removeEventListener(\"click\", this.blurEvent);\r\n\t\tdocument.body.removeEventListener(\"contextmenu\", this.blurEvent);\r\n\t\twindow.removeEventListener(\"resize\", this.blurEvent);\r\n\t\tthis.table.rowManager.element.removeEventListener(\"scroll\", this.blurEvent);\r\n\t}\r\n}\r\n\r\nMenu.moduleName = \"menu\";\r\n\r\nexport default Menu;","import Module from '../../core/Module.js';\r\nimport Helpers from '../../core/Helpers.js';\r\n\r\nclass MoveColumns extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.placeholderElement = this.createPlaceholderElement();\r\n\t\tthis.hoverElement = false; //floating column header element\r\n\t\tthis.checkTimeout = false; //click check timeout holder\r\n\t\tthis.checkPeriod = 250; //period to wait on mousedown to consider this a move and not a click\r\n\t\tthis.moving = false; //currently moving column\r\n\t\tthis.toCol = false; //destination column\r\n\t\tthis.toColAfter = false; //position of moving column relative to the desitnation column\r\n\t\tthis.startX = 0; //starting position within header element\r\n\t\tthis.autoScrollMargin = 40; //auto scroll on edge when within margin\r\n\t\tthis.autoScrollStep = 5; //auto scroll distance in pixels\r\n\t\tthis.autoScrollTimeout = false; //auto scroll timeout\r\n\t\tthis.touchMove = false;\r\n\r\n\t\tthis.moveHover = this.moveHover.bind(this);\r\n\t\tthis.endMove = this.endMove.bind(this);\r\n\t}\r\n\r\n\tcreatePlaceholderElement(){\r\n\t\tvar el = document.createElement(\"div\");\r\n\r\n\t\tel.classList.add(\"tabulator-col\");\r\n\t\tel.classList.add(\"tabulator-col-placeholder\");\r\n\r\n\t\treturn el;\r\n\t}\r\n\r\n\tinitializeColumn(column){\r\n\t\tvar self = this,\r\n\t\tconfig = {},\r\n\t\tcolEl;\r\n\r\n\t\tif(!column.modules.frozen){\r\n\r\n\t\t\tcolEl = column.getElement();\r\n\r\n\t\t\tconfig.mousemove = function(e){\r\n\t\t\t\tif(column.parent === self.moving.parent){\r\n\t\t\t\t\tif((((self.touchMove ? e.touches[0].pageX : e.pageX) - Helpers.elOffset(colEl).left) + self.table.columnManager.element.scrollLeft) > (column.getWidth() / 2)){\r\n\t\t\t\t\t\tif(self.toCol !== column || !self.toColAfter){\r\n\t\t\t\t\t\t\tcolEl.parentNode.insertBefore(self.placeholderElement, colEl.nextSibling);\r\n\t\t\t\t\t\t\tself.moveColumn(column, true);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tif(self.toCol !== column || self.toColAfter){\r\n\t\t\t\t\t\t\tcolEl.parentNode.insertBefore(self.placeholderElement, colEl);\r\n\t\t\t\t\t\t\tself.moveColumn(column, false);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}.bind(self);\r\n\r\n\t\t\tcolEl.addEventListener(\"mousedown\", function(e){\r\n\t\t\t\tself.touchMove = false;\r\n\t\t\t\tif(e.which === 1){\r\n\t\t\t\t\tself.checkTimeout = setTimeout(function(){\r\n\t\t\t\t\t\tself.startMove(e, column);\r\n\t\t\t\t\t}, self.checkPeriod);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tcolEl.addEventListener(\"mouseup\", function(e){\r\n\t\t\t\tif(e.which === 1){\r\n\t\t\t\t\tif(self.checkTimeout){\r\n\t\t\t\t\t\tclearTimeout(self.checkTimeout);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tself.bindTouchEvents(column);\r\n\t\t}\r\n\r\n\t\tcolumn.modules.moveColumn = config;\r\n\t}\r\n\r\n\tbindTouchEvents(column){\r\n\t\tvar colEl = column.getElement(),\r\n\t\tstartXMove = false, //shifting center position of the cell\r\n\t\tdir = false,\r\n\t\tcurrentCol, nextCol, prevCol, nextColWidth, prevColWidth, nextColWidthLast, prevColWidthLast;\r\n\r\n\t\tcolEl.addEventListener(\"touchstart\", (e) => {\r\n\t\t\tthis.checkTimeout = setTimeout(() => {\r\n\t\t\t\tthis.touchMove = true;\r\n\t\t\t\tcurrentCol = column;\r\n\t\t\t\tnextCol = column.nextColumn();\r\n\t\t\t\tnextColWidth = nextCol ? nextCol.getWidth()/2 : 0;\r\n\t\t\t\tprevCol = column.prevColumn();\r\n\t\t\t\tprevColWidth = prevCol ? prevCol.getWidth()/2 : 0;\r\n\t\t\t\tnextColWidthLast = 0;\r\n\t\t\t\tprevColWidthLast = 0;\r\n\t\t\t\tstartXMove = false;\r\n\r\n\t\t\t\tthis.startMove(e, column);\r\n\t\t\t}, this.checkPeriod);\r\n\t\t}, {passive: true});\r\n\r\n\t\tcolEl.addEventListener(\"touchmove\", (e) => {\r\n\t\t\tvar halfCol, diff, moveToCol;\r\n\r\n\t\t\tif(this.moving){\r\n\t\t\t\tthis.moveHover(e);\r\n\r\n\t\t\t\tif(!startXMove){\r\n\t\t\t\t\tstartXMove = e.touches[0].pageX;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tdiff = e.touches[0].pageX - startXMove;\r\n\r\n\t\t\t\tif(diff > 0){\r\n\t\t\t\t\tif(nextCol && diff - nextColWidthLast > nextColWidth){\r\n\t\t\t\t\t\tmoveToCol = nextCol;\r\n\r\n\t\t\t\t\t\tif(moveToCol !== column){\r\n\t\t\t\t\t\t\tstartXMove = e.touches[0].pageX;\r\n\t\t\t\t\t\t\tmoveToCol.getElement().parentNode.insertBefore(this.placeholderElement, moveToCol.getElement().nextSibling);\r\n\t\t\t\t\t\t\tthis.moveColumn(moveToCol, true);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}else{\r\n\t\t\t\t\tif(prevCol && -diff - prevColWidthLast > prevColWidth){\r\n\t\t\t\t\t\tmoveToCol = prevCol;\r\n\r\n\t\t\t\t\t\tif(moveToCol !== column){\r\n\t\t\t\t\t\t\tstartXMove = e.touches[0].pageX;\r\n\t\t\t\t\t\t\tmoveToCol.getElement().parentNode.insertBefore(this.placeholderElement, moveToCol.getElement());\r\n\t\t\t\t\t\t\tthis.moveColumn(moveToCol, false);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(moveToCol){\r\n\t\t\t\t\tcurrentCol = moveToCol;\r\n\t\t\t\t\tnextCol = moveToCol.nextColumn();\r\n\t\t\t\t\tnextColWidthLast = nextColWidth;\r\n\t\t\t\t\tnextColWidth = nextCol ? nextCol.getWidth() / 2 : 0;\r\n\t\t\t\t\tprevCol = moveToCol.prevColumn();\r\n\t\t\t\t\tprevColWidthLast = prevColWidth;\r\n\t\t\t\t\tprevColWidth = prevCol ? prevCol.getWidth() / 2 : 0;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}, {passive: true});\r\n\r\n\t\tcolEl.addEventListener(\"touchend\", (e) => {\r\n\t\t\tif(this.checkTimeout){\r\n\t\t\t\tclearTimeout(this.checkTimeout);\r\n\t\t\t}\r\n\t\t\tif(this.moving){\r\n\t\t\t\tthis.endMove(e);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tstartMove(e, column){\r\n\t\tvar element = column.getElement();\r\n\r\n\t\tthis.moving = column;\r\n\t\tthis.startX = (this.touchMove ? e.touches[0].pageX : e.pageX) - Helpers.elOffset(element).left;\r\n\r\n\t\tthis.table.element.classList.add(\"tabulator-block-select\");\r\n\r\n\t\t//create placeholder\r\n\t\tthis.placeholderElement.style.width = column.getWidth() + \"px\";\r\n\t\tthis.placeholderElement.style.height = column.getHeight() + \"px\";\r\n\r\n\t\telement.parentNode.insertBefore(this.placeholderElement, element);\r\n\t\telement.parentNode.removeChild(element);\r\n\r\n\t\t//create hover element\r\n\t\tthis.hoverElement = element.cloneNode(true);\r\n\t\tthis.hoverElement.classList.add(\"tabulator-moving\");\r\n\r\n\t\tthis.table.columnManager.getElement().appendChild(this.hoverElement);\r\n\r\n\t\tthis.hoverElement.style.left = \"0\";\r\n\t\tthis.hoverElement.style.bottom = \"0\";\r\n\r\n\t\tif(!this.touchMove){\r\n\t\t\tthis._bindMouseMove();\r\n\r\n\t\t\tdocument.body.addEventListener(\"mousemove\", this.moveHover);\r\n\t\t\tdocument.body.addEventListener(\"mouseup\", this.endMove);\r\n\t\t}\r\n\r\n\t\tthis.moveHover(e);\r\n\t}\r\n\r\n\t_bindMouseMove(){\r\n\t\tthis.table.columnManager.columnsByIndex.forEach(function(column){\r\n\t\t\tif(column.modules.moveColumn.mousemove){\r\n\t\t\t\tcolumn.getElement().addEventListener(\"mousemove\", column.modules.moveColumn.mousemove);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t_unbindMouseMove(){\r\n\t\tthis.table.columnManager.columnsByIndex.forEach(function(column){\r\n\t\t\tif(column.modules.moveColumn.mousemove){\r\n\t\t\t\tcolumn.getElement().removeEventListener(\"mousemove\", column.modules.moveColumn.mousemove);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tmoveColumn(column, after){\r\n\t\tvar movingCells = this.moving.getCells();\r\n\r\n\t\tthis.toCol = column;\r\n\t\tthis.toColAfter = after;\r\n\r\n\t\tif(after){\r\n\t\t\tcolumn.getCells().forEach(function(cell, i){\r\n\t\t\t\tvar cellEl = cell.getElement(true);\r\n\t\t\t\tcellEl.parentNode.insertBefore(movingCells[i].getElement(), cellEl.nextSibling);\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tcolumn.getCells().forEach(function(cell, i){\r\n\t\t\t\tvar cellEl = cell.getElement(true);\r\n\t\t\t\tcellEl.parentNode.insertBefore(movingCells[i].getElement(), cellEl);\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tendMove(e){\r\n\t\tif(e.which === 1 || this.touchMove){\r\n\t\t\tthis._unbindMouseMove();\r\n\r\n\t\t\tthis.placeholderElement.parentNode.insertBefore(this.moving.getElement(), this.placeholderElement.nextSibling);\r\n\t\t\tthis.placeholderElement.parentNode.removeChild(this.placeholderElement);\r\n\t\t\tthis.hoverElement.parentNode.removeChild(this.hoverElement);\r\n\r\n\t\t\tthis.table.element.classList.remove(\"tabulator-block-select\");\r\n\r\n\t\t\tif(this.toCol){\r\n\t\t\t\tthis.table.columnManager.moveColumnActual(this.moving, this.toCol, this.toColAfter);\r\n\t\t\t}\r\n\r\n\t\t\tthis.moving = false;\r\n\t\t\tthis.toCol = false;\r\n\t\t\tthis.toColAfter = false;\r\n\r\n\t\t\tif(!this.touchMove){\r\n\t\t\t\tdocument.body.removeEventListener(\"mousemove\", this.moveHover);\r\n\t\t\t\tdocument.body.removeEventListener(\"mouseup\", this.endMove);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tmoveHover(e){\r\n\t\tvar columnHolder = this.table.columnManager.getElement(),\r\n\t\tscrollLeft = columnHolder.scrollLeft,\r\n\t\txPos = ((this.touchMove ? e.touches[0].pageX : e.pageX) - Helpers.elOffset(columnHolder).left) + scrollLeft,\r\n\t\tscrollPos;\r\n\r\n\t\tthis.hoverElement.style.left = (xPos - this.startX) + \"px\";\r\n\r\n\t\tif(xPos - scrollLeft < this.autoScrollMargin){\r\n\t\t\tif(!this.autoScrollTimeout){\r\n\t\t\t\tthis.autoScrollTimeout = setTimeout(() => {\r\n\t\t\t\t\tscrollPos = Math.max(0,scrollLeft-5);\r\n\t\t\t\t\tthis.table.rowManager.getElement().scrollLeft = scrollPos;\r\n\t\t\t\t\tthis.autoScrollTimeout = false;\r\n\t\t\t\t}, 1);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(scrollLeft + columnHolder.clientWidth - xPos < this.autoScrollMargin){\r\n\t\t\tif(!this.autoScrollTimeout){\r\n\t\t\t\tthis.autoScrollTimeout = setTimeout(() => {\r\n\t\t\t\t\tscrollPos = Math.min(columnHolder.clientWidth, scrollLeft+5);\r\n\t\t\t\t\tthis.table.rowManager.getElement().scrollLeft = scrollPos;\r\n\t\t\t\t\tthis.autoScrollTimeout = false;\r\n\t\t\t\t}, 1);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n\r\nMoveColumns.moduleName = \"moveColumn\";\r\n\r\nexport default MoveColumns;\r\n","import Module from '../../core/Module.js';\r\nimport Helpers from '../../core/Helpers.js';\r\n\r\nclass MoveRows extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.placeholderElement = this.createPlaceholderElement();\r\n\t\tthis.hoverElement = false; //floating row header element\r\n\t\tthis.checkTimeout = false; //click check timeout holder\r\n\t\tthis.checkPeriod = 150; //period to wait on mousedown to consider this a move and not a click\r\n\t\tthis.moving = false; //currently moving row\r\n\t\tthis.toRow = false; //destination row\r\n\t\tthis.toRowAfter = false; //position of moving row relative to the desitnation row\r\n\t\tthis.hasHandle = false; //row has handle instead of fully movable row\r\n\t\tthis.startY = 0; //starting Y position within header element\r\n\t\tthis.startX = 0; //starting X position within header element\r\n\r\n\t\tthis.moveHover = this.moveHover.bind(this);\r\n\t\tthis.endMove = this.endMove.bind(this);\r\n\t\tthis.tableRowDropEvent = false;\r\n\r\n\t\tthis.touchMove = false;\r\n\r\n\t\tthis.connection = false;\r\n\t\tthis.connectionSelectorsTables = false;\r\n\t\tthis.connectionSelectorsElements = false;\r\n\t\tthis.connectionElements = [];\r\n\t\tthis.connections = [];\r\n\r\n\t\tthis.connectedTable = false;\r\n\t\tthis.connectedRow = false;\r\n\t}\r\n\r\n\tcreatePlaceholderElement(){\r\n\t\tvar el = document.createElement(\"div\");\r\n\r\n\t\tel.classList.add(\"tabulator-row\");\r\n\t\tel.classList.add(\"tabulator-row-placeholder\");\r\n\r\n\t\treturn el;\r\n\t}\r\n\r\n\tinitialize(handle){\r\n\t\tthis.connectionSelectorsTables = this.table.options.movableRowsConnectedTables;\r\n\t\tthis.connectionSelectorsElements = this.table.options.movableRowsConnectedElements;\r\n\r\n\t\tthis.connection = this.connectionSelectorsTables || this.connectionSelectorsElements;\r\n\t}\r\n\r\n\tsetHandle(handle){\r\n\t\tthis.hasHandle = handle;\r\n\t}\r\n\r\n\tinitializeGroupHeader(group){\r\n\t\tvar self = this,\r\n\t\tconfig = {},\r\n\t\trowEl;\r\n\r\n\t\t//inter table drag drop\r\n\t\tconfig.mouseup = function(e){\r\n\t\t\tself.tableRowDrop(e, row);\r\n\t\t}.bind(self);\r\n\r\n\t\t//same table drag drop\r\n\t\tconfig.mousemove = function(e){\r\n\t\t\tif(((e.pageY - Helpers.elOffset(group.element).top) + self.table.rowManager.element.scrollTop) > (group.getHeight() / 2)){\r\n\t\t\t\tif(self.toRow !== group || !self.toRowAfter){\r\n\t\t\t\t\tvar rowEl = group.getElement();\r\n\t\t\t\t\trowEl.parentNode.insertBefore(self.placeholderElement, rowEl.nextSibling);\r\n\t\t\t\t\tself.moveRow(group, true);\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tif(self.toRow !== group || self.toRowAfter){\r\n\t\t\t\t\tvar rowEl = group.getElement();\r\n\t\t\t\t\tif(rowEl.previousSibling){\r\n\t\t\t\t\t\trowEl.parentNode.insertBefore(self.placeholderElement, rowEl);\r\n\t\t\t\t\t\tself.moveRow(group, false);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}.bind(self);\r\n\r\n\t\tgroup.modules.moveRow = config;\r\n\t}\r\n\r\n\tinitializeRow(row){\r\n\t\tvar self = this,\r\n\t\tconfig = {},\r\n\t\trowEl;\r\n\r\n\t\t//inter table drag drop\r\n\t\tconfig.mouseup = function(e){\r\n\t\t\tself.tableRowDrop(e, row);\r\n\t\t}.bind(self);\r\n\r\n\t\t//same table drag drop\r\n\t\tconfig.mousemove = function(e){\r\n\t\t\tvar rowEl = row.getElement();\r\n\r\n\t\t\tif(((e.pageY - Helpers.elOffset(rowEl).top) + self.table.rowManager.element.scrollTop) > (row.getHeight() / 2)){\r\n\t\t\t\tif(self.toRow !== row || !self.toRowAfter){\r\n\t\t\t\t\trowEl.parentNode.insertBefore(self.placeholderElement, rowEl.nextSibling);\r\n\t\t\t\t\tself.moveRow(row, true);\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tif(self.toRow !== row || self.toRowAfter){\r\n\t\t\t\t\trowEl.parentNode.insertBefore(self.placeholderElement, rowEl);\r\n\t\t\t\t\tself.moveRow(row, false);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}.bind(self);\r\n\r\n\r\n\t\tif(!this.hasHandle){\r\n\r\n\t\t\trowEl = row.getElement();\r\n\r\n\t\t\trowEl.addEventListener(\"mousedown\", function(e){\r\n\t\t\t\tif(e.which === 1){\r\n\t\t\t\t\tself.checkTimeout = setTimeout(function(){\r\n\t\t\t\t\t\tself.startMove(e, row);\r\n\t\t\t\t\t}, self.checkPeriod);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\trowEl.addEventListener(\"mouseup\", function(e){\r\n\t\t\t\tif(e.which === 1){\r\n\t\t\t\t\tif(self.checkTimeout){\r\n\t\t\t\t\t\tclearTimeout(self.checkTimeout);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tthis.bindTouchEvents(row, row.getElement());\r\n\t\t}\r\n\r\n\t\trow.modules.moveRow = config;\r\n\t}\r\n\r\n\tinitializeCell(cell){\r\n\t\tvar self = this,\r\n\t\tcellEl = cell.getElement(true);\r\n\r\n\t\tcellEl.addEventListener(\"mousedown\", function(e){\r\n\t\t\tif(e.which === 1){\r\n\t\t\t\tself.checkTimeout = setTimeout(function(){\r\n\t\t\t\t\tself.startMove(e, cell.row);\r\n\t\t\t\t}, self.checkPeriod);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tcellEl.addEventListener(\"mouseup\", function(e){\r\n\t\t\tif(e.which === 1){\r\n\t\t\t\tif(self.checkTimeout){\r\n\t\t\t\t\tclearTimeout(self.checkTimeout);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tthis.bindTouchEvents(cell.row, cellEl);\r\n\t}\r\n\r\n\tbindTouchEvents(row, element){\r\n\t\tvar startYMove = false, //shifting center position of the cell\r\n\t\tdir = false,\r\n\t\tcurrentRow, nextRow, prevRow, nextRowHeight, prevRowHeight, nextRowHeightLast, prevRowHeightLast;\r\n\r\n\t\telement.addEventListener(\"touchstart\", (e) => {\r\n\t\t\tthis.checkTimeout = setTimeout(() => {\r\n\t\t\t\tthis.touchMove = true;\r\n\t\t\t\tcurrentRow = row;\r\n\t\t\t\tnextRow = row.nextRow();\r\n\t\t\t\tnextRowHeight = nextRow ? nextRow.getHeight()/2 : 0;\r\n\t\t\t\tprevRow = row.prevRow();\r\n\t\t\t\tprevRowHeight = prevRow ? prevRow.getHeight()/2 : 0;\r\n\t\t\t\tnextRowHeightLast = 0;\r\n\t\t\t\tprevRowHeightLast = 0;\r\n\t\t\t\tstartYMove = false;\r\n\r\n\t\t\t\tthis.startMove(e, row);\r\n\t\t\t}, this.checkPeriod);\r\n\t\t}, {passive: true});\r\n\t\tthis.moving, this.toRow, this.toRowAfter\r\n\t\telement.addEventListener(\"touchmove\", (e) => {\r\n\r\n\t\t\tvar halfCol, diff, moveToRow;\r\n\r\n\t\t\tif(this.moving){\r\n\t\t\t\te.preventDefault();\r\n\r\n\t\t\t\tthis.moveHover(e);\r\n\r\n\t\t\t\tif(!startYMove){\r\n\t\t\t\t\tstartYMove = e.touches[0].pageY;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tdiff = e.touches[0].pageY - startYMove;\r\n\r\n\t\t\t\tif(diff > 0){\r\n\t\t\t\t\tif(nextRow && diff - nextRowHeightLast > nextRowHeight){\r\n\t\t\t\t\t\tmoveToRow = nextRow;\r\n\r\n\t\t\t\t\t\tif(moveToRow !== row){\r\n\t\t\t\t\t\t\tstartYMove = e.touches[0].pageY\r\n\t\t\t\t\t\t\tmoveToRow.getElement().parentNode.insertBefore(this.placeholderElement, moveToRow.getElement().nextSibling);\r\n\t\t\t\t\t\t\tthis.moveRow(moveToRow, true);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}else{\r\n\t\t\t\t\tif(prevRow && -diff - prevRowHeightLast > prevRowHeight){\r\n\t\t\t\t\t\tmoveToRow = prevRow;\r\n\r\n\t\t\t\t\t\tif(moveToRow !== row){\r\n\t\t\t\t\t\t\tstartYMove = e.touches[0].pageY;\r\n\t\t\t\t\t\t\tmoveToRow.getElement().parentNode.insertBefore(this.placeholderElement, moveToRow.getElement());\r\n\t\t\t\t\t\t\tthis.moveRow(moveToRow, false);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(moveToRow){\r\n\t\t\t\t\tcurrentRow = moveToRow;\r\n\t\t\t\t\tnextRow = moveToRow.nextRow();\r\n\t\t\t\t\tnextRowHeightLast = nextRowHeight;\r\n\t\t\t\t\tnextRowHeight = nextRow ? nextRow.getHeight() / 2 : 0;\r\n\t\t\t\t\tprevRow = moveToRow.prevRow();\r\n\t\t\t\t\tprevRowHeightLast = prevRowHeight;\r\n\t\t\t\t\tprevRowHeight = prevRow ? prevRow.getHeight() / 2 : 0;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\telement.addEventListener(\"touchend\", (e) => {\r\n\t\t\tif(this.checkTimeout){\r\n\t\t\t\tclearTimeout(this.checkTimeout);\r\n\t\t\t}\r\n\t\t\tif(this.moving){\r\n\t\t\t\tthis.endMove(e);\r\n\t\t\t\tthis.touchMove = false;\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t_bindMouseMove(){\r\n\t\tthis.table.rowManager.getDisplayRows().forEach((row) => {\r\n\t\t\tif((row.type === \"row\" || row.type === \"group\") && row.modules.moveRow.mousemove){\r\n\t\t\t\trow.getElement().addEventListener(\"mousemove\", row.modules.moveRow.mousemove);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t_unbindMouseMove(){\r\n\t\tthis.table.rowManager.getDisplayRows().forEach((row) => {\r\n\t\t\tif((row.type === \"row\" || row.type === \"group\") && row.modules.moveRow.mousemove){\r\n\t\t\t\trow.getElement().removeEventListener(\"mousemove\", row.modules.moveRow.mousemove);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tstartMove(e, row){\r\n\t\tvar element = row.getElement();\r\n\r\n\t\tthis.setStartPosition(e, row);\r\n\r\n\t\tthis.moving = row;\r\n\r\n\t\tthis.table.element.classList.add(\"tabulator-block-select\");\r\n\r\n\t\t//create placeholder\r\n\t\tthis.placeholderElement.style.width = row.getWidth() + \"px\";\r\n\t\tthis.placeholderElement.style.height = row.getHeight() + \"px\";\r\n\r\n\t\tif(!this.connection){\r\n\t\t\telement.parentNode.insertBefore(this.placeholderElement, element);\r\n\t\t\telement.parentNode.removeChild(element);\r\n\t\t}else{\r\n\t\t\tthis.table.element.classList.add(\"tabulator-movingrow-sending\");\r\n\t\t\tthis.connectToTables(row);\r\n\t\t}\r\n\r\n\t\t//create hover element\r\n\t\tthis.hoverElement = element.cloneNode(true);\r\n\t\tthis.hoverElement.classList.add(\"tabulator-moving\");\r\n\r\n\t\tif(this.connection){\r\n\t\t\tdocument.body.appendChild(this.hoverElement);\r\n\t\t\tthis.hoverElement.style.left = \"0\";\r\n\t\t\tthis.hoverElement.style.top = \"0\";\r\n\t\t\tthis.hoverElement.style.width = this.table.element.clientWidth + \"px\";\r\n\t\t\tthis.hoverElement.style.whiteSpace = \"nowrap\";\r\n\t\t\tthis.hoverElement.style.overflow = \"hidden\";\r\n\t\t\tthis.hoverElement.style.pointerEvents = \"none\";\r\n\t\t}else{\r\n\t\t\tthis.table.rowManager.getTableElement().appendChild(this.hoverElement);\r\n\r\n\t\t\tthis.hoverElement.style.left = \"0\";\r\n\t\t\tthis.hoverElement.style.top = \"0\";\r\n\r\n\t\t\tthis._bindMouseMove();\r\n\t\t}\r\n\r\n\t\tdocument.body.addEventListener(\"mousemove\", this.moveHover);\r\n\t\tdocument.body.addEventListener(\"mouseup\", this.endMove);\r\n\r\n\t\tthis.moveHover(e);\r\n\t}\r\n\r\n\tsetStartPosition(e, row){\r\n\t\tvar pageX = this.touchMove ? e.touches[0].pageX : e.pageX,\r\n\t\tpageY = this.touchMove ? e.touches[0].pageY : e.pageY,\r\n\t\telement, position;\r\n\r\n\t\telement = row.getElement();\r\n\t\tif(this.connection){\r\n\t\t\tposition = element.getBoundingClientRect();\r\n\r\n\t\t\tthis.startX = position.left - pageX + window.pageXOffset;\r\n\t\t\tthis.startY = position.top - pageY + window.pageYOffset;\r\n\t\t}else{\r\n\t\t\tthis.startY = (pageY - element.getBoundingClientRect().top);\r\n\t\t}\r\n\t}\r\n\r\n\tendMove(e){\r\n\t\tif(!e || e.which === 1 || this.touchMove){\r\n\t\t\tthis._unbindMouseMove();\r\n\r\n\t\t\tif(!this.connection){\r\n\t\t\t\tthis.placeholderElement.parentNode.insertBefore(this.moving.getElement(), this.placeholderElement.nextSibling);\r\n\t\t\t\tthis.placeholderElement.parentNode.removeChild(this.placeholderElement);\r\n\t\t\t}\r\n\r\n\t\t\tthis.hoverElement.parentNode.removeChild(this.hoverElement);\r\n\r\n\t\t\tthis.table.element.classList.remove(\"tabulator-block-select\");\r\n\r\n\t\t\tif(this.toRow){\r\n\t\t\t\tthis.table.rowManager.moveRow(this.moving, this.toRow, this.toRowAfter);\r\n\t\t\t}\r\n\r\n\t\t\tthis.moving = false;\r\n\t\t\tthis.toRow = false;\r\n\t\t\tthis.toRowAfter = false;\r\n\r\n\t\t\tdocument.body.removeEventListener(\"mousemove\", this.moveHover);\r\n\t\t\tdocument.body.removeEventListener(\"mouseup\", this.endMove);\r\n\r\n\t\t\tif(this.connection){\r\n\t\t\t\tthis.table.element.classList.remove(\"tabulator-movingrow-sending\");\r\n\t\t\t\tthis.disconnectFromTables();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tmoveRow(row, after){\r\n\t\tthis.toRow = row;\r\n\t\tthis.toRowAfter = after;\r\n\t}\r\n\r\n\tmoveHover(e){\r\n\t\tif(this.connection){\r\n\t\t\tthis.moveHoverConnections.call(this, e);\r\n\t\t}else{\r\n\t\t\tthis.moveHoverTable.call(this, e);\r\n\t\t}\r\n\t}\r\n\r\n\tmoveHoverTable(e){\r\n\t\tvar rowHolder = this.table.rowManager.getElement(),\r\n\t\tscrollTop = rowHolder.scrollTop,\r\n\t\tyPos = ((this.touchMove ? e.touches[0].pageY : e.pageY) - rowHolder.getBoundingClientRect().top) + scrollTop,\r\n\t\tscrollPos;\r\n\r\n\t\tthis.hoverElement.style.top = (yPos - this.startY) + \"px\";\r\n\t}\r\n\r\n\tmoveHoverConnections(e){\r\n\t\tthis.hoverElement.style.left = (this.startX + (this.touchMove ? e.touches[0].pageX : e.pageX)) + \"px\";\r\n\t\tthis.hoverElement.style.top = (this.startY + (this.touchMove ? e.touches[0].pageY : e.pageY)) + \"px\";\r\n\t}\r\n\r\n\telementRowDrop(e, element, row){\r\n\t\tif(this.table.options.movableRowsElementDrop){\r\n\t\t\tthis.table.options.movableRowsElementDrop(e, element, row ? row.getComponent() : false);\r\n\t\t}\r\n\t}\r\n\r\n\t//establish connection with other tables\r\n\tconnectToTables(row){\r\n\t\tvar connectionTables;\r\n\r\n\t\tif(this.connectionSelectorsTables){\r\n\t\t\tconnectionTables = this.table.modules.comms.getConnections(this.connectionSelectorsTables);\r\n\r\n\t\t\tthis.table.options.movableRowsSendingStart.call(this.table, connectionTables);\r\n\r\n\t\t\tthis.table.modules.comms.send(this.connectionSelectorsTables, \"moveRow\", \"connect\", {\r\n\t\t\t\trow:row,\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif(this.connectionSelectorsElements){\r\n\r\n\t\t\tthis.connectionElements = [];\r\n\r\n\t\t\tif(!Array.isArray(this.connectionSelectorsElements)){\r\n\t\t\t\tthis.connectionSelectorsElements = [this.connectionSelectorsElements];\r\n\t\t\t}\r\n\r\n\t\t\tthis.connectionSelectorsElements.forEach((query) => {\r\n\t\t\t\tif(typeof query === \"string\"){\r\n\t\t\t\t\tthis.connectionElements = this.connectionElements.concat(Array.prototype.slice.call(document.querySelectorAll(query)));\r\n\t\t\t\t}else{\r\n\t\t\t\t\tthis.connectionElements.push(query);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tthis.connectionElements.forEach((element) => {\r\n\t\t\t\tvar dropEvent = (e) => {\r\n\t\t\t\t\tthis.elementRowDrop(e, element, this.moving);\r\n\t\t\t\t};\r\n\r\n\t\t\t\telement.addEventListener(\"mouseup\", dropEvent);\r\n\t\t\t\telement.tabulatorElementDropEvent = dropEvent;\r\n\r\n\t\t\t\telement.classList.add(\"tabulator-movingrow-receiving\");\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\t//disconnect from other tables\r\n\tdisconnectFromTables(){\r\n\t\tvar connectionTables;\r\n\r\n\t\tif(this.connectionSelectorsTables){\r\n\t\t\tconnectionTables = this.table.modules.comms.getConnections(this.connectionSelectorsTables);\r\n\r\n\t\t\tthis.table.options.movableRowsSendingStop.call(this.table, connectionTables);\r\n\r\n\t\t\tthis.table.modules.comms.send(this.connectionSelectorsTables, \"moveRow\", \"disconnect\");\r\n\t\t}\r\n\r\n\t\tthis.connectionElements.forEach((element) => {\r\n\t\t\telement.classList.remove(\"tabulator-movingrow-receiving\");\r\n\t\t\telement.removeEventListener(\"mouseup\", element.tabulatorElementDropEvent);\r\n\t\t\tdelete element.tabulatorElementDropEvent;\r\n\t\t});\r\n\t}\r\n\r\n\t//accept incomming connection\r\n\tconnect(table, row){\r\n\t\tif(!this.connectedTable){\r\n\t\t\tthis.connectedTable = table;\r\n\t\t\tthis.connectedRow = row;\r\n\r\n\t\t\tthis.table.element.classList.add(\"tabulator-movingrow-receiving\");\r\n\r\n\t\t\tthis.table.rowManager.getDisplayRows().forEach((row) => {\r\n\t\t\t\tif(row.type === \"row\" && row.modules.moveRow && row.modules.moveRow.mouseup){\r\n\t\t\t\t\trow.getElement().addEventListener(\"mouseup\", row.modules.moveRow.mouseup);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tthis.tableRowDropEvent = this.tableRowDrop.bind(this);\r\n\r\n\t\t\tthis.table.element.addEventListener(\"mouseup\", this.tableRowDropEvent);\r\n\r\n\t\t\tthis.table.options.movableRowsReceivingStart.call(this.table, row, table);\r\n\r\n\t\t\treturn true;\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Move Row Error - Table cannot accept connection, already connected to table:\", this.connectedTable);\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\t//close incomming connection\r\n\tdisconnect(table){\r\n\t\tif(table === this.connectedTable){\r\n\t\t\tthis.connectedTable = false;\r\n\t\t\tthis.connectedRow = false;\r\n\r\n\t\t\tthis.table.element.classList.remove(\"tabulator-movingrow-receiving\");\r\n\r\n\t\t\tthis.table.rowManager.getDisplayRows().forEach((row) =>{\r\n\t\t\t\tif(row.type === \"row\" && row.modules.moveRow && row.modules.moveRow.mouseup){\r\n\t\t\t\t\trow.getElement().removeEventListener(\"mouseup\", row.modules.moveRow.mouseup);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tthis.table.element.removeEventListener(\"mouseup\", this.tableRowDropEvent);\r\n\r\n\t\t\tthis.table.options.movableRowsReceivingStop.call(this.table, table);\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Move Row Error - trying to disconnect from non connected table\")\r\n\t\t}\r\n\t}\r\n\r\n\tdropComplete(table, row, success){\r\n\t\tvar sender = false;\r\n\r\n\t\tif(success){\r\n\r\n\t\t\tswitch(typeof this.table.options.movableRowsSender){\r\n\t\t\t\tcase \"string\":\r\n\t\t\t\tsender = this.senders[this.table.options.movableRowsSender];\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"function\":\r\n\t\t\t\tsender = this.table.options.movableRowsSender;\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\r\n\t\t\tif(sender){\r\n\t\t\t\tsender.call(this, this.moving.getComponent(), row ? row.getComponent() : undefined, table)\r\n\t\t\t}else{\r\n\t\t\t\tif(this.table.options.movableRowsSender){\r\n\t\t\t\t\tconsole.warn(\"Mover Row Error - no matching sender found:\", this.table.options.movableRowsSender);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tthis.table.options.movableRowsSent.call(this.table, this.moving.getComponent(), row ? row.getComponent() : undefined, table);\r\n\r\n\t\t}else{\r\n\t\t\tthis.table.options.movableRowsSentFailed.call(this.table, this.moving.getComponent(), row ? row.getComponent() : undefined, table);\r\n\t\t}\r\n\r\n\t\tthis.endMove();\r\n\t}\r\n\r\n\ttableRowDrop(e, row){\r\n\t\tvar receiver = false,\r\n\t\tsuccess = false;\r\n\r\n\t\te.stopImmediatePropagation();\r\n\r\n\t\tswitch(typeof this.table.options.movableRowsReceiver){\r\n\t\t\tcase \"string\":\r\n\t\t\treceiver = this.receivers[this.table.options.movableRowsReceiver];\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"function\":\r\n\t\t\treceiver = this.table.options.movableRowsReceiver;\r\n\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\tif(receiver){\r\n\t\t\tsuccess = receiver.call(this, this.connectedRow.getComponent(), row ? row.getComponent() : undefined, this.connectedTable)\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Mover Row Error - no matching receiver found:\", this.table.options.movableRowsReceiver)\r\n\t\t}\r\n\r\n\t\tif(success){\r\n\t\t\tthis.table.options.movableRowsReceived.call(this.table, this.connectedRow.getComponent(), row ? row.getComponent() : undefined, this.connectedTable);\r\n\t\t}else{\r\n\t\t\tthis.table.options.movableRowsReceivedFailed.call(this.table, this.connectedRow.getComponent(), row ? row.getComponent() : undefined, this.connectedTable);\r\n\t\t}\r\n\r\n\t\tthis.table.modules.comms.send(this.connectedTable, \"moveRow\", \"dropcomplete\", {\r\n\t\t\trow:row,\r\n\t\t\tsuccess:success,\r\n\t\t});\r\n\t}\r\n\r\n\tcommsReceived(table, action, data){\r\n\t\tswitch(action){\r\n\t\t\tcase \"connect\":\r\n\t\t\treturn this.connect(table, data.row);\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"disconnect\":\r\n\t\t\treturn this.disconnect(table);\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"dropcomplete\":\r\n\t\t\treturn this.dropComplete(table, data.row, data.success);\r\n\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n}\r\n\r\nMoveRows.prototype.receivers = {\r\n\tinsert:function(fromRow, toRow, fromTable){\r\n\t\tthis.table.addRow(fromRow.getData(), undefined, toRow);\r\n\t\treturn true;\r\n\t},\r\n\r\n\tadd:function(fromRow, toRow, fromTable){\r\n\t\tthis.table.addRow(fromRow.getData());\r\n\t\treturn true;\r\n\t},\r\n\r\n\tupdate:function(fromRow, toRow, fromTable){\r\n\t\tif(toRow){\r\n\t\t\ttoRow.update(fromRow.getData());\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t},\r\n\r\n\treplace:function(fromRow, toRow, fromTable){\r\n\t\tif(toRow){\r\n\t\t\tthis.table.addRow(fromRow.getData(), undefined, toRow);\r\n\t\t\ttoRow.delete();\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t},\r\n};\r\n\r\nMoveRows.prototype.senders = {\r\n\tdelete:function(fromRow, toRow, toTable){\r\n\t\tfromRow.delete();\r\n\t}\r\n};\r\n\r\nMoveRows.moduleName = \"moveRow\";\r\n\r\nexport default MoveRows;","export default {};","import Module from '../../core/Module.js';\r\n\r\nimport defaultMutators from './defaults/mutators.js';\r\n\r\nclass Mutator extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.allowedTypes = [\"\", \"data\", \"edit\", \"clipboard\"]; //list of muatation types\r\n\t\tthis.enabled = true;\r\n\t}\r\n\r\n\t//initialize column mutator\r\n\tinitializeColumn(column){\r\n\t\tvar match = false,\r\n\t\tconfig = {};\r\n\r\n\t\tthis.allowedTypes.forEach((type) => {\r\n\t\t\tvar key = \"mutator\" + (type.charAt(0).toUpperCase() + type.slice(1)),\r\n\t\t\tmutator;\r\n\r\n\t\t\tif(column.definition[key]){\r\n\t\t\t\tmutator = this.lookupMutator(column.definition[key]);\r\n\r\n\t\t\t\tif(mutator){\r\n\t\t\t\t\tmatch = true;\r\n\r\n\t\t\t\t\tconfig[key] = {\r\n\t\t\t\t\t\tmutator:mutator,\r\n\t\t\t\t\t\tparams: column.definition[key + \"Params\"] || {},\r\n\t\t\t\t\t};\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tif(match){\r\n\t\t\tcolumn.modules.mutate = config;\r\n\t\t}\r\n\t}\r\n\r\n\tlookupMutator(value){\r\n\t\tvar mutator = false;\r\n\r\n\t\t//set column mutator\r\n\t\tswitch(typeof value){\r\n\t\t\tcase \"string\":\r\n\t\t\tif(Mutator.mutators[value]){\r\n\t\t\t\tmutator = Mutator.mutators[value];\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Mutator Error - No such mutator found, ignoring: \", value);\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"function\":\r\n\t\t\tmutator = value;\r\n\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\treturn mutator;\r\n\t}\r\n\r\n\t//apply mutator to row\r\n\ttransformRow(data, type, updatedData){\r\n\t\tvar key = \"mutator\" + (type.charAt(0).toUpperCase() + type.slice(1)),\r\n\t\tvalue;\r\n\r\n\t\tif(this.enabled){\r\n\r\n\t\t\tthis.table.columnManager.traverse((column) => {\r\n\t\t\t\tvar mutator, params, component;\r\n\r\n\t\t\t\tif(column.modules.mutate){\r\n\t\t\t\t\tmutator = column.modules.mutate[key] || column.modules.mutate.mutator || false;\r\n\r\n\t\t\t\t\tif(mutator){\r\n\t\t\t\t\t\tvalue = column.getFieldValue(typeof updatedData !== \"undefined\" ? updatedData : data);\r\n\r\n\t\t\t\t\t\tif(type == \"data\" || typeof value !== \"undefined\"){\r\n\t\t\t\t\t\t\tcomponent = column.getComponent();\r\n\t\t\t\t\t\t\tparams = typeof mutator.params === \"function\" ? mutator.params(value, data, type, component) : mutator.params;\r\n\t\t\t\t\t\t\tcolumn.setFieldValue(data, mutator.mutator(value, data, type, params, component));\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn data;\r\n\t}\r\n\r\n\t//apply mutator to new cell value\r\n\ttransformCell(cell, value){\r\n\t\tvar mutator = cell.column.modules.mutate.mutatorEdit || cell.column.modules.mutate.mutator || false,\r\n\t\ttempData = {};\r\n\r\n\t\tif(mutator){\r\n\t\t\ttempData = Object.assign(tempData, cell.row.getData());\r\n\t\t\tcell.column.setFieldValue(tempData, value);\r\n\t\t\treturn mutator.mutator(value, tempData, \"edit\", mutator.params, cell.getComponent());\r\n\t\t}else{\r\n\t\t\treturn value;\r\n\t\t}\r\n\t}\r\n\r\n\tenable(){\r\n\t\tthis.enabled = true;\r\n\t}\r\n\r\n\tdisable(){\r\n\t\tthis.enabled = false;\r\n\t}\r\n}\r\n\r\nMutator.moduleName = \"mutator\";\r\n\r\n//load defaults\r\nMutator.mutators = defaultMutators;\r\n\r\nexport default Mutator;","export default {\r\n\t\"page\":\"page\",\r\n\t\"size\":\"size\",\r\n\t\"sorters\":\"sorters\",\r\n\t\"filters\":\"filters\",\r\n};","export default {\r\n\t\"current_page\":\"current_page\",\r\n\t\"last_page\":\"last_page\",\r\n\t\"data\":\"data\",\r\n};","import Module from '../../core/Module.js';\r\n\r\nimport Helpers from '../../core/Helpers.js';\r\n\r\nimport defaultDataSentNames from './defaults/dataSentNames.js';\r\nimport defaultDataReceivedNames from './defaults/dataReceivedNames.js';\r\n\r\nclass Page extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.mode = \"local\";\r\n\t\tthis.progressiveLoad = false;\r\n\r\n\t\tthis.size = 0;\r\n\t\tthis.page = 1;\r\n\t\tthis.count = 5;\r\n\t\tthis.max = 1;\r\n\r\n\t\tthis.displayIndex = 0; //index in display pipeline\r\n\r\n\t\tthis.initialLoad = true;\r\n\r\n\t\tthis.pageSizes = [];\r\n\r\n\t\tthis.dataReceivedNames = {};\r\n\t\tthis.dataSentNames = {};\r\n\r\n\t\tthis.createElements();\r\n\t}\r\n\r\n\tcreateElements(){\r\n\t\tvar button;\r\n\r\n\t\tthis.element = document.createElement(\"span\");\r\n\t\tthis.element.classList.add(\"tabulator-paginator\");\r\n\r\n\t\tthis.pagesElement = document.createElement(\"span\");\r\n\t\tthis.pagesElement.classList.add(\"tabulator-pages\");\r\n\r\n\t\tbutton = document.createElement(\"button\");\r\n\t\tbutton.classList.add(\"tabulator-page\");\r\n\t\tbutton.setAttribute(\"type\", \"button\");\r\n\t\tbutton.setAttribute(\"role\", \"button\");\r\n\t\tbutton.setAttribute(\"aria-label\", \"\");\r\n\t\tbutton.setAttribute(\"title\", \"\");\r\n\r\n\t\tthis.firstBut = button.cloneNode(true);\r\n\t\tthis.firstBut.setAttribute(\"data-page\", \"first\");\r\n\r\n\t\tthis.prevBut = button.cloneNode(true);\r\n\t\tthis.prevBut.setAttribute(\"data-page\", \"prev\");\r\n\r\n\t\tthis.nextBut = button.cloneNode(true);\r\n\t\tthis.nextBut.setAttribute(\"data-page\", \"next\");\r\n\r\n\t\tthis.lastBut = button.cloneNode(true);\r\n\t\tthis.lastBut.setAttribute(\"data-page\", \"last\");\r\n\r\n\t\tif(this.table.options.paginationSizeSelector){\r\n\t\t\tthis.pageSizeSelect = document.createElement(\"select\");\r\n\t\t\tthis.pageSizeSelect.classList.add(\"tabulator-page-size\");\r\n\t\t}\r\n\t}\r\n\r\n\tgeneratePageSizeSelectList(){\r\n\t\tvar pageSizes = [];\r\n\r\n\t\tif(this.pageSizeSelect){\r\n\r\n\t\t\tif(Array.isArray(this.table.options.paginationSizeSelector)){\r\n\t\t\t\tpageSizes = this.table.options.paginationSizeSelector;\r\n\t\t\t\tthis.pageSizes = pageSizes;\r\n\r\n\t\t\t\tif(this.pageSizes.indexOf(this.size) == -1){\r\n\t\t\t\t\tpageSizes.unshift(this.size);\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\r\n\t\t\t\tif(this.pageSizes.indexOf(this.size) == -1){\r\n\t\t\t\t\tpageSizes = [];\r\n\r\n\t\t\t\t\tfor (let i = 1; i < 5; i++){\r\n\t\t\t\t\t\tpageSizes.push(this.size * i);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tthis.pageSizes = pageSizes;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tpageSizes = this.pageSizes;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\twhile(this.pageSizeSelect.firstChild) this.pageSizeSelect.removeChild(this.pageSizeSelect.firstChild);\r\n\r\n\t\t\tpageSizes.forEach((item) => {\r\n\t\t\t\tvar itemEl = document.createElement(\"option\");\r\n\t\t\t\titemEl.value = item;\r\n\r\n\t\t\t\tif(item === true){\r\n\t\t\t\t\tthis.table.modules.localize.bind(\"pagination|all\", function(value){\r\n\t\t\t\t\t\titemEl.innerHTML = value;\r\n\t\t\t\t\t});\r\n\t\t\t\t}else{\r\n\t\t\t\t\titemEl.innerHTML = item;\r\n\t\t\t\t}\r\n\r\n\r\n\r\n\t\t\t\tthis.pageSizeSelect.appendChild(itemEl);\r\n\t\t\t});\r\n\r\n\t\t\tthis.pageSizeSelect.value = this.size;\r\n\t\t}\r\n\t}\r\n\r\n\t//setup pageination\r\n\tinitialize(hidden){\r\n\t\tvar pageSelectLabel, testElRow, testElCell;\r\n\r\n\t\t//update param names\r\n\t\tthis.dataSentNames = Object.assign({}, Page.defaultDataSentNames);\r\n\t\tthis.dataSentNames = Object.assign(this.dataSentNames, this.table.options.paginationDataSent);\r\n\r\n\t\tthis.dataReceivedNames = Object.assign({}, Page.defaultDataReceivedNames);\r\n\t\tthis.dataReceivedNames = Object.assign(this.dataReceivedNames, this.table.options.paginationDataReceived);\r\n\r\n\t\t//build pagination element\r\n\r\n\t\t//bind localizations\r\n\t\tthis.table.modules.localize.bind(\"pagination|first\", (value) => {\r\n\t\t\tthis.firstBut.innerHTML = value;\r\n\t\t});\r\n\r\n\t\tthis.table.modules.localize.bind(\"pagination|first_title\", (value) => {\r\n\t\t\tthis.firstBut.setAttribute(\"aria-label\", value);\r\n\t\t\tthis.firstBut.setAttribute(\"title\", value);\r\n\t\t});\r\n\r\n\t\tthis.table.modules.localize.bind(\"pagination|prev\", (value) => {\r\n\t\t\tthis.prevBut.innerHTML = value;\r\n\t\t});\r\n\r\n\t\tthis.table.modules.localize.bind(\"pagination|prev_title\", (value) => {\r\n\t\t\tthis.prevBut.setAttribute(\"aria-label\", value);\r\n\t\t\tthis.prevBut.setAttribute(\"title\", value);\r\n\t\t});\r\n\r\n\t\tthis.table.modules.localize.bind(\"pagination|next\", (value) => {\r\n\t\t\tthis.nextBut.innerHTML = value;\r\n\t\t});\r\n\r\n\t\tthis.table.modules.localize.bind(\"pagination|next_title\", (value) => {\r\n\t\t\tthis.nextBut.setAttribute(\"aria-label\", value);\r\n\t\t\tthis.nextBut.setAttribute(\"title\", value);\r\n\t\t});\r\n\r\n\t\tthis.table.modules.localize.bind(\"pagination|last\", (value) => {\r\n\t\t\tthis.lastBut.innerHTML = value;\r\n\t\t});\r\n\r\n\t\tthis.table.modules.localize.bind(\"pagination|last_title\", (value) => {\r\n\t\t\tthis.lastBut.setAttribute(\"aria-label\", value);\r\n\t\t\tthis.lastBut.setAttribute(\"title\", value);\r\n\t\t});\r\n\r\n\t\t//click bindings\r\n\t\tthis.firstBut.addEventListener(\"click\", () => {\r\n\t\t\tthis.setPage(1).then(()=>{}).catch(()=>{});\r\n\t\t});\r\n\r\n\t\tthis.prevBut.addEventListener(\"click\", () => {\r\n\t\t\tthis.previousPage().then(()=>{}).catch(()=>{});\r\n\t\t});\r\n\r\n\t\tthis.nextBut.addEventListener(\"click\", () => {\r\n\t\t\tthis.nextPage().then(()=>{}).catch(()=>{});\r\n\t\t});\r\n\r\n\t\tthis.lastBut.addEventListener(\"click\", () => {\r\n\t\t\tthis.setPage(this.max).then(()=>{}).catch(()=>{});\r\n\t\t});\r\n\r\n\t\tif(this.table.options.paginationElement){\r\n\t\t\tthis.element = this.table.options.paginationElement;\r\n\t\t}\r\n\r\n\t\tif(this.pageSizeSelect){\r\n\t\t\tpageSelectLabel = document.createElement(\"label\");\r\n\r\n\t\t\tthis.table.modules.localize.bind(\"pagination|page_size\", (value) => {\r\n\t\t\t\tthis.pageSizeSelect.setAttribute(\"aria-label\", value);\r\n\t\t\t\tthis.pageSizeSelect.setAttribute(\"title\", value);\r\n\t\t\t\tpageSelectLabel.innerHTML = value;\r\n\t\t\t});\r\n\r\n\t\t\tthis.element.appendChild(pageSelectLabel);\r\n\t\t\tthis.element.appendChild(this.pageSizeSelect);\r\n\r\n\t\t\tthis.pageSizeSelect.addEventListener(\"change\", (e) => {\r\n\t\t\t\tthis.setPageSize(this.pageSizeSelect.value == \"true\" ? true : this.pageSizeSelect.value);\r\n\t\t\t\tthis.setPage(1).then(()=>{}).catch(()=>{});\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\t//append to DOM\r\n\t\tthis.element.appendChild(this.firstBut);\r\n\t\tthis.element.appendChild(this.prevBut);\r\n\t\tthis.element.appendChild(this.pagesElement);\r\n\t\tthis.element.appendChild(this.nextBut);\r\n\t\tthis.element.appendChild(this.lastBut);\r\n\r\n\t\tif(!this.table.options.paginationElement && !hidden){\r\n\t\t\tthis.table.footerManager.append(this.element, this);\r\n\t\t}\r\n\r\n\t\t//set default values\r\n\t\tthis.mode = this.table.options.pagination;\r\n\r\n\t\tif(this.table.options.paginationSize){\r\n\t\t\tthis.size = this.table.options.paginationSize;\r\n\t\t}else{\r\n\t\t\ttestElRow = document.createElement(\"div\");\r\n\t\t\ttestElRow.classList.add(\"tabulator-row\");\r\n\t\t\ttestElRow.style.visibility = hidden;\r\n\r\n\t\t\ttestElCell = document.createElement(\"div\");\r\n\t\t\ttestElCell.classList.add(\"tabulator-cell\");\r\n\t\t\ttestElCell.innerHTML = \"Page Row Test\";\r\n\r\n\t\t\ttestElRow.appendChild(testElCell);\r\n\r\n\t\t\tthis.table.rowManager.getTableElement().appendChild(testElRow);\r\n\r\n\t\t\tthis.size = Math.floor(this.table.rowManager.getElement().clientHeight / testElRow.offsetHeight);\r\n\r\n\t\t\tthis.table.rowManager.getTableElement().removeChild(testElRow);\r\n\t\t}\r\n\r\n\t\t// this.page = this.table.options.paginationInitialPage || 1;\r\n\t\tthis.count = this.table.options.paginationButtonCount;\r\n\r\n\t\tthis.generatePageSizeSelectList();\r\n\t}\r\n\r\n\tinitializeProgressive(mode){\r\n\t\tthis.initialize(true);\r\n\t\tthis.mode = \"progressive_\" + mode;\r\n\t\tthis.progressiveLoad = true;\r\n\t}\r\n\r\n\tsetDisplayIndex(index){\r\n\t\tthis.displayIndex = index;\r\n\t}\r\n\r\n\tgetDisplayIndex(){\r\n\t\treturn this.displayIndex;\r\n\t}\r\n\r\n\t//calculate maximum page from number of rows\r\n\tsetMaxRows(rowCount){\r\n\t\tif(!rowCount){\r\n\t\t\tthis.max = 1;\r\n\t\t}else{\r\n\t\t\tthis.max = this.size === true ? 1 : Math.ceil(rowCount/this.size);\r\n\t\t}\r\n\r\n\t\tif(this.page > this.max){\r\n\t\t\tthis.page = this.max;\r\n\t\t}\r\n\t}\r\n\r\n\t//reset to first page without triggering action\r\n\treset(force, columnsChanged){\r\n\t\tif(this.mode == \"local\" || force){\r\n\t\t\tthis.page = 1;\r\n\t\t}\r\n\r\n\t\tif(columnsChanged){\r\n\t\t\tthis.initialLoad = true;\r\n\t\t}\r\n\r\n\t\treturn true;\r\n\t}\r\n\r\n\t//set the maxmum page\r\n\tsetMaxPage(max){\r\n\r\n\t\tmax = parseInt(max);\r\n\r\n\t\tthis.max = max || 1;\r\n\r\n\t\tif(this.page > this.max){\r\n\t\t\tthis.page = this.max;\r\n\t\t\tthis.trigger();\r\n\t\t}\r\n\t}\r\n\r\n\t//set current page number\r\n\tsetPage(page){\r\n\t\tswitch(page){\r\n\t\t\tcase \"first\":\r\n\t\t\t\treturn this.setPage(1);\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"prev\":\r\n\t\t\t\treturn this.previousPage();\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"next\":\r\n\t\t\t\treturn this.nextPage();\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"last\":\r\n\t\t\t\treturn this.setPage(this.max);\r\n\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\treturn new Promise((resolve, reject) => {\r\n\r\n\t\t\tpage = parseInt(page);\r\n\r\n\t\t\tif((page > 0 && page <= this.max) || this.mode !== \"local\"){\r\n\t\t\t\tthis.page = page;\r\n\t\t\t\tthis.trigger()\r\n\t\t\t\t.then(()=>{\r\n\t\t\t\t\tresolve();\r\n\t\t\t\t})\r\n\t\t\t\t.catch(()=>{\r\n\t\t\t\t\treject();\r\n\t\t\t\t});\r\n\r\n\t\t\t\tif(this.table.options.persistence && this.table.modExists(\"persistence\", true) && this.table.modules.persistence.config.page){\r\n\t\t\t\t\tthis.table.modules.persistence.save(\"page\");\r\n\t\t\t\t}\r\n\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Pagination Error - Requested page is out of range of 1 - \" + this.max + \":\", page);\r\n\t\t\t\treject();\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tsetPageToRow(row){\r\n\t\treturn new Promise((resolve, reject)=>{\r\n\r\n\t\t\tvar rows = this.table.rowManager.getDisplayRows(this.displayIndex - 1);\r\n\t\t\tvar index = rows.indexOf(row);\r\n\r\n\t\t\tif(index > -1){\r\n\t\t\t\tvar page = this.size === true ? 1 : Math.ceil((index + 1) / this.size);\r\n\r\n\t\t\t\tthis.setPage(page)\r\n\t\t\t\t.then(()=>{\r\n\t\t\t\t\tresolve();\r\n\t\t\t\t})\r\n\t\t\t\t.catch(()=>{\r\n\t\t\t\t\treject();\r\n\t\t\t\t});\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Pagination Error - Requested row is not visible\");\r\n\t\t\t\treject();\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tsetPageSize(size){\r\n\t\tif(size !== true){\r\n\t\t\tsize = parseInt(size);\r\n\t\t}\r\n\r\n\t\tif(size > 0){\r\n\t\t\tthis.size = size;\r\n\t\t}\r\n\r\n\t\tif(this.pageSizeSelect){\r\n\t\t\t// this.pageSizeSelect.value = size;\r\n\t\t\tthis.generatePageSizeSelectList();\r\n\t\t}\r\n\r\n\t\tif(this.table.options.persistence && this.table.modExists(\"persistence\", true) && this.table.modules.persistence.config.page){\r\n\t\t\tthis.table.modules.persistence.save(\"page\");\r\n\t\t}\r\n\t}\r\n\r\n\t//setup the pagination buttons\r\n\t_setPageButtons(){\r\n\t\tlet leftSize = Math.floor((this.count-1) / 2);\r\n\t\tlet rightSize = Math.ceil((this.count-1) / 2);\r\n\t\tlet min = this.max - this.page + leftSize + 1 < this.count ? this.max-this.count+1: Math.max(this.page-leftSize,1);\r\n\t\tlet max = this.page <= rightSize? Math.min(this.count, this.max) :Math.min(this.page+rightSize, this.max);\r\n\r\n\t\twhile(this.pagesElement.firstChild) this.pagesElement.removeChild(this.pagesElement.firstChild);\r\n\r\n\t\tif(this.page == 1){\r\n\t\t\tthis.firstBut.disabled = true;\r\n\t\t\tthis.prevBut.disabled = true;\r\n\t\t}else{\r\n\t\t\tthis.firstBut.disabled = false;\r\n\t\t\tthis.prevBut.disabled = false;\r\n\t\t}\r\n\r\n\t\tif(this.page == this.max){\r\n\t\t\tthis.lastBut.disabled = true;\r\n\t\t\tthis.nextBut.disabled = true;\r\n\t\t}else{\r\n\t\t\tthis.lastBut.disabled = false;\r\n\t\t\tthis.nextBut.disabled = false;\r\n\t\t}\r\n\r\n\t\tfor(let i = min; i <= max; i++){\r\n\t\t\tif(i>0 && i <= this.max){\r\n\t\t\t\tthis.pagesElement.appendChild(this._generatePageButton(i));\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.footerRedraw();\r\n\t}\r\n\r\n\t_generatePageButton(page){\r\n\t\tvar button = document.createElement(\"button\");\r\n\r\n\t\tbutton.classList.add(\"tabulator-page\");\r\n\t\tif(page == this.page){\r\n\t\t\tbutton.classList.add(\"active\");\r\n\t\t}\r\n\r\n\t\tbutton.setAttribute(\"type\", \"button\");\r\n\t\tbutton.setAttribute(\"role\", \"button\");\r\n\r\n\t\tthis.table.modules.localize.bind(\"pagination|page_title\", (value) => {\r\n\t\t\tbutton.setAttribute(\"aria-label\", value + \" \" + page);\r\n\t\t\tbutton.setAttribute(\"title\", value + \" \" + page);\r\n\t\t});\r\n\r\n\t\tbutton.setAttribute(\"data-page\", page);\r\n\t\tbutton.textContent = page;\r\n\r\n\t\tbutton.addEventListener(\"click\", (e) => {\r\n\t\t\tthis.setPage(page).then(()=>{}).catch(()=>{});\r\n\t\t});\r\n\r\n\t\treturn button;\r\n\t}\r\n\r\n\t//previous page\r\n\tpreviousPage(){\r\n\t\treturn new Promise((resolve, reject)=>{\r\n\t\t\tif(this.page > 1){\r\n\t\t\t\tthis.page--;\r\n\t\t\t\tthis.trigger()\r\n\t\t\t\t.then(()=>{\r\n\t\t\t\t\tresolve();\r\n\t\t\t\t})\r\n\t\t\t\t.catch(()=>{\r\n\t\t\t\t\treject();\r\n\t\t\t\t});\r\n\r\n\t\t\t\tif(this.table.options.persistence && this.table.modExists(\"persistence\", true) && this.table.modules.persistence.config.page){\r\n\t\t\t\t\tthis.table.modules.persistence.save(\"page\");\r\n\t\t\t\t}\r\n\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Pagination Error - Previous page would be less than page 1:\", 0);\r\n\t\t\t\treject()\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t//next page\r\n\tnextPage(){\r\n\t\treturn new Promise((resolve, reject)=>{\r\n\t\t\tif(this.page < this.max){\r\n\t\t\t\tthis.page++;\r\n\t\t\t\tthis.trigger()\r\n\t\t\t\t.then(()=>{\r\n\t\t\t\t\tresolve();\r\n\t\t\t\t})\r\n\t\t\t\t.catch(()=>{\r\n\t\t\t\t\treject();\r\n\t\t\t\t});\r\n\r\n\t\t\t\tif(this.table.options.persistence && this.table.modExists(\"persistence\", true) && this.table.modules.persistence.config.page){\r\n\t\t\t\t\tthis.table.modules.persistence.save(\"page\");\r\n\t\t\t\t}\r\n\r\n\t\t\t}else{\r\n\t\t\t\tif(!this.progressiveLoad){\r\n\t\t\t\t\tconsole.warn(\"Pagination Error - Next page would be greater than maximum page of \" + this.max + \":\", this.max + 1);\r\n\t\t\t\t}\r\n\t\t\t\treject();\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t//return current page number\r\n\tgetPage(){\r\n\t\treturn this.page;\r\n\t}\r\n\r\n\t//return max page number\r\n\tgetPageMax(){\r\n\t\treturn this.max;\r\n\t}\r\n\r\n\tgetPageSize(size){\r\n\t\treturn this.size;\r\n\t}\r\n\r\n\tgetMode(){\r\n\t\treturn this.mode;\r\n\t}\r\n\r\n\t//return appropriate rows for current page\r\n\tgetRows(data){\r\n\t\tvar output, start, end;\r\n\r\n\t\tif(this.mode == \"local\"){\r\n\t\t\toutput = [];\r\n\r\n\t\t\tif(this.size === true){\r\n\t\t\t\tstart = 0;\r\n\t\t\t\tend = data.length;\r\n\t\t\t}else{\r\n\t\t\t\tstart = this.size * (this.page - 1);\r\n\t\t\t\tend = start + parseInt(this.size);\r\n\t\t\t}\r\n\r\n\r\n\t\t\tthis._setPageButtons();\r\n\r\n\t\t\tfor(let i = start; i < end; i++){\r\n\t\t\t\tif(data[i]){\r\n\t\t\t\t\toutput.push(data[i]);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn output;\r\n\t\t}else{\r\n\t\t\tthis._setPageButtons();\r\n\r\n\t\t\treturn data.slice(0);\r\n\t\t}\r\n\t}\r\n\r\n\ttrigger(){\r\n\t\tvar left;\r\n\r\n\t\treturn new Promise((resolve, reject)=>{\r\n\r\n\t\t\tswitch(this.mode){\r\n\t\t\t\tcase \"local\":\r\n\t\t\t\tleft = this.table.rowManager.scrollLeft;\r\n\r\n\t\t\t\tthis.table.rowManager.refreshActiveData(\"page\");\r\n\t\t\t\tthis.table.rowManager.scrollHorizontal(left);\r\n\r\n\t\t\t\tthis.table.options.pageLoaded.call(this.table, this.getPage());\r\n\t\t\t\tresolve();\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"remote\":\r\n\t\t\t\tcase \"progressive_load\":\r\n\t\t\t\tcase \"progressive_scroll\":\r\n\t\t\t\tthis.table.modules.ajax.blockActiveRequest();\r\n\t\t\t\tthis._getRemotePage()\r\n\t\t\t\t.then(()=>{\r\n\t\t\t\t\tresolve();\r\n\t\t\t\t})\r\n\t\t\t\t.catch(()=>{\r\n\t\t\t\t\treject();\r\n\t\t\t\t});\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tdefault:\r\n\t\t\t\tconsole.warn(\"Pagination Error - no such pagination mode:\", this.mode);\r\n\t\t\t\treject();\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t_getRemotePage(){\r\n\t\tvar oldParams, pageParams;\r\n\r\n\t\treturn new Promise((resolve, reject) => {\r\n\r\n\t\t\tif(!this.table.modExists(\"ajax\", true)){\r\n\t\t\t\treject();\r\n\t\t\t}\r\n\r\n\t\t\t//record old params and restore after request has been made\r\n\t\t\toldParams = Helpers.deepClone(this.table.modules.ajax.getParams() || {});\r\n\t\t\tpageParams = this.table.modules.ajax.getParams();\r\n\r\n\t\t\t//configure request params\r\n\t\t\tpageParams[this.dataSentNames.page] = this.page;\r\n\r\n\t\t\t//set page size if defined\r\n\t\t\tif(this.size){\r\n\t\t\t\tpageParams[this.dataSentNames.size] = this.size;\r\n\t\t\t}\r\n\r\n\t\t\t//set sort data if defined\r\n\t\t\tif(this.table.options.ajaxSorting && this.table.modExists(\"sort\")){\r\n\t\t\t\tlet sorters = this.table.modules.sort.getSort();\r\n\r\n\t\t\t\tsorters.forEach((item) => {\r\n\t\t\t\t\tdelete item.column;\r\n\t\t\t\t});\r\n\r\n\t\t\t\tpageParams[this.dataSentNames.sorters] = sorters;\r\n\t\t\t}\r\n\r\n\t\t\t//set filter data if defined\r\n\t\t\tif(this.table.options.ajaxFiltering && this.table.modExists(\"filter\")){\r\n\t\t\t\tlet filters = this.table.modules.filter.getFilters(true, true);\r\n\t\t\t\tpageParams[this.dataSentNames.filters] = filters;\r\n\t\t\t}\r\n\r\n\t\t\tthis.table.modules.ajax.setParams(pageParams);\r\n\r\n\t\t\tthis.table.modules.ajax.sendRequest(this.progressiveLoad)\r\n\t\t\t.then((data)=>{\r\n\t\t\t\tthis._parseRemoteData(data);\r\n\t\t\t\tresolve();\r\n\t\t\t})\r\n\t\t\t.catch((e)=>{reject()});\r\n\r\n\t\t\tthis.table.modules.ajax.setParams(oldParams);\r\n\t\t});\r\n\t}\r\n\r\n\t_parseRemoteData(data){\r\n\t\tvar left, data, margin;\r\n\r\n\t\tif(typeof data[this.dataReceivedNames.last_page] === \"undefined\"){\r\n\t\t\tconsole.warn(\"Remote Pagination Error - Server response missing '\" + this.dataReceivedNames.last_page + \"' property\");\r\n\t\t}\r\n\r\n\t\tif(data[this.dataReceivedNames.data]){\r\n\t\t\tthis.max = parseInt(data[this.dataReceivedNames.last_page]) || 1;\r\n\r\n\t\t\tif(this.progressiveLoad){\r\n\t\t\t\tswitch(this.mode){\r\n\t\t\t\t\tcase \"progressive_load\":\r\n\r\n\t\t\t\t\tif(this.page == 1){\r\n\t\t\t\t\t\tthis.table.rowManager.setData(data[this.dataReceivedNames.data], false, this.initialLoad && this.page == 1)\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tthis.table.rowManager.addRows(data[this.dataReceivedNames.data]);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif(this.page < this.max){\r\n\t\t\t\t\t\tsetTimeout(() => {\r\n\t\t\t\t\t\t\tthis.nextPage().then(()=>{}).catch(()=>{});\r\n\t\t\t\t\t\t}, this.table.options.ajaxProgressiveLoadDelay);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase \"progressive_scroll\":\r\n\t\t\t\t\tdata = this.table.rowManager.getData().concat(data[this.dataReceivedNames.data]);\r\n\r\n\t\t\t\t\tthis.table.rowManager.setData(data, true, this.initialLoad && this.page == 1);\r\n\r\n\t\t\t\t\tmargin = this.table.options.ajaxProgressiveLoadScrollMargin || (this.table.rowManager.element.clientHeight * 2);\r\n\r\n\t\t\t\t\tif(this.table.rowManager.element.scrollHeight <= (this.table.rowManager.element.clientHeight + margin)){\r\n\t\t\t\t\t\tthis.nextPage().then(()=>{}).catch(()=>{});\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tleft = this.table.rowManager.scrollLeft;\r\n\r\n\t\t\t\tthis.table.rowManager.setData(data[this.dataReceivedNames.data], false, this.initialLoad && this.page == 1);\r\n\r\n\t\t\t\tthis.table.rowManager.scrollHorizontal(left);\r\n\r\n\t\t\t\tthis.table.columnManager.scrollHorizontal(left);\r\n\r\n\t\t\t\tthis.table.options.pageLoaded.call(this.table, this.getPage());\r\n\t\t\t}\r\n\r\n\t\t\tthis.initialLoad = false;\r\n\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Remote Pagination Error - Server response missing '\" + this.dataReceivedNames.data + \"' property\");\r\n\t\t}\r\n\t}\r\n\r\n\t//handle the footer element being redrawn\r\n\tfooterRedraw(){\r\n\t\tvar footer = this.table.footerManager.element;\r\n\r\n\t\tif((Math.ceil(footer.clientWidth) - footer.scrollWidth) < 0){\r\n\t\t\tthis.pagesElement.style.display = 'none';\r\n\t\t}else{\r\n\t\t\tthis.pagesElement.style.display = '';\r\n\r\n\t\t\tif((Math.ceil(footer.clientWidth) - footer.scrollWidth) < 0){\r\n\t\t\t\tthis.pagesElement.style.display = 'none';\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n\r\nPage.moduleName = \"page\";\r\n\r\n//load defaults\r\nPage.defaultDataSentNames = defaultDataSentNames;\r\nPage.defaultDataReceivedNames = defaultDataReceivedNames;\r\n\r\nexport default Page;","// read peristence information from storage\r\nexport default {\r\n\tlocal:function(id, type){\r\n\t\tvar data = localStorage.getItem(id + \"-\" + type);\r\n\r\n\t\treturn data ? JSON.parse(data) : false;\r\n\t},\r\n\tcookie:function(id, type){\r\n\t\tvar cookie = document.cookie,\r\n\t\tkey = id + \"-\" + type,\r\n\t\tcookiePos = cookie.indexOf(key + \"=\"),\r\n\t\tend, data;\r\n\r\n\t\t//if cookie exists, decode and load column data into tabulator\r\n\t\tif(cookiePos > -1){\r\n\t\t\tcookie = cookie.substr(cookiePos);\r\n\r\n\t\t\tend = cookie.indexOf(\";\");\r\n\r\n\t\t\tif(end > -1){\r\n\t\t\t\tcookie = cookie.substr(0, end);\r\n\t\t\t}\r\n\r\n\t\t\tdata = cookie.replace(key + \"=\", \"\");\r\n\t\t}\r\n\r\n\t\treturn data ? JSON.parse(data) : false;\r\n\t}\r\n};","//write persistence information to storage\r\nexport default {\r\n\tlocal:function(id, type, data){\r\n\t\tlocalStorage.setItem(id + \"-\" + type, JSON.stringify(data));\r\n\t},\r\n\tcookie:function(id, type, data){\r\n\t\tvar expireDate = new Date();\r\n\r\n\t\texpireDate.setDate(expireDate.getDate() + 10000);\r\n\r\n\t\tdocument.cookie = id + \"-\" + type + \"=\" + JSON.stringify(data) + \"; expires=\" + expireDate.toUTCString();\r\n\t}\r\n};","import Module from '../../core/Module.js';\r\n\r\nimport defaultReaders from './defaults/readers.js';\r\nimport defaultWriters from './defaults/writers.js';\r\n\r\nclass Persistence extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.mode = \"\";\r\n\t\tthis.id = \"\";\r\n\t\t// this.persistProps = [\"field\", \"width\", \"visible\"];\r\n\t\tthis.defWatcherBlock = false;\r\n\t\tthis.config = {};\r\n\t\tthis.readFunc = false;\r\n\t\tthis.writeFunc = false;\r\n\t}\r\n\r\n\t// Test for whether localStorage is available for use.\r\n\tlocalStorageTest() {\r\n\t\tvar testKey = \"_tabulator_test\";\r\n\r\n\t\ttry {\r\n\t\t\twindow.localStorage.setItem( testKey, testKey);\r\n\t\t\twindow.localStorage.removeItem( testKey );\r\n\t\t\treturn true;\r\n\t\t} catch(e) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\t//setup parameters\r\n\tinitialize(){\r\n\t\t//determine persistent layout storage type\r\n\t\tvar mode = this.table.options.persistenceMode,\r\n\t\tid = this.table.options.persistenceID,\r\n\t\tretreivedData;\r\n\r\n\t\tthis.mode = mode !== true ? mode : (this.localStorageTest() ? \"local\" : \"cookie\");\r\n\r\n\t\tif(this.table.options.persistenceReaderFunc){\r\n\t\t\tif(typeof this.table.options.persistenceReaderFunc === \"function\"){\r\n\t\t\t\tthis.readFunc = this.table.options.persistenceReaderFunc;\r\n\t\t\t}else{\r\n\t\t\t\tif(Persistence.readers[this.table.options.persistenceReaderFunc]){\r\n\t\t\t\t\tthis.readFunc = Persistence.readers[this.table.options.persistenceReaderFunc];\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.warn(\"Persistence Read Error - invalid reader set\", this.table.options.persistenceReaderFunc);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tif(Persistence.readers[this.mode]){\r\n\t\t\t\tthis.readFunc = Persistence.readers[this.mode];\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Persistence Read Error - invalid reader set\", this.mode);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(this.table.options.persistenceWriterFunc){\r\n\t\t\tif(typeof this.table.options.persistenceWriterFunc === \"function\"){\r\n\t\t\t\tthis.writeFunc = this.table.options.persistenceWriterFunc;\r\n\t\t\t}else{\r\n\t\t\t\tif(Persistence.writers[this.table.options.persistenceWriterFunc]){\r\n\t\t\t\t\tthis.writeFunc = Persistence.writers[this.table.options.persistenceWriterFunc];\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.warn(\"Persistence Write Error - invalid reader set\", this.table.options.persistenceWriterFunc);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tif(Persistence.writers[this.mode]){\r\n\t\t\t\tthis.writeFunc = Persistence.writers[this.mode];\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Persistence Write Error - invalid writer set\", this.mode);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//set storage tag\r\n\t\tthis.id = \"tabulator-\" + (id || (this.table.element.getAttribute(\"id\") || \"\"));\r\n\r\n\t\tthis.config = {\r\n\t\t\tsort:this.table.options.persistence === true || this.table.options.persistence.sort,\r\n\t\t\tfilter:this.table.options.persistence === true || this.table.options.persistence.filter,\r\n\t\t\tgroup:this.table.options.persistence === true || this.table.options.persistence.group,\r\n\t\t\tpage:this.table.options.persistence === true || this.table.options.persistence.page,\r\n\t\t\tcolumns:this.table.options.persistence === true ? [\"title\", \"width\", \"visible\"] : this.table.options.persistence.columns,\r\n\t\t};\r\n\r\n\t\t//load pagination data if needed\r\n\t\tif(this.config.page){\r\n\t\t\tretreivedData = this.retreiveData(\"page\");\r\n\r\n\t\t\tif(retreivedData){\r\n\t\t\t\tif(typeof retreivedData.paginationSize !== \"undefined\" && (this.config.page === true || this.config.page.size)){\r\n\t\t\t\t\tthis.table.options.paginationSize = retreivedData.paginationSize;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(typeof retreivedData.paginationInitialPage !== \"undefined\" && (this.config.page === true || this.config.page.page)){\r\n\t\t\t\t\tthis.table.options.paginationInitialPage = retreivedData.paginationInitialPage;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//load group data if needed\r\n\t\tif(this.config.group){\r\n\t\t\tretreivedData = this.retreiveData(\"group\");\r\n\r\n\t\t\tif(retreivedData){\r\n\t\t\t\tif(typeof retreivedData.groupBy !== \"undefined\" && (this.config.group === true || this.config.group.groupBy)){\r\n\t\t\t\t\tthis.table.options.groupBy = retreivedData.groupBy;\r\n\t\t\t\t}\r\n\t\t\t\tif(typeof retreivedData.groupStartOpen !== \"undefined\" && (this.config.group === true || this.config.group.groupStartOpen)){\r\n\t\t\t\t\tthis.table.options.groupStartOpen = retreivedData.groupStartOpen;\r\n\t\t\t\t}\r\n\t\t\t\tif(typeof retreivedData.groupHeader !== \"undefined\" && (this.config.group === true || this.config.group.groupHeader)){\r\n\t\t\t\t\tthis.table.options.groupHeader = retreivedData.groupHeader;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(this.config.columns){\r\n\t\t\tthis.table.options.columns = this.load(\"columns\", this.table.options.columns);\r\n\t\t}\r\n\t}\r\n\r\n\tinitializeColumn(column){\r\n\t\tvar def, keys;\r\n\r\n\t\tif(this.config.columns){\r\n\t\t\tthis.defWatcherBlock = true;\r\n\r\n\t\t\tdef = column.getDefinition();\r\n\r\n\t\t\tkeys = this.config.columns === true ? Object.keys(def) : this.config.columns;\r\n\r\n\t\t\tkeys.forEach((key)=>{\r\n\t\t\t\tvar props = Object.getOwnPropertyDescriptor(def, key);\r\n\t\t\t\tvar value = def[key];\r\n\t\t\t\tif(props){\r\n\t\t\t\t\tObject.defineProperty(def, key, {\r\n\t\t\t\t\t\tset: function(newValue){\r\n\t\t\t\t\t\t\tvalue = newValue;\r\n\r\n\t\t\t\t\t\t\tif(!this.defWatcherBlock){\r\n\t\t\t\t\t\t\t\tthis.save(\"columns\");\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\tif(props.set){\r\n\t\t\t\t\t\t\t\tprops.set(newValue);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tget:function(){\r\n\t\t\t\t\t\t\tif(props.get){\r\n\t\t\t\t\t\t\t\tprops.get();\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\treturn value;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tthis.defWatcherBlock = false;\r\n\t\t}\r\n\t}\r\n\r\n\t//load saved definitions\r\n\tload(type, current){\r\n\t\tvar data = this.retreiveData(type);\r\n\r\n\t\tif(current){\r\n\t\t\tdata = data ? this.mergeDefinition(current, data) : current;\r\n\t\t}\r\n\r\n\t\treturn data;\r\n\t}\r\n\r\n\t//retreive data from memory\r\n\tretreiveData(type){\r\n\t\treturn this.readFunc ? this.readFunc(this.id, type) : false;\r\n\t}\r\n\r\n\t//merge old and new column definitions\r\n\tmergeDefinition(oldCols, newCols){\r\n\t\tvar output = [];\r\n\r\n\t\tnewCols = newCols || [];\r\n\r\n\t\tnewCols.forEach((column, to) => {\r\n\t\t\tvar from = this._findColumn(oldCols, column),\r\n\t\t\tkeys;\r\n\r\n\t\t\tif(from){\r\n\t\t\t\tif(this.config.columns === true || this.config.columns == undefined){\r\n\t\t\t\t\tkeys = Object.keys(from);\r\n\t\t\t\t\tkeys.push(\"width\");\r\n\t\t\t\t}else{\r\n\t\t\t\t\tkeys = this.config.columns;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tkeys.forEach((key)=>{\r\n\t\t\t\t\tif(key !== \"columns\" && typeof column[key] !== \"undefined\"){\r\n\t\t\t\t\t\tfrom[key] = column[key];\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\tif(from.columns){\r\n\t\t\t\t\tfrom.columns = this.mergeDefinition(from.columns, column.columns);\r\n\t\t\t\t}\r\n\r\n\t\t\t\toutput.push(from);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\toldCols.forEach((column, i) => {\r\n\t\t\tvar from = this._findColumn(newCols, column);\r\n\r\n\t\t\tif (!from) {\r\n\t\t\t\tif(output.length>i){\r\n\t\t\t\t\toutput.splice(i, 0, column);\r\n\t\t\t\t}else{\r\n\t\t\t\t\toutput.push(column);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\t//find matching columns\r\n\t_findColumn(columns, subject){\r\n\t\tvar type = subject.columns ? \"group\" : (subject.field ? \"field\" : \"object\");\r\n\r\n\t\treturn columns.find(function(col){\r\n\t\t\tswitch(type){\r\n\t\t\t\tcase \"group\":\r\n\t\t\t\treturn col.title === subject.title && col.columns.length === subject.columns.length;\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"field\":\r\n\t\t\t\treturn col.field === subject.field;\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"object\":\r\n\t\t\t\treturn col === subject;\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t//save data\r\n\tsave(type){\r\n\t\tvar data = {};\r\n\r\n\t\tswitch(type){\r\n\t\t\tcase \"columns\":\r\n\t\t\tdata = this.parseColumns(this.table.columnManager.getColumns())\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"filter\":\r\n\t\t\tdata = this.table.modules.filter.getFilters();\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"sort\":\r\n\t\t\tdata = this.validateSorters(this.table.modules.sort.getSort());\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"group\":\r\n\t\t\tdata = this.getGroupConfig();\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"page\":\r\n\t\t\tdata = this.getPageConfig();\r\n\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\tif(this.writeFunc){\r\n\t\t\tthis.writeFunc(this.id, type, data);\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t//ensure sorters contain no function data\r\n\tvalidateSorters(data){\r\n\t\tdata.forEach(function(item){\r\n\t\t\titem.column = item.field;\r\n\t\t\tdelete item.field;\r\n\t\t});\r\n\r\n\t\treturn data;\r\n\t}\r\n\r\n\tgetGroupConfig(){\r\n\t\tvar data = {};\r\n\r\n\t\tif(this.config.group){\r\n\t\t\tif(this.config.group === true || this.config.group.groupBy){\r\n\t\t\t\tdata.groupBy = this.table.options.groupBy;\r\n\t\t\t}\r\n\r\n\t\t\tif(this.config.group === true || this.config.group.groupStartOpen){\r\n\t\t\t\tdata.groupStartOpen = this.table.options.groupStartOpen;\r\n\t\t\t}\r\n\r\n\t\t\tif(this.config.group === true || this.config.group.groupHeader){\r\n\t\t\t\tdata.groupHeader = this.table.options.groupHeader;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn data;\r\n\t}\r\n\r\n\tgetPageConfig(){\r\n\t\tvar data = {};\r\n\r\n\t\tif(this.config.page){\r\n\t\t\tif(this.config.page === true || this.config.page.size){\r\n\t\t\t\tdata.paginationSize = this.table.modules.page.getPageSize();\r\n\t\t\t}\r\n\r\n\t\t\tif(this.config.page === true || this.config.page.page){\r\n\t\t\t\tdata.paginationInitialPage = this.table.modules.page.getPage();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn data;\r\n\t}\r\n\r\n\r\n\t//parse columns for data to store\r\n\tparseColumns(columns){\r\n\t\tvar definitions = [],\r\n\t\texcludedKeys = [\"headerContextMenu\", \"headerMenu\", \"contextMenu\", \"clickMenu\"];\r\n\r\n\t\tcolumns.forEach((column) => {\r\n\t\t\tvar defStore = {},\r\n\t\t\tcolDef = column.getDefinition(),\r\n\t\t\tkeys;\r\n\r\n\t\t\tif(column.isGroup){\r\n\t\t\t\tdefStore.title = colDef.title;\r\n\t\t\t\tdefStore.columns = this.parseColumns(column.getColumns());\r\n\t\t\t}else{\r\n\t\t\t\tdefStore.field = column.getField();\r\n\r\n\t\t\t\tif(this.config.columns === true || this.config.columns == undefined){\r\n\t\t\t\t\tkeys = Object.keys(colDef);\r\n\t\t\t\t\tkeys.push(\"width\");\r\n\t\t\t\t}else{\r\n\t\t\t\t\tkeys = this.config.columns;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tkeys.forEach((key)=>{\r\n\t\t\t\t\tswitch(key){\r\n\t\t\t\t\t\tcase \"width\":\r\n\t\t\t\t\t\tdefStore.width = column.getWidth();\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase \"visible\":\r\n\t\t\t\t\t\tdefStore.visible = column.visible;\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\tdefault:\r\n\t\t\t\t\t\tif(typeof colDef[key] !== \"function\" && excludedKeys.indexOf(key) === -1){\r\n\t\t\t\t\t\t\tdefStore[key] = colDef[key];\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\tdefinitions.push(defStore);\r\n\t\t});\r\n\r\n\t\treturn definitions;\r\n\t}\r\n}\r\n\r\nPersistence.moduleName = \"persistence\";\r\n\r\n//load defaults\r\nPersistence.readers = defaultReaders;\r\nPersistence.writers = defaultWriters;\r\n\r\nexport default Persistence;","import Module from '../../core/Module.js';\r\n\r\nclass Print extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.element = false;\r\n\t\tthis.manualBlock = false;\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\twindow.addEventListener(\"beforeprint\", this.replaceTable.bind(this));\r\n\t\twindow.addEventListener(\"afterprint\", this.cleanup.bind(this));\r\n\t}\r\n\r\n\treplaceTable(){\r\n\t\tif(!this.manualBlock){\r\n\t\t\tthis.element = document.createElement(\"div\");\r\n\t\t\tthis.element.classList.add(\"tabulator-print-table\");\r\n\r\n\t\t\tthis.element.appendChild(this.table.modules.export.genereateTable(this.table.options.printConfig, this.table.options.printStyled, this.table.options.printRowRange, \"print\"));\r\n\r\n\t\t\tthis.table.element.style.display = \"none\";\r\n\r\n\t\t\tthis.table.element.parentNode.insertBefore(this.element, this.table.element);\r\n\t\t}\r\n\t}\r\n\r\n\tcleanup(){\r\n\t\tdocument.body.classList.remove(\"tabulator-print-fullscreen-hide\");\r\n\r\n\t\tif(this.element && this.element.parentNode){\r\n\t\t\tthis.element.parentNode.removeChild(this.element);\r\n\t\t\tthis.table.element.style.display = \"\";\r\n\t\t}\r\n\t}\r\n\r\n\tprintFullscreen(visible, style, config){\r\n\t\tvar scrollX = window.scrollX,\r\n\t\tscrollY = window.scrollY,\r\n\t\theaderEl = document.createElement(\"div\"),\r\n\t\tfooterEl = document.createElement(\"div\"),\r\n\t\ttableEl = this.table.modules.export.genereateTable(typeof config != \"undefined\" ? config : this.table.options.printConfig, typeof style != \"undefined\" ? style : this.table.options.printStyled, visible || this.table.options.printRowRange, \"print\"),\r\n\t\theaderContent, footerContent;\r\n\r\n\t\tthis.manualBlock = true;\r\n\r\n\t\tthis.element = document.createElement(\"div\");\r\n\t\tthis.element.classList.add(\"tabulator-print-fullscreen\");\r\n\r\n\t\tif(this.table.options.printHeader){\r\n\t\t\theaderEl.classList.add(\"tabulator-print-header\");\r\n\r\n\t\t\theaderContent = typeof this.table.options.printHeader == \"function\" ? this.table.options.printHeader.call(this.table) : this.table.options.printHeader;\r\n\r\n\t\t\tif(typeof headerContent == \"string\"){\r\n\t\t\t\theaderEl.innerHTML = headerContent;\r\n\t\t\t}else{\r\n\t\t\t\theaderEl.appendChild(headerContent);\r\n\t\t\t}\r\n\r\n\t\t\tthis.element.appendChild(headerEl);\r\n\t\t}\r\n\r\n\t\tthis.element.appendChild(tableEl);\r\n\r\n\t\tif(this.table.options.printFooter){\r\n\t\t\tfooterEl.classList.add(\"tabulator-print-footer\");\r\n\r\n\t\t\tfooterContent = typeof this.table.options.printFooter == \"function\" ? this.table.options.printFooter.call(this.table) : this.table.options.printFooter;\r\n\r\n\r\n\t\t\tif(typeof footerContent == \"string\"){\r\n\t\t\t\tfooterEl.innerHTML = footerContent;\r\n\t\t\t}else{\r\n\t\t\t\tfooterEl.appendChild(footerContent);\r\n\t\t\t}\r\n\r\n\t\t\tthis.element.appendChild(footerEl);\r\n\t\t}\r\n\r\n\t\tdocument.body.classList.add(\"tabulator-print-fullscreen-hide\");\r\n\t\tdocument.body.appendChild(this.element);\r\n\r\n\t\tif(this.table.options.printFormatter){\r\n\t\t\tthis.table.options.printFormatter(this.element, tableEl);\r\n\t\t}\r\n\r\n\t\twindow.print();\r\n\r\n\t\tthis.cleanup();\r\n\r\n\t\twindow.scrollTo(scrollX, scrollY);\r\n\r\n\t\tthis.manualBlock = false;\r\n\t}\r\n}\r\n\r\nPrint.moduleName = \"print\";\r\n\r\nexport default Print;","import Module from '../../core/Module.js';\r\n\r\nclass ReactiveData extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.data = false;\r\n\t\tthis.blocked = false; //block reactivity while performing update\r\n\t\tthis.origFuncs = {}; // hold original data array functions to allow replacement after data is done with\r\n\t\tthis.currentVersion = 0;\r\n\t}\r\n\r\n\twatchData(data){\r\n\t\tvar self = this,\r\n\t\tpushFunc, version;\r\n\r\n\t\tthis.currentVersion ++;\r\n\r\n\t\tversion = this.currentVersion;\r\n\r\n\t\tself.unwatchData();\r\n\r\n\t\tself.data = data;\r\n\r\n\t\t//override array push function\r\n\t\tself.origFuncs.push = data.push;\r\n\r\n\t\tObject.defineProperty(self.data, \"push\", {\r\n\t\t\tenumerable: false,\r\n\t\t\tconfigurable: true,\r\n\t\t\tvalue: function () {\r\n\t\t\t\tvar args = Array.from(arguments);\r\n\r\n\t\t\t\tif(!self.blocked && version === self.currentVersion){\r\n\t\t\t\t\targs.forEach(function (arg){\r\n\t\t\t\t\t\tself.table.rowManager.addRowActual(arg, false);\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn self.origFuncs.push.apply(data, arguments);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\t//override array unshift function\r\n\t\tself.origFuncs.unshift = data.unshift;\r\n\r\n\t\tObject.defineProperty(self.data, \"unshift\", {\r\n\t\t\tenumerable: false,\r\n\t\t\tconfigurable: true,\r\n\t\t\tvalue: function () {\r\n\t\t\t\tvar args = Array.from(arguments);\r\n\r\n\t\t\t\tif(!self.blocked && version === self.currentVersion){\r\n\t\t\t\t\targs.forEach(function (arg){\r\n\t\t\t\t\t\tself.table.rowManager.addRowActual(arg, true);\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn self.origFuncs.unshift.apply(data, arguments);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\r\n\t\t//override array shift function\r\n\t\tself.origFuncs.shift = data.shift;\r\n\r\n\t\tObject.defineProperty(self.data, \"shift\", {\r\n\t\t\tenumerable: false,\r\n\t\t\tconfigurable: true,\r\n\t\t\tvalue: function () {\r\n\t\t\t\tvar row;\r\n\r\n\t\t\t\tif(!self.blocked && version === self.currentVersion){\r\n\t\t\t\t\tif(self.data.length){\r\n\t\t\t\t\t\trow = self.table.rowManager.getRowFromDataObject(self.data[0]);\r\n\r\n\t\t\t\t\t\tif(row){\r\n\t\t\t\t\t\t\trow.deleteActual();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn self.origFuncs.shift.call(data);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\t//override array pop function\r\n\t\tself.origFuncs.pop = data.pop;\r\n\r\n\t\tObject.defineProperty(self.data, \"pop\", {\r\n\t\t\tenumerable: false,\r\n\t\t\tconfigurable: true,\r\n\t\t\tvalue: function () {\r\n\t\t\t\tvar row;\r\n\t\t\t\tif(!self.blocked && version === self.currentVersion){\r\n\t\t\t\t\tif(self.data.length){\r\n\t\t\t\t\t\trow = self.table.rowManager.getRowFromDataObject(self.data[self.data.length - 1]);\r\n\r\n\t\t\t\t\t\tif(row){\r\n\t\t\t\t\t\t\trow.deleteActual();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn self.origFuncs.pop.call(data);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\r\n\t\t//override array splice function\r\n\t\tself.origFuncs.splice = data.splice;\r\n\r\n\t\tObject.defineProperty(self.data, \"splice\", {\r\n\t\t\tenumerable: false,\r\n\t\t\tconfigurable: true,\r\n\t\t\tvalue: function () {\r\n\t\t\t\tvar args = Array.from(arguments),\r\n\t\t\t\tstart = args[0] < 0 ? data.length + args[0] : args[0],\r\n\t\t\t\tend = args[1],\r\n\t\t\t\tnewRows = args[2] ? args.slice(2) : false,\r\n\t\t\t\tstartRow;\r\n\r\n\t\t\t\tif(!self.blocked && version === self.currentVersion){\r\n\r\n\t\t\t\t\t//add new rows\r\n\t\t\t\t\tif(newRows){\r\n\t\t\t\t\t\tstartRow = data[start] ? self.table.rowManager.getRowFromDataObject(data[start]) : false;\r\n\r\n\t\t\t\t\t\tif(startRow){\r\n\t\t\t\t\t\t\tnewRows.forEach(function(rowData){\r\n\t\t\t\t\t\t\t\tself.table.rowManager.addRowActual(rowData, true, startRow, true);\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\tnewRows = newRows.slice().reverse();\r\n\r\n\t\t\t\t\t\t\tnewRows.forEach(function(rowData){\r\n\t\t\t\t\t\t\t\tself.table.rowManager.addRowActual(rowData, true, false, true);\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t//delete removed rows\r\n\t\t\t\t\tif(end !== 0){\r\n\t\t\t\t\t\tvar oldRows = data.slice(start, typeof args[1] === \"undefined\" ? args[1] : start + end);\r\n\r\n\t\t\t\t\t\toldRows.forEach(function(rowData, i){\r\n\t\t\t\t\t\t\tvar row = self.table.rowManager.getRowFromDataObject(rowData);\r\n\r\n\t\t\t\t\t\t\tif(row){\r\n\t\t\t\t\t\t\t\trow.deleteActual(i !== oldRows.length - 1);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif(newRows || end !== 0){\r\n\t\t\t\t\t\tself.table.rowManager.reRenderInPosition();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn self.origFuncs.splice.apply(data, arguments);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tunwatchData(){\r\n\t\tif(this.data !== false){\r\n\t\t\tfor(var key in this.origFuncs){\r\n\t\t\t\tObject.defineProperty(this.data, key, {\r\n\t\t\t\t\tenumerable: true,\r\n\t\t\t\t\tconfigurable:true,\r\n\t\t\t\t\twritable:true,\r\n\t\t\t\t\tvalue: this.origFuncs.key,\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\twatchRow(row){\r\n\t\tvar data = row.getData();\r\n\r\n\t\tthis.blocked = true;\r\n\r\n\t\tfor(var key in data){\r\n\t\t\tthis.watchKey(row, data, key);\r\n\t\t}\r\n\r\n\t\tif(this.table.options.dataTree){\r\n\t\t\tthis.watchTreeChildren(row);\r\n\t\t}\r\n\r\n\t\tthis.blocked = false;\r\n\t}\r\n\r\n\twatchTreeChildren (row){\r\n\t\tvar self = this,\r\n\t\tchildField = row.getData()[this.table.options.dataTreeChildField],\r\n\t\torigFuncs = {};\r\n\r\n\t\tfunction rebuildTree(){\r\n\t\t\tself.table.modules.dataTree.initializeRow(row);\r\n\t\t\tself.table.modules.dataTree.layoutRow(row);\r\n\t\t\tself.table.rowManager.refreshActiveData(\"tree\", false, true);\r\n\t\t}\r\n\r\n\t\tif(childField){\r\n\r\n\t\t\torigFuncs.push = childField.push;\r\n\r\n\t\t\tObject.defineProperty(childField, \"push\", {\r\n\t\t\t\tenumerable: false,\r\n\t\t\t\tconfigurable: true,\r\n\t\t\t\tvalue: function value() {\r\n\t\t\t\t\tvar result = origFuncs.push.apply(childField, arguments);\r\n\r\n\t\t\t\t\trebuildTree();\r\n\r\n\t\t\t\t\treturn result;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\torigFuncs.unshift = childField.unshift;\r\n\r\n\t\t\tObject.defineProperty(childField, \"unshift\", {\r\n\t\t\t\tenumerable: false,\r\n\t\t\t\tconfigurable: true,\r\n\t\t\t\tvalue: function value() {\r\n\t\t\t\t\tvar result = origFuncs.unshift.apply(childField, arguments);\r\n\r\n\t\t\t\t\trebuildTree();\r\n\r\n\t\t\t\t\treturn result;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\torigFuncs.shift = childField.shift;\r\n\r\n\t\t\tObject.defineProperty(childField, \"shift\", {\r\n\t\t\t\tenumerable: false,\r\n\t\t\t\tconfigurable: true,\r\n\t\t\t\tvalue: function value() {\r\n\t\t\t\t\tvar result = origFuncs.shift.call(childField);\r\n\r\n\t\t\t\t\trebuildTree();\r\n\r\n\t\t\t\t\treturn result;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\torigFuncs.pop = childField.pop;\r\n\r\n\t\t\tObject.defineProperty(childField, \"pop\", {\r\n\t\t\t\tenumerable: false,\r\n\t\t\t\tconfigurable: true,\r\n\t\t\t\tvalue: function value() {\r\n\t\t\t\t\tvar result = origFuncs.pop.call(childField);\r\n\r\n\t\t\t\t\trebuildTree();\r\n\r\n\t\t\t\t\treturn result;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\torigFuncs.splice = childField.splice;\r\n\r\n\t\t\tObject.defineProperty(childField, \"splice\", {\r\n\t\t\t\tenumerable: false,\r\n\t\t\t\tconfigurable: true,\r\n\t\t\t\tvalue: function value() {\r\n\t\t\t\t\tvar result = origFuncs.splice.apply(childField, arguments);\r\n\r\n\t\t\t\t\trebuildTree();\r\n\r\n\t\t\t\t\treturn result;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\twatchKey(row, data, key){\r\n\t\tvar self = this,\r\n\t\tprops = Object.getOwnPropertyDescriptor(data, key),\r\n\t\tvalue = data[key],\r\n\t\tversion = this.currentVersion;\r\n\r\n\t\tObject.defineProperty(data, key, {\r\n\t\t\tset: function(newValue){\r\n\t\t\t\tvalue = newValue;\r\n\t\t\t\tif(!self.blocked && version === self.currentVersion){\r\n\t\t\t\t\tvar update = {};\r\n\t\t\t\t\tupdate[key] = newValue;\r\n\t\t\t\t\trow.updateData(update);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(props.set){\r\n\t\t\t\t\tprops.set(newValue);\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tget:function(){\r\n\r\n\t\t\t\tif(props.get){\r\n\t\t\t\t\tprops.get();\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn value;\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tunwatchRow(row){\r\n\t\tvar data = row.getData();\r\n\r\n\t\tfor(var key in data){\r\n\t\t\tObject.defineProperty(data, key, {\r\n\t\t\t\tvalue:data[key],\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tblock(){\r\n\t\tthis.blocked = true;\r\n\t}\r\n\r\n\tunblock(){\r\n\t\tthis.blocked = false;\r\n\t}\r\n}\r\n\r\nReactiveData.moduleName = \"reactiveData\";\r\n\r\nexport default ReactiveData;\r\n\r\n\r\n\r\n","import Module from '../../core/Module.js';\r\n\r\nclass ResizeColumns extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.startColumn = false;\r\n\t\tthis.startX = false;\r\n\t\tthis.startWidth = false;\r\n\t\tthis.handle = null;\r\n\t\tthis.prevHandle = null;\r\n\t}\r\n\r\n\tinitializeColumn(type, column, element){\r\n\t\tvar self = this,\r\n\t\tvariableHeight = false,\r\n\t\tmode = this.table.options.resizableColumns;\r\n\r\n\t\t//set column resize mode\r\n\t\tif(type === \"header\"){\r\n\t\t\tvariableHeight = column.definition.formatter == \"textarea\" || column.definition.variableHeight;\r\n\t\t\tcolumn.modules.resize = {variableHeight:variableHeight};\r\n\t\t}\r\n\r\n\t\tif(mode === true || mode == type){\r\n\r\n\t\t\tvar handle = document.createElement('div');\r\n\t\t\thandle.className = \"tabulator-col-resize-handle\";\r\n\r\n\r\n\t\t\tvar prevHandle = document.createElement('div');\r\n\t\t\tprevHandle.className = \"tabulator-col-resize-handle prev\";\r\n\r\n\t\t\thandle.addEventListener(\"click\", function(e){\r\n\t\t\t\te.stopPropagation();\r\n\t\t\t});\r\n\r\n\t\t\tvar handleDown = function(e){\r\n\t\t\t\tvar nearestColumn = column.getLastColumn();\r\n\r\n\t\t\t\tif(nearestColumn && self._checkResizability(nearestColumn)){\r\n\t\t\t\t\tself.startColumn = column;\r\n\t\t\t\t\tself._mouseDown(e, nearestColumn, handle);\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\thandle.addEventListener(\"mousedown\", handleDown);\r\n\t\t\thandle.addEventListener(\"touchstart\", handleDown, {passive: true});\r\n\r\n\t\t\t//reszie column on double click\r\n\t\t\thandle.addEventListener(\"dblclick\", function(e){\r\n\t\t\t\tvar col = column.getLastColumn();\r\n\r\n\t\t\t\tif(col && self._checkResizability(col)){\r\n\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\tcol.reinitializeWidth(true);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\r\n\t\t\tprevHandle.addEventListener(\"click\", function(e){\r\n\t\t\t\te.stopPropagation();\r\n\t\t\t});\r\n\r\n\t\t\tvar prevHandleDown = function(e){\r\n\t\t\t\tvar nearestColumn, colIndex, prevColumn;\r\n\r\n\t\t\t\tnearestColumn = column.getFirstColumn();\r\n\r\n\t\t\t\tif(nearestColumn){\r\n\t\t\t\t\tcolIndex = self.table.columnManager.findColumnIndex(nearestColumn);\r\n\t\t\t\t\tprevColumn = colIndex > 0 ? self.table.columnManager.getColumnByIndex(colIndex - 1) : false;\r\n\r\n\t\t\t\t\tif(prevColumn && self._checkResizability(prevColumn)){\r\n\t\t\t\t\t\tself.startColumn = column;\r\n\t\t\t\t\t\tself._mouseDown(e, prevColumn, prevHandle);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\tprevHandle.addEventListener(\"mousedown\", prevHandleDown);\r\n\t\t\tprevHandle.addEventListener(\"touchstart\", prevHandleDown, {passive: true});\r\n\r\n\t\t\t//resize column on double click\r\n\t\t\tprevHandle.addEventListener(\"dblclick\", function(e){\r\n\t\t\t\tvar nearestColumn, colIndex, prevColumn;\r\n\r\n\t\t\t\tnearestColumn = column.getFirstColumn();\r\n\r\n\t\t\t\tif(nearestColumn){\r\n\t\t\t\t\tcolIndex = self.table.columnManager.findColumnIndex(nearestColumn);\r\n\t\t\t\t\tprevColumn = colIndex > 0 ? self.table.columnManager.getColumnByIndex(colIndex - 1) : false;\r\n\r\n\t\t\t\t\tif(prevColumn && self._checkResizability(prevColumn)){\r\n\t\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\t\tprevColumn.reinitializeWidth(true);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\telement.appendChild(handle);\r\n\t\t\telement.appendChild(prevHandle);\r\n\t\t}\r\n\t}\r\n\r\n\t_checkResizability(column){\r\n\t\treturn typeof column.definition.resizable != \"undefined\" ? column.definition.resizable : this.table.options.resizableColumns;\r\n\t}\r\n\r\n\t_mouseDown(e, column, handle){\r\n\t\tvar self = this;\r\n\r\n\t\tself.table.element.classList.add(\"tabulator-block-select\");\r\n\r\n\t\tfunction mouseMove(e){\r\n\t\t\t// self.table.columnManager.tempScrollBlock();\r\n\r\n\t\t\tif(self.table.rtl){\r\n\t\t\t\tcolumn.setWidth(self.startWidth - ((typeof e.screenX === \"undefined\" ? e.touches[0].screenX : e.screenX) - self.startX));\r\n\t\t\t}else{\r\n\t\t\t\tcolumn.setWidth(self.startWidth + ((typeof e.screenX === \"undefined\" ? e.touches[0].screenX : e.screenX) - self.startX));\r\n\t\t\t}\r\n\r\n\t\t\tif(self.table.options.virtualDomHoz){\r\n\t\t\t\tself.table.vdomHoz.reinitialize(true);\r\n\t\t\t}\r\n\r\n\t\t\tif(!self.table.browserSlow && column.modules.resize && column.modules.resize.variableHeight){\r\n\t\t\t\tcolumn.checkCellHeights();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction mouseUp(e){\r\n\r\n\t\t\t//block editor from taking action while resizing is taking place\r\n\t\t\tif(self.startColumn.modules.edit){\r\n\t\t\t\tself.startColumn.modules.edit.blocked = false;\r\n\t\t\t}\r\n\r\n\t\t\tif(self.table.browserSlow && column.modules.resize && column.modules.resize.variableHeight){\r\n\t\t\t\tcolumn.checkCellHeights();\r\n\t\t\t}\r\n\r\n\t\t\tdocument.body.removeEventListener(\"mouseup\", mouseUp);\r\n\t\t\tdocument.body.removeEventListener(\"mousemove\", mouseMove);\r\n\r\n\t\t\thandle.removeEventListener(\"touchmove\", mouseMove);\r\n\t\t\thandle.removeEventListener(\"touchend\", mouseUp);\r\n\r\n\t\t\tself.table.element.classList.remove(\"tabulator-block-select\");\r\n\r\n\t\t\tif(self.table.options.persistence && self.table.modExists(\"persistence\", true) && self.table.modules.persistence.config.columns){\r\n\t\t\t\tself.table.modules.persistence.save(\"columns\");\r\n\t\t\t}\r\n\r\n\t\t\tself.table.options.columnResized.call(self.table, column.getComponent());\r\n\t\t}\r\n\r\n\t\te.stopPropagation(); //prevent resize from interfereing with movable columns\r\n\r\n\t\t//block editor from taking action while resizing is taking place\r\n\t\tif(self.startColumn.modules.edit){\r\n\t\t\tself.startColumn.modules.edit.blocked = true;\r\n\t\t}\r\n\r\n\t\tself.startX = typeof e.screenX === \"undefined\" ? e.touches[0].screenX : e.screenX;\r\n\t\tself.startWidth = column.getWidth();\r\n\r\n\t\tdocument.body.addEventListener(\"mousemove\", mouseMove);\r\n\t\tdocument.body.addEventListener(\"mouseup\", mouseUp);\r\n\t\thandle.addEventListener(\"touchmove\", mouseMove, {passive: true});\r\n\t\thandle.addEventListener(\"touchend\", mouseUp);\r\n\t}\r\n}\r\n\r\nResizeColumns.moduleName = \"resizeColumns\";\r\n\r\nexport default ResizeColumns;","import Module from '../../core/Module.js';\r\n\r\nclass ResizeRows extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.startColumn = false;\r\n\t\tthis.startY = false;\r\n\t\tthis.startHeight = false;\r\n\t\tthis.handle = null;\r\n\t\tthis.prevHandle = null;\r\n\t}\r\n\r\n\tinitializeRow(row){\r\n\t\tvar self = this,\r\n\t\trowEl = row.getElement();\r\n\r\n\t\tvar handle = document.createElement('div');\r\n\t\thandle.className = \"tabulator-row-resize-handle\";\r\n\r\n\t\tvar prevHandle = document.createElement('div');\r\n\t\tprevHandle.className = \"tabulator-row-resize-handle prev\";\r\n\r\n\t\thandle.addEventListener(\"click\", function(e){\r\n\t\t\te.stopPropagation();\r\n\t\t});\r\n\r\n\t\tvar handleDown = function(e){\r\n\t\t\tself.startRow = row;\r\n\t\t\tself._mouseDown(e, row, handle);\r\n\t\t};\r\n\r\n\t\thandle.addEventListener(\"mousedown\", handleDown);\r\n\t\thandle.addEventListener(\"touchstart\", handleDown, {passive: true});\r\n\r\n\t\tprevHandle.addEventListener(\"click\", function(e){\r\n\t\t\te.stopPropagation();\r\n\t\t});\r\n\r\n\t\tvar prevHandleDown = function(e){\r\n\t\t\tvar prevRow = self.table.rowManager.prevDisplayRow(row);\r\n\r\n\t\t\tif(prevRow){\r\n\t\t\t\tself.startRow = prevRow;\r\n\t\t\t\tself._mouseDown(e, prevRow, prevHandle);\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tprevHandle.addEventListener(\"mousedown\",prevHandleDown);\r\n\t\tprevHandle.addEventListener(\"touchstart\",prevHandleDown, {passive: true});\r\n\r\n\t\trowEl.appendChild(handle);\r\n\t\trowEl.appendChild(prevHandle);\r\n\t}\r\n\r\n\t_mouseDown(e, row, handle){\r\n\t\tvar self = this;\r\n\r\n\t\tself.table.element.classList.add(\"tabulator-block-select\");\r\n\r\n\t\tfunction mouseMove(e){\r\n\t\t\trow.setHeight(self.startHeight + ((typeof e.screenY === \"undefined\" ? e.touches[0].screenY : e.screenY) - self.startY));\r\n\t\t}\r\n\r\n\t\tfunction mouseUp(e){\r\n\r\n\t\t\t// //block editor from taking action while resizing is taking place\r\n\t\t\t// if(self.startColumn.modules.edit){\r\n\t\t\t// \tself.startColumn.modules.edit.blocked = false;\r\n\t\t\t// }\r\n\r\n\t\t\tdocument.body.removeEventListener(\"mouseup\", mouseMove);\r\n\t\t\tdocument.body.removeEventListener(\"mousemove\", mouseMove);\r\n\r\n\t\t\thandle.removeEventListener(\"touchmove\", mouseMove);\r\n\t\t\thandle.removeEventListener(\"touchend\", mouseUp);\r\n\r\n\t\t\tself.table.element.classList.remove(\"tabulator-block-select\");\r\n\r\n\t\t\tself.table.options.rowResized.call(this.table, row.getComponent());\r\n\t\t}\r\n\r\n\t\te.stopPropagation(); //prevent resize from interfereing with movable columns\r\n\r\n\t\t//block editor from taking action while resizing is taking place\r\n\t\t// if(self.startColumn.modules.edit){\r\n\t\t// \tself.startColumn.modules.edit.blocked = true;\r\n\t\t// }\r\n\r\n\t\tself.startY = typeof e.screenY === \"undefined\" ? e.touches[0].screenY : e.screenY;\r\n\t\tself.startHeight = row.getHeight();\r\n\r\n\t\tdocument.body.addEventListener(\"mousemove\", mouseMove);\r\n\t\tdocument.body.addEventListener(\"mouseup\", mouseUp);\r\n\r\n\t\thandle.addEventListener(\"touchmove\", mouseMove, {passive: true});\r\n\t\thandle.addEventListener(\"touchend\", mouseUp);\r\n\t}\r\n}\r\n\r\nResizeRows.moduleName = \"resizeRows\";\r\n\r\nexport default ResizeRows;","import Module from '../../core/Module.js';\r\n\r\nclass ResizeTable extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.binding = false;\r\n\t\tthis.observer = false;\r\n\t\tthis.containerObserver = false;\r\n\r\n\t\tthis.tableHeight = 0;\r\n\t\tthis.tableWidth = 0;\r\n\t\tthis.containerHeight = 0;\r\n\t\tthis.containerWidth = 0;\r\n\r\n\t\tthis.autoResize = false;\r\n\t}\r\n\r\n\tinitialize(row){\r\n\t\tvar table = this.table,\r\n\t\ttableStyle;\r\n\r\n\t\tthis.tableHeight = table.element.clientHeight;\r\n\t\tthis.tableWidth = table.element.clientWidth;\r\n\r\n\t\tif(table.element.parentNode){\r\n\t\t\tthis.containerHeight = table.element.parentNode.clientHeight;\r\n\t\t\tthis.containerWidth = table.element.parentNode.clientWidth;\r\n\t\t}\r\n\r\n\t\tif(typeof ResizeObserver !== \"undefined\" && table.rowManager.getRenderMode() === \"virtual\"){\r\n\r\n\t\t\tthis.autoResize = true;\r\n\r\n\t\t\tthis.observer = new ResizeObserver((entry) => {\r\n\t\t\t\tif(!table.browserMobile || (table.browserMobile &&!table.modules.edit.currentCell)){\r\n\r\n\t\t\t\t\tvar nodeHeight = Math.floor(entry[0].contentRect.height);\r\n\t\t\t\t\tvar nodeWidth = Math.floor(entry[0].contentRect.width);\r\n\r\n\t\t\t\t\tif(this.tableHeight != nodeHeight || this.tableWidth != nodeWidth){\r\n\t\t\t\t\t\tthis.tableHeight = nodeHeight;\r\n\t\t\t\t\t\tthis.tableWidth = nodeWidth;\r\n\r\n\t\t\t\t\t\tif(table.element.parentNode){\r\n\t\t\t\t\t\t\tthis.containerHeight = table.element.parentNode.clientHeight;\r\n\t\t\t\t\t\t\tthis.containerWidth = table.element.parentNode.clientWidth;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif(table.options.virtualDomHoz){\r\n\t\t\t\t\t\t\ttable.vdomHoz.reinitialize(true);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\ttable.redraw();\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tthis.observer.observe(table.element);\r\n\r\n\t\t\ttableStyle = window.getComputedStyle(table.element);\r\n\r\n\t\t\tif(this.table.element.parentNode && !this.table.rowManager.fixedHeight && (tableStyle.getPropertyValue(\"max-height\") || tableStyle.getPropertyValue(\"min-height\"))){\r\n\r\n\t\t\t\tthis.containerObserver = new ResizeObserver((entry) => {\r\n\t\t\t\t\tif(!table.browserMobile || (table.browserMobile &&!table.modules.edit.currentCell)){\r\n\r\n\t\t\t\t\t\tvar nodeHeight = Math.floor(entry[0].contentRect.height);\r\n\t\t\t\t\t\tvar nodeWidth = Math.floor(entry[0].contentRect.width);\r\n\r\n\t\t\t\t\t\tif(this.containerHeight != nodeHeight || this.containerWidth != nodeWidth){\r\n\t\t\t\t\t\t\tthis.containerHeight = nodeHeight;\r\n\t\t\t\t\t\t\tthis.containerWidth = nodeWidth;\r\n\t\t\t\t\t\t\tthis.tableHeight = table.element.clientHeight;\r\n\t\t\t\t\t\t\tthis.tableWidth = table.element.clientWidth;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif(table.options.virtualDomHoz){\r\n\t\t\t\t\t\t\ttable.vdomHoz.reinitialize(true);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\ttable.redraw();\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\tthis.containerObserver.observe(this.table.element.parentNode);\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tthis.binding = function(){\r\n\t\t\t\tif(!table.browserMobile || (table.browserMobile && !table.modules.edit.currentCell)){\r\n\t\t\t\t\tif(table.options.virtualDomHoz){\r\n\t\t\t\t\t\ttable.vdomHoz.reinitialize(true);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\ttable.redraw();\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\twindow.addEventListener(\"resize\", this.binding);\r\n\t\t}\r\n\t}\r\n\r\n\tclearBindings(row){\r\n\t\tif(this.binding){\r\n\t\t\twindow.removeEventListener(\"resize\", this.binding);\r\n\t\t}\r\n\r\n\t\tif(this.observer){\r\n\t\t\tthis.observer.unobserve(this.table.element);\r\n\t\t}\r\n\r\n\t\tif(this.containerObserver){\r\n\t\t\tthis.containerObserver.unobserve(this.table.element.parentNode);\r\n\t\t}\r\n\t}\r\n}\r\n\r\nResizeTable.moduleName = \"resizeTable\";\r\n\r\nexport default ResizeTable;","import Module from '../../core/Module.js';\r\n\r\nclass ResponsiveLayout extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.columns = [];\r\n\t\tthis.hiddenColumns = [];\r\n\t\tthis.mode = \"\";\r\n\t\tthis.index = 0;\r\n\t\tthis.collapseFormatter = [];\r\n\t\tthis.collapseStartOpen = true;\r\n\t\tthis.collapseHandleColumn = false;\r\n\t}\r\n\r\n\t//generate resposive columns list\r\n\tinitialize(){\r\n\t\tvar self = this,\r\n\t\tcolumns = [];\r\n\r\n\t\tthis.mode = this.table.options.responsiveLayout;\r\n\t\tthis.collapseFormatter = this.table.options.responsiveLayoutCollapseFormatter || this.formatCollapsedData;\r\n\t\tthis.collapseStartOpen = this.table.options.responsiveLayoutCollapseStartOpen;\r\n\t\tthis.hiddenColumns = [];\r\n\r\n\t\t//detemine level of responsivity for each column\r\n\t\tthis.table.columnManager.columnsByIndex.forEach(function(column, i){\r\n\t\t\tif(column.modules.responsive){\r\n\t\t\t\tif(column.modules.responsive.order && column.modules.responsive.visible){\r\n\t\t\t\t\tcolumn.modules.responsive.index = i;\r\n\t\t\t\t\tcolumns.push(column);\r\n\r\n\t\t\t\t\tif(!column.visible && self.mode === \"collapse\"){\r\n\t\t\t\t\t\tself.hiddenColumns.push(column);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\t//sort list by responsivity\r\n\t\tcolumns = columns.reverse();\r\n\t\tcolumns = columns.sort(function(a, b){\r\n\t\t\tvar diff = b.modules.responsive.order - a.modules.responsive.order;\r\n\t\t\treturn diff || (b.modules.responsive.index - a.modules.responsive.index);\r\n\t\t});\r\n\r\n\t\tthis.columns = columns;\r\n\r\n\t\tif(this.mode === \"collapse\"){\r\n\t\t\tthis.generateCollapsedContent();\r\n\t\t}\r\n\r\n\t\t//assign collapse column\r\n\t\tfor (let col of this.table.columnManager.columnsByIndex){\r\n\t\t\tif(col.definition.formatter == \"responsiveCollapse\"){\r\n\t\t\t\tthis.collapseHandleColumn = col;\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(this.collapseHandleColumn){\r\n\t\t\tif(this.hiddenColumns.length){\r\n\t\t\t\tthis.collapseHandleColumn.show();\r\n\t\t\t}else{\r\n\t\t\t\tthis.collapseHandleColumn.hide();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//define layout information\r\n\tinitializeColumn(column){\r\n\t\tvar def = column.getDefinition();\r\n\r\n\t\tcolumn.modules.responsive = {order: typeof def.responsive === \"undefined\" ? 1 : def.responsive, visible:def.visible === false ? false : true};\r\n\t}\r\n\r\n\tinitializeRow(row){\r\n\t\tvar el;\r\n\r\n\t\tif(row.type !== \"calc\"){\r\n\t\t\tel = document.createElement(\"div\");\r\n\t\t\tel.classList.add(\"tabulator-responsive-collapse\");\r\n\r\n\t\t\trow.modules.responsiveLayout = {\r\n\t\t\t\telement:el,\r\n\t\t\t\topen:this.collapseStartOpen,\r\n\t\t\t};\r\n\r\n\t\t\tif(!this.collapseStartOpen){\r\n\t\t\t\tel.style.display = 'none';\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tlayoutRow(row){\r\n\t\tvar rowEl = row.getElement();\r\n\r\n\t\tif(row.modules.responsiveLayout){\r\n\t\t\trowEl.appendChild(row.modules.responsiveLayout.element);\r\n\t\t\tthis.generateCollapsedRowContent(row);\r\n\t\t}\r\n\t}\r\n\r\n\t//update column visibility\r\n\tupdateColumnVisibility(column, visible){\r\n\t\tvar index;\r\n\t\tif(column.modules.responsive){\r\n\t\t\tcolumn.modules.responsive.visible = visible;\r\n\t\t\tthis.initialize();\r\n\t\t}\r\n\t}\r\n\r\n\thideColumn(column){\r\n\t\tvar colCount = this.hiddenColumns.length;\r\n\r\n\t\tcolumn.hide(false, true);\r\n\r\n\t\tif(this.mode === \"collapse\"){\r\n\t\t\tthis.hiddenColumns.unshift(column);\r\n\t\t\tthis.generateCollapsedContent();\r\n\r\n\t\t\tif(this.collapseHandleColumn && !colCount){\r\n\t\t\t\tthis.collapseHandleColumn.show();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tshowColumn(column){\r\n\t\tvar index;\r\n\r\n\t\tcolumn.show(false, true);\r\n\t\t//set column width to prevent calculation loops on uninitialized columns\r\n\t\tcolumn.setWidth(column.getWidth());\r\n\r\n\t\tif(this.mode === \"collapse\"){\r\n\t\t\tindex = this.hiddenColumns.indexOf(column);\r\n\r\n\t\t\tif(index > -1){\r\n\t\t\t\tthis.hiddenColumns.splice(index, 1);\r\n\t\t\t}\r\n\r\n\t\t\tthis.generateCollapsedContent();\r\n\r\n\t\t\tif(this.collapseHandleColumn && !this.hiddenColumns.length){\r\n\t\t\t\tthis.collapseHandleColumn.hide();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//redraw columns to fit space\r\n\tupdate(){\r\n\t\tvar self = this,\r\n\t\tworking = true;\r\n\r\n\t\twhile(working){\r\n\r\n\t\t\tlet width = self.table.modules.layout.getMode() == \"fitColumns\" ? self.table.columnManager.getFlexBaseWidth() : self.table.columnManager.getWidth();\r\n\r\n\t\t\tlet diff = (self.table.options.headerVisible ? self.table.columnManager.element.clientWidth : self.table.element.clientWidth) - width;\r\n\r\n\t\t\tif(diff < 0){\r\n\t\t\t\t//table is too wide\r\n\t\t\t\tlet column = self.columns[self.index];\r\n\r\n\t\t\t\tif(column){\r\n\t\t\t\t\tself.hideColumn(column);\r\n\t\t\t\t\tself.index ++;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tworking = false;\r\n\t\t\t\t}\r\n\r\n\t\t\t}else{\r\n\r\n\t\t\t\t//table has spare space\r\n\t\t\t\tlet column = self.columns[self.index -1];\r\n\r\n\t\t\t\tif(column){\r\n\t\t\t\t\tif(diff > 0){\r\n\t\t\t\t\t\tif(diff >= column.getWidth()){\r\n\t\t\t\t\t\t\tself.showColumn(column);\r\n\t\t\t\t\t\t\tself.index --;\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\tworking = false;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tworking = false;\r\n\t\t\t\t\t}\r\n\t\t\t\t}else{\r\n\t\t\t\t\tworking = false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif(!self.table.rowManager.activeRowsCount){\r\n\t\t\t\tself.table.rowManager.renderEmptyScroll();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tgenerateCollapsedContent(){\r\n\t\tvar self = this,\r\n\t\trows = this.table.rowManager.getDisplayRows();\r\n\r\n\t\trows.forEach(function(row){\r\n\t\t\tself.generateCollapsedRowContent(row);\r\n\t\t});\r\n\t}\r\n\r\n\tgenerateCollapsedRowContent(row){\r\n\t\tvar el, contents;\r\n\r\n\t\tif(row.modules.responsiveLayout){\r\n\t\t\tel = row.modules.responsiveLayout.element;\r\n\r\n\t\t\twhile(el.firstChild) el.removeChild(el.firstChild);\r\n\r\n\t\t\tcontents = this.collapseFormatter(this.generateCollapsedRowData(row));\r\n\t\t\tif(contents){\r\n\t\t\t\tel.appendChild(contents);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tgenerateCollapsedRowData(row){\r\n\t\tvar self = this,\r\n\t\tdata = row.getData(),\r\n\t\toutput = [],\r\n\t\tmockCellComponent;\r\n\r\n\t\tthis.hiddenColumns.forEach(function(column){\r\n\t\t\tvar value = column.getFieldValue(data);\r\n\r\n\t\t\tif(column.definition.title && column.field){\r\n\t\t\t\tif(column.modules.format && self.table.options.responsiveLayoutCollapseUseFormatters){\r\n\r\n\t\t\t\t\tmockCellComponent = {\r\n\t\t\t\t\t\tvalue:false,\r\n\t\t\t\t\t\tdata:{},\r\n\t\t\t\t\t\tgetValue:function(){\r\n\t\t\t\t\t\t\treturn value;\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tgetData:function(){\r\n\t\t\t\t\t\t\treturn data;\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tgetElement:function(){\r\n\t\t\t\t\t\t\treturn document.createElement(\"div\");\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tgetRow:function(){\r\n\t\t\t\t\t\t\treturn row.getComponent();\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tgetColumn:function(){\r\n\t\t\t\t\t\t\treturn column.getComponent();\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t};\r\n\r\n\t\t\t\t\toutput.push({\r\n\t\t\t\t\t\tfield: column.field,\r\n\t\t\t\t\t\ttitle: column.definition.title,\r\n\t\t\t\t\t\tvalue: column.modules.format.formatter.call(self.table.modules.format, mockCellComponent, column.modules.format.params)\r\n\t\t\t\t\t});\r\n\t\t\t\t}else{\r\n\t\t\t\t\toutput.push({\r\n\t\t\t\t\t\tfield: column.field,\r\n\t\t\t\t\t\ttitle: column.definition.title,\r\n\t\t\t\t\t\tvalue: value\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tformatCollapsedData(data){\r\n\t\tvar list = document.createElement(\"table\");\r\n\r\n\t\tdata.forEach(function(item){\r\n\t\t\tvar row = document.createElement(\"tr\");\r\n\t\t\tvar titleData = document.createElement(\"td\");\r\n\t\t\tvar valueData = document.createElement(\"td\");\r\n\t\t\tvar node_content;\r\n\r\n\t\t\tvar titleHighlight = document.createElement(\"strong\");\r\n\t\t\ttitleData.appendChild(titleHighlight);\r\n\t\t\tthis.table.modules.localize.bind(\"columns|\" + item.field, function(text){\r\n\t\t\t\ttitleHighlight.innerText = text || item.title;\r\n\t\t\t});\r\n\r\n\t\t\tif(item.value instanceof Node){\r\n\t\t\t\tnode_content = document.createElement(\"div\");\r\n\t\t\t\tnode_content.appendChild(item.value);\r\n\t\t\t\tvalueData.appendChild(node_content);\r\n\t\t\t}else{\r\n\t\t\t\tvalueData.innerHTML = item.value;\r\n\t\t\t}\r\n\r\n\t\t\trow.appendChild(titleData);\r\n\t\t\trow.appendChild(valueData);\r\n\t\t\tlist.appendChild(row);\r\n\t\t}, this);\r\n\r\n\t\treturn Object.keys(data).length ? list : \"\";\r\n\t}\r\n}\r\n\r\nResponsiveLayout.moduleName = \"responsiveLayout\";\r\n\r\nexport default ResponsiveLayout;","import Module from '../../core/Module.js';\r\n\r\nclass SelectRow extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.selecting = false; //flag selecting in progress\r\n\t\tthis.lastClickedRow = false; //last clicked row\r\n\t\tthis.selectPrev = []; //hold previously selected element for drag drop selection\r\n\t\tthis.selectedRows = []; //hold selected rows\r\n\t\tthis.headerCheckboxElement = null; // hold header select element\r\n\t}\r\n\r\n\tclearSelectionData(silent){\r\n\t\tthis.selecting = false;\r\n\t\tthis.lastClickedRow = false;\r\n\t\tthis.selectPrev = [];\r\n\t\tthis.selectedRows = [];\r\n\r\n\t\tif(!silent){\r\n\t\t\tthis._rowSelectionChanged();\r\n\t\t}\r\n\t}\r\n\r\n\tinitializeRow(row){\r\n\t\tvar self = this,\r\n\t\telement = row.getElement();\r\n\r\n\t\t// trigger end of row selection\r\n\t\tvar endSelect = function(){\r\n\r\n\t\t\tsetTimeout(function(){\r\n\t\t\t\tself.selecting = false;\r\n\t\t\t}, 50);\r\n\r\n\t\t\tdocument.body.removeEventListener(\"mouseup\", endSelect);\r\n\t\t};\r\n\r\n\t\trow.modules.select = {selected:false};\r\n\r\n\t\t//set row selection class\r\n\t\tif(self.table.options.selectableCheck.call(this.table, row.getComponent())){\r\n\t\t\telement.classList.add(\"tabulator-selectable\");\r\n\t\t\telement.classList.remove(\"tabulator-unselectable\");\r\n\r\n\t\t\tif(self.table.options.selectable && self.table.options.selectable != \"highlight\"){\r\n\t\t\t\tif(self.table.options.selectableRangeMode === \"click\"){\r\n\t\t\t\t\telement.addEventListener(\"click\", function(e){\r\n\t\t\t\t\t\tif(e.shiftKey){\r\n\t\t\t\t\t\t\tself.table._clearSelection();\r\n\t\t\t\t\t\t\tself.lastClickedRow = self.lastClickedRow || row;\r\n\r\n\t\t\t\t\t\t\tvar lastClickedRowIdx = self.table.rowManager.getDisplayRowIndex(self.lastClickedRow);\r\n\t\t\t\t\t\t\tvar rowIdx = self.table.rowManager.getDisplayRowIndex(row);\r\n\r\n\t\t\t\t\t\t\tvar fromRowIdx = lastClickedRowIdx <= rowIdx ? lastClickedRowIdx : rowIdx;\r\n\t\t\t\t\t\t\tvar toRowIdx = lastClickedRowIdx >= rowIdx ? lastClickedRowIdx : rowIdx;\r\n\r\n\t\t\t\t\t\t\tvar rows = self.table.rowManager.getDisplayRows().slice(0);\r\n\t\t\t\t\t\t\tvar toggledRows = rows.splice(fromRowIdx, toRowIdx - fromRowIdx + 1);\r\n\r\n\t\t\t\t\t\t\tif(e.ctrlKey || e.metaKey){\r\n\t\t\t\t\t\t\t\ttoggledRows.forEach(function(toggledRow){\r\n\t\t\t\t\t\t\t\t\tif(toggledRow !== self.lastClickedRow){\r\n\r\n\t\t\t\t\t\t\t\t\t\tif(self.table.options.selectable !== true && !self.isRowSelected(row)){\r\n\t\t\t\t\t\t\t\t\t\t\tif(self.selectedRows.length < self.table.options.selectable){\r\n\t\t\t\t\t\t\t\t\t\t\t\tself.toggleRow(toggledRow);\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\t\t\t\t\tself.toggleRow(toggledRow);\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\tself.lastClickedRow = row;\r\n\t\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\t\tself.deselectRows(undefined, true);\r\n\r\n\t\t\t\t\t\t\t\tif(self.table.options.selectable !== true){\r\n\t\t\t\t\t\t\t\t\tif(toggledRows.length > self.table.options.selectable){\r\n\t\t\t\t\t\t\t\t\t\ttoggledRows = toggledRows.slice(0, self.table.options.selectable)\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\tself.selectRows(toggledRows);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tself.table._clearSelection();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse if(e.ctrlKey || e.metaKey){\r\n\t\t\t\t\t\t\tself.toggleRow(row);\r\n\t\t\t\t\t\t\tself.lastClickedRow = row;\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\tself.deselectRows(undefined, true);\r\n\t\t\t\t\t\t\tself.selectRows(row);\r\n\t\t\t\t\t\t\tself.lastClickedRow = row;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t}else{\r\n\t\t\t\t\telement.addEventListener(\"click\", function(e){\r\n\t\t\t\t\t\tif(!self.table.modExists(\"edit\") || !self.table.modules.edit.getCurrentCell()){\r\n\t\t\t\t\t\t\tself.table._clearSelection();\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif(!self.selecting){\r\n\t\t\t\t\t\t\tself.toggleRow(row);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\telement.addEventListener(\"mousedown\", function(e){\r\n\t\t\t\t\t\tif(e.shiftKey){\r\n\t\t\t\t\t\t\tself.table._clearSelection();\r\n\r\n\t\t\t\t\t\t\tself.selecting = true;\r\n\r\n\t\t\t\t\t\t\tself.selectPrev = [];\r\n\r\n\t\t\t\t\t\t\tdocument.body.addEventListener(\"mouseup\", endSelect);\r\n\t\t\t\t\t\t\tdocument.body.addEventListener(\"keyup\", endSelect);\r\n\r\n\t\t\t\t\t\t\tself.toggleRow(row);\r\n\r\n\t\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\telement.addEventListener(\"mouseenter\", function(e){\r\n\t\t\t\t\t\tif(self.selecting){\r\n\t\t\t\t\t\t\tself.table._clearSelection();\r\n\t\t\t\t\t\t\tself.toggleRow(row);\r\n\r\n\t\t\t\t\t\t\tif(self.selectPrev[1] == row){\r\n\t\t\t\t\t\t\t\tself.toggleRow(self.selectPrev[0]);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\telement.addEventListener(\"mouseout\", function(e){\r\n\t\t\t\t\t\tif(self.selecting){\r\n\t\t\t\t\t\t\tself.table._clearSelection();\r\n\t\t\t\t\t\t\tself.selectPrev.unshift(row);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t}else{\r\n\t\t\telement.classList.add(\"tabulator-unselectable\");\r\n\t\t\telement.classList.remove(\"tabulator-selectable\");\r\n\t\t}\r\n\t}\r\n\r\n\t//toggle row selection\r\n\ttoggleRow(row){\r\n\t\tif(this.table.options.selectableCheck.call(this.table, row.getComponent())){\r\n\t\t\tif(row.modules.select && row.modules.select.selected){\r\n\t\t\t\tthis._deselectRow(row);\r\n\t\t\t}else{\r\n\t\t\t\tthis._selectRow(row);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//select a number of rows\r\n\tselectRows(rows){\r\n\t\tvar rowMatch;\r\n\r\n\t\tswitch(typeof rows){\r\n\t\t\tcase \"undefined\":\r\n\t\t\tthis.table.rowManager.rows.forEach((row) => {\r\n\t\t\t\tthis._selectRow(row, true, true);\r\n\t\t\t});\r\n\r\n\t\t\tthis._rowSelectionChanged();\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"string\":\r\n\r\n\t\t\trowMatch = this.table.rowManager.findRow(rows);\r\n\r\n\t\t\tif(rowMatch){\r\n\t\t\t\tthis._selectRow(rowMatch, true, true);\r\n\t\t\t}else{\r\n\t\t\t\tthis.table.rowManager.getRows(rows).forEach((row) => {\r\n\t\t\t\t\tthis._selectRow(row, true, true);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\tthis._rowSelectionChanged();\r\n\t\t\tbreak;\r\n\r\n\t\t\tdefault:\r\n\t\t\tif(Array.isArray(rows)){\r\n\t\t\t\trows.forEach((row) => {\r\n\t\t\t\t\tthis._selectRow(row, true, true);\r\n\t\t\t\t});\r\n\r\n\t\t\t\tthis._rowSelectionChanged();\r\n\t\t\t}else{\r\n\t\t\t\tthis._selectRow(rows, false, true);\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\t//select an individual row\r\n\t_selectRow(rowInfo, silent, force){\r\n\t\tvar index;\r\n\r\n\t\t//handle max row count\r\n\t\tif(!isNaN(this.table.options.selectable) && this.table.options.selectable !== true && !force){\r\n\t\t\tif(this.selectedRows.length >= this.table.options.selectable){\r\n\t\t\t\tif(this.table.options.selectableRollingSelection){\r\n\t\t\t\t\tthis._deselectRow(this.selectedRows[0]);\r\n\t\t\t\t}else{\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tvar row = this.table.rowManager.findRow(rowInfo);\r\n\r\n\t\tif(row){\r\n\t\t\tif(this.selectedRows.indexOf(row) == -1){\r\n\t\t\t\trow.getElement().classList.add(\"tabulator-selected\");\r\n\t\t\t\tif(!row.modules.select){\r\n\t\t\t\t\trow.modules.select = {};\r\n\t\t\t\t}\r\n\r\n\t\t\t\trow.modules.select.selected = true;\r\n\t\t\t\tif(row.modules.select.checkboxEl){\r\n\t\t\t\t\trow.modules.select.checkboxEl.checked = true;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.selectedRows.push(row);\r\n\r\n\t\t\t\tif(this.table.options.dataTreeSelectPropagate){\r\n\t\t\t\t\tthis.childRowSelection(row, true);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(!silent){\r\n\t\t\t\t\tthis.table.options.rowSelected.call(this.table, row.getComponent());\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis._rowSelectionChanged(silent);\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tif(!silent){\r\n\t\t\t\tconsole.warn(\"Selection Error - No such row found, ignoring selection:\" + rowInfo);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tisRowSelected(row){\r\n\t\treturn this.selectedRows.indexOf(row) !== -1;\r\n\t}\r\n\r\n\t//deselect a number of rows\r\n\tdeselectRows(rows, silent){\r\n\t\tvar self = this,\r\n\t\trowCount;\r\n\r\n\t\tif(typeof rows == \"undefined\"){\r\n\r\n\t\t\trowCount = self.selectedRows.length;\r\n\r\n\t\t\tfor(let i = 0; i < rowCount; i++){\r\n\t\t\t\tself._deselectRow(self.selectedRows[0], true);\r\n\t\t\t}\r\n\r\n\t\t\tself._rowSelectionChanged(silent);\r\n\r\n\t\t}else{\r\n\t\t\tif(Array.isArray(rows)){\r\n\t\t\t\trows.forEach(function(row){\r\n\t\t\t\t\tself._deselectRow(row, true);\r\n\t\t\t\t});\r\n\r\n\t\t\t\tself._rowSelectionChanged(silent);\r\n\t\t\t}else{\r\n\t\t\t\tself._deselectRow(rows, silent);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//deselect an individual row\r\n\t_deselectRow(rowInfo, silent){\r\n\t\tvar self = this,\r\n\t\trow = self.table.rowManager.findRow(rowInfo),\r\n\t\tindex;\r\n\r\n\t\tif(row){\r\n\t\t\tindex = self.selectedRows.findIndex(function(selectedRow){\r\n\t\t\t\treturn selectedRow == row;\r\n\t\t\t});\r\n\r\n\t\t\tif(index > -1){\r\n\r\n\t\t\t\trow.getElement().classList.remove(\"tabulator-selected\");\r\n\t\t\t\tif(!row.modules.select){\r\n\t\t\t\t\trow.modules.select = {};\r\n\t\t\t\t}\r\n\r\n\t\t\t\trow.modules.select.selected = false;\r\n\t\t\t\tif(row.modules.select.checkboxEl){\r\n\t\t\t\t\trow.modules.select.checkboxEl.checked = false;\r\n\t\t\t\t}\r\n\t\t\t\tself.selectedRows.splice(index, 1);\r\n\r\n\t\t\t\tif(this.table.options.dataTreeSelectPropagate){\r\n\t\t\t\t\tthis.childRowSelection(row, false);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(!silent){\r\n\t\t\t\t\tself.table.options.rowDeselected.call(this.table, row.getComponent());\r\n\t\t\t\t}\r\n\r\n\t\t\t\tself._rowSelectionChanged(silent);\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tif(!silent){\r\n\t\t\t\tconsole.warn(\"Deselection Error - No such row found, ignoring selection:\" + rowInfo);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tgetSelectedData(){\r\n\t\tvar data = [];\r\n\r\n\t\tthis.selectedRows.forEach(function(row){\r\n\t\t\tdata.push(row.getData());\r\n\t\t});\r\n\r\n\t\treturn data;\r\n\t}\r\n\r\n\tgetSelectedRows(){\r\n\r\n\t\tvar rows = [];\r\n\r\n\t\tthis.selectedRows.forEach(function(row){\r\n\t\t\trows.push(row.getComponent());\r\n\t\t});\r\n\r\n\t\treturn rows;\r\n\t}\r\n\r\n\t_rowSelectionChanged(silent){\r\n\t\tif(this.headerCheckboxElement){\r\n\t\t\tif(this.selectedRows.length === 0){\r\n\t\t\t\tthis.headerCheckboxElement.checked = false;\r\n\t\t\t\tthis.headerCheckboxElement.indeterminate = false;\r\n\t\t\t} else if(this.table.rowManager.rows.length === this.selectedRows.length){\r\n\t\t\t\tthis.headerCheckboxElement.checked = true;\r\n\t\t\t\tthis.headerCheckboxElement.indeterminate = false;\r\n\t\t\t} else {\r\n\t\t\t\tthis.headerCheckboxElement.indeterminate = true;\r\n\t\t\t\tthis.headerCheckboxElement.checked = false;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(!silent){\r\n\t\t\tthis.table.options.rowSelectionChanged.call(this.table, this.getSelectedData(), this.getSelectedRows());\r\n\t\t}\r\n\t}\r\n\r\n\tregisterRowSelectCheckbox (row, element) {\r\n\t\tif(!row._row.modules.select){\r\n\t\t\trow._row.modules.select = {};\r\n\t\t}\r\n\r\n\t\trow._row.modules.select.checkboxEl = element;\r\n\t}\r\n\r\n\tregisterHeaderSelectCheckbox (element) {\r\n\t\tthis.headerCheckboxElement = element;\r\n\t}\r\n\r\n\tchildRowSelection(row, select){\r\n\t\tvar children = this.table.modules.dataTree.getChildren(row, true);\r\n\r\n\t\tif(select){\r\n\t\t\tfor(let child of children){\r\n\t\t\t\tthis._selectRow(child, true);\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tfor(let child of children){\r\n\t\t\t\tthis._deselectRow(child, true);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n\r\nSelectRow.moduleName = \"selectRow\";\r\n\r\nexport default SelectRow;","//sort numbers\r\nexport default function(a, b, aRow, bRow, column, dir, params){\r\n\tvar alignEmptyValues = params.alignEmptyValues;\r\n\tvar decimal = params.decimalSeparator;\r\n\tvar thousand = params.thousandSeparator;\r\n\tvar emptyAlign = 0;\r\n\r\n\ta = String(a);\r\n\tb = String(b);\r\n\r\n\tif(thousand){\r\n\t\ta = a.split(thousand).join(\"\");\r\n\t\tb = b.split(thousand).join(\"\");\r\n\t}\r\n\r\n\tif(decimal){\r\n\t\ta = a.split(decimal).join(\".\");\r\n\t\tb = b.split(decimal).join(\".\");\r\n\t}\r\n\r\n\ta = parseFloat(a);\r\n\tb = parseFloat(b);\r\n\r\n\t//handle non numeric values\r\n\tif(isNaN(a)){\r\n\t\temptyAlign = isNaN(b) ? 0 : -1;\r\n\t}else if(isNaN(b)){\r\n\t\temptyAlign = 1;\r\n\t}else{\r\n\t\t//compare valid values\r\n\t\treturn a - b;\r\n\t}\r\n\r\n\t//fix empty values in position\r\n\tif((alignEmptyValues === \"top\" && dir === \"desc\") || (alignEmptyValues === \"bottom\" && dir === \"asc\")){\r\n\t\temptyAlign *= -1;\r\n\t}\r\n\r\n\treturn emptyAlign;\r\n};","//sort strings\r\nexport default function(a, b, aRow, bRow, column, dir, params){\r\n\tvar alignEmptyValues = params.alignEmptyValues;\r\n\tvar emptyAlign = 0;\r\n\tvar locale;\r\n\r\n\t//handle empty values\r\n\tif(!a){\r\n\t\temptyAlign = !b ? 0 : -1;\r\n\t}else if(!b){\r\n\t\temptyAlign = 1;\r\n\t}else{\r\n\t\t//compare valid values\r\n\t\tswitch(typeof params.locale){\r\n\t\t\tcase \"boolean\":\r\n\t\t\tif(params.locale){\r\n\t\t\t\tlocale = this.table.modules.localize.getLocale();\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\t\t\tcase \"string\":\r\n\t\t\tlocale = params.locale;\r\n\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\treturn String(a).toLowerCase().localeCompare(String(b).toLowerCase(), locale);\r\n\t}\r\n\r\n\t//fix empty values in position\r\n\tif((alignEmptyValues === \"top\" && dir === \"desc\") || (alignEmptyValues === \"bottom\" && dir === \"asc\")){\r\n\t\temptyAlign *= -1;\r\n\t}\r\n\r\n\treturn emptyAlign;\r\n};","//sort datetime\r\nexport default function(a, b, aRow, bRow, column, dir, params){\r\n\tvar format = params.format || \"DD/MM/YYYY HH:mm:ss\",\r\n\talignEmptyValues = params.alignEmptyValues,\r\n\temptyAlign = 0;\r\n\r\n\tif(typeof moment != \"undefined\"){\r\n\t\ta = moment(a, format);\r\n\t\tb = moment(b, format);\r\n\r\n\t\tif(!a.isValid()){\r\n\t\t\temptyAlign = !b.isValid() ? 0 : -1;\r\n\t\t}else if(!b.isValid()){\r\n\t\t\temptyAlign = 1;\r\n\t\t}else{\r\n\t\t\t//compare valid values\r\n\t\t\treturn a - b;\r\n\t\t}\r\n\r\n\t\t//fix empty values in position\r\n\t\tif((alignEmptyValues === \"top\" && dir === \"desc\") || (alignEmptyValues === \"bottom\" && dir === \"asc\")){\r\n\t\t\temptyAlign *= -1;\r\n\t\t}\r\n\r\n\t\treturn emptyAlign;\r\n\r\n\t}else{\r\n\t\tconsole.error(\"Sort Error - 'datetime' sorter is dependant on moment.js\");\r\n\t}\r\n};","import datetime from './datetime.js';\r\n\r\n//sort date\r\nexport default function(a, b, aRow, bRow, column, dir, params){\r\n\tif(!params.format){\r\n\t\tparams.format = \"DD/MM/YYYY\";\r\n\t}\r\n\r\n\treturn datetime.call(this, a, b, aRow, bRow, column, dir, params);\r\n};","import datetime from './datetime.js';\r\n\r\n//sort times\r\nexport default function(a, b, aRow, bRow, column, dir, params){\r\n\tif(!params.format){\r\n\t\tparams.format = \"HH:mm\";\r\n\t}\r\n\r\n\treturn datetime.call(this, a, b, aRow, bRow, column, dir, params);\r\n};","//sort booleans\r\nexport default function(a, b, aRow, bRow, column, dir, params){\r\n\tvar el1 = a === true || a === \"true\" || a === \"True\" || a === 1 ? 1 : 0;\r\n\tvar el2 = b === true || b === \"true\" || b === \"True\" || b === 1 ? 1 : 0;\r\n\r\n\treturn el1 - el2;\r\n};","//sort if element contains any data\r\nexport default function(a, b, aRow, bRow, column, dir, params){\r\n\tvar el1 = 0;\r\n\tvar el2 = 0;\r\n\tvar type = params.type || \"length\";\r\n\tvar alignEmptyValues = params.alignEmptyValues;\r\n\tvar emptyAlign = 0;\r\n\r\n\tfunction calc(value){\r\n\r\n\t\tswitch(type){\r\n\t\t\tcase \"length\":\r\n\t\t\treturn value.length;\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"sum\":\r\n\t\t\treturn value.reduce(function(c, d){\r\n\t\t\t\treturn c + d;\r\n\t\t\t});\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"max\":\r\n\t\t\treturn Math.max.apply(null, value) ;\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"min\":\r\n\t\t\treturn Math.min.apply(null, value) ;\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"avg\":\r\n\t\t\treturn value.reduce(function(c, d){\r\n\t\t\t\treturn c + d;\r\n\t\t\t}) / value.length;\r\n\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\t//handle non array values\r\n\tif(!Array.isArray(a)){\r\n\t\talignEmptyValues = !Array.isArray(b) ? 0 : -1;\r\n\t}else if(!Array.isArray(b)){\r\n\t\talignEmptyValues = 1;\r\n\t}else{\r\n\r\n\t\t//compare valid values\r\n\t\tel1 = a ? calc(a) : 0;\r\n\t\tel2 = b ? calc(b) : 0;\r\n\r\n\t\treturn el1 - el2;\r\n\t}\r\n\r\n\t//fix empty values in position\r\n\tif((alignEmptyValues === \"top\" && dir === \"desc\") || (alignEmptyValues === \"bottom\" && dir === \"asc\")){\r\n\t\temptyAlign *= -1;\r\n\t}\r\n\r\n\treturn emptyAlign;\r\n};","//sort if element contains any data\r\nexport default function(a, b, aRow, bRow, column, dir, params){\r\n\tvar el1 = typeof a == \"undefined\" ? 0 : 1;\r\n\tvar el2 = typeof b == \"undefined\" ? 0 : 1;\r\n\r\n\treturn el1 - el2;\r\n};","//sort alpha numeric strings\r\nexport default function(as, bs, aRow, bRow, column, dir, params){\r\n\tvar a, b, a1, b1, i= 0, L, rx = /(\\d+)|(\\D+)/g, rd = /\\d/;\r\n\tvar alignEmptyValues = params.alignEmptyValues;\r\n\tvar emptyAlign = 0;\r\n\r\n\t//handle empty values\r\n\tif(!as && as!== 0){\r\n\t\temptyAlign = !bs && bs!== 0 ? 0 : -1;\r\n\t}else if(!bs && bs!== 0){\r\n\t\temptyAlign = 1;\r\n\t}else{\r\n\r\n\t\tif(isFinite(as) && isFinite(bs)) return as - bs;\r\n\t\ta = String(as).toLowerCase();\r\n\t\tb = String(bs).toLowerCase();\r\n\t\tif(a === b) return 0;\r\n\t\tif(!(rd.test(a) && rd.test(b))) return a > b ? 1 : -1;\r\n\t\ta = a.match(rx);\r\n\t\tb = b.match(rx);\r\n\t\tL = a.length > b.length ? b.length : a.length;\r\n\t\twhile(i < L){\r\n\t\t\ta1= a[i];\r\n\t\t\tb1= b[i++];\r\n\t\t\tif(a1 !== b1){\r\n\t\t\t\tif(isFinite(a1) && isFinite(b1)){\r\n\t\t\t\t\tif(a1.charAt(0) === \"0\") a1 = \".\" + a1;\r\n\t\t\t\t\tif(b1.charAt(0) === \"0\") b1 = \".\" + b1;\r\n\t\t\t\t\treturn a1 - b1;\r\n\t\t\t\t}\r\n\t\t\t\telse return a1 > b1 ? 1 : -1;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn a.length > b.length;\r\n\t}\r\n\r\n\t//fix empty values in position\r\n\tif((alignEmptyValues === \"top\" && dir === \"desc\") || (alignEmptyValues === \"bottom\" && dir === \"asc\")){\r\n\t\temptyAlign *= -1;\r\n\t}\r\n\r\n\treturn emptyAlign;\r\n};","import number from './sorters/number.js';\r\nimport string from './sorters/string.js';\r\nimport date from './sorters/date.js';\r\nimport time from './sorters/time.js';\r\nimport datetime from './sorters/datetime.js';\r\nimport boolean from './sorters/boolean.js';\r\nimport array from './sorters/array.js';\r\nimport exists from './sorters/exists.js';\r\nimport alphanum from './sorters/alphanum.js';\r\n\r\nexport default {\r\n\tnumber:number,\r\n\tstring:string,\r\n\tdate:date,\r\n\ttime:time,\r\n\tdatetime:datetime,\r\n\tboolean:boolean,\r\n\tarray:array,\r\n\texists:exists,\r\n\talphanum:alphanum\r\n};","import Module from '../../core/Module.js';\r\n\r\nimport defaultSorters from './defaults/sorters.js';\r\n\r\nclass Sort extends Module{\r\n\r\n\tconstructor(table){\r\n\t \tsuper(table);\r\n\r\n\t \tthis.sortList = []; //holder current sort\r\n\t \tthis.changed = false; //has the sort changed since last render\r\n\t}\r\n\r\n\t//initialize column header for sorting\r\n\tinitializeColumn(column, content){\r\n\t\tvar self = this,\r\n\t\tsorter = false,\r\n\t\tcolEl,\r\n\t\tarrowEl;\r\n\r\n\t\tswitch(typeof column.definition.sorter){\r\n\t\t\tcase \"string\":\r\n\t\t\tif(Sort.sorters[column.definition.sorter]){\r\n\t\t\t\tsorter = Sort.sorters[column.definition.sorter];\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Sort Error - No such sorter found: \", column.definition.sorter);\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"function\":\r\n\t\t\tsorter = column.definition.sorter;\r\n\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\tcolumn.modules.sort = {\r\n\t\t\tsorter:sorter, dir:\"none\",\r\n\t\t\tparams:column.definition.sorterParams || {},\r\n\t\t\tstartingDir:column.definition.headerSortStartingDir || \"asc\",\r\n\t\t\ttristate: typeof column.definition.headerSortTristate !== \"undefined\" ? column.definition.headerSortTristate : this.table.options.headerSortTristate,\r\n\t\t};\r\n\r\n\t\tif(typeof column.definition.headerSort === \"undefined\" ? (this.table.options.headerSort !== false) : column.definition.headerSort !== false){\r\n\r\n\t\t\tcolEl = column.getElement();\r\n\r\n\t\t\tcolEl.classList.add(\"tabulator-sortable\");\r\n\r\n\r\n\t\t\tarrowEl = document.createElement(\"div\");\r\n\t\t\tarrowEl.classList.add(\"tabulator-col-sorter\");\r\n\r\n\t\t\tif(typeof this.table.options.headerSortElement == \"object\"){\r\n\t\t\t\tarrowEl.appendChild(this.table.options.headerSortElement);\r\n\t\t\t}else{\r\n\t\t\t\tarrowEl.innerHTML = this.table.options.headerSortElement;\r\n\t\t\t}\r\n\r\n\t\t\t//create sorter arrow\r\n\t\t\tcontent.appendChild(arrowEl);\r\n\r\n\t\t\tcolumn.modules.sort.element = arrowEl;\r\n\r\n\t\t\t//sort on click\r\n\t\t\tcolEl.addEventListener(\"click\", function(e){\r\n\t\t\t\tvar dir = \"\",\r\n\t\t\t\tsorters=[],\r\n\t\t\t\tmatch = false;\r\n\r\n\t\t\t\tif(column.modules.sort){\r\n\t\t\t\t\tif(column.modules.sort.tristate){\r\n\t\t\t\t\t\tif(column.modules.sort.dir == \"none\"){\r\n\t\t\t\t\t\t\tdir = column.modules.sort.startingDir;\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\tif(column.modules.sort.dir == column.modules.sort.startingDir){\r\n\t\t\t\t\t\t\t\tdir = column.modules.sort.dir == \"asc\" ? \"desc\" : \"asc\";\r\n\t\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\t\tdir = \"none\";\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tswitch(column.modules.sort.dir){\r\n\t\t\t\t\t\t\tcase \"asc\":\r\n\t\t\t\t\t\t\tdir = \"desc\";\r\n\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\t\tcase \"desc\":\r\n\t\t\t\t\t\t\tdir = \"asc\";\r\n\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\t\tdefault:\r\n\t\t\t\t\t\t\tdir = column.modules.sort.startingDir;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\r\n\t\t\t\t\tif (self.table.options.columnHeaderSortMulti && (e.shiftKey || e.ctrlKey)) {\r\n\t\t\t\t\t\tsorters = self.getSort();\r\n\r\n\t\t\t\t\t\tmatch = sorters.findIndex(function(sorter){\r\n\t\t\t\t\t\t\treturn sorter.field === column.getField();\r\n\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\tif(match > -1){\r\n\t\t\t\t\t\t\tsorters[match].dir = dir;\r\n\r\n\t\t\t\t\t\t\tif(match != sorters.length -1){\r\n\t\t\t\t\t\t\t\tmatch = sorters.splice(match, 1)[0];\r\n\t\t\t\t\t\t\t\tif(dir != \"none\"){\r\n\t\t\t\t\t\t\t\t\tsorters.push(match);\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\tif(dir != \"none\"){\r\n\t\t\t\t\t\t\t\tsorters.push({column:column, dir:dir});\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t//add to existing sort\r\n\t\t\t\t\t\tself.setSort(sorters);\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tif(dir == \"none\"){\r\n\t\t\t\t\t\t\tself.clear();\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\t//sort by column only\r\n\t\t\t\t\t\t\tself.setSort(column, dir);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tself.table.rowManager.sorterRefresh(!self.sortList.length);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\t//check if the sorters have changed since last use\r\n\thasChanged(){\r\n\t\tvar changed = this.changed;\r\n\t\tthis.changed = false;\r\n\t\treturn changed;\r\n\t}\r\n\r\n\t//return current sorters\r\n\tgetSort(){\r\n\t\tvar self = this,\r\n\t\tsorters = [];\r\n\r\n\t\tself.sortList.forEach(function(item){\r\n\t\t\tif(item.column){\r\n\t\t\t\tsorters.push({column:item.column.getComponent(), field:item.column.getField(), dir:item.dir});\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn sorters;\r\n\t}\r\n\r\n\t//change sort list and trigger sort\r\n\tsetSort(sortList, dir){\r\n\t\tvar self = this,\r\n\t\tnewSortList = [];\r\n\r\n\t\tif(!Array.isArray(sortList)){\r\n\t\t\tsortList = [{column: sortList, dir:dir}];\r\n\t\t}\r\n\r\n\t\tsortList.forEach(function(item){\r\n\t\t\tvar column;\r\n\r\n\t\t\tcolumn = self.table.columnManager.findColumn(item.column);\r\n\r\n\t\t\tif(column){\r\n\t\t\t\titem.column = column;\r\n\t\t\t\tnewSortList.push(item);\r\n\t\t\t\tself.changed = true;\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Sort Warning - Sort field does not exist and is being ignored: \", item.column);\r\n\t\t\t}\r\n\r\n\t\t});\r\n\r\n\t\tself.sortList = newSortList;\r\n\r\n\t\tif(this.table.options.persistence && this.table.modExists(\"persistence\", true) && this.table.modules.persistence.config.sort){\r\n\t\t\tthis.table.modules.persistence.save(\"sort\");\r\n\t\t}\r\n\t}\r\n\r\n\t//clear sorters\r\n\tclear(){\r\n\t\tthis.setSort([]);\r\n\t}\r\n\r\n\t//find appropriate sorter for column\r\n\tfindSorter(column){\r\n\t\tvar row = this.table.rowManager.activeRows[0],\r\n\t\tsorter = \"string\",\r\n\t\tfield, value;\r\n\r\n\t\tif(row){\r\n\t\t\trow = row.getData();\r\n\t\t\tfield = column.getField();\r\n\r\n\t\t\tif(field){\r\n\r\n\t\t\t\tvalue = column.getFieldValue(row);\r\n\r\n\t\t\t\tswitch(typeof value){\r\n\t\t\t\t\tcase \"undefined\":\r\n\t\t\t\t\tsorter = \"string\";\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase \"boolean\":\r\n\t\t\t\t\tsorter = \"boolean\";\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tdefault:\r\n\t\t\t\t\tif(!isNaN(value) && value !== \"\"){\r\n\t\t\t\t\t\tsorter = \"number\";\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tif(value.match(/((^[0-9]+[a-z]+)|(^[a-z]+[0-9]+))+$/i)){\r\n\t\t\t\t\t\t\tsorter = \"alphanum\";\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn Sort.sorters[sorter];\r\n\t}\r\n\r\n\t//work through sort list sorting data\r\n\tsort(data){\r\n\t\tvar self = this,\r\n\t\tsortList = this.table.options.sortOrderReverse ? self.sortList.slice().reverse() : self.sortList,\r\n\t\tsortListActual = [],\r\n\t\trowComponents = [],\r\n\t\tlastSort;\r\n\r\n\t\tif(self.table.options.dataSorting){\r\n\t\t\tself.table.options.dataSorting.call(self.table, self.getSort());\r\n\t\t}\r\n\r\n\t\tself.clearColumnHeaders();\r\n\r\n\t\tif(!self.table.options.ajaxSorting){\r\n\r\n\t\t\t//build list of valid sorters and trigger column specific callbacks before sort begins\r\n\t\t\tsortList.forEach(function(item, i){\r\n\t\t\t\tvar sortObj = item.column.modules.sort;\r\n\r\n\t\t\t\tif(item.column && sortObj){\r\n\r\n\t\t\t\t\t//if no sorter has been defined, take a guess\r\n\t\t\t\t\tif(!sortObj.sorter){\r\n\t\t\t\t\t\tsortObj.sorter = self.findSorter(item.column);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\titem.params = typeof sortObj.params === \"function\" ? sortObj.params(item.column.getComponent(), item.dir) : sortObj.params;\r\n\r\n\t\t\t\t\tsortListActual.push(item);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tself.setColumnHeader(item.column, item.dir);\r\n\t\t\t});\r\n\r\n\t\t\t//sort data\r\n\t\t\tif (sortListActual.length) {\r\n\t\t\t\tself._sortItems(data, sortListActual);\r\n\t\t\t}\r\n\r\n\t\t}else{\r\n\t\t\tsortList.forEach(function(item, i){\r\n\t\t\t\tself.setColumnHeader(item.column, item.dir);\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif(self.table.options.dataSorted){\r\n\t\t\tdata.forEach((row) => {\r\n\t\t\t\trowComponents.push(row.getComponent());\r\n\t\t\t});\r\n\r\n\t\t\tself.table.options.dataSorted.call(self.table, self.getSort(), rowComponents);\r\n\t\t}\r\n\t}\r\n\r\n\t//clear sort arrows on columns\r\n\tclearColumnHeaders(){\r\n\t\tthis.table.columnManager.getRealColumns().forEach(function(column){\r\n\t\t\tif(column.modules.sort){\r\n\t\t\t\tcolumn.modules.sort.dir = \"none\";\r\n\t\t\t\tcolumn.getElement().setAttribute(\"aria-sort\", \"none\");\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t//set the column header sort direction\r\n\tsetColumnHeader(column, dir){\r\n\t\tcolumn.modules.sort.dir = dir;\r\n\t\tcolumn.getElement().setAttribute(\"aria-sort\", dir);\r\n\t}\r\n\r\n\t//sort each item in sort list\r\n\t_sortItems(data, sortList){\r\n\t\tvar sorterCount = sortList.length - 1;\r\n\r\n\t\tdata.sort((a, b) => {\r\n\t\t\tvar result;\r\n\r\n\t\t\tfor(var i = sorterCount; i>= 0; i--){\r\n\t\t\t\tlet sortItem = sortList[i];\r\n\r\n\t\t\t\tresult = this._sortRow(a, b, sortItem.column, sortItem.dir, sortItem.params);\r\n\r\n\t\t\t\tif(result !== 0){\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn result;\r\n\t\t});\r\n\t}\r\n\r\n\t//process individual rows for a sort function on active data\r\n\t_sortRow(a, b, column, dir, params){\r\n\t\tvar el1Comp, el2Comp, colComp;\r\n\r\n\t\t//switch elements depending on search direction\r\n\t\tvar el1 = dir == \"asc\" ? a : b;\r\n\t\tvar el2 = dir == \"asc\" ? b : a;\r\n\r\n\t\ta = column.getFieldValue(el1.getData());\r\n\t\tb = column.getFieldValue(el2.getData());\r\n\r\n\t\ta = typeof a !== \"undefined\" ? a : \"\";\r\n\t\tb = typeof b !== \"undefined\" ? b : \"\";\r\n\r\n\t\tel1Comp = el1.getComponent();\r\n\t\tel2Comp = el2.getComponent();\r\n\r\n\t\treturn column.modules.sort.sorter.call(this, a, b, el1Comp, el2Comp, column.getComponent(), dir, params);\r\n\t}\r\n}\r\n\r\nSort.moduleName = \"sort\";\r\n\r\n//load defaults\r\nSort.sorters = defaultSorters;\r\n\r\nexport default Sort;","export default {\r\n\t//is integer\r\n\tinteger: function(cell, value, parameters){\r\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\tvalue = Number(value);\r\n\t\treturn typeof value === 'number' && isFinite(value) && Math.floor(value) === value;\r\n\t},\r\n\r\n\t//is float\r\n\tfloat: function(cell, value, parameters){\r\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\tvalue = Number(value);\r\n\t\treturn typeof value === 'number' && isFinite(value) && value % 1 !== 0;\r\n\t},\r\n\r\n\t//must be a number\r\n\tnumeric: function(cell, value, parameters){\r\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn !isNaN(value);\r\n\t},\r\n\r\n\t//must be a string\r\n\tstring: function(cell, value, parameters){\r\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn isNaN(value);\r\n\t},\r\n\r\n\t//maximum value\r\n\tmax: function(cell, value, parameters){\r\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn parseFloat(value) <= parameters;\r\n\t},\r\n\r\n\t//minimum value\r\n\tmin: function(cell, value, parameters){\r\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn parseFloat(value) >= parameters;\r\n\t},\r\n\r\n\t//starts with value\r\n\tstarts: function(cell, value, parameters){\r\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn String(value).toLowerCase().startsWith(String(parameters).toLowerCase());\r\n\t},\r\n\r\n\t//ends with value\r\n\tends: function(cell, value, parameters){\r\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn String(value).toLowerCase().endsWith(String(parameters).toLowerCase());\r\n\t},\r\n\r\n\r\n\t//minimum string length\r\n\tminLength: function(cell, value, parameters){\r\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn String(value).length >= parameters;\r\n\t},\r\n\r\n\t//maximum string length\r\n\tmaxLength: function(cell, value, parameters){\r\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn String(value).length <= parameters;\r\n\t},\r\n\r\n\t//in provided value list\r\n\tin: function(cell, value, parameters){\r\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\tif(typeof parameters == \"string\"){\r\n\t\t\tparameters = parameters.split(\"|\");\r\n\t\t}\r\n\r\n\t\treturn value === \"\" || parameters.indexOf(value) > -1;\r\n\t},\r\n\r\n\t//must match provided regex\r\n\tregex: function(cell, value, parameters){\r\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\tvar reg = new RegExp(parameters);\r\n\r\n\t\treturn reg.test(value);\r\n\t},\r\n\r\n\t//value must be unique in this column\r\n\tunique: function(cell, value, parameters){\r\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\tvar unique = true;\r\n\r\n\t\tvar cellData = cell.getData();\r\n\t\tvar column = cell.getColumn()._getSelf();\r\n\r\n\t\tthis.table.rowManager.rows.forEach(function(row){\r\n\t\t\tvar data = row.getData();\r\n\r\n\t\t\tif(data !== cellData){\r\n\t\t\t\tif(value == column.getFieldValue(data)){\r\n\t\t\t\t\tunique = false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn unique;\r\n\t},\r\n\r\n\t//must have a value\r\n\trequired:function(cell, value, parameters){\r\n\t\treturn value !== \"\" && value !== null && typeof value !== \"undefined\";\r\n\t},\r\n};","import Module from '../../core/Module.js';\r\n\r\nimport defaultValidators from './defaults/validators.js';\r\n\r\nclass Validate extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.invalidCells = [];\r\n\t}\r\n\r\n\t//validate\r\n\tinitializeColumn(column){\r\n\t\tvar self = this,\r\n\t\tconfig = [],\r\n\t\tvalidator;\r\n\r\n\t\tif(column.definition.validator){\r\n\r\n\t\t\tif(Array.isArray(column.definition.validator)){\r\n\t\t\t\tcolumn.definition.validator.forEach(function(item){\r\n\t\t\t\t\tvalidator = self._extractValidator(item);\r\n\r\n\t\t\t\t\tif(validator){\r\n\t\t\t\t\t\tconfig.push(validator);\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t}else{\r\n\t\t\t\tvalidator = this._extractValidator(column.definition.validator);\r\n\r\n\t\t\t\tif(validator){\r\n\t\t\t\t\tconfig.push(validator);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tcolumn.modules.validate = config.length ? config : false;\r\n\t\t}\r\n\t}\r\n\r\n\t_extractValidator(value){\r\n\t\tvar type, params, pos;\r\n\r\n\t\tswitch(typeof value){\r\n\t\t\tcase \"string\":\r\n\t\t\tpos = value.indexOf(':');\r\n\r\n\t\t\tif(pos > -1){\r\n\t\t\t\ttype = value.substring(0,pos);\r\n\t\t\t\tparams = value.substring(pos+1);\r\n\t\t\t}else{\r\n\t\t\t\ttype = value;\r\n\t\t\t}\r\n\r\n\t\t\treturn this._buildValidator(type, params);\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"function\":\r\n\t\t\treturn this._buildValidator(value);\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"object\":\r\n\t\t\treturn this._buildValidator(value.type, value.parameters);\r\n\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\t_buildValidator(type, params){\r\n\r\n\t\tvar func = typeof type == \"function\" ? type : Validate.validators[type];\r\n\r\n\t\tif(!func){\r\n\t\t\tconsole.warn(\"Validator Setup Error - No matching validator found:\", type);\r\n\t\t\treturn false;\r\n\t\t}else{\r\n\t\t\treturn {\r\n\t\t\t\ttype:typeof type == \"function\" ? \"function\" : type,\r\n\t\t\t\tfunc:func,\r\n\t\t\t\tparams:params,\r\n\t\t\t};\r\n\t\t}\r\n\t}\r\n\r\n\tvalidate(validators, cell, value){\r\n\t\tvar self = this,\r\n\t\tvalid = [],\r\n\t\tinvalidIndex = this.invalidCells.indexOf(cell);\r\n\r\n\t\tif(validators){\r\n\t\t\tvalidators.forEach(function(item){\r\n\t\t\t\tif(!item.func.call(self, cell.getComponent(), value, item.params)){\r\n\t\t\t\t\tvalid.push({\r\n\t\t\t\t\t\ttype:item.type,\r\n\t\t\t\t\t\tparameters:item.params\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tvalid = valid.length ? valid : true;\r\n\r\n\t\tif(!cell.modules.validate){\r\n\t\t\tcell.modules.validate = {};\r\n\t\t}\r\n\r\n\t\tif(valid === true){\r\n\t\t\tcell.modules.validate.invalid = false;\r\n\t\t\tcell.getElement().classList.remove(\"tabulator-validation-fail\");\r\n\r\n\t\t\tif(invalidIndex > -1){\r\n\t\t\t\tthis.invalidCells.splice(invalidIndex, 1);\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tcell.modules.validate.invalid = true;\r\n\r\n\t\t\tif(this.table.options.validationMode !== \"manual\"){\r\n\t\t\t\tcell.getElement().classList.add(\"tabulator-validation-fail\");\r\n\t\t\t}\r\n\r\n\t\t\tif(invalidIndex == -1){\r\n\t\t\t\tthis.invalidCells.push(cell);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn valid;\r\n\t}\r\n\r\n\tgetInvalidCells(){\r\n\t\tvar output = [];\r\n\r\n\t\tthis.invalidCells.forEach((cell) => {\r\n\t\t\toutput.push(cell.getComponent());\r\n\t\t});\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tclearValidation(cell){\r\n\t\tvar invalidIndex;\r\n\r\n\t\tif(cell.modules.validate && cell.modules.validate.invalid){\r\n\r\n\t\t\tcell.getElement().classList.remove(\"tabulator-validation-fail\");\r\n\t\t\tcell.modules.validate.invalid = false;\r\n\r\n\t\t\tinvalidIndex = this.invalidCells.indexOf(cell);\r\n\r\n\t\t\tif(invalidIndex > -1){\r\n\t\t\t\tthis.invalidCells.splice(invalidIndex, 1);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n\r\nValidate.moduleName = \"validate\";\r\n\r\n//load defaults\r\nValidate.validators = defaultValidators;\r\n\r\nexport default Validate;","//tabulator with all modules installed\r\nimport {default as Tabulator} from './Tabulator.js';\r\nimport * as modules from '../core/modules/optional.js';\r\nimport ModuleBinder from './ModuleBinder.js';\r\n\r\nclass TabulatorFull extends Tabulator {};\r\n\r\n//bind modules and static functionality\r\nnew ModuleBinder(TabulatorFull, modules);\r\n\r\nexport default TabulatorFull;"],"names":["height","minHeight","maxHeight","layout","layoutColumnsOnNewData","columnMinWidth","columnMaxWidth","columnHeaderVertAlign","resizableColumns","resizableRows","autoResize","columns","columnDefaults","cellHozAlign","cellVertAlign","headerHozAlign","data","autoColumns","autoColumnsDefinitions","reactiveData","nestedFieldSeparator","tooltips","tooltipsHeader","tooltipGenerationMode","initialSort","initialFilter","initialHeaderFilter","columnHeaderSortMulti","sortOrderReverse","headerSort","headerSortTristate","headerSortElement","footerElement","index","textDirection","keybindings","tabEndNewRow","invalidOptionWarnings","clipboard","clipboardCopyStyled","clipboardCopyConfig","clipboardCopyFormatter","clipboardCopyRowRange","clipboardPasteParser","clipboardPasteAction","clipboardCopied","clipboardPasted","clipboardPasteError","downloadReady","blob","downloadComplete","downloadConfig","downloadRowRange","dataTree","dataTreeFilter","dataTreeSort","dataTreeElementColumn","dataTreeBranchElement","dataTreeChildIndent","dataTreeChildField","dataTreeCollapseElement","dataTreeExpandElement","dataTreeStartExpanded","dataTreeRowExpanded","dataTreeRowCollapsed","dataTreeChildColumnCalcs","dataTreeSelectPropagate","printAsHtml","printFormatter","printHeader","printFooter","printStyled","printRowRange","printConfig","addRowPos","selectable","selectableRangeMode","selectableRollingSelection","selectablePersistence","selectableCheck","row","headerFilterLiveFilterDelay","headerFilterPlaceholder","headerVisible","history","locale","langs","virtualDom","virtualDomBuffer","virtualDomHoz","persistence","persistenceID","persistenceMode","persistenceReaderFunc","persistenceWriterFunc","responsiveLayout","responsiveLayoutCollapseStartOpen","responsiveLayoutCollapseUseFormatters","responsiveLayoutCollapseFormatter","pagination","paginationSize","paginationInitialPage","paginationButtonCount","paginationSizeSelector","paginationElement","paginationDataSent","paginationDataReceived","paginationAddRow","ajaxURL","ajaxURLGenerator","ajaxParams","ajaxConfig","ajaxContentType","ajaxRequestFunc","ajaxLoader","ajaxLoaderLoading","ajaxLoaderError","ajaxFiltering","ajaxSorting","ajaxProgressiveLoad","ajaxProgressiveLoadDelay","ajaxProgressiveLoadScrollMargin","groupBy","groupStartOpen","groupValues","groupUpdateOnCellEdit","groupHeader","groupHeaderPrint","groupHeaderClipboard","groupHeaderHtmlOutput","groupHeaderDownload","htmlOutputConfig","movableColumns","movableRows","movableRowsConnectedTables","movableRowsConnectedElements","movableRowsSender","movableRowsReceiver","movableRowsSendingStart","movableRowsSent","movableRowsSentFailed","movableRowsSendingStop","movableRowsReceivingStart","movableRowsReceived","movableRowsReceivedFailed","movableRowsReceivingStop","movableRowsElementDrop","scrollToRowPosition","scrollToRowIfVisible","scrollToColumnPosition","scrollToColumnIfVisible","rowFormatter","rowFormatterPrint","rowFormatterClipboard","rowFormatterHtmlOutput","placeholder","tableBuilding","tableBuilt","renderStarted","renderComplete","rowClick","rowDblClick","rowContext","rowTap","rowDblTap","rowTapHold","rowMouseEnter","rowMouseLeave","rowMouseOver","rowMouseOut","rowMouseMove","rowContextMenu","rowClickMenu","rowAdded","rowDeleted","rowMoved","rowUpdated","rowSelectionChanged","rowSelected","rowDeselected","rowResized","cellClick","cellDblClick","cellContext","cellTap","cellDblTap","cellTapHold","cellMouseEnter","cellMouseLeave","cellMouseOver","cellMouseOut","cellMouseMove","cellEditing","cellEdited","cellEditCancelled","columnMoved","columnResized","columnTitleChanged","columnVisibilityChanged","htmlImporting","htmlImported","dataLoading","dataLoaded","dataChanged","ajaxRequesting","ajaxResponse","ajaxError","dataFiltering","dataFiltered","dataSorting","dataSorted","groupToggleElement","groupClosedShowCalcs","dataGrouping","dataGrouped","groupVisibilityChanged","groupClick","groupDblClick","groupContext","groupContextMenu","groupClickMenu","groupTap","groupDblTap","groupTapHold","columnCalcs","pageLoaded","localized","validationMode","validationFailed","historyUndo","historyRedo","scrollHorizontal","scrollVertical","ColumnComponent","column","_column","type","getElement","getDefinition","getField","cells","forEach","cell","push","getComponent","visible","isGroup","show","hide","output","length","parent","Column","table","columnManager","scrollToColumn","modExists","modules","filter","setHeaderFilterFocus","reloadHeaderFilter","getHeaderFilterValue","value","setHeaderFilterValue","to","after","toColumn","findColumn","moveColumn","console","warn","nextCol","nextColumn","prevCol","prevColumn","updates","updateDefinition","getWidth","width","result","reinitializeWidth","setWidth","options","vdomHoz","reinitialize","validate","CellComponent","_cell","getValue","getOldValue","initialValue","getData","mutate","setValue","setValueActual","force","edit","cancelEdit","edited","clearEdited","invalid","clearValidation","nav","checkHeight","Cell","element","oldValue","minWidth","component","loaded","build","generateElement","_configureCell","getFieldValue","document","createElement","className","setAttribute","cellEvents","field","vertAligns","top","bottom","middle","hozAligns","left","right","center","style","textAlign","hozAlign","vertAlign","display","alignItems","justifyContent","definition","cssClass","classNames","split","classList","add","addEventListener","e","_generateTooltip","_bindClickEvents","_bindTouchEvents","_bindMouseEvents","bindEditor","rowHandle","moveRow","initializeCell","call","currentCell","preventDefault","selection","range","body","createTextRange","moveToElementText","select","window","getSelection","createRange","selectNode","removeAllRanges","addRange","dblTap","tapHold","tap","passive","clearTimeout","setTimeout","val","format","formatValue","innerHTML","Node","firstChild","removeChild","appendChild","cellRendered","tooltip","containerOnly","layoutElement","changed","setValueProcessData","action","newValue","groupRows","reassignRowToGroup","rowManager","mutator","transformCell","topCalc","bottomCalc","recalc","activeRows","recalcRowGroup","block","setFieldValue","unblock","_generateContents","resizeColumns","initializeColumn","contextMenu","clickMenu","menu","frozenColumns","widthStyled","offsetWidth","minWidthStyled","maxWidth","maxWidthStyled","reinitializeHeight","heightStyled","offsetHeight","editCell","editing","getCurrentCell","_getSelf","valid","redrawBlock","parentNode","clearComponentHistory","deleteCell","calcs","self","nextCell","getCellIndex","next","nextRow","nextDisplayRow","findNextEditableCell","prev","prevRow","prevDisplayRow","findPrevEditableCell","up","down","def","contentElement","titleHolderElement","titleElement","groupElement","createGroupElement","fieldStructure","titleFormatterRendered","mapDefinitionDefaults","setField","checkDefinition","widthFixed","_mapDepricatedFunctionality","i","newCol","attachColumn","checkColumnVisibility","registerColumnField","setHandle","_buildHeader","bindModuleColumns","el","defaults","key","Object","keys","defaultOptionList","indexOf","title","_getNestedData","_getFlatData","_setNestedData","_setFlatData","registerColumnPosition","reRegisterPosition","headerTooltip","localize","bind","headerVertical","_bindEvents","_buildColumnHeaderContent","_buildGroupHeader","_buildColumnHeader","setTooltip","headerFilter","setHeaderFilterColumnPlaceholder","config","headerClick","headerDblClick","headerContext","headerTap","headerDblTap","headerTapHold","sort","headerContextMenu","headerClickMenu","headerMenu","initializeColumnHeader","editor","validator","accessor","classeNames","setMinWidth","parseInt","setMaxWidth","_buildColumnHeaderTitle","editableTitle","stopPropagation","focus","text","_formatColumnHeaderTitle","formatter","contents","params","mockCell","onRendered","titleFormatter","getFormatter","callback","titleFormatterParams","dataObj","structure","alignment","parentHeight","getGroupElement","clientHeight","getHeadersElement","paddingTop","verticalAlign","clearVerticalAlign","rowNumColumn","getFirstColumn","getLastColumn","getTopColumn","updateBranches","colDefs","silent","responsiveToggle","_verticalAlignHeaders","save","updateColumnVisibility","matchChildWidths","childWidth","child","splice","setWidthActual","isNaN","Math","floor","clientWidth","max","min","rows","heightInitialized","offsetParent","clearCellHeight","calcHeight","setCellHeight","Promise","resolve","reject","cellCount","deregisterColumn","findColumnIndex","_nextVisibleColumn","getColumnByIndex","_prevVisibleColumn","hideHeaderFilterElements","fitToData","showHeaderFilterElements","clearWidth","assign","addColumn","then","err","defaultOptions","Helpers","box","getBoundingClientRect","pageYOffset","documentElement","clientTop","pageXOffset","clientLeft","obj","clone","Array","isArray","Date","deepClone","ColumnManager","blockHozScrollEvent","headersElement","createHeadersElement","createHeaderElement","columnsByIndex","columnsByField","scrollLeft","insertBefore","manager","hozAdjust","scrollWidth","marginLeft","cols","definitions","sorter","col","match","find","setColumns","reset","_addColumn","_reIndexColumns","initialize","redraw","before","nextToColumn","colEl","parentIndex","nextEl","nextSibling","unshift","columnRendered","getHeight","adjustTableSize","subject","HTMLElement","root","matches","fieldRoot","findIndex","active","structured","from","moveColumnActual","_moveColumnInArray","getComponents","updateRows","fromIndex","toIndex","concat","getTreeChildren","position","ifVisible","offset","adjust","offsetLeft","generateCell","totalWidth","fixedWidth","scrollHeight","colWidth","getMode","elVisible","resetScroll","update","footerManager","RowComponent","_row","transform","getCells","getCell","getRowPosition","scrollToRow","page","setPageToRow","moveToRow","updateData","normalizeHeight","selectRow","selectRows","deselectRows","toggleRow","isRowSelected","frozenRows","freezeRow","unfreezeRow","collapseRow","expandRow","getTreeParent","pos","addTreeChildRow","getGroup","Row","manualHeight","outerHeight","initialized","created","setData","create","initializeRow","generateCells","deleteCells","layoutRow","resizeRows","reinitializeRow","children","setHeight","clearHeight","transformRow","watchRow","updatedData","tempData","newRowData","JSON","parse","attrname","getColumnsByFieldRoot","redrawNeeded","refreshActiveData","findCell","allowEdit","check","prevCell","toRow","findRow","moveRowActual","getRowIndex","deleteActual","blockRedraw","detatchModules","group","removeRow","deleteRow","rowDelete","_deselectRow","detachRow","RowManager","createHolderElement","tableElement","createTableElement","heightFixer","firstRender","renderMode","fixedHeight","activeRowsCount","displayRows","displayRowsCount","scrollTop","vDomRowHeight","vDomTop","vDomBottom","vDomScrollPosTop","vDomScrollPosBottom","vDomTopPad","vDomBottomPad","vDomMaxRenderChain","vDomWindowBuffer","vDomWindowMinTotalRows","vDomWindowMinMarginRows","vDomTopNewRows","vDomBottomNewRows","redrawBlockRestoreConfig","redrawBlockRederInPosition","setRenderMode","scrollHeaders","dir","ajax","nextPage","rowIndex","getDisplayRows","rowEl","rowTop","elOffset","abs","_virtualRenderFill","offsetTop","renderInPosition","columnsChanged","_setDataActual","reRenderInPosition","generateColumnsFromRowData","_wipeElements","clear","clearSelectionData","watchData","error","wipe","allIndex","activeIndex","setActiveRows","displayRowIterator","displayIndex","regenerateRowNumbers","updateGroupRows","addRowActual","findAddRowPos","reverse","item","addRow","dispRows","getPageSize","assignRowToGroup","_moveRowInArray","posFrom","posTo","Group","toGroup","fromGroup","insertRow","start","end","styleRow","findRowIndex","rowOnly","getDisplayRowIndex","list","getRows","sorters","getSort","paginationDataSentNames","filters","getFilters","setParams","sendRequest","setPage","loadData","_genRemoteRequest","loadOrignalData","progressiveLoad","stage","skipStage","cascadeOrder","slice","resetDisplayRows","isFrozen","getDisplayIndex","setDisplayIndex","getNextDisplayIndex","setDisplayRows","setMaxRows","dataChange","renderTable","viewable","topEdge","bottomEdge","topFound","topRow","bottomRow","getVisibleRows","selectedRows","getRenderMode","topOffset","diff","_simpleRender","renderEmptyScroll","_clearVirtualDom","checkClassicModeGroupHeaderWidth","onlyGroupHeaders","paddingBottom","visibility","remove","forceMove","holder","topPad","rowsHeight","topPadHeight","heightOccupied","ceil","rowHeight","vDomScrollHeight","countGroups","topDiff","bottomDiff","margin","_addTopRow","_removeBottomRow","_removeTopRow","_addBottomRow","topRowHeight","_quickNormalizeRowHeight","bottomRowHeight","initialHeight","otherHeight","external","resizeTable","tableWidth","browser","event","createEvent","initEvent","dispatchEvent","Event","FooterManager","links","_initialize","querySelector","activate","deactivate","link","footerRedraw","TableRegistry","tables","query","results","querySelectorAll","matchElement","Tabulator","lookupTable","Module","name","fitDataLayoutOverride","colsWidth","gap","lastCol","responsive","flexWidth","flexGrowUnits","flexColWidth","flexColumns","fixedShrinkColumns","flexShrinkUnits","overflowWidth","gapFill","calcWidth","scaleColumns","freeSpace","shrinkCols","oversizeCols","oversizeSpace","remainingSpace","nextColWidth","remainingFlexGrowUnits","changeUnits","undersizeCols","calcGrow","widthGrow","calcShrink","widthShrink","fitData","fitDataFill","fitDataGeneral","fitDataTable","fitDataStretch","fitColumns","Layout","mode","modes","moduleName","defaultModes","Localize","lang","bindings","langList","headerFilters","_setLangProp","values","desiredLocale","traverseLang","trans","path","prop","navigator","language","toLowerCase","prefix","_executeBindings","pathArray","_getLangElement","level","rootPath","getText","binding","defaultLangs","Comms","selectors","connections","connection","comms","con","module","getConnections","tableComms","commsReceived","ModuleBinder","tabulator","bindStaticFuctionality","bindModules","coreModules","moduleBindings","extendModule","property","source","prototype","registerModule","mod","registerModuleBinding","findTable","mods","VirtualDomHorizontal","holderEl","leftCol","rightCol","vDomScrollPosLeft","vDomScrollPosRight","vDomPadLeft","vDomPadRight","fitDataColAvg","compatabilityCheck","frozen","ok","rtl","scroll","change","collsWidth","colEnd","getGroups","old","colPos","leftPos","rightPos","_this18","fitDataCheck","paddingLeft","paddingRight","reinitChanged","renitializeRows","addColRight","removeColLeft","addColLeft","removeColRight","fitDataColActualWidthCheck","prepend","newWidth","widthDiff","colPositionAdjust","browserSlow","browserMobile","initializeElement","initializeOptions","_create","register","getComputedStyle","direction","empty","_clearObjectPointers","rtlCheck","tagName","htmlTableImport","parseTable","setRowManager","setColumnManager","_buildElement","_loadInitialData","_detectBrowser","setHeaderFilterPlaceholder","installLang","setLocale","span","load","setSort","setFilter","print","unwatchData","clearBindings","ua","userAgent","vendor","opera","test","substr","restoreRedraw","extensions","input","accept","file","files","reader","FileReader","readAsText","onload","onerror","click","blockActiveRequest","_setData","inPosition","setConfig","setUrl","getUrl","clearData","getDataCount","search","getHtml","printFullscreen","responses","addRows","newRows","getRowFromPosition","count","successCount","foundRows","doneCheck","a","b","fromRow","selector","copy","getDefinitionTree","parseColumns","getColumns","mergeDefinition","fromColumn","getLocale","getLang","sortList","sorterRefresh","filterRefresh","addFilter","all","getHeaderFilters","removeFilter","clearFilter","clearHeaderFilter","getSelectedRows","getSelectedData","getInvalidCells","setMaxPage","size","setPageSize","previousPage","getPage","getPageMax","groups","getGroupedData","getEditedCells","getResults","recalcAll","undo","redo","getHistoryUndoSize","getHistoryRedoSize","filename","download","receive","plugin","required","Accessor","allowedTypes","charAt","toUpperCase","lookupAccessor","accessors","rowComponent","traverse","colCompnent","defautlAccessors","method","url","includes","serializeParams","contentType","urlGenerator","contentTypeFormatters","headers","Accept","location","origin","credentials","fetch","response","json","status","statusText","stringify","generateParamsList","form","FormData","append","Ajax","loaderElement","createLoaderElement","msgElement","createMsgElement","loadingElement","errorElement","loaderPromise","loading","requestOrder","template","trim","content","defaultLoaderPromise","defaultURLGenerator","initializeProgressive","_loadDefaultConfig","defaultConfig","_loadDataProgressive","_loadDataStandard","encoded","encodeURIComponent","join","requestNo","showLoader","hideLoader","showError","shouldLoad","defaultContentTypeFormatters","replace","updateOrAddData","insert","addData","headerFindSuccess","columnMap","shift","Clipboard","pasteParser","pasteAction","customSelection","rowRange","blocked","plain","html","generateExportList","genereateHTMLTable","generatePlainContent","clipboardData","originalEvent","paste","setPasteParser","setPasteAction","rowData","getKey","internal","sel","textRange","selectNodeContents","toString","execCommand","pasteActions","parser","pasteParsers","checkPaseOrigin","getPasteData","mutateData","target","defaultPasteActions","defaultPasteParsers","CalcComponent","calcParams","precision","reduce","sum","Number","toFixed","parseFloat","String","ColumnCalcs","topCalcs","botCalcs","genColumn","topElement","botElement","botRow","topInitialized","botInitialized","topCalcParams","botCalcParams","bottomCalcParams","calculations","initializeTopRow","botCalc","initializeBottomRow","rowsToData","generateRow","recalcGroup","getRowGroup","getChildGroups","generateRowData","open","getFilteredTreeChildren","disable","enable","paramKey","getGroupResults","groupObj","subGroups","getSubGroups","subGroupResults","subgroup","defaultCalculations","DataTree","indent","collapseEl","expandEl","branchEl","elementField","startOpen","dummyEl","firstCol","getFirstVisibileColumn","tabIndex","childArray","controlEl","generateControlElement","cloneNode","marginRight","getPropertyValue","oldControl","replaceChild","getChildren","allChildren","generateChildren","subChildren","sub","childData","childRow","childIndex","findChildIndex","recurse","setFileContents","delimiter","fileContents","depth","bom","header","autoTableParams","rowGroupStyles","fontStyle","fontSize","cellPadding","fillColor","rowCalcStyles","jsPDFParams","jsPDF","orientation","unit","parseRow","styles","colSpan","rowSpan","doc","autoTable","addPageContent","head","documentProcessing","sheetName","workbook","XLSX","utils","book_new","SheetNames","Sheets","generateSheet","merges","worksheet","s","c","r","j","sheet_add_aoa","encode_range","sheetOnly","sheets","sheet","send","intercept","s2ab","buf","ArrayBuffer","view","Uint8Array","charCodeAt","write","bookType","bookSST","csv","pdf","xlsx","Download","interceptCallback","downloadFunc","buildLink","mime","triggerDownload","downloaders","_group","getRowCount","newTab","Blob","URL","createObjectURL","msSaveOrOpenBlob","defaultDownloaders","success","cancel","editorParams","cellValue","padding","boxSizing","elementAttributes","getAttribute","preventScroll","onChange","keyCode","mask","maskInput","vertNav","verticalNavigation","whiteSpace","resize","getRow","heightNow","selectionStart","stopImmediatePropagation","step","blurFunc","removeEventListener","cellEl","initialDisplayValue","defaultValue","listEl","multiselect","dataItems","currentItem","displayItems","currentItems","blurable","blockListShow","searchWord","searchWordTimeout","getUniqueColumnValues","getColumnByField","getColumn","parseItems","inputValues","curentValues","dataList","displayList","processComplexListItem","label","itemParams","setItem","sortValuesList","fillList","listItemFormatter","toggleItem","chooseItem","setCurrentItem","scrollIntoView","behavior","inline","fillInput","unsetItem","hideList","chooseItems","unsetItems","len","cancelItem","showList","removeScrollListener","scrollTovalue","char","character","fromCharCode","startsWith","cursor","readOnly","uniqueColumnValues","genUniqueColumnValues","filterList","term","intialLoad","items","searchFunc","addNotice","searchingPlaceholder","fillListIfNotEmpty","showListOnEmpty","notice","searchEl","clearList","itemList","emptyPlaceholder","current","freetext","allowEmpty","log","showInputValue","maxStars","getElementsByTagName","stars","starsHolder","star","createElementNS","starChange","buildStar","starHolder","nextStar","blur","changeValue","overflow","textOverflow","percent","handle","bar","mouseDrag","mouseDragWidth","updateValue","calcVal","round","backgroundColor","screenX","tristate","indetermValue","indeterminateValue","indetermState","marginTop","indeterminate","checked","textarea","number","autocomplete","progress","tickCross","Edit","mouseClick","recursionBlock","invalidEdit","editedCells","editable","editors","clearEditor","variableHeight","contains","button","forceEdit","focusCellNoEvent","leftEdge","rightEdge","leftMargin","rightMargin","rendered","cellEditor","checkForRestyle","focusScrollAdjust","maskLetter","maskLetterChar","maskNumber","maskNumberChar","maskWildcard","maskWildcardChar","fillSymbols","symbol","maskAutoFill","editIndex","defaultEditors","ExportRow","ExportColumn","Export","cloneTableStyle","colVisProp","columnHeaders","headersToExportRows","generateColumnGroupHeaders","bodyToExportRows","rowLookup","genereateTableElement","columnGroups","colData","processColumnGroup","maxDepth","groupData","subGroup","subGroupData","columnVisCheck","headerDepth","exportRows","parseColumnGroup","rowGroups","exportCols","headerEl","bodyEl","lookupTableStyles","setup","treeElementField","mapElementStyles","genereateHeaderElement","genereateGroupElement","genereateCalcElement","genereateRowElement","evenRow","oddRow","calcRow","firstRow","firstGroup","getElementsByClassName","styleCells","firstCell","lastCell","generator","isVisible","cellWrapper","formatCells","formatExportValue","align","renderedCallback","props","lookup","fromStyle","filterVal","rowVal","filterParams","RegExp","keywords","separator","keyword","matchAll","endsWith","Filter","headerFilterColumns","prevHeaderFilterChangeCheck","filterType","tagType","attrType","filterChangeCheck","filterFunc","prevSuccess","emptyFunc","headerFilterFunc","headerFilterFuncParams","fieldVal","colVal","func","generateHeaderFilterElement","filterElement","editorElement","typingTimer","searchTrigger","headerElement","headerFilterEmptyCheck","headerFilterParams","hasAttribute","headerFilterLiveFilter","findFilter","findSubFilters","filtersToArray","undefined","searchType","filterRecurse","rowList","activeRowComponents","filterRow","subFilter","defaultFilters","formatterParams","emptyToSpace","sanitizeHTML","floatVal","integer","decimal","rgx","decimalSym","thousandSym","thousand","symbolAfter","urlPrefix","labelField","urlField","src","urlSuffix","truthy","allowTruthy","tick","tickElement","cross","crossElement","inputFormat","outputFormat","invalidPlaceholder","newDatetime","moment","isValid","timezone","tz","datetime","suffix","humanize","date","duration","starActive","starInactive","colors","color","percentValue","legendAlign","legend","legendColor","barEl","legendEl","toggleList","isOpen","checkbox","toggleSelect","isSelected","registerRowSelectCheckbox","deselectRow","registerHeaderSelectCheckbox","plaintext","money","image","datetimediff","traffic","buttonTick","buttonCross","rownum","responsiveCollapse","rowSelection","Format","lookupFormatter","formatterPrint","formatterClipboard","formatterHtmlOutput","htmlOutput","formatters","entityMap","defaultFormatters","FrozenColumns","leftColumns","rightColumns","rightPadding","initializationMode","scrollEndTimer","edge","frozenCheck","calcMargins","layoutColumnPosition","layoutCalcRows","_calcSpace","allCells","leftParents","parentEl","getColGroupParentElement","FrozenRows","styleRows","groupManager","oldGroup","hasSubGroups","groupIDLookups","_addRowToGroup","_addRow","groupList","elementContents","arrowElement","createElements","addBindings","createValueGroups","arrow","initializeGroupHeader","allowedValues","_createGroup","toggleElement","initializeGroup","toggleVisibility","groupID","groupKey","headerGenerator","conformRowData","generateGroupHeaderContents","scrollHeader","removeGroup","noCalc","_visSet","getHeadersAndRows","hasTopCalcs","detachElement","generateTopRow","hasBottomCalcs","generateBottomRow","compoment","getPath","addBindingsd","childNodes","GroupComponent","GroupRows","langValue","removeCalcs","getRealColumns","lookupFunc","generateGroups","groupComponents","groupListData","rowCount","headerContent","pullGroupListData","oldGroups","createGroup","assignRowToExistingGroup","newGroupNeeded","oldRowGroup","oldGroupPath","newGroupPath","getExpectedPath","samePath","every","groupPath","groupId","cellEdit","rowAdd","newRow","_rebindRow","rowMove","History","undoers","redoers","oldRow","defaultUndoers","defaultRedoers","HtmlTableImport","fieldIndex","hasIndex","_extractOptions","_extractHeaders","_generateBlankHeaders","newElement","attributes","optionsArr","optionsList","attrib","_attribValue","exists","_findCol","textContent","navPrev","navNext","navUp","navDown","scrollPageUp","scrollPageDown","scrollToStart","scrollToEnd","copyToClipboard","keyBlock","newPos","scrollMax","navLeft","navRight","Keybindings","watchKeys","pressedKeys","keyupBinding","keydownBinding","mergedBindings","mapBindings","bindEvents","actions","mapBinding","symbolsList","ctrl","meta","symbols","code","checkBinding","ctrlKey","shiftKey","metaKey","defaultBindings","defaultActions","Menu","menuElements","blurEvent","hideMenu","escEvent","escMenu","nestedMenuBlock","positionReversedX","headerMenuEl","LoadMenuEvent","loadMenu","touch","MouseEvent","menuEl","itemEl","disabled","hideOldSubMenus","positionMenu","pop","docHeight","innerHeight","x","y","parentOffset","touches","pageX","pageY","MoveColumns","placeholderElement","createPlaceholderElement","hoverElement","checkTimeout","checkPeriod","moving","toCol","toColAfter","startX","autoScrollMargin","autoScrollStep","autoScrollTimeout","touchMove","moveHover","endMove","mousemove","which","startMove","bindTouchEvents","startXMove","prevColWidth","nextColWidthLast","prevColWidthLast","moveToCol","_bindMouseMove","movingCells","_unbindMouseMove","columnHolder","xPos","scrollPos","MoveRows","toRowAfter","hasHandle","startY","tableRowDropEvent","connectionSelectorsTables","connectionSelectorsElements","connectionElements","connectedTable","connectedRow","mouseup","tableRowDrop","previousSibling","startYMove","nextRowHeight","prevRowHeight","nextRowHeightLast","prevRowHeightLast","setStartPosition","connectToTables","pointerEvents","getTableElement","disconnectFromTables","moveHoverConnections","moveHoverTable","rowHolder","yPos","connectionTables","dropEvent","elementRowDrop","tabulatorElementDropEvent","sender","senders","receiver","receivers","connect","disconnect","dropComplete","fromTable","toTable","Mutator","enabled","lookupMutator","mutators","mutatorEdit","defaultMutators","Page","initialLoad","pageSizes","dataReceivedNames","dataSentNames","pagesElement","firstBut","prevBut","nextBut","lastBut","pageSizeSelect","hidden","pageSelectLabel","testElRow","testElCell","defaultDataSentNames","defaultDataReceivedNames","generatePageSizeSelectList","trigger","leftSize","rightSize","_generatePageButton","_setPageButtons","_getRemotePage","oldParams","pageParams","getParams","_parseRemoteData","last_page","footer","local","id","localStorage","getItem","cookie","cookiePos","expireDate","setDate","getDate","toUTCString","Persistence","defWatcherBlock","readFunc","writeFunc","testKey","removeItem","retreivedData","localStorageTest","readers","writers","retreiveData","getOwnPropertyDescriptor","defineProperty","set","get","oldCols","newCols","_findColumn","validateSorters","getGroupConfig","getPageConfig","excludedKeys","defStore","colDef","defaultReaders","defaultWriters","Print","manualBlock","replaceTable","cleanup","genereateTable","scrollX","scrollY","footerEl","tableEl","footerContent","scrollTo","ReactiveData","origFuncs","currentVersion","version","enumerable","configurable","args","arguments","arg","apply","getRowFromDataObject","startRow","oldRows","writable","watchKey","watchTreeChildren","childField","rebuildTree","ResizeColumns","startColumn","startWidth","prevHandle","handleDown","nearestColumn","_checkResizability","_mouseDown","prevHandleDown","colIndex","resizable","mouseMove","checkCellHeights","mouseUp","ResizeRows","startHeight","screenY","ResizeTable","observer","containerObserver","tableHeight","containerHeight","containerWidth","tableStyle","ResizeObserver","entry","nodeHeight","contentRect","nodeWidth","observe","unobserve","ResponsiveLayout","hiddenColumns","collapseFormatter","collapseStartOpen","collapseHandleColumn","formatCollapsedData","order","generateCollapsedContent","generateCollapsedRowContent","colCount","working","getFlexBaseWidth","hideColumn","showColumn","generateCollapsedRowData","mockCellComponent","titleData","valueData","node_content","titleHighlight","innerText","SelectRow","selecting","lastClickedRow","selectPrev","headerCheckboxElement","_rowSelectionChanged","endSelect","selected","_clearSelection","lastClickedRowIdx","rowIdx","fromRowIdx","toRowIdx","toggledRows","toggledRow","_selectRow","rowMatch","rowInfo","checkboxEl","childRowSelection","selectedRow","aRow","bRow","alignEmptyValues","decimalSeparator","thousandSeparator","emptyAlign","localeCompare","el1","el2","calc","d","as","bs","a1","b1","L","rx","rd","isFinite","string","time","boolean","array","alphanum","Sort","arrowEl","sorterParams","startingDir","headerSortStartingDir","newSortList","sortListActual","rowComponents","clearColumnHeaders","sortObj","findSorter","setColumnHeader","_sortItems","sorterCount","sortItem","_sortRow","el1Comp","el2Comp","defaultSorters","parameters","numeric","starts","ends","minLength","maxLength","regex","reg","unique","cellData","Validate","invalidCells","_extractValidator","substring","_buildValidator","validators","invalidIndex","defaultValidators","TabulatorFull"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"tabulator.js","sources":["../../src/js/core/defaults/options.js","../../src/js/core/CoreFeature.js","../../src/js/core/column/ColumnComponent.js","../../src/js/core/column/defaults/options.js","../../src/js/core/cell/CellComponent.js","../../src/js/core/cell/Cell.js","../../src/js/core/column/Column.js","../../src/js/core/tools/Helpers.js","../../src/js/core/tools/OptionsList.js","../../src/js/core/rendering/Renderer.js","../../src/js/core/rendering/renderers/BasicHorizontal.js","../../src/js/core/rendering/renderers/VirtualDomHorizontal.js","../../src/js/core/ColumnManager.js","../../src/js/core/row/RowComponent.js","../../src/js/core/row/Row.js","../../src/js/core/rendering/renderers/BasicVertical.js","../../src/js/core/rendering/renderers/VirtualDomVertical.js","../../src/js/core/RowManager.js","../../src/js/core/FooterManager.js","../../src/js/core/tools/InteractionMonitor.js","../../src/js/core/tools/ComponentFuctionBinder.js","../../src/js/core/tools/dataLoader.js","../../src/js/core/tools/ExternalEventBus.js","../../src/js/core/tools/InternalEventBus.js","../../src/js/core/tools/TableRegistry.js","../../src/js/core/Module.js","../../src/js/modules/Layout/defaults/modes/fitData.js","../../src/js/modules/Layout/defaults/modes/fitDataGeneral.js","../../src/js/modules/Layout/defaults/modes/fitDataStretch.js","../../src/js/modules/Layout/defaults/modes/fitColumns.js","../../src/js/modules/Layout/defaults/modes.js","../../src/js/modules/Layout/Layout.js","../../src/js/modules/Localize/defaults/langs.js","../../src/js/modules/Localize/Localize.js","../../src/js/modules/Comms/Comms.js","../../src/js/core/tools/ModuleBinder.js","../../src/js/core/Tabulator.js","../../src/js/modules/Accessor/defaults/accessors.js","../../src/js/modules/Accessor/Accessor.js","../../src/js/modules/Ajax/defaults/config.js","../../src/js/modules/Ajax/defaults/urlGenerator.js","../../src/js/modules/Ajax/defaults/loaderPromise.js","../../src/js/modules/Ajax/defaults/contentTypeFormatters.js","../../src/js/modules/Ajax/Ajax.js","../../src/js/modules/Clipboard/defaults/pasteActions.js","../../src/js/modules/Clipboard/defaults/pasteParsers.js","../../src/js/modules/Clipboard/Clipboard.js","../../src/js/modules/ColumnCalcs/CalcComponent.js","../../src/js/modules/ColumnCalcs/defaults/calculations.js","../../src/js/modules/ColumnCalcs/ColumnCalcs.js","../../src/js/modules/DataTree/DataTree.js","../../src/js/modules/Download/defaults/downloaders/csv.js","../../src/js/modules/Download/defaults/downloaders/json.js","../../src/js/modules/Download/defaults/downloaders/pdf.js","../../src/js/modules/Download/defaults/downloaders/xlsx.js","../../src/js/modules/Download/defaults/downloaders/html.js","../../src/js/modules/Download/defaults/downloaders.js","../../src/js/modules/Download/Download.js","../../src/js/modules/Edit/inputMask.js","../../src/js/modules/Edit/defaults/editors/input.js","../../src/js/modules/Edit/defaults/editors/textarea.js","../../src/js/modules/Edit/defaults/editors/number.js","../../src/js/modules/Edit/defaults/editors/range.js","../../src/js/modules/Edit/defaults/editors/select.js","../../src/js/modules/Edit/defaults/editors/autocomplete.js","../../src/js/modules/Edit/defaults/editors/star.js","../../src/js/modules/Edit/defaults/editors/progress.js","../../src/js/modules/Edit/defaults/editors/tickCross.js","../../src/js/modules/Edit/defaults/editors.js","../../src/js/modules/Edit/Edit.js","../../src/js/modules/Export/ExportRow.js","../../src/js/modules/Export/ExportColumn.js","../../src/js/modules/Export/Export.js","../../src/js/modules/Filter/defaults/filters.js","../../src/js/modules/Filter/Filter.js","../../src/js/modules/Format/defaults/formatters/plaintext.js","../../src/js/modules/Format/defaults/formatters/html.js","../../src/js/modules/Format/defaults/formatters/textarea.js","../../src/js/modules/Format/defaults/formatters/money.js","../../src/js/modules/Format/defaults/formatters/link.js","../../src/js/modules/Format/defaults/formatters/image.js","../../src/js/modules/Format/defaults/formatters/tickCross.js","../../src/js/modules/Format/defaults/formatters/datetime.js","../../src/js/modules/Format/defaults/formatters/datetimediff.js","../../src/js/modules/Format/defaults/formatters/lookup.js","../../src/js/modules/Format/defaults/formatters/star.js","../../src/js/modules/Format/defaults/formatters/traffic.js","../../src/js/modules/Format/defaults/formatters/progress.js","../../src/js/modules/Format/defaults/formatters/color.js","../../src/js/modules/Format/defaults/formatters/buttonTick.js","../../src/js/modules/Format/defaults/formatters/buttonCross.js","../../src/js/modules/Format/defaults/formatters/rownum.js","../../src/js/modules/Format/defaults/formatters/handle.js","../../src/js/modules/Format/defaults/formatters/responsiveCollapse.js","../../src/js/modules/Format/defaults/formatters/rowSelection.js","../../src/js/modules/Format/defaults/formatters.js","../../src/js/modules/Format/Format.js","../../src/js/modules/FrozenColumns/FrozenColumns.js","../../src/js/modules/FrozenRows/FrozenRows.js","../../src/js/modules/GroupRows/GroupComponent.js","../../src/js/modules/GroupRows/Group.js","../../src/js/modules/GroupRows/GroupRows.js","../../src/js/modules/History/defaults/undoers.js","../../src/js/modules/History/defaults/redoers.js","../../src/js/modules/History/History.js","../../src/js/modules/HtmlTableImport/HtmlTableImport.js","../../src/js/modules/Interaction/Interaction.js","../../src/js/modules/Keybindings/defaults/bindings.js","../../src/js/modules/Keybindings/defaults/actions.js","../../src/js/modules/Keybindings/Keybindings.js","../../src/js/modules/Menu/Menu.js","../../src/js/modules/MoveColumns/MoveColumns.js","../../src/js/modules/MoveRows/MoveRows.js","../../src/js/modules/Mutator/defaults/mutators.js","../../src/js/modules/Mutator/Mutator.js","../../src/js/modules/Page/Page.js","../../src/js/modules/Persistence/defaults/readers.js","../../src/js/modules/Persistence/defaults/writers.js","../../src/js/modules/Persistence/Persistence.js","../../src/js/modules/Print/Print.js","../../src/js/modules/ReactiveData/ReactiveData.js","../../src/js/modules/ResizeColumns/ResizeColumns.js","../../src/js/modules/ResizeRows/ResizeRows.js","../../src/js/modules/ResizeTable/ResizeTable.js","../../src/js/modules/ResponsiveLayout/ResponsiveLayout.js","../../src/js/modules/SelectRow/SelectRow.js","../../src/js/modules/Sort/defaults/sorters/number.js","../../src/js/modules/Sort/defaults/sorters/string.js","../../src/js/modules/Sort/defaults/sorters/datetime.js","../../src/js/modules/Sort/defaults/sorters/date.js","../../src/js/modules/Sort/defaults/sorters/time.js","../../src/js/modules/Sort/defaults/sorters/boolean.js","../../src/js/modules/Sort/defaults/sorters/array.js","../../src/js/modules/Sort/defaults/sorters/exists.js","../../src/js/modules/Sort/defaults/sorters/alphanum.js","../../src/js/modules/Sort/defaults/sorters.js","../../src/js/modules/Sort/Sort.js","../../src/js/modules/Validate/defaults/validators.js","../../src/js/modules/Validate/Validate.js","../../src/js/core/TabulatorFull.js"],"sourcesContent":["export default {\r\n\r\n\tdebugEventsExternal:false, //flag to console log events\r\n\tdebugEventsInternal:false, //flag to console log events\r\n\tdebugInvalidOptions:true, //allow toggling of invalid option warnings\r\n\r\n\theight:false, //height of tabulator\r\n\tminHeight:false, //minimum height of tabulator\r\n\tmaxHeight:false, //maximum height of tabulator\r\n\r\n\tcolumnMaxWidth:false, //minimum global width for a column\r\n\tcolumnHeaderVertAlign:\"top\", //vertical alignment of column headers\r\n\r\n\tcolumns:[],//store for colum header info\r\n\tcolumnDefaults:{}, //store column default props\r\n\r\n\tdata:false, //default starting data\r\n\r\n\tautoColumns:false, //build columns from data row structure\r\n\tautoColumnsDefinitions:false,\r\n\r\n\tnestedFieldSeparator:\".\", //seperatpr for nested data\r\n\r\n\ttooltipGenerationMode:\"load\", //when to generate tooltips\r\n\r\n\tfooterElement:false, //hold footer element\r\n\r\n\tindex:\"id\", //filed for row index\r\n\r\n\ttextDirection:\"auto\",\r\n\r\n\taddRowPos:\"bottom\", //position to insert blank rows, top|bottom\r\n\r\n\theaderVisible:true, //hide header\r\n\r\n\trenderVertical:\"virtual\",\r\n\trenderHorizontal:\"basic\",\r\n\trenderVerticalBuffer:0, // set virtual DOM buffer size\r\n\r\n\tscrollToRowPosition:\"top\",\r\n\tscrollToRowIfVisible:true,\r\n\r\n\tscrollToColumnPosition:\"left\",\r\n\tscrollToColumnIfVisible:true,\r\n\r\n\trowFormatter:false,\r\n\trowFormatterPrint:null,\r\n\trowFormatterClipboard:null,\r\n\trowFormatterHtmlOutput:null,\r\n\r\n\tplaceholder:false,\r\n\r\n\tdataLoader:true,\r\n\tdataLoaderLoading:false,\r\n\tdataLoaderError:false,\r\n\r\n\tdataSendParams:{},\r\n\r\n\tdataReceiveParams:{},\r\n}","export default class CoreFeature{\r\n\r\n\tconstructor(table){\r\n\t\tthis.table = table;\r\n\t}\r\n\r\n\t//////////////////////////////////////////\r\n\t/////////////// DataLoad /////////////////\r\n\t//////////////////////////////////////////\r\n\r\n\treloadData(data, silent){\r\n\t\treturn this.table.dataLoader.load(data, undefined, undefined, undefined, silent);\r\n\t}\r\n\r\n\t//////////////////////////////////////////\r\n\t///////////// Localization ///////////////\r\n\t//////////////////////////////////////////\r\n\r\n\tlangText(){\r\n\t\treturn this.table.modules.localize.getText(...arguments);\r\n\t}\r\n\r\n\tlangBind(){\r\n\t\treturn this.table.modules.localize.bind(...arguments);\r\n\t}\r\n\r\n\tlangLocale(){\r\n\t\treturn this.table.modules.localize.getLocale(...arguments);\r\n\t}\r\n\r\n\r\n\t//////////////////////////////////////////\r\n\t////////// Inter Table Comms /////////////\r\n\t//////////////////////////////////////////\r\n\r\n\tcommsConnections(){\r\n\t\treturn this.table.modules.comms.getConnections(...arguments);\r\n\t}\r\n\r\n\tcommsSend(){\r\n\t\treturn this.table.modules.comms.send(...arguments);\r\n\t}\r\n\r\n\t//////////////////////////////////////////\r\n\t//////////////// Layout /////////////////\r\n\t//////////////////////////////////////////\r\n\r\n\tlayoutMode(){\r\n\t\treturn this.table.modules.layout.getMode();\r\n\t}\r\n\r\n\tlayoutRefresh(){\r\n\t\treturn this.table.modules.layout.layout();\r\n\t}\r\n\r\n\r\n\t//////////////////////////////////////////\r\n\t/////////////// Event Bus ////////////////\r\n\t//////////////////////////////////////////\r\n\r\n\tsubscribe(){\r\n\t\tthis.table.eventBus.subscribe(...arguments);\r\n\t}\r\n\r\n\tunsubscribe(){\r\n\t\tthis.table.eventBus.unsubscribe(...arguments);\r\n\t}\r\n\r\n\tsubscribed(key){\r\n\t\tthis.table.eventBus.subscribed(key);\r\n\t}\r\n\r\n\tsubscriptionChange(){\r\n\t\tthis.table.eventBus.subscriptionChange(...arguments);\r\n\t}\r\n\r\n\tdispatch(){\r\n\t\tthis.table.eventBus.dispatch(...arguments);\r\n\t}\r\n\r\n\tchain(){\r\n\t\treturn this.table.eventBus.chain(...arguments);\r\n\t}\r\n\r\n\tconfirm(){\r\n\t\treturn this.table.eventBus.confirm(...arguments);\r\n\t}\r\n\r\n\tdispatchExternal(){\r\n\t\tthis.table.externalEvents.dispatch(...arguments);\r\n\t}\r\n\r\n\tsubscribedExternal(key){\r\n\t\tthis.table.externalEvents.subscribed(key);\r\n\t}\r\n\r\n\tsubscriptionChangeExternal(){\r\n\t\tthis.table.externalEvents.subscriptionChange(...arguments);\r\n\t}\r\n\r\n\t//////////////////////////////////////////\r\n\t//////////////// Options /////////////////\r\n\t//////////////////////////////////////////\r\n\r\n\toptions(key, value){\r\n\t\tif(typeof value !== \"undefined\"){\r\n\t\t\tthis.table.options[key] = value;\r\n\t\t}\r\n\r\n\t\treturn this.table.options[key];\r\n\t}\r\n\r\n\tsetOption(key, value){\r\n\t\tif(typeof value !== \"undefined\"){\r\n\t\t\tthis.table.options[key] = value;\r\n\t\t}\r\n\r\n\t\treturn this.table.options[key];\r\n\t}\r\n\r\n\r\n\t//////////////////////////////////////////\r\n\t//////////////// Modules /////////////////\r\n\t//////////////////////////////////////////\r\n\r\n\tmodule(key){\r\n\t\treturn this.table.module(key);\r\n\t}\r\n}","//public column object\r\nexport default class ColumnComponent {\r\n\tconstructor (column){\r\n\t\tthis._column = column;\r\n\t\tthis.type = \"ColumnComponent\";\r\n\r\n\t\treturn new Proxy(this, {\r\n\t\t\tget: function(target, name, receiver) {\r\n\t\t\t\tif (typeof target[name] !== \"undefined\") {\r\n\t\t\t\t\treturn target[name];\r\n\t\t\t\t}else{\r\n\t\t\t\t\treturn target._column.table.componentFunctionBinder.handle(\"column\", target._column, name)\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t})\r\n\t}\r\n\r\n\tgetElement(){\r\n\t\treturn this._column.getElement();\r\n\t}\r\n\r\n\tgetDefinition(){\r\n\t\treturn this._column.getDefinition();\r\n\t}\r\n\r\n\tgetField(){\r\n\t\treturn this._column.getField();\r\n\t}\r\n\r\n\tgetCells(){\r\n\t\tvar cells = [];\r\n\r\n\t\tthis._column.cells.forEach(function(cell){\r\n\t\t\tcells.push(cell.getComponent());\r\n\t\t});\r\n\r\n\t\treturn cells;\r\n\t}\r\n\r\n\tisVisible(){\r\n\t\treturn this._column.visible;\r\n\t}\r\n\r\n\tshow(){\r\n\t\tif(this._column.isGroup){\r\n\t\t\tthis._column.columns.forEach(function(column){\r\n\t\t\t\tcolumn.show();\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tthis._column.show();\r\n\t\t}\r\n\t}\r\n\r\n\thide(){\r\n\t\tif(this._column.isGroup){\r\n\t\t\tthis._column.columns.forEach(function(column){\r\n\t\t\t\tcolumn.hide();\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tthis._column.hide();\r\n\t\t}\r\n\t}\r\n\r\n\ttoggle(){\r\n\t\tif(this._column.visible){\r\n\t\t\tthis.hide();\r\n\t\t}else{\r\n\t\t\tthis.show();\r\n\t\t}\r\n\t}\r\n\r\n\tdelete(){\r\n\t\treturn this._column.delete();\r\n\t}\r\n\r\n\tgetSubColumns(){\r\n\t\tvar output = [];\r\n\r\n\t\tif(this._column.columns.length){\r\n\t\t\tthis._column.columns.forEach(function(column){\r\n\t\t\t\toutput.push(column.getComponent());\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tgetParentColumn(){\r\n\t\treturn this._column.parent instanceof Column ? this._column.parent.getComponent() : false;\r\n\t}\r\n\r\n\t_getSelf(){\r\n\t\treturn this._column;\r\n\t}\r\n\r\n\tscrollTo(){\r\n\t\treturn this._column.table.columnManager.scrollToColumn(this._column);\r\n\t}\r\n\r\n\tgetTable(){\r\n\t\treturn this._column.table;\r\n\t}\r\n\r\n\tmove(to, after){\r\n\t\tvar toColumn = this._column.table.columnManager.findColumn(to);\r\n\r\n\t\tif(toColumn){\r\n\t\t\tthis._column.table.columnManager.moveColumn(this._column, toColumn, after)\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Move Error - No matching column found:\", toColumn);\r\n\t\t}\r\n\t}\r\n\r\n\tgetNextColumn(){\r\n\t\tvar nextCol = this._column.nextColumn();\r\n\r\n\t\treturn nextCol ? nextCol.getComponent() : false;\r\n\t}\r\n\r\n\tgetPrevColumn(){\r\n\t\tvar prevCol = this._column.prevColumn();\r\n\r\n\t\treturn prevCol ? prevCol.getComponent() : false;\r\n\t}\r\n\r\n\tupdateDefinition(updates){\r\n\t\treturn this._column.updateDefinition(updates);\r\n\t}\r\n\r\n\tgetWidth(){\r\n\t\treturn this._column.getWidth();\r\n\t}\r\n\r\n\tsetWidth(width){\r\n\t\tvar result;\r\n\r\n\t\tif(width === true){\r\n\t\t\tresult = this._column.reinitializeWidth(true);\r\n\t\t}else{\r\n\t\t\tresult = this._column.setWidth(width);\r\n\t\t}\r\n\r\n\t\tthis._column.table.columnManager.renderer.rerenderColumns(true);\r\n\r\n\t\treturn result;\r\n\t}\r\n}","export default {\r\n\t\"title\": undefined,\r\n\t\"field\": undefined,\r\n\t\"columns\": undefined,\r\n\t\"visible\": undefined,\r\n\t\"hozAlign\": undefined,\r\n\t\"vertAlign\": undefined,\r\n\t\"width\": undefined,\r\n\t\"minWidth\": 40,\r\n\t\"maxWidth\": undefined,\r\n\t\"tooltip\": undefined,\r\n\t\"cssClass\": undefined,\r\n\t\"variableHeight\": undefined,\r\n\t\"headerTooltip\": undefined,\r\n\t\"headerVertical\": undefined,\r\n\t\"headerHozAlign\": undefined,\r\n\t\"editableTitle\": undefined,\r\n}","//public cell object\r\nexport default class CellComponent {\r\n\r\n\tconstructor (cell){\r\n\t\tthis._cell = cell;\r\n\r\n\t\treturn new Proxy(this, {\r\n\t\t\tget: function(target, name, receiver) {\r\n\t\t\t\tif (typeof target[name] !== \"undefined\") {\r\n\t\t\t\t\treturn target[name];\r\n\t\t\t\t}else{\r\n\t\t\t\t\treturn target._cell.table.componentFunctionBinder.handle(\"cell\", target._cell, name)\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t})\r\n\t}\r\n\r\n\tgetValue(){\r\n\t\treturn this._cell.getValue();\r\n\t}\r\n\r\n\tgetOldValue(){\r\n\t\treturn this._cell.getOldValue();\r\n\t}\r\n\r\n\tgetInitialValue(){\r\n\t\treturn this._cell.initialValue;\r\n\t}\r\n\r\n\tgetElement(){\r\n\t\treturn this._cell.getElement();\r\n\t}\r\n\r\n\tgetRow(){\r\n\t\treturn this._cell.row.getComponent();\r\n\t}\r\n\r\n\tgetData(){\r\n\t\treturn this._cell.row.getData();\r\n\t}\r\n\r\n\tgetField(){\r\n\t\treturn this._cell.column.getField();\r\n\t}\r\n\r\n\tgetColumn(){\r\n\t\treturn this._cell.column.getComponent();\r\n\t}\r\n\r\n\tsetValue(value, mutate){\r\n\t\tif(typeof mutate == \"undefined\"){\r\n\t\t\tmutate = true;\r\n\t\t}\r\n\r\n\t\tthis._cell.setValue(value, mutate);\r\n\t}\r\n\r\n\trestoreOldValue(){\r\n\t\tthis._cell.setValueActual(this._cell.getOldValue());\r\n\t}\r\n\r\n\trestoreInitialValue(){\r\n\t\tthis._cell.setValueActual(this._cell.initialValue);\r\n\t}\r\n\r\n\tcheckHeight(){\r\n\t\tthis._cell.checkHeight();\r\n\t}\r\n\r\n\tgetTable(){\r\n\t\treturn this._cell.table;\r\n\t}\r\n\r\n\t_getSelf(){\r\n\t\treturn this._cell;\r\n\t}\r\n}","import CoreFeature from '../CoreFeature.js';\r\nimport CellComponent from './CellComponent.js';\r\n\r\nexport default class Cell extends CoreFeature{\r\n\tconstructor(column, row){\r\n\t\tsuper(column.table);\r\n\r\n\t\tthis.table = column.table;\r\n\t\tthis.column = column;\r\n\t\tthis.row = row;\r\n\t\tthis.element = null;\r\n\t\tthis.value = null;\r\n\t\tthis.initialValue;\r\n\t\tthis.oldValue = null;\r\n\t\tthis.modules = {};\r\n\r\n\t\tthis.height = null;\r\n\t\tthis.width = null;\r\n\t\tthis.minWidth = null;\r\n\r\n\t\tthis.component = null;\r\n\r\n\t\tthis.loaded = false; //track if the cell has been added to the DOM yet\r\n\r\n\t\tthis.build();\r\n\t}\r\n\r\n\t//////////////// Setup Functions /////////////////\r\n\t//generate element\r\n\tbuild(){\r\n\t\tthis.generateElement();\r\n\r\n\t\tthis.setWidth();\r\n\r\n\t\tthis._configureCell();\r\n\r\n\t\tthis.setValueActual(this.column.getFieldValue(this.row.data));\r\n\r\n\t\tthis.initialValue = this.value;\r\n\t}\r\n\r\n\tgenerateElement(){\r\n\t\tthis.element = document.createElement('div');\r\n\t\tthis.element.className = \"tabulator-cell\";\r\n\t\tthis.element.setAttribute(\"role\", \"gridcell\");\r\n\t\tthis.element = this.element;\r\n\t}\r\n\r\n\t_configureCell(){\r\n\t\tvar element = this.element,\r\n\t\tfield = this.column.getField(),\r\n\t\tvertAligns = {\r\n\t\t\ttop:\"flex-start\",\r\n\t\t\tbottom:\"flex-end\",\r\n\t\t\tmiddle:\"center\",\r\n\t\t},\r\n\t\thozAligns = {\r\n\t\t\tleft:\"flex-start\",\r\n\t\t\tright:\"flex-end\",\r\n\t\t\tcenter:\"center\",\r\n\t\t};\r\n\r\n\t\t//set text alignment\r\n\t\telement.style.textAlign = this.column.hozAlign;\r\n\r\n\t\tif(this.column.vertAlign){\r\n\t\t\telement.style.display = \"inline-flex\";\r\n\r\n\t\t\telement.style.alignItems = vertAligns[this.column.vertAlign] || \"\";\r\n\r\n\t\t\tif(this.column.hozAlign){\r\n\t\t\t\telement.style.justifyContent = hozAligns[this.column.hozAlign] || \"\";\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(field){\r\n\t\t\telement.setAttribute(\"tabulator-field\", field);\r\n\t\t}\r\n\r\n\t\t//add class to cell if needed\r\n\t\tif(this.column.definition.cssClass){\r\n\t\t\tvar classNames = this.column.definition.cssClass.split(\" \")\r\n\t\t\tclassNames.forEach((className) => {\r\n\t\t\t\telement.classList.add(className)\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\t//update tooltip on mouse enter\r\n\t\tif (this.table.options.tooltipGenerationMode === \"hover\"){\r\n\t\t\telement.addEventListener(\"mouseenter\", (e) => {\r\n\t\t\t\tthis._generateTooltip();\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tthis.dispatch(\"cell-init\", this);\r\n\r\n\t\t//hide cell if not visible\r\n\t\tif(!this.column.visible){\r\n\t\t\tthis.hide();\r\n\t\t}\r\n\t}\r\n\r\n\t//generate cell contents\r\n\t_generateContents(){\r\n\t\tvar val;\r\n\r\n\t\tval = this.chain(\"cell-format\", this, null, () => {\r\n\t\t\treturn this.element.innerHTML = this.value;\r\n\t\t});\r\n\r\n\t\tswitch(typeof val){\r\n\t\t\tcase \"object\":\r\n\t\t\tif(val instanceof Node){\r\n\r\n\t\t\t\t//clear previous cell contents\r\n\t\t\t\twhile(this.element.firstChild) this.element.removeChild(this.element.firstChild);\r\n\r\n\t\t\t\tthis.element.appendChild(val);\r\n\t\t\t}else{\r\n\t\t\t\tthis.element.innerHTML = \"\";\r\n\r\n\t\t\t\tif(val != null){\r\n\t\t\t\t\tconsole.warn(\"Format Error - Formatter has returned a type of object, the only valid formatter object return is an instance of Node, the formatter returned:\", val);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\t\t\tcase \"undefined\":\r\n\t\t\tcase \"null\":\r\n\t\t\tthis.element.innerHTML = \"\";\r\n\t\t\tbreak;\r\n\t\t\tdefault:\r\n\t\t\tthis.element.innerHTML = val;\r\n\t\t}\r\n\t}\r\n\r\n\tcellRendered(){\r\n\t\tthis.dispatch(\"cell-rendered\", this);\r\n\t}\r\n\r\n\t//generate tooltip text\r\n\t_generateTooltip(){\r\n\t\tvar tooltip = this.column.tooltip;\r\n\r\n\t\tif(tooltip){\r\n\t\t\tif(tooltip === true){\r\n\t\t\t\ttooltip = this.value;\r\n\t\t\t}else if(typeof(tooltip) == \"function\"){\r\n\t\t\t\ttooltip = tooltip(this.getComponent());\r\n\r\n\t\t\t\tif(tooltip === false){\r\n\t\t\t\t\ttooltip = \"\";\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif(typeof tooltip === \"undefined\"){\r\n\t\t\t\ttooltip = \"\";\r\n\t\t\t}\r\n\r\n\t\t\tthis.element.setAttribute(\"title\", tooltip);\r\n\t\t}else{\r\n\t\t\tthis.element.setAttribute(\"title\", \"\");\r\n\t\t}\r\n\t}\r\n\r\n\t//////////////////// Getters ////////////////////\r\n\tgetElement(containerOnly){\r\n\t\tif(!this.loaded){\r\n\t\t\tthis.loaded = true;\r\n\t\t\tif(!containerOnly){\r\n\t\t\t\tthis.layoutElement();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this.element;\r\n\t}\r\n\r\n\tgetValue(){\r\n\t\treturn this.value;\r\n\t}\r\n\r\n\tgetOldValue(){\r\n\t\treturn this.oldValue;\r\n\t}\r\n\r\n\t//////////////////// Actions ////////////////////\r\n\tsetValue(value, mutate){\r\n\t\tvar changed = this.setValueProcessData(value, mutate);\r\n\r\n\t\tif(changed){\r\n\t\t\tthis.dispatch(\"cell-value-updated\", this);\r\n\r\n\t\t\tthis.cellRendered();\r\n\r\n\t\t\tthis.dispatchExternal(\"cellEdited\", this.getComponent());\r\n\r\n\t\t\tif(this.subscribedExternal(\"dataChanged\")){\r\n\t\t\t\tthis.dispatchExternal(\"dataChanged\", this.table.rowManager.getData());\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tsetValueProcessData(value, mutate){\r\n\t\tvar changed = false;\r\n\r\n\t\tif(this.value != value){\r\n\r\n\t\t\tchanged = true;\r\n\r\n\t\t\tif(mutate){\r\n\t\t\t\tvalue = this.chain(\"cell-value-changing\", [this, value], null, value);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.setValueActual(value);\r\n\r\n\t\tif(changed){\r\n\t\t\tthis.dispatch(\"cell-value-changed\", this);\r\n\t\t}\r\n\r\n\t\treturn changed;\r\n\t}\r\n\r\n\tsetValueActual(value){\r\n\t\tthis.oldValue = this.value;\r\n\r\n\t\tthis.value = value;\r\n\r\n\t\tthis.dispatch(\"cell-value-save-before\", this);\r\n\r\n\t\tthis.column.setFieldValue(this.row.data, value);\r\n\r\n\t\tthis.dispatch(\"cell-value-save-after\", this);\r\n\r\n\t\tif(this.loaded){\r\n\t\t\tthis.layoutElement();\r\n\t\t}\r\n\t}\r\n\r\n\tlayoutElement(){\r\n\t\tthis._generateContents();\r\n\t\tthis._generateTooltip();\r\n\r\n\t\tthis.dispatch(\"cell-layout\", this);\r\n\t}\r\n\r\n\tsetWidth(){\r\n\t\tthis.width = this.column.width;\r\n\t\tthis.element.style.width = this.column.widthStyled;\r\n\t}\r\n\r\n\tclearWidth(){\r\n\t\tthis.width = \"\";\r\n\t\tthis.element.style.width = \"\";\r\n\t}\r\n\r\n\tgetWidth(){\r\n\t\treturn this.width || this.element.offsetWidth;\r\n\t}\r\n\r\n\tsetMinWidth(){\r\n\t\tthis.minWidth = this.column.minWidth;\r\n\t\tthis.element.style.minWidth = this.column.minWidthStyled;\r\n\t}\r\n\r\n\tsetMaxWidth(){\r\n\t\tthis.maxWidth = this.column.maxWidth;\r\n\t\tthis.element.style.maxWidth = this.column.maxWidthStyled;\r\n\t}\r\n\r\n\tcheckHeight(){\r\n\t\t// var height = this.element.css(\"height\");\r\n\t\tthis.row.reinitializeHeight();\r\n\t}\r\n\r\n\tclearHeight(){\r\n\t\tthis.element.style.height = \"\";\r\n\t\tthis.height = null;\r\n\t}\r\n\r\n\tsetHeight(){\r\n\t\tthis.height = this.row.height;\r\n\t\tthis.element.style.height = this.row.heightStyled;\r\n\t}\r\n\r\n\tgetHeight(){\r\n\t\treturn this.height || this.element.offsetHeight;\r\n\t}\r\n\r\n\tshow(){\r\n\t\tthis.element.style.display = this.column.vertAlign ? \"inline-flex\" : \"\";\r\n\t}\r\n\r\n\thide(){\r\n\t\tthis.element.style.display = \"none\";\r\n\t}\r\n\r\n\tdelete(){\r\n\t\tthis.dispatch(\"cell-delete\", this);\r\n\r\n\t\tif(!this.table.rowManager.redrawBlock && this.element.parentNode){\r\n\t\t\tthis.element.parentNode.removeChild(this.element);\r\n\t\t}\r\n\r\n\t\tthis.element = false;\r\n\t\tthis.column.deleteCell(this);\r\n\t\tthis.row.deleteCell(this);\r\n\t\tthis.calcs = {};\r\n\t}\r\n\r\n\tgetIndex(){\r\n\t\treturn this.row.getCellIndex(this);\r\n\t}\r\n\r\n\t//////////////// Object Generation /////////////////\r\n\tgetComponent(){\r\n\t\tif(!this.component){\r\n\t\t\tthis.component = new CellComponent(this);\r\n\t\t}\r\n\r\n\t\treturn this.component;\r\n\t}\r\n}","import CoreFeature from '../CoreFeature.js';\r\nimport ColumnComponent from './ColumnComponent.js';\r\nimport defaultOptions from './defaults/options.js';\r\n\r\nimport Cell from '../cell/Cell.js';\r\n\r\nclass Column extends CoreFeature{\r\n\r\n\tconstructor(def, parent){\r\n\t\tsuper(parent.table);\r\n\r\n\t\tthis.definition = def; //column definition\r\n\t\tthis.parent = parent; //hold parent object\r\n\t\tthis.type = \"column\"; //type of element\r\n\t\tthis.columns = []; //child columns\r\n\t\tthis.cells = []; //cells bound to this column\r\n\t\tthis.element = this.createElement(); //column header element\r\n\t\tthis.contentElement = false;\r\n\t\tthis.titleHolderElement = false;\r\n\t\tthis.titleElement = false;\r\n\t\tthis.groupElement = this.createGroupElement(); //column group holder element\r\n\t\tthis.isGroup = false;\r\n\t\tthis.tooltip = false; //hold column tooltip\r\n\t\tthis.hozAlign = \"\"; //horizontal text alignment\r\n\t\tthis.vertAlign = \"\"; //vert text alignment\r\n\r\n\t\t//multi dimensional filed handling\r\n\t\tthis.field =\"\";\r\n\t\tthis.fieldStructure = \"\";\r\n\t\tthis.getFieldValue = \"\";\r\n\t\tthis.setFieldValue = \"\";\r\n\r\n\t\tthis.titleFormatterRendered = false;\r\n\r\n\t\tthis.mapDefinitions();\r\n\r\n\t\tthis.setField(this.definition.field);\r\n\r\n\t\tthis.modules = {}; //hold module variables;\r\n\r\n\t\tthis.width = null; //column width\r\n\t\tthis.widthStyled = \"\"; //column width prestyled to improve render efficiency\r\n\t\tthis.maxWidth = null; //column maximum width\r\n\t\tthis.maxWidthStyled = \"\"; //column maximum prestyled to improve render efficiency\r\n\t\tthis.minWidth = null; //column minimum width\r\n\t\tthis.minWidthStyled = \"\"; //column minimum prestyled to improve render efficiency\r\n\t\tthis.widthFixed = false; //user has specified a width for this column\r\n\r\n\t\tthis.visible = true; //default visible state\r\n\r\n\t\tthis.component = null;\r\n\r\n\t\t//initialize column\r\n\t\tif(this.definition.columns){\r\n\r\n\t\t\tthis.isGroup = true;\r\n\r\n\t\t\tthis.definition.columns.forEach((def, i) => {\r\n\t\t\t\tvar newCol = new Column(def, this);\r\n\t\t\t\tthis.attachColumn(newCol);\r\n\t\t\t});\r\n\r\n\t\t\tthis.checkColumnVisibility();\r\n\t\t}else{\r\n\t\t\tparent.registerColumnField(this);\r\n\t\t}\r\n\r\n\t\tthis._initialize();\r\n\r\n\t\tthis.bindModuleColumns();\r\n\t}\r\n\r\n\tcreateElement (){\r\n\t\tvar el = document.createElement(\"div\");\r\n\r\n\t\tel.classList.add(\"tabulator-col\");\r\n\t\tel.setAttribute(\"role\", \"columnheader\");\r\n\t\tel.setAttribute(\"aria-sort\", \"none\");\r\n\r\n\t\treturn el;\r\n\t}\r\n\r\n\tcreateGroupElement (){\r\n\t\tvar el = document.createElement(\"div\");\r\n\r\n\t\tel.classList.add(\"tabulator-col-group-cols\");\r\n\r\n\t\treturn el;\r\n\t}\r\n\r\n\tmapDefinitions(){\r\n\t\tvar defaults = this.table.options.columnDefaults;\r\n\r\n\t\t//map columnDefaults onto column definitions\r\n\t\tif(defaults){\r\n\t\t\tfor(let key in defaults){\r\n\t\t\t\tif(typeof this.definition[key] === \"undefined\"){\r\n\t\t\t\t\tthis.definition[key] = defaults[key];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.definition = this.table.columnManager.optionsList.generate(Column.defaultOptionList, this.definition)\r\n\t}\r\n\r\n\tcheckDefinition(){\r\n\t\tObject.keys(this.definition).forEach((key) => {\r\n\t\t\tif(Column.defaultOptionList.indexOf(key) === -1){\r\n\t\t\t\tconsole.warn(\"Invalid column definition option in '\" + (this.field || this.definition.title) + \"' column:\", key)\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tsetField(field){\r\n\t\tthis.field = field;\r\n\t\tthis.fieldStructure = field ? (this.table.options.nestedFieldSeparator ? field.split(this.table.options.nestedFieldSeparator) : [field]) : [];\r\n\t\tthis.getFieldValue = this.fieldStructure.length > 1 ? this._getNestedData : this._getFlatData;\r\n\t\tthis.setFieldValue = this.fieldStructure.length > 1 ? this._setNestedData : this._setFlatData;\r\n\t}\r\n\r\n\t//register column position with column manager\r\n\tregisterColumnPosition(column){\r\n\t\tthis.parent.registerColumnPosition(column);\r\n\t}\r\n\r\n\t//register column position with column manager\r\n\tregisterColumnField(column){\r\n\t\tthis.parent.registerColumnField(column);\r\n\t}\r\n\r\n\t//trigger position registration\r\n\treRegisterPosition(){\r\n\t\tif(this.isGroup){\r\n\t\t\tthis.columns.forEach(function(column){\r\n\t\t\t\tcolumn.reRegisterPosition();\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tthis.registerColumnPosition(this);\r\n\t\t}\r\n\t}\r\n\r\n\t_mapDepricatedFunctionality(){\r\n\t\t//all previously deprecated functionality removed in the 5.0 release\r\n\t}\r\n\r\n\tsetTooltip(){\r\n\t\tvar def = this.definition;\r\n\r\n\t\t//set header tooltips\r\n\t\tvar tooltip = typeof def.headerTooltip === \"undefined\" ? def.tooltip : def.headerTooltip;\r\n\r\n\t\tif(tooltip){\r\n\t\t\tif(tooltip === true){\r\n\t\t\t\tif(def.field){\r\n\t\t\t\t\tthis.langBind(\"columns|\" + def.field, (value) => {\r\n\t\t\t\t\t\tthis.element.setAttribute(\"title\", value || def.title);\r\n\t\t\t\t\t});\r\n\t\t\t\t}else{\r\n\t\t\t\t\tthis.element.setAttribute(\"title\", def.title);\r\n\t\t\t\t}\r\n\r\n\t\t\t}else{\r\n\t\t\t\tif(typeof(tooltip) == \"function\"){\r\n\t\t\t\t\ttooltip = tooltip(this.getComponent());\r\n\r\n\t\t\t\t\tif(tooltip === false){\r\n\t\t\t\t\t\ttooltip = \"\";\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.element.setAttribute(\"title\", tooltip);\r\n\t\t\t}\r\n\r\n\t\t}else{\r\n\t\t\tthis.element.setAttribute(\"title\", \"\");\r\n\t\t}\r\n\t}\r\n\r\n\t//build header element\r\n\t_initialize(){\r\n\t\tvar def = this.definition;\r\n\r\n\t\twhile(this.element.firstChild) this.element.removeChild(this.element.firstChild);\r\n\r\n\t\tif(def.headerVertical){\r\n\t\t\tthis.element.classList.add(\"tabulator-col-vertical\");\r\n\r\n\t\t\tif(def.headerVertical === \"flip\"){\r\n\t\t\t\tthis.element.classList.add(\"tabulator-col-vertical-flip\");\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.contentElement = this._bindEvents();\r\n\r\n\t\tthis.contentElement = this._buildColumnHeaderContent();\r\n\r\n\t\tthis.element.appendChild(this.contentElement);\r\n\r\n\t\tif(this.isGroup){\r\n\t\t\tthis._buildGroupHeader();\r\n\t\t}else{\r\n\t\t\tthis._buildColumnHeader();\r\n\t\t}\r\n\r\n\t\tthis.setTooltip();\r\n\r\n\t\tthis.dispatch(\"column-init\", this);\r\n\r\n\t\t//update header tooltip on mouse enter\r\n\t\tthis.element.addEventListener(\"mouseenter\", (e) => {\r\n\t\t\tthis.setTooltip();\r\n\t\t});\r\n\t}\r\n\r\n\t_bindEvents(){\r\n\t\tvar def = this.definition,\r\n\t\tdblTap,\ttapHold, tap;\r\n\r\n\t\t//setup header click event bindings\r\n\t\tif(typeof(def.headerClick) == \"function\"){\r\n\t\t\tthis.element.addEventListener(\"click\", (e) => {def.headerClick(e, this.getComponent());});\r\n\t\t}\r\n\r\n\t\tif(typeof(def.headerDblClick) == \"function\"){\r\n\t\t\tthis.element.addEventListener(\"dblclick\", (e) => {def.headerDblClick(e, this.getComponent());});\r\n\t\t}\r\n\r\n\t\tif(typeof(def.headerContext) == \"function\"){\r\n\t\t\tthis.element.addEventListener(\"contextmenu\", (e) => {def.headerContext(e, this.getComponent());});\r\n\t\t}\r\n\r\n\t\t//setup header tap event bindings\r\n\t\tif(typeof(def.headerTap) == \"function\"){\r\n\t\t\ttap = false;\r\n\r\n\t\t\tthis.element.addEventListener(\"touchstart\", (e) => {\r\n\t\t\t\ttap = true;\r\n\t\t\t}, {passive: true});\r\n\r\n\t\t\tthis.element.addEventListener(\"touchend\", (e) => {\r\n\t\t\t\tif(tap){\r\n\t\t\t\t\tdef.headerTap(e, this.getComponent());\r\n\t\t\t\t}\r\n\r\n\t\t\t\ttap = false;\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif(typeof(def.headerDblTap) == \"function\"){\r\n\t\t\tdblTap = null;\r\n\r\n\t\t\tthis.element.addEventListener(\"touchend\", (e) => {\r\n\r\n\t\t\t\tif(dblTap){\r\n\t\t\t\t\tclearTimeout(dblTap);\r\n\t\t\t\t\tdblTap = null;\r\n\r\n\t\t\t\t\tdef.headerDblTap(e, this.getComponent());\r\n\t\t\t\t}else{\r\n\r\n\t\t\t\t\tdblTap = setTimeout(() => {\r\n\t\t\t\t\t\tclearTimeout(dblTap);\r\n\t\t\t\t\t\tdblTap = null;\r\n\t\t\t\t\t}, 300);\r\n\t\t\t\t}\r\n\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif(typeof(def.headerTapHold) == \"function\"){\r\n\t\t\ttapHold = null;\r\n\r\n\t\t\tthis.element.addEventListener(\"touchstart\", (e) => {\r\n\t\t\t\tclearTimeout(tapHold);\r\n\r\n\t\t\t\ttapHold = setTimeout(function(){\r\n\t\t\t\t\tclearTimeout(tapHold);\r\n\t\t\t\t\ttapHold = null;\r\n\t\t\t\t\ttap = false;\r\n\t\t\t\t\tdef.headerTapHold(e, this.getComponent());\r\n\t\t\t\t}, 1000);\r\n\r\n\t\t\t}, {passive: true});\r\n\r\n\t\t\tthis.element.addEventListener(\"touchend\", (e) => {\r\n\t\t\t\tclearTimeout(tapHold);\r\n\t\t\t\ttapHold = null;\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\t//build header element for header\r\n\t_buildColumnHeader(){\r\n\t\tvar def = this.definition,\r\n\t\ttable = this.table;\r\n\r\n\t\tthis.dispatch(\"column-layout\", this);\r\n\r\n\t\t//set column visibility\r\n\t\tif(typeof def.visible != \"undefined\"){\r\n\t\t\tif(def.visible){\r\n\t\t\t\tthis.show(true);\r\n\t\t\t}else{\r\n\t\t\t\tthis.hide(true);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//asign additional css classes to column header\r\n\t\tif(def.cssClass){\r\n\t\t\tvar classeNames = def.cssClass.split(\" \");\r\n\t\t\tclasseNames.forEach((className) => {\r\n\t\t\t\tthis.element.classList.add(className);\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif(def.field){\r\n\t\t\tthis.element.setAttribute(\"tabulator-field\", def.field);\r\n\t\t}\r\n\r\n\t\t//set min width if present\r\n\t\tthis.setMinWidth(parseInt(def.minWidth));\r\n\r\n\t\tif(def.maxWidth){\r\n\t\t\tthis.setMaxWidth(parseInt(def.maxWidth));\r\n\t\t}\r\n\r\n\t\tthis.reinitializeWidth();\r\n\r\n\t\t//set tooltip if present\r\n\t\tthis.tooltip = this.definition.tooltip;\r\n\r\n\t\t//set orizontal text alignment\r\n\t\tthis.hozAlign = this.definition.hozAlign;\r\n\t\tthis.vertAlign = this.definition.vertAlign;\r\n\r\n\t\tthis.titleElement.style.textAlign = this.definition.headerHozAlign;\r\n\t}\r\n\r\n\t_buildColumnHeaderContent(){\r\n\t\tvar def = this.definition,\r\n\t\ttable = this.table;\r\n\r\n\t\tvar contentElement = document.createElement(\"div\");\r\n\t\tcontentElement.classList.add(\"tabulator-col-content\");\r\n\r\n\t\tthis.titleHolderElement = document.createElement(\"div\");\r\n\t\tthis.titleHolderElement.classList.add(\"tabulator-col-title-holder\");\r\n\r\n\t\tcontentElement.appendChild(this.titleHolderElement);\r\n\r\n\t\tthis.titleElement = this._buildColumnHeaderTitle();\r\n\r\n\t\tthis.titleHolderElement.appendChild(this.titleElement);\r\n\r\n\t\treturn contentElement;\r\n\t}\r\n\r\n\t//build title element of column\r\n\t_buildColumnHeaderTitle(){\r\n\t\tvar def = this.definition,\r\n\t\ttitle;\r\n\r\n\t\tvar titleHolderElement = document.createElement(\"div\");\r\n\t\ttitleHolderElement.classList.add(\"tabulator-col-title\");\r\n\r\n\t\tif(def.editableTitle){\r\n\t\t\tvar titleElement = document.createElement(\"input\");\r\n\t\t\ttitleElement.classList.add(\"tabulator-title-editor\");\r\n\r\n\t\t\ttitleElement.addEventListener(\"click\", (e) => {\r\n\t\t\t\te.stopPropagation();\r\n\t\t\t\ttitleElement.focus();\r\n\t\t\t});\r\n\r\n\t\t\ttitleElement.addEventListener(\"change\", () => {\r\n\t\t\t\tdef.title = titleElement.value;\r\n\t\t\t\tthis.dispatchExternal(\"columnTitleChanged\", this.getComponent());\r\n\t\t\t});\r\n\r\n\t\t\ttitleHolderElement.appendChild(titleElement);\r\n\r\n\t\t\tif(def.field){\r\n\t\t\t\tthis.langBind(\"columns|\" + def.field, (text) => {\r\n\t\t\t\t\ttitleElement.value = text || (def.title || \" \");\r\n\t\t\t\t});\r\n\t\t\t}else{\r\n\t\t\t\ttitleElement.value = def.title || \" \";\r\n\t\t\t}\r\n\r\n\t\t}else{\r\n\t\t\tif(def.field){\r\n\t\t\t\tthis.langBind(\"columns|\" + def.field, (text) => {\r\n\t\t\t\t\tthis._formatColumnHeaderTitle(titleHolderElement, text || (def.title || \" \"));\r\n\t\t\t\t});\r\n\t\t\t}else{\r\n\t\t\t\tthis._formatColumnHeaderTitle(titleHolderElement, def.title || \" \");\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn titleHolderElement;\r\n\t}\r\n\r\n\t_formatColumnHeaderTitle(el, title){\r\n\t\tvar contents = this.chain(\"column-format\", [this, title, el], null, () => {\r\n\t\t\treturn title;\r\n\t\t});\r\n\r\n\t\tswitch(typeof contents){\r\n\t\t\tcase \"object\":\r\n\t\t\tif(contents instanceof Node){\r\n\t\t\t\tel.appendChild(contents);\r\n\t\t\t}else{\r\n\t\t\t\tel.innerHTML = \"\";\r\n\t\t\t\tconsole.warn(\"Format Error - Title formatter has returned a type of object, the only valid formatter object return is an instance of Node, the formatter returned:\", contents);\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\t\t\tcase \"undefined\":\r\n\t\t\tcase \"null\":\r\n\t\t\tel.innerHTML = \"\";\r\n\t\t\tbreak;\r\n\t\t\tdefault:\r\n\t\t\tel.innerHTML = contents;\r\n\t\t}\r\n\t}\r\n\r\n\t//build header element for column group\r\n\t_buildGroupHeader(){\r\n\t\tthis.element.classList.add(\"tabulator-col-group\");\r\n\t\tthis.element.setAttribute(\"role\", \"columngroup\");\r\n\t\tthis.element.setAttribute(\"aria-title\", this.definition.title);\r\n\r\n\t\t//asign additional css classes to column header\r\n\t\tif(this.definition.cssClass){\r\n\t\t\tvar classeNames = this.definition.cssClass.split(\" \");\r\n\t\t\tclasseNames.forEach((className) => {\r\n\t\t\t\tthis.element.classList.add(className);\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tthis.titleElement.style.textAlign = this.definition.headerHozAlign;\r\n\r\n\t\tthis.element.appendChild(this.groupElement);\r\n\t}\r\n\r\n\t//flat field lookup\r\n\t_getFlatData(data){\r\n\t\treturn data[this.field];\r\n\t}\r\n\r\n\t//nested field lookup\r\n\t_getNestedData(data){\r\n\t\tvar dataObj = data,\r\n\t\tstructure = this.fieldStructure,\r\n\t\tlength = structure.length,\r\n\t\toutput;\r\n\r\n\t\tfor(let i = 0; i < length; i++){\r\n\r\n\t\t\tdataObj = dataObj[structure[i]];\r\n\r\n\t\t\toutput = dataObj;\r\n\r\n\t\t\tif(!dataObj){\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\t//flat field set\r\n\t_setFlatData(data, value){\r\n\t\tif(this.field){\r\n\t\t\tdata[this.field] = value;\r\n\t\t}\r\n\t}\r\n\r\n\t//nested field set\r\n\t_setNestedData(data, value){\r\n\t\tvar dataObj = data,\r\n\t\tstructure = this.fieldStructure,\r\n\t\tlength = structure.length;\r\n\r\n\t\tfor(let i = 0; i < length; i++){\r\n\r\n\t\t\tif(i == length -1){\r\n\t\t\t\tdataObj[structure[i]] = value;\r\n\t\t\t}else{\r\n\t\t\t\tif(!dataObj[structure[i]]){\r\n\t\t\t\t\tif(typeof value !== \"undefined\"){\r\n\t\t\t\t\t\tdataObj[structure[i]] = {};\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tdataObj = dataObj[structure[i]];\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//attach column to this group\r\n\tattachColumn(column){\r\n\t\tif(this.groupElement){\r\n\t\t\tthis.columns.push(column);\r\n\t\t\tthis.groupElement.appendChild(column.getElement());\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Column Warning - Column being attached to another column instead of column group\");\r\n\t\t}\r\n\t}\r\n\r\n\t//vertically align header in column\r\n\tverticalAlign(alignment, height){\r\n\r\n\t\t//calculate height of column header and group holder element\r\n\t\tvar parentHeight = this.parent.isGroup ? this.parent.getGroupElement().clientHeight : (height || this.parent.getHeadersElement().clientHeight);\r\n\t\t// var parentHeight = this.parent.isGroup ? this.parent.getGroupElement().clientHeight : this.parent.getHeadersElement().clientHeight;\r\n\r\n\t\tthis.element.style.height = parentHeight + \"px\";\r\n\r\n\t\tif(this.isGroup){\r\n\t\t\tthis.groupElement.style.minHeight = (parentHeight - this.contentElement.offsetHeight) + \"px\";\r\n\t\t}\r\n\r\n\t\t//vertically align cell contents\r\n\t\tif(!this.isGroup && alignment !== \"top\"){\r\n\t\t\tif(alignment === \"bottom\"){\r\n\t\t\t\tthis.element.style.paddingTop = (this.element.clientHeight - this.contentElement.offsetHeight) + \"px\";\r\n\t\t\t}else{\r\n\t\t\t\tthis.element.style.paddingTop = ((this.element.clientHeight - this.contentElement.offsetHeight) / 2) + \"px\";\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.columns.forEach(function(column){\r\n\t\t\tcolumn.verticalAlign(alignment);\r\n\t\t});\r\n\t}\r\n\r\n\t//clear vertical alignmenet\r\n\tclearVerticalAlign(){\r\n\t\tthis.element.style.paddingTop = \"\";\r\n\t\tthis.element.style.height = \"\";\r\n\t\tthis.element.style.minHeight = \"\";\r\n\t\tthis.groupElement.style.minHeight = \"\";\r\n\r\n\t\tthis.columns.forEach(function(column){\r\n\t\t\tcolumn.clearVerticalAlign();\r\n\t\t});\r\n\t}\r\n\r\n\tbindModuleColumns (){\r\n\t\t//check if rownum formatter is being used on a column\r\n\t\tif(this.definition.formatter == \"rownum\"){\r\n\t\t\tthis.table.rowManager.rowNumColumn = this;\r\n\t\t}\r\n\t}\r\n\r\n\t//// Retreive Column Information ////\r\n\t//return column header element\r\n\tgetElement(){\r\n\t\treturn this.element;\r\n\t}\r\n\r\n\t//return colunm group element\r\n\tgetGroupElement(){\r\n\t\treturn this.groupElement;\r\n\t}\r\n\r\n\t//return field name\r\n\tgetField(){\r\n\t\treturn this.field;\r\n\t}\r\n\r\n\t//return the first column in a group\r\n\tgetFirstColumn(){\r\n\t\tif(!this.isGroup){\r\n\t\t\treturn this;\r\n\t\t}else{\r\n\t\t\tif(this.columns.length){\r\n\t\t\t\treturn this.columns[0].getFirstColumn();\r\n\t\t\t}else{\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//return the last column in a group\r\n\tgetLastColumn(){\r\n\t\tif(!this.isGroup){\r\n\t\t\treturn this;\r\n\t\t}else{\r\n\t\t\tif(this.columns.length){\r\n\t\t\t\treturn this.columns[this.columns.length -1].getLastColumn();\r\n\t\t\t}else{\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//return all columns in a group\r\n\tgetColumns(){\r\n\t\treturn this.columns;\r\n\t}\r\n\r\n\t//return all columns in a group\r\n\tgetCells(){\r\n\t\treturn this.cells;\r\n\t}\r\n\r\n\t//retreive the top column in a group of columns\r\n\tgetTopColumn(){\r\n\t\tif(this.parent.isGroup){\r\n\t\t\treturn this.parent.getTopColumn();\r\n\t\t}else{\r\n\t\t\treturn this;\r\n\t\t}\r\n\t}\r\n\r\n\t//return column definition object\r\n\tgetDefinition(updateBranches){\r\n\t\tvar colDefs = [];\r\n\r\n\t\tif(this.isGroup && updateBranches){\r\n\t\t\tthis.columns.forEach(function(column){\r\n\t\t\t\tcolDefs.push(column.getDefinition(true));\r\n\t\t\t});\r\n\r\n\t\t\tthis.definition.columns = colDefs;\r\n\t\t}\r\n\r\n\t\treturn this.definition;\r\n\t}\r\n\r\n\t//////////////////// Actions ////////////////////\r\n\tcheckColumnVisibility(){\r\n\t\tvar visible = false;\r\n\r\n\t\tthis.columns.forEach(function(column){\r\n\t\t\tif(column.visible){\r\n\t\t\t\tvisible = true;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tif(visible){\r\n\t\t\tthis.show();\r\n\t\t\tthis.dispatchExternal(\"columnVisibilityChanged\", this.getComponent(), false);\r\n\t\t}else{\r\n\t\t\tthis.hide();\r\n\t\t}\r\n\t}\r\n\r\n\t//show column\r\n\tshow(silent, responsiveToggle){\r\n\t\tif(!this.visible){\r\n\t\t\tthis.visible = true;\r\n\r\n\t\t\tthis.element.style.display = \"\";\r\n\r\n\t\t\tif(this.parent.isGroup){\r\n\t\t\t\tthis.parent.checkColumnVisibility();\r\n\t\t\t}\r\n\r\n\t\t\tthis.cells.forEach(function(cell){\r\n\t\t\t\tcell.show();\r\n\t\t\t});\r\n\r\n\t\t\tif(!this.isGroup && this.width === null){\r\n\t\t\t\tthis.reinitializeWidth();\r\n\t\t\t}\r\n\r\n\t\t\tthis.table.columnManager._verticalAlignHeaders();\r\n\r\n\t\t\tthis.dispatch(\"column-show\", this, responsiveToggle);\r\n\r\n\t\t\tif(!silent){\r\n\t\t\t\tthis.dispatchExternal(\"columnVisibilityChanged\", this.getComponent(), true);\r\n\t\t\t}\r\n\r\n\t\t\tif(this.parent.isGroup){\r\n\t\t\t\tthis.parent.matchChildWidths();\r\n\t\t\t}\r\n\r\n\t\t\tif(!this.silent){\r\n\t\t\t\tthis.table.columnManager.renderer.rerenderColumns();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//hide column\r\n\thide(silent, responsiveToggle){\r\n\t\tif(this.visible){\r\n\t\t\tthis.visible = false;\r\n\r\n\t\t\tthis.element.style.display = \"none\";\r\n\r\n\t\t\tthis.table.columnManager._verticalAlignHeaders();\r\n\r\n\t\t\tif(this.parent.isGroup){\r\n\t\t\t\tthis.parent.checkColumnVisibility();\r\n\t\t\t}\r\n\r\n\t\t\tthis.cells.forEach(function(cell){\r\n\t\t\t\tcell.hide();\r\n\t\t\t});\r\n\r\n\t\t\tthis.dispatch(\"column-hide\", this);\r\n\r\n\t\t\tif(!silent){\r\n\t\t\t\tthis.dispatchExternal(\"columnVisibilityChanged\", this.getComponent(), false);\r\n\t\t\t}\r\n\r\n\t\t\tif(this.parent.isGroup){\r\n\t\t\t\tthis.parent.matchChildWidths();\r\n\t\t\t}\r\n\r\n\t\t\tif(!this.silent){\r\n\t\t\t\tthis.table.columnManager.renderer.rerenderColumns();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tmatchChildWidths(){\r\n\t\tvar childWidth = 0;\r\n\r\n\t\tif(this.contentElement && this.columns.length){\r\n\t\t\tthis.columns.forEach(function(column){\r\n\t\t\t\tif(column.visible){\r\n\t\t\t\t\tchildWidth += column.getWidth();\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tthis.contentElement.style.maxWidth = (childWidth - 1) + \"px\";\r\n\r\n\t\t\tif(this.parent.isGroup){\r\n\t\t\t\tthis.parent.matchChildWidths();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tremoveChild(child){\r\n\t\tvar index = this.columns.indexOf(child);\r\n\r\n\t\tif(index > -1){\r\n\t\t\tthis.columns.splice(index, 1);\r\n\t\t}\r\n\r\n\t\tif(!this.columns.length){\r\n\t\t\tthis.delete();\r\n\t\t}\r\n\t}\r\n\r\n\tsetWidth(width){\r\n\t\tthis.widthFixed = true;\r\n\t\tthis.setWidthActual(width);\r\n\t}\r\n\r\n\tsetWidthActual(width){\r\n\t\tif(isNaN(width)){\r\n\t\t\twidth = Math.floor((this.table.element.clientWidth/100) * parseInt(width));\r\n\t\t}\r\n\r\n\t\twidth = Math.max(this.minWidth, width);\r\n\r\n\t\tif(this.maxWidth){\r\n\t\t\twidth = Math.min(this.maxWidth, width);\r\n\t\t}\r\n\r\n\t\tthis.width = width;\r\n\t\tthis.widthStyled = width ? width + \"px\" : \"\";\r\n\r\n\t\tthis.element.style.width = this.widthStyled;\r\n\r\n\t\tif(!this.isGroup){\r\n\t\t\tthis.cells.forEach(function(cell){\r\n\t\t\t\tcell.setWidth();\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif(this.parent.isGroup){\r\n\t\t\tthis.parent.matchChildWidths();\r\n\t\t}\r\n\r\n\t\tthis.dispatch(\"column-width\", this);\r\n\t}\r\n\r\n\tcheckCellHeights(){\r\n\t\tvar rows = [];\r\n\r\n\t\tthis.cells.forEach(function(cell){\r\n\t\t\tif(cell.row.heightInitialized){\r\n\t\t\t\tif(cell.row.getElement().offsetParent !== null){\r\n\t\t\t\t\trows.push(cell.row);\r\n\t\t\t\t\tcell.row.clearCellHeight();\r\n\t\t\t\t}else{\r\n\t\t\t\t\tcell.row.heightInitialized = false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\trows.forEach(function(row){\r\n\t\t\trow.calcHeight();\r\n\t\t});\r\n\r\n\t\trows.forEach(function(row){\r\n\t\t\trow.setCellHeight();\r\n\t\t});\r\n\t}\r\n\r\n\tgetWidth(){\r\n\t\tvar width = 0;\r\n\r\n\t\tif(this.isGroup){\r\n\t\t\tthis.columns.forEach(function(column){\r\n\t\t\t\tif(column.visible){\r\n\t\t\t\t\twidth += column.getWidth();\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\twidth = this.width;\r\n\t\t}\r\n\r\n\t\treturn width;\r\n\t}\r\n\r\n\tgetHeight(){\r\n\t\treturn this.element.offsetHeight;\r\n\t}\r\n\r\n\tsetMinWidth(minWidth){\r\n\t\tthis.minWidth = minWidth;\r\n\t\tthis.minWidthStyled = minWidth ? minWidth + \"px\" : \"\";\r\n\r\n\t\tthis.element.style.minWidth = this.minWidthStyled;\r\n\r\n\t\tthis.cells.forEach(function(cell){\r\n\t\t\tcell.setMinWidth();\r\n\t\t});\r\n\t}\r\n\r\n\tsetMaxWidth(maxWidth){\r\n\t\tthis.maxWidth = maxWidth;\r\n\t\tthis.maxWidthStyled = maxWidth ? maxWidth + \"px\" : \"\";\r\n\r\n\t\tthis.element.style.maxWidth = this.maxWidthStyled;\r\n\r\n\t\tthis.cells.forEach(function(cell){\r\n\t\t\tcell.setMaxWidth();\r\n\t\t});\r\n\t}\r\n\r\n\tdelete(){\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tvar index;\r\n\r\n\t\t\tif(this.isGroup){\r\n\t\t\t\tthis.columns.forEach(function(column){\r\n\t\t\t\t\tcolumn.delete();\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\tthis.dispatch(\"column-delete\", this);\r\n\r\n\t\t\tvar cellCount = this.cells.length;\r\n\r\n\t\t\tfor(let i = 0; i < cellCount; i++){\r\n\t\t\t\tthis.cells[0].delete();\r\n\t\t\t}\r\n\r\n\t\t\tif(this.element.parentNode){\r\n\t\t\t\tthis.element.parentNode.removeChild(this.element);\r\n\t\t\t}\r\n\r\n\t\t\tthis.element = false;\r\n\t\t\tthis.contentElement = false;\r\n\t\t\tthis.titleElement = false;\r\n\t\t\tthis.groupElement = false;\r\n\r\n\t\t\tif(this.parent.isGroup){\r\n\t\t\t\tthis.parent.removeChild(this);\r\n\t\t\t}\r\n\r\n\t\t\tthis.table.columnManager.deregisterColumn(this);\r\n\r\n\t\t\tthis.table.columnManager.renderer.rerenderColumns(true);\r\n\r\n\t\t\tresolve();\r\n\t\t});\r\n\t}\r\n\r\n\tcolumnRendered(){\r\n\t\tif(this.titleFormatterRendered){\r\n\t\t\tthis.titleFormatterRendered();\r\n\t\t}\r\n\t}\r\n\r\n\t//////////////// Cell Management /////////////////\r\n\t//generate cell for this column\r\n\tgenerateCell(row){\r\n\t\tvar cell = new Cell(this, row);\r\n\r\n\t\tthis.cells.push(cell);\r\n\r\n\t\treturn cell;\r\n\t}\r\n\r\n\tnextColumn(){\r\n\t\tvar index = this.table.columnManager.findColumnIndex(this);\r\n\t\treturn index > -1 ? this._nextVisibleColumn(index + 1) : false;\r\n\t}\r\n\r\n\t_nextVisibleColumn(index){\r\n\t\tvar column = this.table.columnManager.getColumnByIndex(index);\r\n\t\treturn !column || column.visible ? column : this._nextVisibleColumn(index + 1);\r\n\t}\r\n\r\n\tprevColumn(){\r\n\t\tvar index = this.table.columnManager.findColumnIndex(this);\r\n\t\treturn index > -1 ? this._prevVisibleColumn(index - 1) : false;\r\n\t}\r\n\r\n\t_prevVisibleColumn(index){\r\n\t\tvar column = this.table.columnManager.getColumnByIndex(index);\r\n\t\treturn !column || column.visible ? column : this._prevVisibleColumn(index - 1);\r\n\t}\r\n\r\n\treinitializeWidth(force){\r\n\t\tthis.widthFixed = false;\r\n\r\n\t\t//set width if present\r\n\t\tif(typeof this.definition.width !== \"undefined\" && !force){\r\n\t\t\tthis.setWidth(this.definition.width);\r\n\t\t}\r\n\r\n\t\tthis.dispatch(\"column-width-fit-before\", this);\r\n\r\n\t\tthis.fitToData();\r\n\r\n\t\tthis.dispatch(\"column-width-fit-after\", this);\r\n\t}\r\n\r\n\t//set column width to maximum cell width\r\n\tfitToData(){\r\n\t\tif(!this.widthFixed){\r\n\t\t\tthis.element.style.width = \"\";\r\n\r\n\t\t\tthis.cells.forEach((cell) => {\r\n\t\t\t\tcell.clearWidth();\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tvar maxWidth = this.element.offsetWidth;\r\n\r\n\t\tif(!this.width || !this.widthFixed){\r\n\t\t\tthis.cells.forEach((cell) => {\r\n\t\t\t\tvar width = cell.getWidth();\r\n\r\n\t\t\t\tif(width > maxWidth){\r\n\t\t\t\t\tmaxWidth = width;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tif(maxWidth){\r\n\t\t\t\tthis.setWidthActual(maxWidth + 1);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tupdateDefinition(updates){\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tvar definition;\r\n\r\n\t\t\tif(!this.isGroup){\r\n\t\t\t\tif(!this.parent.isGroup){\r\n\t\t\t\t\tdefinition = Object.assign({}, this.getDefinition());\r\n\t\t\t\t\tdefinition = Object.assign(definition, updates);\r\n\r\n\t\t\t\t\tthis.table.columnManager.addColumn(definition, false, this)\r\n\t\t\t\t\t.then((column) => {\r\n\r\n\t\t\t\t\t\tif(definition.field == this.field){\r\n\t\t\t\t\t\t\tthis.field = false; //cleair field name to prevent deletion of duplicate column from arrays\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tthis.delete()\r\n\t\t\t\t\t\t.then(() => {\r\n\t\t\t\t\t\t\tresolve(column.getComponent());\r\n\t\t\t\t\t\t}).catch((err) => {\r\n\t\t\t\t\t\t\treject(err);\r\n\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t}).catch((err) => {\r\n\t\t\t\t\t\treject(err);\r\n\t\t\t\t\t});\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.warn(\"Column Update Error - The updateDefinition function is only available on ungrouped columns\");\r\n\t\t\t\t\treject(\"Column Update Error - The updateDefinition function is only available on columns, not column groups\");\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Column Update Error - The updateDefinition function is only available on ungrouped columns\");\r\n\t\t\t\treject(\"Column Update Error - The updateDefinition function is only available on columns, not column groups\");\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tdeleteCell(cell){\r\n\t\tvar index = this.cells.indexOf(cell);\r\n\r\n\t\tif(index > -1){\r\n\t\t\tthis.cells.splice(index, 1);\r\n\t\t}\r\n\t}\r\n\r\n\t//////////////// Object Generation /////////////////\r\n\tgetComponent(){\r\n\t\tif(!this.component){\r\n\t\t\tthis.component = new ColumnComponent(this);\r\n\t\t}\r\n\r\n\t\treturn this.component;\r\n\t}\r\n}\r\n\r\nColumn.defaultOptionList = defaultOptions;\r\n\r\nexport default Column;","export default class Helpers{\r\n\r\n\tstatic elVisible(el){\r\n\t\treturn !(el.offsetWidth <= 0 && el.offsetHeight <= 0);\r\n\t}\r\n\r\n\tstatic elOffset(el){\r\n\t\tvar box = el.getBoundingClientRect();\r\n\r\n\t\treturn {\r\n\t\t\ttop: box.top + window.pageYOffset - document.documentElement.clientTop,\r\n\t\t\tleft: box.left + window.pageXOffset - document.documentElement.clientLeft\r\n\t\t};\r\n\t}\r\n\r\n\tstatic deepClone(obj){\r\n\t\tvar clone = Object.assign(Array.isArray(obj) ? [] : {}, obj);\r\n\r\n\t\tfor(var i in obj) {\r\n\t\t\tif(obj[i] != null && typeof(obj[i]) === \"object\"){\r\n\t\t\t\tif (obj[i] instanceof Date) {\r\n\t\t\t\t\tclone[i] = new Date(obj[i]);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tclone[i] = this.deepClone(obj[i]);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn clone;\r\n\t}\r\n}","export default class OptionsList {\r\n\tconstructor(table, msgType){\r\n\t\tthis.table = table;\r\n\t\tthis.msgType = msgType;\r\n\t\tthis.registeredDefaults = {};\r\n\t}\r\n\r\n\tregister(option, value){\r\n\t\tthis.registeredDefaults[option] = value;\r\n\t}\r\n\r\n\tgenerate(defaultOptions, userOptions = {}){\r\n\t\tvar output = Object.assign({}, this.registeredDefaults);\r\n\r\n\t\tObject.assign(output, defaultOptions);\r\n\r\n\t\tif(userOptions.debugInvalidOptions !== false || this.table.options.debugInvalidOptions){\r\n\t\t\tfor (var key in userOptions){\r\n\t\t\t\tif(!output.hasOwnProperty(key)){\r\n\t\t\t\t\tconsole.warn(\"Invalid \" + this.msgType + \" option:\", key)\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfor (var key in output){\r\n\t\t\tif(key in userOptions){\r\n\t\t\t\toutput[key] = userOptions[key];\r\n\t\t\t}else{\r\n\t\t\t\tif(Array.isArray(output[key])){\r\n\t\t\t\t\toutput[key] = Object.assign([], output[key]);\r\n\t\t\t\t}else if(typeof output[key] === \"object\" && output[key] !== null){\r\n\t\t\t\t\toutput[key] = Object.assign({}, output[key]);\r\n\t\t\t\t}else if (typeof output[key] === \"undefined\"){\r\n\t\t\t\t\tdelete output[key];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn output;\r\n\t}\r\n}","import CoreFeature from '../CoreFeature.js';\r\nimport Helpers from '../tools/Helpers.js';\r\n\r\nexport default class Renderer extends CoreFeature{\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.elementVertical = table.rowManager.element;\r\n\t\tthis.elementHorizontal = table.columnManager.element;\r\n\t\tthis.tableElement = table.rowManager.tableElement;\r\n\r\n\t\tthis.verticalFillMode = \"fit\"; // used by row manager to determin how to size the render area (\"fit\" - fits container to the contents, \"fill\" - fills the contianer without resizing it)\r\n\t}\r\n\r\n\r\n\t///////////////////////////////////\r\n\t/////// Internal Bindings /////////\r\n\t///////////////////////////////////\r\n\r\n\tinitialize(){\r\n\t\t//initialize core functionality\r\n\t}\r\n\r\n\tclearRows(){\r\n\t\t//clear down existing rows layout\r\n\t}\r\n\r\n\tclearColumns(){\r\n\t\t//clear down existing columns layout\r\n\t}\r\n\r\n\r\n\treinitializeColumnWidths(columns){\r\n\t\t//resize columns to fit data\r\n\t}\r\n\r\n\r\n\trenderRows(){\r\n\t\t//render rows from a clean slate\r\n\t}\r\n\r\n\trenderColumns(){\r\n\t\t//render columns from a clean slate\r\n\t}\r\n\r\n\trerenderRows(callback){\r\n\t\t// rerender rows and keep position\r\n\t\tif(callback){\r\n\t\t\tcallback();\r\n\t\t}\r\n\t}\r\n\r\n\trerenderColumns(update, blockRedraw){\r\n\t\t//rerender columns\r\n\t}\r\n\r\n\trenderRowCells(row){\r\n\t\t//render the cells in a row\r\n\t}\r\n\r\n\trerenderRowCells(row, force){\r\n\t\t//rerender the cells in a row\r\n\t}\r\n\r\n\tscrollColumns(left, dir){\r\n\t\t//handle horizontal scrolling\r\n\t}\r\n\r\n\tscrollRows(top, dir){\r\n\t\t//handle vertical scolling\r\n\t}\r\n\r\n\tresize(){\r\n\t\t//container has rezied, carry out any needed recalculations (DO NOT RERENDER IN THIS FUNCTION)\r\n\t}\r\n\r\n\tscrollToRow(row){\r\n\t\t//scroll to a specific row\r\n\t}\r\n\r\n\tscrollToRowNearestTop(row){\r\n\t\t//determin weather the row is nearest the top or bottom of the table, retur true for top or false for bottom\r\n\t}\r\n\r\n\tvisibleRows(includingBuffer){\r\n\t\t//return the visible rows\r\n\t\treturn [];\r\n\t}\r\n\r\n\t///////////////////////////////////\r\n\t//////// Helper Functions /////////\r\n\t///////////////////////////////////\r\n\r\n\trows(){\r\n\t\treturn this.table.rowManager.getDisplayRows();\r\n\t}\r\n\r\n\tstyleRow(row, index){\r\n\t\tvar rowEl = row.getElement();\r\n\r\n\t\tif(index % 2){\r\n\t\t\trowEl.classList.add(\"tabulator-row-even\");\r\n\t\t\trowEl.classList.remove(\"tabulator-row-odd\");\r\n\t\t}else{\r\n\t\t\trowEl.classList.add(\"tabulator-row-odd\");\r\n\t\t\trowEl.classList.remove(\"tabulator-row-even\");\r\n\t\t}\r\n\t}\r\n\r\n\t///////////////////////////////////\r\n\t/////// External Triggers /////////\r\n\t/////// (DO NOT OVERRIDE) /////////\r\n\t///////////////////////////////////\r\n\r\n\tclear(){\r\n\t\t//clear down existing layout\r\n\t\tthis.clearRows();\r\n\t\tthis.clearColumns();\r\n\t}\r\n\r\n\trender(){\r\n\t\t//render from a clean slate\r\n\t\tthis.renderRows();\r\n\t\tthis.renderColumns();\r\n\t}\r\n\r\n\trerender(callback){\r\n\t\t// rerender and keep position\r\n\t\tthis.rerenderRows();\r\n\t\tthis.rerenderColumns();\r\n\t}\r\n\r\n\tscrollToRowPosition(row, position, ifVisible){\r\n\t\tvar rowIndex = this.rows().indexOf(row),\r\n\t\trowEl = row.getElement(),\r\n\t\toffset = 0;\r\n\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tif(rowIndex > -1){\r\n\r\n\t\t\t\tif(typeof ifVisible === \"undefined\"){\r\n\t\t\t\t\tifVisible = this.table.options.scrollToRowIfVisible;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//check row visibility\r\n\t\t\t\tif(!ifVisible){\r\n\t\t\t\t\tif(Helpers.elVisible(rowEl)){\r\n\t\t\t\t\t\toffset = Helpers.elOffset(rowEl).top - Helpers.elOffset(this.elementVertical).top;\r\n\r\n\t\t\t\t\t\tif(offset > 0 && offset < this.elementVertical.clientHeight - rowEl.offsetHeight){\r\n\t\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(typeof position === \"undefined\"){\r\n\t\t\t\t\tposition = this.table.options.scrollToRowPosition;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(position === \"nearest\"){\r\n\t\t\t\t\tposition = this.scrollToRowNearestTop(row) ? \"top\" : \"bottom\"\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//scroll to row\r\n\t\t\t\tthis.scrollToRow(row);\r\n\r\n\t\t\t\t//align to correct position\r\n\t\t\t\tswitch(position){\r\n\t\t\t\t\tcase \"middle\":\r\n\t\t\t\t\tcase \"center\":\r\n\r\n\t\t\t\t\tif(this.elementVertical.scrollHeight - this.elementVertical.scrollTop == this.elementVertical.clientHeight){\r\n\t\t\t\t\t\tthis.elementVertical.scrollTop = this.elementVertical.scrollTop + (rowEl.offsetTop - this.elementVertical.scrollTop) - ((this.elementVertical.scrollHeight - rowEl.offsetTop) / 2);\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tthis.elementVertical.scrollTop = this.elementVertical.scrollTop - (this.elementVertical.clientHeight / 2);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase \"bottom\":\r\n\r\n\t\t\t\t\tif(this.elementVertical.scrollHeight - this.elementVertical.scrollTop == this.elementVertical.clientHeight){\r\n\t\t\t\t\t\tthis.elementVertical.scrollTop = this.elementVertical.scrollTop - (this.elementVertical.scrollHeight - rowEl.offsetTop) + rowEl.offsetHeight;\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tthis.elementVertical.scrollTop = this.elementVertical.scrollTop - this.elementVertical.clientHeight + rowEl.offsetHeight;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tresolve();\r\n\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Scroll Error - Row not visible\");\r\n\t\t\t\treject(\"Scroll Error - Row not visible\");\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n}","import Renderer from '../Renderer.js';\r\nimport Helpers from '../../tools/Helpers.js';\r\n\r\nexport default class BaiscHorizontal extends Renderer{\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\t}\r\n\r\n\trenderRowCells(row){\r\n\t\trow.cells.forEach((cell) => {\r\n\t\t\trow.element.appendChild(cell.getElement());\r\n\t\t\tcell.cellRendered();\r\n\t\t});\r\n\t}\r\n\r\n\treinitializeColumnWidths(columns){\r\n\t\tcolumns.forEach(function(column){\r\n\t\t\tcolumn.reinitializeWidth();\r\n\t\t});\r\n\t}\r\n}","import Renderer from '../Renderer.js';\r\nimport Helpers from '../../tools/Helpers.js';\r\n\r\nexport default class VirtualDomHorizontal extends Renderer{\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.leftCol = 0;\r\n\t\tthis.rightCol = 0;\r\n\t\tthis.scrollLeft = 0;\r\n\r\n\t\tthis.vDomScrollPosLeft = 0;\r\n\t\tthis.vDomScrollPosRight = 0;\r\n\r\n\t\tthis.vDomPadLeft = 0;\r\n\t\tthis.vDomPadRight = 0;\r\n\r\n\t\tthis.fitDataColAvg = 0;\r\n\r\n\t\tthis.window = 200; //pixel margin to make column visible before it is shown on screen\r\n\r\n\t\tthis.initialized = false;\r\n\r\n\t\tthis.columns = [];\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tthis.compatabilityCheck();\r\n\t}\r\n\r\n\tcompatabilityCheck(){\r\n\t\tvar columns = this.options(\"columns\"),\r\n\t\tfrozen = false,\r\n\t\tok = true;\r\n\r\n\t\tif(this.options(\"layout\") == \"fitDataTable\"){\r\n\t\t\tconsole.warn(\"Horizontal Vitrual DOM is not compatible with fitDataTable layout mode\");\r\n\t\t\tok = false;\r\n\t\t}\r\n\r\n\t\tif(this.options(\"responsiveLayout\")){\r\n\t\t\tconsole.warn(\"Horizontal Vitrual DOM is not compatible with responsive columns\");\r\n\t\t\tok = false;\r\n\t\t}\r\n\r\n\t\tif(this.options(\"rtl\")){\r\n\t\t\tconsole.warn(\"Horizontal Vitrual DOM is not currently compatible with RTL text direction\");\r\n\t\t\tok = false;\r\n\t\t}\r\n\r\n\t\tif(columns){\r\n\t\t\tfrozen = columns.find((col) => {\r\n\t\t\t\treturn col.frozen;\r\n\t\t\t});\r\n\r\n\t\t\tif(frozen){\r\n\t\t\t\tconsole.warn(\"Horizontal Vitrual DOM is not compatible with frozen columns\");\r\n\t\t\t\tok = false;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(!ok){\r\n\t\t\toptions.virtualDomHoz = false;\r\n\t\t}\r\n\r\n\t\treturn ok;\r\n\t}\r\n\r\n\t//////////////////////////////////////\r\n\t///////// Public Functions ///////////\r\n\t//////////////////////////////////////\r\n\r\n\trenderColumns(row, force){\r\n\t\tthis.dataChange();\r\n\t}\r\n\r\n\tscrollColumns(left, dir){\r\n\t\tif(this.scrollLeft != left){\r\n\t\t\tthis.scrollLeft = left;\r\n\r\n\t\t\tthis.scroll(left - (this.vDomScrollPosLeft + this.window));\r\n\t\t}\r\n\t}\r\n\r\n\trerenderColumns(update, blockRedraw){\r\n\t\tvar old = {\r\n\t\t\tcols:this.columns,\r\n\t\t\tleftCol:this.leftCol,\r\n\t\t\trightCol:this.rightCol,\r\n\t\t};\r\n\r\n\t\tif(update && !this.initialized){\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.clear();\r\n\r\n\t\tthis.scrollLeft = this.elementVertical.scrollLeft;\r\n\r\n\t\tthis.vDomScrollPosLeft = this.scrollLeft - this.window;\r\n\t\tthis.vDomScrollPosRight = this.scrollLeft + this.elementVertical.clientWidth + this.window;\r\n\r\n\t\tvar colPos = 0;\r\n\r\n\t\tthis.table.columnManager.columnsByIndex.forEach((column) => {\r\n\t\t\tvar config = {};\r\n\r\n\t\t\tif(column.visible){\r\n\t\t\t\tvar width = column.getWidth();\r\n\r\n\t\t\t\tconfig.leftPos = colPos;\r\n\t\t\t\tconfig.rightPos = colPos + width;\r\n\r\n\t\t\t\tconfig.width = width;\r\n\r\n\t\t\t\tif (this.options(\"layout\") === \"fitData\") {\r\n\t\t\t\t config.fitDataCheck = true;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif((colPos + width > this.vDomScrollPosLeft) && (colPos < this.vDomScrollPosRight)){\r\n\t \t\t//column is visible\r\n\r\n\t \t\tif(this.leftCol == -1){\r\n\t \t\t\tthis.leftCol = this.columns.length;\r\n\t \t\t\tthis.vDomPadLeft = colPos;\r\n\t \t\t}\r\n\r\n\t \t\tthis.rightCol = this.columns.length;\r\n\t \t}else{\r\n\t \t\t// column is hidden\r\n\t \t\tif(this.leftCol !== -1){\r\n\t \t\t\tthis.vDomPadRight += width;\r\n\t \t\t}\r\n\t \t}\r\n\r\n\t \tthis.columns.push(column);\r\n\r\n\t \tcolumn.modules.vdomHoz = config;\r\n\r\n\t \tcolPos += width;\r\n\t }\r\n\t });\r\n\r\n\t\tthis.tableElement.style.paddingLeft = this.vDomPadLeft + \"px\";\r\n\t\tthis.tableElement.style.paddingRight = this.vDomPadRight + \"px\";\r\n\r\n\t\tthis.initialized = true;\r\n\r\n\t\tif(!blockRedraw){\r\n\t\t\tif(!update || this.reinitChanged(old)){\r\n\t\t\t\tthis.renitializeRows();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.elementVertical.scrollLeft = this.scrollLeft;\r\n\t}\r\n\r\n\trenderRowCells(row){\r\n\t\tif(this.initialized){\r\n\t\t\tthis.initializeRow(row);\r\n\t\t}else{\r\n\t\t\trow.cells.forEach((cell) => {\r\n\t\t\t\trow.element.appendChild(cell.getElement());\r\n\t\t\t\tcell.cellRendered();\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\trerenderRowCells(row, force){\r\n\t\tthis.reinitializeRow(row, force);\r\n\t}\r\n\r\n\treinitializeColumnWidths(columns){\r\n\t\tfor(let i = this.leftCol; i <= this.rightCol; i++){\r\n\t\t\tthis.columns[i].reinitializeWidth();\r\n\t\t}\r\n\t}\r\n\r\n\t//////////////////////////////////////\r\n\t//////// Internal Rendering //////////\r\n\t//////////////////////////////////////\r\n\r\n\tdeinitialize(){\r\n\t\tthis.initialized = false;\r\n\t}\r\n\r\n\tclear(){\r\n\t\tthis.columns = [];\r\n\r\n\t\tthis.leftCol = -1;\r\n\t\tthis.rightCol = 0;\r\n\r\n\t\tthis.vDomScrollPosLeft = 0;\r\n\t\tthis.vDomScrollPosRight = 0;\r\n\t\tthis.vDomPadLeft = 0;\r\n\t\tthis.vDomPadRight = 0;\r\n\t}\r\n\r\n\tdataChange(){\r\n\t\tvar change = false,\r\n\t\tcollsWidth = 0,\r\n\t\tcolEnd = 0,\r\n\t\tgroup, row, rowEl;\r\n\r\n\t\tif(this.options(\"layout\") === \"fitData\"){\r\n\t\t\tthis.table.columnManager.columnsByIndex.forEach((column) => {\r\n\t\t\t\tif(!column.definition.width && column.visible){\r\n\t\t\t\t\tchange = true;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tif(change){\r\n\t\t\t\tif(change && this.table.rowManager.getDisplayRows().length){\r\n\r\n\t\t\t\t\tthis.vDomScrollPosRight = this.scrollLeft + this.elementVertical.clientWidth + this.window;\r\n\r\n\t\t\t\t\tvar row = this.chain(\"rows-sample\", [1], [], () => {\r\n\t\t\t\t\t\treturn this.table.rowManager.getDisplayRows()[0];\r\n\t\t\t\t\t})[0];\r\n\r\n\t\t\t\t\tif(row){\r\n\r\n\t\t\t\t\t\trowEl = row.getElement();\r\n\r\n\t\t\t\t\t\trow.generateCells();\r\n\r\n\t\t\t\t\t\tthis.tableElement.appendChild(rowEl);\r\n\r\n\t\t\t\t\t\tfor(var colEnd = 0; colEnd < row.cells.length; colEnd++){\r\n\t\t\t\t\t\t\tlet cell = row.cells[colEnd];\r\n\t\t\t\t\t\t\trowEl.appendChild(cell.getElement());\r\n\r\n\t\t\t\t\t\t\tcell.column.reinitializeWidth();\r\n\r\n\t\t\t\t\t\t\tcollsWidth += cell.column.getWidth();\r\n\r\n\t\t\t\t\t\t\tif(collsWidth > this.vDomScrollPosRight){\r\n\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\trowEl.parentNode.removeChild(rowEl);\r\n\r\n\t\t\t\t\t\tthis.fitDataColAvg = Math.floor(collsWidth / (colEnd + 1));\r\n\r\n\t\t\t\t\t\tfor(colEnd; colEnd < this.table.columnManager.columnsByIndex.length; colEnd++){\r\n\t\t\t\t\t\t\tthis.table.columnManager.columnsByIndex[colEnd].setWidth(this.fitDataColAvg);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tthis.rerenderColumns(false, true);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tif(this.options(\"layout\") === \"fitColumns\"){\r\n\t\t\t\tthis.layoutRefresh();\r\n\t\t\t\tthis.rerenderColumns(false, true);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\treinitChanged(old){\r\n\t\tvar match = true;\r\n\r\n\t\tif(old.cols.length !== this.columns.length || old.leftCol !== this.leftCol || old.rightCol !== this.rightCol){\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\told.cols.forEach((col, i) => {\r\n\t\t\tif(col !== this.columns[i]){\r\n\t\t\t\tmatch = false;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn !match;\r\n\t}\r\n\r\n\trenitializeRows(){\r\n\t\tvar rows = this.table.rowManager.getVisibleRows();\r\n\t\trows.forEach((row) => {\r\n\t\t\tthis.reinitializeRow(row, true);\r\n\t\t});\r\n\t}\r\n\r\n\tscroll(diff){\r\n\t\tthis.vDomScrollPosLeft += diff;\r\n\t\tthis.vDomScrollPosRight += diff;\r\n\r\n\t\tif(diff > (this.elementVertical.clientWidth * .8)){\r\n\t\t\tthis.rerenderColumns();\r\n\t\t}else{\r\n\t\t\tif(diff > 0){\r\n\t\t\t\t//scroll right\r\n\t\t\t\tthis.addColRight();\r\n\t\t\t\tthis.removeColLeft();\r\n\t\t\t}else{\r\n\t\t\t\t//scroll left\r\n\t\t\t\tthis.addColLeft();\r\n\t\t\t\tthis.removeColRight();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tcolPositionAdjust (start, end, diff){\r\n\t\tfor(let i = start; i < end; i++){\r\n\t\t\tlet column = this.columns[i];\r\n\r\n\t\t\tcolumn.modules.vdomHoz.leftPos += diff;\r\n\t\t\tcolumn.modules.vdomHoz.rightPos += diff;\r\n\t\t}\r\n\t}\r\n\r\n\taddColRight(){\r\n\t\tvar column = this.columns[this.rightCol + 1],\r\n\t\trows, newWidth, widthDiff;\r\n\r\n\t\tif(column && column.modules.vdomHoz.leftPos <= this.vDomScrollPosRight){\r\n\r\n\t\t\trows = this.table.rowManager.getVisibleRows();\r\n\r\n\t\t\trows.forEach((row) => {\r\n\t\t\t\tif(row.type !== \"group\"){\r\n\t\t\t\t\tvar cell = row.getCell(column);\r\n\t\t\t\t\trow.getElement().appendChild(cell.getElement());\r\n\t\t\t\t\tcell.cellRendered();\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tthis.fitDataColActualWidthCheck(column);\r\n\r\n\t\t\tthis.rightCol++;\r\n\r\n\t\t\tif(this.rightCol >= (this.columns.length - 1)){\r\n\t\t\t\tthis.vDomPadRight = 0;\r\n\t\t\t}else{\r\n\t\t\t\tthis.vDomPadRight -= column.getWidth();\r\n\t\t\t}\r\n\r\n\t\t\tthis.tableElement.style.paddingRight = this.vDomPadRight + \"px\";\r\n\r\n\t\t\tthis.addColRight();\r\n\t\t}\r\n\t}\r\n\r\n\taddColLeft(){\r\n\t\tvar column = this.columns[this.leftCol - 1],\r\n\t\trows;\r\n\r\n\t\tif(column && column.modules.vdomHoz.rightPos >= this.vDomScrollPosLeft){\r\n\t\t\tvar rows = this.table.rowManager.getVisibleRows();\r\n\r\n\t\t\trows.forEach((row) => {\r\n\t\t\t\tif(row.type !== \"group\"){\r\n\t\t\t\t\tvar cell = row.getCell(column);\r\n\t\t\t\t\trow.getElement().prepend(cell.getElement());\r\n\t\t\t\t\tcell.cellRendered();\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tthis.fitDataColActualWidthCheck(column);\r\n\r\n\t\t\tif(!this.leftCol){\r\n\t\t\t\tthis.vDomPadLeft = 0;\r\n\t\t\t}else{\r\n\t\t\t\tthis.vDomPadLeft -= column.getWidth();\r\n\t\t\t}\r\n\r\n\t\t\tthis.tableElement.style.paddingLeft = this.vDomPadLeft + \"px\";\r\n\r\n\t\t\tthis.leftCol--;\r\n\r\n\t\t\tthis.addColLeft();\r\n\t\t}\r\n\t}\r\n\r\n\tremoveColRight(column){\r\n\t\tvar column = this.columns[this.rightCol],\r\n\t\trows;\r\n\r\n\t\tif(column && column.modules.vdomHoz.leftPos > this.vDomScrollPosRight){\r\n\t\t\trows = this.table.rowManager.getVisibleRows();\r\n\r\n\t\t\tcolumn.modules.vdomHoz.visible = false;\r\n\r\n\t\t\trows.forEach((row) => {\r\n\t\t\t\tif(row.type !== \"group\"){\r\n\t\t\t\t\tvar cell = row.getCell(column);\r\n\t\t\t\t\trow.getElement().removeChild(cell.getElement());\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tthis.vDomPadRight += column.getWidth();\r\n\t\t\tthis.tableElement.style.paddingRight = this.vDomPadRight + \"px\";\r\n\r\n\t\t\tthis.rightCol --;\r\n\r\n\t\t\tthis.removeColRight();\r\n\t\t}\r\n\t}\r\n\r\n\tremoveColLeft(){\r\n\t\tvar column = this.columns[this.leftCol],\r\n\t\trows;\r\n\r\n\t\tif(column && column.modules.vdomHoz.rightPos < this.vDomScrollPosLeft){\r\n\r\n\t\t\trows = this.table.rowManager.getVisibleRows();\r\n\r\n\t\t\trows.forEach((row) => {\r\n\t\t\t\tif(row.type !== \"group\"){\r\n\t\t\t\t\tvar cell = row.getCell(column);\r\n\t\t\t\t\trow.getElement().removeChild(cell.getElement());\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tthis.vDomPadLeft += column.getWidth();\r\n\t\t\tthis.tableElement.style.paddingLeft = this.vDomPadLeft + \"px\";\r\n\r\n\t\t\tthis.leftCol ++;\r\n\r\n\t\t\tthis.removeColLeft();\r\n\t\t}\r\n\t}\r\n\r\n\tfitDataColActualWidthCheck(column){\r\n\t var newWidth, widthDiff;\r\n\r\n\t if(column.modules.vdomHoz.fitDataCheck){\r\n\t column.reinitializeWidth();\r\n\r\n\t newWidth = column.getWidth();\r\n\t widthDiff = newWidth - column.modules.vdomHoz.width;\r\n\r\n\t if(widthDiff){\r\n\t column.modules.vdomHoz.rightPos += widthDiff;\r\n\t column.modules.vdomHoz.width = newWidth;\r\n\t this.colPositionAdjust(this.rightCol + 2, this.columns.length, widthDiff);\r\n\t }\r\n\r\n\t column.modules.vdomHoz.fitDataCheck = false;\r\n\t }\r\n\t};\r\n\r\n\tinitializeRow(row){\r\n\t\tif(row.type !== \"group\"){\r\n\t\t\trow.modules.vdomHoz = {\r\n\t\t\t\tleftCol:this.leftCol,\r\n\t\t\t\trightCol:this.rightCol,\r\n\t\t\t};\r\n\r\n\t\t\tfor(let i = this.leftCol; i <= this.rightCol; i++){\r\n\t\t\t\tlet column = this.columns[i];\r\n\r\n\t\t\t\tif(column && column.visible){\r\n\t\t\t\t\tlet cell = row.getCell(column);\r\n\r\n\t\t\t\t\trow.getElement().appendChild(cell.getElement());\r\n\t\t\t\t\tcell.cellRendered();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\treinitializeRow(row, force){\r\n\t\tif(row.type !== \"group\"){\r\n\t\t\tif(force || !row.modules.vdomHoz || row.modules.vdomHoz.leftCol !== this.leftCol || row.modules.vdomHoz.rightCol !== this.rightCol){\r\n\t\t\t\tvar rowEl = row.getElement();\r\n\t\t\t\twhile(rowEl.firstChild) rowEl.removeChild(rowEl.firstChild);\r\n\r\n\t\t\t\tthis.initializeRow(row);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}","import CoreFeature from './CoreFeature.js';\r\nimport Column from './column/Column.js';\r\nimport ColumnComponent from './column/ColumnComponent.js';\r\nimport Helpers from './tools/Helpers.js';\r\nimport OptionsList from './tools/OptionsList.js';\r\n\r\nimport RendererBasicHorizontal from './rendering/renderers/BasicHorizontal.js';\r\nimport RendererVirtualDomHorizontal from './rendering/renderers/VirtualDomHorizontal.js';\r\n\r\nexport default class ColumnManager extends CoreFeature {\r\n\r\n\tconstructor (table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.blockHozScrollEvent = false;\r\n\t\tthis.headersElement = null;\r\n\t\tthis.element = null ; //containing element\r\n\t\tthis.columns = []; // column definition object\r\n\t\tthis.columnsByIndex = []; //columns by index\r\n\t\tthis.columnsByField = {}; //columns by field\r\n\t\tthis.scrollLeft = 0;\r\n\t\tthis.optionsList = new OptionsList(this.table, \"column definition\");\r\n\r\n\t\tthis.renderer = null;\r\n\t}\r\n\r\n\t////////////// Setup Functions /////////////////\r\n\r\n\tinitialize(){\r\n\t\tthis.initializeRenderer();\r\n\r\n\t\tthis.headersElement = this.createHeadersElement();\r\n\t\tthis.element = this.createHeaderElement();\r\n\r\n\t\tthis.element.insertBefore(this.headersElement, this.element.firstChild);\r\n\r\n\t\tthis.subscribe(\"scroll-horizontal\", this.scrollHorizontal.bind(this));\r\n\t}\r\n\r\n\tinitializeRenderer(){\r\n\t\tvar renderClass;\r\n\r\n\t\tvar renderers = {\r\n\t\t\t\"virtual\": RendererVirtualDomHorizontal,\r\n\t\t\t\"basic\": RendererBasicHorizontal,\r\n\t\t};\r\n\r\n\t\tif(typeof this.table.options.renderVertical === \"string\"){\r\n\t\t\trenderClass = renderers[this.table.options.renderVertical];\r\n\t\t}else{\r\n\t\t\trenderClass = this.table.options.renderVertical;\r\n\t\t}\r\n\r\n\t\tif(renderClass){\r\n\t\t\tthis.renderer = new renderClass(this.table, this.element, this.tableElement);\r\n\t\t\tthis.renderer.initialize();\r\n\t\t}else{\r\n\t\t\tconsole.error(\"Unable to find matching renderer:\", table.options.renderVertical);\r\n\t\t}\r\n\t}\r\n\r\n\r\n\tcreateHeadersElement (){\r\n\t\tvar el = document.createElement(\"div\");\r\n\r\n\t\tel.classList.add(\"tabulator-headers\");\r\n\r\n\t\treturn el;\r\n\t}\r\n\r\n\tcreateHeaderElement (){\r\n\t\tvar el = document.createElement(\"div\");\r\n\r\n\t\tel.classList.add(\"tabulator-header\");\r\n\r\n\t\tif(!this.table.options.headerVisible){\r\n\t\t\tel.classList.add(\"tabulator-header-hidden\");\r\n\t\t}\r\n\r\n\t\treturn el;\r\n\t}\r\n\r\n\t//return containing element\r\n\tgetElement(){\r\n\t\treturn this.element;\r\n\t}\r\n\r\n\t//return header containing element\r\n\tgetHeadersElement(){\r\n\t\treturn this.headersElement;\r\n\t}\r\n\r\n\t//scroll horizontally to match table body\r\n\tscrollHorizontal(left){\r\n\t\tvar hozAdjust = 0,\r\n\t\tscrollWidth = this.element.scrollWidth - this.table.element.clientWidth;\r\n\r\n\t\t// this.tempScrollBlock();\r\n\t\tthis.element.scrollLeft = left;\r\n\r\n\t\t//adjust for vertical scrollbar moving table when present\r\n\t\tif(left > scrollWidth){\r\n\t\t\thozAdjust = left - scrollWidth;\r\n\t\t\tthis.element.style.marginLeft = (-(hozAdjust)) + \"px\";\r\n\t\t}else{\r\n\t\t\tthis.element.style.marginLeft = 0;\r\n\t\t}\r\n\r\n\t\tthis.scrollLeft = left;\r\n\r\n\t\tthis.renderer.scrollColumns(left);\r\n\t}\r\n\r\n\t///////////// Column Setup Functions /////////////\r\n\tgenerateColumnsFromRowData(data){\r\n\t\tvar cols = [],\r\n\t\tdefinitions = this.table.options.autoColumnsDefinitions,\r\n\t\trow, sorter;\r\n\r\n\t\tif(data && data.length){\r\n\r\n\t\t\trow = data[0];\r\n\r\n\t\t\tfor(var key in row){\r\n\t\t\t\tlet col = {\r\n\t\t\t\t\tfield:key,\r\n\t\t\t\t\ttitle:key,\r\n\t\t\t\t};\r\n\r\n\t\t\t\tlet value = row[key];\r\n\r\n\t\t\t\tswitch(typeof value){\r\n\t\t\t\t\tcase \"undefined\":\r\n\t\t\t\t\tsorter = \"string\";\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase \"boolean\":\r\n\t\t\t\t\tsorter = \"boolean\";\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase \"object\":\r\n\t\t\t\t\tif(Array.isArray(value)){\r\n\t\t\t\t\t\tsorter = \"array\";\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tsorter = \"string\";\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tdefault:\r\n\t\t\t\t\tif(!isNaN(value) && value !== \"\"){\r\n\t\t\t\t\t\tsorter = \"number\";\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tif(value.match(/((^[0-9]+[a-z]+)|(^[a-z]+[0-9]+))+$/i)){\r\n\t\t\t\t\t\t\tsorter = \"alphanum\";\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\tsorter = \"string\";\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tcol.sorter = sorter;\r\n\r\n\t\t\t\tcols.push(col);\r\n\t\t\t}\r\n\r\n\t\t\tif(definitions){\r\n\r\n\t\t\t\tswitch(typeof definitions){\r\n\t\t\t\t\tcase \"function\":\r\n\t\t\t\t\tthis.table.options.columns = definitions.call(this.table, cols);\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase \"object\":\r\n\t\t\t\t\tif(Array.isArray(definitions)){\r\n\t\t\t\t\t\tcols.forEach((col) => {\r\n\t\t\t\t\t\t\tvar match = definitions.find((def) => {\r\n\t\t\t\t\t\t\t\treturn def.field === col.field;\r\n\t\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\t\tif(match){\r\n\t\t\t\t\t\t\t\tObject.assign(col, match);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tcols.forEach((col) => {\r\n\t\t\t\t\t\t\tif(definitions[col.field]){\r\n\t\t\t\t\t\t\t\tObject.assign(col, definitions[col.field]);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tthis.table.options.columns = cols;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tthis.table.options.columns = cols;\r\n\t\t\t}\r\n\r\n\t\t\tthis.setColumns(this.table.options.columns);\r\n\t\t}\r\n\t}\r\n\r\n\tsetColumns(cols, row){\r\n\t\twhile(this.headersElement.firstChild) this.headersElement.removeChild(this.headersElement.firstChild);\r\n\r\n\t\tthis.columns = [];\r\n\t\tthis.columnsByIndex = [];\r\n\t\tthis.columnsByField = {};\r\n\r\n\t\tthis.dispatch(\"columns-loading\");\r\n\r\n\t\tcols.forEach((def, i) => {\r\n\t\t\tthis._addColumn(def);\r\n\t\t});\r\n\r\n\t\tthis._reIndexColumns();\r\n\r\n\t\tthis.dispatch(\"columns-loaded\");\r\n\r\n\t\tthis.renderer.rerenderColumns(false, true);\r\n\r\n\t\tthis.redraw(true);\r\n\t}\r\n\r\n\t_addColumn(definition, before, nextToColumn){\r\n\t\tvar column = new Column(definition, this),\r\n\t\tcolEl = column.getElement(),\r\n\t\tindex = nextToColumn ? this.findColumnIndex(nextToColumn) : nextToColumn;\r\n\r\n\t\tif(nextToColumn && index > -1){\r\n\r\n\t\t\tvar parentIndex = this.columns.indexOf(nextToColumn.getTopColumn());\r\n\t\t\tvar nextEl = nextToColumn.getElement();\r\n\r\n\t\t\tif(before){\r\n\t\t\t\tthis.columns.splice(parentIndex, 0, column);\r\n\t\t\t\tnextEl.parentNode.insertBefore(colEl, nextEl);\r\n\t\t\t}else{\r\n\t\t\t\tthis.columns.splice(parentIndex + 1, 0, column);\r\n\t\t\t\tnextEl.parentNode.insertBefore(colEl, nextEl.nextSibling);\r\n\t\t\t}\r\n\r\n\t\t}else{\r\n\t\t\tif(before){\r\n\t\t\t\tthis.columns.unshift(column);\r\n\t\t\t\tthis.headersElement.insertBefore(column.getElement(), this.headersElement.firstChild);\r\n\t\t\t}else{\r\n\t\t\t\tthis.columns.push(column);\r\n\t\t\t\tthis.headersElement.appendChild(column.getElement());\r\n\t\t\t}\r\n\r\n\t\t\tcolumn.columnRendered();\r\n\t\t}\r\n\r\n\t\treturn column;\r\n\t}\r\n\r\n\tregisterColumnField(col){\r\n\t\tif(col.definition.field){\r\n\t\t\tthis.columnsByField[col.definition.field] = col;\r\n\t\t}\r\n\t}\r\n\r\n\tregisterColumnPosition(col){\r\n\t\tthis.columnsByIndex.push(col);\r\n\t}\r\n\r\n\t_reIndexColumns(){\r\n\t\tthis.columnsByIndex = [];\r\n\r\n\t\tthis.columns.forEach(function(column){\r\n\t\t\tcolumn.reRegisterPosition();\r\n\t\t});\r\n\t}\r\n\r\n\t//ensure column headers take up the correct amount of space in column groups\r\n\t_verticalAlignHeaders(){\r\n\t\tvar minHeight = 0;\r\n\r\n\t\tthis.columns.forEach((column) => {\r\n\t\t\tvar height;\r\n\r\n\t\t\tcolumn.clearVerticalAlign();\r\n\r\n\t\t\theight = column.getHeight();\r\n\r\n\t\t\tif(height > minHeight){\r\n\t\t\t\tminHeight = height;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tthis.columns.forEach((column) => {\r\n\t\t\tcolumn.verticalAlign(this.table.options.columnHeaderVertAlign, minHeight);\r\n\t\t});\r\n\r\n\t\tthis.table.rowManager.adjustTableSize();\r\n\t}\r\n\r\n\t//////////////// Column Details /////////////////\r\n\tfindColumn(subject){\r\n\t\tif(typeof subject == \"object\"){\r\n\r\n\t\t\tif(subject instanceof Column){\r\n\t\t\t\t//subject is column element\r\n\t\t\t\treturn subject;\r\n\t\t\t}else if(subject instanceof ColumnComponent){\r\n\t\t\t\t//subject is public column component\r\n\t\t\t\treturn subject._getSelf() || false;\r\n\t\t\t}else if(typeof HTMLElement !== \"undefined\" && subject instanceof HTMLElement){\r\n\t\t\t\t//subject is a HTML element of the column header\r\n\t\t\t\tlet match = this.columns.find((column) => {\r\n\t\t\t\t\treturn column.element === subject;\r\n\t\t\t\t});\r\n\r\n\t\t\t\treturn match || false;\r\n\t\t\t}\r\n\r\n\t\t}else{\r\n\t\t\t//subject should be treated as the field name of the column\r\n\t\t\treturn this.columnsByField[subject] || false;\r\n\t\t}\r\n\r\n\t\t//catch all for any other type of input\r\n\t\treturn false;\r\n\t}\r\n\r\n\tgetColumnByField(field){\r\n\t\treturn this.columnsByField[field];\r\n\t}\r\n\r\n\tgetColumnsByFieldRoot(root){\r\n\t\tvar matches = [];\r\n\r\n\t\tObject.keys(this.columnsByField).forEach((field) => {\r\n\t\t\tvar fieldRoot = field.split(\".\")[0];\r\n\t\t\tif(fieldRoot === root){\r\n\t\t\t\tmatches.push(this.columnsByField[field]);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn matches;\r\n\t}\r\n\r\n\tgetColumnByIndex(index){\r\n\t\treturn this.columnsByIndex[index];\r\n\t}\r\n\r\n\tgetFirstVisibileColumn(index){\r\n\t\tvar index = this.columnsByIndex.findIndex((col) => {\r\n\t\t\treturn col.visible;\r\n\t\t});\r\n\r\n\t\treturn index > -1 ? this.columnsByIndex[index] : false;\r\n\t}\r\n\r\n\tgetColumns(){\r\n\t\treturn this.columns;\r\n\t}\r\n\r\n\tfindColumnIndex(column){\r\n\t\treturn this.columnsByIndex.findIndex((col) => {\r\n\t\t\treturn column === col;\r\n\t\t});\r\n\t}\r\n\r\n\t//return all columns that are not groups\r\n\tgetRealColumns(){\r\n\t\treturn this.columnsByIndex;\r\n\t}\r\n\r\n\t//travers across columns and call action\r\n\ttraverse(callback){\r\n\t\tthis.columnsByIndex.forEach((column,i) =>{\r\n\t\t\tcallback(column, i);\r\n\t\t});\r\n\t}\r\n\r\n\t//get defintions of actual columns\r\n\tgetDefinitions(active){\r\n\t\tvar output = [];\r\n\r\n\t\tthis.columnsByIndex.forEach((column) => {\r\n\t\t\tif(!active || (active && column.visible)){\r\n\t\t\t\toutput.push(column.getDefinition());\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\t//get full nested definition tree\r\n\tgetDefinitionTree(){\r\n\t\tvar output = [];\r\n\r\n\t\tthis.columns.forEach((column) => {\r\n\t\t\toutput.push(column.getDefinition(true));\r\n\t\t});\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tgetComponents(structured){\r\n\t\tvar output = [],\r\n\t\tcolumns = structured ? this.columns : this.columnsByIndex;\r\n\r\n\t\tcolumns.forEach((column) => {\r\n\t\t\toutput.push(column.getComponent());\r\n\t\t});\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tgetWidth(){\r\n\t\tvar width = 0;\r\n\r\n\t\tthis.columnsByIndex.forEach((column) => {\r\n\t\t\tif(column.visible){\r\n\t\t\t\twidth += column.getWidth();\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn width;\r\n\t}\r\n\r\n\tmoveColumn(from, to, after){\r\n\t\tthis.moveColumnActual(from, to, after);\r\n\r\n\t\tto.element.parentNode.insertBefore(from.element, to.element);\r\n\r\n\t\tif(after){\r\n\t\t\tto.element.parentNode.insertBefore(to.element, from.element);\r\n\t\t}\r\n\r\n\t\tthis._verticalAlignHeaders();\r\n\r\n\t\tthis.table.rowManager.reinitialize();\r\n\t}\r\n\r\n\tmoveColumnActual(from, to, after){\r\n\t\tif(from.parent.isGroup){\r\n\t\t\tthis._moveColumnInArray(from.parent.columns, from, to, after);\r\n\t\t}else{\r\n\t\t\tthis._moveColumnInArray(this.columns, from, to, after);\r\n\t\t}\r\n\r\n\t\tthis._moveColumnInArray(this.columnsByIndex, from, to, after, true);\r\n\r\n\t\tthis.renderer.rerenderColumns(true);\r\n\r\n\t\tthis.dispatch(\"column-moved\", from, to, after);\r\n\r\n\t\tif(this.subscribedExternal(\"columnMoved\")){\r\n\t\t\tthis.dispatchExternal(\"columnMoved\", from.getComponent(), this.table.columnManager.getComponents());\r\n\t\t}\r\n\t}\r\n\r\n\t_moveColumnInArray(columns, from, to, after, updateRows){\r\n\t\tvar\tfromIndex = columns.indexOf(from),\r\n\t\ttoIndex, rows = [];\r\n\r\n\t\tif (fromIndex > -1) {\r\n\r\n\t\t\tcolumns.splice(fromIndex, 1);\r\n\r\n\t\t\ttoIndex = columns.indexOf(to);\r\n\r\n\t\t\tif (toIndex > -1) {\r\n\r\n\t\t\t\tif(after){\r\n\t\t\t\t\ttoIndex = toIndex+1;\r\n\t\t\t\t}\r\n\r\n\t\t\t}else{\r\n\t\t\t\ttoIndex = fromIndex;\r\n\t\t\t}\r\n\r\n\t\t\tcolumns.splice(toIndex, 0, from);\r\n\r\n\t\t\tif(updateRows){\r\n\r\n\t\t\t\trows = this.chain(\"column-moving-rows\", [from, to, after], null, []) || [];\r\n\r\n\t\t\t\trows = rows.concat(this.table.rowManager.rows);\r\n\r\n\t\t\t\trows.forEach(function(row){\r\n\t\t\t\t\tif(row.cells.length){\r\n\t\t\t\t\t\tvar cell = row.cells.splice(fromIndex, 1)[0];\r\n\t\t\t\t\t\trow.cells.splice(toIndex, 0, cell);\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tscrollToColumn(column, position, ifVisible){\r\n\t\tvar left = 0,\r\n\t\toffset = 0,\r\n\t\tadjust = 0,\r\n\t\tcolEl = column.getElement();\r\n\r\n\t\treturn new Promise((resolve, reject) => {\r\n\r\n\t\t\tif(typeof position === \"undefined\"){\r\n\t\t\t\tposition = this.table.options.scrollToColumnPosition;\r\n\t\t\t}\r\n\r\n\t\t\tif(typeof ifVisible === \"undefined\"){\r\n\t\t\t\tifVisible = this.table.options.scrollToColumnIfVisible;\r\n\t\t\t}\r\n\r\n\t\t\tif(column.visible){\r\n\r\n\t\t\t\t//align to correct position\r\n\t\t\t\tswitch(position){\r\n\t\t\t\t\tcase \"middle\":\r\n\t\t\t\t\tcase \"center\":\r\n\t\t\t\t\tadjust = -this.element.clientWidth / 2;\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase \"right\":\r\n\t\t\t\t\tadjust = colEl.clientWidth - this.headersElement.clientWidth;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//check column visibility\r\n\t\t\t\tif(!ifVisible){\r\n\r\n\t\t\t\t\toffset = colEl.offsetLeft;\r\n\r\n\t\t\t\t\tif(offset > 0 && offset + colEl.offsetWidth < this.element.clientWidth){\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//calculate scroll position\r\n\t\t\t\tleft = colEl.offsetLeft + adjust;\r\n\r\n\t\t\t\tleft = Math.max(Math.min(left, this.table.rowManager.element.scrollWidth - this.table.rowManager.element.clientWidth),0);\r\n\r\n\t\t\t\tthis.table.rowManager.scrollHorizontal(left);\r\n\t\t\t\tthis.scrollHorizontal(left);\r\n\r\n\t\t\t\tresolve();\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Scroll Error - Column not visible\");\r\n\t\t\t\treject(\"Scroll Error - Column not visible\");\r\n\t\t\t}\r\n\r\n\t\t});\r\n\t}\r\n\r\n\t//////////////// Cell Management /////////////////\r\n\tgenerateCells(row){\r\n\t\tvar cells = [];\r\n\r\n\t\tthis.columnsByIndex.forEach((column) => {\r\n\t\t\tcells.push(column.generateCell(row));\r\n\t\t});\r\n\r\n\t\treturn cells;\r\n\t}\r\n\r\n\t//////////////// Column Management /////////////////\r\n\tgetFlexBaseWidth(){\r\n\t\tvar totalWidth = this.table.element.clientWidth, //table element width\r\n\t\tfixedWidth = 0;\r\n\r\n\t\t//adjust for vertical scrollbar if present\r\n\t\tif(this.table.rowManager.element.scrollHeight > this.table.rowManager.element.clientHeight){\r\n\t\t\ttotalWidth -= this.table.rowManager.element.offsetWidth - this.table.rowManager.element.clientWidth;\r\n\t\t}\r\n\r\n\t\tthis.columnsByIndex.forEach(function(column){\r\n\t\t\tvar width, minWidth, colWidth;\r\n\r\n\t\t\tif(column.visible){\r\n\r\n\t\t\t\twidth = column.definition.width || 0;\r\n\r\n\t\t\t\tminWidth = parseInt(column.minWidth);\r\n\r\n\t\t\t\tif(typeof(width) == \"string\"){\r\n\t\t\t\t\tif(width.indexOf(\"%\") > -1){\r\n\t\t\t\t\t\tcolWidth = (totalWidth / 100) * parseInt(width) ;\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tcolWidth = parseInt(width);\r\n\t\t\t\t\t}\r\n\t\t\t\t}else{\r\n\t\t\t\t\tcolWidth = width;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tfixedWidth += colWidth > minWidth ? colWidth : minWidth;\r\n\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn fixedWidth;\r\n\t}\r\n\r\n\taddColumn(definition, before, nextToColumn){\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tvar column = this._addColumn(definition, before, nextToColumn);\r\n\r\n\t\t\tthis._reIndexColumns();\r\n\r\n\t\t\tthis.dispatch(\"column-add\", definition, before, nextToColumn);\r\n\r\n\t\t\tthis.redraw(true);\r\n\r\n\t\t\tif(this.layoutMode() != \"fitColumns\"){\r\n\t\t\t\tcolumn.reinitializeWidth();\r\n\t\t\t}\r\n\r\n\t\t\tthis._verticalAlignHeaders();\r\n\r\n\t\t\tthis.table.rowManager.reinitialize();\r\n\r\n\t\t\tthis.renderer.rerenderColumns();\r\n\r\n\t\t\tresolve(column);\r\n\t\t});\r\n\t}\r\n\r\n\t//remove column from system\r\n\tderegisterColumn(column){\r\n\t\tvar field = column.getField(),\r\n\t\tindex;\r\n\r\n\t\t//remove from field list\r\n\t\tif(field){\r\n\t\t\tdelete this.columnsByField[field];\r\n\t\t}\r\n\r\n\t\t//remove from index list\r\n\t\tindex = this.columnsByIndex.indexOf(column);\r\n\r\n\t\tif(index > -1){\r\n\t\t\tthis.columnsByIndex.splice(index, 1);\r\n\t\t}\r\n\r\n\t\t//remove from column list\r\n\t\tindex = this.columns.indexOf(column);\r\n\r\n\t\tif(index > -1){\r\n\t\t\tthis.columns.splice(index, 1);\r\n\t\t}\r\n\r\n\t\tthis._verticalAlignHeaders();\r\n\r\n\t\tthis.redraw();\r\n\t}\r\n\r\n\t//redraw columns\r\n\tredraw(force){\r\n\t\tif(force){\r\n\t\t\tif(Helpers.elVisible(this.element)){\r\n\t\t\t\tthis._verticalAlignHeaders();\r\n\t\t\t}\r\n\r\n\t\t\tthis.table.rowManager.resetScroll();\r\n\t\t\tthis.table.rowManager.reinitialize();\r\n\t\t}\r\n\r\n\t\tif(!this.confirm(\"table-redrawing\", force)){\r\n\t\t\tthis.layoutRefresh();\r\n\t\t}\r\n\r\n\t\tthis.dispatch(\"table-redraw\", force);\r\n\r\n\t\tthis.table.footerManager.redraw();\r\n\t}\r\n}","//public row object\r\nexport default class RowComponent {\r\n\r\n\tconstructor (row){\r\n\t\tthis._row = row;\r\n\r\n\t\treturn new Proxy(this, {\r\n\t\t\tget: function(target, name, receiver) {\r\n\t\t\t\tif (typeof target[name] !== \"undefined\") {\r\n\t\t\t\t\treturn target[name];\r\n\t\t\t\t}else{\r\n\t\t\t\t\treturn target._row.table.componentFunctionBinder.handle(\"row\", target._row, name)\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t})\r\n\t}\r\n\r\n\tgetData(transform){\r\n\t\treturn this._row.getData(transform);\r\n\t}\r\n\r\n\tgetElement(){\r\n\t\treturn this._row.getElement();\r\n\t}\r\n\r\n\tgetCells(){\r\n\t\tvar cells = [];\r\n\r\n\t\tthis._row.getCells().forEach(function(cell){\r\n\t\t\tcells.push(cell.getComponent());\r\n\t\t});\r\n\r\n\t\treturn cells;\r\n\t}\r\n\r\n\tgetCell(column){\r\n\t\tvar cell = this._row.getCell(column);\r\n\t\treturn cell ? cell.getComponent() : false;\r\n\t}\r\n\r\n\tgetIndex(){\r\n\t\treturn this._row.getData(\"data\")[this._row.table.options.index];\r\n\t}\r\n\r\n\tgetPosition(active){\r\n\t\treturn this._row.table.rowManager.getRowPosition(this._row, active);\r\n\t}\r\n\r\n\tdelete(){\r\n\t\treturn this._row.delete();\r\n\t}\r\n\r\n\tscrollTo(){\r\n\t\treturn this._row.table.rowManager.scrollToRow(this._row);\r\n\t}\r\n\r\n\tmove(to, after){\r\n\t\tthis._row.moveToRow(to, after);\r\n\t}\r\n\r\n\tupdate(data){\r\n\t\treturn this._row.updateData(data);\r\n\t}\r\n\r\n\tnormalizeHeight(){\r\n\t\tthis._row.normalizeHeight(true);\r\n\t}\r\n\r\n\t_getSelf(){\r\n\t\treturn this._row;\r\n\t}\r\n\r\n\treformat(){\r\n\t\treturn this._row.reinitialize();\r\n\t}\r\n\r\n\tgetTable(){\r\n\t\treturn this._row.table;\r\n\t}\r\n\r\n\tgetNextRow(){\r\n\t\tvar row = this._row.nextRow();\r\n\t\treturn row ? row.getComponent() : row;\r\n\t}\r\n\r\n\tgetPrevRow(){\r\n\t\tvar row = this._row.prevRow();\r\n\t\treturn row ? row.getComponent() : row;\r\n\t}\r\n}","import CoreFeature from '../CoreFeature.js';\r\nimport RowComponent from './RowComponent.js';\r\nimport Helpers from '../tools/Helpers.js';\r\n\r\nexport default class Row extends CoreFeature{\r\n\tconstructor (data, parent, type = \"row\"){\r\n\t\tsuper(parent.table);\r\n\r\n\t\tthis.parent = parent;\r\n\t\tthis.data = {};\r\n\t\tthis.type = type; //type of element\r\n\t\tthis.element = false;\r\n\t\tthis.modules = {}; //hold module variables;\r\n\t\tthis.cells = [];\r\n\t\tthis.height = 0; //hold element height\r\n\t\tthis.heightStyled = \"\"; //hold element height prestyled to improve render efficiency\r\n\t\tthis.manualHeight = false; //user has manually set row height\r\n\t\tthis.outerHeight = 0; //holde lements outer height\r\n\t\tthis.initialized = false; //element has been rendered\r\n\t\tthis.heightInitialized = false; //element has resized cells to fit\r\n\r\n\t\tthis.component = null;\r\n\r\n\t\tthis.created = false;\r\n\r\n\t\tthis.setData(data);\r\n\t}\r\n\r\n\tcreate(){\r\n\t\tif(!this.created){\r\n\t\t\tthis.created = true;\r\n\t\t\tthis.generateElement();\r\n\t\t}\r\n\t}\r\n\r\n\tcreateElement (){\r\n\t\tvar el = document.createElement(\"div\");\r\n\r\n\t\tel.classList.add(\"tabulator-row\");\r\n\t\tel.setAttribute(\"role\", \"row\");\r\n\r\n\t\tthis.element = el;\r\n\t}\r\n\r\n\tgetElement(){\r\n\t\tthis.create();\r\n\t\treturn this.element;\r\n\t}\r\n\r\n\tdetachElement(){\r\n\t\tif (this.element && this.element.parentNode){\r\n\t\t\tthis.element.parentNode.removeChild(this.element);\r\n\t\t}\r\n\t}\r\n\r\n\tgenerateElement(){\r\n\t\tthis.createElement();\r\n\t\tthis.dispatch(\"row-init\", this);\r\n\t}\r\n\r\n\tgenerateCells(){\r\n\t\tthis.cells = this.table.columnManager.generateCells(this);\r\n\t}\r\n\r\n\t//functions to setup on first render\r\n\tinitialize(force){\r\n\t\tthis.create();\r\n\r\n\t\tif(!this.initialized || force){\r\n\r\n\t\t\tthis.deleteCells();\r\n\r\n\t\t\twhile(this.element.firstChild) this.element.removeChild(this.element.firstChild);\r\n\r\n\t\t\tthis.dispatch(\"row-layout-before\", this);\r\n\r\n\t\t\tthis.generateCells();\r\n\r\n\t\t\tthis.table.columnManager.renderer.renderRowCells(this);\r\n\r\n\t\t\tif(force){\r\n\t\t\t\tthis.normalizeHeight();\r\n\t\t\t}\r\n\r\n\t\t\tthis.dispatch(\"row-layout\", this);\r\n\r\n\t\t\tif(this.table.options.rowFormatter){\r\n\t\t\t\tthis.table.options.rowFormatter(this.getComponent());\r\n\t\t\t}\r\n\r\n\t\t\tthis.dispatch(\"row-layout-after\", this);\r\n\r\n\t\t\tthis.initialized = true;\r\n\t\t}else{\r\n\t\t\tthis.table.columnManager.renderer.rerenderRowCells(this);\r\n\t\t}\r\n\t}\r\n\r\n\treinitializeHeight(){\r\n\t\tthis.heightInitialized = false;\r\n\r\n\t\tif(this.element && this.element.offsetParent !== null){\r\n\t\t\tthis.normalizeHeight(true);\r\n\t\t}\r\n\t}\r\n\r\n\treinitialize(children){\r\n\t\tthis.initialized = false;\r\n\t\tthis.heightInitialized = false;\r\n\r\n\t\tif(!this.manualHeight){\r\n\t\t\tthis.height = 0;\r\n\t\t\tthis.heightStyled = \"\";\r\n\t\t}\r\n\r\n\t\tif(this.element && this.element.offsetParent !== null){\r\n\t\t\tthis.initialize(true);\r\n\t\t}\r\n\r\n\t\tthis.dispatch(\"row-relayout\", this);\r\n\t}\r\n\r\n\t//get heights when doing bulk row style calcs in virtual DOM\r\n\tcalcHeight(force){\r\n\r\n\t\tvar maxHeight = 0,\r\n\t\tminHeight = this.table.options.resizableRows ? this.element.clientHeight : 0;\r\n\r\n\t\tthis.cells.forEach(function(cell){\r\n\t\t\tvar height = cell.getHeight();\r\n\t\t\tif(height > maxHeight){\r\n\t\t\t\tmaxHeight = height;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tif(force){\r\n\t\t\tthis.height = Math.max(maxHeight, minHeight);\r\n\t\t}else{\r\n\t\t\tthis.height = this.manualHeight ? this.height : Math.max(maxHeight, minHeight);\r\n\t\t}\r\n\r\n\t\tthis.heightStyled = this.height ? this.height + \"px\" : \"\";\r\n\t\tthis.outerHeight = this.element.offsetHeight;\r\n\t}\r\n\r\n\t//set of cells\r\n\tsetCellHeight(){\r\n\t\tthis.cells.forEach(function(cell){\r\n\t\t\tcell.setHeight();\r\n\t\t});\r\n\r\n\t\tthis.heightInitialized = true;\r\n\t}\r\n\r\n\tclearCellHeight(){\r\n\t\tthis.cells.forEach(function(cell){\r\n\t\t\tcell.clearHeight();\r\n\t\t});\r\n\t}\r\n\r\n\t//normalize the height of elements in the row\r\n\tnormalizeHeight(force){\r\n\r\n\t\tif(force){\r\n\t\t\tthis.clearCellHeight();\r\n\t\t}\r\n\r\n\t\tthis.calcHeight(force);\r\n\r\n\t\tthis.setCellHeight();\r\n\t}\r\n\r\n\t//set height of rows\r\n\tsetHeight(height, force){\r\n\t\tif(this.height != height || force){\r\n\r\n\t\t\tthis.manualHeight = true;\r\n\r\n\t\t\tthis.height = height;\r\n\t\t\tthis.heightStyled = height ? height + \"px\" : \"\";\r\n\r\n\t\t\tthis.setCellHeight();\r\n\r\n\t\t\t// this.outerHeight = this.element.outerHeight();\r\n\t\t\tthis.outerHeight = this.element.offsetHeight;\r\n\t\t}\r\n\t}\r\n\r\n\t//return rows outer height\r\n\tgetHeight(){\r\n\t\treturn this.outerHeight;\r\n\t}\r\n\r\n\t//return rows outer Width\r\n\tgetWidth(){\r\n\t\treturn this.element.offsetWidth;\r\n\t}\r\n\r\n\t//////////////// Cell Management /////////////////\r\n\tdeleteCell(cell){\r\n\t\tvar index = this.cells.indexOf(cell);\r\n\r\n\t\tif(index > -1){\r\n\t\t\tthis.cells.splice(index, 1);\r\n\t\t}\r\n\t}\r\n\r\n\t//////////////// Data Management /////////////////\r\n\tsetData(data){\r\n\t\tthis.data = this.chain(\"row-data-init-before\", [this, data], null, data);\r\n\r\n\t\tthis.dispatch(\"row-data-init-after\", this);\r\n\t}\r\n\r\n\t//update the rows data\r\n\tupdateData(updatedData){\r\n\t\tvar visible = this.element && Helpers.elVisible(this.element),\r\n\t\ttempData = {},\r\n\t\tnewRowData;\r\n\r\n\t\treturn new Promise((resolve, reject) => {\r\n\r\n\t\t\tif(typeof updatedData === \"string\"){\r\n\t\t\t\tupdatedData = JSON.parse(updatedData);\r\n\t\t\t}\r\n\r\n\t\t\tthis.dispatch(\"row-data-save-before\", this);\r\n\r\n\t\t\tif(this.subscribed(\"row-data-changing\")){\r\n\t\t\t\ttempData = Object.assign(tempData, this.data);\r\n\t\t\t\ttempData = Object.assign(tempData, updatedData);\r\n\t\t\t}\r\n\r\n\t\t\tnewRowData = this.chain(\"row-data-changing\", [this, tempData, updatedData], null, updatedData);\r\n\r\n\t\t\t//set data\r\n\t\t\tfor (var attrname in newRowData) {\r\n\t\t\t\tthis.data[attrname] = newRowData[attrname];\r\n\t\t\t}\r\n\r\n\t\t\tthis.dispatch(\"row-data-save-after\", this);\r\n\r\n\t\t\t//update affected cells only\r\n\t\t\tfor (var attrname in updatedData) {\r\n\r\n\t\t\t\tlet columns = this.table.columnManager.getColumnsByFieldRoot(attrname);\r\n\r\n\t\t\t\tcolumns.forEach((column) => {\r\n\t\t\t\t\tlet cell = this.getCell(column.getField());\r\n\r\n\t\t\t\t\tif(cell){\r\n\t\t\t\t\t\tlet value = column.getFieldValue(newRowData);\r\n\t\t\t\t\t\tif(cell.getValue() != value){\r\n\t\t\t\t\t\t\tcell.setValueProcessData(value);\r\n\r\n\t\t\t\t\t\t\tif(visible){\r\n\t\t\t\t\t\t\t\tcell.cellRendered();\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\t//Partial reinitialization if visible\r\n\t\t\tif(visible){\r\n\t\t\t\tthis.normalizeHeight(true);\r\n\r\n\t\t\t\tif(this.table.options.rowFormatter){\r\n\t\t\t\t\tthis.table.options.rowFormatter(this.getComponent());\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tthis.initialized = false;\r\n\t\t\t\tthis.height = 0;\r\n\t\t\t\tthis.heightStyled = \"\";\r\n\t\t\t}\r\n\r\n\t\t\tthis.dispatch(\"row-data-changed\", this, visible, updatedData);\r\n\r\n\t\t\t//this.reinitialize();\r\n\r\n\t\t\tthis.dispatchExternal(\"rowUpdated\", this.getComponent());\r\n\r\n\t\t\tif(this.subscribedExternal.subscribed(\"dataChanged\")){\r\n\t\t\t\tthis.dispatchExternal(\"dataChanged\", this.table.rowManager.getData());\r\n\t\t\t}\r\n\r\n\t\t\tresolve();\r\n\t\t});\r\n\t}\r\n\r\n\tgetData(transform){\r\n\t\tif(transform){\r\n\t\t\treturn this.chain(\"row-data-retrieve\", [this, transform], null, this.data);\r\n\t\t}\r\n\r\n\t\treturn this.data;\r\n\t}\r\n\r\n\tgetCell(column){\r\n\t\tvar match = false;\r\n\r\n\t\tcolumn = this.table.columnManager.findColumn(column);\r\n\r\n\t\tmatch = this.cells.find(function(cell){\r\n\t\t\treturn cell.column === column;\r\n\t\t});\r\n\r\n\t\treturn match;\r\n\t}\r\n\r\n\tgetCellIndex(findCell){\r\n\t\treturn this.cells.findIndex(function(cell){\r\n\t\t\treturn cell === findCell;\r\n\t\t});\r\n\t}\r\n\r\n\tfindCell(subject){\r\n\t\treturn this.cells.find((cell) => {\r\n\t\t\treturn cell.element === subject;\r\n\t\t});\r\n\t}\r\n\r\n\tgetCells(){\r\n\t\treturn this.cells;\r\n\t}\r\n\r\n\tnextRow(){\r\n\t\tvar row = this.table.rowManager.nextDisplayRow(this, true);\r\n\t\treturn row || false;\r\n\t}\r\n\r\n\tprevRow(){\r\n\t\tvar row = this.table.rowManager.prevDisplayRow(this, true);\r\n\t\treturn row || false;\r\n\t}\r\n\r\n\tmoveToRow(to, before){\r\n\t\tvar toRow = this.table.rowManager.findRow(to);\r\n\r\n\t\tif(toRow){\r\n\t\t\tthis.table.rowManager.moveRowActual(this, toRow, !before);\r\n\t\t\tthis.table.rowManager.refreshActiveData(\"display\", false, true);\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Move Error - No matching row found:\", to);\r\n\t\t}\r\n\t}\r\n\r\n\t///////////////////// Actions /////////////////////\r\n\tdelete(){\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tthis.dispatch(\"row-delete\", this);\r\n\r\n\t\t\tthis.deleteActual();\r\n\r\n\t\t\tresolve();\r\n\t\t});\r\n\t}\r\n\r\n\tdeleteActual(blockRedraw){\r\n\t\tvar index = this.table.rowManager.getRowIndex(this);\r\n\r\n\t\tthis.detatchModules();\r\n\r\n\t\tthis.table.rowManager.deleteRow(this, blockRedraw);\r\n\r\n\t\tthis.deleteCells();\r\n\r\n\t\tthis.initialized = false;\r\n\t\tthis.heightInitialized = false;\r\n\t\tthis.element = false;\r\n\r\n\t\tthis.dispatch(\"row-deleted\", this);\r\n\t}\r\n\r\n\tdetatchModules(){\r\n\t\tthis.dispatch(\"row-deleting\", this);\r\n\t}\r\n\r\n\tdeleteCells(){\r\n\t\tvar cellCount = this.cells.length;\r\n\r\n\t\tfor(let i = 0; i < cellCount; i++){\r\n\t\t\tthis.cells[0].delete();\r\n\t\t}\r\n\t}\r\n\r\n\twipe(){\r\n\t\tthis.detatchModules();\r\n\t\tthis.deleteCells();\r\n\r\n\t\tif(this.element){\r\n\t\t\twhile(this.element.firstChild) this.element.removeChild(this.element.firstChild);\r\n\r\n\t\t\tif(this.element.parentNode){\r\n\t\t\t\tthis.element.parentNode.removeChild(this.element);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.element = false;\r\n\t\tthis.modules = {};\r\n\t}\r\n\r\n\tgetGroup(){\r\n\t\treturn this.modules.group || false;\r\n\t}\r\n\r\n\t//////////////// Object Generation /////////////////\r\n\tgetComponent(){\r\n\t\tif(!this.component){\r\n\t\t\tthis.component = new RowComponent(this);\r\n\t\t}\r\n\r\n\t\treturn this.component;\r\n\t}\r\n}","import Renderer from '../Renderer.js';\r\nimport Helpers from '../../tools/Helpers.js';\r\n\r\nexport default class BaiscVertical extends Renderer{\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.verticalFillMode = \"fill\";\r\n\r\n\t\tthis.scrollTop = 0;\r\n\t\tthis.scrollLeft = 0;\r\n\r\n\t\tthis.scrollTop = 0;\r\n\t\tthis.scrollLeft = 0;\r\n\t}\r\n\r\n\tclearRows(){\r\n\t\tvar element = this.tableElement;\r\n\r\n\t\t// element.children.detach();\r\n\t\twhile(element.firstChild) element.removeChild(element.firstChild);\r\n\r\n\t\telement.scrollTop = 0;\r\n\t\telement.scrollLeft = 0;\r\n\r\n\t\telement.style.minWidth = \"\";\r\n\t\telement.style.minHeight = \"\";\r\n\t\telement.style.display = \"\";\r\n\t\telement.style.visibility = \"\";\r\n\t}\r\n\r\n\trenderRows(){\r\n\t\tvar element = this.tableElement,\r\n\t\tonlyGroupHeaders = true;\r\n\r\n\t\tthis.rows().forEach((row, index) => {\r\n\t\t\tthis.styleRow(row, index);\r\n\t\t\telement.appendChild(row.getElement());\r\n\t\t\trow.initialize(true);\r\n\r\n\t\t\tif(row.type !== \"group\"){\r\n\t\t\t\tonlyGroupHeaders = false;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tif(onlyGroupHeaders){\r\n\t\t\telement.style.minWidth = this.table.columnManager.getWidth() + \"px\";\r\n\t\t}else{\r\n\t\t\telement.style.minWidth = \"\";\r\n\t\t}\r\n\t}\r\n\r\n\r\n\trerenderRows(callback){\r\n\t\tthis.render();\r\n\r\n\t\tif(callback){\r\n\t\t\tcallback();\r\n\t\t}\r\n\t}\r\n\r\n\tscrollToRowNearestTop(row){\r\n\t\tvar rowTop = Helpers.elOffset(row.getElement()).top;\r\n\r\n\t\treturn !(Math.abs(this.elementVertical.scrollTop - rowTop) > Math.abs(this.elementVertical.scrollTop + this.elementVertical.clientHeight - rowTop));\r\n\t}\r\n\r\n\tscrollToRow(row){\r\n\t\tvar rowEl = row.getElement();\r\n\r\n\t\tthis.elementVertical.scrollTop = Helpers.elOffset(rowEl).top - Helpers.elOffset(this.elementVertical).top + this.elementVertical.scrollTop;\r\n\t}\r\n\r\n\tvisibleRows(includingBuffer){\r\n\t\treturn this.rows();\r\n\t}\r\n\r\n}","import Renderer from '../Renderer.js';\r\nimport Helpers from '../../tools/Helpers.js';\r\n\r\nexport default class VirtualDomVertical extends Renderer{\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.verticalFillMode = \"fill\";\r\n\r\n\t\tthis.scrollTop = 0;\r\n\t\tthis.scrollLeft = 0;\r\n\r\n\t\tthis.vDomRowHeight = 20; //approximation of row heights for padding\r\n\r\n\t\tthis.vDomTop = 0; //hold position for first rendered row in the virtual DOM\r\n\t\tthis.vDomBottom = 0; //hold possition for last rendered row in the virtual DOM\r\n\r\n\t\tthis.vDomScrollPosTop = 0; //last scroll position of the vDom top;\r\n\t\tthis.vDomScrollPosBottom = 0; //last scroll position of the vDom bottom;\r\n\r\n\t\tthis.vDomTopPad = 0; //hold value of padding for top of virtual DOM\r\n\t\tthis.vDomBottomPad = 0; //hold value of padding for bottom of virtual DOM\r\n\r\n\t\tthis.vDomMaxRenderChain = 90; //the maximum number of dom elements that can be rendered in 1 go\r\n\r\n\t\tthis.vDomWindowBuffer = 0; //window row buffer before removing elements, to smooth scrolling\r\n\r\n\t\tthis.vDomWindowMinTotalRows = 20; //minimum number of rows to be generated in virtual dom (prevent buffering issues on tables with tall rows)\r\n\t\tthis.vDomWindowMinMarginRows = 5; //minimum number of rows to be generated in virtual dom margin\r\n\r\n\t\tthis.vDomTopNewRows = []; //rows to normalize after appending to optimize render speed\r\n\t\tthis.vDomBottomNewRows = []; //rows to normalize after appending to optimize render speed\r\n\t}\r\n\r\n\t//////////////////////////////////////\r\n\t///////// Public Functions ///////////\r\n\t//////////////////////////////////////\r\n\r\n\tclearRows(){\r\n\t\tvar element = this.tableElement;\r\n\r\n\t\t// element.children.detach();\r\n\t\twhile(element.firstChild) element.removeChild(element.firstChild);\r\n\r\n\t\telement.style.paddingTop = \"\";\r\n\t\telement.style.paddingBottom = \"\";\r\n\t\telement.style.minWidth = \"\";\r\n\t\telement.style.minHeight = \"\";\r\n\t\telement.style.display = \"\";\r\n\t\telement.style.visibility = \"\";\r\n\r\n\t\tthis.elementVertical.scrollTop = 0;\r\n\t\tthis.elementVertical.scrollLeft = 0;\r\n\r\n\t\tthis.scrollTop = 0;\r\n\t\tthis.scrollLeft = 0;\r\n\r\n\t\tthis.vDomTop = 0;\r\n\t\tthis.vDomBottom = 0;\r\n\t\tthis.vDomTopPad = 0;\r\n\t\tthis.vDomBottomPad = 0;\r\n\t\tthis.vDomScrollPosTop = 0;\r\n\t\tthis.vDomScrollPosBottom = 0;\r\n\t}\r\n\r\n\trenderRows(){\r\n\t\tthis._virtualRenderFill();\r\n\t}\r\n\r\n\trerenderRows(callback){\r\n\t\tvar scrollTop = this.elementVertical.scrollTop;\r\n\t\tvar topRow = false;\r\n\t\tvar topOffset = false;\r\n\r\n\t\tvar left = this.table.rowManager.scrollLeft;\r\n\r\n\t\tvar rows = this.rows();\r\n\r\n\t\tfor(var i = this.vDomTop; i <= this.vDomBottom; i++){\r\n\r\n\t\t\tif(rows[i]){\r\n\t\t\t\tvar diff = scrollTop - rows[i].getElement().offsetTop;\r\n\r\n\t\t\t\tif(topOffset === false || Math.abs(diff) < topOffset){\r\n\t\t\t\t\ttopOffset = diff;\r\n\t\t\t\t\ttopRow = i;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(callback){\r\n\t\t\tcallback();\r\n\t\t}\r\n\r\n\t\tthis._virtualRenderFill((topRow === false ? this.rows.length - 1 : topRow), true, topOffset || 0);\r\n\r\n\t\tthis.scrollColumns(left);\r\n\t}\r\n\r\n\tscrollColumns(left){\r\n\t\tthis.table.rowManager.scrollHorizontal(left);\r\n\t}\r\n\r\n\tscrollRows(top, dir){\r\n\t\tvar topDiff = top - this.vDomScrollPosTop;\r\n\t\tvar bottomDiff = top - this.vDomScrollPosBottom;\r\n\t\tvar margin = this.vDomWindowBuffer * 2;\r\n\t\tvar rows = this.rows();\r\n\r\n\t\tthis.scrollTop = top;\r\n\r\n\t\tif(-topDiff > margin || bottomDiff > margin){\r\n\t\t\t//if big scroll redraw table;\r\n\t\t\tvar left = this.table.rowManager.scrollLeft;\r\n\t\t\tthis._virtualRenderFill(Math.floor((this.elementVertical.scrollTop / this.elementVertical.scrollHeight) * rows.length));\r\n\t\t\tthis.scrollColumns(left);\r\n\t\t}else{\r\n\r\n\t\t\tif(dir){\r\n\t\t\t\t//scrolling up\r\n\t\t\t\tif(topDiff < 0){\r\n\t\t\t\t\tthis._addTopRow(rows, -topDiff);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(bottomDiff < 0){\r\n\t\t\t\t\t//hide bottom row if needed\r\n\t\t\t\t\tif(this.vDomScrollHeight - this.scrollTop > this.vDomWindowBuffer){\r\n\t\t\t\t\t\tthis._removeBottomRow(rows, -bottomDiff);\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tthis.vDomScrollPosBottom = this.scrollTop;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\r\n\t\t\t\tif(bottomDiff >= 0){\r\n\t\t\t\t\tthis._addBottomRow(rows, bottomDiff);\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//scrolling down\r\n\t\t\t\tif(topDiff >= 0){\r\n\t\t\t\t\t//hide top row if needed\r\n\t\t\t\t\tif(this.scrollTop > this.vDomWindowBuffer){\r\n\t\t\t\t\t\tthis._removeTopRow(rows, topDiff);\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tthis.vDomScrollPosTop = this.scrollTop;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tresize(){\r\n\t\tthis.vDomWindowBuffer = this.table.options.renderVerticalBuffer || this.elementVertical.clientHeight;\r\n\t}\r\n\r\n\tscrollToRowNearestTop(row){\r\n\t\tvar rowIndex = this.rows().indexOf(row);\r\n\r\n\t\treturn !(Math.abs(this.vDomTop - rowIndex) > Math.abs(this.vDomBottom - rowIndex));\r\n\t}\r\n\r\n\tscrollToRow(row){\r\n\t\tvar index = this.rows().indexOf(row);\r\n\r\n\t\tif(index > -1){\r\n\t\t\tthis._virtualRenderFill(index, true);\r\n\t\t}\r\n\t}\r\n\r\n\tvisibleRows(includingBuffer){\r\n\t\tvar topEdge = this.elementVertical.scrollTop,\r\n\t\tbottomEdge = this.elementVertical.clientHeight + topEdge,\r\n\t\ttopFound = false,\r\n\t\ttopRow = 0,\r\n\t\tbottomRow = 0,\r\n\t\trows = this.rows();\r\n\r\n\t\tif(includingBuffer){\r\n\t\t\ttopRow = this.vDomTop;\r\n\t\t\tbottomRow = this.vDomBottom;\r\n\t\t}else{\r\n\t\t\tfor(var i = this.vDomTop; i <= this.vDomBottom; i++){\r\n\t\t\t\tif(rows[i]){\r\n\t\t\t\t\tif(!topFound){\r\n\t\t\t\t\t\tif((topEdge - rows[i].getElement().offsetTop) >= 0){\r\n\t\t\t\t\t\t\ttopRow = i;\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\ttopFound = true;\r\n\r\n\t\t\t\t\t\t\tif(bottomEdge - rows[i].getElement().offsetTop >= 0){\r\n\t\t\t\t\t\t\t\tbottomRow = i;\r\n\t\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tif(bottomEdge - rows[i].getElement().offsetTop >= 0){\r\n\t\t\t\t\t\t\tbottomRow = i;\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn rows.slice(topRow, bottomRow + 1);\r\n\t}\r\n\r\n\t//////////////////////////////////////\r\n\t//////// Internal Rendering //////////\r\n\t//////////////////////////////////////\r\n\r\n\t//full virtual render\r\n\t_virtualRenderFill(position, forceMove, offset){\r\n\t\tvar\telement = this.tableElement,\r\n\t\tholder = this.elementVertical,\r\n\t\ttopPad = 0,\r\n\t\trowsHeight = 0,\r\n\t\theightOccupied = 0,\r\n\t\ttopPadHeight = 0,\r\n\t\ti = 0,\r\n\t\trows = this.rows(),\r\n\t\trowsCount = rows.length,\r\n\t\tcontainerHeight = this.elementVertical.clientHeight;\r\n\r\n\t\tposition = position || 0;\r\n\r\n\t\toffset = offset || 0;\r\n\r\n\t\tif(!position){\r\n\t\t\tthis.clear();\r\n\t\t}else{\r\n\t\t\twhile(element.firstChild) element.removeChild(element.firstChild);\r\n\r\n\t\t\t//check if position is too close to bottom of table\r\n\t\t\theightOccupied = (rowsCount - position + 1) * this.vDomRowHeight;\r\n\r\n\t\t\tif(heightOccupied < containerHeight){\r\n\t\t\t\tposition -= Math.ceil((containerHeight - heightOccupied) / this.vDomRowHeight);\r\n\t\t\t\tif(position < 0){\r\n\t\t\t\t\tposition = 0;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t//calculate initial pad\r\n\t\t\ttopPad = Math.min(Math.max(Math.floor(this.vDomWindowBuffer / this.vDomRowHeight), this.vDomWindowMinMarginRows), position);\r\n\t\t\tposition -= topPad;\r\n\t\t}\r\n\r\n\t\tif(rowsCount && Helpers.elVisible(this.elementVertical)){\r\n\t\t\tthis.vDomTop = position;\r\n\r\n\t\t\tthis.vDomBottom = position -1;\r\n\r\n\t\t\twhile ((rowsHeight <= containerHeight + this.vDomWindowBuffer || i < this.vDomWindowMinTotalRows) && this.vDomBottom < rowsCount -1){\r\n\t\t\t\tvar index = this.vDomBottom + 1,\r\n\t\t\t\trow = rows[index],\r\n\t\t\t\trowHeight = 0;\r\n\r\n\t\t\t\tthis.styleRow(row, index);\r\n\r\n\t\t\t\telement.appendChild(row.getElement());\r\n\r\n\t\t\t\trow.initialize();\r\n\r\n\t\t\t\tif(!row.heightInitialized){\r\n\t\t\t\t\trow.normalizeHeight(true);\r\n\t\t\t\t}\r\n\r\n\t\t\t\trowHeight = row.getHeight();\r\n\r\n\t\t\t\tif(i < topPad){\r\n\t\t\t\t\ttopPadHeight += rowHeight;\r\n\t\t\t\t}else{\r\n\t\t\t\t\trowsHeight += rowHeight;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(rowHeight > this.vDomWindowBuffer){\r\n\t\t\t\t\tthis.vDomWindowBuffer = rowHeight * 2;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.vDomBottom ++;\r\n\t\t\t\ti++;\r\n\t\t\t}\r\n\r\n\t\t\tif(!position){\r\n\t\t\t\tthis.vDomTopPad = 0;\r\n\t\t\t\t//adjust rowheight to match average of rendered elements\r\n\t\t\t\tthis.vDomRowHeight = Math.floor((rowsHeight + topPadHeight) / i);\r\n\t\t\t\tthis.vDomBottomPad = this.vDomRowHeight * (rowsCount - this.vDomBottom -1);\r\n\r\n\t\t\t\tthis.vDomScrollHeight = topPadHeight + rowsHeight + this.vDomBottomPad - containerHeight;\r\n\t\t\t}else{\r\n\t\t\t\tthis.vDomTopPad = !forceMove ? this.scrollTop - topPadHeight : (this.vDomRowHeight * this.vDomTop) + offset;\r\n\t\t\t\tthis.vDomBottomPad = this.vDomBottom == rowsCount-1 ? 0 : Math.max(this.vDomScrollHeight - this.vDomTopPad - rowsHeight - topPadHeight, 0);\r\n\t\t\t}\r\n\r\n\t\t\telement.style.paddingTop = this.vDomTopPad + \"px\";\r\n\t\t\telement.style.paddingBottom = this.vDomBottomPad + \"px\";\r\n\r\n\t\t\tif(forceMove){\r\n\t\t\t\tthis.scrollTop = this.vDomTopPad + (topPadHeight) + offset - (this.elementVertical.scrollWidth > this.elementVertical.clientWidth ? this.elementVertical.offsetHeight - containerHeight : 0);\r\n\t\t\t}\r\n\r\n\t\t\tthis.scrollTop = Math.min(this.scrollTop, this.elementVertical.scrollHeight - containerHeight);\r\n\r\n\t\t\t//adjust for horizontal scrollbar if present (and not at top of table)\r\n\t\t\tif(this.elementVertical.scrollWidth > this.elementVertical.offsetWidth && forceMove){\r\n\t\t\t\tthis.scrollTop += this.elementVertical.offsetHeight - containerHeight;\r\n\t\t\t}\r\n\r\n\t\t\tthis.vDomScrollPosTop = this.scrollTop;\r\n\t\t\tthis.vDomScrollPosBottom = this.scrollTop;\r\n\r\n\t\t\tholder.scrollTop = this.scrollTop;\r\n\r\n\t\t\tthis.dispatch(\"render-virtual-fill\");\r\n\t\t}\r\n\t}\r\n\r\n\t_addTopRow(rows, fillableSpace){\r\n\t\tvar table = this.tableElement,\r\n\t\taddedRows = [],\r\n\t\tpaddingAdjust = 0,\r\n\t\tindex = this.vDomTop -1,\r\n\t\ti = 0;\r\n\r\n\t\twhile(true){\r\n\t\t\tif(this.vDomTop){\r\n\t\t\t\tlet row = rows[index],\r\n\t\t\t\trowHeight, initialized;\r\n\r\n\t\t\t\tif(row && i < this.vDomMaxRenderChain){\r\n\t\t\t\t\trowHeight = row.getHeight() || this.vDomRowHeight;\r\n\t\t\t\t\tinitialized = row.initialized;\r\n\r\n\t\t\t\t\tif(fillableSpace >= rowHeight){\r\n\r\n\t\t\t\t\t\tthis.styleRow(row, index);\r\n\t\t\t\t\t\ttable.insertBefore(row.getElement(), table.firstChild);\r\n\r\n\t\t\t\t\t\tif(!row.initialized || !row.heightInitialized){\r\n\t\t\t\t\t\t\taddedRows.push(row);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\trow.initialize();\r\n\r\n\t\t\t\t\t\tif(!initialized){\r\n\t\t\t\t\t\t\trowHeight = row.getElement().offsetHeight;\r\n\r\n\t\t\t\t\t\t\tif(rowHeight > this.vDomWindowBuffer){\r\n\t\t\t\t\t\t\t\tthis.vDomWindowBuffer = rowHeight * 2;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tfillableSpace -= rowHeight;\r\n\t\t\t\t\t\tpaddingAdjust += rowHeight;\r\n\r\n\t\t\t\t\t\tthis.vDomTop--;\r\n\t\t\t\t\t\tindex--;\r\n\t\t\t\t\t\ti++;\r\n\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}else{\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\r\n\t\t\t}else{\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfor (let row of addedRows){\r\n\t\t\trow.clearCellHeight();\r\n\t\t}\r\n\r\n\t\tthis._quickNormalizeRowHeight(addedRows);\r\n\r\n\t\tif(paddingAdjust){\r\n\t\t\tthis.vDomTopPad -= paddingAdjust;\r\n\r\n\t\t\tif(this.vDomTopPad < 0){\r\n\t\t\t\tthis.vDomTopPad = index * this.vDomRowHeight;\r\n\t\t\t}\r\n\r\n\t\t\tif(index < 1){\r\n\t\t\t\tthis.vDomTopPad = 0;\r\n\t\t\t}\r\n\r\n\t\t\ttable.style.paddingTop = this.vDomTopPad + \"px\";\r\n\t\t\tthis.vDomScrollPosTop -= paddingAdjust;\r\n\t\t}\r\n\t}\r\n\r\n\t_removeTopRow(rows, fillableSpace){\r\n\t\tvar removableRows = [],\r\n\t\tpaddingAdjust = 0,\r\n\t\ti = 0;\r\n\r\n\t\twhile(true){\r\n\t\t\tlet row = rows[this.vDomTop],\r\n\t\t\trowHeight, diff;\r\n\r\n\t\t\tif(row && i < this.vDomMaxRenderChain){\r\n\t\t\t\trowHeight = row.getHeight() || this.vDomRowHeight;\r\n\r\n\t\t\t\tif(fillableSpace >= rowHeight){\r\n\t\t\t\t\tthis.vDomTop++;\r\n\r\n\t\t\t\t\tfillableSpace -= rowHeight;\r\n\t\t\t\t\tpaddingAdjust += rowHeight;\r\n\r\n\t\t\t\t\tremovableRows.push(row);\r\n\t\t\t\t\ti++;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfor (let row of removableRows){\r\n\t\t\tlet rowEl = row.getElement();\r\n\r\n\t\t\tif(rowEl.parentNode){\r\n\t\t\t\trowEl.parentNode.removeChild(rowEl);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(paddingAdjust){\r\n\t\t\tthis.vDomTopPad += paddingAdjust;\r\n\t\t\tthis.tableElement.style.paddingTop = this.vDomTopPad + \"px\";\r\n\t\t\tthis.vDomScrollPosTop += this.vDomTop ? paddingAdjust : paddingAdjust + this.vDomWindowBuffer;\r\n\t\t}\r\n\t}\r\n\r\n\t_addBottomRow(rows, fillableSpace){\r\n\t\tvar table = this.tableElement,\r\n\t\taddedRows = [],\r\n\t\tpaddingAdjust = 0,\r\n\t\tindex = this.vDomBottom + 1,\r\n\t\ti = 0;\r\n\r\n\t\twhile(true){\r\n\t\t\tlet row = rows[index],\r\n\t\t\trowHeight, initialized;\r\n\r\n\t\t\tif(row && i < this.vDomMaxRenderChain){\r\n\t\t\t\trowHeight = row.getHeight() || this.vDomRowHeight;\r\n\t\t\t\tinitialized = row.initialized;\r\n\r\n\t\t\t\tif(fillableSpace >= rowHeight){\r\n\r\n\t\t\t\t\tthis.styleRow(row, index);\r\n\t\t\t\t\ttable.appendChild(row.getElement());\r\n\r\n\t\t\t\t\tif(!row.initialized || !row.heightInitialized){\r\n\t\t\t\t\t\taddedRows.push(row);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\trow.initialize();\r\n\r\n\t\t\t\t\tif(!initialized){\r\n\t\t\t\t\t\trowHeight = row.getElement().offsetHeight;\r\n\r\n\t\t\t\t\t\tif(rowHeight > this.vDomWindowBuffer){\r\n\t\t\t\t\t\t\tthis.vDomWindowBuffer = rowHeight * 2;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tfillableSpace -= rowHeight;\r\n\t\t\t\t\tpaddingAdjust += rowHeight;\r\n\r\n\t\t\t\t\tthis.vDomBottom++;\r\n\t\t\t\t\tindex++;\r\n\t\t\t\t\ti++;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfor (let row of addedRows){\r\n\t\t\trow.clearCellHeight();\r\n\t\t}\r\n\r\n\t\tthis._quickNormalizeRowHeight(addedRows);\r\n\r\n\t\tif(paddingAdjust){\r\n\t\t\tthis.vDomBottomPad -= paddingAdjust;\r\n\r\n\t\t\tif(this.vDomBottomPad < 0 || index == rows.length -1){\r\n\t\t\t\tthis.vDomBottomPad = 0;\r\n\t\t\t}\r\n\r\n\t\t\ttable.style.paddingBottom = this.vDomBottomPad + \"px\";\r\n\t\t\tthis.vDomScrollPosBottom += paddingAdjust;\r\n\t\t}\r\n\t}\r\n\r\n\t_removeBottomRow(rows, fillableSpace){\r\n\t\tvar removableRows = [],\r\n\t\tpaddingAdjust = 0,\r\n\t\ti = 0;\r\n\r\n\t\twhile(true){\r\n\t\t\tlet row = rows[this.vDomBottom],\r\n\t\t\trowHeight, diff;\r\n\r\n\t\t\tif(row && i < this.vDomMaxRenderChain){\r\n\t\t\t\trowHeight = row.getHeight() || this.vDomRowHeight;\r\n\r\n\t\t\t\tif(fillableSpace >= rowHeight){\r\n\t\t\t\t\tthis.vDomBottom --;\r\n\r\n\t\t\t\t\tfillableSpace -= rowHeight;\r\n\t\t\t\t\tpaddingAdjust += rowHeight;\r\n\r\n\t\t\t\t\tremovableRows.push(row);\r\n\t\t\t\t\ti++;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfor (let row of removableRows){\r\n\t\t\tlet rowEl = row.getElement();\r\n\r\n\t\t\tif(rowEl.parentNode){\r\n\t\t\t\trowEl.parentNode.removeChild(rowEl);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(paddingAdjust){\r\n\t\t\tthis.vDomBottomPad += paddingAdjust;\r\n\r\n\t\t\tif(this.vDomBottomPad < 0){\r\n\t\t\t\tthis.vDomBottomPad = 0;\r\n\t\t\t}\r\n\r\n\t\t\tthis.tableElement.style.paddingBottom = this.vDomBottomPad + \"px\";\r\n\t\t\tthis.vDomScrollPosBottom -= paddingAdjust;\r\n\t\t}\r\n\t}\r\n\r\n\t_quickNormalizeRowHeight(rows){\r\n\t\tfor(let row of rows){\r\n\t\t\trow.calcHeight();\r\n\t\t}\r\n\r\n\t\tfor(let row of rows){\r\n\t\t\trow.setCellHeight();\r\n\t\t}\r\n\t}\r\n}","import CoreFeature from './CoreFeature.js';\r\nimport Row from './row/Row.js';\r\nimport RowComponent from './row/RowComponent.js';\r\nimport Helpers from './tools/Helpers.js';\r\n\r\nimport RendererBasicVertical from './rendering/renderers/BasicVertical.js';\r\nimport RendererVirtualDomVertical from './rendering/renderers/VirtualDomVertical.js';\r\n\r\nexport default class RowManager extends CoreFeature{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.element = this.createHolderElement(); //containing element\r\n\t\tthis.tableElement = this.createTableElement(); //table element\r\n\t\tthis.heightFixer = this.createTableElement(); //table element\r\n\r\n\t\tthis.firstRender = false; //handle first render\r\n\t\tthis.renderMode = \"virtual\"; //current rendering mode\r\n\t\tthis.fixedHeight = false; //current rendering mode\r\n\r\n\t\tthis.rows = []; //hold row data objects\r\n\t\tthis.activeRowsPipeline = []; //hold caluclation of active rows\r\n\t\tthis.activeRows = []; //rows currently available to on display in the table\r\n\t\tthis.activeRowsCount = 0; //count of active rows\r\n\r\n\t\tthis.displayRows = []; //rows currently on display in the table\r\n\t\tthis.displayRowsCount = 0; //count of display rows\r\n\r\n\t\tthis.scrollTop = 0;\r\n\t\tthis.scrollLeft = 0;\r\n\r\n\t\tthis.rowNumColumn = false; //hold column component for row number column\r\n\r\n\t\tthis.redrawBlock = false; //prevent redraws to allow multiple data manipulations becore continuing\r\n\t\tthis.redrawBlockRestoreConfig = false; //store latest redraw function calls for when redraw is needed\r\n\t\tthis.redrawBlockRederInPosition = false; //store latest redraw function calls for when redraw is needed\r\n\r\n\t\tthis.dataPipeline = []; //hold data pipeline tasks\r\n\t\tthis.displayPipeline = []; //hold data display pipeline tasks\r\n\r\n\t\tthis.renderer = null;\r\n\t}\r\n\r\n\t//////////////// Setup Functions /////////////////\r\n\r\n\tcreateHolderElement (){\r\n\t\tvar el = document.createElement(\"div\");\r\n\r\n\t\tel.classList.add(\"tabulator-tableHolder\");\r\n\t\tel.setAttribute(\"tabindex\", 0);\r\n\r\n\t\treturn el;\r\n\t}\r\n\r\n\tcreateTableElement (){\r\n\t\tvar el = document.createElement(\"div\");\r\n\r\n\t\tel.classList.add(\"tabulator-table\");\r\n\r\n\t\treturn el;\r\n\t}\r\n\r\n\t//return containing element\r\n\tgetElement(){\r\n\t\treturn this.element;\r\n\t}\r\n\r\n\t//return table element\r\n\tgetTableElement(){\r\n\t\treturn this.tableElement;\r\n\t}\r\n\r\n\t//return position of row in table\r\n\tgetRowPosition(row, active){\r\n\t\tif(active){\r\n\t\t\treturn this.activeRows.indexOf(row);\r\n\t\t}else{\r\n\t\t\treturn this.rows.indexOf(row);\r\n\t\t}\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tthis.initializeRenderer();\r\n\r\n\t\t//initialize manager\r\n\t\tthis.element.appendChild(this.tableElement);\r\n\r\n\t\tthis.firstRender = true;\r\n\r\n\t\t//scroll header along with table body\r\n\t\tthis.element.addEventListener(\"scroll\", () => {\r\n\t\t\tvar left = this.element.scrollLeft,\r\n\t\t\tleftDir = this.scrollLeft > left,\r\n\t\t\ttop = this.element.scrollTop,\r\n\t\t\ttopDir = this.scrollTop > top;\r\n\r\n\t\t\t//handle horizontal scrolling\r\n\t\t\tif(this.scrollLeft != left){\r\n\t\t\t\tthis.scrollLeft = left;\r\n\r\n\t\t\t\tthis.dispatch(\"scroll-horizontal\", left, leftDir);\r\n\t\t\t\tthis.dispatchExternal(\"scrollHorizontal\", left, leftDir);\r\n\t\t\t}\r\n\r\n\t\t\t//handle verical scrolling\r\n\t\t\tif(this.scrollTop != top){\r\n\t\t\t\tthis.scrollTop = top;\r\n\r\n\t\t\t\tthis.renderer.scrollRows(top, topDir);\r\n\r\n\t\t\t\tthis.dispatch(\"scroll-vertical\", top, topDir);\r\n\t\t\t\tthis.dispatchExternal(\"scrollVertical\", top, topDir);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t////////////////// Row Manipulation //////////////////\r\n\tfindRow(subject){\r\n\t\tif(typeof subject == \"object\"){\r\n\t\t\tif(subject instanceof Row){\r\n\t\t\t\t//subject is row element\r\n\t\t\t\treturn subject;\r\n\t\t\t}else if(subject instanceof RowComponent){\r\n\t\t\t\t//subject is public row component\r\n\t\t\t\treturn subject._getSelf() || false;\r\n\t\t\t}else if(typeof HTMLElement !== \"undefined\" && subject instanceof HTMLElement){\r\n\t\t\t\t//subject is a HTML element of the row\r\n\t\t\t\tlet match = this.rows.find((row) => {\r\n\t\t\t\t\treturn row.getElement() === subject;\r\n\t\t\t\t});\r\n\r\n\t\t\t\treturn match || false;\r\n\t\t\t}\r\n\t\t}else if(typeof subject == \"undefined\" || subject === null){\r\n\t\t\treturn false;\r\n\t\t}else{\r\n\t\t\t//subject should be treated as the index of the row\r\n\t\t\tlet match = this.rows.find((row) => {\r\n\t\t\t\treturn row.data[this.table.options.index] == subject;\r\n\t\t\t});\r\n\r\n\t\t\treturn match || false;\r\n\t\t}\r\n\r\n\t\t//catch all for any other type of input\r\n\t\treturn false;\r\n\t}\r\n\r\n\tgetRowFromDataObject(data){\r\n\t\tvar match = this.rows.find((row) => {\r\n\t\t\treturn row.data === data;\r\n\t\t});\r\n\r\n\t\treturn match || false;\r\n\t}\r\n\r\n\tgetRowFromPosition(position, active){\r\n\t\tif(active){\r\n\t\t\treturn this.activeRows[position];\r\n\t\t}else{\r\n\t\t\treturn this.rows[position];\r\n\t\t}\r\n\t}\r\n\r\n\tscrollToRow(row, position, ifVisible){\r\n\t\treturn this.renderer.scrollToRowPosition(row, position, ifVisible);\r\n\t}\r\n\r\n\t////////////////// Data Handling //////////////////\r\n\tsetData(data, renderInPosition, columnsChanged){\r\n\t\treturn new Promise((resolve, reject)=>{\r\n\t\t\tif(renderInPosition && this.getDisplayRows().length){\r\n\t\t\t\tif(this.table.options.pagination){\r\n\t\t\t\t\tthis._setDataActual(data, true);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tthis.reRenderInPosition(() => {\r\n\t\t\t\t\t\tthis._setDataActual(data);\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tif(this.table.options.autoColumns && columnsChanged){\r\n\t\t\t\t\tthis.table.columnManager.generateColumnsFromRowData(data);\r\n\t\t\t\t}\r\n\t\t\t\tthis.resetScroll();\r\n\r\n\t\t\t\tthis._setDataActual(data);\r\n\r\n\t\t\t}\r\n\r\n\t\t\tresolve();\r\n\t\t});\r\n\t}\r\n\r\n\t_setDataActual(data, renderInPosition){\r\n\t\tthis.dispatchExternal(\"dataProcessing\", data);\r\n\r\n\t\tthis._wipeElements();\r\n\r\n\t\tif(Array.isArray(data)){\r\n\t\t\tthis.dispatch(\"data-processing\", data);\r\n\r\n\t\t\tdata.forEach((def, i) => {\r\n\t\t\t\tif(def && typeof def === \"object\"){\r\n\t\t\t\t\tvar row = new Row(def, this);\r\n\t\t\t\t\tthis.rows.push(row);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.warn(\"Data Loading Warning - Invalid row data detected and ignored, expecting object but received:\", def);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tthis.refreshActiveData(false, false, renderInPosition);\r\n\r\n\t\t\tthis.dispatch(\"data-processed\", data);\r\n\t\t\tthis.dispatchExternal(\"dataProcesed\", data);\r\n\t\t}else{\r\n\t\t\tconsole.error(\"Data Loading Error - Unable to process data due to invalid data type \\nExpecting: array \\nReceived: \", typeof data, \"\\nData: \", data);\r\n\t\t}\r\n\t}\r\n\r\n\t_wipeElements(){\r\n\t\tthis.dispatch(\"rows-wipe\");\r\n\r\n\t\tthis.rows.forEach((row) => {\r\n\t\t\trow.wipe();\r\n\t\t});\r\n\r\n\t\tthis.rows = [];\r\n\t\tthis.activeRows = [];\r\n\t\tthis.activeRowsPipeline = [];\r\n\t\tthis.activeRowsCount = 0;\r\n\t\tthis.displayRows = [];\r\n\t\tthis.displayRowsCount = 0;\r\n\r\n\t\tthis.adjustTableSize();\r\n\t}\r\n\r\n\tdeleteRow(row, blockRedraw){\r\n\t\tvar allIndex = this.rows.indexOf(row),\r\n\t\tactiveIndex = this.activeRows.indexOf(row);\r\n\r\n\t\tif(activeIndex > -1){\r\n\t\t\tthis.activeRows.splice(activeIndex, 1);\r\n\t\t}\r\n\r\n\t\tif(allIndex > -1){\r\n\t\t\tthis.rows.splice(allIndex, 1);\r\n\t\t}\r\n\r\n\t\tthis.setActiveRows(this.activeRows);\r\n\r\n\t\tthis.displayRowIterator((rows) => {\r\n\t\t\tvar displayIndex = rows.indexOf(row);\r\n\r\n\t\t\tif(displayIndex > -1){\r\n\t\t\t\trows.splice(displayIndex, 1);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tif(!blockRedraw){\r\n\t\t\tthis.reRenderInPosition();\r\n\t\t}\r\n\r\n\t\tthis.regenerateRowNumbers();\r\n\r\n\t\tthis.dispatchExternal(\"rowDeleted\", row.getComponent());\r\n\r\n\t\tif(this.subscribedExternal(\"dataChanged\")){\r\n\t\t\tthis.dispatchExternal(\"dataChanged\", this.getData());\r\n\t\t}\r\n\t}\r\n\r\n\taddRow(data, pos, index, blockRedraw){\r\n\t\tvar row = this.addRowActual(data, pos, index, blockRedraw);\r\n\r\n\t\tthis.dispatch(\"row-added\", row, data, pos, index);\r\n\r\n\t\treturn row;\r\n\t}\r\n\r\n\t//add multiple rows\r\n\taddRows(data, pos, index){\r\n\t\tvar length = 0,\r\n\t\trows = [];\r\n\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tpos = this.findAddRowPos(pos);\r\n\r\n\t\t\tif(!Array.isArray(data)){\r\n\t\t\t\tdata = [data];\r\n\t\t\t}\r\n\r\n\t\t\tlength = data.length - 1;\r\n\r\n\t\t\tif((typeof index == \"undefined\" && pos) || (typeof index !== \"undefined\" && !pos)){\r\n\t\t\t\tdata.reverse();\r\n\t\t\t}\r\n\r\n\t\t\tdata.forEach((item, i) => {\r\n\t\t\t\tvar row = this.addRow(item, pos, index, true);\r\n\t\t\t\trows.push(row);\r\n\t\t\t});\r\n\r\n\t\t\tif(this.subscribed(\"row-added\")){\r\n\t\t\t\tthis.dispatch(\"row-added\", row, data, pos, index);\r\n\t\t\t}else{\r\n\t\t\t\tthis.reRenderInPosition();\r\n\t\t\t}\r\n\r\n\t\t\tthis.regenerateRowNumbers();\r\n\r\n\t\t\tresolve(rows);\r\n\t\t});\r\n\t}\r\n\r\n\tfindAddRowPos(pos){\r\n\t\tif(typeof pos === \"undefined\"){\r\n\t\t\tpos = this.table.options.addRowPos;\r\n\t\t}\r\n\r\n\t\tif(pos === \"pos\"){\r\n\t\t\tpos = true;\r\n\t\t}\r\n\r\n\t\tif(pos === \"bottom\"){\r\n\t\t\tpos = false;\r\n\t\t}\r\n\r\n\t\treturn pos;\r\n\t}\r\n\r\n\taddRowActual(data, pos, index, blockRedraw){\r\n\t\tvar row = data instanceof Row ? data : new Row(data || {}, this),\r\n\t\ttop = this.findAddRowPos(pos),\r\n\t\tallIndex = -1,\r\n\t\tactiveIndex, chainResult;\r\n\r\n\t\tif(!index){\r\n\t\t\tchainResult = this.chain(\"row-adding-position\", [row, top], null, {index, top});\r\n\r\n\t\t\tindex = chainResult.index;\r\n\t\t\ttop = chainResult.top;\r\n\t\t}\r\n\r\n\t\tif(typeof index !== \"undefined\"){\r\n\t\t\tindex = this.findRow(index);\r\n\t\t}\r\n\r\n\t\tindex = this.chain(\"row-adding-index\", [row, index, top], null, index);\r\n\r\n\t\tif(index){\r\n\t\t\tallIndex = this.rows.indexOf(index);\r\n\t\t}\r\n\r\n\t\tif(index && allIndex > -1){\r\n\t\t\tactiveIndex = this.activeRows.indexOf(index);\r\n\r\n\t\t\tthis.displayRowIterator(function(rows){\r\n\t\t\t\tvar displayIndex = rows.indexOf(index);\r\n\r\n\t\t\t\tif(displayIndex > -1){\r\n\t\t\t\t\trows.splice((top ? displayIndex : displayIndex + 1), 0, row);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tif(activeIndex > -1){\r\n\t\t\t\tthis.activeRows.splice((top ? activeIndex : activeIndex + 1), 0, row);\r\n\t\t\t}\r\n\r\n\t\t\tthis.rows.splice((top ? allIndex : allIndex + 1), 0, row);\r\n\r\n\t\t}else{\r\n\r\n\t\t\tif(top){\r\n\r\n\t\t\t\tthis.displayRowIterator(function(rows){\r\n\t\t\t\t\trows.unshift(row);\r\n\t\t\t\t});\r\n\r\n\t\t\t\tthis.activeRows.unshift(row);\r\n\t\t\t\tthis.rows.unshift(row);\r\n\t\t\t}else{\r\n\t\t\t\tthis.displayRowIterator(function(rows){\r\n\t\t\t\t\trows.push(row);\r\n\t\t\t\t});\r\n\r\n\t\t\t\tthis.activeRows.push(row);\r\n\t\t\t\tthis.rows.push(row);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.setActiveRows(this.activeRows);\r\n\r\n\t\tthis.dispatchExternal(\"rowAdded\", row.getComponent());\r\n\r\n\t\tif(this.subscribedExternal(\"dataChanged\")){\r\n\t\t\tthis.dispatchExternal(\"dataChanged\", this.table.rowManager.getData());\r\n\t\t}\r\n\r\n\t\tif(!blockRedraw){\r\n\t\t\tthis.reRenderInPosition();\r\n\t\t}\r\n\r\n\t\treturn row;\r\n\t}\r\n\r\n\tmoveRow(from, to, after){\r\n\t\tthis.dispatch(\"row-move\", from, to, after);\r\n\r\n\t\tthis.moveRowActual(from, to, after);\r\n\r\n\t\tthis.regenerateRowNumbers();\r\n\r\n\t\tthis.dispatch(\"row-moved\", from, to, after);\r\n\t\tthis.dispatchExternal(\"rowMoved\", from.getComponent());\r\n\t}\r\n\r\n\tmoveRowActual(from, to, after){\r\n\t\tthis.moveRowInArray(this.rows, from, to, after);\r\n\t\tthis.moveRowInArray(this.activeRows, from, to, after);\r\n\r\n\t\tthis.displayRowIterator((rows) => {\r\n\t\t\tthis.moveRowInArray(rows, from, to, after);\r\n\t\t});\r\n\r\n\t\tthis.dispatch(\"row-moving\", from, to, after);\r\n\t}\r\n\r\n\tmoveRowInArray(rows, from, to, after){\r\n\t\tvar\tfromIndex, toIndex, start, end;\r\n\r\n\t\tif(from !== to){\r\n\r\n\t\t\tfromIndex = rows.indexOf(from);\r\n\r\n\t\t\tif (fromIndex > -1) {\r\n\r\n\t\t\t\trows.splice(fromIndex, 1);\r\n\r\n\t\t\t\ttoIndex = rows.indexOf(to);\r\n\r\n\t\t\t\tif (toIndex > -1) {\r\n\r\n\t\t\t\t\tif(after){\r\n\t\t\t\t\t\trows.splice(toIndex+1, 0, from);\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\trows.splice(toIndex, 0, from);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}else{\r\n\t\t\t\t\trows.splice(fromIndex, 0, from);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t//restyle rows\r\n\t\t\tif(rows === this.getDisplayRows()){\r\n\r\n\t\t\t\tstart = fromIndex < toIndex ? fromIndex : toIndex;\r\n\t\t\t\tend = toIndex > fromIndex ? toIndex : fromIndex +1;\r\n\r\n\t\t\t\tfor(let i = start; i <= end; i++){\r\n\t\t\t\t\tif(rows[i]){\r\n\t\t\t\t\t\tthis.styleRow(rows[i], i);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tclearData(){\r\n\t\tthis.setData([]);\r\n\t}\r\n\r\n\tgetRowIndex(row){\r\n\t\treturn this.findRowIndex(row, this.rows);\r\n\t}\r\n\r\n\tgetDisplayRowIndex(row){\r\n\t\tvar index = this.getDisplayRows().indexOf(row);\r\n\t\treturn index > -1 ? index : false;\r\n\t}\r\n\r\n\tnextDisplayRow(row, rowOnly){\r\n\t\tvar index = this.getDisplayRowIndex(row),\r\n\t\tnextRow = false;\r\n\r\n\r\n\t\tif(index !== false && index < this.displayRowsCount -1){\r\n\t\t\tnextRow = this.getDisplayRows()[index+1];\r\n\t\t}\r\n\r\n\t\tif(nextRow && (!(nextRow instanceof Row) || nextRow.type != \"row\")){\r\n\t\t\treturn this.nextDisplayRow(nextRow, rowOnly);\r\n\t\t}\r\n\r\n\t\treturn nextRow;\r\n\t}\r\n\r\n\tprevDisplayRow(row, rowOnly){\r\n\t\tvar index = this.getDisplayRowIndex(row),\r\n\t\tprevRow = false;\r\n\r\n\t\tif(index){\r\n\t\t\tprevRow = this.getDisplayRows()[index-1];\r\n\t\t}\r\n\r\n\t\tif(rowOnly && prevRow && (!(prevRow instanceof Row) || prevRow.type != \"row\")){\r\n\t\t\treturn this.prevDisplayRow(prevRow, rowOnly);\r\n\t\t}\r\n\r\n\t\treturn prevRow;\r\n\t}\r\n\r\n\tfindRowIndex(row, list){\r\n\t\tvar rowIndex;\r\n\r\n\t\trow = this.findRow(row);\r\n\r\n\t\tif(row){\r\n\t\t\trowIndex = list.indexOf(row);\r\n\r\n\t\t\tif(rowIndex > -1){\r\n\t\t\t\treturn rowIndex;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t}\r\n\r\n\tgetData(active, transform){\r\n\t\tvar output = [],\r\n\t\trows = this.getRows(active);\r\n\r\n\t\trows.forEach(function(row){\r\n\t\t\tif(row.type == \"row\"){\r\n\t\t\t\toutput.push(row.getData(transform || \"data\"));\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tgetComponents(active){\r\n\t\tvar\toutput = [],\r\n\t\trows = this.getRows(active);\r\n\r\n\t\trows.forEach(function(row){\r\n\t\t\toutput.push(row.getComponent());\r\n\t\t});\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tgetDataCount(active){\r\n\t\tvar rows = this.getRows(active);\r\n\r\n\t\treturn rows.length;\r\n\t}\r\n\r\n\tscrollHorizontal(left){\r\n\t\tthis.scrollLeft = left;\r\n\t\tthis.element.scrollLeft = left;\r\n\r\n\t\tthis.dispatch(\"scroll-horizontal\", left);\r\n\t}\r\n\r\n\tregisterDataPipelineHandler(handler, priority){\r\n\t\tif(typeof priority !== \"undefined\"){\r\n\t\t\tthis.dataPipeline.push({handler, priority})\r\n\t\t\tthis.dataPipeline.sort((a, b) => {\r\n\t\t\t\treturn a.priority - b.priority;\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tconsole.error(\"Data pipeline handlers must have a priority in order to be registered\")\r\n\t\t}\r\n\t}\r\n\r\n\tregisterDisplayPipelineHandler(handler, priority){\r\n\t\tif(typeof priority !== \"undefined\"){\r\n\t\t\tthis.displayPipeline.push({handler, priority})\r\n\t\t\tthis.displayPipeline.sort((a, b) => {\r\n\t\t\t\treturn a.priority - b.priority;\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tconsole.error(\"Display pipeline handlers must have a priority in order to be registered\")\r\n\t\t}\r\n\t}\r\n\r\n\t//set active data set\r\n\trefreshActiveData(handler, skipStage, renderInPosition){\r\n\t\tvar table = this.table,\r\n\t\tstage = \"\",\r\n\t\tindex = 0,\r\n\t\tcascadeOrder = [\"all\", \"dataPipeline\", \"display\", \"displayPipeline\", \"end\"],\r\n\t\tdisplayIndex;\r\n\r\n\r\n\t\tif(typeof handler === \"function\"){\r\n\t\t\tindex = this.dataPipeline.findIndex((item) => {\r\n\t\t\t\treturn item.handler === handler;\r\n\t\t\t});\r\n\r\n\t\t\tif(index > -1){\r\n\t\t\t\tstage = \"dataPipeline\";\r\n\r\n\t\t\t\tif(skipStage){\r\n\t\t\t\t\tif(index == this.dataPipeline.length - 1){\r\n\t\t\t\t\t\tstage = \"display\";\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tindex++;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tindex = this.displayPipeline.findIndex((item) => {\r\n\t\t\t\t\treturn item.handler === handler;\r\n\t\t\t\t});\r\n\r\n\t\t\t\tif(index > -1){\r\n\t\t\t\t\tstage = \"displayPipeline\";\r\n\r\n\t\t\t\t\tif(skipStage){\r\n\t\t\t\t\t\tif(index == this.displayPipeline.length - 1){\r\n\t\t\t\t\t\t\tstage = \"end\";\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\tindex++;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.error(\"Unable to refresh data, invalid handler provided\", handler)\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tstage = handler || \"all\";\r\n\t\t\tindex = 0;\r\n\t\t}\r\n\r\n\t\tif(this.redrawBlock){\r\n\t\t\tif(!this.redrawBlockRestoreConfig || (this.redrawBlockRestoreConfig && ((this.redrawBlockRestoreConfig.stage === stage && index < this.redrawBlockRestoreConfig.index) || (cascadeOrder.indexOf(stage) < cascadeOrder.indexOf(this.redrawBlockRestoreConfig.stage))))){\r\n\t\t\t\tthis.redrawBlockRestoreConfig = {\r\n\t\t\t\t\thandler: handler,\r\n\t\t\t\t\tskipStage: skipStage,\r\n\t\t\t\t\trenderInPosition: renderInPosition,\r\n\t\t\t\t\tstage:stage,\r\n\t\t\t\t\tindex:index,\r\n\t\t\t\t};\r\n\t\t\t}\r\n\r\n\t\t\treturn;\r\n\t\t}else{\r\n\t\t\tthis.dispatch(\"data-refeshing\");\r\n\r\n\t\t\tif(!handler){\r\n\t\t\t\tthis.activeRowsPipeline[0] = this.rows.slice(0);\r\n\t\t\t}\r\n\r\n\t\t\t//cascade through data refresh stages\r\n\t\t\tswitch(stage){\r\n\t\t\t\tcase \"all\":\r\n\t\t\t\t//handle case where alldata needs refreshing\r\n\r\n\t\t\t\tcase \"dataPipeline\":\r\n\r\n\t\t\t\tfor(let i = index; i < this.dataPipeline.length; i++){\r\n\t\t\t\t\tlet result = this.dataPipeline[i].handler(this.activeRowsPipeline[i].slice(0));\r\n\r\n\t\t\t\t\tthis.activeRowsPipeline[i + 1] = result || this.activeRowsPipeline[i].slice(0);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.setActiveRows(this.activeRowsPipeline[this.dataPipeline.length]);\r\n\r\n\t\t\t\tthis.regenerateRowNumbers();\r\n\r\n\t\t\t\tcase \"display\":\r\n\t\t\t\tindex = 0;\r\n\t\t\t\tthis.resetDisplayRows();\r\n\r\n\t\t\t\tcase \"displayPipeline\":\r\n\t\t\t\tfor(let i = index; i < this.displayPipeline.length; i++){\r\n\t\t\t\t\tlet result = this.displayPipeline[i].handler((i ? this.getDisplayRows(i - 1) : this.activeRows).slice(0), renderInPosition);\r\n\r\n\t\t\t\t\tthis.setDisplayRows(result || this.getDisplayRows(i - 1).slice(0), i);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tcase \"end\":\r\n\t\t\t\t//case to handle scenario when trying to skip past end stage\r\n\t\t\t}\r\n\r\n\t\t\tif(Helpers.elVisible(this.element)){\r\n\t\t\t\tif(renderInPosition){\r\n\t\t\t\t\tthis.reRenderInPosition();\r\n\t\t\t\t}else{\r\n\r\n\t\t\t\t\tif(!handler){\r\n\t\t\t\t\t\tthis.table.columnManager.renderer.renderColumns();\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tthis.renderTable();\r\n\r\n\t\t\t\t\tif(table.options.layoutColumnsOnNewData){\r\n\t\t\t\t\t\tthis.table.columnManager.redraw(true);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tthis.dispatch(\"data-refeshed\");\r\n\t\t}\r\n\t}\r\n\r\n\t//regenerate row numbers for row number formatter if in use\r\n\tregenerateRowNumbers(){\r\n\t\tif(this.rowNumColumn){\r\n\t\t\tthis.activeRows.forEach((row) => {\r\n\t\t\t\tvar cell = row.getCell(this.rowNumColumn);\r\n\r\n\t\t\t\tif(cell){\r\n\t\t\t\t\tcell._generateContents();\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tsetActiveRows(activeRows){\r\n\t\tthis.activeRows = activeRows;\r\n\t\tthis.activeRowsCount = this.activeRows.length;\r\n\t}\r\n\r\n\t//reset display rows array\r\n\tresetDisplayRows(){\r\n\t\tthis.displayRows = [];\r\n\r\n\t\tthis.displayRows.push(this.activeRows.slice(0));\r\n\r\n\t\tthis.displayRowsCount = this.displayRows[0].length;\r\n\t}\r\n\r\n\tgetNextDisplayIndex(){\r\n\t\treturn this.displayRows.length;\r\n\t}\r\n\r\n\t//set display row pipeline data\r\n\tsetDisplayRows(displayRows, index){\r\n\r\n\t\tvar output = true;\r\n\r\n\t\tif(index && typeof this.displayRows[index] != \"undefined\"){\r\n\t\t\tthis.displayRows[index] = displayRows;\r\n\t\t\toutput = true;\r\n\t\t}else{\r\n\t\t\tthis.displayRows.push(displayRows)\r\n\t\t\toutput = index = this.displayRows.length -1;\r\n\t\t}\r\n\r\n\t\tif(index == this.displayRows.length -1){\r\n\t\t\tthis.displayRowsCount = this.displayRows[this.displayRows.length -1].length;\r\n\t\t}\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tgetDisplayRows(index){\r\n\t\tif(typeof index == \"undefined\"){\r\n\t\t\treturn this.displayRows.length ? this.displayRows[this.displayRows.length -1] : [];\r\n\t\t}else{\r\n\t\t\treturn this.displayRows[index] || [];\r\n\t\t}\r\n\t}\r\n\r\n\tgetVisibleRows(viewable){\r\n\t\treturn this.renderer.visibleRows(!viewable);\r\n\t}\r\n\r\n\t//repeat action accross display rows\r\n\tdisplayRowIterator(callback){\r\n\t\tthis.activeRowsPipeline.forEach(callback);\r\n\t\tthis.displayRows.forEach(callback);\r\n\r\n\t\tthis.displayRowsCount = this.displayRows[this.displayRows.length -1].length;\r\n\t}\r\n\r\n\t//return only actual rows (not group headers etc)\r\n\tgetRows(type){\r\n\t\tvar rows;\r\n\r\n\t\tswitch(type){\r\n\t\t\tcase \"active\":\r\n\t\t\trows = this.activeRows;\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"display\":\r\n\t\t\trows = this.table.rowManager.getDisplayRows();\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"visible\":\r\n\t\t\trows = this.getVisibleRows(true);\r\n\t\t\tbreak;\r\n\r\n\t\t\tdefault:\r\n\t\t\trows = this.chain(\"rows-retrieve\", type, null, this.rows) || this.rows;\r\n\t\t}\r\n\r\n\t\treturn rows;\r\n\t}\r\n\r\n\t///////////////// Table Rendering /////////////////\r\n\t//trigger rerender of table in current position\r\n\treRenderInPosition(callback){\r\n\t\tif(this.redrawBlock){\r\n\t\t\tif(callback){\r\n\t\t\t\tcallback();\r\n\t\t\t}else{\r\n\t\t\t\tthis.redrawBlockRederInPosition = true;\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tthis.renderer.rerenderRows(callback);\r\n\t\t}\r\n\t}\r\n\r\n\tinitializeRenderer(){\r\n\t\tvar renderClass;\r\n\r\n\t\tvar renderers = {\r\n\t\t\t\"virtual\": RendererVirtualDomVertical,\r\n\t\t\t\"basic\": RendererBasicVertical,\r\n\t\t};\r\n\r\n\t\tif(typeof this.table.options.renderVertical === \"string\"){\r\n\t\t\trenderClass = renderers[this.table.options.renderVertical];\r\n\t\t}else{\r\n\t\t\trenderClass = this.table.options.renderVertical;\r\n\t\t}\r\n\r\n\t\tif(renderClass){\r\n\t\t\tthis.renderer = new renderClass(this.table, this.element, this.tableElement);\r\n\t\t\tthis.renderer.initialize();\r\n\r\n\t\t\tif((this.table.element.clientHeight || this.table.options.height)){\r\n\t\t\t\tthis.fixedHeight = true;\r\n\t\t\t}else{\r\n\t\t\t\tthis.fixedHeight = false;\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tconsole.error(\"Unable to find matching renderer:\", table.options.renderVertical);\r\n\t\t}\r\n\t}\r\n\r\n\tgetRenderMode(){\r\n\t\treturn this.renderMode;\r\n\t}\r\n\r\n\trenderTable(){\r\n\r\n\t\tthis.dispatchExternal(\"renderStarted\");\r\n\r\n\t\tthis.element.scrollTop = 0;\r\n\r\n\t\tif(this.displayRowsCount){\r\n\t\t\tthis._clearTable();\r\n\t\t\tthis.renderer.renderRows();\r\n\r\n\t\t\tif(this.firstRender){\r\n\t\t\t\tthis.firstRender = false;\r\n\t\t\t\tthis.layoutRefresh();\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tthis.renderEmptyScroll();\r\n\t\t}\r\n\r\n\t\tif(!this.fixedHeight){\r\n\t\t\tthis.adjustTableSize();\r\n\t\t}\r\n\r\n\t\tthis.dispatch(\"table-layout\");\r\n\r\n\t\tif(!this.displayRowsCount){\r\n\t\t\tif(this.table.options.placeholder){\r\n\r\n\t\t\t\tthis.table.options.placeholder.setAttribute(\"tabulator-render-mode\", this.renderMode);\r\n\r\n\t\t\t\tthis.getElement().appendChild(this.table.options.placeholder);\r\n\t\t\t\tthis.table.options.placeholder.style.width = this.table.columnManager.getWidth() + \"px\";\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.dispatchExternal(\"renderComplete\");\r\n\t}\r\n\r\n\t//show scrollbars on empty table div\r\n\trenderEmptyScroll(){\r\n\t\tif(this.table.options.placeholder){\r\n\t\t\tthis.tableElement.style.display = \"none\";\r\n\t\t}else{\r\n\t\t\tthis.tableElement.style.minWidth = this.table.columnManager.getWidth() + \"px\";\r\n\t\t\t// this.tableElement.style.minHeight = \"1px\";\r\n\t\t\t// this.tableElement.style.visibility = \"hidden\";\r\n\t\t}\r\n\t}\r\n\r\n\t_clearTable(){\r\n\t\tvar element = this.tableElement;\r\n\r\n\t\tif(this.table.options.placeholder && this.table.options.placeholder.parentNode){\r\n\t\t\tthis.table.options.placeholder.parentNode.removeChild(this.table.options.placeholder);\r\n\t\t}\r\n\r\n\t\tthis.scrollTop = 0;\r\n\t\tthis.scrollLeft = 0;\r\n\r\n\t\tthis.renderer.clearRows();\r\n\t}\r\n\r\n\tstyleRow(row, index){\r\n\t\tvar rowEl = row.getElement();\r\n\r\n\t\tif(index % 2){\r\n\t\t\trowEl.classList.add(\"tabulator-row-even\");\r\n\t\t\trowEl.classList.remove(\"tabulator-row-odd\");\r\n\t\t}else{\r\n\t\t\trowEl.classList.add(\"tabulator-row-odd\");\r\n\t\t\trowEl.classList.remove(\"tabulator-row-even\");\r\n\t\t}\r\n\t}\r\n\r\n\t//normalize height of active rows\r\n\tnormalizeHeight(){\r\n\t\tthis.activeRows.forEach(function(row){\r\n\t\t\trow.normalizeHeight();\r\n\t\t});\r\n\t}\r\n\r\n\t//adjust the height of the table holder to fit in the Tabulator element\r\n\tadjustTableSize(){\r\n\t\tvar initialHeight = this.element.clientHeight,\r\n\t\tmodExists;\r\n\r\n\t\tif(this.renderer.verticalFillMode === \"fill\"){\r\n\t\t\tlet otherHeight = Math.floor(this.table.columnManager.getElement().getBoundingClientRect().height + (this.table.footerManager && this.table.footerManager.active && !this.table.footerManager.external ? this.table.footerManager.getElement().getBoundingClientRect().height : 0));\r\n\r\n\t\t\tif(this.fixedHeight){\r\n\t\t\t\tthis.element.style.minHeight = \"calc(100% - \" + otherHeight + \"px)\";\r\n\t\t\t\tthis.element.style.height = \"calc(100% - \" + otherHeight + \"px)\";\r\n\t\t\t\tthis.element.style.maxHeight = \"calc(100% - \" + otherHeight + \"px)\";\r\n\t\t\t}else{\r\n\t\t\t\tthis.element.style.height = \"\";\r\n\t\t\t\tthis.element.style.height = (this.table.element.clientHeight - otherHeight) + \"px\";\r\n\t\t\t\tthis.element.scrollTop = this.scrollTop;\r\n\t\t\t}\r\n\r\n\t\t\tthis.renderer.resize();\r\n\r\n\t\t\t//check if the table has changed size when dealing with variable height tables\r\n\t\t\tif(!this.fixedHeight && initialHeight != this.element.clientHeight){\r\n\t\t\t\tif(this.subscribed(\"table-resize\")){\r\n\t\t\t\t\tthis.dispatch(\"table-resize\");\r\n\t\t\t\t}else{\r\n\t\t\t\t\tthis.redraw();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//renitialize all rows\r\n\treinitialize(){\r\n\t\tthis.rows.forEach(function(row){\r\n\t\t\trow.reinitialize(true);\r\n\t\t});\r\n\t}\r\n\r\n\t//prevent table from being redrawn\r\n\tblockRedraw (){\r\n\t\tthis.redrawBlock = true;\r\n\t\tthis.redrawBlockRestoreConfig = false;\r\n\t}\r\n\r\n\t//restore table redrawing\r\n\trestoreRedraw (){\r\n\t\tthis.redrawBlock = false;\r\n\r\n\t\tif(this.redrawBlockRestoreConfig){\r\n\t\t\tthis.refreshActiveData(this.redrawBlockRestoreConfig.handler, this.redrawBlockRestoreConfig.skipStage, this.redrawBlockRestoreConfig.renderInPosition)\r\n\r\n\t\t\tthis.redrawBlockRestoreConfig = false;\r\n\t\t}else{\r\n\t\t\tif(this.redrawBlockRederInPosition){\r\n\t\t\t\tthis.reRenderInPosition();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.redrawBlockRederInPosition = false;\r\n\t}\r\n\r\n\t//redraw table\r\n\tredraw (force){\r\n\t\tvar pos = 0,\r\n\t\tleft = this.scrollLeft;\r\n\r\n\t\tthis.adjustTableSize();\r\n\r\n\t\tthis.table.tableWidth = this.table.element.clientWidth;\r\n\r\n\t\tif(!force){\r\n\t\t\tthis.reRenderInPosition();\r\n\t\t\tthis.scrollHorizontal(left);\r\n\r\n\t\t\tif(!this.displayRowsCount){\r\n\t\t\t\tif(this.table.options.placeholder){\r\n\t\t\t\t\tthis.getElement().appendChild(this.table.options.placeholder);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tthis.renderTable();\r\n\t\t}\r\n\t}\r\n\r\n\tresetScroll(){\r\n\t\tthis.element.scrollLeft = 0;\r\n\t\tthis.element.scrollTop = 0;\r\n\r\n\t\tif(this.table.browser === \"ie\"){\r\n\t\t\tvar event = document.createEvent(\"Event\");\r\n\t\t\tevent.initEvent(\"scroll\", false, true);\r\n\t\t\tthis.element.dispatchEvent(event);\r\n\t\t}else{\r\n\t\t\tthis.element.dispatchEvent(new Event('scroll'));\r\n\t\t}\r\n\t}\r\n}","import CoreFeature from './CoreFeature.js';\r\n\r\nexport default class FooterManager extends CoreFeature{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.active = false;\r\n\t\tthis.element = this.createElement(); //containing element\r\n\t\tthis.external = false;\r\n\t\tthis.links = [];\r\n\r\n\t\tthis.initializeElement();\r\n\t}\r\n\r\n\tinitialize(){\r\n\r\n\t}\r\n\r\n\tcreateElement (){\r\n\t\tvar el = document.createElement(\"div\");\r\n\r\n\t\tel.classList.add(\"tabulator-footer\");\r\n\r\n\t\treturn el;\r\n\t}\r\n\r\n\tinitializeElement(element){\r\n\t\tif(this.table.options.footerElement){\r\n\r\n\t\t\tswitch(typeof this.table.options.footerElement){\r\n\t\t\t\tcase \"string\":\r\n\t\t\t\tif(this.table.options.footerElement[0] === \"<\"){\r\n\t\t\t\t\tthis.element.innerHTML = this.table.options.footerElement;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tthis.external = true;\r\n\t\t\t\t\tthis.element = document.querySelector(this.table.options.footerElement);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tdefault:\r\n\t\t\t\tthis.element = this.table.options.footerElement;\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tgetElement(){\r\n\t\treturn this.element;\r\n\t}\r\n\r\n\tappend(element, parent){\r\n\t\tthis.activate(parent);\r\n\r\n\t\tthis.element.appendChild(element);\r\n\t\tthis.table.rowManager.adjustTableSize();\r\n\t}\r\n\r\n\tprepend(element, parent){\r\n\t\tthis.activate(parent);\r\n\r\n\t\tthis.element.insertBefore(element, this.element.firstChild);\r\n\t\tthis.table.rowManager.adjustTableSize();\r\n\t}\r\n\r\n\tremove(element){\r\n\t\telement.parentNode.removeChild(element);\r\n\t\tthis.deactivate();\r\n\t}\r\n\r\n\tdeactivate(force){\r\n\t\tif(!this.element.firstChild || force){\r\n\t\t\tif(!this.external){\r\n\t\t\t\tthis.element.parentNode.removeChild(this.element);\r\n\t\t\t}\r\n\t\t\tthis.active = false;\r\n\t\t}\r\n\t}\r\n\r\n\tactivate(parent){\r\n\t\tif(!this.active){\r\n\t\t\tthis.active = true;\r\n\t\t\tif(!this.external){\r\n\t\t\t\tthis.table.element.appendChild(this.getElement());\r\n\t\t\t\tthis.table.element.style.display = '';\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(parent){\r\n\t\t\tthis.links.push(parent);\r\n\t\t}\r\n\t}\r\n\r\n\tredraw(){\r\n\t\tthis.links.forEach(function(link){\r\n\t\t\tlink.footerRedraw();\r\n\t\t});\r\n\t}\r\n}","import CoreFeature from '../CoreFeature.js';\r\nimport Helpers from './Helpers.js';\r\n\r\nexport default class InteractionManager extends CoreFeature {\r\n\r\n\tconstructor (table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.el = this.table.element;\r\n\r\n\t\tthis.abortClasses = [\"tabulator-headers\", \"tabulator-table\"];\r\n\r\n\t\tthis.previousTargets = {};\r\n\r\n\t\tthis.listeners = [\r\n\t\t\"click\",\r\n\t\t\"dblclick\",\r\n\t\t\"contextmenu\",\r\n\t\t\"mouseenter\",\r\n\t\t\"mouseleave\",\r\n\t\t\"mouseover\",\r\n\t\t\"mouseout\",\r\n\t\t\"mousemove\",\r\n\t\t\"touchstart\",\r\n\t\t\"touchend\",\r\n\t\t];\r\n\r\n\t\tthis.componentMap = {\r\n\t\t\t\"tabulator-cell\":\"cell\",\r\n\t\t\t\"tabulator-row\":\"row\",\r\n\t\t\t\"tabulator-group\":\"group\",\r\n\t\t\t\"tabulator-col\":\"column\",\r\n\t\t};\r\n\r\n\t\tthis.buildListenerMap();\r\n\t\tthis.bindSubscriptionWatchers();\r\n\t}\r\n\r\n\tbuildListenerMap(){\r\n\t\tvar listenerMap = {};\r\n\r\n\t\tthis.listeners.forEach((listener) => {\r\n\t\t\tlistenerMap[listener] = {\r\n\t\t\t\thandler:null,\r\n\t\t\t\tcomponents:[],\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\tthis.listeners = listenerMap;\r\n\t}\r\n\r\n\tbindSubscriptionWatchers(){\r\n\t\tvar listeners = Object.keys(this.listeners),\r\n\t\tcomponents = Object.values(this.componentMap);\r\n\r\n\t\tfor(let comp of components){\r\n\t\t\tfor(let listener of listeners){\r\n\t\t\t\tlet key = comp + \"-\" + listener;\r\n\r\n\t\t\t\tthis.subscriptionChange(key, this.subscriptionChanged.bind(this, comp, listener));\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tsubscriptionChanged(component, key, added){\r\n\t\tvar listener = this.listeners[key].components,\r\n\t\tindex = listener.indexOf(component),\r\n\t\tchanged = false;\r\n\r\n\t\tif(added){\r\n\t\t\tif(index === -1){\r\n\t\t\t\tlistener.push(component);\r\n\t\t\t\tchanged = true;\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tif(!this.subscribed(component + \"-\" + key)){\r\n\t\t\t\tif(index > -1){\r\n\t\t\t\t\tlistener.splice(index, 1);\r\n\t\t\t\t\tchanged = true;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(changed){\r\n\t\t\tthis.updateEventListeners();\r\n\t\t}\r\n\t}\r\n\r\n\tupdateEventListeners(){\r\n\t\tfor(let key in this.listeners){\r\n\t\t\tlet listener = this.listeners[key];\r\n\r\n\t\t\tif(listener.components.length){\r\n\t\t\t\tif(!listener.handler){\r\n\t\t\t\t\tlistener.handler = this.track.bind(this, key);\r\n\t\t\t\t\tthis.el.addEventListener(key, listener.handler)\r\n\t\t\t\t\t// this.el.addEventListener(key, listener.handler, {passive: true})\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tif(listener.handler){\r\n\t\t\t\t\tthis.el.removeEventListener(key, listener.handler)\r\n\t\t\t\t\tlistener.handler = null;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\ttrack(type, e){\r\n\t\tvar targets = this.findTargets(e.path);\r\n\t\ttargets = this.bindComponents(type, targets);\r\n\t\tthis.triggerEvents(type, e, targets);\r\n\t}\r\n\r\n\tfindTargets(path){\r\n\t\tvar targets = {};\r\n\r\n\t\tlet componentMap = Object.keys(this.componentMap);\r\n\r\n\t\tfor (let el of path) {\r\n\t\t\tlet classList = el.classList ? [...el.classList] : [];\r\n\r\n\t\t\tlet abort = classList.filter((item) => {\r\n\t\t\t\treturn this.abortClasses.includes(item);\r\n\t\t\t})\r\n\r\n\t\t\tif(abort.length){\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\r\n\t\t\tlet elTargets = classList.filter((item) => {\r\n\t\t\t\treturn componentMap.includes(item);\r\n\t\t\t})\r\n\r\n\t\t\tfor (let target of elTargets) {\r\n\t\t\t\ttargets[this.componentMap[target]] = el;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(targets.group && targets.group === targets.row){\r\n\t\t\tdelete targets.row;\r\n\t\t}\r\n\r\n\t\treturn targets;\r\n\t}\r\n\r\n\tbindComponents(type, targets){\r\n\t\t//ensure row component is looked up before cell\r\n\t\tvar keys = Object.keys(targets).reverse(),\r\n\t\tlistener = this.listeners[type],\r\n\t\ttargetMatches = {};\r\n\r\n\t\tfor(let key of keys){\r\n\t\t\tlet component;\r\n\t\t\tlet target = targets[key];\r\n\t\t\tlet previousTarget = this.previousTargets[key];\r\n\r\n\t\t\tif(previousTarget && previousTarget.target === target){\r\n\t\t\t\tcomponent = previousTarget.component;\r\n\t\t\t}else{\r\n\t\t\t\tswitch(key){\r\n\t\t\t\t\tcase \"row\":\r\n\t\t\t\t\tcase \"group\":\r\n\t\t\t\t\tif(listener.components.includes(\"row\") || listener.components.includes(\"cell\")){\r\n\t\t\t\t\t\tlet rows = this.table.rowManager.getVisibleRows();\r\n\r\n\t\t\t\t\t\tcomponent = rows.find((row) => {\r\n\t\t\t\t\t\t\treturn row.getElement() === target;\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase \"column\":\r\n\t\t\t\t\tif(listener.components.includes(\"column\")){\r\n\t\t\t\t\t\tcomponent = this.table.columnManager.findColumn(target);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak\r\n\r\n\t\t\t\t\tcase \"cell\":\r\n\t\t\t\t\tif(listener.components.includes(\"cell\")){\r\n\t\t\t\t\t\tcomponent = targets[\"row\"].findCell(target);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif(component){\r\n\t\t\t\ttargets[key] = component;\r\n\t\t\t\ttargetMatches[key] = {\r\n\t\t\t\t\ttarget:target,\r\n\t\t\t\t\tcomponent:component,\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.previousTargets = targetMatches;\r\n\r\n\t\treturn targets;\r\n\t}\r\n\r\n\ttriggerEvents(type, e, targets){\r\n\t\tvar listener = this.listeners[type];\r\n\r\n\t\tfor(let key in targets){\r\n\t\t\tif(targets[key] && listener.components.includes(key)){\r\n\t\t\t\tthis.dispatch(key + \"-\" + type, e, targets[key]);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}","export default class ComponentFuctionBinder{\r\n\r\n\tconstructor(table){\r\n\t\tthis.table = table;\r\n\r\n\t\tthis.bindings = {};\r\n\t}\r\n\r\n\tbind(type, funcName, handler){\r\n\t\tif(!this.bindings[type]){\r\n\t\t\tthis.bindings[type] = {};\r\n\t\t}\r\n\r\n\t\tif(this.bindings[type][funcName]){\r\n\t\t\tconsole.warn(\"Unable to bind component handler, a matching function name is already bound\", type, funcName, hanlder)\r\n\t\t}else{\r\n\t\t\tthis.bindings[type][funcName] = handler;\r\n\t\t}\r\n\t}\r\n\r\n\thandle(type, component, name){\r\n\t\tif(this.bindings[type] && this.bindings[type][name]){\r\n\t\t\treturn this.bindings[type][name].bind(null, component);\r\n\t\t}else{\r\n\t\t\tconsole.error(\"The \" + type + \" component does not have a \" + name + \" function, have you checked that you have the correct Tabulator module installed?\")\r\n\t\t}\r\n\t}\r\n\r\n}","import CoreFeature from '../CoreFeature.js';\r\n\r\nexport default class DataLoader extends CoreFeature{\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.loaderElement = this.createLoaderElement(); //loader message div\r\n\t\tthis.msgElement = this.createMsgElement(); //message element\r\n\t\tthis.loadingElement = null;\r\n\t\tthis.errorElement = null;\r\n\r\n\t\tthis.requestOrder = 0; //prevent requests comming out of sequence if overridden by another load request\r\n\t\tthis.loading = false;\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tvar template;\r\n\r\n\t\tthis.loaderElement.appendChild(this.msgElement);\r\n\r\n\t\tif(this.table.options.dataLoaderLoading){\r\n\t\t\tif(typeof this.table.options.dataLoaderLoading == \"string\"){\r\n\t\t\t\ttemplate = document.createElement('template');\r\n\t\t\t\ttemplate.innerHTML = this.table.options.dataLoaderLoading.trim();\r\n\t\t\t\tthis.loadingElement = template.content.firstChild;\r\n\t\t\t}else{\r\n\t\t\t\tthis.loadingElement = this.table.options.dataLoaderLoading;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(this.table.options.dataLoaderError){\r\n\t\t\tif(typeof this.table.options.dataLoaderError == \"string\"){\r\n\t\t\t\ttemplate = document.createElement('template');\r\n\t\t\t\ttemplate.innerHTML = this.table.options.dataLoaderError.trim();\r\n\t\t\t\tthis.errorElement = template.content.firstChild;\r\n\t\t\t}else{\r\n\t\t\t\tthis.errorElement = this.table.options.dataLoaderError;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tcreateLoaderElement(){\r\n\t\tvar el = document.createElement(\"div\");\r\n\t\tel.classList.add(\"tabulator-loader\");\r\n\t\treturn el;\r\n\t}\r\n\r\n\tcreateMsgElement(){\r\n\t\tvar el = document.createElement(\"div\");\r\n\r\n\t\tel.classList.add(\"tabulator-loader-msg\");\r\n\t\tel.setAttribute(\"role\", \"alert\");\r\n\r\n\t\treturn el;\r\n\t}\r\n\r\n\tload(data, params, config, replace, silent){\r\n\t\tvar requestNo = ++this.requestOrder;\r\n\r\n\t\tthis.dispatchExternal(\"dataLoading\", data);\r\n\r\n\t\t//parse json data to array\r\n\t\tif (data && (data.indexOf(\"{\") == 0 || data.indexOf(\"[\") == 0)){\r\n\t\t\tdata = JSON.parse(data);\r\n\t\t}\r\n\r\n\t\tif(this.confirm(\"data-loading\", data, params, config, silent)){\r\n\t\t\tthis.loading = true;\r\n\r\n\t\t\tif(!silent){\r\n\t\t\t\tthis.showLoader();\r\n\t\t\t}\r\n\r\n\t\t\t//get params for request\r\n\t\t\tvar params = this.chain(\"data-params\", [data, config, silent], params || {}, {});\r\n\r\n\t\t\tparams = this.mapParams(params, this.table.options.dataSendParams);\r\n\r\n\t\t\tvar result = this.chain(\"data-load\", [data, params, config, silent], Promise.resolve([]));\r\n\r\n\t\t\treturn result.then((response) => {\r\n\t\t\t\tif(!Array.isArray(response) && typeof response == \"object\"){\r\n\t\t\t\t\tresponse = this.mapParams(response, this.objectInvert(this.table.options.dataReceiveParams));\r\n\t\t\t\t}\r\n\r\n\t\t\t\tvar rowData = this.chain(\"data-loaded\", response, null, response);\r\n\r\n\t\t\t\tif(requestNo == this.requestOrder){\r\n\t\t\t\t\tthis.hideLoader();\r\n\r\n\t\t\t\t\tif(rowData !== false){\r\n\t\t\t\t\t\tthis.dispatchExternal(\"dataLoaded\", data);\r\n\t\t\t\t\t\tthis.table.rowManager.setData(rowData, replace, !replace);\r\n\t\t\t\t\t}\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.warn(\"Data Load Response Blocked - An active data load request was blocked by an attempt to change table data while the request was being made\");\r\n\t\t\t\t}\r\n\t\t\t}).catch((error) => {\r\n\t\t\t\tconsole.error(\"Data Load Error: \", error);\r\n\t\t\t\tthis.dispatchExternal(\"dataLoadError\", error);\r\n\r\n\t\t\t\tif(!silent){\r\n\t\t\t\t\tthis.showError();\r\n\t\t\t\t}\r\n\r\n\t\t\t\tsetTimeout(() => {\r\n\t\t\t\t\tthis.hideLoader();\r\n\t\t\t\t}, 3000);\r\n\t\t\t})\r\n\t\t\t.finally(() => {\r\n\t\t\t\tthis.loading = false;\r\n\t\t\t})\r\n\t\t}else{\r\n\t\t\tthis.dispatchExternal(\"dataLoaded\", data);\r\n\t\t\tthis.table.rowManager.setData(data, replace, !replace);\r\n\t\t\treturn Promise.resolve();\r\n\t\t}\r\n\t}\r\n\r\n\tmapParams(params, map){\r\n\t\tvar output = {};\r\n\r\n\t\tfor(let key in params){\r\n\t\t\toutput[map.hasOwnProperty(key) ? map[key] : key] = params[key];\r\n\t\t}\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tobjectInvert(obj){\r\n\t\tvar output = {};\r\n\r\n\t\tfor(let key in obj){\r\n\t\t\toutput[obj[key]] = key;\r\n\t\t}\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tblockActiveLoad(){\r\n\t\tthis.requestOrder++;\r\n\t}\r\n\r\n\tshowLoader(){\r\n\t\tvar shouldLoad = typeof this.table.options.dataLoader === \"function\" ? this.table.options.dataLoader() : this.table.options.dataLoader;\r\n\r\n\t\tif(shouldLoad){\r\n\t\t\tthis.hideLoader();\r\n\r\n\t\t\twhile(this.msgElement.firstChild) this.msgElement.removeChild(this.msgElement.firstChild);\r\n\r\n\t\t\tthis.msgElement.classList.remove(\"tabulator-error\");\r\n\t\t\tthis.msgElement.classList.add(\"tabulator-loading\");\r\n\r\n\t\t\tif(this.loadingElement){\r\n\t\t\t\tthis.msgElement.appendChild(this.loadingElement);\r\n\t\t\t}else{\r\n\t\t\t\tthis.msgElement.innerHTML = this.langText(\"data|loading\");\r\n\t\t\t}\r\n\r\n\t\t\tthis.table.element.appendChild(this.loaderElement);\r\n\t\t}\r\n\t}\r\n\r\n\tshowError(){\r\n\t\tthis.hideLoader();\r\n\r\n\t\twhile(this.msgElement.firstChild) this.msgElement.removeChild(this.msgElement.firstChild);\r\n\t\tthis.msgElement.classList.remove(\"tabulator-loading\");\r\n\t\tthis.msgElement.classList.add(\"tabulator-error\");\r\n\r\n\t\tif(this.errorElement){\r\n\t\t\tthis.msgElement.appendChild(this.errorElement);\r\n\t\t}else{\r\n\t\t\tthis.msgElement.innerHTML = this.langText(\"data|error\");\r\n\t\t}\r\n\r\n\t\tthis.table.element.appendChild(this.loaderElement);\r\n\t}\r\n\r\n\r\n\thideLoader(){\r\n\t\tif(this.loaderElement.parentNode){\r\n\t\t\tthis.loaderElement.parentNode.removeChild(this.loaderElement);\r\n\t\t}\r\n\t}\r\n}","export default class ExternalEventBus {\r\n\r\n\tconstructor(optionsList, debug){\r\n\t\tthis.events = {};\r\n\t\tthis.optionsList = optionsList || {};\r\n\t\tthis.subscriptionNotifiers = {};\r\n\r\n\t\tthis.dispatch = debug ? this._debugDispatch.bind(this) : this._dispatch.bind(this);\r\n\t\tthis.debug = debug;\r\n\t}\r\n\r\n\tsubscriptionChange(key, callback){\r\n\t\tif(!this.subscriptionNotifiers[key]){\r\n\t\t\tthis.subscriptionNotifiers[key] = [];\r\n\t\t}\r\n\r\n\t\tthis.subscriptionNotifiers[key].push(callback);\r\n\r\n\t\tif(this.subscribed(key)){\r\n\t\t\tthis._notifiySubscriptionChange(key, true);\r\n\t\t}\r\n\t}\r\n\r\n\tsubscribe(key, callback){\r\n\t\tif(!this.events[key]){\r\n\t\t\tthis.events[key] = [];\r\n\t\t}\r\n\r\n\t\tthis.events[key].push(callback);\r\n\r\n\t\tthis._notifiySubscriptionChange(key, true);\r\n\t}\r\n\r\n\tunsubscribe(key, callback){\r\n\t\tvar index;\r\n\r\n\t\tif(this.events[key]){\r\n\t\t\tif(callback){\r\n\t\t\t\tindex = this.events[key].findIndex((item) => {\r\n\t\t\t\t\treturn item === callback;\r\n\t\t\t\t});\r\n\r\n\t\t\t\tif(index > -1){\r\n\t\t\t\t\tthis.events[key].splice(index, 1);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.warn(\"Cannot remove event, no matching event found:\", key, callback);\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tdelete this.events[key];\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Cannot remove event, no events set on:\", key);\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis._notifiySubscriptionChange(key, false);\r\n\t}\r\n\r\n\tsubscribed(key){\r\n\t\treturn this.events[key] && this.events[key].length;\r\n\t}\r\n\r\n\t_notifiySubscriptionChange(key, subscribed){\r\n\t\tvar notifiers = this.subscriptionNotifiers[key];\r\n\r\n\t\tif(notifiers){\r\n\t\t\tnotifiers.forEach((callback)=>{\r\n\t\t\t\tcallback(subscribed);\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\t_dispatch(){\r\n\t\tvar args = Array.from(arguments),\r\n\t\tkey = args.shift(),\r\n\t\tresult;\r\n\r\n\t\tif(this.events[key]){\r\n\t\t\tthis.events[key].forEach((callback, i) => {\r\n\t\t\t\tlet callResult = callback.apply(this, args);\r\n\r\n\t\t\t\tif(!i){\r\n\t\t\t\t\tresult = callResult;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\t_debugDispatch(){\r\n\t\tvar args = Array.from(arguments),\r\n\t\tkey = args[0];\r\n\r\n\t\targs[0] = \"ExternalEvent:\" + args[0];\r\n\r\n\t\tif(this.debug === true || this.debug.includes(key)){\r\n\t\t\tconsole.log(...args);\r\n\t\t}\r\n\r\n\t\treturn this._dispatch(...arguments)\r\n\t}\r\n}","export default class InternalEventBus {\r\n\r\n\tconstructor(debug){\r\n\t\tthis.events = {};\r\n\t\tthis.subscriptionNotifiers = {};\r\n\r\n\t\tthis.dispatch = debug ? this._debugDispatch.bind(this) : this._dispatch.bind(this);\r\n\t\tthis.chain = debug ? this._debugChain.bind(this) : this._chain.bind(this);\r\n\t\tthis.confirm = debug ? this._debugConfirm.bind(this) : this._confirm.bind(this);\r\n\t\tthis.debug = debug;\r\n\t}\r\n\r\n\tsubscriptionChange(key, callback){\r\n\t\tif(!this.subscriptionNotifiers[key]){\r\n\t\t\tthis.subscriptionNotifiers[key] = [];\r\n\t\t}\r\n\r\n\t\tthis.subscriptionNotifiers[key].push(callback);\r\n\r\n\t\tif(this.subscribed(key)){\r\n\t\t\tthis._notifiySubscriptionChange(key, true);\r\n\t\t}\r\n\t}\r\n\r\n\tsubscribe(key, callback, priority = 10000){\r\n\t\tif(!this.events[key]){\r\n\t\t\tthis.events[key] = [];\r\n\t\t}\r\n\r\n\t\tthis.events[key].push({callback, priority});\r\n\r\n\t\tthis.events[key].sort((a, b) => {\r\n\t\t\treturn a.priority - b.priority;\r\n\t\t});\r\n\r\n\t\tthis._notifiySubscriptionChange(key, true);\r\n\t}\r\n\r\n\tunsubscribe(key, callback){\r\n\t\tvar index;\r\n\r\n\t\tif(this.events[key]){\r\n\t\t\tif(callback){\r\n\t\t\t\tindex = this.events[key].findIndex((item) => {\r\n\t\t\t\t\treturn item.callback === callback;\r\n\t\t\t\t});\r\n\r\n\t\t\t\tif(index > -1){\r\n\t\t\t\t\tthis.events[key].splice(index, 1);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.warn(\"Cannot remove event, no matching event found:\", key, callback);\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Cannot remove event, no events set on:\", key);\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis._notifiySubscriptionChange(key, false);\r\n\t}\r\n\r\n\tsubscribed(key){\r\n\t\treturn this.events[key] && this.events[key].length;\r\n\t}\r\n\r\n\t_chain(key, args, initialValue, fallback){\r\n\t\tvar value = initialValue;\r\n\r\n\t\tif(!Array.isArray(args)){\r\n\t\t\targs = [args];\r\n\t\t}\r\n\r\n\t\tif(this.subscribed(key)){\r\n\t\t\tthis.events[key].forEach((subscriber, i) => {\r\n\t\t\t\tvalue = subscriber.callback.apply(this, args.concat([value]));\r\n\t\t\t});\r\n\r\n\t\t\treturn value;\r\n\t\t}else{\r\n\t\t\treturn typeof fallback === \"function\" ? fallback() : fallback;\r\n\t\t}\r\n\t}\r\n\r\n\t_confirm(key, args){\r\n\t\tvar confirmed = false;\r\n\r\n\t\tif(!Array.isArray(args)){\r\n\t\t\targs = [args];\r\n\t\t}\r\n\r\n\t\tif(this.subscribed(key)){\r\n\t\t\tthis.events[key].forEach((subscriber, i) => {\r\n\t\t\t\tif(subscriber.callback.apply(this, args)){\r\n\t\t\t\t\tconfirmed = true;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn confirmed;\r\n\t}\r\n\r\n\t_notifiySubscriptionChange(key, subscribed){\r\n\t\tvar notifiers = this.subscriptionNotifiers[key];\r\n\r\n\t\tif(notifiers){\r\n\t\t\tnotifiers.forEach((callback)=>{\r\n\t\t\t\tcallback(subscribed);\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\t_dispatch(){\r\n\t\tvar args = Array.from(arguments),\r\n\t\tkey = args.shift();\r\n\r\n\t\tif(this.events[key]){\r\n\t\t\tthis.events[key].forEach((subscriber) => {\r\n\t\t\t\tlet callResult = subscriber.callback.apply(this, args);\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\t_debugDispatch(){\r\n\t\tvar args = Array.from(arguments),\r\n\t\tkey = args[0];\r\n\r\n\t\targs[0] = \"InternalEvent:\" + key;\r\n\r\n\t\tif(this.debug === true || this.debug.includes(key)){\r\n\t\t\tconsole.log(...args);\r\n\t\t}\r\n\r\n\t\treturn this._dispatch(...arguments);\r\n\t}\r\n\r\n\t_debugChain(){\r\n\t\tvar args = Array.from(arguments),\r\n\t\tkey = args[0];\r\n\r\n\t\targs[0] = \"InternalEvent:\" + key;\r\n\r\n\t\tif(this.debug === true || this.debug.includes(key)){\r\n\t\t\tconsole.log(...args);\r\n\t\t}\r\n\r\n\t\treturn this._chain(...arguments);\r\n\t}\r\n\r\n\t_debugConfirm(){\r\n\t\tvar args = Array.from(arguments),\r\n\t\tkey = args[0];\r\n\r\n\t\targs[0] = \"InternalEvent:\" + key;\r\n\r\n\t\tif(this.debug === true || this.debug.includes(key)){\r\n\t\t\tconsole.log(...args);\r\n\t\t}\r\n\r\n\t\treturn this._confirm(...arguments);\r\n\t}\r\n}","import Tabulator from '../Tabulator.js';\r\n\r\nclass TableRegistry {\r\n\r\n\tstatic register(table){\r\n\t\tTableRegistry.tables.push(table);\r\n\t}\r\n\r\n\tstatic deregister(table){\r\n\t\tvar index = TableRegistry.tables.indexOf(table);\r\n\r\n\t\tif(index > -1){\r\n\t\t\tTableRegistry.tables.splice(index, 1);\r\n\t\t}\r\n\t}\r\n\r\n\tstatic lookupTable(query, silent){\r\n\t\tvar results = [],\r\n\t\tmatches, match;\r\n\r\n\t\tif(typeof query === \"string\"){\r\n\t\t\tmatches = document.querySelectorAll(query);\r\n\r\n\t\t\tif(matches.length){\r\n\t\t\t\tfor(var i = 0; i < matches.length; i++){\r\n\t\t\t\t\tmatch = TableRegistry.matchElement(matches[i]);\r\n\r\n\t\t\t\t\tif(match){\r\n\t\t\t\t\t\tresults.push(match);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t}else if((typeof HTMLElement !== \"undefined\" && query instanceof HTMLElement) || query instanceof Tabulator){\r\n\t\t\tmatch = TableRegistry.matchElement(query);\r\n\r\n\t\t\tif(match){\r\n\t\t\t\tresults.push(match);\r\n\t\t\t}\r\n\t\t}else if(Array.isArray(query)){\r\n\t\t\tquery.forEach(function(item){\r\n\t\t\t\tresults = results.concat(TableRegistry.lookupTable(item));\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tif(!silent){\r\n\t\t\t\tconsole.warn(\"Table Connection Error - Invalid Selector\", query);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn results;\r\n\t}\r\n\r\n\tstatic matchElement(element){\r\n\t\treturn TableRegistry.tables.find(function(table){\r\n\t\t\treturn element instanceof Tabulator ? table === element : table.element === element;\r\n\t\t});\r\n\t}\r\n}\r\n\r\nTableRegistry.tables = [];\r\n\r\nexport default TableRegistry;","import CoreFeature from './CoreFeature.js';\r\n\r\nclass Module extends CoreFeature{\r\n\r\n\tconstructor(table, name){\r\n\t\tsuper(table);\r\n\r\n\t\tthis._handler = null;\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\t// setup module when table is initialized, to be overriden in module\r\n\t}\r\n\r\n\r\n\t///////////////////////////////////\r\n\t////// Options Registration ///////\r\n\t///////////////////////////////////\r\n\r\n\tregisterTableOption(key, value){\r\n\t\tthis.table.optionsList.register(key, value);\r\n\t}\r\n\r\n\tregisterColumnOption(key, value){\r\n\t\tthis.table.columnManager.optionsList.register(key, value);\r\n\t}\r\n\r\n\t///////////////////////////////////\r\n\t/// Public Function Registation ///\r\n\t///////////////////////////////////\r\n\r\n\tregisterTableFunction(name, func){\r\n\t\tif(typeof this.table[name] === \"undefined\"){\r\n\t\t\tthis.table[name] = func;\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Unable to bind table function, name already in use\", name)\r\n\t\t}\r\n\t}\r\n\r\n\tregisterComponentFunction(component, func, handler){\r\n\t\treturn this.table.componentFunctionBinder.bind(component, func, handler);\r\n\t}\r\n\r\n\t///////////////////////////////////\r\n\t////////// Data Pipeline //////////\r\n\t///////////////////////////////////\r\n\r\n\tregisterDataHandler(handler, priority){\r\n\t\tthis.table.rowManager.registerDataPipelineHandler(handler, priority)\r\n\t\tthis._handler = handler;\r\n\t}\r\n\r\n\tregisterDisplayHandler(handler, priority){\r\n\t\tthis.table.rowManager.registerDisplayPipelineHandler(handler, priority)\r\n\t\tthis._handler = handler;\r\n\t}\r\n\r\n\trefreshData(renderInPosition, handler){\r\n\t\tif(!handler){\r\n\t\t\thandler = this._handler;\r\n\t\t}\r\n\r\n\t\tif(handler){\r\n\t\t\tthis.table.rowManager.refreshActiveData(handler, false, renderInPosition);\r\n\t\t}\r\n\t}\r\n}\r\n\r\nexport default Module;","//resize columns to fit data they contain\r\nexport default function(columns){\r\n\tthis.table.columnManager.renderer.reinitializeColumnWidths(columns);\r\n\r\n\tif(this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)){\r\n\t\tthis.table.modules.responsiveLayout.update();\r\n\t}\r\n};","//resize columns to fit data they contain and stretch row to fill table, also used for fitDataTable\r\nexport default function(columns){\r\n\tcolumns.forEach(function(column){\r\n\t\tcolumn.reinitializeWidth();\r\n\t});\r\n\r\n\tif(this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)){\r\n\t\tthis.table.modules.responsiveLayout.update();\r\n\t}\r\n};","//resize columns to fit data the contain and stretch last column to fill table\r\nexport default function(columns){\r\n\tvar colsWidth = 0,\r\n\ttableWidth = this.table.rowManager.element.clientWidth,\r\n\tgap = 0,\r\n\tlastCol = false;\r\n\r\n\tcolumns.forEach((column, i) => {\r\n\t\tif(!column.widthFixed){\r\n\t\t\tcolumn.reinitializeWidth();\r\n\t\t}\r\n\r\n\t\tif(this.table.options.responsiveLayout ? column.modules.responsive.visible : column.visible){\r\n\t\t\tlastCol = column;\r\n\t\t}\r\n\r\n\t\tif(column.visible){\r\n\t\t\tcolsWidth += column.getWidth();\r\n\t\t}\r\n\t});\r\n\r\n\tif(lastCol){\r\n\t\tgap = tableWidth - colsWidth + lastCol.getWidth();\r\n\r\n\t\tif(this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)){\r\n\t\t\tlastCol.setWidth(0);\r\n\t\t\tthis.table.modules.responsiveLayout.update();\r\n\t\t}\r\n\r\n\t\tif(gap > 0){\r\n\t\t\tlastCol.setWidth(gap);\r\n\t\t}else{\r\n\t\t\tlastCol.reinitializeWidth();\r\n\t\t}\r\n\t}else{\r\n\t\tif(this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)){\r\n\t\t\tthis.table.modules.responsiveLayout.update();\r\n\t\t}\r\n\t}\r\n};","//resize columns to fit\r\nexport default function(columns){\r\n\tvar totalWidth = this.table.element.clientWidth; //table element width\r\n\tvar fixedWidth = 0; //total width of columns with a defined width\r\n\tvar flexWidth = 0; //total width available to flexible columns\r\n\tvar flexGrowUnits = 0; //total number of widthGrow blocks accross all columns\r\n\tvar flexColWidth = 0; //desired width of flexible columns\r\n\tvar flexColumns = []; //array of flexible width columns\r\n\tvar fixedShrinkColumns = []; //array of fixed width columns that can shrink\r\n\tvar flexShrinkUnits = 0; //total number of widthShrink blocks accross all columns\r\n\tvar overflowWidth = 0; //horizontal overflow width\r\n\tvar gapFill=0; //number of pixels to be added to final column to close and half pixel gaps\r\n\r\n\tfunction calcWidth(width){\r\n\t\tvar colWidth;\r\n\r\n\t\tif(typeof(width) == \"string\"){\r\n\t\t\tif(width.indexOf(\"%\") > -1){\r\n\t\t\t\tcolWidth = (totalWidth / 100) * parseInt(width);\r\n\t\t\t}else{\r\n\t\t\t\tcolWidth = parseInt(width);\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tcolWidth = width;\r\n\t\t}\r\n\r\n\t\treturn colWidth;\r\n\t}\r\n\r\n\t//ensure columns resize to take up the correct amount of space\r\n\tfunction scaleColumns(columns, freeSpace, colWidth, shrinkCols){\r\n\r\n\t\tvar oversizeCols = [],\r\n\t\toversizeSpace = 0,\r\n\t\tremainingSpace = 0,\r\n\t\tnextColWidth = 0,\r\n\t\tremainingFlexGrowUnits = flexGrowUnits,\r\n\t\tgap = 0,\r\n\t\tchangeUnits = 0,\r\n\t\tundersizeCols = [];\r\n\r\n\t\tfunction calcGrow(col){\r\n\t\t\treturn (colWidth * (col.column.definition.widthGrow || 1));\r\n\t\t}\r\n\r\n\t\tfunction calcShrink(col){\r\n\t\t\treturn (calcWidth(col.width) - (colWidth * (col.column.definition.widthShrink || 0)))\r\n\t\t}\r\n\r\n\t\tcolumns.forEach(function(col, i){\r\n\t\t\tvar width = shrinkCols ? calcShrink(col) : calcGrow(col);\r\n\t\t\tif(col.column.minWidth >= width){\r\n\t\t\t\toversizeCols.push(col);\r\n\t\t\t}else{\r\n\t\t\t\tif(col.column.maxWidth && col.column.maxWidth < width){\r\n\t\t\t\t\tcol.width = col.column.maxWidth;\r\n\t\t\t\t\tfreeSpace -= col.column.maxWidth;\r\n\r\n\t\t\t\t\tremainingFlexGrowUnits -= shrinkCols ? (col.column.definition.widthShrink || 1) : (col.column.definition.widthGrow || 1);\r\n\r\n\t\t\t\t\tif(remainingFlexGrowUnits){\r\n\t\t\t\t\t\tcolWidth = Math.floor(freeSpace/remainingFlexGrowUnits);\r\n\t\t\t\t\t}\r\n\t\t\t\t}else{\r\n\t\t\t\t\tundersizeCols.push(col);\r\n\t\t\t\t\tchangeUnits += shrinkCols ? (col.column.definition.widthShrink || 1) : (col.column.definition.widthGrow || 1);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tif(oversizeCols.length){\r\n\t\t\toversizeCols.forEach(function(col){\r\n\t\t\t\toversizeSpace += shrinkCols ? col.width - col.column.minWidth : col.column.minWidth;\r\n\t\t\t\tcol.width = col.column.minWidth;\r\n\t\t\t});\r\n\r\n\t\t\tremainingSpace = freeSpace - oversizeSpace;\r\n\r\n\t\t\tnextColWidth = changeUnits ? Math.floor(remainingSpace/changeUnits) : remainingSpace;\r\n\r\n\t\t\tgap = remainingSpace - (nextColWidth * changeUnits);\r\n\r\n\t\t\tgap += scaleColumns(undersizeCols, remainingSpace, nextColWidth, shrinkCols);\r\n\t\t}else{\r\n\t\t\tgap = changeUnits ? freeSpace - (Math.floor(freeSpace/changeUnits) * changeUnits) : freeSpace;\r\n\r\n\t\t\tundersizeCols.forEach(function(column){\r\n\t\t\t\tcolumn.width = shrinkCols ? calcShrink(column) : calcGrow(column);\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn gap;\r\n\t}\r\n\r\n\tif(this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)){\r\n\t\tthis.table.modules.responsiveLayout.update();\r\n\t}\r\n\r\n\t//adjust for vertical scrollbar if present\r\n\tif(this.table.rowManager.element.scrollHeight > this.table.rowManager.element.clientHeight){\r\n\t\ttotalWidth -= this.table.rowManager.element.offsetWidth - this.table.rowManager.element.clientWidth;\r\n\t}\r\n\r\n\tcolumns.forEach(function(column){\r\n\t\tvar width, minWidth, colWidth;\r\n\r\n\t\tif(column.visible){\r\n\r\n\t\t\twidth = column.definition.width;\r\n\t\t\tminWidth = parseInt(column.minWidth);\r\n\r\n\t\t\tif(width){\r\n\r\n\t\t\t\tcolWidth = calcWidth(width);\r\n\r\n\t\t\t\tfixedWidth += colWidth > minWidth ? colWidth : minWidth;\r\n\r\n\t\t\t\tif(column.definition.widthShrink){\r\n\t\t\t\t\tfixedShrinkColumns.push({\r\n\t\t\t\t\t\tcolumn:column,\r\n\t\t\t\t\t\twidth:colWidth > minWidth ? colWidth : minWidth\r\n\t\t\t\t\t});\r\n\t\t\t\t\tflexShrinkUnits += column.definition.widthShrink;\r\n\t\t\t\t}\r\n\r\n\t\t\t}else{\r\n\t\t\t\tflexColumns.push({\r\n\t\t\t\t\tcolumn:column,\r\n\t\t\t\t\twidth:0,\r\n\t\t\t\t});\r\n\t\t\t\tflexGrowUnits += column.definition.widthGrow || 1;\r\n\t\t\t}\r\n\t\t}\r\n\t});\r\n\r\n\t//calculate available space\r\n\tflexWidth = totalWidth - fixedWidth;\r\n\r\n\t//calculate correct column size\r\n\tflexColWidth = Math.floor(flexWidth / flexGrowUnits)\r\n\r\n\t//generate column widths\r\n\tvar gapFill = scaleColumns(flexColumns, flexWidth, flexColWidth, false);\r\n\r\n\t//increase width of last column to account for rounding errors\r\n\tif(flexColumns.length && gapFill > 0){\r\n\t\tflexColumns[flexColumns.length-1].width += + gapFill;\r\n\t}\r\n\r\n\t//caculate space for columns to be shrunk into\r\n\tflexColumns.forEach(function(col){\r\n\t\tflexWidth -= col.width;\r\n\t});\r\n\r\n\toverflowWidth = Math.abs(gapFill) + flexWidth;\r\n\r\n\t//shrink oversize columns if there is no available space\r\n\tif(overflowWidth > 0 && flexShrinkUnits){\r\n\t\tgapFill = scaleColumns(fixedShrinkColumns, overflowWidth, Math.floor(overflowWidth / flexShrinkUnits), true);\r\n\t}\r\n\r\n\t//decrease width of last column to account for rounding errors\r\n\tif(fixedShrinkColumns.length){\r\n\t\tfixedShrinkColumns[fixedShrinkColumns.length-1].width -= gapFill;\r\n\t}\r\n\r\n\tflexColumns.forEach(function(col){\r\n\t\tcol.column.setWidth(col.width);\r\n\t});\r\n\r\n\tfixedShrinkColumns.forEach(function(col){\r\n\t\tcol.column.setWidth(col.width);\r\n\t});\r\n};","import fitData from './modes/fitData.js';\r\nimport fitDataGeneral from './modes/fitDataGeneral.js';\r\nimport fitDataStretch from './modes/fitDataStretch.js';\r\nimport fitColumns from './modes/fitColumns.js';\r\n\r\nexport default {\r\n\tfitData:fitData,\r\n\tfitDataFill:fitDataGeneral,\r\n\tfitDataTable:fitDataGeneral,\r\n\tfitDataStretch:fitDataStretch,\r\n\tfitColumns:fitColumns ,\r\n};","import Module from '../../core/Module.js';\r\n\r\nimport defaultModes from './defaults/modes.js';\r\n\r\nclass Layout extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table, \"layout\");\r\n\r\n\t\tthis.mode = null;\r\n\r\n\t\tthis.registerTableOption(\"layout\", \"fitData\"); //layout type\r\n\t\tthis.registerTableOption(\"layoutColumnsOnNewData\", false); //update column widths on setData\r\n\r\n\t\tthis.registerColumnOption(\"widthGrow\");\r\n\t\tthis.registerColumnOption(\"widthShrink\");\r\n\t}\r\n\r\n\t//initialize layout system\r\n\tinitialize(){\r\n\t\tvar layout = this.table.options.layout;\r\n\r\n\t\tif(Layout.modes[layout]){\r\n\t\t\tthis.mode = layout;\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Layout Error - invalid mode set, defaulting to 'fitData' : \" + layout);\r\n\t\t\tthis.mode = 'fitData';\r\n\t\t}\r\n\r\n\t\tthis.table.element.setAttribute(\"tabulator-layout\", this.mode);\r\n\t}\r\n\r\n\tgetMode(){\r\n\t\treturn this.mode;\r\n\t}\r\n\r\n\t//trigger table layout\r\n\tlayout(){\r\n\t\tLayout.modes[this.mode].call(this, this.table.columnManager.columnsByIndex);\r\n\r\n\t\tthis.dispatch(\"layout-refreshed\")\r\n\t}\r\n}\r\n\r\nLayout.moduleName = \"layout\";\r\n\r\n//load defaults\r\nLayout.modes = defaultModes;\r\n\r\nexport default Layout;","export default {\r\n\t\"default\":{ //hold default locale text\r\n\t\t\"groups\":{\r\n\t\t\t\"item\":\"item\",\r\n\t\t\t\"items\":\"items\",\r\n\t\t},\r\n\t\t\"columns\":{\r\n\t\t},\r\n\t\t\"data\":{\r\n\t\t\t\"loading\":\"Loading\",\r\n\t\t\t\"error\":\"Error\",\r\n\t\t},\r\n\t\t\"pagination\":{\r\n\t\t\t\"page_size\":\"Page Size\",\r\n\t\t\t\"page_title\":\"Show Page\",\r\n\t\t\t\"first\":\"First\",\r\n\t\t\t\"first_title\":\"First Page\",\r\n\t\t\t\"last\":\"Last\",\r\n\t\t\t\"last_title\":\"Last Page\",\r\n\t\t\t\"prev\":\"Prev\",\r\n\t\t\t\"prev_title\":\"Prev Page\",\r\n\t\t\t\"next\":\"Next\",\r\n\t\t\t\"next_title\":\"Next Page\",\r\n\t\t\t\"all\":\"All\",\r\n\t\t},\r\n\t\t\"headerFilters\":{\r\n\t\t\t\"default\":\"filter column...\",\r\n\t\t\t\"columns\":{}\r\n\t\t}\r\n\t},\r\n};","import Module from '../../core/Module.js';\r\n\r\nimport Helpers from '../../core/tools/Helpers.js';\r\n\r\nimport defaultLangs from './defaults/langs.js';\r\n\r\nclass Localize extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.locale = \"default\"; //current locale\r\n\t\tthis.lang = false; //current language\r\n\t\tthis.bindings = {}; //update events to call when locale is changed\r\n\t\tthis.langList = {};\r\n\r\n\t\tthis.registerTableOption(\"locale\", false); //current system language\r\n\t\tthis.registerTableOption(\"langs\", {});\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tthis.langList = Helpers.deepClone(Localize.langs);\r\n\r\n\t\tif(this.table.options.columnDefaults.headerFilterPlaceholder !== false){\r\n\t\t\tthis.setHeaderFilterPlaceholder(this.table.options.columnDefaults.headerFilterPlaceholder);\r\n\t\t}\r\n\r\n\t\tfor(let locale in this.table.options.langs){\r\n\t\t\tthis.installLang(locale, this.table.options.langs[locale]);\r\n\t\t}\r\n\r\n\t\tthis.setLocale(this.table.options.locale);\r\n\r\n\t\tthis.registerTableFunction(\"setLocale\", this.setLocale.bind(this));\r\n\t\tthis.registerTableFunction(\"getLocale\", this.getLocale.bind(this));\r\n\t\tthis.registerTableFunction(\"getLang\", this.getLang.bind(this));\r\n\t}\r\n\r\n\t//set header placehoder\r\n\tsetHeaderFilterPlaceholder(placeholder){\r\n\t\tthis.langList.default.headerFilters.default = placeholder;\r\n\t}\r\n\r\n\t//set header filter placeholder by column\r\n\tsetHeaderFilterColumnPlaceholder(column, placeholder){\r\n\t\tthis.langList.default.headerFilters.columns[column] = placeholder;\r\n\r\n\t\tif(this.lang && !this.lang.headerFilters.columns[column]){\r\n\t\t\tthis.lang.headerFilters.columns[column] = placeholder;\r\n\t\t}\r\n\t}\r\n\r\n\t//setup a lang description object\r\n\tinstallLang(locale, lang){\r\n\t\tif(this.langList[locale]){\r\n\t\t\tthis._setLangProp(this.langList[locale], lang);\r\n\t\t}else{\r\n\t\t\tthis.langList[locale] = lang;\r\n\t\t}\r\n\t}\r\n\r\n\t_setLangProp(lang, values){\r\n\t\tfor(let key in values){\r\n\t\t\tif(lang[key] && typeof lang[key] == \"object\"){\r\n\t\t\t\tthis._setLangProp(lang[key], values[key])\r\n\t\t\t}else{\r\n\t\t\t\tlang[key] = values[key];\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//set current locale\r\n\tsetLocale(desiredLocale){\r\n\t\tdesiredLocale = desiredLocale || \"default\";\r\n\r\n\t\t//fill in any matching languge values\r\n\t\tfunction traverseLang(trans, path){\r\n\t\t\tfor(var prop in trans){\r\n\t\t\t\tif(typeof trans[prop] == \"object\"){\r\n\t\t\t\t\tif(!path[prop]){\r\n\t\t\t\t\t\tpath[prop] = {};\r\n\t\t\t\t\t}\r\n\t\t\t\t\ttraverseLang(trans[prop], path[prop]);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tpath[prop] = trans[prop];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//determing correct locale to load\r\n\t\tif(desiredLocale === true && navigator.language){\r\n\t\t\t//get local from system\r\n\t\t\tdesiredLocale = navigator.language.toLowerCase();\r\n\t\t}\r\n\r\n\t\tif(desiredLocale){\r\n\t\t\t//if locale is not set, check for matching top level locale else use default\r\n\t\t\tif(!this.langList[desiredLocale]){\r\n\t\t\t\tlet prefix = desiredLocale.split(\"-\")[0];\r\n\r\n\t\t\t\tif(this.langList[prefix]){\r\n\t\t\t\t\tconsole.warn(\"Localization Error - Exact matching locale not found, using closest match: \", desiredLocale, prefix);\r\n\t\t\t\t\tdesiredLocale = prefix;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.warn(\"Localization Error - Matching locale not found, using default: \", desiredLocale);\r\n\t\t\t\t\tdesiredLocale = \"default\";\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.locale = desiredLocale;\r\n\r\n\t\t//load default lang template\r\n\t\tthis.lang = Helpers.deepClone(this.langList.default || {});\r\n\r\n\t\tif(desiredLocale != \"default\"){\r\n\t\t\ttraverseLang(this.langList[desiredLocale], this.lang);\r\n\t\t}\r\n\r\n\t\tthis.dispatchExternal(\"localized\", this.locale, this.lang);\r\n\r\n\t\tthis._executeBindings();\r\n\t}\r\n\r\n\t//get current locale\r\n\tgetLocale(locale){\r\n\t\treturn this.locale;\r\n\t}\r\n\r\n\t//get lang object for given local or current if none provided\r\n\tgetLang(locale){\r\n\t\treturn locale ? this.langList[locale] : this.lang;\r\n\t}\r\n\r\n\t//get text for current locale\r\n\tgetText(path, value){\r\n\t\tvar path = value ? path + \"|\" + value : path,\r\n\t\tpathArray = path.split(\"|\"),\r\n\t\ttext = this._getLangElement(pathArray, this.locale);\r\n\r\n\t\t// if(text === false){\r\n\t\t// \tconsole.warn(\"Localization Error - Matching localized text not found for given path: \", path);\r\n\t\t// }\r\n\r\n\t\treturn text || \"\";\r\n\t}\r\n\r\n\t//traverse langs object and find localized copy\r\n\t_getLangElement(path, locale){\r\n\t\tvar root = this.lang;\r\n\r\n\t\tpath.forEach(function(level){\r\n\t\t\tvar rootPath;\r\n\r\n\t\t\tif(root){\r\n\t\t\t\trootPath = root[level];\r\n\r\n\t\t\t\tif(typeof rootPath != \"undefined\"){\r\n\t\t\t\t\troot = rootPath;\r\n\t\t\t\t}else{\r\n\t\t\t\t\troot = false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn root;\r\n\t}\r\n\r\n\t//set update binding\r\n\tbind(path, callback){\r\n\t\tif(!this.bindings[path]){\r\n\t\t\tthis.bindings[path] = [];\r\n\t\t}\r\n\r\n\t\tthis.bindings[path].push(callback);\r\n\r\n\t\tcallback(this.getText(path), this.lang);\r\n\t}\r\n\r\n\t//itterate through bindings and trigger updates\r\n\t_executeBindings(){\r\n\t\tfor(let path in this.bindings){\r\n\t\t\tthis.bindings[path].forEach((binding) => {\r\n\t\t\t\tbinding(this.getText(path), this.lang);\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n}\r\n\r\nLocalize.moduleName = \"localize\";\r\n\r\n//load defaults\r\nLocalize.langs = defaultLangs;\r\n\r\nexport default Localize;","import Module from '../../core/Module.js';\r\nimport TableRegistry from '../../core/tools/TableRegistry.js';\r\n\r\nclass Comms extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tthis.registerTableFunction(\"tableComms\", this.receive.bind(this));\r\n\t}\r\n\r\n\tgetConnections(selectors){\r\n\t\tvar connections = [],\r\n\t\tconnection;\r\n\r\n\t\tconnection = Tabulator.comms.lookupTable(selectors);\r\n\r\n\t\tconnection.forEach((con) =>{\r\n\t\t\tif(this.table !== con){\r\n\t\t\t\tconnections.push(con);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn connections;\r\n\t}\r\n\r\n\tsend(selectors, module, action, data){\r\n\t\tvar connections = this.getConnections(selectors);\r\n\r\n\t\tconnections.forEach((connection) => {\r\n\t\t\tconnection.tableComms(this.table.element, module, action, data);\r\n\t\t});\r\n\r\n\t\tif(!connections.length && selectors){\r\n\t\t\tconsole.warn(\"Table Connection Error - No tables matching selector found\", selectors);\r\n\t\t}\r\n\t}\r\n\r\n\treceive(table, module, action, data){\r\n\t\tif(this.table.modExists(module)){\r\n\t\t\treturn this.table.modules[module].commsReceived(table, action, data);\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Inter-table Comms Error - no such module:\", module);\r\n\t\t}\r\n\t}\r\n}\r\n\r\nComms.moduleName = \"comms\";\r\n\r\nexport default Comms;","import * as coreModules from '../modules/core.js';\r\nimport TableRegistry from './TableRegistry.js';\r\n\r\nexport default class ModuleBinder {\r\n\r\n\tconstructor(tabulator, modules){\r\n\t\tthis.bindStaticFuctionality(tabulator);\r\n\t\tthis.bindModules(tabulator, coreModules, true);\r\n\r\n\t\tif(modules){\r\n\t\t\tthis.bindModules(tabulator, modules);\r\n\t\t}\r\n\t}\r\n\r\n\tbindStaticFuctionality(tabulator){\r\n\t\ttabulator.moduleBindings = {};\r\n\r\n\t\ttabulator.extendModule = function(name, property, values){\r\n\t\t\tif(tabulator.moduleBindings[name]){\r\n\t\t\t\tvar source = tabulator.moduleBindings[name].prototype[property];\r\n\r\n\t\t\t\tif(source){\r\n\t\t\t\t\tif(typeof values == \"object\"){\r\n\t\t\t\t\t\tfor(let key in values){\r\n\t\t\t\t\t\t\tsource[key] = values[key];\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tconsole.warn(\"Module Error - Invalid value type, it must be an object\");\r\n\t\t\t\t\t}\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.warn(\"Module Error - property does not exist:\", property);\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Module Error - module does not exist:\", name);\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\ttabulator.registerModule = function(modules){\r\n\t\t\tif(!Array.isArray(modules)){\r\n\t\t\t\tmodules = [modules];\r\n\t\t\t}\r\n\r\n\t\t\tmodules.forEach((mod) => {\r\n\t\t\t\ttabulator.registerModuleBinding(mod)\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\ttabulator.registerModuleBinding = function(mod){\r\n\t\t\ttabulator.moduleBindings[mod.moduleName] = mod;\r\n\t\t};\r\n\r\n\t\ttabulator.findTable = function(query){\r\n\t\t\tvar results = TableRegistry.lookupTable(query, true);\r\n\t\t\treturn Array.isArray(results) && !results.length ? false : results;\r\n\t\t}\r\n\r\n\t\t//ensure that module are bound to instantiated function\r\n\t\ttabulator.prototype.bindModules = function(){\r\n\t\t\tthis.modules = {};\r\n\r\n\t\t\tfor(var name in tabulator.moduleBindings){\r\n\t\t\t\tlet mod = tabulator.moduleBindings[name];\r\n\r\n\t\t\t\tthis.modules[name] = new mod(this);\r\n\r\n\t\t\t\tif(mod.prototype.moduleCore){\r\n\t\t\t\t\tthis.modulesCore[name] = this.modules[name];\r\n\t\t\t\t}else{\r\n\t\t\t\t\tthis.modulesRegular[name] = this.modules[name];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tbindModules(tabulator, modules, core){\r\n\t\tvar mods = Object.values(modules);\r\n\r\n\t\tif(core){\r\n\t\t\tmods.forEach((mod) => {\r\n\t\t\t\tmod.prototype.moduleCore = true;\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\ttabulator.registerModule(mods);\r\n\t}\r\n}","'use strict';\r\n\r\nimport defaultOptions from './defaults/options.js';\r\n\r\nimport ColumnManager from './ColumnManager.js';\r\nimport RowManager from './RowManager.js';\r\nimport FooterManager from './FooterManager.js';\r\n\r\nimport InteractionMonitor from './tools/InteractionMonitor.js';\r\nimport ComponentFuctionBinder from './tools/ComponentFuctionBinder.js';\r\nimport DataLoader from './tools/dataLoader.js';\r\n\r\nimport ExternalEventBus from './tools/ExternalEventBus.js';\r\nimport InternalEventBus from './tools/InternalEventBus.js';\r\n\r\nimport TableRegistry from './tools/TableRegistry.js';\r\nimport ModuleBinder from './tools/ModuleBinder.js';\r\n\r\nimport OptionsList from './tools/OptionsList.js';\r\n\r\nclass Tabulator {\r\n\r\n\tconstructor(element, options){\r\n\r\n\t\tthis.options = {};\r\n\r\n\t\tthis.columnManager = null; // hold Column Manager\r\n\t\tthis.rowManager = null; //hold Row Manager\r\n\t\tthis.footerManager = null; //holder Footer Manager\r\n\t\tthis.vdomHoz = null; //holder horizontal virtual dom\r\n\t\tthis.externalEvents = null; //handle external event messaging\r\n\t\tthis.eventBus = null; //handle internal event messaging\r\n\t\tthis.interactionMonitor = false; //track user interaction\r\n\t\tthis.browser = \"\"; //hold current browser type\r\n\t\tthis.browserSlow = false; //handle reduced functionality for slower browsers\r\n\t\tthis.browserMobile = false; //check if running on moble, prevent resize cancelling edit on keyboard appearence\r\n\t\tthis.rtl = false; //check if the table is in RTL mode\r\n\r\n\t\tthis.componentFunctionBinder = new ComponentFuctionBinder(this); //bind component functions\r\n\t\tthis.dataLoader = false; //bind component functions\r\n\r\n\t\tthis.modules = {}; //hold all modules bound to this table\r\n\t\tthis.modulesCore = {}; //hold core modules bound to this table (for initialization purposes)\r\n\t\tthis.modulesRegular = {}; //hold regular modules bound to this table (for initialization purposes)\r\n\r\n\t\tthis.optionsList = new OptionsList(this, \"table constructor\");\r\n\r\n\t\tif(this.initializeElement(element)){\r\n\r\n\t\t\tthis.initialzeCoreSystems(options);\r\n\r\n\t\t\t//delay table creation to allow event bindings immediatly after the constructor\r\n\t\t\tsetTimeout(() => {\r\n\t\t\t\tthis._create();\r\n\t\t\t})\r\n\t\t}\r\n\r\n\t\tTableRegistry.register(this); //register table for inderdevice communication\r\n\t}\r\n\r\n\tinitializeElement(element){\r\n\t\tif(typeof HTMLElement !== \"undefined\" && element instanceof HTMLElement){\r\n\t\t\tthis.element = element;\r\n\t\t\treturn true;\r\n\t\t}else if(typeof element === \"string\"){\r\n\t\t\tthis.element = document.querySelector(element);\r\n\r\n\t\t\tif(this.element){\r\n\t\t\t\treturn true;\r\n\t\t\t}else{\r\n\t\t\t\tconsole.error(\"Tabulator Creation Error - no element found matching selector: \", element);\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tconsole.error(\"Tabulator Creation Error - Invalid element provided:\", element);\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\tinitialzeCoreSystems(options){\r\n\t\tthis.columnManager = new ColumnManager(this);\r\n\t\tthis.rowManager = new RowManager(this);\r\n\t\tthis.footerManager = new FooterManager(this);\r\n\t\tthis.dataLoader = new DataLoader(this);\r\n\r\n\t\tthis.bindModules();\r\n\r\n\t\tthis.options = this.optionsList.generate(Tabulator.defaultOptions, options)\r\n\r\n\t\tthis._clearObjectPointers();\r\n\r\n\t\tthis._mapDepricatedFunctionality();\r\n\r\n\t\tthis.externalEvents = new ExternalEventBus(this.options, this.options.debugEventsExternal);\r\n\t\tthis.eventBus = new InternalEventBus(this.options.debugEventsInternal);\r\n\r\n\t\tthis.interactionMonitor = new InteractionMonitor(this);\r\n\r\n\t\tthis.dataLoader.initialize();\r\n\t\tthis.columnManager.initialize();\r\n\t\tthis.rowManager.initialize();\r\n\t\tthis.footerManager.initialize();\r\n\t}\r\n\r\n\trtlCheck(){\r\n\t\tvar style = window.getComputedStyle(this.element);\r\n\r\n\t\tswitch(this.options.textDirection){\r\n\t\t\tcase\"auto\":\r\n\t\t\tif(style.direction !== \"rtl\"){\r\n\t\t\t\tbreak;\r\n\t\t\t};\r\n\r\n\t\t\tcase \"rtl\":\r\n\t\t\tthis.element.classList.add(\"tabulator-rtl\");\r\n\t\t\tthis.rtl = true;\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"ltr\":\r\n\t\t\tthis.element.classList.add(\"tabulator-ltr\");\r\n\r\n\t\t\tdefault:\r\n\t\t\tthis.rtl = false;\r\n\t\t}\r\n\t}\r\n\r\n\t//convert depricated functionality to new functions\r\n\t_mapDepricatedFunctionality(){\r\n\t\t//all previously deprecated functionality removed in the 5.0 release\r\n\t}\r\n\r\n\t_clearSelection(){\r\n\r\n\t\tthis.element.classList.add(\"tabulator-block-select\");\r\n\r\n\t\tif (window.getSelection) {\r\n\t\t if (window.getSelection().empty) { // Chrome\r\n\t\t \twindow.getSelection().empty();\r\n\t\t } else if (window.getSelection().removeAllRanges) { // Firefox\r\n\t\t \twindow.getSelection().removeAllRanges();\r\n\t\t }\r\n\t\t} else if (document.selection) { // IE?\r\n\t\t\tdocument.selection.empty();\r\n\t\t}\r\n\r\n\t\tthis.element.classList.remove(\"tabulator-block-select\");\r\n\t}\r\n\r\n\t//concreate table\r\n\t_create(){\r\n\t\tthis.externalEvents.dispatch(\"tableBuilding\");\r\n\t\tthis.eventBus.dispatch(\"table-building\");\r\n\r\n\t\tthis.rtlCheck();\r\n\r\n\t\tthis._buildElement();\r\n\r\n\t\tthis._loadInitialData();\r\n\t}\r\n\r\n\t//clear pointers to objects in default config object\r\n\t_clearObjectPointers(){\r\n\t\tthis.options.columns = this.options.columns.slice(0);\r\n\r\n\t\tif(this.options.data && !this.options.reactiveData){\r\n\t\t\tthis.options.data = this.options.data.slice(0);\r\n\t\t}\r\n\t}\r\n\r\n\t//build tabulator element\r\n\t_buildElement(){\r\n\t\tvar element = this.element,\r\n\t\toptions = this.options;\r\n\r\n\t\telement.classList.add(\"tabulator\");\r\n\t\telement.setAttribute(\"role\", \"grid\");\r\n\r\n\t\t//empty element\r\n\t\twhile(element.firstChild) element.removeChild(element.firstChild);\r\n\r\n\t\t//set table height\r\n\t\tif(options.height){\r\n\t\t\toptions.height = isNaN(options.height) ? options.height : options.height + \"px\";\r\n\t\t\telement.style.height = options.height;\r\n\t\t}\r\n\r\n\t\t//set table min height\r\n\t\tif(options.minHeight !== false){\r\n\t\t\toptions.minHeight = isNaN(options.minHeight) ? options.minHeight : options.minHeight + \"px\";\r\n\t\t\telement.style.minHeight = options.minHeight;\r\n\t\t}\r\n\r\n\t\t//set table maxHeight\r\n\t\tif(options.maxHeight !== false){\r\n\t\t\toptions.maxHeight = isNaN(options.maxHeight) ? options.maxHeight : options.maxHeight + \"px\";\r\n\t\t\telement.style.maxHeight = options.maxHeight;\r\n\t\t}\r\n\r\n\t\tthis.columnManager.initialize();\r\n\t\tthis.rowManager.initialize();\r\n\r\n\t\tthis._detectBrowser();\r\n\r\n\t\t//initialize core modules\r\n\t\tfor (let key in this.modulesCore){\r\n\t\t\tlet mod = this.modulesCore[key];\r\n\r\n\t\t\tmod.initialize();\r\n\t\t}\r\n\r\n\t\t//configure placeholder element\r\n\t\tif(typeof options.placeholder == \"string\"){\r\n\r\n\t\t\tvar el = document.createElement(\"div\");\r\n\t\t\tel.classList.add(\"tabulator-placeholder\");\r\n\r\n\t\t\tvar span = document.createElement(\"span\");\r\n\t\t\tspan.innerHTML = options.placeholder;\r\n\r\n\t\t\tel.appendChild(span);\r\n\r\n\t\t\toptions.placeholder = el;\r\n\t\t}\r\n\r\n\t\t//build table elements\r\n\t\telement.appendChild(this.columnManager.getElement());\r\n\t\telement.appendChild(this.rowManager.getElement());\r\n\r\n\t\tif(options.footerElement){\r\n\t\t\tthis.footerManager.activate();\r\n\t\t}\r\n\r\n\t\tif(options.autoColumns && this.options.data){\r\n\t\t\tthis.columnManager.generateColumnsFromRowData(this.options.data);\r\n\t\t}\r\n\r\n\t\t//initialize regular modules\r\n\t\tfor (let key in this.modulesRegular){\r\n\t\t\tlet mod = this.modulesRegular[key];\r\n\r\n\t\t\tmod.initialize();\r\n\t\t}\r\n\r\n\t\tthis.columnManager.setColumns(options.columns);\r\n\r\n\t\tthis.eventBus.dispatch(\"table-built\");\r\n\t\tthis.externalEvents.dispatch(\"tableBuilt\");\r\n\t}\r\n\r\n\t_loadInitialData(){\r\n\t\tthis.dataLoader.load(this.options.data);\r\n\t}\r\n\r\n\t//deconstructor\r\n\tdestroy(){\r\n\t\tvar element = this.element;\r\n\r\n\t\tTableRegistry.deregister(this); //deregister table from inderdevice communication\r\n\r\n\t\tthis.eventBus.dispatch(\"table-destroy\");\r\n\r\n\t\t//clear row data\r\n\t\tthis.rowManager.rows.forEach(function(row){\r\n\t\t\trow.wipe();\r\n\t\t});\r\n\r\n\t\tthis.rowManager.rows = [];\r\n\t\tthis.rowManager.activeRows = [];\r\n\t\tthis.rowManager.displayRows = [];\r\n\r\n\t\t//clear DOM\r\n\t\twhile(element.firstChild) element.removeChild(element.firstChild);\r\n\t\telement.classList.remove(\"tabulator\");\r\n\t}\r\n\r\n\t_detectBrowser(){\r\n\t\tvar ua = navigator.userAgent||navigator.vendor||window.opera;\r\n\r\n\t\tif(ua.indexOf(\"Trident\") > -1){\r\n\t\t\tthis.browser = \"ie\";\r\n\t\t\tthis.browserSlow = true;\r\n\t\t}else if(ua.indexOf(\"Edge\") > -1){\r\n\t\t\tthis.browser = \"edge\";\r\n\t\t\tthis.browserSlow = true;\r\n\t\t}else if(ua.indexOf(\"Firefox\") > -1){\r\n\t\t\tthis.browser = \"firefox\";\r\n\t\t\tthis.browserSlow = false;\r\n\t\t}else{\r\n\t\t\tthis.browser = \"other\";\r\n\t\t\tthis.browserSlow = false;\r\n\t\t}\r\n\r\n\t\tthis.browserMobile = /(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i.test(ua)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\\-(n|u)|c55\\/|capi|ccwa|cdm\\-|cell|chtm|cldc|cmd\\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\\-s|devi|dica|dmob|do(c|p)o|ds(12|\\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\\-|_)|g1 u|g560|gene|gf\\-5|g\\-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd\\-(m|p|t)|hei\\-|hi(pt|ta)|hp( i|ip)|hs\\-c|ht(c(\\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\\-(20|go|ma)|i230|iac( |\\-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc\\-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|\\-[a-w])|libw|lynx|m1\\-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m\\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\\-2|po(ck|rt|se)|prox|psio|pt\\-g|qa\\-a|qc(07|12|21|32|60|\\-[2-7]|i\\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\\-|oo|p\\-)|sdk\\/|se(c(\\-|0|1)|47|mc|nd|ri)|sgh\\-|shar|sie(\\-|m)|sk\\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\\-|v\\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\\-|tdg\\-|tel(i|m)|tim\\-|t\\-mo|to(pl|sh)|ts(70|m\\-|m3|m5)|tx\\-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\\-|your|zeto|zte\\-/i.test(ua.substr(0,4));\r\n\t}\r\n\r\n\t////////////////// Data Handling //////////////////\r\n\t//block table redrawing\r\n\tblockRedraw(){\r\n\t\treturn this.rowManager.blockRedraw();\r\n\t}\r\n\r\n\t//restore table redrawing\r\n\trestoreRedraw(){\r\n\t\treturn this.rowManager.restoreRedraw();\r\n\t}\r\n\r\n\t//local data from local file\r\n\tsetDataFromLocalFile(extensions){\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tvar input = document.createElement(\"input\");\r\n\t\t\tinput.type = \"file\";\r\n\t\t\tinput.accept = extensions || \".json,application/json\";\r\n\r\n\t\t\tinput.addEventListener(\"change\", (e) => {\r\n\t\t\t\tvar file = input.files[0],\r\n\t\t\t\treader = new FileReader(),\r\n\t\t\t\tdata;\r\n\r\n\t\t\t\treader.readAsText(file);\r\n\r\n\t\t\t\treader.onload = (e) => {\r\n\r\n\t\t\t\t\ttry {\r\n\t\t\t\t\t\tdata = JSON.parse(reader.result);\r\n\t\t\t\t\t} catch(e) {\r\n\t\t\t\t\t\tconsole.warn(\"File Load Error - File contents is invalid JSON\", e);\r\n\t\t\t\t\t\treject(e);\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tthis.setData(data)\r\n\t\t\t\t\t.then((data) => {\r\n\t\t\t\t\t\tresolve(data);\r\n\t\t\t\t\t})\r\n\t\t\t\t\t.catch((err) => {\r\n\t\t\t\t\t\tresolve(err);\r\n\t\t\t\t\t});\r\n\t\t\t\t};\r\n\r\n\t\t\t\treader.onerror = (e) => {\r\n\t\t\t\t\tconsole.warn(\"File Load Error - Unable to read file\");\r\n\t\t\t\t\treject();\r\n\t\t\t\t};\r\n\t\t\t});\r\n\r\n\t\t\tinput.click();\r\n\t\t});\r\n\t}\r\n\r\n\t//load data\r\n\tsetData(data, params, config){\r\n\t\treturn this.dataLoader.load(data, params, config, false);\r\n\t}\r\n\r\n\t//clear data\r\n\tclearData(){\r\n\t\tthis.dataLoader.blockActiveLoad();\r\n\t\tthis.rowManager.clearData();\r\n\t}\r\n\r\n\t//get table data array\r\n\tgetData(active){\r\n\t\treturn this.rowManager.getData(active);\r\n\t}\r\n\r\n\t//get table data array count\r\n\tgetDataCount(active){\r\n\t\treturn this.rowManager.getDataCount(active);\r\n\t}\r\n\r\n\t//replace data, keeping table in position with same sort\r\n\treplaceData(data, params, config){\r\n\t\treturn this.dataLoader.load(data, params, config, true, true);\r\n\t}\r\n\r\n\t//update table data\r\n\tupdateData(data){\r\n\t\tvar responses = 0;\r\n\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tthis.dataLoader.blockActiveLoad();\r\n\r\n\t\t\tif(typeof data === \"string\"){\r\n\t\t\t\tdata = JSON.parse(data);\r\n\t\t\t}\r\n\r\n\t\t\tif(data){\r\n\t\t\t\tdata.forEach((item) => {\r\n\t\t\t\t\tvar row = this.rowManager.findRow(item[this.options.index]);\r\n\r\n\t\t\t\t\tif(row){\r\n\t\t\t\t\t\tresponses++;\r\n\r\n\t\t\t\t\t\trow.updateData(item)\r\n\t\t\t\t\t\t.then(()=>{\r\n\t\t\t\t\t\t\tresponses--;\r\n\r\n\t\t\t\t\t\t\tif(!responses){\r\n\t\t\t\t\t\t\t\tresolve();\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Update Error - No data provided\");\r\n\t\t\t\treject(\"Update Error - No data provided\");\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\taddData(data, pos, index){\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tthis.dataLoader.blockActiveLoad();\r\n\r\n\t\t\tif(typeof data === \"string\"){\r\n\t\t\t\tdata = JSON.parse(data);\r\n\t\t\t}\r\n\r\n\t\t\tif(data){\r\n\t\t\t\tthis.rowManager.addRows(data, pos, index)\r\n\t\t\t\t.then((rows) => {\r\n\t\t\t\t\tvar output = [];\r\n\r\n\t\t\t\t\trows.forEach(function(row){\r\n\t\t\t\t\t\toutput.push(row.getComponent());\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\tresolve(output);\r\n\t\t\t\t});\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Update Error - No data provided\");\r\n\t\t\t\treject(\"Update Error - No data provided\");\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t//update table data\r\n\tupdateOrAddData(data){\r\n\t\tvar rows = [],\r\n\t\tresponses = 0;\r\n\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tthis.dataLoader.blockActiveLoad();\r\n\r\n\t\t\tif(typeof data === \"string\"){\r\n\t\t\t\tdata = JSON.parse(data);\r\n\t\t\t}\r\n\r\n\t\t\tif(data){\r\n\t\t\t\tdata.forEach((item) => {\r\n\t\t\t\t\tvar row = this.rowManager.findRow(item[this.options.index]);\r\n\r\n\t\t\t\t\tresponses++;\r\n\r\n\t\t\t\t\tif(row){\r\n\t\t\t\t\t\trow.updateData(item)\r\n\t\t\t\t\t\t.then(()=>{\r\n\t\t\t\t\t\t\tresponses--;\r\n\t\t\t\t\t\t\trows.push(row.getComponent());\r\n\r\n\t\t\t\t\t\t\tif(!responses){\r\n\t\t\t\t\t\t\t\tresolve(rows);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tthis.rowManager.addRows(item)\r\n\t\t\t\t\t\t.then((newRows)=>{\r\n\t\t\t\t\t\t\tresponses--;\r\n\t\t\t\t\t\t\trows.push(newRows[0].getComponent());\r\n\r\n\t\t\t\t\t\t\tif(!responses){\r\n\t\t\t\t\t\t\t\tresolve(rows);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Update Error - No data provided\");\r\n\t\t\t\treject(\"Update Error - No data provided\");\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t//get row object\r\n\tgetRow(index){\r\n\t\tvar row = this.rowManager.findRow(index);\r\n\r\n\t\tif(row){\r\n\t\t\treturn row.getComponent();\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Find Error - No matching row found:\", index);\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\t//get row object\r\n\tgetRowFromPosition(position, active){\r\n\t\tvar row = this.rowManager.getRowFromPosition(position, active);\r\n\r\n\t\tif(row){\r\n\t\t\treturn row.getComponent();\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Find Error - No matching row found:\", position);\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\t//delete row from table\r\n\tdeleteRow(index){\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tvar count = 0,\r\n\t\t\tsuccessCount = 0,\r\n\t\t\tfoundRows = [];\r\n\r\n\t\t\tfunction doneCheck(){\r\n\t\t\t\tcount++;\r\n\r\n\t\t\t\tif(count == index.length){\r\n\t\t\t\t\tif(successCount){\r\n\t\t\t\t\t\tthis.rowManager.reRenderInPosition();\r\n\t\t\t\t\t\tresolve();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif(!Array.isArray(index)){\r\n\t\t\t\tindex = [index];\r\n\t\t\t}\r\n\r\n\t\t\t//find matching rows\r\n\t\t\tindex.forEach((item) =>{\r\n\t\t\t\tvar row = this.rowManager.findRow(item, true);\r\n\r\n\t\t\t\tif(row){\r\n\t\t\t\t\tfoundRows.push(row);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.warn(\"Delete Error - No matching row found:\", item);\r\n\t\t\t\t\treject(\"Delete Error - No matching row found\")\r\n\t\t\t\t\tdoneCheck();\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\t//sort rows into correct order to ensure smooth delete from table\r\n\t\t\tfoundRows.sort((a, b) => {\r\n\t\t\t\treturn this.rowManager.rows.indexOf(a) > this.rowManager.rows.indexOf(b) ? 1 : -1;\r\n\t\t\t});\r\n\r\n\t\t\tfoundRows.forEach((row) =>{\r\n\t\t\t\trow.delete()\r\n\t\t\t\t.then(() => {\r\n\t\t\t\t\tsuccessCount++;\r\n\t\t\t\t\tdoneCheck();\r\n\t\t\t\t})\r\n\t\t\t\t.catch((err) => {\r\n\t\t\t\t\tdoneCheck();\r\n\t\t\t\t\treject(err);\r\n\t\t\t\t});\r\n\t\t\t});\r\n\t\t});\r\n\t}\r\n\r\n\t//add row to table\r\n\taddRow(data, pos, index){\r\n\t\tif(typeof data === \"string\"){\r\n\t\t\tdata = JSON.parse(data);\r\n\t\t}\r\n\r\n\t\treturn this.rowManager.addRows(data, pos, index)\r\n\t\t.then((rows)=>{\r\n\t\t\treturn rows[0].getComponent();\r\n\t\t});\r\n\t}\r\n\r\n\t//update a row if it exitsts otherwise create it\r\n\tupdateOrAddRow(index, data){\r\n\t\tvar row = this.rowManager.findRow(index);\r\n\r\n\t\tif(typeof data === \"string\"){\r\n\t\t\tdata = JSON.parse(data);\r\n\t\t}\r\n\r\n\t\tif(row){\r\n\t\t\treturn row.updateData(data)\r\n\t\t\t.then(()=>{\r\n\t\t\t\treturn row.getComponent();\r\n\t\t\t})\r\n\t\t}else{\r\n\t\t\treturn this.rowManager.addRows(data)\r\n\t\t\t.then((rows)=>{\r\n\t\t\t\treturn rows[0].getComponent();\r\n\t\t\t})\r\n\t\t}\r\n\t}\r\n\r\n\t//update row data\r\n\tupdateRow(index, data){\r\n\t\tvar row = this.rowManager.findRow(index);\r\n\r\n\t\tif(typeof data === \"string\"){\r\n\t\t\tdata = JSON.parse(data);\r\n\t\t}\r\n\r\n\t\tif(row){\r\n\t\t\treturn row.updateData(data)\r\n\t\t\t.then(()=>{\r\n\t\t\t\tresolve(row.getComponent());\r\n\t\t\t})\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Update Error - No matching row found:\", index);\r\n\t\t\treturn Promise.reject(\"Update Error - No matching row found\");\r\n\t\t}\r\n\t}\r\n\r\n\t//scroll to row in DOM\r\n\tscrollToRow(index, position, ifVisible){\r\n\t\tvar row = this.rowManager.findRow(index);\r\n\r\n\t\tif(row){\r\n\t\t\treturn this.rowManager.scrollToRow(row, position, ifVisible)\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Scroll Error - No matching row found:\", index);\r\n\t\t\treturn Promise.reject(\"Scroll Error - No matching row found\");\r\n\t\t}\r\n\t}\r\n\r\n\tmoveRow(from, to, after){\r\n\t\tvar fromRow = this.rowManager.findRow(from);\r\n\r\n\t\tif(fromRow){\r\n\t\t\tfromRow.moveToRow(to, after);\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Move Error - No matching row found:\", from);\r\n\t\t}\r\n\t}\r\n\r\n\tgetRows(active){\r\n\t\treturn this.rowManager.getComponents(active);\r\n\t}\r\n\r\n\t//get position of row in table\r\n\tgetRowPosition(index, active){\r\n\t\tvar row = this.rowManager.findRow(index);\r\n\r\n\t\tif(row){\r\n\t\t\treturn this.rowManager.getRowPosition(row, active);\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Position Error - No matching row found:\", index);\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\t/////////////// Column Functions ///////////////\r\n\tsetColumns(definition){\r\n\t\tthis.columnManager.setColumns(definition);\r\n\t}\r\n\r\n\tgetColumns(structured){\r\n\t\treturn this.columnManager.getComponents(structured);\r\n\t}\r\n\r\n\tgetColumn(field){\r\n\t\tvar col = this.columnManager.findColumn(field);\r\n\r\n\t\tif(col){\r\n\t\t\treturn col.getComponent();\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Find Error - No matching column found:\", field);\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\tgetColumnDefinitions(){\r\n\t\treturn this.columnManager.getDefinitionTree();\r\n\t}\r\n\r\n\tshowColumn(field){\r\n\t\tvar column = this.columnManager.findColumn(field);\r\n\r\n\t\tif(column){\r\n\t\t\tcolumn.show();\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Column Show Error - No matching column found:\", field);\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\thideColumn(field){\r\n\t\tvar column = this.columnManager.findColumn(field);\r\n\r\n\t\tif(column){\r\n\t\t\tcolumn.hide();\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Column Hide Error - No matching column found:\", field);\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\ttoggleColumn(field){\r\n\t\tvar column = this.columnManager.findColumn(field);\r\n\r\n\t\tif(column){\r\n\t\t\tif(column.visible){\r\n\t\t\t\tcolumn.hide();\r\n\t\t\t}else{\r\n\t\t\t\tcolumn.show();\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Column Visibility Toggle Error - No matching column found:\", field);\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\taddColumn(definition, before, field){\r\n\t\tvar column = this.columnManager.findColumn(field);\r\n\r\n\t\treturn this.columnManager.addColumn(definition, before, column)\r\n\t\t.then((column) => {\r\n\t\t\treturncolumn.getComponent();\r\n\t\t});\r\n\t}\r\n\r\n\tdeleteColumn(field){\r\n\t\tvar column = this.columnManager.findColumn(field);\r\n\r\n\t\tif(column){\r\n\t\t\treturn column.delete();\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Column Delete Error - No matching column found:\", field);\r\n\t\t\treturn Promise.reject();\r\n\t\t}\r\n\t}\r\n\r\n\tupdateColumnDefinition(field, definition){\r\n\t\tvar column = this.columnManager.findColumn(field);\r\n\r\n\t\tif(column){\r\n\t\t\treturn column.updateDefinition(definition)\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Column Update Error - No matching column found:\", field);\r\n\t\t\treturn Promise.reject();\r\n\t\t}\r\n\t}\r\n\r\n\tmoveColumn(from, to, after){\r\n\t\tvar fromColumn = this.columnManager.findColumn(from);\r\n\t\tvar toColumn = this.columnManager.findColumn(to);\r\n\r\n\t\tif(fromColumn){\r\n\t\t\tif(toColumn){\r\n\t\t\t\tthis.columnManager.moveColumn(fromColumn, toColumn, after)\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Move Error - No matching column found:\", toColumn);\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Move Error - No matching column found:\", from);\r\n\t\t}\r\n\t}\r\n\r\n\t//scroll to column in DOM\r\n\tscrollToColumn(field, position, ifVisible){\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tvar column = this.columnManager.findColumn(field);\r\n\r\n\t\t\tif(column){\r\n\t\t\t\treturn this.columnManager.scrollToColumn(column, position, ifVisible)\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Scroll Error - No matching column found:\", field);\r\n\t\t\t\treturn Promise.reject(\"Scroll Error - No matching column found\");\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t//////////// General Public Functions ////////////\r\n\t//redraw list without updating data\r\n\tredraw(force){\r\n\t\tthis.columnManager.redraw(force);\r\n\t\tthis.rowManager.redraw(force);\r\n\t}\r\n\r\n\tsetHeight(height){\r\n\t\tthis.options.height = isNaN(height) ? height : height + \"px\";\r\n\t\tthis.element.style.height = this.options.height;\r\n\t\tthis.rowManager.initializeRenderer();\r\n\t\tthis.rowManager.redraw();\r\n\t}\r\n\r\n\t//////////////////// Event Bus ///////////////////\r\n\r\n\ton(key, callback){\r\n\t\tthis.externalEvents.subscribe(key, callback);\r\n\t}\r\n\r\n\toff(key, callback){\r\n\t\tthis.externalEvents.unsubscribe(key, callback);\r\n\t}\r\n\r\n\tdispatchEvent(){\r\n\t\tvar args = Array.from(arguments),\r\n\t\tkey = args.shift();\r\n\r\n\t\tthis.externalEvents.dispatch(...arguments)\r\n\t}\r\n\r\n\t////////////// Extension Management //////////////\r\n\tmodExists(plugin, required){\r\n\t\tif(this.modules[plugin]){\r\n\t\t\treturn true;\r\n\t\t}else{\r\n\t\t\tif(required){\r\n\t\t\t\tconsole.error(\"Tabulator Module Not Installed: \" + plugin);\r\n\t\t\t}\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\tmodule(key){\r\n\t\tvar mod = this.modules[key];\r\n\r\n\t\tif(!mod){\r\n\t\t\tconsole.error(\"Tabulator module not installed: \" + key);\r\n\t\t}\r\n\r\n\t\treturn mod;\r\n\t}\r\n}\r\n\r\n//default setup options\r\nTabulator.defaultOptions = defaultOptions;\r\n\r\n//bind modules and static functionality\r\nnew ModuleBinder(Tabulator);\r\n\r\nexport default Tabulator;","export default {}","import Module from '../../core/Module.js';\r\nimport Helpers from '../../core/tools/Helpers.js';\r\n\r\nimport defautlAccessors from './defaults/accessors.js';\r\n\r\nclass Accessor extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.allowedTypes = [\"\", \"data\", \"download\", \"clipboard\", \"print\", \"htmlOutput\"] //list of accessor types\r\n\r\n\t\tthis.registerColumnOption(\"accessor\");\r\n\t\tthis.registerColumnOption(\"accessorParams\");\r\n\t\tthis.registerColumnOption(\"accessorData\");\r\n\t\tthis.registerColumnOption(\"accessorDataParams\");\r\n\t\tthis.registerColumnOption(\"accessorDownload\");\r\n\t\tthis.registerColumnOption(\"accessorDownloadParams\");\r\n\t\tthis.registerColumnOption(\"accessorClipboard\");\r\n\t\tthis.registerColumnOption(\"accessorClipboardParams\");\r\n\t\tthis.registerColumnOption(\"accessorPrint\");\r\n\t\tthis.registerColumnOption(\"accessorPrintParams\");\r\n\t\tthis.registerColumnOption(\"accessorHtmlOutput\");\r\n\t\tthis.registerColumnOption(\"accessorHtmlOutputParams\");\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tthis.subscribe(\"column-layout\", this.initializeColumn.bind(this));\r\n\t\tthis.subscribe(\"row-data-retrieve\", this.transformRow.bind(this));\r\n\t}\r\n\r\n\t//initialize column accessor\r\n\tinitializeColumn(column){\r\n\t\tvar match = false,\r\n\t\tconfig = {};\r\n\r\n\t\tthis.allowedTypes.forEach(function(type){\r\n\t\t\tvar key = \"accessor\" + (type.charAt(0).toUpperCase() + type.slice(1)),\r\n\t\t\taccessor;\r\n\r\n\t\t\tif(column.definition[key]){\r\n\t\t\t\taccessor = this.lookupAccessor(column.definition[key]);\r\n\r\n\t\t\t\tif(accessor){\r\n\t\t\t\t\tmatch = true;\r\n\r\n\t\t\t\t\tconfig[key] = {\r\n\t\t\t\t\t\taccessor:accessor,\r\n\t\t\t\t\t\tparams: column.definition[key + \"Params\"] || {},\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tif(match){\r\n\t\t\tcolumn.modules.accessor = config;\r\n\t\t}\r\n\t}\r\n\r\n\tlookupAccessor(value){\r\n\t\tvar accessor = false;\r\n\r\n\t\t//set column accessor\r\n\t\tswitch(typeof value){\r\n\t\t\tcase \"string\":\r\n\t\t\tif(Accessor.accessors[value]){\r\n\t\t\t\taccessor = Accessor.accessors[value]\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Accessor Error - No such accessor found, ignoring: \", value);\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"function\":\r\n\t\t\taccessor = value;\r\n\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\treturn accessor;\r\n\t}\r\n\r\n\t//apply accessor to row\r\n\ttransformRow(row, type){\r\n\t\tvar key = \"accessor\" + (type.charAt(0).toUpperCase() + type.slice(1)),\r\n\t\trowComponent = row.getComponent();\r\n\r\n\t\t//clone data object with deep copy to isolate internal data from returned result\r\n\t\tvar data = Helpers.deepClone(row.data || {});\r\n\r\n\t\tthis.table.columnManager.traverse(function(column){\r\n\t\t\tvar value, accessor, params, colCompnent;\r\n\r\n\t\t\tif(column.modules.accessor){\r\n\r\n\t\t\t\taccessor = column.modules.accessor[key] || column.modules.accessor.accessor || false;\r\n\r\n\t\t\t\tif(accessor){\r\n\t\t\t\t\tvalue = column.getFieldValue(data);\r\n\r\n\t\t\t\t\tif(value != \"undefined\"){\r\n\t\t\t\t\t\tcolCompnent = column.getComponent();\r\n\t\t\t\t\t\tparams = typeof accessor.params === \"function\" ? accessor.params(value, data, type, colCompnent, rowComponent) : accessor.params;\r\n\t\t\t\t\t\tcolumn.setFieldValue(data, accessor.accessor(value, data, type, params, colCompnent, rowComponent));\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn data;\r\n\t}\r\n}\r\n\r\n//load defaults\r\nAccessor.moduleName = \"accessor\";\r\nAccessor.accessors = defautlAccessors;\r\n\r\nexport default Accessor;","export default {\r\n\tmethod: \"GET\",\r\n};","function generateParamsList(data, prefix){\r\n\tvar output = [];\r\n\r\n\tprefix = prefix || \"\";\r\n\r\n\tif(Array.isArray(data)){\r\n\t\tdata.forEach((item, i) => {\r\n\t\t\toutput = output.concat(generateParamsList(item, prefix ? prefix + \"[\" + i + \"]\" : i));\r\n\t\t});\r\n\t}else if (typeof data === \"object\"){\r\n\t\tfor (var key in data){\r\n\t\t\toutput = output.concat(generateParamsList(data[key], prefix ? prefix + \"[\" + key + \"]\" : key));\r\n\t\t}\r\n\t}else{\r\n\t\toutput.push({key:prefix, value:data});\r\n\t}\r\n\r\n\treturn output;\r\n}\r\n\r\nfunction serializeParams(params){\r\n\tvar output = generateParamsList(params),\r\n\tencoded = [];\r\n\r\n\toutput.forEach(function(item){\r\n\t\tencoded.push(encodeURIComponent(item.key) + \"=\" + encodeURIComponent(item.value));\r\n\t});\r\n\r\n\treturn encoded.join(\"&\");\r\n}\r\n\r\nexport default function(url, config, params){\r\n\tif(url){\r\n\t\tif(params && Object.keys(params).length){\r\n\t\t\tif(!config.method || config.method.toLowerCase() == \"get\"){\r\n\t\t\t\tconfig.method = \"get\";\r\n\r\n\t\t\t\turl += (url.includes(\"?\") ? \"&\" : \"?\") + serializeParams(params);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\treturn url;\r\n};","export default function(url, config, params){\r\n\tvar contentType;\r\n\r\n\treturn new Promise((resolve, reject) => {\r\n\t\t//set url\r\n\t\turl = this.urlGenerator.call(this.table, url, config, params);\r\n\r\n\t\t//set body content if not GET request\r\n\t\tif(config.method.toUpperCase() != \"GET\"){\r\n\t\t\tcontentType = typeof this.table.options.ajaxContentType === \"object\" ? this.table.options.ajaxContentType : this.contentTypeFormatters[this.table.options.ajaxContentType];\r\n\t\t\tif(contentType){\r\n\r\n\t\t\t\tfor(var key in contentType.headers){\r\n\t\t\t\t\tif(!config.headers){\r\n\t\t\t\t\t\tconfig.headers = {};\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif(typeof config.headers[key] === \"undefined\"){\r\n\t\t\t\t\t\tconfig.headers[key] = contentType.headers[key];\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tconfig.body = contentType.body.call(this, url, config, params);\r\n\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Ajax Error - Invalid ajaxContentType value:\", this.table.options.ajaxContentType);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(url){\r\n\t\t\t//configure headers\r\n\t\t\tif(typeof config.headers === \"undefined\"){\r\n\t\t\t\tconfig.headers = {};\r\n\t\t\t}\r\n\r\n\t\t\tif(typeof config.headers.Accept === \"undefined\"){\r\n\t\t\t\tconfig.headers.Accept = \"application/json\";\r\n\t\t\t}\r\n\r\n\t\t\tif(typeof config.headers[\"X-Requested-With\"] === \"undefined\"){\r\n\t\t\t\tconfig.headers[\"X-Requested-With\"] = \"XMLHttpRequest\";\r\n\t\t\t}\r\n\r\n\t\t\tif(typeof config.mode === \"undefined\"){\r\n\t\t\t\tconfig.mode = \"cors\";\r\n\t\t\t}\r\n\r\n\t\t\tif(config.mode == \"cors\"){\r\n\r\n\t\t\t\tif(typeof config.headers[\"Access-Control-Allow-Origin\"] === \"undefined\"){\r\n\t\t\t\t\tconfig.headers[\"Access-Control-Allow-Origin\"] = window.location.origin;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(typeof config.credentials === \"undefined\"){\r\n\t\t\t\t\tconfig.credentials = 'same-origin';\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tif(typeof config.credentials === \"undefined\"){\r\n\t\t\t\t\tconfig.credentials = 'include';\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t//send request\r\n\t\t\tfetch(url, config)\r\n\t\t\t.then((response)=>{\r\n\t\t\t\tif(response.ok) {\r\n\t\t\t\t\tresponse.json()\r\n\t\t\t\t\t.then((data)=>{\r\n\t\t\t\t\t\tresolve(data);\r\n\t\t\t\t\t}).catch((error)=>{\r\n\t\t\t\t\t\treject(error);\r\n\t\t\t\t\t\tconsole.warn(\"Ajax Load Error - Invalid JSON returned\", error);\r\n\t\t\t\t\t});\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.error(\"Ajax Load Error - Connection Error: \" + response.status, response.statusText);\r\n\t\t\t\t\treject(response);\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t\t.catch((error)=>{\r\n\t\t\t\tconsole.error(\"Ajax Load Error - Connection Error: \", error);\r\n\t\t\t\treject(error);\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Ajax Load Error - No URL Set\");\r\n\t\t\tresolve([]);\r\n\t\t}\r\n\t});\r\n};","export default {\r\n\t\"json\":{\r\n\t\theaders:{\r\n\t\t\t'Content-Type': 'application/json',\r\n\t\t},\r\n\t\tbody:function(url, config, params){\r\n\t\t\treturn JSON.stringify(params);\r\n\t\t},\r\n\t},\r\n\t\"form\":{\r\n\t\theaders:{\r\n\t\t},\r\n\t\tbody:function(url, config, params){\r\n\t\t\tvar output = this.generateParamsList(params),\r\n\t\t\tform = new FormData();\r\n\r\n\t\t\toutput.forEach(function(item){\r\n\t\t\t\tform.append(item.key, item.value);\r\n\t\t\t});\r\n\r\n\t\t\treturn form;\r\n\t\t},\r\n\t},\r\n};","import Module from '../../core/Module.js';\r\n\r\nimport defaultConfig from './defaults/config.js';\r\nimport defaultURLGenerator from './defaults/urlGenerator.js';\r\nimport defaultLoaderPromise from './defaults/loaderPromise.js';\r\nimport defaultContentTypeFormatters from './defaults/contentTypeFormatters.js';\r\n\r\nclass Ajax extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.config = false; //hold config object for ajax request\r\n\t\tthis.url = \"\"; //request URL\r\n\t\tthis.urlGenerator = false;\r\n\t\tthis.params = false; //request parameters\r\n\r\n\t\tthis.loaderPromise = false;\r\n\r\n\t\tthis.registerTableOption(\"ajaxURL\", false); //url for ajax loading\r\n\t\tthis.registerTableOption(\"ajaxURLGenerator\", false);\r\n\t\tthis.registerTableOption(\"ajaxParams\", {}); //params for ajax loading\r\n\t\tthis.registerTableOption(\"ajaxConfig\", \"get\"); //ajax request type\r\n\t\tthis.registerTableOption(\"ajaxContentType\", \"form\"); //ajax request type\r\n\t\tthis.registerTableOption(\"ajaxRequestFunc\", false); //promise function\r\n\r\n\t\tthis.registerTableOption(\"ajaxRequesting\", function(){});\r\n\t\tthis.registerTableOption(\"ajaxResponse\", false);\r\n\r\n\t\tthis.contentTypeFormatters = Ajax.contentTypeFormatters;\r\n\t}\r\n\r\n\t//initialize setup options\r\n\tinitialize(){\r\n\t\tthis.loaderPromise = this.table.options.ajaxRequestFunc || Ajax.defaultLoaderPromise;\r\n\t\tthis.urlGenerator = this.table.options.ajaxURLGenerator || Ajax.defaultURLGenerator;\r\n\r\n\t\tif(this.table.options.ajaxParams){\r\n\t\t\tthis.setParams(this.table.options.ajaxParams);\r\n\t\t}\r\n\r\n\t\tif(this.table.options.ajaxConfig){\r\n\t\t\tthis.setConfig(this.table.options.ajaxConfig);\r\n\t\t}\r\n\r\n\t\tif(this.table.options.ajaxURL){\r\n\t\t\tthis.setUrl(this.table.options.ajaxURL);\r\n\t\t}\r\n\r\n\t\tthis.registerTableFunction(\"getAjaxUrl\", this.getUrl.bind(this));\r\n\r\n\t\tthis.subscribe(\"data-loading\", this.requestDataCheck.bind(this));\r\n\t\tthis.subscribe(\"data-load\", this.requestData.bind(this));\r\n\t}\r\n\r\n\r\n\trequestDataCheck(data, params, config, silent){\r\n\t\treturn !!((!data && this.url) || typeof data === \"string\");\r\n\t}\r\n\r\n\trequestData(data, params, config, silent, previousData){\r\n\t\tif(this.requestDataCheck(data)){\r\n\t\t\tif(data){\r\n\t\t\t\tthis.setUrl(data);\r\n\t\t\t}\r\n\r\n\t\t\tif(params){\r\n\t\t\t\tthis.setParams(params, true);\r\n\t\t\t}\r\n\r\n\t\t\tif(config){\r\n\t\t\t\tthis.setConfig(config);\r\n\t\t\t}\r\n\r\n\t\t\treturn this.sendRequest();\r\n\t\t}else{\r\n\t\t\treturn previousData;\r\n\t\t}\r\n\t}\r\n\r\n\t//set ajax params\r\n\tsetParams(params, update){\r\n\t\tif(update){\r\n\t\t\tthis.params = this.params || {};\r\n\r\n\t\t\tfor(let key in params){\r\n\t\t\t\tthis.params[key] = params[key];\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tthis.params = params;\r\n\t\t}\r\n\t}\r\n\r\n\tgetParams(){\r\n\t\treturn this.params || {};\r\n\t}\r\n\r\n\t//load config object\r\n\tsetConfig(config){\r\n\t\tthis._loadDefaultConfig();\r\n\r\n\t\tif(typeof config == \"string\"){\r\n\t\t\tthis.config.method = config;\r\n\t\t}else{\r\n\t\t\tfor(let key in config){\r\n\t\t\t\tthis.config[key] = config[key];\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//create config object from default\r\n\t_loadDefaultConfig(force){\r\n\t\tif(!this.config || force){\r\n\r\n\t\t\tthis.config = {};\r\n\r\n\t\t\t//load base config from defaults\r\n\t\t\tfor(let key in Ajax.defaultConfig){\r\n\t\t\t\tthis.config[key] = Ajax.defaultConfig[key];\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//set request url\r\n\tsetUrl(url){\r\n\t\tthis.url = url;\r\n\t}\r\n\r\n\t//get request url\r\n\tgetUrl(){\r\n\t\treturn this.url;\r\n\t}\r\n\r\n\t//send ajax request\r\n\tsendRequest(silent){\r\n\t\tvar url = this.url,\r\n\t\tesc, query;\r\n\r\n\t\tthis._loadDefaultConfig();\r\n\r\n\t\tif(this.table.options.ajaxRequesting.call(this.table, this.url, this.params) !== false){\r\n\t\t\treturn this.loaderPromise(url, this.config, this.params)\r\n\t\t\t.then((data)=>{\r\n\t\t\t\tif(this.table.options.ajaxResponse){\r\n\t\t\t\t\tdata = this.table.options.ajaxResponse.call(this.table, this.url, this.params, data);\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn data;\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\treturn Promise.reject();\r\n\t\t}\r\n\t}\r\n}\r\n\r\nAjax.moduleName = \"ajax\";\r\n\r\n//load defaults\r\nAjax.defaultConfig = defaultConfig;\r\nAjax.defaultURLGenerator = defaultURLGenerator;\r\nAjax.defaultLoaderPromise = defaultLoaderPromise;\r\nAjax.contentTypeFormatters = defaultContentTypeFormatters;\r\n\r\nexport default Ajax;","export default {\r\n\treplace:function(rows){\r\n\t\treturn this.table.setData(rows);\r\n\t},\r\n\tupdate:function(rows){\r\n\t\treturn this.table.updateOrAddData(rows);\r\n\t},\r\n\tinsert:function(rows){\r\n\t\treturn this.table.addData(rows);\r\n\t},\r\n};","export default {\r\n\ttable:function(clipboard){\r\n\t\tvar data = [],\r\n\t\tsuccess = false,\r\n\t\theaderFindSuccess = true,\r\n\t\tcolumns = this.table.columnManager.columns,\r\n\t\tcolumnMap = [],\r\n\t\trows = [];\r\n\r\n\t\t//get data from clipboard into array of columns and rows.\r\n\t\tclipboard = clipboard.split(\"\\n\");\r\n\r\n\t\tclipboard.forEach(function(row){\r\n\t\t\tdata.push(row.split(\"\\t\"));\r\n\t\t});\r\n\r\n\t\tif(data.length && !(data.length === 1 && data[0].length < 2)){\r\n\t\t\tsuccess = true;\r\n\r\n\t\t\t//check if headers are present by title\r\n\t\t\tdata[0].forEach(function(value){\r\n\t\t\t\tvar column = columns.find(function(column){\r\n\t\t\t\t\treturn value && column.definition.title && value.trim() && column.definition.title.trim() === value.trim();\r\n\t\t\t\t});\r\n\r\n\t\t\t\tif(column){\r\n\t\t\t\t\tcolumnMap.push(column);\r\n\t\t\t\t}else{\r\n\t\t\t\t\theaderFindSuccess = false;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\t//check if column headers are present by field\r\n\t\t\tif(!headerFindSuccess){\r\n\t\t\t\theaderFindSuccess = true;\r\n\t\t\t\tcolumnMap = [];\r\n\r\n\t\t\t\tdata[0].forEach(function(value){\r\n\t\t\t\t\tvar column = columns.find(function(column){\r\n\t\t\t\t\t\treturn value && column.field && value.trim() && column.field.trim() === value.trim();\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\tif(column){\r\n\t\t\t\t\t\tcolumnMap.push(column);\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\theaderFindSuccess = false;\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\tif(!headerFindSuccess){\r\n\t\t\t\t\tcolumnMap = this.table.columnManager.columnsByIndex;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t//remove header row if found\r\n\t\t\tif(headerFindSuccess){\r\n\t\t\t\tdata.shift();\r\n\t\t\t}\r\n\r\n\t\t\tdata.forEach(function(item){\r\n\t\t\t\tvar row = {};\r\n\r\n\t\t\t\titem.forEach(function(value, i){\r\n\t\t\t\t\tif(columnMap[i]){\r\n\t\t\t\t\t\trow[columnMap[i].field] = value;\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\trows.push(row);\r\n\t\t\t});\r\n\r\n\t\t\treturn rows;\r\n\t\t}else{\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n};","import Module from '../../core/Module.js';\r\n\r\nimport defaultPasteActions from './defaults/pasteActions.js';\r\nimport defaultPasteParsers from './defaults/pasteParsers.js';\r\n\r\nclass Clipboard extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.mode = true;\r\n\t\tthis.pasteParser = function(){};\r\n\t\tthis.pasteAction = function(){};\r\n\t\tthis.customSelection = false;\r\n\t\tthis.rowRange = false;\r\n\t\tthis.blocked = true; //block copy actions not originating from this command\r\n\r\n\t\tthis.registerTableOption(\"clipboard\", false); //enable clipboard\r\n\t\tthis.registerTableOption(\"clipboardCopyStyled\", true); //formatted table data\r\n\t\tthis.registerTableOption(\"clipboardCopyConfig\", false); //clipboard config\r\n\t\tthis.registerTableOption(\"clipboardCopyFormatter\", false); //DEPRICATED - REMOVE in 5.0\r\n\t\tthis.registerTableOption(\"clipboardCopyRowRange\", \"active\"); //restrict clipboard to visible rows only\r\n\t\tthis.registerTableOption(\"clipboardPasteParser\", \"table\"); //convert pasted clipboard data to rows\r\n\t\tthis.registerTableOption(\"clipboardPasteAction\", \"insert\"); //how to insert pasted data into the table\r\n\r\n\t\tthis.registerColumnOption(\"clipboard\");\r\n\t\tthis.registerColumnOption(\"titleClipboard\");\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tthis.mode = this.table.options.clipboard;\r\n\r\n\t\tthis.rowRange = this.table.options.clipboardCopyRowRange;\r\n\r\n\t\tif(this.mode === true || this.mode === \"copy\"){\r\n\t\t\tthis.table.element.addEventListener(\"copy\", (e) => {\r\n\t\t\t\tvar plain, html, list;\r\n\r\n\t\t\t\tif(!this.blocked){\r\n\t\t\t\t\te.preventDefault();\r\n\r\n\t\t\t\t\tif(this.customSelection){\r\n\t\t\t\t\t\tplain = this.customSelection;\r\n\r\n\t\t\t\t\t\tif(this.table.options.clipboardCopyFormatter){\r\n\t\t\t\t\t\t\tplain = this.table.options.clipboardCopyFormatter(\"plain\", plain);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}else{\r\n\r\n\t\t\t\t\t\tvar list = this.table.modules.export.generateExportList(this.table.options.clipboardCopyConfig, this.table.options.clipboardCopyStyled, this.rowRange, \"clipboard\");\r\n\r\n\t\t\t\t\t\thtml = this.table.modules.export.genereateHTMLTable(list);\r\n\t\t\t\t\t\tplain = html ? this.generatePlainContent(list) : \"\";\r\n\r\n\t\t\t\t\t\tif(this.table.options.clipboardCopyFormatter){\r\n\t\t\t\t\t\t\tplain = this.table.options.clipboardCopyFormatter(\"plain\", plain);\r\n\t\t\t\t\t\t\thtml = this.table.options.clipboardCopyFormatter(\"html\", html);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (window.clipboardData && window.clipboardData.setData) {\r\n\t\t\t\t\t\twindow.clipboardData.setData('Text', plain);\r\n\t\t\t\t\t} else if (e.clipboardData && e.clipboardData.setData) {\r\n\t\t\t\t\t\te.clipboardData.setData('text/plain', plain);\r\n\t\t\t\t\t\tif(html){\r\n\t\t\t\t\t\t\te.clipboardData.setData('text/html', html);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} else if (e.originalEvent && e.originalEvent.clipboardData.setData) {\r\n\t\t\t\t\t\te.originalEvent.clipboardData.setData('text/plain', plain);\r\n\t\t\t\t\t\tif(html){\r\n\t\t\t\t\t\t\te.originalEvent.clipboardData.setData('text/html', html);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tthis.dispatchExternal(\"clipboardCopied\", plain, html);\r\n\r\n\t\t\t\t\tthis.reset();\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif(this.mode === true || this.mode === \"paste\"){\r\n\t\t\tthis.table.element.addEventListener(\"paste\", (e) => {\r\n\t\t\t\tthis.paste(e);\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tthis.setPasteParser(this.table.options.clipboardPasteParser);\r\n\t\tthis.setPasteAction(this.table.options.clipboardPasteAction);\r\n\r\n\t\tthis.registerTableFunction(\"copyToClipboard\", this.copy.bind(this));\r\n\t}\r\n\r\n\treset(){\r\n\t\tthis.blocked = true;\r\n\t\tthis.customSelection = false;\r\n\t}\r\n\r\n\tgeneratePlainContent (list) {\r\n\t\tvar output = [];\r\n\r\n\t\tlist.forEach((row) => {\r\n\t\t\tvar rowData = [];\r\n\r\n\t\t\trow.columns.forEach((col) => {\r\n\t\t\t\tvar value = \"\";\r\n\r\n\t\t\t\tif(col){\r\n\r\n\t\t\t\t\tif(row.type === \"group\"){\r\n\t\t\t\t\t\tcol.value = col.component.getKey();\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif(col.value === null){\r\n\t\t\t\t\t\tvalue = \"\";\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tswitch(typeof col.value){\r\n\t\t\t\t\t\t\tcase \"object\":\r\n\t\t\t\t\t\t\tvalue = JSON.stringify(col.value);\r\n\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\t\tcase \"undefined\":\r\n\t\t\t\t\t\t\tvalue = \"\";\r\n\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\t\tdefault:\r\n\t\t\t\t\t\t\tvalue = col.value;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\trowData.push(value);\r\n\t\t\t});\r\n\r\n\t\t\toutput.push(rowData.join(\"\\t\"));\r\n\t\t});\r\n\r\n\t\treturn output.join(\"\\n\");\r\n\t}\r\n\r\n\tcopy (range, internal) {\r\n\t\tvar range, sel, textRange;\r\n\t\tthis.blocked = false;\r\n\t\tthis.customSelection = false;\r\n\r\n\t\tif (this.mode === true || this.mode === \"copy\") {\r\n\r\n\t\t\tthis.rowRange = range || this.table.options.clipboardCopyRowRange;\r\n\r\n\t\t\tif (typeof window.getSelection != \"undefined\" && typeof document.createRange != \"undefined\") {\r\n\t\t\t\trange = document.createRange();\r\n\t\t\t\trange.selectNodeContents(this.table.element);\r\n\t\t\t\tsel = window.getSelection();\r\n\r\n\t\t\t\tif (sel.toString() && internal) {\r\n\t\t\t\t\tthis.customSelection = sel.toString();\r\n\t\t\t\t}\r\n\r\n\t\t\t\tsel.removeAllRanges();\r\n\t\t\t\tsel.addRange(range);\r\n\t\t\t} else if (typeof document.selection != \"undefined\" && typeof document.body.createTextRange != \"undefined\") {\r\n\t\t\t\ttextRange = document.body.createTextRange();\r\n\t\t\t\ttextRange.moveToElementText(this.table.element);\r\n\t\t\t\ttextRange.select();\r\n\t\t\t}\r\n\r\n\t\t\tdocument.execCommand('copy');\r\n\r\n\t\t\tif (sel) {\r\n\t\t\t\tsel.removeAllRanges();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//PASTE EVENT HANDLING\r\n\tsetPasteAction(action){\r\n\r\n\t\tswitch(typeof action){\r\n\t\t\tcase \"string\":\r\n\t\t\tthis.pasteAction = Clipboard.pasteActions[action];\r\n\r\n\t\t\tif(!this.pasteAction){\r\n\t\t\t\tconsole.warn(\"Clipboard Error - No such paste action found:\", action);\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"function\":\r\n\t\t\tthis.pasteAction = action;\r\n\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\tsetPasteParser(parser){\r\n\t\tswitch(typeof parser){\r\n\t\t\tcase \"string\":\r\n\t\t\tthis.pasteParser = Clipboard.pasteParsers[parser];\r\n\r\n\t\t\tif(!this.pasteParser){\r\n\t\t\t\tconsole.warn(\"Clipboard Error - No such paste parser found:\", parser);\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"function\":\r\n\t\t\tthis.pasteParser = parser;\r\n\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\tpaste(e){\r\n\t\tvar data, rowData, rows;\r\n\r\n\t\tif(this.checkPaseOrigin(e)){\r\n\r\n\t\t\tdata = this.getPasteData(e);\r\n\r\n\t\t\trowData = this.pasteParser.call(this, data);\r\n\r\n\t\t\tif(rowData){\r\n\t\t\t\te.preventDefault();\r\n\r\n\t\t\t\tif(this.table.modExists(\"mutator\")){\r\n\t\t\t\t\trowData = this.mutateData(rowData);\r\n\t\t\t\t}\r\n\r\n\t\t\t\trows = this.pasteAction.call(this, rowData);\r\n\r\n\t\t\t\tthis.dispatchExternal(\"clipboardPasted\", data, rowData, rows);\r\n\t\t\t}else{\r\n\t\t\t\tthis.dispatchExternal(\"clipboardPasteError\", data);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tmutateData(data){\r\n\t\tvar output = [];\r\n\r\n\t\tif(Array.isArray(data)){\r\n\t\t\tdata.forEach((row) => {\r\n\t\t\t\toutput.push(this.table.modules.mutator.transformRow(row, \"clipboard\"));\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\toutput = data;\r\n\t\t}\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\r\n\tcheckPaseOrigin(e){\r\n\t\tvar valid = true;\r\n\r\n\t\tif(e.target.tagName != \"DIV\" || this.table.modules.edit.currentCell){\r\n\t\t\tvalid = false;\r\n\t\t}\r\n\r\n\t\treturn valid;\r\n\t}\r\n\r\n\tgetPasteData(e){\r\n\t\tvar data;\r\n\r\n\t\tif (window.clipboardData && window.clipboardData.getData) {\r\n\t\t\tdata = window.clipboardData.getData('Text');\r\n\t\t} else if (e.clipboardData && e.clipboardData.getData) {\r\n\t\t\tdata = e.clipboardData.getData('text/plain');\r\n\t\t} else if (e.originalEvent && e.originalEvent.clipboardData.getData) {\r\n\t\t\tdata = e.originalEvent.clipboardData.getData('text/plain');\r\n\t\t}\r\n\r\n\t\treturn data;\r\n\t}\r\n}\r\n\r\nClipboard.moduleName = \"clipboard\";\r\n\r\n//load defaults\r\nClipboard.pasteActions = defaultPasteActions;\r\nClipboard.pasteParsers = defaultPasteParsers;\r\n\r\nexport default Clipboard;","class CalcComponent{\r\n\tconstructor (row){\r\n\t\tthis._row = row;\r\n\r\n\t\treturn new Proxy(this, {\r\n\t\t\tget: function(target, name, receiver) {\r\n\t\t\t\tif (typeof target[name] !== \"undefined\") {\r\n\t\t\t\t\treturn target[name];\r\n\t\t\t\t}else{\r\n\t\t\t\t\treturn target._row.table.componentFunctionBinder.handle(\"row\", target._row, name)\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t})\r\n\t}\r\n\r\n\tgetData(transform){\r\n\t\treturn this._row.getData(transform);\r\n\t}\r\n\r\n\tgetElement(){\r\n\t\treturn this._row.getElement();\r\n\t}\r\n\r\n\tgetTable(){\r\n\t\treturn this._row.table;\r\n\t}\r\n\r\n\tgetCells(){\r\n\t\tvar cells = [];\r\n\r\n\t\tthis._row.getCells().forEach(function(cell){\r\n\t\t\tcells.push(cell.getComponent());\r\n\t\t});\r\n\r\n\t\treturn cells;\r\n\t}\r\n\r\n\tgetCell(column){\r\n\t\tvar cell = this._row.getCell(column);\r\n\t\treturn cell ? cell.getComponent() : false;\r\n\t}\r\n\r\n\t_getSelf(){\r\n\t\treturn this._row;\r\n\t}\r\n}\r\n\r\nexport default CalcComponent;","export default {\r\n\t\"avg\":function(values, data, calcParams){\r\n\t\tvar output = 0,\r\n\t\tprecision = typeof calcParams.precision !== \"undefined\" ? calcParams.precision : 2\r\n\r\n\t\tif(values.length){\r\n\t\t\toutput = values.reduce(function(sum, value){\r\n\t\t\t\treturn Number(sum) + Number(value);\r\n\t\t\t});\r\n\r\n\t\t\toutput = output / values.length;\r\n\r\n\t\t\toutput = precision !== false ? output.toFixed(precision) : output;\r\n\t\t}\r\n\r\n\t\treturn parseFloat(output).toString();\r\n\t},\r\n\t\"max\":function(values, data, calcParams){\r\n\t\tvar output = null,\r\n\t\tprecision = typeof calcParams.precision !== \"undefined\" ? calcParams.precision : false;\r\n\r\n\t\tvalues.forEach(function(value){\r\n\r\n\t\t\tvalue = Number(value);\r\n\r\n\t\t\tif(value > output || output === null){\r\n\t\t\t\toutput = value;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn output !== null ? (precision !== false ? output.toFixed(precision) : output) : \"\";\r\n\t},\r\n\t\"min\":function(values, data, calcParams){\r\n\t\tvar output = null,\r\n\t\tprecision = typeof calcParams.precision !== \"undefined\" ? calcParams.precision : false;\r\n\r\n\t\tvalues.forEach(function(value){\r\n\r\n\t\t\tvalue = Number(value);\r\n\r\n\t\t\tif(value < output || output === null){\r\n\t\t\t\toutput = value;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn output !== null ? (precision !== false ? output.toFixed(precision) : output) : \"\";\r\n\t},\r\n\t\"sum\":function(values, data, calcParams){\r\n\t\tvar output = 0,\r\n\t\tprecision = typeof calcParams.precision !== \"undefined\" ? calcParams.precision : false;\r\n\r\n\t\tif(values.length){\r\n\t\t\tvalues.forEach(function(value){\r\n\t\t\t\tvalue = Number(value);\r\n\r\n\t\t\t\toutput += !isNaN(value) ? Number(value) : 0;\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn precision !== false ? output.toFixed(precision) : output;\r\n\t},\r\n\t\"concat\":function(values, data, calcParams){\r\n\t\tvar output = 0;\r\n\r\n\t\tif(values.length){\r\n\t\t\toutput = values.reduce(function(sum, value){\r\n\t\t\t\treturn String(sum) + String(value);\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn output;\r\n\t},\r\n\t\"count\":function(values, data, calcParams){\r\n\t\tvar output = 0;\r\n\r\n\t\tif(values.length){\r\n\t\t\tvalues.forEach(function(value){\r\n\t\t\t\tif(value){\r\n\t\t\t\t\toutput ++;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn output;\r\n\t},\r\n};","import Module from '../../core/Module.js';\r\n\r\nimport CalcComponent from './CalcComponent.js';\r\n\r\nimport Cell from '../../core/cell/Cell.js';\r\nimport Column from '../../core/column/Column.js';\r\nimport Row from '../../core/row/Row.js';\r\n\r\nimport defaultCalculations from './defaults/calculations.js';\r\n\r\nclass ColumnCalcs extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.topCalcs = [];\r\n\t\tthis.botCalcs = [];\r\n\t\tthis.genColumn = false;\r\n\t\tthis.topElement = this.createElement();\r\n\t\tthis.botElement = this.createElement();\r\n\t\tthis.topRow = false;\r\n\t\tthis.botRow = false;\r\n\t\tthis.topInitialized = false;\r\n\t\tthis.botInitialized = false;\r\n\r\n\t\tthis.registerTableOption(\"columnCalcs\", true);\r\n\r\n\t\tthis.registerColumnOption(\"topCalc\");\r\n\t\tthis.registerColumnOption(\"topCalcParams\");\r\n\t\tthis.registerColumnOption(\"topCalcFormatter\");\r\n\t\tthis.registerColumnOption(\"topCalcFormatterParams\");\r\n\t\tthis.registerColumnOption(\"bottomCalc\");\r\n\t\tthis.registerColumnOption(\"bottomCalcParams\");\r\n\t\tthis.registerColumnOption(\"bottomCalcFormatter\");\r\n\t\tthis.registerColumnOption(\"bottomCalcFormatterParams\");\r\n\t}\r\n\r\n\tcreateElement (){\r\n\t\tvar el = document.createElement(\"div\");\r\n\t\tel.classList.add(\"tabulator-calcs-holder\");\r\n\t\treturn el;\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tthis.genColumn = new Column({field:\"value\"}, this);\r\n\r\n\t\tthis.subscribe(\"cell-value-changed\", this.cellValueChanged.bind(this));\r\n\t\tthis.subscribe(\"column-init\", this.initializeColumnCheck.bind(this));\r\n\t\tthis.subscribe(\"row-deleted\", this.rowsUpdated.bind(this));\r\n\t\tthis.subscribe(\"scroll-horizontal\", this.scrollHorizontal.bind(this));\r\n\t\tthis.subscribe(\"row-added\", this.rowsUpdated.bind(this));\r\n\t\tthis.subscribe(\"column-moved\", this.recalcActiveRows.bind(this));\r\n\t\tthis.subscribe(\"column-add\", this.recalcActiveRows.bind(this));\r\n\t\tthis.subscribe(\"data-refeshed\", this.recalcActiveRows.bind(this));\r\n\t\tthis.subscribe(\"table-redraw\", this.tableRedraw.bind(this));\r\n\r\n\t\tthis.registerTableFunction(\"getCalcResults\", this.getResults.bind(this));\r\n\t\tthis.registerTableFunction(\"recalc\", this.userRecalc.bind(this));\r\n\t}\r\n\r\n\ttableRedraw(force){\r\n\t\tthis.recalc(this.table.rowManager.activeRows);\r\n\r\n\t\tif(force){\r\n\t\t\tthis.redraw();\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t///////////////////////////////////\r\n\t///////// Table Functions /////////\r\n\t///////////////////////////////////\r\n\tuserRecalc(){\r\n\t\tthis.recalc(this.table.rowManager.activeRows);\r\n\t}\r\n\r\n\t///////////////////////////////////\r\n\t///////// Internal Logic //////////\r\n\t///////////////////////////////////\r\n\r\n\trowsUpdated(row){\r\n\t\tif(this.table.options.groupBy){\r\n\t\t\tthis.recalcRowGroup(this);\r\n\t\t}else{\r\n\t\t\tthis.recalcActiveRows();\r\n\t\t}\r\n\t}\r\n\r\n\trecalcActiveRows(){\r\n\t\tthis.recalc(this.table.rowManager.activeRows);\r\n\t}\r\n\r\n\tcellValueChanged(cell){\r\n\t\tif(cell.column.definition.topCalc || cell.column.definition.bottomCalc){\r\n\t\t\tif(this.table.options.groupBy){\r\n\r\n\t\t\t\tif(this.table.options.columnCalcs == \"table\" || this.table.options.columnCalcs == \"both\"){\r\n\t\t\t\t\tthis.recalcActiveRows();\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(this.table.options.columnCalcs != \"table\"){\r\n\t\t\t\t\tthis.recalcRowGroup(cell.row);\r\n\t\t\t\t}\r\n\r\n\t\t\t}else{\r\n\t\t\t\tthis.recalcActiveRows();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tinitializeColumnCheck(column){\r\n\t\tif(column.definition.topCalc || column.definition.bottomCalc){\r\n\t\t\tthis.initializeColumn(column);\r\n\t\t}\r\n\t}\r\n\r\n\t//initialize column calcs\r\n\tinitializeColumn(column){\r\n\t\tvar def = column.definition\r\n\r\n\t\tvar config = {\r\n\t\t\ttopCalcParams:def.topCalcParams || {},\r\n\t\t\tbotCalcParams:def.bottomCalcParams || {},\r\n\t\t};\r\n\r\n\t\tif(def.topCalc){\r\n\r\n\t\t\tswitch(typeof def.topCalc){\r\n\t\t\t\tcase \"string\":\r\n\t\t\t\tif(ColumnCalcs.calculations[def.topCalc]){\r\n\t\t\t\t\tconfig.topCalc = ColumnCalcs.calculations[def.topCalc]\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.warn(\"Column Calc Error - No such calculation found, ignoring: \", def.topCalc);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"function\":\r\n\t\t\t\tconfig.topCalc = def.topCalc;\r\n\t\t\t\tbreak\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif(config.topCalc){\r\n\t\t\t\tcolumn.modules.columnCalcs = config;\r\n\t\t\t\tthis.topCalcs.push(column);\r\n\r\n\t\t\t\tif(this.table.options.columnCalcs != \"group\"){\r\n\t\t\t\t\tthis.initializeTopRow();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tif(def.bottomCalc){\r\n\t\t\tswitch(typeof def.bottomCalc){\r\n\t\t\t\tcase \"string\":\r\n\t\t\t\tif(ColumnCalcs.calculations[def.bottomCalc]){\r\n\t\t\t\t\tconfig.botCalc = ColumnCalcs.calculations[def.bottomCalc]\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.warn(\"Column Calc Error - No such calculation found, ignoring: \", def.bottomCalc);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"function\":\r\n\t\t\t\tconfig.botCalc = def.bottomCalc;\r\n\t\t\t\tbreak\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif(config.botCalc){\r\n\t\t\t\tcolumn.modules.columnCalcs = config;\r\n\t\t\t\tthis.botCalcs.push(column);\r\n\r\n\t\t\t\tif(this.table.options.columnCalcs != \"group\"){\r\n\t\t\t\t\tthis.initializeBottomRow();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t//dummy functions to handle being mock column manager\r\n\tregisterColumnField(){};\r\n\r\n\tremoveCalcs(){\r\n\t\tvar changed = false;\r\n\r\n\t\tif(this.topInitialized){\r\n\t\t\tthis.topInitialized = false;\r\n\t\t\tthis.topElement.parentNode.removeChild(this.topElement);\r\n\t\t\tchanged = true;\r\n\t\t}\r\n\r\n\t\tif(this.botInitialized){\r\n\t\t\tthis.botInitialized = false;\r\n\t\t\tthis.table.footerManager.remove(this.botElement);\r\n\t\t\tchanged = true;\r\n\t\t}\r\n\r\n\t\tif(changed){\r\n\t\t\tthis.table.rowManager.adjustTableSize();\r\n\t\t}\r\n\t}\r\n\r\n\tinitializeTopRow(){\r\n\t\tif(!this.topInitialized){\r\n\t\t\tthis.table.columnManager.getElement().insertBefore(this.topElement, this.table.columnManager.headersElement.nextSibling);\r\n\t\t\tthis.topInitialized = true;\r\n\t\t}\r\n\t}\r\n\r\n\tinitializeBottomRow(){\r\n\t\tif(!this.botInitialized){\r\n\t\t\tthis.table.footerManager.prepend(this.botElement);\r\n\t\t\tthis.botInitialized = true;\r\n\t\t}\r\n\t}\r\n\r\n\tscrollHorizontal(left){\r\n\t\tif(this.botInitialized && this.botRow){\r\n\t\t\tthis.botRow.getElement().style.marginLeft = (-left) + \"px\";\r\n\t\t}\r\n\t}\r\n\r\n\trecalc(rows){\r\n\t\tvar data, row;\r\n\r\n\t\tif(this.topInitialized || this.botInitialized){\r\n\t\t\tdata = this.rowsToData(rows);\r\n\r\n\t\t\tif(this.topInitialized){\r\n\t\t\t\tif(this.topRow){\r\n\t\t\t\t\tthis.topRow.deleteCells();\r\n\t\t\t\t}\r\n\r\n\t\t\t\trow = this.generateRow(\"top\", this.rowsToData(rows))\r\n\t\t\t\tthis.topRow = row;\r\n\t\t\t\twhile(this.topElement.firstChild) this.topElement.removeChild(this.topElement.firstChild);\r\n\t\t\t\tthis.topElement.appendChild(row.getElement());\r\n\t\t\t\trow.initialize(true);\r\n\t\t\t}\r\n\r\n\t\t\tif(this.botInitialized){\r\n\t\t\t\tif(this.botRow){\r\n\t\t\t\t\tthis.botRow.deleteCells();\r\n\t\t\t\t}\r\n\r\n\t\t\t\trow = this.generateRow(\"bottom\", this.rowsToData(rows))\r\n\t\t\t\tthis.botRow = row;\r\n\t\t\t\twhile(this.botElement.firstChild) this.botElement.removeChild(this.botElement.firstChild);\r\n\t\t\t\tthis.botElement.appendChild(row.getElement());\r\n\t\t\t\trow.initialize(true);\r\n\t\t\t}\r\n\r\n\t\t\tthis.table.rowManager.adjustTableSize();\r\n\r\n\t\t\t//set resizable handles\r\n\t\t\tif(this.table.modExists(\"frozenColumns\")){\r\n\t\t\t\tthis.table.modules.frozenColumns.layout();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\trecalcRowGroup(row){\r\n\t\tthis.recalcGroup(this.table.modules.groupRows.getRowGroup(row));\r\n\t}\r\n\r\n\trecalcAll(){\r\n\t\tif(this.topCalcs.length || this.botCalcs.length){\r\n\t\t\tif(this.table.options.columnCalcs !== \"group\"){\r\n\t\t\t\tthis.recalcActiveRows();\r\n\t\t\t}\r\n\r\n\t\t\tif(this.table.options.groupBy && this.table.options.columnCalcs !== \"table\"){\r\n\r\n\r\n\t\t\t\tvar groups = table.modules.groupRows.getChildGroups();\r\n\r\n\t\t\t\tgroups.forEach((group) => {\r\n\t\t\t\t\tthis.recalcGroup(group);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\trecalcGroup(group){\r\n\t\tvar data, rowData;\r\n\r\n\t\tif(group){\r\n\t\t\tif(group.calcs){\r\n\t\t\t\tif(group.calcs.bottom){\r\n\t\t\t\t\tdata = this.rowsToData(group.rows);\r\n\t\t\t\t\trowData = this.generateRowData(\"bottom\", data);\r\n\r\n\t\t\t\t\tgroup.calcs.bottom.updateData(rowData);\r\n\t\t\t\t\tgroup.calcs.bottom.reinitialize();\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(group.calcs.top){\r\n\t\t\t\t\tdata = this.rowsToData(group.rows);\r\n\t\t\t\t\trowData = this.generateRowData(\"top\", data);\r\n\r\n\t\t\t\t\tgroup.calcs.top.updateData(rowData);\r\n\t\t\t\t\tgroup.calcs.top.reinitialize();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//generate top stats row\r\n\tgenerateTopRow(rows){\r\n\t\treturn this.generateRow(\"top\", this.rowsToData(rows));\r\n\t}\r\n\t//generate bottom stats row\r\n\tgenerateBottomRow(rows){\r\n\t\treturn this.generateRow(\"bottom\", this.rowsToData(rows));\r\n\t}\r\n\r\n\trowsToData(rows){\r\n\t\tvar data = [];\r\n\r\n\t\trows.forEach((row) => {\r\n\t\t\tdata.push(row.getData());\r\n\r\n\t\t\tif(this.table.options.dataTree && this.table.options.dataTreeChildColumnCalcs){\r\n\t\t\t\tif(row.modules.dataTree.open){\r\n\t\t\t\t\tvar children = this.rowsToData(this.table.modules.dataTree.getFilteredTreeChildren(row));\r\n\t\t\t\t\tdata = data.concat(children);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn data;\r\n\t}\r\n\r\n\t//generate stats row\r\n\tgenerateRow(pos, data){\r\n\t\tvar rowData = this.generateRowData(pos, data),\r\n\t\trow;\r\n\r\n\t\tif(this.table.modExists(\"mutator\")){\r\n\t\t\tthis.table.modules.mutator.disable();\r\n\t\t}\r\n\r\n\t\trow = new Row(rowData, this, \"calc\");\r\n\r\n\t\tif(this.table.modExists(\"mutator\")){\r\n\t\t\tthis.table.modules.mutator.enable();\r\n\t\t}\r\n\r\n\t\trow.getElement().classList.add(\"tabulator-calcs\", \"tabulator-calcs-\" + pos);\r\n\r\n\t\trow.component = false;\r\n\r\n\t\trow.getComponent = () => {\r\n\t\t\tif(!row.component){\r\n\t\t\t\trow.component = new CalcComponent(this);\r\n\t\t\t}\r\n\r\n\t\t\treturn row.component;\r\n\t\t};\r\n\r\n\t\trow.generateCells = () => {\r\n\r\n\t\t\tvar cells = [];\r\n\r\n\t\t\tthis.table.columnManager.columnsByIndex.forEach((column) => {\r\n\r\n\t\t\t\t\t//set field name of mock column\r\n\t\t\t\t\tthis.genColumn.setField(column.getField());\r\n\t\t\t\t\tthis.genColumn.hozAlign = column.hozAlign;\r\n\r\n\t\t\t\t\tif(column.definition[pos + \"CalcFormatter\"] && this.table.modExists(\"format\")){\r\n\t\t\t\t\t\tthis.genColumn.modules.format = {\r\n\t\t\t\t\t\t\tformatter: this.table.modules.format.getFormatter(column.definition[pos + \"CalcFormatter\"]),\r\n\t\t\t\t\t\t\tparams: column.definition[pos + \"CalcFormatterParams\"] || {},\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tthis.genColumn.modules.format = {\r\n\t\t\t\t\t\t\tformatter: this.table.modules.format.getFormatter(\"plaintext\"),\r\n\t\t\t\t\t\t\tparams:{}\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t//ensure css class defintion is replicated to calculation cell\r\n\t\t\t\t\tthis.genColumn.definition.cssClass = column.definition.cssClass;\r\n\r\n\t\t\t\t\t//generate cell and assign to correct column\r\n\t\t\t\t\tvar cell = new Cell(this.genColumn, row);\r\n\t\t\t\t\tcell.getElement();\r\n\t\t\t\t\tcell.column = column;\r\n\t\t\t\t\tcell.setWidth();\r\n\r\n\t\t\t\t\tcolumn.cells.push(cell);\r\n\t\t\t\t\tcells.push(cell);\r\n\r\n\t\t\t\t\tif(!column.visible){\r\n\t\t\t\t\t\tcell.hide();\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\trow.cells = cells;\r\n\t\t};\r\n\r\n\t\treturn row;\r\n\t}\r\n\r\n\t//generate stats row\r\n\tgenerateRowData(pos, data){\r\n\t\tvar rowData = {},\r\n\t\tcalcs = pos == \"top\" ? this.topCalcs : this.botCalcs,\r\n\t\ttype = pos == \"top\" ? \"topCalc\" : \"botCalc\",\r\n\t\tparams, paramKey;\r\n\r\n\t\tcalcs.forEach(function(column){\r\n\t\t\tvar values = [];\r\n\r\n\t\t\tif(column.modules.columnCalcs && column.modules.columnCalcs[type]){\r\n\t\t\t\tdata.forEach(function(item){\r\n\t\t\t\t\tvalues.push(column.getFieldValue(item));\r\n\t\t\t\t});\r\n\r\n\t\t\t\tparamKey = type + \"Params\";\r\n\t\t\t\tparams = typeof column.modules.columnCalcs[paramKey] === \"function\" ? column.modules.columnCalcs[paramKey](values, data) : column.modules.columnCalcs[paramKey];\r\n\r\n\t\t\t\tcolumn.setFieldValue(rowData, column.modules.columnCalcs[type](values, data, params));\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn rowData;\r\n\t}\r\n\r\n\thasTopCalcs(){\r\n\t\treturn\t!!(this.topCalcs.length);\r\n\t}\r\n\r\n\thasBottomCalcs(){\r\n\t\treturn\t!!(this.botCalcs.length);\r\n\t}\r\n\r\n\t//handle table redraw\r\n\tredraw(){\r\n\t\tif(this.topRow){\r\n\t\t\tthis.topRow.normalizeHeight(true);\r\n\t\t}\r\n\t\tif(this.botRow){\r\n\t\t\tthis.botRow.normalizeHeight(true);\r\n\t\t}\r\n\t}\r\n\r\n\t//return the calculated\r\n\tgetResults(){\r\n\t\tvar results = {},\r\n\t\tgroups;\r\n\r\n\t\tif(this.table.options.groupBy && this.table.modExists(\"groupRows\")){\r\n\t\t\tgroups = this.table.modules.groupRows.getGroups(true);\r\n\r\n\t\t\tgroups.forEach((group) => {\r\n\t\t\t\tresults[group.getKey()] = this.getGroupResults(group);\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tresults = {\r\n\t\t\t\ttop: this.topRow ? this.topRow.getData() : {},\r\n\t\t\t\tbottom: this.botRow ? this.botRow.getData() : {},\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn results;\r\n\t}\r\n\r\n\t//get results from a group\r\n\tgetGroupResults(group){\r\n\t\tvar groupObj = group._getSelf(),\r\n\t\tsubGroups = group.getSubGroups(),\r\n\t\tsubGroupResults = {},\r\n\t\tresults = {};\r\n\r\n\t\tsubGroups.forEach((subgroup) => {\r\n\t\t\tsubGroupResults[subgroup.getKey()] = this.getGroupResults(subgroup);\r\n\t\t});\r\n\r\n\t\tresults = {\r\n\t\t\ttop: groupObj.calcs.top ? groupObj.calcs.top.getData() : {},\r\n\t\t\tbottom: groupObj.calcs.bottom ? groupObj.calcs.bottom.getData() : {},\r\n\t\t\tgroups: subGroupResults,\r\n\t\t}\r\n\r\n\t\treturn results;\r\n\t}\r\n}\r\n\r\nColumnCalcs.moduleName = \"columnCalcs\";\r\n\r\n//load defaults\r\nColumnCalcs.calculations = defaultCalculations;\r\n\r\nexport default ColumnCalcs;","import Module from '../../core/Module.js';\r\n\r\nimport Row from '../../core/row/Row.js';\r\n\r\nclass DataTree extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.indent = 10;\r\n\t\tthis.field = \"\";\r\n\t\tthis.collapseEl = null;\r\n\t\tthis.expandEl = null;\r\n\t\tthis.branchEl = null;\r\n\t\tthis.elementField = false;\r\n\r\n\t\tthis.startOpen = function(){};\r\n\r\n\t\tthis.displayIndex = 0;\r\n\r\n\t\tthis.registerTableOption(\"dataTree\", false); //enable data tree\r\n\t\tthis.registerTableOption(\"dataTreeFilter\", true); //filter child rows\r\n\t\tthis.registerTableOption(\"dataTreeSort\", true); //sort child rows\r\n\t\tthis.registerTableOption(\"dataTreeElementColumn\", false);\r\n\t\tthis.registerTableOption(\"dataTreeBranchElement\", true);//show data tree branch element\r\n\t\tthis.registerTableOption(\"dataTreeChildIndent\", 9); //data tree child indent in px\r\n\t\tthis.registerTableOption(\"dataTreeChildField\", \"_children\");//data tre column field to look for child rows\r\n\t\tthis.registerTableOption(\"dataTreeCollapseElement\", false);//data tree row collapse element\r\n\t\tthis.registerTableOption(\"dataTreeExpandElement\", false);//data tree row expand element\r\n\t\tthis.registerTableOption(\"dataTreeStartExpanded\", false);\r\n\t\tthis.registerTableOption(\"dataTreeChildColumnCalcs\", false);//include visible data tree rows in column calculations\r\n\t\tthis.registerTableOption(\"dataTreeSelectPropagate\", false);//seleccting a parent row selects its children\r\n\r\n\t\t//register component functions\r\n\t\tthis.registerComponentFunction(\"row\", \"treeCollapse\", this.collapseRow.bind(this));\r\n\t\tthis.registerComponentFunction(\"row\", \"treeExpand\", this.expandRow.bind(this));\r\n\t\tthis.registerComponentFunction(\"row\", \"treeToggle\", this.toggleRow.bind(this));\r\n\t\tthis.registerComponentFunction(\"row\", \"getTreeParent\", this.getTreeParent.bind(this));\r\n\t\tthis.registerComponentFunction(\"row\", \"getTreeChildren\", this.getRowChildren.bind(this));\r\n\t\tthis.registerComponentFunction(\"row\", \"addTreeChild\", this.addTreeChildRow.bind(this));\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tif(this.table.options.dataTree){\r\n\t\t\tvar dummyEl = null,\r\n\t\t\tfirstCol = this.table.columnManager.getFirstVisibileColumn(),\r\n\t\t\toptions = this.table.options;\r\n\r\n\t\t\tthis.field = options.dataTreeChildField;\r\n\t\t\tthis.indent = options.dataTreeChildIndent;\r\n\t\t\tthis.elementField = options.dataTreeElementColumn || (firstCol ? firstCol.field : false);\r\n\r\n\t\t\tif(options.dataTreeBranchElement){\r\n\r\n\t\t\t\tif(options.dataTreeBranchElement === true){\r\n\t\t\t\t\tthis.branchEl = document.createElement(\"div\");\r\n\t\t\t\t\tthis.branchEl.classList.add(\"tabulator-data-tree-branch\");\r\n\t\t\t\t}else{\r\n\t\t\t\t\tif(typeof options.dataTreeBranchElement === \"string\"){\r\n\t\t\t\t\t\tdummyEl = document.createElement(\"div\");\r\n\t\t\t\t\t\tdummyEl.innerHTML = options.dataTreeBranchElement;\r\n\t\t\t\t\t\tthis.branchEl = dummyEl.firstChild;\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tthis.branchEl = options.dataTreeBranchElement;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif(options.dataTreeCollapseElement){\r\n\t\t\t\tif(typeof options.dataTreeCollapseElement === \"string\"){\r\n\t\t\t\t\tdummyEl = document.createElement(\"div\");\r\n\t\t\t\t\tdummyEl.innerHTML = options.dataTreeCollapseElement;\r\n\t\t\t\t\tthis.collapseEl = dummyEl.firstChild;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tthis.collapseEl = options.dataTreeCollapseElement;\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tthis.collapseEl = document.createElement(\"div\");\r\n\t\t\t\tthis.collapseEl.classList.add(\"tabulator-data-tree-control\");\r\n\t\t\t\tthis.collapseEl.tabIndex = 0;\r\n\t\t\t\tthis.collapseEl.innerHTML = \"
\";\r\n\t\t\t}\r\n\r\n\t\t\tif(options.dataTreeExpandElement){\r\n\t\t\t\tif(typeof options.dataTreeExpandElement === \"string\"){\r\n\t\t\t\t\tdummyEl = document.createElement(\"div\");\r\n\t\t\t\t\tdummyEl.innerHTML = options.dataTreeExpandElement;\r\n\t\t\t\t\tthis.expandEl = dummyEl.firstChild;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tthis.expandEl = options.dataTreeExpandElement;\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tthis.expandEl = document.createElement(\"div\");\r\n\t\t\t\tthis.expandEl.classList.add(\"tabulator-data-tree-control\");\r\n\t\t\t\tthis.expandEl.tabIndex = 0;\r\n\t\t\t\tthis.expandEl.innerHTML = \"
\";\r\n\t\t\t}\r\n\r\n\r\n\t\t\tswitch(typeof options.dataTreeStartExpanded){\r\n\t\t\t\tcase \"boolean\":\r\n\t\t\t\tthis.startOpen = function(row, index){\r\n\t\t\t\t\treturn options.dataTreeStartExpanded;\r\n\t\t\t\t};\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"function\":\r\n\t\t\t\tthis.startOpen = options.dataTreeStartExpanded;\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tdefault:\r\n\t\t\t\tthis.startOpen = function(row, index){\r\n\t\t\t\t\treturn options.dataTreeStartExpanded[index];\r\n\t\t\t\t};\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\r\n\t\t\tthis.subscribe(\"row-init\", this.initializeRow.bind(this));\r\n\t\t\tthis.subscribe(\"row-layout\", this.layoutRow.bind(this));\r\n\t\t\tthis.subscribe(\"row-relayout\", this.layoutRow.bind(this));\r\n\t\t\tthis.subscribe(\"row-deleted\", this.rowDelete.bind(this),0);\r\n\t\t\tthis.subscribe(\"row-data-changed\", this.rowDataChanged.bind(this), 10);\r\n\t\t\tthis.subscribe(\"column-moving-rows\", this.columnMoving.bind(this));\r\n\r\n\t\t\tthis.registerDisplayHandler(this.getRows.bind(this), 30);\r\n\t\t}\r\n\t}\r\n\r\n\tgetRowChildren(row){\r\n\t\treturn this.getTreeChildren(row, true);\r\n\t}\r\n\r\n\tcolumnMoving(){\r\n\t\tvar rows = [];\r\n\r\n\t\tthis.table.rowManager.rows.forEach((row) => {\r\n\t\t\trows = rows.concat(this.getTreeChildren(row, false, true));\r\n\t\t});\r\n\r\n\t\treturn rows;\r\n\t}\r\n\r\n\trowDataChanged(row, visible, updatedData){\r\n\t\tif(this.redrawNeeded(updatedData)){\r\n\t\t\tthis.initializeRow(row);\r\n\r\n\t\t\tif(visible){\r\n\t\t\t\tthis.layoutRow(row);\r\n\t\t\t\tthis.refreshData(true);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tinitializeRow(row){\r\n\t\tvar childArray = row.getData()[this.field];\r\n\t\tvar isArray = Array.isArray(childArray);\r\n\r\n\t\tvar children = isArray || (!isArray && typeof childArray === \"object\" && childArray !== null);\r\n\r\n\t\tif(!children && row.modules.dataTree && row.modules.dataTree.branchEl){\r\n\t\t\trow.modules.dataTree.branchEl.parentNode.removeChild(row.modules.dataTree.branchEl);\r\n\t\t}\r\n\r\n\t\tif(!children && row.modules.dataTree && row.modules.dataTree.controlEl){\r\n\t\t\trow.modules.dataTree.controlEl.parentNode.removeChild(row.modules.dataTree.controlEl);\r\n\t\t}\r\n\r\n\t\trow.modules.dataTree = {\r\n\t\t\tindex: row.modules.dataTree ? row.modules.dataTree.index : 0,\r\n\t\t\topen: children ? (row.modules.dataTree ? row.modules.dataTree.open : this.startOpen(row.getComponent(), 0)) : false,\r\n\t\t\tcontrolEl: row.modules.dataTree && children ? row.modules.dataTree.controlEl : false,\r\n\t\t\tbranchEl: row.modules.dataTree && children ? row.modules.dataTree.branchEl : false,\r\n\t\t\tparent: row.modules.dataTree ? row.modules.dataTree.parent : false,\r\n\t\t\tchildren:children,\r\n\t\t};\r\n\t}\r\n\r\n\treinitializeRowChildren(row){\r\n\t\tvar children = this.getTreeChildren(row, false, true);\r\n\r\n\t\tchildren.forEach(function(child){\r\n\t\t\tchild.reinitialize(true);\r\n\t\t});\r\n\t}\r\n\r\n\tlayoutRow(row){\r\n\t\tvar cell = this.elementField ? row.getCell(this.elementField) : row.getCells()[0],\r\n\t\tel = cell.getElement(),\r\n\t\tconfig = row.modules.dataTree;\r\n\r\n\t\tif(config.branchEl){\r\n\t\t\tif(config.branchEl.parentNode){\r\n\t\t\t\tconfig.branchEl.parentNode.removeChild(config.branchEl);\r\n\t\t\t}\r\n\t\t\tconfig.branchEl = false;\r\n\t\t}\r\n\r\n\t\tif(config.controlEl){\r\n\t\t\tif(config.controlEl.parentNode){\r\n\t\t\t\tconfig.controlEl.parentNode.removeChild(config.controlEl);\r\n\t\t\t}\r\n\t\t\tconfig.controlEl = false;\r\n\t\t}\r\n\r\n\t\tthis.generateControlElement(row, el);\r\n\r\n\t\trow.getElement().classList.add(\"tabulator-tree-level-\" + config.index);\r\n\r\n\t\tif(config.index){\r\n\t\t\tif(this.branchEl){\r\n\t\t\t\tconfig.branchEl = this.branchEl.cloneNode(true);\r\n\t\t\t\tel.insertBefore(config.branchEl, el.firstChild);\r\n\r\n\t\t\t\tif(this.table.rtl){\r\n\t\t\t\t\tconfig.branchEl.style.marginRight = (((config.branchEl.offsetWidth + config.branchEl.style.marginLeft) * (config.index - 1)) + (config.index * this.indent)) + \"px\";\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconfig.branchEl.style.marginLeft = (((config.branchEl.offsetWidth + config.branchEl.style.marginRight) * (config.index - 1)) + (config.index * this.indent)) + \"px\";\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\r\n\t\t\t\tif(this.table.rtl){\r\n\t\t\t\t\tel.style.paddingRight = parseInt(window.getComputedStyle(el, null).getPropertyValue('padding-right')) + (config.index * this.indent) + \"px\";\r\n\t\t\t\t}else{\r\n\t\t\t\t\tel.style.paddingLeft = parseInt(window.getComputedStyle(el, null).getPropertyValue('padding-left')) + (config.index * this.indent) + \"px\";\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tgenerateControlElement(row, el){\r\n\t\tvar config = row.modules.dataTree,\r\n\t\tel = el || row.getCells()[0].getElement(),\r\n\t\toldControl = config.controlEl;\r\n\r\n\t\tif(config.children !== false){\r\n\r\n\t\t\tif(config.open){\r\n\t\t\t\tconfig.controlEl = this.collapseEl.cloneNode(true);\r\n\t\t\t\tconfig.controlEl.addEventListener(\"click\", (e) => {\r\n\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\tthis.collapseRow(row);\r\n\t\t\t\t});\r\n\t\t\t}else{\r\n\t\t\t\tconfig.controlEl = this.expandEl.cloneNode(true);\r\n\t\t\t\tconfig.controlEl.addEventListener(\"click\", (e) => {\r\n\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\tthis.expandRow(row);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\tconfig.controlEl.addEventListener(\"mousedown\", (e) => {\r\n\t\t\t\te.stopPropagation();\r\n\t\t\t});\r\n\r\n\t\t\tif(oldControl && oldControl.parentNode === el){\r\n\t\t\t\toldControl.parentNode.replaceChild(config.controlEl,oldControl);\r\n\t\t\t}else{\r\n\t\t\t\tel.insertBefore(config.controlEl, el.firstChild);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tsetDisplayIndex (index) {\r\n\t\tthis.displayIndex = index;\r\n\t}\r\n\r\n\tgetDisplayIndex () {\r\n\t\treturn this.displayIndex;\r\n\t}\r\n\r\n\tgetRows(rows){\r\n\t\tvar output = [];\r\n\r\n\t\trows.forEach((row, i) => {\r\n\t\t\tvar config, children;\r\n\r\n\t\t\toutput.push(row);\r\n\r\n\t\t\tif(row instanceof Row){\r\n\r\n\t\t\t\trow.create();\r\n\r\n\t\t\t\tconfig = row.modules.dataTree.children;\r\n\r\n\t\t\t\tif(!config.index && config.children !== false){\r\n\t\t\t\t\tchildren = this.getChildren(row);\r\n\r\n\t\t\t\t\tchildren.forEach((child) => {\r\n\t\t\t\t\t\tchild.create();\r\n\t\t\t\t\t\toutput.push(child);\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tgetChildren(row, allChildren){\r\n\t\tvar config = row.modules.dataTree,\r\n\t\tchildren = [],\r\n\t\toutput = [];\r\n\r\n\t\tif(config.children !== false && (config.open || allChildren)){\r\n\t\t\tif(!Array.isArray(config.children)){\r\n\t\t\t\tconfig.children = this.generateChildren(row);\r\n\t\t\t}\r\n\r\n\t\t\tif(this.table.modExists(\"filter\") && this.table.options.dataTreeFilter){\r\n\t\t\t\tchildren = this.table.modules.filter.filter(config.children);\r\n\t\t\t}else{\r\n\t\t\t\tchildren = config.children;\r\n\t\t\t}\r\n\r\n\t\t\tif(this.table.modExists(\"sort\") && this.table.options.dataTreeSort){\r\n\t\t\t\tthis.table.modules.sort.sort(children);\r\n\t\t\t}\r\n\r\n\t\t\tchildren.forEach((child) => {\r\n\t\t\t\toutput.push(child);\r\n\r\n\t\t\t\tvar subChildren = this.getChildren(child);\r\n\r\n\t\t\t\tsubChildren.forEach((sub) => {\r\n\t\t\t\t\toutput.push(sub);\r\n\t\t\t\t});\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tgenerateChildren(row){\r\n\t\tvar children = [];\r\n\r\n\t\tvar childArray = row.getData()[this.field];\r\n\r\n\t\tif(!Array.isArray(childArray)){\r\n\t\t\tchildArray = [childArray];\r\n\t\t}\r\n\r\n\t\tchildArray.forEach((childData) => {\r\n\t\t\tvar childRow = new Row(childData || {}, this.table.rowManager);\r\n\r\n\t\t\tchildRow.create();\r\n\r\n\t\t\tchildRow.modules.dataTree.index = row.modules.dataTree.index + 1;\r\n\t\t\tchildRow.modules.dataTree.parent = row;\r\n\r\n\t\t\tif(childRow.modules.dataTree.children){\r\n\t\t\t\tchildRow.modules.dataTree.open = this.startOpen(childRow.getComponent(), childRow.modules.dataTree.index);\r\n\t\t\t}\r\n\t\t\tchildren.push(childRow);\r\n\t\t});\r\n\r\n\t\treturn children;\r\n\t}\r\n\r\n\texpandRow(row, silent){\r\n\t\tvar config = row.modules.dataTree;\r\n\r\n\t\tif(config.children !== false){\r\n\t\t\tconfig.open = true;\r\n\r\n\t\t\trow.reinitialize();\r\n\r\n\t\t\tthis.refreshData(true);\r\n\r\n\t\t\tthis.dispatchExternal(\"dataTreeRowExpanded\", row.getComponent(), row.modules.dataTree.index);\r\n\t\t}\r\n\t}\r\n\r\n\tcollapseRow(row){\r\n\t\tvar config = row.modules.dataTree;\r\n\r\n\t\tif(config.children !== false){\r\n\t\t\tconfig.open = false;\r\n\r\n\t\t\trow.reinitialize();\r\n\r\n\t\t\tthis.refreshData(true);\r\n\r\n\t\t\tthis.dispatchExternal(\"dataTreeRowCollapsed\", getComponent(), row.modules.dataTree.index);\r\n\t\t}\r\n\t}\r\n\r\n\ttoggleRow(row){\r\n\t\tvar config = row.modules.dataTree;\r\n\r\n\t\tif(config.children !== false){\r\n\t\t\tif(config.open){\r\n\t\t\t\tthis.collapseRow(row);\r\n\t\t\t}else{\r\n\t\t\t\tthis.expandRow(row);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tgetTreeParent(row){\r\n\t\treturn row.modules.dataTree.parent ? row.modules.dataTree.parent.getComponent() : false;\r\n\t}\r\n\r\n\tgetFilteredTreeChildren(row){\r\n\t\tvar config = row.modules.dataTree,\r\n\t\toutput = [], children;\r\n\r\n\t\tif(config.children){\r\n\r\n\t\t\tif(!Array.isArray(config.children)){\r\n\t\t\t\tconfig.children = this.generateChildren(row);\r\n\t\t\t}\r\n\r\n\t\t\tif(this.table.modExists(\"filter\") && this.table.options.dataTreeFilter){\r\n\t\t\t\tchildren = this.table.modules.filter.filter(config.children);\r\n\t\t\t}else{\r\n\t\t\t\tchildren = config.children;\r\n\t\t\t}\r\n\r\n\t\t\tchildren.forEach((childRow) => {\r\n\t\t\t\tif(childRow instanceof Row){\r\n\t\t\t\t\toutput.push(childRow);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\trowDelete(row){\r\n\t\tvar parent = row.modules.dataTree.parent,\r\n\t\tchildIndex;\r\n\r\n\t\tif(parent){\r\n\t\t\tchildIndex = this.findChildIndex(row, parent);\r\n\r\n\t\t\tif(childIndex !== false){\r\n\t\t\t\tparent.data[this.field].splice(childIndex, 1);\r\n\t\t\t}\r\n\r\n\t\t\tif(!parent.data[this.field].length){\r\n\t\t\t\tdelete parent.data[this.field];\r\n\t\t\t}\r\n\r\n\t\t\tthis.initializeRow(parent);\r\n\t\t\tthis.layoutRow(parent);\r\n\t\t}\r\n\r\n\t\tthis.refreshData(true);\r\n\t}\r\n\r\n\taddTreeChildRow(row, data, top, index){\r\n\t\tvar childIndex = false;\r\n\r\n\t\tif(typeof data === \"string\"){\r\n\t\t\tdata = JSON.parse(data);\r\n\t\t}\r\n\r\n\t\tif(!Array.isArray(row.data[this.field])){\r\n\t\t\trow.data[this.field] = [];\r\n\r\n\t\t\trow.modules.dataTree.open = this.startOpen(row.getComponent(), row.modules.dataTree.index);\r\n\t\t}\r\n\r\n\t\tif(typeof index !== \"undefined\"){\r\n\t\t\tchildIndex = this.findChildIndex(index, row);\r\n\r\n\t\t\tif(childIndex !== false){\r\n\t\t\t\trow.data[this.field].splice((top ? childIndex : childIndex + 1), 0, data);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(childIndex === false){\r\n\t\t\tif(top){\r\n\t\t\t\trow.data[this.field].unshift(data);\r\n\t\t\t}else{\r\n\t\t\t\trow.data[this.field].push(data);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.initializeRow(row);\r\n\t\tthis.layoutRow(row);\r\n\r\n\t\tthis.refreshData(true);\r\n\t}\r\n\r\n\tfindChildIndex(subject, parent){\r\n\t\tvar match = false;\r\n\r\n\t\tif(typeof subject == \"object\"){\r\n\r\n\t\t\tif(subject instanceof Row){\r\n\t\t\t\t//subject is row element\r\n\t\t\t\tmatch = subject.data;\r\n\t\t\t}else if(subject instanceof RowComponent){\r\n\t\t\t\t//subject is public row component\r\n\t\t\t\tmatch = subject._getSelf().data;\r\n\t\t\t}else if(typeof HTMLElement !== \"undefined\" && subject instanceof HTMLElement){\r\n\t\t\t\tif(parent.modules.dataTree){\r\n\t\t\t\t\tmatch = parent.modules.dataTree.children.find((childRow) => {\r\n\t\t\t\t\t\treturn childRow instanceof Row ? childRow.element === subject : false;\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\tif(match){\r\n\t\t\t\t\t\tmatch = match.data;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t}else if(typeof subject == \"undefined\" || subject === null){\r\n\t\t\tmatch = false\r\n\t\t}else{\r\n\t\t\t//subject should be treated as the index of the row\r\n\t\t\tmatch = parent.data[this.field].find((row) => {\r\n\t\t\t\treturn row.data[this.table.options.index] == subject;\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif(match){\r\n\r\n\t\t\tif(Array.isArray(parent.data[this.field])){\r\n\t\t\t\tmatch = parent.data[this.field].indexOf(match);\r\n\t\t\t}\r\n\r\n\t\t\tif(match == -1){\r\n\t\t\t\tmatch = false;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//catch all for any other type of input\r\n\r\n\t\treturn match;\r\n\t}\r\n\r\n\tgetTreeChildren(row, component, recurse){\r\n\t\tvar config = row.modules.dataTree,\r\n\t\toutput = [];\r\n\r\n\t\tif(config.children){\r\n\r\n\t\t\tif(!Array.isArray(config.children)){\r\n\t\t\t\tconfig.children = this.generateChildren(row);\r\n\t\t\t}\r\n\r\n\t\t\tconfig.children.forEach((childRow) => {\r\n\t\t\t\tif(childRow instanceof Row){\r\n\t\t\t\t\toutput.push(component ? childRow.getComponent() : childRow);\r\n\r\n\t\t\t\t\tif(recurse){\r\n\t\t\t\t\t\toutput = output.concat(this.getTreeChildren(childRow, component, recurse));\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tcheckForRestyle(cell){\r\n\t\tif(!cell.row.cells.indexOf(cell)){\r\n\t\t\tcell.row.reinitialize();\r\n\t\t}\r\n\t}\r\n\r\n\tgetChildField(){\r\n\t\treturn this.field;\r\n\t}\r\n\r\n\tredrawNeeded(data){\r\n\t\treturn (this.field ? typeof data[this.field] !== \"undefined\" : false) || (this.elementField ? typeof data[this.elementField] !== \"undefined\" : false);\r\n\t}\r\n}\r\n\r\nDataTree.moduleName = \"dataTree\";\r\n\r\nexport default DataTree;","export default function(list, options, setFileContents){\r\n\tvar delimiter = options && options.delimiter ? options.delimiter : \",\",\r\n\tfileContents = [],\r\n\theaders = [];\r\n\r\n\tlist.forEach((row) => {\r\n\t\tvar item = [];\r\n\r\n\t\tswitch(row.type){\r\n\t\t\tcase \"group\":\r\n\t\t\tconsole.warn(\"Download Warning - CSV downloader cannot process row groups\");\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"calc\":\r\n\t\t\tconsole.warn(\"Download Warning - CSV downloader cannot process column calculations\");\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"header\":\r\n\t\t\trow.columns.forEach((col, i) => {\r\n\t\t\t\tif(col && col.depth === 1){\r\n\t\t\t\t\theaders[i] = typeof col.value == \"undefined\" || col.value === null ? \"\" : ('\"' + String(col.value).split('\"').join('\"\"') + '\"');\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"row\":\r\n\t\t\trow.columns.forEach((col) => {\r\n\r\n\t\t\t\tif(col){\r\n\r\n\t\t\t\t\tswitch(typeof col.value){\r\n\t\t\t\t\t\tcase \"object\":\r\n\t\t\t\t\t\tcol.value = JSON.stringify(col.value);\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\tcase \"undefined\":\r\n\t\t\t\t\t\tcase \"null\":\r\n\t\t\t\t\t\tcol.value = \"\";\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\titem.push('\"' + String(col.value).split('\"').join('\"\"') + '\"');\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tfileContents.push(item.join(delimiter));\r\n\t\t\tbreak;\r\n\t\t}\r\n\t});\r\n\r\n\tif(headers.length){\r\n\t\tfileContents.unshift(headers.join(delimiter));\r\n\t}\r\n\r\n\tfileContents = fileContents.join(\"\\n\");\r\n\r\n\tif(options.bom){\r\n\t\tfileContents = \"\\ufeff\" + fileContents;\r\n\t}\r\n\r\n\tsetFileContents(fileContents, \"text/csv\");\r\n};","export default function(list, options, setFileContents){\r\n\tvar fileContents = [];\r\n\r\n\tlist.forEach((row) => {\r\n\t\tvar item = {};\r\n\r\n\t\tswitch(row.type){\r\n\t\t\tcase \"header\":\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"group\":\r\n\t\t\tconsole.warn(\"Download Warning - JSON downloader cannot process row groups\");\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"calc\":\r\n\t\t\tconsole.warn(\"Download Warning - JSON downloader cannot process column calculations\");\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"row\":\r\n\t\t\trow.columns.forEach((col) => {\r\n\t\t\t\tif(col){\r\n\t\t\t\t\titem[col.component.getField()] = col.value;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tfileContents.push(item);\r\n\t\t\tbreak;\r\n\t\t}\r\n\t});\r\n\r\n\tfileContents = JSON.stringify(fileContents, null, '\\t');\r\n\r\n\tsetFileContents(fileContents, \"application/json\");\r\n};","export default function(list, options, setFileContents){\r\n\tvar header = [],\r\n\tbody = [],\r\n\tautoTableParams = {},\r\n\trowGroupStyles = options.rowGroupStyles || {\r\n\t\tfontStyle: \"bold\",\r\n\t\tfontSize: 12,\r\n\t\tcellPadding: 6,\r\n\t\tfillColor: 220,\r\n\t},\r\n\trowCalcStyles = options.rowCalcStyles || {\r\n\t\tfontStyle: \"bold\",\r\n\t\tfontSize: 10,\r\n\t\tcellPadding: 4,\r\n\t\tfillColor: 232,\r\n\t},\r\n\tjsPDFParams = options.jsPDF || {},\r\n\ttitle = options && options.title ? options.title : \"\";\r\n\r\n\tif(!jsPDFParams.orientation){\r\n\t\tjsPDFParams.orientation = options.orientation || \"landscape\";\r\n\t}\r\n\r\n\tif(!jsPDFParams.unit){\r\n\t\tjsPDFParams.unit = \"pt\";\r\n\t}\r\n\r\n\t//parse row list\r\n\tlist.forEach((row) => {\r\n\t\tvar item = {};\r\n\r\n\t\tswitch(row.type){\r\n\t\t\tcase \"header\":\r\n\t\t\theader.push(parseRow(row));\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"group\":\r\n\t\t\tbody.push(parseRow(row, rowGroupStyles));\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"calc\":\r\n\t\t\tbody.push(parseRow(row, rowCalcStyles));\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"row\":\r\n\t\t\tbody.push(parseRow(row));\r\n\t\t\tbreak;\r\n\t\t}\r\n\t});\r\n\r\n\tfunction parseRow(row, styles){\r\n\t\tvar rowData = [];\r\n\r\n\t\trow.columns.forEach((col) =>{\r\n\t\t\tvar cell;\r\n\r\n\t\t\tif(col){\r\n\t\t\t\tswitch(typeof col.value){\r\n\t\t\t\t\tcase \"object\":\r\n\t\t\t\t\tcol.value = JSON.stringify(col.value);\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase \"undefined\":\r\n\t\t\t\t\tcase \"null\":\r\n\t\t\t\t\tcol.value = \"\";\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tcell = {\r\n\t\t\t\t\tcontent:col.value,\r\n\t\t\t\t\tcolSpan:col.width,\r\n\t\t\t\t\trowSpan:col.height,\r\n\t\t\t\t};\r\n\r\n\t\t\t\tif(styles){\r\n\t\t\t\t\tcell.styles = styles;\r\n\t\t\t\t}\r\n\r\n\t\t\t\trowData.push(cell);\r\n\t\t\t}else{\r\n\t\t\t\trowData.push(\"\");\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn rowData;\r\n\t}\r\n\r\n\r\n\t//configure PDF\r\n\tvar doc = new jsPDF(jsPDFParams); //set document to landscape, better for most tables\r\n\r\n\tif(options && options.autoTable){\r\n\t\tif(typeof options.autoTable === \"function\"){\r\n\t\t\tautoTableParams = options.autoTable(doc) || {};\r\n\t\t}else{\r\n\t\t\tautoTableParams = options.autoTable;\r\n\t\t}\r\n\t}\r\n\r\n\tif(title){\r\n\t\tautoTableParams.addPageContent = function(data) {\r\n\t\t\tdoc.text(title, 40, 30);\r\n\t\t};\r\n\t}\r\n\r\n\tautoTableParams.head = header;\r\n\tautoTableParams.body = body;\r\n\r\n\tdoc.autoTable(autoTableParams);\r\n\r\n\tif(options && options.documentProcessing){\r\n\t\toptions.documentProcessing(doc);\r\n\t}\r\n\r\n\tsetFileContents(doc.output(\"arraybuffer\"), \"application/pdf\");\r\n};","import CoreFeature from '../../../../core/CoreFeature.js';\r\n\r\nexport default function(list, options, setFileContents){\r\n\tvar self = this,\r\n\tsheetName = options.sheetName || \"Sheet1\",\r\n\tworkbook = XLSX.utils.book_new(),\r\n\ttableFeatures = new CoreFeature(this);\r\n\toutput;\r\n\r\n\tworkbook.SheetNames = [];\r\n\tworkbook.Sheets = {};\r\n\r\n\tfunction generateSheet(){\r\n\t\tvar rows = [],\r\n\t\tmerges = [],\r\n\t\tworksheet = {},\r\n\t\trange = {s: {c:0, r:0}, e: {c:(list[0] ? list[0].columns.reduce((a, b) => a + (b && b.width ? b.width : 1), 0) : 0), r:list.length }};\r\n\r\n\t\t//parse row list\r\n\t\tlist.forEach((row, i) => {\r\n\t\t\tvar rowData = [];\r\n\r\n\t\t\trow.columns.forEach(function(col, j){\r\n\r\n\t\t\t\tif(col){\r\n\t\t\t\t\trowData.push(!(col.value instanceof Date) && typeof col.value === \"object\" ? JSON.stringify(col.value) : col.value);\r\n\r\n\t\t\t\t\tif(col.width > 1 || col.height > -1){\r\n\t\t\t\t\t\tmerges.push({s:{r:i,c:j},e:{r:i + col.height - 1,c:j + col.width - 1}});\r\n\t\t\t\t\t}\r\n\t\t\t\t}else{\r\n\t\t\t\t\trowData.push(\"\");\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\trows.push(rowData);\r\n\t\t});\r\n\r\n\r\n\t\t//convert rows to worksheet\r\n\t\tXLSX.utils.sheet_add_aoa(worksheet, rows);\r\n\r\n\t\tworksheet['!ref'] = XLSX.utils.encode_range(range);\r\n\r\n\t\tif(merges.length){\r\n\t\t\tworksheet[\"!merges\"] = merges;\r\n\t\t}\r\n\r\n\t\treturn worksheet;\r\n\t}\r\n\r\n\tif(options.sheetOnly){\r\n\t\tsetFileContents(generateSheet());\r\n\t\treturn;\r\n\t}\r\n\r\n\tif(options.sheets){\r\n\t\tfor(var sheet in options.sheets){\r\n\r\n\t\t\tif(options.sheets[sheet] === true){\r\n\t\t\t\tworkbook.SheetNames.push(sheet);\r\n\t\t\t\tworkbook.Sheets[sheet] = generateSheet();\r\n\t\t\t}else{\r\n\r\n\t\t\t\tworkbook.SheetNames.push(sheet);\r\n\r\n\t\t\t\ttableFeatures.commsSend(options.sheets[sheet], \"download\", \"intercept\",{\r\n\t\t\t\t\ttype:\"xlsx\",\r\n\t\t\t\t\toptions:{sheetOnly:true},\r\n\t\t\t\t\tactive:self.active,\r\n\t\t\t\t\tintercept:function(data){\r\n\t\t\t\t\t\tworkbook.Sheets[sheet] = data;\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\t}else{\r\n\t\tworkbook.SheetNames.push(sheetName);\r\n\t\tworkbook.Sheets[sheetName] = generateSheet();\r\n\t}\r\n\r\n\tif(options.documentProcessing){\r\n\t\tworkbook = options.documentProcessing(workbook);\r\n\t}\r\n\r\n\t//convert workbook to binary array\r\n\tfunction s2ab(s) {\r\n\t\tvar buf = new ArrayBuffer(s.length);\r\n\t\tvar view = new Uint8Array(buf);\r\n\t\tfor (var i=0; i!=s.length; ++i) view[i] = s.charCodeAt(i) & 0xFF;\r\n\t\t\treturn buf;\r\n\t}\r\n\r\n\toutput = XLSX.write(workbook, {bookType:'xlsx', bookSST:true, type: 'binary'});\r\n\r\n\tsetFileContents(s2ab(output), \"application/octet-stream\");\r\n};","export default function(list, options, setFileContents){\r\n\tif(this.modExists(\"export\", true)){\r\n\t\tsetFileContents(this.modules.export.genereateHTMLTable(list), \"text/html\");\r\n\t}\r\n};","import csv from './downloaders/csv.js';\r\nimport json from './downloaders/json.js';\r\nimport pdf from './downloaders/pdf.js';\r\nimport xlsx from './downloaders/xlsx.js';\r\nimport html from './downloaders/html.js';\r\n\r\nexport default {\r\n\tcsv:csv,\r\n\tjson:json,\r\n\tpdf:pdf,\r\n\txlsx:xlsx,\r\n\thtml:html,\r\n};","import Module from '../../core/Module.js';\r\n\r\nimport defaultDownloaders from './defaults/downloaders.js';\r\n\r\nclass Download extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.registerTableOption(\"downloadReady\", function(data, blob){return blob;}); //function to manipulate download data\r\n\t\tthis.registerTableOption(\"downloadConfig\", {}); //download config\r\n\t\tthis.registerTableOption(\"downloadRowRange\", \"active\"); //restrict download to active rows only\r\n\r\n\t\tthis.registerColumnOption(\"download\");\r\n\t\tthis.registerColumnOption(\"titleDownload\");\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tthis.registerTableFunction(\"download\", this.download.bind(this));\r\n\t\tthis.registerTableFunction(\"downloadToTab\", this.downloadToTab.bind(this));\r\n\t}\r\n\r\n\t///////////////////////////////////\r\n\t///////// Table Functions /////////\r\n\t///////////////////////////////////\r\n\r\n\tdownloadToTab(type, filename, options, active){\r\n\t\tthis.download(type, filename, options, active, true);\r\n\t}\r\n\r\n\r\n\t///////////////////////////////////\r\n\t///////// Internal Logic //////////\r\n\t///////////////////////////////////\r\n\r\n\t//trigger file download\r\n\tdownload(type, filename, options, range, interceptCallback){\r\n\t\tvar downloadFunc = false;\r\n\r\n\t\tfunction buildLink(data, mime){\r\n\t\t\tif(interceptCallback){\r\n\t\t\t\tif(interceptCallback === true){\r\n\t\t\t\t\tthis.triggerDownload(data, mime, type, filename, true);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tinterceptCallback(data);\r\n\t\t\t\t}\r\n\r\n\t\t\t}else{\r\n\t\t\t\tthis.triggerDownload(data, mime, type, filename);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(typeof type == \"function\"){\r\n\t\t\tdownloadFunc = type;\r\n\t\t}else{\r\n\t\t\tif(Download.downloaders[type]){\r\n\t\t\t\tdownloadFunc = Download.downloaders[type];\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Download Error - No such download type found: \", type);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(downloadFunc){\r\n\t\t\tvar list = this.generateExportList(range);\r\n\r\n\t\t\tdownloadFunc.call(this.table, list , options || {}, buildLink);\r\n\t\t}\r\n\t}\r\n\r\n\tgenerateExportList(range){\r\n\t\tvar list = this.table.modules.export.generateExportList(this.table.options.downloadConfig, false, range || this.table.options.downloadRowRange, \"download\");\r\n\r\n\t\t//assign group header formatter\r\n\t\tvar groupHeader = this.table.options.groupHeaderDownload;\r\n\r\n\t\tif(groupHeader && !Array.isArray(groupHeader)){\r\n\t\t\tgroupHeader = [groupHeader];\r\n\t\t}\r\n\r\n\t\tlist.forEach((row) => {\r\n\t\t\tvar group;\r\n\r\n\t\t\tif(row.type === \"group\"){\r\n\t\t\t\tgroup = row.columns[0];\r\n\r\n\t\t\t\tif(groupHeader && groupHeader[row.indent]){\r\n\t\t\t\t\tgroup.value = groupHeader[row.indent](group.value, row.component._group.getRowCount(), row.component._group.getData(), row.component);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn list;\r\n\t}\r\n\r\n\ttriggerDownload(data, mime, type, filename, newTab){\r\n\t\tvar element = document.createElement('a'),\r\n\t\tblob = new Blob([data],{type:mime}),\r\n\t\tfilename = filename || \"Tabulator.\" + (typeof type === \"function\" ? \"txt\" : type);\r\n\r\n\t\tblob = this.table.options.downloadReady(data, blob);\r\n\r\n\t\tif(blob){\r\n\r\n\t\t\tif(newTab){\r\n\t\t\t\twindow.open(window.URL.createObjectURL(blob));\r\n\t\t\t}else{\r\n\t\t\t\tif(navigator.msSaveOrOpenBlob){\r\n\t\t\t\t\tnavigator.msSaveOrOpenBlob(blob, filename);\r\n\t\t\t\t}else{\r\n\t\t\t\t\telement.setAttribute('href', window.URL.createObjectURL(blob));\r\n\r\n\t\t\t\t\t//set file title\r\n\t\t\t\t\telement.setAttribute('download', filename);\r\n\r\n\t\t\t\t\t//trigger download\r\n\t\t\t\t\telement.style.display = 'none';\r\n\t\t\t\t\tdocument.body.appendChild(element);\r\n\t\t\t\t\telement.click();\r\n\r\n\t\t\t\t\t//remove temporary link element\r\n\t\t\t\t\tdocument.body.removeChild(element);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tthis.dispatchExternal(\"downloadComplete\");\r\n\t\t}\r\n\t}\r\n\r\n\tcommsReceived(table, action, data){\r\n\t\tswitch(action){\r\n\t\t\tcase \"intercept\":\r\n\t\t\tthis.download(data.type, \"\", data.options, data.active, data.intercept);\r\n\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n}\r\n\r\nDownload.moduleName = \"download\";\r\n\r\n//load defaults\r\nDownload.downloaders = defaultDownloaders;\r\n\r\nexport default Download;","export default function maskInput(el, options){\r\n\tvar mask = options.mask,\r\n\tmaskLetter = typeof options.maskLetterChar !== \"undefined\" ? options.maskLetterChar : \"A\",\r\n\tmaskNumber = typeof options.maskNumberChar !== \"undefined\" ? options.maskNumberChar : \"9\",\r\n\tmaskWildcard = typeof options.maskWildcardChar !== \"undefined\" ? options.maskWildcardChar : \"*\",\r\n\tsuccess = false;\r\n\r\n\tfunction fillSymbols(index){\r\n\t\tvar symbol = mask[index];\r\n\t\tif(typeof symbol !== \"undefined\" && symbol !== maskWildcard && symbol !== maskLetter && symbol !== maskNumber){\r\n\t\t\tel.value = el.value + \"\" + symbol;\r\n\t\t\tfillSymbols(index+1);\r\n\t\t}\r\n\t}\r\n\r\n\tel.addEventListener(\"keydown\", (e) => {\r\n\t\tvar index = el.value.length,\r\n\t\tchar = e.key;\r\n\r\n\t\tif(e.keyCode > 46){\r\n\t\t\tif(index >= mask.length){\r\n\t\t\t\te.preventDefault();\r\n\t\t\t\te.stopPropagation();\r\n\t\t\t\tsuccess = false;\r\n\t\t\t\treturn false;\r\n\t\t\t}else{\r\n\t\t\t\tswitch(mask[index]){\r\n\t\t\t\t\tcase maskLetter:\r\n\t\t\t\t\tif(char.toUpperCase() == char.toLowerCase()){\r\n\t\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\t\tsuccess = false;\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase maskNumber:\r\n\t\t\t\t\tif(isNaN(char)){\r\n\t\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\t\tsuccess = false;\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase maskWildcard:\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tdefault:\r\n\t\t\t\t\tif(char !== mask[index]){\r\n\t\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\t\tsuccess = false;\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tsuccess = true;\r\n\t\t}\r\n\r\n\t\treturn;\r\n\t});\r\n\r\n\tel.addEventListener(\"keyup\", (e) => {\r\n\t\tif(e.keyCode > 46){\r\n\t\t\tif(options.maskAutoFill){\r\n\t\t\t\tfillSymbols(el.value.length);\r\n\t\t\t}\r\n\t\t}\r\n\t});\r\n\r\n\r\n\tif(!el.placeholder){\r\n\t\tel.placeholder = mask;\r\n\t}\r\n\r\n\tif(options.maskAutoFill){\r\n\t\tfillSymbols(el.value.length);\r\n\t}\r\n}","import maskInput from '../../inputMask.js';\r\n\r\n//input element\r\nexport default function(cell, onRendered, success, cancel, editorParams){\r\n\t//create and style input\r\n\tvar cellValue = cell.getValue(),\r\n\tinput = document.createElement(\"input\");\r\n\r\n\tinput.setAttribute(\"type\", editorParams.search ? \"search\" : \"text\");\r\n\r\n\tinput.style.padding = \"4px\";\r\n\tinput.style.width = \"100%\";\r\n\tinput.style.boxSizing = \"border-box\";\r\n\r\n\tif(editorParams.elementAttributes && typeof editorParams.elementAttributes == \"object\"){\r\n\t\tfor (let key in editorParams.elementAttributes){\r\n\t\t\tif(key.charAt(0) == \"+\"){\r\n\t\t\t\tkey = key.slice(1);\r\n\t\t\t\tinput.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\r\n\t\t\t}else{\r\n\t\t\t\tinput.setAttribute(key, editorParams.elementAttributes[key]);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tinput.value = typeof cellValue !== \"undefined\" ? cellValue : \"\";\r\n\r\n\tonRendered(function(){\r\n\t\tinput.focus({preventScroll: true});\r\n\t\tinput.style.height = \"100%\";\r\n\t});\r\n\r\n\tfunction onChange(e){\r\n\t\tif(((cellValue === null || typeof cellValue === \"undefined\") && input.value !== \"\") || input.value !== cellValue){\r\n\t\t\tif(success(input.value)){\r\n\t\t\t\tcellValue = input.value; //persist value if successfully validated incase editor is used as header filter\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tcancel();\r\n\t\t}\r\n\t}\r\n\r\n\t//submit new value on blur or change\r\n\tinput.addEventListener(\"change\", onChange);\r\n\tinput.addEventListener(\"blur\", onChange);\r\n\r\n\t//submit new value on enter\r\n\tinput.addEventListener(\"keydown\", function(e){\r\n\t\tswitch(e.keyCode){\r\n\t\t\t// case 9:\r\n\t\t\tcase 13:\r\n\t\t\tonChange(e);\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 27:\r\n\t\t\tcancel();\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 35:\r\n\t\t\tcase 36:\r\n\t\t\te.stopPropagation();\r\n\t\t\tbreak;\r\n\t\t}\r\n\t});\r\n\r\n\tif(editorParams.mask){\r\n\t\tmaskInput(input, editorParams);\r\n\t}\r\n\r\n\treturn input;\r\n};","import maskInput from '../../inputMask.js';\r\n\r\n//resizable text area element\r\nexport default function(cell, onRendered, success, cancel, editorParams){\r\n var self = this,\r\n cellValue = cell.getValue(),\r\n vertNav = editorParams.verticalNavigation || \"hybrid\",\r\n value = String(cellValue !== null && typeof cellValue !== \"undefined\" ? cellValue : \"\"),\r\n count = (value.match(/(?:\\r\\n|\\r|\\n)/g) || []).length + 1,\r\n input = document.createElement(\"textarea\"),\r\n scrollHeight = 0;\r\n\r\n //create and style input\r\n input.style.display = \"block\";\r\n input.style.padding = \"2px\";\r\n input.style.height = \"100%\";\r\n input.style.width = \"100%\";\r\n input.style.boxSizing = \"border-box\";\r\n input.style.whiteSpace = \"pre-wrap\";\r\n input.style.resize = \"none\";\r\n\r\n if(editorParams.elementAttributes && typeof editorParams.elementAttributes == \"object\"){\r\n for (let key in editorParams.elementAttributes){\r\n if(key.charAt(0) == \"+\"){\r\n key = key.slice(1);\r\n input.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\r\n }else{\r\n input.setAttribute(key, editorParams.elementAttributes[key]);\r\n }\r\n }\r\n }\r\n\r\n input.value = value;\r\n\r\n onRendered(function(){\r\n input.focus({preventScroll: true});\r\n input.style.height = \"100%\";\r\n\r\n input.scrollHeight;\r\n input.style.height = input.scrollHeight + \"px\";\r\n cell.getRow().normalizeHeight();\r\n });\r\n\r\n function onChange(e){\r\n\r\n if(((cellValue === null || typeof cellValue === \"undefined\") && input.value !== \"\") || input.value !== cellValue){\r\n\r\n if(success(input.value)){\r\n cellValue = input.value; //persist value if successfully validated incase editor is used as header filter\r\n }\r\n\r\n setTimeout(function(){\r\n cell.getRow().normalizeHeight();\r\n },300)\r\n }else{\r\n cancel();\r\n }\r\n }\r\n\r\n //submit new value on blur or change\r\n input.addEventListener(\"change\", onChange);\r\n input.addEventListener(\"blur\", onChange);\r\n\r\n input.addEventListener(\"keyup\", function(){\r\n\r\n input.style.height = \"\";\r\n\r\n var heightNow = input.scrollHeight;\r\n\r\n input.style.height = heightNow + \"px\";\r\n\r\n if(heightNow != scrollHeight){\r\n scrollHeight = heightNow;\r\n cell.getRow().normalizeHeight();\r\n }\r\n });\r\n\r\n input.addEventListener(\"keydown\", function(e){\r\n\r\n switch(e.keyCode){\r\n case 27:\r\n cancel();\r\n break;\r\n\r\n case 38: //up arrow\r\n if(vertNav == \"editor\" || (vertNav == \"hybrid\" && input.selectionStart)){\r\n e.stopImmediatePropagation();\r\n e.stopPropagation();\r\n }\r\n\r\n break;\r\n\r\n case 40: //down arrow\r\n if(vertNav == \"editor\" || (vertNav == \"hybrid\" && input.selectionStart !== input.value.length)){\r\n e.stopImmediatePropagation();\r\n e.stopPropagation();\r\n }\r\n break;\r\n\r\n case 35:\r\n case 36:\r\n e.stopPropagation();\r\n break;\r\n }\r\n });\r\n\r\n if(editorParams.mask){\r\n maskInput(input, editorParams);\r\n }\r\n\r\n return input;\r\n};","import maskInput from '../../inputMask.js';\r\n\r\n//input element with type of number\r\nexport default function(cell, onRendered, success, cancel, editorParams){\r\n\tvar cellValue = cell.getValue(),\r\n\tvertNav = editorParams.verticalNavigation || \"editor\",\r\n\tinput = document.createElement(\"input\");\r\n\r\n\tinput.setAttribute(\"type\", \"number\");\r\n\r\n\tif(typeof editorParams.max != \"undefined\"){\r\n\t\tinput.setAttribute(\"max\", editorParams.max);\r\n\t}\r\n\r\n\tif(typeof editorParams.min != \"undefined\"){\r\n\t\tinput.setAttribute(\"min\", editorParams.min);\r\n\t}\r\n\r\n\tif(typeof editorParams.step != \"undefined\"){\r\n\t\tinput.setAttribute(\"step\", editorParams.step);\r\n\t}\r\n\r\n\t//create and style input\r\n\tinput.style.padding = \"4px\";\r\n\tinput.style.width = \"100%\";\r\n\tinput.style.boxSizing = \"border-box\";\r\n\r\n\tif(editorParams.elementAttributes && typeof editorParams.elementAttributes == \"object\"){\r\n\t\tfor (let key in editorParams.elementAttributes){\r\n\t\t\tif(key.charAt(0) == \"+\"){\r\n\t\t\t\tkey = key.slice(1);\r\n\t\t\t\tinput.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\r\n\t\t\t}else{\r\n\t\t\t\tinput.setAttribute(key, editorParams.elementAttributes[key]);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tinput.value = cellValue;\r\n\r\n\tvar blurFunc = function(e){\r\n\t\tonChange();\r\n\t};\r\n\r\n\tonRendered(function () {\r\n\t\t//submit new value on blur\r\n\t\tinput.removeEventListener(\"blur\", blurFunc);\r\n\r\n\t\tinput.focus({preventScroll: true});\r\n\t\tinput.style.height = \"100%\";\r\n\r\n\t\t//submit new value on blur\r\n\t\tinput.addEventListener(\"blur\", blurFunc);\r\n\t});\r\n\r\n\tfunction onChange(){\r\n\t\tvar value = input.value;\r\n\r\n\t\tif(!isNaN(value) && value !==\"\"){\r\n\t\t\tvalue = Number(value);\r\n\t\t}\r\n\r\n\t\tif(value !== cellValue){\r\n\t\t\tif(success(value)){\r\n\t\t\t\tcellValue = value; //persist value if successfully validated incase editor is used as header filter\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tcancel();\r\n\t\t}\r\n\t}\r\n\r\n\t//submit new value on enter\r\n\tinput.addEventListener(\"keydown\", function(e){\r\n\t\tswitch(e.keyCode){\r\n\t\t\tcase 13:\r\n\t\t\t// case 9:\r\n\t\t\tonChange();\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 27:\r\n\t\t\tcancel();\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 38: //up arrow\r\n\t\t\tcase 40: //down arrow\r\n\t\t\tif(vertNav == \"editor\"){\r\n\t\t\t\te.stopImmediatePropagation();\r\n\t\t\t\te.stopPropagation();\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 35:\r\n\t\t\tcase 36:\r\n\t\t\te.stopPropagation();\r\n\t\t\tbreak;\r\n\t\t}\r\n\t});\r\n\r\n\tif(editorParams.mask){\r\n\t\tmaskInput(input, editorParams);\r\n\t}\r\n\r\n\treturn input;\r\n};","//input element with type of number\r\nexport default function(cell, onRendered, success, cancel, editorParams){\r\n\tvar cellValue = cell.getValue(),\r\n\tinput = document.createElement(\"input\");\r\n\r\n\tinput.setAttribute(\"type\", \"range\");\r\n\r\n\tif (typeof editorParams.max != \"undefined\") {\r\n\t\tinput.setAttribute(\"max\", editorParams.max);\r\n\t}\r\n\r\n\tif (typeof editorParams.min != \"undefined\") {\r\n\t\tinput.setAttribute(\"min\", editorParams.min);\r\n\t}\r\n\r\n\tif (typeof editorParams.step != \"undefined\") {\r\n\t\tinput.setAttribute(\"step\", editorParams.step);\r\n\t}\r\n\r\n\t//create and style input\r\n\tinput.style.padding = \"4px\";\r\n\tinput.style.width = \"100%\";\r\n\tinput.style.boxSizing = \"border-box\";\r\n\r\n\tif(editorParams.elementAttributes && typeof editorParams.elementAttributes == \"object\"){\r\n\t\tfor (let key in editorParams.elementAttributes){\r\n\t\t\tif(key.charAt(0) == \"+\"){\r\n\t\t\t\tkey = key.slice(1);\r\n\t\t\t\tinput.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\r\n\t\t\t}else{\r\n\t\t\t\tinput.setAttribute(key, editorParams.elementAttributes[key]);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tinput.value = cellValue;\r\n\r\n\tonRendered(function () {\r\n\t\tinput.focus({preventScroll: true});\r\n\t\tinput.style.height = \"100%\";\r\n\t});\r\n\r\n\tfunction onChange(){\r\n\t\tvar value = input.value;\r\n\r\n\t\tif(!isNaN(value) && value !==\"\"){\r\n\t\t\tvalue = Number(value);\r\n\t\t}\r\n\r\n\t\tif(value != cellValue){\r\n\t\t\tif(success(value)){\r\n\t\t\t\tcellValue = value; //persist value if successfully validated incase editor is used as header filter\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tcancel();\r\n\t\t}\r\n\t}\r\n\r\n\t//submit new value on blur\r\n\tinput.addEventListener(\"blur\", function(e){\r\n\t\tonChange();\r\n\t});\r\n\r\n\t//submit new value on enter\r\n\tinput.addEventListener(\"keydown\", function(e){\r\n\t\tswitch(e.keyCode){\r\n\t\t\tcase 13:\r\n\t\t\t// case 9:\r\n\t\t\tonChange();\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 27:\r\n\t\t\tcancel();\r\n\t\t\tbreak;\r\n\t\t}\r\n\t});\r\n\r\n\treturn input;\r\n};","import Helpers from '../../../../core/tools/Helpers.js';\r\n\r\n//dropdown select editor\r\nexport default function(cell, onRendered, success, cancel, editorParams){\r\n\tvar self = this,\r\n\tcellEl = cell.getElement(),\r\n\tinitialValue = cell.getValue(),\r\n\tvertNav = editorParams.verticalNavigation || \"editor\",\r\n\tinitialDisplayValue = typeof initialValue !== \"undefined\" || initialValue === null ? (Array.isArray(initialValue) ? initialValue : [initialValue]) : (typeof editorParams.defaultValue !== \"undefined\" ? editorParams.defaultValue : []),\r\n\tinput = document.createElement(\"input\"),\r\n\tlistEl = document.createElement(\"div\"),\r\n\tmultiselect = editorParams.multiselect,\r\n\tdataItems = [],\r\n\tcurrentItem = {},\r\n\tdisplayItems = [],\r\n\tcurrentItems = [],\r\n\tblurable = true,\r\n\tblockListShow = false,\r\n\tsearchWord = \"\",\r\n\tsearchWordTimeout = null;\r\n\r\n\tif(Array.isArray(editorParams) || (!Array.isArray(editorParams) && typeof editorParams === \"object\" && !editorParams.values)){\r\n\t\tconsole.warn(\"DEPRECATION WARNING - values for the select editor must now be passed into the values property of the editorParams object, not as the editorParams object\");\r\n\t\teditorParams = {values:editorParams};\r\n\t}\r\n\r\n\tfunction getUniqueColumnValues(field){\r\n\t\tvar output = {},\r\n\t\tdata = self.table.getData(),\r\n\t\tcolumn;\r\n\r\n\t\tif(field){\r\n\t\t\tcolumn = self.table.columnManager.getColumnByField(field);\r\n\t\t}else{\r\n\t\t\tcolumn = cell.getColumn()._getSelf();\r\n\t\t}\r\n\r\n\t\tif(column){\r\n\t\t\tdata.forEach(function(row){\r\n\t\t\t\tvar val = column.getFieldValue(row);\r\n\r\n\t\t\t\tif(val !== null && typeof val !== \"undefined\" && val !== \"\"){\r\n\t\t\t\t\toutput[val] = true;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"unable to find matching column to create select lookup list:\", field);\r\n\t\t}\r\n\r\n\t\treturn Object.keys(output);\r\n\t}\r\n\r\n\tfunction parseItems(inputValues, curentValues){\r\n\t\tvar dataList = [];\r\n\t\tvar displayList = [];\r\n\r\n\t\tfunction processComplexListItem(item){\r\n\t\t\tvar item = {\r\n\t\t\t\tlabel:item.label,\r\n\t\t\t\tvalue:item.value,\r\n\t\t\t\titemParams:item.itemParams,\r\n\t\t\t\telementAttributes: item.elementAttributes,\r\n\t\t\t\telement:false,\r\n\t\t\t};\r\n\r\n\t\t\t// if(item.value === curentValue || (!isNaN(parseFloat(item.value)) && !isNaN(parseFloat(item.value)) && parseFloat(item.value) === parseFloat(curentValue))){\r\n\t\t\t// \tsetCurrentItem(item);\r\n\t\t\t// }\r\n\r\n\t\t\tif(curentValues.indexOf(item.value) > -1){\r\n\t\t\t\tsetItem(item);\r\n\t\t\t}\r\n\r\n\t\t\tdataList.push(item);\r\n\t\t\tdisplayList.push(item);\r\n\r\n\t\t\treturn item;\r\n\t\t}\r\n\r\n\t\tif(typeof inputValues == \"function\"){\r\n\t\t\tinputValues = inputValues(cell);\r\n\t\t}\r\n\r\n\t\tif(Array.isArray(inputValues)){\r\n\t\t\tinputValues.forEach(function(value){\r\n\t\t\t\tvar item;\r\n\r\n\t\t\t\tif(typeof value === \"object\"){\r\n\r\n\t\t\t\t\tif(value.options){\r\n\t\t\t\t\t\titem = {\r\n\t\t\t\t\t\t\tlabel:value.label,\r\n\t\t\t\t\t\t\tgroup:true,\r\n\t\t\t\t\t\t\titemParams:value.itemParams,\r\n\t\t\t\t\t\t\telementAttributes:value.elementAttributes,\r\n\t\t\t\t\t\t\telement:false,\r\n\t\t\t\t\t\t};\r\n\r\n\t\t\t\t\t\tdisplayList.push(item);\r\n\r\n\t\t\t\t\t\tvalue.options.forEach(function(item){\r\n\t\t\t\t\t\t\tprocessComplexListItem(item);\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tprocessComplexListItem(value);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}else{\r\n\r\n\t\t\t\t\titem = {\r\n\t\t\t\t\t\tlabel:value,\r\n\t\t\t\t\t\tvalue:value,\r\n\t\t\t\t\t\telement:false,\r\n\t\t\t\t\t};\r\n\r\n\t\t\t\t\t// if(item.value === curentValue || (!isNaN(parseFloat(item.value)) && !isNaN(parseFloat(item.value)) && parseFloat(item.value) === parseFloat(curentValue))){\r\n\t\t\t\t\t// \tsetCurrentItem(item);\r\n\t\t\t\t\t// }\r\n\r\n\t\t\t\t\tif(curentValues.indexOf(item.value) > -1){\r\n\t\t\t\t\t\tsetItem(item);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tdataList.push(item);\r\n\t\t\t\t\tdisplayList.push(item);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tfor(var key in inputValues){\r\n\t\t\t\tvar item = {\r\n\t\t\t\t\tlabel:inputValues[key],\r\n\t\t\t\t\tvalue:key,\r\n\t\t\t\t\telement:false,\r\n\t\t\t\t};\r\n\r\n\t\t\t\t// if(item.value === curentValue || (!isNaN(parseFloat(item.value)) && !isNaN(parseFloat(item.value)) && parseFloat(item.value) === parseFloat(curentValue))){\r\n\t\t\t\t// \tsetCurrentItem(item);\r\n\t\t\t\t// }\r\n\r\n\t\t\t\tif(curentValues.indexOf(item.value) > -1){\r\n\t\t\t\t\tsetItem(item);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tdataList.push(item);\r\n\t\t\t\tdisplayList.push(item);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(editorParams.sortValuesList){\r\n\t\t\tdataList.sort((a, b) => {\r\n\t\t\t\treturn a.label < b.label ? -1 : (a.label > b.label ? 1 : 0);\r\n\t\t\t});\r\n\r\n\t\t\tdisplayList.sort((a, b) => {\r\n\t\t\t\treturn a.label < b.label ? -1 : (a.label > b.label ? 1 : 0);\r\n\t\t\t});\r\n\r\n\t\t\tif(editorParams.sortValuesList !== \"asc\"){\r\n\t\t\t\tdataList.reverse();\r\n\t\t\t\tdisplayList.reverse();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tdataItems = dataList;\r\n\t\tdisplayItems = displayList;\r\n\r\n\t\tfillList();\r\n\t}\r\n\r\n\tfunction fillList(){\r\n\t\twhile(listEl.firstChild) listEl.removeChild(listEl.firstChild);\r\n\r\n\t\tdisplayItems.forEach(function(item){\r\n\r\n\t\t\tvar el = item.element;\r\n\r\n\t\t\tif(!el){\r\n\t\t\t\tel = document.createElement(\"div\");\r\n\t\t\t\titem.label = editorParams.listItemFormatter ? editorParams.listItemFormatter(item.value, item.label, cell, el, item.itemParams) : item.label;\r\n\t\t\t\tif(item.group){\r\n\t\t\t\t\tel.classList.add(\"tabulator-edit-select-list-group\");\r\n\t\t\t\t\tel.tabIndex = 0;\r\n\t\t\t\t\tel.innerHTML = item.label === \"\" ? \" \" : item.label;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tel.classList.add(\"tabulator-edit-select-list-item\");\r\n\t\t\t\t\tel.tabIndex = 0;\r\n\t\t\t\t\tel.innerHTML = item.label === \"\" ? \" \" : item.label;\r\n\r\n\t\t\t\t\tel.addEventListener(\"click\", function(){\r\n\t\t\t\t\t\tblockListShow = true;\r\n\r\n\t\t\t\t\t\tsetTimeout(() => {\r\n\t\t\t\t\t\t\tblockListShow = false;\r\n\t\t\t\t\t\t}, 10);\r\n\r\n\t\t\t\t\t\t// setCurrentItem(item);\r\n\t\t\t\t\t\t// chooseItem();\r\n\t\t\t\t\t\tif(multiselect){\r\n\t\t\t\t\t\t\ttoggleItem(item);\r\n\t\t\t\t\t\t\tinput.focus();\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\tchooseItem(item);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\t// if(item === currentItem){\r\n\t\t\t\t\t// \tel.classList.add(\"active\");\r\n\t\t\t\t\t// }\r\n\r\n\t\t\t\t\tif(currentItems.indexOf(item) > -1){\r\n\t\t\t\t\t\tel.classList.add(\"active\");\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(item.elementAttributes && typeof item.elementAttributes == \"object\"){\r\n\t\t\t\t\tfor (let key in item.elementAttributes){\r\n\t\t\t\t\t\tif(key.charAt(0) == \"+\"){\r\n\t\t\t\t\t\t\tkey = key.slice(1);\r\n\t\t\t\t\t\t\tel.setAttribute(key, input.getAttribute(key) + item.elementAttributes[\"+\" + key]);\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\tel.setAttribute(key, item.elementAttributes[key]);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tel.addEventListener(\"mousedown\", function(){\r\n\t\t\t\t\tblurable = false;\r\n\r\n\t\t\t\t\tsetTimeout(function(){\r\n\t\t\t\t\t\tblurable = true;\r\n\t\t\t\t\t}, 10);\r\n\t\t\t\t});\r\n\r\n\t\t\t\titem.element = el;\r\n\r\n\r\n\t\t\t}\r\n\r\n\t\t\tlistEl.appendChild(el);\r\n\t\t});\r\n\t}\r\n\r\n\r\n\tfunction setCurrentItem(item, active){\r\n\r\n\t\tif(!multiselect && currentItem && currentItem.element){\r\n\t\t\tcurrentItem.element.classList.remove(\"active\");\r\n\t\t}\r\n\r\n\t\tif(currentItem && currentItem.element){\r\n\t\t\tcurrentItem.element.classList.remove(\"focused\");\r\n\t\t}\r\n\r\n\t\tcurrentItem = item;\r\n\r\n\t\tif(item.element){\r\n\t\t\titem.element.classList.add(\"focused\");\r\n\t\t\tif(active){\r\n\t\t\t\titem.element.classList.add(\"active\");\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(item && item.element && item.element.scrollIntoView){\r\n\t\t\titem.element.scrollIntoView({behavior: 'smooth', block: 'nearest', inline: 'start'});\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t// function chooseItem(){\r\n\t// \thideList();\r\n\r\n\t// \tif(initialValue !== currentItem.value){\r\n\t// \t\tinitialValue = currentItem.value;\r\n\t// \t\tsuccess(currentItem.value);\r\n\t// \t}else{\r\n\t// \t\tcancel();\r\n\t// \t}\r\n\t// }\r\n\r\n\tfunction setItem(item) {\r\n\t\tvar index = currentItems.indexOf(item);\r\n\r\n\t\tif(index == -1){\r\n\t\t\tcurrentItems.push(item);\r\n\t\t\tsetCurrentItem(item, true);\r\n\t\t}\r\n\r\n\t\tfillInput();\r\n\t}\r\n\r\n\tfunction unsetItem(index) {\r\n\t\tvar item = currentItems[index];\r\n\r\n\t\tif(index > -1){\r\n\t\t\tcurrentItems.splice(index, 1);\r\n\t\t\tif(item.element){\r\n\t\t\t\titem.element.classList.remove(\"active\");\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tfunction toggleItem(item) {\r\n\t\tif(!item){\r\n\t\t\titem = currentItem;\r\n\t\t}\r\n\r\n\t\tvar index = currentItems.indexOf(item);\r\n\r\n\t\tif(index > -1){\r\n\t\t\tunsetItem(index);\r\n\t\t}else{\r\n\t\t\tif(multiselect !== true && currentItems.length >= multiselect){\r\n\t\t\t\tunsetItem(0);\r\n\t\t\t}\r\n\r\n\t\t\tsetItem(item);\r\n\t\t}\r\n\r\n\t\tfillInput();\r\n\r\n\t}\r\n\r\n\tfunction chooseItem(item){\r\n\t\thideList();\r\n\r\n\t\tif(!item){\r\n\t\t\titem = currentItem;\r\n\t\t}\r\n\r\n\t\tif(item){\r\n\t\t\tinput.value = item.label;\r\n\t\t\tsuccess(item.value);\r\n\t\t}\r\n\r\n\t\tinitialDisplayValue = [item.value];\r\n\t}\r\n\r\n\r\n\tfunction chooseItems(silent){\r\n\t\tif(!silent){\r\n\t\t\thideList();\r\n\t\t}\r\n\r\n\t\tvar output = [];\r\n\r\n\t\tcurrentItems.forEach((item) => {\r\n\t\t\toutput.push(item.value);\r\n\t\t});\r\n\r\n\t\tinitialDisplayValue = output;\r\n\r\n\t\tsuccess(output);\r\n\t}\r\n\r\n\tfunction fillInput(){\r\n\t\tvar output = [];\r\n\r\n\t\tcurrentItems.forEach((item) => {\r\n\t\t\toutput.push(item.label);\r\n\t\t});\r\n\r\n\t\tinput.value = output.join(\", \");\r\n\r\n\t\tif(self.currentCell === false){\r\n\t\t\tchooseItems(true);\r\n\t\t}\r\n\t}\r\n\r\n\r\n\tfunction unsetItems() {\r\n\r\n\t\tvar len = currentItems.length;\r\n\r\n\t\tfor(let i = 0; i < len; i++){\r\n\t\t\tunsetItem(0);\r\n\t\t}\r\n\t}\r\n\r\n\tfunction cancelItem(){\r\n\t\thideList();\r\n\t\tcancel();\r\n\t}\r\n\r\n\tfunction showList(){\r\n\t\tcurrentItems = [];\r\n\r\n\t\tif(!listEl.parentNode){\r\n\t\t\tif(editorParams.values === true){\r\n\t\t\t\tparseItems(getUniqueColumnValues(), initialDisplayValue);\r\n\t\t\t}else if(typeof editorParams.values === \"string\"){\r\n\t\t\t\tparseItems(getUniqueColumnValues(editorParams.values), initialDisplayValue);\r\n\t\t\t}else{\r\n\t\t\t\tparseItems(editorParams.values || [], initialDisplayValue);\r\n\t\t\t}\r\n\r\n\r\n\t\t\tvar offset = Helpers.elOffset(cellEl);\r\n\r\n\t\t\tlistEl.style.minWidth = cellEl.offsetWidth + \"px\";\r\n\r\n\t\t\tlistEl.style.top = (offset.top + cellEl.offsetHeight) + \"px\";\r\n\t\t\tlistEl.style.left = offset.left + \"px\";\r\n\r\n\r\n\t\t\tlistEl.addEventListener(\"mousedown\", function(e){\r\n\t\t\t\tblurable = false;\r\n\r\n\t\t\t\tsetTimeout(function(){\r\n\t\t\t\t\tblurable = true;\r\n\t\t\t\t}, 10);\r\n\t\t\t});\r\n\r\n\t\t\tdocument.body.appendChild(listEl);\r\n\t\t}\r\n\t}\r\n\r\n\tfunction hideList(){\r\n\t\tif(listEl.parentNode){\r\n\t\t\tlistEl.parentNode.removeChild(listEl);\r\n\t\t}\r\n\r\n\t\tremoveScrollListener();\r\n\t}\r\n\r\n\tfunction removeScrollListener() {\r\n\t\tself.table.rowManager.element.removeEventListener(\"scroll\", cancelItem);\r\n\t}\r\n\r\n\tfunction scrollTovalue(char){\r\n\r\n\t\tclearTimeout(searchWordTimeout);\r\n\r\n\t\tvar character = String.fromCharCode(event.keyCode).toLowerCase();\r\n\t\tsearchWord += character.toLowerCase();\r\n\r\n\t\tvar match = dataItems.find((item) => {\r\n\t\t\treturn typeof item.label !== \"undefined\" && item.label.toLowerCase().startsWith(searchWord);\r\n\t\t});\r\n\r\n\t\tif(match){\r\n\t\t\tsetCurrentItem(match, !multiselect);\r\n\t\t}\r\n\r\n\t\tsearchWordTimeout = setTimeout(() => {\r\n\t\t\tsearchWord = \"\";\r\n\t\t}, 800)\r\n\t}\r\n\r\n\t//style input\r\n\tinput.setAttribute(\"type\", \"text\");\r\n\r\n\tinput.style.padding = \"4px\";\r\n\tinput.style.width = \"100%\";\r\n\tinput.style.boxSizing = \"border-box\";\r\n\tinput.style.cursor = \"default\";\r\n\tinput.readOnly = (this.currentCell != false);\r\n\r\n\tif(editorParams.elementAttributes && typeof editorParams.elementAttributes == \"object\"){\r\n\t\tfor (let key in editorParams.elementAttributes){\r\n\t\t\tif(key.charAt(0) == \"+\"){\r\n\t\t\t\tkey = key.slice(1);\r\n\t\t\t\tinput.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\r\n\t\t\t}else{\r\n\t\t\t\tinput.setAttribute(key, editorParams.elementAttributes[key]);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tinput.value = typeof initialValue !== \"undefined\" || initialValue === null ? initialValue : \"\";\r\n\r\n\t// if(editorParams.values === true){\r\n\t// \tparseItems(getUniqueColumnValues(), initialValue);\r\n\t// }else if(typeof editorParams.values === \"string\"){\r\n\t// \tparseItems(getUniqueColumnValues(editorParams.values), initialValue);\r\n\t// }else{\r\n\t// \tparseItems(editorParams.values || [], initialValue);\r\n\t// }\r\n\r\n\tinput.addEventListener(\"search\", function(e){\r\n\t\tif(!input.value){\r\n\t\t\tunsetItems();\r\n\t\t\tchooseItems();\r\n\t\t}\r\n\t});\r\n\r\n\t//allow key based navigation\r\n\tinput.addEventListener(\"keydown\", function(e){\r\n\t\tvar index;\r\n\r\n\t\tswitch(e.keyCode){\r\n\t\t\tcase 38: //up arrow\r\n\t\t\tindex = dataItems.indexOf(currentItem);\r\n\r\n\t\t\tif(vertNav == \"editor\" || (vertNav == \"hybrid\" && index)){\r\n\t\t\t\te.stopImmediatePropagation();\r\n\t\t\t\te.stopPropagation();\r\n\t\t\t\te.preventDefault();\r\n\r\n\t\t\t\tif(index > 0){\r\n\t\t\t\t\tsetCurrentItem(dataItems[index - 1], !multiselect);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 40: //down arrow\r\n\t\t\tindex = dataItems.indexOf(currentItem);\r\n\r\n\t\t\tif(vertNav == \"editor\" || (vertNav == \"hybrid\" && index < dataItems.length - 1)){\r\n\t\t\t\te.stopImmediatePropagation();\r\n\t\t\t\te.stopPropagation();\r\n\t\t\t\te.preventDefault();\r\n\r\n\t\t\t\tif(index < dataItems.length - 1){\r\n\t\t\t\t\tif(index == -1){\r\n\t\t\t\t\t\tsetCurrentItem(dataItems[0], !multiselect);\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tsetCurrentItem(dataItems[index + 1], !multiselect);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 37: //left arrow\r\n\t\t\tcase 39: //right arrow\r\n\t\t\te.stopImmediatePropagation();\r\n\t\t\te.stopPropagation();\r\n\t\t\te.preventDefault();\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 13: //enter\r\n\t\t\t// chooseItem();\r\n\r\n\t\t\tif(multiselect){\r\n\t\t\t\ttoggleItem();\r\n\t\t\t}else{\r\n\t\t\t\tchooseItem();\r\n\t\t\t}\r\n\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 27: //escape\r\n\t\t\tcancelItem();\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 9: //tab\r\n\t\t\tbreak;\r\n\r\n\t\t\tdefault:\r\n\t\t\tif(self.currentCell === false){\r\n\t\t\t\te.preventDefault();\r\n\t\t\t}\r\n\r\n\t\t\tif(e.keyCode >= 38 && e.keyCode <= 90){\r\n\t\t\t\tscrollTovalue(e.keyCode);\r\n\t\t\t}\r\n\t\t}\r\n\t});\r\n\r\n\tinput.addEventListener(\"blur\", function(e){\r\n\t\tif(blurable){\r\n\t\t\tif(multiselect){\r\n\t\t\t\tchooseItems();\r\n\t\t\t}else{\r\n\t\t\t\tcancelItem();\r\n\t\t\t}\r\n\t\t}\r\n\t});\r\n\r\n\tinput.addEventListener(\"focus\", function(e){\r\n\t\tif(!blockListShow){\r\n\t\t\tshowList();\r\n\t\t}\r\n\t});\r\n\r\n\t//style list element\r\n\tlistEl = document.createElement(\"div\");\r\n\tlistEl.classList.add(\"tabulator-edit-select-list\");\r\n\r\n\tonRendered(function(){\r\n\t\tinput.style.height = \"100%\";\r\n\t\tinput.focus({preventScroll: true});\r\n\t});\r\n\r\n\tsetTimeout(() => {\r\n\t\tthis.table.rowManager.element.addEventListener(\"scroll\", cancelItem);\r\n\t}, 10);\r\n\r\n\treturn input;\r\n};","import Helpers from '../../../../core/tools/Helpers.js';\r\nimport maskInput from '../../inputMask.js';\r\n\r\n//autocomplete\r\nexport default function(cell, onRendered, success, cancel, editorParams){\r\n\tvar self = this,\r\n\tcellEl = cell.getElement(),\r\n\tinitialValue = cell.getValue(),\r\n\tvertNav = editorParams.verticalNavigation || \"editor\",\r\n\tinitialDisplayValue = typeof initialValue !== \"undefined\" || initialValue === null ? initialValue : (typeof editorParams.defaultValue !== \"undefined\" ? editorParams.defaultValue : \"\"),\r\n\tinput = document.createElement(\"input\"),\r\n\tlistEl = document.createElement(\"div\"),\r\n\tallItems = [],\r\n\tdisplayItems = [],\r\n\tvalues = [],\r\n\tcurrentItem = false,\r\n\tblurable = true,\r\n\tuniqueColumnValues = false;\r\n\r\n\t//style input\r\n\tinput.setAttribute(\"type\", \"search\");\r\n\r\n\tinput.style.padding = \"4px\";\r\n\tinput.style.width = \"100%\";\r\n\tinput.style.boxSizing = \"border-box\";\r\n\r\n\tif(editorParams.elementAttributes && typeof editorParams.elementAttributes == \"object\"){\r\n\t\tfor (let key in editorParams.elementAttributes){\r\n\t\t\tif(key.charAt(0) == \"+\"){\r\n\t\t\t\tkey = key.slice(1);\r\n\t\t\t\tinput.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\r\n\t\t\t}else{\r\n\t\t\t\tinput.setAttribute(key, editorParams.elementAttributes[key]);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//style list element\r\n\tlistEl.classList.add(\"tabulator-edit-select-list\");\r\n\r\n\tlistEl.addEventListener(\"mousedown\", function(e){\r\n\t\tblurable = false;\r\n\r\n\t\tsetTimeout(function(){\r\n\t\t\tblurable = true;\r\n\t\t}, 10);\r\n\t});\r\n\r\n\r\n\tfunction genUniqueColumnValues(){\r\n\t\tif(editorParams.values === true){\r\n\t\t\tuniqueColumnValues = getUniqueColumnValues();\r\n\t\t}else if(typeof editorParams.values === \"string\"){\r\n\t\t\tuniqueColumnValues = getUniqueColumnValues(editorParams.values);\r\n\t\t}\r\n\t}\r\n\r\n\tfunction getUniqueColumnValues(field){\r\n\t\tvar output = {},\r\n\t\tdata = self.table.getData(),\r\n\t\tcolumn;\r\n\r\n\t\tif(field){\r\n\t\t\tcolumn = self.table.columnManager.getColumnByField(field);\r\n\t\t}else{\r\n\t\t\tcolumn = cell.getColumn()._getSelf();\r\n\t\t}\r\n\r\n\t\tif(column){\r\n\t\t\tdata.forEach(function(row){\r\n\t\t\t\tvar val = column.getFieldValue(row);\r\n\r\n\t\t\t\tif(val !== null && typeof val !== \"undefined\" && val !== \"\"){\r\n\t\t\t\t\toutput[val] = true;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tif(editorParams.sortValuesList){\r\n\t\t\t\tif(editorParams.sortValuesList == \"asc\"){\r\n\t\t\t\t\toutput = Object.keys(output).sort();\r\n\t\t\t\t}else{\r\n\t\t\t\t\toutput = Object.keys(output).sort().reverse();\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\toutput = Object.keys(output);\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"unable to find matching column to create autocomplete lookup list:\", field);\r\n\t\t}\r\n\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tfunction filterList(term, intialLoad){\r\n\t\tvar matches = [],\r\n\t\tvalues, items, searchEl;\r\n\r\n\t\t//lookup base values list\r\n\t\tif(uniqueColumnValues){\r\n\t\t\tvalues = uniqueColumnValues;\r\n\t\t}else{\r\n\t\t\tvalues = editorParams.values || [];\r\n\t\t}\r\n\r\n\t\tif(editorParams.searchFunc){\r\n\t\t\tmatches = editorParams.searchFunc(term, values);\r\n\r\n\t\t\tif(matches instanceof Promise){\r\n\r\n\t\t\t\taddNotice(typeof editorParams.searchingPlaceholder !== \"undefined\" ? editorParams.searchingPlaceholder : \"Searching...\");\r\n\r\n\t\t\t\tmatches.then((result) => {\r\n\t\t\t\t\tfillListIfNotEmpty(parseItems(result), intialLoad);\r\n\t\t\t\t}).catch((err) => {\r\n\t\t\t\t\tconsole.err(\"error in autocomplete search promise:\", err);\r\n\t\t\t\t});\r\n\r\n\t\t\t}else{\r\n\t\t\t\tfillListIfNotEmpty(parseItems(matches), intialLoad);\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\titems = parseItems(values);\r\n\r\n\t\t\tif(term === \"\"){\r\n\t\t\t\tif(editorParams.showListOnEmpty){\r\n\t\t\t\t\tmatches = items;\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\titems.forEach(function(item){\r\n\t\t\t\t\tif(item.value !== null || typeof item.value !== \"undefined\"){\r\n\t\t\t\t\t\tif(String(item.value).toLowerCase().indexOf(String(term).toLowerCase()) > -1 || String(item.title).toLowerCase().indexOf(String(term).toLowerCase()) > -1){\r\n\t\t\t\t\t\t\tmatches.push(item);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\tfillListIfNotEmpty(matches, intialLoad);\r\n\t\t}\r\n\t}\r\n\r\n\tfunction addNotice(notice){\r\n\t\tvar searchEl = document.createElement(\"div\");\r\n\r\n\t\tclearList();\r\n\r\n\t\tif(notice !== false){\r\n\t\t\tsearchEl.classList.add(\"tabulator-edit-select-list-notice\");\r\n\t\t\tsearchEl.tabIndex = 0;\r\n\r\n\t\t\tif(notice instanceof Node){\r\n\t\t\t\tsearchEl.appendChild(notice);\r\n\t\t\t}else{\r\n\t\t\t\tsearchEl.innerHTML = notice;\r\n\t\t\t}\r\n\r\n\t\t\tlistEl.appendChild(searchEl);\r\n\t\t}\r\n\t}\r\n\r\n\tfunction parseItems(inputValues){\r\n\t\tvar itemList = [];\r\n\r\n\t\tif(Array.isArray(inputValues)){\r\n\t\t\tinputValues.forEach(function(value){\r\n\r\n\t\t\t\tvar item = {};\r\n\r\n\t\t\t\tif(typeof value === \"object\"){\r\n\t\t\t\t\titem.title = editorParams.listItemFormatter ? editorParams.listItemFormatter(value.value, value.label) : value.label;\r\n\t\t\t\t\titem.value = value.value;\r\n\t\t\t\t}else{\r\n\t\t\t\t\titem.title = editorParams.listItemFormatter ? editorParams.listItemFormatter(value, value) : value;\r\n\t\t\t\t\titem.value = value;\r\n\t\t\t\t}\r\n\r\n\t\t\t\titemList.push(item);\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tfor(var key in inputValues){\r\n\t\t\t\tvar item = {\r\n\t\t\t\t\ttitle:editorParams.listItemFormatter ? editorParams.listItemFormatter(key, inputValues[key]) : inputValues[key],\r\n\t\t\t\t\tvalue:key,\r\n\t\t\t\t};\r\n\r\n\t\t\t\titemList.push(item);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn itemList;\r\n\t}\r\n\r\n\tfunction clearList(){\r\n\t\twhile(listEl.firstChild) listEl.removeChild(listEl.firstChild);\r\n\t}\r\n\r\n\tfunction fillListIfNotEmpty(items, intialLoad){\r\n\t\tif(items.length){\r\n\t\t\tfillList(items, intialLoad);\r\n\t\t}else{\r\n\t\t\tif(editorParams.emptyPlaceholder){\r\n\t\t\t\taddNotice(editorParams.emptyPlaceholder);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tfunction fillList(items, intialLoad){\r\n\t\tvar current = false;\r\n\r\n\t\tclearList();\r\n\r\n\t\tdisplayItems = items;\r\n\r\n\t\tdisplayItems.forEach(function(item){\r\n\t\t\tvar el = item.element;\r\n\r\n\t\t\tif(!el){\r\n\t\t\t\tel = document.createElement(\"div\");\r\n\t\t\t\tel.classList.add(\"tabulator-edit-select-list-item\");\r\n\t\t\t\tel.tabIndex = 0;\r\n\t\t\t\tel.innerHTML = item.title;\r\n\r\n\t\t\t\tel.addEventListener(\"click\", function(e){\r\n\t\t\t\t\tsetCurrentItem(item);\r\n\t\t\t\t\tchooseItem();\r\n\t\t\t\t});\r\n\r\n\t\t\t\tel.addEventListener(\"mousedown\", function(e){\r\n\t\t\t\t\tblurable = false;\r\n\r\n\t\t\t\t\tsetTimeout(function(){\r\n\t\t\t\t\t\tblurable = true;\r\n\t\t\t\t\t}, 10);\r\n\t\t\t\t});\r\n\r\n\t\t\t\titem.element = el;\r\n\r\n\t\t\t\tif(intialLoad && item.value == initialValue){\r\n\t\t\t\t\tinput.value = item.title;\r\n\t\t\t\t\titem.element.classList.add(\"active\");\r\n\t\t\t\t\tcurrent = true;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(item === currentItem){\r\n\t\t\t\t\titem.element.classList.add(\"active\");\r\n\t\t\t\t\tcurrent = true;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tlistEl.appendChild(el);\r\n\t\t});\r\n\r\n\t\tif(!current){\r\n\t\t\tsetCurrentItem(false);\r\n\t\t}\r\n\t}\r\n\r\n\tfunction chooseItem(){\r\n\t\thideList();\r\n\r\n\t\tif(currentItem){\r\n\t\t\tif(initialValue !== currentItem.value){\r\n\t\t\t\tinitialValue = currentItem.value;\r\n\t\t\t\tinput.value = currentItem.title;\r\n\t\t\t\tsuccess(currentItem.value);\r\n\t\t\t}else{\r\n\t\t\t\tcancel();\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tif(editorParams.freetext){\r\n\t\t\t\tinitialValue = input.value;\r\n\t\t\t\tsuccess(input.value);\r\n\t\t\t}else{\r\n\t\t\t\tif(editorParams.allowEmpty && input.value === \"\"){\r\n\t\t\t\t\tinitialValue = input.value;\r\n\t\t\t\t\tsuccess(input.value);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tcancel();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tfunction showList(){\r\n\t\tif(!listEl.parentNode){\r\n\t\t\twhile(listEl.firstChild) listEl.removeChild(listEl.firstChild);\r\n\r\n\t\t\tvar offset = Helpers.elOffset(cellEl);\r\n\r\n\t\t\tlistEl.style.minWidth = cellEl.offsetWidth + \"px\";\r\n\r\n\t\t\tlistEl.style.top = (offset.top + cellEl.offsetHeight) + \"px\";\r\n\t\t\tlistEl.style.left = offset.left + \"px\";\r\n\t\t\tdocument.body.appendChild(listEl);\r\n\t\t}\r\n\t}\r\n\r\n\tfunction setCurrentItem(item, showInputValue){\r\n\t\tif(currentItem && currentItem.element){\r\n\t\t\tcurrentItem.element.classList.remove(\"active\");\r\n\t\t}\r\n\r\n\t\tcurrentItem = item;\r\n\r\n\t\tif(item && item.element){\r\n\t\t\titem.element.classList.add(\"active\");\r\n\t\t}\r\n\r\n\t\tif(item && item.element && item.element.scrollIntoView){\r\n\t\t\titem.element.scrollIntoView({behavior: 'smooth', block: 'nearest', inline: 'start'});\r\n\t\t}\r\n\t}\r\n\r\n\tfunction hideList(){\r\n\t\tif(listEl.parentNode){\r\n\t\t\tlistEl.parentNode.removeChild(listEl);\r\n\t\t}\r\n\r\n\t\tremoveScrollListener();\r\n\t}\r\n\r\n\r\n\tfunction cancelItem(){\r\n\t\thideList();\r\n\t\tcancel();\r\n\t}\r\n\r\n\tfunction removeScrollListener() {\r\n\t\tself.table.rowManager.element.removeEventListener(\"scroll\", cancelItem);\r\n\t}\r\n\r\n\t//allow key based navigation\r\n\tinput.addEventListener(\"keydown\", function(e){\r\n\t\tvar index;\r\n\r\n\t\tswitch(e.keyCode){\r\n\t\t\tcase 38: //up arrow\r\n\t\t\tindex = displayItems.indexOf(currentItem);\r\n\r\n\t\t\tif(vertNav == \"editor\" || (vertNav == \"hybrid\" && index)){\r\n\t\t\t\te.stopImmediatePropagation();\r\n\t\t\t\te.stopPropagation();\r\n\t\t\t\te.preventDefault();\r\n\r\n\t\t\t\tif(index > 0){\r\n\t\t\t\t\tsetCurrentItem(displayItems[index - 1]);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tsetCurrentItem(false);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 40: //down arrow\r\n\r\n\t\t\tindex = displayItems.indexOf(currentItem);\r\n\r\n\t\t\tif(vertNav == \"editor\" || (vertNav == \"hybrid\" && index < displayItems.length - 1)){\r\n\r\n\t\t\t\te.stopImmediatePropagation();\r\n\t\t\t\te.stopPropagation();\r\n\t\t\t\te.preventDefault();\r\n\r\n\t\t\t\tif(index < displayItems.length - 1){\r\n\t\t\t\t\tif(index == -1){\r\n\t\t\t\t\t\tsetCurrentItem(displayItems[0]);\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tsetCurrentItem(displayItems[index + 1]);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\r\n\r\n\t\t\tcase 37: //left arrow\r\n\t\t\tcase 39: //right arrow\r\n\t\t\te.stopImmediatePropagation();\r\n\t\t\te.stopPropagation();\r\n\t\t\t// e.preventDefault();\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 13: //enter\r\n\t\t\tchooseItem();\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 27: //escape\r\n\t\t\tcancelItem();\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 36: //home\r\n\t\t\tcase 35: //end\r\n\t\t\t//prevent table navigation while using input element\r\n\t\t\te.stopImmediatePropagation();\r\n\t\t\tbreak;\r\n\t\t}\r\n\t});\r\n\r\n\tinput.addEventListener(\"keyup\", function(e){\r\n\r\n\t\tswitch(e.keyCode){\r\n\t\t\tcase 38: //up arrow\r\n\t\t\tcase 37: //left arrow\r\n\t\t\tcase 39: //up arrow\r\n\t\t\tcase 40: //right arrow\r\n\t\t\tcase 13: //enter\r\n\t\t\tcase 27: //escape\r\n\t\t\tbreak;\r\n\r\n\t\t\tdefault:\r\n\t\t\tfilterList(input.value);\r\n\t\t}\r\n\r\n\t});\r\n\r\n\tinput.addEventListener(\"search\", function(e){\r\n\t\tfilterList(input.value);\r\n\t});\r\n\r\n\tinput.addEventListener(\"blur\", function(e){\r\n\t\tif(blurable){\r\n\t\t\tchooseItem();\r\n\t\t}\r\n\t});\r\n\r\n\tinput.addEventListener(\"focus\", function(e){\r\n\t\tvar value = initialDisplayValue;\r\n\t\tgenUniqueColumnValues();\r\n\t\tshowList();\r\n\t\tinput.value = value;\r\n\t\tfilterList(value, true);\r\n\t});\r\n\r\n\r\n\tonRendered(function(){\r\n\t\tinput.style.height = \"100%\";\r\n\t\tinput.focus({preventScroll: true});\r\n\t});\r\n\r\n\tif(editorParams.mask){\r\n\t\tmaskInput(input, editorParams);\r\n\t}\r\n\r\n\tsetTimeout(() => {\r\n\t\tthis.table.rowManager.element.addEventListener(\"scroll\", cancelItem);\r\n\t}, 10);\r\n\r\n\tgenUniqueColumnValues();\r\n\tinput.value = initialDisplayValue;\r\n\tfilterList(initialDisplayValue, true);\r\n\r\n\treturn input;\r\n};","//star rating\r\nexport default function(cell, onRendered, success, cancel, editorParams){\r\n\tvar self = this,\r\n\telement = cell.getElement(),\r\n\tvalue = cell.getValue(),\r\n\tmaxStars = element.getElementsByTagName(\"svg\").length || 5,\r\n\tsize = element.getElementsByTagName(\"svg\")[0] ? element.getElementsByTagName(\"svg\")[0].getAttribute(\"width\") : 14,\r\n\tstars = [],\r\n\tstarsHolder = document.createElement(\"div\"),\r\n\tstar = document.createElementNS('http://www.w3.org/2000/svg', \"svg\");\r\n\r\n\r\n\t//change star type\r\n\tfunction starChange(val){\r\n\t\tstars.forEach(function(star, i){\r\n\t\t\tif(i < val){\r\n\t\t\t\tif(self.table.browser == \"ie\"){\r\n\t\t\t\t\tstar.setAttribute(\"class\", \"tabulator-star-active\");\r\n\t\t\t\t}else{\r\n\t\t\t\t\tstar.classList.replace(\"tabulator-star-inactive\", \"tabulator-star-active\");\r\n\t\t\t\t}\r\n\r\n\t\t\t\tstar.innerHTML = '';\r\n\t\t\t}else{\r\n\t\t\t\tif(self.table.browser == \"ie\"){\r\n\t\t\t\t\tstar.setAttribute(\"class\", \"tabulator-star-inactive\");\r\n\t\t\t\t}else{\r\n\t\t\t\t\tstar.classList.replace(\"tabulator-star-active\", \"tabulator-star-inactive\");\r\n\t\t\t\t}\r\n\r\n\t\t\t\tstar.innerHTML = '';\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t//build stars\r\n\tfunction buildStar(i){\r\n\r\n\t\tvar starHolder = document.createElement(\"span\");\r\n\t\tvar nextStar = star.cloneNode(true);\r\n\r\n\t\tstars.push(nextStar);\r\n\r\n\t\tstarHolder.addEventListener(\"mouseenter\", function(e){\r\n\t\t\te.stopPropagation();\r\n\t\t\te.stopImmediatePropagation();\r\n\t\t\tstarChange(i);\r\n\t\t});\r\n\r\n\t\tstarHolder.addEventListener(\"mousemove\", function(e){\r\n\t\t\te.stopPropagation();\r\n\t\t\te.stopImmediatePropagation();\r\n\t\t});\r\n\r\n\t\tstarHolder.addEventListener(\"click\", function(e){\r\n\t\t\te.stopPropagation();\r\n\t\t\te.stopImmediatePropagation();\r\n\t\t\tsuccess(i);\r\n\t\t\telement.blur();\r\n\t\t});\r\n\r\n\t\tstarHolder.appendChild(nextStar);\r\n\t\tstarsHolder.appendChild(starHolder);\r\n\r\n\t}\r\n\r\n\t//handle keyboard navigation value change\r\n\tfunction changeValue(val){\r\n\t\tvalue = val;\r\n\t\tstarChange(val);\r\n\t}\r\n\r\n\t//style cell\r\n\telement.style.whiteSpace = \"nowrap\";\r\n\telement.style.overflow = \"hidden\";\r\n\telement.style.textOverflow = \"ellipsis\";\r\n\r\n\t//style holding element\r\n\tstarsHolder.style.verticalAlign = \"middle\";\r\n\tstarsHolder.style.display = \"inline-block\";\r\n\tstarsHolder.style.padding = \"4px\";\r\n\r\n\t//style star\r\n\tstar.setAttribute(\"width\", size);\r\n\tstar.setAttribute(\"height\", size);\r\n\tstar.setAttribute(\"viewBox\", \"0 0 512 512\");\r\n\tstar.setAttribute(\"xml:space\", \"preserve\");\r\n\tstar.style.padding = \"0 1px\";\r\n\r\n\tif(editorParams.elementAttributes && typeof editorParams.elementAttributes == \"object\"){\r\n\t\tfor (let key in editorParams.elementAttributes){\r\n\t\t\tif(key.charAt(0) == \"+\"){\r\n\t\t\t\tkey = key.slice(1);\r\n\t\t\t\tstarsHolder.setAttribute(key, starsHolder.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\r\n\t\t\t}else{\r\n\t\t\t\tstarsHolder.setAttribute(key, editorParams.elementAttributes[key]);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//create correct number of stars\r\n\tfor(var i=1;i<= maxStars;i++){\r\n\t\tbuildStar(i);\r\n\t}\r\n\r\n\t//ensure value does not exceed number of stars\r\n\tvalue = Math.min(parseInt(value), maxStars);\r\n\r\n\t// set initial styling of stars\r\n\tstarChange(value);\r\n\r\n\tstarsHolder.addEventListener(\"mousemove\", function(e){\r\n\t\tstarChange(0);\r\n\t});\r\n\r\n\tstarsHolder.addEventListener(\"click\", function(e){\r\n\t\tsuccess(0);\r\n\t});\r\n\r\n\telement.addEventListener(\"blur\", function(e){\r\n\t\tcancel();\r\n\t});\r\n\r\n\t//allow key based navigation\r\n\telement.addEventListener(\"keydown\", function(e){\r\n\t\tswitch(e.keyCode){\r\n\t\t\tcase 39: //right arrow\r\n\t\t\tchangeValue(value + 1);\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 37: //left arrow\r\n\t\t\tchangeValue(value - 1);\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 13: //enter\r\n\t\t\tsuccess(value);\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 27: //escape\r\n\t\t\tcancel();\r\n\t\t\tbreak;\r\n\t\t}\r\n\t});\r\n\r\n\treturn starsHolder;\r\n};","//draggable progress bar\r\nexport default function(cell, onRendered, success, cancel, editorParams){\r\n\tvar element = cell.getElement(),\r\n\tmax = typeof editorParams.max === \"undefined\" ? ( element.getElementsByTagName(\"div\")[0].getAttribute(\"max\") || 100) : editorParams.max,\r\n\tmin = typeof editorParams.min === \"undefined\" ? ( element.getElementsByTagName(\"div\")[0].getAttribute(\"min\") || 0) : editorParams.min,\r\n\tpercent = (max - min) / 100,\r\n\tvalue = cell.getValue() || 0,\r\n\thandle = document.createElement(\"div\"),\r\n\tbar = document.createElement(\"div\"),\r\n\tmouseDrag, mouseDragWidth;\r\n\r\n\t//set new value\r\n\tfunction updateValue(){\r\n\t\tvar style = window.getComputedStyle(element, null);\r\n\r\n\t\tvar calcVal = (percent * Math.round(bar.offsetWidth / ((element.clientWidth - parseInt(style.getPropertyValue(\"padding-left\")) - parseInt(style.getPropertyValue(\"padding-right\")))/100))) + min;\r\n\t\tsuccess(calcVal);\r\n\t\telement.setAttribute(\"aria-valuenow\", calcVal);\r\n\t\telement.setAttribute(\"aria-label\", value);\r\n\t}\r\n\r\n\t//style handle\r\n\thandle.style.position = \"absolute\";\r\n\thandle.style.right = \"0\";\r\n\thandle.style.top = \"0\";\r\n\thandle.style.bottom = \"0\";\r\n\thandle.style.width = \"5px\";\r\n\thandle.classList.add(\"tabulator-progress-handle\");\r\n\r\n\t//style bar\r\n\tbar.style.display = \"inline-block\";\r\n\tbar.style.position = \"relative\";\r\n\t// bar.style.top = \"8px\";\r\n\t// bar.style.bottom = \"8px\";\r\n\t// bar.style.left = \"4px\";\r\n\t// bar.style.marginRight = \"4px\";\r\n\tbar.style.height = \"100%\";\r\n\tbar.style.backgroundColor = \"#488CE9\";\r\n\tbar.style.maxWidth = \"100%\";\r\n\tbar.style.minWidth = \"0%\";\r\n\r\n\tif(editorParams.elementAttributes && typeof editorParams.elementAttributes == \"object\"){\r\n\t\tfor (let key in editorParams.elementAttributes){\r\n\t\t\tif(key.charAt(0) == \"+\"){\r\n\t\t\t\tkey = key.slice(1);\r\n\t\t\t\tbar.setAttribute(key, bar.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\r\n\t\t\t}else{\r\n\t\t\t\tbar.setAttribute(key, editorParams.elementAttributes[key]);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//style cell\r\n\telement.style.padding = \"4px 4px\";\r\n\r\n\t//make sure value is in range\r\n\tvalue = Math.min(parseFloat(value), max);\r\n\tvalue = Math.max(parseFloat(value), min);\r\n\r\n\t//workout percentage\r\n\tvalue = Math.round((value - min) / percent);\r\n\t// bar.style.right = value + \"%\";\r\n\tbar.style.width = value + \"%\";\r\n\r\n\telement.setAttribute(\"aria-valuemin\", min);\r\n\telement.setAttribute(\"aria-valuemax\", max);\r\n\r\n\tbar.appendChild(handle);\r\n\r\n\thandle.addEventListener(\"mousedown\", function(e){\r\n\t\tmouseDrag = e.screenX;\r\n\t\tmouseDragWidth = bar.offsetWidth;\r\n\t});\r\n\r\n\thandle.addEventListener(\"mouseover\", function(){\r\n\t\thandle.style.cursor = \"ew-resize\";\r\n\t});\r\n\r\n\telement.addEventListener(\"mousemove\", function(e){\r\n\t\tif(mouseDrag){\r\n\t\t\tbar.style.width = (mouseDragWidth + e.screenX - mouseDrag) + \"px\";\r\n\t\t}\r\n\t});\r\n\r\n\telement.addEventListener(\"mouseup\", function(e){\r\n\t\tif(mouseDrag){\r\n\t\t\te.stopPropagation();\r\n\t\t\te.stopImmediatePropagation();\r\n\r\n\t\t\tmouseDrag = false;\r\n\t\t\tmouseDragWidth = false;\r\n\r\n\t\t\tupdateValue();\r\n\t\t}\r\n\t});\r\n\r\n\t//allow key based navigation\r\n\telement.addEventListener(\"keydown\", function(e){\r\n\t\tswitch(e.keyCode){\r\n\t\t\tcase 39: //right arrow\r\n\t\t\te.preventDefault();\r\n\t\t\tbar.style.width = (bar.clientWidth + element.clientWidth/100) + \"px\";\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 37: //left arrow\r\n\t\t\te.preventDefault();\r\n\t\t\tbar.style.width = (bar.clientWidth - element.clientWidth/100) + \"px\";\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 9: //tab\r\n\t\t\tcase 13: //enter\r\n\t\t\tupdateValue();\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 27: //escape\r\n\t\t\tcancel();\r\n\t\t\tbreak;\r\n\r\n\t\t}\r\n\t});\r\n\r\n\telement.addEventListener(\"blur\", function(){\r\n\t\tcancel();\r\n\t});\r\n\r\n\treturn bar;\r\n};","//checkbox\r\nexport default function(cell, onRendered, success, cancel, editorParams){\r\n\tvar value = cell.getValue(),\r\n\tinput = document.createElement(\"input\"),\r\n\ttristate = editorParams.tristate,\r\n\tindetermValue = typeof editorParams.indeterminateValue === \"undefined\" ? null : editorParams.indeterminateValue,\r\n\tindetermState = false;\r\n\r\n\tinput.setAttribute(\"type\", \"checkbox\");\r\n\tinput.style.marginTop = \"5px\";\r\n\tinput.style.boxSizing = \"border-box\";\r\n\r\n\tif(editorParams.elementAttributes && typeof editorParams.elementAttributes == \"object\"){\r\n\t\tfor (let key in editorParams.elementAttributes){\r\n\t\t\tif(key.charAt(0) == \"+\"){\r\n\t\t\t\tkey = key.slice(1);\r\n\t\t\t\tinput.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\r\n\t\t\t}else{\r\n\t\t\t\tinput.setAttribute(key, editorParams.elementAttributes[key]);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tinput.value = value;\r\n\r\n\tif(tristate && (typeof value === \"undefined\" || value === indetermValue || value === \"\")){\r\n\t\tindetermState = true;\r\n\t\tinput.indeterminate = true;\r\n\t}\r\n\r\n\tif(this.table.browser != \"firefox\"){ //prevent blur issue on mac firefox\r\n\t\tonRendered(function(){\r\n\t\t\tinput.focus({preventScroll: true});\r\n\t\t});\r\n\t}\r\n\r\n\tinput.checked = value === true || value === \"true\" || value === \"True\" || value === 1;\r\n\r\n\tonRendered(function(){\r\n\t\tinput.focus();\r\n\t});\r\n\r\n\tfunction setValue(blur){\r\n\t\tif(tristate){\r\n\t\t\tif(!blur){\r\n\t\t\t\tif(input.checked && !indetermState){\r\n\t\t\t\t\tinput.checked = false;\r\n\t\t\t\t\tinput.indeterminate = true;\r\n\t\t\t\t\tindetermState = true;\r\n\t\t\t\t\treturn indetermValue;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tindetermState = false;\r\n\t\t\t\t\treturn input.checked;\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tif(indetermState){\r\n\t\t\t\t\treturn indetermValue;\r\n\t\t\t\t}else{\r\n\t\t\t\t\treturn input.checked;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\treturn input.checked;\r\n\t\t}\r\n\t}\r\n\r\n\t//submit new value on blur\r\n\tinput.addEventListener(\"change\", function(e){\r\n\t\tsuccess(setValue());\r\n\t});\r\n\r\n\tinput.addEventListener(\"blur\", function(e){\r\n\t\tsuccess(setValue(true));\r\n\t});\r\n\r\n\t//submit new value on enter\r\n\tinput.addEventListener(\"keydown\", function(e){\r\n\t\tif(e.keyCode == 13){\r\n\t\t\tsuccess(setValue());\r\n\t\t}\r\n\t\tif(e.keyCode == 27){\r\n\t\t\tcancel();\r\n\t\t}\r\n\t});\r\n\r\n\treturn input;\r\n};","import input from './editors/input.js';\r\nimport textarea from './editors/textarea.js';\r\nimport number from './editors/number.js';\r\nimport range from './editors/range.js';\r\nimport select from './editors/select.js';\r\nimport autocomplete from './editors/autocomplete.js';\r\nimport star from './editors/star.js';\r\nimport progress from './editors/progress.js';\r\nimport tickCross from './editors/tickCross.js';\r\n\r\nexport default {\r\n\tinput:input,\r\n\ttextarea:textarea,\r\n number:number,\r\n range:range,\r\n\tselect:select,\r\n\tautocomplete:autocomplete,\r\n\tstar:star,\r\n\tprogress:progress,\r\n\ttickCross:tickCross,\r\n};","import Module from '../../core/Module.js';\r\n\r\nimport defaultEditors from './defaults/editors.js';\r\n\r\nclass Edit extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.currentCell = false; //hold currently editing cell\r\n\t\tthis.mouseClick = false; //hold mousedown state to prevent click binding being overriden by editor opening\r\n\t\tthis.recursionBlock = false; //prevent focus recursion\r\n\t\tthis.invalidEdit = false;\r\n\t\tthis.editedCells = [];\r\n\r\n\t\tthis.editors = Edit.editors;\r\n\r\n\t\tthis.registerColumnOption(\"editable\");\r\n\t\tthis.registerColumnOption(\"editor\");\r\n\t\tthis.registerColumnOption(\"editorParams\");\r\n\r\n\t\tthis.registerColumnOption(\"cellEditing\");\r\n\t\tthis.registerColumnOption(\"cellEdited\");\r\n\t\tthis.registerColumnOption(\"cellEditCancelled\");\r\n\r\n\t\tthis.registerTableFunction(\"getEditedCells\", this.getEditedCells.bind(this));\r\n\t\tthis.registerTableFunction(\"clearCellEdited\", this.clearCellEdited.bind(this));\r\n\t\tthis.registerTableFunction(\"navigatePrev\", this.navigatePrev.bind(this));\r\n\t\tthis.registerTableFunction(\"navigateNext\", this.navigateNext.bind(this));\r\n\t\tthis.registerTableFunction(\"navigateLeft\", this.navigateLeft.bind(this));\r\n\t\tthis.registerTableFunction(\"navigateRight\", this.navigateRight.bind(this));\r\n\t\tthis.registerTableFunction(\"navigateUp\", this.navigateUp.bind(this));\r\n\t\tthis.registerTableFunction(\"navigateDown\", this.navigateDown.bind(this));\r\n\r\n\t\tthis.registerComponentFunction(\"cell\", \"isEdited\", this.cellisEdited.bind(this));\r\n\t\tthis.registerComponentFunction(\"cell\", \"clearEdited\", this.clearEdited.bind(this));\r\n\t\tthis.registerComponentFunction(\"cell\", \"edit\", this.editCell.bind(this));\r\n\t\tthis.registerComponentFunction(\"cell\", \"cancelEdit\", this.cellCancelEdit.bind(this));\r\n\r\n\t\tthis.registerComponentFunction(\"cell\", \"navigatePrev\", this.navigatePrev.bind(this));\r\n\t\tthis.registerComponentFunction(\"cell\", \"navigateNext\", this.navigateNext.bind(this));\r\n\t\tthis.registerComponentFunction(\"cell\", \"navigateLeft\", this.navigateLeft.bind(this));\r\n\t\tthis.registerComponentFunction(\"cell\", \"navigateRight\", this.navigateRight.bind(this));\r\n\t\tthis.registerComponentFunction(\"cell\", \"navigateUp\", this.navigateUp.bind(this));\r\n\t\tthis.registerComponentFunction(\"cell\", \"navigateDown\", this.navigateDown.bind(this));\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tthis.subscribe(\"cell-init\", this.bindEditor.bind(this));\r\n\t\tthis.subscribe(\"cell-delete\", this.clearEdited.bind(this));\r\n\t\tthis.subscribe(\"column-layout\", this.initializeColumnCheck.bind(this));\r\n\t\tthis.subscribe(\"column-delete\", this.columnDeleteCheck.bind(this));\r\n\t\tthis.subscribe(\"row-deleting\", this.rowDeleteCheck.bind(this));\r\n\t\tthis.subscribe(\"data-refeshing\", this.cancelEdit.bind(this));\r\n\r\n\t\tthis.subscribe(\"keybinding-nav-prev\", this.navigatePrev.bind(this));\r\n\t\tthis.subscribe(\"keybinding-nav-next\", this.keybindingNavigateNext.bind(this));\r\n\t\tthis.subscribe(\"keybinding-nav-left\", this.navigateLeft.bind(this));\r\n\t\tthis.subscribe(\"keybinding-nav-right\", this.navigateRight.bind(this));\r\n\t\tthis.subscribe(\"keybinding-nav-up\", this.navigateUp.bind(this));\r\n\t\tthis.subscribe(\"keybinding-nav-down\", this.navigateDown.bind(this));\r\n\t}\r\n\r\n\r\n\t///////////////////////////////////\r\n\t////// Keybinding Functions ///////\r\n\t///////////////////////////////////\r\n\r\n\tkeybindingNavigateNext(e){\r\n\t\tvar cell = this.currentCell,\r\n\t\tnewRow = this.options(\"tabEndNewRow\");\r\n\r\n\t\tif(cell){\r\n\t\t\tif(!this.navigateNext(e)){\r\n\t\t\t\tif(newRow){\r\n\t\t\t\t\tcell.getElement().firstChild.blur();\r\n\r\n\t\t\t\t\tif(newRow === true){\r\n\t\t\t\t\t\tnewRow = this.table.addRow({})\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tif(typeof newRow == \"function\"){\r\n\t\t\t\t\t\t\tnewRow = this.table.addRow(newRow(cell.row.getComponent()))\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\tnewRow = this.table.addRow(Object.assign({}, newRow));\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tnewRow.then(() => {\r\n\t\t\t\t\t\tsetTimeout(() => {\r\n\t\t\t\t\t\t\tnav.next();\r\n\t\t\t\t\t\t})\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t///////////////////////////////////\r\n\t///////// Cell Functions //////////\r\n\t///////////////////////////////////\r\n\r\n\tcellisEdited(cell){\r\n\t\treturn !! cell.modules.edit && cell.modules.edit.edited;\r\n\t}\r\n\r\n\tcellCancelEdit(cell){\r\n\t\tif(cell === this.currentCell){\r\n\t\t\tthis.table.modules.edit.cancelEdit();\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Cancel Editor Error - This cell is not currently being edited \");\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t///////////////////////////////////\r\n\t///////// Table Functions /////////\r\n\t///////////////////////////////////\r\n\tclearCellEdited(cells){\r\n\t\tif(!cells){\r\n\t\t\tcells = this.modules.edit.getEditedCells();\r\n\t\t}\r\n\r\n\t\tif(!Array.isArray(cells)){\r\n\t\t\tcells = [cells];\r\n\t\t}\r\n\r\n\t\tcells.forEach((cell) => {\r\n\t\t\tthis.modules.edit.clearEdited(cell._getSelf());\r\n\t\t});\r\n\t}\r\n\r\n\tnavigatePrev(e){\r\n\t\tvar cell = this.currentCell,\r\n\t\tnextCell, prevRow;\r\n\r\n\t\tif(cell){\r\n\r\n\t\t\tif(e){\r\n\t\t\t\te.preventDefault();\r\n\t\t\t}\r\n\r\n\t\t\tnextCell = this.navigateLeft();\r\n\r\n\t\t\tif(nextCell){\r\n\t\t\t\treturn true;\r\n\t\t\t}else{\r\n\t\t\t\tprevRow = this.table.rowManager.prevDisplayRow(cell.row, true);\r\n\r\n\t\t\t\tif(prevRow){\r\n\t\t\t\t\tnextCell = this.findNextEditableCell(prevRow, prevRow.cells.length);\r\n\r\n\t\t\t\t\tif(nextCell){\r\n\t\t\t\t\t\tnextCell.edit();\r\n\t\t\t\t\t\treturn true;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t}\r\n\r\n\tnavigateNext(e){\r\n\t\tvar cell = this.currentCell,\r\n\t\tnextCell, nextRow;\r\n\r\n\t\tif(cell){\r\n\r\n\t\t\tif(e){\r\n\t\t\t\te.preventDefault();\r\n\t\t\t}\r\n\r\n\t\t\tnextCell = this.navigateRight();\r\n\r\n\t\t\tif(nextCell){\r\n\t\t\t\treturn true;\r\n\t\t\t}else{\r\n\t\t\t\tnextRow = this.table.rowManager.nextDisplayRow(cell.row, true);\r\n\r\n\t\t\t\tif(nextRow){\r\n\t\t\t\t\tnextCell = this.findNextEditableCell(nextRow, -1);\r\n\r\n\t\t\t\t\tif(nextCell){\r\n\t\t\t\t\t\tnextCell.edit();\r\n\t\t\t\t\t\treturn true;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t}\r\n\r\n\tnavigateLeft(e){\r\n\t\tvar cell = this.currentCell,\r\n\t\tindex, nextCell;\r\n\r\n\t\tif(cell){\r\n\r\n\t\t\tif(e){\r\n\t\t\t\te.preventDefault();\r\n\t\t\t}\r\n\r\n\t\t\tindex = cell.getIndex();\r\n\t\t\tnextCell = this.findPrevEditableCell(cell.row, index);\r\n\r\n\t\t\tif(nextCell){\r\n\t\t\t\tnextCell.edit();\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t}\r\n\r\n\tnavigateRight(e){\r\n\t\tvar cell = this.currentCell,\r\n\t\tindex, nextCell;\r\n\r\n\t\tif(cell){\r\n\r\n\t\t\tif(e){\r\n\t\t\t\te.preventDefault();\r\n\t\t\t}\r\n\r\n\t\t\tindex = cell.getIndex();\r\n\t\t\tnextCell = this.findNextEditableCell(cell.row, index);\r\n\r\n\t\t\tif(nextCell){\r\n\t\t\t\tnextCell.edit();\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t}\r\n\r\n\tnavigateUp(e){\r\n\t\tvar cell = this.currentCell,\r\n\t\tindex, nextRow;\r\n\r\n\t\tif(cell){\r\n\r\n\t\t\tif(e){\r\n\t\t\t\te.preventDefault();\r\n\t\t\t}\r\n\r\n\t\t\tindex = cell.getIndex();\r\n\t\t\tnextRow = this.table.rowManager.prevDisplayRow(cell.row, true);\r\n\r\n\t\t\tif(nextRow){\r\n\t\t\t\tnextRow.cells[index].edit();\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t}\r\n\r\n\tnavigateDown(e){\r\n\t\tvar cell = this.currentCell,\r\n\t\tindex, nextRow;\r\n\r\n\t\tif(cell){\r\n\r\n\t\t\tif(e){\r\n\t\t\t\te.preventDefault();\r\n\t\t\t}\r\n\r\n\t\t\tindex = cell.getIndex();\r\n\t\t\tnextRow = this.table.rowManager.nextDisplayRow(cell.row, true);\r\n\r\n\t\t\tif(nextRow){\r\n\t\t\t\tnextRow.cells[index].edit();\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t}\r\n\r\n\tfindNextEditableCell(row, index){\r\n\t\tvar nextCell = false;\r\n\r\n\t\tif(index < row.cells.length-1){\r\n\t\t\tfor(var i = index+1; i < row.cells.length; i++){\r\n\t\t\t\tlet cell = row.cells[i];\r\n\r\n\t\t\t\tif(cell.column.modules.edit && Helpers.elVisible(cell.getElement())){\r\n\t\t\t\t\tlet allowEdit = true;\r\n\r\n\t\t\t\t\tif(typeof cell.column.modules.edit.check == \"function\"){\r\n\t\t\t\t\t\tallowEdit = cell.column.modules.edit.check(cell.getComponent());\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif(allowEdit){\r\n\t\t\t\t\t\tnextCell = cell;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn nextCell;\r\n\t}\r\n\r\n\tfindPrevEditableCell(row, index){\r\n\t\tvar prevCell = false;\r\n\r\n\t\tif(index > 0){\r\n\t\t\tfor(var i = index-1; i >= 0; i--){\r\n\t\t\t\tlet cell = row.cells[i],\r\n\t\t\t\tallowEdit = true;\r\n\r\n\t\t\t\tif(cell.column.modules.edit && Helpers.elVisible(cell.getElement())){\r\n\t\t\t\t\tif(typeof cell.column.modules.edit.check == \"function\"){\r\n\t\t\t\t\t\tallowEdit = cell.column.modules.edit.check(cell.getComponent());\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif(allowEdit){\r\n\t\t\t\t\t\tprevCell = cell;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn prevCell;\r\n\t}\r\n\r\n\t///////////////////////////////////\r\n\t///////// Internal Logic //////////\r\n\t///////////////////////////////////\r\n\r\n\tinitializeColumnCheck(column){\r\n\t\tif(typeof column.definition.editor !== \"undefined\"){\r\n\t\t\tthis.initializeColumn(column);\r\n\t\t}\r\n\t}\r\n\r\n\tcolumnDeleteCheck(column){\r\n\t\tif(this.currentCell && this.currentCell.column === column){\r\n\t\t\tthis.cancelEdit();\r\n\t\t}\r\n\t}\r\n\r\n\trowDeleteCheck(row){\r\n\t\tif(this.currentCell && this.currentCell.row === row){\r\n\t\t\tthis.cancelEdit();\r\n\t\t}\r\n\t}\r\n\r\n\t//initialize column editor\r\n\tinitializeColumn(column){\r\n\t\tvar self = this,\r\n\t\tconfig = {\r\n\t\t\teditor:false,\r\n\t\t\tblocked:false,\r\n\t\t\tcheck:column.definition.editable,\r\n\t\t\tparams:column.definition.editorParams || {}\r\n\t\t};\r\n\r\n\t\t//set column editor\r\n\t\tswitch(typeof column.definition.editor){\r\n\t\t\tcase \"string\":\r\n\t\t\tif(this.editors[column.definition.editor]){\r\n\t\t\t\tconfig.editor = this.editors[column.definition.editor];\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Editor Error - No such editor found: \", column.definition.editor);\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"function\":\r\n\t\t\tconfig.editor = column.definition.editor;\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"boolean\":\r\n\t\t\tif(column.definition.editor === true){\r\n\t\t\t\tif(typeof column.definition.formatter !== \"function\"){\r\n\t\t\t\t\tif(this.editors[column.definition.formatter]){\r\n\t\t\t\t\t\tconfig.editor = this.editors[column.definition.formatter];\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tconfig.editor = this.editors[\"input\"];\r\n\t\t\t\t\t}\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.warn(\"Editor Error - Cannot auto lookup editor for a custom formatter: \", column.definition.formatter);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\tif(config.editor){\r\n\t\t\tcolumn.modules.edit = config;\r\n\t\t}\r\n\t}\r\n\r\n\tgetCurrentCell(){\r\n\t\treturn this.currentCell ? this.currentCell.getComponent() : false;\r\n\t}\r\n\r\n\tclearEditor(cancel){\r\n\t\tvar cell = this.currentCell,\r\n\t\tcellEl;\r\n\r\n\t\tthis.invalidEdit = false;\r\n\r\n\t\tif(cell){\r\n\t\t\tthis.currentCell = false;\r\n\r\n\t\t\tcellEl = cell.getElement();\r\n\r\n\t\t\tif(cancel){\r\n\t\t\t\tcell.validate();\r\n\t\t\t}else{\r\n\t\t\t\tcellEl.classList.remove(\"tabulator-validation-fail\");\r\n\t\t\t}\r\n\r\n\t\t\tcellEl.classList.remove(\"tabulator-editing\");\r\n\t\t\twhile(cellEl.firstChild) cellEl.removeChild(cellEl.firstChild);\r\n\r\n\t\t\tcell.row.getElement().classList.remove(\"tabulator-row-editing\");\r\n\t\t}\r\n\t}\r\n\r\n\tcancelEdit(){\r\n\t\tif(this.currentCell){\r\n\t\t\tvar cell = this.currentCell;\r\n\t\t\tvar component = this.currentCell.getComponent();\r\n\r\n\t\t\tthis.clearEditor(true);\r\n\t\t\tcell.setValueActual(cell.getValue());\r\n\t\t\tcell.cellRendered();\r\n\r\n\t\t\tif(cell.column.definition.editor == \"textarea\" || cell.column.definition.variableHeight){\r\n\t\t\t\tcell.row.normalizeHeight(true);\r\n\t\t\t}\r\n\r\n\t\t\tif(cell.column.definition.cellEditCancelled){\r\n\t\t\t\tcell.column.definition.cellEditCancelled.call(this.table, component);\r\n\t\t\t}\r\n\r\n\t\t\tthis.dispatchExternal(\"cellEditCancelled\", component);\r\n\t\t}\r\n\t}\r\n\r\n\t//return a formatted value for a cell\r\n\tbindEditor(cell){\r\n\t\tif(cell.column.modules.edit){\r\n\t\t\tvar self = this,\r\n\t\t\telement = cell.getElement(true);\r\n\r\n\t\t\telement.setAttribute(\"tabindex\", 0);\r\n\r\n\t\t\telement.addEventListener(\"click\", function(e){\r\n\t\t\t\tif(!element.classList.contains(\"tabulator-editing\")){\r\n\t\t\t\t\telement.focus({preventScroll: true});\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\telement.addEventListener(\"mousedown\", function(e){\r\n\t\t\t\tif (e.button === 2) {\r\n\t\t\t\t\te.preventDefault();\r\n\t\t\t\t}else{\r\n\t\t\t\t\tself.mouseClick = true;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\telement.addEventListener(\"focus\", function(e){\r\n\t\t\t\tif(!self.recursionBlock){\r\n\t\t\t\t\tself.edit(cell, e, false);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tfocusCellNoEvent(cell, block){\r\n\t\tthis.recursionBlock = true;\r\n\r\n\t\tif(!(block && this.table.browser === \"ie\")){\r\n\t\t\tcell.getElement().focus({preventScroll: true});\r\n\t\t}\r\n\r\n\t\tthis.recursionBlock = false;\r\n\t}\r\n\r\n\teditCell(cell, forceEdit){\r\n\t\tthis.focusCellNoEvent(cell);\r\n\t\tthis.edit(cell, false, forceEdit);\r\n\t}\r\n\r\n\tfocusScrollAdjust(cell){\r\n\t\tif(this.table.rowManager.getRenderMode() == \"virtual\"){\r\n\t\t\tvar topEdge = this.table.rowManager.element.scrollTop,\r\n\t\t\tbottomEdge = this.table.rowManager.element.clientHeight + this.table.rowManager.element.scrollTop,\r\n\t\t\trowEl = cell.row.getElement(),\r\n\t\t\toffset = rowEl.offsetTop;\r\n\r\n\t\t\tif(rowEl.offsetTop < topEdge){\r\n\t\t\t\tthis.table.rowManager.element.scrollTop -= (topEdge - rowEl.offsetTop);\r\n\t\t\t}else{\r\n\t\t\t\tif(rowEl.offsetTop + rowEl.offsetHeight > bottomEdge){\r\n\t\t\t\t\tthis.table.rowManager.element.scrollTop += (rowEl.offsetTop + rowEl.offsetHeight - bottomEdge);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tvar leftEdge = this.table.rowManager.element.scrollLeft,\r\n\t\t\trightEdge = this.table.rowManager.element.clientWidth + this.table.rowManager.element.scrollLeft,\r\n\t\t\tcellEl = cell.getElement(),\r\n\t\t\toffset = cellEl.offsetLeft;\r\n\r\n\t\t\tif(this.table.modExists(\"frozenColumns\")){\r\n\t\t\t\tleftEdge += parseInt(this.table.modules.frozenColumns.leftMargin);\r\n\t\t\t\trightEdge -= parseInt(this.table.modules.frozenColumns.rightMargin);\r\n\t\t\t}\r\n\r\n\t\t\tif(this.table.options.renderHorizontal === \"virtual\"){\r\n\t\t\t\tleftEdge -= parseInt(this.table.columnManager.renderer.vDomPadLeft);\r\n\t\t\t\trightEdge -= parseInt(this.table.columnManager.renderer.vDomPadLeft);\r\n\t\t\t}\r\n\r\n\t\t\tif(cellEl.offsetLeft < leftEdge){\r\n\r\n\t\t\t\tthis.table.rowManager.element.scrollLeft -= (leftEdge - cellEl.offsetLeft);\r\n\t\t\t}else{\r\n\t\t\t\tif(cellEl.offsetLeft + cellEl.offsetWidth > rightEdge){\r\n\t\t\t\t\tthis.table.rowManager.element.scrollLeft += (cellEl.offsetLeft + cellEl.offsetWidth - rightEdge);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tedit(cell, e, forceEdit){\r\n\t\tvar self = this,\r\n\t\tallowEdit = true,\r\n\t\trendered = function(){},\r\n\t\telement = cell.getElement(),\r\n\t\tcellEditor, component, params;\r\n\r\n\t\t//prevent editing if another cell is refusing to leave focus (eg. validation fail)\r\n\t\tif(this.currentCell){\r\n\t\t\tif(!this.invalidEdit){\r\n\t\t\t\tthis.cancelEdit();\r\n\t\t\t}\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t//handle successfull value change\r\n\t\tfunction success(value){\r\n\t\t\tif(self.currentCell === cell){\r\n\t\t\t\tvar valid = true;\r\n\r\n\t\t\t\tif(cell.column.modules.validate && self.table.modExists(\"validate\") && self.table.options.validationMode != \"manual\"){\r\n\t\t\t\t\tvalid = self.table.modules.validate.validate(cell.column.modules.validate, cell, value);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(valid === true || self.table.options.validationMode === \"highlight\"){\r\n\t\t\t\t\tself.clearEditor();\r\n\r\n\r\n\t\t\t\t\tif(!cell.modules.edit){\r\n\t\t\t\t\t\tcell.modules.edit = {};\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tcell.modules.edit.edited = true;\r\n\r\n\t\t\t\t\tif(self.editedCells.indexOf(cell) == -1){\r\n\t\t\t\t\t\tself.editedCells.push(cell);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tcell.setValue(value, true);\r\n\r\n\t\t\t\t\tif(self.table.options.dataTree && self.table.modExists(\"dataTree\")){\r\n\t\t\t\t\t\tself.table.modules.dataTree.checkForRestyle(cell);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif(valid !== true){\r\n\t\t\t\t\t\telement.classList.add(\"tabulator-validation-fail\");\r\n\t\t\t\t\t\tself.table.externalEvents.dispatch(\"validationFailed\", cell.getComponent(), value, valid);\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tself.invalidEdit = true;\r\n\t\t\t\t\telement.classList.add(\"tabulator-validation-fail\");\r\n\t\t\t\t\tself.focusCellNoEvent(cell, true);\r\n\t\t\t\t\trendered();\r\n\t\t\t\t\tself.table.externalEvents.dispatch(\"validationFailed\", cell.getComponent(), value, valid);\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\t// console.warn(\"Edit Success Error - cannot call success on a cell that is no longer being edited\");\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//handle aborted edit\r\n\t\tfunction cancel(){\r\n\t\t\tif(self.currentCell === cell){\r\n\t\t\t\tself.cancelEdit();\r\n\r\n\t\t\t\tif(self.table.options.dataTree && self.table.modExists(\"dataTree\")){\r\n\t\t\t\t\tself.table.modules.dataTree.checkForRestyle(cell);\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\t// console.warn(\"Edit Success Error - cannot call cancel on a cell that is no longer being edited\");\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction onRendered(callback){\r\n\t\t\trendered = callback;\r\n\t\t}\r\n\r\n\t\tif(!cell.column.modules.edit.blocked){\r\n\t\t\tif(e){\r\n\t\t\t\te.stopPropagation();\r\n\t\t\t}\r\n\r\n\t\t\tswitch(typeof cell.column.modules.edit.check){\r\n\t\t\t\tcase \"function\":\r\n\t\t\t\tallowEdit = cell.column.modules.edit.check(cell.getComponent());\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"boolean\":\r\n\t\t\t\tallowEdit = cell.column.modules.edit.check;\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\r\n\t\t\tif(allowEdit || forceEdit){\r\n\r\n\t\t\t\tself.cancelEdit();\r\n\r\n\t\t\t\tself.currentCell = cell;\r\n\r\n\t\t\t\tthis.focusScrollAdjust(cell);\r\n\r\n\t\t\t\tcomponent = cell.getComponent();\r\n\r\n\t\t\t\tif(this.mouseClick){\r\n\t\t\t\t\tthis.mouseClick = false;\r\n\r\n\t\t\t\t\tif(cell.column.definition.cellClick){\r\n\t\t\t\t\t\tcell.column.definition.cellClick.call(this.table, e, component);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(cell.column.definition.cellEditing){\r\n\t\t\t\t\tcell.column.definition.cellEditing.call(this.table, component);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.dispatchExternal(\"cellEditing\", component);\r\n\r\n\t\t\t\tparams = typeof cell.column.modules.edit.params === \"function\" ? cell.column.modules.edit.params(component) : cell.column.modules.edit.params;\r\n\r\n\t\t\t\tcellEditor = cell.column.modules.edit.editor.call(self, component, onRendered, success, cancel, params);\r\n\r\n\t\t\t\t//if editor returned, add to DOM, if false, abort edit\r\n\t\t\t\tif(cellEditor !== false){\r\n\r\n\t\t\t\t\tif(cellEditor instanceof Node){\r\n\t\t\t\t\t\telement.classList.add(\"tabulator-editing\");\r\n\t\t\t\t\t\tcell.row.getElement().classList.add(\"tabulator-row-editing\");\r\n\t\t\t\t\t\twhile(element.firstChild) element.removeChild(element.firstChild);\r\n\t\t\t\t\t\telement.appendChild(cellEditor);\r\n\r\n\t\t\t\t\t\t//trigger onRendered Callback\r\n\t\t\t\t\t\trendered();\r\n\r\n\t\t\t\t\t\t//prevent editing from triggering rowClick event\r\n\t\t\t\t\t\tvar children = element.children;\r\n\r\n\t\t\t\t\t\tfor (var i = 0; i < children.length; i++) {\r\n\t\t\t\t\t\t\tchildren[i].addEventListener(\"click\", function(e){\r\n\t\t\t\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tconsole.warn(\"Edit Error - Editor should return an instance of Node, the editor returned:\", cellEditor);\r\n\t\t\t\t\t\telement.blur();\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}else{\r\n\t\t\t\t\telement.blur();\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn true;\r\n\t\t\t}else{\r\n\t\t\t\tthis.mouseClick = false;\r\n\t\t\t\telement.blur();\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tthis.mouseClick = false;\r\n\t\t\telement.blur();\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\tgetEditedCells(){\r\n\t\tvar output = [];\r\n\r\n\t\tthis.editedCells.forEach((cell) => {\r\n\t\t\toutput.push(cell.getComponent());\r\n\t\t});\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tclearEdited(cell){\r\n\t\tvar editIndex;\r\n\r\n\t\tif(cell.modules.edit && cell.modules.edit.edited){\r\n\t\t\tcell.modules.edit.edited = false;\r\n\r\n\t\t\tif(cell.modules.validate){\r\n\t\t\t\tcell.modules.validate.invalid = false;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\teditIndex = this.editedCells.indexOf(cell);\r\n\r\n\t\tif(editIndex > -1){\r\n\t\t\tthis.editedCells.splice(editIndex, 1);\r\n\t\t}\r\n\t}\r\n}\r\n\r\nEdit.moduleName = \"edit\";\r\n\r\n//load defaults\r\nEdit.editors = defaultEditors;\r\n\r\n\r\nexport default Edit;","class ExportRow{\r\n\tconstructor(type, columns, component, indent){\r\n\t\tthis.type = type;\r\n\t\tthis.columns = columns;\r\n\t\tthis.component = component || false;\r\n\t\tthis.indent = indent || 0;\r\n\t}\r\n}\r\n\r\nexport default ExportRow;","class ExportColumn{\r\n\tconstructor(value, component, width, height, depth){\r\n\t\tthis.value = value;\r\n\t\tthis.component = component || false;\r\n\t\tthis.width = width;\r\n\t\tthis.height = height;\r\n\t\tthis.depth = depth;\r\n\t}\r\n}\r\n\r\nexport default ExportColumn;","import Module from '../../core/Module.js';\r\n\r\nimport ExportRow from './ExportRow.js';\r\nimport ExportColumn from './ExportColumn.js';\r\n\r\nclass Export extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.config = {};\r\n\t\tthis.cloneTableStyle = true;\r\n\t\tthis.colVisProp = \"\";\r\n\r\n\t\tthis.registerTableOption(\"htmlOutputConfig\", false); //html outypu config\r\n\r\n\t\tthis.registerColumnOption(\"htmlOutput\");\r\n\t\tthis.registerColumnOption(\"titleHtmlOutput\");\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tthis.registerTableFunction(\"getHtml\", this.getHtml.bind(this));\r\n\t}\r\n\r\n\t///////////////////////////////////\r\n\t///////// Table Functions /////////\r\n\t///////////////////////////////////\r\n\r\n\r\n\t///////////////////////////////////\r\n\t///////// Internal Logic //////////\r\n\t///////////////////////////////////\r\n\r\n\tgenerateExportList(config, style, range, colVisProp){\r\n\t\tthis.cloneTableStyle = style;\r\n\t\tthis.config = config || {};\r\n\t\tthis.colVisProp = colVisProp;\r\n\r\n\t\tvar headers = this.config.columnHeaders !== false ? this.headersToExportRows(this.generateColumnGroupHeaders()) : [];\r\n\t\tvar body = this.bodyToExportRows(this.rowLookup(range));\r\n\r\n\t\treturn headers.concat(body);\r\n\t}\r\n\r\n\tgenereateTable(config, style, range, colVisProp){\r\n\t\tvar list = this.generateExportList(config, style, range, colVisProp);\r\n\r\n\t\treturn this.genereateTableElement(list);\r\n\t}\r\n\r\n\trowLookup(range){\r\n\t\tvar rows = [];\r\n\r\n\t\tif(typeof range == \"function\"){\r\n\t\t\trange.call(this.table).forEach((row) =>{\r\n\t\t\t\trow = this.table.rowManager.findRow(row);\r\n\r\n\t\t\t\tif(row){\r\n\t\t\t\t\trows.push(row);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tswitch(range){\r\n\t\t\t\tcase true:\r\n\t\t\t\tcase \"visible\":\r\n\t\t\t\trows = this.table.rowManager.getVisibleRows(true);\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"all\":\r\n\t\t\t\trows = this.table.rowManager.rows;\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"selected\":\r\n\t\t\t\trows = this.table.modules.selectRow.selectedRows;\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"active\":\r\n\t\t\t\tdefault:\r\n\t\t\t\tif(this.table.options.pagination){\r\n\t\t\t\t\trows = this.table.rowManager.getDisplayRows(this.table.rowManager.displayRows.length - 2);\r\n\t\t\t\t}else{\r\n\t\t\t\t\trows = this.table.rowManager.getDisplayRows();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn Object.assign([], rows);\r\n\t}\r\n\r\n\tgenerateColumnGroupHeaders(){\r\n\t\tvar output = [];\r\n\r\n\t\tvar columns = this.config.columnGroups !== false ? this.table.columnManager.columns : this.table.columnManager.columnsByIndex;\r\n\r\n\t\tcolumns.forEach((column) => {\r\n\t\t\tvar colData = this.processColumnGroup(column);\r\n\r\n\t\t\tif(colData){\r\n\t\t\t\toutput.push(colData);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tprocessColumnGroup(column){\r\n\t\tvar subGroups = column.columns,\r\n\t\tmaxDepth = 0,\r\n\t\ttitle = column.definition[\"title\" + (this.colVisProp.charAt(0).toUpperCase() + this.colVisProp.slice(1))] || column.definition.title;\r\n\r\n\t\tvar groupData = {\r\n\t\t\ttitle:title,\r\n\t\t\tcolumn:column,\r\n\t\t\tdepth:1,\r\n\t\t};\r\n\r\n\t\tif(subGroups.length){\r\n\t\t\tgroupData.subGroups = [];\r\n\t\t\tgroupData.width = 0;\r\n\r\n\t\t\tsubGroups.forEach((subGroup) => {\r\n\t\t\t\tvar subGroupData = this.processColumnGroup(subGroup);\r\n\r\n\t\t\t\tif(subGroupData){\r\n\t\t\t\t\tgroupData.width += subGroupData.width;\r\n\t\t\t\t\tgroupData.subGroups.push(subGroupData);\r\n\r\n\t\t\t\t\tif(subGroupData.depth > maxDepth){\r\n\t\t\t\t\t\tmaxDepth = subGroupData.depth;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tgroupData.depth += maxDepth;\r\n\r\n\t\t\tif(!groupData.width){\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tif(this.columnVisCheck(column)){\r\n\t\t\t\tgroupData.width = 1;\r\n\t\t\t}else{\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn groupData;\r\n\t}\r\n\r\n\tcolumnVisCheck(column){\r\n\t\treturn column.definition[this.colVisProp] !== false && (column.visible || (!column.visible && column.definition[this.colVisProp]));\r\n\t}\r\n\r\n\theadersToExportRows(columns){\r\n\t\tvar headers = [],\r\n\t\theaderDepth = 0,\r\n\t\texportRows = [];\r\n\r\n\t\tfunction parseColumnGroup(column, level){\r\n\r\n\t\t\tvar depth = headerDepth - level;\r\n\r\n\t\t\tif(typeof headers[level] === \"undefined\"){\r\n\t\t\t\theaders[level] = [];\r\n\t\t\t}\r\n\r\n\t\t\tcolumn.height = column.subGroups ? 1 : (depth - column.depth) + 1;\r\n\r\n\t\t\theaders[level].push(column);\r\n\r\n\t\t\tif(column.height > 1){\r\n\t\t\t\tfor(let i = 1; i < column.height; i ++){\r\n\r\n\t\t\t\t\tif(typeof headers[level + i] === \"undefined\"){\r\n\t\t\t\t\t\theaders[level + i] = [];\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\theaders[level + i].push(false);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif(column.width > 1){\r\n\t\t\t\tfor(let i = 1; i < column.width; i ++){\r\n\t\t\t\t\theaders[level].push(false);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif(column.subGroups){\r\n\t\t\t\tcolumn.subGroups.forEach(function(subGroup){\r\n\t\t\t\t\tparseColumnGroup(subGroup, level+1);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//calculate maximum header debth\r\n\t\tcolumns.forEach(function(column){\r\n\t\t\tif(column.depth > headerDepth){\r\n\t\t\t\theaderDepth = column.depth;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tcolumns.forEach(function(column){\r\n\t\t\tparseColumnGroup(column,0);\r\n\t\t});\r\n\r\n\t\theaders.forEach((header) => {\r\n\t\t\tvar columns = [];\r\n\r\n\t\t\theader.forEach((col) => {\r\n\t\t\t\tif(col){\r\n\t\t\t\t\tcolumns.push(new ExportColumn(col.title, col.column.getComponent(), col.width, col.height, col.depth));\r\n\t\t\t\t}else{\r\n\t\t\t\t\tcolumns.push(null);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\texportRows.push(new ExportRow(\"header\", columns));\r\n\t\t});\r\n\r\n\t\treturn exportRows;\r\n\t}\r\n\r\n\tbodyToExportRows(rows){\r\n\r\n\t\tvar columns = [];\r\n\t\tvar exportRows = [];\r\n\r\n\t\tthis.table.columnManager.columnsByIndex.forEach((column) => {\r\n\t\t\tif (this.columnVisCheck(column)) {\r\n\t\t\t\tcolumns.push(column.getComponent());\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tif(this.config.columnCalcs !== false && this.table.modExists(\"columnCalcs\")){\r\n\t\t\tif(this.table.modules.columnCalcs.topInitialized){\r\n\t\t\t\trows.unshift(this.table.modules.columnCalcs.topRow);\r\n\t\t\t}\r\n\r\n\t\t\tif(this.table.modules.columnCalcs.botInitialized){\r\n\t\t\t\trows.push(this.table.modules.columnCalcs.botRow);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\trows = rows.filter((row) => {\r\n\t\t\tswitch(row.type){\r\n\t\t\t\tcase \"group\":\r\n\t\t\t\treturn this.config.rowGroups !== false;\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"calc\":\r\n\t\t\t\treturn this.config.columnCalcs !== false;\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"row\":\r\n\t\t\t\treturn !(this.table.options.dataTree && this.config.dataTree === false && row.modules.dataTree.parent);\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\r\n\t\t\treturn true;\r\n\t\t});\r\n\r\n\t\trows.forEach((row, i) => {\r\n\t\t\tvar rowData = row.getData(this.colVisProp);\r\n\t\t\tvar exportCols = [];\r\n\t\t\tvar indent = 0;\r\n\r\n\t\t\tswitch(row.type){\r\n\t\t\t\tcase \"group\":\r\n\t\t\t\tindent = row.level;\r\n\t\t\t\texportCols.push(new ExportColumn(row.key, row.getComponent(), columns.length, 1));\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"calc\" :\r\n\t\t\t\tcase \"row\" :\r\n\t\t\t\tcolumns.forEach((col) => {\r\n\t\t\t\t\texportCols.push(new ExportColumn(col._column.getFieldValue(rowData), col, 1, 1));\r\n\t\t\t\t});\r\n\r\n\t\t\t\tif(this.table.options.dataTree && this.config.dataTree !== false){\r\n\t\t\t\t\tindent = row.modules.dataTree.index;\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\r\n\t\t\texportRows.push(new ExportRow(row.type, exportCols, row.getComponent(), indent));\r\n\t\t});\r\n\r\n\t\treturn exportRows;\r\n\t}\r\n\r\n\tgenereateTableElement(list){\r\n\t\tvar table = document.createElement(\"table\"),\r\n\t\theaderEl = document.createElement(\"thead\"),\r\n\t\tbodyEl = document.createElement(\"tbody\"),\r\n\t\tstyles = this.lookupTableStyles(),\r\n\t\trowFormatter = this.table.options[\"rowFormatter\" + (this.colVisProp.charAt(0).toUpperCase() + this.colVisProp.slice(1))],\r\n\t\tsetup = {};\r\n\r\n\t\tsetup.rowFormatter = rowFormatter !== null ? rowFormatter : this.table.options.rowFormatter;\r\n\r\n\t\tif(this.table.options.dataTree &&this.config.dataTree !== false && this.table.modExists(\"columnCalcs\")){\r\n\t\t\tsetup.treeElementField = this.table.modules.dataTree.elementField;\r\n\t\t}\r\n\r\n\t\t//assign group header formatter\r\n\t\tsetup.groupHeader = this.table.options[\"groupHeader\" + (this.colVisProp.charAt(0).toUpperCase() + this.colVisProp.slice(1))];\r\n\r\n\t\tif(setup.groupHeader && !Array.isArray(setup.groupHeader)){\r\n\t\t\tsetup.groupHeader = [setup.groupHeader];\r\n\t\t}\r\n\r\n\t\ttable.classList.add(\"tabulator-print-table\");\r\n\r\n\t\tthis.mapElementStyles(this.table.columnManager.getHeadersElement(), headerEl, [\"border-top\", \"border-left\", \"border-right\", \"border-bottom\", \"background-color\", \"color\", \"font-weight\", \"font-family\", \"font-size\"]);\r\n\r\n\r\n\t\tif(list.length > 1000){\r\n\t\t\tconsole.warn(\"It may take a long time to render an HTML table with more than 1000 rows\");\r\n\t\t}\r\n\r\n\t\tlist.forEach((row, i) => {\r\n\t\t\tswitch(row.type){\r\n\t\t\t\tcase \"header\":\r\n\t\t\t\theaderEl.appendChild(this.genereateHeaderElement(row, setup, styles));\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"group\":\r\n\t\t\t\tbodyEl.appendChild(this.genereateGroupElement(row, setup, styles));\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"calc\":\r\n\t\t\t\tbodyEl.appendChild(this.genereateCalcElement(row, setup, styles));\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"row\":\r\n\t\t\t\tlet rowEl = this.genereateRowElement(row, setup, styles);\r\n\t\t\t\tthis.mapElementStyles(((i % 2) && styles.evenRow) ? styles.evenRow : styles.oddRow, rowEl, [\"border-top\", \"border-left\", \"border-right\", \"border-bottom\", \"color\", \"font-weight\", \"font-family\", \"font-size\", \"background-color\"]);\r\n\t\t\t\tbodyEl.appendChild(rowEl);\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tif(headerEl.innerHTML){\r\n\t\t\ttable.appendChild(headerEl);\r\n\t\t}\r\n\r\n\t\ttable.appendChild(bodyEl);\r\n\r\n\r\n\t\tthis.mapElementStyles(this.table.element, table, [\"border-top\", \"border-left\", \"border-right\", \"border-bottom\"]);\r\n\t\treturn table;\r\n\t}\r\n\r\n\tlookupTableStyles(){\r\n\t\tvar styles = {};\r\n\r\n\t\t//lookup row styles\r\n\t\tif(this.cloneTableStyle && window.getComputedStyle){\r\n\t\t\tstyles.oddRow = this.table.element.querySelector(\".tabulator-row-odd:not(.tabulator-group):not(.tabulator-calcs)\");\r\n\t\t\tstyles.evenRow = this.table.element.querySelector(\".tabulator-row-even:not(.tabulator-group):not(.tabulator-calcs)\");\r\n\t\t\tstyles.calcRow = this.table.element.querySelector(\".tabulator-row.tabulator-calcs\");\r\n\t\t\tstyles.firstRow = this.table.element.querySelector(\".tabulator-row:not(.tabulator-group):not(.tabulator-calcs)\");\r\n\t\t\tstyles.firstGroup = this.table.element.getElementsByClassName(\"tabulator-group\")[0];\r\n\r\n\t\t\tif(styles.firstRow){\r\n\t\t\t\tstyles.styleCells = styles.firstRow.getElementsByClassName(\"tabulator-cell\");\r\n\t\t\t\tstyles.firstCell = styles.styleCells[0];\r\n\t\t\t\tstyles.lastCell = styles.styleCells[styles.styleCells.length - 1];\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn styles;\r\n\t}\r\n\r\n\tgenereateHeaderElement(row, setup, styles){\r\n\t\tvar rowEl = document.createElement(\"tr\");\r\n\r\n\t\trow.columns.forEach((column) => {\r\n\t\t\tif(column){\r\n\t\t\t\tvar cellEl = document.createElement(\"th\");\r\n\t\t\t\tvar classNames = column.component._column.definition.cssClass ? column.component._column.definition.cssClass.split(\" \") : [];\r\n\r\n\t\t\t\tcellEl.colSpan = column.width;\r\n\t\t\t\tcellEl.rowSpan = column.height;\r\n\r\n\t\t\t\tcellEl.innerHTML = column.value;\r\n\r\n\t\t\t\tif(this.cloneTableStyle){\r\n\t\t\t\t\tcellEl.style.boxSizing = \"border-box\";\r\n\t\t\t\t}\r\n\r\n\t\t\t\tclassNames.forEach(function(className) {\r\n\t\t\t\t\tcellEl.classList.add(className);\r\n\t\t\t\t});\r\n\r\n\t\t\t\tthis.mapElementStyles(column.component.getElement(), cellEl, [\"text-align\", \"border-top\", \"border-left\", \"border-right\", \"border-bottom\", \"background-color\", \"color\", \"font-weight\", \"font-family\", \"font-size\"]);\r\n\t\t\t\tthis.mapElementStyles(column.component._column.contentElement, cellEl, [\"padding-top\", \"padding-left\", \"padding-right\", \"padding-bottom\"]);\r\n\r\n\t\t\t\tif(column.component._column.visible){\r\n\t\t\t\t\tthis.mapElementStyles(column.component.getElement(), cellEl, [\"width\"]);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tif(column.component._column.definition.width){\r\n\t\t\t\t\t\tcellEl.style.width = column.component._column.definition.width + \"px\";\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(column.component._column.parent){\r\n\t\t\t\t\tthis.mapElementStyles(column.component._column.parent.groupElement, cellEl, [\"border-top\"]);\r\n\t\t\t\t}\r\n\r\n\t\t\t\trowEl.appendChild(cellEl);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn rowEl;\r\n\t}\r\n\r\n\tgenereateGroupElement(row, setup, styles){\r\n\r\n\t\tvar rowEl = document.createElement(\"tr\"),\r\n\t\tcellEl = document.createElement(\"td\"),\r\n\t\tgroup = row.columns[0];\r\n\r\n\t\trowEl.classList.add(\"tabulator-print-table-row\");\r\n\r\n\t\tif(setup.groupHeader && setup.groupHeader[row.indent]){\r\n\t\t\tgroup.value = setup.groupHeader[row.indent](group.value, row.component._group.getRowCount(), row.component._group.getData(), row.component);\r\n\t\t}else{\r\n\t\t\tif(setup.groupHeader === false){\r\n\t\t\t\tgroup.value = group.value;\r\n\t\t\t}else{\r\n\t\t\t\tgroup.value = row.component._group.generator(group.value, row.component._group.getRowCount(), row.component._group.getData(), row.component);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tcellEl.colSpan = group.width;\r\n\t\tcellEl.innerHTML = group.value;\r\n\r\n\t\trowEl.classList.add(\"tabulator-print-table-group\");\r\n\t\trowEl.classList.add(\"tabulator-group-level-\" + row.indent);\r\n\r\n\t\tif(group.component.isVisible()){\r\n\t\t\trowEl.classList.add(\"tabulator-group-visible\");\r\n\t\t}\r\n\r\n\t\tthis.mapElementStyles(styles.firstGroup, rowEl, [\"border-top\", \"border-left\", \"border-right\", \"border-bottom\", \"color\", \"font-weight\", \"font-family\", \"font-size\", \"background-color\"]);\r\n\t\tthis.mapElementStyles(styles.firstGroup, cellEl, [\"padding-top\", \"padding-left\", \"padding-right\", \"padding-bottom\"]);\r\n\r\n\t\trowEl.appendChild(cellEl);\r\n\r\n\t\treturn rowEl;\r\n\t}\r\n\r\n\tgenereateCalcElement(row, setup, styles){\r\n\t\tvar rowEl = this.genereateRowElement(row, setup, styles);\r\n\r\n\t\trowEl.classList.add(\"tabulator-print-table-calcs\");\r\n\t\tthis.mapElementStyles(styles.calcRow, rowEl, [\"border-top\", \"border-left\", \"border-right\", \"border-bottom\", \"color\", \"font-weight\", \"font-family\", \"font-size\", \"background-color\"]);\r\n\r\n\t\treturn rowEl;\r\n\t}\r\n\r\n\tgenereateRowElement(row, setup, styles){\r\n\t\tvar rowEl = document.createElement(\"tr\");\r\n\r\n\t\trowEl.classList.add(\"tabulator-print-table-row\");\r\n\r\n\t\trow.columns.forEach((col) => {\r\n\r\n\t\t\tif(col){\r\n\t\t\t\tvar cellEl = document.createElement(\"td\"),\r\n\t\t\t\tcolumn = col.component._column,\r\n\t\t\t\tvalue = col.value;\r\n\r\n\t\t\t\tvar cellWrapper = {\r\n\t\t\t\t\tmodules:{},\r\n\t\t\t\t\tgetValue:function(){\r\n\t\t\t\t\t\treturn value;\r\n\t\t\t\t\t},\r\n\t\t\t\t\tgetField:function(){\r\n\t\t\t\t\t\treturn column.definition.field;\r\n\t\t\t\t\t},\r\n\t\t\t\t\tgetElement:function(){\r\n\t\t\t\t\t\treturn cellEl;\r\n\t\t\t\t\t},\r\n\t\t\t\t\tgetColumn:function(){\r\n\t\t\t\t\t\treturn column.getComponent();\r\n\t\t\t\t\t},\r\n\t\t\t\t\tgetData:function(){\r\n\t\t\t\t\t\treturn row.component.getData();\r\n\t\t\t\t\t},\r\n\t\t\t\t\tgetRow:function(){\r\n\t\t\t\t\t\treturn row.component;\r\n\t\t\t\t\t},\r\n\t\t\t\t\tgetComponent:function(){\r\n\t\t\t\t\t\treturn cellWrapper;\r\n\t\t\t\t\t},\r\n\t\t\t\t\tcolumn:column,\r\n\t\t\t\t};\r\n\r\n\t\t\t\tvar classNames = column.definition.cssClass ? column.definition.cssClass.split(\" \") : [];\r\n\r\n\t\t\t\tclassNames.forEach(function(className) {\r\n\t\t\t\t\tcellEl.classList.add(className);\r\n\t\t\t\t});\r\n\r\n\t\t\t\tif(this.table.modExists(\"format\") && this.config.formatCells !== false){\r\n\t\t\t\t\tvalue = this.table.modules.format.formatExportValue(cellWrapper, this.colVisProp);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tswitch(typeof value){\r\n\t\t\t\t\t\tcase \"object\":\r\n\t\t\t\t\t\tvalue = JSON.stringify(value);\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\tcase \"undefined\":\r\n\t\t\t\t\t\tcase \"null\":\r\n\t\t\t\t\t\tvalue = \"\";\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\tdefault:\r\n\t\t\t\t\t\tvalue = value;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(value instanceof Node){\r\n\t\t\t\t\tcellEl.appendChild(value);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tcellEl.innerHTML = value;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(styles.firstCell){\r\n\t\t\t\t\tthis.mapElementStyles(styles.firstCell, cellEl, [\"padding-top\", \"padding-left\", \"padding-right\", \"padding-bottom\", \"border-top\", \"border-left\", \"border-right\", \"border-bottom\", \"color\", \"font-weight\", \"font-family\", \"font-size\"]);\r\n\r\n\t\t\t\t\tif(column.definition.align){\r\n\t\t\t\t\t\tcellEl.style.textAlign = column.definition.align;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(this.table.options.dataTree && this.config.dataTree !== false){\r\n\t\t\t\t\tif((setup.treeElementField && setup.treeElementField == column.field) || (!setup.treeElementField && i == 0)){\r\n\t\t\t\t\t\tif(row.component._row.modules.dataTree.controlEl){\r\n\t\t\t\t\t\t\tcellEl.insertBefore(row.component._row.modules.dataTree.controlEl.cloneNode(true), cellEl.firstChild);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif(row.component._row.modules.dataTree.branchEl){\r\n\t\t\t\t\t\t\tcellEl.insertBefore(row.component._row.modules.dataTree.branchEl.cloneNode(true), cellEl.firstChild);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\trowEl.appendChild(cellEl);\r\n\r\n\t\t\t\tif(cellWrapper.modules.format && cellWrapper.modules.format.renderedCallback){\r\n\t\t\t\t\tcellWrapper.modules.format.renderedCallback();\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(setup.rowFormatter && this.config.formatCells !== false){\r\n\t\t\t\t\tsetup.rowFormatter(row.component);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn rowEl;\r\n\t}\r\n\r\n\tgenereateHTMLTable(list){\r\n\t\tvar holder = document.createElement(\"div\");\r\n\r\n\t\tholder.appendChild(this.genereateTableElement(list));\r\n\r\n\t\treturn holder.innerHTML;\r\n\t}\r\n\r\n\tgetHtml(visible, style, config, colVisProp){\r\n\t\tvar list = this.generateExportList(config || this.table.options.htmlOutputConfig, style, visible, colVisProp || \"htmlOutput\");\r\n\r\n\t\treturn this.genereateHTMLTable(list);\r\n\t}\r\n\r\n\tmapElementStyles(from, to, props){\r\n\t\tif(this.cloneTableStyle && from && to){\r\n\r\n\t\t\tvar lookup = {\r\n\t\t\t\t\"background-color\" : \"backgroundColor\",\r\n\t\t\t\t\"color\" : \"fontColor\",\r\n\t\t\t\t\"width\" : \"width\",\r\n\t\t\t\t\"font-weight\" : \"fontWeight\",\r\n\t\t\t\t\"font-family\" : \"fontFamily\",\r\n\t\t\t\t\"font-size\" : \"fontSize\",\r\n\t\t\t\t\"text-align\" : \"textAlign\",\r\n\t\t\t\t\"border-top\" : \"borderTop\",\r\n\t\t\t\t\"border-left\" : \"borderLeft\",\r\n\t\t\t\t\"border-right\" : \"borderRight\",\r\n\t\t\t\t\"border-bottom\" : \"borderBottom\",\r\n\t\t\t\t\"padding-top\" : \"paddingTop\",\r\n\t\t\t\t\"padding-left\" : \"paddingLeft\",\r\n\t\t\t\t\"padding-right\" : \"paddingRight\",\r\n\t\t\t\t\"padding-bottom\" : \"paddingBottom\",\r\n\t\t\t};\r\n\r\n\t\t\tif(window.getComputedStyle){\r\n\t\t\t\tvar fromStyle = window.getComputedStyle(from);\r\n\r\n\t\t\t\tprops.forEach(function(prop){\r\n\t\t\t\t\tto.style[lookup[prop]] = fromStyle.getPropertyValue(prop);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n\r\nExport.moduleName = \"export\";\r\n\r\nexport default Export;\r\n","export default {\r\n\r\n\t//equal to\r\n\t\"=\":function(filterVal, rowVal, rowData, filterParams){\r\n\t\treturn rowVal == filterVal ? true : false;\r\n\t},\r\n\r\n\t//less than\r\n\t\"<\":function(filterVal, rowVal, rowData, filterParams){\r\n\t\treturn rowVal < filterVal ? true : false;\r\n\t},\r\n\r\n\t//less than or equal to\r\n\t\"<=\":function(filterVal, rowVal, rowData, filterParams){\r\n\t\treturn rowVal <= filterVal ? true : false;\r\n\t},\r\n\r\n\t//greater than\r\n\t\">\":function(filterVal, rowVal, rowData, filterParams){\r\n\t\treturn rowVal > filterVal ? true : false;\r\n\t},\r\n\r\n\t//greater than or equal to\r\n\t\">=\":function(filterVal, rowVal, rowData, filterParams){\r\n\t\treturn rowVal >= filterVal ? true : false;\r\n\t},\r\n\r\n\t//not equal to\r\n\t\"!=\":function(filterVal, rowVal, rowData, filterParams){\r\n\t\treturn rowVal != filterVal ? true : false;\r\n\t},\r\n\r\n\t\"regex\":function(filterVal, rowVal, rowData, filterParams){\r\n\r\n\t\tif(typeof filterVal == \"string\"){\r\n\t\t\tfilterVal = new RegExp(filterVal);\r\n\t\t}\r\n\r\n\t\treturn filterVal.test(rowVal);\r\n\t},\r\n\r\n\t//contains the string\r\n\t\"like\":function(filterVal, rowVal, rowData, filterParams){\r\n\t\tif(filterVal === null || typeof filterVal === \"undefined\"){\r\n\t\t\treturn rowVal === filterVal ? true : false;\r\n\t\t}else{\r\n\t\t\tif(typeof rowVal !== 'undefined' && rowVal !== null){\r\n\t\t\t\treturn String(rowVal).toLowerCase().indexOf(filterVal.toLowerCase()) > -1;\r\n\t\t\t}\r\n\t\t\telse{\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\t//contains the keywords\r\n\t\"keywords\":function(filterVal, rowVal, rowData, filterParams){\r\n\t\tvar keywords = filterVal.toLowerCase().split(typeof filterParams.separator === \"undefined\" ? \" \" : filterParams.separator),\r\n\t\tvalue = String(rowVal === null || typeof rowVal === \"undefined\" ? \"\" : rowVal).toLowerCase(),\r\n\t\tmatches = [];\r\n\r\n\t\tkeywords.forEach((keyword) =>{\r\n\t\t\tif(value.includes(keyword)){\r\n\t\t\t\tmatches.push(true);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn filterParams.matchAll ? matches.length === keywords.length : !!matches.length;\r\n\t},\r\n\r\n\t//starts with the string\r\n\t\"starts\":function(filterVal, rowVal, rowData, filterParams){\r\n\t\tif(filterVal === null || typeof filterVal === \"undefined\"){\r\n\t\t\treturn rowVal === filterVal ? true : false;\r\n\t\t}else{\r\n\t\t\tif(typeof rowVal !== 'undefined' && rowVal !== null){\r\n\t\t\t\treturn String(rowVal).toLowerCase().startsWith(filterVal.toLowerCase());\r\n\t\t\t}\r\n\t\t\telse{\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\t//ends with the string\r\n\t\"ends\":function(filterVal, rowVal, rowData, filterParams){\r\n\t\tif(filterVal === null || typeof filterVal === \"undefined\"){\r\n\t\t\treturn rowVal === filterVal ? true : false;\r\n\t\t}else{\r\n\t\t\tif(typeof rowVal !== 'undefined' && rowVal !== null){\r\n\t\t\t\treturn String(rowVal).toLowerCase().endsWith(filterVal.toLowerCase());\r\n\t\t\t}\r\n\t\t\telse{\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\t//in array\r\n\t\"in\":function(filterVal, rowVal, rowData, filterParams){\r\n\t\tif(Array.isArray(filterVal)){\r\n\t\t\treturn filterVal.length ? filterVal.indexOf(rowVal) > -1 : true;\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Filter Error - filter value is not an array:\", filterVal);\r\n\t\t\treturn false;\r\n\t\t}\r\n\t},\r\n};","import Module from '../../core/Module.js';\r\n\r\nimport defaultFilters from './defaults/filters.js';\r\n\r\nclass Filter extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.filterList = []; //hold filter list\r\n\t\tthis.headerFilters = {}; //hold column filters\r\n\t\tthis.headerFilterColumns = []; //hold columns that use header filters\r\n\r\n\t\tthis.prevHeaderFilterChangeCheck = \"\";\r\n\t\tthis.prevHeaderFilterChangeCheck = \"{}\";\r\n\r\n\t\tthis.changed = false; //has filtering changed since last render\r\n\r\n\t\tthis.registerTableOption(\"filterMode\", \"local\"); //local or remote filtering\r\n\r\n\t\tthis.registerTableOption(\"initialFilter\", false); //initial filtering criteria\r\n\t\tthis.registerTableOption(\"initialHeaderFilter\", false); //initial header filtering criteria\r\n\t\tthis.registerTableOption(\"headerFilterLiveFilterDelay\", 300); //delay before updating column after user types in header filter\r\n\r\n\t\tthis.registerColumnOption(\"headerFilter\");\r\n\t\tthis.registerColumnOption(\"headerFilterPlaceholder\");\r\n\t\tthis.registerColumnOption(\"headerFilterParams\");\r\n\t\tthis.registerColumnOption(\"headerFilterEmptyCheck\");\r\n\t\tthis.registerColumnOption(\"headerFilterFunc\");\r\n\t\tthis.registerColumnOption(\"headerFilterFuncParams\");\r\n\t\tthis.registerColumnOption(\"headerFilterLiveFilter\");\r\n\r\n\t\tthis.registerTableFunction(\"searchRows\", this.searchRows.bind(this));\r\n\t\tthis.registerTableFunction(\"searchData\", this.searchData.bind(this));\r\n\r\n\t\tthis.registerTableFunction(\"setFilter\", this.userSetFilter.bind(this));\r\n\t\tthis.registerTableFunction(\"refreshFilter\", this.userRefreshFilter.bind(this));\r\n\t\tthis.registerTableFunction(\"addFilter\", this.userAddFilter.bind(this));\r\n\t\tthis.registerTableFunction(\"getFilters\", this.getFilters.bind(this));\r\n\t\tthis.registerTableFunction(\"setHeaderFilterFocus\", this.userSetHeaderFilterFocus.bind(this));\r\n\t\tthis.registerTableFunction(\"getHeaderFilterValue\", this.userGetHeaderFilterValue.bind(this));\r\n\t\tthis.registerTableFunction(\"setHeaderFilterValue\", this.userSetHeaderFilterValue.bind(this));\r\n\t\tthis.registerTableFunction(\"getHeaderFilters\", this.getHeaderFilters.bind(this));\r\n\t\tthis.registerTableFunction(\"removeFilter\", this.userRemoveFilter.bind(this));\r\n\t\tthis.registerTableFunction(\"clearFilter\", this.userClearFilter.bind(this));\r\n\t\tthis.registerTableFunction(\"clearHeaderFilter\", this.userClearHeaderFilter.bind(this));\r\n\r\n\t\tthis.registerComponentFunction(\"column\", \"headerFilterFocus\", this.setHeaderFilterFocus.bind(this));\r\n\t\tthis.registerComponentFunction(\"column\", \"reloadHeaderFilter\", this.reloadHeaderFilter.bind(this));\r\n\t\tthis.registerComponentFunction(\"column\", \"getHeaderFilterValue\", this.getHeaderFilterValue.bind(this));\r\n\t\tthis.registerComponentFunction(\"column\", \"setHeaderFilterValue\", this.setHeaderFilterValue.bind(this));\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tthis.subscribe(\"column-init\", this.initializeColumnHeaderFilter.bind(this));\r\n\t\tthis.subscribe(\"column-width-fit-before\", this.hideHeaderFilterElements.bind(this));\r\n\t\tthis.subscribe(\"column-width-fit-after\", this.showHeaderFilterElements.bind(this));\r\n\t\tthis.subscribe(\"table-built\", this.tableBuilt.bind(this));\r\n\r\n\t\tif(this.table.options.filterMode === \"remote\"){\r\n\t\t\tthis.subscribe(\"data-params\", this.remoteFilterParams.bind(this));\r\n\t\t}\r\n\r\n\t\tthis.registerDataHandler(this.filter.bind(this), 10);\r\n\t}\r\n\r\n\ttableBuilt(){\r\n\t\tif(this.table.options.initialFilter){\r\n\t\t\tthis.setFilter(this.table.options.initialFilter);\r\n\t\t}\r\n\r\n\t\tif(this.table.options.initialHeaderFilter){\r\n\t\t\tthis.table.options.initialHeaderFilter.forEach((item) => {\r\n\r\n\t\t\t\tvar column = this.table.columnManager.findColumn(item.field);\r\n\r\n\t\t\t\tif(column){\r\n\t\t\t\t\tthis.setHeaderFilterValue(column, item.value);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.warn(\"Column Filter Error - No matching column found:\", item.field);\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tremoteFilterParams(data, config, silent, params){\r\n\t\tparams.filter = this.getFilters(true, true);\r\n\t\treturn params;\r\n\t}\r\n\r\n\t///////////////////////////////////\r\n\t///////// Table Functions /////////\r\n\t///////////////////////////////////\r\n\r\n\t//set standard filters\r\n\tuserSetFilter(field, type, value, params){\r\n\t\tthis.setFilter(field, type, value, params);\r\n\t\tthis.refreshFilter();\r\n\t}\r\n\r\n\t//set standard filters\r\n\tuserRefreshFilter(){\r\n\t\tthis.refreshFilter();\r\n\t}\r\n\r\n\t//add filter to array\r\n\tuserAddFilter(field, type, value, params){\r\n\t\tthis.addFilter(field, type, value, params);\r\n\t\tthis.refreshFilter();\r\n\t}\r\n\r\n\tuserSetHeaderFilterFocus(field){\r\n\t\tvar column = this.table.columnManager.findColumn(field);\r\n\r\n\t\tif(column){\r\n\t\t\tthis.setHeaderFilterFocus(column);\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Column Filter Focus Error - No matching column found:\", field);\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\tuserGetHeaderFilterValue(field) {\r\n\t\tvar column = this.table.columnManager.findColumn(field);\r\n\r\n\t\tif(column){\r\n\t\t\treturn this.getHeaderFilterValue(column);\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Column Filter Error - No matching column found:\", field);\r\n\t\t}\r\n\t}\r\n\r\n\tuserSetHeaderFilterValue(field, value){\r\n\t\tvar column = this.table.columnManager.findColumn(field);\r\n\r\n\t\tif(column){\r\n\t\t\tthis.setHeaderFilterValue(column, value);\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Column Filter Error - No matching column found:\", field);\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\t//remove filter from array\r\n\tuserRemoveFilter(field, type, value){\r\n\t\tthis.removeFilter(field, type, value);\r\n\t\tthis.refreshFilter();\r\n\t}\r\n\r\n\t//clear filters\r\n\tuserClearFilter(all){\r\n\t\tthis.clearFilter(all);\r\n\t\tthis.refreshFilter();\r\n\t}\r\n\r\n\t//clear header filters\r\n\tuserClearHeaderFilter(){\r\n\t\tthis.clearHeaderFilter();\r\n\t\tthis.refreshFilter();\r\n\t}\r\n\r\n\r\n\t//search for specific row components\r\n\tsearchRows(field, type, value){\r\n\t\treturn this.search(\"rows\", field, type, value);\r\n\t}\r\n\r\n\t//search for specific data\r\n\tsearchData(field, type, value){\r\n\t\treturn this.search(\"data\", field, type, value);\r\n\t}\r\n\r\n\t///////////////////////////////////\r\n\t///////// Internal Logic //////////\r\n\t///////////////////////////////////\r\n\r\n\tinitializeColumnHeaderFilter(column){\r\n\t\tvar def = column.definition;\r\n\r\n\t\tif(def.headerFilter){\r\n\r\n\t\t\tif(typeof def.headerFilterPlaceholder !== \"undefined\" && def.field){\r\n\t\t\t\tthis.module(\"localize\").setHeaderFilterColumnPlaceholder(def.field, def.headerFilterPlaceholder);\r\n\t\t\t}\r\n\r\n\t\t\tthis.initializeColumn(column);\r\n\t\t}\r\n\t}\r\n\r\n\t//initialize column header filter\r\n\tinitializeColumn(column, value){\r\n\t\tvar self = this,\r\n\t\tfield = column.getField(),\r\n\t\tparams;\r\n\r\n\t\t//handle successfull value change\r\n\t\tfunction success(value){\r\n\t\t\tvar filterType = (column.modules.filter.tagType == \"input\" && column.modules.filter.attrType == \"text\") || column.modules.filter.tagType == \"textarea\" ? \"partial\" : \"match\",\r\n\t\t\ttype = \"\",\r\n\t\t\tfilterChangeCheck = \"\",\r\n\t\t\tfilterFunc;\r\n\r\n\t\t\tif(typeof column.modules.filter.prevSuccess === \"undefined\" || column.modules.filter.prevSuccess !== value){\r\n\r\n\t\t\t\tcolumn.modules.filter.prevSuccess = value;\r\n\r\n\t\t\t\tif(!column.modules.filter.emptyFunc(value)){\r\n\t\t\t\t\tcolumn.modules.filter.value = value;\r\n\r\n\t\t\t\t\tswitch(typeof column.definition.headerFilterFunc){\r\n\t\t\t\t\t\tcase \"string\":\r\n\t\t\t\t\t\tif(Filter.filters[column.definition.headerFilterFunc]){\r\n\t\t\t\t\t\t\ttype = column.definition.headerFilterFunc;\r\n\t\t\t\t\t\t\tfilterFunc = function(data){\r\n\t\t\t\t\t\t\t\tvar params = column.definition.headerFilterFuncParams || {};\r\n\t\t\t\t\t\t\t\tvar fieldVal = column.getFieldValue(data);\r\n\r\n\t\t\t\t\t\t\t\tparams = typeof params === \"function\" ? params(value, fieldVal, data) : params;\r\n\r\n\t\t\t\t\t\t\t\treturn Filter.filters[column.definition.headerFilterFunc](value, fieldVal, data, params);\r\n\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\tconsole.warn(\"Header Filter Error - Matching filter function not found: \", column.definition.headerFilterFunc);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\tcase \"function\":\r\n\t\t\t\t\t\tfilterFunc = function(data){\r\n\t\t\t\t\t\t\tvar params = column.definition.headerFilterFuncParams || {};\r\n\t\t\t\t\t\t\tvar fieldVal = column.getFieldValue(data);\r\n\r\n\t\t\t\t\t\t\tparams = typeof params === \"function\" ? params(value, fieldVal, data) : params;\r\n\r\n\t\t\t\t\t\t\treturn column.definition.headerFilterFunc(value, fieldVal, data, params);\r\n\t\t\t\t\t\t};\r\n\r\n\t\t\t\t\t\ttype = filterFunc;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif(!filterFunc){\r\n\t\t\t\t\t\tswitch(filterType){\r\n\t\t\t\t\t\t\tcase \"partial\":\r\n\t\t\t\t\t\t\tfilterFunc = function(data){\r\n\t\t\t\t\t\t\t\tvar colVal = column.getFieldValue(data);\r\n\r\n\t\t\t\t\t\t\t\tif(typeof colVal !== 'undefined' && colVal !== null){\r\n\t\t\t\t\t\t\t\t\treturn String(colVal).toLowerCase().indexOf(String(value).toLowerCase()) > -1;\r\n\t\t\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t\ttype = \"like\";\r\n\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\t\tdefault:\r\n\t\t\t\t\t\t\tfilterFunc = function(data){\r\n\t\t\t\t\t\t\t\treturn column.getFieldValue(data) == value;\r\n\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t\ttype = \"=\";\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tself.headerFilters[field] = {value:value, func:filterFunc, type:type, params:params || {}};\r\n\r\n\t\t\t\t}else{\r\n\t\t\t\t\tdelete self.headerFilters[field];\r\n\t\t\t\t}\r\n\r\n\t\t\t\tfilterChangeCheck = JSON.stringify(self.headerFilters);\r\n\r\n\t\t\t\tif(self.prevHeaderFilterChangeCheck !== filterChangeCheck){\r\n\t\t\t\t\tself.prevHeaderFilterChangeCheck = filterChangeCheck;\r\n\r\n\t\t\t\t\tself.trackChanges();\r\n\t\t\t\t\tself.refreshFilter();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\tcolumn.modules.filter = {\r\n\t\t\tsuccess:success,\r\n\t\t\tattrType:false,\r\n\t\t\ttagType:false,\r\n\t\t\temptyFunc:false,\r\n\t\t};\r\n\r\n\t\tthis.generateHeaderFilterElement(column);\r\n\t}\r\n\r\n\tgenerateHeaderFilterElement(column, initialValue, reinitialize){\r\n\t\tvar self = this,\r\n\t\tsuccess = column.modules.filter.success,\r\n\t\tfield = column.getField(),\r\n\t\tfilterElement, editor, editorElement, cellWrapper, typingTimer, searchTrigger, params;\r\n\r\n\t\t//handle aborted edit\r\n\t\tfunction cancel(){}\r\n\r\n\t\tif(column.modules.filter.headerElement && column.modules.filter.headerElement.parentNode){\r\n\t\t\tcolumn.contentElement.removeChild(column.modules.filter.headerElement.parentNode);\r\n\t\t}\r\n\r\n\t\tif(field){\r\n\r\n\t\t\t//set empty value function\r\n\t\t\tcolumn.modules.filter.emptyFunc = column.definition.headerFilterEmptyCheck || function(value){\r\n\t\t\t\treturn !value && value !== \"0\" && value !== 0;\r\n\t\t\t};\r\n\r\n\t\t\tfilterElement = document.createElement(\"div\");\r\n\t\t\tfilterElement.classList.add(\"tabulator-header-filter\");\r\n\r\n\t\t\t//set column editor\r\n\t\t\tswitch(typeof column.definition.headerFilter){\r\n\t\t\t\tcase \"string\":\r\n\t\t\t\tif(self.table.modules.edit.editors[column.definition.headerFilter]){\r\n\t\t\t\t\teditor = self.table.modules.edit.editors[column.definition.headerFilter];\r\n\r\n\t\t\t\t\tif((column.definition.headerFilter === \"tick\" || column.definition.headerFilter === \"tickCross\") && !column.definition.headerFilterEmptyCheck){\r\n\t\t\t\t\t\tcolumn.modules.filter.emptyFunc = function(value){\r\n\t\t\t\t\t\t\treturn value !== true && value !== false;\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t}\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.warn(\"Filter Error - Cannot build header filter, No such editor found: \", column.definition.editor);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"function\":\r\n\t\t\t\teditor = column.definition.headerFilter;\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"boolean\":\r\n\t\t\t\tif(column.modules.edit && column.modules.edit.editor){\r\n\t\t\t\t\teditor = column.modules.edit.editor;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tif(column.definition.formatter && self.table.modules.edit.editors[column.definition.formatter]){\r\n\t\t\t\t\t\teditor = self.table.modules.edit.editors[column.definition.formatter];\r\n\r\n\t\t\t\t\t\tif((column.definition.formatter === \"tick\" || column.definition.formatter === \"tickCross\") && !column.definition.headerFilterEmptyCheck){\r\n\t\t\t\t\t\t\tcolumn.modules.filter.emptyFunc = function(value){\r\n\t\t\t\t\t\t\t\treturn value !== true && value !== false;\r\n\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\teditor = self.table.modules.edit.editors[\"input\"];\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\r\n\t\t\tif(editor){\r\n\r\n\t\t\t\tcellWrapper = {\r\n\t\t\t\t\tgetValue:function(){\r\n\t\t\t\t\t\treturn typeof initialValue !== \"undefined\" ? initialValue : \"\";\r\n\t\t\t\t\t},\r\n\t\t\t\t\tgetField:function(){\r\n\t\t\t\t\t\treturn column.definition.field;\r\n\t\t\t\t\t},\r\n\t\t\t\t\tgetElement:function(){\r\n\t\t\t\t\t\treturn filterElement;\r\n\t\t\t\t\t},\r\n\t\t\t\t\tgetColumn:function(){\r\n\t\t\t\t\t\treturn column.getComponent();\r\n\t\t\t\t\t},\r\n\t\t\t\t\tgetRow:function(){\r\n\t\t\t\t\t\treturn {\r\n\t\t\t\t\t\t\tnormalizeHeight:function(){\r\n\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t}\r\n\t\t\t\t};\r\n\r\n\t\t\t\tparams = column.definition.headerFilterParams || {};\r\n\r\n\t\t\t\tparams = typeof params === \"function\" ? params.call(self.table) : params;\r\n\r\n\t\t\t\teditorElement = editor.call(this.table.modules.edit, cellWrapper, function(){}, success, cancel, params);\r\n\r\n\t\t\t\tif(!editorElement){\r\n\t\t\t\t\tconsole.warn(\"Filter Error - Cannot add filter to \" + field + \" column, editor returned a value of false\");\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(!(editorElement instanceof Node)){\r\n\t\t\t\t\tconsole.warn(\"Filter Error - Cannot add filter to \" + field + \" column, editor should return an instance of Node, the editor returned:\", editorElement);\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//set Placeholder Text\r\n\t\t\t\tif(field){\r\n\t\t\t\t\tself.langBind(\"headerFilters|columns|\" + column.definition.field, function(value){\r\n\t\t\t\t\t\teditorElement.setAttribute(\"placeholder\", typeof value !== \"undefined\" && value ? value : self.langText(\"headerFilters|default\"));\r\n\t\t\t\t\t});\r\n\t\t\t\t}else{\r\n\t\t\t\t\tself.langBind(\"headerFilters|default\", function(value){\r\n\t\t\t\t\t\teditorElement.setAttribute(\"placeholder\", value);\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//focus on element on click\r\n\t\t\t\teditorElement.addEventListener(\"click\", function(e){\r\n\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\teditorElement.focus();\r\n\t\t\t\t});\r\n\r\n\t\t\t\teditorElement.addEventListener(\"focus\", (e) => {\r\n\t\t\t\t\tvar left = this.table.columnManager.element.scrollLeft;\r\n\r\n\t\t\t\t\tif(left !== this.table.rowManager.element.scrollLeft){\r\n\t\t\t\t\t\tthis.table.rowManager.scrollHorizontal(left);\r\n\t\t\t\t\t\tthis.table.columnManager.scrollHorizontal(left);\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\t//live update filters as user types\r\n\t\t\t\ttypingTimer = false;\r\n\r\n\t\t\t\tsearchTrigger = function(e){\r\n\t\t\t\t\tif(typingTimer){\r\n\t\t\t\t\t\tclearTimeout(typingTimer);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\ttypingTimer = setTimeout(function(){\r\n\t\t\t\t\t\tsuccess(editorElement.value);\r\n\t\t\t\t\t},self.table.options.headerFilterLiveFilterDelay);\r\n\t\t\t\t};\r\n\r\n\t\t\t\tcolumn.modules.filter.headerElement = editorElement;\r\n\t\t\t\tcolumn.modules.filter.attrType = editorElement.hasAttribute(\"type\") ? editorElement.getAttribute(\"type\").toLowerCase() : \"\" ;\r\n\t\t\t\tcolumn.modules.filter.tagType = editorElement.tagName.toLowerCase();\r\n\r\n\t\t\t\tif(column.definition.headerFilterLiveFilter !== false){\r\n\r\n\t\t\t\t\tif (\r\n\t\t\t\t\t\t!(\r\n\t\t\t\t\t\t\tcolumn.definition.headerFilter === 'autocomplete' ||\r\n\t\t\t\t\t\t\tcolumn.definition.headerFilter === 'tickCross' ||\r\n\t\t\t\t\t\t\t((column.definition.editor === 'autocomplete' ||\r\n\t\t\t\t\t\t\t\tcolumn.definition.editor === 'tickCross') &&\r\n\t\t\t\t\t\t\tcolumn.definition.headerFilter === true)\r\n\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t) {\r\n\t\t\t\t\t\teditorElement.addEventListener(\"keyup\", searchTrigger);\r\n\t\t\t\t\teditorElement.addEventListener(\"search\", searchTrigger);\r\n\r\n\r\n\t\t\t\t\t//update number filtered columns on change\r\n\t\t\t\t\tif(column.modules.filter.attrType == \"number\"){\r\n\t\t\t\t\t\teditorElement.addEventListener(\"change\", function(e){\r\n\t\t\t\t\t\t\tsuccess(editorElement.value);\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t//change text inputs to search inputs to allow for clearing of field\r\n\t\t\t\t\tif(column.modules.filter.attrType == \"text\" && this.table.browser !== \"ie\"){\r\n\t\t\t\t\t\teditorElement.setAttribute(\"type\", \"search\");\r\n\t\t\t\t\t\t// editorElement.off(\"change blur\"); //prevent blur from triggering filter and preventing selection click\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\t\t//prevent input and select elements from propegating click to column sorters etc\r\n\t\t\t\t\tif(column.modules.filter.tagType == \"input\" || column.modules.filter.tagType == \"select\" || column.modules.filter.tagType == \"textarea\"){\r\n\t\t\t\t\t\teditorElement.addEventListener(\"mousedown\",function(e){\r\n\t\t\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tfilterElement.appendChild(editorElement);\r\n\r\n\t\t\t\tcolumn.contentElement.appendChild(filterElement);\r\n\r\n\t\t\t\tif(!reinitialize){\r\n\t\t\t\t\tself.headerFilterColumns.push(column);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Filter Error - Cannot add header filter, column has no field set:\", column.definition.title);\r\n\t\t}\r\n\t}\r\n\r\n\t//hide all header filter elements (used to ensure correct column widths in \"fitData\" layout mode)\r\n\thideHeaderFilterElements(){\r\n\t\tthis.headerFilterColumns.forEach(function(column){\r\n\t\t\tif(column.modules.filter && column.modules.filter.headerElement){\r\n\t\t\t\tcolumn.modules.filter.headerElement.style.display = 'none';\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t//show all header filter elements (used to ensure correct column widths in \"fitData\" layout mode)\r\n\tshowHeaderFilterElements(){\r\n\t\tthis.headerFilterColumns.forEach(function(column){\r\n\t\t\tif(column.modules.filter && column.modules.filter.headerElement){\r\n\t\t\t\tcolumn.modules.filter.headerElement.style.display = '';\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t//programatically set focus of header filter\r\n\tsetHeaderFilterFocus(column){\r\n\t\tif(column.modules.filter && column.modules.filter.headerElement){\r\n\t\t\tcolumn.modules.filter.headerElement.focus();\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Column Filter Focus Error - No header filter set on column:\", column.getField());\r\n\t\t}\r\n\t}\r\n\r\n\t//programmatically get value of header filter\r\n\tgetHeaderFilterValue(column){\r\n\t\tif(column.modules.filter && column.modules.filter.headerElement){\r\n\t\t\treturn column.modules.filter.headerElement.value;\r\n\t\t} else {\r\n\t\t\tconsole.warn(\"Column Filter Error - No header filter set on column:\", column.getField());\r\n\t\t}\r\n\t}\r\n\r\n\t//programatically set value of header filter\r\n\tsetHeaderFilterValue(column, value){\r\n\t\tif (column){\r\n\t\t\tif(column.modules.filter && column.modules.filter.headerElement){\r\n\t\t\t\tthis.generateHeaderFilterElement(column, value, true);\r\n\t\t\t\tcolumn.modules.filter.success(value);\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Column Filter Error - No header filter set on column:\", column.getField());\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\treloadHeaderFilter(column){\r\n\t\tif (column){\r\n\t\t\tif(column.modules.filter && column.modules.filter.headerElement){\r\n\t\t\t\tthis.generateHeaderFilterElement(column, column.modules.filter.value, true);\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Column Filter Error - No header filter set on column:\", column.getField());\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\trefreshFilter(){\r\n\t\tif(this.table.options.filterMode === \"remote\"){\r\n\t\t\tthis.reloadData();\r\n\t\t}else{\r\n\t\t\tthis.refreshData()\r\n\t\t}\r\n\r\n\t\t//TODO - Persist left position of row manager\r\n\t\t// left = this.scrollLeft;\r\n\t\t// this.scrollHorizontal(left);\r\n\t}\r\n\r\n\t//check if the filters has changed since last use\r\n\ttrackChanges(){\r\n\t\tthis.changed = true;\r\n\t\tthis.dispatch(\"filter-changed\");\r\n\t}\r\n\r\n\t//check if the filters has changed since last use\r\n\thasChanged(){\r\n\t\tvar changed = this.changed;\r\n\t\tthis.changed = false;\r\n\t\treturn changed;\r\n\t}\r\n\r\n\t//set standard filters\r\n\tsetFilter(field, type, value, params){\r\n\t\tthis.filterList = [];\r\n\r\n\t\tif(!Array.isArray(field)){\r\n\t\t\tfield = [{field:field, type:type, value:value, params:params}];\r\n\t\t}\r\n\r\n\t\tthis.addFilter(field);\r\n\t}\r\n\r\n\t//add filter to array\r\n\taddFilter(field, type, value, params){\r\n\t\tvar changed = false;\r\n\r\n\t\tif(!Array.isArray(field)){\r\n\t\t\tfield = [{field:field, type:type, value:value, params:params}];\r\n\t\t}\r\n\r\n\t\tfield.forEach((filter) => {\r\n\r\n\t\t\tfilter = this.findFilter(filter);\r\n\r\n\t\t\tif(filter){\r\n\t\t\t\tthis.filterList.push(filter);\r\n\t\t\t\tthis.changed = true;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tif(changed){\r\n\t\t\tthis.trackChanges();\r\n\t\t}\r\n\t}\r\n\r\n\tfindFilter(filter){\r\n\t\tvar column;\r\n\r\n\t\tif(Array.isArray(filter)){\r\n\t\t\treturn this.findSubFilters(filter);\r\n\t\t}\r\n\r\n\t\tvar filterFunc = false;\r\n\r\n\t\tif(typeof filter.field == \"function\"){\r\n\t\t\tfilterFunc = function(data){\r\n\t\t\t\treturn filter.field(data, filter.type || {})// pass params to custom filter function\r\n\t\t\t};\r\n\t\t}else{\r\n\r\n\t\t\tif(Filter.filters[filter.type]){\r\n\r\n\t\t\t\tcolumn = this.table.columnManager.getColumnByField(filter.field);\r\n\r\n\t\t\t\tif(column){\r\n\t\t\t\t\tfilterFunc = function(data){\r\n\t\t\t\t\t\treturn Filter.filters[filter.type](filter.value, column.getFieldValue(data), data, filter.params || {});\r\n\t\t\t\t\t};\r\n\t\t\t\t}else{\r\n\t\t\t\t\tfilterFunc = function(data){\r\n\t\t\t\t\t\treturn Filter.filters[filter.type](filter.value, data[filter.field], data, filter.params || {});\r\n\t\t\t\t\t};\r\n\t\t\t\t}\r\n\r\n\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Filter Error - No such filter type found, ignoring: \", filter.type);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfilter.func = filterFunc;\r\n\r\n\t\treturn filter.func ? filter : false;\r\n\t}\r\n\r\n\tfindSubFilters(filters){\r\n\t\tvar output = [];\r\n\r\n\t\tfilters.forEach((filter) => {\r\n\t\t\tfilter = this.findFilter(filter);\r\n\r\n\t\t\tif(filter){\r\n\t\t\t\toutput.push(filter);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn output.length ? output : false;\r\n\t}\r\n\r\n\t//get all filters\r\n\tgetFilters(all, ajax){\r\n\t\tvar output = [];\r\n\r\n\t\tif(all){\r\n\t\t\toutput = this.getHeaderFilters();\r\n\t\t}\r\n\r\n\t\tif(ajax){\r\n\t\t\toutput.forEach(function(item){\r\n\t\t\t\tif(typeof item.type == \"function\"){\r\n\t\t\t\t\titem.type = \"function\";\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\toutput = output.concat(this.filtersToArray(this.filterList, ajax));\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\t//filter to Object\r\n\tfiltersToArray(filterList, ajax){\r\n\t\tvar output = [];\r\n\r\n\t\tfilterList.forEach((filter) => {\r\n\t\t\tvar item;\r\n\r\n\t\t\tif(Array.isArray(filter)){\r\n\t\t\t\toutput.push(this.filtersToArray(filter, ajax));\r\n\t\t\t}else{\r\n\t\t\t\titem = {field:filter.field, type:filter.type, value:filter.value}\r\n\r\n\t\t\t\tif(ajax){\r\n\t\t\t\t\tif(typeof item.type == \"function\"){\r\n\t\t\t\t\t\titem.type = \"function\";\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\toutput.push(item);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\t//get all filters\r\n\tgetHeaderFilters(){\r\n\t\tvar output = [];\r\n\r\n\t\tfor(var key in this.headerFilters){\r\n\t\t\toutput.push({field:key, type:this.headerFilters[key].type, value:this.headerFilters[key].value});\r\n\t\t}\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\t//remove filter from array\r\n\tremoveFilter(field, type, value){\r\n\t\tvar changed = false;\r\n\r\n\t\tif(!Array.isArray(field)){\r\n\t\t\tfield = [{field:field, type:type, value:value}];\r\n\t\t}\r\n\r\n\t\tfield.forEach((filter) => {\r\n\t\t\tvar index = -1;\r\n\r\n\t\t\tif(typeof filter.field == \"object\"){\r\n\t\t\t\tindex = this.filterList.findIndex((element) => {\r\n\t\t\t\t\treturn filter === element;\r\n\t\t\t\t});\r\n\t\t\t}else{\r\n\t\t\t\tindex = this.filterList.findIndex((element) => {\r\n\t\t\t\t\treturn filter.field === element.field && filter.type === element.type && filter.value === element.value;\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\tif(index > -1){\r\n\t\t\t\tthis.filterList.splice(index, 1);\r\n\t\t\t\tchanged = true;\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Filter Error - No matching filter type found, ignoring: \", filter.type);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tthis.trackChanges();\r\n\t}\r\n\r\n\t//clear filters\r\n\tclearFilter(all){\r\n\t\tthis.filterList = [];\r\n\r\n\t\tif(all){\r\n\t\t\tthis.clearHeaderFilter();\r\n\t\t}\r\n\r\n\t\tthis.trackChanges();\r\n\t}\r\n\r\n\t//clear header filters\r\n\tclearHeaderFilter(){\r\n\t\tthis.headerFilters = {};\r\n\t\tthis.prevHeaderFilterChangeCheck = \"{}\";\r\n\r\n\t\tthis.headerFilterColumns.forEach((column) => {\r\n\t\t\tif(typeof column.modules.filter.value !== \"undefined\"){\r\n\t\t\t\tdelete column.modules.filter.value;\r\n\t\t\t}\r\n\t\t\tcolumn.modules.filter.prevSuccess = undefined;\r\n\t\t\tthis.reloadHeaderFilter(column);\r\n\t\t});\r\n\r\n\t\tthis.trackChanges();\r\n\t}\r\n\r\n\t//search data and return matching rows\r\n\tsearch (searchType, field, type, value){\r\n\t\tvar activeRows = [],\r\n\t\tfilterList = [];\r\n\r\n\t\tif(!Array.isArray(field)){\r\n\t\t\tfield = [{field:field, type:type, value:value}];\r\n\t\t}\r\n\r\n\t\tfield.forEach((filter) => {\r\n\t\t\tfilter = this.findFilter(filter);\r\n\r\n\t\t\tif(filter){\r\n\t\t\t\tfilterList.push(filter);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tthis.table.rowManager.rows.forEach((row) => {\r\n\t\t\tvar match = true;\r\n\r\n\t\t\tfilterList.forEach((filter) => {\r\n\t\t\t\tif(!this.filterRecurse(filter, row.getData())){\r\n\t\t\t\t\tmatch = false;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tif(match){\r\n\t\t\t\tactiveRows.push(searchType === \"data\" ? row.getData(\"data\") : row.getComponent());\r\n\t\t\t}\r\n\r\n\t\t});\r\n\r\n\t\treturn activeRows;\r\n\t}\r\n\r\n\t//filter row array\r\n\tfilter(rowList, filters){\r\n\t\tvar activeRows = [],\r\n\t\tactiveRowComponents = [];\r\n\r\n\t\tif(this.subscribedExternal(\"dataFiltering\")){\r\n\t\t\tthis.dispatchExternal(\"dataFiltering\", this.getFilters());\r\n\t\t}\r\n\r\n\t\tif(this.table.options.filterMode !== \"remote\" && (this.filterList.length || Object.keys(this.headerFilters).length)){\r\n\r\n\t\t\trowList.forEach((row) => {\r\n\t\t\t\tif(this.filterRow(row)){\r\n\t\t\t\t\tactiveRows.push(row);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t}else{\r\n\t\t\tactiveRows = rowList.slice(0);\r\n\t\t}\r\n\r\n\t\tif(this.subscribedExternal(\"dataFiltered\")){\r\n\r\n\t\t\tactiveRows.forEach((row) => {\r\n\t\t\t\tactiveRowComponents.push(row.getComponent());\r\n\t\t\t});\r\n\r\n\t\t\tthis.dispatchExternal(\"dataFiltered\", this.getFilters(), activeRowComponents);\r\n\t\t}\r\n\r\n\t\treturn activeRows;\r\n\t}\r\n\r\n\t//filter individual row\r\n\tfilterRow(row, filters){\r\n\t\tvar match = true,\r\n\t\tdata = row.getData();\r\n\r\n\t\tthis.filterList.forEach((filter) => {\r\n\t\t\tif(!this.filterRecurse(filter, data)){\r\n\t\t\t\tmatch = false;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\r\n\t\tfor(var field in this.headerFilters){\r\n\t\t\tif(!this.headerFilters[field].func(data)){\r\n\t\t\t\tmatch = false;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn match;\r\n\t}\r\n\r\n\tfilterRecurse(filter, data){\r\n\t\tvar match = false;\r\n\r\n\t\tif(Array.isArray(filter)){\r\n\t\t\tfilter.forEach((subFilter) => {\r\n\t\t\t\tif(this.filterRecurse(subFilter, data)){\r\n\t\t\t\t\tmatch = true;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tmatch = filter.func(data);\r\n\t\t}\r\n\r\n\t\treturn match;\r\n\t}\r\n}\r\n\r\nFilter.moduleName = \"filter\";\r\n\r\n//load defaults\r\nFilter.filters = defaultFilters;\r\n\r\nexport default Filter;","export default function(cell, formatterParams, onRendered){\r\n\treturn this.emptyToSpace(this.sanitizeHTML(cell.getValue()));\r\n};","export default function(cell, formatterParams, onRendered){\r\n\treturn cell.getValue();\r\n};","export default function(cell, formatterParams, onRendered){\r\n\tcell.getElement().style.whiteSpace = \"pre-wrap\";\r\n\treturn this.emptyToSpace(this.sanitizeHTML(cell.getValue()));\r\n};","export default function(cell, formatterParams, onRendered){\r\n\tvar floatVal = parseFloat(cell.getValue()),\r\n\tnumber, integer, decimal, rgx;\r\n\r\n\tvar decimalSym = formatterParams.decimal || \".\";\r\n\tvar thousandSym = formatterParams.thousand || \",\";\r\n\tvar symbol = formatterParams.symbol || \"\";\r\n\tvar after = !!formatterParams.symbolAfter;\r\n\tvar precision = typeof formatterParams.precision !== \"undefined\" ? formatterParams.precision : 2;\r\n\r\n\tif(isNaN(floatVal)){\r\n\t\treturn this.emptyToSpace(this.sanitizeHTML(cell.getValue()));\r\n\t}\r\n\r\n\tnumber = precision !== false ? floatVal.toFixed(precision) : floatVal;\r\n\tnumber = String(number).split(\".\");\r\n\r\n\tinteger = number[0];\r\n\tdecimal = number.length > 1 ? decimalSym + number[1] : \"\";\r\n\r\n\trgx = /(\\d+)(\\d{3})/;\r\n\r\n\twhile (rgx.test(integer)){\r\n\t\tinteger = integer.replace(rgx, \"$1\" + thousandSym + \"$2\");\r\n\t}\r\n\r\n\treturn after ? integer + decimal + symbol : symbol + integer + decimal;\r\n};","export default function(cell, formatterParams, onRendered){\r\n\tvar value = cell.getValue(),\r\n\turlPrefix = formatterParams.urlPrefix || \"\",\r\n\tdownload = formatterParams.download,\r\n\tlabel = value,\r\n\tel = document.createElement(\"a\"),\r\n\tdata;\r\n\r\n\tif(formatterParams.labelField){\r\n\t\tdata = cell.getData();\r\n\t\tlabel = data[formatterParams.labelField];\r\n\t}\r\n\r\n\tif(formatterParams.label){\r\n\t\tswitch(typeof formatterParams.label){\r\n\t\t\tcase \"string\":\r\n\t\t\tlabel = formatterParams.label;\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"function\":\r\n\t\t\tlabel = formatterParams.label(cell);\r\n\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\tif(label){\r\n\t\tif(formatterParams.urlField){\r\n\t\t\tdata = cell.getData();\r\n\t\t\tvalue = data[formatterParams.urlField];\r\n\t\t}\r\n\r\n\t\tif(formatterParams.url){\r\n\t\t\tswitch(typeof formatterParams.url){\r\n\t\t\t\tcase \"string\":\r\n\t\t\t\tvalue = formatterParams.url;\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"function\":\r\n\t\t\t\tvalue = formatterParams.url(cell);\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tel.setAttribute(\"href\", urlPrefix + value);\r\n\r\n\t\tif(formatterParams.target){\r\n\t\t\tel.setAttribute(\"target\", formatterParams.target);\r\n\t\t}\r\n\r\n\t\tif(formatterParams.download){\r\n\r\n\t\t\tif(typeof download == \"function\"){\r\n\t\t\t\tdownload = download(cell);\r\n\t\t\t}else{\r\n\t\t\t\tdownload = download === true ? \"\" : download;\r\n\t\t\t}\r\n\r\n\t\t\tel.setAttribute(\"download\", download);\r\n\t\t}\r\n\r\n\t\tel.innerHTML = this.emptyToSpace(this.sanitizeHTML(label));\r\n\r\n\t\treturn el;\r\n\t}else{\r\n\t\treturn \" \";\r\n\t}\r\n};","export default function(cell, formatterParams, onRendered){\r\n\tvar el = document.createElement(\"img\"),\r\n\tsrc = cell.getValue();\r\n\r\n\tif(formatterParams.urlPrefix){\r\n\t\tsrc = formatterParams.urlPrefix + cell.getValue();\r\n\t}\r\n\r\n\tif(formatterParams.urlSuffix){\r\n\t\tsrc = src + formatterParams.urlSuffix;\r\n\t}\r\n\r\n\tel.setAttribute(\"src\", src);\r\n\r\n\tswitch(typeof formatterParams.height){\r\n\t\tcase \"number\":\r\n\t\tel.style.height = formatterParams.height + \"px\";\r\n\t\tbreak;\r\n\r\n\t\tcase \"string\":\r\n\t\tel.style.height = formatterParams.height;\r\n\t\tbreak;\r\n\t}\r\n\r\n\tswitch(typeof formatterParams.width){\r\n\t\tcase \"number\":\r\n\t\tel.style.width = formatterParams.width + \"px\";\r\n\t\tbreak;\r\n\r\n\t\tcase \"string\":\r\n\t\tel.style.width = formatterParams.width;\r\n\t\tbreak;\r\n\t}\r\n\r\n\tel.addEventListener(\"load\", function(){\r\n\t\tcell.getRow().normalizeHeight();\r\n\t});\r\n\r\n\treturn el;\r\n};","export default function(cell, formatterParams, onRendered){\r\n\tvar value = cell.getValue(),\r\n\telement = cell.getElement(),\r\n\tempty = formatterParams.allowEmpty,\r\n\ttruthy = formatterParams.allowTruthy,\r\n\ttick = typeof formatterParams.tickElement !== \"undefined\" ? formatterParams.tickElement : '',\r\n\tcross = typeof formatterParams.crossElement !== \"undefined\" ? formatterParams.crossElement : '';\r\n\r\n\tif((truthy && value) || (value === true || value === \"true\" || value === \"True\" || value === 1 || value === \"1\")){\r\n\t\telement.setAttribute(\"aria-checked\", true);\r\n\t\treturn tick || \"\";\r\n\t}else{\r\n\t\tif(empty && (value === \"null\" || value === \"\" || value === null || typeof value === \"undefined\")){\r\n\t\t\telement.setAttribute(\"aria-checked\", \"mixed\");\r\n\t\t\treturn \"\";\r\n\t\t}else{\r\n\t\t\telement.setAttribute(\"aria-checked\", false);\r\n\t\t\treturn cross || \"\";\r\n\t\t}\r\n\t}\r\n};","export default function(cell, formatterParams, onRendered){\r\n\tvar inputFormat = formatterParams.inputFormat || \"YYYY-MM-DD hh:mm:ss\";\r\n\tvar\toutputFormat = formatterParams.outputFormat || \"DD/MM/YYYY hh:mm:ss\";\r\n\tvar\tinvalid = typeof formatterParams.invalidPlaceholder !== \"undefined\" ? formatterParams.invalidPlaceholder : \"\";\r\n\tvar value = cell.getValue();\r\n\r\n\tvar newDatetime = moment(value, inputFormat);\r\n\r\n\tif(newDatetime.isValid()){\r\n\t\treturn formatterParams.timezone ? newDatetime.tz(formatterParams.timezone).format(outputFormat) : newDatetime.format(outputFormat);\r\n\t}else{\r\n\r\n\t\tif(invalid === true){\r\n\t\t\treturn value;\r\n\t\t}else if(typeof invalid === \"function\"){\r\n\t\t\treturn invalid(value);\r\n\t\t}else{\r\n\t\t\treturn invalid;\r\n\t\t}\r\n\t}\r\n};","export default function datetime(cell, formatterParams, onRendered) {\r\n\tvar inputFormat = formatterParams.inputFormat || \"YYYY-MM-DD hh:mm:ss\";\r\n\tvar invalid = typeof formatterParams.invalidPlaceholder !== \"undefined\" ? formatterParams.invalidPlaceholder : \"\";\r\n\tvar suffix = typeof formatterParams.suffix !== \"undefined\" ? formatterParams.suffix : false;\r\n\tvar unit = typeof formatterParams.unit !== \"undefined\" ? formatterParams.unit : undefined;\r\n\tvar humanize = typeof formatterParams.humanize !== \"undefined\" ? formatterParams.humanize : false;\r\n\tvar date = typeof formatterParams.date !== \"undefined\" ? formatterParams.date : moment();\r\n\tvar value = cell.getValue();\r\n\r\n\tvar newDatetime = moment(value, inputFormat);\r\n\r\n\tif (newDatetime.isValid()) {\r\n\t\tif(humanize){\r\n\t\t\treturn moment.duration(newDatetime.diff(date)).humanize(suffix);\r\n\t\t}else{\r\n\t\t\treturn newDatetime.diff(date, unit) + (suffix ? \" \" + suffix : \"\");\r\n\t\t}\r\n\r\n\t} else {\r\n\r\n\t\tif (invalid === true) {\r\n\t\t\treturn value;\r\n\t\t} else if (typeof invalid === \"function\") {\r\n\t\t\treturn invalid(value);\r\n\t\t} else {\r\n\t\t\treturn invalid;\r\n\t\t}\r\n\t}\r\n};","export default function (cell, formatterParams, onRendered) {\r\n\tvar value = cell.getValue();\r\n\r\n\tif (typeof formatterParams[value] === \"undefined\") {\r\n\t\tconsole.warn('Missing display value for ' + value);\r\n\t\treturn value;\r\n\t}\r\n\r\n\treturn formatterParams[value];\r\n};","export default function(cell, formatterParams, onRendered){\r\n\tvar value = cell.getValue(),\r\n\telement = cell.getElement(),\r\n\tmaxStars = formatterParams && formatterParams.stars ? formatterParams.stars : 5,\r\n\tstars = document.createElement(\"span\"),\r\n\tstar = document.createElementNS('http://www.w3.org/2000/svg', \"svg\"),\r\n\tstarActive = '',\r\n\tstarInactive = '';\r\n\r\n\t//style stars holder\r\n\tstars.style.verticalAlign = \"middle\";\r\n\r\n\t//style star\r\n\tstar.setAttribute(\"width\", \"14\");\r\n\tstar.setAttribute(\"height\", \"14\");\r\n\tstar.setAttribute(\"viewBox\", \"0 0 512 512\");\r\n\tstar.setAttribute(\"xml:space\", \"preserve\");\r\n\tstar.style.padding = \"0 1px\";\r\n\r\n\tvalue = value && !isNaN(value) ? parseInt(value) : 0;\r\n\r\n\tvalue = Math.max(0, Math.min(value, maxStars));\r\n\r\n\tfor(var i=1;i<= maxStars;i++){\r\n\t\tvar nextStar = star.cloneNode(true);\r\n\t\tnextStar.innerHTML = i <= value ? starActive : starInactive;\r\n\r\n\t\tstars.appendChild(nextStar);\r\n\t}\r\n\r\n\telement.style.whiteSpace = \"nowrap\";\r\n\telement.style.overflow = \"hidden\";\r\n\telement.style.textOverflow = \"ellipsis\";\r\n\r\n\telement.setAttribute(\"aria-label\", value);\r\n\r\n\treturn stars;\r\n};","export default function(cell, formatterParams, onRendered){\r\n\tvar value = this.sanitizeHTML(cell.getValue()) || 0,\r\n\tel = document.createElement(\"span\"),\r\n\tmax = formatterParams && formatterParams.max ? formatterParams.max : 100,\r\n\tmin = formatterParams && formatterParams.min ? formatterParams.min : 0,\r\n\tcolors = formatterParams && typeof formatterParams.color !== \"undefined\" ? formatterParams.color : [\"red\", \"orange\", \"green\"],\r\n\tcolor = \"#666666\",\r\n\tpercent, percentValue;\r\n\r\n\tif(isNaN(value) || typeof cell.getValue() === \"undefined\"){\r\n\t\treturn;\r\n\t}\r\n\r\n\tel.classList.add(\"tabulator-traffic-light\");\r\n\r\n\t//make sure value is in range\r\n\tpercentValue = parseFloat(value) <= max ? parseFloat(value) : max;\r\n\tpercentValue = parseFloat(percentValue) >= min ? parseFloat(percentValue) : min;\r\n\r\n\t//workout percentage\r\n\tpercent = (max - min) / 100;\r\n\tpercentValue = Math.round((percentValue - min) / percent);\r\n\r\n\t//set color\r\n\tswitch(typeof colors){\r\n\t\tcase \"string\":\r\n\t\tcolor = colors;\r\n\t\tbreak;\r\n\t\tcase \"function\":\r\n\t\tcolor = colors(value);\r\n\t\tbreak;\r\n\t\tcase \"object\":\r\n\t\tif(Array.isArray(colors)){\r\n\t\t\tvar unit = 100 / colors.length;\r\n\t\t\tvar index = Math.floor(percentValue / unit);\r\n\r\n\t\t\tindex = Math.min(index, colors.length - 1);\r\n\t\t\tindex = Math.max(index, 0);\r\n\t\t\tcolor = colors[index];\r\n\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\tel.style.backgroundColor = color;\r\n\r\n\treturn el;\r\n};","import CellComponent from '../../../../core/cell/CellComponent.js';\r\n\r\nexport default function(cell, formatterParams, onRendered){ //progress bar\r\n\tvar value = this.sanitizeHTML(cell.getValue()) || 0,\r\n\telement = cell.getElement(),\r\n\tmax = formatterParams && formatterParams.max ? formatterParams.max : 100,\r\n\tmin = formatterParams && formatterParams.min ? formatterParams.min : 0,\r\n\tlegendAlign = formatterParams && formatterParams.legendAlign ? formatterParams.legendAlign : \"center\",\r\n\tpercent, percentValue, color, legend, legendColor, top, left, right, bottom;\r\n\r\n\t//make sure value is in range\r\n\tpercentValue = parseFloat(value) <= max ? parseFloat(value) : max;\r\n\tpercentValue = parseFloat(percentValue) >= min ? parseFloat(percentValue) : min;\r\n\r\n\t//workout percentage\r\n\tpercent = (max - min) / 100;\r\n\tpercentValue = Math.round((percentValue - min) / percent);\r\n\r\n\t//set bar color\r\n\tswitch(typeof formatterParams.color){\r\n\t\tcase \"string\":\r\n\t\tcolor = formatterParams.color;\r\n\t\tbreak;\r\n\t\tcase \"function\":\r\n\t\tcolor = formatterParams.color(value);\r\n\t\tbreak;\r\n\t\tcase \"object\":\r\n\t\tif(Array.isArray(formatterParams.color)){\r\n\t\t\tvar unit = 100 / formatterParams.color.length;\r\n\t\t\tvar index = Math.floor(percentValue / unit);\r\n\r\n\t\t\tindex = Math.min(index, formatterParams.color.length - 1);\r\n\t\t\tindex = Math.max(index, 0);\r\n\t\t\tcolor = formatterParams.color[index];\r\n\t\t\tbreak;\r\n\t\t}\r\n\t\tdefault:\r\n\t\tcolor = \"#2DC214\";\r\n\t}\r\n\r\n\t//generate legend\r\n\tswitch(typeof formatterParams.legend){\r\n\t\tcase \"string\":\r\n\t\tlegend = formatterParams.legend;\r\n\t\tbreak;\r\n\t\tcase \"function\":\r\n\t\tlegend = formatterParams.legend(value);\r\n\t\tbreak;\r\n\t\tcase \"boolean\":\r\n\t\tlegend = value;\r\n\t\tbreak;\r\n\t\tdefault:\r\n\t\tlegend = false;\r\n\t}\r\n\r\n\t//set legend color\r\n\tswitch(typeof formatterParams.legendColor){\r\n\t\tcase \"string\":\r\n\t\tlegendColor = formatterParams.legendColor;\r\n\t\tbreak;\r\n\t\tcase \"function\":\r\n\t\tlegendColor = formatterParams.legendColor(value);\r\n\t\tbreak;\r\n\t\tcase \"object\":\r\n\t\tif(Array.isArray(formatterParams.legendColor)){\r\n\t\t\tvar unit = 100 / formatterParams.legendColor.length;\r\n\t\t\tvar index = Math.floor(percentValue / unit);\r\n\r\n\t\t\tindex = Math.min(index, formatterParams.legendColor.length - 1);\r\n\t\t\tindex = Math.max(index, 0);\r\n\t\t\tlegendColor = formatterParams.legendColor[index];\r\n\t\t}\r\n\t\tbreak;\r\n\t\tdefault:\r\n\t\tlegendColor = \"#000\";\r\n\t}\r\n\r\n\telement.style.minWidth = \"30px\";\r\n\telement.style.position = \"relative\";\r\n\r\n\telement.setAttribute(\"aria-label\", percentValue);\r\n\r\n\tvar barEl = document.createElement(\"div\");\r\n\tbarEl.style.display = \"inline-block\";\r\n\tbarEl.style.position = \"relative\";\r\n\tbarEl.style.width = percentValue + \"%\";\r\n\tbarEl.style.backgroundColor = color;\r\n\tbarEl.style.height = \"100%\";\r\n\r\n\tbarEl.setAttribute('data-max', max);\r\n\tbarEl.setAttribute('data-min', min);\r\n\r\n\r\n\tif(legend){\r\n\t\tvar legendEl = document.createElement(\"div\");\r\n\t\tlegendEl.style.position = \"absolute\";\r\n\t\tlegendEl.style.top = \"4px\";\r\n\t\tlegendEl.style.left = 0;\r\n\t\tlegendEl.style.textAlign = legendAlign;\r\n\t\tlegendEl.style.width = \"100%\";\r\n\t\tlegendEl.style.color = legendColor;\r\n\t\tlegendEl.innerHTML = legend;\r\n\t}\r\n\r\n\tonRendered(function(){\r\n\r\n\t\t//handle custom element needed if formatter is to be included in printed/downloaded output\r\n\t\tif(!(cell instanceof CellComponent)){\r\n\t\t\tvar holderEl = document.createElement(\"div\");\r\n\t\t\tholderEl.style.position = \"absolute\";\r\n\t\t\tholderEl.style.top = \"4px\";\r\n\t\t\tholderEl.style.bottom = \"4px\";\r\n\t\t\tholderEl.style.left = \"4px\";\r\n\t\t\tholderEl.style.right = \"4px\";\r\n\r\n\t\t\telement.appendChild(holderEl);\r\n\r\n\t\t\telement = holderEl;\r\n\t\t}\r\n\r\n\t\telement.appendChild(barEl);\r\n\r\n\t\tif(legend){\r\n\t\t\telement.appendChild(legendEl);\r\n\t\t}\r\n\t});\r\n\r\n\treturn \"\";\r\n};","export default function(cell, formatterParams, onRendered){\r\n\tcell.getElement().style.backgroundColor = this.sanitizeHTML(cell.getValue());\r\n\treturn \"\";\r\n};","export default function(cell, formatterParams, onRendered){\r\n\treturn '';\r\n};","export default function(cell, formatterParams, onRendered){\r\n\treturn '';\r\n};","export default function(cell, formatterParams, onRendered){\r\n\treturn this.table.rowManager.activeRows.indexOf(cell.getRow()._getSelf()) + 1;\r\n};","export default function(cell, formatterParams, onRendered){\r\n\tcell.getElement().classList.add(\"tabulator-row-handle\");\r\n\treturn \"
\";\r\n};","export default function(cell, formatterParams, onRendered){\r\n\tvar open = false,\r\n\tel = document.createElement(\"div\"),\r\n\tconfig = cell.getRow()._row.modules.responsiveLayout;\r\n\r\n\tel.classList.add(\"tabulator-responsive-collapse-toggle\");\r\n\tel.innerHTML = \"+-\";\r\n\r\n\tcell.getElement().classList.add(\"tabulator-row-handle\");\r\n\r\n\tfunction toggleList(isOpen){\r\n\t\tvar collapseEl = config.element;\r\n\r\n\t\tconfig.open = isOpen;\r\n\r\n\t\tif(collapseEl){\r\n\r\n\t\t\tif(config.open){\r\n\t\t\t\tel.classList.add(\"open\");\r\n\t\t\t\tcollapseEl.style.display = '';\r\n\t\t\t}else{\r\n\t\t\t\tel.classList.remove(\"open\");\r\n\t\t\t\tcollapseEl.style.display = 'none';\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tel.addEventListener(\"click\", function(e){\r\n\t\te.stopImmediatePropagation();\r\n\t\ttoggleList(!config.open);\r\n\t});\r\n\r\n\ttoggleList(config.open);\r\n\r\n\treturn el;\r\n};","export default function(cell, formatterParams, onRendered){\r\n\tvar checkbox = document.createElement(\"input\");\r\n\r\n\tcheckbox.type = 'checkbox';\r\n\r\n\tif(this.table.modExists(\"selectRow\", true)){\r\n\r\n\t\tcheckbox.addEventListener(\"click\", (e) => {\r\n\t\t\te.stopPropagation();\r\n\t\t});\r\n\r\n\t\tif(typeof cell.getRow == 'function'){\r\n\t\t\tvar row = cell.getRow();\r\n\r\n\t\t\tif(row instanceof RowComponent){\r\n\r\n\t\t\t\tcheckbox.addEventListener(\"change\", (e) => {\r\n\t\t\t\t\trow.toggleSelect();\r\n\t\t\t\t});\r\n\r\n\t\t\t\tcheckbox.checked = row.isSelected && row.isSelected();\r\n\t\t\t\tthis.table.modules.selectRow.registerRowSelectCheckbox(row, checkbox);\r\n\t\t\t}else{\r\n\t\t\t\tcheckbox = \"\";\r\n\t\t\t}\r\n\t\t}else {\r\n\t\t\tcheckbox.addEventListener(\"change\", (e) => {\r\n\t\t\t\tif(this.table.modules.selectRow.selectedRows.length){\r\n\t\t\t\t\tthis.table.deselectRow();\r\n\t\t\t\t}else {\r\n\t\t\t\t\tthis.table.selectRow(formatterParams.rowRange);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tthis.table.modules.selectRow.registerHeaderSelectCheckbox(checkbox);\r\n\t\t}\r\n\t}\r\n\r\n\treturn checkbox;\r\n};","import plaintext from './formatters/plaintext.js';\r\nimport html from './formatters/html.js';\r\nimport textarea from './formatters/textarea.js';\r\nimport money from './formatters/money.js';\r\nimport link from './formatters/link.js';\r\nimport image from './formatters/image.js';\r\nimport tickCross from './formatters/tickCross.js';\r\nimport datetime from './formatters/datetime.js';\r\nimport datetimediff from './formatters/datetimediff.js';\r\nimport lookup from './formatters/lookup.js';\r\nimport star from './formatters/star.js';\r\nimport traffic from './formatters/traffic.js';\r\nimport progress from './formatters/progress.js';\r\nimport color from './formatters/color.js';\r\nimport buttonTick from './formatters/buttonTick.js';\r\nimport buttonCross from './formatters/buttonCross.js';\r\nimport rownum from './formatters/rownum.js';\r\nimport handle from './formatters/handle.js';\r\nimport responsiveCollapse from './formatters/responsiveCollapse.js';\r\nimport rowSelection from './formatters/rowSelection.js';\r\n\r\nexport default {\r\n\tplaintext:plaintext,\r\n\thtml:html,\r\n\ttextarea:textarea,\r\n\tmoney:money,\r\n\tlink:link,\r\n\timage:image,\r\n\ttickCross:tickCross,\r\n\tdatetime:datetime,\r\n\tdatetimediff:datetimediff,\r\n\tlookup:lookup,\r\n\tstar:star,\r\n\ttraffic:traffic,\r\n\tprogress:progress,\r\n\tcolor:color,\r\n\tbuttonTick:buttonTick,\r\n\tbuttonCross:buttonCross,\r\n\trownum:rownum,\r\n\thandle:handle,\r\n\tresponsiveCollapse:responsiveCollapse,\r\n\trowSelection:rowSelection,\r\n};","import Module from '../../core/Module.js';\r\n\r\nimport defaultFormatters from './defaults/formatters.js';\r\n\r\nclass Format extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.registerColumnOption(\"formatter\");\r\n\t\tthis.registerColumnOption(\"formatterParams\");\r\n\r\n\t\tthis.registerColumnOption(\"formatterPrint\");\r\n\t\tthis.registerColumnOption(\"formatterPrintParams\");\r\n\t\tthis.registerColumnOption(\"formatterClipboard\");\r\n\t\tthis.registerColumnOption(\"formatterClipboardParams\");\r\n\t\tthis.registerColumnOption(\"formatterHtmlOutput\");\r\n\t\tthis.registerColumnOption(\"formatterHtmlOutputParams\");\r\n\t\tthis.registerColumnOption(\"titleFormatter\");\r\n\t\tthis.registerColumnOption(\"titleFormatterParams\");\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tthis.subscribe(\"cell-format\", this.formatValue.bind(this));\r\n\t\tthis.subscribe(\"cell-rendered\", this.cellRendered.bind(this));\r\n\t\tthis.subscribe(\"column-layout\", this.initializeColumn.bind(this));\r\n\t\tthis.subscribe(\"column-format\", this.formatHeader.bind(this));\r\n\t}\r\n\r\n\t//initialize column formatter\r\n\tinitializeColumn(column){\r\n\t\tcolumn.modules.format = this.lookupFormatter(column, \"\");\r\n\r\n\t\tif(typeof column.definition.formatterPrint !== \"undefined\"){\r\n\t\t\tcolumn.modules.format.print = this.lookupFormatter(column, \"Print\");\r\n\t\t}\r\n\r\n\t\tif(typeof column.definition.formatterClipboard !== \"undefined\"){\r\n\t\t\tcolumn.modules.format.clipboard = this.lookupFormatter(column, \"Clipboard\");\r\n\t\t}\r\n\r\n\t\tif(typeof column.definition.formatterHtmlOutput !== \"undefined\"){\r\n\t\t\tcolumn.modules.format.htmlOutput = this.lookupFormatter(column, \"HtmlOutput\");\r\n\t\t}\r\n\t}\r\n\r\n\tlookupFormatter(column, type){\r\n\t\tvar config = {params:column.definition[\"formatter\" + type + \"Params\"] || {}},\r\n\t\tformatter = column.definition[\"formatter\" + type];\r\n\r\n\t\t//set column formatter\r\n\t\tswitch(typeof formatter){\r\n\t\t\tcase \"string\":\r\n\t\t\tif(Format.formatters[formatter]){\r\n\t\t\t\tconfig.formatter = Format.formatters[formatter];\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Formatter Error - No such formatter found: \", formatter);\r\n\t\t\t\tconfig.formatter = Format.formatters.plaintext;\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"function\":\r\n\t\t\tconfig.formatter = formatter;\r\n\t\t\tbreak;\r\n\r\n\t\t\tdefault:\r\n\t\t\tconfig.formatter = Format.formatters.plaintext;\r\n\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\treturn config;\r\n\t}\r\n\r\n\tcellRendered(cell){\r\n\t\tif(cell.modules.format && cell.modules.format.renderedCallback && !cell.modules.format.rendered){\r\n\t\t\tcell.modules.format.renderedCallback();\r\n\t\t\tcell.modules.format.rendered = true;\r\n\t\t}\r\n\t}\r\n\r\n\t//return a formatted value for a column header\r\n\tformatHeader(column, title, el){\r\n\t\tvar formatter, params, onRendered, mockCell;\r\n\r\n\t\tif(column.definition.titleFormatter){\r\n\t\t\tformatter = this.getFormatter(column.definition.titleFormatter);\r\n\r\n\t\t\tonRendered = (callback) => {\r\n\t\t\t\tcolumn.titleFormatterRendered = callback;\r\n\t\t\t};\r\n\r\n\t\t\tmockCell = {\r\n\t\t\t\tgetValue:function(){\r\n\t\t\t\t\treturn title;\r\n\t\t\t\t},\r\n\t\t\t\tgetElement:function(){\r\n\t\t\t\t\treturn el;\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\tparams = column.definition.titleFormatterParams || {};\r\n\r\n\t\t\tparams = typeof params === \"function\" ? params() : params;\r\n\r\n\t\t\treturn formatter.call(this, mockCell, params, onRendered);\r\n\t\t}else{\r\n\t\t\treturn title;\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t//return a formatted value for a cell\r\n\tformatValue(cell){\r\n\t\tvar component = cell.getComponent(),\r\n\t\tparams = typeof cell.column.modules.format.params === \"function\" ? cell.column.modules.format.params(component) : cell.column.modules.format.params;\r\n\r\n\t\tfunction onRendered(callback){\r\n\t\t\tif(!cell.modules.format){\r\n\t\t\t\tcell.modules.format = {};\r\n\t\t\t}\r\n\r\n\t\t\tcell.modules.format.renderedCallback = callback;\r\n\t\t\tcell.modules.format.rendered = false;\r\n\t\t}\r\n\r\n\t\treturn cell.column.modules.format.formatter.call(this, component, params, onRendered);\r\n\t}\r\n\r\n\tformatExportValue(cell, type){\r\n\t\tvar formatter = cell.column.modules.format[type],\r\n\t\tparams;\r\n\r\n\t\tif(formatter){\r\n\t\t\tparams = typeof formatter.params === \"function\" ? formatter.params(component) : formatter.params;\r\n\r\n\t\t\tfunction onRendered(callback){\r\n\t\t\t\tif(!cell.modules.format){\r\n\t\t\t\t\tcell.modules.format = {};\r\n\t\t\t\t}\r\n\r\n\t\t\t\tcell.modules.format.renderedCallback = callback;\r\n\t\t\t\tcell.modules.format.rendered = false;\r\n\t\t\t}\r\n\r\n\t\t\treturn formatter.formatter.call(this, cell.getComponent(), params, onRendered);\r\n\r\n\t\t}else{\r\n\t\t\treturn this.formatValue(cell);\r\n\t\t}\r\n\t}\r\n\r\n\tsanitizeHTML(value){\r\n\t\tif(value){\r\n\t\t\tvar entityMap = {\r\n\t\t\t\t'&': '&',\r\n\t\t\t\t'<': '<',\r\n\t\t\t\t'>': '>',\r\n\t\t\t\t'\"': '"',\r\n\t\t\t\t\"'\": ''',\r\n\t\t\t\t'/': '/',\r\n\t\t\t\t'`': '`',\r\n\t\t\t\t'=': '='\r\n\t\t\t};\r\n\r\n\t\t\treturn String(value).replace(/[&<>\"'`=\\/]/g, function (s) {\r\n\t\t\t\treturn entityMap[s];\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\treturn value;\r\n\t\t}\r\n\t}\r\n\r\n\temptyToSpace(value){\r\n\t\treturn value === null || typeof value === \"undefined\" || value === \"\" ? \" \" : value;\r\n\t}\r\n\r\n\t//get formatter for cell\r\n\tgetFormatter(formatter){\r\n\t\tvar formatter;\r\n\r\n\t\tswitch(typeof formatter){\r\n\t\t\tcase \"string\":\r\n\t\t\tif(Format.formatters[formatter]){\r\n\t\t\t\tformatter = Format.formatters[formatter]\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Formatter Error - No such formatter found: \", formatter);\r\n\t\t\t\tformatter = Format.formatters.plaintext;\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"function\":\r\n\t\t\tformatter = formatter;\r\n\t\t\tbreak;\r\n\r\n\t\t\tdefault:\r\n\t\t\tformatter = Format.formatters.plaintext;\r\n\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\treturn formatter;\r\n\t}\r\n}\r\n\r\nFormat.moduleName = \"format\";\r\n\r\n//load defaults\r\nFormat.formatters = defaultFormatters;\r\n\r\nexport default Format;","import Module from '../../core/Module.js';\r\n\r\nclass FrozenColumns extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.leftColumns = [];\r\n\t\tthis.rightColumns = [];\r\n\t\tthis.leftMargin = 0;\r\n\t\tthis.rightMargin = 0;\r\n\t\tthis.rightPadding = 0;\r\n\t\tthis.initializationMode = \"left\";\r\n\t\tthis.active = false;\r\n\t\tthis.scrollEndTimer = false;\r\n\r\n\t\tthis.registerColumnOption(\"frozen\");\r\n\t}\r\n\r\n\t//reset initial state\r\n\treset(){\r\n\t\tthis.initializationMode = \"left\";\r\n\t\tthis.leftColumns = [];\r\n\t\tthis.rightColumns = [];\r\n\t\tthis.leftMargin = 0;\r\n\t\tthis.rightMargin = 0;\r\n\t\tthis.rightMargin = 0;\r\n\t\tthis.active = false;\r\n\r\n\t\tthis.table.columnManager.headersElement.style.marginLeft = 0;\r\n\t\tthis.table.columnManager.element.style.paddingRight = 0;\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tthis.subscribe(\"cell-layout\", this.layoutCell.bind(this));\r\n\t\tthis.subscribe(\"column-init\", this.initializeColumn.bind(this));\r\n\t\tthis.subscribe(\"column-width\", this.layout.bind(this));\r\n\t\tthis.subscribe(\"row-layout-before\", this.layoutRow.bind(this));\r\n\t\tthis.subscribe(\"table-layout\", this.layout.bind(this));\r\n\t\tthis.subscribe(\"scroll-horizontal\", this.scrollHorizontal.bind(this));\r\n\t\tthis.subscribe(\"columns-loading\", this.reset.bind(this));\r\n\t\tthis.subscribe(\"table-redraw\", this.layout.bind(this));\r\n\t}\r\n\r\n\tlayoutCell(cell){\r\n\t\tthis.layoutElement(cell.element, cell.column)\r\n\t}\r\n\r\n\t//initialize specific column\r\n\tinitializeColumn(column){\r\n\t\tvar config = {margin:0, edge:false};\r\n\r\n\t\tif(!column.isGroup){\r\n\r\n\t\t\tif(this.frozenCheck(column)){\r\n\r\n\t\t\t\tconfig.position = this.initializationMode;\r\n\r\n\t\t\t\tif(this.initializationMode == \"left\"){\r\n\t\t\t\t\tthis.leftColumns.push(column);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tthis.rightColumns.unshift(column);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.active = true;\r\n\r\n\t\t\t\tcolumn.modules.frozen = config;\r\n\t\t\t}else{\r\n\t\t\t\tthis.initializationMode = \"right\";\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tfrozenCheck(column){\r\n\t\tvar frozen = false;\r\n\r\n\t\tif(column.parent.isGroup && column.definition.frozen){\r\n\t\t\tconsole.warn(\"Frozen Column Error - Parent column group must be frozen, not individual columns or sub column groups\");\r\n\t\t}\r\n\r\n\t\tif(column.parent.isGroup){\r\n\t\t\treturn this.frozenCheck(column.parent);\r\n\t\t}else{\r\n\t\t\treturn column.definition.frozen;\r\n\t\t}\r\n\r\n\t\treturn frozen;\r\n\t}\r\n\r\n\t//quick layout to smooth horizontal scrolling\r\n\tscrollHorizontal(){\r\n\t\tvar rows;\r\n\r\n\t\tif(this.active){\r\n\t\t\tclearTimeout(this.scrollEndTimer);\r\n\r\n\t\t\t//layout all rows after scroll is complete\r\n\t\t\tthis.scrollEndTimer = setTimeout(() => {\r\n\t\t\t\tthis.layout();\r\n\t\t\t}, 100);\r\n\r\n\t\t\trows = this.table.rowManager.getVisibleRows();\r\n\r\n\t\t\tthis.calcMargins();\r\n\r\n\t\t\tthis.layoutColumnPosition();\r\n\r\n\t\t\tthis.layoutCalcRows();\r\n\r\n\t\t\trows.forEach((row) => {\r\n\t\t\t\tif(row.type === \"row\"){\r\n\t\t\t\t\tthis.layoutRow(row);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tthis.table.rowManager.tableElement.style.marginRight = this.rightMargin;\r\n\t\t}\r\n\t}\r\n\r\n\t//calculate margins for rows\r\n\tcalcMargins(){\r\n\t\tthis.leftMargin = this._calcSpace(this.leftColumns, this.leftColumns.length) + \"px\";\r\n\t\tthis.table.columnManager.headersElement.style.marginLeft = this.leftMargin;\r\n\r\n\t\tthis.rightMargin = this._calcSpace(this.rightColumns, this.rightColumns.length) + \"px\";\r\n\t\tthis.table.columnManager.element.style.paddingRight = this.rightMargin;\r\n\r\n\t\t//calculate right frozen columns\r\n\t\tthis.rightPadding = this.table.rowManager.element.clientWidth + this.table.columnManager.scrollLeft;\r\n\t}\r\n\r\n\t//layout calculation rows\r\n\tlayoutCalcRows(){\r\n\t\tif(this.table.modExists(\"columnCalcs\")){\r\n\t\t\tif(this.table.modules.columnCalcs.topInitialized && this.table.modules.columnCalcs.topRow){\r\n\t\t\t\tthis.layoutRow(this.table.modules.columnCalcs.topRow);\r\n\t\t\t}\r\n\t\t\tif(this.table.modules.columnCalcs.botInitialized && this.table.modules.columnCalcs.botRow){\r\n\t\t\t\tthis.layoutRow(this.table.modules.columnCalcs.botRow);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//calculate column positions and layout headers\r\n\tlayoutColumnPosition(allCells){\r\n\r\n\t\tvar leftParents = [];\r\n\r\n\t\tthis.leftColumns.forEach((column, i) => {\r\n\t\t\tcolumn.modules.frozen.margin = (this._calcSpace(this.leftColumns, i) + this.table.columnManager.scrollLeft) + \"px\";\r\n\r\n\t\t\tif(i == this.leftColumns.length - 1){\r\n\t\t\t\tcolumn.modules.frozen.edge = true;\r\n\t\t\t}else{\r\n\t\t\t\tcolumn.modules.frozen.edge = false;\r\n\t\t\t}\r\n\r\n\t\t\tif(column.parent.isGroup){\r\n\t\t\t\tvar parentEl = this.getColGroupParentElement(column);\r\n\t\t\t\tif(!leftParents.includes(parentEl)){\r\n\t\t\t\t\tthis.layoutElement(parentEl, column);\r\n\t\t\t\t\tleftParents.push(parentEl);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(column.modules.frozen.edge){\r\n\t\t\t\t\tparentEl.classList.add(\"tabulator-frozen-\" + column.modules.frozen.position);\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tthis.layoutElement(column.getElement(), column);\r\n\t\t\t}\r\n\r\n\t\t\tif(allCells){\r\n\t\t\t\tcolumn.cells.forEach((cell) => {\r\n\t\t\t\t\tthis.layoutElement(cell.getElement(true), column);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tthis.rightColumns.forEach((column, i) => {\r\n\t\t\tcolumn.modules.frozen.margin = (this.rightPadding - this._calcSpace(this.rightColumns, i + 1)) + \"px\";\r\n\r\n\t\t\tif(i == this.rightColumns.length - 1){\r\n\t\t\t\tcolumn.modules.frozen.edge = true;\r\n\t\t\t}else{\r\n\t\t\t\tcolumn.modules.frozen.edge = false;\r\n\t\t\t}\r\n\r\n\r\n\t\t\tif(column.parent.isGroup){\r\n\t\t\t\tthis.layoutElement(this.getColGroupParentElement(column), column);\r\n\t\t\t}else{\r\n\t\t\t\tthis.layoutElement(column.getElement(), column);\r\n\t\t\t}\r\n\r\n\t\t\tif(allCells){\r\n\t\t\t\tcolumn.cells.forEach((cell) => {\r\n\t\t\t\t\tthis.layoutElement(cell.getElement(true), column);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tgetColGroupParentElement(column){\r\n\t\treturn column.parent.isGroup ? this.getColGroupParentElement(column.parent) : column.getElement();\r\n\t}\r\n\r\n\t//layout columns appropropriatly\r\n\tlayout(){\r\n\t\tvar rightMargin = 0;\r\n\r\n\t\tif(this.active){\r\n\r\n\t\t\t//calculate row padding\r\n\t\t\tthis.calcMargins();\r\n\r\n\t\t\tthis.table.rowManager.getDisplayRows().forEach((row) =>{\r\n\t\t\t\tif(row.type === \"row\"){\r\n\t\t\t\t\tthis.layoutRow(row);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tthis.layoutCalcRows();\r\n\r\n\t\t\t//calculate left columns\r\n\t\t\tthis.layoutColumnPosition(true);\r\n\r\n\t\t\tthis.table.rowManager.tableElement.style.marginRight = this.rightMargin;\r\n\t\t}\r\n\t}\r\n\r\n\tlayoutRow(row){\r\n\t\tvar rowEl = row.getElement();\r\n\r\n\t\trowEl.style.paddingLeft = this.leftMargin;\r\n\r\n\t\tthis.leftColumns.forEach((column) => {\r\n\t\t\tvar cell = row.getCell(column);\r\n\r\n\t\t\tif(cell){\r\n\t\t\t\tthis.layoutElement(cell.getElement(true), column);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tthis.rightColumns.forEach((column) => {\r\n\t\t\tvar cell = row.getCell(column);\r\n\r\n\t\t\tif(cell){\r\n\t\t\t\tthis.layoutElement(cell.getElement(true), column);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tlayoutElement(element, column){\r\n\r\n\t\tif(column.modules.frozen){\r\n\t\t\telement.style.position = \"absolute\";\r\n\t\t\telement.style.left = column.modules.frozen.margin;\r\n\r\n\t\t\telement.classList.add(\"tabulator-frozen\");\r\n\r\n\t\t\tif(column.modules.frozen.edge){\r\n\t\t\t\telement.classList.add(\"tabulator-frozen-\" + column.modules.frozen.position);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t_calcSpace(columns, index){\r\n\t\tvar width = 0;\r\n\r\n\t\tfor (let i = 0; i < index; i++){\r\n\t\t\tif(columns[i].visible){\r\n\t\t\t\twidth += columns[i].getWidth();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn width;\r\n\t}\r\n}\r\n\r\nFrozenColumns.moduleName = \"frozenColumns\";\r\n\r\nexport default FrozenColumns;","import Module from '../../core/Module.js';\r\n\r\nclass FrozenRows extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.topElement = document.createElement(\"div\");\r\n\t\tthis.rows = [];\r\n\r\n\t\t//register component functions\r\n\t\tthis.registerComponentFunction(\"row\", \"freeze\", this.freezeRow.bind(this));\r\n\t\tthis.registerComponentFunction(\"row\", \"unfreeze\", this.unfreezeRow.bind(this));\r\n\t\tthis.registerComponentFunction(\"row\", \"isFrozen\", this.isRowFrozen.bind(this));\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tthis.rows = [];\r\n\r\n\t\tthis.topElement.classList.add(\"tabulator-frozen-rows-holder\");\r\n\r\n\t\t// this.table.columnManager.element.append(this.topElement);\r\n\t\tthis.table.columnManager.getElement().insertBefore(this.topElement, this.table.columnManager.headersElement.nextSibling);\r\n\r\n\t\tthis.subscribe(\"row-deleting\", this.detachRow.bind(this));\r\n\r\n\t\tthis.registerDisplayHandler(this.getRows.bind(this), 10);\r\n\t}\r\n\r\n\tisRowFrozen(row){\r\n\t\tvar index = this.rows.indexOf(row);\r\n\t\treturn index > -1;\r\n\t}\r\n\r\n\tisFrozen(){\r\n\t\treturn !!this.rows.length;\r\n\t}\r\n\r\n\t//filter frozen rows out of display data\r\n\tgetRows(rows){\r\n\t\tvar self = this,\r\n\t\tfrozen = [],\r\n\t\toutput = rows.slice(0);\r\n\r\n\t\tthis.rows.forEach(function(row){\r\n\t\t\tvar index = output.indexOf(row);\r\n\r\n\t\t\tif(index > -1){\r\n\t\t\t\toutput.splice(index, 1);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tfreezeRow(row){\r\n\t\tif(!row.modules.frozen){\r\n\t\t\trow.modules.frozen = true;\r\n\t\t\tthis.topElement.appendChild(row.getElement());\r\n\t\t\trow.initialize();\r\n\t\t\trow.normalizeHeight();\r\n\t\t\tthis.table.rowManager.adjustTableSize();\r\n\r\n\t\t\tthis.rows.push(row);\r\n\r\n\t\t\tthis.table.rowManager.refreshActiveData(\"display\");\r\n\r\n\t\t\tthis.styleRows();\r\n\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Freeze Error - Row is already frozen\");\r\n\t\t}\r\n\t}\r\n\r\n\tunfreezeRow(row){\r\n\t\tvar index = this.rows.indexOf(row);\r\n\r\n\t\tif(row.modules.frozen){\r\n\r\n\t\t\trow.modules.frozen = false;\r\n\r\n\t\t\tthis.detachRow(row);\r\n\r\n\t\t\tthis.table.rowManager.adjustTableSize();\r\n\r\n\t\t\tthis.table.rowManager.refreshActiveData(\"display\");\r\n\r\n\t\t\tif(this.rows.length){\r\n\t\t\t\tthis.styleRows();\r\n\t\t\t}\r\n\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Freeze Error - Row is already unfrozen\");\r\n\t\t}\r\n\t}\r\n\r\n\tdetachRow(row){\r\n\t\tvar index = this.rows.indexOf(row);\r\n\r\n\t\tif(index > -1){\r\n\t\t\tvar rowEl = row.getElement();\r\n\t\t\trowEl.parentNode.removeChild(rowEl);\r\n\r\n\t\t\tthis.rows.splice(index, 1);\r\n\t\t}\r\n\t}\r\n\r\n\tstyleRows(row){\r\n\t\tthis.rows.forEach((row, i) => {\r\n\t\t\tthis.table.rowManager.styleRow(row, i);\r\n\t\t});\r\n\t}\r\n}\r\n\r\nFrozenRows.moduleName = \"frozenRows\";\r\n\r\nexport default FrozenRows;","//public group object\r\nclass GroupComponent {\r\n\tconstructor (group){\r\n\t\tthis._group = group;\r\n\t\tthis.type = \"GroupComponent\";\r\n\r\n\t\treturn new Proxy(this, {\r\n\t\t\tget: function(target, name, receiver) {\r\n\t\t\t\tif (typeof target[name] !== \"undefined\") {\r\n\t\t\t\t\treturn target[name];\r\n\t\t\t\t}else{\r\n\t\t\t\t\treturn target._group.table.componentFunctionBinder.handle(\"row\", target._group, name)\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t})\r\n\t}\r\n\r\n\tgetKey(){\r\n\t\treturn this._group.key;\r\n\t}\r\n\r\n\tgetField(){\r\n\t\treturn this._group.field;\r\n\t}\r\n\r\n\tgetElement(){\r\n\t\treturn this._group.element;\r\n\t}\r\n\r\n\tgetRows(){\r\n\t\treturn this._group.getRows(true);\r\n\t}\r\n\r\n\tgetSubGroups(){\r\n\t\treturn this._group.getSubGroups(true);\r\n\t}\r\n\r\n\tgetParentGroup(){\r\n\t\treturn this._group.parent ? this._group.parent.getComponent() : false;\r\n\t}\r\n\r\n\tisVisible(){\r\n\t\treturn this._group.visible;\r\n\t}\r\n\r\n\tshow(){\r\n\t\tthis._group.show();\r\n\t}\r\n\r\n\thide(){\r\n\t\tthis._group.hide();\r\n\t}\r\n\r\n\ttoggle(){\r\n\t\tthis._group.toggleVisibility();\r\n\t}\r\n\r\n\t_getSelf(){\r\n\t\treturn this._group;\r\n\t}\r\n\r\n\tgetTable(){\r\n\t\treturn this._group.groupManager.table;\r\n\t}\r\n}\r\n\r\nexport default GroupComponent;","import Helpers from '../../core/tools/Helpers.js';\r\nimport GroupComponent from './GroupComponent.js';\r\n\r\n//Group functions\r\nclass Group{\r\n\r\n\tconstructor(groupManager, parent, level, key, field, generator, oldGroup){\r\n\t\tthis.groupManager = groupManager;\r\n\t\tthis.parent = parent;\r\n\t\tthis.key = key;\r\n\t\tthis.level = level;\r\n\t\tthis.field = field;\r\n\t\tthis.hasSubGroups = level < (groupManager.groupIDLookups.length - 1);\r\n\t\tthis.addRow = this.hasSubGroups ? this._addRowToGroup : this._addRow;\r\n\t\tthis.type = \"group\"; //type of element\r\n\t\tthis.old = oldGroup;\r\n\t\tthis.rows = [];\r\n\t\tthis.groups = [];\r\n\t\tthis.groupList = [];\r\n\t\tthis.generator = generator;\r\n\t\tthis.elementContents = false;\r\n\t\tthis.height = 0;\r\n\t\tthis.outerHeight = 0;\r\n\t\tthis.initialized = false;\r\n\t\tthis.calcs = {};\r\n\t\tthis.initialized = false;\r\n\t\tthis.modules = {};\r\n\t\tthis.arrowElement = false;\r\n\r\n\t\tthis.visible = oldGroup ? oldGroup.visible : (typeof groupManager.startOpen[level] !== \"undefined\" ? groupManager.startOpen[level] : groupManager.startOpen[0]);\r\n\r\n\t\tthis.component = null;\r\n\r\n\t\tthis.createElements();\r\n\t\tthis.addBindings();\r\n\r\n\t\tthis.createValueGroups();\r\n\t}\r\n\r\n\twipe(){\r\n\t\tif(this.groupList.length){\r\n\t\t\tthis.groupList.forEach(function(group){\r\n\t\t\t\tgroup.wipe();\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tthis.element = false;\r\n\t\t\tthis.arrowElement = false;\r\n\t\t\tthis.elementContents = false;\r\n\t\t}\r\n\t}\r\n\r\n\tcreateElements(){\r\n\t\tvar arrow = document.createElement(\"div\");\r\n\t\tarrow.classList.add(\"tabulator-arrow\");\r\n\r\n\t\tthis.element = document.createElement(\"div\");\r\n\t\tthis.element.classList.add(\"tabulator-row\");\r\n\t\tthis.element.classList.add(\"tabulator-group\");\r\n\t\tthis.element.classList.add(\"tabulator-group-level-\" + this.level);\r\n\t\tthis.element.setAttribute(\"role\", \"rowgroup\");\r\n\r\n\t\tthis.arrowElement = document.createElement(\"div\");\r\n\t\tthis.arrowElement.classList.add(\"tabulator-group-toggle\");\r\n\t\tthis.arrowElement.appendChild(arrow);\r\n\r\n\t\t//setup movable rows\r\n\t\tif(this.groupManager.table.options.movableRows !== false && this.groupManager.table.modExists(\"moveRow\")){\r\n\t\t\tthis.groupManager.table.modules.moveRow.initializeGroupHeader(this);\r\n\t\t}\r\n\t}\r\n\r\n\tcreateValueGroups(){\r\n\t\tvar level = this.level + 1;\r\n\t\tif(this.groupManager.allowedValues && this.groupManager.allowedValues[level]){\r\n\t\t\tthis.groupManager.allowedValues[level].forEach((value) => {\r\n\t\t\t\tthis._createGroup(value, level);\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\taddBindings(){\r\n\t\tvar dblTap,\ttapHold, tap, toggleElement;\r\n\r\n\t\tif ((this.groupManager.table.options.groupContextMenu || this.groupManager.table.options.groupClickMenu) && this.groupManager.table.modExists(\"menu\")){\r\n\t\t\tthis.groupManager.table.modules.menu.initializeGroup.call(this.groupManager.table.modules.menu, this);\r\n\t\t}\r\n\r\n\t\tif (this.groupManager.table.options.groupTap){\r\n\t\t\ttap = false;\r\n\r\n\t\t\tthis.element.addEventListener(\"touchstart\", (e) => {\r\n\t\t\t\ttap = true;\r\n\t\t\t}, {passive: true});\r\n\r\n\t\t\tthis.element.addEventListener(\"touchend\", (e) => {\r\n\t\t\t\tif(tap){\r\n\t\t\t\t\tthis.groupManager.table.options.groupTap(e, this.getComponent());\r\n\t\t\t\t}\r\n\r\n\t\t\t\ttap = false;\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif (this.groupManager.table.options.groupDblTap){\r\n\t\t\tdblTap = null;\r\n\r\n\t\t\tthis.element.addEventListener(\"touchend\", (e) => {\r\n\t\t\t\tif(dblTap){\r\n\t\t\t\t\tclearTimeout(dblTap);\r\n\t\t\t\t\tdblTap = null;\r\n\r\n\t\t\t\t\tthis.groupManager.table.options.groupDblTap(e, this.getComponent());\r\n\t\t\t\t}else{\r\n\r\n\t\t\t\t\tdblTap = setTimeout(() => {\r\n\t\t\t\t\t\tclearTimeout(dblTap);\r\n\t\t\t\t\t\tdblTap = null;\r\n\t\t\t\t\t}, 300);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif (this.groupManager.table.options.groupTapHold){\r\n\t\t\ttapHold = null;\r\n\r\n\t\t\tthis.element.addEventListener(\"touchstart\", (e) => {\r\n\t\t\t\tclearTimeout(tapHold);\r\n\r\n\t\t\t\ttapHold = setTimeout(() => {\r\n\t\t\t\t\tclearTimeout(tapHold);\r\n\t\t\t\t\ttapHold = null;\r\n\t\t\t\t\ttap = false;\r\n\t\t\t\t\tthis.groupManager.table.options.groupTapHold(e, this.getComponent());\r\n\t\t\t\t}, 1000);\r\n\r\n\t\t\t}, {passive: true});\r\n\r\n\t\t\tthis.element.addEventListener(\"touchend\", (e) => {\r\n\t\t\t\tclearTimeout(tapHold);\r\n\t\t\t\ttapHold = null;\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif(this.groupManager.table.options.groupToggleElement){\r\n\t\t\ttoggleElement = this.groupManager.table.options.groupToggleElement == \"arrow\" ? this.arrowElement : this.element;\r\n\r\n\t\t\ttoggleElement.addEventListener(\"click\", (e) => {\r\n\t\t\t\te.stopPropagation();\r\n\t\t\t\te.stopImmediatePropagation();\r\n\t\t\t\tthis.toggleVisibility();\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\t_createGroup(groupID, level){\r\n\t\tvar groupKey = level + \"_\" + groupID;\r\n\t\tvar group = new Group(this.groupManager, this, level, groupID, this.groupManager.groupIDLookups[level].field, this.groupManager.headerGenerator[level] || this.groupManager.headerGenerator[0], this.old ? this.old.groups[groupKey] : false);\r\n\r\n\t\tthis.groups[groupKey] = group;\r\n\t\tthis.groupList.push(group);\r\n\t}\r\n\r\n\t_addRowToGroup(row){\r\n\r\n\t\tvar level = this.level + 1;\r\n\r\n\t\tif(this.hasSubGroups){\r\n\t\t\tvar groupID = this.groupManager.groupIDLookups[level].func(row.getData()),\r\n\t\t\tgroupKey = level + \"_\" + groupID;\r\n\r\n\t\t\tif(this.groupManager.allowedValues && this.groupManager.allowedValues[level]){\r\n\t\t\t\tif(this.groups[groupKey]){\r\n\t\t\t\t\tthis.groups[groupKey].addRow(row);\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tif(!this.groups[groupKey]){\r\n\t\t\t\t\tthis._createGroup(groupID, level);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.groups[groupKey].addRow(row);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t_addRow(row){\r\n\t\tthis.rows.push(row);\r\n\t\trow.modules.group = this;\r\n\t}\r\n\r\n\tinsertRow(row, to, after){\r\n\t\tvar data = this.conformRowData({});\r\n\r\n\t\trow.updateData(data);\r\n\r\n\t\tvar toIndex = this.rows.indexOf(to);\r\n\r\n\t\tif(toIndex > -1){\r\n\t\t\tif(after){\r\n\t\t\t\tthis.rows.splice(toIndex+1, 0, row);\r\n\t\t\t}else{\r\n\t\t\t\tthis.rows.splice(toIndex, 0, row);\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tif(after){\r\n\t\t\t\tthis.rows.push(row);\r\n\t\t\t}else{\r\n\t\t\t\tthis.rows.unshift(row);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\trow.modules.group = this;\r\n\r\n\t\tthis.generateGroupHeaderContents();\r\n\r\n\t\tif(this.groupManager.table.modExists(\"columnCalcs\") && this.groupManager.table.options.columnCalcs != \"table\"){\r\n\t\t\tthis.groupManager.table.modules.columnCalcs.recalcGroup(this);\r\n\t\t}\r\n\r\n\t\tthis.groupManager.updateGroupRows(true);\r\n\t}\r\n\r\n\tscrollHeader(left){\r\n\t\tthis.arrowElement.style.marginLeft = left;\r\n\r\n\t\tthis.groupList.forEach(function(child){\r\n\t\t\tchild.scrollHeader(left);\r\n\t\t});\r\n\t}\r\n\r\n\tgetRowIndex(row){}\r\n\r\n\t//update row data to match grouping contraints\r\n\tconformRowData(data){\r\n\t\tif(this.field){\r\n\t\t\tdata[this.field] = this.key;\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Data Conforming Error - Cannot conform row data to match new group as groupBy is a function\");\r\n\t\t}\r\n\r\n\t\tif(this.parent){\r\n\t\t\tdata = this.parent.conformRowData(data);\r\n\t\t}\r\n\r\n\t\treturn data;\r\n\t}\r\n\r\n\tremoveRow(row){\r\n\t\tvar index = this.rows.indexOf(row);\r\n\t\tvar el = row.getElement();\r\n\r\n\r\n\t\tif(index > -1){\r\n\t\t\tthis.rows.splice(index, 1);\r\n\t\t}\r\n\r\n\t\tif(!this.groupManager.table.options.groupValues && !this.rows.length){\r\n\t\t\tif(this.parent){\r\n\t\t\t\tthis.parent.removeGroup(this);\r\n\t\t\t}else{\r\n\t\t\t\tthis.groupManager.removeGroup(this);\r\n\t\t\t}\r\n\r\n\t\t\tthis.groupManager.updateGroupRows(true);\r\n\t\t}else{\r\n\r\n\t\t\tif(el.parentNode){\r\n\t\t\t\tel.parentNode.removeChild(el);\r\n\t\t\t}\r\n\r\n\t\t\tthis.generateGroupHeaderContents();\r\n\r\n\t\t\tif(this.groupManager.table.modExists(\"columnCalcs\") && this.groupManager.table.options.columnCalcs != \"table\"){\r\n\t\t\t\tthis.groupManager.table.modules.columnCalcs.recalcGroup(this);\r\n\t\t\t}\r\n\r\n\t\t}\r\n\t}\r\n\r\n\tremoveGroup(group){\r\n\t\tvar groupKey = group.level + \"_\" + group.key,\r\n\t\tindex;\r\n\r\n\t\tif(this.groups[groupKey]){\r\n\t\t\tdelete this.groups[groupKey];\r\n\r\n\t\t\tindex = this.groupList.indexOf(group);\r\n\r\n\t\t\tif(index > -1){\r\n\t\t\t\tthis.groupList.splice(index, 1);\r\n\t\t\t}\r\n\r\n\t\t\tif(!this.groupList.length){\r\n\t\t\t\tif(this.parent){\r\n\t\t\t\t\tthis.parent.removeGroup(this);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tthis.groupManager.removeGroup(this);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tgetHeadersAndRows(noCalc){\r\n\t\tvar output = [];\r\n\r\n\t\toutput.push(this);\r\n\r\n\t\tthis._visSet();\r\n\r\n\t\tif(this.visible){\r\n\t\t\tif(this.groupList.length){\r\n\t\t\t\tthis.groupList.forEach(function(group){\r\n\t\t\t\t\toutput = output.concat(group.getHeadersAndRows(noCalc));\r\n\t\t\t\t});\r\n\r\n\t\t\t}else{\r\n\t\t\t\tif(!noCalc && this.groupManager.table.options.columnCalcs != \"table\" && this.groupManager.table.modExists(\"columnCalcs\") && this.groupManager.table.modules.columnCalcs.hasTopCalcs()){\r\n\t\t\t\t\tif(this.calcs.top){\r\n\t\t\t\t\t\tthis.calcs.top.detachElement();\r\n\t\t\t\t\t\tthis.calcs.top.deleteCells();\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tthis.calcs.top = this.groupManager.table.modules.columnCalcs.generateTopRow(this.rows);\r\n\t\t\t\t\toutput.push(this.calcs.top);\r\n\t\t\t\t}\r\n\r\n\t\t\t\toutput = output.concat(this.rows);\r\n\r\n\t\t\t\tif(!noCalc && this.groupManager.table.options.columnCalcs != \"table\" && this.groupManager.table.modExists(\"columnCalcs\") && this.groupManager.table.modules.columnCalcs.hasBottomCalcs()){\r\n\t\t\t\t\tif(this.calcs.bottom){\r\n\t\t\t\t\t\tthis.calcs.bottom.detachElement();\r\n\t\t\t\t\t\tthis.calcs.bottom.deleteCells();\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tthis.calcs.bottom = this.groupManager.table.modules.columnCalcs.generateBottomRow(this.rows);\r\n\t\t\t\t\toutput.push(this.calcs.bottom);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tif(!this.groupList.length && this.groupManager.table.options.columnCalcs != \"table\"){\r\n\r\n\t\t\t\tif(this.groupManager.table.modExists(\"columnCalcs\")){\r\n\r\n\t\t\t\t\tif(!noCalc && this.groupManager.table.modules.columnCalcs.hasTopCalcs()){\r\n\t\t\t\t\t\tif(this.calcs.top){\r\n\t\t\t\t\t\t\tthis.calcs.top.detachElement();\r\n\t\t\t\t\t\t\tthis.calcs.top.deleteCells();\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif(this.groupManager.table.options.groupClosedShowCalcs){\r\n\t\t\t\t\t\t\tthis.calcs.top = this.groupManager.table.modules.columnCalcs.generateTopRow(this.rows);\r\n\t\t\t\t\t\t\toutput.push(this.calcs.top);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif(!noCalc && this.groupManager.table.modules.columnCalcs.hasBottomCalcs()){\r\n\t\t\t\t\t\tif(this.calcs.bottom){\r\n\t\t\t\t\t\t\tthis.calcs.bottom.detachElement();\r\n\t\t\t\t\t\t\tthis.calcs.bottom.deleteCells();\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif(this.groupManager.table.options.groupClosedShowCalcs){\r\n\t\t\t\t\t\t\tthis.calcs.bottom = this.groupManager.table.modules.columnCalcs.generateBottomRow(this.rows);\r\n\t\t\t\t\t\t\toutput.push(this.calcs.bottom);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tgetData(visible, transform){\r\n\t\tvar output = [];\r\n\r\n\t\tthis._visSet();\r\n\r\n\t\tif(!visible || (visible && this.visible)){\r\n\t\t\tthis.rows.forEach((row) => {\r\n\t\t\t\toutput.push(row.getData(transform || \"data\"));\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tgetRowCount(){\r\n\t\tvar count = 0;\r\n\r\n\t\tif(this.groupList.length){\r\n\t\t\tthis.groupList.forEach((group) => {\r\n\t\t\t\tcount += group.getRowCount();\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tcount = this.rows.length;\r\n\t\t}\r\n\t\treturn count;\r\n\t}\r\n\r\n\ttoggleVisibility(){\r\n\t\tif(this.visible){\r\n\t\t\tthis.hide();\r\n\t\t}else{\r\n\t\t\tthis.show();\r\n\t\t}\r\n\t}\r\n\r\n\thide(){\r\n\t\tthis.visible = false;\r\n\r\n\t\tif(this.groupManager.table.rowManager.getRenderMode() == \"classic\" && !this.groupManager.table.options.pagination){\r\n\r\n\t\t\tthis.element.classList.remove(\"tabulator-group-visible\");\r\n\r\n\t\t\tif(this.groupList.length){\r\n\t\t\t\tthis.groupList.forEach((group) => {\r\n\r\n\t\t\t\t\tvar rows = group.getHeadersAndRows();\r\n\r\n\t\t\t\t\trows.forEach((row) => {\r\n\t\t\t\t\t\trow.detachElement();\r\n\t\t\t\t\t});\r\n\t\t\t\t});\r\n\r\n\t\t\t}else{\r\n\t\t\t\tthis.rows.forEach((row) => {\r\n\t\t\t\t\tvar rowEl = row.getElement();\r\n\t\t\t\t\trowEl.parentNode.removeChild(rowEl);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\tthis.groupManager.table.rowManager.setDisplayRows(this.groupManager.updateGroupRows(), this.groupManager.getDisplayIndex());\r\n\r\n\t\t\tthis.groupManager.table.rowManager.checkClassicModeGroupHeaderWidth();\r\n\r\n\t\t}else{\r\n\t\t\tthis.groupManager.updateGroupRows(true);\r\n\t\t}\r\n\r\n\t\tthis.groupManager.table.externalEvents.dispatch(\"groupVisibilityChanged\", this.getComponent(), false);\r\n\t}\r\n\r\n\tshow(){\r\n\t\tthis.visible = true;\r\n\r\n\t\tif(this.groupManager.table.rowManager.getRenderMode() == \"classic\" && !this.groupManager.table.options.pagination){\r\n\r\n\t\t\tthis.element.classList.add(\"tabulator-group-visible\");\r\n\r\n\t\t\tvar prev = this.getElement();\r\n\r\n\t\t\tif(this.groupList.length){\r\n\t\t\t\tthis.groupList.forEach((group) => {\r\n\t\t\t\t\tvar rows = group.getHeadersAndRows();\r\n\r\n\t\t\t\t\trows.forEach((row) => {\r\n\t\t\t\t\t\tvar rowEl = row.getElement();\r\n\t\t\t\t\t\tprev.parentNode.insertBefore(rowEl, prev.nextSibling);\r\n\t\t\t\t\t\trow.initialize();\r\n\t\t\t\t\t\tprev = rowEl;\r\n\t\t\t\t\t});\r\n\t\t\t\t});\r\n\r\n\t\t\t}else{\r\n\t\t\t\tthis.rows.forEach((row) => {\r\n\t\t\t\t\tvar rowEl = row.getElement();\r\n\t\t\t\t\tprev.parentNode.insertBefore(rowEl, prev.nextSibling);\r\n\t\t\t\t\trow.initialize();\r\n\t\t\t\t\tprev = rowEl;\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\tthis.groupManager.table.rowManager.setDisplayRows(this.groupManager.updateGroupRows(), this.groupManager.getDisplayIndex());\r\n\r\n\t\t\tthis.groupManager.table.rowManager.checkClassicModeGroupHeaderWidth();\r\n\t\t}else{\r\n\t\t\tthis.groupManager.updateGroupRows(true);\r\n\t\t}\r\n\r\n\t\tthis.groupManager.table.externalEvents.dispatch(\"groupVisibilityChanged\", this.getComponent(), true);\r\n\t}\r\n\r\n\t_visSet(){\r\n\t\tvar data = [];\r\n\r\n\t\tif(typeof this.visible == \"function\"){\r\n\r\n\t\t\tthis.rows.forEach(function(row){\r\n\t\t\t\tdata.push(row.getData());\r\n\t\t\t});\r\n\r\n\t\t\tthis.visible = this.visible(this.key, this.getRowCount(), data, this.getComponent());\r\n\t\t}\r\n\t}\r\n\r\n\tgetRowGroup(row){\r\n\t\tvar match = false;\r\n\t\tif(this.groupList.length){\r\n\t\t\tthis.groupList.forEach(function(group){\r\n\t\t\t\tvar result = group.getRowGroup(row);\r\n\r\n\t\t\t\tif(result){\r\n\t\t\t\t\tmatch = result;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tif(this.rows.find(function(item){\r\n\t\t\t\treturn item === row;\r\n\t\t\t})){\r\n\t\t\t\tmatch = this;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn match;\r\n\t}\r\n\r\n\tgetSubGroups(component){\r\n\t\tvar output = [];\r\n\r\n\t\tthis.groupList.forEach(function(child){\r\n\t\t\toutput.push(component ? child.getComponent() : child);\r\n\t\t});\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tgetRows(compoment){\r\n\t\tvar output = [];\r\n\r\n\t\tthis.rows.forEach(function(row){\r\n\t\t\toutput.push(compoment ? row.getComponent() : row);\r\n\t\t});\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tgenerateGroupHeaderContents(){\r\n\t\tvar data = [];\r\n\r\n\t\tthis.rows.forEach(function(row){\r\n\t\t\tdata.push(row.getData());\r\n\t\t});\r\n\r\n\t\tthis.elementContents = this.generator(this.key, this.getRowCount(), data, this.getComponent());\r\n\r\n\t\twhile(this.element.firstChild) this.element.removeChild(this.element.firstChild);\r\n\r\n\t\tif(typeof this.elementContents === \"string\"){\r\n\t\t\tthis.element.innerHTML = this.elementContents;\r\n\t\t}else{\r\n\t\t\tthis.element.appendChild(this.elementContents);\r\n\t\t}\r\n\r\n\t\tthis.element.insertBefore(this.arrowElement, this.element.firstChild);\r\n\t}\r\n\r\n\tgetPath(path = []) {\r\n\t\tpath.unshift(this.key);\r\n\t\tif(this.parent) {\r\n\t\t\tthis.parent.getPath(path);\r\n\t\t}\r\n\t\treturn path;\r\n\t}\r\n\r\n\t////////////// Standard Row Functions //////////////\r\n\r\n\tgetElement(){\r\n\t\tthis.addBindingsd = false;\r\n\r\n\t\tthis._visSet();\r\n\r\n\t\tif(this.visible){\r\n\t\t\tthis.element.classList.add(\"tabulator-group-visible\");\r\n\t\t}else{\r\n\t\t\tthis.element.classList.remove(\"tabulator-group-visible\");\r\n\t\t}\r\n\r\n\t\tfor(var i = 0; i < this.element.childNodes.length; ++i){\r\n\t\t\tthis.element.childNodes[i].parentNode.removeChild(this.element.childNodes[i]);\r\n\t\t}\r\n\r\n\t\tthis.generateGroupHeaderContents();\r\n\r\n\t\t// this.addBindings();\r\n\r\n\t\treturn this.element;\r\n\t}\r\n\r\n\tdetachElement(){\r\n\t\tif (this.element && this.element.parentNode){\r\n\t\t\tthis.element.parentNode.removeChild(this.element);\r\n\t\t}\r\n\t}\r\n\r\n\t//normalize the height of elements in the row\r\n\tnormalizeHeight(){\r\n\t\tthis.setHeight(this.element.clientHeight);\r\n\t}\r\n\r\n\tinitialize(force){\r\n\t\tif(!this.initialized || force){\r\n\t\t\tthis.normalizeHeight();\r\n\t\t\tthis.initialized = true;\r\n\t\t}\r\n\t}\r\n\r\n\treinitialize(){\r\n\t\tthis.initialized = false;\r\n\t\tthis.height = 0;\r\n\r\n\t\tif(Helpers.elVisible(this.element)){\r\n\t\t\tthis.initialize(true);\r\n\t\t}\r\n\t}\r\n\r\n\tsetHeight(height){\r\n\t\tif(this.height != height){\r\n\t\t\tthis.height = height;\r\n\t\t\tthis.outerHeight = this.element.offsetHeight;\r\n\t\t}\r\n\t}\r\n\r\n\t//return rows outer height\r\n\tgetHeight(){\r\n\t\treturn this.outerHeight;\r\n\t}\r\n\r\n\tgetGroup(){\r\n\t\treturn this;\r\n\t}\r\n\r\n\treinitializeHeight(){}\r\n\r\n\tcalcHeight(){}\r\n\r\n\tsetCellHeight(){}\r\n\r\n\tclearCellHeight(){}\r\n\r\n\t//////////////// Object Generation /////////////////\r\n\tgetComponent(){\r\n\t\tif(!this.component){\r\n\t\t\tthis.component = new GroupComponent(this);\r\n\t\t}\r\n\r\n\t\treturn this.component;\r\n\t}\r\n}\r\n\r\nexport default Group;","import Module from '../../core/Module.js';\r\n\r\nimport GroupComponent from './GroupComponent.js';\r\nimport Group from './Group.js';\r\n\r\nclass GroupRows extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.groupIDLookups = false; //enable table grouping and set field to group by\r\n\t\tthis.startOpen = [function(){return false;}]; //starting state of group\r\n\t\tthis.headerGenerator = [function(){return \"\";}];\r\n\t\tthis.groupList = []; //ordered list of groups\r\n\t\tthis.allowedValues = false;\r\n\t\tthis.groups = {}; //hold row groups\r\n\t\tthis.displayIndex = 0; //index in display pipeline\r\n\r\n\t\t//register table options\r\n\t\tthis.registerTableOption(\"groupBy\", false); //enable table grouping and set field to group by\r\n\t\tthis.registerTableOption(\"groupStartOpen\", true); //starting state of group\r\n\t\tthis.registerTableOption(\"groupValues\", false);\r\n\t\tthis.registerTableOption(\"groupUpdateOnCellEdit\", false);\r\n\t\tthis.registerTableOption(\"groupHeader\", false); //header generation function\r\n\t\tthis.registerTableOption(\"groupHeaderPrint\", null);\r\n\t\tthis.registerTableOption(\"groupHeaderClipboard\", null);\r\n\t\tthis.registerTableOption(\"groupHeaderHtmlOutput\", null);\r\n\t\tthis.registerTableOption(\"groupHeaderDownload\", null);\r\n\t\tthis.registerTableOption(\"groupToggleElement\", \"arrow\");\r\n\t\tthis.registerTableOption(\"groupClosedShowCalcs\", false);\r\n\r\n\t\t//register table functions\r\n\t\tthis.registerTableFunction(\"setGroupBy\", this.setGroupBy.bind(this));\r\n\t\tthis.registerTableFunction(\"setGroupValues\", this.setGroupValues.bind(this));\r\n\t\tthis.registerTableFunction(\"setGroupStartOpen\", this.setGroupStartOpen.bind(this));\r\n\t\tthis.registerTableFunction(\"setGroupHeader\", this.setGroupHeader.bind(this));\r\n\t\tthis.registerTableFunction(\"getGroups\", this.userGetGroups.bind(this));\r\n\t\tthis.registerTableFunction(\"getGroupedData\", this.userGetGroupedData.bind(this));\r\n\r\n\t\t//register component functions\r\n\t\tthis.registerComponentFunction(\"row\", \"getGroup\", this.rowGetGroup.bind(this));\r\n\t}\r\n\r\n\t//initialize group configuration\r\n\tinitialize(){\r\n\t\tif(this.table.options.groupBy){\r\n\t\t\tvar groupBy = this.table.options.groupBy,\r\n\t\t\tstartOpen = this.table.options.groupStartOpen,\r\n\t\t\tgroupHeader = this.table.options.groupHeader;\r\n\r\n\t\t\tthis.allowedValues = this.table.options.groupValues;\r\n\r\n\t\t\tif(Array.isArray(groupBy) && Array.isArray(groupHeader) && groupBy.length > groupHeader.length){\r\n\t\t\t\tconsole.warn(\"Error creating group headers, groupHeader array is shorter than groupBy array\");\r\n\t\t\t}\r\n\r\n\t\t\tthis.headerGenerator = [function(){return \"\";}];\r\n\t\t\tthis.startOpen = [function(){return false;}]; //starting state of group\r\n\r\n\t\t\tthis.langBind(\"groups|item\", (langValue, lang) => {\r\n\t\t\t\tthis.headerGenerator[0] = (value, count, data) => { //header layout function\r\n\t\t\t\t\treturn (typeof value === \"undefined\" ? \"\" : value) + \"(\" + count + \" \" + ((count === 1) ? langValue : lang.groups.items) + \")\";\r\n\t\t\t\t};\r\n\t\t\t});\r\n\r\n\t\t\tthis.groupIDLookups = [];\r\n\r\n\t\t\tif(Array.isArray(groupBy) || groupBy){\r\n\t\t\t\tif(this.table.modExists(\"columnCalcs\") && this.table.options.columnCalcs != \"table\" && this.table.options.columnCalcs != \"both\"){\r\n\t\t\t\t\tthis.table.modules.columnCalcs.removeCalcs();\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tif(this.table.modExists(\"columnCalcs\") && this.table.options.columnCalcs != \"group\"){\r\n\r\n\t\t\t\t\tvar cols = this.table.columnManager.getRealColumns();\r\n\r\n\t\t\t\t\tcols.forEach((col) => {\r\n\t\t\t\t\t\tif(col.definition.topCalc){\r\n\t\t\t\t\t\t\tthis.table.modules.columnCalcs.initializeTopRow();\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif(col.definition.bottomCalc){\r\n\t\t\t\t\t\t\tthis.table.modules.columnCalcs.initializeBottomRow();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif(!Array.isArray(groupBy)){\r\n\t\t\t\tgroupBy = [groupBy];\r\n\t\t\t}\r\n\r\n\t\t\tgroupBy.forEach((group, i) => {\r\n\t\t\t\tvar lookupFunc, column;\r\n\r\n\t\t\t\tif(typeof group == \"function\"){\r\n\t\t\t\t\tlookupFunc = group;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tcolumn = this.table.columnManager.getColumnByField(group);\r\n\r\n\t\t\t\t\tif(column){\r\n\t\t\t\t\t\tlookupFunc = function(data){\r\n\t\t\t\t\t\t\treturn column.getFieldValue(data);\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tlookupFunc = function(data){\r\n\t\t\t\t\t\t\treturn data[group];\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.groupIDLookups.push({\r\n\t\t\t\t\tfield: typeof group === \"function\" ? false : group,\r\n\t\t\t\t\tfunc:lookupFunc,\r\n\t\t\t\t\tvalues:this.allowedValues ? this.allowedValues[i] : false,\r\n\t\t\t\t});\r\n\t\t\t});\r\n\r\n\t\t\tif(startOpen){\r\n\t\t\t\tif(!Array.isArray(startOpen)){\r\n\t\t\t\t\tstartOpen = [startOpen];\r\n\t\t\t\t}\r\n\r\n\t\t\t\tstartOpen.forEach((level) => {\r\n\t\t\t\t\tlevel = typeof level == \"function\" ? level : function(){return true;};\r\n\t\t\t\t});\r\n\r\n\t\t\t\tthis.startOpen = startOpen;\r\n\t\t\t}\r\n\r\n\t\t\tif(groupHeader){\r\n\t\t\t\tthis.headerGenerator = Array.isArray(groupHeader) ? groupHeader : [groupHeader];\r\n\t\t\t}\r\n\r\n\t\t\tif(this.table.options.groupUpdateOnCellEdit){\r\n\t\t\t\tthis.subscribe(\"cell-value-updated\", this.cellUpdated.bind(this));\r\n\t\t\t\tthis.subscribe(\"row-data-changed\", this.reassignRowToGroup.bind(this), 0);\r\n\t\t\t}\r\n\r\n\t\t\tthis.subscribe(\"row-deleting\", this.rowDeleting.bind(this));\r\n\t\t\tthis.subscribe(\"row-deleted\", this.rowsUpdated.bind(this));\r\n\t\t\tthis.subscribe(\"scroll-horizontal\", this.scrollHeaders.bind(this));\r\n\t\t\tthis.subscribe(\"rows-wipe\", this.wipe.bind(this));\r\n\t\t\tthis.subscribe(\"rows-added\", this.rowsUpdated.bind(this));\r\n\t\t\tthis.subscribe(\"row-moving\", this.rowMoving.bind(this));\r\n\t\t\tthis.subscribe(\"row-adding-index\", this.rowAddingIndex.bind(this));\r\n\r\n\t\t\tthis.subscribe(\"rows-sample\", this.rowSample.bind(this));\r\n\r\n\t\t\tthis.subscribe(\"render-virtual-fill\", this.rowAddingIndex.bind(this));\r\n\r\n\t\t\tthis.registerDisplayHandler(this.getRows.bind(this), 20);\r\n\r\n\t\t\tthis.initialized = true;\r\n\t\t}\r\n\t}\r\n\r\n\trowSample(rows, prevValue){\r\n\t\tvar group = this.getGroups(false)[0];\r\n\r\n\t\tprevValue.push(group.getRows(false)[0]);\r\n\r\n\t\treturn prevValue;\r\n\t}\r\n\r\n\tvirtualRenderFill(){\r\n\t\tvar el = this.table.rowManager.tableElement;\r\n\t\trows = this.table.rowManager.getVisibleRows();\r\n\r\n\t\trows = rows.filter((row) => {\r\n\t\t\treturn row.type !== \"group\";\r\n\t\t});\r\n\r\n\t\tel.style.minWidth = !rows.length ? this.table.columnManager.getWidth() + \"px\" : \"\";\r\n\r\n\t\t// if(this.table.options.groupBy){\r\n\t\t// \tif(this.layoutMode() != \"fitDataFill\" && rowsCount == this.table.modules.groupRows.countGroups()){\r\n\t\t// \t\tel.style.minWidth = this.table.columnManager.getWidth() + \"px\";\r\n\t\t// \t}\r\n\t\t// }\r\n\t}\r\n\r\n\trowAddingIndex(row, index, top){\r\n\t\tthis.assignRowToGroup(row);\r\n\r\n\t\tvar groupRows = row.modules.group.rows;\r\n\r\n\t\tif(groupRows.length > 1){\r\n\t\t\tif(!index || (index && groupRows.indexOf(index) == -1)){\r\n\t\t\t\tif(top){\r\n\t\t\t\t\tif(groupRows[0] !== row){\r\n\t\t\t\t\t\tindex = groupRows[0];\r\n\t\t\t\t\t\tthis.table.rowManager.moveRowInArray(row.modules.group.rows, row, index, !top);\r\n\t\t\t\t\t}\r\n\t\t\t\t}else{\r\n\t\t\t\t\tif(groupRows[groupRows.length -1] !== row){\r\n\t\t\t\t\t\tindex = groupRows[groupRows.length -1];\r\n\t\t\t\t\t\tthis.table.rowManager.moveRowInArray(row.modules.group.rows, row, index, !top);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tthis.table.rowManager.moveRowInArray(row.modules.group.rows, row, index, !top);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn index;\r\n\t}\r\n\r\n\ttrackChanges(){\r\n\t\tthis.dispatch(\"group-changed\");\r\n\t}\r\n\r\n\t///////////////////////////////////\r\n\t///////// Table Functions /////////\r\n\t///////////////////////////////////\r\n\r\n\tsetGroupBy(groups){\r\n\t\tthis.table.options.groupBy = groups;\r\n\t\tthis.initialize();\r\n\t\tthis.refreshData(false, \"display\");\r\n\r\n\t\tthis.trackChanges();\r\n\t}\r\n\r\n\tsetGroupValues(groupValues){\r\n\t\tthis.table.options.groupValues = groupValues;\r\n\t\tthis.initialize();\r\n\t\tthis.refreshData(false, \"display\");\r\n\r\n\t\tthis.trackChanges();\r\n\t}\r\n\r\n\tsetGroupStartOpen(values){\r\n\t\tthis.table.options.groupStartOpen = values;\r\n\t\tthis.initialize();\r\n\r\n\t\tif(this.table.options.groupBy){\r\n\t\t\tthis.refreshData();\r\n\r\n\t\t\tthis.trackChanges();\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Grouping Update - cant refresh view, no groups have been set\");\r\n\t\t}\r\n\t}\r\n\r\n\tsetGroupHeader(values){\r\n\t\tthis.table.options.groupHeader = values;\r\n\t\tthis.initialize();\r\n\r\n\t\tif(this.table.options.groupBy){\r\n\t\t\tthis.refreshData();\r\n\r\n\t\t\tthis.trackChanges();\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Grouping Update - cant refresh view, no groups have been set\");\r\n\t\t}\r\n\t}\r\n\r\n\tuserGetGroups(values){\r\n\t\treturn this.getGroups(true);\r\n\t}\r\n\r\n\t// get grouped table data in the same format as getData()\r\n\tuserGetGroupedData(){\r\n\t\treturn this.table.options.groupBy ?\r\n\t\tthis.getGroupedData() : this.getData()\r\n\t}\r\n\r\n\r\n\t///////////////////////////////////////\r\n\t///////// Component Functions /////////\r\n\t///////////////////////////////////////\r\n\r\n\trowGetGroup(row){\r\n\t\treturn row.modules.group ? row.modules.group.getComponent() : false;\r\n\t}\r\n\r\n\t///////////////////////////////////\r\n\t///////// Internal Logic //////////\r\n\t///////////////////////////////////\r\n\r\n\trowMoving(from, to, after){\r\n\t\tif(!after && to instanceof Group){\r\n\t\t\tto = this.table.rowManager.prevDisplayRow(from) || to;\r\n\t\t}\r\n\r\n\t\tvar toGroup = to.modules.group;\r\n\t\tvar fromGroup = from.modules.group;\r\n\r\n\t\tif(toGroup === fromGroup){\r\n\t\t\tthis.table.rowManager.moveRowInArray(toGroup.rows, from, to, after);\r\n\t\t}else{\r\n\t\t\tif(fromGroup){\r\n\t\t\t\tfromGroup.removeRow(from);\r\n\t\t\t}\r\n\r\n\t\t\ttoGroup.insertRow(from, to, after);\r\n\t\t}\r\n\t}\r\n\r\n\r\n\trowDeleting(row){\r\n\t\t//remove from group\r\n\t\tif(row.modules.group){\r\n\t\t\trow.modules.group.removeRow(row);\r\n\t\t}\r\n\t}\r\n\r\n\r\n\trowsUpdated(row){\r\n\t\tthis.updateGroupRows(true);\r\n\t}\r\n\r\n\tcellUpdated(cell){\r\n\t\tthis.reassignRowToGroup(cell.row);\r\n\t}\r\n\r\n\r\n\tsetDisplayIndex(index){\r\n\t\tthis.displayIndex = index;\r\n\t}\r\n\r\n\tgetDisplayIndex(){\r\n\t\treturn this.displayIndex;\r\n\t}\r\n\r\n\t//return appropriate rows with group headers\r\n\tgetRows(rows){\r\n\t\tif(this.groupIDLookups.length){\r\n\r\n\t\t\tthis.dispatchExternal(\"dataGrouping\");\r\n\r\n\t\t\tthis.generateGroups(rows);\r\n\r\n\t\t\tif(this.subscribedExternal(\"dataGrouped\")){\r\n\t\t\t\tthis.dispatchExternal(\"dataGrouped\", this.getGroups(true));\r\n\t\t\t}\r\n\r\n\t\t\treturn this.updateGroupRows();\r\n\r\n\t\t}else{\r\n\t\t\treturn rows.slice(0);\r\n\t\t}\r\n\t}\r\n\r\n\tgetGroups(component){\r\n\t\tvar groupComponents = [];\r\n\r\n\t\tthis.groupList.forEach(function(group){\r\n\t\t\tgroupComponents.push(component ? group.getComponent() : group);\r\n\t\t});\r\n\r\n\t\treturn groupComponents;\r\n\t}\r\n\r\n\tgetChildGroups(group){\r\n\t\tvar groupComponents = [];\r\n\r\n\t\tif(!group){\r\n\t\t\tgroup = this;\r\n\t\t}\r\n\r\n\t\tgroup.groupList.forEach((child) => {\r\n\t\t\tif(child.groupList.length){\r\n\t\t\t\tgroupComponents = groupComponents.concat(this.getChildGroups(child));\r\n\t\t\t}else{\r\n\t\t\t\tgroupComponents.push(child);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn groupComponents;\r\n\t}\r\n\r\n\twipe(){\r\n\t\tthis.groupList.forEach(function(group){\r\n\t\t\tgroup.wipe();\r\n\t\t});\r\n\t}\r\n\r\n\tpullGroupListData(groupList) {\r\n\t\tvar groupListData = [];\r\n\r\n\t\tgroupList.forEach((group) => {\r\n\t\t\tvar groupHeader = {};\r\n\t\t\tgroupHeader.level = 0;\r\n\t\t\tgroupHeader.rowCount = 0;\r\n\t\t\tgroupHeader.headerContent = \"\";\r\n\t\t\tvar childData = [];\r\n\r\n\t\t\tif (group.hasSubGroups) {\r\n\t\t\t\tchildData = this.pullGroupListData(group.groupList);\r\n\r\n\t\t\t\tgroupHeader.level = group.level;\r\n\t\t\t\tgroupHeader.rowCount = childData.length - group.groupList.length; // data length minus number of sub-headers\r\n\t\t\t\tgroupHeader.headerContent = group.generator(group.key, groupHeader.rowCount, group.rows, group);\r\n\r\n\t\t\t\tgroupListData.push(groupHeader);\r\n\t\t\t\tgroupListData = groupListData.concat(childData);\r\n\t\t\t}\r\n\r\n\t\t\telse {\r\n\t\t\t\tgroupHeader.level = group.level;\r\n\t\t\t\tgroupHeader.headerContent = group.generator(group.key, group.rows.length, group.rows, group);\r\n\t\t\t\tgroupHeader.rowCount = group.getRows().length;\r\n\r\n\t\t\t\tgroupListData.push(groupHeader);\r\n\r\n\t\t\t\tgroup.getRows().forEach((row) => {\r\n\t\t\t\t\tgroupListData.push(row.getData(\"data\"));\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn groupListData\r\n\t}\r\n\r\n\tgetGroupedData(){\r\n\r\n\t\treturn this.pullGroupListData(this.groupList);\r\n\t}\r\n\r\n\tgetRowGroup(row){\r\n\t\tvar match = false;\r\n\r\n\t\tthis.groupList.forEach((group) => {\r\n\t\t\tvar result = group.getRowGroup(row);\r\n\r\n\t\t\tif(result){\r\n\t\t\t\tmatch = result;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn match;\r\n\t}\r\n\r\n\tcountGroups(){\r\n\t\treturn this.groupList.length;\r\n\t}\r\n\r\n\tgenerateGroups(rows){\r\n\t\tvar oldGroups = this.groups;\r\n\r\n\t\tthis.groups = {};\r\n\t\tthis.groupList =[];\r\n\r\n\t\tif(this.allowedValues && this.allowedValues[0]){\r\n\t\t\tthis.allowedValues[0].forEach((value) => {\r\n\t\t\t\tthis.createGroup(value, 0, oldGroups);\r\n\t\t\t});\r\n\r\n\t\t\trows.forEach((row) => {\r\n\t\t\t\tthis.assignRowToExistingGroup(row, oldGroups);\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\trows.forEach((row) => {\r\n\t\t\t\tthis.assignRowToGroup(row, oldGroups);\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tcreateGroup(groupID, level, oldGroups){\r\n\t\tvar groupKey = level + \"_\" + groupID,\r\n\t\tgroup;\r\n\r\n\t\toldGroups = oldGroups || [];\r\n\r\n\t\tgroup = new Group(this, false, level, groupID, this.groupIDLookups[0].field, this.headerGenerator[0], oldGroups[groupKey]);\r\n\r\n\t\tthis.groups[groupKey] = group;\r\n\t\tthis.groupList.push(group);\r\n\t}\r\n\r\n\tassignRowToExistingGroup(row, oldGroups){\r\n\t\tvar groupID = this.groupIDLookups[0].func(row.getData()),\r\n\t\tgroupKey = \"0_\" + groupID;\r\n\r\n\t\tif(this.groups[groupKey]){\r\n\t\t\tthis.groups[groupKey].addRow(row);\r\n\t\t}\r\n\t}\r\n\r\n\tassignRowToGroup(row, oldGroups){\r\n\t\tvar groupID = this.groupIDLookups[0].func(row.getData()),\r\n\t\tnewGroupNeeded = !this.groups[\"0_\" + groupID];\r\n\r\n\t\tif(newGroupNeeded){\r\n\t\t\tthis.createGroup(groupID, 0, oldGroups);\r\n\t\t}\r\n\r\n\t\tthis.groups[\"0_\" + groupID].addRow(row);\r\n\r\n\t\treturn !newGroupNeeded;\r\n\t}\r\n\r\n\treassignRowToGroup(row){\r\n\t\tif(row.type === \"row\"){\r\n\t\t\tvar oldRowGroup = row.modules.group,\r\n\t\t\toldGroupPath = oldRowGroup.getPath(),\r\n\t\t\tnewGroupPath = this.getExpectedPath(row),\r\n\t\t\tsamePath = true;\r\n\r\n\t\t\t// figure out if new group path is the same as old group path\r\n\t\t\tvar samePath = (oldGroupPath.length == newGroupPath.length) && oldGroupPath.every((element, index) => {\r\n\t\t\t\treturn element === newGroupPath[index];\r\n\t\t\t});\r\n\r\n\t\t\t// refresh if they new path and old path aren't the same (aka the row's groupings have changed)\r\n\t\t\tif(!samePath) {\r\n\t\t\t\toldRowGroup.removeRow(row);\r\n\t\t\t\tthis.assignRowToGroup(row, this.groups);\r\n\t\t\t\tthis.refreshData(true);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tgetExpectedPath(row) {\r\n\t\tvar groupPath = [], rowData = row.getData();\r\n\r\n\t\tthis.groupIDLookups.forEach((groupId) => {\r\n\t\t\tgroupPath.push(groupId.func(rowData));\r\n\t\t});\r\n\r\n\t\treturn groupPath;\r\n\t}\r\n\r\n\tupdateGroupRows(force){\r\n\t\tvar output = [],\r\n\t\toldRowCount;\r\n\r\n\t\tthis.groupList.forEach((group) => {\r\n\t\t\toutput = output.concat(group.getHeadersAndRows());\r\n\t\t});\r\n\r\n\t\t//force update of table display\r\n\t\tif(force){\r\n\t\t\tvar displayIndex = this.table.rowManager.setDisplayRows(output, this.getDisplayIndex());\r\n\r\n\t\t\tif(displayIndex !== true){\r\n\t\t\t\tthis.setDisplayIndex(displayIndex);\r\n\t\t\t}\r\n\r\n\t\t\tthis.refreshData(true);\r\n\t\t}\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tscrollHeaders(left){\r\n\t\tif(this.table.options.renderHorizontal === \"virtual\"){\r\n\t\t\tleft -= this.table.columnManager.renderer.vDomPadLeft;\r\n\t\t}\r\n\r\n\t\tleft = left + \"px\";\r\n\r\n\t\tthis.groupList.forEach((group) => {\r\n\t\t\tgroup.scrollHeader(left);\r\n\t\t});\r\n\t}\r\n\r\n\tremoveGroup(group){\r\n\t\tvar groupKey = group.level + \"_\" + group.key,\r\n\t\tindex;\r\n\r\n\t\tif(this.groups[groupKey]){\r\n\t\t\tdelete this.groups[groupKey];\r\n\r\n\t\t\tindex = this.groupList.indexOf(group);\r\n\r\n\t\t\tif(index > -1){\r\n\t\t\t\tthis.groupList.splice(index, 1);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n\r\nGroupRows.moduleName = \"groupRows\";\r\n\r\nexport default GroupRows;","export default {\r\n\tcellEdit: function(action){\r\n\t\taction.component.setValueProcessData(action.data.oldValue);\r\n\t},\r\n\r\n\trowAdd: function(action){\r\n\t\taction.component.deleteActual();\r\n\t},\r\n\r\n\trowDelete: function(action){\r\n\t\tvar newRow = this.table.rowManager.addRowActual(action.data.data, action.data.pos, action.data.index);\r\n\r\n\t\tif(this.table.options.groupBy && this.table.modExists(\"groupRows\")){\r\n\t\t\tthis.table.modules.groupRows.updateGroupRows(true);\r\n\t\t}\r\n\r\n\t\tthis._rebindRow(action.component, newRow);\r\n\t},\r\n\r\n\trowMove: function(action){\r\n\t\tthis.table.rowManager.moveRowActual(action.component, this.table.rowManager.rows[action.data.posFrom], !action.data.after);\r\n\t\tthis.table.rowManager.redraw();\r\n\t},\r\n};","export default {\r\n\tcellEdit: function(action){\r\n\t\taction.component.setValueProcessData(action.data.newValue);\r\n\t},\r\n\r\n\trowAdd: function(action){\r\n\t\tvar newRow = this.table.rowManager.addRowActual(action.data.data, action.data.pos, action.data.index);\r\n\r\n\t\tif(this.table.options.groupBy && this.table.modExists(\"groupRows\")){\r\n\t\t\tthis.table.modules.groupRows.updateGroupRows(true);\r\n\t\t}\r\n\r\n\t\tthis._rebindRow(action.component, newRow);\r\n\t},\r\n\r\n\trowDelete:function(action){\r\n\t\taction.component.deleteActual();\r\n\t},\r\n\r\n\trowMove: function(action){\r\n\t\tthis.table.rowManager.moveRowActual(action.component, this.table.rowManager.rows[action.data.posTo], action.data.after);\r\n\t\tthis.table.rowManager.redraw();\r\n\t},\r\n};","import Module from '../../core/Module.js';\r\n\r\nimport defaultUndoers from './defaults/undoers.js';\r\nimport defaultRedoers from './defaults/redoers.js';\r\n\r\nclass History extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.history = [];\r\n\t\tthis.index = -1;\r\n\r\n\t\tthis.registerTableOption(\"history\", false); //enable edit history\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tif(this.table.options.history){\r\n\t\t\tthis.subscribe(\"cell-value-updated\", this.layoutCell.bind(this));\r\n\t\t\tthis.subscribe(\"cell-delete\", this.clearComponentHistory.bind(this));\r\n\t\t\tthis.subscribe(\"row-delete\", this.rowDeleted.bind(this));\r\n\t\t\tthis.subscribe(\"rows-wipe\", this.clear.bind(this));\r\n\t\t\tthis.subscribe(\"row-added\", this.clear.bind(this));\r\n\t\t\tthis.subscribe(\"row-move\", this.rowMoved.bind(this));\r\n\t\t}\r\n\r\n\t\tthis.registerTableFunction(\"undo\", this.undo.bind(this));\r\n\t\tthis.registerTableFunction(\"redo\", this.redo.bind(this));\r\n\t\tthis.registerTableFunction(\"getHistoryUndoSize\", this.getHistoryUndoSize.bind(this));\r\n\t\tthis.registerTableFunction(\"getHistoryRedoSize\", this.getHistoryRedoSize.bind(this));\r\n\t\tthis.registerTableFunction(\"clearHistory\", this.clear.bind(this));\r\n\t}\r\n\r\n\trowMoved(from, to, after){\r\n\t\tthis.action(\"rowMove\", from, {posFrom:this.table.rowManager.getRowPosition(from), posTo:this.table.rowManager.getRowPosition(to), to:to, after:after});\r\n\t}\r\n\r\n\trowAdded(row, data, pos, index){\r\n\t\tthis.action(\"rowAdd\", row, {data:data, pos:pos, index:index});\r\n\t}\r\n\r\n\trowDeleted(row){\r\n\t\tvar index, rows;\r\n\r\n\t\tif(this.table.options.groupBy){\r\n\r\n\t\t\trows = row.getComponent().getGroup().rows\r\n\t\t\tindex = rows.indexOf(row);\r\n\r\n\t\t\tif(index){\r\n\t\t\t\tindex = rows[index-1];\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tindex = row.table.rowManager.getRowIndex(row);\r\n\r\n\t\t\tif(index){\r\n\t\t\t\tindex = row.table.rowManager.rows[index-1];\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.history.action(\"rowDelete\", row, {data:row.getData(), pos:!index, index:index});\r\n\t}\r\n\r\n\tcellUpdated(cell){\r\n\t\tthis.action(\"cellEdit\", cell, {oldValue:cell.oldValue, newValue:cell.value});\r\n\t}\r\n\r\n\tclear(){\r\n\t\tthis.history = [];\r\n\t\tthis.index = -1;\r\n\t}\r\n\r\n\taction(type, component, data){\r\n\t\tthis.history = this.history.slice(0, this.index + 1);\r\n\r\n\t\tthis.history.push({\r\n\t\t\ttype:type,\r\n\t\t\tcomponent:component,\r\n\t\t\tdata:data,\r\n\t\t});\r\n\r\n\t\tthis.index ++;\r\n\t}\r\n\r\n\tgetHistoryUndoSize(){\r\n\t\treturn this.index + 1;\r\n\t}\r\n\r\n\tgetHistoryRedoSize(){\r\n\t\treturn this.history.length - (this.index + 1);\r\n\t}\r\n\r\n\tclearComponentHistory(component){\r\n\t\tvar index = this.history.findIndex(function(item){\r\n\t\t\treturn item.component === component;\r\n\t\t});\r\n\r\n\t\tif(index > -1){\r\n\t\t\tthis.history.splice(index, 1);\r\n\t\t\tif(index <= this.index){\r\n\t\t\t\tthis.index--;\r\n\t\t\t}\r\n\r\n\t\t\tthis.clearComponentHistory(component);\r\n\t\t}\r\n\t}\r\n\r\n\tundo(){\r\n\t\tif(this.index > -1){\r\n\t\t\tlet action = this.history[this.index];\r\n\r\n\t\t\tHistory.undoers[action.type].call(this, action);\r\n\r\n\t\t\tthis.index--;\r\n\r\n\t\t\tthis.dispatchExternal(\"historyUndo\", action.type, action.component.getComponent(), action.data);\r\n\r\n\t\t\treturn true;\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"History Undo Error - No more history to undo\");\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\tredo(){\r\n\t\tif(this.history.length-1 > this.index){\r\n\r\n\t\t\tthis.index++;\r\n\r\n\t\t\tlet action = this.history[this.index];\r\n\r\n\t\t\tHistory.redoers[action.type].call(this, action);\r\n\r\n\t\t\tthis.dispatchExternal(\"historyRedo\", action.type, action.component.getComponent(), action.data);\r\n\r\n\t\t\treturn true;\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"History Redo Error - No more history to redo\");\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\t//rebind rows to new element after deletion\r\n\t_rebindRow(oldRow, newRow){\r\n\t\tthis.history.forEach(function(action){\r\n\t\t\tif(action.component instanceof Row){\r\n\t\t\t\tif(action.component === oldRow){\r\n\t\t\t\t\taction.component = newRow;\r\n\t\t\t\t}\r\n\t\t\t}else if(action.component instanceof Cell){\r\n\t\t\t\tif(action.component.row === oldRow){\r\n\t\t\t\t\tvar field = action.component.column.getField();\r\n\r\n\t\t\t\t\tif(field){\r\n\t\t\t\t\t\taction.component = newRow.getCell(field);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n}\r\n\r\nHistory.moduleName = \"history\";\r\n\r\n//load defaults\r\nHistory.undoers = defaultUndoers;\r\nHistory.redoers = defaultRedoers;\r\n\r\nexport default History;","import Module from '../../core/Module.js';\r\n\r\nclass HtmlTableImport extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.fieldIndex = [];\r\n\t\tthis.hasIndex = false;\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tthis.subscribe(\"table-building\", this.tableElementCheck.bind(this));\r\n\t}\r\n\r\n\ttableElementCheck(){\r\n\t\tif(this.table.element.tagName === \"TABLE\"){\r\n\t\t\tthis.parseTable();\r\n\t\t}\r\n\t}\r\n\r\n\tparseTable(){\r\n\t\tvar element = this.table.element,\r\n\t\toptions = this.table.options,\r\n\t\tcolumns = options.columns,\r\n\t\theaders = element.getElementsByTagName(\"th\"),\r\n\t\trows = element.getElementsByTagName(\"tbody\")[0],\r\n\t\tdata = [],\r\n\t\tnewTable;\r\n\r\n\t\tthis.hasIndex = false;\r\n\r\n\t\tthis.dispatchExternal(\"htmlImporting\");\r\n\r\n\t\trows = rows ? rows.getElementsByTagName(\"tr\") : [];\r\n\r\n\t\t//check for tablator inline options\r\n\t\tthis._extractOptions(element, options);\r\n\r\n\t\tif(headers.length){\r\n\t\t\tthis._extractHeaders(headers, rows);\r\n\t\t}else{\r\n\t\t\tthis._generateBlankHeaders(headers, rows);\r\n\t\t}\r\n\r\n\t\t//iterate through table rows and build data set\r\n\t\tfor(var index = 0; index < rows.length; index++){\r\n\t\t\tvar row = rows[index],\r\n\t\t\tcells = row.getElementsByTagName(\"td\"),\r\n\t\t\titem = {};\r\n\r\n\t\t\t//create index if the dont exist in table\r\n\t\t\tif(!this.hasIndex){\r\n\t\t\t\titem[options.index] = index;\r\n\t\t\t}\r\n\r\n\t\t\tfor(var i = 0; i < cells.length; i++){\r\n\t\t\t\tvar cell = cells[i];\r\n\t\t\t\tif(typeof this.fieldIndex[i] !== \"undefined\"){\r\n\t\t\t\t\titem[this.fieldIndex[i]] = cell.innerHTML;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t//add row data to item\r\n\t\t\tdata.push(item);\r\n\t\t}\r\n\r\n\t\t//create new element\r\n\t\tvar newElement = document.createElement(\"div\");\r\n\r\n\t\t//transfer attributes to new element\r\n\t\tvar attributes = element.attributes;\r\n\r\n\t\t// loop through attributes and apply them on div\r\n\r\n\t\tfor(var i in attributes){\r\n\t\t\tif(typeof attributes[i] == \"object\"){\r\n\t\t\t\tnewElement.setAttribute(attributes[i].name, attributes[i].value);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// replace table with div element\r\n\t\telement.parentNode.replaceChild(newElement, element);\r\n\r\n\t\toptions.data = data;\r\n\r\n\t\tthis.dispatchExternal(\"htmlImported\");\r\n\r\n\t\tthis.table.element = newElement;\r\n\t}\r\n\r\n\t//extract tabulator attribute options\r\n\t_extractOptions(element, options, defaultOptions){\r\n\t\tvar attributes = element.attributes;\r\n\t\tvar optionsArr = defaultOptions ? Object.assign([], defaultOptions) : Object.keys(options);\r\n\t\tvar optionsList = {};\r\n\r\n\t\toptionsArr.forEach((item) => {\r\n\t\t\toptionsList[item.toLowerCase()] = item;\r\n\t\t});\r\n\r\n\t\tfor(var index in attributes){\r\n\t\t\tvar attrib = attributes[index];\r\n\t\t\tvar name;\r\n\r\n\t\t\tif(attrib && typeof attrib == \"object\" && attrib.name && attrib.name.indexOf(\"tabulator-\") === 0){\r\n\t\t\t\tname = attrib.name.replace(\"tabulator-\", \"\");\r\n\r\n\t\t\t\tif(typeof optionsList[name] !== \"undefined\"){\r\n\t\t\t\t\toptions[optionsList[name]] = this._attribValue(attrib.value);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//get value of attribute\r\n\t_attribValue(value){\r\n\t\tif(value === \"true\"){\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\tif(value === \"false\"){\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\treturn value;\r\n\t}\r\n\r\n\t//find column if it has already been defined\r\n\t_findCol(title){\r\n\t\tvar match = this.table.options.columns.find((column) => {\r\n\t\t\treturn column.title === title;\r\n\t\t});\r\n\r\n\t\treturn match || false;\r\n\t}\r\n\r\n\t//extract column from headers\r\n\t_extractHeaders(headers, rows){\r\n\t\tfor(var index = 0; index < headers.length; index++){\r\n\t\t\tvar header = headers[index],\r\n\t\t\texists = false,\r\n\t\t\tcol = this._findCol(header.textContent),\r\n\t\t\twidth, attributes;\r\n\r\n\t\t\tif(col){\r\n\t\t\t\texists = true;\r\n\t\t\t}else{\r\n\t\t\t\tcol = {title:header.textContent.trim()};\r\n\t\t\t}\r\n\r\n\t\t\tif(!col.field) {\r\n\t\t\t\tcol.field = header.textContent.trim().toLowerCase().replace(\" \", \"_\");\r\n\t\t\t}\r\n\r\n\t\t\twidth = header.getAttribute(\"width\");\r\n\r\n\t\t\tif(width && !col.width)\t{\r\n\t\t\t\tcol.width = width;\r\n\t\t\t}\r\n\r\n\t\t\t//check for tablator inline options\r\n\t\t\tattributes = header.attributes;\r\n\r\n\t\t\t// //check for tablator inline options\r\n\t\t\tthis._extractOptions(header, col, Column.prototype.defaultOptionList);\r\n\r\n\t\t\tthis.fieldIndex[index] = col.field;\r\n\r\n\t\t\tif(col.field == this.table.options.index){\r\n\t\t\t\tthis.hasIndex = true;\r\n\t\t\t}\r\n\r\n\t\t\tif(!exists){\r\n\t\t\t\tthis.table.options.columns.push(col);\r\n\t\t\t}\r\n\r\n\t\t}\r\n\t}\r\n\r\n\t//generate blank headers\r\n\t_generateBlankHeaders(headers, rows){\r\n\t\tfor(var index = 0; index < headers.length; index++){\r\n\t\t\tvar header = headers[index],\r\n\t\t\tcol = {title:\"\", field:\"col\" + index};\r\n\r\n\t\t\tthis.fieldIndex[index] = col.field;\r\n\r\n\t\t\tvar width = header.getAttribute(\"width\");\r\n\r\n\t\t\tif(width){\r\n\t\t\t\tcol.width = width;\r\n\t\t\t}\r\n\r\n\t\t\tthis.table.options.columns.push(col);\r\n\t\t}\r\n\t}\r\n}\r\n\r\nHtmlTableImport.moduleName = \"htmlTableImport\";\r\n\r\nexport default HtmlTableImport;","import Module from '../../core/Module.js';\r\nimport Helpers from '../../core/tools/Helpers.js';\r\n\r\nimport Cell from '../../core/cell/Cell';\r\nimport Column from '../../core/column/Column';\r\n\r\nclass Interaction extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.eventMap = {\r\n\t\t\t//row events\r\n\t\t\trowClick:\"row-click\",\r\n\t\t\trowDblClick:\"row-dblclick\",\r\n\t\t\trowContext:\"row-contextmenu\",\r\n\t\t\trowMouseEnter:\"row-mouseenter\",\r\n\t\t\trowMouseLeave:\"row-mouseleave\",\r\n\t\t\trowMouseOver:\"row-mouseover\",\r\n\t\t\trowMouseOut:\"row-mouseout\",\r\n\t\t\trowMouseMove:\"row-mousemove\",\r\n\t\t\trowTap:\"row\",\r\n\t\t\trowDblTap:\"row\",\r\n\t\t\trowTapHold:\"row\",\r\n\r\n\t\t\t//cell events\r\n\t\t\tcellClick:\"cell-click\",\r\n\t\t\tcellDblClick:\"cell-dblclick\",\r\n\t\t\tcellContext:\"cell-contextmenu\",\r\n\t\t\tcellMouseEnter:\"cell-mouseenter\",\r\n\t\t\tcellMouseLeave:\"cell-mouseleave\",\r\n\t\t\tcellMouseOver:\"cell-mouseover\",\r\n\t\t\tcellMouseOut:\"cell-mouseout\",\r\n\t\t\tcellMouseMove:\"cell-mousemove\",\r\n\t\t\tcellTap:\"cell\",\r\n\t\t\tcellDblTap:\"cell\",\r\n\t\t\tcellTapHold:\"cell\",\r\n\r\n\t\t\t//column header events\r\n\t\t\theaderClick:\"column-click\",\r\n\t\t\theaderDblClick:\"column-dblclick\",\r\n\t\t\theaderContext:\"column-contextmenu\",\r\n\t\t\theaderMouseEnter:\"column-mouseenter\",\r\n\t\t\theaderMouseLeave:\"column-mouseleave\",\r\n\t\t\theaderMouseOver:\"column-mouseover\",\r\n\t\t\theaderMouseOut:\"column-mouseout\",\r\n\t\t\theaderMouseMove:\"column-mousemove\",\r\n\t\t\theaderTap:\"column\",\r\n\t\t\theaderDblTap:\"column\",\r\n\t\t\theaderTapHold:\"column\",\r\n\r\n\t\t\t//group header\r\n\t\t\tgroupClick:\"group-click\",\r\n\t\t\tgroupDblClick:\"group-dblclick\",\r\n\t\t\tgroupContext:\"group-contextmenu\",\r\n\t\t\tgroupMouseEnter:\"group-mouseenter\",\r\n\t\t\tgroupMouseLeave:\"group-mouseleave\",\r\n\t\t\tgroupMouseOver:\"group-mouseover\",\r\n\t\t\tgroupMouseOut:\"group-mouseout\",\r\n\t\t\tgroupMouseMove:\"group-mousemove\",\r\n\t\t\tgroupTap:\"group\",\r\n\t\t\tgroupDblTap:\"group\",\r\n\t\t\tgroupTapHold:\"group\",\r\n\t\t}\r\n\r\n\t\tthis.subscribers = {};\r\n\r\n\t\tthis.touchSubscribers = {};\r\n\r\n\t\tthis.columnSubscribers = {};\r\n\r\n\t\tthis.touchWatchers = {\r\n\t\t\trow:{\r\n\t\t\t\ttap:null,\r\n\t\t\t\ttapDbl:null,\r\n\t\t\t\ttapHold:null,\r\n\t\t\t},\r\n\t\t\tcell:{\r\n\t\t\t\ttap:null,\r\n\t\t\t\ttapDbl:null,\r\n\t\t\t\ttapHold:null,\r\n\t\t\t},\r\n\t\t\tcolumn:{\r\n\t\t\t\ttap:null,\r\n\t\t\t\ttapDbl:null,\r\n\t\t\t\ttapHold:null,\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.registerColumnOption(\"headerClick\");\r\n\t\tthis.registerColumnOption(\"headerDblClick\");\r\n\t\tthis.registerColumnOption(\"headerContext\");\r\n\t\tthis.registerColumnOption(\"headerMouseEnter\");\r\n\t\tthis.registerColumnOption(\"headerMouseLeave\");\r\n\t\tthis.registerColumnOption(\"headerMouseOver\");\r\n\t\tthis.registerColumnOption(\"headerMouseOut\");\r\n\t\tthis.registerColumnOption(\"headerMouseMove\");\r\n\t\tthis.registerColumnOption(\"headerTap\");\r\n\t\tthis.registerColumnOption(\"headerDblTap\");\r\n\t\tthis.registerColumnOption(\"headerTapHold\");\r\n\r\n\t\tthis.registerColumnOption(\"cellClick\");\r\n\t\tthis.registerColumnOption(\"cellDblClick\");\r\n\t\tthis.registerColumnOption(\"cellContext\");\r\n\t\tthis.registerColumnOption(\"cellMouseEnter\");\r\n\t\tthis.registerColumnOption(\"cellMouseLeave\");\r\n\t\tthis.registerColumnOption(\"cellMouseOver\");\r\n\t\tthis.registerColumnOption(\"cellMouseOut\");\r\n\t\tthis.registerColumnOption(\"cellMouseMove\");\r\n\t\tthis.registerColumnOption(\"cellTap\");\r\n\t\tthis.registerColumnOption(\"cellDblTap\");\r\n\t\tthis.registerColumnOption(\"cellTapHold\");\r\n\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tthis.initializeExternalEvents();\r\n\r\n\t\tthis.subscribe(\"column-init\", this.initializeColumn.bind(this))\r\n\t\tthis.subscribe(\"cell-dblclick\", this.cellContentsSelectionFixer.bind(this))\r\n\t}\r\n\r\n\tcellContentsSelectionFixer(e, cell){\r\n\t\tif(this.table.modExists(\"edit\")){\r\n\t\t\tif (this.table.modules.edit.currentCell === this){\r\n\t\t\t\treturn; //prevent instant selection of editor content\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\te.preventDefault();\r\n\r\n\t\ttry{\r\n\t\t\tif (document.selection) { // IE\r\n\t\t\t\tvar range = document.body.createTextRange();\r\n\t\t\t\trange.moveToElementText(this.element);\r\n\t\t\t\trange.select();\r\n\t\t\t} else if (window.getSelection) {\r\n\t\t\t\tvar range = document.createRange();\r\n\t\t\t\trange.selectNode(this.element);\r\n\t\t\t\twindow.getSelection().removeAllRanges();\r\n\t\t\t\twindow.getSelection().addRange(range);\r\n\t\t\t}\r\n\t\t}catch(e){}\r\n\t}\r\n\r\n\tinitializeExternalEvents(){\r\n\t\tfor(let key in this.eventMap){\r\n\t\t\tthis.subscriptionChangeExternal(key, this.subscriptionChanged.bind(this, key))\r\n\t\t}\r\n\t}\r\n\r\n\tsubscriptionChanged(key, added){\r\n\t\tvar index;\r\n\r\n\t\tif(added){\r\n\t\t\tif(!this.subscribers[key]){\r\n\t\t\t\tif(this.eventMap[key].includes(\"-\")){\r\n\t\t\t\t\tthis.subscribers[key] = this.handle.bind(this, key);\r\n\t\t\t\t\tthis.subscribe(this.eventMap[key], this.subscribers[key]);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tthis.subscribeTouchEvents(key);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tif(this.eventMap[key].includes(\"-\")){\r\n\t\t\t\tif(this.subscribers[key] && !this.columnSubscribers[key] && !this.subscribedExternal(key)){\r\n\t\t\t\t\tthis.unsubscribe(this.eventMap[key], this.subscribers[key]);\r\n\t\t\t\t\tdelete this.subscribers[key];\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tthis.unsubscribeTouchEvents(key);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\r\n\tsubscribeTouchEvents(key){\r\n\t\tvar type = this.eventMap[key];\r\n\r\n\t\tif(!this.touchSubscribers[type + \"-touchstart\"]){\r\n\t\t\tthis.touchSubscribers[type + \"-touchstart\"] = this.handleTouch.bind(this, type, \"start\");\r\n\t\t\tthis.touchSubscribers[type + \"-touchend\"] = this.handleTouch.bind(this, type, \"end\");\r\n\r\n\t\t\tthis.subscribe(type + \"-touchstart\", this.touchSubscribers[type + \"-touchstart\"]);\r\n\t\t\tthis.subscribe(type + \"-touchend\", this.touchSubscribers[type + \"-touchend\"]);\r\n\t\t}\r\n\r\n\t\tthis.subscribers[key] = true;\r\n\t}\r\n\r\n\tunsubscribeTouchEvents(key){\r\n\t\tvar notouch = true,\r\n\t\ttype = this.eventMap[key];\r\n\r\n\t\tif(this.subscribers[key] && !this.subscribedExternal(key)){\r\n\t\t\tdelete this.subscribers[key];\r\n\r\n\t\t\tfor(let i in this.eventMap){\r\n\t\t\t\tif(this.eventMap[i] === type){\r\n\t\t\t\t\tif(this.subscribers[i]){\r\n\t\t\t\t\t\tnotouch = false;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif(notouch){\r\n\t\t\t\tthis.unsubscribe(type + \"-touchstart\", this.touchSubscribers[type + \"-touchstart\"]);\r\n\t\t\t\tthis.unsubscribe(type + \"-touchend\", this.touchSubscribers[type + \"-touchend\"]);\r\n\r\n\t\t\t\tdelete this.touchSubscribers[type + \"-touchstart\"];\r\n\t\t\t\tdelete this.touchSubscribers[type + \"-touchend\"];\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tinitializeColumn(column){\r\n\t\tvar def = column.definition;\r\n\r\n\t\tfor(let key in this.eventMap){\r\n\t\t\tif(def[key]){\r\n\t\t\t\tthis.subscriptionChanged(key, true);\r\n\r\n\t\t\t\tif(!this.columnSubscribers[key]){\r\n\t\t\t\t\tthis.columnSubscribers[key] = [];\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.columnSubscribers[key].push(column);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\thandle(action, e, component){\r\n\t\tthis.dispatchEvent(action, e, component);\r\n\t}\r\n\r\n\thandleTouch(type, action, e, component){\r\n\t\tvar watchers = this.touchWatchers[type];\r\n\r\n\t\tif(type === \"column\"){\r\n\t\t\ttype = \"header\";\r\n\t\t}\r\n\r\n\t\tswitch(action){\r\n\t\t\tcase \"start\":\r\n\t\t\twatchers.tap = true;\r\n\r\n\t\t\tclearTimeout(watchers.tapHold);\r\n\r\n\t\t\twatchers.tapHold = setTimeout(() => {\r\n\t\t\t\tclearTimeout(watchers.tapHold);\r\n\t\t\t\twatchers.tapHold = null;\r\n\r\n\t\t\t\twatchers.tap = null;\r\n\t\t\t\tclearTimeout(watchers.tapDbl);\r\n\t\t\t\twatchers.tapDbl = null;\r\n\r\n\t\t\t\tthis.dispatchEvent(type + \"TapHold\", e, component);\r\n\t\t\t}, 1000);\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"end\":\r\n\t\t\tif(watchers.tap){\r\n\r\n\t\t\t\twatchers.tap = null;\r\n\t\t\t\tthis.dispatchEvent(type + \"Tap\", e, component);\r\n\t\t\t}\r\n\r\n\t\t\tif(watchers.tapDbl){\r\n\t\t\t\tclearTimeout(watchers.tapDbl);\r\n\t\t\t\twatchers.tapDbl = null;\r\n\r\n\t\t\t\tthis.dispatchEvent(type + \"DblTap\", e, component);\r\n\t\t\t}else{\r\n\t\t\t\twatchers.tapDbl = setTimeout(() => {\r\n\t\t\t\t\tclearTimeout(watchers.tapDbl);\r\n\t\t\t\t\twatchers.tapDbl = null;\r\n\t\t\t\t}, 300);\r\n\t\t\t}\r\n\r\n\t\t\tclearTimeout(watchers.tapHold);\r\n\t\t\twatchers.tapHold = null;\r\n\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\tdispatchEvent(action, e, component){\r\n\t\tvar componentObj = component.getComponent(),\r\n\t\tcallback;\r\n\r\n\t\tif(this.columnSubscribers[action]){\r\n\r\n\t\t\tif(component instanceof Cell){\r\n\t\t\t\tcallback = component.column.definition[action];\r\n\t\t\t}else if(component instanceof Column){\r\n\t\t\t\tcallback = component.definition[action];\r\n\t\t\t}\r\n\r\n\t\t\tif(callback){\r\n\t\t\t\tcallback(e, componentObj);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.dispatchExternal(action, e, componentObj);\r\n\t}\r\n}\r\n\r\nInteraction.moduleName = \"interaction\";\r\n\r\nexport default Interaction;","export default {\r\n\tnavPrev:\"shift + 9\",\r\n\tnavNext:9,\r\n\tnavUp:38,\r\n\tnavDown:40,\r\n\tscrollPageUp:33,\r\n\tscrollPageDown:34,\r\n\tscrollToStart:36,\r\n\tscrollToEnd:35,\r\n\tundo:\"ctrl + 90\",\r\n\tredo:\"ctrl + 89\",\r\n\tcopyToClipboard:\"ctrl + 67\",\r\n};","export default {\r\n\tkeyBlock:function(e){\r\n\t\te.stopPropagation();\r\n\t\te.preventDefault();\r\n\t},\r\n\tscrollPageUp:function(e){\r\n\t\tvar rowManager = this.table.rowManager,\r\n\t\tnewPos = rowManager.scrollTop - rowManager.element.clientHeight,\r\n\t\tscrollMax = rowManager.element.scrollHeight;\r\n\r\n\t\te.preventDefault();\r\n\r\n\t\tif(rowManager.displayRowsCount){\r\n\t\t\tif(newPos >= 0){\r\n\t\t\t\trowManager.element.scrollTop = newPos;\r\n\t\t\t}else{\r\n\t\t\t\trowManager.scrollToRow(rowManager.getDisplayRows()[0]);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.table.element.focus();\r\n\t},\r\n\tscrollPageDown:function(e){\r\n\t\tvar rowManager = this.table.rowManager,\r\n\t\tnewPos = rowManager.scrollTop + rowManager.element.clientHeight,\r\n\t\tscrollMax = rowManager.element.scrollHeight;\r\n\r\n\t\te.preventDefault();\r\n\r\n\t\tif(rowManager.displayRowsCount){\r\n\t\t\tif(newPos <= scrollMax){\r\n\t\t\t\trowManager.element.scrollTop = newPos;\r\n\t\t\t}else{\r\n\t\t\t\trowManager.scrollToRow(rowManager.getDisplayRows()[rowManager.displayRowsCount - 1]);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.table.element.focus();\r\n\r\n\t},\r\n\tscrollToStart:function(e){\r\n\t\tvar rowManager = this.table.rowManager;\r\n\r\n\t\te.preventDefault();\r\n\r\n\t\tif(rowManager.displayRowsCount){\r\n\t\t\trowManager.scrollToRow(rowManager.getDisplayRows()[0]);\r\n\t\t}\r\n\r\n\t\tthis.table.element.focus();\r\n\t},\r\n\tscrollToEnd:function(e){\r\n\t\tvar rowManager = this.table.rowManager;\r\n\r\n\t\te.preventDefault();\r\n\r\n\t\tif(rowManager.displayRowsCount){\r\n\t\t\trowManager.scrollToRow(rowManager.getDisplayRows()[rowManager.displayRowsCount - 1]);\r\n\t\t}\r\n\r\n\t\tthis.table.element.focus();\r\n\t},\r\n\tnavPrev:function(e){\r\n\t\tthis.dispatch(\"keybinding-nav-prev\", e);\r\n\t},\r\n\r\n\tnavNext:function(e){\r\n\t\tthis.dispatch(\"keybinding-nav-next\", e);\r\n\t},\r\n\r\n\tnavLeft:function(e){\r\n\t\tthis.dispatch(\"keybinding-nav-left\", e);\r\n\t},\r\n\r\n\tnavRight:function(e){\r\n\t\tthis.dispatch(\"keybinding-nav-right\", e);\r\n\t},\r\n\r\n\tnavUp:function(e){\r\n\t\tthis.dispatch(\"keybinding-nav-up\", e);\r\n\t},\r\n\r\n\tnavDown:function(e){\r\n\t\tthis.dispatch(\"keybinding-nav-down\", e);\r\n\t},\r\n\r\n\tundo:function(e){\r\n\t\tvar cell = false;\r\n\t\tif(this.table.options.history && this.table.modExists(\"history\") && this.table.modExists(\"edit\")){\r\n\r\n\t\t\tcell = this.table.modules.edit.currentCell;\r\n\r\n\t\t\tif(!cell){\r\n\t\t\t\te.preventDefault();\r\n\t\t\t\tthis.table.modules.history.undo();\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\tredo:function(e){\r\n\t\tvar cell = false;\r\n\t\tif(this.table.options.history && this.table.modExists(\"history\") && this.table.modExists(\"edit\")){\r\n\r\n\t\t\tcell = this.table.modules.edit.currentCell;\r\n\r\n\t\t\tif(!cell){\r\n\t\t\t\te.preventDefault();\r\n\t\t\t\tthis.table.modules.history.redo();\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\tcopyToClipboard:function(e){\r\n\t\tif(!this.table.modules.edit.currentCell){\r\n\t\t\tif(this.table.modExists(\"clipboard\", true)){\r\n\t\t\t\tthis.table.modules.clipboard.copy(false, true);\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n};","import Module from '../../core/Module.js';\r\n\r\nimport defaultBindings from './defaults/bindings.js';\r\nimport defaultActions from './defaults/actions.js';\r\n\r\nclass Keybindings extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.watchKeys = null;\r\n\t\tthis.pressedKeys = null;\r\n\t\tthis.keyupBinding = false;\r\n\t\tthis.keydownBinding = false;\r\n\r\n\t\tthis.registerTableOption(\"keybindings\", []); //array for keybindings\r\n\t\tthis.registerTableOption(\"tabEndNewRow\", false); //create new row when tab to end of table\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tvar bindings = this.table.options.keybindings,\r\n\t\tmergedBindings = {};\r\n\r\n\t\tthis.watchKeys = {};\r\n\t\tthis.pressedKeys = [];\r\n\r\n\t\tif(bindings !== false){\r\n\r\n\t\t\tfor(let key in Keybindings.bindings){\r\n\t\t\t\tmergedBindings[key] = Keybindings.bindings[key];\r\n\t\t\t}\r\n\r\n\t\t\tif(Object.keys(bindings).length){\r\n\r\n\t\t\t\tfor(let key in bindings){\r\n\t\t\t\t\tmergedBindings[key] = bindings[key];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tthis.mapBindings(mergedBindings);\r\n\t\t\tthis.bindEvents();\r\n\t\t}\r\n\r\n\t\tthis.subscribe(\"table-destroy\", this.clearBindings.bind(this));\r\n\t}\r\n\r\n\tmapBindings(bindings){\r\n\t\tfor(let key in bindings){\r\n\t\t\tif(Keybindings.actions[key]){\r\n\t\t\t\tif(bindings[key]){\r\n\t\t\t\t\tif(typeof bindings[key] !== \"object\"){\r\n\t\t\t\t\t\tbindings[key] = [bindings[key]];\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tbindings[key].forEach((binding) => {\r\n\t\t\t\t\t\tthis.mapBinding(key, binding);\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Key Binding Error - no such action:\", key);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tmapBinding(action, symbolsList){\r\n\t\tvar binding = {\r\n\t\t\taction: Keybindings.actions[action],\r\n\t\t\tkeys: [],\r\n\t\t\tctrl: false,\r\n\t\t\tshift: false,\r\n\t\t\tmeta: false,\r\n\t\t};\r\n\r\n\t\tvar symbols = symbolsList.toString().toLowerCase().split(\" \").join(\"\").split(\"+\");\r\n\r\n\t\tsymbols.forEach((symbol) => {\r\n\t\t\tswitch(symbol){\r\n\t\t\t\tcase \"ctrl\":\r\n\t\t\t\tbinding.ctrl = true;\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"shift\":\r\n\t\t\t\tbinding.shift = true;\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"meta\":\r\n\t\t\t\tbinding.meta = true;\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tdefault:\r\n\t\t\t\tsymbol = parseInt(symbol);\r\n\t\t\t\tbinding.keys.push(symbol);\r\n\r\n\t\t\t\tif(!this.watchKeys[symbol]){\r\n\t\t\t\t\tthis.watchKeys[symbol] = [];\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.watchKeys[symbol].push(binding);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tbindEvents(){\r\n\t\tvar self = this;\r\n\r\n\t\tthis.keyupBinding = function(e){\r\n\t\t\tvar code = e.keyCode;\r\n\t\t\tvar bindings = self.watchKeys[code];\r\n\r\n\t\t\tif(bindings){\r\n\r\n\t\t\t\tself.pressedKeys.push(code);\r\n\r\n\t\t\t\tbindings.forEach(function(binding){\r\n\t\t\t\t\tself.checkBinding(e, binding);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tthis.keydownBinding = function(e){\r\n\t\t\tvar code = e.keyCode;\r\n\t\t\tvar bindings = self.watchKeys[code];\r\n\r\n\t\t\tif(bindings){\r\n\r\n\t\t\t\tvar index = self.pressedKeys.indexOf(code);\r\n\r\n\t\t\t\tif(index > -1){\r\n\t\t\t\t\tself.pressedKeys.splice(index, 1);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tthis.table.element.addEventListener(\"keydown\", this.keyupBinding);\r\n\r\n\t\tthis.table.element.addEventListener(\"keyup\", this.keydownBinding);\r\n\t}\r\n\r\n\tclearBindings(){\r\n\t\tif(this.keyupBinding){\r\n\t\t\tthis.table.element.removeEventListener(\"keydown\", this.keyupBinding);\r\n\t\t}\r\n\r\n\t\tif(this.keydownBinding){\r\n\t\t\tthis.table.element.removeEventListener(\"keyup\", this.keydownBinding);\r\n\t\t}\r\n\t}\r\n\r\n\tcheckBinding(e, binding){\r\n\t\tvar match = true;\r\n\r\n\t\tif(e.ctrlKey == binding.ctrl && e.shiftKey == binding.shift && e.metaKey == binding.meta){\r\n\t\t\tbinding.keys.forEach((key) => {\r\n\t\t\t\tvar index = this.pressedKeys.indexOf(key);\r\n\r\n\t\t\t\tif(index == -1){\r\n\t\t\t\t\tmatch = false;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tif(match){\r\n\t\t\t\tbinding.action.call(this, e);\r\n\t\t\t}\r\n\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t}\r\n}\r\n\r\nKeybindings.moduleName = \"keybindings\";\r\n\r\n//load defaults\r\nKeybindings.bindings = defaultBindings;\r\nKeybindings.actions = defaultActions;\r\n\r\nexport default Keybindings;","import Module from '../../core/Module.js';\r\nimport Helpers from '../../core/tools/Helpers.js';\r\n\r\nclass Menu extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.menuElements = [];\r\n\t\tthis.blurEvent = this.hideMenu.bind(this);\r\n\t\tthis.escEvent = this.escMenu.bind(this);\r\n\t\tthis.nestedMenuBlock = false;\r\n\t\tthis.positionReversedX = false;\r\n\r\n\t\tthis.registerTableOption(\"rowContextMenu\", false);\r\n\t\tthis.registerTableOption(\"rowClickMenu\", false);\r\n\t\tthis.registerTableOption(\"groupContextMenu\", false);\r\n\t\tthis.registerTableOption(\"groupClickMenu\", false);\r\n\r\n\t\tthis.registerColumnOption(\"headerContextMenu\");\r\n\t\tthis.registerColumnOption(\"headerMenu\");\r\n\t\tthis.registerColumnOption(\"contextMenu\");\r\n\t\tthis.registerColumnOption(\"clickMenu\");\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tthis.subscribe(\"cell-layout\", this.layoutCell.bind(this));\r\n\t\tthis.subscribe(\"column-init\", this.initializeColumn.bind(this));\r\n\t\tthis.subscribe(\"row-init\", this.initializeRow.bind(this));\r\n\t}\r\n\r\n\tlayoutCell(cell){\r\n\t\tif(cell.column.definition.contextMenu || cell.column.definition.clickMenu){\r\n\t\t\tthis.initializeCell(cell);\r\n\t\t}\r\n\t}\r\n\r\n\tinitializeColumn(column){\r\n\t\tvar def = column.definition;\r\n\r\n\t\tif(def.headerContextMenu || def.headerClickMenu || def.headerMenu){\r\n\t\t\tthis.initializeColumnHeader(this);\r\n\t\t}\r\n\t}\r\n\r\n\tinitializeColumnHeader(column){\r\n\t\tvar headerMenuEl;\r\n\r\n\t\tif(column.definition.headerContextMenu){\r\n\t\t\tcolumn.getElement().addEventListener(\"contextmenu\", this.LoadMenuEvent.bind(this, column, column.definition.headerContextMenu));\r\n\t\t\tthis.tapHold(column, column.definition.headerContextMenu);\r\n\t\t}\r\n\r\n\t\t// if(column.definition.headerClickMenu){\r\n\t\t// \tcolumn.getElement().addEventListener(\"click\", this.LoadMenuEvent.bind(this, column, column.definition.headerClickMenu));\r\n\t\t// }\r\n\r\n\t\tif(column.definition.headerMenu){\r\n\r\n\t\t\theaderMenuEl = document.createElement(\"span\");\r\n\t\t\theaderMenuEl.classList.add(\"tabulator-header-menu-button\");\r\n\t\t\theaderMenuEl.innerHTML = \"⋮\";\r\n\r\n\t\t\theaderMenuEl.addEventListener(\"click\", (e) => {\r\n\t\t\t\te.stopPropagation();\r\n\t\t\t\te.preventDefault();\r\n\r\n\t\t\t\tthis.LoadMenuEvent(column, column.definition.headerMenu, e);\r\n\t\t\t});\r\n\r\n\t\t\tcolumn.titleElement.insertBefore(headerMenuEl, column.titleElement.firstChild);\r\n\t\t}\r\n\t}\r\n\r\n\tLoadMenuEvent(component, menu, e){\r\n\t\tmenu = typeof menu == \"function\" ? menu.call(this.table, component.getComponent(), e) : menu;\r\n\r\n\t\t// if(component instanceof Cell){\r\n\t\t// \te.stopImmediatePropagation();\r\n\t\t// }\r\n\r\n\t\tthis.loadMenu(e, component, menu);\r\n\t}\r\n\r\n\ttapHold(component, menu){\r\n\t\tvar element = component.getElement(),\r\n\t\ttapHold = null,\r\n\t\tloaded = false;\r\n\r\n\t\telement.addEventListener(\"touchstart\", (e) => {\r\n\t\t\tclearTimeout(tapHold);\r\n\t\t\tloaded = false;\r\n\r\n\t\t\ttapHold = setTimeout(() => {\r\n\t\t\t\tclearTimeout(tapHold);\r\n\t\t\t\ttapHold = null;\r\n\t\t\t\tloaded = true;\r\n\r\n\t\t\t\tthis.LoadMenuEvent(component, menu, e);\r\n\t\t\t}, 1000);\r\n\r\n\t\t}, {passive: true});\r\n\r\n\t\telement.addEventListener(\"touchend\", (e) => {\r\n\t\t\tclearTimeout(tapHold);\r\n\t\t\ttapHold = null;\r\n\r\n\t\t\tif(loaded){\r\n\t\t\t\te.preventDefault();\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tinitializeCell(cell){\r\n\t\tif(cell.column.definition.contextMenu){\r\n\t\t\tcell.getElement(true).addEventListener(\"contextmenu\", this.LoadMenuEvent.bind(this, cell, cell.column.definition.contextMenu));\r\n\t\t\tthis.tapHold(cell, cell.column.definition.contextMenu);\r\n\t\t}\r\n\r\n\t\tif(cell.column.definition.clickMenu){\r\n\t\t\tcell.getElement(true).addEventListener(\"click\", this.LoadMenuEvent.bind(this, cell, cell.column.definition.clickMenu));\r\n\t\t}\r\n\t}\r\n\r\n\tinitializeRow(row){\r\n\t\tif(this.table.options.rowContextMenu){\r\n\t\t\trow.getElement().addEventListener(\"contextmenu\", this.LoadMenuEvent.bind(this, row, this.table.options.rowContextMenu));\r\n\t\t\tthis.tapHold(row, this.table.options.rowContextMenu);\r\n\t\t}\r\n\r\n\t\tif(this.table.options.rowClickMenu){\r\n\t\t\trow.getElement().addEventListener(\"click\", this.LoadMenuEvent.bind(this, row, this.table.options.rowClickMenu));\r\n\t\t}\r\n\t}\r\n\r\n\tinitializeGroup (group){\r\n\t\tif(this.table.options.groupContextMenu){\r\n\t\t\tgroup.getElement().addEventListener(\"contextmenu\", this.LoadMenuEvent.bind(this, group, this.table.options.groupContextMenu));\r\n\t\t\tthis.tapHold(group, this.table.options.groupContextMenu);\r\n\t\t}\r\n\r\n\t\tif(this.table.options.groupClickMenu){\r\n\t\t\tgroup.getElement().addEventListener(\"click\", this.LoadMenuEvent.bind(this, group, this.table.options.groupClickMenu));\r\n\t\t}\r\n\t}\r\n\r\n\tloadMenu(e, component, menu, parentEl){\r\n\r\n\t\tvar touch = !(e instanceof MouseEvent);\r\n\r\n\t\tvar menuEl = document.createElement(\"div\");\r\n\t\tmenuEl.classList.add(\"tabulator-menu\");\r\n\r\n\t\tif(!touch){\r\n\t\t\te.preventDefault();\r\n\t\t}\r\n\r\n\t\t//abort if no menu set\r\n\t\tif(!menu || !menu.length){\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif(!parentEl){\r\n\t\t\tif(this.nestedMenuBlock){\r\n\t\t\t\t//abort if child menu already open\r\n\t\t\t\tif(this.isOpen()){\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tthis.nestedMenuBlock = setTimeout(() => {\r\n\t\t\t\t\tthis.nestedMenuBlock = false;\r\n\t\t\t\t}, 100)\r\n\t\t\t}\r\n\r\n\t\t\tthis.hideMenu();\r\n\t\t\tthis.menuElements = [];\r\n\t\t}\r\n\r\n\t\tmenu.forEach((item) => {\r\n\t\t\tvar itemEl = document.createElement(\"div\"),\r\n\t\t\tlabel = item.label,\r\n\t\t\tdisabled = item.disabled;\r\n\r\n\t\t\tif(item.separator){\r\n\t\t\t\titemEl.classList.add(\"tabulator-menu-separator\");\r\n\t\t\t}else{\r\n\t\t\t\titemEl.classList.add(\"tabulator-menu-item\");\r\n\r\n\t\t\t\tif(typeof label == \"function\"){\r\n\t\t\t\t\tlabel = label.call(this.table, component.getComponent());\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(label instanceof Node){\r\n\t\t\t\t\titemEl.appendChild(label);\r\n\t\t\t\t}else{\r\n\t\t\t\t\titemEl.innerHTML = label;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(typeof disabled == \"function\"){\r\n\t\t\t\t\tdisabled = disabled.call(this.table, component.getComponent());\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(disabled){\r\n\t\t\t\t\titemEl.classList.add(\"tabulator-menu-item-disabled\");\r\n\t\t\t\t\titemEl.addEventListener(\"click\", (e) => {\r\n\t\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\t});\r\n\t\t\t\t}else{\r\n\t\t\t\t\tif(item.menu && item.menu.length){\r\n\t\t\t\t\t\titemEl.addEventListener(\"click\", (e) => {\r\n\t\t\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\t\t\tthis.hideOldSubMenus(menuEl);\r\n\t\t\t\t\t\t\tthis.loadMenu(e, component, item.menu, itemEl);\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tif(item.action){\r\n\t\t\t\t\t\t\titemEl.addEventListener(\"click\", (e) => {\r\n\t\t\t\t\t\t\t\titem.action(e, component.getComponent());\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(item.menu && item.menu.length){\r\n\t\t\t\t\titemEl.classList.add(\"tabulator-menu-item-submenu\");\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tmenuEl.appendChild(itemEl);\r\n\t\t});\r\n\r\n\t\tmenuEl.addEventListener(\"click\", (e) => {\r\n\t\t\tthis.hideMenu();\r\n\t\t});\r\n\r\n\t\tthis.menuElements.push(menuEl);\r\n\t\tthis.positionMenu(menuEl, parentEl, touch, e);\r\n\t}\r\n\r\n\thideOldSubMenus(menuEl){\r\n\t\tvar index = this.menuElements.indexOf(menuEl);\r\n\r\n\t\tif(index > -1){\r\n\t\t\tfor(let i = this.menuElements.length - 1; i > index; i--){\r\n\t\t\t\tvar el = this.menuElements[i];\r\n\r\n\t\t\t\tif(el.parentNode){\r\n\t\t\t\t\tel.parentNode.removeChild(el);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.menuElements.pop();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tpositionMenu(element, parentEl, touch, e){\r\n\t\tvar docHeight = Math.max(document.body.offsetHeight, window.innerHeight),\r\n\t\tx, y, parentOffset;\r\n\r\n\t\tif(!parentEl){\r\n\t\t\tx = touch ? e.touches[0].pageX : e.pageX;\r\n\t\t\ty = touch ? e.touches[0].pageY : e.pageY;\r\n\r\n\t\t\tthis.positionReversedX = false;\r\n\t\t}else{\r\n\t\t\tparentOffset = Helpers.elOffset(parentEl);\r\n\t\t\tx = parentOffset.left + parentEl.offsetWidth;\r\n\t\t\ty = parentOffset.top - 1;\r\n\t\t}\r\n\r\n\t\telement.style.top = y + \"px\";\r\n\t\telement.style.left = x + \"px\";\r\n\r\n\t\tsetTimeout(() => {\r\n\t\t\tthis.table.rowManager.element.addEventListener(\"scroll\", this.blurEvent);\r\n\t\t\tdocument.body.addEventListener(\"click\", this.blurEvent);\r\n\t\t\tdocument.body.addEventListener(\"contextmenu\", this.blurEvent);\r\n\t\t\twindow.addEventListener(\"resize\", this.blurEvent);\r\n\t\t\tdocument.body.addEventListener(\"keydown\", this.escEvent);\r\n\t\t}, 100);\r\n\r\n\t\tdocument.body.appendChild(element);\r\n\r\n\t\t//move menu to start on bottom edge if it is too close to the edge of the screen\r\n\t\tif((y + element.offsetHeight) >= docHeight){\r\n\t\t\telement.style.top = \"\";\r\n\r\n\t\t\tif(parentEl){\r\n\t\t\t\telement.style.bottom = (docHeight - parentOffset.top - parentEl.offsetHeight - 1) + \"px\";\r\n\t\t\t}else{\r\n\t\t\t\telement.style.bottom = (docHeight - y) + \"px\";\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//move menu to start on right edge if it is too close to the edge of the screen\r\n\t\tif((x + element.offsetWidth) >= document.body.offsetWidth || this.positionReversedX){\r\n\t\t\telement.style.left = \"\";\r\n\r\n\t\t\tif(parentEl){\r\n\t\t\t\telement.style.right = (document.documentElement.offsetWidth - parentOffset.left) + \"px\";\r\n\t\t\t}else{\r\n\t\t\t\telement.style.right = (document.documentElement.offsetWidth - x) + \"px\";\r\n\t\t\t}\r\n\r\n\t\t\tthis.positionReversedX = true;\r\n\t\t}\r\n\t}\r\n\r\n\tisOpen(){\r\n\t\treturn !!this.menuElements.length;\r\n\t}\r\n\r\n\tescMenu(e){\r\n\t\tif(e.keyCode == 27){\r\n\t\t\tthis.hideMenu();\r\n\t\t}\r\n\t}\r\n\r\n\thideMenu(){\r\n\t\tthis.menuElements.forEach((menuEl) => {\r\n\t\t\tif(menuEl.parentNode){\r\n\t\t\t\tmenuEl.parentNode.removeChild(menuEl);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tdocument.body.removeEventListener(\"keydown\", this.escEvent);\r\n\t\tdocument.body.removeEventListener(\"click\", this.blurEvent);\r\n\t\tdocument.body.removeEventListener(\"contextmenu\", this.blurEvent);\r\n\t\twindow.removeEventListener(\"resize\", this.blurEvent);\r\n\t\tthis.table.rowManager.element.removeEventListener(\"scroll\", this.blurEvent);\r\n\t}\r\n}\r\n\r\nMenu.moduleName = \"menu\";\r\n\r\nexport default Menu;","import Module from '../../core/Module.js';\r\nimport Helpers from '../../core/tools/Helpers.js';\r\n\r\nclass MoveColumns extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.placeholderElement = this.createPlaceholderElement();\r\n\t\tthis.hoverElement = false; //floating column header element\r\n\t\tthis.checkTimeout = false; //click check timeout holder\r\n\t\tthis.checkPeriod = 250; //period to wait on mousedown to consider this a move and not a click\r\n\t\tthis.moving = false; //currently moving column\r\n\t\tthis.toCol = false; //destination column\r\n\t\tthis.toColAfter = false; //position of moving column relative to the desitnation column\r\n\t\tthis.startX = 0; //starting position within header element\r\n\t\tthis.autoScrollMargin = 40; //auto scroll on edge when within margin\r\n\t\tthis.autoScrollStep = 5; //auto scroll distance in pixels\r\n\t\tthis.autoScrollTimeout = false; //auto scroll timeout\r\n\t\tthis.touchMove = false;\r\n\r\n\t\tthis.moveHover = this.moveHover.bind(this);\r\n\t\tthis.endMove = this.endMove.bind(this);\r\n\r\n\t\tthis.registerTableOption(\"movableColumns\", false); //enable movable columns\r\n\t}\r\n\r\n\tcreatePlaceholderElement(){\r\n\t\tvar el = document.createElement(\"div\");\r\n\r\n\t\tel.classList.add(\"tabulator-col\");\r\n\t\tel.classList.add(\"tabulator-col-placeholder\");\r\n\r\n\t\treturn el;\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tthis.subscribe(\"column-init\", this.initializeColumn.bind(this));\r\n\t}\r\n\r\n\tinitializeColumn(column){\r\n\t\tvar self = this,\r\n\t\tconfig = {},\r\n\t\tcolEl;\r\n\r\n\t\tif(!column.modules.frozen){\r\n\r\n\t\t\tcolEl = column.getElement();\r\n\r\n\t\t\tconfig.mousemove = function(e){\r\n\t\t\t\tif(column.parent === self.moving.parent){\r\n\t\t\t\t\tif((((self.touchMove ? e.touches[0].pageX : e.pageX) - Helpers.elOffset(colEl).left) + self.table.columnManager.element.scrollLeft) > (column.getWidth() / 2)){\r\n\t\t\t\t\t\tif(self.toCol !== column || !self.toColAfter){\r\n\t\t\t\t\t\t\tcolEl.parentNode.insertBefore(self.placeholderElement, colEl.nextSibling);\r\n\t\t\t\t\t\t\tself.moveColumn(column, true);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tif(self.toCol !== column || self.toColAfter){\r\n\t\t\t\t\t\t\tcolEl.parentNode.insertBefore(self.placeholderElement, colEl);\r\n\t\t\t\t\t\t\tself.moveColumn(column, false);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}.bind(self);\r\n\r\n\t\t\tcolEl.addEventListener(\"mousedown\", function(e){\r\n\t\t\t\tself.touchMove = false;\r\n\t\t\t\tif(e.which === 1){\r\n\t\t\t\t\tself.checkTimeout = setTimeout(function(){\r\n\t\t\t\t\t\tself.startMove(e, column);\r\n\t\t\t\t\t}, self.checkPeriod);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tcolEl.addEventListener(\"mouseup\", function(e){\r\n\t\t\t\tif(e.which === 1){\r\n\t\t\t\t\tif(self.checkTimeout){\r\n\t\t\t\t\t\tclearTimeout(self.checkTimeout);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tself.bindTouchEvents(column);\r\n\t\t}\r\n\r\n\t\tcolumn.modules.moveColumn = config;\r\n\t}\r\n\r\n\tbindTouchEvents(column){\r\n\t\tvar colEl = column.getElement(),\r\n\t\tstartXMove = false, //shifting center position of the cell\r\n\t\tdir = false,\r\n\t\tcurrentCol, nextCol, prevCol, nextColWidth, prevColWidth, nextColWidthLast, prevColWidthLast;\r\n\r\n\t\tcolEl.addEventListener(\"touchstart\", (e) => {\r\n\t\t\tthis.checkTimeout = setTimeout(() => {\r\n\t\t\t\tthis.touchMove = true;\r\n\t\t\t\tcurrentCol = column;\r\n\t\t\t\tnextCol = column.nextColumn();\r\n\t\t\t\tnextColWidth = nextCol ? nextCol.getWidth()/2 : 0;\r\n\t\t\t\tprevCol = column.prevColumn();\r\n\t\t\t\tprevColWidth = prevCol ? prevCol.getWidth()/2 : 0;\r\n\t\t\t\tnextColWidthLast = 0;\r\n\t\t\t\tprevColWidthLast = 0;\r\n\t\t\t\tstartXMove = false;\r\n\r\n\t\t\t\tthis.startMove(e, column);\r\n\t\t\t}, this.checkPeriod);\r\n\t\t}, {passive: true});\r\n\r\n\t\tcolEl.addEventListener(\"touchmove\", (e) => {\r\n\t\t\tvar halfCol, diff, moveToCol;\r\n\r\n\t\t\tif(this.moving){\r\n\t\t\t\tthis.moveHover(e);\r\n\r\n\t\t\t\tif(!startXMove){\r\n\t\t\t\t\tstartXMove = e.touches[0].pageX;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tdiff = e.touches[0].pageX - startXMove;\r\n\r\n\t\t\t\tif(diff > 0){\r\n\t\t\t\t\tif(nextCol && diff - nextColWidthLast > nextColWidth){\r\n\t\t\t\t\t\tmoveToCol = nextCol;\r\n\r\n\t\t\t\t\t\tif(moveToCol !== column){\r\n\t\t\t\t\t\t\tstartXMove = e.touches[0].pageX;\r\n\t\t\t\t\t\t\tmoveToCol.getElement().parentNode.insertBefore(this.placeholderElement, moveToCol.getElement().nextSibling);\r\n\t\t\t\t\t\t\tthis.moveColumn(moveToCol, true);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}else{\r\n\t\t\t\t\tif(prevCol && -diff - prevColWidthLast > prevColWidth){\r\n\t\t\t\t\t\tmoveToCol = prevCol;\r\n\r\n\t\t\t\t\t\tif(moveToCol !== column){\r\n\t\t\t\t\t\t\tstartXMove = e.touches[0].pageX;\r\n\t\t\t\t\t\t\tmoveToCol.getElement().parentNode.insertBefore(this.placeholderElement, moveToCol.getElement());\r\n\t\t\t\t\t\t\tthis.moveColumn(moveToCol, false);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(moveToCol){\r\n\t\t\t\t\tcurrentCol = moveToCol;\r\n\t\t\t\t\tnextCol = moveToCol.nextColumn();\r\n\t\t\t\t\tnextColWidthLast = nextColWidth;\r\n\t\t\t\t\tnextColWidth = nextCol ? nextCol.getWidth() / 2 : 0;\r\n\t\t\t\t\tprevCol = moveToCol.prevColumn();\r\n\t\t\t\t\tprevColWidthLast = prevColWidth;\r\n\t\t\t\t\tprevColWidth = prevCol ? prevCol.getWidth() / 2 : 0;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}, {passive: true});\r\n\r\n\t\tcolEl.addEventListener(\"touchend\", (e) => {\r\n\t\t\tif(this.checkTimeout){\r\n\t\t\t\tclearTimeout(this.checkTimeout);\r\n\t\t\t}\r\n\t\t\tif(this.moving){\r\n\t\t\t\tthis.endMove(e);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tstartMove(e, column){\r\n\t\tvar element = column.getElement();\r\n\r\n\t\tthis.moving = column;\r\n\t\tthis.startX = (this.touchMove ? e.touches[0].pageX : e.pageX) - Helpers.elOffset(element).left;\r\n\r\n\t\tthis.table.element.classList.add(\"tabulator-block-select\");\r\n\r\n\t\t//create placeholder\r\n\t\tthis.placeholderElement.style.width = column.getWidth() + \"px\";\r\n\t\tthis.placeholderElement.style.height = column.getHeight() + \"px\";\r\n\r\n\t\telement.parentNode.insertBefore(this.placeholderElement, element);\r\n\t\telement.parentNode.removeChild(element);\r\n\r\n\t\t//create hover element\r\n\t\tthis.hoverElement = element.cloneNode(true);\r\n\t\tthis.hoverElement.classList.add(\"tabulator-moving\");\r\n\r\n\t\tthis.table.columnManager.getElement().appendChild(this.hoverElement);\r\n\r\n\t\tthis.hoverElement.style.left = \"0\";\r\n\t\tthis.hoverElement.style.bottom = \"0\";\r\n\r\n\t\tif(!this.touchMove){\r\n\t\t\tthis._bindMouseMove();\r\n\r\n\t\t\tdocument.body.addEventListener(\"mousemove\", this.moveHover);\r\n\t\t\tdocument.body.addEventListener(\"mouseup\", this.endMove);\r\n\t\t}\r\n\r\n\t\tthis.moveHover(e);\r\n\t}\r\n\r\n\t_bindMouseMove(){\r\n\t\tthis.table.columnManager.columnsByIndex.forEach(function(column){\r\n\t\t\tif(column.modules.moveColumn.mousemove){\r\n\t\t\t\tcolumn.getElement().addEventListener(\"mousemove\", column.modules.moveColumn.mousemove);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t_unbindMouseMove(){\r\n\t\tthis.table.columnManager.columnsByIndex.forEach(function(column){\r\n\t\t\tif(column.modules.moveColumn.mousemove){\r\n\t\t\t\tcolumn.getElement().removeEventListener(\"mousemove\", column.modules.moveColumn.mousemove);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tmoveColumn(column, after){\r\n\t\tvar movingCells = this.moving.getCells();\r\n\r\n\t\tthis.toCol = column;\r\n\t\tthis.toColAfter = after;\r\n\r\n\t\tif(after){\r\n\t\t\tcolumn.getCells().forEach(function(cell, i){\r\n\t\t\t\tvar cellEl = cell.getElement(true);\r\n\t\t\t\tcellEl.parentNode.insertBefore(movingCells[i].getElement(), cellEl.nextSibling);\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tcolumn.getCells().forEach(function(cell, i){\r\n\t\t\t\tvar cellEl = cell.getElement(true);\r\n\t\t\t\tcellEl.parentNode.insertBefore(movingCells[i].getElement(), cellEl);\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tendMove(e){\r\n\t\tif(e.which === 1 || this.touchMove){\r\n\t\t\tthis._unbindMouseMove();\r\n\r\n\t\t\tthis.placeholderElement.parentNode.insertBefore(this.moving.getElement(), this.placeholderElement.nextSibling);\r\n\t\t\tthis.placeholderElement.parentNode.removeChild(this.placeholderElement);\r\n\t\t\tthis.hoverElement.parentNode.removeChild(this.hoverElement);\r\n\r\n\t\t\tthis.table.element.classList.remove(\"tabulator-block-select\");\r\n\r\n\t\t\tif(this.toCol){\r\n\t\t\t\tthis.table.columnManager.moveColumnActual(this.moving, this.toCol, this.toColAfter);\r\n\t\t\t}\r\n\r\n\t\t\tthis.moving = false;\r\n\t\t\tthis.toCol = false;\r\n\t\t\tthis.toColAfter = false;\r\n\r\n\t\t\tif(!this.touchMove){\r\n\t\t\t\tdocument.body.removeEventListener(\"mousemove\", this.moveHover);\r\n\t\t\t\tdocument.body.removeEventListener(\"mouseup\", this.endMove);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tmoveHover(e){\r\n\t\tvar columnHolder = this.table.columnManager.getElement(),\r\n\t\tscrollLeft = columnHolder.scrollLeft,\r\n\t\txPos = ((this.touchMove ? e.touches[0].pageX : e.pageX) - Helpers.elOffset(columnHolder).left) + scrollLeft,\r\n\t\tscrollPos;\r\n\r\n\t\tthis.hoverElement.style.left = (xPos - this.startX) + \"px\";\r\n\r\n\t\tif(xPos - scrollLeft < this.autoScrollMargin){\r\n\t\t\tif(!this.autoScrollTimeout){\r\n\t\t\t\tthis.autoScrollTimeout = setTimeout(() => {\r\n\t\t\t\t\tscrollPos = Math.max(0,scrollLeft-5);\r\n\t\t\t\t\tthis.table.rowManager.getElement().scrollLeft = scrollPos;\r\n\t\t\t\t\tthis.autoScrollTimeout = false;\r\n\t\t\t\t}, 1);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(scrollLeft + columnHolder.clientWidth - xPos < this.autoScrollMargin){\r\n\t\t\tif(!this.autoScrollTimeout){\r\n\t\t\t\tthis.autoScrollTimeout = setTimeout(() => {\r\n\t\t\t\t\tscrollPos = Math.min(columnHolder.clientWidth, scrollLeft+5);\r\n\t\t\t\t\tthis.table.rowManager.getElement().scrollLeft = scrollPos;\r\n\t\t\t\t\tthis.autoScrollTimeout = false;\r\n\t\t\t\t}, 1);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n\r\nMoveColumns.moduleName = \"moveColumn\";\r\n\r\nexport default MoveColumns;\r\n","import Module from '../../core/Module.js';\r\nimport Helpers from '../../core/tools/Helpers.js';\r\n\r\nclass MoveRows extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.placeholderElement = this.createPlaceholderElement();\r\n\t\tthis.hoverElement = false; //floating row header element\r\n\t\tthis.checkTimeout = false; //click check timeout holder\r\n\t\tthis.checkPeriod = 150; //period to wait on mousedown to consider this a move and not a click\r\n\t\tthis.moving = false; //currently moving row\r\n\t\tthis.toRow = false; //destination row\r\n\t\tthis.toRowAfter = false; //position of moving row relative to the desitnation row\r\n\t\tthis.hasHandle = false; //row has handle instead of fully movable row\r\n\t\tthis.startY = 0; //starting Y position within header element\r\n\t\tthis.startX = 0; //starting X position within header element\r\n\r\n\t\tthis.moveHover = this.moveHover.bind(this);\r\n\t\tthis.endMove = this.endMove.bind(this);\r\n\t\tthis.tableRowDropEvent = false;\r\n\r\n\t\tthis.touchMove = false;\r\n\r\n\t\tthis.connection = false;\r\n\t\tthis.connectionSelectorsTables = false;\r\n\t\tthis.connectionSelectorsElements = false;\r\n\t\tthis.connectionElements = [];\r\n\t\tthis.connections = [];\r\n\r\n\t\tthis.connectedTable = false;\r\n\t\tthis.connectedRow = false;\r\n\r\n\t\tthis.registerTableOption(\"movableRows\", false); //enable movable rows\r\n\t\tthis.registerTableOption(\"movableRowsConnectedTables\", false); //tables for movable rows to be connected to\r\n\t\tthis.registerTableOption(\"movableRowsConnectedElements\", false); //other elements for movable rows to be connected to\r\n\t\tthis.registerTableOption(\"movableRowsSender\", false);\r\n\t\tthis.registerTableOption(\"movableRowsReceiver\", \"insert\");\r\n\r\n\t\tthis.registerColumnOption(\"rowHandle\");\r\n\t}\r\n\r\n\tcreatePlaceholderElement(){\r\n\t\tvar el = document.createElement(\"div\");\r\n\r\n\t\tel.classList.add(\"tabulator-row\");\r\n\t\tel.classList.add(\"tabulator-row-placeholder\");\r\n\r\n\t\treturn el;\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tif(this.table.options.movableRows){\r\n\t\t\tthis.connectionSelectorsTables = this.table.options.movableRowsConnectedTables;\r\n\t\t\tthis.connectionSelectorsElements = this.table.options.movableRowsConnectedElements;\r\n\r\n\t\t\tthis.connection = this.connectionSelectorsTables || this.connectionSelectorsElements;\r\n\r\n\t\t\tthis.subscribe(\"cell-init\", this.initializeCell.bind(this));\r\n\t\t\tthis.subscribe(\"column-init\", this.initializeColumn.bind(this));\r\n\t\t\tthis.subscribe(\"row-init\", this.initializeRow.bind(this));\r\n\t\t}\r\n\t}\r\n\r\n\tinitializeGroupHeader(group){\r\n\t\tvar self = this,\r\n\t\tconfig = {},\r\n\t\trowEl;\r\n\r\n\t\t//inter table drag drop\r\n\t\tconfig.mouseup = function(e){\r\n\t\t\tself.tableRowDrop(e, row);\r\n\t\t}.bind(self);\r\n\r\n\t\t//same table drag drop\r\n\t\tconfig.mousemove = function(e){\r\n\t\t\tif(((e.pageY - Helpers.elOffset(group.element).top) + self.table.rowManager.element.scrollTop) > (group.getHeight() / 2)){\r\n\t\t\t\tif(self.toRow !== group || !self.toRowAfter){\r\n\t\t\t\t\tvar rowEl = group.getElement();\r\n\t\t\t\t\trowEl.parentNode.insertBefore(self.placeholderElement, rowEl.nextSibling);\r\n\t\t\t\t\tself.moveRow(group, true);\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tif(self.toRow !== group || self.toRowAfter){\r\n\t\t\t\t\tvar rowEl = group.getElement();\r\n\t\t\t\t\tif(rowEl.previousSibling){\r\n\t\t\t\t\t\trowEl.parentNode.insertBefore(self.placeholderElement, rowEl);\r\n\t\t\t\t\t\tself.moveRow(group, false);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}.bind(self);\r\n\r\n\t\tgroup.modules.moveRow = config;\r\n\t}\r\n\r\n\tinitializeRow(row){\r\n\t\tvar self = this,\r\n\t\tconfig = {},\r\n\t\trowEl;\r\n\r\n\t\t//inter table drag drop\r\n\t\tconfig.mouseup = function(e){\r\n\t\t\tself.tableRowDrop(e, row);\r\n\t\t}.bind(self);\r\n\r\n\t\t//same table drag drop\r\n\t\tconfig.mousemove = function(e){\r\n\t\t\tvar rowEl = row.getElement();\r\n\r\n\t\t\tif(((e.pageY - Helpers.elOffset(rowEl).top) + self.table.rowManager.element.scrollTop) > (row.getHeight() / 2)){\r\n\t\t\t\tif(self.toRow !== row || !self.toRowAfter){\r\n\t\t\t\t\trowEl.parentNode.insertBefore(self.placeholderElement, rowEl.nextSibling);\r\n\t\t\t\t\tself.moveRow(row, true);\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tif(self.toRow !== row || self.toRowAfter){\r\n\t\t\t\t\trowEl.parentNode.insertBefore(self.placeholderElement, rowEl);\r\n\t\t\t\t\tself.moveRow(row, false);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}.bind(self);\r\n\r\n\r\n\t\tif(!this.hasHandle){\r\n\r\n\t\t\trowEl = row.getElement();\r\n\r\n\t\t\trowEl.addEventListener(\"mousedown\", function(e){\r\n\t\t\t\tif(e.which === 1){\r\n\t\t\t\t\tself.checkTimeout = setTimeout(function(){\r\n\t\t\t\t\t\tself.startMove(e, row);\r\n\t\t\t\t\t}, self.checkPeriod);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\trowEl.addEventListener(\"mouseup\", function(e){\r\n\t\t\t\tif(e.which === 1){\r\n\t\t\t\t\tif(self.checkTimeout){\r\n\t\t\t\t\t\tclearTimeout(self.checkTimeout);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tthis.bindTouchEvents(row, row.getElement());\r\n\t\t}\r\n\r\n\t\trow.modules.moveRow = config;\r\n\t}\r\n\r\n\tinitializeColumn(column){\r\n\t\tif(column.definition.rowHandle && this.table.options.movableRows !== false){\r\n\t\t\tthis.hasHandle = true;\r\n\t\t}\r\n\t}\r\n\r\n\tinitializeCell(cell){\r\n\t\tif(cell.column.definition.rowHandle && this.table.options.movableRows !== false){\r\n\t\t\tvar self = this,\r\n\t\t\tcellEl = cell.getElement(true);\r\n\r\n\t\t\tcellEl.addEventListener(\"mousedown\", function(e){\r\n\t\t\t\tif(e.which === 1){\r\n\t\t\t\t\tself.checkTimeout = setTimeout(function(){\r\n\t\t\t\t\t\tself.startMove(e, cell.row);\r\n\t\t\t\t\t}, self.checkPeriod);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tcellEl.addEventListener(\"mouseup\", function(e){\r\n\t\t\t\tif(e.which === 1){\r\n\t\t\t\t\tif(self.checkTimeout){\r\n\t\t\t\t\t\tclearTimeout(self.checkTimeout);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tthis.bindTouchEvents(cell.row, cellEl);\r\n\t\t}\r\n\t}\r\n\r\n\tbindTouchEvents(row, element){\r\n\t\tvar startYMove = false, //shifting center position of the cell\r\n\t\tdir = false,\r\n\t\tcurrentRow, nextRow, prevRow, nextRowHeight, prevRowHeight, nextRowHeightLast, prevRowHeightLast;\r\n\r\n\t\telement.addEventListener(\"touchstart\", (e) => {\r\n\t\t\tthis.checkTimeout = setTimeout(() => {\r\n\t\t\t\tthis.touchMove = true;\r\n\t\t\t\tcurrentRow = row;\r\n\t\t\t\tnextRow = row.nextRow();\r\n\t\t\t\tnextRowHeight = nextRow ? nextRow.getHeight()/2 : 0;\r\n\t\t\t\tprevRow = row.prevRow();\r\n\t\t\t\tprevRowHeight = prevRow ? prevRow.getHeight()/2 : 0;\r\n\t\t\t\tnextRowHeightLast = 0;\r\n\t\t\t\tprevRowHeightLast = 0;\r\n\t\t\t\tstartYMove = false;\r\n\r\n\t\t\t\tthis.startMove(e, row);\r\n\t\t\t}, this.checkPeriod);\r\n\t\t}, {passive: true});\r\n\t\tthis.moving, this.toRow, this.toRowAfter\r\n\t\telement.addEventListener(\"touchmove\", (e) => {\r\n\r\n\t\t\tvar halfCol, diff, moveToRow;\r\n\r\n\t\t\tif(this.moving){\r\n\t\t\t\te.preventDefault();\r\n\r\n\t\t\t\tthis.moveHover(e);\r\n\r\n\t\t\t\tif(!startYMove){\r\n\t\t\t\t\tstartYMove = e.touches[0].pageY;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tdiff = e.touches[0].pageY - startYMove;\r\n\r\n\t\t\t\tif(diff > 0){\r\n\t\t\t\t\tif(nextRow && diff - nextRowHeightLast > nextRowHeight){\r\n\t\t\t\t\t\tmoveToRow = nextRow;\r\n\r\n\t\t\t\t\t\tif(moveToRow !== row){\r\n\t\t\t\t\t\t\tstartYMove = e.touches[0].pageY\r\n\t\t\t\t\t\t\tmoveToRow.getElement().parentNode.insertBefore(this.placeholderElement, moveToRow.getElement().nextSibling);\r\n\t\t\t\t\t\t\tthis.moveRow(moveToRow, true);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}else{\r\n\t\t\t\t\tif(prevRow && -diff - prevRowHeightLast > prevRowHeight){\r\n\t\t\t\t\t\tmoveToRow = prevRow;\r\n\r\n\t\t\t\t\t\tif(moveToRow !== row){\r\n\t\t\t\t\t\t\tstartYMove = e.touches[0].pageY;\r\n\t\t\t\t\t\t\tmoveToRow.getElement().parentNode.insertBefore(this.placeholderElement, moveToRow.getElement());\r\n\t\t\t\t\t\t\tthis.moveRow(moveToRow, false);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(moveToRow){\r\n\t\t\t\t\tcurrentRow = moveToRow;\r\n\t\t\t\t\tnextRow = moveToRow.nextRow();\r\n\t\t\t\t\tnextRowHeightLast = nextRowHeight;\r\n\t\t\t\t\tnextRowHeight = nextRow ? nextRow.getHeight() / 2 : 0;\r\n\t\t\t\t\tprevRow = moveToRow.prevRow();\r\n\t\t\t\t\tprevRowHeightLast = prevRowHeight;\r\n\t\t\t\t\tprevRowHeight = prevRow ? prevRow.getHeight() / 2 : 0;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\telement.addEventListener(\"touchend\", (e) => {\r\n\t\t\tif(this.checkTimeout){\r\n\t\t\t\tclearTimeout(this.checkTimeout);\r\n\t\t\t}\r\n\t\t\tif(this.moving){\r\n\t\t\t\tthis.endMove(e);\r\n\t\t\t\tthis.touchMove = false;\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t_bindMouseMove(){\r\n\t\tthis.table.rowManager.getDisplayRows().forEach((row) => {\r\n\t\t\tif((row.type === \"row\" || row.type === \"group\") && row.modules.moveRow.mousemove){\r\n\t\t\t\trow.getElement().addEventListener(\"mousemove\", row.modules.moveRow.mousemove);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t_unbindMouseMove(){\r\n\t\tthis.table.rowManager.getDisplayRows().forEach((row) => {\r\n\t\t\tif((row.type === \"row\" || row.type === \"group\") && row.modules.moveRow.mousemove){\r\n\t\t\t\trow.getElement().removeEventListener(\"mousemove\", row.modules.moveRow.mousemove);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tstartMove(e, row){\r\n\t\tvar element = row.getElement();\r\n\r\n\t\tthis.setStartPosition(e, row);\r\n\r\n\t\tthis.moving = row;\r\n\r\n\t\tthis.table.element.classList.add(\"tabulator-block-select\");\r\n\r\n\t\t//create placeholder\r\n\t\tthis.placeholderElement.style.width = row.getWidth() + \"px\";\r\n\t\tthis.placeholderElement.style.height = row.getHeight() + \"px\";\r\n\r\n\t\tif(!this.connection){\r\n\t\t\telement.parentNode.insertBefore(this.placeholderElement, element);\r\n\t\t\telement.parentNode.removeChild(element);\r\n\t\t}else{\r\n\t\t\tthis.table.element.classList.add(\"tabulator-movingrow-sending\");\r\n\t\t\tthis.connectToTables(row);\r\n\t\t}\r\n\r\n\t\t//create hover element\r\n\t\tthis.hoverElement = element.cloneNode(true);\r\n\t\tthis.hoverElement.classList.add(\"tabulator-moving\");\r\n\r\n\t\tif(this.connection){\r\n\t\t\tdocument.body.appendChild(this.hoverElement);\r\n\t\t\tthis.hoverElement.style.left = \"0\";\r\n\t\t\tthis.hoverElement.style.top = \"0\";\r\n\t\t\tthis.hoverElement.style.width = this.table.element.clientWidth + \"px\";\r\n\t\t\tthis.hoverElement.style.whiteSpace = \"nowrap\";\r\n\t\t\tthis.hoverElement.style.overflow = \"hidden\";\r\n\t\t\tthis.hoverElement.style.pointerEvents = \"none\";\r\n\t\t}else{\r\n\t\t\tthis.table.rowManager.getTableElement().appendChild(this.hoverElement);\r\n\r\n\t\t\tthis.hoverElement.style.left = \"0\";\r\n\t\t\tthis.hoverElement.style.top = \"0\";\r\n\r\n\t\t\tthis._bindMouseMove();\r\n\t\t}\r\n\r\n\t\tdocument.body.addEventListener(\"mousemove\", this.moveHover);\r\n\t\tdocument.body.addEventListener(\"mouseup\", this.endMove);\r\n\r\n\t\tthis.moveHover(e);\r\n\t}\r\n\r\n\tsetStartPosition(e, row){\r\n\t\tvar pageX = this.touchMove ? e.touches[0].pageX : e.pageX,\r\n\t\tpageY = this.touchMove ? e.touches[0].pageY : e.pageY,\r\n\t\telement, position;\r\n\r\n\t\telement = row.getElement();\r\n\t\tif(this.connection){\r\n\t\t\tposition = element.getBoundingClientRect();\r\n\r\n\t\t\tthis.startX = position.left - pageX + window.pageXOffset;\r\n\t\t\tthis.startY = position.top - pageY + window.pageYOffset;\r\n\t\t}else{\r\n\t\t\tthis.startY = (pageY - element.getBoundingClientRect().top);\r\n\t\t}\r\n\t}\r\n\r\n\tendMove(e){\r\n\t\tif(!e || e.which === 1 || this.touchMove){\r\n\t\t\tthis._unbindMouseMove();\r\n\r\n\t\t\tif(!this.connection){\r\n\t\t\t\tthis.placeholderElement.parentNode.insertBefore(this.moving.getElement(), this.placeholderElement.nextSibling);\r\n\t\t\t\tthis.placeholderElement.parentNode.removeChild(this.placeholderElement);\r\n\t\t\t}\r\n\r\n\t\t\tthis.hoverElement.parentNode.removeChild(this.hoverElement);\r\n\r\n\t\t\tthis.table.element.classList.remove(\"tabulator-block-select\");\r\n\r\n\t\t\tif(this.toRow){\r\n\t\t\t\tthis.table.rowManager.moveRow(this.moving, this.toRow, this.toRowAfter);\r\n\t\t\t}\r\n\r\n\t\t\tthis.moving = false;\r\n\t\t\tthis.toRow = false;\r\n\t\t\tthis.toRowAfter = false;\r\n\r\n\t\t\tdocument.body.removeEventListener(\"mousemove\", this.moveHover);\r\n\t\t\tdocument.body.removeEventListener(\"mouseup\", this.endMove);\r\n\r\n\t\t\tif(this.connection){\r\n\t\t\t\tthis.table.element.classList.remove(\"tabulator-movingrow-sending\");\r\n\t\t\t\tthis.disconnectFromTables();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tmoveRow(row, after){\r\n\t\tthis.toRow = row;\r\n\t\tthis.toRowAfter = after;\r\n\t}\r\n\r\n\tmoveHover(e){\r\n\t\tif(this.connection){\r\n\t\t\tthis.moveHoverConnections.call(this, e);\r\n\t\t}else{\r\n\t\t\tthis.moveHoverTable.call(this, e);\r\n\t\t}\r\n\t}\r\n\r\n\tmoveHoverTable(e){\r\n\t\tvar rowHolder = this.table.rowManager.getElement(),\r\n\t\tscrollTop = rowHolder.scrollTop,\r\n\t\tyPos = ((this.touchMove ? e.touches[0].pageY : e.pageY) - rowHolder.getBoundingClientRect().top) + scrollTop,\r\n\t\tscrollPos;\r\n\r\n\t\tthis.hoverElement.style.top = (yPos - this.startY) + \"px\";\r\n\t}\r\n\r\n\tmoveHoverConnections(e){\r\n\t\tthis.hoverElement.style.left = (this.startX + (this.touchMove ? e.touches[0].pageX : e.pageX)) + \"px\";\r\n\t\tthis.hoverElement.style.top = (this.startY + (this.touchMove ? e.touches[0].pageY : e.pageY)) + \"px\";\r\n\t}\r\n\r\n\telementRowDrop(e, element, row){\r\n\t\tif(this.table.options.movableRowsElementDrop){\r\n\t\t\tthis.dispatchExternal(\"movableRowsElementDrop\", e, element, row ? row.getComponent() : false);\r\n\t\t}\r\n\t}\r\n\r\n\t//establish connection with other tables\r\n\tconnectToTables(row){\r\n\t\tvar connectionTables;\r\n\r\n\t\tif(this.connectionSelectorsTables){\r\n\t\t\tconnectionTables = this.commsConnections(this.connectionSelectorsTables);\r\n\r\n\t\t\tthis.dispatchExternal(\"movableRowsSendingStart\", connectionTables);\r\n\r\n\t\t\tthis.commsSend(this.connectionSelectorsTables, \"moveRow\", \"connect\", {\r\n\t\t\t\trow:row,\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif(this.connectionSelectorsElements){\r\n\r\n\t\t\tthis.connectionElements = [];\r\n\r\n\t\t\tif(!Array.isArray(this.connectionSelectorsElements)){\r\n\t\t\t\tthis.connectionSelectorsElements = [this.connectionSelectorsElements];\r\n\t\t\t}\r\n\r\n\t\t\tthis.connectionSelectorsElements.forEach((query) => {\r\n\t\t\t\tif(typeof query === \"string\"){\r\n\t\t\t\t\tthis.connectionElements = this.connectionElements.concat(Array.prototype.slice.call(document.querySelectorAll(query)));\r\n\t\t\t\t}else{\r\n\t\t\t\t\tthis.connectionElements.push(query);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tthis.connectionElements.forEach((element) => {\r\n\t\t\t\tvar dropEvent = (e) => {\r\n\t\t\t\t\tthis.elementRowDrop(e, element, this.moving);\r\n\t\t\t\t};\r\n\r\n\t\t\t\telement.addEventListener(\"mouseup\", dropEvent);\r\n\t\t\t\telement.tabulatorElementDropEvent = dropEvent;\r\n\r\n\t\t\t\telement.classList.add(\"tabulator-movingrow-receiving\");\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\t//disconnect from other tables\r\n\tdisconnectFromTables(){\r\n\t\tvar connectionTables;\r\n\r\n\t\tif(this.connectionSelectorsTables){\r\n\t\t\tconnectionTables = this.commsConnections(this.connectionSelectorsTables);\r\n\r\n\t\t\tthis.dispatchExternal(\"movableRowsSendingStop\", connectionTables);\r\n\r\n\t\t\tthis.commsSend(this.connectionSelectorsTables, \"moveRow\", \"disconnect\");\r\n\t\t}\r\n\r\n\t\tthis.connectionElements.forEach((element) => {\r\n\t\t\telement.classList.remove(\"tabulator-movingrow-receiving\");\r\n\t\t\telement.removeEventListener(\"mouseup\", element.tabulatorElementDropEvent);\r\n\t\t\tdelete element.tabulatorElementDropEvent;\r\n\t\t});\r\n\t}\r\n\r\n\t//accept incomming connection\r\n\tconnect(table, row){\r\n\t\tif(!this.connectedTable){\r\n\t\t\tthis.connectedTable = table;\r\n\t\t\tthis.connectedRow = row;\r\n\r\n\t\t\tthis.table.element.classList.add(\"tabulator-movingrow-receiving\");\r\n\r\n\t\t\tthis.table.rowManager.getDisplayRows().forEach((row) => {\r\n\t\t\t\tif(row.type === \"row\" && row.modules.moveRow && row.modules.moveRow.mouseup){\r\n\t\t\t\t\trow.getElement().addEventListener(\"mouseup\", row.modules.moveRow.mouseup);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tthis.tableRowDropEvent = this.tableRowDrop.bind(this);\r\n\r\n\t\t\tthis.table.element.addEventListener(\"mouseup\", this.tableRowDropEvent);\r\n\r\n\t\t\tthis.dispatchExternal(\"movableRowsReceivingStart\", row, table);\r\n\r\n\t\t\treturn true;\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Move Row Error - Table cannot accept connection, already connected to table:\", this.connectedTable);\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\t//close incomming connection\r\n\tdisconnect(table){\r\n\t\tif(table === this.connectedTable){\r\n\t\t\tthis.connectedTable = false;\r\n\t\t\tthis.connectedRow = false;\r\n\r\n\t\t\tthis.table.element.classList.remove(\"tabulator-movingrow-receiving\");\r\n\r\n\t\t\tthis.table.rowManager.getDisplayRows().forEach((row) =>{\r\n\t\t\t\tif(row.type === \"row\" && row.modules.moveRow && row.modules.moveRow.mouseup){\r\n\t\t\t\t\trow.getElement().removeEventListener(\"mouseup\", row.modules.moveRow.mouseup);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tthis.table.element.removeEventListener(\"mouseup\", this.tableRowDropEvent);\r\n\r\n\t\t\tthis.dispatchExternal(\"movableRowsReceivingStop\", table);\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Move Row Error - trying to disconnect from non connected table\")\r\n\t\t}\r\n\t}\r\n\r\n\tdropComplete(table, row, success){\r\n\t\tvar sender = false;\r\n\r\n\t\tif(success){\r\n\r\n\t\t\tswitch(typeof this.table.options.movableRowsSender){\r\n\t\t\t\tcase \"string\":\r\n\t\t\t\tsender = this.senders[this.table.options.movableRowsSender];\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"function\":\r\n\t\t\t\tsender = this.table.options.movableRowsSender;\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\r\n\t\t\tif(sender){\r\n\t\t\t\tsender.call(this, this.moving.getComponent(), row ? row.getComponent() : undefined, table)\r\n\t\t\t}else{\r\n\t\t\t\tif(this.table.options.movableRowsSender){\r\n\t\t\t\t\tconsole.warn(\"Mover Row Error - no matching sender found:\", this.table.options.movableRowsSender);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tthis.dispatchExternal(\"movableRowsSent\", this.moving.getComponent(), row ? row.getComponent() : undefined, table);\r\n\t\t}else{\r\n\t\t\tthis.dispatchExternal(\"movableRowsSentFailed\", this.moving.getComponent(), row ? row.getComponent() : undefined, table);\r\n\t\t}\r\n\r\n\t\tthis.endMove();\r\n\t}\r\n\r\n\ttableRowDrop(e, row){\r\n\t\tvar receiver = false,\r\n\t\tsuccess = false;\r\n\r\n\t\te.stopImmediatePropagation();\r\n\r\n\t\tswitch(typeof this.table.options.movableRowsReceiver){\r\n\t\t\tcase \"string\":\r\n\t\t\treceiver = this.receivers[this.table.options.movableRowsReceiver];\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"function\":\r\n\t\t\treceiver = this.table.options.movableRowsReceiver;\r\n\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\tif(receiver){\r\n\t\t\tsuccess = receiver.call(this, this.connectedRow.getComponent(), row ? row.getComponent() : undefined, this.connectedTable)\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Mover Row Error - no matching receiver found:\", this.table.options.movableRowsReceiver)\r\n\t\t}\r\n\r\n\t\tif(success){\r\n\t\t\tthis.dispatchExternal(\"movableRowsReceived\", this.connectedRow.getComponent(), row ? row.getComponent() : undefined, this.connectedTable);\r\n\t\t}else{\r\n\t\t\tthis.dispatchExternal(\"movableRowsReceivedFailed\", this.connectedRow.getComponent(), row ? row.getComponent() : undefined, this.connectedTable);\r\n\t\t}\r\n\r\n\t\tthis.commsSend(this.connectedTable, \"moveRow\", \"dropcomplete\", {\r\n\t\t\trow:row,\r\n\t\t\tsuccess:success,\r\n\t\t});\r\n\t}\r\n\r\n\tcommsReceived(table, action, data){\r\n\t\tswitch(action){\r\n\t\t\tcase \"connect\":\r\n\t\t\treturn this.connect(table, data.row);\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"disconnect\":\r\n\t\t\treturn this.disconnect(table);\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"dropcomplete\":\r\n\t\t\treturn this.dropComplete(table, data.row, data.success);\r\n\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n}\r\n\r\nMoveRows.prototype.receivers = {\r\n\tinsert:function(fromRow, toRow, fromTable){\r\n\t\tthis.table.addRow(fromRow.getData(), undefined, toRow);\r\n\t\treturn true;\r\n\t},\r\n\r\n\tadd:function(fromRow, toRow, fromTable){\r\n\t\tthis.table.addRow(fromRow.getData());\r\n\t\treturn true;\r\n\t},\r\n\r\n\tupdate:function(fromRow, toRow, fromTable){\r\n\t\tif(toRow){\r\n\t\t\ttoRow.update(fromRow.getData());\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t},\r\n\r\n\treplace:function(fromRow, toRow, fromTable){\r\n\t\tif(toRow){\r\n\t\t\tthis.table.addRow(fromRow.getData(), undefined, toRow);\r\n\t\t\ttoRow.delete();\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t},\r\n};\r\n\r\nMoveRows.prototype.senders = {\r\n\tdelete:function(fromRow, toRow, toTable){\r\n\t\tfromRow.delete();\r\n\t}\r\n};\r\n\r\nMoveRows.moduleName = \"moveRow\";\r\n\r\nexport default MoveRows;","export default {};","import Module from '../../core/Module.js';\r\n\r\nimport defaultMutators from './defaults/mutators.js';\r\n\r\nclass Mutator extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.allowedTypes = [\"\", \"data\", \"edit\", \"clipboard\"]; //list of muatation types\r\n\t\tthis.enabled = true;\r\n\r\n\t\tthis.registerColumnOption(\"mutator\");\r\n\t\tthis.registerColumnOption(\"mutatorParams\");\r\n\t\tthis.registerColumnOption(\"mutatorData\");\r\n\t\tthis.registerColumnOption(\"mutatorDataParams\");\r\n\t\tthis.registerColumnOption(\"mutatorEdit\");\r\n\t\tthis.registerColumnOption(\"mutatorEditParams\");\r\n\t\tthis.registerColumnOption(\"mutatorClipboard\");\r\n\t\tthis.registerColumnOption(\"mutatorClipboardParams\");\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tthis.subscribe(\"cell-value-changing\", this.transformCell.bind(this));\r\n\t\tthis.subscribe(\"column-layout\", this.initializeColumn.bind(this));\r\n\t\tthis.subscribe(\"row-data-init-before\", this.rowDataChanged.bind(this));\r\n\t\tthis.subscribe(\"row-data-changing\", this.rowDataChanged.bind(this));\r\n\t}\r\n\r\n\trowDataChanged(row, tempData, updatedData){\r\n\t\treturn this.transformRow(tempData, \"data\", updatedData);\r\n\t}\r\n\r\n\t//initialize column mutator\r\n\tinitializeColumn(column){\r\n\t\tvar match = false,\r\n\t\tconfig = {};\r\n\r\n\t\tthis.allowedTypes.forEach((type) => {\r\n\t\t\tvar key = \"mutator\" + (type.charAt(0).toUpperCase() + type.slice(1)),\r\n\t\t\tmutator;\r\n\r\n\t\t\tif(column.definition[key]){\r\n\t\t\t\tmutator = this.lookupMutator(column.definition[key]);\r\n\r\n\t\t\t\tif(mutator){\r\n\t\t\t\t\tmatch = true;\r\n\r\n\t\t\t\t\tconfig[key] = {\r\n\t\t\t\t\t\tmutator:mutator,\r\n\t\t\t\t\t\tparams: column.definition[key + \"Params\"] || {},\r\n\t\t\t\t\t};\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tif(match){\r\n\t\t\tcolumn.modules.mutate = config;\r\n\t\t}\r\n\t}\r\n\r\n\tlookupMutator(value){\r\n\t\tvar mutator = false;\r\n\r\n\t\t//set column mutator\r\n\t\tswitch(typeof value){\r\n\t\t\tcase \"string\":\r\n\t\t\tif(Mutator.mutators[value]){\r\n\t\t\t\tmutator = Mutator.mutators[value];\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Mutator Error - No such mutator found, ignoring: \", value);\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"function\":\r\n\t\t\tmutator = value;\r\n\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\treturn mutator;\r\n\t}\r\n\r\n\t//apply mutator to row\r\n\ttransformRow(data, type, updatedData){\r\n\t\tvar key = \"mutator\" + (type.charAt(0).toUpperCase() + type.slice(1)),\r\n\t\tvalue;\r\n\r\n\t\tif(this.enabled){\r\n\r\n\t\t\tthis.table.columnManager.traverse((column) => {\r\n\t\t\t\tvar mutator, params, component;\r\n\r\n\t\t\t\tif(column.modules.mutate){\r\n\t\t\t\t\tmutator = column.modules.mutate[key] || column.modules.mutate.mutator || false;\r\n\r\n\t\t\t\t\tif(mutator){\r\n\t\t\t\t\t\tvalue = column.getFieldValue(typeof updatedData !== \"undefined\" ? updatedData : data);\r\n\r\n\t\t\t\t\t\tif(type == \"data\" || typeof value !== \"undefined\"){\r\n\t\t\t\t\t\t\tcomponent = column.getComponent();\r\n\t\t\t\t\t\t\tparams = typeof mutator.params === \"function\" ? mutator.params(value, data, type, component) : mutator.params;\r\n\t\t\t\t\t\t\tcolumn.setFieldValue(data, mutator.mutator(value, data, type, params, component));\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn data;\r\n\t}\r\n\r\n\t//apply mutator to new cell value\r\n\ttransformCell(cell, value){\r\n\t\tif(cell.column.modules.mutate){\r\n\t\t\tvar mutator = cell.column.modules.mutate.mutatorEdit || cell.column.modules.mutate.mutator || false,\r\n\t\t\ttempData = {};\r\n\r\n\t\t\tif(mutator){\r\n\t\t\t\ttempData = Object.assign(tempData, cell.row.getData());\r\n\t\t\t\tcell.column.setFieldValue(tempData, value);\r\n\t\t\t\treturn mutator.mutator(value, tempData, \"edit\", mutator.params, cell.getComponent());\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn value;\r\n\t}\r\n\r\n\tenable(){\r\n\t\tthis.enabled = true;\r\n\t}\r\n\r\n\tdisable(){\r\n\t\tthis.enabled = false;\r\n\t}\r\n}\r\n\r\nMutator.moduleName = \"mutator\";\r\n\r\n//load defaults\r\nMutator.mutators = defaultMutators;\r\n\r\nexport default Mutator;","import Module from '../../core/Module.js';\r\n\r\nimport Helpers from '../../core/tools/Helpers.js';\r\n\r\nclass Page extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.mode = \"local\";\r\n\t\tthis.progressiveLoad = false;\r\n\r\n\t\tthis.size = 0;\r\n\t\tthis.page = 1;\r\n\t\tthis.count = 5;\r\n\t\tthis.max = 1;\r\n\r\n\t\tthis.displayIndex = 0; //index in display pipeline\r\n\r\n\t\tthis.initialLoad = true;\r\n\t\tthis.dataChanging = false; //flag to check if data is being changed by this module\r\n\r\n\t\tthis.pageSizes = [];\r\n\r\n\t\tthis.dataReceivedNames = {}; //TODO - remove once pagimation update is complete\r\n\t\tthis.dataSentNames = {}; //TODO - remove once pagimation update is complete\r\n\r\n\t\tthis.registerTableOption(\"pagination\", false); //set pagination type\r\n\t\tthis.registerTableOption(\"paginationMode\", \"local\"); //local or remote pagination\r\n\t\tthis.registerTableOption(\"paginationSize\", false); //set number of rows to a page\r\n\t\tthis.registerTableOption(\"paginationInitialPage\", 1); //initail page to show on load\r\n\t\tthis.registerTableOption(\"paginationButtonCount\", 5); // set count of page button\r\n\t\tthis.registerTableOption(\"paginationSizeSelector\", false); //add pagination size selector element\r\n\t\tthis.registerTableOption(\"paginationElement\", false); //element to hold pagination numbers\r\n\t\t// this.registerTableOption(\"paginationDataSent\", {}); //pagination data sent to the server\r\n\t\t// this.registerTableOption(\"paginationDataReceived\", {}); //pagination data received from the server\r\n\t\tthis.registerTableOption(\"paginationAddRow\", \"page\"); //add rows on table or page\r\n\r\n\t\tthis.registerTableOption(\"progressiveLoad\", false); //progressive loading\r\n\t\tthis.registerTableOption(\"progressiveLoadDelay\", 0); //delay between requests\r\n\t\tthis.registerTableOption(\"progressiveLoadScrollMargin\", 0); //margin before scroll begins\r\n\r\n\t\tthis.registerTableFunction(\"setMaxPage\", this.setMaxPage.bind(this));\r\n\t\tthis.registerTableFunction(\"setPage\", this.setPage.bind(this));\r\n\t\tthis.registerTableFunction(\"setPageToRow\", this.userSetPageToRow.bind(this));\r\n\t\tthis.registerTableFunction(\"setPageSize\", this.userSetPageSize.bind(this));\r\n\t\tthis.registerTableFunction(\"getPageSize\", this.getPageSize.bind(this));\r\n\t\tthis.registerTableFunction(\"previousPage\", this.previousPage.bind(this));\r\n\t\tthis.registerTableFunction(\"nextPage\", this.nextPage.bind(this));\r\n\t\tthis.registerTableFunction(\"getPage\", this.getPage.bind(this));\r\n\t\tthis.registerTableFunction(\"getPageMax\", this.getPageMax.bind(this));\r\n\r\n\t\t//register component functions\r\n\t\tthis.registerComponentFunction(\"row\", \"pageTo\", this.setPageToRow.bind(this));\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tif(this.table.options.pagination){\r\n\t\t\tthis.subscribe(\"row-deleted\", this.rowsUpdated.bind(this));\r\n\t\t\tthis.subscribe(\"row-adding-position\", this.rowAddingPosition.bind(this));\r\n\t\t\tthis.subscribe(\"row-added\", this.rowsUpdated.bind(this));\r\n\t\t\tthis.subscribe(\"data-processed\", this.initialLoadComplete.bind(this));\r\n\t\t\tthis.subscribe(\"table-built\", this.calculatePageSizes.bind(this));\r\n\r\n\t\t\tif(this.table.options.paginationMode === \"remote\"){\r\n\t\t\t\tthis.subscribe(\"data-params\", this.remotePageParams.bind(this));\r\n\t\t\t\tthis.subscribe(\"data-loaded\", this._parseRemoteData.bind(this));\r\n\t\t\t}\r\n\r\n\t\t\tif(this.table.options.progressiveLoad){\r\n\t\t\t\tconsole.error(\"Progressive Load Error - Pagination and progressive load cannot be used at the same time\");\r\n\t\t\t}\r\n\r\n\t\t\tthis.registerDisplayHandler(this.restOnRenderBefore.bind(this), 40);\r\n\t\t\tthis.registerDisplayHandler(this.getRows.bind(this), 50);\r\n\r\n\t\t\tthis.createElements();\r\n\t\t\tthis.initializePaginator();\r\n\t\t}else if(this.table.options.progressiveLoad){\r\n\r\n\t\t\tthis.subscribe(\"data-params\", this.remotePageParams.bind(this));\r\n\t\t\tthis.subscribe(\"data-loaded\", this._parseRemoteData.bind(this));\r\n\r\n\t\t\tthis.initializeProgressive(this.table.options.progressiveLoad)\r\n\r\n\t\t\tif(this.table.options.progressiveLoad === \"scroll\"){\r\n\t\t\t\tthis.subscribe(\"scroll-vertical\", this.scrollVertical.bind(this));\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\trowAddingPosition(row, top){\r\n\t\tvar rowManager = this.table.rowManager,\r\n\t\tdispRows = rowManager.getDisplayRows(),\r\n\t\tindex;\r\n\r\n\t\tif(top){\r\n\t\t\tif(dispRows.length){\r\n\t\t\t\tindex = dispRows[0];\r\n\t\t\t}else{\r\n\t\t\t\tif(rowManager.activeRows.length){\r\n\t\t\t\t\tindex = rowManager.activeRows[rowManager.activeRows.length-1];\r\n\t\t\t\t\ttop = false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tif(dispRows.length){\r\n\t\t\t\tindex = dispRows[dispRows.length - 1];\r\n\t\t\t\ttop = dispRows.length < this.size ? false : true;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn {index, top}\r\n\t}\r\n\r\n\tcalculatePageSizes(){\r\n\t\tvar testElRow, testElCell;\r\n\r\n\t\tif(this.table.options.paginationSize){\r\n\t\t\tthis.size = this.table.options.paginationSize;\r\n\t\t}else{\r\n\t\t\ttestElRow = document.createElement(\"div\");\r\n\t\t\ttestElRow.classList.add(\"tabulator-row\");\r\n\t\t\ttestElRow.style.visibility = \"hidden\";\r\n\r\n\t\t\ttestElCell = document.createElement(\"div\");\r\n\t\t\ttestElCell.classList.add(\"tabulator-cell\");\r\n\t\t\ttestElCell.innerHTML = \"Page Row Test\";\r\n\r\n\t\t\ttestElRow.appendChild(testElCell);\r\n\r\n\t\t\tthis.table.rowManager.getTableElement().appendChild(testElRow);\r\n\r\n\t\t\tthis.size = Math.floor(this.table.rowManager.getElement().clientHeight / testElRow.offsetHeight);\r\n\r\n\t\t\tthis.table.rowManager.getTableElement().removeChild(testElRow);\r\n\t\t}\r\n\t}\r\n\r\n\tinitialLoadComplete(){\r\n\t\tthis.initialLoad = false;\r\n\t}\r\n\r\n\tremotePageParams(data, config, silent, params){\r\n\t\tif(!this.initialLoad){\r\n\t\t\tif((this.progressiveLoad && !silent) || (!this.progressiveLoad && !this.dataChanging)){\r\n\t\t\t\tthis.reset(true);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//configure request params\r\n\t\tparams.page = this.page;\r\n\r\n\t\t//set page size if defined\r\n\t\tif(this.size){\r\n\t\t\tparams.size = this.size;\r\n\t\t}\r\n\r\n\t\treturn params;\r\n\t}\r\n\r\n\t///////////////////////////////////\r\n\t///////// Table Functions /////////\r\n\t///////////////////////////////////\r\n\r\n\tuserSetPageToRow(row){\r\n\t\tif(this.table.options.pagination){\r\n\t\t\trow = this.rowManager.findRow(row);\r\n\r\n\t\t\tif(row){\r\n\t\t\t\treturn this.setPageToRow(row)\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn Promise.reject();\r\n\t}\r\n\r\n\tuserSetPageSize(size){\r\n\t\tif(this.table.options.pagination){\r\n\t\t\tthis.setPageSize(size);\r\n\t\t\treturn this.setPage(1);\r\n\t\t}else{\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\t///////////////////////////////////\r\n\t///////// Internal Logic //////////\r\n\t///////////////////////////////////\r\n\r\n\tscrollVertical(top, dir){\r\n\t\tvar element, diff, margin;\r\n\t\tif(!dir && !this.table.dataLoader.loading){\r\n\t\t\telement = this.table.rowManager.getElement();\r\n\t\t\tdiff = element.scrollHeight - element.clientHeight - top;\r\n\t\t\tmargin = this.table.options.progressiveLoadScrollMargin || (element.clientHeight * 2);\r\n\r\n\t\t\tif(diff < margin){\r\n\t\t\t\tthis.nextPage();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\trestOnRenderBefore(rows, renderInPosition){\r\n\t\tif(!renderInPosition){\r\n\t\t\tif(this.mode === \"local\"){\r\n\t\t\t\tthis.reset();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn rows;\r\n\t}\r\n\r\n\trowsUpdated(){\r\n\t\tthis.refreshData(true, \"all\");\r\n\t}\r\n\r\n\tcreateElements(){\r\n\t\tvar button;\r\n\r\n\t\tthis.element = document.createElement(\"span\");\r\n\t\tthis.element.classList.add(\"tabulator-paginator\");\r\n\r\n\t\tthis.pagesElement = document.createElement(\"span\");\r\n\t\tthis.pagesElement.classList.add(\"tabulator-pages\");\r\n\r\n\t\tbutton = document.createElement(\"button\");\r\n\t\tbutton.classList.add(\"tabulator-page\");\r\n\t\tbutton.setAttribute(\"type\", \"button\");\r\n\t\tbutton.setAttribute(\"role\", \"button\");\r\n\t\tbutton.setAttribute(\"aria-label\", \"\");\r\n\t\tbutton.setAttribute(\"title\", \"\");\r\n\r\n\t\tthis.firstBut = button.cloneNode(true);\r\n\t\tthis.firstBut.setAttribute(\"data-page\", \"first\");\r\n\r\n\t\tthis.prevBut = button.cloneNode(true);\r\n\t\tthis.prevBut.setAttribute(\"data-page\", \"prev\");\r\n\r\n\t\tthis.nextBut = button.cloneNode(true);\r\n\t\tthis.nextBut.setAttribute(\"data-page\", \"next\");\r\n\r\n\t\tthis.lastBut = button.cloneNode(true);\r\n\t\tthis.lastBut.setAttribute(\"data-page\", \"last\");\r\n\r\n\t\tif(this.table.options.paginationSizeSelector){\r\n\t\t\tthis.pageSizeSelect = document.createElement(\"select\");\r\n\t\t\tthis.pageSizeSelect.classList.add(\"tabulator-page-size\");\r\n\t\t}\r\n\t}\r\n\r\n\tgeneratePageSizeSelectList(){\r\n\t\tvar pageSizes = [];\r\n\r\n\t\tif(this.pageSizeSelect){\r\n\r\n\t\t\tif(Array.isArray(this.table.options.paginationSizeSelector)){\r\n\t\t\t\tpageSizes = this.table.options.paginationSizeSelector;\r\n\t\t\t\tthis.pageSizes = pageSizes;\r\n\r\n\t\t\t\tif(this.pageSizes.indexOf(this.size) == -1){\r\n\t\t\t\t\tpageSizes.unshift(this.size);\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\r\n\t\t\t\tif(this.pageSizes.indexOf(this.size) == -1){\r\n\t\t\t\t\tpageSizes = [];\r\n\r\n\t\t\t\t\tfor (let i = 1; i < 5; i++){\r\n\t\t\t\t\t\tpageSizes.push(this.size * i);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tthis.pageSizes = pageSizes;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tpageSizes = this.pageSizes;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\twhile(this.pageSizeSelect.firstChild) this.pageSizeSelect.removeChild(this.pageSizeSelect.firstChild);\r\n\r\n\t\t\tpageSizes.forEach((item) => {\r\n\t\t\t\tvar itemEl = document.createElement(\"option\");\r\n\t\t\t\titemEl.value = item;\r\n\r\n\t\t\t\tif(item === true){\r\n\t\t\t\t\tthis.langBind(\"pagination|all\", function(value){\r\n\t\t\t\t\t\titemEl.innerHTML = value;\r\n\t\t\t\t\t});\r\n\t\t\t\t}else{\r\n\t\t\t\t\titemEl.innerHTML = item;\r\n\t\t\t\t}\r\n\r\n\r\n\r\n\t\t\t\tthis.pageSizeSelect.appendChild(itemEl);\r\n\t\t\t});\r\n\r\n\t\t\tthis.pageSizeSelect.value = this.size;\r\n\t\t}\r\n\t}\r\n\r\n\t//setup pageination\r\n\tinitializePaginator(hidden){\r\n\t\tvar pageSelectLabel;\r\n\r\n\t\tif(!hidden){\r\n\t\t\t//build pagination element\r\n\r\n\t\t\t//bind localizations\r\n\t\t\tthis.langBind(\"pagination|first\", (value) => {\r\n\t\t\t\tthis.firstBut.innerHTML = value;\r\n\t\t\t});\r\n\r\n\t\t\tthis.langBind(\"pagination|first_title\", (value) => {\r\n\t\t\t\tthis.firstBut.setAttribute(\"aria-label\", value);\r\n\t\t\t\tthis.firstBut.setAttribute(\"title\", value);\r\n\t\t\t});\r\n\r\n\t\t\tthis.langBind(\"pagination|prev\", (value) => {\r\n\t\t\t\tthis.prevBut.innerHTML = value;\r\n\t\t\t});\r\n\r\n\t\t\tthis.langBind(\"pagination|prev_title\", (value) => {\r\n\t\t\t\tthis.prevBut.setAttribute(\"aria-label\", value);\r\n\t\t\t\tthis.prevBut.setAttribute(\"title\", value);\r\n\t\t\t});\r\n\r\n\t\t\tthis.langBind(\"pagination|next\", (value) => {\r\n\t\t\t\tthis.nextBut.innerHTML = value;\r\n\t\t\t});\r\n\r\n\t\t\tthis.langBind(\"pagination|next_title\", (value) => {\r\n\t\t\t\tthis.nextBut.setAttribute(\"aria-label\", value);\r\n\t\t\t\tthis.nextBut.setAttribute(\"title\", value);\r\n\t\t\t});\r\n\r\n\t\t\tthis.langBind(\"pagination|last\", (value) => {\r\n\t\t\t\tthis.lastBut.innerHTML = value;\r\n\t\t\t});\r\n\r\n\t\t\tthis.langBind(\"pagination|last_title\", (value) => {\r\n\t\t\t\tthis.lastBut.setAttribute(\"aria-label\", value);\r\n\t\t\t\tthis.lastBut.setAttribute(\"title\", value);\r\n\t\t\t});\r\n\r\n\t\t\t//click bindings\r\n\t\t\tthis.firstBut.addEventListener(\"click\", () => {\r\n\t\t\t\tthis.setPage(1)\r\n\t\t\t});\r\n\r\n\t\t\tthis.prevBut.addEventListener(\"click\", () => {\r\n\t\t\t\tthis.previousPage()\r\n\t\t\t});\r\n\r\n\t\t\tthis.nextBut.addEventListener(\"click\", () => {\r\n\t\t\t\tthis.nextPage()\r\n\t\t\t});\r\n\r\n\t\t\tthis.lastBut.addEventListener(\"click\", () => {\r\n\t\t\t\tthis.setPage(this.max)\r\n\t\t\t});\r\n\r\n\t\t\tif(this.table.options.paginationElement){\r\n\t\t\t\tthis.element = this.table.options.paginationElement;\r\n\t\t\t}\r\n\r\n\t\t\tif(this.pageSizeSelect){\r\n\t\t\t\tpageSelectLabel = document.createElement(\"label\");\r\n\r\n\t\t\t\tthis.langBind(\"pagination|page_size\", (value) => {\r\n\t\t\t\t\tthis.pageSizeSelect.setAttribute(\"aria-label\", value);\r\n\t\t\t\t\tthis.pageSizeSelect.setAttribute(\"title\", value);\r\n\t\t\t\t\tpageSelectLabel.innerHTML = value;\r\n\t\t\t\t});\r\n\r\n\t\t\t\tthis.element.appendChild(pageSelectLabel);\r\n\t\t\t\tthis.element.appendChild(this.pageSizeSelect);\r\n\r\n\t\t\t\tthis.pageSizeSelect.addEventListener(\"change\", (e) => {\r\n\t\t\t\t\tthis.setPageSize(this.pageSizeSelect.value == \"true\" ? true : this.pageSizeSelect.value);\r\n\t\t\t\t\tthis.setPage(1)\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\t//append to DOM\r\n\t\t\tthis.element.appendChild(this.firstBut);\r\n\t\t\tthis.element.appendChild(this.prevBut);\r\n\t\t\tthis.element.appendChild(this.pagesElement);\r\n\t\t\tthis.element.appendChild(this.nextBut);\r\n\t\t\tthis.element.appendChild(this.lastBut);\r\n\r\n\t\t\tif(!this.table.options.paginationElement && !hidden){\r\n\t\t\t\tthis.table.footerManager.append(this.element, this);\r\n\t\t\t}\r\n\r\n\t\t\tthis.page = this.table.options.paginationInitialPage;\r\n\t\t\tthis.count = this.table.options.paginationButtonCount;\r\n\r\n\t\t\tthis.generatePageSizeSelectList();\r\n\t\t}\r\n\r\n\t\t//set default values\r\n\t\tthis.mode = this.table.options.paginationMode;\r\n\t}\r\n\r\n\tinitializeProgressive(mode){\r\n\t\tthis.initializePaginator(true);\r\n\t\tthis.mode = \"progressive_\" + mode;\r\n\t\tthis.progressiveLoad = true;\r\n\t}\r\n\r\n\ttrackChanges(){\r\n\t\tthis.dispatch(\"page-changed\");\r\n\t}\r\n\r\n\tsetDisplayIndex(index){\r\n\t\tthis.displayIndex = index;\r\n\t}\r\n\r\n\tgetDisplayIndex(){\r\n\t\treturn this.displayIndex;\r\n\t}\r\n\r\n\t//calculate maximum page from number of rows\r\n\tsetMaxRows(rowCount){\r\n\t\tif(!rowCount){\r\n\t\t\tthis.max = 1;\r\n\t\t}else{\r\n\t\t\tthis.max = this.size === true ? 1 : Math.ceil(rowCount/this.size);\r\n\t\t}\r\n\r\n\t\tif(this.page > this.max){\r\n\t\t\tthis.page = this.max;\r\n\t\t}\r\n\t}\r\n\r\n\t//reset to first page without triggering action\r\n\treset(force){\r\n\t\tif(!this.initialLoad){\r\n\t\t\tif(this.mode == \"local\" || force){\r\n\t\t\t\tthis.page = 1;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//set the maxmum page\r\n\tsetMaxPage(max){\r\n\r\n\t\tmax = parseInt(max);\r\n\r\n\t\tthis.max = max || 1;\r\n\r\n\t\tif(this.page > this.max){\r\n\t\t\tthis.page = this.max;\r\n\t\t\tthis.trigger();\r\n\t\t}\r\n\t}\r\n\r\n\t//set current page number\r\n\tsetPage(page){\r\n\t\tswitch(page){\r\n\t\t\tcase \"first\":\r\n\t\t\treturn this.setPage(1);\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"prev\":\r\n\t\t\treturn this.previousPage();\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"next\":\r\n\t\t\treturn this.nextPage();\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"last\":\r\n\t\t\treturn this.setPage(this.max);\r\n\t\t\tbreak;\r\n\t\t}\r\n\r\n\r\n\t\tpage = parseInt(page);\r\n\r\n\t\tif((page > 0 && page <= this.max) || this.mode !== \"local\"){\r\n\t\t\tthis.page = page;\r\n\r\n\t\t\tthis.trackChanges();\r\n\r\n\t\t\treturn this.trigger();\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Pagination Error - Requested page is out of range of 1 - \" + this.max + \":\", page);\r\n\t\t\treturn Promise.reject();\r\n\t\t}\r\n\t}\r\n\r\n\tsetPageToRow(row){\r\n\t\tvar rows = this.table.rowManager.getDisplayRows(this.displayIndex - 1);\r\n\t\tvar index = rows.indexOf(row);\r\n\r\n\t\tif(index > -1){\r\n\t\t\tvar page = this.size === true ? 1 : Math.ceil((index + 1) / this.size);\r\n\r\n\t\t\treturn this.setPage(page)\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Pagination Error - Requested row is not visible\");\r\n\t\t\treturn Promise.reject();\r\n\t\t}\r\n\t}\r\n\r\n\tsetPageSize(size){\r\n\t\tif(size !== true){\r\n\t\t\tsize = parseInt(size);\r\n\t\t}\r\n\r\n\t\tif(size > 0){\r\n\t\t\tthis.size = size;\r\n\t\t}\r\n\r\n\t\tif(this.pageSizeSelect){\r\n\t\t\t// this.pageSizeSelect.value = size;\r\n\t\t\tthis.generatePageSizeSelectList();\r\n\t\t}\r\n\r\n\t\tthis.trackChanges();\r\n\t}\r\n\r\n\t//setup the pagination buttons\r\n\t_setPageButtons(){\r\n\t\tlet leftSize = Math.floor((this.count-1) / 2);\r\n\t\tlet rightSize = Math.ceil((this.count-1) / 2);\r\n\t\tlet min = this.max - this.page + leftSize + 1 < this.count ? this.max-this.count+1: Math.max(this.page-leftSize,1);\r\n\t\tlet max = this.page <= rightSize? Math.min(this.count, this.max) :Math.min(this.page+rightSize, this.max);\r\n\r\n\t\twhile(this.pagesElement.firstChild) this.pagesElement.removeChild(this.pagesElement.firstChild);\r\n\r\n\t\tif(this.page == 1){\r\n\t\t\tthis.firstBut.disabled = true;\r\n\t\t\tthis.prevBut.disabled = true;\r\n\t\t}else{\r\n\t\t\tthis.firstBut.disabled = false;\r\n\t\t\tthis.prevBut.disabled = false;\r\n\t\t}\r\n\r\n\t\tif(this.page == this.max){\r\n\t\t\tthis.lastBut.disabled = true;\r\n\t\t\tthis.nextBut.disabled = true;\r\n\t\t}else{\r\n\t\t\tthis.lastBut.disabled = false;\r\n\t\t\tthis.nextBut.disabled = false;\r\n\t\t}\r\n\r\n\t\tfor(let i = min; i <= max; i++){\r\n\t\t\tif(i>0 && i <= this.max){\r\n\t\t\t\tthis.pagesElement.appendChild(this._generatePageButton(i));\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.footerRedraw();\r\n\t}\r\n\r\n\t_generatePageButton(page){\r\n\t\tvar button = document.createElement(\"button\");\r\n\r\n\t\tbutton.classList.add(\"tabulator-page\");\r\n\t\tif(page == this.page){\r\n\t\t\tbutton.classList.add(\"active\");\r\n\t\t}\r\n\r\n\t\tbutton.setAttribute(\"type\", \"button\");\r\n\t\tbutton.setAttribute(\"role\", \"button\");\r\n\r\n\t\tthis.langBind(\"pagination|page_title\", (value) => {\r\n\t\t\tbutton.setAttribute(\"aria-label\", value + \" \" + page);\r\n\t\t\tbutton.setAttribute(\"title\", value + \" \" + page);\r\n\t\t});\r\n\r\n\t\tbutton.setAttribute(\"data-page\", page);\r\n\t\tbutton.textContent = page;\r\n\r\n\t\tbutton.addEventListener(\"click\", (e) => {\r\n\t\t\tthis.setPage(page)\r\n\t\t});\r\n\r\n\t\treturn button;\r\n\t}\r\n\r\n\t//previous page\r\n\tpreviousPage(){\r\n\t\tif(this.page > 1){\r\n\t\t\tthis.page--;\r\n\r\n\t\t\tthis.trackChanges();\r\n\r\n\t\t\treturn this.trigger()\r\n\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Pagination Error - Previous page would be less than page 1:\", 0);\r\n\t\t\treturn Promise.reject();\r\n\t\t}\r\n\t}\r\n\r\n\t//next page\r\n\tnextPage(){\r\n\t\tif(this.page < this.max){\r\n\t\t\tthis.page++;\r\n\r\n\t\t\tthis.trackChanges();\r\n\r\n\t\t\treturn this.trigger();\r\n\r\n\t\t}else{\r\n\t\t\tif(!this.progressiveLoad){\r\n\t\t\t\tconsole.warn(\"Pagination Error - Next page would be greater than maximum page of \" + this.max + \":\", this.max + 1);\r\n\t\t\t}\r\n\t\t\treturn Promise.reject();\r\n\t\t}\r\n\t}\r\n\r\n\t//return current page number\r\n\tgetPage(){\r\n\t\treturn this.page;\r\n\t}\r\n\r\n\t//return max page number\r\n\tgetPageMax(){\r\n\t\treturn this.max;\r\n\t}\r\n\r\n\tgetPageSize(size){\r\n\t\treturn this.size;\r\n\t}\r\n\r\n\tgetMode(){\r\n\t\treturn this.mode;\r\n\t}\r\n\r\n\t//return appropriate rows for current page\r\n\tgetRows(data){\r\n\t\tvar output, start, end;\r\n\r\n\t\tif(this.mode == \"local\"){\r\n\t\t\toutput = [];\r\n\r\n\t\t\tthis.setMaxRows(data.length);\r\n\r\n\t\t\tif(this.size === true){\r\n\t\t\t\tstart = 0;\r\n\t\t\t\tend = data.length;\r\n\t\t\t}else{\r\n\t\t\t\tstart = this.size * (this.page - 1);\r\n\t\t\t\tend = start + parseInt(this.size);\r\n\t\t\t}\r\n\r\n\r\n\t\t\tthis._setPageButtons();\r\n\r\n\t\t\tfor(let i = start; i < end; i++){\r\n\t\t\t\tif(data[i]){\r\n\t\t\t\t\toutput.push(data[i]);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn output;\r\n\t\t}else{\r\n\t\t\tthis._setPageButtons();\r\n\r\n\t\t\treturn data.slice(0);\r\n\t\t}\r\n\t}\r\n\r\n\ttrigger(){\r\n\t\tvar left;\r\n\r\n\t\tswitch(this.mode){\r\n\t\t\tcase \"local\":\r\n\t\t\tleft = this.table.rowManager.scrollLeft;\r\n\r\n\t\t\tthis.refreshData();\r\n\t\t\tthis.table.rowManager.scrollHorizontal(left);\r\n\r\n\t\t\tthis.dispatchExternal(\"pageLoaded\", this.getPage());\r\n\r\n\t\t\treturn Promise.resolve();\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"remote\":\r\n\t\t\tthis.dataChanging = true;\r\n\t\t\treturn this.reloadData(null)\r\n\t\t\t.finally(() => {\r\n\t\t\t\tthis.dataChanging = false;\r\n\t\t\t})\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"progressive_load\":\r\n\t\t\tcase \"progressive_scroll\":\r\n\t\t\treturn this.reloadData(null, true);\r\n\t\t\tbreak;\r\n\r\n\t\t\tdefault:\r\n\t\t\tconsole.warn(\"Pagination Error - no such pagination mode:\", this.mode);\r\n\t\t\treturn Promise.reject();\r\n\t\t}\r\n\t}\r\n\r\n\t_parseRemoteData(data){\r\n\t\tvar left, data, margin;\r\n\r\n\t\tif(typeof data.last_page === \"undefined\"){\r\n\t\t\tconsole.warn(\"Remote Pagination Error - Server response missing '\" + this.dataReceivedNames.last_page + \"' property\");\r\n\t\t}\r\n\r\n\t\tif(data.data){\r\n\t\t\tthis.max = parseInt(data.last_page) || 1;\r\n\r\n\t\t\tif(this.progressiveLoad){\r\n\t\t\t\tswitch(this.mode){\r\n\t\t\t\t\tcase \"progressive_load\":\r\n\r\n\t\t\t\t\tif(this.page == 1){\r\n\t\t\t\t\t\tthis.table.rowManager.setData(data.data, false, this.page == 1)\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tthis.table.rowManager.addRows(data.data);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif(this.page < this.max){\r\n\t\t\t\t\t\tsetTimeout(() => {\r\n\t\t\t\t\t\t\tthis.nextPage();\r\n\t\t\t\t\t\t}, this.table.options.progressiveLoadDelay);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase \"progressive_scroll\":\r\n\t\t\t\t\tdata = this.table.rowManager.getData().concat(data.data);\r\n\r\n\t\t\t\t\tthis.table.rowManager.setData(data, this.page !== 1, this.page == 1);\r\n\r\n\t\t\t\t\tmargin = this.table.options.progressiveLoadScrollMargin || (this.table.rowManager.element.clientHeight * 2);\r\n\r\n\t\t\t\t\tif(this.table.rowManager.element.scrollHeight <= (this.table.rowManager.element.clientHeight + margin)){\r\n\t\t\t\t\t\tsetTimeout(() => {\r\n\t\t\t\t\t\t\tthis.nextPage();\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn false;\r\n\t\t\t}else{\r\n\t\t\t\t// left = this.table.rowManager.scrollLeft;\r\n\t\t\t\tthis.dispatchExternal(\"pageLoaded\", this.getPage());\r\n\t\t\t\t// this.table.rowManager.scrollHorizontal(left);\r\n\t\t\t\t// this.table.columnManager.scrollHorizontal(left);\r\n\t\t\t}\r\n\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Remote Pagination Error - Server response missing '\" + this.dataReceivedNames.data + \"' property\");\r\n\t\t}\r\n\r\n\t\treturn data.data;\r\n\t}\r\n\r\n\t//handle the footer element being redrawn\r\n\tfooterRedraw(){\r\n\t\tvar footer = this.table.footerManager.element;\r\n\r\n\t\tif((Math.ceil(footer.clientWidth) - footer.scrollWidth) < 0){\r\n\t\t\tthis.pagesElement.style.display = 'none';\r\n\t\t}else{\r\n\t\t\tthis.pagesElement.style.display = '';\r\n\r\n\t\t\tif((Math.ceil(footer.clientWidth) - footer.scrollWidth) < 0){\r\n\t\t\t\tthis.pagesElement.style.display = 'none';\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n\r\nPage.moduleName = \"page\";\r\n\r\nexport default Page;","// read peristence information from storage\r\nexport default {\r\n\tlocal:function(id, type){\r\n\t\tvar data = localStorage.getItem(id + \"-\" + type);\r\n\r\n\t\treturn data ? JSON.parse(data) : false;\r\n\t},\r\n\tcookie:function(id, type){\r\n\t\tvar cookie = document.cookie,\r\n\t\tkey = id + \"-\" + type,\r\n\t\tcookiePos = cookie.indexOf(key + \"=\"),\r\n\t\tend, data;\r\n\r\n\t\t//if cookie exists, decode and load column data into tabulator\r\n\t\tif(cookiePos > -1){\r\n\t\t\tcookie = cookie.substr(cookiePos);\r\n\r\n\t\t\tend = cookie.indexOf(\";\");\r\n\r\n\t\t\tif(end > -1){\r\n\t\t\t\tcookie = cookie.substr(0, end);\r\n\t\t\t}\r\n\r\n\t\t\tdata = cookie.replace(key + \"=\", \"\");\r\n\t\t}\r\n\r\n\t\treturn data ? JSON.parse(data) : false;\r\n\t}\r\n};","//write persistence information to storage\r\nexport default {\r\n\tlocal:function(id, type, data){\r\n\t\tlocalStorage.setItem(id + \"-\" + type, JSON.stringify(data));\r\n\t},\r\n\tcookie:function(id, type, data){\r\n\t\tvar expireDate = new Date();\r\n\r\n\t\texpireDate.setDate(expireDate.getDate() + 10000);\r\n\r\n\t\tdocument.cookie = id + \"-\" + type + \"=\" + JSON.stringify(data) + \"; expires=\" + expireDate.toUTCString();\r\n\t}\r\n};","import Module from '../../core/Module.js';\r\n\r\nimport defaultReaders from './defaults/readers.js';\r\nimport defaultWriters from './defaults/writers.js';\r\n\r\nclass Persistence extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.mode = \"\";\r\n\t\tthis.id = \"\";\r\n\t\t// this.persistProps = [\"field\", \"width\", \"visible\"];\r\n\t\tthis.defWatcherBlock = false;\r\n\t\tthis.config = {};\r\n\t\tthis.readFunc = false;\r\n\t\tthis.writeFunc = false;\r\n\r\n\t\tthis.registerTableOption(\"persistence\", false);\r\n\t\tthis.registerTableOption(\"persistenceID\", \"\"); //key for persistent storage\r\n\t\tthis.registerTableOption(\"persistenceMode\", true); //mode for storing persistence information\r\n\t\tthis.registerTableOption(\"persistenceReaderFunc\", false); //function for handling persistence data reading\r\n\t\tthis.registerTableOption(\"persistenceWriterFunc\", false); //function for handling persistence data writing\r\n\t}\r\n\r\n\t// Test for whether localStorage is available for use.\r\n\tlocalStorageTest() {\r\n\t\tvar testKey = \"_tabulator_test\";\r\n\r\n\t\ttry {\r\n\t\t\twindow.localStorage.setItem( testKey, testKey);\r\n\t\t\twindow.localStorage.removeItem( testKey );\r\n\t\t\treturn true;\r\n\t\t} catch(e) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\t//setup parameters\r\n\tinitialize(){\r\n\t\tif(this.table.options.persistence){\r\n\t\t\t//determine persistent layout storage type\r\n\t\t\tvar mode = this.table.options.persistenceMode,\r\n\t\t\tid = this.table.options.persistenceID,\r\n\t\t\tretreivedData;\r\n\r\n\t\t\tthis.mode = mode !== true ? mode : (this.localStorageTest() ? \"local\" : \"cookie\");\r\n\r\n\t\t\tif(this.table.options.persistenceReaderFunc){\r\n\t\t\t\tif(typeof this.table.options.persistenceReaderFunc === \"function\"){\r\n\t\t\t\t\tthis.readFunc = this.table.options.persistenceReaderFunc;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tif(Persistence.readers[this.table.options.persistenceReaderFunc]){\r\n\t\t\t\t\t\tthis.readFunc = Persistence.readers[this.table.options.persistenceReaderFunc];\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tconsole.warn(\"Persistence Read Error - invalid reader set\", this.table.options.persistenceReaderFunc);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tif(Persistence.readers[this.mode]){\r\n\t\t\t\t\tthis.readFunc = Persistence.readers[this.mode];\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.warn(\"Persistence Read Error - invalid reader set\", this.mode);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif(this.table.options.persistenceWriterFunc){\r\n\t\t\t\tif(typeof this.table.options.persistenceWriterFunc === \"function\"){\r\n\t\t\t\t\tthis.writeFunc = this.table.options.persistenceWriterFunc;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tif(Persistence.writers[this.table.options.persistenceWriterFunc]){\r\n\t\t\t\t\t\tthis.writeFunc = Persistence.writers[this.table.options.persistenceWriterFunc];\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tconsole.warn(\"Persistence Write Error - invalid reader set\", this.table.options.persistenceWriterFunc);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tif(Persistence.writers[this.mode]){\r\n\t\t\t\t\tthis.writeFunc = Persistence.writers[this.mode];\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.warn(\"Persistence Write Error - invalid writer set\", this.mode);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t//set storage tag\r\n\t\t\tthis.id = \"tabulator-\" + (id || (this.table.element.getAttribute(\"id\") || \"\"));\r\n\r\n\t\t\tthis.config = {\r\n\t\t\t\tsort:this.table.options.persistence === true || this.table.options.persistence.sort,\r\n\t\t\t\tfilter:this.table.options.persistence === true || this.table.options.persistence.filter,\r\n\t\t\t\tgroup:this.table.options.persistence === true || this.table.options.persistence.group,\r\n\t\t\t\tpage:this.table.options.persistence === true || this.table.options.persistence.page,\r\n\t\t\t\tcolumns:this.table.options.persistence === true ? [\"title\", \"width\", \"visible\"] : this.table.options.persistence.columns,\r\n\t\t\t};\r\n\r\n\t\t\t//load pagination data if needed\r\n\t\t\tif(this.config.page){\r\n\t\t\t\tretreivedData = this.retreiveData(\"page\");\r\n\r\n\t\t\t\tif(retreivedData){\r\n\t\t\t\t\tif(typeof retreivedData.paginationSize !== \"undefined\" && (this.config.page === true || this.config.page.size)){\r\n\t\t\t\t\t\tthis.table.options.paginationSize = retreivedData.paginationSize;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif(typeof retreivedData.paginationInitialPage !== \"undefined\" && (this.config.page === true || this.config.page.page)){\r\n\t\t\t\t\t\tthis.table.options.paginationInitialPage = retreivedData.paginationInitialPage;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t//load group data if needed\r\n\t\t\tif(this.config.group){\r\n\t\t\t\tretreivedData = this.retreiveData(\"group\");\r\n\r\n\t\t\t\tif(retreivedData){\r\n\t\t\t\t\tif(typeof retreivedData.groupBy !== \"undefined\" && (this.config.group === true || this.config.group.groupBy)){\r\n\t\t\t\t\t\tthis.table.options.groupBy = retreivedData.groupBy;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif(typeof retreivedData.groupStartOpen !== \"undefined\" && (this.config.group === true || this.config.group.groupStartOpen)){\r\n\t\t\t\t\t\tthis.table.options.groupStartOpen = retreivedData.groupStartOpen;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif(typeof retreivedData.groupHeader !== \"undefined\" && (this.config.group === true || this.config.group.groupHeader)){\r\n\t\t\t\t\t\tthis.table.options.groupHeader = retreivedData.groupHeader;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif(this.config.columns){\r\n\t\t\t\tthis.table.options.columns = this.load(\"columns\", this.table.options.columns);\r\n\t\t\t\tthis.subscribe(\"column-init\", this.initializeColumn.bind(this));\r\n\t\t\t\tthis.subscribe(\"column-show\", this.save.bind(this, \"columns\"));\r\n\t\t\t\tthis.subscribe(\"column-hide\", this.save.bind(this, \"columns\"));\r\n\t\t\t\tthis.subscribe(\"column-moved\", this.save.bind(this, \"columns\"));\r\n\t\t\t\tthis.subscribe(\"table-built\", this.tableBuilt.bind(this), 0);\r\n\t\t\t}\r\n\r\n\t\t\tthis.subscribe(\"table-redraw\", this.tableRedraw.bind(this));\r\n\r\n\r\n\t\t\tthis.subscribe(\"filter-changed\", this.eventSave.bind(this, \"filter\"));\r\n\t\t\tthis.subscribe(\"sort-changed\", this.eventSave.bind(this, \"sort\"));\r\n\t\t\tthis.subscribe(\"group-changed\", this.eventSave.bind(this, \"group\"));\r\n\t\t\tthis.subscribe(\"page-changed\", this.eventSave.bind(this, \"page\"));\r\n\t\t\tthis.subscribe(\"column-resized\", this.eventSave.bind(this, \"columns\"));\r\n\t\t\tthis.subscribe(\"layout-refreshed\", this.eventSave.bind(this, \"columns\"));\r\n\t\t}\r\n\r\n\t\tthis.registerTableFunction(\"getColumnLayout\", this.getColumnLayout.bind(this));\r\n\t\tthis.registerTableFunction(\"setColumnLayout\", this.setColumnLayout.bind(this));\r\n\t}\r\n\r\n\teventSave(type){\r\n\t\tif(this.config[type]){\r\n\t\t\tthis.save(type);\r\n\t\t}\r\n\t}\r\n\r\n\ttableBuilt(){\r\n\t\tvar options = this.table.options,\r\n\t\tsorters, filters;\r\n\r\n\t\tif(this.config.sort){\r\n\t\t\tsorters = this.load(\"sort\");\r\n\r\n\t\t\tif(!sorters === false){\r\n\t\t\t\tthis.table.initialSort = sorters;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(this.config.filter){\r\n\t\t\tfilters = this.load(\"filter\");\r\n\r\n\t\t\tif(!filters === false){\r\n\t\t\t\tthis.table.initialFilter = filters;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\ttableRedraw(force){\r\n\t\tif(force && this.config.columns){\r\n\t\t\tthis.save(\"columns\");\r\n\t\t}\r\n\t}\r\n\r\n\t///////////////////////////////////\r\n\t///////// Table Functions /////////\r\n\t///////////////////////////////////\r\n\r\n\tgetColumnLayout(){\r\n\t\treturn this.parseColumns(this.table.columnManager.getColumns());\r\n\t}\r\n\r\n\tsetColumnLayout(layout){\r\n\t\tthis.table.columnManager.setColumns(this.mergeDefinition(this.table.options.columns, layout))\r\n\t\treturn true;\r\n\t}\r\n\r\n\t///////////////////////////////////\r\n\t///////// Internal Logic //////////\r\n\t///////////////////////////////////\r\n\r\n\tinitializeColumn(column){\r\n\t\tvar def, keys;\r\n\r\n\t\tif(this.config.columns){\r\n\t\t\tthis.defWatcherBlock = true;\r\n\r\n\t\t\tdef = column.getDefinition();\r\n\r\n\t\t\tkeys = this.config.columns === true ? Object.keys(def) : this.config.columns;\r\n\r\n\t\t\tkeys.forEach((key)=>{\r\n\t\t\t\tvar props = Object.getOwnPropertyDescriptor(def, key);\r\n\t\t\t\tvar value = def[key];\r\n\t\t\t\tif(props){\r\n\t\t\t\t\tObject.defineProperty(def, key, {\r\n\t\t\t\t\t\tset: function(newValue){\r\n\t\t\t\t\t\t\tvalue = newValue;\r\n\r\n\t\t\t\t\t\t\tif(!this.defWatcherBlock){\r\n\t\t\t\t\t\t\t\tthis.save(\"columns\");\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\tif(props.set){\r\n\t\t\t\t\t\t\t\tprops.set(newValue);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tget:function(){\r\n\t\t\t\t\t\t\tif(props.get){\r\n\t\t\t\t\t\t\t\tprops.get();\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\treturn value;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tthis.defWatcherBlock = false;\r\n\t\t}\r\n\t}\r\n\r\n\t//load saved definitions\r\n\tload(type, current){\r\n\t\tvar data = this.retreiveData(type);\r\n\r\n\t\tif(current){\r\n\t\t\tdata = data ? this.mergeDefinition(current, data) : current;\r\n\t\t}\r\n\r\n\t\treturn data;\r\n\t}\r\n\r\n\t//retreive data from memory\r\n\tretreiveData(type){\r\n\t\treturn this.readFunc ? this.readFunc(this.id, type) : false;\r\n\t}\r\n\r\n\t//merge old and new column definitions\r\n\tmergeDefinition(oldCols, newCols){\r\n\t\tvar output = [];\r\n\r\n\t\tnewCols = newCols || [];\r\n\r\n\t\tnewCols.forEach((column, to) => {\r\n\t\t\tvar from = this._findColumn(oldCols, column),\r\n\t\t\tkeys;\r\n\r\n\t\t\tif(from){\r\n\t\t\t\tif(this.config.columns === true || this.config.columns == undefined){\r\n\t\t\t\t\tkeys = Object.keys(from);\r\n\t\t\t\t\tkeys.push(\"width\");\r\n\t\t\t\t}else{\r\n\t\t\t\t\tkeys = this.config.columns;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tkeys.forEach((key)=>{\r\n\t\t\t\t\tif(key !== \"columns\" && typeof column[key] !== \"undefined\"){\r\n\t\t\t\t\t\tfrom[key] = column[key];\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\tif(from.columns){\r\n\t\t\t\t\tfrom.columns = this.mergeDefinition(from.columns, column.columns);\r\n\t\t\t\t}\r\n\r\n\t\t\t\toutput.push(from);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\toldCols.forEach((column, i) => {\r\n\t\t\tvar from = this._findColumn(newCols, column);\r\n\r\n\t\t\tif (!from) {\r\n\t\t\t\tif(output.length>i){\r\n\t\t\t\t\toutput.splice(i, 0, column);\r\n\t\t\t\t}else{\r\n\t\t\t\t\toutput.push(column);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\t//find matching columns\r\n\t_findColumn(columns, subject){\r\n\t\tvar type = subject.columns ? \"group\" : (subject.field ? \"field\" : \"object\");\r\n\r\n\t\treturn columns.find(function(col){\r\n\t\t\tswitch(type){\r\n\t\t\t\tcase \"group\":\r\n\t\t\t\treturn col.title === subject.title && col.columns.length === subject.columns.length;\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"field\":\r\n\t\t\t\treturn col.field === subject.field;\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"object\":\r\n\t\t\t\treturn col === subject;\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t//save data\r\n\tsave(type){\r\n\t\tvar data = {};\r\n\r\n\t\tswitch(type){\r\n\t\t\tcase \"columns\":\r\n\t\t\tdata = this.parseColumns(this.table.columnManager.getColumns())\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"filter\":\r\n\t\t\tdata = this.table.modules.filter.getFilters();\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"sort\":\r\n\t\t\tdata = this.validateSorters(this.table.modules.sort.getSort());\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"group\":\r\n\t\t\tdata = this.getGroupConfig();\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"page\":\r\n\t\t\tdata = this.getPageConfig();\r\n\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\tif(this.writeFunc){\r\n\t\t\tthis.writeFunc(this.id, type, data);\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t//ensure sorters contain no function data\r\n\tvalidateSorters(data){\r\n\t\tdata.forEach(function(item){\r\n\t\t\titem.column = item.field;\r\n\t\t\tdelete item.field;\r\n\t\t});\r\n\r\n\t\treturn data;\r\n\t}\r\n\r\n\tgetGroupConfig(){\r\n\t\tvar data = {};\r\n\r\n\t\tif(this.config.group){\r\n\t\t\tif(this.config.group === true || this.config.group.groupBy){\r\n\t\t\t\tdata.groupBy = this.table.options.groupBy;\r\n\t\t\t}\r\n\r\n\t\t\tif(this.config.group === true || this.config.group.groupStartOpen){\r\n\t\t\t\tdata.groupStartOpen = this.table.options.groupStartOpen;\r\n\t\t\t}\r\n\r\n\t\t\tif(this.config.group === true || this.config.group.groupHeader){\r\n\t\t\t\tdata.groupHeader = this.table.options.groupHeader;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn data;\r\n\t}\r\n\r\n\tgetPageConfig(){\r\n\t\tvar data = {};\r\n\r\n\t\tif(this.config.page){\r\n\t\t\tif(this.config.page === true || this.config.page.size){\r\n\t\t\t\tdata.paginationSize = this.table.modules.page.getPageSize();\r\n\t\t\t}\r\n\r\n\t\t\tif(this.config.page === true || this.config.page.page){\r\n\t\t\t\tdata.paginationInitialPage = this.table.modules.page.getPage();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn data;\r\n\t}\r\n\r\n\r\n\t//parse columns for data to store\r\n\tparseColumns(columns){\r\n\t\tvar definitions = [],\r\n\t\texcludedKeys = [\"headerContextMenu\", \"headerMenu\", \"contextMenu\", \"clickMenu\"];\r\n\r\n\t\tcolumns.forEach((column) => {\r\n\t\t\tvar defStore = {},\r\n\t\t\tcolDef = column.getDefinition(),\r\n\t\t\tkeys;\r\n\r\n\t\t\tif(column.isGroup){\r\n\t\t\t\tdefStore.title = colDef.title;\r\n\t\t\t\tdefStore.columns = this.parseColumns(column.getColumns());\r\n\t\t\t}else{\r\n\t\t\t\tdefStore.field = column.getField();\r\n\r\n\t\t\t\tif(this.config.columns === true || this.config.columns == undefined){\r\n\t\t\t\t\tkeys = Object.keys(colDef);\r\n\t\t\t\t\tkeys.push(\"width\");\r\n\t\t\t\t}else{\r\n\t\t\t\t\tkeys = this.config.columns;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tkeys.forEach((key)=>{\r\n\t\t\t\t\tswitch(key){\r\n\t\t\t\t\t\tcase \"width\":\r\n\t\t\t\t\t\tdefStore.width = column.getWidth();\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase \"visible\":\r\n\t\t\t\t\t\tdefStore.visible = column.visible;\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\tdefault:\r\n\t\t\t\t\t\tif(typeof colDef[key] !== \"function\" && excludedKeys.indexOf(key) === -1){\r\n\t\t\t\t\t\t\tdefStore[key] = colDef[key];\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\tdefinitions.push(defStore);\r\n\t\t});\r\n\r\n\t\treturn definitions;\r\n\t}\r\n}\r\n\r\nPersistence.moduleName = \"persistence\";\r\n\r\n//load defaults\r\nPersistence.readers = defaultReaders;\r\nPersistence.writers = defaultWriters;\r\n\r\nexport default Persistence;","import Module from '../../core/Module.js';\r\n\r\nclass Print extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.element = false;\r\n\t\tthis.manualBlock = false;\r\n\r\n\t\tthis.registerTableOption(\"printAsHtml\", false); //enable print as html\r\n\t\tthis.registerTableOption(\"printFormatter\", false); //printing page formatter\r\n\t\tthis.registerTableOption(\"printHeader\", false); //page header contents\r\n\t\tthis.registerTableOption(\"printFooter\", false); //page footer contents\r\n\t\tthis.registerTableOption(\"printStyled\", true); //enable print as html styling\r\n\t\tthis.registerTableOption(\"printRowRange\", \"visible\"); //restrict print to visible rows only\r\n\t\tthis.registerTableOption(\"printConfig\", {}); //print config options\r\n\r\n\t\tthis.registerColumnOption(\"print\");\r\n\t\tthis.registerColumnOption(\"titlePrint\");\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tif(this.table.options.printAsHtml){\r\n\t\t\twindow.addEventListener(\"beforeprint\", this.replaceTable.bind(this));\r\n\t\t\twindow.addEventListener(\"afterprint\", this.cleanup.bind(this));\r\n\t\t}\r\n\r\n\t\tthis.registerTableFunction(\"print\", this.printFullscreen.bind(this));\r\n\t}\r\n\r\n\t///////////////////////////////////\r\n\t///////// Table Functions /////////\r\n\t///////////////////////////////////\r\n\r\n\t///////////////////////////////////\r\n\t///////// Internal Logic //////////\r\n\t///////////////////////////////////\r\n\r\n\treplaceTable(){\r\n\t\tif(!this.manualBlock){\r\n\t\t\tthis.element = document.createElement(\"div\");\r\n\t\t\tthis.element.classList.add(\"tabulator-print-table\");\r\n\r\n\t\t\tthis.element.appendChild(this.table.modules.export.genereateTable(this.table.options.printConfig, this.table.options.printStyled, this.table.options.printRowRange, \"print\"));\r\n\r\n\t\t\tthis.table.element.style.display = \"none\";\r\n\r\n\t\t\tthis.table.element.parentNode.insertBefore(this.element, this.table.element);\r\n\t\t}\r\n\t}\r\n\r\n\tcleanup(){\r\n\t\tdocument.body.classList.remove(\"tabulator-print-fullscreen-hide\");\r\n\r\n\t\tif(this.element && this.element.parentNode){\r\n\t\t\tthis.element.parentNode.removeChild(this.element);\r\n\t\t\tthis.table.element.style.display = \"\";\r\n\t\t}\r\n\t}\r\n\r\n\tprintFullscreen(visible, style, config){\r\n\t\tvar scrollX = window.scrollX,\r\n\t\tscrollY = window.scrollY,\r\n\t\theaderEl = document.createElement(\"div\"),\r\n\t\tfooterEl = document.createElement(\"div\"),\r\n\t\ttableEl = this.table.modules.export.genereateTable(typeof config != \"undefined\" ? config : this.table.options.printConfig, typeof style != \"undefined\" ? style : this.table.options.printStyled, visible || this.table.options.printRowRange, \"print\"),\r\n\t\theaderContent, footerContent;\r\n\r\n\t\tthis.manualBlock = true;\r\n\r\n\t\tthis.element = document.createElement(\"div\");\r\n\t\tthis.element.classList.add(\"tabulator-print-fullscreen\");\r\n\r\n\t\tif(this.table.options.printHeader){\r\n\t\t\theaderEl.classList.add(\"tabulator-print-header\");\r\n\r\n\t\t\theaderContent = typeof this.table.options.printHeader == \"function\" ? this.table.options.printHeader.call(this.table) : this.table.options.printHeader;\r\n\r\n\t\t\tif(typeof headerContent == \"string\"){\r\n\t\t\t\theaderEl.innerHTML = headerContent;\r\n\t\t\t}else{\r\n\t\t\t\theaderEl.appendChild(headerContent);\r\n\t\t\t}\r\n\r\n\t\t\tthis.element.appendChild(headerEl);\r\n\t\t}\r\n\r\n\t\tthis.element.appendChild(tableEl);\r\n\r\n\t\tif(this.table.options.printFooter){\r\n\t\t\tfooterEl.classList.add(\"tabulator-print-footer\");\r\n\r\n\t\t\tfooterContent = typeof this.table.options.printFooter == \"function\" ? this.table.options.printFooter.call(this.table) : this.table.options.printFooter;\r\n\r\n\r\n\t\t\tif(typeof footerContent == \"string\"){\r\n\t\t\t\tfooterEl.innerHTML = footerContent;\r\n\t\t\t}else{\r\n\t\t\t\tfooterEl.appendChild(footerContent);\r\n\t\t\t}\r\n\r\n\t\t\tthis.element.appendChild(footerEl);\r\n\t\t}\r\n\r\n\t\tdocument.body.classList.add(\"tabulator-print-fullscreen-hide\");\r\n\t\tdocument.body.appendChild(this.element);\r\n\r\n\t\tif(this.table.options.printFormatter){\r\n\t\t\tthis.table.options.printFormatter(this.element, tableEl);\r\n\t\t}\r\n\r\n\t\twindow.print();\r\n\r\n\t\tthis.cleanup();\r\n\r\n\t\twindow.scrollTo(scrollX, scrollY);\r\n\r\n\t\tthis.manualBlock = false;\r\n\t}\r\n}\r\n\r\nPrint.moduleName = \"print\";\r\n\r\nexport default Print;","import Module from '../../core/Module.js';\r\n\r\nclass ReactiveData extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.data = false;\r\n\t\tthis.blocked = false; //block reactivity while performing update\r\n\t\tthis.origFuncs = {}; // hold original data array functions to allow replacement after data is done with\r\n\t\tthis.currentVersion = 0;\r\n\r\n\t\tthis.registerTableOption(\"reactiveData\", false); //enable data reactivity\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tif(this.table.options.reactiveData){\r\n\t\t\tthis.subscribe(\"cell-value-save-before\", this.block.bind(this));\r\n\t\t\tthis.subscribe(\"cell-value-save-after\", this.unblock.bind(this));\r\n\t\t\tthis.subscribe(\"row-data-save-before\", this.block.bind(this));\r\n\t\t\tthis.subscribe(\"row-data-save-after\", this.unblock.bind(this));\r\n\t\t\tthis.subscribe(\"row-data-init-after\", this.watchRow.bind(this));\r\n\t\t\tthis.subscribe(\"data-processing\", this.watchData.bind(this));\r\n\t\t\tthis.subscribe(\"data-processing\", this.watchData.bind(this));\r\n\t\t\tthis.subscribe(\"table-destroy\", this.unwatchData.bind(this));\r\n\t\t}\r\n\t}\r\n\r\n\twatchData(data){\r\n\t\tvar self = this,\r\n\t\tpushFunc, version;\r\n\r\n\t\tthis.currentVersion ++;\r\n\r\n\t\tversion = this.currentVersion;\r\n\r\n\t\tself.unwatchData();\r\n\r\n\t\tself.data = data;\r\n\r\n\t\t//override array push function\r\n\t\tself.origFuncs.push = data.push;\r\n\r\n\t\tObject.defineProperty(self.data, \"push\", {\r\n\t\t\tenumerable: false,\r\n\t\t\tconfigurable: true,\r\n\t\t\tvalue: function () {\r\n\t\t\t\tvar args = Array.from(arguments);\r\n\r\n\t\t\t\tif(!self.blocked && version === self.currentVersion){\r\n\t\t\t\t\targs.forEach(function (arg){\r\n\t\t\t\t\t\tself.table.rowManager.addRowActual(arg, false);\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn self.origFuncs.push.apply(data, arguments);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\t//override array unshift function\r\n\t\tself.origFuncs.unshift = data.unshift;\r\n\r\n\t\tObject.defineProperty(self.data, \"unshift\", {\r\n\t\t\tenumerable: false,\r\n\t\t\tconfigurable: true,\r\n\t\t\tvalue: function () {\r\n\t\t\t\tvar args = Array.from(arguments);\r\n\r\n\t\t\t\tif(!self.blocked && version === self.currentVersion){\r\n\t\t\t\t\targs.forEach(function (arg){\r\n\t\t\t\t\t\tself.table.rowManager.addRowActual(arg, true);\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn self.origFuncs.unshift.apply(data, arguments);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\r\n\t\t//override array shift function\r\n\t\tself.origFuncs.shift = data.shift;\r\n\r\n\t\tObject.defineProperty(self.data, \"shift\", {\r\n\t\t\tenumerable: false,\r\n\t\t\tconfigurable: true,\r\n\t\t\tvalue: function () {\r\n\t\t\t\tvar row;\r\n\r\n\t\t\t\tif(!self.blocked && version === self.currentVersion){\r\n\t\t\t\t\tif(self.data.length){\r\n\t\t\t\t\t\trow = self.table.rowManager.getRowFromDataObject(self.data[0]);\r\n\r\n\t\t\t\t\t\tif(row){\r\n\t\t\t\t\t\t\trow.deleteActual();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn self.origFuncs.shift.call(data);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\t//override array pop function\r\n\t\tself.origFuncs.pop = data.pop;\r\n\r\n\t\tObject.defineProperty(self.data, \"pop\", {\r\n\t\t\tenumerable: false,\r\n\t\t\tconfigurable: true,\r\n\t\t\tvalue: function () {\r\n\t\t\t\tvar row;\r\n\t\t\t\tif(!self.blocked && version === self.currentVersion){\r\n\t\t\t\t\tif(self.data.length){\r\n\t\t\t\t\t\trow = self.table.rowManager.getRowFromDataObject(self.data[self.data.length - 1]);\r\n\r\n\t\t\t\t\t\tif(row){\r\n\t\t\t\t\t\t\trow.deleteActual();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn self.origFuncs.pop.call(data);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\r\n\t\t//override array splice function\r\n\t\tself.origFuncs.splice = data.splice;\r\n\r\n\t\tObject.defineProperty(self.data, \"splice\", {\r\n\t\t\tenumerable: false,\r\n\t\t\tconfigurable: true,\r\n\t\t\tvalue: function () {\r\n\t\t\t\tvar args = Array.from(arguments),\r\n\t\t\t\tstart = args[0] < 0 ? data.length + args[0] : args[0],\r\n\t\t\t\tend = args[1],\r\n\t\t\t\tnewRows = args[2] ? args.slice(2) : false,\r\n\t\t\t\tstartRow;\r\n\r\n\t\t\t\tif(!self.blocked && version === self.currentVersion){\r\n\r\n\t\t\t\t\t//add new rows\r\n\t\t\t\t\tif(newRows){\r\n\t\t\t\t\t\tstartRow = data[start] ? self.table.rowManager.getRowFromDataObject(data[start]) : false;\r\n\r\n\t\t\t\t\t\tif(startRow){\r\n\t\t\t\t\t\t\tnewRows.forEach(function(rowData){\r\n\t\t\t\t\t\t\t\tself.table.rowManager.addRowActual(rowData, true, startRow, true);\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\tnewRows = newRows.slice().reverse();\r\n\r\n\t\t\t\t\t\t\tnewRows.forEach(function(rowData){\r\n\t\t\t\t\t\t\t\tself.table.rowManager.addRowActual(rowData, true, false, true);\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t//delete removed rows\r\n\t\t\t\t\tif(end !== 0){\r\n\t\t\t\t\t\tvar oldRows = data.slice(start, typeof args[1] === \"undefined\" ? args[1] : start + end);\r\n\r\n\t\t\t\t\t\toldRows.forEach(function(rowData, i){\r\n\t\t\t\t\t\t\tvar row = self.table.rowManager.getRowFromDataObject(rowData);\r\n\r\n\t\t\t\t\t\t\tif(row){\r\n\t\t\t\t\t\t\t\trow.deleteActual(i !== oldRows.length - 1);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif(newRows || end !== 0){\r\n\t\t\t\t\t\tself.table.rowManager.reRenderInPosition();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn self.origFuncs.splice.apply(data, arguments);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tunwatchData(){\r\n\t\tif(this.data !== false){\r\n\t\t\tfor(var key in this.origFuncs){\r\n\t\t\t\tObject.defineProperty(this.data, key, {\r\n\t\t\t\t\tenumerable: true,\r\n\t\t\t\t\tconfigurable:true,\r\n\t\t\t\t\twritable:true,\r\n\t\t\t\t\tvalue: this.origFuncs.key,\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\twatchRow(row){\r\n\t\tvar data = row.getData();\r\n\r\n\t\tthis.blocked = true;\r\n\r\n\t\tfor(var key in data){\r\n\t\t\tthis.watchKey(row, data, key);\r\n\t\t}\r\n\r\n\t\tif(this.table.options.dataTree){\r\n\t\t\tthis.watchTreeChildren(row);\r\n\t\t}\r\n\r\n\t\tthis.blocked = false;\r\n\t}\r\n\r\n\twatchTreeChildren (row){\r\n\t\tvar self = this,\r\n\t\tchildField = row.getData()[this.table.options.dataTreeChildField],\r\n\t\torigFuncs = {};\r\n\r\n\t\tfunction rebuildTree(){\r\n\t\t\tself.table.modules.dataTree.initializeRow(row);\r\n\t\t\tself.table.modules.dataTree.layoutRow(row);\r\n\t\t\tself.table.rowManager.refreshActiveData(\"tree\", false, true);\r\n\t\t}\r\n\r\n\t\tif(childField){\r\n\r\n\t\t\torigFuncs.push = childField.push;\r\n\r\n\t\t\tObject.defineProperty(childField, \"push\", {\r\n\t\t\t\tenumerable: false,\r\n\t\t\t\tconfigurable: true,\r\n\t\t\t\tvalue: function value() {\r\n\t\t\t\t\tvar result = origFuncs.push.apply(childField, arguments);\r\n\r\n\t\t\t\t\trebuildTree();\r\n\r\n\t\t\t\t\treturn result;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\torigFuncs.unshift = childField.unshift;\r\n\r\n\t\t\tObject.defineProperty(childField, \"unshift\", {\r\n\t\t\t\tenumerable: false,\r\n\t\t\t\tconfigurable: true,\r\n\t\t\t\tvalue: function value() {\r\n\t\t\t\t\tvar result = origFuncs.unshift.apply(childField, arguments);\r\n\r\n\t\t\t\t\trebuildTree();\r\n\r\n\t\t\t\t\treturn result;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\torigFuncs.shift = childField.shift;\r\n\r\n\t\t\tObject.defineProperty(childField, \"shift\", {\r\n\t\t\t\tenumerable: false,\r\n\t\t\t\tconfigurable: true,\r\n\t\t\t\tvalue: function value() {\r\n\t\t\t\t\tvar result = origFuncs.shift.call(childField);\r\n\r\n\t\t\t\t\trebuildTree();\r\n\r\n\t\t\t\t\treturn result;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\torigFuncs.pop = childField.pop;\r\n\r\n\t\t\tObject.defineProperty(childField, \"pop\", {\r\n\t\t\t\tenumerable: false,\r\n\t\t\t\tconfigurable: true,\r\n\t\t\t\tvalue: function value() {\r\n\t\t\t\t\tvar result = origFuncs.pop.call(childField);\r\n\r\n\t\t\t\t\trebuildTree();\r\n\r\n\t\t\t\t\treturn result;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\torigFuncs.splice = childField.splice;\r\n\r\n\t\t\tObject.defineProperty(childField, \"splice\", {\r\n\t\t\t\tenumerable: false,\r\n\t\t\t\tconfigurable: true,\r\n\t\t\t\tvalue: function value() {\r\n\t\t\t\t\tvar result = origFuncs.splice.apply(childField, arguments);\r\n\r\n\t\t\t\t\trebuildTree();\r\n\r\n\t\t\t\t\treturn result;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\twatchKey(row, data, key){\r\n\t\tvar self = this,\r\n\t\tprops = Object.getOwnPropertyDescriptor(data, key),\r\n\t\tvalue = data[key],\r\n\t\tversion = this.currentVersion;\r\n\r\n\t\tObject.defineProperty(data, key, {\r\n\t\t\tset: function(newValue){\r\n\t\t\t\tvalue = newValue;\r\n\t\t\t\tif(!self.blocked && version === self.currentVersion){\r\n\t\t\t\t\tvar update = {};\r\n\t\t\t\t\tupdate[key] = newValue;\r\n\t\t\t\t\trow.updateData(update);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(props.set){\r\n\t\t\t\t\tprops.set(newValue);\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tget:function(){\r\n\r\n\t\t\t\tif(props.get){\r\n\t\t\t\t\tprops.get();\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn value;\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tunwatchRow(row){\r\n\t\tvar data = row.getData();\r\n\r\n\t\tfor(var key in data){\r\n\t\t\tObject.defineProperty(data, key, {\r\n\t\t\t\tvalue:data[key],\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tblock(){\r\n\t\tthis.blocked = true;\r\n\t}\r\n\r\n\tunblock(){\r\n\t\tthis.blocked = false;\r\n\t}\r\n}\r\n\r\nReactiveData.moduleName = \"reactiveData\";\r\n\r\nexport default ReactiveData;\r\n\r\n\r\n\r\n","import Module from '../../core/Module.js';\r\n\r\nclass ResizeColumns extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.startColumn = false;\r\n\t\tthis.startX = false;\r\n\t\tthis.startWidth = false;\r\n\t\tthis.handle = null;\r\n\t\tthis.prevHandle = null;\r\n\r\n\t\tthis.registerColumnOption(\"resizable\", true);\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\t// if(this.table.options.resizableColumns){\r\n\t\t\tthis.subscribe(\"cell-layout\", this.layoutCellHandles.bind(this));\r\n\t\t\tthis.subscribe(\"column-init\", this.layoutColumnHeader.bind(this));\r\n\t\t// }\r\n\t}\r\n\r\n\tlayoutCellHandles(cell){\r\n\t\tif(cell.row.type === \"row\"){\r\n\t\t\tthis.initializeColumn(\"cell\", cell.column, cell.element);\r\n\t\t}\r\n\t}\r\n\r\n\tlayoutColumnHeader(column){\r\n\t\tthis.initializeColumn(\"header\", column, column.element);\r\n\t}\r\n\r\n\tinitializeColumn(type, column, element){\r\n\t\tvar self = this,\r\n\t\tvariableHeight = false,\r\n\t\tmode = column.definition.resizable;\r\n\r\n\t\t//set column resize mode\r\n\t\tif(type === \"header\"){\r\n\t\t\tvariableHeight = column.definition.formatter == \"textarea\" || column.definition.variableHeight;\r\n\t\t\tcolumn.modules.resize = {variableHeight:variableHeight};\r\n\t\t}\r\n\r\n\t\tif(mode === true || mode == type){\r\n\r\n\t\t\tvar handle = document.createElement('div');\r\n\t\t\thandle.className = \"tabulator-col-resize-handle\";\r\n\r\n\r\n\t\t\tvar prevHandle = document.createElement('div');\r\n\t\t\tprevHandle.className = \"tabulator-col-resize-handle prev\";\r\n\r\n\t\t\thandle.addEventListener(\"click\", function(e){\r\n\t\t\t\te.stopPropagation();\r\n\t\t\t});\r\n\r\n\t\t\tvar handleDown = function(e){\r\n\t\t\t\tvar nearestColumn = column.getLastColumn();\r\n\r\n\t\t\t\tif(nearestColumn && self._checkResizability(nearestColumn)){\r\n\t\t\t\t\tself.startColumn = column;\r\n\t\t\t\t\tself._mouseDown(e, nearestColumn, handle);\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\thandle.addEventListener(\"mousedown\", handleDown);\r\n\t\t\thandle.addEventListener(\"touchstart\", handleDown, {passive: true});\r\n\r\n\t\t\t//reszie column on double click\r\n\t\t\thandle.addEventListener(\"dblclick\", function(e){\r\n\t\t\t\tvar col = column.getLastColumn();\r\n\r\n\t\t\t\tif(col && self._checkResizability(col)){\r\n\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\tcol.reinitializeWidth(true);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\r\n\t\t\tprevHandle.addEventListener(\"click\", function(e){\r\n\t\t\t\te.stopPropagation();\r\n\t\t\t});\r\n\r\n\t\t\tvar prevHandleDown = function(e){\r\n\t\t\t\tvar nearestColumn, colIndex, prevColumn;\r\n\r\n\t\t\t\tnearestColumn = column.getFirstColumn();\r\n\r\n\t\t\t\tif(nearestColumn){\r\n\t\t\t\t\tcolIndex = self.table.columnManager.findColumnIndex(nearestColumn);\r\n\t\t\t\t\tprevColumn = colIndex > 0 ? self.table.columnManager.getColumnByIndex(colIndex - 1) : false;\r\n\r\n\t\t\t\t\tif(prevColumn && self._checkResizability(prevColumn)){\r\n\t\t\t\t\t\tself.startColumn = column;\r\n\t\t\t\t\t\tself._mouseDown(e, prevColumn, prevHandle);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\tprevHandle.addEventListener(\"mousedown\", prevHandleDown);\r\n\t\t\tprevHandle.addEventListener(\"touchstart\", prevHandleDown, {passive: true});\r\n\r\n\t\t\t//resize column on double click\r\n\t\t\tprevHandle.addEventListener(\"dblclick\", function(e){\r\n\t\t\t\tvar nearestColumn, colIndex, prevColumn;\r\n\r\n\t\t\t\tnearestColumn = column.getFirstColumn();\r\n\r\n\t\t\t\tif(nearestColumn){\r\n\t\t\t\t\tcolIndex = self.table.columnManager.findColumnIndex(nearestColumn);\r\n\t\t\t\t\tprevColumn = colIndex > 0 ? self.table.columnManager.getColumnByIndex(colIndex - 1) : false;\r\n\r\n\t\t\t\t\tif(prevColumn && self._checkResizability(prevColumn)){\r\n\t\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\t\tprevColumn.reinitializeWidth(true);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\telement.appendChild(handle);\r\n\t\t\telement.appendChild(prevHandle);\r\n\t\t}\r\n\t}\r\n\r\n\t_checkResizability(column){\r\n\t\treturn column.definition.resizable;\r\n\t}\r\n\r\n\t_mouseDown(e, column, handle){\r\n\t\tvar self = this;\r\n\r\n\t\tself.table.element.classList.add(\"tabulator-block-select\");\r\n\r\n\t\tfunction mouseMove(e){\r\n\t\t\t// self.table.columnManager.tempScrollBlock();\r\n\r\n\t\t\tif(self.table.rtl){\r\n\t\t\t\tcolumn.setWidth(self.startWidth - ((typeof e.screenX === \"undefined\" ? e.touches[0].screenX : e.screenX) - self.startX));\r\n\t\t\t}else{\r\n\t\t\t\tcolumn.setWidth(self.startWidth + ((typeof e.screenX === \"undefined\" ? e.touches[0].screenX : e.screenX) - self.startX));\r\n\t\t\t}\r\n\r\n\t\t\tself.table.columnManager.renderer.rerenderColumns(true);\r\n\r\n\t\t\tif(!self.table.browserSlow && column.modules.resize && column.modules.resize.variableHeight){\r\n\t\t\t\tcolumn.checkCellHeights();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction mouseUp(e){\r\n\r\n\t\t\t//block editor from taking action while resizing is taking place\r\n\t\t\tif(self.startColumn.modules.edit){\r\n\t\t\t\tself.startColumn.modules.edit.blocked = false;\r\n\t\t\t}\r\n\r\n\t\t\tif(self.table.browserSlow && column.modules.resize && column.modules.resize.variableHeight){\r\n\t\t\t\tcolumn.checkCellHeights();\r\n\t\t\t}\r\n\r\n\t\t\tdocument.body.removeEventListener(\"mouseup\", mouseUp);\r\n\t\t\tdocument.body.removeEventListener(\"mousemove\", mouseMove);\r\n\r\n\t\t\thandle.removeEventListener(\"touchmove\", mouseMove);\r\n\t\t\thandle.removeEventListener(\"touchend\", mouseUp);\r\n\r\n\t\t\tself.table.element.classList.remove(\"tabulator-block-select\");\r\n\r\n\t\t\tself.dispatch(\"column-resized\", column);\r\n\t\t\tself.table.externalEvents.dispatch(\"columnResized\", column.getComponent());\r\n\t\t}\r\n\r\n\t\te.stopPropagation(); //prevent resize from interfereing with movable columns\r\n\r\n\t\t//block editor from taking action while resizing is taking place\r\n\t\tif(self.startColumn.modules.edit){\r\n\t\t\tself.startColumn.modules.edit.blocked = true;\r\n\t\t}\r\n\r\n\t\tself.startX = typeof e.screenX === \"undefined\" ? e.touches[0].screenX : e.screenX;\r\n\t\tself.startWidth = column.getWidth();\r\n\r\n\t\tdocument.body.addEventListener(\"mousemove\", mouseMove);\r\n\t\tdocument.body.addEventListener(\"mouseup\", mouseUp);\r\n\t\thandle.addEventListener(\"touchmove\", mouseMove, {passive: true});\r\n\t\thandle.addEventListener(\"touchend\", mouseUp);\r\n\t}\r\n}\r\n\r\nResizeColumns.moduleName = \"resizeColumns\";\r\n\r\nexport default ResizeColumns;","import Module from '../../core/Module.js';\r\n\r\nclass ResizeRows extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.startColumn = false;\r\n\t\tthis.startY = false;\r\n\t\tthis.startHeight = false;\r\n\t\tthis.handle = null;\r\n\t\tthis.prevHandle = null;\r\n\r\n\t\tthis.registerTableOption(\"resizableRows\", false); //resizable rows\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tif(this.table.options.resizableRows){\r\n\t\t\tthis.subscribe(\"row-layout-after\", this.initializeRow.bind(this));\r\n\t\t}\r\n\t}\r\n\r\n\tinitializeRow(row){\r\n\t\tvar self = this,\r\n\t\trowEl = row.getElement();\r\n\r\n\t\tvar handle = document.createElement('div');\r\n\t\thandle.className = \"tabulator-row-resize-handle\";\r\n\r\n\t\tvar prevHandle = document.createElement('div');\r\n\t\tprevHandle.className = \"tabulator-row-resize-handle prev\";\r\n\r\n\t\thandle.addEventListener(\"click\", function(e){\r\n\t\t\te.stopPropagation();\r\n\t\t});\r\n\r\n\t\tvar handleDown = function(e){\r\n\t\t\tself.startRow = row;\r\n\t\t\tself._mouseDown(e, row, handle);\r\n\t\t};\r\n\r\n\t\thandle.addEventListener(\"mousedown\", handleDown);\r\n\t\thandle.addEventListener(\"touchstart\", handleDown, {passive: true});\r\n\r\n\t\tprevHandle.addEventListener(\"click\", function(e){\r\n\t\t\te.stopPropagation();\r\n\t\t});\r\n\r\n\t\tvar prevHandleDown = function(e){\r\n\t\t\tvar prevRow = self.table.rowManager.prevDisplayRow(row);\r\n\r\n\t\t\tif(prevRow){\r\n\t\t\t\tself.startRow = prevRow;\r\n\t\t\t\tself._mouseDown(e, prevRow, prevHandle);\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tprevHandle.addEventListener(\"mousedown\",prevHandleDown);\r\n\t\tprevHandle.addEventListener(\"touchstart\",prevHandleDown, {passive: true});\r\n\r\n\t\trowEl.appendChild(handle);\r\n\t\trowEl.appendChild(prevHandle);\r\n\t}\r\n\r\n\t_mouseDown(e, row, handle){\r\n\t\tvar self = this;\r\n\r\n\t\tself.table.element.classList.add(\"tabulator-block-select\");\r\n\r\n\t\tfunction mouseMove(e){\r\n\t\t\trow.setHeight(self.startHeight + ((typeof e.screenY === \"undefined\" ? e.touches[0].screenY : e.screenY) - self.startY));\r\n\t\t}\r\n\r\n\t\tfunction mouseUp(e){\r\n\r\n\t\t\t// //block editor from taking action while resizing is taking place\r\n\t\t\t// if(self.startColumn.modules.edit){\r\n\t\t\t// \tself.startColumn.modules.edit.blocked = false;\r\n\t\t\t// }\r\n\r\n\t\t\tdocument.body.removeEventListener(\"mouseup\", mouseMove);\r\n\t\t\tdocument.body.removeEventListener(\"mousemove\", mouseMove);\r\n\r\n\t\t\thandle.removeEventListener(\"touchmove\", mouseMove);\r\n\t\t\thandle.removeEventListener(\"touchend\", mouseUp);\r\n\r\n\t\t\tself.table.element.classList.remove(\"tabulator-block-select\");\r\n\r\n\t\t\tthis.dispatchExternal(\"rowResized\", row.getComponent());\r\n\t\t}\r\n\r\n\t\te.stopPropagation(); //prevent resize from interfereing with movable columns\r\n\r\n\t\t//block editor from taking action while resizing is taking place\r\n\t\t// if(self.startColumn.modules.edit){\r\n\t\t// \tself.startColumn.modules.edit.blocked = true;\r\n\t\t// }\r\n\r\n\t\tself.startY = typeof e.screenY === \"undefined\" ? e.touches[0].screenY : e.screenY;\r\n\t\tself.startHeight = row.getHeight();\r\n\r\n\t\tdocument.body.addEventListener(\"mousemove\", mouseMove);\r\n\t\tdocument.body.addEventListener(\"mouseup\", mouseUp);\r\n\r\n\t\thandle.addEventListener(\"touchmove\", mouseMove, {passive: true});\r\n\t\thandle.addEventListener(\"touchend\", mouseUp);\r\n\t}\r\n}\r\n\r\nResizeRows.moduleName = \"resizeRows\";\r\n\r\nexport default ResizeRows;","import Module from '../../core/Module.js';\r\n\r\nclass ResizeTable extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.binding = false;\r\n\t\tthis.observer = false;\r\n\t\tthis.containerObserver = false;\r\n\r\n\t\tthis.tableHeight = 0;\r\n\t\tthis.tableWidth = 0;\r\n\t\tthis.containerHeight = 0;\r\n\t\tthis.containerWidth = 0;\r\n\r\n\t\tthis.autoResize = false;\r\n\r\n\t\tthis.registerTableOption(\"autoResize\", true); //auto resize table\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tif(this.table.options.autoResize){\r\n\t\t\tvar table = this.table,\r\n\t\t\ttableStyle;\r\n\r\n\t\t\tthis.tableHeight = table.element.clientHeight;\r\n\t\t\tthis.tableWidth = table.element.clientWidth;\r\n\r\n\t\t\tif(table.element.parentNode){\r\n\t\t\t\tthis.containerHeight = table.element.parentNode.clientHeight;\r\n\t\t\t\tthis.containerWidth = table.element.parentNode.clientWidth;\r\n\t\t\t}\r\n\r\n\t\t\tif(typeof ResizeObserver !== \"undefined\" && table.rowManager.getRenderMode() === \"virtual\"){\r\n\r\n\t\t\t\tthis.autoResize = true;\r\n\r\n\t\t\t\tthis.observer = new ResizeObserver((entry) => {\r\n\t\t\t\t\tif(!table.browserMobile || (table.browserMobile &&!table.modules.edit.currentCell)){\r\n\r\n\t\t\t\t\t\tvar nodeHeight = Math.floor(entry[0].contentRect.height);\r\n\t\t\t\t\t\tvar nodeWidth = Math.floor(entry[0].contentRect.width);\r\n\r\n\t\t\t\t\t\tif(this.tableHeight != nodeHeight || this.tableWidth != nodeWidth){\r\n\t\t\t\t\t\t\tthis.tableHeight = nodeHeight;\r\n\t\t\t\t\t\t\tthis.tableWidth = nodeWidth;\r\n\r\n\t\t\t\t\t\t\tif(table.element.parentNode){\r\n\t\t\t\t\t\t\t\tthis.containerHeight = table.element.parentNode.clientHeight;\r\n\t\t\t\t\t\t\t\tthis.containerWidth = table.element.parentNode.clientWidth;\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\tthis.table.columnManager.renderer.rerenderColumns(true);\r\n\r\n\t\t\t\t\t\t\ttable.redraw();\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\tthis.observer.observe(table.element);\r\n\r\n\t\t\t\ttableStyle = window.getComputedStyle(table.element);\r\n\r\n\t\t\t\tif(this.table.element.parentNode && !this.table.rowManager.fixedHeight && (tableStyle.getPropertyValue(\"max-height\") || tableStyle.getPropertyValue(\"min-height\"))){\r\n\r\n\t\t\t\t\tthis.containerObserver = new ResizeObserver((entry) => {\r\n\t\t\t\t\t\tif(!table.browserMobile || (table.browserMobile &&!table.modules.edit.currentCell)){\r\n\r\n\t\t\t\t\t\t\tvar nodeHeight = Math.floor(entry[0].contentRect.height);\r\n\t\t\t\t\t\t\tvar nodeWidth = Math.floor(entry[0].contentRect.width);\r\n\r\n\t\t\t\t\t\t\tif(this.containerHeight != nodeHeight || this.containerWidth != nodeWidth){\r\n\t\t\t\t\t\t\t\tthis.containerHeight = nodeHeight;\r\n\t\t\t\t\t\t\t\tthis.containerWidth = nodeWidth;\r\n\t\t\t\t\t\t\t\tthis.tableHeight = table.element.clientHeight;\r\n\t\t\t\t\t\t\t\tthis.tableWidth = table.element.clientWidth;\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\ttable.columnManager.renderer.rerenderColumns(true);\r\n\r\n\t\t\t\t\t\t\ttable.redraw();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\tthis.containerObserver.observe(this.table.element.parentNode);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.subscribe(\"table-resize\", this.tableResized.bind(this));\r\n\r\n\t\t\t}else{\r\n\t\t\t\tthis.binding = function(){\r\n\t\t\t\t\tif(!table.browserMobile || (table.browserMobile && !table.modules.edit.currentCell)){\r\n\r\n\t\t\t\t\t\ttable.columnManager.renderer.rerenderColumns(true);\r\n\r\n\t\t\t\t\t\ttable.redraw();\r\n\t\t\t\t\t}\r\n\t\t\t\t};\r\n\r\n\t\t\t\twindow.addEventListener(\"resize\", this.binding);\r\n\t\t\t}\r\n\r\n\t\t\tthis.subscribe(\"table-destroy\", this.clearBindings.bind(this));\r\n\t\t}\r\n\t}\r\n\r\n\ttableResized(){\r\n\t\tthis.table.rowManager.redraw();\r\n\t}\r\n\r\n\tclearBindings(){\r\n\t\tif(this.binding){\r\n\t\t\twindow.removeEventListener(\"resize\", this.binding);\r\n\t\t}\r\n\r\n\t\tif(this.observer){\r\n\t\t\tthis.observer.unobserve(this.table.element);\r\n\t\t}\r\n\r\n\t\tif(this.containerObserver){\r\n\t\t\tthis.containerObserver.unobserve(this.table.element.parentNode);\r\n\t\t}\r\n\t}\r\n}\r\n\r\nResizeTable.moduleName = \"resizeTable\";\r\n\r\nexport default ResizeTable;","import Module from '../../core/Module.js';\r\n\r\nclass ResponsiveLayout extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.columns = [];\r\n\t\tthis.hiddenColumns = [];\r\n\t\tthis.mode = \"\";\r\n\t\tthis.index = 0;\r\n\t\tthis.collapseFormatter = [];\r\n\t\tthis.collapseStartOpen = true;\r\n\t\tthis.collapseHandleColumn = false;\r\n\r\n\t\tthis.registerTableOption(\"responsiveLayout\", false); //responsive layout flags\r\n\t\tthis.registerTableOption(\"responsiveLayoutCollapseStartOpen\", true); //start showing collapsed data\r\n\t\tthis.registerTableOption(\"responsiveLayoutCollapseUseFormatters\", true); //responsive layout collapse formatter\r\n\t\tthis.registerTableOption(\"responsiveLayoutCollapseFormatter\", false); //responsive layout collapse formatter\r\n\r\n\t\tthis.registerColumnOption(\"responsive\");\r\n\t}\r\n\r\n\t//generate resposive columns list\r\n\tinitialize(){\r\n\t\tvar self = this,\r\n\t\tcolumns = [];\r\n\r\n\t\tif(this.table.options.responsiveLayout){\r\n\t\t\tthis.subscribe(\"column-layout\", this.initializeColumn.bind(this));\r\n\t\t\tthis.subscribe(\"column-show\", this.updateColumnVisibility.bind(this));\r\n\t\t\tthis.subscribe(\"column-hide\", this.updateColumnVisibility.bind(this));\r\n\t\t\tthis.subscribe(\"columns-loaded\", this.initializeResponsivity.bind(this));\r\n\t\t\tthis.subscribe(\"column-moved\", this.initializeResponsivity.bind(this));\r\n\t\t\tthis.subscribe(\"column-add\", this.initializeResponsivity.bind(this));\r\n\t\t\tthis.subscribe(\"column-delete\", this.initializeResponsivity.bind(this));\r\n\r\n\t\t\tthis.subscribe(\"table-redrawing\", this.tableRedraw.bind(this));\r\n\r\n\t\t\tif(this.table.options.responsiveLayout === \"collapse\"){\r\n\t\t\t\tthis.subscribe(\"row-init\", this.initializeRow.bind(this));\r\n\t\t\t\tthis.subscribe(\"row-layout\", this.layoutRow.bind(this));\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\ttableRedraw(force){\r\n\t\tif([\"fitColumns\", \"fitDataStretch\"].indexOf(this.layoutMode()) === -1){\r\n\t\t\tif(!force){\r\n\t\t\t\tthis.update();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tinitializeResponsivity(){\r\n\t\tthis.mode = this.table.options.responsiveLayout;\r\n\t\tthis.collapseFormatter = this.table.options.responsiveLayoutCollapseFormatter || this.formatCollapsedData;\r\n\t\tthis.collapseStartOpen = this.table.options.responsiveLayoutCollapseStartOpen;\r\n\t\tthis.hiddenColumns = [];\r\n\r\n\t\t//detemine level of responsivity for each column\r\n\t\tthis.table.columnManager.columnsByIndex.forEach(function(column, i){\r\n\t\t\tif(column.modules.responsive){\r\n\t\t\t\tif(column.modules.responsive.order && column.modules.responsive.visible){\r\n\t\t\t\t\tcolumn.modules.responsive.index = i;\r\n\t\t\t\t\tcolumns.push(column);\r\n\r\n\t\t\t\t\tif(!column.visible && self.mode === \"collapse\"){\r\n\t\t\t\t\t\tself.hiddenColumns.push(column);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\t//sort list by responsivity\r\n\t\tcolumns = columns.reverse();\r\n\t\tcolumns = columns.sort(function(a, b){\r\n\t\t\tvar diff = b.modules.responsive.order - a.modules.responsive.order;\r\n\t\t\treturn diff || (b.modules.responsive.index - a.modules.responsive.index);\r\n\t\t});\r\n\r\n\t\tthis.columns = columns;\r\n\r\n\t\tif(this.mode === \"collapse\"){\r\n\t\t\tthis.generateCollapsedContent();\r\n\t\t}\r\n\r\n\t\t//assign collapse column\r\n\t\tfor (let col of this.table.columnManager.columnsByIndex){\r\n\t\t\tif(col.definition.formatter == \"responsiveCollapse\"){\r\n\t\t\t\tthis.collapseHandleColumn = col;\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(this.collapseHandleColumn){\r\n\t\t\tif(this.hiddenColumns.length){\r\n\t\t\t\tthis.collapseHandleColumn.show();\r\n\t\t\t}else{\r\n\t\t\t\tthis.collapseHandleColumn.hide();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//define layout information\r\n\tinitializeColumn(column){\r\n\t\tvar def = column.getDefinition();\r\n\r\n\t\tcolumn.modules.responsive = {order: typeof def.responsive === \"undefined\" ? 1 : def.responsive, visible:def.visible === false ? false : true};\r\n\t}\r\n\r\n\tinitializeRow(row){\r\n\t\tvar el;\r\n\r\n\t\tif(row.type !== \"calc\"){\r\n\t\t\tel = document.createElement(\"div\");\r\n\t\t\tel.classList.add(\"tabulator-responsive-collapse\");\r\n\r\n\t\t\trow.modules.responsiveLayout = {\r\n\t\t\t\telement:el,\r\n\t\t\t\topen:this.collapseStartOpen,\r\n\t\t\t};\r\n\r\n\t\t\tif(!this.collapseStartOpen){\r\n\t\t\t\tel.style.display = 'none';\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tlayoutRow(row){\r\n\t\tvar rowEl = row.getElement();\r\n\r\n\t\tif(row.modules.responsiveLayout){\r\n\t\t\trowEl.appendChild(row.modules.responsiveLayout.element);\r\n\t\t\tthis.generateCollapsedRowContent(row);\r\n\t\t}\r\n\t}\r\n\r\n\t//update column visibility\r\n\tupdateColumnVisibility(column, responsiveToggle){\r\n\t\tif(!responsiveToggle && column.modules.responsive){\r\n\t\t\tcolumn.modules.responsive.visible = column.visible;\r\n\t\t\tthis.initialize();\r\n\t\t}\r\n\r\n\t\t//this.update();\r\n\t}\r\n\r\n\thideColumn(column){\r\n\t\tvar colCount = this.hiddenColumns.length;\r\n\r\n\t\tcolumn.hide(false, true);\r\n\r\n\t\tif(this.mode === \"collapse\"){\r\n\t\t\tthis.hiddenColumns.unshift(column);\r\n\t\t\tthis.generateCollapsedContent();\r\n\r\n\t\t\tif(this.collapseHandleColumn && !colCount){\r\n\t\t\t\tthis.collapseHandleColumn.show();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tshowColumn(column){\r\n\t\tvar index;\r\n\r\n\t\tcolumn.show(false, true);\r\n\t\t//set column width to prevent calculation loops on uninitialized columns\r\n\t\tcolumn.setWidth(column.getWidth());\r\n\r\n\t\tif(this.mode === \"collapse\"){\r\n\t\t\tindex = this.hiddenColumns.indexOf(column);\r\n\r\n\t\t\tif(index > -1){\r\n\t\t\t\tthis.hiddenColumns.splice(index, 1);\r\n\t\t\t}\r\n\r\n\t\t\tthis.generateCollapsedContent();\r\n\r\n\t\t\tif(this.collapseHandleColumn && !this.hiddenColumns.length){\r\n\t\t\t\tthis.collapseHandleColumn.hide();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//redraw columns to fit space\r\n\tupdate(){\r\n\t\tvar self = this,\r\n\t\tworking = true;\r\n\r\n\t\twhile(working){\r\n\r\n\t\t\tlet width = self.table.modules.layout.getMode() == \"fitColumns\" ? self.table.columnManager.getFlexBaseWidth() : self.table.columnManager.getWidth();\r\n\r\n\t\t\tlet diff = (self.table.options.headerVisible ? self.table.columnManager.element.clientWidth : self.table.element.clientWidth) - width;\r\n\r\n\t\t\tif(diff < 0){\r\n\t\t\t\t//table is too wide\r\n\t\t\t\tlet column = self.columns[self.index];\r\n\r\n\t\t\t\tif(column){\r\n\t\t\t\t\tself.hideColumn(column);\r\n\t\t\t\t\tself.index ++;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tworking = false;\r\n\t\t\t\t}\r\n\r\n\t\t\t}else{\r\n\r\n\t\t\t\t//table has spare space\r\n\t\t\t\tlet column = self.columns[self.index -1];\r\n\r\n\t\t\t\tif(column){\r\n\t\t\t\t\tif(diff > 0){\r\n\t\t\t\t\t\tif(diff >= column.getWidth()){\r\n\t\t\t\t\t\t\tself.showColumn(column);\r\n\t\t\t\t\t\t\tself.index --;\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\tworking = false;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tworking = false;\r\n\t\t\t\t\t}\r\n\t\t\t\t}else{\r\n\t\t\t\t\tworking = false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif(!self.table.rowManager.activeRowsCount){\r\n\t\t\t\tself.table.rowManager.renderEmptyScroll();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tgenerateCollapsedContent(){\r\n\t\tvar self = this,\r\n\t\trows = this.table.rowManager.getDisplayRows();\r\n\r\n\t\trows.forEach(function(row){\r\n\t\t\tself.generateCollapsedRowContent(row);\r\n\t\t});\r\n\t}\r\n\r\n\tgenerateCollapsedRowContent(row){\r\n\t\tvar el, contents;\r\n\r\n\t\tif(row.modules.responsiveLayout){\r\n\t\t\tel = row.modules.responsiveLayout.element;\r\n\r\n\t\t\twhile(el.firstChild) el.removeChild(el.firstChild);\r\n\r\n\t\t\tcontents = this.collapseFormatter(this.generateCollapsedRowData(row));\r\n\t\t\tif(contents){\r\n\t\t\t\tel.appendChild(contents);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tgenerateCollapsedRowData(row){\r\n\t\tvar self = this,\r\n\t\tdata = row.getData(),\r\n\t\toutput = [],\r\n\t\tmockCellComponent;\r\n\r\n\t\tthis.hiddenColumns.forEach(function(column){\r\n\t\t\tvar value = column.getFieldValue(data);\r\n\r\n\t\t\tif(column.definition.title && column.field){\r\n\t\t\t\tif(column.modules.format && self.table.options.responsiveLayoutCollapseUseFormatters){\r\n\r\n\t\t\t\t\tmockCellComponent = {\r\n\t\t\t\t\t\tvalue:false,\r\n\t\t\t\t\t\tdata:{},\r\n\t\t\t\t\t\tgetValue:function(){\r\n\t\t\t\t\t\t\treturn value;\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tgetData:function(){\r\n\t\t\t\t\t\t\treturn data;\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tgetElement:function(){\r\n\t\t\t\t\t\t\treturn document.createElement(\"div\");\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tgetRow:function(){\r\n\t\t\t\t\t\t\treturn row.getComponent();\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tgetColumn:function(){\r\n\t\t\t\t\t\t\treturn column.getComponent();\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t};\r\n\r\n\t\t\t\t\toutput.push({\r\n\t\t\t\t\t\tfield: column.field,\r\n\t\t\t\t\t\ttitle: column.definition.title,\r\n\t\t\t\t\t\tvalue: column.modules.format.formatter.call(self.table.modules.format, mockCellComponent, column.modules.format.params)\r\n\t\t\t\t\t});\r\n\t\t\t\t}else{\r\n\t\t\t\t\toutput.push({\r\n\t\t\t\t\t\tfield: column.field,\r\n\t\t\t\t\t\ttitle: column.definition.title,\r\n\t\t\t\t\t\tvalue: value\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tformatCollapsedData(data){\r\n\t\tvar list = document.createElement(\"table\");\r\n\r\n\t\tdata.forEach(function(item){\r\n\t\t\tvar row = document.createElement(\"tr\");\r\n\t\t\tvar titleData = document.createElement(\"td\");\r\n\t\t\tvar valueData = document.createElement(\"td\");\r\n\t\t\tvar node_content;\r\n\r\n\t\t\tvar titleHighlight = document.createElement(\"strong\");\r\n\t\t\ttitleData.appendChild(titleHighlight);\r\n\t\t\tthis.langBind(\"columns|\" + item.field, function(text){\r\n\t\t\t\ttitleHighlight.innerText = text || item.title;\r\n\t\t\t});\r\n\r\n\t\t\tif(item.value instanceof Node){\r\n\t\t\t\tnode_content = document.createElement(\"div\");\r\n\t\t\t\tnode_content.appendChild(item.value);\r\n\t\t\t\tvalueData.appendChild(node_content);\r\n\t\t\t}else{\r\n\t\t\t\tvalueData.innerHTML = item.value;\r\n\t\t\t}\r\n\r\n\t\t\trow.appendChild(titleData);\r\n\t\t\trow.appendChild(valueData);\r\n\t\t\tlist.appendChild(row);\r\n\t\t}, this);\r\n\r\n\t\treturn Object.keys(data).length ? list : \"\";\r\n\t}\r\n}\r\n\r\nResponsiveLayout.moduleName = \"responsiveLayout\";\r\n\r\nexport default ResponsiveLayout;","import Module from '../../core/Module.js';\r\n\r\nclass SelectRow extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.selecting = false; //flag selecting in progress\r\n\t\tthis.lastClickedRow = false; //last clicked row\r\n\t\tthis.selectPrev = []; //hold previously selected element for drag drop selection\r\n\t\tthis.selectedRows = []; //hold selected rows\r\n\t\tthis.headerCheckboxElement = null; // hold header select element\r\n\r\n\t\tthis.registerTableOption(\"selectable\", \"highlight\"); //highlight rows on hover\r\n\t\tthis.registerTableOption(\"selectableRangeMode\", \"drag\"); //highlight rows on hover\r\n\t\tthis.registerTableOption(\"selectableRollingSelection\", true); //roll selection once maximum number of selectable rows is reached\r\n\t\tthis.registerTableOption(\"selectablePersistence\", true); // maintain selection when table view is updated\r\n\t\tthis.registerTableOption(\"selectableCheck\", function(data, row){return true;}); //check wheather row is selectable\r\n\r\n\t\tthis.registerTableFunction(\"selectRow\", this.selectRows.bind(this));\r\n\t\tthis.registerTableFunction(\"deselectRow\", this.deselectRows.bind(this));\r\n\t\tthis.registerTableFunction(\"toggleSelectRow\", this.toggleRow.bind(this));\r\n\t\tthis.registerTableFunction(\"getSelectedRows\", this.getSelectedRows.bind(this));\r\n\t\tthis.registerTableFunction(\"getSelectedData\", this.getSelectedData.bind(this));\r\n\r\n\t\t//register component functions\r\n\t\tthis.registerComponentFunction(\"row\", \"select\", this.selectRows.bind(this));\r\n\t\tthis.registerComponentFunction(\"row\", \"deselect\", this.deselectRows.bind(this));\r\n\t\tthis.registerComponentFunction(\"row\", \"toggleSelect\", this.toggleRow.bind(this));\r\n\t\tthis.registerComponentFunction(\"row\", \"isSelected\", this.isRowSelected.bind(this));\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tif(this.table.options.selectable !== false){\r\n\t\t\tthis.subscribe(\"row-init\", this.initializeRow.bind(this));\r\n\t\t\tthis.subscribe(\"row-deleting\", this.rowDeleted.bind(this));\r\n\t\t\tthis.subscribe(\"rows-wipe\", this.clearSelectionData.bind(this));\r\n\t\t\tthis.subscribe(\"rows-retrieve\", this.clearSelectionData.bind(this));\r\n\r\n\t\t\tif(this.table.options.selectable && this.table.options.selectablePersistence){\r\n\t\t\t\tthis.subscribe(\"data-refeshing\", this.deselectRows.bind(this));\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\trowRetrieve(type, prevValue){\r\n\t\treturn type === \"selected\" ? this.selectedRows : prevValue;\r\n\t}\r\n\r\n\trowDeleted(row){\r\n\t\tthis._deselectRow(row, true);\r\n\t}\r\n\r\n\r\n\tclearSelectionData(silent){\r\n\t\tthis.selecting = false;\r\n\t\tthis.lastClickedRow = false;\r\n\t\tthis.selectPrev = [];\r\n\t\tthis.selectedRows = [];\r\n\r\n\t\tif(silent !== true){\r\n\t\t\tthis._rowSelectionChanged();\r\n\t\t}\r\n\t}\r\n\r\n\tinitializeRow(row){\r\n\t\tvar self = this,\r\n\t\telement = row.getElement();\r\n\r\n\t\t// trigger end of row selection\r\n\t\tvar endSelect = function(){\r\n\r\n\t\t\tsetTimeout(function(){\r\n\t\t\t\tself.selecting = false;\r\n\t\t\t}, 50);\r\n\r\n\t\t\tdocument.body.removeEventListener(\"mouseup\", endSelect);\r\n\t\t};\r\n\r\n\t\trow.modules.select = {selected:false};\r\n\r\n\t\t//set row selection class\r\n\t\tif(self.table.options.selectableCheck.call(this.table, row.getComponent())){\r\n\t\t\telement.classList.add(\"tabulator-selectable\");\r\n\t\t\telement.classList.remove(\"tabulator-unselectable\");\r\n\r\n\t\t\tif(self.table.options.selectable && self.table.options.selectable != \"highlight\"){\r\n\t\t\t\tif(self.table.options.selectableRangeMode === \"click\"){\r\n\t\t\t\t\telement.addEventListener(\"click\", function(e){\r\n\t\t\t\t\t\tif(e.shiftKey){\r\n\t\t\t\t\t\t\tself.table._clearSelection();\r\n\t\t\t\t\t\t\tself.lastClickedRow = self.lastClickedRow || row;\r\n\r\n\t\t\t\t\t\t\tvar lastClickedRowIdx = self.table.rowManager.getDisplayRowIndex(self.lastClickedRow);\r\n\t\t\t\t\t\t\tvar rowIdx = self.table.rowManager.getDisplayRowIndex(row);\r\n\r\n\t\t\t\t\t\t\tvar fromRowIdx = lastClickedRowIdx <= rowIdx ? lastClickedRowIdx : rowIdx;\r\n\t\t\t\t\t\t\tvar toRowIdx = lastClickedRowIdx >= rowIdx ? lastClickedRowIdx : rowIdx;\r\n\r\n\t\t\t\t\t\t\tvar rows = self.table.rowManager.getDisplayRows().slice(0);\r\n\t\t\t\t\t\t\tvar toggledRows = rows.splice(fromRowIdx, toRowIdx - fromRowIdx + 1);\r\n\r\n\t\t\t\t\t\t\tif(e.ctrlKey || e.metaKey){\r\n\t\t\t\t\t\t\t\ttoggledRows.forEach(function(toggledRow){\r\n\t\t\t\t\t\t\t\t\tif(toggledRow !== self.lastClickedRow){\r\n\r\n\t\t\t\t\t\t\t\t\t\tif(self.table.options.selectable !== true && !self.isRowSelected(row)){\r\n\t\t\t\t\t\t\t\t\t\t\tif(self.selectedRows.length < self.table.options.selectable){\r\n\t\t\t\t\t\t\t\t\t\t\t\tself.toggleRow(toggledRow);\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\t\t\t\t\tself.toggleRow(toggledRow);\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\tself.lastClickedRow = row;\r\n\t\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\t\tself.deselectRows(undefined, true);\r\n\r\n\t\t\t\t\t\t\t\tif(self.table.options.selectable !== true){\r\n\t\t\t\t\t\t\t\t\tif(toggledRows.length > self.table.options.selectable){\r\n\t\t\t\t\t\t\t\t\t\ttoggledRows = toggledRows.slice(0, self.table.options.selectable)\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\tself.selectRows(toggledRows);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tself.table._clearSelection();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse if(e.ctrlKey || e.metaKey){\r\n\t\t\t\t\t\t\tself.toggleRow(row);\r\n\t\t\t\t\t\t\tself.lastClickedRow = row;\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\tself.deselectRows(undefined, true);\r\n\t\t\t\t\t\t\tself.selectRows(row);\r\n\t\t\t\t\t\t\tself.lastClickedRow = row;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t}else{\r\n\t\t\t\t\telement.addEventListener(\"click\", function(e){\r\n\t\t\t\t\t\tif(!self.table.modExists(\"edit\") || !self.table.modules.edit.getCurrentCell()){\r\n\t\t\t\t\t\t\tself.table._clearSelection();\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif(!self.selecting){\r\n\t\t\t\t\t\t\tself.toggleRow(row);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\telement.addEventListener(\"mousedown\", function(e){\r\n\t\t\t\t\t\tif(e.shiftKey){\r\n\t\t\t\t\t\t\tself.table._clearSelection();\r\n\r\n\t\t\t\t\t\t\tself.selecting = true;\r\n\r\n\t\t\t\t\t\t\tself.selectPrev = [];\r\n\r\n\t\t\t\t\t\t\tdocument.body.addEventListener(\"mouseup\", endSelect);\r\n\t\t\t\t\t\t\tdocument.body.addEventListener(\"keyup\", endSelect);\r\n\r\n\t\t\t\t\t\t\tself.toggleRow(row);\r\n\r\n\t\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\telement.addEventListener(\"mouseenter\", function(e){\r\n\t\t\t\t\t\tif(self.selecting){\r\n\t\t\t\t\t\t\tself.table._clearSelection();\r\n\t\t\t\t\t\t\tself.toggleRow(row);\r\n\r\n\t\t\t\t\t\t\tif(self.selectPrev[1] == row){\r\n\t\t\t\t\t\t\t\tself.toggleRow(self.selectPrev[0]);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\telement.addEventListener(\"mouseout\", function(e){\r\n\t\t\t\t\t\tif(self.selecting){\r\n\t\t\t\t\t\t\tself.table._clearSelection();\r\n\t\t\t\t\t\t\tself.selectPrev.unshift(row);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t}else{\r\n\t\t\telement.classList.add(\"tabulator-unselectable\");\r\n\t\t\telement.classList.remove(\"tabulator-selectable\");\r\n\t\t}\r\n\t}\r\n\r\n\t//toggle row selection\r\n\ttoggleRow(row){\r\n\t\tif(this.table.options.selectableCheck.call(this.table, row.getComponent())){\r\n\t\t\tif(row.modules.select && row.modules.select.selected){\r\n\t\t\t\tthis._deselectRow(row);\r\n\t\t\t}else{\r\n\t\t\t\tthis._selectRow(row);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//select a number of rows\r\n\tselectRows(rows){\r\n\t\tvar rowMatch;\r\n\r\n\t\tswitch(typeof rows){\r\n\t\t\tcase \"undefined\":\r\n\t\t\tthis.table.rowManager.rows.forEach((row) => {\r\n\t\t\t\tthis._selectRow(row, true, true);\r\n\t\t\t});\r\n\r\n\t\t\tthis._rowSelectionChanged();\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"string\":\r\n\r\n\t\t\trowMatch = this.table.rowManager.findRow(rows);\r\n\r\n\t\t\tif(rowMatch){\r\n\t\t\t\tthis._selectRow(rowMatch, true, true);\r\n\t\t\t}else{\r\n\t\t\t\tthis.table.rowManager.getRows(rows).forEach((row) => {\r\n\t\t\t\t\tthis._selectRow(row, true, true);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\tthis._rowSelectionChanged();\r\n\t\t\tbreak;\r\n\r\n\t\t\tdefault:\r\n\t\t\tif(Array.isArray(rows)){\r\n\t\t\t\trows.forEach((row) => {\r\n\t\t\t\t\tthis._selectRow(row, true, true);\r\n\t\t\t\t});\r\n\r\n\t\t\t\tthis._rowSelectionChanged();\r\n\t\t\t}else{\r\n\t\t\t\tthis._selectRow(rows, false, true);\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\t//select an individual row\r\n\t_selectRow(rowInfo, silent, force){\r\n\t\tvar index;\r\n\r\n\t\t//handle max row count\r\n\t\tif(!isNaN(this.table.options.selectable) && this.table.options.selectable !== true && !force){\r\n\t\t\tif(this.selectedRows.length >= this.table.options.selectable){\r\n\t\t\t\tif(this.table.options.selectableRollingSelection){\r\n\t\t\t\t\tthis._deselectRow(this.selectedRows[0]);\r\n\t\t\t\t}else{\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tvar row = this.table.rowManager.findRow(rowInfo);\r\n\r\n\t\tif(row){\r\n\t\t\tif(this.selectedRows.indexOf(row) == -1){\r\n\t\t\t\trow.getElement().classList.add(\"tabulator-selected\");\r\n\t\t\t\tif(!row.modules.select){\r\n\t\t\t\t\trow.modules.select = {};\r\n\t\t\t\t}\r\n\r\n\t\t\t\trow.modules.select.selected = true;\r\n\t\t\t\tif(row.modules.select.checkboxEl){\r\n\t\t\t\t\trow.modules.select.checkboxEl.checked = true;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.selectedRows.push(row);\r\n\r\n\t\t\t\tif(this.table.options.dataTreeSelectPropagate){\r\n\t\t\t\t\tthis.childRowSelection(row, true);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(!silent){\r\n\t\t\t\t\tthis.dispatchExternal(\"rowSelected\", row.getComponent());\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis._rowSelectionChanged(silent);\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tif(!silent){\r\n\t\t\t\tconsole.warn(\"Selection Error - No such row found, ignoring selection:\" + rowInfo);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tisRowSelected(row){\r\n\t\treturn this.selectedRows.indexOf(row) !== -1;\r\n\t}\r\n\r\n\t//deselect a number of rows\r\n\tdeselectRows(rows, silent){\r\n\t\tvar self = this,\r\n\t\trowCount;\r\n\r\n\t\tif(typeof rows == \"undefined\"){\r\n\r\n\t\t\trowCount = self.selectedRows.length;\r\n\r\n\t\t\tfor(let i = 0; i < rowCount; i++){\r\n\t\t\t\tself._deselectRow(self.selectedRows[0], true);\r\n\t\t\t}\r\n\r\n\t\t\tself._rowSelectionChanged(silent);\r\n\r\n\t\t}else{\r\n\t\t\tif(Array.isArray(rows)){\r\n\t\t\t\trows.forEach(function(row){\r\n\t\t\t\t\tself._deselectRow(row, true);\r\n\t\t\t\t});\r\n\r\n\t\t\t\tself._rowSelectionChanged(silent);\r\n\t\t\t}else{\r\n\t\t\t\tself._deselectRow(rows, silent);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//deselect an individual row\r\n\t_deselectRow(rowInfo, silent){\r\n\t\tvar self = this,\r\n\t\trow = self.table.rowManager.findRow(rowInfo),\r\n\t\tindex;\r\n\r\n\t\tif(row){\r\n\t\t\tindex = self.selectedRows.findIndex(function(selectedRow){\r\n\t\t\t\treturn selectedRow == row;\r\n\t\t\t});\r\n\r\n\t\t\tif(index > -1){\r\n\r\n\t\t\t\trow.getElement().classList.remove(\"tabulator-selected\");\r\n\t\t\t\tif(!row.modules.select){\r\n\t\t\t\t\trow.modules.select = {};\r\n\t\t\t\t}\r\n\r\n\t\t\t\trow.modules.select.selected = false;\r\n\t\t\t\tif(row.modules.select.checkboxEl){\r\n\t\t\t\t\trow.modules.select.checkboxEl.checked = false;\r\n\t\t\t\t}\r\n\t\t\t\tself.selectedRows.splice(index, 1);\r\n\r\n\t\t\t\tif(this.table.options.dataTreeSelectPropagate){\r\n\t\t\t\t\tthis.childRowSelection(row, false);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(!silent){\r\n\t\t\t\t\tthis.dispatchExternal(\"rowDeselected\", row.getComponent());\r\n\t\t\t\t}\r\n\r\n\t\t\t\tself._rowSelectionChanged(silent);\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tif(!silent){\r\n\t\t\t\tconsole.warn(\"Deselection Error - No such row found, ignoring selection:\" + rowInfo);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tgetSelectedData(){\r\n\t\tvar data = [];\r\n\r\n\t\tthis.selectedRows.forEach(function(row){\r\n\t\t\tdata.push(row.getData());\r\n\t\t});\r\n\r\n\t\treturn data;\r\n\t}\r\n\r\n\tgetSelectedRows(){\r\n\r\n\t\tvar rows = [];\r\n\r\n\t\tthis.selectedRows.forEach(function(row){\r\n\t\t\trows.push(row.getComponent());\r\n\t\t});\r\n\r\n\t\treturn rows;\r\n\t}\r\n\r\n\t_rowSelectionChanged(silent){\r\n\t\tif(this.headerCheckboxElement){\r\n\t\t\tif(this.selectedRows.length === 0){\r\n\t\t\t\tthis.headerCheckboxElement.checked = false;\r\n\t\t\t\tthis.headerCheckboxElement.indeterminate = false;\r\n\t\t\t} else if(this.table.rowManager.rows.length === this.selectedRows.length){\r\n\t\t\t\tthis.headerCheckboxElement.checked = true;\r\n\t\t\t\tthis.headerCheckboxElement.indeterminate = false;\r\n\t\t\t} else {\r\n\t\t\t\tthis.headerCheckboxElement.indeterminate = true;\r\n\t\t\t\tthis.headerCheckboxElement.checked = false;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(!silent){\r\n\t\t\tthis.dispatchExternal(\"rowSelectionChanged\", this.getSelectedData(), this.getSelectedRows());\r\n\t\t}\r\n\t}\r\n\r\n\tregisterRowSelectCheckbox (row, element) {\r\n\t\tif(!row._row.modules.select){\r\n\t\t\trow._row.modules.select = {};\r\n\t\t}\r\n\r\n\t\trow._row.modules.select.checkboxEl = element;\r\n\t}\r\n\r\n\tregisterHeaderSelectCheckbox (element) {\r\n\t\tthis.headerCheckboxElement = element;\r\n\t}\r\n\r\n\tchildRowSelection(row, select){\r\n\t\tvar children = this.table.modules.dataTree.getChildren(row, true);\r\n\r\n\t\tif(select){\r\n\t\t\tfor(let child of children){\r\n\t\t\t\tthis._selectRow(child, true);\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tfor(let child of children){\r\n\t\t\t\tthis._deselectRow(child, true);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n\r\nSelectRow.moduleName = \"selectRow\";\r\n\r\nexport default SelectRow;","//sort numbers\r\nexport default function(a, b, aRow, bRow, column, dir, params){\r\n\tvar alignEmptyValues = params.alignEmptyValues;\r\n\tvar decimal = params.decimalSeparator;\r\n\tvar thousand = params.thousandSeparator;\r\n\tvar emptyAlign = 0;\r\n\r\n\ta = String(a);\r\n\tb = String(b);\r\n\r\n\tif(thousand){\r\n\t\ta = a.split(thousand).join(\"\");\r\n\t\tb = b.split(thousand).join(\"\");\r\n\t}\r\n\r\n\tif(decimal){\r\n\t\ta = a.split(decimal).join(\".\");\r\n\t\tb = b.split(decimal).join(\".\");\r\n\t}\r\n\r\n\ta = parseFloat(a);\r\n\tb = parseFloat(b);\r\n\r\n\t//handle non numeric values\r\n\tif(isNaN(a)){\r\n\t\temptyAlign = isNaN(b) ? 0 : -1;\r\n\t}else if(isNaN(b)){\r\n\t\temptyAlign = 1;\r\n\t}else{\r\n\t\t//compare valid values\r\n\t\treturn a - b;\r\n\t}\r\n\r\n\t//fix empty values in position\r\n\tif((alignEmptyValues === \"top\" && dir === \"desc\") || (alignEmptyValues === \"bottom\" && dir === \"asc\")){\r\n\t\temptyAlign *= -1;\r\n\t}\r\n\r\n\treturn emptyAlign;\r\n};","//sort strings\r\nexport default function(a, b, aRow, bRow, column, dir, params){\r\n\tvar alignEmptyValues = params.alignEmptyValues;\r\n\tvar emptyAlign = 0;\r\n\tvar locale;\r\n\r\n\t//handle empty values\r\n\tif(!a){\r\n\t\temptyAlign = !b ? 0 : -1;\r\n\t}else if(!b){\r\n\t\temptyAlign = 1;\r\n\t}else{\r\n\t\t//compare valid values\r\n\t\tswitch(typeof params.locale){\r\n\t\t\tcase \"boolean\":\r\n\t\t\tif(params.locale){\r\n\t\t\t\tlocale = this.langLocale();\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\t\t\tcase \"string\":\r\n\t\t\tlocale = params.locale;\r\n\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\treturn String(a).toLowerCase().localeCompare(String(b).toLowerCase(), locale);\r\n\t}\r\n\r\n\t//fix empty values in position\r\n\tif((alignEmptyValues === \"top\" && dir === \"desc\") || (alignEmptyValues === \"bottom\" && dir === \"asc\")){\r\n\t\temptyAlign *= -1;\r\n\t}\r\n\r\n\treturn emptyAlign;\r\n};","//sort datetime\r\nexport default function(a, b, aRow, bRow, column, dir, params){\r\n\tvar format = params.format || \"DD/MM/YYYY HH:mm:ss\",\r\n\talignEmptyValues = params.alignEmptyValues,\r\n\temptyAlign = 0;\r\n\r\n\tif(typeof moment != \"undefined\"){\r\n\t\ta = moment(a, format);\r\n\t\tb = moment(b, format);\r\n\r\n\t\tif(!a.isValid()){\r\n\t\t\temptyAlign = !b.isValid() ? 0 : -1;\r\n\t\t}else if(!b.isValid()){\r\n\t\t\temptyAlign = 1;\r\n\t\t}else{\r\n\t\t\t//compare valid values\r\n\t\t\treturn a - b;\r\n\t\t}\r\n\r\n\t\t//fix empty values in position\r\n\t\tif((alignEmptyValues === \"top\" && dir === \"desc\") || (alignEmptyValues === \"bottom\" && dir === \"asc\")){\r\n\t\t\temptyAlign *= -1;\r\n\t\t}\r\n\r\n\t\treturn emptyAlign;\r\n\r\n\t}else{\r\n\t\tconsole.error(\"Sort Error - 'datetime' sorter is dependant on moment.js\");\r\n\t}\r\n};","import datetime from './datetime.js';\r\n\r\n//sort date\r\nexport default function(a, b, aRow, bRow, column, dir, params){\r\n\tif(!params.format){\r\n\t\tparams.format = \"DD/MM/YYYY\";\r\n\t}\r\n\r\n\treturn datetime.call(this, a, b, aRow, bRow, column, dir, params);\r\n};","import datetime from './datetime.js';\r\n\r\n//sort times\r\nexport default function(a, b, aRow, bRow, column, dir, params){\r\n\tif(!params.format){\r\n\t\tparams.format = \"HH:mm\";\r\n\t}\r\n\r\n\treturn datetime.call(this, a, b, aRow, bRow, column, dir, params);\r\n};","//sort booleans\r\nexport default function(a, b, aRow, bRow, column, dir, params){\r\n\tvar el1 = a === true || a === \"true\" || a === \"True\" || a === 1 ? 1 : 0;\r\n\tvar el2 = b === true || b === \"true\" || b === \"True\" || b === 1 ? 1 : 0;\r\n\r\n\treturn el1 - el2;\r\n};","//sort if element contains any data\r\nexport default function(a, b, aRow, bRow, column, dir, params){\r\n\tvar el1 = 0;\r\n\tvar el2 = 0;\r\n\tvar type = params.type || \"length\";\r\n\tvar alignEmptyValues = params.alignEmptyValues;\r\n\tvar emptyAlign = 0;\r\n\r\n\tfunction calc(value){\r\n\r\n\t\tswitch(type){\r\n\t\t\tcase \"length\":\r\n\t\t\treturn value.length;\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"sum\":\r\n\t\t\treturn value.reduce(function(c, d){\r\n\t\t\t\treturn c + d;\r\n\t\t\t});\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"max\":\r\n\t\t\treturn Math.max.apply(null, value) ;\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"min\":\r\n\t\t\treturn Math.min.apply(null, value) ;\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"avg\":\r\n\t\t\treturn value.reduce(function(c, d){\r\n\t\t\t\treturn c + d;\r\n\t\t\t}) / value.length;\r\n\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\t//handle non array values\r\n\tif(!Array.isArray(a)){\r\n\t\talignEmptyValues = !Array.isArray(b) ? 0 : -1;\r\n\t}else if(!Array.isArray(b)){\r\n\t\talignEmptyValues = 1;\r\n\t}else{\r\n\r\n\t\t//compare valid values\r\n\t\tel1 = a ? calc(a) : 0;\r\n\t\tel2 = b ? calc(b) : 0;\r\n\r\n\t\treturn el1 - el2;\r\n\t}\r\n\r\n\t//fix empty values in position\r\n\tif((alignEmptyValues === \"top\" && dir === \"desc\") || (alignEmptyValues === \"bottom\" && dir === \"asc\")){\r\n\t\temptyAlign *= -1;\r\n\t}\r\n\r\n\treturn emptyAlign;\r\n};","//sort if element contains any data\r\nexport default function(a, b, aRow, bRow, column, dir, params){\r\n\tvar el1 = typeof a == \"undefined\" ? 0 : 1;\r\n\tvar el2 = typeof b == \"undefined\" ? 0 : 1;\r\n\r\n\treturn el1 - el2;\r\n};","//sort alpha numeric strings\r\nexport default function(as, bs, aRow, bRow, column, dir, params){\r\n\tvar a, b, a1, b1, i= 0, L, rx = /(\\d+)|(\\D+)/g, rd = /\\d/;\r\n\tvar alignEmptyValues = params.alignEmptyValues;\r\n\tvar emptyAlign = 0;\r\n\r\n\t//handle empty values\r\n\tif(!as && as!== 0){\r\n\t\temptyAlign = !bs && bs!== 0 ? 0 : -1;\r\n\t}else if(!bs && bs!== 0){\r\n\t\temptyAlign = 1;\r\n\t}else{\r\n\r\n\t\tif(isFinite(as) && isFinite(bs)) return as - bs;\r\n\t\ta = String(as).toLowerCase();\r\n\t\tb = String(bs).toLowerCase();\r\n\t\tif(a === b) return 0;\r\n\t\tif(!(rd.test(a) && rd.test(b))) return a > b ? 1 : -1;\r\n\t\ta = a.match(rx);\r\n\t\tb = b.match(rx);\r\n\t\tL = a.length > b.length ? b.length : a.length;\r\n\t\twhile(i < L){\r\n\t\t\ta1= a[i];\r\n\t\t\tb1= b[i++];\r\n\t\t\tif(a1 !== b1){\r\n\t\t\t\tif(isFinite(a1) && isFinite(b1)){\r\n\t\t\t\t\tif(a1.charAt(0) === \"0\") a1 = \".\" + a1;\r\n\t\t\t\t\tif(b1.charAt(0) === \"0\") b1 = \".\" + b1;\r\n\t\t\t\t\treturn a1 - b1;\r\n\t\t\t\t}\r\n\t\t\t\telse return a1 > b1 ? 1 : -1;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn a.length > b.length;\r\n\t}\r\n\r\n\t//fix empty values in position\r\n\tif((alignEmptyValues === \"top\" && dir === \"desc\") || (alignEmptyValues === \"bottom\" && dir === \"asc\")){\r\n\t\temptyAlign *= -1;\r\n\t}\r\n\r\n\treturn emptyAlign;\r\n};","import number from './sorters/number.js';\r\nimport string from './sorters/string.js';\r\nimport date from './sorters/date.js';\r\nimport time from './sorters/time.js';\r\nimport datetime from './sorters/datetime.js';\r\nimport boolean from './sorters/boolean.js';\r\nimport array from './sorters/array.js';\r\nimport exists from './sorters/exists.js';\r\nimport alphanum from './sorters/alphanum.js';\r\n\r\nexport default {\r\n\tnumber:number,\r\n\tstring:string,\r\n\tdate:date,\r\n\ttime:time,\r\n\tdatetime:datetime,\r\n\tboolean:boolean,\r\n\tarray:array,\r\n\texists:exists,\r\n\talphanum:alphanum\r\n};","import Module from '../../core/Module.js';\r\n\r\nimport defaultSorters from './defaults/sorters.js';\r\n\r\nclass Sort extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t \tthis.sortList = []; //holder current sort\r\n\t \tthis.changed = false; //has the sort changed since last render\r\n\r\n\t \tthis.registerTableOption(\"sortMode\", \"local\"); //local or remote sorting\r\n\r\n\t \tthis.registerTableOption(\"initialSort\", false); //initial sorting criteria\r\n\t \tthis.registerTableOption(\"columnHeaderSortMulti\", true); //multiple or single column sorting\r\n\t \tthis.registerTableOption(\"sortOrderReverse\", false); //reverse internal sort ordering\r\n\t \tthis.registerTableOption(\"headerSortElement\", \"
\"); //header sort element\r\n\r\n\t \tthis.registerColumnOption(\"sorter\");\r\n\t \tthis.registerColumnOption(\"sorterParams\");\r\n\r\n\t \tthis.registerColumnOption(\"headerSort\", true);\r\n\t \tthis.registerColumnOption(\"headerSortStartingDir\");\r\n\t \tthis.registerColumnOption(\"headerSortTristate\");\r\n\r\n\t }\r\n\r\n\t initialize(){\r\n\t \tthis.subscribe(\"column-layout\", this.initializeColumn.bind(this));\r\n\t \tthis.subscribe(\"table-built\", this.tableBuilt.bind(this));\r\n\t \tthis.registerDataHandler(this.sort.bind(this), 20);\r\n\r\n\t \tthis.registerTableFunction(\"setSort\", this.userSetSort.bind(this));\r\n\t \tthis.registerTableFunction(\"getSorters\", this.getSort.bind(this));\r\n\t \tthis.registerTableFunction(\"clearSort\", this.clearSort.bind(this));\r\n\r\n\t \tif(this.table.options.sortMode === \"remote\"){\r\n\t \t\tthis.subscribe(\"data-params\", this.remoteSortParams.bind(this));\r\n\t \t}\r\n\t }\r\n\r\n\t tableBuilt(){\r\n\t \tif(this.table.options.initialSort){\r\n\t \t\tthis.setSort(this.table.options.initialSort);\r\n\t \t}\r\n\t }\r\n\r\n\t remoteSortParams(data, config, silent, params){\r\n\t \tvar sorters = this.getSort();\r\n\r\n\t \tsorters.forEach((item) => {\r\n\t \t\tdelete item.column;\r\n\t \t});\r\n\r\n\t \tparams.sort = sorters;\r\n\r\n\t \treturn params;\r\n\t }\r\n\r\n\r\n\t///////////////////////////////////\r\n\t///////// Table Functions /////////\r\n\t///////////////////////////////////\r\n\r\n\tuserSetSort(sortList, dir){\r\n\t\tthis.setSort(sortList, dir);\r\n\t\t// this.table.rowManager.sorterRefresh();\r\n\t\tthis.refreshSort();\r\n\t}\r\n\r\n\tclearSort(){\r\n\t\tthis.clear();\r\n\t\t// this.table.rowManager.sorterRefresh();\r\n\t\tthis.refreshSort();\r\n\t}\r\n\r\n\r\n\t///////////////////////////////////\r\n\t///////// Internal Logic //////////\r\n\t///////////////////////////////////\r\n\r\n\t//initialize column header for sorting\r\n\tinitializeColumn(column){\r\n\t\tvar sorter = false,\r\n\t\tcolEl,\r\n\t\tarrowEl;\r\n\r\n\t\tswitch(typeof column.definition.sorter){\r\n\t\t\tcase \"string\":\r\n\t\t\tif(Sort.sorters[column.definition.sorter]){\r\n\t\t\t\tsorter = Sort.sorters[column.definition.sorter];\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Sort Error - No such sorter found: \", column.definition.sorter);\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"function\":\r\n\t\t\tsorter = column.definition.sorter;\r\n\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\tcolumn.modules.sort = {\r\n\t\t\tsorter:sorter, dir:\"none\",\r\n\t\t\tparams:column.definition.sorterParams || {},\r\n\t\t\tstartingDir:column.definition.headerSortStartingDir || \"asc\",\r\n\t\t\ttristate: column.definition.headerSortTristate,\r\n\t\t};\r\n\r\n\t\tif(column.definition.headerSort !== false){\r\n\r\n\t\t\tcolEl = column.getElement();\r\n\r\n\t\t\tcolEl.classList.add(\"tabulator-sortable\");\r\n\r\n\r\n\t\t\tarrowEl = document.createElement(\"div\");\r\n\t\t\tarrowEl.classList.add(\"tabulator-col-sorter\");\r\n\r\n\t\t\tif(typeof this.table.options.headerSortElement == \"object\"){\r\n\t\t\t\tarrowEl.appendChild(this.table.options.headerSortElement);\r\n\t\t\t}else{\r\n\t\t\t\tarrowEl.innerHTML = this.table.options.headerSortElement;\r\n\t\t\t}\r\n\r\n\t\t\t//create sorter arrow\r\n\t\t\tcolumn.titleHolderElement.appendChild(arrowEl);\r\n\r\n\t\t\tcolumn.modules.sort.element = arrowEl;\r\n\r\n\t\t\t//sort on click\r\n\t\t\tcolEl.addEventListener(\"click\", (e) => {\r\n\t\t\t\tvar dir = \"\",\r\n\t\t\t\tsorters=[],\r\n\t\t\t\tmatch = false;\r\n\r\n\t\t\t\tif(column.modules.sort){\r\n\t\t\t\t\tif(column.modules.sort.tristate){\r\n\t\t\t\t\t\tif(column.modules.sort.dir == \"none\"){\r\n\t\t\t\t\t\t\tdir = column.modules.sort.startingDir;\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\tif(column.modules.sort.dir == column.modules.sort.startingDir){\r\n\t\t\t\t\t\t\t\tdir = column.modules.sort.dir == \"asc\" ? \"desc\" : \"asc\";\r\n\t\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\t\tdir = \"none\";\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tswitch(column.modules.sort.dir){\r\n\t\t\t\t\t\t\tcase \"asc\":\r\n\t\t\t\t\t\t\tdir = \"desc\";\r\n\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\t\tcase \"desc\":\r\n\t\t\t\t\t\t\tdir = \"asc\";\r\n\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\t\tdefault:\r\n\t\t\t\t\t\t\tdir = column.modules.sort.startingDir;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\r\n\t\t\t\t\tif (this.table.options.columnHeaderSortMulti && (e.shiftKey || e.ctrlKey)) {\r\n\t\t\t\t\t\tsorters = this.getSort();\r\n\r\n\t\t\t\t\t\tmatch = sorters.findIndex((sorter) => {\r\n\t\t\t\t\t\t\treturn sorter.field === column.getField();\r\n\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\tif(match > -1){\r\n\t\t\t\t\t\t\tsorters[match].dir = dir;\r\n\r\n\t\t\t\t\t\t\tif(match != sorters.length -1){\r\n\t\t\t\t\t\t\t\tmatch = sorters.splice(match, 1)[0];\r\n\t\t\t\t\t\t\t\tif(dir != \"none\"){\r\n\t\t\t\t\t\t\t\t\tsorters.push(match);\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\tif(dir != \"none\"){\r\n\t\t\t\t\t\t\t\tsorters.push({column:column, dir:dir});\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t//add to existing sort\r\n\t\t\t\t\t\tthis.setSort(sorters);\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tif(dir == \"none\"){\r\n\t\t\t\t\t\t\tthis.clear();\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\t//sort by column only\r\n\t\t\t\t\t\t\tthis.setSort(column, dir);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// this.table.rowManager.sorterRefresh(!this.sortList.length);\r\n\t\t\t\t\tthis.refreshSort();\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\trefreshSort(){\r\n\t\tif(this.table.options.sortMode === \"remote\"){\r\n\t\t\tthis.reloadData();\r\n\t\t}else{\r\n\t\t\tthis.refreshData()\r\n\t\t}\r\n\r\n\t\t//TODO - Persist left position of row manager\r\n\t\t// left = this.scrollLeft;\r\n\t\t// this.scrollHorizontal(left);\r\n\t}\r\n\r\n\t//check if the sorters have changed since last use\r\n\thasChanged(){\r\n\t\tvar changed = this.changed;\r\n\t\tthis.changed = false;\r\n\t\treturn changed;\r\n\t}\r\n\r\n\t//return current sorters\r\n\tgetSort(){\r\n\t\tvar self = this,\r\n\t\tsorters = [];\r\n\r\n\t\tself.sortList.forEach(function(item){\r\n\t\t\tif(item.column){\r\n\t\t\t\tsorters.push({column:item.column.getComponent(), field:item.column.getField(), dir:item.dir});\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn sorters;\r\n\t}\r\n\r\n\t//change sort list and trigger sort\r\n\tsetSort(sortList, dir){\r\n\t\tvar self = this,\r\n\t\tnewSortList = [];\r\n\r\n\t\tif(!Array.isArray(sortList)){\r\n\t\t\tsortList = [{column: sortList, dir:dir}];\r\n\t\t}\r\n\r\n\t\tsortList.forEach(function(item){\r\n\t\t\tvar column;\r\n\r\n\t\t\tcolumn = self.table.columnManager.findColumn(item.column);\r\n\r\n\t\t\tif(column){\r\n\t\t\t\titem.column = column;\r\n\t\t\t\tnewSortList.push(item);\r\n\t\t\t\tself.changed = true;\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Sort Warning - Sort field does not exist and is being ignored: \", item.column);\r\n\t\t\t}\r\n\r\n\t\t});\r\n\r\n\t\tself.sortList = newSortList;\r\n\r\n\t\tthis.dispatch(\"sort-changed\");\r\n\t}\r\n\r\n\t//clear sorters\r\n\tclear(){\r\n\t\tthis.setSort([]);\r\n\t}\r\n\r\n\t//find appropriate sorter for column\r\n\tfindSorter(column){\r\n\t\tvar row = this.table.rowManager.activeRows[0],\r\n\t\tsorter = \"string\",\r\n\t\tfield, value;\r\n\r\n\t\tif(row){\r\n\t\t\trow = row.getData();\r\n\t\t\tfield = column.getField();\r\n\r\n\t\t\tif(field){\r\n\r\n\t\t\t\tvalue = column.getFieldValue(row);\r\n\r\n\t\t\t\tswitch(typeof value){\r\n\t\t\t\t\tcase \"undefined\":\r\n\t\t\t\t\tsorter = \"string\";\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase \"boolean\":\r\n\t\t\t\t\tsorter = \"boolean\";\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tdefault:\r\n\t\t\t\t\tif(!isNaN(value) && value !== \"\"){\r\n\t\t\t\t\t\tsorter = \"number\";\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tif(value.match(/((^[0-9]+[a-z]+)|(^[a-z]+[0-9]+))+$/i)){\r\n\t\t\t\t\t\t\tsorter = \"alphanum\";\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn Sort.sorters[sorter];\r\n\t}\r\n\r\n\t//work through sort list sorting data\r\n\tsort(data){\r\n\t\tvar self = this,\r\n\t\tsortList = this.table.options.sortOrderReverse ? self.sortList.slice().reverse() : self.sortList,\r\n\t\tsortListActual = [],\r\n\t\trowComponents = [],\r\n\t\tlastSort;\r\n\r\n\t\tif(this.subscribedExternal(\"dataSorting\")){\r\n\t\t\tthis.dispatchExternal(\"dataSorting\", self.getSort());\r\n\t\t}\r\n\r\n\t\tself.clearColumnHeaders();\r\n\r\n\t\tif(this.table.options.sortMode !== \"remote\"){\r\n\r\n\t\t\t//build list of valid sorters and trigger column specific callbacks before sort begins\r\n\t\t\tsortList.forEach(function(item, i){\r\n\t\t\t\tvar sortObj = item.column.modules.sort;\r\n\r\n\t\t\t\tif(item.column && sortObj){\r\n\r\n\t\t\t\t\t//if no sorter has been defined, take a guess\r\n\t\t\t\t\tif(!sortObj.sorter){\r\n\t\t\t\t\t\tsortObj.sorter = self.findSorter(item.column);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\titem.params = typeof sortObj.params === \"function\" ? sortObj.params(item.column.getComponent(), item.dir) : sortObj.params;\r\n\r\n\t\t\t\t\tsortListActual.push(item);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tself.setColumnHeader(item.column, item.dir);\r\n\t\t\t});\r\n\r\n\t\t\t//sort data\r\n\t\t\tif (sortListActual.length) {\r\n\t\t\t\tself._sortItems(data, sortListActual);\r\n\t\t\t}\r\n\r\n\t\t}else{\r\n\t\t\tsortList.forEach(function(item, i){\r\n\t\t\t\tself.setColumnHeader(item.column, item.dir);\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif(this.subscribedExternal(\"dataSorted\")){\r\n\t\t\tdata.forEach((row) => {\r\n\t\t\t\trowComponents.push(row.getComponent());\r\n\t\t\t});\r\n\r\n\t\t\tthis.dispatchExternal(\"dataSorted\", self.getSort(), rowComponents);\r\n\t\t}\r\n\t}\r\n\r\n\t//clear sort arrows on columns\r\n\tclearColumnHeaders(){\r\n\t\tthis.table.columnManager.getRealColumns().forEach(function(column){\r\n\t\t\tif(column.modules.sort){\r\n\t\t\t\tcolumn.modules.sort.dir = \"none\";\r\n\t\t\t\tcolumn.getElement().setAttribute(\"aria-sort\", \"none\");\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t//set the column header sort direction\r\n\tsetColumnHeader(column, dir){\r\n\t\tcolumn.modules.sort.dir = dir;\r\n\t\tcolumn.getElement().setAttribute(\"aria-sort\", dir);\r\n\t}\r\n\r\n\t//sort each item in sort list\r\n\t_sortItems(data, sortList){\r\n\t\tvar sorterCount = sortList.length - 1;\r\n\r\n\t\tdata.sort((a, b) => {\r\n\t\t\tvar result;\r\n\r\n\t\t\tfor(var i = sorterCount; i>= 0; i--){\r\n\t\t\t\tlet sortItem = sortList[i];\r\n\r\n\t\t\t\tresult = this._sortRow(a, b, sortItem.column, sortItem.dir, sortItem.params);\r\n\r\n\t\t\t\tif(result !== 0){\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn result;\r\n\t\t});\r\n\t}\r\n\r\n\t//process individual rows for a sort function on active data\r\n\t_sortRow(a, b, column, dir, params){\r\n\t\tvar el1Comp, el2Comp, colComp;\r\n\r\n\t\t//switch elements depending on search direction\r\n\t\tvar el1 = dir == \"asc\" ? a : b;\r\n\t\tvar el2 = dir == \"asc\" ? b : a;\r\n\r\n\t\ta = column.getFieldValue(el1.getData());\r\n\t\tb = column.getFieldValue(el2.getData());\r\n\r\n\t\ta = typeof a !== \"undefined\" ? a : \"\";\r\n\t\tb = typeof b !== \"undefined\" ? b : \"\";\r\n\r\n\t\tel1Comp = el1.getComponent();\r\n\t\tel2Comp = el2.getComponent();\r\n\r\n\t\treturn column.modules.sort.sorter.call(this, a, b, el1Comp, el2Comp, column.getComponent(), dir, params);\r\n\t}\r\n}\r\n\r\nSort.moduleName = \"sort\";\r\n\r\n//load defaults\r\nSort.sorters = defaultSorters;\r\n\r\nexport default Sort;","export default {\r\n\t//is integer\r\n\tinteger: function(cell, value, parameters){\r\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\tvalue = Number(value);\r\n\t\treturn typeof value === 'number' && isFinite(value) && Math.floor(value) === value;\r\n\t},\r\n\r\n\t//is float\r\n\tfloat: function(cell, value, parameters){\r\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\tvalue = Number(value);\r\n\t\treturn typeof value === 'number' && isFinite(value) && value % 1 !== 0;\r\n\t},\r\n\r\n\t//must be a number\r\n\tnumeric: function(cell, value, parameters){\r\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn !isNaN(value);\r\n\t},\r\n\r\n\t//must be a string\r\n\tstring: function(cell, value, parameters){\r\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn isNaN(value);\r\n\t},\r\n\r\n\t//maximum value\r\n\tmax: function(cell, value, parameters){\r\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn parseFloat(value) <= parameters;\r\n\t},\r\n\r\n\t//minimum value\r\n\tmin: function(cell, value, parameters){\r\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn parseFloat(value) >= parameters;\r\n\t},\r\n\r\n\t//starts with value\r\n\tstarts: function(cell, value, parameters){\r\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn String(value).toLowerCase().startsWith(String(parameters).toLowerCase());\r\n\t},\r\n\r\n\t//ends with value\r\n\tends: function(cell, value, parameters){\r\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn String(value).toLowerCase().endsWith(String(parameters).toLowerCase());\r\n\t},\r\n\r\n\r\n\t//minimum string length\r\n\tminLength: function(cell, value, parameters){\r\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn String(value).length >= parameters;\r\n\t},\r\n\r\n\t//maximum string length\r\n\tmaxLength: function(cell, value, parameters){\r\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn String(value).length <= parameters;\r\n\t},\r\n\r\n\t//in provided value list\r\n\tin: function(cell, value, parameters){\r\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\tif(typeof parameters == \"string\"){\r\n\t\t\tparameters = parameters.split(\"|\");\r\n\t\t}\r\n\r\n\t\treturn value === \"\" || parameters.indexOf(value) > -1;\r\n\t},\r\n\r\n\t//must match provided regex\r\n\tregex: function(cell, value, parameters){\r\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\tvar reg = new RegExp(parameters);\r\n\r\n\t\treturn reg.test(value);\r\n\t},\r\n\r\n\t//value must be unique in this column\r\n\tunique: function(cell, value, parameters){\r\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\tvar unique = true;\r\n\r\n\t\tvar cellData = cell.getData();\r\n\t\tvar column = cell.getColumn()._getSelf();\r\n\r\n\t\tthis.table.rowManager.rows.forEach(function(row){\r\n\t\t\tvar data = row.getData();\r\n\r\n\t\t\tif(data !== cellData){\r\n\t\t\t\tif(value == column.getFieldValue(data)){\r\n\t\t\t\t\tunique = false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn unique;\r\n\t},\r\n\r\n\t//must have a value\r\n\trequired:function(cell, value, parameters){\r\n\t\treturn value !== \"\" && value !== null && typeof value !== \"undefined\";\r\n\t},\r\n};","import Module from '../../core/Module.js';\r\n\r\nimport defaultValidators from './defaults/validators.js';\r\n\r\nclass Validate extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.invalidCells = [];\r\n\r\n\t\tthis.registerTableOption(\"validationMode\", \"blocking\");\r\n\r\n\t\tthis.registerColumnOption(\"validator\");\r\n\r\n\t\tthis.registerTableFunction(\"getInvalidCells\", this.getInvalidCells.bind(this));\r\n\t\tthis.registerTableFunction(\"clearCellValidation\", this.userClearCellValidation.bind(this));\r\n\t\tthis.registerTableFunction(\"validate\", this.userValidate.bind(this));\r\n\r\n\t\tthis.registerComponentFunction(\"cell\", \"isValid\", this.cellIsValid.bind(this));\r\n\t\tthis.registerComponentFunction(\"cell\", \"clearValidation\", this.clearValidation.bind(this));\r\n\t\tthis.registerComponentFunction(\"cell\", \"validate\", this.cellValidate.bind(this));\r\n\r\n\t\tthis.registerComponentFunction(\"column\", \"validate\", this.columnValidate.bind(this));\r\n\t\tthis.registerComponentFunction(\"row\", \"validate\", this.rowValidate.bind(this));\r\n\t}\r\n\r\n\r\n\tinitialize(){\r\n\t\tthis.subscribe(\"cell-delete\", this.clearValidation.bind(this));\r\n\t\tthis.subscribe(\"column-layout\", this.initializeColumnCheck.bind(this));\r\n\t}\r\n\r\n\t///////////////////////////////////\r\n\t////////// Cell Functions /////////\r\n\t///////////////////////////////////\r\n\r\n\tcellIsValid(cell){\r\n\t\treturn cell.modules.validate ? !cell.modules.validate.invalid : true;\r\n\t}\r\n\r\n\tcellValidate(cell){\r\n\t\treturn this.validate(cell.column.modules.validate, cell, cell.getValue());\r\n\t}\r\n\r\n\t///////////////////////////////////\r\n\t///////// Column Functions ////////\r\n\t///////////////////////////////////\r\n\r\n\tcolumnValidate(column){\r\n\t\tvar invalid = [];\r\n\r\n\t\tcolumn.cells.forEach(function(cell){\r\n\t\t\tif(!this.cellValidate(cell)){\r\n\t\t\t\tinvalid.push(cell.getComponent());\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn invalid.length ? invalid : true;\r\n\t}\r\n\r\n\t///////////////////////////////////\r\n\t////////// Row Functions //////////\r\n\t///////////////////////////////////\r\n\r\n\trowValidate(row){\r\n\t\tvar invalid = [];\r\n\r\n\t\trow.cells.forEach(function(cell){\r\n\t\t\tif(!this.cellValidate(cell)){\r\n\t\t\t\tinvalid.push(cell.getComponent());\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn invalid.length ? invalid : true;\r\n\t}\r\n\r\n\t///////////////////////////////////\r\n\t///////// Table Functions /////////\r\n\t///////////////////////////////////\r\n\r\n\r\n\tuserClearCellValidation(cells){\r\n\t\tif(!cells){\r\n\t\t\tcells = this.getInvalidCells();\r\n\t\t}\r\n\r\n\t\tif(!Array.isArray(cells)){\r\n\t\t\tcells = [cells];\r\n\t\t}\r\n\r\n\t\tcells.forEach((cell) => {\r\n\t\t\tthis.clearValidation(cell._getSelf());\r\n\t\t});\r\n\t}\r\n\r\n\tuserValidate(cells){\r\n\t\tvar output = [];\r\n\r\n\t\t//clear row data\r\n\t\tthis.table.rowManager.rows.forEach(function(row){\r\n\t\t\tvar valid = row.validate();\r\n\r\n\t\t\tif(valid !== true){\r\n\t\t\t\toutput = output.concat(valid);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn output.length ? output : true;\r\n\t}\r\n\r\n\t///////////////////////////////////\r\n\t///////// Internal Logic //////////\r\n\t///////////////////////////////////\r\n\r\n\tinitializeColumnCheck(column){\r\n\t\tif(typeof column.definition.validator !== \"undefined\"){\r\n\t\t\tthis.initializeColumn(column);\r\n\t\t}\r\n\t}\r\n\r\n\t//validate\r\n\tinitializeColumn(column){\r\n\t\tvar self = this,\r\n\t\tconfig = [],\r\n\t\tvalidator;\r\n\r\n\t\tif(column.definition.validator){\r\n\r\n\t\t\tif(Array.isArray(column.definition.validator)){\r\n\t\t\t\tcolumn.definition.validator.forEach(function(item){\r\n\t\t\t\t\tvalidator = self._extractValidator(item);\r\n\r\n\t\t\t\t\tif(validator){\r\n\t\t\t\t\t\tconfig.push(validator);\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t}else{\r\n\t\t\t\tvalidator = this._extractValidator(column.definition.validator);\r\n\r\n\t\t\t\tif(validator){\r\n\t\t\t\t\tconfig.push(validator);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tcolumn.modules.validate = config.length ? config : false;\r\n\t\t}\r\n\t}\r\n\r\n\t_extractValidator(value){\r\n\t\tvar type, params, pos;\r\n\r\n\t\tswitch(typeof value){\r\n\t\t\tcase \"string\":\r\n\t\t\tpos = value.indexOf(':');\r\n\r\n\t\t\tif(pos > -1){\r\n\t\t\t\ttype = value.substring(0,pos);\r\n\t\t\t\tparams = value.substring(pos+1);\r\n\t\t\t}else{\r\n\t\t\t\ttype = value;\r\n\t\t\t}\r\n\r\n\t\t\treturn this._buildValidator(type, params);\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"function\":\r\n\t\t\treturn this._buildValidator(value);\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"object\":\r\n\t\t\treturn this._buildValidator(value.type, value.parameters);\r\n\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\t_buildValidator(type, params){\r\n\r\n\t\tvar func = typeof type == \"function\" ? type : Validate.validators[type];\r\n\r\n\t\tif(!func){\r\n\t\t\tconsole.warn(\"Validator Setup Error - No matching validator found:\", type);\r\n\t\t\treturn false;\r\n\t\t}else{\r\n\t\t\treturn {\r\n\t\t\t\ttype:typeof type == \"function\" ? \"function\" : type,\r\n\t\t\t\tfunc:func,\r\n\t\t\t\tparams:params,\r\n\t\t\t};\r\n\t\t}\r\n\t}\r\n\r\n\tvalidate(validators, cell, value){\r\n\t\tvar self = this,\r\n\t\tvalid = [],\r\n\t\tinvalidIndex = this.invalidCells.indexOf(cell);\r\n\r\n\t\tif(validators){\r\n\t\t\tvalidators.forEach(function(item){\r\n\t\t\t\tif(!item.func.call(self, cell.getComponent(), value, item.params)){\r\n\t\t\t\t\tvalid.push({\r\n\t\t\t\t\t\ttype:item.type,\r\n\t\t\t\t\t\tparameters:item.params\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tvalid = valid.length ? valid : true;\r\n\r\n\t\tif(!cell.modules.validate){\r\n\t\t\tcell.modules.validate = {};\r\n\t\t}\r\n\r\n\t\tif(valid === true){\r\n\t\t\tcell.modules.validate.invalid = false;\r\n\t\t\tcell.getElement().classList.remove(\"tabulator-validation-fail\");\r\n\r\n\t\t\tif(invalidIndex > -1){\r\n\t\t\t\tthis.invalidCells.splice(invalidIndex, 1);\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tcell.modules.validate.invalid = true;\r\n\r\n\t\t\tif(this.table.options.validationMode !== \"manual\"){\r\n\t\t\t\tcell.getElement().classList.add(\"tabulator-validation-fail\");\r\n\t\t\t}\r\n\r\n\t\t\tif(invalidIndex == -1){\r\n\t\t\t\tthis.invalidCells.push(cell);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn valid;\r\n\t}\r\n\r\n\tgetInvalidCells(){\r\n\t\tvar output = [];\r\n\r\n\t\tthis.invalidCells.forEach((cell) => {\r\n\t\t\toutput.push(cell.getComponent());\r\n\t\t});\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tclearValidation(cell){\r\n\t\tvar invalidIndex;\r\n\r\n\t\tif(cell.modules.validate && cell.modules.validate.invalid){\r\n\r\n\t\t\tcell.getElement().classList.remove(\"tabulator-validation-fail\");\r\n\t\t\tcell.modules.validate.invalid = false;\r\n\r\n\t\t\tinvalidIndex = this.invalidCells.indexOf(cell);\r\n\r\n\t\t\tif(invalidIndex > -1){\r\n\t\t\t\tthis.invalidCells.splice(invalidIndex, 1);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n\r\nValidate.moduleName = \"validate\";\r\n\r\n//load defaults\r\nValidate.validators = defaultValidators;\r\n\r\nexport default Validate;","//tabulator with all modules installed\r\nimport {default as Tabulator} from './Tabulator.js';\r\nimport * as modules from '../core/modules/optional.js';\r\nimport ModuleBinder from './tools/ModuleBinder.js';\r\n\r\nclass TabulatorFull extends Tabulator {};\r\n\r\n//bind modules and static functionality\r\nnew ModuleBinder(TabulatorFull, modules);\r\n\r\nexport default TabulatorFull;"],"names":["debugEventsExternal","debugEventsInternal","debugInvalidOptions","height","minHeight","maxHeight","columnMaxWidth","columnHeaderVertAlign","columns","columnDefaults","data","autoColumns","autoColumnsDefinitions","nestedFieldSeparator","tooltipGenerationMode","footerElement","index","textDirection","addRowPos","headerVisible","renderVertical","renderHorizontal","renderVerticalBuffer","scrollToRowPosition","scrollToRowIfVisible","scrollToColumnPosition","scrollToColumnIfVisible","rowFormatter","rowFormatterPrint","rowFormatterClipboard","rowFormatterHtmlOutput","placeholder","dataLoader","dataLoaderLoading","dataLoaderError","dataSendParams","dataReceiveParams","CoreFeature","table","silent","load","undefined","modules","localize","getText","arguments","bind","getLocale","comms","getConnections","send","layout","getMode","eventBus","subscribe","unsubscribe","key","subscribed","subscriptionChange","dispatch","chain","confirm","externalEvents","value","options","module","ColumnComponent","column","_column","type","Proxy","get","target","name","receiver","componentFunctionBinder","handle","getElement","getDefinition","getField","cells","forEach","cell","push","getComponent","visible","isGroup","show","hide","output","length","parent","Column","columnManager","scrollToColumn","to","after","toColumn","findColumn","moveColumn","console","warn","nextCol","nextColumn","prevCol","prevColumn","updates","updateDefinition","getWidth","width","result","reinitializeWidth","setWidth","renderer","rerenderColumns","CellComponent","_cell","getValue","getOldValue","initialValue","row","getData","mutate","setValue","setValueActual","checkHeight","Cell","element","oldValue","minWidth","component","loaded","build","generateElement","_configureCell","getFieldValue","document","createElement","className","setAttribute","field","vertAligns","top","bottom","middle","hozAligns","left","right","center","style","textAlign","hozAlign","vertAlign","display","alignItems","justifyContent","definition","cssClass","classNames","split","classList","add","addEventListener","e","_generateTooltip","val","innerHTML","Node","firstChild","removeChild","appendChild","tooltip","containerOnly","layoutElement","changed","setValueProcessData","cellRendered","dispatchExternal","subscribedExternal","rowManager","setFieldValue","_generateContents","widthStyled","offsetWidth","minWidthStyled","maxWidth","maxWidthStyled","reinitializeHeight","heightStyled","offsetHeight","redrawBlock","parentNode","deleteCell","calcs","getCellIndex","def","contentElement","titleHolderElement","titleElement","groupElement","createGroupElement","fieldStructure","titleFormatterRendered","mapDefinitions","setField","widthFixed","i","newCol","attachColumn","checkColumnVisibility","registerColumnField","_initialize","bindModuleColumns","el","defaults","optionsList","generate","defaultOptionList","Object","keys","indexOf","title","_getNestedData","_getFlatData","_setNestedData","_setFlatData","registerColumnPosition","reRegisterPosition","headerTooltip","langBind","headerVertical","_bindEvents","_buildColumnHeaderContent","_buildGroupHeader","_buildColumnHeader","setTooltip","dblTap","tapHold","tap","headerClick","headerDblClick","headerContext","headerTap","passive","headerDblTap","clearTimeout","setTimeout","headerTapHold","classeNames","setMinWidth","parseInt","setMaxWidth","headerHozAlign","_buildColumnHeaderTitle","editableTitle","stopPropagation","focus","text","_formatColumnHeaderTitle","contents","dataObj","structure","alignment","parentHeight","getGroupElement","clientHeight","getHeadersElement","paddingTop","verticalAlign","clearVerticalAlign","formatter","rowNumColumn","getFirstColumn","getLastColumn","getTopColumn","updateBranches","colDefs","responsiveToggle","_verticalAlignHeaders","matchChildWidths","childWidth","child","splice","setWidthActual","isNaN","Math","floor","clientWidth","max","min","rows","heightInitialized","offsetParent","clearCellHeight","calcHeight","setCellHeight","Promise","resolve","reject","cellCount","deregisterColumn","findColumnIndex","_nextVisibleColumn","getColumnByIndex","_prevVisibleColumn","force","fitToData","clearWidth","assign","addColumn","then","err","defaultOptions","Helpers","box","getBoundingClientRect","window","pageYOffset","documentElement","clientTop","pageXOffset","clientLeft","obj","clone","Array","isArray","Date","deepClone","OptionsList","msgType","registeredDefaults","option","userOptions","hasOwnProperty","Renderer","elementVertical","elementHorizontal","tableElement","verticalFillMode","callback","update","blockRedraw","dir","includingBuffer","getDisplayRows","rowEl","remove","clearRows","clearColumns","renderRows","renderColumns","rerenderRows","position","ifVisible","rowIndex","offset","elVisible","elOffset","scrollToRowNearestTop","scrollToRow","scrollHeight","scrollTop","offsetTop","BaiscHorizontal","VirtualDomHorizontal","leftCol","rightCol","scrollLeft","vDomScrollPosLeft","vDomScrollPosRight","vDomPadLeft","vDomPadRight","fitDataColAvg","initialized","compatabilityCheck","frozen","ok","find","col","virtualDomHoz","dataChange","scroll","old","cols","clear","colPos","columnsByIndex","config","leftPos","rightPos","fitDataCheck","vdomHoz","paddingLeft","paddingRight","reinitChanged","renitializeRows","initializeRow","reinitializeRow","change","collsWidth","colEnd","generateCells","layoutRefresh","match","getVisibleRows","diff","addColRight","removeColLeft","addColLeft","removeColRight","start","end","getCell","fitDataColActualWidthCheck","prepend","newWidth","widthDiff","colPositionAdjust","ColumnManager","blockHozScrollEvent","headersElement","columnsByField","initializeRenderer","createHeadersElement","createHeaderElement","insertBefore","scrollHorizontal","renderClass","renderers","RendererVirtualDomHorizontal","RendererBasicHorizontal","initialize","error","hozAdjust","scrollWidth","marginLeft","scrollColumns","definitions","sorter","call","setColumns","_addColumn","_reIndexColumns","redraw","before","nextToColumn","colEl","parentIndex","nextEl","nextSibling","unshift","columnRendered","getHeight","adjustTableSize","subject","_getSelf","HTMLElement","root","matches","fieldRoot","findIndex","active","structured","from","moveColumnActual","reinitialize","_moveColumnInArray","getComponents","updateRows","fromIndex","toIndex","concat","adjust","offsetLeft","generateCell","totalWidth","fixedWidth","colWidth","layoutMode","resetScroll","footerManager","RowComponent","_row","transform","getCells","getRowPosition","moveToRow","updateData","normalizeHeight","nextRow","prevRow","Row","manualHeight","outerHeight","created","setData","create","deleteCells","renderRowCells","rerenderRowCells","children","resizableRows","setHeight","clearHeight","updatedData","tempData","newRowData","JSON","parse","attrname","getColumnsByFieldRoot","findCell","nextDisplayRow","prevDisplayRow","toRow","findRow","moveRowActual","refreshActiveData","deleteActual","getRowIndex","detatchModules","deleteRow","group","BaiscVertical","visibility","onlyGroupHeaders","styleRow","render","rowTop","abs","VirtualDomVertical","vDomRowHeight","vDomTop","vDomBottom","vDomScrollPosTop","vDomScrollPosBottom","vDomTopPad","vDomBottomPad","vDomMaxRenderChain","vDomWindowBuffer","vDomWindowMinTotalRows","vDomWindowMinMarginRows","vDomTopNewRows","vDomBottomNewRows","paddingBottom","_virtualRenderFill","topRow","topOffset","topDiff","bottomDiff","margin","_addTopRow","vDomScrollHeight","_removeBottomRow","_addBottomRow","_removeTopRow","topEdge","bottomEdge","topFound","bottomRow","slice","forceMove","holder","topPad","rowsHeight","heightOccupied","topPadHeight","rowsCount","containerHeight","ceil","rowHeight","fillableSpace","addedRows","paddingAdjust","_quickNormalizeRowHeight","removableRows","RowManager","createHolderElement","createTableElement","heightFixer","firstRender","renderMode","fixedHeight","activeRowsPipeline","activeRows","activeRowsCount","displayRows","displayRowsCount","redrawBlockRestoreConfig","redrawBlockRederInPosition","dataPipeline","displayPipeline","leftDir","topDir","scrollRows","renderInPosition","columnsChanged","pagination","_setDataActual","reRenderInPosition","generateColumnsFromRowData","_wipeElements","wipe","allIndex","activeIndex","setActiveRows","displayRowIterator","displayIndex","regenerateRowNumbers","pos","addRowActual","findAddRowPos","reverse","item","addRow","chainResult","moveRowInArray","findRowIndex","rowOnly","getDisplayRowIndex","list","getRows","handler","priority","sort","a","b","skipStage","stage","cascadeOrder","resetDisplayRows","setDisplayRows","renderTable","layoutColumnsOnNewData","viewable","visibleRows","RendererVirtualDomVertical","RendererBasicVertical","_clearTable","renderEmptyScroll","initialHeight","otherHeight","external","resize","tableWidth","browser","event","createEvent","initEvent","dispatchEvent","Event","FooterManager","links","initializeElement","querySelector","activate","deactivate","link","footerRedraw","InteractionManager","abortClasses","previousTargets","listeners","componentMap","buildListenerMap","bindSubscriptionWatchers","listenerMap","listener","components","values","comp","subscriptionChanged","added","updateEventListeners","track","removeEventListener","targets","findTargets","path","bindComponents","triggerEvents","abort","filter","includes","elTargets","targetMatches","previousTarget","ComponentFuctionBinder","bindings","funcName","hanlder","DataLoader","loaderElement","createLoaderElement","msgElement","createMsgElement","loadingElement","errorElement","requestOrder","loading","template","trim","content","params","replace","requestNo","showLoader","mapParams","response","objectInvert","rowData","hideLoader","showError","map","shouldLoad","langText","ExternalEventBus","debug","events","subscriptionNotifiers","_debugDispatch","_dispatch","_notifiySubscriptionChange","notifiers","args","shift","callResult","apply","log","InternalEventBus","_debugChain","_chain","_debugConfirm","_confirm","fallback","subscriber","confirmed","TableRegistry","tables","query","results","querySelectorAll","matchElement","Tabulator","lookupTable","Module","_handler","register","func","registerDataPipelineHandler","registerDisplayPipelineHandler","reinitializeColumnWidths","responsiveLayout","modExists","colsWidth","gap","lastCol","responsive","flexWidth","flexGrowUnits","flexColWidth","flexColumns","fixedShrinkColumns","flexShrinkUnits","overflowWidth","gapFill","calcWidth","scaleColumns","freeSpace","shrinkCols","oversizeCols","oversizeSpace","remainingSpace","nextColWidth","remainingFlexGrowUnits","changeUnits","undersizeCols","calcGrow","widthGrow","calcShrink","widthShrink","fitData","fitDataFill","fitDataGeneral","fitDataTable","fitDataStretch","fitColumns","Layout","mode","registerTableOption","registerColumnOption","modes","moduleName","defaultModes","Localize","locale","lang","langList","langs","headerFilterPlaceholder","setHeaderFilterPlaceholder","installLang","setLocale","registerTableFunction","getLang","headerFilters","_setLangProp","desiredLocale","traverseLang","trans","prop","navigator","language","toLowerCase","prefix","_executeBindings","pathArray","_getLangElement","level","rootPath","binding","defaultLangs","Comms","receive","selectors","connections","connection","con","action","tableComms","commsReceived","ModuleBinder","tabulator","bindStaticFuctionality","bindModules","coreModules","moduleBindings","extendModule","property","source","prototype","registerModule","mod","registerModuleBinding","findTable","moduleCore","modulesCore","modulesRegular","core","mods","interactionMonitor","browserSlow","browserMobile","rtl","initialzeCoreSystems","_create","_clearObjectPointers","_mapDepricatedFunctionality","InteractionMonitor","getComputedStyle","direction","getSelection","empty","removeAllRanges","selection","rtlCheck","_buildElement","_loadInitialData","reactiveData","_detectBrowser","span","deregister","ua","userAgent","vendor","opera","test","substr","restoreRedraw","extensions","input","accept","file","files","reader","FileReader","readAsText","onload","onerror","click","blockActiveLoad","clearData","getDataCount","responses","addRows","newRows","getRowFromPosition","count","successCount","foundRows","doneCheck","fromRow","getDefinitionTree","returncolumn","fromColumn","plugin","required","Accessor","allowedTypes","initializeColumn","transformRow","charAt","toUpperCase","accessor","lookupAccessor","accessors","rowComponent","traverse","colCompnent","defautlAccessors","method","generateParamsList","serializeParams","encoded","encodeURIComponent","join","url","contentType","urlGenerator","ajaxContentType","contentTypeFormatters","headers","body","Accept","location","origin","credentials","fetch","json","status","statusText","stringify","form","FormData","append","Ajax","loaderPromise","ajaxRequestFunc","defaultLoaderPromise","ajaxURLGenerator","defaultURLGenerator","ajaxParams","setParams","ajaxConfig","setConfig","ajaxURL","setUrl","getUrl","requestDataCheck","requestData","previousData","sendRequest","_loadDefaultConfig","defaultConfig","ajaxRequesting","ajaxResponse","defaultContentTypeFormatters","updateOrAddData","insert","addData","clipboard","headerFindSuccess","columnMap","Clipboard","pasteParser","pasteAction","customSelection","rowRange","blocked","clipboardCopyRowRange","plain","html","preventDefault","clipboardCopyFormatter","generateExportList","clipboardCopyConfig","clipboardCopyStyled","genereateHTMLTable","generatePlainContent","clipboardData","originalEvent","reset","paste","setPasteParser","clipboardPasteParser","setPasteAction","clipboardPasteAction","copy","getKey","range","internal","sel","textRange","createRange","selectNodeContents","toString","addRange","createTextRange","moveToElementText","select","execCommand","pasteActions","parser","pasteParsers","checkPaseOrigin","getPasteData","mutateData","mutator","valid","tagName","edit","currentCell","defaultPasteActions","defaultPasteParsers","CalcComponent","calcParams","precision","reduce","sum","Number","toFixed","parseFloat","String","ColumnCalcs","topCalcs","botCalcs","genColumn","topElement","botElement","botRow","topInitialized","botInitialized","cellValueChanged","initializeColumnCheck","rowsUpdated","recalcActiveRows","tableRedraw","getResults","userRecalc","recalc","groupBy","recalcRowGroup","topCalc","bottomCalc","columnCalcs","topCalcParams","botCalcParams","bottomCalcParams","calculations","initializeTopRow","botCalc","initializeBottomRow","rowsToData","generateRow","frozenColumns","recalcGroup","groupRows","getRowGroup","groups","getChildGroups","generateRowData","dataTree","dataTreeChildColumnCalcs","open","getFilteredTreeChildren","disable","enable","format","getFormatter","paramKey","getGroups","getGroupResults","groupObj","subGroups","getSubGroups","subGroupResults","subgroup","defaultCalculations","DataTree","indent","collapseEl","expandEl","branchEl","elementField","startOpen","registerComponentFunction","collapseRow","expandRow","toggleRow","getTreeParent","getRowChildren","addTreeChildRow","dummyEl","firstCol","getFirstVisibileColumn","dataTreeChildField","dataTreeChildIndent","dataTreeElementColumn","dataTreeBranchElement","dataTreeCollapseElement","tabIndex","dataTreeExpandElement","dataTreeStartExpanded","layoutRow","rowDelete","rowDataChanged","columnMoving","registerDisplayHandler","getTreeChildren","redrawNeeded","refreshData","childArray","controlEl","generateControlElement","cloneNode","marginRight","getPropertyValue","oldControl","replaceChild","getChildren","allChildren","generateChildren","dataTreeFilter","dataTreeSort","subChildren","sub","childData","childRow","childIndex","findChildIndex","recurse","setFileContents","delimiter","fileContents","depth","bom","header","autoTableParams","rowGroupStyles","fontStyle","fontSize","cellPadding","fillColor","rowCalcStyles","jsPDFParams","jsPDF","orientation","unit","parseRow","styles","colSpan","rowSpan","doc","autoTable","addPageContent","head","documentProcessing","self","sheetName","workbook","XLSX","utils","book_new","tableFeatures","SheetNames","Sheets","generateSheet","merges","worksheet","s","c","r","j","sheet_add_aoa","encode_range","sheetOnly","sheets","sheet","commsSend","intercept","s2ab","buf","ArrayBuffer","view","Uint8Array","charCodeAt","write","bookType","bookSST","csv","pdf","xlsx","Download","blob","download","downloadToTab","filename","interceptCallback","downloadFunc","buildLink","mime","triggerDownload","downloaders","downloadConfig","downloadRowRange","groupHeader","groupHeaderDownload","_group","getRowCount","newTab","Blob","downloadReady","URL","createObjectURL","msSaveOrOpenBlob","defaultDownloaders","maskInput","mask","maskLetter","maskLetterChar","maskNumber","maskNumberChar","maskWildcard","maskWildcardChar","fillSymbols","symbol","char","keyCode","maskAutoFill","onRendered","success","cancel","editorParams","cellValue","search","padding","boxSizing","elementAttributes","getAttribute","preventScroll","onChange","vertNav","verticalNavigation","whiteSpace","getRow","heightNow","selectionStart","stopImmediatePropagation","step","blurFunc","cellEl","initialDisplayValue","defaultValue","listEl","multiselect","dataItems","currentItem","displayItems","currentItems","blurable","blockListShow","searchWord","searchWordTimeout","getUniqueColumnValues","getColumnByField","getColumn","parseItems","inputValues","curentValues","dataList","displayList","processComplexListItem","label","itemParams","setItem","sortValuesList","fillList","listItemFormatter","toggleItem","chooseItem","setCurrentItem","scrollIntoView","behavior","block","inline","fillInput","unsetItem","hideList","chooseItems","unsetItems","len","cancelItem","showList","removeScrollListener","scrollTovalue","character","fromCharCode","startsWith","cursor","readOnly","uniqueColumnValues","genUniqueColumnValues","filterList","term","intialLoad","items","searchFunc","addNotice","searchingPlaceholder","fillListIfNotEmpty","showListOnEmpty","notice","searchEl","clearList","itemList","emptyPlaceholder","current","freetext","allowEmpty","showInputValue","maxStars","getElementsByTagName","size","stars","starsHolder","star","createElementNS","starChange","buildStar","starHolder","nextStar","blur","changeValue","overflow","textOverflow","percent","bar","mouseDrag","mouseDragWidth","updateValue","calcVal","round","backgroundColor","screenX","tristate","indetermValue","indeterminateValue","indetermState","marginTop","indeterminate","checked","textarea","number","autocomplete","progress","tickCross","Edit","mouseClick","recursionBlock","invalidEdit","editedCells","editors","getEditedCells","clearCellEdited","navigatePrev","navigateNext","navigateLeft","navigateRight","navigateUp","navigateDown","cellisEdited","clearEdited","editCell","cellCancelEdit","bindEditor","columnDeleteCheck","rowDeleteCheck","cancelEdit","keybindingNavigateNext","newRow","nav","next","edited","nextCell","findNextEditableCell","getIndex","findPrevEditableCell","allowEdit","check","prevCell","editor","editable","validate","clearEditor","variableHeight","cellEditCancelled","contains","button","forceEdit","focusCellNoEvent","getRenderMode","leftEdge","rightEdge","leftMargin","rightMargin","rendered","cellEditor","validationMode","checkForRestyle","focusScrollAdjust","cellClick","cellEditing","editIndex","invalid","defaultEditors","ExportRow","ExportColumn","Export","cloneTableStyle","colVisProp","getHtml","columnHeaders","headersToExportRows","generateColumnGroupHeaders","bodyToExportRows","rowLookup","genereateTableElement","selectRow","selectedRows","columnGroups","colData","processColumnGroup","maxDepth","groupData","subGroup","subGroupData","columnVisCheck","headerDepth","exportRows","parseColumnGroup","rowGroups","exportCols","headerEl","bodyEl","lookupTableStyles","setup","treeElementField","mapElementStyles","genereateHeaderElement","genereateGroupElement","genereateCalcElement","genereateRowElement","evenRow","oddRow","calcRow","firstRow","firstGroup","getElementsByClassName","styleCells","firstCell","lastCell","generator","isVisible","cellWrapper","formatCells","formatExportValue","align","renderedCallback","htmlOutputConfig","props","lookup","fromStyle","filterVal","rowVal","filterParams","RegExp","keywords","separator","keyword","matchAll","endsWith","Filter","headerFilterColumns","prevHeaderFilterChangeCheck","searchRows","searchData","userSetFilter","userRefreshFilter","userAddFilter","getFilters","userSetHeaderFilterFocus","userGetHeaderFilterValue","userSetHeaderFilterValue","getHeaderFilters","userRemoveFilter","userClearFilter","userClearHeaderFilter","setHeaderFilterFocus","reloadHeaderFilter","getHeaderFilterValue","setHeaderFilterValue","initializeColumnHeaderFilter","hideHeaderFilterElements","showHeaderFilterElements","tableBuilt","filterMode","remoteFilterParams","registerDataHandler","initialFilter","setFilter","initialHeaderFilter","refreshFilter","addFilter","removeFilter","all","clearFilter","clearHeaderFilter","headerFilter","setHeaderFilterColumnPlaceholder","filterType","tagType","attrType","filterChangeCheck","filterFunc","prevSuccess","emptyFunc","headerFilterFunc","filters","headerFilterFuncParams","fieldVal","colVal","trackChanges","generateHeaderFilterElement","filterElement","editorElement","typingTimer","searchTrigger","headerElement","headerFilterEmptyCheck","headerFilterParams","headerFilterLiveFilterDelay","hasAttribute","headerFilterLiveFilter","reloadData","findFilter","findSubFilters","ajax","filtersToArray","searchType","filterRecurse","rowList","activeRowComponents","filterRow","subFilter","defaultFilters","formatterParams","emptyToSpace","sanitizeHTML","floatVal","integer","decimal","rgx","decimalSym","thousandSym","thousand","symbolAfter","urlPrefix","labelField","urlField","src","urlSuffix","truthy","allowTruthy","tick","tickElement","cross","crossElement","inputFormat","outputFormat","invalidPlaceholder","newDatetime","moment","isValid","timezone","tz","datetime","suffix","humanize","date","duration","starActive","starInactive","colors","color","percentValue","legendAlign","legend","legendColor","barEl","legendEl","holderEl","toggleList","isOpen","checkbox","toggleSelect","isSelected","registerRowSelectCheckbox","deselectRow","registerHeaderSelectCheckbox","plaintext","money","image","datetimediff","traffic","buttonTick","buttonCross","rownum","responsiveCollapse","rowSelection","Format","formatValue","formatHeader","lookupFormatter","formatterPrint","print","formatterClipboard","formatterHtmlOutput","htmlOutput","formatters","mockCell","titleFormatter","titleFormatterParams","entityMap","defaultFormatters","FrozenColumns","leftColumns","rightColumns","rightPadding","initializationMode","scrollEndTimer","layoutCell","edge","frozenCheck","calcMargins","layoutColumnPosition","layoutCalcRows","_calcSpace","allCells","leftParents","parentEl","getColGroupParentElement","FrozenRows","freezeRow","unfreezeRow","isRowFrozen","detachRow","styleRows","GroupComponent","toggleVisibility","groupManager","Group","oldGroup","hasSubGroups","groupIDLookups","_addRowToGroup","_addRow","groupList","elementContents","arrowElement","createElements","addBindings","createValueGroups","arrow","movableRows","moveRow","initializeGroupHeader","allowedValues","_createGroup","toggleElement","groupContextMenu","groupClickMenu","menu","initializeGroup","groupTap","groupDblTap","groupTapHold","groupToggleElement","groupID","groupKey","headerGenerator","conformRowData","generateGroupHeaderContents","updateGroupRows","scrollHeader","groupValues","removeGroup","noCalc","_visSet","getHeadersAndRows","hasTopCalcs","detachElement","generateTopRow","hasBottomCalcs","generateBottomRow","groupClosedShowCalcs","getDisplayIndex","checkClassicModeGroupHeaderWidth","prev","compoment","getPath","addBindingsd","childNodes","GroupRows","setGroupBy","setGroupValues","setGroupStartOpen","setGroupHeader","userGetGroups","userGetGroupedData","rowGetGroup","groupStartOpen","langValue","removeCalcs","getRealColumns","lookupFunc","groupUpdateOnCellEdit","cellUpdated","reassignRowToGroup","rowDeleting","scrollHeaders","rowMoving","rowAddingIndex","rowSample","prevValue","assignRowToGroup","getGroupedData","toGroup","fromGroup","removeRow","insertRow","generateGroups","groupComponents","groupListData","rowCount","headerContent","pullGroupListData","oldGroups","createGroup","assignRowToExistingGroup","newGroupNeeded","oldRowGroup","oldGroupPath","newGroupPath","getExpectedPath","samePath","every","groupPath","groupId","setDisplayIndex","cellEdit","rowAdd","_rebindRow","rowMove","posFrom","newValue","posTo","History","history","clearComponentHistory","rowDeleted","rowMoved","undo","redo","getHistoryUndoSize","getHistoryRedoSize","getGroup","undoers","redoers","oldRow","defaultUndoers","defaultRedoers","HtmlTableImport","fieldIndex","hasIndex","tableElementCheck","parseTable","_extractOptions","_extractHeaders","_generateBlankHeaders","newElement","attributes","optionsArr","attrib","_attribValue","exists","_findCol","textContent","Interaction","eventMap","rowClick","rowDblClick","rowContext","rowMouseEnter","rowMouseLeave","rowMouseOver","rowMouseOut","rowMouseMove","rowTap","rowDblTap","rowTapHold","cellDblClick","cellContext","cellMouseEnter","cellMouseLeave","cellMouseOver","cellMouseOut","cellMouseMove","cellTap","cellDblTap","cellTapHold","headerMouseEnter","headerMouseLeave","headerMouseOver","headerMouseOut","headerMouseMove","groupClick","groupDblClick","groupContext","groupMouseEnter","groupMouseLeave","groupMouseOver","groupMouseOut","groupMouseMove","subscribers","touchSubscribers","columnSubscribers","touchWatchers","tapDbl","initializeExternalEvents","cellContentsSelectionFixer","selectNode","subscriptionChangeExternal","subscribeTouchEvents","unsubscribeTouchEvents","handleTouch","notouch","watchers","componentObj","navPrev","navNext","navUp","navDown","scrollPageUp","scrollPageDown","scrollToStart","scrollToEnd","copyToClipboard","keyBlock","newPos","scrollMax","navLeft","navRight","Keybindings","watchKeys","pressedKeys","keyupBinding","keydownBinding","keybindings","mergedBindings","mapBindings","bindEvents","clearBindings","actions","mapBinding","symbolsList","ctrl","meta","symbols","code","checkBinding","ctrlKey","shiftKey","metaKey","defaultBindings","defaultActions","Menu","menuElements","blurEvent","hideMenu","escEvent","escMenu","nestedMenuBlock","positionReversedX","contextMenu","clickMenu","initializeCell","headerContextMenu","headerClickMenu","headerMenu","initializeColumnHeader","headerMenuEl","LoadMenuEvent","loadMenu","rowContextMenu","rowClickMenu","touch","MouseEvent","menuEl","itemEl","disabled","hideOldSubMenus","positionMenu","pop","docHeight","innerHeight","x","y","parentOffset","touches","pageX","pageY","MoveColumns","placeholderElement","createPlaceholderElement","hoverElement","checkTimeout","checkPeriod","moving","toCol","toColAfter","startX","autoScrollMargin","autoScrollStep","autoScrollTimeout","touchMove","moveHover","endMove","mousemove","which","startMove","bindTouchEvents","startXMove","prevColWidth","nextColWidthLast","prevColWidthLast","moveToCol","_bindMouseMove","movingCells","_unbindMouseMove","columnHolder","xPos","scrollPos","MoveRows","toRowAfter","hasHandle","startY","tableRowDropEvent","connectionSelectorsTables","connectionSelectorsElements","connectionElements","connectedTable","connectedRow","movableRowsConnectedTables","movableRowsConnectedElements","mouseup","tableRowDrop","previousSibling","rowHandle","startYMove","nextRowHeight","prevRowHeight","nextRowHeightLast","prevRowHeightLast","setStartPosition","connectToTables","pointerEvents","getTableElement","disconnectFromTables","moveHoverConnections","moveHoverTable","rowHolder","yPos","movableRowsElementDrop","connectionTables","commsConnections","dropEvent","elementRowDrop","tabulatorElementDropEvent","sender","movableRowsSender","senders","movableRowsReceiver","receivers","connect","disconnect","dropComplete","fromTable","toTable","Mutator","enabled","transformCell","lookupMutator","mutators","mutatorEdit","defaultMutators","Page","progressiveLoad","page","initialLoad","dataChanging","pageSizes","dataReceivedNames","dataSentNames","setMaxPage","setPage","userSetPageToRow","userSetPageSize","getPageSize","previousPage","nextPage","getPage","getPageMax","setPageToRow","rowAddingPosition","initialLoadComplete","calculatePageSizes","paginationMode","remotePageParams","_parseRemoteData","restOnRenderBefore","initializePaginator","initializeProgressive","scrollVertical","dispRows","testElRow","testElCell","paginationSize","setPageSize","progressiveLoadScrollMargin","pagesElement","firstBut","prevBut","nextBut","lastBut","paginationSizeSelector","pageSizeSelect","hidden","pageSelectLabel","paginationElement","paginationInitialPage","paginationButtonCount","generatePageSizeSelectList","trigger","leftSize","rightSize","_generatePageButton","setMaxRows","_setPageButtons","last_page","progressiveLoadDelay","footer","local","id","localStorage","getItem","cookie","cookiePos","expireDate","setDate","getDate","toUTCString","Persistence","defWatcherBlock","readFunc","writeFunc","testKey","removeItem","persistence","persistenceMode","persistenceID","retreivedData","localStorageTest","persistenceReaderFunc","readers","persistenceWriterFunc","writers","retreiveData","save","eventSave","getColumnLayout","setColumnLayout","sorters","initialSort","parseColumns","getColumns","mergeDefinition","getOwnPropertyDescriptor","defineProperty","set","oldCols","newCols","_findColumn","validateSorters","getSort","getGroupConfig","getPageConfig","excludedKeys","defStore","colDef","defaultReaders","defaultWriters","Print","manualBlock","printAsHtml","replaceTable","cleanup","printFullscreen","genereateTable","printConfig","printStyled","printRowRange","scrollX","scrollY","footerEl","tableEl","footerContent","printHeader","printFooter","printFormatter","scrollTo","ReactiveData","origFuncs","currentVersion","unblock","watchRow","watchData","unwatchData","version","enumerable","configurable","arg","getRowFromDataObject","startRow","oldRows","writable","watchKey","watchTreeChildren","childField","rebuildTree","ResizeColumns","startColumn","startWidth","prevHandle","layoutCellHandles","layoutColumnHeader","resizable","handleDown","nearestColumn","_checkResizability","_mouseDown","prevHandleDown","colIndex","mouseMove","checkCellHeights","mouseUp","ResizeRows","startHeight","screenY","ResizeTable","observer","containerObserver","tableHeight","containerWidth","autoResize","tableStyle","ResizeObserver","entry","nodeHeight","contentRect","nodeWidth","observe","tableResized","unobserve","ResponsiveLayout","hiddenColumns","collapseFormatter","collapseStartOpen","collapseHandleColumn","updateColumnVisibility","initializeResponsivity","responsiveLayoutCollapseFormatter","formatCollapsedData","responsiveLayoutCollapseStartOpen","order","generateCollapsedContent","generateCollapsedRowContent","colCount","working","getFlexBaseWidth","hideColumn","showColumn","generateCollapsedRowData","mockCellComponent","responsiveLayoutCollapseUseFormatters","titleData","valueData","node_content","titleHighlight","innerText","SelectRow","selecting","lastClickedRow","selectPrev","headerCheckboxElement","selectRows","deselectRows","getSelectedRows","getSelectedData","isRowSelected","selectable","clearSelectionData","selectablePersistence","_deselectRow","_rowSelectionChanged","endSelect","selected","selectableCheck","selectableRangeMode","_clearSelection","lastClickedRowIdx","rowIdx","fromRowIdx","toRowIdx","toggledRows","toggledRow","getCurrentCell","_selectRow","rowMatch","rowInfo","selectableRollingSelection","checkboxEl","dataTreeSelectPropagate","childRowSelection","selectedRow","aRow","bRow","alignEmptyValues","decimalSeparator","thousandSeparator","emptyAlign","langLocale","localeCompare","el1","el2","calc","d","as","bs","a1","b1","L","rx","rd","isFinite","string","time","boolean","array","alphanum","Sort","sortList","userSetSort","clearSort","sortMode","remoteSortParams","setSort","refreshSort","arrowEl","sorterParams","startingDir","headerSortStartingDir","headerSortTristate","headerSort","headerSortElement","columnHeaderSortMulti","newSortList","sortOrderReverse","sortListActual","rowComponents","clearColumnHeaders","sortObj","findSorter","setColumnHeader","_sortItems","sorterCount","sortItem","_sortRow","el1Comp","el2Comp","defaultSorters","parameters","numeric","starts","ends","minLength","maxLength","regex","reg","unique","cellData","Validate","invalidCells","getInvalidCells","userClearCellValidation","userValidate","cellIsValid","clearValidation","cellValidate","columnValidate","rowValidate","validator","_extractValidator","substring","_buildValidator","validators","invalidIndex","defaultValidators","TabulatorFull"],"mappings":"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"} \ No newline at end of file diff --git a/dist/js/tabulator.min.js b/dist/js/tabulator.min.js index 1927ccdd4..be1927664 100644 --- a/dist/js/tabulator.min.js +++ b/dist/js/tabulator.min.js @@ -1,3 +1,3 @@ -/* Tabulator v4.9.3 (c) Oliver Folkerd 2021 */ -!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).Tabulator=t()}(this,(function(){"use strict";function t(e){return(t="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function n(e,t){for(var i=0;ie.length)&&(t=e.length);for(var i=0,o=new Array(t);i=e.length?{done:!0}:{done:!1,value:e[o++]}},e:function(e){throw e},f:n}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,s=!0,l=!1;return{s:function(){i=e[Symbol.iterator]()},n:function(){var e=i.next();return s=e.done,e},e:function(e){l=!0,a=e},f:function(){try{s||null==i.return||i.return()}finally{if(l)throw a}}}}var p=function(){function e(t){o(this,e),this._column=t,this.type="ColumnComponent"}return a(e,[{key:"getElement",value:function(){return this._column.getElement()}},{key:"getDefinition",value:function(){return this._column.getDefinition()}},{key:"getField",value:function(){return this._column.getField()}},{key:"getCells",value:function(){var e=[];return this._column.cells.forEach((function(t){e.push(t.getComponent())})),e}},{key:"isVisible",value:function(){return this._column.visible}},{key:"show",value:function(){this._column.isGroup?this._column.columns.forEach((function(e){e.show()})):this._column.show()}},{key:"hide",value:function(){this._column.isGroup?this._column.columns.forEach((function(e){e.hide()})):this._column.hide()}},{key:"toggle",value:function(){this._column.visible?this.hide():this.show()}},{key:"delete",value:function(){return this._column.delete()}},{key:"getSubColumns",value:function(){var e=[];return this._column.columns.length&&this._column.columns.forEach((function(t){e.push(t.getComponent())})),e}},{key:"getParentColumn",value:function(){return this._column.parent instanceof Column&&this._column.parent.getComponent()}},{key:"_getSelf",value:function(){return this._column}},{key:"scrollTo",value:function(){return this._column.table.columnManager.scrollToColumn(this._column)}},{key:"getTable",value:function(){return this._column.table}},{key:"headerFilterFocus",value:function(){this._column.table.modExists("filter",!0)&&this._column.table.modules.filter.setHeaderFilterFocus(this._column)}},{key:"reloadHeaderFilter",value:function(){this._column.table.modExists("filter",!0)&&this._column.table.modules.filter.reloadHeaderFilter(this._column)}},{key:"getHeaderFilterValue",value:function(){if(this._column.table.modExists("filter",!0))return this._column.table.modules.filter.getHeaderFilterValue(this._column)}},{key:"setHeaderFilterValue",value:function(e){this._column.table.modExists("filter",!0)&&this._column.table.modules.filter.setHeaderFilterValue(this._column,e)}},{key:"move",value:function(e,t){var i=this._column.table.columnManager.findColumn(e);i?this._column.table.columnManager.moveColumn(this._column,i,t):console.warn("Move Error - No matching column found:",i)}},{key:"getNextColumn",value:function(){var e=this._column.nextColumn();return!!e&&e.getComponent()}},{key:"getPrevColumn",value:function(){var e=this._column.prevColumn();return!!e&&e.getComponent()}},{key:"updateDefinition",value:function(e){return this._column.updateDefinition(e)}},{key:"getWidth",value:function(){return this._column.getWidth()}},{key:"setWidth",value:function(e){var t;return t=!0===e?this._column.reinitializeWidth(!0):this._column.setWidth(e),this._column.table.options.virtualDomHoz&&this._column.table.vdomHoz.reinitialize(!0),t}},{key:"validate",value:function(){return this._column.validate()}}]),e}(),f=function(){function e(t){o(this,e),this._cell=t}return a(e,[{key:"getValue",value:function(){return this._cell.getValue()}},{key:"getOldValue",value:function(){return this._cell.getOldValue()}},{key:"getInitialValue",value:function(){return this._cell.initialValue}},{key:"getElement",value:function(){return this._cell.getElement()}},{key:"getRow",value:function(){return this._cell.row.getComponent()}},{key:"getData",value:function(){return this._cell.row.getData()}},{key:"getField",value:function(){return this._cell.column.getField()}},{key:"getColumn",value:function(){return this._cell.column.getComponent()}},{key:"setValue",value:function(e,t){void 0===t&&(t=!0),this._cell.setValue(e,t)}},{key:"restoreOldValue",value:function(){this._cell.setValueActual(this._cell.getOldValue())}},{key:"restoreInitialValue",value:function(){this._cell.setValueActual(this._cell.initialValue)}},{key:"edit",value:function(e){return this._cell.edit(e)}},{key:"cancelEdit",value:function(){this._cell.cancelEdit()}},{key:"isEdited",value:function(){return!!this._cell.modules.edit&&this._cell.modules.edit.edited}},{key:"clearEdited",value:function(){this._cell.table.modExists("edit",!0)&&this._cell.table.modules.edit.clearEdited(this._cell)}},{key:"isValid",value:function(){return!this._cell.modules.validate||!this._cell.modules.validate.invalid}},{key:"validate",value:function(){return this._cell.validate()}},{key:"clearValidation",value:function(){this._cell.table.modExists("validate",!0)&&this._cell.table.modules.validate.clearValidation(this._cell)}},{key:"nav",value:function(){return this._cell.nav()}},{key:"checkHeight",value:function(){this._cell.checkHeight()}},{key:"getTable",value:function(){return this._cell.table}},{key:"_getSelf",value:function(){return this._cell}}]),e}(),g=function(){function e(t,i){o(this,e),this.table=t.table,this.column=t,this.row=i,this.element=null,this.value=null,this.initialValue,this.oldValue=null,this.modules={},this.height=null,this.width=null,this.minWidth=null,this.component=null,this.loaded=!1,this.build()}return a(e,[{key:"build",value:function(){this.generateElement(),this.setWidth(),this._configureCell(),this.setValueActual(this.column.getFieldValue(this.row.data)),this.initialValue=this.value}},{key:"generateElement",value:function(){this.element=document.createElement("div"),this.element.className="tabulator-cell",this.element.setAttribute("role","gridcell"),this.element=this.element}},{key:"_configureCell",value:function(){var e=this,t=this.column.cellEvents,i=this.element,o=this.column.getField();(i.style.textAlign=this.column.hozAlign,this.column.vertAlign&&(i.style.display="inline-flex",i.style.alignItems={top:"flex-start",bottom:"flex-end",middle:"center"}[this.column.vertAlign]||"",this.column.hozAlign&&(i.style.justifyContent={left:"flex-start",right:"flex-end",center:"center"}[this.column.hozAlign]||"")),o&&i.setAttribute("tabulator-field",o),this.column.definition.cssClass)&&this.column.definition.cssClass.split(" ").forEach((function(e){i.classList.add(e)}));"hover"===this.table.options.tooltipGenerationMode&&i.addEventListener("mouseenter",(function(t){e._generateTooltip()})),this._bindClickEvents(t),this._bindTouchEvents(t),this._bindMouseEvents(t),this.column.modules.edit&&this.table.modules.edit.bindEditor(this),this.column.definition.rowHandle&&!1!==this.table.options.movableRows&&this.table.modExists("moveRow")&&this.table.modules.moveRow.initializeCell(this),this.column.visible||this.hide()}},{key:"_bindClickEvents",value:function(e){var t=this,i=this.element;(e.cellClick||this.table.options.cellClick)&&i.addEventListener("click",(function(i){var o=t.getComponent();e.cellClick&&e.cellClick.call(t.table,i,o),t.table.options.cellClick&&t.table.options.cellClick.call(t.table,i,o)})),e.cellDblClick||this.table.options.cellDblClick?i.addEventListener("dblclick",(function(i){var o=t.getComponent();e.cellDblClick&&e.cellDblClick.call(t.table,i,o),t.table.options.cellDblClick&&t.table.options.cellDblClick.call(t.table,i,o)})):i.addEventListener("dblclick",(function(e){if(!t.table.modExists("edit")||t.table.modules.edit.currentCell!==t){e.preventDefault();try{if(document.selection)(i=document.body.createTextRange()).moveToElementText(t.element),i.select();else if(window.getSelection){var i;(i=document.createRange()).selectNode(t.element),window.getSelection().removeAllRanges(),window.getSelection().addRange(i)}}catch(e){}}})),(e.cellContext||this.table.options.cellContext)&&i.addEventListener("contextmenu",(function(i){var o=t.getComponent();e.cellContext&&e.cellContext.call(t.table,i,o),t.table.options.cellContext&&t.table.options.cellContext.call(t.table,i,o)}))}},{key:"_bindMouseEvents",value:function(e){var t=this,i=this.element;(e.cellMouseEnter||this.table.options.cellMouseEnter)&&i.addEventListener("mouseenter",(function(i){var o=t.getComponent();e.cellMouseEnter&&e.cellMouseEnter.call(t.table,i,o),t.table.options.cellMouseEnter&&t.table.options.cellMouseEnter.call(t.table,i,o)})),(e.cellMouseLeave||this.table.options.cellMouseLeave)&&i.addEventListener("mouseleave",(function(i){var o=t.getComponent();e.cellMouseLeave&&e.cellMouseLeave.call(t.table,i,o),t.table.options.cellMouseLeave&&t.table.options.cellMouseLeave.call(t.table,i,o)})),(e.cellMouseOver||this.table.options.cellMouseOver)&&i.addEventListener("mouseover",(function(i){var o=t.getComponent();e.cellMouseOver&&e.cellMouseOver.call(t.table,i,o),t.table.options.cellMouseOver&&t.table.options.cellMouseOver.call(t.table,i,o)})),(e.cellMouseOut||this.table.options.cellMouseOut)&&i.addEventListener("mouseout",(function(i){var o=t.getComponent();e.cellMouseOut&&e.cellMouseOut.call(t.table,i,o),t.table.options.cellMouseOut&&t.table.options.cellMouseOut.call(t.table,i,o)})),(e.cellMouseMove||this.table.options.cellMouseMove)&&i.addEventListener("mousemove",(function(i){var o=t.getComponent();e.cellMouseMove&&e.cellMouseMove.call(t.table,i,o),t.table.options.cellMouseMove&&t.table.options.cellMouseMove.call(t.table,i,o)}))}},{key:"_bindTouchEvents",value:function(e){var t,i,o,n=this,a=this.element;(e.cellTap||this.table.options.cellTap)&&(o=!1,a.addEventListener("touchstart",(function(e){o=!0}),{passive:!0}),a.addEventListener("touchend",(function(t){if(o){var i=n.getComponent();e.cellTap&&e.cellTap.call(n.table,t,i),n.table.options.cellTap&&n.table.options.cellTap.call(n.table,t,i)}o=!1}))),(e.cellDblTap||this.table.options.cellDblTap)&&(t=null,a.addEventListener("touchend",(function(i){if(t){clearTimeout(t),t=null;var o=n.getComponent();e.cellDblTap&&e.cellDblTap.call(n.table,i,o),n.table.options.cellDblTap&&n.table.options.cellDblTap.call(n.table,i,o)}else t=setTimeout((function(){clearTimeout(t),t=null}),300)}))),(e.cellTapHold||this.table.options.cellTapHold)&&(i=null,a.addEventListener("touchstart",(function(t){clearTimeout(i),i=setTimeout((function(){clearTimeout(i),i=null,o=!1;var a=n.getComponent();e.cellTapHold&&e.cellTapHold.call(n.table,t,a),n.table.options.cellTapHold&&n.table.options.cellTapHold.call(n.table,t,a)}),1e3)}),{passive:!0}),a.addEventListener("touchend",(function(e){clearTimeout(i),i=null})))}},{key:"_generateContents",value:function(){var e;switch(t(e=this.table.modExists("format")?this.table.modules.format.formatValue(this):this.element.innerHTML=this.value)){case"object":if(e instanceof Node){for(;this.element.firstChild;)this.element.removeChild(this.element.firstChild);this.element.appendChild(e)}else this.element.innerHTML="",null!=e&&console.warn("Format Error - Formatter has returned a type of object, the only valid formatter object return is an instance of Node, the formatter returned:",e);break;case"undefined":case"null":this.element.innerHTML="";break;default:this.element.innerHTML=e}}},{key:"cellRendered",value:function(){this.table.modExists("format")&&this.table.modules.format.cellRendered&&this.table.modules.format.cellRendered(this)}},{key:"_generateTooltip",value:function(){var e=this.column.tooltip;e?(!0===e?e=this.value:"function"==typeof e&&!1===(e=e(this.getComponent()))&&(e=""),void 0===e&&(e=""),this.element.setAttribute("title",e)):this.element.setAttribute("title","")}},{key:"getElement",value:function(e){return this.loaded||(this.loaded=!0,e||this.layoutElement()),this.element}},{key:"getValue",value:function(){return this.value}},{key:"getOldValue",value:function(){return this.oldValue}},{key:"setValue",value:function(e,t){var i;this.setValueProcessData(e,t)&&(this.table.options.history&&this.table.modExists("history")&&this.table.modules.history.action("cellEdit",this,{oldValue:this.oldValue,newValue:this.value}),i=this.getComponent(),this.column.cellEvents.cellEdited&&this.column.cellEvents.cellEdited.call(this.table,i),this.table.options.groupUpdateOnCellEdit&&this.table.options.groupBy&&this.table.modExists("groupRows")&&this.table.modules.groupRows.reassignRowToGroup(this.row),this.cellRendered(),this.table.options.cellEdited.call(this.table,i),this.table.options.dataChanged&&this.table.options.dataChanged.call(this.table,this.table.rowManager.getData()))}},{key:"setValueProcessData",value:function(e,t){var i=!1;return this.value!=e&&(i=!0,t&&this.column.modules.mutate&&(e=this.table.modules.mutator.transformCell(this,e))),this.setValueActual(e),i&&this.table.modExists("columnCalcs")&&(this.column.definition.topCalc||this.column.definition.bottomCalc)&&(this.table.options.groupBy&&this.table.modExists("groupRows")?("table"!=this.table.options.columnCalcs&&"both"!=this.table.options.columnCalcs||this.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows),"table"!=this.table.options.columnCalcs&&this.table.modules.columnCalcs.recalcRowGroup(this.row)):this.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows)),i}},{key:"setValueActual",value:function(e){this.oldValue=this.value,this.value=e,this.table.options.reactiveData&&this.table.modExists("reactiveData")&&this.table.modules.reactiveData.block(),this.column.setFieldValue(this.row.data,e),this.table.options.reactiveData&&this.table.modExists("reactiveData")&&this.table.modules.reactiveData.unblock(),this.loaded&&this.layoutElement()}},{key:"layoutElement",value:function(){this._generateContents(),this._generateTooltip(),this.table.options.resizableColumns&&this.table.modExists("resizeColumns")&&"row"===this.row.type&&this.table.modules.resizeColumns.initializeColumn("cell",this.column,this.element),(this.column.definition.contextMenu||this.column.definition.clickMenu)&&this.table.modExists("menu")&&this.table.modules.menu.initializeCell(this),this.table.modExists("frozenColumns")&&this.table.modules.frozenColumns.layoutElement(this.element,this.column)}},{key:"setWidth",value:function(){this.width=this.column.width,this.element.style.width=this.column.widthStyled}},{key:"clearWidth",value:function(){this.width="",this.element.style.width=""}},{key:"getWidth",value:function(){return this.width||this.element.offsetWidth}},{key:"setMinWidth",value:function(){this.minWidth=this.column.minWidth,this.element.style.minWidth=this.column.minWidthStyled}},{key:"setMaxWidth",value:function(){this.maxWidth=this.column.maxWidth,this.element.style.maxWidth=this.column.maxWidthStyled}},{key:"checkHeight",value:function(){this.row.reinitializeHeight()}},{key:"clearHeight",value:function(){this.element.style.height="",this.height=null}},{key:"setHeight",value:function(){this.height=this.row.height,this.element.style.height=this.row.heightStyled}},{key:"getHeight",value:function(){return this.height||this.element.offsetHeight}},{key:"show",value:function(){this.element.style.display=this.column.vertAlign?"inline-flex":""}},{key:"hide",value:function(){this.element.style.display="none"}},{key:"edit",value:function(e){if(this.table.modExists("edit",!0))return this.table.modules.edit.editCell(this,e)}},{key:"cancelEdit",value:function(){if(this.table.modExists("edit",!0)){var e=this.table.modules.edit.getCurrentCell();e&&e._getSelf()===this?this.table.modules.edit.cancelEdit():console.warn("Cancel Editor Error - This cell is not currently being edited ")}}},{key:"validate",value:function(){return!this.column.modules.validate||!this.table.modExists("validate",!0)||!0===this.table.modules.validate.validate(this.column.modules.validate,this,this.getValue())}},{key:"delete",value:function(){!this.table.rowManager.redrawBlock&&this.element.parentNode&&this.element.parentNode.removeChild(this.element),this.modules.validate&&this.modules.validate.invalid&&this.table.modules.validate.clearValidation(this),this.modules.edit&&this.modules.edit.edited&&this.table.modules.edit.clearEdited(this),this.table.options.history&&this.table.modules.history.clearComponentHistory(this),this.element=!1,this.column.deleteCell(this),this.row.deleteCell(this),this.calcs={}}},{key:"nav",value:function(){var e=this,t=!1,i=this.row.getCellIndex(this);return{next:function(){var t,i=this.right();return!!i||!(!(t=e.table.rowManager.nextDisplayRow(e.row,!0))||!(i=t.findNextEditableCell(-1)))&&(i.edit(),!0)},prev:function(){var t,i=this.left();return!!i||!(!(t=e.table.rowManager.prevDisplayRow(e.row,!0))||!(i=t.findPrevEditableCell(t.cells.length)))&&(i.edit(),!0)},left:function(){return!!(t=e.row.findPrevEditableCell(i))&&(t.edit(),!0)},right:function(){return!!(t=e.row.findNextEditableCell(i))&&(t.edit(),!0)},up:function(){var t=e.table.rowManager.prevDisplayRow(e.row,!0);t&&t.cells[i].edit()},down:function(){var t=e.table.rowManager.nextDisplayRow(e.row,!0);t&&t.cells[i].edit()}}}},{key:"getIndex",value:function(){this.row.getCellIndex(this)}},{key:"getComponent",value:function(){return this.component||(this.component=new f(this)),this.component}}]),e}(),v=function(){function e(t,i){var n=this;o(this,e),this.table=i.table,this.definition=t,this.parent=i,this.type="column",this.columns=[],this.cells=[],this.element=this.createElement(),this.contentElement=!1,this.titleHolderElement=!1,this.titleElement=!1,this.groupElement=this.createGroupElement(),this.isGroup=!1,this.tooltip=!1,this.hozAlign="",this.vertAlign="",this.field="",this.fieldStructure="",this.getFieldValue="",this.setFieldValue="",this.titleFormatterRendered=!1,this.mapDefinitionDefaults(),this.setField(this.definition.field),this.table.options.invalidOptionWarnings&&this.checkDefinition(),this.modules={},this.cellEvents={cellClick:!1,cellDblClick:!1,cellContext:!1,cellTap:!1,cellDblTap:!1,cellTapHold:!1,cellMouseEnter:!1,cellMouseLeave:!1,cellMouseOver:!1,cellMouseOut:!1,cellMouseMove:!1},this.width=null,this.widthStyled="",this.maxWidth=null,this.maxWidthStyled="",this.minWidth=null,this.minWidthStyled="",this.widthFixed=!1,this.visible=!0,this.component=null,this._mapDepricatedFunctionality(),t.columns?(this.isGroup=!0,t.columns.forEach((function(t,i){var o=new e(t,n);n.attachColumn(o)})),this.checkColumnVisibility()):i.registerColumnField(this),t.rowHandle&&!1!==this.table.options.movableRows&&this.table.modExists("moveRow")&&this.table.modules.moveRow.setHandle(!0),this._buildHeader(),this.bindModuleColumns()}return a(e,[{key:"createElement",value:function(){var e=document.createElement("div");return e.classList.add("tabulator-col"),e.setAttribute("role","columnheader"),e.setAttribute("aria-sort","none"),e}},{key:"createGroupElement",value:function(){var e=document.createElement("div");return e.classList.add("tabulator-col-group-cols"),e}},{key:"mapDefinitionDefaults",value:function(){var e=this.table.options.columnDefaults;if(e)for(var t in e)void 0===this.definition[t]&&(this.definition[t]=e[t])}},{key:"checkDefinition",value:function(){var t=this;Object.keys(this.definition).forEach((function(i){-1===e.defaultOptionList.indexOf(i)&&console.warn("Invalid column definition option in '"+(t.field||t.definition.title)+"' column:",i)}))}},{key:"setField",value:function(e){this.field=e,this.fieldStructure=e?this.table.options.nestedFieldSeparator?e.split(this.table.options.nestedFieldSeparator):[e]:[],this.getFieldValue=this.fieldStructure.length>1?this._getNestedData:this._getFlatData,this.setFieldValue=this.fieldStructure.length>1?this._setNestedData:this._setFlatData}},{key:"registerColumnPosition",value:function(e){this.parent.registerColumnPosition(e)}},{key:"registerColumnField",value:function(e){this.parent.registerColumnField(e)}},{key:"reRegisterPosition",value:function(){this.isGroup?this.columns.forEach((function(e){e.reRegisterPosition()})):this.registerColumnPosition(this)}},{key:"_mapDepricatedFunctionality",value:function(){}},{key:"setTooltip",value:function(){var e=this,t=this.definition,i=t.headerTooltip||!1===t.tooltip?t.headerTooltip:this.table.options.tooltipsHeader;i?!0===i?t.field?this.table.modules.localize.bind("columns|"+t.field,(function(i){e.element.setAttribute("title",i||t.title)})):this.element.setAttribute("title",t.title):("function"==typeof i&&!1===(i=i(this.getComponent()))&&(i=""),this.element.setAttribute("title",i)):this.element.setAttribute("title","")}},{key:"_buildHeader",value:function(){for(var e=this,t=this.definition;this.element.firstChild;)this.element.removeChild(this.element.firstChild);t.headerVertical&&(this.element.classList.add("tabulator-col-vertical"),"flip"===t.headerVertical&&this.element.classList.add("tabulator-col-vertical-flip")),this.contentElement=this._bindEvents(),this.contentElement=this._buildColumnHeaderContent(),this.element.appendChild(this.contentElement),this.isGroup?this._buildGroupHeader():this._buildColumnHeader(),this.setTooltip(),this.table.options.resizableColumns&&this.table.modExists("resizeColumns")&&this.table.modules.resizeColumns.initializeColumn("header",this,this.element),t.headerFilter&&this.table.modExists("filter")&&this.table.modExists("edit")&&(void 0!==t.headerFilterPlaceholder&&t.field&&this.table.modules.localize.setHeaderFilterColumnPlaceholder(t.field,t.headerFilterPlaceholder),this.table.modules.filter.initializeColumn(this)),this.table.modExists("frozenColumns")&&this.table.modules.frozenColumns.initializeColumn(this),this.table.options.movableColumns&&!this.isGroup&&this.table.modExists("moveColumn")&&this.table.modules.moveColumn.initializeColumn(this),(t.topCalc||t.bottomCalc)&&this.table.modExists("columnCalcs")&&this.table.modules.columnCalcs.initializeColumn(this),this.table.modExists("persistence")&&this.table.modules.persistence.config.columns&&this.table.modules.persistence.initializeColumn(this),this.element.addEventListener("mouseenter",(function(t){e.setTooltip()}))}},{key:"_bindEvents",value:function(){var e,t,i,o=this,n=this.definition;"function"==typeof n.headerClick&&this.element.addEventListener("click",(function(e){n.headerClick(e,o.getComponent())})),"function"==typeof n.headerDblClick&&this.element.addEventListener("dblclick",(function(e){n.headerDblClick(e,o.getComponent())})),"function"==typeof n.headerContext&&this.element.addEventListener("contextmenu",(function(e){n.headerContext(e,o.getComponent())})),"function"==typeof n.headerTap&&(i=!1,this.element.addEventListener("touchstart",(function(e){i=!0}),{passive:!0}),this.element.addEventListener("touchend",(function(e){i&&n.headerTap(e,o.getComponent()),i=!1}))),"function"==typeof n.headerDblTap&&(e=null,this.element.addEventListener("touchend",(function(t){e?(clearTimeout(e),e=null,n.headerDblTap(t,o.getComponent())):e=setTimeout((function(){clearTimeout(e),e=null}),300)}))),"function"==typeof n.headerTapHold&&(t=null,this.element.addEventListener("touchstart",(function(e){clearTimeout(t),t=setTimeout((function(){clearTimeout(t),t=null,i=!1,n.headerTapHold(e,this.getComponent())}),1e3)}),{passive:!0}),this.element.addEventListener("touchend",(function(e){clearTimeout(t),t=null}))),"function"==typeof n.cellClick&&(this.cellEvents.cellClick=n.cellClick),"function"==typeof n.cellDblClick&&(this.cellEvents.cellDblClick=n.cellDblClick),"function"==typeof n.cellContext&&(this.cellEvents.cellContext=n.cellContext),"function"==typeof n.cellMouseEnter&&(this.cellEvents.cellMouseEnter=n.cellMouseEnter),"function"==typeof n.cellMouseLeave&&(this.cellEvents.cellMouseLeave=n.cellMouseLeave),"function"==typeof n.cellMouseOver&&(this.cellEvents.cellMouseOver=n.cellMouseOver),"function"==typeof n.cellMouseOut&&(this.cellEvents.cellMouseOut=n.cellMouseOut),"function"==typeof n.cellMouseMove&&(this.cellEvents.cellMouseMove=n.cellMouseMove),"function"==typeof n.cellTap&&(this.cellEvents.cellTap=n.cellTap),"function"==typeof n.cellDblTap&&(this.cellEvents.cellDblTap=n.cellDblTap),"function"==typeof n.cellTapHold&&(this.cellEvents.cellTapHold=n.cellTapHold),"function"==typeof n.cellEdited&&(this.cellEvents.cellEdited=n.cellEdited),"function"==typeof n.cellEditing&&(this.cellEvents.cellEditing=n.cellEditing),"function"==typeof n.cellEditCancelled&&(this.cellEvents.cellEditCancelled=n.cellEditCancelled)}},{key:"_buildColumnHeader",value:function(){var e=this,i=this.definition,o=this.table;(o.modExists("sort")&&o.modules.sort.initializeColumn(this,this.titleHolderElement),(i.headerContextMenu||i.headerClickMenu||i.headerMenu)&&o.modExists("menu")&&o.modules.menu.initializeColumnHeader(this),o.modExists("format")&&o.modules.format.initializeColumn(this),void 0!==i.editor&&o.modExists("edit")&&o.modules.edit.initializeColumn(this),void 0!==i.validator&&o.modExists("validate")&&o.modules.validate.initializeColumn(this),o.modExists("mutator")&&o.modules.mutator.initializeColumn(this),o.modExists("accessor")&&o.modules.accessor.initializeColumn(this),t(o.options.responsiveLayout)&&o.modExists("responsiveLayout")&&o.modules.responsiveLayout.initializeColumn(this),void 0!==i.visible&&(i.visible?this.show(!0):this.hide(!0)),i.cssClass)&&i.cssClass.split(" ").forEach((function(t){e.element.classList.add(t)}));i.field&&this.element.setAttribute("tabulator-field",i.field),this.setMinWidth(void 0===i.minWidth?this.table.options.columnMinWidth:parseInt(i.minWidth)),(i.maxWidth||this.table.options.columnMaxWidth)&&!1!==i.maxWidth&&this.setMaxWidth(void 0===i.maxWidth?this.table.options.columnMaxWidth:parseInt(i.maxWidth)),this.reinitializeWidth(),this.tooltip=this.definition.tooltip||!1===this.definition.tooltip?this.definition.tooltip:this.table.options.tooltips,this.hozAlign=void 0===this.definition.hozAlign?this.table.options.cellHozAlign:this.definition.hozAlign,this.vertAlign=void 0===this.definition.vertAlign?this.table.options.cellVertAlign:this.definition.vertAlign,this.titleElement.style.textAlign=this.definition.headerHozAlign||this.table.options.headerHozAlign}},{key:"_buildColumnHeaderContent",value:function(){this.definition,this.table;var e=document.createElement("div");return e.classList.add("tabulator-col-content"),this.titleHolderElement=document.createElement("div"),this.titleHolderElement.classList.add("tabulator-col-title-holder"),e.appendChild(this.titleHolderElement),this.titleElement=this._buildColumnHeaderTitle(),this.titleHolderElement.appendChild(this.titleElement),e}},{key:"_buildColumnHeaderTitle",value:function(){var e=this,t=this.definition,i=this.table,o=document.createElement("div");if(o.classList.add("tabulator-col-title"),t.editableTitle){var n=document.createElement("input");n.classList.add("tabulator-title-editor"),n.addEventListener("click",(function(e){e.stopPropagation(),n.focus()})),n.addEventListener("change",(function(){t.title=n.value,i.options.columnTitleChanged.call(e.table,e.getComponent())})),o.appendChild(n),t.field?i.modules.localize.bind("columns|"+t.field,(function(e){n.value=e||t.title||" "})):n.value=t.title||" "}else t.field?i.modules.localize.bind("columns|"+t.field,(function(i){e._formatColumnHeaderTitle(o,i||t.title||" ")})):this._formatColumnHeaderTitle(o,t.title||" ");return o}},{key:"_formatColumnHeaderTitle",value:function(e,i){var o,n,a,s,l,r=this;if(this.definition.titleFormatter&&this.table.modExists("format"))switch(o=this.table.modules.format.getFormatter(this.definition.titleFormatter),l=function(e){r.titleFormatterRendered=e},s={getValue:function(){return i},getElement:function(){return e}},a="function"==typeof(a=this.definition.titleFormatterParams||{})?a():a,t(n=o.call(this.table.modules.format,s,a,l))){case"object":n instanceof Node?e.appendChild(n):(e.innerHTML="",console.warn("Format Error - Title formatter has returned a type of object, the only valid formatter object return is an instance of Node, the formatter returned:",n));break;case"undefined":case"null":e.innerHTML="";break;default:e.innerHTML=n}else e.innerHTML=i}},{key:"_buildGroupHeader",value:function(){var e=this;(this.element.classList.add("tabulator-col-group"),this.element.setAttribute("role","columngroup"),this.element.setAttribute("aria-title",this.definition.title),this.definition.cssClass)&&this.definition.cssClass.split(" ").forEach((function(t){e.element.classList.add(t)}));(this.definition.headerContextMenu||this.definition.headerMenu)&&this.table.modExists("menu")&&this.table.modules.menu.initializeColumnHeader(this),this.titleElement.style.textAlign=this.definition.headerHozAlign||this.table.options.headerHozAlign,this.element.appendChild(this.groupElement)}},{key:"_getFlatData",value:function(e){return e[this.field]}},{key:"_getNestedData",value:function(e){for(var t,i=e,o=this.fieldStructure,n=o.length,a=0;a-1&&this.columns.splice(t,1),this.columns.length||this.delete()}},{key:"setWidth",value:function(e){this.widthFixed=!0,this.setWidthActual(e)}},{key:"setWidthActual",value:function(e){isNaN(e)&&(e=Math.floor(this.table.element.clientWidth/100*parseInt(e))),e=Math.max(this.minWidth,e),this.maxWidth&&(e=Math.min(this.maxWidth,e)),this.width=e,this.widthStyled=e?e+"px":"",this.element.style.width=this.widthStyled,this.isGroup||this.cells.forEach((function(e){e.setWidth()})),this.parent.isGroup&&this.parent.matchChildWidths(),this.table.modExists("frozenColumns")&&this.table.modules.frozenColumns.layout()}},{key:"checkCellHeights",value:function(){var e=[];this.cells.forEach((function(t){t.row.heightInitialized&&(null!==t.row.getElement().offsetParent?(e.push(t.row),t.row.clearCellHeight()):t.row.heightInitialized=!1)})),e.forEach((function(e){e.calcHeight()})),e.forEach((function(e){e.setCellHeight()}))}},{key:"getWidth",value:function(){var e=0;return this.isGroup?this.columns.forEach((function(t){t.visible&&(e+=t.getWidth())})):e=this.width,e}},{key:"getHeight",value:function(){return this.element.offsetHeight}},{key:"setMinWidth",value:function(e){this.minWidth=e,this.minWidthStyled=e?e+"px":"",this.element.style.minWidth=this.minWidthStyled,this.cells.forEach((function(e){e.setMinWidth()}))}},{key:"setMaxWidth",value:function(e){this.maxWidth=e,this.maxWidthStyled=e?e+"px":"",this.element.style.maxWidth=this.maxWidthStyled,this.cells.forEach((function(e){e.setMaxWidth()}))}},{key:"delete",value:function(){var e=this;return new Promise((function(t,i){e.isGroup&&e.columns.forEach((function(e){e.delete()})),e.table.modExists("edit")&&e.table.modules.edit.currentCell.column===e&&e.table.modules.edit.cancelEdit();for(var o=e.cells.length,n=0;n-1&&this._nextVisibleColumn(e+1)}},{key:"_nextVisibleColumn",value:function(e){var t=this.table.columnManager.getColumnByIndex(e);return!t||t.visible?t:this._nextVisibleColumn(e+1)}},{key:"prevColumn",value:function(){var e=this.table.columnManager.findColumnIndex(this);return e>-1&&this._prevVisibleColumn(e-1)}},{key:"_prevVisibleColumn",value:function(e){var t=this.table.columnManager.getColumnByIndex(e);return!t||t.visible?t:this._prevVisibleColumn(e-1)}},{key:"reinitializeWidth",value:function(e){this.widthFixed=!1,void 0===this.definition.width||e||this.setWidth(this.definition.width),this.table.modExists("filter")&&this.table.modules.filter.hideHeaderFilterElements(),this.fitToData(),this.table.modExists("filter")&&this.table.modules.filter.showHeaderFilterElements()}},{key:"fitToData",value:function(){this.widthFixed||(this.element.style.width="",this.cells.forEach((function(e){e.clearWidth()})));var e=this.element.offsetWidth;this.width&&this.widthFixed||(this.cells.forEach((function(t){var i=t.getWidth();i>e&&(e=i)})),e&&this.setWidthActual(e+1))}},{key:"updateDefinition",value:function(e){var t=this;return new Promise((function(i,o){var n;t.isGroup||t.parent.isGroup?(console.warn("Column Update Error - The updateDefinition function is only available on ungrouped columns"),o("Column Update Error - The updateDefinition function is only available on columns, not column groups")):(n=Object.assign({},t.getDefinition()),n=Object.assign(n,e),t.table.columnManager.addColumn(n,!1,t).then((function(e){n.field==t.field&&(t.field=!1),t.delete().then((function(){i(e.getComponent())})).catch((function(e){o(e)}))})).catch((function(e){o(e)})))}))}},{key:"deleteCell",value:function(e){var t=this.cells.indexOf(e);t>-1&&this.cells.splice(t,1)}},{key:"getComponent",value:function(){return this.component||(this.component=new p(this)),this.component}}]),e}();v.defaultOptionList=["title","field","columns","visible","hozAlign","vertAlign","width","minWidth","maxWidth","widthGrow","widthShrink","resizable","frozen","responsive","tooltip","cssClass","rowHandle","print","htmlOutput","sorter","sorterParams","formatter","formatterParams","variableHeight","editable","editor","editorParams","validator","mutator","mutatorParams","mutatorData","mutatorDataParams","mutatorEdit","mutatorEditParams","mutatorClipboard","mutatorClipboardParams","accessor","accessorParams","accessorData","accessorDataParams","accessorDownload","accessorDownloadParams","accessorClipboard","accessorClipboardParams","accessorPrint","accessorPrintParams","accessorHtmlOutput","accessorHtmlOutputParams","clipboard","download","topCalc","topCalcParams","topCalcFormatter","topCalcFormatterParams","bottomCalc","bottomCalcParams","bottomCalcFormatter","bottomCalcFormatterParams","cellClick","cellDblClick","cellContext","cellTap","cellDblTap","cellTapHold","cellMouseEnter","cellMouseLeave","cellMouseOver","cellMouseOut","cellMouseMove","cellEditing","cellEdited","cellEditCancelled","headerSort","headerSortStartingDir","headerSortTristate","headerClick","headerDblClick","headerContext","headerTap","headerDblTap","headerTapHold","headerTooltip","headerVertical","headerHozAlign","editableTitle","titleFormatter","titleFormatterParams","headerFilter","headerFilterPlaceholder","headerFilterParams","headerFilterEmptyCheck","headerFilterFunc","headerFilterFuncParams","headerFilterLiveFilter","print","headerContextMenu","headerMenu","contextMenu","clickMenu","formatterPrint","formatterPrintParams","formatterClipboard","formatterClipboardParams","formatterHtmlOutput","formatterHtmlOutputParams","titlePrint","titleClipboard","titleHtmlOutput","titleDownload"];var b=function(){function e(){o(this,e)}return a(e,null,[{key:"elVisible",value:function(e){return!(e.offsetWidth<=0&&e.offsetHeight<=0)}},{key:"elOffset",value:function(e){var t=e.getBoundingClientRect();return{top:t.top+window.pageYOffset-document.documentElement.clientTop,left:t.left+window.pageXOffset-document.documentElement.clientLeft}}},{key:"deepClone",value:function(e){var i=Object.assign(Array.isArray(e)?[]:{},e);for(var o in e)null!=e[o]&&"object"===t(e[o])&&(e[o]instanceof Date?i[o]=new Date(e[o]):i[o]=this.deepClone(e[o]));return i}}]),e}(),w=function(){function e(t){o(this,e),this.table=t,this.blockHozScrollEvent=!1,this.headersElement=this.createHeadersElement(),this.element=this.createHeaderElement(),this.rowManager=null,this.columns=[],this.columnsByIndex=[],this.columnsByField={},this.scrollLeft=0,this.element.insertBefore(this.headersElement,this.element.firstChild)}return a(e,[{key:"createHeadersElement",value:function(){var e=document.createElement("div");return e.classList.add("tabulator-headers"),e}},{key:"createHeaderElement",value:function(){var e=document.createElement("div");return e.classList.add("tabulator-header"),this.table.options.headerVisible||e.classList.add("tabulator-header-hidden"),e}},{key:"initialize",value:function(){}},{key:"setRowManager",value:function(e){this.rowManager=e}},{key:"getElement",value:function(){return this.element}},{key:"getHeadersElement",value:function(){return this.headersElement}},{key:"scrollHorizontal",value:function(e){var t=0,i=this.element.scrollWidth-this.table.element.clientWidth;this.element.scrollLeft=e,e>i?(t=e-i,this.element.style.marginLeft=-t+"px"):this.element.style.marginLeft=0,this.scrollLeft=e,this.table.modExists("frozenColumns")&&this.table.modules.frozenColumns.scrollHorizontal()}},{key:"generateColumnsFromRowData",value:function(e){var i,o,n=[],a=this.table.options.autoColumnsDefinitions;if(e&&e.length){for(var s in i=e[0]){var l={field:s,title:s},r=i[s];switch(t(r)){case"undefined":o="string";break;case"boolean":o="boolean";break;case"object":o=Array.isArray(r)?"array":"string";break;default:o=isNaN(r)||""===r?r.match(/((^[0-9]+[a-z]+)|(^[a-z]+[0-9]+))+$/i)?"alphanum":"string":"number"}l.sorter=o,n.push(l)}if(a)switch(t(a)){case"function":this.table.options.columns=a.call(this.table,n);break;case"object":Array.isArray(a)?n.forEach((function(e){var t=a.find((function(t){return t.field===e.field}));t&&Object.assign(e,t)})):n.forEach((function(e){a[e.field]&&Object.assign(e,a[e.field])})),this.table.options.columns=n}else this.table.options.columns=n;this.setColumns(this.table.options.columns)}}},{key:"setColumns",value:function(e,t){for(var i=this;this.headersElement.firstChild;)this.headersElement.removeChild(this.headersElement.firstChild);this.columns=[],this.columnsByIndex=[],this.columnsByField={},this.table.modExists("frozenColumns")&&this.table.modules.frozenColumns.reset(),e.forEach((function(e,t){i._addColumn(e)})),this._reIndexColumns(),this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.initialize(),this.table.options.virtualDomHoz&&this.table.vdomHoz.reinitialize(!1,!0),this.redraw(!0)}},{key:"_addColumn",value:function(e,t,i){var o=new v(e,this),n=o.getElement(),a=i?this.findColumnIndex(i):i;if(i&&a>-1){var s=this.columns.indexOf(i.getTopColumn()),l=i.getElement();t?(this.columns.splice(s,0,o),l.parentNode.insertBefore(n,l)):(this.columns.splice(s+1,0,o),l.parentNode.insertBefore(n,l.nextSibling))}else t?(this.columns.unshift(o),this.headersElement.insertBefore(o.getElement(),this.headersElement.firstChild)):(this.columns.push(o),this.headersElement.appendChild(o.getElement())),o.columnRendered();return o}},{key:"registerColumnField",value:function(e){e.definition.field&&(this.columnsByField[e.definition.field]=e)}},{key:"registerColumnPosition",value:function(e){this.columnsByIndex.push(e)}},{key:"_reIndexColumns",value:function(){this.columnsByIndex=[],this.columns.forEach((function(e){e.reRegisterPosition()}))}},{key:"_verticalAlignHeaders",value:function(){var e=this,t=0;this.columns.forEach((function(e){var i;e.clearVerticalAlign(),(i=e.getHeight())>t&&(t=i)})),this.columns.forEach((function(i){i.verticalAlign(e.table.options.columnHeaderVertAlign,t)})),this.rowManager.adjustTableSize()}},{key:"findColumn",value:function(e){return"object"!=t(e)?this.columnsByField[e]||!1:e instanceof v?e:e instanceof ColumnComponent?e._getSelf()||!1:"undefined"!=typeof HTMLElement&&e instanceof HTMLElement&&this.columns.find((function(t){return t.element===e}))||!1}},{key:"getColumnByField",value:function(e){return this.columnsByField[e]}},{key:"getColumnsByFieldRoot",value:function(e){var t=this,i=[];return Object.keys(this.columnsByField).forEach((function(o){o.split(".")[0]===e&&i.push(t.columnsByField[o])})),i}},{key:"getColumnByIndex",value:function(e){return this.columnsByIndex[e]}},{key:"getFirstVisibileColumn",value:function(e){return(e=this.columnsByIndex.findIndex((function(e){return e.visible})))>-1&&this.columnsByIndex[e]}},{key:"getColumns",value:function(){return this.columns}},{key:"findColumnIndex",value:function(e){return this.columnsByIndex.findIndex((function(t){return e===t}))}},{key:"getRealColumns",value:function(){return this.columnsByIndex}},{key:"traverse",value:function(e){this.columnsByIndex.forEach((function(t,i){e(t,i)}))}},{key:"getDefinitions",value:function(e){var t=[];return this.columnsByIndex.forEach((function(i){(!e||e&&i.visible)&&t.push(i.getDefinition())})),t}},{key:"getDefinitionTree",value:function(){var e=[];return this.columns.forEach((function(t){e.push(t.getDefinition(!0))})),e}},{key:"getComponents",value:function(e){var t=[];return(e?this.columns:this.columnsByIndex).forEach((function(e){t.push(e.getComponent())})),t}},{key:"getWidth",value:function(){var e=0;return this.columnsByIndex.forEach((function(t){t.visible&&(e+=t.getWidth())})),e}},{key:"moveColumn",value:function(e,t,i){this.moveColumnActual(e,t,i),this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.initialize(),this.table.modExists("columnCalcs")&&this.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows),t.element.parentNode.insertBefore(e.element,t.element),i&&t.element.parentNode.insertBefore(t.element,e.element),this._verticalAlignHeaders(),this.table.rowManager.reinitialize()}},{key:"moveColumnActual",value:function(e,t,i){e.parent.isGroup?this._moveColumnInArray(e.parent.columns,e,t,i):this._moveColumnInArray(this.columns,e,t,i),this._moveColumnInArray(this.columnsByIndex,e,t,i,!0),this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.initialize(),this.table.options.virtualDomHoz&&this.table.vdomHoz.reinitialize(!0),this.table.options.columnMoved&&this.table.options.columnMoved.call(this.table,e.getComponent(),this.table.columnManager.getComponents()),this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.columns&&this.table.modules.persistence.save("columns")}},{key:"_moveColumnInArray",value:function(e,t,i,o,n){var a,s=this,l=e.indexOf(t),r=[];l>-1&&(e.splice(l,1),(a=e.indexOf(i))>-1?o&&(a+=1):a=l,e.splice(a,0,t),n&&(this.table.options.dataTree&&this.table.modExists("dataTree",!0)&&this.table.rowManager.rows.forEach((function(e){r=r.concat(s.table.modules.dataTree.getTreeChildren(e,!1,!0))})),(r=r.concat(this.table.rowManager.rows)).forEach((function(e){if(e.cells.length){var t=e.cells.splice(l,1)[0];e.cells.splice(a,0,t)}}))))}},{key:"scrollToColumn",value:function(e,t,i){var o=this,n=0,a=0,s=0,l=e.getElement();return new Promise((function(r,u){if(void 0===t&&(t=o.table.options.scrollToColumnPosition),void 0===i&&(i=o.table.options.scrollToColumnIfVisible),e.visible){switch(t){case"middle":case"center":s=-o.element.clientWidth/2;break;case"right":s=l.clientWidth-o.headersElement.clientWidth}if(!i&&(a=l.offsetLeft)>0&&a+l.offsetWidththis.rowManager.element.clientHeight&&(e-=this.rowManager.element.offsetWidth-this.rowManager.element.clientWidth),this.columnsByIndex.forEach((function(i){var o,n,a;i.visible&&(o=i.definition.width||0,n=void 0===i.minWidth?this.table.options.columnMinWidth:parseInt(i.minWidth),a="string"==typeof o?o.indexOf("%")>-1?e/100*parseInt(o):parseInt(o):o,t+=a>n?a:n)})),t}},{key:"addColumn",value:function(e,t,i){var o=this;return new Promise((function(n,a){var s=o._addColumn(e,t,i);o._reIndexColumns(),o.table.options.responsiveLayout&&o.table.modExists("responsiveLayout",!0)&&o.table.modules.responsiveLayout.initialize(),o.table.modExists("columnCalcs")&&o.table.modules.columnCalcs.recalc(o.table.rowManager.activeRows),o.redraw(!0),"fitColumns"!=o.table.modules.layout.getMode()&&s.reinitializeWidth(),o._verticalAlignHeaders(),o.table.rowManager.reinitialize(),o.table.options.virtualDomHoz&&o.table.vdomHoz.reinitialize(),n(s)}))}},{key:"deregisterColumn",value:function(e){var t,i=e.getField();i&&delete this.columnsByField[i],(t=this.columnsByIndex.indexOf(e))>-1&&this.columnsByIndex.splice(t,1),(t=this.columns.indexOf(e))>-1&&this.columns.splice(t,1),this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.initialize(),this._verticalAlignHeaders(),this.redraw()}},{key:"redraw",value:function(e){e&&(b.elVisible(this.element)&&this._verticalAlignHeaders(),this.table.rowManager.resetScroll(),this.table.rowManager.reinitialize()),["fitColumns","fitDataStretch"].indexOf(this.table.modules.layout.getMode())>-1||e?this.table.modules.layout.layout():this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.update(),this.table.modExists("frozenColumns")&&this.table.modules.frozenColumns.layout(),this.table.modExists("columnCalcs")&&this.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows),e&&(this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.columns&&this.table.modules.persistence.save("columns"),this.table.modExists("columnCalcs")&&this.table.modules.columnCalcs.redraw()),this.table.footerManager.redraw()}}]),e}(),y=function(){function e(t){o(this,e),this._row=t}return a(e,[{key:"getData",value:function(e){return this._row.getData(e)}},{key:"getElement",value:function(){return this._row.getElement()}},{key:"getCells",value:function(){var e=[];return this._row.getCells().forEach((function(t){e.push(t.getComponent())})),e}},{key:"getCell",value:function(e){var t=this._row.getCell(e);return!!t&&t.getComponent()}},{key:"getIndex",value:function(){return this._row.getData("data")[this._row.table.options.index]}},{key:"getPosition",value:function(e){return this._row.table.rowManager.getRowPosition(this._row,e)}},{key:"delete",value:function(){return this._row.delete()}},{key:"scrollTo",value:function(){return this._row.table.rowManager.scrollToRow(this._row)}},{key:"pageTo",value:function(){if(this._row.table.modExists("page",!0))return this._row.table.modules.page.setPageToRow(this._row)}},{key:"move",value:function(e,t){this._row.moveToRow(e,t)}},{key:"update",value:function(e){return this._row.updateData(e)}},{key:"normalizeHeight",value:function(){this._row.normalizeHeight(!0)}},{key:"select",value:function(){this._row.table.modules.selectRow.selectRows(this._row)}},{key:"deselect",value:function(){this._row.table.modules.selectRow.deselectRows(this._row)}},{key:"toggleSelect",value:function(){this._row.table.modules.selectRow.toggleRow(this._row)}},{key:"isSelected",value:function(){return this._row.table.modules.selectRow.isRowSelected(this._row)}},{key:"_getSelf",value:function(){return this._row}},{key:"validate",value:function(){return this._row.validate()}},{key:"freeze",value:function(){this._row.table.modExists("frozenRows",!0)&&this._row.table.modules.frozenRows.freezeRow(this._row)}},{key:"unfreeze",value:function(){this._row.table.modExists("frozenRows",!0)&&this._row.table.modules.frozenRows.unfreezeRow(this._row)}},{key:"isFrozen",value:function(){return!!this._row.table.modExists("frozenRows",!0)&&this._row.table.modules.frozenRows.rows.indexOf(this._row)>-1}},{key:"treeCollapse",value:function(){this._row.table.modExists("dataTree",!0)&&this._row.table.modules.dataTree.collapseRow(this._row)}},{key:"treeExpand",value:function(){this._row.table.modExists("dataTree",!0)&&this._row.table.modules.dataTree.expandRow(this._row)}},{key:"treeToggle",value:function(){this._row.table.modExists("dataTree",!0)&&this._row.table.modules.dataTree.toggleRow(this._row)}},{key:"getTreeParent",value:function(){return!!this._row.table.modExists("dataTree",!0)&&this._row.table.modules.dataTree.getTreeParent(this._row)}},{key:"getTreeChildren",value:function(){return!!this._row.table.modExists("dataTree",!0)&&this._row.table.modules.dataTree.getTreeChildren(this._row,!0)}},{key:"addTreeChild",value:function(e,t,i){return!!this._row.table.modExists("dataTree",!0)&&this._row.table.modules.dataTree.addTreeChildRow(this._row,e,t,i)}},{key:"reformat",value:function(){return this._row.reinitialize()}},{key:"getGroup",value:function(){return this._row.getGroup().getComponent()}},{key:"getTable",value:function(){return this._row.table}},{key:"getNextRow",value:function(){var e=this._row.nextRow();return e?e.getComponent():e}},{key:"getPrevRow",value:function(){var e=this._row.prevRow();return e?e.getComponent():e}}]),e}(),E=function(){function e(t,i){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"row";o(this,e),this.table=i.table,this.parent=i,this.data={},this.type=n,this.element=!1,this.modules={},this.cells=[],this.height=0,this.heightStyled="",this.manualHeight=!1,this.outerHeight=0,this.initialized=!1,this.heightInitialized=!1,this.component=null,this.created=!1,this.setData(t)}return a(e,[{key:"create",value:function(){this.created||(this.created=!0,this.generateElement())}},{key:"createElement",value:function(){var e=document.createElement("div");e.classList.add("tabulator-row"),e.setAttribute("role","row"),this.element=e}},{key:"getElement",value:function(){return this.create(),this.element}},{key:"detachElement",value:function(){this.element&&this.element.parentNode&&this.element.parentNode.removeChild(this.element)}},{key:"generateElement",value:function(){var e,t,i,o=this;this.createElement(),!1!==this.table.options.selectable&&this.table.modExists("selectRow")&&this.table.modules.selectRow.initializeRow(this),!1!==this.table.options.movableRows&&this.table.modExists("moveRow")&&this.table.modules.moveRow.initializeRow(this),!1!==this.table.options.dataTree&&this.table.modExists("dataTree")&&this.table.modules.dataTree.initializeRow(this),"collapse"===this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout")&&this.table.modules.responsiveLayout.initializeRow(this),(this.table.options.rowContextMenu||this.table.options.rowClickMenu)&&this.table.modExists("menu")&&this.table.modules.menu.initializeRow(this),this.table.options.rowClick&&this.element.addEventListener("click",(function(e){o.table.options.rowClick(e,o.getComponent())})),this.table.options.rowDblClick&&this.element.addEventListener("dblclick",(function(e){o.table.options.rowDblClick(e,o.getComponent())})),this.table.options.rowContext&&this.element.addEventListener("contextmenu",(function(e){o.table.options.rowContext(e,o.getComponent())})),this.table.options.rowMouseEnter&&this.element.addEventListener("mouseenter",(function(e){o.table.options.rowMouseEnter(e,o.getComponent())})),this.table.options.rowMouseLeave&&this.element.addEventListener("mouseleave",(function(e){o.table.options.rowMouseLeave(e,o.getComponent())})),this.table.options.rowMouseOver&&this.element.addEventListener("mouseover",(function(e){o.table.options.rowMouseOver(e,o.getComponent())})),this.table.options.rowMouseOut&&this.element.addEventListener("mouseout",(function(e){o.table.options.rowMouseOut(e,o.getComponent())})),this.table.options.rowMouseMove&&this.element.addEventListener("mousemove",(function(e){o.table.options.rowMouseMove(e,o.getComponent())})),this.table.options.rowTap&&(i=!1,this.element.addEventListener("touchstart",(function(e){i=!0}),{passive:!0}),this.element.addEventListener("touchend",(function(e){i&&o.table.options.rowTap(e,o.getComponent()),i=!1}))),this.table.options.rowDblTap&&(e=null,this.element.addEventListener("touchend",(function(t){e?(clearTimeout(e),e=null,o.table.options.rowDblTap(t,o.getComponent())):e=setTimeout((function(){clearTimeout(e),e=null}),300)}))),this.table.options.rowTapHold&&(t=null,this.element.addEventListener("touchstart",(function(e){clearTimeout(t),t=setTimeout((function(){clearTimeout(t),t=null,i=!1,o.table.options.rowTapHold(e,o.getComponent())}),1e3)}),{passive:!0}),this.element.addEventListener("touchend",(function(e){clearTimeout(t),t=null})))}},{key:"generateCells",value:function(){this.cells=this.table.columnManager.generateCells(this)}},{key:"initialize",value:function(e){var t=this;if(this.create(),!this.initialized||e){for(this.deleteCells();this.element.firstChild;)this.element.removeChild(this.element.firstChild);this.table.modExists("frozenColumns")&&this.table.modules.frozenColumns.layoutRow(this),this.generateCells(),this.table.options.virtualDomHoz&&this.table.vdomHoz.initialized?this.table.vdomHoz.initializeRow(this):this.cells.forEach((function(e){t.element.appendChild(e.getElement()),e.cellRendered()})),e&&this.normalizeHeight(),this.table.options.dataTree&&this.table.modExists("dataTree")&&this.table.modules.dataTree.layoutRow(this),"collapse"===this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout")&&this.table.modules.responsiveLayout.layoutRow(this),this.table.options.rowFormatter&&this.table.options.rowFormatter(this.getComponent()),this.table.options.resizableRows&&this.table.modExists("resizeRows")&&this.table.modules.resizeRows.initializeRow(this),this.initialized=!0}else this.table.options.virtualDomHoz&&this.table.vdomHoz.reinitializeRow(this)}},{key:"reinitializeHeight",value:function(){this.heightInitialized=!1,this.element&&null!==this.element.offsetParent&&this.normalizeHeight(!0)}},{key:"reinitialize",value:function(e){this.initialized=!1,this.heightInitialized=!1,this.manualHeight||(this.height=0,this.heightStyled=""),this.element&&null!==this.element.offsetParent&&this.initialize(!0),this.table.options.dataTree&&this.table.modExists("dataTree",!0)&&this.table.modules.dataTree.getTreeChildren(this,!1,!0).forEach((function(e){e.reinitialize(!0)}))}},{key:"calcHeight",value:function(e){var t=0,i=this.table.options.resizableRows?this.element.clientHeight:0;this.cells.forEach((function(e){var i=e.getHeight();i>t&&(t=i)})),this.height=e?Math.max(t,i):this.manualHeight?this.height:Math.max(t,i),this.heightStyled=this.height?this.height+"px":"",this.outerHeight=this.element.offsetHeight}},{key:"setCellHeight",value:function(){this.cells.forEach((function(e){e.setHeight()})),this.heightInitialized=!0}},{key:"clearCellHeight",value:function(){this.cells.forEach((function(e){e.clearHeight()}))}},{key:"normalizeHeight",value:function(e){e&&this.clearCellHeight(),this.calcHeight(e),this.setCellHeight()}},{key:"setHeight",value:function(e,t){(this.height!=e||t)&&(this.manualHeight=!0,this.height=e,this.heightStyled=e?e+"px":"",this.setCellHeight(),this.outerHeight=this.element.offsetHeight)}},{key:"getHeight",value:function(){return this.outerHeight}},{key:"getWidth",value:function(){return this.element.offsetWidth}},{key:"deleteCell",value:function(e){var t=this.cells.indexOf(e);t>-1&&this.cells.splice(t,1)}},{key:"setData",value:function(e){this.table.modExists("mutator")&&(e=this.table.modules.mutator.transformRow(e,"data")),this.data=e,this.table.options.reactiveData&&this.table.modExists("reactiveData",!0)&&this.table.modules.reactiveData.watchRow(this)}},{key:"updateData",value:function(e){var t,i=this,o=this.element&&b.elVisible(this.element),n={};return new Promise((function(a,s){for(var l in"string"==typeof e&&(e=JSON.parse(e)),i.table.options.reactiveData&&i.table.modExists("reactiveData",!0)&&i.table.modules.reactiveData.block(),i.table.modExists("mutator")?(n=Object.assign(n,i.data),n=Object.assign(n,e),t=i.table.modules.mutator.transformRow(n,"data",e)):t=e,t)i.data[l]=t[l];for(var l in i.table.options.reactiveData&&i.table.modExists("reactiveData",!0)&&i.table.modules.reactiveData.unblock(),e){i.table.columnManager.getColumnsByFieldRoot(l).forEach((function(e){var n=i.getCell(e.getField());if(n){var a=e.getFieldValue(t);n.getValue()!=a&&(n.setValueProcessData(a),o&&n.cellRendered())}}))}i.table.options.groupUpdateOnCellEdit&&i.table.options.groupBy&&i.table.modExists("groupRows")&&i.table.modules.groupRows.reassignRowToGroup(i.row),o?(i.normalizeHeight(!0),i.table.options.rowFormatter&&i.table.options.rowFormatter(i.getComponent())):(i.initialized=!1,i.height=0,i.heightStyled=""),!1!==i.table.options.dataTree&&i.table.modExists("dataTree")&&i.table.modules.dataTree.redrawNeeded(e)&&(i.table.modules.dataTree.initializeRow(i),o&&(i.table.modules.dataTree.layoutRow(i),i.table.rowManager.refreshActiveData("tree",!1,!0))),i.table.options.rowUpdated.call(i.table,i.getComponent()),i.table.options.dataChanged&&i.table.options.dataChanged.call(i.table,i.table.rowManager.getData()),a()}))}},{key:"getData",value:function(e){return e&&this.table.modExists("accessor")?this.table.modules.accessor.transformRow(this,e):this.data}},{key:"getCell",value:function(e){return e=this.table.columnManager.findColumn(e),this.cells.find((function(t){return t.column===e}))}},{key:"getCellIndex",value:function(e){return this.cells.findIndex((function(t){return t===e}))}},{key:"findNextEditableCell",value:function(e){var t=!1;if(e0)for(var i=e-1;i>=0;i--){var o=this.cells[i],n=!0;if(o.column.modules.edit&&b.elVisible(o.getElement())&&("function"==typeof o.column.modules.edit.check&&(n=o.column.modules.edit.check(o.getComponent())),n)){t=o;break}}return t}},{key:"getCells",value:function(){return this.cells}},{key:"nextRow",value:function(){return this.table.rowManager.nextDisplayRow(this,!0)||!1}},{key:"prevRow",value:function(){return this.table.rowManager.prevDisplayRow(this,!0)||!1}},{key:"moveToRow",value:function(e,t){var i=this.table.rowManager.findRow(e);i?(this.table.rowManager.moveRowActual(this,i,!t),this.table.rowManager.refreshActiveData("display",!1,!0)):console.warn("Move Error - No matching row found:",e)}},{key:"validate",value:function(){var e=[];return this.cells.forEach((function(t){t.validate()||e.push(t.getComponent())})),!e.length||e}},{key:"delete",value:function(){var e=this;return new Promise((function(t,i){var o,n;e.table.options.history&&e.table.modExists("history")&&(e.table.options.groupBy&&e.table.modExists("groupRows")?(o=(n=e.getGroup().rows).indexOf(e))&&(o=n[o-1]):(o=e.table.rowManager.getRowIndex(e))&&(o=e.table.rowManager.rows[o-1]),e.table.modules.history.action("rowDelete",e,{data:e.getData(),pos:!o,index:o})),e.deleteActual(),t()}))}},{key:"deleteActual",value:function(e){this.table.rowManager.getRowIndex(this);this.detatchModules(),this.table.options.reactiveData&&this.table.modExists("reactiveData",!0),this.modules.group&&this.modules.group.removeRow(this),this.table.rowManager.deleteRow(this,e),this.deleteCells(),this.initialized=!1,this.heightInitialized=!1,this.element=!1,this.table.options.dataTree&&this.table.modExists("dataTree",!0)&&this.table.modules.dataTree.rowDelete(this),this.table.modExists("columnCalcs")&&(this.table.options.groupBy&&this.table.modExists("groupRows")?this.table.modules.columnCalcs.recalcRowGroup(this):this.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows))}},{key:"detatchModules",value:function(){this.table.modExists("selectRow")&&this.table.modules.selectRow._deselectRow(this,!0),this.table.modExists("edit")&&this.table.modules.edit.currentCell.row===this&&this.table.modules.edit.cancelEdit(),this.table.modExists("frozenRows")&&this.table.modules.frozenRows.detachRow(this)}},{key:"deleteCells",value:function(){for(var e=this.cells.length,t=0;tt;e.scrollTop!=t?(e.scrollTop=t,e.scrollVertical(i),"scroll"==e.table.options.ajaxProgressiveLoad&&e.table.modules.ajax.nextPage(e.element.scrollHeight-e.element.clientHeight-t),e.table.options.scrollVertical(t)):e.scrollTop=t}))}},{key:"findRow",value:function(e){var i=this;return"object"!=t(e)?null!=e&&(this.rows.find((function(t){return t.data[i.table.options.index]==e}))||!1):e instanceof E?e:e instanceof RowComponent?e._getSelf()||!1:"undefined"!=typeof HTMLElement&&e instanceof HTMLElement&&this.rows.find((function(t){return t.getElement()===e}))||!1}},{key:"getRowFromDataObject",value:function(e){return this.rows.find((function(t){return t.data===e}))||!1}},{key:"getRowFromPosition",value:function(e,t){return t?this.activeRows[e]:this.rows[e]}},{key:"scrollToRow",value:function(e,t,i){var o,n=this,a=this.getDisplayRows().indexOf(e),s=e.getElement(),l=0;return new Promise((function(e,r){if(a>-1){if(void 0===t&&(t=n.table.options.scrollToRowPosition),void 0===i&&(i=n.table.options.scrollToRowIfVisible),"nearest"===t)switch(n.renderMode){case"classic":o=b.elOffset(s).top,t=Math.abs(n.element.scrollTop-o)>Math.abs(n.element.scrollTop+n.element.clientHeight-o)?"bottom":"top";break;case"virtual":t=Math.abs(n.vDomTop-a)>Math.abs(n.vDomBottom-a)?"bottom":"top"}if(!i&&b.elVisible(s)&&(l=b.elOffset(s).top-b.elOffset(n.element).top)>0&&l-1&&this.activeRows.splice(o,1),i>-1&&this.rows.splice(i,1),this.setActiveRows(this.activeRows),this.displayRowIterator((function(t){var i=t.indexOf(e);i>-1&&t.splice(i,1)})),t||this.reRenderInPosition(),this.regenerateRowNumbers(),this.table.options.rowDeleted.call(this.table,e.getComponent()),this.table.options.dataChanged&&this.table.options.dataChanged.call(this.table,this.getData()),this.table.options.groupBy&&this.table.modExists("groupRows")?this.table.modules.groupRows.updateGroupRows(!0):this.table.options.pagination&&this.table.modExists("page")?this.refreshActiveData(!1,!1,!0):this.table.options.pagination&&this.table.modExists("page")&&this.refreshActiveData("page")}},{key:"addRow",value:function(e,t,i,o){var n=this.addRowActual(e,t,i,o);return this.table.options.history&&this.table.modExists("history")&&this.table.modules.history.action("rowAdd",n,{data:e,pos:t,index:i}),n}},{key:"addRows",value:function(e,t,i){var o=this,n=[];return new Promise((function(a,s){t=o.findAddRowPos(t),Array.isArray(e)||(e=[e]),e.length,(void 0===i&&t||void 0!==i&&!t)&&e.reverse(),e.forEach((function(e,a){var s=o.addRow(e,t,i,!0);n.push(s)})),o.table.options.groupBy&&o.table.modExists("groupRows")?o.table.modules.groupRows.updateGroupRows(!0):o.table.options.pagination&&o.table.modExists("page")?o.refreshActiveData(!1,!1,!0):o.reRenderInPosition(),o.table.modExists("columnCalcs")&&o.table.modules.columnCalcs.recalc(o.table.rowManager.activeRows),o.regenerateRowNumbers(),a(n)}))}},{key:"findAddRowPos",value:function(e){return void 0===e&&(e=this.table.options.addRowPos),"pos"===e&&(e=!0),"bottom"===e&&(e=!1),e}},{key:"addRowActual",value:function(e,t,i,o){var n,a,s=e instanceof E?e:new E(e||{},this),l=this.findAddRowPos(t),r=-1;if(!i&&this.table.options.pagination&&"page"==this.table.options.paginationAddRow&&(a=this.getDisplayRows(),l?a.length?i=a[0]:this.activeRows.length&&(i=this.activeRows[this.activeRows.length-1],l=!1):a.length&&(i=a[a.length-1],l=!(a.length1&&(!i||i&&-1==u.indexOf(i)?l?u[0]!==s&&(i=u[0],this._moveRowInArray(s.getGroup().rows,s,i,!l)):u[u.length-1]!==s&&(i=u[u.length-1],this._moveRowInArray(s.getGroup().rows,s,i,!l)):this._moveRowInArray(s.getGroup().rows,s,i,!l))}return i&&(r=this.rows.indexOf(i)),i&&r>-1?(n=this.activeRows.indexOf(i),this.displayRowIterator((function(e){var t=e.indexOf(i);t>-1&&e.splice(l?t:t+1,0,s)})),n>-1&&this.activeRows.splice(l?n:n+1,0,s),this.rows.splice(l?r:r+1,0,s)):l?(this.displayRowIterator((function(e){e.unshift(s)})),this.activeRows.unshift(s),this.rows.unshift(s)):(this.displayRowIterator((function(e){e.push(s)})),this.activeRows.push(s),this.rows.push(s)),this.setActiveRows(this.activeRows),this.table.options.rowAdded.call(this.table,s.getComponent()),this.table.options.dataChanged&&this.table.options.dataChanged.call(this.table,this.getData()),o||this.reRenderInPosition(),s}},{key:"moveRow",value:function(e,t,i){this.table.options.history&&this.table.modExists("history")&&this.table.modules.history.action("rowMove",e,{posFrom:this.getRowPosition(e),posTo:this.getRowPosition(t),to:t,after:i}),this.moveRowActual(e,t,i),this.regenerateRowNumbers(),this.table.options.rowMoved.call(this.table,e.getComponent())}},{key:"moveRowActual",value:function(e,t,i){var o=this;if(this._moveRowInArray(this.rows,e,t,i),this._moveRowInArray(this.activeRows,e,t,i),this.displayRowIterator((function(n){o._moveRowInArray(n,e,t,i)})),this.table.options.groupBy&&this.table.modExists("groupRows")){!i&&t instanceof Group&&(t=this.table.rowManager.prevDisplayRow(e)||t);var n=t.getGroup(),a=e.getGroup();n===a?this._moveRowInArray(n.rows,e,t,i):(a&&a.removeRow(e),n.insertRow(e,t,i))}}},{key:"_moveRowInArray",value:function(e,t,i,o){var n,a,s;if(t!==i&&((n=e.indexOf(t))>-1&&(e.splice(n,1),(a=e.indexOf(i))>-1?o?e.splice(a+1,0,t):e.splice(a,0,t):e.splice(n,0,t)),e===this.getDisplayRows())){s=a>n?a:n+1;for(var l=n-1&&t}},{key:"nextDisplayRow",value:function(e,t){var i=this.getDisplayRowIndex(e),o=!1;return!1!==i&&i-1)&&i}},{key:"getData",value:function(e,t){var i=[];return this.getRows(e).forEach((function(e){"row"==e.type&&i.push(e.getData(t||"data"))})),i}},{key:"getComponents",value:function(e){var t=[];return this.getRows(e).forEach((function(e){t.push(e.getComponent())})),t}},{key:"getDataCount",value:function(e){return this.getRows(e).length}},{key:"_genRemoteRequest",value:function(){var e=this,t=this.table,i=t.options,o={};if(t.modExists("page")){if(i.ajaxSorting){var n=this.table.modules.sort.getSort();n.forEach((function(e){delete e.column})),o[this.table.modules.page.paginationDataSentNames.sorters]=n}if(i.ajaxFiltering){var a=this.table.modules.filter.getFilters(!0,!0);o[this.table.modules.page.paginationDataSentNames.filters]=a}this.table.modules.ajax.setParams(o,!0)}t.modules.ajax.sendRequest().then((function(t){e._setDataActual(t,!0)})).catch((function(e){}))}},{key:"filterRefresh",value:function(){var e=this.table,t=e.options,i=this.scrollLeft;t.ajaxFiltering?"remote"==t.pagination&&e.modExists("page")?(e.modules.page.reset(!0),e.modules.page.setPage(1).then((function(){})).catch((function(){}))):t.ajaxProgressiveLoad?e.modules.ajax.loadData().then((function(){})).catch((function(){})):this._genRemoteRequest():this.refreshActiveData("filter"),this.scrollHorizontal(i)}},{key:"sorterRefresh",value:function(e){var t=this.table,i=this.table.options,o=this.scrollLeft;i.ajaxSorting?("remote"==i.pagination||i.progressiveLoad)&&t.modExists("page")?(t.modules.page.reset(!0),t.modules.page.setPage(1).then((function(){})).catch((function(){}))):i.ajaxProgressiveLoad?t.modules.ajax.loadData().then((function(){})).catch((function(){})):this._genRemoteRequest():this.refreshActiveData(e?"filter":"sort"),this.scrollHorizontal(o)}},{key:"scrollHorizontal",value:function(e){this.scrollLeft=e,this.element.scrollLeft=e,this.table.options.groupBy&&this.table.modules.groupRows.scrollHeaders(e),this.table.modExists("columnCalcs")&&this.table.modules.columnCalcs.scrollHorizontal(e)}},{key:"refreshActiveData",value:function(e,t,i){var o,n=this.table,a=["all","filter","sort","display","freeze","group","tree","page"];if(this.redrawBlock)(!this.redrawBlockRestoreConfig||a.indexOf(e)=0))break;a=l}else if(t-s[l].getElement().offsetTop>=0)n=l;else{if(o=!0,!(i-s[l].getElement().offsetTop>=0))break;a=l}}else n=this.vDomTop,a=this.vDomBottom;return s.slice(n,a+1)}},{key:"displayRowIterator",value:function(e){this.displayRows.forEach(e),this.displayRowsCount=this.displayRows[this.displayRows.length-1].length}},{key:"getRows",value:function(e){var t;switch(e){case"active":t=this.activeRows;break;case"display":t=this.table.rowManager.getDisplayRows();break;case"visible":t=this.getVisibleRows(!0);break;case"selected":t=this.table.modules.selectRow.selectedRows;break;default:t=this.rows}return t}},{key:"reRenderInPosition",value:function(e){if("virtual"==this.getRenderMode())if(this.redrawBlock)e?e():this.redrawBlockRederInPosition=!0;else{for(var t=this.element.scrollTop,i=!1,o=!1,n=this.scrollLeft,a=this.getDisplayRows(),s=this.vDomTop;s<=this.vDomBottom;s++)if(a[s]){var l=t-a[s].getElement().offsetTop;if(!(!1===o||Math.abs(l)this.vDomWindowBuffer&&(this.vDomWindowBuffer=2*h),"group"!==p.type&&(u=!1),this.vDomBottom++,r++}e?(this.vDomTopPad=t?this.vDomRowHeight*this.vDomTop+i:this.scrollTop-l,this.vDomBottomPad=this.vDomBottom==this.displayRowsCount-1?0:Math.max(this.vDomScrollHeight-this.vDomTopPad-s-l,0)):(this.vDomTopPad=0,this.vDomRowHeight=Math.floor((s+l)/r),this.vDomBottomPad=this.vDomRowHeight*(this.displayRowsCount-this.vDomBottom-1),this.vDomScrollHeight=l+s+this.vDomBottomPad-this.height),o.style.paddingTop=this.vDomTopPad+"px",o.style.paddingBottom=this.vDomBottomPad+"px",t&&(this.scrollTop=this.vDomTopPad+l+i-(this.element.scrollWidth>this.element.clientWidth?this.element.offsetHeight-this.element.clientHeight:0)),this.scrollTop=Math.min(this.scrollTop,this.element.scrollHeight-this.height),this.element.scrollWidth>this.element.offsetWidth&&t&&(this.scrollTop+=this.element.offsetHeight-this.element.clientHeight),this.vDomScrollPosTop=this.scrollTop,this.vDomScrollPosBottom=this.scrollTop,n.scrollTop=this.scrollTop,o.style.minWidth=u?this.table.columnManager.getWidth()+"px":"",this.table.options.groupBy&&"fitDataFill"!=this.table.modules.layout.getMode()&&this.displayRowsCount==this.table.modules.groupRows.countGroups()&&(this.tableElement.style.minWidth=this.table.columnManager.getWidth())}else this.renderEmptyScroll();this.fixedHeight||this.adjustTableSize()}},{key:"scrollVertical",value:function(e){var t=this.scrollTop-this.vDomScrollPosTop,i=this.scrollTop-this.vDomScrollPosBottom,o=2*this.vDomWindowBuffer;if(-t>o||i>o){var n=this.scrollLeft;this._virtualRenderFill(Math.floor(this.element.scrollTop/this.element.scrollHeight*this.displayRowsCount)),this.scrollHorizontal(n)}else e?(t<0&&this._addTopRow(-t),i<0&&(this.vDomScrollHeight-this.scrollTop>this.vDomWindowBuffer?this._removeBottomRow(-i):this.vDomScrollPosBottom=this.scrollTop)):(t>=0&&(this.scrollTop>this.vDomWindowBuffer?this._removeTopRow(t):this.vDomScrollPosTop=this.scrollTop),i>=0&&this._addBottomRow(i))}},{key:"_addTopRow",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,i=this.tableElement,o=this.getDisplayRows();if(this.vDomTop){var n=this.vDomTop-1,a=o[n],s=a.getHeight()||this.vDomRowHeight;e>=s&&(this.styleRow(a,n),i.insertBefore(a.getElement(),i.firstChild),a.initialized&&a.heightInitialized||(this.vDomTopNewRows.push(a),a.heightInitialized||a.clearCellHeight()),a.initialize(),this.vDomTopPad-=s,this.vDomTopPad<0&&(this.vDomTopPad=n*this.vDomRowHeight),n||(this.vDomTopPad=0),i.style.paddingTop=this.vDomTopPad+"px",this.vDomScrollPosTop-=s,this.vDomTop--),e=-(this.scrollTop-this.vDomScrollPosTop),a.getHeight()>this.vDomWindowBuffer&&(this.vDomWindowBuffer=2*a.getHeight()),t=(o[this.vDomTop-1].getHeight()||this.vDomRowHeight)?this._addTopRow(e,t+1):this._quickNormalizeRowHeight(this.vDomTopNewRows)}}},{key:"_removeTopRow",value:function(e){var t=this.tableElement,i=this.getDisplayRows()[this.vDomTop],o=i.getHeight()||this.vDomRowHeight;if(e>=o){var n=i.getElement();n.parentNode.removeChild(n),this.vDomTopPad+=o,t.style.paddingTop=this.vDomTopPad+"px",this.vDomScrollPosTop+=this.vDomTop?o:o+this.vDomWindowBuffer,this.vDomTop++,e=this.scrollTop-this.vDomScrollPosTop,this._removeTopRow(e)}}},{key:"_addBottomRow",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,i=this.tableElement,o=this.getDisplayRows();if(this.vDomBottom=s&&(this.styleRow(a,n),i.appendChild(a.getElement()),a.initialized&&a.heightInitialized||(this.vDomBottomNewRows.push(a),a.heightInitialized||a.clearCellHeight()),a.initialize(),this.vDomBottomPad-=s,(this.vDomBottomPad<0||n==this.displayRowsCount-1)&&(this.vDomBottomPad=0),i.style.paddingBottom=this.vDomBottomPad+"px",this.vDomScrollPosBottom+=s,this.vDomBottom++),e=this.scrollTop-this.vDomScrollPosBottom,a.getHeight()>this.vDomWindowBuffer&&(this.vDomWindowBuffer=2*a.getHeight()),t=(o[this.vDomBottom+1].getHeight()||this.vDomRowHeight)?this._addBottomRow(e,t+1):this._quickNormalizeRowHeight(this.vDomBottomNewRows)}}},{key:"_removeBottomRow",value:function(e){var t=this.tableElement,i=this.getDisplayRows()[this.vDomBottom],o=i.getHeight()||this.vDomRowHeight;if(e>=o){var n=i.getElement();n.parentNode&&n.parentNode.removeChild(n),this.vDomBottomPad+=o,this.vDomBottomPad<0&&(this.vDomBottomPad=0),t.style.paddingBottom=this.vDomBottomPad+"px",this.vDomScrollPosBottom-=o,this.vDomBottom--,e=-(this.scrollTop-this.vDomScrollPosBottom),this._removeBottomRow(e)}}},{key:"_quickNormalizeRowHeight",value:function(e){e.forEach((function(e){e.calcHeight()})),e.forEach((function(e){e.setCellHeight()})),e.length=0}},{key:"normalizeHeight",value:function(){this.activeRows.forEach((function(e){e.normalizeHeight()}))}},{key:"adjustTableSize",value:function(){var e,t=this.element.clientHeight;if("virtual"===this.renderMode){var i=Math.floor(this.columnManager.getElement().getBoundingClientRect().height+(this.table.footerManager&&this.table.footerManager.active&&!this.table.footerManager.external?this.table.footerManager.getElement().getBoundingClientRect().height:0));this.fixedHeight?(this.element.style.minHeight="calc(100% - "+i+"px)",this.element.style.height="calc(100% - "+i+"px)",this.element.style.maxHeight="calc(100% - "+i+"px)"):(this.element.style.height="",this.element.style.height=this.table.element.clientHeight-i+"px",this.element.scrollTop=this.scrollTop),this.height=this.element.clientHeight,this.vDomWindowBuffer=this.table.options.virtualDomBuffer||this.height,this.fixedHeight||t==this.element.clientHeight||((e=this.table.modExists("resizeTable"))&&!this.table.modules.resizeTable.autoResize||!e)&&this.redraw()}}},{key:"reinitialize",value:function(){this.rows.forEach((function(e){e.reinitialize(!0)}))}},{key:"blockRedraw",value:function(){this.redrawBlock=!0,this.redrawBlockRestoreConfig=!1}},{key:"restoreRedraw",value:function(){this.redrawBlock=!1,this.redrawBlockRestoreConfig?(this.refreshActiveData(this.redrawBlockRestoreConfig.stage,this.redrawBlockRestoreConfig.skipStage,this.redrawBlockRestoreConfig.renderInPosition),this.redrawBlockRestoreConfig=!1):this.redrawBlockRederInPosition&&this.reRenderInPosition(),this.redrawBlockRederInPosition=!1}},{key:"redraw",value:function(e){var t=this.scrollLeft;this.adjustTableSize(),this.table.tableWidth=this.table.element.clientWidth,e?this.renderTable():("classic"==this.renderMode?this.table.options.groupBy?this.refreshActiveData("group",!1,!1):this._simpleRender():(this.reRenderInPosition(),this.scrollHorizontal(t)),this.displayRowsCount||this.table.options.placeholder&&this.getElement().appendChild(this.table.options.placeholder))}},{key:"resetScroll",value:function(){if(this.element.scrollLeft=0,this.element.scrollTop=0,"ie"===this.table.browser){var e=document.createEvent("Event");e.initEvent("scroll",!1,!0),this.element.dispatchEvent(e)}else this.element.dispatchEvent(new Event("scroll"))}}]),e}(),k=function(){function e(t){o(this,e),this.table=t,this.active=!1,this.element=this.createElement(),this.external=!1,this.links=[],this._initialize()}return a(e,[{key:"createElement",value:function(){var e=document.createElement("div");return e.classList.add("tabulator-footer"),e}},{key:"_initialize",value:function(e){if(this.table.options.footerElement)switch(t(this.table.options.footerElement)){case"string":"<"===this.table.options.footerElement[0]?this.element.innerHTML=this.table.options.footerElement:(this.external=!0,this.element=document.querySelector(this.table.options.footerElement));break;default:this.element=this.table.options.footerElement}}},{key:"getElement",value:function(){return this.element}},{key:"append",value:function(e,t){this.activate(t),this.element.appendChild(e),this.table.rowManager.adjustTableSize()}},{key:"prepend",value:function(e,t){this.activate(t),this.element.insertBefore(e,this.element.firstChild),this.table.rowManager.adjustTableSize()}},{key:"remove",value:function(e){e.parentNode.removeChild(e),this.deactivate()}},{key:"deactivate",value:function(e){this.element.firstChild&&!e||(this.external||this.element.parentNode.removeChild(this.element),this.active=!1)}},{key:"activate",value:function(e){this.active||(this.active=!0,this.external||(this.table.element.appendChild(this.getElement()),this.table.element.style.display="")),e&&this.links.push(e)}},{key:"redraw",value:function(){this.links.forEach((function(e){e.footerRedraw()}))}}]),e}(),x=function(){function e(){o(this,e)}return a(e,null,[{key:"register",value:function(t){e.tables.push(t)}},{key:"deregister",value:function(t){var i=e.tables.indexOf(t);i>-1&&e.tables.splice(i,1)}},{key:"lookupTable",value:function(t,i){var o,n,a=[];if("string"==typeof t){if((o=document.querySelectorAll(t)).length)for(var s=0;s0?a.setWidth(n):a.reinitializeWidth()):this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.update()},fitColumns:function(e){var t,i,o=this.table.element.clientWidth,n=0,a=0,s=0,l=[],r=[],u=0,c=0;function d(e){return"string"==typeof e?e.indexOf("%")>-1?o/100*parseInt(e):parseInt(e):e}function h(e,t,i,o){var n=[],a=0,l=0,r=0,u=s,c=0,m=0,p=[];function f(e){return i*(e.column.definition.widthGrow||1)}function g(e){return d(e.width)-i*(e.column.definition.widthShrink||0)}return e.forEach((function(e,a){var s=o?g(e):f(e);e.column.minWidth>=s?n.push(e):e.column.maxWidth&&e.column.maxWidththis.table.rowManager.element.clientHeight&&(o-=this.table.rowManager.element.offsetWidth-this.table.rowManager.element.clientWidth),e.forEach((function(e){var t,i,o;e.visible&&(t=e.definition.width,i=parseInt(e.minWidth),t?(o=d(t),n+=o>i?o:i,e.definition.widthShrink&&(r.push({column:e,width:o>i?o:i}),u+=e.definition.widthShrink)):(l.push({column:e,width:0}),s+=e.definition.widthGrow||1))})),a=o-n,t=Math.floor(a/s),c=h(l,a,t,!1),l.length&&c>0&&(l[l.length-1].width+=+c),l.forEach((function(e){a-=e.width})),(i=Math.abs(c)+a)>0&&u&&(c=h(r,i,Math.floor(i/u),!0)),r.length&&(r[r.length-1].width-=c),l.forEach((function(e){e.column.setWidth(e.width)})),r.forEach((function(e){e.column.setWidth(e.width)}))}},D=function(e){s(i,e);var t=d(i);function i(e){var n;return o(this,i),(n=t.call(this,e,"layout")).mode=null,n}return a(i,[{key:"initialize",value:function(e){i.modes[e]?this.mode=e:(console.warn("Layout Error - invalid mode set, defaulting to 'fitData' : "+e),this.mode="fitData"),this.table.element.setAttribute("tabulator-layout",this.mode)}},{key:"getMode",value:function(){return this.mode}},{key:"layout",value:function(){i.modes[this.mode].call(this,this.table.columnManager.columnsByIndex),0===this.mode.indexOf("fitData")&&this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.columns&&this.table.modules.persistence.save("columns")}}]),i}(R);D.moduleName="layout",D.modes=L;var T=function(e){s(n,e);var i=d(n);function n(e){var t;return o(this,n),(t=i.call(this,e)).locale="default",t.lang=!1,t.bindings={},t.langList={},t}return a(n,[{key:"initialize",value:function(){this.langList=b.deepClone(n.langs)}},{key:"setHeaderFilterPlaceholder",value:function(e){this.langList.default.headerFilters.default=e}},{key:"setHeaderFilterColumnPlaceholder",value:function(e,t){this.langList.default.headerFilters.columns[e]=t,this.lang&&!this.lang.headerFilters.columns[e]&&(this.lang.headerFilters.columns[e]=t)}},{key:"installLang",value:function(e,t){this.langList[e]?this._setLangProp(this.langList[e],t):this.langList[e]=t}},{key:"_setLangProp",value:function(e,i){for(var o in i)e[o]&&"object"==t(e[o])?this._setLangProp(e[o],i[o]):e[o]=i[o]}},{key:"setLocale",value:function(e){if(!0===(e=e||"default")&&navigator.language&&(e=navigator.language.toLowerCase()),e&&!this.langList[e]){var i=e.split("-")[0];this.langList[i]?(console.warn("Localization Error - Exact matching locale not found, using closest match: ",e,i),e=i):(console.warn("Localization Error - Matching locale not found, using default: ",e),e="default")}this.locale=e,this.lang=b.deepClone(this.langList.default||{}),"default"!=e&&function e(i,o){for(var n in i)"object"==t(i[n])?(o[n]||(o[n]={}),e(i[n],o[n])):o[n]=i[n]}(this.langList[e],this.lang),this.table.options.localized.call(this.table,this.locale,this.lang),this._executeBindings()}},{key:"getLocale",value:function(e){return this.locale}},{key:"getLang",value:function(e){return e?this.langList[e]:this.lang}},{key:"getText",value:function(e,t){var i=(e=t?e+"|"+t:e).split("|");return this._getLangElement(i,this.locale)||""}},{key:"_getLangElement",value:function(e,t){var i=this.lang;return e.forEach((function(e){var t;i&&(t=i[e],i=void 0!==t&&t)})),i}},{key:"bind",value:function(e,t){this.bindings[e]||(this.bindings[e]=[]),this.bindings[e].push(t),t(this.getText(e),this.lang)}},{key:"_executeBindings",value:function(){var e=this,t=function(t){e.bindings[t].forEach((function(i){i(e.getText(t),e.lang)}))};for(var i in this.bindings)t(i)}}]),n}(R);T.moduleName="localize",T.langs={default:{groups:{item:"item",items:"items"},columns:{},ajax:{loading:"Loading",error:"Error"},pagination:{page_size:"Page Size",page_title:"Show Page",first:"First",first_title:"First Page",last:"Last",last_title:"Last Page",prev:"Prev",prev_title:"Prev Page",next:"Next",next_title:"Next Page",all:"All"},headerFilters:{default:"filter column...",columns:{}}}};var z=function(e){s(i,e);var t=d(i);function i(){return o(this,i),t.apply(this,arguments)}return a(i,[{key:"getConnections",value:function(e){var t=this,i=[];return Tabulator.comms.lookupTable(e).forEach((function(e){t.table!==e&&i.push(e)})),i}},{key:"send",value:function(e,t,i,o){var n=this,a=this.getConnections(e);a.forEach((function(e){e.tableComms(n.table.element,t,i,o)})),!a.length&&e&&console.warn("Table Connection Error - No tables matching selector found",e)}},{key:"receive",value:function(e,t,i,o){if(this.table.modExists(t))return this.table.modules[t].commsReceived(e,i,o);console.warn("Inter-table Comms Error - no such module:",t)}}]),i}(R);z.moduleName="comms";var S=Object.freeze({__proto__:null,LayoutModule:D,LocalizeModule:T,CommsModule:z}),H=function(){function e(t,i){o(this,e),this.bindStaticFuctionality(t),this.bindModules(t,S),i&&this.bindModules(t,i)}return a(e,[{key:"bindStaticFuctionality",value:function(e){e.moduleBindings={},e.extendModule=function(i,o,n){if(e.moduleBindings[i]){var a=e.moduleBindings[i].prototype[o];if(a)if("object"==t(n))for(var s in n)a[s]=n[s];else console.warn("Module Error - Invalid value type, it must be an object");else console.warn("Module Error - property does not exist:",o)}else console.warn("Module Error - module does not exist:",i)},e.registerModule=function(t){Array.isArray(t)||(t=[t]),t.forEach((function(t){e.registerModuleBinding(t)}))},e.registerModuleBinding=function(t){e.moduleBindings[t.moduleName]=t},e.findTable=function(e){var t=x.lookupTable(e,!0);return!(Array.isArray(t)&&!t.length)&&t},e.prototype.bindModules=function(){for(var t in this.modules={},e.moduleBindings)this.modules[t]=new e.moduleBindings[t](this)}}},{key:"bindModules",value:function(e,t){var i=Object.values(t);e.registerModule(i)}}]),e}(),P=function(){function e(t){o(this,e),this.table=t,this.element=this.table.rowManager.tableElement,this.holderEl=this.table.rowManager.element,this.leftCol=0,this.rightCol=0,this.scrollLeft=0,this.vDomScrollPosLeft=0,this.vDomScrollPosRight=0,this.vDomPadLeft=0,this.vDomPadRight=0,this.fitDataColAvg=0,this.window=200,this.initialized=!1,this.columns=[],this.compatabilityCheck()&&this.initialize()}return a(e,[{key:"compatabilityCheck",value:function(){var e=this.table.options,t=!0;return"fitDataTable"==e.layout&&(console.warn("Horizontal Vitrual DOM is not compatible with fitDataTable layout mode"),t=!1),e.responsiveLayout&&(console.warn("Horizontal Vitrual DOM is not compatible with responsive columns"),t=!1),this.table.rtl&&(console.warn("Horizontal Vitrual DOM is not currently compatible with RTL text direction"),t=!1),e.columns&&e.columns.find((function(e){return e.frozen}))&&(console.warn("Horizontal Vitrual DOM is not compatible with frozen columns"),t=!1),t||(e.virtualDomHoz=!1),t}},{key:"initialize",value:function(){var e=this;this.holderEl.addEventListener("scroll",(function(){var t=e.holderEl.scrollLeft;e.scrollLeft!=t&&(e.scrollLeft=t,e.scroll(t-(e.vDomScrollPosLeft+e.window)))}))}},{key:"deinitialize",value:function(){this.initialized=!1}},{key:"clear",value:function(){this.columns=[],this.leftCol=-1,this.rightCol=0,this.vDomScrollPosLeft=0,this.vDomScrollPosRight=0,this.vDomPadLeft=0,this.vDomPadRight=0}},{key:"dataChange",value:function(){var e,t,i=!1,o=0,n=0;if("fitData"===this.table.options.layout){if(this.table.columnManager.columnsByIndex.forEach((function(e){!e.definition.width&&e.visible&&(i=!0)})),i&&i&&this.table.rowManager.getDisplayRows().length&&(this.vDomScrollPosRight=this.scrollLeft+this.holderEl.clientWidth+this.window,e=this.table.options.groupBy?this.table.modules.groupRows.getGroups(!1)[0].getRows(!1)[0]:this.table.rowManager.getDisplayRows()[0])){t=e.getElement(),e.generateCells(),this.element.appendChild(t);for(n=0;nthis.vDomScrollPosRight)break}for(t.parentNode.removeChild(t),this.fitDataColAvg=Math.floor(o/(n+1));ni.vDomScrollPosLeft&&n.8*this.holderEl.clientWidth?this.reinitialize():e>0?(this.addColRight(),this.removeColLeft()):(this.addColLeft(),this.removeColRight())}},{key:"colPositionAdjust",value:function(e,t,i){for(var o=e;o=this.columns.length-1?this.vDomPadRight=0:this.vDomPadRight-=e.getWidth(),this.element.style.paddingRight=this.vDomPadRight+"px",this.addColRight())}},{key:"addColLeft",value:function(){var e=this.columns[this.leftCol-1];e&&e.modules.vdomHoz.rightPos>=this.vDomScrollPosLeft&&(this.table.rowManager.getVisibleRows().forEach((function(t){if("group"!==t.type){var i=t.getCell(e);t.getElement().prepend(i.getElement()),i.cellRendered()}})),this.fitDataColActualWidthCheck(e),this.leftCol?this.vDomPadLeft-=e.getWidth():this.vDomPadLeft=0,this.element.style.paddingLeft=this.vDomPadLeft+"px",this.leftCol--,this.addColLeft())}},{key:"removeColRight",value:function(e){var t;(e=this.columns[this.rightCol])&&e.modules.vdomHoz.leftPos>this.vDomScrollPosRight&&(t=this.table.rowManager.getVisibleRows(),e.modules.vdomHoz.visible=!1,t.forEach((function(t){if("group"!==t.type){var i=t.getCell(e);t.getElement().removeChild(i.getElement())}})),this.vDomPadRight+=e.getWidth(),this.element.style.paddingRight=this.vDomPadRight+"px",this.rightCol--,this.removeColRight())}},{key:"removeColLeft",value:function(){var e=this.columns[this.leftCol];e&&e.modules.vdomHoz.rightPos-1?(this.browser="ie",this.browserSlow=!0):e.indexOf("Edge")>-1?(this.browser="edge",this.browserSlow=!0):e.indexOf("Firefox")>-1?(this.browser="firefox",this.browserSlow=!1):(this.browser="other",this.browserSlow=!1),this.browserMobile=/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i.test(e)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(e.substr(0,4))}},{key:"blockRedraw",value:function(){return this.rowManager.blockRedraw()}},{key:"restoreRedraw",value:function(){return this.rowManager.restoreRedraw()}},{key:"setDataFromLocalFile",value:function(e){var t=this;return new Promise((function(i,o){var n=document.createElement("input");n.type="file",n.accept=e||".json,application/json",n.addEventListener("change",(function(e){var a,s=n.files[0],l=new FileReader;l.readAsText(s),l.onload=function(e){try{a=JSON.parse(l.result)}catch(e){return console.warn("File Load Error - File contents is invalid JSON",e),void o(e)}t.setData(a).then((function(e){i(e)})).catch((function(e){i(e)}))},l.onerror=function(e){console.warn("File Load Error - Unable to read file"),o()}})),n.click()}))}},{key:"setData",value:function(e,t,i){return this.modExists("ajax")&&this.modules.ajax.blockActiveRequest(),this._setData(e,t,i,!1,!0)}},{key:"_setData",value:function(e,t,i,o,n){return"string"!=typeof e?e?this.rowManager.setData(e,o,n):this.modExists("ajax")&&(this.modules.ajax.getUrl||this.options.ajaxURLGenerator)?"remote"==this.options.pagination&&this.modExists("page",!0)?(this.modules.page.reset(!0,!0),this.modules.page.setPage(1)):this.modules.ajax.loadData(o,n):this.rowManager.setData([],o,n):0==e.indexOf("{")||0==e.indexOf("[")?this.rowManager.setData(JSON.parse(e),o,n):this.modExists("ajax",!0)?(t&&this.modules.ajax.setParams(t),i&&this.modules.ajax.setConfig(i),this.modules.ajax.setUrl(e),"remote"==this.options.pagination&&this.modExists("page",!0)?(this.modules.page.reset(!0,!0),this.modules.page.setPage(1)):this.modules.ajax.loadData(o,n)):void 0}},{key:"clearData",value:function(){this.modExists("ajax")&&this.modules.ajax.blockActiveRequest(),this.rowManager.clearData()}},{key:"getData",value:function(e){return this.rowManager.getData(e)}},{key:"getDataCount",value:function(e){return this.rowManager.getDataCount(e)}},{key:"searchRows",value:function(e,t,i){if(this.modExists("filter",!0))return this.modules.filter.search("rows",e,t,i)}},{key:"searchData",value:function(e,t,i){if(this.modExists("filter",!0))return this.modules.filter.search("data",e,t,i)}},{key:"getHtml",value:function(e,t,i){if(this.modExists("export",!0))return this.modules.export.getHtml(e,t,i)}},{key:"print",value:function(e,t,i){if(this.modExists("print",!0))return this.modules.print.printFullscreen(e,t,i)}},{key:"getAjaxUrl",value:function(){if(this.modExists("ajax",!0))return this.modules.ajax.getUrl()}},{key:"replaceData",value:function(e,t,i){return this.modExists("ajax")&&this.modules.ajax.blockActiveRequest(),this._setData(e,t,i,!0)}},{key:"updateData",value:function(e){var t=this,i=0;return new Promise((function(o,n){t.modExists("ajax")&&t.modules.ajax.blockActiveRequest(),"string"==typeof e&&(e=JSON.parse(e)),e?e.forEach((function(e){var n=t.rowManager.findRow(e[t.options.index]);n&&(i++,n.updateData(e).then((function(){--i||o()})))})):(console.warn("Update Error - No data provided"),n("Update Error - No data provided"))}))}},{key:"addData",value:function(e,t,i){var o=this;return new Promise((function(n,a){o.modExists("ajax")&&o.modules.ajax.blockActiveRequest(),"string"==typeof e&&(e=JSON.parse(e)),e?o.rowManager.addRows(e,t,i).then((function(e){var t=[];e.forEach((function(e){t.push(e.getComponent())})),n(t)})):(console.warn("Update Error - No data provided"),a("Update Error - No data provided"))}))}},{key:"updateOrAddData",value:function(e){var t=this,i=[],o=0;return new Promise((function(n,a){t.modExists("ajax")&&t.modules.ajax.blockActiveRequest(),"string"==typeof e&&(e=JSON.parse(e)),e?e.forEach((function(e){var a=t.rowManager.findRow(e[t.options.index]);o++,a?a.updateData(e).then((function(){o--,i.push(a.getComponent()),o||n(i)})):t.rowManager.addRows(e).then((function(e){o--,i.push(e[0].getComponent()),o||n(i)}))})):(console.warn("Update Error - No data provided"),a("Update Error - No data provided"))}))}},{key:"getRow",value:function(e){var t=this.rowManager.findRow(e);return t?t.getComponent():(console.warn("Find Error - No matching row found:",e),!1)}},{key:"getRowFromPosition",value:function(e,t){var i=this.rowManager.getRowFromPosition(e,t);return i?i.getComponent():(console.warn("Find Error - No matching row found:",e),!1)}},{key:"deleteRow",value:function(e){var t=this;return new Promise((function(i,o){var n=0,a=0,s=[];function l(){++n==e.length&&a&&(this.rowManager.reRenderInPosition(),i())}Array.isArray(e)||(e=[e]),e.forEach((function(e){var i=t.rowManager.findRow(e,!0);i?s.push(i):(console.warn("Delete Error - No matching row found:",e),o("Delete Error - No matching row found"),l())})),s.sort((function(e,i){return t.rowManager.rows.indexOf(e)>t.rowManager.rows.indexOf(i)?1:-1})),s.forEach((function(e){e.delete().then((function(){a++,l()})).catch((function(e){l(),o(e)}))}))}))}},{key:"addRow",value:function(e,t,i){var o=this;return new Promise((function(n,a){"string"==typeof e&&(e=JSON.parse(e)),o.rowManager.addRows(e,t,i).then((function(e){o.modExists("columnCalcs")&&o.modules.columnCalcs.recalc(o.rowManager.activeRows),n(e[0].getComponent())}))}))}},{key:"updateOrAddRow",value:function(e,t){var i=this;return new Promise((function(o,n){var a=i.rowManager.findRow(e);"string"==typeof t&&(t=JSON.parse(t)),a?a.updateData(t).then((function(){i.modExists("columnCalcs")&&i.modules.columnCalcs.recalc(i.rowManager.activeRows),o(a.getComponent())})).catch((function(e){n(e)})):a=i.rowManager.addRows(t).then((function(e){i.modExists("columnCalcs")&&i.modules.columnCalcs.recalc(i.rowManager.activeRows),o(e[0].getComponent())})).catch((function(e){n(e)}))}))}},{key:"updateRow",value:function(e,t){var i=this;return new Promise((function(o,n){var a=i.rowManager.findRow(e);"string"==typeof t&&(t=JSON.parse(t)),a?a.updateData(t).then((function(){o(a.getComponent())})).catch((function(e){n(e)})):(console.warn("Update Error - No matching row found:",e),n("Update Error - No matching row found"))}))}},{key:"scrollToRow",value:function(e,t,i){var o=this;return new Promise((function(n,a){var s=o.rowManager.findRow(e);s?o.rowManager.scrollToRow(s,t,i).then((function(){n()})).catch((function(e){a(e)})):(console.warn("Scroll Error - No matching row found:",e),a("Scroll Error - No matching row found"))}))}},{key:"moveRow",value:function(e,t,i){var o=this.rowManager.findRow(e);o?o.moveToRow(t,i):console.warn("Move Error - No matching row found:",e)}},{key:"getRows",value:function(e){return this.rowManager.getComponents(e)}},{key:"getRowPosition",value:function(e,t){var i=this.rowManager.findRow(e);return i?this.rowManager.getRowPosition(i,t):(console.warn("Position Error - No matching row found:",e),!1)}},{key:"copyToClipboard",value:function(e){this.modExists("clipboard",!0)&&this.modules.clipboard.copy(e)}},{key:"setColumns",value:function(e){this.columnManager.setColumns(e)}},{key:"getColumns",value:function(e){return this.columnManager.getComponents(e)}},{key:"getColumn",value:function(e){var t=this.columnManager.findColumn(e);return t?t.getComponent():(console.warn("Find Error - No matching column found:",e),!1)}},{key:"getColumnDefinitions",value:function(){return this.columnManager.getDefinitionTree()}},{key:"getColumnLayout",value:function(){if(this.modExists("persistence",!0))return this.modules.persistence.parseColumns(this.columnManager.getColumns())}},{key:"setColumnLayout",value:function(e){return!!this.modExists("persistence",!0)&&(this.columnManager.setColumns(this.modules.persistence.mergeDefinition(this.options.columns,e)),!0)}},{key:"showColumn",value:function(e){var t=this.columnManager.findColumn(e);if(!t)return console.warn("Column Show Error - No matching column found:",e),!1;t.show(),this.options.responsiveLayout&&this.modExists("responsiveLayout",!0)&&this.modules.responsiveLayout.update()}},{key:"hideColumn",value:function(e){var t=this.columnManager.findColumn(e);if(!t)return console.warn("Column Hide Error - No matching column found:",e),!1;t.hide(),this.options.responsiveLayout&&this.modExists("responsiveLayout",!0)&&this.modules.responsiveLayout.update()}},{key:"toggleColumn",value:function(e){var t=this.columnManager.findColumn(e);if(!t)return console.warn("Column Visibility Toggle Error - No matching column found:",e),!1;t.visible?t.hide():t.show()}},{key:"addColumn",value:function(e,t,i){var o=this;return new Promise((function(n,a){var s=o.columnManager.findColumn(i);o.columnManager.addColumn(e,t,s).then((function(e){n(e.getComponent())})).catch((function(e){a(e)}))}))}},{key:"deleteColumn",value:function(e){var t=this;return new Promise((function(i,o){var n=t.columnManager.findColumn(e);n?n.delete().then((function(){i()})).catch((function(e){o(e)})):(console.warn("Column Delete Error - No matching column found:",e),o())}))}},{key:"updateColumnDefinition",value:function(e,t){var i=this;return new Promise((function(o,n){var a=i.columnManager.findColumn(e);a?a.updateDefinition(t).then((function(e){o(e)})).catch((function(e){n(e)})):(console.warn("Column Update Error - No matching column found:",e),n())}))}},{key:"moveColumn",value:function(e,t,i){var o=this.columnManager.findColumn(e),n=this.columnManager.findColumn(t);o?n?this.columnManager.moveColumn(o,n,i):console.warn("Move Error - No matching column found:",n):console.warn("Move Error - No matching column found:",e)}},{key:"scrollToColumn",value:function(e,t,i){var o=this;return new Promise((function(n,a){var s=o.columnManager.findColumn(e);s?o.columnManager.scrollToColumn(s,t,i).then((function(){n()})).catch((function(e){a(e)})):(console.warn("Scroll Error - No matching column found:",e),a("Scroll Error - No matching column found"))}))}},{key:"setLocale",value:function(e){this.modules.localize.setLocale(e)}},{key:"getLocale",value:function(){return this.modules.localize.getLocale()}},{key:"getLang",value:function(e){return this.modules.localize.getLang(e)}},{key:"redraw",value:function(e){this.columnManager.redraw(e),this.rowManager.redraw(e)}},{key:"setHeight",value:function(e){"classic"!==this.rowManager.renderMode?(this.options.height=isNaN(e)?e:e+"px",this.element.style.height=this.options.height,this.rowManager.setRenderMode(),this.rowManager.redraw()):console.warn("setHeight function is not available in classic render mode")}},{key:"setSort",value:function(e,t){this.modExists("sort",!0)&&(this.modules.sort.setSort(e,t),this.rowManager.sorterRefresh())}},{key:"getSorters",value:function(){if(this.modExists("sort",!0))return this.modules.sort.getSort()}},{key:"clearSort",value:function(){this.modExists("sort",!0)&&(this.modules.sort.clear(),this.rowManager.sorterRefresh())}},{key:"setFilter",value:function(e,t,i,o){this.modExists("filter",!0)&&(this.modules.filter.setFilter(e,t,i,o),this.rowManager.filterRefresh())}},{key:"refreshFilter",value:function(){this.modExists("filter",!0)&&this.rowManager.filterRefresh()}},{key:"addFilter",value:function(e,t,i,o){this.modExists("filter",!0)&&(this.modules.filter.addFilter(e,t,i,o),this.rowManager.filterRefresh())}},{key:"getFilters",value:function(e){if(this.modExists("filter",!0))return this.modules.filter.getFilters(e)}},{key:"setHeaderFilterFocus",value:function(e){if(this.modExists("filter",!0)){var t=this.columnManager.findColumn(e);if(!t)return console.warn("Column Filter Focus Error - No matching column found:",e),!1;this.modules.filter.setHeaderFilterFocus(t)}}},{key:"getHeaderFilterValue",value:function(e){if(this.modExists("filter",!0)){var t=this.columnManager.findColumn(e);if(t)return this.modules.filter.getHeaderFilterValue(t);console.warn("Column Filter Error - No matching column found:",e)}}},{key:"setHeaderFilterValue",value:function(e,t){if(this.modExists("filter",!0)){var i=this.columnManager.findColumn(e);if(!i)return console.warn("Column Filter Error - No matching column found:",e),!1;this.modules.filter.setHeaderFilterValue(i,t)}}},{key:"getHeaderFilters",value:function(){if(this.modExists("filter",!0))return this.modules.filter.getHeaderFilters()}},{key:"removeFilter",value:function(e,t,i){this.modExists("filter",!0)&&(this.modules.filter.removeFilter(e,t,i),this.rowManager.filterRefresh())}},{key:"clearFilter",value:function(e){this.modExists("filter",!0)&&(this.modules.filter.clearFilter(e),this.rowManager.filterRefresh())}},{key:"clearHeaderFilter",value:function(){this.modExists("filter",!0)&&(this.modules.filter.clearHeaderFilter(),this.rowManager.filterRefresh())}},{key:"selectRow",value:function(e){this.modExists("selectRow",!0)&&this.modules.selectRow.selectRows(e)}},{key:"deselectRow",value:function(e){this.modExists("selectRow",!0)&&this.modules.selectRow.deselectRows(e)}},{key:"toggleSelectRow",value:function(e){this.modExists("selectRow",!0)&&this.modules.selectRow.toggleRow(e)}},{key:"getSelectedRows",value:function(){if(this.modExists("selectRow",!0))return this.modules.selectRow.getSelectedRows()}},{key:"getSelectedData",value:function(){if(this.modExists("selectRow",!0))return this.modules.selectRow.getSelectedData()}},{key:"getInvalidCells",value:function(){if(this.modExists("validate",!0))return this.modules.validate.getInvalidCells()}},{key:"clearCellValidation",value:function(e){var t=this;this.modExists("validate",!0)&&(e||(e=this.modules.validate.getInvalidCells()),Array.isArray(e)||(e=[e]),e.forEach((function(e){t.modules.validate.clearValidation(e._getSelf())})))}},{key:"validate",value:function(e){var t=[];return this.rowManager.rows.forEach((function(e){var i=e.validate();!0!==i&&(t=t.concat(i))})),!t.length||t}},{key:"setMaxPage",value:function(e){if(!this.options.pagination||!this.modExists("page"))return!1;this.modules.page.setMaxPage(e)}},{key:"setPage",value:function(e){return this.options.pagination&&this.modExists("page")?this.modules.page.setPage(e):new Promise((function(e,t){t()}))}},{key:"setPageToRow",value:function(e){var t=this;return new Promise((function(i,o){t.options.pagination&&t.modExists("page")&&(e=t.rowManager.findRow(e))?t.modules.page.setPageToRow(e).then((function(){i()})).catch((function(){o()})):o()}))}},{key:"setPageSize",value:function(e){if(!this.options.pagination||!this.modExists("page"))return!1;this.modules.page.setPageSize(e),this.modules.page.setPage(1).then((function(){})).catch((function(){}))}},{key:"getPageSize",value:function(){if(this.options.pagination&&this.modExists("page",!0))return this.modules.page.getPageSize()}},{key:"previousPage",value:function(){if(!this.options.pagination||!this.modExists("page"))return!1;this.modules.page.previousPage()}},{key:"nextPage",value:function(){if(!this.options.pagination||!this.modExists("page"))return!1;this.modules.page.nextPage()}},{key:"getPage",value:function(){return!(!this.options.pagination||!this.modExists("page"))&&this.modules.page.getPage()}},{key:"getPageMax",value:function(){return!(!this.options.pagination||!this.modExists("page"))&&this.modules.page.getPageMax()}},{key:"setGroupBy",value:function(e){if(!this.modExists("groupRows",!0))return!1;this.options.groupBy=e,this.modules.groupRows.initialize(),this.rowManager.refreshActiveData("display"),this.options.persistence&&this.modExists("persistence",!0)&&this.modules.persistence.config.group&&this.modules.persistence.save("group")}},{key:"setGroupValues",value:function(e){if(!this.modExists("groupRows",!0))return!1;this.options.groupValues=e,this.modules.groupRows.initialize(),this.rowManager.refreshActiveData("display"),this.options.persistence&&this.modExists("persistence",!0)&&this.modules.persistence.config.group&&this.modules.persistence.save("group")}},{key:"setGroupStartOpen",value:function(e){if(!this.modExists("groupRows",!0))return!1;this.options.groupStartOpen=e,this.modules.groupRows.initialize(),this.options.groupBy?(this.rowManager.refreshActiveData("group"),this.options.persistence&&this.modExists("persistence",!0)&&this.modules.persistence.config.group&&this.modules.persistence.save("group")):console.warn("Grouping Update - cant refresh view, no groups have been set")}},{key:"setGroupHeader",value:function(e){if(!this.modExists("groupRows",!0))return!1;this.options.groupHeader=e,this.modules.groupRows.initialize(),this.options.groupBy?(this.rowManager.refreshActiveData("group"),this.options.persistence&&this.modExists("persistence",!0)&&this.modules.persistence.config.group&&this.modules.persistence.save("group")):console.warn("Grouping Update - cant refresh view, no groups have been set")}},{key:"getGroups",value:function(e){return!!this.modExists("groupRows",!0)&&this.modules.groupRows.getGroups(!0)}},{key:"getGroupedData",value:function(){if(this.modExists("groupRows",!0))return this.options.groupBy?this.modules.groupRows.getGroupedData():this.getData()}},{key:"getEditedCells",value:function(){if(this.modExists("edit",!0))return this.modules.edit.getEditedCells()}},{key:"clearCellEdited",value:function(e){var t=this;this.modExists("edit",!0)&&(e||(e=this.modules.edit.getEditedCells()),Array.isArray(e)||(e=[e]),e.forEach((function(e){t.modules.edit.clearEdited(e._getSelf())})))}},{key:"getCalcResults",value:function(){return!!this.modExists("columnCalcs",!0)&&this.modules.columnCalcs.getResults()}},{key:"recalc",value:function(){this.modExists("columnCalcs",!0)&&this.modules.columnCalcs.recalcAll(this.rowManager.activeRows)}},{key:"navigatePrev",value:function(){var e=!1;return!(!this.modExists("edit",!0)||!(e=this.modules.edit.currentCell))&&e.nav().prev()}},{key:"navigateNext",value:function(){var e=!1;return!(!this.modExists("edit",!0)||!(e=this.modules.edit.currentCell))&&e.nav().next()}},{key:"navigateLeft",value:function(){var t=!1;return!(!this.modExists("edit",!0)||!(t=this.modules.edit.currentCell))&&(e.preventDefault(),t.nav().left())}},{key:"navigateRight",value:function(){var t=!1;return!(!this.modExists("edit",!0)||!(t=this.modules.edit.currentCell))&&(e.preventDefault(),t.nav().right())}},{key:"navigateUp",value:function(){var t=!1;return!(!this.modExists("edit",!0)||!(t=this.modules.edit.currentCell))&&(e.preventDefault(),t.nav().up())}},{key:"navigateDown",value:function(){var t=!1;return!(!this.modExists("edit",!0)||!(t=this.modules.edit.currentCell))&&(e.preventDefault(),t.nav().down())}},{key:"undo",value:function(){return!(!this.options.history||!this.modExists("history",!0))&&this.modules.history.undo()}},{key:"redo",value:function(){return!(!this.options.history||!this.modExists("history",!0))&&this.modules.history.redo()}},{key:"getHistoryUndoSize",value:function(){return!(!this.options.history||!this.modExists("history",!0))&&this.modules.history.getHistoryUndoSize()}},{key:"getHistoryRedoSize",value:function(){return!(!this.options.history||!this.modExists("history",!0))&&this.modules.history.getHistoryRedoSize()}},{key:"clearHistory",value:function(){return!(!this.options.history||!this.modExists("history",!0))&&this.modules.history.clear()}},{key:"download",value:function(e,t,i,o){this.modExists("download",!0)&&this.modules.download.download(e,t,i,o)}},{key:"downloadToTab",value:function(e,t,i,o){this.modExists("download",!0)&&this.modules.download.download(e,t,i,o,!0)}},{key:"tableComms",value:function(e,t,i,o){this.modules.comms.receive(e,t,i,o)}},{key:"modExists",value:function(e,t){return!!this.modules[e]||(t&&console.error("Tabulator Module Not Installed: "+e),!1)}}]),i}();A.defaultOptions={height:!1,minHeight:!1,maxHeight:!1,layout:"fitData",layoutColumnsOnNewData:!1,columnMinWidth:40,columnMaxWidth:!1,columnHeaderVertAlign:"top",resizableColumns:!0,resizableRows:!1,autoResize:!0,columns:[],columnDefaults:!1,cellHozAlign:"",cellVertAlign:"",headerHozAlign:"",data:[],autoColumns:!1,autoColumnsDefinitions:!1,reactiveData:!1,nestedFieldSeparator:".",tooltips:!1,tooltipsHeader:!1,tooltipGenerationMode:"load",initialSort:!1,initialFilter:!1,initialHeaderFilter:!1,columnHeaderSortMulti:!0,sortOrderReverse:!1,headerSort:!0,headerSortTristate:!1,headerSortElement:"
",footerElement:!1,index:"id",textDirection:"auto",keybindings:[],tabEndNewRow:!1,invalidOptionWarnings:!0,clipboard:!1,clipboardCopyStyled:!0,clipboardCopyConfig:!1,clipboardCopyFormatter:!1,clipboardCopyRowRange:"active",clipboardPasteParser:"table",clipboardPasteAction:"insert",clipboardCopied:function(){},clipboardPasted:function(){},clipboardPasteError:function(){},downloadReady:function(e,t){return t},downloadComplete:!1,downloadConfig:{},downloadRowRange:"active",dataTree:!1,dataTreeFilter:!0,dataTreeSort:!0,dataTreeElementColumn:!1,dataTreeBranchElement:!0,dataTreeChildIndent:9,dataTreeChildField:"_children",dataTreeCollapseElement:!1,dataTreeExpandElement:!1,dataTreeStartExpanded:!1,dataTreeRowExpanded:function(){},dataTreeRowCollapsed:function(){},dataTreeChildColumnCalcs:!1,dataTreeSelectPropagate:!1,printAsHtml:!1,printFormatter:!1,printHeader:!1,printFooter:!1,printStyled:!0,printRowRange:"visible",printConfig:{},addRowPos:"bottom",selectable:"highlight",selectableRangeMode:"drag",selectableRollingSelection:!0,selectablePersistence:!0,selectableCheck:function(e,t){return!0},headerFilterLiveFilterDelay:300,headerFilterPlaceholder:!1,headerVisible:!0,history:!1,locale:!1,langs:{},virtualDom:!0,virtualDomBuffer:0,virtualDomHoz:!1,persistence:!1,persistenceID:"",persistenceMode:!0,persistenceReaderFunc:!1,persistenceWriterFunc:!1,responsiveLayout:!1,responsiveLayoutCollapseStartOpen:!0,responsiveLayoutCollapseUseFormatters:!0,responsiveLayoutCollapseFormatter:!1,pagination:!1,paginationSize:!1,paginationInitialPage:1,paginationButtonCount:5,paginationSizeSelector:!1,paginationElement:!1,paginationDataSent:{},paginationDataReceived:{},paginationAddRow:"page",ajaxURL:!1,ajaxURLGenerator:!1,ajaxParams:{},ajaxConfig:"get",ajaxContentType:"form",ajaxRequestFunc:!1,ajaxLoader:!0,ajaxLoaderLoading:!1,ajaxLoaderError:!1,ajaxFiltering:!1,ajaxSorting:!1,ajaxProgressiveLoad:!1,ajaxProgressiveLoadDelay:0,ajaxProgressiveLoadScrollMargin:0,groupBy:!1,groupStartOpen:!0,groupValues:!1,groupUpdateOnCellEdit:!1,groupHeader:!1,groupHeaderPrint:null,groupHeaderClipboard:null,groupHeaderHtmlOutput:null,groupHeaderDownload:null,htmlOutputConfig:!1,movableColumns:!1,movableRows:!1,movableRowsConnectedTables:!1,movableRowsConnectedElements:!1,movableRowsSender:!1,movableRowsReceiver:"insert",movableRowsSendingStart:function(){},movableRowsSent:function(){},movableRowsSentFailed:function(){},movableRowsSendingStop:function(){},movableRowsReceivingStart:function(){},movableRowsReceived:function(){},movableRowsReceivedFailed:function(){},movableRowsReceivingStop:function(){},movableRowsElementDrop:function(){},scrollToRowPosition:"top",scrollToRowIfVisible:!0,scrollToColumnPosition:"left",scrollToColumnIfVisible:!0,rowFormatter:!1,rowFormatterPrint:null,rowFormatterClipboard:null,rowFormatterHtmlOutput:null,placeholder:!1,tableBuilding:function(){},tableBuilt:function(){},renderStarted:function(){},renderComplete:function(){},rowClick:!1,rowDblClick:!1,rowContext:!1,rowTap:!1,rowDblTap:!1,rowTapHold:!1,rowMouseEnter:!1,rowMouseLeave:!1,rowMouseOver:!1,rowMouseOut:!1,rowMouseMove:!1,rowContextMenu:!1,rowClickMenu:!1,rowAdded:function(){},rowDeleted:function(){},rowMoved:function(){},rowUpdated:function(){},rowSelectionChanged:function(){},rowSelected:function(){},rowDeselected:function(){},rowResized:function(){},cellClick:!1,cellDblClick:!1,cellContext:!1,cellTap:!1,cellDblTap:!1,cellTapHold:!1,cellMouseEnter:!1,cellMouseLeave:!1,cellMouseOver:!1,cellMouseOut:!1,cellMouseMove:!1,cellEditing:function(){},cellEdited:function(){},cellEditCancelled:function(){},columnMoved:!1,columnResized:function(){},columnTitleChanged:function(){},columnVisibilityChanged:function(){},htmlImporting:function(){},htmlImported:function(){},dataLoading:function(){},dataLoaded:function(){},dataChanged:!1,ajaxRequesting:function(){},ajaxResponse:!1,ajaxError:function(){},dataFiltering:!1,dataFiltered:!1,dataSorting:function(){},dataSorted:function(){},groupToggleElement:"arrow",groupClosedShowCalcs:!1,dataGrouping:function(){},dataGrouped:!1,groupVisibilityChanged:function(){},groupClick:!1,groupDblClick:!1,groupContext:!1,groupContextMenu:!1,groupClickMenu:!1,groupTap:!1,groupDblTap:!1,groupTapHold:!1,columnCalcs:!0,pageLoaded:function(){},localized:function(){},validationMode:"blocking",validationFailed:function(){},historyUndo:function(){},historyRedo:function(){},scrollHorizontal:function(){},scrollVertical:function(){}},new H(A);var F=function(e){s(n,e);var i=d(n);function n(e){var t;return o(this,n),(t=i.call(this,e)).allowedTypes=["","data","download","clipboard","print","htmlOutput"],t}return a(n,[{key:"initializeColumn",value:function(e){var t=!1,i={};this.allowedTypes.forEach((function(o){var n,a="accessor"+(o.charAt(0).toUpperCase()+o.slice(1));e.definition[a]&&(n=this.lookupAccessor(e.definition[a]))&&(t=!0,i[a]={accessor:n,params:e.definition[a+"Params"]||{}})})),t&&(e.modules.accessor=i)}},{key:"lookupAccessor",value:function(e){var i=!1;switch(t(e)){case"string":n.accessors[e]?i=n.accessors[e]:console.warn("Accessor Error - No such accessor found, ignoring: ",e);break;case"function":i=e}return i}},{key:"transformRow",value:function(e,t){var i="accessor"+(t.charAt(0).toUpperCase()+t.slice(1)),o=e.getComponent(),n=b.deepClone(e.data||{});return this.table.columnManager.traverse((function(e){var a,s,l,r;e.modules.accessor&&(s=e.modules.accessor[i]||e.modules.accessor.accessor||!1)&&"undefined"!=(a=e.getFieldValue(n))&&(r=e.getComponent(),l="function"==typeof s.params?s.params(a,n,t,r,o):s.params,e.setFieldValue(n,s.accessor(a,n,t,l,r,o)))})),n}}]),n}(R);F.moduleName="accessor",F.accessors={};var _={json:{headers:{"Content-Type":"application/json"},body:function(e,t,i){return JSON.stringify(i)}},form:{headers:{},body:function(e,t,i){var o=this.generateParamsList(i),n=new FormData;return o.forEach((function(e){n.append(e.key,e.value)})),n}}},N=function(e){s(n,e);var i=d(n);function n(e){var t;return o(this,n),(t=i.call(this,e)).config=!1,t.url="",t.urlGenerator=!1,t.params=!1,t.loaderElement=t.createLoaderElement(),t.msgElement=t.createMsgElement(),t.loadingElement=!1,t.errorElement=!1,t.loaderPromise=!1,t.progressiveLoad=!1,t.loading=!1,t.requestOrder=0,t}return a(n,[{key:"initialize",value:function(){var e;this.loaderElement.appendChild(this.msgElement),this.table.options.ajaxLoaderLoading&&("string"==typeof this.table.options.ajaxLoaderLoading?((e=document.createElement("template")).innerHTML=this.table.options.ajaxLoaderLoading.trim(),this.loadingElement=e.content.firstChild):this.loadingElement=this.table.options.ajaxLoaderLoading),this.loaderPromise=this.table.options.ajaxRequestFunc||n.defaultLoaderPromise,this.urlGenerator=this.table.options.ajaxURLGenerator||n.defaultURLGenerator,this.table.options.ajaxLoaderError&&("string"==typeof this.table.options.ajaxLoaderError?((e=document.createElement("template")).innerHTML=this.table.options.ajaxLoaderError.trim(),this.errorElement=e.content.firstChild):this.errorElement=this.table.options.ajaxLoaderError),this.table.options.ajaxParams&&this.setParams(this.table.options.ajaxParams),this.table.options.ajaxConfig&&this.setConfig(this.table.options.ajaxConfig),this.table.options.ajaxURL&&this.setUrl(this.table.options.ajaxURL),this.table.options.ajaxProgressiveLoad&&(this.table.options.pagination?(this.progressiveLoad=!1,console.error("Progressive Load Error - Pagination and progressive load cannot be used at the same time")):this.table.modExists("page")?(this.progressiveLoad=this.table.options.ajaxProgressiveLoad,this.table.modules.page.initializeProgressive(this.progressiveLoad)):console.error("Pagination plugin is required for progressive ajax loading"))}},{key:"createLoaderElement",value:function(){var e=document.createElement("div");return e.classList.add("tabulator-loader"),e}},{key:"createMsgElement",value:function(){var e=document.createElement("div");return e.classList.add("tabulator-loader-msg"),e.setAttribute("role","alert"),e}},{key:"setParams",value:function(e,t){if(t)for(var i in this.params=this.params||{},e)this.params[i]=e[i];else this.params=e}},{key:"getParams",value:function(){return this.params||{}}},{key:"setConfig",value:function(e){if(this._loadDefaultConfig(),"string"==typeof e)this.config.method=e;else for(var t in e)this.config[t]=e[t]}},{key:"_loadDefaultConfig",value:function(e){if(!this.config||e)for(var t in this.config={},n.defaultConfig)this.config[t]=n.defaultConfig[t]}},{key:"setUrl",value:function(e){this.url=e}},{key:"getUrl",value:function(){return this.url}},{key:"loadData",value:function(e,t){return this.progressiveLoad?this._loadDataProgressive():this._loadDataStandard(e,t)}},{key:"nextPage",value:function(e){this.loading||e<(this.table.options.ajaxProgressiveLoadScrollMargin||2*this.table.rowManager.getElement().clientHeight)&&this.table.modules.page.nextPage().then((function(){})).catch((function(){}))}},{key:"blockActiveRequest",value:function(){this.requestOrder++}},{key:"_loadDataProgressive",value:function(){return this.table.rowManager.setData([]),this.table.modules.page.setPage(1)}},{key:"_loadDataStandard",value:function(e,t){var i=this;return new Promise((function(o,n){i.sendRequest(e).then((function(a){i.table.rowManager.setData(a,e,t).then((function(){o()})).catch((function(e){n(e)}))})).catch((function(e){n(e)}))}))}},{key:"generateParamsList",value:function(e,i){var o=this,n=[];if(i=i||"",Array.isArray(e))e.forEach((function(e,t){n=n.concat(o.generateParamsList(e,i?i+"["+t+"]":t))}));else if("object"===t(e))for(var a in e)n=n.concat(this.generateParamsList(e[a],i?i+"["+a+"]":a));else n.push({key:i,value:e});return n}},{key:"serializeParams",value:function(e){var t=this.generateParamsList(e),i=[];return t.forEach((function(e){i.push(encodeURIComponent(e.key)+"="+encodeURIComponent(e.value))})),i.join("&")}},{key:"sendRequest",value:function(e){var t,i=this,o=this.url;return this.requestOrder++,t=this.requestOrder,this._loadDefaultConfig(),new Promise((function(n,a){!1!==i.table.options.ajaxRequesting.call(i.table,i.url,i.params)?(i.loading=!0,e||i.showLoader(),i.loaderPromise(o,i.config,i.params).then((function(e){t===i.requestOrder?(i.table.options.ajaxResponse&&(e=i.table.options.ajaxResponse.call(i.table,i.url,i.params,e)),n(e),i.hideLoader(),i.loading=!1):console.warn("Ajax Response Blocked - An active ajax request was blocked by an attempt to change table data while the request was being made")})).catch((function(e){console.error("Ajax Load Error: ",e),i.table.options.ajaxError.call(i.table,e),i.showError(),setTimeout((function(){i.hideLoader()}),3e3),i.loading=!1,a(e)}))):a()}))}},{key:"showLoader",value:function(){if("function"==typeof this.table.options.ajaxLoader?this.table.options.ajaxLoader():this.table.options.ajaxLoader){for(this.hideLoader();this.msgElement.firstChild;)this.msgElement.removeChild(this.msgElement.firstChild);this.msgElement.classList.remove("tabulator-error"),this.msgElement.classList.add("tabulator-loading"),this.loadingElement?this.msgElement.appendChild(this.loadingElement):this.msgElement.innerHTML=this.table.modules.localize.getText("ajax|loading"),this.table.element.appendChild(this.loaderElement)}}},{key:"showError",value:function(){for(this.hideLoader();this.msgElement.firstChild;)this.msgElement.removeChild(this.msgElement.firstChild);this.msgElement.classList.remove("tabulator-loading"),this.msgElement.classList.add("tabulator-error"),this.errorElement?this.msgElement.appendChild(this.errorElement):this.msgElement.innerHTML=this.table.modules.localize.getText("ajax|error"),this.table.element.appendChild(this.loaderElement)}},{key:"hideLoader",value:function(){this.loaderElement.parentNode&&this.loaderElement.parentNode.removeChild(this.loaderElement)}}]),n}(R);N.moduleName="ajax",N.defaultConfig={method:"GET"},N.defaultURLGenerator=function(e,t,i){return e&&i&&Object.keys(i).length&&(t.method&&"get"!=t.method.toLowerCase()||(t.method="get",e+=(e.includes("?")?"&":"?")+this.modules.ajax.serializeParams(i))),e},N.defaultLoaderPromise=function(e,i,o){var n,a=this;return new Promise((function(s,l){if(e=a.urlGenerator.call(a.table,e,i,o),"GET"!=i.method.toUpperCase())if(n="object"===t(a.table.options.ajaxContentType)?a.table.options.ajaxContentType:a.contentTypeFormatters[a.table.options.ajaxContentType]){for(var r in n.headers)i.headers||(i.headers={}),void 0===i.headers[r]&&(i.headers[r]=n.headers[r]);i.body=n.body.call(a,e,i,o)}else console.warn("Ajax Error - Invalid ajaxContentType value:",a.table.options.ajaxContentType);e?(void 0===i.headers&&(i.headers={}),void 0===i.headers.Accept&&(i.headers.Accept="application/json"),void 0===i.headers["X-Requested-With"]&&(i.headers["X-Requested-With"]="XMLHttpRequest"),void 0===i.mode&&(i.mode="cors"),"cors"==i.mode?(void 0===i.headers["Access-Control-Allow-Origin"]&&(i.headers["Access-Control-Allow-Origin"]=window.location.origin),void 0===i.credentials&&(i.credentials="same-origin")):void 0===i.credentials&&(i.credentials="include"),fetch(e,i).then((function(e){e.ok?e.json().then((function(e){s(e)})).catch((function(e){l(e),console.warn("Ajax Load Error - Invalid JSON returned",e)})):(console.error("Ajax Load Error - Connection Error: "+e.status,e.statusText),l(e))})).catch((function(e){console.error("Ajax Load Error - Connection Error: ",e),l(e)}))):(console.warn("Ajax Load Error - No URL Set"),s([]))}))},N.contentTypeFormatters=_;var B=function(e){s(n,e);var i=d(n);function n(e){var t;return o(this,n),(t=i.call(this,e)).mode=!0,t.pasteParser=function(){},t.pasteAction=function(){},t.customSelection=!1,t.rowRange=!1,t.blocked=!0,t}return a(n,[{key:"initialize",value:function(){var e=this;this.mode=this.table.options.clipboard,this.rowRange=this.table.options.clipboardCopyRowRange,!0!==this.mode&&"copy"!==this.mode||this.table.element.addEventListener("copy",(function(t){var i,o;if(!e.blocked){if(t.preventDefault(),e.customSelection)i=e.customSelection,e.table.options.clipboardCopyFormatter&&(i=e.table.options.clipboardCopyFormatter("plain",i));else{var n=e.table.modules.export.generateExportList(e.table.options.clipboardCopyConfig,e.table.options.clipboardCopyStyled,e.rowRange,"clipboard");i=(o=e.table.modules.export.genereateHTMLTable(n))?e.generatePlainContent(n):"",e.table.options.clipboardCopyFormatter&&(i=e.table.options.clipboardCopyFormatter("plain",i),o=e.table.options.clipboardCopyFormatter("html",o))}window.clipboardData&&window.clipboardData.setData?window.clipboardData.setData("Text",i):t.clipboardData&&t.clipboardData.setData?(t.clipboardData.setData("text/plain",i),o&&t.clipboardData.setData("text/html",o)):t.originalEvent&&t.originalEvent.clipboardData.setData&&(t.originalEvent.clipboardData.setData("text/plain",i),o&&t.originalEvent.clipboardData.setData("text/html",o)),e.table.options.clipboardCopied.call(e.table,i,o),e.reset()}})),!0!==this.mode&&"paste"!==this.mode||this.table.element.addEventListener("paste",(function(t){e.paste(t)})),this.setPasteParser(this.table.options.clipboardPasteParser),this.setPasteAction(this.table.options.clipboardPasteAction)}},{key:"reset",value:function(){this.blocked=!0,this.customSelection=!1}},{key:"generatePlainContent",value:function(e){var i=[];return e.forEach((function(e){var o=[];e.columns.forEach((function(i){var n="";if(i)if("group"===e.type&&(i.value=i.component.getKey()),null===i.value)n="";else switch(t(i.value)){case"object":n=JSON.stringify(i.value);break;case"undefined":n="";break;default:n=i.value}o.push(n)})),i.push(o.join("\t"))})),i.join("\n")}},{key:"copy",value:function(e,t){var i,o;this.blocked=!1,this.customSelection=!1,!0!==this.mode&&"copy"!==this.mode||(this.rowRange=e||this.table.options.clipboardCopyRowRange,void 0!==window.getSelection&&void 0!==document.createRange?((e=document.createRange()).selectNodeContents(this.table.element),(i=window.getSelection()).toString()&&t&&(this.customSelection=i.toString()),i.removeAllRanges(),i.addRange(e)):void 0!==document.selection&&void 0!==document.body.createTextRange&&((o=document.body.createTextRange()).moveToElementText(this.table.element),o.select()),document.execCommand("copy"),i&&i.removeAllRanges())}},{key:"setPasteAction",value:function(e){switch(t(e)){case"string":this.pasteAction=n.pasteActions[e],this.pasteAction||console.warn("Clipboard Error - No such paste action found:",e);break;case"function":this.pasteAction=e}}},{key:"setPasteParser",value:function(e){switch(t(e)){case"string":this.pasteParser=n.pasteParsers[e],this.pasteParser||console.warn("Clipboard Error - No such paste parser found:",e);break;case"function":this.pasteParser=e}}},{key:"paste",value:function(e){var t,i,o;this.checkPaseOrigin(e)&&(t=this.getPasteData(e),(i=this.pasteParser.call(this,t))?(e.preventDefault(),this.table.modExists("mutator")&&(i=this.mutateData(i)),o=this.pasteAction.call(this,i),this.table.options.clipboardPasted.call(this.table,t,i,o)):this.table.options.clipboardPasteError.call(this.table,t))}},{key:"mutateData",value:function(e){var t=this,i=[];return Array.isArray(e)?e.forEach((function(e){i.push(t.table.modules.mutator.transformRow(e,"clipboard"))})):i=e,i}},{key:"checkPaseOrigin",value:function(e){var t=!0;return("DIV"!=e.target.tagName||this.table.modules.edit.currentCell)&&(t=!1),t}},{key:"getPasteData",value:function(e){var t;return window.clipboardData&&window.clipboardData.getData?t=window.clipboardData.getData("Text"):e.clipboardData&&e.clipboardData.getData?t=e.clipboardData.getData("text/plain"):e.originalEvent&&e.originalEvent.clipboardData.getData&&(t=e.originalEvent.clipboardData.getData("text/plain")),t}}]),n}(R);B.moduleName="clipboard",B.pasteActions={replace:function(e){return this.table.setData(e)},update:function(e){return this.table.updateOrAddData(e)},insert:function(e){return this.table.addData(e)}},B.pasteParsers={table:function(e){var t=[],i=!0,o=this.table.columnManager.columns,n=[],a=[];return(e=e.split("\n")).forEach((function(e){t.push(e.split("\t"))})),!(!t.length||1===t.length&&t[0].length<2)&&(t[0].forEach((function(e){var t=o.find((function(t){return e&&t.definition.title&&e.trim()&&t.definition.title.trim()===e.trim()}));t?n.push(t):i=!1})),i||(i=!0,n=[],t[0].forEach((function(e){var t=o.find((function(t){return e&&t.field&&e.trim()&&t.field.trim()===e.trim()}));t?n.push(t):i=!1})),i||(n=this.table.columnManager.columnsByIndex)),i&&t.shift(),t.forEach((function(e){var t={};e.forEach((function(e,i){n[i]&&(t[n[i].field]=e)})),a.push(t)})),a)}};var O=function(){function e(t){o(this,e),this._row=t}return a(e,[{key:"getData",value:function(e){return this._row.getData(e)}},{key:"getElement",value:function(){return this._row.getElement()}},{key:"getTable",value:function(){return this._row.table}},{key:"getCells",value:function(){var e=[];return this._row.getCells().forEach((function(t){e.push(t.getComponent())})),e}},{key:"getCell",value:function(e){var t=this._row.getCell(e);return!!t&&t.getComponent()}},{key:"_getSelf",value:function(){return this._row}}]),e}(),I={avg:function(e,t,i){var o=0,n=void 0!==i.precision?i.precision:2;return e.length&&(o=e.reduce((function(e,t){return Number(e)+Number(t)})),o/=e.length,o=!1!==n?o.toFixed(n):o),parseFloat(o).toString()},max:function(e,t,i){var o=null,n=void 0!==i.precision&&i.precision;return e.forEach((function(e){((e=Number(e))>o||null===o)&&(o=e)})),null!==o?!1!==n?o.toFixed(n):o:""},min:function(e,t,i){var o=null,n=void 0!==i.precision&&i.precision;return e.forEach((function(e){((e=Number(e))"),o.dataTreeExpandElement?"string"==typeof o.dataTreeExpandElement?((e=document.createElement("div")).innerHTML=o.dataTreeExpandElement,this.expandEl=e.firstChild):this.expandEl=o.dataTreeExpandElement:(this.expandEl=document.createElement("div"),this.expandEl.classList.add("tabulator-data-tree-control"),this.expandEl.tabIndex=0,this.expandEl.innerHTML="
"),t(o.dataTreeStartExpanded)){case"boolean":this.startOpen=function(e,t){return o.dataTreeStartExpanded};break;case"function":this.startOpen=o.dataTreeStartExpanded;break;default:this.startOpen=function(e,t){return o.dataTreeStartExpanded[t]}}}},{key:"initializeRow",value:function(e){var i=e.getData()[this.field],o=Array.isArray(i),n=o||!o&&"object"===t(i)&&null!==i;!n&&e.modules.dataTree&&e.modules.dataTree.branchEl&&e.modules.dataTree.branchEl.parentNode.removeChild(e.modules.dataTree.branchEl),!n&&e.modules.dataTree&&e.modules.dataTree.controlEl&&e.modules.dataTree.controlEl.parentNode.removeChild(e.modules.dataTree.controlEl),e.modules.dataTree={index:e.modules.dataTree?e.modules.dataTree.index:0,open:!!n&&(e.modules.dataTree?e.modules.dataTree.open:this.startOpen(e.getComponent(),0)),controlEl:!(!e.modules.dataTree||!n)&&e.modules.dataTree.controlEl,branchEl:!(!e.modules.dataTree||!n)&&e.modules.dataTree.branchEl,parent:!!e.modules.dataTree&&e.modules.dataTree.parent,children:n}}},{key:"layoutRow",value:function(e){var t=(this.elementField?e.getCell(this.elementField):e.getCells()[0]).getElement(),i=e.modules.dataTree;i.branchEl&&(i.branchEl.parentNode&&i.branchEl.parentNode.removeChild(i.branchEl),i.branchEl=!1),i.controlEl&&(i.controlEl.parentNode&&i.controlEl.parentNode.removeChild(i.controlEl),i.controlEl=!1),this.generateControlElement(e,t),e.getElement().classList.add("tabulator-tree-level-"+i.index),i.index&&(this.branchEl?(i.branchEl=this.branchEl.cloneNode(!0),t.insertBefore(i.branchEl,t.firstChild),this.table.rtl?i.branchEl.style.marginRight=(i.branchEl.offsetWidth+i.branchEl.style.marginLeft)*(i.index-1)+i.index*this.indent+"px":i.branchEl.style.marginLeft=(i.branchEl.offsetWidth+i.branchEl.style.marginRight)*(i.index-1)+i.index*this.indent+"px"):this.table.rtl?t.style.paddingRight=parseInt(window.getComputedStyle(t,null).getPropertyValue("padding-right"))+i.index*this.indent+"px":t.style.paddingLeft=parseInt(window.getComputedStyle(t,null).getPropertyValue("padding-left"))+i.index*this.indent+"px")}},{key:"generateControlElement",value:function(e,t){var i=this,o=e.modules.dataTree,n=(t=t||e.getCells()[0].getElement(),o.controlEl);!1!==o.children&&(o.open?(o.controlEl=this.collapseEl.cloneNode(!0),o.controlEl.addEventListener("click",(function(t){t.stopPropagation(),i.collapseRow(e)}))):(o.controlEl=this.expandEl.cloneNode(!0),o.controlEl.addEventListener("click",(function(t){t.stopPropagation(),i.expandRow(e)}))),o.controlEl.addEventListener("mousedown",(function(e){e.stopPropagation()})),n&&n.parentNode===t?n.parentNode.replaceChild(o.controlEl,n):t.insertBefore(o.controlEl,t.firstChild))}},{key:"setDisplayIndex",value:function(e){this.displayIndex=e}},{key:"getDisplayIndex",value:function(){return this.displayIndex}},{key:"getRows",value:function(e){var t=this,i=[];return e.forEach((function(e,o){var n;i.push(e),e instanceof E&&(e.create(),(n=e.modules.dataTree.children).index||!1===n.children||t.getChildren(e).forEach((function(e){e.create(),i.push(e)})))})),i}},{key:"getChildren",value:function(e,t){var i=this,o=e.modules.dataTree,n=[],a=[];return!1!==o.children&&(o.open||t)&&(Array.isArray(o.children)||(o.children=this.generateChildren(e)),n=this.table.modExists("filter")&&this.table.options.dataTreeFilter?this.table.modules.filter.filter(o.children):o.children,this.table.modExists("sort")&&this.table.options.dataTreeSort&&this.table.modules.sort.sort(n),n.forEach((function(e){a.push(e),i.getChildren(e).forEach((function(e){a.push(e)}))}))),a}},{key:"generateChildren",value:function(e){var t=this,i=[],o=e.getData()[this.field];return Array.isArray(o)||(o=[o]),o.forEach((function(o){var n=new E(o||{},t.table.rowManager);n.create(),n.modules.dataTree.index=e.modules.dataTree.index+1,n.modules.dataTree.parent=e,n.modules.dataTree.children&&(n.modules.dataTree.open=t.startOpen(n.getComponent(),n.modules.dataTree.index)),i.push(n)})),i}},{key:"expandRow",value:function(e,t){var i=e.modules.dataTree;!1!==i.children&&(i.open=!0,e.reinitialize(),this.table.rowManager.refreshActiveData("tree",!1,!0),this.table.options.dataTreeRowExpanded(e.getComponent(),e.modules.dataTree.index))}},{key:"collapseRow",value:function(e){var t=e.modules.dataTree;!1!==t.children&&(t.open=!1,e.reinitialize(),this.table.rowManager.refreshActiveData("tree",!1,!0),this.table.options.dataTreeRowCollapsed(e.getComponent(),e.modules.dataTree.index))}},{key:"toggleRow",value:function(e){var t=e.modules.dataTree;!1!==t.children&&(t.open?this.collapseRow(e):this.expandRow(e))}},{key:"getTreeParent",value:function(e){return!!e.modules.dataTree.parent&&e.modules.dataTree.parent.getComponent()}},{key:"getFilteredTreeChildren",value:function(e){var t=e.modules.dataTree,i=[];return t.children&&(Array.isArray(t.children)||(t.children=this.generateChildren(e)),(this.table.modExists("filter")&&this.table.options.dataTreeFilter?this.table.modules.filter.filter(t.children):t.children).forEach((function(e){e instanceof E&&i.push(e)}))),i}},{key:"rowDelete",value:function(e){var t,i=e.modules.dataTree.parent;i&&(!1!==(t=this.findChildIndex(e,i))&&i.data[this.field].splice(t,1),i.data[this.field].length||delete i.data[this.field],this.initializeRow(i),this.layoutRow(i)),this.table.rowManager.refreshActiveData("tree",!1,!0)}},{key:"addTreeChildRow",value:function(e,t,i,o){var n=!1;"string"==typeof t&&(t=JSON.parse(t)),Array.isArray(e.data[this.field])||(e.data[this.field]=[],e.modules.dataTree.open=this.startOpen(e.getComponent(),e.modules.dataTree.index)),void 0!==o&&!1!==(n=this.findChildIndex(o,e))&&e.data[this.field].splice(i?n:n+1,0,t),!1===n&&(i?e.data[this.field].unshift(t):e.data[this.field].push(t)),this.initializeRow(e),this.layoutRow(e),this.table.rowManager.refreshActiveData("tree",!1,!0)}},{key:"findChildIndex",value:function(e,i){var o=this,n=!1;return"object"==t(e)?e instanceof E?n=e.data:e instanceof RowComponent?n=e._getSelf().data:"undefined"!=typeof HTMLElement&&e instanceof HTMLElement&&i.modules.dataTree&&(n=i.modules.dataTree.children.find((function(t){return t instanceof E&&t.element===e})))&&(n=n.data):n=null!=e&&i.data[this.field].find((function(t){return t.data[o.table.options.index]==e})),n&&(Array.isArray(i.data[this.field])&&(n=i.data[this.field].indexOf(n)),-1==n&&(n=!1)),n}},{key:"getTreeChildren",value:function(e,t,i){var o=this,n=e.modules.dataTree,a=[];return n.children&&(Array.isArray(n.children)||(n.children=this.generateChildren(e)),n.children.forEach((function(e){e instanceof E&&(a.push(t?e.getComponent():e),i&&(a=a.concat(o.getTreeChildren(e,t,i))))}))),a}},{key:"checkForRestyle",value:function(e){e.row.cells.indexOf(e)||e.row.reinitialize()}},{key:"getChildField",value:function(){return this.field}},{key:"redrawNeeded",value:function(e){return!!this.field&&void 0!==e[this.field]||!!this.elementField&&void 0!==e[this.elementField]}}]),n}(R);V.moduleName="dataTree";var W={csv:function(e,i,o){var n=i&&i.delimiter?i.delimiter:",",a=[],s=[];e.forEach((function(e){var i=[];switch(e.type){case"group":console.warn("Download Warning - CSV downloader cannot process row groups");break;case"calc":console.warn("Download Warning - CSV downloader cannot process column calculations");break;case"header":e.columns.forEach((function(e,t){e&&1===e.depth&&(s[t]=void 0===e.value||null===e.value?"":'"'+String(e.value).split('"').join('""')+'"')}));break;case"row":e.columns.forEach((function(e){if(e){switch(t(e.value)){case"object":e.value=JSON.stringify(e.value);break;case"undefined":case"null":e.value=""}i.push('"'+String(e.value).split('"').join('""')+'"')}})),a.push(i.join(n))}})),s.length&&a.unshift(s.join(n)),a=a.join("\n"),i.bom&&(a="\ufeff"+a),o(a,"text/csv")},json:function(e,t,i){var o=[];e.forEach((function(e){var t={};switch(e.type){case"header":break;case"group":console.warn("Download Warning - JSON downloader cannot process row groups");break;case"calc":console.warn("Download Warning - JSON downloader cannot process column calculations");break;case"row":e.columns.forEach((function(e){e&&(t[e.component.getField()]=e.value)})),o.push(t)}})),i(o=JSON.stringify(o,null,"\t"),"application/json")},pdf:function(e,i,o){var n=[],a=[],s={},l=i.rowGroupStyles||{fontStyle:"bold",fontSize:12,cellPadding:6,fillColor:220},r=i.rowCalcStyles||{fontStyle:"bold",fontSize:10,cellPadding:4,fillColor:232},u=i.jsPDF||{},c=i&&i.title?i.title:"";function d(e,i){var o=[];return e.columns.forEach((function(e){var n;if(e){switch(t(e.value)){case"object":e.value=JSON.stringify(e.value);break;case"undefined":case"null":e.value=""}n={content:e.value,colSpan:e.width,rowSpan:e.height},i&&(n.styles=i),o.push(n)}else o.push("")})),o}u.orientation||(u.orientation=i.orientation||"landscape"),u.unit||(u.unit="pt"),e.forEach((function(e){switch(e.type){case"header":n.push(d(e));break;case"group":a.push(d(e,l));break;case"calc":a.push(d(e,r));break;case"row":a.push(d(e))}}));var h=new jsPDF(u);i&&i.autoTable&&(s="function"==typeof i.autoTable?i.autoTable(h)||{}:i.autoTable),c&&(s.addPageContent=function(e){h.text(c,40,30)}),s.head=n,s.body=a,h.autoTable(s),i&&i.documentProcessing&&i.documentProcessing(h),o(h.output("arraybuffer"),"application/pdf")},xlsx:function(e,i,o){var n=i.sheetName||"Sheet1",a=XLSX.utils.book_new();function s(){var i=[],o=[],n={},a={s:{c:0,r:0},e:{c:e[0]?e[0].columns.reduce((function(e,t){return e+(t&&t.width?t.width:1)}),0):0,r:e.length}};return e.forEach((function(e,n){var a=[];e.columns.forEach((function(e,i){e?(a.push(e.value instanceof Date||"object"!==t(e.value)?e.value:JSON.stringify(e.value)),(e.width>1||e.height>-1)&&o.push({s:{r:n,c:i},e:{r:n+e.height-1,c:i+e.width-1}})):a.push("")})),i.push(a)})),XLSX.utils.sheet_add_aoa(n,i),n["!ref"]=XLSX.utils.encode_range(a),o.length&&(n["!merges"]=o),n}if(a.SheetNames=[],a.Sheets={},i.sheetOnly)o(s());else{if(i.sheets)for(var l in i.sheets)!0===i.sheets[l]?(a.SheetNames.push(l),a.Sheets[l]=s()):(a.SheetNames.push(l),this.modules.comms.send(i.sheets[l],"download","intercept",{type:"xlsx",options:{sheetOnly:!0},active:this.active,intercept:function(e){a.Sheets[l]=e}}));else a.SheetNames.push(n),a.Sheets[n]=s();i.documentProcessing&&(a=i.documentProcessing(a)),o(function(e){for(var t=new ArrayBuffer(e.length),i=new Uint8Array(t),o=0;o!=e.length;++o)i[o]=255&e.charCodeAt(o);return t}(XLSX.write(a,{bookType:"xlsx",bookSST:!0,type:"binary"})),"application/octet-stream")}},html:function(e,t,i){this.modExists("export",!0)&&i(this.modules.export.genereateHTMLTable(e),"text/html")}},G=function(e){s(i,e);var t=d(i);function i(e){return o(this,i),t.call(this,e)}return a(i,[{key:"download",value:function(e,t,o,n,a){var s=!1;if("function"==typeof e?s=e:i.downloaders[e]?s=i.downloaders[e]:console.warn("Download Error - No such download type found: ",e),s){var l=this.generateExportList(n);s.call(this.table,l,o||{},(function(i,o){a?!0===a?this.triggerDownload(i,o,e,t,!0):a(i):this.triggerDownload(i,o,e,t)}))}}},{key:"generateExportList",value:function(e){var t=this.table.modules.export.generateExportList(this.table.options.downloadConfig,!1,e||this.table.options.downloadRowRange,"download"),i=this.table.options.groupHeaderDownload;return i&&!Array.isArray(i)&&(i=[i]),t.forEach((function(e){var t;"group"===e.type&&(t=e.columns[0],i&&i[e.indent]&&(t.value=i[e.indent](t.value,e.component._group.getRowCount(),e.component._group.getData(),e.component)))})),t}},{key:"triggerDownload",value:function(e,t,i,o,n){var a=document.createElement("a"),s=new Blob([e],{type:t});o=o||"Tabulator."+("function"==typeof i?"txt":i);(s=this.table.options.downloadReady.call(this.table,e,s))&&(n?window.open(window.URL.createObjectURL(s)):navigator.msSaveOrOpenBlob?navigator.msSaveOrOpenBlob(s,o):(a.setAttribute("href",window.URL.createObjectURL(s)),a.setAttribute("download",o),a.style.display="none",document.body.appendChild(a),a.click(),document.body.removeChild(a)),this.table.options.downloadComplete&&this.table.options.downloadComplete())}},{key:"commsReceived",value:function(e,t,i){switch(t){case"intercept":this.download(i.type,"",i.options,i.active,i.intercept)}}}]),i}(R);G.moduleName="download",G.downloaders=W;var U={input:function(e,i,o,n,a){var s=e.getValue(),l=document.createElement("input");if(l.setAttribute("type",a.search?"search":"text"),l.style.padding="4px",l.style.width="100%",l.style.boxSizing="border-box",a.elementAttributes&&"object"==t(a.elementAttributes))for(var r in a.elementAttributes)"+"==r.charAt(0)?(r=r.slice(1),l.setAttribute(r,l.getAttribute(r)+a.elementAttributes["+"+r])):l.setAttribute(r,a.elementAttributes[r]);function u(e){null==s&&""!==l.value||l.value!==s?o(l.value)&&(s=l.value):n()}return l.value=void 0!==s?s:"",i((function(){l.focus({preventScroll:!0}),l.style.height="100%"})),l.addEventListener("change",u),l.addEventListener("blur",u),l.addEventListener("keydown",(function(e){switch(e.keyCode){case 13:u();break;case 27:n();break;case 35:case 36:e.stopPropagation()}})),a.mask&&this.table.modules.edit.maskInput(l,a),l},textarea:function(e,i,o,n,a){var s=e.getValue(),l=a.verticalNavigation||"hybrid",r=String(null!=s?s:""),u=((r.match(/(?:\r\n|\r|\n)/g)||[]).length,document.createElement("textarea")),c=0;if(u.style.display="block",u.style.padding="2px",u.style.height="100%",u.style.width="100%",u.style.boxSizing="border-box",u.style.whiteSpace="pre-wrap",u.style.resize="none",a.elementAttributes&&"object"==t(a.elementAttributes))for(var d in a.elementAttributes)"+"==d.charAt(0)?(d=d.slice(1),u.setAttribute(d,u.getAttribute(d)+a.elementAttributes["+"+d])):u.setAttribute(d,a.elementAttributes[d]);function h(t){null==s&&""!==u.value||u.value!==s?(o(u.value)&&(s=u.value),setTimeout((function(){e.getRow().normalizeHeight()}),300)):n()}return u.value=r,i((function(){u.focus({preventScroll:!0}),u.style.height="100%",u.scrollHeight,u.style.height=u.scrollHeight+"px",e.getRow().normalizeHeight()})),u.addEventListener("change",h),u.addEventListener("blur",h),u.addEventListener("keyup",(function(){u.style.height="";var t=u.scrollHeight;u.style.height=t+"px",t!=c&&(c=t,e.getRow().normalizeHeight())})),u.addEventListener("keydown",(function(e){switch(e.keyCode){case 27:n();break;case 38:("editor"==l||"hybrid"==l&&u.selectionStart)&&(e.stopImmediatePropagation(),e.stopPropagation());break;case 40:("editor"==l||"hybrid"==l&&u.selectionStart!==u.value.length)&&(e.stopImmediatePropagation(),e.stopPropagation());break;case 35:case 36:e.stopPropagation()}})),a.mask&&this.table.modules.edit.maskInput(u,a),u},number:function(e,i,o,n,a){var s=e.getValue(),l=a.verticalNavigation||"editor",r=document.createElement("input");if(r.setAttribute("type","number"),void 0!==a.max&&r.setAttribute("max",a.max),void 0!==a.min&&r.setAttribute("min",a.min),void 0!==a.step&&r.setAttribute("step",a.step),r.style.padding="4px",r.style.width="100%",r.style.boxSizing="border-box",a.elementAttributes&&"object"==t(a.elementAttributes))for(var u in a.elementAttributes)"+"==u.charAt(0)?(u=u.slice(1),r.setAttribute(u,r.getAttribute(u)+a.elementAttributes["+"+u])):r.setAttribute(u,a.elementAttributes[u]);r.value=s;var c=function(e){d()};function d(){var e=r.value;isNaN(e)||""===e||(e=Number(e)),e!==s?o(e)&&(s=e):n()}return i((function(){r.removeEventListener("blur",c),r.focus({preventScroll:!0}),r.style.height="100%",r.addEventListener("blur",c)})),r.addEventListener("keydown",(function(e){switch(e.keyCode){case 13:d();break;case 27:n();break;case 38:case 40:"editor"==l&&(e.stopImmediatePropagation(),e.stopPropagation());break;case 35:case 36:e.stopPropagation()}})),a.mask&&this.table.modules.edit.maskInput(r,a),r},range:function(e,i,o,n,a){var s=e.getValue(),l=document.createElement("input");if(l.setAttribute("type","range"),void 0!==a.max&&l.setAttribute("max",a.max),void 0!==a.min&&l.setAttribute("min",a.min),void 0!==a.step&&l.setAttribute("step",a.step),l.style.padding="4px",l.style.width="100%",l.style.boxSizing="border-box",a.elementAttributes&&"object"==t(a.elementAttributes))for(var r in a.elementAttributes)"+"==r.charAt(0)?(r=r.slice(1),l.setAttribute(r,l.getAttribute(r)+a.elementAttributes["+"+r])):l.setAttribute(r,a.elementAttributes[r]);function u(){var e=l.value;isNaN(e)||""===e||(e=Number(e)),e!=s?o(e)&&(s=e):n()}return l.value=s,i((function(){l.focus({preventScroll:!0}),l.style.height="100%"})),l.addEventListener("blur",(function(e){u()})),l.addEventListener("keydown",(function(e){switch(e.keyCode){case 13:u();break;case 27:n()}})),l},select:function(e,i,o,n,a){var s=this,l=this,r=e.getElement(),u=e.getValue(),c=a.verticalNavigation||"editor",d=void 0!==u||null===u?Array.isArray(u)?u:[u]:void 0!==a.defaultValue?a.defaultValue:[],h=document.createElement("input"),m=document.createElement("div"),p=a.multiselect,f=[],g={},v=[],w=[],y=!0,E=!1,C="",k=null;function x(t){var i,o={},n=l.table.getData();return(i=t?l.table.columnManager.getColumnByField(t):e.getColumn()._getSelf())?n.forEach((function(e){var t=i.getFieldValue(e);null!=t&&""!==t&&(o[t]=!0)})):console.warn("unable to find matching column to create select lookup list:",t),Object.keys(o)}function R(i,o){var n=[],s=[];function l(e){e={label:e.label,value:e.value,itemParams:e.itemParams,elementAttributes:e.elementAttributes,element:!1};return o.indexOf(e.value)>-1&&L(e),n.push(e),s.push(e),e}if("function"==typeof i&&(i=i(e)),Array.isArray(i))i.forEach((function(e){var i;"object"===t(e)?e.options?(i={label:e.label,group:!0,itemParams:e.itemParams,elementAttributes:e.elementAttributes,element:!1},s.push(i),e.options.forEach((function(e){l(e)}))):l(e):(i={label:e,value:e,element:!1},o.indexOf(i.value)>-1&&L(i),n.push(i),s.push(i))}));else for(var r in i){var u={label:i[r],value:r,element:!1};o.indexOf(u.value)>-1&&L(u),n.push(u),s.push(u)}a.sortValuesList&&(n.sort((function(e,t){return e.labelt.label?1:0})),s.sort((function(e,t){return e.labelt.label?1:0})),"asc"!==a.sortValuesList&&(n.reverse(),s.reverse())),f=n,v=s,function(){for(;m.firstChild;)m.removeChild(m.firstChild);v.forEach((function(i){var o=i.element;if(!o){if(o=document.createElement("div"),i.label=a.listItemFormatter?a.listItemFormatter(i.value,i.label,e,o,i.itemParams):i.label,i.group?(o.classList.add("tabulator-edit-select-list-group"),o.tabIndex=0,o.innerHTML=""===i.label?" ":i.label):(o.classList.add("tabulator-edit-select-list-item"),o.tabIndex=0,o.innerHTML=""===i.label?" ":i.label,o.addEventListener("click",(function(){E=!0,setTimeout((function(){E=!1}),10),p?(T(i),h.focus()):z(i)})),w.indexOf(i)>-1&&o.classList.add("active")),i.elementAttributes&&"object"==t(i.elementAttributes))for(var n in i.elementAttributes)"+"==n.charAt(0)?(n=n.slice(1),o.setAttribute(n,h.getAttribute(n)+i.elementAttributes["+"+n])):o.setAttribute(n,i.elementAttributes[n]);o.addEventListener("mousedown",(function(){y=!1,setTimeout((function(){y=!0}),10)})),i.element=o}m.appendChild(o)}))}()}function M(e,t){!p&&g&&g.element&&g.element.classList.remove("active"),g&&g.element&&g.element.classList.remove("focused"),g=e,e.element&&(e.element.classList.add("focused"),t&&e.element.classList.add("active")),e&&e.element&&e.element.scrollIntoView&&e.element.scrollIntoView({behavior:"smooth",block:"nearest",inline:"start"})}function L(e){-1==w.indexOf(e)&&(w.push(e),M(e,!0)),H()}function D(e){var t=w[e];e>-1&&(w.splice(e,1),t.element&&t.element.classList.remove("active"))}function T(e){e||(e=g);var t=w.indexOf(e);t>-1?D(t):(!0!==p&&w.length>=p&&D(0),L(e)),H()}function z(e){A(),e||(e=g),e&&(h.value=e.label,o(e.value)),d=[e.value]}function S(e){e||A();var t=[];w.forEach((function(e){t.push(e.value)})),d=t,o(t)}function H(){var e=[];w.forEach((function(t){e.push(t.label)})),h.value=e.join(", "),!1===l.currentCell&&S(!0)}function P(){A(),n()}function A(){m.parentNode&&m.parentNode.removeChild(m),l.table.rowManager.element.removeEventListener("scroll",P)}if((Array.isArray(a)||!Array.isArray(a)&&"object"===t(a)&&!a.values)&&(console.warn("DEPRECATION WARNING - values for the select editor must now be passed into the values property of the editorParams object, not as the editorParams object"),a={values:a}),h.setAttribute("type","text"),h.style.padding="4px",h.style.width="100%",h.style.boxSizing="border-box",h.style.cursor="default",h.readOnly=0!=this.currentCell,a.elementAttributes&&"object"==t(a.elementAttributes))for(var F in a.elementAttributes)"+"==F.charAt(0)?(F=F.slice(1),h.setAttribute(F,h.getAttribute(F)+a.elementAttributes["+"+F])):h.setAttribute(F,a.elementAttributes[F]);return h.value=void 0!==u||null===u?u:"",h.addEventListener("search",(function(e){h.value||(!function(){for(var e=w.length,t=0;t0&&M(f[t-1],!p));break;case 40:t=f.indexOf(g),("editor"==c||"hybrid"==c&&t=38&&e.keyCode<=90&&function(e){clearTimeout(k);var t=String.fromCharCode(event.keyCode).toLowerCase();C+=t.toLowerCase();var i=f.find((function(e){return void 0!==e.label&&e.label.toLowerCase().startsWith(C)}));i&&M(i,!p),k=setTimeout((function(){C=""}),800)}(e.keyCode)}})),h.addEventListener("blur",(function(e){y&&(p?S():P())})),h.addEventListener("focus",(function(e){E||function(){if(w=[],!m.parentNode){!0===a.values?R(x(),d):"string"==typeof a.values?R(x(a.values),d):R(a.values||[],d);var e=b.elOffset(r);m.style.minWidth=r.offsetWidth+"px",m.style.top=e.top+r.offsetHeight+"px",m.style.left=e.left+"px",m.addEventListener("mousedown",(function(e){y=!1,setTimeout((function(){y=!0}),10)})),document.body.appendChild(m)}}()})),(m=document.createElement("div")).classList.add("tabulator-edit-select-list"),i((function(){h.style.height="100%",h.focus({preventScroll:!0})})),setTimeout((function(){s.table.rowManager.element.addEventListener("scroll",P)}),10),h},autocomplete:function(e,i,o,n,a){var s=this,l=this,r=e.getElement(),u=e.getValue(),c=a.verticalNavigation||"editor",d=void 0!==u||null===u?u:void 0!==a.defaultValue?a.defaultValue:"",h=document.createElement("input"),m=document.createElement("div"),p=[],f=!1,g=!0,v=!1;if(h.setAttribute("type","search"),h.style.padding="4px",h.style.width="100%",h.style.boxSizing="border-box",a.elementAttributes&&"object"==t(a.elementAttributes))for(var w in a.elementAttributes)"+"==w.charAt(0)?(w=w.slice(1),h.setAttribute(w,h.getAttribute(w)+a.elementAttributes["+"+w])):h.setAttribute(w,a.elementAttributes[w]);function y(){!0===a.values?v=E():"string"==typeof a.values&&(v=E(a.values))}function E(t){var i,o={},n=l.table.getData();return(i=t?l.table.columnManager.getColumnByField(t):e.getColumn()._getSelf())?(n.forEach((function(e){var t=i.getFieldValue(e);null!=t&&""!==t&&(o[t]=!0)})),o=a.sortValuesList?"asc"==a.sortValuesList?Object.keys(o).sort():Object.keys(o).sort().reverse():Object.keys(o)):console.warn("unable to find matching column to create autocomplete lookup list:",t),o}function C(e,t){var i,o,n=[];i=v||(a.values||[]),a.searchFunc?(n=a.searchFunc(e,i))instanceof Promise?(k(void 0!==a.searchingPlaceholder?a.searchingPlaceholder:"Searching..."),n.then((function(e){M(x(e),t)})).catch((function(e){console.err("error in autocomplete search promise:",e)}))):M(x(n),t):(o=x(i),""===e?a.showListOnEmpty&&(n=o):o.forEach((function(t){null===t.value&&void 0===t.value||(String(t.value).toLowerCase().indexOf(String(e).toLowerCase())>-1||String(t.title).toLowerCase().indexOf(String(e).toLowerCase())>-1)&&n.push(t)})),M(n,t))}function k(e){var t=document.createElement("div");R(),!1!==e&&(t.classList.add("tabulator-edit-select-list-notice"),t.tabIndex=0,e instanceof Node?t.appendChild(e):t.innerHTML=e,m.appendChild(t))}function x(e){var i=[];if(Array.isArray(e))e.forEach((function(e){var o={};"object"===t(e)?(o.title=a.listItemFormatter?a.listItemFormatter(e.value,e.label):e.label,o.value=e.value):(o.title=a.listItemFormatter?a.listItemFormatter(e,e):e,o.value=e),i.push(o)}));else for(var o in e){var n={title:a.listItemFormatter?a.listItemFormatter(o,e[o]):e[o],value:o};i.push(n)}return i}function R(){for(;m.firstChild;)m.removeChild(m.firstChild)}function M(e,t){e.length?function(e,t){var i=!1;R(),(p=e).forEach((function(e){var o=e.element;o||((o=document.createElement("div")).classList.add("tabulator-edit-select-list-item"),o.tabIndex=0,o.innerHTML=e.title,o.addEventListener("click",(function(t){D(e),L()})),o.addEventListener("mousedown",(function(e){g=!1,setTimeout((function(){g=!0}),10)})),e.element=o,t&&e.value==u&&(h.value=e.title,e.element.classList.add("active"),i=!0),e===f&&(e.element.classList.add("active"),i=!0)),m.appendChild(o)})),i||D(!1)}(e,t):a.emptyPlaceholder&&k(a.emptyPlaceholder)}function L(){T(),f?u!==f.value?(u=f.value,h.value=f.title,o(f.value)):n():a.freetext||a.allowEmpty&&""===h.value?(u=h.value,o(h.value)):n()}function D(e,t){f&&f.element&&f.element.classList.remove("active"),f=e,e&&e.element&&e.element.classList.add("active"),e&&e.element&&e.element.scrollIntoView&&e.element.scrollIntoView({behavior:"smooth",block:"nearest",inline:"start"})}function T(){m.parentNode&&m.parentNode.removeChild(m),l.table.rowManager.element.removeEventListener("scroll",z)}function z(){T(),n()}return m.classList.add("tabulator-edit-select-list"),m.addEventListener("mousedown",(function(e){g=!1,setTimeout((function(){g=!0}),10)})),h.addEventListener("keydown",(function(e){var t;switch(e.keyCode){case 38:t=p.indexOf(f),("editor"==c||"hybrid"==c&&t)&&(e.stopImmediatePropagation(),e.stopPropagation(),e.preventDefault(),D(t>0&&p[t-1]));break;case 40:t=p.indexOf(f),("editor"==c||"hybrid"==c&&t'):("ie"==s.table.browser?t.setAttribute("class","tabulator-star-inactive"):t.classList.replace("tabulator-star-active","tabulator-star-inactive"),t.innerHTML='')}))}function f(e){var t=document.createElement("span"),i=m.cloneNode(!0);d.push(i),t.addEventListener("mouseenter",(function(t){t.stopPropagation(),t.stopImmediatePropagation(),p(e)})),t.addEventListener("mousemove",(function(e){e.stopPropagation(),e.stopImmediatePropagation()})),t.addEventListener("click",(function(t){t.stopPropagation(),t.stopImmediatePropagation(),o(e),l.blur()})),t.appendChild(i),h.appendChild(t)}function g(e){r=e,p(e)}if(l.style.whiteSpace="nowrap",l.style.overflow="hidden",l.style.textOverflow="ellipsis",h.style.verticalAlign="middle",h.style.display="inline-block",h.style.padding="4px",m.setAttribute("width",c),m.setAttribute("height",c),m.setAttribute("viewBox","0 0 512 512"),m.setAttribute("xml:space","preserve"),m.style.padding="0 1px",a.elementAttributes&&"object"==t(a.elementAttributes))for(var v in a.elementAttributes)"+"==v.charAt(0)?(v=v.slice(1),h.setAttribute(v,h.getAttribute(v)+a.elementAttributes["+"+v])):h.setAttribute(v,a.elementAttributes[v]);for(var b=1;b<=u;b++)f(b);return p(r=Math.min(parseInt(r),u)),h.addEventListener("mousemove",(function(e){p(0)})),h.addEventListener("click",(function(e){o(0)})),l.addEventListener("blur",(function(e){n()})),l.addEventListener("keydown",(function(e){switch(e.keyCode){case 39:g(r+1);break;case 37:g(r-1);break;case 13:o(r);break;case 27:n()}})),h},progress:function(e,i,o,n,a){var s,l,r=e.getElement(),u=void 0===a.max?r.getElementsByTagName("div")[0].getAttribute("max")||100:a.max,c=void 0===a.min?r.getElementsByTagName("div")[0].getAttribute("min")||0:a.min,d=(u-c)/100,h=e.getValue()||0,m=document.createElement("div"),p=document.createElement("div");function f(){var e=window.getComputedStyle(r,null),t=d*Math.round(p.offsetWidth/((r.clientWidth-parseInt(e.getPropertyValue("padding-left"))-parseInt(e.getPropertyValue("padding-right")))/100))+c;o(t),r.setAttribute("aria-valuenow",t),r.setAttribute("aria-label",h)}if(m.style.position="absolute",m.style.right="0",m.style.top="0",m.style.bottom="0",m.style.width="5px",m.classList.add("tabulator-progress-handle"),p.style.display="inline-block",p.style.position="relative",p.style.height="100%",p.style.backgroundColor="#488CE9",p.style.maxWidth="100%",p.style.minWidth="0%",a.elementAttributes&&"object"==t(a.elementAttributes))for(var g in a.elementAttributes)"+"==g.charAt(0)?(g=g.slice(1),p.setAttribute(g,p.getAttribute(g)+a.elementAttributes["+"+g])):p.setAttribute(g,a.elementAttributes[g]);return r.style.padding="4px 4px",h=Math.min(parseFloat(h),u),h=Math.max(parseFloat(h),c),h=Math.round((h-c)/d),p.style.width=h+"%",r.setAttribute("aria-valuemin",c),r.setAttribute("aria-valuemax",u),p.appendChild(m),m.addEventListener("mousedown",(function(e){s=e.screenX,l=p.offsetWidth})),m.addEventListener("mouseover",(function(){m.style.cursor="ew-resize"})),r.addEventListener("mousemove",(function(e){s&&(p.style.width=l+e.screenX-s+"px")})),r.addEventListener("mouseup",(function(e){s&&(e.stopPropagation(),e.stopImmediatePropagation(),s=!1,l=!1,f())})),r.addEventListener("keydown",(function(e){switch(e.keyCode){case 39:e.preventDefault(),p.style.width=p.clientWidth+r.clientWidth/100+"px";break;case 37:e.preventDefault(),p.style.width=p.clientWidth-r.clientWidth/100+"px";break;case 9:case 13:f();break;case 27:n()}})),r.addEventListener("blur",(function(){n()})),p},tickCross:function(e,i,o,n,a){var s=e.getValue(),l=document.createElement("input"),r=a.tristate,u=void 0===a.indeterminateValue?null:a.indeterminateValue,c=!1;if(l.setAttribute("type","checkbox"),l.style.marginTop="5px",l.style.boxSizing="border-box",a.elementAttributes&&"object"==t(a.elementAttributes))for(var d in a.elementAttributes)"+"==d.charAt(0)?(d=d.slice(1),l.setAttribute(d,l.getAttribute(d)+a.elementAttributes["+"+d])):l.setAttribute(d,a.elementAttributes[d]);function h(e){return r?e?c?u:l.checked:l.checked&&!c?(l.checked=!1,l.indeterminate=!0,c=!0,u):(c=!1,l.checked):l.checked}return l.value=s,!r||void 0!==s&&s!==u&&""!==s||(c=!0,l.indeterminate=!0),"firefox"!=this.table.browser&&i((function(){l.focus({preventScroll:!0})})),l.checked=!0===s||"true"===s||"True"===s||1===s,i((function(){l.focus()})),l.addEventListener("change",(function(e){o(h())})),l.addEventListener("blur",(function(e){o(h(!0))})),l.addEventListener("keydown",(function(e){13==e.keyCode&&o(h()),27==e.keyCode&&n()})),l}},X=function(e){s(n,e);var i=d(n);function n(e){var t;return o(this,n),(t=i.call(this,e)).currentCell=!1,t.mouseClick=!1,t.recursionBlock=!1,t.invalidEdit=!1,t.editedCells=[],t}return a(n,[{key:"initializeColumn",value:function(e){var i={editor:!1,blocked:!1,check:e.definition.editable,params:e.definition.editorParams||{}};switch(t(e.definition.editor)){case"string":n.editors[e.definition.editor]?i.editor=n.editors[e.definition.editor]:console.warn("Editor Error - No such editor found: ",e.definition.editor);break;case"function":i.editor=e.definition.editor;break;case"boolean":!0===e.definition.editor&&("function"!=typeof e.definition.formatter?n.editors[e.definition.formatter]?i.editor=n.editors[e.definition.formatter]:i.editor=n.editors.input:console.warn("Editor Error - Cannot auto lookup editor for a custom formatter: ",e.definition.formatter))}i.editor&&(e.modules.edit=i)}},{key:"getCurrentCell",value:function(){return!!this.currentCell&&this.currentCell.getComponent()}},{key:"clearEditor",value:function(e){var t,i=this.currentCell;if(this.invalidEdit=!1,i){for(this.currentCell=!1,t=i.getElement(),e?i.validate():t.classList.remove("tabulator-validation-fail"),t.classList.remove("tabulator-editing");t.firstChild;)t.removeChild(t.firstChild);i.row.getElement().classList.remove("tabulator-row-editing")}}},{key:"cancelEdit",value:function(){if(this.currentCell){var e=this.currentCell,t=this.currentCell.getComponent();this.clearEditor(!0),e.setValueActual(e.getValue()),e.cellRendered(),("textarea"==e.column.definition.editor||e.column.definition.variableHeight)&&e.row.normalizeHeight(!0),e.column.cellEvents.cellEditCancelled&&e.column.cellEvents.cellEditCancelled.call(this.table,t),this.table.options.cellEditCancelled.call(this.table,t)}}},{key:"bindEditor",value:function(e){var t=this,i=e.getElement(!0);i.setAttribute("tabindex",0),i.addEventListener("click",(function(e){i.classList.contains("tabulator-editing")||i.focus({preventScroll:!0})})),i.addEventListener("mousedown",(function(e){2===e.button?e.preventDefault():t.mouseClick=!0})),i.addEventListener("focus",(function(i){t.recursionBlock||t.edit(e,i,!1)}))}},{key:"focusCellNoEvent",value:function(e,t){this.recursionBlock=!0,t&&"ie"===this.table.browser||e.getElement().focus({preventScroll:!0}),this.recursionBlock=!1}},{key:"editCell",value:function(e,t){this.focusCellNoEvent(e),this.edit(e,!1,t)}},{key:"focusScrollAdjust",value:function(e){if("virtual"==this.table.rowManager.getRenderMode()){var t=this.table.rowManager.element.scrollTop,i=this.table.rowManager.element.clientHeight+this.table.rowManager.element.scrollTop,o=e.row.getElement();o.offsetTop;o.offsetTopi&&(this.table.rowManager.element.scrollTop+=o.offsetTop+o.offsetHeight-i);var n=this.table.rowManager.element.scrollLeft,a=this.table.rowManager.element.clientWidth+this.table.rowManager.element.scrollLeft,s=e.getElement();s.offsetLeft;this.table.modExists("frozenColumns")&&(n+=parseInt(this.table.modules.frozenColumns.leftMargin),a-=parseInt(this.table.modules.frozenColumns.rightMargin)),this.table.options.virtualDomHoz&&(n-=parseInt(this.table.vdomHoz.vDomPadLeft),a-=parseInt(this.table.vdomHoz.vDomPadLeft)),s.offsetLefta&&(this.table.rowManager.element.scrollLeft+=s.offsetLeft+s.offsetWidth-a)}}},{key:"edit",value:function(e,i,o){var n,a,s,l=this,r=!0,u=function(){},c=e.getElement();if(!this.currentCell){if(e.column.modules.edit.blocked)return this.mouseClick=!1,c.blur(),!1;switch(i&&i.stopPropagation(),t(e.column.modules.edit.check)){case"function":r=e.column.modules.edit.check(e.getComponent());break;case"boolean":r=e.column.modules.edit.check}if(r||o){if(l.cancelEdit(),l.currentCell=e,this.focusScrollAdjust(e),a=e.getComponent(),this.mouseClick&&(this.mouseClick=!1,e.column.cellEvents.cellClick&&e.column.cellEvents.cellClick.call(this.table,i,a)),e.column.cellEvents.cellEditing&&e.column.cellEvents.cellEditing.call(this.table,a),l.table.options.cellEditing.call(this.table,a),s="function"==typeof e.column.modules.edit.params?e.column.modules.edit.params(a):e.column.modules.edit.params,!1===(n=e.column.modules.edit.editor.call(l,a,(function(e){u=e}),(function(t){if(l.currentCell===e){var i=!0;return e.column.modules.validate&&l.table.modExists("validate")&&"manual"!=l.table.options.validationMode&&(i=l.table.modules.validate.validate(e.column.modules.validate,e,t)),!0===i||"highlight"===l.table.options.validationMode?(l.clearEditor(),e.modules.edit||(e.modules.edit={}),e.modules.edit.edited=!0,-1==l.editedCells.indexOf(e)&&l.editedCells.push(e),e.setValue(t,!0),l.table.options.dataTree&&l.table.modExists("dataTree")&&l.table.modules.dataTree.checkForRestyle(e),!0===i||(c.classList.add("tabulator-validation-fail"),l.table.options.validationFailed.call(l.table,e.getComponent(),t,i),!1)):(l.invalidEdit=!0,c.classList.add("tabulator-validation-fail"),l.focusCellNoEvent(e,!0),u(),l.table.options.validationFailed.call(l.table,e.getComponent(),t,i),!1)}}),(function(){l.currentCell===e&&(l.cancelEdit(),l.table.options.dataTree&&l.table.modExists("dataTree")&&l.table.modules.dataTree.checkForRestyle(e))}),s)))return c.blur(),!1;if(!(n instanceof Node))return console.warn("Edit Error - Editor should return an instance of Node, the editor returned:",n),c.blur(),!1;for(c.classList.add("tabulator-editing"),e.row.getElement().classList.add("tabulator-row-editing");c.firstChild;)c.removeChild(c.firstChild);c.appendChild(n),u();for(var d=c.children,h=0;h46){if(s>=i.length)return t.preventDefault(),t.stopPropagation(),!1;switch(i[s]){case o:if(l.toUpperCase()==l.toLowerCase())return t.preventDefault(),t.stopPropagation(),!1;break;case n:if(isNaN(l))return t.preventDefault(),t.stopPropagation(),!1;break;case a:break;default:if(l!==i[s])return t.preventDefault(),t.stopPropagation(),!1}}})),e.addEventListener("keyup",(function(i){i.keyCode>46&&t.maskAutoFill&&s(e.value.length)})),e.placeholder||(e.placeholder=i),t.maskAutoFill&&s(e.value.length)}},{key:"getEditedCells",value:function(){var e=[];return this.editedCells.forEach((function(t){e.push(t.getComponent())})),e}},{key:"clearEdited",value:function(e){var t;e.modules.edit&&e.modules.edit.edited&&(e.modules.edit.edited=!1,e.modules.validate&&(e.modules.validate.invalid=!1)),(t=this.editedCells.indexOf(e))>-1&&this.editedCells.splice(t,1)}}]),n}(R);X.moduleName="edit",X.editors=U;var q=function e(t,i,n,a){o(this,e),this.type=t,this.columns=i,this.component=n||!1,this.indent=a||0},Y=function e(t,i,n,a,s){o(this,e),this.value=t,this.component=i||!1,this.width=n,this.height=a,this.depth=s},K=function(e){s(l,e);var n=d(l);function l(e){var t;return o(this,l),(t=n.call(this,e)).config={},t.cloneTableStyle=!0,t.colVisProp="",t}return a(l,[{key:"generateExportList",value:function(e,t,i,o){this.cloneTableStyle=t,this.config=e||{},this.colVisProp=o;var n=!1!==this.config.columnHeaders?this.headersToExportRows(this.generateColumnGroupHeaders()):[],a=this.bodyToExportRows(this.rowLookup(i));return n.concat(a)}},{key:"genereateTable",value:function(e,t,i,o){var n=this.generateExportList(e,t,i,o);return this.genereateTableElement(n)}},{key:"rowLookup",value:function(e){var t=this,i=[];if("function"==typeof e)e.call(this.table).forEach((function(e){(e=t.table.rowManager.findRow(e))&&i.push(e)}));else switch(e){case!0:case"visible":i=this.table.rowManager.getVisibleRows(!0);break;case"all":i=this.table.rowManager.rows;break;case"selected":i=this.table.modules.selectRow.selectedRows;break;case"active":default:i=this.table.options.pagination?this.table.rowManager.getDisplayRows(this.table.rowManager.displayRows.length-2):this.table.rowManager.getDisplayRows()}return Object.assign([],i)}},{key:"generateColumnGroupHeaders",value:function(){var e=this,t=[];return(!1!==this.config.columnGroups?this.table.columnManager.columns:this.table.columnManager.columnsByIndex).forEach((function(i){var o=e.processColumnGroup(i);o&&t.push(o)})),t}},{key:"processColumnGroup",value:function(e){var t=this,i=e.columns,o=0,n={title:e.definition["title"+(this.colVisProp.charAt(0).toUpperCase()+this.colVisProp.slice(1))]||e.definition.title,column:e,depth:1};if(i.length){if(n.subGroups=[],n.width=0,i.forEach((function(e){var i=t.processColumnGroup(e);i&&(n.width+=i.width,n.subGroups.push(i),i.depth>o&&(o=i.depth))})),n.depth+=o,!n.width)return!1}else{if(!this.columnVisCheck(e))return!1;n.width=1}return n}},{key:"columnVisCheck",value:function(e){return!1!==e.definition[this.colVisProp]&&(e.visible||!e.visible&&e.definition[this.colVisProp])}},{key:"headersToExportRows",value:function(e){var t=[],i=0,o=[];function n(e,o){var a=i-o;if(void 0===t[o]&&(t[o]=[]),e.height=e.subGroups?1:a-e.depth+1,t[o].push(e),e.height>1)for(var s=1;s1)for(var l=1;li&&(i=e.depth)})),e.forEach((function(e){n(e,0)})),t.forEach((function(e){var t=[];e.forEach((function(e){e?t.push(new Y(e.title,e.column.getComponent(),e.width,e.height,e.depth)):t.push(null)})),o.push(new q("header",t))})),o}},{key:"bodyToExportRows",value:function(e){var t=this,i=[],o=[];return this.table.columnManager.columnsByIndex.forEach((function(e){t.columnVisCheck(e)&&i.push(e.getComponent())})),!1!==this.config.columnCalcs&&this.table.modExists("columnCalcs")&&(this.table.modules.columnCalcs.topInitialized&&e.unshift(this.table.modules.columnCalcs.topRow),this.table.modules.columnCalcs.botInitialized&&e.push(this.table.modules.columnCalcs.botRow)),(e=e.filter((function(e){switch(e.type){case"group":return!1!==t.config.rowGroups;case"calc":return!1!==t.config.columnCalcs;case"row":return!(t.table.options.dataTree&&!1===t.config.dataTree&&e.modules.dataTree.parent)}return!0}))).forEach((function(e,n){var a=e.getData(t.colVisProp),s=[],l=0;switch(e.type){case"group":l=e.level,s.push(new Y(e.key,e.getComponent(),i.length,1));break;case"calc":case"row":i.forEach((function(e){s.push(new Y(e._column.getFieldValue(a),e,1,1))})),t.table.options.dataTree&&!1!==t.config.dataTree&&(l=e.modules.dataTree.index)}o.push(new q(e.type,s,e.getComponent(),l))})),o}},{key:"genereateTableElement",value:function(e){var t=this,i=document.createElement("table"),o=document.createElement("thead"),n=document.createElement("tbody"),a=this.lookupTableStyles(),s=this.table.options["rowFormatter"+(this.colVisProp.charAt(0).toUpperCase()+this.colVisProp.slice(1))],l={};return l.rowFormatter=null!==s?s:this.table.options.rowFormatter,this.table.options.dataTree&&!1!==this.config.dataTree&&this.table.modExists("columnCalcs")&&(l.treeElementField=this.table.modules.dataTree.elementField),l.groupHeader=this.table.options["groupHeader"+(this.colVisProp.charAt(0).toUpperCase()+this.colVisProp.slice(1))],l.groupHeader&&!Array.isArray(l.groupHeader)&&(l.groupHeader=[l.groupHeader]),i.classList.add("tabulator-print-table"),this.mapElementStyles(this.table.columnManager.getHeadersElement(),o,["border-top","border-left","border-right","border-bottom","background-color","color","font-weight","font-family","font-size"]),e.length>1e3&&console.warn("It may take a long time to render an HTML table with more than 1000 rows"),e.forEach((function(e,i){switch(e.type){case"header":o.appendChild(t.genereateHeaderElement(e,l,a));break;case"group":n.appendChild(t.genereateGroupElement(e,l,a));break;case"calc":n.appendChild(t.genereateCalcElement(e,l,a));break;case"row":var s=t.genereateRowElement(e,l,a);t.mapElementStyles(i%2&&a.evenRow?a.evenRow:a.oddRow,s,["border-top","border-left","border-right","border-bottom","color","font-weight","font-family","font-size","background-color"]),n.appendChild(s)}})),o.innerHTML&&i.appendChild(o),i.appendChild(n),this.mapElementStyles(this.table.element,i,["border-top","border-left","border-right","border-bottom"]),i}},{key:"lookupTableStyles",value:function(){var e={};return this.cloneTableStyle&&window.getComputedStyle&&(e.oddRow=this.table.element.querySelector(".tabulator-row-odd:not(.tabulator-group):not(.tabulator-calcs)"),e.evenRow=this.table.element.querySelector(".tabulator-row-even:not(.tabulator-group):not(.tabulator-calcs)"),e.calcRow=this.table.element.querySelector(".tabulator-row.tabulator-calcs"),e.firstRow=this.table.element.querySelector(".tabulator-row:not(.tabulator-group):not(.tabulator-calcs)"),e.firstGroup=this.table.element.getElementsByClassName("tabulator-group")[0],e.firstRow&&(e.styleCells=e.firstRow.getElementsByClassName("tabulator-cell"),e.firstCell=e.styleCells[0],e.lastCell=e.styleCells[e.styleCells.length-1])),e}},{key:"genereateHeaderElement",value:function(e,t,i){var o=this,n=document.createElement("tr");return e.columns.forEach((function(e){if(e){var t=document.createElement("th"),i=e.component._column.definition.cssClass?e.component._column.definition.cssClass.split(" "):[];t.colSpan=e.width,t.rowSpan=e.height,t.innerHTML=e.value,o.cloneTableStyle&&(t.style.boxSizing="border-box"),i.forEach((function(e){t.classList.add(e)})),o.mapElementStyles(e.component.getElement(),t,["text-align","border-top","border-left","border-right","border-bottom","background-color","color","font-weight","font-family","font-size"]),o.mapElementStyles(e.component._column.contentElement,t,["padding-top","padding-left","padding-right","padding-bottom"]),e.component._column.visible?o.mapElementStyles(e.component.getElement(),t,["width"]):e.component._column.definition.width&&(t.style.width=e.component._column.definition.width+"px"),e.component._column.parent&&o.mapElementStyles(e.component._column.parent.groupElement,t,["border-top"]),n.appendChild(t)}})),n}},{key:"genereateGroupElement",value:function(e,t,i){var o=document.createElement("tr"),n=document.createElement("td"),a=e.columns[0];return o.classList.add("tabulator-print-table-row"),t.groupHeader&&t.groupHeader[e.indent]?a.value=t.groupHeader[e.indent](a.value,e.component._group.getRowCount(),e.component._group.getData(),e.component):!1===t.groupHeader?a.value=a.value:a.value=e.component._group.generator(a.value,e.component._group.getRowCount(),e.component._group.getData(),e.component),n.colSpan=a.width,n.innerHTML=a.value,o.classList.add("tabulator-print-table-group"),o.classList.add("tabulator-group-level-"+e.indent),a.component.isVisible()&&o.classList.add("tabulator-group-visible"),this.mapElementStyles(i.firstGroup,o,["border-top","border-left","border-right","border-bottom","color","font-weight","font-family","font-size","background-color"]),this.mapElementStyles(i.firstGroup,n,["padding-top","padding-left","padding-right","padding-bottom"]),o.appendChild(n),o}},{key:"genereateCalcElement",value:function(e,t,i){var o=this.genereateRowElement(e,t,i);return o.classList.add("tabulator-print-table-calcs"),this.mapElementStyles(i.calcRow,o,["border-top","border-left","border-right","border-bottom","color","font-weight","font-family","font-size","background-color"]),o}},{key:"genereateRowElement",value:function(e,o,n){var a=this,s=document.createElement("tr");return s.classList.add("tabulator-print-table-row"),e.columns.forEach((function(l){if(l){var r=document.createElement("td"),u=l.component._column,c=l.value,d={modules:{},getValue:function(){return c},getField:function(){return u.definition.field},getElement:function(){return r},getColumn:function(){return u.getComponent()},getData:function(){return e.component.getData()},getRow:function(){return e.component},getComponent:function(){return d},column:u};if((u.definition.cssClass?u.definition.cssClass.split(" "):[]).forEach((function(e){r.classList.add(e)})),a.table.modExists("format")&&!1!==a.config.formatCells)c=a.table.modules.format.formatExportValue(d,a.colVisProp);else switch(t(c)){case"object":c=JSON.stringify(c);break;case"undefined":case"null":c="";break;default:c=c}c instanceof Node?r.appendChild(c):r.innerHTML=c,n.firstCell&&(a.mapElementStyles(n.firstCell,r,["padding-top","padding-left","padding-right","padding-bottom","border-top","border-left","border-right","border-bottom","color","font-weight","font-family","font-size"]),u.definition.align&&(r.style.textAlign=u.definition.align)),a.table.options.dataTree&&!1!==a.config.dataTree&&(o.treeElementField&&o.treeElementField==u.field||!o.treeElementField&&0==i)&&(e.component._row.modules.dataTree.controlEl&&r.insertBefore(e.component._row.modules.dataTree.controlEl.cloneNode(!0),r.firstChild),e.component._row.modules.dataTree.branchEl&&r.insertBefore(e.component._row.modules.dataTree.branchEl.cloneNode(!0),r.firstChild)),s.appendChild(r),d.modules.format&&d.modules.format.renderedCallback&&d.modules.format.renderedCallback(),o.rowFormatter&&!1!==a.config.formatCells&&o.rowFormatter(e.component)}})),s}},{key:"genereateHTMLTable",value:function(e){var t=document.createElement("div");return t.appendChild(this.genereateTableElement(e)),t.innerHTML}},{key:"getHtml",value:function(e,t,i,o){var n=this.generateExportList(i||this.table.options.htmlOutputConfig,t,e,o||"htmlOutput");return this.genereateHTMLTable(n)}},{key:"mapElementStyles",value:function(e,t,i){if(this.cloneTableStyle&&e&&t){var o={"background-color":"backgroundColor",color:"fontColor",width:"width","font-weight":"fontWeight","font-family":"fontFamily","font-size":"fontSize","text-align":"textAlign","border-top":"borderTop","border-left":"borderLeft","border-right":"borderRight","border-bottom":"borderBottom","padding-top":"paddingTop","padding-left":"paddingLeft","padding-right":"paddingRight","padding-bottom":"paddingBottom"};if(window.getComputedStyle){var n=window.getComputedStyle(e);i.forEach((function(e){t.style[o[e]]=n.getPropertyValue(e)}))}}}}]),l}(R);K.moduleName="export";var J={"=":function(e,t,i,o){return t==e},"<":function(e,t,i,o){return t":function(e,t,i,o){return t>e},">=":function(e,t,i,o){return t>=e},"!=":function(e,t,i,o){return t!=e},regex:function(e,t,i,o){return"string"==typeof e&&(e=new RegExp(e)),e.test(t)},like:function(e,t,i,o){return null==e?t===e:null!=t&&String(t).toLowerCase().indexOf(e.toLowerCase())>-1},keywords:function(e,t,i,o){var n=e.toLowerCase().split(void 0===o.separator?" ":o.separator),a=String(null==t?"":t).toLowerCase(),s=[];return n.forEach((function(e){a.includes(e)&&s.push(!0)})),o.matchAll?s.length===n.length:!!s.length},starts:function(e,t,i,o){return null==e?t===e:null!=t&&String(t).toLowerCase().startsWith(e.toLowerCase())},ends:function(e,t,i,o){return null==e?t===e:null!=t&&String(t).toLowerCase().endsWith(e.toLowerCase())},in:function(e,t,i,o){return Array.isArray(e)?!e.length||e.indexOf(t)>-1:(console.warn("Filter Error - filter value is not an array:",e),!1)}},$=function(e){s(n,e);var i=d(n);function n(e){var t;return o(this,n),(t=i.call(this,e)).filterList=[],t.headerFilters={},t.headerFilterColumns=[],t.prevHeaderFilterChangeCheck="",t.prevHeaderFilterChangeCheck="{}",t.changed=!1,t}return a(n,[{key:"initializeColumn",value:function(e,i){var o=this,a=e.getField();e.modules.filter={success:function(i){var s,l="input"==e.modules.filter.tagType&&"text"==e.modules.filter.attrType||"textarea"==e.modules.filter.tagType?"partial":"match",r="",u="";if(void 0===e.modules.filter.prevSuccess||e.modules.filter.prevSuccess!==i){if(e.modules.filter.prevSuccess=i,e.modules.filter.emptyFunc(i))delete o.headerFilters[a];else{switch(e.modules.filter.value=i,t(e.definition.headerFilterFunc)){case"string":n.filters[e.definition.headerFilterFunc]?(r=e.definition.headerFilterFunc,s=function(t){var o=e.definition.headerFilterFuncParams||{},a=e.getFieldValue(t);return o="function"==typeof o?o(i,a,t):o,n.filters[e.definition.headerFilterFunc](i,a,t,o)}):console.warn("Header Filter Error - Matching filter function not found: ",e.definition.headerFilterFunc);break;case"function":r=s=function(t){var o=e.definition.headerFilterFuncParams||{},n=e.getFieldValue(t);return o="function"==typeof o?o(i,n,t):o,e.definition.headerFilterFunc(i,n,t,o)}}if(!s)switch(l){case"partial":s=function(t){var o=e.getFieldValue(t);return null!=o&&String(o).toLowerCase().indexOf(String(i).toLowerCase())>-1},r="like";break;default:s=function(t){return e.getFieldValue(t)==i},r="="}o.headerFilters[a]={value:i,func:s,type:r,params:{}}}u=JSON.stringify(o.headerFilters),o.prevHeaderFilterChangeCheck!==u&&(o.prevHeaderFilterChangeCheck=u,o.changed=!0,o.table.rowManager.filterRefresh())}return!0},attrType:!1,tagType:!1,emptyFunc:!1},this.generateHeaderFilterElement(e)}},{key:"generateHeaderFilterElement",value:function(e,i,o){var n,a,s,l,r,u,c,d=this,h=this,m=e.modules.filter.success,p=e.getField();if(e.modules.filter.headerElement&&e.modules.filter.headerElement.parentNode&&e.contentElement.removeChild(e.modules.filter.headerElement.parentNode),p){switch(e.modules.filter.emptyFunc=e.definition.headerFilterEmptyCheck||function(e){return!e&&"0"!==e&&0!==e},(n=document.createElement("div")).classList.add("tabulator-header-filter"),t(e.definition.headerFilter)){case"string":h.table.modules.edit.editors[e.definition.headerFilter]?(a=h.table.modules.edit.editors[e.definition.headerFilter],"tick"!==e.definition.headerFilter&&"tickCross"!==e.definition.headerFilter||e.definition.headerFilterEmptyCheck||(e.modules.filter.emptyFunc=function(e){return!0!==e&&!1!==e})):console.warn("Filter Error - Cannot build header filter, No such editor found: ",e.definition.editor);break;case"function":a=e.definition.headerFilter;break;case"boolean":e.modules.edit&&e.modules.edit.editor?a=e.modules.edit.editor:e.definition.formatter&&h.table.modules.edit.editors[e.definition.formatter]?(a=h.table.modules.edit.editors[e.definition.formatter],"tick"!==e.definition.formatter&&"tickCross"!==e.definition.formatter||e.definition.headerFilterEmptyCheck||(e.modules.filter.emptyFunc=function(e){return!0!==e&&!1!==e})):a=h.table.modules.edit.editors.input}if(a){if(l={getValue:function(){return void 0!==i?i:""},getField:function(){return e.definition.field},getElement:function(){return n},getColumn:function(){return e.getComponent()},getRow:function(){return{normalizeHeight:function(){}}}},c="function"==typeof(c=e.definition.headerFilterParams||{})?c.call(h.table):c,!(s=a.call(this.table.modules.edit,l,(function(){}),m,(function(){}),c)))return void console.warn("Filter Error - Cannot add filter to "+p+" column, editor returned a value of false");if(!(s instanceof Node))return void console.warn("Filter Error - Cannot add filter to "+p+" column, editor should return an instance of Node, the editor returned:",s);p?h.table.modules.localize.bind("headerFilters|columns|"+e.definition.field,(function(e){s.setAttribute("placeholder",void 0!==e&&e?e:h.table.modules.localize.getText("headerFilters|default"))})):h.table.modules.localize.bind("headerFilters|default",(function(e){s.setAttribute("placeholder",void 0!==h.column.definition.headerFilterPlaceholder&&h.column.definition.headerFilterPlaceholder?h.column.definition.headerFilterPlaceholder:e)})),s.addEventListener("click",(function(e){e.stopPropagation(),s.focus()})),s.addEventListener("focus",(function(e){var t=d.table.columnManager.element.scrollLeft;t!==d.table.rowManager.element.scrollLeft&&(d.table.rowManager.scrollHorizontal(t),d.table.columnManager.scrollHorizontal(t))})),r=!1,u=function(e){r&&clearTimeout(r),r=setTimeout((function(){m(s.value)}),h.table.options.headerFilterLiveFilterDelay)},e.modules.filter.headerElement=s,e.modules.filter.attrType=s.hasAttribute("type")?s.getAttribute("type").toLowerCase():"",e.modules.filter.tagType=s.tagName.toLowerCase(),!1!==e.definition.headerFilterLiveFilter&&("autocomplete"!==e.definition.headerFilter&&"tickCross"!==e.definition.headerFilter&&("autocomplete"!==e.definition.editor&&"tickCross"!==e.definition.editor||!0!==e.definition.headerFilter)&&(s.addEventListener("keyup",u),s.addEventListener("search",u),"number"==e.modules.filter.attrType&&s.addEventListener("change",(function(e){m(s.value)})),"text"==e.modules.filter.attrType&&"ie"!==this.table.browser&&s.setAttribute("type","search")),"input"!=e.modules.filter.tagType&&"select"!=e.modules.filter.tagType&&"textarea"!=e.modules.filter.tagType||s.addEventListener("mousedown",(function(e){e.stopPropagation()}))),n.appendChild(s),e.contentElement.appendChild(n),o||h.headerFilterColumns.push(e)}}else console.warn("Filter Error - Cannot add header filter, column has no field set:",e.definition.title)}},{key:"hideHeaderFilterElements",value:function(){this.headerFilterColumns.forEach((function(e){e.modules.filter&&e.modules.filter.headerElement&&(e.modules.filter.headerElement.style.display="none")}))}},{key:"showHeaderFilterElements",value:function(){this.headerFilterColumns.forEach((function(e){e.modules.filter&&e.modules.filter.headerElement&&(e.modules.filter.headerElement.style.display="")}))}},{key:"setHeaderFilterFocus",value:function(e){e.modules.filter&&e.modules.filter.headerElement?e.modules.filter.headerElement.focus():console.warn("Column Filter Focus Error - No header filter set on column:",e.getField())}},{key:"getHeaderFilterValue",value:function(e){if(e.modules.filter&&e.modules.filter.headerElement)return e.modules.filter.headerElement.value;console.warn("Column Filter Error - No header filter set on column:",e.getField())}},{key:"setHeaderFilterValue",value:function(e,t){e&&(e.modules.filter&&e.modules.filter.headerElement?(this.generateHeaderFilterElement(e,t,!0),e.modules.filter.success(t)):console.warn("Column Filter Error - No header filter set on column:",e.getField()))}},{key:"reloadHeaderFilter",value:function(e){e&&(e.modules.filter&&e.modules.filter.headerElement?this.generateHeaderFilterElement(e,e.modules.filter.value,!0):console.warn("Column Filter Error - No header filter set on column:",e.getField()))}},{key:"hasChanged",value:function(){var e=this.changed;return this.changed=!1,e}},{key:"setFilter",value:function(e,t,i,o){this.filterList=[],Array.isArray(e)||(e=[{field:e,type:t,value:i,params:o}]),this.addFilter(e)}},{key:"addFilter",value:function(e,t,i,o){var n=this;Array.isArray(e)||(e=[{field:e,type:t,value:i,params:o}]),e.forEach((function(e){(e=n.findFilter(e))&&(n.filterList.push(e),n.changed=!0)})),this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.filter&&this.table.modules.persistence.save("filter")}},{key:"findFilter",value:function(e){var t;if(Array.isArray(e))return this.findSubFilters(e);var i=!1;return"function"==typeof e.field?i=function(t){return e.field(t,e.type||{})}:n.filters[e.type]?i=(t=this.table.columnManager.getColumnByField(e.field))?function(i){return n.filters[e.type](e.value,t.getFieldValue(i),i,e.params||{})}:function(t){return n.filters[e.type](e.value,t[e.field],t,e.params||{})}:console.warn("Filter Error - No such filter type found, ignoring: ",e.type),e.func=i,!!e.func&&e}},{key:"findSubFilters",value:function(e){var t=this,i=[];return e.forEach((function(e){(e=t.findFilter(e))&&i.push(e)})),!!i.length&&i}},{key:"getFilters",value:function(e,t){var i=[];return e&&(i=this.getHeaderFilters()),t&&i.forEach((function(e){"function"==typeof e.type&&(e.type="function")})),i=i.concat(this.filtersToArray(this.filterList,t))}},{key:"filtersToArray",value:function(e,t){var i=this,o=[];return e.forEach((function(e){var n;Array.isArray(e)?o.push(i.filtersToArray(e,t)):(n={field:e.field,type:e.type,value:e.value},t&&"function"==typeof n.type&&(n.type="function"),o.push(n))})),o}},{key:"getHeaderFilters",value:function(){var e=[];for(var t in this.headerFilters)e.push({field:t,type:this.headerFilters[t].type,value:this.headerFilters[t].value});return e}},{key:"removeFilter",value:function(e,i,o){var n=this;Array.isArray(e)||(e=[{field:e,type:i,value:o}]),e.forEach((function(e){var i=-1;(i="object"==t(e.field)?n.filterList.findIndex((function(t){return e===t})):n.filterList.findIndex((function(t){return e.field===t.field&&e.type===t.type&&e.value===t.value})))>-1?(n.filterList.splice(i,1),n.changed=!0):console.warn("Filter Error - No matching filter type found, ignoring: ",e.type)})),this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.filter&&this.table.modules.persistence.save("filter")}},{key:"clearFilter",value:function(e){this.filterList=[],e&&this.clearHeaderFilter(),this.changed=!0,this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.filter&&this.table.modules.persistence.save("filter")}},{key:"clearHeaderFilter",value:function(){var e=this;this.headerFilters={},e.prevHeaderFilterChangeCheck="{}",this.headerFilterColumns.forEach((function(t){void 0!==t.modules.filter.value&&delete t.modules.filter.value,t.modules.filter.prevSuccess=void 0,e.reloadHeaderFilter(t)})),this.changed=!0}},{key:"search",value:function(e,t,i,o){var n=this,a=[],s=[];return Array.isArray(t)||(t=[{field:t,type:i,value:o}]),t.forEach((function(e){(e=n.findFilter(e))&&s.push(e)})),this.table.rowManager.rows.forEach((function(t){var i=!0;s.forEach((function(e){n.filterRecurse(e,t.getData())||(i=!1)})),i&&a.push("data"===e?t.getData("data"):t.getComponent())})),a}},{key:"filter",value:function(e,t){var i=this,o=[],n=[];return i.table.options.dataFiltering&&i.table.options.dataFiltering.call(i.table,i.getFilters()),i.table.options.ajaxFiltering||!i.filterList.length&&!Object.keys(i.headerFilters).length?o=e.slice(0):e.forEach((function(e){i.filterRow(e)&&o.push(e)})),i.table.options.dataFiltered&&(o.forEach((function(e){n.push(e.getComponent())})),i.table.options.dataFiltered.call(i.table,i.getFilters(),n)),o}},{key:"filterRow",value:function(e,t){var i=this,o=!0,n=e.getData();for(var a in i.filterList.forEach((function(e){i.filterRecurse(e,n)||(o=!1)})),i.headerFilters)i.headerFilters[a].func(n)||(o=!1);return o}},{key:"filterRecurse",value:function(e,t){var i=this,o=!1;return Array.isArray(e)?e.forEach((function(e){i.filterRecurse(e,t)&&(o=!0)})):o=e.func(t),o}}]),n}(R);$.moduleName="filter",$.filters=J;var Q={plaintext:function(e,t,i){return this.emptyToSpace(this.sanitizeHTML(e.getValue()))},html:function(e,t,i){return e.getValue()},textarea:function(e,t,i){return e.getElement().style.whiteSpace="pre-wrap",this.emptyToSpace(this.sanitizeHTML(e.getValue()))},money:function(e,t,i){var o,n,a,s,l=parseFloat(e.getValue()),r=t.decimal||".",u=t.thousand||",",c=t.symbol||"",d=!!t.symbolAfter,h=void 0!==t.precision?t.precision:2;if(isNaN(l))return this.emptyToSpace(this.sanitizeHTML(e.getValue()));for(o=!1!==h?l.toFixed(h):l,n=(o=String(o).split("."))[0],a=o.length>1?r+o[1]:"",s=/(\d+)(\d{3})/;s.test(n);)n=n.replace(s,"$1"+u+"$2");return d?n+a+c:c+n+a},link:function(e,i,o){var n=e.getValue(),a=i.urlPrefix||"",s=i.download,l=n,r=document.createElement("a");if(i.labelField&&(l=e.getData()[i.labelField]),i.label)switch(t(i.label)){case"string":l=i.label;break;case"function":l=i.label(e)}if(l){if(i.urlField&&(n=e.getData()[i.urlField]),i.url)switch(t(i.url)){case"string":n=i.url;break;case"function":n=i.url(e)}return r.setAttribute("href",a+n),i.target&&r.setAttribute("target",i.target),i.download&&(s="function"==typeof s?s(e):!0===s?"":s,r.setAttribute("download",s)),r.innerHTML=this.emptyToSpace(this.sanitizeHTML(l)),r}return" "},image:function(e,i,o){var n=document.createElement("img"),a=e.getValue();switch(i.urlPrefix&&(a=i.urlPrefix+e.getValue()),i.urlSuffix&&(a+=i.urlSuffix),n.setAttribute("src",a),t(i.height)){case"number":n.style.height=i.height+"px";break;case"string":n.style.height=i.height}switch(t(i.width)){case"number":n.style.width=i.width+"px";break;case"string":n.style.width=i.width}return n.addEventListener("load",(function(){e.getRow().normalizeHeight()})),n},tickCross:function(e,t,i){var o=e.getValue(),n=e.getElement(),a=t.allowEmpty,s=t.allowTruthy,l=void 0!==t.tickElement?t.tickElement:'',r=void 0!==t.crossElement?t.crossElement:'';return s&&o||!0===o||"true"===o||"True"===o||1===o||"1"===o?(n.setAttribute("aria-checked",!0),l||""):!a||"null"!==o&&""!==o&&null!=o?(n.setAttribute("aria-checked",!1),r||""):(n.setAttribute("aria-checked","mixed"),"")},datetime:function(e,t,i){var o=t.inputFormat||"YYYY-MM-DD hh:mm:ss",n=t.outputFormat||"DD/MM/YYYY hh:mm:ss",a=void 0!==t.invalidPlaceholder?t.invalidPlaceholder:"",s=e.getValue(),l=moment(s,o);return l.isValid()?t.timezone?l.tz(t.timezone).format(n):l.format(n):!0===a?s:"function"==typeof a?a(s):a},datetimediff:function(e,t,i){var o=t.inputFormat||"YYYY-MM-DD hh:mm:ss",n=void 0!==t.invalidPlaceholder?t.invalidPlaceholder:"",a=void 0!==t.suffix&&t.suffix,s=void 0!==t.unit?t.unit:void 0,l=void 0!==t.humanize&&t.humanize,r=void 0!==t.date?t.date:moment(),u=e.getValue(),c=moment(u,o);return c.isValid()?l?moment.duration(c.diff(r)).humanize(a):c.diff(r,s)+(a?" "+a:""):!0===n?u:"function"==typeof n?n(u):n},lookup:function(e,t,i){var o=e.getValue();return void 0===t[o]?(console.warn("Missing display value for "+o),o):t[o]},star:function(e,t,i){var o=e.getValue(),n=e.getElement(),a=t&&t.stars?t.stars:5,s=document.createElement("span"),l=document.createElementNS("http://www.w3.org/2000/svg","svg");s.style.verticalAlign="middle",l.setAttribute("width","14"),l.setAttribute("height","14"),l.setAttribute("viewBox","0 0 512 512"),l.setAttribute("xml:space","preserve"),l.style.padding="0 1px",o=o&&!isNaN(o)?parseInt(o):0,o=Math.max(0,Math.min(o,a));for(var r=1;r<=a;r++){var u=l.cloneNode(!0);u.innerHTML=r<=o?'':'',s.appendChild(u)}return n.style.whiteSpace="nowrap",n.style.overflow="hidden",n.style.textOverflow="ellipsis",n.setAttribute("aria-label",o),s},traffic:function(e,i,o){var n,a,s=this.sanitizeHTML(e.getValue())||0,l=document.createElement("span"),r=i&&i.max?i.max:100,u=i&&i.min?i.min:0,c=i&&void 0!==i.color?i.color:["red","orange","green"],d="#666666";if(!isNaN(s)&&void 0!==e.getValue()){switch(l.classList.add("tabulator-traffic-light"),a=parseFloat(s)<=r?parseFloat(s):r,a=parseFloat(a)>=u?parseFloat(a):u,n=(r-u)/100,a=Math.round((a-u)/n),t(c)){case"string":d=c;break;case"function":d=c(s);break;case"object":if(Array.isArray(c)){var h=100/c.length,m=Math.floor(a/h);m=Math.min(m,c.length-1),d=c[m=Math.max(m,0)];break}}return l.style.backgroundColor=d,l}},progress:function(e,i,o){var n,a,s,l,r,u=this.sanitizeHTML(e.getValue())||0,c=e.getElement(),d=i&&i.max?i.max:100,h=i&&i.min?i.min:0,m=i&&i.legendAlign?i.legendAlign:"center";switch(a=parseFloat(u)<=d?parseFloat(u):d,a=parseFloat(a)>=h?parseFloat(a):h,n=(d-h)/100,a=Math.round((a-h)/n),t(i.color)){case"string":s=i.color;break;case"function":s=i.color(u);break;case"object":if(Array.isArray(i.color)){var p=100/i.color.length,f=Math.floor(a/p);f=Math.min(f,i.color.length-1),f=Math.max(f,0),s=i.color[f];break}default:s="#2DC214"}switch(t(i.legend)){case"string":l=i.legend;break;case"function":l=i.legend(u);break;case"boolean":l=u;break;default:l=!1}switch(t(i.legendColor)){case"string":r=i.legendColor;break;case"function":r=i.legendColor(u);break;case"object":if(Array.isArray(i.legendColor)){p=100/i.legendColor.length,f=Math.floor(a/p);f=Math.min(f,i.legendColor.length-1),f=Math.max(f,0),r=i.legendColor[f]}break;default:r="#000"}c.style.minWidth="30px",c.style.position="relative",c.setAttribute("aria-label",a);var g=document.createElement("div");if(g.style.display="inline-block",g.style.position="relative",g.style.width=a+"%",g.style.backgroundColor=s,g.style.height="100%",g.setAttribute("data-max",d),g.setAttribute("data-min",h),l){var v=document.createElement("div");v.style.position="absolute",v.style.top="4px",v.style.left=0,v.style.textAlign=m,v.style.width="100%",v.style.color=r,v.innerHTML=l}return o((function(){if(!(e instanceof CellComponent)){var t=document.createElement("div");t.style.position="absolute",t.style.top="4px",t.style.bottom="4px",t.style.left="4px",t.style.right="4px",c.appendChild(t),c=t}c.appendChild(g),l&&c.appendChild(v)})),""},color:function(e,t,i){return e.getElement().style.backgroundColor=this.sanitizeHTML(e.getValue()),""},buttonTick:function(e,t,i){return''},buttonCross:function(e,t,i){return''},rownum:function(e,t,i){return this.table.rowManager.activeRows.indexOf(e.getRow()._getSelf())+1},handle:function(e,t,i){return e.getElement().classList.add("tabulator-row-handle"),"
"},responsiveCollapse:function(e,t,i){var o=document.createElement("div"),n=e.getRow()._row.modules.responsiveLayout;function a(e){var t=n.element;n.open=e,t&&(n.open?(o.classList.add("open"),t.style.display=""):(o.classList.remove("open"),t.style.display="none"))}return o.classList.add("tabulator-responsive-collapse-toggle"),o.innerHTML="+-",e.getElement().classList.add("tabulator-row-handle"),o.addEventListener("click",(function(e){e.stopImmediatePropagation(),a(!n.open)})),a(n.open),o},rowSelection:function(e,t,i){var o=this,n=document.createElement("input");if(n.type="checkbox",this.table.modExists("selectRow",!0))if(n.addEventListener("click",(function(e){e.stopPropagation()})),"function"==typeof e.getRow){var a=e.getRow();a instanceof RowComponent?(n.addEventListener("change",(function(e){a.toggleSelect()})),n.checked=a.isSelected&&a.isSelected(),this.table.modules.selectRow.registerRowSelectCheckbox(a,n)):n=""}else n.addEventListener("change",(function(e){o.table.modules.selectRow.selectedRows.length?o.table.deselectRow():o.table.selectRow(t.rowRange)})),this.table.modules.selectRow.registerHeaderSelectCheckbox(n);return n}},Z=function(e){s(n,e);var i=d(n);function n(){return o(this,n),i.apply(this,arguments)}return a(n,[{key:"initializeColumn",value:function(e){e.modules.format=this.lookupFormatter(e,""),void 0!==e.definition.formatterPrint&&(e.modules.format.print=this.lookupFormatter(e,"Print")),void 0!==e.definition.formatterClipboard&&(e.modules.format.clipboard=this.lookupFormatter(e,"Clipboard")),void 0!==e.definition.formatterHtmlOutput&&(e.modules.format.htmlOutput=this.lookupFormatter(e,"HtmlOutput"))}},{key:"lookupFormatter",value:function(e,i){var o={params:e.definition["formatter"+i+"Params"]||{}},a=e.definition["formatter"+i];switch(t(a)){case"string":n.formatters[a]?o.formatter=n.formatters[a]:(console.warn("Formatter Error - No such formatter found: ",a),o.formatter=n.formatters.plaintext);break;case"function":o.formatter=a;break;default:o.formatter=n.formatters.plaintext}return o}},{key:"cellRendered",value:function(e){e.modules.format&&e.modules.format.renderedCallback&&!e.modules.format.rendered&&(e.modules.format.renderedCallback(),e.modules.format.rendered=!0)}},{key:"formatValue",value:function(e){var t=e.getComponent(),i="function"==typeof e.column.modules.format.params?e.column.modules.format.params(t):e.column.modules.format.params;return e.column.modules.format.formatter.call(this,t,i,(function(t){e.modules.format||(e.modules.format={}),e.modules.format.renderedCallback=t,e.modules.format.rendered=!1}))}},{key:"formatExportValue",value:function(e,t){var i,o=e.column.modules.format[t];if(o){return i="function"==typeof o.params?o.params(component):o.params,o.formatter.call(this,e.getComponent(),i,(function(t){e.modules.format||(e.modules.format={}),e.modules.format.renderedCallback=t,e.modules.format.rendered=!1}))}return this.formatValue(e)}},{key:"sanitizeHTML",value:function(e){if(e){var t={"&":"&","<":"<",">":">",'"':""","'":"'","/":"/","`":"`","=":"="};return String(e).replace(/[&<>"'`=\/]/g,(function(e){return t[e]}))}return e}},{key:"emptyToSpace",value:function(e){return null==e||""===e?" ":e}},{key:"getFormatter",value:function(e){switch(t(e)){case"string":n.formatters[e]?e=n.formatters[e]:(console.warn("Formatter Error - No such formatter found: ",e),e=n.formatters.plaintext);break;case"function":e=e;break;default:e=n.formatters.plaintext}return e}}]),n}(R);Z.moduleName="format",Z.formatters=Q;var ee=function(e){s(i,e);var t=d(i);function i(e){var n;return o(this,i),(n=t.call(this,e)).leftColumns=[],n.rightColumns=[],n.leftMargin=0,n.rightMargin=0,n.rightPadding=0,n.initializationMode="left",n.active=!1,n.scrollEndTimer=!1,n}return a(i,[{key:"reset",value:function(){this.initializationMode="left",this.leftColumns=[],this.rightColumns=[],this.leftMargin=0,this.rightMargin=0,this.rightMargin=0,this.active=!1,this.table.columnManager.headersElement.style.marginLeft=0,this.table.columnManager.element.style.paddingRight=0}},{key:"initializeColumn",value:function(e){var t={margin:0,edge:!1};e.isGroup||(this.frozenCheck(e)?(t.position=this.initializationMode,"left"==this.initializationMode?this.leftColumns.push(e):this.rightColumns.unshift(e),this.active=!0,e.modules.frozen=t):this.initializationMode="right")}},{key:"frozenCheck",value:function(e){return e.parent.isGroup&&e.definition.frozen&&console.warn("Frozen Column Error - Parent column group must be frozen, not individual columns or sub column groups"),e.parent.isGroup?this.frozenCheck(e.parent):e.definition.frozen}},{key:"scrollHorizontal",value:function(){var e,t=this;this.active&&(clearTimeout(this.scrollEndTimer),this.scrollEndTimer=setTimeout((function(){t.layout()}),100),e=this.table.rowManager.getVisibleRows(),this.calcMargins(),this.layoutColumnPosition(),this.layoutCalcRows(),e.forEach((function(e){"row"===e.type&&t.layoutRow(e)})),this.table.rowManager.tableElement.style.marginRight=this.rightMargin)}},{key:"calcMargins",value:function(){this.leftMargin=this._calcSpace(this.leftColumns,this.leftColumns.length)+"px",this.table.columnManager.headersElement.style.marginLeft=this.leftMargin,this.rightMargin=this._calcSpace(this.rightColumns,this.rightColumns.length)+"px",this.table.columnManager.element.style.paddingRight=this.rightMargin,this.rightPadding=this.table.rowManager.element.clientWidth+this.table.columnManager.scrollLeft}},{key:"layoutCalcRows",value:function(){this.table.modExists("columnCalcs")&&(this.table.modules.columnCalcs.topInitialized&&this.table.modules.columnCalcs.topRow&&this.layoutRow(this.table.modules.columnCalcs.topRow),this.table.modules.columnCalcs.botInitialized&&this.table.modules.columnCalcs.botRow&&this.layoutRow(this.table.modules.columnCalcs.botRow))}},{key:"layoutColumnPosition",value:function(e){var t=this,i=[];this.leftColumns.forEach((function(o,n){if(o.modules.frozen.margin=t._calcSpace(t.leftColumns,n)+t.table.columnManager.scrollLeft+"px",n==t.leftColumns.length-1?o.modules.frozen.edge=!0:o.modules.frozen.edge=!1,o.parent.isGroup){var a=t.getColGroupParentElement(o);i.includes(a)||(t.layoutElement(a,o),i.push(a)),o.modules.frozen.edge&&a.classList.add("tabulator-frozen-"+o.modules.frozen.position)}else t.layoutElement(o.getElement(),o);e&&o.cells.forEach((function(e){t.layoutElement(e.getElement(!0),o)}))})),this.rightColumns.forEach((function(i,o){i.modules.frozen.margin=t.rightPadding-t._calcSpace(t.rightColumns,o+1)+"px",o==t.rightColumns.length-1?i.modules.frozen.edge=!0:i.modules.frozen.edge=!1,i.parent.isGroup?t.layoutElement(t.getColGroupParentElement(i),i):t.layoutElement(i.getElement(),i),e&&i.cells.forEach((function(e){t.layoutElement(e.getElement(!0),i)}))}))}},{key:"getColGroupParentElement",value:function(e){return e.parent.isGroup?this.getColGroupParentElement(e.parent):e.getElement()}},{key:"layout",value:function(){var e=this;this.active&&(this.calcMargins(),this.table.rowManager.getDisplayRows().forEach((function(t){"row"===t.type&&e.layoutRow(t)})),this.layoutCalcRows(),this.layoutColumnPosition(!0),this.table.rowManager.tableElement.style.marginRight=this.rightMargin)}},{key:"layoutRow",value:function(e){var t=this;e.getElement().style.paddingLeft=this.leftMargin,this.leftColumns.forEach((function(i){var o=e.getCell(i);o&&t.layoutElement(o.getElement(!0),i)})),this.rightColumns.forEach((function(i){var o=e.getCell(i);o&&t.layoutElement(o.getElement(!0),i)}))}},{key:"layoutElement",value:function(e,t){t.modules.frozen&&(e.style.position="absolute",e.style.left=t.modules.frozen.margin,e.classList.add("tabulator-frozen"),t.modules.frozen.edge&&e.classList.add("tabulator-frozen-"+t.modules.frozen.position))}},{key:"_calcSpace",value:function(e,t){for(var i=0,o=0;o-1&&t.splice(i,1)})),t}},{key:"freezeRow",value:function(e){e.modules.frozen?console.warn("Freeze Error - Row is already frozen"):(e.modules.frozen=!0,this.topElement.appendChild(e.getElement()),e.initialize(),e.normalizeHeight(),this.table.rowManager.adjustTableSize(),this.rows.push(e),this.table.rowManager.refreshActiveData("display"),this.styleRows())}},{key:"unfreezeRow",value:function(e){this.rows.indexOf(e);e.modules.frozen?(e.modules.frozen=!1,this.detachRow(e),this.table.rowManager.adjustTableSize(),this.table.rowManager.refreshActiveData("display"),this.rows.length&&this.styleRows()):console.warn("Freeze Error - Row is already unfrozen")}},{key:"detachRow",value:function(e){var t=this.rows.indexOf(e);if(t>-1){var i=e.getElement();i.parentNode.removeChild(i),this.rows.splice(t,1)}}},{key:"styleRows",value:function(e){var t=this;this.rows.forEach((function(e,i){t.table.rowManager.styleRow(e,i)}))}}]),i}(R);te.moduleName="frozenRows";var ie=function(){function e(t,i,n,a,s,l,r){o(this,e),this.groupManager=t,this.parent=i,this.key=a,this.level=n,this.field=s,this.hasSubGroups=n-1?i?this.rows.splice(n+1,0,e):this.rows.splice(n,0,e):i?this.rows.push(e):this.rows.unshift(e),e.modules.group=this,this.generateGroupHeaderContents(),this.groupManager.table.modExists("columnCalcs")&&"table"!=this.groupManager.table.options.columnCalcs&&this.groupManager.table.modules.columnCalcs.recalcGroup(this),this.groupManager.updateGroupRows(!0)}},{key:"scrollHeader",value:function(e){this.arrowElement.style.marginLeft=e,this.groupList.forEach((function(t){t.scrollHeader(e)}))}},{key:"getRowIndex",value:function(e){}},{key:"conformRowData",value:function(e){return this.field?e[this.field]=this.key:console.warn("Data Conforming Error - Cannot conform row data to match new group as groupBy is a function"),this.parent&&(e=this.parent.conformRowData(e)),e}},{key:"removeRow",value:function(e){var t=this.rows.indexOf(e),i=e.getElement();t>-1&&this.rows.splice(t,1),this.groupManager.table.options.groupValues||this.rows.length?(i.parentNode&&i.parentNode.removeChild(i),this.generateGroupHeaderContents(),this.groupManager.table.modExists("columnCalcs")&&"table"!=this.groupManager.table.options.columnCalcs&&this.groupManager.table.modules.columnCalcs.recalcGroup(this)):(this.parent?this.parent.removeGroup(this):this.groupManager.removeGroup(this),this.groupManager.updateGroupRows(!0))}},{key:"removeGroup",value:function(e){var t,i=e.level+"_"+e.key;this.groups[i]&&(delete this.groups[i],(t=this.groupList.indexOf(e))>-1&&this.groupList.splice(t,1),this.groupList.length||(this.parent?this.parent.removeGroup(this):this.groupManager.removeGroup(this)))}},{key:"getHeadersAndRows",value:function(e){var t=[];return t.push(this),this._visSet(),this.visible?this.groupList.length?this.groupList.forEach((function(i){t=t.concat(i.getHeadersAndRows(e))})):(!e&&"table"!=this.groupManager.table.options.columnCalcs&&this.groupManager.table.modExists("columnCalcs")&&this.groupManager.table.modules.columnCalcs.hasTopCalcs()&&(this.calcs.top&&(this.calcs.top.detachElement(),this.calcs.top.deleteCells()),this.calcs.top=this.groupManager.table.modules.columnCalcs.generateTopRow(this.rows),t.push(this.calcs.top)),t=t.concat(this.rows),!e&&"table"!=this.groupManager.table.options.columnCalcs&&this.groupManager.table.modExists("columnCalcs")&&this.groupManager.table.modules.columnCalcs.hasBottomCalcs()&&(this.calcs.bottom&&(this.calcs.bottom.detachElement(),this.calcs.bottom.deleteCells()),this.calcs.bottom=this.groupManager.table.modules.columnCalcs.generateBottomRow(this.rows),t.push(this.calcs.bottom))):this.groupList.length||"table"==this.groupManager.table.options.columnCalcs||this.groupManager.table.modExists("columnCalcs")&&(!e&&this.groupManager.table.modules.columnCalcs.hasTopCalcs()&&(this.calcs.top&&(this.calcs.top.detachElement(),this.calcs.top.deleteCells()),this.groupManager.table.options.groupClosedShowCalcs&&(this.calcs.top=this.groupManager.table.modules.columnCalcs.generateTopRow(this.rows),t.push(this.calcs.top))),!e&&this.groupManager.table.modules.columnCalcs.hasBottomCalcs()&&(this.calcs.bottom&&(this.calcs.bottom.detachElement(),this.calcs.bottom.deleteCells()),this.groupManager.table.options.groupClosedShowCalcs&&(this.calcs.bottom=this.groupManager.table.modules.columnCalcs.generateBottomRow(this.rows),t.push(this.calcs.bottom)))),t}},{key:"getData",value:function(e,t){var i=[];return this._visSet(),(!e||e&&this.visible)&&this.rows.forEach((function(e){i.push(e.getData(t||"data"))})),i}},{key:"getRowCount",value:function(){var e=0;return this.groupList.length?this.groupList.forEach((function(t){e+=t.getRowCount()})):e=this.rows.length,e}},{key:"toggleVisibility",value:function(){this.visible?this.hide():this.show()}},{key:"hide",value:function(){this.visible=!1,"classic"!=this.groupManager.table.rowManager.getRenderMode()||this.groupManager.table.options.pagination?this.groupManager.updateGroupRows(!0):(this.element.classList.remove("tabulator-group-visible"),this.groupList.length?this.groupList.forEach((function(e){e.getHeadersAndRows().forEach((function(e){e.detachElement()}))})):this.rows.forEach((function(e){var t=e.getElement();t.parentNode.removeChild(t)})),this.groupManager.table.rowManager.setDisplayRows(this.groupManager.updateGroupRows(),this.groupManager.getDisplayIndex()),this.groupManager.table.rowManager.checkClassicModeGroupHeaderWidth()),this.groupManager.table.options.groupVisibilityChanged.call(this.table,this.getComponent(),!1)}},{key:"show",value:function(){if(this.visible=!0,"classic"!=this.groupManager.table.rowManager.getRenderMode()||this.groupManager.table.options.pagination)this.groupManager.updateGroupRows(!0);else{this.element.classList.add("tabulator-group-visible");var e=this.getElement();this.groupList.length?this.groupList.forEach((function(t){t.getHeadersAndRows().forEach((function(t){var i=t.getElement();e.parentNode.insertBefore(i,e.nextSibling),t.initialize(),e=i}))})):this.rows.forEach((function(t){var i=t.getElement();e.parentNode.insertBefore(i,e.nextSibling),t.initialize(),e=i})),this.groupManager.table.rowManager.setDisplayRows(this.groupManager.updateGroupRows(),this.groupManager.getDisplayIndex()),this.groupManager.table.rowManager.checkClassicModeGroupHeaderWidth()}this.groupManager.table.options.groupVisibilityChanged.call(this.table,this.getComponent(),!0)}},{key:"_visSet",value:function(){var e=[];"function"==typeof this.visible&&(this.rows.forEach((function(t){e.push(t.getData())})),this.visible=this.visible(this.key,this.getRowCount(),e,this.getComponent()))}},{key:"getRowGroup",value:function(e){var t=!1;return this.groupList.length?this.groupList.forEach((function(i){var o=i.getRowGroup(e);o&&(t=o)})):this.rows.find((function(t){return t===e}))&&(t=this),t}},{key:"getSubGroups",value:function(e){var t=[];return this.groupList.forEach((function(i){t.push(e?i.getComponent():i)})),t}},{key:"getRows",value:function(e){var t=[];return this.rows.forEach((function(i){t.push(e?i.getComponent():i)})),t}},{key:"generateGroupHeaderContents",value:function(){var e=[];for(this.rows.forEach((function(t){e.push(t.getData())})),this.elementContents=this.generator(this.key,this.getRowCount(),e,this.getComponent());this.element.firstChild;)this.element.removeChild(this.element.firstChild);"string"==typeof this.elementContents?this.element.innerHTML=this.elementContents:this.element.appendChild(this.elementContents),this.element.insertBefore(this.arrowElement,this.element.firstChild)}},{key:"getPath",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];return e.unshift(this.key),this.parent&&this.parent.getPath(e),e}},{key:"getElement",value:function(){this.addBindingsd=!1,this._visSet(),this.visible?this.element.classList.add("tabulator-group-visible"):this.element.classList.remove("tabulator-group-visible");for(var e=0;eo.length&&console.warn("Error creating group headers, groupHeader array is shorter than groupBy array"),this.headerGenerator=[function(){return""}],this.startOpen=[function(){return!1}],this.table.modules.localize.bind("groups|item",(function(t,i){e.headerGenerator[0]=function(e,o,n){return(void 0===e?"":e)+"("+o+" "+(1===o?t:i.groups.items)+")"}})),this.groupIDLookups=[],Array.isArray(t)||t)?this.table.modExists("columnCalcs")&&"table"!=this.table.options.columnCalcs&&"both"!=this.table.options.columnCalcs&&this.table.modules.columnCalcs.removeCalcs():this.table.modExists("columnCalcs")&&"group"!=this.table.options.columnCalcs&&this.table.columnManager.getRealColumns().forEach((function(t){t.definition.topCalc&&e.table.modules.columnCalcs.initializeTopRow(),t.definition.bottomCalc&&e.table.modules.columnCalcs.initializeBottomRow()}));Array.isArray(t)||(t=[t]),t.forEach((function(t,i){var o,n;o="function"==typeof t?t:(n=e.table.columnManager.getColumnByField(t))?function(e){return n.getFieldValue(e)}:function(e){return e[t]},e.groupIDLookups.push({field:"function"!=typeof t&&t,func:o,values:!!e.allowedValues&&e.allowedValues[i]})})),i&&(Array.isArray(i)||(i=[i]),i.forEach((function(e){})),this.startOpen=i),o&&(this.headerGenerator=Array.isArray(o)?o:[o]),this.initialized=!0}},{key:"setDisplayIndex",value:function(e){this.displayIndex=e}},{key:"getDisplayIndex",value:function(){return this.displayIndex}},{key:"getRows",value:function(e){return this.groupIDLookups.length?(this.table.options.dataGrouping.call(this.table),this.generateGroups(e),this.table.options.dataGrouped&&this.table.options.dataGrouped.call(this.table,this.getGroups(!0)),this.updateGroupRows()):e.slice(0)}},{key:"getGroups",value:function(e){var t=[];return this.groupList.forEach((function(i){t.push(e?i.getComponent():i)})),t}},{key:"getChildGroups",value:function(e){var t=this,i=[];return e||(e=this),e.groupList.forEach((function(e){e.groupList.length?i=i.concat(t.getChildGroups(e)):i.push(e)})),i}},{key:"wipe",value:function(){this.groupList.forEach((function(e){e.wipe()}))}},{key:"pullGroupListData",value:function(e){var t=this,i=[];return e.forEach((function(e){var o={level:0,rowCount:0,headerContent:""},n=[];e.hasSubGroups?(n=t.pullGroupListData(e.groupList),o.level=e.level,o.rowCount=n.length-e.groupList.length,o.headerContent=e.generator(e.key,o.rowCount,e.rows,e),i.push(o),i=i.concat(n)):(o.level=e.level,o.headerContent=e.generator(e.key,e.rows.length,e.rows,e),o.rowCount=e.getRows().length,i.push(o),e.getRows().forEach((function(e){i.push(e.getData("data"))})))})),i}},{key:"getGroupedData",value:function(){return this.pullGroupListData(this.groupList)}},{key:"getRowGroup",value:function(e){var t=!1;return this.groupList.forEach((function(i){var o=i.getRowGroup(e);o&&(t=o)})),t}},{key:"countGroups",value:function(){return this.groupList.length}},{key:"generateGroups",value:function(e){var t=this,i=this.groups;this.groups={},this.groupList=[],this.allowedValues&&this.allowedValues[0]?(this.allowedValues[0].forEach((function(e){t.createGroup(e,0,i)})),e.forEach((function(e){t.assignRowToExistingGroup(e,i)}))):e.forEach((function(e){t.assignRowToGroup(e,i)}))}},{key:"createGroup",value:function(e,t,i){var o,n=t+"_"+e;i=i||[],o=new ie(this,!1,t,e,this.groupIDLookups[0].field,this.headerGenerator[0],i[n]),this.groups[n]=o,this.groupList.push(o)}},{key:"assignRowToExistingGroup",value:function(e,t){var i="0_"+this.groupIDLookups[0].func(e.getData());this.groups[i]&&this.groups[i].addRow(e)}},{key:"assignRowToGroup",value:function(e,t){var i=this.groupIDLookups[0].func(e.getData()),o=!this.groups["0_"+i];return o&&this.createGroup(i,0,t),this.groups["0_"+i].addRow(e),!o}},{key:"reassignRowToGroup",value:function(e){var t=e.getGroup(),i=t.getPath(),o=this.getExpectedPath(e);i.length==o.length&&i.every((function(e,t){return e===o[t]}))||(t.removeRow(e),this.assignRowToGroup(e,this.groups),this.table.rowManager.refreshActiveData("group",!1,!0))}},{key:"getExpectedPath",value:function(e){var t=[],i=e.getData();return this.groupIDLookups.forEach((function(e){t.push(e.func(i))})),t}},{key:"updateGroupRows",value:function(e){var t=[];if(this.groupList.forEach((function(e){t=t.concat(e.getHeadersAndRows())})),e){var i=this.table.rowManager.setDisplayRows(t,this.getDisplayIndex());!0!==i&&this.setDisplayIndex(i),this.table.rowManager.refreshActiveData("group",!0,!0)}return t}},{key:"scrollHeaders",value:function(e){this.table.options.virtualDomHoz&&(e-=this.table.vdomHoz.vDomPadLeft),e+="px",this.groupList.forEach((function(t){t.scrollHeader(e)}))}},{key:"removeGroup",value:function(e){var t,i=e.level+"_"+e.key;this.groups[i]&&(delete this.groups[i],(t=this.groupList.indexOf(e))>-1&&this.groupList.splice(t,1))}}]),i}(R);oe.moduleName="groupRows";var ne=function(e){s(i,e);var t=d(i);function i(e){var n;return o(this,i),(n=t.call(this,e)).history=[],n.index=-1,n}return a(i,[{key:"clear",value:function(){this.history=[],this.index=-1}},{key:"action",value:function(e,t,i){this.history=this.history.slice(0,this.index+1),this.history.push({type:e,component:t,data:i}),this.index++}},{key:"getHistoryUndoSize",value:function(){return this.index+1}},{key:"getHistoryRedoSize",value:function(){return this.history.length-(this.index+1)}},{key:"clearComponentHistory",value:function(e){var t=this.history.findIndex((function(t){return t.component===e}));t>-1&&(this.history.splice(t,1),t<=this.index&&this.index--,this.clearComponentHistory(e))}},{key:"undo",value:function(){if(this.index>-1){var e=this.history[this.index];return i.undoers[e.type].call(this,e),this.index--,this.table.options.historyUndo.call(this.table,e.type,e.component.getComponent(),e.data),!0}return console.warn("History Undo Error - No more history to undo"),!1}},{key:"redo",value:function(){if(this.history.length-1>this.index){this.index++;var e=this.history[this.index];return i.redoers[e.type].call(this,e),this.table.options.historyRedo.call(this.table,e.type,e.component.getComponent(),e.data),!0}return console.warn("History Redo Error - No more history to redo"),!1}},{key:"_rebindRow",value:function(e,t){this.history.forEach((function(i){if(i.component instanceof Row)i.component===e&&(i.component=t);else if(i.component instanceof Cell&&i.component.row===e){var o=i.component.column.getField();o&&(i.component=t.getCell(o))}}))}}]),i}(R);ne.moduleName="history",ne.undoers={cellEdit:function(e){e.component.setValueProcessData(e.data.oldValue)},rowAdd:function(e){e.component.deleteActual()},rowDelete:function(e){var t=this.table.rowManager.addRowActual(e.data.data,e.data.pos,e.data.index);this.table.options.groupBy&&this.table.modExists("groupRows")&&this.table.modules.groupRows.updateGroupRows(!0),this._rebindRow(e.component,t)},rowMove:function(e){this.table.rowManager.moveRowActual(e.component,this.table.rowManager.rows[e.data.posFrom],!e.data.after),this.table.rowManager.redraw()}},ne.redoers={cellEdit:function(e){e.component.setValueProcessData(e.data.newValue)},rowAdd:function(e){var t=this.table.rowManager.addRowActual(e.data.data,e.data.pos,e.data.index);this.table.options.groupBy&&this.table.modExists("groupRows")&&this.table.modules.groupRows.updateGroupRows(!0),this._rebindRow(e.component,t)},rowDelete:function(e){e.component.deleteActual()},rowMove:function(e){this.table.rowManager.moveRowActual(e.component,this.table.rowManager.rows[e.data.posTo],e.data.after),this.table.rowManager.redraw()}};var ae=function(e){s(n,e);var i=d(n);function n(e){var t;return o(this,n),(t=i.call(this,e)).fieldIndex=[],t.hasIndex=!1,t}return a(n,[{key:"parseTable",value:function(){var e=this.table.element,i=this.table.options,o=(i.columns,e.getElementsByTagName("th")),n=e.getElementsByTagName("tbody")[0],a=[];this.hasIndex=!1,this.table.options.htmlImporting.call(this.table),n=n?n.getElementsByTagName("tr"):[],this._extractOptions(e,i),o.length?this._extractHeaders(o,n):this._generateBlankHeaders(o,n);for(var s=0;s=0?t.element.scrollTop=i:t.scrollToRow(t.getDisplayRows()[0])),this.table.element.focus()},scrollPageDown:function(e){var t=this.table.rowManager,i=t.scrollTop+t.height,o=t.element.scrollHeight;e.preventDefault(),t.displayRowsCount&&(i<=o?t.element.scrollTop=i:t.scrollToRow(t.getDisplayRows()[t.displayRowsCount-1])),this.table.element.focus()},scrollToStart:function(e){var t=this.table.rowManager;e.preventDefault(),t.displayRowsCount&&t.scrollToRow(t.getDisplayRows()[0]),this.table.element.focus()},scrollToEnd:function(e){var t=this.table.rowManager;e.preventDefault(),t.displayRowsCount&&t.scrollToRow(t.getDisplayRows()[t.displayRowsCount-1]),this.table.element.focus()},navPrev:function(e){var t=!1;this.table.modExists("edit")&&(t=this.table.modules.edit.currentCell)&&(e.preventDefault(),t.nav().prev())},navNext:function(e){var t,i=!1,o=this.table.options.tabEndNewRow;this.table.modExists("edit")&&(i=this.table.modules.edit.currentCell)&&(e.preventDefault(),(t=i.nav()).next()||o&&(i.getElement().firstChild.blur(),(o=!0===o?this.table.addRow({}):"function"==typeof o?this.table.addRow(o(i.row.getComponent())):this.table.addRow(Object.assign({},o))).then((function(){setTimeout((function(){t.next()}))}))))},navLeft:function(e){var t=!1;this.table.modExists("edit")&&(t=this.table.modules.edit.currentCell)&&(e.preventDefault(),t.nav().left())},navRight:function(e){var t=!1;this.table.modExists("edit")&&(t=this.table.modules.edit.currentCell)&&(e.preventDefault(),t.nav().right())},navUp:function(e){var t=!1;this.table.modExists("edit")&&(t=this.table.modules.edit.currentCell)&&(e.preventDefault(),t.nav().up())},navDown:function(e){var t=!1;this.table.modExists("edit")&&(t=this.table.modules.edit.currentCell)&&(e.preventDefault(),t.nav().down())},undo:function(e){this.table.options.history&&this.table.modExists("history")&&this.table.modExists("edit")&&(this.table.modules.edit.currentCell||(e.preventDefault(),this.table.modules.history.undo()))},redo:function(e){this.table.options.history&&this.table.modExists("history")&&this.table.modExists("edit")&&(this.table.modules.edit.currentCell||(e.preventDefault(),this.table.modules.history.redo()))},copyToClipboard:function(e){this.table.modules.edit.currentCell||this.table.modExists("clipboard",!0)&&this.table.modules.clipboard.copy(!1,!0)}},le=function(e){s(n,e);var i=d(n);function n(e){var t;return o(this,n),(t=i.call(this,e)).watchKeys=null,t.pressedKeys=null,t.keyupBinding=!1,t.keydownBinding=!1,t}return a(n,[{key:"initialize",value:function(){var e=this.table.options.keybindings,t={};if(this.watchKeys={},this.pressedKeys=[],!1!==e){for(var i in n.bindings)t[i]=n.bindings[i];if(Object.keys(e).length)for(var o in e)t[o]=e[o];this.mapBindings(t),this.bindEvents()}}},{key:"mapBindings",value:function(e){var i=this,o=function(o){n.actions[o]?e[o]&&("object"!==t(e[o])&&(e[o]=[e[o]]),e[o].forEach((function(e){i.mapBinding(o,e)}))):console.warn("Key Binding Error - no such action:",o)};for(var a in e)o(a)}},{key:"mapBinding",value:function(e,t){var i=this,o={action:n.actions[e],keys:[],ctrl:!1,shift:!1,meta:!1};t.toString().toLowerCase().split(" ").join("").split("+").forEach((function(e){switch(e){case"ctrl":o.ctrl=!0;break;case"shift":o.shift=!0;break;case"meta":o.meta=!0;break;default:e=parseInt(e),o.keys.push(e),i.watchKeys[e]||(i.watchKeys[e]=[]),i.watchKeys[e].push(o)}}))}},{key:"bindEvents",value:function(){var e=this;this.keyupBinding=function(t){var i=t.keyCode,o=e.watchKeys[i];o&&(e.pressedKeys.push(i),o.forEach((function(i){e.checkBinding(t,i)})))},this.keydownBinding=function(t){var i=t.keyCode;if(e.watchKeys[i]){var o=e.pressedKeys.indexOf(i);o>-1&&e.pressedKeys.splice(o,1)}},this.table.element.addEventListener("keydown",this.keyupBinding),this.table.element.addEventListener("keyup",this.keydownBinding)}},{key:"clearBindings",value:function(){this.keyupBinding&&this.table.element.removeEventListener("keydown",this.keyupBinding),this.keydownBinding&&this.table.element.removeEventListener("keyup",this.keydownBinding)}},{key:"checkBinding",value:function(e,t){var i=this,o=!0;return e.ctrlKey==t.ctrl&&e.shiftKey==t.shift&&e.metaKey==t.meta&&(t.keys.forEach((function(e){-1==i.pressedKeys.indexOf(e)&&(o=!1)})),o&&t.action.call(this,e),!0)}}]),n}(R);le.moduleName="keybindings",le.bindings={navPrev:"shift + 9",navNext:9,navUp:38,navDown:40,scrollPageUp:33,scrollPageDown:34,scrollToStart:36,scrollToEnd:35,undo:"ctrl + 90",redo:"ctrl + 89",copyToClipboard:"ctrl + 67"},le.actions=se;var re=function(e){s(i,e);var t=d(i);function i(e){var n;return o(this,i),(n=t.call(this,e)).menuElements=[],n.blurEvent=n.hideMenu.bind(u(n)),n.escEvent=n.escMenu.bind(u(n)),n.nestedMenuBlock=!1,n.positionReversedX=!1,n}return a(i,[{key:"initializeColumnHeader",value:function(e){var t,i=this;e.definition.headerContextMenu&&(e.getElement().addEventListener("contextmenu",this.LoadMenuEvent.bind(this,e,e.definition.headerContextMenu)),this.tapHold(e,e.definition.headerContextMenu)),e.definition.headerMenu&&((t=document.createElement("span")).classList.add("tabulator-header-menu-button"),t.innerHTML="⋮",t.addEventListener("click",(function(t){t.stopPropagation(),t.preventDefault(),i.LoadMenuEvent(e,e.definition.headerMenu,t)})),e.titleElement.insertBefore(t,e.titleElement.firstChild))}},{key:"LoadMenuEvent",value:function(e,t,i){t="function"==typeof t?t.call(this.table,e.getComponent(),i):t,this.loadMenu(i,e,t)}},{key:"tapHold",value:function(e,t){var i=this,o=e.getElement(),n=null,a=!1;o.addEventListener("touchstart",(function(o){clearTimeout(n),a=!1,n=setTimeout((function(){clearTimeout(n),n=null,a=!0,i.LoadMenuEvent(e,t,o)}),1e3)}),{passive:!0}),o.addEventListener("touchend",(function(e){clearTimeout(n),n=null,a&&e.preventDefault()}))}},{key:"initializeCell",value:function(e){e.column.definition.contextMenu&&(e.getElement(!0).addEventListener("contextmenu",this.LoadMenuEvent.bind(this,e,e.column.definition.contextMenu)),this.tapHold(e,e.column.definition.contextMenu)),e.column.definition.clickMenu&&e.getElement(!0).addEventListener("click",this.LoadMenuEvent.bind(this,e,e.column.definition.clickMenu))}},{key:"initializeRow",value:function(e){this.table.options.rowContextMenu&&(e.getElement().addEventListener("contextmenu",this.LoadMenuEvent.bind(this,e,this.table.options.rowContextMenu)),this.tapHold(e,this.table.options.rowContextMenu)),this.table.options.rowClickMenu&&e.getElement().addEventListener("click",this.LoadMenuEvent.bind(this,e,this.table.options.rowClickMenu))}},{key:"initializeGroup",value:function(e){this.table.options.groupContextMenu&&(e.getElement().addEventListener("contextmenu",this.LoadMenuEvent.bind(this,e,this.table.options.groupContextMenu)),this.tapHold(e,this.table.options.groupContextMenu)),this.table.options.groupClickMenu&&e.getElement().addEventListener("click",this.LoadMenuEvent.bind(this,e,this.table.options.groupClickMenu))}},{key:"loadMenu",value:function(e,t,i,o){var n=this,a=!(e instanceof MouseEvent),s=document.createElement("div");if(s.classList.add("tabulator-menu"),a||e.preventDefault(),i&&i.length){if(!o){if(this.nestedMenuBlock){if(this.isOpen())return}else this.nestedMenuBlock=setTimeout((function(){n.nestedMenuBlock=!1}),100);this.hideMenu(),this.menuElements=[]}i.forEach((function(e){var i=document.createElement("div"),o=e.label,a=e.disabled;e.separator?i.classList.add("tabulator-menu-separator"):(i.classList.add("tabulator-menu-item"),"function"==typeof o&&(o=o.call(n.table,t.getComponent())),o instanceof Node?i.appendChild(o):i.innerHTML=o,"function"==typeof a&&(a=a.call(n.table,t.getComponent())),a?(i.classList.add("tabulator-menu-item-disabled"),i.addEventListener("click",(function(e){e.stopPropagation()}))):e.menu&&e.menu.length?i.addEventListener("click",(function(o){o.stopPropagation(),n.hideOldSubMenus(s),n.loadMenu(o,t,e.menu,i)})):e.action&&i.addEventListener("click",(function(i){e.action(i,t.getComponent())})),e.menu&&e.menu.length&&i.classList.add("tabulator-menu-item-submenu")),s.appendChild(i)})),s.addEventListener("click",(function(e){n.hideMenu()})),this.menuElements.push(s),this.positionMenu(s,o,a,e)}}},{key:"hideOldSubMenus",value:function(e){var t=this.menuElements.indexOf(e);if(t>-1)for(var i=this.menuElements.length-1;i>t;i--){var o=this.menuElements[i];o.parentNode&&o.parentNode.removeChild(o),this.menuElements.pop()}}},{key:"positionMenu",value:function(e,t,i,o){var n,a,s,l=this,r=Math.max(document.body.offsetHeight,window.innerHeight);t?(n=(s=b.elOffset(t)).left+t.offsetWidth,a=s.top-1):(n=i?o.touches[0].pageX:o.pageX,a=i?o.touches[0].pageY:o.pageY,this.positionReversedX=!1),e.style.top=a+"px",e.style.left=n+"px",setTimeout((function(){l.table.rowManager.element.addEventListener("scroll",l.blurEvent),document.body.addEventListener("click",l.blurEvent),document.body.addEventListener("contextmenu",l.blurEvent),window.addEventListener("resize",l.blurEvent),document.body.addEventListener("keydown",l.escEvent)}),100),document.body.appendChild(e),a+e.offsetHeight>=r&&(e.style.top="",e.style.bottom=t?r-s.top-t.offsetHeight-1+"px":r-a+"px"),(n+e.offsetWidth>=document.body.offsetWidth||this.positionReversedX)&&(e.style.left="",e.style.right=t?document.documentElement.offsetWidth-s.left+"px":document.documentElement.offsetWidth-n+"px",this.positionReversedX=!0)}},{key:"isOpen",value:function(){return!!this.menuElements.length}},{key:"escMenu",value:function(e){27==e.keyCode&&this.hideMenu()}},{key:"hideMenu",value:function(){this.menuElements.forEach((function(e){e.parentNode&&e.parentNode.removeChild(e)})),document.body.removeEventListener("keydown",this.escEvent),document.body.removeEventListener("click",this.blurEvent),document.body.removeEventListener("contextmenu",this.blurEvent),window.removeEventListener("resize",this.blurEvent),this.table.rowManager.element.removeEventListener("scroll",this.blurEvent)}}]),i}(R);re.moduleName="menu";var ue=function(e){s(i,e);var t=d(i);function i(e){var n;return o(this,i),(n=t.call(this,e)).placeholderElement=n.createPlaceholderElement(),n.hoverElement=!1,n.checkTimeout=!1,n.checkPeriod=250,n.moving=!1,n.toCol=!1,n.toColAfter=!1,n.startX=0,n.autoScrollMargin=40,n.autoScrollStep=5,n.autoScrollTimeout=!1,n.touchMove=!1,n.moveHover=n.moveHover.bind(u(n)),n.endMove=n.endMove.bind(u(n)),n}return a(i,[{key:"createPlaceholderElement",value:function(){var e=document.createElement("div");return e.classList.add("tabulator-col"),e.classList.add("tabulator-col-placeholder"),e}},{key:"initializeColumn",value:function(e){var t,i=this,o={};e.modules.frozen||(t=e.getElement(),o.mousemove=function(o){e.parent===i.moving.parent&&((i.touchMove?o.touches[0].pageX:o.pageX)-b.elOffset(t).left+i.table.columnManager.element.scrollLeft>e.getWidth()/2?i.toCol===e&&i.toColAfter||(t.parentNode.insertBefore(i.placeholderElement,t.nextSibling),i.moveColumn(e,!0)):(i.toCol!==e||i.toColAfter)&&(t.parentNode.insertBefore(i.placeholderElement,t),i.moveColumn(e,!1)))}.bind(i),t.addEventListener("mousedown",(function(t){i.touchMove=!1,1===t.which&&(i.checkTimeout=setTimeout((function(){i.startMove(t,e)}),i.checkPeriod))})),t.addEventListener("mouseup",(function(e){1===e.which&&i.checkTimeout&&clearTimeout(i.checkTimeout)})),i.bindTouchEvents(e)),e.modules.moveColumn=o}},{key:"bindTouchEvents",value:function(e){var t,i,o,n,a,s,l=this,r=e.getElement(),u=!1;r.addEventListener("touchstart",(function(r){l.checkTimeout=setTimeout((function(){l.touchMove=!0,t=e.nextColumn(),o=t?t.getWidth()/2:0,i=e.prevColumn(),n=i?i.getWidth()/2:0,a=0,s=0,u=!1,l.startMove(r,e)}),l.checkPeriod)}),{passive:!0}),r.addEventListener("touchmove",(function(r){var c,d;l.moving&&(l.moveHover(r),u||(u=r.touches[0].pageX),(c=r.touches[0].pageX-u)>0?t&&c-a>o&&(d=t)!==e&&(u=r.touches[0].pageX,d.getElement().parentNode.insertBefore(l.placeholderElement,d.getElement().nextSibling),l.moveColumn(d,!0)):i&&-c-s>n&&(d=i)!==e&&(u=r.touches[0].pageX,d.getElement().parentNode.insertBefore(l.placeholderElement,d.getElement()),l.moveColumn(d,!1)),d&&(t=d.nextColumn(),a=o,o=t?t.getWidth()/2:0,i=d.prevColumn(),s=n,n=i?i.getWidth()/2:0))}),{passive:!0}),r.addEventListener("touchend",(function(e){l.checkTimeout&&clearTimeout(l.checkTimeout),l.moving&&l.endMove(e)}))}},{key:"startMove",value:function(e,t){var i=t.getElement();this.moving=t,this.startX=(this.touchMove?e.touches[0].pageX:e.pageX)-b.elOffset(i).left,this.table.element.classList.add("tabulator-block-select"),this.placeholderElement.style.width=t.getWidth()+"px",this.placeholderElement.style.height=t.getHeight()+"px",i.parentNode.insertBefore(this.placeholderElement,i),i.parentNode.removeChild(i),this.hoverElement=i.cloneNode(!0),this.hoverElement.classList.add("tabulator-moving"),this.table.columnManager.getElement().appendChild(this.hoverElement),this.hoverElement.style.left="0",this.hoverElement.style.bottom="0",this.touchMove||(this._bindMouseMove(),document.body.addEventListener("mousemove",this.moveHover),document.body.addEventListener("mouseup",this.endMove)),this.moveHover(e)}},{key:"_bindMouseMove",value:function(){this.table.columnManager.columnsByIndex.forEach((function(e){e.modules.moveColumn.mousemove&&e.getElement().addEventListener("mousemove",e.modules.moveColumn.mousemove)}))}},{key:"_unbindMouseMove",value:function(){this.table.columnManager.columnsByIndex.forEach((function(e){e.modules.moveColumn.mousemove&&e.getElement().removeEventListener("mousemove",e.modules.moveColumn.mousemove)}))}},{key:"moveColumn",value:function(e,t){var i=this.moving.getCells();this.toCol=e,this.toColAfter=t,t?e.getCells().forEach((function(e,t){var o=e.getElement(!0);o.parentNode.insertBefore(i[t].getElement(),o.nextSibling)})):e.getCells().forEach((function(e,t){var o=e.getElement(!0);o.parentNode.insertBefore(i[t].getElement(),o)}))}},{key:"endMove",value:function(e){(1===e.which||this.touchMove)&&(this._unbindMouseMove(),this.placeholderElement.parentNode.insertBefore(this.moving.getElement(),this.placeholderElement.nextSibling),this.placeholderElement.parentNode.removeChild(this.placeholderElement),this.hoverElement.parentNode.removeChild(this.hoverElement),this.table.element.classList.remove("tabulator-block-select"),this.toCol&&this.table.columnManager.moveColumnActual(this.moving,this.toCol,this.toColAfter),this.moving=!1,this.toCol=!1,this.toColAfter=!1,this.touchMove||(document.body.removeEventListener("mousemove",this.moveHover),document.body.removeEventListener("mouseup",this.endMove)))}},{key:"moveHover",value:function(e){var t,i=this,o=this.table.columnManager.getElement(),n=o.scrollLeft,a=(this.touchMove?e.touches[0].pageX:e.pageX)-b.elOffset(o).left+n;this.hoverElement.style.left=a-this.startX+"px",a-ne.getHeight()/2?t.toRow===e&&t.toRowAfter||((o=e.getElement()).parentNode.insertBefore(t.placeholderElement,o.nextSibling),t.moveRow(e,!0)):(t.toRow!==e||t.toRowAfter)&&(o=e.getElement()).previousSibling&&(o.parentNode.insertBefore(t.placeholderElement,o),t.moveRow(e,!1))}.bind(t),e.modules.moveRow=i}},{key:"initializeRow",value:function(e){var t,i=this,o={};o.mouseup=function(t){i.tableRowDrop(t,e)}.bind(i),o.mousemove=function(t){var o=e.getElement();t.pageY-b.elOffset(o).top+i.table.rowManager.element.scrollTop>e.getHeight()/2?i.toRow===e&&i.toRowAfter||(o.parentNode.insertBefore(i.placeholderElement,o.nextSibling),i.moveRow(e,!0)):(i.toRow!==e||i.toRowAfter)&&(o.parentNode.insertBefore(i.placeholderElement,o),i.moveRow(e,!1))}.bind(i),this.hasHandle||((t=e.getElement()).addEventListener("mousedown",(function(t){1===t.which&&(i.checkTimeout=setTimeout((function(){i.startMove(t,e)}),i.checkPeriod))})),t.addEventListener("mouseup",(function(e){1===e.which&&i.checkTimeout&&clearTimeout(i.checkTimeout)})),this.bindTouchEvents(e,e.getElement())),e.modules.moveRow=o}},{key:"initializeCell",value:function(e){var t=this,i=e.getElement(!0);i.addEventListener("mousedown",(function(i){1===i.which&&(t.checkTimeout=setTimeout((function(){t.startMove(i,e.row)}),t.checkPeriod))})),i.addEventListener("mouseup",(function(e){1===e.which&&t.checkTimeout&&clearTimeout(t.checkTimeout)})),this.bindTouchEvents(e.row,i)}},{key:"bindTouchEvents",value:function(e,t){var i,o,n,a,s,l,r=this,u=!1;t.addEventListener("touchstart",(function(t){r.checkTimeout=setTimeout((function(){r.touchMove=!0,i=e.nextRow(),n=i?i.getHeight()/2:0,o=e.prevRow(),a=o?o.getHeight()/2:0,s=0,l=0,u=!1,r.startMove(t,e)}),r.checkPeriod)}),{passive:!0}),this.moving,this.toRow,this.toRowAfter,t.addEventListener("touchmove",(function(t){var c,d;r.moving&&(t.preventDefault(),r.moveHover(t),u||(u=t.touches[0].pageY),(c=t.touches[0].pageY-u)>0?i&&c-s>n&&(d=i)!==e&&(u=t.touches[0].pageY,d.getElement().parentNode.insertBefore(r.placeholderElement,d.getElement().nextSibling),r.moveRow(d,!0)):o&&-c-l>a&&(d=o)!==e&&(u=t.touches[0].pageY,d.getElement().parentNode.insertBefore(r.placeholderElement,d.getElement()),r.moveRow(d,!1)),d&&(i=d.nextRow(),s=n,n=i?i.getHeight()/2:0,o=d.prevRow(),l=a,a=o?o.getHeight()/2:0))})),t.addEventListener("touchend",(function(e){r.checkTimeout&&clearTimeout(r.checkTimeout),r.moving&&(r.endMove(e),r.touchMove=!1)}))}},{key:"_bindMouseMove",value:function(){this.table.rowManager.getDisplayRows().forEach((function(e){"row"!==e.type&&"group"!==e.type||!e.modules.moveRow.mousemove||e.getElement().addEventListener("mousemove",e.modules.moveRow.mousemove)}))}},{key:"_unbindMouseMove",value:function(){this.table.rowManager.getDisplayRows().forEach((function(e){"row"!==e.type&&"group"!==e.type||!e.modules.moveRow.mousemove||e.getElement().removeEventListener("mousemove",e.modules.moveRow.mousemove)}))}},{key:"startMove",value:function(e,t){var i=t.getElement();this.setStartPosition(e,t),this.moving=t,this.table.element.classList.add("tabulator-block-select"),this.placeholderElement.style.width=t.getWidth()+"px",this.placeholderElement.style.height=t.getHeight()+"px",this.connection?(this.table.element.classList.add("tabulator-movingrow-sending"),this.connectToTables(t)):(i.parentNode.insertBefore(this.placeholderElement,i),i.parentNode.removeChild(i)),this.hoverElement=i.cloneNode(!0),this.hoverElement.classList.add("tabulator-moving"),this.connection?(document.body.appendChild(this.hoverElement),this.hoverElement.style.left="0",this.hoverElement.style.top="0",this.hoverElement.style.width=this.table.element.clientWidth+"px",this.hoverElement.style.whiteSpace="nowrap",this.hoverElement.style.overflow="hidden",this.hoverElement.style.pointerEvents="none"):(this.table.rowManager.getTableElement().appendChild(this.hoverElement),this.hoverElement.style.left="0",this.hoverElement.style.top="0",this._bindMouseMove()),document.body.addEventListener("mousemove",this.moveHover),document.body.addEventListener("mouseup",this.endMove),this.moveHover(e)}},{key:"setStartPosition",value:function(e,t){var i,o,n=this.touchMove?e.touches[0].pageX:e.pageX,a=this.touchMove?e.touches[0].pageY:e.pageY;i=t.getElement(),this.connection?(o=i.getBoundingClientRect(),this.startX=o.left-n+window.pageXOffset,this.startY=o.top-a+window.pageYOffset):this.startY=a-i.getBoundingClientRect().top}},{key:"endMove",value:function(e){e&&1!==e.which&&!this.touchMove||(this._unbindMouseMove(),this.connection||(this.placeholderElement.parentNode.insertBefore(this.moving.getElement(),this.placeholderElement.nextSibling),this.placeholderElement.parentNode.removeChild(this.placeholderElement)),this.hoverElement.parentNode.removeChild(this.hoverElement),this.table.element.classList.remove("tabulator-block-select"),this.toRow&&this.table.rowManager.moveRow(this.moving,this.toRow,this.toRowAfter),this.moving=!1,this.toRow=!1,this.toRowAfter=!1,document.body.removeEventListener("mousemove",this.moveHover),document.body.removeEventListener("mouseup",this.endMove),this.connection&&(this.table.element.classList.remove("tabulator-movingrow-sending"),this.disconnectFromTables()))}},{key:"moveRow",value:function(e,t){this.toRow=e,this.toRowAfter=t}},{key:"moveHover",value:function(e){this.connection?this.moveHoverConnections.call(this,e):this.moveHoverTable.call(this,e)}},{key:"moveHoverTable",value:function(e){var t=this.table.rowManager.getElement(),i=t.scrollTop,o=(this.touchMove?e.touches[0].pageY:e.pageY)-t.getBoundingClientRect().top+i;this.hoverElement.style.top=o-this.startY+"px"}},{key:"moveHoverConnections",value:function(e){this.hoverElement.style.left=this.startX+(this.touchMove?e.touches[0].pageX:e.pageX)+"px",this.hoverElement.style.top=this.startY+(this.touchMove?e.touches[0].pageY:e.pageY)+"px"}},{key:"elementRowDrop",value:function(e,t,i){this.table.options.movableRowsElementDrop&&this.table.options.movableRowsElementDrop(e,t,!!i&&i.getComponent())}},{key:"connectToTables",value:function(e){var t,i=this;this.connectionSelectorsTables&&(t=this.table.modules.comms.getConnections(this.connectionSelectorsTables),this.table.options.movableRowsSendingStart.call(this.table,t),this.table.modules.comms.send(this.connectionSelectorsTables,"moveRow","connect",{row:e})),this.connectionSelectorsElements&&(this.connectionElements=[],Array.isArray(this.connectionSelectorsElements)||(this.connectionSelectorsElements=[this.connectionSelectorsElements]),this.connectionSelectorsElements.forEach((function(e){"string"==typeof e?i.connectionElements=i.connectionElements.concat(Array.prototype.slice.call(document.querySelectorAll(e))):i.connectionElements.push(e)})),this.connectionElements.forEach((function(e){var t=function(t){i.elementRowDrop(t,e,i.moving)};e.addEventListener("mouseup",t),e.tabulatorElementDropEvent=t,e.classList.add("tabulator-movingrow-receiving")})))}},{key:"disconnectFromTables",value:function(){var e;this.connectionSelectorsTables&&(e=this.table.modules.comms.getConnections(this.connectionSelectorsTables),this.table.options.movableRowsSendingStop.call(this.table,e),this.table.modules.comms.send(this.connectionSelectorsTables,"moveRow","disconnect")),this.connectionElements.forEach((function(e){e.classList.remove("tabulator-movingrow-receiving"),e.removeEventListener("mouseup",e.tabulatorElementDropEvent),delete e.tabulatorElementDropEvent}))}},{key:"connect",value:function(e,t){return this.connectedTable?(console.warn("Move Row Error - Table cannot accept connection, already connected to table:",this.connectedTable),!1):(this.connectedTable=e,this.connectedRow=t,this.table.element.classList.add("tabulator-movingrow-receiving"),this.table.rowManager.getDisplayRows().forEach((function(e){"row"===e.type&&e.modules.moveRow&&e.modules.moveRow.mouseup&&e.getElement().addEventListener("mouseup",e.modules.moveRow.mouseup)})),this.tableRowDropEvent=this.tableRowDrop.bind(this),this.table.element.addEventListener("mouseup",this.tableRowDropEvent),this.table.options.movableRowsReceivingStart.call(this.table,t,e),!0)}},{key:"disconnect",value:function(e){e===this.connectedTable?(this.connectedTable=!1,this.connectedRow=!1,this.table.element.classList.remove("tabulator-movingrow-receiving"),this.table.rowManager.getDisplayRows().forEach((function(e){"row"===e.type&&e.modules.moveRow&&e.modules.moveRow.mouseup&&e.getElement().removeEventListener("mouseup",e.modules.moveRow.mouseup)})),this.table.element.removeEventListener("mouseup",this.tableRowDropEvent),this.table.options.movableRowsReceivingStop.call(this.table,e)):console.warn("Move Row Error - trying to disconnect from non connected table")}},{key:"dropComplete",value:function(e,i,o){var n=!1;if(o){switch(t(this.table.options.movableRowsSender)){case"string":n=this.senders[this.table.options.movableRowsSender];break;case"function":n=this.table.options.movableRowsSender}n?n.call(this,this.moving.getComponent(),i?i.getComponent():void 0,e):this.table.options.movableRowsSender&&console.warn("Mover Row Error - no matching sender found:",this.table.options.movableRowsSender),this.table.options.movableRowsSent.call(this.table,this.moving.getComponent(),i?i.getComponent():void 0,e)}else this.table.options.movableRowsSentFailed.call(this.table,this.moving.getComponent(),i?i.getComponent():void 0,e);this.endMove()}},{key:"tableRowDrop",value:function(e,i){var o=!1,n=!1;switch(e.stopImmediatePropagation(),t(this.table.options.movableRowsReceiver)){case"string":o=this.receivers[this.table.options.movableRowsReceiver];break;case"function":o=this.table.options.movableRowsReceiver}o?n=o.call(this,this.connectedRow.getComponent(),i?i.getComponent():void 0,this.connectedTable):console.warn("Mover Row Error - no matching receiver found:",this.table.options.movableRowsReceiver),n?this.table.options.movableRowsReceived.call(this.table,this.connectedRow.getComponent(),i?i.getComponent():void 0,this.connectedTable):this.table.options.movableRowsReceivedFailed.call(this.table,this.connectedRow.getComponent(),i?i.getComponent():void 0,this.connectedTable),this.table.modules.comms.send(this.connectedTable,"moveRow","dropcomplete",{row:i,success:n})}},{key:"commsReceived",value:function(e,t,i){switch(t){case"connect":return this.connect(e,i.row);case"disconnect":return this.disconnect(e);case"dropcomplete":return this.dropComplete(e,i.row,i.success)}}}]),n}(R);ce.prototype.receivers={insert:function(e,t,i){return this.table.addRow(e.getData(),void 0,t),!0},add:function(e,t,i){return this.table.addRow(e.getData()),!0},update:function(e,t,i){return!!t&&(t.update(e.getData()),!0)},replace:function(e,t,i){return!!t&&(this.table.addRow(e.getData(),void 0,t),t.delete(),!0)}},ce.prototype.senders={delete:function(e,t,i){e.delete()}},ce.moduleName="moveRow";var de=function(e){s(n,e);var i=d(n);function n(e){var t;return o(this,n),(t=i.call(this,e)).allowedTypes=["","data","edit","clipboard"],t.enabled=!0,t}return a(n,[{key:"initializeColumn",value:function(e){var t=this,i=!1,o={};this.allowedTypes.forEach((function(n){var a,s="mutator"+(n.charAt(0).toUpperCase()+n.slice(1));e.definition[s]&&(a=t.lookupMutator(e.definition[s]))&&(i=!0,o[s]={mutator:a,params:e.definition[s+"Params"]||{}})})),i&&(e.modules.mutate=o)}},{key:"lookupMutator",value:function(e){var i=!1;switch(t(e)){case"string":n.mutators[e]?i=n.mutators[e]:console.warn("Mutator Error - No such mutator found, ignoring: ",e);break;case"function":i=e}return i}},{key:"transformRow",value:function(e,t,i){var o,n="mutator"+(t.charAt(0).toUpperCase()+t.slice(1));return this.enabled&&this.table.columnManager.traverse((function(a){var s,l,r;a.modules.mutate&&(s=a.modules.mutate[n]||a.modules.mutate.mutator||!1)&&(o=a.getFieldValue(void 0!==i?i:e),"data"!=t&&void 0===o||(r=a.getComponent(),l="function"==typeof s.params?s.params(o,e,t,r):s.params,a.setFieldValue(e,s.mutator(o,e,t,l,r))))})),e}},{key:"transformCell",value:function(e,t){var i=e.column.modules.mutate.mutatorEdit||e.column.modules.mutate.mutator||!1,o={};return i?(o=Object.assign(o,e.row.getData()),e.column.setFieldValue(o,t),i.mutator(t,o,"edit",i.params,e.getComponent())):t}},{key:"enable",value:function(){this.enabled=!0}},{key:"disable",value:function(){this.enabled=!1}}]),n}(R);de.moduleName="mutator",de.mutators={};var he=function(e){s(i,e);var t=d(i);function i(e){var n;return o(this,i),(n=t.call(this,e)).mode="local",n.progressiveLoad=!1,n.size=0,n.page=1,n.count=5,n.max=1,n.displayIndex=0,n.initialLoad=!0,n.pageSizes=[],n.dataReceivedNames={},n.dataSentNames={},n.createElements(),n}return a(i,[{key:"createElements",value:function(){var e;this.element=document.createElement("span"),this.element.classList.add("tabulator-paginator"),this.pagesElement=document.createElement("span"),this.pagesElement.classList.add("tabulator-pages"),(e=document.createElement("button")).classList.add("tabulator-page"),e.setAttribute("type","button"),e.setAttribute("role","button"),e.setAttribute("aria-label",""),e.setAttribute("title",""),this.firstBut=e.cloneNode(!0),this.firstBut.setAttribute("data-page","first"),this.prevBut=e.cloneNode(!0),this.prevBut.setAttribute("data-page","prev"),this.nextBut=e.cloneNode(!0),this.nextBut.setAttribute("data-page","next"),this.lastBut=e.cloneNode(!0),this.lastBut.setAttribute("data-page","last"),this.table.options.paginationSizeSelector&&(this.pageSizeSelect=document.createElement("select"),this.pageSizeSelect.classList.add("tabulator-page-size"))}},{key:"generatePageSizeSelectList",value:function(){var e=this,t=[];if(this.pageSizeSelect){if(Array.isArray(this.table.options.paginationSizeSelector))t=this.table.options.paginationSizeSelector,this.pageSizes=t,-1==this.pageSizes.indexOf(this.size)&&t.unshift(this.size);else if(-1==this.pageSizes.indexOf(this.size)){t=[];for(var i=1;i<5;i++)t.push(this.size*i);this.pageSizes=t}else t=this.pageSizes;for(;this.pageSizeSelect.firstChild;)this.pageSizeSelect.removeChild(this.pageSizeSelect.firstChild);t.forEach((function(t){var i=document.createElement("option");i.value=t,!0===t?e.table.modules.localize.bind("pagination|all",(function(e){i.innerHTML=e})):i.innerHTML=t,e.pageSizeSelect.appendChild(i)})),this.pageSizeSelect.value=this.size}}},{key:"initialize",value:function(e){var t,o,n,a=this;this.dataSentNames=Object.assign({},i.defaultDataSentNames),this.dataSentNames=Object.assign(this.dataSentNames,this.table.options.paginationDataSent),this.dataReceivedNames=Object.assign({},i.defaultDataReceivedNames),this.dataReceivedNames=Object.assign(this.dataReceivedNames,this.table.options.paginationDataReceived),this.table.modules.localize.bind("pagination|first",(function(e){a.firstBut.innerHTML=e})),this.table.modules.localize.bind("pagination|first_title",(function(e){a.firstBut.setAttribute("aria-label",e),a.firstBut.setAttribute("title",e)})),this.table.modules.localize.bind("pagination|prev",(function(e){a.prevBut.innerHTML=e})),this.table.modules.localize.bind("pagination|prev_title",(function(e){a.prevBut.setAttribute("aria-label",e),a.prevBut.setAttribute("title",e)})),this.table.modules.localize.bind("pagination|next",(function(e){a.nextBut.innerHTML=e})),this.table.modules.localize.bind("pagination|next_title",(function(e){a.nextBut.setAttribute("aria-label",e),a.nextBut.setAttribute("title",e)})),this.table.modules.localize.bind("pagination|last",(function(e){a.lastBut.innerHTML=e})),this.table.modules.localize.bind("pagination|last_title",(function(e){a.lastBut.setAttribute("aria-label",e),a.lastBut.setAttribute("title",e)})),this.firstBut.addEventListener("click",(function(){a.setPage(1).then((function(){})).catch((function(){}))})),this.prevBut.addEventListener("click",(function(){a.previousPage().then((function(){})).catch((function(){}))})),this.nextBut.addEventListener("click",(function(){a.nextPage().then((function(){})).catch((function(){}))})),this.lastBut.addEventListener("click",(function(){a.setPage(a.max).then((function(){})).catch((function(){}))})),this.table.options.paginationElement&&(this.element=this.table.options.paginationElement),this.pageSizeSelect&&(t=document.createElement("label"),this.table.modules.localize.bind("pagination|page_size",(function(e){a.pageSizeSelect.setAttribute("aria-label",e),a.pageSizeSelect.setAttribute("title",e),t.innerHTML=e})),this.element.appendChild(t),this.element.appendChild(this.pageSizeSelect),this.pageSizeSelect.addEventListener("change",(function(e){a.setPageSize("true"==a.pageSizeSelect.value||a.pageSizeSelect.value),a.setPage(1).then((function(){})).catch((function(){}))}))),this.element.appendChild(this.firstBut),this.element.appendChild(this.prevBut),this.element.appendChild(this.pagesElement),this.element.appendChild(this.nextBut),this.element.appendChild(this.lastBut),this.table.options.paginationElement||e||this.table.footerManager.append(this.element,this),this.mode=this.table.options.pagination,this.table.options.paginationSize?this.size=this.table.options.paginationSize:((o=document.createElement("div")).classList.add("tabulator-row"),o.style.visibility=e,(n=document.createElement("div")).classList.add("tabulator-cell"),n.innerHTML="Page Row Test",o.appendChild(n),this.table.rowManager.getTableElement().appendChild(o),this.size=Math.floor(this.table.rowManager.getElement().clientHeight/o.offsetHeight),this.table.rowManager.getTableElement().removeChild(o)),this.count=this.table.options.paginationButtonCount,this.generatePageSizeSelectList()}},{key:"initializeProgressive",value:function(e){this.initialize(!0),this.mode="progressive_"+e,this.progressiveLoad=!0}},{key:"setDisplayIndex",value:function(e){this.displayIndex=e}},{key:"getDisplayIndex",value:function(){return this.displayIndex}},{key:"setMaxRows",value:function(e){this.max=e?!0===this.size?1:Math.ceil(e/this.size):1,this.page>this.max&&(this.page=this.max)}},{key:"reset",value:function(e,t){return("local"==this.mode||e)&&(this.page=1),t&&(this.initialLoad=!0),!0}},{key:"setMaxPage",value:function(e){e=parseInt(e),this.max=e||1,this.page>this.max&&(this.page=this.max,this.trigger())}},{key:"setPage",value:function(e){var t=this;switch(e){case"first":return this.setPage(1);case"prev":return this.previousPage();case"next":return this.nextPage();case"last":return this.setPage(this.max)}return new Promise((function(i,o){(e=parseInt(e))>0&&e<=t.max||"local"!==t.mode?(t.page=e,t.trigger().then((function(){i()})).catch((function(){o()})),t.table.options.persistence&&t.table.modExists("persistence",!0)&&t.table.modules.persistence.config.page&&t.table.modules.persistence.save("page")):(console.warn("Pagination Error - Requested page is out of range of 1 - "+t.max+":",e),o())}))}},{key:"setPageToRow",value:function(e){var t=this;return new Promise((function(i,o){var n=t.table.rowManager.getDisplayRows(t.displayIndex-1).indexOf(e);if(n>-1){var a=!0===t.size?1:Math.ceil((n+1)/t.size);t.setPage(a).then((function(){i()})).catch((function(){o()}))}else console.warn("Pagination Error - Requested row is not visible"),o()}))}},{key:"setPageSize",value:function(e){!0!==e&&(e=parseInt(e)),e>0&&(this.size=e),this.pageSizeSelect&&this.generatePageSizeSelectList(),this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.page&&this.table.modules.persistence.save("page")}},{key:"_setPageButtons",value:function(){for(var e=Math.floor((this.count-1)/2),t=Math.ceil((this.count-1)/2),i=this.max-this.page+e+10&&n<=this.max&&this.pagesElement.appendChild(this._generatePageButton(n));this.footerRedraw()}},{key:"_generatePageButton",value:function(e){var t=this,i=document.createElement("button");return i.classList.add("tabulator-page"),e==this.page&&i.classList.add("active"),i.setAttribute("type","button"),i.setAttribute("role","button"),this.table.modules.localize.bind("pagination|page_title",(function(t){i.setAttribute("aria-label",t+" "+e),i.setAttribute("title",t+" "+e)})),i.setAttribute("data-page",e),i.textContent=e,i.addEventListener("click",(function(i){t.setPage(e).then((function(){})).catch((function(){}))})),i}},{key:"previousPage",value:function(){var e=this;return new Promise((function(t,i){e.page>1?(e.page--,e.trigger().then((function(){t()})).catch((function(){i()})),e.table.options.persistence&&e.table.modExists("persistence",!0)&&e.table.modules.persistence.config.page&&e.table.modules.persistence.save("page")):(console.warn("Pagination Error - Previous page would be less than page 1:",0),i())}))}},{key:"nextPage",value:function(){var e=this;return new Promise((function(t,i){e.page-1&&(n=n.substr(s),(i=n.indexOf(";"))>-1&&(n=n.substr(0,i)),o=n.replace(a+"=","")),!!o&&JSON.parse(o)}},pe={local:function(e,t,i){localStorage.setItem(e+"-"+t,JSON.stringify(i))},cookie:function(e,t,i){var o=new Date;o.setDate(o.getDate()+1e4),document.cookie=e+"-"+t+"="+JSON.stringify(i)+"; expires="+o.toUTCString()}},fe=function(e){s(i,e);var t=d(i);function i(e){var n;return o(this,i),(n=t.call(this,e)).mode="",n.id="",n.defWatcherBlock=!1,n.config={},n.readFunc=!1,n.writeFunc=!1,n}return a(i,[{key:"localStorageTest",value:function(){var e="_tabulator_test";try{return window.localStorage.setItem(e,e),window.localStorage.removeItem(e),!0}catch(e){return!1}}},{key:"initialize",value:function(){var e,t=this.table.options.persistenceMode,o=this.table.options.persistenceID;this.mode=!0!==t?t:this.localStorageTest()?"local":"cookie",this.table.options.persistenceReaderFunc?"function"==typeof this.table.options.persistenceReaderFunc?this.readFunc=this.table.options.persistenceReaderFunc:i.readers[this.table.options.persistenceReaderFunc]?this.readFunc=i.readers[this.table.options.persistenceReaderFunc]:console.warn("Persistence Read Error - invalid reader set",this.table.options.persistenceReaderFunc):i.readers[this.mode]?this.readFunc=i.readers[this.mode]:console.warn("Persistence Read Error - invalid reader set",this.mode),this.table.options.persistenceWriterFunc?"function"==typeof this.table.options.persistenceWriterFunc?this.writeFunc=this.table.options.persistenceWriterFunc:i.writers[this.table.options.persistenceWriterFunc]?this.writeFunc=i.writers[this.table.options.persistenceWriterFunc]:console.warn("Persistence Write Error - invalid reader set",this.table.options.persistenceWriterFunc):i.writers[this.mode]?this.writeFunc=i.writers[this.mode]:console.warn("Persistence Write Error - invalid writer set",this.mode),this.id="tabulator-"+(o||this.table.element.getAttribute("id")||""),this.config={sort:!0===this.table.options.persistence||this.table.options.persistence.sort,filter:!0===this.table.options.persistence||this.table.options.persistence.filter,group:!0===this.table.options.persistence||this.table.options.persistence.group,page:!0===this.table.options.persistence||this.table.options.persistence.page,columns:!0===this.table.options.persistence?["title","width","visible"]:this.table.options.persistence.columns},this.config.page&&(e=this.retreiveData("page"))&&(void 0===e.paginationSize||!0!==this.config.page&&!this.config.page.size||(this.table.options.paginationSize=e.paginationSize),void 0===e.paginationInitialPage||!0!==this.config.page&&!this.config.page.page||(this.table.options.paginationInitialPage=e.paginationInitialPage)),this.config.group&&(e=this.retreiveData("group"))&&(void 0===e.groupBy||!0!==this.config.group&&!this.config.group.groupBy||(this.table.options.groupBy=e.groupBy),void 0===e.groupStartOpen||!0!==this.config.group&&!this.config.group.groupStartOpen||(this.table.options.groupStartOpen=e.groupStartOpen),void 0===e.groupHeader||!0!==this.config.group&&!this.config.group.groupHeader||(this.table.options.groupHeader=e.groupHeader)),this.config.columns&&(this.table.options.columns=this.load("columns",this.table.options.columns))}},{key:"initializeColumn",value:function(e){var t;this.config.columns&&(this.defWatcherBlock=!0,t=e.getDefinition(),(!0===this.config.columns?Object.keys(t):this.config.columns).forEach((function(e){var i=Object.getOwnPropertyDescriptor(t,e),o=t[e];i&&Object.defineProperty(t,e,{set:function(e){o=e,this.defWatcherBlock||this.save("columns"),i.set&&i.set(e)},get:function(){return i.get&&i.get(),o}})})),this.defWatcherBlock=!1)}},{key:"load",value:function(e,t){var i=this.retreiveData(e);return t&&(i=i?this.mergeDefinition(t,i):t),i}},{key:"retreiveData",value:function(e){return!!this.readFunc&&this.readFunc(this.id,e)}},{key:"mergeDefinition",value:function(e,t){var i=this,o=[];return(t=t||[]).forEach((function(t,n){var a,s=i._findColumn(e,t);s&&(!0===i.config.columns||null==i.config.columns?(a=Object.keys(s)).push("width"):a=i.config.columns,a.forEach((function(e){"columns"!==e&&void 0!==t[e]&&(s[e]=t[e])})),s.columns&&(s.columns=i.mergeDefinition(s.columns,t.columns)),o.push(s))})),e.forEach((function(e,n){i._findColumn(t,e)||(o.length>n?o.splice(n,0,e):o.push(e))})),o}},{key:"_findColumn",value:function(e,t){var i=t.columns?"group":t.field?"field":"object";return e.find((function(e){switch(i){case"group":return e.title===t.title&&e.columns.length===t.columns.length;case"field":return e.field===t.field;case"object":return e===t}}))}},{key:"save",value:function(e){var t={};switch(e){case"columns":t=this.parseColumns(this.table.columnManager.getColumns());break;case"filter":t=this.table.modules.filter.getFilters();break;case"sort":t=this.validateSorters(this.table.modules.sort.getSort());break;case"group":t=this.getGroupConfig();break;case"page":t=this.getPageConfig()}this.writeFunc&&this.writeFunc(this.id,e,t)}},{key:"validateSorters",value:function(e){return e.forEach((function(e){e.column=e.field,delete e.field})),e}},{key:"getGroupConfig",value:function(){var e={};return this.config.group&&((!0===this.config.group||this.config.group.groupBy)&&(e.groupBy=this.table.options.groupBy),(!0===this.config.group||this.config.group.groupStartOpen)&&(e.groupStartOpen=this.table.options.groupStartOpen),(!0===this.config.group||this.config.group.groupHeader)&&(e.groupHeader=this.table.options.groupHeader)),e}},{key:"getPageConfig",value:function(){var e={};return this.config.page&&((!0===this.config.page||this.config.page.size)&&(e.paginationSize=this.table.modules.page.getPageSize()),(!0===this.config.page||this.config.page.page)&&(e.paginationInitialPage=this.table.modules.page.getPage())),e}},{key:"parseColumns",value:function(e){var t=this,i=[],o=["headerContextMenu","headerMenu","contextMenu","clickMenu"];return e.forEach((function(e){var n,a={},s=e.getDefinition();e.isGroup?(a.title=s.title,a.columns=t.parseColumns(e.getColumns())):(a.field=e.getField(),!0===t.config.columns||null==t.config.columns?(n=Object.keys(s)).push("width"):n=t.config.columns,n.forEach((function(t){switch(t){case"width":a.width=e.getWidth();break;case"visible":a.visible=e.visible;break;default:"function"!=typeof s[t]&&-1===o.indexOf(t)&&(a[t]=s[t])}}))),i.push(a)})),i}}]),i}(R);fe.moduleName="persistence",fe.readers=me,fe.writers=pe;var ge=function(e){s(i,e);var t=d(i);function i(e){var n;return o(this,i),(n=t.call(this,e)).element=!1,n.manualBlock=!1,n}return a(i,[{key:"initialize",value:function(){window.addEventListener("beforeprint",this.replaceTable.bind(this)),window.addEventListener("afterprint",this.cleanup.bind(this))}},{key:"replaceTable",value:function(){this.manualBlock||(this.element=document.createElement("div"),this.element.classList.add("tabulator-print-table"),this.element.appendChild(this.table.modules.export.genereateTable(this.table.options.printConfig,this.table.options.printStyled,this.table.options.printRowRange,"print")),this.table.element.style.display="none",this.table.element.parentNode.insertBefore(this.element,this.table.element))}},{key:"cleanup",value:function(){document.body.classList.remove("tabulator-print-fullscreen-hide"),this.element&&this.element.parentNode&&(this.element.parentNode.removeChild(this.element),this.table.element.style.display="")}},{key:"printFullscreen",value:function(e,t,i){var o,n,a=window.scrollX,s=window.scrollY,l=document.createElement("div"),r=document.createElement("div"),u=this.table.modules.export.genereateTable(void 0!==i?i:this.table.options.printConfig,void 0!==t?t:this.table.options.printStyled,e||this.table.options.printRowRange,"print");this.manualBlock=!0,this.element=document.createElement("div"),this.element.classList.add("tabulator-print-fullscreen"),this.table.options.printHeader&&(l.classList.add("tabulator-print-header"),"string"==typeof(o="function"==typeof this.table.options.printHeader?this.table.options.printHeader.call(this.table):this.table.options.printHeader)?l.innerHTML=o:l.appendChild(o),this.element.appendChild(l)),this.element.appendChild(u),this.table.options.printFooter&&(r.classList.add("tabulator-print-footer"),"string"==typeof(n="function"==typeof this.table.options.printFooter?this.table.options.printFooter.call(this.table):this.table.options.printFooter)?r.innerHTML=n:r.appendChild(n),this.element.appendChild(r)),document.body.classList.add("tabulator-print-fullscreen-hide"),document.body.appendChild(this.element),this.table.options.printFormatter&&this.table.options.printFormatter(this.element,u),window.print(),this.cleanup(),window.scrollTo(a,s),this.manualBlock=!1}}]),i}(R);ge.moduleName="print";var ve=function(e){s(i,e);var t=d(i);function i(e){var n;return o(this,i),(n=t.call(this,e)).data=!1,n.blocked=!1,n.origFuncs={},n.currentVersion=0,n}return a(i,[{key:"watchData",value:function(e){var t,i=this;this.currentVersion++,t=this.currentVersion,i.unwatchData(),i.data=e,i.origFuncs.push=e.push,Object.defineProperty(i.data,"push",{enumerable:!1,configurable:!0,value:function(){var o=Array.from(arguments);return i.blocked||t!==i.currentVersion||o.forEach((function(e){i.table.rowManager.addRowActual(e,!1)})),i.origFuncs.push.apply(e,arguments)}}),i.origFuncs.unshift=e.unshift,Object.defineProperty(i.data,"unshift",{enumerable:!1,configurable:!0,value:function(){var o=Array.from(arguments);return i.blocked||t!==i.currentVersion||o.forEach((function(e){i.table.rowManager.addRowActual(e,!0)})),i.origFuncs.unshift.apply(e,arguments)}}),i.origFuncs.shift=e.shift,Object.defineProperty(i.data,"shift",{enumerable:!1,configurable:!0,value:function(){var o;return i.blocked||t!==i.currentVersion||i.data.length&&(o=i.table.rowManager.getRowFromDataObject(i.data[0]))&&o.deleteActual(),i.origFuncs.shift.call(e)}}),i.origFuncs.pop=e.pop,Object.defineProperty(i.data,"pop",{enumerable:!1,configurable:!0,value:function(){var o;return i.blocked||t!==i.currentVersion||i.data.length&&(o=i.table.rowManager.getRowFromDataObject(i.data[i.data.length-1]))&&o.deleteActual(),i.origFuncs.pop.call(e)}}),i.origFuncs.splice=e.splice,Object.defineProperty(i.data,"splice",{enumerable:!1,configurable:!0,value:function(){var o,n=Array.from(arguments),a=n[0]<0?e.length+n[0]:n[0],s=n[1],l=!!n[2]&&n.slice(2);if(!i.blocked&&t===i.currentVersion){if(l&&((o=!!e[a]&&i.table.rowManager.getRowFromDataObject(e[a]))?l.forEach((function(e){i.table.rowManager.addRowActual(e,!0,o,!0)})):(l=l.slice().reverse()).forEach((function(e){i.table.rowManager.addRowActual(e,!0,!1,!0)}))),0!==s){var r=e.slice(a,void 0===n[1]?n[1]:a+s);r.forEach((function(e,t){var o=i.table.rowManager.getRowFromDataObject(e);o&&o.deleteActual(t!==r.length-1)}))}(l||0!==s)&&i.table.rowManager.reRenderInPosition()}return i.origFuncs.splice.apply(e,arguments)}})}},{key:"unwatchData",value:function(){if(!1!==this.data)for(var e in this.origFuncs)Object.defineProperty(this.data,e,{enumerable:!0,configurable:!0,writable:!0,value:this.origFuncs.key})}},{key:"watchRow",value:function(e){var t=e.getData();for(var i in this.blocked=!0,t)this.watchKey(e,t,i);this.table.options.dataTree&&this.watchTreeChildren(e),this.blocked=!1}},{key:"watchTreeChildren",value:function(e){var t=this,i=e.getData()[this.table.options.dataTreeChildField],o={};function n(){t.table.modules.dataTree.initializeRow(e),t.table.modules.dataTree.layoutRow(e),t.table.rowManager.refreshActiveData("tree",!1,!0)}i&&(o.push=i.push,Object.defineProperty(i,"push",{enumerable:!1,configurable:!0,value:function(){var e=o.push.apply(i,arguments);return n(),e}}),o.unshift=i.unshift,Object.defineProperty(i,"unshift",{enumerable:!1,configurable:!0,value:function(){var e=o.unshift.apply(i,arguments);return n(),e}}),o.shift=i.shift,Object.defineProperty(i,"shift",{enumerable:!1,configurable:!0,value:function(){var e=o.shift.call(i);return n(),e}}),o.pop=i.pop,Object.defineProperty(i,"pop",{enumerable:!1,configurable:!0,value:function(){var e=o.pop.call(i);return n(),e}}),o.splice=i.splice,Object.defineProperty(i,"splice",{enumerable:!1,configurable:!0,value:function(){var e=o.splice.apply(i,arguments);return n(),e}}))}},{key:"watchKey",value:function(e,t,i){var o=this,n=Object.getOwnPropertyDescriptor(t,i),a=t[i],s=this.currentVersion;Object.defineProperty(t,i,{set:function(t){if(a=t,!o.blocked&&s===o.currentVersion){var l={};l[i]=t,e.updateData(l)}n.set&&n.set(t)},get:function(){return n.get&&n.get(),a}})}},{key:"unwatchRow",value:function(e){var t=e.getData();for(var i in t)Object.defineProperty(t,i,{value:t[i]})}},{key:"block",value:function(){this.blocked=!0}},{key:"unblock",value:function(){this.blocked=!1}}]),i}(R);ve.moduleName="reactiveData";var be=function(e){s(i,e);var t=d(i);function i(e){var n;return o(this,i),(n=t.call(this,e)).startColumn=!1,n.startX=!1,n.startWidth=!1,n.handle=null,n.prevHandle=null,n}return a(i,[{key:"initializeColumn",value:function(e,t,i){var o=this,n=!1,a=this.table.options.resizableColumns;if("header"===e&&(n="textarea"==t.definition.formatter||t.definition.variableHeight,t.modules.resize={variableHeight:n}),!0===a||a==e){var s=document.createElement("div");s.className="tabulator-col-resize-handle";var l=document.createElement("div");l.className="tabulator-col-resize-handle prev",s.addEventListener("click",(function(e){e.stopPropagation()}));var r=function(e){var i=t.getLastColumn();i&&o._checkResizability(i)&&(o.startColumn=t,o._mouseDown(e,i,s))};s.addEventListener("mousedown",r),s.addEventListener("touchstart",r,{passive:!0}),s.addEventListener("dblclick",(function(e){var i=t.getLastColumn();i&&o._checkResizability(i)&&(e.stopPropagation(),i.reinitializeWidth(!0))})),l.addEventListener("click",(function(e){e.stopPropagation()}));var u=function(e){var i,n,a;(i=t.getFirstColumn())&&(a=(n=o.table.columnManager.findColumnIndex(i))>0&&o.table.columnManager.getColumnByIndex(n-1))&&o._checkResizability(a)&&(o.startColumn=t,o._mouseDown(e,a,l))};l.addEventListener("mousedown",u),l.addEventListener("touchstart",u,{passive:!0}),l.addEventListener("dblclick",(function(e){var i,n,a;(i=t.getFirstColumn())&&(a=(n=o.table.columnManager.findColumnIndex(i))>0&&o.table.columnManager.getColumnByIndex(n-1))&&o._checkResizability(a)&&(e.stopPropagation(),a.reinitializeWidth(!0))})),i.appendChild(s),i.appendChild(l)}}},{key:"_checkResizability",value:function(e){return void 0!==e.definition.resizable?e.definition.resizable:this.table.options.resizableColumns}},{key:"_mouseDown",value:function(e,t,i){var o=this;function n(e){o.table.rtl?t.setWidth(o.startWidth-((void 0===e.screenX?e.touches[0].screenX:e.screenX)-o.startX)):t.setWidth(o.startWidth+((void 0===e.screenX?e.touches[0].screenX:e.screenX)-o.startX)),o.table.options.virtualDomHoz&&o.table.vdomHoz.reinitialize(!0),!o.table.browserSlow&&t.modules.resize&&t.modules.resize.variableHeight&&t.checkCellHeights()}function a(e){o.startColumn.modules.edit&&(o.startColumn.modules.edit.blocked=!1),o.table.browserSlow&&t.modules.resize&&t.modules.resize.variableHeight&&t.checkCellHeights(),document.body.removeEventListener("mouseup",a),document.body.removeEventListener("mousemove",n),i.removeEventListener("touchmove",n),i.removeEventListener("touchend",a),o.table.element.classList.remove("tabulator-block-select"),o.table.options.persistence&&o.table.modExists("persistence",!0)&&o.table.modules.persistence.config.columns&&o.table.modules.persistence.save("columns"),o.table.options.columnResized.call(o.table,t.getComponent())}o.table.element.classList.add("tabulator-block-select"),e.stopPropagation(),o.startColumn.modules.edit&&(o.startColumn.modules.edit.blocked=!0),o.startX=void 0===e.screenX?e.touches[0].screenX:e.screenX,o.startWidth=t.getWidth(),document.body.addEventListener("mousemove",n),document.body.addEventListener("mouseup",a),i.addEventListener("touchmove",n,{passive:!0}),i.addEventListener("touchend",a)}}]),i}(R);be.moduleName="resizeColumns";var we=function(e){s(i,e);var t=d(i);function i(e){var n;return o(this,i),(n=t.call(this,e)).startColumn=!1,n.startY=!1,n.startHeight=!1,n.handle=null,n.prevHandle=null,n}return a(i,[{key:"initializeRow",value:function(e){var t=this,i=e.getElement(),o=document.createElement("div");o.className="tabulator-row-resize-handle";var n=document.createElement("div");n.className="tabulator-row-resize-handle prev",o.addEventListener("click",(function(e){e.stopPropagation()}));var a=function(i){t.startRow=e,t._mouseDown(i,e,o)};o.addEventListener("mousedown",a),o.addEventListener("touchstart",a,{passive:!0}),n.addEventListener("click",(function(e){e.stopPropagation()}));var s=function(i){var o=t.table.rowManager.prevDisplayRow(e);o&&(t.startRow=o,t._mouseDown(i,o,n))};n.addEventListener("mousedown",s),n.addEventListener("touchstart",s,{passive:!0}),i.appendChild(o),i.appendChild(n)}},{key:"_mouseDown",value:function(e,t,i){var o=this;function n(e){t.setHeight(o.startHeight+((void 0===e.screenY?e.touches[0].screenY:e.screenY)-o.startY))}function a(e){document.body.removeEventListener("mouseup",n),document.body.removeEventListener("mousemove",n),i.removeEventListener("touchmove",n),i.removeEventListener("touchend",a),o.table.element.classList.remove("tabulator-block-select"),o.table.options.rowResized.call(this.table,t.getComponent())}o.table.element.classList.add("tabulator-block-select"),e.stopPropagation(),o.startY=void 0===e.screenY?e.touches[0].screenY:e.screenY,o.startHeight=t.getHeight(),document.body.addEventListener("mousemove",n),document.body.addEventListener("mouseup",a),i.addEventListener("touchmove",n,{passive:!0}),i.addEventListener("touchend",a)}}]),i}(R);we.moduleName="resizeRows";var ye=function(e){s(i,e);var t=d(i);function i(e){var n;return o(this,i),(n=t.call(this,e)).binding=!1,n.observer=!1,n.containerObserver=!1,n.tableHeight=0,n.tableWidth=0,n.containerHeight=0,n.containerWidth=0,n.autoResize=!1,n}return a(i,[{key:"initialize",value:function(e){var t,i=this,o=this.table;this.tableHeight=o.element.clientHeight,this.tableWidth=o.element.clientWidth,o.element.parentNode&&(this.containerHeight=o.element.parentNode.clientHeight,this.containerWidth=o.element.parentNode.clientWidth),"undefined"!=typeof ResizeObserver&&"virtual"===o.rowManager.getRenderMode()?(this.autoResize=!0,this.observer=new ResizeObserver((function(e){if(!o.browserMobile||o.browserMobile&&!o.modules.edit.currentCell){var t=Math.floor(e[0].contentRect.height),n=Math.floor(e[0].contentRect.width);i.tableHeight==t&&i.tableWidth==n||(i.tableHeight=t,i.tableWidth=n,o.element.parentNode&&(i.containerHeight=o.element.parentNode.clientHeight,i.containerWidth=o.element.parentNode.clientWidth),o.options.virtualDomHoz&&o.vdomHoz.reinitialize(!0),o.redraw())}})),this.observer.observe(o.element),t=window.getComputedStyle(o.element),this.table.element.parentNode&&!this.table.rowManager.fixedHeight&&(t.getPropertyValue("max-height")||t.getPropertyValue("min-height"))&&(this.containerObserver=new ResizeObserver((function(e){if(!o.browserMobile||o.browserMobile&&!o.modules.edit.currentCell){var t=Math.floor(e[0].contentRect.height),n=Math.floor(e[0].contentRect.width);i.containerHeight==t&&i.containerWidth==n||(i.containerHeight=t,i.containerWidth=n,i.tableHeight=o.element.clientHeight,i.tableWidth=o.element.clientWidth),o.options.virtualDomHoz&&o.vdomHoz.reinitialize(!0),o.redraw()}})),this.containerObserver.observe(this.table.element.parentNode))):(this.binding=function(){(!o.browserMobile||o.browserMobile&&!o.modules.edit.currentCell)&&(o.options.virtualDomHoz&&o.vdomHoz.reinitialize(!0),o.redraw())},window.addEventListener("resize",this.binding))}},{key:"clearBindings",value:function(e){this.binding&&window.removeEventListener("resize",this.binding),this.observer&&this.observer.unobserve(this.table.element),this.containerObserver&&this.containerObserver.unobserve(this.table.element.parentNode)}}]),i}(R);ye.moduleName="resizeTable";var Ee=function(e){s(i,e);var t=d(i);function i(e){var n;return o(this,i),(n=t.call(this,e)).columns=[],n.hiddenColumns=[],n.mode="",n.index=0,n.collapseFormatter=[],n.collapseStartOpen=!0,n.collapseHandleColumn=!1,n}return a(i,[{key:"initialize",value:function(){var e=this,t=[];this.mode=this.table.options.responsiveLayout,this.collapseFormatter=this.table.options.responsiveLayoutCollapseFormatter||this.formatCollapsedData,this.collapseStartOpen=this.table.options.responsiveLayoutCollapseStartOpen,this.hiddenColumns=[],this.table.columnManager.columnsByIndex.forEach((function(i,o){i.modules.responsive&&i.modules.responsive.order&&i.modules.responsive.visible&&(i.modules.responsive.index=o,t.push(i),i.visible||"collapse"!==e.mode||e.hiddenColumns.push(i))})),t=(t=t.reverse()).sort((function(e,t){return t.modules.responsive.order-e.modules.responsive.order||t.modules.responsive.index-e.modules.responsive.index})),this.columns=t,"collapse"===this.mode&&this.generateCollapsedContent();var i,o=m(this.table.columnManager.columnsByIndex);try{for(o.s();!(i=o.n()).done;){var n=i.value;if("responsiveCollapse"==n.definition.formatter){this.collapseHandleColumn=n;break}}}catch(e){o.e(e)}finally{o.f()}this.collapseHandleColumn&&(this.hiddenColumns.length?this.collapseHandleColumn.show():this.collapseHandleColumn.hide())}},{key:"initializeColumn",value:function(e){var t=e.getDefinition();e.modules.responsive={order:void 0===t.responsive?1:t.responsive,visible:!1!==t.visible}}},{key:"initializeRow",value:function(e){var t;"calc"!==e.type&&((t=document.createElement("div")).classList.add("tabulator-responsive-collapse"),e.modules.responsiveLayout={element:t,open:this.collapseStartOpen},this.collapseStartOpen||(t.style.display="none"))}},{key:"layoutRow",value:function(e){var t=e.getElement();e.modules.responsiveLayout&&(t.appendChild(e.modules.responsiveLayout.element),this.generateCollapsedRowContent(e))}},{key:"updateColumnVisibility",value:function(e,t){e.modules.responsive&&(e.modules.responsive.visible=t,this.initialize())}},{key:"hideColumn",value:function(e){var t=this.hiddenColumns.length;e.hide(!1,!0),"collapse"===this.mode&&(this.hiddenColumns.unshift(e),this.generateCollapsedContent(),this.collapseHandleColumn&&!t&&this.collapseHandleColumn.show())}},{key:"showColumn",value:function(e){var t;e.show(!1,!0),e.setWidth(e.getWidth()),"collapse"===this.mode&&((t=this.hiddenColumns.indexOf(e))>-1&&this.hiddenColumns.splice(t,1),this.generateCollapsedContent(),this.collapseHandleColumn&&!this.hiddenColumns.length&&this.collapseHandleColumn.hide())}},{key:"update",value:function(){for(var e=this,t=!0;t;){var i="fitColumns"==e.table.modules.layout.getMode()?e.table.columnManager.getFlexBaseWidth():e.table.columnManager.getWidth(),o=(e.table.options.headerVisible?e.table.columnManager.element.clientWidth:e.table.element.clientWidth)-i;if(o<0){var n=e.columns[e.index];n?(e.hideColumn(n),e.index++):t=!1}else{var a=e.columns[e.index-1];a&&o>0&&o>=a.getWidth()?(e.showColumn(a),e.index--):t=!1}e.table.rowManager.activeRowsCount||e.table.rowManager.renderEmptyScroll()}}},{key:"generateCollapsedContent",value:function(){var e=this;this.table.rowManager.getDisplayRows().forEach((function(t){e.generateCollapsedRowContent(t)}))}},{key:"generateCollapsedRowContent",value:function(e){var t,i;if(e.modules.responsiveLayout){for(t=e.modules.responsiveLayout.element;t.firstChild;)t.removeChild(t.firstChild);(i=this.collapseFormatter(this.generateCollapsedRowData(e)))&&t.appendChild(i)}}},{key:"generateCollapsedRowData",value:function(e){var t,i=this,o=e.getData(),n=[];return this.hiddenColumns.forEach((function(a){var s=a.getFieldValue(o);a.definition.title&&a.field&&(a.modules.format&&i.table.options.responsiveLayoutCollapseUseFormatters?(t={value:!1,data:{},getValue:function(){return s},getData:function(){return o},getElement:function(){return document.createElement("div")},getRow:function(){return e.getComponent()},getColumn:function(){return a.getComponent()}},n.push({field:a.field,title:a.definition.title,value:a.modules.format.formatter.call(i.table.modules.format,t,a.modules.format.params)})):n.push({field:a.field,title:a.definition.title,value:s}))})),n}},{key:"formatCollapsedData",value:function(e){var t=document.createElement("table");return e.forEach((function(e){var i,o=document.createElement("tr"),n=document.createElement("td"),a=document.createElement("td"),s=document.createElement("strong");n.appendChild(s),this.table.modules.localize.bind("columns|"+e.field,(function(t){s.innerText=t||e.title})),e.value instanceof Node?((i=document.createElement("div")).appendChild(e.value),a.appendChild(i)):a.innerHTML=e.value,o.appendChild(n),o.appendChild(a),t.appendChild(o)}),this),Object.keys(e).length?t:""}}]),i}(R);Ee.moduleName="responsiveLayout";var Ce=function(e){s(n,e);var i=d(n);function n(e){var t;return o(this,n),(t=i.call(this,e)).selecting=!1,t.lastClickedRow=!1,t.selectPrev=[],t.selectedRows=[],t.headerCheckboxElement=null,t}return a(n,[{key:"clearSelectionData",value:function(e){this.selecting=!1,this.lastClickedRow=!1,this.selectPrev=[],this.selectedRows=[],e||this._rowSelectionChanged()}},{key:"initializeRow",value:function(e){var t=this,i=e.getElement(),o=function e(){setTimeout((function(){t.selecting=!1}),50),document.body.removeEventListener("mouseup",e)};e.modules.select={selected:!1},t.table.options.selectableCheck.call(this.table,e.getComponent())?(i.classList.add("tabulator-selectable"),i.classList.remove("tabulator-unselectable"),t.table.options.selectable&&"highlight"!=t.table.options.selectable&&("click"===t.table.options.selectableRangeMode?i.addEventListener("click",(function(i){if(i.shiftKey){t.table._clearSelection(),t.lastClickedRow=t.lastClickedRow||e;var o=t.table.rowManager.getDisplayRowIndex(t.lastClickedRow),n=t.table.rowManager.getDisplayRowIndex(e),a=o<=n?o:n,s=o>=n?o:n,l=t.table.rowManager.getDisplayRows().slice(0).splice(a,s-a+1);i.ctrlKey||i.metaKey?(l.forEach((function(i){i!==t.lastClickedRow&&(!0===t.table.options.selectable||t.isRowSelected(e)||t.selectedRows.lengtht.table.options.selectable&&(l=l.slice(0,t.table.options.selectable)),t.selectRows(l)),t.table._clearSelection()}else i.ctrlKey||i.metaKey?(t.toggleRow(e),t.lastClickedRow=e):(t.deselectRows(void 0,!0),t.selectRows(e),t.lastClickedRow=e)})):(i.addEventListener("click",(function(i){t.table.modExists("edit")&&t.table.modules.edit.getCurrentCell()||t.table._clearSelection(),t.selecting||t.toggleRow(e)})),i.addEventListener("mousedown",(function(i){if(i.shiftKey)return t.table._clearSelection(),t.selecting=!0,t.selectPrev=[],document.body.addEventListener("mouseup",o),document.body.addEventListener("keyup",o),t.toggleRow(e),!1})),i.addEventListener("mouseenter",(function(i){t.selecting&&(t.table._clearSelection(),t.toggleRow(e),t.selectPrev[1]==e&&t.toggleRow(t.selectPrev[0]))})),i.addEventListener("mouseout",(function(i){t.selecting&&(t.table._clearSelection(),t.selectPrev.unshift(e))}))))):(i.classList.add("tabulator-unselectable"),i.classList.remove("tabulator-selectable"))}},{key:"toggleRow",value:function(e){this.table.options.selectableCheck.call(this.table,e.getComponent())&&(e.modules.select&&e.modules.select.selected?this._deselectRow(e):this._selectRow(e))}},{key:"selectRows",value:function(e){var i,o=this;switch(t(e)){case"undefined":this.table.rowManager.rows.forEach((function(e){o._selectRow(e,!0,!0)})),this._rowSelectionChanged();break;case"string":(i=this.table.rowManager.findRow(e))?this._selectRow(i,!0,!0):this.table.rowManager.getRows(e).forEach((function(e){o._selectRow(e,!0,!0)})),this._rowSelectionChanged();break;default:Array.isArray(e)?(e.forEach((function(e){o._selectRow(e,!0,!0)})),this._rowSelectionChanged()):this._selectRow(e,!1,!0)}}},{key:"_selectRow",value:function(e,t,i){if(!isNaN(this.table.options.selectable)&&!0!==this.table.options.selectable&&!i&&this.selectedRows.length>=this.table.options.selectable){if(!this.table.options.selectableRollingSelection)return!1;this._deselectRow(this.selectedRows[0])}var o=this.table.rowManager.findRow(e);o?-1==this.selectedRows.indexOf(o)&&(o.getElement().classList.add("tabulator-selected"),o.modules.select||(o.modules.select={}),o.modules.select.selected=!0,o.modules.select.checkboxEl&&(o.modules.select.checkboxEl.checked=!0),this.selectedRows.push(o),this.table.options.dataTreeSelectPropagate&&this.childRowSelection(o,!0),t||this.table.options.rowSelected.call(this.table,o.getComponent()),this._rowSelectionChanged(t)):t||console.warn("Selection Error - No such row found, ignoring selection:"+e)}},{key:"isRowSelected",value:function(e){return-1!==this.selectedRows.indexOf(e)}},{key:"deselectRows",value:function(e,t){var i,o=this;if(void 0===e){i=o.selectedRows.length;for(var n=0;n-1&&(n.getElement().classList.remove("tabulator-selected"),n.modules.select||(n.modules.select={}),n.modules.select.selected=!1,n.modules.select.checkboxEl&&(n.modules.select.checkboxEl.checked=!1),o.selectedRows.splice(i,1),this.table.options.dataTreeSelectPropagate&&this.childRowSelection(n,!1),t||o.table.options.rowDeselected.call(this.table,n.getComponent()),o._rowSelectionChanged(t)):t||console.warn("Deselection Error - No such row found, ignoring selection:"+e)}},{key:"getSelectedData",value:function(){var e=[];return this.selectedRows.forEach((function(t){e.push(t.getData())})),e}},{key:"getSelectedRows",value:function(){var e=[];return this.selectedRows.forEach((function(t){e.push(t.getComponent())})),e}},{key:"_rowSelectionChanged",value:function(e){this.headerCheckboxElement&&(0===this.selectedRows.length?(this.headerCheckboxElement.checked=!1,this.headerCheckboxElement.indeterminate=!1):this.table.rowManager.rows.length===this.selectedRows.length?(this.headerCheckboxElement.checked=!0,this.headerCheckboxElement.indeterminate=!1):(this.headerCheckboxElement.indeterminate=!0,this.headerCheckboxElement.checked=!1)),e||this.table.options.rowSelectionChanged.call(this.table,this.getSelectedData(),this.getSelectedRows())}},{key:"registerRowSelectCheckbox",value:function(e,t){e._row.modules.select||(e._row.modules.select={}),e._row.modules.select.checkboxEl=t}},{key:"registerHeaderSelectCheckbox",value:function(e){this.headerCheckboxElement=e}},{key:"childRowSelection",value:function(e,t){var i=this.table.modules.dataTree.getChildren(e,!0);if(t){var o,n=m(i);try{for(n.s();!(o=n.n()).done;){var a=o.value;this._selectRow(a,!0)}}catch(e){n.e(e)}finally{n.f()}}else{var s,l=m(i);try{for(l.s();!(s=l.n()).done;){var r=s.value;this._deselectRow(r,!0)}}catch(e){l.e(e)}finally{l.f()}}}}]),n}(R);function ke(e,t,i,o,n,a,s){var l=s.format||"DD/MM/YYYY HH:mm:ss",r=s.alignEmptyValues,u=0;if("undefined"!=typeof moment){if(e=moment(e,l),t=moment(t,l),e.isValid()){if(t.isValid())return e-t;u=1}else u=t.isValid()?-1:0;return("top"===r&&"desc"===a||"bottom"===r&&"asc"===a)&&(u*=-1),u}console.error("Sort Error - 'datetime' sorter is dependant on moment.js")}Ce.moduleName="selectRow";var xe={number:function(e,t,i,o,n,a,s){var l=s.alignEmptyValues,r=s.decimalSeparator,u=s.thousandSeparator,c=0;if(e=String(e),t=String(t),u&&(e=e.split(u).join(""),t=t.split(u).join("")),r&&(e=e.split(r).join("."),t=t.split(r).join(".")),e=parseFloat(e),t=parseFloat(t),isNaN(e))c=isNaN(t)?0:-1;else{if(!isNaN(t))return e-t;c=1}return("top"===l&&"desc"===a||"bottom"===l&&"asc"===a)&&(c*=-1),c},string:function(e,i,o,n,a,s,l){var r,u=l.alignEmptyValues,c=0;if(e){if(i){switch(t(l.locale)){case"boolean":l.locale&&(r=this.table.modules.localize.getLocale());break;case"string":r=l.locale}return String(e).toLowerCase().localeCompare(String(i).toLowerCase(),r)}c=1}else c=i?-1:0;return("top"===u&&"desc"===s||"bottom"===u&&"asc"===s)&&(c*=-1),c},date:function(e,t,i,o,n,a,s){return s.format||(s.format="DD/MM/YYYY"),ke.call(this,e,t,i,o,n,a,s)},time:function(e,t,i,o,n,a,s){return s.format||(s.format="HH:mm"),ke.call(this,e,t,i,o,n,a,s)},datetime:ke,boolean:function(e,t,i,o,n,a,s){return(!0===e||"true"===e||"True"===e||1===e?1:0)-(!0===t||"true"===t||"True"===t||1===t?1:0)},array:function(e,t,i,o,n,a,s){var l=s.type||"length",r=s.alignEmptyValues,u=0;function c(e){switch(l){case"length":return e.length;case"sum":return e.reduce((function(e,t){return e+t}));case"max":return Math.max.apply(null,e);case"min":return Math.min.apply(null,e);case"avg":return e.reduce((function(e,t){return e+t}))/e.length}}if(Array.isArray(e)){if(Array.isArray(t))return(e?c(e):0)-(t?c(t):0);r=1}else r=Array.isArray(t)?-1:0;return("top"===r&&"desc"===a||"bottom"===r&&"asc"===a)&&(u*=-1),u},exists:function(e,t,i,o,n,a,s){return(void 0===e?0:1)-(void 0===t?0:1)},alphanum:function(e,t,i,o,n,a,s){var l,r,u,c,d,h=0,m=/(\d+)|(\D+)/g,p=/\d/,f=s.alignEmptyValues,g=0;if(e||0===e){if(t||0===t){if(isFinite(e)&&isFinite(t))return e-t;if((l=String(e).toLowerCase())===(r=String(t).toLowerCase()))return 0;if(!p.test(l)||!p.test(r))return l>r?1:-1;for(l=l.match(m),r=r.match(m),d=l.length>r.length?r.length:l.length;hc?1:-1;return l.length>r.length}g=1}else g=t||0===t?-1:0;return("top"===f&&"desc"===a||"bottom"===f&&"asc"===a)&&(g*=-1),g}},Re=function(e){s(n,e);var i=d(n);function n(e){var t;return o(this,n),(t=i.call(this,e)).sortList=[],t.changed=!1,t}return a(n,[{key:"initializeColumn",value:function(e,i){var o,a,s=this,l=!1;switch(t(e.definition.sorter)){case"string":n.sorters[e.definition.sorter]?l=n.sorters[e.definition.sorter]:console.warn("Sort Error - No such sorter found: ",e.definition.sorter);break;case"function":l=e.definition.sorter}e.modules.sort={sorter:l,dir:"none",params:e.definition.sorterParams||{},startingDir:e.definition.headerSortStartingDir||"asc",tristate:void 0!==e.definition.headerSortTristate?e.definition.headerSortTristate:this.table.options.headerSortTristate},(void 0===e.definition.headerSort?!1!==this.table.options.headerSort:!1!==e.definition.headerSort)&&((o=e.getElement()).classList.add("tabulator-sortable"),(a=document.createElement("div")).classList.add("tabulator-col-sorter"),"object"==t(this.table.options.headerSortElement)?a.appendChild(this.table.options.headerSortElement):a.innerHTML=this.table.options.headerSortElement,i.appendChild(a),e.modules.sort.element=a,o.addEventListener("click",(function(t){var i="",o=[],n=!1;if(e.modules.sort){if(e.modules.sort.tristate)i="none"==e.modules.sort.dir?e.modules.sort.startingDir:e.modules.sort.dir==e.modules.sort.startingDir?"asc"==e.modules.sort.dir?"desc":"asc":"none";else switch(e.modules.sort.dir){case"asc":i="desc";break;case"desc":i="asc";break;default:i=e.modules.sort.startingDir}s.table.options.columnHeaderSortMulti&&(t.shiftKey||t.ctrlKey)?((n=(o=s.getSort()).findIndex((function(t){return t.field===e.getField()})))>-1?(o[n].dir=i,n!=o.length-1&&(n=o.splice(n,1)[0],"none"!=i&&o.push(n))):"none"!=i&&o.push({column:e,dir:i}),s.setSort(o)):"none"==i?s.clear():s.setSort(e,i),s.table.rowManager.sorterRefresh(!s.sortList.length)}})))}},{key:"hasChanged",value:function(){var e=this.changed;return this.changed=!1,e}},{key:"getSort",value:function(){var e=[];return this.sortList.forEach((function(t){t.column&&e.push({column:t.column.getComponent(),field:t.column.getField(),dir:t.dir})})),e}},{key:"setSort",value:function(e,t){var i=this,o=[];Array.isArray(e)||(e=[{column:e,dir:t}]),e.forEach((function(e){var t;(t=i.table.columnManager.findColumn(e.column))?(e.column=t,o.push(e),i.changed=!0):console.warn("Sort Warning - Sort field does not exist and is being ignored: ",e.column)})),i.sortList=o,this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.sort&&this.table.modules.persistence.save("sort")}},{key:"clear",value:function(){this.setSort([])}},{key:"findSorter",value:function(e){var i,o=this.table.rowManager.activeRows[0],a="string";if(o&&(o=o.getData(),e.getField()))switch(t(i=e.getFieldValue(o))){case"undefined":a="string";break;case"boolean":a="boolean";break;default:isNaN(i)||""===i?i.match(/((^[0-9]+[a-z]+)|(^[a-z]+[0-9]+))+$/i)&&(a="alphanum"):a="number"}return n.sorters[a]}},{key:"sort",value:function(e){var t=this,i=this.table.options.sortOrderReverse?t.sortList.slice().reverse():t.sortList,o=[],n=[];t.table.options.dataSorting&&t.table.options.dataSorting.call(t.table,t.getSort()),t.clearColumnHeaders(),t.table.options.ajaxSorting?i.forEach((function(e,i){t.setColumnHeader(e.column,e.dir)})):(i.forEach((function(e,i){var n=e.column.modules.sort;e.column&&n&&(n.sorter||(n.sorter=t.findSorter(e.column)),e.params="function"==typeof n.params?n.params(e.column.getComponent(),e.dir):n.params,o.push(e)),t.setColumnHeader(e.column,e.dir)})),o.length&&t._sortItems(e,o)),t.table.options.dataSorted&&(e.forEach((function(e){n.push(e.getComponent())})),t.table.options.dataSorted.call(t.table,t.getSort(),n))}},{key:"clearColumnHeaders",value:function(){this.table.columnManager.getRealColumns().forEach((function(e){e.modules.sort&&(e.modules.sort.dir="none",e.getElement().setAttribute("aria-sort","none"))}))}},{key:"setColumnHeader",value:function(e,t){e.modules.sort.dir=t,e.getElement().setAttribute("aria-sort",t)}},{key:"_sortItems",value:function(e,t){var i=this,o=t.length-1;e.sort((function(e,n){for(var a,s=o;s>=0;s--){var l=t[s];if(0!==(a=i._sortRow(e,n,l.column,l.dir,l.params)))break}return a}))}},{key:"_sortRow",value:function(e,t,i,o,n){var a,s,l="asc"==o?e:t,r="asc"==o?t:e;return e=void 0!==(e=i.getFieldValue(l.getData()))?e:"",t=void 0!==(t=i.getFieldValue(r.getData()))?t:"",a=l.getComponent(),s=r.getComponent(),i.modules.sort.sorter.call(this,e,t,a,s,i.getComponent(),o,n)}}]),n}(R);Re.moduleName="sort",Re.sorters=xe;var Me={integer:function(e,t,i){return""===t||null==t||"number"==typeof(t=Number(t))&&isFinite(t)&&Math.floor(t)===t},float:function(e,t,i){return""===t||null==t||"number"==typeof(t=Number(t))&&isFinite(t)&&t%1!=0},numeric:function(e,t,i){return""===t||null==t||!isNaN(t)},string:function(e,t,i){return""===t||null==t||isNaN(t)},max:function(e,t,i){return""===t||null==t||parseFloat(t)<=i},min:function(e,t,i){return""===t||null==t||parseFloat(t)>=i},starts:function(e,t,i){return""===t||null==t||String(t).toLowerCase().startsWith(String(i).toLowerCase())},ends:function(e,t,i){return""===t||null==t||String(t).toLowerCase().endsWith(String(i).toLowerCase())},minLength:function(e,t,i){return""===t||null==t||String(t).length>=i},maxLength:function(e,t,i){return""===t||null==t||String(t).length<=i},in:function(e,t,i){return""===t||null==t||("string"==typeof i&&(i=i.split("|")),""===t||i.indexOf(t)>-1)},regex:function(e,t,i){return""===t||null==t||new RegExp(i).test(t)},unique:function(e,t,i){if(""===t||null==t)return!0;var o=!0,n=e.getData(),a=e.getColumn()._getSelf();return this.table.rowManager.rows.forEach((function(e){var i=e.getData();i!==n&&t==a.getFieldValue(i)&&(o=!1)})),o},required:function(e,t,i){return""!==t&&null!=t}},Le=function(e){s(n,e);var i=d(n);function n(e){var t;return o(this,n),(t=i.call(this,e)).invalidCells=[],t}return a(n,[{key:"initializeColumn",value:function(e){var t,i=this,o=[];e.definition.validator&&(Array.isArray(e.definition.validator)?e.definition.validator.forEach((function(e){(t=i._extractValidator(e))&&o.push(t)})):(t=this._extractValidator(e.definition.validator))&&o.push(t),e.modules.validate=!!o.length&&o)}},{key:"_extractValidator",value:function(e){var i,o,n;switch(t(e)){case"string":return(n=e.indexOf(":"))>-1?(i=e.substring(0,n),o=e.substring(n+1)):i=e,this._buildValidator(i,o);case"function":return this._buildValidator(e);case"object":return this._buildValidator(e.type,e.parameters)}}},{key:"_buildValidator",value:function(e,t){var i="function"==typeof e?e:n.validators[e];return i?{type:"function"==typeof e?"function":e,func:i,params:t}:(console.warn("Validator Setup Error - No matching validator found:",e),!1)}},{key:"validate",value:function(e,t,i){var o=this,n=[],a=this.invalidCells.indexOf(t);return e&&e.forEach((function(e){e.func.call(o,t.getComponent(),i,e.params)||n.push({type:e.type,parameters:e.params})})),n=!n.length||n,t.modules.validate||(t.modules.validate={}),!0===n?(t.modules.validate.invalid=!1,t.getElement().classList.remove("tabulator-validation-fail"),a>-1&&this.invalidCells.splice(a,1)):(t.modules.validate.invalid=!0,"manual"!==this.table.options.validationMode&&t.getElement().classList.add("tabulator-validation-fail"),-1==a&&this.invalidCells.push(t)),n}},{key:"getInvalidCells",value:function(){var e=[];return this.invalidCells.forEach((function(t){e.push(t.getComponent())})),e}},{key:"clearValidation",value:function(e){var t;e.modules.validate&&e.modules.validate.invalid&&(e.getElement().classList.remove("tabulator-validation-fail"),e.modules.validate.invalid=!1,(t=this.invalidCells.indexOf(e))>-1&&this.invalidCells.splice(t,1))}}]),n}(R);Le.moduleName="validate",Le.validators=Me;var De=Object.freeze({__proto__:null,AccessorModule:F,AjaxModule:N,ClipboardModule:B,ColumnCalcsModule:j,DataTreeModule:V,DownloadModule:G,EditModule:X,ExportModule:K,FilterModule:$,FormatModule:Z,FrozenColumnsModule:ee,FrozenRowsModule:te,GroupRowsModule:oe,HistoryModule:ne,HtmlTableImportModule:ae,KeybindingsModule:le,MenuModule:re,MoveColumnsModule:ue,MoveRowsModule:ce,MutatorModule:de,PageModule:he,PersistenceModule:fe,PrintModule:ge,ReactiveDataModule:ve,ResizeColumnsModule:be,ResizeRowsModule:we,ResizeTableModule:ye,ResponsiveLayoutModule:Ee,SelectRowModule:Ce,SortModule:Re,ValidateModule:Le}),Te=function(e){s(i,e);var t=d(i);function i(){return o(this,i),t.apply(this,arguments)}return i}(A);return new H(Te,De),Te})); +/* Tabulator v5.0.0-alpha.0 (c) Oliver Folkerd 2021 */ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).Tabulator=t()}(this,(function(){"use strict";function e(t){return(e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(t)}function t(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function n(e,t){for(var i=0;ie.length)&&(t=e.length);for(var i=0,n=new Array(t);i=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,r=!0,s=!1;return{s:function(){i=e[Symbol.iterator]()},n:function(){var e=i.next();return r=e.done,e},e:function(e){s=!0,a=e},f:function(){try{r||null==i.return||i.return()}finally{if(s)throw a}}}}var f=function(){function e(i){t(this,e),this.table=i}return o(e,[{key:"reloadData",value:function(e,t){return this.table.dataLoader.load(e,void 0,void 0,void 0,t)}},{key:"langText",value:function(){var e;return(e=this.table.modules.localize).getText.apply(e,arguments)}},{key:"langBind",value:function(){var e;return(e=this.table.modules.localize).bind.apply(e,arguments)}},{key:"langLocale",value:function(){var e;return(e=this.table.modules.localize).getLocale.apply(e,arguments)}},{key:"commsConnections",value:function(){var e;return(e=this.table.modules.comms).getConnections.apply(e,arguments)}},{key:"commsSend",value:function(){var e;return(e=this.table.modules.comms).send.apply(e,arguments)}},{key:"layoutMode",value:function(){return this.table.modules.layout.getMode()}},{key:"layoutRefresh",value:function(){return this.table.modules.layout.layout()}},{key:"subscribe",value:function(){var e;(e=this.table.eventBus).subscribe.apply(e,arguments)}},{key:"unsubscribe",value:function(){var e;(e=this.table.eventBus).unsubscribe.apply(e,arguments)}},{key:"subscribed",value:function(e){this.table.eventBus.subscribed(e)}},{key:"subscriptionChange",value:function(){var e;(e=this.table.eventBus).subscriptionChange.apply(e,arguments)}},{key:"dispatch",value:function(){var e;(e=this.table.eventBus).dispatch.apply(e,arguments)}},{key:"chain",value:function(){var e;return(e=this.table.eventBus).chain.apply(e,arguments)}},{key:"confirm",value:function(){var e;return(e=this.table.eventBus).confirm.apply(e,arguments)}},{key:"dispatchExternal",value:function(){var e;(e=this.table.externalEvents).dispatch.apply(e,arguments)}},{key:"subscribedExternal",value:function(e){this.table.externalEvents.subscribed(e)}},{key:"subscriptionChangeExternal",value:function(){var e;(e=this.table.externalEvents).subscriptionChange.apply(e,arguments)}},{key:"options",value:function(e,t){return void 0!==t&&(this.table.options[e]=t),this.table.options[e]}},{key:"setOption",value:function(e,t){return void 0!==t&&(this.table.options[e]=t),this.table.options[e]}},{key:"module",value:function(e){return this.table.module(e)}}]),e}(),g=function(){function e(i){return t(this,e),this._column=i,this.type="ColumnComponent",new Proxy(this,{get:function(e,t,i){return void 0!==e[t]?e[t]:e._column.table.componentFunctionBinder.handle("column",e._column,t)}})}return o(e,[{key:"getElement",value:function(){return this._column.getElement()}},{key:"getDefinition",value:function(){return this._column.getDefinition()}},{key:"getField",value:function(){return this._column.getField()}},{key:"getCells",value:function(){var e=[];return this._column.cells.forEach((function(t){e.push(t.getComponent())})),e}},{key:"isVisible",value:function(){return this._column.visible}},{key:"show",value:function(){this._column.isGroup?this._column.columns.forEach((function(e){e.show()})):this._column.show()}},{key:"hide",value:function(){this._column.isGroup?this._column.columns.forEach((function(e){e.hide()})):this._column.hide()}},{key:"toggle",value:function(){this._column.visible?this.hide():this.show()}},{key:"delete",value:function(){return this._column.delete()}},{key:"getSubColumns",value:function(){var e=[];return this._column.columns.length&&this._column.columns.forEach((function(t){e.push(t.getComponent())})),e}},{key:"getParentColumn",value:function(){return this._column.parent instanceof Column&&this._column.parent.getComponent()}},{key:"_getSelf",value:function(){return this._column}},{key:"scrollTo",value:function(){return this._column.table.columnManager.scrollToColumn(this._column)}},{key:"getTable",value:function(){return this._column.table}},{key:"move",value:function(e,t){var i=this._column.table.columnManager.findColumn(e);i?this._column.table.columnManager.moveColumn(this._column,i,t):console.warn("Move Error - No matching column found:",i)}},{key:"getNextColumn",value:function(){var e=this._column.nextColumn();return!!e&&e.getComponent()}},{key:"getPrevColumn",value:function(){var e=this._column.prevColumn();return!!e&&e.getComponent()}},{key:"updateDefinition",value:function(e){return this._column.updateDefinition(e)}},{key:"getWidth",value:function(){return this._column.getWidth()}},{key:"setWidth",value:function(e){var t;return t=!0===e?this._column.reinitializeWidth(!0):this._column.setWidth(e),this._column.table.columnManager.renderer.rerenderColumns(!0),t}}]),e}(),v={title:void 0,field:void 0,columns:void 0,visible:void 0,hozAlign:void 0,vertAlign:void 0,width:void 0,minWidth:40,maxWidth:void 0,tooltip:void 0,cssClass:void 0,variableHeight:void 0,headerTooltip:void 0,headerVertical:void 0,headerHozAlign:void 0,editableTitle:void 0},b=function(){function e(i){return t(this,e),this._cell=i,new Proxy(this,{get:function(e,t,i){return void 0!==e[t]?e[t]:e._cell.table.componentFunctionBinder.handle("cell",e._cell,t)}})}return o(e,[{key:"getValue",value:function(){return this._cell.getValue()}},{key:"getOldValue",value:function(){return this._cell.getOldValue()}},{key:"getInitialValue",value:function(){return this._cell.initialValue}},{key:"getElement",value:function(){return this._cell.getElement()}},{key:"getRow",value:function(){return this._cell.row.getComponent()}},{key:"getData",value:function(){return this._cell.row.getData()}},{key:"getField",value:function(){return this._cell.column.getField()}},{key:"getColumn",value:function(){return this._cell.column.getComponent()}},{key:"setValue",value:function(e,t){void 0===t&&(t=!0),this._cell.setValue(e,t)}},{key:"restoreOldValue",value:function(){this._cell.setValueActual(this._cell.getOldValue())}},{key:"restoreInitialValue",value:function(){this._cell.setValueActual(this._cell.initialValue)}},{key:"checkHeight",value:function(){this._cell.checkHeight()}},{key:"getTable",value:function(){return this._cell.table}},{key:"_getSelf",value:function(){return this._cell}}]),e}(),y=function(i){a(r,i);var n=c(r);function r(e,i){var o;return t(this,r),(o=n.call(this,e.table)).table=e.table,o.column=e,o.row=i,o.element=null,o.value=null,o.initialValue,o.oldValue=null,o.modules={},o.height=null,o.width=null,o.minWidth=null,o.component=null,o.loaded=!1,o.build(),o}return o(r,[{key:"build",value:function(){this.generateElement(),this.setWidth(),this._configureCell(),this.setValueActual(this.column.getFieldValue(this.row.data)),this.initialValue=this.value}},{key:"generateElement",value:function(){this.element=document.createElement("div"),this.element.className="tabulator-cell",this.element.setAttribute("role","gridcell"),this.element=this.element}},{key:"_configureCell",value:function(){var e=this,t=this.element,i=this.column.getField();(t.style.textAlign=this.column.hozAlign,this.column.vertAlign&&(t.style.display="inline-flex",t.style.alignItems={top:"flex-start",bottom:"flex-end",middle:"center"}[this.column.vertAlign]||"",this.column.hozAlign&&(t.style.justifyContent={left:"flex-start",right:"flex-end",center:"center"}[this.column.hozAlign]||"")),i&&t.setAttribute("tabulator-field",i),this.column.definition.cssClass)&&this.column.definition.cssClass.split(" ").forEach((function(e){t.classList.add(e)}));"hover"===this.table.options.tooltipGenerationMode&&t.addEventListener("mouseenter",(function(t){e._generateTooltip()})),this.dispatch("cell-init",this),this.column.visible||this.hide()}},{key:"_generateContents",value:function(){var t,i=this;switch(e(t=this.chain("cell-format",this,null,(function(){return i.element.innerHTML=i.value})))){case"object":if(t instanceof Node){for(;this.element.firstChild;)this.element.removeChild(this.element.firstChild);this.element.appendChild(t)}else this.element.innerHTML="",null!=t&&console.warn("Format Error - Formatter has returned a type of object, the only valid formatter object return is an instance of Node, the formatter returned:",t);break;case"undefined":case"null":this.element.innerHTML="";break;default:this.element.innerHTML=t}}},{key:"cellRendered",value:function(){this.dispatch("cell-rendered",this)}},{key:"_generateTooltip",value:function(){var e=this.column.tooltip;e?(!0===e?e=this.value:"function"==typeof e&&!1===(e=e(this.getComponent()))&&(e=""),void 0===e&&(e=""),this.element.setAttribute("title",e)):this.element.setAttribute("title","")}},{key:"getElement",value:function(e){return this.loaded||(this.loaded=!0,e||this.layoutElement()),this.element}},{key:"getValue",value:function(){return this.value}},{key:"getOldValue",value:function(){return this.oldValue}},{key:"setValue",value:function(e,t){this.setValueProcessData(e,t)&&(this.dispatch("cell-value-updated",this),this.cellRendered(),this.dispatchExternal("cellEdited",this.getComponent()),this.subscribedExternal("dataChanged")&&this.dispatchExternal("dataChanged",this.table.rowManager.getData()))}},{key:"setValueProcessData",value:function(e,t){var i=!1;return this.value!=e&&(i=!0,t&&(e=this.chain("cell-value-changing",[this,e],null,e))),this.setValueActual(e),i&&this.dispatch("cell-value-changed",this),i}},{key:"setValueActual",value:function(e){this.oldValue=this.value,this.value=e,this.dispatch("cell-value-save-before",this),this.column.setFieldValue(this.row.data,e),this.dispatch("cell-value-save-after",this),this.loaded&&this.layoutElement()}},{key:"layoutElement",value:function(){this._generateContents(),this._generateTooltip(),this.dispatch("cell-layout",this)}},{key:"setWidth",value:function(){this.width=this.column.width,this.element.style.width=this.column.widthStyled}},{key:"clearWidth",value:function(){this.width="",this.element.style.width=""}},{key:"getWidth",value:function(){return this.width||this.element.offsetWidth}},{key:"setMinWidth",value:function(){this.minWidth=this.column.minWidth,this.element.style.minWidth=this.column.minWidthStyled}},{key:"setMaxWidth",value:function(){this.maxWidth=this.column.maxWidth,this.element.style.maxWidth=this.column.maxWidthStyled}},{key:"checkHeight",value:function(){this.row.reinitializeHeight()}},{key:"clearHeight",value:function(){this.element.style.height="",this.height=null}},{key:"setHeight",value:function(){this.height=this.row.height,this.element.style.height=this.row.heightStyled}},{key:"getHeight",value:function(){return this.height||this.element.offsetHeight}},{key:"show",value:function(){this.element.style.display=this.column.vertAlign?"inline-flex":""}},{key:"hide",value:function(){this.element.style.display="none"}},{key:"delete",value:function(){this.dispatch("cell-delete",this),!this.table.rowManager.redrawBlock&&this.element.parentNode&&this.element.parentNode.removeChild(this.element),this.element=!1,this.column.deleteCell(this),this.row.deleteCell(this),this.calcs={}}},{key:"getIndex",value:function(){return this.row.getCellIndex(this)}},{key:"getComponent",value:function(){return this.component||(this.component=new b(this)),this.component}}]),r}(f),w=function(i){a(r,i);var n=c(r);function r(e,i){var o;return t(this,r),(o=n.call(this,i.table)).definition=e,o.parent=i,o.type="column",o.columns=[],o.cells=[],o.element=o.createElement(),o.contentElement=!1,o.titleHolderElement=!1,o.titleElement=!1,o.groupElement=o.createGroupElement(),o.isGroup=!1,o.tooltip=!1,o.hozAlign="",o.vertAlign="",o.field="",o.fieldStructure="",o.getFieldValue="",o.setFieldValue="",o.titleFormatterRendered=!1,o.mapDefinitions(),o.setField(o.definition.field),o.modules={},o.width=null,o.widthStyled="",o.maxWidth=null,o.maxWidthStyled="",o.minWidth=null,o.minWidthStyled="",o.widthFixed=!1,o.visible=!0,o.component=null,o.definition.columns?(o.isGroup=!0,o.definition.columns.forEach((function(e,t){var i=new r(e,l(o));o.attachColumn(i)})),o.checkColumnVisibility()):i.registerColumnField(l(o)),o._initialize(),o.bindModuleColumns(),o}return o(r,[{key:"createElement",value:function(){var e=document.createElement("div");return e.classList.add("tabulator-col"),e.setAttribute("role","columnheader"),e.setAttribute("aria-sort","none"),e}},{key:"createGroupElement",value:function(){var e=document.createElement("div");return e.classList.add("tabulator-col-group-cols"),e}},{key:"mapDefinitions",value:function(){var e=this.table.options.columnDefaults;if(e)for(var t in e)void 0===this.definition[t]&&(this.definition[t]=e[t]);this.definition=this.table.columnManager.optionsList.generate(r.defaultOptionList,this.definition)}},{key:"checkDefinition",value:function(){var e=this;Object.keys(this.definition).forEach((function(t){-1===r.defaultOptionList.indexOf(t)&&console.warn("Invalid column definition option in '"+(e.field||e.definition.title)+"' column:",t)}))}},{key:"setField",value:function(e){this.field=e,this.fieldStructure=e?this.table.options.nestedFieldSeparator?e.split(this.table.options.nestedFieldSeparator):[e]:[],this.getFieldValue=this.fieldStructure.length>1?this._getNestedData:this._getFlatData,this.setFieldValue=this.fieldStructure.length>1?this._setNestedData:this._setFlatData}},{key:"registerColumnPosition",value:function(e){this.parent.registerColumnPosition(e)}},{key:"registerColumnField",value:function(e){this.parent.registerColumnField(e)}},{key:"reRegisterPosition",value:function(){this.isGroup?this.columns.forEach((function(e){e.reRegisterPosition()})):this.registerColumnPosition(this)}},{key:"_mapDepricatedFunctionality",value:function(){}},{key:"setTooltip",value:function(){var e=this,t=this.definition,i=void 0===t.headerTooltip?t.tooltip:t.headerTooltip;i?!0===i?t.field?this.langBind("columns|"+t.field,(function(i){e.element.setAttribute("title",i||t.title)})):this.element.setAttribute("title",t.title):("function"==typeof i&&!1===(i=i(this.getComponent()))&&(i=""),this.element.setAttribute("title",i)):this.element.setAttribute("title","")}},{key:"_initialize",value:function(){for(var e=this,t=this.definition;this.element.firstChild;)this.element.removeChild(this.element.firstChild);t.headerVertical&&(this.element.classList.add("tabulator-col-vertical"),"flip"===t.headerVertical&&this.element.classList.add("tabulator-col-vertical-flip")),this.contentElement=this._bindEvents(),this.contentElement=this._buildColumnHeaderContent(),this.element.appendChild(this.contentElement),this.isGroup?this._buildGroupHeader():this._buildColumnHeader(),this.setTooltip(),this.dispatch("column-init",this),this.element.addEventListener("mouseenter",(function(t){e.setTooltip()}))}},{key:"_bindEvents",value:function(){var e,t,i,n=this,o=this.definition;"function"==typeof o.headerClick&&this.element.addEventListener("click",(function(e){o.headerClick(e,n.getComponent())})),"function"==typeof o.headerDblClick&&this.element.addEventListener("dblclick",(function(e){o.headerDblClick(e,n.getComponent())})),"function"==typeof o.headerContext&&this.element.addEventListener("contextmenu",(function(e){o.headerContext(e,n.getComponent())})),"function"==typeof o.headerTap&&(i=!1,this.element.addEventListener("touchstart",(function(e){i=!0}),{passive:!0}),this.element.addEventListener("touchend",(function(e){i&&o.headerTap(e,n.getComponent()),i=!1}))),"function"==typeof o.headerDblTap&&(e=null,this.element.addEventListener("touchend",(function(t){e?(clearTimeout(e),e=null,o.headerDblTap(t,n.getComponent())):e=setTimeout((function(){clearTimeout(e),e=null}),300)}))),"function"==typeof o.headerTapHold&&(t=null,this.element.addEventListener("touchstart",(function(e){clearTimeout(t),t=setTimeout((function(){clearTimeout(t),t=null,i=!1,o.headerTapHold(e,this.getComponent())}),1e3)}),{passive:!0}),this.element.addEventListener("touchend",(function(e){clearTimeout(t),t=null})))}},{key:"_buildColumnHeader",value:function(){var e=this,t=this.definition;this.table;(this.dispatch("column-layout",this),void 0!==t.visible&&(t.visible?this.show(!0):this.hide(!0)),t.cssClass)&&t.cssClass.split(" ").forEach((function(t){e.element.classList.add(t)}));t.field&&this.element.setAttribute("tabulator-field",t.field),this.setMinWidth(parseInt(t.minWidth)),t.maxWidth&&this.setMaxWidth(parseInt(t.maxWidth)),this.reinitializeWidth(),this.tooltip=this.definition.tooltip,this.hozAlign=this.definition.hozAlign,this.vertAlign=this.definition.vertAlign,this.titleElement.style.textAlign=this.definition.headerHozAlign}},{key:"_buildColumnHeaderContent",value:function(){this.definition,this.table;var e=document.createElement("div");return e.classList.add("tabulator-col-content"),this.titleHolderElement=document.createElement("div"),this.titleHolderElement.classList.add("tabulator-col-title-holder"),e.appendChild(this.titleHolderElement),this.titleElement=this._buildColumnHeaderTitle(),this.titleHolderElement.appendChild(this.titleElement),e}},{key:"_buildColumnHeaderTitle",value:function(){var e=this,t=this.definition,i=document.createElement("div");if(i.classList.add("tabulator-col-title"),t.editableTitle){var n=document.createElement("input");n.classList.add("tabulator-title-editor"),n.addEventListener("click",(function(e){e.stopPropagation(),n.focus()})),n.addEventListener("change",(function(){t.title=n.value,e.dispatchExternal("columnTitleChanged",e.getComponent())})),i.appendChild(n),t.field?this.langBind("columns|"+t.field,(function(e){n.value=e||t.title||" "})):n.value=t.title||" "}else t.field?this.langBind("columns|"+t.field,(function(n){e._formatColumnHeaderTitle(i,n||t.title||" ")})):this._formatColumnHeaderTitle(i,t.title||" ");return i}},{key:"_formatColumnHeaderTitle",value:function(t,i){var n=this.chain("column-format",[this,i,t],null,(function(){return i}));switch(e(n)){case"object":n instanceof Node?t.appendChild(n):(t.innerHTML="",console.warn("Format Error - Title formatter has returned a type of object, the only valid formatter object return is an instance of Node, the formatter returned:",n));break;case"undefined":case"null":t.innerHTML="";break;default:t.innerHTML=n}}},{key:"_buildGroupHeader",value:function(){var e=this;(this.element.classList.add("tabulator-col-group"),this.element.setAttribute("role","columngroup"),this.element.setAttribute("aria-title",this.definition.title),this.definition.cssClass)&&this.definition.cssClass.split(" ").forEach((function(t){e.element.classList.add(t)}));this.titleElement.style.textAlign=this.definition.headerHozAlign,this.element.appendChild(this.groupElement)}},{key:"_getFlatData",value:function(e){return e[this.field]}},{key:"_getNestedData",value:function(e){for(var t,i=e,n=this.fieldStructure,o=n.length,a=0;a-1&&this.columns.splice(t,1),this.columns.length||this.delete()}},{key:"setWidth",value:function(e){this.widthFixed=!0,this.setWidthActual(e)}},{key:"setWidthActual",value:function(e){isNaN(e)&&(e=Math.floor(this.table.element.clientWidth/100*parseInt(e))),e=Math.max(this.minWidth,e),this.maxWidth&&(e=Math.min(this.maxWidth,e)),this.width=e,this.widthStyled=e?e+"px":"",this.element.style.width=this.widthStyled,this.isGroup||this.cells.forEach((function(e){e.setWidth()})),this.parent.isGroup&&this.parent.matchChildWidths(),this.dispatch("column-width",this)}},{key:"checkCellHeights",value:function(){var e=[];this.cells.forEach((function(t){t.row.heightInitialized&&(null!==t.row.getElement().offsetParent?(e.push(t.row),t.row.clearCellHeight()):t.row.heightInitialized=!1)})),e.forEach((function(e){e.calcHeight()})),e.forEach((function(e){e.setCellHeight()}))}},{key:"getWidth",value:function(){var e=0;return this.isGroup?this.columns.forEach((function(t){t.visible&&(e+=t.getWidth())})):e=this.width,e}},{key:"getHeight",value:function(){return this.element.offsetHeight}},{key:"setMinWidth",value:function(e){this.minWidth=e,this.minWidthStyled=e?e+"px":"",this.element.style.minWidth=this.minWidthStyled,this.cells.forEach((function(e){e.setMinWidth()}))}},{key:"setMaxWidth",value:function(e){this.maxWidth=e,this.maxWidthStyled=e?e+"px":"",this.element.style.maxWidth=this.maxWidthStyled,this.cells.forEach((function(e){e.setMaxWidth()}))}},{key:"delete",value:function(){var e=this;return new Promise((function(t,i){e.isGroup&&e.columns.forEach((function(e){e.delete()})),e.dispatch("column-delete",e);for(var n=e.cells.length,o=0;o-1&&this._nextVisibleColumn(e+1)}},{key:"_nextVisibleColumn",value:function(e){var t=this.table.columnManager.getColumnByIndex(e);return!t||t.visible?t:this._nextVisibleColumn(e+1)}},{key:"prevColumn",value:function(){var e=this.table.columnManager.findColumnIndex(this);return e>-1&&this._prevVisibleColumn(e-1)}},{key:"_prevVisibleColumn",value:function(e){var t=this.table.columnManager.getColumnByIndex(e);return!t||t.visible?t:this._prevVisibleColumn(e-1)}},{key:"reinitializeWidth",value:function(e){this.widthFixed=!1,void 0===this.definition.width||e||this.setWidth(this.definition.width),this.dispatch("column-width-fit-before",this),this.fitToData(),this.dispatch("column-width-fit-after",this)}},{key:"fitToData",value:function(){this.widthFixed||(this.element.style.width="",this.cells.forEach((function(e){e.clearWidth()})));var e=this.element.offsetWidth;this.width&&this.widthFixed||(this.cells.forEach((function(t){var i=t.getWidth();i>e&&(e=i)})),e&&this.setWidthActual(e+1))}},{key:"updateDefinition",value:function(e){var t=this;return new Promise((function(i,n){var o;t.isGroup||t.parent.isGroup?(console.warn("Column Update Error - The updateDefinition function is only available on ungrouped columns"),n("Column Update Error - The updateDefinition function is only available on columns, not column groups")):(o=Object.assign({},t.getDefinition()),o=Object.assign(o,e),t.table.columnManager.addColumn(o,!1,t).then((function(e){o.field==t.field&&(t.field=!1),t.delete().then((function(){i(e.getComponent())})).catch((function(e){n(e)}))})).catch((function(e){n(e)})))}))}},{key:"deleteCell",value:function(e){var t=this.cells.indexOf(e);t>-1&&this.cells.splice(t,1)}},{key:"getComponent",value:function(){return this.component||(this.component=new g(this)),this.component}}]),r}(f);w.defaultOptionList=v;var C=function(){function i(){t(this,i)}return o(i,null,[{key:"elVisible",value:function(e){return!(e.offsetWidth<=0&&e.offsetHeight<=0)}},{key:"elOffset",value:function(e){var t=e.getBoundingClientRect();return{top:t.top+window.pageYOffset-document.documentElement.clientTop,left:t.left+window.pageXOffset-document.documentElement.clientLeft}}},{key:"deepClone",value:function(t){var i=Object.assign(Array.isArray(t)?[]:{},t);for(var n in t)null!=t[n]&&"object"===e(t[n])&&(t[n]instanceof Date?i[n]=new Date(t[n]):i[n]=this.deepClone(t[n]));return i}}]),i}(),E=function(){function i(e,n){t(this,i),this.table=e,this.msgType=n,this.registeredDefaults={}}return o(i,[{key:"register",value:function(e,t){this.registeredDefaults[e]=t}},{key:"generate",value:function(t){var i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=Object.assign({},this.registeredDefaults);if(Object.assign(n,t),!1!==i.debugInvalidOptions||this.table.options.debugInvalidOptions)for(var o in i)n.hasOwnProperty(o)||console.warn("Invalid "+this.msgType+" option:",o);for(var o in n)o in i?n[o]=i[o]:Array.isArray(n[o])?n[o]=Object.assign([],n[o]):"object"===e(n[o])&&null!==n[o]?n[o]=Object.assign({},n[o]):void 0===n[o]&&delete n[o];return n}}]),i}(),k=function(e){a(n,e);var i=c(n);function n(e){var o;return t(this,n),(o=i.call(this,e)).elementVertical=e.rowManager.element,o.elementHorizontal=e.columnManager.element,o.tableElement=e.rowManager.tableElement,o.verticalFillMode="fit",o}return o(n,[{key:"initialize",value:function(){}},{key:"clearRows",value:function(){}},{key:"clearColumns",value:function(){}},{key:"reinitializeColumnWidths",value:function(e){}},{key:"renderRows",value:function(){}},{key:"renderColumns",value:function(){}},{key:"rerenderRows",value:function(e){e&&e()}},{key:"rerenderColumns",value:function(e,t){}},{key:"renderRowCells",value:function(e){}},{key:"rerenderRowCells",value:function(e,t){}},{key:"scrollColumns",value:function(e,t){}},{key:"scrollRows",value:function(e,t){}},{key:"resize",value:function(){}},{key:"scrollToRow",value:function(e){}},{key:"scrollToRowNearestTop",value:function(e){}},{key:"visibleRows",value:function(e){return[]}},{key:"rows",value:function(){return this.table.rowManager.getDisplayRows()}},{key:"styleRow",value:function(e,t){var i=e.getElement();t%2?(i.classList.add("tabulator-row-even"),i.classList.remove("tabulator-row-odd")):(i.classList.add("tabulator-row-odd"),i.classList.remove("tabulator-row-even"))}},{key:"clear",value:function(){this.clearRows(),this.clearColumns()}},{key:"render",value:function(){this.renderRows(),this.renderColumns()}},{key:"rerender",value:function(e){this.rerenderRows(),this.rerenderColumns()}},{key:"scrollToRowPosition",value:function(e,t,i){var n=this,o=this.rows().indexOf(e),a=e.getElement(),r=0;return new Promise((function(s,l){if(o>-1){if(void 0===i&&(i=n.table.options.scrollToRowIfVisible),!i&&C.elVisible(a)&&(r=C.elOffset(a).top-C.elOffset(n.elementVertical).top)>0&&ri.vDomScrollPosLeft&&othis.vDomScrollPosRight)break}for(e.parentNode.removeChild(e),this.fitDataColAvg=Math.floor(o/(a+1));a.8*this.elementVertical.clientWidth?this.rerenderColumns():e>0?(this.addColRight(),this.removeColLeft()):(this.addColLeft(),this.removeColRight())}},{key:"colPositionAdjust",value:function(e,t,i){for(var n=e;n=this.columns.length-1?this.vDomPadRight=0:this.vDomPadRight-=e.getWidth(),this.tableElement.style.paddingRight=this.vDomPadRight+"px",this.addColRight())}},{key:"addColLeft",value:function(){var e=this.columns[this.leftCol-1];e&&e.modules.vdomHoz.rightPos>=this.vDomScrollPosLeft&&(this.table.rowManager.getVisibleRows().forEach((function(t){if("group"!==t.type){var i=t.getCell(e);t.getElement().prepend(i.getElement()),i.cellRendered()}})),this.fitDataColActualWidthCheck(e),this.leftCol?this.vDomPadLeft-=e.getWidth():this.vDomPadLeft=0,this.tableElement.style.paddingLeft=this.vDomPadLeft+"px",this.leftCol--,this.addColLeft())}},{key:"removeColRight",value:function(e){var t;(e=this.columns[this.rightCol])&&e.modules.vdomHoz.leftPos>this.vDomScrollPosRight&&(t=this.table.rowManager.getVisibleRows(),e.modules.vdomHoz.visible=!1,t.forEach((function(t){if("group"!==t.type){var i=t.getCell(e);t.getElement().removeChild(i.getElement())}})),this.vDomPadRight+=e.getWidth(),this.tableElement.style.paddingRight=this.vDomPadRight+"px",this.rightCol--,this.removeColRight())}},{key:"removeColLeft",value:function(){var e=this.columns[this.leftCol];e&&e.modules.vdomHoz.rightPosi?(t=e-i,this.element.style.marginLeft=-t+"px"):this.element.style.marginLeft=0,this.scrollLeft=e,this.renderer.scrollColumns(e)}},{key:"generateColumnsFromRowData",value:function(t){var i,n,o=[],a=this.table.options.autoColumnsDefinitions;if(t&&t.length){for(var r in i=t[0]){var s={field:r,title:r},l=i[r];switch(e(l)){case"undefined":n="string";break;case"boolean":n="boolean";break;case"object":n=Array.isArray(l)?"array":"string";break;default:n=isNaN(l)||""===l?l.match(/((^[0-9]+[a-z]+)|(^[a-z]+[0-9]+))+$/i)?"alphanum":"string":"number"}s.sorter=n,o.push(s)}if(a)switch(e(a)){case"function":this.table.options.columns=a.call(this.table,o);break;case"object":Array.isArray(a)?o.forEach((function(e){var t=a.find((function(t){return t.field===e.field}));t&&Object.assign(e,t)})):o.forEach((function(e){a[e.field]&&Object.assign(e,a[e.field])})),this.table.options.columns=o}else this.table.options.columns=o;this.setColumns(this.table.options.columns)}}},{key:"setColumns",value:function(e,t){for(var i=this;this.headersElement.firstChild;)this.headersElement.removeChild(this.headersElement.firstChild);this.columns=[],this.columnsByIndex=[],this.columnsByField={},this.dispatch("columns-loading"),e.forEach((function(e,t){i._addColumn(e)})),this._reIndexColumns(),this.dispatch("columns-loaded"),this.renderer.rerenderColumns(!1,!0),this.redraw(!0)}},{key:"_addColumn",value:function(e,t,i){var n=new w(e,this),o=n.getElement(),a=i?this.findColumnIndex(i):i;if(i&&a>-1){var r=this.columns.indexOf(i.getTopColumn()),s=i.getElement();t?(this.columns.splice(r,0,n),s.parentNode.insertBefore(o,s)):(this.columns.splice(r+1,0,n),s.parentNode.insertBefore(o,s.nextSibling))}else t?(this.columns.unshift(n),this.headersElement.insertBefore(n.getElement(),this.headersElement.firstChild)):(this.columns.push(n),this.headersElement.appendChild(n.getElement())),n.columnRendered();return n}},{key:"registerColumnField",value:function(e){e.definition.field&&(this.columnsByField[e.definition.field]=e)}},{key:"registerColumnPosition",value:function(e){this.columnsByIndex.push(e)}},{key:"_reIndexColumns",value:function(){this.columnsByIndex=[],this.columns.forEach((function(e){e.reRegisterPosition()}))}},{key:"_verticalAlignHeaders",value:function(){var e=this,t=0;this.columns.forEach((function(e){var i;e.clearVerticalAlign(),(i=e.getHeight())>t&&(t=i)})),this.columns.forEach((function(i){i.verticalAlign(e.table.options.columnHeaderVertAlign,t)})),this.table.rowManager.adjustTableSize()}},{key:"findColumn",value:function(t){return"object"!=e(t)?this.columnsByField[t]||!1:t instanceof w?t:t instanceof g?t._getSelf()||!1:"undefined"!=typeof HTMLElement&&t instanceof HTMLElement&&this.columns.find((function(e){return e.element===t}))||!1}},{key:"getColumnByField",value:function(e){return this.columnsByField[e]}},{key:"getColumnsByFieldRoot",value:function(e){var t=this,i=[];return Object.keys(this.columnsByField).forEach((function(n){n.split(".")[0]===e&&i.push(t.columnsByField[n])})),i}},{key:"getColumnByIndex",value:function(e){return this.columnsByIndex[e]}},{key:"getFirstVisibileColumn",value:function(e){return(e=this.columnsByIndex.findIndex((function(e){return e.visible})))>-1&&this.columnsByIndex[e]}},{key:"getColumns",value:function(){return this.columns}},{key:"findColumnIndex",value:function(e){return this.columnsByIndex.findIndex((function(t){return e===t}))}},{key:"getRealColumns",value:function(){return this.columnsByIndex}},{key:"traverse",value:function(e){this.columnsByIndex.forEach((function(t,i){e(t,i)}))}},{key:"getDefinitions",value:function(e){var t=[];return this.columnsByIndex.forEach((function(i){(!e||e&&i.visible)&&t.push(i.getDefinition())})),t}},{key:"getDefinitionTree",value:function(){var e=[];return this.columns.forEach((function(t){e.push(t.getDefinition(!0))})),e}},{key:"getComponents",value:function(e){var t=[];return(e?this.columns:this.columnsByIndex).forEach((function(e){t.push(e.getComponent())})),t}},{key:"getWidth",value:function(){var e=0;return this.columnsByIndex.forEach((function(t){t.visible&&(e+=t.getWidth())})),e}},{key:"moveColumn",value:function(e,t,i){this.moveColumnActual(e,t,i),t.element.parentNode.insertBefore(e.element,t.element),i&&t.element.parentNode.insertBefore(t.element,e.element),this._verticalAlignHeaders(),this.table.rowManager.reinitialize()}},{key:"moveColumnActual",value:function(e,t,i){e.parent.isGroup?this._moveColumnInArray(e.parent.columns,e,t,i):this._moveColumnInArray(this.columns,e,t,i),this._moveColumnInArray(this.columnsByIndex,e,t,i,!0),this.renderer.rerenderColumns(!0),this.dispatch("column-moved",e,t,i),this.subscribedExternal("columnMoved")&&this.dispatchExternal("columnMoved",e.getComponent(),this.table.columnManager.getComponents())}},{key:"_moveColumnInArray",value:function(e,t,i,n,o){var a,r=e.indexOf(t);r>-1&&(e.splice(r,1),(a=e.indexOf(i))>-1?n&&(a+=1):a=r,e.splice(a,0,t),o&&(this.chain("column-moving-rows",[t,i,n],null,[])||[]).concat(this.table.rowManager.rows).forEach((function(e){if(e.cells.length){var t=e.cells.splice(r,1)[0];e.cells.splice(a,0,t)}})))}},{key:"scrollToColumn",value:function(e,t,i){var n=this,o=0,a=0,r=0,s=e.getElement();return new Promise((function(l,u){if(void 0===t&&(t=n.table.options.scrollToColumnPosition),void 0===i&&(i=n.table.options.scrollToColumnIfVisible),e.visible){switch(t){case"middle":case"center":r=-n.element.clientWidth/2;break;case"right":r=s.clientWidth-n.headersElement.clientWidth}if(!i&&(a=s.offsetLeft)>0&&a+s.offsetWidththis.table.rowManager.element.clientHeight&&(e-=this.table.rowManager.element.offsetWidth-this.table.rowManager.element.clientWidth),this.columnsByIndex.forEach((function(i){var n,o,a;i.visible&&(n=i.definition.width||0,o=parseInt(i.minWidth),a="string"==typeof n?n.indexOf("%")>-1?e/100*parseInt(n):parseInt(n):n,t+=a>o?a:o)})),t}},{key:"addColumn",value:function(e,t,i){var n=this;return new Promise((function(o,a){var r=n._addColumn(e,t,i);n._reIndexColumns(),n.dispatch("column-add",e,t,i),n.redraw(!0),"fitColumns"!=n.layoutMode()&&r.reinitializeWidth(),n._verticalAlignHeaders(),n.table.rowManager.reinitialize(),n.renderer.rerenderColumns(),o(r)}))}},{key:"deregisterColumn",value:function(e){var t,i=e.getField();i&&delete this.columnsByField[i],(t=this.columnsByIndex.indexOf(e))>-1&&this.columnsByIndex.splice(t,1),(t=this.columns.indexOf(e))>-1&&this.columns.splice(t,1),this._verticalAlignHeaders(),this.redraw()}},{key:"redraw",value:function(e){e&&(C.elVisible(this.element)&&this._verticalAlignHeaders(),this.table.rowManager.resetScroll(),this.table.rowManager.reinitialize()),this.confirm("table-redrawing",e)||this.layoutRefresh(),this.dispatch("table-redraw",e),this.table.footerManager.redraw()}}]),r}(f),M=function(){function e(i){return t(this,e),this._row=i,new Proxy(this,{get:function(e,t,i){return void 0!==e[t]?e[t]:e._row.table.componentFunctionBinder.handle("row",e._row,t)}})}return o(e,[{key:"getData",value:function(e){return this._row.getData(e)}},{key:"getElement",value:function(){return this._row.getElement()}},{key:"getCells",value:function(){var e=[];return this._row.getCells().forEach((function(t){e.push(t.getComponent())})),e}},{key:"getCell",value:function(e){var t=this._row.getCell(e);return!!t&&t.getComponent()}},{key:"getIndex",value:function(){return this._row.getData("data")[this._row.table.options.index]}},{key:"getPosition",value:function(e){return this._row.table.rowManager.getRowPosition(this._row,e)}},{key:"delete",value:function(){return this._row.delete()}},{key:"scrollTo",value:function(){return this._row.table.rowManager.scrollToRow(this._row)}},{key:"move",value:function(e,t){this._row.moveToRow(e,t)}},{key:"update",value:function(e){return this._row.updateData(e)}},{key:"normalizeHeight",value:function(){this._row.normalizeHeight(!0)}},{key:"_getSelf",value:function(){return this._row}},{key:"reformat",value:function(){return this._row.reinitialize()}},{key:"getTable",value:function(){return this._row.table}},{key:"getNextRow",value:function(){var e=this._row.nextRow();return e?e.getComponent():e}},{key:"getPrevRow",value:function(){var e=this._row.prevRow();return e?e.getComponent():e}}]),e}(),L=function(e){a(n,e);var i=c(n);function n(e,o){var a,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"row";return t(this,n),(a=i.call(this,o.table)).parent=o,a.data={},a.type=r,a.element=!1,a.modules={},a.cells=[],a.height=0,a.heightStyled="",a.manualHeight=!1,a.outerHeight=0,a.initialized=!1,a.heightInitialized=!1,a.component=null,a.created=!1,a.setData(e),a}return o(n,[{key:"create",value:function(){this.created||(this.created=!0,this.generateElement())}},{key:"createElement",value:function(){var e=document.createElement("div");e.classList.add("tabulator-row"),e.setAttribute("role","row"),this.element=e}},{key:"getElement",value:function(){return this.create(),this.element}},{key:"detachElement",value:function(){this.element&&this.element.parentNode&&this.element.parentNode.removeChild(this.element)}},{key:"generateElement",value:function(){this.createElement(),this.dispatch("row-init",this)}},{key:"generateCells",value:function(){this.cells=this.table.columnManager.generateCells(this)}},{key:"initialize",value:function(e){if(this.create(),!this.initialized||e){for(this.deleteCells();this.element.firstChild;)this.element.removeChild(this.element.firstChild);this.dispatch("row-layout-before",this),this.generateCells(),this.table.columnManager.renderer.renderRowCells(this),e&&this.normalizeHeight(),this.dispatch("row-layout",this),this.table.options.rowFormatter&&this.table.options.rowFormatter(this.getComponent()),this.dispatch("row-layout-after",this),this.initialized=!0}else this.table.columnManager.renderer.rerenderRowCells(this)}},{key:"reinitializeHeight",value:function(){this.heightInitialized=!1,this.element&&null!==this.element.offsetParent&&this.normalizeHeight(!0)}},{key:"reinitialize",value:function(e){this.initialized=!1,this.heightInitialized=!1,this.manualHeight||(this.height=0,this.heightStyled=""),this.element&&null!==this.element.offsetParent&&this.initialize(!0),this.dispatch("row-relayout",this)}},{key:"calcHeight",value:function(e){var t=0,i=this.table.options.resizableRows?this.element.clientHeight:0;this.cells.forEach((function(e){var i=e.getHeight();i>t&&(t=i)})),this.height=e?Math.max(t,i):this.manualHeight?this.height:Math.max(t,i),this.heightStyled=this.height?this.height+"px":"",this.outerHeight=this.element.offsetHeight}},{key:"setCellHeight",value:function(){this.cells.forEach((function(e){e.setHeight()})),this.heightInitialized=!0}},{key:"clearCellHeight",value:function(){this.cells.forEach((function(e){e.clearHeight()}))}},{key:"normalizeHeight",value:function(e){e&&this.clearCellHeight(),this.calcHeight(e),this.setCellHeight()}},{key:"setHeight",value:function(e,t){(this.height!=e||t)&&(this.manualHeight=!0,this.height=e,this.heightStyled=e?e+"px":"",this.setCellHeight(),this.outerHeight=this.element.offsetHeight)}},{key:"getHeight",value:function(){return this.outerHeight}},{key:"getWidth",value:function(){return this.element.offsetWidth}},{key:"deleteCell",value:function(e){var t=this.cells.indexOf(e);t>-1&&this.cells.splice(t,1)}},{key:"setData",value:function(e){this.data=this.chain("row-data-init-before",[this,e],null,e),this.dispatch("row-data-init-after",this)}},{key:"updateData",value:function(e){var t,i=this,n=this.element&&C.elVisible(this.element),o={};return new Promise((function(a,r){for(var s in"string"==typeof e&&(e=JSON.parse(e)),i.dispatch("row-data-save-before",i),i.subscribed("row-data-changing")&&(o=Object.assign(o,i.data),o=Object.assign(o,e)),t=i.chain("row-data-changing",[i,o,e],null,e))i.data[s]=t[s];for(var s in i.dispatch("row-data-save-after",i),e){i.table.columnManager.getColumnsByFieldRoot(s).forEach((function(e){var o=i.getCell(e.getField());if(o){var a=e.getFieldValue(t);o.getValue()!=a&&(o.setValueProcessData(a),n&&o.cellRendered())}}))}n?(i.normalizeHeight(!0),i.table.options.rowFormatter&&i.table.options.rowFormatter(i.getComponent())):(i.initialized=!1,i.height=0,i.heightStyled=""),i.dispatch("row-data-changed",i,n,e),i.dispatchExternal("rowUpdated",i.getComponent()),i.subscribedExternal.subscribed("dataChanged")&&i.dispatchExternal("dataChanged",i.table.rowManager.getData()),a()}))}},{key:"getData",value:function(e){return e?this.chain("row-data-retrieve",[this,e],null,this.data):this.data}},{key:"getCell",value:function(e){return e=this.table.columnManager.findColumn(e),this.cells.find((function(t){return t.column===e}))}},{key:"getCellIndex",value:function(e){return this.cells.findIndex((function(t){return t===e}))}},{key:"findCell",value:function(e){return this.cells.find((function(t){return t.element===e}))}},{key:"getCells",value:function(){return this.cells}},{key:"nextRow",value:function(){return this.table.rowManager.nextDisplayRow(this,!0)||!1}},{key:"prevRow",value:function(){return this.table.rowManager.prevDisplayRow(this,!0)||!1}},{key:"moveToRow",value:function(e,t){var i=this.table.rowManager.findRow(e);i?(this.table.rowManager.moveRowActual(this,i,!t),this.table.rowManager.refreshActiveData("display",!1,!0)):console.warn("Move Error - No matching row found:",e)}},{key:"delete",value:function(){var e=this;return new Promise((function(t,i){e.dispatch("row-delete",e),e.deleteActual(),t()}))}},{key:"deleteActual",value:function(e){this.table.rowManager.getRowIndex(this);this.detatchModules(),this.table.rowManager.deleteRow(this,e),this.deleteCells(),this.initialized=!1,this.heightInitialized=!1,this.element=!1,this.dispatch("row-deleted",this)}},{key:"detatchModules",value:function(){this.dispatch("row-deleting",this)}},{key:"deleteCells",value:function(){for(var e=this.cells.length,t=0;tMath.abs(this.elementVertical.scrollTop+this.elementVertical.clientHeight-t))}},{key:"scrollToRow",value:function(e){var t=e.getElement();this.elementVertical.scrollTop=C.elOffset(t).top-C.elOffset(this.elementVertical).top+this.elementVertical.scrollTop}},{key:"visibleRows",value:function(e){return this.rows()}}]),n}(k),S=function(e){a(n,e);var i=c(n);function n(e){var o;return t(this,n),(o=i.call(this,e)).verticalFillMode="fill",o.scrollTop=0,o.scrollLeft=0,o.vDomRowHeight=20,o.vDomTop=0,o.vDomBottom=0,o.vDomScrollPosTop=0,o.vDomScrollPosBottom=0,o.vDomTopPad=0,o.vDomBottomPad=0,o.vDomMaxRenderChain=90,o.vDomWindowBuffer=0,o.vDomWindowMinTotalRows=20,o.vDomWindowMinMarginRows=5,o.vDomTopNewRows=[],o.vDomBottomNewRows=[],o}return o(n,[{key:"clearRows",value:function(){for(var e=this.tableElement;e.firstChild;)e.removeChild(e.firstChild);e.style.paddingTop="",e.style.paddingBottom="",e.style.minWidth="",e.style.minHeight="",e.style.display="",e.style.visibility="",this.elementVertical.scrollTop=0,this.elementVertical.scrollLeft=0,this.scrollTop=0,this.scrollLeft=0,this.vDomTop=0,this.vDomBottom=0,this.vDomTopPad=0,this.vDomBottomPad=0,this.vDomScrollPosTop=0,this.vDomScrollPosBottom=0}},{key:"renderRows",value:function(){this._virtualRenderFill()}},{key:"rerenderRows",value:function(e){for(var t=this.elementVertical.scrollTop,i=!1,n=!1,o=this.table.rowManager.scrollLeft,a=this.rows(),r=this.vDomTop;r<=this.vDomBottom;r++)if(a[r]){var s=t-a[r].getElement().offsetTop;if(!(!1===n||Math.abs(s)o||n>o){var r=this.table.rowManager.scrollLeft;this._virtualRenderFill(Math.floor(this.elementVertical.scrollTop/this.elementVertical.scrollHeight*a.length)),this.scrollColumns(r)}else t?(i<0&&this._addTopRow(a,-i),n<0&&(this.vDomScrollHeight-this.scrollTop>this.vDomWindowBuffer?this._removeBottomRow(a,-n):this.vDomScrollPosBottom=this.scrollTop)):(n>=0&&this._addBottomRow(a,n),i>=0&&(this.scrollTop>this.vDomWindowBuffer?this._removeTopRow(a,i):this.vDomScrollPosTop=this.scrollTop))}},{key:"resize",value:function(){this.vDomWindowBuffer=this.table.options.renderVerticalBuffer||this.elementVertical.clientHeight}},{key:"scrollToRowNearestTop",value:function(e){var t=this.rows().indexOf(e);return!(Math.abs(this.vDomTop-t)>Math.abs(this.vDomBottom-t))}},{key:"scrollToRow",value:function(e){var t=this.rows().indexOf(e);t>-1&&this._virtualRenderFill(t,!0)}},{key:"visibleRows",value:function(e){var t=this.elementVertical.scrollTop,i=this.elementVertical.clientHeight+t,n=!1,o=0,a=0,r=this.rows();if(e)o=this.vDomTop,a=this.vDomBottom;else for(var s=this.vDomTop;s<=this.vDomBottom;s++)if(r[s])if(n){if(!(i-r[s].getElement().offsetTop>=0))break;a=s}else if(t-r[s].getElement().offsetTop>=0)o=s;else{if(n=!0,!(i-r[s].getElement().offsetTop>=0))break;a=s}return r.slice(o,a+1)}},{key:"_virtualRenderFill",value:function(e,t,i){var n=this.tableElement,o=this.elementVertical,a=0,r=0,s=0,l=0,u=0,c=this.rows(),h=c.length,d=this.elementVertical.clientHeight;if(i=i||0,e=e||0){for(;n.firstChild;)n.removeChild(n.firstChild);(s=(h-e+1)*this.vDomRowHeight)this.vDomWindowBuffer&&(this.vDomWindowBuffer=2*m),this.vDomBottom++,u++}e?(this.vDomTopPad=t?this.vDomRowHeight*this.vDomTop+i:this.scrollTop-l,this.vDomBottomPad=this.vDomBottom==h-1?0:Math.max(this.vDomScrollHeight-this.vDomTopPad-r-l,0)):(this.vDomTopPad=0,this.vDomRowHeight=Math.floor((r+l)/u),this.vDomBottomPad=this.vDomRowHeight*(h-this.vDomBottom-1),this.vDomScrollHeight=l+r+this.vDomBottomPad-d),n.style.paddingTop=this.vDomTopPad+"px",n.style.paddingBottom=this.vDomBottomPad+"px",t&&(this.scrollTop=this.vDomTopPad+l+i-(this.elementVertical.scrollWidth>this.elementVertical.clientWidth?this.elementVertical.offsetHeight-d:0)),this.scrollTop=Math.min(this.scrollTop,this.elementVertical.scrollHeight-d),this.elementVertical.scrollWidth>this.elementVertical.offsetWidth&&t&&(this.scrollTop+=this.elementVertical.offsetHeight-d),this.vDomScrollPosTop=this.scrollTop,this.vDomScrollPosBottom=this.scrollTop,o.scrollTop=this.scrollTop,this.dispatch("render-virtual-fill")}}},{key:"_addTopRow",value:function(e,t){for(var i=this.tableElement,n=[],o=0,a=this.vDomTop-1,r=0;this.vDomTop;){var s=e[a],l=void 0,u=void 0;if(!(s&&r=l))break;this.styleRow(s,a),i.insertBefore(s.getElement(),i.firstChild),s.initialized&&s.heightInitialized||n.push(s),s.initialize(),u||(l=s.getElement().offsetHeight)>this.vDomWindowBuffer&&(this.vDomWindowBuffer=2*l),t-=l,o+=l,this.vDomTop--,a--,r++}for(var c=0,h=n;c=(r=a.getHeight()||this.vDomRowHeight)))break;this.vDomTop++,t-=r,n+=r,i.push(a),o++}for(var s=0,l=i;s=l))break;this.styleRow(s,a),i.appendChild(s.getElement()),s.initialized&&s.heightInitialized||n.push(s),s.initialize(),u||(l=s.getElement().offsetHeight)>this.vDomWindowBuffer&&(this.vDomWindowBuffer=2*l),t-=l,o+=l,this.vDomBottom++,a++,r++}for(var c=0,h=n;c=(r=a.getHeight()||this.vDomRowHeight)))break;this.vDomBottom--,t-=r,n+=r,i.push(a),o++}for(var s=0,l=i;st,n=e.element.scrollTop,o=e.scrollTop>n;e.scrollLeft!=t&&(e.scrollLeft=t,e.dispatch("scroll-horizontal",t,i),e.dispatchExternal("scrollHorizontal",t,i)),e.scrollTop!=n&&(e.scrollTop=n,e.renderer.scrollRows(n,o),e.dispatch("scroll-vertical",n,o),e.dispatchExternal("scrollVertical",n,o))}))}},{key:"findRow",value:function(t){var i=this;return"object"!=e(t)?null!=t&&(this.rows.find((function(e){return e.data[i.table.options.index]==t}))||!1):t instanceof L?t:t instanceof M?t._getSelf()||!1:"undefined"!=typeof HTMLElement&&t instanceof HTMLElement&&this.rows.find((function(e){return e.getElement()===t}))||!1}},{key:"getRowFromDataObject",value:function(e){return this.rows.find((function(t){return t.data===e}))||!1}},{key:"getRowFromPosition",value:function(e,t){return t?this.activeRows[e]:this.rows[e]}},{key:"scrollToRow",value:function(e,t,i){return this.renderer.scrollToRowPosition(e,t,i)}},{key:"setData",value:function(e,t,i){var n=this;return new Promise((function(o,a){t&&n.getDisplayRows().length?n.table.options.pagination?n._setDataActual(e,!0):n.reRenderInPosition((function(){n._setDataActual(e)})):(n.table.options.autoColumns&&i&&n.table.columnManager.generateColumnsFromRowData(e),n.resetScroll(),n._setDataActual(e)),o()}))}},{key:"_setDataActual",value:function(t,i){var n=this;this.dispatchExternal("dataProcessing",t),this._wipeElements(),Array.isArray(t)?(this.dispatch("data-processing",t),t.forEach((function(t,i){if(t&&"object"===e(t)){var o=new L(t,n);n.rows.push(o)}else console.warn("Data Loading Warning - Invalid row data detected and ignored, expecting object but received:",t)})),this.refreshActiveData(!1,!1,i),this.dispatch("data-processed",t),this.dispatchExternal("dataProcesed",t)):console.error("Data Loading Error - Unable to process data due to invalid data type \nExpecting: array \nReceived: ",e(t),"\nData: ",t)}},{key:"_wipeElements",value:function(){this.dispatch("rows-wipe"),this.rows.forEach((function(e){e.wipe()})),this.rows=[],this.activeRows=[],this.activeRowsPipeline=[],this.activeRowsCount=0,this.displayRows=[],this.displayRowsCount=0,this.adjustTableSize()}},{key:"deleteRow",value:function(e,t){var i=this.rows.indexOf(e),n=this.activeRows.indexOf(e);n>-1&&this.activeRows.splice(n,1),i>-1&&this.rows.splice(i,1),this.setActiveRows(this.activeRows),this.displayRowIterator((function(t){var i=t.indexOf(e);i>-1&&t.splice(i,1)})),t||this.reRenderInPosition(),this.regenerateRowNumbers(),this.dispatchExternal("rowDeleted",e.getComponent()),this.subscribedExternal("dataChanged")&&this.dispatchExternal("dataChanged",this.getData())}},{key:"addRow",value:function(e,t,i,n){var o=this.addRowActual(e,t,i,n);return this.dispatch("row-added",o,e,t,i),o}},{key:"addRows",value:function(e,t,i){var n=this,o=[];return new Promise((function(a,r){t=n.findAddRowPos(t),Array.isArray(e)||(e=[e]),e.length,(void 0===i&&t||void 0!==i&&!t)&&e.reverse(),e.forEach((function(e,a){var r=n.addRow(e,t,i,!0);o.push(r)})),n.subscribed("row-added")?n.dispatch("row-added",row,e,t,i):n.reRenderInPosition(),n.regenerateRowNumbers(),a(o)}))}},{key:"findAddRowPos",value:function(e){return void 0===e&&(e=this.table.options.addRowPos),"pos"===e&&(e=!0),"bottom"===e&&(e=!1),e}},{key:"addRowActual",value:function(e,t,i,n){var o,a,r=e instanceof L?e:new L(e||{},this),s=this.findAddRowPos(t),l=-1;return i||(a=this.chain("row-adding-position",[r,s],null,{index:i,top:s}),i=a.index,s=a.top),void 0!==i&&(i=this.findRow(i)),(i=this.chain("row-adding-index",[r,i,s],null,i))&&(l=this.rows.indexOf(i)),i&&l>-1?(o=this.activeRows.indexOf(i),this.displayRowIterator((function(e){var t=e.indexOf(i);t>-1&&e.splice(s?t:t+1,0,r)})),o>-1&&this.activeRows.splice(s?o:o+1,0,r),this.rows.splice(s?l:l+1,0,r)):s?(this.displayRowIterator((function(e){e.unshift(r)})),this.activeRows.unshift(r),this.rows.unshift(r)):(this.displayRowIterator((function(e){e.push(r)})),this.activeRows.push(r),this.rows.push(r)),this.setActiveRows(this.activeRows),this.dispatchExternal("rowAdded",r.getComponent()),this.subscribedExternal("dataChanged")&&this.dispatchExternal("dataChanged",this.table.rowManager.getData()),n||this.reRenderInPosition(),r}},{key:"moveRow",value:function(e,t,i){this.dispatch("row-move",e,t,i),this.moveRowActual(e,t,i),this.regenerateRowNumbers(),this.dispatch("row-moved",e,t,i),this.dispatchExternal("rowMoved",e.getComponent())}},{key:"moveRowActual",value:function(e,t,i){var n=this;this.moveRowInArray(this.rows,e,t,i),this.moveRowInArray(this.activeRows,e,t,i),this.displayRowIterator((function(o){n.moveRowInArray(o,e,t,i)})),this.dispatch("row-moving",e,t,i)}},{key:"moveRowInArray",value:function(e,t,i,n){var o,a,r;if(t!==i&&((o=e.indexOf(t))>-1&&(e.splice(o,1),(a=e.indexOf(i))>-1?n?e.splice(a+1,0,t):e.splice(a,0,t):e.splice(o,0,t)),e===this.getDisplayRows())){r=a>o?a:o+1;for(var s=o-1&&t}},{key:"nextDisplayRow",value:function(e,t){var i=this.getDisplayRowIndex(e),n=!1;return!1!==i&&i-1)&&i}},{key:"getData",value:function(e,t){var i=[];return this.getRows(e).forEach((function(e){"row"==e.type&&i.push(e.getData(t||"data"))})),i}},{key:"getComponents",value:function(e){var t=[];return this.getRows(e).forEach((function(e){t.push(e.getComponent())})),t}},{key:"getDataCount",value:function(e){return this.getRows(e).length}},{key:"scrollHorizontal",value:function(e){this.scrollLeft=e,this.element.scrollLeft=e,this.dispatch("scroll-horizontal",e)}},{key:"registerDataPipelineHandler",value:function(e,t){void 0!==t?(this.dataPipeline.push({handler:e,priority:t}),this.dataPipeline.sort((function(e,t){return e.priority-t.priority}))):console.error("Data pipeline handlers must have a priority in order to be registered")}},{key:"registerDisplayPipelineHandler",value:function(e,t){void 0!==t?(this.displayPipeline.push({handler:e,priority:t}),this.displayPipeline.sort((function(e,t){return e.priority-t.priority}))):console.error("Display pipeline handlers must have a priority in order to be registered")}},{key:"refreshActiveData",value:function(e,t,i){var n=this.table,o="",a=0,r=["all","dataPipeline","display","displayPipeline","end"];if("function"==typeof e)if((a=this.dataPipeline.findIndex((function(t){return t.handler===e})))>-1)o="dataPipeline",t&&(a==this.dataPipeline.length-1?o="display":a++);else{if(!((a=this.displayPipeline.findIndex((function(t){return t.handler===e})))>-1))return void console.error("Unable to refresh data, invalid handler provided",e);o="displayPipeline",t&&(a==this.displayPipeline.length-1?o="end":a++)}else o=e||"all",a=0;if(this.redrawBlock)(!this.redrawBlockRestoreConfig||this.redrawBlockRestoreConfig&&(this.redrawBlockRestoreConfig.stage===o&&a-1&&(n.splice(o,1),a=!0),a&&this.updateEventListeners()}},{key:"updateEventListeners",value:function(){for(var e in this.listeners){var t=this.listeners[e];t.components.length?t.handler||(t.handler=this.track.bind(this,e),this.el.addEventListener(e,t.handler)):t.handler&&(this.el.removeEventListener(e,t.handler),t.handler=null)}}},{key:"track",value:function(e,t){var i=this.findTargets(t.path);i=this.bindComponents(e,i),this.triggerEvents(e,t,i)}},{key:"findTargets",value:function(e){var t,i=this,n={},o=Object.keys(this.componentMap),a=p(e);try{for(a.s();!(t=a.n()).done;){var r=t.value,s=r.classList?h(r.classList):[];if(s.filter((function(e){return i.abortClasses.includes(e)})).length)break;var l,u=p(s.filter((function(e){return o.includes(e)})));try{for(u.s();!(l=u.n()).done;){var c=l.value;n[this.componentMap[c]]=r}}catch(e){u.e(e)}finally{u.f()}}}catch(e){a.e(e)}finally{a.f()}return n.group&&n.group===n.row&&delete n.row,n}},{key:"bindComponents",value:function(e,t){var i,n=this,o=Object.keys(t).reverse(),a=this.listeners[e],r={},s=p(o);try{var l=function(){var e=i.value,o=void 0,s=t[e],l=n.previousTargets[e];if(l&&l.target===s)o=l.component;else switch(e){case"row":case"group":if(a.components.includes("row")||a.components.includes("cell"))o=n.table.rowManager.getVisibleRows().find((function(e){return e.getElement()===s}));break;case"column":a.components.includes("column")&&(o=n.table.columnManager.findColumn(s));break;case"cell":a.components.includes("cell")&&(o=t.row.findCell(s))}o&&(t[e]=o,r[e]={target:s,component:o})};for(s.s();!(i=s.n()).done;)l()}catch(e){s.e(e)}finally{s.f()}return this.previousTargets=r,t}},{key:"triggerEvents",value:function(e,t,i){var n=this.listeners[e];for(var o in i)i[o]&&n.components.includes(o)&&this.dispatch(o+"-"+e,t,i[o])}}]),n}(f),z=function(){function e(i){t(this,e),this.table=i,this.bindings={}}return o(e,[{key:"bind",value:function(e,t,i){this.bindings[e]||(this.bindings[e]={}),this.bindings[e][t]?console.warn("Unable to bind component handler, a matching function name is already bound",e,t,hanlder):this.bindings[e][t]=i}},{key:"handle",value:function(e,t,i){if(this.bindings[e]&&this.bindings[e][i])return this.bindings[e][i].bind(null,t);console.error("The "+e+" component does not have a "+i+" function, have you checked that you have the correct Tabulator module installed?")}}]),e}(),A=function(i){a(r,i);var n=c(r);function r(e){var i;return t(this,r),(i=n.call(this,e)).loaderElement=i.createLoaderElement(),i.msgElement=i.createMsgElement(),i.loadingElement=null,i.errorElement=null,i.requestOrder=0,i.loading=!1,i}return o(r,[{key:"initialize",value:function(){var e;this.loaderElement.appendChild(this.msgElement),this.table.options.dataLoaderLoading&&("string"==typeof this.table.options.dataLoaderLoading?((e=document.createElement("template")).innerHTML=this.table.options.dataLoaderLoading.trim(),this.loadingElement=e.content.firstChild):this.loadingElement=this.table.options.dataLoaderLoading),this.table.options.dataLoaderError&&("string"==typeof this.table.options.dataLoaderError?((e=document.createElement("template")).innerHTML=this.table.options.dataLoaderError.trim(),this.errorElement=e.content.firstChild):this.errorElement=this.table.options.dataLoaderError)}},{key:"createLoaderElement",value:function(){var e=document.createElement("div");return e.classList.add("tabulator-loader"),e}},{key:"createMsgElement",value:function(){var e=document.createElement("div");return e.classList.add("tabulator-loader-msg"),e.setAttribute("role","alert"),e}},{key:"load",value:function(t,i,n,o,a){var r=this,s=++this.requestOrder;if(this.dispatchExternal("dataLoading",t),!t||0!=t.indexOf("{")&&0!=t.indexOf("[")||(t=JSON.parse(t)),this.confirm("data-loading",t,i,n,a)){this.loading=!0,a||this.showLoader();i=this.chain("data-params",[t,n,a],i||{},{});return i=this.mapParams(i,this.table.options.dataSendParams),this.chain("data-load",[t,i,n,a],Promise.resolve([])).then((function(i){Array.isArray(i)||"object"!=e(i)||(i=r.mapParams(i,r.objectInvert(r.table.options.dataReceiveParams)));var n=r.chain("data-loaded",i,null,i);s==r.requestOrder?(r.hideLoader(),!1!==n&&(r.dispatchExternal("dataLoaded",t),r.table.rowManager.setData(n,o,!o))):console.warn("Data Load Response Blocked - An active data load request was blocked by an attempt to change table data while the request was being made")})).catch((function(e){console.error("Data Load Error: ",e),r.dispatchExternal("dataLoadError",e),a||r.showError(),setTimeout((function(){r.hideLoader()}),3e3)})).finally((function(){r.loading=!1}))}return this.dispatchExternal("dataLoaded",t),this.table.rowManager.setData(t,o,!o),Promise.resolve()}},{key:"mapParams",value:function(e,t){var i={};for(var n in e)i[t.hasOwnProperty(n)?t[n]:n]=e[n];return i}},{key:"objectInvert",value:function(e){var t={};for(var i in e)t[e[i]]=i;return t}},{key:"blockActiveLoad",value:function(){this.requestOrder++}},{key:"showLoader",value:function(){if("function"==typeof this.table.options.dataLoader?this.table.options.dataLoader():this.table.options.dataLoader){for(this.hideLoader();this.msgElement.firstChild;)this.msgElement.removeChild(this.msgElement.firstChild);this.msgElement.classList.remove("tabulator-error"),this.msgElement.classList.add("tabulator-loading"),this.loadingElement?this.msgElement.appendChild(this.loadingElement):this.msgElement.innerHTML=this.langText("data|loading"),this.table.element.appendChild(this.loaderElement)}}},{key:"showError",value:function(){for(this.hideLoader();this.msgElement.firstChild;)this.msgElement.removeChild(this.msgElement.firstChild);this.msgElement.classList.remove("tabulator-loading"),this.msgElement.classList.add("tabulator-error"),this.errorElement?this.msgElement.appendChild(this.errorElement):this.msgElement.innerHTML=this.langText("data|error"),this.table.element.appendChild(this.loaderElement)}},{key:"hideLoader",value:function(){this.loaderElement.parentNode&&this.loaderElement.parentNode.removeChild(this.loaderElement)}}]),r}(f),O=function(){function e(i,n){t(this,e),this.events={},this.optionsList=i||{},this.subscriptionNotifiers={},this.dispatch=n?this._debugDispatch.bind(this):this._dispatch.bind(this),this.debug=n}return o(e,[{key:"subscriptionChange",value:function(e,t){this.subscriptionNotifiers[e]||(this.subscriptionNotifiers[e]=[]),this.subscriptionNotifiers[e].push(t),this.subscribed(e)&&this._notifiySubscriptionChange(e,!0)}},{key:"subscribe",value:function(e,t){this.events[e]||(this.events[e]=[]),this.events[e].push(t),this._notifiySubscriptionChange(e,!0)}},{key:"unsubscribe",value:function(e,t){var i;if(this.events[e]){if(t){if(!((i=this.events[e].findIndex((function(e){return e===t})))>-1))return void console.warn("Cannot remove event, no matching event found:",e,t);this.events[e].splice(i,1)}else delete this.events[e];this._notifiySubscriptionChange(e,!1)}else console.warn("Cannot remove event, no events set on:",e)}},{key:"subscribed",value:function(e){return this.events[e]&&this.events[e].length}},{key:"_notifiySubscriptionChange",value:function(e,t){var i=this.subscriptionNotifiers[e];i&&i.forEach((function(e){e(t)}))}},{key:"_dispatch",value:function(){var e,t=this,i=Array.from(arguments),n=i.shift();return this.events[n]&&this.events[n].forEach((function(n,o){var a=n.apply(t,i);o||(e=a)})),e}},{key:"_debugDispatch",value:function(){var e,t=Array.from(arguments),i=t[0];(t[0]="ExternalEvent:"+t[0],!0===this.debug||this.debug.includes(i))&&(e=console).log.apply(e,h(t));return this._dispatch.apply(this,arguments)}}]),e}(),_=function(){function e(i){t(this,e),this.events={},this.subscriptionNotifiers={},this.dispatch=i?this._debugDispatch.bind(this):this._dispatch.bind(this),this.chain=i?this._debugChain.bind(this):this._chain.bind(this),this.confirm=i?this._debugConfirm.bind(this):this._confirm.bind(this),this.debug=i}return o(e,[{key:"subscriptionChange",value:function(e,t){this.subscriptionNotifiers[e]||(this.subscriptionNotifiers[e]=[]),this.subscriptionNotifiers[e].push(t),this.subscribed(e)&&this._notifiySubscriptionChange(e,!0)}},{key:"subscribe",value:function(e,t){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1e4;this.events[e]||(this.events[e]=[]),this.events[e].push({callback:t,priority:i}),this.events[e].sort((function(e,t){return e.priority-t.priority})),this._notifiySubscriptionChange(e,!0)}},{key:"unsubscribe",value:function(e,t){var i;if(this.events[e]){if(t){if(!((i=this.events[e].findIndex((function(e){return e.callback===t})))>-1))return void console.warn("Cannot remove event, no matching event found:",e,t);this.events[e].splice(i,1)}this._notifiySubscriptionChange(e,!1)}else console.warn("Cannot remove event, no events set on:",e)}},{key:"subscribed",value:function(e){return this.events[e]&&this.events[e].length}},{key:"_chain",value:function(e,t,i,n){var o=this,a=i;return Array.isArray(t)||(t=[t]),this.subscribed(e)?(this.events[e].forEach((function(e,i){a=e.callback.apply(o,t.concat([a]))})),a):"function"==typeof n?n():n}},{key:"_confirm",value:function(e,t){var i=this,n=!1;return Array.isArray(t)||(t=[t]),this.subscribed(e)&&this.events[e].forEach((function(e,o){e.callback.apply(i,t)&&(n=!0)})),n}},{key:"_notifiySubscriptionChange",value:function(e,t){var i=this.subscriptionNotifiers[e];i&&i.forEach((function(e){e(t)}))}},{key:"_dispatch",value:function(){var e=this,t=Array.from(arguments),i=t.shift();this.events[i]&&this.events[i].forEach((function(i){i.callback.apply(e,t)}))}},{key:"_debugDispatch",value:function(){var e,t=Array.from(arguments),i=t[0];(t[0]="InternalEvent:"+i,!0===this.debug||this.debug.includes(i))&&(e=console).log.apply(e,h(t));return this._dispatch.apply(this,arguments)}},{key:"_debugChain",value:function(){var e,t=Array.from(arguments),i=t[0];(t[0]="InternalEvent:"+i,!0===this.debug||this.debug.includes(i))&&(e=console).log.apply(e,h(t));return this._chain.apply(this,arguments)}},{key:"_debugConfirm",value:function(){var e,t=Array.from(arguments),i=t[0];(t[0]="InternalEvent:"+i,!0===this.debug||this.debug.includes(i))&&(e=console).log.apply(e,h(t));return this._confirm.apply(this,arguments)}}]),e}(),B=function(){function e(){t(this,e)}return o(e,null,[{key:"register",value:function(t){e.tables.push(t)}},{key:"deregister",value:function(t){var i=e.tables.indexOf(t);i>-1&&e.tables.splice(i,1)}},{key:"lookupTable",value:function(t,i){var n,o,a=[];if("string"==typeof t){if((n=document.querySelectorAll(t)).length)for(var r=0;r0?a.setWidth(o):a.reinitializeWidth()):this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.update()},fitColumns:function(e){var t,i,n=this.table.element.clientWidth,o=0,a=0,r=0,s=[],l=[],u=0,c=0;function h(e){return"string"==typeof e?e.indexOf("%")>-1?n/100*parseInt(e):parseInt(e):e}function d(e,t,i,n){var o=[],a=0,s=0,l=0,u=r,c=0,m=0,p=[];function f(e){return i*(e.column.definition.widthGrow||1)}function g(e){return h(e.width)-i*(e.column.definition.widthShrink||0)}return e.forEach((function(e,a){var r=n?g(e):f(e);e.column.minWidth>=r?o.push(e):e.column.maxWidth&&e.column.maxWidththis.table.rowManager.element.clientHeight&&(n-=this.table.rowManager.element.offsetWidth-this.table.rowManager.element.clientWidth),e.forEach((function(e){var t,i,n;e.visible&&(t=e.definition.width,i=parseInt(e.minWidth),t?(n=h(t),o+=n>i?n:i,e.definition.widthShrink&&(l.push({column:e,width:n>i?n:i}),u+=e.definition.widthShrink)):(s.push({column:e,width:0}),r+=e.definition.widthGrow||1))})),a=n-o,t=Math.floor(a/r),c=d(s,a,t,!1),s.length&&c>0&&(s[s.length-1].width+=+c),s.forEach((function(e){a-=e.width})),(i=Math.abs(c)+a)>0&&u&&(c=d(l,i,Math.floor(i/u),!0)),l.length&&(l[l.length-1].width-=c),s.forEach((function(e){e.column.setWidth(e.width)})),l.forEach((function(e){e.column.setWidth(e.width)}))}},W=function(e){a(n,e);var i=c(n);function n(e){var o;return t(this,n),(o=i.call(this,e,"layout")).mode=null,o.registerTableOption("layout","fitData"),o.registerTableOption("layoutColumnsOnNewData",!1),o.registerColumnOption("widthGrow"),o.registerColumnOption("widthShrink"),o}return o(n,[{key:"initialize",value:function(){var e=this.table.options.layout;n.modes[e]?this.mode=e:(console.warn("Layout Error - invalid mode set, defaulting to 'fitData' : "+e),this.mode="fitData"),this.table.element.setAttribute("tabulator-layout",this.mode)}},{key:"getMode",value:function(){return this.mode}},{key:"layout",value:function(){n.modes[this.mode].call(this,this.table.columnManager.columnsByIndex),this.dispatch("layout-refreshed")}}]),n}(N);W.moduleName="layout",W.modes=I;var j=function(i){a(r,i);var n=c(r);function r(e){var i;return t(this,r),(i=n.call(this,e)).locale="default",i.lang=!1,i.bindings={},i.langList={},i.registerTableOption("locale",!1),i.registerTableOption("langs",{}),i}return o(r,[{key:"initialize",value:function(){for(var e in this.langList=C.deepClone(r.langs),!1!==this.table.options.columnDefaults.headerFilterPlaceholder&&this.setHeaderFilterPlaceholder(this.table.options.columnDefaults.headerFilterPlaceholder),this.table.options.langs)this.installLang(e,this.table.options.langs[e]);this.setLocale(this.table.options.locale),this.registerTableFunction("setLocale",this.setLocale.bind(this)),this.registerTableFunction("getLocale",this.getLocale.bind(this)),this.registerTableFunction("getLang",this.getLang.bind(this))}},{key:"setHeaderFilterPlaceholder",value:function(e){this.langList.default.headerFilters.default=e}},{key:"setHeaderFilterColumnPlaceholder",value:function(e,t){this.langList.default.headerFilters.columns[e]=t,this.lang&&!this.lang.headerFilters.columns[e]&&(this.lang.headerFilters.columns[e]=t)}},{key:"installLang",value:function(e,t){this.langList[e]?this._setLangProp(this.langList[e],t):this.langList[e]=t}},{key:"_setLangProp",value:function(t,i){for(var n in i)t[n]&&"object"==e(t[n])?this._setLangProp(t[n],i[n]):t[n]=i[n]}},{key:"setLocale",value:function(t){if(!0===(t=t||"default")&&navigator.language&&(t=navigator.language.toLowerCase()),t&&!this.langList[t]){var i=t.split("-")[0];this.langList[i]?(console.warn("Localization Error - Exact matching locale not found, using closest match: ",t,i),t=i):(console.warn("Localization Error - Matching locale not found, using default: ",t),t="default")}this.locale=t,this.lang=C.deepClone(this.langList.default||{}),"default"!=t&&function t(i,n){for(var o in i)"object"==e(i[o])?(n[o]||(n[o]={}),t(i[o],n[o])):n[o]=i[o]}(this.langList[t],this.lang),this.dispatchExternal("localized",this.locale,this.lang),this._executeBindings()}},{key:"getLocale",value:function(e){return this.locale}},{key:"getLang",value:function(e){return e?this.langList[e]:this.lang}},{key:"getText",value:function(e,t){var i=(e=t?e+"|"+t:e).split("|");return this._getLangElement(i,this.locale)||""}},{key:"_getLangElement",value:function(e,t){var i=this.lang;return e.forEach((function(e){var t;i&&(t=i[e],i=void 0!==t&&t)})),i}},{key:"bind",value:function(e,t){this.bindings[e]||(this.bindings[e]=[]),this.bindings[e].push(t),t(this.getText(e),this.lang)}},{key:"_executeBindings",value:function(){var e=this,t=function(t){e.bindings[t].forEach((function(i){i(e.getText(t),e.lang)}))};for(var i in this.bindings)t(i)}}]),r}(N);j.moduleName="localize",j.langs={default:{groups:{item:"item",items:"items"},columns:{},data:{loading:"Loading",error:"Error"},pagination:{page_size:"Page Size",page_title:"Show Page",first:"First",first_title:"First Page",last:"Last",last_title:"Last Page",prev:"Prev",prev_title:"Prev Page",next:"Next",next_title:"Next Page",all:"All"},headerFilters:{default:"filter column...",columns:{}}}};var G=function(e){a(n,e);var i=c(n);function n(e){return t(this,n),i.call(this,e)}return o(n,[{key:"initialize",value:function(){this.registerTableFunction("tableComms",this.receive.bind(this))}},{key:"getConnections",value:function(e){var t=this,i=[];return Tabulator.comms.lookupTable(e).forEach((function(e){t.table!==e&&i.push(e)})),i}},{key:"send",value:function(e,t,i,n){var o=this,a=this.getConnections(e);a.forEach((function(e){e.tableComms(o.table.element,t,i,n)})),!a.length&&e&&console.warn("Table Connection Error - No tables matching selector found",e)}},{key:"receive",value:function(e,t,i,n){if(this.table.modExists(t))return this.table.modules[t].commsReceived(e,i,n);console.warn("Inter-table Comms Error - no such module:",t)}}]),n}(N);G.moduleName="comms";var U=Object.freeze({__proto__:null,LayoutModule:W,LocalizeModule:j,CommsModule:G}),X=function(){function i(e,n){t(this,i),this.bindStaticFuctionality(e),this.bindModules(e,U,!0),n&&this.bindModules(e,n)}return o(i,[{key:"bindStaticFuctionality",value:function(t){t.moduleBindings={},t.extendModule=function(i,n,o){if(t.moduleBindings[i]){var a=t.moduleBindings[i].prototype[n];if(a)if("object"==e(o))for(var r in o)a[r]=o[r];else console.warn("Module Error - Invalid value type, it must be an object");else console.warn("Module Error - property does not exist:",n)}else console.warn("Module Error - module does not exist:",i)},t.registerModule=function(e){Array.isArray(e)||(e=[e]),e.forEach((function(e){t.registerModuleBinding(e)}))},t.registerModuleBinding=function(e){t.moduleBindings[e.moduleName]=e},t.findTable=function(e){var t=B.lookupTable(e,!0);return!(Array.isArray(t)&&!t.length)&&t},t.prototype.bindModules=function(){for(var e in this.modules={},t.moduleBindings){var i=t.moduleBindings[e];this.modules[e]=new i(this),i.prototype.moduleCore?this.modulesCore[e]=this.modules[e]:this.modulesRegular[e]=this.modules[e]}}}},{key:"bindModules",value:function(e,t,i){var n=Object.values(t);i&&n.forEach((function(e){e.prototype.moduleCore=!0})),e.registerModule(n)}}]),i}(),Y=function(){function e(i,n){var o=this;t(this,e),this.options={},this.columnManager=null,this.rowManager=null,this.footerManager=null,this.vdomHoz=null,this.externalEvents=null,this.eventBus=null,this.interactionMonitor=!1,this.browser="",this.browserSlow=!1,this.browserMobile=!1,this.rtl=!1,this.componentFunctionBinder=new z(this),this.dataLoader=!1,this.modules={},this.modulesCore={},this.modulesRegular={},this.optionsList=new E(this,"table constructor"),this.initializeElement(i)&&(this.initialzeCoreSystems(n),setTimeout((function(){o._create()}))),B.register(this)}return o(e,[{key:"initializeElement",value:function(e){return"undefined"!=typeof HTMLElement&&e instanceof HTMLElement?(this.element=e,!0):"string"==typeof e?(this.element=document.querySelector(e),!!this.element||(console.error("Tabulator Creation Error - no element found matching selector: ",e),!1)):(console.error("Tabulator Creation Error - Invalid element provided:",e),!1)}},{key:"initialzeCoreSystems",value:function(t){this.columnManager=new T(this),this.rowManager=new F(this),this.footerManager=new P(this),this.dataLoader=new A(this),this.bindModules(),this.options=this.optionsList.generate(e.defaultOptions,t),this._clearObjectPointers(),this._mapDepricatedFunctionality(),this.externalEvents=new O(this.options,this.options.debugEventsExternal),this.eventBus=new _(this.options.debugEventsInternal),this.interactionMonitor=new H(this),this.dataLoader.initialize(),this.columnManager.initialize(),this.rowManager.initialize(),this.footerManager.initialize()}},{key:"rtlCheck",value:function(){var e=window.getComputedStyle(this.element);switch(this.options.textDirection){case"auto":if("rtl"!==e.direction)break;case"rtl":this.element.classList.add("tabulator-rtl"),this.rtl=!0;break;case"ltr":this.element.classList.add("tabulator-ltr");default:this.rtl=!1}}},{key:"_mapDepricatedFunctionality",value:function(){}},{key:"_clearSelection",value:function(){this.element.classList.add("tabulator-block-select"),window.getSelection?window.getSelection().empty?window.getSelection().empty():window.getSelection().removeAllRanges&&window.getSelection().removeAllRanges():document.selection&&document.selection.empty(),this.element.classList.remove("tabulator-block-select")}},{key:"_create",value:function(){this.externalEvents.dispatch("tableBuilding"),this.eventBus.dispatch("table-building"),this.rtlCheck(),this._buildElement(),this._loadInitialData()}},{key:"_clearObjectPointers",value:function(){this.options.columns=this.options.columns.slice(0),this.options.data&&!this.options.reactiveData&&(this.options.data=this.options.data.slice(0))}},{key:"_buildElement",value:function(){var e=this.element,t=this.options;for(e.classList.add("tabulator"),e.setAttribute("role","grid");e.firstChild;)e.removeChild(e.firstChild);for(var i in t.height&&(t.height=isNaN(t.height)?t.height:t.height+"px",e.style.height=t.height),!1!==t.minHeight&&(t.minHeight=isNaN(t.minHeight)?t.minHeight:t.minHeight+"px",e.style.minHeight=t.minHeight),!1!==t.maxHeight&&(t.maxHeight=isNaN(t.maxHeight)?t.maxHeight:t.maxHeight+"px",e.style.maxHeight=t.maxHeight),this.columnManager.initialize(),this.rowManager.initialize(),this._detectBrowser(),this.modulesCore){this.modulesCore[i].initialize()}if("string"==typeof t.placeholder){var n=document.createElement("div");n.classList.add("tabulator-placeholder");var o=document.createElement("span");o.innerHTML=t.placeholder,n.appendChild(o),t.placeholder=n}for(var a in e.appendChild(this.columnManager.getElement()),e.appendChild(this.rowManager.getElement()),t.footerElement&&this.footerManager.activate(),t.autoColumns&&this.options.data&&this.columnManager.generateColumnsFromRowData(this.options.data),this.modulesRegular){this.modulesRegular[a].initialize()}this.columnManager.setColumns(t.columns),this.eventBus.dispatch("table-built"),this.externalEvents.dispatch("tableBuilt")}},{key:"_loadInitialData",value:function(){this.dataLoader.load(this.options.data)}},{key:"destroy",value:function(){var e=this.element;for(B.deregister(this),this.eventBus.dispatch("table-destroy"),this.rowManager.rows.forEach((function(e){e.wipe()})),this.rowManager.rows=[],this.rowManager.activeRows=[],this.rowManager.displayRows=[];e.firstChild;)e.removeChild(e.firstChild);e.classList.remove("tabulator")}},{key:"_detectBrowser",value:function(){var e=navigator.userAgent||navigator.vendor||window.opera;e.indexOf("Trident")>-1?(this.browser="ie",this.browserSlow=!0):e.indexOf("Edge")>-1?(this.browser="edge",this.browserSlow=!0):e.indexOf("Firefox")>-1?(this.browser="firefox",this.browserSlow=!1):(this.browser="other",this.browserSlow=!1),this.browserMobile=/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i.test(e)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(e.substr(0,4))}},{key:"blockRedraw",value:function(){return this.rowManager.blockRedraw()}},{key:"restoreRedraw",value:function(){return this.rowManager.restoreRedraw()}},{key:"setDataFromLocalFile",value:function(e){var t=this;return new Promise((function(i,n){var o=document.createElement("input");o.type="file",o.accept=e||".json,application/json",o.addEventListener("change",(function(e){var a,r=o.files[0],s=new FileReader;s.readAsText(r),s.onload=function(e){try{a=JSON.parse(s.result)}catch(e){return console.warn("File Load Error - File contents is invalid JSON",e),void n(e)}t.setData(a).then((function(e){i(e)})).catch((function(e){i(e)}))},s.onerror=function(e){console.warn("File Load Error - Unable to read file"),n()}})),o.click()}))}},{key:"setData",value:function(e,t,i){return this.dataLoader.load(e,t,i,!1)}},{key:"clearData",value:function(){this.dataLoader.blockActiveLoad(),this.rowManager.clearData()}},{key:"getData",value:function(e){return this.rowManager.getData(e)}},{key:"getDataCount",value:function(e){return this.rowManager.getDataCount(e)}},{key:"replaceData",value:function(e,t,i){return this.dataLoader.load(e,t,i,!0,!0)}},{key:"updateData",value:function(e){var t=this,i=0;return new Promise((function(n,o){t.dataLoader.blockActiveLoad(),"string"==typeof e&&(e=JSON.parse(e)),e?e.forEach((function(e){var o=t.rowManager.findRow(e[t.options.index]);o&&(i++,o.updateData(e).then((function(){--i||n()})))})):(console.warn("Update Error - No data provided"),o("Update Error - No data provided"))}))}},{key:"addData",value:function(e,t,i){var n=this;return new Promise((function(o,a){n.dataLoader.blockActiveLoad(),"string"==typeof e&&(e=JSON.parse(e)),e?n.rowManager.addRows(e,t,i).then((function(e){var t=[];e.forEach((function(e){t.push(e.getComponent())})),o(t)})):(console.warn("Update Error - No data provided"),a("Update Error - No data provided"))}))}},{key:"updateOrAddData",value:function(e){var t=this,i=[],n=0;return new Promise((function(o,a){t.dataLoader.blockActiveLoad(),"string"==typeof e&&(e=JSON.parse(e)),e?e.forEach((function(e){var a=t.rowManager.findRow(e[t.options.index]);n++,a?a.updateData(e).then((function(){n--,i.push(a.getComponent()),n||o(i)})):t.rowManager.addRows(e).then((function(e){n--,i.push(e[0].getComponent()),n||o(i)}))})):(console.warn("Update Error - No data provided"),a("Update Error - No data provided"))}))}},{key:"getRow",value:function(e){var t=this.rowManager.findRow(e);return t?t.getComponent():(console.warn("Find Error - No matching row found:",e),!1)}},{key:"getRowFromPosition",value:function(e,t){var i=this.rowManager.getRowFromPosition(e,t);return i?i.getComponent():(console.warn("Find Error - No matching row found:",e),!1)}},{key:"deleteRow",value:function(e){var t=this;return new Promise((function(i,n){var o=0,a=0,r=[];function s(){++o==e.length&&a&&(this.rowManager.reRenderInPosition(),i())}Array.isArray(e)||(e=[e]),e.forEach((function(e){var i=t.rowManager.findRow(e,!0);i?r.push(i):(console.warn("Delete Error - No matching row found:",e),n("Delete Error - No matching row found"),s())})),r.sort((function(e,i){return t.rowManager.rows.indexOf(e)>t.rowManager.rows.indexOf(i)?1:-1})),r.forEach((function(e){e.delete().then((function(){a++,s()})).catch((function(e){s(),n(e)}))}))}))}},{key:"addRow",value:function(e,t,i){return"string"==typeof e&&(e=JSON.parse(e)),this.rowManager.addRows(e,t,i).then((function(e){return e[0].getComponent()}))}},{key:"updateOrAddRow",value:function(e,t){var i=this.rowManager.findRow(e);return"string"==typeof t&&(t=JSON.parse(t)),i?i.updateData(t).then((function(){return i.getComponent()})):this.rowManager.addRows(t).then((function(e){return e[0].getComponent()}))}},{key:"updateRow",value:function(e,t){var i=this.rowManager.findRow(e);return"string"==typeof t&&(t=JSON.parse(t)),i?i.updateData(t).then((function(){resolve(i.getComponent())})):(console.warn("Update Error - No matching row found:",e),Promise.reject("Update Error - No matching row found"))}},{key:"scrollToRow",value:function(e,t,i){var n=this.rowManager.findRow(e);return n?this.rowManager.scrollToRow(n,t,i):(console.warn("Scroll Error - No matching row found:",e),Promise.reject("Scroll Error - No matching row found"))}},{key:"moveRow",value:function(e,t,i){var n=this.rowManager.findRow(e);n?n.moveToRow(t,i):console.warn("Move Error - No matching row found:",e)}},{key:"getRows",value:function(e){return this.rowManager.getComponents(e)}},{key:"getRowPosition",value:function(e,t){var i=this.rowManager.findRow(e);return i?this.rowManager.getRowPosition(i,t):(console.warn("Position Error - No matching row found:",e),!1)}},{key:"setColumns",value:function(e){this.columnManager.setColumns(e)}},{key:"getColumns",value:function(e){return this.columnManager.getComponents(e)}},{key:"getColumn",value:function(e){var t=this.columnManager.findColumn(e);return t?t.getComponent():(console.warn("Find Error - No matching column found:",e),!1)}},{key:"getColumnDefinitions",value:function(){return this.columnManager.getDefinitionTree()}},{key:"showColumn",value:function(e){var t=this.columnManager.findColumn(e);if(!t)return console.warn("Column Show Error - No matching column found:",e),!1;t.show()}},{key:"hideColumn",value:function(e){var t=this.columnManager.findColumn(e);if(!t)return console.warn("Column Hide Error - No matching column found:",e),!1;t.hide()}},{key:"toggleColumn",value:function(e){var t=this.columnManager.findColumn(e);if(!t)return console.warn("Column Visibility Toggle Error - No matching column found:",e),!1;t.visible?t.hide():t.show()}},{key:"addColumn",value:function(e,t,i){var n=this.columnManager.findColumn(i);return this.columnManager.addColumn(e,t,n).then((function(e){returncolumn.getComponent()}))}},{key:"deleteColumn",value:function(e){var t=this.columnManager.findColumn(e);return t?t.delete():(console.warn("Column Delete Error - No matching column found:",e),Promise.reject())}},{key:"updateColumnDefinition",value:function(e,t){var i=this.columnManager.findColumn(e);return i?i.updateDefinition(t):(console.warn("Column Update Error - No matching column found:",e),Promise.reject())}},{key:"moveColumn",value:function(e,t,i){var n=this.columnManager.findColumn(e),o=this.columnManager.findColumn(t);n?o?this.columnManager.moveColumn(n,o,i):console.warn("Move Error - No matching column found:",o):console.warn("Move Error - No matching column found:",e)}},{key:"scrollToColumn",value:function(e,t,i){var n=this;return new Promise((function(o,a){var r=n.columnManager.findColumn(e);return r?n.columnManager.scrollToColumn(r,t,i):(console.warn("Scroll Error - No matching column found:",e),Promise.reject("Scroll Error - No matching column found"))}))}},{key:"redraw",value:function(e){this.columnManager.redraw(e),this.rowManager.redraw(e)}},{key:"setHeight",value:function(e){this.options.height=isNaN(e)?e:e+"px",this.element.style.height=this.options.height,this.rowManager.initializeRenderer(),this.rowManager.redraw()}},{key:"on",value:function(e,t){this.externalEvents.subscribe(e,t)}},{key:"off",value:function(e,t){this.externalEvents.unsubscribe(e,t)}},{key:"dispatchEvent",value:function(){var e,t=Array.from(arguments);t.shift();(e=this.externalEvents).dispatch.apply(e,arguments)}},{key:"modExists",value:function(e,t){return!!this.modules[e]||(t&&console.error("Tabulator Module Not Installed: "+e),!1)}},{key:"module",value:function(e){var t=this.modules[e];return t||console.error("Tabulator module not installed: "+e),t}}]),e}();Y.defaultOptions={debugEventsExternal:!1,debugEventsInternal:!1,debugInvalidOptions:!0,height:!1,minHeight:!1,maxHeight:!1,columnMaxWidth:!1,columnHeaderVertAlign:"top",columns:[],columnDefaults:{},data:!1,autoColumns:!1,autoColumnsDefinitions:!1,nestedFieldSeparator:".",tooltipGenerationMode:"load",footerElement:!1,index:"id",textDirection:"auto",addRowPos:"bottom",headerVisible:!0,renderVertical:"virtual",renderHorizontal:"basic",renderVerticalBuffer:0,scrollToRowPosition:"top",scrollToRowIfVisible:!0,scrollToColumnPosition:"left",scrollToColumnIfVisible:!0,rowFormatter:!1,rowFormatterPrint:null,rowFormatterClipboard:null,rowFormatterHtmlOutput:null,placeholder:!1,dataLoader:!0,dataLoaderLoading:!1,dataLoaderError:!1,dataSendParams:{},dataReceiveParams:{}},new X(Y);var q=function(i){a(r,i);var n=c(r);function r(e){var i;return t(this,r),(i=n.call(this,e)).allowedTypes=["","data","download","clipboard","print","htmlOutput"],i.registerColumnOption("accessor"),i.registerColumnOption("accessorParams"),i.registerColumnOption("accessorData"),i.registerColumnOption("accessorDataParams"),i.registerColumnOption("accessorDownload"),i.registerColumnOption("accessorDownloadParams"),i.registerColumnOption("accessorClipboard"),i.registerColumnOption("accessorClipboardParams"),i.registerColumnOption("accessorPrint"),i.registerColumnOption("accessorPrintParams"),i.registerColumnOption("accessorHtmlOutput"),i.registerColumnOption("accessorHtmlOutputParams"),i}return o(r,[{key:"initialize",value:function(){this.subscribe("column-layout",this.initializeColumn.bind(this)),this.subscribe("row-data-retrieve",this.transformRow.bind(this))}},{key:"initializeColumn",value:function(e){var t=!1,i={};this.allowedTypes.forEach((function(n){var o,a="accessor"+(n.charAt(0).toUpperCase()+n.slice(1));e.definition[a]&&(o=this.lookupAccessor(e.definition[a]))&&(t=!0,i[a]={accessor:o,params:e.definition[a+"Params"]||{}})})),t&&(e.modules.accessor=i)}},{key:"lookupAccessor",value:function(t){var i=!1;switch(e(t)){case"string":r.accessors[t]?i=r.accessors[t]:console.warn("Accessor Error - No such accessor found, ignoring: ",t);break;case"function":i=t}return i}},{key:"transformRow",value:function(e,t){var i="accessor"+(t.charAt(0).toUpperCase()+t.slice(1)),n=e.getComponent(),o=C.deepClone(e.data||{});return this.table.columnManager.traverse((function(e){var a,r,s,l;e.modules.accessor&&(r=e.modules.accessor[i]||e.modules.accessor.accessor||!1)&&"undefined"!=(a=e.getFieldValue(o))&&(l=e.getComponent(),s="function"==typeof r.params?r.params(a,o,t,l,n):r.params,e.setFieldValue(o,r.accessor(a,o,t,s,l,n)))})),o}}]),r}(N);q.moduleName="accessor",q.accessors={};function K(t,i){var n=[];if(i=i||"",Array.isArray(t))t.forEach((function(e,t){n=n.concat(K(e,i?i+"["+t+"]":t))}));else if("object"===e(t))for(var o in t)n=n.concat(K(t[o],i?i+"["+o+"]":o));else n.push({key:i,value:t});return n}function J(e){var t=K(e),i=[];return t.forEach((function(e){i.push(encodeURIComponent(e.key)+"="+encodeURIComponent(e.value))})),i.join("&")}var $={json:{headers:{"Content-Type":"application/json"},body:function(e,t,i){return JSON.stringify(i)}},form:{headers:{},body:function(e,t,i){var n=this.generateParamsList(i),o=new FormData;return n.forEach((function(e){o.append(e.key,e.value)})),o}}},Q=function(e){a(n,e);var i=c(n);function n(e){var o;return t(this,n),(o=i.call(this,e)).config=!1,o.url="",o.urlGenerator=!1,o.params=!1,o.loaderPromise=!1,o.registerTableOption("ajaxURL",!1),o.registerTableOption("ajaxURLGenerator",!1),o.registerTableOption("ajaxParams",{}),o.registerTableOption("ajaxConfig","get"),o.registerTableOption("ajaxContentType","form"),o.registerTableOption("ajaxRequestFunc",!1),o.registerTableOption("ajaxRequesting",(function(){})),o.registerTableOption("ajaxResponse",!1),o.contentTypeFormatters=n.contentTypeFormatters,o}return o(n,[{key:"initialize",value:function(){this.loaderPromise=this.table.options.ajaxRequestFunc||n.defaultLoaderPromise,this.urlGenerator=this.table.options.ajaxURLGenerator||n.defaultURLGenerator,this.table.options.ajaxParams&&this.setParams(this.table.options.ajaxParams),this.table.options.ajaxConfig&&this.setConfig(this.table.options.ajaxConfig),this.table.options.ajaxURL&&this.setUrl(this.table.options.ajaxURL),this.registerTableFunction("getAjaxUrl",this.getUrl.bind(this)),this.subscribe("data-loading",this.requestDataCheck.bind(this)),this.subscribe("data-load",this.requestData.bind(this))}},{key:"requestDataCheck",value:function(e,t,i,n){return!((e||!this.url)&&"string"!=typeof e)}},{key:"requestData",value:function(e,t,i,n,o){return this.requestDataCheck(e)?(e&&this.setUrl(e),t&&this.setParams(t,!0),i&&this.setConfig(i),this.sendRequest()):o}},{key:"setParams",value:function(e,t){if(t)for(var i in this.params=this.params||{},e)this.params[i]=e[i];else this.params=e}},{key:"getParams",value:function(){return this.params||{}}},{key:"setConfig",value:function(e){if(this._loadDefaultConfig(),"string"==typeof e)this.config.method=e;else for(var t in e)this.config[t]=e[t]}},{key:"_loadDefaultConfig",value:function(e){if(!this.config||e)for(var t in this.config={},n.defaultConfig)this.config[t]=n.defaultConfig[t]}},{key:"setUrl",value:function(e){this.url=e}},{key:"getUrl",value:function(){return this.url}},{key:"sendRequest",value:function(e){var t=this,i=this.url;return this._loadDefaultConfig(),!1!==this.table.options.ajaxRequesting.call(this.table,this.url,this.params)?this.loaderPromise(i,this.config,this.params).then((function(e){return t.table.options.ajaxResponse&&(e=t.table.options.ajaxResponse.call(t.table,t.url,t.params,e)),e})):Promise.reject()}}]),n}(N);Q.moduleName="ajax",Q.defaultConfig={method:"GET"},Q.defaultURLGenerator=function(e,t,i){return e&&i&&Object.keys(i).length&&(t.method&&"get"!=t.method.toLowerCase()||(t.method="get",e+=(e.includes("?")?"&":"?")+J(i))),e},Q.defaultLoaderPromise=function(t,i,n){var o,a=this;return new Promise((function(r,s){if(t=a.urlGenerator.call(a.table,t,i,n),"GET"!=i.method.toUpperCase())if(o="object"===e(a.table.options.ajaxContentType)?a.table.options.ajaxContentType:a.contentTypeFormatters[a.table.options.ajaxContentType]){for(var l in o.headers)i.headers||(i.headers={}),void 0===i.headers[l]&&(i.headers[l]=o.headers[l]);i.body=o.body.call(a,t,i,n)}else console.warn("Ajax Error - Invalid ajaxContentType value:",a.table.options.ajaxContentType);t?(void 0===i.headers&&(i.headers={}),void 0===i.headers.Accept&&(i.headers.Accept="application/json"),void 0===i.headers["X-Requested-With"]&&(i.headers["X-Requested-With"]="XMLHttpRequest"),void 0===i.mode&&(i.mode="cors"),"cors"==i.mode?(void 0===i.headers["Access-Control-Allow-Origin"]&&(i.headers["Access-Control-Allow-Origin"]=window.location.origin),void 0===i.credentials&&(i.credentials="same-origin")):void 0===i.credentials&&(i.credentials="include"),fetch(t,i).then((function(e){e.ok?e.json().then((function(e){r(e)})).catch((function(e){s(e),console.warn("Ajax Load Error - Invalid JSON returned",e)})):(console.error("Ajax Load Error - Connection Error: "+e.status,e.statusText),s(e))})).catch((function(e){console.error("Ajax Load Error - Connection Error: ",e),s(e)}))):(console.warn("Ajax Load Error - No URL Set"),r([]))}))},Q.contentTypeFormatters=$;var Z=function(i){a(r,i);var n=c(r);function r(e){var i;return t(this,r),(i=n.call(this,e)).mode=!0,i.pasteParser=function(){},i.pasteAction=function(){},i.customSelection=!1,i.rowRange=!1,i.blocked=!0,i.registerTableOption("clipboard",!1),i.registerTableOption("clipboardCopyStyled",!0),i.registerTableOption("clipboardCopyConfig",!1),i.registerTableOption("clipboardCopyFormatter",!1),i.registerTableOption("clipboardCopyRowRange","active"),i.registerTableOption("clipboardPasteParser","table"),i.registerTableOption("clipboardPasteAction","insert"),i.registerColumnOption("clipboard"),i.registerColumnOption("titleClipboard"),i}return o(r,[{key:"initialize",value:function(){var e=this;this.mode=this.table.options.clipboard,this.rowRange=this.table.options.clipboardCopyRowRange,!0!==this.mode&&"copy"!==this.mode||this.table.element.addEventListener("copy",(function(t){var i,n;if(!e.blocked){if(t.preventDefault(),e.customSelection)i=e.customSelection,e.table.options.clipboardCopyFormatter&&(i=e.table.options.clipboardCopyFormatter("plain",i));else{var o=e.table.modules.export.generateExportList(e.table.options.clipboardCopyConfig,e.table.options.clipboardCopyStyled,e.rowRange,"clipboard");i=(n=e.table.modules.export.genereateHTMLTable(o))?e.generatePlainContent(o):"",e.table.options.clipboardCopyFormatter&&(i=e.table.options.clipboardCopyFormatter("plain",i),n=e.table.options.clipboardCopyFormatter("html",n))}window.clipboardData&&window.clipboardData.setData?window.clipboardData.setData("Text",i):t.clipboardData&&t.clipboardData.setData?(t.clipboardData.setData("text/plain",i),n&&t.clipboardData.setData("text/html",n)):t.originalEvent&&t.originalEvent.clipboardData.setData&&(t.originalEvent.clipboardData.setData("text/plain",i),n&&t.originalEvent.clipboardData.setData("text/html",n)),e.dispatchExternal("clipboardCopied",i,n),e.reset()}})),!0!==this.mode&&"paste"!==this.mode||this.table.element.addEventListener("paste",(function(t){e.paste(t)})),this.setPasteParser(this.table.options.clipboardPasteParser),this.setPasteAction(this.table.options.clipboardPasteAction),this.registerTableFunction("copyToClipboard",this.copy.bind(this))}},{key:"reset",value:function(){this.blocked=!0,this.customSelection=!1}},{key:"generatePlainContent",value:function(t){var i=[];return t.forEach((function(t){var n=[];t.columns.forEach((function(i){var o="";if(i)if("group"===t.type&&(i.value=i.component.getKey()),null===i.value)o="";else switch(e(i.value)){case"object":o=JSON.stringify(i.value);break;case"undefined":o="";break;default:o=i.value}n.push(o)})),i.push(n.join("\t"))})),i.join("\n")}},{key:"copy",value:function(e,t){var i,n;this.blocked=!1,this.customSelection=!1,!0!==this.mode&&"copy"!==this.mode||(this.rowRange=e||this.table.options.clipboardCopyRowRange,void 0!==window.getSelection&&void 0!==document.createRange?((e=document.createRange()).selectNodeContents(this.table.element),(i=window.getSelection()).toString()&&t&&(this.customSelection=i.toString()),i.removeAllRanges(),i.addRange(e)):void 0!==document.selection&&void 0!==document.body.createTextRange&&((n=document.body.createTextRange()).moveToElementText(this.table.element),n.select()),document.execCommand("copy"),i&&i.removeAllRanges())}},{key:"setPasteAction",value:function(t){switch(e(t)){case"string":this.pasteAction=r.pasteActions[t],this.pasteAction||console.warn("Clipboard Error - No such paste action found:",t);break;case"function":this.pasteAction=t}}},{key:"setPasteParser",value:function(t){switch(e(t)){case"string":this.pasteParser=r.pasteParsers[t],this.pasteParser||console.warn("Clipboard Error - No such paste parser found:",t);break;case"function":this.pasteParser=t}}},{key:"paste",value:function(e){var t,i,n;this.checkPaseOrigin(e)&&(t=this.getPasteData(e),(i=this.pasteParser.call(this,t))?(e.preventDefault(),this.table.modExists("mutator")&&(i=this.mutateData(i)),n=this.pasteAction.call(this,i),this.dispatchExternal("clipboardPasted",t,i,n)):this.dispatchExternal("clipboardPasteError",t))}},{key:"mutateData",value:function(e){var t=this,i=[];return Array.isArray(e)?e.forEach((function(e){i.push(t.table.modules.mutator.transformRow(e,"clipboard"))})):i=e,i}},{key:"checkPaseOrigin",value:function(e){var t=!0;return("DIV"!=e.target.tagName||this.table.modules.edit.currentCell)&&(t=!1),t}},{key:"getPasteData",value:function(e){var t;return window.clipboardData&&window.clipboardData.getData?t=window.clipboardData.getData("Text"):e.clipboardData&&e.clipboardData.getData?t=e.clipboardData.getData("text/plain"):e.originalEvent&&e.originalEvent.clipboardData.getData&&(t=e.originalEvent.clipboardData.getData("text/plain")),t}}]),r}(N);Z.moduleName="clipboard",Z.pasteActions={replace:function(e){return this.table.setData(e)},update:function(e){return this.table.updateOrAddData(e)},insert:function(e){return this.table.addData(e)}},Z.pasteParsers={table:function(e){var t=[],i=!0,n=this.table.columnManager.columns,o=[],a=[];return(e=e.split("\n")).forEach((function(e){t.push(e.split("\t"))})),!(!t.length||1===t.length&&t[0].length<2)&&(t[0].forEach((function(e){var t=n.find((function(t){return e&&t.definition.title&&e.trim()&&t.definition.title.trim()===e.trim()}));t?o.push(t):i=!1})),i||(i=!0,o=[],t[0].forEach((function(e){var t=n.find((function(t){return e&&t.field&&e.trim()&&t.field.trim()===e.trim()}));t?o.push(t):i=!1})),i||(o=this.table.columnManager.columnsByIndex)),i&&t.shift(),t.forEach((function(e){var t={};e.forEach((function(e,i){o[i]&&(t[o[i].field]=e)})),a.push(t)})),a)}};var ee=function(){function e(i){return t(this,e),this._row=i,new Proxy(this,{get:function(e,t,i){return void 0!==e[t]?e[t]:e._row.table.componentFunctionBinder.handle("row",e._row,t)}})}return o(e,[{key:"getData",value:function(e){return this._row.getData(e)}},{key:"getElement",value:function(){return this._row.getElement()}},{key:"getTable",value:function(){return this._row.table}},{key:"getCells",value:function(){var e=[];return this._row.getCells().forEach((function(t){e.push(t.getComponent())})),e}},{key:"getCell",value:function(e){var t=this._row.getCell(e);return!!t&&t.getComponent()}},{key:"_getSelf",value:function(){return this._row}}]),e}(),te={avg:function(e,t,i){var n=0,o=void 0!==i.precision?i.precision:2;return e.length&&(n=e.reduce((function(e,t){return Number(e)+Number(t)})),n/=e.length,n=!1!==o?n.toFixed(o):n),parseFloat(n).toString()},max:function(e,t,i){var n=null,o=void 0!==i.precision&&i.precision;return e.forEach((function(e){((e=Number(e))>n||null===n)&&(n=e)})),null!==n?!1!==o?n.toFixed(o):n:""},min:function(e,t,i){var n=null,o=void 0!==i.precision&&i.precision;return e.forEach((function(e){((e=Number(e))"),n.dataTreeExpandElement?"string"==typeof n.dataTreeExpandElement?((t=document.createElement("div")).innerHTML=n.dataTreeExpandElement,this.expandEl=t.firstChild):this.expandEl=n.dataTreeExpandElement:(this.expandEl=document.createElement("div"),this.expandEl.classList.add("tabulator-data-tree-control"),this.expandEl.tabIndex=0,this.expandEl.innerHTML="
"),e(n.dataTreeStartExpanded)){case"boolean":this.startOpen=function(e,t){return n.dataTreeStartExpanded};break;case"function":this.startOpen=n.dataTreeStartExpanded;break;default:this.startOpen=function(e,t){return n.dataTreeStartExpanded[t]}}this.subscribe("row-init",this.initializeRow.bind(this)),this.subscribe("row-layout",this.layoutRow.bind(this)),this.subscribe("row-relayout",this.layoutRow.bind(this)),this.subscribe("row-deleted",this.rowDelete.bind(this),0),this.subscribe("row-data-changed",this.rowDataChanged.bind(this),10),this.subscribe("column-moving-rows",this.columnMoving.bind(this)),this.registerDisplayHandler(this.getRows.bind(this),30)}}},{key:"getRowChildren",value:function(e){return this.getTreeChildren(e,!0)}},{key:"columnMoving",value:function(){var e=this,t=[];return this.table.rowManager.rows.forEach((function(i){t=t.concat(e.getTreeChildren(i,!1,!0))})),t}},{key:"rowDataChanged",value:function(e,t,i){this.redrawNeeded(i)&&(this.initializeRow(e),t&&(this.layoutRow(e),this.refreshData(!0)))}},{key:"initializeRow",value:function(t){var i=t.getData()[this.field],n=Array.isArray(i),o=n||!n&&"object"===e(i)&&null!==i;!o&&t.modules.dataTree&&t.modules.dataTree.branchEl&&t.modules.dataTree.branchEl.parentNode.removeChild(t.modules.dataTree.branchEl),!o&&t.modules.dataTree&&t.modules.dataTree.controlEl&&t.modules.dataTree.controlEl.parentNode.removeChild(t.modules.dataTree.controlEl),t.modules.dataTree={index:t.modules.dataTree?t.modules.dataTree.index:0,open:!!o&&(t.modules.dataTree?t.modules.dataTree.open:this.startOpen(t.getComponent(),0)),controlEl:!(!t.modules.dataTree||!o)&&t.modules.dataTree.controlEl,branchEl:!(!t.modules.dataTree||!o)&&t.modules.dataTree.branchEl,parent:!!t.modules.dataTree&&t.modules.dataTree.parent,children:o}}},{key:"reinitializeRowChildren",value:function(e){this.getTreeChildren(e,!1,!0).forEach((function(e){e.reinitialize(!0)}))}},{key:"layoutRow",value:function(e){var t=(this.elementField?e.getCell(this.elementField):e.getCells()[0]).getElement(),i=e.modules.dataTree;i.branchEl&&(i.branchEl.parentNode&&i.branchEl.parentNode.removeChild(i.branchEl),i.branchEl=!1),i.controlEl&&(i.controlEl.parentNode&&i.controlEl.parentNode.removeChild(i.controlEl),i.controlEl=!1),this.generateControlElement(e,t),e.getElement().classList.add("tabulator-tree-level-"+i.index),i.index&&(this.branchEl?(i.branchEl=this.branchEl.cloneNode(!0),t.insertBefore(i.branchEl,t.firstChild),this.table.rtl?i.branchEl.style.marginRight=(i.branchEl.offsetWidth+i.branchEl.style.marginLeft)*(i.index-1)+i.index*this.indent+"px":i.branchEl.style.marginLeft=(i.branchEl.offsetWidth+i.branchEl.style.marginRight)*(i.index-1)+i.index*this.indent+"px"):this.table.rtl?t.style.paddingRight=parseInt(window.getComputedStyle(t,null).getPropertyValue("padding-right"))+i.index*this.indent+"px":t.style.paddingLeft=parseInt(window.getComputedStyle(t,null).getPropertyValue("padding-left"))+i.index*this.indent+"px")}},{key:"generateControlElement",value:function(e,t){var i=this,n=e.modules.dataTree,o=(t=t||e.getCells()[0].getElement(),n.controlEl);!1!==n.children&&(n.open?(n.controlEl=this.collapseEl.cloneNode(!0),n.controlEl.addEventListener("click",(function(t){t.stopPropagation(),i.collapseRow(e)}))):(n.controlEl=this.expandEl.cloneNode(!0),n.controlEl.addEventListener("click",(function(t){t.stopPropagation(),i.expandRow(e)}))),n.controlEl.addEventListener("mousedown",(function(e){e.stopPropagation()})),o&&o.parentNode===t?o.parentNode.replaceChild(n.controlEl,o):t.insertBefore(n.controlEl,t.firstChild))}},{key:"setDisplayIndex",value:function(e){this.displayIndex=e}},{key:"getDisplayIndex",value:function(){return this.displayIndex}},{key:"getRows",value:function(e){var t=this,i=[];return e.forEach((function(e,n){var o;i.push(e),e instanceof L&&(e.create(),(o=e.modules.dataTree.children).index||!1===o.children||t.getChildren(e).forEach((function(e){e.create(),i.push(e)})))})),i}},{key:"getChildren",value:function(e,t){var i=this,n=e.modules.dataTree,o=[],a=[];return!1!==n.children&&(n.open||t)&&(Array.isArray(n.children)||(n.children=this.generateChildren(e)),o=this.table.modExists("filter")&&this.table.options.dataTreeFilter?this.table.modules.filter.filter(n.children):n.children,this.table.modExists("sort")&&this.table.options.dataTreeSort&&this.table.modules.sort.sort(o),o.forEach((function(e){a.push(e),i.getChildren(e).forEach((function(e){a.push(e)}))}))),a}},{key:"generateChildren",value:function(e){var t=this,i=[],n=e.getData()[this.field];return Array.isArray(n)||(n=[n]),n.forEach((function(n){var o=new L(n||{},t.table.rowManager);o.create(),o.modules.dataTree.index=e.modules.dataTree.index+1,o.modules.dataTree.parent=e,o.modules.dataTree.children&&(o.modules.dataTree.open=t.startOpen(o.getComponent(),o.modules.dataTree.index)),i.push(o)})),i}},{key:"expandRow",value:function(e,t){var i=e.modules.dataTree;!1!==i.children&&(i.open=!0,e.reinitialize(),this.refreshData(!0),this.dispatchExternal("dataTreeRowExpanded",e.getComponent(),e.modules.dataTree.index))}},{key:"collapseRow",value:function(e){var t=e.modules.dataTree;!1!==t.children&&(t.open=!1,e.reinitialize(),this.refreshData(!0),this.dispatchExternal("dataTreeRowCollapsed",getComponent(),e.modules.dataTree.index))}},{key:"toggleRow",value:function(e){var t=e.modules.dataTree;!1!==t.children&&(t.open?this.collapseRow(e):this.expandRow(e))}},{key:"getTreeParent",value:function(e){return!!e.modules.dataTree.parent&&e.modules.dataTree.parent.getComponent()}},{key:"getFilteredTreeChildren",value:function(e){var t=e.modules.dataTree,i=[];return t.children&&(Array.isArray(t.children)||(t.children=this.generateChildren(e)),(this.table.modExists("filter")&&this.table.options.dataTreeFilter?this.table.modules.filter.filter(t.children):t.children).forEach((function(e){e instanceof L&&i.push(e)}))),i}},{key:"rowDelete",value:function(e){var t,i=e.modules.dataTree.parent;i&&(!1!==(t=this.findChildIndex(e,i))&&i.data[this.field].splice(t,1),i.data[this.field].length||delete i.data[this.field],this.initializeRow(i),this.layoutRow(i)),this.refreshData(!0)}},{key:"addTreeChildRow",value:function(e,t,i,n){var o=!1;"string"==typeof t&&(t=JSON.parse(t)),Array.isArray(e.data[this.field])||(e.data[this.field]=[],e.modules.dataTree.open=this.startOpen(e.getComponent(),e.modules.dataTree.index)),void 0!==n&&!1!==(o=this.findChildIndex(n,e))&&e.data[this.field].splice(i?o:o+1,0,t),!1===o&&(i?e.data[this.field].unshift(t):e.data[this.field].push(t)),this.initializeRow(e),this.layoutRow(e),this.refreshData(!0)}},{key:"findChildIndex",value:function(t,i){var n=this,o=!1;return"object"==e(t)?t instanceof L?o=t.data:t instanceof RowComponent?o=t._getSelf().data:"undefined"!=typeof HTMLElement&&t instanceof HTMLElement&&i.modules.dataTree&&(o=i.modules.dataTree.children.find((function(e){return e instanceof L&&e.element===t})))&&(o=o.data):o=null!=t&&i.data[this.field].find((function(e){return e.data[n.table.options.index]==t})),o&&(Array.isArray(i.data[this.field])&&(o=i.data[this.field].indexOf(o)),-1==o&&(o=!1)),o}},{key:"getTreeChildren",value:function(e,t,i){var n=this,o=e.modules.dataTree,a=[];return o.children&&(Array.isArray(o.children)||(o.children=this.generateChildren(e)),o.children.forEach((function(e){e instanceof L&&(a.push(t?e.getComponent():e),i&&(a=a.concat(n.getTreeChildren(e,t,i))))}))),a}},{key:"checkForRestyle",value:function(e){e.row.cells.indexOf(e)||e.row.reinitialize()}},{key:"getChildField",value:function(){return this.field}},{key:"redrawNeeded",value:function(e){return!!this.field&&void 0!==e[this.field]||!!this.elementField&&void 0!==e[this.elementField]}}]),r}(N);ne.moduleName="dataTree";var oe={csv:function(t,i,n){var o=i&&i.delimiter?i.delimiter:",",a=[],r=[];t.forEach((function(t){var i=[];switch(t.type){case"group":console.warn("Download Warning - CSV downloader cannot process row groups");break;case"calc":console.warn("Download Warning - CSV downloader cannot process column calculations");break;case"header":t.columns.forEach((function(e,t){e&&1===e.depth&&(r[t]=void 0===e.value||null===e.value?"":'"'+String(e.value).split('"').join('""')+'"')}));break;case"row":t.columns.forEach((function(t){if(t){switch(e(t.value)){case"object":t.value=JSON.stringify(t.value);break;case"undefined":case"null":t.value=""}i.push('"'+String(t.value).split('"').join('""')+'"')}})),a.push(i.join(o))}})),r.length&&a.unshift(r.join(o)),a=a.join("\n"),i.bom&&(a="\ufeff"+a),n(a,"text/csv")},json:function(e,t,i){var n=[];e.forEach((function(e){var t={};switch(e.type){case"header":break;case"group":console.warn("Download Warning - JSON downloader cannot process row groups");break;case"calc":console.warn("Download Warning - JSON downloader cannot process column calculations");break;case"row":e.columns.forEach((function(e){e&&(t[e.component.getField()]=e.value)})),n.push(t)}})),i(n=JSON.stringify(n,null,"\t"),"application/json")},pdf:function(t,i,n){var o=[],a=[],r={},s=i.rowGroupStyles||{fontStyle:"bold",fontSize:12,cellPadding:6,fillColor:220},l=i.rowCalcStyles||{fontStyle:"bold",fontSize:10,cellPadding:4,fillColor:232},u=i.jsPDF||{},c=i&&i.title?i.title:"";function h(t,i){var n=[];return t.columns.forEach((function(t){var o;if(t){switch(e(t.value)){case"object":t.value=JSON.stringify(t.value);break;case"undefined":case"null":t.value=""}o={content:t.value,colSpan:t.width,rowSpan:t.height},i&&(o.styles=i),n.push(o)}else n.push("")})),n}u.orientation||(u.orientation=i.orientation||"landscape"),u.unit||(u.unit="pt"),t.forEach((function(e){switch(e.type){case"header":o.push(h(e));break;case"group":a.push(h(e,s));break;case"calc":a.push(h(e,l));break;case"row":a.push(h(e))}}));var d=new jsPDF(u);i&&i.autoTable&&(r="function"==typeof i.autoTable?i.autoTable(d)||{}:i.autoTable),c&&(r.addPageContent=function(e){d.text(c,40,30)}),r.head=o,r.body=a,d.autoTable(r),i&&i.documentProcessing&&i.documentProcessing(d),n(d.output("arraybuffer"),"application/pdf")},xlsx:function(t,i,n){var o=i.sheetName||"Sheet1",a=XLSX.utils.book_new(),r=new f(this);function s(){var i=[],n=[],o={},a={s:{c:0,r:0},e:{c:t[0]?t[0].columns.reduce((function(e,t){return e+(t&&t.width?t.width:1)}),0):0,r:t.length}};return t.forEach((function(t,o){var a=[];t.columns.forEach((function(t,i){t?(a.push(t.value instanceof Date||"object"!==e(t.value)?t.value:JSON.stringify(t.value)),(t.width>1||t.height>-1)&&n.push({s:{r:o,c:i},e:{r:o+t.height-1,c:i+t.width-1}})):a.push("")})),i.push(a)})),XLSX.utils.sheet_add_aoa(o,i),o["!ref"]=XLSX.utils.encode_range(a),n.length&&(o["!merges"]=n),o}if(output,a.SheetNames=[],a.Sheets={},i.sheetOnly)n(s());else{if(i.sheets)for(var l in i.sheets)!0===i.sheets[l]?(a.SheetNames.push(l),a.Sheets[l]=s()):(a.SheetNames.push(l),r.commsSend(i.sheets[l],"download","intercept",{type:"xlsx",options:{sheetOnly:!0},active:this.active,intercept:function(e){a.Sheets[l]=e}}));else a.SheetNames.push(o),a.Sheets[o]=s();i.documentProcessing&&(a=i.documentProcessing(a)),output=XLSX.write(a,{bookType:"xlsx",bookSST:!0,type:"binary"}),n(function(e){for(var t=new ArrayBuffer(e.length),i=new Uint8Array(t),n=0;n!=e.length;++n)i[n]=255&e.charCodeAt(n);return t}(output),"application/octet-stream")}},html:function(e,t,i){this.modExists("export",!0)&&i(this.modules.export.genereateHTMLTable(e),"text/html")}},ae=function(e){a(n,e);var i=c(n);function n(e){var o;return t(this,n),(o=i.call(this,e)).registerTableOption("downloadReady",(function(e,t){return t})),o.registerTableOption("downloadConfig",{}),o.registerTableOption("downloadRowRange","active"),o.registerColumnOption("download"),o.registerColumnOption("titleDownload"),o}return o(n,[{key:"initialize",value:function(){this.registerTableFunction("download",this.download.bind(this)),this.registerTableFunction("downloadToTab",this.downloadToTab.bind(this))}},{key:"downloadToTab",value:function(e,t,i,n){this.download(e,t,i,n,!0)}},{key:"download",value:function(e,t,i,o,a){var r=!1;if("function"==typeof e?r=e:n.downloaders[e]?r=n.downloaders[e]:console.warn("Download Error - No such download type found: ",e),r){var s=this.generateExportList(o);r.call(this.table,s,i||{},(function(i,n){a?!0===a?this.triggerDownload(i,n,e,t,!0):a(i):this.triggerDownload(i,n,e,t)}))}}},{key:"generateExportList",value:function(e){var t=this.table.modules.export.generateExportList(this.table.options.downloadConfig,!1,e||this.table.options.downloadRowRange,"download"),i=this.table.options.groupHeaderDownload;return i&&!Array.isArray(i)&&(i=[i]),t.forEach((function(e){var t;"group"===e.type&&(t=e.columns[0],i&&i[e.indent]&&(t.value=i[e.indent](t.value,e.component._group.getRowCount(),e.component._group.getData(),e.component)))})),t}},{key:"triggerDownload",value:function(e,t,i,n,o){var a=document.createElement("a"),r=new Blob([e],{type:t});n=n||"Tabulator."+("function"==typeof i?"txt":i);(r=this.table.options.downloadReady(e,r))&&(o?window.open(window.URL.createObjectURL(r)):navigator.msSaveOrOpenBlob?navigator.msSaveOrOpenBlob(r,n):(a.setAttribute("href",window.URL.createObjectURL(r)),a.setAttribute("download",n),a.style.display="none",document.body.appendChild(a),a.click(),document.body.removeChild(a)),this.dispatchExternal("downloadComplete"))}},{key:"commsReceived",value:function(e,t,i){switch(t){case"intercept":this.download(i.type,"",i.options,i.active,i.intercept)}}}]),n}(N);function re(e,t){var i=t.mask,n=void 0!==t.maskLetterChar?t.maskLetterChar:"A",o=void 0!==t.maskNumberChar?t.maskNumberChar:"9",a=void 0!==t.maskWildcardChar?t.maskWildcardChar:"*";function r(t){var s=i[t];void 0!==s&&s!==a&&s!==n&&s!==o&&(e.value=e.value+""+s,r(t+1))}e.addEventListener("keydown",(function(t){var r=e.value.length,s=t.key;if(t.keyCode>46){if(r>=i.length)return t.preventDefault(),t.stopPropagation(),!1;switch(i[r]){case n:if(s.toUpperCase()==s.toLowerCase())return t.preventDefault(),t.stopPropagation(),!1;break;case o:if(isNaN(s))return t.preventDefault(),t.stopPropagation(),!1;break;case a:break;default:if(s!==i[r])return t.preventDefault(),t.stopPropagation(),!1}}})),e.addEventListener("keyup",(function(i){i.keyCode>46&&t.maskAutoFill&&r(e.value.length)})),e.placeholder||(e.placeholder=i),t.maskAutoFill&&r(e.value.length)}ae.moduleName="download",ae.downloaders=oe;var se={input:function(t,i,n,o,a){var r=t.getValue(),s=document.createElement("input");if(s.setAttribute("type",a.search?"search":"text"),s.style.padding="4px",s.style.width="100%",s.style.boxSizing="border-box",a.elementAttributes&&"object"==e(a.elementAttributes))for(var l in a.elementAttributes)"+"==l.charAt(0)?(l=l.slice(1),s.setAttribute(l,s.getAttribute(l)+a.elementAttributes["+"+l])):s.setAttribute(l,a.elementAttributes[l]);function u(e){null==r&&""!==s.value||s.value!==r?n(s.value)&&(r=s.value):o()}return s.value=void 0!==r?r:"",i((function(){s.focus({preventScroll:!0}),s.style.height="100%"})),s.addEventListener("change",u),s.addEventListener("blur",u),s.addEventListener("keydown",(function(e){switch(e.keyCode){case 13:u();break;case 27:o();break;case 35:case 36:e.stopPropagation()}})),a.mask&&re(s,a),s},textarea:function(t,i,n,o,a){var r=t.getValue(),s=a.verticalNavigation||"hybrid",l=String(null!=r?r:""),u=((l.match(/(?:\r\n|\r|\n)/g)||[]).length,document.createElement("textarea")),c=0;if(u.style.display="block",u.style.padding="2px",u.style.height="100%",u.style.width="100%",u.style.boxSizing="border-box",u.style.whiteSpace="pre-wrap",u.style.resize="none",a.elementAttributes&&"object"==e(a.elementAttributes))for(var h in a.elementAttributes)"+"==h.charAt(0)?(h=h.slice(1),u.setAttribute(h,u.getAttribute(h)+a.elementAttributes["+"+h])):u.setAttribute(h,a.elementAttributes[h]);function d(e){null==r&&""!==u.value||u.value!==r?(n(u.value)&&(r=u.value),setTimeout((function(){t.getRow().normalizeHeight()}),300)):o()}return u.value=l,i((function(){u.focus({preventScroll:!0}),u.style.height="100%",u.scrollHeight,u.style.height=u.scrollHeight+"px",t.getRow().normalizeHeight()})),u.addEventListener("change",d),u.addEventListener("blur",d),u.addEventListener("keyup",(function(){u.style.height="";var e=u.scrollHeight;u.style.height=e+"px",e!=c&&(c=e,t.getRow().normalizeHeight())})),u.addEventListener("keydown",(function(e){switch(e.keyCode){case 27:o();break;case 38:("editor"==s||"hybrid"==s&&u.selectionStart)&&(e.stopImmediatePropagation(),e.stopPropagation());break;case 40:("editor"==s||"hybrid"==s&&u.selectionStart!==u.value.length)&&(e.stopImmediatePropagation(),e.stopPropagation());break;case 35:case 36:e.stopPropagation()}})),a.mask&&re(u,a),u},number:function(t,i,n,o,a){var r=t.getValue(),s=a.verticalNavigation||"editor",l=document.createElement("input");if(l.setAttribute("type","number"),void 0!==a.max&&l.setAttribute("max",a.max),void 0!==a.min&&l.setAttribute("min",a.min),void 0!==a.step&&l.setAttribute("step",a.step),l.style.padding="4px",l.style.width="100%",l.style.boxSizing="border-box",a.elementAttributes&&"object"==e(a.elementAttributes))for(var u in a.elementAttributes)"+"==u.charAt(0)?(u=u.slice(1),l.setAttribute(u,l.getAttribute(u)+a.elementAttributes["+"+u])):l.setAttribute(u,a.elementAttributes[u]);l.value=r;var c=function(e){h()};function h(){var e=l.value;isNaN(e)||""===e||(e=Number(e)),e!==r?n(e)&&(r=e):o()}return i((function(){l.removeEventListener("blur",c),l.focus({preventScroll:!0}),l.style.height="100%",l.addEventListener("blur",c)})),l.addEventListener("keydown",(function(e){switch(e.keyCode){case 13:h();break;case 27:o();break;case 38:case 40:"editor"==s&&(e.stopImmediatePropagation(),e.stopPropagation());break;case 35:case 36:e.stopPropagation()}})),a.mask&&re(l,a),l},range:function(t,i,n,o,a){var r=t.getValue(),s=document.createElement("input");if(s.setAttribute("type","range"),void 0!==a.max&&s.setAttribute("max",a.max),void 0!==a.min&&s.setAttribute("min",a.min),void 0!==a.step&&s.setAttribute("step",a.step),s.style.padding="4px",s.style.width="100%",s.style.boxSizing="border-box",a.elementAttributes&&"object"==e(a.elementAttributes))for(var l in a.elementAttributes)"+"==l.charAt(0)?(l=l.slice(1),s.setAttribute(l,s.getAttribute(l)+a.elementAttributes["+"+l])):s.setAttribute(l,a.elementAttributes[l]);function u(){var e=s.value;isNaN(e)||""===e||(e=Number(e)),e!=r?n(e)&&(r=e):o()}return s.value=r,i((function(){s.focus({preventScroll:!0}),s.style.height="100%"})),s.addEventListener("blur",(function(e){u()})),s.addEventListener("keydown",(function(e){switch(e.keyCode){case 13:u();break;case 27:o()}})),s},select:function(t,i,n,o,a){var r=this,s=this,l=t.getElement(),u=t.getValue(),c=a.verticalNavigation||"editor",h=void 0!==u||null===u?Array.isArray(u)?u:[u]:void 0!==a.defaultValue?a.defaultValue:[],d=document.createElement("input"),m=document.createElement("div"),p=a.multiselect,f=[],g={},v=[],b=[],y=!0,w=!1,E="",k=null;function R(e){var i,n={},o=s.table.getData();return(i=e?s.table.columnManager.getColumnByField(e):t.getColumn()._getSelf())?o.forEach((function(e){var t=i.getFieldValue(e);null!=t&&""!==t&&(n[t]=!0)})):console.warn("unable to find matching column to create select lookup list:",e),Object.keys(n)}function x(i,n){var o=[],r=[];function s(e){e={label:e.label,value:e.value,itemParams:e.itemParams,elementAttributes:e.elementAttributes,element:!1};return n.indexOf(e.value)>-1&&M(e),o.push(e),r.push(e),e}if("function"==typeof i&&(i=i(t)),Array.isArray(i))i.forEach((function(t){var i;"object"===e(t)?t.options?(i={label:t.label,group:!0,itemParams:t.itemParams,elementAttributes:t.elementAttributes,element:!1},r.push(i),t.options.forEach((function(e){s(e)}))):s(t):(i={label:t,value:t,element:!1},n.indexOf(i.value)>-1&&M(i),o.push(i),r.push(i))}));else for(var l in i){var u={label:i[l],value:l,element:!1};n.indexOf(u.value)>-1&&M(u),o.push(u),r.push(u)}a.sortValuesList&&(o.sort((function(e,t){return e.labelt.label?1:0})),r.sort((function(e,t){return e.labelt.label?1:0})),"asc"!==a.sortValuesList&&(o.reverse(),r.reverse())),f=o,v=r,function(){for(;m.firstChild;)m.removeChild(m.firstChild);v.forEach((function(i){var n=i.element;if(!n){if(n=document.createElement("div"),i.label=a.listItemFormatter?a.listItemFormatter(i.value,i.label,t,n,i.itemParams):i.label,i.group?(n.classList.add("tabulator-edit-select-list-group"),n.tabIndex=0,n.innerHTML=""===i.label?" ":i.label):(n.classList.add("tabulator-edit-select-list-item"),n.tabIndex=0,n.innerHTML=""===i.label?" ":i.label,n.addEventListener("click",(function(){w=!0,setTimeout((function(){w=!1}),10),p?(D(i),d.focus()):S(i)})),b.indexOf(i)>-1&&n.classList.add("active")),i.elementAttributes&&"object"==e(i.elementAttributes))for(var o in i.elementAttributes)"+"==o.charAt(0)?(o=o.slice(1),n.setAttribute(o,d.getAttribute(o)+i.elementAttributes["+"+o])):n.setAttribute(o,i.elementAttributes[o]);n.addEventListener("mousedown",(function(){y=!1,setTimeout((function(){y=!0}),10)})),i.element=n}m.appendChild(n)}))}()}function T(e,t){!p&&g&&g.element&&g.element.classList.remove("active"),g&&g.element&&g.element.classList.remove("focused"),g=e,e.element&&(e.element.classList.add("focused"),t&&e.element.classList.add("active")),e&&e.element&&e.element.scrollIntoView&&e.element.scrollIntoView({behavior:"smooth",block:"nearest",inline:"start"})}function M(e){-1==b.indexOf(e)&&(b.push(e),T(e,!0)),P()}function L(e){var t=b[e];e>-1&&(b.splice(e,1),t.element&&t.element.classList.remove("active"))}function D(e){e||(e=g);var t=b.indexOf(e);t>-1?L(t):(!0!==p&&b.length>=p&&L(0),M(e)),P()}function S(e){z(),e||(e=g),e&&(d.value=e.label,n(e.value)),h=[e.value]}function F(e){e||z();var t=[];b.forEach((function(e){t.push(e.value)})),h=t,n(t)}function P(){var e=[];b.forEach((function(t){e.push(t.label)})),d.value=e.join(", "),!1===s.currentCell&&F(!0)}function H(){z(),o()}function z(){m.parentNode&&m.parentNode.removeChild(m),s.table.rowManager.element.removeEventListener("scroll",H)}if((Array.isArray(a)||!Array.isArray(a)&&"object"===e(a)&&!a.values)&&(console.warn("DEPRECATION WARNING - values for the select editor must now be passed into the values property of the editorParams object, not as the editorParams object"),a={values:a}),d.setAttribute("type","text"),d.style.padding="4px",d.style.width="100%",d.style.boxSizing="border-box",d.style.cursor="default",d.readOnly=0!=this.currentCell,a.elementAttributes&&"object"==e(a.elementAttributes))for(var A in a.elementAttributes)"+"==A.charAt(0)?(A=A.slice(1),d.setAttribute(A,d.getAttribute(A)+a.elementAttributes["+"+A])):d.setAttribute(A,a.elementAttributes[A]);return d.value=void 0!==u||null===u?u:"",d.addEventListener("search",(function(e){d.value||(!function(){for(var e=b.length,t=0;t0&&T(f[t-1],!p));break;case 40:t=f.indexOf(g),("editor"==c||"hybrid"==c&&t=38&&e.keyCode<=90&&function(e){clearTimeout(k);var t=String.fromCharCode(event.keyCode).toLowerCase();E+=t.toLowerCase();var i=f.find((function(e){return void 0!==e.label&&e.label.toLowerCase().startsWith(E)}));i&&T(i,!p),k=setTimeout((function(){E=""}),800)}(e.keyCode)}})),d.addEventListener("blur",(function(e){y&&(p?F():H())})),d.addEventListener("focus",(function(e){w||function(){if(b=[],!m.parentNode){!0===a.values?x(R(),h):"string"==typeof a.values?x(R(a.values),h):x(a.values||[],h);var e=C.elOffset(l);m.style.minWidth=l.offsetWidth+"px",m.style.top=e.top+l.offsetHeight+"px",m.style.left=e.left+"px",m.addEventListener("mousedown",(function(e){y=!1,setTimeout((function(){y=!0}),10)})),document.body.appendChild(m)}}()})),(m=document.createElement("div")).classList.add("tabulator-edit-select-list"),i((function(){d.style.height="100%",d.focus({preventScroll:!0})})),setTimeout((function(){r.table.rowManager.element.addEventListener("scroll",H)}),10),d},autocomplete:function(t,i,n,o,a){var r=this,s=this,l=t.getElement(),u=t.getValue(),c=a.verticalNavigation||"editor",h=void 0!==u||null===u?u:void 0!==a.defaultValue?a.defaultValue:"",d=document.createElement("input"),m=document.createElement("div"),p=[],f=!1,g=!0,v=!1;if(d.setAttribute("type","search"),d.style.padding="4px",d.style.width="100%",d.style.boxSizing="border-box",a.elementAttributes&&"object"==e(a.elementAttributes))for(var b in a.elementAttributes)"+"==b.charAt(0)?(b=b.slice(1),d.setAttribute(b,d.getAttribute(b)+a.elementAttributes["+"+b])):d.setAttribute(b,a.elementAttributes[b]);function y(){!0===a.values?v=w():"string"==typeof a.values&&(v=w(a.values))}function w(e){var i,n={},o=s.table.getData();return(i=e?s.table.columnManager.getColumnByField(e):t.getColumn()._getSelf())?(o.forEach((function(e){var t=i.getFieldValue(e);null!=t&&""!==t&&(n[t]=!0)})),n=a.sortValuesList?"asc"==a.sortValuesList?Object.keys(n).sort():Object.keys(n).sort().reverse():Object.keys(n)):console.warn("unable to find matching column to create autocomplete lookup list:",e),n}function E(e,t){var i,n,o=[];i=v||(a.values||[]),a.searchFunc?(o=a.searchFunc(e,i))instanceof Promise?(k(void 0!==a.searchingPlaceholder?a.searchingPlaceholder:"Searching..."),o.then((function(e){T(R(e),t)})).catch((function(e){console.err("error in autocomplete search promise:",e)}))):T(R(o),t):(n=R(i),""===e?a.showListOnEmpty&&(o=n):n.forEach((function(t){null===t.value&&void 0===t.value||(String(t.value).toLowerCase().indexOf(String(e).toLowerCase())>-1||String(t.title).toLowerCase().indexOf(String(e).toLowerCase())>-1)&&o.push(t)})),T(o,t))}function k(e){var t=document.createElement("div");x(),!1!==e&&(t.classList.add("tabulator-edit-select-list-notice"),t.tabIndex=0,e instanceof Node?t.appendChild(e):t.innerHTML=e,m.appendChild(t))}function R(t){var i=[];if(Array.isArray(t))t.forEach((function(t){var n={};"object"===e(t)?(n.title=a.listItemFormatter?a.listItemFormatter(t.value,t.label):t.label,n.value=t.value):(n.title=a.listItemFormatter?a.listItemFormatter(t,t):t,n.value=t),i.push(n)}));else for(var n in t){var o={title:a.listItemFormatter?a.listItemFormatter(n,t[n]):t[n],value:n};i.push(o)}return i}function x(){for(;m.firstChild;)m.removeChild(m.firstChild)}function T(e,t){e.length?function(e,t){var i=!1;x(),(p=e).forEach((function(e){var n=e.element;n||((n=document.createElement("div")).classList.add("tabulator-edit-select-list-item"),n.tabIndex=0,n.innerHTML=e.title,n.addEventListener("click",(function(t){L(e),M()})),n.addEventListener("mousedown",(function(e){g=!1,setTimeout((function(){g=!0}),10)})),e.element=n,t&&e.value==u&&(d.value=e.title,e.element.classList.add("active"),i=!0),e===f&&(e.element.classList.add("active"),i=!0)),m.appendChild(n)})),i||L(!1)}(e,t):a.emptyPlaceholder&&k(a.emptyPlaceholder)}function M(){D(),f?u!==f.value?(u=f.value,d.value=f.title,n(f.value)):o():a.freetext||a.allowEmpty&&""===d.value?(u=d.value,n(d.value)):o()}function L(e,t){f&&f.element&&f.element.classList.remove("active"),f=e,e&&e.element&&e.element.classList.add("active"),e&&e.element&&e.element.scrollIntoView&&e.element.scrollIntoView({behavior:"smooth",block:"nearest",inline:"start"})}function D(){m.parentNode&&m.parentNode.removeChild(m),s.table.rowManager.element.removeEventListener("scroll",S)}function S(){D(),o()}return m.classList.add("tabulator-edit-select-list"),m.addEventListener("mousedown",(function(e){g=!1,setTimeout((function(){g=!0}),10)})),d.addEventListener("keydown",(function(e){var t;switch(e.keyCode){case 38:t=p.indexOf(f),("editor"==c||"hybrid"==c&&t)&&(e.stopImmediatePropagation(),e.stopPropagation(),e.preventDefault(),L(t>0&&p[t-1]));break;case 40:t=p.indexOf(f),("editor"==c||"hybrid"==c&&t'):("ie"==r.table.browser?t.setAttribute("class","tabulator-star-inactive"):t.classList.replace("tabulator-star-active","tabulator-star-inactive"),t.innerHTML='')}))}function f(e){var t=document.createElement("span"),i=m.cloneNode(!0);h.push(i),t.addEventListener("mouseenter",(function(t){t.stopPropagation(),t.stopImmediatePropagation(),p(e)})),t.addEventListener("mousemove",(function(e){e.stopPropagation(),e.stopImmediatePropagation()})),t.addEventListener("click",(function(t){t.stopPropagation(),t.stopImmediatePropagation(),n(e),s.blur()})),t.appendChild(i),d.appendChild(t)}function g(e){l=e,p(e)}if(s.style.whiteSpace="nowrap",s.style.overflow="hidden",s.style.textOverflow="ellipsis",d.style.verticalAlign="middle",d.style.display="inline-block",d.style.padding="4px",m.setAttribute("width",c),m.setAttribute("height",c),m.setAttribute("viewBox","0 0 512 512"),m.setAttribute("xml:space","preserve"),m.style.padding="0 1px",a.elementAttributes&&"object"==e(a.elementAttributes))for(var v in a.elementAttributes)"+"==v.charAt(0)?(v=v.slice(1),d.setAttribute(v,d.getAttribute(v)+a.elementAttributes["+"+v])):d.setAttribute(v,a.elementAttributes[v]);for(var b=1;b<=u;b++)f(b);return p(l=Math.min(parseInt(l),u)),d.addEventListener("mousemove",(function(e){p(0)})),d.addEventListener("click",(function(e){n(0)})),s.addEventListener("blur",(function(e){o()})),s.addEventListener("keydown",(function(e){switch(e.keyCode){case 39:g(l+1);break;case 37:g(l-1);break;case 13:n(l);break;case 27:o()}})),d},progress:function(t,i,n,o,a){var r,s,l=t.getElement(),u=void 0===a.max?l.getElementsByTagName("div")[0].getAttribute("max")||100:a.max,c=void 0===a.min?l.getElementsByTagName("div")[0].getAttribute("min")||0:a.min,h=(u-c)/100,d=t.getValue()||0,m=document.createElement("div"),p=document.createElement("div");function f(){var e=window.getComputedStyle(l,null),t=h*Math.round(p.offsetWidth/((l.clientWidth-parseInt(e.getPropertyValue("padding-left"))-parseInt(e.getPropertyValue("padding-right")))/100))+c;n(t),l.setAttribute("aria-valuenow",t),l.setAttribute("aria-label",d)}if(m.style.position="absolute",m.style.right="0",m.style.top="0",m.style.bottom="0",m.style.width="5px",m.classList.add("tabulator-progress-handle"),p.style.display="inline-block",p.style.position="relative",p.style.height="100%",p.style.backgroundColor="#488CE9",p.style.maxWidth="100%",p.style.minWidth="0%",a.elementAttributes&&"object"==e(a.elementAttributes))for(var g in a.elementAttributes)"+"==g.charAt(0)?(g=g.slice(1),p.setAttribute(g,p.getAttribute(g)+a.elementAttributes["+"+g])):p.setAttribute(g,a.elementAttributes[g]);return l.style.padding="4px 4px",d=Math.min(parseFloat(d),u),d=Math.max(parseFloat(d),c),d=Math.round((d-c)/h),p.style.width=d+"%",l.setAttribute("aria-valuemin",c),l.setAttribute("aria-valuemax",u),p.appendChild(m),m.addEventListener("mousedown",(function(e){r=e.screenX,s=p.offsetWidth})),m.addEventListener("mouseover",(function(){m.style.cursor="ew-resize"})),l.addEventListener("mousemove",(function(e){r&&(p.style.width=s+e.screenX-r+"px")})),l.addEventListener("mouseup",(function(e){r&&(e.stopPropagation(),e.stopImmediatePropagation(),r=!1,s=!1,f())})),l.addEventListener("keydown",(function(e){switch(e.keyCode){case 39:e.preventDefault(),p.style.width=p.clientWidth+l.clientWidth/100+"px";break;case 37:e.preventDefault(),p.style.width=p.clientWidth-l.clientWidth/100+"px";break;case 9:case 13:f();break;case 27:o()}})),l.addEventListener("blur",(function(){o()})),p},tickCross:function(t,i,n,o,a){var r=t.getValue(),s=document.createElement("input"),l=a.tristate,u=void 0===a.indeterminateValue?null:a.indeterminateValue,c=!1;if(s.setAttribute("type","checkbox"),s.style.marginTop="5px",s.style.boxSizing="border-box",a.elementAttributes&&"object"==e(a.elementAttributes))for(var h in a.elementAttributes)"+"==h.charAt(0)?(h=h.slice(1),s.setAttribute(h,s.getAttribute(h)+a.elementAttributes["+"+h])):s.setAttribute(h,a.elementAttributes[h]);function d(e){return l?e?c?u:s.checked:s.checked&&!c?(s.checked=!1,s.indeterminate=!0,c=!0,u):(c=!1,s.checked):s.checked}return s.value=r,!l||void 0!==r&&r!==u&&""!==r||(c=!0,s.indeterminate=!0),"firefox"!=this.table.browser&&i((function(){s.focus({preventScroll:!0})})),s.checked=!0===r||"true"===r||"True"===r||1===r,i((function(){s.focus()})),s.addEventListener("change",(function(e){n(d())})),s.addEventListener("blur",(function(e){n(d(!0))})),s.addEventListener("keydown",(function(e){13==e.keyCode&&n(d()),27==e.keyCode&&o()})),s}},le=function(i){a(r,i);var n=c(r);function r(e){var i;return t(this,r),(i=n.call(this,e)).currentCell=!1,i.mouseClick=!1,i.recursionBlock=!1,i.invalidEdit=!1,i.editedCells=[],i.editors=r.editors,i.registerColumnOption("editable"),i.registerColumnOption("editor"),i.registerColumnOption("editorParams"),i.registerColumnOption("cellEditing"),i.registerColumnOption("cellEdited"),i.registerColumnOption("cellEditCancelled"),i.registerTableFunction("getEditedCells",i.getEditedCells.bind(l(i))),i.registerTableFunction("clearCellEdited",i.clearCellEdited.bind(l(i))),i.registerTableFunction("navigatePrev",i.navigatePrev.bind(l(i))),i.registerTableFunction("navigateNext",i.navigateNext.bind(l(i))),i.registerTableFunction("navigateLeft",i.navigateLeft.bind(l(i))),i.registerTableFunction("navigateRight",i.navigateRight.bind(l(i))),i.registerTableFunction("navigateUp",i.navigateUp.bind(l(i))),i.registerTableFunction("navigateDown",i.navigateDown.bind(l(i))),i.registerComponentFunction("cell","isEdited",i.cellisEdited.bind(l(i))),i.registerComponentFunction("cell","clearEdited",i.clearEdited.bind(l(i))),i.registerComponentFunction("cell","edit",i.editCell.bind(l(i))),i.registerComponentFunction("cell","cancelEdit",i.cellCancelEdit.bind(l(i))),i.registerComponentFunction("cell","navigatePrev",i.navigatePrev.bind(l(i))),i.registerComponentFunction("cell","navigateNext",i.navigateNext.bind(l(i))),i.registerComponentFunction("cell","navigateLeft",i.navigateLeft.bind(l(i))),i.registerComponentFunction("cell","navigateRight",i.navigateRight.bind(l(i))),i.registerComponentFunction("cell","navigateUp",i.navigateUp.bind(l(i))),i.registerComponentFunction("cell","navigateDown",i.navigateDown.bind(l(i))),i}return o(r,[{key:"initialize",value:function(){this.subscribe("cell-init",this.bindEditor.bind(this)),this.subscribe("cell-delete",this.clearEdited.bind(this)),this.subscribe("column-layout",this.initializeColumnCheck.bind(this)),this.subscribe("column-delete",this.columnDeleteCheck.bind(this)),this.subscribe("row-deleting",this.rowDeleteCheck.bind(this)),this.subscribe("data-refeshing",this.cancelEdit.bind(this)),this.subscribe("keybinding-nav-prev",this.navigatePrev.bind(this)),this.subscribe("keybinding-nav-next",this.keybindingNavigateNext.bind(this)),this.subscribe("keybinding-nav-left",this.navigateLeft.bind(this)),this.subscribe("keybinding-nav-right",this.navigateRight.bind(this)),this.subscribe("keybinding-nav-up",this.navigateUp.bind(this)),this.subscribe("keybinding-nav-down",this.navigateDown.bind(this))}},{key:"keybindingNavigateNext",value:function(e){var t=this.currentCell,i=this.options("tabEndNewRow");t&&(this.navigateNext(e)||i&&(t.getElement().firstChild.blur(),(i=!0===i?this.table.addRow({}):"function"==typeof i?this.table.addRow(i(t.row.getComponent())):this.table.addRow(Object.assign({},i))).then((function(){setTimeout((function(){nav.next()}))}))))}},{key:"cellisEdited",value:function(e){return!!e.modules.edit&&e.modules.edit.edited}},{key:"cellCancelEdit",value:function(e){e===this.currentCell?this.table.modules.edit.cancelEdit():console.warn("Cancel Editor Error - This cell is not currently being edited ")}},{key:"clearCellEdited",value:function(e){var t=this;e||(e=this.modules.edit.getEditedCells()),Array.isArray(e)||(e=[e]),e.forEach((function(e){t.modules.edit.clearEdited(e._getSelf())}))}},{key:"navigatePrev",value:function(e){var t,i,n=this.currentCell;if(n){if(e&&e.preventDefault(),t=this.navigateLeft())return!0;if((i=this.table.rowManager.prevDisplayRow(n.row,!0))&&(t=this.findNextEditableCell(i,i.cells.length)))return t.edit(),!0}return!1}},{key:"navigateNext",value:function(e){var t,i,n=this.currentCell;if(n){if(e&&e.preventDefault(),t=this.navigateRight())return!0;if((i=this.table.rowManager.nextDisplayRow(n.row,!0))&&(t=this.findNextEditableCell(i,-1)))return t.edit(),!0}return!1}},{key:"navigateLeft",value:function(e){var t,i,n=this.currentCell;return!!(n&&(e&&e.preventDefault(),t=n.getIndex(),i=this.findPrevEditableCell(n.row,t)))&&(i.edit(),!0)}},{key:"navigateRight",value:function(e){var t,i,n=this.currentCell;return!!(n&&(e&&e.preventDefault(),t=n.getIndex(),i=this.findNextEditableCell(n.row,t)))&&(i.edit(),!0)}},{key:"navigateUp",value:function(e){var t,i,n=this.currentCell;return!!(n&&(e&&e.preventDefault(),t=n.getIndex(),i=this.table.rowManager.prevDisplayRow(n.row,!0)))&&(i.cells[t].edit(),!0)}},{key:"navigateDown",value:function(e){var t,i,n=this.currentCell;return!!(n&&(e&&e.preventDefault(),t=n.getIndex(),i=this.table.rowManager.nextDisplayRow(n.row,!0)))&&(i.cells[t].edit(),!0)}},{key:"findNextEditableCell",value:function(e,t){var i=!1;if(t0)for(var n=t-1;n>=0;n--){var o=e.cells[n],a=!0;if(o.column.modules.edit&&Helpers.elVisible(o.getElement())&&("function"==typeof o.column.modules.edit.check&&(a=o.column.modules.edit.check(o.getComponent())),a)){i=o;break}}return i}},{key:"initializeColumnCheck",value:function(e){void 0!==e.definition.editor&&this.initializeColumn(e)}},{key:"columnDeleteCheck",value:function(e){this.currentCell&&this.currentCell.column===e&&this.cancelEdit()}},{key:"rowDeleteCheck",value:function(e){this.currentCell&&this.currentCell.row===e&&this.cancelEdit()}},{key:"initializeColumn",value:function(t){var i={editor:!1,blocked:!1,check:t.definition.editable,params:t.definition.editorParams||{}};switch(e(t.definition.editor)){case"string":this.editors[t.definition.editor]?i.editor=this.editors[t.definition.editor]:console.warn("Editor Error - No such editor found: ",t.definition.editor);break;case"function":i.editor=t.definition.editor;break;case"boolean":!0===t.definition.editor&&("function"!=typeof t.definition.formatter?this.editors[t.definition.formatter]?i.editor=this.editors[t.definition.formatter]:i.editor=this.editors.input:console.warn("Editor Error - Cannot auto lookup editor for a custom formatter: ",t.definition.formatter))}i.editor&&(t.modules.edit=i)}},{key:"getCurrentCell",value:function(){return!!this.currentCell&&this.currentCell.getComponent()}},{key:"clearEditor",value:function(e){var t,i=this.currentCell;if(this.invalidEdit=!1,i){for(this.currentCell=!1,t=i.getElement(),e?i.validate():t.classList.remove("tabulator-validation-fail"),t.classList.remove("tabulator-editing");t.firstChild;)t.removeChild(t.firstChild);i.row.getElement().classList.remove("tabulator-row-editing")}}},{key:"cancelEdit",value:function(){if(this.currentCell){var e=this.currentCell,t=this.currentCell.getComponent();this.clearEditor(!0),e.setValueActual(e.getValue()),e.cellRendered(),("textarea"==e.column.definition.editor||e.column.definition.variableHeight)&&e.row.normalizeHeight(!0),e.column.definition.cellEditCancelled&&e.column.definition.cellEditCancelled.call(this.table,t),this.dispatchExternal("cellEditCancelled",t)}}},{key:"bindEditor",value:function(e){if(e.column.modules.edit){var t=this,i=e.getElement(!0);i.setAttribute("tabindex",0),i.addEventListener("click",(function(e){i.classList.contains("tabulator-editing")||i.focus({preventScroll:!0})})),i.addEventListener("mousedown",(function(e){2===e.button?e.preventDefault():t.mouseClick=!0})),i.addEventListener("focus",(function(i){t.recursionBlock||t.edit(e,i,!1)}))}}},{key:"focusCellNoEvent",value:function(e,t){this.recursionBlock=!0,t&&"ie"===this.table.browser||e.getElement().focus({preventScroll:!0}),this.recursionBlock=!1}},{key:"editCell",value:function(e,t){this.focusCellNoEvent(e),this.edit(e,!1,t)}},{key:"focusScrollAdjust",value:function(e){if("virtual"==this.table.rowManager.getRenderMode()){var t=this.table.rowManager.element.scrollTop,i=this.table.rowManager.element.clientHeight+this.table.rowManager.element.scrollTop,n=e.row.getElement();n.offsetTop;n.offsetTopi&&(this.table.rowManager.element.scrollTop+=n.offsetTop+n.offsetHeight-i);var o=this.table.rowManager.element.scrollLeft,a=this.table.rowManager.element.clientWidth+this.table.rowManager.element.scrollLeft,r=e.getElement();r.offsetLeft;this.table.modExists("frozenColumns")&&(o+=parseInt(this.table.modules.frozenColumns.leftMargin),a-=parseInt(this.table.modules.frozenColumns.rightMargin)),"virtual"===this.table.options.renderHorizontal&&(o-=parseInt(this.table.columnManager.renderer.vDomPadLeft),a-=parseInt(this.table.columnManager.renderer.vDomPadLeft)),r.offsetLefta&&(this.table.rowManager.element.scrollLeft+=r.offsetLeft+r.offsetWidth-a)}}},{key:"edit",value:function(t,i,n){var o,a,r,s=this,l=!0,u=function(){},c=t.getElement();if(!this.currentCell){if(t.column.modules.edit.blocked)return this.mouseClick=!1,c.blur(),!1;switch(i&&i.stopPropagation(),e(t.column.modules.edit.check)){case"function":l=t.column.modules.edit.check(t.getComponent());break;case"boolean":l=t.column.modules.edit.check}if(l||n){if(s.cancelEdit(),s.currentCell=t,this.focusScrollAdjust(t),a=t.getComponent(),this.mouseClick&&(this.mouseClick=!1,t.column.definition.cellClick&&t.column.definition.cellClick.call(this.table,i,a)),t.column.definition.cellEditing&&t.column.definition.cellEditing.call(this.table,a),this.dispatchExternal("cellEditing",a),r="function"==typeof t.column.modules.edit.params?t.column.modules.edit.params(a):t.column.modules.edit.params,!1===(o=t.column.modules.edit.editor.call(s,a,(function(e){u=e}),(function(e){if(s.currentCell===t){var i=!0;return t.column.modules.validate&&s.table.modExists("validate")&&"manual"!=s.table.options.validationMode&&(i=s.table.modules.validate.validate(t.column.modules.validate,t,e)),!0===i||"highlight"===s.table.options.validationMode?(s.clearEditor(),t.modules.edit||(t.modules.edit={}),t.modules.edit.edited=!0,-1==s.editedCells.indexOf(t)&&s.editedCells.push(t),t.setValue(e,!0),s.table.options.dataTree&&s.table.modExists("dataTree")&&s.table.modules.dataTree.checkForRestyle(t),!0===i||(c.classList.add("tabulator-validation-fail"),s.table.externalEvents.dispatch("validationFailed",t.getComponent(),e,i),!1)):(s.invalidEdit=!0,c.classList.add("tabulator-validation-fail"),s.focusCellNoEvent(t,!0),u(),s.table.externalEvents.dispatch("validationFailed",t.getComponent(),e,i),!1)}}),(function(){s.currentCell===t&&(s.cancelEdit(),s.table.options.dataTree&&s.table.modExists("dataTree")&&s.table.modules.dataTree.checkForRestyle(t))}),r)))return c.blur(),!1;if(!(o instanceof Node))return console.warn("Edit Error - Editor should return an instance of Node, the editor returned:",o),c.blur(),!1;for(c.classList.add("tabulator-editing"),t.row.getElement().classList.add("tabulator-row-editing");c.firstChild;)c.removeChild(c.firstChild);c.appendChild(o),u();for(var h=c.children,d=0;d-1&&this.editedCells.splice(t,1)}}]),r}(N);le.moduleName="edit",le.editors=se;var ue=function e(i,n,o,a){t(this,e),this.type=i,this.columns=n,this.component=o||!1,this.indent=a||0},ce=function e(i,n,o,a,r){t(this,e),this.value=i,this.component=n||!1,this.width=o,this.height=a,this.depth=r},he=function(n){a(s,n);var r=c(s);function s(e){var i;return t(this,s),(i=r.call(this,e)).config={},i.cloneTableStyle=!0,i.colVisProp="",i.registerTableOption("htmlOutputConfig",!1),i.registerColumnOption("htmlOutput"),i.registerColumnOption("titleHtmlOutput"),i}return o(s,[{key:"initialize",value:function(){this.registerTableFunction("getHtml",this.getHtml.bind(this))}},{key:"generateExportList",value:function(e,t,i,n){this.cloneTableStyle=t,this.config=e||{},this.colVisProp=n;var o=!1!==this.config.columnHeaders?this.headersToExportRows(this.generateColumnGroupHeaders()):[],a=this.bodyToExportRows(this.rowLookup(i));return o.concat(a)}},{key:"genereateTable",value:function(e,t,i,n){var o=this.generateExportList(e,t,i,n);return this.genereateTableElement(o)}},{key:"rowLookup",value:function(e){var t=this,i=[];if("function"==typeof e)e.call(this.table).forEach((function(e){(e=t.table.rowManager.findRow(e))&&i.push(e)}));else switch(e){case!0:case"visible":i=this.table.rowManager.getVisibleRows(!0);break;case"all":i=this.table.rowManager.rows;break;case"selected":i=this.table.modules.selectRow.selectedRows;break;case"active":default:i=this.table.options.pagination?this.table.rowManager.getDisplayRows(this.table.rowManager.displayRows.length-2):this.table.rowManager.getDisplayRows()}return Object.assign([],i)}},{key:"generateColumnGroupHeaders",value:function(){var e=this,t=[];return(!1!==this.config.columnGroups?this.table.columnManager.columns:this.table.columnManager.columnsByIndex).forEach((function(i){var n=e.processColumnGroup(i);n&&t.push(n)})),t}},{key:"processColumnGroup",value:function(e){var t=this,i=e.columns,n=0,o={title:e.definition["title"+(this.colVisProp.charAt(0).toUpperCase()+this.colVisProp.slice(1))]||e.definition.title,column:e,depth:1};if(i.length){if(o.subGroups=[],o.width=0,i.forEach((function(e){var i=t.processColumnGroup(e);i&&(o.width+=i.width,o.subGroups.push(i),i.depth>n&&(n=i.depth))})),o.depth+=n,!o.width)return!1}else{if(!this.columnVisCheck(e))return!1;o.width=1}return o}},{key:"columnVisCheck",value:function(e){return!1!==e.definition[this.colVisProp]&&(e.visible||!e.visible&&e.definition[this.colVisProp])}},{key:"headersToExportRows",value:function(e){var t=[],i=0,n=[];function o(e,n){var a=i-n;if(void 0===t[n]&&(t[n]=[]),e.height=e.subGroups?1:a-e.depth+1,t[n].push(e),e.height>1)for(var r=1;r1)for(var s=1;si&&(i=e.depth)})),e.forEach((function(e){o(e,0)})),t.forEach((function(e){var t=[];e.forEach((function(e){e?t.push(new ce(e.title,e.column.getComponent(),e.width,e.height,e.depth)):t.push(null)})),n.push(new ue("header",t))})),n}},{key:"bodyToExportRows",value:function(e){var t=this,i=[],n=[];return this.table.columnManager.columnsByIndex.forEach((function(e){t.columnVisCheck(e)&&i.push(e.getComponent())})),!1!==this.config.columnCalcs&&this.table.modExists("columnCalcs")&&(this.table.modules.columnCalcs.topInitialized&&e.unshift(this.table.modules.columnCalcs.topRow),this.table.modules.columnCalcs.botInitialized&&e.push(this.table.modules.columnCalcs.botRow)),(e=e.filter((function(e){switch(e.type){case"group":return!1!==t.config.rowGroups;case"calc":return!1!==t.config.columnCalcs;case"row":return!(t.table.options.dataTree&&!1===t.config.dataTree&&e.modules.dataTree.parent)}return!0}))).forEach((function(e,o){var a=e.getData(t.colVisProp),r=[],s=0;switch(e.type){case"group":s=e.level,r.push(new ce(e.key,e.getComponent(),i.length,1));break;case"calc":case"row":i.forEach((function(e){r.push(new ce(e._column.getFieldValue(a),e,1,1))})),t.table.options.dataTree&&!1!==t.config.dataTree&&(s=e.modules.dataTree.index)}n.push(new ue(e.type,r,e.getComponent(),s))})),n}},{key:"genereateTableElement",value:function(e){var t=this,i=document.createElement("table"),n=document.createElement("thead"),o=document.createElement("tbody"),a=this.lookupTableStyles(),r=this.table.options["rowFormatter"+(this.colVisProp.charAt(0).toUpperCase()+this.colVisProp.slice(1))],s={};return s.rowFormatter=null!==r?r:this.table.options.rowFormatter,this.table.options.dataTree&&!1!==this.config.dataTree&&this.table.modExists("columnCalcs")&&(s.treeElementField=this.table.modules.dataTree.elementField),s.groupHeader=this.table.options["groupHeader"+(this.colVisProp.charAt(0).toUpperCase()+this.colVisProp.slice(1))],s.groupHeader&&!Array.isArray(s.groupHeader)&&(s.groupHeader=[s.groupHeader]),i.classList.add("tabulator-print-table"),this.mapElementStyles(this.table.columnManager.getHeadersElement(),n,["border-top","border-left","border-right","border-bottom","background-color","color","font-weight","font-family","font-size"]),e.length>1e3&&console.warn("It may take a long time to render an HTML table with more than 1000 rows"),e.forEach((function(e,i){switch(e.type){case"header":n.appendChild(t.genereateHeaderElement(e,s,a));break;case"group":o.appendChild(t.genereateGroupElement(e,s,a));break;case"calc":o.appendChild(t.genereateCalcElement(e,s,a));break;case"row":var r=t.genereateRowElement(e,s,a);t.mapElementStyles(i%2&&a.evenRow?a.evenRow:a.oddRow,r,["border-top","border-left","border-right","border-bottom","color","font-weight","font-family","font-size","background-color"]),o.appendChild(r)}})),n.innerHTML&&i.appendChild(n),i.appendChild(o),this.mapElementStyles(this.table.element,i,["border-top","border-left","border-right","border-bottom"]),i}},{key:"lookupTableStyles",value:function(){var e={};return this.cloneTableStyle&&window.getComputedStyle&&(e.oddRow=this.table.element.querySelector(".tabulator-row-odd:not(.tabulator-group):not(.tabulator-calcs)"),e.evenRow=this.table.element.querySelector(".tabulator-row-even:not(.tabulator-group):not(.tabulator-calcs)"),e.calcRow=this.table.element.querySelector(".tabulator-row.tabulator-calcs"),e.firstRow=this.table.element.querySelector(".tabulator-row:not(.tabulator-group):not(.tabulator-calcs)"),e.firstGroup=this.table.element.getElementsByClassName("tabulator-group")[0],e.firstRow&&(e.styleCells=e.firstRow.getElementsByClassName("tabulator-cell"),e.firstCell=e.styleCells[0],e.lastCell=e.styleCells[e.styleCells.length-1])),e}},{key:"genereateHeaderElement",value:function(e,t,i){var n=this,o=document.createElement("tr");return e.columns.forEach((function(e){if(e){var t=document.createElement("th"),i=e.component._column.definition.cssClass?e.component._column.definition.cssClass.split(" "):[];t.colSpan=e.width,t.rowSpan=e.height,t.innerHTML=e.value,n.cloneTableStyle&&(t.style.boxSizing="border-box"),i.forEach((function(e){t.classList.add(e)})),n.mapElementStyles(e.component.getElement(),t,["text-align","border-top","border-left","border-right","border-bottom","background-color","color","font-weight","font-family","font-size"]),n.mapElementStyles(e.component._column.contentElement,t,["padding-top","padding-left","padding-right","padding-bottom"]),e.component._column.visible?n.mapElementStyles(e.component.getElement(),t,["width"]):e.component._column.definition.width&&(t.style.width=e.component._column.definition.width+"px"),e.component._column.parent&&n.mapElementStyles(e.component._column.parent.groupElement,t,["border-top"]),o.appendChild(t)}})),o}},{key:"genereateGroupElement",value:function(e,t,i){var n=document.createElement("tr"),o=document.createElement("td"),a=e.columns[0];return n.classList.add("tabulator-print-table-row"),t.groupHeader&&t.groupHeader[e.indent]?a.value=t.groupHeader[e.indent](a.value,e.component._group.getRowCount(),e.component._group.getData(),e.component):!1===t.groupHeader?a.value=a.value:a.value=e.component._group.generator(a.value,e.component._group.getRowCount(),e.component._group.getData(),e.component),o.colSpan=a.width,o.innerHTML=a.value,n.classList.add("tabulator-print-table-group"),n.classList.add("tabulator-group-level-"+e.indent),a.component.isVisible()&&n.classList.add("tabulator-group-visible"),this.mapElementStyles(i.firstGroup,n,["border-top","border-left","border-right","border-bottom","color","font-weight","font-family","font-size","background-color"]),this.mapElementStyles(i.firstGroup,o,["padding-top","padding-left","padding-right","padding-bottom"]),n.appendChild(o),n}},{key:"genereateCalcElement",value:function(e,t,i){var n=this.genereateRowElement(e,t,i);return n.classList.add("tabulator-print-table-calcs"),this.mapElementStyles(i.calcRow,n,["border-top","border-left","border-right","border-bottom","color","font-weight","font-family","font-size","background-color"]),n}},{key:"genereateRowElement",value:function(t,n,o){var a=this,r=document.createElement("tr");return r.classList.add("tabulator-print-table-row"),t.columns.forEach((function(s){if(s){var l=document.createElement("td"),u=s.component._column,c=s.value,h={modules:{},getValue:function(){return c},getField:function(){return u.definition.field},getElement:function(){return l},getColumn:function(){return u.getComponent()},getData:function(){return t.component.getData()},getRow:function(){return t.component},getComponent:function(){return h},column:u};if((u.definition.cssClass?u.definition.cssClass.split(" "):[]).forEach((function(e){l.classList.add(e)})),a.table.modExists("format")&&!1!==a.config.formatCells)c=a.table.modules.format.formatExportValue(h,a.colVisProp);else switch(e(c)){case"object":c=JSON.stringify(c);break;case"undefined":case"null":c="";break;default:c=c}c instanceof Node?l.appendChild(c):l.innerHTML=c,o.firstCell&&(a.mapElementStyles(o.firstCell,l,["padding-top","padding-left","padding-right","padding-bottom","border-top","border-left","border-right","border-bottom","color","font-weight","font-family","font-size"]),u.definition.align&&(l.style.textAlign=u.definition.align)),a.table.options.dataTree&&!1!==a.config.dataTree&&(n.treeElementField&&n.treeElementField==u.field||!n.treeElementField&&0==i)&&(t.component._row.modules.dataTree.controlEl&&l.insertBefore(t.component._row.modules.dataTree.controlEl.cloneNode(!0),l.firstChild),t.component._row.modules.dataTree.branchEl&&l.insertBefore(t.component._row.modules.dataTree.branchEl.cloneNode(!0),l.firstChild)),r.appendChild(l),h.modules.format&&h.modules.format.renderedCallback&&h.modules.format.renderedCallback(),n.rowFormatter&&!1!==a.config.formatCells&&n.rowFormatter(t.component)}})),r}},{key:"genereateHTMLTable",value:function(e){var t=document.createElement("div");return t.appendChild(this.genereateTableElement(e)),t.innerHTML}},{key:"getHtml",value:function(e,t,i,n){var o=this.generateExportList(i||this.table.options.htmlOutputConfig,t,e,n||"htmlOutput");return this.genereateHTMLTable(o)}},{key:"mapElementStyles",value:function(e,t,i){if(this.cloneTableStyle&&e&&t){var n={"background-color":"backgroundColor",color:"fontColor",width:"width","font-weight":"fontWeight","font-family":"fontFamily","font-size":"fontSize","text-align":"textAlign","border-top":"borderTop","border-left":"borderLeft","border-right":"borderRight","border-bottom":"borderBottom","padding-top":"paddingTop","padding-left":"paddingLeft","padding-right":"paddingRight","padding-bottom":"paddingBottom"};if(window.getComputedStyle){var o=window.getComputedStyle(e);i.forEach((function(e){t.style[n[e]]=o.getPropertyValue(e)}))}}}}]),s}(N);he.moduleName="export";var de={"=":function(e,t,i,n){return t==e},"<":function(e,t,i,n){return t":function(e,t,i,n){return t>e},">=":function(e,t,i,n){return t>=e},"!=":function(e,t,i,n){return t!=e},regex:function(e,t,i,n){return"string"==typeof e&&(e=new RegExp(e)),e.test(t)},like:function(e,t,i,n){return null==e?t===e:null!=t&&String(t).toLowerCase().indexOf(e.toLowerCase())>-1},keywords:function(e,t,i,n){var o=e.toLowerCase().split(void 0===n.separator?" ":n.separator),a=String(null==t?"":t).toLowerCase(),r=[];return o.forEach((function(e){a.includes(e)&&r.push(!0)})),n.matchAll?r.length===o.length:!!r.length},starts:function(e,t,i,n){return null==e?t===e:null!=t&&String(t).toLowerCase().startsWith(e.toLowerCase())},ends:function(e,t,i,n){return null==e?t===e:null!=t&&String(t).toLowerCase().endsWith(e.toLowerCase())},in:function(e,t,i,n){return Array.isArray(e)?!e.length||e.indexOf(t)>-1:(console.warn("Filter Error - filter value is not an array:",e),!1)}},me=function(i){a(r,i);var n=c(r);function r(e){var i;return t(this,r),(i=n.call(this,e)).filterList=[],i.headerFilters={},i.headerFilterColumns=[],i.prevHeaderFilterChangeCheck="",i.prevHeaderFilterChangeCheck="{}",i.changed=!1,i.registerTableOption("filterMode","local"),i.registerTableOption("initialFilter",!1),i.registerTableOption("initialHeaderFilter",!1),i.registerTableOption("headerFilterLiveFilterDelay",300),i.registerColumnOption("headerFilter"),i.registerColumnOption("headerFilterPlaceholder"),i.registerColumnOption("headerFilterParams"),i.registerColumnOption("headerFilterEmptyCheck"),i.registerColumnOption("headerFilterFunc"),i.registerColumnOption("headerFilterFuncParams"),i.registerColumnOption("headerFilterLiveFilter"),i.registerTableFunction("searchRows",i.searchRows.bind(l(i))),i.registerTableFunction("searchData",i.searchData.bind(l(i))),i.registerTableFunction("setFilter",i.userSetFilter.bind(l(i))),i.registerTableFunction("refreshFilter",i.userRefreshFilter.bind(l(i))),i.registerTableFunction("addFilter",i.userAddFilter.bind(l(i))),i.registerTableFunction("getFilters",i.getFilters.bind(l(i))),i.registerTableFunction("setHeaderFilterFocus",i.userSetHeaderFilterFocus.bind(l(i))),i.registerTableFunction("getHeaderFilterValue",i.userGetHeaderFilterValue.bind(l(i))),i.registerTableFunction("setHeaderFilterValue",i.userSetHeaderFilterValue.bind(l(i))),i.registerTableFunction("getHeaderFilters",i.getHeaderFilters.bind(l(i))),i.registerTableFunction("removeFilter",i.userRemoveFilter.bind(l(i))),i.registerTableFunction("clearFilter",i.userClearFilter.bind(l(i))),i.registerTableFunction("clearHeaderFilter",i.userClearHeaderFilter.bind(l(i))),i.registerComponentFunction("column","headerFilterFocus",i.setHeaderFilterFocus.bind(l(i))),i.registerComponentFunction("column","reloadHeaderFilter",i.reloadHeaderFilter.bind(l(i))),i.registerComponentFunction("column","getHeaderFilterValue",i.getHeaderFilterValue.bind(l(i))),i.registerComponentFunction("column","setHeaderFilterValue",i.setHeaderFilterValue.bind(l(i))),i}return o(r,[{key:"initialize",value:function(){this.subscribe("column-init",this.initializeColumnHeaderFilter.bind(this)),this.subscribe("column-width-fit-before",this.hideHeaderFilterElements.bind(this)),this.subscribe("column-width-fit-after",this.showHeaderFilterElements.bind(this)),this.subscribe("table-built",this.tableBuilt.bind(this)),"remote"===this.table.options.filterMode&&this.subscribe("data-params",this.remoteFilterParams.bind(this)),this.registerDataHandler(this.filter.bind(this),10)}},{key:"tableBuilt",value:function(){var e=this;this.table.options.initialFilter&&this.setFilter(this.table.options.initialFilter),this.table.options.initialHeaderFilter&&this.table.options.initialHeaderFilter.forEach((function(t){var i=e.table.columnManager.findColumn(t.field);if(!i)return console.warn("Column Filter Error - No matching column found:",t.field),!1;e.setHeaderFilterValue(i,t.value)}))}},{key:"remoteFilterParams",value:function(e,t,i,n){return n.filter=this.getFilters(!0,!0),n}},{key:"userSetFilter",value:function(e,t,i,n){this.setFilter(e,t,i,n),this.refreshFilter()}},{key:"userRefreshFilter",value:function(){this.refreshFilter()}},{key:"userAddFilter",value:function(e,t,i,n){this.addFilter(e,t,i,n),this.refreshFilter()}},{key:"userSetHeaderFilterFocus",value:function(e){var t=this.table.columnManager.findColumn(e);if(!t)return console.warn("Column Filter Focus Error - No matching column found:",e),!1;this.setHeaderFilterFocus(t)}},{key:"userGetHeaderFilterValue",value:function(e){var t=this.table.columnManager.findColumn(e);if(t)return this.getHeaderFilterValue(t);console.warn("Column Filter Error - No matching column found:",e)}},{key:"userSetHeaderFilterValue",value:function(e,t){var i=this.table.columnManager.findColumn(e);if(!i)return console.warn("Column Filter Error - No matching column found:",e),!1;this.setHeaderFilterValue(i,t)}},{key:"userRemoveFilter",value:function(e,t,i){this.removeFilter(e,t,i),this.refreshFilter()}},{key:"userClearFilter",value:function(e){this.clearFilter(e),this.refreshFilter()}},{key:"userClearHeaderFilter",value:function(){this.clearHeaderFilter(),this.refreshFilter()}},{key:"searchRows",value:function(e,t,i){return this.search("rows",e,t,i)}},{key:"searchData",value:function(e,t,i){return this.search("data",e,t,i)}},{key:"initializeColumnHeaderFilter",value:function(e){var t=e.definition;t.headerFilter&&(void 0!==t.headerFilterPlaceholder&&t.field&&this.module("localize").setHeaderFilterColumnPlaceholder(t.field,t.headerFilterPlaceholder),this.initializeColumn(e))}},{key:"initializeColumn",value:function(t,i){var n=this,o=t.getField();t.modules.filter={success:function(i){var a,s="input"==t.modules.filter.tagType&&"text"==t.modules.filter.attrType||"textarea"==t.modules.filter.tagType?"partial":"match",l="",u="";if(void 0===t.modules.filter.prevSuccess||t.modules.filter.prevSuccess!==i){if(t.modules.filter.prevSuccess=i,t.modules.filter.emptyFunc(i))delete n.headerFilters[o];else{switch(t.modules.filter.value=i,e(t.definition.headerFilterFunc)){case"string":r.filters[t.definition.headerFilterFunc]?(l=t.definition.headerFilterFunc,a=function(e){var n=t.definition.headerFilterFuncParams||{},o=t.getFieldValue(e);return n="function"==typeof n?n(i,o,e):n,r.filters[t.definition.headerFilterFunc](i,o,e,n)}):console.warn("Header Filter Error - Matching filter function not found: ",t.definition.headerFilterFunc);break;case"function":l=a=function(e){var n=t.definition.headerFilterFuncParams||{},o=t.getFieldValue(e);return n="function"==typeof n?n(i,o,e):n,t.definition.headerFilterFunc(i,o,e,n)}}if(!a)switch(s){case"partial":a=function(e){var n=t.getFieldValue(e);return null!=n&&String(n).toLowerCase().indexOf(String(i).toLowerCase())>-1},l="like";break;default:a=function(e){return t.getFieldValue(e)==i},l="="}n.headerFilters[o]={value:i,func:a,type:l,params:{}}}u=JSON.stringify(n.headerFilters),n.prevHeaderFilterChangeCheck!==u&&(n.prevHeaderFilterChangeCheck=u,n.trackChanges(),n.refreshFilter())}return!0},attrType:!1,tagType:!1,emptyFunc:!1},this.generateHeaderFilterElement(t)}},{key:"generateHeaderFilterElement",value:function(t,i,n){var o,a,r,s,l,u,c,h=this,d=this,m=t.modules.filter.success,p=t.getField();if(t.modules.filter.headerElement&&t.modules.filter.headerElement.parentNode&&t.contentElement.removeChild(t.modules.filter.headerElement.parentNode),p){switch(t.modules.filter.emptyFunc=t.definition.headerFilterEmptyCheck||function(e){return!e&&"0"!==e&&0!==e},(o=document.createElement("div")).classList.add("tabulator-header-filter"),e(t.definition.headerFilter)){case"string":d.table.modules.edit.editors[t.definition.headerFilter]?(a=d.table.modules.edit.editors[t.definition.headerFilter],"tick"!==t.definition.headerFilter&&"tickCross"!==t.definition.headerFilter||t.definition.headerFilterEmptyCheck||(t.modules.filter.emptyFunc=function(e){return!0!==e&&!1!==e})):console.warn("Filter Error - Cannot build header filter, No such editor found: ",t.definition.editor);break;case"function":a=t.definition.headerFilter;break;case"boolean":t.modules.edit&&t.modules.edit.editor?a=t.modules.edit.editor:t.definition.formatter&&d.table.modules.edit.editors[t.definition.formatter]?(a=d.table.modules.edit.editors[t.definition.formatter],"tick"!==t.definition.formatter&&"tickCross"!==t.definition.formatter||t.definition.headerFilterEmptyCheck||(t.modules.filter.emptyFunc=function(e){return!0!==e&&!1!==e})):a=d.table.modules.edit.editors.input}if(a){if(s={getValue:function(){return void 0!==i?i:""},getField:function(){return t.definition.field},getElement:function(){return o},getColumn:function(){return t.getComponent()},getRow:function(){return{normalizeHeight:function(){}}}},c="function"==typeof(c=t.definition.headerFilterParams||{})?c.call(d.table):c,!(r=a.call(this.table.modules.edit,s,(function(){}),m,(function(){}),c)))return void console.warn("Filter Error - Cannot add filter to "+p+" column, editor returned a value of false");if(!(r instanceof Node))return void console.warn("Filter Error - Cannot add filter to "+p+" column, editor should return an instance of Node, the editor returned:",r);p?d.langBind("headerFilters|columns|"+t.definition.field,(function(e){r.setAttribute("placeholder",void 0!==e&&e?e:d.langText("headerFilters|default"))})):d.langBind("headerFilters|default",(function(e){r.setAttribute("placeholder",e)})),r.addEventListener("click",(function(e){e.stopPropagation(),r.focus()})),r.addEventListener("focus",(function(e){var t=h.table.columnManager.element.scrollLeft;t!==h.table.rowManager.element.scrollLeft&&(h.table.rowManager.scrollHorizontal(t),h.table.columnManager.scrollHorizontal(t))})),l=!1,u=function(e){l&&clearTimeout(l),l=setTimeout((function(){m(r.value)}),d.table.options.headerFilterLiveFilterDelay)},t.modules.filter.headerElement=r,t.modules.filter.attrType=r.hasAttribute("type")?r.getAttribute("type").toLowerCase():"",t.modules.filter.tagType=r.tagName.toLowerCase(),!1!==t.definition.headerFilterLiveFilter&&("autocomplete"!==t.definition.headerFilter&&"tickCross"!==t.definition.headerFilter&&("autocomplete"!==t.definition.editor&&"tickCross"!==t.definition.editor||!0!==t.definition.headerFilter)&&(r.addEventListener("keyup",u),r.addEventListener("search",u),"number"==t.modules.filter.attrType&&r.addEventListener("change",(function(e){m(r.value)})),"text"==t.modules.filter.attrType&&"ie"!==this.table.browser&&r.setAttribute("type","search")),"input"!=t.modules.filter.tagType&&"select"!=t.modules.filter.tagType&&"textarea"!=t.modules.filter.tagType||r.addEventListener("mousedown",(function(e){e.stopPropagation()}))),o.appendChild(r),t.contentElement.appendChild(o),n||d.headerFilterColumns.push(t)}}else console.warn("Filter Error - Cannot add header filter, column has no field set:",t.definition.title)}},{key:"hideHeaderFilterElements",value:function(){this.headerFilterColumns.forEach((function(e){e.modules.filter&&e.modules.filter.headerElement&&(e.modules.filter.headerElement.style.display="none")}))}},{key:"showHeaderFilterElements",value:function(){this.headerFilterColumns.forEach((function(e){e.modules.filter&&e.modules.filter.headerElement&&(e.modules.filter.headerElement.style.display="")}))}},{key:"setHeaderFilterFocus",value:function(e){e.modules.filter&&e.modules.filter.headerElement?e.modules.filter.headerElement.focus():console.warn("Column Filter Focus Error - No header filter set on column:",e.getField())}},{key:"getHeaderFilterValue",value:function(e){if(e.modules.filter&&e.modules.filter.headerElement)return e.modules.filter.headerElement.value;console.warn("Column Filter Error - No header filter set on column:",e.getField())}},{key:"setHeaderFilterValue",value:function(e,t){e&&(e.modules.filter&&e.modules.filter.headerElement?(this.generateHeaderFilterElement(e,t,!0),e.modules.filter.success(t)):console.warn("Column Filter Error - No header filter set on column:",e.getField()))}},{key:"reloadHeaderFilter",value:function(e){e&&(e.modules.filter&&e.modules.filter.headerElement?this.generateHeaderFilterElement(e,e.modules.filter.value,!0):console.warn("Column Filter Error - No header filter set on column:",e.getField()))}},{key:"refreshFilter",value:function(){"remote"===this.table.options.filterMode?this.reloadData():this.refreshData()}},{key:"trackChanges",value:function(){this.changed=!0,this.dispatch("filter-changed")}},{key:"hasChanged",value:function(){var e=this.changed;return this.changed=!1,e}},{key:"setFilter",value:function(e,t,i,n){this.filterList=[],Array.isArray(e)||(e=[{field:e,type:t,value:i,params:n}]),this.addFilter(e)}},{key:"addFilter",value:function(e,t,i,n){var o=this;Array.isArray(e)||(e=[{field:e,type:t,value:i,params:n}]),e.forEach((function(e){(e=o.findFilter(e))&&(o.filterList.push(e),o.changed=!0)}))}},{key:"findFilter",value:function(e){var t;if(Array.isArray(e))return this.findSubFilters(e);var i=!1;return"function"==typeof e.field?i=function(t){return e.field(t,e.type||{})}:r.filters[e.type]?i=(t=this.table.columnManager.getColumnByField(e.field))?function(i){return r.filters[e.type](e.value,t.getFieldValue(i),i,e.params||{})}:function(t){return r.filters[e.type](e.value,t[e.field],t,e.params||{})}:console.warn("Filter Error - No such filter type found, ignoring: ",e.type),e.func=i,!!e.func&&e}},{key:"findSubFilters",value:function(e){var t=this,i=[];return e.forEach((function(e){(e=t.findFilter(e))&&i.push(e)})),!!i.length&&i}},{key:"getFilters",value:function(e,t){var i=[];return e&&(i=this.getHeaderFilters()),t&&i.forEach((function(e){"function"==typeof e.type&&(e.type="function")})),i=i.concat(this.filtersToArray(this.filterList,t))}},{key:"filtersToArray",value:function(e,t){var i=this,n=[];return e.forEach((function(e){var o;Array.isArray(e)?n.push(i.filtersToArray(e,t)):(o={field:e.field,type:e.type,value:e.value},t&&"function"==typeof o.type&&(o.type="function"),n.push(o))})),n}},{key:"getHeaderFilters",value:function(){var e=[];for(var t in this.headerFilters)e.push({field:t,type:this.headerFilters[t].type,value:this.headerFilters[t].value});return e}},{key:"removeFilter",value:function(t,i,n){var o=this;Array.isArray(t)||(t=[{field:t,type:i,value:n}]),t.forEach((function(t){var i=-1;(i="object"==e(t.field)?o.filterList.findIndex((function(e){return t===e})):o.filterList.findIndex((function(e){return t.field===e.field&&t.type===e.type&&t.value===e.value})))>-1?o.filterList.splice(i,1):console.warn("Filter Error - No matching filter type found, ignoring: ",t.type)})),this.trackChanges()}},{key:"clearFilter",value:function(e){this.filterList=[],e&&this.clearHeaderFilter(),this.trackChanges()}},{key:"clearHeaderFilter",value:function(){var e=this;this.headerFilters={},this.prevHeaderFilterChangeCheck="{}",this.headerFilterColumns.forEach((function(t){void 0!==t.modules.filter.value&&delete t.modules.filter.value,t.modules.filter.prevSuccess=void 0,e.reloadHeaderFilter(t)})),this.trackChanges()}},{key:"search",value:function(e,t,i,n){var o=this,a=[],r=[];return Array.isArray(t)||(t=[{field:t,type:i,value:n}]),t.forEach((function(e){(e=o.findFilter(e))&&r.push(e)})),this.table.rowManager.rows.forEach((function(t){var i=!0;r.forEach((function(e){o.filterRecurse(e,t.getData())||(i=!1)})),i&&a.push("data"===e?t.getData("data"):t.getComponent())})),a}},{key:"filter",value:function(e,t){var i=this,n=[],o=[];return this.subscribedExternal("dataFiltering")&&this.dispatchExternal("dataFiltering",this.getFilters()),"remote"!==this.table.options.filterMode&&(this.filterList.length||Object.keys(this.headerFilters).length)?e.forEach((function(e){i.filterRow(e)&&n.push(e)})):n=e.slice(0),this.subscribedExternal("dataFiltered")&&(n.forEach((function(e){o.push(e.getComponent())})),this.dispatchExternal("dataFiltered",this.getFilters(),o)),n}},{key:"filterRow",value:function(e,t){var i=this,n=!0,o=e.getData();for(var a in this.filterList.forEach((function(e){i.filterRecurse(e,o)||(n=!1)})),this.headerFilters)this.headerFilters[a].func(o)||(n=!1);return n}},{key:"filterRecurse",value:function(e,t){var i=this,n=!1;return Array.isArray(e)?e.forEach((function(e){i.filterRecurse(e,t)&&(n=!0)})):n=e.func(t),n}}]),r}(N);me.moduleName="filter",me.filters=de;var pe={plaintext:function(e,t,i){return this.emptyToSpace(this.sanitizeHTML(e.getValue()))},html:function(e,t,i){return e.getValue()},textarea:function(e,t,i){return e.getElement().style.whiteSpace="pre-wrap",this.emptyToSpace(this.sanitizeHTML(e.getValue()))},money:function(e,t,i){var n,o,a,r,s=parseFloat(e.getValue()),l=t.decimal||".",u=t.thousand||",",c=t.symbol||"",h=!!t.symbolAfter,d=void 0!==t.precision?t.precision:2;if(isNaN(s))return this.emptyToSpace(this.sanitizeHTML(e.getValue()));for(n=!1!==d?s.toFixed(d):s,o=(n=String(n).split("."))[0],a=n.length>1?l+n[1]:"",r=/(\d+)(\d{3})/;r.test(o);)o=o.replace(r,"$1"+u+"$2");return h?o+a+c:c+o+a},link:function(t,i,n){var o=t.getValue(),a=i.urlPrefix||"",r=i.download,s=o,l=document.createElement("a");if(i.labelField&&(s=t.getData()[i.labelField]),i.label)switch(e(i.label)){case"string":s=i.label;break;case"function":s=i.label(t)}if(s){if(i.urlField&&(o=t.getData()[i.urlField]),i.url)switch(e(i.url)){case"string":o=i.url;break;case"function":o=i.url(t)}return l.setAttribute("href",a+o),i.target&&l.setAttribute("target",i.target),i.download&&(r="function"==typeof r?r(t):!0===r?"":r,l.setAttribute("download",r)),l.innerHTML=this.emptyToSpace(this.sanitizeHTML(s)),l}return" "},image:function(t,i,n){var o=document.createElement("img"),a=t.getValue();switch(i.urlPrefix&&(a=i.urlPrefix+t.getValue()),i.urlSuffix&&(a+=i.urlSuffix),o.setAttribute("src",a),e(i.height)){case"number":o.style.height=i.height+"px";break;case"string":o.style.height=i.height}switch(e(i.width)){case"number":o.style.width=i.width+"px";break;case"string":o.style.width=i.width}return o.addEventListener("load",(function(){t.getRow().normalizeHeight()})),o},tickCross:function(e,t,i){var n=e.getValue(),o=e.getElement(),a=t.allowEmpty,r=t.allowTruthy,s=void 0!==t.tickElement?t.tickElement:'',l=void 0!==t.crossElement?t.crossElement:'';return r&&n||!0===n||"true"===n||"True"===n||1===n||"1"===n?(o.setAttribute("aria-checked",!0),s||""):!a||"null"!==n&&""!==n&&null!=n?(o.setAttribute("aria-checked",!1),l||""):(o.setAttribute("aria-checked","mixed"),"")},datetime:function(e,t,i){var n=t.inputFormat||"YYYY-MM-DD hh:mm:ss",o=t.outputFormat||"DD/MM/YYYY hh:mm:ss",a=void 0!==t.invalidPlaceholder?t.invalidPlaceholder:"",r=e.getValue(),s=moment(r,n);return s.isValid()?t.timezone?s.tz(t.timezone).format(o):s.format(o):!0===a?r:"function"==typeof a?a(r):a},datetimediff:function(e,t,i){var n=t.inputFormat||"YYYY-MM-DD hh:mm:ss",o=void 0!==t.invalidPlaceholder?t.invalidPlaceholder:"",a=void 0!==t.suffix&&t.suffix,r=void 0!==t.unit?t.unit:void 0,s=void 0!==t.humanize&&t.humanize,l=void 0!==t.date?t.date:moment(),u=e.getValue(),c=moment(u,n);return c.isValid()?s?moment.duration(c.diff(l)).humanize(a):c.diff(l,r)+(a?" "+a:""):!0===o?u:"function"==typeof o?o(u):o},lookup:function(e,t,i){var n=e.getValue();return void 0===t[n]?(console.warn("Missing display value for "+n),n):t[n]},star:function(e,t,i){var n=e.getValue(),o=e.getElement(),a=t&&t.stars?t.stars:5,r=document.createElement("span"),s=document.createElementNS("http://www.w3.org/2000/svg","svg");r.style.verticalAlign="middle",s.setAttribute("width","14"),s.setAttribute("height","14"),s.setAttribute("viewBox","0 0 512 512"),s.setAttribute("xml:space","preserve"),s.style.padding="0 1px",n=n&&!isNaN(n)?parseInt(n):0,n=Math.max(0,Math.min(n,a));for(var l=1;l<=a;l++){var u=s.cloneNode(!0);u.innerHTML=l<=n?'':'',r.appendChild(u)}return o.style.whiteSpace="nowrap",o.style.overflow="hidden",o.style.textOverflow="ellipsis",o.setAttribute("aria-label",n),r},traffic:function(t,i,n){var o,a,r=this.sanitizeHTML(t.getValue())||0,s=document.createElement("span"),l=i&&i.max?i.max:100,u=i&&i.min?i.min:0,c=i&&void 0!==i.color?i.color:["red","orange","green"],h="#666666";if(!isNaN(r)&&void 0!==t.getValue()){switch(s.classList.add("tabulator-traffic-light"),a=parseFloat(r)<=l?parseFloat(r):l,a=parseFloat(a)>=u?parseFloat(a):u,o=(l-u)/100,a=Math.round((a-u)/o),e(c)){case"string":h=c;break;case"function":h=c(r);break;case"object":if(Array.isArray(c)){var d=100/c.length,m=Math.floor(a/d);m=Math.min(m,c.length-1),h=c[m=Math.max(m,0)];break}}return s.style.backgroundColor=h,s}},progress:function(t,i,n){var o,a,r,s,l,u=this.sanitizeHTML(t.getValue())||0,c=t.getElement(),h=i&&i.max?i.max:100,d=i&&i.min?i.min:0,m=i&&i.legendAlign?i.legendAlign:"center";switch(a=parseFloat(u)<=h?parseFloat(u):h,a=parseFloat(a)>=d?parseFloat(a):d,o=(h-d)/100,a=Math.round((a-d)/o),e(i.color)){case"string":r=i.color;break;case"function":r=i.color(u);break;case"object":if(Array.isArray(i.color)){var p=100/i.color.length,f=Math.floor(a/p);f=Math.min(f,i.color.length-1),f=Math.max(f,0),r=i.color[f];break}default:r="#2DC214"}switch(e(i.legend)){case"string":s=i.legend;break;case"function":s=i.legend(u);break;case"boolean":s=u;break;default:s=!1}switch(e(i.legendColor)){case"string":l=i.legendColor;break;case"function":l=i.legendColor(u);break;case"object":if(Array.isArray(i.legendColor)){p=100/i.legendColor.length,f=Math.floor(a/p);f=Math.min(f,i.legendColor.length-1),f=Math.max(f,0),l=i.legendColor[f]}break;default:l="#000"}c.style.minWidth="30px",c.style.position="relative",c.setAttribute("aria-label",a);var g=document.createElement("div");if(g.style.display="inline-block",g.style.position="relative",g.style.width=a+"%",g.style.backgroundColor=r,g.style.height="100%",g.setAttribute("data-max",h),g.setAttribute("data-min",d),s){var v=document.createElement("div");v.style.position="absolute",v.style.top="4px",v.style.left=0,v.style.textAlign=m,v.style.width="100%",v.style.color=l,v.innerHTML=s}return n((function(){if(!(t instanceof b)){var e=document.createElement("div");e.style.position="absolute",e.style.top="4px",e.style.bottom="4px",e.style.left="4px",e.style.right="4px",c.appendChild(e),c=e}c.appendChild(g),s&&c.appendChild(v)})),""},color:function(e,t,i){return e.getElement().style.backgroundColor=this.sanitizeHTML(e.getValue()),""},buttonTick:function(e,t,i){return''},buttonCross:function(e,t,i){return''},rownum:function(e,t,i){return this.table.rowManager.activeRows.indexOf(e.getRow()._getSelf())+1},handle:function(e,t,i){return e.getElement().classList.add("tabulator-row-handle"),"
"},responsiveCollapse:function(e,t,i){var n=document.createElement("div"),o=e.getRow()._row.modules.responsiveLayout;function a(e){var t=o.element;o.open=e,t&&(o.open?(n.classList.add("open"),t.style.display=""):(n.classList.remove("open"),t.style.display="none"))}return n.classList.add("tabulator-responsive-collapse-toggle"),n.innerHTML="+-",e.getElement().classList.add("tabulator-row-handle"),n.addEventListener("click",(function(e){e.stopImmediatePropagation(),a(!o.open)})),a(o.open),n},rowSelection:function(e,t,i){var n=this,o=document.createElement("input");if(o.type="checkbox",this.table.modExists("selectRow",!0))if(o.addEventListener("click",(function(e){e.stopPropagation()})),"function"==typeof e.getRow){var a=e.getRow();a instanceof RowComponent?(o.addEventListener("change",(function(e){a.toggleSelect()})),o.checked=a.isSelected&&a.isSelected(),this.table.modules.selectRow.registerRowSelectCheckbox(a,o)):o=""}else o.addEventListener("change",(function(e){n.table.modules.selectRow.selectedRows.length?n.table.deselectRow():n.table.selectRow(t.rowRange)})),this.table.modules.selectRow.registerHeaderSelectCheckbox(o);return o}},fe=function(i){a(r,i);var n=c(r);function r(e){var i;return t(this,r),(i=n.call(this,e)).registerColumnOption("formatter"),i.registerColumnOption("formatterParams"),i.registerColumnOption("formatterPrint"),i.registerColumnOption("formatterPrintParams"),i.registerColumnOption("formatterClipboard"),i.registerColumnOption("formatterClipboardParams"),i.registerColumnOption("formatterHtmlOutput"),i.registerColumnOption("formatterHtmlOutputParams"),i.registerColumnOption("titleFormatter"),i.registerColumnOption("titleFormatterParams"),i}return o(r,[{key:"initialize",value:function(){this.subscribe("cell-format",this.formatValue.bind(this)),this.subscribe("cell-rendered",this.cellRendered.bind(this)),this.subscribe("column-layout",this.initializeColumn.bind(this)),this.subscribe("column-format",this.formatHeader.bind(this))}},{key:"initializeColumn",value:function(e){e.modules.format=this.lookupFormatter(e,""),void 0!==e.definition.formatterPrint&&(e.modules.format.print=this.lookupFormatter(e,"Print")),void 0!==e.definition.formatterClipboard&&(e.modules.format.clipboard=this.lookupFormatter(e,"Clipboard")),void 0!==e.definition.formatterHtmlOutput&&(e.modules.format.htmlOutput=this.lookupFormatter(e,"HtmlOutput"))}},{key:"lookupFormatter",value:function(t,i){var n={params:t.definition["formatter"+i+"Params"]||{}},o=t.definition["formatter"+i];switch(e(o)){case"string":r.formatters[o]?n.formatter=r.formatters[o]:(console.warn("Formatter Error - No such formatter found: ",o),n.formatter=r.formatters.plaintext);break;case"function":n.formatter=o;break;default:n.formatter=r.formatters.plaintext}return n}},{key:"cellRendered",value:function(e){e.modules.format&&e.modules.format.renderedCallback&&!e.modules.format.rendered&&(e.modules.format.renderedCallback(),e.modules.format.rendered=!0)}},{key:"formatHeader",value:function(e,t,i){var n,o,a,r;return e.definition.titleFormatter?(n=this.getFormatter(e.definition.titleFormatter),a=function(t){e.titleFormatterRendered=t},r={getValue:function(){return t},getElement:function(){return i}},o="function"==typeof(o=e.definition.titleFormatterParams||{})?o():o,n.call(this,r,o,a)):t}},{key:"formatValue",value:function(e){var t=e.getComponent(),i="function"==typeof e.column.modules.format.params?e.column.modules.format.params(t):e.column.modules.format.params;return e.column.modules.format.formatter.call(this,t,i,(function(t){e.modules.format||(e.modules.format={}),e.modules.format.renderedCallback=t,e.modules.format.rendered=!1}))}},{key:"formatExportValue",value:function(e,t){var i,n=e.column.modules.format[t];if(n){return i="function"==typeof n.params?n.params(component):n.params,n.formatter.call(this,e.getComponent(),i,(function(t){e.modules.format||(e.modules.format={}),e.modules.format.renderedCallback=t,e.modules.format.rendered=!1}))}return this.formatValue(e)}},{key:"sanitizeHTML",value:function(e){if(e){var t={"&":"&","<":"<",">":">",'"':""","'":"'","/":"/","`":"`","=":"="};return String(e).replace(/[&<>"'`=\/]/g,(function(e){return t[e]}))}return e}},{key:"emptyToSpace",value:function(e){return null==e||""===e?" ":e}},{key:"getFormatter",value:function(t){switch(e(t)){case"string":r.formatters[t]?t=r.formatters[t]:(console.warn("Formatter Error - No such formatter found: ",t),t=r.formatters.plaintext);break;case"function":t=t;break;default:t=r.formatters.plaintext}return t}}]),r}(N);fe.moduleName="format",fe.formatters=pe;var ge=function(e){a(n,e);var i=c(n);function n(e){var o;return t(this,n),(o=i.call(this,e)).leftColumns=[],o.rightColumns=[],o.leftMargin=0,o.rightMargin=0,o.rightPadding=0,o.initializationMode="left",o.active=!1,o.scrollEndTimer=!1,o.registerColumnOption("frozen"),o}return o(n,[{key:"reset",value:function(){this.initializationMode="left",this.leftColumns=[],this.rightColumns=[],this.leftMargin=0,this.rightMargin=0,this.rightMargin=0,this.active=!1,this.table.columnManager.headersElement.style.marginLeft=0,this.table.columnManager.element.style.paddingRight=0}},{key:"initialize",value:function(){this.subscribe("cell-layout",this.layoutCell.bind(this)),this.subscribe("column-init",this.initializeColumn.bind(this)),this.subscribe("column-width",this.layout.bind(this)),this.subscribe("row-layout-before",this.layoutRow.bind(this)),this.subscribe("table-layout",this.layout.bind(this)),this.subscribe("scroll-horizontal",this.scrollHorizontal.bind(this)),this.subscribe("columns-loading",this.reset.bind(this)),this.subscribe("table-redraw",this.layout.bind(this))}},{key:"layoutCell",value:function(e){this.layoutElement(e.element,e.column)}},{key:"initializeColumn",value:function(e){var t={margin:0,edge:!1};e.isGroup||(this.frozenCheck(e)?(t.position=this.initializationMode,"left"==this.initializationMode?this.leftColumns.push(e):this.rightColumns.unshift(e),this.active=!0,e.modules.frozen=t):this.initializationMode="right")}},{key:"frozenCheck",value:function(e){return e.parent.isGroup&&e.definition.frozen&&console.warn("Frozen Column Error - Parent column group must be frozen, not individual columns or sub column groups"),e.parent.isGroup?this.frozenCheck(e.parent):e.definition.frozen}},{key:"scrollHorizontal",value:function(){var e,t=this;this.active&&(clearTimeout(this.scrollEndTimer),this.scrollEndTimer=setTimeout((function(){t.layout()}),100),e=this.table.rowManager.getVisibleRows(),this.calcMargins(),this.layoutColumnPosition(),this.layoutCalcRows(),e.forEach((function(e){"row"===e.type&&t.layoutRow(e)})),this.table.rowManager.tableElement.style.marginRight=this.rightMargin)}},{key:"calcMargins",value:function(){this.leftMargin=this._calcSpace(this.leftColumns,this.leftColumns.length)+"px",this.table.columnManager.headersElement.style.marginLeft=this.leftMargin,this.rightMargin=this._calcSpace(this.rightColumns,this.rightColumns.length)+"px",this.table.columnManager.element.style.paddingRight=this.rightMargin,this.rightPadding=this.table.rowManager.element.clientWidth+this.table.columnManager.scrollLeft}},{key:"layoutCalcRows",value:function(){this.table.modExists("columnCalcs")&&(this.table.modules.columnCalcs.topInitialized&&this.table.modules.columnCalcs.topRow&&this.layoutRow(this.table.modules.columnCalcs.topRow),this.table.modules.columnCalcs.botInitialized&&this.table.modules.columnCalcs.botRow&&this.layoutRow(this.table.modules.columnCalcs.botRow))}},{key:"layoutColumnPosition",value:function(e){var t=this,i=[];this.leftColumns.forEach((function(n,o){if(n.modules.frozen.margin=t._calcSpace(t.leftColumns,o)+t.table.columnManager.scrollLeft+"px",o==t.leftColumns.length-1?n.modules.frozen.edge=!0:n.modules.frozen.edge=!1,n.parent.isGroup){var a=t.getColGroupParentElement(n);i.includes(a)||(t.layoutElement(a,n),i.push(a)),n.modules.frozen.edge&&a.classList.add("tabulator-frozen-"+n.modules.frozen.position)}else t.layoutElement(n.getElement(),n);e&&n.cells.forEach((function(e){t.layoutElement(e.getElement(!0),n)}))})),this.rightColumns.forEach((function(i,n){i.modules.frozen.margin=t.rightPadding-t._calcSpace(t.rightColumns,n+1)+"px",n==t.rightColumns.length-1?i.modules.frozen.edge=!0:i.modules.frozen.edge=!1,i.parent.isGroup?t.layoutElement(t.getColGroupParentElement(i),i):t.layoutElement(i.getElement(),i),e&&i.cells.forEach((function(e){t.layoutElement(e.getElement(!0),i)}))}))}},{key:"getColGroupParentElement",value:function(e){return e.parent.isGroup?this.getColGroupParentElement(e.parent):e.getElement()}},{key:"layout",value:function(){var e=this;this.active&&(this.calcMargins(),this.table.rowManager.getDisplayRows().forEach((function(t){"row"===t.type&&e.layoutRow(t)})),this.layoutCalcRows(),this.layoutColumnPosition(!0),this.table.rowManager.tableElement.style.marginRight=this.rightMargin)}},{key:"layoutRow",value:function(e){var t=this;e.getElement().style.paddingLeft=this.leftMargin,this.leftColumns.forEach((function(i){var n=e.getCell(i);n&&t.layoutElement(n.getElement(!0),i)})),this.rightColumns.forEach((function(i){var n=e.getCell(i);n&&t.layoutElement(n.getElement(!0),i)}))}},{key:"layoutElement",value:function(e,t){t.modules.frozen&&(e.style.position="absolute",e.style.left=t.modules.frozen.margin,e.classList.add("tabulator-frozen"),t.modules.frozen.edge&&e.classList.add("tabulator-frozen-"+t.modules.frozen.position))}},{key:"_calcSpace",value:function(e,t){for(var i=0,n=0;n-1}},{key:"isFrozen",value:function(){return!!this.rows.length}},{key:"getRows",value:function(e){var t=e.slice(0);return this.rows.forEach((function(e){var i=t.indexOf(e);i>-1&&t.splice(i,1)})),t}},{key:"freezeRow",value:function(e){e.modules.frozen?console.warn("Freeze Error - Row is already frozen"):(e.modules.frozen=!0,this.topElement.appendChild(e.getElement()),e.initialize(),e.normalizeHeight(),this.table.rowManager.adjustTableSize(),this.rows.push(e),this.table.rowManager.refreshActiveData("display"),this.styleRows())}},{key:"unfreezeRow",value:function(e){this.rows.indexOf(e);e.modules.frozen?(e.modules.frozen=!1,this.detachRow(e),this.table.rowManager.adjustTableSize(),this.table.rowManager.refreshActiveData("display"),this.rows.length&&this.styleRows()):console.warn("Freeze Error - Row is already unfrozen")}},{key:"detachRow",value:function(e){var t=this.rows.indexOf(e);if(t>-1){var i=e.getElement();i.parentNode.removeChild(i),this.rows.splice(t,1)}}},{key:"styleRows",value:function(e){var t=this;this.rows.forEach((function(e,i){t.table.rowManager.styleRow(e,i)}))}}]),n}(N);ve.moduleName="frozenRows";var be=function(){function e(i){return t(this,e),this._group=i,this.type="GroupComponent",new Proxy(this,{get:function(e,t,i){return void 0!==e[t]?e[t]:e._group.table.componentFunctionBinder.handle("row",e._group,t)}})}return o(e,[{key:"getKey",value:function(){return this._group.key}},{key:"getField",value:function(){return this._group.field}},{key:"getElement",value:function(){return this._group.element}},{key:"getRows",value:function(){return this._group.getRows(!0)}},{key:"getSubGroups",value:function(){return this._group.getSubGroups(!0)}},{key:"getParentGroup",value:function(){return!!this._group.parent&&this._group.parent.getComponent()}},{key:"isVisible",value:function(){return this._group.visible}},{key:"show",value:function(){this._group.show()}},{key:"hide",value:function(){this._group.hide()}},{key:"toggle",value:function(){this._group.toggleVisibility()}},{key:"_getSelf",value:function(){return this._group}},{key:"getTable",value:function(){return this._group.groupManager.table}}]),e}(),ye=function(){function e(i,n,o,a,r,s,l){t(this,e),this.groupManager=i,this.parent=n,this.key=a,this.level=o,this.field=r,this.hasSubGroups=o-1?i?this.rows.splice(o+1,0,e):this.rows.splice(o,0,e):i?this.rows.push(e):this.rows.unshift(e),e.modules.group=this,this.generateGroupHeaderContents(),this.groupManager.table.modExists("columnCalcs")&&"table"!=this.groupManager.table.options.columnCalcs&&this.groupManager.table.modules.columnCalcs.recalcGroup(this),this.groupManager.updateGroupRows(!0)}},{key:"scrollHeader",value:function(e){this.arrowElement.style.marginLeft=e,this.groupList.forEach((function(t){t.scrollHeader(e)}))}},{key:"getRowIndex",value:function(e){}},{key:"conformRowData",value:function(e){return this.field?e[this.field]=this.key:console.warn("Data Conforming Error - Cannot conform row data to match new group as groupBy is a function"),this.parent&&(e=this.parent.conformRowData(e)),e}},{key:"removeRow",value:function(e){var t=this.rows.indexOf(e),i=e.getElement();t>-1&&this.rows.splice(t,1),this.groupManager.table.options.groupValues||this.rows.length?(i.parentNode&&i.parentNode.removeChild(i),this.generateGroupHeaderContents(),this.groupManager.table.modExists("columnCalcs")&&"table"!=this.groupManager.table.options.columnCalcs&&this.groupManager.table.modules.columnCalcs.recalcGroup(this)):(this.parent?this.parent.removeGroup(this):this.groupManager.removeGroup(this),this.groupManager.updateGroupRows(!0))}},{key:"removeGroup",value:function(e){var t,i=e.level+"_"+e.key;this.groups[i]&&(delete this.groups[i],(t=this.groupList.indexOf(e))>-1&&this.groupList.splice(t,1),this.groupList.length||(this.parent?this.parent.removeGroup(this):this.groupManager.removeGroup(this)))}},{key:"getHeadersAndRows",value:function(e){var t=[];return t.push(this),this._visSet(),this.visible?this.groupList.length?this.groupList.forEach((function(i){t=t.concat(i.getHeadersAndRows(e))})):(!e&&"table"!=this.groupManager.table.options.columnCalcs&&this.groupManager.table.modExists("columnCalcs")&&this.groupManager.table.modules.columnCalcs.hasTopCalcs()&&(this.calcs.top&&(this.calcs.top.detachElement(),this.calcs.top.deleteCells()),this.calcs.top=this.groupManager.table.modules.columnCalcs.generateTopRow(this.rows),t.push(this.calcs.top)),t=t.concat(this.rows),!e&&"table"!=this.groupManager.table.options.columnCalcs&&this.groupManager.table.modExists("columnCalcs")&&this.groupManager.table.modules.columnCalcs.hasBottomCalcs()&&(this.calcs.bottom&&(this.calcs.bottom.detachElement(),this.calcs.bottom.deleteCells()),this.calcs.bottom=this.groupManager.table.modules.columnCalcs.generateBottomRow(this.rows),t.push(this.calcs.bottom))):this.groupList.length||"table"==this.groupManager.table.options.columnCalcs||this.groupManager.table.modExists("columnCalcs")&&(!e&&this.groupManager.table.modules.columnCalcs.hasTopCalcs()&&(this.calcs.top&&(this.calcs.top.detachElement(),this.calcs.top.deleteCells()),this.groupManager.table.options.groupClosedShowCalcs&&(this.calcs.top=this.groupManager.table.modules.columnCalcs.generateTopRow(this.rows),t.push(this.calcs.top))),!e&&this.groupManager.table.modules.columnCalcs.hasBottomCalcs()&&(this.calcs.bottom&&(this.calcs.bottom.detachElement(),this.calcs.bottom.deleteCells()),this.groupManager.table.options.groupClosedShowCalcs&&(this.calcs.bottom=this.groupManager.table.modules.columnCalcs.generateBottomRow(this.rows),t.push(this.calcs.bottom)))),t}},{key:"getData",value:function(e,t){var i=[];return this._visSet(),(!e||e&&this.visible)&&this.rows.forEach((function(e){i.push(e.getData(t||"data"))})),i}},{key:"getRowCount",value:function(){var e=0;return this.groupList.length?this.groupList.forEach((function(t){e+=t.getRowCount()})):e=this.rows.length,e}},{key:"toggleVisibility",value:function(){this.visible?this.hide():this.show()}},{key:"hide",value:function(){this.visible=!1,"classic"!=this.groupManager.table.rowManager.getRenderMode()||this.groupManager.table.options.pagination?this.groupManager.updateGroupRows(!0):(this.element.classList.remove("tabulator-group-visible"),this.groupList.length?this.groupList.forEach((function(e){e.getHeadersAndRows().forEach((function(e){e.detachElement()}))})):this.rows.forEach((function(e){var t=e.getElement();t.parentNode.removeChild(t)})),this.groupManager.table.rowManager.setDisplayRows(this.groupManager.updateGroupRows(),this.groupManager.getDisplayIndex()),this.groupManager.table.rowManager.checkClassicModeGroupHeaderWidth()),this.groupManager.table.externalEvents.dispatch("groupVisibilityChanged",this.getComponent(),!1)}},{key:"show",value:function(){if(this.visible=!0,"classic"!=this.groupManager.table.rowManager.getRenderMode()||this.groupManager.table.options.pagination)this.groupManager.updateGroupRows(!0);else{this.element.classList.add("tabulator-group-visible");var e=this.getElement();this.groupList.length?this.groupList.forEach((function(t){t.getHeadersAndRows().forEach((function(t){var i=t.getElement();e.parentNode.insertBefore(i,e.nextSibling),t.initialize(),e=i}))})):this.rows.forEach((function(t){var i=t.getElement();e.parentNode.insertBefore(i,e.nextSibling),t.initialize(),e=i})),this.groupManager.table.rowManager.setDisplayRows(this.groupManager.updateGroupRows(),this.groupManager.getDisplayIndex()),this.groupManager.table.rowManager.checkClassicModeGroupHeaderWidth()}this.groupManager.table.externalEvents.dispatch("groupVisibilityChanged",this.getComponent(),!0)}},{key:"_visSet",value:function(){var e=[];"function"==typeof this.visible&&(this.rows.forEach((function(t){e.push(t.getData())})),this.visible=this.visible(this.key,this.getRowCount(),e,this.getComponent()))}},{key:"getRowGroup",value:function(e){var t=!1;return this.groupList.length?this.groupList.forEach((function(i){var n=i.getRowGroup(e);n&&(t=n)})):this.rows.find((function(t){return t===e}))&&(t=this),t}},{key:"getSubGroups",value:function(e){var t=[];return this.groupList.forEach((function(i){t.push(e?i.getComponent():i)})),t}},{key:"getRows",value:function(e){var t=[];return this.rows.forEach((function(i){t.push(e?i.getComponent():i)})),t}},{key:"generateGroupHeaderContents",value:function(){var e=[];for(this.rows.forEach((function(t){e.push(t.getData())})),this.elementContents=this.generator(this.key,this.getRowCount(),e,this.getComponent());this.element.firstChild;)this.element.removeChild(this.element.firstChild);"string"==typeof this.elementContents?this.element.innerHTML=this.elementContents:this.element.appendChild(this.elementContents),this.element.insertBefore(this.arrowElement,this.element.firstChild)}},{key:"getPath",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];return e.unshift(this.key),this.parent&&this.parent.getPath(e),e}},{key:"getElement",value:function(){this.addBindingsd=!1,this._visSet(),this.visible?this.element.classList.add("tabulator-group-visible"):this.element.classList.remove("tabulator-group-visible");for(var e=0;en.length&&console.warn("Error creating group headers, groupHeader array is shorter than groupBy array"),this.headerGenerator=[function(){return""}],this.startOpen=[function(){return!1}],this.langBind("groups|item",(function(t,i){e.headerGenerator[0]=function(e,n,o){return(void 0===e?"":e)+"("+n+" "+(1===n?t:i.groups.items)+")"}})),this.groupIDLookups=[],Array.isArray(t)||t)this.table.modExists("columnCalcs")&&"table"!=this.table.options.columnCalcs&&"both"!=this.table.options.columnCalcs&&this.table.modules.columnCalcs.removeCalcs();else if(this.table.modExists("columnCalcs")&&"group"!=this.table.options.columnCalcs)this.table.columnManager.getRealColumns().forEach((function(t){t.definition.topCalc&&e.table.modules.columnCalcs.initializeTopRow(),t.definition.bottomCalc&&e.table.modules.columnCalcs.initializeBottomRow()}));Array.isArray(t)||(t=[t]),t.forEach((function(t,i){var n,o;n="function"==typeof t?t:(o=e.table.columnManager.getColumnByField(t))?function(e){return o.getFieldValue(e)}:function(e){return e[t]},e.groupIDLookups.push({field:"function"!=typeof t&&t,func:n,values:!!e.allowedValues&&e.allowedValues[i]})})),i&&(Array.isArray(i)||(i=[i]),i.forEach((function(e){})),this.startOpen=i),n&&(this.headerGenerator=Array.isArray(n)?n:[n]),this.table.options.groupUpdateOnCellEdit&&(this.subscribe("cell-value-updated",this.cellUpdated.bind(this)),this.subscribe("row-data-changed",this.reassignRowToGroup.bind(this),0)),this.subscribe("row-deleting",this.rowDeleting.bind(this)),this.subscribe("row-deleted",this.rowsUpdated.bind(this)),this.subscribe("scroll-horizontal",this.scrollHeaders.bind(this)),this.subscribe("rows-wipe",this.wipe.bind(this)),this.subscribe("rows-added",this.rowsUpdated.bind(this)),this.subscribe("row-moving",this.rowMoving.bind(this)),this.subscribe("row-adding-index",this.rowAddingIndex.bind(this)),this.subscribe("rows-sample",this.rowSample.bind(this)),this.subscribe("render-virtual-fill",this.rowAddingIndex.bind(this)),this.registerDisplayHandler(this.getRows.bind(this),20),this.initialized=!0}}},{key:"rowSample",value:function(e,t){var i=this.getGroups(!1)[0];return t.push(i.getRows(!1)[0]),t}},{key:"virtualRenderFill",value:function(){var e=this.table.rowManager.tableElement;rows=this.table.rowManager.getVisibleRows(),rows=rows.filter((function(e){return"group"!==e.type})),e.style.minWidth=rows.length?"":this.table.columnManager.getWidth()+"px"}},{key:"rowAddingIndex",value:function(e,t,i){this.assignRowToGroup(e);var n=e.modules.group.rows;return n.length>1&&(!t||t&&-1==n.indexOf(t)?i?n[0]!==e&&(t=n[0],this.table.rowManager.moveRowInArray(e.modules.group.rows,e,t,!i)):n[n.length-1]!==e&&(t=n[n.length-1],this.table.rowManager.moveRowInArray(e.modules.group.rows,e,t,!i)):this.table.rowManager.moveRowInArray(e.modules.group.rows,e,t,!i)),t}},{key:"trackChanges",value:function(){this.dispatch("group-changed")}},{key:"setGroupBy",value:function(e){this.table.options.groupBy=e,this.initialize(),this.refreshData(!1,"display"),this.trackChanges()}},{key:"setGroupValues",value:function(e){this.table.options.groupValues=e,this.initialize(),this.refreshData(!1,"display"),this.trackChanges()}},{key:"setGroupStartOpen",value:function(e){this.table.options.groupStartOpen=e,this.initialize(),this.table.options.groupBy?(this.refreshData(),this.trackChanges()):console.warn("Grouping Update - cant refresh view, no groups have been set")}},{key:"setGroupHeader",value:function(e){this.table.options.groupHeader=e,this.initialize(),this.table.options.groupBy?(this.refreshData(),this.trackChanges()):console.warn("Grouping Update - cant refresh view, no groups have been set")}},{key:"userGetGroups",value:function(e){return this.getGroups(!0)}},{key:"userGetGroupedData",value:function(){return this.table.options.groupBy?this.getGroupedData():this.getData()}},{key:"rowGetGroup",value:function(e){return!!e.modules.group&&e.modules.group.getComponent()}},{key:"rowMoving",value:function(e,t,i){!i&&t instanceof ye&&(t=this.table.rowManager.prevDisplayRow(e)||t);var n=t.modules.group,o=e.modules.group;n===o?this.table.rowManager.moveRowInArray(n.rows,e,t,i):(o&&o.removeRow(e),n.insertRow(e,t,i))}},{key:"rowDeleting",value:function(e){e.modules.group&&e.modules.group.removeRow(e)}},{key:"rowsUpdated",value:function(e){this.updateGroupRows(!0)}},{key:"cellUpdated",value:function(e){this.reassignRowToGroup(e.row)}},{key:"setDisplayIndex",value:function(e){this.displayIndex=e}},{key:"getDisplayIndex",value:function(){return this.displayIndex}},{key:"getRows",value:function(e){return this.groupIDLookups.length?(this.dispatchExternal("dataGrouping"),this.generateGroups(e),this.subscribedExternal("dataGrouped")&&this.dispatchExternal("dataGrouped",this.getGroups(!0)),this.updateGroupRows()):e.slice(0)}},{key:"getGroups",value:function(e){var t=[];return this.groupList.forEach((function(i){t.push(e?i.getComponent():i)})),t}},{key:"getChildGroups",value:function(e){var t=this,i=[];return e||(e=this),e.groupList.forEach((function(e){e.groupList.length?i=i.concat(t.getChildGroups(e)):i.push(e)})),i}},{key:"wipe",value:function(){this.groupList.forEach((function(e){e.wipe()}))}},{key:"pullGroupListData",value:function(e){var t=this,i=[];return e.forEach((function(e){var n={level:0,rowCount:0,headerContent:""},o=[];e.hasSubGroups?(o=t.pullGroupListData(e.groupList),n.level=e.level,n.rowCount=o.length-e.groupList.length,n.headerContent=e.generator(e.key,n.rowCount,e.rows,e),i.push(n),i=i.concat(o)):(n.level=e.level,n.headerContent=e.generator(e.key,e.rows.length,e.rows,e),n.rowCount=e.getRows().length,i.push(n),e.getRows().forEach((function(e){i.push(e.getData("data"))})))})),i}},{key:"getGroupedData",value:function(){return this.pullGroupListData(this.groupList)}},{key:"getRowGroup",value:function(e){var t=!1;return this.groupList.forEach((function(i){var n=i.getRowGroup(e);n&&(t=n)})),t}},{key:"countGroups",value:function(){return this.groupList.length}},{key:"generateGroups",value:function(e){var t=this,i=this.groups;this.groups={},this.groupList=[],this.allowedValues&&this.allowedValues[0]?(this.allowedValues[0].forEach((function(e){t.createGroup(e,0,i)})),e.forEach((function(e){t.assignRowToExistingGroup(e,i)}))):e.forEach((function(e){t.assignRowToGroup(e,i)}))}},{key:"createGroup",value:function(e,t,i){var n,o=t+"_"+e;i=i||[],n=new ye(this,!1,t,e,this.groupIDLookups[0].field,this.headerGenerator[0],i[o]),this.groups[o]=n,this.groupList.push(n)}},{key:"assignRowToExistingGroup",value:function(e,t){var i="0_"+this.groupIDLookups[0].func(e.getData());this.groups[i]&&this.groups[i].addRow(e)}},{key:"assignRowToGroup",value:function(e,t){var i=this.groupIDLookups[0].func(e.getData()),n=!this.groups["0_"+i];return n&&this.createGroup(i,0,t),this.groups["0_"+i].addRow(e),!n}},{key:"reassignRowToGroup",value:function(e){if("row"===e.type){var t=e.modules.group,i=t.getPath(),n=this.getExpectedPath(e);i.length==n.length&&i.every((function(e,t){return e===n[t]}))||(t.removeRow(e),this.assignRowToGroup(e,this.groups),this.refreshData(!0))}}},{key:"getExpectedPath",value:function(e){var t=[],i=e.getData();return this.groupIDLookups.forEach((function(e){t.push(e.func(i))})),t}},{key:"updateGroupRows",value:function(e){var t=[];if(this.groupList.forEach((function(e){t=t.concat(e.getHeadersAndRows())})),e){var i=this.table.rowManager.setDisplayRows(t,this.getDisplayIndex());!0!==i&&this.setDisplayIndex(i),this.refreshData(!0)}return t}},{key:"scrollHeaders",value:function(e){"virtual"===this.table.options.renderHorizontal&&(e-=this.table.columnManager.renderer.vDomPadLeft),e+="px",this.groupList.forEach((function(t){t.scrollHeader(e)}))}},{key:"removeGroup",value:function(e){var t,i=e.level+"_"+e.key;this.groups[i]&&(delete this.groups[i],(t=this.groupList.indexOf(e))>-1&&this.groupList.splice(t,1))}}]),n}(N);we.moduleName="groupRows";var Ce=function(e){a(n,e);var i=c(n);function n(e){var o;return t(this,n),(o=i.call(this,e)).history=[],o.index=-1,o.registerTableOption("history",!1),o}return o(n,[{key:"initialize",value:function(){this.table.options.history&&(this.subscribe("cell-value-updated",this.layoutCell.bind(this)),this.subscribe("cell-delete",this.clearComponentHistory.bind(this)),this.subscribe("row-delete",this.rowDeleted.bind(this)),this.subscribe("rows-wipe",this.clear.bind(this)),this.subscribe("row-added",this.clear.bind(this)),this.subscribe("row-move",this.rowMoved.bind(this))),this.registerTableFunction("undo",this.undo.bind(this)),this.registerTableFunction("redo",this.redo.bind(this)),this.registerTableFunction("getHistoryUndoSize",this.getHistoryUndoSize.bind(this)),this.registerTableFunction("getHistoryRedoSize",this.getHistoryRedoSize.bind(this)),this.registerTableFunction("clearHistory",this.clear.bind(this))}},{key:"rowMoved",value:function(e,t,i){this.action("rowMove",e,{posFrom:this.table.rowManager.getRowPosition(e),posTo:this.table.rowManager.getRowPosition(t),to:t,after:i})}},{key:"rowAdded",value:function(e,t,i,n){this.action("rowAdd",e,{data:t,pos:i,index:n})}},{key:"rowDeleted",value:function(e){var t,i;this.table.options.groupBy?(t=(i=e.getComponent().getGroup().rows).indexOf(e))&&(t=i[t-1]):(t=e.table.rowManager.getRowIndex(e))&&(t=e.table.rowManager.rows[t-1]),this.history.action("rowDelete",e,{data:e.getData(),pos:!t,index:t})}},{key:"cellUpdated",value:function(e){this.action("cellEdit",e,{oldValue:e.oldValue,newValue:e.value})}},{key:"clear",value:function(){this.history=[],this.index=-1}},{key:"action",value:function(e,t,i){this.history=this.history.slice(0,this.index+1),this.history.push({type:e,component:t,data:i}),this.index++}},{key:"getHistoryUndoSize",value:function(){return this.index+1}},{key:"getHistoryRedoSize",value:function(){return this.history.length-(this.index+1)}},{key:"clearComponentHistory",value:function(e){var t=this.history.findIndex((function(t){return t.component===e}));t>-1&&(this.history.splice(t,1),t<=this.index&&this.index--,this.clearComponentHistory(e))}},{key:"undo",value:function(){if(this.index>-1){var e=this.history[this.index];return n.undoers[e.type].call(this,e),this.index--,this.dispatchExternal("historyUndo",e.type,e.component.getComponent(),e.data),!0}return console.warn("History Undo Error - No more history to undo"),!1}},{key:"redo",value:function(){if(this.history.length-1>this.index){this.index++;var e=this.history[this.index];return n.redoers[e.type].call(this,e),this.dispatchExternal("historyRedo",e.type,e.component.getComponent(),e.data),!0}return console.warn("History Redo Error - No more history to redo"),!1}},{key:"_rebindRow",value:function(e,t){this.history.forEach((function(i){if(i.component instanceof Row)i.component===e&&(i.component=t);else if(i.component instanceof Cell&&i.component.row===e){var n=i.component.column.getField();n&&(i.component=t.getCell(n))}}))}}]),n}(N);Ce.moduleName="history",Ce.undoers={cellEdit:function(e){e.component.setValueProcessData(e.data.oldValue)},rowAdd:function(e){e.component.deleteActual()},rowDelete:function(e){var t=this.table.rowManager.addRowActual(e.data.data,e.data.pos,e.data.index);this.table.options.groupBy&&this.table.modExists("groupRows")&&this.table.modules.groupRows.updateGroupRows(!0),this._rebindRow(e.component,t)},rowMove:function(e){this.table.rowManager.moveRowActual(e.component,this.table.rowManager.rows[e.data.posFrom],!e.data.after),this.table.rowManager.redraw()}},Ce.redoers={cellEdit:function(e){e.component.setValueProcessData(e.data.newValue)},rowAdd:function(e){var t=this.table.rowManager.addRowActual(e.data.data,e.data.pos,e.data.index);this.table.options.groupBy&&this.table.modExists("groupRows")&&this.table.modules.groupRows.updateGroupRows(!0),this._rebindRow(e.component,t)},rowDelete:function(e){e.component.deleteActual()},rowMove:function(e){this.table.rowManager.moveRowActual(e.component,this.table.rowManager.rows[e.data.posTo],e.data.after),this.table.rowManager.redraw()}};var Ee=function(i){a(r,i);var n=c(r);function r(e){var i;return t(this,r),(i=n.call(this,e)).fieldIndex=[],i.hasIndex=!1,i}return o(r,[{key:"initialize",value:function(){this.subscribe("table-building",this.tableElementCheck.bind(this))}},{key:"tableElementCheck",value:function(){"TABLE"===this.table.element.tagName&&this.parseTable()}},{key:"parseTable",value:function(){var t=this.table.element,i=this.table.options,n=(i.columns,t.getElementsByTagName("th")),o=t.getElementsByTagName("tbody")[0],a=[];this.hasIndex=!1,this.dispatchExternal("htmlImporting"),o=o?o.getElementsByTagName("tr"):[],this._extractOptions(t,i),n.length?this._extractHeaders(n,o):this._generateBlankHeaders(n,o);for(var r=0;r-1&&e.pressedKeys.splice(n,1)}},this.table.element.addEventListener("keydown",this.keyupBinding),this.table.element.addEventListener("keyup",this.keydownBinding)}},{key:"clearBindings",value:function(){this.keyupBinding&&this.table.element.removeEventListener("keydown",this.keyupBinding),this.keydownBinding&&this.table.element.removeEventListener("keyup",this.keydownBinding)}},{key:"checkBinding",value:function(e,t){var i=this,n=!0;return e.ctrlKey==t.ctrl&&e.shiftKey==t.shift&&e.metaKey==t.meta&&(t.keys.forEach((function(e){-1==i.pressedKeys.indexOf(e)&&(n=!1)})),n&&t.action.call(this,e),!0)}}]),r}(N);Re.moduleName="keybindings",Re.bindings={navPrev:"shift + 9",navNext:9,navUp:38,navDown:40,scrollPageUp:33,scrollPageDown:34,scrollToStart:36,scrollToEnd:35,undo:"ctrl + 90",redo:"ctrl + 89",copyToClipboard:"ctrl + 67"},Re.actions={keyBlock:function(e){e.stopPropagation(),e.preventDefault()},scrollPageUp:function(e){var t=this.table.rowManager,i=t.scrollTop-t.element.clientHeight;t.element.scrollHeight;e.preventDefault(),t.displayRowsCount&&(i>=0?t.element.scrollTop=i:t.scrollToRow(t.getDisplayRows()[0])),this.table.element.focus()},scrollPageDown:function(e){var t=this.table.rowManager,i=t.scrollTop+t.element.clientHeight,n=t.element.scrollHeight;e.preventDefault(),t.displayRowsCount&&(i<=n?t.element.scrollTop=i:t.scrollToRow(t.getDisplayRows()[t.displayRowsCount-1])),this.table.element.focus()},scrollToStart:function(e){var t=this.table.rowManager;e.preventDefault(),t.displayRowsCount&&t.scrollToRow(t.getDisplayRows()[0]),this.table.element.focus()},scrollToEnd:function(e){var t=this.table.rowManager;e.preventDefault(),t.displayRowsCount&&t.scrollToRow(t.getDisplayRows()[t.displayRowsCount-1]),this.table.element.focus()},navPrev:function(e){this.dispatch("keybinding-nav-prev",e)},navNext:function(e){this.dispatch("keybinding-nav-next",e)},navLeft:function(e){this.dispatch("keybinding-nav-left",e)},navRight:function(e){this.dispatch("keybinding-nav-right",e)},navUp:function(e){this.dispatch("keybinding-nav-up",e)},navDown:function(e){this.dispatch("keybinding-nav-down",e)},undo:function(e){this.table.options.history&&this.table.modExists("history")&&this.table.modExists("edit")&&(this.table.modules.edit.currentCell||(e.preventDefault(),this.table.modules.history.undo()))},redo:function(e){this.table.options.history&&this.table.modExists("history")&&this.table.modExists("edit")&&(this.table.modules.edit.currentCell||(e.preventDefault(),this.table.modules.history.redo()))},copyToClipboard:function(e){this.table.modules.edit.currentCell||this.table.modExists("clipboard",!0)&&this.table.modules.clipboard.copy(!1,!0)}};var xe=function(e){a(n,e);var i=c(n);function n(e){var o;return t(this,n),(o=i.call(this,e)).menuElements=[],o.blurEvent=o.hideMenu.bind(l(o)),o.escEvent=o.escMenu.bind(l(o)),o.nestedMenuBlock=!1,o.positionReversedX=!1,o.registerTableOption("rowContextMenu",!1),o.registerTableOption("rowClickMenu",!1),o.registerTableOption("groupContextMenu",!1),o.registerTableOption("groupClickMenu",!1),o.registerColumnOption("headerContextMenu"),o.registerColumnOption("headerMenu"),o.registerColumnOption("contextMenu"),o.registerColumnOption("clickMenu"),o}return o(n,[{key:"initialize",value:function(){this.subscribe("cell-layout",this.layoutCell.bind(this)),this.subscribe("column-init",this.initializeColumn.bind(this)),this.subscribe("row-init",this.initializeRow.bind(this))}},{key:"layoutCell",value:function(e){(e.column.definition.contextMenu||e.column.definition.clickMenu)&&this.initializeCell(e)}},{key:"initializeColumn",value:function(e){var t=e.definition;(t.headerContextMenu||t.headerClickMenu||t.headerMenu)&&this.initializeColumnHeader(this)}},{key:"initializeColumnHeader",value:function(e){var t,i=this;e.definition.headerContextMenu&&(e.getElement().addEventListener("contextmenu",this.LoadMenuEvent.bind(this,e,e.definition.headerContextMenu)),this.tapHold(e,e.definition.headerContextMenu)),e.definition.headerMenu&&((t=document.createElement("span")).classList.add("tabulator-header-menu-button"),t.innerHTML="⋮",t.addEventListener("click",(function(t){t.stopPropagation(),t.preventDefault(),i.LoadMenuEvent(e,e.definition.headerMenu,t)})),e.titleElement.insertBefore(t,e.titleElement.firstChild))}},{key:"LoadMenuEvent",value:function(e,t,i){t="function"==typeof t?t.call(this.table,e.getComponent(),i):t,this.loadMenu(i,e,t)}},{key:"tapHold",value:function(e,t){var i=this,n=e.getElement(),o=null,a=!1;n.addEventListener("touchstart",(function(n){clearTimeout(o),a=!1,o=setTimeout((function(){clearTimeout(o),o=null,a=!0,i.LoadMenuEvent(e,t,n)}),1e3)}),{passive:!0}),n.addEventListener("touchend",(function(e){clearTimeout(o),o=null,a&&e.preventDefault()}))}},{key:"initializeCell",value:function(e){e.column.definition.contextMenu&&(e.getElement(!0).addEventListener("contextmenu",this.LoadMenuEvent.bind(this,e,e.column.definition.contextMenu)),this.tapHold(e,e.column.definition.contextMenu)),e.column.definition.clickMenu&&e.getElement(!0).addEventListener("click",this.LoadMenuEvent.bind(this,e,e.column.definition.clickMenu))}},{key:"initializeRow",value:function(e){this.table.options.rowContextMenu&&(e.getElement().addEventListener("contextmenu",this.LoadMenuEvent.bind(this,e,this.table.options.rowContextMenu)),this.tapHold(e,this.table.options.rowContextMenu)),this.table.options.rowClickMenu&&e.getElement().addEventListener("click",this.LoadMenuEvent.bind(this,e,this.table.options.rowClickMenu))}},{key:"initializeGroup",value:function(e){this.table.options.groupContextMenu&&(e.getElement().addEventListener("contextmenu",this.LoadMenuEvent.bind(this,e,this.table.options.groupContextMenu)),this.tapHold(e,this.table.options.groupContextMenu)),this.table.options.groupClickMenu&&e.getElement().addEventListener("click",this.LoadMenuEvent.bind(this,e,this.table.options.groupClickMenu))}},{key:"loadMenu",value:function(e,t,i,n){var o=this,a=!(e instanceof MouseEvent),r=document.createElement("div");if(r.classList.add("tabulator-menu"),a||e.preventDefault(),i&&i.length){if(!n){if(this.nestedMenuBlock){if(this.isOpen())return}else this.nestedMenuBlock=setTimeout((function(){o.nestedMenuBlock=!1}),100);this.hideMenu(),this.menuElements=[]}i.forEach((function(e){var i=document.createElement("div"),n=e.label,a=e.disabled;e.separator?i.classList.add("tabulator-menu-separator"):(i.classList.add("tabulator-menu-item"),"function"==typeof n&&(n=n.call(o.table,t.getComponent())),n instanceof Node?i.appendChild(n):i.innerHTML=n,"function"==typeof a&&(a=a.call(o.table,t.getComponent())),a?(i.classList.add("tabulator-menu-item-disabled"),i.addEventListener("click",(function(e){e.stopPropagation()}))):e.menu&&e.menu.length?i.addEventListener("click",(function(n){n.stopPropagation(),o.hideOldSubMenus(r),o.loadMenu(n,t,e.menu,i)})):e.action&&i.addEventListener("click",(function(i){e.action(i,t.getComponent())})),e.menu&&e.menu.length&&i.classList.add("tabulator-menu-item-submenu")),r.appendChild(i)})),r.addEventListener("click",(function(e){o.hideMenu()})),this.menuElements.push(r),this.positionMenu(r,n,a,e)}}},{key:"hideOldSubMenus",value:function(e){var t=this.menuElements.indexOf(e);if(t>-1)for(var i=this.menuElements.length-1;i>t;i--){var n=this.menuElements[i];n.parentNode&&n.parentNode.removeChild(n),this.menuElements.pop()}}},{key:"positionMenu",value:function(e,t,i,n){var o,a,r,s=this,l=Math.max(document.body.offsetHeight,window.innerHeight);t?(o=(r=C.elOffset(t)).left+t.offsetWidth,a=r.top-1):(o=i?n.touches[0].pageX:n.pageX,a=i?n.touches[0].pageY:n.pageY,this.positionReversedX=!1),e.style.top=a+"px",e.style.left=o+"px",setTimeout((function(){s.table.rowManager.element.addEventListener("scroll",s.blurEvent),document.body.addEventListener("click",s.blurEvent),document.body.addEventListener("contextmenu",s.blurEvent),window.addEventListener("resize",s.blurEvent),document.body.addEventListener("keydown",s.escEvent)}),100),document.body.appendChild(e),a+e.offsetHeight>=l&&(e.style.top="",e.style.bottom=t?l-r.top-t.offsetHeight-1+"px":l-a+"px"),(o+e.offsetWidth>=document.body.offsetWidth||this.positionReversedX)&&(e.style.left="",e.style.right=t?document.documentElement.offsetWidth-r.left+"px":document.documentElement.offsetWidth-o+"px",this.positionReversedX=!0)}},{key:"isOpen",value:function(){return!!this.menuElements.length}},{key:"escMenu",value:function(e){27==e.keyCode&&this.hideMenu()}},{key:"hideMenu",value:function(){this.menuElements.forEach((function(e){e.parentNode&&e.parentNode.removeChild(e)})),document.body.removeEventListener("keydown",this.escEvent),document.body.removeEventListener("click",this.blurEvent),document.body.removeEventListener("contextmenu",this.blurEvent),window.removeEventListener("resize",this.blurEvent),this.table.rowManager.element.removeEventListener("scroll",this.blurEvent)}}]),n}(N);xe.moduleName="menu";var Te=function(e){a(n,e);var i=c(n);function n(e){var o;return t(this,n),(o=i.call(this,e)).placeholderElement=o.createPlaceholderElement(),o.hoverElement=!1,o.checkTimeout=!1,o.checkPeriod=250,o.moving=!1,o.toCol=!1,o.toColAfter=!1,o.startX=0,o.autoScrollMargin=40,o.autoScrollStep=5,o.autoScrollTimeout=!1,o.touchMove=!1,o.moveHover=o.moveHover.bind(l(o)),o.endMove=o.endMove.bind(l(o)),o.registerTableOption("movableColumns",!1),o}return o(n,[{key:"createPlaceholderElement",value:function(){var e=document.createElement("div");return e.classList.add("tabulator-col"),e.classList.add("tabulator-col-placeholder"),e}},{key:"initialize",value:function(){this.subscribe("column-init",this.initializeColumn.bind(this))}},{key:"initializeColumn",value:function(e){var t,i=this,n={};e.modules.frozen||(t=e.getElement(),n.mousemove=function(n){e.parent===i.moving.parent&&((i.touchMove?n.touches[0].pageX:n.pageX)-C.elOffset(t).left+i.table.columnManager.element.scrollLeft>e.getWidth()/2?i.toCol===e&&i.toColAfter||(t.parentNode.insertBefore(i.placeholderElement,t.nextSibling),i.moveColumn(e,!0)):(i.toCol!==e||i.toColAfter)&&(t.parentNode.insertBefore(i.placeholderElement,t),i.moveColumn(e,!1)))}.bind(i),t.addEventListener("mousedown",(function(t){i.touchMove=!1,1===t.which&&(i.checkTimeout=setTimeout((function(){i.startMove(t,e)}),i.checkPeriod))})),t.addEventListener("mouseup",(function(e){1===e.which&&i.checkTimeout&&clearTimeout(i.checkTimeout)})),i.bindTouchEvents(e)),e.modules.moveColumn=n}},{key:"bindTouchEvents",value:function(e){var t,i,n,o,a,r,s=this,l=e.getElement(),u=!1;l.addEventListener("touchstart",(function(l){s.checkTimeout=setTimeout((function(){s.touchMove=!0,t=e.nextColumn(),n=t?t.getWidth()/2:0,i=e.prevColumn(),o=i?i.getWidth()/2:0,a=0,r=0,u=!1,s.startMove(l,e)}),s.checkPeriod)}),{passive:!0}),l.addEventListener("touchmove",(function(l){var c,h;s.moving&&(s.moveHover(l),u||(u=l.touches[0].pageX),(c=l.touches[0].pageX-u)>0?t&&c-a>n&&(h=t)!==e&&(u=l.touches[0].pageX,h.getElement().parentNode.insertBefore(s.placeholderElement,h.getElement().nextSibling),s.moveColumn(h,!0)):i&&-c-r>o&&(h=i)!==e&&(u=l.touches[0].pageX,h.getElement().parentNode.insertBefore(s.placeholderElement,h.getElement()),s.moveColumn(h,!1)),h&&(t=h.nextColumn(),a=n,n=t?t.getWidth()/2:0,i=h.prevColumn(),r=o,o=i?i.getWidth()/2:0))}),{passive:!0}),l.addEventListener("touchend",(function(e){s.checkTimeout&&clearTimeout(s.checkTimeout),s.moving&&s.endMove(e)}))}},{key:"startMove",value:function(e,t){var i=t.getElement();this.moving=t,this.startX=(this.touchMove?e.touches[0].pageX:e.pageX)-C.elOffset(i).left,this.table.element.classList.add("tabulator-block-select"),this.placeholderElement.style.width=t.getWidth()+"px",this.placeholderElement.style.height=t.getHeight()+"px",i.parentNode.insertBefore(this.placeholderElement,i),i.parentNode.removeChild(i),this.hoverElement=i.cloneNode(!0),this.hoverElement.classList.add("tabulator-moving"),this.table.columnManager.getElement().appendChild(this.hoverElement),this.hoverElement.style.left="0",this.hoverElement.style.bottom="0",this.touchMove||(this._bindMouseMove(),document.body.addEventListener("mousemove",this.moveHover),document.body.addEventListener("mouseup",this.endMove)),this.moveHover(e)}},{key:"_bindMouseMove",value:function(){this.table.columnManager.columnsByIndex.forEach((function(e){e.modules.moveColumn.mousemove&&e.getElement().addEventListener("mousemove",e.modules.moveColumn.mousemove)}))}},{key:"_unbindMouseMove",value:function(){this.table.columnManager.columnsByIndex.forEach((function(e){e.modules.moveColumn.mousemove&&e.getElement().removeEventListener("mousemove",e.modules.moveColumn.mousemove)}))}},{key:"moveColumn",value:function(e,t){var i=this.moving.getCells();this.toCol=e,this.toColAfter=t,t?e.getCells().forEach((function(e,t){var n=e.getElement(!0);n.parentNode.insertBefore(i[t].getElement(),n.nextSibling)})):e.getCells().forEach((function(e,t){var n=e.getElement(!0);n.parentNode.insertBefore(i[t].getElement(),n)}))}},{key:"endMove",value:function(e){(1===e.which||this.touchMove)&&(this._unbindMouseMove(),this.placeholderElement.parentNode.insertBefore(this.moving.getElement(),this.placeholderElement.nextSibling),this.placeholderElement.parentNode.removeChild(this.placeholderElement),this.hoverElement.parentNode.removeChild(this.hoverElement),this.table.element.classList.remove("tabulator-block-select"),this.toCol&&this.table.columnManager.moveColumnActual(this.moving,this.toCol,this.toColAfter),this.moving=!1,this.toCol=!1,this.toColAfter=!1,this.touchMove||(document.body.removeEventListener("mousemove",this.moveHover),document.body.removeEventListener("mouseup",this.endMove)))}},{key:"moveHover",value:function(e){var t,i=this,n=this.table.columnManager.getElement(),o=n.scrollLeft,a=(this.touchMove?e.touches[0].pageX:e.pageX)-C.elOffset(n).left+o;this.hoverElement.style.left=a-this.startX+"px",a-oe.getHeight()/2?t.toRow===e&&t.toRowAfter||((n=e.getElement()).parentNode.insertBefore(t.placeholderElement,n.nextSibling),t.moveRow(e,!0)):(t.toRow!==e||t.toRowAfter)&&(n=e.getElement()).previousSibling&&(n.parentNode.insertBefore(t.placeholderElement,n),t.moveRow(e,!1))}.bind(t),e.modules.moveRow=i}},{key:"initializeRow",value:function(e){var t,i=this,n={};n.mouseup=function(t){i.tableRowDrop(t,e)}.bind(i),n.mousemove=function(t){var n=e.getElement();t.pageY-C.elOffset(n).top+i.table.rowManager.element.scrollTop>e.getHeight()/2?i.toRow===e&&i.toRowAfter||(n.parentNode.insertBefore(i.placeholderElement,n.nextSibling),i.moveRow(e,!0)):(i.toRow!==e||i.toRowAfter)&&(n.parentNode.insertBefore(i.placeholderElement,n),i.moveRow(e,!1))}.bind(i),this.hasHandle||((t=e.getElement()).addEventListener("mousedown",(function(t){1===t.which&&(i.checkTimeout=setTimeout((function(){i.startMove(t,e)}),i.checkPeriod))})),t.addEventListener("mouseup",(function(e){1===e.which&&i.checkTimeout&&clearTimeout(i.checkTimeout)})),this.bindTouchEvents(e,e.getElement())),e.modules.moveRow=n}},{key:"initializeColumn",value:function(e){e.definition.rowHandle&&!1!==this.table.options.movableRows&&(this.hasHandle=!0)}},{key:"initializeCell",value:function(e){if(e.column.definition.rowHandle&&!1!==this.table.options.movableRows){var t=this,i=e.getElement(!0);i.addEventListener("mousedown",(function(i){1===i.which&&(t.checkTimeout=setTimeout((function(){t.startMove(i,e.row)}),t.checkPeriod))})),i.addEventListener("mouseup",(function(e){1===e.which&&t.checkTimeout&&clearTimeout(t.checkTimeout)})),this.bindTouchEvents(e.row,i)}}},{key:"bindTouchEvents",value:function(e,t){var i,n,o,a,r,s,l=this,u=!1;t.addEventListener("touchstart",(function(t){l.checkTimeout=setTimeout((function(){l.touchMove=!0,i=e.nextRow(),o=i?i.getHeight()/2:0,n=e.prevRow(),a=n?n.getHeight()/2:0,r=0,s=0,u=!1,l.startMove(t,e)}),l.checkPeriod)}),{passive:!0}),this.moving,this.toRow,this.toRowAfter,t.addEventListener("touchmove",(function(t){var c,h;l.moving&&(t.preventDefault(),l.moveHover(t),u||(u=t.touches[0].pageY),(c=t.touches[0].pageY-u)>0?i&&c-r>o&&(h=i)!==e&&(u=t.touches[0].pageY,h.getElement().parentNode.insertBefore(l.placeholderElement,h.getElement().nextSibling),l.moveRow(h,!0)):n&&-c-s>a&&(h=n)!==e&&(u=t.touches[0].pageY,h.getElement().parentNode.insertBefore(l.placeholderElement,h.getElement()),l.moveRow(h,!1)),h&&(i=h.nextRow(),r=o,o=i?i.getHeight()/2:0,n=h.prevRow(),s=a,a=n?n.getHeight()/2:0))})),t.addEventListener("touchend",(function(e){l.checkTimeout&&clearTimeout(l.checkTimeout),l.moving&&(l.endMove(e),l.touchMove=!1)}))}},{key:"_bindMouseMove",value:function(){this.table.rowManager.getDisplayRows().forEach((function(e){"row"!==e.type&&"group"!==e.type||!e.modules.moveRow.mousemove||e.getElement().addEventListener("mousemove",e.modules.moveRow.mousemove)}))}},{key:"_unbindMouseMove",value:function(){this.table.rowManager.getDisplayRows().forEach((function(e){"row"!==e.type&&"group"!==e.type||!e.modules.moveRow.mousemove||e.getElement().removeEventListener("mousemove",e.modules.moveRow.mousemove)}))}},{key:"startMove",value:function(e,t){var i=t.getElement();this.setStartPosition(e,t),this.moving=t,this.table.element.classList.add("tabulator-block-select"),this.placeholderElement.style.width=t.getWidth()+"px",this.placeholderElement.style.height=t.getHeight()+"px",this.connection?(this.table.element.classList.add("tabulator-movingrow-sending"),this.connectToTables(t)):(i.parentNode.insertBefore(this.placeholderElement,i),i.parentNode.removeChild(i)),this.hoverElement=i.cloneNode(!0),this.hoverElement.classList.add("tabulator-moving"),this.connection?(document.body.appendChild(this.hoverElement),this.hoverElement.style.left="0",this.hoverElement.style.top="0",this.hoverElement.style.width=this.table.element.clientWidth+"px",this.hoverElement.style.whiteSpace="nowrap",this.hoverElement.style.overflow="hidden",this.hoverElement.style.pointerEvents="none"):(this.table.rowManager.getTableElement().appendChild(this.hoverElement),this.hoverElement.style.left="0",this.hoverElement.style.top="0",this._bindMouseMove()),document.body.addEventListener("mousemove",this.moveHover),document.body.addEventListener("mouseup",this.endMove),this.moveHover(e)}},{key:"setStartPosition",value:function(e,t){var i,n,o=this.touchMove?e.touches[0].pageX:e.pageX,a=this.touchMove?e.touches[0].pageY:e.pageY;i=t.getElement(),this.connection?(n=i.getBoundingClientRect(),this.startX=n.left-o+window.pageXOffset,this.startY=n.top-a+window.pageYOffset):this.startY=a-i.getBoundingClientRect().top}},{key:"endMove",value:function(e){e&&1!==e.which&&!this.touchMove||(this._unbindMouseMove(),this.connection||(this.placeholderElement.parentNode.insertBefore(this.moving.getElement(),this.placeholderElement.nextSibling),this.placeholderElement.parentNode.removeChild(this.placeholderElement)),this.hoverElement.parentNode.removeChild(this.hoverElement),this.table.element.classList.remove("tabulator-block-select"),this.toRow&&this.table.rowManager.moveRow(this.moving,this.toRow,this.toRowAfter),this.moving=!1,this.toRow=!1,this.toRowAfter=!1,document.body.removeEventListener("mousemove",this.moveHover),document.body.removeEventListener("mouseup",this.endMove),this.connection&&(this.table.element.classList.remove("tabulator-movingrow-sending"),this.disconnectFromTables()))}},{key:"moveRow",value:function(e,t){this.toRow=e,this.toRowAfter=t}},{key:"moveHover",value:function(e){this.connection?this.moveHoverConnections.call(this,e):this.moveHoverTable.call(this,e)}},{key:"moveHoverTable",value:function(e){var t=this.table.rowManager.getElement(),i=t.scrollTop,n=(this.touchMove?e.touches[0].pageY:e.pageY)-t.getBoundingClientRect().top+i;this.hoverElement.style.top=n-this.startY+"px"}},{key:"moveHoverConnections",value:function(e){this.hoverElement.style.left=this.startX+(this.touchMove?e.touches[0].pageX:e.pageX)+"px",this.hoverElement.style.top=this.startY+(this.touchMove?e.touches[0].pageY:e.pageY)+"px"}},{key:"elementRowDrop",value:function(e,t,i){this.table.options.movableRowsElementDrop&&this.dispatchExternal("movableRowsElementDrop",e,t,!!i&&i.getComponent())}},{key:"connectToTables",value:function(e){var t,i=this;this.connectionSelectorsTables&&(t=this.commsConnections(this.connectionSelectorsTables),this.dispatchExternal("movableRowsSendingStart",t),this.commsSend(this.connectionSelectorsTables,"moveRow","connect",{row:e})),this.connectionSelectorsElements&&(this.connectionElements=[],Array.isArray(this.connectionSelectorsElements)||(this.connectionSelectorsElements=[this.connectionSelectorsElements]),this.connectionSelectorsElements.forEach((function(e){"string"==typeof e?i.connectionElements=i.connectionElements.concat(Array.prototype.slice.call(document.querySelectorAll(e))):i.connectionElements.push(e)})),this.connectionElements.forEach((function(e){var t=function(t){i.elementRowDrop(t,e,i.moving)};e.addEventListener("mouseup",t),e.tabulatorElementDropEvent=t,e.classList.add("tabulator-movingrow-receiving")})))}},{key:"disconnectFromTables",value:function(){var e;this.connectionSelectorsTables&&(e=this.commsConnections(this.connectionSelectorsTables),this.dispatchExternal("movableRowsSendingStop",e),this.commsSend(this.connectionSelectorsTables,"moveRow","disconnect")),this.connectionElements.forEach((function(e){e.classList.remove("tabulator-movingrow-receiving"),e.removeEventListener("mouseup",e.tabulatorElementDropEvent),delete e.tabulatorElementDropEvent}))}},{key:"connect",value:function(e,t){return this.connectedTable?(console.warn("Move Row Error - Table cannot accept connection, already connected to table:",this.connectedTable),!1):(this.connectedTable=e,this.connectedRow=t,this.table.element.classList.add("tabulator-movingrow-receiving"),this.table.rowManager.getDisplayRows().forEach((function(e){"row"===e.type&&e.modules.moveRow&&e.modules.moveRow.mouseup&&e.getElement().addEventListener("mouseup",e.modules.moveRow.mouseup)})),this.tableRowDropEvent=this.tableRowDrop.bind(this),this.table.element.addEventListener("mouseup",this.tableRowDropEvent),this.dispatchExternal("movableRowsReceivingStart",t,e),!0)}},{key:"disconnect",value:function(e){e===this.connectedTable?(this.connectedTable=!1,this.connectedRow=!1,this.table.element.classList.remove("tabulator-movingrow-receiving"),this.table.rowManager.getDisplayRows().forEach((function(e){"row"===e.type&&e.modules.moveRow&&e.modules.moveRow.mouseup&&e.getElement().removeEventListener("mouseup",e.modules.moveRow.mouseup)})),this.table.element.removeEventListener("mouseup",this.tableRowDropEvent),this.dispatchExternal("movableRowsReceivingStop",e)):console.warn("Move Row Error - trying to disconnect from non connected table")}},{key:"dropComplete",value:function(t,i,n){var o=!1;if(n){switch(e(this.table.options.movableRowsSender)){case"string":o=this.senders[this.table.options.movableRowsSender];break;case"function":o=this.table.options.movableRowsSender}o?o.call(this,this.moving.getComponent(),i?i.getComponent():void 0,t):this.table.options.movableRowsSender&&console.warn("Mover Row Error - no matching sender found:",this.table.options.movableRowsSender),this.dispatchExternal("movableRowsSent",this.moving.getComponent(),i?i.getComponent():void 0,t)}else this.dispatchExternal("movableRowsSentFailed",this.moving.getComponent(),i?i.getComponent():void 0,t);this.endMove()}},{key:"tableRowDrop",value:function(t,i){var n=!1,o=!1;switch(t.stopImmediatePropagation(),e(this.table.options.movableRowsReceiver)){case"string":n=this.receivers[this.table.options.movableRowsReceiver];break;case"function":n=this.table.options.movableRowsReceiver}n?o=n.call(this,this.connectedRow.getComponent(),i?i.getComponent():void 0,this.connectedTable):console.warn("Mover Row Error - no matching receiver found:",this.table.options.movableRowsReceiver),o?this.dispatchExternal("movableRowsReceived",this.connectedRow.getComponent(),i?i.getComponent():void 0,this.connectedTable):this.dispatchExternal("movableRowsReceivedFailed",this.connectedRow.getComponent(),i?i.getComponent():void 0,this.connectedTable),this.commsSend(this.connectedTable,"moveRow","dropcomplete",{row:i,success:o})}},{key:"commsReceived",value:function(e,t,i){switch(t){case"connect":return this.connect(e,i.row);case"disconnect":return this.disconnect(e);case"dropcomplete":return this.dropComplete(e,i.row,i.success)}}}]),r}(N);Me.prototype.receivers={insert:function(e,t,i){return this.table.addRow(e.getData(),void 0,t),!0},add:function(e,t,i){return this.table.addRow(e.getData()),!0},update:function(e,t,i){return!!t&&(t.update(e.getData()),!0)},replace:function(e,t,i){return!!t&&(this.table.addRow(e.getData(),void 0,t),t.delete(),!0)}},Me.prototype.senders={delete:function(e,t,i){e.delete()}},Me.moduleName="moveRow";var Le=function(i){a(r,i);var n=c(r);function r(e){var i;return t(this,r),(i=n.call(this,e)).allowedTypes=["","data","edit","clipboard"],i.enabled=!0,i.registerColumnOption("mutator"),i.registerColumnOption("mutatorParams"),i.registerColumnOption("mutatorData"),i.registerColumnOption("mutatorDataParams"),i.registerColumnOption("mutatorEdit"),i.registerColumnOption("mutatorEditParams"),i.registerColumnOption("mutatorClipboard"),i.registerColumnOption("mutatorClipboardParams"),i}return o(r,[{key:"initialize",value:function(){this.subscribe("cell-value-changing",this.transformCell.bind(this)),this.subscribe("column-layout",this.initializeColumn.bind(this)),this.subscribe("row-data-init-before",this.rowDataChanged.bind(this)),this.subscribe("row-data-changing",this.rowDataChanged.bind(this))}},{key:"rowDataChanged",value:function(e,t,i){return this.transformRow(t,"data",i)}},{key:"initializeColumn",value:function(e){var t=this,i=!1,n={};this.allowedTypes.forEach((function(o){var a,r="mutator"+(o.charAt(0).toUpperCase()+o.slice(1));e.definition[r]&&(a=t.lookupMutator(e.definition[r]))&&(i=!0,n[r]={mutator:a,params:e.definition[r+"Params"]||{}})})),i&&(e.modules.mutate=n)}},{key:"lookupMutator",value:function(t){var i=!1;switch(e(t)){case"string":r.mutators[t]?i=r.mutators[t]:console.warn("Mutator Error - No such mutator found, ignoring: ",t);break;case"function":i=t}return i}},{key:"transformRow",value:function(e,t,i){var n,o="mutator"+(t.charAt(0).toUpperCase()+t.slice(1));return this.enabled&&this.table.columnManager.traverse((function(a){var r,s,l;a.modules.mutate&&(r=a.modules.mutate[o]||a.modules.mutate.mutator||!1)&&(n=a.getFieldValue(void 0!==i?i:e),"data"!=t&&void 0===n||(l=a.getComponent(),s="function"==typeof r.params?r.params(n,e,t,l):r.params,a.setFieldValue(e,r.mutator(n,e,t,s,l))))})),e}},{key:"transformCell",value:function(e,t){if(e.column.modules.mutate){var i=e.column.modules.mutate.mutatorEdit||e.column.modules.mutate.mutator||!1,n={};if(i)return n=Object.assign(n,e.row.getData()),e.column.setFieldValue(n,t),i.mutator(t,n,"edit",i.params,e.getComponent())}return t}},{key:"enable",value:function(){this.enabled=!0}},{key:"disable",value:function(){this.enabled=!1}}]),r}(N);Le.moduleName="mutator",Le.mutators={};var De=function(e){a(n,e);var i=c(n);function n(e){var o;return t(this,n),(o=i.call(this,e)).mode="local",o.progressiveLoad=!1,o.size=0,o.page=1,o.count=5,o.max=1,o.displayIndex=0,o.initialLoad=!0,o.dataChanging=!1,o.pageSizes=[],o.dataReceivedNames={},o.dataSentNames={},o.registerTableOption("pagination",!1),o.registerTableOption("paginationMode","local"),o.registerTableOption("paginationSize",!1),o.registerTableOption("paginationInitialPage",1),o.registerTableOption("paginationButtonCount",5),o.registerTableOption("paginationSizeSelector",!1),o.registerTableOption("paginationElement",!1),o.registerTableOption("paginationAddRow","page"),o.registerTableOption("progressiveLoad",!1),o.registerTableOption("progressiveLoadDelay",0),o.registerTableOption("progressiveLoadScrollMargin",0),o.registerTableFunction("setMaxPage",o.setMaxPage.bind(l(o))),o.registerTableFunction("setPage",o.setPage.bind(l(o))),o.registerTableFunction("setPageToRow",o.userSetPageToRow.bind(l(o))),o.registerTableFunction("setPageSize",o.userSetPageSize.bind(l(o))),o.registerTableFunction("getPageSize",o.getPageSize.bind(l(o))),o.registerTableFunction("previousPage",o.previousPage.bind(l(o))),o.registerTableFunction("nextPage",o.nextPage.bind(l(o))),o.registerTableFunction("getPage",o.getPage.bind(l(o))),o.registerTableFunction("getPageMax",o.getPageMax.bind(l(o))),o.registerComponentFunction("row","pageTo",o.setPageToRow.bind(l(o))),o}return o(n,[{key:"initialize",value:function(){this.table.options.pagination?(this.subscribe("row-deleted",this.rowsUpdated.bind(this)),this.subscribe("row-adding-position",this.rowAddingPosition.bind(this)),this.subscribe("row-added",this.rowsUpdated.bind(this)),this.subscribe("data-processed",this.initialLoadComplete.bind(this)),this.subscribe("table-built",this.calculatePageSizes.bind(this)),"remote"===this.table.options.paginationMode&&(this.subscribe("data-params",this.remotePageParams.bind(this)),this.subscribe("data-loaded",this._parseRemoteData.bind(this))),this.table.options.progressiveLoad&&console.error("Progressive Load Error - Pagination and progressive load cannot be used at the same time"),this.registerDisplayHandler(this.restOnRenderBefore.bind(this),40),this.registerDisplayHandler(this.getRows.bind(this),50),this.createElements(),this.initializePaginator()):this.table.options.progressiveLoad&&(this.subscribe("data-params",this.remotePageParams.bind(this)),this.subscribe("data-loaded",this._parseRemoteData.bind(this)),this.initializeProgressive(this.table.options.progressiveLoad),"scroll"===this.table.options.progressiveLoad&&this.subscribe("scroll-vertical",this.scrollVertical.bind(this)))}},{key:"rowAddingPosition",value:function(e,t){var i,n=this.table.rowManager,o=n.getDisplayRows();return t?o.length?i=o[0]:n.activeRows.length&&(i=n.activeRows[n.activeRows.length-1],t=!1):o.length&&(i=o[o.length-1],t=!(o.lengththis.max&&(this.page=this.max)}},{key:"reset",value:function(e){this.initialLoad||("local"==this.mode||e)&&(this.page=1)}},{key:"setMaxPage",value:function(e){e=parseInt(e),this.max=e||1,this.page>this.max&&(this.page=this.max,this.trigger())}},{key:"setPage",value:function(e){switch(e){case"first":return this.setPage(1);case"prev":return this.previousPage();case"next":return this.nextPage();case"last":return this.setPage(this.max)}return(e=parseInt(e))>0&&e<=this.max||"local"!==this.mode?(this.page=e,this.trackChanges(),this.trigger()):(console.warn("Pagination Error - Requested page is out of range of 1 - "+this.max+":",e),Promise.reject())}},{key:"setPageToRow",value:function(e){var t=this.table.rowManager.getDisplayRows(this.displayIndex-1).indexOf(e);if(t>-1){var i=!0===this.size?1:Math.ceil((t+1)/this.size);return this.setPage(i)}return console.warn("Pagination Error - Requested row is not visible"),Promise.reject()}},{key:"setPageSize",value:function(e){!0!==e&&(e=parseInt(e)),e>0&&(this.size=e),this.pageSizeSelect&&this.generatePageSizeSelectList(),this.trackChanges()}},{key:"_setPageButtons",value:function(){for(var e=Math.floor((this.count-1)/2),t=Math.ceil((this.count-1)/2),i=this.max-this.page+e+10&&o<=this.max&&this.pagesElement.appendChild(this._generatePageButton(o));this.footerRedraw()}},{key:"_generatePageButton",value:function(e){var t=this,i=document.createElement("button");return i.classList.add("tabulator-page"),e==this.page&&i.classList.add("active"),i.setAttribute("type","button"),i.setAttribute("role","button"),this.langBind("pagination|page_title",(function(t){i.setAttribute("aria-label",t+" "+e),i.setAttribute("title",t+" "+e)})),i.setAttribute("data-page",e),i.textContent=e,i.addEventListener("click",(function(i){t.setPage(e)})),i}},{key:"previousPage",value:function(){return this.page>1?(this.page--,this.trackChanges(),this.trigger()):(console.warn("Pagination Error - Previous page would be less than page 1:",0),Promise.reject())}},{key:"nextPage",value:function(){return this.page-1&&(o=o.substr(r),(i=o.indexOf(";"))>-1&&(o=o.substr(0,i)),n=o.replace(a+"=","")),!!n&&JSON.parse(n)}},Fe={local:function(e,t,i){localStorage.setItem(e+"-"+t,JSON.stringify(i))},cookie:function(e,t,i){var n=new Date;n.setDate(n.getDate()+1e4),document.cookie=e+"-"+t+"="+JSON.stringify(i)+"; expires="+n.toUTCString()}},Pe=function(e){a(n,e);var i=c(n);function n(e){var o;return t(this,n),(o=i.call(this,e)).mode="",o.id="",o.defWatcherBlock=!1,o.config={},o.readFunc=!1,o.writeFunc=!1,o.registerTableOption("persistence",!1),o.registerTableOption("persistenceID",""),o.registerTableOption("persistenceMode",!0),o.registerTableOption("persistenceReaderFunc",!1),o.registerTableOption("persistenceWriterFunc",!1),o}return o(n,[{key:"localStorageTest",value:function(){var e="_tabulator_test";try{return window.localStorage.setItem(e,e),window.localStorage.removeItem(e),!0}catch(e){return!1}}},{key:"initialize",value:function(){if(this.table.options.persistence){var e,t=this.table.options.persistenceMode,i=this.table.options.persistenceID;this.mode=!0!==t?t:this.localStorageTest()?"local":"cookie",this.table.options.persistenceReaderFunc?"function"==typeof this.table.options.persistenceReaderFunc?this.readFunc=this.table.options.persistenceReaderFunc:n.readers[this.table.options.persistenceReaderFunc]?this.readFunc=n.readers[this.table.options.persistenceReaderFunc]:console.warn("Persistence Read Error - invalid reader set",this.table.options.persistenceReaderFunc):n.readers[this.mode]?this.readFunc=n.readers[this.mode]:console.warn("Persistence Read Error - invalid reader set",this.mode),this.table.options.persistenceWriterFunc?"function"==typeof this.table.options.persistenceWriterFunc?this.writeFunc=this.table.options.persistenceWriterFunc:n.writers[this.table.options.persistenceWriterFunc]?this.writeFunc=n.writers[this.table.options.persistenceWriterFunc]:console.warn("Persistence Write Error - invalid reader set",this.table.options.persistenceWriterFunc):n.writers[this.mode]?this.writeFunc=n.writers[this.mode]:console.warn("Persistence Write Error - invalid writer set",this.mode),this.id="tabulator-"+(i||this.table.element.getAttribute("id")||""),this.config={sort:!0===this.table.options.persistence||this.table.options.persistence.sort,filter:!0===this.table.options.persistence||this.table.options.persistence.filter,group:!0===this.table.options.persistence||this.table.options.persistence.group,page:!0===this.table.options.persistence||this.table.options.persistence.page,columns:!0===this.table.options.persistence?["title","width","visible"]:this.table.options.persistence.columns},this.config.page&&(e=this.retreiveData("page"))&&(void 0===e.paginationSize||!0!==this.config.page&&!this.config.page.size||(this.table.options.paginationSize=e.paginationSize),void 0===e.paginationInitialPage||!0!==this.config.page&&!this.config.page.page||(this.table.options.paginationInitialPage=e.paginationInitialPage)),this.config.group&&(e=this.retreiveData("group"))&&(void 0===e.groupBy||!0!==this.config.group&&!this.config.group.groupBy||(this.table.options.groupBy=e.groupBy),void 0===e.groupStartOpen||!0!==this.config.group&&!this.config.group.groupStartOpen||(this.table.options.groupStartOpen=e.groupStartOpen),void 0===e.groupHeader||!0!==this.config.group&&!this.config.group.groupHeader||(this.table.options.groupHeader=e.groupHeader)),this.config.columns&&(this.table.options.columns=this.load("columns",this.table.options.columns),this.subscribe("column-init",this.initializeColumn.bind(this)),this.subscribe("column-show",this.save.bind(this,"columns")),this.subscribe("column-hide",this.save.bind(this,"columns")),this.subscribe("column-moved",this.save.bind(this,"columns")),this.subscribe("table-built",this.tableBuilt.bind(this),0)),this.subscribe("table-redraw",this.tableRedraw.bind(this)),this.subscribe("filter-changed",this.eventSave.bind(this,"filter")),this.subscribe("sort-changed",this.eventSave.bind(this,"sort")),this.subscribe("group-changed",this.eventSave.bind(this,"group")),this.subscribe("page-changed",this.eventSave.bind(this,"page")),this.subscribe("column-resized",this.eventSave.bind(this,"columns")),this.subscribe("layout-refreshed",this.eventSave.bind(this,"columns"))}this.registerTableFunction("getColumnLayout",this.getColumnLayout.bind(this)),this.registerTableFunction("setColumnLayout",this.setColumnLayout.bind(this))}},{key:"eventSave",value:function(e){this.config[e]&&this.save(e)}},{key:"tableBuilt",value:function(){var e,t;this.table.options;this.config.sort&&!1==!(e=this.load("sort"))&&(this.table.initialSort=e),this.config.filter&&!1==!(t=this.load("filter"))&&(this.table.initialFilter=t)}},{key:"tableRedraw",value:function(e){e&&this.config.columns&&this.save("columns")}},{key:"getColumnLayout",value:function(){return this.parseColumns(this.table.columnManager.getColumns())}},{key:"setColumnLayout",value:function(e){return this.table.columnManager.setColumns(this.mergeDefinition(this.table.options.columns,e)),!0}},{key:"initializeColumn",value:function(e){var t;this.config.columns&&(this.defWatcherBlock=!0,t=e.getDefinition(),(!0===this.config.columns?Object.keys(t):this.config.columns).forEach((function(e){var i=Object.getOwnPropertyDescriptor(t,e),n=t[e];i&&Object.defineProperty(t,e,{set:function(e){n=e,this.defWatcherBlock||this.save("columns"),i.set&&i.set(e)},get:function(){return i.get&&i.get(),n}})})),this.defWatcherBlock=!1)}},{key:"load",value:function(e,t){var i=this.retreiveData(e);return t&&(i=i?this.mergeDefinition(t,i):t),i}},{key:"retreiveData",value:function(e){return!!this.readFunc&&this.readFunc(this.id,e)}},{key:"mergeDefinition",value:function(e,t){var i=this,n=[];return(t=t||[]).forEach((function(t,o){var a,r=i._findColumn(e,t);r&&(!0===i.config.columns||null==i.config.columns?(a=Object.keys(r)).push("width"):a=i.config.columns,a.forEach((function(e){"columns"!==e&&void 0!==t[e]&&(r[e]=t[e])})),r.columns&&(r.columns=i.mergeDefinition(r.columns,t.columns)),n.push(r))})),e.forEach((function(e,o){i._findColumn(t,e)||(n.length>o?n.splice(o,0,e):n.push(e))})),n}},{key:"_findColumn",value:function(e,t){var i=t.columns?"group":t.field?"field":"object";return e.find((function(e){switch(i){case"group":return e.title===t.title&&e.columns.length===t.columns.length;case"field":return e.field===t.field;case"object":return e===t}}))}},{key:"save",value:function(e){var t={};switch(e){case"columns":t=this.parseColumns(this.table.columnManager.getColumns());break;case"filter":t=this.table.modules.filter.getFilters();break;case"sort":t=this.validateSorters(this.table.modules.sort.getSort());break;case"group":t=this.getGroupConfig();break;case"page":t=this.getPageConfig()}this.writeFunc&&this.writeFunc(this.id,e,t)}},{key:"validateSorters",value:function(e){return e.forEach((function(e){e.column=e.field,delete e.field})),e}},{key:"getGroupConfig",value:function(){var e={};return this.config.group&&((!0===this.config.group||this.config.group.groupBy)&&(e.groupBy=this.table.options.groupBy),(!0===this.config.group||this.config.group.groupStartOpen)&&(e.groupStartOpen=this.table.options.groupStartOpen),(!0===this.config.group||this.config.group.groupHeader)&&(e.groupHeader=this.table.options.groupHeader)),e}},{key:"getPageConfig",value:function(){var e={};return this.config.page&&((!0===this.config.page||this.config.page.size)&&(e.paginationSize=this.table.modules.page.getPageSize()),(!0===this.config.page||this.config.page.page)&&(e.paginationInitialPage=this.table.modules.page.getPage())),e}},{key:"parseColumns",value:function(e){var t=this,i=[],n=["headerContextMenu","headerMenu","contextMenu","clickMenu"];return e.forEach((function(e){var o,a={},r=e.getDefinition();e.isGroup?(a.title=r.title,a.columns=t.parseColumns(e.getColumns())):(a.field=e.getField(),!0===t.config.columns||null==t.config.columns?(o=Object.keys(r)).push("width"):o=t.config.columns,o.forEach((function(t){switch(t){case"width":a.width=e.getWidth();break;case"visible":a.visible=e.visible;break;default:"function"!=typeof r[t]&&-1===n.indexOf(t)&&(a[t]=r[t])}}))),i.push(a)})),i}}]),n}(N);Pe.moduleName="persistence",Pe.readers=Se,Pe.writers=Fe;var He=function(e){a(n,e);var i=c(n);function n(e){var o;return t(this,n),(o=i.call(this,e)).element=!1,o.manualBlock=!1,o.registerTableOption("printAsHtml",!1),o.registerTableOption("printFormatter",!1),o.registerTableOption("printHeader",!1),o.registerTableOption("printFooter",!1),o.registerTableOption("printStyled",!0),o.registerTableOption("printRowRange","visible"),o.registerTableOption("printConfig",{}),o.registerColumnOption("print"),o.registerColumnOption("titlePrint"),o}return o(n,[{key:"initialize",value:function(){this.table.options.printAsHtml&&(window.addEventListener("beforeprint",this.replaceTable.bind(this)),window.addEventListener("afterprint",this.cleanup.bind(this))),this.registerTableFunction("print",this.printFullscreen.bind(this))}},{key:"replaceTable",value:function(){this.manualBlock||(this.element=document.createElement("div"),this.element.classList.add("tabulator-print-table"),this.element.appendChild(this.table.modules.export.genereateTable(this.table.options.printConfig,this.table.options.printStyled,this.table.options.printRowRange,"print")),this.table.element.style.display="none",this.table.element.parentNode.insertBefore(this.element,this.table.element))}},{key:"cleanup",value:function(){document.body.classList.remove("tabulator-print-fullscreen-hide"),this.element&&this.element.parentNode&&(this.element.parentNode.removeChild(this.element),this.table.element.style.display="")}},{key:"printFullscreen",value:function(e,t,i){var n,o,a=window.scrollX,r=window.scrollY,s=document.createElement("div"),l=document.createElement("div"),u=this.table.modules.export.genereateTable(void 0!==i?i:this.table.options.printConfig,void 0!==t?t:this.table.options.printStyled,e||this.table.options.printRowRange,"print");this.manualBlock=!0,this.element=document.createElement("div"),this.element.classList.add("tabulator-print-fullscreen"),this.table.options.printHeader&&(s.classList.add("tabulator-print-header"),"string"==typeof(n="function"==typeof this.table.options.printHeader?this.table.options.printHeader.call(this.table):this.table.options.printHeader)?s.innerHTML=n:s.appendChild(n),this.element.appendChild(s)),this.element.appendChild(u),this.table.options.printFooter&&(l.classList.add("tabulator-print-footer"),"string"==typeof(o="function"==typeof this.table.options.printFooter?this.table.options.printFooter.call(this.table):this.table.options.printFooter)?l.innerHTML=o:l.appendChild(o),this.element.appendChild(l)),document.body.classList.add("tabulator-print-fullscreen-hide"),document.body.appendChild(this.element),this.table.options.printFormatter&&this.table.options.printFormatter(this.element,u),window.print(),this.cleanup(),window.scrollTo(a,r),this.manualBlock=!1}}]),n}(N);He.moduleName="print";var ze=function(e){a(n,e);var i=c(n);function n(e){var o;return t(this,n),(o=i.call(this,e)).data=!1,o.blocked=!1,o.origFuncs={},o.currentVersion=0,o.registerTableOption("reactiveData",!1),o}return o(n,[{key:"initialize",value:function(){this.table.options.reactiveData&&(this.subscribe("cell-value-save-before",this.block.bind(this)),this.subscribe("cell-value-save-after",this.unblock.bind(this)),this.subscribe("row-data-save-before",this.block.bind(this)),this.subscribe("row-data-save-after",this.unblock.bind(this)),this.subscribe("row-data-init-after",this.watchRow.bind(this)),this.subscribe("data-processing",this.watchData.bind(this)),this.subscribe("data-processing",this.watchData.bind(this)),this.subscribe("table-destroy",this.unwatchData.bind(this)))}},{key:"watchData",value:function(e){var t,i=this;this.currentVersion++,t=this.currentVersion,i.unwatchData(),i.data=e,i.origFuncs.push=e.push,Object.defineProperty(i.data,"push",{enumerable:!1,configurable:!0,value:function(){var n=Array.from(arguments);return i.blocked||t!==i.currentVersion||n.forEach((function(e){i.table.rowManager.addRowActual(e,!1)})),i.origFuncs.push.apply(e,arguments)}}),i.origFuncs.unshift=e.unshift,Object.defineProperty(i.data,"unshift",{enumerable:!1,configurable:!0,value:function(){var n=Array.from(arguments);return i.blocked||t!==i.currentVersion||n.forEach((function(e){i.table.rowManager.addRowActual(e,!0)})),i.origFuncs.unshift.apply(e,arguments)}}),i.origFuncs.shift=e.shift,Object.defineProperty(i.data,"shift",{enumerable:!1,configurable:!0,value:function(){var n;return i.blocked||t!==i.currentVersion||i.data.length&&(n=i.table.rowManager.getRowFromDataObject(i.data[0]))&&n.deleteActual(),i.origFuncs.shift.call(e)}}),i.origFuncs.pop=e.pop,Object.defineProperty(i.data,"pop",{enumerable:!1,configurable:!0,value:function(){var n;return i.blocked||t!==i.currentVersion||i.data.length&&(n=i.table.rowManager.getRowFromDataObject(i.data[i.data.length-1]))&&n.deleteActual(),i.origFuncs.pop.call(e)}}),i.origFuncs.splice=e.splice,Object.defineProperty(i.data,"splice",{enumerable:!1,configurable:!0,value:function(){var n,o=Array.from(arguments),a=o[0]<0?e.length+o[0]:o[0],r=o[1],s=!!o[2]&&o.slice(2);if(!i.blocked&&t===i.currentVersion){if(s&&((n=!!e[a]&&i.table.rowManager.getRowFromDataObject(e[a]))?s.forEach((function(e){i.table.rowManager.addRowActual(e,!0,n,!0)})):(s=s.slice().reverse()).forEach((function(e){i.table.rowManager.addRowActual(e,!0,!1,!0)}))),0!==r){var l=e.slice(a,void 0===o[1]?o[1]:a+r);l.forEach((function(e,t){var n=i.table.rowManager.getRowFromDataObject(e);n&&n.deleteActual(t!==l.length-1)}))}(s||0!==r)&&i.table.rowManager.reRenderInPosition()}return i.origFuncs.splice.apply(e,arguments)}})}},{key:"unwatchData",value:function(){if(!1!==this.data)for(var e in this.origFuncs)Object.defineProperty(this.data,e,{enumerable:!0,configurable:!0,writable:!0,value:this.origFuncs.key})}},{key:"watchRow",value:function(e){var t=e.getData();for(var i in this.blocked=!0,t)this.watchKey(e,t,i);this.table.options.dataTree&&this.watchTreeChildren(e),this.blocked=!1}},{key:"watchTreeChildren",value:function(e){var t=this,i=e.getData()[this.table.options.dataTreeChildField],n={};function o(){t.table.modules.dataTree.initializeRow(e),t.table.modules.dataTree.layoutRow(e),t.table.rowManager.refreshActiveData("tree",!1,!0)}i&&(n.push=i.push,Object.defineProperty(i,"push",{enumerable:!1,configurable:!0,value:function(){var e=n.push.apply(i,arguments);return o(),e}}),n.unshift=i.unshift,Object.defineProperty(i,"unshift",{enumerable:!1,configurable:!0,value:function(){var e=n.unshift.apply(i,arguments);return o(),e}}),n.shift=i.shift,Object.defineProperty(i,"shift",{enumerable:!1,configurable:!0,value:function(){var e=n.shift.call(i);return o(),e}}),n.pop=i.pop,Object.defineProperty(i,"pop",{enumerable:!1,configurable:!0,value:function(){var e=n.pop.call(i);return o(),e}}),n.splice=i.splice,Object.defineProperty(i,"splice",{enumerable:!1,configurable:!0,value:function(){var e=n.splice.apply(i,arguments);return o(),e}}))}},{key:"watchKey",value:function(e,t,i){var n=this,o=Object.getOwnPropertyDescriptor(t,i),a=t[i],r=this.currentVersion;Object.defineProperty(t,i,{set:function(t){if(a=t,!n.blocked&&r===n.currentVersion){var s={};s[i]=t,e.updateData(s)}o.set&&o.set(t)},get:function(){return o.get&&o.get(),a}})}},{key:"unwatchRow",value:function(e){var t=e.getData();for(var i in t)Object.defineProperty(t,i,{value:t[i]})}},{key:"block",value:function(){this.blocked=!0}},{key:"unblock",value:function(){this.blocked=!1}}]),n}(N);ze.moduleName="reactiveData";var Ae=function(e){a(n,e);var i=c(n);function n(e){var o;return t(this,n),(o=i.call(this,e)).startColumn=!1,o.startX=!1,o.startWidth=!1,o.handle=null,o.prevHandle=null,o.registerColumnOption("resizable",!0),o}return o(n,[{key:"initialize",value:function(){this.subscribe("cell-layout",this.layoutCellHandles.bind(this)),this.subscribe("column-init",this.layoutColumnHeader.bind(this))}},{key:"layoutCellHandles",value:function(e){"row"===e.row.type&&this.initializeColumn("cell",e.column,e.element)}},{key:"layoutColumnHeader",value:function(e){this.initializeColumn("header",e,e.element)}},{key:"initializeColumn",value:function(e,t,i){var n=this,o=!1,a=t.definition.resizable;if("header"===e&&(o="textarea"==t.definition.formatter||t.definition.variableHeight,t.modules.resize={variableHeight:o}),!0===a||a==e){var r=document.createElement("div");r.className="tabulator-col-resize-handle";var s=document.createElement("div");s.className="tabulator-col-resize-handle prev",r.addEventListener("click",(function(e){e.stopPropagation()}));var l=function(e){var i=t.getLastColumn();i&&n._checkResizability(i)&&(n.startColumn=t,n._mouseDown(e,i,r))};r.addEventListener("mousedown",l),r.addEventListener("touchstart",l,{passive:!0}),r.addEventListener("dblclick",(function(e){var i=t.getLastColumn();i&&n._checkResizability(i)&&(e.stopPropagation(),i.reinitializeWidth(!0))})),s.addEventListener("click",(function(e){e.stopPropagation()}));var u=function(e){var i,o,a;(i=t.getFirstColumn())&&(a=(o=n.table.columnManager.findColumnIndex(i))>0&&n.table.columnManager.getColumnByIndex(o-1))&&n._checkResizability(a)&&(n.startColumn=t,n._mouseDown(e,a,s))};s.addEventListener("mousedown",u),s.addEventListener("touchstart",u,{passive:!0}),s.addEventListener("dblclick",(function(e){var i,o,a;(i=t.getFirstColumn())&&(a=(o=n.table.columnManager.findColumnIndex(i))>0&&n.table.columnManager.getColumnByIndex(o-1))&&n._checkResizability(a)&&(e.stopPropagation(),a.reinitializeWidth(!0))})),i.appendChild(r),i.appendChild(s)}}},{key:"_checkResizability",value:function(e){return e.definition.resizable}},{key:"_mouseDown",value:function(e,t,i){var n=this;function o(e){n.table.rtl?t.setWidth(n.startWidth-((void 0===e.screenX?e.touches[0].screenX:e.screenX)-n.startX)):t.setWidth(n.startWidth+((void 0===e.screenX?e.touches[0].screenX:e.screenX)-n.startX)),n.table.columnManager.renderer.rerenderColumns(!0),!n.table.browserSlow&&t.modules.resize&&t.modules.resize.variableHeight&&t.checkCellHeights()}function a(e){n.startColumn.modules.edit&&(n.startColumn.modules.edit.blocked=!1),n.table.browserSlow&&t.modules.resize&&t.modules.resize.variableHeight&&t.checkCellHeights(),document.body.removeEventListener("mouseup",a),document.body.removeEventListener("mousemove",o),i.removeEventListener("touchmove",o),i.removeEventListener("touchend",a),n.table.element.classList.remove("tabulator-block-select"),n.dispatch("column-resized",t),n.table.externalEvents.dispatch("columnResized",t.getComponent())}n.table.element.classList.add("tabulator-block-select"),e.stopPropagation(),n.startColumn.modules.edit&&(n.startColumn.modules.edit.blocked=!0),n.startX=void 0===e.screenX?e.touches[0].screenX:e.screenX,n.startWidth=t.getWidth(),document.body.addEventListener("mousemove",o),document.body.addEventListener("mouseup",a),i.addEventListener("touchmove",o,{passive:!0}),i.addEventListener("touchend",a)}}]),n}(N);Ae.moduleName="resizeColumns";var Oe=function(e){a(n,e);var i=c(n);function n(e){var o;return t(this,n),(o=i.call(this,e)).startColumn=!1,o.startY=!1,o.startHeight=!1,o.handle=null,o.prevHandle=null,o.registerTableOption("resizableRows",!1),o}return o(n,[{key:"initialize",value:function(){this.table.options.resizableRows&&this.subscribe("row-layout-after",this.initializeRow.bind(this))}},{key:"initializeRow",value:function(e){var t=this,i=e.getElement(),n=document.createElement("div");n.className="tabulator-row-resize-handle";var o=document.createElement("div");o.className="tabulator-row-resize-handle prev",n.addEventListener("click",(function(e){e.stopPropagation()}));var a=function(i){t.startRow=e,t._mouseDown(i,e,n)};n.addEventListener("mousedown",a),n.addEventListener("touchstart",a,{passive:!0}),o.addEventListener("click",(function(e){e.stopPropagation()}));var r=function(i){var n=t.table.rowManager.prevDisplayRow(e);n&&(t.startRow=n,t._mouseDown(i,n,o))};o.addEventListener("mousedown",r),o.addEventListener("touchstart",r,{passive:!0}),i.appendChild(n),i.appendChild(o)}},{key:"_mouseDown",value:function(e,t,i){var n=this;function o(e){t.setHeight(n.startHeight+((void 0===e.screenY?e.touches[0].screenY:e.screenY)-n.startY))}function a(e){document.body.removeEventListener("mouseup",o),document.body.removeEventListener("mousemove",o),i.removeEventListener("touchmove",o),i.removeEventListener("touchend",a),n.table.element.classList.remove("tabulator-block-select"),this.dispatchExternal("rowResized",t.getComponent())}n.table.element.classList.add("tabulator-block-select"),e.stopPropagation(),n.startY=void 0===e.screenY?e.touches[0].screenY:e.screenY,n.startHeight=t.getHeight(),document.body.addEventListener("mousemove",o),document.body.addEventListener("mouseup",a),i.addEventListener("touchmove",o,{passive:!0}),i.addEventListener("touchend",a)}}]),n}(N);Oe.moduleName="resizeRows";var _e=function(e){a(n,e);var i=c(n);function n(e){var o;return t(this,n),(o=i.call(this,e)).binding=!1,o.observer=!1,o.containerObserver=!1,o.tableHeight=0,o.tableWidth=0,o.containerHeight=0,o.containerWidth=0,o.autoResize=!1,o.registerTableOption("autoResize",!0),o}return o(n,[{key:"initialize",value:function(){var e=this;if(this.table.options.autoResize){var t,i=this.table;this.tableHeight=i.element.clientHeight,this.tableWidth=i.element.clientWidth,i.element.parentNode&&(this.containerHeight=i.element.parentNode.clientHeight,this.containerWidth=i.element.parentNode.clientWidth),"undefined"!=typeof ResizeObserver&&"virtual"===i.rowManager.getRenderMode()?(this.autoResize=!0,this.observer=new ResizeObserver((function(t){if(!i.browserMobile||i.browserMobile&&!i.modules.edit.currentCell){var n=Math.floor(t[0].contentRect.height),o=Math.floor(t[0].contentRect.width);e.tableHeight==n&&e.tableWidth==o||(e.tableHeight=n,e.tableWidth=o,i.element.parentNode&&(e.containerHeight=i.element.parentNode.clientHeight,e.containerWidth=i.element.parentNode.clientWidth),e.table.columnManager.renderer.rerenderColumns(!0),i.redraw())}})),this.observer.observe(i.element),t=window.getComputedStyle(i.element),this.table.element.parentNode&&!this.table.rowManager.fixedHeight&&(t.getPropertyValue("max-height")||t.getPropertyValue("min-height"))&&(this.containerObserver=new ResizeObserver((function(t){if(!i.browserMobile||i.browserMobile&&!i.modules.edit.currentCell){var n=Math.floor(t[0].contentRect.height),o=Math.floor(t[0].contentRect.width);e.containerHeight==n&&e.containerWidth==o||(e.containerHeight=n,e.containerWidth=o,e.tableHeight=i.element.clientHeight,e.tableWidth=i.element.clientWidth),i.columnManager.renderer.rerenderColumns(!0),i.redraw()}})),this.containerObserver.observe(this.table.element.parentNode)),this.subscribe("table-resize",this.tableResized.bind(this))):(this.binding=function(){(!i.browserMobile||i.browserMobile&&!i.modules.edit.currentCell)&&(i.columnManager.renderer.rerenderColumns(!0),i.redraw())},window.addEventListener("resize",this.binding)),this.subscribe("table-destroy",this.clearBindings.bind(this))}}},{key:"tableResized",value:function(){this.table.rowManager.redraw()}},{key:"clearBindings",value:function(){this.binding&&window.removeEventListener("resize",this.binding),this.observer&&this.observer.unobserve(this.table.element),this.containerObserver&&this.containerObserver.unobserve(this.table.element.parentNode)}}]),n}(N);_e.moduleName="resizeTable";var Be=function(e){a(n,e);var i=c(n);function n(e){var o;return t(this,n),(o=i.call(this,e)).columns=[],o.hiddenColumns=[],o.mode="",o.index=0,o.collapseFormatter=[],o.collapseStartOpen=!0,o.collapseHandleColumn=!1,o.registerTableOption("responsiveLayout",!1),o.registerTableOption("responsiveLayoutCollapseStartOpen",!0),o.registerTableOption("responsiveLayoutCollapseUseFormatters",!0),o.registerTableOption("responsiveLayoutCollapseFormatter",!1),o.registerColumnOption("responsive"),o}return o(n,[{key:"initialize",value:function(){this.table.options.responsiveLayout&&(this.subscribe("column-layout",this.initializeColumn.bind(this)),this.subscribe("column-show",this.updateColumnVisibility.bind(this)),this.subscribe("column-hide",this.updateColumnVisibility.bind(this)),this.subscribe("columns-loaded",this.initializeResponsivity.bind(this)),this.subscribe("column-moved",this.initializeResponsivity.bind(this)),this.subscribe("column-add",this.initializeResponsivity.bind(this)),this.subscribe("column-delete",this.initializeResponsivity.bind(this)),this.subscribe("table-redrawing",this.tableRedraw.bind(this)),"collapse"===this.table.options.responsiveLayout&&(this.subscribe("row-init",this.initializeRow.bind(this)),this.subscribe("row-layout",this.layoutRow.bind(this))))}},{key:"tableRedraw",value:function(e){-1===["fitColumns","fitDataStretch"].indexOf(this.layoutMode())&&(e||this.update())}},{key:"initializeResponsivity",value:function(){this.mode=this.table.options.responsiveLayout,this.collapseFormatter=this.table.options.responsiveLayoutCollapseFormatter||this.formatCollapsedData,this.collapseStartOpen=this.table.options.responsiveLayoutCollapseStartOpen,this.hiddenColumns=[],this.table.columnManager.columnsByIndex.forEach((function(e,t){e.modules.responsive&&e.modules.responsive.order&&e.modules.responsive.visible&&(e.modules.responsive.index=t,columns.push(e),e.visible||"collapse"!==self.mode||self.hiddenColumns.push(e))})),columns=columns.reverse(),columns=columns.sort((function(e,t){return t.modules.responsive.order-e.modules.responsive.order||t.modules.responsive.index-e.modules.responsive.index})),this.columns=columns,"collapse"===this.mode&&this.generateCollapsedContent();var e,t=p(this.table.columnManager.columnsByIndex);try{for(t.s();!(e=t.n()).done;){var i=e.value;if("responsiveCollapse"==i.definition.formatter){this.collapseHandleColumn=i;break}}}catch(e){t.e(e)}finally{t.f()}this.collapseHandleColumn&&(this.hiddenColumns.length?this.collapseHandleColumn.show():this.collapseHandleColumn.hide())}},{key:"initializeColumn",value:function(e){var t=e.getDefinition();e.modules.responsive={order:void 0===t.responsive?1:t.responsive,visible:!1!==t.visible}}},{key:"initializeRow",value:function(e){var t;"calc"!==e.type&&((t=document.createElement("div")).classList.add("tabulator-responsive-collapse"),e.modules.responsiveLayout={element:t,open:this.collapseStartOpen},this.collapseStartOpen||(t.style.display="none"))}},{key:"layoutRow",value:function(e){var t=e.getElement();e.modules.responsiveLayout&&(t.appendChild(e.modules.responsiveLayout.element),this.generateCollapsedRowContent(e))}},{key:"updateColumnVisibility",value:function(e,t){!t&&e.modules.responsive&&(e.modules.responsive.visible=e.visible,this.initialize())}},{key:"hideColumn",value:function(e){var t=this.hiddenColumns.length;e.hide(!1,!0),"collapse"===this.mode&&(this.hiddenColumns.unshift(e),this.generateCollapsedContent(),this.collapseHandleColumn&&!t&&this.collapseHandleColumn.show())}},{key:"showColumn",value:function(e){var t;e.show(!1,!0),e.setWidth(e.getWidth()),"collapse"===this.mode&&((t=this.hiddenColumns.indexOf(e))>-1&&this.hiddenColumns.splice(t,1),this.generateCollapsedContent(),this.collapseHandleColumn&&!this.hiddenColumns.length&&this.collapseHandleColumn.hide())}},{key:"update",value:function(){for(var e=this,t=!0;t;){var i="fitColumns"==e.table.modules.layout.getMode()?e.table.columnManager.getFlexBaseWidth():e.table.columnManager.getWidth(),n=(e.table.options.headerVisible?e.table.columnManager.element.clientWidth:e.table.element.clientWidth)-i;if(n<0){var o=e.columns[e.index];o?(e.hideColumn(o),e.index++):t=!1}else{var a=e.columns[e.index-1];a&&n>0&&n>=a.getWidth()?(e.showColumn(a),e.index--):t=!1}e.table.rowManager.activeRowsCount||e.table.rowManager.renderEmptyScroll()}}},{key:"generateCollapsedContent",value:function(){var e=this;this.table.rowManager.getDisplayRows().forEach((function(t){e.generateCollapsedRowContent(t)}))}},{key:"generateCollapsedRowContent",value:function(e){var t,i;if(e.modules.responsiveLayout){for(t=e.modules.responsiveLayout.element;t.firstChild;)t.removeChild(t.firstChild);(i=this.collapseFormatter(this.generateCollapsedRowData(e)))&&t.appendChild(i)}}},{key:"generateCollapsedRowData",value:function(e){var t,i=this,n=e.getData(),o=[];return this.hiddenColumns.forEach((function(a){var r=a.getFieldValue(n);a.definition.title&&a.field&&(a.modules.format&&i.table.options.responsiveLayoutCollapseUseFormatters?(t={value:!1,data:{},getValue:function(){return r},getData:function(){return n},getElement:function(){return document.createElement("div")},getRow:function(){return e.getComponent()},getColumn:function(){return a.getComponent()}},o.push({field:a.field,title:a.definition.title,value:a.modules.format.formatter.call(i.table.modules.format,t,a.modules.format.params)})):o.push({field:a.field,title:a.definition.title,value:r}))})),o}},{key:"formatCollapsedData",value:function(e){var t=document.createElement("table");return e.forEach((function(e){var i,n=document.createElement("tr"),o=document.createElement("td"),a=document.createElement("td"),r=document.createElement("strong");o.appendChild(r),this.langBind("columns|"+e.field,(function(t){r.innerText=t||e.title})),e.value instanceof Node?((i=document.createElement("div")).appendChild(e.value),a.appendChild(i)):a.innerHTML=e.value,n.appendChild(o),n.appendChild(a),t.appendChild(n)}),this),Object.keys(e).length?t:""}}]),n}(N);Be.moduleName="responsiveLayout";var Ne=function(i){a(r,i);var n=c(r);function r(e){var i;return t(this,r),(i=n.call(this,e)).selecting=!1,i.lastClickedRow=!1,i.selectPrev=[],i.selectedRows=[],i.headerCheckboxElement=null,i.registerTableOption("selectable","highlight"),i.registerTableOption("selectableRangeMode","drag"),i.registerTableOption("selectableRollingSelection",!0),i.registerTableOption("selectablePersistence",!0),i.registerTableOption("selectableCheck",(function(e,t){return!0})),i.registerTableFunction("selectRow",i.selectRows.bind(l(i))),i.registerTableFunction("deselectRow",i.deselectRows.bind(l(i))),i.registerTableFunction("toggleSelectRow",i.toggleRow.bind(l(i))),i.registerTableFunction("getSelectedRows",i.getSelectedRows.bind(l(i))),i.registerTableFunction("getSelectedData",i.getSelectedData.bind(l(i))),i.registerComponentFunction("row","select",i.selectRows.bind(l(i))),i.registerComponentFunction("row","deselect",i.deselectRows.bind(l(i))),i.registerComponentFunction("row","toggleSelect",i.toggleRow.bind(l(i))),i.registerComponentFunction("row","isSelected",i.isRowSelected.bind(l(i))),i}return o(r,[{key:"initialize",value:function(){!1!==this.table.options.selectable&&(this.subscribe("row-init",this.initializeRow.bind(this)),this.subscribe("row-deleting",this.rowDeleted.bind(this)),this.subscribe("rows-wipe",this.clearSelectionData.bind(this)),this.subscribe("rows-retrieve",this.clearSelectionData.bind(this)),this.table.options.selectable&&this.table.options.selectablePersistence&&this.subscribe("data-refeshing",this.deselectRows.bind(this)))}},{key:"rowRetrieve",value:function(e,t){return"selected"===e?this.selectedRows:t}},{key:"rowDeleted",value:function(e){this._deselectRow(e,!0)}},{key:"clearSelectionData",value:function(e){this.selecting=!1,this.lastClickedRow=!1,this.selectPrev=[],this.selectedRows=[],!0!==e&&this._rowSelectionChanged()}},{key:"initializeRow",value:function(e){var t=this,i=e.getElement(),n=function e(){setTimeout((function(){t.selecting=!1}),50),document.body.removeEventListener("mouseup",e)};e.modules.select={selected:!1},t.table.options.selectableCheck.call(this.table,e.getComponent())?(i.classList.add("tabulator-selectable"),i.classList.remove("tabulator-unselectable"),t.table.options.selectable&&"highlight"!=t.table.options.selectable&&("click"===t.table.options.selectableRangeMode?i.addEventListener("click",(function(i){if(i.shiftKey){t.table._clearSelection(),t.lastClickedRow=t.lastClickedRow||e;var n=t.table.rowManager.getDisplayRowIndex(t.lastClickedRow),o=t.table.rowManager.getDisplayRowIndex(e),a=n<=o?n:o,r=n>=o?n:o,s=t.table.rowManager.getDisplayRows().slice(0).splice(a,r-a+1);i.ctrlKey||i.metaKey?(s.forEach((function(i){i!==t.lastClickedRow&&(!0===t.table.options.selectable||t.isRowSelected(e)||t.selectedRows.lengtht.table.options.selectable&&(s=s.slice(0,t.table.options.selectable)),t.selectRows(s)),t.table._clearSelection()}else i.ctrlKey||i.metaKey?(t.toggleRow(e),t.lastClickedRow=e):(t.deselectRows(void 0,!0),t.selectRows(e),t.lastClickedRow=e)})):(i.addEventListener("click",(function(i){t.table.modExists("edit")&&t.table.modules.edit.getCurrentCell()||t.table._clearSelection(),t.selecting||t.toggleRow(e)})),i.addEventListener("mousedown",(function(i){if(i.shiftKey)return t.table._clearSelection(),t.selecting=!0,t.selectPrev=[],document.body.addEventListener("mouseup",n),document.body.addEventListener("keyup",n),t.toggleRow(e),!1})),i.addEventListener("mouseenter",(function(i){t.selecting&&(t.table._clearSelection(),t.toggleRow(e),t.selectPrev[1]==e&&t.toggleRow(t.selectPrev[0]))})),i.addEventListener("mouseout",(function(i){t.selecting&&(t.table._clearSelection(),t.selectPrev.unshift(e))}))))):(i.classList.add("tabulator-unselectable"),i.classList.remove("tabulator-selectable"))}},{key:"toggleRow",value:function(e){this.table.options.selectableCheck.call(this.table,e.getComponent())&&(e.modules.select&&e.modules.select.selected?this._deselectRow(e):this._selectRow(e))}},{key:"selectRows",value:function(t){var i,n=this;switch(e(t)){case"undefined":this.table.rowManager.rows.forEach((function(e){n._selectRow(e,!0,!0)})),this._rowSelectionChanged();break;case"string":(i=this.table.rowManager.findRow(t))?this._selectRow(i,!0,!0):this.table.rowManager.getRows(t).forEach((function(e){n._selectRow(e,!0,!0)})),this._rowSelectionChanged();break;default:Array.isArray(t)?(t.forEach((function(e){n._selectRow(e,!0,!0)})),this._rowSelectionChanged()):this._selectRow(t,!1,!0)}}},{key:"_selectRow",value:function(e,t,i){if(!isNaN(this.table.options.selectable)&&!0!==this.table.options.selectable&&!i&&this.selectedRows.length>=this.table.options.selectable){if(!this.table.options.selectableRollingSelection)return!1;this._deselectRow(this.selectedRows[0])}var n=this.table.rowManager.findRow(e);n?-1==this.selectedRows.indexOf(n)&&(n.getElement().classList.add("tabulator-selected"),n.modules.select||(n.modules.select={}),n.modules.select.selected=!0,n.modules.select.checkboxEl&&(n.modules.select.checkboxEl.checked=!0),this.selectedRows.push(n),this.table.options.dataTreeSelectPropagate&&this.childRowSelection(n,!0),t||this.dispatchExternal("rowSelected",n.getComponent()),this._rowSelectionChanged(t)):t||console.warn("Selection Error - No such row found, ignoring selection:"+e)}},{key:"isRowSelected",value:function(e){return-1!==this.selectedRows.indexOf(e)}},{key:"deselectRows",value:function(e,t){var i,n=this;if(void 0===e){i=n.selectedRows.length;for(var o=0;o-1&&(o.getElement().classList.remove("tabulator-selected"),o.modules.select||(o.modules.select={}),o.modules.select.selected=!1,o.modules.select.checkboxEl&&(o.modules.select.checkboxEl.checked=!1),n.selectedRows.splice(i,1),this.table.options.dataTreeSelectPropagate&&this.childRowSelection(o,!1),t||this.dispatchExternal("rowDeselected",o.getComponent()),n._rowSelectionChanged(t)):t||console.warn("Deselection Error - No such row found, ignoring selection:"+e)}},{key:"getSelectedData",value:function(){var e=[];return this.selectedRows.forEach((function(t){e.push(t.getData())})),e}},{key:"getSelectedRows",value:function(){var e=[];return this.selectedRows.forEach((function(t){e.push(t.getComponent())})),e}},{key:"_rowSelectionChanged",value:function(e){this.headerCheckboxElement&&(0===this.selectedRows.length?(this.headerCheckboxElement.checked=!1,this.headerCheckboxElement.indeterminate=!1):this.table.rowManager.rows.length===this.selectedRows.length?(this.headerCheckboxElement.checked=!0,this.headerCheckboxElement.indeterminate=!1):(this.headerCheckboxElement.indeterminate=!0,this.headerCheckboxElement.checked=!1)),e||this.dispatchExternal("rowSelectionChanged",this.getSelectedData(),this.getSelectedRows())}},{key:"registerRowSelectCheckbox",value:function(e,t){e._row.modules.select||(e._row.modules.select={}),e._row.modules.select.checkboxEl=t}},{key:"registerHeaderSelectCheckbox",value:function(e){this.headerCheckboxElement=e}},{key:"childRowSelection",value:function(e,t){var i=this.table.modules.dataTree.getChildren(e,!0);if(t){var n,o=p(i);try{for(o.s();!(n=o.n()).done;){var a=n.value;this._selectRow(a,!0)}}catch(e){o.e(e)}finally{o.f()}}else{var r,s=p(i);try{for(s.s();!(r=s.n()).done;){var l=r.value;this._deselectRow(l,!0)}}catch(e){s.e(e)}finally{s.f()}}}}]),r}(N);function Ve(e,t,i,n,o,a,r){var s=r.format||"DD/MM/YYYY HH:mm:ss",l=r.alignEmptyValues,u=0;if("undefined"!=typeof moment){if(e=moment(e,s),t=moment(t,s),e.isValid()){if(t.isValid())return e-t;u=1}else u=t.isValid()?-1:0;return("top"===l&&"desc"===a||"bottom"===l&&"asc"===a)&&(u*=-1),u}console.error("Sort Error - 'datetime' sorter is dependant on moment.js")}Ne.moduleName="selectRow";var Ie={number:function(e,t,i,n,o,a,r){var s=r.alignEmptyValues,l=r.decimalSeparator,u=r.thousandSeparator,c=0;if(e=String(e),t=String(t),u&&(e=e.split(u).join(""),t=t.split(u).join("")),l&&(e=e.split(l).join("."),t=t.split(l).join(".")),e=parseFloat(e),t=parseFloat(t),isNaN(e))c=isNaN(t)?0:-1;else{if(!isNaN(t))return e-t;c=1}return("top"===s&&"desc"===a||"bottom"===s&&"asc"===a)&&(c*=-1),c},string:function(t,i,n,o,a,r,s){var l,u=s.alignEmptyValues,c=0;if(t){if(i){switch(e(s.locale)){case"boolean":s.locale&&(l=this.langLocale());break;case"string":l=s.locale}return String(t).toLowerCase().localeCompare(String(i).toLowerCase(),l)}c=1}else c=i?-1:0;return("top"===u&&"desc"===r||"bottom"===u&&"asc"===r)&&(c*=-1),c},date:function(e,t,i,n,o,a,r){return r.format||(r.format="DD/MM/YYYY"),Ve.call(this,e,t,i,n,o,a,r)},time:function(e,t,i,n,o,a,r){return r.format||(r.format="HH:mm"),Ve.call(this,e,t,i,n,o,a,r)},datetime:Ve,boolean:function(e,t,i,n,o,a,r){return(!0===e||"true"===e||"True"===e||1===e?1:0)-(!0===t||"true"===t||"True"===t||1===t?1:0)},array:function(e,t,i,n,o,a,r){var s=r.type||"length",l=r.alignEmptyValues,u=0;function c(e){switch(s){case"length":return e.length;case"sum":return e.reduce((function(e,t){return e+t}));case"max":return Math.max.apply(null,e);case"min":return Math.min.apply(null,e);case"avg":return e.reduce((function(e,t){return e+t}))/e.length}}if(Array.isArray(e)){if(Array.isArray(t))return(e?c(e):0)-(t?c(t):0);l=1}else l=Array.isArray(t)?-1:0;return("top"===l&&"desc"===a||"bottom"===l&&"asc"===a)&&(u*=-1),u},exists:function(e,t,i,n,o,a,r){return(void 0===e?0:1)-(void 0===t?0:1)},alphanum:function(e,t,i,n,o,a,r){var s,l,u,c,h,d=0,m=/(\d+)|(\D+)/g,p=/\d/,f=r.alignEmptyValues,g=0;if(e||0===e){if(t||0===t){if(isFinite(e)&&isFinite(t))return e-t;if((s=String(e).toLowerCase())===(l=String(t).toLowerCase()))return 0;if(!p.test(s)||!p.test(l))return s>l?1:-1;for(s=s.match(m),l=l.match(m),h=s.length>l.length?l.length:s.length;dc?1:-1;return s.length>l.length}g=1}else g=t||0===t?-1:0;return("top"===f&&"desc"===a||"bottom"===f&&"asc"===a)&&(g*=-1),g}},We=function(i){a(r,i);var n=c(r);function r(e){var i;return t(this,r),(i=n.call(this,e)).sortList=[],i.changed=!1,i.registerTableOption("sortMode","local"),i.registerTableOption("initialSort",!1),i.registerTableOption("columnHeaderSortMulti",!0),i.registerTableOption("sortOrderReverse",!1),i.registerTableOption("headerSortElement","
"),i.registerColumnOption("sorter"),i.registerColumnOption("sorterParams"),i.registerColumnOption("headerSort",!0),i.registerColumnOption("headerSortStartingDir"),i.registerColumnOption("headerSortTristate"),i}return o(r,[{key:"initialize",value:function(){this.subscribe("column-layout",this.initializeColumn.bind(this)),this.subscribe("table-built",this.tableBuilt.bind(this)),this.registerDataHandler(this.sort.bind(this),20),this.registerTableFunction("setSort",this.userSetSort.bind(this)),this.registerTableFunction("getSorters",this.getSort.bind(this)),this.registerTableFunction("clearSort",this.clearSort.bind(this)),"remote"===this.table.options.sortMode&&this.subscribe("data-params",this.remoteSortParams.bind(this))}},{key:"tableBuilt",value:function(){this.table.options.initialSort&&this.setSort(this.table.options.initialSort)}},{key:"remoteSortParams",value:function(e,t,i,n){var o=this.getSort();return o.forEach((function(e){delete e.column})),n.sort=o,n}},{key:"userSetSort",value:function(e,t){this.setSort(e,t),this.refreshSort()}},{key:"clearSort",value:function(){this.clear(),this.refreshSort()}},{key:"initializeColumn",value:function(t){var i,n,o=this,a=!1;switch(e(t.definition.sorter)){case"string":r.sorters[t.definition.sorter]?a=r.sorters[t.definition.sorter]:console.warn("Sort Error - No such sorter found: ",t.definition.sorter);break;case"function":a=t.definition.sorter}t.modules.sort={sorter:a,dir:"none",params:t.definition.sorterParams||{},startingDir:t.definition.headerSortStartingDir||"asc",tristate:t.definition.headerSortTristate},!1!==t.definition.headerSort&&((i=t.getElement()).classList.add("tabulator-sortable"),(n=document.createElement("div")).classList.add("tabulator-col-sorter"),"object"==e(this.table.options.headerSortElement)?n.appendChild(this.table.options.headerSortElement):n.innerHTML=this.table.options.headerSortElement,t.titleHolderElement.appendChild(n),t.modules.sort.element=n,i.addEventListener("click",(function(e){var i="",n=[],a=!1;if(t.modules.sort){if(t.modules.sort.tristate)i="none"==t.modules.sort.dir?t.modules.sort.startingDir:t.modules.sort.dir==t.modules.sort.startingDir?"asc"==t.modules.sort.dir?"desc":"asc":"none";else switch(t.modules.sort.dir){case"asc":i="desc";break;case"desc":i="asc";break;default:i=t.modules.sort.startingDir}o.table.options.columnHeaderSortMulti&&(e.shiftKey||e.ctrlKey)?((a=(n=o.getSort()).findIndex((function(e){return e.field===t.getField()})))>-1?(n[a].dir=i,a!=n.length-1&&(a=n.splice(a,1)[0],"none"!=i&&n.push(a))):"none"!=i&&n.push({column:t,dir:i}),o.setSort(n)):"none"==i?o.clear():o.setSort(t,i),o.refreshSort()}})))}},{key:"refreshSort",value:function(){"remote"===this.table.options.sortMode?this.reloadData():this.refreshData()}},{key:"hasChanged",value:function(){var e=this.changed;return this.changed=!1,e}},{key:"getSort",value:function(){var e=[];return this.sortList.forEach((function(t){t.column&&e.push({column:t.column.getComponent(),field:t.column.getField(),dir:t.dir})})),e}},{key:"setSort",value:function(e,t){var i=this,n=[];Array.isArray(e)||(e=[{column:e,dir:t}]),e.forEach((function(e){var t;(t=i.table.columnManager.findColumn(e.column))?(e.column=t,n.push(e),i.changed=!0):console.warn("Sort Warning - Sort field does not exist and is being ignored: ",e.column)})),i.sortList=n,this.dispatch("sort-changed")}},{key:"clear",value:function(){this.setSort([])}},{key:"findSorter",value:function(t){var i,n=this.table.rowManager.activeRows[0],o="string";if(n&&(n=n.getData(),t.getField()))switch(e(i=t.getFieldValue(n))){case"undefined":o="string";break;case"boolean":o="boolean";break;default:isNaN(i)||""===i?i.match(/((^[0-9]+[a-z]+)|(^[a-z]+[0-9]+))+$/i)&&(o="alphanum"):o="number"}return r.sorters[o]}},{key:"sort",value:function(e){var t=this,i=this.table.options.sortOrderReverse?t.sortList.slice().reverse():t.sortList,n=[],o=[];this.subscribedExternal("dataSorting")&&this.dispatchExternal("dataSorting",t.getSort()),t.clearColumnHeaders(),"remote"!==this.table.options.sortMode?(i.forEach((function(e,i){var o=e.column.modules.sort;e.column&&o&&(o.sorter||(o.sorter=t.findSorter(e.column)),e.params="function"==typeof o.params?o.params(e.column.getComponent(),e.dir):o.params,n.push(e)),t.setColumnHeader(e.column,e.dir)})),n.length&&t._sortItems(e,n)):i.forEach((function(e,i){t.setColumnHeader(e.column,e.dir)})),this.subscribedExternal("dataSorted")&&(e.forEach((function(e){o.push(e.getComponent())})),this.dispatchExternal("dataSorted",t.getSort(),o))}},{key:"clearColumnHeaders",value:function(){this.table.columnManager.getRealColumns().forEach((function(e){e.modules.sort&&(e.modules.sort.dir="none",e.getElement().setAttribute("aria-sort","none"))}))}},{key:"setColumnHeader",value:function(e,t){e.modules.sort.dir=t,e.getElement().setAttribute("aria-sort",t)}},{key:"_sortItems",value:function(e,t){var i=this,n=t.length-1;e.sort((function(e,o){for(var a,r=n;r>=0;r--){var s=t[r];if(0!==(a=i._sortRow(e,o,s.column,s.dir,s.params)))break}return a}))}},{key:"_sortRow",value:function(e,t,i,n,o){var a,r,s="asc"==n?e:t,l="asc"==n?t:e;return e=void 0!==(e=i.getFieldValue(s.getData()))?e:"",t=void 0!==(t=i.getFieldValue(l.getData()))?t:"",a=s.getComponent(),r=l.getComponent(),i.modules.sort.sorter.call(this,e,t,a,r,i.getComponent(),n,o)}}]),r}(N);We.moduleName="sort",We.sorters=Ie;var je={integer:function(e,t,i){return""===t||null==t||"number"==typeof(t=Number(t))&&isFinite(t)&&Math.floor(t)===t},float:function(e,t,i){return""===t||null==t||"number"==typeof(t=Number(t))&&isFinite(t)&&t%1!=0},numeric:function(e,t,i){return""===t||null==t||!isNaN(t)},string:function(e,t,i){return""===t||null==t||isNaN(t)},max:function(e,t,i){return""===t||null==t||parseFloat(t)<=i},min:function(e,t,i){return""===t||null==t||parseFloat(t)>=i},starts:function(e,t,i){return""===t||null==t||String(t).toLowerCase().startsWith(String(i).toLowerCase())},ends:function(e,t,i){return""===t||null==t||String(t).toLowerCase().endsWith(String(i).toLowerCase())},minLength:function(e,t,i){return""===t||null==t||String(t).length>=i},maxLength:function(e,t,i){return""===t||null==t||String(t).length<=i},in:function(e,t,i){return""===t||null==t||("string"==typeof i&&(i=i.split("|")),""===t||i.indexOf(t)>-1)},regex:function(e,t,i){return""===t||null==t||new RegExp(i).test(t)},unique:function(e,t,i){if(""===t||null==t)return!0;var n=!0,o=e.getData(),a=e.getColumn()._getSelf();return this.table.rowManager.rows.forEach((function(e){var i=e.getData();i!==o&&t==a.getFieldValue(i)&&(n=!1)})),n},required:function(e,t,i){return""!==t&&null!=t}},Ge=function(i){a(r,i);var n=c(r);function r(e){var i;return t(this,r),(i=n.call(this,e)).invalidCells=[],i.registerTableOption("validationMode","blocking"),i.registerColumnOption("validator"),i.registerTableFunction("getInvalidCells",i.getInvalidCells.bind(l(i))),i.registerTableFunction("clearCellValidation",i.userClearCellValidation.bind(l(i))),i.registerTableFunction("validate",i.userValidate.bind(l(i))),i.registerComponentFunction("cell","isValid",i.cellIsValid.bind(l(i))),i.registerComponentFunction("cell","clearValidation",i.clearValidation.bind(l(i))),i.registerComponentFunction("cell","validate",i.cellValidate.bind(l(i))),i.registerComponentFunction("column","validate",i.columnValidate.bind(l(i))),i.registerComponentFunction("row","validate",i.rowValidate.bind(l(i))),i}return o(r,[{key:"initialize",value:function(){this.subscribe("cell-delete",this.clearValidation.bind(this)),this.subscribe("column-layout",this.initializeColumnCheck.bind(this))}},{key:"cellIsValid",value:function(e){return!e.modules.validate||!e.modules.validate.invalid}},{key:"cellValidate",value:function(e){return this.validate(e.column.modules.validate,e,e.getValue())}},{key:"columnValidate",value:function(e){var t=[];return e.cells.forEach((function(e){this.cellValidate(e)||t.push(e.getComponent())})),!t.length||t}},{key:"rowValidate",value:function(e){var t=[];return e.cells.forEach((function(e){this.cellValidate(e)||t.push(e.getComponent())})),!t.length||t}},{key:"userClearCellValidation",value:function(e){var t=this;e||(e=this.getInvalidCells()),Array.isArray(e)||(e=[e]),e.forEach((function(e){t.clearValidation(e._getSelf())}))}},{key:"userValidate",value:function(e){var t=[];return this.table.rowManager.rows.forEach((function(e){var i=e.validate();!0!==i&&(t=t.concat(i))})),!t.length||t}},{key:"initializeColumnCheck",value:function(e){void 0!==e.definition.validator&&this.initializeColumn(e)}},{key:"initializeColumn",value:function(e){var t,i=this,n=[];e.definition.validator&&(Array.isArray(e.definition.validator)?e.definition.validator.forEach((function(e){(t=i._extractValidator(e))&&n.push(t)})):(t=this._extractValidator(e.definition.validator))&&n.push(t),e.modules.validate=!!n.length&&n)}},{key:"_extractValidator",value:function(t){var i,n,o;switch(e(t)){case"string":return(o=t.indexOf(":"))>-1?(i=t.substring(0,o),n=t.substring(o+1)):i=t,this._buildValidator(i,n);case"function":return this._buildValidator(t);case"object":return this._buildValidator(t.type,t.parameters)}}},{key:"_buildValidator",value:function(e,t){var i="function"==typeof e?e:r.validators[e];return i?{type:"function"==typeof e?"function":e,func:i,params:t}:(console.warn("Validator Setup Error - No matching validator found:",e),!1)}},{key:"validate",value:function(e,t,i){var n=this,o=[],a=this.invalidCells.indexOf(t);return e&&e.forEach((function(e){e.func.call(n,t.getComponent(),i,e.params)||o.push({type:e.type,parameters:e.params})})),o=!o.length||o,t.modules.validate||(t.modules.validate={}),!0===o?(t.modules.validate.invalid=!1,t.getElement().classList.remove("tabulator-validation-fail"),a>-1&&this.invalidCells.splice(a,1)):(t.modules.validate.invalid=!0,"manual"!==this.table.options.validationMode&&t.getElement().classList.add("tabulator-validation-fail"),-1==a&&this.invalidCells.push(t)),o}},{key:"getInvalidCells",value:function(){var e=[];return this.invalidCells.forEach((function(t){e.push(t.getComponent())})),e}},{key:"clearValidation",value:function(e){var t;e.modules.validate&&e.modules.validate.invalid&&(e.getElement().classList.remove("tabulator-validation-fail"),e.modules.validate.invalid=!1,(t=this.invalidCells.indexOf(e))>-1&&this.invalidCells.splice(t,1))}}]),r}(N);Ge.moduleName="validate",Ge.validators=je;var Ue=Object.freeze({__proto__:null,AccessorModule:q,AjaxModule:Q,ClipboardModule:Z,ColumnCalcsModule:ie,DataTreeModule:ne,DownloadModule:ae,EditModule:le,ExportModule:he,FilterModule:me,FormatModule:fe,FrozenColumnsModule:ge,FrozenRowsModule:ve,GroupRowsModule:we,HistoryModule:Ce,HtmlTableImportModule:Ee,InteractionModule:ke,KeybindingsModule:Re,MenuModule:xe,MoveColumnsModule:Te,MoveRowsModule:Me,MutatorModule:Le,PageModule:De,PersistenceModule:Pe,PrintModule:He,ReactiveDataModule:ze,ResizeColumnsModule:Ae,ResizeRowsModule:Oe,ResizeTableModule:_e,ResponsiveLayoutModule:Be,SelectRowModule:Ne,SortModule:We,ValidateModule:Ge}),Xe=function(e){a(n,e);var i=c(n);function n(){return t(this,n),i.apply(this,arguments)}return n}(Y);return new X(Xe,Ue),Xe})); //# sourceMappingURL=tabulator.min.js.map diff --git a/dist/js/tabulator.min.js.map b/dist/js/tabulator.min.js.map index 7503c1ead..70ac2adb3 100644 --- a/dist/js/tabulator.min.js.map +++ b/dist/js/tabulator.min.js.map @@ -1 +1 @@ -{"version":3,"file":"tabulator.min.js","sources":["../../src/js/core/column/ColumnComponent.js","../../src/js/core/cell/CellComponent.js","../../src/js/core/cell/Cell.js","../../src/js/core/column/Column.js","../../src/js/core/column/defaults/options.js","../../src/js/core/Helpers.js","../../src/js/core/ColumnManager.js","../../src/js/core/row/RowComponent.js","../../src/js/core/row/Row.js","../../src/js/core/RowManager.js","../../src/js/core/FooterManager.js","../../src/js/core/TableRegistry.js","../../src/js/core/Module.js","../../src/js/modules/Layout/defaults/modes/fitDataGeneral.js","../../src/js/modules/Layout/defaults/modes.js","../../src/js/modules/Layout/defaults/modes/fitData.js","../../src/js/modules/Layout/defaults/modes/fitDataStretch.js","../../src/js/modules/Layout/defaults/modes/fitColumns.js","../../src/js/modules/Layout/Layout.js","../../src/js/modules/Localize/Localize.js","../../src/js/modules/Localize/defaults/langs.js","../../src/js/modules/Comms/Comms.js","../../src/js/core/ModuleBinder.js","../../src/js/core/renderers/VirtualDomHorizontal.js","../../src/js/core/Tabulator.js","../../src/js/core/defaults/options.js","../../src/js/modules/Accessor/Accessor.js","../../src/js/modules/Accessor/defaults/accessors.js","../../src/js/modules/Ajax/defaults/contentTypeFormatters.js","../../src/js/modules/Ajax/Ajax.js","../../src/js/modules/Ajax/defaults/config.js","../../src/js/modules/Ajax/defaults/urlGenerator.js","../../src/js/modules/Ajax/defaults/loaderPromise.js","../../src/js/modules/Clipboard/Clipboard.js","../../src/js/modules/Clipboard/defaults/pasteActions.js","../../src/js/modules/Clipboard/defaults/pasteParsers.js","../../src/js/modules/ColumnCalcs/CalcComponent.js","../../src/js/modules/ColumnCalcs/defaults/calculations.js","../../src/js/modules/ColumnCalcs/ColumnCalcs.js","../../src/js/modules/DataTree/DataTree.js","../../src/js/modules/Download/defaults/downloaders.js","../../src/js/modules/Download/defaults/downloaders/csv.js","../../src/js/modules/Download/defaults/downloaders/json.js","../../src/js/modules/Download/defaults/downloaders/pdf.js","../../src/js/modules/Download/defaults/downloaders/xlsx.js","../../src/js/modules/Download/defaults/downloaders/html.js","../../src/js/modules/Download/Download.js","../../src/js/modules/Edit/defaults/editors.js","../../src/js/modules/Edit/defaults/editors/input.js","../../src/js/modules/Edit/defaults/editors/textarea.js","../../src/js/modules/Edit/defaults/editors/number.js","../../src/js/modules/Edit/defaults/editors/range.js","../../src/js/modules/Edit/defaults/editors/select.js","../../src/js/modules/Edit/defaults/editors/autocomplete.js","../../src/js/modules/Edit/defaults/editors/star.js","../../src/js/modules/Edit/defaults/editors/progress.js","../../src/js/modules/Edit/defaults/editors/tickCross.js","../../src/js/modules/Edit/Edit.js","../../src/js/modules/Export/ExportRow.js","../../src/js/modules/Export/ExportColumn.js","../../src/js/modules/Export/Export.js","../../src/js/modules/Filter/defaults/filters.js","../../src/js/modules/Filter/Filter.js","../../src/js/modules/Format/defaults/formatters.js","../../src/js/modules/Format/defaults/formatters/plaintext.js","../../src/js/modules/Format/defaults/formatters/html.js","../../src/js/modules/Format/defaults/formatters/textarea.js","../../src/js/modules/Format/defaults/formatters/money.js","../../src/js/modules/Format/defaults/formatters/link.js","../../src/js/modules/Format/defaults/formatters/image.js","../../src/js/modules/Format/defaults/formatters/tickCross.js","../../src/js/modules/Format/defaults/formatters/datetime.js","../../src/js/modules/Format/defaults/formatters/datetimediff.js","../../src/js/modules/Format/defaults/formatters/lookup.js","../../src/js/modules/Format/defaults/formatters/star.js","../../src/js/modules/Format/defaults/formatters/traffic.js","../../src/js/modules/Format/defaults/formatters/progress.js","../../src/js/modules/Format/defaults/formatters/color.js","../../src/js/modules/Format/defaults/formatters/buttonTick.js","../../src/js/modules/Format/defaults/formatters/buttonCross.js","../../src/js/modules/Format/defaults/formatters/rownum.js","../../src/js/modules/Format/defaults/formatters/handle.js","../../src/js/modules/Format/defaults/formatters/responsiveCollapse.js","../../src/js/modules/Format/defaults/formatters/rowSelection.js","../../src/js/modules/Format/Format.js","../../src/js/modules/FrozenColumns/FrozenColumns.js","../../src/js/modules/FrozenRows/FrozenRows.js","../../src/js/modules/GroupRows/Group.js","../../src/js/modules/GroupRows/GroupRows.js","../../src/js/modules/History/History.js","../../src/js/modules/History/defaults/undoers.js","../../src/js/modules/History/defaults/redoers.js","../../src/js/modules/HtmlTableImport/HtmlTableImport.js","../../src/js/modules/Keybindings/defaults/actions.js","../../src/js/modules/Keybindings/Keybindings.js","../../src/js/modules/Keybindings/defaults/bindings.js","../../src/js/modules/Menu/Menu.js","../../src/js/modules/MoveColumns/MoveColumns.js","../../src/js/modules/MoveRows/MoveRows.js","../../src/js/modules/Mutator/Mutator.js","../../src/js/modules/Mutator/defaults/mutators.js","../../src/js/modules/Page/Page.js","../../src/js/modules/Page/defaults/dataSentNames.js","../../src/js/modules/Page/defaults/dataReceivedNames.js","../../src/js/modules/Persistence/defaults/readers.js","../../src/js/modules/Persistence/defaults/writers.js","../../src/js/modules/Persistence/Persistence.js","../../src/js/modules/Print/Print.js","../../src/js/modules/ReactiveData/ReactiveData.js","../../src/js/modules/ResizeColumns/ResizeColumns.js","../../src/js/modules/ResizeRows/ResizeRows.js","../../src/js/modules/ResizeTable/ResizeTable.js","../../src/js/modules/ResponsiveLayout/ResponsiveLayout.js","../../src/js/modules/SelectRow/SelectRow.js","../../src/js/modules/Sort/defaults/sorters/datetime.js","../../src/js/modules/Sort/defaults/sorters.js","../../src/js/modules/Sort/defaults/sorters/number.js","../../src/js/modules/Sort/defaults/sorters/string.js","../../src/js/modules/Sort/defaults/sorters/date.js","../../src/js/modules/Sort/defaults/sorters/time.js","../../src/js/modules/Sort/defaults/sorters/boolean.js","../../src/js/modules/Sort/defaults/sorters/array.js","../../src/js/modules/Sort/defaults/sorters/exists.js","../../src/js/modules/Sort/defaults/sorters/alphanum.js","../../src/js/modules/Sort/Sort.js","../../src/js/modules/Validate/defaults/validators.js","../../src/js/modules/Validate/Validate.js","../../src/js/core/TabulatorFull.js"],"sourcesContent":["//public column object\r\nexport default class ColumnComponent {\r\n\tconstructor (column){\r\n\t\tthis._column = column;\r\n\t\tthis.type = \"ColumnComponent\";\r\n\t}\r\n\r\n\tgetElement(){\r\n\t\treturn this._column.getElement();\r\n\t}\r\n\r\n\tgetDefinition(){\r\n\t\treturn this._column.getDefinition();\r\n\t}\r\n\r\n\tgetField(){\r\n\t\treturn this._column.getField();\r\n\t}\r\n\r\n\tgetCells(){\r\n\t\tvar cells = [];\r\n\r\n\t\tthis._column.cells.forEach(function(cell){\r\n\t\t\tcells.push(cell.getComponent());\r\n\t\t});\r\n\r\n\t\treturn cells;\r\n\t}\r\n\r\n\tisVisible(){\r\n\t\treturn this._column.visible;\r\n\t}\r\n\r\n\tshow(){\r\n\t\tif(this._column.isGroup){\r\n\t\t\tthis._column.columns.forEach(function(column){\r\n\t\t\t\tcolumn.show();\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tthis._column.show();\r\n\t\t}\r\n\t}\r\n\r\n\thide(){\r\n\t\tif(this._column.isGroup){\r\n\t\t\tthis._column.columns.forEach(function(column){\r\n\t\t\t\tcolumn.hide();\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tthis._column.hide();\r\n\t\t}\r\n\t}\r\n\r\n\ttoggle(){\r\n\t\tif(this._column.visible){\r\n\t\t\tthis.hide();\r\n\t\t}else{\r\n\t\t\tthis.show();\r\n\t\t}\r\n\t}\r\n\r\n\tdelete(){\r\n\t\treturn this._column.delete();\r\n\t}\r\n\r\n\tgetSubColumns(){\r\n\t\tvar output = [];\r\n\r\n\t\tif(this._column.columns.length){\r\n\t\t\tthis._column.columns.forEach(function(column){\r\n\t\t\t\toutput.push(column.getComponent());\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tgetParentColumn(){\r\n\t\treturn this._column.parent instanceof Column ? this._column.parent.getComponent() : false;\r\n\t}\r\n\r\n\t_getSelf(){\r\n\t\treturn this._column;\r\n\t}\r\n\r\n\tscrollTo(){\r\n\t\treturn this._column.table.columnManager.scrollToColumn(this._column);\r\n\t}\r\n\r\n\tgetTable(){\r\n\t\treturn this._column.table;\r\n\t}\r\n\r\n\theaderFilterFocus(){\r\n\t\tif(this._column.table.modExists(\"filter\", true)){\r\n\t\t\tthis._column.table.modules.filter.setHeaderFilterFocus(this._column);\r\n\t\t}\r\n\t}\r\n\r\n\treloadHeaderFilter(){\r\n\t\tif(this._column.table.modExists(\"filter\", true)){\r\n\t\t\tthis._column.table.modules.filter.reloadHeaderFilter(this._column);\r\n\t\t}\r\n\t}\r\n\r\n\tgetHeaderFilterValue(){\r\n\t\tif(this._column.table.modExists(\"filter\", true)){\r\n\t\t\treturn this._column.table.modules.filter.getHeaderFilterValue(this._column);\r\n\t\t}\r\n\t}\r\n\r\n\tsetHeaderFilterValue(value){\r\n\t\tif(this._column.table.modExists(\"filter\", true)){\r\n\t\t\tthis._column.table.modules.filter.setHeaderFilterValue(this._column, value);\r\n\t\t}\r\n\t}\r\n\r\n\tmove(to, after){\r\n\t\tvar toColumn = this._column.table.columnManager.findColumn(to);\r\n\r\n\t\tif(toColumn){\r\n\t\t\tthis._column.table.columnManager.moveColumn(this._column, toColumn, after)\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Move Error - No matching column found:\", toColumn);\r\n\t\t}\r\n\t}\r\n\r\n\tgetNextColumn(){\r\n\t\tvar nextCol = this._column.nextColumn();\r\n\r\n\t\treturn nextCol ? nextCol.getComponent() : false;\r\n\t}\r\n\r\n\tgetPrevColumn(){\r\n\t\tvar prevCol = this._column.prevColumn();\r\n\r\n\t\treturn prevCol ? prevCol.getComponent() : false;\r\n\t}\r\n\r\n\tupdateDefinition(updates){\r\n\t\treturn this._column.updateDefinition(updates);\r\n\t}\r\n\r\n\tgetWidth(){\r\n\t\treturn this._column.getWidth();\r\n\t}\r\n\r\n\tsetWidth(width){\r\n\t\tvar result;\r\n\r\n\t\tif(width === true){\r\n\t\t\tresult = this._column.reinitializeWidth(true);\r\n\t\t}else{\r\n\t\t\tresult = this._column.setWidth(width);\r\n\t\t}\r\n\r\n\t\tif(this._column.table.options.virtualDomHoz){\r\n\t\t\tthis._column.table.vdomHoz.reinitialize(true);\r\n\t\t}\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\tvalidate(){\r\n\t\treturn this._column.validate();\r\n\t}\r\n}","//public cell object\r\nexport default class CellComponent {\r\n\r\n\tconstructor (cell){\r\n\t\tthis._cell = cell;\r\n\t}\r\n\r\n\tgetValue(){\r\n\t\treturn this._cell.getValue();\r\n\t}\r\n\r\n\tgetOldValue(){\r\n\t\treturn this._cell.getOldValue();\r\n\t}\r\n\r\n\tgetInitialValue(){\r\n\t\treturn this._cell.initialValue;\r\n\t}\r\n\r\n\tgetElement(){\r\n\t\treturn this._cell.getElement();\r\n\t}\r\n\r\n\tgetRow(){\r\n\t\treturn this._cell.row.getComponent();\r\n\t}\r\n\r\n\tgetData(){\r\n\t\treturn this._cell.row.getData();\r\n\t}\r\n\r\n\tgetField(){\r\n\t\treturn this._cell.column.getField();\r\n\t}\r\n\r\n\tgetColumn(){\r\n\t\treturn this._cell.column.getComponent();\r\n\t}\r\n\r\n\tsetValue(value, mutate){\r\n\t\tif(typeof mutate == \"undefined\"){\r\n\t\t\tmutate = true;\r\n\t\t}\r\n\r\n\t\tthis._cell.setValue(value, mutate);\r\n\t}\r\n\r\n\trestoreOldValue(){\r\n\t\tthis._cell.setValueActual(this._cell.getOldValue());\r\n\t}\r\n\r\n\trestoreInitialValue(){\r\n\t\tthis._cell.setValueActual(this._cell.initialValue);\r\n\t}\r\n\r\n\tedit(force){\r\n\t\treturn this._cell.edit(force);\r\n\t}\r\n\r\n\tcancelEdit(){\r\n\t\tthis._cell.cancelEdit();\r\n\t}\r\n\r\n\tisEdited(){\r\n\t\treturn !! this._cell.modules.edit && this._cell.modules.edit.edited;\r\n\t}\r\n\r\n\tclearEdited(){\r\n\t\tif(this._cell.table.modExists(\"edit\", true)){\r\n\t\t\tthis._cell.table.modules.edit.clearEdited(this._cell);\r\n\t\t}\r\n\t}\r\n\r\n\tisValid(){\r\n\t\treturn this._cell.modules.validate ? !this._cell.modules.validate.invalid : true;\r\n\t}\r\n\r\n\tvalidate(){\r\n\t\treturn this._cell.validate();\r\n\t}\r\n\r\n\tclearValidation(){\r\n\t\tif(this._cell.table.modExists(\"validate\", true)){\r\n\t\t\tthis._cell.table.modules.validate.clearValidation(this._cell);\r\n\t\t}\r\n\t}\r\n\r\n\tnav(){\r\n\t\treturn this._cell.nav();\r\n\t}\r\n\r\n\tcheckHeight(){\r\n\t\tthis._cell.checkHeight();\r\n\t}\r\n\r\n\tgetTable(){\r\n\t\treturn this._cell.table;\r\n\t}\r\n\r\n\t_getSelf(){\r\n\t\treturn this._cell;\r\n\t}\r\n}","import CellComponent from './CellComponent.js';\r\n\r\nexport default class Cell {\r\n\tconstructor(column, row){\r\n\t\tthis.table = column.table;\r\n\t\tthis.column = column;\r\n\t\tthis.row = row;\r\n\t\tthis.element = null;\r\n\t\tthis.value = null;\r\n\t\tthis.initialValue;\r\n\t\tthis.oldValue = null;\r\n\t\tthis.modules = {};\r\n\r\n\t\tthis.height = null;\r\n\t\tthis.width = null;\r\n\t\tthis.minWidth = null;\r\n\r\n\t\tthis.component = null;\r\n\r\n\t\tthis.loaded = false; //track if the cell has been added to the DOM yet\r\n\r\n\t\tthis.build();\r\n\t}\r\n\r\n\t//////////////// Setup Functions /////////////////\r\n\t//generate element\r\n\tbuild(){\r\n\t\tthis.generateElement();\r\n\r\n\t\tthis.setWidth();\r\n\r\n\t\tthis._configureCell();\r\n\r\n\t\tthis.setValueActual(this.column.getFieldValue(this.row.data));\r\n\r\n\t\tthis.initialValue = this.value;\r\n\t}\r\n\r\n\tgenerateElement(){\r\n\t\tthis.element = document.createElement('div');\r\n\t\tthis.element.className = \"tabulator-cell\";\r\n\t\tthis.element.setAttribute(\"role\", \"gridcell\");\r\n\t\tthis.element = this.element;\r\n\t}\r\n\r\n\t_configureCell(){\r\n\t\tvar cellEvents = this.column.cellEvents,\r\n\t\telement = this.element,\r\n\t\tfield = this.column.getField(),\r\n\t\tvertAligns = {\r\n\t\t\ttop:\"flex-start\",\r\n\t\t\tbottom:\"flex-end\",\r\n\t\t\tmiddle:\"center\",\r\n\t\t},\r\n\t\thozAligns = {\r\n\t\t\tleft:\"flex-start\",\r\n\t\t\tright:\"flex-end\",\r\n\t\t\tcenter:\"center\",\r\n\t\t};\r\n\r\n\t\t//set text alignment\r\n\t\telement.style.textAlign = this.column.hozAlign;\r\n\r\n\t\tif(this.column.vertAlign){\r\n\t\t\telement.style.display = \"inline-flex\";\r\n\r\n\t\t\telement.style.alignItems = vertAligns[this.column.vertAlign] || \"\";\r\n\r\n\t\t\tif(this.column.hozAlign){\r\n\t\t\t\telement.style.justifyContent = hozAligns[this.column.hozAlign] || \"\";\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(field){\r\n\t\t\telement.setAttribute(\"tabulator-field\", field);\r\n\t\t}\r\n\r\n\t\t//add class to cell if needed\r\n\t\tif(this.column.definition.cssClass){\r\n\t\t\tvar classNames = this.column.definition.cssClass.split(\" \")\r\n\t\t\tclassNames.forEach((className) => {\r\n\t\t\t\telement.classList.add(className)\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\t//update tooltip on mouse enter\r\n\t\tif (this.table.options.tooltipGenerationMode === \"hover\"){\r\n\t\t\telement.addEventListener(\"mouseenter\", (e) => {\r\n\t\t\t\tthis._generateTooltip();\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tthis._bindClickEvents(cellEvents);\r\n\r\n\t\tthis._bindTouchEvents(cellEvents);\r\n\r\n\t\tthis._bindMouseEvents(cellEvents);\r\n\r\n\t\tif(this.column.modules.edit){\r\n\t\t\tthis.table.modules.edit.bindEditor(this);\r\n\t\t}\r\n\r\n\t\tif(this.column.definition.rowHandle && this.table.options.movableRows !== false && this.table.modExists(\"moveRow\")){\r\n\t\t\tthis.table.modules.moveRow.initializeCell(this);\r\n\t\t}\r\n\r\n\t\t//hide cell if not visible\r\n\t\tif(!this.column.visible){\r\n\t\t\tthis.hide();\r\n\t\t}\r\n\t}\r\n\r\n\t_bindClickEvents(cellEvents){\r\n\t\tvar element = this.element;\r\n\r\n\t\t//set event bindings\r\n\t\tif (cellEvents.cellClick || this.table.options.cellClick){\r\n\t\t\telement.addEventListener(\"click\", (e) => {\r\n\t\t\t\tvar component = this.getComponent();\r\n\r\n\t\t\t\tif(cellEvents.cellClick){\r\n\t\t\t\t\tcellEvents.cellClick.call(this.table, e, component);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(this.table.options.cellClick){\r\n\t\t\t\t\tthis.table.options.cellClick.call(this.table, e, component);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif (cellEvents.cellDblClick || this.table.options.cellDblClick){\r\n\t\t\telement.addEventListener(\"dblclick\", (e) => {\r\n\t\t\t\tvar component = this.getComponent();\r\n\r\n\t\t\t\tif(cellEvents.cellDblClick){\r\n\t\t\t\t\tcellEvents.cellDblClick.call(this.table, e, component);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(this.table.options.cellDblClick){\r\n\t\t\t\t\tthis.table.options.cellDblClick.call(this.table, e, component);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\telement.addEventListener(\"dblclick\", (e) => {\r\n\t\t\t\tif(this.table.modExists(\"edit\")){\r\n\t\t\t\t\tif (this.table.modules.edit.currentCell === this){\r\n\t\t\t\t\t\treturn; //prevent instant selection of editor content\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\te.preventDefault();\r\n\r\n\t\t\t\ttry{\r\n\t\t\t\t\tif (document.selection) { // IE\r\n\t\t\t\t\t\tvar range = document.body.createTextRange();\r\n\t\t\t\t\t\trange.moveToElementText(this.element);\r\n\t\t\t\t\t\trange.select();\r\n\t\t\t\t\t} else if (window.getSelection) {\r\n\t\t\t\t\t\tvar range = document.createRange();\r\n\t\t\t\t\t\trange.selectNode(this.element);\r\n\t\t\t\t\t\twindow.getSelection().removeAllRanges();\r\n\t\t\t\t\t\twindow.getSelection().addRange(range);\r\n\t\t\t\t\t}\r\n\t\t\t\t}catch(e){}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif (cellEvents.cellContext || this.table.options.cellContext){\r\n\t\t\telement.addEventListener(\"contextmenu\", (e) => {\r\n\t\t\t\tvar component = this.getComponent();\r\n\r\n\t\t\t\tif(cellEvents.cellContext){\r\n\t\t\t\t\tcellEvents.cellContext.call(this.table, e, component);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(this.table.options.cellContext){\r\n\t\t\t\t\tthis.table.options.cellContext.call(this.table, e, component);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\t_bindMouseEvents(cellEvents){\r\n\t\tvar element = this.element;\r\n\r\n\t\tif (cellEvents.cellMouseEnter || this.table.options.cellMouseEnter){\r\n\t\t\telement.addEventListener(\"mouseenter\", (e) => {\r\n\t\t\t\tvar component = this.getComponent();\r\n\r\n\t\t\t\tif(cellEvents.cellMouseEnter){\r\n\t\t\t\t\tcellEvents.cellMouseEnter.call(this.table, e, component);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(this.table.options.cellMouseEnter){\r\n\t\t\t\t\tthis.table.options.cellMouseEnter.call(this.table, e, component);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif (cellEvents.cellMouseLeave || this.table.options.cellMouseLeave){\r\n\t\t\telement.addEventListener(\"mouseleave\", (e) => {\r\n\t\t\t\tvar component = this.getComponent();\r\n\r\n\t\t\t\tif(cellEvents.cellMouseLeave){\r\n\t\t\t\t\tcellEvents.cellMouseLeave.call(this.table, e, component);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(this.table.options.cellMouseLeave){\r\n\t\t\t\t\tthis.table.options.cellMouseLeave.call(this.table, e, component);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif (cellEvents.cellMouseOver || this.table.options.cellMouseOver){\r\n\t\t\telement.addEventListener(\"mouseover\", (e) => {\r\n\t\t\t\tvar component = this.getComponent();\r\n\r\n\t\t\t\tif(cellEvents.cellMouseOver){\r\n\t\t\t\t\tcellEvents.cellMouseOver.call(this.table, e, component);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(this.table.options.cellMouseOver){\r\n\t\t\t\t\tthis.table.options.cellMouseOver.call(this.table, e, component);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif (cellEvents.cellMouseOut || this.table.options.cellMouseOut){\r\n\t\t\telement.addEventListener(\"mouseout\", (e) => {\r\n\t\t\t\tvar component = this.getComponent();\r\n\r\n\t\t\t\tif(cellEvents.cellMouseOut){\r\n\t\t\t\t\tcellEvents.cellMouseOut.call(this.table, e, component);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(this.table.options.cellMouseOut){\r\n\t\t\t\t\tthis.table.options.cellMouseOut.call(this.table, e, component);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif (cellEvents.cellMouseMove || this.table.options.cellMouseMove){\r\n\t\t\telement.addEventListener(\"mousemove\", (e) => {\r\n\t\t\t\tvar component = this.getComponent();\r\n\r\n\t\t\t\tif(cellEvents.cellMouseMove){\r\n\t\t\t\t\tcellEvents.cellMouseMove.call(this.table, e, component);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(this.table.options.cellMouseMove){\r\n\t\t\t\t\tthis.table.options.cellMouseMove.call(this.table, e, component);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\t_bindTouchEvents(cellEvents){\r\n\t\tvar element = this.element,\r\n\t\tdblTap,\ttapHold, tap;\r\n\r\n\t\tif (cellEvents.cellTap || this.table.options.cellTap){\r\n\t\t\ttap = false;\r\n\r\n\t\t\telement.addEventListener(\"touchstart\", (e) => {\r\n\t\t\t\ttap = true;\r\n\t\t\t}, {passive: true});\r\n\r\n\t\t\telement.addEventListener(\"touchend\", (e) => {\r\n\t\t\t\tif(tap){\r\n\t\t\t\t\tvar component = this.getComponent();\r\n\r\n\t\t\t\t\tif(cellEvents.cellTap){\r\n\t\t\t\t\t\tcellEvents.cellTap.call(this.table, e, component);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif(this.table.options.cellTap){\r\n\t\t\t\t\t\tthis.table.options.cellTap.call(this.table, e, component);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\ttap = false;\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif (cellEvents.cellDblTap || this.table.options.cellDblTap){\r\n\t\t\tdblTap = null;\r\n\r\n\t\t\telement.addEventListener(\"touchend\", (e) => {\r\n\t\t\t\tif(dblTap){\r\n\t\t\t\t\tclearTimeout(dblTap);\r\n\t\t\t\t\tdblTap = null;\r\n\r\n\t\t\t\t\tvar component = this.getComponent();\r\n\r\n\t\t\t\t\tif(cellEvents.cellDblTap){\r\n\t\t\t\t\t\tcellEvents.cellDblTap.call(this.table, e, component);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif(this.table.options.cellDblTap){\r\n\t\t\t\t\t\tthis.table.options.cellDblTap.call(this.table, e, component);\r\n\t\t\t\t\t}\r\n\t\t\t\t}else{\r\n\r\n\t\t\t\t\tdblTap = setTimeout(() => {\r\n\t\t\t\t\t\tclearTimeout(dblTap);\r\n\t\t\t\t\t\tdblTap = null;\r\n\t\t\t\t\t}, 300);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif (cellEvents.cellTapHold || this.table.options.cellTapHold){\r\n\t\t\ttapHold = null;\r\n\r\n\t\t\telement.addEventListener(\"touchstart\", (e) => {\r\n\t\t\t\tclearTimeout(tapHold);\r\n\r\n\t\t\t\ttapHold = setTimeout(() => {\r\n\t\t\t\t\tclearTimeout(tapHold);\r\n\t\t\t\t\ttapHold = null;\r\n\t\t\t\t\ttap = false;\r\n\t\t\t\t\tvar component = this.getComponent();\r\n\r\n\t\t\t\t\tif(cellEvents.cellTapHold){\r\n\t\t\t\t\t\tcellEvents.cellTapHold.call(this.table, e, component);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif(this.table.options.cellTapHold){\r\n\t\t\t\t\t\tthis.table.options.cellTapHold.call(this.table, e, component);\r\n\t\t\t\t\t}\r\n\t\t\t\t}, 1000);\r\n\r\n\t\t\t}, {passive: true});\r\n\r\n\t\t\telement.addEventListener(\"touchend\", (e) => {\r\n\t\t\t\tclearTimeout(tapHold);\r\n\t\t\t\ttapHold = null;\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\t//generate cell contents\r\n\t_generateContents(){\r\n\t\tvar val;\r\n\r\n\t\tif(this.table.modExists(\"format\")){\r\n\t\t\tval = this.table.modules.format.formatValue(this);\r\n\t\t}else{\r\n\t\t\tval = this.element.innerHTML = this.value;\r\n\t\t}\r\n\r\n\t\tswitch(typeof val){\r\n\t\t\tcase \"object\":\r\n\t\t\tif(val instanceof Node){\r\n\r\n\t\t\t\t//clear previous cell contents\r\n\t\t\t\twhile(this.element.firstChild) this.element.removeChild(this.element.firstChild);\r\n\r\n\t\t\t\tthis.element.appendChild(val);\r\n\t\t\t}else{\r\n\t\t\t\tthis.element.innerHTML = \"\";\r\n\r\n\t\t\t\tif(val != null){\r\n\t\t\t\t\tconsole.warn(\"Format Error - Formatter has returned a type of object, the only valid formatter object return is an instance of Node, the formatter returned:\", val);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\t\t\tcase \"undefined\":\r\n\t\t\tcase \"null\":\r\n\t\t\tthis.element.innerHTML = \"\";\r\n\t\t\tbreak;\r\n\t\t\tdefault:\r\n\t\t\tthis.element.innerHTML = val;\r\n\t\t}\r\n\t}\r\n\r\n\tcellRendered(){\r\n\t\tif(this.table.modExists(\"format\") && this.table.modules.format.cellRendered){\r\n\t\t\tthis.table.modules.format.cellRendered(this);\r\n\t\t}\r\n\t}\r\n\r\n\t//generate tooltip text\r\n\t_generateTooltip(){\r\n\t\tvar tooltip = this.column.tooltip;\r\n\r\n\t\tif(tooltip){\r\n\t\t\tif(tooltip === true){\r\n\t\t\t\ttooltip = this.value;\r\n\t\t\t}else if(typeof(tooltip) == \"function\"){\r\n\t\t\t\ttooltip = tooltip(this.getComponent());\r\n\r\n\t\t\t\tif(tooltip === false){\r\n\t\t\t\t\ttooltip = \"\";\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif(typeof tooltip === \"undefined\"){\r\n\t\t\t\ttooltip = \"\";\r\n\t\t\t}\r\n\r\n\t\t\tthis.element.setAttribute(\"title\", tooltip);\r\n\t\t}else{\r\n\t\t\tthis.element.setAttribute(\"title\", \"\");\r\n\t\t}\r\n\t}\r\n\r\n\t//////////////////// Getters ////////////////////\r\n\tgetElement(containerOnly){\r\n\t\tif(!this.loaded){\r\n\t\t\tthis.loaded = true;\r\n\t\t\tif(!containerOnly){\r\n\t\t\t\tthis.layoutElement();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this.element;\r\n\t}\r\n\r\n\tgetValue(){\r\n\t\treturn this.value;\r\n\t}\r\n\r\n\tgetOldValue(){\r\n\t\treturn this.oldValue;\r\n\t}\r\n\r\n\t//////////////////// Actions ////////////////////\r\n\tsetValue(value, mutate){\r\n\t\tvar changed = this.setValueProcessData(value, mutate),\r\n\t\tcomponent;\r\n\r\n\t\tif(changed){\r\n\t\t\tif(this.table.options.history && this.table.modExists(\"history\")){\r\n\t\t\t\tthis.table.modules.history.action(\"cellEdit\", this, {oldValue:this.oldValue, newValue:this.value});\r\n\t\t\t}\r\n\r\n\t\t\tcomponent = this.getComponent();\r\n\r\n\t\t\tif(this.column.cellEvents.cellEdited){\r\n\t\t\t\tthis.column.cellEvents.cellEdited.call(this.table, component);\r\n\t\t\t}\r\n\r\n\t\t\tif(this.table.options.groupUpdateOnCellEdit && this.table.options.groupBy && this.table.modExists(\"groupRows\")) {\r\n\t\t\t\tthis.table.modules.groupRows.reassignRowToGroup(this.row);\r\n\t\t\t}\r\n\r\n\t\t\tthis.cellRendered();\r\n\r\n\t\t\tthis.table.options.cellEdited.call(this.table, component);\r\n\r\n\t\t\tif(this.table.options.dataChanged){\r\n\t\t\t\tthis.table.options.dataChanged.call(this.table, this.table.rowManager.getData());\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tsetValueProcessData(value, mutate){\r\n\t\tvar changed = false;\r\n\r\n\t\tif(this.value != value){\r\n\r\n\t\t\tchanged = true;\r\n\r\n\t\t\tif(mutate){\r\n\t\t\t\tif(this.column.modules.mutate){\r\n\t\t\t\t\tvalue = this.table.modules.mutator.transformCell(this, value);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.setValueActual(value);\r\n\r\n\t\tif(changed && this.table.modExists(\"columnCalcs\")){\r\n\t\t\tif(this.column.definition.topCalc || this.column.definition.bottomCalc){\r\n\t\t\t\tif(this.table.options.groupBy && this.table.modExists(\"groupRows\")){\r\n\r\n\t\t\t\t\tif(this.table.options.columnCalcs == \"table\" || this.table.options.columnCalcs == \"both\"){\r\n\t\t\t\t\t\tthis.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif(this.table.options.columnCalcs != \"table\"){\r\n\t\t\t\t\t\tthis.table.modules.columnCalcs.recalcRowGroup(this.row);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}else{\r\n\t\t\t\t\tthis.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn changed;\r\n\t}\r\n\r\n\tsetValueActual(value){\r\n\t\tthis.oldValue = this.value;\r\n\r\n\t\tthis.value = value;\r\n\r\n\t\tif(this.table.options.reactiveData && this.table.modExists(\"reactiveData\")){\r\n\t\t\tthis.table.modules.reactiveData.block();\r\n\t\t}\r\n\r\n\t\tthis.column.setFieldValue(this.row.data, value);\r\n\r\n\t\tif(this.table.options.reactiveData && this.table.modExists(\"reactiveData\")){\r\n\t\t\tthis.table.modules.reactiveData.unblock();\r\n\t\t}\r\n\r\n\t\tif(this.loaded){\r\n\t\t\tthis.layoutElement();\r\n\t\t}\r\n\t}\r\n\r\n\tlayoutElement(){\r\n\t\tthis._generateContents();\r\n\t\tthis._generateTooltip();\r\n\r\n\t\t//set resizable handles\r\n\t\tif(this.table.options.resizableColumns && this.table.modExists(\"resizeColumns\") && this.row.type === \"row\"){\r\n\t\t\tthis.table.modules.resizeColumns.initializeColumn(\"cell\", this.column, this.element);\r\n\t\t}\r\n\r\n\r\n\t\tif((this.column.definition.contextMenu || this.column.definition.clickMenu) && this.table.modExists(\"menu\")){\r\n\t\t\tthis.table.modules.menu.initializeCell(this);\r\n\t\t}\r\n\r\n\t\t//handle frozen cells\r\n\t\tif(this.table.modExists(\"frozenColumns\")){\r\n\t\t\tthis.table.modules.frozenColumns.layoutElement(this.element, this.column);\r\n\t\t}\r\n\t}\r\n\r\n\tsetWidth(){\r\n\t\tthis.width = this.column.width;\r\n\t\tthis.element.style.width = this.column.widthStyled;\r\n\t}\r\n\r\n\tclearWidth(){\r\n\t\tthis.width = \"\";\r\n\t\tthis.element.style.width = \"\";\r\n\t}\r\n\r\n\tgetWidth(){\r\n\t\treturn this.width || this.element.offsetWidth;\r\n\t}\r\n\r\n\tsetMinWidth(){\r\n\t\tthis.minWidth = this.column.minWidth;\r\n\t\tthis.element.style.minWidth = this.column.minWidthStyled;\r\n\t}\r\n\r\n\tsetMaxWidth(){\r\n\t\tthis.maxWidth = this.column.maxWidth;\r\n\t\tthis.element.style.maxWidth = this.column.maxWidthStyled;\r\n\t}\r\n\r\n\tcheckHeight(){\r\n\t\t// var height = this.element.css(\"height\");\r\n\t\tthis.row.reinitializeHeight();\r\n\t}\r\n\r\n\tclearHeight(){\r\n\t\tthis.element.style.height = \"\";\r\n\t\tthis.height = null;\r\n\t}\r\n\r\n\tsetHeight(){\r\n\t\tthis.height = this.row.height;\r\n\t\tthis.element.style.height = this.row.heightStyled;\r\n\t}\r\n\r\n\tgetHeight(){\r\n\t\treturn this.height || this.element.offsetHeight;\r\n\t}\r\n\r\n\tshow(){\r\n\t\tthis.element.style.display = this.column.vertAlign ? \"inline-flex\" : \"\";\r\n\t}\r\n\r\n\thide(){\r\n\t\tthis.element.style.display = \"none\";\r\n\t}\r\n\r\n\tedit(force){\r\n\t\tif(this.table.modExists(\"edit\", true)){\r\n\t\t\treturn this.table.modules.edit.editCell(this, force);\r\n\t\t}\r\n\t}\r\n\r\n\tcancelEdit(){\r\n\t\tif(this.table.modExists(\"edit\", true)){\r\n\t\t\tvar editing = this.table.modules.edit.getCurrentCell();\r\n\r\n\t\t\tif(editing && editing._getSelf() === this){\r\n\t\t\t\tthis.table.modules.edit.cancelEdit();\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Cancel Editor Error - This cell is not currently being edited \");\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tvalidate(){\r\n\t\tif(this.column.modules.validate && this.table.modExists(\"validate\", true)){\r\n\t\t\tvar valid = this.table.modules.validate.validate(this.column.modules.validate, this, this.getValue());\r\n\r\n\t\t\treturn valid === true;\r\n\t\t}else{\r\n\t\t\treturn true;\r\n\t\t}\r\n\t}\r\n\r\n\tdelete(){\r\n\t\tif(!this.table.rowManager.redrawBlock && this.element.parentNode){\r\n\t\t\tthis.element.parentNode.removeChild(this.element);\r\n\t\t}\r\n\r\n\t\tif(this.modules.validate && this.modules.validate.invalid){\r\n\t\t\tthis.table.modules.validate.clearValidation(this);\r\n\t\t}\r\n\r\n\t\tif(this.modules.edit && this.modules.edit.edited){\r\n\t\t\tthis.table.modules.edit.clearEdited(this);\r\n\t\t}\r\n\r\n\t\tif(this.table.options.history){\r\n\t\t\tthis.table.modules.history.clearComponentHistory(this);\r\n\t\t}\r\n\r\n\t\tthis.element = false;\r\n\t\tthis.column.deleteCell(this);\r\n\t\tthis.row.deleteCell(this);\r\n\t\tthis.calcs = {};\r\n\t}\r\n\r\n\t//////////////// Navigation /////////////////\r\n\tnav(){\r\n\t\tvar self = this,\r\n\t\tnextCell = false,\r\n\t\tindex = this.row.getCellIndex(this);\r\n\r\n\t\treturn {\r\n\t\t\tnext:function(){\r\n\t\t\t\tvar nextCell = this.right(),\r\n\t\t\t\tnextRow;\r\n\r\n\t\t\t\tif(!nextCell){\r\n\t\t\t\t\tnextRow = self.table.rowManager.nextDisplayRow(self.row, true);\r\n\r\n\t\t\t\t\tif(nextRow){\r\n\t\t\t\t\t\tnextCell = nextRow.findNextEditableCell(-1);\r\n\r\n\t\t\t\t\t\tif(nextCell){\r\n\t\t\t\t\t\t\tnextCell.edit();\r\n\t\t\t\t\t\t\treturn true;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}else{\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn false;\r\n\t\t\t},\r\n\t\t\tprev:function(){\r\n\t\t\t\tvar nextCell = this.left(),\r\n\t\t\t\tprevRow;\r\n\r\n\t\t\t\tif(!nextCell){\r\n\t\t\t\t\tprevRow = self.table.rowManager.prevDisplayRow(self.row, true);\r\n\r\n\t\t\t\t\tif(prevRow){\r\n\t\t\t\t\t\tnextCell = prevRow.findPrevEditableCell(prevRow.cells.length);\r\n\r\n\t\t\t\t\t\tif(nextCell){\r\n\t\t\t\t\t\t\tnextCell.edit();\r\n\t\t\t\t\t\t\treturn true;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}else{\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn false;\r\n\t\t\t},\r\n\t\t\tleft:function(){\r\n\r\n\t\t\t\tnextCell = self.row.findPrevEditableCell(index);\r\n\r\n\t\t\t\tif(nextCell){\r\n\t\t\t\t\tnextCell.edit();\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t}else{\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tright:function(){\r\n\t\t\t\tnextCell = self.row.findNextEditableCell(index);\r\n\r\n\t\t\t\tif(nextCell){\r\n\t\t\t\t\tnextCell.edit();\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t}else{\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tup:function(){\r\n\t\t\t\tvar nextRow = self.table.rowManager.prevDisplayRow(self.row, true);\r\n\r\n\t\t\t\tif(nextRow){\r\n\t\t\t\t\tnextRow.cells[index].edit();\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tdown:function(){\r\n\t\t\t\tvar nextRow = self.table.rowManager.nextDisplayRow(self.row, true);\r\n\r\n\t\t\t\tif(nextRow){\r\n\t\t\t\t\tnextRow.cells[index].edit();\r\n\t\t\t\t}\r\n\t\t\t},\r\n\r\n\t\t};\r\n\t}\r\n\r\n\tgetIndex(){\r\n\t\tthis.row.getCellIndex(this);\r\n\t}\r\n\r\n\t//////////////// Object Generation /////////////////\r\n\tgetComponent(){\r\n\t\tif(!this.component){\r\n\t\t\tthis.component = new CellComponent(this);\r\n\t\t}\r\n\r\n\t\treturn this.component;\r\n\t}\r\n}","import ColumnComponent from './ColumnComponent.js';\r\nimport defaultOptions from './defaults/options.js';\r\n\r\nimport Cell from '../cell/Cell.js';\r\n\r\nclass Column {\r\n\r\n\tconstructor(def, parent){\r\n\t\tthis.table = parent.table;\r\n\t\tthis.definition = def; //column definition\r\n\t\tthis.parent = parent; //hold parent object\r\n\t\tthis.type = \"column\"; //type of element\r\n\t\tthis.columns = []; //child columns\r\n\t\tthis.cells = []; //cells bound to this column\r\n\t\tthis.element = this.createElement(); //column header element\r\n\t\tthis.contentElement = false;\r\n\t\tthis.titleHolderElement = false;\r\n\t\tthis.titleElement = false;\r\n\t\tthis.groupElement = this.createGroupElement(); //column group holder element\r\n\t\tthis.isGroup = false;\r\n\t\tthis.tooltip = false; //hold column tooltip\r\n\t\tthis.hozAlign = \"\"; //horizontal text alignment\r\n\t\tthis.vertAlign = \"\"; //vert text alignment\r\n\r\n\t\t//multi dimensional filed handling\r\n\t\tthis.field =\"\";\r\n\t\tthis.fieldStructure = \"\";\r\n\t\tthis.getFieldValue = \"\";\r\n\t\tthis.setFieldValue = \"\";\r\n\r\n\t\tthis.titleFormatterRendered = false;\r\n\r\n\t\tthis.mapDefinitionDefaults();\r\n\r\n\t\tthis.setField(this.definition.field);\r\n\r\n\t\tif(this.table.options.invalidOptionWarnings){\r\n\t\t\tthis.checkDefinition();\r\n\t\t}\r\n\r\n\t\tthis.modules = {}; //hold module variables;\r\n\r\n\t\tthis.cellEvents = {\r\n\t\t\tcellClick:false,\r\n\t\t\tcellDblClick:false,\r\n\t\t\tcellContext:false,\r\n\t\t\tcellTap:false,\r\n\t\t\tcellDblTap:false,\r\n\t\t\tcellTapHold:false,\r\n\t\t\tcellMouseEnter:false,\r\n\t\t\tcellMouseLeave:false,\r\n\t\t\tcellMouseOver:false,\r\n\t\t\tcellMouseOut:false,\r\n\t\t\tcellMouseMove:false,\r\n\t\t};\r\n\r\n\t\tthis.width = null; //column width\r\n\t\tthis.widthStyled = \"\"; //column width prestyled to improve render efficiency\r\n\t\tthis.maxWidth = null; //column maximum width\r\n\t\tthis.maxWidthStyled = \"\"; //column maximum prestyled to improve render efficiency\r\n\t\tthis.minWidth = null; //column minimum width\r\n\t\tthis.minWidthStyled = \"\"; //column minimum prestyled to improve render efficiency\r\n\t\tthis.widthFixed = false; //user has specified a width for this column\r\n\r\n\t\tthis.visible = true; //default visible state\r\n\r\n\t\tthis.component = null;\r\n\r\n\t\tthis._mapDepricatedFunctionality();\r\n\r\n\t\t//initialize column\r\n\t\tif(def.columns){\r\n\r\n\t\t\tthis.isGroup = true;\r\n\r\n\t\t\tdef.columns.forEach((def, i) => {\r\n\t\t\t\tvar newCol = new Column(def, this);\r\n\t\t\t\tthis.attachColumn(newCol);\r\n\t\t\t});\r\n\r\n\t\t\tthis.checkColumnVisibility();\r\n\t\t}else{\r\n\t\t\tparent.registerColumnField(this);\r\n\t\t}\r\n\r\n\t\tif(def.rowHandle && this.table.options.movableRows !== false && this.table.modExists(\"moveRow\")){\r\n\t\t\tthis.table.modules.moveRow.setHandle(true);\r\n\t\t}\r\n\r\n\t\tthis._buildHeader();\r\n\r\n\t\tthis.bindModuleColumns();\r\n\t}\r\n\r\n\tcreateElement (){\r\n\t\tvar el = document.createElement(\"div\");\r\n\r\n\t\tel.classList.add(\"tabulator-col\");\r\n\t\tel.setAttribute(\"role\", \"columnheader\");\r\n\t\tel.setAttribute(\"aria-sort\", \"none\");\r\n\r\n\t\treturn el;\r\n\t}\r\n\r\n\tcreateGroupElement (){\r\n\t\tvar el = document.createElement(\"div\");\r\n\r\n\t\tel.classList.add(\"tabulator-col-group-cols\");\r\n\r\n\t\treturn el;\r\n\t}\r\n\r\n\tmapDefinitionDefaults(){\r\n\t\tvar defaults = this.table.options.columnDefaults;\r\n\r\n\t\tif(defaults){\r\n\t\t\tfor(let key in defaults){\r\n\t\t\t\tif(typeof this.definition[key] === \"undefined\"){\r\n\t\t\t\t\tthis.definition[key] = defaults[key];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tcheckDefinition(){\r\n\t\tObject.keys(this.definition).forEach((key) => {\r\n\t\t\tif(Column.defaultOptionList.indexOf(key) === -1){\r\n\t\t\t\tconsole.warn(\"Invalid column definition option in '\" + (this.field || this.definition.title) + \"' column:\", key)\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tsetField(field){\r\n\t\tthis.field = field;\r\n\t\tthis.fieldStructure = field ? (this.table.options.nestedFieldSeparator ? field.split(this.table.options.nestedFieldSeparator) : [field]) : [];\r\n\t\tthis.getFieldValue = this.fieldStructure.length > 1 ? this._getNestedData : this._getFlatData;\r\n\t\tthis.setFieldValue = this.fieldStructure.length > 1 ? this._setNestedData : this._setFlatData;\r\n\t}\r\n\r\n\t//register column position with column manager\r\n\tregisterColumnPosition(column){\r\n\t\tthis.parent.registerColumnPosition(column);\r\n\t}\r\n\r\n\t//register column position with column manager\r\n\tregisterColumnField(column){\r\n\t\tthis.parent.registerColumnField(column);\r\n\t}\r\n\r\n\t//trigger position registration\r\n\treRegisterPosition(){\r\n\t\tif(this.isGroup){\r\n\t\t\tthis.columns.forEach(function(column){\r\n\t\t\t\tcolumn.reRegisterPosition();\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tthis.registerColumnPosition(this);\r\n\t\t}\r\n\t}\r\n\r\n\t_mapDepricatedFunctionality(){\r\n\t\t//all previously deprecated functionality removed in the 5.0 release\r\n\t}\r\n\r\n\tsetTooltip(){\r\n\t\tvar def = this.definition;\r\n\r\n\t\t//set header tooltips\r\n\t\tvar tooltip = def.headerTooltip || def.tooltip === false ? def.headerTooltip : this.table.options.tooltipsHeader;\r\n\r\n\t\tif(tooltip){\r\n\t\t\tif(tooltip === true){\r\n\t\t\t\tif(def.field){\r\n\t\t\t\t\tthis.table.modules.localize.bind(\"columns|\" + def.field, (value) => {\r\n\t\t\t\t\t\tthis.element.setAttribute(\"title\", value || def.title);\r\n\t\t\t\t\t});\r\n\t\t\t\t}else{\r\n\t\t\t\t\tthis.element.setAttribute(\"title\", def.title);\r\n\t\t\t\t}\r\n\r\n\t\t\t}else{\r\n\t\t\t\tif(typeof(tooltip) == \"function\"){\r\n\t\t\t\t\ttooltip = tooltip(this.getComponent());\r\n\r\n\t\t\t\t\tif(tooltip === false){\r\n\t\t\t\t\t\ttooltip = \"\";\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.element.setAttribute(\"title\", tooltip);\r\n\t\t\t}\r\n\r\n\t\t}else{\r\n\t\t\tthis.element.setAttribute(\"title\", \"\");\r\n\t\t}\r\n\t}\r\n\r\n\t//build header element\r\n\t_buildHeader(){\r\n\t\tvar def = this.definition;\r\n\r\n\t\twhile(this.element.firstChild) this.element.removeChild(this.element.firstChild);\r\n\r\n\t\tif(def.headerVertical){\r\n\t\t\tthis.element.classList.add(\"tabulator-col-vertical\");\r\n\r\n\t\t\tif(def.headerVertical === \"flip\"){\r\n\t\t\t\tthis.element.classList.add(\"tabulator-col-vertical-flip\");\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.contentElement = this._bindEvents();\r\n\r\n\t\tthis.contentElement = this._buildColumnHeaderContent();\r\n\r\n\t\tthis.element.appendChild(this.contentElement);\r\n\r\n\t\tif(this.isGroup){\r\n\t\t\tthis._buildGroupHeader();\r\n\t\t}else{\r\n\t\t\tthis._buildColumnHeader();\r\n\t\t}\r\n\r\n\t\tthis.setTooltip();\r\n\r\n\t\t//set resizable handles\r\n\t\tif(this.table.options.resizableColumns && this.table.modExists(\"resizeColumns\")){\r\n\t\t\tthis.table.modules.resizeColumns.initializeColumn(\"header\", this, this.element);\r\n\t\t}\r\n\r\n\t\t//set resizable handles\r\n\t\tif(def.headerFilter && this.table.modExists(\"filter\") && this.table.modExists(\"edit\")){\r\n\t\t\tif(typeof def.headerFilterPlaceholder !== \"undefined\" && def.field){\r\n\t\t\t\tthis.table.modules.localize.setHeaderFilterColumnPlaceholder(def.field, def.headerFilterPlaceholder);\r\n\t\t\t}\r\n\r\n\t\t\tthis.table.modules.filter.initializeColumn(this);\r\n\t\t}\r\n\r\n\r\n\t\t//set resizable handles\r\n\t\tif(this.table.modExists(\"frozenColumns\")){\r\n\t\t\tthis.table.modules.frozenColumns.initializeColumn(this);\r\n\t\t}\r\n\r\n\t\t//set movable column\r\n\t\tif(this.table.options.movableColumns && !this.isGroup && this.table.modExists(\"moveColumn\")){\r\n\t\t\tthis.table.modules.moveColumn.initializeColumn(this);\r\n\t\t}\r\n\r\n\t\t//set calcs column\r\n\t\tif((def.topCalc || def.bottomCalc) && this.table.modExists(\"columnCalcs\")){\r\n\t\t\tthis.table.modules.columnCalcs.initializeColumn(this);\r\n\t\t}\r\n\r\n\t\t//handle persistence\r\n\t\tif(this.table.modExists(\"persistence\") && this.table.modules.persistence.config.columns){\r\n\t\t\tthis.table.modules.persistence.initializeColumn(this);\r\n\t\t}\r\n\r\n\r\n\t\t//update header tooltip on mouse enter\r\n\t\tthis.element.addEventListener(\"mouseenter\", (e) => {\r\n\t\t\tthis.setTooltip();\r\n\t\t});\r\n\t}\r\n\r\n\t_bindEvents(){\r\n\t\tvar def = this.definition,\r\n\t\tdblTap,\ttapHold, tap;\r\n\r\n\t\t//setup header click event bindings\r\n\t\tif(typeof(def.headerClick) == \"function\"){\r\n\t\t\tthis.element.addEventListener(\"click\", (e) => {def.headerClick(e, this.getComponent());});\r\n\t\t}\r\n\r\n\t\tif(typeof(def.headerDblClick) == \"function\"){\r\n\t\t\tthis.element.addEventListener(\"dblclick\", (e) => {def.headerDblClick(e, this.getComponent());});\r\n\t\t}\r\n\r\n\t\tif(typeof(def.headerContext) == \"function\"){\r\n\t\t\tthis.element.addEventListener(\"contextmenu\", (e) => {def.headerContext(e, this.getComponent());});\r\n\t\t}\r\n\r\n\t\t//setup header tap event bindings\r\n\t\tif(typeof(def.headerTap) == \"function\"){\r\n\t\t\ttap = false;\r\n\r\n\t\t\tthis.element.addEventListener(\"touchstart\", (e) => {\r\n\t\t\t\ttap = true;\r\n\t\t\t}, {passive: true});\r\n\r\n\t\t\tthis.element.addEventListener(\"touchend\", (e) => {\r\n\t\t\t\tif(tap){\r\n\t\t\t\t\tdef.headerTap(e, this.getComponent());\r\n\t\t\t\t}\r\n\r\n\t\t\t\ttap = false;\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif(typeof(def.headerDblTap) == \"function\"){\r\n\t\t\tdblTap = null;\r\n\r\n\t\t\tthis.element.addEventListener(\"touchend\", (e) => {\r\n\r\n\t\t\t\tif(dblTap){\r\n\t\t\t\t\tclearTimeout(dblTap);\r\n\t\t\t\t\tdblTap = null;\r\n\r\n\t\t\t\t\tdef.headerDblTap(e, this.getComponent());\r\n\t\t\t\t}else{\r\n\r\n\t\t\t\t\tdblTap = setTimeout(() => {\r\n\t\t\t\t\t\tclearTimeout(dblTap);\r\n\t\t\t\t\t\tdblTap = null;\r\n\t\t\t\t\t}, 300);\r\n\t\t\t\t}\r\n\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif(typeof(def.headerTapHold) == \"function\"){\r\n\t\t\ttapHold = null;\r\n\r\n\t\t\tthis.element.addEventListener(\"touchstart\", (e) => {\r\n\t\t\t\tclearTimeout(tapHold);\r\n\r\n\t\t\t\ttapHold = setTimeout(function(){\r\n\t\t\t\t\tclearTimeout(tapHold);\r\n\t\t\t\t\ttapHold = null;\r\n\t\t\t\t\ttap = false;\r\n\t\t\t\t\tdef.headerTapHold(e, this.getComponent());\r\n\t\t\t\t}, 1000);\r\n\r\n\t\t\t}, {passive: true});\r\n\r\n\t\t\tthis.element.addEventListener(\"touchend\", (e) => {\r\n\t\t\t\tclearTimeout(tapHold);\r\n\t\t\t\ttapHold = null;\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\t//store column cell click event bindings\r\n\t\tif(typeof(def.cellClick) == \"function\"){\r\n\t\t\tthis.cellEvents.cellClick = def.cellClick;\r\n\t\t}\r\n\r\n\t\tif(typeof(def.cellDblClick) == \"function\"){\r\n\t\t\tthis.cellEvents.cellDblClick = def.cellDblClick;\r\n\t\t}\r\n\r\n\t\tif(typeof(def.cellContext) == \"function\"){\r\n\t\t\tthis.cellEvents.cellContext = def.cellContext;\r\n\t\t}\r\n\r\n\t\t//store column mouse event bindings\r\n\t\tif(typeof(def.cellMouseEnter) == \"function\"){\r\n\t\t\tthis.cellEvents.cellMouseEnter = def.cellMouseEnter;\r\n\t\t}\r\n\r\n\t\tif(typeof(def.cellMouseLeave) == \"function\"){\r\n\t\t\tthis.cellEvents.cellMouseLeave = def.cellMouseLeave;\r\n\t\t}\r\n\r\n\t\tif(typeof(def.cellMouseOver) == \"function\"){\r\n\t\t\tthis.cellEvents.cellMouseOver = def.cellMouseOver;\r\n\t\t}\r\n\r\n\t\tif(typeof(def.cellMouseOut) == \"function\"){\r\n\t\t\tthis.cellEvents.cellMouseOut = def.cellMouseOut;\r\n\t\t}\r\n\r\n\t\tif(typeof(def.cellMouseMove) == \"function\"){\r\n\t\t\tthis.cellEvents.cellMouseMove = def.cellMouseMove;\r\n\t\t}\r\n\r\n\t\t//setup column cell tap event bindings\r\n\t\tif(typeof(def.cellTap) == \"function\"){\r\n\t\t\tthis.cellEvents.cellTap = def.cellTap;\r\n\t\t}\r\n\r\n\t\tif(typeof(def.cellDblTap) == \"function\"){\r\n\t\t\tthis.cellEvents.cellDblTap = def.cellDblTap;\r\n\t\t}\r\n\r\n\t\tif(typeof(def.cellTapHold) == \"function\"){\r\n\t\t\tthis.cellEvents.cellTapHold = def.cellTapHold;\r\n\t\t}\r\n\r\n\t\t//setup column cell edit callbacks\r\n\t\tif(typeof(def.cellEdited) == \"function\"){\r\n\t\t\tthis.cellEvents.cellEdited = def.cellEdited;\r\n\t\t}\r\n\r\n\t\tif(typeof(def.cellEditing) == \"function\"){\r\n\t\t\tthis.cellEvents.cellEditing = def.cellEditing;\r\n\t\t}\r\n\r\n\t\tif(typeof(def.cellEditCancelled) == \"function\"){\r\n\t\t\tthis.cellEvents.cellEditCancelled = def.cellEditCancelled;\r\n\t\t}\r\n\t}\r\n\r\n\t//build header element for header\r\n\t_buildColumnHeader(){\r\n\t\tvar def = this.definition,\r\n\t\ttable = this.table,\r\n\t\tsortable;\r\n\r\n\t\t//set column sorter\r\n\t\tif(table.modExists(\"sort\")){\r\n\t\t\ttable.modules.sort.initializeColumn(this, this.titleHolderElement);\r\n\t\t}\r\n\r\n\t\t//set column header context menu\r\n\t\tif((def.headerContextMenu || def.headerClickMenu || def.headerMenu) && table.modExists(\"menu\")){\r\n\t\t\ttable.modules.menu.initializeColumnHeader(this);\r\n\t\t}\r\n\r\n\t\t//set column formatter\r\n\t\tif(table.modExists(\"format\")){\r\n\t\t\ttable.modules.format.initializeColumn(this);\r\n\t\t}\r\n\r\n\t\t//set column editor\r\n\t\tif(typeof def.editor != \"undefined\" && table.modExists(\"edit\")){\r\n\t\t\ttable.modules.edit.initializeColumn(this);\r\n\t\t}\r\n\r\n\t\t//set colum validator\r\n\t\tif(typeof def.validator != \"undefined\" && table.modExists(\"validate\")){\r\n\t\t\ttable.modules.validate.initializeColumn(this);\r\n\t\t}\r\n\r\n\r\n\t\t//set column mutator\r\n\t\tif(table.modExists(\"mutator\")){\r\n\t\t\ttable.modules.mutator.initializeColumn(this);\r\n\t\t}\r\n\r\n\t\t//set column accessor\r\n\t\tif(table.modExists(\"accessor\")){\r\n\t\t\ttable.modules.accessor.initializeColumn(this);\r\n\t\t}\r\n\r\n\t\t//set respoviveLayout\r\n\t\tif(typeof table.options.responsiveLayout && table.modExists(\"responsiveLayout\")){\r\n\t\t\ttable.modules.responsiveLayout.initializeColumn(this);\r\n\t\t}\r\n\r\n\t\t//set column visibility\r\n\t\tif(typeof def.visible != \"undefined\"){\r\n\t\t\tif(def.visible){\r\n\t\t\t\tthis.show(true);\r\n\t\t\t}else{\r\n\t\t\t\tthis.hide(true);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//asign additional css classes to column header\r\n\t\tif(def.cssClass){\r\n\t\t\tvar classeNames = def.cssClass.split(\" \");\r\n\t\t\tclasseNames.forEach((className) => {\r\n\t\t\t\tthis.element.classList.add(className);\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif(def.field){\r\n\t\t\tthis.element.setAttribute(\"tabulator-field\", def.field);\r\n\t\t}\r\n\r\n\t\t//set min width if present\r\n\t\tthis.setMinWidth(typeof def.minWidth == \"undefined\" ? this.table.options.columnMinWidth : parseInt(def.minWidth));\r\n\r\n\t\tif(def.maxWidth || this.table.options.columnMaxWidth){\r\n\t\t\tif(def.maxWidth !== false){\r\n\t\t\t\tthis.setMaxWidth(typeof def.maxWidth == \"undefined\" ? this.table.options.columnMaxWidth : parseInt(def.maxWidth));\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.reinitializeWidth();\r\n\r\n\t\t//set tooltip if present\r\n\t\tthis.tooltip = this.definition.tooltip || this.definition.tooltip === false ? this.definition.tooltip : this.table.options.tooltips;\r\n\r\n\t\t//set orizontal text alignment\r\n\t\tthis.hozAlign = typeof(this.definition.hozAlign) == \"undefined\" ? this.table.options.cellHozAlign : this.definition.hozAlign;\r\n\t\tthis.vertAlign = typeof(this.definition.vertAlign) == \"undefined\" ? this.table.options.cellVertAlign : this.definition.vertAlign;\r\n\r\n\t\tthis.titleElement.style.textAlign = this.definition.headerHozAlign || this.table.options.headerHozAlign;\r\n\t}\r\n\r\n\t_buildColumnHeaderContent(){\r\n\t\tvar def = this.definition,\r\n\t\ttable = this.table;\r\n\r\n\t\tvar contentElement = document.createElement(\"div\");\r\n\t\tcontentElement.classList.add(\"tabulator-col-content\");\r\n\r\n\t\tthis.titleHolderElement = document.createElement(\"div\");\r\n\t\tthis.titleHolderElement.classList.add(\"tabulator-col-title-holder\");\r\n\r\n\t\tcontentElement.appendChild(this.titleHolderElement);\r\n\r\n\t\tthis.titleElement = this._buildColumnHeaderTitle();\r\n\r\n\t\tthis.titleHolderElement.appendChild(this.titleElement);\r\n\r\n\t\treturn contentElement;\r\n\t}\r\n\r\n\t//build title element of column\r\n\t_buildColumnHeaderTitle(){\r\n\t\tvar def = this.definition,\r\n\t\ttable = this.table,\r\n\t\ttitle;\r\n\r\n\t\tvar titleHolderElement = document.createElement(\"div\");\r\n\t\ttitleHolderElement.classList.add(\"tabulator-col-title\");\r\n\r\n\t\tif(def.editableTitle){\r\n\t\t\tvar titleElement = document.createElement(\"input\");\r\n\t\t\ttitleElement.classList.add(\"tabulator-title-editor\");\r\n\r\n\t\t\ttitleElement.addEventListener(\"click\", (e) => {\r\n\t\t\t\te.stopPropagation();\r\n\t\t\t\ttitleElement.focus();\r\n\t\t\t});\r\n\r\n\t\t\ttitleElement.addEventListener(\"change\", () => {\r\n\t\t\t\tdef.title = titleElement.value;\r\n\t\t\t\ttable.options.columnTitleChanged.call(this.table, this.getComponent());\r\n\t\t\t});\r\n\r\n\t\t\ttitleHolderElement.appendChild(titleElement);\r\n\r\n\t\t\tif(def.field){\r\n\t\t\t\ttable.modules.localize.bind(\"columns|\" + def.field, (text) => {\r\n\t\t\t\t\ttitleElement.value = text || (def.title || \" \");\r\n\t\t\t\t});\r\n\t\t\t}else{\r\n\t\t\t\ttitleElement.value = def.title || \" \";\r\n\t\t\t}\r\n\r\n\t\t}else{\r\n\t\t\tif(def.field){\r\n\t\t\t\ttable.modules.localize.bind(\"columns|\" + def.field, (text) => {\r\n\t\t\t\t\tthis._formatColumnHeaderTitle(titleHolderElement, text || (def.title || \" \"));\r\n\t\t\t\t});\r\n\t\t\t}else{\r\n\t\t\t\tthis._formatColumnHeaderTitle(titleHolderElement, def.title || \" \");\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn titleHolderElement;\r\n\t}\r\n\r\n\t_formatColumnHeaderTitle(el, title){\r\n\t\tvar formatter, contents, params, mockCell, onRendered;\r\n\r\n\t\tif(this.definition.titleFormatter && this.table.modExists(\"format\")){\r\n\r\n\t\t\tformatter = this.table.modules.format.getFormatter(this.definition.titleFormatter);\r\n\r\n\t\t\tonRendered = (callback) => {\r\n\t\t\t\tthis.titleFormatterRendered = callback;\r\n\t\t\t};\r\n\r\n\t\t\tmockCell = {\r\n\t\t\t\tgetValue:function(){\r\n\t\t\t\t\treturn title;\r\n\t\t\t\t},\r\n\t\t\t\tgetElement:function(){\r\n\t\t\t\t\treturn el;\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\tparams = this.definition.titleFormatterParams || {};\r\n\r\n\t\t\tparams = typeof params === \"function\" ? params() : params;\r\n\r\n\t\t\tcontents = formatter.call(this.table.modules.format, mockCell, params, onRendered);\r\n\r\n\t\t\tswitch(typeof contents){\r\n\t\t\t\tcase \"object\":\r\n\t\t\t\tif(contents instanceof Node){\r\n\t\t\t\t\tel.appendChild(contents);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tel.innerHTML = \"\";\r\n\t\t\t\t\tconsole.warn(\"Format Error - Title formatter has returned a type of object, the only valid formatter object return is an instance of Node, the formatter returned:\", contents);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\t\tcase \"undefined\":\r\n\t\t\t\tcase \"null\":\r\n\t\t\t\tel.innerHTML = \"\";\r\n\t\t\t\tbreak;\r\n\t\t\t\tdefault:\r\n\t\t\t\tel.innerHTML = contents;\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tel.innerHTML = title;\r\n\t\t}\r\n\t}\r\n\r\n\t//build header element for column group\r\n\t_buildGroupHeader(){\r\n\t\tthis.element.classList.add(\"tabulator-col-group\");\r\n\t\tthis.element.setAttribute(\"role\", \"columngroup\");\r\n\t\tthis.element.setAttribute(\"aria-title\", this.definition.title);\r\n\r\n\t\t//asign additional css classes to column header\r\n\t\tif(this.definition.cssClass){\r\n\t\t\tvar classeNames = this.definition.cssClass.split(\" \");\r\n\t\t\tclasseNames.forEach((className) => {\r\n\t\t\t\tthis.element.classList.add(className);\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\t//set column header context menu\r\n\t\tif ((this.definition.headerContextMenu || this.definition.headerMenu) && this.table.modExists(\"menu\")) {\r\n\t\t\tthis.table.modules.menu.initializeColumnHeader(this);\r\n\t\t}\r\n\r\n\t\tthis.titleElement.style.textAlign = this.definition.headerHozAlign || this.table.options.headerHozAlign;\r\n\r\n\t\tthis.element.appendChild(this.groupElement);\r\n\t}\r\n\r\n\t//flat field lookup\r\n\t_getFlatData(data){\r\n\t\treturn data[this.field];\r\n\t}\r\n\r\n\t//nested field lookup\r\n\t_getNestedData(data){\r\n\t\tvar dataObj = data,\r\n\t\tstructure = this.fieldStructure,\r\n\t\tlength = structure.length,\r\n\t\toutput;\r\n\r\n\t\tfor(let i = 0; i < length; i++){\r\n\r\n\t\t\tdataObj = dataObj[structure[i]];\r\n\r\n\t\t\toutput = dataObj;\r\n\r\n\t\t\tif(!dataObj){\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\t//flat field set\r\n\t_setFlatData(data, value){\r\n\t\tif(this.field){\r\n\t\t\tdata[this.field] = value;\r\n\t\t}\r\n\t}\r\n\r\n\t//nested field set\r\n\t_setNestedData(data, value){\r\n\t\tvar dataObj = data,\r\n\t\tstructure = this.fieldStructure,\r\n\t\tlength = structure.length;\r\n\r\n\t\tfor(let i = 0; i < length; i++){\r\n\r\n\t\t\tif(i == length -1){\r\n\t\t\t\tdataObj[structure[i]] = value;\r\n\t\t\t}else{\r\n\t\t\t\tif(!dataObj[structure[i]]){\r\n\t\t\t\t\tif(typeof value !== \"undefined\"){\r\n\t\t\t\t\t\tdataObj[structure[i]] = {};\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tdataObj = dataObj[structure[i]];\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//attach column to this group\r\n\tattachColumn(column){\r\n\t\tif(this.groupElement){\r\n\t\t\tthis.columns.push(column);\r\n\t\t\tthis.groupElement.appendChild(column.getElement());\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Column Warning - Column being attached to another column instead of column group\");\r\n\t\t}\r\n\t}\r\n\r\n\t//vertically align header in column\r\n\tverticalAlign(alignment, height){\r\n\r\n\t\t//calculate height of column header and group holder element\r\n\t\tvar parentHeight = this.parent.isGroup ? this.parent.getGroupElement().clientHeight : (height || this.parent.getHeadersElement().clientHeight);\r\n\t\t// var parentHeight = this.parent.isGroup ? this.parent.getGroupElement().clientHeight : this.parent.getHeadersElement().clientHeight;\r\n\r\n\t\tthis.element.style.height = parentHeight + \"px\";\r\n\r\n\t\tif(this.isGroup){\r\n\t\t\tthis.groupElement.style.minHeight = (parentHeight - this.contentElement.offsetHeight) + \"px\";\r\n\t\t}\r\n\r\n\t\t//vertically align cell contents\r\n\t\tif(!this.isGroup && alignment !== \"top\"){\r\n\t\t\tif(alignment === \"bottom\"){\r\n\t\t\t\tthis.element.style.paddingTop = (this.element.clientHeight - this.contentElement.offsetHeight) + \"px\";\r\n\t\t\t}else{\r\n\t\t\t\tthis.element.style.paddingTop = ((this.element.clientHeight - this.contentElement.offsetHeight) / 2) + \"px\";\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.columns.forEach(function(column){\r\n\t\t\tcolumn.verticalAlign(alignment);\r\n\t\t});\r\n\t}\r\n\r\n\t//clear vertical alignmenet\r\n\tclearVerticalAlign(){\r\n\t\tthis.element.style.paddingTop = \"\";\r\n\t\tthis.element.style.height = \"\";\r\n\t\tthis.element.style.minHeight = \"\";\r\n\t\tthis.groupElement.style.minHeight = \"\";\r\n\r\n\t\tthis.columns.forEach(function(column){\r\n\t\t\tcolumn.clearVerticalAlign();\r\n\t\t});\r\n\t}\r\n\r\n\tbindModuleColumns (){\r\n\t\t//check if rownum formatter is being used on a column\r\n\t\tif(this.definition.formatter == \"rownum\"){\r\n\t\t\tthis.table.rowManager.rowNumColumn = this;\r\n\t\t}\r\n\t}\r\n\r\n\t//// Retreive Column Information ////\r\n\t//return column header element\r\n\tgetElement(){\r\n\t\treturn this.element;\r\n\t}\r\n\r\n\t//return colunm group element\r\n\tgetGroupElement(){\r\n\t\treturn this.groupElement;\r\n\t}\r\n\r\n\t//return field name\r\n\tgetField(){\r\n\t\treturn this.field;\r\n\t}\r\n\r\n\t//return the first column in a group\r\n\tgetFirstColumn(){\r\n\t\tif(!this.isGroup){\r\n\t\t\treturn this;\r\n\t\t}else{\r\n\t\t\tif(this.columns.length){\r\n\t\t\t\treturn this.columns[0].getFirstColumn();\r\n\t\t\t}else{\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//return the last column in a group\r\n\tgetLastColumn(){\r\n\t\tif(!this.isGroup){\r\n\t\t\treturn this;\r\n\t\t}else{\r\n\t\t\tif(this.columns.length){\r\n\t\t\t\treturn this.columns[this.columns.length -1].getLastColumn();\r\n\t\t\t}else{\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//return all columns in a group\r\n\tgetColumns(){\r\n\t\treturn this.columns;\r\n\t}\r\n\r\n\t//return all columns in a group\r\n\tgetCells(){\r\n\t\treturn this.cells;\r\n\t}\r\n\r\n\t//retreive the top column in a group of columns\r\n\tgetTopColumn(){\r\n\t\tif(this.parent.isGroup){\r\n\t\t\treturn this.parent.getTopColumn();\r\n\t\t}else{\r\n\t\t\treturn this;\r\n\t\t}\r\n\t}\r\n\r\n\t//return column definition object\r\n\tgetDefinition(updateBranches){\r\n\t\tvar colDefs = [];\r\n\r\n\t\tif(this.isGroup && updateBranches){\r\n\t\t\tthis.columns.forEach(function(column){\r\n\t\t\t\tcolDefs.push(column.getDefinition(true));\r\n\t\t\t});\r\n\r\n\t\t\tthis.definition.columns = colDefs;\r\n\t\t}\r\n\r\n\t\treturn this.definition;\r\n\t}\r\n\r\n\t//////////////////// Actions ////////////////////\r\n\tcheckColumnVisibility(){\r\n\t\tvar visible = false;\r\n\r\n\t\tthis.columns.forEach(function(column){\r\n\t\t\tif(column.visible){\r\n\t\t\t\tvisible = true;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tif(visible){\r\n\t\t\tthis.show();\r\n\t\t\tthis.parent.table.options.columnVisibilityChanged.call(this.table, this.getComponent(), false);\r\n\t\t}else{\r\n\t\t\tthis.hide();\r\n\t\t}\r\n\t}\r\n\r\n\t//show column\r\n\tshow(silent, responsiveToggle){\r\n\t\tif(!this.visible){\r\n\t\t\tthis.visible = true;\r\n\r\n\t\t\tthis.element.style.display = \"\";\r\n\r\n\t\t\tif(this.parent.isGroup){\r\n\t\t\t\tthis.parent.checkColumnVisibility();\r\n\t\t\t}\r\n\r\n\t\t\tthis.cells.forEach(function(cell){\r\n\t\t\t\tcell.show();\r\n\t\t\t});\r\n\r\n\t\t\tif(!this.isGroup && this.width === null){\r\n\t\t\t\tthis.reinitializeWidth();\r\n\t\t\t}\r\n\r\n\t\t\tthis.table.columnManager._verticalAlignHeaders();\r\n\r\n\t\t\tif(this.table.options.persistence && this.table.modExists(\"persistence\", true) && this.table.modules.persistence.config.columns){\r\n\t\t\t\tthis.table.modules.persistence.save(\"columns\");\r\n\t\t\t}\r\n\r\n\t\t\tif(!responsiveToggle && this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)){\r\n\t\t\t\tthis.table.modules.responsiveLayout.updateColumnVisibility(this, this.visible);\r\n\t\t\t}\r\n\r\n\t\t\tif(!silent){\r\n\t\t\t\tthis.table.options.columnVisibilityChanged.call(this.table, this.getComponent(), true);\r\n\t\t\t}\r\n\r\n\t\t\tif(this.parent.isGroup){\r\n\t\t\t\tthis.parent.matchChildWidths();\r\n\t\t\t}\r\n\r\n\t\t\tif(!this.silent && this.table.options.virtualDomHoz){\r\n\t\t\t\tthis.table.vdomHoz.reinitialize();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//hide column\r\n\thide(silent, responsiveToggle){\r\n\t\tif(this.visible){\r\n\t\t\tthis.visible = false;\r\n\r\n\t\t\tthis.element.style.display = \"none\";\r\n\r\n\t\t\tthis.table.columnManager._verticalAlignHeaders();\r\n\r\n\t\t\tif(this.parent.isGroup){\r\n\t\t\t\tthis.parent.checkColumnVisibility();\r\n\t\t\t}\r\n\r\n\t\t\tthis.cells.forEach(function(cell){\r\n\t\t\t\tcell.hide();\r\n\t\t\t});\r\n\r\n\t\t\tif(this.table.options.persistence && this.table.modExists(\"persistence\", true) && this.table.modules.persistence.config.columns){\r\n\t\t\t\tthis.table.modules.persistence.save(\"columns\");\r\n\t\t\t}\r\n\r\n\t\t\tif(!responsiveToggle && this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)){\r\n\t\t\t\tthis.table.modules.responsiveLayout.updateColumnVisibility(this, this.visible);\r\n\t\t\t}\r\n\r\n\t\t\tif(!silent){\r\n\t\t\t\tthis.table.options.columnVisibilityChanged.call(this.table, this.getComponent(), false);\r\n\t\t\t}\r\n\r\n\t\t\tif(this.parent.isGroup){\r\n\t\t\t\tthis.parent.matchChildWidths();\r\n\t\t\t}\r\n\r\n\t\t\tif(!this.silent && this.table.options.virtualDomHoz){\r\n\t\t\t\tthis.table.vdomHoz.reinitialize();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tmatchChildWidths(){\r\n\t\tvar childWidth = 0;\r\n\r\n\t\tif(this.contentElement && this.columns.length){\r\n\t\t\tthis.columns.forEach(function(column){\r\n\t\t\t\tif(column.visible){\r\n\t\t\t\t\tchildWidth += column.getWidth();\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tthis.contentElement.style.maxWidth = (childWidth - 1) + \"px\";\r\n\r\n\t\t\tif(this.parent.isGroup){\r\n\t\t\t\tthis.parent.matchChildWidths();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tremoveChild(child){\r\n\t\tvar index = this.columns.indexOf(child);\r\n\r\n\t\tif(index > -1){\r\n\t\t\tthis.columns.splice(index, 1);\r\n\t\t}\r\n\r\n\t\tif(!this.columns.length){\r\n\t\t\tthis.delete();\r\n\t\t}\r\n\t}\r\n\r\n\tsetWidth(width){\r\n\t\tthis.widthFixed = true;\r\n\t\tthis.setWidthActual(width);\r\n\t}\r\n\r\n\tsetWidthActual(width){\r\n\t\tif(isNaN(width)){\r\n\t\t\twidth = Math.floor((this.table.element.clientWidth/100) * parseInt(width));\r\n\t\t}\r\n\r\n\t\twidth = Math.max(this.minWidth, width);\r\n\r\n\t\tif(this.maxWidth){\r\n\t\t\twidth = Math.min(this.maxWidth, width);\r\n\t\t}\r\n\r\n\t\tthis.width = width;\r\n\t\tthis.widthStyled = width ? width + \"px\" : \"\";\r\n\r\n\t\tthis.element.style.width = this.widthStyled;\r\n\r\n\t\tif(!this.isGroup){\r\n\t\t\tthis.cells.forEach(function(cell){\r\n\t\t\t\tcell.setWidth();\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif(this.parent.isGroup){\r\n\t\t\tthis.parent.matchChildWidths();\r\n\t\t}\r\n\r\n\t\t//set resizable handles\r\n\t\tif(this.table.modExists(\"frozenColumns\")){\r\n\t\t\tthis.table.modules.frozenColumns.layout();\r\n\t\t}\r\n\t}\r\n\r\n\tcheckCellHeights(){\r\n\t\tvar rows = [];\r\n\r\n\t\tthis.cells.forEach(function(cell){\r\n\t\t\tif(cell.row.heightInitialized){\r\n\t\t\t\tif(cell.row.getElement().offsetParent !== null){\r\n\t\t\t\t\trows.push(cell.row);\r\n\t\t\t\t\tcell.row.clearCellHeight();\r\n\t\t\t\t}else{\r\n\t\t\t\t\tcell.row.heightInitialized = false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\trows.forEach(function(row){\r\n\t\t\trow.calcHeight();\r\n\t\t});\r\n\r\n\t\trows.forEach(function(row){\r\n\t\t\trow.setCellHeight();\r\n\t\t});\r\n\t}\r\n\r\n\tgetWidth(){\r\n\t\tvar width = 0;\r\n\r\n\t\tif(this.isGroup){\r\n\t\t\tthis.columns.forEach(function(column){\r\n\t\t\t\tif(column.visible){\r\n\t\t\t\t\twidth += column.getWidth();\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\twidth = this.width;\r\n\t\t}\r\n\r\n\t\treturn width;\r\n\t}\r\n\r\n\tgetHeight(){\r\n\t\treturn this.element.offsetHeight;\r\n\t}\r\n\r\n\tsetMinWidth(minWidth){\r\n\t\tthis.minWidth = minWidth;\r\n\t\tthis.minWidthStyled = minWidth ? minWidth + \"px\" : \"\";\r\n\r\n\t\tthis.element.style.minWidth = this.minWidthStyled;\r\n\r\n\t\tthis.cells.forEach(function(cell){\r\n\t\t\tcell.setMinWidth();\r\n\t\t});\r\n\t}\r\n\r\n\tsetMaxWidth(maxWidth){\r\n\t\tthis.maxWidth = maxWidth;\r\n\t\tthis.maxWidthStyled = maxWidth ? maxWidth + \"px\" : \"\";\r\n\r\n\t\tthis.element.style.maxWidth = this.maxWidthStyled;\r\n\r\n\t\tthis.cells.forEach(function(cell){\r\n\t\t\tcell.setMaxWidth();\r\n\t\t});\r\n\t}\r\n\r\n\tdelete(){\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tvar index;\r\n\r\n\t\t\tif(this.isGroup){\r\n\t\t\t\tthis.columns.forEach(function(column){\r\n\t\t\t\t\tcolumn.delete();\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\t//cancel edit if column is currently being edited\r\n\t\t\tif(this.table.modExists(\"edit\")){\r\n\t\t\t\tif(this.table.modules.edit.currentCell.column === this){\r\n\t\t\t\t\tthis.table.modules.edit.cancelEdit();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tvar cellCount = this.cells.length;\r\n\r\n\t\t\tfor(let i = 0; i < cellCount; i++){\r\n\t\t\t\tthis.cells[0].delete();\r\n\t\t\t}\r\n\r\n\t\t\tif(this.element.parentNode){\r\n\t\t\t\tthis.element.parentNode.removeChild(this.element);\r\n\t\t\t}\r\n\r\n\t\t\tthis.element = false;\r\n\t\t\tthis.contentElement = false;\r\n\t\t\tthis.titleElement = false;\r\n\t\t\tthis.groupElement = false;\r\n\r\n\t\t\tif(this.parent.isGroup){\r\n\t\t\t\tthis.parent.removeChild(this);\r\n\t\t\t}\r\n\r\n\t\t\tthis.table.columnManager.deregisterColumn(this);\r\n\r\n\t\t\tif(this.table.options.virtualDomHoz){\r\n\t\t\t\tthis.table.vdomHoz.reinitialize(true);\r\n\t\t\t}\r\n\r\n\t\t\tresolve();\r\n\t\t});\r\n\t}\r\n\r\n\tcolumnRendered(){\r\n\t\tif(this.titleFormatterRendered){\r\n\t\t\tthis.titleFormatterRendered();\r\n\t\t}\r\n\t}\r\n\r\n\tvalidate(){\r\n\t\tvar invalid = [];\r\n\r\n\t\tthis.cells.forEach(function(cell){\r\n\t\t\tif(!cell.validate()){\r\n\t\t\t\tinvalid.push(cell.getComponent());\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn invalid.length ? invalid : true;\r\n\t}\r\n\r\n\t//////////////// Cell Management /////////////////\r\n\t//generate cell for this column\r\n\tgenerateCell(row){\r\n\t\tvar cell = new Cell(this, row);\r\n\r\n\t\tthis.cells.push(cell);\r\n\r\n\t\treturn cell;\r\n\t}\r\n\r\n\tnextColumn(){\r\n\t\tvar index = this.table.columnManager.findColumnIndex(this);\r\n\t\treturn index > -1 ? this._nextVisibleColumn(index + 1) : false;\r\n\t}\r\n\r\n\t_nextVisibleColumn(index){\r\n\t\tvar column = this.table.columnManager.getColumnByIndex(index);\r\n\t\treturn !column || column.visible ? column : this._nextVisibleColumn(index + 1);\r\n\t}\r\n\r\n\tprevColumn(){\r\n\t\tvar index = this.table.columnManager.findColumnIndex(this);\r\n\t\treturn index > -1 ? this._prevVisibleColumn(index - 1) : false;\r\n\t}\r\n\r\n\t_prevVisibleColumn(index){\r\n\t\tvar column = this.table.columnManager.getColumnByIndex(index);\r\n\t\treturn !column || column.visible ? column : this._prevVisibleColumn(index - 1);\r\n\t}\r\n\r\n\treinitializeWidth(force){\r\n\t\tthis.widthFixed = false;\r\n\r\n\t\t//set width if present\r\n\t\tif(typeof this.definition.width !== \"undefined\" && !force){\r\n\t\t\tthis.setWidth(this.definition.width);\r\n\t\t}\r\n\r\n\t\t//hide header filters to prevent them altering column width\r\n\t\tif(this.table.modExists(\"filter\")){\r\n\t\t\tthis.table.modules.filter.hideHeaderFilterElements();\r\n\t\t}\r\n\r\n\t\tthis.fitToData();\r\n\r\n\t\t//show header filters again after layout is complete\r\n\t\tif(this.table.modExists(\"filter\")){\r\n\t\t\tthis.table.modules.filter.showHeaderFilterElements();\r\n\t\t}\r\n\t}\r\n\r\n\t//set column width to maximum cell width\r\n\tfitToData(){\r\n\t\tif(!this.widthFixed){\r\n\t\t\tthis.element.style.width = \"\";\r\n\r\n\t\t\tthis.cells.forEach((cell) => {\r\n\t\t\t\tcell.clearWidth();\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tvar maxWidth = this.element.offsetWidth;\r\n\r\n\t\tif(!this.width || !this.widthFixed){\r\n\t\t\tthis.cells.forEach((cell) => {\r\n\t\t\t\tvar width = cell.getWidth();\r\n\r\n\t\t\t\tif(width > maxWidth){\r\n\t\t\t\t\tmaxWidth = width;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tif(maxWidth){\r\n\t\t\t\tthis.setWidthActual(maxWidth + 1);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tupdateDefinition(updates){\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tvar definition;\r\n\r\n\t\t\tif(!this.isGroup){\r\n\t\t\t\tif(!this.parent.isGroup){\r\n\t\t\t\t\tdefinition = Object.assign({}, this.getDefinition());\r\n\t\t\t\t\tdefinition = Object.assign(definition, updates);\r\n\r\n\t\t\t\t\tthis.table.columnManager.addColumn(definition, false, this)\r\n\t\t\t\t\t.then((column) => {\r\n\r\n\t\t\t\t\t\tif(definition.field == this.field){\r\n\t\t\t\t\t\t\tthis.field = false; //cleair field name to prevent deletion of duplicate column from arrays\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tthis.delete()\r\n\t\t\t\t\t\t.then(() => {\r\n\t\t\t\t\t\t\tresolve(column.getComponent());\r\n\t\t\t\t\t\t}).catch((err) => {\r\n\t\t\t\t\t\t\treject(err);\r\n\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t}).catch((err) => {\r\n\t\t\t\t\t\treject(err);\r\n\t\t\t\t\t});\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.warn(\"Column Update Error - The updateDefinition function is only available on ungrouped columns\");\r\n\t\t\t\t\treject(\"Column Update Error - The updateDefinition function is only available on columns, not column groups\");\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Column Update Error - The updateDefinition function is only available on ungrouped columns\");\r\n\t\t\t\treject(\"Column Update Error - The updateDefinition function is only available on columns, not column groups\");\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tdeleteCell(cell){\r\n\t\tvar index = this.cells.indexOf(cell);\r\n\r\n\t\tif(index > -1){\r\n\t\t\tthis.cells.splice(index, 1);\r\n\t\t}\r\n\t}\r\n\r\n\t//////////////// Object Generation /////////////////\r\n\tgetComponent(){\r\n\t\tif(!this.component){\r\n\t\t\tthis.component = new ColumnComponent(this);\r\n\t\t}\r\n\r\n\t\treturn this.component;\r\n\t}\r\n}\r\n\r\nColumn.defaultOptionList = defaultOptions;\r\n\r\nexport default Column;","export default [\r\n\t\"title\",\r\n\t\"field\",\r\n\t\"columns\",\r\n\t\"visible\",\r\n\t\"hozAlign\",\r\n\t\"vertAlign\",\r\n\t\"width\",\r\n\t\"minWidth\",\r\n\t\"maxWidth\",\r\n\t\"widthGrow\",\r\n\t\"widthShrink\",\r\n\t\"resizable\",\r\n\t\"frozen\",\r\n\t\"responsive\",\r\n\t\"tooltip\",\r\n\t\"cssClass\",\r\n\t\"rowHandle\",\r\n\t\"print\",\r\n\t\"htmlOutput\",\r\n\t\"sorter\",\r\n\t\"sorterParams\",\r\n\t\"formatter\",\r\n\t\"formatterParams\",\r\n\t\"variableHeight\",\r\n\t\"editable\",\r\n\t\"editor\",\r\n\t\"editorParams\",\r\n\t\"validator\",\r\n\t\"mutator\",\r\n\t\"mutatorParams\",\r\n\t\"mutatorData\",\r\n\t\"mutatorDataParams\",\r\n\t\"mutatorEdit\",\r\n\t\"mutatorEditParams\",\r\n\t\"mutatorClipboard\",\r\n\t\"mutatorClipboardParams\",\r\n\t\"accessor\",\r\n\t\"accessorParams\",\r\n\t\"accessorData\",\r\n\t\"accessorDataParams\",\r\n\t\"accessorDownload\",\r\n\t\"accessorDownloadParams\",\r\n\t\"accessorClipboard\",\r\n\t\"accessorClipboardParams\",\r\n\t\"accessorPrint\",\r\n\t\"accessorPrintParams\",\r\n\t\"accessorHtmlOutput\",\r\n\t\"accessorHtmlOutputParams\",\r\n\t\"clipboard\",\r\n\t\"download\",\r\n\t\"topCalc\",\r\n\t\"topCalcParams\",\r\n\t\"topCalcFormatter\",\r\n\t\"topCalcFormatterParams\",\r\n\t\"bottomCalc\",\r\n\t\"bottomCalcParams\",\r\n\t\"bottomCalcFormatter\",\r\n\t\"bottomCalcFormatterParams\",\r\n\t\"cellClick\",\r\n\t\"cellDblClick\",\r\n\t\"cellContext\",\r\n\t\"cellTap\",\r\n\t\"cellDblTap\",\r\n\t\"cellTapHold\",\r\n\t\"cellMouseEnter\",\r\n\t\"cellMouseLeave\",\r\n\t\"cellMouseOver\",\r\n\t\"cellMouseOut\",\r\n\t\"cellMouseMove\",\r\n\t\"cellEditing\",\r\n\t\"cellEdited\",\r\n\t\"cellEditCancelled\",\r\n\t\"headerSort\",\r\n\t\"headerSortStartingDir\",\r\n\t\"headerSortTristate\",\r\n\t\"headerClick\",\r\n\t\"headerDblClick\",\r\n\t\"headerContext\",\r\n\t\"headerTap\",\r\n\t\"headerDblTap\",\r\n\t\"headerTapHold\",\r\n\t\"headerTooltip\",\r\n\t\"headerVertical\",\r\n\t\"headerHozAlign\",\r\n\t\"editableTitle\",\r\n\t\"titleFormatter\",\r\n\t\"titleFormatterParams\",\r\n\t\"headerFilter\",\r\n\t\"headerFilterPlaceholder\",\r\n\t\"headerFilterParams\",\r\n\t\"headerFilterEmptyCheck\",\r\n\t\"headerFilterFunc\",\r\n\t\"headerFilterFuncParams\",\r\n\t\"headerFilterLiveFilter\",\r\n\t\"print\",\r\n\t\"headerContextMenu\",\r\n\t\"headerMenu\",\r\n\t\"contextMenu\",\r\n\t// \"headerClickMenu\",\r\n\t\"clickMenu\",\r\n\t\"formatterPrint\",\r\n\t\"formatterPrintParams\",\r\n\t\"formatterClipboard\",\r\n\t\"formatterClipboardParams\",\r\n\t\"formatterHtmlOutput\",\r\n\t\"formatterHtmlOutputParams\",\r\n\t\"titlePrint\",\r\n\t\"titleClipboard\",\r\n\t\"titleHtmlOutput\",\r\n\t\"titleDownload\",\r\n];","export default class Helpers{\r\n\r\n\tstatic elVisible(el){\r\n\t\treturn !(el.offsetWidth <= 0 && el.offsetHeight <= 0);\r\n\t}\r\n\r\n\tstatic elOffset(el){\r\n\t\tvar box = el.getBoundingClientRect();\r\n\r\n\t\treturn {\r\n\t\t\ttop: box.top + window.pageYOffset - document.documentElement.clientTop,\r\n\t\t\tleft: box.left + window.pageXOffset - document.documentElement.clientLeft\r\n\t\t};\r\n\t}\r\n\r\n\tstatic deepClone(obj){\r\n\t\tvar clone = Object.assign(Array.isArray(obj) ? [] : {}, obj);\r\n\r\n\t\tfor(var i in obj) {\r\n\t\t\tif(obj[i] != null && typeof(obj[i]) === \"object\"){\r\n\t\t\t\tif (obj[i] instanceof Date) {\r\n\t\t\t\t\tclone[i] = new Date(obj[i]);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tclone[i] = this.deepClone(obj[i]);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn clone;\r\n\t}\r\n}","import Column from './column/Column.js';\r\nimport Helpers from './Helpers.js';\r\n\r\nexport default class ColumnManager {\r\n\r\n\tconstructor (table){\r\n\t\tthis.table = table; //hold parent table\r\n\t\tthis.blockHozScrollEvent = false;\r\n\t\tthis.headersElement = this.createHeadersElement();\r\n\t\tthis.element = this.createHeaderElement(); //containing element\r\n\t\tthis.rowManager = null; //hold row manager object\r\n\t\tthis.columns = []; // column definition object\r\n\t\tthis.columnsByIndex = []; //columns by index\r\n\t\tthis.columnsByField = {}; //columns by field\r\n\t\tthis.scrollLeft = 0;\r\n\r\n\t\tthis.element.insertBefore(this.headersElement, this.element.firstChild);\r\n\t}\r\n\r\n\t////////////// Setup Functions /////////////////\r\n\r\n\tcreateHeadersElement (){\r\n\t\tvar el = document.createElement(\"div\");\r\n\r\n\t\tel.classList.add(\"tabulator-headers\");\r\n\r\n\t\treturn el;\r\n\t}\r\n\r\n\tcreateHeaderElement (){\r\n\t\tvar el = document.createElement(\"div\");\r\n\r\n\t\tel.classList.add(\"tabulator-header\");\r\n\r\n\t\tif(!this.table.options.headerVisible){\r\n\t\t\tel.classList.add(\"tabulator-header-hidden\");\r\n\t\t}\r\n\r\n\t\treturn el;\r\n\t}\r\n\r\n\tinitialize (){\r\n\t\t//scroll body along with header\r\n\t\t// this.element.addEventListener(\"scroll\", (e) => {\r\n\t\t// \tif(!this.blockHozScrollEvent){\r\n\t\t// \t\tthis.table.rowManager.scrollHorizontal(this.element.scrollLeft);\r\n\t\t// \t}\r\n\t\t// });\r\n\t}\r\n\r\n\t//link to row manager\r\n\tsetRowManager(manager){\r\n\t\tthis.rowManager = manager;\r\n\t}\r\n\r\n\t//return containing element\r\n\tgetElement(){\r\n\t\treturn this.element;\r\n\t}\r\n\r\n\t//return header containing element\r\n\tgetHeadersElement(){\r\n\t\treturn this.headersElement;\r\n\t}\r\n\r\n\t//scroll horizontally to match table body\r\n\tscrollHorizontal(left){\r\n\t\tvar hozAdjust = 0,\r\n\t\tscrollWidth = this.element.scrollWidth - this.table.element.clientWidth;\r\n\r\n\t\t// this.tempScrollBlock();\r\n\t\tthis.element.scrollLeft = left;\r\n\r\n\t\t//adjust for vertical scrollbar moving table when present\r\n\t\tif(left > scrollWidth){\r\n\t\t\thozAdjust = left - scrollWidth;\r\n\t\t\tthis.element.style.marginLeft = (-(hozAdjust)) + \"px\";\r\n\t\t}else{\r\n\t\t\tthis.element.style.marginLeft = 0;\r\n\t\t}\r\n\r\n\t\t//keep frozen columns fixed in position\r\n\t\t//this._calcFrozenColumnsPos(hozAdjust + 3);\r\n\r\n\t\tthis.scrollLeft = left;\r\n\r\n\t\tif(this.table.modExists(\"frozenColumns\")){\r\n\t\t\tthis.table.modules.frozenColumns.scrollHorizontal();\r\n\t\t}\r\n\t}\r\n\r\n\t///////////// Column Setup Functions /////////////\r\n\tgenerateColumnsFromRowData(data){\r\n\t\tvar cols = [],\r\n\t\tdefinitions = this.table.options.autoColumnsDefinitions,\r\n\t\trow, sorter;\r\n\r\n\t\tif(data && data.length){\r\n\r\n\t\t\trow = data[0];\r\n\r\n\t\t\tfor(var key in row){\r\n\t\t\t\tlet col = {\r\n\t\t\t\t\tfield:key,\r\n\t\t\t\t\ttitle:key,\r\n\t\t\t\t};\r\n\r\n\t\t\t\tlet value = row[key];\r\n\r\n\t\t\t\tswitch(typeof value){\r\n\t\t\t\t\tcase \"undefined\":\r\n\t\t\t\t\tsorter = \"string\";\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase \"boolean\":\r\n\t\t\t\t\tsorter = \"boolean\";\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase \"object\":\r\n\t\t\t\t\tif(Array.isArray(value)){\r\n\t\t\t\t\t\tsorter = \"array\";\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tsorter = \"string\";\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tdefault:\r\n\t\t\t\t\tif(!isNaN(value) && value !== \"\"){\r\n\t\t\t\t\t\tsorter = \"number\";\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tif(value.match(/((^[0-9]+[a-z]+)|(^[a-z]+[0-9]+))+$/i)){\r\n\t\t\t\t\t\t\tsorter = \"alphanum\";\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\tsorter = \"string\";\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tcol.sorter = sorter;\r\n\r\n\t\t\t\tcols.push(col);\r\n\t\t\t}\r\n\r\n\t\t\tif(definitions){\r\n\r\n\t\t\t\tswitch(typeof definitions){\r\n\t\t\t\t\tcase \"function\":\r\n\t\t\t\t\t\tthis.table.options.columns = definitions.call(this.table, cols);\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase \"object\":\r\n\t\t\t\t\t\tif(Array.isArray(definitions)){\r\n\t\t\t\t\t\t\tcols.forEach((col) => {\r\n\t\t\t\t\t\t\t\tvar match = definitions.find((def) => {\r\n\t\t\t\t\t\t\t\t\treturn def.field === col.field;\r\n\t\t\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\t\t\tif(match){\r\n\t\t\t\t\t\t\t\t\tObject.assign(col, match);\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\tcols.forEach((col) => {\r\n\t\t\t\t\t\t\t\tif(definitions[col.field]){\r\n\t\t\t\t\t\t\t\t\tObject.assign(col, definitions[col.field]);\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tthis.table.options.columns = cols;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tthis.table.options.columns = cols;\r\n\t\t\t}\r\n\r\n\t\t\tthis.setColumns(this.table.options.columns);\r\n\t\t}\r\n\t}\r\n\r\n\tsetColumns(cols, row){\r\n\t\twhile(this.headersElement.firstChild) this.headersElement.removeChild(this.headersElement.firstChild);\r\n\r\n\t\tthis.columns = [];\r\n\t\tthis.columnsByIndex = [];\r\n\t\tthis.columnsByField = {};\r\n\r\n\t\t//reset frozen columns\r\n\t\tif(this.table.modExists(\"frozenColumns\")){\r\n\t\t\tthis.table.modules.frozenColumns.reset();\r\n\t\t}\r\n\r\n\t\tcols.forEach((def, i) => {\r\n\t\t\tthis._addColumn(def);\r\n\t\t});\r\n\r\n\t\tthis._reIndexColumns();\r\n\r\n\t\tif(this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)){\r\n\t\t\tthis.table.modules.responsiveLayout.initialize();\r\n\t\t}\r\n\r\n\t\tif(this.table.options.virtualDomHoz){\r\n\t\t\tthis.table.vdomHoz.reinitialize(false, true);\r\n\t\t}\r\n\r\n\t\tthis.redraw(true);\r\n\t}\r\n\r\n\t_addColumn(definition, before, nextToColumn){\r\n\t\tvar column = new Column(definition, this),\r\n\t\tcolEl = column.getElement(),\r\n\t\tindex = nextToColumn ? this.findColumnIndex(nextToColumn) : nextToColumn;\r\n\r\n\t\tif(nextToColumn && index > -1){\r\n\r\n\t\t\tvar parentIndex = this.columns.indexOf(nextToColumn.getTopColumn());\r\n\t\t\tvar nextEl = nextToColumn.getElement();\r\n\r\n\t\t\tif(before){\r\n\t\t\t\tthis.columns.splice(parentIndex, 0, column);\r\n\t\t\t\tnextEl.parentNode.insertBefore(colEl, nextEl);\r\n\t\t\t}else{\r\n\t\t\t\tthis.columns.splice(parentIndex + 1, 0, column);\r\n\t\t\t\tnextEl.parentNode.insertBefore(colEl, nextEl.nextSibling);\r\n\t\t\t}\r\n\r\n\t\t}else{\r\n\t\t\tif(before){\r\n\t\t\t\tthis.columns.unshift(column);\r\n\t\t\t\tthis.headersElement.insertBefore(column.getElement(), this.headersElement.firstChild);\r\n\t\t\t}else{\r\n\t\t\t\tthis.columns.push(column);\r\n\t\t\t\tthis.headersElement.appendChild(column.getElement());\r\n\t\t\t}\r\n\r\n\t\t\tcolumn.columnRendered();\r\n\t\t}\r\n\r\n\t\treturn column;\r\n\t}\r\n\r\n\tregisterColumnField(col){\r\n\t\tif(col.definition.field){\r\n\t\t\tthis.columnsByField[col.definition.field] = col;\r\n\t\t}\r\n\t}\r\n\r\n\tregisterColumnPosition(col){\r\n\t\tthis.columnsByIndex.push(col);\r\n\t}\r\n\r\n\t_reIndexColumns(){\r\n\t\tthis.columnsByIndex = [];\r\n\r\n\t\tthis.columns.forEach(function(column){\r\n\t\t\tcolumn.reRegisterPosition();\r\n\t\t});\r\n\t}\r\n\r\n\t//ensure column headers take up the correct amount of space in column groups\r\n\t_verticalAlignHeaders(){\r\n\t\tvar minHeight = 0;\r\n\r\n\t\tthis.columns.forEach((column) => {\r\n\t\t\tvar height;\r\n\r\n\t\t\tcolumn.clearVerticalAlign();\r\n\r\n\t\t\theight = column.getHeight();\r\n\r\n\t\t\tif(height > minHeight){\r\n\t\t\t\tminHeight = height;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tthis.columns.forEach((column) => {\r\n\t\t\tcolumn.verticalAlign(this.table.options.columnHeaderVertAlign, minHeight);\r\n\t\t});\r\n\r\n\t\tthis.rowManager.adjustTableSize();\r\n\t}\r\n\r\n\t//////////////// Column Details /////////////////\r\n\tfindColumn(subject){\r\n\t\tif(typeof subject == \"object\"){\r\n\r\n\t\t\tif(subject instanceof Column){\r\n\t\t\t\t//subject is column element\r\n\t\t\t\treturn subject;\r\n\t\t\t}else if(subject instanceof ColumnComponent){\r\n\t\t\t\t//subject is public column component\r\n\t\t\t\treturn subject._getSelf() || false;\r\n\t\t\t}else if(typeof HTMLElement !== \"undefined\" && subject instanceof HTMLElement){\r\n\t\t\t\t//subject is a HTML element of the column header\r\n\t\t\t\tlet match = this.columns.find((column) => {\r\n\t\t\t\t\treturn column.element === subject;\r\n\t\t\t\t});\r\n\r\n\t\t\t\treturn match || false;\r\n\t\t\t}\r\n\r\n\t\t}else{\r\n\t\t\t//subject should be treated as the field name of the column\r\n\t\t\treturn this.columnsByField[subject] || false;\r\n\t\t}\r\n\r\n\t\t//catch all for any other type of input\r\n\t\treturn false;\r\n\t}\r\n\r\n\tgetColumnByField(field){\r\n\t\treturn this.columnsByField[field];\r\n\t}\r\n\r\n\tgetColumnsByFieldRoot(root){\r\n\t\tvar matches = [];\r\n\r\n\t\tObject.keys(this.columnsByField).forEach((field) => {\r\n\t\t\tvar fieldRoot = field.split(\".\")[0];\r\n\t\t\tif(fieldRoot === root){\r\n\t\t\t\tmatches.push(this.columnsByField[field]);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn matches;\r\n\t}\r\n\r\n\tgetColumnByIndex(index){\r\n\t\treturn this.columnsByIndex[index];\r\n\t}\r\n\r\n\tgetFirstVisibileColumn(index){\r\n\t\tvar index = this.columnsByIndex.findIndex((col) => {\r\n\t\t\treturn col.visible;\r\n\t\t});\r\n\r\n\t\treturn index > -1 ? this.columnsByIndex[index] : false;\r\n\t}\r\n\r\n\tgetColumns(){\r\n\t\treturn this.columns;\r\n\t}\r\n\r\n\tfindColumnIndex(column){\r\n\t\treturn this.columnsByIndex.findIndex((col) => {\r\n\t\t\treturn column === col;\r\n\t\t});\r\n\t}\r\n\r\n\t//return all columns that are not groups\r\n\tgetRealColumns(){\r\n\t\treturn this.columnsByIndex;\r\n\t}\r\n\r\n\t//travers across columns and call action\r\n\ttraverse(callback){\r\n\t\tthis.columnsByIndex.forEach((column,i) =>{\r\n\t\t\tcallback(column, i);\r\n\t\t});\r\n\t}\r\n\r\n\t//get defintions of actual columns\r\n\tgetDefinitions(active){\r\n\t\tvar output = [];\r\n\r\n\t\tthis.columnsByIndex.forEach((column) => {\r\n\t\t\tif(!active || (active && column.visible)){\r\n\t\t\t\toutput.push(column.getDefinition());\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\t//get full nested definition tree\r\n\tgetDefinitionTree(){\r\n\t\tvar output = [];\r\n\r\n\t\tthis.columns.forEach((column) => {\r\n\t\t\toutput.push(column.getDefinition(true));\r\n\t\t});\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tgetComponents(structured){\r\n\t\tvar output = [],\r\n\t\tcolumns = structured ? this.columns : this.columnsByIndex;\r\n\r\n\t\tcolumns.forEach((column) => {\r\n\t\t\toutput.push(column.getComponent());\r\n\t\t});\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tgetWidth(){\r\n\t\tvar width = 0;\r\n\r\n\t\tthis.columnsByIndex.forEach((column) => {\r\n\t\t\tif(column.visible){\r\n\t\t\t\twidth += column.getWidth();\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn width;\r\n\t}\r\n\r\n\tmoveColumn(from, to, after){\r\n\t\tthis.moveColumnActual(from, to, after);\r\n\r\n\t\tif(this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)){\r\n\t\t\tthis.table.modules.responsiveLayout.initialize();\r\n\t\t}\r\n\r\n\t\tif(this.table.modExists(\"columnCalcs\")){\r\n\t\t\tthis.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows);\r\n\t\t}\r\n\r\n\t\tto.element.parentNode.insertBefore(from.element, to.element);\r\n\r\n\t\tif(after){\r\n\t\t\tto.element.parentNode.insertBefore(to.element, from.element);\r\n\t\t}\r\n\r\n\t\tthis._verticalAlignHeaders();\r\n\r\n\t\tthis.table.rowManager.reinitialize();\r\n\t}\r\n\r\n\tmoveColumnActual(from, to, after){\r\n\r\n\t\tif(from.parent.isGroup){\r\n\t\t\tthis._moveColumnInArray(from.parent.columns, from, to, after);\r\n\t\t}else{\r\n\t\t\tthis._moveColumnInArray(this.columns, from, to, after);\r\n\t\t}\r\n\r\n\t\tthis._moveColumnInArray(this.columnsByIndex, from, to, after, true);\r\n\r\n\t\tif(this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)){\r\n\t\t\tthis.table.modules.responsiveLayout.initialize();\r\n\t\t}\r\n\r\n\t\tif(this.table.options.virtualDomHoz){\r\n\t\t\tthis.table.vdomHoz.reinitialize(true);\r\n\t\t}\r\n\r\n\t\tif(this.table.options.columnMoved){\r\n\t\t\tthis.table.options.columnMoved.call(this.table, from.getComponent(), this.table.columnManager.getComponents());\r\n\t\t}\r\n\r\n\t\tif(this.table.options.persistence && this.table.modExists(\"persistence\", true) && this.table.modules.persistence.config.columns){\r\n\t\t\tthis.table.modules.persistence.save(\"columns\");\r\n\t\t}\r\n\t}\r\n\r\n\t_moveColumnInArray(columns, from, to, after, updateRows){\r\n\t\tvar\tfromIndex = columns.indexOf(from),\r\n\t\ttoIndex, rows = [];\r\n\r\n\t\tif (fromIndex > -1) {\r\n\r\n\t\t\tcolumns.splice(fromIndex, 1);\r\n\r\n\t\t\ttoIndex = columns.indexOf(to);\r\n\r\n\t\t\tif (toIndex > -1) {\r\n\r\n\t\t\t\tif(after){\r\n\t\t\t\t\ttoIndex = toIndex+1;\r\n\t\t\t\t}\r\n\r\n\t\t\t}else{\r\n\t\t\t\ttoIndex = fromIndex;\r\n\t\t\t}\r\n\r\n\t\t\tcolumns.splice(toIndex, 0, from);\r\n\r\n\t\t\tif(updateRows){\r\n\r\n\t\t\t\tif(this.table.options.dataTree && this.table.modExists(\"dataTree\", true)){\r\n\t\t\t\t\tthis.table.rowManager.rows.forEach((row) => {\r\n\t\t\t\t\t\trows = rows.concat(this.table.modules.dataTree.getTreeChildren(row, false, true));\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\r\n\t\t\t\trows = rows.concat(this.table.rowManager.rows);\r\n\r\n\t\t\t\trows.forEach(function(row){\r\n\t\t\t\t\tif(row.cells.length){\r\n\t\t\t\t\t\tvar cell = row.cells.splice(fromIndex, 1)[0];\r\n\t\t\t\t\t\trow.cells.splice(toIndex, 0, cell);\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tscrollToColumn(column, position, ifVisible){\r\n\t\tvar left = 0,\r\n\t\toffset = 0,\r\n\t\tadjust = 0,\r\n\t\tcolEl = column.getElement();\r\n\r\n\t\treturn new Promise((resolve, reject) => {\r\n\r\n\t\t\tif(typeof position === \"undefined\"){\r\n\t\t\t\tposition = this.table.options.scrollToColumnPosition;\r\n\t\t\t}\r\n\r\n\t\t\tif(typeof ifVisible === \"undefined\"){\r\n\t\t\t\tifVisible = this.table.options.scrollToColumnIfVisible;\r\n\t\t\t}\r\n\r\n\t\t\tif(column.visible){\r\n\r\n\t\t\t\t//align to correct position\r\n\t\t\t\tswitch(position){\r\n\t\t\t\t\tcase \"middle\":\r\n\t\t\t\t\tcase \"center\":\r\n\t\t\t\t\tadjust = -this.element.clientWidth / 2;\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase \"right\":\r\n\t\t\t\t\tadjust = colEl.clientWidth - this.headersElement.clientWidth;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//check column visibility\r\n\t\t\t\tif(!ifVisible){\r\n\r\n\t\t\t\t\toffset = colEl.offsetLeft;\r\n\r\n\t\t\t\t\tif(offset > 0 && offset + colEl.offsetWidth < this.element.clientWidth){\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//calculate scroll position\r\n\t\t\t\tleft = colEl.offsetLeft + adjust;\r\n\r\n\t\t\t\tleft = Math.max(Math.min(left, this.table.rowManager.element.scrollWidth - this.table.rowManager.element.clientWidth),0);\r\n\r\n\t\t\t\tthis.table.rowManager.scrollHorizontal(left);\r\n\t\t\t\tthis.scrollHorizontal(left);\r\n\r\n\t\t\t\tresolve();\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Scroll Error - Column not visible\");\r\n\t\t\t\treject(\"Scroll Error - Column not visible\");\r\n\t\t\t}\r\n\r\n\t\t});\r\n\t}\r\n\r\n\t//////////////// Cell Management /////////////////\r\n\tgenerateCells(row){\r\n\t\tvar cells = [];\r\n\r\n\t\tthis.columnsByIndex.forEach((column) => {\r\n\t\t\tcells.push(column.generateCell(row));\r\n\t\t});\r\n\r\n\t\treturn cells;\r\n\t}\r\n\r\n\t//////////////// Column Management /////////////////\r\n\tgetFlexBaseWidth(){\r\n\t\tvar totalWidth = this.table.element.clientWidth, //table element width\r\n\t\tfixedWidth = 0;\r\n\r\n\t\t//adjust for vertical scrollbar if present\r\n\t\tif(this.rowManager.element.scrollHeight > this.rowManager.element.clientHeight){\r\n\t\t\ttotalWidth -= this.rowManager.element.offsetWidth - this.rowManager.element.clientWidth;\r\n\t\t}\r\n\r\n\t\tthis.columnsByIndex.forEach(function(column){\r\n\t\t\tvar width, minWidth, colWidth;\r\n\r\n\t\t\tif(column.visible){\r\n\r\n\t\t\t\twidth = column.definition.width || 0;\r\n\r\n\t\t\t\tminWidth = typeof column.minWidth == \"undefined\" ? this.table.options.columnMinWidth : parseInt(column.minWidth);\r\n\r\n\t\t\t\tif(typeof(width) == \"string\"){\r\n\t\t\t\t\tif(width.indexOf(\"%\") > -1){\r\n\t\t\t\t\t\tcolWidth = (totalWidth / 100) * parseInt(width) ;\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tcolWidth = parseInt(width);\r\n\t\t\t\t\t}\r\n\t\t\t\t}else{\r\n\t\t\t\t\tcolWidth = width;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tfixedWidth += colWidth > minWidth ? colWidth : minWidth;\r\n\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn fixedWidth;\r\n\t}\r\n\r\n\taddColumn(definition, before, nextToColumn){\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tvar column = this._addColumn(definition, before, nextToColumn);\r\n\r\n\t\t\tthis._reIndexColumns();\r\n\r\n\t\t\tif(this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)){\r\n\t\t\t\tthis.table.modules.responsiveLayout.initialize();\r\n\t\t\t}\r\n\r\n\t\t\tif(this.table.modExists(\"columnCalcs\")){\r\n\t\t\t\tthis.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows);\r\n\t\t\t}\r\n\r\n\t\t\tthis.redraw(true);\r\n\r\n\t\t\tif(this.table.modules.layout.getMode() != \"fitColumns\"){\r\n\t\t\t\tcolumn.reinitializeWidth();\r\n\t\t\t}\r\n\r\n\t\t\tthis._verticalAlignHeaders();\r\n\r\n\t\t\tthis.table.rowManager.reinitialize();\r\n\r\n\t\t\tif(this.table.options.virtualDomHoz){\r\n\t\t\t\tthis.table.vdomHoz.reinitialize();\r\n\t\t\t}\r\n\r\n\t\t\tresolve(column);\r\n\t\t});\r\n\t}\r\n\r\n\t//remove column from system\r\n\tderegisterColumn(column){\r\n\t\tvar field = column.getField(),\r\n\t\tindex;\r\n\r\n\t\t//remove from field list\r\n\t\tif(field){\r\n\t\t\tdelete this.columnsByField[field];\r\n\t\t}\r\n\r\n\t\t//remove from index list\r\n\t\tindex = this.columnsByIndex.indexOf(column);\r\n\r\n\t\tif(index > -1){\r\n\t\t\tthis.columnsByIndex.splice(index, 1);\r\n\t\t}\r\n\r\n\t\t//remove from column list\r\n\t\tindex = this.columns.indexOf(column);\r\n\r\n\t\tif(index > -1){\r\n\t\t\tthis.columns.splice(index, 1);\r\n\t\t}\r\n\r\n\t\tif(this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)){\r\n\t\t\tthis.table.modules.responsiveLayout.initialize();\r\n\t\t}\r\n\r\n\t\tthis._verticalAlignHeaders();\r\n\r\n\t\tthis.redraw();\r\n\t}\r\n\r\n\t//redraw columns\r\n\tredraw(force){\r\n\t\tif(force){\r\n\t\t\tif(Helpers.elVisible(this.element)){\r\n\t\t\t\tthis._verticalAlignHeaders();\r\n\t\t\t}\r\n\r\n\t\t\tthis.table.rowManager.resetScroll();\r\n\t\t\tthis.table.rowManager.reinitialize();\r\n\t\t}\r\n\r\n\t\tif([\"fitColumns\", \"fitDataStretch\"].indexOf(this.table.modules.layout.getMode()) > -1){\r\n\t\t\tthis.table.modules.layout.layout();\r\n\t\t}else{\r\n\t\t\tif(force){\r\n\t\t\t\tthis.table.modules.layout.layout();\r\n\t\t\t}else{\r\n\t\t\t\tif(this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)){\r\n\t\t\t\t\tthis.table.modules.responsiveLayout.update();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(this.table.modExists(\"frozenColumns\")){\r\n\t\t\tthis.table.modules.frozenColumns.layout();\r\n\t\t}\r\n\r\n\t\tif(this.table.modExists(\"columnCalcs\")){\r\n\t\t\tthis.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows);\r\n\t\t}\r\n\r\n\t\tif(force){\r\n\t\t\tif(this.table.options.persistence && this.table.modExists(\"persistence\", true) && this.table.modules.persistence.config.columns){\r\n\t\t\t\tthis.table.modules.persistence.save(\"columns\");\r\n\t\t\t}\r\n\r\n\t\t\tif(this.table.modExists(\"columnCalcs\")){\r\n\t\t\t\tthis.table.modules.columnCalcs.redraw();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.table.footerManager.redraw();\r\n\t}\r\n}","//public row object\r\nexport default class RowComponent {\r\n\r\n\tconstructor (row){\r\n\t\tthis._row = row;\r\n\t}\r\n\r\n\tgetData(transform){\r\n\t\treturn this._row.getData(transform);\r\n\t}\r\n\r\n\tgetElement(){\r\n\t\treturn this._row.getElement();\r\n\t}\r\n\r\n\tgetCells(){\r\n\t\tvar cells = [];\r\n\r\n\t\tthis._row.getCells().forEach(function(cell){\r\n\t\t\tcells.push(cell.getComponent());\r\n\t\t});\r\n\r\n\t\treturn cells;\r\n\t}\r\n\r\n\tgetCell(column){\r\n\t\tvar cell = this._row.getCell(column);\r\n\t\treturn cell ? cell.getComponent() : false;\r\n\t}\r\n\r\n\tgetIndex(){\r\n\t\treturn this._row.getData(\"data\")[this._row.table.options.index];\r\n\t}\r\n\r\n\tgetPosition(active){\r\n\t\treturn this._row.table.rowManager.getRowPosition(this._row, active);\r\n\t}\r\n\r\n\tdelete(){\r\n\t\treturn this._row.delete();\r\n\t}\r\n\r\n\tscrollTo(){\r\n\t\treturn this._row.table.rowManager.scrollToRow(this._row);\r\n\t}\r\n\r\n\tpageTo(){\r\n\t\tif(this._row.table.modExists(\"page\", true)){\r\n\t\t\treturn this._row.table.modules.page.setPageToRow(this._row);\r\n\t\t}\r\n\t}\r\n\r\n\tmove(to, after){\r\n\t\tthis._row.moveToRow(to, after);\r\n\t}\r\n\r\n\tupdate(data){\r\n\t\treturn this._row.updateData(data);\r\n\t}\r\n\r\n\tnormalizeHeight(){\r\n\t\tthis._row.normalizeHeight(true);\r\n\t}\r\n\r\n\tselect(){\r\n\t\tthis._row.table.modules.selectRow.selectRows(this._row);\r\n\t}\r\n\r\n\tdeselect(){\r\n\t\tthis._row.table.modules.selectRow.deselectRows(this._row);\r\n\t}\r\n\r\n\ttoggleSelect(){\r\n\t\tthis._row.table.modules.selectRow.toggleRow(this._row);\r\n\t}\r\n\r\n\tisSelected(){\r\n\t\treturn this._row.table.modules.selectRow.isRowSelected(this._row);\r\n\t}\r\n\r\n\t_getSelf(){\r\n\t\treturn this._row;\r\n\t}\r\n\r\n\tvalidate(){\r\n\t\treturn this._row.validate();\r\n\t}\r\n\r\n\tfreeze(){\r\n\t\tif(this._row.table.modExists(\"frozenRows\", true)){\r\n\t\t\tthis._row.table.modules.frozenRows.freezeRow(this._row);\r\n\t\t}\r\n\t}\r\n\r\n\tunfreeze(){\r\n\t\tif(this._row.table.modExists(\"frozenRows\", true)){\r\n\t\t\tthis._row.table.modules.frozenRows.unfreezeRow(this._row);\r\n\t\t}\r\n\t}\r\n\r\n\tisFrozen(){\r\n\t\tif(this._row.table.modExists(\"frozenRows\", true)){\r\n\t\t\tvar index = this._row.table.modules.frozenRows.rows.indexOf(this._row);\r\n\t\t\treturn index > -1;\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t}\r\n\r\n\ttreeCollapse(){\r\n\t\tif(this._row.table.modExists(\"dataTree\", true)){\r\n\t\t\tthis._row.table.modules.dataTree.collapseRow(this._row);\r\n\t\t}\r\n\t}\r\n\r\n\ttreeExpand(){\r\n\t\tif(this._row.table.modExists(\"dataTree\", true)){\r\n\t\t\tthis._row.table.modules.dataTree.expandRow(this._row);\r\n\t\t}\r\n\t}\r\n\r\n\ttreeToggle(){\r\n\t\tif(this._row.table.modExists(\"dataTree\", true)){\r\n\t\t\tthis._row.table.modules.dataTree.toggleRow(this._row);\r\n\t\t}\r\n\t}\r\n\r\n\tgetTreeParent(){\r\n\t\tif(this._row.table.modExists(\"dataTree\", true)){\r\n\t\t\treturn this._row.table.modules.dataTree.getTreeParent(this._row);\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t}\r\n\r\n\tgetTreeChildren(){\r\n\t\tif(this._row.table.modExists(\"dataTree\", true)){\r\n\t\t\treturn this._row.table.modules.dataTree.getTreeChildren(this._row, true);\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t}\r\n\r\n\taddTreeChild(data, pos, index){\r\n\t\tif(this._row.table.modExists(\"dataTree\", true)){\r\n\t\t\treturn this._row.table.modules.dataTree.addTreeChildRow(this._row, data, pos, index);\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t}\r\n\r\n\treformat(){\r\n\t\treturn this._row.reinitialize();\r\n\t}\r\n\r\n\tgetGroup(){\r\n\t\treturn this._row.getGroup().getComponent();\r\n\t}\r\n\r\n\tgetTable(){\r\n\t\treturn this._row.table;\r\n\t}\r\n\r\n\tgetNextRow(){\r\n\t\tvar row = this._row.nextRow();\r\n\t\treturn row ? row.getComponent() : row;\r\n\t}\r\n\r\n\tgetPrevRow(){\r\n\t\tvar row = this._row.prevRow();\r\n\t\treturn row ? row.getComponent() : row;\r\n\t}\r\n}","import RowComponent from './RowComponent.js';\r\nimport Helpers from '../Helpers.js';\r\n\r\nexport default class Row {\r\n\tconstructor (data, parent, type = \"row\"){\r\n\t\tthis.table = parent.table;\r\n\t\tthis.parent = parent;\r\n\t\tthis.data = {};\r\n\t\tthis.type = type; //type of element\r\n\t\tthis.element = false;\r\n\t\tthis.modules = {}; //hold module variables;\r\n\t\tthis.cells = [];\r\n\t\tthis.height = 0; //hold element height\r\n\t\tthis.heightStyled = \"\"; //hold element height prestyled to improve render efficiency\r\n\t\tthis.manualHeight = false; //user has manually set row height\r\n\t\tthis.outerHeight = 0; //holde lements outer height\r\n\t\tthis.initialized = false; //element has been rendered\r\n\t\tthis.heightInitialized = false; //element has resized cells to fit\r\n\r\n\t\tthis.component = null;\r\n\r\n\t\tthis.created = false;\r\n\r\n\t\tthis.setData(data);\r\n\t}\r\n\r\n\tcreate(){\r\n\t\tif(!this.created){\r\n\t\t\tthis.created = true;\r\n\t\t\tthis.generateElement();\r\n\t\t}\r\n\t}\r\n\r\n\tcreateElement (){\r\n\t\tvar el = document.createElement(\"div\");\r\n\r\n\t\tel.classList.add(\"tabulator-row\");\r\n\t\tel.setAttribute(\"role\", \"row\");\r\n\r\n\t\tthis.element = el;\r\n\t}\r\n\r\n\tgetElement(){\r\n\t\tthis.create();\r\n\t\treturn this.element;\r\n\t}\r\n\r\n\tdetachElement(){\r\n\t\tif (this.element && this.element.parentNode){\r\n\t\t\tthis.element.parentNode.removeChild(this.element);\r\n\t\t}\r\n\t}\r\n\r\n\tgenerateElement(){\r\n\t\tvar dblTap,\ttapHold, tap;\r\n\r\n\t\tthis.createElement();\r\n\r\n\t\t//set row selection characteristics\r\n\t\tif(this.table.options.selectable !== false && this.table.modExists(\"selectRow\")){\r\n\t\t\tthis.table.modules.selectRow.initializeRow(this);\r\n\t\t}\r\n\r\n\t\t//setup movable rows\r\n\t\tif(this.table.options.movableRows !== false && this.table.modExists(\"moveRow\")){\r\n\t\t\tthis.table.modules.moveRow.initializeRow(this);\r\n\t\t}\r\n\r\n\t\t//setup data tree\r\n\t\tif(this.table.options.dataTree !== false && this.table.modExists(\"dataTree\")){\r\n\t\t\tthis.table.modules.dataTree.initializeRow(this);\r\n\t\t}\r\n\r\n\t\t//setup column colapse container\r\n\t\tif(this.table.options.responsiveLayout === \"collapse\" && this.table.modExists(\"responsiveLayout\")){\r\n\t\t\tthis.table.modules.responsiveLayout.initializeRow(this);\r\n\t\t}\r\n\r\n\t\t//set column menu\r\n\t\tif((this.table.options.rowContextMenu || this.table.options.rowClickMenu) && this.table.modExists(\"menu\")){\r\n\t\t\tthis.table.modules.menu.initializeRow(this);\r\n\t\t}\r\n\r\n\t\t//handle row click events\r\n\t\tif (this.table.options.rowClick){\r\n\t\t\tthis.element.addEventListener(\"click\", (e) => {\r\n\t\t\t\tthis.table.options.rowClick(e, this.getComponent());\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif (this.table.options.rowDblClick){\r\n\t\t\tthis.element.addEventListener(\"dblclick\", (e) => {\r\n\t\t\t\tthis.table.options.rowDblClick(e, this.getComponent());\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif (this.table.options.rowContext){\r\n\t\t\tthis.element.addEventListener(\"contextmenu\", (e) => {\r\n\t\t\t\tthis.table.options.rowContext(e, this.getComponent());\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\t//handle mouse events\r\n\t\tif (this.table.options.rowMouseEnter){\r\n\t\t\tthis.element.addEventListener(\"mouseenter\", (e) => {\r\n\t\t\t\tthis.table.options.rowMouseEnter(e, this.getComponent());\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif (this.table.options.rowMouseLeave){\r\n\t\t\tthis.element.addEventListener(\"mouseleave\", (e) => {\r\n\t\t\t\tthis.table.options.rowMouseLeave(e, this.getComponent());\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif (this.table.options.rowMouseOver){\r\n\t\t\tthis.element.addEventListener(\"mouseover\", (e) => {\r\n\t\t\t\tthis.table.options.rowMouseOver(e, this.getComponent());\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif (this.table.options.rowMouseOut){\r\n\t\t\tthis.element.addEventListener(\"mouseout\", (e) => {\r\n\t\t\t\tthis.table.options.rowMouseOut(e, this.getComponent());\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif (this.table.options.rowMouseMove){\r\n\t\t\tthis.element.addEventListener(\"mousemove\", (e) => {\r\n\t\t\t\tthis.table.options.rowMouseMove(e, this.getComponent());\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif (this.table.options.rowTap){\r\n\r\n\t\t\ttap = false;\r\n\r\n\t\t\tthis.element.addEventListener(\"touchstart\", (e) => {\r\n\t\t\t\ttap = true;\r\n\t\t\t}, {passive: true});\r\n\r\n\t\t\tthis.element.addEventListener(\"touchend\", (e) => {\r\n\t\t\t\tif(tap){\r\n\t\t\t\t\tthis.table.options.rowTap(e, this.getComponent());\r\n\t\t\t\t}\r\n\r\n\t\t\t\ttap = false;\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif (this.table.options.rowDblTap){\r\n\r\n\t\t\tdblTap = null;\r\n\r\n\t\t\tthis.element.addEventListener(\"touchend\", (e) => {\r\n\t\t\t\tif(dblTap){\r\n\t\t\t\t\tclearTimeout(dblTap);\r\n\t\t\t\t\tdblTap = null;\r\n\r\n\t\t\t\t\tthis.table.options.rowDblTap(e, this.getComponent());\r\n\t\t\t\t}else{\r\n\r\n\t\t\t\t\tdblTap = setTimeout(() => {\r\n\t\t\t\t\t\tclearTimeout(dblTap);\r\n\t\t\t\t\t\tdblTap = null;\r\n\t\t\t\t\t}, 300);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif (this.table.options.rowTapHold){\r\n\r\n\t\t\ttapHold = null;\r\n\r\n\t\t\tthis.element.addEventListener(\"touchstart\", (e) => {\r\n\t\t\t\tclearTimeout(tapHold);\r\n\r\n\t\t\t\ttapHold = setTimeout(() => {\r\n\t\t\t\t\tclearTimeout(tapHold);\r\n\t\t\t\t\ttapHold = null;\r\n\t\t\t\t\ttap = false;\r\n\t\t\t\t\tthis.table.options.rowTapHold(e, this.getComponent());\r\n\t\t\t\t}, 1000);\r\n\r\n\t\t\t}, {passive: true});\r\n\r\n\t\t\tthis.element.addEventListener(\"touchend\", (e) => {\r\n\t\t\t\tclearTimeout(tapHold);\r\n\t\t\t\ttapHold = null;\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tgenerateCells(){\r\n\t\tthis.cells = this.table.columnManager.generateCells(this);\r\n\t}\r\n\r\n\t//functions to setup on first render\r\n\tinitialize(force){\r\n\t\tthis.create();\r\n\r\n\t\tif(!this.initialized || force){\r\n\r\n\t\t\tthis.deleteCells();\r\n\r\n\t\t\twhile(this.element.firstChild) this.element.removeChild(this.element.firstChild);\r\n\r\n\t\t\t//handle frozen cells\r\n\t\t\tif(this.table.modExists(\"frozenColumns\")){\r\n\t\t\t\tthis.table.modules.frozenColumns.layoutRow(this);\r\n\t\t\t}\r\n\r\n\t\t\tthis.generateCells();\r\n\r\n\t\t\tif(this.table.options.virtualDomHoz && this.table.vdomHoz.initialized){\r\n\t\t\t\tthis.table.vdomHoz.initializeRow(this);\r\n\t\t\t}else{\r\n\t\t\t\tthis.cells.forEach((cell) => {\r\n\t\t\t\t\tthis.element.appendChild(cell.getElement());\r\n\t\t\t\t\tcell.cellRendered();\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\tif(force){\r\n\t\t\t\tthis.normalizeHeight();\r\n\t\t\t}\r\n\r\n\t\t\t//setup movable rows\r\n\t\t\tif(this.table.options.dataTree && this.table.modExists(\"dataTree\")){\r\n\t\t\t\tthis.table.modules.dataTree.layoutRow(this);\r\n\t\t\t}\r\n\r\n\t\t\t//setup column colapse container\r\n\t\t\tif(this.table.options.responsiveLayout === \"collapse\" && this.table.modExists(\"responsiveLayout\")){\r\n\t\t\t\tthis.table.modules.responsiveLayout.layoutRow(this);\r\n\t\t\t}\r\n\r\n\t\t\tif(this.table.options.rowFormatter){\r\n\t\t\t\tthis.table.options.rowFormatter(this.getComponent());\r\n\t\t\t}\r\n\r\n\t\t\t//set resizable handles\r\n\t\t\tif(this.table.options.resizableRows && this.table.modExists(\"resizeRows\")){\r\n\t\t\t\tthis.table.modules.resizeRows.initializeRow(this);\r\n\t\t\t}\r\n\r\n\t\t\tthis.initialized = true;\r\n\t\t}else{\r\n\t\t\tif(this.table.options.virtualDomHoz){\r\n\t\t\t\tthis.table.vdomHoz.reinitializeRow(this);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\treinitializeHeight(){\r\n\t\tthis.heightInitialized = false;\r\n\r\n\t\tif(this.element && this.element.offsetParent !== null){\r\n\t\t\tthis.normalizeHeight(true);\r\n\t\t}\r\n\t}\r\n\r\n\treinitialize(children){\r\n\t\tthis.initialized = false;\r\n\t\tthis.heightInitialized = false;\r\n\r\n\t\tif(!this.manualHeight){\r\n\t\t\tthis.height = 0;\r\n\t\t\tthis.heightStyled = \"\";\r\n\t\t}\r\n\r\n\t\tif(this.element && this.element.offsetParent !== null){\r\n\t\t\tthis.initialize(true);\r\n\t\t}\r\n\r\n\t\tif(this.table.options.dataTree && this.table.modExists(\"dataTree\", true)){\r\n\t\t\tthis.table.modules.dataTree.getTreeChildren(this, false, true).forEach(function(child){\r\n\t\t\t\tchild.reinitialize(true);\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\t//get heights when doing bulk row style calcs in virtual DOM\r\n\tcalcHeight(force){\r\n\r\n\t\tvar maxHeight = 0,\r\n\t\tminHeight = this.table.options.resizableRows ? this.element.clientHeight : 0;\r\n\r\n\t\tthis.cells.forEach(function(cell){\r\n\t\t\tvar height = cell.getHeight();\r\n\t\t\tif(height > maxHeight){\r\n\t\t\t\tmaxHeight = height;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tif(force){\r\n\t\t\tthis.height = Math.max(maxHeight, minHeight);\r\n\t\t}else{\r\n\t\t\tthis.height = this.manualHeight ? this.height : Math.max(maxHeight, minHeight);\r\n\t\t}\r\n\r\n\t\tthis.heightStyled = this.height ? this.height + \"px\" : \"\";\r\n\t\tthis.outerHeight = this.element.offsetHeight;\r\n\t}\r\n\r\n\t//set of cells\r\n\tsetCellHeight(){\r\n\t\tthis.cells.forEach(function(cell){\r\n\t\t\tcell.setHeight();\r\n\t\t});\r\n\r\n\t\tthis.heightInitialized = true;\r\n\t}\r\n\r\n\tclearCellHeight(){\r\n\t\tthis.cells.forEach(function(cell){\r\n\t\t\tcell.clearHeight();\r\n\t\t});\r\n\t}\r\n\r\n\t//normalize the height of elements in the row\r\n\tnormalizeHeight(force){\r\n\r\n\t\tif(force){\r\n\t\t\tthis.clearCellHeight();\r\n\t\t}\r\n\r\n\t\tthis.calcHeight(force);\r\n\r\n\t\tthis.setCellHeight();\r\n\t}\r\n\r\n\t//set height of rows\r\n\tsetHeight(height, force){\r\n\t\tif(this.height != height || force){\r\n\r\n\t\t\tthis.manualHeight = true;\r\n\r\n\t\t\tthis.height = height;\r\n\t\t\tthis.heightStyled = height ? height + \"px\" : \"\";\r\n\r\n\t\t\tthis.setCellHeight();\r\n\r\n\t\t\t// this.outerHeight = this.element.outerHeight();\r\n\t\t\tthis.outerHeight = this.element.offsetHeight;\r\n\t\t}\r\n\t}\r\n\r\n\t//return rows outer height\r\n\tgetHeight(){\r\n\t\treturn this.outerHeight;\r\n\t}\r\n\r\n\t//return rows outer Width\r\n\tgetWidth(){\r\n\t\treturn this.element.offsetWidth;\r\n\t}\r\n\r\n\t//////////////// Cell Management /////////////////\r\n\tdeleteCell(cell){\r\n\t\tvar index = this.cells.indexOf(cell);\r\n\r\n\t\tif(index > -1){\r\n\t\t\tthis.cells.splice(index, 1);\r\n\t\t}\r\n\t}\r\n\r\n\t//////////////// Data Management /////////////////\r\n\tsetData(data){\r\n\t\tif(this.table.modExists(\"mutator\")){\r\n\t\t\tdata = this.table.modules.mutator.transformRow(data, \"data\");\r\n\t\t}\r\n\r\n\t\tthis.data = data;\r\n\r\n\t\tif(this.table.options.reactiveData && this.table.modExists(\"reactiveData\", true)){\r\n\t\t\tthis.table.modules.reactiveData.watchRow(this);\r\n\t\t}\r\n\t}\r\n\r\n\t//update the rows data\r\n\tupdateData(updatedData){\r\n\t\tvar visible = this.element && Helpers.elVisible(this.element),\r\n\t\ttempData = {},\r\n\t\tnewRowData;\r\n\r\n\t\treturn new Promise((resolve, reject) => {\r\n\r\n\t\t\tif(typeof updatedData === \"string\"){\r\n\t\t\t\tupdatedData = JSON.parse(updatedData);\r\n\t\t\t}\r\n\r\n\t\t\tif(this.table.options.reactiveData && this.table.modExists(\"reactiveData\", true)){\r\n\t\t\t\tthis.table.modules.reactiveData.block();\r\n\t\t\t}\r\n\r\n\t\t\t//mutate incomming data if needed\r\n\t\t\tif(this.table.modExists(\"mutator\")){\r\n\r\n\t\t\t\ttempData = Object.assign(tempData, this.data);\r\n\t\t\t\ttempData = Object.assign(tempData, updatedData);\r\n\r\n\t\t\t\tnewRowData = this.table.modules.mutator.transformRow(tempData, \"data\", updatedData);\r\n\t\t\t}else{\r\n\t\t\t\tnewRowData = updatedData;\r\n\t\t\t}\r\n\r\n\t\t\t//set data\r\n\t\t\tfor (var attrname in newRowData) {\r\n\t\t\t\tthis.data[attrname] = newRowData[attrname];\r\n\t\t\t}\r\n\r\n\t\t\tif(this.table.options.reactiveData && this.table.modExists(\"reactiveData\", true)){\r\n\t\t\t\tthis.table.modules.reactiveData.unblock();\r\n\t\t\t}\r\n\r\n\t\t\t//update affected cells only\r\n\t\t\tfor (var attrname in updatedData) {\r\n\r\n\t\t\t\tlet columns = this.table.columnManager.getColumnsByFieldRoot(attrname);\r\n\r\n\t\t\t\tcolumns.forEach((column) => {\r\n\t\t\t\t\tlet cell = this.getCell(column.getField());\r\n\r\n\t\t\t\t\tif(cell){\r\n\t\t\t\t\t\tlet value = column.getFieldValue(newRowData);\r\n\t\t\t\t\t\tif(cell.getValue() != value){\r\n\t\t\t\t\t\t\tcell.setValueProcessData(value);\r\n\r\n\t\t\t\t\t\t\tif(visible){\r\n\t\t\t\t\t\t\t\tcell.cellRendered();\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\tif(this.table.options.groupUpdateOnCellEdit && this.table.options.groupBy && this.table.modExists(\"groupRows\")) {\r\n\t\t\t\tthis.table.modules.groupRows.reassignRowToGroup(this.row);\r\n\t\t\t}\r\n\r\n\t\t\t//Partial reinitialization if visible\r\n\t\t\tif(visible){\r\n\t\t\t\tthis.normalizeHeight(true);\r\n\r\n\t\t\t\tif(this.table.options.rowFormatter){\r\n\t\t\t\t\tthis.table.options.rowFormatter(this.getComponent());\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tthis.initialized = false;\r\n\t\t\t\tthis.height = 0;\r\n\t\t\t\tthis.heightStyled = \"\";\r\n\t\t\t}\r\n\r\n\t\t\tif(this.table.options.dataTree !== false && this.table.modExists(\"dataTree\") && this.table.modules.dataTree.redrawNeeded(updatedData)){\r\n\t\t\t\tthis.table.modules.dataTree.initializeRow(this);\r\n\r\n\t\t\t\tif(visible){\r\n\t\t\t\t\tthis.table.modules.dataTree.layoutRow(this);\r\n\t\t\t\t\tthis.table.rowManager.refreshActiveData(\"tree\", false, true);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\r\n\t\t\t//this.reinitialize();\r\n\r\n\t\t\tthis.table.options.rowUpdated.call(this.table, this.getComponent());\r\n\r\n\t\t\tif(this.table.options.dataChanged){\r\n\t\t\t\tthis.table.options.dataChanged.call(this.table, this.table.rowManager.getData());\r\n\t\t\t}\r\n\r\n\t\t\tresolve();\r\n\t\t});\r\n\t}\r\n\r\n\tgetData(transform){\r\n\t\tif(transform){\r\n\t\t\tif(this.table.modExists(\"accessor\")){\r\n\t\t\t\treturn this.table.modules.accessor.transformRow(this, transform);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this.data;\r\n\t}\r\n\r\n\tgetCell(column){\r\n\t\tvar match = false;\r\n\r\n\t\tcolumn = this.table.columnManager.findColumn(column);\r\n\r\n\t\tmatch = this.cells.find(function(cell){\r\n\t\t\treturn cell.column === column;\r\n\t\t});\r\n\r\n\t\treturn match;\r\n\t}\r\n\r\n\tgetCellIndex(findCell){\r\n\t\treturn this.cells.findIndex(function(cell){\r\n\t\t\treturn cell === findCell;\r\n\t\t});\r\n\t}\r\n\r\n\tfindNextEditableCell(index){\r\n\t\tvar nextCell = false;\r\n\r\n\t\tif(index < this.cells.length-1){\r\n\t\t\tfor(var i = index+1; i < this.cells.length; i++){\r\n\t\t\t\tlet cell = this.cells[i];\r\n\r\n\t\t\t\tif(cell.column.modules.edit && Helpers.elVisible(cell.getElement())){\r\n\t\t\t\t\tlet allowEdit = true;\r\n\r\n\t\t\t\t\tif(typeof cell.column.modules.edit.check == \"function\"){\r\n\t\t\t\t\t\tallowEdit = cell.column.modules.edit.check(cell.getComponent());\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif(allowEdit){\r\n\t\t\t\t\t\tnextCell = cell;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn nextCell;\r\n\t}\r\n\r\n\tfindPrevEditableCell(index){\r\n\t\tvar prevCell = false;\r\n\r\n\t\tif(index > 0){\r\n\t\t\tfor(var i = index-1; i >= 0; i--){\r\n\t\t\t\tlet cell = this.cells[i],\r\n\t\t\t\tallowEdit = true;\r\n\r\n\t\t\t\tif(cell.column.modules.edit && Helpers.elVisible(cell.getElement())){\r\n\t\t\t\t\tif(typeof cell.column.modules.edit.check == \"function\"){\r\n\t\t\t\t\t\tallowEdit = cell.column.modules.edit.check(cell.getComponent());\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif(allowEdit){\r\n\t\t\t\t\t\tprevCell = cell;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn prevCell;\r\n\t}\r\n\r\n\tgetCells(){\r\n\t\treturn this.cells;\r\n\t}\r\n\r\n\tnextRow(){\r\n\t\tvar row = this.table.rowManager.nextDisplayRow(this, true);\r\n\t\treturn row || false;\r\n\t}\r\n\r\n\tprevRow(){\r\n\t\tvar row = this.table.rowManager.prevDisplayRow(this, true);\r\n\t\treturn row || false;\r\n\t}\r\n\r\n\tmoveToRow(to, before){\r\n\t\tvar toRow = this.table.rowManager.findRow(to);\r\n\r\n\t\tif(toRow){\r\n\t\t\tthis.table.rowManager.moveRowActual(this, toRow, !before);\r\n\t\t\tthis.table.rowManager.refreshActiveData(\"display\", false, true);\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Move Error - No matching row found:\", to);\r\n\t\t}\r\n\t}\r\n\r\n\tvalidate(){\r\n\t\tvar invalid = [];\r\n\r\n\t\tthis.cells.forEach(function(cell){\r\n\t\t\tif(!cell.validate()){\r\n\t\t\t\tinvalid.push(cell.getComponent());\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn invalid.length ? invalid : true;\r\n\t}\r\n\r\n\t///////////////////// Actions /////////////////////\r\n\tdelete(){\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tvar index, rows;\r\n\r\n\t\t\tif(this.table.options.history && this.table.modExists(\"history\")){\r\n\r\n\t\t\t\tif(this.table.options.groupBy && this.table.modExists(\"groupRows\")){\r\n\t\t\t\t\trows = this.getGroup().rows\r\n\t\t\t\t\tindex = rows.indexOf(this);\r\n\r\n\t\t\t\t\tif(index){\r\n\t\t\t\t\t\tindex = rows[index-1];\r\n\t\t\t\t\t}\r\n\t\t\t\t}else{\r\n\t\t\t\t\tindex = this.table.rowManager.getRowIndex(this);\r\n\r\n\t\t\t\t\tif(index){\r\n\t\t\t\t\t\tindex = this.table.rowManager.rows[index-1];\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.table.modules.history.action(\"rowDelete\", this, {data:this.getData(), pos:!index, index:index});\r\n\t\t\t}\r\n\r\n\t\t\tthis.deleteActual();\r\n\r\n\t\t\tresolve();\r\n\t\t});\r\n\t}\r\n\r\n\tdeleteActual(blockRedraw){\r\n\t\tvar index = this.table.rowManager.getRowIndex(this);\r\n\r\n\t\tthis.detatchModules();\r\n\r\n\t\t// if(this.table.options.dataTree && this.table.modExists(\"dataTree\")){\r\n\t\t// \tthis.table.modules.dataTree.collapseRow(this, true);\r\n\t\t// }\r\n\r\n\t\t//remove any reactive data watchers from row object\r\n\t\tif(this.table.options.reactiveData && this.table.modExists(\"reactiveData\", true)){\r\n\t\t\t// this.table.modules.reactiveData.unwatchRow(this);\r\n\t\t}\r\n\r\n\t\t//remove from group\r\n\t\tif(this.modules.group){\r\n\t\t\tthis.modules.group.removeRow(this);\r\n\t\t}\r\n\r\n\t\tthis.table.rowManager.deleteRow(this, blockRedraw);\r\n\r\n\t\tthis.deleteCells();\r\n\r\n\t\tthis.initialized = false;\r\n\t\tthis.heightInitialized = false;\r\n\t\tthis.element = false;\r\n\r\n\t\tif(this.table.options.dataTree && this.table.modExists(\"dataTree\", true)){\r\n\t\t\tthis.table.modules.dataTree.rowDelete(this);\r\n\t\t}\r\n\r\n\t\t//recalc column calculations if present\r\n\t\tif(this.table.modExists(\"columnCalcs\")){\r\n\t\t\tif(this.table.options.groupBy && this.table.modExists(\"groupRows\")){\r\n\t\t\t\tthis.table.modules.columnCalcs.recalcRowGroup(this);\r\n\t\t\t}else{\r\n\t\t\t\tthis.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tdetatchModules(){\r\n\t\t//deselect row if it is selected\r\n\t\tif(this.table.modExists(\"selectRow\")){\r\n\t\t\tthis.table.modules.selectRow._deselectRow(this, true);\r\n\t\t}\r\n\r\n\t\t//cancel edit if row is currently being edited\r\n\t\tif(this.table.modExists(\"edit\")){\r\n\t\t\tif(this.table.modules.edit.currentCell.row === this){\r\n\t\t\t\tthis.table.modules.edit.cancelEdit();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(this.table.modExists(\"frozenRows\")){\r\n\t\t\tthis.table.modules.frozenRows.detachRow(this);\r\n\t\t}\r\n\t}\r\n\r\n\tdeleteCells(){\r\n\t\tvar cellCount = this.cells.length;\r\n\r\n\t\tfor(let i = 0; i < cellCount; i++){\r\n\t\t\tthis.cells[0].delete();\r\n\t\t}\r\n\t}\r\n\r\n\twipe(){\r\n\t\tthis.detatchModules();\r\n\t\tthis.deleteCells();\r\n\r\n\t\tif(this.element){\r\n\t\t\twhile(this.element.firstChild) this.element.removeChild(this.element.firstChild);\r\n\r\n\t\t\tif(this.element.parentNode){\r\n\t\t\t\tthis.element.parentNode.removeChild(this.element);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.element = false;\r\n\t\tthis.modules = {};\r\n\t}\r\n\r\n\tgetGroup(){\r\n\t\treturn this.modules.group || false;\r\n\t}\r\n\r\n\t//////////////// Object Generation /////////////////\r\n\tgetComponent(){\r\n\t\tif(!this.component){\r\n\t\t\tthis.component = new RowComponent(this);\r\n\t\t}\r\n\r\n\t\treturn this.component;\r\n\t}\r\n}","import Row from './row/Row.js';\r\nimport Helpers from './Helpers.js';\r\n\r\nexport default class RowManager {\r\n\r\n\tconstructor(table){\r\n\t\tthis.table = table;\r\n\t\tthis.element = this.createHolderElement(); //containing element\r\n\t\tthis.tableElement = this.createTableElement(); //table element\r\n\t\tthis.heightFixer = this.createTableElement(); //table element\r\n\t\tthis.columnManager = null; //hold column manager object\r\n\t\tthis.height = 0; //hold height of table element\r\n\r\n\t\tthis.firstRender = false; //handle first render\r\n\t\tthis.renderMode = \"virtual\"; //current rendering mode\r\n\t\tthis.fixedHeight = false; //current rendering mode\r\n\r\n\t\tthis.rows = []; //hold row data objects\r\n\t\tthis.activeRows = []; //rows currently available to on display in the table\r\n\t\tthis.activeRowsCount = 0; //count of active rows\r\n\r\n\t\tthis.displayRows = []; //rows currently on display in the table\r\n\t\tthis.displayRowsCount = 0; //count of display rows\r\n\r\n\t\tthis.scrollTop = 0;\r\n\t\tthis.scrollLeft = 0;\r\n\r\n\t\tthis.vDomRowHeight = 20; //approximation of row heights for padding\r\n\r\n\t\tthis.vDomTop = 0; //hold position for first rendered row in the virtual DOM\r\n\t\tthis.vDomBottom = 0; //hold possition for last rendered row in the virtual DOM\r\n\r\n\t\tthis.vDomScrollPosTop = 0; //last scroll position of the vDom top;\r\n\t\tthis.vDomScrollPosBottom = 0; //last scroll position of the vDom bottom;\r\n\r\n\t\tthis.vDomTopPad = 0; //hold value of padding for top of virtual DOM\r\n\t\tthis.vDomBottomPad = 0; //hold value of padding for bottom of virtual DOM\r\n\r\n\t\tthis.vDomMaxRenderChain = 90; //the maximum number of dom elements that can be rendered in 1 go\r\n\r\n\t\tthis.vDomWindowBuffer = 0; //window row buffer before removing elements, to smooth scrolling\r\n\r\n\t\tthis.vDomWindowMinTotalRows = 20; //minimum number of rows to be generated in virtual dom (prevent buffering issues on tables with tall rows)\r\n\t\tthis.vDomWindowMinMarginRows = 5; //minimum number of rows to be generated in virtual dom margin\r\n\r\n\t\tthis.vDomTopNewRows = []; //rows to normalize after appending to optimize render speed\r\n\t\tthis.vDomBottomNewRows = []; //rows to normalize after appending to optimize render speed\r\n\r\n\t\tthis.rowNumColumn = false; //hold column component for row number column\r\n\r\n\t\tthis.redrawBlock = false; //prevent redraws to allow multiple data manipulations becore continuing\r\n\t\tthis.redrawBlockRestoreConfig = false; //store latest redraw function calls for when redraw is needed\r\n\t\tthis.redrawBlockRederInPosition = false; //store latest redraw function calls for when redraw is needed\r\n\t}\r\n\r\n\t//////////////// Setup Functions /////////////////\r\n\r\n\tcreateHolderElement (){\r\n\t\tvar el = document.createElement(\"div\");\r\n\r\n\t\tel.classList.add(\"tabulator-tableHolder\");\r\n\t\tel.setAttribute(\"tabindex\", 0);\r\n\r\n\t\treturn el;\r\n\t}\r\n\r\n\tcreateTableElement (){\r\n\t\tvar el = document.createElement(\"div\");\r\n\r\n\t\tel.classList.add(\"tabulator-table\");\r\n\r\n\t\treturn el;\r\n\t}\r\n\r\n\t//return containing element\r\n\tgetElement(){\r\n\t\treturn this.element;\r\n\t}\r\n\r\n\t//return table element\r\n\tgetTableElement(){\r\n\t\treturn this.tableElement;\r\n\t}\r\n\r\n\t//return position of row in table\r\n\tgetRowPosition(row, active){\r\n\t\tif(active){\r\n\t\t\treturn this.activeRows.indexOf(row);\r\n\t\t}else{\r\n\t\t\treturn this.rows.indexOf(row);\r\n\t\t}\r\n\t}\r\n\r\n\t//link to column manager\r\n\tsetColumnManager(manager){\r\n\t\tthis.columnManager = manager;\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tthis.setRenderMode();\r\n\r\n\t\t//initialize manager\r\n\t\tthis.element.appendChild(this.tableElement);\r\n\r\n\t\tthis.firstRender = true;\r\n\r\n\t\t//scroll header along with table body\r\n\t\tthis.element.addEventListener(\"scroll\", () => {\r\n\t\t\tvar left = this.element.scrollLeft;\r\n\r\n\t\t\t//handle horizontal scrolling\r\n\t\t\tif(this.scrollLeft != left){\r\n\t\t\t\tthis.columnManager.scrollHorizontal(left);\r\n\r\n\t\t\t\tif(this.table.options.groupBy){\r\n\t\t\t\t\tthis.table.modules.groupRows.scrollHeaders(left);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(this.table.modExists(\"columnCalcs\")){\r\n\t\t\t\t\tthis.table.modules.columnCalcs.scrollHorizontal(left);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.table.options.scrollHorizontal(left);\r\n\t\t\t}\r\n\r\n\t\t\tthis.scrollLeft = left;\r\n\t\t});\r\n\r\n\t\t//handle virtual dom scrolling\r\n\t\tif(this.renderMode === \"virtual\"){\r\n\t\t\tthis.element.addEventListener(\"scroll\", () => {\r\n\t\t\t\tvar top = this.element.scrollTop;\r\n\t\t\t\tvar dir = this.scrollTop > top;\r\n\r\n\t\t\t\t//handle verical scrolling\r\n\t\t\t\tif(this.scrollTop != top){\r\n\t\t\t\t\tthis.scrollTop = top;\r\n\t\t\t\t\tthis.scrollVertical(dir);\r\n\r\n\t\t\t\t\tif(this.table.options.ajaxProgressiveLoad == \"scroll\"){\r\n\t\t\t\t\t\tthis.table.modules.ajax.nextPage(this.element.scrollHeight - this.element.clientHeight - top);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tthis.table.options.scrollVertical(top);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tthis.scrollTop = top;\r\n\t\t\t\t}\r\n\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\t////////////////// Row Manipulation //////////////////\r\n\tfindRow(subject){\r\n\t\tif(typeof subject == \"object\"){\r\n\t\t\tif(subject instanceof Row){\r\n\t\t\t\t//subject is row element\r\n\t\t\t\treturn subject;\r\n\t\t\t}else if(subject instanceof RowComponent){\r\n\t\t\t\t//subject is public row component\r\n\t\t\t\treturn subject._getSelf() || false;\r\n\t\t\t}else if(typeof HTMLElement !== \"undefined\" && subject instanceof HTMLElement){\r\n\t\t\t\t//subject is a HTML element of the row\r\n\t\t\t\tlet match = this.rows.find((row) => {\r\n\t\t\t\t\treturn row.getElement() === subject;\r\n\t\t\t\t});\r\n\r\n\t\t\t\treturn match || false;\r\n\t\t\t}\r\n\t\t}else if(typeof subject == \"undefined\" || subject === null){\r\n\t\t\treturn false;\r\n\t\t}else{\r\n\t\t\t//subject should be treated as the index of the row\r\n\t\t\tlet match = this.rows.find((row) => {\r\n\t\t\t\treturn row.data[this.table.options.index] == subject;\r\n\t\t\t});\r\n\r\n\t\t\treturn match || false;\r\n\t\t}\r\n\r\n\t\t//catch all for any other type of input\r\n\t\treturn false;\r\n\t}\r\n\r\n\tgetRowFromDataObject(data){\r\n\t\tvar match = this.rows.find((row) => {\r\n\t\t\treturn row.data === data;\r\n\t\t});\r\n\r\n\t\treturn match || false;\r\n\t}\r\n\r\n\tgetRowFromPosition(position, active){\r\n\t\tif(active){\r\n\t\t\treturn this.activeRows[position];\r\n\t\t}else{\r\n\t\t\treturn this.rows[position];\r\n\t\t}\r\n\t}\r\n\r\n\tscrollToRow(row, position, ifVisible){\r\n\t\tvar rowIndex = this.getDisplayRows().indexOf(row),\r\n\t\trowEl = row.getElement(),\r\n\t\trowTop,\r\n\t\toffset = 0;\r\n\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tif(rowIndex > -1){\r\n\r\n\t\t\t\tif(typeof position === \"undefined\"){\r\n\t\t\t\t\tposition = this.table.options.scrollToRowPosition;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(typeof ifVisible === \"undefined\"){\r\n\t\t\t\t\tifVisible = this.table.options.scrollToRowIfVisible;\r\n\t\t\t\t}\r\n\r\n\r\n\t\t\t\tif(position === \"nearest\"){\r\n\t\t\t\t\tswitch(this.renderMode){\r\n\t\t\t\t\t\tcase\"classic\":\r\n\t\t\t\t\t\trowTop = Helpers.elOffset(rowEl).top;\r\n\t\t\t\t\t\tposition = Math.abs(this.element.scrollTop - rowTop) > Math.abs(this.element.scrollTop + this.element.clientHeight - rowTop) ? \"bottom\" : \"top\";\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase\"virtual\":\r\n\t\t\t\t\t\tposition = Math.abs(this.vDomTop - rowIndex) > Math.abs(this.vDomBottom - rowIndex) ? \"bottom\" : \"top\";\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//check row visibility\r\n\t\t\t\tif(!ifVisible){\r\n\t\t\t\t\tif(Helpers.elVisible(rowEl)){\r\n\t\t\t\t\t\toffset = Helpers.elOffset(rowEl).top - Helpers.elOffset(this.element).top;\r\n\r\n\t\t\t\t\t\tif(offset > 0 && offset < this.element.clientHeight - rowEl.offsetHeight){\r\n\t\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//scroll to row\r\n\t\t\t\tswitch(this.renderMode){\r\n\t\t\t\t\tcase\"classic\":\r\n\t\t\t\t\tthis.element.scrollTop = Helpers.elOffset(rowEl).top - Helpers.elOffset(this.element).top + this.element.scrollTop;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase\"virtual\":\r\n\t\t\t\t\tthis._virtualRenderFill(rowIndex, true);\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//align to correct position\r\n\t\t\t\tswitch(position){\r\n\t\t\t\t\tcase \"middle\":\r\n\t\t\t\t\tcase \"center\":\r\n\r\n\t\t\t\t\tif(this.element.scrollHeight - this.element.scrollTop == this.element.clientHeight){\r\n\t\t\t\t\t\tthis.element.scrollTop = this.element.scrollTop + (rowEl.offsetTop - this.element.scrollTop) - ((this.element.scrollHeight - rowEl.offsetTop) / 2);\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tthis.element.scrollTop = this.element.scrollTop - (this.element.clientHeight / 2);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase \"bottom\":\r\n\r\n\t\t\t\t\tif(this.element.scrollHeight - this.element.scrollTop == this.element.clientHeight){\r\n\t\t\t\t\t\tthis.element.scrollTop = this.element.scrollTop - (this.element.scrollHeight - rowEl.offsetTop) + rowEl.offsetHeight;\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tthis.element.scrollTop = this.element.scrollTop - this.element.clientHeight + rowEl.offsetHeight;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tresolve();\r\n\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Scroll Error - Row not visible\");\r\n\t\t\t\treject(\"Scroll Error - Row not visible\");\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t////////////////// Data Handling //////////////////\r\n\tsetData(data, renderInPosition, columnsChanged){\r\n\t\treturn new Promise((resolve, reject)=>{\r\n\t\t\tif(renderInPosition && this.getDisplayRows().length){\r\n\t\t\t\tif(this.table.options.pagination){\r\n\t\t\t\t\tthis._setDataActual(data, true);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tthis.reRenderInPosition(() => {\r\n\t\t\t\t\t\tthis._setDataActual(data);\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tif(this.table.options.autoColumns && columnsChanged){\r\n\t\t\t\t\tthis.table.columnManager.generateColumnsFromRowData(data);\r\n\t\t\t\t}\r\n\t\t\t\tthis.resetScroll();\r\n\r\n\t\t\t\tthis._setDataActual(data);\r\n\r\n\t\t\t}\r\n\r\n\t\t\tresolve();\r\n\t\t});\r\n\t}\r\n\r\n\t_setDataActual(data, renderInPosition){\r\n\t\tthis.table.options.dataLoading.call(this.table, data);\r\n\r\n\t\tthis._wipeElements();\r\n\r\n\t\tif(this.table.options.history && this.table.modExists(\"history\")){\r\n\t\t\tthis.table.modules.history.clear();\r\n\t\t}\r\n\r\n\t\tif(Array.isArray(data)){\r\n\r\n\t\t\tif(this.table.modExists(\"selectRow\")){\r\n\t\t\t\tthis.table.modules.selectRow.clearSelectionData();\r\n\t\t\t}\r\n\r\n\t\t\tif(this.table.options.reactiveData && this.table.modExists(\"reactiveData\", true)){\r\n\t\t\t\tthis.table.modules.reactiveData.watchData(data);\r\n\t\t\t}\r\n\r\n\t\t\tdata.forEach((def, i) => {\r\n\t\t\t\tif(def && typeof def === \"object\"){\r\n\t\t\t\t\tvar row = new Row(def, this);\r\n\t\t\t\t\tthis.rows.push(row);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.warn(\"Data Loading Warning - Invalid row data detected and ignored, expecting object but received:\", def);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tthis.refreshActiveData(false, false, renderInPosition);\r\n\r\n\t\t\tthis.table.options.dataLoaded.call(this.table, data);\r\n\t\t}else{\r\n\t\t\tconsole.error(\"Data Loading Error - Unable to process data due to invalid data type \\nExpecting: array \\nReceived: \", typeof data, \"\\nData: \", data);\r\n\t\t}\r\n\t}\r\n\r\n\t_wipeElements(){\r\n\t\tthis.rows.forEach((row) => {\r\n\t\t\trow.wipe();\r\n\t\t});\r\n\r\n\t\tif(this.table.options.groupBy && this.table.modExists(\"groupRows\")){\r\n\t\t\tthis.table.modules.groupRows.wipe();\r\n\t\t}\r\n\r\n\t\tthis.rows = [];\r\n\t\tthis.activeRows = [];\r\n\t\tthis.activeRowsCount = 0;\r\n\t\tthis.displayRows = [];\r\n\t\tthis.displayRowsCount = 0;\r\n\r\n\t\tthis.adjustTableSize();\r\n\t}\r\n\r\n\tdeleteRow(row, blockRedraw){\r\n\t\tvar allIndex = this.rows.indexOf(row),\r\n\t\tactiveIndex = this.activeRows.indexOf(row);\r\n\r\n\t\tif(activeIndex > -1){\r\n\t\t\tthis.activeRows.splice(activeIndex, 1);\r\n\t\t}\r\n\r\n\t\tif(allIndex > -1){\r\n\t\t\tthis.rows.splice(allIndex, 1);\r\n\t\t}\r\n\r\n\t\tthis.setActiveRows(this.activeRows);\r\n\r\n\t\tthis.displayRowIterator((rows) => {\r\n\t\t\tvar displayIndex = rows.indexOf(row);\r\n\r\n\t\t\tif(displayIndex > -1){\r\n\t\t\t\trows.splice(displayIndex, 1);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tif(!blockRedraw){\r\n\t\t\tthis.reRenderInPosition();\r\n\t\t}\r\n\r\n\t\tthis.regenerateRowNumbers();\r\n\r\n\t\tthis.table.options.rowDeleted.call(this.table, row.getComponent());\r\n\r\n\t\tif(this.table.options.dataChanged){\r\n\t\t\tthis.table.options.dataChanged.call(this.table, this.getData());\r\n\t\t}\r\n\r\n\t\tif(this.table.options.groupBy && this.table.modExists(\"groupRows\")){\r\n\t\t\tthis.table.modules.groupRows.updateGroupRows(true);\r\n\t\t}else if(this.table.options.pagination && this.table.modExists(\"page\")){\r\n\t\t\tthis.refreshActiveData(false, false, true);\r\n\t\t}else{\r\n\t\t\tif(this.table.options.pagination && this.table.modExists(\"page\")){\r\n\t\t\t\tthis.refreshActiveData(\"page\");\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\taddRow(data, pos, index, blockRedraw){\r\n\t\tvar row = this.addRowActual(data, pos, index, blockRedraw);\r\n\r\n\t\tif(this.table.options.history && this.table.modExists(\"history\")){\r\n\t\t\tthis.table.modules.history.action(\"rowAdd\", row, {data:data, pos:pos, index:index});\r\n\t\t}\r\n\r\n\t\treturn row;\r\n\t}\r\n\r\n\t//add multiple rows\r\n\taddRows(data, pos, index){\r\n\t\tvar length = 0,\r\n\t\trows = [];\r\n\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tpos = this.findAddRowPos(pos);\r\n\r\n\t\t\tif(!Array.isArray(data)){\r\n\t\t\t\tdata = [data];\r\n\t\t\t}\r\n\r\n\t\t\tlength = data.length - 1;\r\n\r\n\t\t\tif((typeof index == \"undefined\" && pos) || (typeof index !== \"undefined\" && !pos)){\r\n\t\t\t\tdata.reverse();\r\n\t\t\t}\r\n\r\n\t\t\tdata.forEach((item, i) => {\r\n\t\t\t\tvar row = this.addRow(item, pos, index, true);\r\n\t\t\t\trows.push(row);\r\n\t\t\t});\r\n\r\n\t\t\tif(this.table.options.groupBy && this.table.modExists(\"groupRows\")){\r\n\t\t\t\tthis.table.modules.groupRows.updateGroupRows(true);\r\n\t\t\t}else if(this.table.options.pagination && this.table.modExists(\"page\")){\r\n\t\t\t\tthis.refreshActiveData(false, false, true);\r\n\t\t\t}else{\r\n\t\t\t\tthis.reRenderInPosition();\r\n\t\t\t}\r\n\r\n\t\t\t//recalc column calculations if present\r\n\t\t\tif(this.table.modExists(\"columnCalcs\")){\r\n\t\t\t\tthis.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows);\r\n\t\t\t}\r\n\r\n\t\t\tthis.regenerateRowNumbers();\r\n\t\t\tresolve(rows);\r\n\t\t});\r\n\t}\r\n\r\n\tfindAddRowPos(pos){\r\n\t\tif(typeof pos === \"undefined\"){\r\n\t\t\tpos = this.table.options.addRowPos;\r\n\t\t}\r\n\r\n\t\tif(pos === \"pos\"){\r\n\t\t\tpos = true;\r\n\t\t}\r\n\r\n\t\tif(pos === \"bottom\"){\r\n\t\t\tpos = false;\r\n\t\t}\r\n\r\n\t\treturn pos;\r\n\t}\r\n\r\n\taddRowActual(data, pos, index, blockRedraw){\r\n\t\tvar row = data instanceof Row ? data : new Row(data || {}, this),\r\n\t\ttop = this.findAddRowPos(pos),\r\n\t\tallIndex = -1,\r\n\t\tactiveIndex, dispRows;\r\n\r\n\t\tif(!index && this.table.options.pagination && this.table.options.paginationAddRow == \"page\"){\r\n\t\t\tdispRows = this.getDisplayRows();\r\n\r\n\t\t\tif(top){\r\n\t\t\t\tif(dispRows.length){\r\n\t\t\t\t\tindex = dispRows[0];\r\n\t\t\t\t}else{\r\n\t\t\t\t\tif(this.activeRows.length){\r\n\t\t\t\t\t\tindex = this.activeRows[this.activeRows.length-1];\r\n\t\t\t\t\t\ttop = false;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tif(dispRows.length){\r\n\t\t\t\t\tindex = dispRows[dispRows.length - 1];\r\n\t\t\t\t\ttop = dispRows.length < this.table.modules.page.getPageSize() ? false : true;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(typeof index !== \"undefined\"){\r\n\t\t\tindex = this.findRow(index);\r\n\t\t}\r\n\r\n\t\tif(this.table.options.groupBy && this.table.modExists(\"groupRows\")){\r\n\t\t\tthis.table.modules.groupRows.assignRowToGroup(row);\r\n\r\n\t\t\tvar groupRows = row.getGroup().rows;\r\n\r\n\t\t\tif(groupRows.length > 1){\r\n\r\n\t\t\t\tif(!index || (index && groupRows.indexOf(index) == -1)){\r\n\t\t\t\t\tif(top){\r\n\t\t\t\t\t\tif(groupRows[0] !== row){\r\n\t\t\t\t\t\t\tindex = groupRows[0];\r\n\t\t\t\t\t\t\tthis._moveRowInArray(row.getGroup().rows, row, index, !top);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tif(groupRows[groupRows.length -1] !== row){\r\n\t\t\t\t\t\t\tindex = groupRows[groupRows.length -1];\r\n\t\t\t\t\t\t\tthis._moveRowInArray(row.getGroup().rows, row, index, !top);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}else{\r\n\t\t\t\t\tthis._moveRowInArray(row.getGroup().rows, row, index, !top);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(index){\r\n\t\t\tallIndex = this.rows.indexOf(index);\r\n\t\t}\r\n\r\n\t\tif(index && allIndex > -1){\r\n\t\t\tactiveIndex = this.activeRows.indexOf(index);\r\n\r\n\t\t\tthis.displayRowIterator(function(rows){\r\n\t\t\t\tvar displayIndex = rows.indexOf(index);\r\n\r\n\t\t\t\tif(displayIndex > -1){\r\n\t\t\t\t\trows.splice((top ? displayIndex : displayIndex + 1), 0, row);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tif(activeIndex > -1){\r\n\t\t\t\tthis.activeRows.splice((top ? activeIndex : activeIndex + 1), 0, row);\r\n\t\t\t}\r\n\r\n\t\t\tthis.rows.splice((top ? allIndex : allIndex + 1), 0, row);\r\n\r\n\t\t}else{\r\n\r\n\t\t\tif(top){\r\n\r\n\t\t\t\tthis.displayRowIterator(function(rows){\r\n\t\t\t\t\trows.unshift(row);\r\n\t\t\t\t});\r\n\r\n\t\t\t\tthis.activeRows.unshift(row);\r\n\t\t\t\tthis.rows.unshift(row);\r\n\t\t\t}else{\r\n\t\t\t\tthis.displayRowIterator(function(rows){\r\n\t\t\t\t\trows.push(row);\r\n\t\t\t\t});\r\n\r\n\t\t\t\tthis.activeRows.push(row);\r\n\t\t\t\tthis.rows.push(row);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.setActiveRows(this.activeRows);\r\n\r\n\t\tthis.table.options.rowAdded.call(this.table, row.getComponent());\r\n\r\n\t\tif(this.table.options.dataChanged){\r\n\t\t\tthis.table.options.dataChanged.call(this.table, this.getData());\r\n\t\t}\r\n\r\n\t\tif(!blockRedraw){\r\n\t\t\tthis.reRenderInPosition();\r\n\t\t}\r\n\r\n\t\treturn row;\r\n\t}\r\n\r\n\tmoveRow(from, to, after){\r\n\t\tif(this.table.options.history && this.table.modExists(\"history\")){\r\n\t\t\tthis.table.modules.history.action(\"rowMove\", from, {posFrom:this.getRowPosition(from), posTo:this.getRowPosition(to), to:to, after:after});\r\n\t\t}\r\n\r\n\t\tthis.moveRowActual(from, to, after);\r\n\r\n\t\tthis.regenerateRowNumbers();\r\n\r\n\t\tthis.table.options.rowMoved.call(this.table, from.getComponent());\r\n\t}\r\n\r\n\tmoveRowActual(from, to, after){\r\n\t\tthis._moveRowInArray(this.rows, from, to, after);\r\n\t\tthis._moveRowInArray(this.activeRows, from, to, after);\r\n\r\n\t\tthis.displayRowIterator((rows) => {\r\n\t\t\tthis._moveRowInArray(rows, from, to, after);\r\n\t\t});\r\n\r\n\t\tif(this.table.options.groupBy && this.table.modExists(\"groupRows\")){\r\n\r\n\t\t\tif(!after && to instanceof Group){\r\n\t\t\t\tto = this.table.rowManager.prevDisplayRow(from) || to;\r\n\t\t\t}\r\n\r\n\t\t\tvar toGroup = to.getGroup();\r\n\t\t\tvar fromGroup = from.getGroup();\r\n\r\n\t\t\tif(toGroup === fromGroup){\r\n\t\t\t\tthis._moveRowInArray(toGroup.rows, from, to, after);\r\n\t\t\t}else{\r\n\t\t\t\tif(fromGroup){\r\n\t\t\t\t\tfromGroup.removeRow(from);\r\n\t\t\t\t}\r\n\r\n\t\t\t\ttoGroup.insertRow(from, to, after);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t_moveRowInArray(rows, from, to, after){\r\n\t\tvar\tfromIndex, toIndex, start, end;\r\n\r\n\t\tif(from !== to){\r\n\r\n\t\t\tfromIndex = rows.indexOf(from);\r\n\r\n\t\t\tif (fromIndex > -1) {\r\n\r\n\t\t\t\trows.splice(fromIndex, 1);\r\n\r\n\t\t\t\ttoIndex = rows.indexOf(to);\r\n\r\n\t\t\t\tif (toIndex > -1) {\r\n\r\n\t\t\t\t\tif(after){\r\n\t\t\t\t\t\trows.splice(toIndex+1, 0, from);\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\trows.splice(toIndex, 0, from);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}else{\r\n\t\t\t\t\trows.splice(fromIndex, 0, from);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t//restyle rows\r\n\t\t\tif(rows === this.getDisplayRows()){\r\n\r\n\t\t\t\tstart = fromIndex < toIndex ? fromIndex : toIndex;\r\n\t\t\t\tend = toIndex > fromIndex ? toIndex : fromIndex +1;\r\n\r\n\t\t\t\tfor(let i = start; i <= end; i++){\r\n\t\t\t\t\tif(rows[i]){\r\n\t\t\t\t\t\tthis.styleRow(rows[i], i);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tclearData(){\r\n\t\tthis.setData([]);\r\n\t}\r\n\r\n\tgetRowIndex(row){\r\n\t\treturn this.findRowIndex(row, this.rows);\r\n\t}\r\n\r\n\tgetDisplayRowIndex(row){\r\n\t\tvar index = this.getDisplayRows().indexOf(row);\r\n\t\treturn index > -1 ? index : false;\r\n\t}\r\n\r\n\tnextDisplayRow(row, rowOnly){\r\n\t\tvar index = this.getDisplayRowIndex(row),\r\n\t\tnextRow = false;\r\n\r\n\r\n\t\tif(index !== false && index < this.displayRowsCount -1){\r\n\t\t\tnextRow = this.getDisplayRows()[index+1];\r\n\t\t}\r\n\r\n\t\tif(nextRow && (!(nextRow instanceof Row) || nextRow.type != \"row\")){\r\n\t\t\treturn this.nextDisplayRow(nextRow, rowOnly);\r\n\t\t}\r\n\r\n\t\treturn nextRow;\r\n\t}\r\n\r\n\tprevDisplayRow(row, rowOnly){\r\n\t\tvar index = this.getDisplayRowIndex(row),\r\n\t\tprevRow = false;\r\n\r\n\t\tif(index){\r\n\t\t\tprevRow = this.getDisplayRows()[index-1];\r\n\t\t}\r\n\r\n\t\tif(rowOnly && prevRow && (!(prevRow instanceof Row) || prevRow.type != \"row\")){\r\n\t\t\treturn this.prevDisplayRow(prevRow, rowOnly);\r\n\t\t}\r\n\r\n\t\treturn prevRow;\r\n\t}\r\n\r\n\tfindRowIndex(row, list){\r\n\t\tvar rowIndex;\r\n\r\n\t\trow = this.findRow(row);\r\n\r\n\t\tif(row){\r\n\t\t\trowIndex = list.indexOf(row);\r\n\r\n\t\t\tif(rowIndex > -1){\r\n\t\t\t\treturn rowIndex;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t}\r\n\r\n\tgetData(active, transform){\r\n\t\tvar output = [],\r\n\t\trows = this.getRows(active);\r\n\r\n\t\trows.forEach(function(row){\r\n\t\t\tif(row.type == \"row\"){\r\n\t\t\t\toutput.push(row.getData(transform || \"data\"));\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tgetComponents(active){\r\n\t\tvar\toutput = [],\r\n\t\trows = this.getRows(active);\r\n\r\n\t\trows.forEach(function(row){\r\n\t\t\toutput.push(row.getComponent());\r\n\t\t});\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tgetDataCount(active){\r\n\t\tvar rows = this.getRows(active);\r\n\r\n\t\treturn rows.length;\r\n\t}\r\n\r\n\t_genRemoteRequest(){\r\n\t\tvar table = this.table,\r\n\t\toptions = table.options,\r\n\t\tparams = {};\r\n\r\n\t\tif(table.modExists(\"page\")){\r\n\t\t\t//set sort data if defined\r\n\t\t\tif(options.ajaxSorting){\r\n\t\t\t\tlet sorters = this.table.modules.sort.getSort();\r\n\r\n\t\t\t\tsorters.forEach(function(item){\r\n\t\t\t\t\tdelete item.column;\r\n\t\t\t\t});\r\n\r\n\t\t\t\tparams[this.table.modules.page.paginationDataSentNames.sorters] = sorters;\r\n\t\t\t}\r\n\r\n\t\t\t//set filter data if defined\r\n\t\t\tif(options.ajaxFiltering){\r\n\t\t\t\tlet filters = this.table.modules.filter.getFilters(true, true);\r\n\r\n\t\t\t\tparams[this.table.modules.page.paginationDataSentNames.filters] = filters;\r\n\t\t\t}\r\n\r\n\r\n\t\t\tthis.table.modules.ajax.setParams(params, true);\r\n\t\t}\r\n\r\n\t\ttable.modules.ajax.sendRequest()\r\n\t\t.then((data)=>{\r\n\t\t\tthis._setDataActual(data, true);\r\n\t\t})\r\n\t\t.catch((e)=>{});\r\n\t}\r\n\r\n\t//choose the path to refresh data after a filter update\r\n\tfilterRefresh(){\r\n\t\tvar table = this.table,\r\n\t\toptions = table.options,\r\n\t\tleft = this.scrollLeft;\r\n\r\n\t\tif(options.ajaxFiltering){\r\n\t\t\tif(options.pagination == \"remote\" && table.modExists(\"page\")){\r\n\t\t\t\ttable.modules.page.reset(true);\r\n\t\t\t\ttable.modules.page.setPage(1).then(()=>{}).catch(()=>{});\r\n\t\t\t}else if(options.ajaxProgressiveLoad){\r\n\t\t\t\ttable.modules.ajax.loadData().then(()=>{}).catch(()=>{});\r\n\t\t\t}else{\r\n\t\t\t\t//assume data is url, make ajax call to url to get data\r\n\t\t\t\tthis._genRemoteRequest();\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tthis.refreshActiveData(\"filter\");\r\n\t\t}\r\n\r\n\t\tthis.scrollHorizontal(left);\r\n\t}\r\n\r\n\t//choose the path to refresh data after a sorter update\r\n\tsorterRefresh(loadOrignalData){\r\n\t\tvar table = this.table,\r\n\t\toptions = this.table.options,\r\n\t\tleft = this.scrollLeft;\r\n\r\n\t\tif(options.ajaxSorting){\r\n\t\t\tif((options.pagination == \"remote\" || options.progressiveLoad) && table.modExists(\"page\")){\r\n\t\t\t\ttable.modules.page.reset(true);\r\n\t\t\t\ttable.modules.page.setPage(1).then(()=>{}).catch(()=>{});\r\n\t\t\t}else if(options.ajaxProgressiveLoad){\r\n\t\t\t\ttable.modules.ajax.loadData().then(()=>{}).catch(()=>{});\r\n\t\t\t}else{\r\n\t\t\t\t//assume data is url, make ajax call to url to get data\r\n\t\t\t\tthis._genRemoteRequest();\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tthis.refreshActiveData(loadOrignalData ? \"filter\" : \"sort\");\r\n\t\t}\r\n\r\n\t\tthis.scrollHorizontal(left);\r\n\t}\r\n\r\n\tscrollHorizontal(left){\r\n\t\tthis.scrollLeft = left;\r\n\t\tthis.element.scrollLeft = left;\r\n\r\n\t\tif(this.table.options.groupBy){\r\n\t\t\tthis.table.modules.groupRows.scrollHeaders(left);\r\n\t\t}\r\n\r\n\t\tif(this.table.modExists(\"columnCalcs\")){\r\n\t\t\tthis.table.modules.columnCalcs.scrollHorizontal(left);\r\n\t\t}\r\n\t}\r\n\r\n\t//set active data set\r\n\trefreshActiveData(stage, skipStage, renderInPosition){\r\n\t\tvar table = this.table,\r\n\t\tcascadeOrder = [\"all\", \"filter\", \"sort\", \"display\", \"freeze\", \"group\", \"tree\", \"page\"],\r\n\t\tdisplayIndex;\r\n\r\n\t\tif(this.redrawBlock){\r\n\r\n\t\t\tif(!this.redrawBlockRestoreConfig || (cascadeOrder.indexOf(stage) < cascadeOrder.indexOf(this.redrawBlockRestoreConfig.stage))){\r\n\t\t\t\tthis.redrawBlockRestoreConfig = {\r\n\t\t\t\t\tstage: stage,\r\n\t\t\t\t\tskipStage: skipStage,\r\n\t\t\t\t\trenderInPosition: renderInPosition,\r\n\t\t\t\t};\r\n\t\t\t}\r\n\r\n\t\t\treturn;\r\n\t\t}else{\r\n\r\n\t\t\tif(this.table.modExists(\"edit\")){\r\n\t\t\t\tthis.table.modules.edit.cancelEdit();\r\n\t\t\t}\r\n\r\n\t\t\tif(!stage){\r\n\t\t\t\tstage = \"all\";\r\n\t\t\t}\r\n\r\n\t\t\tif(table.options.selectable && !table.options.selectablePersistence && table.modExists(\"selectRow\")){\r\n\t\t\t\ttable.modules.selectRow.deselectRows();\r\n\t\t\t}\r\n\r\n\t\t\t//cascade through data refresh stages\r\n\t\t\tswitch(stage){\r\n\t\t\t\tcase \"all\":\r\n\r\n\t\t\t\tcase \"filter\":\r\n\t\t\t\tif(!skipStage){\r\n\t\t\t\t\tif(table.modExists(\"filter\")){\r\n\t\t\t\t\t\tthis.setActiveRows(table.modules.filter.filter(this.rows));\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tthis.setActiveRows(this.rows.slice(0));\r\n\t\t\t\t\t}\r\n\t\t\t\t}else{\r\n\t\t\t\t\tskipStage = false;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tcase \"sort\":\r\n\t\t\t\tif(!skipStage){\r\n\t\t\t\t\tif(table.modExists(\"sort\")){\r\n\t\t\t\t\t\ttable.modules.sort.sort(this.activeRows);\r\n\t\t\t\t\t}\r\n\t\t\t\t}else{\r\n\t\t\t\t\tskipStage = false;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//regenerate row numbers for row number formatter if in use\r\n\t\t\t\tthis.regenerateRowNumbers();\r\n\r\n\t\t\t\t//generic stage to allow for pipeline trigger after the data manipulation stage\r\n\t\t\t\tcase \"display\":\r\n\t\t\t\tthis.resetDisplayRows();\r\n\r\n\t\t\t\tcase \"freeze\":\r\n\t\t\t\tif(!skipStage){\r\n\t\t\t\t\tif(this.table.modExists(\"frozenRows\")){\r\n\t\t\t\t\t\tif(table.modules.frozenRows.isFrozen()){\r\n\t\t\t\t\t\t\tif(!table.modules.frozenRows.getDisplayIndex()){\r\n\t\t\t\t\t\t\t\ttable.modules.frozenRows.setDisplayIndex(this.getNextDisplayIndex());\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\tdisplayIndex = table.modules.frozenRows.getDisplayIndex();\r\n\r\n\t\t\t\t\t\t\tdisplayIndex = this.setDisplayRows(table.modules.frozenRows.getRows(this.getDisplayRows(displayIndex - 1)), displayIndex);\r\n\r\n\t\t\t\t\t\t\tif(displayIndex !== true){\r\n\t\t\t\t\t\t\t\ttable.modules.frozenRows.setDisplayIndex(displayIndex);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}else{\r\n\t\t\t\t\tskipStage = false;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tcase \"group\":\r\n\t\t\t\tif(!skipStage){\r\n\t\t\t\t\tif(table.options.groupBy && table.modExists(\"groupRows\")){\r\n\r\n\t\t\t\t\t\tif(!table.modules.groupRows.getDisplayIndex()){\r\n\t\t\t\t\t\t\ttable.modules.groupRows.setDisplayIndex(this.getNextDisplayIndex());\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tdisplayIndex = table.modules.groupRows.getDisplayIndex();\r\n\r\n\t\t\t\t\t\tdisplayIndex = this.setDisplayRows(table.modules.groupRows.getRows(this.getDisplayRows(displayIndex - 1)), displayIndex);\r\n\r\n\t\t\t\t\t\tif(displayIndex !== true){\r\n\t\t\t\t\t\t\ttable.modules.groupRows.setDisplayIndex(displayIndex);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}else{\r\n\t\t\t\t\tskipStage = false;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tcase \"tree\":\r\n\r\n\t\t\t\tif(!skipStage){\r\n\t\t\t\t\tif(table.options.dataTree && table.modExists(\"dataTree\")){\r\n\t\t\t\t\t\tif(!table.modules.dataTree.getDisplayIndex()){\r\n\t\t\t\t\t\t\ttable.modules.dataTree.setDisplayIndex(this.getNextDisplayIndex());\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tdisplayIndex = table.modules.dataTree.getDisplayIndex();\r\n\r\n\t\t\t\t\t\tdisplayIndex = this.setDisplayRows(table.modules.dataTree.getRows(this.getDisplayRows(displayIndex - 1)), displayIndex);\r\n\r\n\t\t\t\t\t\tif(displayIndex !== true){\r\n\t\t\t\t\t\t\ttable.modules.dataTree.setDisplayIndex(displayIndex);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}else{\r\n\t\t\t\t\tskipStage = false;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(table.options.pagination && table.modExists(\"page\") && !renderInPosition){\r\n\t\t\t\t\tif(table.modules.page.getMode() == \"local\"){\r\n\t\t\t\t\t\ttable.modules.page.reset();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tcase \"page\":\r\n\t\t\t\tif(!skipStage){\r\n\t\t\t\t\tif(table.options.pagination && table.modExists(\"page\")){\r\n\r\n\t\t\t\t\t\tif(!table.modules.page.getDisplayIndex()){\r\n\t\t\t\t\t\t\ttable.modules.page.setDisplayIndex(this.getNextDisplayIndex());\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tdisplayIndex = table.modules.page.getDisplayIndex();\r\n\r\n\t\t\t\t\t\tif(table.modules.page.getMode() == \"local\"){\r\n\t\t\t\t\t\t\ttable.modules.page.setMaxRows(this.getDisplayRows(displayIndex - 1).length);\r\n\t\t\t\t\t\t}\r\n\r\n\r\n\t\t\t\t\t\tdisplayIndex = this.setDisplayRows(table.modules.page.getRows(this.getDisplayRows(displayIndex - 1)), displayIndex);\r\n\r\n\t\t\t\t\t\tif(displayIndex !== true){\r\n\t\t\t\t\t\t\ttable.modules.page.setDisplayIndex(displayIndex);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}else{\r\n\t\t\t\t\tskipStage = false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\r\n\t\t\tif(Helpers.elVisible(this.element)){\r\n\t\t\t\tif(renderInPosition){\r\n\t\t\t\t\tthis.reRenderInPosition();\r\n\t\t\t\t}else{\r\n\r\n\t\t\t\t\tif(stage === \"all\" && this.table.options.virtualDomHoz){\r\n\t\t\t\t\t\tthis.table.vdomHoz.dataChange();\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tthis.renderTable();\r\n\r\n\t\t\t\t\tif(table.options.layoutColumnsOnNewData){\r\n\t\t\t\t\t\tthis.table.columnManager.redraw(true);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif(table.modExists(\"columnCalcs\")){\r\n\t\t\t\ttable.modules.columnCalcs.recalc(this.activeRows);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//regenerate row numbers for row number formatter if in use\r\n\tregenerateRowNumbers(){\r\n\t\tif(this.rowNumColumn){\r\n\t\t\tthis.activeRows.forEach((row) => {\r\n\t\t\t\tvar cell = row.getCell(this.rowNumColumn);\r\n\r\n\t\t\t\tif(cell){\r\n\t\t\t\t\tcell._generateContents();\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tsetActiveRows(activeRows){\r\n\t\tthis.activeRows = activeRows;\r\n\t\tthis.activeRowsCount = this.activeRows.length;\r\n\t}\r\n\r\n\t//reset display rows array\r\n\tresetDisplayRows(){\r\n\t\tthis.displayRows = [];\r\n\r\n\t\tthis.displayRows.push(this.activeRows.slice(0));\r\n\r\n\t\tthis.displayRowsCount = this.displayRows[0].length;\r\n\r\n\t\tif(this.table.modExists(\"frozenRows\")){\r\n\t\t\tthis.table.modules.frozenRows.setDisplayIndex(0);\r\n\t\t}\r\n\r\n\t\tif(this.table.options.groupBy && this.table.modExists(\"groupRows\")){\r\n\t\t\tthis.table.modules.groupRows.setDisplayIndex(0);\r\n\t\t}\r\n\r\n\t\tif(this.table.options.pagination && this.table.modExists(\"page\")){\r\n\t\t\tthis.table.modules.page.setDisplayIndex(0);\r\n\t\t}\r\n\t}\r\n\r\n\tgetNextDisplayIndex(){\r\n\t\treturn this.displayRows.length;\r\n\t}\r\n\r\n\t//set display row pipeline data\r\n\tsetDisplayRows(displayRows, index){\r\n\r\n\t\tvar output = true;\r\n\r\n\t\tif(index && typeof this.displayRows[index] != \"undefined\"){\r\n\t\t\tthis.displayRows[index] = displayRows;\r\n\t\t\toutput = true;\r\n\t\t}else{\r\n\t\t\tthis.displayRows.push(displayRows)\r\n\t\t\toutput = index = this.displayRows.length -1;\r\n\t\t}\r\n\r\n\t\tif(index == this.displayRows.length -1){\r\n\t\t\tthis.displayRowsCount = this.displayRows[this.displayRows.length -1].length;\r\n\t\t}\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tgetDisplayRows(index){\r\n\t\tif(typeof index == \"undefined\"){\r\n\t\t\treturn this.displayRows.length ? this.displayRows[this.displayRows.length -1] : [];\r\n\t\t}else{\r\n\t\t\treturn this.displayRows[index] || [];\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tgetVisibleRows(viewable){\r\n\t\tvar topEdge = this.element.scrollTop,\r\n\t\tbottomEdge = this.element.clientHeight + topEdge,\r\n\t\ttopFound = false,\r\n\t\ttopRow = 0,\r\n\t\tbottomRow = 0,\r\n\t\trows = this.getDisplayRows();\r\n\r\n\t\tif(viewable){\r\n\r\n\t\t\tthis.getDisplayRows();\r\n\t\t\tfor(var i = this.vDomTop; i <= this.vDomBottom; i++){\r\n\t\t\t\tif(rows[i]){\r\n\t\t\t\t\tif(!topFound){\r\n\t\t\t\t\t\tif((topEdge - rows[i].getElement().offsetTop) >= 0){\r\n\t\t\t\t\t\t\ttopRow = i;\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\ttopFound = true;\r\n\r\n\t\t\t\t\t\t\tif(bottomEdge - rows[i].getElement().offsetTop >= 0){\r\n\t\t\t\t\t\t\t\tbottomRow = i;\r\n\t\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tif(bottomEdge - rows[i].getElement().offsetTop >= 0){\r\n\t\t\t\t\t\t\tbottomRow = i;\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\ttopRow = this.vDomTop;\r\n\t\t\tbottomRow = this.vDomBottom;\r\n\t\t}\r\n\r\n\t\treturn rows.slice(topRow, bottomRow + 1);\r\n\t}\r\n\r\n\t//repeat action accross display rows\r\n\tdisplayRowIterator(callback){\r\n\t\tthis.displayRows.forEach(callback);\r\n\r\n\t\tthis.displayRowsCount = this.displayRows[this.displayRows.length -1].length;\r\n\t}\r\n\r\n\t//return only actual rows (not group headers etc)\r\n\tgetRows(active){\r\n\t\tvar rows;\r\n\r\n\t\tswitch(active){\r\n\t\t\tcase \"active\":\r\n\t\t\trows = this.activeRows;\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"display\":\r\n\t\t\trows = this.table.rowManager.getDisplayRows();\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"visible\":\r\n\t\t\trows = this.getVisibleRows(true);\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"selected\":\r\n\t\t\trows = this.table.modules.selectRow.selectedRows;\r\n\t\t\tbreak;\r\n\r\n\t\t\tdefault:\r\n\t\t\trows = this.rows;\r\n\t\t}\r\n\r\n\t\treturn rows;\r\n\t}\r\n\r\n\t///////////////// Table Rendering /////////////////\r\n\t//trigger rerender of table in current position\r\n\treRenderInPosition(callback){\r\n\t\tif(this.getRenderMode() == \"virtual\"){\r\n\r\n\t\t\tif(this.redrawBlock){\r\n\t\t\t\tif(callback){\r\n\t\t\t\t\tcallback();\r\n\t\t\t\t}else{\r\n\t\t\t\t\tthis.redrawBlockRederInPosition = true;\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tvar scrollTop = this.element.scrollTop;\r\n\t\t\t\tvar topRow = false;\r\n\t\t\t\tvar topOffset = false;\r\n\r\n\t\t\t\tvar left = this.scrollLeft;\r\n\r\n\t\t\t\tvar rows = this.getDisplayRows();\r\n\r\n\t\t\t\tfor(var i = this.vDomTop; i <= this.vDomBottom; i++){\r\n\r\n\t\t\t\t\tif(rows[i]){\r\n\t\t\t\t\t\tvar diff = scrollTop - rows[i].getElement().offsetTop;\r\n\r\n\t\t\t\t\t\tif(topOffset === false || Math.abs(diff) < topOffset){\r\n\t\t\t\t\t\t\ttopOffset = diff;\r\n\t\t\t\t\t\t\ttopRow = i;\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(callback){\r\n\t\t\t\t\tcallback();\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis._virtualRenderFill((topRow === false ? this.displayRowsCount - 1 : topRow), true, topOffset || 0);\r\n\r\n\t\t\t\tthis.scrollHorizontal(left);\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tthis.renderTable();\r\n\r\n\t\t\tif(callback){\r\n\t\t\t\tcallback();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tsetRenderMode(){\r\n\r\n\t\tif(this.table.options.virtualDom){\r\n\r\n\t\t\tthis.renderMode = \"virtual\";\r\n\r\n\t\t\tif((this.table.element.clientHeight || this.table.options.height)){\r\n\t\t\t\tthis.fixedHeight = true;\r\n\t\t\t}else{\r\n\t\t\t\tthis.fixedHeight = false;\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tthis.renderMode = \"classic\";\r\n\t\t}\r\n\t}\r\n\r\n\tgetRenderMode(){\r\n\t\treturn this.renderMode;\r\n\t}\r\n\r\n\trenderTable(){\r\n\r\n\t\tthis.table.options.renderStarted.call(this.table);\r\n\r\n\t\tthis.element.scrollTop = 0;\r\n\r\n\t\tswitch(this.renderMode){\r\n\t\t\tcase \"classic\":\r\n\t\t\tthis._simpleRender();\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"virtual\":\r\n\t\t\tthis._virtualRenderFill();\r\n\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\tif(this.firstRender){\r\n\t\t\tif(this.displayRowsCount){\r\n\t\t\t\tthis.firstRender = false;\r\n\t\t\t\tthis.table.modules.layout.layout();\r\n\t\t\t}else{\r\n\t\t\t\tthis.renderEmptyScroll();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(this.table.modExists(\"frozenColumns\")){\r\n\t\t\tthis.table.modules.frozenColumns.layout();\r\n\t\t}\r\n\r\n\t\tif(!this.displayRowsCount){\r\n\t\t\tif(this.table.options.placeholder){\r\n\r\n\t\t\t\tthis.table.options.placeholder.setAttribute(\"tabulator-render-mode\", this.renderMode);\r\n\r\n\t\t\t\tthis.getElement().appendChild(this.table.options.placeholder);\r\n\t\t\t\tthis.table.options.placeholder.style.width = this.table.columnManager.getWidth() + \"px\";\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.table.options.renderComplete.call(this.table);\r\n\t}\r\n\r\n\t//simple render on heightless table\r\n\t_simpleRender(){\r\n\t\tthis._clearVirtualDom();\r\n\r\n\t\tif(this.displayRowsCount){\r\n\t\t\tthis.checkClassicModeGroupHeaderWidth();\r\n\t\t}else{\r\n\t\t\tthis.renderEmptyScroll();\r\n\t\t}\r\n\t}\r\n\r\n\tcheckClassicModeGroupHeaderWidth(){\r\n\t\tvar element = this.tableElement,\r\n\t\tonlyGroupHeaders = true;\r\n\r\n\t\tthis.getDisplayRows().forEach((row, index) => {\r\n\t\t\tthis.styleRow(row, index);\r\n\t\t\telement.appendChild(row.getElement());\r\n\t\t\trow.initialize(true);\r\n\r\n\t\t\tif(row.type !== \"group\"){\r\n\t\t\t\tonlyGroupHeaders = false;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tif(onlyGroupHeaders){\r\n\t\t\telement.style.minWidth = this.table.columnManager.getWidth() + \"px\";\r\n\t\t}else{\r\n\t\t\telement.style.minWidth = \"\";\r\n\t\t}\r\n\t}\r\n\r\n\t//show scrollbars on empty table div\r\n\trenderEmptyScroll(){\r\n\t\tif(this.table.options.placeholder){\r\n\t\t\tthis.tableElement.style.display = \"none\";\r\n\t\t}else{\r\n\t\t\tthis.tableElement.style.minWidth = this.table.columnManager.getWidth() + \"px\";\r\n\t\t\t// this.tableElement.style.minHeight = \"1px\";\r\n\t\t\t// this.tableElement.style.visibility = \"hidden\";\r\n\t\t}\r\n\t}\r\n\r\n\t_clearVirtualDom(){\r\n\t\tvar element = this.tableElement;\r\n\r\n\t\tif(this.table.options.placeholder && this.table.options.placeholder.parentNode){\r\n\t\t\tthis.table.options.placeholder.parentNode.removeChild(this.table.options.placeholder);\r\n\t\t}\r\n\r\n\t\t// element.children.detach();\r\n\t\twhile(element.firstChild) element.removeChild(element.firstChild);\r\n\r\n\t\telement.style.paddingTop = \"\";\r\n\t\telement.style.paddingBottom = \"\";\r\n\t\telement.style.minWidth = \"\";\r\n\t\telement.style.minHeight = \"\";\r\n\t\telement.style.display = \"\";\r\n\t\telement.style.visibility = \"\";\r\n\r\n\t\tthis.scrollTop = 0;\r\n\t\tthis.scrollLeft = 0;\r\n\t\tthis.vDomTop = 0;\r\n\t\tthis.vDomBottom = 0;\r\n\t\tthis.vDomTopPad = 0;\r\n\t\tthis.vDomBottomPad = 0;\r\n\t}\r\n\r\n\tstyleRow(row, index){\r\n\t\tvar rowEl = row.getElement();\r\n\r\n\t\tif(index % 2){\r\n\t\t\trowEl.classList.add(\"tabulator-row-even\");\r\n\t\t\trowEl.classList.remove(\"tabulator-row-odd\");\r\n\t\t}else{\r\n\t\t\trowEl.classList.add(\"tabulator-row-odd\");\r\n\t\t\trowEl.classList.remove(\"tabulator-row-even\");\r\n\t\t}\r\n\t}\r\n\r\n\t//full virtual render\r\n\t_virtualRenderFill(position, forceMove, offset){\r\n\t\tvar\telement = this.tableElement,\r\n\t\tholder = this.element,\r\n\t\ttopPad = 0,\r\n\t\trowsHeight = 0,\r\n\t\ttopPadHeight = 0,\r\n\t\ti = 0,\r\n\t\tonlyGroupHeaders = true,\r\n\t\trows = this.getDisplayRows();\r\n\r\n\t\tposition = position || 0;\r\n\r\n\t\toffset = offset || 0;\r\n\r\n\t\tif(!position){\r\n\t\t\tthis._clearVirtualDom();\r\n\t\t}else{\r\n\t\t\twhile(element.firstChild) element.removeChild(element.firstChild);\r\n\r\n\t\t\t//check if position is too close to bottom of table\r\n\t\t\tlet heightOccupied = (this.displayRowsCount - position + 1) * this.vDomRowHeight;\r\n\r\n\t\t\tif(heightOccupied < this.height){\r\n\t\t\t\tposition -= Math.ceil((this.height - heightOccupied ) / this.vDomRowHeight);\r\n\r\n\t\t\t\tif(position < 0){\r\n\t\t\t\t\tposition = 0;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t//calculate initial pad\r\n\t\t\ttopPad = Math.min(Math.max(Math.floor(this.vDomWindowBuffer / this.vDomRowHeight), this.vDomWindowMinMarginRows), position);\r\n\t\t\tposition -= topPad;\r\n\t\t}\r\n\r\n\t\tif(this.displayRowsCount && Helpers.elVisible(this.element)){\r\n\t\t\tthis.vDomTop = position;\r\n\r\n\t\t\tthis.vDomBottom = position -1;\r\n\r\n\t\t\twhile ((rowsHeight <= this.height + this.vDomWindowBuffer || i < this.vDomWindowMinTotalRows) && this.vDomBottom < this.displayRowsCount -1){\r\n\t\t\t\tvar index = this.vDomBottom + 1,\r\n\t\t\t\trow = rows[index],\r\n\t\t\t\trowHeight = 0;\r\n\r\n\t\t\t\tthis.styleRow(row, index);\r\n\r\n\t\t\t\telement.appendChild(row.getElement());\r\n\r\n\t\t\t\trow.initialize();\r\n\r\n\t\t\t\tif(!row.heightInitialized){\r\n\t\t\t\t\trow.normalizeHeight(true);\r\n\t\t\t\t}\r\n\r\n\t\t\t\trowHeight = row.getHeight();\r\n\r\n\t\t\t\tif(i < topPad){\r\n\t\t\t\t\ttopPadHeight += rowHeight;\r\n\t\t\t\t}else{\r\n\t\t\t\t\trowsHeight += rowHeight;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(rowHeight > this.vDomWindowBuffer){\r\n\t\t\t\t\tthis.vDomWindowBuffer = rowHeight * 2;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(row.type !== \"group\"){\r\n\t\t\t\t\tonlyGroupHeaders = false;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.vDomBottom ++;\r\n\t\t\t\ti++;\r\n\t\t\t}\r\n\r\n\t\t\tif(!position){\r\n\t\t\t\tthis.vDomTopPad = 0;\r\n\t\t\t\t//adjust rowheight to match average of rendered elements\r\n\t\t\t\tthis.vDomRowHeight = Math.floor((rowsHeight + topPadHeight) / i);\r\n\t\t\t\tthis.vDomBottomPad = this.vDomRowHeight * (this.displayRowsCount - this.vDomBottom -1);\r\n\r\n\t\t\t\tthis.vDomScrollHeight = topPadHeight + rowsHeight + this.vDomBottomPad - this.height;\r\n\t\t\t}else{\r\n\t\t\t\tthis.vDomTopPad = !forceMove ? this.scrollTop - topPadHeight : (this.vDomRowHeight * this.vDomTop) + offset;\r\n\t\t\t\tthis.vDomBottomPad = this.vDomBottom == this.displayRowsCount-1 ? 0 : Math.max(this.vDomScrollHeight - this.vDomTopPad - rowsHeight - topPadHeight, 0);\r\n\t\t\t}\r\n\r\n\t\t\telement.style.paddingTop = this.vDomTopPad + \"px\";\r\n\t\t\telement.style.paddingBottom = this.vDomBottomPad + \"px\";\r\n\r\n\t\t\tif(forceMove){\r\n\t\t\t\tthis.scrollTop = this.vDomTopPad + (topPadHeight) + offset - (this.element.scrollWidth > this.element.clientWidth ? this.element.offsetHeight - this.element.clientHeight : 0);\r\n\t\t\t}\r\n\r\n\t\t\tthis.scrollTop = Math.min(this.scrollTop, this.element.scrollHeight - this.height);\r\n\r\n\t\t\t//adjust for horizontal scrollbar if present (and not at top of table)\r\n\t\t\tif(this.element.scrollWidth > this.element.offsetWidth && forceMove){\r\n\t\t\t\tthis.scrollTop += this.element.offsetHeight - this.element.clientHeight;\r\n\t\t\t}\r\n\r\n\t\t\tthis.vDomScrollPosTop = this.scrollTop;\r\n\t\t\tthis.vDomScrollPosBottom = this.scrollTop;\r\n\r\n\t\t\tholder.scrollTop = this.scrollTop;\r\n\r\n\t\t\telement.style.minWidth = onlyGroupHeaders ? this.table.columnManager.getWidth() + \"px\" : \"\";\r\n\r\n\t\t\tif(this.table.options.groupBy){\r\n\t\t\t\tif(this.table.modules.layout.getMode() != \"fitDataFill\" && this.displayRowsCount == this.table.modules.groupRows.countGroups()){\r\n\t\t\t\t\tthis.tableElement.style.minWidth = this.table.columnManager.getWidth();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tthis.renderEmptyScroll();\r\n\t\t}\r\n\r\n\t\tif(!this.fixedHeight){\r\n\t\t\tthis.adjustTableSize();\r\n\t\t}\r\n\t}\r\n\r\n\t//handle vertical scrolling\r\n\tscrollVertical(dir){\r\n\t\tvar topDiff = this.scrollTop - this.vDomScrollPosTop;\r\n\t\tvar bottomDiff = this.scrollTop - this.vDomScrollPosBottom;\r\n\t\tvar margin = this.vDomWindowBuffer * 2;\r\n\r\n\t\tif(-topDiff > margin || bottomDiff > margin){\r\n\t\t\t//if big scroll redraw table;\r\n\t\t\tvar left = this.scrollLeft;\r\n\t\t\tthis._virtualRenderFill(Math.floor((this.element.scrollTop / this.element.scrollHeight) * this.displayRowsCount));\r\n\t\t\tthis.scrollHorizontal(left);\r\n\t\t}else{\r\n\r\n\t\t\tif(dir){\r\n\t\t\t\t//scrolling up\r\n\t\t\t\tif(topDiff < 0){\r\n\r\n\t\t\t\t\tthis._addTopRow(-topDiff);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(bottomDiff < 0){\r\n\r\n\t\t\t\t\t//hide bottom row if needed\r\n\t\t\t\t\tif(this.vDomScrollHeight - this.scrollTop > this.vDomWindowBuffer){\r\n\t\t\t\t\t\tthis._removeBottomRow(-bottomDiff);\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tthis.vDomScrollPosBottom = this.scrollTop;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\t//scrolling down\r\n\t\t\t\tif(topDiff >= 0){\r\n\r\n\t\t\t\t\t//hide top row if needed\r\n\t\t\t\t\tif(this.scrollTop > this.vDomWindowBuffer){\r\n\r\n\t\t\t\t\t\tthis._removeTopRow(topDiff);\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tthis.vDomScrollPosTop = this.scrollTop;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(bottomDiff >= 0){\r\n\r\n\t\t\t\t\tthis._addBottomRow(bottomDiff);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t_addTopRow(topDiff, i=0){\r\n\t\tvar table = this.tableElement,\r\n\t\trows = this.getDisplayRows();\r\n\r\n\t\tif(this.vDomTop){\r\n\t\t\tlet index = this.vDomTop -1,\r\n\t\t\ttopRow = rows[index],\r\n\t\t\ttopRowHeight = topRow.getHeight() || this.vDomRowHeight;\r\n\r\n\t\t\t//hide top row if needed\r\n\t\t\tif(topDiff >= topRowHeight){\r\n\t\t\t\tthis.styleRow(topRow, index);\r\n\t\t\t\ttable.insertBefore(topRow.getElement(), table.firstChild);\r\n\t\t\t\tif(!topRow.initialized || !topRow.heightInitialized){\r\n\t\t\t\t\tthis.vDomTopNewRows.push(topRow);\r\n\r\n\t\t\t\t\tif(!topRow.heightInitialized){\r\n\t\t\t\t\t\ttopRow.clearCellHeight();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\ttopRow.initialize();\r\n\r\n\t\t\t\tthis.vDomTopPad -= topRowHeight;\r\n\r\n\t\t\t\tif(this.vDomTopPad < 0){\r\n\t\t\t\t\tthis.vDomTopPad = index * this.vDomRowHeight;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(!index){\r\n\t\t\t\t\tthis.vDomTopPad = 0;\r\n\t\t\t\t}\r\n\r\n\t\t\t\ttable.style.paddingTop = this.vDomTopPad + \"px\";\r\n\t\t\t\tthis.vDomScrollPosTop -= topRowHeight;\r\n\t\t\t\tthis.vDomTop--;\r\n\t\t\t}\r\n\r\n\t\t\ttopDiff = -(this.scrollTop - this.vDomScrollPosTop);\r\n\r\n\t\t\tif(topRow.getHeight() > this.vDomWindowBuffer){\r\n\t\t\t\tthis.vDomWindowBuffer = topRow.getHeight() * 2;\r\n\t\t\t}\r\n\r\n\t\t\tif(i < this.vDomMaxRenderChain && this.vDomTop && topDiff >= (rows[this.vDomTop -1].getHeight() || this.vDomRowHeight)){\r\n\t\t\t\tthis._addTopRow(topDiff, i+1);\r\n\t\t\t}else{\r\n\t\t\t\tthis._quickNormalizeRowHeight(this.vDomTopNewRows);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t_removeTopRow(topDiff){\r\n\t\tvar table = this.tableElement,\r\n\t\ttopRow = this.getDisplayRows()[this.vDomTop],\r\n\t\ttopRowHeight = topRow.getHeight() || this.vDomRowHeight;\r\n\r\n\t\tif(topDiff >= topRowHeight){\r\n\r\n\t\t\tvar rowEl = topRow.getElement();\r\n\t\t\trowEl.parentNode.removeChild(rowEl);\r\n\r\n\t\t\tthis.vDomTopPad += topRowHeight;\r\n\t\t\ttable.style.paddingTop = this.vDomTopPad + \"px\";\r\n\t\t\tthis.vDomScrollPosTop += this.vDomTop ? topRowHeight : topRowHeight + this.vDomWindowBuffer;\r\n\t\t\tthis.vDomTop++;\r\n\r\n\t\t\ttopDiff = this.scrollTop - this.vDomScrollPosTop;\r\n\r\n\t\t\tthis._removeTopRow(topDiff);\r\n\t\t}\r\n\t}\r\n\r\n\t_addBottomRow(bottomDiff, i=0){\r\n\t\tvar table = this.tableElement,\r\n\t\trows = this.getDisplayRows();\r\n\r\n\t\tif(this.vDomBottom < this.displayRowsCount -1){\r\n\t\t\tlet index = this.vDomBottom + 1,\r\n\t\t\tbottomRow = rows[index],\r\n\t\t\tbottomRowHeight = bottomRow.getHeight() || this.vDomRowHeight;\r\n\r\n\t\t\t//hide bottom row if needed\r\n\t\t\tif(bottomDiff >= bottomRowHeight){\r\n\t\t\t\tthis.styleRow(bottomRow, index);\r\n\t\t\t\ttable.appendChild(bottomRow.getElement());\r\n\r\n\t\t\t\tif(!bottomRow.initialized || !bottomRow.heightInitialized){\r\n\t\t\t\t\tthis.vDomBottomNewRows.push(bottomRow);\r\n\r\n\t\t\t\t\tif(!bottomRow.heightInitialized){\r\n\t\t\t\t\t\tbottomRow.clearCellHeight();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tbottomRow.initialize();\r\n\r\n\t\t\t\tthis.vDomBottomPad -= bottomRowHeight;\r\n\r\n\t\t\t\tif(this.vDomBottomPad < 0 || index == this.displayRowsCount -1){\r\n\t\t\t\t\tthis.vDomBottomPad = 0;\r\n\t\t\t\t}\r\n\r\n\t\t\t\ttable.style.paddingBottom = this.vDomBottomPad + \"px\";\r\n\t\t\t\tthis.vDomScrollPosBottom += bottomRowHeight;\r\n\t\t\t\tthis.vDomBottom++;\r\n\t\t\t}\r\n\r\n\t\t\tbottomDiff = this.scrollTop - this.vDomScrollPosBottom;\r\n\r\n\t\t\tif(bottomRow.getHeight() > this.vDomWindowBuffer){\r\n\t\t\t\tthis.vDomWindowBuffer = bottomRow.getHeight() * 2;\r\n\t\t\t}\r\n\r\n\t\t\tif(i < this.vDomMaxRenderChain && this.vDomBottom < this.displayRowsCount -1 && bottomDiff >= (rows[this.vDomBottom + 1].getHeight() || this.vDomRowHeight)){\r\n\t\t\t\tthis._addBottomRow(bottomDiff, i+1);\r\n\t\t\t}else{\r\n\t\t\t\tthis._quickNormalizeRowHeight(this.vDomBottomNewRows);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t_removeBottomRow(bottomDiff){\r\n\t\tvar table = this.tableElement,\r\n\t\tbottomRow = this.getDisplayRows()[this.vDomBottom],\r\n\t\tbottomRowHeight = bottomRow.getHeight() || this.vDomRowHeight;\r\n\r\n\t\tif(bottomDiff >= bottomRowHeight){\r\n\r\n\t\t\tvar rowEl = bottomRow.getElement();\r\n\r\n\t\t\tif(rowEl.parentNode){\r\n\t\t\t\trowEl.parentNode.removeChild(rowEl);\r\n\t\t\t}\r\n\r\n\t\t\tthis.vDomBottomPad += bottomRowHeight;\r\n\r\n\t\t\tif(this.vDomBottomPad < 0){\r\n\t\t\t\tthis.vDomBottomPad = 0;\r\n\t\t\t}\r\n\r\n\t\t\ttable.style.paddingBottom = this.vDomBottomPad + \"px\";\r\n\t\t\tthis.vDomScrollPosBottom -= bottomRowHeight;\r\n\t\t\tthis.vDomBottom--;\r\n\r\n\t\t\tbottomDiff = -(this.scrollTop - this.vDomScrollPosBottom);\r\n\r\n\t\t\tthis._removeBottomRow(bottomDiff);\r\n\t\t}\r\n\t}\r\n\r\n\t_quickNormalizeRowHeight(rows){\r\n\t\trows.forEach(function(row){\r\n\t\t\trow.calcHeight();\r\n\t\t});\r\n\r\n\t\trows.forEach(function(row){\r\n\t\t\trow.setCellHeight();\r\n\t\t});\r\n\r\n\t\trows.length = 0;\r\n\t}\r\n\r\n\t//normalize height of active rows\r\n\tnormalizeHeight(){\r\n\t\tthis.activeRows.forEach(function(row){\r\n\t\t\trow.normalizeHeight();\r\n\t\t});\r\n\t}\r\n\r\n\t//adjust the height of the table holder to fit in the Tabulator element\r\n\tadjustTableSize(){\r\n\t\tvar initialHeight = this.element.clientHeight,\r\n\t\tmodExists;\r\n\r\n\t\tif(this.renderMode === \"virtual\"){\r\n\r\n\t\t\tlet otherHeight = Math.floor(this.columnManager.getElement().getBoundingClientRect().height + (this.table.footerManager && this.table.footerManager.active && !this.table.footerManager.external ? this.table.footerManager.getElement().getBoundingClientRect().height : 0));\r\n\r\n\t\t\tif(this.fixedHeight){\r\n\t\t\t\tthis.element.style.minHeight = \"calc(100% - \" + otherHeight + \"px)\";\r\n\t\t\t\tthis.element.style.height = \"calc(100% - \" + otherHeight + \"px)\";\r\n\t\t\t\tthis.element.style.maxHeight = \"calc(100% - \" + otherHeight + \"px)\";\r\n\t\t\t}else{\r\n\t\t\t\tthis.element.style.height = \"\";\r\n\t\t\t\tthis.element.style.height = (this.table.element.clientHeight - otherHeight) + \"px\";\r\n\t\t\t\tthis.element.scrollTop = this.scrollTop;\r\n\t\t\t}\r\n\r\n\t\t\tthis.height = this.element.clientHeight;\r\n\t\t\tthis.vDomWindowBuffer = this.table.options.virtualDomBuffer || this.height;\r\n\r\n\t\t\t//check if the table has changed size when dealing with variable height tables\r\n\t\t\tif(!this.fixedHeight && initialHeight != this.element.clientHeight){\r\n\t\t\t\tmodExists = this.table.modExists(\"resizeTable\");\r\n\r\n\t\t\t\tif((modExists && !this.table.modules.resizeTable.autoResize) || !modExists){\r\n\t\t\t\t\tthis.redraw();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t}\r\n\t}\r\n\r\n\t//renitialize all rows\r\n\treinitialize(){\r\n\t\tthis.rows.forEach(function(row){\r\n\t\t\trow.reinitialize(true);\r\n\t\t});\r\n\t}\r\n\r\n\t//prevent table from being redrawn\r\n\tblockRedraw (){\r\n\t\tthis.redrawBlock = true;\r\n\t\tthis.redrawBlockRestoreConfig = false;\r\n\t}\r\n\r\n\t//restore table redrawing\r\n\trestoreRedraw (){\r\n\t\tthis.redrawBlock = false;\r\n\r\n\t\tif(this.redrawBlockRestoreConfig){\r\n\t\t\tthis.refreshActiveData(this.redrawBlockRestoreConfig.stage, this.redrawBlockRestoreConfig.skipStage, this.redrawBlockRestoreConfig.renderInPosition)\r\n\r\n\t\t\tthis.redrawBlockRestoreConfig = false;\r\n\t\t}else{\r\n\t\t\tif(this.redrawBlockRederInPosition){\r\n\t\t\t\tthis.reRenderInPosition();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.redrawBlockRederInPosition = false;\r\n\t}\r\n\r\n\t//redraw table\r\n\tredraw (force){\r\n\t\tvar pos = 0,\r\n\t\tleft = this.scrollLeft;\r\n\r\n\t\tthis.adjustTableSize();\r\n\r\n\t\tthis.table.tableWidth = this.table.element.clientWidth;\r\n\r\n\t\tif(!force){\r\n\t\t\tif(this.renderMode == \"classic\"){\r\n\r\n\t\t\t\tif(this.table.options.groupBy){\r\n\t\t\t\t\tthis.refreshActiveData(\"group\", false, false);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tthis._simpleRender();\r\n\t\t\t\t}\r\n\r\n\t\t\t}else{\r\n\t\t\t\tthis.reRenderInPosition();\r\n\t\t\t\tthis.scrollHorizontal(left);\r\n\t\t\t}\r\n\r\n\t\t\tif(!this.displayRowsCount){\r\n\t\t\t\tif(this.table.options.placeholder){\r\n\t\t\t\t\tthis.getElement().appendChild(this.table.options.placeholder);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t}else{\r\n\t\t\tthis.renderTable();\r\n\t\t}\r\n\t}\r\n\r\n\tresetScroll(){\r\n\t\tthis.element.scrollLeft = 0;\r\n\t\tthis.element.scrollTop = 0;\r\n\r\n\t\tif(this.table.browser === \"ie\"){\r\n\t\t\tvar event = document.createEvent(\"Event\");\r\n\t\t\tevent.initEvent(\"scroll\", false, true);\r\n\t\t\tthis.element.dispatchEvent(event);\r\n\t\t}else{\r\n\t\t\tthis.element.dispatchEvent(new Event('scroll'));\r\n\t\t}\r\n\t}\r\n}","export default class FooterManager {\r\n\r\n\tconstructor(table){\r\n\t\tthis.table = table;\r\n\t\tthis.active = false;\r\n\t\tthis.element = this.createElement(); //containing element\r\n\t\tthis.external = false;\r\n\t\tthis.links = [];\r\n\r\n\t\tthis._initialize();\r\n\t}\r\n\r\n\tcreateElement (){\r\n\t\tvar el = document.createElement(\"div\");\r\n\r\n\t\tel.classList.add(\"tabulator-footer\");\r\n\r\n\t\treturn el;\r\n\t}\r\n\r\n\t_initialize(element){\r\n\t\tif(this.table.options.footerElement){\r\n\r\n\t\t\tswitch(typeof this.table.options.footerElement){\r\n\t\t\t\tcase \"string\":\r\n\t\t\t\tif(this.table.options.footerElement[0] === \"<\"){\r\n\t\t\t\t\tthis.element.innerHTML = this.table.options.footerElement;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tthis.external = true;\r\n\t\t\t\t\tthis.element = document.querySelector(this.table.options.footerElement);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tdefault:\r\n\t\t\t\tthis.element = this.table.options.footerElement;\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tgetElement(){\r\n\t\treturn this.element;\r\n\t}\r\n\r\n\tappend(element, parent){\r\n\t\tthis.activate(parent);\r\n\r\n\t\tthis.element.appendChild(element);\r\n\t\tthis.table.rowManager.adjustTableSize();\r\n\t}\r\n\r\n\tprepend(element, parent){\r\n\t\tthis.activate(parent);\r\n\r\n\t\tthis.element.insertBefore(element, this.element.firstChild);\r\n\t\tthis.table.rowManager.adjustTableSize();\r\n\t}\r\n\r\n\tremove(element){\r\n\t\telement.parentNode.removeChild(element);\r\n\t\tthis.deactivate();\r\n\t}\r\n\r\n\tdeactivate(force){\r\n\t\tif(!this.element.firstChild || force){\r\n\t\t\tif(!this.external){\r\n\t\t\t\tthis.element.parentNode.removeChild(this.element);\r\n\t\t\t}\r\n\t\t\tthis.active = false;\r\n\t\t}\r\n\t}\r\n\r\n\tactivate(parent){\r\n\t\tif(!this.active){\r\n\t\t\tthis.active = true;\r\n\t\t\tif(!this.external){\r\n\t\t\t\tthis.table.element.appendChild(this.getElement());\r\n\t\t\t\tthis.table.element.style.display = '';\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(parent){\r\n\t\t\tthis.links.push(parent);\r\n\t\t}\r\n\t}\r\n\r\n\tredraw(){\r\n\t\tthis.links.forEach(function(link){\r\n\t\t\tlink.footerRedraw();\r\n\t\t});\r\n\t}\r\n}","import Tabulator from './Tabulator.js';\r\n\r\nclass TableRegistry {\r\n\r\n\tstatic register(table){\r\n\t\tTableRegistry.tables.push(table);\r\n\t}\r\n\r\n\tstatic deregister(table){\r\n\t\tvar index = TableRegistry.tables.indexOf(table);\r\n\r\n\t\tif(index > -1){\r\n\t\t\tTableRegistry.tables.splice(index, 1);\r\n\t\t}\r\n\t}\r\n\r\n\tstatic lookupTable(query, silent){\r\n\t\tvar results = [],\r\n\t\tmatches, match;\r\n\r\n\t\tif(typeof query === \"string\"){\r\n\t\t\tmatches = document.querySelectorAll(query);\r\n\r\n\t\t\tif(matches.length){\r\n\t\t\t\tfor(var i = 0; i < matches.length; i++){\r\n\t\t\t\t\tmatch = TableRegistry.matchElement(matches[i]);\r\n\r\n\t\t\t\t\tif(match){\r\n\t\t\t\t\t\tresults.push(match);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t}else if((typeof HTMLElement !== \"undefined\" && query instanceof HTMLElement) || query instanceof Tabulator){\r\n\t\t\tmatch = TableRegistry.matchElement(query);\r\n\r\n\t\t\tif(match){\r\n\t\t\t\tresults.push(match);\r\n\t\t\t}\r\n\t\t}else if(Array.isArray(query)){\r\n\t\t\tquery.forEach(function(item){\r\n\t\t\t\tresults = results.concat(TableRegistry.lookupTable(item));\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tif(!silent){\r\n\t\t\t\tconsole.warn(\"Table Connection Error - Invalid Selector\", query);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn results;\r\n\t}\r\n\r\n\tstatic matchElement(element){\r\n\t\treturn TableRegistry.tables.find(function(table){\r\n\t\t\treturn element instanceof Tabulator ? table === element : table.element === element;\r\n\t\t});\r\n\t}\r\n}\r\n\r\nTableRegistry.tables = [];\r\n\r\nexport default TableRegistry;","class Module{\r\n\r\n\tconstructor(table, name){\r\n\t\tthis.table = table;\r\n\t}\r\n\r\n\tregister(){\r\n\t}\r\n}\r\n\r\nexport default Module;","//resize columns to fit data they contain and stretch row to fill table, also used for fitDataTable\r\nexport default function(columns){\r\n\tcolumns.forEach(function(column){\r\n\t\tcolumn.reinitializeWidth();\r\n\t});\r\n\r\n\tif(this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)){\r\n\t\tthis.table.modules.responsiveLayout.update();\r\n\t}\r\n};","import fitData from './modes/fitData.js';\r\nimport fitDataGeneral from './modes/fitDataGeneral.js';\r\nimport fitDataStretch from './modes/fitDataStretch.js';\r\nimport fitColumns from './modes/fitColumns.js';\r\n\r\nexport default {\r\n\tfitData:fitData,\r\n\tfitDataFill:fitDataGeneral,\r\n\tfitDataTable:fitDataGeneral,\r\n\tfitDataStretch:fitDataStretch,\r\n\tfitColumns:fitColumns ,\r\n};","//resize columns to fit data they contain\r\nexport default function(columns){\r\n\tif(this.table.options.virtualDomHoz){\r\n\t\tthis.table.vdomHoz.fitDataLayoutOverride();\r\n\t}else{\r\n\t\tcolumns.forEach(function(column){\r\n\t\t\tcolumn.reinitializeWidth();\r\n\t\t});\r\n\t}\r\n\r\n\tif(this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)){\r\n\t\tthis.table.modules.responsiveLayout.update();\r\n\t}\r\n};","//resize columns to fit data the contain and stretch last column to fill table\r\nexport default function(columns){\r\n\tvar colsWidth = 0,\r\n\ttableWidth = this.table.rowManager.element.clientWidth,\r\n\tgap = 0,\r\n\tlastCol = false;\r\n\r\n\tcolumns.forEach((column, i) => {\r\n\t\tif(!column.widthFixed){\r\n\t\t\tcolumn.reinitializeWidth();\r\n\t\t}\r\n\r\n\t\tif(this.table.options.responsiveLayout ? column.modules.responsive.visible : column.visible){\r\n\t\t\tlastCol = column;\r\n\t\t}\r\n\r\n\t\tif(column.visible){\r\n\t\t\tcolsWidth += column.getWidth();\r\n\t\t}\r\n\t});\r\n\r\n\tif(lastCol){\r\n\t\tgap = tableWidth - colsWidth + lastCol.getWidth();\r\n\r\n\t\tif(this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)){\r\n\t\t\tlastCol.setWidth(0);\r\n\t\t\tthis.table.modules.responsiveLayout.update();\r\n\t\t}\r\n\r\n\t\tif(gap > 0){\r\n\t\t\tlastCol.setWidth(gap);\r\n\t\t}else{\r\n\t\t\tlastCol.reinitializeWidth();\r\n\t\t}\r\n\t}else{\r\n\t\tif(this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)){\r\n\t\t\tthis.table.modules.responsiveLayout.update();\r\n\t\t}\r\n\t}\r\n};","//resize columns to fit\r\nexport default function(columns){\r\n\tvar totalWidth = this.table.element.clientWidth; //table element width\r\n\tvar fixedWidth = 0; //total width of columns with a defined width\r\n\tvar flexWidth = 0; //total width available to flexible columns\r\n\tvar flexGrowUnits = 0; //total number of widthGrow blocks accross all columns\r\n\tvar flexColWidth = 0; //desired width of flexible columns\r\n\tvar flexColumns = []; //array of flexible width columns\r\n\tvar fixedShrinkColumns = []; //array of fixed width columns that can shrink\r\n\tvar flexShrinkUnits = 0; //total number of widthShrink blocks accross all columns\r\n\tvar overflowWidth = 0; //horizontal overflow width\r\n\tvar gapFill=0; //number of pixels to be added to final column to close and half pixel gaps\r\n\r\n\tfunction calcWidth(width){\r\n\t\tvar colWidth;\r\n\r\n\t\tif(typeof(width) == \"string\"){\r\n\t\t\tif(width.indexOf(\"%\") > -1){\r\n\t\t\t\tcolWidth = (totalWidth / 100) * parseInt(width);\r\n\t\t\t}else{\r\n\t\t\t\tcolWidth = parseInt(width);\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tcolWidth = width;\r\n\t\t}\r\n\r\n\t\treturn colWidth;\r\n\t}\r\n\r\n\t//ensure columns resize to take up the correct amount of space\r\n\tfunction scaleColumns(columns, freeSpace, colWidth, shrinkCols){\r\n\r\n\t\tvar oversizeCols = [],\r\n\t\toversizeSpace = 0,\r\n\t\tremainingSpace = 0,\r\n\t\tnextColWidth = 0,\r\n\t\tremainingFlexGrowUnits = flexGrowUnits,\r\n\t\tgap = 0,\r\n\t\tchangeUnits = 0,\r\n\t\tundersizeCols = [];\r\n\r\n\t\tfunction calcGrow(col){\r\n\t\t\treturn (colWidth * (col.column.definition.widthGrow || 1));\r\n\t\t}\r\n\r\n\t\tfunction calcShrink(col){\r\n\t\t\treturn (calcWidth(col.width) - (colWidth * (col.column.definition.widthShrink || 0)))\r\n\t\t}\r\n\r\n\t\tcolumns.forEach(function(col, i){\r\n\t\t\tvar width = shrinkCols ? calcShrink(col) : calcGrow(col);\r\n\t\t\tif(col.column.minWidth >= width){\r\n\t\t\t\toversizeCols.push(col);\r\n\t\t\t}else{\r\n\t\t\t\tif(col.column.maxWidth && col.column.maxWidth < width){\r\n\t\t\t\t\tcol.width = col.column.maxWidth;\r\n\t\t\t\t\tfreeSpace -= col.column.maxWidth;\r\n\r\n\t\t\t\t\tremainingFlexGrowUnits -= shrinkCols ? (col.column.definition.widthShrink || 1) : (col.column.definition.widthGrow || 1);\r\n\r\n\t\t\t\t\tif(remainingFlexGrowUnits){\r\n\t\t\t\t\t\tcolWidth = Math.floor(freeSpace/remainingFlexGrowUnits);\r\n\t\t\t\t\t}\r\n\t\t\t\t}else{\r\n\t\t\t\t\tundersizeCols.push(col);\r\n\t\t\t\t\tchangeUnits += shrinkCols ? (col.column.definition.widthShrink || 1) : (col.column.definition.widthGrow || 1);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tif(oversizeCols.length){\r\n\t\t\toversizeCols.forEach(function(col){\r\n\t\t\t\toversizeSpace += shrinkCols ? col.width - col.column.minWidth : col.column.minWidth;\r\n\t\t\t\tcol.width = col.column.minWidth;\r\n\t\t\t});\r\n\r\n\t\t\tremainingSpace = freeSpace - oversizeSpace;\r\n\r\n\t\t\tnextColWidth = changeUnits ? Math.floor(remainingSpace/changeUnits) : remainingSpace;\r\n\r\n\t\t\tgap = remainingSpace - (nextColWidth * changeUnits);\r\n\r\n\t\t\tgap += scaleColumns(undersizeCols, remainingSpace, nextColWidth, shrinkCols);\r\n\t\t}else{\r\n\t\t\tgap = changeUnits ? freeSpace - (Math.floor(freeSpace/changeUnits) * changeUnits) : freeSpace;\r\n\r\n\t\t\tundersizeCols.forEach(function(column){\r\n\t\t\t\tcolumn.width = shrinkCols ? calcShrink(column) : calcGrow(column);\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn gap;\r\n\t}\r\n\r\n\tif(this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)){\r\n\t\tthis.table.modules.responsiveLayout.update();\r\n\t}\r\n\r\n\t//adjust for vertical scrollbar if present\r\n\tif(this.table.rowManager.element.scrollHeight > this.table.rowManager.element.clientHeight){\r\n\t\ttotalWidth -= this.table.rowManager.element.offsetWidth - this.table.rowManager.element.clientWidth;\r\n\t}\r\n\r\n\tcolumns.forEach(function(column){\r\n\t\tvar width, minWidth, colWidth;\r\n\r\n\t\tif(column.visible){\r\n\r\n\t\t\twidth = column.definition.width;\r\n\t\t\tminWidth = parseInt(column.minWidth);\r\n\r\n\t\t\tif(width){\r\n\r\n\t\t\t\tcolWidth = calcWidth(width);\r\n\r\n\t\t\t\tfixedWidth += colWidth > minWidth ? colWidth : minWidth;\r\n\r\n\t\t\t\tif(column.definition.widthShrink){\r\n\t\t\t\t\tfixedShrinkColumns.push({\r\n\t\t\t\t\t\tcolumn:column,\r\n\t\t\t\t\t\twidth:colWidth > minWidth ? colWidth : minWidth\r\n\t\t\t\t\t});\r\n\t\t\t\t\tflexShrinkUnits += column.definition.widthShrink;\r\n\t\t\t\t}\r\n\r\n\t\t\t}else{\r\n\t\t\t\tflexColumns.push({\r\n\t\t\t\t\tcolumn:column,\r\n\t\t\t\t\twidth:0,\r\n\t\t\t\t});\r\n\t\t\t\tflexGrowUnits += column.definition.widthGrow || 1;\r\n\t\t\t}\r\n\t\t}\r\n\t});\r\n\r\n\t//calculate available space\r\n\tflexWidth = totalWidth - fixedWidth;\r\n\r\n\t//calculate correct column size\r\n\tflexColWidth = Math.floor(flexWidth / flexGrowUnits)\r\n\r\n\t//generate column widths\r\n\tvar gapFill = scaleColumns(flexColumns, flexWidth, flexColWidth, false);\r\n\r\n\t//increase width of last column to account for rounding errors\r\n\tif(flexColumns.length && gapFill > 0){\r\n\t\tflexColumns[flexColumns.length-1].width += + gapFill;\r\n\t}\r\n\r\n\t//caculate space for columns to be shrunk into\r\n\tflexColumns.forEach(function(col){\r\n\t\tflexWidth -= col.width;\r\n\t});\r\n\r\n\toverflowWidth = Math.abs(gapFill) + flexWidth;\r\n\r\n\t//shrink oversize columns if there is no available space\r\n\tif(overflowWidth > 0 && flexShrinkUnits){\r\n\t\tgapFill = scaleColumns(fixedShrinkColumns, overflowWidth, Math.floor(overflowWidth / flexShrinkUnits), true);\r\n\t}\r\n\r\n\t//decrease width of last column to account for rounding errors\r\n\tif(fixedShrinkColumns.length){\r\n\t\tfixedShrinkColumns[fixedShrinkColumns.length-1].width -= gapFill;\r\n\t}\r\n\r\n\tflexColumns.forEach(function(col){\r\n\t\tcol.column.setWidth(col.width);\r\n\t});\r\n\r\n\tfixedShrinkColumns.forEach(function(col){\r\n\t\tcol.column.setWidth(col.width);\r\n\t});\r\n};","import Module from '../../core/Module.js';\r\n\r\nimport defaultModes from './defaults/modes.js';\r\n\r\nclass Layout extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table, \"layout\");\r\n\r\n\t\tthis.mode = null;\r\n\t}\r\n\r\n\t//initialize layout system\r\n\tinitialize(layout){\r\n\t\tif(Layout.modes[layout]){\r\n\t\t\tthis.mode = layout;\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Layout Error - invalid mode set, defaulting to 'fitData' : \" + layout);\r\n\t\t\tthis.mode = 'fitData';\r\n\t\t}\r\n\r\n\t\tthis.table.element.setAttribute(\"tabulator-layout\", this.mode);\r\n\t}\r\n\r\n\tgetMode(){\r\n\t\treturn this.mode;\r\n\t}\r\n\r\n\t//trigger table layout\r\n\tlayout(){\r\n\t\tLayout.modes[this.mode].call(this, this.table.columnManager.columnsByIndex);\r\n\r\n\t\tif(this.mode.indexOf(\"fitData\") === 0 && this.table.options.persistence && this.table.modExists(\"persistence\", true) && this.table.modules.persistence.config.columns){\r\n\t\t\tthis.table.modules.persistence.save(\"columns\");\r\n\t\t}\r\n\t}\r\n}\r\n\r\nLayout.moduleName = \"layout\";\r\n\r\n//load defaults\r\nLayout.modes = defaultModes;\r\n\r\nexport default Layout;","import Module from '../../core/Module.js';\r\n\r\nimport Helpers from '../../core/Helpers.js';\r\n\r\nimport defaultLangs from './defaults/langs.js';\r\n\r\nclass Localize extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.locale = \"default\"; //current locale\r\n\t\tthis.lang = false; //current language\r\n\t\tthis.bindings = {}; //update events to call when locale is changed\r\n\t\tthis.langList = {};\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tthis.langList = Helpers.deepClone(Localize.langs);\r\n\t}\r\n\r\n\t//set header placehoder\r\n\tsetHeaderFilterPlaceholder(placeholder){\r\n\t\tthis.langList.default.headerFilters.default = placeholder;\r\n\t}\r\n\r\n\t//set header filter placeholder by column\r\n\tsetHeaderFilterColumnPlaceholder(column, placeholder){\r\n\t\tthis.langList.default.headerFilters.columns[column] = placeholder;\r\n\r\n\t\tif(this.lang && !this.lang.headerFilters.columns[column]){\r\n\t\t\tthis.lang.headerFilters.columns[column] = placeholder;\r\n\t\t}\r\n\t}\r\n\r\n\t//setup a lang description object\r\n\tinstallLang(locale, lang){\r\n\t\tif(this.langList[locale]){\r\n\t\t\tthis._setLangProp(this.langList[locale], lang);\r\n\t\t}else{\r\n\t\t\tthis.langList[locale] = lang;\r\n\t\t}\r\n\t}\r\n\r\n\t_setLangProp(lang, values){\r\n\t\tfor(let key in values){\r\n\t\t\tif(lang[key] && typeof lang[key] == \"object\"){\r\n\t\t\t\tthis._setLangProp(lang[key], values[key])\r\n\t\t\t}else{\r\n\t\t\t\tlang[key] = values[key];\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//set current locale\r\n\tsetLocale(desiredLocale){\r\n\t\tdesiredLocale = desiredLocale || \"default\";\r\n\r\n\t\t//fill in any matching languge values\r\n\t\tfunction traverseLang(trans, path){\r\n\t\t\tfor(var prop in trans){\r\n\t\t\t\tif(typeof trans[prop] == \"object\"){\r\n\t\t\t\t\tif(!path[prop]){\r\n\t\t\t\t\t\tpath[prop] = {};\r\n\t\t\t\t\t}\r\n\t\t\t\t\ttraverseLang(trans[prop], path[prop]);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tpath[prop] = trans[prop];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//determing correct locale to load\r\n\t\tif(desiredLocale === true && navigator.language){\r\n\t\t\t//get local from system\r\n\t\t\tdesiredLocale = navigator.language.toLowerCase();\r\n\t\t}\r\n\r\n\t\tif(desiredLocale){\r\n\t\t\t//if locale is not set, check for matching top level locale else use default\r\n\t\t\tif(!this.langList[desiredLocale]){\r\n\t\t\t\tlet prefix = desiredLocale.split(\"-\")[0];\r\n\r\n\t\t\t\tif(this.langList[prefix]){\r\n\t\t\t\t\tconsole.warn(\"Localization Error - Exact matching locale not found, using closest match: \", desiredLocale, prefix);\r\n\t\t\t\t\tdesiredLocale = prefix;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.warn(\"Localization Error - Matching locale not found, using default: \", desiredLocale);\r\n\t\t\t\t\tdesiredLocale = \"default\";\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.locale = desiredLocale;\r\n\r\n\t\t//load default lang template\r\n\t\tthis.lang = Helpers.deepClone(this.langList.default || {});\r\n\r\n\t\tif(desiredLocale != \"default\"){\r\n\t\t\ttraverseLang(this.langList[desiredLocale], this.lang);\r\n\t\t}\r\n\r\n\t\tthis.table.options.localized.call(this.table, this.locale, this.lang);\r\n\r\n\t\tthis._executeBindings();\r\n\t}\r\n\r\n\t//get current locale\r\n\tgetLocale(locale){\r\n\t\treturn this.locale;\r\n\t}\r\n\r\n\t//get lang object for given local or current if none provided\r\n\tgetLang(locale){\r\n\t\treturn locale ? this.langList[locale] : this.lang;\r\n\t}\r\n\r\n\t//get text for current locale\r\n\tgetText(path, value){\r\n\t\tvar path = value ? path + \"|\" + value : path,\r\n\t\tpathArray = path.split(\"|\"),\r\n\t\ttext = this._getLangElement(pathArray, this.locale);\r\n\r\n\t\t// if(text === false){\r\n\t\t// \tconsole.warn(\"Localization Error - Matching localized text not found for given path: \", path);\r\n\t\t// }\r\n\r\n\t\treturn text || \"\";\r\n\t}\r\n\r\n\t//traverse langs object and find localized copy\r\n\t_getLangElement(path, locale){\r\n\t\tvar root = this.lang;\r\n\r\n\t\tpath.forEach(function(level){\r\n\t\t\tvar rootPath;\r\n\r\n\t\t\tif(root){\r\n\t\t\t\trootPath = root[level];\r\n\r\n\t\t\t\tif(typeof rootPath != \"undefined\"){\r\n\t\t\t\t\troot = rootPath;\r\n\t\t\t\t}else{\r\n\t\t\t\t\troot = false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn root;\r\n\t}\r\n\r\n\t//set update binding\r\n\tbind(path, callback){\r\n\t\tif(!this.bindings[path]){\r\n\t\t\tthis.bindings[path] = [];\r\n\t\t}\r\n\r\n\t\tthis.bindings[path].push(callback);\r\n\r\n\t\tcallback(this.getText(path), this.lang);\r\n\t}\r\n\r\n\t//itterate through bindings and trigger updates\r\n\t_executeBindings(){\r\n\t\tfor(let path in this.bindings){\r\n\t\t\tthis.bindings[path].forEach((binding) => {\r\n\t\t\t\tbinding(this.getText(path), this.lang);\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n}\r\n\r\nLocalize.moduleName = \"localize\";\r\n\r\n//load defaults\r\nLocalize.langs = defaultLangs;\r\n\r\nexport default Localize;","export default {\r\n\t\"default\":{ //hold default locale text\r\n\t\t\"groups\":{\r\n\t\t\t\"item\":\"item\",\r\n\t\t\t\"items\":\"items\",\r\n\t\t},\r\n\t\t\"columns\":{\r\n\t\t},\r\n\t\t\"ajax\":{\r\n\t\t\t\"loading\":\"Loading\",\r\n\t\t\t\"error\":\"Error\",\r\n\t\t},\r\n\t\t\"pagination\":{\r\n\t\t\t\"page_size\":\"Page Size\",\r\n\t\t\t\"page_title\":\"Show Page\",\r\n\t\t\t\"first\":\"First\",\r\n\t\t\t\"first_title\":\"First Page\",\r\n\t\t\t\"last\":\"Last\",\r\n\t\t\t\"last_title\":\"Last Page\",\r\n\t\t\t\"prev\":\"Prev\",\r\n\t\t\t\"prev_title\":\"Prev Page\",\r\n\t\t\t\"next\":\"Next\",\r\n\t\t\t\"next_title\":\"Next Page\",\r\n\t\t\t\"all\":\"All\",\r\n\t\t},\r\n\t\t\"headerFilters\":{\r\n\t\t\t\"default\":\"filter column...\",\r\n\t\t\t\"columns\":{}\r\n\t\t}\r\n\t},\r\n};","import Module from '../../core/Module.js';\r\nimport TableRegistry from '../../core/TableRegistry.js';\r\n\r\nclass Comms extends Module{\r\n\r\n\tgetConnections(selectors){\r\n\t\tvar connections = [],\r\n\t\tconnection;\r\n\r\n\t\tconnection = Tabulator.comms.lookupTable(selectors);\r\n\r\n\t\tconnection.forEach((con) =>{\r\n\t\t\tif(this.table !== con){\r\n\t\t\t\tconnections.push(con);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn connections;\r\n\t}\r\n\r\n\tsend(selectors, module, action, data){\r\n\t\tvar connections = this.getConnections(selectors);\r\n\r\n\t\tconnections.forEach((connection) => {\r\n\t\t\tconnection.tableComms(this.table.element, module, action, data);\r\n\t\t});\r\n\r\n\t\tif(!connections.length && selectors){\r\n\t\t\tconsole.warn(\"Table Connection Error - No tables matching selector found\", selectors);\r\n\t\t}\r\n\t}\r\n\r\n\treceive(table, module, action, data){\r\n\t\tif(this.table.modExists(module)){\r\n\t\t\treturn this.table.modules[module].commsReceived(table, action, data);\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Inter-table Comms Error - no such module:\", module);\r\n\t\t}\r\n\t}\r\n}\r\n\r\nComms.moduleName = \"comms\";\r\n\r\nexport default Comms;","import * as coreModules from './modules/core.js';\r\nimport TableRegistry from './TableRegistry.js';\r\n\r\nexport default class ModuleBinder {\r\n\r\n\tconstructor(tabulator, modules){\r\n\t\tthis.bindStaticFuctionality(tabulator);\r\n\t\tthis.bindModules(tabulator, coreModules);\r\n\r\n\t\tif(modules){\r\n\t\t\tthis.bindModules(tabulator, modules);\r\n\t\t}\r\n\t}\r\n\r\n\tbindStaticFuctionality(tabulator){\r\n\r\n\t\ttabulator.moduleBindings = {};\r\n\r\n\t\ttabulator.extendModule = function(name, property, values){\r\n\t\t\tif(tabulator.moduleBindings[name]){\r\n\t\t\t\tvar source = tabulator.moduleBindings[name].prototype[property];\r\n\r\n\t\t\t\tif(source){\r\n\t\t\t\t\tif(typeof values == \"object\"){\r\n\t\t\t\t\t\tfor(let key in values){\r\n\t\t\t\t\t\t\tsource[key] = values[key];\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tconsole.warn(\"Module Error - Invalid value type, it must be an object\");\r\n\t\t\t\t\t}\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.warn(\"Module Error - property does not exist:\", property);\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Module Error - module does not exist:\", name);\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\ttabulator.registerModule = function(modules){\r\n\t\t\tif(!Array.isArray(modules)){\r\n\t\t\t\tmodules = [modules];\r\n\t\t\t}\r\n\r\n\t\t\tmodules.forEach((mod) => {\r\n\t\t\t\ttabulator.registerModuleBinding(mod)\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\ttabulator.registerModuleBinding = function(mod){\r\n\t\t\ttabulator.moduleBindings[mod.moduleName] = mod;\r\n\t\t};\r\n\r\n\t\ttabulator.findTable = function(query){\r\n\t\t\tvar results = TableRegistry.lookupTable(query, true);\r\n\t\t\treturn Array.isArray(results) && !results.length ? false : results;\r\n\t\t}\r\n\r\n\t\t//ensure that module are bound to instantiated function\r\n\t\ttabulator.prototype.bindModules = function(){\r\n\t\t\tthis.modules = {};\r\n\r\n\t\t\tfor(var name in tabulator.moduleBindings){\r\n\t\t\t\tthis.modules[name] = new tabulator.moduleBindings[name](this);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tbindModules(tabulator, modules){\r\n\t\tvar mods = Object.values(modules);\r\n\r\n\t\ttabulator.registerModule(mods);\r\n\t}\r\n}","export default class VirtualDomHorizontal {\r\n\tconstructor(table){\r\n\t\tthis.table = table;\r\n\r\n\t\tthis.element = this.table.rowManager.tableElement;\r\n\t\tthis.holderEl = this.table.rowManager.element;\r\n\r\n\t\tthis.leftCol = 0;\r\n\t\tthis.rightCol = 0;\r\n\t\tthis.scrollLeft = 0;\r\n\r\n\t\tthis.vDomScrollPosLeft = 0;\r\n\t\tthis.vDomScrollPosRight = 0;\r\n\r\n\t\tthis.vDomPadLeft = 0;\r\n\t\tthis.vDomPadRight = 0;\r\n\r\n\t\tthis.fitDataColAvg = 0;\r\n\r\n\t\tthis.window = 200; //pixel margin to make column visible before it is shown on screen\r\n\r\n\t\tthis.initialized = false;\r\n\r\n\t\tthis.columns = [];\r\n\r\n\t\tif(this.compatabilityCheck()){\r\n\t\t\tthis.initialize();\r\n\t\t}\r\n\t}\r\n\r\n\tcompatabilityCheck(){\r\n\t\tvar options = this.table.options,\r\n\t\tfrozen = false,\r\n\t\tok = true;\r\n\r\n\t\tif(options.layout == \"fitDataTable\"){\r\n\t\t\tconsole.warn(\"Horizontal Vitrual DOM is not compatible with fitDataTable layout mode\");\r\n\t\t\tok = false;\r\n\t\t}\r\n\r\n\t\tif(options.responsiveLayout){\r\n\t\t\tconsole.warn(\"Horizontal Vitrual DOM is not compatible with responsive columns\");\r\n\t\t\tok = false;\r\n\t\t}\r\n\r\n\t\tif(this.table.rtl){\r\n\t\t\tconsole.warn(\"Horizontal Vitrual DOM is not currently compatible with RTL text direction\");\r\n\t\t\tok = false;\r\n\t\t}\r\n\r\n\t\tif(options.columns){\r\n\t\t\tfrozen = options.columns.find((col) => {\r\n\t\t\t\treturn col.frozen;\r\n\t\t\t});\r\n\r\n\t\t\tif(frozen){\r\n\t\t\t\tconsole.warn(\"Horizontal Vitrual DOM is not compatible with frozen columns\");\r\n\t\t\t\tok = false;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(!ok){\r\n\t\t\toptions.virtualDomHoz = false;\r\n\t\t}\r\n\r\n\t\treturn ok;\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tthis.holderEl.addEventListener(\"scroll\", () => {\r\n\t\t\tvar left = this.holderEl.scrollLeft;\r\n\r\n\t\t\tif(this.scrollLeft != left){\r\n\t\t\t\tthis.scrollLeft = left;\r\n\t\t\t\tthis.scroll(left - (this.vDomScrollPosLeft + this.window));\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tdeinitialize(){\r\n\t\tthis.initialized = false;\r\n\t}\r\n\r\n\tclear(){\r\n\t\tthis.columns = [];\r\n\r\n\t\tthis.leftCol = -1;\r\n\t\tthis.rightCol = 0;\r\n\r\n\t\tthis.vDomScrollPosLeft = 0;\r\n\t\tthis.vDomScrollPosRight = 0;\r\n\t\tthis.vDomPadLeft = 0;\r\n\t\tthis.vDomPadRight = 0;\r\n\t}\r\n\r\n\tdataChange(){\r\n\t\tvar change = false,\r\n\t\tcollsWidth = 0,\r\n\t\tcolEnd = 0,\r\n\t\tgroup, row, rowEl;\r\n\r\n\t\tif(this.table.options.layout === \"fitData\"){\r\n\t\t\tthis.table.columnManager.columnsByIndex.forEach((column) => {\r\n\t\t\t\tif(!column.definition.width && column.visible){\r\n\t\t\t\t\tchange = true;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tif(change){\r\n\t\t\t\tif(change && this.table.rowManager.getDisplayRows().length){\r\n\r\n\t\t\t\t\tthis.vDomScrollPosRight = this.scrollLeft + this.holderEl.clientWidth + this.window;\r\n\r\n\t\t\t\t\tif(this.table.options.groupBy){\r\n\t\t\t\t\t\tgroup = this.table.modules.groupRows.getGroups(false)[0];\r\n\r\n\t\t\t\t\t\trow = group.getRows(false)[0];\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\trow = this.table.rowManager.getDisplayRows()[0];\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif(row){\r\n\r\n\t\t\t\t\t\trowEl = row.getElement();\r\n\r\n\t\t\t\t\t\trow.generateCells();\r\n\r\n\t\t\t\t\t\tthis.element.appendChild(rowEl);\r\n\r\n\t\t\t\t\t\tfor(var colEnd = 0; colEnd < row.cells.length; colEnd++){\r\n\t\t\t\t\t\t\tlet cell = row.cells[colEnd];\r\n\t\t\t\t\t\t\trowEl.appendChild(cell.getElement());\r\n\r\n\t\t\t\t\t\t\tcell.column.reinitializeWidth();\r\n\r\n\t\t\t\t\t\t\tcollsWidth += cell.column.getWidth();\r\n\r\n\t\t\t\t\t\t\tif(collsWidth > this.vDomScrollPosRight){\r\n\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\trowEl.parentNode.removeChild(rowEl);\r\n\r\n\t\t\t\t\t\tthis.fitDataColAvg = Math.floor(collsWidth / (colEnd + 1));\r\n\r\n\t\t\t\t\t\tfor(colEnd; colEnd < this.table.columnManager.columnsByIndex.length; colEnd++){\r\n\t\t\t\t\t\t\tthis.table.columnManager.columnsByIndex[colEnd].setWidth(this.fitDataColAvg);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tthis.reinitialize(false, true);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tif(this.table.options.layout === \"fitColumns\"){\r\n\t\t\t\tthis.table.modules.layout.layout();\r\n\t\t\t\tthis.table.vdomHoz.reinitialize(false, true);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tfitDataLayoutOverride(){\r\n\t\tfor(let i = this.leftCol; i <= this.rightCol; i++){\r\n\t\t\tthis.columns[i].reinitializeWidth();\r\n\t\t}\r\n\t}\r\n\r\n\treinitialize(update, blockRedraw){\r\n\t\tvar old = {\r\n\t\t\tcols:this.columns,\r\n\t\t\tleftCol:this.leftCol,\r\n\t\t\trightCol:this.rightCol,\r\n\t\t};\r\n\r\n\t\tif(update && !this.initialized){\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.clear();\r\n\r\n\t\tthis.scrollLeft = this.holderEl.scrollLeft;\r\n\r\n\t\tthis.vDomScrollPosLeft = this.scrollLeft - this.window;\r\n\t\tthis.vDomScrollPosRight = this.scrollLeft + this.holderEl.clientWidth + this.window;\r\n\r\n\t\tvar colPos = 0;\r\n\r\n\t\tthis.table.columnManager.columnsByIndex.forEach((column) => {\r\n\t\t\tvar config = {};\r\n\r\n\t\t\tif(column.visible){\r\n\t\t\t\tvar width = column.getWidth();\r\n\r\n\t\t\t\tconfig.leftPos = colPos;\r\n\t\t\t\tconfig.rightPos = colPos + width;\r\n\r\n\t\t\t\tconfig.width = width;\r\n\r\n\t\t\t\tif (_this18.table.options.layout === \"fitData\") {\r\n\r\n\t\t\t\t config.fitDataCheck = true;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif((colPos + width > this.vDomScrollPosLeft) && (colPos < this.vDomScrollPosRight)){\r\n\t \t\t//column is visible\r\n\r\n\t \t\tif(this.leftCol == -1){\r\n\t \t\t\tthis.leftCol = this.columns.length;\r\n\t \t\t\tthis.vDomPadLeft = colPos;\r\n\t \t\t}\r\n\r\n\t \t\tthis.rightCol = this.columns.length;\r\n\t \t}else{\r\n\t \t\t// column is hidden\r\n\t \t\tif(this.leftCol !== -1){\r\n\t \t\t\tthis.vDomPadRight += width;\r\n\t \t\t}\r\n\t \t}\r\n\r\n\t \tthis.columns.push(column);\r\n\r\n\t \tcolumn.modules.vdomHoz = config;\r\n\r\n\t \tcolPos += width;\r\n\t }\r\n\t });\r\n\r\n\t\tthis.element.style.paddingLeft = this.vDomPadLeft + \"px\";\r\n\t\tthis.element.style.paddingRight = this.vDomPadRight + \"px\";\r\n\r\n\t\tthis.initialized = true;\r\n\r\n\t\tif(!blockRedraw){\r\n\t\t\tif(!update || this.reinitChanged(old)){\r\n\t\t\t\tthis.renitializeRows();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.holderEl.scrollLeft = this.scrollLeft;\r\n\t}\r\n\r\n\treinitChanged(old){\r\n\t\tvar match = true;\r\n\r\n\t\tif(old.cols.length !== this.columns.length || old.leftCol !== this.leftCol || old.rightCol !== this.rightCol){\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\told.cols.forEach((col, i) => {\r\n\t\t\tif(col !== this.columns[i]){\r\n\t\t\t\tmatch = false;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn !match;\r\n\t}\r\n\r\n\trenitializeRows(){\r\n\t\tvar rows = this.table.rowManager.getVisibleRows();\r\n\t\trows.forEach((row) => {\r\n\t\t\tthis.reinitializeRow(row, true);\r\n\t\t});\r\n\t}\r\n\r\n\tscroll(diff){\r\n\t\tthis.vDomScrollPosLeft += diff;\r\n\t\tthis.vDomScrollPosRight += diff;\r\n\r\n\t\tif(diff > (this.holderEl.clientWidth * .8)){\r\n\t\t\tthis.reinitialize();\r\n\t\t}else{\r\n\t\t\tif(diff > 0){\r\n\t\t\t\t//scroll right\r\n\t\t\t\tthis.addColRight();\r\n\t\t\t\tthis.removeColLeft();\r\n\t\t\t}else{\r\n\t\t\t\t//scroll left\r\n\t\t\t\tthis.addColLeft();\r\n\t\t\t\tthis.removeColRight();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tcolPositionAdjust (start, end, diff){\r\n\t\tfor(let i = start; i < end; i++){\r\n\t\t\tlet column = this.columns[i];\r\n\r\n\t\t\tcolumn.modules.vdomHoz.leftPos += diff;\r\n\t\t\tcolumn.modules.vdomHoz.rightPos += diff;\r\n\t\t}\r\n\t}\r\n\r\n\taddColRight(){\r\n\t\tvar column = this.columns[this.rightCol + 1],\r\n\t\trows, newWidth, widthDiff;\r\n\r\n\t\tif(column && column.modules.vdomHoz.leftPos <= this.vDomScrollPosRight){\r\n\r\n\t\t\trows = this.table.rowManager.getVisibleRows();\r\n\r\n\t\t\trows.forEach((row) => {\r\n\t\t\t\tif(row.type !== \"group\"){\r\n\t\t\t\t\tvar cell = row.getCell(column);\r\n\t\t\t\t\trow.getElement().appendChild(cell.getElement());\r\n\t\t\t\t\tcell.cellRendered();\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tthis.fitDataColActualWidthCheck(column);\r\n\r\n\t\t\tthis.rightCol++;\r\n\r\n\t\t\tif(this.rightCol >= (this.columns.length - 1)){\r\n\t\t\t\tthis.vDomPadRight = 0;\r\n\t\t\t}else{\r\n\t\t\t\tthis.vDomPadRight -= column.getWidth();\r\n\t\t\t}\r\n\r\n\t\t\tthis.element.style.paddingRight = this.vDomPadRight + \"px\";\r\n\r\n\t\t\tthis.addColRight();\r\n\t\t}\r\n\t}\r\n\r\n\taddColLeft(){\r\n\t\tvar column = this.columns[this.leftCol - 1],\r\n\t\trows;\r\n\r\n\t\tif(column && column.modules.vdomHoz.rightPos >= this.vDomScrollPosLeft){\r\n\t\t\tvar rows = this.table.rowManager.getVisibleRows();\r\n\r\n\t\t\trows.forEach((row) => {\r\n\t\t\t\tif(row.type !== \"group\"){\r\n\t\t\t\t\tvar cell = row.getCell(column);\r\n\t\t\t\t\trow.getElement().prepend(cell.getElement());\r\n\t\t\t\t\tcell.cellRendered();\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tthis.fitDataColActualWidthCheck(column);\r\n\r\n\t\t\tif(!this.leftCol){\r\n\t\t\t\tthis.vDomPadLeft = 0;\r\n\t\t\t}else{\r\n\t\t\t\tthis.vDomPadLeft -= column.getWidth();\r\n\t\t\t}\r\n\r\n\t\t\tthis.element.style.paddingLeft = this.vDomPadLeft + \"px\";\r\n\r\n\t\t\tthis.leftCol--;\r\n\r\n\t\t\tthis.addColLeft();\r\n\t\t}\r\n\t}\r\n\r\n\tremoveColRight(column){\r\n\t\tvar column = this.columns[this.rightCol],\r\n\t\trows;\r\n\r\n\t\tif(column && column.modules.vdomHoz.leftPos > this.vDomScrollPosRight){\r\n\t\t\trows = this.table.rowManager.getVisibleRows();\r\n\r\n\t\t\tcolumn.modules.vdomHoz.visible = false;\r\n\r\n\t\t\trows.forEach((row) => {\r\n\t\t\t\tif(row.type !== \"group\"){\r\n\t\t\t\t\tvar cell = row.getCell(column);\r\n\t\t\t\t\trow.getElement().removeChild(cell.getElement());\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tthis.vDomPadRight += column.getWidth();\r\n\t\t\tthis.element.style.paddingRight = this.vDomPadRight + \"px\";\r\n\r\n\t\t\tthis.rightCol --;\r\n\r\n\t\t\tthis.removeColRight();\r\n\t\t}\r\n\t}\r\n\r\n\tremoveColLeft(){\r\n\t\tvar column = this.columns[this.leftCol],\r\n\t\trows;\r\n\r\n\t\tif(column && column.modules.vdomHoz.rightPos < this.vDomScrollPosLeft){\r\n\r\n\t\t\trows = this.table.rowManager.getVisibleRows();\r\n\r\n\t\t\trows.forEach((row) => {\r\n\t\t\t\tif(row.type !== \"group\"){\r\n\t\t\t\t\tvar cell = row.getCell(column);\r\n\t\t\t\t\trow.getElement().removeChild(cell.getElement());\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tthis.vDomPadLeft += column.getWidth();\r\n\t\t\tthis.element.style.paddingLeft = this.vDomPadLeft + \"px\";\r\n\r\n\t\t\tthis.leftCol ++;\r\n\r\n\t\t\tthis.removeColLeft();\r\n\t\t}\r\n\t}\r\n\r\n\tfitDataColActualWidthCheck(column){\r\n\t var newWidth, widthDiff;\r\n\r\n\t if(column.modules.vdomHoz.fitDataCheck){\r\n\t column.reinitializeWidth();\r\n\r\n\t newWidth = column.getWidth();\r\n\t widthDiff = newWidth - column.modules.vdomHoz.width;\r\n\r\n\t if(widthDiff){\r\n\t column.modules.vdomHoz.rightPos += widthDiff;\r\n\t column.modules.vdomHoz.width = newWidth;\r\n\t this.colPositionAdjust(this.rightCol + 2, this.columns.length, widthDiff);\r\n\t }\r\n\r\n\t column.modules.vdomHoz.fitDataCheck = false;\r\n\t }\r\n\t};\r\n\r\n\tinitializeRow(row){\r\n\t\tif(row.type !== \"group\"){\r\n\t\t\trow.modules.vdomHoz = {\r\n\t\t\t\tleftCol:this.leftCol,\r\n\t\t\t\trightCol:this.rightCol,\r\n\t\t\t};\r\n\r\n\t\t\tfor(let i = this.leftCol; i <= this.rightCol; i++){\r\n\t\t\t\tlet column = this.columns[i];\r\n\r\n\t\t\t\tif(column && column.visible){\r\n\t\t\t\t\tlet cell = row.getCell(column);\r\n\r\n\t\t\t\t\trow.getElement().appendChild(cell.getElement());\r\n\t\t\t\t\tcell.cellRendered();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\treinitializeRow(row, force){\r\n\t\tif(row.type !== \"group\"){\r\n\t\t\tif(force || !row.modules.vdomHoz || row.modules.vdomHoz.leftCol !== this.leftCol || row.modules.vdomHoz.rightCol !== this.rightCol){\r\n\t\t\t\tvar rowEl = row.getElement();\r\n\t\t\t\twhile(rowEl.firstChild) rowEl.removeChild(rowEl.firstChild);\r\n\r\n\t\t\t\tthis.initializeRow(row);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}","'use strict';\r\n\r\nimport defaultOptions from './defaults/options.js';\r\n\r\n\r\nimport ColumnManager from './ColumnManager.js';\r\nimport RowManager from './RowManager.js';\r\nimport FooterManager from './FooterManager.js';\r\n\r\nimport TableRegistry from './TableRegistry.js';\r\nimport ModuleBinder from './ModuleBinder.js';\r\n\r\nimport VirtualDomHorizontal from './renderers/VirtualDomHorizontal.js';\r\n\r\nclass Tabulator {\r\n\r\n\tconstructor(element, options){\r\n\r\n\t\tthis.options = {};\r\n\r\n\t\tthis.columnManager = null; // hold Column Manager\r\n\t\tthis.rowManager = null; //hold Row Manager\r\n\t\tthis.footerManager = null; //holder Footer Manager\r\n\t\tthis.vdomHoz = null; //holder horizontal virtual dom\r\n\r\n\t\tthis.browser = \"\"; //hold current browser type\r\n\t\tthis.browserSlow = false; //handle reduced functionality for slower browsers\r\n\t\tthis.browserMobile = false; //check if running on moble, prevent resize cancelling edit on keyboard appearence\r\n\t\tthis.rtl = false; //check if the table is in RTL mode\r\n\r\n\t\tthis.modules = {}; //hold all modules bound to this table\r\n\r\n\t\tif(this.initializeElement(element)){\r\n\t\t\tthis.initializeOptions(options || {});\r\n\t\t\tthis._create();\r\n\t\t}\r\n\r\n\t\tTableRegistry.register(this); //register table for inderdevice communication\r\n\t}\r\n\r\n\tinitializeOptions(options){\r\n\r\n\t\tvar defaults = Tabulator.defaultOptions;\r\n\r\n\t\t//warn user if option is not available\r\n\t\tif(options.invalidOptionWarnings !== false){\r\n\t\t\tfor (var key in options){\r\n\t\t\t\tif(typeof defaults[key] === \"undefined\"){\r\n\t\t\t\t\tconsole.warn(\"Invalid table constructor option:\", key)\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//assign options to table\r\n\t\tfor (var key in defaults){\r\n\t\t\tif(key in options){\r\n\t\t\t\tthis.options[key] = options[key];\r\n\t\t\t}else{\r\n\t\t\t\tif(Array.isArray(defaults[key])){\r\n\t\t\t\t\tthis.options[key] = Object.assign([], defaults[key]);\r\n\t\t\t\t}else if(typeof defaults[key] === \"object\" && defaults[key] !== null){\r\n\t\t\t\t\tthis.options[key] = Object.assign({}, defaults[key]);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tthis.options[key] = defaults[key];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tinitializeElement(element){\r\n\t\tif(typeof HTMLElement !== \"undefined\" && element instanceof HTMLElement){\r\n\t\t\tthis.element = element;\r\n\t\t\treturn true;\r\n\t\t}else if(typeof element === \"string\"){\r\n\t\t\tthis.element = document.querySelector(element);\r\n\r\n\t\t\tif(this.element){\r\n\t\t\t\treturn true;\r\n\t\t\t}else{\r\n\t\t\t\tconsole.error(\"Tabulator Creation Error - no element found matching selector: \", element);\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tconsole.error(\"Tabulator Creation Error - Invalid element provided:\", element);\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\trtlCheck(){\r\n\t\tvar style = window.getComputedStyle(this.element);\r\n\r\n\t\tswitch(this.options.textDirection){\r\n\t\t\tcase\"auto\":\r\n\t\t\tif(style.direction !== \"rtl\"){\r\n\t\t\t\tbreak;\r\n\t\t\t};\r\n\r\n\t\t\tcase \"rtl\":\r\n\t\t\tthis.element.classList.add(\"tabulator-rtl\");\r\n\t\t\tthis.rtl = true;\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"ltr\":\r\n\t\t\tthis.element.classList.add(\"tabulator-ltr\");\r\n\r\n\t\t\tdefault:\r\n\t\t\tthis.rtl = false;\r\n\t\t}\r\n\t}\r\n\r\n\t//convert depricated functionality to new functions\r\n\t_mapDepricatedFunctionality(){\r\n\t\t//all previously deprecated functionality removed in the 5.0 release\r\n\t}\r\n\r\n\t_clearSelection(){\r\n\r\n\t\tthis.element.classList.add(\"tabulator-block-select\");\r\n\r\n\t\tif (window.getSelection) {\r\n\t\t if (window.getSelection().empty) { // Chrome\r\n\t\t \twindow.getSelection().empty();\r\n\t\t } else if (window.getSelection().removeAllRanges) { // Firefox\r\n\t\t \twindow.getSelection().removeAllRanges();\r\n\t\t }\r\n\t\t} else if (document.selection) { // IE?\r\n\t\t\tdocument.selection.empty();\r\n\t\t}\r\n\r\n\t\tthis.element.classList.remove(\"tabulator-block-select\");\r\n\t}\r\n\r\n\t//concreate table\r\n\t_create(){\r\n\t\tthis._clearObjectPointers();\r\n\r\n\t\tthis._mapDepricatedFunctionality();\r\n\r\n\t\tthis.bindModules();\r\n\r\n\t\tthis.rtlCheck();\r\n\r\n\t\tif(this.element.tagName === \"TABLE\"){\r\n\t\t\tif(this.modExists(\"htmlTableImport\", true)){\r\n\t\t\t\tthis.modules.htmlTableImport.parseTable();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.columnManager = new ColumnManager(this);\r\n\t\tthis.rowManager = new RowManager(this);\r\n\t\tthis.footerManager = new FooterManager(this);\r\n\r\n\t\tthis.columnManager.setRowManager(this.rowManager);\r\n\t\tthis.rowManager.setColumnManager(this.columnManager);\r\n\r\n\t\tif(this.options.virtualDomHoz){\r\n\t\t\tthis.vdomHoz = new VirtualDomHorizontal(this);\r\n\t\t}\r\n\r\n\t\tthis._buildElement();\r\n\r\n\t\tthis._loadInitialData();\r\n\t}\r\n\r\n\t//clear pointers to objects in default config object\r\n\t_clearObjectPointers(){\r\n\t\tthis.options.columns = this.options.columns.slice(0);\r\n\r\n\t\tif(!this.options.reactiveData){\r\n\t\t\tthis.options.data = this.options.data.slice(0);\r\n\t\t}\r\n\t}\r\n\r\n\t//build tabulator element\r\n\t_buildElement(){\r\n\t\tvar element = this.element,\r\n\t\tmod = this.modules,\r\n\t\toptions = this.options;\r\n\r\n\t\toptions.tableBuilding.call(this);\r\n\r\n\t\telement.classList.add(\"tabulator\");\r\n\t\telement.setAttribute(\"role\", \"grid\");\r\n\r\n\t\t//empty element\r\n\t\twhile(element.firstChild) element.removeChild(element.firstChild);\r\n\r\n\t\t//set table height\r\n\t\tif(options.height){\r\n\t\t\toptions.height = isNaN(options.height) ? options.height : options.height + \"px\";\r\n\t\t\telement.style.height = options.height;\r\n\t\t}\r\n\r\n\t\t//set table min height\r\n\t\tif(options.minHeight !== false){\r\n\t\t\toptions.minHeight = isNaN(options.minHeight) ? options.minHeight : options.minHeight + \"px\";\r\n\t\t\telement.style.minHeight = options.minHeight;\r\n\t\t}\r\n\r\n\t\t//set table maxHeight\r\n\t\tif(options.maxHeight !== false){\r\n\t\t\toptions.maxHeight = isNaN(options.maxHeight) ? options.maxHeight : options.maxHeight + \"px\";\r\n\t\t\telement.style.maxHeight = options.maxHeight;\r\n\t\t}\r\n\r\n\t\tthis.columnManager.initialize();\r\n\t\tthis.rowManager.initialize();\r\n\r\n\t\tthis._detectBrowser();\r\n\r\n\t\tif(this.modExists(\"layout\", true)){\r\n\t\t\tmod.layout.initialize(options.layout);\r\n\t\t}\r\n\r\n\t\t//set localization\r\n\t\tmod.localize.initialize();\r\n\r\n\t\tif(options.headerFilterPlaceholder !== false){\r\n\t\t\tmod.localize.setHeaderFilterPlaceholder(options.headerFilterPlaceholder);\r\n\t\t}\r\n\r\n\t\tfor(let locale in options.langs){\r\n\t\t\tmod.localize.installLang(locale, options.langs[locale]);\r\n\t\t}\r\n\r\n\t\tmod.localize.setLocale(options.locale);\r\n\r\n\t\t//configure placeholder element\r\n\t\tif(typeof options.placeholder == \"string\"){\r\n\r\n\t\t\tvar el = document.createElement(\"div\");\r\n\t\t\tel.classList.add(\"tabulator-placeholder\");\r\n\r\n\t\t\tvar span = document.createElement(\"span\");\r\n\t\t\tspan.innerHTML = options.placeholder;\r\n\r\n\t\t\tel.appendChild(span);\r\n\r\n\t\t\toptions.placeholder = el;\r\n\t\t}\r\n\r\n\t\t//build table elements\r\n\t\telement.appendChild(this.columnManager.getElement());\r\n\t\telement.appendChild(this.rowManager.getElement());\r\n\r\n\t\tif(options.footerElement){\r\n\t\t\tthis.footerManager.activate();\r\n\t\t}\r\n\r\n\t\tif(options.persistence && this.modExists(\"persistence\", true)){\r\n\t\t\tmod.persistence.initialize();\r\n\t\t}\r\n\r\n\t\tif(options.movableRows && this.modExists(\"moveRow\")){\r\n\t\t\tmod.moveRow.initialize();\r\n\t\t}\r\n\r\n\t\tif(options.autoColumns && this.options.data){\r\n\t\t\tthis.columnManager.generateColumnsFromRowData(this.options.data);\r\n\t\t}\r\n\r\n\t\tif(this.modExists(\"columnCalcs\")){\r\n\t\t\tmod.columnCalcs.initialize();\r\n\t\t}\r\n\r\n\t\tthis.columnManager.setColumns(options.columns);\r\n\r\n\t\tif(options.dataTree && this.modExists(\"dataTree\", true)){\r\n\t\t\tmod.dataTree.initialize();\r\n\t\t}\r\n\r\n\t\tif(this.modExists(\"frozenRows\")){\r\n\t\t\tthis.modules.frozenRows.initialize();\r\n\t\t}\r\n\r\n\t\tif(((options.persistence && this.modExists(\"persistence\", true) && mod.persistence.config.sort) || options.initialSort) && this.modExists(\"sort\", true)){\r\n\t\t\tvar sorters = [];\r\n\r\n\t\t\tif(options.persistence && this.modExists(\"persistence\", true) && mod.persistence.config.sort){\r\n\t\t\t\tsorters = mod.persistence.load(\"sort\");\r\n\r\n\t\t\t\tif(sorters === false && options.initialSort){\r\n\t\t\t\t\tsorters = options.initialSort;\r\n\t\t\t\t}\r\n\t\t\t}else if(options.initialSort){\r\n\t\t\t\tsorters = options.initialSort;\r\n\t\t\t}\r\n\r\n\t\t\tmod.sort.setSort(sorters);\r\n\t\t}\r\n\r\n\t\tif(((options.persistence && this.modExists(\"persistence\", true) && mod.persistence.config.filter) || options.initialFilter) && this.modExists(\"filter\", true)){\r\n\t\t\tvar filters = [];\r\n\r\n\r\n\t\t\tif(options.persistence && this.modExists(\"persistence\", true) && mod.persistence.config.filter){\r\n\t\t\t\tfilters = mod.persistence.load(\"filter\");\r\n\r\n\t\t\t\tif(filters === false && options.initialFilter){\r\n\t\t\t\t\tfilters = options.initialFilter;\r\n\t\t\t\t}\r\n\t\t\t}else if(options.initialFilter){\r\n\t\t\t\tfilters = options.initialFilter;\r\n\t\t\t}\r\n\r\n\t\t\tmod.filter.setFilter(filters);\r\n\t\t}\r\n\r\n\t\tif(options.initialHeaderFilter && this.modExists(\"filter\", true)){\r\n\t\t\toptions.initialHeaderFilter.forEach((item) => {\r\n\r\n\t\t\t\tvar column = this.columnManager.findColumn(item.field);\r\n\r\n\t\t\t\tif(column){\r\n\t\t\t\t\tmod.filter.setHeaderFilterValue(column, item.value);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.warn(\"Column Filter Error - No matching column found:\", item.field);\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\r\n\t\tif(this.modExists(\"ajax\")){\r\n\t\t\tmod.ajax.initialize();\r\n\t\t}\r\n\r\n\t\tif(options.pagination && this.modExists(\"page\", true)){\r\n\t\t\tmod.page.initialize();\r\n\t\t}\r\n\r\n\t\tif(options.groupBy && this.modExists(\"groupRows\", true)){\r\n\t\t\tmod.groupRows.initialize();\r\n\t\t}\r\n\r\n\t\tif(this.modExists(\"keybindings\")){\r\n\t\t\tmod.keybindings.initialize();\r\n\t\t}\r\n\r\n\t\tif(this.modExists(\"selectRow\")){\r\n\t\t\tmod.selectRow.clearSelectionData(true);\r\n\t\t}\r\n\r\n\t\tif(options.autoResize && this.modExists(\"resizeTable\")){\r\n\t\t\tmod.resizeTable.initialize();\r\n\t\t}\r\n\r\n\t\tif(this.modExists(\"clipboard\")){\r\n\t\t\tmod.clipboard.initialize();\r\n\t\t}\r\n\r\n\t\tif(options.printAsHtml && this.modExists(\"print\")){\r\n\t\t\tmod.print.initialize();\r\n\t\t}\r\n\r\n\t\toptions.tableBuilt.call(this);\r\n\t}\r\n\r\n\t_loadInitialData(){\r\n\t\tif(this.options.pagination && this.modExists(\"page\")){\r\n\t\t\tthis.modules.page.reset(true, true);\r\n\r\n\t\t\tif(this.options.pagination == \"local\"){\r\n\t\t\t\tif(this.options.data.length){\r\n\t\t\t\t\tthis.rowManager.setData(this.options.data, false, true);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tif((this.options.ajaxURL || this.options.ajaxURLGenerator) && this.modExists(\"ajax\")){\r\n\t\t\t\t\t\tthis.modules.ajax.loadData(false, true).then(()=>{}).catch(()=>{\r\n\t\t\t\t\t\t\tif(this.options.paginationInitialPage){\r\n\t\t\t\t\t\t\t\tthis.modules.page.setPage(this.options.paginationInitialPage);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tthis.rowManager.setData(this.options.data, false, true);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(this.options.paginationInitialPage){\r\n\t\t\t\t\tthis.modules.page.setPage(this.options.paginationInitialPage);\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tif(this.options.ajaxURL){\r\n\t\t\t\t\tthis.modules.page.setPage(this.options.paginationInitialPage).then(()=>{}).catch(()=>{});\r\n\t\t\t\t}else{\r\n\t\t\t\t\tthis.rowManager.setData([], false, true);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tif(this.options.data.length){\r\n\t\t\t\tthis.rowManager.setData(this.options.data);\r\n\t\t\t}else{\r\n\t\t\t\tif((this.options.ajaxURL || this.options.ajaxURLGenerator) && this.modExists(\"ajax\")){\r\n\t\t\t\t\tthis.modules.ajax.loadData(false, true).then(()=>{}).catch(()=>{});\r\n\t\t\t\t}else{\r\n\t\t\t\t\tthis.rowManager.setData(this.options.data, false, true);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//deconstructor\r\n\tdestroy(){\r\n\t\tvar element = this.element;\r\n\r\n\t\tcomms(this); //deregister table from inderdevice communication\r\n\r\n\t\tif(this.options.reactiveData && this.modExists(\"reactiveData\", true)){\r\n\t\t\tthis.modules.reactiveData.unwatchData();\r\n\t\t}\r\n\r\n\t\t//clear row data\r\n\t\tthis.rowManager.rows.forEach(function(row){\r\n\t\t\trow.wipe();\r\n\t\t});\r\n\r\n\t\tthis.rowManager.rows = [];\r\n\t\tthis.rowManager.activeRows = [];\r\n\t\tthis.rowManager.displayRows = [];\r\n\r\n\t\t//clear event bindings\r\n\t\tif(this.options.autoResize && this.modExists(\"resizeTable\")){\r\n\t\t\tthis.modules.resizeTable.clearBindings();\r\n\t\t}\r\n\r\n\t\tif(this.modExists(\"keybindings\")){\r\n\t\t\tthis.modules.keybindings.clearBindings();\r\n\t\t}\r\n\r\n\t\t//clear DOM\r\n\t\twhile(element.firstChild) element.removeChild(element.firstChild);\r\n\t\telement.classList.remove(\"tabulator\");\r\n\t}\r\n\r\n\t_detectBrowser(){\r\n\t\tvar ua = navigator.userAgent||navigator.vendor||window.opera;\r\n\r\n\t\tif(ua.indexOf(\"Trident\") > -1){\r\n\t\t\tthis.browser = \"ie\";\r\n\t\t\tthis.browserSlow = true;\r\n\t\t}else if(ua.indexOf(\"Edge\") > -1){\r\n\t\t\tthis.browser = \"edge\";\r\n\t\t\tthis.browserSlow = true;\r\n\t\t}else if(ua.indexOf(\"Firefox\") > -1){\r\n\t\t\tthis.browser = \"firefox\";\r\n\t\t\tthis.browserSlow = false;\r\n\t\t}else{\r\n\t\t\tthis.browser = \"other\";\r\n\t\t\tthis.browserSlow = false;\r\n\t\t}\r\n\r\n\t\tthis.browserMobile = /(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i.test(ua)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\\-(n|u)|c55\\/|capi|ccwa|cdm\\-|cell|chtm|cldc|cmd\\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\\-s|devi|dica|dmob|do(c|p)o|ds(12|\\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\\-|_)|g1 u|g560|gene|gf\\-5|g\\-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd\\-(m|p|t)|hei\\-|hi(pt|ta)|hp( i|ip)|hs\\-c|ht(c(\\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\\-(20|go|ma)|i230|iac( |\\-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc\\-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|\\-[a-w])|libw|lynx|m1\\-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m\\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\\-2|po(ck|rt|se)|prox|psio|pt\\-g|qa\\-a|qc(07|12|21|32|60|\\-[2-7]|i\\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\\-|oo|p\\-)|sdk\\/|se(c(\\-|0|1)|47|mc|nd|ri)|sgh\\-|shar|sie(\\-|m)|sk\\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\\-|v\\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\\-|tdg\\-|tel(i|m)|tim\\-|t\\-mo|to(pl|sh)|ts(70|m\\-|m3|m5)|tx\\-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\\-|your|zeto|zte\\-/i.test(ua.substr(0,4));\r\n\t}\r\n\r\n\t////////////////// Data Handling //////////////////\r\n\t//block table redrawing\r\n\tblockRedraw(){\r\n\t\treturn this.rowManager.blockRedraw();\r\n\t}\r\n\r\n\t//restore table redrawing\r\n\trestoreRedraw(){\r\n\t\treturn this.rowManager.restoreRedraw();\r\n\t}\r\n\r\n\t//local data from local file\r\n\tsetDataFromLocalFile(extensions){\r\n\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tvar input = document.createElement(\"input\");\r\n\t\t\tinput.type = \"file\";\r\n\t\t\tinput.accept = extensions || \".json,application/json\";\r\n\r\n\t\t\tinput.addEventListener(\"change\", (e) => {\r\n\t\t\t\tvar file = input.files[0],\r\n\t\t\t\treader = new FileReader(),\r\n\t\t\t\tdata;\r\n\r\n\t\t\t\treader.readAsText(file);\r\n\r\n\t\t\t\treader.onload = (e) => {\r\n\r\n\t\t\t\t\ttry {\r\n\t\t\t\t\t\tdata = JSON.parse(reader.result);\r\n\t\t\t\t\t} catch(e) {\r\n\t\t\t\t\t\tconsole.warn(\"File Load Error - File contents is invalid JSON\", e);\r\n\t\t\t\t\t\treject(e);\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tthis.setData(data)\r\n\t\t\t\t\t.then((data) => {\r\n\t\t\t\t\t\tresolve(data);\r\n\t\t\t\t\t})\r\n\t\t\t\t\t.catch((err) => {\r\n\t\t\t\t\t\tresolve(err);\r\n\t\t\t\t\t});\r\n\t\t\t\t};\r\n\r\n\t\t\t\treader.onerror = (e) => {\r\n\t\t\t\t\tconsole.warn(\"File Load Error - Unable to read file\");\r\n\t\t\t\t\treject();\r\n\t\t\t\t};\r\n\t\t\t});\r\n\r\n\t\t\tinput.click();\r\n\t\t});\r\n\t}\r\n\r\n\t//load data\r\n\tsetData(data, params, config){\r\n\t\tif(this.modExists(\"ajax\")){\r\n\t\t\tthis.modules.ajax.blockActiveRequest();\r\n\t\t}\r\n\r\n\t\treturn this._setData(data, params, config, false, true);\r\n\t}\r\n\r\n\t_setData(data, params, config, inPosition, columnsChanged){\r\n\t\tif(typeof(data) === \"string\"){\r\n\t\t\tif (data.indexOf(\"{\") == 0 || data.indexOf(\"[\") == 0){\r\n\t\t\t\t//data is a json encoded string\r\n\t\t\t\treturn this.rowManager.setData(JSON.parse(data), inPosition, columnsChanged);\r\n\t\t\t}else{\r\n\r\n\t\t\t\tif(this.modExists(\"ajax\", true)){\r\n\t\t\t\t\tif(params){\r\n\t\t\t\t\t\tthis.modules.ajax.setParams(params);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif(config){\r\n\t\t\t\t\t\tthis.modules.ajax.setConfig(config);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tthis.modules.ajax.setUrl(data);\r\n\r\n\t\t\t\t\tif(this.options.pagination == \"remote\" && this.modExists(\"page\", true)){\r\n\t\t\t\t\t\tthis.modules.page.reset(true, true);\r\n\t\t\t\t\t\treturn this.modules.page.setPage(1);\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\t//assume data is url, make ajax call to url to get data\r\n\t\t\t\t\t\treturn this.modules.ajax.loadData(inPosition, columnsChanged);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tif(data){\r\n\t\t\t\t//asume data is already an object\r\n\t\t\t\treturn this.rowManager.setData(data, inPosition, columnsChanged);\r\n\t\t\t}else{\r\n\t\t\t\t//no data provided, check if ajaxURL is present;\r\n\t\t\t\tif(this.modExists(\"ajax\") && (this.modules.ajax.getUrl || this.options.ajaxURLGenerator)){\r\n\t\t\t\t\tif(this.options.pagination == \"remote\" && this.modExists(\"page\", true)){\r\n\t\t\t\t\t\tthis.modules.page.reset(true, true);\r\n\t\t\t\t\t\treturn this.modules.page.setPage(1);\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\treturn this.modules.ajax.loadData(inPosition, columnsChanged);\r\n\t\t\t\t\t}\r\n\t\t\t\t}else{\r\n\t\t\t\t\t//empty data\r\n\t\t\t\t\treturn this.rowManager.setData([], inPosition, columnsChanged);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//clear data\r\n\tclearData(){\r\n\t\tif(this.modExists(\"ajax\")){\r\n\t\t\tthis.modules.ajax.blockActiveRequest();\r\n\t\t}\r\n\r\n\t\tthis.rowManager.clearData();\r\n\t}\r\n\r\n\t//get table data array\r\n\tgetData(active){\r\n\t\treturn this.rowManager.getData(active);\r\n\t}\r\n\r\n\t//get table data array count\r\n\tgetDataCount(active){\r\n\t\treturn this.rowManager.getDataCount(active);\r\n\t}\r\n\r\n\t//search for specific row components\r\n\tsearchRows(field, type, value){\r\n\t\tif(this.modExists(\"filter\", true)){\r\n\t\t\treturn this.modules.filter.search(\"rows\", field, type, value);\r\n\t\t}\r\n\t}\r\n\r\n\t//search for specific data\r\n\tsearchData(field, type, value){\r\n\t\tif(this.modExists(\"filter\", true)){\r\n\t\t\treturn this.modules.filter.search(\"data\", field, type, value);\r\n\t\t}\r\n\t}\r\n\r\n\t//get table html\r\n\tgetHtml(visible, style, config){\r\n\t\tif(this.modExists(\"export\", true)){\r\n\t\t\treturn this.modules.export.getHtml(visible, style, config);\r\n\t\t}\r\n\t}\r\n\r\n\t//get print html\r\n\tprint(visible, style, config){\r\n\t\tif(this.modExists(\"print\", true)){\r\n\t\t\treturn this.modules.print.printFullscreen(visible, style, config);\r\n\t\t}\r\n\t}\r\n\r\n\t//retrieve Ajax URL\r\n\tgetAjaxUrl(){\r\n\t\tif(this.modExists(\"ajax\", true)){\r\n\t\t\treturn this.modules.ajax.getUrl();\r\n\t\t}\r\n\t}\r\n\r\n\t//replace data, keeping table in position with same sort\r\n\treplaceData(data, params, config){\r\n\t\tif(this.modExists(\"ajax\")){\r\n\t\t\tthis.modules.ajax.blockActiveRequest();\r\n\t\t}\r\n\r\n\t\treturn this._setData(data, params, config, true);\r\n\t}\r\n\r\n\t//update table data\r\n\tupdateData(data){\r\n\t\tvar responses = 0;\r\n\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tif(this.modExists(\"ajax\")){\r\n\t\t\t\tthis.modules.ajax.blockActiveRequest();\r\n\t\t\t}\r\n\r\n\t\t\tif(typeof data === \"string\"){\r\n\t\t\t\tdata = JSON.parse(data);\r\n\t\t\t}\r\n\r\n\t\t\tif(data){\r\n\t\t\t\tdata.forEach((item) => {\r\n\t\t\t\t\tvar row = this.rowManager.findRow(item[this.options.index]);\r\n\r\n\t\t\t\t\tif(row){\r\n\t\t\t\t\t\tresponses++;\r\n\r\n\t\t\t\t\t\trow.updateData(item)\r\n\t\t\t\t\t\t.then(()=>{\r\n\t\t\t\t\t\t\tresponses--;\r\n\r\n\t\t\t\t\t\t\tif(!responses){\r\n\t\t\t\t\t\t\t\tresolve();\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Update Error - No data provided\");\r\n\t\t\t\treject(\"Update Error - No data provided\");\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\taddData(data, pos, index){\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tif(this.modExists(\"ajax\")){\r\n\t\t\t\tthis.modules.ajax.blockActiveRequest();\r\n\t\t\t}\r\n\r\n\t\t\tif(typeof data === \"string\"){\r\n\t\t\t\tdata = JSON.parse(data);\r\n\t\t\t}\r\n\r\n\t\t\tif(data){\r\n\t\t\t\tthis.rowManager.addRows(data, pos, index)\r\n\t\t\t\t.then((rows) => {\r\n\t\t\t\t\tvar output = [];\r\n\r\n\t\t\t\t\trows.forEach(function(row){\r\n\t\t\t\t\t\toutput.push(row.getComponent());\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\tresolve(output);\r\n\t\t\t\t});\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Update Error - No data provided\");\r\n\t\t\t\treject(\"Update Error - No data provided\");\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t//update table data\r\n\tupdateOrAddData(data){\r\n\t\tvar rows = [],\r\n\t\tresponses = 0;\r\n\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tif(this.modExists(\"ajax\")){\r\n\t\t\t\tthis.modules.ajax.blockActiveRequest();\r\n\t\t\t}\r\n\r\n\t\t\tif(typeof data === \"string\"){\r\n\t\t\t\tdata = JSON.parse(data);\r\n\t\t\t}\r\n\r\n\t\t\tif(data){\r\n\t\t\t\tdata.forEach((item) => {\r\n\t\t\t\t\tvar row = this.rowManager.findRow(item[this.options.index]);\r\n\r\n\t\t\t\t\tresponses++;\r\n\r\n\t\t\t\t\tif(row){\r\n\t\t\t\t\t\trow.updateData(item)\r\n\t\t\t\t\t\t.then(()=>{\r\n\t\t\t\t\t\t\tresponses--;\r\n\t\t\t\t\t\t\trows.push(row.getComponent());\r\n\r\n\t\t\t\t\t\t\tif(!responses){\r\n\t\t\t\t\t\t\t\tresolve(rows);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tthis.rowManager.addRows(item)\r\n\t\t\t\t\t\t.then((newRows)=>{\r\n\t\t\t\t\t\t\tresponses--;\r\n\t\t\t\t\t\t\trows.push(newRows[0].getComponent());\r\n\r\n\t\t\t\t\t\t\tif(!responses){\r\n\t\t\t\t\t\t\t\tresolve(rows);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Update Error - No data provided\");\r\n\t\t\t\treject(\"Update Error - No data provided\");\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t//get row object\r\n\tgetRow(index){\r\n\t\tvar row = this.rowManager.findRow(index);\r\n\r\n\t\tif(row){\r\n\t\t\treturn row.getComponent();\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Find Error - No matching row found:\", index);\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\t//get row object\r\n\tgetRowFromPosition(position, active){\r\n\t\tvar row = this.rowManager.getRowFromPosition(position, active);\r\n\r\n\t\tif(row){\r\n\t\t\treturn row.getComponent();\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Find Error - No matching row found:\", position);\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\t//delete row from table\r\n\tdeleteRow(index){\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tvar count = 0,\r\n\t\t\tsuccessCount = 0,\r\n\t\t\tfoundRows = [];\r\n\r\n\t\t\tfunction doneCheck(){\r\n\t\t\t\tcount++;\r\n\r\n\t\t\t\tif(count == index.length){\r\n\t\t\t\t\tif(successCount){\r\n\t\t\t\t\t\tthis.rowManager.reRenderInPosition();\r\n\t\t\t\t\t\tresolve();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif(!Array.isArray(index)){\r\n\t\t\t\tindex = [index];\r\n\t\t\t}\r\n\r\n\t\t\t//find matching rows\r\n\t\t\tindex.forEach((item) =>{\r\n\t\t\t\tvar row = this.rowManager.findRow(item, true);\r\n\r\n\t\t\t\tif(row){\r\n\t\t\t\t\tfoundRows.push(row);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.warn(\"Delete Error - No matching row found:\", item);\r\n\t\t\t\t\treject(\"Delete Error - No matching row found\")\r\n\t\t\t\t\tdoneCheck();\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\t//sort rows into correct order to ensure smooth delete from table\r\n\t\t\tfoundRows.sort((a, b) => {\r\n\t\t\t\treturn this.rowManager.rows.indexOf(a) > this.rowManager.rows.indexOf(b) ? 1 : -1;\r\n\t\t\t});\r\n\r\n\t\t\tfoundRows.forEach((row) =>{\r\n\t\t\t\trow.delete()\r\n\t\t\t\t.then(() => {\r\n\t\t\t\t\tsuccessCount++;\r\n\t\t\t\t\tdoneCheck();\r\n\t\t\t\t})\r\n\t\t\t\t.catch((err) => {\r\n\t\t\t\t\tdoneCheck();\r\n\t\t\t\t\treject(err);\r\n\t\t\t\t});\r\n\t\t\t});\r\n\t\t});\r\n\t}\r\n\r\n\t//add row to table\r\n\taddRow(data, pos, index){\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tif(typeof data === \"string\"){\r\n\t\t\t\tdata = JSON.parse(data);\r\n\t\t\t}\r\n\r\n\t\t\tthis.rowManager.addRows(data, pos, index)\r\n\t\t\t.then((rows)=>{\r\n\t\t\t\t//recalc column calculations if present\r\n\t\t\t\tif(this.modExists(\"columnCalcs\")){\r\n\t\t\t\t\tthis.modules.columnCalcs.recalc(this.rowManager.activeRows);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tresolve(rows[0].getComponent());\r\n\t\t\t});\r\n\t\t});\r\n\t}\r\n\r\n\t//update a row if it exitsts otherwise create it\r\n\tupdateOrAddRow(index, data){\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tvar row = this.rowManager.findRow(index);\r\n\r\n\t\t\tif(typeof data === \"string\"){\r\n\t\t\t\tdata = JSON.parse(data);\r\n\t\t\t}\r\n\r\n\t\t\tif(row){\r\n\t\t\t\trow.updateData(data)\r\n\t\t\t\t.then(()=>{\r\n\t\t\t\t\t//recalc column calculations if present\r\n\t\t\t\t\tif(this.modExists(\"columnCalcs\")){\r\n\t\t\t\t\t\tthis.modules.columnCalcs.recalc(this.rowManager.activeRows);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tresolve(row.getComponent());\r\n\t\t\t\t})\r\n\t\t\t\t.catch((err)=>{\r\n\t\t\t\t\treject(err);\r\n\t\t\t\t});\r\n\t\t\t}else{\r\n\t\t\t\trow = this.rowManager.addRows(data)\r\n\t\t\t\t.then((rows)=>{\r\n\t\t\t\t\t//recalc column calculations if present\r\n\t\t\t\t\tif(this.modExists(\"columnCalcs\")){\r\n\t\t\t\t\t\tthis.modules.columnCalcs.recalc(this.rowManager.activeRows);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tresolve(rows[0].getComponent());\r\n\t\t\t\t})\r\n\t\t\t\t.catch((err)=>{\r\n\t\t\t\t\treject(err);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t//update row data\r\n\tupdateRow(index, data){\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tvar row = this.rowManager.findRow(index);\r\n\r\n\t\t\tif(typeof data === \"string\"){\r\n\t\t\t\tdata = JSON.parse(data);\r\n\t\t\t}\r\n\r\n\t\t\tif(row){\r\n\t\t\t\trow.updateData(data).then(()=>{\r\n\t\t\t\t\tresolve(row.getComponent());\r\n\t\t\t\t})\r\n\t\t\t\t.catch((err)=>{\r\n\t\t\t\t\treject(err);\r\n\t\t\t\t});\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Update Error - No matching row found:\", index);\r\n\t\t\t\treject(\"Update Error - No matching row found\");\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t//scroll to row in DOM\r\n\tscrollToRow(index, position, ifVisible){\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tvar row = this.rowManager.findRow(index);\r\n\r\n\t\t\tif(row){\r\n\t\t\t\tthis.rowManager.scrollToRow(row, position, ifVisible)\r\n\t\t\t\t.then(()=>{\r\n\t\t\t\t\tresolve();\r\n\t\t\t\t})\r\n\t\t\t\t.catch((err)=>{\r\n\t\t\t\t\treject(err);\r\n\t\t\t\t});\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Scroll Error - No matching row found:\", index);\r\n\t\t\t\treject(\"Scroll Error - No matching row found\");\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tmoveRow(from, to, after){\r\n\t\tvar fromRow = this.rowManager.findRow(from);\r\n\r\n\t\tif(fromRow){\r\n\t\t\tfromRow.moveToRow(to, after);\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Move Error - No matching row found:\", from);\r\n\t\t}\r\n\t}\r\n\r\n\tgetRows(active){\r\n\t\treturn this.rowManager.getComponents(active);\r\n\t}\r\n\r\n\t//get position of row in table\r\n\tgetRowPosition(index, active){\r\n\t\tvar row = this.rowManager.findRow(index);\r\n\r\n\t\tif(row){\r\n\t\t\treturn this.rowManager.getRowPosition(row, active);\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Position Error - No matching row found:\", index);\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\t//copy table data to clipboard\r\n\tcopyToClipboard(selector){\r\n\t\tif(this.modExists(\"clipboard\", true)){\r\n\t\t\tthis.modules.clipboard.copy(selector);\r\n\t\t}\r\n\t}\r\n\r\n\t/////////////// Column Functions ///////////////\r\n\tsetColumns(definition){\r\n\t\tthis.columnManager.setColumns(definition);\r\n\t}\r\n\r\n\tgetColumns(structured){\r\n\t\treturn this.columnManager.getComponents(structured);\r\n\t}\r\n\r\n\tgetColumn(field){\r\n\t\tvar col = this.columnManager.findColumn(field);\r\n\r\n\t\tif(col){\r\n\t\t\treturn col.getComponent();\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Find Error - No matching column found:\", field);\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\tgetColumnDefinitions(){\r\n\t\treturn this.columnManager.getDefinitionTree();\r\n\t}\r\n\r\n\tgetColumnLayout(){\r\n\t\tif(this.modExists(\"persistence\", true)){\r\n\t\t\treturn this.modules.persistence.parseColumns(this.columnManager.getColumns());\r\n\t\t}\r\n\t}\r\n\r\n\tsetColumnLayout(layout){\r\n\t\tif(this.modExists(\"persistence\", true)){\r\n\t\t\tthis.columnManager.setColumns(this.modules.persistence.mergeDefinition(this.options.columns, layout))\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn false;\r\n\t}\r\n\r\n\tshowColumn(field){\r\n\t\tvar column = this.columnManager.findColumn(field);\r\n\r\n\t\tif(column){\r\n\t\t\tcolumn.show();\r\n\r\n\t\t\tif(this.options.responsiveLayout && this.modExists(\"responsiveLayout\", true)){\r\n\t\t\t\tthis.modules.responsiveLayout.update();\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Column Show Error - No matching column found:\", field);\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\thideColumn(field){\r\n\t\tvar column = this.columnManager.findColumn(field);\r\n\r\n\t\tif(column){\r\n\t\t\tcolumn.hide();\r\n\r\n\t\t\tif(this.options.responsiveLayout && this.modExists(\"responsiveLayout\", true)){\r\n\t\t\t\tthis.modules.responsiveLayout.update();\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Column Hide Error - No matching column found:\", field);\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\ttoggleColumn(field){\r\n\t\tvar column = this.columnManager.findColumn(field);\r\n\r\n\t\tif(column){\r\n\t\t\tif(column.visible){\r\n\t\t\t\tcolumn.hide();\r\n\t\t\t}else{\r\n\t\t\t\tcolumn.show();\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Column Visibility Toggle Error - No matching column found:\", field);\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\taddColumn(definition, before, field){\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tvar column = this.columnManager.findColumn(field);\r\n\r\n\t\t\tthis.columnManager.addColumn(definition, before, column)\r\n\t\t\t.then((column) => {\r\n\t\t\t\tresolve(column.getComponent());\r\n\t\t\t}).catch((err) => {\r\n\t\t\t\treject(err);\r\n\t\t\t});\r\n\t\t});\r\n\t}\r\n\r\n\tdeleteColumn(field){\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tvar column = this.columnManager.findColumn(field);\r\n\r\n\t\t\tif(column){\r\n\t\t\t\tcolumn.delete()\r\n\t\t\t\t.then(() => {\r\n\t\t\t\t\tresolve();\r\n\t\t\t\t}).catch((err) => {\r\n\t\t\t\t\treject(err);\r\n\t\t\t\t});\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Column Delete Error - No matching column found:\", field);\r\n\t\t\t\treject();\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tupdateColumnDefinition(field, definition){\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tvar column = this.columnManager.findColumn(field);\r\n\r\n\t\t\tif(column){\r\n\t\t\t\tcolumn.updateDefinition(definition)\r\n\t\t\t\t.then((col) => {\r\n\t\t\t\t\tresolve(col);\r\n\t\t\t\t}).catch((err) => {\r\n\t\t\t\t\treject(err);\r\n\t\t\t\t});\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Column Update Error - No matching column found:\", field);\r\n\t\t\t\treject();\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tmoveColumn(from, to, after){\r\n\t\tvar fromColumn = this.columnManager.findColumn(from);\r\n\t\tvar toColumn = this.columnManager.findColumn(to);\r\n\r\n\t\tif(fromColumn){\r\n\t\t\tif(toColumn){\r\n\t\t\t\tthis.columnManager.moveColumn(fromColumn, toColumn, after)\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Move Error - No matching column found:\", toColumn);\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Move Error - No matching column found:\", from);\r\n\t\t}\r\n\t}\r\n\r\n\t//scroll to column in DOM\r\n\tscrollToColumn(field, position, ifVisible){\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tvar column = this.columnManager.findColumn(field);\r\n\r\n\t\t\tif(column){\r\n\t\t\t\tthis.columnManager.scrollToColumn(column, position, ifVisible)\r\n\t\t\t\t.then(()=>{\r\n\t\t\t\t\tresolve();\r\n\t\t\t\t})\r\n\t\t\t\t.catch((err)=>{\r\n\t\t\t\t\treject(err);\r\n\t\t\t\t});\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Scroll Error - No matching column found:\", field);\r\n\t\t\t\treject(\"Scroll Error - No matching column found\");\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t//////////// Localization Functions ////////////\r\n\tsetLocale(locale){\r\n\t\tthis.modules.localize.setLocale(locale);\r\n\t}\r\n\r\n\tgetLocale(){\r\n\t\treturn this.modules.localize.getLocale();\r\n\t}\r\n\r\n\tgetLang(locale){\r\n\t\treturn this.modules.localize.getLang(locale);\r\n\t}\r\n\r\n\t//////////// General Public Functions ////////////\r\n\t//redraw list without updating data\r\n\tredraw(force){\r\n\t\tthis.columnManager.redraw(force);\r\n\t\tthis.rowManager.redraw(force);\r\n\t}\r\n\r\n\tsetHeight(height){\r\n\r\n\t\tif(this.rowManager.renderMode !== \"classic\"){\r\n\t\t\tthis.options.height = isNaN(height) ? height : height + \"px\";\r\n\t\t\tthis.element.style.height = this.options.height;\r\n\t\t\tthis.rowManager.setRenderMode();\r\n\t\t\tthis.rowManager.redraw();\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"setHeight function is not available in classic render mode\");\r\n\t\t}\r\n\t}\r\n\r\n\t///////////////////// Sorting ////////////////////\r\n\tsetSort(sortList, dir){\r\n\t\tif(this.modExists(\"sort\", true)){\r\n\t\t\tthis.modules.sort.setSort(sortList, dir);\r\n\t\t\tthis.rowManager.sorterRefresh();\r\n\t\t}\r\n\t}\r\n\r\n\tgetSorters(){\r\n\t\tif(this.modExists(\"sort\", true)){\r\n\t\t\treturn this.modules.sort.getSort();\r\n\t\t}\r\n\t}\r\n\r\n\tclearSort(){\r\n\t\tif(this.modExists(\"sort\", true)){\r\n\t\t\tthis.modules.sort.clear();\r\n\t\t\tthis.rowManager.sorterRefresh();\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t///////////////////// Filtering ////////////////////\r\n\r\n\t//set standard filters\r\n\tsetFilter(field, type, value, params){\r\n\t\tif(this.modExists(\"filter\", true)){\r\n\t\t\tthis.modules.filter.setFilter(field, type, value, params);\r\n\t\t\tthis.rowManager.filterRefresh();\r\n\t\t}\r\n\t}\r\n\r\n\t//set standard filters\r\n\trefreshFilter(){\r\n\t\tif(this.modExists(\"filter\", true)){\r\n\t\t\tthis.rowManager.filterRefresh();\r\n\t\t}\r\n\t}\r\n\r\n\t//add filter to array\r\n\taddFilter(field, type, value, params){\r\n\t\tif(this.modExists(\"filter\", true)){\r\n\t\t\tthis.modules.filter.addFilter(field, type, value, params);\r\n\t\t\tthis.rowManager.filterRefresh();\r\n\t\t}\r\n\t}\r\n\r\n\t//get all filters\r\n\tgetFilters(all){\r\n\t\tif(this.modExists(\"filter\", true)){\r\n\t\t\treturn this.modules.filter.getFilters(all);\r\n\t\t}\r\n\t}\r\n\r\n\tsetHeaderFilterFocus(field){\r\n\t\tif(this.modExists(\"filter\", true)){\r\n\t\t\tvar column = this.columnManager.findColumn(field);\r\n\r\n\t\t\tif(column){\r\n\t\t\t\tthis.modules.filter.setHeaderFilterFocus(column);\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Column Filter Focus Error - No matching column found:\", field);\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tgetHeaderFilterValue(field) {\r\n\t\tif(this.modExists(\"filter\", true)){\r\n\t\t\tvar column = this.columnManager.findColumn(field);\r\n\r\n\t\t\tif(column){\r\n\t\t\t\treturn this.modules.filter.getHeaderFilterValue(column);\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Column Filter Error - No matching column found:\", field);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tsetHeaderFilterValue(field, value){\r\n\t\tif(this.modExists(\"filter\", true)){\r\n\t\t\tvar column = this.columnManager.findColumn(field);\r\n\r\n\t\t\tif(column){\r\n\t\t\t\tthis.modules.filter.setHeaderFilterValue(column, value);\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Column Filter Error - No matching column found:\", field);\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tgetHeaderFilters(){\r\n\t\tif(this.modExists(\"filter\", true)){\r\n\t\t\treturn this.modules.filter.getHeaderFilters();\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t//remove filter from array\r\n\tremoveFilter(field, type, value){\r\n\t\tif(this.modExists(\"filter\", true)){\r\n\t\t\tthis.modules.filter.removeFilter(field, type, value);\r\n\t\t\tthis.rowManager.filterRefresh();\r\n\t\t}\r\n\t}\r\n\r\n\t//clear filters\r\n\tclearFilter(all){\r\n\t\tif(this.modExists(\"filter\", true)){\r\n\t\t\tthis.modules.filter.clearFilter(all);\r\n\t\t\tthis.rowManager.filterRefresh();\r\n\t\t}\r\n\t}\r\n\r\n\t//clear header filters\r\n\tclearHeaderFilter(){\r\n\t\tif(this.modExists(\"filter\", true)){\r\n\t\t\tthis.modules.filter.clearHeaderFilter();\r\n\t\t\tthis.rowManager.filterRefresh();\r\n\t\t}\r\n\t}\r\n\r\n\t///////////////////// select ////////////////////\r\n\tselectRow(rows){\r\n\t\tif(this.modExists(\"selectRow\", true)){\r\n\t\t\tthis.modules.selectRow.selectRows(rows);\r\n\t\t}\r\n\t}\r\n\r\n\tdeselectRow(rows){\r\n\t\tif(this.modExists(\"selectRow\", true)){\r\n\t\t\tthis.modules.selectRow.deselectRows(rows);\r\n\t\t}\r\n\t}\r\n\r\n\ttoggleSelectRow(row){\r\n\t\tif(this.modExists(\"selectRow\", true)){\r\n\t\t\tthis.modules.selectRow.toggleRow(row);\r\n\t\t}\r\n\t}\r\n\r\n\tgetSelectedRows(){\r\n\t\tif(this.modExists(\"selectRow\", true)){\r\n\t\t\treturn this.modules.selectRow.getSelectedRows();\r\n\t\t}\r\n\t}\r\n\r\n\tgetSelectedData(){\r\n\t\tif(this.modExists(\"selectRow\", true)){\r\n\t\t\treturn this.modules.selectRow.getSelectedData();\r\n\t\t}\r\n\t}\r\n\r\n\t///////////////////// validation ////////////////////\r\n\tgetInvalidCells(){\r\n\t\tif(this.modExists(\"validate\", true)){\r\n\t\t\treturn this.modules.validate.getInvalidCells();\r\n\t\t}\r\n\t}\r\n\r\n\tclearCellValidation(cells){\r\n\r\n\t\tif(this.modExists(\"validate\", true)){\r\n\r\n\t\t\tif(!cells){\r\n\t\t\t\tcells = this.modules.validate.getInvalidCells();\r\n\t\t\t}\r\n\r\n\t\t\tif(!Array.isArray(cells)){\r\n\t\t\t\tcells = [cells];\r\n\t\t\t}\r\n\r\n\t\t\tcells.forEach((cell) => {\r\n\t\t\t\tthis.modules.validate.clearValidation(cell._getSelf());\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tvalidate(cells){\r\n\t\tvar output = [];\r\n\r\n\t\t//clear row data\r\n\t\tthis.rowManager.rows.forEach(function(row){\r\n\t\t\tvar valid = row.validate();\r\n\r\n\t\t\tif(valid !== true){\r\n\t\t\t\toutput = output.concat(valid);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn output.length ? output : true;\r\n\t}\r\n\r\n\t//////////// Pagination Functions ////////////\r\n\tsetMaxPage(max){\r\n\t\tif(this.options.pagination && this.modExists(\"page\")){\r\n\t\t\tthis.modules.page.setMaxPage(max);\r\n\t\t}else{\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\tsetPage(page){\r\n\t\tif(this.options.pagination && this.modExists(\"page\")){\r\n\t\t\treturn this.modules.page.setPage(page);\r\n\t\t}else{\r\n\t\t\treturn new Promise((resolve, reject) => { reject() });\r\n\t\t}\r\n\t}\r\n\r\n\tsetPageToRow(row){\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tif(this.options.pagination && this.modExists(\"page\")){\r\n\t\t\t\trow = this.rowManager.findRow(row);\r\n\r\n\t\t\t\tif(row){\r\n\t\t\t\t\tthis.modules.page.setPageToRow(row)\r\n\t\t\t\t\t.then(()=>{\r\n\t\t\t\t\t\tresolve();\r\n\t\t\t\t\t})\r\n\t\t\t\t\t.catch(()=>{\r\n\t\t\t\t\t\treject();\r\n\t\t\t\t\t});\r\n\t\t\t\t}else{\r\n\t\t\t\t\treject();\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\treject();\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tsetPageSize(size){\r\n\t\tif(this.options.pagination && this.modExists(\"page\")){\r\n\t\t\tthis.modules.page.setPageSize(size);\r\n\t\t\tthis.modules.page.setPage(1).then(()=>{}).catch(()=>{});\r\n\t\t}else{\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\tgetPageSize(){\r\n\t\tif(this.options.pagination && this.modExists(\"page\", true)){\r\n\t\t\treturn this.modules.page.getPageSize();\r\n\t\t}\r\n\t}\r\n\r\n\tpreviousPage(){\r\n\t\tif(this.options.pagination && this.modExists(\"page\")){\r\n\t\t\tthis.modules.page.previousPage();\r\n\t\t}else{\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\tnextPage(){\r\n\t\tif(this.options.pagination && this.modExists(\"page\")){\r\n\t\t\tthis.modules.page.nextPage();\r\n\t\t}else{\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\tgetPage(){\r\n\t\tif(this.options.pagination && this.modExists(\"page\")){\r\n\t\t\treturn this.modules.page.getPage();\r\n\t\t}else{\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\tgetPageMax(){\r\n\t\tif(this.options.pagination && this.modExists(\"page\")){\r\n\t\t\treturn this.modules.page.getPageMax();\r\n\t\t}else{\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\t///////////////// Grouping Functions ///////////////\r\n\tsetGroupBy(groups){\r\n\t\tif(this.modExists(\"groupRows\", true)){\r\n\t\t\tthis.options.groupBy = groups;\r\n\t\t\tthis.modules.groupRows.initialize();\r\n\t\t\tthis.rowManager.refreshActiveData(\"display\");\r\n\r\n\t\t\tif(this.options.persistence && this.modExists(\"persistence\", true) && this.modules.persistence.config.group){\r\n\t\t\t\tthis.modules.persistence.save(\"group\");\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\tsetGroupValues(groupValues){\r\n\t\tif(this.modExists(\"groupRows\", true)){\r\n\t\t\tthis.options.groupValues = groupValues;\r\n\t\t\tthis.modules.groupRows.initialize();\r\n\t\t\tthis.rowManager.refreshActiveData(\"display\");\r\n\r\n\t\t\tif(this.options.persistence && this.modExists(\"persistence\", true) && this.modules.persistence.config.group){\r\n\t\t\t\tthis.modules.persistence.save(\"group\");\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\tsetGroupStartOpen(values){\r\n\t\tif(this.modExists(\"groupRows\", true)){\r\n\t\t\tthis.options.groupStartOpen = values;\r\n\t\t\tthis.modules.groupRows.initialize();\r\n\t\t\tif(this.options.groupBy){\r\n\t\t\t\tthis.rowManager.refreshActiveData(\"group\");\r\n\r\n\t\t\t\tif(this.options.persistence && this.modExists(\"persistence\", true) && this.modules.persistence.config.group){\r\n\t\t\t\t\tthis.modules.persistence.save(\"group\");\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Grouping Update - cant refresh view, no groups have been set\");\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\tsetGroupHeader(values){\r\n\t\tif(this.modExists(\"groupRows\", true)){\r\n\t\t\tthis.options.groupHeader = values;\r\n\t\t\tthis.modules.groupRows.initialize();\r\n\t\t\tif(this.options.groupBy){\r\n\t\t\t\tthis.rowManager.refreshActiveData(\"group\");\r\n\r\n\t\t\t\tif(this.options.persistence && this.modExists(\"persistence\", true) && this.modules.persistence.config.group){\r\n\t\t\t\t\tthis.modules.persistence.save(\"group\");\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Grouping Update - cant refresh view, no groups have been set\");\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\tgetGroups(values){\r\n\t\tif(this.modExists(\"groupRows\", true)){\r\n\t\t\treturn this.modules.groupRows.getGroups(true);\r\n\t\t}else{\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\t// get grouped table data in the same format as getData()\r\n\tgetGroupedData(){\r\n\t\tif (this.modExists(\"groupRows\", true)){\r\n\t\t\treturn this.options.groupBy ?\r\n\t\t\tthis.modules.groupRows.getGroupedData() : this.getData()\r\n\t\t}\r\n\t}\r\n\r\n\tgetEditedCells(){\r\n\t\tif(this.modExists(\"edit\", true)){\r\n\t\t\treturn this.modules.edit.getEditedCells();\r\n\t\t}\r\n\t}\r\n\r\n\tclearCellEdited(cells){\r\n\t\tif(this.modExists(\"edit\", true)){\r\n\r\n\t\t\tif(!cells){\r\n\t\t\t\tcells = this.modules.edit.getEditedCells();\r\n\t\t\t}\r\n\r\n\t\t\tif(!Array.isArray(cells)){\r\n\t\t\t\tcells = [cells];\r\n\t\t\t}\r\n\r\n\t\t\tcells.forEach((cell) => {\r\n\t\t\t\tthis.modules.edit.clearEdited(cell._getSelf());\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\t///////////////// Column Calculation Functions ///////////////\r\n\tgetCalcResults(){\r\n\t\tif(this.modExists(\"columnCalcs\", true)){\r\n\t\t\treturn this.modules.columnCalcs.getResults();\r\n\t\t}else{\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\trecalc(){\r\n\t\tif(this.modExists(\"columnCalcs\", true)){\r\n\t\t\tthis.modules.columnCalcs.recalcAll(this.rowManager.activeRows);\r\n\t\t}\r\n\t}\r\n\r\n\t/////////////// Navigation Management //////////////\r\n\tnavigatePrev(){\r\n\t\tvar cell = false;\r\n\r\n\t\tif(this.modExists(\"edit\", true)){\r\n\t\t\tcell = this.modules.edit.currentCell;\r\n\r\n\t\t\tif(cell){\r\n\t\t\t\treturn cell.nav().prev();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t}\r\n\r\n\tnavigateNext(){\r\n\t\tvar cell = false;\r\n\r\n\t\tif(this.modExists(\"edit\", true)){\r\n\t\t\tcell = this.modules.edit.currentCell;\r\n\r\n\t\t\tif(cell){\r\n\t\t\t\treturn cell.nav().next();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t}\r\n\r\n\tnavigateLeft(){\r\n\t\tvar cell = false;\r\n\r\n\t\tif(this.modExists(\"edit\", true)){\r\n\t\t\tcell = this.modules.edit.currentCell;\r\n\r\n\t\t\tif(cell){\r\n\t\t\t\te.preventDefault();\r\n\t\t\t\treturn cell.nav().left();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t}\r\n\r\n\tnavigateRight(){\r\n\t\tvar cell = false;\r\n\r\n\t\tif(this.modExists(\"edit\", true)){\r\n\t\t\tcell = this.modules.edit.currentCell;\r\n\r\n\t\t\tif(cell){\r\n\t\t\t\te.preventDefault();\r\n\t\t\t\treturn cell.nav().right();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t}\r\n\r\n\tnavigateUp(){\r\n\t\tvar cell = false;\r\n\r\n\t\tif(this.modExists(\"edit\", true)){\r\n\t\t\tcell = this.modules.edit.currentCell;\r\n\r\n\t\t\tif(cell){\r\n\t\t\t\te.preventDefault();\r\n\t\t\t\treturn cell.nav().up();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t}\r\n\r\n\tnavigateDown(){\r\n\t\tvar cell = false;\r\n\r\n\t\tif(this.modExists(\"edit\", true)){\r\n\t\t\tcell = this.modules.edit.currentCell;\r\n\r\n\t\t\tif(cell){\r\n\t\t\t\te.preventDefault();\r\n\t\t\t\treturn cell.nav().down();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t}\r\n\r\n\t/////////////// History Management //////////////\r\n\tundo(){\r\n\t\tif(this.options.history && this.modExists(\"history\", true)){\r\n\t\t\treturn this.modules.history.undo();\r\n\t\t}else{\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\tredo(){\r\n\t\tif(this.options.history && this.modExists(\"history\", true)){\r\n\t\t\treturn this.modules.history.redo();\r\n\t\t}else{\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\tgetHistoryUndoSize(){\r\n\t\tif(this.options.history && this.modExists(\"history\", true)){\r\n\t\t\treturn this.modules.history.getHistoryUndoSize();\r\n\t\t}else{\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\tgetHistoryRedoSize(){\r\n\t\tif(this.options.history && this.modExists(\"history\", true)){\r\n\t\t\treturn this.modules.history.getHistoryRedoSize();\r\n\t\t}else{\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\tclearHistory(){\r\n\t\tif(this.options.history && this.modExists(\"history\", true)){\r\n\t\t\treturn this.modules.history.clear();\r\n\t\t}else{\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\t/////////////// Download Management //////////////\r\n\tdownload(type, filename, options, active){\r\n\t\tif(this.modExists(\"download\", true)){\r\n\t\t\tthis.modules.download.download(type, filename, options, active);\r\n\t\t}\r\n\t}\r\n\r\n\tdownloadToTab(type, filename, options, active){\r\n\t\tif(this.modExists(\"download\", true)){\r\n\t\t\tthis.modules.download.download(type, filename, options, active, true);\r\n\t\t}\r\n\t}\r\n\r\n\t/////////// Inter Table Communications ///////////\r\n\ttableComms(table, module, action, data){\r\n\t\tthis.modules.comms.receive(table, module, action, data);\r\n\t}\r\n\r\n\t////////////// Extension Management //////////////\r\n\tmodExists(plugin, required){\r\n\t\tif(this.modules[plugin]){\r\n\t\t\treturn true;\r\n\t\t}else{\r\n\t\t\tif(required){\r\n\t\t\t\tconsole.error(\"Tabulator Module Not Installed: \" + plugin);\r\n\t\t\t}\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n}\r\n\r\n//default setup options\r\nTabulator.defaultOptions = defaultOptions;\r\n\r\n//bind modules and static functionality\r\nnew ModuleBinder(Tabulator);\r\n\r\nexport default Tabulator;","export default {\r\n\theight:false, //height of tabulator\r\n\tminHeight:false, //minimum height of tabulator\r\n\tmaxHeight:false, //maximum height of tabulator\r\n\r\n\tlayout:\"fitData\", ///layout type \"fitColumns\" | \"fitData\"\r\n\tlayoutColumnsOnNewData:false, //update column widths on setData\r\n\r\n\tcolumnMinWidth:40, //minimum global width for a column\r\n\tcolumnMaxWidth:false, //minimum global width for a column\r\n\tcolumnHeaderVertAlign:\"top\", //vertical alignment of column headers\r\n\r\n\tresizableColumns:true, //resizable columns\r\n\tresizableRows:false, //resizable rows\r\n\tautoResize:true, //auto resize table\r\n\r\n\tcolumns:[],//store for colum header info\r\n\tcolumnDefaults:false, //store column default props\r\n\r\n\tcellHozAlign:\"\", //horizontal align columns\r\n\tcellVertAlign:\"\", //vertical align columns\r\n\theaderHozAlign:\"\", //horizontal header alignment\r\n\r\n\tdata:[], //default starting data\r\n\r\n\tautoColumns:false, //build columns from data row structure\r\n\tautoColumnsDefinitions:false,\r\n\r\n\treactiveData:false, //enable data reactivity\r\n\r\n\tnestedFieldSeparator:\".\", //seperatpr for nested data\r\n\r\n\ttooltips: false, //Tool tip value\r\n\ttooltipsHeader: false, //Tool tip for headers\r\n\ttooltipGenerationMode:\"load\", //when to generate tooltips\r\n\r\n\tinitialSort:false, //initial sorting criteria\r\n\tinitialFilter:false, //initial filtering criteria\r\n\tinitialHeaderFilter:false, //initial header filtering criteria\r\n\r\n\tcolumnHeaderSortMulti: true, //multiple or single column sorting\r\n\r\n\tsortOrderReverse:false, //reverse internal sort ordering\r\n\r\n\theaderSort:true, //set default global header sort\r\n\theaderSortTristate:false, //set default tristate header sorting\r\n\theaderSortElement:\"
\", //header sort element\r\n\r\n\tfooterElement:false, //hold footer element\r\n\r\n\tindex:\"id\", //filed for row index\r\n\r\n\ttextDirection:\"auto\",\r\n\r\n\tkeybindings:[], //array for keybindings\r\n\r\n\ttabEndNewRow:false, //create new row when tab to end of table\r\n\r\n\tinvalidOptionWarnings:true, //allow toggling of invalid option warnings\r\n\r\n\tclipboard:false, //enable clipboard\r\n\tclipboardCopyStyled:true, //formatted table data\r\n\tclipboardCopyConfig:false, //clipboard config\r\n\tclipboardCopyFormatter:false, //DEPRICATED - REMOVE in 5.0\r\n\tclipboardCopyRowRange:\"active\", //restrict clipboard to visible rows only\r\n\tclipboardPasteParser:\"table\", //convert pasted clipboard data to rows\r\n\tclipboardPasteAction:\"insert\", //how to insert pasted data into the table\r\n\r\n\tclipboardCopied:function(){}, //data has been copied to the clipboard\r\n\tclipboardPasted:function(){}, //data has been pasted into the table\r\n\tclipboardPasteError:function(){}, //data has not successfully been pasted into the table\r\n\r\n\tdownloadReady:function(data, blob){return blob;}, //function to manipulate download data\r\n\tdownloadComplete:false, //function to manipulate download data\r\n\tdownloadConfig:{},\t//download config\r\n\tdownloadRowRange:\"active\", //restrict download to active rows only\r\n\r\n\tdataTree:false, //enable data tree\r\n\tdataTreeFilter:true, //filter child rows\r\n\tdataTreeSort:true, //sort child rows\r\n\tdataTreeElementColumn:false,\r\n\tdataTreeBranchElement: true, //show data tree branch element\r\n\tdataTreeChildIndent:9, //data tree child indent in px\r\n\tdataTreeChildField:\"_children\", //data tre column field to look for child rows\r\n\tdataTreeCollapseElement:false, //data tree row collapse element\r\n\tdataTreeExpandElement:false, //data tree row expand element\r\n\tdataTreeStartExpanded:false,\r\n\tdataTreeRowExpanded:function(){}, //row has been expanded\r\n\tdataTreeRowCollapsed:function(){}, //row has been collapsed\r\n\tdataTreeChildColumnCalcs:false, //include visible data tree rows in column calculations\r\n\tdataTreeSelectPropagate:false, //seleccting a parent row selects its children\r\n\r\n\tprintAsHtml:false, //enable print as html\r\n\tprintFormatter:false, //printing page formatter\r\n\tprintHeader:false, //page header contents\r\n\tprintFooter:false, //page footer contents\r\n\tprintStyled:true, //enable print as html styling\r\n\tprintRowRange:\"visible\", //restrict print to visible rows only\r\n\tprintConfig:{}, //print config options\r\n\r\n\taddRowPos:\"bottom\", //position to insert blank rows, top|bottom\r\n\r\n\tselectable:\"highlight\", //highlight rows on hover\r\n\tselectableRangeMode: \"drag\", //highlight rows on hover\r\n\tselectableRollingSelection:true, //roll selection once maximum number of selectable rows is reached\r\n\tselectablePersistence:true, // maintain selection when table view is updated\r\n\tselectableCheck:function(data, row){return true;}, //check wheather row is selectable\r\n\r\n\theaderFilterLiveFilterDelay: 300, //delay before updating column after user types in header filter\r\n\theaderFilterPlaceholder: false, //placeholder text to display in header filters\r\n\r\n\theaderVisible:true, //hide header\r\n\r\n\thistory:false, //enable edit history\r\n\r\n\tlocale:false, //current system language\r\n\tlangs:{},\r\n\r\n\tvirtualDom:true, //enable DOM virtualization\r\n virtualDomBuffer:0, // set virtual DOM buffer size\r\n\tvirtualDomHoz:false, //enable horizontal DOM virtualization\r\n\r\n\tpersistence:false,\r\n\tpersistenceID:\"\", //key for persistent storage\r\n\tpersistenceMode:true, //mode for storing persistence information\r\n\tpersistenceReaderFunc:false, //function for handling persistence data reading\r\n\tpersistenceWriterFunc:false, //function for handling persistence data writing\r\n\r\n\r\n\tresponsiveLayout:false, //responsive layout flags\r\n\tresponsiveLayoutCollapseStartOpen:true, //start showing collapsed data\r\n\tresponsiveLayoutCollapseUseFormatters:true, //responsive layout collapse formatter\r\n\tresponsiveLayoutCollapseFormatter:false, //responsive layout collapse formatter\r\n\r\n\tpagination:false, //set pagination type\r\n\tpaginationSize:false, //set number of rows to a page\r\n\tpaginationInitialPage:1, //initail page to show on load\r\n\tpaginationButtonCount: 5, // set count of page button\r\n\tpaginationSizeSelector:false, //add pagination size selector element\r\n\tpaginationElement:false, //element to hold pagination numbers\r\n\tpaginationDataSent:{}, //pagination data sent to the server\r\n\tpaginationDataReceived:{}, //pagination data received from the server\r\n\tpaginationAddRow: \"page\", //add rows on table or page\r\n\r\n\tajaxURL:false, //url for ajax loading\r\n\tajaxURLGenerator:false,\r\n\tajaxParams:{}, //params for ajax loading\r\n\tajaxConfig:\"get\", //ajax request type\r\n\tajaxContentType:\"form\", //ajax request type\r\n\tajaxRequestFunc:false, //promise function\r\n\tajaxLoader:true, //show loader\r\n\tajaxLoaderLoading:false, //loader element\r\n\tajaxLoaderError:false, //loader element\r\n\tajaxFiltering:false,\r\n\tajaxSorting:false,\r\n\tajaxProgressiveLoad:false, //progressive loading\r\n\tajaxProgressiveLoadDelay:0, //delay between requests\r\n\tajaxProgressiveLoadScrollMargin:0, //margin before scroll begins\r\n\r\n\tgroupBy:false, //enable table grouping and set field to group by\r\n\tgroupStartOpen:true, //starting state of group\r\n\tgroupValues:false,\r\n\tgroupUpdateOnCellEdit:false,\r\n\r\n\tgroupHeader:false, //header generation function\r\n\tgroupHeaderPrint:null,\r\n\tgroupHeaderClipboard:null,\r\n\tgroupHeaderHtmlOutput:null,\r\n\tgroupHeaderDownload:null,\r\n\r\n\thtmlOutputConfig:false, //html outypu config\r\n\r\n\tmovableColumns:false, //enable movable columns\r\n\r\n\tmovableRows:false, //enable movable rows\r\n\tmovableRowsConnectedTables:false, //tables for movable rows to be connected to\r\n\tmovableRowsConnectedElements:false, //other elements for movable rows to be connected to\r\n\tmovableRowsSender:false,\r\n\tmovableRowsReceiver:\"insert\",\r\n\tmovableRowsSendingStart:function(){},\r\n\tmovableRowsSent:function(){},\r\n\tmovableRowsSentFailed:function(){},\r\n\tmovableRowsSendingStop:function(){},\r\n\tmovableRowsReceivingStart:function(){},\r\n\tmovableRowsReceived:function(){},\r\n\tmovableRowsReceivedFailed:function(){},\r\n\tmovableRowsReceivingStop:function(){},\r\n\tmovableRowsElementDrop:function(){},\r\n\r\n\tscrollToRowPosition:\"top\",\r\n\tscrollToRowIfVisible:true,\r\n\r\n\tscrollToColumnPosition:\"left\",\r\n\tscrollToColumnIfVisible:true,\r\n\r\n\trowFormatter:false,\r\n\trowFormatterPrint:null,\r\n\trowFormatterClipboard:null,\r\n\trowFormatterHtmlOutput:null,\r\n\r\n\tplaceholder:false,\r\n\r\n\t//table building callbacks\r\n\ttableBuilding:function(){},\r\n\ttableBuilt:function(){},\r\n\r\n\t//render callbacks\r\n\trenderStarted:function(){},\r\n\trenderComplete:function(){},\r\n\r\n\t//row callbacks\r\n\trowClick:false,\r\n\trowDblClick:false,\r\n\trowContext:false,\r\n\trowTap:false,\r\n\trowDblTap:false,\r\n\trowTapHold:false,\r\n\trowMouseEnter:false,\r\n\trowMouseLeave:false,\r\n\trowMouseOver:false,\r\n\trowMouseOut:false,\r\n\trowMouseMove:false,\r\n\trowContextMenu:false,\r\n\trowClickMenu:false,\r\n\trowAdded:function(){},\r\n\trowDeleted:function(){},\r\n\trowMoved:function(){},\r\n\trowUpdated:function(){},\r\n\trowSelectionChanged:function(){},\r\n\trowSelected:function(){},\r\n\trowDeselected:function(){},\r\n\trowResized:function(){},\r\n\r\n\t//cell callbacks\r\n\t//row callbacks\r\n\tcellClick:false,\r\n\tcellDblClick:false,\r\n\tcellContext:false,\r\n\tcellTap:false,\r\n\tcellDblTap:false,\r\n\tcellTapHold:false,\r\n\tcellMouseEnter:false,\r\n\tcellMouseLeave:false,\r\n\tcellMouseOver:false,\r\n\tcellMouseOut:false,\r\n\tcellMouseMove:false,\r\n\tcellEditing:function(){},\r\n\tcellEdited:function(){},\r\n\tcellEditCancelled:function(){},\r\n\r\n\t//column callbacks\r\n\tcolumnMoved:false,\r\n\tcolumnResized:function(){},\r\n\tcolumnTitleChanged:function(){},\r\n\tcolumnVisibilityChanged:function(){},\r\n\r\n\t//HTML iport callbacks\r\n\thtmlImporting:function(){},\r\n\thtmlImported:function(){},\r\n\r\n\t//data callbacks\r\n\tdataLoading:function(){},\r\n\tdataLoaded:function(){},\r\n\tdataChanged:false,\r\n\r\n\t//ajax callbacks\r\n\tajaxRequesting:function(){},\r\n\tajaxResponse:false,\r\n\tajaxError:function(){},\r\n\r\n\t//filtering callbacks\r\n\tdataFiltering:false,\r\n\tdataFiltered:false,\r\n\r\n\t//sorting callbacks\r\n\tdataSorting:function(){},\r\n\tdataSorted:function(){},\r\n\r\n\t//grouping callbacks\r\n\tgroupToggleElement:\"arrow\",\r\n\tgroupClosedShowCalcs:false,\r\n\tdataGrouping:function(){},\r\n\tdataGrouped:false,\r\n\tgroupVisibilityChanged:function(){},\r\n\tgroupClick:false,\r\n\tgroupDblClick:false,\r\n\tgroupContext:false,\r\n\tgroupContextMenu:false,\r\n\tgroupClickMenu:false,\r\n\tgroupTap:false,\r\n\tgroupDblTap:false,\r\n\tgroupTapHold:false,\r\n\r\n\tcolumnCalcs:true,\r\n\r\n\t//pagination callbacks\r\n\tpageLoaded:function(){},\r\n\r\n\t//localization callbacks\r\n\tlocalized:function(){},\r\n\r\n\t//validation callbacks\r\n\tvalidationMode:\"blocking\",\r\n\tvalidationFailed:function(){},\r\n\r\n\t//history callbacks\r\n\thistoryUndo:function(){},\r\n\thistoryRedo:function(){},\r\n\r\n\t//scroll callbacks\r\n\tscrollHorizontal:function(){},\r\n\tscrollVertical:function(){},\r\n};","import Module from '../../core/Module.js';\r\nimport Helpers from '../../core/Helpers.js';\r\n\r\nimport defautlAccessors from './defaults/accessors.js';\r\n\r\nclass Accessor extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.allowedTypes = [\"\", \"data\", \"download\", \"clipboard\", \"print\", \"htmlOutput\"] //list of accessor types\r\n\t}\r\n\r\n\t//initialize column accessor\r\n\tinitializeColumn(column){\r\n\t\tvar match = false,\r\n\t\tconfig = {};\r\n\r\n\t\tthis.allowedTypes.forEach(function(type){\r\n\t\t\tvar key = \"accessor\" + (type.charAt(0).toUpperCase() + type.slice(1)),\r\n\t\t\taccessor;\r\n\r\n\t\t\tif(column.definition[key]){\r\n\t\t\t\taccessor = this.lookupAccessor(column.definition[key]);\r\n\r\n\t\t\t\tif(accessor){\r\n\t\t\t\t\tmatch = true;\r\n\r\n\t\t\t\t\tconfig[key] = {\r\n\t\t\t\t\t\taccessor:accessor,\r\n\t\t\t\t\t\tparams: column.definition[key + \"Params\"] || {},\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tif(match){\r\n\t\t\tcolumn.modules.accessor = config;\r\n\t\t}\r\n\t}\r\n\r\n\tlookupAccessor(value){\r\n\t\tvar accessor = false;\r\n\r\n\t\t//set column accessor\r\n\t\tswitch(typeof value){\r\n\t\t\tcase \"string\":\r\n\t\t\tif(Accessor.accessors[value]){\r\n\t\t\t\taccessor = Accessor.accessors[value]\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Accessor Error - No such accessor found, ignoring: \", value);\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"function\":\r\n\t\t\taccessor = value;\r\n\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\treturn accessor;\r\n\t}\r\n\r\n\t//apply accessor to row\r\n\ttransformRow(row, type){\r\n\t\tvar key = \"accessor\" + (type.charAt(0).toUpperCase() + type.slice(1)),\r\n\t\trowComponent = row.getComponent();\r\n\r\n\t\t//clone data object with deep copy to isolate internal data from returned result\r\n\t\tvar data = Helpers.deepClone(row.data || {});\r\n\r\n\t\tthis.table.columnManager.traverse(function(column){\r\n\t\t\tvar value, accessor, params, colCompnent;\r\n\r\n\t\t\tif(column.modules.accessor){\r\n\r\n\t\t\t\taccessor = column.modules.accessor[key] || column.modules.accessor.accessor || false;\r\n\r\n\t\t\t\tif(accessor){\r\n\t\t\t\t\tvalue = column.getFieldValue(data);\r\n\r\n\t\t\t\t\tif(value != \"undefined\"){\r\n\t\t\t\t\t\tcolCompnent = column.getComponent();\r\n\t\t\t\t\t\tparams = typeof accessor.params === \"function\" ? accessor.params(value, data, type, colCompnent, rowComponent) : accessor.params;\r\n\t\t\t\t\t\tcolumn.setFieldValue(data, accessor.accessor(value, data, type, params, colCompnent, rowComponent));\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn data;\r\n\t}\r\n}\r\n\r\n//load defaults\r\nAccessor.moduleName = \"accessor\";\r\nAccessor.accessors = defautlAccessors;\r\n\r\nexport default Accessor;","export default {}","export default {\r\n\t\"json\":{\r\n\t\theaders:{\r\n\t\t\t'Content-Type': 'application/json',\r\n\t\t},\r\n\t\tbody:function(url, config, params){\r\n\t\t\treturn JSON.stringify(params);\r\n\t\t},\r\n\t},\r\n\t\"form\":{\r\n\t\theaders:{\r\n\t\t},\r\n\t\tbody:function(url, config, params){\r\n\t\t\tvar output = this.generateParamsList(params),\r\n\t\t\tform = new FormData();\r\n\r\n\t\t\toutput.forEach(function(item){\r\n\t\t\t\tform.append(item.key, item.value);\r\n\t\t\t});\r\n\r\n\t\t\treturn form;\r\n\t\t},\r\n\t},\r\n};","import Module from '../../core/Module.js';\r\n\r\nimport defaultConfig from './defaults/config.js';\r\nimport defaultURLGenerator from './defaults/urlGenerator.js';\r\nimport defaultLoaderPromise from './defaults/loaderPromise.js';\r\nimport defaultContentTypeFormatters from './defaults/contentTypeFormatters.js';\r\n\r\nclass Ajax extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.config = false; //hold config object for ajax request\r\n\t\tthis.url = \"\"; //request URL\r\n\t\tthis.urlGenerator = false;\r\n\t\tthis.params = false; //request parameters\r\n\r\n\t\tthis.loaderElement = this.createLoaderElement(); //loader message div\r\n\t\tthis.msgElement = this.createMsgElement(); //message element\r\n\t\tthis.loadingElement = false;\r\n\t\tthis.errorElement = false;\r\n\t\tthis.loaderPromise = false;\r\n\r\n\t\tthis.progressiveLoad = false;\r\n\t\tthis.loading = false;\r\n\r\n\t\tthis.requestOrder = 0; //prevent requests comming out of sequence if overridden by another load request\r\n\t}\r\n\r\n\t//initialize setup options\r\n\tinitialize(){\r\n\t\tvar template;\r\n\r\n\t\tthis.loaderElement.appendChild(this.msgElement);\r\n\r\n\t\tif(this.table.options.ajaxLoaderLoading){\r\n\t\t\tif(typeof this.table.options.ajaxLoaderLoading == \"string\"){\r\n\t\t\t\ttemplate = document.createElement('template');\r\n\t\t\t\ttemplate.innerHTML = this.table.options.ajaxLoaderLoading.trim();\r\n\t\t\t\tthis.loadingElement = template.content.firstChild;\r\n\t\t\t}else{\r\n\t\t\t\tthis.loadingElement = this.table.options.ajaxLoaderLoading;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.loaderPromise = this.table.options.ajaxRequestFunc || Ajax.defaultLoaderPromise;\r\n\r\n\t\tthis.urlGenerator = this.table.options.ajaxURLGenerator || Ajax.defaultURLGenerator;\r\n\r\n\t\tif(this.table.options.ajaxLoaderError){\r\n\t\t\tif(typeof this.table.options.ajaxLoaderError == \"string\"){\r\n\t\t\t\ttemplate = document.createElement('template');\r\n\t\t\t\ttemplate.innerHTML = this.table.options.ajaxLoaderError.trim();\r\n\t\t\t\tthis.errorElement = template.content.firstChild;\r\n\t\t\t}else{\r\n\t\t\t\tthis.errorElement = this.table.options.ajaxLoaderError;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(this.table.options.ajaxParams){\r\n\t\t\tthis.setParams(this.table.options.ajaxParams);\r\n\t\t}\r\n\r\n\t\tif(this.table.options.ajaxConfig){\r\n\t\t\tthis.setConfig(this.table.options.ajaxConfig);\r\n\t\t}\r\n\r\n\t\tif(this.table.options.ajaxURL){\r\n\t\t\tthis.setUrl(this.table.options.ajaxURL);\r\n\t\t}\r\n\r\n\t\tif(this.table.options.ajaxProgressiveLoad){\r\n\t\t\tif(this.table.options.pagination){\r\n\t\t\t\tthis.progressiveLoad = false;\r\n\t\t\t\tconsole.error(\"Progressive Load Error - Pagination and progressive load cannot be used at the same time\");\r\n\t\t\t}else{\r\n\t\t\t\tif(this.table.modExists(\"page\")){\r\n\t\t\t\t\tthis.progressiveLoad = this.table.options.ajaxProgressiveLoad;\r\n\t\t\t\t\tthis.table.modules.page.initializeProgressive(this.progressiveLoad);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.error(\"Pagination plugin is required for progressive ajax loading\");\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tcreateLoaderElement(){\r\n\t\tvar el = document.createElement(\"div\");\r\n\t\tel.classList.add(\"tabulator-loader\");\r\n\t\treturn el;\r\n\t}\r\n\r\n\tcreateMsgElement(){\r\n\t\tvar el = document.createElement(\"div\");\r\n\r\n\t\tel.classList.add(\"tabulator-loader-msg\");\r\n\t\tel.setAttribute(\"role\", \"alert\");\r\n\r\n\t\treturn el;\r\n\t}\r\n\r\n\t//set ajax params\r\n\tsetParams(params, update){\r\n\t\tif(update){\r\n\t\t\tthis.params = this.params || {};\r\n\r\n\t\t\tfor(let key in params){\r\n\t\t\t\tthis.params[key] = params[key];\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tthis.params = params;\r\n\t\t}\r\n\t}\r\n\r\n\tgetParams(){\r\n\t\treturn this.params || {};\r\n\t}\r\n\r\n\t//load config object\r\n\tsetConfig(config){\r\n\t\tthis._loadDefaultConfig();\r\n\r\n\t\tif(typeof config == \"string\"){\r\n\t\t\tthis.config.method = config;\r\n\t\t}else{\r\n\t\t\tfor(let key in config){\r\n\t\t\t\tthis.config[key] = config[key];\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//create config object from default\r\n\t_loadDefaultConfig(force){\r\n\t\tif(!this.config || force){\r\n\r\n\t\t\tthis.config = {};\r\n\r\n\t\t\t//load base config from defaults\r\n\t\t\tfor(let key in Ajax.defaultConfig){\r\n\t\t\t\tthis.config[key] = Ajax.defaultConfig[key];\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//set request url\r\n\tsetUrl(url){\r\n\t\tthis.url = url;\r\n\t}\r\n\r\n\t//get request url\r\n\tgetUrl(){\r\n\t\treturn this.url;\r\n\t}\r\n\r\n\t//lstandard loading function\r\n\tloadData(inPosition, columnsChanged){\r\n\t\tif(this.progressiveLoad){\r\n\t\t\treturn this._loadDataProgressive();\r\n\t\t}else{\r\n\t\t\treturn this._loadDataStandard(inPosition, columnsChanged);\r\n\t\t}\r\n\t}\r\n\r\n\tnextPage(diff){\r\n\t\tvar margin;\r\n\r\n\t\tif(!this.loading){\r\n\r\n\t\t\tmargin = this.table.options.ajaxProgressiveLoadScrollMargin || (this.table.rowManager.getElement().clientHeight * 2);\r\n\r\n\t\t\tif(diff < margin){\r\n\t\t\t\tthis.table.modules.page.nextPage()\r\n\t\t\t\t.then(()=>{}).catch(()=>{});\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tblockActiveRequest(){\r\n\t\tthis.requestOrder ++;\r\n\t}\r\n\r\n\t_loadDataProgressive(){\r\n\t\tthis.table.rowManager.setData([]);\r\n\t\treturn this.table.modules.page.setPage(1);\r\n\t}\r\n\r\n\t_loadDataStandard(inPosition, columnsChanged){\r\n\t\treturn new Promise((resolve, reject)=>{\r\n\t\t\tthis.sendRequest(inPosition)\r\n\t\t\t.then((data)=>{\r\n\t\t\t\tthis.table.rowManager.setData(data, inPosition, columnsChanged)\r\n\t\t\t\t.then(()=>{\r\n\t\t\t\t\tresolve();\r\n\t\t\t\t})\r\n\t\t\t\t.catch((e)=>{\r\n\t\t\t\t\treject(e)\r\n\t\t\t\t});\r\n\t\t\t})\r\n\t\t\t.catch((e)=>{\r\n\t\t\t\treject(e)\r\n\t\t\t});\r\n\t\t});\r\n\t}\r\n\r\n\tgenerateParamsList(data, prefix){\r\n\t\tvar output = [];\r\n\r\n\t\tprefix = prefix || \"\";\r\n\r\n\t\tif(Array.isArray(data)){\r\n\t\t\tdata.forEach((item, i) => {\r\n\t\t\t\toutput = output.concat(this.generateParamsList(item, prefix ? prefix + \"[\" + i + \"]\" : i));\r\n\t\t\t});\r\n\t\t}else if (typeof data === \"object\"){\r\n\t\t\tfor (var key in data){\r\n\t\t\t\toutput = output.concat(this.generateParamsList(data[key], prefix ? prefix + \"[\" + key + \"]\" : key));\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\toutput.push({key:prefix, value:data});\r\n\t\t}\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tserializeParams(params){\r\n\t\tvar output = this.generateParamsList(params),\r\n\t\tencoded = [];\r\n\r\n\t\toutput.forEach(function(item){\r\n\t\t\tencoded.push(encodeURIComponent(item.key) + \"=\" + encodeURIComponent(item.value));\r\n\t\t});\r\n\r\n\t\treturn encoded.join(\"&\");\r\n\t}\r\n\r\n\t//send ajax request\r\n\tsendRequest(silent){\r\n\t\tvar url = this.url,\r\n\t\trequestNo, esc, query;\r\n\r\n\t\tthis.requestOrder ++;\r\n\t\trequestNo = this.requestOrder;\r\n\r\n\t\tthis._loadDefaultConfig();\r\n\r\n\t\treturn new Promise((resolve, reject)=>{\r\n\t\t\tif(this.table.options.ajaxRequesting.call(this.table, this.url, this.params) !== false){\r\n\r\n\t\t\t\tthis.loading = true;\r\n\r\n\t\t\t\tif(!silent){\r\n\t\t\t\t\tthis.showLoader();\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.loaderPromise(url, this.config, this.params).then((data)=>{\r\n\t\t\t\t\tif(requestNo === this.requestOrder){\r\n\t\t\t\t\t\tif(this.table.options.ajaxResponse){\r\n\t\t\t\t\t\t\tdata = this.table.options.ajaxResponse.call(this.table, this.url, this.params, data);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tresolve(data);\r\n\r\n\t\t\t\t\t\tthis.hideLoader();\r\n\t\t\t\t\t\tthis.loading = false;\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tconsole.warn(\"Ajax Response Blocked - An active ajax request was blocked by an attempt to change table data while the request was being made\");\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t})\r\n\t\t\t\t.catch((error)=>{\r\n\t\t\t\t\tconsole.error(\"Ajax Load Error: \", error);\r\n\t\t\t\t\tthis.table.options.ajaxError.call(this.table, error);\r\n\r\n\t\t\t\t\tthis.showError();\r\n\r\n\t\t\t\t\tsetTimeout(() => {\r\n\t\t\t\t\t\tthis.hideLoader();\r\n\t\t\t\t\t}, 3000);\r\n\r\n\t\t\t\t\tthis.loading = false;\r\n\r\n\t\t\t\t\treject(error);\r\n\t\t\t\t});\r\n\t\t\t}else{\r\n\t\t\t\treject();\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tshowLoader(){\r\n\t\tvar shouldLoad = typeof this.table.options.ajaxLoader === \"function\" ? this.table.options.ajaxLoader() : this.table.options.ajaxLoader;\r\n\r\n\t\tif(shouldLoad){\r\n\r\n\t\t\tthis.hideLoader();\r\n\r\n\t\t\twhile(this.msgElement.firstChild) this.msgElement.removeChild(this.msgElement.firstChild);\r\n\t\t\tthis.msgElement.classList.remove(\"tabulator-error\");\r\n\t\t\tthis.msgElement.classList.add(\"tabulator-loading\");\r\n\r\n\t\t\tif(this.loadingElement){\r\n\t\t\t\tthis.msgElement.appendChild(this.loadingElement);\r\n\t\t\t}else{\r\n\t\t\t\tthis.msgElement.innerHTML = this.table.modules.localize.getText(\"ajax|loading\");\r\n\t\t\t}\r\n\r\n\t\t\tthis.table.element.appendChild(this.loaderElement);\r\n\t\t}\r\n\t}\r\n\r\n\tshowError(){\r\n\t\tthis.hideLoader();\r\n\r\n\t\twhile(this.msgElement.firstChild) this.msgElement.removeChild(this.msgElement.firstChild);\r\n\t\tthis.msgElement.classList.remove(\"tabulator-loading\");\r\n\t\tthis.msgElement.classList.add(\"tabulator-error\");\r\n\r\n\t\tif(this.errorElement){\r\n\t\t\tthis.msgElement.appendChild(this.errorElement);\r\n\t\t}else{\r\n\t\t\tthis.msgElement.innerHTML = this.table.modules.localize.getText(\"ajax|error\");\r\n\t\t}\r\n\r\n\t\tthis.table.element.appendChild(this.loaderElement);\r\n\t}\r\n\r\n\thideLoader(){\r\n\t\tif(this.loaderElement.parentNode){\r\n\t\t\tthis.loaderElement.parentNode.removeChild(this.loaderElement);\r\n\t\t}\r\n\t}\r\n}\r\n\r\nAjax.moduleName = \"ajax\";\r\n\r\n//load defaults\r\nAjax.defaultConfig = defaultConfig;\r\nAjax.defaultURLGenerator = defaultURLGenerator;\r\nAjax.defaultLoaderPromise = defaultLoaderPromise;\r\nAjax.contentTypeFormatters = defaultContentTypeFormatters;\r\n\r\nexport default Ajax;","export default {\r\n\tmethod: \"GET\",\r\n};","export default function(url, config, params){\r\n\tif(url){\r\n\t\tif(params && Object.keys(params).length){\r\n\t\t\tif(!config.method || config.method.toLowerCase() == \"get\"){\r\n\t\t\t\tconfig.method = \"get\";\r\n\r\n\t\t\t\turl += (url.includes(\"?\") ? \"&\" : \"?\") + this.modules.ajax.serializeParams(params);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\treturn url;\r\n};","export default function(url, config, params){\r\n\tvar contentType;\r\n\r\n\treturn new Promise((resolve, reject) => {\r\n\t\t//set url\r\n\t\turl = this.urlGenerator.call(this.table, url, config, params);\r\n\r\n\t\t//set body content if not GET request\r\n\t\tif(config.method.toUpperCase() != \"GET\"){\r\n\t\t\tcontentType = typeof this.table.options.ajaxContentType === \"object\" ? this.table.options.ajaxContentType : this.contentTypeFormatters[this.table.options.ajaxContentType];\r\n\t\t\tif(contentType){\r\n\r\n\t\t\t\tfor(var key in contentType.headers){\r\n\t\t\t\t\tif(!config.headers){\r\n\t\t\t\t\t\tconfig.headers = {};\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif(typeof config.headers[key] === \"undefined\"){\r\n\t\t\t\t\t\tconfig.headers[key] = contentType.headers[key];\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tconfig.body = contentType.body.call(this, url, config, params);\r\n\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Ajax Error - Invalid ajaxContentType value:\", this.table.options.ajaxContentType);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(url){\r\n\t\t\t//configure headers\r\n\t\t\tif(typeof config.headers === \"undefined\"){\r\n\t\t\t\tconfig.headers = {};\r\n\t\t\t}\r\n\r\n\t\t\tif(typeof config.headers.Accept === \"undefined\"){\r\n\t\t\t\tconfig.headers.Accept = \"application/json\";\r\n\t\t\t}\r\n\r\n\t\t\tif(typeof config.headers[\"X-Requested-With\"] === \"undefined\"){\r\n\t\t\t\tconfig.headers[\"X-Requested-With\"] = \"XMLHttpRequest\";\r\n\t\t\t}\r\n\r\n\t\t\tif(typeof config.mode === \"undefined\"){\r\n\t\t\t\tconfig.mode = \"cors\";\r\n\t\t\t}\r\n\r\n\t\t\tif(config.mode == \"cors\"){\r\n\r\n\t\t\t\tif(typeof config.headers[\"Access-Control-Allow-Origin\"] === \"undefined\"){\r\n\t\t\t\t\tconfig.headers[\"Access-Control-Allow-Origin\"] = window.location.origin;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(typeof config.credentials === \"undefined\"){\r\n\t\t\t\t\tconfig.credentials = 'same-origin';\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tif(typeof config.credentials === \"undefined\"){\r\n\t\t\t\t\tconfig.credentials = 'include';\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t//send request\r\n\t\t\tfetch(url, config)\r\n\t\t\t.then((response)=>{\r\n\t\t\t\tif(response.ok) {\r\n\t\t\t\t\tresponse.json()\r\n\t\t\t\t\t.then((data)=>{\r\n\t\t\t\t\t\tresolve(data);\r\n\t\t\t\t\t}).catch((error)=>{\r\n\t\t\t\t\t\treject(error);\r\n\t\t\t\t\t\tconsole.warn(\"Ajax Load Error - Invalid JSON returned\", error);\r\n\t\t\t\t\t});\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.error(\"Ajax Load Error - Connection Error: \" + response.status, response.statusText);\r\n\t\t\t\t\treject(response);\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t\t.catch((error)=>{\r\n\t\t\t\tconsole.error(\"Ajax Load Error - Connection Error: \", error);\r\n\t\t\t\treject(error);\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Ajax Load Error - No URL Set\");\r\n\t\t\tresolve([]);\r\n\t\t}\r\n\t});\r\n};","import Module from '../../core/Module.js';\r\n\r\nimport defaultPasteActions from './defaults/pasteActions.js';\r\nimport defaultPasteParsers from './defaults/pasteParsers.js';\r\n\r\nclass Clipboard extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.mode = true;\r\n\t\tthis.pasteParser = function(){};\r\n\t\tthis.pasteAction = function(){};\r\n\t\tthis.customSelection = false;\r\n\t\tthis.rowRange = false;\r\n\t\tthis.blocked = true; //block copy actions not originating from this command\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tthis.mode = this.table.options.clipboard;\r\n\r\n\t\tthis.rowRange = this.table.options.clipboardCopyRowRange;\r\n\r\n\t\tif(this.mode === true || this.mode === \"copy\"){\r\n\t\t\tthis.table.element.addEventListener(\"copy\", (e) => {\r\n\t\t\t\tvar plain, html, list;\r\n\r\n\t\t\t\tif(!this.blocked){\r\n\t\t\t\t\te.preventDefault();\r\n\r\n\t\t\t\t\tif(this.customSelection){\r\n\t\t\t\t\t\tplain = this.customSelection;\r\n\r\n\t\t\t\t\t\tif(this.table.options.clipboardCopyFormatter){\r\n\t\t\t\t\t\t\tplain = this.table.options.clipboardCopyFormatter(\"plain\", plain);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}else{\r\n\r\n\t\t\t\t\t\tvar list = this.table.modules.export.generateExportList(this.table.options.clipboardCopyConfig, this.table.options.clipboardCopyStyled, this.rowRange, \"clipboard\");\r\n\r\n\t\t\t\t\t\thtml = this.table.modules.export.genereateHTMLTable(list);\r\n\t\t\t\t\t\tplain = html ? this.generatePlainContent(list) : \"\";\r\n\r\n\t\t\t\t\t\tif(this.table.options.clipboardCopyFormatter){\r\n\t\t\t\t\t\t\tplain = this.table.options.clipboardCopyFormatter(\"plain\", plain);\r\n\t\t\t\t\t\t\thtml = this.table.options.clipboardCopyFormatter(\"html\", html);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (window.clipboardData && window.clipboardData.setData) {\r\n\t\t\t\t\t\twindow.clipboardData.setData('Text', plain);\r\n\t\t\t\t\t} else if (e.clipboardData && e.clipboardData.setData) {\r\n\t\t\t\t\t\te.clipboardData.setData('text/plain', plain);\r\n\t\t\t\t\t\tif(html){\r\n\t\t\t\t\t\t\te.clipboardData.setData('text/html', html);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} else if (e.originalEvent && e.originalEvent.clipboardData.setData) {\r\n\t\t\t\t\t\te.originalEvent.clipboardData.setData('text/plain', plain);\r\n\t\t\t\t\t\tif(html){\r\n\t\t\t\t\t\t\te.originalEvent.clipboardData.setData('text/html', html);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tthis.table.options.clipboardCopied.call(this.table, plain, html);\r\n\r\n\t\t\t\t\tthis.reset();\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif(this.mode === true || this.mode === \"paste\"){\r\n\t\t\tthis.table.element.addEventListener(\"paste\", (e) => {\r\n\t\t\t\tthis.paste(e);\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tthis.setPasteParser(this.table.options.clipboardPasteParser);\r\n\t\tthis.setPasteAction(this.table.options.clipboardPasteAction);\r\n\t}\r\n\r\n\treset(){\r\n\t\tthis.blocked = true;\r\n\t\tthis.customSelection = false;\r\n\t}\r\n\r\n\tgeneratePlainContent (list) {\r\n\t\tvar output = [];\r\n\r\n\t\tlist.forEach((row) => {\r\n\t\t\tvar rowData = [];\r\n\r\n\t\t\trow.columns.forEach((col) => {\r\n\t\t\t\tvar value = \"\";\r\n\r\n\t\t\t\tif(col){\r\n\r\n\t\t\t\t\tif(row.type === \"group\"){\r\n\t\t\t\t\t\tcol.value = col.component.getKey();\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif(col.value === null){\r\n\t\t\t\t\t\tvalue = \"\";\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tswitch(typeof col.value){\r\n\t\t\t\t\t\t\tcase \"object\":\r\n\t\t\t\t\t\t\tvalue = JSON.stringify(col.value);\r\n\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\t\tcase \"undefined\":\r\n\t\t\t\t\t\t\tvalue = \"\";\r\n\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\t\tdefault:\r\n\t\t\t\t\t\t\tvalue = col.value;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\trowData.push(value);\r\n\t\t\t});\r\n\r\n\t\t\toutput.push(rowData.join(\"\\t\"));\r\n\t\t});\r\n\r\n\t\treturn output.join(\"\\n\");\r\n\t}\r\n\r\n\tcopy (range, internal) {\r\n\t\tvar range, sel, textRange;\r\n\t\tthis.blocked = false;\r\n\t\tthis.customSelection = false;\r\n\r\n\t\tif (this.mode === true || this.mode === \"copy\") {\r\n\r\n\t\t\tthis.rowRange = range || this.table.options.clipboardCopyRowRange;\r\n\r\n\t\t\tif (typeof window.getSelection != \"undefined\" && typeof document.createRange != \"undefined\") {\r\n\t\t\t\trange = document.createRange();\r\n\t\t\t\trange.selectNodeContents(this.table.element);\r\n\t\t\t\tsel = window.getSelection();\r\n\r\n\t\t\t\tif (sel.toString() && internal) {\r\n\t\t\t\t\tthis.customSelection = sel.toString();\r\n\t\t\t\t}\r\n\r\n\t\t\t\tsel.removeAllRanges();\r\n\t\t\t\tsel.addRange(range);\r\n\t\t\t} else if (typeof document.selection != \"undefined\" && typeof document.body.createTextRange != \"undefined\") {\r\n\t\t\t\ttextRange = document.body.createTextRange();\r\n\t\t\t\ttextRange.moveToElementText(this.table.element);\r\n\t\t\t\ttextRange.select();\r\n\t\t\t}\r\n\r\n\t\t\tdocument.execCommand('copy');\r\n\r\n\t\t\tif (sel) {\r\n\t\t\t\tsel.removeAllRanges();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//PASTE EVENT HANDLING\r\n\tsetPasteAction(action){\r\n\r\n\t\tswitch(typeof action){\r\n\t\t\tcase \"string\":\r\n\t\t\tthis.pasteAction = Clipboard.pasteActions[action];\r\n\r\n\t\t\tif(!this.pasteAction){\r\n\t\t\t\tconsole.warn(\"Clipboard Error - No such paste action found:\", action);\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"function\":\r\n\t\t\tthis.pasteAction = action;\r\n\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\tsetPasteParser(parser){\r\n\t\tswitch(typeof parser){\r\n\t\t\tcase \"string\":\r\n\t\t\tthis.pasteParser = Clipboard.pasteParsers[parser];\r\n\r\n\t\t\tif(!this.pasteParser){\r\n\t\t\t\tconsole.warn(\"Clipboard Error - No such paste parser found:\", parser);\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"function\":\r\n\t\t\tthis.pasteParser = parser;\r\n\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\tpaste(e){\r\n\t\tvar data, rowData, rows;\r\n\r\n\t\tif(this.checkPaseOrigin(e)){\r\n\r\n\t\t\tdata = this.getPasteData(e);\r\n\r\n\t\t\trowData = this.pasteParser.call(this, data);\r\n\r\n\t\t\tif(rowData){\r\n\t\t\t\te.preventDefault();\r\n\r\n\t\t\t\tif(this.table.modExists(\"mutator\")){\r\n\t\t\t\t\trowData = this.mutateData(rowData);\r\n\t\t\t\t}\r\n\r\n\t\t\t\trows = this.pasteAction.call(this, rowData);\r\n\t\t\t\tthis.table.options.clipboardPasted.call(this.table, data, rowData, rows);\r\n\t\t\t}else{\r\n\t\t\t\tthis.table.options.clipboardPasteError.call(this.table, data);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tmutateData(data){\r\n\t\tvar output = [];\r\n\r\n\t\tif(Array.isArray(data)){\r\n\t\t\tdata.forEach((row) => {\r\n\t\t\t\toutput.push(this.table.modules.mutator.transformRow(row, \"clipboard\"));\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\toutput = data;\r\n\t\t}\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\r\n\tcheckPaseOrigin(e){\r\n\t\tvar valid = true;\r\n\r\n\t\tif(e.target.tagName != \"DIV\" || this.table.modules.edit.currentCell){\r\n\t\t\tvalid = false;\r\n\t\t}\r\n\r\n\t\treturn valid;\r\n\t}\r\n\r\n\tgetPasteData(e){\r\n\t\tvar data;\r\n\r\n\t\tif (window.clipboardData && window.clipboardData.getData) {\r\n\t\t\tdata = window.clipboardData.getData('Text');\r\n\t\t} else if (e.clipboardData && e.clipboardData.getData) {\r\n\t\t\tdata = e.clipboardData.getData('text/plain');\r\n\t\t} else if (e.originalEvent && e.originalEvent.clipboardData.getData) {\r\n\t\t\tdata = e.originalEvent.clipboardData.getData('text/plain');\r\n\t\t}\r\n\r\n\t\treturn data;\r\n\t}\r\n}\r\n\r\nClipboard.moduleName = \"clipboard\";\r\n\r\n//load defaults\r\nClipboard.pasteActions = defaultPasteActions;\r\nClipboard.pasteParsers = defaultPasteParsers;\r\n\r\nexport default Clipboard;","export default {\r\n\treplace:function(rows){\r\n\t\treturn this.table.setData(rows);\r\n\t},\r\n\tupdate:function(rows){\r\n\t\treturn this.table.updateOrAddData(rows);\r\n\t},\r\n\tinsert:function(rows){\r\n\t\treturn this.table.addData(rows);\r\n\t},\r\n};","export default {\r\n\ttable:function(clipboard){\r\n\t\tvar data = [],\r\n\t\tsuccess = false,\r\n\t\theaderFindSuccess = true,\r\n\t\tcolumns = this.table.columnManager.columns,\r\n\t\tcolumnMap = [],\r\n\t\trows = [];\r\n\r\n\t\t//get data from clipboard into array of columns and rows.\r\n\t\tclipboard = clipboard.split(\"\\n\");\r\n\r\n\t\tclipboard.forEach(function(row){\r\n\t\t\tdata.push(row.split(\"\\t\"));\r\n\t\t});\r\n\r\n\t\tif(data.length && !(data.length === 1 && data[0].length < 2)){\r\n\t\t\tsuccess = true;\r\n\r\n\t\t\t//check if headers are present by title\r\n\t\t\tdata[0].forEach(function(value){\r\n\t\t\t\tvar column = columns.find(function(column){\r\n\t\t\t\t\treturn value && column.definition.title && value.trim() && column.definition.title.trim() === value.trim();\r\n\t\t\t\t});\r\n\r\n\t\t\t\tif(column){\r\n\t\t\t\t\tcolumnMap.push(column);\r\n\t\t\t\t}else{\r\n\t\t\t\t\theaderFindSuccess = false;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\t//check if column headers are present by field\r\n\t\t\tif(!headerFindSuccess){\r\n\t\t\t\theaderFindSuccess = true;\r\n\t\t\t\tcolumnMap = [];\r\n\r\n\t\t\t\tdata[0].forEach(function(value){\r\n\t\t\t\t\tvar column = columns.find(function(column){\r\n\t\t\t\t\t\treturn value && column.field && value.trim() && column.field.trim() === value.trim();\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\tif(column){\r\n\t\t\t\t\t\tcolumnMap.push(column);\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\theaderFindSuccess = false;\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\tif(!headerFindSuccess){\r\n\t\t\t\t\tcolumnMap = this.table.columnManager.columnsByIndex;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t//remove header row if found\r\n\t\t\tif(headerFindSuccess){\r\n\t\t\t\tdata.shift();\r\n\t\t\t}\r\n\r\n\t\t\tdata.forEach(function(item){\r\n\t\t\t\tvar row = {};\r\n\r\n\t\t\t\titem.forEach(function(value, i){\r\n\t\t\t\t\tif(columnMap[i]){\r\n\t\t\t\t\t\trow[columnMap[i].field] = value;\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\trows.push(row);\r\n\t\t\t});\r\n\r\n\t\t\treturn rows;\r\n\t\t}else{\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n};","class CalcComponent{\r\n\tconstructor (row){\r\n\t\tthis._row = row;\r\n\t}\r\n\r\n\tgetData(transform){\r\n\t\treturn this._row.getData(transform);\r\n\t}\r\n\r\n\tgetElement(){\r\n\t\treturn this._row.getElement();\r\n\t}\r\n\r\n\tgetTable(){\r\n\t\treturn this._row.table;\r\n\t}\r\n\r\n\tgetCells(){\r\n\t\tvar cells = [];\r\n\r\n\t\tthis._row.getCells().forEach(function(cell){\r\n\t\t\tcells.push(cell.getComponent());\r\n\t\t});\r\n\r\n\t\treturn cells;\r\n\t}\r\n\r\n\tgetCell(column){\r\n\t\tvar cell = this._row.getCell(column);\r\n\t\treturn cell ? cell.getComponent() : false;\r\n\t}\r\n\r\n\t_getSelf(){\r\n\t\treturn this._row;\r\n\t}\r\n}\r\n\r\nexport default CalcComponent;","export default {\r\n\t\"avg\":function(values, data, calcParams){\r\n\t\tvar output = 0,\r\n\t\tprecision = typeof calcParams.precision !== \"undefined\" ? calcParams.precision : 2\r\n\r\n\t\tif(values.length){\r\n\t\t\toutput = values.reduce(function(sum, value){\r\n\t\t\t\treturn Number(sum) + Number(value);\r\n\t\t\t});\r\n\r\n\t\t\toutput = output / values.length;\r\n\r\n\t\t\toutput = precision !== false ? output.toFixed(precision) : output;\r\n\t\t}\r\n\r\n\t\treturn parseFloat(output).toString();\r\n\t},\r\n\t\"max\":function(values, data, calcParams){\r\n\t\tvar output = null,\r\n\t\tprecision = typeof calcParams.precision !== \"undefined\" ? calcParams.precision : false;\r\n\r\n\t\tvalues.forEach(function(value){\r\n\r\n\t\t\tvalue = Number(value);\r\n\r\n\t\t\tif(value > output || output === null){\r\n\t\t\t\toutput = value;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn output !== null ? (precision !== false ? output.toFixed(precision) : output) : \"\";\r\n\t},\r\n\t\"min\":function(values, data, calcParams){\r\n\t\tvar output = null,\r\n\t\tprecision = typeof calcParams.precision !== \"undefined\" ? calcParams.precision : false;\r\n\r\n\t\tvalues.forEach(function(value){\r\n\r\n\t\t\tvalue = Number(value);\r\n\r\n\t\t\tif(value < output || output === null){\r\n\t\t\t\toutput = value;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn output !== null ? (precision !== false ? output.toFixed(precision) : output) : \"\";\r\n\t},\r\n\t\"sum\":function(values, data, calcParams){\r\n\t\tvar output = 0,\r\n\t\tprecision = typeof calcParams.precision !== \"undefined\" ? calcParams.precision : false;\r\n\r\n\t\tif(values.length){\r\n\t\t\tvalues.forEach(function(value){\r\n\t\t\t\tvalue = Number(value);\r\n\r\n\t\t\t\toutput += !isNaN(value) ? Number(value) : 0;\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn precision !== false ? output.toFixed(precision) : output;\r\n\t},\r\n\t\"concat\":function(values, data, calcParams){\r\n\t\tvar output = 0;\r\n\r\n\t\tif(values.length){\r\n\t\t\toutput = values.reduce(function(sum, value){\r\n\t\t\t\treturn String(sum) + String(value);\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn output;\r\n\t},\r\n\t\"count\":function(values, data, calcParams){\r\n\t\tvar output = 0;\r\n\r\n\t\tif(values.length){\r\n\t\t\tvalues.forEach(function(value){\r\n\t\t\t\tif(value){\r\n\t\t\t\t\toutput ++;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn output;\r\n\t},\r\n};","import Module from '../../core/Module.js';\r\n\r\nimport CalcComponent from './CalcComponent.js';\r\n\r\nimport Cell from '../../core/cell/Cell.js';\r\nimport Column from '../../core/column/Column.js';\r\nimport Row from '../../core/row/Row.js';\r\n\r\nimport defaultCalculations from './defaults/calculations.js';\r\n\r\nclass ColumnCalcs extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.topCalcs = [];\r\n\t\tthis.botCalcs = [];\r\n\t\tthis.genColumn = false;\r\n\t\tthis.topElement = this.createElement();\r\n\t\tthis.botElement = this.createElement();\r\n\t\tthis.topRow = false;\r\n\t\tthis.botRow = false;\r\n\t\tthis.topInitialized = false;\r\n\t\tthis.botInitialized = false;\r\n\r\n\t\tthis.initialize();\r\n\t}\r\n\r\n\tcreateElement (){\r\n\t\tvar el = document.createElement(\"div\");\r\n\t\tel.classList.add(\"tabulator-calcs-holder\");\r\n\t\treturn el;\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tthis.genColumn = new Column({field:\"value\"}, this);\r\n\t}\r\n\r\n\t//dummy functions to handle being mock column manager\r\n\tregisterColumnField(){};\r\n\r\n\t//initialize column calcs\r\n\tinitializeColumn(column){\r\n\t\tvar def = column.definition\r\n\r\n\t\tvar config = {\r\n\t\t\ttopCalcParams:def.topCalcParams || {},\r\n\t\t\tbotCalcParams:def.bottomCalcParams || {},\r\n\t\t};\r\n\r\n\t\tif(def.topCalc){\r\n\r\n\t\t\tswitch(typeof def.topCalc){\r\n\t\t\t\tcase \"string\":\r\n\t\t\t\tif(ColumnCalcs.calculations[def.topCalc]){\r\n\t\t\t\t\tconfig.topCalc = ColumnCalcs.calculations[def.topCalc]\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.warn(\"Column Calc Error - No such calculation found, ignoring: \", def.topCalc);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"function\":\r\n\t\t\t\tconfig.topCalc = def.topCalc;\r\n\t\t\t\tbreak\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif(config.topCalc){\r\n\t\t\t\tcolumn.modules.columnCalcs = config;\r\n\t\t\t\tthis.topCalcs.push(column);\r\n\r\n\t\t\t\tif(this.table.options.columnCalcs != \"group\"){\r\n\t\t\t\t\tthis.initializeTopRow();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tif(def.bottomCalc){\r\n\t\t\tswitch(typeof def.bottomCalc){\r\n\t\t\t\tcase \"string\":\r\n\t\t\t\tif(ColumnCalcs.calculations[def.bottomCalc]){\r\n\t\t\t\t\tconfig.botCalc = ColumnCalcs.calculations[def.bottomCalc]\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.warn(\"Column Calc Error - No such calculation found, ignoring: \", def.bottomCalc);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"function\":\r\n\t\t\t\tconfig.botCalc = def.bottomCalc;\r\n\t\t\t\tbreak\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif(config.botCalc){\r\n\t\t\t\tcolumn.modules.columnCalcs = config;\r\n\t\t\t\tthis.botCalcs.push(column);\r\n\r\n\t\t\t\tif(this.table.options.columnCalcs != \"group\"){\r\n\t\t\t\t\tthis.initializeBottomRow();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tremoveCalcs(){\r\n\t\tvar changed = false;\r\n\r\n\t\tif(this.topInitialized){\r\n\t\t\tthis.topInitialized = false;\r\n\t\t\tthis.topElement.parentNode.removeChild(this.topElement);\r\n\t\t\tchanged = true;\r\n\t\t}\r\n\r\n\t\tif(this.botInitialized){\r\n\t\t\tthis.botInitialized = false;\r\n\t\t\tthis.table.footerManager.remove(this.botElement);\r\n\t\t\tchanged = true;\r\n\t\t}\r\n\r\n\t\tif(changed){\r\n\t\t\tthis.table.rowManager.adjustTableSize();\r\n\t\t}\r\n\t}\r\n\r\n\tinitializeTopRow(){\r\n\t\tif(!this.topInitialized){\r\n\t\t\tthis.table.columnManager.getElement().insertBefore(this.topElement, this.table.columnManager.headersElement.nextSibling);\r\n\t\t\tthis.topInitialized = true;\r\n\t\t}\r\n\t}\r\n\r\n\tinitializeBottomRow(){\r\n\t\tif(!this.botInitialized){\r\n\t\t\tthis.table.footerManager.prepend(this.botElement);\r\n\t\t\tthis.botInitialized = true;\r\n\t\t}\r\n\t}\r\n\r\n\tscrollHorizontal(left){\r\n\t\tif(this.botInitialized && this.botRow){\r\n\t\t\tthis.botRow.getElement().style.marginLeft = (-left) + \"px\";\r\n\t\t}\r\n\t}\r\n\r\n\trecalc(rows){\r\n\t\tvar data, row;\r\n\r\n\t\tif(this.topInitialized || this.botInitialized){\r\n\t\t\tdata = this.rowsToData(rows);\r\n\r\n\t\t\tif(this.topInitialized){\r\n\t\t\t\tif(this.topRow){\r\n\t\t\t\t\tthis.topRow.deleteCells();\r\n\t\t\t\t}\r\n\r\n\t\t\t\trow = this.generateRow(\"top\", this.rowsToData(rows))\r\n\t\t\t\tthis.topRow = row;\r\n\t\t\t\twhile(this.topElement.firstChild) this.topElement.removeChild(this.topElement.firstChild);\r\n\t\t\t\tthis.topElement.appendChild(row.getElement());\r\n\t\t\t\trow.initialize(true);\r\n\t\t\t}\r\n\r\n\t\t\tif(this.botInitialized){\r\n\t\t\t\tif(this.botRow){\r\n\t\t\t\t\tthis.botRow.deleteCells();\r\n\t\t\t\t}\r\n\r\n\t\t\t\trow = this.generateRow(\"bottom\", this.rowsToData(rows))\r\n\t\t\t\tthis.botRow = row;\r\n\t\t\t\twhile(this.botElement.firstChild) this.botElement.removeChild(this.botElement.firstChild);\r\n\t\t\t\tthis.botElement.appendChild(row.getElement());\r\n\t\t\t\trow.initialize(true);\r\n\t\t\t}\r\n\r\n\t\t\tthis.table.rowManager.adjustTableSize();\r\n\r\n\t\t\t//set resizable handles\r\n\t\t\tif(this.table.modExists(\"frozenColumns\")){\r\n\t\t\t\tthis.table.modules.frozenColumns.layout();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\trecalcRowGroup(row){\r\n\t\tthis.recalcGroup(this.table.modules.groupRows.getRowGroup(row));\r\n\t}\r\n\r\n\trecalcAll(){\r\n\t\tif(this.topCalcs.length || this.botCalcs.length){\r\n\t\t\tif(this.table.options.columnCalcs !== \"group\"){\r\n\t\t\t\tthis.recalc(this.table.rowManager.activeRows);\r\n\t\t\t}\r\n\r\n\t\t\tif(this.table.options.groupBy && this.table.options.columnCalcs !== \"table\"){\r\n\r\n\r\n\t\t\t\tvar groups = table.modules.groupRows.getChildGroups();\r\n\r\n\t\t\t\tgroups.forEach((group) => {\r\n\t\t\t\t\tthis.recalcGroup(group);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\trecalcGroup(group){\r\n\t\tvar data, rowData;\r\n\r\n\t\tif(group){\r\n\t\t\tif(group.calcs){\r\n\t\t\t\tif(group.calcs.bottom){\r\n\t\t\t\t\tdata = this.rowsToData(group.rows);\r\n\t\t\t\t\trowData = this.generateRowData(\"bottom\", data);\r\n\r\n\t\t\t\t\tgroup.calcs.bottom.updateData(rowData);\r\n\t\t\t\t\tgroup.calcs.bottom.reinitialize();\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(group.calcs.top){\r\n\t\t\t\t\tdata = this.rowsToData(group.rows);\r\n\t\t\t\t\trowData = this.generateRowData(\"top\", data);\r\n\r\n\t\t\t\t\tgroup.calcs.top.updateData(rowData);\r\n\t\t\t\t\tgroup.calcs.top.reinitialize();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//generate top stats row\r\n\tgenerateTopRow(rows){\r\n\t\treturn this.generateRow(\"top\", this.rowsToData(rows));\r\n\t}\r\n\t//generate bottom stats row\r\n\tgenerateBottomRow(rows){\r\n\t\treturn this.generateRow(\"bottom\", this.rowsToData(rows));\r\n\t}\r\n\r\n\trowsToData(rows){\r\n\t\tvar data = [];\r\n\r\n\t\trows.forEach((row) => {\r\n\t\t\tdata.push(row.getData());\r\n\r\n\t\t\tif(this.table.options.dataTree && this.table.options.dataTreeChildColumnCalcs){\r\n\t\t\t\tif(row.modules.dataTree.open){\r\n\t\t\t\t\tvar children = this.rowsToData(this.table.modules.dataTree.getFilteredTreeChildren(row));\r\n\t\t\t\t\tdata = data.concat(children);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn data;\r\n\t}\r\n\r\n\t//generate stats row\r\n\tgenerateRow(pos, data){\r\n\t\tvar rowData = this.generateRowData(pos, data),\r\n\t\trow;\r\n\r\n\t\tif(this.table.modExists(\"mutator\")){\r\n\t\t\tthis.table.modules.mutator.disable();\r\n\t\t}\r\n\r\n\t\trow = new Row(rowData, this, \"calc\");\r\n\r\n\t\tif(this.table.modExists(\"mutator\")){\r\n\t\t\tthis.table.modules.mutator.enable();\r\n\t\t}\r\n\r\n\t\trow.getElement().classList.add(\"tabulator-calcs\", \"tabulator-calcs-\" + pos);\r\n\r\n\t\trow.component = false;\r\n\r\n\t\trow.getComponent = () => {\r\n\t\t\tif(!this.component){\r\n\t\t\t\tthis.component = new CalcComponent(this);\r\n\t\t\t}\r\n\r\n\t\t\treturn this.component;\r\n\t\t};\r\n\r\n\t\trow.generateCells = () => {\r\n\r\n\t\t\tvar cells = [];\r\n\r\n\t\t\tthis.table.columnManager.columnsByIndex.forEach((column) => {\r\n\r\n\t\t\t\t\t//set field name of mock column\r\n\t\t\t\t\tthis.genColumn.setField(column.getField());\r\n\t\t\t\t\tthis.genColumn.hozAlign = column.hozAlign;\r\n\r\n\t\t\t\t\tif(column.definition[pos + \"CalcFormatter\"] && this.table.modExists(\"format\")){\r\n\t\t\t\t\t\tthis.genColumn.modules.format = {\r\n\t\t\t\t\t\t\tformatter: this.table.modules.format.getFormatter(column.definition[pos + \"CalcFormatter\"]),\r\n\t\t\t\t\t\t\tparams: column.definition[pos + \"CalcFormatterParams\"] || {},\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tthis.genColumn.modules.format = {\r\n\t\t\t\t\t\t\tformatter: this.table.modules.format.getFormatter(\"plaintext\"),\r\n\t\t\t\t\t\t\tparams:{}\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t//ensure css class defintion is replicated to calculation cell\r\n\t\t\t\t\tthis.genColumn.definition.cssClass = column.definition.cssClass;\r\n\r\n\t\t\t\t\t//generate cell and assign to correct column\r\n\t\t\t\t\tvar cell = new Cell(this.genColumn, row);\r\n\t\t\t\t\tcell.getElement();\r\n\t\t\t\t\tcell.column = column;\r\n\t\t\t\t\tcell.setWidth();\r\n\r\n\t\t\t\t\tcolumn.cells.push(cell);\r\n\t\t\t\t\tcells.push(cell);\r\n\r\n\t\t\t\t\tif(!column.visible){\r\n\t\t\t\t\t\tcell.hide();\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\tthis.cells = cells;\r\n\t\t};\r\n\r\n\t\treturn row;\r\n\t}\r\n\r\n\t//generate stats row\r\n\tgenerateRowData(pos, data){\r\n\t\tvar rowData = {},\r\n\t\tcalcs = pos == \"top\" ? this.topCalcs : this.botCalcs,\r\n\t\ttype = pos == \"top\" ? \"topCalc\" : \"botCalc\",\r\n\t\tparams, paramKey;\r\n\r\n\t\tcalcs.forEach(function(column){\r\n\t\t\tvar values = [];\r\n\r\n\t\t\tif(column.modules.columnCalcs && column.modules.columnCalcs[type]){\r\n\t\t\t\tdata.forEach(function(item){\r\n\t\t\t\t\tvalues.push(column.getFieldValue(item));\r\n\t\t\t\t});\r\n\r\n\t\t\t\tparamKey = type + \"Params\";\r\n\t\t\t\tparams = typeof column.modules.columnCalcs[paramKey] === \"function\" ? column.modules.columnCalcs[paramKey](values, data) : column.modules.columnCalcs[paramKey];\r\n\r\n\t\t\t\tcolumn.setFieldValue(rowData, column.modules.columnCalcs[type](values, data, params));\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn rowData;\r\n\t}\r\n\r\n\thasTopCalcs(){\r\n\t\treturn\t!!(this.topCalcs.length);\r\n\t}\r\n\r\n\thasBottomCalcs(){\r\n\t\treturn\t!!(this.botCalcs.length);\r\n\t}\r\n\r\n\t//handle table redraw\r\n\tredraw(){\r\n\t\tif(this.topRow){\r\n\t\t\tthis.topRow.normalizeHeight(true);\r\n\t\t}\r\n\t\tif(this.botRow){\r\n\t\t\tthis.botRow.normalizeHeight(true);\r\n\t\t}\r\n\t}\r\n\r\n\t//return the calculated\r\n\tgetResults(){\r\n\t\tvar results = {},\r\n\t\tgroups;\r\n\r\n\t\tif(this.table.options.groupBy && this.table.modExists(\"groupRows\")){\r\n\t\t\tgroups = this.table.modules.groupRows.getGroups(true);\r\n\r\n\t\t\tgroups.forEach((group) => {\r\n\t\t\t\tresults[group.getKey()] = this.getGroupResults(group);\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tresults = {\r\n\t\t\t\ttop: this.topRow ? this.topRow.getData() : {},\r\n\t\t\t\tbottom: this.botRow ? this.botRow.getData() : {},\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn results;\r\n\t}\r\n\r\n\t//get results from a group\r\n\tgetGroupResults(group){\r\n\t\tvar groupObj = group._getSelf(),\r\n\t\tsubGroups = group.getSubGroups(),\r\n\t\tsubGroupResults = {},\r\n\t\tresults = {};\r\n\r\n\t\tsubGroups.forEach((subgroup) => {\r\n\t\t\tsubGroupResults[subgroup.getKey()] = this.getGroupResults(subgroup);\r\n\t\t});\r\n\r\n\t\tresults = {\r\n\t\t\ttop: groupObj.calcs.top ? groupObj.calcs.top.getData() : {},\r\n\t\t\tbottom: groupObj.calcs.bottom ? groupObj.calcs.bottom.getData() : {},\r\n\t\t\tgroups: subGroupResults,\r\n\t\t}\r\n\r\n\t\treturn results;\r\n\t}\r\n}\r\n\r\nColumnCalcs.moduleName = \"columnCalcs\";\r\n\r\n//load defaults\r\nColumnCalcs.calculations = defaultCalculations;\r\n\r\nexport default ColumnCalcs;","import Module from '../../core/Module.js';\r\n\r\nimport Row from '../../core/row/Row.js';\r\n\r\nclass DataTree extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.indent = 10;\r\n\t\tthis.field = \"\";\r\n\t\tthis.collapseEl = null;\r\n\t\tthis.expandEl = null;\r\n\t\tthis.branchEl = null;\r\n\t\tthis.elementField = false;\r\n\r\n\t\tthis.startOpen = function(){};\r\n\r\n\t\tthis.displayIndex = 0;\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tvar dummyEl = null,\r\n\t\tfirstCol = this.table.columnManager.getFirstVisibileColumn(),\r\n\t\toptions = this.table.options;\r\n\r\n\t\tthis.field = options.dataTreeChildField;\r\n\t\tthis.indent = options.dataTreeChildIndent;\r\n\t\tthis.elementField = options.dataTreeElementColumn || (firstCol ? firstCol.field : false);\r\n\r\n\t\tif(options.dataTreeBranchElement){\r\n\r\n\t\t\tif(options.dataTreeBranchElement === true){\r\n\t\t\t\tthis.branchEl = document.createElement(\"div\");\r\n\t\t\t\tthis.branchEl.classList.add(\"tabulator-data-tree-branch\");\r\n\t\t\t}else{\r\n\t\t\t\tif(typeof options.dataTreeBranchElement === \"string\"){\r\n\t\t\t\t\tdummyEl = document.createElement(\"div\");\r\n\t\t\t\t\tdummyEl.innerHTML = options.dataTreeBranchElement;\r\n\t\t\t\t\tthis.branchEl = dummyEl.firstChild;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tthis.branchEl = options.dataTreeBranchElement;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(options.dataTreeCollapseElement){\r\n\t\t\tif(typeof options.dataTreeCollapseElement === \"string\"){\r\n\t\t\t\tdummyEl = document.createElement(\"div\");\r\n\t\t\t\tdummyEl.innerHTML = options.dataTreeCollapseElement;\r\n\t\t\t\tthis.collapseEl = dummyEl.firstChild;\r\n\t\t\t}else{\r\n\t\t\t\tthis.collapseEl = options.dataTreeCollapseElement;\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tthis.collapseEl = document.createElement(\"div\");\r\n\t\t\tthis.collapseEl.classList.add(\"tabulator-data-tree-control\");\r\n\t\t\tthis.collapseEl.tabIndex = 0;\r\n\t\t\tthis.collapseEl.innerHTML = \"
\";\r\n\t\t}\r\n\r\n\t\tif(options.dataTreeExpandElement){\r\n\t\t\tif(typeof options.dataTreeExpandElement === \"string\"){\r\n\t\t\t\tdummyEl = document.createElement(\"div\");\r\n\t\t\t\tdummyEl.innerHTML = options.dataTreeExpandElement;\r\n\t\t\t\tthis.expandEl = dummyEl.firstChild;\r\n\t\t\t}else{\r\n\t\t\t\tthis.expandEl = options.dataTreeExpandElement;\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tthis.expandEl = document.createElement(\"div\");\r\n\t\t\tthis.expandEl.classList.add(\"tabulator-data-tree-control\");\r\n\t\t\tthis.expandEl.tabIndex = 0;\r\n\t\t\tthis.expandEl.innerHTML = \"
\";\r\n\t\t}\r\n\r\n\r\n\t\tswitch(typeof options.dataTreeStartExpanded){\r\n\t\t\tcase \"boolean\":\r\n\t\t\tthis.startOpen = function(row, index){\r\n\t\t\t\treturn options.dataTreeStartExpanded;\r\n\t\t\t};\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"function\":\r\n\t\t\tthis.startOpen = options.dataTreeStartExpanded;\r\n\t\t\tbreak;\r\n\r\n\t\t\tdefault:\r\n\t\t\tthis.startOpen = function(row, index){\r\n\t\t\t\treturn options.dataTreeStartExpanded[index];\r\n\t\t\t};\r\n\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\tinitializeRow(row){\r\n\t\tvar childArray = row.getData()[this.field];\r\n\t\tvar isArray = Array.isArray(childArray);\r\n\r\n\t\tvar children = isArray || (!isArray && typeof childArray === \"object\" && childArray !== null);\r\n\r\n\t\tif(!children && row.modules.dataTree && row.modules.dataTree.branchEl){\r\n\t\t\trow.modules.dataTree.branchEl.parentNode.removeChild(row.modules.dataTree.branchEl);\r\n\t\t}\r\n\r\n\t\tif(!children && row.modules.dataTree && row.modules.dataTree.controlEl){\r\n\t\t\trow.modules.dataTree.controlEl.parentNode.removeChild(row.modules.dataTree.controlEl);\r\n\t\t}\r\n\r\n\t\trow.modules.dataTree = {\r\n\t\t\tindex: row.modules.dataTree ? row.modules.dataTree.index : 0,\r\n\t\t\topen: children ? (row.modules.dataTree ? row.modules.dataTree.open : this.startOpen(row.getComponent(), 0)) : false,\r\n\t\t\tcontrolEl: row.modules.dataTree && children ? row.modules.dataTree.controlEl : false,\r\n\t\t\tbranchEl: row.modules.dataTree && children ? row.modules.dataTree.branchEl : false,\r\n\t\t\tparent: row.modules.dataTree ? row.modules.dataTree.parent : false,\r\n\t\t\tchildren:children,\r\n\t\t};\r\n\t}\r\n\r\n\tlayoutRow(row){\r\n\t\tvar cell = this.elementField ? row.getCell(this.elementField) : row.getCells()[0],\r\n\t\tel = cell.getElement(),\r\n\t\tconfig = row.modules.dataTree;\r\n\r\n\t\tif(config.branchEl){\r\n\t\t\tif(config.branchEl.parentNode){\r\n\t\t\t\tconfig.branchEl.parentNode.removeChild(config.branchEl);\r\n\t\t\t}\r\n\t\t\tconfig.branchEl = false;\r\n\t\t}\r\n\r\n\t\tif(config.controlEl){\r\n\t\t\tif(config.controlEl.parentNode){\r\n\t\t\t\tconfig.controlEl.parentNode.removeChild(config.controlEl);\r\n\t\t\t}\r\n\t\t\tconfig.controlEl = false;\r\n\t\t}\r\n\r\n\t\tthis.generateControlElement(row, el);\r\n\r\n\t\trow.getElement().classList.add(\"tabulator-tree-level-\" + config.index);\r\n\r\n\t\tif(config.index){\r\n\t\t\tif(this.branchEl){\r\n\t\t\t\tconfig.branchEl = this.branchEl.cloneNode(true);\r\n\t\t\t\tel.insertBefore(config.branchEl, el.firstChild);\r\n\r\n\t\t\t\tif(this.table.rtl){\r\n\t\t\t\t\tconfig.branchEl.style.marginRight = (((config.branchEl.offsetWidth + config.branchEl.style.marginLeft) * (config.index - 1)) + (config.index * this.indent)) + \"px\";\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconfig.branchEl.style.marginLeft = (((config.branchEl.offsetWidth + config.branchEl.style.marginRight) * (config.index - 1)) + (config.index * this.indent)) + \"px\";\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\r\n\t\t\t\tif(this.table.rtl){\r\n\t\t\t\t\tel.style.paddingRight = parseInt(window.getComputedStyle(el, null).getPropertyValue('padding-right')) + (config.index * this.indent) + \"px\";\r\n\t\t\t\t}else{\r\n\t\t\t\t\tel.style.paddingLeft = parseInt(window.getComputedStyle(el, null).getPropertyValue('padding-left')) + (config.index * this.indent) + \"px\";\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tgenerateControlElement(row, el){\r\n\t\tvar config = row.modules.dataTree,\r\n\t\tel = el || row.getCells()[0].getElement(),\r\n\t\toldControl = config.controlEl;\r\n\r\n\t\tif(config.children !== false){\r\n\r\n\t\t\tif(config.open){\r\n\t\t\t\tconfig.controlEl = this.collapseEl.cloneNode(true);\r\n\t\t\t\tconfig.controlEl.addEventListener(\"click\", (e) => {\r\n\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\tthis.collapseRow(row);\r\n\t\t\t\t});\r\n\t\t\t}else{\r\n\t\t\t\tconfig.controlEl = this.expandEl.cloneNode(true);\r\n\t\t\t\tconfig.controlEl.addEventListener(\"click\", (e) => {\r\n\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\tthis.expandRow(row);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\tconfig.controlEl.addEventListener(\"mousedown\", (e) => {\r\n\t\t\t\te.stopPropagation();\r\n\t\t\t});\r\n\r\n\t\t\tif(oldControl && oldControl.parentNode === el){\r\n\t\t\t\toldControl.parentNode.replaceChild(config.controlEl,oldControl);\r\n\t\t\t}else{\r\n\t\t\t\tel.insertBefore(config.controlEl, el.firstChild);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tsetDisplayIndex (index) {\r\n\t\tthis.displayIndex = index;\r\n\t}\r\n\r\n\tgetDisplayIndex () {\r\n\t\treturn this.displayIndex;\r\n\t}\r\n\r\n\tgetRows(rows){\r\n\t\tvar output = [];\r\n\r\n\t\trows.forEach((row, i) => {\r\n\t\t\tvar config, children;\r\n\r\n\t\t\toutput.push(row);\r\n\r\n\t\t\tif(row instanceof Row){\r\n\r\n\t\t\t\trow.create();\r\n\r\n\t\t\t\tconfig = row.modules.dataTree.children;\r\n\r\n\t\t\t\tif(!config.index && config.children !== false){\r\n\t\t\t\t\tchildren = this.getChildren(row);\r\n\r\n\t\t\t\t\tchildren.forEach((child) => {\r\n\t\t\t\t\t\tchild.create();\r\n\t\t\t\t\t\toutput.push(child);\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tgetChildren(row, allChildren){\r\n\t\tvar config = row.modules.dataTree,\r\n\t\tchildren = [],\r\n\t\toutput = [];\r\n\r\n\t\tif(config.children !== false && (config.open || allChildren)){\r\n\t\t\tif(!Array.isArray(config.children)){\r\n\t\t\t\tconfig.children = this.generateChildren(row);\r\n\t\t\t}\r\n\r\n\t\t\tif(this.table.modExists(\"filter\") && this.table.options.dataTreeFilter){\r\n\t\t\t\tchildren = this.table.modules.filter.filter(config.children);\r\n\t\t\t}else{\r\n\t\t\t\tchildren = config.children;\r\n\t\t\t}\r\n\r\n\t\t\tif(this.table.modExists(\"sort\") && this.table.options.dataTreeSort){\r\n\t\t\t\tthis.table.modules.sort.sort(children);\r\n\t\t\t}\r\n\r\n\t\t\tchildren.forEach((child) => {\r\n\t\t\t\toutput.push(child);\r\n\r\n\t\t\t\tvar subChildren = this.getChildren(child);\r\n\r\n\t\t\t\tsubChildren.forEach((sub) => {\r\n\t\t\t\t\toutput.push(sub);\r\n\t\t\t\t});\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tgenerateChildren(row){\r\n\t\tvar children = [];\r\n\r\n\t\tvar childArray = row.getData()[this.field];\r\n\r\n\t\tif(!Array.isArray(childArray)){\r\n\t\t\tchildArray = [childArray];\r\n\t\t}\r\n\r\n\t\tchildArray.forEach((childData) => {\r\n\t\t\tvar childRow = new Row(childData || {}, this.table.rowManager);\r\n\r\n\t\t\tchildRow.create();\r\n\r\n\t\t\tchildRow.modules.dataTree.index = row.modules.dataTree.index + 1;\r\n\t\t\tchildRow.modules.dataTree.parent = row;\r\n\r\n\t\t\tif(childRow.modules.dataTree.children){\r\n\t\t\t\tchildRow.modules.dataTree.open = this.startOpen(childRow.getComponent(), childRow.modules.dataTree.index);\r\n\t\t\t}\r\n\t\t\tchildren.push(childRow);\r\n\t\t});\r\n\r\n\t\treturn children;\r\n\t}\r\n\r\n\texpandRow(row, silent){\r\n\t\tvar config = row.modules.dataTree;\r\n\r\n\t\tif(config.children !== false){\r\n\t\t\tconfig.open = true;\r\n\r\n\t\t\trow.reinitialize();\r\n\r\n\t\t\tthis.table.rowManager.refreshActiveData(\"tree\", false, true);\r\n\r\n\t\t\tthis.table.options.dataTreeRowExpanded(row.getComponent(), row.modules.dataTree.index);\r\n\t\t}\r\n\t}\r\n\r\n\tcollapseRow(row){\r\n\t\tvar config = row.modules.dataTree;\r\n\r\n\t\tif(config.children !== false){\r\n\t\t\tconfig.open = false;\r\n\r\n\t\t\trow.reinitialize();\r\n\r\n\t\t\tthis.table.rowManager.refreshActiveData(\"tree\", false, true);\r\n\r\n\t\t\tthis.table.options.dataTreeRowCollapsed(row.getComponent(), row.modules.dataTree.index);\r\n\t\t}\r\n\t}\r\n\r\n\ttoggleRow(row){\r\n\t\tvar config = row.modules.dataTree;\r\n\r\n\t\tif(config.children !== false){\r\n\t\t\tif(config.open){\r\n\t\t\t\tthis.collapseRow(row);\r\n\t\t\t}else{\r\n\t\t\t\tthis.expandRow(row);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tgetTreeParent(row){\r\n\t\treturn row.modules.dataTree.parent ? row.modules.dataTree.parent.getComponent() : false;\r\n\t}\r\n\r\n\tgetFilteredTreeChildren(row){\r\n\t\tvar config = row.modules.dataTree,\r\n\t\toutput = [], children;\r\n\r\n\t\tif(config.children){\r\n\r\n\t\t\tif(!Array.isArray(config.children)){\r\n\t\t\t\tconfig.children = this.generateChildren(row);\r\n\t\t\t}\r\n\r\n\t\t\tif(this.table.modExists(\"filter\") && this.table.options.dataTreeFilter){\r\n\t\t\t\tchildren = this.table.modules.filter.filter(config.children);\r\n\t\t\t}else{\r\n\t\t\t\tchildren = config.children;\r\n\t\t\t}\r\n\r\n\t\t\tchildren.forEach((childRow) => {\r\n\t\t\t\tif(childRow instanceof Row){\r\n\t\t\t\t\toutput.push(childRow);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\trowDelete(row){\r\n\t\tvar parent = row.modules.dataTree.parent,\r\n\t\tchildIndex;\r\n\r\n\t\tif(parent){\r\n\t\t\tchildIndex = this.findChildIndex(row, parent);\r\n\r\n\t\t\tif(childIndex !== false){\r\n\t\t\t\tparent.data[this.field].splice(childIndex, 1);\r\n\t\t\t}\r\n\r\n\t\t\tif(!parent.data[this.field].length){\r\n\t\t\t\tdelete parent.data[this.field];\r\n\t\t\t}\r\n\r\n\t\t\tthis.initializeRow(parent);\r\n\t\t\tthis.layoutRow(parent);\r\n\t\t}\r\n\r\n\t\tthis.table.rowManager.refreshActiveData(\"tree\", false, true);\r\n\t}\r\n\r\n\taddTreeChildRow(row, data, top, index){\r\n\t\tvar childIndex = false;\r\n\r\n\t\tif(typeof data === \"string\"){\r\n\t\t\tdata = JSON.parse(data);\r\n\t\t}\r\n\r\n\t\tif(!Array.isArray(row.data[this.field])){\r\n\t\t\trow.data[this.field] = [];\r\n\r\n\t\t\trow.modules.dataTree.open = this.startOpen(row.getComponent(), row.modules.dataTree.index);\r\n\t\t}\r\n\r\n\t\tif(typeof index !== \"undefined\"){\r\n\t\t\tchildIndex = this.findChildIndex(index, row);\r\n\r\n\t\t\tif(childIndex !== false){\r\n\t\t\t\trow.data[this.field].splice((top ? childIndex : childIndex + 1), 0, data);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(childIndex === false){\r\n\t\t\tif(top){\r\n\t\t\t\trow.data[this.field].unshift(data);\r\n\t\t\t}else{\r\n\t\t\t\trow.data[this.field].push(data);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.initializeRow(row);\r\n\t\tthis.layoutRow(row);\r\n\r\n\t\tthis.table.rowManager.refreshActiveData(\"tree\", false, true);\r\n\t}\r\n\r\n\tfindChildIndex(subject, parent){\r\n\t\tvar match = false;\r\n\r\n\t\tif(typeof subject == \"object\"){\r\n\r\n\t\t\tif(subject instanceof Row){\r\n\t\t\t\t//subject is row element\r\n\t\t\t\tmatch = subject.data;\r\n\t\t\t}else if(subject instanceof RowComponent){\r\n\t\t\t\t//subject is public row component\r\n\t\t\t\tmatch = subject._getSelf().data;\r\n\t\t\t}else if(typeof HTMLElement !== \"undefined\" && subject instanceof HTMLElement){\r\n\t\t\t\tif(parent.modules.dataTree){\r\n\t\t\t\t\tmatch = parent.modules.dataTree.children.find((childRow) => {\r\n\t\t\t\t\t\treturn childRow instanceof Row ? childRow.element === subject : false;\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\tif(match){\r\n\t\t\t\t\t\tmatch = match.data;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t}else if(typeof subject == \"undefined\" || subject === null){\r\n\t\t\tmatch = false\r\n\t\t}else{\r\n\t\t\t//subject should be treated as the index of the row\r\n\t\t\tmatch = parent.data[this.field].find((row) => {\r\n\t\t\t\treturn row.data[this.table.options.index] == subject;\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif(match){\r\n\r\n\t\t\tif(Array.isArray(parent.data[this.field])){\r\n\t\t\t\tmatch = parent.data[this.field].indexOf(match);\r\n\t\t\t}\r\n\r\n\t\t\tif(match == -1){\r\n\t\t\t\tmatch = false;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//catch all for any other type of input\r\n\r\n\t\treturn match;\r\n\t}\r\n\r\n\tgetTreeChildren(row, component, recurse){\r\n\t\tvar config = row.modules.dataTree,\r\n\t\toutput = [];\r\n\r\n\t\tif(config.children){\r\n\r\n\t\t\tif(!Array.isArray(config.children)){\r\n\t\t\t\tconfig.children = this.generateChildren(row);\r\n\t\t\t}\r\n\r\n\t\t\tconfig.children.forEach((childRow) => {\r\n\t\t\t\tif(childRow instanceof Row){\r\n\t\t\t\t\toutput.push(component ? childRow.getComponent() : childRow);\r\n\r\n\t\t\t\t\tif(recurse){\r\n\t\t\t\t\t\toutput = output.concat(this.getTreeChildren(childRow, component, recurse));\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tcheckForRestyle(cell){\r\n\t\tif(!cell.row.cells.indexOf(cell)){\r\n\t\t\tcell.row.reinitialize();\r\n\t\t}\r\n\t}\r\n\r\n\tgetChildField(){\r\n\t\treturn this.field;\r\n\t}\r\n\r\n\tredrawNeeded(data){\r\n\t\treturn (this.field ? typeof data[this.field] !== \"undefined\" : false) || (this.elementField ? typeof data[this.elementField] !== \"undefined\" : false);\r\n\t}\r\n}\r\n\r\nDataTree.moduleName = \"dataTree\";\r\n\r\nexport default DataTree;","import csv from './downloaders/csv.js';\r\nimport json from './downloaders/json.js';\r\nimport pdf from './downloaders/pdf.js';\r\nimport xlsx from './downloaders/xlsx.js';\r\nimport html from './downloaders/html.js';\r\n\r\nexport default {\r\n\tcsv:csv,\r\n\tjson:json,\r\n\tpdf:pdf,\r\n\txlsx:xlsx,\r\n\thtml:html,\r\n};","export default function(list, options, setFileContents){\r\n\tvar delimiter = options && options.delimiter ? options.delimiter : \",\",\r\n\tfileContents = [],\r\n\theaders = [];\r\n\r\n\tlist.forEach((row) => {\r\n\t\tvar item = [];\r\n\r\n\t\tswitch(row.type){\r\n\t\t\tcase \"group\":\r\n\t\t\tconsole.warn(\"Download Warning - CSV downloader cannot process row groups\");\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"calc\":\r\n\t\t\tconsole.warn(\"Download Warning - CSV downloader cannot process column calculations\");\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"header\":\r\n\t\t\trow.columns.forEach((col, i) => {\r\n\t\t\t\tif(col && col.depth === 1){\r\n\t\t\t\t\theaders[i] = typeof col.value == \"undefined\" || col.value === null ? \"\" : ('\"' + String(col.value).split('\"').join('\"\"') + '\"');\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"row\":\r\n\t\t\trow.columns.forEach((col) => {\r\n\r\n\t\t\t\tif(col){\r\n\r\n\t\t\t\t\tswitch(typeof col.value){\r\n\t\t\t\t\t\tcase \"object\":\r\n\t\t\t\t\t\tcol.value = JSON.stringify(col.value);\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\tcase \"undefined\":\r\n\t\t\t\t\t\tcase \"null\":\r\n\t\t\t\t\t\tcol.value = \"\";\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\titem.push('\"' + String(col.value).split('\"').join('\"\"') + '\"');\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tfileContents.push(item.join(delimiter));\r\n\t\t\tbreak;\r\n\t\t}\r\n\t});\r\n\r\n\tif(headers.length){\r\n\t\tfileContents.unshift(headers.join(delimiter));\r\n\t}\r\n\r\n\tfileContents = fileContents.join(\"\\n\");\r\n\r\n\tif(options.bom){\r\n\t\tfileContents = \"\\ufeff\" + fileContents;\r\n\t}\r\n\r\n\tsetFileContents(fileContents, \"text/csv\");\r\n};","export default function(list, options, setFileContents){\r\n\tvar fileContents = [];\r\n\r\n\tlist.forEach((row) => {\r\n\t\tvar item = {};\r\n\r\n\t\tswitch(row.type){\r\n\t\t\tcase \"header\":\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"group\":\r\n\t\t\tconsole.warn(\"Download Warning - JSON downloader cannot process row groups\");\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"calc\":\r\n\t\t\tconsole.warn(\"Download Warning - JSON downloader cannot process column calculations\");\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"row\":\r\n\t\t\trow.columns.forEach((col) => {\r\n\t\t\t\tif(col){\r\n\t\t\t\t\titem[col.component.getField()] = col.value;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tfileContents.push(item);\r\n\t\t\tbreak;\r\n\t\t}\r\n\t});\r\n\r\n\tfileContents = JSON.stringify(fileContents, null, '\\t');\r\n\r\n\tsetFileContents(fileContents, \"application/json\");\r\n};","export default function(list, options, setFileContents){\r\n\tvar header = [],\r\n\tbody = [],\r\n\tautoTableParams = {},\r\n\trowGroupStyles = options.rowGroupStyles || {\r\n\t\tfontStyle: \"bold\",\r\n\t\tfontSize: 12,\r\n\t\tcellPadding: 6,\r\n\t\tfillColor: 220,\r\n\t},\r\n\trowCalcStyles = options.rowCalcStyles || {\r\n\t\tfontStyle: \"bold\",\r\n\t\tfontSize: 10,\r\n\t\tcellPadding: 4,\r\n\t\tfillColor: 232,\r\n\t},\r\n\tjsPDFParams = options.jsPDF || {},\r\n\ttitle = options && options.title ? options.title : \"\";\r\n\r\n\tif(!jsPDFParams.orientation){\r\n\t\tjsPDFParams.orientation = options.orientation || \"landscape\";\r\n\t}\r\n\r\n\tif(!jsPDFParams.unit){\r\n\t\tjsPDFParams.unit = \"pt\";\r\n\t}\r\n\r\n\t//parse row list\r\n\tlist.forEach((row) => {\r\n\t\tvar item = {};\r\n\r\n\t\tswitch(row.type){\r\n\t\t\tcase \"header\":\r\n\t\t\theader.push(parseRow(row));\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"group\":\r\n\t\t\tbody.push(parseRow(row, rowGroupStyles));\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"calc\":\r\n\t\t\tbody.push(parseRow(row, rowCalcStyles));\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"row\":\r\n\t\t\tbody.push(parseRow(row));\r\n\t\t\tbreak;\r\n\t\t}\r\n\t});\r\n\r\n\tfunction parseRow(row, styles){\r\n\t\tvar rowData = [];\r\n\r\n\t\trow.columns.forEach((col) =>{\r\n\t\t\tvar cell;\r\n\r\n\t\t\tif(col){\r\n\t\t\t\tswitch(typeof col.value){\r\n\t\t\t\t\tcase \"object\":\r\n\t\t\t\t\tcol.value = JSON.stringify(col.value);\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase \"undefined\":\r\n\t\t\t\t\tcase \"null\":\r\n\t\t\t\t\tcol.value = \"\";\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tcell = {\r\n\t\t\t\t\tcontent:col.value,\r\n\t\t\t\t\tcolSpan:col.width,\r\n\t\t\t\t\trowSpan:col.height,\r\n\t\t\t\t};\r\n\r\n\t\t\t\tif(styles){\r\n\t\t\t\t\tcell.styles = styles;\r\n\t\t\t\t}\r\n\r\n\t\t\t\trowData.push(cell);\r\n\t\t\t}else{\r\n\t\t\t\trowData.push(\"\");\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn rowData;\r\n\t}\r\n\r\n\r\n\t//configure PDF\r\n\tvar doc = new jsPDF(jsPDFParams); //set document to landscape, better for most tables\r\n\r\n\tif(options && options.autoTable){\r\n\t\tif(typeof options.autoTable === \"function\"){\r\n\t\t\tautoTableParams = options.autoTable(doc) || {};\r\n\t\t}else{\r\n\t\t\tautoTableParams = options.autoTable;\r\n\t\t}\r\n\t}\r\n\r\n\tif(title){\r\n\t\tautoTableParams.addPageContent = function(data) {\r\n\t\t\tdoc.text(title, 40, 30);\r\n\t\t};\r\n\t}\r\n\r\n\tautoTableParams.head = header;\r\n\tautoTableParams.body = body;\r\n\r\n\tdoc.autoTable(autoTableParams);\r\n\r\n\tif(options && options.documentProcessing){\r\n\t\toptions.documentProcessing(doc);\r\n\t}\r\n\r\n\tsetFileContents(doc.output(\"arraybuffer\"), \"application/pdf\");\r\n};","export default function(list, options, setFileContents){\r\n\tvar self = this,\r\n\tsheetName = options.sheetName || \"Sheet1\",\r\n\tworkbook = XLSX.utils.book_new(),\r\n\toutput;\r\n\r\n\tworkbook.SheetNames = [];\r\n\tworkbook.Sheets = {};\r\n\r\n\tfunction generateSheet(){\r\n\t\tvar rows = [],\r\n\t\tmerges = [],\r\n\t\tworksheet = {},\r\n\t\trange = {s: {c:0, r:0}, e: {c:(list[0] ? list[0].columns.reduce((a, b) => a + (b && b.width ? b.width : 1), 0) : 0), r:list.length }};\r\n\r\n\t\t//parse row list\r\n\t\tlist.forEach((row, i) => {\r\n\t\t\tvar rowData = [];\r\n\r\n\t\t\trow.columns.forEach(function(col, j){\r\n\r\n\t\t\t\tif(col){\r\n\t\t\t\t\trowData.push(!(col.value instanceof Date) && typeof col.value === \"object\" ? JSON.stringify(col.value) : col.value);\r\n\r\n\t\t\t\t\tif(col.width > 1 || col.height > -1){\r\n\t\t\t\t\t\tmerges.push({s:{r:i,c:j},e:{r:i + col.height - 1,c:j + col.width - 1}});\r\n\t\t\t\t\t}\r\n\t\t\t\t}else{\r\n\t\t\t\t\trowData.push(\"\");\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\trows.push(rowData);\r\n\t\t});\r\n\r\n\r\n\t\t//convert rows to worksheet\r\n\t\tXLSX.utils.sheet_add_aoa(worksheet, rows);\r\n\r\n\t\tworksheet['!ref'] = XLSX.utils.encode_range(range);\r\n\r\n\t\tif(merges.length){\r\n\t\t\tworksheet[\"!merges\"] = merges;\r\n\t\t}\r\n\r\n\t\treturn worksheet;\r\n\t}\r\n\r\n\tif(options.sheetOnly){\r\n\t\tsetFileContents(generateSheet());\r\n\t\treturn;\r\n\t}\r\n\r\n\tif(options.sheets){\r\n\t\tfor(var sheet in options.sheets){\r\n\r\n\t\t\tif(options.sheets[sheet] === true){\r\n\t\t\t\tworkbook.SheetNames.push(sheet);\r\n\t\t\t\tworkbook.Sheets[sheet] = generateSheet();\r\n\t\t\t}else{\r\n\r\n\t\t\t\tworkbook.SheetNames.push(sheet);\r\n\r\n\t\t\t\tthis.modules.comms.send(options.sheets[sheet], \"download\", \"intercept\",{\r\n\t\t\t\t\ttype:\"xlsx\",\r\n\t\t\t\t\toptions:{sheetOnly:true},\r\n\t\t\t\t\tactive:self.active,\r\n\t\t\t\t\tintercept:function(data){\r\n\t\t\t\t\t\tworkbook.Sheets[sheet] = data;\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\t}else{\r\n\t\tworkbook.SheetNames.push(sheetName);\r\n\t\tworkbook.Sheets[sheetName] = generateSheet();\r\n\t}\r\n\r\n\tif(options.documentProcessing){\r\n\t\tworkbook = options.documentProcessing(workbook);\r\n\t}\r\n\r\n\t//convert workbook to binary array\r\n\tfunction s2ab(s) {\r\n\t\tvar buf = new ArrayBuffer(s.length);\r\n\t\tvar view = new Uint8Array(buf);\r\n\t\tfor (var i=0; i!=s.length; ++i) view[i] = s.charCodeAt(i) & 0xFF;\r\n\t\t\treturn buf;\r\n\t}\r\n\r\n\toutput = XLSX.write(workbook, {bookType:'xlsx', bookSST:true, type: 'binary'});\r\n\r\n\tsetFileContents(s2ab(output), \"application/octet-stream\");\r\n};","export default function(list, options, setFileContents){\r\n\tif(this.modExists(\"export\", true)){\r\n\t\tsetFileContents(this.modules.export.genereateHTMLTable(list), \"text/html\");\r\n\t}\r\n};","import Module from '../../core/Module.js';\r\n\r\nimport defaultDownloaders from './defaults/downloaders.js';\r\n\r\nclass Download extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\t}\r\n\r\n\t//trigger file download\r\n\tdownload(type, filename, options, range, interceptCallback){\r\n\t\tvar downloadFunc = false;\r\n\r\n\t\tfunction buildLink(data, mime){\r\n\t\t\tif(interceptCallback){\r\n\t\t\t\tif(interceptCallback === true){\r\n\t\t\t\t\tthis.triggerDownload(data, mime, type, filename, true);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tinterceptCallback(data);\r\n\t\t\t\t}\r\n\r\n\t\t\t}else{\r\n\t\t\t\tthis.triggerDownload(data, mime, type, filename);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(typeof type == \"function\"){\r\n\t\t\tdownloadFunc = type;\r\n\t\t}else{\r\n\t\t\tif(Download.downloaders[type]){\r\n\t\t\t\tdownloadFunc = Download.downloaders[type];\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Download Error - No such download type found: \", type);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(downloadFunc){\r\n\t\t\tvar list = this.generateExportList(range);\r\n\r\n\t\t\tdownloadFunc.call(this.table, list , options || {}, buildLink);\r\n\t\t}\r\n\t}\r\n\r\n\tgenerateExportList(range){\r\n\t\tvar list = this.table.modules.export.generateExportList(this.table.options.downloadConfig, false, range || this.table.options.downloadRowRange, \"download\");\r\n\r\n\t\t//assign group header formatter\r\n\t\tvar groupHeader = this.table.options.groupHeaderDownload;\r\n\r\n\t\tif(groupHeader && !Array.isArray(groupHeader)){\r\n\t\t\tgroupHeader = [groupHeader];\r\n\t\t}\r\n\r\n\t\tlist.forEach((row) => {\r\n\t\t\tvar group;\r\n\r\n\t\t\tif(row.type === \"group\"){\r\n\t\t\t\tgroup = row.columns[0];\r\n\r\n\t\t\t\tif(groupHeader && groupHeader[row.indent]){\r\n\t\t\t\t\tgroup.value = groupHeader[row.indent](group.value, row.component._group.getRowCount(), row.component._group.getData(), row.component);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn list;\r\n\t}\r\n\r\n\ttriggerDownload(data, mime, type, filename, newTab){\r\n\t\tvar element = document.createElement('a'),\r\n\t\tblob = new Blob([data],{type:mime}),\r\n\t\tfilename = filename || \"Tabulator.\" + (typeof type === \"function\" ? \"txt\" : type);\r\n\r\n\t\tblob = this.table.options.downloadReady.call(this.table, data, blob);\r\n\r\n\t\tif(blob){\r\n\r\n\t\t\tif(newTab){\r\n\t\t\t\twindow.open(window.URL.createObjectURL(blob));\r\n\t\t\t}else{\r\n\t\t\t\tif(navigator.msSaveOrOpenBlob){\r\n\t\t\t\t\tnavigator.msSaveOrOpenBlob(blob, filename);\r\n\t\t\t\t}else{\r\n\t\t\t\t\telement.setAttribute('href', window.URL.createObjectURL(blob));\r\n\r\n\t\t\t\t\t//set file title\r\n\t\t\t\t\telement.setAttribute('download', filename);\r\n\r\n\t\t\t\t\t//trigger download\r\n\t\t\t\t\telement.style.display = 'none';\r\n\t\t\t\t\tdocument.body.appendChild(element);\r\n\t\t\t\t\telement.click();\r\n\r\n\t\t\t\t\t//remove temporary link element\r\n\t\t\t\t\tdocument.body.removeChild(element);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\r\n\t\t\tif(this.table.options.downloadComplete){\r\n\t\t\t\tthis.table.options.downloadComplete();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tcommsReceived(table, action, data){\r\n\t\tswitch(action){\r\n\t\t\tcase \"intercept\":\r\n\t\t\tthis.download(data.type, \"\", data.options, data.active, data.intercept);\r\n\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n}\r\n\r\nDownload.moduleName = \"download\";\r\n\r\n//load defaults\r\nDownload.downloaders = defaultDownloaders;\r\n\r\nexport default Download;","import input from './editors/input.js';\r\nimport textarea from './editors/textarea.js';\r\nimport number from './editors/number.js';\r\nimport range from './editors/range.js';\r\nimport select from './editors/select.js';\r\nimport autocomplete from './editors/autocomplete.js';\r\nimport star from './editors/star.js';\r\nimport progress from './editors/progress.js';\r\nimport tickCross from './editors/tickCross.js';\r\n\r\nexport default {\r\n\tinput:input,\r\n\ttextarea:textarea,\r\n number:number,\r\n range:range,\r\n\tselect:select,\r\n\tautocomplete:autocomplete,\r\n\tstar:star,\r\n\tprogress:progress,\r\n\ttickCross:tickCross,\r\n};","//input element\r\nexport default function(cell, onRendered, success, cancel, editorParams){\r\n\t//create and style input\r\n\tvar cellValue = cell.getValue(),\r\n\tinput = document.createElement(\"input\");\r\n\r\n\tinput.setAttribute(\"type\", editorParams.search ? \"search\" : \"text\");\r\n\r\n\tinput.style.padding = \"4px\";\r\n\tinput.style.width = \"100%\";\r\n\tinput.style.boxSizing = \"border-box\";\r\n\r\n\tif(editorParams.elementAttributes && typeof editorParams.elementAttributes == \"object\"){\r\n\t\tfor (let key in editorParams.elementAttributes){\r\n\t\t\tif(key.charAt(0) == \"+\"){\r\n\t\t\t\tkey = key.slice(1);\r\n\t\t\t\tinput.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\r\n\t\t\t}else{\r\n\t\t\t\tinput.setAttribute(key, editorParams.elementAttributes[key]);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tinput.value = typeof cellValue !== \"undefined\" ? cellValue : \"\";\r\n\r\n\tonRendered(function(){\r\n\t\tinput.focus({preventScroll: true});\r\n\t\tinput.style.height = \"100%\";\r\n\t});\r\n\r\n\tfunction onChange(e){\r\n\t\tif(((cellValue === null || typeof cellValue === \"undefined\") && input.value !== \"\") || input.value !== cellValue){\r\n\t\t\tif(success(input.value)){\r\n\t\t\t\tcellValue = input.value; //persist value if successfully validated incase editor is used as header filter\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tcancel();\r\n\t\t}\r\n\t}\r\n\r\n\t//submit new value on blur or change\r\n\tinput.addEventListener(\"change\", onChange);\r\n\tinput.addEventListener(\"blur\", onChange);\r\n\r\n\t//submit new value on enter\r\n\tinput.addEventListener(\"keydown\", function(e){\r\n\t\tswitch(e.keyCode){\r\n\t\t\t// case 9:\r\n\t\t\tcase 13:\r\n\t\t\tonChange(e);\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 27:\r\n\t\t\tcancel();\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 35:\r\n\t\t\tcase 36:\r\n\t\t\te.stopPropagation();\r\n\t\t\tbreak;\r\n\t\t}\r\n\t});\r\n\r\n\tif(editorParams.mask){\r\n\t\tthis.table.modules.edit.maskInput(input, editorParams);\r\n\t}\r\n\r\n\treturn input;\r\n};","//resizable text area element\r\nexport default function(cell, onRendered, success, cancel, editorParams){\r\n var self = this,\r\n cellValue = cell.getValue(),\r\n vertNav = editorParams.verticalNavigation || \"hybrid\",\r\n value = String(cellValue !== null && typeof cellValue !== \"undefined\" ? cellValue : \"\"),\r\n count = (value.match(/(?:\\r\\n|\\r|\\n)/g) || []).length + 1,\r\n input = document.createElement(\"textarea\"),\r\n scrollHeight = 0;\r\n\r\n //create and style input\r\n input.style.display = \"block\";\r\n input.style.padding = \"2px\";\r\n input.style.height = \"100%\";\r\n input.style.width = \"100%\";\r\n input.style.boxSizing = \"border-box\";\r\n input.style.whiteSpace = \"pre-wrap\";\r\n input.style.resize = \"none\";\r\n\r\n if(editorParams.elementAttributes && typeof editorParams.elementAttributes == \"object\"){\r\n for (let key in editorParams.elementAttributes){\r\n if(key.charAt(0) == \"+\"){\r\n key = key.slice(1);\r\n input.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\r\n }else{\r\n input.setAttribute(key, editorParams.elementAttributes[key]);\r\n }\r\n }\r\n }\r\n\r\n input.value = value;\r\n\r\n onRendered(function(){\r\n input.focus({preventScroll: true});\r\n input.style.height = \"100%\";\r\n\r\n input.scrollHeight;\r\n input.style.height = input.scrollHeight + \"px\";\r\n cell.getRow().normalizeHeight();\r\n });\r\n\r\n function onChange(e){\r\n\r\n if(((cellValue === null || typeof cellValue === \"undefined\") && input.value !== \"\") || input.value !== cellValue){\r\n\r\n if(success(input.value)){\r\n cellValue = input.value; //persist value if successfully validated incase editor is used as header filter\r\n }\r\n\r\n setTimeout(function(){\r\n cell.getRow().normalizeHeight();\r\n },300)\r\n }else{\r\n cancel();\r\n }\r\n }\r\n\r\n //submit new value on blur or change\r\n input.addEventListener(\"change\", onChange);\r\n input.addEventListener(\"blur\", onChange);\r\n\r\n input.addEventListener(\"keyup\", function(){\r\n\r\n input.style.height = \"\";\r\n\r\n var heightNow = input.scrollHeight;\r\n\r\n input.style.height = heightNow + \"px\";\r\n\r\n if(heightNow != scrollHeight){\r\n scrollHeight = heightNow;\r\n cell.getRow().normalizeHeight();\r\n }\r\n });\r\n\r\n input.addEventListener(\"keydown\", function(e){\r\n\r\n switch(e.keyCode){\r\n case 27:\r\n cancel();\r\n break;\r\n\r\n case 38: //up arrow\r\n if(vertNav == \"editor\" || (vertNav == \"hybrid\" && input.selectionStart)){\r\n e.stopImmediatePropagation();\r\n e.stopPropagation();\r\n }\r\n\r\n break;\r\n\r\n case 40: //down arrow\r\n if(vertNav == \"editor\" || (vertNav == \"hybrid\" && input.selectionStart !== input.value.length)){\r\n e.stopImmediatePropagation();\r\n e.stopPropagation();\r\n }\r\n break;\r\n\r\n case 35:\r\n case 36:\r\n e.stopPropagation();\r\n break;\r\n }\r\n });\r\n\r\n if(editorParams.mask){\r\n this.table.modules.edit.maskInput(input, editorParams);\r\n }\r\n\r\n return input;\r\n};","//input element with type of number\r\nexport default function(cell, onRendered, success, cancel, editorParams){\r\n\tvar cellValue = cell.getValue(),\r\n\tvertNav = editorParams.verticalNavigation || \"editor\",\r\n\tinput = document.createElement(\"input\");\r\n\r\n\tinput.setAttribute(\"type\", \"number\");\r\n\r\n\tif(typeof editorParams.max != \"undefined\"){\r\n\t\tinput.setAttribute(\"max\", editorParams.max);\r\n\t}\r\n\r\n\tif(typeof editorParams.min != \"undefined\"){\r\n\t\tinput.setAttribute(\"min\", editorParams.min);\r\n\t}\r\n\r\n\tif(typeof editorParams.step != \"undefined\"){\r\n\t\tinput.setAttribute(\"step\", editorParams.step);\r\n\t}\r\n\r\n\t//create and style input\r\n\tinput.style.padding = \"4px\";\r\n\tinput.style.width = \"100%\";\r\n\tinput.style.boxSizing = \"border-box\";\r\n\r\n\tif(editorParams.elementAttributes && typeof editorParams.elementAttributes == \"object\"){\r\n\t\tfor (let key in editorParams.elementAttributes){\r\n\t\t\tif(key.charAt(0) == \"+\"){\r\n\t\t\t\tkey = key.slice(1);\r\n\t\t\t\tinput.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\r\n\t\t\t}else{\r\n\t\t\t\tinput.setAttribute(key, editorParams.elementAttributes[key]);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tinput.value = cellValue;\r\n\r\n\tvar blurFunc = function(e){\r\n\t\tonChange();\r\n\t};\r\n\r\n\tonRendered(function () {\r\n\t\t//submit new value on blur\r\n\t\tinput.removeEventListener(\"blur\", blurFunc);\r\n\r\n\t\tinput.focus({preventScroll: true});\r\n\t\tinput.style.height = \"100%\";\r\n\r\n\t\t//submit new value on blur\r\n\t\tinput.addEventListener(\"blur\", blurFunc);\r\n\t});\r\n\r\n\tfunction onChange(){\r\n\t\tvar value = input.value;\r\n\r\n\t\tif(!isNaN(value) && value !==\"\"){\r\n\t\t\tvalue = Number(value);\r\n\t\t}\r\n\r\n\t\tif(value !== cellValue){\r\n\t\t\tif(success(value)){\r\n\t\t\t\tcellValue = value; //persist value if successfully validated incase editor is used as header filter\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tcancel();\r\n\t\t}\r\n\t}\r\n\r\n\t//submit new value on enter\r\n\tinput.addEventListener(\"keydown\", function(e){\r\n\t\tswitch(e.keyCode){\r\n\t\t\tcase 13:\r\n\t\t\t// case 9:\r\n\t\t\tonChange();\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 27:\r\n\t\t\tcancel();\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 38: //up arrow\r\n\t\t\tcase 40: //down arrow\r\n\t\t\tif(vertNav == \"editor\"){\r\n\t\t\t\te.stopImmediatePropagation();\r\n\t\t\t\te.stopPropagation();\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 35:\r\n\t\t\tcase 36:\r\n\t\t\te.stopPropagation();\r\n\t\t\tbreak;\r\n\t\t}\r\n\t});\r\n\r\n\tif(editorParams.mask){\r\n\t\tthis.table.modules.edit.maskInput(input, editorParams);\r\n\t}\r\n\r\n\treturn input;\r\n};","//input element with type of number\r\nexport default function(cell, onRendered, success, cancel, editorParams){\r\n\tvar cellValue = cell.getValue(),\r\n\tinput = document.createElement(\"input\");\r\n\r\n\tinput.setAttribute(\"type\", \"range\");\r\n\r\n\tif (typeof editorParams.max != \"undefined\") {\r\n\t\tinput.setAttribute(\"max\", editorParams.max);\r\n\t}\r\n\r\n\tif (typeof editorParams.min != \"undefined\") {\r\n\t\tinput.setAttribute(\"min\", editorParams.min);\r\n\t}\r\n\r\n\tif (typeof editorParams.step != \"undefined\") {\r\n\t\tinput.setAttribute(\"step\", editorParams.step);\r\n\t}\r\n\r\n\t//create and style input\r\n\tinput.style.padding = \"4px\";\r\n\tinput.style.width = \"100%\";\r\n\tinput.style.boxSizing = \"border-box\";\r\n\r\n\tif(editorParams.elementAttributes && typeof editorParams.elementAttributes == \"object\"){\r\n\t\tfor (let key in editorParams.elementAttributes){\r\n\t\t\tif(key.charAt(0) == \"+\"){\r\n\t\t\t\tkey = key.slice(1);\r\n\t\t\t\tinput.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\r\n\t\t\t}else{\r\n\t\t\t\tinput.setAttribute(key, editorParams.elementAttributes[key]);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tinput.value = cellValue;\r\n\r\n\tonRendered(function () {\r\n\t\tinput.focus({preventScroll: true});\r\n\t\tinput.style.height = \"100%\";\r\n\t});\r\n\r\n\tfunction onChange(){\r\n\t\tvar value = input.value;\r\n\r\n\t\tif(!isNaN(value) && value !==\"\"){\r\n\t\t\tvalue = Number(value);\r\n\t\t}\r\n\r\n\t\tif(value != cellValue){\r\n\t\t\tif(success(value)){\r\n\t\t\t\tcellValue = value; //persist value if successfully validated incase editor is used as header filter\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tcancel();\r\n\t\t}\r\n\t}\r\n\r\n\t//submit new value on blur\r\n\tinput.addEventListener(\"blur\", function(e){\r\n\t\tonChange();\r\n\t});\r\n\r\n\t//submit new value on enter\r\n\tinput.addEventListener(\"keydown\", function(e){\r\n\t\tswitch(e.keyCode){\r\n\t\t\tcase 13:\r\n\t\t\t// case 9:\r\n\t\t\tonChange();\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 27:\r\n\t\t\tcancel();\r\n\t\t\tbreak;\r\n\t\t}\r\n\t});\r\n\r\n\treturn input;\r\n};","import Helpers from '../../../../core/Helpers.js';\r\n\r\n//dropdown select editor\r\nexport default function(cell, onRendered, success, cancel, editorParams){\r\n\tvar self = this,\r\n\tcellEl = cell.getElement(),\r\n\tinitialValue = cell.getValue(),\r\n\tvertNav = editorParams.verticalNavigation || \"editor\",\r\n\tinitialDisplayValue = typeof initialValue !== \"undefined\" || initialValue === null ? (Array.isArray(initialValue) ? initialValue : [initialValue]) : (typeof editorParams.defaultValue !== \"undefined\" ? editorParams.defaultValue : []),\r\n\tinput = document.createElement(\"input\"),\r\n\tlistEl = document.createElement(\"div\"),\r\n\tmultiselect = editorParams.multiselect,\r\n\tdataItems = [],\r\n\tcurrentItem = {},\r\n\tdisplayItems = [],\r\n\tcurrentItems = [],\r\n\tblurable = true,\r\n\tblockListShow = false,\r\n\tsearchWord = \"\",\r\n\tsearchWordTimeout = null;\r\n\r\n\tif(Array.isArray(editorParams) || (!Array.isArray(editorParams) && typeof editorParams === \"object\" && !editorParams.values)){\r\n\t\tconsole.warn(\"DEPRECATION WARNING - values for the select editor must now be passed into the values property of the editorParams object, not as the editorParams object\");\r\n\t\teditorParams = {values:editorParams};\r\n\t}\r\n\r\n\tfunction getUniqueColumnValues(field){\r\n\t\tvar output = {},\r\n\t\tdata = self.table.getData(),\r\n\t\tcolumn;\r\n\r\n\t\tif(field){\r\n\t\t\tcolumn = self.table.columnManager.getColumnByField(field);\r\n\t\t}else{\r\n\t\t\tcolumn = cell.getColumn()._getSelf();\r\n\t\t}\r\n\r\n\t\tif(column){\r\n\t\t\tdata.forEach(function(row){\r\n\t\t\t\tvar val = column.getFieldValue(row);\r\n\r\n\t\t\t\tif(val !== null && typeof val !== \"undefined\" && val !== \"\"){\r\n\t\t\t\t\toutput[val] = true;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"unable to find matching column to create select lookup list:\", field);\r\n\t\t}\r\n\r\n\t\treturn Object.keys(output);\r\n\t}\r\n\r\n\tfunction parseItems(inputValues, curentValues){\r\n\t\tvar dataList = [];\r\n\t\tvar displayList = [];\r\n\r\n\t\tfunction processComplexListItem(item){\r\n\t\t\tvar item = {\r\n\t\t\t\tlabel:item.label,\r\n\t\t\t\tvalue:item.value,\r\n\t\t\t\titemParams:item.itemParams,\r\n\t\t\t\telementAttributes: item.elementAttributes,\r\n\t\t\t\telement:false,\r\n\t\t\t};\r\n\r\n\t\t\t// if(item.value === curentValue || (!isNaN(parseFloat(item.value)) && !isNaN(parseFloat(item.value)) && parseFloat(item.value) === parseFloat(curentValue))){\r\n\t\t\t// \tsetCurrentItem(item);\r\n\t\t\t// }\r\n\r\n\t\t\tif(curentValues.indexOf(item.value) > -1){\r\n\t\t\t\tsetItem(item);\r\n\t\t\t}\r\n\r\n\t\t\tdataList.push(item);\r\n\t\t\tdisplayList.push(item);\r\n\r\n\t\t\treturn item;\r\n\t\t}\r\n\r\n\t\tif(typeof inputValues == \"function\"){\r\n\t\t\tinputValues = inputValues(cell);\r\n\t\t}\r\n\r\n\t\tif(Array.isArray(inputValues)){\r\n\t\t\tinputValues.forEach(function(value){\r\n\t\t\t\tvar item;\r\n\r\n\t\t\t\tif(typeof value === \"object\"){\r\n\r\n\t\t\t\t\tif(value.options){\r\n\t\t\t\t\t\titem = {\r\n\t\t\t\t\t\t\tlabel:value.label,\r\n\t\t\t\t\t\t\tgroup:true,\r\n\t\t\t\t\t\t\titemParams:value.itemParams,\r\n\t\t\t\t\t\t\telementAttributes:value.elementAttributes,\r\n\t\t\t\t\t\t\telement:false,\r\n\t\t\t\t\t\t};\r\n\r\n\t\t\t\t\t\tdisplayList.push(item);\r\n\r\n\t\t\t\t\t\tvalue.options.forEach(function(item){\r\n\t\t\t\t\t\t\tprocessComplexListItem(item);\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tprocessComplexListItem(value);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}else{\r\n\r\n\t\t\t\t\titem = {\r\n\t\t\t\t\t\tlabel:value,\r\n\t\t\t\t\t\tvalue:value,\r\n\t\t\t\t\t\telement:false,\r\n\t\t\t\t\t};\r\n\r\n\t\t\t\t\t// if(item.value === curentValue || (!isNaN(parseFloat(item.value)) && !isNaN(parseFloat(item.value)) && parseFloat(item.value) === parseFloat(curentValue))){\r\n\t\t\t\t\t// \tsetCurrentItem(item);\r\n\t\t\t\t\t// }\r\n\r\n\t\t\t\t\tif(curentValues.indexOf(item.value) > -1){\r\n\t\t\t\t\t\tsetItem(item);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tdataList.push(item);\r\n\t\t\t\t\tdisplayList.push(item);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tfor(var key in inputValues){\r\n\t\t\t\tvar item = {\r\n\t\t\t\t\tlabel:inputValues[key],\r\n\t\t\t\t\tvalue:key,\r\n\t\t\t\t\telement:false,\r\n\t\t\t\t};\r\n\r\n\t\t\t\t// if(item.value === curentValue || (!isNaN(parseFloat(item.value)) && !isNaN(parseFloat(item.value)) && parseFloat(item.value) === parseFloat(curentValue))){\r\n\t\t\t\t// \tsetCurrentItem(item);\r\n\t\t\t\t// }\r\n\r\n\t\t\t\tif(curentValues.indexOf(item.value) > -1){\r\n\t\t\t\t\tsetItem(item);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tdataList.push(item);\r\n\t\t\t\tdisplayList.push(item);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(editorParams.sortValuesList){\r\n\t\t\tdataList.sort((a, b) => {\r\n\t\t\t\treturn a.label < b.label ? -1 : (a.label > b.label ? 1 : 0);\r\n\t\t\t});\r\n\r\n\t\t\tdisplayList.sort((a, b) => {\r\n\t\t\t\treturn a.label < b.label ? -1 : (a.label > b.label ? 1 : 0);\r\n\t\t\t});\r\n\r\n\t\t\tif(editorParams.sortValuesList !== \"asc\"){\r\n\t\t\t\tdataList.reverse();\r\n\t\t\t\tdisplayList.reverse();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tdataItems = dataList;\r\n\t\tdisplayItems = displayList;\r\n\r\n\t\tfillList();\r\n\t}\r\n\r\n\tfunction fillList(){\r\n\t\twhile(listEl.firstChild) listEl.removeChild(listEl.firstChild);\r\n\r\n\t\tdisplayItems.forEach(function(item){\r\n\r\n\t\t\tvar el = item.element;\r\n\r\n\t\t\tif(!el){\r\n\t\t\t\tel = document.createElement(\"div\");\r\n\t\t\t\titem.label = editorParams.listItemFormatter ? editorParams.listItemFormatter(item.value, item.label, cell, el, item.itemParams) : item.label;\r\n\t\t\t\tif(item.group){\r\n\t\t\t\t\tel.classList.add(\"tabulator-edit-select-list-group\");\r\n\t\t\t\t\tel.tabIndex = 0;\r\n\t\t\t\t\tel.innerHTML = item.label === \"\" ? \" \" : item.label;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tel.classList.add(\"tabulator-edit-select-list-item\");\r\n\t\t\t\t\tel.tabIndex = 0;\r\n\t\t\t\t\tel.innerHTML = item.label === \"\" ? \" \" : item.label;\r\n\r\n\t\t\t\t\tel.addEventListener(\"click\", function(){\r\n\t\t\t\t\t\tblockListShow = true;\r\n\r\n\t\t\t\t\t\tsetTimeout(() => {\r\n\t\t\t\t\t\t\tblockListShow = false;\r\n\t\t\t\t\t\t}, 10);\r\n\r\n\t\t\t\t\t\t// setCurrentItem(item);\r\n\t\t\t\t\t\t// chooseItem();\r\n\t\t\t\t\t\tif(multiselect){\r\n\t\t\t\t\t\t\ttoggleItem(item);\r\n\t\t\t\t\t\t\tinput.focus();\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\tchooseItem(item);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\t// if(item === currentItem){\r\n\t\t\t\t\t// \tel.classList.add(\"active\");\r\n\t\t\t\t\t// }\r\n\r\n\t\t\t\t\tif(currentItems.indexOf(item) > -1){\r\n\t\t\t\t\t\tel.classList.add(\"active\");\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(item.elementAttributes && typeof item.elementAttributes == \"object\"){\r\n\t\t\t\t\tfor (let key in item.elementAttributes){\r\n\t\t\t\t\t\tif(key.charAt(0) == \"+\"){\r\n\t\t\t\t\t\t\tkey = key.slice(1);\r\n\t\t\t\t\t\t\tel.setAttribute(key, input.getAttribute(key) + item.elementAttributes[\"+\" + key]);\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\tel.setAttribute(key, item.elementAttributes[key]);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tel.addEventListener(\"mousedown\", function(){\r\n\t\t\t\t\tblurable = false;\r\n\r\n\t\t\t\t\tsetTimeout(function(){\r\n\t\t\t\t\t\tblurable = true;\r\n\t\t\t\t\t}, 10);\r\n\t\t\t\t});\r\n\r\n\t\t\t\titem.element = el;\r\n\r\n\r\n\t\t\t}\r\n\r\n\t\t\tlistEl.appendChild(el);\r\n\t\t});\r\n\t}\r\n\r\n\r\n\tfunction setCurrentItem(item, active){\r\n\r\n\t\tif(!multiselect && currentItem && currentItem.element){\r\n\t\t\tcurrentItem.element.classList.remove(\"active\");\r\n\t\t}\r\n\r\n\t\tif(currentItem && currentItem.element){\r\n\t\t\tcurrentItem.element.classList.remove(\"focused\");\r\n\t\t}\r\n\r\n\t\tcurrentItem = item;\r\n\r\n\t\tif(item.element){\r\n\t\t\titem.element.classList.add(\"focused\");\r\n\t\t\tif(active){\r\n\t\t\t\titem.element.classList.add(\"active\");\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(item && item.element && item.element.scrollIntoView){\r\n\t\t\titem.element.scrollIntoView({behavior: 'smooth', block: 'nearest', inline: 'start'});\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t// function chooseItem(){\r\n\t// \thideList();\r\n\r\n\t// \tif(initialValue !== currentItem.value){\r\n\t// \t\tinitialValue = currentItem.value;\r\n\t// \t\tsuccess(currentItem.value);\r\n\t// \t}else{\r\n\t// \t\tcancel();\r\n\t// \t}\r\n\t// }\r\n\r\n\tfunction setItem(item) {\r\n\t\tvar index = currentItems.indexOf(item);\r\n\r\n\t\tif(index == -1){\r\n\t\t\tcurrentItems.push(item);\r\n\t\t\tsetCurrentItem(item, true);\r\n\t\t}\r\n\r\n\t\tfillInput();\r\n\t}\r\n\r\n\tfunction unsetItem(index) {\r\n\t\tvar item = currentItems[index];\r\n\r\n\t\tif(index > -1){\r\n\t\t\tcurrentItems.splice(index, 1);\r\n\t\t\tif(item.element){\r\n\t\t\t\titem.element.classList.remove(\"active\");\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tfunction toggleItem(item) {\r\n\t\tif(!item){\r\n\t\t\titem = currentItem;\r\n\t\t}\r\n\r\n\t\tvar index = currentItems.indexOf(item);\r\n\r\n\t\tif(index > -1){\r\n\t\t\tunsetItem(index);\r\n\t\t}else{\r\n\t\t\tif(multiselect !== true && currentItems.length >= multiselect){\r\n\t\t\t\tunsetItem(0);\r\n\t\t\t}\r\n\r\n\t\t\tsetItem(item);\r\n\t\t}\r\n\r\n\t\tfillInput();\r\n\r\n\t}\r\n\r\n\tfunction chooseItem(item){\r\n\t\thideList();\r\n\r\n\t\tif(!item){\r\n\t\t\titem = currentItem;\r\n\t\t}\r\n\r\n\t\tif(item){\r\n\t\t\tinput.value = item.label;\r\n\t\t\tsuccess(item.value);\r\n\t\t}\r\n\r\n\t\tinitialDisplayValue = [item.value];\r\n\t}\r\n\r\n\r\n\tfunction chooseItems(silent){\r\n\t\tif(!silent){\r\n\t\t\thideList();\r\n\t\t}\r\n\r\n\t\tvar output = [];\r\n\r\n\t\tcurrentItems.forEach((item) => {\r\n\t\t\toutput.push(item.value);\r\n\t\t});\r\n\r\n\t\tinitialDisplayValue = output;\r\n\r\n\t\tsuccess(output);\r\n\t}\r\n\r\n\tfunction fillInput(){\r\n\t\tvar output = [];\r\n\r\n\t\tcurrentItems.forEach((item) => {\r\n\t\t\toutput.push(item.label);\r\n\t\t});\r\n\r\n\t\tinput.value = output.join(\", \");\r\n\r\n\t\tif(self.currentCell === false){\r\n\t\t\tchooseItems(true);\r\n\t\t}\r\n\t}\r\n\r\n\r\n\tfunction unsetItems() {\r\n\r\n\t\tvar len = currentItems.length;\r\n\r\n\t\tfor(let i = 0; i < len; i++){\r\n\t\t\tunsetItem(0);\r\n\t\t}\r\n\t}\r\n\r\n\tfunction cancelItem(){\r\n\t\thideList();\r\n\t\tcancel();\r\n\t}\r\n\r\n\tfunction showList(){\r\n\t\tcurrentItems = [];\r\n\r\n\t\tif(!listEl.parentNode){\r\n\t\t\tif(editorParams.values === true){\r\n\t\t\t\tparseItems(getUniqueColumnValues(), initialDisplayValue);\r\n\t\t\t}else if(typeof editorParams.values === \"string\"){\r\n\t\t\t\tparseItems(getUniqueColumnValues(editorParams.values), initialDisplayValue);\r\n\t\t\t}else{\r\n\t\t\t\tparseItems(editorParams.values || [], initialDisplayValue);\r\n\t\t\t}\r\n\r\n\r\n\t\t\tvar offset = Helpers.elOffset(cellEl);\r\n\r\n\t\t\tlistEl.style.minWidth = cellEl.offsetWidth + \"px\";\r\n\r\n\t\t\tlistEl.style.top = (offset.top + cellEl.offsetHeight) + \"px\";\r\n\t\t\tlistEl.style.left = offset.left + \"px\";\r\n\r\n\r\n\t\t\tlistEl.addEventListener(\"mousedown\", function(e){\r\n\t\t\t\tblurable = false;\r\n\r\n\t\t\t\tsetTimeout(function(){\r\n\t\t\t\t\tblurable = true;\r\n\t\t\t\t}, 10);\r\n\t\t\t});\r\n\r\n\t\t\tdocument.body.appendChild(listEl);\r\n\t\t}\r\n\t}\r\n\r\n\tfunction hideList(){\r\n\t\tif(listEl.parentNode){\r\n\t\t\tlistEl.parentNode.removeChild(listEl);\r\n\t\t}\r\n\r\n\t\tremoveScrollListener();\r\n\t}\r\n\r\n\tfunction removeScrollListener() {\r\n\t\tself.table.rowManager.element.removeEventListener(\"scroll\", cancelItem);\r\n\t}\r\n\r\n\tfunction scrollTovalue(char){\r\n\r\n\t\tclearTimeout(searchWordTimeout);\r\n\r\n\t\tvar character = String.fromCharCode(event.keyCode).toLowerCase();\r\n\t\tsearchWord += character.toLowerCase();\r\n\r\n\t\tvar match = dataItems.find((item) => {\r\n\t\t\treturn typeof item.label !== \"undefined\" && item.label.toLowerCase().startsWith(searchWord);\r\n\t\t});\r\n\r\n\t\tif(match){\r\n\t\t\tsetCurrentItem(match, !multiselect);\r\n\t\t}\r\n\r\n\t\tsearchWordTimeout = setTimeout(() => {\r\n\t\t\tsearchWord = \"\";\r\n\t\t}, 800)\r\n\t}\r\n\r\n\t//style input\r\n\tinput.setAttribute(\"type\", \"text\");\r\n\r\n\tinput.style.padding = \"4px\";\r\n\tinput.style.width = \"100%\";\r\n\tinput.style.boxSizing = \"border-box\";\r\n\tinput.style.cursor = \"default\";\r\n\tinput.readOnly = (this.currentCell != false);\r\n\r\n\tif(editorParams.elementAttributes && typeof editorParams.elementAttributes == \"object\"){\r\n\t\tfor (let key in editorParams.elementAttributes){\r\n\t\t\tif(key.charAt(0) == \"+\"){\r\n\t\t\t\tkey = key.slice(1);\r\n\t\t\t\tinput.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\r\n\t\t\t}else{\r\n\t\t\t\tinput.setAttribute(key, editorParams.elementAttributes[key]);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tinput.value = typeof initialValue !== \"undefined\" || initialValue === null ? initialValue : \"\";\r\n\r\n\t// if(editorParams.values === true){\r\n\t// \tparseItems(getUniqueColumnValues(), initialValue);\r\n\t// }else if(typeof editorParams.values === \"string\"){\r\n\t// \tparseItems(getUniqueColumnValues(editorParams.values), initialValue);\r\n\t// }else{\r\n\t// \tparseItems(editorParams.values || [], initialValue);\r\n\t// }\r\n\r\n\tinput.addEventListener(\"search\", function(e){\r\n\t\tif(!input.value){\r\n\t\t\tunsetItems();\r\n\t\t\tchooseItems();\r\n\t\t}\r\n\t});\r\n\r\n\t//allow key based navigation\r\n\tinput.addEventListener(\"keydown\", function(e){\r\n\t\tvar index;\r\n\r\n\t\tswitch(e.keyCode){\r\n\t\t\tcase 38: //up arrow\r\n\t\t\tindex = dataItems.indexOf(currentItem);\r\n\r\n\t\t\tif(vertNav == \"editor\" || (vertNav == \"hybrid\" && index)){\r\n\t\t\t\te.stopImmediatePropagation();\r\n\t\t\t\te.stopPropagation();\r\n\t\t\t\te.preventDefault();\r\n\r\n\t\t\t\tif(index > 0){\r\n\t\t\t\t\tsetCurrentItem(dataItems[index - 1], !multiselect);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 40: //down arrow\r\n\t\t\tindex = dataItems.indexOf(currentItem);\r\n\r\n\t\t\tif(vertNav == \"editor\" || (vertNav == \"hybrid\" && index < dataItems.length - 1)){\r\n\t\t\t\te.stopImmediatePropagation();\r\n\t\t\t\te.stopPropagation();\r\n\t\t\t\te.preventDefault();\r\n\r\n\t\t\t\tif(index < dataItems.length - 1){\r\n\t\t\t\t\tif(index == -1){\r\n\t\t\t\t\t\tsetCurrentItem(dataItems[0], !multiselect);\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tsetCurrentItem(dataItems[index + 1], !multiselect);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 37: //left arrow\r\n\t\t\tcase 39: //right arrow\r\n\t\t\te.stopImmediatePropagation();\r\n\t\t\te.stopPropagation();\r\n\t\t\te.preventDefault();\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 13: //enter\r\n\t\t\t// chooseItem();\r\n\r\n\t\t\tif(multiselect){\r\n\t\t\t\ttoggleItem();\r\n\t\t\t}else{\r\n\t\t\t\tchooseItem();\r\n\t\t\t}\r\n\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 27: //escape\r\n\t\t\tcancelItem();\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 9: //tab\r\n\t\t\tbreak;\r\n\r\n\t\t\tdefault:\r\n\t\t\tif(self.currentCell === false){\r\n\t\t\t\te.preventDefault();\r\n\t\t\t}\r\n\r\n\t\t\tif(e.keyCode >= 38 && e.keyCode <= 90){\r\n\t\t\t\tscrollTovalue(e.keyCode);\r\n\t\t\t}\r\n\t\t}\r\n\t});\r\n\r\n\tinput.addEventListener(\"blur\", function(e){\r\n\t\tif(blurable){\r\n\t\t\tif(multiselect){\r\n\t\t\t\tchooseItems();\r\n\t\t\t}else{\r\n\t\t\t\tcancelItem();\r\n\t\t\t}\r\n\t\t}\r\n\t});\r\n\r\n\tinput.addEventListener(\"focus\", function(e){\r\n\t\tif(!blockListShow){\r\n\t\t\tshowList();\r\n\t\t}\r\n\t});\r\n\r\n\t//style list element\r\n\tlistEl = document.createElement(\"div\");\r\n\tlistEl.classList.add(\"tabulator-edit-select-list\");\r\n\r\n\tonRendered(function(){\r\n\t\tinput.style.height = \"100%\";\r\n\t\tinput.focus({preventScroll: true});\r\n\t});\r\n\r\n\tsetTimeout(() => {\r\n\t\tthis.table.rowManager.element.addEventListener(\"scroll\", cancelItem);\r\n\t}, 10);\r\n\r\n\treturn input;\r\n};","import Helpers from '../../../../core/Helpers.js';\r\n\r\n//autocomplete\r\nexport default function(cell, onRendered, success, cancel, editorParams){\r\n\tvar self = this,\r\n\tcellEl = cell.getElement(),\r\n\tinitialValue = cell.getValue(),\r\n\tvertNav = editorParams.verticalNavigation || \"editor\",\r\n\tinitialDisplayValue = typeof initialValue !== \"undefined\" || initialValue === null ? initialValue : (typeof editorParams.defaultValue !== \"undefined\" ? editorParams.defaultValue : \"\"),\r\n\tinput = document.createElement(\"input\"),\r\n\tlistEl = document.createElement(\"div\"),\r\n\tallItems = [],\r\n\tdisplayItems = [],\r\n\tvalues = [],\r\n\tcurrentItem = false,\r\n\tblurable = true,\r\n\tuniqueColumnValues = false;\r\n\r\n\t//style input\r\n\tinput.setAttribute(\"type\", \"search\");\r\n\r\n\tinput.style.padding = \"4px\";\r\n\tinput.style.width = \"100%\";\r\n\tinput.style.boxSizing = \"border-box\";\r\n\r\n\tif(editorParams.elementAttributes && typeof editorParams.elementAttributes == \"object\"){\r\n\t\tfor (let key in editorParams.elementAttributes){\r\n\t\t\tif(key.charAt(0) == \"+\"){\r\n\t\t\t\tkey = key.slice(1);\r\n\t\t\t\tinput.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\r\n\t\t\t}else{\r\n\t\t\t\tinput.setAttribute(key, editorParams.elementAttributes[key]);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//style list element\r\n\tlistEl.classList.add(\"tabulator-edit-select-list\");\r\n\r\n\tlistEl.addEventListener(\"mousedown\", function(e){\r\n\t\tblurable = false;\r\n\r\n\t\tsetTimeout(function(){\r\n\t\t\tblurable = true;\r\n\t\t}, 10);\r\n\t});\r\n\r\n\r\n\tfunction genUniqueColumnValues(){\r\n\t\tif(editorParams.values === true){\r\n\t\t\tuniqueColumnValues = getUniqueColumnValues();\r\n\t\t}else if(typeof editorParams.values === \"string\"){\r\n\t\t\tuniqueColumnValues = getUniqueColumnValues(editorParams.values);\r\n\t\t}\r\n\t}\r\n\r\n\tfunction getUniqueColumnValues(field){\r\n\t\tvar output = {},\r\n\t\tdata = self.table.getData(),\r\n\t\tcolumn;\r\n\r\n\t\tif(field){\r\n\t\t\tcolumn = self.table.columnManager.getColumnByField(field);\r\n\t\t}else{\r\n\t\t\tcolumn = cell.getColumn()._getSelf();\r\n\t\t}\r\n\r\n\t\tif(column){\r\n\t\t\tdata.forEach(function(row){\r\n\t\t\t\tvar val = column.getFieldValue(row);\r\n\r\n\t\t\t\tif(val !== null && typeof val !== \"undefined\" && val !== \"\"){\r\n\t\t\t\t\toutput[val] = true;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tif(editorParams.sortValuesList){\r\n\t\t\t\tif(editorParams.sortValuesList == \"asc\"){\r\n\t\t\t\t\toutput = Object.keys(output).sort();\r\n\t\t\t\t}else{\r\n\t\t\t\t\toutput = Object.keys(output).sort().reverse();\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\toutput = Object.keys(output);\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"unable to find matching column to create autocomplete lookup list:\", field);\r\n\t\t}\r\n\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tfunction filterList(term, intialLoad){\r\n\t\tvar matches = [],\r\n\t\tvalues, items, searchEl;\r\n\r\n\t\t//lookup base values list\r\n\t\tif(uniqueColumnValues){\r\n\t\t\tvalues = uniqueColumnValues;\r\n\t\t}else{\r\n\t\t\tvalues = editorParams.values || [];\r\n\t\t}\r\n\r\n\t\tif(editorParams.searchFunc){\r\n\t\t\tmatches = editorParams.searchFunc(term, values);\r\n\r\n\t\t\tif(matches instanceof Promise){\r\n\r\n\t\t\t\taddNotice(typeof editorParams.searchingPlaceholder !== \"undefined\" ? editorParams.searchingPlaceholder : \"Searching...\");\r\n\r\n\t\t\t\tmatches.then((result) => {\r\n\t\t\t\t\tfillListIfNotEmpty(parseItems(result), intialLoad);\r\n\t\t\t\t}).catch((err) => {\r\n\t\t\t\t\tconsole.err(\"error in autocomplete search promise:\", err);\r\n\t\t\t\t});\r\n\r\n\t\t\t}else{\r\n\t\t\t\tfillListIfNotEmpty(parseItems(matches), intialLoad);\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\titems = parseItems(values);\r\n\r\n\t\t\tif(term === \"\"){\r\n\t\t\t\tif(editorParams.showListOnEmpty){\r\n\t\t\t\t\tmatches = items;\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\titems.forEach(function(item){\r\n\t\t\t\t\tif(item.value !== null || typeof item.value !== \"undefined\"){\r\n\t\t\t\t\t\tif(String(item.value).toLowerCase().indexOf(String(term).toLowerCase()) > -1 || String(item.title).toLowerCase().indexOf(String(term).toLowerCase()) > -1){\r\n\t\t\t\t\t\t\tmatches.push(item);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\tfillListIfNotEmpty(matches, intialLoad);\r\n\t\t}\r\n\t}\r\n\r\n\tfunction addNotice(notice){\r\n\t\tvar searchEl = document.createElement(\"div\");\r\n\r\n\t\tclearList();\r\n\r\n\t\tif(notice !== false){\r\n\t\t\tsearchEl.classList.add(\"tabulator-edit-select-list-notice\");\r\n\t\t\tsearchEl.tabIndex = 0;\r\n\r\n\t\t\tif(notice instanceof Node){\r\n\t\t\t\tsearchEl.appendChild(notice);\r\n\t\t\t}else{\r\n\t\t\t\tsearchEl.innerHTML = notice;\r\n\t\t\t}\r\n\r\n\t\t\tlistEl.appendChild(searchEl);\r\n\t\t}\r\n\t}\r\n\r\n\tfunction parseItems(inputValues){\r\n\t\tvar itemList = [];\r\n\r\n\t\tif(Array.isArray(inputValues)){\r\n\t\t\tinputValues.forEach(function(value){\r\n\r\n\t\t\t\tvar item = {};\r\n\r\n\t\t\t\tif(typeof value === \"object\"){\r\n\t\t\t\t\titem.title = editorParams.listItemFormatter ? editorParams.listItemFormatter(value.value, value.label) : value.label;\r\n\t\t\t\t\titem.value = value.value;\r\n\t\t\t\t}else{\r\n\t\t\t\t\titem.title = editorParams.listItemFormatter ? editorParams.listItemFormatter(value, value) : value;\r\n\t\t\t\t\titem.value = value;\r\n\t\t\t\t}\r\n\r\n\t\t\t\titemList.push(item);\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tfor(var key in inputValues){\r\n\t\t\t\tvar item = {\r\n\t\t\t\t\ttitle:editorParams.listItemFormatter ? editorParams.listItemFormatter(key, inputValues[key]) : inputValues[key],\r\n\t\t\t\t\tvalue:key,\r\n\t\t\t\t};\r\n\r\n\t\t\t\titemList.push(item);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn itemList;\r\n\t}\r\n\r\n\tfunction clearList(){\r\n\t\twhile(listEl.firstChild) listEl.removeChild(listEl.firstChild);\r\n\t}\r\n\r\n\tfunction fillListIfNotEmpty(items, intialLoad){\r\n\t\tif(items.length){\r\n\t\t\tfillList(items, intialLoad);\r\n\t\t}else{\r\n\t\t\tif(editorParams.emptyPlaceholder){\r\n\t\t\t\taddNotice(editorParams.emptyPlaceholder);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tfunction fillList(items, intialLoad){\r\n\t\tvar current = false;\r\n\r\n\t\tclearList();\r\n\r\n\t\tdisplayItems = items;\r\n\r\n\t\tdisplayItems.forEach(function(item){\r\n\t\t\tvar el = item.element;\r\n\r\n\t\t\tif(!el){\r\n\t\t\t\tel = document.createElement(\"div\");\r\n\t\t\t\tel.classList.add(\"tabulator-edit-select-list-item\");\r\n\t\t\t\tel.tabIndex = 0;\r\n\t\t\t\tel.innerHTML = item.title;\r\n\r\n\t\t\t\tel.addEventListener(\"click\", function(e){\r\n\t\t\t\t\tsetCurrentItem(item);\r\n\t\t\t\t\tchooseItem();\r\n\t\t\t\t});\r\n\r\n\t\t\t\tel.addEventListener(\"mousedown\", function(e){\r\n\t\t\t\t\tblurable = false;\r\n\r\n\t\t\t\t\tsetTimeout(function(){\r\n\t\t\t\t\t\tblurable = true;\r\n\t\t\t\t\t}, 10);\r\n\t\t\t\t});\r\n\r\n\t\t\t\titem.element = el;\r\n\r\n\t\t\t\tif(intialLoad && item.value == initialValue){\r\n\t\t\t\t\tinput.value = item.title;\r\n\t\t\t\t\titem.element.classList.add(\"active\");\r\n\t\t\t\t\tcurrent = true;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(item === currentItem){\r\n\t\t\t\t\titem.element.classList.add(\"active\");\r\n\t\t\t\t\tcurrent = true;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tlistEl.appendChild(el);\r\n\t\t});\r\n\r\n\t\tif(!current){\r\n\t\t\tsetCurrentItem(false);\r\n\t\t}\r\n\t}\r\n\r\n\tfunction chooseItem(){\r\n\t\thideList();\r\n\r\n\t\tif(currentItem){\r\n\t\t\tif(initialValue !== currentItem.value){\r\n\t\t\t\tinitialValue = currentItem.value;\r\n\t\t\t\tinput.value = currentItem.title;\r\n\t\t\t\tsuccess(currentItem.value);\r\n\t\t\t}else{\r\n\t\t\t\tcancel();\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tif(editorParams.freetext){\r\n\t\t\t\tinitialValue = input.value;\r\n\t\t\t\tsuccess(input.value);\r\n\t\t\t}else{\r\n\t\t\t\tif(editorParams.allowEmpty && input.value === \"\"){\r\n\t\t\t\t\tinitialValue = input.value;\r\n\t\t\t\t\tsuccess(input.value);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tcancel();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tfunction showList(){\r\n\t\tif(!listEl.parentNode){\r\n\r\n\t\t\tconsole.log(\"show\", initialDisplayValue)\r\n\t\t\twhile(listEl.firstChild) listEl.removeChild(listEl.firstChild);\r\n\r\n\t\t\tvar offset = Helpers.elOffset(cellEl);\r\n\r\n\t\t\tlistEl.style.minWidth = cellEl.offsetWidth + \"px\";\r\n\r\n\t\t\tlistEl.style.top = (offset.top + cellEl.offsetHeight) + \"px\";\r\n\t\t\tlistEl.style.left = offset.left + \"px\";\r\n\t\t\tdocument.body.appendChild(listEl);\r\n\t\t}\r\n\t}\r\n\r\n\tfunction setCurrentItem(item, showInputValue){\r\n\t\tif(currentItem && currentItem.element){\r\n\t\t\tcurrentItem.element.classList.remove(\"active\");\r\n\t\t}\r\n\r\n\t\tcurrentItem = item;\r\n\r\n\t\tif(item && item.element){\r\n\t\t\titem.element.classList.add(\"active\");\r\n\t\t}\r\n\r\n\t\tif(item && item.element && item.element.scrollIntoView){\r\n\t\t\titem.element.scrollIntoView({behavior: 'smooth', block: 'nearest', inline: 'start'});\r\n\t\t}\r\n\t}\r\n\r\n\tfunction hideList(){\r\n\t\tif(listEl.parentNode){\r\n\t\t\tlistEl.parentNode.removeChild(listEl);\r\n\t\t}\r\n\r\n\t\tremoveScrollListener();\r\n\t}\r\n\r\n\r\n\tfunction cancelItem(){\r\n\t\thideList();\r\n\t\tcancel();\r\n\t}\r\n\r\n\tfunction removeScrollListener() {\r\n\t\tself.table.rowManager.element.removeEventListener(\"scroll\", cancelItem);\r\n\t}\r\n\r\n\t//allow key based navigation\r\n\tinput.addEventListener(\"keydown\", function(e){\r\n\t\tvar index;\r\n\r\n\t\tswitch(e.keyCode){\r\n\t\t\tcase 38: //up arrow\r\n\t\t\tindex = displayItems.indexOf(currentItem);\r\n\r\n\t\t\tif(vertNav == \"editor\" || (vertNav == \"hybrid\" && index)){\r\n\t\t\t\te.stopImmediatePropagation();\r\n\t\t\t\te.stopPropagation();\r\n\t\t\t\te.preventDefault();\r\n\r\n\t\t\t\tif(index > 0){\r\n\t\t\t\t\tsetCurrentItem(displayItems[index - 1]);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tsetCurrentItem(false);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 40: //down arrow\r\n\r\n\t\t\tindex = displayItems.indexOf(currentItem);\r\n\r\n\t\t\tif(vertNav == \"editor\" || (vertNav == \"hybrid\" && index < displayItems.length - 1)){\r\n\r\n\t\t\t\te.stopImmediatePropagation();\r\n\t\t\t\te.stopPropagation();\r\n\t\t\t\te.preventDefault();\r\n\r\n\t\t\t\tif(index < displayItems.length - 1){\r\n\t\t\t\t\tif(index == -1){\r\n\t\t\t\t\t\tsetCurrentItem(displayItems[0]);\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tsetCurrentItem(displayItems[index + 1]);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\r\n\r\n\t\t\tcase 37: //left arrow\r\n\t\t\tcase 39: //right arrow\r\n\t\t\te.stopImmediatePropagation();\r\n\t\t\te.stopPropagation();\r\n\t\t\t// e.preventDefault();\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 13: //enter\r\n\t\t\tchooseItem();\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 27: //escape\r\n\t\t\tcancelItem();\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 36: //home\r\n\t\t\tcase 35: //end\r\n\t\t\t//prevent table navigation while using input element\r\n\t\t\te.stopImmediatePropagation();\r\n\t\t\tbreak;\r\n\t\t}\r\n\t});\r\n\r\n\tinput.addEventListener(\"keyup\", function(e){\r\n\r\n\t\tswitch(e.keyCode){\r\n\t\t\tcase 38: //up arrow\r\n\t\t\tcase 37: //left arrow\r\n\t\t\tcase 39: //up arrow\r\n\t\t\tcase 40: //right arrow\r\n\t\t\tcase 13: //enter\r\n\t\t\tcase 27: //escape\r\n\t\t\tbreak;\r\n\r\n\t\t\tdefault:\r\n\t\t\tfilterList(input.value);\r\n\t\t}\r\n\r\n\t});\r\n\r\n\tinput.addEventListener(\"search\", function(e){\r\n\t\tfilterList(input.value);\r\n\t});\r\n\r\n\tinput.addEventListener(\"blur\", function(e){\r\n\t\tif(blurable){\r\n\t\t\tchooseItem();\r\n\t\t}\r\n\t});\r\n\r\n\tinput.addEventListener(\"focus\", function(e){\r\n\t\tvar value = initialDisplayValue;\r\n\t\tgenUniqueColumnValues();\r\n\t\tshowList();\r\n\t\tinput.value = value;\r\n\t\tfilterList(value, true);\r\n\t});\r\n\r\n\r\n\tonRendered(function(){\r\n\t\tinput.style.height = \"100%\";\r\n\t\tinput.focus({preventScroll: true});\r\n\t});\r\n\r\n\tif(editorParams.mask){\r\n\t\tthis.table.modules.edit.maskInput(input, editorParams);\r\n\t}\r\n\r\n\tsetTimeout(() => {\r\n\t\tthis.table.rowManager.element.addEventListener(\"scroll\", cancelItem);\r\n\t}, 10);\r\n\r\n\tgenUniqueColumnValues();\r\n\tinput.value = initialDisplayValue;\r\n\tfilterList(initialDisplayValue, true);\r\n\r\n\treturn input;\r\n};","//star rating\r\nexport default function(cell, onRendered, success, cancel, editorParams){\r\n\tvar self = this,\r\n\telement = cell.getElement(),\r\n\tvalue = cell.getValue(),\r\n\tmaxStars = element.getElementsByTagName(\"svg\").length || 5,\r\n\tsize = element.getElementsByTagName(\"svg\")[0] ? element.getElementsByTagName(\"svg\")[0].getAttribute(\"width\") : 14,\r\n\tstars = [],\r\n\tstarsHolder = document.createElement(\"div\"),\r\n\tstar = document.createElementNS('http://www.w3.org/2000/svg', \"svg\");\r\n\r\n\r\n\t//change star type\r\n\tfunction starChange(val){\r\n\t\tstars.forEach(function(star, i){\r\n\t\t\tif(i < val){\r\n\t\t\t\tif(self.table.browser == \"ie\"){\r\n\t\t\t\t\tstar.setAttribute(\"class\", \"tabulator-star-active\");\r\n\t\t\t\t}else{\r\n\t\t\t\t\tstar.classList.replace(\"tabulator-star-inactive\", \"tabulator-star-active\");\r\n\t\t\t\t}\r\n\r\n\t\t\t\tstar.innerHTML = '';\r\n\t\t\t}else{\r\n\t\t\t\tif(self.table.browser == \"ie\"){\r\n\t\t\t\t\tstar.setAttribute(\"class\", \"tabulator-star-inactive\");\r\n\t\t\t\t}else{\r\n\t\t\t\t\tstar.classList.replace(\"tabulator-star-active\", \"tabulator-star-inactive\");\r\n\t\t\t\t}\r\n\r\n\t\t\t\tstar.innerHTML = '';\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t//build stars\r\n\tfunction buildStar(i){\r\n\r\n\t\tvar starHolder = document.createElement(\"span\");\r\n\t\tvar nextStar = star.cloneNode(true);\r\n\r\n\t\tstars.push(nextStar);\r\n\r\n\t\tstarHolder.addEventListener(\"mouseenter\", function(e){\r\n\t\t\te.stopPropagation();\r\n\t\t\te.stopImmediatePropagation();\r\n\t\t\tstarChange(i);\r\n\t\t});\r\n\r\n\t\tstarHolder.addEventListener(\"mousemove\", function(e){\r\n\t\t\te.stopPropagation();\r\n\t\t\te.stopImmediatePropagation();\r\n\t\t});\r\n\r\n\t\tstarHolder.addEventListener(\"click\", function(e){\r\n\t\t\te.stopPropagation();\r\n\t\t\te.stopImmediatePropagation();\r\n\t\t\tsuccess(i);\r\n\t\t\telement.blur();\r\n\t\t});\r\n\r\n\t\tstarHolder.appendChild(nextStar);\r\n\t\tstarsHolder.appendChild(starHolder);\r\n\r\n\t}\r\n\r\n\t//handle keyboard navigation value change\r\n\tfunction changeValue(val){\r\n\t\tvalue = val;\r\n\t\tstarChange(val);\r\n\t}\r\n\r\n\t//style cell\r\n\telement.style.whiteSpace = \"nowrap\";\r\n\telement.style.overflow = \"hidden\";\r\n\telement.style.textOverflow = \"ellipsis\";\r\n\r\n\t//style holding element\r\n\tstarsHolder.style.verticalAlign = \"middle\";\r\n\tstarsHolder.style.display = \"inline-block\";\r\n\tstarsHolder.style.padding = \"4px\";\r\n\r\n\t//style star\r\n\tstar.setAttribute(\"width\", size);\r\n\tstar.setAttribute(\"height\", size);\r\n\tstar.setAttribute(\"viewBox\", \"0 0 512 512\");\r\n\tstar.setAttribute(\"xml:space\", \"preserve\");\r\n\tstar.style.padding = \"0 1px\";\r\n\r\n\tif(editorParams.elementAttributes && typeof editorParams.elementAttributes == \"object\"){\r\n\t\tfor (let key in editorParams.elementAttributes){\r\n\t\t\tif(key.charAt(0) == \"+\"){\r\n\t\t\t\tkey = key.slice(1);\r\n\t\t\t\tstarsHolder.setAttribute(key, starsHolder.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\r\n\t\t\t}else{\r\n\t\t\t\tstarsHolder.setAttribute(key, editorParams.elementAttributes[key]);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//create correct number of stars\r\n\tfor(var i=1;i<= maxStars;i++){\r\n\t\tbuildStar(i);\r\n\t}\r\n\r\n\t//ensure value does not exceed number of stars\r\n\tvalue = Math.min(parseInt(value), maxStars);\r\n\r\n\t// set initial styling of stars\r\n\tstarChange(value);\r\n\r\n\tstarsHolder.addEventListener(\"mousemove\", function(e){\r\n\t\tstarChange(0);\r\n\t});\r\n\r\n\tstarsHolder.addEventListener(\"click\", function(e){\r\n\t\tsuccess(0);\r\n\t});\r\n\r\n\telement.addEventListener(\"blur\", function(e){\r\n\t\tcancel();\r\n\t});\r\n\r\n\t//allow key based navigation\r\n\telement.addEventListener(\"keydown\", function(e){\r\n\t\tswitch(e.keyCode){\r\n\t\t\tcase 39: //right arrow\r\n\t\t\tchangeValue(value + 1);\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 37: //left arrow\r\n\t\t\tchangeValue(value - 1);\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 13: //enter\r\n\t\t\tsuccess(value);\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 27: //escape\r\n\t\t\tcancel();\r\n\t\t\tbreak;\r\n\t\t}\r\n\t});\r\n\r\n\treturn starsHolder;\r\n};","//draggable progress bar\r\nexport default function(cell, onRendered, success, cancel, editorParams){\r\n\tvar element = cell.getElement(),\r\n\tmax = typeof editorParams.max === \"undefined\" ? ( element.getElementsByTagName(\"div\")[0].getAttribute(\"max\") || 100) : editorParams.max,\r\n\tmin = typeof editorParams.min === \"undefined\" ? ( element.getElementsByTagName(\"div\")[0].getAttribute(\"min\") || 0) : editorParams.min,\r\n\tpercent = (max - min) / 100,\r\n\tvalue = cell.getValue() || 0,\r\n\thandle = document.createElement(\"div\"),\r\n\tbar = document.createElement(\"div\"),\r\n\tmouseDrag, mouseDragWidth;\r\n\r\n\t//set new value\r\n\tfunction updateValue(){\r\n\t\tvar style = window.getComputedStyle(element, null);\r\n\r\n\t\tvar calcVal = (percent * Math.round(bar.offsetWidth / ((element.clientWidth - parseInt(style.getPropertyValue(\"padding-left\")) - parseInt(style.getPropertyValue(\"padding-right\")))/100))) + min;\r\n\t\tsuccess(calcVal);\r\n\t\telement.setAttribute(\"aria-valuenow\", calcVal);\r\n\t\telement.setAttribute(\"aria-label\", value);\r\n\t}\r\n\r\n\t//style handle\r\n\thandle.style.position = \"absolute\";\r\n\thandle.style.right = \"0\";\r\n\thandle.style.top = \"0\";\r\n\thandle.style.bottom = \"0\";\r\n\thandle.style.width = \"5px\";\r\n\thandle.classList.add(\"tabulator-progress-handle\");\r\n\r\n\t//style bar\r\n\tbar.style.display = \"inline-block\";\r\n\tbar.style.position = \"relative\";\r\n\t// bar.style.top = \"8px\";\r\n\t// bar.style.bottom = \"8px\";\r\n\t// bar.style.left = \"4px\";\r\n\t// bar.style.marginRight = \"4px\";\r\n\tbar.style.height = \"100%\";\r\n\tbar.style.backgroundColor = \"#488CE9\";\r\n\tbar.style.maxWidth = \"100%\";\r\n\tbar.style.minWidth = \"0%\";\r\n\r\n\tif(editorParams.elementAttributes && typeof editorParams.elementAttributes == \"object\"){\r\n\t\tfor (let key in editorParams.elementAttributes){\r\n\t\t\tif(key.charAt(0) == \"+\"){\r\n\t\t\t\tkey = key.slice(1);\r\n\t\t\t\tbar.setAttribute(key, bar.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\r\n\t\t\t}else{\r\n\t\t\t\tbar.setAttribute(key, editorParams.elementAttributes[key]);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//style cell\r\n\telement.style.padding = \"4px 4px\";\r\n\r\n\t//make sure value is in range\r\n\tvalue = Math.min(parseFloat(value), max);\r\n\tvalue = Math.max(parseFloat(value), min);\r\n\r\n\t//workout percentage\r\n\tvalue = Math.round((value - min) / percent);\r\n\t// bar.style.right = value + \"%\";\r\n\tbar.style.width = value + \"%\";\r\n\r\n\telement.setAttribute(\"aria-valuemin\", min);\r\n\telement.setAttribute(\"aria-valuemax\", max);\r\n\r\n\tbar.appendChild(handle);\r\n\r\n\thandle.addEventListener(\"mousedown\", function(e){\r\n\t\tmouseDrag = e.screenX;\r\n\t\tmouseDragWidth = bar.offsetWidth;\r\n\t});\r\n\r\n\thandle.addEventListener(\"mouseover\", function(){\r\n\t\thandle.style.cursor = \"ew-resize\";\r\n\t});\r\n\r\n\telement.addEventListener(\"mousemove\", function(e){\r\n\t\tif(mouseDrag){\r\n\t\t\tbar.style.width = (mouseDragWidth + e.screenX - mouseDrag) + \"px\";\r\n\t\t}\r\n\t});\r\n\r\n\telement.addEventListener(\"mouseup\", function(e){\r\n\t\tif(mouseDrag){\r\n\t\t\te.stopPropagation();\r\n\t\t\te.stopImmediatePropagation();\r\n\r\n\t\t\tmouseDrag = false;\r\n\t\t\tmouseDragWidth = false;\r\n\r\n\t\t\tupdateValue();\r\n\t\t}\r\n\t});\r\n\r\n\t//allow key based navigation\r\n\telement.addEventListener(\"keydown\", function(e){\r\n\t\tswitch(e.keyCode){\r\n\t\t\tcase 39: //right arrow\r\n\t\t\te.preventDefault();\r\n\t\t\tbar.style.width = (bar.clientWidth + element.clientWidth/100) + \"px\";\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 37: //left arrow\r\n\t\t\te.preventDefault();\r\n\t\t\tbar.style.width = (bar.clientWidth - element.clientWidth/100) + \"px\";\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 9: //tab\r\n\t\t\tcase 13: //enter\r\n\t\t\tupdateValue();\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 27: //escape\r\n\t\t\tcancel();\r\n\t\t\tbreak;\r\n\r\n\t\t}\r\n\t});\r\n\r\n\telement.addEventListener(\"blur\", function(){\r\n\t\tcancel();\r\n\t});\r\n\r\n\treturn bar;\r\n};","//checkbox\r\nexport default function(cell, onRendered, success, cancel, editorParams){\r\n\tvar value = cell.getValue(),\r\n\tinput = document.createElement(\"input\"),\r\n\ttristate = editorParams.tristate,\r\n\tindetermValue = typeof editorParams.indeterminateValue === \"undefined\" ? null : editorParams.indeterminateValue,\r\n\tindetermState = false;\r\n\r\n\tinput.setAttribute(\"type\", \"checkbox\");\r\n\tinput.style.marginTop = \"5px\";\r\n\tinput.style.boxSizing = \"border-box\";\r\n\r\n\tif(editorParams.elementAttributes && typeof editorParams.elementAttributes == \"object\"){\r\n\t\tfor (let key in editorParams.elementAttributes){\r\n\t\t\tif(key.charAt(0) == \"+\"){\r\n\t\t\t\tkey = key.slice(1);\r\n\t\t\t\tinput.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\r\n\t\t\t}else{\r\n\t\t\t\tinput.setAttribute(key, editorParams.elementAttributes[key]);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tinput.value = value;\r\n\r\n\tif(tristate && (typeof value === \"undefined\" || value === indetermValue || value === \"\")){\r\n\t\tindetermState = true;\r\n\t\tinput.indeterminate = true;\r\n\t}\r\n\r\n\tif(this.table.browser != \"firefox\"){ //prevent blur issue on mac firefox\r\n\t\tonRendered(function(){\r\n\t\t\tinput.focus({preventScroll: true});\r\n\t\t});\r\n\t}\r\n\r\n\tinput.checked = value === true || value === \"true\" || value === \"True\" || value === 1;\r\n\r\n\tonRendered(function(){\r\n\t\tinput.focus();\r\n\t});\r\n\r\n\tfunction setValue(blur){\r\n\t\tif(tristate){\r\n\t\t\tif(!blur){\r\n\t\t\t\tif(input.checked && !indetermState){\r\n\t\t\t\t\tinput.checked = false;\r\n\t\t\t\t\tinput.indeterminate = true;\r\n\t\t\t\t\tindetermState = true;\r\n\t\t\t\t\treturn indetermValue;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tindetermState = false;\r\n\t\t\t\t\treturn input.checked;\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tif(indetermState){\r\n\t\t\t\t\treturn indetermValue;\r\n\t\t\t\t}else{\r\n\t\t\t\t\treturn input.checked;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\treturn input.checked;\r\n\t\t}\r\n\t}\r\n\r\n\t//submit new value on blur\r\n\tinput.addEventListener(\"change\", function(e){\r\n\t\tsuccess(setValue());\r\n\t});\r\n\r\n\tinput.addEventListener(\"blur\", function(e){\r\n\t\tsuccess(setValue(true));\r\n\t});\r\n\r\n\t//submit new value on enter\r\n\tinput.addEventListener(\"keydown\", function(e){\r\n\t\tif(e.keyCode == 13){\r\n\t\t\tsuccess(setValue());\r\n\t\t}\r\n\t\tif(e.keyCode == 27){\r\n\t\t\tcancel();\r\n\t\t}\r\n\t});\r\n\r\n\treturn input;\r\n};","import Module from '../../core/Module.js';\r\n\r\nimport defaultEditors from './defaults/editors.js';\r\n\r\nclass Edit extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.currentCell = false; //hold currently editing cell\r\n\t\tthis.mouseClick = false; //hold mousedown state to prevent click binding being overriden by editor opening\r\n\t\tthis.recursionBlock = false; //prevent focus recursion\r\n\t\tthis.invalidEdit = false;\r\n\t\tthis.editedCells = [];\r\n\t}\r\n\r\n\t//initialize column editor\r\n\tinitializeColumn(column){\r\n\t\tvar self = this,\r\n\t\tconfig = {\r\n\t\t\teditor:false,\r\n\t\t\tblocked:false,\r\n\t\t\tcheck:column.definition.editable,\r\n\t\t\tparams:column.definition.editorParams || {}\r\n\t\t};\r\n\r\n\t\t//set column editor\r\n\t\tswitch(typeof column.definition.editor){\r\n\t\t\tcase \"string\":\r\n\t\t\t\tif(Edit.editors[column.definition.editor]){\r\n\t\t\t\t\tconfig.editor = Edit.editors[column.definition.editor];\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.warn(\"Editor Error - No such editor found: \", column.definition.editor);\r\n\t\t\t\t}\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"function\":\r\n\t\t\t\tconfig.editor = column.definition.editor;\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"boolean\":\r\n\t\t\t\tif(column.definition.editor === true){\r\n\t\t\t\t\tif(typeof column.definition.formatter !== \"function\"){\r\n\t\t\t\t\t\tif(Edit.editors[column.definition.formatter]){\r\n\t\t\t\t\t\t\tconfig.editor = Edit.editors[column.definition.formatter];\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\tconfig.editor = Edit.editors[\"input\"];\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tconsole.warn(\"Editor Error - Cannot auto lookup editor for a custom formatter: \", column.definition.formatter);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\tif(config.editor){\r\n\t\t\tcolumn.modules.edit = config;\r\n\t\t}\r\n\t}\r\n\r\n\tgetCurrentCell(){\r\n\t\treturn this.currentCell ? this.currentCell.getComponent() : false;\r\n\t}\r\n\r\n\tclearEditor(cancel){\r\n\t\tvar cell = this.currentCell,\r\n\t\tcellEl;\r\n\r\n\t\tthis.invalidEdit = false;\r\n\r\n\t\tif(cell){\r\n\t\t\tthis.currentCell = false;\r\n\r\n\t\t\tcellEl = cell.getElement();\r\n\r\n\t\t\tif(cancel){\r\n\t\t\t\tcell.validate();\r\n\t\t\t}else{\r\n\t\t\t\tcellEl.classList.remove(\"tabulator-validation-fail\");\r\n\t\t\t}\r\n\r\n\t\t\tcellEl.classList.remove(\"tabulator-editing\");\r\n\t\t\twhile(cellEl.firstChild) cellEl.removeChild(cellEl.firstChild);\r\n\r\n\t\t\tcell.row.getElement().classList.remove(\"tabulator-row-editing\");\r\n\t\t}\r\n\t}\r\n\r\n\tcancelEdit(){\r\n\t\tif(this.currentCell){\r\n\t\t\tvar cell = this.currentCell;\r\n\t\t\tvar component = this.currentCell.getComponent();\r\n\r\n\t\t\tthis.clearEditor(true);\r\n\t\t\tcell.setValueActual(cell.getValue());\r\n\t\t\tcell.cellRendered();\r\n\r\n\t\t\tif(cell.column.definition.editor == \"textarea\" || cell.column.definition.variableHeight){\r\n\t\t\t\tcell.row.normalizeHeight(true);\r\n\t\t\t}\r\n\r\n\t\t\tif(cell.column.cellEvents.cellEditCancelled){\r\n\t\t\t\tcell.column.cellEvents.cellEditCancelled.call(this.table, component);\r\n\t\t\t}\r\n\r\n\t\t\tthis.table.options.cellEditCancelled.call(this.table, component);\r\n\t\t}\r\n\t}\r\n\r\n\t//return a formatted value for a cell\r\n\tbindEditor(cell){\r\n\t\tvar self = this,\r\n\t\telement = cell.getElement(true);\r\n\r\n\t\telement.setAttribute(\"tabindex\", 0);\r\n\r\n\t\telement.addEventListener(\"click\", function(e){\r\n\t\t\tif(!element.classList.contains(\"tabulator-editing\")){\r\n\t\t\t\telement.focus({preventScroll: true});\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\telement.addEventListener(\"mousedown\", function(e){\r\n\t\t\tif (e.button === 2) {\r\n\t\t\t\te.preventDefault();\r\n\t\t\t}else{\r\n\t\t\t\tself.mouseClick = true;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\telement.addEventListener(\"focus\", function(e){\r\n\t\t\tif(!self.recursionBlock){\r\n\t\t\t\tself.edit(cell, e, false);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tfocusCellNoEvent(cell, block){\r\n\t\tthis.recursionBlock = true;\r\n\r\n\t\tif(!(block && this.table.browser === \"ie\")){\r\n\t\t\tcell.getElement().focus({preventScroll: true});\r\n\t\t}\r\n\r\n\t\tthis.recursionBlock = false;\r\n\t}\r\n\r\n\teditCell(cell, forceEdit){\r\n\t\tthis.focusCellNoEvent(cell);\r\n\t\tthis.edit(cell, false, forceEdit);\r\n\t}\r\n\r\n\tfocusScrollAdjust(cell){\r\n\t\tif(this.table.rowManager.getRenderMode() == \"virtual\"){\r\n\t\t\tvar topEdge = this.table.rowManager.element.scrollTop,\r\n\t\t\tbottomEdge = this.table.rowManager.element.clientHeight + this.table.rowManager.element.scrollTop,\r\n\t\t\trowEl = cell.row.getElement(),\r\n\t\t\toffset = rowEl.offsetTop;\r\n\r\n\t\t\tif(rowEl.offsetTop < topEdge){\r\n\t\t\t\tthis.table.rowManager.element.scrollTop -= (topEdge - rowEl.offsetTop);\r\n\t\t\t}else{\r\n\t\t\t\tif(rowEl.offsetTop + rowEl.offsetHeight > bottomEdge){\r\n\t\t\t\t\tthis.table.rowManager.element.scrollTop += (rowEl.offsetTop + rowEl.offsetHeight - bottomEdge);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tvar leftEdge = this.table.rowManager.element.scrollLeft,\r\n\t\t\trightEdge = this.table.rowManager.element.clientWidth + this.table.rowManager.element.scrollLeft,\r\n\t\t\tcellEl = cell.getElement(),\r\n\t\t\toffset = cellEl.offsetLeft;\r\n\r\n\t\t\tif(this.table.modExists(\"frozenColumns\")){\r\n\t\t\t\tleftEdge += parseInt(this.table.modules.frozenColumns.leftMargin);\r\n\t\t\t\trightEdge -= parseInt(this.table.modules.frozenColumns.rightMargin);\r\n\t\t\t}\r\n\r\n\t\t\tif(this.table.options.virtualDomHoz){\r\n\t\t\t\tleftEdge -= parseInt(this.table.vdomHoz.vDomPadLeft);\r\n\t\t\t\trightEdge -= parseInt(this.table.vdomHoz.vDomPadLeft);\r\n\t\t\t}\r\n\r\n\t\t\tif(cellEl.offsetLeft < leftEdge){\r\n\r\n\t\t\t\tthis.table.rowManager.element.scrollLeft -= (leftEdge - cellEl.offsetLeft);\r\n\t\t\t}else{\r\n\t\t\t\tif(cellEl.offsetLeft + cellEl.offsetWidth > rightEdge){\r\n\t\t\t\t\tthis.table.rowManager.element.scrollLeft += (cellEl.offsetLeft + cellEl.offsetWidth - rightEdge);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tedit(cell, e, forceEdit){\r\n\t\tvar self = this,\r\n\t\tallowEdit = true,\r\n\t\trendered = function(){},\r\n\t\telement = cell.getElement(),\r\n\t\tcellEditor, component, params;\r\n\r\n\t\t//prevent editing if another cell is refusing to leave focus (eg. validation fail)\r\n\t\tif(this.currentCell){\r\n\t\t\tif(!this.invalidEdit){\r\n\t\t\t\tthis.cancelEdit();\r\n\t\t\t}\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t//handle successfull value change\r\n\t\tfunction success(value){\r\n\t\t\tif(self.currentCell === cell){\r\n\t\t\t\tvar valid = true;\r\n\r\n\t\t\t\tif(cell.column.modules.validate && self.table.modExists(\"validate\") && self.table.options.validationMode != \"manual\"){\r\n\t\t\t\t\tvalid = self.table.modules.validate.validate(cell.column.modules.validate, cell, value);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(valid === true || self.table.options.validationMode === \"highlight\"){\r\n\t\t\t\t\tself.clearEditor();\r\n\r\n\r\n\t\t\t\t\tif(!cell.modules.edit){\r\n\t\t\t\t\t\tcell.modules.edit = {};\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tcell.modules.edit.edited = true;\r\n\r\n\t\t\t\t\tif(self.editedCells.indexOf(cell) == -1){\r\n\t\t\t\t\t\tself.editedCells.push(cell);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tcell.setValue(value, true);\r\n\r\n\t\t\t\t\tif(self.table.options.dataTree && self.table.modExists(\"dataTree\")){\r\n\t\t\t\t\t\tself.table.modules.dataTree.checkForRestyle(cell);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif(valid !== true){\r\n\t\t\t\t\t\telement.classList.add(\"tabulator-validation-fail\");\r\n\t\t\t\t\t\tself.table.options.validationFailed.call(self.table, cell.getComponent(), value, valid);\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tself.invalidEdit = true;\r\n\t\t\t\t\telement.classList.add(\"tabulator-validation-fail\");\r\n\t\t\t\t\tself.focusCellNoEvent(cell, true);\r\n\t\t\t\t\trendered();\r\n\t\t\t\t\tself.table.options.validationFailed.call(self.table, cell.getComponent(), value, valid);\r\n\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\t// console.warn(\"Edit Success Error - cannot call success on a cell that is no longer being edited\");\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//handle aborted edit\r\n\t\tfunction cancel(){\r\n\t\t\tif(self.currentCell === cell){\r\n\t\t\t\tself.cancelEdit();\r\n\r\n\t\t\t\tif(self.table.options.dataTree && self.table.modExists(\"dataTree\")){\r\n\t\t\t\t\tself.table.modules.dataTree.checkForRestyle(cell);\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\t// console.warn(\"Edit Success Error - cannot call cancel on a cell that is no longer being edited\");\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction onRendered(callback){\r\n\t\t\trendered = callback;\r\n\t\t}\r\n\r\n\t\tif(!cell.column.modules.edit.blocked){\r\n\t\t\tif(e){\r\n\t\t\t\te.stopPropagation();\r\n\t\t\t}\r\n\r\n\t\t\tswitch(typeof cell.column.modules.edit.check){\r\n\t\t\t\tcase \"function\":\r\n\t\t\t\tallowEdit = cell.column.modules.edit.check(cell.getComponent());\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"boolean\":\r\n\t\t\t\tallowEdit = cell.column.modules.edit.check;\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\r\n\t\t\tif(allowEdit || forceEdit){\r\n\r\n\t\t\t\tself.cancelEdit();\r\n\r\n\t\t\t\tself.currentCell = cell;\r\n\r\n\t\t\t\tthis.focusScrollAdjust(cell);\r\n\r\n\t\t\t\tcomponent = cell.getComponent();\r\n\r\n\t\t\t\tif(this.mouseClick){\r\n\t\t\t\t\tthis.mouseClick = false;\r\n\r\n\t\t\t\t\tif(cell.column.cellEvents.cellClick){\r\n\t\t\t\t\t\tcell.column.cellEvents.cellClick.call(this.table, e, component);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(cell.column.cellEvents.cellEditing){\r\n\t\t\t\t\tcell.column.cellEvents.cellEditing.call(this.table, component);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tself.table.options.cellEditing.call(this.table, component);\r\n\r\n\t\t\t\tparams = typeof cell.column.modules.edit.params === \"function\" ? cell.column.modules.edit.params(component) : cell.column.modules.edit.params;\r\n\r\n\t\t\t\tcellEditor = cell.column.modules.edit.editor.call(self, component, onRendered, success, cancel, params);\r\n\r\n\t\t\t\t//if editor returned, add to DOM, if false, abort edit\r\n\t\t\t\tif(cellEditor !== false){\r\n\r\n\t\t\t\t\tif(cellEditor instanceof Node){\r\n\t\t\t\t\t\telement.classList.add(\"tabulator-editing\");\r\n\t\t\t\t\t\tcell.row.getElement().classList.add(\"tabulator-row-editing\");\r\n\t\t\t\t\t\twhile(element.firstChild) element.removeChild(element.firstChild);\r\n\t\t\t\t\t\telement.appendChild(cellEditor);\r\n\r\n\t\t\t\t\t\t//trigger onRendered Callback\r\n\t\t\t\t\t\trendered();\r\n\r\n\t\t\t\t\t\t//prevent editing from triggering rowClick event\r\n\t\t\t\t\t\tvar children = element.children;\r\n\r\n\t\t\t\t\t\tfor (var i = 0; i < children.length; i++) {\r\n\t\t\t\t\t\t\tchildren[i].addEventListener(\"click\", function(e){\r\n\t\t\t\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tconsole.warn(\"Edit Error - Editor should return an instance of Node, the editor returned:\", cellEditor);\r\n\t\t\t\t\t\telement.blur();\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}else{\r\n\t\t\t\t\telement.blur();\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn true;\r\n\t\t\t}else{\r\n\t\t\t\tthis.mouseClick = false;\r\n\t\t\t\telement.blur();\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tthis.mouseClick = false;\r\n\t\t\telement.blur();\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\tmaskInput(el, options){\r\n\t\tvar mask = options.mask,\r\n\t\tmaskLetter = typeof options.maskLetterChar !== \"undefined\" ? options.maskLetterChar : \"A\",\r\n\t\tmaskNumber = typeof options.maskNumberChar !== \"undefined\" ? options.maskNumberChar : \"9\",\r\n\t\tmaskWildcard = typeof options.maskWildcardChar !== \"undefined\" ? options.maskWildcardChar : \"*\",\r\n\t\tsuccess = false;\r\n\r\n\t\tfunction fillSymbols(index){\r\n\t\t\tvar symbol = mask[index];\r\n\t\t\tif(typeof symbol !== \"undefined\" && symbol !== maskWildcard && symbol !== maskLetter && symbol !== maskNumber){\r\n\t\t\t\tel.value = el.value + \"\" + symbol;\r\n\t\t\t\tfillSymbols(index+1);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tel.addEventListener(\"keydown\", (e) => {\r\n\t\t\tvar index = el.value.length,\r\n\t\t\tchar = e.key;\r\n\r\n\t\t\tif(e.keyCode > 46){\r\n\t\t\t\tif(index >= mask.length){\r\n\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\tsuccess = false;\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tswitch(mask[index]){\r\n\t\t\t\t\t\tcase maskLetter:\r\n\t\t\t\t\t\tif(char.toUpperCase() == char.toLowerCase()){\r\n\t\t\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\t\t\tsuccess = false;\r\n\t\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\tcase maskNumber:\r\n\t\t\t\t\t\tif(isNaN(char)){\r\n\t\t\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\t\t\tsuccess = false;\r\n\t\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\tcase maskWildcard:\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\tdefault:\r\n\t\t\t\t\t\tif(char !== mask[index]){\r\n\t\t\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\t\t\tsuccess = false;\r\n\t\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tsuccess = true;\r\n\t\t\t}\r\n\r\n\t\t\treturn;\r\n\t\t});\r\n\r\n\t\tel.addEventListener(\"keyup\", (e) => {\r\n\t\t\tif(e.keyCode > 46){\r\n\t\t\t\tif(options.maskAutoFill){\r\n\t\t\t\t\tfillSymbols(el.value.length);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\r\n\t\tif(!el.placeholder){\r\n\t\t\tel.placeholder = mask;\r\n\t\t}\r\n\r\n\t\tif(options.maskAutoFill){\r\n\t\t\tfillSymbols(el.value.length);\r\n\t\t}\r\n\t}\r\n\r\n\tgetEditedCells(){\r\n\t\tvar output = [];\r\n\r\n\t\tthis.editedCells.forEach((cell) => {\r\n\t\t\toutput.push(cell.getComponent());\r\n\t\t});\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tclearEdited(cell){\r\n\t\tvar editIndex;\r\n\r\n\t\tif(cell.modules.edit && cell.modules.edit.edited){\r\n\t\t\tcell.modules.edit.edited = false;\r\n\r\n\t\t\tif(cell.modules.validate){\r\n\t\t\t\tcell.modules.validate.invalid = false;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\teditIndex = this.editedCells.indexOf(cell);\r\n\r\n\t\tif(editIndex > -1){\r\n\t\t\tthis.editedCells.splice(editIndex, 1);\r\n\t\t}\r\n\t}\r\n}\r\n\r\nEdit.moduleName = \"edit\";\r\n\r\n//load defaults\r\nEdit.editors = defaultEditors;\r\n\r\n\r\nexport default Edit;","class ExportRow{\r\n\tconstructor(type, columns, component, indent){\r\n\t\tthis.type = type;\r\n\t\tthis.columns = columns;\r\n\t\tthis.component = component || false;\r\n\t\tthis.indent = indent || 0;\r\n\t}\r\n}\r\n\r\nexport default ExportRow;","class ExportColumn{\r\n\tconstructor(value, component, width, height, depth){\r\n\t\tthis.value = value;\r\n\t\tthis.component = component || false;\r\n\t\tthis.width = width;\r\n\t\tthis.height = height;\r\n\t\tthis.depth = depth;\r\n\t}\r\n}\r\n\r\nexport default ExportColumn;","import Module from '../../core/Module.js';\r\n\r\nimport ExportRow from './ExportRow.js';\r\nimport ExportColumn from './ExportColumn.js';\r\n\r\nclass Export extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.config = {};\r\n\t\tthis.cloneTableStyle = true;\r\n\t\tthis.colVisProp = \"\";\r\n\t}\r\n\r\n\tgenerateExportList(config, style, range, colVisProp){\r\n\t\tthis.cloneTableStyle = style;\r\n\t\tthis.config = config || {};\r\n\t\tthis.colVisProp = colVisProp;\r\n\r\n\t\tvar headers = this.config.columnHeaders !== false ? this.headersToExportRows(this.generateColumnGroupHeaders()) : [];\r\n\t\tvar body = this.bodyToExportRows(this.rowLookup(range));\r\n\r\n\t\treturn headers.concat(body);\r\n\t}\r\n\r\n\tgenereateTable(config, style, range, colVisProp){\r\n\t\tvar list = this.generateExportList(config, style, range, colVisProp);\r\n\r\n\t\treturn this.genereateTableElement(list);\r\n\t}\r\n\r\n\trowLookup(range){\r\n\t\tvar rows = [];\r\n\r\n\t\tif(typeof range == \"function\"){\r\n\t\t\trange.call(this.table).forEach((row) =>{\r\n\t\t\t\trow = this.table.rowManager.findRow(row);\r\n\r\n\t\t\t\tif(row){\r\n\t\t\t\t\trows.push(row);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tswitch(range){\r\n\t\t\t\tcase true:\r\n\t\t\t\tcase \"visible\":\r\n\t\t\t\trows = this.table.rowManager.getVisibleRows(true);\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"all\":\r\n\t\t\t\trows = this.table.rowManager.rows;\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"selected\":\r\n\t\t\t\trows = this.table.modules.selectRow.selectedRows;\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"active\":\r\n\t\t\t\tdefault:\r\n\t\t\t\tif(this.table.options.pagination){\r\n\t\t\t\t\trows = this.table.rowManager.getDisplayRows(this.table.rowManager.displayRows.length - 2);\r\n\t\t\t\t}else{\r\n\t\t\t\t\trows = this.table.rowManager.getDisplayRows();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn Object.assign([], rows);\r\n\t}\r\n\r\n\tgenerateColumnGroupHeaders(){\r\n\t\tvar output = [];\r\n\r\n\t\tvar columns = this.config.columnGroups !== false ? this.table.columnManager.columns : this.table.columnManager.columnsByIndex;\r\n\r\n\t\tcolumns.forEach((column) => {\r\n\t\t\tvar colData = this.processColumnGroup(column);\r\n\r\n\t\t\tif(colData){\r\n\t\t\t\toutput.push(colData);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tprocessColumnGroup(column){\r\n\t\tvar subGroups = column.columns,\r\n\t\tmaxDepth = 0,\r\n\t\ttitle = column.definition[\"title\" + (this.colVisProp.charAt(0).toUpperCase() + this.colVisProp.slice(1))] || column.definition.title;\r\n\r\n\t\tvar groupData = {\r\n\t\t\ttitle:title,\r\n\t\t\tcolumn:column,\r\n\t\t\tdepth:1,\r\n\t\t};\r\n\r\n\t\tif(subGroups.length){\r\n\t\t\tgroupData.subGroups = [];\r\n\t\t\tgroupData.width = 0;\r\n\r\n\t\t\tsubGroups.forEach((subGroup) => {\r\n\t\t\t\tvar subGroupData = this.processColumnGroup(subGroup);\r\n\r\n\t\t\t\tif(subGroupData){\r\n\t\t\t\t\tgroupData.width += subGroupData.width;\r\n\t\t\t\t\tgroupData.subGroups.push(subGroupData);\r\n\r\n\t\t\t\t\tif(subGroupData.depth > maxDepth){\r\n\t\t\t\t\t\tmaxDepth = subGroupData.depth;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tgroupData.depth += maxDepth;\r\n\r\n\t\t\tif(!groupData.width){\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tif(this.columnVisCheck(column)){\r\n\t\t\t\tgroupData.width = 1;\r\n\t\t\t}else{\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn groupData;\r\n\t}\r\n\r\n\tcolumnVisCheck(column){\r\n\t\treturn column.definition[this.colVisProp] !== false && (column.visible || (!column.visible && column.definition[this.colVisProp]));\r\n\t}\r\n\r\n\theadersToExportRows(columns){\r\n\t\tvar headers = [],\r\n\t\theaderDepth = 0,\r\n\t\texportRows = [];\r\n\r\n\t\tfunction parseColumnGroup(column, level){\r\n\r\n\t\t\tvar depth = headerDepth - level;\r\n\r\n\t\t\tif(typeof headers[level] === \"undefined\"){\r\n\t\t\t\theaders[level] = [];\r\n\t\t\t}\r\n\r\n\t\t\tcolumn.height = column.subGroups ? 1 : (depth - column.depth) + 1;\r\n\r\n\t\t\theaders[level].push(column);\r\n\r\n\t\t\tif(column.height > 1){\r\n\t\t\t\tfor(let i = 1; i < column.height; i ++){\r\n\r\n\t\t\t\t\tif(typeof headers[level + i] === \"undefined\"){\r\n\t\t\t\t\t\theaders[level + i] = [];\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\theaders[level + i].push(false);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif(column.width > 1){\r\n\t\t\t\tfor(let i = 1; i < column.width; i ++){\r\n\t\t\t\t\theaders[level].push(false);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif(column.subGroups){\r\n\t\t\t\tcolumn.subGroups.forEach(function(subGroup){\r\n\t\t\t\t\tparseColumnGroup(subGroup, level+1);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//calculate maximum header debth\r\n\t\tcolumns.forEach(function(column){\r\n\t\t\tif(column.depth > headerDepth){\r\n\t\t\t\theaderDepth = column.depth;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tcolumns.forEach(function(column){\r\n\t\t\tparseColumnGroup(column,0);\r\n\t\t});\r\n\r\n\t\theaders.forEach((header) => {\r\n\t\t\tvar columns = [];\r\n\r\n\t\t\theader.forEach((col) => {\r\n\t\t\t\tif(col){\r\n\t\t\t\t\tcolumns.push(new ExportColumn(col.title, col.column.getComponent(), col.width, col.height, col.depth));\r\n\t\t\t\t}else{\r\n\t\t\t\t\tcolumns.push(null);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\texportRows.push(new ExportRow(\"header\", columns));\r\n\t\t});\r\n\r\n\t\treturn exportRows;\r\n\t}\r\n\r\n\tbodyToExportRows(rows){\r\n\r\n\t\tvar columns = [];\r\n\t\tvar exportRows = [];\r\n\r\n\t\tthis.table.columnManager.columnsByIndex.forEach((column) => {\r\n\t\t\tif (this.columnVisCheck(column)) {\r\n\t\t\t\tcolumns.push(column.getComponent());\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tif(this.config.columnCalcs !== false && this.table.modExists(\"columnCalcs\")){\r\n\t\t\tif(this.table.modules.columnCalcs.topInitialized){\r\n\t\t\t\trows.unshift(this.table.modules.columnCalcs.topRow);\r\n\t\t\t}\r\n\r\n\t\t\tif(this.table.modules.columnCalcs.botInitialized){\r\n\t\t\t\trows.push(this.table.modules.columnCalcs.botRow);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\trows = rows.filter((row) => {\r\n\t\t\tswitch(row.type){\r\n\t\t\t\tcase \"group\":\r\n\t\t\t\treturn this.config.rowGroups !== false;\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"calc\":\r\n\t\t\t\treturn this.config.columnCalcs !== false;\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"row\":\r\n\t\t\t\treturn !(this.table.options.dataTree && this.config.dataTree === false && row.modules.dataTree.parent);\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\r\n\t\t\treturn true;\r\n\t\t});\r\n\r\n\t\trows.forEach((row, i) => {\r\n\t\t\tvar rowData = row.getData(this.colVisProp);\r\n\t\t\tvar exportCols = [];\r\n\t\t\tvar indent = 0;\r\n\r\n\t\t\tswitch(row.type){\r\n\t\t\t\tcase \"group\":\r\n\t\t\t\tindent = row.level;\r\n\t\t\t\texportCols.push(new ExportColumn(row.key, row.getComponent(), columns.length, 1));\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"calc\" :\r\n\t\t\t\tcase \"row\" :\r\n\t\t\t\tcolumns.forEach((col) => {\r\n\t\t\t\t\texportCols.push(new ExportColumn(col._column.getFieldValue(rowData), col, 1, 1));\r\n\t\t\t\t});\r\n\r\n\t\t\t\tif(this.table.options.dataTree && this.config.dataTree !== false){\r\n\t\t\t\t\tindent = row.modules.dataTree.index;\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\r\n\t\t\texportRows.push(new ExportRow(row.type, exportCols, row.getComponent(), indent));\r\n\t\t});\r\n\r\n\t\treturn exportRows;\r\n\t}\r\n\r\n\tgenereateTableElement(list){\r\n\t\tvar table = document.createElement(\"table\"),\r\n\t\theaderEl = document.createElement(\"thead\"),\r\n\t\tbodyEl = document.createElement(\"tbody\"),\r\n\t\tstyles = this.lookupTableStyles(),\r\n\t\trowFormatter = this.table.options[\"rowFormatter\" + (this.colVisProp.charAt(0).toUpperCase() + this.colVisProp.slice(1))],\r\n\t\tsetup = {};\r\n\r\n\t\tsetup.rowFormatter = rowFormatter !== null ? rowFormatter : this.table.options.rowFormatter;\r\n\r\n\t\tif(this.table.options.dataTree &&this.config.dataTree !== false && this.table.modExists(\"columnCalcs\")){\r\n\t\t\tsetup.treeElementField = this.table.modules.dataTree.elementField;\r\n\t\t}\r\n\r\n\t\t//assign group header formatter\r\n\t\tsetup.groupHeader = this.table.options[\"groupHeader\" + (this.colVisProp.charAt(0).toUpperCase() + this.colVisProp.slice(1))];\r\n\r\n\t\tif(setup.groupHeader && !Array.isArray(setup.groupHeader)){\r\n\t\t\tsetup.groupHeader = [setup.groupHeader];\r\n\t\t}\r\n\r\n\t\ttable.classList.add(\"tabulator-print-table\");\r\n\r\n\t\tthis.mapElementStyles(this.table.columnManager.getHeadersElement(), headerEl, [\"border-top\", \"border-left\", \"border-right\", \"border-bottom\", \"background-color\", \"color\", \"font-weight\", \"font-family\", \"font-size\"]);\r\n\r\n\r\n\t\tif(list.length > 1000){\r\n\t\t\tconsole.warn(\"It may take a long time to render an HTML table with more than 1000 rows\");\r\n\t\t}\r\n\r\n\t\tlist.forEach((row, i) => {\r\n\t\t\tswitch(row.type){\r\n\t\t\t\tcase \"header\":\r\n\t\t\t\theaderEl.appendChild(this.genereateHeaderElement(row, setup, styles));\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"group\":\r\n\t\t\t\tbodyEl.appendChild(this.genereateGroupElement(row, setup, styles));\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"calc\":\r\n\t\t\t\tbodyEl.appendChild(this.genereateCalcElement(row, setup, styles));\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"row\":\r\n\t\t\t\tlet rowEl = this.genereateRowElement(row, setup, styles);\r\n\t\t\t\tthis.mapElementStyles(((i % 2) && styles.evenRow) ? styles.evenRow : styles.oddRow, rowEl, [\"border-top\", \"border-left\", \"border-right\", \"border-bottom\", \"color\", \"font-weight\", \"font-family\", \"font-size\", \"background-color\"]);\r\n\t\t\t\tbodyEl.appendChild(rowEl);\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tif(headerEl.innerHTML){\r\n\t\t\ttable.appendChild(headerEl);\r\n\t\t}\r\n\r\n\t\ttable.appendChild(bodyEl);\r\n\r\n\r\n\t\tthis.mapElementStyles(this.table.element, table, [\"border-top\", \"border-left\", \"border-right\", \"border-bottom\"]);\r\n\t\treturn table;\r\n\t}\r\n\r\n\tlookupTableStyles(){\r\n\t\tvar styles = {};\r\n\r\n\t\t//lookup row styles\r\n\t\tif(this.cloneTableStyle && window.getComputedStyle){\r\n\t\t\tstyles.oddRow = this.table.element.querySelector(\".tabulator-row-odd:not(.tabulator-group):not(.tabulator-calcs)\");\r\n\t\t\tstyles.evenRow = this.table.element.querySelector(\".tabulator-row-even:not(.tabulator-group):not(.tabulator-calcs)\");\r\n\t\t\tstyles.calcRow = this.table.element.querySelector(\".tabulator-row.tabulator-calcs\");\r\n\t\t\tstyles.firstRow = this.table.element.querySelector(\".tabulator-row:not(.tabulator-group):not(.tabulator-calcs)\");\r\n\t\t\tstyles.firstGroup = this.table.element.getElementsByClassName(\"tabulator-group\")[0];\r\n\r\n\t\t\tif(styles.firstRow){\r\n\t\t\t\tstyles.styleCells = styles.firstRow.getElementsByClassName(\"tabulator-cell\");\r\n\t\t\t\tstyles.firstCell = styles.styleCells[0];\r\n\t\t\t\tstyles.lastCell = styles.styleCells[styles.styleCells.length - 1];\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn styles;\r\n\t}\r\n\r\n\tgenereateHeaderElement(row, setup, styles){\r\n\t\tvar rowEl = document.createElement(\"tr\");\r\n\r\n\t\trow.columns.forEach((column) => {\r\n\t\t\tif(column){\r\n\t\t\t\tvar cellEl = document.createElement(\"th\");\r\n\t\t\t\tvar classNames = column.component._column.definition.cssClass ? column.component._column.definition.cssClass.split(\" \") : [];\r\n\r\n\t\t\t\tcellEl.colSpan = column.width;\r\n\t\t\t\tcellEl.rowSpan = column.height;\r\n\r\n\t\t\t\tcellEl.innerHTML = column.value;\r\n\r\n\t\t\t\tif(this.cloneTableStyle){\r\n\t\t\t\t\tcellEl.style.boxSizing = \"border-box\";\r\n\t\t\t\t}\r\n\r\n\t\t\t\tclassNames.forEach(function(className) {\r\n\t\t\t\t\tcellEl.classList.add(className);\r\n\t\t\t\t});\r\n\r\n\t\t\t\tthis.mapElementStyles(column.component.getElement(), cellEl, [\"text-align\", \"border-top\", \"border-left\", \"border-right\", \"border-bottom\", \"background-color\", \"color\", \"font-weight\", \"font-family\", \"font-size\"]);\r\n\t\t\t\tthis.mapElementStyles(column.component._column.contentElement, cellEl, [\"padding-top\", \"padding-left\", \"padding-right\", \"padding-bottom\"]);\r\n\r\n\t\t\t\tif(column.component._column.visible){\r\n\t\t\t\t\tthis.mapElementStyles(column.component.getElement(), cellEl, [\"width\"]);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tif(column.component._column.definition.width){\r\n\t\t\t\t\t\tcellEl.style.width = column.component._column.definition.width + \"px\";\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(column.component._column.parent){\r\n\t\t\t\t\tthis.mapElementStyles(column.component._column.parent.groupElement, cellEl, [\"border-top\"]);\r\n\t\t\t\t}\r\n\r\n\t\t\t\trowEl.appendChild(cellEl);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn rowEl;\r\n\t}\r\n\r\n\tgenereateGroupElement(row, setup, styles){\r\n\r\n\t\tvar rowEl = document.createElement(\"tr\"),\r\n\t\tcellEl = document.createElement(\"td\"),\r\n\t\tgroup = row.columns[0];\r\n\r\n\t\trowEl.classList.add(\"tabulator-print-table-row\");\r\n\r\n\t\tif(setup.groupHeader && setup.groupHeader[row.indent]){\r\n\t\t\tgroup.value = setup.groupHeader[row.indent](group.value, row.component._group.getRowCount(), row.component._group.getData(), row.component);\r\n\t\t}else{\r\n\t\t\tif(setup.groupHeader === false){\r\n\t\t\t\tgroup.value = group.value;\r\n\t\t\t}else{\r\n\t\t\t\tgroup.value = row.component._group.generator(group.value, row.component._group.getRowCount(), row.component._group.getData(), row.component);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tcellEl.colSpan = group.width;\r\n\t\tcellEl.innerHTML = group.value;\r\n\r\n\t\trowEl.classList.add(\"tabulator-print-table-group\");\r\n\t\trowEl.classList.add(\"tabulator-group-level-\" + row.indent);\r\n\r\n\t\tif(group.component.isVisible()){\r\n\t\t\trowEl.classList.add(\"tabulator-group-visible\");\r\n\t\t}\r\n\r\n\t\tthis.mapElementStyles(styles.firstGroup, rowEl, [\"border-top\", \"border-left\", \"border-right\", \"border-bottom\", \"color\", \"font-weight\", \"font-family\", \"font-size\", \"background-color\"]);\r\n\t\tthis.mapElementStyles(styles.firstGroup, cellEl, [\"padding-top\", \"padding-left\", \"padding-right\", \"padding-bottom\"]);\r\n\r\n\t\trowEl.appendChild(cellEl);\r\n\r\n\t\treturn rowEl;\r\n\t}\r\n\r\n\tgenereateCalcElement(row, setup, styles){\r\n\t\tvar rowEl = this.genereateRowElement(row, setup, styles);\r\n\r\n\t\trowEl.classList.add(\"tabulator-print-table-calcs\");\r\n\t\tthis.mapElementStyles(styles.calcRow, rowEl, [\"border-top\", \"border-left\", \"border-right\", \"border-bottom\", \"color\", \"font-weight\", \"font-family\", \"font-size\", \"background-color\"]);\r\n\r\n\t\treturn rowEl;\r\n\t}\r\n\r\n\tgenereateRowElement(row, setup, styles){\r\n\t\tvar rowEl = document.createElement(\"tr\");\r\n\r\n\t\trowEl.classList.add(\"tabulator-print-table-row\");\r\n\r\n\t\trow.columns.forEach((col) => {\r\n\r\n\t\t\tif(col){\r\n\t\t\t\tvar cellEl = document.createElement(\"td\"),\r\n\t\t\t\tcolumn = col.component._column,\r\n\t\t\t\tvalue = col.value;\r\n\r\n\t\t\t\tvar cellWrapper = {\r\n\t\t\t\t\tmodules:{},\r\n\t\t\t\t\tgetValue:function(){\r\n\t\t\t\t\t\treturn value;\r\n\t\t\t\t\t},\r\n\t\t\t\t\tgetField:function(){\r\n\t\t\t\t\t\treturn column.definition.field;\r\n\t\t\t\t\t},\r\n\t\t\t\t\tgetElement:function(){\r\n\t\t\t\t\t\treturn cellEl;\r\n\t\t\t\t\t},\r\n\t\t\t\t\tgetColumn:function(){\r\n\t\t\t\t\t\treturn column.getComponent();\r\n\t\t\t\t\t},\r\n\t\t\t\t\tgetData:function(){\r\n\t\t\t\t\t\treturn row.component.getData();\r\n\t\t\t\t\t},\r\n\t\t\t\t\tgetRow:function(){\r\n\t\t\t\t\t\treturn row.component;\r\n\t\t\t\t\t},\r\n\t\t\t\t\tgetComponent:function(){\r\n\t\t\t\t\t\treturn cellWrapper;\r\n\t\t\t\t\t},\r\n\t\t\t\t\tcolumn:column,\r\n\t\t\t\t};\r\n\r\n\t\t\t\tvar classNames = column.definition.cssClass ? column.definition.cssClass.split(\" \") : [];\r\n\r\n\t\t\t\tclassNames.forEach(function(className) {\r\n\t\t\t\t\tcellEl.classList.add(className);\r\n\t\t\t\t});\r\n\r\n\t\t\t\tif(this.table.modExists(\"format\") && this.config.formatCells !== false){\r\n\t\t\t\t\tvalue = this.table.modules.format.formatExportValue(cellWrapper, this.colVisProp);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tswitch(typeof value){\r\n\t\t\t\t\t\tcase \"object\":\r\n\t\t\t\t\t\tvalue = JSON.stringify(value);\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\tcase \"undefined\":\r\n\t\t\t\t\t\tcase \"null\":\r\n\t\t\t\t\t\tvalue = \"\";\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\tdefault:\r\n\t\t\t\t\t\tvalue = value;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(value instanceof Node){\r\n\t\t\t\t\tcellEl.appendChild(value);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tcellEl.innerHTML = value;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(styles.firstCell){\r\n\t\t\t\t\tthis.mapElementStyles(styles.firstCell, cellEl, [\"padding-top\", \"padding-left\", \"padding-right\", \"padding-bottom\", \"border-top\", \"border-left\", \"border-right\", \"border-bottom\", \"color\", \"font-weight\", \"font-family\", \"font-size\"]);\r\n\r\n\t\t\t\t\tif(column.definition.align){\r\n\t\t\t\t\t\tcellEl.style.textAlign = column.definition.align;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(this.table.options.dataTree && this.config.dataTree !== false){\r\n\t\t\t\t\tif((setup.treeElementField && setup.treeElementField == column.field) || (!setup.treeElementField && i == 0)){\r\n\t\t\t\t\t\tif(row.component._row.modules.dataTree.controlEl){\r\n\t\t\t\t\t\t\tcellEl.insertBefore(row.component._row.modules.dataTree.controlEl.cloneNode(true), cellEl.firstChild);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif(row.component._row.modules.dataTree.branchEl){\r\n\t\t\t\t\t\t\tcellEl.insertBefore(row.component._row.modules.dataTree.branchEl.cloneNode(true), cellEl.firstChild);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\trowEl.appendChild(cellEl);\r\n\r\n\t\t\t\tif(cellWrapper.modules.format && cellWrapper.modules.format.renderedCallback){\r\n\t\t\t\t\tcellWrapper.modules.format.renderedCallback();\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(setup.rowFormatter && this.config.formatCells !== false){\r\n\t\t\t\t\tsetup.rowFormatter(row.component);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn rowEl;\r\n\t}\r\n\r\n\tgenereateHTMLTable(list){\r\n\t\tvar holder = document.createElement(\"div\");\r\n\r\n\t\tholder.appendChild(this.genereateTableElement(list));\r\n\r\n\t\treturn holder.innerHTML;\r\n\t}\r\n\r\n\tgetHtml(visible, style, config, colVisProp){\r\n\t\tvar list = this.generateExportList(config || this.table.options.htmlOutputConfig, style, visible, colVisProp || \"htmlOutput\");\r\n\r\n\t\treturn this.genereateHTMLTable(list);\r\n\t}\r\n\r\n\tmapElementStyles(from, to, props){\r\n\t\tif(this.cloneTableStyle && from && to){\r\n\r\n\t\t\tvar lookup = {\r\n\t\t\t\t\"background-color\" : \"backgroundColor\",\r\n\t\t\t\t\"color\" : \"fontColor\",\r\n\t\t\t\t\"width\" : \"width\",\r\n\t\t\t\t\"font-weight\" : \"fontWeight\",\r\n\t\t\t\t\"font-family\" : \"fontFamily\",\r\n\t\t\t\t\"font-size\" : \"fontSize\",\r\n\t\t\t\t\"text-align\" : \"textAlign\",\r\n\t\t\t\t\"border-top\" : \"borderTop\",\r\n\t\t\t\t\"border-left\" : \"borderLeft\",\r\n\t\t\t\t\"border-right\" : \"borderRight\",\r\n\t\t\t\t\"border-bottom\" : \"borderBottom\",\r\n\t\t\t\t\"padding-top\" : \"paddingTop\",\r\n\t\t\t\t\"padding-left\" : \"paddingLeft\",\r\n\t\t\t\t\"padding-right\" : \"paddingRight\",\r\n\t\t\t\t\"padding-bottom\" : \"paddingBottom\",\r\n\t\t\t};\r\n\r\n\t\t\tif(window.getComputedStyle){\r\n\t\t\t\tvar fromStyle = window.getComputedStyle(from);\r\n\r\n\t\t\t\tprops.forEach(function(prop){\r\n\t\t\t\t\tto.style[lookup[prop]] = fromStyle.getPropertyValue(prop);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n\r\nExport.moduleName = \"export\";\r\n\r\nexport default Export;\r\n","export default {\r\n\r\n\t//equal to\r\n\t\"=\":function(filterVal, rowVal, rowData, filterParams){\r\n\t\treturn rowVal == filterVal ? true : false;\r\n\t},\r\n\r\n\t//less than\r\n\t\"<\":function(filterVal, rowVal, rowData, filterParams){\r\n\t\treturn rowVal < filterVal ? true : false;\r\n\t},\r\n\r\n\t//less than or equal to\r\n\t\"<=\":function(filterVal, rowVal, rowData, filterParams){\r\n\t\treturn rowVal <= filterVal ? true : false;\r\n\t},\r\n\r\n\t//greater than\r\n\t\">\":function(filterVal, rowVal, rowData, filterParams){\r\n\t\treturn rowVal > filterVal ? true : false;\r\n\t},\r\n\r\n\t//greater than or equal to\r\n\t\">=\":function(filterVal, rowVal, rowData, filterParams){\r\n\t\treturn rowVal >= filterVal ? true : false;\r\n\t},\r\n\r\n\t//not equal to\r\n\t\"!=\":function(filterVal, rowVal, rowData, filterParams){\r\n\t\treturn rowVal != filterVal ? true : false;\r\n\t},\r\n\r\n\t\"regex\":function(filterVal, rowVal, rowData, filterParams){\r\n\r\n\t\tif(typeof filterVal == \"string\"){\r\n\t\t\tfilterVal = new RegExp(filterVal);\r\n\t\t}\r\n\r\n\t\treturn filterVal.test(rowVal);\r\n\t},\r\n\r\n\t//contains the string\r\n\t\"like\":function(filterVal, rowVal, rowData, filterParams){\r\n\t\tif(filterVal === null || typeof filterVal === \"undefined\"){\r\n\t\t\treturn rowVal === filterVal ? true : false;\r\n\t\t}else{\r\n\t\t\tif(typeof rowVal !== 'undefined' && rowVal !== null){\r\n\t\t\t\treturn String(rowVal).toLowerCase().indexOf(filterVal.toLowerCase()) > -1;\r\n\t\t\t}\r\n\t\t\telse{\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\t//contains the keywords\r\n\t\"keywords\":function(filterVal, rowVal, rowData, filterParams){\r\n\t\tvar keywords = filterVal.toLowerCase().split(typeof filterParams.separator === \"undefined\" ? \" \" : filterParams.separator),\r\n\t\tvalue = String(rowVal === null || typeof rowVal === \"undefined\" ? \"\" : rowVal).toLowerCase(),\r\n\t\tmatches = [];\r\n\r\n\t\tkeywords.forEach((keyword) =>{\r\n\t\t\tif(value.includes(keyword)){\r\n\t\t\t\tmatches.push(true);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn filterParams.matchAll ? matches.length === keywords.length : !!matches.length;\r\n\t},\r\n\r\n\t//starts with the string\r\n\t\"starts\":function(filterVal, rowVal, rowData, filterParams){\r\n\t\tif(filterVal === null || typeof filterVal === \"undefined\"){\r\n\t\t\treturn rowVal === filterVal ? true : false;\r\n\t\t}else{\r\n\t\t\tif(typeof rowVal !== 'undefined' && rowVal !== null){\r\n\t\t\t\treturn String(rowVal).toLowerCase().startsWith(filterVal.toLowerCase());\r\n\t\t\t}\r\n\t\t\telse{\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\t//ends with the string\r\n\t\"ends\":function(filterVal, rowVal, rowData, filterParams){\r\n\t\tif(filterVal === null || typeof filterVal === \"undefined\"){\r\n\t\t\treturn rowVal === filterVal ? true : false;\r\n\t\t}else{\r\n\t\t\tif(typeof rowVal !== 'undefined' && rowVal !== null){\r\n\t\t\t\treturn String(rowVal).toLowerCase().endsWith(filterVal.toLowerCase());\r\n\t\t\t}\r\n\t\t\telse{\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\t//in array\r\n\t\"in\":function(filterVal, rowVal, rowData, filterParams){\r\n\t\tif(Array.isArray(filterVal)){\r\n\t\t\treturn filterVal.length ? filterVal.indexOf(rowVal) > -1 : true;\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Filter Error - filter value is not an array:\", filterVal);\r\n\t\t\treturn false;\r\n\t\t}\r\n\t},\r\n};","import Module from '../../core/Module.js';\r\n\r\nimport defaultFilters from './defaults/filters.js';\r\n\r\nclass Filter extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.filterList = []; //hold filter list\r\n\t\tthis.headerFilters = {}; //hold column filters\r\n\t\tthis.headerFilterColumns = []; //hold columns that use header filters\r\n\r\n\t\tthis.prevHeaderFilterChangeCheck = \"\";\r\n\t\tthis.prevHeaderFilterChangeCheck = \"{}\";\r\n\r\n\t\tthis.changed = false; //has filtering changed since last render\r\n\t}\r\n\r\n\t//initialize column header filter\r\n\tinitializeColumn(column, value){\r\n\t\tvar self = this,\r\n\t\tfield = column.getField(),\r\n\t\tparams;\r\n\r\n\t\t//handle successfull value change\r\n\t\tfunction success(value){\r\n\t\t\tvar filterType = (column.modules.filter.tagType == \"input\" && column.modules.filter.attrType == \"text\") || column.modules.filter.tagType == \"textarea\" ? \"partial\" : \"match\",\r\n\t\t\ttype = \"\",\r\n\t\t\tfilterChangeCheck = \"\",\r\n\t\t\tfilterFunc;\r\n\r\n\t\t\tif(typeof column.modules.filter.prevSuccess === \"undefined\" || column.modules.filter.prevSuccess !== value){\r\n\r\n\t\t\t\tcolumn.modules.filter.prevSuccess = value;\r\n\r\n\t\t\t\tif(!column.modules.filter.emptyFunc(value)){\r\n\t\t\t\t\tcolumn.modules.filter.value = value;\r\n\r\n\t\t\t\t\tswitch(typeof column.definition.headerFilterFunc){\r\n\t\t\t\t\t\tcase \"string\":\r\n\t\t\t\t\t\tif(Filter.filters[column.definition.headerFilterFunc]){\r\n\t\t\t\t\t\t\ttype = column.definition.headerFilterFunc;\r\n\t\t\t\t\t\t\tfilterFunc = function(data){\r\n\t\t\t\t\t\t\t\tvar params = column.definition.headerFilterFuncParams || {};\r\n\t\t\t\t\t\t\t\tvar fieldVal = column.getFieldValue(data);\r\n\r\n\t\t\t\t\t\t\t\tparams = typeof params === \"function\" ? params(value, fieldVal, data) : params;\r\n\r\n\t\t\t\t\t\t\t\treturn Filter.filters[column.definition.headerFilterFunc](value, fieldVal, data, params);\r\n\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\tconsole.warn(\"Header Filter Error - Matching filter function not found: \", column.definition.headerFilterFunc);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\tcase \"function\":\r\n\t\t\t\t\t\tfilterFunc = function(data){\r\n\t\t\t\t\t\t\tvar params = column.definition.headerFilterFuncParams || {};\r\n\t\t\t\t\t\t\tvar fieldVal = column.getFieldValue(data);\r\n\r\n\t\t\t\t\t\t\tparams = typeof params === \"function\" ? params(value, fieldVal, data) : params;\r\n\r\n\t\t\t\t\t\t\treturn column.definition.headerFilterFunc(value, fieldVal, data, params);\r\n\t\t\t\t\t\t};\r\n\r\n\t\t\t\t\t\ttype = filterFunc;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif(!filterFunc){\r\n\t\t\t\t\t\tswitch(filterType){\r\n\t\t\t\t\t\t\tcase \"partial\":\r\n\t\t\t\t\t\t\tfilterFunc = function(data){\r\n\t\t\t\t\t\t\t\tvar colVal = column.getFieldValue(data);\r\n\r\n\t\t\t\t\t\t\t\tif(typeof colVal !== 'undefined' && colVal !== null){\r\n\t\t\t\t\t\t\t\t\treturn String(colVal).toLowerCase().indexOf(String(value).toLowerCase()) > -1;\r\n\t\t\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t\ttype = \"like\";\r\n\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\t\tdefault:\r\n\t\t\t\t\t\t\tfilterFunc = function(data){\r\n\t\t\t\t\t\t\t\treturn column.getFieldValue(data) == value;\r\n\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t\ttype = \"=\";\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tself.headerFilters[field] = {value:value, func:filterFunc, type:type, params:params || {}};\r\n\r\n\t\t\t\t}else{\r\n\t\t\t\t\tdelete self.headerFilters[field];\r\n\t\t\t\t}\r\n\r\n\t\t\t\tfilterChangeCheck = JSON.stringify(self.headerFilters);\r\n\r\n\t\t\t\tif(self.prevHeaderFilterChangeCheck !== filterChangeCheck){\r\n\t\t\t\t\tself.prevHeaderFilterChangeCheck = filterChangeCheck;\r\n\r\n\t\t\t\t\tself.changed = true;\r\n\t\t\t\t\tself.table.rowManager.filterRefresh();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\tcolumn.modules.filter = {\r\n\t\t\tsuccess:success,\r\n\t\t\tattrType:false,\r\n\t\t\ttagType:false,\r\n\t\t\temptyFunc:false,\r\n\t\t};\r\n\r\n\t\tthis.generateHeaderFilterElement(column);\r\n\t}\r\n\r\n\tgenerateHeaderFilterElement(column, initialValue, reinitialize){\r\n\t\tvar self = this,\r\n\t\tsuccess = column.modules.filter.success,\r\n\t\tfield = column.getField(),\r\n\t\tfilterElement, editor, editorElement, cellWrapper, typingTimer, searchTrigger, params;\r\n\r\n\t\t//handle aborted edit\r\n\t\tfunction cancel(){}\r\n\r\n\t\tif(column.modules.filter.headerElement && column.modules.filter.headerElement.parentNode){\r\n\t\t\tcolumn.contentElement.removeChild(column.modules.filter.headerElement.parentNode);\r\n\t\t}\r\n\r\n\t\tif(field){\r\n\r\n\t\t\t//set empty value function\r\n\t\t\tcolumn.modules.filter.emptyFunc = column.definition.headerFilterEmptyCheck || function(value){\r\n\t\t\t\treturn !value && value !== \"0\" && value !== 0;\r\n\t\t\t};\r\n\r\n\t\t\tfilterElement = document.createElement(\"div\");\r\n\t\t\tfilterElement.classList.add(\"tabulator-header-filter\");\r\n\r\n\t\t\t//set column editor\r\n\t\t\tswitch(typeof column.definition.headerFilter){\r\n\t\t\t\tcase \"string\":\r\n\t\t\t\tif(self.table.modules.edit.editors[column.definition.headerFilter]){\r\n\t\t\t\t\teditor = self.table.modules.edit.editors[column.definition.headerFilter];\r\n\r\n\t\t\t\t\tif((column.definition.headerFilter === \"tick\" || column.definition.headerFilter === \"tickCross\") && !column.definition.headerFilterEmptyCheck){\r\n\t\t\t\t\t\tcolumn.modules.filter.emptyFunc = function(value){\r\n\t\t\t\t\t\t\treturn value !== true && value !== false;\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t}\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.warn(\"Filter Error - Cannot build header filter, No such editor found: \", column.definition.editor);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"function\":\r\n\t\t\t\teditor = column.definition.headerFilter;\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"boolean\":\r\n\t\t\t\tif(column.modules.edit && column.modules.edit.editor){\r\n\t\t\t\t\teditor = column.modules.edit.editor;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tif(column.definition.formatter && self.table.modules.edit.editors[column.definition.formatter]){\r\n\t\t\t\t\t\teditor = self.table.modules.edit.editors[column.definition.formatter];\r\n\r\n\t\t\t\t\t\tif((column.definition.formatter === \"tick\" || column.definition.formatter === \"tickCross\") && !column.definition.headerFilterEmptyCheck){\r\n\t\t\t\t\t\t\tcolumn.modules.filter.emptyFunc = function(value){\r\n\t\t\t\t\t\t\t\treturn value !== true && value !== false;\r\n\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\teditor = self.table.modules.edit.editors[\"input\"];\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\r\n\t\t\tif(editor){\r\n\r\n\t\t\t\tcellWrapper = {\r\n\t\t\t\t\tgetValue:function(){\r\n\t\t\t\t\t\treturn typeof initialValue !== \"undefined\" ? initialValue : \"\";\r\n\t\t\t\t\t},\r\n\t\t\t\t\tgetField:function(){\r\n\t\t\t\t\t\treturn column.definition.field;\r\n\t\t\t\t\t},\r\n\t\t\t\t\tgetElement:function(){\r\n\t\t\t\t\t\treturn filterElement;\r\n\t\t\t\t\t},\r\n\t\t\t\t\tgetColumn:function(){\r\n\t\t\t\t\t\treturn column.getComponent();\r\n\t\t\t\t\t},\r\n\t\t\t\t\tgetRow:function(){\r\n\t\t\t\t\t\treturn {\r\n\t\t\t\t\t\t\tnormalizeHeight:function(){\r\n\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t}\r\n\t\t\t\t};\r\n\r\n\t\t\t\tparams = column.definition.headerFilterParams || {};\r\n\r\n\t\t\t\tparams = typeof params === \"function\" ? params.call(self.table) : params;\r\n\r\n\t\t\t\teditorElement = editor.call(this.table.modules.edit, cellWrapper, function(){}, success, cancel, params);\r\n\r\n\t\t\t\tif(!editorElement){\r\n\t\t\t\t\tconsole.warn(\"Filter Error - Cannot add filter to \" + field + \" column, editor returned a value of false\");\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(!(editorElement instanceof Node)){\r\n\t\t\t\t\tconsole.warn(\"Filter Error - Cannot add filter to \" + field + \" column, editor should return an instance of Node, the editor returned:\", editorElement);\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//set Placeholder Text\r\n\t\t\t\tif(field){\r\n\t\t\t\t\tself.table.modules.localize.bind(\"headerFilters|columns|\" + column.definition.field, function(value){\r\n\t\t\t\t\t\teditorElement.setAttribute(\"placeholder\", typeof value !== \"undefined\" && value ? value : self.table.modules.localize.getText(\"headerFilters|default\"));\r\n\t\t\t\t\t});\r\n\t\t\t\t}else{\r\n\t\t\t\t\tself.table.modules.localize.bind(\"headerFilters|default\", function(value){\r\n\t\t\t\t\t\teditorElement.setAttribute(\"placeholder\", typeof self.column.definition.headerFilterPlaceholder !== \"undefined\" && self.column.definition.headerFilterPlaceholder ? self.column.definition.headerFilterPlaceholder : value);\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//focus on element on click\r\n\t\t\t\teditorElement.addEventListener(\"click\", function(e){\r\n\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\teditorElement.focus();\r\n\t\t\t\t});\r\n\r\n\t\t\t\teditorElement.addEventListener(\"focus\", (e) => {\r\n\t\t\t\t\tvar left = this.table.columnManager.element.scrollLeft;\r\n\r\n\t\t\t\t\tif(left !== this.table.rowManager.element.scrollLeft){\r\n\t\t\t\t\t\tthis.table.rowManager.scrollHorizontal(left);\r\n\t\t\t\t\t\tthis.table.columnManager.scrollHorizontal(left);\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\t//live update filters as user types\r\n\t\t\t\ttypingTimer = false;\r\n\r\n\t\t\t\tsearchTrigger = function(e){\r\n\t\t\t\t\tif(typingTimer){\r\n\t\t\t\t\t\tclearTimeout(typingTimer);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\ttypingTimer = setTimeout(function(){\r\n\t\t\t\t\t\tsuccess(editorElement.value);\r\n\t\t\t\t\t},self.table.options.headerFilterLiveFilterDelay);\r\n\t\t\t\t};\r\n\r\n\t\t\t\tcolumn.modules.filter.headerElement = editorElement;\r\n\t\t\t\tcolumn.modules.filter.attrType = editorElement.hasAttribute(\"type\") ? editorElement.getAttribute(\"type\").toLowerCase() : \"\" ;\r\n\t\t\t\tcolumn.modules.filter.tagType = editorElement.tagName.toLowerCase();\r\n\r\n\t\t\t\tif(column.definition.headerFilterLiveFilter !== false){\r\n\r\n\t\t\t\t\tif (\r\n\t\t\t\t\t\t!(\r\n\t\t\t\t\t\t\tcolumn.definition.headerFilter === 'autocomplete' ||\r\n\t\t\t\t\t\t\tcolumn.definition.headerFilter === 'tickCross' ||\r\n\t\t\t\t\t\t\t((column.definition.editor === 'autocomplete' ||\r\n\t\t\t\t\t\t\t\tcolumn.definition.editor === 'tickCross') &&\r\n\t\t\t\t\t\t\tcolumn.definition.headerFilter === true)\r\n\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t) {\r\n\t\t\t\t\t\teditorElement.addEventListener(\"keyup\", searchTrigger);\r\n\t\t\t\t\teditorElement.addEventListener(\"search\", searchTrigger);\r\n\r\n\r\n\t\t\t\t\t//update number filtered columns on change\r\n\t\t\t\t\tif(column.modules.filter.attrType == \"number\"){\r\n\t\t\t\t\t\teditorElement.addEventListener(\"change\", function(e){\r\n\t\t\t\t\t\t\tsuccess(editorElement.value);\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t//change text inputs to search inputs to allow for clearing of field\r\n\t\t\t\t\tif(column.modules.filter.attrType == \"text\" && this.table.browser !== \"ie\"){\r\n\t\t\t\t\t\teditorElement.setAttribute(\"type\", \"search\");\r\n\t\t\t\t\t\t// editorElement.off(\"change blur\"); //prevent blur from triggering filter and preventing selection click\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\t\t//prevent input and select elements from propegating click to column sorters etc\r\n\t\t\t\t\tif(column.modules.filter.tagType == \"input\" || column.modules.filter.tagType == \"select\" || column.modules.filter.tagType == \"textarea\"){\r\n\t\t\t\t\t\teditorElement.addEventListener(\"mousedown\",function(e){\r\n\t\t\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tfilterElement.appendChild(editorElement);\r\n\r\n\t\t\t\tcolumn.contentElement.appendChild(filterElement);\r\n\r\n\t\t\t\tif(!reinitialize){\r\n\t\t\t\t\tself.headerFilterColumns.push(column);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Filter Error - Cannot add header filter, column has no field set:\", column.definition.title);\r\n\t\t}\r\n\t}\r\n\r\n\t//hide all header filter elements (used to ensure correct column widths in \"fitData\" layout mode)\r\n\thideHeaderFilterElements(){\r\n\t\tthis.headerFilterColumns.forEach(function(column){\r\n\t\t\tif(column.modules.filter && column.modules.filter.headerElement){\r\n\t\t\t\tcolumn.modules.filter.headerElement.style.display = 'none';\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t//show all header filter elements (used to ensure correct column widths in \"fitData\" layout mode)\r\n\tshowHeaderFilterElements(){\r\n\t\tthis.headerFilterColumns.forEach(function(column){\r\n\t\t\tif(column.modules.filter && column.modules.filter.headerElement){\r\n\t\t\t\tcolumn.modules.filter.headerElement.style.display = '';\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t//programatically set focus of header filter\r\n\tsetHeaderFilterFocus(column){\r\n\t\tif(column.modules.filter && column.modules.filter.headerElement){\r\n\t\t\tcolumn.modules.filter.headerElement.focus();\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Column Filter Focus Error - No header filter set on column:\", column.getField());\r\n\t\t}\r\n\t}\r\n\r\n\t//programmatically get value of header filter\r\n\tgetHeaderFilterValue(column){\r\n\t\tif(column.modules.filter && column.modules.filter.headerElement){\r\n\t\t\treturn column.modules.filter.headerElement.value;\r\n\t\t} else {\r\n\t\t\tconsole.warn(\"Column Filter Error - No header filter set on column:\", column.getField());\r\n\t\t}\r\n\t}\r\n\r\n\t//programatically set value of header filter\r\n\tsetHeaderFilterValue(column, value){\r\n\t\tif (column){\r\n\t\t\tif(column.modules.filter && column.modules.filter.headerElement){\r\n\t\t\t\tthis.generateHeaderFilterElement(column, value, true);\r\n\t\t\t\tcolumn.modules.filter.success(value);\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Column Filter Error - No header filter set on column:\", column.getField());\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\treloadHeaderFilter(column){\r\n\t\tif (column){\r\n\t\t\tif(column.modules.filter && column.modules.filter.headerElement){\r\n\t\t\t\tthis.generateHeaderFilterElement(column, column.modules.filter.value, true);\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Column Filter Error - No header filter set on column:\", column.getField());\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//check if the filters has changed since last use\r\n\thasChanged(){\r\n\t\tvar changed = this.changed;\r\n\t\tthis.changed = false;\r\n\t\treturn changed;\r\n\t}\r\n\r\n\t//set standard filters\r\n\tsetFilter(field, type, value, params){\r\n\t\tvar self = this;\r\n\r\n\t\tself.filterList = [];\r\n\r\n\t\tif(!Array.isArray(field)){\r\n\t\t\tfield = [{field:field, type:type, value:value, params:params}];\r\n\t\t}\r\n\r\n\t\tself.addFilter(field);\r\n\t}\r\n\r\n\t//add filter to array\r\n\taddFilter(field, type, value, params){\r\n\t\tvar self = this;\r\n\r\n\t\tif(!Array.isArray(field)){\r\n\t\t\tfield = [{field:field, type:type, value:value, params:params}];\r\n\t\t}\r\n\r\n\t\tfield.forEach(function(filter){\r\n\r\n\t\t\tfilter = self.findFilter(filter);\r\n\r\n\t\t\tif(filter){\r\n\t\t\t\tself.filterList.push(filter);\r\n\r\n\t\t\t\tself.changed = true;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tif(this.table.options.persistence && this.table.modExists(\"persistence\", true) && this.table.modules.persistence.config.filter){\r\n\t\t\tthis.table.modules.persistence.save(\"filter\");\r\n\t\t}\r\n\t}\r\n\r\n\tfindFilter(filter){\r\n\t\tvar self = this,\r\n\t\tcolumn;\r\n\r\n\t\tif(Array.isArray(filter)){\r\n\t\t\treturn this.findSubFilters(filter);\r\n\t\t}\r\n\r\n\t\tvar filterFunc = false;\r\n\r\n\t\tif(typeof filter.field == \"function\"){\r\n\t\t\tfilterFunc = function(data){\r\n\t\t\t\treturn filter.field(data, filter.type || {})// pass params to custom filter function\r\n\t\t\t};\r\n\t\t}else{\r\n\r\n\t\t\tif(Filter.filters[filter.type]){\r\n\r\n\t\t\t\tcolumn = self.table.columnManager.getColumnByField(filter.field);\r\n\r\n\t\t\t\tif(column){\r\n\t\t\t\t\tfilterFunc = function(data){\r\n\t\t\t\t\t\treturn Filter.filters[filter.type](filter.value, column.getFieldValue(data), data, filter.params || {});\r\n\t\t\t\t\t};\r\n\t\t\t\t}else{\r\n\t\t\t\t\tfilterFunc = function(data){\r\n\t\t\t\t\t\treturn Filter.filters[filter.type](filter.value, data[filter.field], data, filter.params || {});\r\n\t\t\t\t\t};\r\n\t\t\t\t}\r\n\r\n\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Filter Error - No such filter type found, ignoring: \", filter.type);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfilter.func = filterFunc;\r\n\r\n\t\treturn filter.func ? filter : false;\r\n\t}\r\n\r\n\tfindSubFilters(filters){\r\n\t\tvar self = this,\r\n\t\toutput = [];\r\n\r\n\t\tfilters.forEach(function(filter){\r\n\t\t\tfilter = self.findFilter(filter);\r\n\r\n\t\t\tif(filter){\r\n\t\t\t\toutput.push(filter);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn output.length ? output : false;\r\n\t}\r\n\r\n\t//get all filters\r\n\tgetFilters(all, ajax){\r\n\t\tvar output = [];\r\n\r\n\t\tif(all){\r\n\t\t\toutput = this.getHeaderFilters();\r\n\t\t}\r\n\r\n\t\tif(ajax){\r\n\t\t\toutput.forEach(function(item){\r\n\t\t\t\tif(typeof item.type == \"function\"){\r\n\t\t\t\t\titem.type = \"function\";\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\toutput = output.concat(this.filtersToArray(this.filterList, ajax));\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\t//filter to Object\r\n\tfiltersToArray(filterList, ajax){\r\n\t\tvar output = [];\r\n\r\n\t\tfilterList.forEach((filter) => {\r\n\t\t\tvar item;\r\n\r\n\t\t\tif(Array.isArray(filter)){\r\n\t\t\t\toutput.push(this.filtersToArray(filter, ajax));\r\n\t\t\t}else{\r\n\t\t\t\titem = {field:filter.field, type:filter.type, value:filter.value}\r\n\r\n\t\t\t\tif(ajax){\r\n\t\t\t\t\tif(typeof item.type == \"function\"){\r\n\t\t\t\t\t\titem.type = \"function\";\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\toutput.push(item);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\t//get all filters\r\n\tgetHeaderFilters(){\r\n\t\tvar self = this,\r\n\t\toutput = [];\r\n\r\n\t\tfor(var key in this.headerFilters){\r\n\t\t\toutput.push({field:key, type:this.headerFilters[key].type, value:this.headerFilters[key].value});\r\n\t\t}\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\t//remove filter from array\r\n\tremoveFilter(field, type, value){\r\n\t\tvar self = this;\r\n\r\n\t\tif(!Array.isArray(field)){\r\n\t\t\tfield = [{field:field, type:type, value:value}];\r\n\t\t}\r\n\r\n\t\tfield.forEach(function(filter){\r\n\t\t\tvar index = -1;\r\n\r\n\t\t\tif(typeof filter.field == \"object\"){\r\n\t\t\t\tindex = self.filterList.findIndex(function(element){\r\n\t\t\t\t\treturn filter === element;\r\n\t\t\t\t});\r\n\t\t\t}else{\r\n\t\t\t\tindex = self.filterList.findIndex(function(element){\r\n\t\t\t\t\treturn filter.field === element.field && filter.type === element.type && filter.value === element.value;\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\tif(index > -1){\r\n\t\t\t\tself.filterList.splice(index, 1);\r\n\t\t\t\tself.changed = true;\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Filter Error - No matching filter type found, ignoring: \", filter.type);\r\n\t\t\t}\r\n\r\n\t\t});\r\n\r\n\t\tif(this.table.options.persistence && this.table.modExists(\"persistence\", true) && this.table.modules.persistence.config.filter){\r\n\t\t\tthis.table.modules.persistence.save(\"filter\");\r\n\t\t}\r\n\t}\r\n\r\n\t//clear filters\r\n\tclearFilter(all){\r\n\t\tthis.filterList = [];\r\n\r\n\t\tif(all){\r\n\t\t\tthis.clearHeaderFilter();\r\n\t\t}\r\n\r\n\t\tthis.changed = true;\r\n\r\n\t\tif(this.table.options.persistence && this.table.modExists(\"persistence\", true) && this.table.modules.persistence.config.filter){\r\n\t\t\tthis.table.modules.persistence.save(\"filter\");\r\n\t\t}\r\n\t}\r\n\r\n\t//clear header filters\r\n\tclearHeaderFilter(){\r\n\t\tvar self = this;\r\n\r\n\t\tthis.headerFilters = {};\r\n\t\tself.prevHeaderFilterChangeCheck = \"{}\";\r\n\r\n\t\tthis.headerFilterColumns.forEach(function(column){\r\n\t\t\tif(typeof column.modules.filter.value !== \"undefined\"){\r\n\t\t\t\tdelete column.modules.filter.value;\r\n\t\t\t}\r\n\t\t\tcolumn.modules.filter.prevSuccess = undefined;\r\n\t\t\tself.reloadHeaderFilter(column);\r\n\t\t});\r\n\r\n\t\tthis.changed = true;\r\n\t}\r\n\r\n\t//search data and return matching rows\r\n\tsearch (searchType, field, type, value){\r\n\t\tvar self = this,\r\n\t\tactiveRows = [],\r\n\t\tfilterList = [];\r\n\r\n\t\tif(!Array.isArray(field)){\r\n\t\t\tfield = [{field:field, type:type, value:value}];\r\n\t\t}\r\n\r\n\t\tfield.forEach(function(filter){\r\n\t\t\tfilter = self.findFilter(filter);\r\n\r\n\t\t\tif(filter){\r\n\t\t\t\tfilterList.push(filter);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tthis.table.rowManager.rows.forEach(function(row){\r\n\t\t\tvar match = true;\r\n\r\n\t\t\tfilterList.forEach(function(filter){\r\n\t\t\t\tif(!self.filterRecurse(filter, row.getData())){\r\n\t\t\t\t\tmatch = false;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tif(match){\r\n\t\t\t\tactiveRows.push(searchType === \"data\" ? row.getData(\"data\") : row.getComponent());\r\n\t\t\t}\r\n\r\n\t\t});\r\n\r\n\t\treturn activeRows;\r\n\t}\r\n\r\n\t//filter row array\r\n\tfilter(rowList, filters){\r\n\t\tvar self = this,\r\n\t\tactiveRows = [],\r\n\t\tactiveRowComponents = [];\r\n\r\n\t\tif(self.table.options.dataFiltering){\r\n\t\t\tself.table.options.dataFiltering.call(self.table, self.getFilters());\r\n\t\t}\r\n\r\n\t\tif(!self.table.options.ajaxFiltering && (self.filterList.length || Object.keys(self.headerFilters).length)){\r\n\r\n\t\t\trowList.forEach(function(row){\r\n\t\t\t\tif(self.filterRow(row)){\r\n\t\t\t\t\tactiveRows.push(row);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t}else{\r\n\t\t\tactiveRows = rowList.slice(0);\r\n\t\t}\r\n\r\n\t\tif(self.table.options.dataFiltered){\r\n\r\n\t\t\tactiveRows.forEach(function(row){\r\n\t\t\t\tactiveRowComponents.push(row.getComponent());\r\n\t\t\t});\r\n\r\n\t\t\tself.table.options.dataFiltered.call(self.table, self.getFilters(), activeRowComponents);\r\n\t\t}\r\n\r\n\t\treturn activeRows;\r\n\t}\r\n\r\n\t//filter individual row\r\n\tfilterRow(row, filters){\r\n\t\tvar self = this,\r\n\t\tmatch = true,\r\n\t\tdata = row.getData();\r\n\r\n\t\tself.filterList.forEach(function(filter){\r\n\t\t\tif(!self.filterRecurse(filter, data)){\r\n\t\t\t\tmatch = false;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\r\n\t\tfor(var field in self.headerFilters){\r\n\t\t\tif(!self.headerFilters[field].func(data)){\r\n\t\t\t\tmatch = false;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn match;\r\n\t}\r\n\r\n\tfilterRecurse(filter, data){\r\n\t\tvar self = this,\r\n\t\tmatch = false;\r\n\r\n\t\tif(Array.isArray(filter)){\r\n\t\t\tfilter.forEach(function(subFilter){\r\n\t\t\t\tif(self.filterRecurse(subFilter, data)){\r\n\t\t\t\t\tmatch = true;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tmatch = filter.func(data);\r\n\t\t}\r\n\r\n\t\treturn match;\r\n\t}\r\n}\r\n\r\nFilter.moduleName = \"filter\";\r\n\r\n//load defaults\r\nFilter.filters = defaultFilters;\r\n\r\nexport default Filter;","import plaintext from './formatters/plaintext.js';\r\nimport html from './formatters/html.js';\r\nimport textarea from './formatters/textarea.js';\r\nimport money from './formatters/money.js';\r\nimport link from './formatters/link.js';\r\nimport image from './formatters/image.js';\r\nimport tickCross from './formatters/tickCross.js';\r\nimport datetime from './formatters/datetime.js';\r\nimport datetimediff from './formatters/datetimediff.js';\r\nimport lookup from './formatters/lookup.js';\r\nimport star from './formatters/star.js';\r\nimport traffic from './formatters/traffic.js';\r\nimport progress from './formatters/progress.js';\r\nimport color from './formatters/color.js';\r\nimport buttonTick from './formatters/buttonTick.js';\r\nimport buttonCross from './formatters/buttonCross.js';\r\nimport rownum from './formatters/rownum.js';\r\nimport handle from './formatters/handle.js';\r\nimport responsiveCollapse from './formatters/responsiveCollapse.js';\r\nimport rowSelection from './formatters/rowSelection.js';\r\n\r\nexport default {\r\n\tplaintext:plaintext,\r\n\thtml:html,\r\n\ttextarea:textarea,\r\n\tmoney:money,\r\n\tlink:link,\r\n\timage:image,\r\n\ttickCross:tickCross,\r\n\tdatetime:datetime,\r\n\tdatetimediff:datetimediff,\r\n\tlookup:lookup,\r\n\tstar:star,\r\n\ttraffic:traffic,\r\n\tprogress:progress,\r\n\tcolor:color,\r\n\tbuttonTick:buttonTick,\r\n\tbuttonCross:buttonCross,\r\n\trownum:rownum,\r\n\thandle:handle,\r\n\tresponsiveCollapse:responsiveCollapse,\r\n\trowSelection:rowSelection,\r\n};","export default function(cell, formatterParams, onRendered){\r\n\treturn this.emptyToSpace(this.sanitizeHTML(cell.getValue()));\r\n};","export default function(cell, formatterParams, onRendered){\r\n\treturn cell.getValue();\r\n};","export default function(cell, formatterParams, onRendered){\r\n\tcell.getElement().style.whiteSpace = \"pre-wrap\";\r\n\treturn this.emptyToSpace(this.sanitizeHTML(cell.getValue()));\r\n};","export default function(cell, formatterParams, onRendered){\r\n\tvar floatVal = parseFloat(cell.getValue()),\r\n\tnumber, integer, decimal, rgx;\r\n\r\n\tvar decimalSym = formatterParams.decimal || \".\";\r\n\tvar thousandSym = formatterParams.thousand || \",\";\r\n\tvar symbol = formatterParams.symbol || \"\";\r\n\tvar after = !!formatterParams.symbolAfter;\r\n\tvar precision = typeof formatterParams.precision !== \"undefined\" ? formatterParams.precision : 2;\r\n\r\n\tif(isNaN(floatVal)){\r\n\t\treturn this.emptyToSpace(this.sanitizeHTML(cell.getValue()));\r\n\t}\r\n\r\n\tnumber = precision !== false ? floatVal.toFixed(precision) : floatVal;\r\n\tnumber = String(number).split(\".\");\r\n\r\n\tinteger = number[0];\r\n\tdecimal = number.length > 1 ? decimalSym + number[1] : \"\";\r\n\r\n\trgx = /(\\d+)(\\d{3})/;\r\n\r\n\twhile (rgx.test(integer)){\r\n\t\tinteger = integer.replace(rgx, \"$1\" + thousandSym + \"$2\");\r\n\t}\r\n\r\n\treturn after ? integer + decimal + symbol : symbol + integer + decimal;\r\n};","export default function(cell, formatterParams, onRendered){\r\n\tvar value = cell.getValue(),\r\n\turlPrefix = formatterParams.urlPrefix || \"\",\r\n\tdownload = formatterParams.download,\r\n\tlabel = value,\r\n\tel = document.createElement(\"a\"),\r\n\tdata;\r\n\r\n\tif(formatterParams.labelField){\r\n\t\tdata = cell.getData();\r\n\t\tlabel = data[formatterParams.labelField];\r\n\t}\r\n\r\n\tif(formatterParams.label){\r\n\t\tswitch(typeof formatterParams.label){\r\n\t\t\tcase \"string\":\r\n\t\t\tlabel = formatterParams.label;\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"function\":\r\n\t\t\tlabel = formatterParams.label(cell);\r\n\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\tif(label){\r\n\t\tif(formatterParams.urlField){\r\n\t\t\tdata = cell.getData();\r\n\t\t\tvalue = data[formatterParams.urlField];\r\n\t\t}\r\n\r\n\t\tif(formatterParams.url){\r\n\t\t\tswitch(typeof formatterParams.url){\r\n\t\t\t\tcase \"string\":\r\n\t\t\t\tvalue = formatterParams.url;\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"function\":\r\n\t\t\t\tvalue = formatterParams.url(cell);\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tel.setAttribute(\"href\", urlPrefix + value);\r\n\r\n\t\tif(formatterParams.target){\r\n\t\t\tel.setAttribute(\"target\", formatterParams.target);\r\n\t\t}\r\n\r\n\t\tif(formatterParams.download){\r\n\r\n\t\t\tif(typeof download == \"function\"){\r\n\t\t\t\tdownload = download(cell);\r\n\t\t\t}else{\r\n\t\t\t\tdownload = download === true ? \"\" : download;\r\n\t\t\t}\r\n\r\n\t\t\tel.setAttribute(\"download\", download);\r\n\t\t}\r\n\r\n\t\tel.innerHTML = this.emptyToSpace(this.sanitizeHTML(label));\r\n\r\n\t\treturn el;\r\n\t}else{\r\n\t\treturn \" \";\r\n\t}\r\n};","export default function(cell, formatterParams, onRendered){\r\n\tvar el = document.createElement(\"img\"),\r\n\tsrc = cell.getValue();\r\n\r\n\tif(formatterParams.urlPrefix){\r\n\t\tsrc = formatterParams.urlPrefix + cell.getValue();\r\n\t}\r\n\r\n\tif(formatterParams.urlSuffix){\r\n\t\tsrc = src + formatterParams.urlSuffix;\r\n\t}\r\n\r\n\tel.setAttribute(\"src\", src);\r\n\r\n\tswitch(typeof formatterParams.height){\r\n\t\tcase \"number\":\r\n\t\tel.style.height = formatterParams.height + \"px\";\r\n\t\tbreak;\r\n\r\n\t\tcase \"string\":\r\n\t\tel.style.height = formatterParams.height;\r\n\t\tbreak;\r\n\t}\r\n\r\n\tswitch(typeof formatterParams.width){\r\n\t\tcase \"number\":\r\n\t\tel.style.width = formatterParams.width + \"px\";\r\n\t\tbreak;\r\n\r\n\t\tcase \"string\":\r\n\t\tel.style.width = formatterParams.width;\r\n\t\tbreak;\r\n\t}\r\n\r\n\tel.addEventListener(\"load\", function(){\r\n\t\tcell.getRow().normalizeHeight();\r\n\t});\r\n\r\n\treturn el;\r\n};","export default function(cell, formatterParams, onRendered){\r\n\tvar value = cell.getValue(),\r\n\telement = cell.getElement(),\r\n\tempty = formatterParams.allowEmpty,\r\n\ttruthy = formatterParams.allowTruthy,\r\n\ttick = typeof formatterParams.tickElement !== \"undefined\" ? formatterParams.tickElement : '',\r\n\tcross = typeof formatterParams.crossElement !== \"undefined\" ? formatterParams.crossElement : '';\r\n\r\n\tif((truthy && value) || (value === true || value === \"true\" || value === \"True\" || value === 1 || value === \"1\")){\r\n\t\telement.setAttribute(\"aria-checked\", true);\r\n\t\treturn tick || \"\";\r\n\t}else{\r\n\t\tif(empty && (value === \"null\" || value === \"\" || value === null || typeof value === \"undefined\")){\r\n\t\t\telement.setAttribute(\"aria-checked\", \"mixed\");\r\n\t\t\treturn \"\";\r\n\t\t}else{\r\n\t\t\telement.setAttribute(\"aria-checked\", false);\r\n\t\t\treturn cross || \"\";\r\n\t\t}\r\n\t}\r\n};","export default function(cell, formatterParams, onRendered){\r\n\tvar inputFormat = formatterParams.inputFormat || \"YYYY-MM-DD hh:mm:ss\";\r\n\tvar\toutputFormat = formatterParams.outputFormat || \"DD/MM/YYYY hh:mm:ss\";\r\n\tvar\tinvalid = typeof formatterParams.invalidPlaceholder !== \"undefined\" ? formatterParams.invalidPlaceholder : \"\";\r\n\tvar value = cell.getValue();\r\n\r\n\tvar newDatetime = moment(value, inputFormat);\r\n\r\n\tif(newDatetime.isValid()){\r\n\t\treturn formatterParams.timezone ? newDatetime.tz(formatterParams.timezone).format(outputFormat) : newDatetime.format(outputFormat);\r\n\t}else{\r\n\r\n\t\tif(invalid === true){\r\n\t\t\treturn value;\r\n\t\t}else if(typeof invalid === \"function\"){\r\n\t\t\treturn invalid(value);\r\n\t\t}else{\r\n\t\t\treturn invalid;\r\n\t\t}\r\n\t}\r\n};","export default function datetime(cell, formatterParams, onRendered) {\r\n\tvar inputFormat = formatterParams.inputFormat || \"YYYY-MM-DD hh:mm:ss\";\r\n\tvar invalid = typeof formatterParams.invalidPlaceholder !== \"undefined\" ? formatterParams.invalidPlaceholder : \"\";\r\n\tvar suffix = typeof formatterParams.suffix !== \"undefined\" ? formatterParams.suffix : false;\r\n\tvar unit = typeof formatterParams.unit !== \"undefined\" ? formatterParams.unit : undefined;\r\n\tvar humanize = typeof formatterParams.humanize !== \"undefined\" ? formatterParams.humanize : false;\r\n\tvar date = typeof formatterParams.date !== \"undefined\" ? formatterParams.date : moment();\r\n\tvar value = cell.getValue();\r\n\r\n\tvar newDatetime = moment(value, inputFormat);\r\n\r\n\tif (newDatetime.isValid()) {\r\n\t\tif(humanize){\r\n\t\t\treturn moment.duration(newDatetime.diff(date)).humanize(suffix);\r\n\t\t}else{\r\n\t\t\treturn newDatetime.diff(date, unit) + (suffix ? \" \" + suffix : \"\");\r\n\t\t}\r\n\r\n\t} else {\r\n\r\n\t\tif (invalid === true) {\r\n\t\t\treturn value;\r\n\t\t} else if (typeof invalid === \"function\") {\r\n\t\t\treturn invalid(value);\r\n\t\t} else {\r\n\t\t\treturn invalid;\r\n\t\t}\r\n\t}\r\n};","export default function (cell, formatterParams, onRendered) {\r\n\tvar value = cell.getValue();\r\n\r\n\tif (typeof formatterParams[value] === \"undefined\") {\r\n\t\tconsole.warn('Missing display value for ' + value);\r\n\t\treturn value;\r\n\t}\r\n\r\n\treturn formatterParams[value];\r\n};","export default function(cell, formatterParams, onRendered){\r\n\tvar value = cell.getValue(),\r\n\telement = cell.getElement(),\r\n\tmaxStars = formatterParams && formatterParams.stars ? formatterParams.stars : 5,\r\n\tstars = document.createElement(\"span\"),\r\n\tstar = document.createElementNS('http://www.w3.org/2000/svg', \"svg\"),\r\n\tstarActive = '',\r\n\tstarInactive = '';\r\n\r\n\t//style stars holder\r\n\tstars.style.verticalAlign = \"middle\";\r\n\r\n\t//style star\r\n\tstar.setAttribute(\"width\", \"14\");\r\n\tstar.setAttribute(\"height\", \"14\");\r\n\tstar.setAttribute(\"viewBox\", \"0 0 512 512\");\r\n\tstar.setAttribute(\"xml:space\", \"preserve\");\r\n\tstar.style.padding = \"0 1px\";\r\n\r\n\tvalue = value && !isNaN(value) ? parseInt(value) : 0;\r\n\r\n\tvalue = Math.max(0, Math.min(value, maxStars));\r\n\r\n\tfor(var i=1;i<= maxStars;i++){\r\n\t\tvar nextStar = star.cloneNode(true);\r\n\t\tnextStar.innerHTML = i <= value ? starActive : starInactive;\r\n\r\n\t\tstars.appendChild(nextStar);\r\n\t}\r\n\r\n\telement.style.whiteSpace = \"nowrap\";\r\n\telement.style.overflow = \"hidden\";\r\n\telement.style.textOverflow = \"ellipsis\";\r\n\r\n\telement.setAttribute(\"aria-label\", value);\r\n\r\n\treturn stars;\r\n};","export default function(cell, formatterParams, onRendered){\r\n\tvar value = this.sanitizeHTML(cell.getValue()) || 0,\r\n\tel = document.createElement(\"span\"),\r\n\tmax = formatterParams && formatterParams.max ? formatterParams.max : 100,\r\n\tmin = formatterParams && formatterParams.min ? formatterParams.min : 0,\r\n\tcolors = formatterParams && typeof formatterParams.color !== \"undefined\" ? formatterParams.color : [\"red\", \"orange\", \"green\"],\r\n\tcolor = \"#666666\",\r\n\tpercent, percentValue;\r\n\r\n\tif(isNaN(value) || typeof cell.getValue() === \"undefined\"){\r\n\t\treturn;\r\n\t}\r\n\r\n\tel.classList.add(\"tabulator-traffic-light\");\r\n\r\n\t//make sure value is in range\r\n\tpercentValue = parseFloat(value) <= max ? parseFloat(value) : max;\r\n\tpercentValue = parseFloat(percentValue) >= min ? parseFloat(percentValue) : min;\r\n\r\n\t//workout percentage\r\n\tpercent = (max - min) / 100;\r\n\tpercentValue = Math.round((percentValue - min) / percent);\r\n\r\n\t//set color\r\n\tswitch(typeof colors){\r\n\t\tcase \"string\":\r\n\t\tcolor = colors;\r\n\t\tbreak;\r\n\t\tcase \"function\":\r\n\t\tcolor = colors(value);\r\n\t\tbreak;\r\n\t\tcase \"object\":\r\n\t\tif(Array.isArray(colors)){\r\n\t\t\tvar unit = 100 / colors.length;\r\n\t\t\tvar index = Math.floor(percentValue / unit);\r\n\r\n\t\t\tindex = Math.min(index, colors.length - 1);\r\n\t\t\tindex = Math.max(index, 0);\r\n\t\t\tcolor = colors[index];\r\n\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\tel.style.backgroundColor = color;\r\n\r\n\treturn el;\r\n};","export default function(cell, formatterParams, onRendered){ //progress bar\r\n\tvar value = this.sanitizeHTML(cell.getValue()) || 0,\r\n\telement = cell.getElement(),\r\n\tmax = formatterParams && formatterParams.max ? formatterParams.max : 100,\r\n\tmin = formatterParams && formatterParams.min ? formatterParams.min : 0,\r\n\tlegendAlign = formatterParams && formatterParams.legendAlign ? formatterParams.legendAlign : \"center\",\r\n\tpercent, percentValue, color, legend, legendColor, top, left, right, bottom;\r\n\r\n\t//make sure value is in range\r\n\tpercentValue = parseFloat(value) <= max ? parseFloat(value) : max;\r\n\tpercentValue = parseFloat(percentValue) >= min ? parseFloat(percentValue) : min;\r\n\r\n\t//workout percentage\r\n\tpercent = (max - min) / 100;\r\n\tpercentValue = Math.round((percentValue - min) / percent);\r\n\r\n\t//set bar color\r\n\tswitch(typeof formatterParams.color){\r\n\t\tcase \"string\":\r\n\t\tcolor = formatterParams.color;\r\n\t\tbreak;\r\n\t\tcase \"function\":\r\n\t\tcolor = formatterParams.color(value);\r\n\t\tbreak;\r\n\t\tcase \"object\":\r\n\t\tif(Array.isArray(formatterParams.color)){\r\n\t\t\tvar unit = 100 / formatterParams.color.length;\r\n\t\t\tvar index = Math.floor(percentValue / unit);\r\n\r\n\t\t\tindex = Math.min(index, formatterParams.color.length - 1);\r\n\t\t\tindex = Math.max(index, 0);\r\n\t\t\tcolor = formatterParams.color[index];\r\n\t\t\tbreak;\r\n\t\t}\r\n\t\tdefault:\r\n\t\tcolor = \"#2DC214\";\r\n\t}\r\n\r\n\t//generate legend\r\n\tswitch(typeof formatterParams.legend){\r\n\t\tcase \"string\":\r\n\t\tlegend = formatterParams.legend;\r\n\t\tbreak;\r\n\t\tcase \"function\":\r\n\t\tlegend = formatterParams.legend(value);\r\n\t\tbreak;\r\n\t\tcase \"boolean\":\r\n\t\tlegend = value;\r\n\t\tbreak;\r\n\t\tdefault:\r\n\t\tlegend = false;\r\n\t}\r\n\r\n\t//set legend color\r\n\tswitch(typeof formatterParams.legendColor){\r\n\t\tcase \"string\":\r\n\t\tlegendColor = formatterParams.legendColor;\r\n\t\tbreak;\r\n\t\tcase \"function\":\r\n\t\tlegendColor = formatterParams.legendColor(value);\r\n\t\tbreak;\r\n\t\tcase \"object\":\r\n\t\tif(Array.isArray(formatterParams.legendColor)){\r\n\t\t\tvar unit = 100 / formatterParams.legendColor.length;\r\n\t\t\tvar index = Math.floor(percentValue / unit);\r\n\r\n\t\t\tindex = Math.min(index, formatterParams.legendColor.length - 1);\r\n\t\t\tindex = Math.max(index, 0);\r\n\t\t\tlegendColor = formatterParams.legendColor[index];\r\n\t\t}\r\n\t\tbreak;\r\n\t\tdefault:\r\n\t\tlegendColor = \"#000\";\r\n\t}\r\n\r\n\telement.style.minWidth = \"30px\";\r\n\telement.style.position = \"relative\";\r\n\r\n\telement.setAttribute(\"aria-label\", percentValue);\r\n\r\n\tvar barEl = document.createElement(\"div\");\r\n\tbarEl.style.display = \"inline-block\";\r\n\tbarEl.style.position = \"relative\";\r\n\tbarEl.style.width = percentValue + \"%\";\r\n\tbarEl.style.backgroundColor = color;\r\n\tbarEl.style.height = \"100%\";\r\n\r\n\tbarEl.setAttribute('data-max', max);\r\n\tbarEl.setAttribute('data-min', min);\r\n\r\n\r\n\tif(legend){\r\n\t\tvar legendEl = document.createElement(\"div\");\r\n\t\tlegendEl.style.position = \"absolute\";\r\n\t\tlegendEl.style.top = \"4px\";\r\n\t\tlegendEl.style.left = 0;\r\n\t\tlegendEl.style.textAlign = legendAlign;\r\n\t\tlegendEl.style.width = \"100%\";\r\n\t\tlegendEl.style.color = legendColor;\r\n\t\tlegendEl.innerHTML = legend;\r\n\t}\r\n\r\n\tonRendered(function(){\r\n\r\n\t\t//handle custom element needed if formatter is to be included in printed/downloaded output\r\n\t\tif(!(cell instanceof CellComponent)){\r\n\t\t\tvar holderEl = document.createElement(\"div\");\r\n\t\t\tholderEl.style.position = \"absolute\";\r\n\t\t\tholderEl.style.top = \"4px\";\r\n\t\t\tholderEl.style.bottom = \"4px\";\r\n\t\t\tholderEl.style.left = \"4px\";\r\n\t\t\tholderEl.style.right = \"4px\";\r\n\r\n\t\t\telement.appendChild(holderEl);\r\n\r\n\t\t\telement = holderEl;\r\n\t\t}\r\n\r\n\t\telement.appendChild(barEl);\r\n\r\n\t\tif(legend){\r\n\t\t\telement.appendChild(legendEl);\r\n\t\t}\r\n\t});\r\n\r\n\treturn \"\";\r\n};","export default function(cell, formatterParams, onRendered){\r\n\tcell.getElement().style.backgroundColor = this.sanitizeHTML(cell.getValue());\r\n\treturn \"\";\r\n};","export default function(cell, formatterParams, onRendered){\r\n\treturn '';\r\n};","export default function(cell, formatterParams, onRendered){\r\n\treturn '';\r\n};","export default function(cell, formatterParams, onRendered){\r\n\treturn this.table.rowManager.activeRows.indexOf(cell.getRow()._getSelf()) + 1;\r\n};","export default function(cell, formatterParams, onRendered){\r\n\tcell.getElement().classList.add(\"tabulator-row-handle\");\r\n\treturn \"
\";\r\n};","export default function(cell, formatterParams, onRendered){\r\n\tvar open = false,\r\n\tel = document.createElement(\"div\"),\r\n\tconfig = cell.getRow()._row.modules.responsiveLayout;\r\n\r\n\tel.classList.add(\"tabulator-responsive-collapse-toggle\");\r\n\tel.innerHTML = \"+-\";\r\n\r\n\tcell.getElement().classList.add(\"tabulator-row-handle\");\r\n\r\n\tfunction toggleList(isOpen){\r\n\t\tvar collapseEl = config.element;\r\n\r\n\t\tconfig.open = isOpen;\r\n\r\n\t\tif(collapseEl){\r\n\r\n\t\t\tif(config.open){\r\n\t\t\t\tel.classList.add(\"open\");\r\n\t\t\t\tcollapseEl.style.display = '';\r\n\t\t\t}else{\r\n\t\t\t\tel.classList.remove(\"open\");\r\n\t\t\t\tcollapseEl.style.display = 'none';\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tel.addEventListener(\"click\", function(e){\r\n\t\te.stopImmediatePropagation();\r\n\t\ttoggleList(!config.open);\r\n\t});\r\n\r\n\ttoggleList(config.open);\r\n\r\n\treturn el;\r\n};","export default function(cell, formatterParams, onRendered){\r\n\tvar checkbox = document.createElement(\"input\");\r\n\r\n\tcheckbox.type = 'checkbox';\r\n\r\n\tif(this.table.modExists(\"selectRow\", true)){\r\n\r\n\t\tcheckbox.addEventListener(\"click\", (e) => {\r\n\t\t\te.stopPropagation();\r\n\t\t});\r\n\r\n\t\tif(typeof cell.getRow == 'function'){\r\n\t\t\tvar row = cell.getRow();\r\n\r\n\t\t\tif(row instanceof RowComponent){\r\n\r\n\t\t\t\tcheckbox.addEventListener(\"change\", (e) => {\r\n\t\t\t\t\trow.toggleSelect();\r\n\t\t\t\t});\r\n\r\n\t\t\t\tcheckbox.checked = row.isSelected && row.isSelected();\r\n\t\t\t\tthis.table.modules.selectRow.registerRowSelectCheckbox(row, checkbox);\r\n\t\t\t}else{\r\n\t\t\t\tcheckbox = \"\";\r\n\t\t\t}\r\n\t\t}else {\r\n\t\t\tcheckbox.addEventListener(\"change\", (e) => {\r\n\t\t\t\tif(this.table.modules.selectRow.selectedRows.length){\r\n\t\t\t\t\tthis.table.deselectRow();\r\n\t\t\t\t}else {\r\n\t\t\t\t\tthis.table.selectRow(formatterParams.rowRange);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tthis.table.modules.selectRow.registerHeaderSelectCheckbox(checkbox);\r\n\t\t}\r\n\t}\r\n\r\n\treturn checkbox;\r\n};","import Module from '../../core/Module.js';\r\n\r\nimport defaultFormatters from './defaults/formatters.js';\r\n\r\nclass Format extends Module{\r\n\r\n\t//initialize column formatter\r\n\tinitializeColumn(column){\r\n\t\tcolumn.modules.format = this.lookupFormatter(column, \"\");\r\n\r\n\t\tif(typeof column.definition.formatterPrint !== \"undefined\"){\r\n\t\t\tcolumn.modules.format.print = this.lookupFormatter(column, \"Print\");\r\n\t\t}\r\n\r\n\t\tif(typeof column.definition.formatterClipboard !== \"undefined\"){\r\n\t\t\tcolumn.modules.format.clipboard = this.lookupFormatter(column, \"Clipboard\");\r\n\t\t}\r\n\r\n\t\tif(typeof column.definition.formatterHtmlOutput !== \"undefined\"){\r\n\t\t\tcolumn.modules.format.htmlOutput = this.lookupFormatter(column, \"HtmlOutput\");\r\n\t\t}\r\n\t}\r\n\r\n\tlookupFormatter(column, type){\r\n\t\tvar config = {params:column.definition[\"formatter\" + type + \"Params\"] || {}},\r\n\t\tformatter = column.definition[\"formatter\" + type];\r\n\r\n\t\t//set column formatter\r\n\t\tswitch(typeof formatter){\r\n\t\t\tcase \"string\":\r\n\t\t\tif(Format.formatters[formatter]){\r\n\t\t\t\tconfig.formatter = Format.formatters[formatter];\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Formatter Error - No such formatter found: \", formatter);\r\n\t\t\t\tconfig.formatter = Format.formatters.plaintext;\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"function\":\r\n\t\t\tconfig.formatter = formatter;\r\n\t\t\tbreak;\r\n\r\n\t\t\tdefault:\r\n\t\t\tconfig.formatter = Format.formatters.plaintext;\r\n\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\treturn config;\r\n\t}\r\n\r\n\tcellRendered(cell){\r\n\t\tif(cell.modules.format && cell.modules.format.renderedCallback && !cell.modules.format.rendered){\r\n\t\t\tcell.modules.format.renderedCallback();\r\n\t\t\tcell.modules.format.rendered = true;\r\n\t\t}\r\n\t}\r\n\r\n\t//return a formatted value for a cell\r\n\tformatValue(cell){\r\n\t\tvar component = cell.getComponent(),\r\n\t\tparams = typeof cell.column.modules.format.params === \"function\" ? cell.column.modules.format.params(component) : cell.column.modules.format.params;\r\n\r\n\t\tfunction onRendered(callback){\r\n\t\t\tif(!cell.modules.format){\r\n\t\t\t\tcell.modules.format = {};\r\n\t\t\t}\r\n\r\n\t\t\tcell.modules.format.renderedCallback = callback;\r\n\t\t\tcell.modules.format.rendered = false;\r\n\t\t}\r\n\r\n\t\treturn cell.column.modules.format.formatter.call(this, component, params, onRendered);\r\n\t}\r\n\r\n\tformatExportValue(cell, type){\r\n\t\tvar formatter = cell.column.modules.format[type],\r\n\t\tparams;\r\n\r\n\t\tif(formatter){\r\n\t\t\tparams = typeof formatter.params === \"function\" ? formatter.params(component) : formatter.params;\r\n\r\n\t\t\tfunction onRendered(callback){\r\n\t\t\t\tif(!cell.modules.format){\r\n\t\t\t\t\tcell.modules.format = {};\r\n\t\t\t\t}\r\n\r\n\t\t\t\tcell.modules.format.renderedCallback = callback;\r\n\t\t\t\tcell.modules.format.rendered = false;\r\n\t\t\t}\r\n\r\n\t\t\treturn formatter.formatter.call(this, cell.getComponent(), params, onRendered);\r\n\r\n\t\t}else{\r\n\t\t\treturn this.formatValue(cell);\r\n\t\t}\r\n\t}\r\n\r\n\tsanitizeHTML(value){\r\n\t\tif(value){\r\n\t\t\tvar entityMap = {\r\n\t\t\t\t'&': '&',\r\n\t\t\t\t'<': '<',\r\n\t\t\t\t'>': '>',\r\n\t\t\t\t'\"': '"',\r\n\t\t\t\t\"'\": ''',\r\n\t\t\t\t'/': '/',\r\n\t\t\t\t'`': '`',\r\n\t\t\t\t'=': '='\r\n\t\t\t};\r\n\r\n\t\t\treturn String(value).replace(/[&<>\"'`=\\/]/g, function (s) {\r\n\t\t\t\treturn entityMap[s];\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\treturn value;\r\n\t\t}\r\n\t}\r\n\r\n\temptyToSpace(value){\r\n\t\treturn value === null || typeof value === \"undefined\" || value === \"\" ? \" \" : value;\r\n\t}\r\n\r\n\t//get formatter for cell\r\n\tgetFormatter(formatter){\r\n\t\tvar formatter;\r\n\r\n\t\tswitch(typeof formatter){\r\n\t\t\tcase \"string\":\r\n\t\t\tif(Format.formatters[formatter]){\r\n\t\t\t\tformatter = Format.formatters[formatter]\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Formatter Error - No such formatter found: \", formatter);\r\n\t\t\t\tformatter = Format.formatters.plaintext;\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"function\":\r\n\t\t\tformatter = formatter;\r\n\t\t\tbreak;\r\n\r\n\t\t\tdefault:\r\n\t\t\tformatter = Format.formatters.plaintext;\r\n\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\treturn formatter;\r\n\t}\r\n}\r\n\r\nFormat.moduleName = \"format\";\r\n\r\n//load defaults\r\nFormat.formatters = defaultFormatters;\r\n\r\nexport default Format;","import Module from '../../core/Module.js';\r\n\r\nclass FrozenColumns extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.leftColumns = [];\r\n\t\tthis.rightColumns = [];\r\n\t\tthis.leftMargin = 0;\r\n\t\tthis.rightMargin = 0;\r\n\t\tthis.rightPadding = 0;\r\n\t\tthis.initializationMode = \"left\";\r\n\t\tthis.active = false;\r\n\t\tthis.scrollEndTimer = false;\r\n\t}\r\n\r\n\t//reset initial state\r\n\treset(){\r\n\t\tthis.initializationMode = \"left\";\r\n\t\tthis.leftColumns = [];\r\n\t\tthis.rightColumns = [];\r\n\t\tthis.leftMargin = 0;\r\n\t\tthis.rightMargin = 0;\r\n\t\tthis.rightMargin = 0;\r\n\t\tthis.active = false;\r\n\r\n\t\tthis.table.columnManager.headersElement.style.marginLeft = 0;\r\n\t\tthis.table.columnManager.element.style.paddingRight = 0;\r\n\t}\r\n\r\n\t//initialize specific column\r\n\tinitializeColumn(column){\r\n\t\tvar config = {margin:0, edge:false};\r\n\r\n\t\tif(!column.isGroup){\r\n\r\n\t\t\tif(this.frozenCheck(column)){\r\n\r\n\t\t\t\tconfig.position = this.initializationMode;\r\n\r\n\t\t\t\tif(this.initializationMode == \"left\"){\r\n\t\t\t\t\tthis.leftColumns.push(column);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tthis.rightColumns.unshift(column);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.active = true;\r\n\r\n\t\t\t\tcolumn.modules.frozen = config;\r\n\t\t\t}else{\r\n\t\t\t\tthis.initializationMode = \"right\";\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tfrozenCheck(column){\r\n\t\tvar frozen = false;\r\n\r\n\t\tif(column.parent.isGroup && column.definition.frozen){\r\n\t\t\tconsole.warn(\"Frozen Column Error - Parent column group must be frozen, not individual columns or sub column groups\");\r\n\t\t}\r\n\r\n\t\tif(column.parent.isGroup){\r\n\t\t\treturn this.frozenCheck(column.parent);\r\n\t\t}else{\r\n\t\t\treturn column.definition.frozen;\r\n\t\t}\r\n\r\n\t\treturn frozen;\r\n\t}\r\n\r\n\t//quick layout to smooth horizontal scrolling\r\n\tscrollHorizontal(){\r\n\t\tvar rows;\r\n\r\n\t\tif(this.active){\r\n\t\t\tclearTimeout(this.scrollEndTimer);\r\n\r\n\t\t\t//layout all rows after scroll is complete\r\n\t\t\tthis.scrollEndTimer = setTimeout(() => {\r\n\t\t\t\tthis.layout();\r\n\t\t\t}, 100);\r\n\r\n\t\t\trows = this.table.rowManager.getVisibleRows();\r\n\r\n\t\t\tthis.calcMargins();\r\n\r\n\t\t\tthis.layoutColumnPosition();\r\n\r\n\t\t\tthis.layoutCalcRows();\r\n\r\n\t\t\trows.forEach((row) => {\r\n\t\t\t\tif(row.type === \"row\"){\r\n\t\t\t\t\tthis.layoutRow(row);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tthis.table.rowManager.tableElement.style.marginRight = this.rightMargin;\r\n\t\t}\r\n\t}\r\n\r\n\t//calculate margins for rows\r\n\tcalcMargins(){\r\n\t\tthis.leftMargin = this._calcSpace(this.leftColumns, this.leftColumns.length) + \"px\";\r\n\t\tthis.table.columnManager.headersElement.style.marginLeft = this.leftMargin;\r\n\r\n\t\tthis.rightMargin = this._calcSpace(this.rightColumns, this.rightColumns.length) + \"px\";\r\n\t\tthis.table.columnManager.element.style.paddingRight = this.rightMargin;\r\n\r\n\t\t//calculate right frozen columns\r\n\t\tthis.rightPadding = this.table.rowManager.element.clientWidth + this.table.columnManager.scrollLeft;\r\n\t}\r\n\r\n\t//layout calculation rows\r\n\tlayoutCalcRows(){\r\n\t\tif(this.table.modExists(\"columnCalcs\")){\r\n\t\t\tif(this.table.modules.columnCalcs.topInitialized && this.table.modules.columnCalcs.topRow){\r\n\t\t\t\tthis.layoutRow(this.table.modules.columnCalcs.topRow);\r\n\t\t\t}\r\n\t\t\tif(this.table.modules.columnCalcs.botInitialized && this.table.modules.columnCalcs.botRow){\r\n\t\t\t\tthis.layoutRow(this.table.modules.columnCalcs.botRow);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//calculate column positions and layout headers\r\n\tlayoutColumnPosition(allCells){\r\n\r\n\t\tvar leftParents = [];\r\n\r\n\t\tthis.leftColumns.forEach((column, i) => {\r\n\t\t\tcolumn.modules.frozen.margin = (this._calcSpace(this.leftColumns, i) + this.table.columnManager.scrollLeft) + \"px\";\r\n\r\n\t\t\tif(i == this.leftColumns.length - 1){\r\n\t\t\t\tcolumn.modules.frozen.edge = true;\r\n\t\t\t}else{\r\n\t\t\t\tcolumn.modules.frozen.edge = false;\r\n\t\t\t}\r\n\r\n\t\t\tif(column.parent.isGroup){\r\n\t\t\t\tvar parentEl = this.getColGroupParentElement(column);\r\n\t\t\t\tif(!leftParents.includes(parentEl)){\r\n\t\t\t\t\tthis.layoutElement(parentEl, column);\r\n\t\t\t\t\tleftParents.push(parentEl);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(column.modules.frozen.edge){\r\n\t\t\t\t\tparentEl.classList.add(\"tabulator-frozen-\" + column.modules.frozen.position);\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tthis.layoutElement(column.getElement(), column);\r\n\t\t\t}\r\n\r\n\t\t\tif(allCells){\r\n\t\t\t\tcolumn.cells.forEach((cell) => {\r\n\t\t\t\t\tthis.layoutElement(cell.getElement(true), column);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tthis.rightColumns.forEach((column, i) => {\r\n\t\t\tcolumn.modules.frozen.margin = (this.rightPadding - this._calcSpace(this.rightColumns, i + 1)) + \"px\";\r\n\r\n\t\t\tif(i == this.rightColumns.length - 1){\r\n\t\t\t\tcolumn.modules.frozen.edge = true;\r\n\t\t\t}else{\r\n\t\t\t\tcolumn.modules.frozen.edge = false;\r\n\t\t\t}\r\n\r\n\r\n\t\t\tif(column.parent.isGroup){\r\n\t\t\t\tthis.layoutElement(this.getColGroupParentElement(column), column);\r\n\t\t\t}else{\r\n\t\t\t\tthis.layoutElement(column.getElement(), column);\r\n\t\t\t}\r\n\r\n\t\t\tif(allCells){\r\n\t\t\t\tcolumn.cells.forEach((cell) => {\r\n\t\t\t\t\tthis.layoutElement(cell.getElement(true), column);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tgetColGroupParentElement(column){\r\n\t\treturn column.parent.isGroup ? this.getColGroupParentElement(column.parent) : column.getElement();\r\n\t}\r\n\r\n\t//layout columns appropropriatly\r\n\tlayout(){\r\n\t\tvar rightMargin = 0;\r\n\r\n\t\tif(this.active){\r\n\r\n\t\t\t//calculate row padding\r\n\t\t\tthis.calcMargins();\r\n\r\n\t\t\tthis.table.rowManager.getDisplayRows().forEach((row) =>{\r\n\t\t\t\tif(row.type === \"row\"){\r\n\t\t\t\t\tthis.layoutRow(row);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tthis.layoutCalcRows();\r\n\r\n\t\t\t//calculate left columns\r\n\t\t\tthis.layoutColumnPosition(true);\r\n\r\n\t\t\tthis.table.rowManager.tableElement.style.marginRight = this.rightMargin;\r\n\t\t}\r\n\t}\r\n\r\n\tlayoutRow(row){\r\n\t\tvar rowEl = row.getElement();\r\n\r\n\t\trowEl.style.paddingLeft = this.leftMargin;\r\n\r\n\t\tthis.leftColumns.forEach((column) => {\r\n\t\t\tvar cell = row.getCell(column);\r\n\r\n\t\t\tif(cell){\r\n\t\t\t\tthis.layoutElement(cell.getElement(true), column);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tthis.rightColumns.forEach((column) => {\r\n\t\t\tvar cell = row.getCell(column);\r\n\r\n\t\t\tif(cell){\r\n\t\t\t\tthis.layoutElement(cell.getElement(true), column);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tlayoutElement(element, column){\r\n\r\n\t\tif(column.modules.frozen){\r\n\t\t\telement.style.position = \"absolute\";\r\n\t\t\telement.style.left = column.modules.frozen.margin;\r\n\r\n\t\t\telement.classList.add(\"tabulator-frozen\");\r\n\r\n\t\t\tif(column.modules.frozen.edge){\r\n\t\t\t\telement.classList.add(\"tabulator-frozen-\" + column.modules.frozen.position);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t_calcSpace(columns, index){\r\n\t\tvar width = 0;\r\n\r\n\t\tfor (let i = 0; i < index; i++){\r\n\t\t\tif(columns[i].visible){\r\n\t\t\t\twidth += columns[i].getWidth();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn width;\r\n\t}\r\n}\r\n\r\nFrozenColumns.moduleName = \"frozenColumns\";\r\n\r\nexport default FrozenColumns;","import Module from '../../core/Module.js';\r\n\r\nclass FrozenRows extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.topElement = document.createElement(\"div\");\r\n\t\tthis.rows = [];\r\n\t\tthis.displayIndex = 0; //index in display pipeline\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tthis.rows = [];\r\n\r\n\t\tthis.topElement.classList.add(\"tabulator-frozen-rows-holder\");\r\n\r\n\t\t// this.table.columnManager.element.append(this.topElement);\r\n\t\tthis.table.columnManager.getElement().insertBefore(this.topElement, this.table.columnManager.headersElement.nextSibling);\r\n\t}\r\n\r\n\tsetDisplayIndex(index){\r\n\t\tthis.displayIndex = index;\r\n\t}\r\n\r\n\tgetDisplayIndex(){\r\n\t\treturn this.displayIndex;\r\n\t}\r\n\r\n\tisFrozen(){\r\n\t\treturn !!this.rows.length;\r\n\t}\r\n\r\n\t//filter frozen rows out of display data\r\n\tgetRows(rows){\r\n\t\tvar self = this,\r\n\t\tfrozen = [],\r\n\t\toutput = rows.slice(0);\r\n\r\n\t\tthis.rows.forEach(function(row){\r\n\t\t\tvar index = output.indexOf(row);\r\n\r\n\t\t\tif(index > -1){\r\n\t\t\t\toutput.splice(index, 1);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tfreezeRow(row){\r\n\t\tif(!row.modules.frozen){\r\n\t\t\trow.modules.frozen = true;\r\n\t\t\tthis.topElement.appendChild(row.getElement());\r\n\t\t\trow.initialize();\r\n\t\t\trow.normalizeHeight();\r\n\t\t\tthis.table.rowManager.adjustTableSize();\r\n\r\n\t\t\tthis.rows.push(row);\r\n\r\n\t\t\tthis.table.rowManager.refreshActiveData(\"display\");\r\n\r\n\t\t\tthis.styleRows();\r\n\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Freeze Error - Row is already frozen\");\r\n\t\t}\r\n\t}\r\n\r\n\tunfreezeRow(row){\r\n\t\tvar index = this.rows.indexOf(row);\r\n\r\n\t\tif(row.modules.frozen){\r\n\r\n\t\t\trow.modules.frozen = false;\r\n\r\n\t\t\tthis.detachRow(row);\r\n\r\n\t\t\tthis.table.rowManager.adjustTableSize();\r\n\r\n\t\t\tthis.table.rowManager.refreshActiveData(\"display\");\r\n\r\n\t\t\tif(this.rows.length){\r\n\t\t\t\tthis.styleRows();\r\n\t\t\t}\r\n\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Freeze Error - Row is already unfrozen\");\r\n\t\t}\r\n\t}\r\n\r\n\tdetachRow(row){\r\n\t\tvar index = this.rows.indexOf(row);\r\n\r\n\t\tif(index > -1){\r\n\t\t\tvar rowEl = row.getElement();\r\n\t\t\trowEl.parentNode.removeChild(rowEl);\r\n\r\n\t\t\tthis.rows.splice(index, 1);\r\n\t\t}\r\n\t}\r\n\r\n\tstyleRows(row){\r\n\t\tthis.rows.forEach((row, i) => {\r\n\t\t\tthis.table.rowManager.styleRow(row, i);\r\n\t\t});\r\n\t}\r\n}\r\n\r\nFrozenRows.moduleName = \"frozenRows\";\r\n\r\nexport default FrozenRows;","import Helpers from '../../core/Helpers.js';\r\n\r\n//Group functions\r\nclass Group{\r\n\r\n\tconstructor(groupManager, parent, level, key, field, generator, oldGroup){\r\n\t\tthis.groupManager = groupManager;\r\n\t\tthis.parent = parent;\r\n\t\tthis.key = key;\r\n\t\tthis.level = level;\r\n\t\tthis.field = field;\r\n\t\tthis.hasSubGroups = level < (groupManager.groupIDLookups.length - 1);\r\n\t\tthis.addRow = this.hasSubGroups ? this._addRowToGroup : this._addRow;\r\n\t\tthis.type = \"group\"; //type of element\r\n\t\tthis.old = oldGroup;\r\n\t\tthis.rows = [];\r\n\t\tthis.groups = [];\r\n\t\tthis.groupList = [];\r\n\t\tthis.generator = generator;\r\n\t\tthis.elementContents = false;\r\n\t\tthis.height = 0;\r\n\t\tthis.outerHeight = 0;\r\n\t\tthis.initialized = false;\r\n\t\tthis.calcs = {};\r\n\t\tthis.initialized = false;\r\n\t\tthis.modules = {};\r\n\t\tthis.arrowElement = false;\r\n\r\n\t\tthis.visible = oldGroup ? oldGroup.visible : (typeof groupManager.startOpen[level] !== \"undefined\" ? groupManager.startOpen[level] : groupManager.startOpen[0]);\r\n\r\n\t\tthis.component = null;\r\n\r\n\t\tthis.createElements();\r\n\t\tthis.addBindings();\r\n\r\n\t\tthis.createValueGroups();\r\n\t}\r\n\r\n\twipe(){\r\n\t\tif(this.groupList.length){\r\n\t\t\tthis.groupList.forEach(function(group){\r\n\t\t\t\tgroup.wipe();\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tthis.element = false;\r\n\t\t\tthis.arrowElement = false;\r\n\t\t\tthis.elementContents = false;\r\n\t\t}\r\n\t}\r\n\r\n\tcreateElements(){\r\n\t\tvar arrow = document.createElement(\"div\");\r\n\t\tarrow.classList.add(\"tabulator-arrow\");\r\n\r\n\t\tthis.element = document.createElement(\"div\");\r\n\t\tthis.element.classList.add(\"tabulator-row\");\r\n\t\tthis.element.classList.add(\"tabulator-group\");\r\n\t\tthis.element.classList.add(\"tabulator-group-level-\" + this.level);\r\n\t\tthis.element.setAttribute(\"role\", \"rowgroup\");\r\n\r\n\t\tthis.arrowElement = document.createElement(\"div\");\r\n\t\tthis.arrowElement.classList.add(\"tabulator-group-toggle\");\r\n\t\tthis.arrowElement.appendChild(arrow);\r\n\r\n\t\t//setup movable rows\r\n\t\tif(this.groupManager.table.options.movableRows !== false && this.groupManager.table.modExists(\"moveRow\")){\r\n\t\t\tthis.groupManager.table.modules.moveRow.initializeGroupHeader(this);\r\n\t\t}\r\n\t}\r\n\r\n\tcreateValueGroups(){\r\n\t\tvar level = this.level + 1;\r\n\t\tif(this.groupManager.allowedValues && this.groupManager.allowedValues[level]){\r\n\t\t\tthis.groupManager.allowedValues[level].forEach((value) => {\r\n\t\t\t\tthis._createGroup(value, level);\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\taddBindings(){\r\n\t\tvar dblTap,\ttapHold, tap, toggleElement;\r\n\r\n\t\t//handle group click events\r\n\t\tif (this.groupManager.table.options.groupClick){\r\n\t\t\tthis.element.addEventListener(\"click\", (e) => {\r\n\t\t\t\tthis.groupManager.table.options.groupClick.call(this.groupManager.table, e, this.getComponent());\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif (this.groupManager.table.options.groupDblClick){\r\n\t\t\tthis.element.addEventListener(\"dblclick\", (e) => {\r\n\t\t\t\tthis.groupManager.table.options.groupDblClick.call(this.groupManager.table, e, this.getComponent());\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif (this.groupManager.table.options.groupContext){\r\n\t\t\tthis.element.addEventListener(\"contextmenu\", (e) => {\r\n\t\t\t\tthis.groupManager.table.options.groupContext.call(this.groupManager.table, e, this.getComponent());\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif ((this.groupManager.table.options.groupContextMenu || this.groupManager.table.options.groupClickMenu) && this.groupManager.table.modExists(\"menu\")){\r\n\t\t\tthis.groupManager.table.modules.menu.initializeGroup.call(this.groupManager.table.modules.menu, this);\r\n\t\t}\r\n\r\n\t\tif (this.groupManager.table.options.groupTap){\r\n\t\t\ttap = false;\r\n\r\n\t\t\tthis.element.addEventListener(\"touchstart\", (e) => {\r\n\t\t\t\ttap = true;\r\n\t\t\t}, {passive: true});\r\n\r\n\t\t\tthis.element.addEventListener(\"touchend\", (e) => {\r\n\t\t\t\tif(tap){\r\n\t\t\t\t\tthis.groupManager.table.options.groupTap(e, this.getComponent());\r\n\t\t\t\t}\r\n\r\n\t\t\t\ttap = false;\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif (this.groupManager.table.options.groupDblTap){\r\n\t\t\tdblTap = null;\r\n\r\n\t\t\tthis.element.addEventListener(\"touchend\", (e) => {\r\n\t\t\t\tif(dblTap){\r\n\t\t\t\t\tclearTimeout(dblTap);\r\n\t\t\t\t\tdblTap = null;\r\n\r\n\t\t\t\t\tthis.groupManager.table.options.groupDblTap(e, this.getComponent());\r\n\t\t\t\t}else{\r\n\r\n\t\t\t\t\tdblTap = setTimeout(() => {\r\n\t\t\t\t\t\tclearTimeout(dblTap);\r\n\t\t\t\t\t\tdblTap = null;\r\n\t\t\t\t\t}, 300);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif (this.groupManager.table.options.groupTapHold){\r\n\t\t\ttapHold = null;\r\n\r\n\t\t\tthis.element.addEventListener(\"touchstart\", (e) => {\r\n\t\t\t\tclearTimeout(tapHold);\r\n\r\n\t\t\t\ttapHold = setTimeout(() => {\r\n\t\t\t\t\tclearTimeout(tapHold);\r\n\t\t\t\t\ttapHold = null;\r\n\t\t\t\t\ttap = false;\r\n\t\t\t\t\tthis.groupManager.table.options.groupTapHold(e, this.getComponent());\r\n\t\t\t\t}, 1000);\r\n\r\n\t\t\t}, {passive: true});\r\n\r\n\t\t\tthis.element.addEventListener(\"touchend\", (e) => {\r\n\t\t\t\tclearTimeout(tapHold);\r\n\t\t\t\ttapHold = null;\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif(this.groupManager.table.options.groupToggleElement){\r\n\t\t\ttoggleElement = this.groupManager.table.options.groupToggleElement == \"arrow\" ? this.arrowElement : this.element;\r\n\r\n\t\t\ttoggleElement.addEventListener(\"click\", (e) => {\r\n\t\t\t\te.stopPropagation();\r\n\t\t\t\te.stopImmediatePropagation();\r\n\t\t\t\tthis.toggleVisibility();\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\t_createGroup(groupID, level){\r\n\t\tvar groupKey = level + \"_\" + groupID;\r\n\t\tvar group = new Group(this.groupManager, this, level, groupID, this.groupManager.groupIDLookups[level].field, this.groupManager.headerGenerator[level] || this.groupManager.headerGenerator[0], this.old ? this.old.groups[groupKey] : false);\r\n\r\n\t\tthis.groups[groupKey] = group;\r\n\t\tthis.groupList.push(group);\r\n\t}\r\n\r\n\t_addRowToGroup(row){\r\n\r\n\t\tvar level = this.level + 1;\r\n\r\n\t\tif(this.hasSubGroups){\r\n\t\t\tvar groupID = this.groupManager.groupIDLookups[level].func(row.getData()),\r\n\t\t\tgroupKey = level + \"_\" + groupID;\r\n\r\n\t\t\tif(this.groupManager.allowedValues && this.groupManager.allowedValues[level]){\r\n\t\t\t\tif(this.groups[groupKey]){\r\n\t\t\t\t\tthis.groups[groupKey].addRow(row);\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tif(!this.groups[groupKey]){\r\n\t\t\t\t\tthis._createGroup(groupID, level);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.groups[groupKey].addRow(row);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t_addRow(row){\r\n\t\tthis.rows.push(row);\r\n\t\trow.modules.group = this;\r\n\t}\r\n\r\n\tinsertRow(row, to, after){\r\n\t\tvar data = this.conformRowData({});\r\n\r\n\t\trow.updateData(data);\r\n\r\n\t\tvar toIndex = this.rows.indexOf(to);\r\n\r\n\t\tif(toIndex > -1){\r\n\t\t\tif(after){\r\n\t\t\t\tthis.rows.splice(toIndex+1, 0, row);\r\n\t\t\t}else{\r\n\t\t\t\tthis.rows.splice(toIndex, 0, row);\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tif(after){\r\n\t\t\t\tthis.rows.push(row);\r\n\t\t\t}else{\r\n\t\t\t\tthis.rows.unshift(row);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\trow.modules.group = this;\r\n\r\n\t\tthis.generateGroupHeaderContents();\r\n\r\n\t\tif(this.groupManager.table.modExists(\"columnCalcs\") && this.groupManager.table.options.columnCalcs != \"table\"){\r\n\t\t\tthis.groupManager.table.modules.columnCalcs.recalcGroup(this);\r\n\t\t}\r\n\r\n\t\tthis.groupManager.updateGroupRows(true);\r\n\t}\r\n\r\n\tscrollHeader(left){\r\n\t\tthis.arrowElement.style.marginLeft = left;\r\n\r\n\t\tthis.groupList.forEach(function(child){\r\n\t\t\tchild.scrollHeader(left);\r\n\t\t});\r\n\t}\r\n\r\n\tgetRowIndex(row){}\r\n\r\n\t//update row data to match grouping contraints\r\n\tconformRowData(data){\r\n\t\tif(this.field){\r\n\t\t\tdata[this.field] = this.key;\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Data Conforming Error - Cannot conform row data to match new group as groupBy is a function\");\r\n\t\t}\r\n\r\n\t\tif(this.parent){\r\n\t\t\tdata = this.parent.conformRowData(data);\r\n\t\t}\r\n\r\n\t\treturn data;\r\n\t}\r\n\r\n\tremoveRow(row){\r\n\t\tvar index = this.rows.indexOf(row);\r\n\t\tvar el = row.getElement();\r\n\r\n\r\n\t\tif(index > -1){\r\n\t\t\tthis.rows.splice(index, 1);\r\n\t\t}\r\n\r\n\t\tif(!this.groupManager.table.options.groupValues && !this.rows.length){\r\n\t\t\tif(this.parent){\r\n\t\t\t\tthis.parent.removeGroup(this);\r\n\t\t\t}else{\r\n\t\t\t\tthis.groupManager.removeGroup(this);\r\n\t\t\t}\r\n\r\n\t\t\tthis.groupManager.updateGroupRows(true);\r\n\t\t}else{\r\n\r\n\t\t\tif(el.parentNode){\r\n\t\t\t\tel.parentNode.removeChild(el);\r\n\t\t\t}\r\n\r\n\t\t\tthis.generateGroupHeaderContents();\r\n\r\n\t\t\tif(this.groupManager.table.modExists(\"columnCalcs\") && this.groupManager.table.options.columnCalcs != \"table\"){\r\n\t\t\t\tthis.groupManager.table.modules.columnCalcs.recalcGroup(this);\r\n\t\t\t}\r\n\r\n\t\t}\r\n\t}\r\n\r\n\tremoveGroup(group){\r\n\t\tvar groupKey = group.level + \"_\" + group.key,\r\n\t\tindex;\r\n\r\n\t\tif(this.groups[groupKey]){\r\n\t\t\tdelete this.groups[groupKey];\r\n\r\n\t\t\tindex = this.groupList.indexOf(group);\r\n\r\n\t\t\tif(index > -1){\r\n\t\t\t\tthis.groupList.splice(index, 1);\r\n\t\t\t}\r\n\r\n\t\t\tif(!this.groupList.length){\r\n\t\t\t\tif(this.parent){\r\n\t\t\t\t\tthis.parent.removeGroup(this);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tthis.groupManager.removeGroup(this);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tgetHeadersAndRows(noCalc){\r\n\t\tvar output = [];\r\n\r\n\t\toutput.push(this);\r\n\r\n\t\tthis._visSet();\r\n\r\n\t\tif(this.visible){\r\n\t\t\tif(this.groupList.length){\r\n\t\t\t\tthis.groupList.forEach(function(group){\r\n\t\t\t\t\toutput = output.concat(group.getHeadersAndRows(noCalc));\r\n\t\t\t\t});\r\n\r\n\t\t\t}else{\r\n\t\t\t\tif(!noCalc && this.groupManager.table.options.columnCalcs != \"table\" && this.groupManager.table.modExists(\"columnCalcs\") && this.groupManager.table.modules.columnCalcs.hasTopCalcs()){\r\n\t\t\t\t\tif(this.calcs.top){\r\n\t\t\t\t\t\tthis.calcs.top.detachElement();\r\n\t\t\t\t\t\tthis.calcs.top.deleteCells();\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tthis.calcs.top = this.groupManager.table.modules.columnCalcs.generateTopRow(this.rows);\r\n\t\t\t\t\toutput.push(this.calcs.top);\r\n\t\t\t\t}\r\n\r\n\t\t\t\toutput = output.concat(this.rows);\r\n\r\n\t\t\t\tif(!noCalc && this.groupManager.table.options.columnCalcs != \"table\" && this.groupManager.table.modExists(\"columnCalcs\") && this.groupManager.table.modules.columnCalcs.hasBottomCalcs()){\r\n\t\t\t\t\tif(this.calcs.bottom){\r\n\t\t\t\t\t\tthis.calcs.bottom.detachElement();\r\n\t\t\t\t\t\tthis.calcs.bottom.deleteCells();\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tthis.calcs.bottom = this.groupManager.table.modules.columnCalcs.generateBottomRow(this.rows);\r\n\t\t\t\t\toutput.push(this.calcs.bottom);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tif(!this.groupList.length && this.groupManager.table.options.columnCalcs != \"table\"){\r\n\r\n\t\t\t\tif(this.groupManager.table.modExists(\"columnCalcs\")){\r\n\r\n\t\t\t\t\tif(!noCalc && this.groupManager.table.modules.columnCalcs.hasTopCalcs()){\r\n\t\t\t\t\t\tif(this.calcs.top){\r\n\t\t\t\t\t\t\tthis.calcs.top.detachElement();\r\n\t\t\t\t\t\t\tthis.calcs.top.deleteCells();\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif(this.groupManager.table.options.groupClosedShowCalcs){\r\n\t\t\t\t\t\t\tthis.calcs.top = this.groupManager.table.modules.columnCalcs.generateTopRow(this.rows);\r\n\t\t\t\t\t\t\toutput.push(this.calcs.top);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif(!noCalc && this.groupManager.table.modules.columnCalcs.hasBottomCalcs()){\r\n\t\t\t\t\t\tif(this.calcs.bottom){\r\n\t\t\t\t\t\t\tthis.calcs.bottom.detachElement();\r\n\t\t\t\t\t\t\tthis.calcs.bottom.deleteCells();\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif(this.groupManager.table.options.groupClosedShowCalcs){\r\n\t\t\t\t\t\t\tthis.calcs.bottom = this.groupManager.table.modules.columnCalcs.generateBottomRow(this.rows);\r\n\t\t\t\t\t\t\toutput.push(this.calcs.bottom);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tgetData(visible, transform){\r\n\t\tvar output = [];\r\n\r\n\t\tthis._visSet();\r\n\r\n\t\tif(!visible || (visible && this.visible)){\r\n\t\t\tthis.rows.forEach((row) => {\r\n\t\t\t\toutput.push(row.getData(transform || \"data\"));\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tgetRowCount(){\r\n\t\tvar count = 0;\r\n\r\n\t\tif(this.groupList.length){\r\n\t\t\tthis.groupList.forEach((group) => {\r\n\t\t\t\tcount += group.getRowCount();\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tcount = this.rows.length;\r\n\t\t}\r\n\t\treturn count;\r\n\t}\r\n\r\n\ttoggleVisibility(){\r\n\t\tif(this.visible){\r\n\t\t\tthis.hide();\r\n\t\t}else{\r\n\t\t\tthis.show();\r\n\t\t}\r\n\t}\r\n\r\n\thide(){\r\n\t\tthis.visible = false;\r\n\r\n\t\tif(this.groupManager.table.rowManager.getRenderMode() == \"classic\" && !this.groupManager.table.options.pagination){\r\n\r\n\t\t\tthis.element.classList.remove(\"tabulator-group-visible\");\r\n\r\n\t\t\tif(this.groupList.length){\r\n\t\t\t\tthis.groupList.forEach((group) => {\r\n\r\n\t\t\t\t\tvar rows = group.getHeadersAndRows();\r\n\r\n\t\t\t\t\trows.forEach((row) => {\r\n\t\t\t\t\t\trow.detachElement();\r\n\t\t\t\t\t});\r\n\t\t\t\t});\r\n\r\n\t\t\t}else{\r\n\t\t\t\tthis.rows.forEach((row) => {\r\n\t\t\t\t\tvar rowEl = row.getElement();\r\n\t\t\t\t\trowEl.parentNode.removeChild(rowEl);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\tthis.groupManager.table.rowManager.setDisplayRows(this.groupManager.updateGroupRows(), this.groupManager.getDisplayIndex());\r\n\r\n\t\t\tthis.groupManager.table.rowManager.checkClassicModeGroupHeaderWidth();\r\n\r\n\t\t}else{\r\n\t\t\tthis.groupManager.updateGroupRows(true);\r\n\t\t}\r\n\r\n\t\tthis.groupManager.table.options.groupVisibilityChanged.call(this.table, this.getComponent(), false);\r\n\t}\r\n\r\n\tshow(){\r\n\t\tthis.visible = true;\r\n\r\n\t\tif(this.groupManager.table.rowManager.getRenderMode() == \"classic\" && !this.groupManager.table.options.pagination){\r\n\r\n\t\t\tthis.element.classList.add(\"tabulator-group-visible\");\r\n\r\n\t\t\tvar prev = this.getElement();\r\n\r\n\t\t\tif(this.groupList.length){\r\n\t\t\t\tthis.groupList.forEach((group) => {\r\n\t\t\t\t\tvar rows = group.getHeadersAndRows();\r\n\r\n\t\t\t\t\trows.forEach((row) => {\r\n\t\t\t\t\t\tvar rowEl = row.getElement();\r\n\t\t\t\t\t\tprev.parentNode.insertBefore(rowEl, prev.nextSibling);\r\n\t\t\t\t\t\trow.initialize();\r\n\t\t\t\t\t\tprev = rowEl;\r\n\t\t\t\t\t});\r\n\t\t\t\t});\r\n\r\n\t\t\t}else{\r\n\t\t\t\tthis.rows.forEach((row) => {\r\n\t\t\t\t\tvar rowEl = row.getElement();\r\n\t\t\t\t\tprev.parentNode.insertBefore(rowEl, prev.nextSibling);\r\n\t\t\t\t\trow.initialize();\r\n\t\t\t\t\tprev = rowEl;\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\tthis.groupManager.table.rowManager.setDisplayRows(this.groupManager.updateGroupRows(), this.groupManager.getDisplayIndex());\r\n\r\n\t\t\tthis.groupManager.table.rowManager.checkClassicModeGroupHeaderWidth();\r\n\t\t}else{\r\n\t\t\tthis.groupManager.updateGroupRows(true);\r\n\t\t}\r\n\r\n\t\tthis.groupManager.table.options.groupVisibilityChanged.call(this.table, this.getComponent(), true);\r\n\t}\r\n\r\n\t_visSet(){\r\n\t\tvar data = [];\r\n\r\n\t\tif(typeof this.visible == \"function\"){\r\n\r\n\t\t\tthis.rows.forEach(function(row){\r\n\t\t\t\tdata.push(row.getData());\r\n\t\t\t});\r\n\r\n\t\t\tthis.visible = this.visible(this.key, this.getRowCount(), data, this.getComponent());\r\n\t\t}\r\n\t}\r\n\r\n\tgetRowGroup(row){\r\n\t\tvar match = false;\r\n\t\tif(this.groupList.length){\r\n\t\t\tthis.groupList.forEach(function(group){\r\n\t\t\t\tvar result = group.getRowGroup(row);\r\n\r\n\t\t\t\tif(result){\r\n\t\t\t\t\tmatch = result;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tif(this.rows.find(function(item){\r\n\t\t\t\treturn item === row;\r\n\t\t\t})){\r\n\t\t\t\tmatch = this;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn match;\r\n\t}\r\n\r\n\tgetSubGroups(component){\r\n\t\tvar output = [];\r\n\r\n\t\tthis.groupList.forEach(function(child){\r\n\t\t\toutput.push(component ? child.getComponent() : child);\r\n\t\t});\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tgetRows(compoment){\r\n\t\tvar output = [];\r\n\r\n\t\tthis.rows.forEach(function(row){\r\n\t\t\toutput.push(compoment ? row.getComponent() : row);\r\n\t\t});\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tgenerateGroupHeaderContents(){\r\n\t\tvar data = [];\r\n\r\n\t\tthis.rows.forEach(function(row){\r\n\t\t\tdata.push(row.getData());\r\n\t\t});\r\n\r\n\t\tthis.elementContents = this.generator(this.key, this.getRowCount(), data, this.getComponent());\r\n\r\n\t\twhile(this.element.firstChild) this.element.removeChild(this.element.firstChild);\r\n\r\n\t\tif(typeof this.elementContents === \"string\"){\r\n\t\t\tthis.element.innerHTML = this.elementContents;\r\n\t\t}else{\r\n\t\t\tthis.element.appendChild(this.elementContents);\r\n\t\t}\r\n\r\n\t\tthis.element.insertBefore(this.arrowElement, this.element.firstChild);\r\n\t}\r\n\r\n\tgetPath(path = []) {\r\n\t\tpath.unshift(this.key);\r\n\t\tif(this.parent) {\r\n\t\t\tthis.parent.getPath(path);\r\n\t\t}\r\n\t\treturn path;\r\n\t}\r\n\r\n\t////////////// Standard Row Functions //////////////\r\n\r\n\tgetElement(){\r\n\t\tthis.addBindingsd = false;\r\n\r\n\t\tthis._visSet();\r\n\r\n\t\tif(this.visible){\r\n\t\t\tthis.element.classList.add(\"tabulator-group-visible\");\r\n\t\t}else{\r\n\t\t\tthis.element.classList.remove(\"tabulator-group-visible\");\r\n\t\t}\r\n\r\n\t\tfor(var i = 0; i < this.element.childNodes.length; ++i){\r\n\t\t\tthis.element.childNodes[i].parentNode.removeChild(this.element.childNodes[i]);\r\n\t\t}\r\n\r\n\t\tthis.generateGroupHeaderContents();\r\n\r\n\t\t// this.addBindings();\r\n\r\n\t\treturn this.element;\r\n\t}\r\n\r\n\tdetachElement(){\r\n\t\tif (this.element && this.element.parentNode){\r\n\t\t\tthis.element.parentNode.removeChild(this.element);\r\n\t\t}\r\n\t}\r\n\r\n\t//normalize the height of elements in the row\r\n\tnormalizeHeight(){\r\n\t\tthis.setHeight(this.element.clientHeight);\r\n\t}\r\n\r\n\tinitialize(force){\r\n\t\tif(!this.initialized || force){\r\n\t\t\tthis.normalizeHeight();\r\n\t\t\tthis.initialized = true;\r\n\t\t}\r\n\t}\r\n\r\n\treinitialize(){\r\n\t\tthis.initialized = false;\r\n\t\tthis.height = 0;\r\n\r\n\t\tif(Helpers.elVisible(this.element)){\r\n\t\t\tthis.initialize(true);\r\n\t\t}\r\n\t}\r\n\r\n\tsetHeight(height){\r\n\t\tif(this.height != height){\r\n\t\t\tthis.height = height;\r\n\t\t\tthis.outerHeight = this.element.offsetHeight;\r\n\t\t}\r\n\t}\r\n\r\n\t//return rows outer height\r\n\tgetHeight(){\r\n\t\treturn this.outerHeight;\r\n\t}\r\n\r\n\tgetGroup(){\r\n\t\treturn this;\r\n\t}\r\n\r\n\treinitializeHeight(){}\r\n\r\n\tcalcHeight(){}\r\n\r\n\tsetCellHeight(){}\r\n\r\n\tclearCellHeight(){}\r\n\r\n\t//////////////// Object Generation /////////////////\r\n\tgetComponent(){\r\n\t\tif(!this.component){\r\n\t\t\tthis.component = new GroupComponent(this);\r\n\t\t}\r\n\r\n\t\treturn this.component;\r\n\t}\r\n}\r\n\r\nexport default Group;","import Module from '../../core/Module.js';\r\n\r\nimport GroupComponent from './GroupComponent.js';\r\nimport Group from './Group.js';\r\n\r\nclass GroupRows extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.groupIDLookups = false; //enable table grouping and set field to group by\r\n\t\tthis.startOpen = [function(){return false;}]; //starting state of group\r\n\t\tthis.headerGenerator = [function(){return \"\";}];\r\n\t\tthis.groupList = []; //ordered list of groups\r\n\t\tthis.allowedValues = false;\r\n\t\tthis.groups = {}; //hold row groups\r\n\t\tthis.displayIndex = 0; //index in display pipeline\r\n\t}\r\n\r\n\t//initialize group configuration\r\n\tinitialize(){\r\n\t\tvar groupBy = this.table.options.groupBy,\r\n\t\tstartOpen = this.table.options.groupStartOpen,\r\n\t\tgroupHeader = this.table.options.groupHeader;\r\n\r\n\t\tthis.allowedValues = this.table.options.groupValues;\r\n\r\n\t\tif(Array.isArray(groupBy) && Array.isArray(groupHeader) && groupBy.length > groupHeader.length){\r\n\t\t\tconsole.warn(\"Error creating group headers, groupHeader array is shorter than groupBy array\");\r\n\t\t}\r\n\r\n\t\tthis.headerGenerator = [function(){return \"\";}];\r\n\t\tthis.startOpen = [function(){return false;}]; //starting state of group\r\n\r\n\t\tthis.table.modules.localize.bind(\"groups|item\", (langValue, lang) => {\r\n\t\t\tthis.headerGenerator[0] = (value, count, data) => { //header layout function\r\n\t\t\t\treturn (typeof value === \"undefined\" ? \"\" : value) + \"(\" + count + \" \" + ((count === 1) ? langValue : lang.groups.items) + \")\";\r\n\t\t\t};\r\n\t\t});\r\n\r\n\t\tthis.groupIDLookups = [];\r\n\r\n\t\tif(Array.isArray(groupBy) || groupBy){\r\n\t\t\tif(this.table.modExists(\"columnCalcs\") && this.table.options.columnCalcs != \"table\" && this.table.options.columnCalcs != \"both\"){\r\n\t\t\t\tthis.table.modules.columnCalcs.removeCalcs();\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tif(this.table.modExists(\"columnCalcs\") && this.table.options.columnCalcs != \"group\"){\r\n\r\n\t\t\t\tvar cols = this.table.columnManager.getRealColumns();\r\n\r\n\t\t\t\tcols.forEach((col) => {\r\n\t\t\t\t\tif(col.definition.topCalc){\r\n\t\t\t\t\t\tthis.table.modules.columnCalcs.initializeTopRow();\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif(col.definition.bottomCalc){\r\n\t\t\t\t\t\tthis.table.modules.columnCalcs.initializeBottomRow();\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(!Array.isArray(groupBy)){\r\n\t\t\tgroupBy = [groupBy];\r\n\t\t}\r\n\r\n\t\tgroupBy.forEach((group, i) => {\r\n\t\t\tvar lookupFunc, column;\r\n\r\n\t\t\tif(typeof group == \"function\"){\r\n\t\t\t\tlookupFunc = group;\r\n\t\t\t}else{\r\n\t\t\t\tcolumn = this.table.columnManager.getColumnByField(group);\r\n\r\n\t\t\t\tif(column){\r\n\t\t\t\t\tlookupFunc = function(data){\r\n\t\t\t\t\t\treturn column.getFieldValue(data);\r\n\t\t\t\t\t};\r\n\t\t\t\t}else{\r\n\t\t\t\t\tlookupFunc = function(data){\r\n\t\t\t\t\t\treturn data[group];\r\n\t\t\t\t\t};\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tthis.groupIDLookups.push({\r\n\t\t\t\tfield: typeof group === \"function\" ? false : group,\r\n\t\t\t\tfunc:lookupFunc,\r\n\t\t\t\tvalues:this.allowedValues ? this.allowedValues[i] : false,\r\n\t\t\t});\r\n\t\t});\r\n\r\n\t\tif(startOpen){\r\n\t\t\tif(!Array.isArray(startOpen)){\r\n\t\t\t\tstartOpen = [startOpen];\r\n\t\t\t}\r\n\r\n\t\t\tstartOpen.forEach((level) => {\r\n\t\t\t\tlevel = typeof level == \"function\" ? level : function(){return true;};\r\n\t\t\t});\r\n\r\n\t\t\tthis.startOpen = startOpen;\r\n\t\t}\r\n\r\n\t\tif(groupHeader){\r\n\t\t\tthis.headerGenerator = Array.isArray(groupHeader) ? groupHeader : [groupHeader];\r\n\t\t}\r\n\r\n\t\tthis.initialized = true;\r\n\t}\r\n\r\n\tsetDisplayIndex(index){\r\n\t\tthis.displayIndex = index;\r\n\t}\r\n\r\n\tgetDisplayIndex(){\r\n\t\treturn this.displayIndex;\r\n\t}\r\n\r\n\t//return appropriate rows with group headers\r\n\tgetRows(rows){\r\n\t\tif(this.groupIDLookups.length){\r\n\r\n\t\t\tthis.table.options.dataGrouping.call(this.table);\r\n\r\n\t\t\tthis.generateGroups(rows);\r\n\r\n\t\t\tif(this.table.options.dataGrouped){\r\n\t\t\t\tthis.table.options.dataGrouped.call(this.table, this.getGroups(true));\r\n\t\t\t}\r\n\r\n\t\t\treturn this.updateGroupRows();\r\n\r\n\t\t}else{\r\n\t\t\treturn rows.slice(0);\r\n\t\t}\r\n\t}\r\n\r\n\tgetGroups(compoment){\r\n\t\tvar groupComponents = [];\r\n\r\n\t\tthis.groupList.forEach(function(group){\r\n\t\t\tgroupComponents.push(compoment ? group.getComponent() : group);\r\n\t\t});\r\n\r\n\t\treturn groupComponents;\r\n\t}\r\n\r\n\tgetChildGroups(group){\r\n\t\tvar groupComponents = [];\r\n\r\n\t\tif(!group){\r\n\t\t\tgroup = this;\r\n\t\t}\r\n\r\n\t\tgroup.groupList.forEach((child) => {\r\n\t\t\tif(child.groupList.length){\r\n\t\t\t\tgroupComponents = groupComponents.concat(this.getChildGroups(child));\r\n\t\t\t}else{\r\n\t\t\t\tgroupComponents.push(child);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn groupComponents;\r\n\t}\r\n\r\n\twipe(){\r\n\t\tthis.groupList.forEach(function(group){\r\n\t\t\tgroup.wipe();\r\n\t\t});\r\n\t}\r\n\r\n\tpullGroupListData(groupList) {\r\n\t\tvar groupListData = [];\r\n\r\n\t\tgroupList.forEach((group) => {\r\n\t\t\tvar groupHeader = {};\r\n\t\t\tgroupHeader.level = 0;\r\n\t\t\tgroupHeader.rowCount = 0;\r\n\t\t\tgroupHeader.headerContent = \"\";\r\n\t\t\tvar childData = [];\r\n\r\n\t\t\tif (group.hasSubGroups) {\r\n\t\t\t\tchildData = this.pullGroupListData(group.groupList);\r\n\r\n\t\t\t\tgroupHeader.level = group.level;\r\n\t\t\t\tgroupHeader.rowCount = childData.length - group.groupList.length; // data length minus number of sub-headers\r\n\t\t\t\tgroupHeader.headerContent = group.generator(group.key, groupHeader.rowCount, group.rows, group);\r\n\r\n\t\t\t\tgroupListData.push(groupHeader);\r\n\t\t\t\tgroupListData = groupListData.concat(childData);\r\n\t\t\t}\r\n\r\n\t\t\telse {\r\n\t\t\t\tgroupHeader.level = group.level;\r\n\t\t\t\tgroupHeader.headerContent = group.generator(group.key, group.rows.length, group.rows, group);\r\n\t\t\t\tgroupHeader.rowCount = group.getRows().length;\r\n\r\n\t\t\t\tgroupListData.push(groupHeader);\r\n\r\n\t\t\t\tgroup.getRows().forEach((row) => {\r\n\t\t\t\t\tgroupListData.push(row.getData(\"data\"));\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn groupListData\r\n\t}\r\n\r\n\tgetGroupedData(){\r\n\r\n\t\treturn this.pullGroupListData(this.groupList);\r\n\t}\r\n\r\n\tgetRowGroup(row){\r\n\t\tvar match = false;\r\n\r\n\t\tthis.groupList.forEach((group) => {\r\n\t\t\tvar result = group.getRowGroup(row);\r\n\r\n\t\t\tif(result){\r\n\t\t\t\tmatch = result;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn match;\r\n\t}\r\n\r\n\tcountGroups(){\r\n\t\treturn this.groupList.length;\r\n\t}\r\n\r\n\tgenerateGroups(rows){\r\n\t\tvar oldGroups = this.groups;\r\n\r\n\t\tthis.groups = {};\r\n\t\tthis.groupList =[];\r\n\r\n\t\tif(this.allowedValues && this.allowedValues[0]){\r\n\t\t\tthis.allowedValues[0].forEach((value) => {\r\n\t\t\t\tthis.createGroup(value, 0, oldGroups);\r\n\t\t\t});\r\n\r\n\t\t\trows.forEach((row) => {\r\n\t\t\t\tthis.assignRowToExistingGroup(row, oldGroups);\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\trows.forEach((row) => {\r\n\t\t\t\tthis.assignRowToGroup(row, oldGroups);\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tcreateGroup(groupID, level, oldGroups){\r\n\t\tvar groupKey = level + \"_\" + groupID,\r\n\t\tgroup;\r\n\r\n\t\toldGroups = oldGroups || [];\r\n\r\n\t\tgroup = new Group(this, false, level, groupID, this.groupIDLookups[0].field, this.headerGenerator[0], oldGroups[groupKey]);\r\n\r\n\t\tthis.groups[groupKey] = group;\r\n\t\tthis.groupList.push(group);\r\n\t}\r\n\r\n\tassignRowToExistingGroup(row, oldGroups){\r\n\t\tvar groupID = this.groupIDLookups[0].func(row.getData()),\r\n\t\tgroupKey = \"0_\" + groupID;\r\n\r\n\t\tif(this.groups[groupKey]){\r\n\t\t\tthis.groups[groupKey].addRow(row);\r\n\t\t}\r\n\t}\r\n\r\n\tassignRowToGroup(row, oldGroups){\r\n\t\tvar groupID = this.groupIDLookups[0].func(row.getData()),\r\n\t\tnewGroupNeeded = !this.groups[\"0_\" + groupID];\r\n\r\n\t\tif(newGroupNeeded){\r\n\t\t\tthis.createGroup(groupID, 0, oldGroups);\r\n\t\t}\r\n\r\n\t\tthis.groups[\"0_\" + groupID].addRow(row);\r\n\r\n\t\treturn !newGroupNeeded;\r\n\t}\r\n\r\n\treassignRowToGroup(row){\r\n\t\tvar oldRowGroup = row.getGroup(),\r\n\t\t\toldGroupPath = oldRowGroup.getPath(),\r\n\t\t\tnewGroupPath = this.getExpectedPath(row),\r\n\t\t\tsamePath = true;\r\n\r\n\t\t// figure out if new group path is the same as old group path\r\n\t\tvar samePath = (oldGroupPath.length == newGroupPath.length) && oldGroupPath.every((element, index) => {\r\n\t\t\treturn element === newGroupPath[index];\r\n\t\t});\r\n\r\n\t\t// refresh if they new path and old path aren't the same (aka the row's groupings have changed)\r\n\t\tif(!samePath) {\r\n\t\t\toldRowGroup.removeRow(row);\r\n\t\t\tthis.assignRowToGroup(row, this.groups);\r\n\t\t\tthis.table.rowManager.refreshActiveData(\"group\", false, true);\r\n\t\t}\r\n\t}\r\n\r\n\tgetExpectedPath(row) {\r\n\t\tvar groupPath = [], rowData = row.getData();\r\n\r\n\t\tthis.groupIDLookups.forEach((groupId) => {\r\n\t\t\tgroupPath.push(groupId.func(rowData));\r\n\t\t});\r\n\r\n\t\treturn groupPath;\r\n\t}\r\n\r\n\tupdateGroupRows(force){\r\n\t\tvar output = [],\r\n\t\toldRowCount;\r\n\r\n\t\tthis.groupList.forEach((group) => {\r\n\t\t\toutput = output.concat(group.getHeadersAndRows());\r\n\t\t});\r\n\r\n\t\t//force update of table display\r\n\t\tif(force){\r\n\t\t\tvar displayIndex = this.table.rowManager.setDisplayRows(output, this.getDisplayIndex());\r\n\r\n\t\t\tif(displayIndex !== true){\r\n\t\t\t\tthis.setDisplayIndex(displayIndex);\r\n\t\t\t}\r\n\r\n\t\t\tthis.table.rowManager.refreshActiveData(\"group\", true, true);\r\n\t\t}\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tscrollHeaders(left){\r\n\t\tif(this.table.options.virtualDomHoz){\r\n\t\t\tleft -= this.table.vdomHoz.vDomPadLeft;\r\n\t\t}\r\n\r\n\t\tleft = left + \"px\";\r\n\r\n\t\tthis.groupList.forEach((group) => {\r\n\t\t\tgroup.scrollHeader(left);\r\n\t\t});\r\n\t}\r\n\r\n\tremoveGroup(group){\r\n\t\tvar groupKey = group.level + \"_\" + group.key,\r\n\t\tindex;\r\n\r\n\t\tif(this.groups[groupKey]){\r\n\t\t\tdelete this.groups[groupKey];\r\n\r\n\t\t\tindex = this.groupList.indexOf(group);\r\n\r\n\t\t\tif(index > -1){\r\n\t\t\t\tthis.groupList.splice(index, 1);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n\r\nGroupRows.moduleName = \"groupRows\";\r\n\r\nexport default GroupRows;","import Module from '../../core/Module.js';\r\n\r\nimport defaultUndoers from './defaults/undoers.js';\r\nimport defaultRedoers from './defaults/redoers.js';\r\n\r\nclass History extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.history = [];\r\n\t\tthis.index = -1;\r\n\t}\r\n\r\n\tclear(){\r\n\t\tthis.history = [];\r\n\t\tthis.index = -1;\r\n\t}\r\n\r\n\taction(type, component, data){\r\n\t\tthis.history = this.history.slice(0, this.index + 1);\r\n\r\n\t\tthis.history.push({\r\n\t\t\ttype:type,\r\n\t\t\tcomponent:component,\r\n\t\t\tdata:data,\r\n\t\t});\r\n\r\n\t\tthis.index ++;\r\n\t}\r\n\r\n\tgetHistoryUndoSize(){\r\n\t\treturn this.index + 1;\r\n\t}\r\n\r\n\tgetHistoryRedoSize(){\r\n\t\treturn this.history.length - (this.index + 1);\r\n\t}\r\n\r\n\tclearComponentHistory(component){\r\n\t\tvar index = this.history.findIndex(function(item){\r\n\t\t\treturn item.component === component;\r\n\t\t});\r\n\r\n\t\tif(index > -1){\r\n\t\t\tthis.history.splice(index, 1);\r\n\t \t\tif(index <= this.index){\r\n\t \t\t\tthis.index--;\r\n\t \t\t}\r\n\r\n\t \t\tthis.clearComponentHistory(component);\r\n\t\t}\r\n\t}\r\n\r\n\tundo(){\r\n\t\tif(this.index > -1){\r\n\t\t\tlet action = this.history[this.index];\r\n\r\n\t\t\tHistory.undoers[action.type].call(this, action);\r\n\r\n\t\t\tthis.index--;\r\n\r\n\t\t\tthis.table.options.historyUndo.call(this.table, action.type, action.component.getComponent(), action.data);\r\n\r\n\t\t\treturn true;\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"History Undo Error - No more history to undo\");\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\tredo(){\r\n\t\tif(this.history.length-1 > this.index){\r\n\r\n\t\t\tthis.index++;\r\n\r\n\t\t\tlet action = this.history[this.index];\r\n\r\n\t\t\tHistory.redoers[action.type].call(this, action);\r\n\r\n\t\t\tthis.table.options.historyRedo.call(this.table, action.type, action.component.getComponent(), action.data);\r\n\r\n\t\t\treturn true;\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"History Redo Error - No more history to redo\");\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\t//rebind rows to new element after deletion\r\n\t_rebindRow(oldRow, newRow){\r\n\t\tthis.history.forEach(function(action){\r\n\t\t\tif(action.component instanceof Row){\r\n\t\t\t\tif(action.component === oldRow){\r\n\t\t\t\t\taction.component = newRow;\r\n\t\t\t\t}\r\n\t\t\t}else if(action.component instanceof Cell){\r\n\t\t\t\tif(action.component.row === oldRow){\r\n\t\t\t\t\tvar field = action.component.column.getField();\r\n\r\n\t\t\t\t\tif(field){\r\n\t\t\t\t\t\taction.component = newRow.getCell(field);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n}\r\n\r\nHistory.moduleName = \"history\";\r\n\r\n//load defaults\r\nHistory.undoers = defaultUndoers;\r\nHistory.redoers = defaultRedoers;\r\n\r\nexport default History;","export default {\r\n\tcellEdit: function(action){\r\n\t\taction.component.setValueProcessData(action.data.oldValue);\r\n\t},\r\n\r\n\trowAdd: function(action){\r\n\t\taction.component.deleteActual();\r\n\t},\r\n\r\n\trowDelete: function(action){\r\n\t\tvar newRow = this.table.rowManager.addRowActual(action.data.data, action.data.pos, action.data.index);\r\n\r\n\t\tif(this.table.options.groupBy && this.table.modExists(\"groupRows\")){\r\n\t\t\tthis.table.modules.groupRows.updateGroupRows(true);\r\n\t\t}\r\n\r\n\t\tthis._rebindRow(action.component, newRow);\r\n\t},\r\n\r\n\trowMove: function(action){\r\n\t\tthis.table.rowManager.moveRowActual(action.component, this.table.rowManager.rows[action.data.posFrom], !action.data.after);\r\n\t\tthis.table.rowManager.redraw();\r\n\t},\r\n};","export default {\r\n\tcellEdit: function(action){\r\n\t\taction.component.setValueProcessData(action.data.newValue);\r\n\t},\r\n\r\n\trowAdd: function(action){\r\n\t\tvar newRow = this.table.rowManager.addRowActual(action.data.data, action.data.pos, action.data.index);\r\n\r\n\t\tif(this.table.options.groupBy && this.table.modExists(\"groupRows\")){\r\n\t\t\tthis.table.modules.groupRows.updateGroupRows(true);\r\n\t\t}\r\n\r\n\t\tthis._rebindRow(action.component, newRow);\r\n\t},\r\n\r\n\trowDelete:function(action){\r\n\t\taction.component.deleteActual();\r\n\t},\r\n\r\n\trowMove: function(action){\r\n\t\tthis.table.rowManager.moveRowActual(action.component, this.table.rowManager.rows[action.data.posTo], action.data.after);\r\n\t\tthis.table.rowManager.redraw();\r\n\t},\r\n};","import Module from '../../core/Module.js';\r\n\r\nclass HtmlTableImport extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.fieldIndex = [];\r\n\t\tthis.hasIndex = false;\r\n\t}\r\n\r\n\tparseTable(){\r\n\t\tvar element = this.table.element,\r\n\t\toptions = this.table.options,\r\n\t\tcolumns = options.columns,\r\n\t\theaders = element.getElementsByTagName(\"th\"),\r\n\t\trows = element.getElementsByTagName(\"tbody\")[0],\r\n\t\tdata = [],\r\n\t\tnewTable;\r\n\r\n\t\tthis.hasIndex = false;\r\n\r\n\t\tthis.table.options.htmlImporting.call(this.table);\r\n\r\n\t\trows = rows ? rows.getElementsByTagName(\"tr\") : [];\r\n\r\n\t\t//check for tablator inline options\r\n\t\tthis._extractOptions(element, options);\r\n\r\n\t\tif(headers.length){\r\n\t\t\tthis._extractHeaders(headers, rows);\r\n\t\t}else{\r\n\t\t\tthis._generateBlankHeaders(headers, rows);\r\n\t\t}\r\n\r\n\t\t//iterate through table rows and build data set\r\n\t\tfor(var index = 0; index < rows.length; index++){\r\n\t\t\tvar row = rows[index],\r\n\t\t\tcells = row.getElementsByTagName(\"td\"),\r\n\t\t\titem = {};\r\n\r\n\t\t\t//create index if the dont exist in table\r\n\t\t\tif(!this.hasIndex){\r\n\t\t\t\titem[options.index] = index;\r\n\t\t\t}\r\n\r\n\t\t\tfor(var i = 0; i < cells.length; i++){\r\n\t\t\t\tvar cell = cells[i];\r\n\t\t\t\tif(typeof this.fieldIndex[i] !== \"undefined\"){\r\n\t\t\t\t\titem[this.fieldIndex[i]] = cell.innerHTML;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t//add row data to item\r\n\t\t\tdata.push(item);\r\n\t\t}\r\n\r\n\t\t//create new element\r\n\t\tvar newElement = document.createElement(\"div\");\r\n\r\n\t\t//transfer attributes to new element\r\n\t\tvar attributes = element.attributes;\r\n\r\n\t\t// loop through attributes and apply them on div\r\n\r\n\t\tfor(var i in attributes){\r\n\t\t\tif(typeof attributes[i] == \"object\"){\r\n\t\t\t\tnewElement.setAttribute(attributes[i].name, attributes[i].value);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// replace table with div element\r\n\t\telement.parentNode.replaceChild(newElement, element);\r\n\r\n\t\toptions.data = data;\r\n\r\n\t\tthis.table.options.htmlImported.call(this.table);\r\n\r\n\t\tthis.table.element = newElement;\r\n\t}\r\n\r\n\t//extract tabulator attribute options\r\n\t_extractOptions(element, options, defaultOptions){\r\n\t\tvar attributes = element.attributes;\r\n\t\tvar optionsArr = defaultOptions ? Object.assign([], defaultOptions) : Object.keys(options);\r\n\t\tvar optionsList = {};\r\n\r\n\t\toptionsArr.forEach((item) => {\r\n\t\t\toptionsList[item.toLowerCase()] = item;\r\n\t\t});\r\n\r\n\t\tfor(var index in attributes){\r\n\t\t\tvar attrib = attributes[index];\r\n\t\t\tvar name;\r\n\r\n\t\t\tif(attrib && typeof attrib == \"object\" && attrib.name && attrib.name.indexOf(\"tabulator-\") === 0){\r\n\t\t\t\tname = attrib.name.replace(\"tabulator-\", \"\");\r\n\r\n\t\t\t\tif(typeof optionsList[name] !== \"undefined\"){\r\n\t\t\t\t\toptions[optionsList[name]] = this._attribValue(attrib.value);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//get value of attribute\r\n\t_attribValue(value){\r\n\t\tif(value === \"true\"){\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\tif(value === \"false\"){\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\treturn value;\r\n\t}\r\n\r\n\t//find column if it has already been defined\r\n\t_findCol(title){\r\n\t\tvar match = this.table.options.columns.find((column) => {\r\n\t\t\treturn column.title === title;\r\n\t\t});\r\n\r\n\t\treturn match || false;\r\n\t}\r\n\r\n\t//extract column from headers\r\n\t_extractHeaders(headers, rows){\r\n\t\tfor(var index = 0; index < headers.length; index++){\r\n\t\t\tvar header = headers[index],\r\n\t\t\texists = false,\r\n\t\t\tcol = this._findCol(header.textContent),\r\n\t\t\twidth, attributes;\r\n\r\n\t\t\tif(col){\r\n\t\t\t\texists = true;\r\n\t\t\t}else{\r\n\t\t\t\tcol = {title:header.textContent.trim()};\r\n\t\t\t}\r\n\r\n\t\t\tif(!col.field) {\r\n\t\t\t\tcol.field = header.textContent.trim().toLowerCase().replace(\" \", \"_\");\r\n\t\t\t}\r\n\r\n\t\t\twidth = header.getAttribute(\"width\");\r\n\r\n\t\t\tif(width && !col.width)\t{\r\n\t\t\t\tcol.width = width;\r\n\t\t\t}\r\n\r\n\t\t\t//check for tablator inline options\r\n\t\t\tattributes = header.attributes;\r\n\r\n\t\t\t// //check for tablator inline options\r\n\t\t\tthis._extractOptions(header, col, Column.prototype.defaultOptionList);\r\n\r\n\t\t\tthis.fieldIndex[index] = col.field;\r\n\r\n\t\t\tif(col.field == this.table.options.index){\r\n\t\t\t\tthis.hasIndex = true;\r\n\t\t\t}\r\n\r\n\t\t\tif(!exists){\r\n\t\t\t\tthis.table.options.columns.push(col);\r\n\t\t\t}\r\n\r\n\t\t}\r\n\t}\r\n\r\n\t//generate blank headers\r\n\t_generateBlankHeaders(headers, rows){\r\n\t\tfor(var index = 0; index < headers.length; index++){\r\n\t\t\tvar header = headers[index],\r\n\t\t\tcol = {title:\"\", field:\"col\" + index};\r\n\r\n\t\t\tthis.fieldIndex[index] = col.field;\r\n\r\n\t\t\tvar width = header.getAttribute(\"width\");\r\n\r\n\t\t\tif(width){\r\n\t\t\t\tcol.width = width;\r\n\t\t\t}\r\n\r\n\t\t\tthis.table.options.columns.push(col);\r\n\t\t}\r\n\t}\r\n}\r\n\r\nHtmlTableImport.moduleName = \"htmlTableImport\";\r\n\r\nexport default HtmlTableImport;","export default {\r\n\tkeyBlock:function(e){\r\n\t\te.stopPropagation();\r\n\t\te.preventDefault();\r\n\t},\r\n\tscrollPageUp:function(e){\r\n\t\tvar rowManager = this.table.rowManager,\r\n\t\tnewPos = rowManager.scrollTop - rowManager.height,\r\n\t\tscrollMax = rowManager.element.scrollHeight;\r\n\r\n\t\te.preventDefault();\r\n\r\n\t\tif(rowManager.displayRowsCount){\r\n\t\t\tif(newPos >= 0){\r\n\t\t\t\trowManager.element.scrollTop = newPos;\r\n\t\t\t}else{\r\n\t\t\t\trowManager.scrollToRow(rowManager.getDisplayRows()[0]);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.table.element.focus();\r\n\t},\r\n\tscrollPageDown:function(e){\r\n\t\tvar rowManager = this.table.rowManager,\r\n\t\tnewPos = rowManager.scrollTop + rowManager.height,\r\n\t\tscrollMax = rowManager.element.scrollHeight;\r\n\r\n\t\te.preventDefault();\r\n\r\n\t\tif(rowManager.displayRowsCount){\r\n\t\t\tif(newPos <= scrollMax){\r\n\t\t\t\trowManager.element.scrollTop = newPos;\r\n\t\t\t}else{\r\n\t\t\t\trowManager.scrollToRow(rowManager.getDisplayRows()[rowManager.displayRowsCount - 1]);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.table.element.focus();\r\n\r\n\t},\r\n\tscrollToStart:function(e){\r\n\t\tvar rowManager = this.table.rowManager;\r\n\r\n\t\te.preventDefault();\r\n\r\n\t\tif(rowManager.displayRowsCount){\r\n\t\t\trowManager.scrollToRow(rowManager.getDisplayRows()[0]);\r\n\t\t}\r\n\r\n\t\tthis.table.element.focus();\r\n\t},\r\n\tscrollToEnd:function(e){\r\n\t\tvar rowManager = this.table.rowManager;\r\n\r\n\t\te.preventDefault();\r\n\r\n\t\tif(rowManager.displayRowsCount){\r\n\t\t\trowManager.scrollToRow(rowManager.getDisplayRows()[rowManager.displayRowsCount - 1]);\r\n\t\t}\r\n\r\n\t\tthis.table.element.focus();\r\n\t},\r\n\tnavPrev:function(e){\r\n\t\tvar cell = false;\r\n\r\n\t\tif(this.table.modExists(\"edit\")){\r\n\t\t\tcell = this.table.modules.edit.currentCell;\r\n\r\n\t\t\tif(cell){\r\n\t\t\t\te.preventDefault();\r\n\t\t\t\tcell.nav().prev();\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\tnavNext:function(e){\r\n\t\tvar cell = false;\r\n\t\tvar newRow = this.table.options.tabEndNewRow;\r\n\t\tvar nav;\r\n\r\n\t\tif(this.table.modExists(\"edit\")){\r\n\t\t\tcell = this.table.modules.edit.currentCell;\r\n\r\n\t\t\tif(cell){\r\n\t\t\t\te.preventDefault();\r\n\r\n\t\t\t\tnav = cell.nav();\r\n\r\n\t\t\t\tif(!nav.next()){\r\n\t\t\t\t\tif(newRow){\r\n\r\n\t\t\t\t\t\tcell.getElement().firstChild.blur();\r\n\r\n\t\t\t\t\t\tif(newRow === true){\r\n\t\t\t\t\t\t\tnewRow = this.table.addRow({})\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\tif(typeof newRow == \"function\"){\r\n\t\t\t\t\t\t\t\tnewRow = this.table.addRow(newRow(cell.row.getComponent()))\r\n\t\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\t\tnewRow = this.table.addRow(Object.assign({}, newRow));\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tnewRow.then(() => {\r\n\t\t\t\t\t\t\tsetTimeout(() => {\r\n\t\t\t\t\t\t\t\tnav.next();\r\n\t\t\t\t\t\t\t})\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\tnavLeft:function(e){\r\n\t\tvar cell = false;\r\n\r\n\t\tif(this.table.modExists(\"edit\")){\r\n\t\t\tcell = this.table.modules.edit.currentCell;\r\n\r\n\t\t\tif(cell){\r\n\t\t\t\te.preventDefault();\r\n\t\t\t\tcell.nav().left();\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\tnavRight:function(e){\r\n\t\tvar cell = false;\r\n\r\n\t\tif(this.table.modExists(\"edit\")){\r\n\t\t\tcell = this.table.modules.edit.currentCell;\r\n\r\n\t\t\tif(cell){\r\n\t\t\t\te.preventDefault();\r\n\t\t\t\tcell.nav().right();\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\tnavUp:function(e){\r\n\t\tvar cell = false;\r\n\r\n\t\tif(this.table.modExists(\"edit\")){\r\n\t\t\tcell = this.table.modules.edit.currentCell;\r\n\r\n\t\t\tif(cell){\r\n\t\t\t\te.preventDefault();\r\n\t\t\t\tcell.nav().up();\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\tnavDown:function(e){\r\n\t\tvar cell = false;\r\n\r\n\t\tif(this.table.modExists(\"edit\")){\r\n\t\t\tcell = this.table.modules.edit.currentCell;\r\n\r\n\t\t\tif(cell){\r\n\t\t\t\te.preventDefault();\r\n\t\t\t\tcell.nav().down();\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\tundo:function(e){\r\n\t\tvar cell = false;\r\n\t\tif(this.table.options.history && this.table.modExists(\"history\") && this.table.modExists(\"edit\")){\r\n\r\n\t\t\tcell = this.table.modules.edit.currentCell;\r\n\r\n\t\t\tif(!cell){\r\n\t\t\t\te.preventDefault();\r\n\t\t\t\tthis.table.modules.history.undo();\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\tredo:function(e){\r\n\t\tvar cell = false;\r\n\t\tif(this.table.options.history && this.table.modExists(\"history\") && this.table.modExists(\"edit\")){\r\n\r\n\t\t\tcell = this.table.modules.edit.currentCell;\r\n\r\n\t\t\tif(!cell){\r\n\t\t\t\te.preventDefault();\r\n\t\t\t\tthis.table.modules.history.redo();\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\tcopyToClipboard:function(e){\r\n\t\tif(!this.table.modules.edit.currentCell){\r\n\t\t\tif(this.table.modExists(\"clipboard\", true)){\r\n\t\t\t\tthis.table.modules.clipboard.copy(false, true);\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n};","import Module from '../../core/Module.js';\r\n\r\nimport defaultBindings from './defaults/bindings.js';\r\nimport defaultActions from './defaults/actions.js';\r\n\r\nclass Keybindings extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.watchKeys = null;\r\n\t\tthis.pressedKeys = null;\r\n\t\tthis.keyupBinding = false;\r\n\t\tthis.keydownBinding = false;\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tvar bindings = this.table.options.keybindings,\r\n\t\tmergedBindings = {};\r\n\r\n\t\tthis.watchKeys = {};\r\n\t\tthis.pressedKeys = [];\r\n\r\n\t\tif(bindings !== false){\r\n\r\n\t\t\tfor(let key in Keybindings.bindings){\r\n\t\t\t\tmergedBindings[key] = Keybindings.bindings[key];\r\n\t\t\t}\r\n\r\n\t\t\tif(Object.keys(bindings).length){\r\n\r\n\t\t\t\tfor(let key in bindings){\r\n\t\t\t\t\tmergedBindings[key] = bindings[key];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tthis.mapBindings(mergedBindings);\r\n\t\t\tthis.bindEvents();\r\n\t\t}\r\n\t}\r\n\r\n\tmapBindings(bindings){\r\n\t\tfor(let key in bindings){\r\n\t\t\tif(Keybindings.actions[key]){\r\n\t\t\t\tif(bindings[key]){\r\n\t\t\t\t\tif(typeof bindings[key] !== \"object\"){\r\n\t\t\t\t\t\tbindings[key] = [bindings[key]];\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tbindings[key].forEach((binding) => {\r\n\t\t\t\t\t\tthis.mapBinding(key, binding);\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Key Binding Error - no such action:\", key);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tmapBinding(action, symbolsList){\r\n\t\tvar binding = {\r\n\t\t\taction: Keybindings.actions[action],\r\n\t\t\tkeys: [],\r\n\t\t\tctrl: false,\r\n\t\t\tshift: false,\r\n\t\t\tmeta: false,\r\n\t\t};\r\n\r\n\t\tvar symbols = symbolsList.toString().toLowerCase().split(\" \").join(\"\").split(\"+\");\r\n\r\n\t\tsymbols.forEach((symbol) => {\r\n\t\t\tswitch(symbol){\r\n\t\t\t\tcase \"ctrl\":\r\n\t\t\t\tbinding.ctrl = true;\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"shift\":\r\n\t\t\t\tbinding.shift = true;\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"meta\":\r\n\t\t\t\tbinding.meta = true;\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tdefault:\r\n\t\t\t\tsymbol = parseInt(symbol);\r\n\t\t\t\tbinding.keys.push(symbol);\r\n\r\n\t\t\t\tif(!this.watchKeys[symbol]){\r\n\t\t\t\t\tthis.watchKeys[symbol] = [];\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.watchKeys[symbol].push(binding);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tbindEvents(){\r\n\t\tvar self = this;\r\n\r\n\t\tthis.keyupBinding = function(e){\r\n\t\t\tvar code = e.keyCode;\r\n\t\t\tvar bindings = self.watchKeys[code];\r\n\r\n\t\t\tif(bindings){\r\n\r\n\t\t\t\tself.pressedKeys.push(code);\r\n\r\n\t\t\t\tbindings.forEach(function(binding){\r\n\t\t\t\t\tself.checkBinding(e, binding);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tthis.keydownBinding = function(e){\r\n\t\t\tvar code = e.keyCode;\r\n\t\t\tvar bindings = self.watchKeys[code];\r\n\r\n\t\t\tif(bindings){\r\n\r\n\t\t\t\tvar index = self.pressedKeys.indexOf(code);\r\n\r\n\t\t\t\tif(index > -1){\r\n\t\t\t\t\tself.pressedKeys.splice(index, 1);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tthis.table.element.addEventListener(\"keydown\", this.keyupBinding);\r\n\r\n\t\tthis.table.element.addEventListener(\"keyup\", this.keydownBinding);\r\n\t}\r\n\r\n\tclearBindings(){\r\n\t\tif(this.keyupBinding){\r\n\t\t\tthis.table.element.removeEventListener(\"keydown\", this.keyupBinding);\r\n\t\t}\r\n\r\n\t\tif(this.keydownBinding){\r\n\t\t\tthis.table.element.removeEventListener(\"keyup\", this.keydownBinding);\r\n\t\t}\r\n\t}\r\n\r\n\tcheckBinding(e, binding){\r\n\t\tvar match = true;\r\n\r\n\t\tif(e.ctrlKey == binding.ctrl && e.shiftKey == binding.shift && e.metaKey == binding.meta){\r\n\t\t\tbinding.keys.forEach((key) => {\r\n\t\t\t\tvar index = this.pressedKeys.indexOf(key);\r\n\r\n\t\t\t\tif(index == -1){\r\n\t\t\t\t\tmatch = false;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tif(match){\r\n\t\t\t\tbinding.action.call(this, e);\r\n\t\t\t}\r\n\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t}\r\n}\r\n\r\nKeybindings.moduleName = \"keybindings\";\r\n\r\n//load defaults\r\nKeybindings.bindings = defaultBindings;\r\nKeybindings.actions = defaultActions;\r\n\r\nexport default Keybindings;","export default {\r\n\tnavPrev:\"shift + 9\",\r\n\tnavNext:9,\r\n\tnavUp:38,\r\n\tnavDown:40,\r\n\tscrollPageUp:33,\r\n\tscrollPageDown:34,\r\n\tscrollToStart:36,\r\n\tscrollToEnd:35,\r\n\tundo:\"ctrl + 90\",\r\n\tredo:\"ctrl + 89\",\r\n\tcopyToClipboard:\"ctrl + 67\",\r\n};","import Module from '../../core/Module.js';\r\nimport Helpers from '../../core/Helpers.js';\r\n\r\nclass Menu extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.menuElements = [];\r\n\t\tthis.blurEvent = this.hideMenu.bind(this);\r\n\t\tthis.escEvent = this.escMenu.bind(this);\r\n\t\tthis.nestedMenuBlock = false;\r\n\t\tthis.positionReversedX = false;\r\n\t}\r\n\r\n\tinitializeColumnHeader(column){\r\n\t\tvar headerMenuEl;\r\n\r\n\t\tif(column.definition.headerContextMenu){\r\n\t\t\tcolumn.getElement().addEventListener(\"contextmenu\", this.LoadMenuEvent.bind(this, column, column.definition.headerContextMenu));\r\n\t\t\tthis.tapHold(column, column.definition.headerContextMenu);\r\n\t\t}\r\n\r\n\t\t// if(column.definition.headerClickMenu){\r\n\t\t// \tcolumn.getElement().addEventListener(\"click\", this.LoadMenuEvent.bind(this, column, column.definition.headerClickMenu));\r\n\t\t// }\r\n\r\n\t\tif(column.definition.headerMenu){\r\n\r\n\t\t\theaderMenuEl = document.createElement(\"span\");\r\n\t\t\theaderMenuEl.classList.add(\"tabulator-header-menu-button\");\r\n\t\t\theaderMenuEl.innerHTML = \"⋮\";\r\n\r\n\t\t\theaderMenuEl.addEventListener(\"click\", (e) => {\r\n\t\t\t\te.stopPropagation();\r\n\t\t\t\te.preventDefault();\r\n\r\n\t\t\t\tthis.LoadMenuEvent(column, column.definition.headerMenu, e);\r\n\t\t\t});\r\n\r\n\t\t\tcolumn.titleElement.insertBefore(headerMenuEl, column.titleElement.firstChild);\r\n\t\t}\r\n\t}\r\n\r\n\tLoadMenuEvent(component, menu, e){\r\n\t\tmenu = typeof menu == \"function\" ? menu.call(this.table, component.getComponent(), e) : menu;\r\n\r\n\t\t// if(component instanceof Cell){\r\n\t\t// \te.stopImmediatePropagation();\r\n\t\t// }\r\n\r\n\t\tthis.loadMenu(e, component, menu);\r\n\t}\r\n\r\n\ttapHold(component, menu){\r\n\t\tvar element = component.getElement(),\r\n\t\ttapHold = null,\r\n\t\tloaded = false;\r\n\r\n\t\telement.addEventListener(\"touchstart\", (e) => {\r\n\t\t\tclearTimeout(tapHold);\r\n\t\t\tloaded = false;\r\n\r\n\t\t\ttapHold = setTimeout(() => {\r\n\t\t\t\tclearTimeout(tapHold);\r\n\t\t\t\ttapHold = null;\r\n\t\t\t\tloaded = true;\r\n\r\n\t\t\t\tthis.LoadMenuEvent(component, menu, e);\r\n\t\t\t}, 1000);\r\n\r\n\t\t}, {passive: true});\r\n\r\n\t\telement.addEventListener(\"touchend\", (e) => {\r\n\t\t\tclearTimeout(tapHold);\r\n\t\t\ttapHold = null;\r\n\r\n\t\t\tif(loaded){\r\n\t\t\t\te.preventDefault();\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tinitializeCell(cell){\r\n\t\tif(cell.column.definition.contextMenu){\r\n\t\t\tcell.getElement(true).addEventListener(\"contextmenu\", this.LoadMenuEvent.bind(this, cell, cell.column.definition.contextMenu));\r\n\t\t\tthis.tapHold(cell, cell.column.definition.contextMenu);\r\n\t\t}\r\n\r\n\t\tif(cell.column.definition.clickMenu){\r\n\t\t\tcell.getElement(true).addEventListener(\"click\", this.LoadMenuEvent.bind(this, cell, cell.column.definition.clickMenu));\r\n\t\t}\r\n\t}\r\n\r\n\tinitializeRow(row){\r\n\t\tif(this.table.options.rowContextMenu){\r\n\t\t\trow.getElement().addEventListener(\"contextmenu\", this.LoadMenuEvent.bind(this, row, this.table.options.rowContextMenu));\r\n\t\t\tthis.tapHold(row, this.table.options.rowContextMenu);\r\n\t\t}\r\n\r\n\t\tif(this.table.options.rowClickMenu){\r\n\t\t\trow.getElement().addEventListener(\"click\", this.LoadMenuEvent.bind(this, row, this.table.options.rowClickMenu));\r\n\t\t}\r\n\t}\r\n\r\n\tinitializeGroup (group){\r\n\t\tif(this.table.options.groupContextMenu){\r\n\t\t\tgroup.getElement().addEventListener(\"contextmenu\", this.LoadMenuEvent.bind(this, group, this.table.options.groupContextMenu));\r\n\t\t\tthis.tapHold(group, this.table.options.groupContextMenu);\r\n\t\t}\r\n\r\n\t\tif(this.table.options.groupClickMenu){\r\n\t\t\tgroup.getElement().addEventListener(\"click\", this.LoadMenuEvent.bind(this, group, this.table.options.groupClickMenu));\r\n\t\t}\r\n\t}\r\n\r\n\tloadMenu(e, component, menu, parentEl){\r\n\r\n\t\tvar touch = !(e instanceof MouseEvent);\r\n\r\n\t\tvar menuEl = document.createElement(\"div\");\r\n\t\tmenuEl.classList.add(\"tabulator-menu\");\r\n\r\n\t\tif(!touch){\r\n\t\t\te.preventDefault();\r\n\t\t}\r\n\r\n\t\t//abort if no menu set\r\n\t\tif(!menu || !menu.length){\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif(!parentEl){\r\n\t\t\tif(this.nestedMenuBlock){\r\n\t\t\t\t//abort if child menu already open\r\n\t\t\t\tif(this.isOpen()){\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tthis.nestedMenuBlock = setTimeout(() => {\r\n\t\t\t\t\tthis.nestedMenuBlock = false;\r\n\t\t\t\t}, 100)\r\n\t\t\t}\r\n\r\n\t\t\tthis.hideMenu();\r\n\t\t\tthis.menuElements = [];\r\n\t\t}\r\n\r\n\t\tmenu.forEach((item) => {\r\n\t\t\tvar itemEl = document.createElement(\"div\"),\r\n\t\t\tlabel = item.label,\r\n\t\t\tdisabled = item.disabled;\r\n\r\n\t\t\tif(item.separator){\r\n\t\t\t\titemEl.classList.add(\"tabulator-menu-separator\");\r\n\t\t\t}else{\r\n\t\t\t\titemEl.classList.add(\"tabulator-menu-item\");\r\n\r\n\t\t\t\tif(typeof label == \"function\"){\r\n\t\t\t\t\tlabel = label.call(this.table, component.getComponent());\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(label instanceof Node){\r\n\t\t\t\t\titemEl.appendChild(label);\r\n\t\t\t\t}else{\r\n\t\t\t\t\titemEl.innerHTML = label;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(typeof disabled == \"function\"){\r\n\t\t\t\t\tdisabled = disabled.call(this.table, component.getComponent());\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(disabled){\r\n\t\t\t\t\titemEl.classList.add(\"tabulator-menu-item-disabled\");\r\n\t\t\t\t\titemEl.addEventListener(\"click\", (e) => {\r\n\t\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\t});\r\n\t\t\t\t}else{\r\n\t\t\t\t\tif(item.menu && item.menu.length){\r\n\t\t\t\t\t\titemEl.addEventListener(\"click\", (e) => {\r\n\t\t\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\t\t\tthis.hideOldSubMenus(menuEl);\r\n\t\t\t\t\t\t\tthis.loadMenu(e, component, item.menu, itemEl);\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tif(item.action){\r\n\t\t\t\t\t\t\titemEl.addEventListener(\"click\", (e) => {\r\n\t\t\t\t\t\t\t\titem.action(e, component.getComponent());\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(item.menu && item.menu.length){\r\n\t\t\t\t\titemEl.classList.add(\"tabulator-menu-item-submenu\");\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tmenuEl.appendChild(itemEl);\r\n\t\t});\r\n\r\n\t\tmenuEl.addEventListener(\"click\", (e) => {\r\n\t\t\tthis.hideMenu();\r\n\t\t});\r\n\r\n\t\tthis.menuElements.push(menuEl);\r\n\t\tthis.positionMenu(menuEl, parentEl, touch, e);\r\n\t}\r\n\r\n\thideOldSubMenus(menuEl){\r\n\t\tvar index = this.menuElements.indexOf(menuEl);\r\n\r\n\t\tif(index > -1){\r\n\t\t\tfor(let i = this.menuElements.length - 1; i > index; i--){\r\n\t\t\t\tvar el = this.menuElements[i];\r\n\r\n\t\t\t\tif(el.parentNode){\r\n\t\t\t\t\tel.parentNode.removeChild(el);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.menuElements.pop();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tpositionMenu(element, parentEl, touch, e){\r\n\t\tvar docHeight = Math.max(document.body.offsetHeight, window.innerHeight),\r\n\t\tx, y, parentOffset;\r\n\r\n\t\tif(!parentEl){\r\n\t\t\tx = touch ? e.touches[0].pageX : e.pageX;\r\n\t\t\ty = touch ? e.touches[0].pageY : e.pageY;\r\n\r\n\t\t\tthis.positionReversedX = false;\r\n\t\t}else{\r\n\t\t\tparentOffset = Helpers.elOffset(parentEl);\r\n\t\t\tx = parentOffset.left + parentEl.offsetWidth;\r\n\t\t\ty = parentOffset.top - 1;\r\n\t\t}\r\n\r\n\t\telement.style.top = y + \"px\";\r\n\t\telement.style.left = x + \"px\";\r\n\r\n\t\tsetTimeout(() => {\r\n\t\t\tthis.table.rowManager.element.addEventListener(\"scroll\", this.blurEvent);\r\n\t\t\tdocument.body.addEventListener(\"click\", this.blurEvent);\r\n\t\t\tdocument.body.addEventListener(\"contextmenu\", this.blurEvent);\r\n\t\t\twindow.addEventListener(\"resize\", this.blurEvent);\r\n\t\t\tdocument.body.addEventListener(\"keydown\", this.escEvent);\r\n\t\t}, 100);\r\n\r\n\t\tdocument.body.appendChild(element);\r\n\r\n\t\t//move menu to start on bottom edge if it is too close to the edge of the screen\r\n\t\tif((y + element.offsetHeight) >= docHeight){\r\n\t\t\telement.style.top = \"\";\r\n\r\n\t\t\tif(parentEl){\r\n\t\t\t\telement.style.bottom = (docHeight - parentOffset.top - parentEl.offsetHeight - 1) + \"px\";\r\n\t\t\t}else{\r\n\t\t\t\telement.style.bottom = (docHeight - y) + \"px\";\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//move menu to start on right edge if it is too close to the edge of the screen\r\n\t\tif((x + element.offsetWidth) >= document.body.offsetWidth || this.positionReversedX){\r\n\t\t\telement.style.left = \"\";\r\n\r\n\t\t\tif(parentEl){\r\n\t\t\t\telement.style.right = (document.documentElement.offsetWidth - parentOffset.left) + \"px\";\r\n\t\t\t}else{\r\n\t\t\t\telement.style.right = (document.documentElement.offsetWidth - x) + \"px\";\r\n\t\t\t}\r\n\r\n\t\t\tthis.positionReversedX = true;\r\n\t\t}\r\n\t}\r\n\r\n\tisOpen(){\r\n\t\treturn !!this.menuElements.length;\r\n\t}\r\n\r\n\tescMenu(e){\r\n\t\tif(e.keyCode == 27){\r\n\t\t\tthis.hideMenu();\r\n\t\t}\r\n\t}\r\n\r\n\thideMenu(){\r\n\t\tthis.menuElements.forEach((menuEl) => {\r\n\t\t\tif(menuEl.parentNode){\r\n\t\t\t\tmenuEl.parentNode.removeChild(menuEl);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tdocument.body.removeEventListener(\"keydown\", this.escEvent);\r\n\t\tdocument.body.removeEventListener(\"click\", this.blurEvent);\r\n\t\tdocument.body.removeEventListener(\"contextmenu\", this.blurEvent);\r\n\t\twindow.removeEventListener(\"resize\", this.blurEvent);\r\n\t\tthis.table.rowManager.element.removeEventListener(\"scroll\", this.blurEvent);\r\n\t}\r\n}\r\n\r\nMenu.moduleName = \"menu\";\r\n\r\nexport default Menu;","import Module from '../../core/Module.js';\r\nimport Helpers from '../../core/Helpers.js';\r\n\r\nclass MoveColumns extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.placeholderElement = this.createPlaceholderElement();\r\n\t\tthis.hoverElement = false; //floating column header element\r\n\t\tthis.checkTimeout = false; //click check timeout holder\r\n\t\tthis.checkPeriod = 250; //period to wait on mousedown to consider this a move and not a click\r\n\t\tthis.moving = false; //currently moving column\r\n\t\tthis.toCol = false; //destination column\r\n\t\tthis.toColAfter = false; //position of moving column relative to the desitnation column\r\n\t\tthis.startX = 0; //starting position within header element\r\n\t\tthis.autoScrollMargin = 40; //auto scroll on edge when within margin\r\n\t\tthis.autoScrollStep = 5; //auto scroll distance in pixels\r\n\t\tthis.autoScrollTimeout = false; //auto scroll timeout\r\n\t\tthis.touchMove = false;\r\n\r\n\t\tthis.moveHover = this.moveHover.bind(this);\r\n\t\tthis.endMove = this.endMove.bind(this);\r\n\t}\r\n\r\n\tcreatePlaceholderElement(){\r\n\t\tvar el = document.createElement(\"div\");\r\n\r\n\t\tel.classList.add(\"tabulator-col\");\r\n\t\tel.classList.add(\"tabulator-col-placeholder\");\r\n\r\n\t\treturn el;\r\n\t}\r\n\r\n\tinitializeColumn(column){\r\n\t\tvar self = this,\r\n\t\tconfig = {},\r\n\t\tcolEl;\r\n\r\n\t\tif(!column.modules.frozen){\r\n\r\n\t\t\tcolEl = column.getElement();\r\n\r\n\t\t\tconfig.mousemove = function(e){\r\n\t\t\t\tif(column.parent === self.moving.parent){\r\n\t\t\t\t\tif((((self.touchMove ? e.touches[0].pageX : e.pageX) - Helpers.elOffset(colEl).left) + self.table.columnManager.element.scrollLeft) > (column.getWidth() / 2)){\r\n\t\t\t\t\t\tif(self.toCol !== column || !self.toColAfter){\r\n\t\t\t\t\t\t\tcolEl.parentNode.insertBefore(self.placeholderElement, colEl.nextSibling);\r\n\t\t\t\t\t\t\tself.moveColumn(column, true);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tif(self.toCol !== column || self.toColAfter){\r\n\t\t\t\t\t\t\tcolEl.parentNode.insertBefore(self.placeholderElement, colEl);\r\n\t\t\t\t\t\t\tself.moveColumn(column, false);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}.bind(self);\r\n\r\n\t\t\tcolEl.addEventListener(\"mousedown\", function(e){\r\n\t\t\t\tself.touchMove = false;\r\n\t\t\t\tif(e.which === 1){\r\n\t\t\t\t\tself.checkTimeout = setTimeout(function(){\r\n\t\t\t\t\t\tself.startMove(e, column);\r\n\t\t\t\t\t}, self.checkPeriod);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tcolEl.addEventListener(\"mouseup\", function(e){\r\n\t\t\t\tif(e.which === 1){\r\n\t\t\t\t\tif(self.checkTimeout){\r\n\t\t\t\t\t\tclearTimeout(self.checkTimeout);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tself.bindTouchEvents(column);\r\n\t\t}\r\n\r\n\t\tcolumn.modules.moveColumn = config;\r\n\t}\r\n\r\n\tbindTouchEvents(column){\r\n\t\tvar colEl = column.getElement(),\r\n\t\tstartXMove = false, //shifting center position of the cell\r\n\t\tdir = false,\r\n\t\tcurrentCol, nextCol, prevCol, nextColWidth, prevColWidth, nextColWidthLast, prevColWidthLast;\r\n\r\n\t\tcolEl.addEventListener(\"touchstart\", (e) => {\r\n\t\t\tthis.checkTimeout = setTimeout(() => {\r\n\t\t\t\tthis.touchMove = true;\r\n\t\t\t\tcurrentCol = column;\r\n\t\t\t\tnextCol = column.nextColumn();\r\n\t\t\t\tnextColWidth = nextCol ? nextCol.getWidth()/2 : 0;\r\n\t\t\t\tprevCol = column.prevColumn();\r\n\t\t\t\tprevColWidth = prevCol ? prevCol.getWidth()/2 : 0;\r\n\t\t\t\tnextColWidthLast = 0;\r\n\t\t\t\tprevColWidthLast = 0;\r\n\t\t\t\tstartXMove = false;\r\n\r\n\t\t\t\tthis.startMove(e, column);\r\n\t\t\t}, this.checkPeriod);\r\n\t\t}, {passive: true});\r\n\r\n\t\tcolEl.addEventListener(\"touchmove\", (e) => {\r\n\t\t\tvar halfCol, diff, moveToCol;\r\n\r\n\t\t\tif(this.moving){\r\n\t\t\t\tthis.moveHover(e);\r\n\r\n\t\t\t\tif(!startXMove){\r\n\t\t\t\t\tstartXMove = e.touches[0].pageX;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tdiff = e.touches[0].pageX - startXMove;\r\n\r\n\t\t\t\tif(diff > 0){\r\n\t\t\t\t\tif(nextCol && diff - nextColWidthLast > nextColWidth){\r\n\t\t\t\t\t\tmoveToCol = nextCol;\r\n\r\n\t\t\t\t\t\tif(moveToCol !== column){\r\n\t\t\t\t\t\t\tstartXMove = e.touches[0].pageX;\r\n\t\t\t\t\t\t\tmoveToCol.getElement().parentNode.insertBefore(this.placeholderElement, moveToCol.getElement().nextSibling);\r\n\t\t\t\t\t\t\tthis.moveColumn(moveToCol, true);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}else{\r\n\t\t\t\t\tif(prevCol && -diff - prevColWidthLast > prevColWidth){\r\n\t\t\t\t\t\tmoveToCol = prevCol;\r\n\r\n\t\t\t\t\t\tif(moveToCol !== column){\r\n\t\t\t\t\t\t\tstartXMove = e.touches[0].pageX;\r\n\t\t\t\t\t\t\tmoveToCol.getElement().parentNode.insertBefore(this.placeholderElement, moveToCol.getElement());\r\n\t\t\t\t\t\t\tthis.moveColumn(moveToCol, false);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(moveToCol){\r\n\t\t\t\t\tcurrentCol = moveToCol;\r\n\t\t\t\t\tnextCol = moveToCol.nextColumn();\r\n\t\t\t\t\tnextColWidthLast = nextColWidth;\r\n\t\t\t\t\tnextColWidth = nextCol ? nextCol.getWidth() / 2 : 0;\r\n\t\t\t\t\tprevCol = moveToCol.prevColumn();\r\n\t\t\t\t\tprevColWidthLast = prevColWidth;\r\n\t\t\t\t\tprevColWidth = prevCol ? prevCol.getWidth() / 2 : 0;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}, {passive: true});\r\n\r\n\t\tcolEl.addEventListener(\"touchend\", (e) => {\r\n\t\t\tif(this.checkTimeout){\r\n\t\t\t\tclearTimeout(this.checkTimeout);\r\n\t\t\t}\r\n\t\t\tif(this.moving){\r\n\t\t\t\tthis.endMove(e);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tstartMove(e, column){\r\n\t\tvar element = column.getElement();\r\n\r\n\t\tthis.moving = column;\r\n\t\tthis.startX = (this.touchMove ? e.touches[0].pageX : e.pageX) - Helpers.elOffset(element).left;\r\n\r\n\t\tthis.table.element.classList.add(\"tabulator-block-select\");\r\n\r\n\t\t//create placeholder\r\n\t\tthis.placeholderElement.style.width = column.getWidth() + \"px\";\r\n\t\tthis.placeholderElement.style.height = column.getHeight() + \"px\";\r\n\r\n\t\telement.parentNode.insertBefore(this.placeholderElement, element);\r\n\t\telement.parentNode.removeChild(element);\r\n\r\n\t\t//create hover element\r\n\t\tthis.hoverElement = element.cloneNode(true);\r\n\t\tthis.hoverElement.classList.add(\"tabulator-moving\");\r\n\r\n\t\tthis.table.columnManager.getElement().appendChild(this.hoverElement);\r\n\r\n\t\tthis.hoverElement.style.left = \"0\";\r\n\t\tthis.hoverElement.style.bottom = \"0\";\r\n\r\n\t\tif(!this.touchMove){\r\n\t\t\tthis._bindMouseMove();\r\n\r\n\t\t\tdocument.body.addEventListener(\"mousemove\", this.moveHover);\r\n\t\t\tdocument.body.addEventListener(\"mouseup\", this.endMove);\r\n\t\t}\r\n\r\n\t\tthis.moveHover(e);\r\n\t}\r\n\r\n\t_bindMouseMove(){\r\n\t\tthis.table.columnManager.columnsByIndex.forEach(function(column){\r\n\t\t\tif(column.modules.moveColumn.mousemove){\r\n\t\t\t\tcolumn.getElement().addEventListener(\"mousemove\", column.modules.moveColumn.mousemove);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t_unbindMouseMove(){\r\n\t\tthis.table.columnManager.columnsByIndex.forEach(function(column){\r\n\t\t\tif(column.modules.moveColumn.mousemove){\r\n\t\t\t\tcolumn.getElement().removeEventListener(\"mousemove\", column.modules.moveColumn.mousemove);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tmoveColumn(column, after){\r\n\t\tvar movingCells = this.moving.getCells();\r\n\r\n\t\tthis.toCol = column;\r\n\t\tthis.toColAfter = after;\r\n\r\n\t\tif(after){\r\n\t\t\tcolumn.getCells().forEach(function(cell, i){\r\n\t\t\t\tvar cellEl = cell.getElement(true);\r\n\t\t\t\tcellEl.parentNode.insertBefore(movingCells[i].getElement(), cellEl.nextSibling);\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tcolumn.getCells().forEach(function(cell, i){\r\n\t\t\t\tvar cellEl = cell.getElement(true);\r\n\t\t\t\tcellEl.parentNode.insertBefore(movingCells[i].getElement(), cellEl);\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tendMove(e){\r\n\t\tif(e.which === 1 || this.touchMove){\r\n\t\t\tthis._unbindMouseMove();\r\n\r\n\t\t\tthis.placeholderElement.parentNode.insertBefore(this.moving.getElement(), this.placeholderElement.nextSibling);\r\n\t\t\tthis.placeholderElement.parentNode.removeChild(this.placeholderElement);\r\n\t\t\tthis.hoverElement.parentNode.removeChild(this.hoverElement);\r\n\r\n\t\t\tthis.table.element.classList.remove(\"tabulator-block-select\");\r\n\r\n\t\t\tif(this.toCol){\r\n\t\t\t\tthis.table.columnManager.moveColumnActual(this.moving, this.toCol, this.toColAfter);\r\n\t\t\t}\r\n\r\n\t\t\tthis.moving = false;\r\n\t\t\tthis.toCol = false;\r\n\t\t\tthis.toColAfter = false;\r\n\r\n\t\t\tif(!this.touchMove){\r\n\t\t\t\tdocument.body.removeEventListener(\"mousemove\", this.moveHover);\r\n\t\t\t\tdocument.body.removeEventListener(\"mouseup\", this.endMove);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tmoveHover(e){\r\n\t\tvar columnHolder = this.table.columnManager.getElement(),\r\n\t\tscrollLeft = columnHolder.scrollLeft,\r\n\t\txPos = ((this.touchMove ? e.touches[0].pageX : e.pageX) - Helpers.elOffset(columnHolder).left) + scrollLeft,\r\n\t\tscrollPos;\r\n\r\n\t\tthis.hoverElement.style.left = (xPos - this.startX) + \"px\";\r\n\r\n\t\tif(xPos - scrollLeft < this.autoScrollMargin){\r\n\t\t\tif(!this.autoScrollTimeout){\r\n\t\t\t\tthis.autoScrollTimeout = setTimeout(() => {\r\n\t\t\t\t\tscrollPos = Math.max(0,scrollLeft-5);\r\n\t\t\t\t\tthis.table.rowManager.getElement().scrollLeft = scrollPos;\r\n\t\t\t\t\tthis.autoScrollTimeout = false;\r\n\t\t\t\t}, 1);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(scrollLeft + columnHolder.clientWidth - xPos < this.autoScrollMargin){\r\n\t\t\tif(!this.autoScrollTimeout){\r\n\t\t\t\tthis.autoScrollTimeout = setTimeout(() => {\r\n\t\t\t\t\tscrollPos = Math.min(columnHolder.clientWidth, scrollLeft+5);\r\n\t\t\t\t\tthis.table.rowManager.getElement().scrollLeft = scrollPos;\r\n\t\t\t\t\tthis.autoScrollTimeout = false;\r\n\t\t\t\t}, 1);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n\r\nMoveColumns.moduleName = \"moveColumn\";\r\n\r\nexport default MoveColumns;\r\n","import Module from '../../core/Module.js';\r\nimport Helpers from '../../core/Helpers.js';\r\n\r\nclass MoveRows extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.placeholderElement = this.createPlaceholderElement();\r\n\t\tthis.hoverElement = false; //floating row header element\r\n\t\tthis.checkTimeout = false; //click check timeout holder\r\n\t\tthis.checkPeriod = 150; //period to wait on mousedown to consider this a move and not a click\r\n\t\tthis.moving = false; //currently moving row\r\n\t\tthis.toRow = false; //destination row\r\n\t\tthis.toRowAfter = false; //position of moving row relative to the desitnation row\r\n\t\tthis.hasHandle = false; //row has handle instead of fully movable row\r\n\t\tthis.startY = 0; //starting Y position within header element\r\n\t\tthis.startX = 0; //starting X position within header element\r\n\r\n\t\tthis.moveHover = this.moveHover.bind(this);\r\n\t\tthis.endMove = this.endMove.bind(this);\r\n\t\tthis.tableRowDropEvent = false;\r\n\r\n\t\tthis.touchMove = false;\r\n\r\n\t\tthis.connection = false;\r\n\t\tthis.connectionSelectorsTables = false;\r\n\t\tthis.connectionSelectorsElements = false;\r\n\t\tthis.connectionElements = [];\r\n\t\tthis.connections = [];\r\n\r\n\t\tthis.connectedTable = false;\r\n\t\tthis.connectedRow = false;\r\n\t}\r\n\r\n\tcreatePlaceholderElement(){\r\n\t\tvar el = document.createElement(\"div\");\r\n\r\n\t\tel.classList.add(\"tabulator-row\");\r\n\t\tel.classList.add(\"tabulator-row-placeholder\");\r\n\r\n\t\treturn el;\r\n\t}\r\n\r\n\tinitialize(handle){\r\n\t\tthis.connectionSelectorsTables = this.table.options.movableRowsConnectedTables;\r\n\t\tthis.connectionSelectorsElements = this.table.options.movableRowsConnectedElements;\r\n\r\n\t\tthis.connection = this.connectionSelectorsTables || this.connectionSelectorsElements;\r\n\t}\r\n\r\n\tsetHandle(handle){\r\n\t\tthis.hasHandle = handle;\r\n\t}\r\n\r\n\tinitializeGroupHeader(group){\r\n\t\tvar self = this,\r\n\t\tconfig = {},\r\n\t\trowEl;\r\n\r\n\t\t//inter table drag drop\r\n\t\tconfig.mouseup = function(e){\r\n\t\t\tself.tableRowDrop(e, row);\r\n\t\t}.bind(self);\r\n\r\n\t\t//same table drag drop\r\n\t\tconfig.mousemove = function(e){\r\n\t\t\tif(((e.pageY - Helpers.elOffset(group.element).top) + self.table.rowManager.element.scrollTop) > (group.getHeight() / 2)){\r\n\t\t\t\tif(self.toRow !== group || !self.toRowAfter){\r\n\t\t\t\t\tvar rowEl = group.getElement();\r\n\t\t\t\t\trowEl.parentNode.insertBefore(self.placeholderElement, rowEl.nextSibling);\r\n\t\t\t\t\tself.moveRow(group, true);\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tif(self.toRow !== group || self.toRowAfter){\r\n\t\t\t\t\tvar rowEl = group.getElement();\r\n\t\t\t\t\tif(rowEl.previousSibling){\r\n\t\t\t\t\t\trowEl.parentNode.insertBefore(self.placeholderElement, rowEl);\r\n\t\t\t\t\t\tself.moveRow(group, false);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}.bind(self);\r\n\r\n\t\tgroup.modules.moveRow = config;\r\n\t}\r\n\r\n\tinitializeRow(row){\r\n\t\tvar self = this,\r\n\t\tconfig = {},\r\n\t\trowEl;\r\n\r\n\t\t//inter table drag drop\r\n\t\tconfig.mouseup = function(e){\r\n\t\t\tself.tableRowDrop(e, row);\r\n\t\t}.bind(self);\r\n\r\n\t\t//same table drag drop\r\n\t\tconfig.mousemove = function(e){\r\n\t\t\tvar rowEl = row.getElement();\r\n\r\n\t\t\tif(((e.pageY - Helpers.elOffset(rowEl).top) + self.table.rowManager.element.scrollTop) > (row.getHeight() / 2)){\r\n\t\t\t\tif(self.toRow !== row || !self.toRowAfter){\r\n\t\t\t\t\trowEl.parentNode.insertBefore(self.placeholderElement, rowEl.nextSibling);\r\n\t\t\t\t\tself.moveRow(row, true);\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tif(self.toRow !== row || self.toRowAfter){\r\n\t\t\t\t\trowEl.parentNode.insertBefore(self.placeholderElement, rowEl);\r\n\t\t\t\t\tself.moveRow(row, false);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}.bind(self);\r\n\r\n\r\n\t\tif(!this.hasHandle){\r\n\r\n\t\t\trowEl = row.getElement();\r\n\r\n\t\t\trowEl.addEventListener(\"mousedown\", function(e){\r\n\t\t\t\tif(e.which === 1){\r\n\t\t\t\t\tself.checkTimeout = setTimeout(function(){\r\n\t\t\t\t\t\tself.startMove(e, row);\r\n\t\t\t\t\t}, self.checkPeriod);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\trowEl.addEventListener(\"mouseup\", function(e){\r\n\t\t\t\tif(e.which === 1){\r\n\t\t\t\t\tif(self.checkTimeout){\r\n\t\t\t\t\t\tclearTimeout(self.checkTimeout);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tthis.bindTouchEvents(row, row.getElement());\r\n\t\t}\r\n\r\n\t\trow.modules.moveRow = config;\r\n\t}\r\n\r\n\tinitializeCell(cell){\r\n\t\tvar self = this,\r\n\t\tcellEl = cell.getElement(true);\r\n\r\n\t\tcellEl.addEventListener(\"mousedown\", function(e){\r\n\t\t\tif(e.which === 1){\r\n\t\t\t\tself.checkTimeout = setTimeout(function(){\r\n\t\t\t\t\tself.startMove(e, cell.row);\r\n\t\t\t\t}, self.checkPeriod);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tcellEl.addEventListener(\"mouseup\", function(e){\r\n\t\t\tif(e.which === 1){\r\n\t\t\t\tif(self.checkTimeout){\r\n\t\t\t\t\tclearTimeout(self.checkTimeout);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tthis.bindTouchEvents(cell.row, cellEl);\r\n\t}\r\n\r\n\tbindTouchEvents(row, element){\r\n\t\tvar startYMove = false, //shifting center position of the cell\r\n\t\tdir = false,\r\n\t\tcurrentRow, nextRow, prevRow, nextRowHeight, prevRowHeight, nextRowHeightLast, prevRowHeightLast;\r\n\r\n\t\telement.addEventListener(\"touchstart\", (e) => {\r\n\t\t\tthis.checkTimeout = setTimeout(() => {\r\n\t\t\t\tthis.touchMove = true;\r\n\t\t\t\tcurrentRow = row;\r\n\t\t\t\tnextRow = row.nextRow();\r\n\t\t\t\tnextRowHeight = nextRow ? nextRow.getHeight()/2 : 0;\r\n\t\t\t\tprevRow = row.prevRow();\r\n\t\t\t\tprevRowHeight = prevRow ? prevRow.getHeight()/2 : 0;\r\n\t\t\t\tnextRowHeightLast = 0;\r\n\t\t\t\tprevRowHeightLast = 0;\r\n\t\t\t\tstartYMove = false;\r\n\r\n\t\t\t\tthis.startMove(e, row);\r\n\t\t\t}, this.checkPeriod);\r\n\t\t}, {passive: true});\r\n\t\tthis.moving, this.toRow, this.toRowAfter\r\n\t\telement.addEventListener(\"touchmove\", (e) => {\r\n\r\n\t\t\tvar halfCol, diff, moveToRow;\r\n\r\n\t\t\tif(this.moving){\r\n\t\t\t\te.preventDefault();\r\n\r\n\t\t\t\tthis.moveHover(e);\r\n\r\n\t\t\t\tif(!startYMove){\r\n\t\t\t\t\tstartYMove = e.touches[0].pageY;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tdiff = e.touches[0].pageY - startYMove;\r\n\r\n\t\t\t\tif(diff > 0){\r\n\t\t\t\t\tif(nextRow && diff - nextRowHeightLast > nextRowHeight){\r\n\t\t\t\t\t\tmoveToRow = nextRow;\r\n\r\n\t\t\t\t\t\tif(moveToRow !== row){\r\n\t\t\t\t\t\t\tstartYMove = e.touches[0].pageY\r\n\t\t\t\t\t\t\tmoveToRow.getElement().parentNode.insertBefore(this.placeholderElement, moveToRow.getElement().nextSibling);\r\n\t\t\t\t\t\t\tthis.moveRow(moveToRow, true);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}else{\r\n\t\t\t\t\tif(prevRow && -diff - prevRowHeightLast > prevRowHeight){\r\n\t\t\t\t\t\tmoveToRow = prevRow;\r\n\r\n\t\t\t\t\t\tif(moveToRow !== row){\r\n\t\t\t\t\t\t\tstartYMove = e.touches[0].pageY;\r\n\t\t\t\t\t\t\tmoveToRow.getElement().parentNode.insertBefore(this.placeholderElement, moveToRow.getElement());\r\n\t\t\t\t\t\t\tthis.moveRow(moveToRow, false);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(moveToRow){\r\n\t\t\t\t\tcurrentRow = moveToRow;\r\n\t\t\t\t\tnextRow = moveToRow.nextRow();\r\n\t\t\t\t\tnextRowHeightLast = nextRowHeight;\r\n\t\t\t\t\tnextRowHeight = nextRow ? nextRow.getHeight() / 2 : 0;\r\n\t\t\t\t\tprevRow = moveToRow.prevRow();\r\n\t\t\t\t\tprevRowHeightLast = prevRowHeight;\r\n\t\t\t\t\tprevRowHeight = prevRow ? prevRow.getHeight() / 2 : 0;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\telement.addEventListener(\"touchend\", (e) => {\r\n\t\t\tif(this.checkTimeout){\r\n\t\t\t\tclearTimeout(this.checkTimeout);\r\n\t\t\t}\r\n\t\t\tif(this.moving){\r\n\t\t\t\tthis.endMove(e);\r\n\t\t\t\tthis.touchMove = false;\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t_bindMouseMove(){\r\n\t\tthis.table.rowManager.getDisplayRows().forEach((row) => {\r\n\t\t\tif((row.type === \"row\" || row.type === \"group\") && row.modules.moveRow.mousemove){\r\n\t\t\t\trow.getElement().addEventListener(\"mousemove\", row.modules.moveRow.mousemove);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t_unbindMouseMove(){\r\n\t\tthis.table.rowManager.getDisplayRows().forEach((row) => {\r\n\t\t\tif((row.type === \"row\" || row.type === \"group\") && row.modules.moveRow.mousemove){\r\n\t\t\t\trow.getElement().removeEventListener(\"mousemove\", row.modules.moveRow.mousemove);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tstartMove(e, row){\r\n\t\tvar element = row.getElement();\r\n\r\n\t\tthis.setStartPosition(e, row);\r\n\r\n\t\tthis.moving = row;\r\n\r\n\t\tthis.table.element.classList.add(\"tabulator-block-select\");\r\n\r\n\t\t//create placeholder\r\n\t\tthis.placeholderElement.style.width = row.getWidth() + \"px\";\r\n\t\tthis.placeholderElement.style.height = row.getHeight() + \"px\";\r\n\r\n\t\tif(!this.connection){\r\n\t\t\telement.parentNode.insertBefore(this.placeholderElement, element);\r\n\t\t\telement.parentNode.removeChild(element);\r\n\t\t}else{\r\n\t\t\tthis.table.element.classList.add(\"tabulator-movingrow-sending\");\r\n\t\t\tthis.connectToTables(row);\r\n\t\t}\r\n\r\n\t\t//create hover element\r\n\t\tthis.hoverElement = element.cloneNode(true);\r\n\t\tthis.hoverElement.classList.add(\"tabulator-moving\");\r\n\r\n\t\tif(this.connection){\r\n\t\t\tdocument.body.appendChild(this.hoverElement);\r\n\t\t\tthis.hoverElement.style.left = \"0\";\r\n\t\t\tthis.hoverElement.style.top = \"0\";\r\n\t\t\tthis.hoverElement.style.width = this.table.element.clientWidth + \"px\";\r\n\t\t\tthis.hoverElement.style.whiteSpace = \"nowrap\";\r\n\t\t\tthis.hoverElement.style.overflow = \"hidden\";\r\n\t\t\tthis.hoverElement.style.pointerEvents = \"none\";\r\n\t\t}else{\r\n\t\t\tthis.table.rowManager.getTableElement().appendChild(this.hoverElement);\r\n\r\n\t\t\tthis.hoverElement.style.left = \"0\";\r\n\t\t\tthis.hoverElement.style.top = \"0\";\r\n\r\n\t\t\tthis._bindMouseMove();\r\n\t\t}\r\n\r\n\t\tdocument.body.addEventListener(\"mousemove\", this.moveHover);\r\n\t\tdocument.body.addEventListener(\"mouseup\", this.endMove);\r\n\r\n\t\tthis.moveHover(e);\r\n\t}\r\n\r\n\tsetStartPosition(e, row){\r\n\t\tvar pageX = this.touchMove ? e.touches[0].pageX : e.pageX,\r\n\t\tpageY = this.touchMove ? e.touches[0].pageY : e.pageY,\r\n\t\telement, position;\r\n\r\n\t\telement = row.getElement();\r\n\t\tif(this.connection){\r\n\t\t\tposition = element.getBoundingClientRect();\r\n\r\n\t\t\tthis.startX = position.left - pageX + window.pageXOffset;\r\n\t\t\tthis.startY = position.top - pageY + window.pageYOffset;\r\n\t\t}else{\r\n\t\t\tthis.startY = (pageY - element.getBoundingClientRect().top);\r\n\t\t}\r\n\t}\r\n\r\n\tendMove(e){\r\n\t\tif(!e || e.which === 1 || this.touchMove){\r\n\t\t\tthis._unbindMouseMove();\r\n\r\n\t\t\tif(!this.connection){\r\n\t\t\t\tthis.placeholderElement.parentNode.insertBefore(this.moving.getElement(), this.placeholderElement.nextSibling);\r\n\t\t\t\tthis.placeholderElement.parentNode.removeChild(this.placeholderElement);\r\n\t\t\t}\r\n\r\n\t\t\tthis.hoverElement.parentNode.removeChild(this.hoverElement);\r\n\r\n\t\t\tthis.table.element.classList.remove(\"tabulator-block-select\");\r\n\r\n\t\t\tif(this.toRow){\r\n\t\t\t\tthis.table.rowManager.moveRow(this.moving, this.toRow, this.toRowAfter);\r\n\t\t\t}\r\n\r\n\t\t\tthis.moving = false;\r\n\t\t\tthis.toRow = false;\r\n\t\t\tthis.toRowAfter = false;\r\n\r\n\t\t\tdocument.body.removeEventListener(\"mousemove\", this.moveHover);\r\n\t\t\tdocument.body.removeEventListener(\"mouseup\", this.endMove);\r\n\r\n\t\t\tif(this.connection){\r\n\t\t\t\tthis.table.element.classList.remove(\"tabulator-movingrow-sending\");\r\n\t\t\t\tthis.disconnectFromTables();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tmoveRow(row, after){\r\n\t\tthis.toRow = row;\r\n\t\tthis.toRowAfter = after;\r\n\t}\r\n\r\n\tmoveHover(e){\r\n\t\tif(this.connection){\r\n\t\t\tthis.moveHoverConnections.call(this, e);\r\n\t\t}else{\r\n\t\t\tthis.moveHoverTable.call(this, e);\r\n\t\t}\r\n\t}\r\n\r\n\tmoveHoverTable(e){\r\n\t\tvar rowHolder = this.table.rowManager.getElement(),\r\n\t\tscrollTop = rowHolder.scrollTop,\r\n\t\tyPos = ((this.touchMove ? e.touches[0].pageY : e.pageY) - rowHolder.getBoundingClientRect().top) + scrollTop,\r\n\t\tscrollPos;\r\n\r\n\t\tthis.hoverElement.style.top = (yPos - this.startY) + \"px\";\r\n\t}\r\n\r\n\tmoveHoverConnections(e){\r\n\t\tthis.hoverElement.style.left = (this.startX + (this.touchMove ? e.touches[0].pageX : e.pageX)) + \"px\";\r\n\t\tthis.hoverElement.style.top = (this.startY + (this.touchMove ? e.touches[0].pageY : e.pageY)) + \"px\";\r\n\t}\r\n\r\n\telementRowDrop(e, element, row){\r\n\t\tif(this.table.options.movableRowsElementDrop){\r\n\t\t\tthis.table.options.movableRowsElementDrop(e, element, row ? row.getComponent() : false);\r\n\t\t}\r\n\t}\r\n\r\n\t//establish connection with other tables\r\n\tconnectToTables(row){\r\n\t\tvar connectionTables;\r\n\r\n\t\tif(this.connectionSelectorsTables){\r\n\t\t\tconnectionTables = this.table.modules.comms.getConnections(this.connectionSelectorsTables);\r\n\r\n\t\t\tthis.table.options.movableRowsSendingStart.call(this.table, connectionTables);\r\n\r\n\t\t\tthis.table.modules.comms.send(this.connectionSelectorsTables, \"moveRow\", \"connect\", {\r\n\t\t\t\trow:row,\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif(this.connectionSelectorsElements){\r\n\r\n\t\t\tthis.connectionElements = [];\r\n\r\n\t\t\tif(!Array.isArray(this.connectionSelectorsElements)){\r\n\t\t\t\tthis.connectionSelectorsElements = [this.connectionSelectorsElements];\r\n\t\t\t}\r\n\r\n\t\t\tthis.connectionSelectorsElements.forEach((query) => {\r\n\t\t\t\tif(typeof query === \"string\"){\r\n\t\t\t\t\tthis.connectionElements = this.connectionElements.concat(Array.prototype.slice.call(document.querySelectorAll(query)));\r\n\t\t\t\t}else{\r\n\t\t\t\t\tthis.connectionElements.push(query);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tthis.connectionElements.forEach((element) => {\r\n\t\t\t\tvar dropEvent = (e) => {\r\n\t\t\t\t\tthis.elementRowDrop(e, element, this.moving);\r\n\t\t\t\t};\r\n\r\n\t\t\t\telement.addEventListener(\"mouseup\", dropEvent);\r\n\t\t\t\telement.tabulatorElementDropEvent = dropEvent;\r\n\r\n\t\t\t\telement.classList.add(\"tabulator-movingrow-receiving\");\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\t//disconnect from other tables\r\n\tdisconnectFromTables(){\r\n\t\tvar connectionTables;\r\n\r\n\t\tif(this.connectionSelectorsTables){\r\n\t\t\tconnectionTables = this.table.modules.comms.getConnections(this.connectionSelectorsTables);\r\n\r\n\t\t\tthis.table.options.movableRowsSendingStop.call(this.table, connectionTables);\r\n\r\n\t\t\tthis.table.modules.comms.send(this.connectionSelectorsTables, \"moveRow\", \"disconnect\");\r\n\t\t}\r\n\r\n\t\tthis.connectionElements.forEach((element) => {\r\n\t\t\telement.classList.remove(\"tabulator-movingrow-receiving\");\r\n\t\t\telement.removeEventListener(\"mouseup\", element.tabulatorElementDropEvent);\r\n\t\t\tdelete element.tabulatorElementDropEvent;\r\n\t\t});\r\n\t}\r\n\r\n\t//accept incomming connection\r\n\tconnect(table, row){\r\n\t\tif(!this.connectedTable){\r\n\t\t\tthis.connectedTable = table;\r\n\t\t\tthis.connectedRow = row;\r\n\r\n\t\t\tthis.table.element.classList.add(\"tabulator-movingrow-receiving\");\r\n\r\n\t\t\tthis.table.rowManager.getDisplayRows().forEach((row) => {\r\n\t\t\t\tif(row.type === \"row\" && row.modules.moveRow && row.modules.moveRow.mouseup){\r\n\t\t\t\t\trow.getElement().addEventListener(\"mouseup\", row.modules.moveRow.mouseup);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tthis.tableRowDropEvent = this.tableRowDrop.bind(this);\r\n\r\n\t\t\tthis.table.element.addEventListener(\"mouseup\", this.tableRowDropEvent);\r\n\r\n\t\t\tthis.table.options.movableRowsReceivingStart.call(this.table, row, table);\r\n\r\n\t\t\treturn true;\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Move Row Error - Table cannot accept connection, already connected to table:\", this.connectedTable);\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\t//close incomming connection\r\n\tdisconnect(table){\r\n\t\tif(table === this.connectedTable){\r\n\t\t\tthis.connectedTable = false;\r\n\t\t\tthis.connectedRow = false;\r\n\r\n\t\t\tthis.table.element.classList.remove(\"tabulator-movingrow-receiving\");\r\n\r\n\t\t\tthis.table.rowManager.getDisplayRows().forEach((row) =>{\r\n\t\t\t\tif(row.type === \"row\" && row.modules.moveRow && row.modules.moveRow.mouseup){\r\n\t\t\t\t\trow.getElement().removeEventListener(\"mouseup\", row.modules.moveRow.mouseup);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tthis.table.element.removeEventListener(\"mouseup\", this.tableRowDropEvent);\r\n\r\n\t\t\tthis.table.options.movableRowsReceivingStop.call(this.table, table);\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Move Row Error - trying to disconnect from non connected table\")\r\n\t\t}\r\n\t}\r\n\r\n\tdropComplete(table, row, success){\r\n\t\tvar sender = false;\r\n\r\n\t\tif(success){\r\n\r\n\t\t\tswitch(typeof this.table.options.movableRowsSender){\r\n\t\t\t\tcase \"string\":\r\n\t\t\t\tsender = this.senders[this.table.options.movableRowsSender];\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"function\":\r\n\t\t\t\tsender = this.table.options.movableRowsSender;\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\r\n\t\t\tif(sender){\r\n\t\t\t\tsender.call(this, this.moving.getComponent(), row ? row.getComponent() : undefined, table)\r\n\t\t\t}else{\r\n\t\t\t\tif(this.table.options.movableRowsSender){\r\n\t\t\t\t\tconsole.warn(\"Mover Row Error - no matching sender found:\", this.table.options.movableRowsSender);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tthis.table.options.movableRowsSent.call(this.table, this.moving.getComponent(), row ? row.getComponent() : undefined, table);\r\n\r\n\t\t}else{\r\n\t\t\tthis.table.options.movableRowsSentFailed.call(this.table, this.moving.getComponent(), row ? row.getComponent() : undefined, table);\r\n\t\t}\r\n\r\n\t\tthis.endMove();\r\n\t}\r\n\r\n\ttableRowDrop(e, row){\r\n\t\tvar receiver = false,\r\n\t\tsuccess = false;\r\n\r\n\t\te.stopImmediatePropagation();\r\n\r\n\t\tswitch(typeof this.table.options.movableRowsReceiver){\r\n\t\t\tcase \"string\":\r\n\t\t\treceiver = this.receivers[this.table.options.movableRowsReceiver];\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"function\":\r\n\t\t\treceiver = this.table.options.movableRowsReceiver;\r\n\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\tif(receiver){\r\n\t\t\tsuccess = receiver.call(this, this.connectedRow.getComponent(), row ? row.getComponent() : undefined, this.connectedTable)\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Mover Row Error - no matching receiver found:\", this.table.options.movableRowsReceiver)\r\n\t\t}\r\n\r\n\t\tif(success){\r\n\t\t\tthis.table.options.movableRowsReceived.call(this.table, this.connectedRow.getComponent(), row ? row.getComponent() : undefined, this.connectedTable);\r\n\t\t}else{\r\n\t\t\tthis.table.options.movableRowsReceivedFailed.call(this.table, this.connectedRow.getComponent(), row ? row.getComponent() : undefined, this.connectedTable);\r\n\t\t}\r\n\r\n\t\tthis.table.modules.comms.send(this.connectedTable, \"moveRow\", \"dropcomplete\", {\r\n\t\t\trow:row,\r\n\t\t\tsuccess:success,\r\n\t\t});\r\n\t}\r\n\r\n\tcommsReceived(table, action, data){\r\n\t\tswitch(action){\r\n\t\t\tcase \"connect\":\r\n\t\t\treturn this.connect(table, data.row);\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"disconnect\":\r\n\t\t\treturn this.disconnect(table);\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"dropcomplete\":\r\n\t\t\treturn this.dropComplete(table, data.row, data.success);\r\n\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n}\r\n\r\nMoveRows.prototype.receivers = {\r\n\tinsert:function(fromRow, toRow, fromTable){\r\n\t\tthis.table.addRow(fromRow.getData(), undefined, toRow);\r\n\t\treturn true;\r\n\t},\r\n\r\n\tadd:function(fromRow, toRow, fromTable){\r\n\t\tthis.table.addRow(fromRow.getData());\r\n\t\treturn true;\r\n\t},\r\n\r\n\tupdate:function(fromRow, toRow, fromTable){\r\n\t\tif(toRow){\r\n\t\t\ttoRow.update(fromRow.getData());\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t},\r\n\r\n\treplace:function(fromRow, toRow, fromTable){\r\n\t\tif(toRow){\r\n\t\t\tthis.table.addRow(fromRow.getData(), undefined, toRow);\r\n\t\t\ttoRow.delete();\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t},\r\n};\r\n\r\nMoveRows.prototype.senders = {\r\n\tdelete:function(fromRow, toRow, toTable){\r\n\t\tfromRow.delete();\r\n\t}\r\n};\r\n\r\nMoveRows.moduleName = \"moveRow\";\r\n\r\nexport default MoveRows;","import Module from '../../core/Module.js';\r\n\r\nimport defaultMutators from './defaults/mutators.js';\r\n\r\nclass Mutator extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.allowedTypes = [\"\", \"data\", \"edit\", \"clipboard\"]; //list of muatation types\r\n\t\tthis.enabled = true;\r\n\t}\r\n\r\n\t//initialize column mutator\r\n\tinitializeColumn(column){\r\n\t\tvar match = false,\r\n\t\tconfig = {};\r\n\r\n\t\tthis.allowedTypes.forEach((type) => {\r\n\t\t\tvar key = \"mutator\" + (type.charAt(0).toUpperCase() + type.slice(1)),\r\n\t\t\tmutator;\r\n\r\n\t\t\tif(column.definition[key]){\r\n\t\t\t\tmutator = this.lookupMutator(column.definition[key]);\r\n\r\n\t\t\t\tif(mutator){\r\n\t\t\t\t\tmatch = true;\r\n\r\n\t\t\t\t\tconfig[key] = {\r\n\t\t\t\t\t\tmutator:mutator,\r\n\t\t\t\t\t\tparams: column.definition[key + \"Params\"] || {},\r\n\t\t\t\t\t};\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tif(match){\r\n\t\t\tcolumn.modules.mutate = config;\r\n\t\t}\r\n\t}\r\n\r\n\tlookupMutator(value){\r\n\t\tvar mutator = false;\r\n\r\n\t\t//set column mutator\r\n\t\tswitch(typeof value){\r\n\t\t\tcase \"string\":\r\n\t\t\tif(Mutator.mutators[value]){\r\n\t\t\t\tmutator = Mutator.mutators[value];\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Mutator Error - No such mutator found, ignoring: \", value);\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"function\":\r\n\t\t\tmutator = value;\r\n\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\treturn mutator;\r\n\t}\r\n\r\n\t//apply mutator to row\r\n\ttransformRow(data, type, updatedData){\r\n\t\tvar key = \"mutator\" + (type.charAt(0).toUpperCase() + type.slice(1)),\r\n\t\tvalue;\r\n\r\n\t\tif(this.enabled){\r\n\r\n\t\t\tthis.table.columnManager.traverse((column) => {\r\n\t\t\t\tvar mutator, params, component;\r\n\r\n\t\t\t\tif(column.modules.mutate){\r\n\t\t\t\t\tmutator = column.modules.mutate[key] || column.modules.mutate.mutator || false;\r\n\r\n\t\t\t\t\tif(mutator){\r\n\t\t\t\t\t\tvalue = column.getFieldValue(typeof updatedData !== \"undefined\" ? updatedData : data);\r\n\r\n\t\t\t\t\t\tif(type == \"data\" || typeof value !== \"undefined\"){\r\n\t\t\t\t\t\t\tcomponent = column.getComponent();\r\n\t\t\t\t\t\t\tparams = typeof mutator.params === \"function\" ? mutator.params(value, data, type, component) : mutator.params;\r\n\t\t\t\t\t\t\tcolumn.setFieldValue(data, mutator.mutator(value, data, type, params, component));\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn data;\r\n\t}\r\n\r\n\t//apply mutator to new cell value\r\n\ttransformCell(cell, value){\r\n\t\tvar mutator = cell.column.modules.mutate.mutatorEdit || cell.column.modules.mutate.mutator || false,\r\n\t\ttempData = {};\r\n\r\n\t\tif(mutator){\r\n\t\t\ttempData = Object.assign(tempData, cell.row.getData());\r\n\t\t\tcell.column.setFieldValue(tempData, value);\r\n\t\t\treturn mutator.mutator(value, tempData, \"edit\", mutator.params, cell.getComponent());\r\n\t\t}else{\r\n\t\t\treturn value;\r\n\t\t}\r\n\t}\r\n\r\n\tenable(){\r\n\t\tthis.enabled = true;\r\n\t}\r\n\r\n\tdisable(){\r\n\t\tthis.enabled = false;\r\n\t}\r\n}\r\n\r\nMutator.moduleName = \"mutator\";\r\n\r\n//load defaults\r\nMutator.mutators = defaultMutators;\r\n\r\nexport default Mutator;","export default {};","import Module from '../../core/Module.js';\r\n\r\nimport Helpers from '../../core/Helpers.js';\r\n\r\nimport defaultDataSentNames from './defaults/dataSentNames.js';\r\nimport defaultDataReceivedNames from './defaults/dataReceivedNames.js';\r\n\r\nclass Page extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.mode = \"local\";\r\n\t\tthis.progressiveLoad = false;\r\n\r\n\t\tthis.size = 0;\r\n\t\tthis.page = 1;\r\n\t\tthis.count = 5;\r\n\t\tthis.max = 1;\r\n\r\n\t\tthis.displayIndex = 0; //index in display pipeline\r\n\r\n\t\tthis.initialLoad = true;\r\n\r\n\t\tthis.pageSizes = [];\r\n\r\n\t\tthis.dataReceivedNames = {};\r\n\t\tthis.dataSentNames = {};\r\n\r\n\t\tthis.createElements();\r\n\t}\r\n\r\n\tcreateElements(){\r\n\t\tvar button;\r\n\r\n\t\tthis.element = document.createElement(\"span\");\r\n\t\tthis.element.classList.add(\"tabulator-paginator\");\r\n\r\n\t\tthis.pagesElement = document.createElement(\"span\");\r\n\t\tthis.pagesElement.classList.add(\"tabulator-pages\");\r\n\r\n\t\tbutton = document.createElement(\"button\");\r\n\t\tbutton.classList.add(\"tabulator-page\");\r\n\t\tbutton.setAttribute(\"type\", \"button\");\r\n\t\tbutton.setAttribute(\"role\", \"button\");\r\n\t\tbutton.setAttribute(\"aria-label\", \"\");\r\n\t\tbutton.setAttribute(\"title\", \"\");\r\n\r\n\t\tthis.firstBut = button.cloneNode(true);\r\n\t\tthis.firstBut.setAttribute(\"data-page\", \"first\");\r\n\r\n\t\tthis.prevBut = button.cloneNode(true);\r\n\t\tthis.prevBut.setAttribute(\"data-page\", \"prev\");\r\n\r\n\t\tthis.nextBut = button.cloneNode(true);\r\n\t\tthis.nextBut.setAttribute(\"data-page\", \"next\");\r\n\r\n\t\tthis.lastBut = button.cloneNode(true);\r\n\t\tthis.lastBut.setAttribute(\"data-page\", \"last\");\r\n\r\n\t\tif(this.table.options.paginationSizeSelector){\r\n\t\t\tthis.pageSizeSelect = document.createElement(\"select\");\r\n\t\t\tthis.pageSizeSelect.classList.add(\"tabulator-page-size\");\r\n\t\t}\r\n\t}\r\n\r\n\tgeneratePageSizeSelectList(){\r\n\t\tvar pageSizes = [];\r\n\r\n\t\tif(this.pageSizeSelect){\r\n\r\n\t\t\tif(Array.isArray(this.table.options.paginationSizeSelector)){\r\n\t\t\t\tpageSizes = this.table.options.paginationSizeSelector;\r\n\t\t\t\tthis.pageSizes = pageSizes;\r\n\r\n\t\t\t\tif(this.pageSizes.indexOf(this.size) == -1){\r\n\t\t\t\t\tpageSizes.unshift(this.size);\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\r\n\t\t\t\tif(this.pageSizes.indexOf(this.size) == -1){\r\n\t\t\t\t\tpageSizes = [];\r\n\r\n\t\t\t\t\tfor (let i = 1; i < 5; i++){\r\n\t\t\t\t\t\tpageSizes.push(this.size * i);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tthis.pageSizes = pageSizes;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tpageSizes = this.pageSizes;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\twhile(this.pageSizeSelect.firstChild) this.pageSizeSelect.removeChild(this.pageSizeSelect.firstChild);\r\n\r\n\t\t\tpageSizes.forEach((item) => {\r\n\t\t\t\tvar itemEl = document.createElement(\"option\");\r\n\t\t\t\titemEl.value = item;\r\n\r\n\t\t\t\tif(item === true){\r\n\t\t\t\t\tthis.table.modules.localize.bind(\"pagination|all\", function(value){\r\n\t\t\t\t\t\titemEl.innerHTML = value;\r\n\t\t\t\t\t});\r\n\t\t\t\t}else{\r\n\t\t\t\t\titemEl.innerHTML = item;\r\n\t\t\t\t}\r\n\r\n\r\n\r\n\t\t\t\tthis.pageSizeSelect.appendChild(itemEl);\r\n\t\t\t});\r\n\r\n\t\t\tthis.pageSizeSelect.value = this.size;\r\n\t\t}\r\n\t}\r\n\r\n\t//setup pageination\r\n\tinitialize(hidden){\r\n\t\tvar pageSelectLabel, testElRow, testElCell;\r\n\r\n\t\t//update param names\r\n\t\tthis.dataSentNames = Object.assign({}, Page.defaultDataSentNames);\r\n\t\tthis.dataSentNames = Object.assign(this.dataSentNames, this.table.options.paginationDataSent);\r\n\r\n\t\tthis.dataReceivedNames = Object.assign({}, Page.defaultDataReceivedNames);\r\n\t\tthis.dataReceivedNames = Object.assign(this.dataReceivedNames, this.table.options.paginationDataReceived);\r\n\r\n\t\t//build pagination element\r\n\r\n\t\t//bind localizations\r\n\t\tthis.table.modules.localize.bind(\"pagination|first\", (value) => {\r\n\t\t\tthis.firstBut.innerHTML = value;\r\n\t\t});\r\n\r\n\t\tthis.table.modules.localize.bind(\"pagination|first_title\", (value) => {\r\n\t\t\tthis.firstBut.setAttribute(\"aria-label\", value);\r\n\t\t\tthis.firstBut.setAttribute(\"title\", value);\r\n\t\t});\r\n\r\n\t\tthis.table.modules.localize.bind(\"pagination|prev\", (value) => {\r\n\t\t\tthis.prevBut.innerHTML = value;\r\n\t\t});\r\n\r\n\t\tthis.table.modules.localize.bind(\"pagination|prev_title\", (value) => {\r\n\t\t\tthis.prevBut.setAttribute(\"aria-label\", value);\r\n\t\t\tthis.prevBut.setAttribute(\"title\", value);\r\n\t\t});\r\n\r\n\t\tthis.table.modules.localize.bind(\"pagination|next\", (value) => {\r\n\t\t\tthis.nextBut.innerHTML = value;\r\n\t\t});\r\n\r\n\t\tthis.table.modules.localize.bind(\"pagination|next_title\", (value) => {\r\n\t\t\tthis.nextBut.setAttribute(\"aria-label\", value);\r\n\t\t\tthis.nextBut.setAttribute(\"title\", value);\r\n\t\t});\r\n\r\n\t\tthis.table.modules.localize.bind(\"pagination|last\", (value) => {\r\n\t\t\tthis.lastBut.innerHTML = value;\r\n\t\t});\r\n\r\n\t\tthis.table.modules.localize.bind(\"pagination|last_title\", (value) => {\r\n\t\t\tthis.lastBut.setAttribute(\"aria-label\", value);\r\n\t\t\tthis.lastBut.setAttribute(\"title\", value);\r\n\t\t});\r\n\r\n\t\t//click bindings\r\n\t\tthis.firstBut.addEventListener(\"click\", () => {\r\n\t\t\tthis.setPage(1).then(()=>{}).catch(()=>{});\r\n\t\t});\r\n\r\n\t\tthis.prevBut.addEventListener(\"click\", () => {\r\n\t\t\tthis.previousPage().then(()=>{}).catch(()=>{});\r\n\t\t});\r\n\r\n\t\tthis.nextBut.addEventListener(\"click\", () => {\r\n\t\t\tthis.nextPage().then(()=>{}).catch(()=>{});\r\n\t\t});\r\n\r\n\t\tthis.lastBut.addEventListener(\"click\", () => {\r\n\t\t\tthis.setPage(this.max).then(()=>{}).catch(()=>{});\r\n\t\t});\r\n\r\n\t\tif(this.table.options.paginationElement){\r\n\t\t\tthis.element = this.table.options.paginationElement;\r\n\t\t}\r\n\r\n\t\tif(this.pageSizeSelect){\r\n\t\t\tpageSelectLabel = document.createElement(\"label\");\r\n\r\n\t\t\tthis.table.modules.localize.bind(\"pagination|page_size\", (value) => {\r\n\t\t\t\tthis.pageSizeSelect.setAttribute(\"aria-label\", value);\r\n\t\t\t\tthis.pageSizeSelect.setAttribute(\"title\", value);\r\n\t\t\t\tpageSelectLabel.innerHTML = value;\r\n\t\t\t});\r\n\r\n\t\t\tthis.element.appendChild(pageSelectLabel);\r\n\t\t\tthis.element.appendChild(this.pageSizeSelect);\r\n\r\n\t\t\tthis.pageSizeSelect.addEventListener(\"change\", (e) => {\r\n\t\t\t\tthis.setPageSize(this.pageSizeSelect.value == \"true\" ? true : this.pageSizeSelect.value);\r\n\t\t\t\tthis.setPage(1).then(()=>{}).catch(()=>{});\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\t//append to DOM\r\n\t\tthis.element.appendChild(this.firstBut);\r\n\t\tthis.element.appendChild(this.prevBut);\r\n\t\tthis.element.appendChild(this.pagesElement);\r\n\t\tthis.element.appendChild(this.nextBut);\r\n\t\tthis.element.appendChild(this.lastBut);\r\n\r\n\t\tif(!this.table.options.paginationElement && !hidden){\r\n\t\t\tthis.table.footerManager.append(this.element, this);\r\n\t\t}\r\n\r\n\t\t//set default values\r\n\t\tthis.mode = this.table.options.pagination;\r\n\r\n\t\tif(this.table.options.paginationSize){\r\n\t\t\tthis.size = this.table.options.paginationSize;\r\n\t\t}else{\r\n\t\t\ttestElRow = document.createElement(\"div\");\r\n\t\t\ttestElRow.classList.add(\"tabulator-row\");\r\n\t\t\ttestElRow.style.visibility = hidden;\r\n\r\n\t\t\ttestElCell = document.createElement(\"div\");\r\n\t\t\ttestElCell.classList.add(\"tabulator-cell\");\r\n\t\t\ttestElCell.innerHTML = \"Page Row Test\";\r\n\r\n\t\t\ttestElRow.appendChild(testElCell);\r\n\r\n\t\t\tthis.table.rowManager.getTableElement().appendChild(testElRow);\r\n\r\n\t\t\tthis.size = Math.floor(this.table.rowManager.getElement().clientHeight / testElRow.offsetHeight);\r\n\r\n\t\t\tthis.table.rowManager.getTableElement().removeChild(testElRow);\r\n\t\t}\r\n\r\n\t\t// this.page = this.table.options.paginationInitialPage || 1;\r\n\t\tthis.count = this.table.options.paginationButtonCount;\r\n\r\n\t\tthis.generatePageSizeSelectList();\r\n\t}\r\n\r\n\tinitializeProgressive(mode){\r\n\t\tthis.initialize(true);\r\n\t\tthis.mode = \"progressive_\" + mode;\r\n\t\tthis.progressiveLoad = true;\r\n\t}\r\n\r\n\tsetDisplayIndex(index){\r\n\t\tthis.displayIndex = index;\r\n\t}\r\n\r\n\tgetDisplayIndex(){\r\n\t\treturn this.displayIndex;\r\n\t}\r\n\r\n\t//calculate maximum page from number of rows\r\n\tsetMaxRows(rowCount){\r\n\t\tif(!rowCount){\r\n\t\t\tthis.max = 1;\r\n\t\t}else{\r\n\t\t\tthis.max = this.size === true ? 1 : Math.ceil(rowCount/this.size);\r\n\t\t}\r\n\r\n\t\tif(this.page > this.max){\r\n\t\t\tthis.page = this.max;\r\n\t\t}\r\n\t}\r\n\r\n\t//reset to first page without triggering action\r\n\treset(force, columnsChanged){\r\n\t\tif(this.mode == \"local\" || force){\r\n\t\t\tthis.page = 1;\r\n\t\t}\r\n\r\n\t\tif(columnsChanged){\r\n\t\t\tthis.initialLoad = true;\r\n\t\t}\r\n\r\n\t\treturn true;\r\n\t}\r\n\r\n\t//set the maxmum page\r\n\tsetMaxPage(max){\r\n\r\n\t\tmax = parseInt(max);\r\n\r\n\t\tthis.max = max || 1;\r\n\r\n\t\tif(this.page > this.max){\r\n\t\t\tthis.page = this.max;\r\n\t\t\tthis.trigger();\r\n\t\t}\r\n\t}\r\n\r\n\t//set current page number\r\n\tsetPage(page){\r\n\t\tswitch(page){\r\n\t\t\tcase \"first\":\r\n\t\t\t\treturn this.setPage(1);\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"prev\":\r\n\t\t\t\treturn this.previousPage();\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"next\":\r\n\t\t\t\treturn this.nextPage();\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"last\":\r\n\t\t\t\treturn this.setPage(this.max);\r\n\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\treturn new Promise((resolve, reject) => {\r\n\r\n\t\t\tpage = parseInt(page);\r\n\r\n\t\t\tif((page > 0 && page <= this.max) || this.mode !== \"local\"){\r\n\t\t\t\tthis.page = page;\r\n\t\t\t\tthis.trigger()\r\n\t\t\t\t.then(()=>{\r\n\t\t\t\t\tresolve();\r\n\t\t\t\t})\r\n\t\t\t\t.catch(()=>{\r\n\t\t\t\t\treject();\r\n\t\t\t\t});\r\n\r\n\t\t\t\tif(this.table.options.persistence && this.table.modExists(\"persistence\", true) && this.table.modules.persistence.config.page){\r\n\t\t\t\t\tthis.table.modules.persistence.save(\"page\");\r\n\t\t\t\t}\r\n\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Pagination Error - Requested page is out of range of 1 - \" + this.max + \":\", page);\r\n\t\t\t\treject();\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tsetPageToRow(row){\r\n\t\treturn new Promise((resolve, reject)=>{\r\n\r\n\t\t\tvar rows = this.table.rowManager.getDisplayRows(this.displayIndex - 1);\r\n\t\t\tvar index = rows.indexOf(row);\r\n\r\n\t\t\tif(index > -1){\r\n\t\t\t\tvar page = this.size === true ? 1 : Math.ceil((index + 1) / this.size);\r\n\r\n\t\t\t\tthis.setPage(page)\r\n\t\t\t\t.then(()=>{\r\n\t\t\t\t\tresolve();\r\n\t\t\t\t})\r\n\t\t\t\t.catch(()=>{\r\n\t\t\t\t\treject();\r\n\t\t\t\t});\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Pagination Error - Requested row is not visible\");\r\n\t\t\t\treject();\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tsetPageSize(size){\r\n\t\tif(size !== true){\r\n\t\t\tsize = parseInt(size);\r\n\t\t}\r\n\r\n\t\tif(size > 0){\r\n\t\t\tthis.size = size;\r\n\t\t}\r\n\r\n\t\tif(this.pageSizeSelect){\r\n\t\t\t// this.pageSizeSelect.value = size;\r\n\t\t\tthis.generatePageSizeSelectList();\r\n\t\t}\r\n\r\n\t\tif(this.table.options.persistence && this.table.modExists(\"persistence\", true) && this.table.modules.persistence.config.page){\r\n\t\t\tthis.table.modules.persistence.save(\"page\");\r\n\t\t}\r\n\t}\r\n\r\n\t//setup the pagination buttons\r\n\t_setPageButtons(){\r\n\t\tlet leftSize = Math.floor((this.count-1) / 2);\r\n\t\tlet rightSize = Math.ceil((this.count-1) / 2);\r\n\t\tlet min = this.max - this.page + leftSize + 1 < this.count ? this.max-this.count+1: Math.max(this.page-leftSize,1);\r\n\t\tlet max = this.page <= rightSize? Math.min(this.count, this.max) :Math.min(this.page+rightSize, this.max);\r\n\r\n\t\twhile(this.pagesElement.firstChild) this.pagesElement.removeChild(this.pagesElement.firstChild);\r\n\r\n\t\tif(this.page == 1){\r\n\t\t\tthis.firstBut.disabled = true;\r\n\t\t\tthis.prevBut.disabled = true;\r\n\t\t}else{\r\n\t\t\tthis.firstBut.disabled = false;\r\n\t\t\tthis.prevBut.disabled = false;\r\n\t\t}\r\n\r\n\t\tif(this.page == this.max){\r\n\t\t\tthis.lastBut.disabled = true;\r\n\t\t\tthis.nextBut.disabled = true;\r\n\t\t}else{\r\n\t\t\tthis.lastBut.disabled = false;\r\n\t\t\tthis.nextBut.disabled = false;\r\n\t\t}\r\n\r\n\t\tfor(let i = min; i <= max; i++){\r\n\t\t\tif(i>0 && i <= this.max){\r\n\t\t\t\tthis.pagesElement.appendChild(this._generatePageButton(i));\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.footerRedraw();\r\n\t}\r\n\r\n\t_generatePageButton(page){\r\n\t\tvar button = document.createElement(\"button\");\r\n\r\n\t\tbutton.classList.add(\"tabulator-page\");\r\n\t\tif(page == this.page){\r\n\t\t\tbutton.classList.add(\"active\");\r\n\t\t}\r\n\r\n\t\tbutton.setAttribute(\"type\", \"button\");\r\n\t\tbutton.setAttribute(\"role\", \"button\");\r\n\r\n\t\tthis.table.modules.localize.bind(\"pagination|page_title\", (value) => {\r\n\t\t\tbutton.setAttribute(\"aria-label\", value + \" \" + page);\r\n\t\t\tbutton.setAttribute(\"title\", value + \" \" + page);\r\n\t\t});\r\n\r\n\t\tbutton.setAttribute(\"data-page\", page);\r\n\t\tbutton.textContent = page;\r\n\r\n\t\tbutton.addEventListener(\"click\", (e) => {\r\n\t\t\tthis.setPage(page).then(()=>{}).catch(()=>{});\r\n\t\t});\r\n\r\n\t\treturn button;\r\n\t}\r\n\r\n\t//previous page\r\n\tpreviousPage(){\r\n\t\treturn new Promise((resolve, reject)=>{\r\n\t\t\tif(this.page > 1){\r\n\t\t\t\tthis.page--;\r\n\t\t\t\tthis.trigger()\r\n\t\t\t\t.then(()=>{\r\n\t\t\t\t\tresolve();\r\n\t\t\t\t})\r\n\t\t\t\t.catch(()=>{\r\n\t\t\t\t\treject();\r\n\t\t\t\t});\r\n\r\n\t\t\t\tif(this.table.options.persistence && this.table.modExists(\"persistence\", true) && this.table.modules.persistence.config.page){\r\n\t\t\t\t\tthis.table.modules.persistence.save(\"page\");\r\n\t\t\t\t}\r\n\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Pagination Error - Previous page would be less than page 1:\", 0);\r\n\t\t\t\treject()\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t//next page\r\n\tnextPage(){\r\n\t\treturn new Promise((resolve, reject)=>{\r\n\t\t\tif(this.page < this.max){\r\n\t\t\t\tthis.page++;\r\n\t\t\t\tthis.trigger()\r\n\t\t\t\t.then(()=>{\r\n\t\t\t\t\tresolve();\r\n\t\t\t\t})\r\n\t\t\t\t.catch(()=>{\r\n\t\t\t\t\treject();\r\n\t\t\t\t});\r\n\r\n\t\t\t\tif(this.table.options.persistence && this.table.modExists(\"persistence\", true) && this.table.modules.persistence.config.page){\r\n\t\t\t\t\tthis.table.modules.persistence.save(\"page\");\r\n\t\t\t\t}\r\n\r\n\t\t\t}else{\r\n\t\t\t\tif(!this.progressiveLoad){\r\n\t\t\t\t\tconsole.warn(\"Pagination Error - Next page would be greater than maximum page of \" + this.max + \":\", this.max + 1);\r\n\t\t\t\t}\r\n\t\t\t\treject();\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t//return current page number\r\n\tgetPage(){\r\n\t\treturn this.page;\r\n\t}\r\n\r\n\t//return max page number\r\n\tgetPageMax(){\r\n\t\treturn this.max;\r\n\t}\r\n\r\n\tgetPageSize(size){\r\n\t\treturn this.size;\r\n\t}\r\n\r\n\tgetMode(){\r\n\t\treturn this.mode;\r\n\t}\r\n\r\n\t//return appropriate rows for current page\r\n\tgetRows(data){\r\n\t\tvar output, start, end;\r\n\r\n\t\tif(this.mode == \"local\"){\r\n\t\t\toutput = [];\r\n\r\n\t\t\tif(this.size === true){\r\n\t\t\t\tstart = 0;\r\n\t\t\t\tend = data.length;\r\n\t\t\t}else{\r\n\t\t\t\tstart = this.size * (this.page - 1);\r\n\t\t\t\tend = start + parseInt(this.size);\r\n\t\t\t}\r\n\r\n\r\n\t\t\tthis._setPageButtons();\r\n\r\n\t\t\tfor(let i = start; i < end; i++){\r\n\t\t\t\tif(data[i]){\r\n\t\t\t\t\toutput.push(data[i]);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn output;\r\n\t\t}else{\r\n\t\t\tthis._setPageButtons();\r\n\r\n\t\t\treturn data.slice(0);\r\n\t\t}\r\n\t}\r\n\r\n\ttrigger(){\r\n\t\tvar left;\r\n\r\n\t\treturn new Promise((resolve, reject)=>{\r\n\r\n\t\t\tswitch(this.mode){\r\n\t\t\t\tcase \"local\":\r\n\t\t\t\tleft = this.table.rowManager.scrollLeft;\r\n\r\n\t\t\t\tthis.table.rowManager.refreshActiveData(\"page\");\r\n\t\t\t\tthis.table.rowManager.scrollHorizontal(left);\r\n\r\n\t\t\t\tthis.table.options.pageLoaded.call(this.table, this.getPage());\r\n\t\t\t\tresolve();\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"remote\":\r\n\t\t\t\tcase \"progressive_load\":\r\n\t\t\t\tcase \"progressive_scroll\":\r\n\t\t\t\tthis.table.modules.ajax.blockActiveRequest();\r\n\t\t\t\tthis._getRemotePage()\r\n\t\t\t\t.then(()=>{\r\n\t\t\t\t\tresolve();\r\n\t\t\t\t})\r\n\t\t\t\t.catch(()=>{\r\n\t\t\t\t\treject();\r\n\t\t\t\t});\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tdefault:\r\n\t\t\t\tconsole.warn(\"Pagination Error - no such pagination mode:\", this.mode);\r\n\t\t\t\treject();\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t_getRemotePage(){\r\n\t\tvar oldParams, pageParams;\r\n\r\n\t\treturn new Promise((resolve, reject) => {\r\n\r\n\t\t\tif(!this.table.modExists(\"ajax\", true)){\r\n\t\t\t\treject();\r\n\t\t\t}\r\n\r\n\t\t\t//record old params and restore after request has been made\r\n\t\t\toldParams = Helpers.deepClone(this.table.modules.ajax.getParams() || {});\r\n\t\t\tpageParams = this.table.modules.ajax.getParams();\r\n\r\n\t\t\t//configure request params\r\n\t\t\tpageParams[this.dataSentNames.page] = this.page;\r\n\r\n\t\t\t//set page size if defined\r\n\t\t\tif(this.size){\r\n\t\t\t\tpageParams[this.dataSentNames.size] = this.size;\r\n\t\t\t}\r\n\r\n\t\t\t//set sort data if defined\r\n\t\t\tif(this.table.options.ajaxSorting && this.table.modExists(\"sort\")){\r\n\t\t\t\tlet sorters = this.table.modules.sort.getSort();\r\n\r\n\t\t\t\tsorters.forEach((item) => {\r\n\t\t\t\t\tdelete item.column;\r\n\t\t\t\t});\r\n\r\n\t\t\t\tpageParams[this.dataSentNames.sorters] = sorters;\r\n\t\t\t}\r\n\r\n\t\t\t//set filter data if defined\r\n\t\t\tif(this.table.options.ajaxFiltering && this.table.modExists(\"filter\")){\r\n\t\t\t\tlet filters = this.table.modules.filter.getFilters(true, true);\r\n\t\t\t\tpageParams[this.dataSentNames.filters] = filters;\r\n\t\t\t}\r\n\r\n\t\t\tthis.table.modules.ajax.setParams(pageParams);\r\n\r\n\t\t\tthis.table.modules.ajax.sendRequest(this.progressiveLoad)\r\n\t\t\t.then((data)=>{\r\n\t\t\t\tthis._parseRemoteData(data);\r\n\t\t\t\tresolve();\r\n\t\t\t})\r\n\t\t\t.catch((e)=>{reject()});\r\n\r\n\t\t\tthis.table.modules.ajax.setParams(oldParams);\r\n\t\t});\r\n\t}\r\n\r\n\t_parseRemoteData(data){\r\n\t\tvar left, data, margin;\r\n\r\n\t\tif(typeof data[this.dataReceivedNames.last_page] === \"undefined\"){\r\n\t\t\tconsole.warn(\"Remote Pagination Error - Server response missing '\" + this.dataReceivedNames.last_page + \"' property\");\r\n\t\t}\r\n\r\n\t\tif(data[this.dataReceivedNames.data]){\r\n\t\t\tthis.max = parseInt(data[this.dataReceivedNames.last_page]) || 1;\r\n\r\n\t\t\tif(this.progressiveLoad){\r\n\t\t\t\tswitch(this.mode){\r\n\t\t\t\t\tcase \"progressive_load\":\r\n\r\n\t\t\t\t\tif(this.page == 1){\r\n\t\t\t\t\t\tthis.table.rowManager.setData(data[this.dataReceivedNames.data], false, this.initialLoad && this.page == 1)\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tthis.table.rowManager.addRows(data[this.dataReceivedNames.data]);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif(this.page < this.max){\r\n\t\t\t\t\t\tsetTimeout(() => {\r\n\t\t\t\t\t\t\tthis.nextPage().then(()=>{}).catch(()=>{});\r\n\t\t\t\t\t\t}, this.table.options.ajaxProgressiveLoadDelay);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase \"progressive_scroll\":\r\n\t\t\t\t\tdata = this.table.rowManager.getData().concat(data[this.dataReceivedNames.data]);\r\n\r\n\t\t\t\t\tthis.table.rowManager.setData(data, true, this.initialLoad && this.page == 1);\r\n\r\n\t\t\t\t\tmargin = this.table.options.ajaxProgressiveLoadScrollMargin || (this.table.rowManager.element.clientHeight * 2);\r\n\r\n\t\t\t\t\tif(this.table.rowManager.element.scrollHeight <= (this.table.rowManager.element.clientHeight + margin)){\r\n\t\t\t\t\t\tthis.nextPage().then(()=>{}).catch(()=>{});\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tleft = this.table.rowManager.scrollLeft;\r\n\r\n\t\t\t\tthis.table.rowManager.setData(data[this.dataReceivedNames.data], false, this.initialLoad && this.page == 1);\r\n\r\n\t\t\t\tthis.table.rowManager.scrollHorizontal(left);\r\n\r\n\t\t\t\tthis.table.columnManager.scrollHorizontal(left);\r\n\r\n\t\t\t\tthis.table.options.pageLoaded.call(this.table, this.getPage());\r\n\t\t\t}\r\n\r\n\t\t\tthis.initialLoad = false;\r\n\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Remote Pagination Error - Server response missing '\" + this.dataReceivedNames.data + \"' property\");\r\n\t\t}\r\n\t}\r\n\r\n\t//handle the footer element being redrawn\r\n\tfooterRedraw(){\r\n\t\tvar footer = this.table.footerManager.element;\r\n\r\n\t\tif((Math.ceil(footer.clientWidth) - footer.scrollWidth) < 0){\r\n\t\t\tthis.pagesElement.style.display = 'none';\r\n\t\t}else{\r\n\t\t\tthis.pagesElement.style.display = '';\r\n\r\n\t\t\tif((Math.ceil(footer.clientWidth) - footer.scrollWidth) < 0){\r\n\t\t\t\tthis.pagesElement.style.display = 'none';\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n\r\nPage.moduleName = \"page\";\r\n\r\n//load defaults\r\nPage.defaultDataSentNames = defaultDataSentNames;\r\nPage.defaultDataReceivedNames = defaultDataReceivedNames;\r\n\r\nexport default Page;","export default {\r\n\t\"page\":\"page\",\r\n\t\"size\":\"size\",\r\n\t\"sorters\":\"sorters\",\r\n\t\"filters\":\"filters\",\r\n};","export default {\r\n\t\"current_page\":\"current_page\",\r\n\t\"last_page\":\"last_page\",\r\n\t\"data\":\"data\",\r\n};","// read peristence information from storage\r\nexport default {\r\n\tlocal:function(id, type){\r\n\t\tvar data = localStorage.getItem(id + \"-\" + type);\r\n\r\n\t\treturn data ? JSON.parse(data) : false;\r\n\t},\r\n\tcookie:function(id, type){\r\n\t\tvar cookie = document.cookie,\r\n\t\tkey = id + \"-\" + type,\r\n\t\tcookiePos = cookie.indexOf(key + \"=\"),\r\n\t\tend, data;\r\n\r\n\t\t//if cookie exists, decode and load column data into tabulator\r\n\t\tif(cookiePos > -1){\r\n\t\t\tcookie = cookie.substr(cookiePos);\r\n\r\n\t\t\tend = cookie.indexOf(\";\");\r\n\r\n\t\t\tif(end > -1){\r\n\t\t\t\tcookie = cookie.substr(0, end);\r\n\t\t\t}\r\n\r\n\t\t\tdata = cookie.replace(key + \"=\", \"\");\r\n\t\t}\r\n\r\n\t\treturn data ? JSON.parse(data) : false;\r\n\t}\r\n};","//write persistence information to storage\r\nexport default {\r\n\tlocal:function(id, type, data){\r\n\t\tlocalStorage.setItem(id + \"-\" + type, JSON.stringify(data));\r\n\t},\r\n\tcookie:function(id, type, data){\r\n\t\tvar expireDate = new Date();\r\n\r\n\t\texpireDate.setDate(expireDate.getDate() + 10000);\r\n\r\n\t\tdocument.cookie = id + \"-\" + type + \"=\" + JSON.stringify(data) + \"; expires=\" + expireDate.toUTCString();\r\n\t}\r\n};","import Module from '../../core/Module.js';\r\n\r\nimport defaultReaders from './defaults/readers.js';\r\nimport defaultWriters from './defaults/writers.js';\r\n\r\nclass Persistence extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.mode = \"\";\r\n\t\tthis.id = \"\";\r\n\t\t// this.persistProps = [\"field\", \"width\", \"visible\"];\r\n\t\tthis.defWatcherBlock = false;\r\n\t\tthis.config = {};\r\n\t\tthis.readFunc = false;\r\n\t\tthis.writeFunc = false;\r\n\t}\r\n\r\n\t// Test for whether localStorage is available for use.\r\n\tlocalStorageTest() {\r\n\t\tvar testKey = \"_tabulator_test\";\r\n\r\n\t\ttry {\r\n\t\t\twindow.localStorage.setItem( testKey, testKey);\r\n\t\t\twindow.localStorage.removeItem( testKey );\r\n\t\t\treturn true;\r\n\t\t} catch(e) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\t//setup parameters\r\n\tinitialize(){\r\n\t\t//determine persistent layout storage type\r\n\t\tvar mode = this.table.options.persistenceMode,\r\n\t\tid = this.table.options.persistenceID,\r\n\t\tretreivedData;\r\n\r\n\t\tthis.mode = mode !== true ? mode : (this.localStorageTest() ? \"local\" : \"cookie\");\r\n\r\n\t\tif(this.table.options.persistenceReaderFunc){\r\n\t\t\tif(typeof this.table.options.persistenceReaderFunc === \"function\"){\r\n\t\t\t\tthis.readFunc = this.table.options.persistenceReaderFunc;\r\n\t\t\t}else{\r\n\t\t\t\tif(Persistence.readers[this.table.options.persistenceReaderFunc]){\r\n\t\t\t\t\tthis.readFunc = Persistence.readers[this.table.options.persistenceReaderFunc];\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.warn(\"Persistence Read Error - invalid reader set\", this.table.options.persistenceReaderFunc);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tif(Persistence.readers[this.mode]){\r\n\t\t\t\tthis.readFunc = Persistence.readers[this.mode];\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Persistence Read Error - invalid reader set\", this.mode);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(this.table.options.persistenceWriterFunc){\r\n\t\t\tif(typeof this.table.options.persistenceWriterFunc === \"function\"){\r\n\t\t\t\tthis.writeFunc = this.table.options.persistenceWriterFunc;\r\n\t\t\t}else{\r\n\t\t\t\tif(Persistence.writers[this.table.options.persistenceWriterFunc]){\r\n\t\t\t\t\tthis.writeFunc = Persistence.writers[this.table.options.persistenceWriterFunc];\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.warn(\"Persistence Write Error - invalid reader set\", this.table.options.persistenceWriterFunc);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tif(Persistence.writers[this.mode]){\r\n\t\t\t\tthis.writeFunc = Persistence.writers[this.mode];\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Persistence Write Error - invalid writer set\", this.mode);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//set storage tag\r\n\t\tthis.id = \"tabulator-\" + (id || (this.table.element.getAttribute(\"id\") || \"\"));\r\n\r\n\t\tthis.config = {\r\n\t\t\tsort:this.table.options.persistence === true || this.table.options.persistence.sort,\r\n\t\t\tfilter:this.table.options.persistence === true || this.table.options.persistence.filter,\r\n\t\t\tgroup:this.table.options.persistence === true || this.table.options.persistence.group,\r\n\t\t\tpage:this.table.options.persistence === true || this.table.options.persistence.page,\r\n\t\t\tcolumns:this.table.options.persistence === true ? [\"title\", \"width\", \"visible\"] : this.table.options.persistence.columns,\r\n\t\t};\r\n\r\n\t\t//load pagination data if needed\r\n\t\tif(this.config.page){\r\n\t\t\tretreivedData = this.retreiveData(\"page\");\r\n\r\n\t\t\tif(retreivedData){\r\n\t\t\t\tif(typeof retreivedData.paginationSize !== \"undefined\" && (this.config.page === true || this.config.page.size)){\r\n\t\t\t\t\tthis.table.options.paginationSize = retreivedData.paginationSize;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(typeof retreivedData.paginationInitialPage !== \"undefined\" && (this.config.page === true || this.config.page.page)){\r\n\t\t\t\t\tthis.table.options.paginationInitialPage = retreivedData.paginationInitialPage;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//load group data if needed\r\n\t\tif(this.config.group){\r\n\t\t\tretreivedData = this.retreiveData(\"group\");\r\n\r\n\t\t\tif(retreivedData){\r\n\t\t\t\tif(typeof retreivedData.groupBy !== \"undefined\" && (this.config.group === true || this.config.group.groupBy)){\r\n\t\t\t\t\tthis.table.options.groupBy = retreivedData.groupBy;\r\n\t\t\t\t}\r\n\t\t\t\tif(typeof retreivedData.groupStartOpen !== \"undefined\" && (this.config.group === true || this.config.group.groupStartOpen)){\r\n\t\t\t\t\tthis.table.options.groupStartOpen = retreivedData.groupStartOpen;\r\n\t\t\t\t}\r\n\t\t\t\tif(typeof retreivedData.groupHeader !== \"undefined\" && (this.config.group === true || this.config.group.groupHeader)){\r\n\t\t\t\t\tthis.table.options.groupHeader = retreivedData.groupHeader;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(this.config.columns){\r\n\t\t\tthis.table.options.columns = this.load(\"columns\", this.table.options.columns);\r\n\t\t}\r\n\t}\r\n\r\n\tinitializeColumn(column){\r\n\t\tvar def, keys;\r\n\r\n\t\tif(this.config.columns){\r\n\t\t\tthis.defWatcherBlock = true;\r\n\r\n\t\t\tdef = column.getDefinition();\r\n\r\n\t\t\tkeys = this.config.columns === true ? Object.keys(def) : this.config.columns;\r\n\r\n\t\t\tkeys.forEach((key)=>{\r\n\t\t\t\tvar props = Object.getOwnPropertyDescriptor(def, key);\r\n\t\t\t\tvar value = def[key];\r\n\t\t\t\tif(props){\r\n\t\t\t\t\tObject.defineProperty(def, key, {\r\n\t\t\t\t\t\tset: function(newValue){\r\n\t\t\t\t\t\t\tvalue = newValue;\r\n\r\n\t\t\t\t\t\t\tif(!this.defWatcherBlock){\r\n\t\t\t\t\t\t\t\tthis.save(\"columns\");\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\tif(props.set){\r\n\t\t\t\t\t\t\t\tprops.set(newValue);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tget:function(){\r\n\t\t\t\t\t\t\tif(props.get){\r\n\t\t\t\t\t\t\t\tprops.get();\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\treturn value;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tthis.defWatcherBlock = false;\r\n\t\t}\r\n\t}\r\n\r\n\t//load saved definitions\r\n\tload(type, current){\r\n\t\tvar data = this.retreiveData(type);\r\n\r\n\t\tif(current){\r\n\t\t\tdata = data ? this.mergeDefinition(current, data) : current;\r\n\t\t}\r\n\r\n\t\treturn data;\r\n\t}\r\n\r\n\t//retreive data from memory\r\n\tretreiveData(type){\r\n\t\treturn this.readFunc ? this.readFunc(this.id, type) : false;\r\n\t}\r\n\r\n\t//merge old and new column definitions\r\n\tmergeDefinition(oldCols, newCols){\r\n\t\tvar output = [];\r\n\r\n\t\tnewCols = newCols || [];\r\n\r\n\t\tnewCols.forEach((column, to) => {\r\n\t\t\tvar from = this._findColumn(oldCols, column),\r\n\t\t\tkeys;\r\n\r\n\t\t\tif(from){\r\n\t\t\t\tif(this.config.columns === true || this.config.columns == undefined){\r\n\t\t\t\t\tkeys = Object.keys(from);\r\n\t\t\t\t\tkeys.push(\"width\");\r\n\t\t\t\t}else{\r\n\t\t\t\t\tkeys = this.config.columns;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tkeys.forEach((key)=>{\r\n\t\t\t\t\tif(key !== \"columns\" && typeof column[key] !== \"undefined\"){\r\n\t\t\t\t\t\tfrom[key] = column[key];\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\tif(from.columns){\r\n\t\t\t\t\tfrom.columns = this.mergeDefinition(from.columns, column.columns);\r\n\t\t\t\t}\r\n\r\n\t\t\t\toutput.push(from);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\toldCols.forEach((column, i) => {\r\n\t\t\tvar from = this._findColumn(newCols, column);\r\n\r\n\t\t\tif (!from) {\r\n\t\t\t\tif(output.length>i){\r\n\t\t\t\t\toutput.splice(i, 0, column);\r\n\t\t\t\t}else{\r\n\t\t\t\t\toutput.push(column);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\t//find matching columns\r\n\t_findColumn(columns, subject){\r\n\t\tvar type = subject.columns ? \"group\" : (subject.field ? \"field\" : \"object\");\r\n\r\n\t\treturn columns.find(function(col){\r\n\t\t\tswitch(type){\r\n\t\t\t\tcase \"group\":\r\n\t\t\t\treturn col.title === subject.title && col.columns.length === subject.columns.length;\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"field\":\r\n\t\t\t\treturn col.field === subject.field;\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"object\":\r\n\t\t\t\treturn col === subject;\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t//save data\r\n\tsave(type){\r\n\t\tvar data = {};\r\n\r\n\t\tswitch(type){\r\n\t\t\tcase \"columns\":\r\n\t\t\tdata = this.parseColumns(this.table.columnManager.getColumns())\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"filter\":\r\n\t\t\tdata = this.table.modules.filter.getFilters();\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"sort\":\r\n\t\t\tdata = this.validateSorters(this.table.modules.sort.getSort());\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"group\":\r\n\t\t\tdata = this.getGroupConfig();\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"page\":\r\n\t\t\tdata = this.getPageConfig();\r\n\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\tif(this.writeFunc){\r\n\t\t\tthis.writeFunc(this.id, type, data);\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t//ensure sorters contain no function data\r\n\tvalidateSorters(data){\r\n\t\tdata.forEach(function(item){\r\n\t\t\titem.column = item.field;\r\n\t\t\tdelete item.field;\r\n\t\t});\r\n\r\n\t\treturn data;\r\n\t}\r\n\r\n\tgetGroupConfig(){\r\n\t\tvar data = {};\r\n\r\n\t\tif(this.config.group){\r\n\t\t\tif(this.config.group === true || this.config.group.groupBy){\r\n\t\t\t\tdata.groupBy = this.table.options.groupBy;\r\n\t\t\t}\r\n\r\n\t\t\tif(this.config.group === true || this.config.group.groupStartOpen){\r\n\t\t\t\tdata.groupStartOpen = this.table.options.groupStartOpen;\r\n\t\t\t}\r\n\r\n\t\t\tif(this.config.group === true || this.config.group.groupHeader){\r\n\t\t\t\tdata.groupHeader = this.table.options.groupHeader;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn data;\r\n\t}\r\n\r\n\tgetPageConfig(){\r\n\t\tvar data = {};\r\n\r\n\t\tif(this.config.page){\r\n\t\t\tif(this.config.page === true || this.config.page.size){\r\n\t\t\t\tdata.paginationSize = this.table.modules.page.getPageSize();\r\n\t\t\t}\r\n\r\n\t\t\tif(this.config.page === true || this.config.page.page){\r\n\t\t\t\tdata.paginationInitialPage = this.table.modules.page.getPage();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn data;\r\n\t}\r\n\r\n\r\n\t//parse columns for data to store\r\n\tparseColumns(columns){\r\n\t\tvar definitions = [],\r\n\t\texcludedKeys = [\"headerContextMenu\", \"headerMenu\", \"contextMenu\", \"clickMenu\"];\r\n\r\n\t\tcolumns.forEach((column) => {\r\n\t\t\tvar defStore = {},\r\n\t\t\tcolDef = column.getDefinition(),\r\n\t\t\tkeys;\r\n\r\n\t\t\tif(column.isGroup){\r\n\t\t\t\tdefStore.title = colDef.title;\r\n\t\t\t\tdefStore.columns = this.parseColumns(column.getColumns());\r\n\t\t\t}else{\r\n\t\t\t\tdefStore.field = column.getField();\r\n\r\n\t\t\t\tif(this.config.columns === true || this.config.columns == undefined){\r\n\t\t\t\t\tkeys = Object.keys(colDef);\r\n\t\t\t\t\tkeys.push(\"width\");\r\n\t\t\t\t}else{\r\n\t\t\t\t\tkeys = this.config.columns;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tkeys.forEach((key)=>{\r\n\t\t\t\t\tswitch(key){\r\n\t\t\t\t\t\tcase \"width\":\r\n\t\t\t\t\t\tdefStore.width = column.getWidth();\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase \"visible\":\r\n\t\t\t\t\t\tdefStore.visible = column.visible;\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\tdefault:\r\n\t\t\t\t\t\tif(typeof colDef[key] !== \"function\" && excludedKeys.indexOf(key) === -1){\r\n\t\t\t\t\t\t\tdefStore[key] = colDef[key];\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\tdefinitions.push(defStore);\r\n\t\t});\r\n\r\n\t\treturn definitions;\r\n\t}\r\n}\r\n\r\nPersistence.moduleName = \"persistence\";\r\n\r\n//load defaults\r\nPersistence.readers = defaultReaders;\r\nPersistence.writers = defaultWriters;\r\n\r\nexport default Persistence;","import Module from '../../core/Module.js';\r\n\r\nclass Print extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.element = false;\r\n\t\tthis.manualBlock = false;\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\twindow.addEventListener(\"beforeprint\", this.replaceTable.bind(this));\r\n\t\twindow.addEventListener(\"afterprint\", this.cleanup.bind(this));\r\n\t}\r\n\r\n\treplaceTable(){\r\n\t\tif(!this.manualBlock){\r\n\t\t\tthis.element = document.createElement(\"div\");\r\n\t\t\tthis.element.classList.add(\"tabulator-print-table\");\r\n\r\n\t\t\tthis.element.appendChild(this.table.modules.export.genereateTable(this.table.options.printConfig, this.table.options.printStyled, this.table.options.printRowRange, \"print\"));\r\n\r\n\t\t\tthis.table.element.style.display = \"none\";\r\n\r\n\t\t\tthis.table.element.parentNode.insertBefore(this.element, this.table.element);\r\n\t\t}\r\n\t}\r\n\r\n\tcleanup(){\r\n\t\tdocument.body.classList.remove(\"tabulator-print-fullscreen-hide\");\r\n\r\n\t\tif(this.element && this.element.parentNode){\r\n\t\t\tthis.element.parentNode.removeChild(this.element);\r\n\t\t\tthis.table.element.style.display = \"\";\r\n\t\t}\r\n\t}\r\n\r\n\tprintFullscreen(visible, style, config){\r\n\t\tvar scrollX = window.scrollX,\r\n\t\tscrollY = window.scrollY,\r\n\t\theaderEl = document.createElement(\"div\"),\r\n\t\tfooterEl = document.createElement(\"div\"),\r\n\t\ttableEl = this.table.modules.export.genereateTable(typeof config != \"undefined\" ? config : this.table.options.printConfig, typeof style != \"undefined\" ? style : this.table.options.printStyled, visible || this.table.options.printRowRange, \"print\"),\r\n\t\theaderContent, footerContent;\r\n\r\n\t\tthis.manualBlock = true;\r\n\r\n\t\tthis.element = document.createElement(\"div\");\r\n\t\tthis.element.classList.add(\"tabulator-print-fullscreen\");\r\n\r\n\t\tif(this.table.options.printHeader){\r\n\t\t\theaderEl.classList.add(\"tabulator-print-header\");\r\n\r\n\t\t\theaderContent = typeof this.table.options.printHeader == \"function\" ? this.table.options.printHeader.call(this.table) : this.table.options.printHeader;\r\n\r\n\t\t\tif(typeof headerContent == \"string\"){\r\n\t\t\t\theaderEl.innerHTML = headerContent;\r\n\t\t\t}else{\r\n\t\t\t\theaderEl.appendChild(headerContent);\r\n\t\t\t}\r\n\r\n\t\t\tthis.element.appendChild(headerEl);\r\n\t\t}\r\n\r\n\t\tthis.element.appendChild(tableEl);\r\n\r\n\t\tif(this.table.options.printFooter){\r\n\t\t\tfooterEl.classList.add(\"tabulator-print-footer\");\r\n\r\n\t\t\tfooterContent = typeof this.table.options.printFooter == \"function\" ? this.table.options.printFooter.call(this.table) : this.table.options.printFooter;\r\n\r\n\r\n\t\t\tif(typeof footerContent == \"string\"){\r\n\t\t\t\tfooterEl.innerHTML = footerContent;\r\n\t\t\t}else{\r\n\t\t\t\tfooterEl.appendChild(footerContent);\r\n\t\t\t}\r\n\r\n\t\t\tthis.element.appendChild(footerEl);\r\n\t\t}\r\n\r\n\t\tdocument.body.classList.add(\"tabulator-print-fullscreen-hide\");\r\n\t\tdocument.body.appendChild(this.element);\r\n\r\n\t\tif(this.table.options.printFormatter){\r\n\t\t\tthis.table.options.printFormatter(this.element, tableEl);\r\n\t\t}\r\n\r\n\t\twindow.print();\r\n\r\n\t\tthis.cleanup();\r\n\r\n\t\twindow.scrollTo(scrollX, scrollY);\r\n\r\n\t\tthis.manualBlock = false;\r\n\t}\r\n}\r\n\r\nPrint.moduleName = \"print\";\r\n\r\nexport default Print;","import Module from '../../core/Module.js';\r\n\r\nclass ReactiveData extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.data = false;\r\n\t\tthis.blocked = false; //block reactivity while performing update\r\n\t\tthis.origFuncs = {}; // hold original data array functions to allow replacement after data is done with\r\n\t\tthis.currentVersion = 0;\r\n\t}\r\n\r\n\twatchData(data){\r\n\t\tvar self = this,\r\n\t\tpushFunc, version;\r\n\r\n\t\tthis.currentVersion ++;\r\n\r\n\t\tversion = this.currentVersion;\r\n\r\n\t\tself.unwatchData();\r\n\r\n\t\tself.data = data;\r\n\r\n\t\t//override array push function\r\n\t\tself.origFuncs.push = data.push;\r\n\r\n\t\tObject.defineProperty(self.data, \"push\", {\r\n\t\t\tenumerable: false,\r\n\t\t\tconfigurable: true,\r\n\t\t\tvalue: function () {\r\n\t\t\t\tvar args = Array.from(arguments);\r\n\r\n\t\t\t\tif(!self.blocked && version === self.currentVersion){\r\n\t\t\t\t\targs.forEach(function (arg){\r\n\t\t\t\t\t\tself.table.rowManager.addRowActual(arg, false);\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn self.origFuncs.push.apply(data, arguments);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\t//override array unshift function\r\n\t\tself.origFuncs.unshift = data.unshift;\r\n\r\n\t\tObject.defineProperty(self.data, \"unshift\", {\r\n\t\t\tenumerable: false,\r\n\t\t\tconfigurable: true,\r\n\t\t\tvalue: function () {\r\n\t\t\t\tvar args = Array.from(arguments);\r\n\r\n\t\t\t\tif(!self.blocked && version === self.currentVersion){\r\n\t\t\t\t\targs.forEach(function (arg){\r\n\t\t\t\t\t\tself.table.rowManager.addRowActual(arg, true);\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn self.origFuncs.unshift.apply(data, arguments);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\r\n\t\t//override array shift function\r\n\t\tself.origFuncs.shift = data.shift;\r\n\r\n\t\tObject.defineProperty(self.data, \"shift\", {\r\n\t\t\tenumerable: false,\r\n\t\t\tconfigurable: true,\r\n\t\t\tvalue: function () {\r\n\t\t\t\tvar row;\r\n\r\n\t\t\t\tif(!self.blocked && version === self.currentVersion){\r\n\t\t\t\t\tif(self.data.length){\r\n\t\t\t\t\t\trow = self.table.rowManager.getRowFromDataObject(self.data[0]);\r\n\r\n\t\t\t\t\t\tif(row){\r\n\t\t\t\t\t\t\trow.deleteActual();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn self.origFuncs.shift.call(data);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\t//override array pop function\r\n\t\tself.origFuncs.pop = data.pop;\r\n\r\n\t\tObject.defineProperty(self.data, \"pop\", {\r\n\t\t\tenumerable: false,\r\n\t\t\tconfigurable: true,\r\n\t\t\tvalue: function () {\r\n\t\t\t\tvar row;\r\n\t\t\t\tif(!self.blocked && version === self.currentVersion){\r\n\t\t\t\t\tif(self.data.length){\r\n\t\t\t\t\t\trow = self.table.rowManager.getRowFromDataObject(self.data[self.data.length - 1]);\r\n\r\n\t\t\t\t\t\tif(row){\r\n\t\t\t\t\t\t\trow.deleteActual();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn self.origFuncs.pop.call(data);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\r\n\t\t//override array splice function\r\n\t\tself.origFuncs.splice = data.splice;\r\n\r\n\t\tObject.defineProperty(self.data, \"splice\", {\r\n\t\t\tenumerable: false,\r\n\t\t\tconfigurable: true,\r\n\t\t\tvalue: function () {\r\n\t\t\t\tvar args = Array.from(arguments),\r\n\t\t\t\tstart = args[0] < 0 ? data.length + args[0] : args[0],\r\n\t\t\t\tend = args[1],\r\n\t\t\t\tnewRows = args[2] ? args.slice(2) : false,\r\n\t\t\t\tstartRow;\r\n\r\n\t\t\t\tif(!self.blocked && version === self.currentVersion){\r\n\r\n\t\t\t\t\t//add new rows\r\n\t\t\t\t\tif(newRows){\r\n\t\t\t\t\t\tstartRow = data[start] ? self.table.rowManager.getRowFromDataObject(data[start]) : false;\r\n\r\n\t\t\t\t\t\tif(startRow){\r\n\t\t\t\t\t\t\tnewRows.forEach(function(rowData){\r\n\t\t\t\t\t\t\t\tself.table.rowManager.addRowActual(rowData, true, startRow, true);\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\tnewRows = newRows.slice().reverse();\r\n\r\n\t\t\t\t\t\t\tnewRows.forEach(function(rowData){\r\n\t\t\t\t\t\t\t\tself.table.rowManager.addRowActual(rowData, true, false, true);\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t//delete removed rows\r\n\t\t\t\t\tif(end !== 0){\r\n\t\t\t\t\t\tvar oldRows = data.slice(start, typeof args[1] === \"undefined\" ? args[1] : start + end);\r\n\r\n\t\t\t\t\t\toldRows.forEach(function(rowData, i){\r\n\t\t\t\t\t\t\tvar row = self.table.rowManager.getRowFromDataObject(rowData);\r\n\r\n\t\t\t\t\t\t\tif(row){\r\n\t\t\t\t\t\t\t\trow.deleteActual(i !== oldRows.length - 1);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif(newRows || end !== 0){\r\n\t\t\t\t\t\tself.table.rowManager.reRenderInPosition();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn self.origFuncs.splice.apply(data, arguments);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tunwatchData(){\r\n\t\tif(this.data !== false){\r\n\t\t\tfor(var key in this.origFuncs){\r\n\t\t\t\tObject.defineProperty(this.data, key, {\r\n\t\t\t\t\tenumerable: true,\r\n\t\t\t\t\tconfigurable:true,\r\n\t\t\t\t\twritable:true,\r\n\t\t\t\t\tvalue: this.origFuncs.key,\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\twatchRow(row){\r\n\t\tvar data = row.getData();\r\n\r\n\t\tthis.blocked = true;\r\n\r\n\t\tfor(var key in data){\r\n\t\t\tthis.watchKey(row, data, key);\r\n\t\t}\r\n\r\n\t\tif(this.table.options.dataTree){\r\n\t\t\tthis.watchTreeChildren(row);\r\n\t\t}\r\n\r\n\t\tthis.blocked = false;\r\n\t}\r\n\r\n\twatchTreeChildren (row){\r\n\t\tvar self = this,\r\n\t\tchildField = row.getData()[this.table.options.dataTreeChildField],\r\n\t\torigFuncs = {};\r\n\r\n\t\tfunction rebuildTree(){\r\n\t\t\tself.table.modules.dataTree.initializeRow(row);\r\n\t\t\tself.table.modules.dataTree.layoutRow(row);\r\n\t\t\tself.table.rowManager.refreshActiveData(\"tree\", false, true);\r\n\t\t}\r\n\r\n\t\tif(childField){\r\n\r\n\t\t\torigFuncs.push = childField.push;\r\n\r\n\t\t\tObject.defineProperty(childField, \"push\", {\r\n\t\t\t\tenumerable: false,\r\n\t\t\t\tconfigurable: true,\r\n\t\t\t\tvalue: function value() {\r\n\t\t\t\t\tvar result = origFuncs.push.apply(childField, arguments);\r\n\r\n\t\t\t\t\trebuildTree();\r\n\r\n\t\t\t\t\treturn result;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\torigFuncs.unshift = childField.unshift;\r\n\r\n\t\t\tObject.defineProperty(childField, \"unshift\", {\r\n\t\t\t\tenumerable: false,\r\n\t\t\t\tconfigurable: true,\r\n\t\t\t\tvalue: function value() {\r\n\t\t\t\t\tvar result = origFuncs.unshift.apply(childField, arguments);\r\n\r\n\t\t\t\t\trebuildTree();\r\n\r\n\t\t\t\t\treturn result;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\torigFuncs.shift = childField.shift;\r\n\r\n\t\t\tObject.defineProperty(childField, \"shift\", {\r\n\t\t\t\tenumerable: false,\r\n\t\t\t\tconfigurable: true,\r\n\t\t\t\tvalue: function value() {\r\n\t\t\t\t\tvar result = origFuncs.shift.call(childField);\r\n\r\n\t\t\t\t\trebuildTree();\r\n\r\n\t\t\t\t\treturn result;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\torigFuncs.pop = childField.pop;\r\n\r\n\t\t\tObject.defineProperty(childField, \"pop\", {\r\n\t\t\t\tenumerable: false,\r\n\t\t\t\tconfigurable: true,\r\n\t\t\t\tvalue: function value() {\r\n\t\t\t\t\tvar result = origFuncs.pop.call(childField);\r\n\r\n\t\t\t\t\trebuildTree();\r\n\r\n\t\t\t\t\treturn result;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\torigFuncs.splice = childField.splice;\r\n\r\n\t\t\tObject.defineProperty(childField, \"splice\", {\r\n\t\t\t\tenumerable: false,\r\n\t\t\t\tconfigurable: true,\r\n\t\t\t\tvalue: function value() {\r\n\t\t\t\t\tvar result = origFuncs.splice.apply(childField, arguments);\r\n\r\n\t\t\t\t\trebuildTree();\r\n\r\n\t\t\t\t\treturn result;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\twatchKey(row, data, key){\r\n\t\tvar self = this,\r\n\t\tprops = Object.getOwnPropertyDescriptor(data, key),\r\n\t\tvalue = data[key],\r\n\t\tversion = this.currentVersion;\r\n\r\n\t\tObject.defineProperty(data, key, {\r\n\t\t\tset: function(newValue){\r\n\t\t\t\tvalue = newValue;\r\n\t\t\t\tif(!self.blocked && version === self.currentVersion){\r\n\t\t\t\t\tvar update = {};\r\n\t\t\t\t\tupdate[key] = newValue;\r\n\t\t\t\t\trow.updateData(update);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(props.set){\r\n\t\t\t\t\tprops.set(newValue);\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tget:function(){\r\n\r\n\t\t\t\tif(props.get){\r\n\t\t\t\t\tprops.get();\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn value;\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tunwatchRow(row){\r\n\t\tvar data = row.getData();\r\n\r\n\t\tfor(var key in data){\r\n\t\t\tObject.defineProperty(data, key, {\r\n\t\t\t\tvalue:data[key],\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tblock(){\r\n\t\tthis.blocked = true;\r\n\t}\r\n\r\n\tunblock(){\r\n\t\tthis.blocked = false;\r\n\t}\r\n}\r\n\r\nReactiveData.moduleName = \"reactiveData\";\r\n\r\nexport default ReactiveData;\r\n\r\n\r\n\r\n","import Module from '../../core/Module.js';\r\n\r\nclass ResizeColumns extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.startColumn = false;\r\n\t\tthis.startX = false;\r\n\t\tthis.startWidth = false;\r\n\t\tthis.handle = null;\r\n\t\tthis.prevHandle = null;\r\n\t}\r\n\r\n\tinitializeColumn(type, column, element){\r\n\t\tvar self = this,\r\n\t\tvariableHeight = false,\r\n\t\tmode = this.table.options.resizableColumns;\r\n\r\n\t\t//set column resize mode\r\n\t\tif(type === \"header\"){\r\n\t\t\tvariableHeight = column.definition.formatter == \"textarea\" || column.definition.variableHeight;\r\n\t\t\tcolumn.modules.resize = {variableHeight:variableHeight};\r\n\t\t}\r\n\r\n\t\tif(mode === true || mode == type){\r\n\r\n\t\t\tvar handle = document.createElement('div');\r\n\t\t\thandle.className = \"tabulator-col-resize-handle\";\r\n\r\n\r\n\t\t\tvar prevHandle = document.createElement('div');\r\n\t\t\tprevHandle.className = \"tabulator-col-resize-handle prev\";\r\n\r\n\t\t\thandle.addEventListener(\"click\", function(e){\r\n\t\t\t\te.stopPropagation();\r\n\t\t\t});\r\n\r\n\t\t\tvar handleDown = function(e){\r\n\t\t\t\tvar nearestColumn = column.getLastColumn();\r\n\r\n\t\t\t\tif(nearestColumn && self._checkResizability(nearestColumn)){\r\n\t\t\t\t\tself.startColumn = column;\r\n\t\t\t\t\tself._mouseDown(e, nearestColumn, handle);\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\thandle.addEventListener(\"mousedown\", handleDown);\r\n\t\t\thandle.addEventListener(\"touchstart\", handleDown, {passive: true});\r\n\r\n\t\t\t//reszie column on double click\r\n\t\t\thandle.addEventListener(\"dblclick\", function(e){\r\n\t\t\t\tvar col = column.getLastColumn();\r\n\r\n\t\t\t\tif(col && self._checkResizability(col)){\r\n\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\tcol.reinitializeWidth(true);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\r\n\t\t\tprevHandle.addEventListener(\"click\", function(e){\r\n\t\t\t\te.stopPropagation();\r\n\t\t\t});\r\n\r\n\t\t\tvar prevHandleDown = function(e){\r\n\t\t\t\tvar nearestColumn, colIndex, prevColumn;\r\n\r\n\t\t\t\tnearestColumn = column.getFirstColumn();\r\n\r\n\t\t\t\tif(nearestColumn){\r\n\t\t\t\t\tcolIndex = self.table.columnManager.findColumnIndex(nearestColumn);\r\n\t\t\t\t\tprevColumn = colIndex > 0 ? self.table.columnManager.getColumnByIndex(colIndex - 1) : false;\r\n\r\n\t\t\t\t\tif(prevColumn && self._checkResizability(prevColumn)){\r\n\t\t\t\t\t\tself.startColumn = column;\r\n\t\t\t\t\t\tself._mouseDown(e, prevColumn, prevHandle);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\tprevHandle.addEventListener(\"mousedown\", prevHandleDown);\r\n\t\t\tprevHandle.addEventListener(\"touchstart\", prevHandleDown, {passive: true});\r\n\r\n\t\t\t//resize column on double click\r\n\t\t\tprevHandle.addEventListener(\"dblclick\", function(e){\r\n\t\t\t\tvar nearestColumn, colIndex, prevColumn;\r\n\r\n\t\t\t\tnearestColumn = column.getFirstColumn();\r\n\r\n\t\t\t\tif(nearestColumn){\r\n\t\t\t\t\tcolIndex = self.table.columnManager.findColumnIndex(nearestColumn);\r\n\t\t\t\t\tprevColumn = colIndex > 0 ? self.table.columnManager.getColumnByIndex(colIndex - 1) : false;\r\n\r\n\t\t\t\t\tif(prevColumn && self._checkResizability(prevColumn)){\r\n\t\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\t\tprevColumn.reinitializeWidth(true);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\telement.appendChild(handle);\r\n\t\t\telement.appendChild(prevHandle);\r\n\t\t}\r\n\t}\r\n\r\n\t_checkResizability(column){\r\n\t\treturn typeof column.definition.resizable != \"undefined\" ? column.definition.resizable : this.table.options.resizableColumns;\r\n\t}\r\n\r\n\t_mouseDown(e, column, handle){\r\n\t\tvar self = this;\r\n\r\n\t\tself.table.element.classList.add(\"tabulator-block-select\");\r\n\r\n\t\tfunction mouseMove(e){\r\n\t\t\t// self.table.columnManager.tempScrollBlock();\r\n\r\n\t\t\tif(self.table.rtl){\r\n\t\t\t\tcolumn.setWidth(self.startWidth - ((typeof e.screenX === \"undefined\" ? e.touches[0].screenX : e.screenX) - self.startX));\r\n\t\t\t}else{\r\n\t\t\t\tcolumn.setWidth(self.startWidth + ((typeof e.screenX === \"undefined\" ? e.touches[0].screenX : e.screenX) - self.startX));\r\n\t\t\t}\r\n\r\n\t\t\tif(self.table.options.virtualDomHoz){\r\n\t\t\t\tself.table.vdomHoz.reinitialize(true);\r\n\t\t\t}\r\n\r\n\t\t\tif(!self.table.browserSlow && column.modules.resize && column.modules.resize.variableHeight){\r\n\t\t\t\tcolumn.checkCellHeights();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction mouseUp(e){\r\n\r\n\t\t\t//block editor from taking action while resizing is taking place\r\n\t\t\tif(self.startColumn.modules.edit){\r\n\t\t\t\tself.startColumn.modules.edit.blocked = false;\r\n\t\t\t}\r\n\r\n\t\t\tif(self.table.browserSlow && column.modules.resize && column.modules.resize.variableHeight){\r\n\t\t\t\tcolumn.checkCellHeights();\r\n\t\t\t}\r\n\r\n\t\t\tdocument.body.removeEventListener(\"mouseup\", mouseUp);\r\n\t\t\tdocument.body.removeEventListener(\"mousemove\", mouseMove);\r\n\r\n\t\t\thandle.removeEventListener(\"touchmove\", mouseMove);\r\n\t\t\thandle.removeEventListener(\"touchend\", mouseUp);\r\n\r\n\t\t\tself.table.element.classList.remove(\"tabulator-block-select\");\r\n\r\n\t\t\tif(self.table.options.persistence && self.table.modExists(\"persistence\", true) && self.table.modules.persistence.config.columns){\r\n\t\t\t\tself.table.modules.persistence.save(\"columns\");\r\n\t\t\t}\r\n\r\n\t\t\tself.table.options.columnResized.call(self.table, column.getComponent());\r\n\t\t}\r\n\r\n\t\te.stopPropagation(); //prevent resize from interfereing with movable columns\r\n\r\n\t\t//block editor from taking action while resizing is taking place\r\n\t\tif(self.startColumn.modules.edit){\r\n\t\t\tself.startColumn.modules.edit.blocked = true;\r\n\t\t}\r\n\r\n\t\tself.startX = typeof e.screenX === \"undefined\" ? e.touches[0].screenX : e.screenX;\r\n\t\tself.startWidth = column.getWidth();\r\n\r\n\t\tdocument.body.addEventListener(\"mousemove\", mouseMove);\r\n\t\tdocument.body.addEventListener(\"mouseup\", mouseUp);\r\n\t\thandle.addEventListener(\"touchmove\", mouseMove, {passive: true});\r\n\t\thandle.addEventListener(\"touchend\", mouseUp);\r\n\t}\r\n}\r\n\r\nResizeColumns.moduleName = \"resizeColumns\";\r\n\r\nexport default ResizeColumns;","import Module from '../../core/Module.js';\r\n\r\nclass ResizeRows extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.startColumn = false;\r\n\t\tthis.startY = false;\r\n\t\tthis.startHeight = false;\r\n\t\tthis.handle = null;\r\n\t\tthis.prevHandle = null;\r\n\t}\r\n\r\n\tinitializeRow(row){\r\n\t\tvar self = this,\r\n\t\trowEl = row.getElement();\r\n\r\n\t\tvar handle = document.createElement('div');\r\n\t\thandle.className = \"tabulator-row-resize-handle\";\r\n\r\n\t\tvar prevHandle = document.createElement('div');\r\n\t\tprevHandle.className = \"tabulator-row-resize-handle prev\";\r\n\r\n\t\thandle.addEventListener(\"click\", function(e){\r\n\t\t\te.stopPropagation();\r\n\t\t});\r\n\r\n\t\tvar handleDown = function(e){\r\n\t\t\tself.startRow = row;\r\n\t\t\tself._mouseDown(e, row, handle);\r\n\t\t};\r\n\r\n\t\thandle.addEventListener(\"mousedown\", handleDown);\r\n\t\thandle.addEventListener(\"touchstart\", handleDown, {passive: true});\r\n\r\n\t\tprevHandle.addEventListener(\"click\", function(e){\r\n\t\t\te.stopPropagation();\r\n\t\t});\r\n\r\n\t\tvar prevHandleDown = function(e){\r\n\t\t\tvar prevRow = self.table.rowManager.prevDisplayRow(row);\r\n\r\n\t\t\tif(prevRow){\r\n\t\t\t\tself.startRow = prevRow;\r\n\t\t\t\tself._mouseDown(e, prevRow, prevHandle);\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tprevHandle.addEventListener(\"mousedown\",prevHandleDown);\r\n\t\tprevHandle.addEventListener(\"touchstart\",prevHandleDown, {passive: true});\r\n\r\n\t\trowEl.appendChild(handle);\r\n\t\trowEl.appendChild(prevHandle);\r\n\t}\r\n\r\n\t_mouseDown(e, row, handle){\r\n\t\tvar self = this;\r\n\r\n\t\tself.table.element.classList.add(\"tabulator-block-select\");\r\n\r\n\t\tfunction mouseMove(e){\r\n\t\t\trow.setHeight(self.startHeight + ((typeof e.screenY === \"undefined\" ? e.touches[0].screenY : e.screenY) - self.startY));\r\n\t\t}\r\n\r\n\t\tfunction mouseUp(e){\r\n\r\n\t\t\t// //block editor from taking action while resizing is taking place\r\n\t\t\t// if(self.startColumn.modules.edit){\r\n\t\t\t// \tself.startColumn.modules.edit.blocked = false;\r\n\t\t\t// }\r\n\r\n\t\t\tdocument.body.removeEventListener(\"mouseup\", mouseMove);\r\n\t\t\tdocument.body.removeEventListener(\"mousemove\", mouseMove);\r\n\r\n\t\t\thandle.removeEventListener(\"touchmove\", mouseMove);\r\n\t\t\thandle.removeEventListener(\"touchend\", mouseUp);\r\n\r\n\t\t\tself.table.element.classList.remove(\"tabulator-block-select\");\r\n\r\n\t\t\tself.table.options.rowResized.call(this.table, row.getComponent());\r\n\t\t}\r\n\r\n\t\te.stopPropagation(); //prevent resize from interfereing with movable columns\r\n\r\n\t\t//block editor from taking action while resizing is taking place\r\n\t\t// if(self.startColumn.modules.edit){\r\n\t\t// \tself.startColumn.modules.edit.blocked = true;\r\n\t\t// }\r\n\r\n\t\tself.startY = typeof e.screenY === \"undefined\" ? e.touches[0].screenY : e.screenY;\r\n\t\tself.startHeight = row.getHeight();\r\n\r\n\t\tdocument.body.addEventListener(\"mousemove\", mouseMove);\r\n\t\tdocument.body.addEventListener(\"mouseup\", mouseUp);\r\n\r\n\t\thandle.addEventListener(\"touchmove\", mouseMove, {passive: true});\r\n\t\thandle.addEventListener(\"touchend\", mouseUp);\r\n\t}\r\n}\r\n\r\nResizeRows.moduleName = \"resizeRows\";\r\n\r\nexport default ResizeRows;","import Module from '../../core/Module.js';\r\n\r\nclass ResizeTable extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.binding = false;\r\n\t\tthis.observer = false;\r\n\t\tthis.containerObserver = false;\r\n\r\n\t\tthis.tableHeight = 0;\r\n\t\tthis.tableWidth = 0;\r\n\t\tthis.containerHeight = 0;\r\n\t\tthis.containerWidth = 0;\r\n\r\n\t\tthis.autoResize = false;\r\n\t}\r\n\r\n\tinitialize(row){\r\n\t\tvar table = this.table,\r\n\t\ttableStyle;\r\n\r\n\t\tthis.tableHeight = table.element.clientHeight;\r\n\t\tthis.tableWidth = table.element.clientWidth;\r\n\r\n\t\tif(table.element.parentNode){\r\n\t\t\tthis.containerHeight = table.element.parentNode.clientHeight;\r\n\t\t\tthis.containerWidth = table.element.parentNode.clientWidth;\r\n\t\t}\r\n\r\n\t\tif(typeof ResizeObserver !== \"undefined\" && table.rowManager.getRenderMode() === \"virtual\"){\r\n\r\n\t\t\tthis.autoResize = true;\r\n\r\n\t\t\tthis.observer = new ResizeObserver((entry) => {\r\n\t\t\t\tif(!table.browserMobile || (table.browserMobile &&!table.modules.edit.currentCell)){\r\n\r\n\t\t\t\t\tvar nodeHeight = Math.floor(entry[0].contentRect.height);\r\n\t\t\t\t\tvar nodeWidth = Math.floor(entry[0].contentRect.width);\r\n\r\n\t\t\t\t\tif(this.tableHeight != nodeHeight || this.tableWidth != nodeWidth){\r\n\t\t\t\t\t\tthis.tableHeight = nodeHeight;\r\n\t\t\t\t\t\tthis.tableWidth = nodeWidth;\r\n\r\n\t\t\t\t\t\tif(table.element.parentNode){\r\n\t\t\t\t\t\t\tthis.containerHeight = table.element.parentNode.clientHeight;\r\n\t\t\t\t\t\t\tthis.containerWidth = table.element.parentNode.clientWidth;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif(table.options.virtualDomHoz){\r\n\t\t\t\t\t\t\ttable.vdomHoz.reinitialize(true);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\ttable.redraw();\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tthis.observer.observe(table.element);\r\n\r\n\t\t\ttableStyle = window.getComputedStyle(table.element);\r\n\r\n\t\t\tif(this.table.element.parentNode && !this.table.rowManager.fixedHeight && (tableStyle.getPropertyValue(\"max-height\") || tableStyle.getPropertyValue(\"min-height\"))){\r\n\r\n\t\t\t\tthis.containerObserver = new ResizeObserver((entry) => {\r\n\t\t\t\t\tif(!table.browserMobile || (table.browserMobile &&!table.modules.edit.currentCell)){\r\n\r\n\t\t\t\t\t\tvar nodeHeight = Math.floor(entry[0].contentRect.height);\r\n\t\t\t\t\t\tvar nodeWidth = Math.floor(entry[0].contentRect.width);\r\n\r\n\t\t\t\t\t\tif(this.containerHeight != nodeHeight || this.containerWidth != nodeWidth){\r\n\t\t\t\t\t\t\tthis.containerHeight = nodeHeight;\r\n\t\t\t\t\t\t\tthis.containerWidth = nodeWidth;\r\n\t\t\t\t\t\t\tthis.tableHeight = table.element.clientHeight;\r\n\t\t\t\t\t\t\tthis.tableWidth = table.element.clientWidth;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif(table.options.virtualDomHoz){\r\n\t\t\t\t\t\t\ttable.vdomHoz.reinitialize(true);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\ttable.redraw();\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\tthis.containerObserver.observe(this.table.element.parentNode);\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tthis.binding = function(){\r\n\t\t\t\tif(!table.browserMobile || (table.browserMobile && !table.modules.edit.currentCell)){\r\n\t\t\t\t\tif(table.options.virtualDomHoz){\r\n\t\t\t\t\t\ttable.vdomHoz.reinitialize(true);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\ttable.redraw();\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\twindow.addEventListener(\"resize\", this.binding);\r\n\t\t}\r\n\t}\r\n\r\n\tclearBindings(row){\r\n\t\tif(this.binding){\r\n\t\t\twindow.removeEventListener(\"resize\", this.binding);\r\n\t\t}\r\n\r\n\t\tif(this.observer){\r\n\t\t\tthis.observer.unobserve(this.table.element);\r\n\t\t}\r\n\r\n\t\tif(this.containerObserver){\r\n\t\t\tthis.containerObserver.unobserve(this.table.element.parentNode);\r\n\t\t}\r\n\t}\r\n}\r\n\r\nResizeTable.moduleName = \"resizeTable\";\r\n\r\nexport default ResizeTable;","import Module from '../../core/Module.js';\r\n\r\nclass ResponsiveLayout extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.columns = [];\r\n\t\tthis.hiddenColumns = [];\r\n\t\tthis.mode = \"\";\r\n\t\tthis.index = 0;\r\n\t\tthis.collapseFormatter = [];\r\n\t\tthis.collapseStartOpen = true;\r\n\t\tthis.collapseHandleColumn = false;\r\n\t}\r\n\r\n\t//generate resposive columns list\r\n\tinitialize(){\r\n\t\tvar self = this,\r\n\t\tcolumns = [];\r\n\r\n\t\tthis.mode = this.table.options.responsiveLayout;\r\n\t\tthis.collapseFormatter = this.table.options.responsiveLayoutCollapseFormatter || this.formatCollapsedData;\r\n\t\tthis.collapseStartOpen = this.table.options.responsiveLayoutCollapseStartOpen;\r\n\t\tthis.hiddenColumns = [];\r\n\r\n\t\t//detemine level of responsivity for each column\r\n\t\tthis.table.columnManager.columnsByIndex.forEach(function(column, i){\r\n\t\t\tif(column.modules.responsive){\r\n\t\t\t\tif(column.modules.responsive.order && column.modules.responsive.visible){\r\n\t\t\t\t\tcolumn.modules.responsive.index = i;\r\n\t\t\t\t\tcolumns.push(column);\r\n\r\n\t\t\t\t\tif(!column.visible && self.mode === \"collapse\"){\r\n\t\t\t\t\t\tself.hiddenColumns.push(column);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\t//sort list by responsivity\r\n\t\tcolumns = columns.reverse();\r\n\t\tcolumns = columns.sort(function(a, b){\r\n\t\t\tvar diff = b.modules.responsive.order - a.modules.responsive.order;\r\n\t\t\treturn diff || (b.modules.responsive.index - a.modules.responsive.index);\r\n\t\t});\r\n\r\n\t\tthis.columns = columns;\r\n\r\n\t\tif(this.mode === \"collapse\"){\r\n\t\t\tthis.generateCollapsedContent();\r\n\t\t}\r\n\r\n\t\t//assign collapse column\r\n\t\tfor (let col of this.table.columnManager.columnsByIndex){\r\n\t\t\tif(col.definition.formatter == \"responsiveCollapse\"){\r\n\t\t\t\tthis.collapseHandleColumn = col;\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(this.collapseHandleColumn){\r\n\t\t\tif(this.hiddenColumns.length){\r\n\t\t\t\tthis.collapseHandleColumn.show();\r\n\t\t\t}else{\r\n\t\t\t\tthis.collapseHandleColumn.hide();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//define layout information\r\n\tinitializeColumn(column){\r\n\t\tvar def = column.getDefinition();\r\n\r\n\t\tcolumn.modules.responsive = {order: typeof def.responsive === \"undefined\" ? 1 : def.responsive, visible:def.visible === false ? false : true};\r\n\t}\r\n\r\n\tinitializeRow(row){\r\n\t\tvar el;\r\n\r\n\t\tif(row.type !== \"calc\"){\r\n\t\t\tel = document.createElement(\"div\");\r\n\t\t\tel.classList.add(\"tabulator-responsive-collapse\");\r\n\r\n\t\t\trow.modules.responsiveLayout = {\r\n\t\t\t\telement:el,\r\n\t\t\t\topen:this.collapseStartOpen,\r\n\t\t\t};\r\n\r\n\t\t\tif(!this.collapseStartOpen){\r\n\t\t\t\tel.style.display = 'none';\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tlayoutRow(row){\r\n\t\tvar rowEl = row.getElement();\r\n\r\n\t\tif(row.modules.responsiveLayout){\r\n\t\t\trowEl.appendChild(row.modules.responsiveLayout.element);\r\n\t\t\tthis.generateCollapsedRowContent(row);\r\n\t\t}\r\n\t}\r\n\r\n\t//update column visibility\r\n\tupdateColumnVisibility(column, visible){\r\n\t\tvar index;\r\n\t\tif(column.modules.responsive){\r\n\t\t\tcolumn.modules.responsive.visible = visible;\r\n\t\t\tthis.initialize();\r\n\t\t}\r\n\t}\r\n\r\n\thideColumn(column){\r\n\t\tvar colCount = this.hiddenColumns.length;\r\n\r\n\t\tcolumn.hide(false, true);\r\n\r\n\t\tif(this.mode === \"collapse\"){\r\n\t\t\tthis.hiddenColumns.unshift(column);\r\n\t\t\tthis.generateCollapsedContent();\r\n\r\n\t\t\tif(this.collapseHandleColumn && !colCount){\r\n\t\t\t\tthis.collapseHandleColumn.show();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tshowColumn(column){\r\n\t\tvar index;\r\n\r\n\t\tcolumn.show(false, true);\r\n\t\t//set column width to prevent calculation loops on uninitialized columns\r\n\t\tcolumn.setWidth(column.getWidth());\r\n\r\n\t\tif(this.mode === \"collapse\"){\r\n\t\t\tindex = this.hiddenColumns.indexOf(column);\r\n\r\n\t\t\tif(index > -1){\r\n\t\t\t\tthis.hiddenColumns.splice(index, 1);\r\n\t\t\t}\r\n\r\n\t\t\tthis.generateCollapsedContent();\r\n\r\n\t\t\tif(this.collapseHandleColumn && !this.hiddenColumns.length){\r\n\t\t\t\tthis.collapseHandleColumn.hide();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//redraw columns to fit space\r\n\tupdate(){\r\n\t\tvar self = this,\r\n\t\tworking = true;\r\n\r\n\t\twhile(working){\r\n\r\n\t\t\tlet width = self.table.modules.layout.getMode() == \"fitColumns\" ? self.table.columnManager.getFlexBaseWidth() : self.table.columnManager.getWidth();\r\n\r\n\t\t\tlet diff = (self.table.options.headerVisible ? self.table.columnManager.element.clientWidth : self.table.element.clientWidth) - width;\r\n\r\n\t\t\tif(diff < 0){\r\n\t\t\t\t//table is too wide\r\n\t\t\t\tlet column = self.columns[self.index];\r\n\r\n\t\t\t\tif(column){\r\n\t\t\t\t\tself.hideColumn(column);\r\n\t\t\t\t\tself.index ++;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tworking = false;\r\n\t\t\t\t}\r\n\r\n\t\t\t}else{\r\n\r\n\t\t\t\t//table has spare space\r\n\t\t\t\tlet column = self.columns[self.index -1];\r\n\r\n\t\t\t\tif(column){\r\n\t\t\t\t\tif(diff > 0){\r\n\t\t\t\t\t\tif(diff >= column.getWidth()){\r\n\t\t\t\t\t\t\tself.showColumn(column);\r\n\t\t\t\t\t\t\tself.index --;\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\tworking = false;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tworking = false;\r\n\t\t\t\t\t}\r\n\t\t\t\t}else{\r\n\t\t\t\t\tworking = false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif(!self.table.rowManager.activeRowsCount){\r\n\t\t\t\tself.table.rowManager.renderEmptyScroll();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tgenerateCollapsedContent(){\r\n\t\tvar self = this,\r\n\t\trows = this.table.rowManager.getDisplayRows();\r\n\r\n\t\trows.forEach(function(row){\r\n\t\t\tself.generateCollapsedRowContent(row);\r\n\t\t});\r\n\t}\r\n\r\n\tgenerateCollapsedRowContent(row){\r\n\t\tvar el, contents;\r\n\r\n\t\tif(row.modules.responsiveLayout){\r\n\t\t\tel = row.modules.responsiveLayout.element;\r\n\r\n\t\t\twhile(el.firstChild) el.removeChild(el.firstChild);\r\n\r\n\t\t\tcontents = this.collapseFormatter(this.generateCollapsedRowData(row));\r\n\t\t\tif(contents){\r\n\t\t\t\tel.appendChild(contents);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tgenerateCollapsedRowData(row){\r\n\t\tvar self = this,\r\n\t\tdata = row.getData(),\r\n\t\toutput = [],\r\n\t\tmockCellComponent;\r\n\r\n\t\tthis.hiddenColumns.forEach(function(column){\r\n\t\t\tvar value = column.getFieldValue(data);\r\n\r\n\t\t\tif(column.definition.title && column.field){\r\n\t\t\t\tif(column.modules.format && self.table.options.responsiveLayoutCollapseUseFormatters){\r\n\r\n\t\t\t\t\tmockCellComponent = {\r\n\t\t\t\t\t\tvalue:false,\r\n\t\t\t\t\t\tdata:{},\r\n\t\t\t\t\t\tgetValue:function(){\r\n\t\t\t\t\t\t\treturn value;\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tgetData:function(){\r\n\t\t\t\t\t\t\treturn data;\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tgetElement:function(){\r\n\t\t\t\t\t\t\treturn document.createElement(\"div\");\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tgetRow:function(){\r\n\t\t\t\t\t\t\treturn row.getComponent();\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tgetColumn:function(){\r\n\t\t\t\t\t\t\treturn column.getComponent();\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t};\r\n\r\n\t\t\t\t\toutput.push({\r\n\t\t\t\t\t\tfield: column.field,\r\n\t\t\t\t\t\ttitle: column.definition.title,\r\n\t\t\t\t\t\tvalue: column.modules.format.formatter.call(self.table.modules.format, mockCellComponent, column.modules.format.params)\r\n\t\t\t\t\t});\r\n\t\t\t\t}else{\r\n\t\t\t\t\toutput.push({\r\n\t\t\t\t\t\tfield: column.field,\r\n\t\t\t\t\t\ttitle: column.definition.title,\r\n\t\t\t\t\t\tvalue: value\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tformatCollapsedData(data){\r\n\t\tvar list = document.createElement(\"table\");\r\n\r\n\t\tdata.forEach(function(item){\r\n\t\t\tvar row = document.createElement(\"tr\");\r\n\t\t\tvar titleData = document.createElement(\"td\");\r\n\t\t\tvar valueData = document.createElement(\"td\");\r\n\t\t\tvar node_content;\r\n\r\n\t\t\tvar titleHighlight = document.createElement(\"strong\");\r\n\t\t\ttitleData.appendChild(titleHighlight);\r\n\t\t\tthis.table.modules.localize.bind(\"columns|\" + item.field, function(text){\r\n\t\t\t\ttitleHighlight.innerText = text || item.title;\r\n\t\t\t});\r\n\r\n\t\t\tif(item.value instanceof Node){\r\n\t\t\t\tnode_content = document.createElement(\"div\");\r\n\t\t\t\tnode_content.appendChild(item.value);\r\n\t\t\t\tvalueData.appendChild(node_content);\r\n\t\t\t}else{\r\n\t\t\t\tvalueData.innerHTML = item.value;\r\n\t\t\t}\r\n\r\n\t\t\trow.appendChild(titleData);\r\n\t\t\trow.appendChild(valueData);\r\n\t\t\tlist.appendChild(row);\r\n\t\t}, this);\r\n\r\n\t\treturn Object.keys(data).length ? list : \"\";\r\n\t}\r\n}\r\n\r\nResponsiveLayout.moduleName = \"responsiveLayout\";\r\n\r\nexport default ResponsiveLayout;","import Module from '../../core/Module.js';\r\n\r\nclass SelectRow extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.selecting = false; //flag selecting in progress\r\n\t\tthis.lastClickedRow = false; //last clicked row\r\n\t\tthis.selectPrev = []; //hold previously selected element for drag drop selection\r\n\t\tthis.selectedRows = []; //hold selected rows\r\n\t\tthis.headerCheckboxElement = null; // hold header select element\r\n\t}\r\n\r\n\tclearSelectionData(silent){\r\n\t\tthis.selecting = false;\r\n\t\tthis.lastClickedRow = false;\r\n\t\tthis.selectPrev = [];\r\n\t\tthis.selectedRows = [];\r\n\r\n\t\tif(!silent){\r\n\t\t\tthis._rowSelectionChanged();\r\n\t\t}\r\n\t}\r\n\r\n\tinitializeRow(row){\r\n\t\tvar self = this,\r\n\t\telement = row.getElement();\r\n\r\n\t\t// trigger end of row selection\r\n\t\tvar endSelect = function(){\r\n\r\n\t\t\tsetTimeout(function(){\r\n\t\t\t\tself.selecting = false;\r\n\t\t\t}, 50);\r\n\r\n\t\t\tdocument.body.removeEventListener(\"mouseup\", endSelect);\r\n\t\t};\r\n\r\n\t\trow.modules.select = {selected:false};\r\n\r\n\t\t//set row selection class\r\n\t\tif(self.table.options.selectableCheck.call(this.table, row.getComponent())){\r\n\t\t\telement.classList.add(\"tabulator-selectable\");\r\n\t\t\telement.classList.remove(\"tabulator-unselectable\");\r\n\r\n\t\t\tif(self.table.options.selectable && self.table.options.selectable != \"highlight\"){\r\n\t\t\t\tif(self.table.options.selectableRangeMode === \"click\"){\r\n\t\t\t\t\telement.addEventListener(\"click\", function(e){\r\n\t\t\t\t\t\tif(e.shiftKey){\r\n\t\t\t\t\t\t\tself.table._clearSelection();\r\n\t\t\t\t\t\t\tself.lastClickedRow = self.lastClickedRow || row;\r\n\r\n\t\t\t\t\t\t\tvar lastClickedRowIdx = self.table.rowManager.getDisplayRowIndex(self.lastClickedRow);\r\n\t\t\t\t\t\t\tvar rowIdx = self.table.rowManager.getDisplayRowIndex(row);\r\n\r\n\t\t\t\t\t\t\tvar fromRowIdx = lastClickedRowIdx <= rowIdx ? lastClickedRowIdx : rowIdx;\r\n\t\t\t\t\t\t\tvar toRowIdx = lastClickedRowIdx >= rowIdx ? lastClickedRowIdx : rowIdx;\r\n\r\n\t\t\t\t\t\t\tvar rows = self.table.rowManager.getDisplayRows().slice(0);\r\n\t\t\t\t\t\t\tvar toggledRows = rows.splice(fromRowIdx, toRowIdx - fromRowIdx + 1);\r\n\r\n\t\t\t\t\t\t\tif(e.ctrlKey || e.metaKey){\r\n\t\t\t\t\t\t\t\ttoggledRows.forEach(function(toggledRow){\r\n\t\t\t\t\t\t\t\t\tif(toggledRow !== self.lastClickedRow){\r\n\r\n\t\t\t\t\t\t\t\t\t\tif(self.table.options.selectable !== true && !self.isRowSelected(row)){\r\n\t\t\t\t\t\t\t\t\t\t\tif(self.selectedRows.length < self.table.options.selectable){\r\n\t\t\t\t\t\t\t\t\t\t\t\tself.toggleRow(toggledRow);\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\t\t\t\t\tself.toggleRow(toggledRow);\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\tself.lastClickedRow = row;\r\n\t\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\t\tself.deselectRows(undefined, true);\r\n\r\n\t\t\t\t\t\t\t\tif(self.table.options.selectable !== true){\r\n\t\t\t\t\t\t\t\t\tif(toggledRows.length > self.table.options.selectable){\r\n\t\t\t\t\t\t\t\t\t\ttoggledRows = toggledRows.slice(0, self.table.options.selectable)\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\tself.selectRows(toggledRows);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tself.table._clearSelection();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse if(e.ctrlKey || e.metaKey){\r\n\t\t\t\t\t\t\tself.toggleRow(row);\r\n\t\t\t\t\t\t\tself.lastClickedRow = row;\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\tself.deselectRows(undefined, true);\r\n\t\t\t\t\t\t\tself.selectRows(row);\r\n\t\t\t\t\t\t\tself.lastClickedRow = row;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t}else{\r\n\t\t\t\t\telement.addEventListener(\"click\", function(e){\r\n\t\t\t\t\t\tif(!self.table.modExists(\"edit\") || !self.table.modules.edit.getCurrentCell()){\r\n\t\t\t\t\t\t\tself.table._clearSelection();\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif(!self.selecting){\r\n\t\t\t\t\t\t\tself.toggleRow(row);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\telement.addEventListener(\"mousedown\", function(e){\r\n\t\t\t\t\t\tif(e.shiftKey){\r\n\t\t\t\t\t\t\tself.table._clearSelection();\r\n\r\n\t\t\t\t\t\t\tself.selecting = true;\r\n\r\n\t\t\t\t\t\t\tself.selectPrev = [];\r\n\r\n\t\t\t\t\t\t\tdocument.body.addEventListener(\"mouseup\", endSelect);\r\n\t\t\t\t\t\t\tdocument.body.addEventListener(\"keyup\", endSelect);\r\n\r\n\t\t\t\t\t\t\tself.toggleRow(row);\r\n\r\n\t\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\telement.addEventListener(\"mouseenter\", function(e){\r\n\t\t\t\t\t\tif(self.selecting){\r\n\t\t\t\t\t\t\tself.table._clearSelection();\r\n\t\t\t\t\t\t\tself.toggleRow(row);\r\n\r\n\t\t\t\t\t\t\tif(self.selectPrev[1] == row){\r\n\t\t\t\t\t\t\t\tself.toggleRow(self.selectPrev[0]);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\telement.addEventListener(\"mouseout\", function(e){\r\n\t\t\t\t\t\tif(self.selecting){\r\n\t\t\t\t\t\t\tself.table._clearSelection();\r\n\t\t\t\t\t\t\tself.selectPrev.unshift(row);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t}else{\r\n\t\t\telement.classList.add(\"tabulator-unselectable\");\r\n\t\t\telement.classList.remove(\"tabulator-selectable\");\r\n\t\t}\r\n\t}\r\n\r\n\t//toggle row selection\r\n\ttoggleRow(row){\r\n\t\tif(this.table.options.selectableCheck.call(this.table, row.getComponent())){\r\n\t\t\tif(row.modules.select && row.modules.select.selected){\r\n\t\t\t\tthis._deselectRow(row);\r\n\t\t\t}else{\r\n\t\t\t\tthis._selectRow(row);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//select a number of rows\r\n\tselectRows(rows){\r\n\t\tvar rowMatch;\r\n\r\n\t\tswitch(typeof rows){\r\n\t\t\tcase \"undefined\":\r\n\t\t\tthis.table.rowManager.rows.forEach((row) => {\r\n\t\t\t\tthis._selectRow(row, true, true);\r\n\t\t\t});\r\n\r\n\t\t\tthis._rowSelectionChanged();\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"string\":\r\n\r\n\t\t\trowMatch = this.table.rowManager.findRow(rows);\r\n\r\n\t\t\tif(rowMatch){\r\n\t\t\t\tthis._selectRow(rowMatch, true, true);\r\n\t\t\t}else{\r\n\t\t\t\tthis.table.rowManager.getRows(rows).forEach((row) => {\r\n\t\t\t\t\tthis._selectRow(row, true, true);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\tthis._rowSelectionChanged();\r\n\t\t\tbreak;\r\n\r\n\t\t\tdefault:\r\n\t\t\tif(Array.isArray(rows)){\r\n\t\t\t\trows.forEach((row) => {\r\n\t\t\t\t\tthis._selectRow(row, true, true);\r\n\t\t\t\t});\r\n\r\n\t\t\t\tthis._rowSelectionChanged();\r\n\t\t\t}else{\r\n\t\t\t\tthis._selectRow(rows, false, true);\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\t//select an individual row\r\n\t_selectRow(rowInfo, silent, force){\r\n\t\tvar index;\r\n\r\n\t\t//handle max row count\r\n\t\tif(!isNaN(this.table.options.selectable) && this.table.options.selectable !== true && !force){\r\n\t\t\tif(this.selectedRows.length >= this.table.options.selectable){\r\n\t\t\t\tif(this.table.options.selectableRollingSelection){\r\n\t\t\t\t\tthis._deselectRow(this.selectedRows[0]);\r\n\t\t\t\t}else{\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tvar row = this.table.rowManager.findRow(rowInfo);\r\n\r\n\t\tif(row){\r\n\t\t\tif(this.selectedRows.indexOf(row) == -1){\r\n\t\t\t\trow.getElement().classList.add(\"tabulator-selected\");\r\n\t\t\t\tif(!row.modules.select){\r\n\t\t\t\t\trow.modules.select = {};\r\n\t\t\t\t}\r\n\r\n\t\t\t\trow.modules.select.selected = true;\r\n\t\t\t\tif(row.modules.select.checkboxEl){\r\n\t\t\t\t\trow.modules.select.checkboxEl.checked = true;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.selectedRows.push(row);\r\n\r\n\t\t\t\tif(this.table.options.dataTreeSelectPropagate){\r\n\t\t\t\t\tthis.childRowSelection(row, true);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(!silent){\r\n\t\t\t\t\tthis.table.options.rowSelected.call(this.table, row.getComponent());\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis._rowSelectionChanged(silent);\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tif(!silent){\r\n\t\t\t\tconsole.warn(\"Selection Error - No such row found, ignoring selection:\" + rowInfo);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tisRowSelected(row){\r\n\t\treturn this.selectedRows.indexOf(row) !== -1;\r\n\t}\r\n\r\n\t//deselect a number of rows\r\n\tdeselectRows(rows, silent){\r\n\t\tvar self = this,\r\n\t\trowCount;\r\n\r\n\t\tif(typeof rows == \"undefined\"){\r\n\r\n\t\t\trowCount = self.selectedRows.length;\r\n\r\n\t\t\tfor(let i = 0; i < rowCount; i++){\r\n\t\t\t\tself._deselectRow(self.selectedRows[0], true);\r\n\t\t\t}\r\n\r\n\t\t\tself._rowSelectionChanged(silent);\r\n\r\n\t\t}else{\r\n\t\t\tif(Array.isArray(rows)){\r\n\t\t\t\trows.forEach(function(row){\r\n\t\t\t\t\tself._deselectRow(row, true);\r\n\t\t\t\t});\r\n\r\n\t\t\t\tself._rowSelectionChanged(silent);\r\n\t\t\t}else{\r\n\t\t\t\tself._deselectRow(rows, silent);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//deselect an individual row\r\n\t_deselectRow(rowInfo, silent){\r\n\t\tvar self = this,\r\n\t\trow = self.table.rowManager.findRow(rowInfo),\r\n\t\tindex;\r\n\r\n\t\tif(row){\r\n\t\t\tindex = self.selectedRows.findIndex(function(selectedRow){\r\n\t\t\t\treturn selectedRow == row;\r\n\t\t\t});\r\n\r\n\t\t\tif(index > -1){\r\n\r\n\t\t\t\trow.getElement().classList.remove(\"tabulator-selected\");\r\n\t\t\t\tif(!row.modules.select){\r\n\t\t\t\t\trow.modules.select = {};\r\n\t\t\t\t}\r\n\r\n\t\t\t\trow.modules.select.selected = false;\r\n\t\t\t\tif(row.modules.select.checkboxEl){\r\n\t\t\t\t\trow.modules.select.checkboxEl.checked = false;\r\n\t\t\t\t}\r\n\t\t\t\tself.selectedRows.splice(index, 1);\r\n\r\n\t\t\t\tif(this.table.options.dataTreeSelectPropagate){\r\n\t\t\t\t\tthis.childRowSelection(row, false);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(!silent){\r\n\t\t\t\t\tself.table.options.rowDeselected.call(this.table, row.getComponent());\r\n\t\t\t\t}\r\n\r\n\t\t\t\tself._rowSelectionChanged(silent);\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tif(!silent){\r\n\t\t\t\tconsole.warn(\"Deselection Error - No such row found, ignoring selection:\" + rowInfo);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tgetSelectedData(){\r\n\t\tvar data = [];\r\n\r\n\t\tthis.selectedRows.forEach(function(row){\r\n\t\t\tdata.push(row.getData());\r\n\t\t});\r\n\r\n\t\treturn data;\r\n\t}\r\n\r\n\tgetSelectedRows(){\r\n\r\n\t\tvar rows = [];\r\n\r\n\t\tthis.selectedRows.forEach(function(row){\r\n\t\t\trows.push(row.getComponent());\r\n\t\t});\r\n\r\n\t\treturn rows;\r\n\t}\r\n\r\n\t_rowSelectionChanged(silent){\r\n\t\tif(this.headerCheckboxElement){\r\n\t\t\tif(this.selectedRows.length === 0){\r\n\t\t\t\tthis.headerCheckboxElement.checked = false;\r\n\t\t\t\tthis.headerCheckboxElement.indeterminate = false;\r\n\t\t\t} else if(this.table.rowManager.rows.length === this.selectedRows.length){\r\n\t\t\t\tthis.headerCheckboxElement.checked = true;\r\n\t\t\t\tthis.headerCheckboxElement.indeterminate = false;\r\n\t\t\t} else {\r\n\t\t\t\tthis.headerCheckboxElement.indeterminate = true;\r\n\t\t\t\tthis.headerCheckboxElement.checked = false;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(!silent){\r\n\t\t\tthis.table.options.rowSelectionChanged.call(this.table, this.getSelectedData(), this.getSelectedRows());\r\n\t\t}\r\n\t}\r\n\r\n\tregisterRowSelectCheckbox (row, element) {\r\n\t\tif(!row._row.modules.select){\r\n\t\t\trow._row.modules.select = {};\r\n\t\t}\r\n\r\n\t\trow._row.modules.select.checkboxEl = element;\r\n\t}\r\n\r\n\tregisterHeaderSelectCheckbox (element) {\r\n\t\tthis.headerCheckboxElement = element;\r\n\t}\r\n\r\n\tchildRowSelection(row, select){\r\n\t\tvar children = this.table.modules.dataTree.getChildren(row, true);\r\n\r\n\t\tif(select){\r\n\t\t\tfor(let child of children){\r\n\t\t\t\tthis._selectRow(child, true);\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tfor(let child of children){\r\n\t\t\t\tthis._deselectRow(child, true);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n\r\nSelectRow.moduleName = \"selectRow\";\r\n\r\nexport default SelectRow;","//sort datetime\r\nexport default function(a, b, aRow, bRow, column, dir, params){\r\n\tvar format = params.format || \"DD/MM/YYYY HH:mm:ss\",\r\n\talignEmptyValues = params.alignEmptyValues,\r\n\temptyAlign = 0;\r\n\r\n\tif(typeof moment != \"undefined\"){\r\n\t\ta = moment(a, format);\r\n\t\tb = moment(b, format);\r\n\r\n\t\tif(!a.isValid()){\r\n\t\t\temptyAlign = !b.isValid() ? 0 : -1;\r\n\t\t}else if(!b.isValid()){\r\n\t\t\temptyAlign = 1;\r\n\t\t}else{\r\n\t\t\t//compare valid values\r\n\t\t\treturn a - b;\r\n\t\t}\r\n\r\n\t\t//fix empty values in position\r\n\t\tif((alignEmptyValues === \"top\" && dir === \"desc\") || (alignEmptyValues === \"bottom\" && dir === \"asc\")){\r\n\t\t\temptyAlign *= -1;\r\n\t\t}\r\n\r\n\t\treturn emptyAlign;\r\n\r\n\t}else{\r\n\t\tconsole.error(\"Sort Error - 'datetime' sorter is dependant on moment.js\");\r\n\t}\r\n};","import number from './sorters/number.js';\r\nimport string from './sorters/string.js';\r\nimport date from './sorters/date.js';\r\nimport time from './sorters/time.js';\r\nimport datetime from './sorters/datetime.js';\r\nimport boolean from './sorters/boolean.js';\r\nimport array from './sorters/array.js';\r\nimport exists from './sorters/exists.js';\r\nimport alphanum from './sorters/alphanum.js';\r\n\r\nexport default {\r\n\tnumber:number,\r\n\tstring:string,\r\n\tdate:date,\r\n\ttime:time,\r\n\tdatetime:datetime,\r\n\tboolean:boolean,\r\n\tarray:array,\r\n\texists:exists,\r\n\talphanum:alphanum\r\n};","//sort numbers\r\nexport default function(a, b, aRow, bRow, column, dir, params){\r\n\tvar alignEmptyValues = params.alignEmptyValues;\r\n\tvar decimal = params.decimalSeparator;\r\n\tvar thousand = params.thousandSeparator;\r\n\tvar emptyAlign = 0;\r\n\r\n\ta = String(a);\r\n\tb = String(b);\r\n\r\n\tif(thousand){\r\n\t\ta = a.split(thousand).join(\"\");\r\n\t\tb = b.split(thousand).join(\"\");\r\n\t}\r\n\r\n\tif(decimal){\r\n\t\ta = a.split(decimal).join(\".\");\r\n\t\tb = b.split(decimal).join(\".\");\r\n\t}\r\n\r\n\ta = parseFloat(a);\r\n\tb = parseFloat(b);\r\n\r\n\t//handle non numeric values\r\n\tif(isNaN(a)){\r\n\t\temptyAlign = isNaN(b) ? 0 : -1;\r\n\t}else if(isNaN(b)){\r\n\t\temptyAlign = 1;\r\n\t}else{\r\n\t\t//compare valid values\r\n\t\treturn a - b;\r\n\t}\r\n\r\n\t//fix empty values in position\r\n\tif((alignEmptyValues === \"top\" && dir === \"desc\") || (alignEmptyValues === \"bottom\" && dir === \"asc\")){\r\n\t\temptyAlign *= -1;\r\n\t}\r\n\r\n\treturn emptyAlign;\r\n};","//sort strings\r\nexport default function(a, b, aRow, bRow, column, dir, params){\r\n\tvar alignEmptyValues = params.alignEmptyValues;\r\n\tvar emptyAlign = 0;\r\n\tvar locale;\r\n\r\n\t//handle empty values\r\n\tif(!a){\r\n\t\temptyAlign = !b ? 0 : -1;\r\n\t}else if(!b){\r\n\t\temptyAlign = 1;\r\n\t}else{\r\n\t\t//compare valid values\r\n\t\tswitch(typeof params.locale){\r\n\t\t\tcase \"boolean\":\r\n\t\t\tif(params.locale){\r\n\t\t\t\tlocale = this.table.modules.localize.getLocale();\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\t\t\tcase \"string\":\r\n\t\t\tlocale = params.locale;\r\n\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\treturn String(a).toLowerCase().localeCompare(String(b).toLowerCase(), locale);\r\n\t}\r\n\r\n\t//fix empty values in position\r\n\tif((alignEmptyValues === \"top\" && dir === \"desc\") || (alignEmptyValues === \"bottom\" && dir === \"asc\")){\r\n\t\temptyAlign *= -1;\r\n\t}\r\n\r\n\treturn emptyAlign;\r\n};","import datetime from './datetime.js';\r\n\r\n//sort date\r\nexport default function(a, b, aRow, bRow, column, dir, params){\r\n\tif(!params.format){\r\n\t\tparams.format = \"DD/MM/YYYY\";\r\n\t}\r\n\r\n\treturn datetime.call(this, a, b, aRow, bRow, column, dir, params);\r\n};","import datetime from './datetime.js';\r\n\r\n//sort times\r\nexport default function(a, b, aRow, bRow, column, dir, params){\r\n\tif(!params.format){\r\n\t\tparams.format = \"HH:mm\";\r\n\t}\r\n\r\n\treturn datetime.call(this, a, b, aRow, bRow, column, dir, params);\r\n};","//sort booleans\r\nexport default function(a, b, aRow, bRow, column, dir, params){\r\n\tvar el1 = a === true || a === \"true\" || a === \"True\" || a === 1 ? 1 : 0;\r\n\tvar el2 = b === true || b === \"true\" || b === \"True\" || b === 1 ? 1 : 0;\r\n\r\n\treturn el1 - el2;\r\n};","//sort if element contains any data\r\nexport default function(a, b, aRow, bRow, column, dir, params){\r\n\tvar el1 = 0;\r\n\tvar el2 = 0;\r\n\tvar type = params.type || \"length\";\r\n\tvar alignEmptyValues = params.alignEmptyValues;\r\n\tvar emptyAlign = 0;\r\n\r\n\tfunction calc(value){\r\n\r\n\t\tswitch(type){\r\n\t\t\tcase \"length\":\r\n\t\t\treturn value.length;\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"sum\":\r\n\t\t\treturn value.reduce(function(c, d){\r\n\t\t\t\treturn c + d;\r\n\t\t\t});\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"max\":\r\n\t\t\treturn Math.max.apply(null, value) ;\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"min\":\r\n\t\t\treturn Math.min.apply(null, value) ;\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"avg\":\r\n\t\t\treturn value.reduce(function(c, d){\r\n\t\t\t\treturn c + d;\r\n\t\t\t}) / value.length;\r\n\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\t//handle non array values\r\n\tif(!Array.isArray(a)){\r\n\t\talignEmptyValues = !Array.isArray(b) ? 0 : -1;\r\n\t}else if(!Array.isArray(b)){\r\n\t\talignEmptyValues = 1;\r\n\t}else{\r\n\r\n\t\t//compare valid values\r\n\t\tel1 = a ? calc(a) : 0;\r\n\t\tel2 = b ? calc(b) : 0;\r\n\r\n\t\treturn el1 - el2;\r\n\t}\r\n\r\n\t//fix empty values in position\r\n\tif((alignEmptyValues === \"top\" && dir === \"desc\") || (alignEmptyValues === \"bottom\" && dir === \"asc\")){\r\n\t\temptyAlign *= -1;\r\n\t}\r\n\r\n\treturn emptyAlign;\r\n};","//sort if element contains any data\r\nexport default function(a, b, aRow, bRow, column, dir, params){\r\n\tvar el1 = typeof a == \"undefined\" ? 0 : 1;\r\n\tvar el2 = typeof b == \"undefined\" ? 0 : 1;\r\n\r\n\treturn el1 - el2;\r\n};","//sort alpha numeric strings\r\nexport default function(as, bs, aRow, bRow, column, dir, params){\r\n\tvar a, b, a1, b1, i= 0, L, rx = /(\\d+)|(\\D+)/g, rd = /\\d/;\r\n\tvar alignEmptyValues = params.alignEmptyValues;\r\n\tvar emptyAlign = 0;\r\n\r\n\t//handle empty values\r\n\tif(!as && as!== 0){\r\n\t\temptyAlign = !bs && bs!== 0 ? 0 : -1;\r\n\t}else if(!bs && bs!== 0){\r\n\t\temptyAlign = 1;\r\n\t}else{\r\n\r\n\t\tif(isFinite(as) && isFinite(bs)) return as - bs;\r\n\t\ta = String(as).toLowerCase();\r\n\t\tb = String(bs).toLowerCase();\r\n\t\tif(a === b) return 0;\r\n\t\tif(!(rd.test(a) && rd.test(b))) return a > b ? 1 : -1;\r\n\t\ta = a.match(rx);\r\n\t\tb = b.match(rx);\r\n\t\tL = a.length > b.length ? b.length : a.length;\r\n\t\twhile(i < L){\r\n\t\t\ta1= a[i];\r\n\t\t\tb1= b[i++];\r\n\t\t\tif(a1 !== b1){\r\n\t\t\t\tif(isFinite(a1) && isFinite(b1)){\r\n\t\t\t\t\tif(a1.charAt(0) === \"0\") a1 = \".\" + a1;\r\n\t\t\t\t\tif(b1.charAt(0) === \"0\") b1 = \".\" + b1;\r\n\t\t\t\t\treturn a1 - b1;\r\n\t\t\t\t}\r\n\t\t\t\telse return a1 > b1 ? 1 : -1;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn a.length > b.length;\r\n\t}\r\n\r\n\t//fix empty values in position\r\n\tif((alignEmptyValues === \"top\" && dir === \"desc\") || (alignEmptyValues === \"bottom\" && dir === \"asc\")){\r\n\t\temptyAlign *= -1;\r\n\t}\r\n\r\n\treturn emptyAlign;\r\n};","import Module from '../../core/Module.js';\r\n\r\nimport defaultSorters from './defaults/sorters.js';\r\n\r\nclass Sort extends Module{\r\n\r\n\tconstructor(table){\r\n\t \tsuper(table);\r\n\r\n\t \tthis.sortList = []; //holder current sort\r\n\t \tthis.changed = false; //has the sort changed since last render\r\n\t}\r\n\r\n\t//initialize column header for sorting\r\n\tinitializeColumn(column, content){\r\n\t\tvar self = this,\r\n\t\tsorter = false,\r\n\t\tcolEl,\r\n\t\tarrowEl;\r\n\r\n\t\tswitch(typeof column.definition.sorter){\r\n\t\t\tcase \"string\":\r\n\t\t\tif(Sort.sorters[column.definition.sorter]){\r\n\t\t\t\tsorter = Sort.sorters[column.definition.sorter];\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Sort Error - No such sorter found: \", column.definition.sorter);\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"function\":\r\n\t\t\tsorter = column.definition.sorter;\r\n\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\tcolumn.modules.sort = {\r\n\t\t\tsorter:sorter, dir:\"none\",\r\n\t\t\tparams:column.definition.sorterParams || {},\r\n\t\t\tstartingDir:column.definition.headerSortStartingDir || \"asc\",\r\n\t\t\ttristate: typeof column.definition.headerSortTristate !== \"undefined\" ? column.definition.headerSortTristate : this.table.options.headerSortTristate,\r\n\t\t};\r\n\r\n\t\tif(typeof column.definition.headerSort === \"undefined\" ? (this.table.options.headerSort !== false) : column.definition.headerSort !== false){\r\n\r\n\t\t\tcolEl = column.getElement();\r\n\r\n\t\t\tcolEl.classList.add(\"tabulator-sortable\");\r\n\r\n\r\n\t\t\tarrowEl = document.createElement(\"div\");\r\n\t\t\tarrowEl.classList.add(\"tabulator-col-sorter\");\r\n\r\n\t\t\tif(typeof this.table.options.headerSortElement == \"object\"){\r\n\t\t\t\tarrowEl.appendChild(this.table.options.headerSortElement);\r\n\t\t\t}else{\r\n\t\t\t\tarrowEl.innerHTML = this.table.options.headerSortElement;\r\n\t\t\t}\r\n\r\n\t\t\t//create sorter arrow\r\n\t\t\tcontent.appendChild(arrowEl);\r\n\r\n\t\t\tcolumn.modules.sort.element = arrowEl;\r\n\r\n\t\t\t//sort on click\r\n\t\t\tcolEl.addEventListener(\"click\", function(e){\r\n\t\t\t\tvar dir = \"\",\r\n\t\t\t\tsorters=[],\r\n\t\t\t\tmatch = false;\r\n\r\n\t\t\t\tif(column.modules.sort){\r\n\t\t\t\t\tif(column.modules.sort.tristate){\r\n\t\t\t\t\t\tif(column.modules.sort.dir == \"none\"){\r\n\t\t\t\t\t\t\tdir = column.modules.sort.startingDir;\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\tif(column.modules.sort.dir == column.modules.sort.startingDir){\r\n\t\t\t\t\t\t\t\tdir = column.modules.sort.dir == \"asc\" ? \"desc\" : \"asc\";\r\n\t\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\t\tdir = \"none\";\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tswitch(column.modules.sort.dir){\r\n\t\t\t\t\t\t\tcase \"asc\":\r\n\t\t\t\t\t\t\tdir = \"desc\";\r\n\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\t\tcase \"desc\":\r\n\t\t\t\t\t\t\tdir = \"asc\";\r\n\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\t\tdefault:\r\n\t\t\t\t\t\t\tdir = column.modules.sort.startingDir;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\r\n\t\t\t\t\tif (self.table.options.columnHeaderSortMulti && (e.shiftKey || e.ctrlKey)) {\r\n\t\t\t\t\t\tsorters = self.getSort();\r\n\r\n\t\t\t\t\t\tmatch = sorters.findIndex(function(sorter){\r\n\t\t\t\t\t\t\treturn sorter.field === column.getField();\r\n\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\tif(match > -1){\r\n\t\t\t\t\t\t\tsorters[match].dir = dir;\r\n\r\n\t\t\t\t\t\t\tif(match != sorters.length -1){\r\n\t\t\t\t\t\t\t\tmatch = sorters.splice(match, 1)[0];\r\n\t\t\t\t\t\t\t\tif(dir != \"none\"){\r\n\t\t\t\t\t\t\t\t\tsorters.push(match);\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\tif(dir != \"none\"){\r\n\t\t\t\t\t\t\t\tsorters.push({column:column, dir:dir});\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t//add to existing sort\r\n\t\t\t\t\t\tself.setSort(sorters);\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tif(dir == \"none\"){\r\n\t\t\t\t\t\t\tself.clear();\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\t//sort by column only\r\n\t\t\t\t\t\t\tself.setSort(column, dir);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tself.table.rowManager.sorterRefresh(!self.sortList.length);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\t//check if the sorters have changed since last use\r\n\thasChanged(){\r\n\t\tvar changed = this.changed;\r\n\t\tthis.changed = false;\r\n\t\treturn changed;\r\n\t}\r\n\r\n\t//return current sorters\r\n\tgetSort(){\r\n\t\tvar self = this,\r\n\t\tsorters = [];\r\n\r\n\t\tself.sortList.forEach(function(item){\r\n\t\t\tif(item.column){\r\n\t\t\t\tsorters.push({column:item.column.getComponent(), field:item.column.getField(), dir:item.dir});\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn sorters;\r\n\t}\r\n\r\n\t//change sort list and trigger sort\r\n\tsetSort(sortList, dir){\r\n\t\tvar self = this,\r\n\t\tnewSortList = [];\r\n\r\n\t\tif(!Array.isArray(sortList)){\r\n\t\t\tsortList = [{column: sortList, dir:dir}];\r\n\t\t}\r\n\r\n\t\tsortList.forEach(function(item){\r\n\t\t\tvar column;\r\n\r\n\t\t\tcolumn = self.table.columnManager.findColumn(item.column);\r\n\r\n\t\t\tif(column){\r\n\t\t\t\titem.column = column;\r\n\t\t\t\tnewSortList.push(item);\r\n\t\t\t\tself.changed = true;\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Sort Warning - Sort field does not exist and is being ignored: \", item.column);\r\n\t\t\t}\r\n\r\n\t\t});\r\n\r\n\t\tself.sortList = newSortList;\r\n\r\n\t\tif(this.table.options.persistence && this.table.modExists(\"persistence\", true) && this.table.modules.persistence.config.sort){\r\n\t\t\tthis.table.modules.persistence.save(\"sort\");\r\n\t\t}\r\n\t}\r\n\r\n\t//clear sorters\r\n\tclear(){\r\n\t\tthis.setSort([]);\r\n\t}\r\n\r\n\t//find appropriate sorter for column\r\n\tfindSorter(column){\r\n\t\tvar row = this.table.rowManager.activeRows[0],\r\n\t\tsorter = \"string\",\r\n\t\tfield, value;\r\n\r\n\t\tif(row){\r\n\t\t\trow = row.getData();\r\n\t\t\tfield = column.getField();\r\n\r\n\t\t\tif(field){\r\n\r\n\t\t\t\tvalue = column.getFieldValue(row);\r\n\r\n\t\t\t\tswitch(typeof value){\r\n\t\t\t\t\tcase \"undefined\":\r\n\t\t\t\t\tsorter = \"string\";\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase \"boolean\":\r\n\t\t\t\t\tsorter = \"boolean\";\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tdefault:\r\n\t\t\t\t\tif(!isNaN(value) && value !== \"\"){\r\n\t\t\t\t\t\tsorter = \"number\";\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tif(value.match(/((^[0-9]+[a-z]+)|(^[a-z]+[0-9]+))+$/i)){\r\n\t\t\t\t\t\t\tsorter = \"alphanum\";\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn Sort.sorters[sorter];\r\n\t}\r\n\r\n\t//work through sort list sorting data\r\n\tsort(data){\r\n\t\tvar self = this,\r\n\t\tsortList = this.table.options.sortOrderReverse ? self.sortList.slice().reverse() : self.sortList,\r\n\t\tsortListActual = [],\r\n\t\trowComponents = [],\r\n\t\tlastSort;\r\n\r\n\t\tif(self.table.options.dataSorting){\r\n\t\t\tself.table.options.dataSorting.call(self.table, self.getSort());\r\n\t\t}\r\n\r\n\t\tself.clearColumnHeaders();\r\n\r\n\t\tif(!self.table.options.ajaxSorting){\r\n\r\n\t\t\t//build list of valid sorters and trigger column specific callbacks before sort begins\r\n\t\t\tsortList.forEach(function(item, i){\r\n\t\t\t\tvar sortObj = item.column.modules.sort;\r\n\r\n\t\t\t\tif(item.column && sortObj){\r\n\r\n\t\t\t\t\t//if no sorter has been defined, take a guess\r\n\t\t\t\t\tif(!sortObj.sorter){\r\n\t\t\t\t\t\tsortObj.sorter = self.findSorter(item.column);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\titem.params = typeof sortObj.params === \"function\" ? sortObj.params(item.column.getComponent(), item.dir) : sortObj.params;\r\n\r\n\t\t\t\t\tsortListActual.push(item);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tself.setColumnHeader(item.column, item.dir);\r\n\t\t\t});\r\n\r\n\t\t\t//sort data\r\n\t\t\tif (sortListActual.length) {\r\n\t\t\t\tself._sortItems(data, sortListActual);\r\n\t\t\t}\r\n\r\n\t\t}else{\r\n\t\t\tsortList.forEach(function(item, i){\r\n\t\t\t\tself.setColumnHeader(item.column, item.dir);\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif(self.table.options.dataSorted){\r\n\t\t\tdata.forEach((row) => {\r\n\t\t\t\trowComponents.push(row.getComponent());\r\n\t\t\t});\r\n\r\n\t\t\tself.table.options.dataSorted.call(self.table, self.getSort(), rowComponents);\r\n\t\t}\r\n\t}\r\n\r\n\t//clear sort arrows on columns\r\n\tclearColumnHeaders(){\r\n\t\tthis.table.columnManager.getRealColumns().forEach(function(column){\r\n\t\t\tif(column.modules.sort){\r\n\t\t\t\tcolumn.modules.sort.dir = \"none\";\r\n\t\t\t\tcolumn.getElement().setAttribute(\"aria-sort\", \"none\");\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t//set the column header sort direction\r\n\tsetColumnHeader(column, dir){\r\n\t\tcolumn.modules.sort.dir = dir;\r\n\t\tcolumn.getElement().setAttribute(\"aria-sort\", dir);\r\n\t}\r\n\r\n\t//sort each item in sort list\r\n\t_sortItems(data, sortList){\r\n\t\tvar sorterCount = sortList.length - 1;\r\n\r\n\t\tdata.sort((a, b) => {\r\n\t\t\tvar result;\r\n\r\n\t\t\tfor(var i = sorterCount; i>= 0; i--){\r\n\t\t\t\tlet sortItem = sortList[i];\r\n\r\n\t\t\t\tresult = this._sortRow(a, b, sortItem.column, sortItem.dir, sortItem.params);\r\n\r\n\t\t\t\tif(result !== 0){\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn result;\r\n\t\t});\r\n\t}\r\n\r\n\t//process individual rows for a sort function on active data\r\n\t_sortRow(a, b, column, dir, params){\r\n\t\tvar el1Comp, el2Comp, colComp;\r\n\r\n\t\t//switch elements depending on search direction\r\n\t\tvar el1 = dir == \"asc\" ? a : b;\r\n\t\tvar el2 = dir == \"asc\" ? b : a;\r\n\r\n\t\ta = column.getFieldValue(el1.getData());\r\n\t\tb = column.getFieldValue(el2.getData());\r\n\r\n\t\ta = typeof a !== \"undefined\" ? a : \"\";\r\n\t\tb = typeof b !== \"undefined\" ? b : \"\";\r\n\r\n\t\tel1Comp = el1.getComponent();\r\n\t\tel2Comp = el2.getComponent();\r\n\r\n\t\treturn column.modules.sort.sorter.call(this, a, b, el1Comp, el2Comp, column.getComponent(), dir, params);\r\n\t}\r\n}\r\n\r\nSort.moduleName = \"sort\";\r\n\r\n//load defaults\r\nSort.sorters = defaultSorters;\r\n\r\nexport default Sort;","export default {\r\n\t//is integer\r\n\tinteger: function(cell, value, parameters){\r\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\tvalue = Number(value);\r\n\t\treturn typeof value === 'number' && isFinite(value) && Math.floor(value) === value;\r\n\t},\r\n\r\n\t//is float\r\n\tfloat: function(cell, value, parameters){\r\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\tvalue = Number(value);\r\n\t\treturn typeof value === 'number' && isFinite(value) && value % 1 !== 0;\r\n\t},\r\n\r\n\t//must be a number\r\n\tnumeric: function(cell, value, parameters){\r\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn !isNaN(value);\r\n\t},\r\n\r\n\t//must be a string\r\n\tstring: function(cell, value, parameters){\r\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn isNaN(value);\r\n\t},\r\n\r\n\t//maximum value\r\n\tmax: function(cell, value, parameters){\r\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn parseFloat(value) <= parameters;\r\n\t},\r\n\r\n\t//minimum value\r\n\tmin: function(cell, value, parameters){\r\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn parseFloat(value) >= parameters;\r\n\t},\r\n\r\n\t//starts with value\r\n\tstarts: function(cell, value, parameters){\r\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn String(value).toLowerCase().startsWith(String(parameters).toLowerCase());\r\n\t},\r\n\r\n\t//ends with value\r\n\tends: function(cell, value, parameters){\r\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn String(value).toLowerCase().endsWith(String(parameters).toLowerCase());\r\n\t},\r\n\r\n\r\n\t//minimum string length\r\n\tminLength: function(cell, value, parameters){\r\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn String(value).length >= parameters;\r\n\t},\r\n\r\n\t//maximum string length\r\n\tmaxLength: function(cell, value, parameters){\r\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn String(value).length <= parameters;\r\n\t},\r\n\r\n\t//in provided value list\r\n\tin: function(cell, value, parameters){\r\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\tif(typeof parameters == \"string\"){\r\n\t\t\tparameters = parameters.split(\"|\");\r\n\t\t}\r\n\r\n\t\treturn value === \"\" || parameters.indexOf(value) > -1;\r\n\t},\r\n\r\n\t//must match provided regex\r\n\tregex: function(cell, value, parameters){\r\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\tvar reg = new RegExp(parameters);\r\n\r\n\t\treturn reg.test(value);\r\n\t},\r\n\r\n\t//value must be unique in this column\r\n\tunique: function(cell, value, parameters){\r\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\tvar unique = true;\r\n\r\n\t\tvar cellData = cell.getData();\r\n\t\tvar column = cell.getColumn()._getSelf();\r\n\r\n\t\tthis.table.rowManager.rows.forEach(function(row){\r\n\t\t\tvar data = row.getData();\r\n\r\n\t\t\tif(data !== cellData){\r\n\t\t\t\tif(value == column.getFieldValue(data)){\r\n\t\t\t\t\tunique = false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn unique;\r\n\t},\r\n\r\n\t//must have a value\r\n\trequired:function(cell, value, parameters){\r\n\t\treturn value !== \"\" && value !== null && typeof value !== \"undefined\";\r\n\t},\r\n};","import Module from '../../core/Module.js';\r\n\r\nimport defaultValidators from './defaults/validators.js';\r\n\r\nclass Validate extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.invalidCells = [];\r\n\t}\r\n\r\n\t//validate\r\n\tinitializeColumn(column){\r\n\t\tvar self = this,\r\n\t\tconfig = [],\r\n\t\tvalidator;\r\n\r\n\t\tif(column.definition.validator){\r\n\r\n\t\t\tif(Array.isArray(column.definition.validator)){\r\n\t\t\t\tcolumn.definition.validator.forEach(function(item){\r\n\t\t\t\t\tvalidator = self._extractValidator(item);\r\n\r\n\t\t\t\t\tif(validator){\r\n\t\t\t\t\t\tconfig.push(validator);\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t}else{\r\n\t\t\t\tvalidator = this._extractValidator(column.definition.validator);\r\n\r\n\t\t\t\tif(validator){\r\n\t\t\t\t\tconfig.push(validator);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tcolumn.modules.validate = config.length ? config : false;\r\n\t\t}\r\n\t}\r\n\r\n\t_extractValidator(value){\r\n\t\tvar type, params, pos;\r\n\r\n\t\tswitch(typeof value){\r\n\t\t\tcase \"string\":\r\n\t\t\tpos = value.indexOf(':');\r\n\r\n\t\t\tif(pos > -1){\r\n\t\t\t\ttype = value.substring(0,pos);\r\n\t\t\t\tparams = value.substring(pos+1);\r\n\t\t\t}else{\r\n\t\t\t\ttype = value;\r\n\t\t\t}\r\n\r\n\t\t\treturn this._buildValidator(type, params);\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"function\":\r\n\t\t\treturn this._buildValidator(value);\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"object\":\r\n\t\t\treturn this._buildValidator(value.type, value.parameters);\r\n\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\t_buildValidator(type, params){\r\n\r\n\t\tvar func = typeof type == \"function\" ? type : Validate.validators[type];\r\n\r\n\t\tif(!func){\r\n\t\t\tconsole.warn(\"Validator Setup Error - No matching validator found:\", type);\r\n\t\t\treturn false;\r\n\t\t}else{\r\n\t\t\treturn {\r\n\t\t\t\ttype:typeof type == \"function\" ? \"function\" : type,\r\n\t\t\t\tfunc:func,\r\n\t\t\t\tparams:params,\r\n\t\t\t};\r\n\t\t}\r\n\t}\r\n\r\n\tvalidate(validators, cell, value){\r\n\t\tvar self = this,\r\n\t\tvalid = [],\r\n\t\tinvalidIndex = this.invalidCells.indexOf(cell);\r\n\r\n\t\tif(validators){\r\n\t\t\tvalidators.forEach(function(item){\r\n\t\t\t\tif(!item.func.call(self, cell.getComponent(), value, item.params)){\r\n\t\t\t\t\tvalid.push({\r\n\t\t\t\t\t\ttype:item.type,\r\n\t\t\t\t\t\tparameters:item.params\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tvalid = valid.length ? valid : true;\r\n\r\n\t\tif(!cell.modules.validate){\r\n\t\t\tcell.modules.validate = {};\r\n\t\t}\r\n\r\n\t\tif(valid === true){\r\n\t\t\tcell.modules.validate.invalid = false;\r\n\t\t\tcell.getElement().classList.remove(\"tabulator-validation-fail\");\r\n\r\n\t\t\tif(invalidIndex > -1){\r\n\t\t\t\tthis.invalidCells.splice(invalidIndex, 1);\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tcell.modules.validate.invalid = true;\r\n\r\n\t\t\tif(this.table.options.validationMode !== \"manual\"){\r\n\t\t\t\tcell.getElement().classList.add(\"tabulator-validation-fail\");\r\n\t\t\t}\r\n\r\n\t\t\tif(invalidIndex == -1){\r\n\t\t\t\tthis.invalidCells.push(cell);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn valid;\r\n\t}\r\n\r\n\tgetInvalidCells(){\r\n\t\tvar output = [];\r\n\r\n\t\tthis.invalidCells.forEach((cell) => {\r\n\t\t\toutput.push(cell.getComponent());\r\n\t\t});\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tclearValidation(cell){\r\n\t\tvar invalidIndex;\r\n\r\n\t\tif(cell.modules.validate && cell.modules.validate.invalid){\r\n\r\n\t\t\tcell.getElement().classList.remove(\"tabulator-validation-fail\");\r\n\t\t\tcell.modules.validate.invalid = false;\r\n\r\n\t\t\tinvalidIndex = this.invalidCells.indexOf(cell);\r\n\r\n\t\t\tif(invalidIndex > -1){\r\n\t\t\t\tthis.invalidCells.splice(invalidIndex, 1);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n\r\nValidate.moduleName = \"validate\";\r\n\r\n//load defaults\r\nValidate.validators = defaultValidators;\r\n\r\nexport default Validate;","//tabulator with all modules installed\r\nimport {default as Tabulator} from './Tabulator.js';\r\nimport * as modules from '../core/modules/optional.js';\r\nimport ModuleBinder from './ModuleBinder.js';\r\n\r\nclass TabulatorFull extends Tabulator {};\r\n\r\n//bind modules and static functionality\r\nnew ModuleBinder(TabulatorFull, modules);\r\n\r\nexport default TabulatorFull;"],"names":["ColumnComponent","column","_column","type","this","getElement","getDefinition","getField","cells","forEach","cell","push","getComponent","visible","isGroup","columns","show","hide","output","length","parent","Column","table","columnManager","scrollToColumn","modExists","modules","filter","setHeaderFilterFocus","reloadHeaderFilter","getHeaderFilterValue","value","setHeaderFilterValue","to","after","toColumn","findColumn","moveColumn","console","warn","nextCol","nextColumn","prevCol","prevColumn","updates","updateDefinition","getWidth","width","result","reinitializeWidth","setWidth","options","virtualDomHoz","vdomHoz","reinitialize","validate","CellComponent","_cell","getValue","getOldValue","initialValue","row","getData","mutate","setValue","setValueActual","force","edit","cancelEdit","edited","clearEdited","invalid","clearValidation","nav","checkHeight","Cell","element","oldValue","height","minWidth","component","loaded","build","generateElement","_configureCell","getFieldValue","data","document","createElement","className","setAttribute","cellEvents","field","style","textAlign","hozAlign","vertAlign","display","alignItems","top","bottom","middle","justifyContent","left","right","center","definition","cssClass","split","classList","add","tooltipGenerationMode","addEventListener","e","_this","_generateTooltip","_bindClickEvents","_bindTouchEvents","_bindMouseEvents","bindEditor","rowHandle","movableRows","moveRow","initializeCell","cellClick","_this2","call","cellDblClick","currentCell","preventDefault","selection","range","body","createTextRange","moveToElementText","select","window","getSelection","createRange","selectNode","removeAllRanges","addRange","cellContext","cellMouseEnter","_this3","cellMouseLeave","cellMouseOver","cellMouseOut","cellMouseMove","dblTap","tapHold","tap","cellTap","passive","_this4","cellDblTap","clearTimeout","setTimeout","cellTapHold","val","format","formatValue","innerHTML","Node","firstChild","removeChild","appendChild","cellRendered","tooltip","containerOnly","layoutElement","setValueProcessData","history","action","newValue","cellEdited","groupUpdateOnCellEdit","groupBy","groupRows","reassignRowToGroup","dataChanged","rowManager","changed","mutator","transformCell","topCalc","bottomCalc","columnCalcs","recalc","activeRows","recalcRowGroup","reactiveData","block","setFieldValue","unblock","_generateContents","resizableColumns","resizeColumns","initializeColumn","contextMenu","clickMenu","menu","frozenColumns","widthStyled","offsetWidth","minWidthStyled","maxWidth","maxWidthStyled","reinitializeHeight","heightStyled","offsetHeight","editCell","editing","getCurrentCell","_getSelf","redrawBlock","parentNode","clearComponentHistory","deleteCell","calcs","self","nextCell","index","getCellIndex","next","nextRow","nextDisplayRow","findNextEditableCell","prev","prevRow","prevDisplayRow","findPrevEditableCell","up","down","def","contentElement","titleHolderElement","titleElement","groupElement","createGroupElement","fieldStructure","titleFormatterRendered","mapDefinitionDefaults","setField","invalidOptionWarnings","checkDefinition","widthFixed","_mapDepricatedFunctionality","i","newCol","attachColumn","checkColumnVisibility","registerColumnField","setHandle","_buildHeader","bindModuleColumns","el","defaults","columnDefaults","key","Object","keys","defaultOptionList","indexOf","title","nestedFieldSeparator","_getNestedData","_getFlatData","_setNestedData","_setFlatData","registerColumnPosition","reRegisterPosition","headerTooltip","tooltipsHeader","localize","bind","headerVertical","_bindEvents","_buildColumnHeaderContent","_buildGroupHeader","_buildColumnHeader","setTooltip","headerFilter","headerFilterPlaceholder","setHeaderFilterColumnPlaceholder","movableColumns","persistence","config","headerClick","_this5","headerDblClick","headerContext","headerTap","headerDblTap","headerTapHold","cellEditing","cellEditCancelled","sort","headerContextMenu","headerClickMenu","headerMenu","initializeColumnHeader","editor","validator","accessor","_typeof","responsiveLayout","_this6","setMinWidth","columnMinWidth","parseInt","columnMaxWidth","setMaxWidth","tooltips","cellHozAlign","cellVertAlign","headerHozAlign","_buildColumnHeaderTitle","editableTitle","stopPropagation","focus","columnTitleChanged","_this7","text","_formatColumnHeaderTitle","formatter","contents","params","mockCell","onRendered","titleFormatter","getFormatter","callback","_this8","titleFormatterParams","_this9","dataObj","structure","alignment","parentHeight","getGroupElement","clientHeight","getHeadersElement","minHeight","paddingTop","verticalAlign","clearVerticalAlign","rowNumColumn","getFirstColumn","getLastColumn","getTopColumn","updateBranches","colDefs","columnVisibilityChanged","silent","responsiveToggle","_verticalAlignHeaders","save","updateColumnVisibility","matchChildWidths","childWidth","child","splice","setWidthActual","isNaN","Math","floor","clientWidth","max","min","layout","rows","heightInitialized","offsetParent","clearCellHeight","calcHeight","setCellHeight","Promise","resolve","reject","_this10","cellCount","deregisterColumn","findColumnIndex","_nextVisibleColumn","getColumnByIndex","_prevVisibleColumn","hideHeaderFilterElements","fitToData","showHeaderFilterElements","clearWidth","_this11","assign","addColumn","then","err","Helpers","box","getBoundingClientRect","pageYOffset","documentElement","clientTop","pageXOffset","clientLeft","obj","clone","Array","isArray","Date","deepClone","ColumnManager","blockHozScrollEvent","headersElement","createHeadersElement","createHeaderElement","columnsByIndex","columnsByField","scrollLeft","insertBefore","headerVisible","manager","hozAdjust","scrollWidth","marginLeft","scrollHorizontal","sorter","cols","definitions","autoColumnsDefinitions","col","match","find","setColumns","reset","_addColumn","_reIndexColumns","initialize","redraw","before","nextToColumn","colEl","parentIndex","nextEl","nextSibling","unshift","columnRendered","getHeight","columnHeaderVertAlign","adjustTableSize","subject","HTMLElement","root","matches","findIndex","active","structured","from","moveColumnActual","_moveColumnInArray","columnMoved","getComponents","updateRows","toIndex","fromIndex","dataTree","concat","getTreeChildren","position","ifVisible","offset","adjust","scrollToColumnPosition","scrollToColumnIfVisible","offsetLeft","generateCell","totalWidth","fixedWidth","scrollHeight","colWidth","getMode","elVisible","resetScroll","update","footerManager","RowComponent","_row","transform","getCells","getCell","getRowPosition","scrollToRow","page","setPageToRow","moveToRow","updateData","normalizeHeight","selectRow","selectRows","deselectRows","toggleRow","isRowSelected","frozenRows","freezeRow","unfreezeRow","collapseRow","expandRow","getTreeParent","pos","addTreeChildRow","getGroup","Row","manualHeight","outerHeight","initialized","created","setData","create","selectable","initializeRow","rowContextMenu","rowClickMenu","rowClick","rowDblClick","rowContext","rowMouseEnter","rowMouseLeave","rowMouseOver","rowMouseOut","rowMouseMove","rowTap","rowDblTap","rowTapHold","generateCells","deleteCells","layoutRow","rowFormatter","resizableRows","resizeRows","reinitializeRow","children","maxHeight","setHeight","clearHeight","transformRow","watchRow","updatedData","newRowData","tempData","attrname","JSON","parse","getColumnsByFieldRoot","redrawNeeded","refreshActiveData","rowUpdated","findCell","allowEdit","check","prevCell","toRow","findRow","moveRowActual","getRowIndex","deleteActual","blockRedraw","detatchModules","group","removeRow","deleteRow","rowDelete","_deselectRow","detachRow","RowManager","createHolderElement","tableElement","createTableElement","heightFixer","firstRender","renderMode","fixedHeight","activeRowsCount","displayRows","displayRowsCount","scrollTop","vDomRowHeight","vDomTop","vDomBottom","vDomScrollPosTop","vDomScrollPosBottom","vDomTopPad","vDomBottomPad","vDomMaxRenderChain","vDomWindowBuffer","vDomWindowMinTotalRows","vDomWindowMinMarginRows","vDomTopNewRows","vDomBottomNewRows","redrawBlockRestoreConfig","redrawBlockRederInPosition","setRenderMode","scrollHeaders","dir","scrollVertical","ajaxProgressiveLoad","ajax","nextPage","rowTop","rowIndex","getDisplayRows","rowEl","scrollToRowPosition","scrollToRowIfVisible","elOffset","abs","_virtualRenderFill","offsetTop","renderInPosition","columnsChanged","pagination","_setDataActual","reRenderInPosition","autoColumns","generateColumnsFromRowData","dataLoading","_wipeElements","clear","clearSelectionData","watchData","dataLoaded","error","wipe","allIndex","activeIndex","setActiveRows","displayRowIterator","displayIndex","regenerateRowNumbers","rowDeleted","updateGroupRows","addRowActual","findAddRowPos","reverse","item","addRow","addRowPos","dispRows","paginationAddRow","getPageSize","assignRowToGroup","_moveRowInArray","rowAdded","posFrom","posTo","rowMoved","Group","toGroup","fromGroup","insertRow","end","styleRow","findRowIndex","rowOnly","getDisplayRowIndex","list","getRows","ajaxSorting","sorters","getSort","paginationDataSentNames","ajaxFiltering","filters","getFilters","setParams","sendRequest","setPage","loadData","_genRemoteRequest","loadOrignalData","progressiveLoad","stage","skipStage","cascadeOrder","selectablePersistence","slice","resetDisplayRows","isFrozen","getDisplayIndex","setDisplayIndex","getNextDisplayIndex","setDisplayRows","setMaxRows","dataChange","renderTable","layoutColumnsOnNewData","viewable","topEdge","bottomEdge","topFound","topRow","bottomRow","getVisibleRows","selectedRows","getRenderMode","topOffset","diff","virtualDom","renderStarted","_simpleRender","renderEmptyScroll","placeholder","renderComplete","_clearVirtualDom","checkClassicModeGroupHeaderWidth","onlyGroupHeaders","paddingBottom","visibility","remove","forceMove","holder","topPad","rowsHeight","topPadHeight","heightOccupied","ceil","rowHeight","vDomScrollHeight","countGroups","topDiff","bottomDiff","margin","_addTopRow","_removeBottomRow","_removeTopRow","_addBottomRow","topRowHeight","_quickNormalizeRowHeight","bottomRowHeight","initialHeight","otherHeight","external","virtualDomBuffer","resizeTable","autoResize","tableWidth","browser","event","createEvent","initEvent","dispatchEvent","Event","FooterManager","links","_initialize","footerElement","querySelector","activate","deactivate","link","footerRedraw","TableRegistry","tables","query","results","querySelectorAll","matchElement","Tabulator","lookupTable","Module","name","fitData","fitDataLayoutOverride","fitDataFill","fitDataGeneral","fitDataTable","fitDataStretch","colsWidth","gap","lastCol","responsive","fitColumns","flexColWidth","overflowWidth","flexWidth","flexGrowUnits","flexColumns","fixedShrinkColumns","flexShrinkUnits","gapFill","calcWidth","scaleColumns","freeSpace","shrinkCols","oversizeCols","oversizeSpace","remainingSpace","nextColWidth","remainingFlexGrowUnits","changeUnits","undersizeCols","calcGrow","widthGrow","calcShrink","widthShrink","Layout","mode","modes","moduleName","defaultModes","Localize","locale","lang","bindings","langList","langs","headerFilters","_setLangProp","values","desiredLocale","navigator","language","toLowerCase","prefix","traverseLang","trans","path","prop","localized","_executeBindings","pathArray","_getLangElement","level","rootPath","getText","binding","Comms","selectors","connections","comms","con","module","getConnections","connection","tableComms","commsReceived","ModuleBinder","tabulator","bindStaticFuctionality","bindModules","coreModules","moduleBindings","extendModule","property","source","prototype","registerModule","mod","registerModuleBinding","findTable","mods","VirtualDomHorizontal","holderEl","leftCol","rightCol","vDomScrollPosLeft","vDomScrollPosRight","vDomPadLeft","vDomPadRight","fitDataColAvg","compatabilityCheck","ok","rtl","frozen","scroll","change","collsWidth","colEnd","getGroups","old","colPos","leftPos","rightPos","_this18","fitDataCheck","paddingLeft","paddingRight","reinitChanged","renitializeRows","addColRight","removeColLeft","addColLeft","removeColRight","start","fitDataColActualWidthCheck","prepend","newWidth","widthDiff","colPositionAdjust","browserSlow","browserMobile","initializeElement","initializeOptions","_create","register","defaultOptions","getComputedStyle","textDirection","direction","empty","_clearObjectPointers","rtlCheck","tagName","htmlTableImport","parseTable","setRowManager","setColumnManager","_buildElement","_loadInitialData","tableBuilding","_detectBrowser","setHeaderFilterPlaceholder","installLang","setLocale","span","initialSort","load","setSort","initialFilter","setFilter","initialHeaderFilter","keybindings","clipboard","printAsHtml","print","tableBuilt","ajaxURL","ajaxURLGenerator","paginationInitialPage","unwatchData","clearBindings","ua","userAgent","vendor","opera","test","substr","restoreRedraw","extensions","input","accept","file","files","reader","FileReader","readAsText","onload","onerror","click","blockActiveRequest","_setData","inPosition","getUrl","setConfig","setUrl","clearData","getDataCount","search","getHtml","printFullscreen","responses","addRows","newRows","getRowFromPosition","count","successCount","foundRows","doneCheck","a","b","fromRow","selector","copy","getDefinitionTree","parseColumns","getColumns","mergeDefinition","_this12","_this13","_this14","fromColumn","_this15","getLocale","getLang","sortList","sorterRefresh","filterRefresh","addFilter","all","getHeaderFilters","removeFilter","clearFilter","clearHeaderFilter","getSelectedRows","getSelectedData","getInvalidCells","_this16","valid","setMaxPage","_this17","size","setPageSize","previousPage","getPage","getPageMax","groups","groupValues","groupStartOpen","groupHeader","getGroupedData","getEditedCells","getResults","recalcAll","undo","redo","getHistoryUndoSize","getHistoryRedoSize","filename","download","receive","plugin","required","columnHeaderSortMulti","sortOrderReverse","headerSort","headerSortTristate","headerSortElement","tabEndNewRow","clipboardCopyStyled","clipboardCopyConfig","clipboardCopyFormatter","clipboardCopyRowRange","clipboardPasteParser","clipboardPasteAction","clipboardCopied","clipboardPasted","clipboardPasteError","downloadReady","blob","downloadComplete","downloadConfig","downloadRowRange","dataTreeFilter","dataTreeSort","dataTreeElementColumn","dataTreeBranchElement","dataTreeChildIndent","dataTreeChildField","dataTreeCollapseElement","dataTreeExpandElement","dataTreeStartExpanded","dataTreeRowExpanded","dataTreeRowCollapsed","dataTreeChildColumnCalcs","dataTreeSelectPropagate","printFormatter","printHeader","printFooter","printStyled","printRowRange","printConfig","selectableRangeMode","selectableRollingSelection","selectableCheck","headerFilterLiveFilterDelay","persistenceID","persistenceMode","persistenceReaderFunc","persistenceWriterFunc","responsiveLayoutCollapseStartOpen","responsiveLayoutCollapseUseFormatters","responsiveLayoutCollapseFormatter","paginationSize","paginationButtonCount","paginationSizeSelector","paginationElement","paginationDataSent","paginationDataReceived","ajaxParams","ajaxConfig","ajaxContentType","ajaxRequestFunc","ajaxLoader","ajaxLoaderLoading","ajaxLoaderError","ajaxProgressiveLoadDelay","ajaxProgressiveLoadScrollMargin","groupHeaderPrint","groupHeaderClipboard","groupHeaderHtmlOutput","groupHeaderDownload","htmlOutputConfig","movableRowsConnectedTables","movableRowsConnectedElements","movableRowsSender","movableRowsReceiver","movableRowsSendingStart","movableRowsSent","movableRowsSentFailed","movableRowsSendingStop","movableRowsReceivingStart","movableRowsReceived","movableRowsReceivedFailed","movableRowsReceivingStop","movableRowsElementDrop","rowFormatterPrint","rowFormatterClipboard","rowFormatterHtmlOutput","rowSelectionChanged","rowSelected","rowDeselected","rowResized","columnResized","htmlImporting","htmlImported","ajaxRequesting","ajaxResponse","ajaxError","dataFiltering","dataFiltered","dataSorting","dataSorted","groupToggleElement","groupClosedShowCalcs","dataGrouping","dataGrouped","groupVisibilityChanged","groupClick","groupDblClick","groupContext","groupContextMenu","groupClickMenu","groupTap","groupDblTap","groupTapHold","pageLoaded","validationMode","validationFailed","historyUndo","historyRedo","Accessor","allowedTypes","charAt","toUpperCase","lookupAccessor","accessors","rowComponent","traverse","colCompnent","headers","url","stringify","generateParamsList","form","FormData","append","Ajax","urlGenerator","loaderElement","createLoaderElement","msgElement","createMsgElement","loadingElement","errorElement","loaderPromise","loading","requestOrder","template","trim","content","defaultLoaderPromise","defaultURLGenerator","initializeProgressive","_loadDefaultConfig","method","defaultConfig","_loadDataProgressive","_loadDataStandard","encoded","encodeURIComponent","join","requestNo","showLoader","hideLoader","showError","includes","serializeParams","contentType","contentTypeFormatters","Accept","location","origin","credentials","fetch","response","json","status","statusText","defaultContentTypeFormatters","Clipboard","pasteParser","pasteAction","customSelection","rowRange","blocked","plain","html","generateExportList","genereateHTMLTable","generatePlainContent","clipboardData","originalEvent","paste","setPasteParser","setPasteAction","rowData","getKey","internal","sel","textRange","selectNodeContents","toString","execCommand","pasteActions","parser","pasteParsers","checkPaseOrigin","getPasteData","mutateData","target","replace","updateOrAddData","insert","addData","headerFindSuccess","columnMap","shift","CalcComponent","calcParams","precision","reduce","sum","Number","toFixed","parseFloat","String","ColumnCalcs","topCalcs","botCalcs","genColumn","topElement","botElement","botRow","topInitialized","botInitialized","topCalcParams","botCalcParams","bottomCalcParams","calculations","initializeTopRow","botCalc","initializeBottomRow","rowsToData","generateRow","recalcGroup","getRowGroup","getChildGroups","generateRowData","open","getFilteredTreeChildren","disable","enable","paramKey","getGroupResults","groupObj","subGroups","getSubGroups","subGroupResults","subgroup","defaultCalculations","DataTree","indent","collapseEl","expandEl","branchEl","elementField","startOpen","dummyEl","firstCol","getFirstVisibileColumn","tabIndex","childArray","controlEl","generateControlElement","cloneNode","marginRight","getPropertyValue","oldControl","replaceChild","getChildren","allChildren","generateChildren","sub","childData","childRow","childIndex","findChildIndex","recurse","csv","setFileContents","delimiter","fileContents","depth","bom","pdf","header","autoTableParams","rowGroupStyles","fontStyle","fontSize","cellPadding","fillColor","rowCalcStyles","jsPDFParams","jsPDF","parseRow","styles","colSpan","rowSpan","orientation","unit","doc","autoTable","addPageContent","head","documentProcessing","xlsx","sheetName","workbook","XLSX","utils","book_new","generateSheet","merges","worksheet","s","c","r","j","sheet_add_aoa","encode_range","SheetNames","Sheets","sheetOnly","sheets","sheet","send","intercept","buf","ArrayBuffer","view","Uint8Array","charCodeAt","s2ab","write","bookType","bookSST","Download","interceptCallback","downloadFunc","downloaders","mime","triggerDownload","_group","getRowCount","newTab","Blob","URL","createObjectURL","msSaveOrOpenBlob","defaultDownloaders","success","cancel","editorParams","cellValue","padding","boxSizing","elementAttributes","getAttribute","onChange","preventScroll","keyCode","mask","maskInput","textarea","vertNav","verticalNavigation","whiteSpace","resize","getRow","heightNow","selectionStart","stopImmediatePropagation","number","step","blurFunc","removeEventListener","cellEl","initialDisplayValue","defaultValue","listEl","multiselect","dataItems","currentItem","displayItems","currentItems","blurable","blockListShow","searchWord","searchWordTimeout","getUniqueColumnValues","getColumnByField","getColumn","parseItems","inputValues","curentValues","dataList","displayList","processComplexListItem","label","itemParams","setItem","sortValuesList","listItemFormatter","toggleItem","chooseItem","fillList","setCurrentItem","scrollIntoView","behavior","inline","fillInput","unsetItem","hideList","chooseItems","cancelItem","cursor","readOnly","len","unsetItems","char","character","fromCharCode","startsWith","scrollTovalue","showList","autocomplete","uniqueColumnValues","genUniqueColumnValues","filterList","term","intialLoad","items","searchFunc","addNotice","searchingPlaceholder","fillListIfNotEmpty","showListOnEmpty","notice","searchEl","clearList","itemList","current","emptyPlaceholder","freetext","allowEmpty","showInputValue","log","star","maxStars","getElementsByTagName","stars","starsHolder","createElementNS","starChange","buildStar","starHolder","nextStar","blur","changeValue","overflow","textOverflow","progress","mouseDrag","mouseDragWidth","percent","handle","bar","updateValue","calcVal","round","backgroundColor","screenX","tickCross","tristate","indetermValue","indeterminateValue","indetermState","marginTop","checked","indeterminate","Edit","mouseClick","recursionBlock","invalidEdit","editedCells","editable","editors","clearEditor","variableHeight","contains","button","forceEdit","focusCellNoEvent","leftEdge","rightEdge","leftMargin","rightMargin","cellEditor","rendered","focusScrollAdjust","checkForRestyle","maskLetter","maskLetterChar","maskNumber","maskNumberChar","maskWildcard","maskWildcardChar","fillSymbols","symbol","maskAutoFill","editIndex","defaultEditors","ExportRow","ExportColumn","Export","cloneTableStyle","colVisProp","columnHeaders","headersToExportRows","generateColumnGroupHeaders","bodyToExportRows","rowLookup","genereateTableElement","columnGroups","colData","processColumnGroup","maxDepth","groupData","subGroup","subGroupData","columnVisCheck","headerDepth","exportRows","parseColumnGroup","rowGroups","exportCols","headerEl","bodyEl","lookupTableStyles","setup","treeElementField","mapElementStyles","genereateHeaderElement","genereateGroupElement","genereateCalcElement","genereateRowElement","evenRow","oddRow","calcRow","firstRow","firstGroup","getElementsByClassName","styleCells","firstCell","lastCell","classNames","generator","isVisible","cellWrapper","formatCells","formatExportValue","align","renderedCallback","props","lookup","fromStyle","filterVal","rowVal","filterParams","RegExp","keywords","separator","keyword","matchAll","endsWith","Filter","headerFilterColumns","prevHeaderFilterChangeCheck","filterFunc","filterType","tagType","attrType","filterChangeCheck","prevSuccess","emptyFunc","headerFilterFunc","headerFilterFuncParams","fieldVal","colVal","func","generateHeaderFilterElement","filterElement","editorElement","typingTimer","searchTrigger","headerElement","headerFilterEmptyCheck","headerFilterParams","hasAttribute","headerFilterLiveFilter","findFilter","findSubFilters","filtersToArray","undefined","searchType","filterRecurse","rowList","activeRowComponents","filterRow","subFilter","defaultFilters","plaintext","formatterParams","emptyToSpace","sanitizeHTML","money","integer","decimal","rgx","floatVal","decimalSym","thousandSym","thousand","symbolAfter","urlPrefix","labelField","urlField","image","src","urlSuffix","truthy","allowTruthy","tick","tickElement","cross","crossElement","datetime","inputFormat","outputFormat","invalidPlaceholder","newDatetime","moment","isValid","timezone","tz","datetimediff","suffix","humanize","date","duration","traffic","percentValue","colors","color","legend","legendColor","legendAlign","barEl","legendEl","buttonTick","buttonCross","rownum","responsiveCollapse","toggleList","isOpen","rowSelection","checkbox","toggleSelect","isSelected","registerRowSelectCheckbox","deselectRow","registerHeaderSelectCheckbox","Format","lookupFormatter","formatterPrint","formatterClipboard","formatterHtmlOutput","htmlOutput","formatters","entityMap","defaultFormatters","FrozenColumns","leftColumns","rightColumns","rightPadding","initializationMode","scrollEndTimer","edge","frozenCheck","calcMargins","layoutColumnPosition","layoutCalcRows","_calcSpace","allCells","leftParents","parentEl","getColGroupParentElement","FrozenRows","styleRows","groupManager","oldGroup","hasSubGroups","groupIDLookups","_addRowToGroup","_addRow","groupList","elementContents","arrowElement","createElements","addBindings","createValueGroups","arrow","initializeGroupHeader","allowedValues","_createGroup","initializeGroup","toggleVisibility","groupID","groupKey","headerGenerator","conformRowData","generateGroupHeaderContents","scrollHeader","removeGroup","noCalc","_visSet","getHeadersAndRows","hasTopCalcs","detachElement","generateTopRow","hasBottomCalcs","generateBottomRow","compoment","getPath","addBindingsd","childNodes","GroupComponent","GroupRows","langValue","removeCalcs","getRealColumns","lookupFunc","generateGroups","groupComponents","groupListData","pullGroupListData","rowCount","headerContent","oldGroups","createGroup","assignRowToExistingGroup","newGroupNeeded","oldRowGroup","oldGroupPath","newGroupPath","getExpectedPath","every","groupPath","groupId","History","undoers","redoers","oldRow","newRow","cellEdit","rowAdd","_rebindRow","rowMove","HtmlTableImport","fieldIndex","hasIndex","_extractOptions","_extractHeaders","_generateBlankHeaders","newElement","attributes","optionsArr","optionsList","attrib","_attribValue","exists","_findCol","textContent","keyBlock","scrollPageUp","newPos","scrollPageDown","scrollMax","scrollToStart","scrollToEnd","navPrev","navNext","navLeft","navRight","navUp","navDown","copyToClipboard","Keybindings","watchKeys","pressedKeys","keyupBinding","keydownBinding","mergedBindings","mapBindings","bindEvents","actions","mapBinding","symbolsList","ctrl","meta","code","checkBinding","ctrlKey","shiftKey","metaKey","defaultActions","Menu","menuElements","blurEvent","hideMenu","escEvent","escMenu","nestedMenuBlock","positionReversedX","headerMenuEl","LoadMenuEvent","loadMenu","touch","MouseEvent","menuEl","itemEl","disabled","hideOldSubMenus","positionMenu","pop","x","y","parentOffset","docHeight","innerHeight","touches","pageX","pageY","MoveColumns","placeholderElement","createPlaceholderElement","hoverElement","checkTimeout","checkPeriod","moving","toCol","toColAfter","startX","autoScrollMargin","autoScrollStep","autoScrollTimeout","touchMove","moveHover","endMove","mousemove","which","startMove","bindTouchEvents","prevColWidth","nextColWidthLast","prevColWidthLast","startXMove","moveToCol","_bindMouseMove","movingCells","_unbindMouseMove","scrollPos","columnHolder","xPos","MoveRows","toRowAfter","hasHandle","startY","tableRowDropEvent","connectionSelectorsTables","connectionSelectorsElements","connectionElements","connectedTable","connectedRow","mouseup","tableRowDrop","previousSibling","nextRowHeight","prevRowHeight","nextRowHeightLast","prevRowHeightLast","startYMove","setStartPosition","connectToTables","pointerEvents","getTableElement","disconnectFromTables","moveHoverConnections","moveHoverTable","rowHolder","yPos","connectionTables","dropEvent","elementRowDrop","tabulatorElementDropEvent","sender","senders","receiver","receivers","connect","disconnect","dropComplete","fromTable","toTable","Mutator","enabled","lookupMutator","mutators","mutatorEdit","Page","initialLoad","pageSizes","dataReceivedNames","dataSentNames","pagesElement","firstBut","prevBut","nextBut","lastBut","pageSizeSelect","hidden","pageSelectLabel","testElRow","testElCell","defaultDataSentNames","defaultDataReceivedNames","generatePageSizeSelectList","trigger","leftSize","rightSize","_generatePageButton","_setPageButtons","_getRemotePage","oldParams","pageParams","getParams","_parseRemoteData","last_page","footer","local","id","localStorage","getItem","cookie","cookiePos","expireDate","setDate","getDate","toUTCString","Persistence","defWatcherBlock","readFunc","writeFunc","testKey","removeItem","retreivedData","localStorageTest","readers","writers","retreiveData","getOwnPropertyDescriptor","defineProperty","set","get","oldCols","newCols","_findColumn","validateSorters","getGroupConfig","getPageConfig","excludedKeys","defStore","colDef","defaultReaders","defaultWriters","Print","manualBlock","replaceTable","cleanup","genereateTable","footerContent","scrollX","scrollY","footerEl","tableEl","scrollTo","ReactiveData","origFuncs","currentVersion","version","enumerable","configurable","args","arguments","arg","apply","getRowFromDataObject","startRow","oldRows","writable","watchKey","watchTreeChildren","childField","rebuildTree","ResizeColumns","startColumn","startWidth","prevHandle","handleDown","nearestColumn","_checkResizability","_mouseDown","prevHandleDown","colIndex","resizable","mouseMove","checkCellHeights","mouseUp","ResizeRows","startHeight","screenY","ResizeTable","observer","containerObserver","tableHeight","containerHeight","containerWidth","tableStyle","ResizeObserver","entry","nodeHeight","contentRect","nodeWidth","observe","unobserve","ResponsiveLayout","hiddenColumns","collapseFormatter","collapseStartOpen","collapseHandleColumn","formatCollapsedData","order","generateCollapsedContent","generateCollapsedRowContent","colCount","working","getFlexBaseWidth","hideColumn","showColumn","generateCollapsedRowData","mockCellComponent","node_content","titleData","valueData","titleHighlight","innerText","SelectRow","selecting","lastClickedRow","selectPrev","headerCheckboxElement","_rowSelectionChanged","endSelect","selected","_clearSelection","lastClickedRowIdx","rowIdx","fromRowIdx","toRowIdx","toggledRows","toggledRow","_selectRow","rowMatch","rowInfo","checkboxEl","childRowSelection","selectedRow","aRow","bRow","alignEmptyValues","emptyAlign","decimalSeparator","thousandSeparator","string","localeCompare","time","array","calc","d","alphanum","as","bs","a1","b1","L","rx","rd","isFinite","Sort","arrowEl","sorterParams","startingDir","headerSortStartingDir","newSortList","sortListActual","rowComponents","clearColumnHeaders","setColumnHeader","sortObj","findSorter","_sortItems","sorterCount","sortItem","_sortRow","el1Comp","el2Comp","el1","el2","defaultSorters","parameters","numeric","starts","ends","minLength","maxLength","regex","unique","cellData","Validate","invalidCells","_extractValidator","substring","_buildValidator","validators","invalidIndex","defaultValidators","TabulatorFull"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"tabulator.min.js","sources":["../../src/js/core/CoreFeature.js","../../src/js/core/column/ColumnComponent.js","../../src/js/core/column/defaults/options.js","../../src/js/core/cell/CellComponent.js","../../src/js/core/cell/Cell.js","../../src/js/core/column/Column.js","../../src/js/core/tools/Helpers.js","../../src/js/core/tools/OptionsList.js","../../src/js/core/rendering/Renderer.js","../../src/js/core/rendering/renderers/BasicHorizontal.js","../../src/js/core/rendering/renderers/VirtualDomHorizontal.js","../../src/js/core/ColumnManager.js","../../src/js/core/row/RowComponent.js","../../src/js/core/row/Row.js","../../src/js/core/rendering/renderers/BasicVertical.js","../../src/js/core/rendering/renderers/VirtualDomVertical.js","../../src/js/core/RowManager.js","../../src/js/core/FooterManager.js","../../src/js/core/tools/InteractionMonitor.js","../../src/js/core/tools/ComponentFuctionBinder.js","../../src/js/core/tools/dataLoader.js","../../src/js/core/tools/ExternalEventBus.js","../../src/js/core/tools/InternalEventBus.js","../../src/js/core/tools/TableRegistry.js","../../src/js/core/Module.js","../../src/js/modules/Layout/defaults/modes/fitDataGeneral.js","../../src/js/modules/Layout/defaults/modes.js","../../src/js/modules/Layout/defaults/modes/fitData.js","../../src/js/modules/Layout/defaults/modes/fitDataStretch.js","../../src/js/modules/Layout/defaults/modes/fitColumns.js","../../src/js/modules/Layout/Layout.js","../../src/js/modules/Localize/Localize.js","../../src/js/modules/Localize/defaults/langs.js","../../src/js/modules/Comms/Comms.js","../../src/js/core/tools/ModuleBinder.js","../../src/js/core/Tabulator.js","../../src/js/core/defaults/options.js","../../src/js/modules/Accessor/Accessor.js","../../src/js/modules/Accessor/defaults/accessors.js","../../src/js/modules/Ajax/defaults/urlGenerator.js","../../src/js/modules/Ajax/defaults/contentTypeFormatters.js","../../src/js/modules/Ajax/Ajax.js","../../src/js/modules/Ajax/defaults/config.js","../../src/js/modules/Ajax/defaults/loaderPromise.js","../../src/js/modules/Clipboard/Clipboard.js","../../src/js/modules/Clipboard/defaults/pasteActions.js","../../src/js/modules/Clipboard/defaults/pasteParsers.js","../../src/js/modules/ColumnCalcs/CalcComponent.js","../../src/js/modules/ColumnCalcs/defaults/calculations.js","../../src/js/modules/ColumnCalcs/ColumnCalcs.js","../../src/js/modules/DataTree/DataTree.js","../../src/js/modules/Download/defaults/downloaders.js","../../src/js/modules/Download/defaults/downloaders/csv.js","../../src/js/modules/Download/defaults/downloaders/json.js","../../src/js/modules/Download/defaults/downloaders/pdf.js","../../src/js/modules/Download/defaults/downloaders/xlsx.js","../../src/js/modules/Download/defaults/downloaders/html.js","../../src/js/modules/Download/Download.js","../../src/js/modules/Edit/inputMask.js","../../src/js/modules/Edit/defaults/editors.js","../../src/js/modules/Edit/defaults/editors/input.js","../../src/js/modules/Edit/defaults/editors/textarea.js","../../src/js/modules/Edit/defaults/editors/number.js","../../src/js/modules/Edit/defaults/editors/range.js","../../src/js/modules/Edit/defaults/editors/select.js","../../src/js/modules/Edit/defaults/editors/autocomplete.js","../../src/js/modules/Edit/defaults/editors/star.js","../../src/js/modules/Edit/defaults/editors/progress.js","../../src/js/modules/Edit/defaults/editors/tickCross.js","../../src/js/modules/Edit/Edit.js","../../src/js/modules/Export/ExportRow.js","../../src/js/modules/Export/ExportColumn.js","../../src/js/modules/Export/Export.js","../../src/js/modules/Filter/defaults/filters.js","../../src/js/modules/Filter/Filter.js","../../src/js/modules/Format/defaults/formatters.js","../../src/js/modules/Format/defaults/formatters/plaintext.js","../../src/js/modules/Format/defaults/formatters/html.js","../../src/js/modules/Format/defaults/formatters/textarea.js","../../src/js/modules/Format/defaults/formatters/money.js","../../src/js/modules/Format/defaults/formatters/link.js","../../src/js/modules/Format/defaults/formatters/image.js","../../src/js/modules/Format/defaults/formatters/tickCross.js","../../src/js/modules/Format/defaults/formatters/datetime.js","../../src/js/modules/Format/defaults/formatters/datetimediff.js","../../src/js/modules/Format/defaults/formatters/lookup.js","../../src/js/modules/Format/defaults/formatters/star.js","../../src/js/modules/Format/defaults/formatters/traffic.js","../../src/js/modules/Format/defaults/formatters/progress.js","../../src/js/modules/Format/defaults/formatters/color.js","../../src/js/modules/Format/defaults/formatters/buttonTick.js","../../src/js/modules/Format/defaults/formatters/buttonCross.js","../../src/js/modules/Format/defaults/formatters/rownum.js","../../src/js/modules/Format/defaults/formatters/handle.js","../../src/js/modules/Format/defaults/formatters/responsiveCollapse.js","../../src/js/modules/Format/defaults/formatters/rowSelection.js","../../src/js/modules/Format/Format.js","../../src/js/modules/FrozenColumns/FrozenColumns.js","../../src/js/modules/FrozenRows/FrozenRows.js","../../src/js/modules/GroupRows/GroupComponent.js","../../src/js/modules/GroupRows/Group.js","../../src/js/modules/GroupRows/GroupRows.js","../../src/js/modules/History/History.js","../../src/js/modules/History/defaults/undoers.js","../../src/js/modules/History/defaults/redoers.js","../../src/js/modules/HtmlTableImport/HtmlTableImport.js","../../src/js/modules/Interaction/Interaction.js","../../src/js/modules/Keybindings/Keybindings.js","../../src/js/modules/Keybindings/defaults/bindings.js","../../src/js/modules/Keybindings/defaults/actions.js","../../src/js/modules/Menu/Menu.js","../../src/js/modules/MoveColumns/MoveColumns.js","../../src/js/modules/MoveRows/MoveRows.js","../../src/js/modules/Mutator/Mutator.js","../../src/js/modules/Mutator/defaults/mutators.js","../../src/js/modules/Page/Page.js","../../src/js/modules/Persistence/defaults/readers.js","../../src/js/modules/Persistence/defaults/writers.js","../../src/js/modules/Persistence/Persistence.js","../../src/js/modules/Print/Print.js","../../src/js/modules/ReactiveData/ReactiveData.js","../../src/js/modules/ResizeColumns/ResizeColumns.js","../../src/js/modules/ResizeRows/ResizeRows.js","../../src/js/modules/ResizeTable/ResizeTable.js","../../src/js/modules/ResponsiveLayout/ResponsiveLayout.js","../../src/js/modules/SelectRow/SelectRow.js","../../src/js/modules/Sort/defaults/sorters/datetime.js","../../src/js/modules/Sort/defaults/sorters.js","../../src/js/modules/Sort/defaults/sorters/number.js","../../src/js/modules/Sort/defaults/sorters/string.js","../../src/js/modules/Sort/defaults/sorters/date.js","../../src/js/modules/Sort/defaults/sorters/time.js","../../src/js/modules/Sort/defaults/sorters/boolean.js","../../src/js/modules/Sort/defaults/sorters/array.js","../../src/js/modules/Sort/defaults/sorters/exists.js","../../src/js/modules/Sort/defaults/sorters/alphanum.js","../../src/js/modules/Sort/Sort.js","../../src/js/modules/Validate/defaults/validators.js","../../src/js/modules/Validate/Validate.js","../../src/js/core/TabulatorFull.js"],"sourcesContent":["export default class CoreFeature{\r\n\r\n\tconstructor(table){\r\n\t\tthis.table = table;\r\n\t}\r\n\r\n\t//////////////////////////////////////////\r\n\t/////////////// DataLoad /////////////////\r\n\t//////////////////////////////////////////\r\n\r\n\treloadData(data, silent){\r\n\t\treturn this.table.dataLoader.load(data, undefined, undefined, undefined, silent);\r\n\t}\r\n\r\n\t//////////////////////////////////////////\r\n\t///////////// Localization ///////////////\r\n\t//////////////////////////////////////////\r\n\r\n\tlangText(){\r\n\t\treturn this.table.modules.localize.getText(...arguments);\r\n\t}\r\n\r\n\tlangBind(){\r\n\t\treturn this.table.modules.localize.bind(...arguments);\r\n\t}\r\n\r\n\tlangLocale(){\r\n\t\treturn this.table.modules.localize.getLocale(...arguments);\r\n\t}\r\n\r\n\r\n\t//////////////////////////////////////////\r\n\t////////// Inter Table Comms /////////////\r\n\t//////////////////////////////////////////\r\n\r\n\tcommsConnections(){\r\n\t\treturn this.table.modules.comms.getConnections(...arguments);\r\n\t}\r\n\r\n\tcommsSend(){\r\n\t\treturn this.table.modules.comms.send(...arguments);\r\n\t}\r\n\r\n\t//////////////////////////////////////////\r\n\t//////////////// Layout /////////////////\r\n\t//////////////////////////////////////////\r\n\r\n\tlayoutMode(){\r\n\t\treturn this.table.modules.layout.getMode();\r\n\t}\r\n\r\n\tlayoutRefresh(){\r\n\t\treturn this.table.modules.layout.layout();\r\n\t}\r\n\r\n\r\n\t//////////////////////////////////////////\r\n\t/////////////// Event Bus ////////////////\r\n\t//////////////////////////////////////////\r\n\r\n\tsubscribe(){\r\n\t\tthis.table.eventBus.subscribe(...arguments);\r\n\t}\r\n\r\n\tunsubscribe(){\r\n\t\tthis.table.eventBus.unsubscribe(...arguments);\r\n\t}\r\n\r\n\tsubscribed(key){\r\n\t\tthis.table.eventBus.subscribed(key);\r\n\t}\r\n\r\n\tsubscriptionChange(){\r\n\t\tthis.table.eventBus.subscriptionChange(...arguments);\r\n\t}\r\n\r\n\tdispatch(){\r\n\t\tthis.table.eventBus.dispatch(...arguments);\r\n\t}\r\n\r\n\tchain(){\r\n\t\treturn this.table.eventBus.chain(...arguments);\r\n\t}\r\n\r\n\tconfirm(){\r\n\t\treturn this.table.eventBus.confirm(...arguments);\r\n\t}\r\n\r\n\tdispatchExternal(){\r\n\t\tthis.table.externalEvents.dispatch(...arguments);\r\n\t}\r\n\r\n\tsubscribedExternal(key){\r\n\t\tthis.table.externalEvents.subscribed(key);\r\n\t}\r\n\r\n\tsubscriptionChangeExternal(){\r\n\t\tthis.table.externalEvents.subscriptionChange(...arguments);\r\n\t}\r\n\r\n\t//////////////////////////////////////////\r\n\t//////////////// Options /////////////////\r\n\t//////////////////////////////////////////\r\n\r\n\toptions(key, value){\r\n\t\tif(typeof value !== \"undefined\"){\r\n\t\t\tthis.table.options[key] = value;\r\n\t\t}\r\n\r\n\t\treturn this.table.options[key];\r\n\t}\r\n\r\n\tsetOption(key, value){\r\n\t\tif(typeof value !== \"undefined\"){\r\n\t\t\tthis.table.options[key] = value;\r\n\t\t}\r\n\r\n\t\treturn this.table.options[key];\r\n\t}\r\n\r\n\r\n\t//////////////////////////////////////////\r\n\t//////////////// Modules /////////////////\r\n\t//////////////////////////////////////////\r\n\r\n\tmodule(key){\r\n\t\treturn this.table.module(key);\r\n\t}\r\n}","//public column object\r\nexport default class ColumnComponent {\r\n\tconstructor (column){\r\n\t\tthis._column = column;\r\n\t\tthis.type = \"ColumnComponent\";\r\n\r\n\t\treturn new Proxy(this, {\r\n\t\t\tget: function(target, name, receiver) {\r\n\t\t\t\tif (typeof target[name] !== \"undefined\") {\r\n\t\t\t\t\treturn target[name];\r\n\t\t\t\t}else{\r\n\t\t\t\t\treturn target._column.table.componentFunctionBinder.handle(\"column\", target._column, name)\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t})\r\n\t}\r\n\r\n\tgetElement(){\r\n\t\treturn this._column.getElement();\r\n\t}\r\n\r\n\tgetDefinition(){\r\n\t\treturn this._column.getDefinition();\r\n\t}\r\n\r\n\tgetField(){\r\n\t\treturn this._column.getField();\r\n\t}\r\n\r\n\tgetCells(){\r\n\t\tvar cells = [];\r\n\r\n\t\tthis._column.cells.forEach(function(cell){\r\n\t\t\tcells.push(cell.getComponent());\r\n\t\t});\r\n\r\n\t\treturn cells;\r\n\t}\r\n\r\n\tisVisible(){\r\n\t\treturn this._column.visible;\r\n\t}\r\n\r\n\tshow(){\r\n\t\tif(this._column.isGroup){\r\n\t\t\tthis._column.columns.forEach(function(column){\r\n\t\t\t\tcolumn.show();\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tthis._column.show();\r\n\t\t}\r\n\t}\r\n\r\n\thide(){\r\n\t\tif(this._column.isGroup){\r\n\t\t\tthis._column.columns.forEach(function(column){\r\n\t\t\t\tcolumn.hide();\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tthis._column.hide();\r\n\t\t}\r\n\t}\r\n\r\n\ttoggle(){\r\n\t\tif(this._column.visible){\r\n\t\t\tthis.hide();\r\n\t\t}else{\r\n\t\t\tthis.show();\r\n\t\t}\r\n\t}\r\n\r\n\tdelete(){\r\n\t\treturn this._column.delete();\r\n\t}\r\n\r\n\tgetSubColumns(){\r\n\t\tvar output = [];\r\n\r\n\t\tif(this._column.columns.length){\r\n\t\t\tthis._column.columns.forEach(function(column){\r\n\t\t\t\toutput.push(column.getComponent());\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tgetParentColumn(){\r\n\t\treturn this._column.parent instanceof Column ? this._column.parent.getComponent() : false;\r\n\t}\r\n\r\n\t_getSelf(){\r\n\t\treturn this._column;\r\n\t}\r\n\r\n\tscrollTo(){\r\n\t\treturn this._column.table.columnManager.scrollToColumn(this._column);\r\n\t}\r\n\r\n\tgetTable(){\r\n\t\treturn this._column.table;\r\n\t}\r\n\r\n\tmove(to, after){\r\n\t\tvar toColumn = this._column.table.columnManager.findColumn(to);\r\n\r\n\t\tif(toColumn){\r\n\t\t\tthis._column.table.columnManager.moveColumn(this._column, toColumn, after)\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Move Error - No matching column found:\", toColumn);\r\n\t\t}\r\n\t}\r\n\r\n\tgetNextColumn(){\r\n\t\tvar nextCol = this._column.nextColumn();\r\n\r\n\t\treturn nextCol ? nextCol.getComponent() : false;\r\n\t}\r\n\r\n\tgetPrevColumn(){\r\n\t\tvar prevCol = this._column.prevColumn();\r\n\r\n\t\treturn prevCol ? prevCol.getComponent() : false;\r\n\t}\r\n\r\n\tupdateDefinition(updates){\r\n\t\treturn this._column.updateDefinition(updates);\r\n\t}\r\n\r\n\tgetWidth(){\r\n\t\treturn this._column.getWidth();\r\n\t}\r\n\r\n\tsetWidth(width){\r\n\t\tvar result;\r\n\r\n\t\tif(width === true){\r\n\t\t\tresult = this._column.reinitializeWidth(true);\r\n\t\t}else{\r\n\t\t\tresult = this._column.setWidth(width);\r\n\t\t}\r\n\r\n\t\tthis._column.table.columnManager.renderer.rerenderColumns(true);\r\n\r\n\t\treturn result;\r\n\t}\r\n}","export default {\r\n\t\"title\": undefined,\r\n\t\"field\": undefined,\r\n\t\"columns\": undefined,\r\n\t\"visible\": undefined,\r\n\t\"hozAlign\": undefined,\r\n\t\"vertAlign\": undefined,\r\n\t\"width\": undefined,\r\n\t\"minWidth\": 40,\r\n\t\"maxWidth\": undefined,\r\n\t\"tooltip\": undefined,\r\n\t\"cssClass\": undefined,\r\n\t\"variableHeight\": undefined,\r\n\t\"headerTooltip\": undefined,\r\n\t\"headerVertical\": undefined,\r\n\t\"headerHozAlign\": undefined,\r\n\t\"editableTitle\": undefined,\r\n}","//public cell object\r\nexport default class CellComponent {\r\n\r\n\tconstructor (cell){\r\n\t\tthis._cell = cell;\r\n\r\n\t\treturn new Proxy(this, {\r\n\t\t\tget: function(target, name, receiver) {\r\n\t\t\t\tif (typeof target[name] !== \"undefined\") {\r\n\t\t\t\t\treturn target[name];\r\n\t\t\t\t}else{\r\n\t\t\t\t\treturn target._cell.table.componentFunctionBinder.handle(\"cell\", target._cell, name)\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t})\r\n\t}\r\n\r\n\tgetValue(){\r\n\t\treturn this._cell.getValue();\r\n\t}\r\n\r\n\tgetOldValue(){\r\n\t\treturn this._cell.getOldValue();\r\n\t}\r\n\r\n\tgetInitialValue(){\r\n\t\treturn this._cell.initialValue;\r\n\t}\r\n\r\n\tgetElement(){\r\n\t\treturn this._cell.getElement();\r\n\t}\r\n\r\n\tgetRow(){\r\n\t\treturn this._cell.row.getComponent();\r\n\t}\r\n\r\n\tgetData(){\r\n\t\treturn this._cell.row.getData();\r\n\t}\r\n\r\n\tgetField(){\r\n\t\treturn this._cell.column.getField();\r\n\t}\r\n\r\n\tgetColumn(){\r\n\t\treturn this._cell.column.getComponent();\r\n\t}\r\n\r\n\tsetValue(value, mutate){\r\n\t\tif(typeof mutate == \"undefined\"){\r\n\t\t\tmutate = true;\r\n\t\t}\r\n\r\n\t\tthis._cell.setValue(value, mutate);\r\n\t}\r\n\r\n\trestoreOldValue(){\r\n\t\tthis._cell.setValueActual(this._cell.getOldValue());\r\n\t}\r\n\r\n\trestoreInitialValue(){\r\n\t\tthis._cell.setValueActual(this._cell.initialValue);\r\n\t}\r\n\r\n\tcheckHeight(){\r\n\t\tthis._cell.checkHeight();\r\n\t}\r\n\r\n\tgetTable(){\r\n\t\treturn this._cell.table;\r\n\t}\r\n\r\n\t_getSelf(){\r\n\t\treturn this._cell;\r\n\t}\r\n}","import CoreFeature from '../CoreFeature.js';\r\nimport CellComponent from './CellComponent.js';\r\n\r\nexport default class Cell extends CoreFeature{\r\n\tconstructor(column, row){\r\n\t\tsuper(column.table);\r\n\r\n\t\tthis.table = column.table;\r\n\t\tthis.column = column;\r\n\t\tthis.row = row;\r\n\t\tthis.element = null;\r\n\t\tthis.value = null;\r\n\t\tthis.initialValue;\r\n\t\tthis.oldValue = null;\r\n\t\tthis.modules = {};\r\n\r\n\t\tthis.height = null;\r\n\t\tthis.width = null;\r\n\t\tthis.minWidth = null;\r\n\r\n\t\tthis.component = null;\r\n\r\n\t\tthis.loaded = false; //track if the cell has been added to the DOM yet\r\n\r\n\t\tthis.build();\r\n\t}\r\n\r\n\t//////////////// Setup Functions /////////////////\r\n\t//generate element\r\n\tbuild(){\r\n\t\tthis.generateElement();\r\n\r\n\t\tthis.setWidth();\r\n\r\n\t\tthis._configureCell();\r\n\r\n\t\tthis.setValueActual(this.column.getFieldValue(this.row.data));\r\n\r\n\t\tthis.initialValue = this.value;\r\n\t}\r\n\r\n\tgenerateElement(){\r\n\t\tthis.element = document.createElement('div');\r\n\t\tthis.element.className = \"tabulator-cell\";\r\n\t\tthis.element.setAttribute(\"role\", \"gridcell\");\r\n\t\tthis.element = this.element;\r\n\t}\r\n\r\n\t_configureCell(){\r\n\t\tvar element = this.element,\r\n\t\tfield = this.column.getField(),\r\n\t\tvertAligns = {\r\n\t\t\ttop:\"flex-start\",\r\n\t\t\tbottom:\"flex-end\",\r\n\t\t\tmiddle:\"center\",\r\n\t\t},\r\n\t\thozAligns = {\r\n\t\t\tleft:\"flex-start\",\r\n\t\t\tright:\"flex-end\",\r\n\t\t\tcenter:\"center\",\r\n\t\t};\r\n\r\n\t\t//set text alignment\r\n\t\telement.style.textAlign = this.column.hozAlign;\r\n\r\n\t\tif(this.column.vertAlign){\r\n\t\t\telement.style.display = \"inline-flex\";\r\n\r\n\t\t\telement.style.alignItems = vertAligns[this.column.vertAlign] || \"\";\r\n\r\n\t\t\tif(this.column.hozAlign){\r\n\t\t\t\telement.style.justifyContent = hozAligns[this.column.hozAlign] || \"\";\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(field){\r\n\t\t\telement.setAttribute(\"tabulator-field\", field);\r\n\t\t}\r\n\r\n\t\t//add class to cell if needed\r\n\t\tif(this.column.definition.cssClass){\r\n\t\t\tvar classNames = this.column.definition.cssClass.split(\" \")\r\n\t\t\tclassNames.forEach((className) => {\r\n\t\t\t\telement.classList.add(className)\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\t//update tooltip on mouse enter\r\n\t\tif (this.table.options.tooltipGenerationMode === \"hover\"){\r\n\t\t\telement.addEventListener(\"mouseenter\", (e) => {\r\n\t\t\t\tthis._generateTooltip();\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tthis.dispatch(\"cell-init\", this);\r\n\r\n\t\t//hide cell if not visible\r\n\t\tif(!this.column.visible){\r\n\t\t\tthis.hide();\r\n\t\t}\r\n\t}\r\n\r\n\t//generate cell contents\r\n\t_generateContents(){\r\n\t\tvar val;\r\n\r\n\t\tval = this.chain(\"cell-format\", this, null, () => {\r\n\t\t\treturn this.element.innerHTML = this.value;\r\n\t\t});\r\n\r\n\t\tswitch(typeof val){\r\n\t\t\tcase \"object\":\r\n\t\t\tif(val instanceof Node){\r\n\r\n\t\t\t\t//clear previous cell contents\r\n\t\t\t\twhile(this.element.firstChild) this.element.removeChild(this.element.firstChild);\r\n\r\n\t\t\t\tthis.element.appendChild(val);\r\n\t\t\t}else{\r\n\t\t\t\tthis.element.innerHTML = \"\";\r\n\r\n\t\t\t\tif(val != null){\r\n\t\t\t\t\tconsole.warn(\"Format Error - Formatter has returned a type of object, the only valid formatter object return is an instance of Node, the formatter returned:\", val);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\t\t\tcase \"undefined\":\r\n\t\t\tcase \"null\":\r\n\t\t\tthis.element.innerHTML = \"\";\r\n\t\t\tbreak;\r\n\t\t\tdefault:\r\n\t\t\tthis.element.innerHTML = val;\r\n\t\t}\r\n\t}\r\n\r\n\tcellRendered(){\r\n\t\tthis.dispatch(\"cell-rendered\", this);\r\n\t}\r\n\r\n\t//generate tooltip text\r\n\t_generateTooltip(){\r\n\t\tvar tooltip = this.column.tooltip;\r\n\r\n\t\tif(tooltip){\r\n\t\t\tif(tooltip === true){\r\n\t\t\t\ttooltip = this.value;\r\n\t\t\t}else if(typeof(tooltip) == \"function\"){\r\n\t\t\t\ttooltip = tooltip(this.getComponent());\r\n\r\n\t\t\t\tif(tooltip === false){\r\n\t\t\t\t\ttooltip = \"\";\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif(typeof tooltip === \"undefined\"){\r\n\t\t\t\ttooltip = \"\";\r\n\t\t\t}\r\n\r\n\t\t\tthis.element.setAttribute(\"title\", tooltip);\r\n\t\t}else{\r\n\t\t\tthis.element.setAttribute(\"title\", \"\");\r\n\t\t}\r\n\t}\r\n\r\n\t//////////////////// Getters ////////////////////\r\n\tgetElement(containerOnly){\r\n\t\tif(!this.loaded){\r\n\t\t\tthis.loaded = true;\r\n\t\t\tif(!containerOnly){\r\n\t\t\t\tthis.layoutElement();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this.element;\r\n\t}\r\n\r\n\tgetValue(){\r\n\t\treturn this.value;\r\n\t}\r\n\r\n\tgetOldValue(){\r\n\t\treturn this.oldValue;\r\n\t}\r\n\r\n\t//////////////////// Actions ////////////////////\r\n\tsetValue(value, mutate){\r\n\t\tvar changed = this.setValueProcessData(value, mutate);\r\n\r\n\t\tif(changed){\r\n\t\t\tthis.dispatch(\"cell-value-updated\", this);\r\n\r\n\t\t\tthis.cellRendered();\r\n\r\n\t\t\tthis.dispatchExternal(\"cellEdited\", this.getComponent());\r\n\r\n\t\t\tif(this.subscribedExternal(\"dataChanged\")){\r\n\t\t\t\tthis.dispatchExternal(\"dataChanged\", this.table.rowManager.getData());\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tsetValueProcessData(value, mutate){\r\n\t\tvar changed = false;\r\n\r\n\t\tif(this.value != value){\r\n\r\n\t\t\tchanged = true;\r\n\r\n\t\t\tif(mutate){\r\n\t\t\t\tvalue = this.chain(\"cell-value-changing\", [this, value], null, value);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.setValueActual(value);\r\n\r\n\t\tif(changed){\r\n\t\t\tthis.dispatch(\"cell-value-changed\", this);\r\n\t\t}\r\n\r\n\t\treturn changed;\r\n\t}\r\n\r\n\tsetValueActual(value){\r\n\t\tthis.oldValue = this.value;\r\n\r\n\t\tthis.value = value;\r\n\r\n\t\tthis.dispatch(\"cell-value-save-before\", this);\r\n\r\n\t\tthis.column.setFieldValue(this.row.data, value);\r\n\r\n\t\tthis.dispatch(\"cell-value-save-after\", this);\r\n\r\n\t\tif(this.loaded){\r\n\t\t\tthis.layoutElement();\r\n\t\t}\r\n\t}\r\n\r\n\tlayoutElement(){\r\n\t\tthis._generateContents();\r\n\t\tthis._generateTooltip();\r\n\r\n\t\tthis.dispatch(\"cell-layout\", this);\r\n\t}\r\n\r\n\tsetWidth(){\r\n\t\tthis.width = this.column.width;\r\n\t\tthis.element.style.width = this.column.widthStyled;\r\n\t}\r\n\r\n\tclearWidth(){\r\n\t\tthis.width = \"\";\r\n\t\tthis.element.style.width = \"\";\r\n\t}\r\n\r\n\tgetWidth(){\r\n\t\treturn this.width || this.element.offsetWidth;\r\n\t}\r\n\r\n\tsetMinWidth(){\r\n\t\tthis.minWidth = this.column.minWidth;\r\n\t\tthis.element.style.minWidth = this.column.minWidthStyled;\r\n\t}\r\n\r\n\tsetMaxWidth(){\r\n\t\tthis.maxWidth = this.column.maxWidth;\r\n\t\tthis.element.style.maxWidth = this.column.maxWidthStyled;\r\n\t}\r\n\r\n\tcheckHeight(){\r\n\t\t// var height = this.element.css(\"height\");\r\n\t\tthis.row.reinitializeHeight();\r\n\t}\r\n\r\n\tclearHeight(){\r\n\t\tthis.element.style.height = \"\";\r\n\t\tthis.height = null;\r\n\t}\r\n\r\n\tsetHeight(){\r\n\t\tthis.height = this.row.height;\r\n\t\tthis.element.style.height = this.row.heightStyled;\r\n\t}\r\n\r\n\tgetHeight(){\r\n\t\treturn this.height || this.element.offsetHeight;\r\n\t}\r\n\r\n\tshow(){\r\n\t\tthis.element.style.display = this.column.vertAlign ? \"inline-flex\" : \"\";\r\n\t}\r\n\r\n\thide(){\r\n\t\tthis.element.style.display = \"none\";\r\n\t}\r\n\r\n\tdelete(){\r\n\t\tthis.dispatch(\"cell-delete\", this);\r\n\r\n\t\tif(!this.table.rowManager.redrawBlock && this.element.parentNode){\r\n\t\t\tthis.element.parentNode.removeChild(this.element);\r\n\t\t}\r\n\r\n\t\tthis.element = false;\r\n\t\tthis.column.deleteCell(this);\r\n\t\tthis.row.deleteCell(this);\r\n\t\tthis.calcs = {};\r\n\t}\r\n\r\n\tgetIndex(){\r\n\t\treturn this.row.getCellIndex(this);\r\n\t}\r\n\r\n\t//////////////// Object Generation /////////////////\r\n\tgetComponent(){\r\n\t\tif(!this.component){\r\n\t\t\tthis.component = new CellComponent(this);\r\n\t\t}\r\n\r\n\t\treturn this.component;\r\n\t}\r\n}","import CoreFeature from '../CoreFeature.js';\r\nimport ColumnComponent from './ColumnComponent.js';\r\nimport defaultOptions from './defaults/options.js';\r\n\r\nimport Cell from '../cell/Cell.js';\r\n\r\nclass Column extends CoreFeature{\r\n\r\n\tconstructor(def, parent){\r\n\t\tsuper(parent.table);\r\n\r\n\t\tthis.definition = def; //column definition\r\n\t\tthis.parent = parent; //hold parent object\r\n\t\tthis.type = \"column\"; //type of element\r\n\t\tthis.columns = []; //child columns\r\n\t\tthis.cells = []; //cells bound to this column\r\n\t\tthis.element = this.createElement(); //column header element\r\n\t\tthis.contentElement = false;\r\n\t\tthis.titleHolderElement = false;\r\n\t\tthis.titleElement = false;\r\n\t\tthis.groupElement = this.createGroupElement(); //column group holder element\r\n\t\tthis.isGroup = false;\r\n\t\tthis.tooltip = false; //hold column tooltip\r\n\t\tthis.hozAlign = \"\"; //horizontal text alignment\r\n\t\tthis.vertAlign = \"\"; //vert text alignment\r\n\r\n\t\t//multi dimensional filed handling\r\n\t\tthis.field =\"\";\r\n\t\tthis.fieldStructure = \"\";\r\n\t\tthis.getFieldValue = \"\";\r\n\t\tthis.setFieldValue = \"\";\r\n\r\n\t\tthis.titleFormatterRendered = false;\r\n\r\n\t\tthis.mapDefinitions();\r\n\r\n\t\tthis.setField(this.definition.field);\r\n\r\n\t\tthis.modules = {}; //hold module variables;\r\n\r\n\t\tthis.width = null; //column width\r\n\t\tthis.widthStyled = \"\"; //column width prestyled to improve render efficiency\r\n\t\tthis.maxWidth = null; //column maximum width\r\n\t\tthis.maxWidthStyled = \"\"; //column maximum prestyled to improve render efficiency\r\n\t\tthis.minWidth = null; //column minimum width\r\n\t\tthis.minWidthStyled = \"\"; //column minimum prestyled to improve render efficiency\r\n\t\tthis.widthFixed = false; //user has specified a width for this column\r\n\r\n\t\tthis.visible = true; //default visible state\r\n\r\n\t\tthis.component = null;\r\n\r\n\t\t//initialize column\r\n\t\tif(this.definition.columns){\r\n\r\n\t\t\tthis.isGroup = true;\r\n\r\n\t\t\tthis.definition.columns.forEach((def, i) => {\r\n\t\t\t\tvar newCol = new Column(def, this);\r\n\t\t\t\tthis.attachColumn(newCol);\r\n\t\t\t});\r\n\r\n\t\t\tthis.checkColumnVisibility();\r\n\t\t}else{\r\n\t\t\tparent.registerColumnField(this);\r\n\t\t}\r\n\r\n\t\tthis._initialize();\r\n\r\n\t\tthis.bindModuleColumns();\r\n\t}\r\n\r\n\tcreateElement (){\r\n\t\tvar el = document.createElement(\"div\");\r\n\r\n\t\tel.classList.add(\"tabulator-col\");\r\n\t\tel.setAttribute(\"role\", \"columnheader\");\r\n\t\tel.setAttribute(\"aria-sort\", \"none\");\r\n\r\n\t\treturn el;\r\n\t}\r\n\r\n\tcreateGroupElement (){\r\n\t\tvar el = document.createElement(\"div\");\r\n\r\n\t\tel.classList.add(\"tabulator-col-group-cols\");\r\n\r\n\t\treturn el;\r\n\t}\r\n\r\n\tmapDefinitions(){\r\n\t\tvar defaults = this.table.options.columnDefaults;\r\n\r\n\t\t//map columnDefaults onto column definitions\r\n\t\tif(defaults){\r\n\t\t\tfor(let key in defaults){\r\n\t\t\t\tif(typeof this.definition[key] === \"undefined\"){\r\n\t\t\t\t\tthis.definition[key] = defaults[key];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.definition = this.table.columnManager.optionsList.generate(Column.defaultOptionList, this.definition)\r\n\t}\r\n\r\n\tcheckDefinition(){\r\n\t\tObject.keys(this.definition).forEach((key) => {\r\n\t\t\tif(Column.defaultOptionList.indexOf(key) === -1){\r\n\t\t\t\tconsole.warn(\"Invalid column definition option in '\" + (this.field || this.definition.title) + \"' column:\", key)\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tsetField(field){\r\n\t\tthis.field = field;\r\n\t\tthis.fieldStructure = field ? (this.table.options.nestedFieldSeparator ? field.split(this.table.options.nestedFieldSeparator) : [field]) : [];\r\n\t\tthis.getFieldValue = this.fieldStructure.length > 1 ? this._getNestedData : this._getFlatData;\r\n\t\tthis.setFieldValue = this.fieldStructure.length > 1 ? this._setNestedData : this._setFlatData;\r\n\t}\r\n\r\n\t//register column position with column manager\r\n\tregisterColumnPosition(column){\r\n\t\tthis.parent.registerColumnPosition(column);\r\n\t}\r\n\r\n\t//register column position with column manager\r\n\tregisterColumnField(column){\r\n\t\tthis.parent.registerColumnField(column);\r\n\t}\r\n\r\n\t//trigger position registration\r\n\treRegisterPosition(){\r\n\t\tif(this.isGroup){\r\n\t\t\tthis.columns.forEach(function(column){\r\n\t\t\t\tcolumn.reRegisterPosition();\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tthis.registerColumnPosition(this);\r\n\t\t}\r\n\t}\r\n\r\n\t_mapDepricatedFunctionality(){\r\n\t\t//all previously deprecated functionality removed in the 5.0 release\r\n\t}\r\n\r\n\tsetTooltip(){\r\n\t\tvar def = this.definition;\r\n\r\n\t\t//set header tooltips\r\n\t\tvar tooltip = typeof def.headerTooltip === \"undefined\" ? def.tooltip : def.headerTooltip;\r\n\r\n\t\tif(tooltip){\r\n\t\t\tif(tooltip === true){\r\n\t\t\t\tif(def.field){\r\n\t\t\t\t\tthis.langBind(\"columns|\" + def.field, (value) => {\r\n\t\t\t\t\t\tthis.element.setAttribute(\"title\", value || def.title);\r\n\t\t\t\t\t});\r\n\t\t\t\t}else{\r\n\t\t\t\t\tthis.element.setAttribute(\"title\", def.title);\r\n\t\t\t\t}\r\n\r\n\t\t\t}else{\r\n\t\t\t\tif(typeof(tooltip) == \"function\"){\r\n\t\t\t\t\ttooltip = tooltip(this.getComponent());\r\n\r\n\t\t\t\t\tif(tooltip === false){\r\n\t\t\t\t\t\ttooltip = \"\";\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.element.setAttribute(\"title\", tooltip);\r\n\t\t\t}\r\n\r\n\t\t}else{\r\n\t\t\tthis.element.setAttribute(\"title\", \"\");\r\n\t\t}\r\n\t}\r\n\r\n\t//build header element\r\n\t_initialize(){\r\n\t\tvar def = this.definition;\r\n\r\n\t\twhile(this.element.firstChild) this.element.removeChild(this.element.firstChild);\r\n\r\n\t\tif(def.headerVertical){\r\n\t\t\tthis.element.classList.add(\"tabulator-col-vertical\");\r\n\r\n\t\t\tif(def.headerVertical === \"flip\"){\r\n\t\t\t\tthis.element.classList.add(\"tabulator-col-vertical-flip\");\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.contentElement = this._bindEvents();\r\n\r\n\t\tthis.contentElement = this._buildColumnHeaderContent();\r\n\r\n\t\tthis.element.appendChild(this.contentElement);\r\n\r\n\t\tif(this.isGroup){\r\n\t\t\tthis._buildGroupHeader();\r\n\t\t}else{\r\n\t\t\tthis._buildColumnHeader();\r\n\t\t}\r\n\r\n\t\tthis.setTooltip();\r\n\r\n\t\tthis.dispatch(\"column-init\", this);\r\n\r\n\t\t//update header tooltip on mouse enter\r\n\t\tthis.element.addEventListener(\"mouseenter\", (e) => {\r\n\t\t\tthis.setTooltip();\r\n\t\t});\r\n\t}\r\n\r\n\t_bindEvents(){\r\n\t\tvar def = this.definition,\r\n\t\tdblTap,\ttapHold, tap;\r\n\r\n\t\t//setup header click event bindings\r\n\t\tif(typeof(def.headerClick) == \"function\"){\r\n\t\t\tthis.element.addEventListener(\"click\", (e) => {def.headerClick(e, this.getComponent());});\r\n\t\t}\r\n\r\n\t\tif(typeof(def.headerDblClick) == \"function\"){\r\n\t\t\tthis.element.addEventListener(\"dblclick\", (e) => {def.headerDblClick(e, this.getComponent());});\r\n\t\t}\r\n\r\n\t\tif(typeof(def.headerContext) == \"function\"){\r\n\t\t\tthis.element.addEventListener(\"contextmenu\", (e) => {def.headerContext(e, this.getComponent());});\r\n\t\t}\r\n\r\n\t\t//setup header tap event bindings\r\n\t\tif(typeof(def.headerTap) == \"function\"){\r\n\t\t\ttap = false;\r\n\r\n\t\t\tthis.element.addEventListener(\"touchstart\", (e) => {\r\n\t\t\t\ttap = true;\r\n\t\t\t}, {passive: true});\r\n\r\n\t\t\tthis.element.addEventListener(\"touchend\", (e) => {\r\n\t\t\t\tif(tap){\r\n\t\t\t\t\tdef.headerTap(e, this.getComponent());\r\n\t\t\t\t}\r\n\r\n\t\t\t\ttap = false;\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif(typeof(def.headerDblTap) == \"function\"){\r\n\t\t\tdblTap = null;\r\n\r\n\t\t\tthis.element.addEventListener(\"touchend\", (e) => {\r\n\r\n\t\t\t\tif(dblTap){\r\n\t\t\t\t\tclearTimeout(dblTap);\r\n\t\t\t\t\tdblTap = null;\r\n\r\n\t\t\t\t\tdef.headerDblTap(e, this.getComponent());\r\n\t\t\t\t}else{\r\n\r\n\t\t\t\t\tdblTap = setTimeout(() => {\r\n\t\t\t\t\t\tclearTimeout(dblTap);\r\n\t\t\t\t\t\tdblTap = null;\r\n\t\t\t\t\t}, 300);\r\n\t\t\t\t}\r\n\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif(typeof(def.headerTapHold) == \"function\"){\r\n\t\t\ttapHold = null;\r\n\r\n\t\t\tthis.element.addEventListener(\"touchstart\", (e) => {\r\n\t\t\t\tclearTimeout(tapHold);\r\n\r\n\t\t\t\ttapHold = setTimeout(function(){\r\n\t\t\t\t\tclearTimeout(tapHold);\r\n\t\t\t\t\ttapHold = null;\r\n\t\t\t\t\ttap = false;\r\n\t\t\t\t\tdef.headerTapHold(e, this.getComponent());\r\n\t\t\t\t}, 1000);\r\n\r\n\t\t\t}, {passive: true});\r\n\r\n\t\t\tthis.element.addEventListener(\"touchend\", (e) => {\r\n\t\t\t\tclearTimeout(tapHold);\r\n\t\t\t\ttapHold = null;\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\t//build header element for header\r\n\t_buildColumnHeader(){\r\n\t\tvar def = this.definition,\r\n\t\ttable = this.table;\r\n\r\n\t\tthis.dispatch(\"column-layout\", this);\r\n\r\n\t\t//set column visibility\r\n\t\tif(typeof def.visible != \"undefined\"){\r\n\t\t\tif(def.visible){\r\n\t\t\t\tthis.show(true);\r\n\t\t\t}else{\r\n\t\t\t\tthis.hide(true);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//asign additional css classes to column header\r\n\t\tif(def.cssClass){\r\n\t\t\tvar classeNames = def.cssClass.split(\" \");\r\n\t\t\tclasseNames.forEach((className) => {\r\n\t\t\t\tthis.element.classList.add(className);\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif(def.field){\r\n\t\t\tthis.element.setAttribute(\"tabulator-field\", def.field);\r\n\t\t}\r\n\r\n\t\t//set min width if present\r\n\t\tthis.setMinWidth(parseInt(def.minWidth));\r\n\r\n\t\tif(def.maxWidth){\r\n\t\t\tthis.setMaxWidth(parseInt(def.maxWidth));\r\n\t\t}\r\n\r\n\t\tthis.reinitializeWidth();\r\n\r\n\t\t//set tooltip if present\r\n\t\tthis.tooltip = this.definition.tooltip;\r\n\r\n\t\t//set orizontal text alignment\r\n\t\tthis.hozAlign = this.definition.hozAlign;\r\n\t\tthis.vertAlign = this.definition.vertAlign;\r\n\r\n\t\tthis.titleElement.style.textAlign = this.definition.headerHozAlign;\r\n\t}\r\n\r\n\t_buildColumnHeaderContent(){\r\n\t\tvar def = this.definition,\r\n\t\ttable = this.table;\r\n\r\n\t\tvar contentElement = document.createElement(\"div\");\r\n\t\tcontentElement.classList.add(\"tabulator-col-content\");\r\n\r\n\t\tthis.titleHolderElement = document.createElement(\"div\");\r\n\t\tthis.titleHolderElement.classList.add(\"tabulator-col-title-holder\");\r\n\r\n\t\tcontentElement.appendChild(this.titleHolderElement);\r\n\r\n\t\tthis.titleElement = this._buildColumnHeaderTitle();\r\n\r\n\t\tthis.titleHolderElement.appendChild(this.titleElement);\r\n\r\n\t\treturn contentElement;\r\n\t}\r\n\r\n\t//build title element of column\r\n\t_buildColumnHeaderTitle(){\r\n\t\tvar def = this.definition,\r\n\t\ttitle;\r\n\r\n\t\tvar titleHolderElement = document.createElement(\"div\");\r\n\t\ttitleHolderElement.classList.add(\"tabulator-col-title\");\r\n\r\n\t\tif(def.editableTitle){\r\n\t\t\tvar titleElement = document.createElement(\"input\");\r\n\t\t\ttitleElement.classList.add(\"tabulator-title-editor\");\r\n\r\n\t\t\ttitleElement.addEventListener(\"click\", (e) => {\r\n\t\t\t\te.stopPropagation();\r\n\t\t\t\ttitleElement.focus();\r\n\t\t\t});\r\n\r\n\t\t\ttitleElement.addEventListener(\"change\", () => {\r\n\t\t\t\tdef.title = titleElement.value;\r\n\t\t\t\tthis.dispatchExternal(\"columnTitleChanged\", this.getComponent());\r\n\t\t\t});\r\n\r\n\t\t\ttitleHolderElement.appendChild(titleElement);\r\n\r\n\t\t\tif(def.field){\r\n\t\t\t\tthis.langBind(\"columns|\" + def.field, (text) => {\r\n\t\t\t\t\ttitleElement.value = text || (def.title || \" \");\r\n\t\t\t\t});\r\n\t\t\t}else{\r\n\t\t\t\ttitleElement.value = def.title || \" \";\r\n\t\t\t}\r\n\r\n\t\t}else{\r\n\t\t\tif(def.field){\r\n\t\t\t\tthis.langBind(\"columns|\" + def.field, (text) => {\r\n\t\t\t\t\tthis._formatColumnHeaderTitle(titleHolderElement, text || (def.title || \" \"));\r\n\t\t\t\t});\r\n\t\t\t}else{\r\n\t\t\t\tthis._formatColumnHeaderTitle(titleHolderElement, def.title || \" \");\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn titleHolderElement;\r\n\t}\r\n\r\n\t_formatColumnHeaderTitle(el, title){\r\n\t\tvar contents = this.chain(\"column-format\", [this, title, el], null, () => {\r\n\t\t\treturn title;\r\n\t\t});\r\n\r\n\t\tswitch(typeof contents){\r\n\t\t\tcase \"object\":\r\n\t\t\tif(contents instanceof Node){\r\n\t\t\t\tel.appendChild(contents);\r\n\t\t\t}else{\r\n\t\t\t\tel.innerHTML = \"\";\r\n\t\t\t\tconsole.warn(\"Format Error - Title formatter has returned a type of object, the only valid formatter object return is an instance of Node, the formatter returned:\", contents);\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\t\t\tcase \"undefined\":\r\n\t\t\tcase \"null\":\r\n\t\t\tel.innerHTML = \"\";\r\n\t\t\tbreak;\r\n\t\t\tdefault:\r\n\t\t\tel.innerHTML = contents;\r\n\t\t}\r\n\t}\r\n\r\n\t//build header element for column group\r\n\t_buildGroupHeader(){\r\n\t\tthis.element.classList.add(\"tabulator-col-group\");\r\n\t\tthis.element.setAttribute(\"role\", \"columngroup\");\r\n\t\tthis.element.setAttribute(\"aria-title\", this.definition.title);\r\n\r\n\t\t//asign additional css classes to column header\r\n\t\tif(this.definition.cssClass){\r\n\t\t\tvar classeNames = this.definition.cssClass.split(\" \");\r\n\t\t\tclasseNames.forEach((className) => {\r\n\t\t\t\tthis.element.classList.add(className);\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tthis.titleElement.style.textAlign = this.definition.headerHozAlign;\r\n\r\n\t\tthis.element.appendChild(this.groupElement);\r\n\t}\r\n\r\n\t//flat field lookup\r\n\t_getFlatData(data){\r\n\t\treturn data[this.field];\r\n\t}\r\n\r\n\t//nested field lookup\r\n\t_getNestedData(data){\r\n\t\tvar dataObj = data,\r\n\t\tstructure = this.fieldStructure,\r\n\t\tlength = structure.length,\r\n\t\toutput;\r\n\r\n\t\tfor(let i = 0; i < length; i++){\r\n\r\n\t\t\tdataObj = dataObj[structure[i]];\r\n\r\n\t\t\toutput = dataObj;\r\n\r\n\t\t\tif(!dataObj){\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\t//flat field set\r\n\t_setFlatData(data, value){\r\n\t\tif(this.field){\r\n\t\t\tdata[this.field] = value;\r\n\t\t}\r\n\t}\r\n\r\n\t//nested field set\r\n\t_setNestedData(data, value){\r\n\t\tvar dataObj = data,\r\n\t\tstructure = this.fieldStructure,\r\n\t\tlength = structure.length;\r\n\r\n\t\tfor(let i = 0; i < length; i++){\r\n\r\n\t\t\tif(i == length -1){\r\n\t\t\t\tdataObj[structure[i]] = value;\r\n\t\t\t}else{\r\n\t\t\t\tif(!dataObj[structure[i]]){\r\n\t\t\t\t\tif(typeof value !== \"undefined\"){\r\n\t\t\t\t\t\tdataObj[structure[i]] = {};\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tdataObj = dataObj[structure[i]];\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//attach column to this group\r\n\tattachColumn(column){\r\n\t\tif(this.groupElement){\r\n\t\t\tthis.columns.push(column);\r\n\t\t\tthis.groupElement.appendChild(column.getElement());\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Column Warning - Column being attached to another column instead of column group\");\r\n\t\t}\r\n\t}\r\n\r\n\t//vertically align header in column\r\n\tverticalAlign(alignment, height){\r\n\r\n\t\t//calculate height of column header and group holder element\r\n\t\tvar parentHeight = this.parent.isGroup ? this.parent.getGroupElement().clientHeight : (height || this.parent.getHeadersElement().clientHeight);\r\n\t\t// var parentHeight = this.parent.isGroup ? this.parent.getGroupElement().clientHeight : this.parent.getHeadersElement().clientHeight;\r\n\r\n\t\tthis.element.style.height = parentHeight + \"px\";\r\n\r\n\t\tif(this.isGroup){\r\n\t\t\tthis.groupElement.style.minHeight = (parentHeight - this.contentElement.offsetHeight) + \"px\";\r\n\t\t}\r\n\r\n\t\t//vertically align cell contents\r\n\t\tif(!this.isGroup && alignment !== \"top\"){\r\n\t\t\tif(alignment === \"bottom\"){\r\n\t\t\t\tthis.element.style.paddingTop = (this.element.clientHeight - this.contentElement.offsetHeight) + \"px\";\r\n\t\t\t}else{\r\n\t\t\t\tthis.element.style.paddingTop = ((this.element.clientHeight - this.contentElement.offsetHeight) / 2) + \"px\";\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.columns.forEach(function(column){\r\n\t\t\tcolumn.verticalAlign(alignment);\r\n\t\t});\r\n\t}\r\n\r\n\t//clear vertical alignmenet\r\n\tclearVerticalAlign(){\r\n\t\tthis.element.style.paddingTop = \"\";\r\n\t\tthis.element.style.height = \"\";\r\n\t\tthis.element.style.minHeight = \"\";\r\n\t\tthis.groupElement.style.minHeight = \"\";\r\n\r\n\t\tthis.columns.forEach(function(column){\r\n\t\t\tcolumn.clearVerticalAlign();\r\n\t\t});\r\n\t}\r\n\r\n\tbindModuleColumns (){\r\n\t\t//check if rownum formatter is being used on a column\r\n\t\tif(this.definition.formatter == \"rownum\"){\r\n\t\t\tthis.table.rowManager.rowNumColumn = this;\r\n\t\t}\r\n\t}\r\n\r\n\t//// Retreive Column Information ////\r\n\t//return column header element\r\n\tgetElement(){\r\n\t\treturn this.element;\r\n\t}\r\n\r\n\t//return colunm group element\r\n\tgetGroupElement(){\r\n\t\treturn this.groupElement;\r\n\t}\r\n\r\n\t//return field name\r\n\tgetField(){\r\n\t\treturn this.field;\r\n\t}\r\n\r\n\t//return the first column in a group\r\n\tgetFirstColumn(){\r\n\t\tif(!this.isGroup){\r\n\t\t\treturn this;\r\n\t\t}else{\r\n\t\t\tif(this.columns.length){\r\n\t\t\t\treturn this.columns[0].getFirstColumn();\r\n\t\t\t}else{\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//return the last column in a group\r\n\tgetLastColumn(){\r\n\t\tif(!this.isGroup){\r\n\t\t\treturn this;\r\n\t\t}else{\r\n\t\t\tif(this.columns.length){\r\n\t\t\t\treturn this.columns[this.columns.length -1].getLastColumn();\r\n\t\t\t}else{\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//return all columns in a group\r\n\tgetColumns(){\r\n\t\treturn this.columns;\r\n\t}\r\n\r\n\t//return all columns in a group\r\n\tgetCells(){\r\n\t\treturn this.cells;\r\n\t}\r\n\r\n\t//retreive the top column in a group of columns\r\n\tgetTopColumn(){\r\n\t\tif(this.parent.isGroup){\r\n\t\t\treturn this.parent.getTopColumn();\r\n\t\t}else{\r\n\t\t\treturn this;\r\n\t\t}\r\n\t}\r\n\r\n\t//return column definition object\r\n\tgetDefinition(updateBranches){\r\n\t\tvar colDefs = [];\r\n\r\n\t\tif(this.isGroup && updateBranches){\r\n\t\t\tthis.columns.forEach(function(column){\r\n\t\t\t\tcolDefs.push(column.getDefinition(true));\r\n\t\t\t});\r\n\r\n\t\t\tthis.definition.columns = colDefs;\r\n\t\t}\r\n\r\n\t\treturn this.definition;\r\n\t}\r\n\r\n\t//////////////////// Actions ////////////////////\r\n\tcheckColumnVisibility(){\r\n\t\tvar visible = false;\r\n\r\n\t\tthis.columns.forEach(function(column){\r\n\t\t\tif(column.visible){\r\n\t\t\t\tvisible = true;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tif(visible){\r\n\t\t\tthis.show();\r\n\t\t\tthis.dispatchExternal(\"columnVisibilityChanged\", this.getComponent(), false);\r\n\t\t}else{\r\n\t\t\tthis.hide();\r\n\t\t}\r\n\t}\r\n\r\n\t//show column\r\n\tshow(silent, responsiveToggle){\r\n\t\tif(!this.visible){\r\n\t\t\tthis.visible = true;\r\n\r\n\t\t\tthis.element.style.display = \"\";\r\n\r\n\t\t\tif(this.parent.isGroup){\r\n\t\t\t\tthis.parent.checkColumnVisibility();\r\n\t\t\t}\r\n\r\n\t\t\tthis.cells.forEach(function(cell){\r\n\t\t\t\tcell.show();\r\n\t\t\t});\r\n\r\n\t\t\tif(!this.isGroup && this.width === null){\r\n\t\t\t\tthis.reinitializeWidth();\r\n\t\t\t}\r\n\r\n\t\t\tthis.table.columnManager._verticalAlignHeaders();\r\n\r\n\t\t\tthis.dispatch(\"column-show\", this, responsiveToggle);\r\n\r\n\t\t\tif(!silent){\r\n\t\t\t\tthis.dispatchExternal(\"columnVisibilityChanged\", this.getComponent(), true);\r\n\t\t\t}\r\n\r\n\t\t\tif(this.parent.isGroup){\r\n\t\t\t\tthis.parent.matchChildWidths();\r\n\t\t\t}\r\n\r\n\t\t\tif(!this.silent){\r\n\t\t\t\tthis.table.columnManager.renderer.rerenderColumns();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//hide column\r\n\thide(silent, responsiveToggle){\r\n\t\tif(this.visible){\r\n\t\t\tthis.visible = false;\r\n\r\n\t\t\tthis.element.style.display = \"none\";\r\n\r\n\t\t\tthis.table.columnManager._verticalAlignHeaders();\r\n\r\n\t\t\tif(this.parent.isGroup){\r\n\t\t\t\tthis.parent.checkColumnVisibility();\r\n\t\t\t}\r\n\r\n\t\t\tthis.cells.forEach(function(cell){\r\n\t\t\t\tcell.hide();\r\n\t\t\t});\r\n\r\n\t\t\tthis.dispatch(\"column-hide\", this);\r\n\r\n\t\t\tif(!silent){\r\n\t\t\t\tthis.dispatchExternal(\"columnVisibilityChanged\", this.getComponent(), false);\r\n\t\t\t}\r\n\r\n\t\t\tif(this.parent.isGroup){\r\n\t\t\t\tthis.parent.matchChildWidths();\r\n\t\t\t}\r\n\r\n\t\t\tif(!this.silent){\r\n\t\t\t\tthis.table.columnManager.renderer.rerenderColumns();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tmatchChildWidths(){\r\n\t\tvar childWidth = 0;\r\n\r\n\t\tif(this.contentElement && this.columns.length){\r\n\t\t\tthis.columns.forEach(function(column){\r\n\t\t\t\tif(column.visible){\r\n\t\t\t\t\tchildWidth += column.getWidth();\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tthis.contentElement.style.maxWidth = (childWidth - 1) + \"px\";\r\n\r\n\t\t\tif(this.parent.isGroup){\r\n\t\t\t\tthis.parent.matchChildWidths();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tremoveChild(child){\r\n\t\tvar index = this.columns.indexOf(child);\r\n\r\n\t\tif(index > -1){\r\n\t\t\tthis.columns.splice(index, 1);\r\n\t\t}\r\n\r\n\t\tif(!this.columns.length){\r\n\t\t\tthis.delete();\r\n\t\t}\r\n\t}\r\n\r\n\tsetWidth(width){\r\n\t\tthis.widthFixed = true;\r\n\t\tthis.setWidthActual(width);\r\n\t}\r\n\r\n\tsetWidthActual(width){\r\n\t\tif(isNaN(width)){\r\n\t\t\twidth = Math.floor((this.table.element.clientWidth/100) * parseInt(width));\r\n\t\t}\r\n\r\n\t\twidth = Math.max(this.minWidth, width);\r\n\r\n\t\tif(this.maxWidth){\r\n\t\t\twidth = Math.min(this.maxWidth, width);\r\n\t\t}\r\n\r\n\t\tthis.width = width;\r\n\t\tthis.widthStyled = width ? width + \"px\" : \"\";\r\n\r\n\t\tthis.element.style.width = this.widthStyled;\r\n\r\n\t\tif(!this.isGroup){\r\n\t\t\tthis.cells.forEach(function(cell){\r\n\t\t\t\tcell.setWidth();\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif(this.parent.isGroup){\r\n\t\t\tthis.parent.matchChildWidths();\r\n\t\t}\r\n\r\n\t\tthis.dispatch(\"column-width\", this);\r\n\t}\r\n\r\n\tcheckCellHeights(){\r\n\t\tvar rows = [];\r\n\r\n\t\tthis.cells.forEach(function(cell){\r\n\t\t\tif(cell.row.heightInitialized){\r\n\t\t\t\tif(cell.row.getElement().offsetParent !== null){\r\n\t\t\t\t\trows.push(cell.row);\r\n\t\t\t\t\tcell.row.clearCellHeight();\r\n\t\t\t\t}else{\r\n\t\t\t\t\tcell.row.heightInitialized = false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\trows.forEach(function(row){\r\n\t\t\trow.calcHeight();\r\n\t\t});\r\n\r\n\t\trows.forEach(function(row){\r\n\t\t\trow.setCellHeight();\r\n\t\t});\r\n\t}\r\n\r\n\tgetWidth(){\r\n\t\tvar width = 0;\r\n\r\n\t\tif(this.isGroup){\r\n\t\t\tthis.columns.forEach(function(column){\r\n\t\t\t\tif(column.visible){\r\n\t\t\t\t\twidth += column.getWidth();\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\twidth = this.width;\r\n\t\t}\r\n\r\n\t\treturn width;\r\n\t}\r\n\r\n\tgetHeight(){\r\n\t\treturn this.element.offsetHeight;\r\n\t}\r\n\r\n\tsetMinWidth(minWidth){\r\n\t\tthis.minWidth = minWidth;\r\n\t\tthis.minWidthStyled = minWidth ? minWidth + \"px\" : \"\";\r\n\r\n\t\tthis.element.style.minWidth = this.minWidthStyled;\r\n\r\n\t\tthis.cells.forEach(function(cell){\r\n\t\t\tcell.setMinWidth();\r\n\t\t});\r\n\t}\r\n\r\n\tsetMaxWidth(maxWidth){\r\n\t\tthis.maxWidth = maxWidth;\r\n\t\tthis.maxWidthStyled = maxWidth ? maxWidth + \"px\" : \"\";\r\n\r\n\t\tthis.element.style.maxWidth = this.maxWidthStyled;\r\n\r\n\t\tthis.cells.forEach(function(cell){\r\n\t\t\tcell.setMaxWidth();\r\n\t\t});\r\n\t}\r\n\r\n\tdelete(){\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tvar index;\r\n\r\n\t\t\tif(this.isGroup){\r\n\t\t\t\tthis.columns.forEach(function(column){\r\n\t\t\t\t\tcolumn.delete();\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\tthis.dispatch(\"column-delete\", this);\r\n\r\n\t\t\tvar cellCount = this.cells.length;\r\n\r\n\t\t\tfor(let i = 0; i < cellCount; i++){\r\n\t\t\t\tthis.cells[0].delete();\r\n\t\t\t}\r\n\r\n\t\t\tif(this.element.parentNode){\r\n\t\t\t\tthis.element.parentNode.removeChild(this.element);\r\n\t\t\t}\r\n\r\n\t\t\tthis.element = false;\r\n\t\t\tthis.contentElement = false;\r\n\t\t\tthis.titleElement = false;\r\n\t\t\tthis.groupElement = false;\r\n\r\n\t\t\tif(this.parent.isGroup){\r\n\t\t\t\tthis.parent.removeChild(this);\r\n\t\t\t}\r\n\r\n\t\t\tthis.table.columnManager.deregisterColumn(this);\r\n\r\n\t\t\tthis.table.columnManager.renderer.rerenderColumns(true);\r\n\r\n\t\t\tresolve();\r\n\t\t});\r\n\t}\r\n\r\n\tcolumnRendered(){\r\n\t\tif(this.titleFormatterRendered){\r\n\t\t\tthis.titleFormatterRendered();\r\n\t\t}\r\n\t}\r\n\r\n\t//////////////// Cell Management /////////////////\r\n\t//generate cell for this column\r\n\tgenerateCell(row){\r\n\t\tvar cell = new Cell(this, row);\r\n\r\n\t\tthis.cells.push(cell);\r\n\r\n\t\treturn cell;\r\n\t}\r\n\r\n\tnextColumn(){\r\n\t\tvar index = this.table.columnManager.findColumnIndex(this);\r\n\t\treturn index > -1 ? this._nextVisibleColumn(index + 1) : false;\r\n\t}\r\n\r\n\t_nextVisibleColumn(index){\r\n\t\tvar column = this.table.columnManager.getColumnByIndex(index);\r\n\t\treturn !column || column.visible ? column : this._nextVisibleColumn(index + 1);\r\n\t}\r\n\r\n\tprevColumn(){\r\n\t\tvar index = this.table.columnManager.findColumnIndex(this);\r\n\t\treturn index > -1 ? this._prevVisibleColumn(index - 1) : false;\r\n\t}\r\n\r\n\t_prevVisibleColumn(index){\r\n\t\tvar column = this.table.columnManager.getColumnByIndex(index);\r\n\t\treturn !column || column.visible ? column : this._prevVisibleColumn(index - 1);\r\n\t}\r\n\r\n\treinitializeWidth(force){\r\n\t\tthis.widthFixed = false;\r\n\r\n\t\t//set width if present\r\n\t\tif(typeof this.definition.width !== \"undefined\" && !force){\r\n\t\t\tthis.setWidth(this.definition.width);\r\n\t\t}\r\n\r\n\t\tthis.dispatch(\"column-width-fit-before\", this);\r\n\r\n\t\tthis.fitToData();\r\n\r\n\t\tthis.dispatch(\"column-width-fit-after\", this);\r\n\t}\r\n\r\n\t//set column width to maximum cell width\r\n\tfitToData(){\r\n\t\tif(!this.widthFixed){\r\n\t\t\tthis.element.style.width = \"\";\r\n\r\n\t\t\tthis.cells.forEach((cell) => {\r\n\t\t\t\tcell.clearWidth();\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tvar maxWidth = this.element.offsetWidth;\r\n\r\n\t\tif(!this.width || !this.widthFixed){\r\n\t\t\tthis.cells.forEach((cell) => {\r\n\t\t\t\tvar width = cell.getWidth();\r\n\r\n\t\t\t\tif(width > maxWidth){\r\n\t\t\t\t\tmaxWidth = width;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tif(maxWidth){\r\n\t\t\t\tthis.setWidthActual(maxWidth + 1);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tupdateDefinition(updates){\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tvar definition;\r\n\r\n\t\t\tif(!this.isGroup){\r\n\t\t\t\tif(!this.parent.isGroup){\r\n\t\t\t\t\tdefinition = Object.assign({}, this.getDefinition());\r\n\t\t\t\t\tdefinition = Object.assign(definition, updates);\r\n\r\n\t\t\t\t\tthis.table.columnManager.addColumn(definition, false, this)\r\n\t\t\t\t\t.then((column) => {\r\n\r\n\t\t\t\t\t\tif(definition.field == this.field){\r\n\t\t\t\t\t\t\tthis.field = false; //cleair field name to prevent deletion of duplicate column from arrays\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tthis.delete()\r\n\t\t\t\t\t\t.then(() => {\r\n\t\t\t\t\t\t\tresolve(column.getComponent());\r\n\t\t\t\t\t\t}).catch((err) => {\r\n\t\t\t\t\t\t\treject(err);\r\n\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t}).catch((err) => {\r\n\t\t\t\t\t\treject(err);\r\n\t\t\t\t\t});\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.warn(\"Column Update Error - The updateDefinition function is only available on ungrouped columns\");\r\n\t\t\t\t\treject(\"Column Update Error - The updateDefinition function is only available on columns, not column groups\");\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Column Update Error - The updateDefinition function is only available on ungrouped columns\");\r\n\t\t\t\treject(\"Column Update Error - The updateDefinition function is only available on columns, not column groups\");\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tdeleteCell(cell){\r\n\t\tvar index = this.cells.indexOf(cell);\r\n\r\n\t\tif(index > -1){\r\n\t\t\tthis.cells.splice(index, 1);\r\n\t\t}\r\n\t}\r\n\r\n\t//////////////// Object Generation /////////////////\r\n\tgetComponent(){\r\n\t\tif(!this.component){\r\n\t\t\tthis.component = new ColumnComponent(this);\r\n\t\t}\r\n\r\n\t\treturn this.component;\r\n\t}\r\n}\r\n\r\nColumn.defaultOptionList = defaultOptions;\r\n\r\nexport default Column;","export default class Helpers{\r\n\r\n\tstatic elVisible(el){\r\n\t\treturn !(el.offsetWidth <= 0 && el.offsetHeight <= 0);\r\n\t}\r\n\r\n\tstatic elOffset(el){\r\n\t\tvar box = el.getBoundingClientRect();\r\n\r\n\t\treturn {\r\n\t\t\ttop: box.top + window.pageYOffset - document.documentElement.clientTop,\r\n\t\t\tleft: box.left + window.pageXOffset - document.documentElement.clientLeft\r\n\t\t};\r\n\t}\r\n\r\n\tstatic deepClone(obj){\r\n\t\tvar clone = Object.assign(Array.isArray(obj) ? [] : {}, obj);\r\n\r\n\t\tfor(var i in obj) {\r\n\t\t\tif(obj[i] != null && typeof(obj[i]) === \"object\"){\r\n\t\t\t\tif (obj[i] instanceof Date) {\r\n\t\t\t\t\tclone[i] = new Date(obj[i]);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tclone[i] = this.deepClone(obj[i]);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn clone;\r\n\t}\r\n}","export default class OptionsList {\r\n\tconstructor(table, msgType){\r\n\t\tthis.table = table;\r\n\t\tthis.msgType = msgType;\r\n\t\tthis.registeredDefaults = {};\r\n\t}\r\n\r\n\tregister(option, value){\r\n\t\tthis.registeredDefaults[option] = value;\r\n\t}\r\n\r\n\tgenerate(defaultOptions, userOptions = {}){\r\n\t\tvar output = Object.assign({}, this.registeredDefaults);\r\n\r\n\t\tObject.assign(output, defaultOptions);\r\n\r\n\t\tif(userOptions.debugInvalidOptions !== false || this.table.options.debugInvalidOptions){\r\n\t\t\tfor (var key in userOptions){\r\n\t\t\t\tif(!output.hasOwnProperty(key)){\r\n\t\t\t\t\tconsole.warn(\"Invalid \" + this.msgType + \" option:\", key)\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfor (var key in output){\r\n\t\t\tif(key in userOptions){\r\n\t\t\t\toutput[key] = userOptions[key];\r\n\t\t\t}else{\r\n\t\t\t\tif(Array.isArray(output[key])){\r\n\t\t\t\t\toutput[key] = Object.assign([], output[key]);\r\n\t\t\t\t}else if(typeof output[key] === \"object\" && output[key] !== null){\r\n\t\t\t\t\toutput[key] = Object.assign({}, output[key]);\r\n\t\t\t\t}else if (typeof output[key] === \"undefined\"){\r\n\t\t\t\t\tdelete output[key];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn output;\r\n\t}\r\n}","import CoreFeature from '../CoreFeature.js';\r\nimport Helpers from '../tools/Helpers.js';\r\n\r\nexport default class Renderer extends CoreFeature{\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.elementVertical = table.rowManager.element;\r\n\t\tthis.elementHorizontal = table.columnManager.element;\r\n\t\tthis.tableElement = table.rowManager.tableElement;\r\n\r\n\t\tthis.verticalFillMode = \"fit\"; // used by row manager to determin how to size the render area (\"fit\" - fits container to the contents, \"fill\" - fills the contianer without resizing it)\r\n\t}\r\n\r\n\r\n\t///////////////////////////////////\r\n\t/////// Internal Bindings /////////\r\n\t///////////////////////////////////\r\n\r\n\tinitialize(){\r\n\t\t//initialize core functionality\r\n\t}\r\n\r\n\tclearRows(){\r\n\t\t//clear down existing rows layout\r\n\t}\r\n\r\n\tclearColumns(){\r\n\t\t//clear down existing columns layout\r\n\t}\r\n\r\n\r\n\treinitializeColumnWidths(columns){\r\n\t\t//resize columns to fit data\r\n\t}\r\n\r\n\r\n\trenderRows(){\r\n\t\t//render rows from a clean slate\r\n\t}\r\n\r\n\trenderColumns(){\r\n\t\t//render columns from a clean slate\r\n\t}\r\n\r\n\trerenderRows(callback){\r\n\t\t// rerender rows and keep position\r\n\t\tif(callback){\r\n\t\t\tcallback();\r\n\t\t}\r\n\t}\r\n\r\n\trerenderColumns(update, blockRedraw){\r\n\t\t//rerender columns\r\n\t}\r\n\r\n\trenderRowCells(row){\r\n\t\t//render the cells in a row\r\n\t}\r\n\r\n\trerenderRowCells(row, force){\r\n\t\t//rerender the cells in a row\r\n\t}\r\n\r\n\tscrollColumns(left, dir){\r\n\t\t//handle horizontal scrolling\r\n\t}\r\n\r\n\tscrollRows(top, dir){\r\n\t\t//handle vertical scolling\r\n\t}\r\n\r\n\tresize(){\r\n\t\t//container has rezied, carry out any needed recalculations (DO NOT RERENDER IN THIS FUNCTION)\r\n\t}\r\n\r\n\tscrollToRow(row){\r\n\t\t//scroll to a specific row\r\n\t}\r\n\r\n\tscrollToRowNearestTop(row){\r\n\t\t//determin weather the row is nearest the top or bottom of the table, retur true for top or false for bottom\r\n\t}\r\n\r\n\tvisibleRows(includingBuffer){\r\n\t\t//return the visible rows\r\n\t\treturn [];\r\n\t}\r\n\r\n\t///////////////////////////////////\r\n\t//////// Helper Functions /////////\r\n\t///////////////////////////////////\r\n\r\n\trows(){\r\n\t\treturn this.table.rowManager.getDisplayRows();\r\n\t}\r\n\r\n\tstyleRow(row, index){\r\n\t\tvar rowEl = row.getElement();\r\n\r\n\t\tif(index % 2){\r\n\t\t\trowEl.classList.add(\"tabulator-row-even\");\r\n\t\t\trowEl.classList.remove(\"tabulator-row-odd\");\r\n\t\t}else{\r\n\t\t\trowEl.classList.add(\"tabulator-row-odd\");\r\n\t\t\trowEl.classList.remove(\"tabulator-row-even\");\r\n\t\t}\r\n\t}\r\n\r\n\t///////////////////////////////////\r\n\t/////// External Triggers /////////\r\n\t/////// (DO NOT OVERRIDE) /////////\r\n\t///////////////////////////////////\r\n\r\n\tclear(){\r\n\t\t//clear down existing layout\r\n\t\tthis.clearRows();\r\n\t\tthis.clearColumns();\r\n\t}\r\n\r\n\trender(){\r\n\t\t//render from a clean slate\r\n\t\tthis.renderRows();\r\n\t\tthis.renderColumns();\r\n\t}\r\n\r\n\trerender(callback){\r\n\t\t// rerender and keep position\r\n\t\tthis.rerenderRows();\r\n\t\tthis.rerenderColumns();\r\n\t}\r\n\r\n\tscrollToRowPosition(row, position, ifVisible){\r\n\t\tvar rowIndex = this.rows().indexOf(row),\r\n\t\trowEl = row.getElement(),\r\n\t\toffset = 0;\r\n\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tif(rowIndex > -1){\r\n\r\n\t\t\t\tif(typeof ifVisible === \"undefined\"){\r\n\t\t\t\t\tifVisible = this.table.options.scrollToRowIfVisible;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//check row visibility\r\n\t\t\t\tif(!ifVisible){\r\n\t\t\t\t\tif(Helpers.elVisible(rowEl)){\r\n\t\t\t\t\t\toffset = Helpers.elOffset(rowEl).top - Helpers.elOffset(this.elementVertical).top;\r\n\r\n\t\t\t\t\t\tif(offset > 0 && offset < this.elementVertical.clientHeight - rowEl.offsetHeight){\r\n\t\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(typeof position === \"undefined\"){\r\n\t\t\t\t\tposition = this.table.options.scrollToRowPosition;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(position === \"nearest\"){\r\n\t\t\t\t\tposition = this.scrollToRowNearestTop(row) ? \"top\" : \"bottom\"\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//scroll to row\r\n\t\t\t\tthis.scrollToRow(row);\r\n\r\n\t\t\t\t//align to correct position\r\n\t\t\t\tswitch(position){\r\n\t\t\t\t\tcase \"middle\":\r\n\t\t\t\t\tcase \"center\":\r\n\r\n\t\t\t\t\tif(this.elementVertical.scrollHeight - this.elementVertical.scrollTop == this.elementVertical.clientHeight){\r\n\t\t\t\t\t\tthis.elementVertical.scrollTop = this.elementVertical.scrollTop + (rowEl.offsetTop - this.elementVertical.scrollTop) - ((this.elementVertical.scrollHeight - rowEl.offsetTop) / 2);\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tthis.elementVertical.scrollTop = this.elementVertical.scrollTop - (this.elementVertical.clientHeight / 2);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase \"bottom\":\r\n\r\n\t\t\t\t\tif(this.elementVertical.scrollHeight - this.elementVertical.scrollTop == this.elementVertical.clientHeight){\r\n\t\t\t\t\t\tthis.elementVertical.scrollTop = this.elementVertical.scrollTop - (this.elementVertical.scrollHeight - rowEl.offsetTop) + rowEl.offsetHeight;\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tthis.elementVertical.scrollTop = this.elementVertical.scrollTop - this.elementVertical.clientHeight + rowEl.offsetHeight;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tresolve();\r\n\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Scroll Error - Row not visible\");\r\n\t\t\t\treject(\"Scroll Error - Row not visible\");\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n}","import Renderer from '../Renderer.js';\r\nimport Helpers from '../../tools/Helpers.js';\r\n\r\nexport default class BaiscHorizontal extends Renderer{\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\t}\r\n\r\n\trenderRowCells(row){\r\n\t\trow.cells.forEach((cell) => {\r\n\t\t\trow.element.appendChild(cell.getElement());\r\n\t\t\tcell.cellRendered();\r\n\t\t});\r\n\t}\r\n\r\n\treinitializeColumnWidths(columns){\r\n\t\tcolumns.forEach(function(column){\r\n\t\t\tcolumn.reinitializeWidth();\r\n\t\t});\r\n\t}\r\n}","import Renderer from '../Renderer.js';\r\nimport Helpers from '../../tools/Helpers.js';\r\n\r\nexport default class VirtualDomHorizontal extends Renderer{\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.leftCol = 0;\r\n\t\tthis.rightCol = 0;\r\n\t\tthis.scrollLeft = 0;\r\n\r\n\t\tthis.vDomScrollPosLeft = 0;\r\n\t\tthis.vDomScrollPosRight = 0;\r\n\r\n\t\tthis.vDomPadLeft = 0;\r\n\t\tthis.vDomPadRight = 0;\r\n\r\n\t\tthis.fitDataColAvg = 0;\r\n\r\n\t\tthis.window = 200; //pixel margin to make column visible before it is shown on screen\r\n\r\n\t\tthis.initialized = false;\r\n\r\n\t\tthis.columns = [];\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tthis.compatabilityCheck();\r\n\t}\r\n\r\n\tcompatabilityCheck(){\r\n\t\tvar columns = this.options(\"columns\"),\r\n\t\tfrozen = false,\r\n\t\tok = true;\r\n\r\n\t\tif(this.options(\"layout\") == \"fitDataTable\"){\r\n\t\t\tconsole.warn(\"Horizontal Vitrual DOM is not compatible with fitDataTable layout mode\");\r\n\t\t\tok = false;\r\n\t\t}\r\n\r\n\t\tif(this.options(\"responsiveLayout\")){\r\n\t\t\tconsole.warn(\"Horizontal Vitrual DOM is not compatible with responsive columns\");\r\n\t\t\tok = false;\r\n\t\t}\r\n\r\n\t\tif(this.options(\"rtl\")){\r\n\t\t\tconsole.warn(\"Horizontal Vitrual DOM is not currently compatible with RTL text direction\");\r\n\t\t\tok = false;\r\n\t\t}\r\n\r\n\t\tif(columns){\r\n\t\t\tfrozen = columns.find((col) => {\r\n\t\t\t\treturn col.frozen;\r\n\t\t\t});\r\n\r\n\t\t\tif(frozen){\r\n\t\t\t\tconsole.warn(\"Horizontal Vitrual DOM is not compatible with frozen columns\");\r\n\t\t\t\tok = false;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(!ok){\r\n\t\t\toptions.virtualDomHoz = false;\r\n\t\t}\r\n\r\n\t\treturn ok;\r\n\t}\r\n\r\n\t//////////////////////////////////////\r\n\t///////// Public Functions ///////////\r\n\t//////////////////////////////////////\r\n\r\n\trenderColumns(row, force){\r\n\t\tthis.dataChange();\r\n\t}\r\n\r\n\tscrollColumns(left, dir){\r\n\t\tif(this.scrollLeft != left){\r\n\t\t\tthis.scrollLeft = left;\r\n\r\n\t\t\tthis.scroll(left - (this.vDomScrollPosLeft + this.window));\r\n\t\t}\r\n\t}\r\n\r\n\trerenderColumns(update, blockRedraw){\r\n\t\tvar old = {\r\n\t\t\tcols:this.columns,\r\n\t\t\tleftCol:this.leftCol,\r\n\t\t\trightCol:this.rightCol,\r\n\t\t};\r\n\r\n\t\tif(update && !this.initialized){\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.clear();\r\n\r\n\t\tthis.scrollLeft = this.elementVertical.scrollLeft;\r\n\r\n\t\tthis.vDomScrollPosLeft = this.scrollLeft - this.window;\r\n\t\tthis.vDomScrollPosRight = this.scrollLeft + this.elementVertical.clientWidth + this.window;\r\n\r\n\t\tvar colPos = 0;\r\n\r\n\t\tthis.table.columnManager.columnsByIndex.forEach((column) => {\r\n\t\t\tvar config = {};\r\n\r\n\t\t\tif(column.visible){\r\n\t\t\t\tvar width = column.getWidth();\r\n\r\n\t\t\t\tconfig.leftPos = colPos;\r\n\t\t\t\tconfig.rightPos = colPos + width;\r\n\r\n\t\t\t\tconfig.width = width;\r\n\r\n\t\t\t\tif (this.options(\"layout\") === \"fitData\") {\r\n\t\t\t\t config.fitDataCheck = true;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif((colPos + width > this.vDomScrollPosLeft) && (colPos < this.vDomScrollPosRight)){\r\n\t \t\t//column is visible\r\n\r\n\t \t\tif(this.leftCol == -1){\r\n\t \t\t\tthis.leftCol = this.columns.length;\r\n\t \t\t\tthis.vDomPadLeft = colPos;\r\n\t \t\t}\r\n\r\n\t \t\tthis.rightCol = this.columns.length;\r\n\t \t}else{\r\n\t \t\t// column is hidden\r\n\t \t\tif(this.leftCol !== -1){\r\n\t \t\t\tthis.vDomPadRight += width;\r\n\t \t\t}\r\n\t \t}\r\n\r\n\t \tthis.columns.push(column);\r\n\r\n\t \tcolumn.modules.vdomHoz = config;\r\n\r\n\t \tcolPos += width;\r\n\t }\r\n\t });\r\n\r\n\t\tthis.tableElement.style.paddingLeft = this.vDomPadLeft + \"px\";\r\n\t\tthis.tableElement.style.paddingRight = this.vDomPadRight + \"px\";\r\n\r\n\t\tthis.initialized = true;\r\n\r\n\t\tif(!blockRedraw){\r\n\t\t\tif(!update || this.reinitChanged(old)){\r\n\t\t\t\tthis.renitializeRows();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.elementVertical.scrollLeft = this.scrollLeft;\r\n\t}\r\n\r\n\trenderRowCells(row){\r\n\t\tif(this.initialized){\r\n\t\t\tthis.initializeRow(row);\r\n\t\t}else{\r\n\t\t\trow.cells.forEach((cell) => {\r\n\t\t\t\trow.element.appendChild(cell.getElement());\r\n\t\t\t\tcell.cellRendered();\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\trerenderRowCells(row, force){\r\n\t\tthis.reinitializeRow(row, force);\r\n\t}\r\n\r\n\treinitializeColumnWidths(columns){\r\n\t\tfor(let i = this.leftCol; i <= this.rightCol; i++){\r\n\t\t\tthis.columns[i].reinitializeWidth();\r\n\t\t}\r\n\t}\r\n\r\n\t//////////////////////////////////////\r\n\t//////// Internal Rendering //////////\r\n\t//////////////////////////////////////\r\n\r\n\tdeinitialize(){\r\n\t\tthis.initialized = false;\r\n\t}\r\n\r\n\tclear(){\r\n\t\tthis.columns = [];\r\n\r\n\t\tthis.leftCol = -1;\r\n\t\tthis.rightCol = 0;\r\n\r\n\t\tthis.vDomScrollPosLeft = 0;\r\n\t\tthis.vDomScrollPosRight = 0;\r\n\t\tthis.vDomPadLeft = 0;\r\n\t\tthis.vDomPadRight = 0;\r\n\t}\r\n\r\n\tdataChange(){\r\n\t\tvar change = false,\r\n\t\tcollsWidth = 0,\r\n\t\tcolEnd = 0,\r\n\t\tgroup, row, rowEl;\r\n\r\n\t\tif(this.options(\"layout\") === \"fitData\"){\r\n\t\t\tthis.table.columnManager.columnsByIndex.forEach((column) => {\r\n\t\t\t\tif(!column.definition.width && column.visible){\r\n\t\t\t\t\tchange = true;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tif(change){\r\n\t\t\t\tif(change && this.table.rowManager.getDisplayRows().length){\r\n\r\n\t\t\t\t\tthis.vDomScrollPosRight = this.scrollLeft + this.elementVertical.clientWidth + this.window;\r\n\r\n\t\t\t\t\tvar row = this.chain(\"rows-sample\", [1], [], () => {\r\n\t\t\t\t\t\treturn this.table.rowManager.getDisplayRows()[0];\r\n\t\t\t\t\t})[0];\r\n\r\n\t\t\t\t\tif(row){\r\n\r\n\t\t\t\t\t\trowEl = row.getElement();\r\n\r\n\t\t\t\t\t\trow.generateCells();\r\n\r\n\t\t\t\t\t\tthis.tableElement.appendChild(rowEl);\r\n\r\n\t\t\t\t\t\tfor(var colEnd = 0; colEnd < row.cells.length; colEnd++){\r\n\t\t\t\t\t\t\tlet cell = row.cells[colEnd];\r\n\t\t\t\t\t\t\trowEl.appendChild(cell.getElement());\r\n\r\n\t\t\t\t\t\t\tcell.column.reinitializeWidth();\r\n\r\n\t\t\t\t\t\t\tcollsWidth += cell.column.getWidth();\r\n\r\n\t\t\t\t\t\t\tif(collsWidth > this.vDomScrollPosRight){\r\n\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\trowEl.parentNode.removeChild(rowEl);\r\n\r\n\t\t\t\t\t\tthis.fitDataColAvg = Math.floor(collsWidth / (colEnd + 1));\r\n\r\n\t\t\t\t\t\tfor(colEnd; colEnd < this.table.columnManager.columnsByIndex.length; colEnd++){\r\n\t\t\t\t\t\t\tthis.table.columnManager.columnsByIndex[colEnd].setWidth(this.fitDataColAvg);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tthis.rerenderColumns(false, true);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tif(this.options(\"layout\") === \"fitColumns\"){\r\n\t\t\t\tthis.layoutRefresh();\r\n\t\t\t\tthis.rerenderColumns(false, true);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\treinitChanged(old){\r\n\t\tvar match = true;\r\n\r\n\t\tif(old.cols.length !== this.columns.length || old.leftCol !== this.leftCol || old.rightCol !== this.rightCol){\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\told.cols.forEach((col, i) => {\r\n\t\t\tif(col !== this.columns[i]){\r\n\t\t\t\tmatch = false;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn !match;\r\n\t}\r\n\r\n\trenitializeRows(){\r\n\t\tvar rows = this.table.rowManager.getVisibleRows();\r\n\t\trows.forEach((row) => {\r\n\t\t\tthis.reinitializeRow(row, true);\r\n\t\t});\r\n\t}\r\n\r\n\tscroll(diff){\r\n\t\tthis.vDomScrollPosLeft += diff;\r\n\t\tthis.vDomScrollPosRight += diff;\r\n\r\n\t\tif(diff > (this.elementVertical.clientWidth * .8)){\r\n\t\t\tthis.rerenderColumns();\r\n\t\t}else{\r\n\t\t\tif(diff > 0){\r\n\t\t\t\t//scroll right\r\n\t\t\t\tthis.addColRight();\r\n\t\t\t\tthis.removeColLeft();\r\n\t\t\t}else{\r\n\t\t\t\t//scroll left\r\n\t\t\t\tthis.addColLeft();\r\n\t\t\t\tthis.removeColRight();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tcolPositionAdjust (start, end, diff){\r\n\t\tfor(let i = start; i < end; i++){\r\n\t\t\tlet column = this.columns[i];\r\n\r\n\t\t\tcolumn.modules.vdomHoz.leftPos += diff;\r\n\t\t\tcolumn.modules.vdomHoz.rightPos += diff;\r\n\t\t}\r\n\t}\r\n\r\n\taddColRight(){\r\n\t\tvar column = this.columns[this.rightCol + 1],\r\n\t\trows, newWidth, widthDiff;\r\n\r\n\t\tif(column && column.modules.vdomHoz.leftPos <= this.vDomScrollPosRight){\r\n\r\n\t\t\trows = this.table.rowManager.getVisibleRows();\r\n\r\n\t\t\trows.forEach((row) => {\r\n\t\t\t\tif(row.type !== \"group\"){\r\n\t\t\t\t\tvar cell = row.getCell(column);\r\n\t\t\t\t\trow.getElement().appendChild(cell.getElement());\r\n\t\t\t\t\tcell.cellRendered();\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tthis.fitDataColActualWidthCheck(column);\r\n\r\n\t\t\tthis.rightCol++;\r\n\r\n\t\t\tif(this.rightCol >= (this.columns.length - 1)){\r\n\t\t\t\tthis.vDomPadRight = 0;\r\n\t\t\t}else{\r\n\t\t\t\tthis.vDomPadRight -= column.getWidth();\r\n\t\t\t}\r\n\r\n\t\t\tthis.tableElement.style.paddingRight = this.vDomPadRight + \"px\";\r\n\r\n\t\t\tthis.addColRight();\r\n\t\t}\r\n\t}\r\n\r\n\taddColLeft(){\r\n\t\tvar column = this.columns[this.leftCol - 1],\r\n\t\trows;\r\n\r\n\t\tif(column && column.modules.vdomHoz.rightPos >= this.vDomScrollPosLeft){\r\n\t\t\tvar rows = this.table.rowManager.getVisibleRows();\r\n\r\n\t\t\trows.forEach((row) => {\r\n\t\t\t\tif(row.type !== \"group\"){\r\n\t\t\t\t\tvar cell = row.getCell(column);\r\n\t\t\t\t\trow.getElement().prepend(cell.getElement());\r\n\t\t\t\t\tcell.cellRendered();\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tthis.fitDataColActualWidthCheck(column);\r\n\r\n\t\t\tif(!this.leftCol){\r\n\t\t\t\tthis.vDomPadLeft = 0;\r\n\t\t\t}else{\r\n\t\t\t\tthis.vDomPadLeft -= column.getWidth();\r\n\t\t\t}\r\n\r\n\t\t\tthis.tableElement.style.paddingLeft = this.vDomPadLeft + \"px\";\r\n\r\n\t\t\tthis.leftCol--;\r\n\r\n\t\t\tthis.addColLeft();\r\n\t\t}\r\n\t}\r\n\r\n\tremoveColRight(column){\r\n\t\tvar column = this.columns[this.rightCol],\r\n\t\trows;\r\n\r\n\t\tif(column && column.modules.vdomHoz.leftPos > this.vDomScrollPosRight){\r\n\t\t\trows = this.table.rowManager.getVisibleRows();\r\n\r\n\t\t\tcolumn.modules.vdomHoz.visible = false;\r\n\r\n\t\t\trows.forEach((row) => {\r\n\t\t\t\tif(row.type !== \"group\"){\r\n\t\t\t\t\tvar cell = row.getCell(column);\r\n\t\t\t\t\trow.getElement().removeChild(cell.getElement());\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tthis.vDomPadRight += column.getWidth();\r\n\t\t\tthis.tableElement.style.paddingRight = this.vDomPadRight + \"px\";\r\n\r\n\t\t\tthis.rightCol --;\r\n\r\n\t\t\tthis.removeColRight();\r\n\t\t}\r\n\t}\r\n\r\n\tremoveColLeft(){\r\n\t\tvar column = this.columns[this.leftCol],\r\n\t\trows;\r\n\r\n\t\tif(column && column.modules.vdomHoz.rightPos < this.vDomScrollPosLeft){\r\n\r\n\t\t\trows = this.table.rowManager.getVisibleRows();\r\n\r\n\t\t\trows.forEach((row) => {\r\n\t\t\t\tif(row.type !== \"group\"){\r\n\t\t\t\t\tvar cell = row.getCell(column);\r\n\t\t\t\t\trow.getElement().removeChild(cell.getElement());\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tthis.vDomPadLeft += column.getWidth();\r\n\t\t\tthis.tableElement.style.paddingLeft = this.vDomPadLeft + \"px\";\r\n\r\n\t\t\tthis.leftCol ++;\r\n\r\n\t\t\tthis.removeColLeft();\r\n\t\t}\r\n\t}\r\n\r\n\tfitDataColActualWidthCheck(column){\r\n\t var newWidth, widthDiff;\r\n\r\n\t if(column.modules.vdomHoz.fitDataCheck){\r\n\t column.reinitializeWidth();\r\n\r\n\t newWidth = column.getWidth();\r\n\t widthDiff = newWidth - column.modules.vdomHoz.width;\r\n\r\n\t if(widthDiff){\r\n\t column.modules.vdomHoz.rightPos += widthDiff;\r\n\t column.modules.vdomHoz.width = newWidth;\r\n\t this.colPositionAdjust(this.rightCol + 2, this.columns.length, widthDiff);\r\n\t }\r\n\r\n\t column.modules.vdomHoz.fitDataCheck = false;\r\n\t }\r\n\t};\r\n\r\n\tinitializeRow(row){\r\n\t\tif(row.type !== \"group\"){\r\n\t\t\trow.modules.vdomHoz = {\r\n\t\t\t\tleftCol:this.leftCol,\r\n\t\t\t\trightCol:this.rightCol,\r\n\t\t\t};\r\n\r\n\t\t\tfor(let i = this.leftCol; i <= this.rightCol; i++){\r\n\t\t\t\tlet column = this.columns[i];\r\n\r\n\t\t\t\tif(column && column.visible){\r\n\t\t\t\t\tlet cell = row.getCell(column);\r\n\r\n\t\t\t\t\trow.getElement().appendChild(cell.getElement());\r\n\t\t\t\t\tcell.cellRendered();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\treinitializeRow(row, force){\r\n\t\tif(row.type !== \"group\"){\r\n\t\t\tif(force || !row.modules.vdomHoz || row.modules.vdomHoz.leftCol !== this.leftCol || row.modules.vdomHoz.rightCol !== this.rightCol){\r\n\t\t\t\tvar rowEl = row.getElement();\r\n\t\t\t\twhile(rowEl.firstChild) rowEl.removeChild(rowEl.firstChild);\r\n\r\n\t\t\t\tthis.initializeRow(row);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}","import CoreFeature from './CoreFeature.js';\r\nimport Column from './column/Column.js';\r\nimport ColumnComponent from './column/ColumnComponent.js';\r\nimport Helpers from './tools/Helpers.js';\r\nimport OptionsList from './tools/OptionsList.js';\r\n\r\nimport RendererBasicHorizontal from './rendering/renderers/BasicHorizontal.js';\r\nimport RendererVirtualDomHorizontal from './rendering/renderers/VirtualDomHorizontal.js';\r\n\r\nexport default class ColumnManager extends CoreFeature {\r\n\r\n\tconstructor (table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.blockHozScrollEvent = false;\r\n\t\tthis.headersElement = null;\r\n\t\tthis.element = null ; //containing element\r\n\t\tthis.columns = []; // column definition object\r\n\t\tthis.columnsByIndex = []; //columns by index\r\n\t\tthis.columnsByField = {}; //columns by field\r\n\t\tthis.scrollLeft = 0;\r\n\t\tthis.optionsList = new OptionsList(this.table, \"column definition\");\r\n\r\n\t\tthis.renderer = null;\r\n\t}\r\n\r\n\t////////////// Setup Functions /////////////////\r\n\r\n\tinitialize(){\r\n\t\tthis.initializeRenderer();\r\n\r\n\t\tthis.headersElement = this.createHeadersElement();\r\n\t\tthis.element = this.createHeaderElement();\r\n\r\n\t\tthis.element.insertBefore(this.headersElement, this.element.firstChild);\r\n\r\n\t\tthis.subscribe(\"scroll-horizontal\", this.scrollHorizontal.bind(this));\r\n\t}\r\n\r\n\tinitializeRenderer(){\r\n\t\tvar renderClass;\r\n\r\n\t\tvar renderers = {\r\n\t\t\t\"virtual\": RendererVirtualDomHorizontal,\r\n\t\t\t\"basic\": RendererBasicHorizontal,\r\n\t\t};\r\n\r\n\t\tif(typeof this.table.options.renderVertical === \"string\"){\r\n\t\t\trenderClass = renderers[this.table.options.renderVertical];\r\n\t\t}else{\r\n\t\t\trenderClass = this.table.options.renderVertical;\r\n\t\t}\r\n\r\n\t\tif(renderClass){\r\n\t\t\tthis.renderer = new renderClass(this.table, this.element, this.tableElement);\r\n\t\t\tthis.renderer.initialize();\r\n\t\t}else{\r\n\t\t\tconsole.error(\"Unable to find matching renderer:\", table.options.renderVertical);\r\n\t\t}\r\n\t}\r\n\r\n\r\n\tcreateHeadersElement (){\r\n\t\tvar el = document.createElement(\"div\");\r\n\r\n\t\tel.classList.add(\"tabulator-headers\");\r\n\r\n\t\treturn el;\r\n\t}\r\n\r\n\tcreateHeaderElement (){\r\n\t\tvar el = document.createElement(\"div\");\r\n\r\n\t\tel.classList.add(\"tabulator-header\");\r\n\r\n\t\tif(!this.table.options.headerVisible){\r\n\t\t\tel.classList.add(\"tabulator-header-hidden\");\r\n\t\t}\r\n\r\n\t\treturn el;\r\n\t}\r\n\r\n\t//return containing element\r\n\tgetElement(){\r\n\t\treturn this.element;\r\n\t}\r\n\r\n\t//return header containing element\r\n\tgetHeadersElement(){\r\n\t\treturn this.headersElement;\r\n\t}\r\n\r\n\t//scroll horizontally to match table body\r\n\tscrollHorizontal(left){\r\n\t\tvar hozAdjust = 0,\r\n\t\tscrollWidth = this.element.scrollWidth - this.table.element.clientWidth;\r\n\r\n\t\t// this.tempScrollBlock();\r\n\t\tthis.element.scrollLeft = left;\r\n\r\n\t\t//adjust for vertical scrollbar moving table when present\r\n\t\tif(left > scrollWidth){\r\n\t\t\thozAdjust = left - scrollWidth;\r\n\t\t\tthis.element.style.marginLeft = (-(hozAdjust)) + \"px\";\r\n\t\t}else{\r\n\t\t\tthis.element.style.marginLeft = 0;\r\n\t\t}\r\n\r\n\t\tthis.scrollLeft = left;\r\n\r\n\t\tthis.renderer.scrollColumns(left);\r\n\t}\r\n\r\n\t///////////// Column Setup Functions /////////////\r\n\tgenerateColumnsFromRowData(data){\r\n\t\tvar cols = [],\r\n\t\tdefinitions = this.table.options.autoColumnsDefinitions,\r\n\t\trow, sorter;\r\n\r\n\t\tif(data && data.length){\r\n\r\n\t\t\trow = data[0];\r\n\r\n\t\t\tfor(var key in row){\r\n\t\t\t\tlet col = {\r\n\t\t\t\t\tfield:key,\r\n\t\t\t\t\ttitle:key,\r\n\t\t\t\t};\r\n\r\n\t\t\t\tlet value = row[key];\r\n\r\n\t\t\t\tswitch(typeof value){\r\n\t\t\t\t\tcase \"undefined\":\r\n\t\t\t\t\tsorter = \"string\";\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase \"boolean\":\r\n\t\t\t\t\tsorter = \"boolean\";\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase \"object\":\r\n\t\t\t\t\tif(Array.isArray(value)){\r\n\t\t\t\t\t\tsorter = \"array\";\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tsorter = \"string\";\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tdefault:\r\n\t\t\t\t\tif(!isNaN(value) && value !== \"\"){\r\n\t\t\t\t\t\tsorter = \"number\";\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tif(value.match(/((^[0-9]+[a-z]+)|(^[a-z]+[0-9]+))+$/i)){\r\n\t\t\t\t\t\t\tsorter = \"alphanum\";\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\tsorter = \"string\";\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tcol.sorter = sorter;\r\n\r\n\t\t\t\tcols.push(col);\r\n\t\t\t}\r\n\r\n\t\t\tif(definitions){\r\n\r\n\t\t\t\tswitch(typeof definitions){\r\n\t\t\t\t\tcase \"function\":\r\n\t\t\t\t\tthis.table.options.columns = definitions.call(this.table, cols);\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase \"object\":\r\n\t\t\t\t\tif(Array.isArray(definitions)){\r\n\t\t\t\t\t\tcols.forEach((col) => {\r\n\t\t\t\t\t\t\tvar match = definitions.find((def) => {\r\n\t\t\t\t\t\t\t\treturn def.field === col.field;\r\n\t\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\t\tif(match){\r\n\t\t\t\t\t\t\t\tObject.assign(col, match);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tcols.forEach((col) => {\r\n\t\t\t\t\t\t\tif(definitions[col.field]){\r\n\t\t\t\t\t\t\t\tObject.assign(col, definitions[col.field]);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tthis.table.options.columns = cols;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tthis.table.options.columns = cols;\r\n\t\t\t}\r\n\r\n\t\t\tthis.setColumns(this.table.options.columns);\r\n\t\t}\r\n\t}\r\n\r\n\tsetColumns(cols, row){\r\n\t\twhile(this.headersElement.firstChild) this.headersElement.removeChild(this.headersElement.firstChild);\r\n\r\n\t\tthis.columns = [];\r\n\t\tthis.columnsByIndex = [];\r\n\t\tthis.columnsByField = {};\r\n\r\n\t\tthis.dispatch(\"columns-loading\");\r\n\r\n\t\tcols.forEach((def, i) => {\r\n\t\t\tthis._addColumn(def);\r\n\t\t});\r\n\r\n\t\tthis._reIndexColumns();\r\n\r\n\t\tthis.dispatch(\"columns-loaded\");\r\n\r\n\t\tthis.renderer.rerenderColumns(false, true);\r\n\r\n\t\tthis.redraw(true);\r\n\t}\r\n\r\n\t_addColumn(definition, before, nextToColumn){\r\n\t\tvar column = new Column(definition, this),\r\n\t\tcolEl = column.getElement(),\r\n\t\tindex = nextToColumn ? this.findColumnIndex(nextToColumn) : nextToColumn;\r\n\r\n\t\tif(nextToColumn && index > -1){\r\n\r\n\t\t\tvar parentIndex = this.columns.indexOf(nextToColumn.getTopColumn());\r\n\t\t\tvar nextEl = nextToColumn.getElement();\r\n\r\n\t\t\tif(before){\r\n\t\t\t\tthis.columns.splice(parentIndex, 0, column);\r\n\t\t\t\tnextEl.parentNode.insertBefore(colEl, nextEl);\r\n\t\t\t}else{\r\n\t\t\t\tthis.columns.splice(parentIndex + 1, 0, column);\r\n\t\t\t\tnextEl.parentNode.insertBefore(colEl, nextEl.nextSibling);\r\n\t\t\t}\r\n\r\n\t\t}else{\r\n\t\t\tif(before){\r\n\t\t\t\tthis.columns.unshift(column);\r\n\t\t\t\tthis.headersElement.insertBefore(column.getElement(), this.headersElement.firstChild);\r\n\t\t\t}else{\r\n\t\t\t\tthis.columns.push(column);\r\n\t\t\t\tthis.headersElement.appendChild(column.getElement());\r\n\t\t\t}\r\n\r\n\t\t\tcolumn.columnRendered();\r\n\t\t}\r\n\r\n\t\treturn column;\r\n\t}\r\n\r\n\tregisterColumnField(col){\r\n\t\tif(col.definition.field){\r\n\t\t\tthis.columnsByField[col.definition.field] = col;\r\n\t\t}\r\n\t}\r\n\r\n\tregisterColumnPosition(col){\r\n\t\tthis.columnsByIndex.push(col);\r\n\t}\r\n\r\n\t_reIndexColumns(){\r\n\t\tthis.columnsByIndex = [];\r\n\r\n\t\tthis.columns.forEach(function(column){\r\n\t\t\tcolumn.reRegisterPosition();\r\n\t\t});\r\n\t}\r\n\r\n\t//ensure column headers take up the correct amount of space in column groups\r\n\t_verticalAlignHeaders(){\r\n\t\tvar minHeight = 0;\r\n\r\n\t\tthis.columns.forEach((column) => {\r\n\t\t\tvar height;\r\n\r\n\t\t\tcolumn.clearVerticalAlign();\r\n\r\n\t\t\theight = column.getHeight();\r\n\r\n\t\t\tif(height > minHeight){\r\n\t\t\t\tminHeight = height;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tthis.columns.forEach((column) => {\r\n\t\t\tcolumn.verticalAlign(this.table.options.columnHeaderVertAlign, minHeight);\r\n\t\t});\r\n\r\n\t\tthis.table.rowManager.adjustTableSize();\r\n\t}\r\n\r\n\t//////////////// Column Details /////////////////\r\n\tfindColumn(subject){\r\n\t\tif(typeof subject == \"object\"){\r\n\r\n\t\t\tif(subject instanceof Column){\r\n\t\t\t\t//subject is column element\r\n\t\t\t\treturn subject;\r\n\t\t\t}else if(subject instanceof ColumnComponent){\r\n\t\t\t\t//subject is public column component\r\n\t\t\t\treturn subject._getSelf() || false;\r\n\t\t\t}else if(typeof HTMLElement !== \"undefined\" && subject instanceof HTMLElement){\r\n\t\t\t\t//subject is a HTML element of the column header\r\n\t\t\t\tlet match = this.columns.find((column) => {\r\n\t\t\t\t\treturn column.element === subject;\r\n\t\t\t\t});\r\n\r\n\t\t\t\treturn match || false;\r\n\t\t\t}\r\n\r\n\t\t}else{\r\n\t\t\t//subject should be treated as the field name of the column\r\n\t\t\treturn this.columnsByField[subject] || false;\r\n\t\t}\r\n\r\n\t\t//catch all for any other type of input\r\n\t\treturn false;\r\n\t}\r\n\r\n\tgetColumnByField(field){\r\n\t\treturn this.columnsByField[field];\r\n\t}\r\n\r\n\tgetColumnsByFieldRoot(root){\r\n\t\tvar matches = [];\r\n\r\n\t\tObject.keys(this.columnsByField).forEach((field) => {\r\n\t\t\tvar fieldRoot = field.split(\".\")[0];\r\n\t\t\tif(fieldRoot === root){\r\n\t\t\t\tmatches.push(this.columnsByField[field]);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn matches;\r\n\t}\r\n\r\n\tgetColumnByIndex(index){\r\n\t\treturn this.columnsByIndex[index];\r\n\t}\r\n\r\n\tgetFirstVisibileColumn(index){\r\n\t\tvar index = this.columnsByIndex.findIndex((col) => {\r\n\t\t\treturn col.visible;\r\n\t\t});\r\n\r\n\t\treturn index > -1 ? this.columnsByIndex[index] : false;\r\n\t}\r\n\r\n\tgetColumns(){\r\n\t\treturn this.columns;\r\n\t}\r\n\r\n\tfindColumnIndex(column){\r\n\t\treturn this.columnsByIndex.findIndex((col) => {\r\n\t\t\treturn column === col;\r\n\t\t});\r\n\t}\r\n\r\n\t//return all columns that are not groups\r\n\tgetRealColumns(){\r\n\t\treturn this.columnsByIndex;\r\n\t}\r\n\r\n\t//travers across columns and call action\r\n\ttraverse(callback){\r\n\t\tthis.columnsByIndex.forEach((column,i) =>{\r\n\t\t\tcallback(column, i);\r\n\t\t});\r\n\t}\r\n\r\n\t//get defintions of actual columns\r\n\tgetDefinitions(active){\r\n\t\tvar output = [];\r\n\r\n\t\tthis.columnsByIndex.forEach((column) => {\r\n\t\t\tif(!active || (active && column.visible)){\r\n\t\t\t\toutput.push(column.getDefinition());\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\t//get full nested definition tree\r\n\tgetDefinitionTree(){\r\n\t\tvar output = [];\r\n\r\n\t\tthis.columns.forEach((column) => {\r\n\t\t\toutput.push(column.getDefinition(true));\r\n\t\t});\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tgetComponents(structured){\r\n\t\tvar output = [],\r\n\t\tcolumns = structured ? this.columns : this.columnsByIndex;\r\n\r\n\t\tcolumns.forEach((column) => {\r\n\t\t\toutput.push(column.getComponent());\r\n\t\t});\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tgetWidth(){\r\n\t\tvar width = 0;\r\n\r\n\t\tthis.columnsByIndex.forEach((column) => {\r\n\t\t\tif(column.visible){\r\n\t\t\t\twidth += column.getWidth();\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn width;\r\n\t}\r\n\r\n\tmoveColumn(from, to, after){\r\n\t\tthis.moveColumnActual(from, to, after);\r\n\r\n\t\tto.element.parentNode.insertBefore(from.element, to.element);\r\n\r\n\t\tif(after){\r\n\t\t\tto.element.parentNode.insertBefore(to.element, from.element);\r\n\t\t}\r\n\r\n\t\tthis._verticalAlignHeaders();\r\n\r\n\t\tthis.table.rowManager.reinitialize();\r\n\t}\r\n\r\n\tmoveColumnActual(from, to, after){\r\n\t\tif(from.parent.isGroup){\r\n\t\t\tthis._moveColumnInArray(from.parent.columns, from, to, after);\r\n\t\t}else{\r\n\t\t\tthis._moveColumnInArray(this.columns, from, to, after);\r\n\t\t}\r\n\r\n\t\tthis._moveColumnInArray(this.columnsByIndex, from, to, after, true);\r\n\r\n\t\tthis.renderer.rerenderColumns(true);\r\n\r\n\t\tthis.dispatch(\"column-moved\", from, to, after);\r\n\r\n\t\tif(this.subscribedExternal(\"columnMoved\")){\r\n\t\t\tthis.dispatchExternal(\"columnMoved\", from.getComponent(), this.table.columnManager.getComponents());\r\n\t\t}\r\n\t}\r\n\r\n\t_moveColumnInArray(columns, from, to, after, updateRows){\r\n\t\tvar\tfromIndex = columns.indexOf(from),\r\n\t\ttoIndex, rows = [];\r\n\r\n\t\tif (fromIndex > -1) {\r\n\r\n\t\t\tcolumns.splice(fromIndex, 1);\r\n\r\n\t\t\ttoIndex = columns.indexOf(to);\r\n\r\n\t\t\tif (toIndex > -1) {\r\n\r\n\t\t\t\tif(after){\r\n\t\t\t\t\ttoIndex = toIndex+1;\r\n\t\t\t\t}\r\n\r\n\t\t\t}else{\r\n\t\t\t\ttoIndex = fromIndex;\r\n\t\t\t}\r\n\r\n\t\t\tcolumns.splice(toIndex, 0, from);\r\n\r\n\t\t\tif(updateRows){\r\n\r\n\t\t\t\trows = this.chain(\"column-moving-rows\", [from, to, after], null, []) || [];\r\n\r\n\t\t\t\trows = rows.concat(this.table.rowManager.rows);\r\n\r\n\t\t\t\trows.forEach(function(row){\r\n\t\t\t\t\tif(row.cells.length){\r\n\t\t\t\t\t\tvar cell = row.cells.splice(fromIndex, 1)[0];\r\n\t\t\t\t\t\trow.cells.splice(toIndex, 0, cell);\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tscrollToColumn(column, position, ifVisible){\r\n\t\tvar left = 0,\r\n\t\toffset = 0,\r\n\t\tadjust = 0,\r\n\t\tcolEl = column.getElement();\r\n\r\n\t\treturn new Promise((resolve, reject) => {\r\n\r\n\t\t\tif(typeof position === \"undefined\"){\r\n\t\t\t\tposition = this.table.options.scrollToColumnPosition;\r\n\t\t\t}\r\n\r\n\t\t\tif(typeof ifVisible === \"undefined\"){\r\n\t\t\t\tifVisible = this.table.options.scrollToColumnIfVisible;\r\n\t\t\t}\r\n\r\n\t\t\tif(column.visible){\r\n\r\n\t\t\t\t//align to correct position\r\n\t\t\t\tswitch(position){\r\n\t\t\t\t\tcase \"middle\":\r\n\t\t\t\t\tcase \"center\":\r\n\t\t\t\t\tadjust = -this.element.clientWidth / 2;\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase \"right\":\r\n\t\t\t\t\tadjust = colEl.clientWidth - this.headersElement.clientWidth;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//check column visibility\r\n\t\t\t\tif(!ifVisible){\r\n\r\n\t\t\t\t\toffset = colEl.offsetLeft;\r\n\r\n\t\t\t\t\tif(offset > 0 && offset + colEl.offsetWidth < this.element.clientWidth){\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//calculate scroll position\r\n\t\t\t\tleft = colEl.offsetLeft + adjust;\r\n\r\n\t\t\t\tleft = Math.max(Math.min(left, this.table.rowManager.element.scrollWidth - this.table.rowManager.element.clientWidth),0);\r\n\r\n\t\t\t\tthis.table.rowManager.scrollHorizontal(left);\r\n\t\t\t\tthis.scrollHorizontal(left);\r\n\r\n\t\t\t\tresolve();\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Scroll Error - Column not visible\");\r\n\t\t\t\treject(\"Scroll Error - Column not visible\");\r\n\t\t\t}\r\n\r\n\t\t});\r\n\t}\r\n\r\n\t//////////////// Cell Management /////////////////\r\n\tgenerateCells(row){\r\n\t\tvar cells = [];\r\n\r\n\t\tthis.columnsByIndex.forEach((column) => {\r\n\t\t\tcells.push(column.generateCell(row));\r\n\t\t});\r\n\r\n\t\treturn cells;\r\n\t}\r\n\r\n\t//////////////// Column Management /////////////////\r\n\tgetFlexBaseWidth(){\r\n\t\tvar totalWidth = this.table.element.clientWidth, //table element width\r\n\t\tfixedWidth = 0;\r\n\r\n\t\t//adjust for vertical scrollbar if present\r\n\t\tif(this.table.rowManager.element.scrollHeight > this.table.rowManager.element.clientHeight){\r\n\t\t\ttotalWidth -= this.table.rowManager.element.offsetWidth - this.table.rowManager.element.clientWidth;\r\n\t\t}\r\n\r\n\t\tthis.columnsByIndex.forEach(function(column){\r\n\t\t\tvar width, minWidth, colWidth;\r\n\r\n\t\t\tif(column.visible){\r\n\r\n\t\t\t\twidth = column.definition.width || 0;\r\n\r\n\t\t\t\tminWidth = parseInt(column.minWidth);\r\n\r\n\t\t\t\tif(typeof(width) == \"string\"){\r\n\t\t\t\t\tif(width.indexOf(\"%\") > -1){\r\n\t\t\t\t\t\tcolWidth = (totalWidth / 100) * parseInt(width) ;\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tcolWidth = parseInt(width);\r\n\t\t\t\t\t}\r\n\t\t\t\t}else{\r\n\t\t\t\t\tcolWidth = width;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tfixedWidth += colWidth > minWidth ? colWidth : minWidth;\r\n\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn fixedWidth;\r\n\t}\r\n\r\n\taddColumn(definition, before, nextToColumn){\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tvar column = this._addColumn(definition, before, nextToColumn);\r\n\r\n\t\t\tthis._reIndexColumns();\r\n\r\n\t\t\tthis.dispatch(\"column-add\", definition, before, nextToColumn);\r\n\r\n\t\t\tthis.redraw(true);\r\n\r\n\t\t\tif(this.layoutMode() != \"fitColumns\"){\r\n\t\t\t\tcolumn.reinitializeWidth();\r\n\t\t\t}\r\n\r\n\t\t\tthis._verticalAlignHeaders();\r\n\r\n\t\t\tthis.table.rowManager.reinitialize();\r\n\r\n\t\t\tthis.renderer.rerenderColumns();\r\n\r\n\t\t\tresolve(column);\r\n\t\t});\r\n\t}\r\n\r\n\t//remove column from system\r\n\tderegisterColumn(column){\r\n\t\tvar field = column.getField(),\r\n\t\tindex;\r\n\r\n\t\t//remove from field list\r\n\t\tif(field){\r\n\t\t\tdelete this.columnsByField[field];\r\n\t\t}\r\n\r\n\t\t//remove from index list\r\n\t\tindex = this.columnsByIndex.indexOf(column);\r\n\r\n\t\tif(index > -1){\r\n\t\t\tthis.columnsByIndex.splice(index, 1);\r\n\t\t}\r\n\r\n\t\t//remove from column list\r\n\t\tindex = this.columns.indexOf(column);\r\n\r\n\t\tif(index > -1){\r\n\t\t\tthis.columns.splice(index, 1);\r\n\t\t}\r\n\r\n\t\tthis._verticalAlignHeaders();\r\n\r\n\t\tthis.redraw();\r\n\t}\r\n\r\n\t//redraw columns\r\n\tredraw(force){\r\n\t\tif(force){\r\n\t\t\tif(Helpers.elVisible(this.element)){\r\n\t\t\t\tthis._verticalAlignHeaders();\r\n\t\t\t}\r\n\r\n\t\t\tthis.table.rowManager.resetScroll();\r\n\t\t\tthis.table.rowManager.reinitialize();\r\n\t\t}\r\n\r\n\t\tif(!this.confirm(\"table-redrawing\", force)){\r\n\t\t\tthis.layoutRefresh();\r\n\t\t}\r\n\r\n\t\tthis.dispatch(\"table-redraw\", force);\r\n\r\n\t\tthis.table.footerManager.redraw();\r\n\t}\r\n}","//public row object\r\nexport default class RowComponent {\r\n\r\n\tconstructor (row){\r\n\t\tthis._row = row;\r\n\r\n\t\treturn new Proxy(this, {\r\n\t\t\tget: function(target, name, receiver) {\r\n\t\t\t\tif (typeof target[name] !== \"undefined\") {\r\n\t\t\t\t\treturn target[name];\r\n\t\t\t\t}else{\r\n\t\t\t\t\treturn target._row.table.componentFunctionBinder.handle(\"row\", target._row, name)\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t})\r\n\t}\r\n\r\n\tgetData(transform){\r\n\t\treturn this._row.getData(transform);\r\n\t}\r\n\r\n\tgetElement(){\r\n\t\treturn this._row.getElement();\r\n\t}\r\n\r\n\tgetCells(){\r\n\t\tvar cells = [];\r\n\r\n\t\tthis._row.getCells().forEach(function(cell){\r\n\t\t\tcells.push(cell.getComponent());\r\n\t\t});\r\n\r\n\t\treturn cells;\r\n\t}\r\n\r\n\tgetCell(column){\r\n\t\tvar cell = this._row.getCell(column);\r\n\t\treturn cell ? cell.getComponent() : false;\r\n\t}\r\n\r\n\tgetIndex(){\r\n\t\treturn this._row.getData(\"data\")[this._row.table.options.index];\r\n\t}\r\n\r\n\tgetPosition(active){\r\n\t\treturn this._row.table.rowManager.getRowPosition(this._row, active);\r\n\t}\r\n\r\n\tdelete(){\r\n\t\treturn this._row.delete();\r\n\t}\r\n\r\n\tscrollTo(){\r\n\t\treturn this._row.table.rowManager.scrollToRow(this._row);\r\n\t}\r\n\r\n\tmove(to, after){\r\n\t\tthis._row.moveToRow(to, after);\r\n\t}\r\n\r\n\tupdate(data){\r\n\t\treturn this._row.updateData(data);\r\n\t}\r\n\r\n\tnormalizeHeight(){\r\n\t\tthis._row.normalizeHeight(true);\r\n\t}\r\n\r\n\t_getSelf(){\r\n\t\treturn this._row;\r\n\t}\r\n\r\n\treformat(){\r\n\t\treturn this._row.reinitialize();\r\n\t}\r\n\r\n\tgetTable(){\r\n\t\treturn this._row.table;\r\n\t}\r\n\r\n\tgetNextRow(){\r\n\t\tvar row = this._row.nextRow();\r\n\t\treturn row ? row.getComponent() : row;\r\n\t}\r\n\r\n\tgetPrevRow(){\r\n\t\tvar row = this._row.prevRow();\r\n\t\treturn row ? row.getComponent() : row;\r\n\t}\r\n}","import CoreFeature from '../CoreFeature.js';\r\nimport RowComponent from './RowComponent.js';\r\nimport Helpers from '../tools/Helpers.js';\r\n\r\nexport default class Row extends CoreFeature{\r\n\tconstructor (data, parent, type = \"row\"){\r\n\t\tsuper(parent.table);\r\n\r\n\t\tthis.parent = parent;\r\n\t\tthis.data = {};\r\n\t\tthis.type = type; //type of element\r\n\t\tthis.element = false;\r\n\t\tthis.modules = {}; //hold module variables;\r\n\t\tthis.cells = [];\r\n\t\tthis.height = 0; //hold element height\r\n\t\tthis.heightStyled = \"\"; //hold element height prestyled to improve render efficiency\r\n\t\tthis.manualHeight = false; //user has manually set row height\r\n\t\tthis.outerHeight = 0; //holde lements outer height\r\n\t\tthis.initialized = false; //element has been rendered\r\n\t\tthis.heightInitialized = false; //element has resized cells to fit\r\n\r\n\t\tthis.component = null;\r\n\r\n\t\tthis.created = false;\r\n\r\n\t\tthis.setData(data);\r\n\t}\r\n\r\n\tcreate(){\r\n\t\tif(!this.created){\r\n\t\t\tthis.created = true;\r\n\t\t\tthis.generateElement();\r\n\t\t}\r\n\t}\r\n\r\n\tcreateElement (){\r\n\t\tvar el = document.createElement(\"div\");\r\n\r\n\t\tel.classList.add(\"tabulator-row\");\r\n\t\tel.setAttribute(\"role\", \"row\");\r\n\r\n\t\tthis.element = el;\r\n\t}\r\n\r\n\tgetElement(){\r\n\t\tthis.create();\r\n\t\treturn this.element;\r\n\t}\r\n\r\n\tdetachElement(){\r\n\t\tif (this.element && this.element.parentNode){\r\n\t\t\tthis.element.parentNode.removeChild(this.element);\r\n\t\t}\r\n\t}\r\n\r\n\tgenerateElement(){\r\n\t\tthis.createElement();\r\n\t\tthis.dispatch(\"row-init\", this);\r\n\t}\r\n\r\n\tgenerateCells(){\r\n\t\tthis.cells = this.table.columnManager.generateCells(this);\r\n\t}\r\n\r\n\t//functions to setup on first render\r\n\tinitialize(force){\r\n\t\tthis.create();\r\n\r\n\t\tif(!this.initialized || force){\r\n\r\n\t\t\tthis.deleteCells();\r\n\r\n\t\t\twhile(this.element.firstChild) this.element.removeChild(this.element.firstChild);\r\n\r\n\t\t\tthis.dispatch(\"row-layout-before\", this);\r\n\r\n\t\t\tthis.generateCells();\r\n\r\n\t\t\tthis.table.columnManager.renderer.renderRowCells(this);\r\n\r\n\t\t\tif(force){\r\n\t\t\t\tthis.normalizeHeight();\r\n\t\t\t}\r\n\r\n\t\t\tthis.dispatch(\"row-layout\", this);\r\n\r\n\t\t\tif(this.table.options.rowFormatter){\r\n\t\t\t\tthis.table.options.rowFormatter(this.getComponent());\r\n\t\t\t}\r\n\r\n\t\t\tthis.dispatch(\"row-layout-after\", this);\r\n\r\n\t\t\tthis.initialized = true;\r\n\t\t}else{\r\n\t\t\tthis.table.columnManager.renderer.rerenderRowCells(this);\r\n\t\t}\r\n\t}\r\n\r\n\treinitializeHeight(){\r\n\t\tthis.heightInitialized = false;\r\n\r\n\t\tif(this.element && this.element.offsetParent !== null){\r\n\t\t\tthis.normalizeHeight(true);\r\n\t\t}\r\n\t}\r\n\r\n\treinitialize(children){\r\n\t\tthis.initialized = false;\r\n\t\tthis.heightInitialized = false;\r\n\r\n\t\tif(!this.manualHeight){\r\n\t\t\tthis.height = 0;\r\n\t\t\tthis.heightStyled = \"\";\r\n\t\t}\r\n\r\n\t\tif(this.element && this.element.offsetParent !== null){\r\n\t\t\tthis.initialize(true);\r\n\t\t}\r\n\r\n\t\tthis.dispatch(\"row-relayout\", this);\r\n\t}\r\n\r\n\t//get heights when doing bulk row style calcs in virtual DOM\r\n\tcalcHeight(force){\r\n\r\n\t\tvar maxHeight = 0,\r\n\t\tminHeight = this.table.options.resizableRows ? this.element.clientHeight : 0;\r\n\r\n\t\tthis.cells.forEach(function(cell){\r\n\t\t\tvar height = cell.getHeight();\r\n\t\t\tif(height > maxHeight){\r\n\t\t\t\tmaxHeight = height;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tif(force){\r\n\t\t\tthis.height = Math.max(maxHeight, minHeight);\r\n\t\t}else{\r\n\t\t\tthis.height = this.manualHeight ? this.height : Math.max(maxHeight, minHeight);\r\n\t\t}\r\n\r\n\t\tthis.heightStyled = this.height ? this.height + \"px\" : \"\";\r\n\t\tthis.outerHeight = this.element.offsetHeight;\r\n\t}\r\n\r\n\t//set of cells\r\n\tsetCellHeight(){\r\n\t\tthis.cells.forEach(function(cell){\r\n\t\t\tcell.setHeight();\r\n\t\t});\r\n\r\n\t\tthis.heightInitialized = true;\r\n\t}\r\n\r\n\tclearCellHeight(){\r\n\t\tthis.cells.forEach(function(cell){\r\n\t\t\tcell.clearHeight();\r\n\t\t});\r\n\t}\r\n\r\n\t//normalize the height of elements in the row\r\n\tnormalizeHeight(force){\r\n\r\n\t\tif(force){\r\n\t\t\tthis.clearCellHeight();\r\n\t\t}\r\n\r\n\t\tthis.calcHeight(force);\r\n\r\n\t\tthis.setCellHeight();\r\n\t}\r\n\r\n\t//set height of rows\r\n\tsetHeight(height, force){\r\n\t\tif(this.height != height || force){\r\n\r\n\t\t\tthis.manualHeight = true;\r\n\r\n\t\t\tthis.height = height;\r\n\t\t\tthis.heightStyled = height ? height + \"px\" : \"\";\r\n\r\n\t\t\tthis.setCellHeight();\r\n\r\n\t\t\t// this.outerHeight = this.element.outerHeight();\r\n\t\t\tthis.outerHeight = this.element.offsetHeight;\r\n\t\t}\r\n\t}\r\n\r\n\t//return rows outer height\r\n\tgetHeight(){\r\n\t\treturn this.outerHeight;\r\n\t}\r\n\r\n\t//return rows outer Width\r\n\tgetWidth(){\r\n\t\treturn this.element.offsetWidth;\r\n\t}\r\n\r\n\t//////////////// Cell Management /////////////////\r\n\tdeleteCell(cell){\r\n\t\tvar index = this.cells.indexOf(cell);\r\n\r\n\t\tif(index > -1){\r\n\t\t\tthis.cells.splice(index, 1);\r\n\t\t}\r\n\t}\r\n\r\n\t//////////////// Data Management /////////////////\r\n\tsetData(data){\r\n\t\tthis.data = this.chain(\"row-data-init-before\", [this, data], null, data);\r\n\r\n\t\tthis.dispatch(\"row-data-init-after\", this);\r\n\t}\r\n\r\n\t//update the rows data\r\n\tupdateData(updatedData){\r\n\t\tvar visible = this.element && Helpers.elVisible(this.element),\r\n\t\ttempData = {},\r\n\t\tnewRowData;\r\n\r\n\t\treturn new Promise((resolve, reject) => {\r\n\r\n\t\t\tif(typeof updatedData === \"string\"){\r\n\t\t\t\tupdatedData = JSON.parse(updatedData);\r\n\t\t\t}\r\n\r\n\t\t\tthis.dispatch(\"row-data-save-before\", this);\r\n\r\n\t\t\tif(this.subscribed(\"row-data-changing\")){\r\n\t\t\t\ttempData = Object.assign(tempData, this.data);\r\n\t\t\t\ttempData = Object.assign(tempData, updatedData);\r\n\t\t\t}\r\n\r\n\t\t\tnewRowData = this.chain(\"row-data-changing\", [this, tempData, updatedData], null, updatedData);\r\n\r\n\t\t\t//set data\r\n\t\t\tfor (var attrname in newRowData) {\r\n\t\t\t\tthis.data[attrname] = newRowData[attrname];\r\n\t\t\t}\r\n\r\n\t\t\tthis.dispatch(\"row-data-save-after\", this);\r\n\r\n\t\t\t//update affected cells only\r\n\t\t\tfor (var attrname in updatedData) {\r\n\r\n\t\t\t\tlet columns = this.table.columnManager.getColumnsByFieldRoot(attrname);\r\n\r\n\t\t\t\tcolumns.forEach((column) => {\r\n\t\t\t\t\tlet cell = this.getCell(column.getField());\r\n\r\n\t\t\t\t\tif(cell){\r\n\t\t\t\t\t\tlet value = column.getFieldValue(newRowData);\r\n\t\t\t\t\t\tif(cell.getValue() != value){\r\n\t\t\t\t\t\t\tcell.setValueProcessData(value);\r\n\r\n\t\t\t\t\t\t\tif(visible){\r\n\t\t\t\t\t\t\t\tcell.cellRendered();\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\t//Partial reinitialization if visible\r\n\t\t\tif(visible){\r\n\t\t\t\tthis.normalizeHeight(true);\r\n\r\n\t\t\t\tif(this.table.options.rowFormatter){\r\n\t\t\t\t\tthis.table.options.rowFormatter(this.getComponent());\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tthis.initialized = false;\r\n\t\t\t\tthis.height = 0;\r\n\t\t\t\tthis.heightStyled = \"\";\r\n\t\t\t}\r\n\r\n\t\t\tthis.dispatch(\"row-data-changed\", this, visible, updatedData);\r\n\r\n\t\t\t//this.reinitialize();\r\n\r\n\t\t\tthis.dispatchExternal(\"rowUpdated\", this.getComponent());\r\n\r\n\t\t\tif(this.subscribedExternal.subscribed(\"dataChanged\")){\r\n\t\t\t\tthis.dispatchExternal(\"dataChanged\", this.table.rowManager.getData());\r\n\t\t\t}\r\n\r\n\t\t\tresolve();\r\n\t\t});\r\n\t}\r\n\r\n\tgetData(transform){\r\n\t\tif(transform){\r\n\t\t\treturn this.chain(\"row-data-retrieve\", [this, transform], null, this.data);\r\n\t\t}\r\n\r\n\t\treturn this.data;\r\n\t}\r\n\r\n\tgetCell(column){\r\n\t\tvar match = false;\r\n\r\n\t\tcolumn = this.table.columnManager.findColumn(column);\r\n\r\n\t\tmatch = this.cells.find(function(cell){\r\n\t\t\treturn cell.column === column;\r\n\t\t});\r\n\r\n\t\treturn match;\r\n\t}\r\n\r\n\tgetCellIndex(findCell){\r\n\t\treturn this.cells.findIndex(function(cell){\r\n\t\t\treturn cell === findCell;\r\n\t\t});\r\n\t}\r\n\r\n\tfindCell(subject){\r\n\t\treturn this.cells.find((cell) => {\r\n\t\t\treturn cell.element === subject;\r\n\t\t});\r\n\t}\r\n\r\n\tgetCells(){\r\n\t\treturn this.cells;\r\n\t}\r\n\r\n\tnextRow(){\r\n\t\tvar row = this.table.rowManager.nextDisplayRow(this, true);\r\n\t\treturn row || false;\r\n\t}\r\n\r\n\tprevRow(){\r\n\t\tvar row = this.table.rowManager.prevDisplayRow(this, true);\r\n\t\treturn row || false;\r\n\t}\r\n\r\n\tmoveToRow(to, before){\r\n\t\tvar toRow = this.table.rowManager.findRow(to);\r\n\r\n\t\tif(toRow){\r\n\t\t\tthis.table.rowManager.moveRowActual(this, toRow, !before);\r\n\t\t\tthis.table.rowManager.refreshActiveData(\"display\", false, true);\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Move Error - No matching row found:\", to);\r\n\t\t}\r\n\t}\r\n\r\n\t///////////////////// Actions /////////////////////\r\n\tdelete(){\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tthis.dispatch(\"row-delete\", this);\r\n\r\n\t\t\tthis.deleteActual();\r\n\r\n\t\t\tresolve();\r\n\t\t});\r\n\t}\r\n\r\n\tdeleteActual(blockRedraw){\r\n\t\tvar index = this.table.rowManager.getRowIndex(this);\r\n\r\n\t\tthis.detatchModules();\r\n\r\n\t\tthis.table.rowManager.deleteRow(this, blockRedraw);\r\n\r\n\t\tthis.deleteCells();\r\n\r\n\t\tthis.initialized = false;\r\n\t\tthis.heightInitialized = false;\r\n\t\tthis.element = false;\r\n\r\n\t\tthis.dispatch(\"row-deleted\", this);\r\n\t}\r\n\r\n\tdetatchModules(){\r\n\t\tthis.dispatch(\"row-deleting\", this);\r\n\t}\r\n\r\n\tdeleteCells(){\r\n\t\tvar cellCount = this.cells.length;\r\n\r\n\t\tfor(let i = 0; i < cellCount; i++){\r\n\t\t\tthis.cells[0].delete();\r\n\t\t}\r\n\t}\r\n\r\n\twipe(){\r\n\t\tthis.detatchModules();\r\n\t\tthis.deleteCells();\r\n\r\n\t\tif(this.element){\r\n\t\t\twhile(this.element.firstChild) this.element.removeChild(this.element.firstChild);\r\n\r\n\t\t\tif(this.element.parentNode){\r\n\t\t\t\tthis.element.parentNode.removeChild(this.element);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.element = false;\r\n\t\tthis.modules = {};\r\n\t}\r\n\r\n\tgetGroup(){\r\n\t\treturn this.modules.group || false;\r\n\t}\r\n\r\n\t//////////////// Object Generation /////////////////\r\n\tgetComponent(){\r\n\t\tif(!this.component){\r\n\t\t\tthis.component = new RowComponent(this);\r\n\t\t}\r\n\r\n\t\treturn this.component;\r\n\t}\r\n}","import Renderer from '../Renderer.js';\r\nimport Helpers from '../../tools/Helpers.js';\r\n\r\nexport default class BaiscVertical extends Renderer{\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.verticalFillMode = \"fill\";\r\n\r\n\t\tthis.scrollTop = 0;\r\n\t\tthis.scrollLeft = 0;\r\n\r\n\t\tthis.scrollTop = 0;\r\n\t\tthis.scrollLeft = 0;\r\n\t}\r\n\r\n\tclearRows(){\r\n\t\tvar element = this.tableElement;\r\n\r\n\t\t// element.children.detach();\r\n\t\twhile(element.firstChild) element.removeChild(element.firstChild);\r\n\r\n\t\telement.scrollTop = 0;\r\n\t\telement.scrollLeft = 0;\r\n\r\n\t\telement.style.minWidth = \"\";\r\n\t\telement.style.minHeight = \"\";\r\n\t\telement.style.display = \"\";\r\n\t\telement.style.visibility = \"\";\r\n\t}\r\n\r\n\trenderRows(){\r\n\t\tvar element = this.tableElement,\r\n\t\tonlyGroupHeaders = true;\r\n\r\n\t\tthis.rows().forEach((row, index) => {\r\n\t\t\tthis.styleRow(row, index);\r\n\t\t\telement.appendChild(row.getElement());\r\n\t\t\trow.initialize(true);\r\n\r\n\t\t\tif(row.type !== \"group\"){\r\n\t\t\t\tonlyGroupHeaders = false;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tif(onlyGroupHeaders){\r\n\t\t\telement.style.minWidth = this.table.columnManager.getWidth() + \"px\";\r\n\t\t}else{\r\n\t\t\telement.style.minWidth = \"\";\r\n\t\t}\r\n\t}\r\n\r\n\r\n\trerenderRows(callback){\r\n\t\tthis.render();\r\n\r\n\t\tif(callback){\r\n\t\t\tcallback();\r\n\t\t}\r\n\t}\r\n\r\n\tscrollToRowNearestTop(row){\r\n\t\tvar rowTop = Helpers.elOffset(row.getElement()).top;\r\n\r\n\t\treturn !(Math.abs(this.elementVertical.scrollTop - rowTop) > Math.abs(this.elementVertical.scrollTop + this.elementVertical.clientHeight - rowTop));\r\n\t}\r\n\r\n\tscrollToRow(row){\r\n\t\tvar rowEl = row.getElement();\r\n\r\n\t\tthis.elementVertical.scrollTop = Helpers.elOffset(rowEl).top - Helpers.elOffset(this.elementVertical).top + this.elementVertical.scrollTop;\r\n\t}\r\n\r\n\tvisibleRows(includingBuffer){\r\n\t\treturn this.rows();\r\n\t}\r\n\r\n}","import Renderer from '../Renderer.js';\r\nimport Helpers from '../../tools/Helpers.js';\r\n\r\nexport default class VirtualDomVertical extends Renderer{\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.verticalFillMode = \"fill\";\r\n\r\n\t\tthis.scrollTop = 0;\r\n\t\tthis.scrollLeft = 0;\r\n\r\n\t\tthis.vDomRowHeight = 20; //approximation of row heights for padding\r\n\r\n\t\tthis.vDomTop = 0; //hold position for first rendered row in the virtual DOM\r\n\t\tthis.vDomBottom = 0; //hold possition for last rendered row in the virtual DOM\r\n\r\n\t\tthis.vDomScrollPosTop = 0; //last scroll position of the vDom top;\r\n\t\tthis.vDomScrollPosBottom = 0; //last scroll position of the vDom bottom;\r\n\r\n\t\tthis.vDomTopPad = 0; //hold value of padding for top of virtual DOM\r\n\t\tthis.vDomBottomPad = 0; //hold value of padding for bottom of virtual DOM\r\n\r\n\t\tthis.vDomMaxRenderChain = 90; //the maximum number of dom elements that can be rendered in 1 go\r\n\r\n\t\tthis.vDomWindowBuffer = 0; //window row buffer before removing elements, to smooth scrolling\r\n\r\n\t\tthis.vDomWindowMinTotalRows = 20; //minimum number of rows to be generated in virtual dom (prevent buffering issues on tables with tall rows)\r\n\t\tthis.vDomWindowMinMarginRows = 5; //minimum number of rows to be generated in virtual dom margin\r\n\r\n\t\tthis.vDomTopNewRows = []; //rows to normalize after appending to optimize render speed\r\n\t\tthis.vDomBottomNewRows = []; //rows to normalize after appending to optimize render speed\r\n\t}\r\n\r\n\t//////////////////////////////////////\r\n\t///////// Public Functions ///////////\r\n\t//////////////////////////////////////\r\n\r\n\tclearRows(){\r\n\t\tvar element = this.tableElement;\r\n\r\n\t\t// element.children.detach();\r\n\t\twhile(element.firstChild) element.removeChild(element.firstChild);\r\n\r\n\t\telement.style.paddingTop = \"\";\r\n\t\telement.style.paddingBottom = \"\";\r\n\t\telement.style.minWidth = \"\";\r\n\t\telement.style.minHeight = \"\";\r\n\t\telement.style.display = \"\";\r\n\t\telement.style.visibility = \"\";\r\n\r\n\t\tthis.elementVertical.scrollTop = 0;\r\n\t\tthis.elementVertical.scrollLeft = 0;\r\n\r\n\t\tthis.scrollTop = 0;\r\n\t\tthis.scrollLeft = 0;\r\n\r\n\t\tthis.vDomTop = 0;\r\n\t\tthis.vDomBottom = 0;\r\n\t\tthis.vDomTopPad = 0;\r\n\t\tthis.vDomBottomPad = 0;\r\n\t\tthis.vDomScrollPosTop = 0;\r\n\t\tthis.vDomScrollPosBottom = 0;\r\n\t}\r\n\r\n\trenderRows(){\r\n\t\tthis._virtualRenderFill();\r\n\t}\r\n\r\n\trerenderRows(callback){\r\n\t\tvar scrollTop = this.elementVertical.scrollTop;\r\n\t\tvar topRow = false;\r\n\t\tvar topOffset = false;\r\n\r\n\t\tvar left = this.table.rowManager.scrollLeft;\r\n\r\n\t\tvar rows = this.rows();\r\n\r\n\t\tfor(var i = this.vDomTop; i <= this.vDomBottom; i++){\r\n\r\n\t\t\tif(rows[i]){\r\n\t\t\t\tvar diff = scrollTop - rows[i].getElement().offsetTop;\r\n\r\n\t\t\t\tif(topOffset === false || Math.abs(diff) < topOffset){\r\n\t\t\t\t\ttopOffset = diff;\r\n\t\t\t\t\ttopRow = i;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(callback){\r\n\t\t\tcallback();\r\n\t\t}\r\n\r\n\t\tthis._virtualRenderFill((topRow === false ? this.rows.length - 1 : topRow), true, topOffset || 0);\r\n\r\n\t\tthis.scrollColumns(left);\r\n\t}\r\n\r\n\tscrollColumns(left){\r\n\t\tthis.table.rowManager.scrollHorizontal(left);\r\n\t}\r\n\r\n\tscrollRows(top, dir){\r\n\t\tvar topDiff = top - this.vDomScrollPosTop;\r\n\t\tvar bottomDiff = top - this.vDomScrollPosBottom;\r\n\t\tvar margin = this.vDomWindowBuffer * 2;\r\n\t\tvar rows = this.rows();\r\n\r\n\t\tthis.scrollTop = top;\r\n\r\n\t\tif(-topDiff > margin || bottomDiff > margin){\r\n\t\t\t//if big scroll redraw table;\r\n\t\t\tvar left = this.table.rowManager.scrollLeft;\r\n\t\t\tthis._virtualRenderFill(Math.floor((this.elementVertical.scrollTop / this.elementVertical.scrollHeight) * rows.length));\r\n\t\t\tthis.scrollColumns(left);\r\n\t\t}else{\r\n\r\n\t\t\tif(dir){\r\n\t\t\t\t//scrolling up\r\n\t\t\t\tif(topDiff < 0){\r\n\t\t\t\t\tthis._addTopRow(rows, -topDiff);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(bottomDiff < 0){\r\n\t\t\t\t\t//hide bottom row if needed\r\n\t\t\t\t\tif(this.vDomScrollHeight - this.scrollTop > this.vDomWindowBuffer){\r\n\t\t\t\t\t\tthis._removeBottomRow(rows, -bottomDiff);\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tthis.vDomScrollPosBottom = this.scrollTop;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\r\n\t\t\t\tif(bottomDiff >= 0){\r\n\t\t\t\t\tthis._addBottomRow(rows, bottomDiff);\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//scrolling down\r\n\t\t\t\tif(topDiff >= 0){\r\n\t\t\t\t\t//hide top row if needed\r\n\t\t\t\t\tif(this.scrollTop > this.vDomWindowBuffer){\r\n\t\t\t\t\t\tthis._removeTopRow(rows, topDiff);\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tthis.vDomScrollPosTop = this.scrollTop;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tresize(){\r\n\t\tthis.vDomWindowBuffer = this.table.options.renderVerticalBuffer || this.elementVertical.clientHeight;\r\n\t}\r\n\r\n\tscrollToRowNearestTop(row){\r\n\t\tvar rowIndex = this.rows().indexOf(row);\r\n\r\n\t\treturn !(Math.abs(this.vDomTop - rowIndex) > Math.abs(this.vDomBottom - rowIndex));\r\n\t}\r\n\r\n\tscrollToRow(row){\r\n\t\tvar index = this.rows().indexOf(row);\r\n\r\n\t\tif(index > -1){\r\n\t\t\tthis._virtualRenderFill(index, true);\r\n\t\t}\r\n\t}\r\n\r\n\tvisibleRows(includingBuffer){\r\n\t\tvar topEdge = this.elementVertical.scrollTop,\r\n\t\tbottomEdge = this.elementVertical.clientHeight + topEdge,\r\n\t\ttopFound = false,\r\n\t\ttopRow = 0,\r\n\t\tbottomRow = 0,\r\n\t\trows = this.rows();\r\n\r\n\t\tif(includingBuffer){\r\n\t\t\ttopRow = this.vDomTop;\r\n\t\t\tbottomRow = this.vDomBottom;\r\n\t\t}else{\r\n\t\t\tfor(var i = this.vDomTop; i <= this.vDomBottom; i++){\r\n\t\t\t\tif(rows[i]){\r\n\t\t\t\t\tif(!topFound){\r\n\t\t\t\t\t\tif((topEdge - rows[i].getElement().offsetTop) >= 0){\r\n\t\t\t\t\t\t\ttopRow = i;\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\ttopFound = true;\r\n\r\n\t\t\t\t\t\t\tif(bottomEdge - rows[i].getElement().offsetTop >= 0){\r\n\t\t\t\t\t\t\t\tbottomRow = i;\r\n\t\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tif(bottomEdge - rows[i].getElement().offsetTop >= 0){\r\n\t\t\t\t\t\t\tbottomRow = i;\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn rows.slice(topRow, bottomRow + 1);\r\n\t}\r\n\r\n\t//////////////////////////////////////\r\n\t//////// Internal Rendering //////////\r\n\t//////////////////////////////////////\r\n\r\n\t//full virtual render\r\n\t_virtualRenderFill(position, forceMove, offset){\r\n\t\tvar\telement = this.tableElement,\r\n\t\tholder = this.elementVertical,\r\n\t\ttopPad = 0,\r\n\t\trowsHeight = 0,\r\n\t\theightOccupied = 0,\r\n\t\ttopPadHeight = 0,\r\n\t\ti = 0,\r\n\t\trows = this.rows(),\r\n\t\trowsCount = rows.length,\r\n\t\tcontainerHeight = this.elementVertical.clientHeight;\r\n\r\n\t\tposition = position || 0;\r\n\r\n\t\toffset = offset || 0;\r\n\r\n\t\tif(!position){\r\n\t\t\tthis.clear();\r\n\t\t}else{\r\n\t\t\twhile(element.firstChild) element.removeChild(element.firstChild);\r\n\r\n\t\t\t//check if position is too close to bottom of table\r\n\t\t\theightOccupied = (rowsCount - position + 1) * this.vDomRowHeight;\r\n\r\n\t\t\tif(heightOccupied < containerHeight){\r\n\t\t\t\tposition -= Math.ceil((containerHeight - heightOccupied) / this.vDomRowHeight);\r\n\t\t\t\tif(position < 0){\r\n\t\t\t\t\tposition = 0;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t//calculate initial pad\r\n\t\t\ttopPad = Math.min(Math.max(Math.floor(this.vDomWindowBuffer / this.vDomRowHeight), this.vDomWindowMinMarginRows), position);\r\n\t\t\tposition -= topPad;\r\n\t\t}\r\n\r\n\t\tif(rowsCount && Helpers.elVisible(this.elementVertical)){\r\n\t\t\tthis.vDomTop = position;\r\n\r\n\t\t\tthis.vDomBottom = position -1;\r\n\r\n\t\t\twhile ((rowsHeight <= containerHeight + this.vDomWindowBuffer || i < this.vDomWindowMinTotalRows) && this.vDomBottom < rowsCount -1){\r\n\t\t\t\tvar index = this.vDomBottom + 1,\r\n\t\t\t\trow = rows[index],\r\n\t\t\t\trowHeight = 0;\r\n\r\n\t\t\t\tthis.styleRow(row, index);\r\n\r\n\t\t\t\telement.appendChild(row.getElement());\r\n\r\n\t\t\t\trow.initialize();\r\n\r\n\t\t\t\tif(!row.heightInitialized){\r\n\t\t\t\t\trow.normalizeHeight(true);\r\n\t\t\t\t}\r\n\r\n\t\t\t\trowHeight = row.getHeight();\r\n\r\n\t\t\t\tif(i < topPad){\r\n\t\t\t\t\ttopPadHeight += rowHeight;\r\n\t\t\t\t}else{\r\n\t\t\t\t\trowsHeight += rowHeight;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(rowHeight > this.vDomWindowBuffer){\r\n\t\t\t\t\tthis.vDomWindowBuffer = rowHeight * 2;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.vDomBottom ++;\r\n\t\t\t\ti++;\r\n\t\t\t}\r\n\r\n\t\t\tif(!position){\r\n\t\t\t\tthis.vDomTopPad = 0;\r\n\t\t\t\t//adjust rowheight to match average of rendered elements\r\n\t\t\t\tthis.vDomRowHeight = Math.floor((rowsHeight + topPadHeight) / i);\r\n\t\t\t\tthis.vDomBottomPad = this.vDomRowHeight * (rowsCount - this.vDomBottom -1);\r\n\r\n\t\t\t\tthis.vDomScrollHeight = topPadHeight + rowsHeight + this.vDomBottomPad - containerHeight;\r\n\t\t\t}else{\r\n\t\t\t\tthis.vDomTopPad = !forceMove ? this.scrollTop - topPadHeight : (this.vDomRowHeight * this.vDomTop) + offset;\r\n\t\t\t\tthis.vDomBottomPad = this.vDomBottom == rowsCount-1 ? 0 : Math.max(this.vDomScrollHeight - this.vDomTopPad - rowsHeight - topPadHeight, 0);\r\n\t\t\t}\r\n\r\n\t\t\telement.style.paddingTop = this.vDomTopPad + \"px\";\r\n\t\t\telement.style.paddingBottom = this.vDomBottomPad + \"px\";\r\n\r\n\t\t\tif(forceMove){\r\n\t\t\t\tthis.scrollTop = this.vDomTopPad + (topPadHeight) + offset - (this.elementVertical.scrollWidth > this.elementVertical.clientWidth ? this.elementVertical.offsetHeight - containerHeight : 0);\r\n\t\t\t}\r\n\r\n\t\t\tthis.scrollTop = Math.min(this.scrollTop, this.elementVertical.scrollHeight - containerHeight);\r\n\r\n\t\t\t//adjust for horizontal scrollbar if present (and not at top of table)\r\n\t\t\tif(this.elementVertical.scrollWidth > this.elementVertical.offsetWidth && forceMove){\r\n\t\t\t\tthis.scrollTop += this.elementVertical.offsetHeight - containerHeight;\r\n\t\t\t}\r\n\r\n\t\t\tthis.vDomScrollPosTop = this.scrollTop;\r\n\t\t\tthis.vDomScrollPosBottom = this.scrollTop;\r\n\r\n\t\t\tholder.scrollTop = this.scrollTop;\r\n\r\n\t\t\tthis.dispatch(\"render-virtual-fill\");\r\n\t\t}\r\n\t}\r\n\r\n\t_addTopRow(rows, fillableSpace){\r\n\t\tvar table = this.tableElement,\r\n\t\taddedRows = [],\r\n\t\tpaddingAdjust = 0,\r\n\t\tindex = this.vDomTop -1,\r\n\t\ti = 0;\r\n\r\n\t\twhile(true){\r\n\t\t\tif(this.vDomTop){\r\n\t\t\t\tlet row = rows[index],\r\n\t\t\t\trowHeight, initialized;\r\n\r\n\t\t\t\tif(row && i < this.vDomMaxRenderChain){\r\n\t\t\t\t\trowHeight = row.getHeight() || this.vDomRowHeight;\r\n\t\t\t\t\tinitialized = row.initialized;\r\n\r\n\t\t\t\t\tif(fillableSpace >= rowHeight){\r\n\r\n\t\t\t\t\t\tthis.styleRow(row, index);\r\n\t\t\t\t\t\ttable.insertBefore(row.getElement(), table.firstChild);\r\n\r\n\t\t\t\t\t\tif(!row.initialized || !row.heightInitialized){\r\n\t\t\t\t\t\t\taddedRows.push(row);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\trow.initialize();\r\n\r\n\t\t\t\t\t\tif(!initialized){\r\n\t\t\t\t\t\t\trowHeight = row.getElement().offsetHeight;\r\n\r\n\t\t\t\t\t\t\tif(rowHeight > this.vDomWindowBuffer){\r\n\t\t\t\t\t\t\t\tthis.vDomWindowBuffer = rowHeight * 2;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tfillableSpace -= rowHeight;\r\n\t\t\t\t\t\tpaddingAdjust += rowHeight;\r\n\r\n\t\t\t\t\t\tthis.vDomTop--;\r\n\t\t\t\t\t\tindex--;\r\n\t\t\t\t\t\ti++;\r\n\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}else{\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\r\n\t\t\t}else{\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfor (let row of addedRows){\r\n\t\t\trow.clearCellHeight();\r\n\t\t}\r\n\r\n\t\tthis._quickNormalizeRowHeight(addedRows);\r\n\r\n\t\tif(paddingAdjust){\r\n\t\t\tthis.vDomTopPad -= paddingAdjust;\r\n\r\n\t\t\tif(this.vDomTopPad < 0){\r\n\t\t\t\tthis.vDomTopPad = index * this.vDomRowHeight;\r\n\t\t\t}\r\n\r\n\t\t\tif(index < 1){\r\n\t\t\t\tthis.vDomTopPad = 0;\r\n\t\t\t}\r\n\r\n\t\t\ttable.style.paddingTop = this.vDomTopPad + \"px\";\r\n\t\t\tthis.vDomScrollPosTop -= paddingAdjust;\r\n\t\t}\r\n\t}\r\n\r\n\t_removeTopRow(rows, fillableSpace){\r\n\t\tvar removableRows = [],\r\n\t\tpaddingAdjust = 0,\r\n\t\ti = 0;\r\n\r\n\t\twhile(true){\r\n\t\t\tlet row = rows[this.vDomTop],\r\n\t\t\trowHeight, diff;\r\n\r\n\t\t\tif(row && i < this.vDomMaxRenderChain){\r\n\t\t\t\trowHeight = row.getHeight() || this.vDomRowHeight;\r\n\r\n\t\t\t\tif(fillableSpace >= rowHeight){\r\n\t\t\t\t\tthis.vDomTop++;\r\n\r\n\t\t\t\t\tfillableSpace -= rowHeight;\r\n\t\t\t\t\tpaddingAdjust += rowHeight;\r\n\r\n\t\t\t\t\tremovableRows.push(row);\r\n\t\t\t\t\ti++;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfor (let row of removableRows){\r\n\t\t\tlet rowEl = row.getElement();\r\n\r\n\t\t\tif(rowEl.parentNode){\r\n\t\t\t\trowEl.parentNode.removeChild(rowEl);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(paddingAdjust){\r\n\t\t\tthis.vDomTopPad += paddingAdjust;\r\n\t\t\tthis.tableElement.style.paddingTop = this.vDomTopPad + \"px\";\r\n\t\t\tthis.vDomScrollPosTop += this.vDomTop ? paddingAdjust : paddingAdjust + this.vDomWindowBuffer;\r\n\t\t}\r\n\t}\r\n\r\n\t_addBottomRow(rows, fillableSpace){\r\n\t\tvar table = this.tableElement,\r\n\t\taddedRows = [],\r\n\t\tpaddingAdjust = 0,\r\n\t\tindex = this.vDomBottom + 1,\r\n\t\ti = 0;\r\n\r\n\t\twhile(true){\r\n\t\t\tlet row = rows[index],\r\n\t\t\trowHeight, initialized;\r\n\r\n\t\t\tif(row && i < this.vDomMaxRenderChain){\r\n\t\t\t\trowHeight = row.getHeight() || this.vDomRowHeight;\r\n\t\t\t\tinitialized = row.initialized;\r\n\r\n\t\t\t\tif(fillableSpace >= rowHeight){\r\n\r\n\t\t\t\t\tthis.styleRow(row, index);\r\n\t\t\t\t\ttable.appendChild(row.getElement());\r\n\r\n\t\t\t\t\tif(!row.initialized || !row.heightInitialized){\r\n\t\t\t\t\t\taddedRows.push(row);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\trow.initialize();\r\n\r\n\t\t\t\t\tif(!initialized){\r\n\t\t\t\t\t\trowHeight = row.getElement().offsetHeight;\r\n\r\n\t\t\t\t\t\tif(rowHeight > this.vDomWindowBuffer){\r\n\t\t\t\t\t\t\tthis.vDomWindowBuffer = rowHeight * 2;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tfillableSpace -= rowHeight;\r\n\t\t\t\t\tpaddingAdjust += rowHeight;\r\n\r\n\t\t\t\t\tthis.vDomBottom++;\r\n\t\t\t\t\tindex++;\r\n\t\t\t\t\ti++;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfor (let row of addedRows){\r\n\t\t\trow.clearCellHeight();\r\n\t\t}\r\n\r\n\t\tthis._quickNormalizeRowHeight(addedRows);\r\n\r\n\t\tif(paddingAdjust){\r\n\t\t\tthis.vDomBottomPad -= paddingAdjust;\r\n\r\n\t\t\tif(this.vDomBottomPad < 0 || index == rows.length -1){\r\n\t\t\t\tthis.vDomBottomPad = 0;\r\n\t\t\t}\r\n\r\n\t\t\ttable.style.paddingBottom = this.vDomBottomPad + \"px\";\r\n\t\t\tthis.vDomScrollPosBottom += paddingAdjust;\r\n\t\t}\r\n\t}\r\n\r\n\t_removeBottomRow(rows, fillableSpace){\r\n\t\tvar removableRows = [],\r\n\t\tpaddingAdjust = 0,\r\n\t\ti = 0;\r\n\r\n\t\twhile(true){\r\n\t\t\tlet row = rows[this.vDomBottom],\r\n\t\t\trowHeight, diff;\r\n\r\n\t\t\tif(row && i < this.vDomMaxRenderChain){\r\n\t\t\t\trowHeight = row.getHeight() || this.vDomRowHeight;\r\n\r\n\t\t\t\tif(fillableSpace >= rowHeight){\r\n\t\t\t\t\tthis.vDomBottom --;\r\n\r\n\t\t\t\t\tfillableSpace -= rowHeight;\r\n\t\t\t\t\tpaddingAdjust += rowHeight;\r\n\r\n\t\t\t\t\tremovableRows.push(row);\r\n\t\t\t\t\ti++;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfor (let row of removableRows){\r\n\t\t\tlet rowEl = row.getElement();\r\n\r\n\t\t\tif(rowEl.parentNode){\r\n\t\t\t\trowEl.parentNode.removeChild(rowEl);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(paddingAdjust){\r\n\t\t\tthis.vDomBottomPad += paddingAdjust;\r\n\r\n\t\t\tif(this.vDomBottomPad < 0){\r\n\t\t\t\tthis.vDomBottomPad = 0;\r\n\t\t\t}\r\n\r\n\t\t\tthis.tableElement.style.paddingBottom = this.vDomBottomPad + \"px\";\r\n\t\t\tthis.vDomScrollPosBottom -= paddingAdjust;\r\n\t\t}\r\n\t}\r\n\r\n\t_quickNormalizeRowHeight(rows){\r\n\t\tfor(let row of rows){\r\n\t\t\trow.calcHeight();\r\n\t\t}\r\n\r\n\t\tfor(let row of rows){\r\n\t\t\trow.setCellHeight();\r\n\t\t}\r\n\t}\r\n}","import CoreFeature from './CoreFeature.js';\r\nimport Row from './row/Row.js';\r\nimport RowComponent from './row/RowComponent.js';\r\nimport Helpers from './tools/Helpers.js';\r\n\r\nimport RendererBasicVertical from './rendering/renderers/BasicVertical.js';\r\nimport RendererVirtualDomVertical from './rendering/renderers/VirtualDomVertical.js';\r\n\r\nexport default class RowManager extends CoreFeature{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.element = this.createHolderElement(); //containing element\r\n\t\tthis.tableElement = this.createTableElement(); //table element\r\n\t\tthis.heightFixer = this.createTableElement(); //table element\r\n\r\n\t\tthis.firstRender = false; //handle first render\r\n\t\tthis.renderMode = \"virtual\"; //current rendering mode\r\n\t\tthis.fixedHeight = false; //current rendering mode\r\n\r\n\t\tthis.rows = []; //hold row data objects\r\n\t\tthis.activeRowsPipeline = []; //hold caluclation of active rows\r\n\t\tthis.activeRows = []; //rows currently available to on display in the table\r\n\t\tthis.activeRowsCount = 0; //count of active rows\r\n\r\n\t\tthis.displayRows = []; //rows currently on display in the table\r\n\t\tthis.displayRowsCount = 0; //count of display rows\r\n\r\n\t\tthis.scrollTop = 0;\r\n\t\tthis.scrollLeft = 0;\r\n\r\n\t\tthis.rowNumColumn = false; //hold column component for row number column\r\n\r\n\t\tthis.redrawBlock = false; //prevent redraws to allow multiple data manipulations becore continuing\r\n\t\tthis.redrawBlockRestoreConfig = false; //store latest redraw function calls for when redraw is needed\r\n\t\tthis.redrawBlockRederInPosition = false; //store latest redraw function calls for when redraw is needed\r\n\r\n\t\tthis.dataPipeline = []; //hold data pipeline tasks\r\n\t\tthis.displayPipeline = []; //hold data display pipeline tasks\r\n\r\n\t\tthis.renderer = null;\r\n\t}\r\n\r\n\t//////////////// Setup Functions /////////////////\r\n\r\n\tcreateHolderElement (){\r\n\t\tvar el = document.createElement(\"div\");\r\n\r\n\t\tel.classList.add(\"tabulator-tableHolder\");\r\n\t\tel.setAttribute(\"tabindex\", 0);\r\n\r\n\t\treturn el;\r\n\t}\r\n\r\n\tcreateTableElement (){\r\n\t\tvar el = document.createElement(\"div\");\r\n\r\n\t\tel.classList.add(\"tabulator-table\");\r\n\r\n\t\treturn el;\r\n\t}\r\n\r\n\t//return containing element\r\n\tgetElement(){\r\n\t\treturn this.element;\r\n\t}\r\n\r\n\t//return table element\r\n\tgetTableElement(){\r\n\t\treturn this.tableElement;\r\n\t}\r\n\r\n\t//return position of row in table\r\n\tgetRowPosition(row, active){\r\n\t\tif(active){\r\n\t\t\treturn this.activeRows.indexOf(row);\r\n\t\t}else{\r\n\t\t\treturn this.rows.indexOf(row);\r\n\t\t}\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tthis.initializeRenderer();\r\n\r\n\t\t//initialize manager\r\n\t\tthis.element.appendChild(this.tableElement);\r\n\r\n\t\tthis.firstRender = true;\r\n\r\n\t\t//scroll header along with table body\r\n\t\tthis.element.addEventListener(\"scroll\", () => {\r\n\t\t\tvar left = this.element.scrollLeft,\r\n\t\t\tleftDir = this.scrollLeft > left,\r\n\t\t\ttop = this.element.scrollTop,\r\n\t\t\ttopDir = this.scrollTop > top;\r\n\r\n\t\t\t//handle horizontal scrolling\r\n\t\t\tif(this.scrollLeft != left){\r\n\t\t\t\tthis.scrollLeft = left;\r\n\r\n\t\t\t\tthis.dispatch(\"scroll-horizontal\", left, leftDir);\r\n\t\t\t\tthis.dispatchExternal(\"scrollHorizontal\", left, leftDir);\r\n\t\t\t}\r\n\r\n\t\t\t//handle verical scrolling\r\n\t\t\tif(this.scrollTop != top){\r\n\t\t\t\tthis.scrollTop = top;\r\n\r\n\t\t\t\tthis.renderer.scrollRows(top, topDir);\r\n\r\n\t\t\t\tthis.dispatch(\"scroll-vertical\", top, topDir);\r\n\t\t\t\tthis.dispatchExternal(\"scrollVertical\", top, topDir);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t////////////////// Row Manipulation //////////////////\r\n\tfindRow(subject){\r\n\t\tif(typeof subject == \"object\"){\r\n\t\t\tif(subject instanceof Row){\r\n\t\t\t\t//subject is row element\r\n\t\t\t\treturn subject;\r\n\t\t\t}else if(subject instanceof RowComponent){\r\n\t\t\t\t//subject is public row component\r\n\t\t\t\treturn subject._getSelf() || false;\r\n\t\t\t}else if(typeof HTMLElement !== \"undefined\" && subject instanceof HTMLElement){\r\n\t\t\t\t//subject is a HTML element of the row\r\n\t\t\t\tlet match = this.rows.find((row) => {\r\n\t\t\t\t\treturn row.getElement() === subject;\r\n\t\t\t\t});\r\n\r\n\t\t\t\treturn match || false;\r\n\t\t\t}\r\n\t\t}else if(typeof subject == \"undefined\" || subject === null){\r\n\t\t\treturn false;\r\n\t\t}else{\r\n\t\t\t//subject should be treated as the index of the row\r\n\t\t\tlet match = this.rows.find((row) => {\r\n\t\t\t\treturn row.data[this.table.options.index] == subject;\r\n\t\t\t});\r\n\r\n\t\t\treturn match || false;\r\n\t\t}\r\n\r\n\t\t//catch all for any other type of input\r\n\t\treturn false;\r\n\t}\r\n\r\n\tgetRowFromDataObject(data){\r\n\t\tvar match = this.rows.find((row) => {\r\n\t\t\treturn row.data === data;\r\n\t\t});\r\n\r\n\t\treturn match || false;\r\n\t}\r\n\r\n\tgetRowFromPosition(position, active){\r\n\t\tif(active){\r\n\t\t\treturn this.activeRows[position];\r\n\t\t}else{\r\n\t\t\treturn this.rows[position];\r\n\t\t}\r\n\t}\r\n\r\n\tscrollToRow(row, position, ifVisible){\r\n\t\treturn this.renderer.scrollToRowPosition(row, position, ifVisible);\r\n\t}\r\n\r\n\t////////////////// Data Handling //////////////////\r\n\tsetData(data, renderInPosition, columnsChanged){\r\n\t\treturn new Promise((resolve, reject)=>{\r\n\t\t\tif(renderInPosition && this.getDisplayRows().length){\r\n\t\t\t\tif(this.table.options.pagination){\r\n\t\t\t\t\tthis._setDataActual(data, true);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tthis.reRenderInPosition(() => {\r\n\t\t\t\t\t\tthis._setDataActual(data);\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tif(this.table.options.autoColumns && columnsChanged){\r\n\t\t\t\t\tthis.table.columnManager.generateColumnsFromRowData(data);\r\n\t\t\t\t}\r\n\t\t\t\tthis.resetScroll();\r\n\r\n\t\t\t\tthis._setDataActual(data);\r\n\r\n\t\t\t}\r\n\r\n\t\t\tresolve();\r\n\t\t});\r\n\t}\r\n\r\n\t_setDataActual(data, renderInPosition){\r\n\t\tthis.dispatchExternal(\"dataProcessing\", data);\r\n\r\n\t\tthis._wipeElements();\r\n\r\n\t\tif(Array.isArray(data)){\r\n\t\t\tthis.dispatch(\"data-processing\", data);\r\n\r\n\t\t\tdata.forEach((def, i) => {\r\n\t\t\t\tif(def && typeof def === \"object\"){\r\n\t\t\t\t\tvar row = new Row(def, this);\r\n\t\t\t\t\tthis.rows.push(row);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.warn(\"Data Loading Warning - Invalid row data detected and ignored, expecting object but received:\", def);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tthis.refreshActiveData(false, false, renderInPosition);\r\n\r\n\t\t\tthis.dispatch(\"data-processed\", data);\r\n\t\t\tthis.dispatchExternal(\"dataProcesed\", data);\r\n\t\t}else{\r\n\t\t\tconsole.error(\"Data Loading Error - Unable to process data due to invalid data type \\nExpecting: array \\nReceived: \", typeof data, \"\\nData: \", data);\r\n\t\t}\r\n\t}\r\n\r\n\t_wipeElements(){\r\n\t\tthis.dispatch(\"rows-wipe\");\r\n\r\n\t\tthis.rows.forEach((row) => {\r\n\t\t\trow.wipe();\r\n\t\t});\r\n\r\n\t\tthis.rows = [];\r\n\t\tthis.activeRows = [];\r\n\t\tthis.activeRowsPipeline = [];\r\n\t\tthis.activeRowsCount = 0;\r\n\t\tthis.displayRows = [];\r\n\t\tthis.displayRowsCount = 0;\r\n\r\n\t\tthis.adjustTableSize();\r\n\t}\r\n\r\n\tdeleteRow(row, blockRedraw){\r\n\t\tvar allIndex = this.rows.indexOf(row),\r\n\t\tactiveIndex = this.activeRows.indexOf(row);\r\n\r\n\t\tif(activeIndex > -1){\r\n\t\t\tthis.activeRows.splice(activeIndex, 1);\r\n\t\t}\r\n\r\n\t\tif(allIndex > -1){\r\n\t\t\tthis.rows.splice(allIndex, 1);\r\n\t\t}\r\n\r\n\t\tthis.setActiveRows(this.activeRows);\r\n\r\n\t\tthis.displayRowIterator((rows) => {\r\n\t\t\tvar displayIndex = rows.indexOf(row);\r\n\r\n\t\t\tif(displayIndex > -1){\r\n\t\t\t\trows.splice(displayIndex, 1);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tif(!blockRedraw){\r\n\t\t\tthis.reRenderInPosition();\r\n\t\t}\r\n\r\n\t\tthis.regenerateRowNumbers();\r\n\r\n\t\tthis.dispatchExternal(\"rowDeleted\", row.getComponent());\r\n\r\n\t\tif(this.subscribedExternal(\"dataChanged\")){\r\n\t\t\tthis.dispatchExternal(\"dataChanged\", this.getData());\r\n\t\t}\r\n\t}\r\n\r\n\taddRow(data, pos, index, blockRedraw){\r\n\t\tvar row = this.addRowActual(data, pos, index, blockRedraw);\r\n\r\n\t\tthis.dispatch(\"row-added\", row, data, pos, index);\r\n\r\n\t\treturn row;\r\n\t}\r\n\r\n\t//add multiple rows\r\n\taddRows(data, pos, index){\r\n\t\tvar length = 0,\r\n\t\trows = [];\r\n\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tpos = this.findAddRowPos(pos);\r\n\r\n\t\t\tif(!Array.isArray(data)){\r\n\t\t\t\tdata = [data];\r\n\t\t\t}\r\n\r\n\t\t\tlength = data.length - 1;\r\n\r\n\t\t\tif((typeof index == \"undefined\" && pos) || (typeof index !== \"undefined\" && !pos)){\r\n\t\t\t\tdata.reverse();\r\n\t\t\t}\r\n\r\n\t\t\tdata.forEach((item, i) => {\r\n\t\t\t\tvar row = this.addRow(item, pos, index, true);\r\n\t\t\t\trows.push(row);\r\n\t\t\t});\r\n\r\n\t\t\tif(this.subscribed(\"row-added\")){\r\n\t\t\t\tthis.dispatch(\"row-added\", row, data, pos, index);\r\n\t\t\t}else{\r\n\t\t\t\tthis.reRenderInPosition();\r\n\t\t\t}\r\n\r\n\t\t\tthis.regenerateRowNumbers();\r\n\r\n\t\t\tresolve(rows);\r\n\t\t});\r\n\t}\r\n\r\n\tfindAddRowPos(pos){\r\n\t\tif(typeof pos === \"undefined\"){\r\n\t\t\tpos = this.table.options.addRowPos;\r\n\t\t}\r\n\r\n\t\tif(pos === \"pos\"){\r\n\t\t\tpos = true;\r\n\t\t}\r\n\r\n\t\tif(pos === \"bottom\"){\r\n\t\t\tpos = false;\r\n\t\t}\r\n\r\n\t\treturn pos;\r\n\t}\r\n\r\n\taddRowActual(data, pos, index, blockRedraw){\r\n\t\tvar row = data instanceof Row ? data : new Row(data || {}, this),\r\n\t\ttop = this.findAddRowPos(pos),\r\n\t\tallIndex = -1,\r\n\t\tactiveIndex, chainResult;\r\n\r\n\t\tif(!index){\r\n\t\t\tchainResult = this.chain(\"row-adding-position\", [row, top], null, {index, top});\r\n\r\n\t\t\tindex = chainResult.index;\r\n\t\t\ttop = chainResult.top;\r\n\t\t}\r\n\r\n\t\tif(typeof index !== \"undefined\"){\r\n\t\t\tindex = this.findRow(index);\r\n\t\t}\r\n\r\n\t\tindex = this.chain(\"row-adding-index\", [row, index, top], null, index);\r\n\r\n\t\tif(index){\r\n\t\t\tallIndex = this.rows.indexOf(index);\r\n\t\t}\r\n\r\n\t\tif(index && allIndex > -1){\r\n\t\t\tactiveIndex = this.activeRows.indexOf(index);\r\n\r\n\t\t\tthis.displayRowIterator(function(rows){\r\n\t\t\t\tvar displayIndex = rows.indexOf(index);\r\n\r\n\t\t\t\tif(displayIndex > -1){\r\n\t\t\t\t\trows.splice((top ? displayIndex : displayIndex + 1), 0, row);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tif(activeIndex > -1){\r\n\t\t\t\tthis.activeRows.splice((top ? activeIndex : activeIndex + 1), 0, row);\r\n\t\t\t}\r\n\r\n\t\t\tthis.rows.splice((top ? allIndex : allIndex + 1), 0, row);\r\n\r\n\t\t}else{\r\n\r\n\t\t\tif(top){\r\n\r\n\t\t\t\tthis.displayRowIterator(function(rows){\r\n\t\t\t\t\trows.unshift(row);\r\n\t\t\t\t});\r\n\r\n\t\t\t\tthis.activeRows.unshift(row);\r\n\t\t\t\tthis.rows.unshift(row);\r\n\t\t\t}else{\r\n\t\t\t\tthis.displayRowIterator(function(rows){\r\n\t\t\t\t\trows.push(row);\r\n\t\t\t\t});\r\n\r\n\t\t\t\tthis.activeRows.push(row);\r\n\t\t\t\tthis.rows.push(row);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.setActiveRows(this.activeRows);\r\n\r\n\t\tthis.dispatchExternal(\"rowAdded\", row.getComponent());\r\n\r\n\t\tif(this.subscribedExternal(\"dataChanged\")){\r\n\t\t\tthis.dispatchExternal(\"dataChanged\", this.table.rowManager.getData());\r\n\t\t}\r\n\r\n\t\tif(!blockRedraw){\r\n\t\t\tthis.reRenderInPosition();\r\n\t\t}\r\n\r\n\t\treturn row;\r\n\t}\r\n\r\n\tmoveRow(from, to, after){\r\n\t\tthis.dispatch(\"row-move\", from, to, after);\r\n\r\n\t\tthis.moveRowActual(from, to, after);\r\n\r\n\t\tthis.regenerateRowNumbers();\r\n\r\n\t\tthis.dispatch(\"row-moved\", from, to, after);\r\n\t\tthis.dispatchExternal(\"rowMoved\", from.getComponent());\r\n\t}\r\n\r\n\tmoveRowActual(from, to, after){\r\n\t\tthis.moveRowInArray(this.rows, from, to, after);\r\n\t\tthis.moveRowInArray(this.activeRows, from, to, after);\r\n\r\n\t\tthis.displayRowIterator((rows) => {\r\n\t\t\tthis.moveRowInArray(rows, from, to, after);\r\n\t\t});\r\n\r\n\t\tthis.dispatch(\"row-moving\", from, to, after);\r\n\t}\r\n\r\n\tmoveRowInArray(rows, from, to, after){\r\n\t\tvar\tfromIndex, toIndex, start, end;\r\n\r\n\t\tif(from !== to){\r\n\r\n\t\t\tfromIndex = rows.indexOf(from);\r\n\r\n\t\t\tif (fromIndex > -1) {\r\n\r\n\t\t\t\trows.splice(fromIndex, 1);\r\n\r\n\t\t\t\ttoIndex = rows.indexOf(to);\r\n\r\n\t\t\t\tif (toIndex > -1) {\r\n\r\n\t\t\t\t\tif(after){\r\n\t\t\t\t\t\trows.splice(toIndex+1, 0, from);\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\trows.splice(toIndex, 0, from);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}else{\r\n\t\t\t\t\trows.splice(fromIndex, 0, from);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t//restyle rows\r\n\t\t\tif(rows === this.getDisplayRows()){\r\n\r\n\t\t\t\tstart = fromIndex < toIndex ? fromIndex : toIndex;\r\n\t\t\t\tend = toIndex > fromIndex ? toIndex : fromIndex +1;\r\n\r\n\t\t\t\tfor(let i = start; i <= end; i++){\r\n\t\t\t\t\tif(rows[i]){\r\n\t\t\t\t\t\tthis.styleRow(rows[i], i);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tclearData(){\r\n\t\tthis.setData([]);\r\n\t}\r\n\r\n\tgetRowIndex(row){\r\n\t\treturn this.findRowIndex(row, this.rows);\r\n\t}\r\n\r\n\tgetDisplayRowIndex(row){\r\n\t\tvar index = this.getDisplayRows().indexOf(row);\r\n\t\treturn index > -1 ? index : false;\r\n\t}\r\n\r\n\tnextDisplayRow(row, rowOnly){\r\n\t\tvar index = this.getDisplayRowIndex(row),\r\n\t\tnextRow = false;\r\n\r\n\r\n\t\tif(index !== false && index < this.displayRowsCount -1){\r\n\t\t\tnextRow = this.getDisplayRows()[index+1];\r\n\t\t}\r\n\r\n\t\tif(nextRow && (!(nextRow instanceof Row) || nextRow.type != \"row\")){\r\n\t\t\treturn this.nextDisplayRow(nextRow, rowOnly);\r\n\t\t}\r\n\r\n\t\treturn nextRow;\r\n\t}\r\n\r\n\tprevDisplayRow(row, rowOnly){\r\n\t\tvar index = this.getDisplayRowIndex(row),\r\n\t\tprevRow = false;\r\n\r\n\t\tif(index){\r\n\t\t\tprevRow = this.getDisplayRows()[index-1];\r\n\t\t}\r\n\r\n\t\tif(rowOnly && prevRow && (!(prevRow instanceof Row) || prevRow.type != \"row\")){\r\n\t\t\treturn this.prevDisplayRow(prevRow, rowOnly);\r\n\t\t}\r\n\r\n\t\treturn prevRow;\r\n\t}\r\n\r\n\tfindRowIndex(row, list){\r\n\t\tvar rowIndex;\r\n\r\n\t\trow = this.findRow(row);\r\n\r\n\t\tif(row){\r\n\t\t\trowIndex = list.indexOf(row);\r\n\r\n\t\t\tif(rowIndex > -1){\r\n\t\t\t\treturn rowIndex;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t}\r\n\r\n\tgetData(active, transform){\r\n\t\tvar output = [],\r\n\t\trows = this.getRows(active);\r\n\r\n\t\trows.forEach(function(row){\r\n\t\t\tif(row.type == \"row\"){\r\n\t\t\t\toutput.push(row.getData(transform || \"data\"));\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tgetComponents(active){\r\n\t\tvar\toutput = [],\r\n\t\trows = this.getRows(active);\r\n\r\n\t\trows.forEach(function(row){\r\n\t\t\toutput.push(row.getComponent());\r\n\t\t});\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tgetDataCount(active){\r\n\t\tvar rows = this.getRows(active);\r\n\r\n\t\treturn rows.length;\r\n\t}\r\n\r\n\tscrollHorizontal(left){\r\n\t\tthis.scrollLeft = left;\r\n\t\tthis.element.scrollLeft = left;\r\n\r\n\t\tthis.dispatch(\"scroll-horizontal\", left);\r\n\t}\r\n\r\n\tregisterDataPipelineHandler(handler, priority){\r\n\t\tif(typeof priority !== \"undefined\"){\r\n\t\t\tthis.dataPipeline.push({handler, priority})\r\n\t\t\tthis.dataPipeline.sort((a, b) => {\r\n\t\t\t\treturn a.priority - b.priority;\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tconsole.error(\"Data pipeline handlers must have a priority in order to be registered\")\r\n\t\t}\r\n\t}\r\n\r\n\tregisterDisplayPipelineHandler(handler, priority){\r\n\t\tif(typeof priority !== \"undefined\"){\r\n\t\t\tthis.displayPipeline.push({handler, priority})\r\n\t\t\tthis.displayPipeline.sort((a, b) => {\r\n\t\t\t\treturn a.priority - b.priority;\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tconsole.error(\"Display pipeline handlers must have a priority in order to be registered\")\r\n\t\t}\r\n\t}\r\n\r\n\t//set active data set\r\n\trefreshActiveData(handler, skipStage, renderInPosition){\r\n\t\tvar table = this.table,\r\n\t\tstage = \"\",\r\n\t\tindex = 0,\r\n\t\tcascadeOrder = [\"all\", \"dataPipeline\", \"display\", \"displayPipeline\", \"end\"],\r\n\t\tdisplayIndex;\r\n\r\n\r\n\t\tif(typeof handler === \"function\"){\r\n\t\t\tindex = this.dataPipeline.findIndex((item) => {\r\n\t\t\t\treturn item.handler === handler;\r\n\t\t\t});\r\n\r\n\t\t\tif(index > -1){\r\n\t\t\t\tstage = \"dataPipeline\";\r\n\r\n\t\t\t\tif(skipStage){\r\n\t\t\t\t\tif(index == this.dataPipeline.length - 1){\r\n\t\t\t\t\t\tstage = \"display\";\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tindex++;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tindex = this.displayPipeline.findIndex((item) => {\r\n\t\t\t\t\treturn item.handler === handler;\r\n\t\t\t\t});\r\n\r\n\t\t\t\tif(index > -1){\r\n\t\t\t\t\tstage = \"displayPipeline\";\r\n\r\n\t\t\t\t\tif(skipStage){\r\n\t\t\t\t\t\tif(index == this.displayPipeline.length - 1){\r\n\t\t\t\t\t\t\tstage = \"end\";\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\tindex++;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.error(\"Unable to refresh data, invalid handler provided\", handler)\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tstage = handler || \"all\";\r\n\t\t\tindex = 0;\r\n\t\t}\r\n\r\n\t\tif(this.redrawBlock){\r\n\t\t\tif(!this.redrawBlockRestoreConfig || (this.redrawBlockRestoreConfig && ((this.redrawBlockRestoreConfig.stage === stage && index < this.redrawBlockRestoreConfig.index) || (cascadeOrder.indexOf(stage) < cascadeOrder.indexOf(this.redrawBlockRestoreConfig.stage))))){\r\n\t\t\t\tthis.redrawBlockRestoreConfig = {\r\n\t\t\t\t\thandler: handler,\r\n\t\t\t\t\tskipStage: skipStage,\r\n\t\t\t\t\trenderInPosition: renderInPosition,\r\n\t\t\t\t\tstage:stage,\r\n\t\t\t\t\tindex:index,\r\n\t\t\t\t};\r\n\t\t\t}\r\n\r\n\t\t\treturn;\r\n\t\t}else{\r\n\t\t\tthis.dispatch(\"data-refeshing\");\r\n\r\n\t\t\tif(!handler){\r\n\t\t\t\tthis.activeRowsPipeline[0] = this.rows.slice(0);\r\n\t\t\t}\r\n\r\n\t\t\t//cascade through data refresh stages\r\n\t\t\tswitch(stage){\r\n\t\t\t\tcase \"all\":\r\n\t\t\t\t//handle case where alldata needs refreshing\r\n\r\n\t\t\t\tcase \"dataPipeline\":\r\n\r\n\t\t\t\tfor(let i = index; i < this.dataPipeline.length; i++){\r\n\t\t\t\t\tlet result = this.dataPipeline[i].handler(this.activeRowsPipeline[i].slice(0));\r\n\r\n\t\t\t\t\tthis.activeRowsPipeline[i + 1] = result || this.activeRowsPipeline[i].slice(0);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.setActiveRows(this.activeRowsPipeline[this.dataPipeline.length]);\r\n\r\n\t\t\t\tthis.regenerateRowNumbers();\r\n\r\n\t\t\t\tcase \"display\":\r\n\t\t\t\tindex = 0;\r\n\t\t\t\tthis.resetDisplayRows();\r\n\r\n\t\t\t\tcase \"displayPipeline\":\r\n\t\t\t\tfor(let i = index; i < this.displayPipeline.length; i++){\r\n\t\t\t\t\tlet result = this.displayPipeline[i].handler((i ? this.getDisplayRows(i - 1) : this.activeRows).slice(0), renderInPosition);\r\n\r\n\t\t\t\t\tthis.setDisplayRows(result || this.getDisplayRows(i - 1).slice(0), i);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tcase \"end\":\r\n\t\t\t\t//case to handle scenario when trying to skip past end stage\r\n\t\t\t}\r\n\r\n\t\t\tif(Helpers.elVisible(this.element)){\r\n\t\t\t\tif(renderInPosition){\r\n\t\t\t\t\tthis.reRenderInPosition();\r\n\t\t\t\t}else{\r\n\r\n\t\t\t\t\tif(!handler){\r\n\t\t\t\t\t\tthis.table.columnManager.renderer.renderColumns();\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tthis.renderTable();\r\n\r\n\t\t\t\t\tif(table.options.layoutColumnsOnNewData){\r\n\t\t\t\t\t\tthis.table.columnManager.redraw(true);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tthis.dispatch(\"data-refeshed\");\r\n\t\t}\r\n\t}\r\n\r\n\t//regenerate row numbers for row number formatter if in use\r\n\tregenerateRowNumbers(){\r\n\t\tif(this.rowNumColumn){\r\n\t\t\tthis.activeRows.forEach((row) => {\r\n\t\t\t\tvar cell = row.getCell(this.rowNumColumn);\r\n\r\n\t\t\t\tif(cell){\r\n\t\t\t\t\tcell._generateContents();\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tsetActiveRows(activeRows){\r\n\t\tthis.activeRows = activeRows;\r\n\t\tthis.activeRowsCount = this.activeRows.length;\r\n\t}\r\n\r\n\t//reset display rows array\r\n\tresetDisplayRows(){\r\n\t\tthis.displayRows = [];\r\n\r\n\t\tthis.displayRows.push(this.activeRows.slice(0));\r\n\r\n\t\tthis.displayRowsCount = this.displayRows[0].length;\r\n\t}\r\n\r\n\tgetNextDisplayIndex(){\r\n\t\treturn this.displayRows.length;\r\n\t}\r\n\r\n\t//set display row pipeline data\r\n\tsetDisplayRows(displayRows, index){\r\n\r\n\t\tvar output = true;\r\n\r\n\t\tif(index && typeof this.displayRows[index] != \"undefined\"){\r\n\t\t\tthis.displayRows[index] = displayRows;\r\n\t\t\toutput = true;\r\n\t\t}else{\r\n\t\t\tthis.displayRows.push(displayRows)\r\n\t\t\toutput = index = this.displayRows.length -1;\r\n\t\t}\r\n\r\n\t\tif(index == this.displayRows.length -1){\r\n\t\t\tthis.displayRowsCount = this.displayRows[this.displayRows.length -1].length;\r\n\t\t}\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tgetDisplayRows(index){\r\n\t\tif(typeof index == \"undefined\"){\r\n\t\t\treturn this.displayRows.length ? this.displayRows[this.displayRows.length -1] : [];\r\n\t\t}else{\r\n\t\t\treturn this.displayRows[index] || [];\r\n\t\t}\r\n\t}\r\n\r\n\tgetVisibleRows(viewable){\r\n\t\treturn this.renderer.visibleRows(!viewable);\r\n\t}\r\n\r\n\t//repeat action accross display rows\r\n\tdisplayRowIterator(callback){\r\n\t\tthis.activeRowsPipeline.forEach(callback);\r\n\t\tthis.displayRows.forEach(callback);\r\n\r\n\t\tthis.displayRowsCount = this.displayRows[this.displayRows.length -1].length;\r\n\t}\r\n\r\n\t//return only actual rows (not group headers etc)\r\n\tgetRows(type){\r\n\t\tvar rows;\r\n\r\n\t\tswitch(type){\r\n\t\t\tcase \"active\":\r\n\t\t\trows = this.activeRows;\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"display\":\r\n\t\t\trows = this.table.rowManager.getDisplayRows();\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"visible\":\r\n\t\t\trows = this.getVisibleRows(true);\r\n\t\t\tbreak;\r\n\r\n\t\t\tdefault:\r\n\t\t\trows = this.chain(\"rows-retrieve\", type, null, this.rows) || this.rows;\r\n\t\t}\r\n\r\n\t\treturn rows;\r\n\t}\r\n\r\n\t///////////////// Table Rendering /////////////////\r\n\t//trigger rerender of table in current position\r\n\treRenderInPosition(callback){\r\n\t\tif(this.redrawBlock){\r\n\t\t\tif(callback){\r\n\t\t\t\tcallback();\r\n\t\t\t}else{\r\n\t\t\t\tthis.redrawBlockRederInPosition = true;\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tthis.renderer.rerenderRows(callback);\r\n\t\t}\r\n\t}\r\n\r\n\tinitializeRenderer(){\r\n\t\tvar renderClass;\r\n\r\n\t\tvar renderers = {\r\n\t\t\t\"virtual\": RendererVirtualDomVertical,\r\n\t\t\t\"basic\": RendererBasicVertical,\r\n\t\t};\r\n\r\n\t\tif(typeof this.table.options.renderVertical === \"string\"){\r\n\t\t\trenderClass = renderers[this.table.options.renderVertical];\r\n\t\t}else{\r\n\t\t\trenderClass = this.table.options.renderVertical;\r\n\t\t}\r\n\r\n\t\tif(renderClass){\r\n\t\t\tthis.renderer = new renderClass(this.table, this.element, this.tableElement);\r\n\t\t\tthis.renderer.initialize();\r\n\r\n\t\t\tif((this.table.element.clientHeight || this.table.options.height)){\r\n\t\t\t\tthis.fixedHeight = true;\r\n\t\t\t}else{\r\n\t\t\t\tthis.fixedHeight = false;\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tconsole.error(\"Unable to find matching renderer:\", table.options.renderVertical);\r\n\t\t}\r\n\t}\r\n\r\n\tgetRenderMode(){\r\n\t\treturn this.renderMode;\r\n\t}\r\n\r\n\trenderTable(){\r\n\r\n\t\tthis.dispatchExternal(\"renderStarted\");\r\n\r\n\t\tthis.element.scrollTop = 0;\r\n\r\n\t\tif(this.displayRowsCount){\r\n\t\t\tthis._clearTable();\r\n\t\t\tthis.renderer.renderRows();\r\n\r\n\t\t\tif(this.firstRender){\r\n\t\t\t\tthis.firstRender = false;\r\n\t\t\t\tthis.layoutRefresh();\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tthis.renderEmptyScroll();\r\n\t\t}\r\n\r\n\t\tif(!this.fixedHeight){\r\n\t\t\tthis.adjustTableSize();\r\n\t\t}\r\n\r\n\t\tthis.dispatch(\"table-layout\");\r\n\r\n\t\tif(!this.displayRowsCount){\r\n\t\t\tif(this.table.options.placeholder){\r\n\r\n\t\t\t\tthis.table.options.placeholder.setAttribute(\"tabulator-render-mode\", this.renderMode);\r\n\r\n\t\t\t\tthis.getElement().appendChild(this.table.options.placeholder);\r\n\t\t\t\tthis.table.options.placeholder.style.width = this.table.columnManager.getWidth() + \"px\";\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.dispatchExternal(\"renderComplete\");\r\n\t}\r\n\r\n\t//show scrollbars on empty table div\r\n\trenderEmptyScroll(){\r\n\t\tif(this.table.options.placeholder){\r\n\t\t\tthis.tableElement.style.display = \"none\";\r\n\t\t}else{\r\n\t\t\tthis.tableElement.style.minWidth = this.table.columnManager.getWidth() + \"px\";\r\n\t\t\t// this.tableElement.style.minHeight = \"1px\";\r\n\t\t\t// this.tableElement.style.visibility = \"hidden\";\r\n\t\t}\r\n\t}\r\n\r\n\t_clearTable(){\r\n\t\tvar element = this.tableElement;\r\n\r\n\t\tif(this.table.options.placeholder && this.table.options.placeholder.parentNode){\r\n\t\t\tthis.table.options.placeholder.parentNode.removeChild(this.table.options.placeholder);\r\n\t\t}\r\n\r\n\t\tthis.scrollTop = 0;\r\n\t\tthis.scrollLeft = 0;\r\n\r\n\t\tthis.renderer.clearRows();\r\n\t}\r\n\r\n\tstyleRow(row, index){\r\n\t\tvar rowEl = row.getElement();\r\n\r\n\t\tif(index % 2){\r\n\t\t\trowEl.classList.add(\"tabulator-row-even\");\r\n\t\t\trowEl.classList.remove(\"tabulator-row-odd\");\r\n\t\t}else{\r\n\t\t\trowEl.classList.add(\"tabulator-row-odd\");\r\n\t\t\trowEl.classList.remove(\"tabulator-row-even\");\r\n\t\t}\r\n\t}\r\n\r\n\t//normalize height of active rows\r\n\tnormalizeHeight(){\r\n\t\tthis.activeRows.forEach(function(row){\r\n\t\t\trow.normalizeHeight();\r\n\t\t});\r\n\t}\r\n\r\n\t//adjust the height of the table holder to fit in the Tabulator element\r\n\tadjustTableSize(){\r\n\t\tvar initialHeight = this.element.clientHeight,\r\n\t\tmodExists;\r\n\r\n\t\tif(this.renderer.verticalFillMode === \"fill\"){\r\n\t\t\tlet otherHeight = Math.floor(this.table.columnManager.getElement().getBoundingClientRect().height + (this.table.footerManager && this.table.footerManager.active && !this.table.footerManager.external ? this.table.footerManager.getElement().getBoundingClientRect().height : 0));\r\n\r\n\t\t\tif(this.fixedHeight){\r\n\t\t\t\tthis.element.style.minHeight = \"calc(100% - \" + otherHeight + \"px)\";\r\n\t\t\t\tthis.element.style.height = \"calc(100% - \" + otherHeight + \"px)\";\r\n\t\t\t\tthis.element.style.maxHeight = \"calc(100% - \" + otherHeight + \"px)\";\r\n\t\t\t}else{\r\n\t\t\t\tthis.element.style.height = \"\";\r\n\t\t\t\tthis.element.style.height = (this.table.element.clientHeight - otherHeight) + \"px\";\r\n\t\t\t\tthis.element.scrollTop = this.scrollTop;\r\n\t\t\t}\r\n\r\n\t\t\tthis.renderer.resize();\r\n\r\n\t\t\t//check if the table has changed size when dealing with variable height tables\r\n\t\t\tif(!this.fixedHeight && initialHeight != this.element.clientHeight){\r\n\t\t\t\tif(this.subscribed(\"table-resize\")){\r\n\t\t\t\t\tthis.dispatch(\"table-resize\");\r\n\t\t\t\t}else{\r\n\t\t\t\t\tthis.redraw();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//renitialize all rows\r\n\treinitialize(){\r\n\t\tthis.rows.forEach(function(row){\r\n\t\t\trow.reinitialize(true);\r\n\t\t});\r\n\t}\r\n\r\n\t//prevent table from being redrawn\r\n\tblockRedraw (){\r\n\t\tthis.redrawBlock = true;\r\n\t\tthis.redrawBlockRestoreConfig = false;\r\n\t}\r\n\r\n\t//restore table redrawing\r\n\trestoreRedraw (){\r\n\t\tthis.redrawBlock = false;\r\n\r\n\t\tif(this.redrawBlockRestoreConfig){\r\n\t\t\tthis.refreshActiveData(this.redrawBlockRestoreConfig.handler, this.redrawBlockRestoreConfig.skipStage, this.redrawBlockRestoreConfig.renderInPosition)\r\n\r\n\t\t\tthis.redrawBlockRestoreConfig = false;\r\n\t\t}else{\r\n\t\t\tif(this.redrawBlockRederInPosition){\r\n\t\t\t\tthis.reRenderInPosition();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.redrawBlockRederInPosition = false;\r\n\t}\r\n\r\n\t//redraw table\r\n\tredraw (force){\r\n\t\tvar pos = 0,\r\n\t\tleft = this.scrollLeft;\r\n\r\n\t\tthis.adjustTableSize();\r\n\r\n\t\tthis.table.tableWidth = this.table.element.clientWidth;\r\n\r\n\t\tif(!force){\r\n\t\t\tthis.reRenderInPosition();\r\n\t\t\tthis.scrollHorizontal(left);\r\n\r\n\t\t\tif(!this.displayRowsCount){\r\n\t\t\t\tif(this.table.options.placeholder){\r\n\t\t\t\t\tthis.getElement().appendChild(this.table.options.placeholder);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tthis.renderTable();\r\n\t\t}\r\n\t}\r\n\r\n\tresetScroll(){\r\n\t\tthis.element.scrollLeft = 0;\r\n\t\tthis.element.scrollTop = 0;\r\n\r\n\t\tif(this.table.browser === \"ie\"){\r\n\t\t\tvar event = document.createEvent(\"Event\");\r\n\t\t\tevent.initEvent(\"scroll\", false, true);\r\n\t\t\tthis.element.dispatchEvent(event);\r\n\t\t}else{\r\n\t\t\tthis.element.dispatchEvent(new Event('scroll'));\r\n\t\t}\r\n\t}\r\n}","import CoreFeature from './CoreFeature.js';\r\n\r\nexport default class FooterManager extends CoreFeature{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.active = false;\r\n\t\tthis.element = this.createElement(); //containing element\r\n\t\tthis.external = false;\r\n\t\tthis.links = [];\r\n\r\n\t\tthis.initializeElement();\r\n\t}\r\n\r\n\tinitialize(){\r\n\r\n\t}\r\n\r\n\tcreateElement (){\r\n\t\tvar el = document.createElement(\"div\");\r\n\r\n\t\tel.classList.add(\"tabulator-footer\");\r\n\r\n\t\treturn el;\r\n\t}\r\n\r\n\tinitializeElement(element){\r\n\t\tif(this.table.options.footerElement){\r\n\r\n\t\t\tswitch(typeof this.table.options.footerElement){\r\n\t\t\t\tcase \"string\":\r\n\t\t\t\tif(this.table.options.footerElement[0] === \"<\"){\r\n\t\t\t\t\tthis.element.innerHTML = this.table.options.footerElement;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tthis.external = true;\r\n\t\t\t\t\tthis.element = document.querySelector(this.table.options.footerElement);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tdefault:\r\n\t\t\t\tthis.element = this.table.options.footerElement;\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tgetElement(){\r\n\t\treturn this.element;\r\n\t}\r\n\r\n\tappend(element, parent){\r\n\t\tthis.activate(parent);\r\n\r\n\t\tthis.element.appendChild(element);\r\n\t\tthis.table.rowManager.adjustTableSize();\r\n\t}\r\n\r\n\tprepend(element, parent){\r\n\t\tthis.activate(parent);\r\n\r\n\t\tthis.element.insertBefore(element, this.element.firstChild);\r\n\t\tthis.table.rowManager.adjustTableSize();\r\n\t}\r\n\r\n\tremove(element){\r\n\t\telement.parentNode.removeChild(element);\r\n\t\tthis.deactivate();\r\n\t}\r\n\r\n\tdeactivate(force){\r\n\t\tif(!this.element.firstChild || force){\r\n\t\t\tif(!this.external){\r\n\t\t\t\tthis.element.parentNode.removeChild(this.element);\r\n\t\t\t}\r\n\t\t\tthis.active = false;\r\n\t\t}\r\n\t}\r\n\r\n\tactivate(parent){\r\n\t\tif(!this.active){\r\n\t\t\tthis.active = true;\r\n\t\t\tif(!this.external){\r\n\t\t\t\tthis.table.element.appendChild(this.getElement());\r\n\t\t\t\tthis.table.element.style.display = '';\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(parent){\r\n\t\t\tthis.links.push(parent);\r\n\t\t}\r\n\t}\r\n\r\n\tredraw(){\r\n\t\tthis.links.forEach(function(link){\r\n\t\t\tlink.footerRedraw();\r\n\t\t});\r\n\t}\r\n}","import CoreFeature from '../CoreFeature.js';\r\nimport Helpers from './Helpers.js';\r\n\r\nexport default class InteractionManager extends CoreFeature {\r\n\r\n\tconstructor (table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.el = this.table.element;\r\n\r\n\t\tthis.abortClasses = [\"tabulator-headers\", \"tabulator-table\"];\r\n\r\n\t\tthis.previousTargets = {};\r\n\r\n\t\tthis.listeners = [\r\n\t\t\"click\",\r\n\t\t\"dblclick\",\r\n\t\t\"contextmenu\",\r\n\t\t\"mouseenter\",\r\n\t\t\"mouseleave\",\r\n\t\t\"mouseover\",\r\n\t\t\"mouseout\",\r\n\t\t\"mousemove\",\r\n\t\t\"touchstart\",\r\n\t\t\"touchend\",\r\n\t\t];\r\n\r\n\t\tthis.componentMap = {\r\n\t\t\t\"tabulator-cell\":\"cell\",\r\n\t\t\t\"tabulator-row\":\"row\",\r\n\t\t\t\"tabulator-group\":\"group\",\r\n\t\t\t\"tabulator-col\":\"column\",\r\n\t\t};\r\n\r\n\t\tthis.buildListenerMap();\r\n\t\tthis.bindSubscriptionWatchers();\r\n\t}\r\n\r\n\tbuildListenerMap(){\r\n\t\tvar listenerMap = {};\r\n\r\n\t\tthis.listeners.forEach((listener) => {\r\n\t\t\tlistenerMap[listener] = {\r\n\t\t\t\thandler:null,\r\n\t\t\t\tcomponents:[],\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\tthis.listeners = listenerMap;\r\n\t}\r\n\r\n\tbindSubscriptionWatchers(){\r\n\t\tvar listeners = Object.keys(this.listeners),\r\n\t\tcomponents = Object.values(this.componentMap);\r\n\r\n\t\tfor(let comp of components){\r\n\t\t\tfor(let listener of listeners){\r\n\t\t\t\tlet key = comp + \"-\" + listener;\r\n\r\n\t\t\t\tthis.subscriptionChange(key, this.subscriptionChanged.bind(this, comp, listener));\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tsubscriptionChanged(component, key, added){\r\n\t\tvar listener = this.listeners[key].components,\r\n\t\tindex = listener.indexOf(component),\r\n\t\tchanged = false;\r\n\r\n\t\tif(added){\r\n\t\t\tif(index === -1){\r\n\t\t\t\tlistener.push(component);\r\n\t\t\t\tchanged = true;\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tif(!this.subscribed(component + \"-\" + key)){\r\n\t\t\t\tif(index > -1){\r\n\t\t\t\t\tlistener.splice(index, 1);\r\n\t\t\t\t\tchanged = true;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(changed){\r\n\t\t\tthis.updateEventListeners();\r\n\t\t}\r\n\t}\r\n\r\n\tupdateEventListeners(){\r\n\t\tfor(let key in this.listeners){\r\n\t\t\tlet listener = this.listeners[key];\r\n\r\n\t\t\tif(listener.components.length){\r\n\t\t\t\tif(!listener.handler){\r\n\t\t\t\t\tlistener.handler = this.track.bind(this, key);\r\n\t\t\t\t\tthis.el.addEventListener(key, listener.handler)\r\n\t\t\t\t\t// this.el.addEventListener(key, listener.handler, {passive: true})\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tif(listener.handler){\r\n\t\t\t\t\tthis.el.removeEventListener(key, listener.handler)\r\n\t\t\t\t\tlistener.handler = null;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\ttrack(type, e){\r\n\t\tvar targets = this.findTargets(e.path);\r\n\t\ttargets = this.bindComponents(type, targets);\r\n\t\tthis.triggerEvents(type, e, targets);\r\n\t}\r\n\r\n\tfindTargets(path){\r\n\t\tvar targets = {};\r\n\r\n\t\tlet componentMap = Object.keys(this.componentMap);\r\n\r\n\t\tfor (let el of path) {\r\n\t\t\tlet classList = el.classList ? [...el.classList] : [];\r\n\r\n\t\t\tlet abort = classList.filter((item) => {\r\n\t\t\t\treturn this.abortClasses.includes(item);\r\n\t\t\t})\r\n\r\n\t\t\tif(abort.length){\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\r\n\t\t\tlet elTargets = classList.filter((item) => {\r\n\t\t\t\treturn componentMap.includes(item);\r\n\t\t\t})\r\n\r\n\t\t\tfor (let target of elTargets) {\r\n\t\t\t\ttargets[this.componentMap[target]] = el;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(targets.group && targets.group === targets.row){\r\n\t\t\tdelete targets.row;\r\n\t\t}\r\n\r\n\t\treturn targets;\r\n\t}\r\n\r\n\tbindComponents(type, targets){\r\n\t\t//ensure row component is looked up before cell\r\n\t\tvar keys = Object.keys(targets).reverse(),\r\n\t\tlistener = this.listeners[type],\r\n\t\ttargetMatches = {};\r\n\r\n\t\tfor(let key of keys){\r\n\t\t\tlet component;\r\n\t\t\tlet target = targets[key];\r\n\t\t\tlet previousTarget = this.previousTargets[key];\r\n\r\n\t\t\tif(previousTarget && previousTarget.target === target){\r\n\t\t\t\tcomponent = previousTarget.component;\r\n\t\t\t}else{\r\n\t\t\t\tswitch(key){\r\n\t\t\t\t\tcase \"row\":\r\n\t\t\t\t\tcase \"group\":\r\n\t\t\t\t\tif(listener.components.includes(\"row\") || listener.components.includes(\"cell\")){\r\n\t\t\t\t\t\tlet rows = this.table.rowManager.getVisibleRows();\r\n\r\n\t\t\t\t\t\tcomponent = rows.find((row) => {\r\n\t\t\t\t\t\t\treturn row.getElement() === target;\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase \"column\":\r\n\t\t\t\t\tif(listener.components.includes(\"column\")){\r\n\t\t\t\t\t\tcomponent = this.table.columnManager.findColumn(target);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak\r\n\r\n\t\t\t\t\tcase \"cell\":\r\n\t\t\t\t\tif(listener.components.includes(\"cell\")){\r\n\t\t\t\t\t\tcomponent = targets[\"row\"].findCell(target);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif(component){\r\n\t\t\t\ttargets[key] = component;\r\n\t\t\t\ttargetMatches[key] = {\r\n\t\t\t\t\ttarget:target,\r\n\t\t\t\t\tcomponent:component,\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.previousTargets = targetMatches;\r\n\r\n\t\treturn targets;\r\n\t}\r\n\r\n\ttriggerEvents(type, e, targets){\r\n\t\tvar listener = this.listeners[type];\r\n\r\n\t\tfor(let key in targets){\r\n\t\t\tif(targets[key] && listener.components.includes(key)){\r\n\t\t\t\tthis.dispatch(key + \"-\" + type, e, targets[key]);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}","export default class ComponentFuctionBinder{\r\n\r\n\tconstructor(table){\r\n\t\tthis.table = table;\r\n\r\n\t\tthis.bindings = {};\r\n\t}\r\n\r\n\tbind(type, funcName, handler){\r\n\t\tif(!this.bindings[type]){\r\n\t\t\tthis.bindings[type] = {};\r\n\t\t}\r\n\r\n\t\tif(this.bindings[type][funcName]){\r\n\t\t\tconsole.warn(\"Unable to bind component handler, a matching function name is already bound\", type, funcName, hanlder)\r\n\t\t}else{\r\n\t\t\tthis.bindings[type][funcName] = handler;\r\n\t\t}\r\n\t}\r\n\r\n\thandle(type, component, name){\r\n\t\tif(this.bindings[type] && this.bindings[type][name]){\r\n\t\t\treturn this.bindings[type][name].bind(null, component);\r\n\t\t}else{\r\n\t\t\tconsole.error(\"The \" + type + \" component does not have a \" + name + \" function, have you checked that you have the correct Tabulator module installed?\")\r\n\t\t}\r\n\t}\r\n\r\n}","import CoreFeature from '../CoreFeature.js';\r\n\r\nexport default class DataLoader extends CoreFeature{\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.loaderElement = this.createLoaderElement(); //loader message div\r\n\t\tthis.msgElement = this.createMsgElement(); //message element\r\n\t\tthis.loadingElement = null;\r\n\t\tthis.errorElement = null;\r\n\r\n\t\tthis.requestOrder = 0; //prevent requests comming out of sequence if overridden by another load request\r\n\t\tthis.loading = false;\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tvar template;\r\n\r\n\t\tthis.loaderElement.appendChild(this.msgElement);\r\n\r\n\t\tif(this.table.options.dataLoaderLoading){\r\n\t\t\tif(typeof this.table.options.dataLoaderLoading == \"string\"){\r\n\t\t\t\ttemplate = document.createElement('template');\r\n\t\t\t\ttemplate.innerHTML = this.table.options.dataLoaderLoading.trim();\r\n\t\t\t\tthis.loadingElement = template.content.firstChild;\r\n\t\t\t}else{\r\n\t\t\t\tthis.loadingElement = this.table.options.dataLoaderLoading;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(this.table.options.dataLoaderError){\r\n\t\t\tif(typeof this.table.options.dataLoaderError == \"string\"){\r\n\t\t\t\ttemplate = document.createElement('template');\r\n\t\t\t\ttemplate.innerHTML = this.table.options.dataLoaderError.trim();\r\n\t\t\t\tthis.errorElement = template.content.firstChild;\r\n\t\t\t}else{\r\n\t\t\t\tthis.errorElement = this.table.options.dataLoaderError;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tcreateLoaderElement(){\r\n\t\tvar el = document.createElement(\"div\");\r\n\t\tel.classList.add(\"tabulator-loader\");\r\n\t\treturn el;\r\n\t}\r\n\r\n\tcreateMsgElement(){\r\n\t\tvar el = document.createElement(\"div\");\r\n\r\n\t\tel.classList.add(\"tabulator-loader-msg\");\r\n\t\tel.setAttribute(\"role\", \"alert\");\r\n\r\n\t\treturn el;\r\n\t}\r\n\r\n\tload(data, params, config, replace, silent){\r\n\t\tvar requestNo = ++this.requestOrder;\r\n\r\n\t\tthis.dispatchExternal(\"dataLoading\", data);\r\n\r\n\t\t//parse json data to array\r\n\t\tif (data && (data.indexOf(\"{\") == 0 || data.indexOf(\"[\") == 0)){\r\n\t\t\tdata = JSON.parse(data);\r\n\t\t}\r\n\r\n\t\tif(this.confirm(\"data-loading\", data, params, config, silent)){\r\n\t\t\tthis.loading = true;\r\n\r\n\t\t\tif(!silent){\r\n\t\t\t\tthis.showLoader();\r\n\t\t\t}\r\n\r\n\t\t\t//get params for request\r\n\t\t\tvar params = this.chain(\"data-params\", [data, config, silent], params || {}, {});\r\n\r\n\t\t\tparams = this.mapParams(params, this.table.options.dataSendParams);\r\n\r\n\t\t\tvar result = this.chain(\"data-load\", [data, params, config, silent], Promise.resolve([]));\r\n\r\n\t\t\treturn result.then((response) => {\r\n\t\t\t\tif(!Array.isArray(response) && typeof response == \"object\"){\r\n\t\t\t\t\tresponse = this.mapParams(response, this.objectInvert(this.table.options.dataReceiveParams));\r\n\t\t\t\t}\r\n\r\n\t\t\t\tvar rowData = this.chain(\"data-loaded\", response, null, response);\r\n\r\n\t\t\t\tif(requestNo == this.requestOrder){\r\n\t\t\t\t\tthis.hideLoader();\r\n\r\n\t\t\t\t\tif(rowData !== false){\r\n\t\t\t\t\t\tthis.dispatchExternal(\"dataLoaded\", data);\r\n\t\t\t\t\t\tthis.table.rowManager.setData(rowData, replace, !replace);\r\n\t\t\t\t\t}\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.warn(\"Data Load Response Blocked - An active data load request was blocked by an attempt to change table data while the request was being made\");\r\n\t\t\t\t}\r\n\t\t\t}).catch((error) => {\r\n\t\t\t\tconsole.error(\"Data Load Error: \", error);\r\n\t\t\t\tthis.dispatchExternal(\"dataLoadError\", error);\r\n\r\n\t\t\t\tif(!silent){\r\n\t\t\t\t\tthis.showError();\r\n\t\t\t\t}\r\n\r\n\t\t\t\tsetTimeout(() => {\r\n\t\t\t\t\tthis.hideLoader();\r\n\t\t\t\t}, 3000);\r\n\t\t\t})\r\n\t\t\t.finally(() => {\r\n\t\t\t\tthis.loading = false;\r\n\t\t\t})\r\n\t\t}else{\r\n\t\t\tthis.dispatchExternal(\"dataLoaded\", data);\r\n\t\t\tthis.table.rowManager.setData(data, replace, !replace);\r\n\t\t\treturn Promise.resolve();\r\n\t\t}\r\n\t}\r\n\r\n\tmapParams(params, map){\r\n\t\tvar output = {};\r\n\r\n\t\tfor(let key in params){\r\n\t\t\toutput[map.hasOwnProperty(key) ? map[key] : key] = params[key];\r\n\t\t}\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tobjectInvert(obj){\r\n\t\tvar output = {};\r\n\r\n\t\tfor(let key in obj){\r\n\t\t\toutput[obj[key]] = key;\r\n\t\t}\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tblockActiveLoad(){\r\n\t\tthis.requestOrder++;\r\n\t}\r\n\r\n\tshowLoader(){\r\n\t\tvar shouldLoad = typeof this.table.options.dataLoader === \"function\" ? this.table.options.dataLoader() : this.table.options.dataLoader;\r\n\r\n\t\tif(shouldLoad){\r\n\t\t\tthis.hideLoader();\r\n\r\n\t\t\twhile(this.msgElement.firstChild) this.msgElement.removeChild(this.msgElement.firstChild);\r\n\r\n\t\t\tthis.msgElement.classList.remove(\"tabulator-error\");\r\n\t\t\tthis.msgElement.classList.add(\"tabulator-loading\");\r\n\r\n\t\t\tif(this.loadingElement){\r\n\t\t\t\tthis.msgElement.appendChild(this.loadingElement);\r\n\t\t\t}else{\r\n\t\t\t\tthis.msgElement.innerHTML = this.langText(\"data|loading\");\r\n\t\t\t}\r\n\r\n\t\t\tthis.table.element.appendChild(this.loaderElement);\r\n\t\t}\r\n\t}\r\n\r\n\tshowError(){\r\n\t\tthis.hideLoader();\r\n\r\n\t\twhile(this.msgElement.firstChild) this.msgElement.removeChild(this.msgElement.firstChild);\r\n\t\tthis.msgElement.classList.remove(\"tabulator-loading\");\r\n\t\tthis.msgElement.classList.add(\"tabulator-error\");\r\n\r\n\t\tif(this.errorElement){\r\n\t\t\tthis.msgElement.appendChild(this.errorElement);\r\n\t\t}else{\r\n\t\t\tthis.msgElement.innerHTML = this.langText(\"data|error\");\r\n\t\t}\r\n\r\n\t\tthis.table.element.appendChild(this.loaderElement);\r\n\t}\r\n\r\n\r\n\thideLoader(){\r\n\t\tif(this.loaderElement.parentNode){\r\n\t\t\tthis.loaderElement.parentNode.removeChild(this.loaderElement);\r\n\t\t}\r\n\t}\r\n}","export default class ExternalEventBus {\r\n\r\n\tconstructor(optionsList, debug){\r\n\t\tthis.events = {};\r\n\t\tthis.optionsList = optionsList || {};\r\n\t\tthis.subscriptionNotifiers = {};\r\n\r\n\t\tthis.dispatch = debug ? this._debugDispatch.bind(this) : this._dispatch.bind(this);\r\n\t\tthis.debug = debug;\r\n\t}\r\n\r\n\tsubscriptionChange(key, callback){\r\n\t\tif(!this.subscriptionNotifiers[key]){\r\n\t\t\tthis.subscriptionNotifiers[key] = [];\r\n\t\t}\r\n\r\n\t\tthis.subscriptionNotifiers[key].push(callback);\r\n\r\n\t\tif(this.subscribed(key)){\r\n\t\t\tthis._notifiySubscriptionChange(key, true);\r\n\t\t}\r\n\t}\r\n\r\n\tsubscribe(key, callback){\r\n\t\tif(!this.events[key]){\r\n\t\t\tthis.events[key] = [];\r\n\t\t}\r\n\r\n\t\tthis.events[key].push(callback);\r\n\r\n\t\tthis._notifiySubscriptionChange(key, true);\r\n\t}\r\n\r\n\tunsubscribe(key, callback){\r\n\t\tvar index;\r\n\r\n\t\tif(this.events[key]){\r\n\t\t\tif(callback){\r\n\t\t\t\tindex = this.events[key].findIndex((item) => {\r\n\t\t\t\t\treturn item === callback;\r\n\t\t\t\t});\r\n\r\n\t\t\t\tif(index > -1){\r\n\t\t\t\t\tthis.events[key].splice(index, 1);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.warn(\"Cannot remove event, no matching event found:\", key, callback);\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tdelete this.events[key];\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Cannot remove event, no events set on:\", key);\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis._notifiySubscriptionChange(key, false);\r\n\t}\r\n\r\n\tsubscribed(key){\r\n\t\treturn this.events[key] && this.events[key].length;\r\n\t}\r\n\r\n\t_notifiySubscriptionChange(key, subscribed){\r\n\t\tvar notifiers = this.subscriptionNotifiers[key];\r\n\r\n\t\tif(notifiers){\r\n\t\t\tnotifiers.forEach((callback)=>{\r\n\t\t\t\tcallback(subscribed);\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\t_dispatch(){\r\n\t\tvar args = Array.from(arguments),\r\n\t\tkey = args.shift(),\r\n\t\tresult;\r\n\r\n\t\tif(this.events[key]){\r\n\t\t\tthis.events[key].forEach((callback, i) => {\r\n\t\t\t\tlet callResult = callback.apply(this, args);\r\n\r\n\t\t\t\tif(!i){\r\n\t\t\t\t\tresult = callResult;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\t_debugDispatch(){\r\n\t\tvar args = Array.from(arguments),\r\n\t\tkey = args[0];\r\n\r\n\t\targs[0] = \"ExternalEvent:\" + args[0];\r\n\r\n\t\tif(this.debug === true || this.debug.includes(key)){\r\n\t\t\tconsole.log(...args);\r\n\t\t}\r\n\r\n\t\treturn this._dispatch(...arguments)\r\n\t}\r\n}","export default class InternalEventBus {\r\n\r\n\tconstructor(debug){\r\n\t\tthis.events = {};\r\n\t\tthis.subscriptionNotifiers = {};\r\n\r\n\t\tthis.dispatch = debug ? this._debugDispatch.bind(this) : this._dispatch.bind(this);\r\n\t\tthis.chain = debug ? this._debugChain.bind(this) : this._chain.bind(this);\r\n\t\tthis.confirm = debug ? this._debugConfirm.bind(this) : this._confirm.bind(this);\r\n\t\tthis.debug = debug;\r\n\t}\r\n\r\n\tsubscriptionChange(key, callback){\r\n\t\tif(!this.subscriptionNotifiers[key]){\r\n\t\t\tthis.subscriptionNotifiers[key] = [];\r\n\t\t}\r\n\r\n\t\tthis.subscriptionNotifiers[key].push(callback);\r\n\r\n\t\tif(this.subscribed(key)){\r\n\t\t\tthis._notifiySubscriptionChange(key, true);\r\n\t\t}\r\n\t}\r\n\r\n\tsubscribe(key, callback, priority = 10000){\r\n\t\tif(!this.events[key]){\r\n\t\t\tthis.events[key] = [];\r\n\t\t}\r\n\r\n\t\tthis.events[key].push({callback, priority});\r\n\r\n\t\tthis.events[key].sort((a, b) => {\r\n\t\t\treturn a.priority - b.priority;\r\n\t\t});\r\n\r\n\t\tthis._notifiySubscriptionChange(key, true);\r\n\t}\r\n\r\n\tunsubscribe(key, callback){\r\n\t\tvar index;\r\n\r\n\t\tif(this.events[key]){\r\n\t\t\tif(callback){\r\n\t\t\t\tindex = this.events[key].findIndex((item) => {\r\n\t\t\t\t\treturn item.callback === callback;\r\n\t\t\t\t});\r\n\r\n\t\t\t\tif(index > -1){\r\n\t\t\t\t\tthis.events[key].splice(index, 1);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.warn(\"Cannot remove event, no matching event found:\", key, callback);\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Cannot remove event, no events set on:\", key);\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis._notifiySubscriptionChange(key, false);\r\n\t}\r\n\r\n\tsubscribed(key){\r\n\t\treturn this.events[key] && this.events[key].length;\r\n\t}\r\n\r\n\t_chain(key, args, initialValue, fallback){\r\n\t\tvar value = initialValue;\r\n\r\n\t\tif(!Array.isArray(args)){\r\n\t\t\targs = [args];\r\n\t\t}\r\n\r\n\t\tif(this.subscribed(key)){\r\n\t\t\tthis.events[key].forEach((subscriber, i) => {\r\n\t\t\t\tvalue = subscriber.callback.apply(this, args.concat([value]));\r\n\t\t\t});\r\n\r\n\t\t\treturn value;\r\n\t\t}else{\r\n\t\t\treturn typeof fallback === \"function\" ? fallback() : fallback;\r\n\t\t}\r\n\t}\r\n\r\n\t_confirm(key, args){\r\n\t\tvar confirmed = false;\r\n\r\n\t\tif(!Array.isArray(args)){\r\n\t\t\targs = [args];\r\n\t\t}\r\n\r\n\t\tif(this.subscribed(key)){\r\n\t\t\tthis.events[key].forEach((subscriber, i) => {\r\n\t\t\t\tif(subscriber.callback.apply(this, args)){\r\n\t\t\t\t\tconfirmed = true;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn confirmed;\r\n\t}\r\n\r\n\t_notifiySubscriptionChange(key, subscribed){\r\n\t\tvar notifiers = this.subscriptionNotifiers[key];\r\n\r\n\t\tif(notifiers){\r\n\t\t\tnotifiers.forEach((callback)=>{\r\n\t\t\t\tcallback(subscribed);\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\t_dispatch(){\r\n\t\tvar args = Array.from(arguments),\r\n\t\tkey = args.shift();\r\n\r\n\t\tif(this.events[key]){\r\n\t\t\tthis.events[key].forEach((subscriber) => {\r\n\t\t\t\tlet callResult = subscriber.callback.apply(this, args);\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\t_debugDispatch(){\r\n\t\tvar args = Array.from(arguments),\r\n\t\tkey = args[0];\r\n\r\n\t\targs[0] = \"InternalEvent:\" + key;\r\n\r\n\t\tif(this.debug === true || this.debug.includes(key)){\r\n\t\t\tconsole.log(...args);\r\n\t\t}\r\n\r\n\t\treturn this._dispatch(...arguments);\r\n\t}\r\n\r\n\t_debugChain(){\r\n\t\tvar args = Array.from(arguments),\r\n\t\tkey = args[0];\r\n\r\n\t\targs[0] = \"InternalEvent:\" + key;\r\n\r\n\t\tif(this.debug === true || this.debug.includes(key)){\r\n\t\t\tconsole.log(...args);\r\n\t\t}\r\n\r\n\t\treturn this._chain(...arguments);\r\n\t}\r\n\r\n\t_debugConfirm(){\r\n\t\tvar args = Array.from(arguments),\r\n\t\tkey = args[0];\r\n\r\n\t\targs[0] = \"InternalEvent:\" + key;\r\n\r\n\t\tif(this.debug === true || this.debug.includes(key)){\r\n\t\t\tconsole.log(...args);\r\n\t\t}\r\n\r\n\t\treturn this._confirm(...arguments);\r\n\t}\r\n}","import Tabulator from '../Tabulator.js';\r\n\r\nclass TableRegistry {\r\n\r\n\tstatic register(table){\r\n\t\tTableRegistry.tables.push(table);\r\n\t}\r\n\r\n\tstatic deregister(table){\r\n\t\tvar index = TableRegistry.tables.indexOf(table);\r\n\r\n\t\tif(index > -1){\r\n\t\t\tTableRegistry.tables.splice(index, 1);\r\n\t\t}\r\n\t}\r\n\r\n\tstatic lookupTable(query, silent){\r\n\t\tvar results = [],\r\n\t\tmatches, match;\r\n\r\n\t\tif(typeof query === \"string\"){\r\n\t\t\tmatches = document.querySelectorAll(query);\r\n\r\n\t\t\tif(matches.length){\r\n\t\t\t\tfor(var i = 0; i < matches.length; i++){\r\n\t\t\t\t\tmatch = TableRegistry.matchElement(matches[i]);\r\n\r\n\t\t\t\t\tif(match){\r\n\t\t\t\t\t\tresults.push(match);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t}else if((typeof HTMLElement !== \"undefined\" && query instanceof HTMLElement) || query instanceof Tabulator){\r\n\t\t\tmatch = TableRegistry.matchElement(query);\r\n\r\n\t\t\tif(match){\r\n\t\t\t\tresults.push(match);\r\n\t\t\t}\r\n\t\t}else if(Array.isArray(query)){\r\n\t\t\tquery.forEach(function(item){\r\n\t\t\t\tresults = results.concat(TableRegistry.lookupTable(item));\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tif(!silent){\r\n\t\t\t\tconsole.warn(\"Table Connection Error - Invalid Selector\", query);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn results;\r\n\t}\r\n\r\n\tstatic matchElement(element){\r\n\t\treturn TableRegistry.tables.find(function(table){\r\n\t\t\treturn element instanceof Tabulator ? table === element : table.element === element;\r\n\t\t});\r\n\t}\r\n}\r\n\r\nTableRegistry.tables = [];\r\n\r\nexport default TableRegistry;","import CoreFeature from './CoreFeature.js';\r\n\r\nclass Module extends CoreFeature{\r\n\r\n\tconstructor(table, name){\r\n\t\tsuper(table);\r\n\r\n\t\tthis._handler = null;\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\t// setup module when table is initialized, to be overriden in module\r\n\t}\r\n\r\n\r\n\t///////////////////////////////////\r\n\t////// Options Registration ///////\r\n\t///////////////////////////////////\r\n\r\n\tregisterTableOption(key, value){\r\n\t\tthis.table.optionsList.register(key, value);\r\n\t}\r\n\r\n\tregisterColumnOption(key, value){\r\n\t\tthis.table.columnManager.optionsList.register(key, value);\r\n\t}\r\n\r\n\t///////////////////////////////////\r\n\t/// Public Function Registation ///\r\n\t///////////////////////////////////\r\n\r\n\tregisterTableFunction(name, func){\r\n\t\tif(typeof this.table[name] === \"undefined\"){\r\n\t\t\tthis.table[name] = func;\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Unable to bind table function, name already in use\", name)\r\n\t\t}\r\n\t}\r\n\r\n\tregisterComponentFunction(component, func, handler){\r\n\t\treturn this.table.componentFunctionBinder.bind(component, func, handler);\r\n\t}\r\n\r\n\t///////////////////////////////////\r\n\t////////// Data Pipeline //////////\r\n\t///////////////////////////////////\r\n\r\n\tregisterDataHandler(handler, priority){\r\n\t\tthis.table.rowManager.registerDataPipelineHandler(handler, priority)\r\n\t\tthis._handler = handler;\r\n\t}\r\n\r\n\tregisterDisplayHandler(handler, priority){\r\n\t\tthis.table.rowManager.registerDisplayPipelineHandler(handler, priority)\r\n\t\tthis._handler = handler;\r\n\t}\r\n\r\n\trefreshData(renderInPosition, handler){\r\n\t\tif(!handler){\r\n\t\t\thandler = this._handler;\r\n\t\t}\r\n\r\n\t\tif(handler){\r\n\t\t\tthis.table.rowManager.refreshActiveData(handler, false, renderInPosition);\r\n\t\t}\r\n\t}\r\n}\r\n\r\nexport default Module;","//resize columns to fit data they contain and stretch row to fill table, also used for fitDataTable\r\nexport default function(columns){\r\n\tcolumns.forEach(function(column){\r\n\t\tcolumn.reinitializeWidth();\r\n\t});\r\n\r\n\tif(this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)){\r\n\t\tthis.table.modules.responsiveLayout.update();\r\n\t}\r\n};","import fitData from './modes/fitData.js';\r\nimport fitDataGeneral from './modes/fitDataGeneral.js';\r\nimport fitDataStretch from './modes/fitDataStretch.js';\r\nimport fitColumns from './modes/fitColumns.js';\r\n\r\nexport default {\r\n\tfitData:fitData,\r\n\tfitDataFill:fitDataGeneral,\r\n\tfitDataTable:fitDataGeneral,\r\n\tfitDataStretch:fitDataStretch,\r\n\tfitColumns:fitColumns ,\r\n};","//resize columns to fit data they contain\r\nexport default function(columns){\r\n\tthis.table.columnManager.renderer.reinitializeColumnWidths(columns);\r\n\r\n\tif(this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)){\r\n\t\tthis.table.modules.responsiveLayout.update();\r\n\t}\r\n};","//resize columns to fit data the contain and stretch last column to fill table\r\nexport default function(columns){\r\n\tvar colsWidth = 0,\r\n\ttableWidth = this.table.rowManager.element.clientWidth,\r\n\tgap = 0,\r\n\tlastCol = false;\r\n\r\n\tcolumns.forEach((column, i) => {\r\n\t\tif(!column.widthFixed){\r\n\t\t\tcolumn.reinitializeWidth();\r\n\t\t}\r\n\r\n\t\tif(this.table.options.responsiveLayout ? column.modules.responsive.visible : column.visible){\r\n\t\t\tlastCol = column;\r\n\t\t}\r\n\r\n\t\tif(column.visible){\r\n\t\t\tcolsWidth += column.getWidth();\r\n\t\t}\r\n\t});\r\n\r\n\tif(lastCol){\r\n\t\tgap = tableWidth - colsWidth + lastCol.getWidth();\r\n\r\n\t\tif(this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)){\r\n\t\t\tlastCol.setWidth(0);\r\n\t\t\tthis.table.modules.responsiveLayout.update();\r\n\t\t}\r\n\r\n\t\tif(gap > 0){\r\n\t\t\tlastCol.setWidth(gap);\r\n\t\t}else{\r\n\t\t\tlastCol.reinitializeWidth();\r\n\t\t}\r\n\t}else{\r\n\t\tif(this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)){\r\n\t\t\tthis.table.modules.responsiveLayout.update();\r\n\t\t}\r\n\t}\r\n};","//resize columns to fit\r\nexport default function(columns){\r\n\tvar totalWidth = this.table.element.clientWidth; //table element width\r\n\tvar fixedWidth = 0; //total width of columns with a defined width\r\n\tvar flexWidth = 0; //total width available to flexible columns\r\n\tvar flexGrowUnits = 0; //total number of widthGrow blocks accross all columns\r\n\tvar flexColWidth = 0; //desired width of flexible columns\r\n\tvar flexColumns = []; //array of flexible width columns\r\n\tvar fixedShrinkColumns = []; //array of fixed width columns that can shrink\r\n\tvar flexShrinkUnits = 0; //total number of widthShrink blocks accross all columns\r\n\tvar overflowWidth = 0; //horizontal overflow width\r\n\tvar gapFill=0; //number of pixels to be added to final column to close and half pixel gaps\r\n\r\n\tfunction calcWidth(width){\r\n\t\tvar colWidth;\r\n\r\n\t\tif(typeof(width) == \"string\"){\r\n\t\t\tif(width.indexOf(\"%\") > -1){\r\n\t\t\t\tcolWidth = (totalWidth / 100) * parseInt(width);\r\n\t\t\t}else{\r\n\t\t\t\tcolWidth = parseInt(width);\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tcolWidth = width;\r\n\t\t}\r\n\r\n\t\treturn colWidth;\r\n\t}\r\n\r\n\t//ensure columns resize to take up the correct amount of space\r\n\tfunction scaleColumns(columns, freeSpace, colWidth, shrinkCols){\r\n\r\n\t\tvar oversizeCols = [],\r\n\t\toversizeSpace = 0,\r\n\t\tremainingSpace = 0,\r\n\t\tnextColWidth = 0,\r\n\t\tremainingFlexGrowUnits = flexGrowUnits,\r\n\t\tgap = 0,\r\n\t\tchangeUnits = 0,\r\n\t\tundersizeCols = [];\r\n\r\n\t\tfunction calcGrow(col){\r\n\t\t\treturn (colWidth * (col.column.definition.widthGrow || 1));\r\n\t\t}\r\n\r\n\t\tfunction calcShrink(col){\r\n\t\t\treturn (calcWidth(col.width) - (colWidth * (col.column.definition.widthShrink || 0)))\r\n\t\t}\r\n\r\n\t\tcolumns.forEach(function(col, i){\r\n\t\t\tvar width = shrinkCols ? calcShrink(col) : calcGrow(col);\r\n\t\t\tif(col.column.minWidth >= width){\r\n\t\t\t\toversizeCols.push(col);\r\n\t\t\t}else{\r\n\t\t\t\tif(col.column.maxWidth && col.column.maxWidth < width){\r\n\t\t\t\t\tcol.width = col.column.maxWidth;\r\n\t\t\t\t\tfreeSpace -= col.column.maxWidth;\r\n\r\n\t\t\t\t\tremainingFlexGrowUnits -= shrinkCols ? (col.column.definition.widthShrink || 1) : (col.column.definition.widthGrow || 1);\r\n\r\n\t\t\t\t\tif(remainingFlexGrowUnits){\r\n\t\t\t\t\t\tcolWidth = Math.floor(freeSpace/remainingFlexGrowUnits);\r\n\t\t\t\t\t}\r\n\t\t\t\t}else{\r\n\t\t\t\t\tundersizeCols.push(col);\r\n\t\t\t\t\tchangeUnits += shrinkCols ? (col.column.definition.widthShrink || 1) : (col.column.definition.widthGrow || 1);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tif(oversizeCols.length){\r\n\t\t\toversizeCols.forEach(function(col){\r\n\t\t\t\toversizeSpace += shrinkCols ? col.width - col.column.minWidth : col.column.minWidth;\r\n\t\t\t\tcol.width = col.column.minWidth;\r\n\t\t\t});\r\n\r\n\t\t\tremainingSpace = freeSpace - oversizeSpace;\r\n\r\n\t\t\tnextColWidth = changeUnits ? Math.floor(remainingSpace/changeUnits) : remainingSpace;\r\n\r\n\t\t\tgap = remainingSpace - (nextColWidth * changeUnits);\r\n\r\n\t\t\tgap += scaleColumns(undersizeCols, remainingSpace, nextColWidth, shrinkCols);\r\n\t\t}else{\r\n\t\t\tgap = changeUnits ? freeSpace - (Math.floor(freeSpace/changeUnits) * changeUnits) : freeSpace;\r\n\r\n\t\t\tundersizeCols.forEach(function(column){\r\n\t\t\t\tcolumn.width = shrinkCols ? calcShrink(column) : calcGrow(column);\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn gap;\r\n\t}\r\n\r\n\tif(this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)){\r\n\t\tthis.table.modules.responsiveLayout.update();\r\n\t}\r\n\r\n\t//adjust for vertical scrollbar if present\r\n\tif(this.table.rowManager.element.scrollHeight > this.table.rowManager.element.clientHeight){\r\n\t\ttotalWidth -= this.table.rowManager.element.offsetWidth - this.table.rowManager.element.clientWidth;\r\n\t}\r\n\r\n\tcolumns.forEach(function(column){\r\n\t\tvar width, minWidth, colWidth;\r\n\r\n\t\tif(column.visible){\r\n\r\n\t\t\twidth = column.definition.width;\r\n\t\t\tminWidth = parseInt(column.minWidth);\r\n\r\n\t\t\tif(width){\r\n\r\n\t\t\t\tcolWidth = calcWidth(width);\r\n\r\n\t\t\t\tfixedWidth += colWidth > minWidth ? colWidth : minWidth;\r\n\r\n\t\t\t\tif(column.definition.widthShrink){\r\n\t\t\t\t\tfixedShrinkColumns.push({\r\n\t\t\t\t\t\tcolumn:column,\r\n\t\t\t\t\t\twidth:colWidth > minWidth ? colWidth : minWidth\r\n\t\t\t\t\t});\r\n\t\t\t\t\tflexShrinkUnits += column.definition.widthShrink;\r\n\t\t\t\t}\r\n\r\n\t\t\t}else{\r\n\t\t\t\tflexColumns.push({\r\n\t\t\t\t\tcolumn:column,\r\n\t\t\t\t\twidth:0,\r\n\t\t\t\t});\r\n\t\t\t\tflexGrowUnits += column.definition.widthGrow || 1;\r\n\t\t\t}\r\n\t\t}\r\n\t});\r\n\r\n\t//calculate available space\r\n\tflexWidth = totalWidth - fixedWidth;\r\n\r\n\t//calculate correct column size\r\n\tflexColWidth = Math.floor(flexWidth / flexGrowUnits)\r\n\r\n\t//generate column widths\r\n\tvar gapFill = scaleColumns(flexColumns, flexWidth, flexColWidth, false);\r\n\r\n\t//increase width of last column to account for rounding errors\r\n\tif(flexColumns.length && gapFill > 0){\r\n\t\tflexColumns[flexColumns.length-1].width += + gapFill;\r\n\t}\r\n\r\n\t//caculate space for columns to be shrunk into\r\n\tflexColumns.forEach(function(col){\r\n\t\tflexWidth -= col.width;\r\n\t});\r\n\r\n\toverflowWidth = Math.abs(gapFill) + flexWidth;\r\n\r\n\t//shrink oversize columns if there is no available space\r\n\tif(overflowWidth > 0 && flexShrinkUnits){\r\n\t\tgapFill = scaleColumns(fixedShrinkColumns, overflowWidth, Math.floor(overflowWidth / flexShrinkUnits), true);\r\n\t}\r\n\r\n\t//decrease width of last column to account for rounding errors\r\n\tif(fixedShrinkColumns.length){\r\n\t\tfixedShrinkColumns[fixedShrinkColumns.length-1].width -= gapFill;\r\n\t}\r\n\r\n\tflexColumns.forEach(function(col){\r\n\t\tcol.column.setWidth(col.width);\r\n\t});\r\n\r\n\tfixedShrinkColumns.forEach(function(col){\r\n\t\tcol.column.setWidth(col.width);\r\n\t});\r\n};","import Module from '../../core/Module.js';\r\n\r\nimport defaultModes from './defaults/modes.js';\r\n\r\nclass Layout extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table, \"layout\");\r\n\r\n\t\tthis.mode = null;\r\n\r\n\t\tthis.registerTableOption(\"layout\", \"fitData\"); //layout type\r\n\t\tthis.registerTableOption(\"layoutColumnsOnNewData\", false); //update column widths on setData\r\n\r\n\t\tthis.registerColumnOption(\"widthGrow\");\r\n\t\tthis.registerColumnOption(\"widthShrink\");\r\n\t}\r\n\r\n\t//initialize layout system\r\n\tinitialize(){\r\n\t\tvar layout = this.table.options.layout;\r\n\r\n\t\tif(Layout.modes[layout]){\r\n\t\t\tthis.mode = layout;\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Layout Error - invalid mode set, defaulting to 'fitData' : \" + layout);\r\n\t\t\tthis.mode = 'fitData';\r\n\t\t}\r\n\r\n\t\tthis.table.element.setAttribute(\"tabulator-layout\", this.mode);\r\n\t}\r\n\r\n\tgetMode(){\r\n\t\treturn this.mode;\r\n\t}\r\n\r\n\t//trigger table layout\r\n\tlayout(){\r\n\t\tLayout.modes[this.mode].call(this, this.table.columnManager.columnsByIndex);\r\n\r\n\t\tthis.dispatch(\"layout-refreshed\")\r\n\t}\r\n}\r\n\r\nLayout.moduleName = \"layout\";\r\n\r\n//load defaults\r\nLayout.modes = defaultModes;\r\n\r\nexport default Layout;","import Module from '../../core/Module.js';\r\n\r\nimport Helpers from '../../core/tools/Helpers.js';\r\n\r\nimport defaultLangs from './defaults/langs.js';\r\n\r\nclass Localize extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.locale = \"default\"; //current locale\r\n\t\tthis.lang = false; //current language\r\n\t\tthis.bindings = {}; //update events to call when locale is changed\r\n\t\tthis.langList = {};\r\n\r\n\t\tthis.registerTableOption(\"locale\", false); //current system language\r\n\t\tthis.registerTableOption(\"langs\", {});\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tthis.langList = Helpers.deepClone(Localize.langs);\r\n\r\n\t\tif(this.table.options.columnDefaults.headerFilterPlaceholder !== false){\r\n\t\t\tthis.setHeaderFilterPlaceholder(this.table.options.columnDefaults.headerFilterPlaceholder);\r\n\t\t}\r\n\r\n\t\tfor(let locale in this.table.options.langs){\r\n\t\t\tthis.installLang(locale, this.table.options.langs[locale]);\r\n\t\t}\r\n\r\n\t\tthis.setLocale(this.table.options.locale);\r\n\r\n\t\tthis.registerTableFunction(\"setLocale\", this.setLocale.bind(this));\r\n\t\tthis.registerTableFunction(\"getLocale\", this.getLocale.bind(this));\r\n\t\tthis.registerTableFunction(\"getLang\", this.getLang.bind(this));\r\n\t}\r\n\r\n\t//set header placehoder\r\n\tsetHeaderFilterPlaceholder(placeholder){\r\n\t\tthis.langList.default.headerFilters.default = placeholder;\r\n\t}\r\n\r\n\t//set header filter placeholder by column\r\n\tsetHeaderFilterColumnPlaceholder(column, placeholder){\r\n\t\tthis.langList.default.headerFilters.columns[column] = placeholder;\r\n\r\n\t\tif(this.lang && !this.lang.headerFilters.columns[column]){\r\n\t\t\tthis.lang.headerFilters.columns[column] = placeholder;\r\n\t\t}\r\n\t}\r\n\r\n\t//setup a lang description object\r\n\tinstallLang(locale, lang){\r\n\t\tif(this.langList[locale]){\r\n\t\t\tthis._setLangProp(this.langList[locale], lang);\r\n\t\t}else{\r\n\t\t\tthis.langList[locale] = lang;\r\n\t\t}\r\n\t}\r\n\r\n\t_setLangProp(lang, values){\r\n\t\tfor(let key in values){\r\n\t\t\tif(lang[key] && typeof lang[key] == \"object\"){\r\n\t\t\t\tthis._setLangProp(lang[key], values[key])\r\n\t\t\t}else{\r\n\t\t\t\tlang[key] = values[key];\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//set current locale\r\n\tsetLocale(desiredLocale){\r\n\t\tdesiredLocale = desiredLocale || \"default\";\r\n\r\n\t\t//fill in any matching languge values\r\n\t\tfunction traverseLang(trans, path){\r\n\t\t\tfor(var prop in trans){\r\n\t\t\t\tif(typeof trans[prop] == \"object\"){\r\n\t\t\t\t\tif(!path[prop]){\r\n\t\t\t\t\t\tpath[prop] = {};\r\n\t\t\t\t\t}\r\n\t\t\t\t\ttraverseLang(trans[prop], path[prop]);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tpath[prop] = trans[prop];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//determing correct locale to load\r\n\t\tif(desiredLocale === true && navigator.language){\r\n\t\t\t//get local from system\r\n\t\t\tdesiredLocale = navigator.language.toLowerCase();\r\n\t\t}\r\n\r\n\t\tif(desiredLocale){\r\n\t\t\t//if locale is not set, check for matching top level locale else use default\r\n\t\t\tif(!this.langList[desiredLocale]){\r\n\t\t\t\tlet prefix = desiredLocale.split(\"-\")[0];\r\n\r\n\t\t\t\tif(this.langList[prefix]){\r\n\t\t\t\t\tconsole.warn(\"Localization Error - Exact matching locale not found, using closest match: \", desiredLocale, prefix);\r\n\t\t\t\t\tdesiredLocale = prefix;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.warn(\"Localization Error - Matching locale not found, using default: \", desiredLocale);\r\n\t\t\t\t\tdesiredLocale = \"default\";\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.locale = desiredLocale;\r\n\r\n\t\t//load default lang template\r\n\t\tthis.lang = Helpers.deepClone(this.langList.default || {});\r\n\r\n\t\tif(desiredLocale != \"default\"){\r\n\t\t\ttraverseLang(this.langList[desiredLocale], this.lang);\r\n\t\t}\r\n\r\n\t\tthis.dispatchExternal(\"localized\", this.locale, this.lang);\r\n\r\n\t\tthis._executeBindings();\r\n\t}\r\n\r\n\t//get current locale\r\n\tgetLocale(locale){\r\n\t\treturn this.locale;\r\n\t}\r\n\r\n\t//get lang object for given local or current if none provided\r\n\tgetLang(locale){\r\n\t\treturn locale ? this.langList[locale] : this.lang;\r\n\t}\r\n\r\n\t//get text for current locale\r\n\tgetText(path, value){\r\n\t\tvar path = value ? path + \"|\" + value : path,\r\n\t\tpathArray = path.split(\"|\"),\r\n\t\ttext = this._getLangElement(pathArray, this.locale);\r\n\r\n\t\t// if(text === false){\r\n\t\t// \tconsole.warn(\"Localization Error - Matching localized text not found for given path: \", path);\r\n\t\t// }\r\n\r\n\t\treturn text || \"\";\r\n\t}\r\n\r\n\t//traverse langs object and find localized copy\r\n\t_getLangElement(path, locale){\r\n\t\tvar root = this.lang;\r\n\r\n\t\tpath.forEach(function(level){\r\n\t\t\tvar rootPath;\r\n\r\n\t\t\tif(root){\r\n\t\t\t\trootPath = root[level];\r\n\r\n\t\t\t\tif(typeof rootPath != \"undefined\"){\r\n\t\t\t\t\troot = rootPath;\r\n\t\t\t\t}else{\r\n\t\t\t\t\troot = false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn root;\r\n\t}\r\n\r\n\t//set update binding\r\n\tbind(path, callback){\r\n\t\tif(!this.bindings[path]){\r\n\t\t\tthis.bindings[path] = [];\r\n\t\t}\r\n\r\n\t\tthis.bindings[path].push(callback);\r\n\r\n\t\tcallback(this.getText(path), this.lang);\r\n\t}\r\n\r\n\t//itterate through bindings and trigger updates\r\n\t_executeBindings(){\r\n\t\tfor(let path in this.bindings){\r\n\t\t\tthis.bindings[path].forEach((binding) => {\r\n\t\t\t\tbinding(this.getText(path), this.lang);\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n}\r\n\r\nLocalize.moduleName = \"localize\";\r\n\r\n//load defaults\r\nLocalize.langs = defaultLangs;\r\n\r\nexport default Localize;","export default {\r\n\t\"default\":{ //hold default locale text\r\n\t\t\"groups\":{\r\n\t\t\t\"item\":\"item\",\r\n\t\t\t\"items\":\"items\",\r\n\t\t},\r\n\t\t\"columns\":{\r\n\t\t},\r\n\t\t\"data\":{\r\n\t\t\t\"loading\":\"Loading\",\r\n\t\t\t\"error\":\"Error\",\r\n\t\t},\r\n\t\t\"pagination\":{\r\n\t\t\t\"page_size\":\"Page Size\",\r\n\t\t\t\"page_title\":\"Show Page\",\r\n\t\t\t\"first\":\"First\",\r\n\t\t\t\"first_title\":\"First Page\",\r\n\t\t\t\"last\":\"Last\",\r\n\t\t\t\"last_title\":\"Last Page\",\r\n\t\t\t\"prev\":\"Prev\",\r\n\t\t\t\"prev_title\":\"Prev Page\",\r\n\t\t\t\"next\":\"Next\",\r\n\t\t\t\"next_title\":\"Next Page\",\r\n\t\t\t\"all\":\"All\",\r\n\t\t},\r\n\t\t\"headerFilters\":{\r\n\t\t\t\"default\":\"filter column...\",\r\n\t\t\t\"columns\":{}\r\n\t\t}\r\n\t},\r\n};","import Module from '../../core/Module.js';\r\nimport TableRegistry from '../../core/tools/TableRegistry.js';\r\n\r\nclass Comms extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tthis.registerTableFunction(\"tableComms\", this.receive.bind(this));\r\n\t}\r\n\r\n\tgetConnections(selectors){\r\n\t\tvar connections = [],\r\n\t\tconnection;\r\n\r\n\t\tconnection = Tabulator.comms.lookupTable(selectors);\r\n\r\n\t\tconnection.forEach((con) =>{\r\n\t\t\tif(this.table !== con){\r\n\t\t\t\tconnections.push(con);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn connections;\r\n\t}\r\n\r\n\tsend(selectors, module, action, data){\r\n\t\tvar connections = this.getConnections(selectors);\r\n\r\n\t\tconnections.forEach((connection) => {\r\n\t\t\tconnection.tableComms(this.table.element, module, action, data);\r\n\t\t});\r\n\r\n\t\tif(!connections.length && selectors){\r\n\t\t\tconsole.warn(\"Table Connection Error - No tables matching selector found\", selectors);\r\n\t\t}\r\n\t}\r\n\r\n\treceive(table, module, action, data){\r\n\t\tif(this.table.modExists(module)){\r\n\t\t\treturn this.table.modules[module].commsReceived(table, action, data);\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Inter-table Comms Error - no such module:\", module);\r\n\t\t}\r\n\t}\r\n}\r\n\r\nComms.moduleName = \"comms\";\r\n\r\nexport default Comms;","import * as coreModules from '../modules/core.js';\r\nimport TableRegistry from './TableRegistry.js';\r\n\r\nexport default class ModuleBinder {\r\n\r\n\tconstructor(tabulator, modules){\r\n\t\tthis.bindStaticFuctionality(tabulator);\r\n\t\tthis.bindModules(tabulator, coreModules, true);\r\n\r\n\t\tif(modules){\r\n\t\t\tthis.bindModules(tabulator, modules);\r\n\t\t}\r\n\t}\r\n\r\n\tbindStaticFuctionality(tabulator){\r\n\t\ttabulator.moduleBindings = {};\r\n\r\n\t\ttabulator.extendModule = function(name, property, values){\r\n\t\t\tif(tabulator.moduleBindings[name]){\r\n\t\t\t\tvar source = tabulator.moduleBindings[name].prototype[property];\r\n\r\n\t\t\t\tif(source){\r\n\t\t\t\t\tif(typeof values == \"object\"){\r\n\t\t\t\t\t\tfor(let key in values){\r\n\t\t\t\t\t\t\tsource[key] = values[key];\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tconsole.warn(\"Module Error - Invalid value type, it must be an object\");\r\n\t\t\t\t\t}\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.warn(\"Module Error - property does not exist:\", property);\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Module Error - module does not exist:\", name);\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\ttabulator.registerModule = function(modules){\r\n\t\t\tif(!Array.isArray(modules)){\r\n\t\t\t\tmodules = [modules];\r\n\t\t\t}\r\n\r\n\t\t\tmodules.forEach((mod) => {\r\n\t\t\t\ttabulator.registerModuleBinding(mod)\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\ttabulator.registerModuleBinding = function(mod){\r\n\t\t\ttabulator.moduleBindings[mod.moduleName] = mod;\r\n\t\t};\r\n\r\n\t\ttabulator.findTable = function(query){\r\n\t\t\tvar results = TableRegistry.lookupTable(query, true);\r\n\t\t\treturn Array.isArray(results) && !results.length ? false : results;\r\n\t\t}\r\n\r\n\t\t//ensure that module are bound to instantiated function\r\n\t\ttabulator.prototype.bindModules = function(){\r\n\t\t\tthis.modules = {};\r\n\r\n\t\t\tfor(var name in tabulator.moduleBindings){\r\n\t\t\t\tlet mod = tabulator.moduleBindings[name];\r\n\r\n\t\t\t\tthis.modules[name] = new mod(this);\r\n\r\n\t\t\t\tif(mod.prototype.moduleCore){\r\n\t\t\t\t\tthis.modulesCore[name] = this.modules[name];\r\n\t\t\t\t}else{\r\n\t\t\t\t\tthis.modulesRegular[name] = this.modules[name];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tbindModules(tabulator, modules, core){\r\n\t\tvar mods = Object.values(modules);\r\n\r\n\t\tif(core){\r\n\t\t\tmods.forEach((mod) => {\r\n\t\t\t\tmod.prototype.moduleCore = true;\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\ttabulator.registerModule(mods);\r\n\t}\r\n}","'use strict';\r\n\r\nimport defaultOptions from './defaults/options.js';\r\n\r\nimport ColumnManager from './ColumnManager.js';\r\nimport RowManager from './RowManager.js';\r\nimport FooterManager from './FooterManager.js';\r\n\r\nimport InteractionMonitor from './tools/InteractionMonitor.js';\r\nimport ComponentFuctionBinder from './tools/ComponentFuctionBinder.js';\r\nimport DataLoader from './tools/dataLoader.js';\r\n\r\nimport ExternalEventBus from './tools/ExternalEventBus.js';\r\nimport InternalEventBus from './tools/InternalEventBus.js';\r\n\r\nimport TableRegistry from './tools/TableRegistry.js';\r\nimport ModuleBinder from './tools/ModuleBinder.js';\r\n\r\nimport OptionsList from './tools/OptionsList.js';\r\n\r\nclass Tabulator {\r\n\r\n\tconstructor(element, options){\r\n\r\n\t\tthis.options = {};\r\n\r\n\t\tthis.columnManager = null; // hold Column Manager\r\n\t\tthis.rowManager = null; //hold Row Manager\r\n\t\tthis.footerManager = null; //holder Footer Manager\r\n\t\tthis.vdomHoz = null; //holder horizontal virtual dom\r\n\t\tthis.externalEvents = null; //handle external event messaging\r\n\t\tthis.eventBus = null; //handle internal event messaging\r\n\t\tthis.interactionMonitor = false; //track user interaction\r\n\t\tthis.browser = \"\"; //hold current browser type\r\n\t\tthis.browserSlow = false; //handle reduced functionality for slower browsers\r\n\t\tthis.browserMobile = false; //check if running on moble, prevent resize cancelling edit on keyboard appearence\r\n\t\tthis.rtl = false; //check if the table is in RTL mode\r\n\r\n\t\tthis.componentFunctionBinder = new ComponentFuctionBinder(this); //bind component functions\r\n\t\tthis.dataLoader = false; //bind component functions\r\n\r\n\t\tthis.modules = {}; //hold all modules bound to this table\r\n\t\tthis.modulesCore = {}; //hold core modules bound to this table (for initialization purposes)\r\n\t\tthis.modulesRegular = {}; //hold regular modules bound to this table (for initialization purposes)\r\n\r\n\t\tthis.optionsList = new OptionsList(this, \"table constructor\");\r\n\r\n\t\tif(this.initializeElement(element)){\r\n\r\n\t\t\tthis.initialzeCoreSystems(options);\r\n\r\n\t\t\t//delay table creation to allow event bindings immediatly after the constructor\r\n\t\t\tsetTimeout(() => {\r\n\t\t\t\tthis._create();\r\n\t\t\t})\r\n\t\t}\r\n\r\n\t\tTableRegistry.register(this); //register table for inderdevice communication\r\n\t}\r\n\r\n\tinitializeElement(element){\r\n\t\tif(typeof HTMLElement !== \"undefined\" && element instanceof HTMLElement){\r\n\t\t\tthis.element = element;\r\n\t\t\treturn true;\r\n\t\t}else if(typeof element === \"string\"){\r\n\t\t\tthis.element = document.querySelector(element);\r\n\r\n\t\t\tif(this.element){\r\n\t\t\t\treturn true;\r\n\t\t\t}else{\r\n\t\t\t\tconsole.error(\"Tabulator Creation Error - no element found matching selector: \", element);\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tconsole.error(\"Tabulator Creation Error - Invalid element provided:\", element);\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\tinitialzeCoreSystems(options){\r\n\t\tthis.columnManager = new ColumnManager(this);\r\n\t\tthis.rowManager = new RowManager(this);\r\n\t\tthis.footerManager = new FooterManager(this);\r\n\t\tthis.dataLoader = new DataLoader(this);\r\n\r\n\t\tthis.bindModules();\r\n\r\n\t\tthis.options = this.optionsList.generate(Tabulator.defaultOptions, options)\r\n\r\n\t\tthis._clearObjectPointers();\r\n\r\n\t\tthis._mapDepricatedFunctionality();\r\n\r\n\t\tthis.externalEvents = new ExternalEventBus(this.options, this.options.debugEventsExternal);\r\n\t\tthis.eventBus = new InternalEventBus(this.options.debugEventsInternal);\r\n\r\n\t\tthis.interactionMonitor = new InteractionMonitor(this);\r\n\r\n\t\tthis.dataLoader.initialize();\r\n\t\tthis.columnManager.initialize();\r\n\t\tthis.rowManager.initialize();\r\n\t\tthis.footerManager.initialize();\r\n\t}\r\n\r\n\trtlCheck(){\r\n\t\tvar style = window.getComputedStyle(this.element);\r\n\r\n\t\tswitch(this.options.textDirection){\r\n\t\t\tcase\"auto\":\r\n\t\t\tif(style.direction !== \"rtl\"){\r\n\t\t\t\tbreak;\r\n\t\t\t};\r\n\r\n\t\t\tcase \"rtl\":\r\n\t\t\tthis.element.classList.add(\"tabulator-rtl\");\r\n\t\t\tthis.rtl = true;\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"ltr\":\r\n\t\t\tthis.element.classList.add(\"tabulator-ltr\");\r\n\r\n\t\t\tdefault:\r\n\t\t\tthis.rtl = false;\r\n\t\t}\r\n\t}\r\n\r\n\t//convert depricated functionality to new functions\r\n\t_mapDepricatedFunctionality(){\r\n\t\t//all previously deprecated functionality removed in the 5.0 release\r\n\t}\r\n\r\n\t_clearSelection(){\r\n\r\n\t\tthis.element.classList.add(\"tabulator-block-select\");\r\n\r\n\t\tif (window.getSelection) {\r\n\t\t if (window.getSelection().empty) { // Chrome\r\n\t\t \twindow.getSelection().empty();\r\n\t\t } else if (window.getSelection().removeAllRanges) { // Firefox\r\n\t\t \twindow.getSelection().removeAllRanges();\r\n\t\t }\r\n\t\t} else if (document.selection) { // IE?\r\n\t\t\tdocument.selection.empty();\r\n\t\t}\r\n\r\n\t\tthis.element.classList.remove(\"tabulator-block-select\");\r\n\t}\r\n\r\n\t//concreate table\r\n\t_create(){\r\n\t\tthis.externalEvents.dispatch(\"tableBuilding\");\r\n\t\tthis.eventBus.dispatch(\"table-building\");\r\n\r\n\t\tthis.rtlCheck();\r\n\r\n\t\tthis._buildElement();\r\n\r\n\t\tthis._loadInitialData();\r\n\t}\r\n\r\n\t//clear pointers to objects in default config object\r\n\t_clearObjectPointers(){\r\n\t\tthis.options.columns = this.options.columns.slice(0);\r\n\r\n\t\tif(this.options.data && !this.options.reactiveData){\r\n\t\t\tthis.options.data = this.options.data.slice(0);\r\n\t\t}\r\n\t}\r\n\r\n\t//build tabulator element\r\n\t_buildElement(){\r\n\t\tvar element = this.element,\r\n\t\toptions = this.options;\r\n\r\n\t\telement.classList.add(\"tabulator\");\r\n\t\telement.setAttribute(\"role\", \"grid\");\r\n\r\n\t\t//empty element\r\n\t\twhile(element.firstChild) element.removeChild(element.firstChild);\r\n\r\n\t\t//set table height\r\n\t\tif(options.height){\r\n\t\t\toptions.height = isNaN(options.height) ? options.height : options.height + \"px\";\r\n\t\t\telement.style.height = options.height;\r\n\t\t}\r\n\r\n\t\t//set table min height\r\n\t\tif(options.minHeight !== false){\r\n\t\t\toptions.minHeight = isNaN(options.minHeight) ? options.minHeight : options.minHeight + \"px\";\r\n\t\t\telement.style.minHeight = options.minHeight;\r\n\t\t}\r\n\r\n\t\t//set table maxHeight\r\n\t\tif(options.maxHeight !== false){\r\n\t\t\toptions.maxHeight = isNaN(options.maxHeight) ? options.maxHeight : options.maxHeight + \"px\";\r\n\t\t\telement.style.maxHeight = options.maxHeight;\r\n\t\t}\r\n\r\n\t\tthis.columnManager.initialize();\r\n\t\tthis.rowManager.initialize();\r\n\r\n\t\tthis._detectBrowser();\r\n\r\n\t\t//initialize core modules\r\n\t\tfor (let key in this.modulesCore){\r\n\t\t\tlet mod = this.modulesCore[key];\r\n\r\n\t\t\tmod.initialize();\r\n\t\t}\r\n\r\n\t\t//configure placeholder element\r\n\t\tif(typeof options.placeholder == \"string\"){\r\n\r\n\t\t\tvar el = document.createElement(\"div\");\r\n\t\t\tel.classList.add(\"tabulator-placeholder\");\r\n\r\n\t\t\tvar span = document.createElement(\"span\");\r\n\t\t\tspan.innerHTML = options.placeholder;\r\n\r\n\t\t\tel.appendChild(span);\r\n\r\n\t\t\toptions.placeholder = el;\r\n\t\t}\r\n\r\n\t\t//build table elements\r\n\t\telement.appendChild(this.columnManager.getElement());\r\n\t\telement.appendChild(this.rowManager.getElement());\r\n\r\n\t\tif(options.footerElement){\r\n\t\t\tthis.footerManager.activate();\r\n\t\t}\r\n\r\n\t\tif(options.autoColumns && this.options.data){\r\n\t\t\tthis.columnManager.generateColumnsFromRowData(this.options.data);\r\n\t\t}\r\n\r\n\t\t//initialize regular modules\r\n\t\tfor (let key in this.modulesRegular){\r\n\t\t\tlet mod = this.modulesRegular[key];\r\n\r\n\t\t\tmod.initialize();\r\n\t\t}\r\n\r\n\t\tthis.columnManager.setColumns(options.columns);\r\n\r\n\t\tthis.eventBus.dispatch(\"table-built\");\r\n\t\tthis.externalEvents.dispatch(\"tableBuilt\");\r\n\t}\r\n\r\n\t_loadInitialData(){\r\n\t\tthis.dataLoader.load(this.options.data);\r\n\t}\r\n\r\n\t//deconstructor\r\n\tdestroy(){\r\n\t\tvar element = this.element;\r\n\r\n\t\tTableRegistry.deregister(this); //deregister table from inderdevice communication\r\n\r\n\t\tthis.eventBus.dispatch(\"table-destroy\");\r\n\r\n\t\t//clear row data\r\n\t\tthis.rowManager.rows.forEach(function(row){\r\n\t\t\trow.wipe();\r\n\t\t});\r\n\r\n\t\tthis.rowManager.rows = [];\r\n\t\tthis.rowManager.activeRows = [];\r\n\t\tthis.rowManager.displayRows = [];\r\n\r\n\t\t//clear DOM\r\n\t\twhile(element.firstChild) element.removeChild(element.firstChild);\r\n\t\telement.classList.remove(\"tabulator\");\r\n\t}\r\n\r\n\t_detectBrowser(){\r\n\t\tvar ua = navigator.userAgent||navigator.vendor||window.opera;\r\n\r\n\t\tif(ua.indexOf(\"Trident\") > -1){\r\n\t\t\tthis.browser = \"ie\";\r\n\t\t\tthis.browserSlow = true;\r\n\t\t}else if(ua.indexOf(\"Edge\") > -1){\r\n\t\t\tthis.browser = \"edge\";\r\n\t\t\tthis.browserSlow = true;\r\n\t\t}else if(ua.indexOf(\"Firefox\") > -1){\r\n\t\t\tthis.browser = \"firefox\";\r\n\t\t\tthis.browserSlow = false;\r\n\t\t}else{\r\n\t\t\tthis.browser = \"other\";\r\n\t\t\tthis.browserSlow = false;\r\n\t\t}\r\n\r\n\t\tthis.browserMobile = /(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i.test(ua)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\\-(n|u)|c55\\/|capi|ccwa|cdm\\-|cell|chtm|cldc|cmd\\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\\-s|devi|dica|dmob|do(c|p)o|ds(12|\\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\\-|_)|g1 u|g560|gene|gf\\-5|g\\-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd\\-(m|p|t)|hei\\-|hi(pt|ta)|hp( i|ip)|hs\\-c|ht(c(\\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\\-(20|go|ma)|i230|iac( |\\-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc\\-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|\\-[a-w])|libw|lynx|m1\\-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m\\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\\-2|po(ck|rt|se)|prox|psio|pt\\-g|qa\\-a|qc(07|12|21|32|60|\\-[2-7]|i\\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\\-|oo|p\\-)|sdk\\/|se(c(\\-|0|1)|47|mc|nd|ri)|sgh\\-|shar|sie(\\-|m)|sk\\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\\-|v\\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\\-|tdg\\-|tel(i|m)|tim\\-|t\\-mo|to(pl|sh)|ts(70|m\\-|m3|m5)|tx\\-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\\-|your|zeto|zte\\-/i.test(ua.substr(0,4));\r\n\t}\r\n\r\n\t////////////////// Data Handling //////////////////\r\n\t//block table redrawing\r\n\tblockRedraw(){\r\n\t\treturn this.rowManager.blockRedraw();\r\n\t}\r\n\r\n\t//restore table redrawing\r\n\trestoreRedraw(){\r\n\t\treturn this.rowManager.restoreRedraw();\r\n\t}\r\n\r\n\t//local data from local file\r\n\tsetDataFromLocalFile(extensions){\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tvar input = document.createElement(\"input\");\r\n\t\t\tinput.type = \"file\";\r\n\t\t\tinput.accept = extensions || \".json,application/json\";\r\n\r\n\t\t\tinput.addEventListener(\"change\", (e) => {\r\n\t\t\t\tvar file = input.files[0],\r\n\t\t\t\treader = new FileReader(),\r\n\t\t\t\tdata;\r\n\r\n\t\t\t\treader.readAsText(file);\r\n\r\n\t\t\t\treader.onload = (e) => {\r\n\r\n\t\t\t\t\ttry {\r\n\t\t\t\t\t\tdata = JSON.parse(reader.result);\r\n\t\t\t\t\t} catch(e) {\r\n\t\t\t\t\t\tconsole.warn(\"File Load Error - File contents is invalid JSON\", e);\r\n\t\t\t\t\t\treject(e);\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tthis.setData(data)\r\n\t\t\t\t\t.then((data) => {\r\n\t\t\t\t\t\tresolve(data);\r\n\t\t\t\t\t})\r\n\t\t\t\t\t.catch((err) => {\r\n\t\t\t\t\t\tresolve(err);\r\n\t\t\t\t\t});\r\n\t\t\t\t};\r\n\r\n\t\t\t\treader.onerror = (e) => {\r\n\t\t\t\t\tconsole.warn(\"File Load Error - Unable to read file\");\r\n\t\t\t\t\treject();\r\n\t\t\t\t};\r\n\t\t\t});\r\n\r\n\t\t\tinput.click();\r\n\t\t});\r\n\t}\r\n\r\n\t//load data\r\n\tsetData(data, params, config){\r\n\t\treturn this.dataLoader.load(data, params, config, false);\r\n\t}\r\n\r\n\t//clear data\r\n\tclearData(){\r\n\t\tthis.dataLoader.blockActiveLoad();\r\n\t\tthis.rowManager.clearData();\r\n\t}\r\n\r\n\t//get table data array\r\n\tgetData(active){\r\n\t\treturn this.rowManager.getData(active);\r\n\t}\r\n\r\n\t//get table data array count\r\n\tgetDataCount(active){\r\n\t\treturn this.rowManager.getDataCount(active);\r\n\t}\r\n\r\n\t//replace data, keeping table in position with same sort\r\n\treplaceData(data, params, config){\r\n\t\treturn this.dataLoader.load(data, params, config, true, true);\r\n\t}\r\n\r\n\t//update table data\r\n\tupdateData(data){\r\n\t\tvar responses = 0;\r\n\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tthis.dataLoader.blockActiveLoad();\r\n\r\n\t\t\tif(typeof data === \"string\"){\r\n\t\t\t\tdata = JSON.parse(data);\r\n\t\t\t}\r\n\r\n\t\t\tif(data){\r\n\t\t\t\tdata.forEach((item) => {\r\n\t\t\t\t\tvar row = this.rowManager.findRow(item[this.options.index]);\r\n\r\n\t\t\t\t\tif(row){\r\n\t\t\t\t\t\tresponses++;\r\n\r\n\t\t\t\t\t\trow.updateData(item)\r\n\t\t\t\t\t\t.then(()=>{\r\n\t\t\t\t\t\t\tresponses--;\r\n\r\n\t\t\t\t\t\t\tif(!responses){\r\n\t\t\t\t\t\t\t\tresolve();\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Update Error - No data provided\");\r\n\t\t\t\treject(\"Update Error - No data provided\");\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\taddData(data, pos, index){\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tthis.dataLoader.blockActiveLoad();\r\n\r\n\t\t\tif(typeof data === \"string\"){\r\n\t\t\t\tdata = JSON.parse(data);\r\n\t\t\t}\r\n\r\n\t\t\tif(data){\r\n\t\t\t\tthis.rowManager.addRows(data, pos, index)\r\n\t\t\t\t.then((rows) => {\r\n\t\t\t\t\tvar output = [];\r\n\r\n\t\t\t\t\trows.forEach(function(row){\r\n\t\t\t\t\t\toutput.push(row.getComponent());\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\tresolve(output);\r\n\t\t\t\t});\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Update Error - No data provided\");\r\n\t\t\t\treject(\"Update Error - No data provided\");\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t//update table data\r\n\tupdateOrAddData(data){\r\n\t\tvar rows = [],\r\n\t\tresponses = 0;\r\n\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tthis.dataLoader.blockActiveLoad();\r\n\r\n\t\t\tif(typeof data === \"string\"){\r\n\t\t\t\tdata = JSON.parse(data);\r\n\t\t\t}\r\n\r\n\t\t\tif(data){\r\n\t\t\t\tdata.forEach((item) => {\r\n\t\t\t\t\tvar row = this.rowManager.findRow(item[this.options.index]);\r\n\r\n\t\t\t\t\tresponses++;\r\n\r\n\t\t\t\t\tif(row){\r\n\t\t\t\t\t\trow.updateData(item)\r\n\t\t\t\t\t\t.then(()=>{\r\n\t\t\t\t\t\t\tresponses--;\r\n\t\t\t\t\t\t\trows.push(row.getComponent());\r\n\r\n\t\t\t\t\t\t\tif(!responses){\r\n\t\t\t\t\t\t\t\tresolve(rows);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tthis.rowManager.addRows(item)\r\n\t\t\t\t\t\t.then((newRows)=>{\r\n\t\t\t\t\t\t\tresponses--;\r\n\t\t\t\t\t\t\trows.push(newRows[0].getComponent());\r\n\r\n\t\t\t\t\t\t\tif(!responses){\r\n\t\t\t\t\t\t\t\tresolve(rows);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Update Error - No data provided\");\r\n\t\t\t\treject(\"Update Error - No data provided\");\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t//get row object\r\n\tgetRow(index){\r\n\t\tvar row = this.rowManager.findRow(index);\r\n\r\n\t\tif(row){\r\n\t\t\treturn row.getComponent();\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Find Error - No matching row found:\", index);\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\t//get row object\r\n\tgetRowFromPosition(position, active){\r\n\t\tvar row = this.rowManager.getRowFromPosition(position, active);\r\n\r\n\t\tif(row){\r\n\t\t\treturn row.getComponent();\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Find Error - No matching row found:\", position);\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\t//delete row from table\r\n\tdeleteRow(index){\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tvar count = 0,\r\n\t\t\tsuccessCount = 0,\r\n\t\t\tfoundRows = [];\r\n\r\n\t\t\tfunction doneCheck(){\r\n\t\t\t\tcount++;\r\n\r\n\t\t\t\tif(count == index.length){\r\n\t\t\t\t\tif(successCount){\r\n\t\t\t\t\t\tthis.rowManager.reRenderInPosition();\r\n\t\t\t\t\t\tresolve();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif(!Array.isArray(index)){\r\n\t\t\t\tindex = [index];\r\n\t\t\t}\r\n\r\n\t\t\t//find matching rows\r\n\t\t\tindex.forEach((item) =>{\r\n\t\t\t\tvar row = this.rowManager.findRow(item, true);\r\n\r\n\t\t\t\tif(row){\r\n\t\t\t\t\tfoundRows.push(row);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.warn(\"Delete Error - No matching row found:\", item);\r\n\t\t\t\t\treject(\"Delete Error - No matching row found\")\r\n\t\t\t\t\tdoneCheck();\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\t//sort rows into correct order to ensure smooth delete from table\r\n\t\t\tfoundRows.sort((a, b) => {\r\n\t\t\t\treturn this.rowManager.rows.indexOf(a) > this.rowManager.rows.indexOf(b) ? 1 : -1;\r\n\t\t\t});\r\n\r\n\t\t\tfoundRows.forEach((row) =>{\r\n\t\t\t\trow.delete()\r\n\t\t\t\t.then(() => {\r\n\t\t\t\t\tsuccessCount++;\r\n\t\t\t\t\tdoneCheck();\r\n\t\t\t\t})\r\n\t\t\t\t.catch((err) => {\r\n\t\t\t\t\tdoneCheck();\r\n\t\t\t\t\treject(err);\r\n\t\t\t\t});\r\n\t\t\t});\r\n\t\t});\r\n\t}\r\n\r\n\t//add row to table\r\n\taddRow(data, pos, index){\r\n\t\tif(typeof data === \"string\"){\r\n\t\t\tdata = JSON.parse(data);\r\n\t\t}\r\n\r\n\t\treturn this.rowManager.addRows(data, pos, index)\r\n\t\t.then((rows)=>{\r\n\t\t\treturn rows[0].getComponent();\r\n\t\t});\r\n\t}\r\n\r\n\t//update a row if it exitsts otherwise create it\r\n\tupdateOrAddRow(index, data){\r\n\t\tvar row = this.rowManager.findRow(index);\r\n\r\n\t\tif(typeof data === \"string\"){\r\n\t\t\tdata = JSON.parse(data);\r\n\t\t}\r\n\r\n\t\tif(row){\r\n\t\t\treturn row.updateData(data)\r\n\t\t\t.then(()=>{\r\n\t\t\t\treturn row.getComponent();\r\n\t\t\t})\r\n\t\t}else{\r\n\t\t\treturn this.rowManager.addRows(data)\r\n\t\t\t.then((rows)=>{\r\n\t\t\t\treturn rows[0].getComponent();\r\n\t\t\t})\r\n\t\t}\r\n\t}\r\n\r\n\t//update row data\r\n\tupdateRow(index, data){\r\n\t\tvar row = this.rowManager.findRow(index);\r\n\r\n\t\tif(typeof data === \"string\"){\r\n\t\t\tdata = JSON.parse(data);\r\n\t\t}\r\n\r\n\t\tif(row){\r\n\t\t\treturn row.updateData(data)\r\n\t\t\t.then(()=>{\r\n\t\t\t\tresolve(row.getComponent());\r\n\t\t\t})\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Update Error - No matching row found:\", index);\r\n\t\t\treturn Promise.reject(\"Update Error - No matching row found\");\r\n\t\t}\r\n\t}\r\n\r\n\t//scroll to row in DOM\r\n\tscrollToRow(index, position, ifVisible){\r\n\t\tvar row = this.rowManager.findRow(index);\r\n\r\n\t\tif(row){\r\n\t\t\treturn this.rowManager.scrollToRow(row, position, ifVisible)\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Scroll Error - No matching row found:\", index);\r\n\t\t\treturn Promise.reject(\"Scroll Error - No matching row found\");\r\n\t\t}\r\n\t}\r\n\r\n\tmoveRow(from, to, after){\r\n\t\tvar fromRow = this.rowManager.findRow(from);\r\n\r\n\t\tif(fromRow){\r\n\t\t\tfromRow.moveToRow(to, after);\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Move Error - No matching row found:\", from);\r\n\t\t}\r\n\t}\r\n\r\n\tgetRows(active){\r\n\t\treturn this.rowManager.getComponents(active);\r\n\t}\r\n\r\n\t//get position of row in table\r\n\tgetRowPosition(index, active){\r\n\t\tvar row = this.rowManager.findRow(index);\r\n\r\n\t\tif(row){\r\n\t\t\treturn this.rowManager.getRowPosition(row, active);\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Position Error - No matching row found:\", index);\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\t/////////////// Column Functions ///////////////\r\n\tsetColumns(definition){\r\n\t\tthis.columnManager.setColumns(definition);\r\n\t}\r\n\r\n\tgetColumns(structured){\r\n\t\treturn this.columnManager.getComponents(structured);\r\n\t}\r\n\r\n\tgetColumn(field){\r\n\t\tvar col = this.columnManager.findColumn(field);\r\n\r\n\t\tif(col){\r\n\t\t\treturn col.getComponent();\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Find Error - No matching column found:\", field);\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\tgetColumnDefinitions(){\r\n\t\treturn this.columnManager.getDefinitionTree();\r\n\t}\r\n\r\n\tshowColumn(field){\r\n\t\tvar column = this.columnManager.findColumn(field);\r\n\r\n\t\tif(column){\r\n\t\t\tcolumn.show();\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Column Show Error - No matching column found:\", field);\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\thideColumn(field){\r\n\t\tvar column = this.columnManager.findColumn(field);\r\n\r\n\t\tif(column){\r\n\t\t\tcolumn.hide();\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Column Hide Error - No matching column found:\", field);\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\ttoggleColumn(field){\r\n\t\tvar column = this.columnManager.findColumn(field);\r\n\r\n\t\tif(column){\r\n\t\t\tif(column.visible){\r\n\t\t\t\tcolumn.hide();\r\n\t\t\t}else{\r\n\t\t\t\tcolumn.show();\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Column Visibility Toggle Error - No matching column found:\", field);\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\taddColumn(definition, before, field){\r\n\t\tvar column = this.columnManager.findColumn(field);\r\n\r\n\t\treturn this.columnManager.addColumn(definition, before, column)\r\n\t\t.then((column) => {\r\n\t\t\treturncolumn.getComponent();\r\n\t\t});\r\n\t}\r\n\r\n\tdeleteColumn(field){\r\n\t\tvar column = this.columnManager.findColumn(field);\r\n\r\n\t\tif(column){\r\n\t\t\treturn column.delete();\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Column Delete Error - No matching column found:\", field);\r\n\t\t\treturn Promise.reject();\r\n\t\t}\r\n\t}\r\n\r\n\tupdateColumnDefinition(field, definition){\r\n\t\tvar column = this.columnManager.findColumn(field);\r\n\r\n\t\tif(column){\r\n\t\t\treturn column.updateDefinition(definition)\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Column Update Error - No matching column found:\", field);\r\n\t\t\treturn Promise.reject();\r\n\t\t}\r\n\t}\r\n\r\n\tmoveColumn(from, to, after){\r\n\t\tvar fromColumn = this.columnManager.findColumn(from);\r\n\t\tvar toColumn = this.columnManager.findColumn(to);\r\n\r\n\t\tif(fromColumn){\r\n\t\t\tif(toColumn){\r\n\t\t\t\tthis.columnManager.moveColumn(fromColumn, toColumn, after)\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Move Error - No matching column found:\", toColumn);\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Move Error - No matching column found:\", from);\r\n\t\t}\r\n\t}\r\n\r\n\t//scroll to column in DOM\r\n\tscrollToColumn(field, position, ifVisible){\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tvar column = this.columnManager.findColumn(field);\r\n\r\n\t\t\tif(column){\r\n\t\t\t\treturn this.columnManager.scrollToColumn(column, position, ifVisible)\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Scroll Error - No matching column found:\", field);\r\n\t\t\t\treturn Promise.reject(\"Scroll Error - No matching column found\");\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t//////////// General Public Functions ////////////\r\n\t//redraw list without updating data\r\n\tredraw(force){\r\n\t\tthis.columnManager.redraw(force);\r\n\t\tthis.rowManager.redraw(force);\r\n\t}\r\n\r\n\tsetHeight(height){\r\n\t\tthis.options.height = isNaN(height) ? height : height + \"px\";\r\n\t\tthis.element.style.height = this.options.height;\r\n\t\tthis.rowManager.initializeRenderer();\r\n\t\tthis.rowManager.redraw();\r\n\t}\r\n\r\n\t//////////////////// Event Bus ///////////////////\r\n\r\n\ton(key, callback){\r\n\t\tthis.externalEvents.subscribe(key, callback);\r\n\t}\r\n\r\n\toff(key, callback){\r\n\t\tthis.externalEvents.unsubscribe(key, callback);\r\n\t}\r\n\r\n\tdispatchEvent(){\r\n\t\tvar args = Array.from(arguments),\r\n\t\tkey = args.shift();\r\n\r\n\t\tthis.externalEvents.dispatch(...arguments)\r\n\t}\r\n\r\n\t////////////// Extension Management //////////////\r\n\tmodExists(plugin, required){\r\n\t\tif(this.modules[plugin]){\r\n\t\t\treturn true;\r\n\t\t}else{\r\n\t\t\tif(required){\r\n\t\t\t\tconsole.error(\"Tabulator Module Not Installed: \" + plugin);\r\n\t\t\t}\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\tmodule(key){\r\n\t\tvar mod = this.modules[key];\r\n\r\n\t\tif(!mod){\r\n\t\t\tconsole.error(\"Tabulator module not installed: \" + key);\r\n\t\t}\r\n\r\n\t\treturn mod;\r\n\t}\r\n}\r\n\r\n//default setup options\r\nTabulator.defaultOptions = defaultOptions;\r\n\r\n//bind modules and static functionality\r\nnew ModuleBinder(Tabulator);\r\n\r\nexport default Tabulator;","export default {\r\n\r\n\tdebugEventsExternal:false, //flag to console log events\r\n\tdebugEventsInternal:false, //flag to console log events\r\n\tdebugInvalidOptions:true, //allow toggling of invalid option warnings\r\n\r\n\theight:false, //height of tabulator\r\n\tminHeight:false, //minimum height of tabulator\r\n\tmaxHeight:false, //maximum height of tabulator\r\n\r\n\tcolumnMaxWidth:false, //minimum global width for a column\r\n\tcolumnHeaderVertAlign:\"top\", //vertical alignment of column headers\r\n\r\n\tcolumns:[],//store for colum header info\r\n\tcolumnDefaults:{}, //store column default props\r\n\r\n\tdata:false, //default starting data\r\n\r\n\tautoColumns:false, //build columns from data row structure\r\n\tautoColumnsDefinitions:false,\r\n\r\n\tnestedFieldSeparator:\".\", //seperatpr for nested data\r\n\r\n\ttooltipGenerationMode:\"load\", //when to generate tooltips\r\n\r\n\tfooterElement:false, //hold footer element\r\n\r\n\tindex:\"id\", //filed for row index\r\n\r\n\ttextDirection:\"auto\",\r\n\r\n\taddRowPos:\"bottom\", //position to insert blank rows, top|bottom\r\n\r\n\theaderVisible:true, //hide header\r\n\r\n\trenderVertical:\"virtual\",\r\n\trenderHorizontal:\"basic\",\r\n\trenderVerticalBuffer:0, // set virtual DOM buffer size\r\n\r\n\tscrollToRowPosition:\"top\",\r\n\tscrollToRowIfVisible:true,\r\n\r\n\tscrollToColumnPosition:\"left\",\r\n\tscrollToColumnIfVisible:true,\r\n\r\n\trowFormatter:false,\r\n\trowFormatterPrint:null,\r\n\trowFormatterClipboard:null,\r\n\trowFormatterHtmlOutput:null,\r\n\r\n\tplaceholder:false,\r\n\r\n\tdataLoader:true,\r\n\tdataLoaderLoading:false,\r\n\tdataLoaderError:false,\r\n\r\n\tdataSendParams:{},\r\n\r\n\tdataReceiveParams:{},\r\n}","import Module from '../../core/Module.js';\r\nimport Helpers from '../../core/tools/Helpers.js';\r\n\r\nimport defautlAccessors from './defaults/accessors.js';\r\n\r\nclass Accessor extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.allowedTypes = [\"\", \"data\", \"download\", \"clipboard\", \"print\", \"htmlOutput\"] //list of accessor types\r\n\r\n\t\tthis.registerColumnOption(\"accessor\");\r\n\t\tthis.registerColumnOption(\"accessorParams\");\r\n\t\tthis.registerColumnOption(\"accessorData\");\r\n\t\tthis.registerColumnOption(\"accessorDataParams\");\r\n\t\tthis.registerColumnOption(\"accessorDownload\");\r\n\t\tthis.registerColumnOption(\"accessorDownloadParams\");\r\n\t\tthis.registerColumnOption(\"accessorClipboard\");\r\n\t\tthis.registerColumnOption(\"accessorClipboardParams\");\r\n\t\tthis.registerColumnOption(\"accessorPrint\");\r\n\t\tthis.registerColumnOption(\"accessorPrintParams\");\r\n\t\tthis.registerColumnOption(\"accessorHtmlOutput\");\r\n\t\tthis.registerColumnOption(\"accessorHtmlOutputParams\");\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tthis.subscribe(\"column-layout\", this.initializeColumn.bind(this));\r\n\t\tthis.subscribe(\"row-data-retrieve\", this.transformRow.bind(this));\r\n\t}\r\n\r\n\t//initialize column accessor\r\n\tinitializeColumn(column){\r\n\t\tvar match = false,\r\n\t\tconfig = {};\r\n\r\n\t\tthis.allowedTypes.forEach(function(type){\r\n\t\t\tvar key = \"accessor\" + (type.charAt(0).toUpperCase() + type.slice(1)),\r\n\t\t\taccessor;\r\n\r\n\t\t\tif(column.definition[key]){\r\n\t\t\t\taccessor = this.lookupAccessor(column.definition[key]);\r\n\r\n\t\t\t\tif(accessor){\r\n\t\t\t\t\tmatch = true;\r\n\r\n\t\t\t\t\tconfig[key] = {\r\n\t\t\t\t\t\taccessor:accessor,\r\n\t\t\t\t\t\tparams: column.definition[key + \"Params\"] || {},\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tif(match){\r\n\t\t\tcolumn.modules.accessor = config;\r\n\t\t}\r\n\t}\r\n\r\n\tlookupAccessor(value){\r\n\t\tvar accessor = false;\r\n\r\n\t\t//set column accessor\r\n\t\tswitch(typeof value){\r\n\t\t\tcase \"string\":\r\n\t\t\tif(Accessor.accessors[value]){\r\n\t\t\t\taccessor = Accessor.accessors[value]\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Accessor Error - No such accessor found, ignoring: \", value);\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"function\":\r\n\t\t\taccessor = value;\r\n\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\treturn accessor;\r\n\t}\r\n\r\n\t//apply accessor to row\r\n\ttransformRow(row, type){\r\n\t\tvar key = \"accessor\" + (type.charAt(0).toUpperCase() + type.slice(1)),\r\n\t\trowComponent = row.getComponent();\r\n\r\n\t\t//clone data object with deep copy to isolate internal data from returned result\r\n\t\tvar data = Helpers.deepClone(row.data || {});\r\n\r\n\t\tthis.table.columnManager.traverse(function(column){\r\n\t\t\tvar value, accessor, params, colCompnent;\r\n\r\n\t\t\tif(column.modules.accessor){\r\n\r\n\t\t\t\taccessor = column.modules.accessor[key] || column.modules.accessor.accessor || false;\r\n\r\n\t\t\t\tif(accessor){\r\n\t\t\t\t\tvalue = column.getFieldValue(data);\r\n\r\n\t\t\t\t\tif(value != \"undefined\"){\r\n\t\t\t\t\t\tcolCompnent = column.getComponent();\r\n\t\t\t\t\t\tparams = typeof accessor.params === \"function\" ? accessor.params(value, data, type, colCompnent, rowComponent) : accessor.params;\r\n\t\t\t\t\t\tcolumn.setFieldValue(data, accessor.accessor(value, data, type, params, colCompnent, rowComponent));\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn data;\r\n\t}\r\n}\r\n\r\n//load defaults\r\nAccessor.moduleName = \"accessor\";\r\nAccessor.accessors = defautlAccessors;\r\n\r\nexport default Accessor;","export default {}","function generateParamsList(data, prefix){\r\n\tvar output = [];\r\n\r\n\tprefix = prefix || \"\";\r\n\r\n\tif(Array.isArray(data)){\r\n\t\tdata.forEach((item, i) => {\r\n\t\t\toutput = output.concat(generateParamsList(item, prefix ? prefix + \"[\" + i + \"]\" : i));\r\n\t\t});\r\n\t}else if (typeof data === \"object\"){\r\n\t\tfor (var key in data){\r\n\t\t\toutput = output.concat(generateParamsList(data[key], prefix ? prefix + \"[\" + key + \"]\" : key));\r\n\t\t}\r\n\t}else{\r\n\t\toutput.push({key:prefix, value:data});\r\n\t}\r\n\r\n\treturn output;\r\n}\r\n\r\nfunction serializeParams(params){\r\n\tvar output = generateParamsList(params),\r\n\tencoded = [];\r\n\r\n\toutput.forEach(function(item){\r\n\t\tencoded.push(encodeURIComponent(item.key) + \"=\" + encodeURIComponent(item.value));\r\n\t});\r\n\r\n\treturn encoded.join(\"&\");\r\n}\r\n\r\nexport default function(url, config, params){\r\n\tif(url){\r\n\t\tif(params && Object.keys(params).length){\r\n\t\t\tif(!config.method || config.method.toLowerCase() == \"get\"){\r\n\t\t\t\tconfig.method = \"get\";\r\n\r\n\t\t\t\turl += (url.includes(\"?\") ? \"&\" : \"?\") + serializeParams(params);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\treturn url;\r\n};","export default {\r\n\t\"json\":{\r\n\t\theaders:{\r\n\t\t\t'Content-Type': 'application/json',\r\n\t\t},\r\n\t\tbody:function(url, config, params){\r\n\t\t\treturn JSON.stringify(params);\r\n\t\t},\r\n\t},\r\n\t\"form\":{\r\n\t\theaders:{\r\n\t\t},\r\n\t\tbody:function(url, config, params){\r\n\t\t\tvar output = this.generateParamsList(params),\r\n\t\t\tform = new FormData();\r\n\r\n\t\t\toutput.forEach(function(item){\r\n\t\t\t\tform.append(item.key, item.value);\r\n\t\t\t});\r\n\r\n\t\t\treturn form;\r\n\t\t},\r\n\t},\r\n};","import Module from '../../core/Module.js';\r\n\r\nimport defaultConfig from './defaults/config.js';\r\nimport defaultURLGenerator from './defaults/urlGenerator.js';\r\nimport defaultLoaderPromise from './defaults/loaderPromise.js';\r\nimport defaultContentTypeFormatters from './defaults/contentTypeFormatters.js';\r\n\r\nclass Ajax extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.config = false; //hold config object for ajax request\r\n\t\tthis.url = \"\"; //request URL\r\n\t\tthis.urlGenerator = false;\r\n\t\tthis.params = false; //request parameters\r\n\r\n\t\tthis.loaderPromise = false;\r\n\r\n\t\tthis.registerTableOption(\"ajaxURL\", false); //url for ajax loading\r\n\t\tthis.registerTableOption(\"ajaxURLGenerator\", false);\r\n\t\tthis.registerTableOption(\"ajaxParams\", {}); //params for ajax loading\r\n\t\tthis.registerTableOption(\"ajaxConfig\", \"get\"); //ajax request type\r\n\t\tthis.registerTableOption(\"ajaxContentType\", \"form\"); //ajax request type\r\n\t\tthis.registerTableOption(\"ajaxRequestFunc\", false); //promise function\r\n\r\n\t\tthis.registerTableOption(\"ajaxRequesting\", function(){});\r\n\t\tthis.registerTableOption(\"ajaxResponse\", false);\r\n\r\n\t\tthis.contentTypeFormatters = Ajax.contentTypeFormatters;\r\n\t}\r\n\r\n\t//initialize setup options\r\n\tinitialize(){\r\n\t\tthis.loaderPromise = this.table.options.ajaxRequestFunc || Ajax.defaultLoaderPromise;\r\n\t\tthis.urlGenerator = this.table.options.ajaxURLGenerator || Ajax.defaultURLGenerator;\r\n\r\n\t\tif(this.table.options.ajaxParams){\r\n\t\t\tthis.setParams(this.table.options.ajaxParams);\r\n\t\t}\r\n\r\n\t\tif(this.table.options.ajaxConfig){\r\n\t\t\tthis.setConfig(this.table.options.ajaxConfig);\r\n\t\t}\r\n\r\n\t\tif(this.table.options.ajaxURL){\r\n\t\t\tthis.setUrl(this.table.options.ajaxURL);\r\n\t\t}\r\n\r\n\t\tthis.registerTableFunction(\"getAjaxUrl\", this.getUrl.bind(this));\r\n\r\n\t\tthis.subscribe(\"data-loading\", this.requestDataCheck.bind(this));\r\n\t\tthis.subscribe(\"data-load\", this.requestData.bind(this));\r\n\t}\r\n\r\n\r\n\trequestDataCheck(data, params, config, silent){\r\n\t\treturn !!((!data && this.url) || typeof data === \"string\");\r\n\t}\r\n\r\n\trequestData(data, params, config, silent, previousData){\r\n\t\tif(this.requestDataCheck(data)){\r\n\t\t\tif(data){\r\n\t\t\t\tthis.setUrl(data);\r\n\t\t\t}\r\n\r\n\t\t\tif(params){\r\n\t\t\t\tthis.setParams(params, true);\r\n\t\t\t}\r\n\r\n\t\t\tif(config){\r\n\t\t\t\tthis.setConfig(config);\r\n\t\t\t}\r\n\r\n\t\t\treturn this.sendRequest();\r\n\t\t}else{\r\n\t\t\treturn previousData;\r\n\t\t}\r\n\t}\r\n\r\n\t//set ajax params\r\n\tsetParams(params, update){\r\n\t\tif(update){\r\n\t\t\tthis.params = this.params || {};\r\n\r\n\t\t\tfor(let key in params){\r\n\t\t\t\tthis.params[key] = params[key];\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tthis.params = params;\r\n\t\t}\r\n\t}\r\n\r\n\tgetParams(){\r\n\t\treturn this.params || {};\r\n\t}\r\n\r\n\t//load config object\r\n\tsetConfig(config){\r\n\t\tthis._loadDefaultConfig();\r\n\r\n\t\tif(typeof config == \"string\"){\r\n\t\t\tthis.config.method = config;\r\n\t\t}else{\r\n\t\t\tfor(let key in config){\r\n\t\t\t\tthis.config[key] = config[key];\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//create config object from default\r\n\t_loadDefaultConfig(force){\r\n\t\tif(!this.config || force){\r\n\r\n\t\t\tthis.config = {};\r\n\r\n\t\t\t//load base config from defaults\r\n\t\t\tfor(let key in Ajax.defaultConfig){\r\n\t\t\t\tthis.config[key] = Ajax.defaultConfig[key];\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//set request url\r\n\tsetUrl(url){\r\n\t\tthis.url = url;\r\n\t}\r\n\r\n\t//get request url\r\n\tgetUrl(){\r\n\t\treturn this.url;\r\n\t}\r\n\r\n\t//send ajax request\r\n\tsendRequest(silent){\r\n\t\tvar url = this.url,\r\n\t\tesc, query;\r\n\r\n\t\tthis._loadDefaultConfig();\r\n\r\n\t\tif(this.table.options.ajaxRequesting.call(this.table, this.url, this.params) !== false){\r\n\t\t\treturn this.loaderPromise(url, this.config, this.params)\r\n\t\t\t.then((data)=>{\r\n\t\t\t\tif(this.table.options.ajaxResponse){\r\n\t\t\t\t\tdata = this.table.options.ajaxResponse.call(this.table, this.url, this.params, data);\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn data;\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\treturn Promise.reject();\r\n\t\t}\r\n\t}\r\n}\r\n\r\nAjax.moduleName = \"ajax\";\r\n\r\n//load defaults\r\nAjax.defaultConfig = defaultConfig;\r\nAjax.defaultURLGenerator = defaultURLGenerator;\r\nAjax.defaultLoaderPromise = defaultLoaderPromise;\r\nAjax.contentTypeFormatters = defaultContentTypeFormatters;\r\n\r\nexport default Ajax;","export default {\r\n\tmethod: \"GET\",\r\n};","export default function(url, config, params){\r\n\tvar contentType;\r\n\r\n\treturn new Promise((resolve, reject) => {\r\n\t\t//set url\r\n\t\turl = this.urlGenerator.call(this.table, url, config, params);\r\n\r\n\t\t//set body content if not GET request\r\n\t\tif(config.method.toUpperCase() != \"GET\"){\r\n\t\t\tcontentType = typeof this.table.options.ajaxContentType === \"object\" ? this.table.options.ajaxContentType : this.contentTypeFormatters[this.table.options.ajaxContentType];\r\n\t\t\tif(contentType){\r\n\r\n\t\t\t\tfor(var key in contentType.headers){\r\n\t\t\t\t\tif(!config.headers){\r\n\t\t\t\t\t\tconfig.headers = {};\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif(typeof config.headers[key] === \"undefined\"){\r\n\t\t\t\t\t\tconfig.headers[key] = contentType.headers[key];\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tconfig.body = contentType.body.call(this, url, config, params);\r\n\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Ajax Error - Invalid ajaxContentType value:\", this.table.options.ajaxContentType);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(url){\r\n\t\t\t//configure headers\r\n\t\t\tif(typeof config.headers === \"undefined\"){\r\n\t\t\t\tconfig.headers = {};\r\n\t\t\t}\r\n\r\n\t\t\tif(typeof config.headers.Accept === \"undefined\"){\r\n\t\t\t\tconfig.headers.Accept = \"application/json\";\r\n\t\t\t}\r\n\r\n\t\t\tif(typeof config.headers[\"X-Requested-With\"] === \"undefined\"){\r\n\t\t\t\tconfig.headers[\"X-Requested-With\"] = \"XMLHttpRequest\";\r\n\t\t\t}\r\n\r\n\t\t\tif(typeof config.mode === \"undefined\"){\r\n\t\t\t\tconfig.mode = \"cors\";\r\n\t\t\t}\r\n\r\n\t\t\tif(config.mode == \"cors\"){\r\n\r\n\t\t\t\tif(typeof config.headers[\"Access-Control-Allow-Origin\"] === \"undefined\"){\r\n\t\t\t\t\tconfig.headers[\"Access-Control-Allow-Origin\"] = window.location.origin;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(typeof config.credentials === \"undefined\"){\r\n\t\t\t\t\tconfig.credentials = 'same-origin';\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tif(typeof config.credentials === \"undefined\"){\r\n\t\t\t\t\tconfig.credentials = 'include';\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t//send request\r\n\t\t\tfetch(url, config)\r\n\t\t\t.then((response)=>{\r\n\t\t\t\tif(response.ok) {\r\n\t\t\t\t\tresponse.json()\r\n\t\t\t\t\t.then((data)=>{\r\n\t\t\t\t\t\tresolve(data);\r\n\t\t\t\t\t}).catch((error)=>{\r\n\t\t\t\t\t\treject(error);\r\n\t\t\t\t\t\tconsole.warn(\"Ajax Load Error - Invalid JSON returned\", error);\r\n\t\t\t\t\t});\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.error(\"Ajax Load Error - Connection Error: \" + response.status, response.statusText);\r\n\t\t\t\t\treject(response);\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t\t.catch((error)=>{\r\n\t\t\t\tconsole.error(\"Ajax Load Error - Connection Error: \", error);\r\n\t\t\t\treject(error);\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Ajax Load Error - No URL Set\");\r\n\t\t\tresolve([]);\r\n\t\t}\r\n\t});\r\n};","import Module from '../../core/Module.js';\r\n\r\nimport defaultPasteActions from './defaults/pasteActions.js';\r\nimport defaultPasteParsers from './defaults/pasteParsers.js';\r\n\r\nclass Clipboard extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.mode = true;\r\n\t\tthis.pasteParser = function(){};\r\n\t\tthis.pasteAction = function(){};\r\n\t\tthis.customSelection = false;\r\n\t\tthis.rowRange = false;\r\n\t\tthis.blocked = true; //block copy actions not originating from this command\r\n\r\n\t\tthis.registerTableOption(\"clipboard\", false); //enable clipboard\r\n\t\tthis.registerTableOption(\"clipboardCopyStyled\", true); //formatted table data\r\n\t\tthis.registerTableOption(\"clipboardCopyConfig\", false); //clipboard config\r\n\t\tthis.registerTableOption(\"clipboardCopyFormatter\", false); //DEPRICATED - REMOVE in 5.0\r\n\t\tthis.registerTableOption(\"clipboardCopyRowRange\", \"active\"); //restrict clipboard to visible rows only\r\n\t\tthis.registerTableOption(\"clipboardPasteParser\", \"table\"); //convert pasted clipboard data to rows\r\n\t\tthis.registerTableOption(\"clipboardPasteAction\", \"insert\"); //how to insert pasted data into the table\r\n\r\n\t\tthis.registerColumnOption(\"clipboard\");\r\n\t\tthis.registerColumnOption(\"titleClipboard\");\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tthis.mode = this.table.options.clipboard;\r\n\r\n\t\tthis.rowRange = this.table.options.clipboardCopyRowRange;\r\n\r\n\t\tif(this.mode === true || this.mode === \"copy\"){\r\n\t\t\tthis.table.element.addEventListener(\"copy\", (e) => {\r\n\t\t\t\tvar plain, html, list;\r\n\r\n\t\t\t\tif(!this.blocked){\r\n\t\t\t\t\te.preventDefault();\r\n\r\n\t\t\t\t\tif(this.customSelection){\r\n\t\t\t\t\t\tplain = this.customSelection;\r\n\r\n\t\t\t\t\t\tif(this.table.options.clipboardCopyFormatter){\r\n\t\t\t\t\t\t\tplain = this.table.options.clipboardCopyFormatter(\"plain\", plain);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}else{\r\n\r\n\t\t\t\t\t\tvar list = this.table.modules.export.generateExportList(this.table.options.clipboardCopyConfig, this.table.options.clipboardCopyStyled, this.rowRange, \"clipboard\");\r\n\r\n\t\t\t\t\t\thtml = this.table.modules.export.genereateHTMLTable(list);\r\n\t\t\t\t\t\tplain = html ? this.generatePlainContent(list) : \"\";\r\n\r\n\t\t\t\t\t\tif(this.table.options.clipboardCopyFormatter){\r\n\t\t\t\t\t\t\tplain = this.table.options.clipboardCopyFormatter(\"plain\", plain);\r\n\t\t\t\t\t\t\thtml = this.table.options.clipboardCopyFormatter(\"html\", html);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (window.clipboardData && window.clipboardData.setData) {\r\n\t\t\t\t\t\twindow.clipboardData.setData('Text', plain);\r\n\t\t\t\t\t} else if (e.clipboardData && e.clipboardData.setData) {\r\n\t\t\t\t\t\te.clipboardData.setData('text/plain', plain);\r\n\t\t\t\t\t\tif(html){\r\n\t\t\t\t\t\t\te.clipboardData.setData('text/html', html);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} else if (e.originalEvent && e.originalEvent.clipboardData.setData) {\r\n\t\t\t\t\t\te.originalEvent.clipboardData.setData('text/plain', plain);\r\n\t\t\t\t\t\tif(html){\r\n\t\t\t\t\t\t\te.originalEvent.clipboardData.setData('text/html', html);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tthis.dispatchExternal(\"clipboardCopied\", plain, html);\r\n\r\n\t\t\t\t\tthis.reset();\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif(this.mode === true || this.mode === \"paste\"){\r\n\t\t\tthis.table.element.addEventListener(\"paste\", (e) => {\r\n\t\t\t\tthis.paste(e);\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tthis.setPasteParser(this.table.options.clipboardPasteParser);\r\n\t\tthis.setPasteAction(this.table.options.clipboardPasteAction);\r\n\r\n\t\tthis.registerTableFunction(\"copyToClipboard\", this.copy.bind(this));\r\n\t}\r\n\r\n\treset(){\r\n\t\tthis.blocked = true;\r\n\t\tthis.customSelection = false;\r\n\t}\r\n\r\n\tgeneratePlainContent (list) {\r\n\t\tvar output = [];\r\n\r\n\t\tlist.forEach((row) => {\r\n\t\t\tvar rowData = [];\r\n\r\n\t\t\trow.columns.forEach((col) => {\r\n\t\t\t\tvar value = \"\";\r\n\r\n\t\t\t\tif(col){\r\n\r\n\t\t\t\t\tif(row.type === \"group\"){\r\n\t\t\t\t\t\tcol.value = col.component.getKey();\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif(col.value === null){\r\n\t\t\t\t\t\tvalue = \"\";\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tswitch(typeof col.value){\r\n\t\t\t\t\t\t\tcase \"object\":\r\n\t\t\t\t\t\t\tvalue = JSON.stringify(col.value);\r\n\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\t\tcase \"undefined\":\r\n\t\t\t\t\t\t\tvalue = \"\";\r\n\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\t\tdefault:\r\n\t\t\t\t\t\t\tvalue = col.value;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\trowData.push(value);\r\n\t\t\t});\r\n\r\n\t\t\toutput.push(rowData.join(\"\\t\"));\r\n\t\t});\r\n\r\n\t\treturn output.join(\"\\n\");\r\n\t}\r\n\r\n\tcopy (range, internal) {\r\n\t\tvar range, sel, textRange;\r\n\t\tthis.blocked = false;\r\n\t\tthis.customSelection = false;\r\n\r\n\t\tif (this.mode === true || this.mode === \"copy\") {\r\n\r\n\t\t\tthis.rowRange = range || this.table.options.clipboardCopyRowRange;\r\n\r\n\t\t\tif (typeof window.getSelection != \"undefined\" && typeof document.createRange != \"undefined\") {\r\n\t\t\t\trange = document.createRange();\r\n\t\t\t\trange.selectNodeContents(this.table.element);\r\n\t\t\t\tsel = window.getSelection();\r\n\r\n\t\t\t\tif (sel.toString() && internal) {\r\n\t\t\t\t\tthis.customSelection = sel.toString();\r\n\t\t\t\t}\r\n\r\n\t\t\t\tsel.removeAllRanges();\r\n\t\t\t\tsel.addRange(range);\r\n\t\t\t} else if (typeof document.selection != \"undefined\" && typeof document.body.createTextRange != \"undefined\") {\r\n\t\t\t\ttextRange = document.body.createTextRange();\r\n\t\t\t\ttextRange.moveToElementText(this.table.element);\r\n\t\t\t\ttextRange.select();\r\n\t\t\t}\r\n\r\n\t\t\tdocument.execCommand('copy');\r\n\r\n\t\t\tif (sel) {\r\n\t\t\t\tsel.removeAllRanges();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//PASTE EVENT HANDLING\r\n\tsetPasteAction(action){\r\n\r\n\t\tswitch(typeof action){\r\n\t\t\tcase \"string\":\r\n\t\t\tthis.pasteAction = Clipboard.pasteActions[action];\r\n\r\n\t\t\tif(!this.pasteAction){\r\n\t\t\t\tconsole.warn(\"Clipboard Error - No such paste action found:\", action);\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"function\":\r\n\t\t\tthis.pasteAction = action;\r\n\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\tsetPasteParser(parser){\r\n\t\tswitch(typeof parser){\r\n\t\t\tcase \"string\":\r\n\t\t\tthis.pasteParser = Clipboard.pasteParsers[parser];\r\n\r\n\t\t\tif(!this.pasteParser){\r\n\t\t\t\tconsole.warn(\"Clipboard Error - No such paste parser found:\", parser);\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"function\":\r\n\t\t\tthis.pasteParser = parser;\r\n\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\tpaste(e){\r\n\t\tvar data, rowData, rows;\r\n\r\n\t\tif(this.checkPaseOrigin(e)){\r\n\r\n\t\t\tdata = this.getPasteData(e);\r\n\r\n\t\t\trowData = this.pasteParser.call(this, data);\r\n\r\n\t\t\tif(rowData){\r\n\t\t\t\te.preventDefault();\r\n\r\n\t\t\t\tif(this.table.modExists(\"mutator\")){\r\n\t\t\t\t\trowData = this.mutateData(rowData);\r\n\t\t\t\t}\r\n\r\n\t\t\t\trows = this.pasteAction.call(this, rowData);\r\n\r\n\t\t\t\tthis.dispatchExternal(\"clipboardPasted\", data, rowData, rows);\r\n\t\t\t}else{\r\n\t\t\t\tthis.dispatchExternal(\"clipboardPasteError\", data);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tmutateData(data){\r\n\t\tvar output = [];\r\n\r\n\t\tif(Array.isArray(data)){\r\n\t\t\tdata.forEach((row) => {\r\n\t\t\t\toutput.push(this.table.modules.mutator.transformRow(row, \"clipboard\"));\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\toutput = data;\r\n\t\t}\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\r\n\tcheckPaseOrigin(e){\r\n\t\tvar valid = true;\r\n\r\n\t\tif(e.target.tagName != \"DIV\" || this.table.modules.edit.currentCell){\r\n\t\t\tvalid = false;\r\n\t\t}\r\n\r\n\t\treturn valid;\r\n\t}\r\n\r\n\tgetPasteData(e){\r\n\t\tvar data;\r\n\r\n\t\tif (window.clipboardData && window.clipboardData.getData) {\r\n\t\t\tdata = window.clipboardData.getData('Text');\r\n\t\t} else if (e.clipboardData && e.clipboardData.getData) {\r\n\t\t\tdata = e.clipboardData.getData('text/plain');\r\n\t\t} else if (e.originalEvent && e.originalEvent.clipboardData.getData) {\r\n\t\t\tdata = e.originalEvent.clipboardData.getData('text/plain');\r\n\t\t}\r\n\r\n\t\treturn data;\r\n\t}\r\n}\r\n\r\nClipboard.moduleName = \"clipboard\";\r\n\r\n//load defaults\r\nClipboard.pasteActions = defaultPasteActions;\r\nClipboard.pasteParsers = defaultPasteParsers;\r\n\r\nexport default Clipboard;","export default {\r\n\treplace:function(rows){\r\n\t\treturn this.table.setData(rows);\r\n\t},\r\n\tupdate:function(rows){\r\n\t\treturn this.table.updateOrAddData(rows);\r\n\t},\r\n\tinsert:function(rows){\r\n\t\treturn this.table.addData(rows);\r\n\t},\r\n};","export default {\r\n\ttable:function(clipboard){\r\n\t\tvar data = [],\r\n\t\tsuccess = false,\r\n\t\theaderFindSuccess = true,\r\n\t\tcolumns = this.table.columnManager.columns,\r\n\t\tcolumnMap = [],\r\n\t\trows = [];\r\n\r\n\t\t//get data from clipboard into array of columns and rows.\r\n\t\tclipboard = clipboard.split(\"\\n\");\r\n\r\n\t\tclipboard.forEach(function(row){\r\n\t\t\tdata.push(row.split(\"\\t\"));\r\n\t\t});\r\n\r\n\t\tif(data.length && !(data.length === 1 && data[0].length < 2)){\r\n\t\t\tsuccess = true;\r\n\r\n\t\t\t//check if headers are present by title\r\n\t\t\tdata[0].forEach(function(value){\r\n\t\t\t\tvar column = columns.find(function(column){\r\n\t\t\t\t\treturn value && column.definition.title && value.trim() && column.definition.title.trim() === value.trim();\r\n\t\t\t\t});\r\n\r\n\t\t\t\tif(column){\r\n\t\t\t\t\tcolumnMap.push(column);\r\n\t\t\t\t}else{\r\n\t\t\t\t\theaderFindSuccess = false;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\t//check if column headers are present by field\r\n\t\t\tif(!headerFindSuccess){\r\n\t\t\t\theaderFindSuccess = true;\r\n\t\t\t\tcolumnMap = [];\r\n\r\n\t\t\t\tdata[0].forEach(function(value){\r\n\t\t\t\t\tvar column = columns.find(function(column){\r\n\t\t\t\t\t\treturn value && column.field && value.trim() && column.field.trim() === value.trim();\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\tif(column){\r\n\t\t\t\t\t\tcolumnMap.push(column);\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\theaderFindSuccess = false;\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\tif(!headerFindSuccess){\r\n\t\t\t\t\tcolumnMap = this.table.columnManager.columnsByIndex;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t//remove header row if found\r\n\t\t\tif(headerFindSuccess){\r\n\t\t\t\tdata.shift();\r\n\t\t\t}\r\n\r\n\t\t\tdata.forEach(function(item){\r\n\t\t\t\tvar row = {};\r\n\r\n\t\t\t\titem.forEach(function(value, i){\r\n\t\t\t\t\tif(columnMap[i]){\r\n\t\t\t\t\t\trow[columnMap[i].field] = value;\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\trows.push(row);\r\n\t\t\t});\r\n\r\n\t\t\treturn rows;\r\n\t\t}else{\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n};","class CalcComponent{\r\n\tconstructor (row){\r\n\t\tthis._row = row;\r\n\r\n\t\treturn new Proxy(this, {\r\n\t\t\tget: function(target, name, receiver) {\r\n\t\t\t\tif (typeof target[name] !== \"undefined\") {\r\n\t\t\t\t\treturn target[name];\r\n\t\t\t\t}else{\r\n\t\t\t\t\treturn target._row.table.componentFunctionBinder.handle(\"row\", target._row, name)\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t})\r\n\t}\r\n\r\n\tgetData(transform){\r\n\t\treturn this._row.getData(transform);\r\n\t}\r\n\r\n\tgetElement(){\r\n\t\treturn this._row.getElement();\r\n\t}\r\n\r\n\tgetTable(){\r\n\t\treturn this._row.table;\r\n\t}\r\n\r\n\tgetCells(){\r\n\t\tvar cells = [];\r\n\r\n\t\tthis._row.getCells().forEach(function(cell){\r\n\t\t\tcells.push(cell.getComponent());\r\n\t\t});\r\n\r\n\t\treturn cells;\r\n\t}\r\n\r\n\tgetCell(column){\r\n\t\tvar cell = this._row.getCell(column);\r\n\t\treturn cell ? cell.getComponent() : false;\r\n\t}\r\n\r\n\t_getSelf(){\r\n\t\treturn this._row;\r\n\t}\r\n}\r\n\r\nexport default CalcComponent;","export default {\r\n\t\"avg\":function(values, data, calcParams){\r\n\t\tvar output = 0,\r\n\t\tprecision = typeof calcParams.precision !== \"undefined\" ? calcParams.precision : 2\r\n\r\n\t\tif(values.length){\r\n\t\t\toutput = values.reduce(function(sum, value){\r\n\t\t\t\treturn Number(sum) + Number(value);\r\n\t\t\t});\r\n\r\n\t\t\toutput = output / values.length;\r\n\r\n\t\t\toutput = precision !== false ? output.toFixed(precision) : output;\r\n\t\t}\r\n\r\n\t\treturn parseFloat(output).toString();\r\n\t},\r\n\t\"max\":function(values, data, calcParams){\r\n\t\tvar output = null,\r\n\t\tprecision = typeof calcParams.precision !== \"undefined\" ? calcParams.precision : false;\r\n\r\n\t\tvalues.forEach(function(value){\r\n\r\n\t\t\tvalue = Number(value);\r\n\r\n\t\t\tif(value > output || output === null){\r\n\t\t\t\toutput = value;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn output !== null ? (precision !== false ? output.toFixed(precision) : output) : \"\";\r\n\t},\r\n\t\"min\":function(values, data, calcParams){\r\n\t\tvar output = null,\r\n\t\tprecision = typeof calcParams.precision !== \"undefined\" ? calcParams.precision : false;\r\n\r\n\t\tvalues.forEach(function(value){\r\n\r\n\t\t\tvalue = Number(value);\r\n\r\n\t\t\tif(value < output || output === null){\r\n\t\t\t\toutput = value;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn output !== null ? (precision !== false ? output.toFixed(precision) : output) : \"\";\r\n\t},\r\n\t\"sum\":function(values, data, calcParams){\r\n\t\tvar output = 0,\r\n\t\tprecision = typeof calcParams.precision !== \"undefined\" ? calcParams.precision : false;\r\n\r\n\t\tif(values.length){\r\n\t\t\tvalues.forEach(function(value){\r\n\t\t\t\tvalue = Number(value);\r\n\r\n\t\t\t\toutput += !isNaN(value) ? Number(value) : 0;\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn precision !== false ? output.toFixed(precision) : output;\r\n\t},\r\n\t\"concat\":function(values, data, calcParams){\r\n\t\tvar output = 0;\r\n\r\n\t\tif(values.length){\r\n\t\t\toutput = values.reduce(function(sum, value){\r\n\t\t\t\treturn String(sum) + String(value);\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn output;\r\n\t},\r\n\t\"count\":function(values, data, calcParams){\r\n\t\tvar output = 0;\r\n\r\n\t\tif(values.length){\r\n\t\t\tvalues.forEach(function(value){\r\n\t\t\t\tif(value){\r\n\t\t\t\t\toutput ++;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn output;\r\n\t},\r\n};","import Module from '../../core/Module.js';\r\n\r\nimport CalcComponent from './CalcComponent.js';\r\n\r\nimport Cell from '../../core/cell/Cell.js';\r\nimport Column from '../../core/column/Column.js';\r\nimport Row from '../../core/row/Row.js';\r\n\r\nimport defaultCalculations from './defaults/calculations.js';\r\n\r\nclass ColumnCalcs extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.topCalcs = [];\r\n\t\tthis.botCalcs = [];\r\n\t\tthis.genColumn = false;\r\n\t\tthis.topElement = this.createElement();\r\n\t\tthis.botElement = this.createElement();\r\n\t\tthis.topRow = false;\r\n\t\tthis.botRow = false;\r\n\t\tthis.topInitialized = false;\r\n\t\tthis.botInitialized = false;\r\n\r\n\t\tthis.registerTableOption(\"columnCalcs\", true);\r\n\r\n\t\tthis.registerColumnOption(\"topCalc\");\r\n\t\tthis.registerColumnOption(\"topCalcParams\");\r\n\t\tthis.registerColumnOption(\"topCalcFormatter\");\r\n\t\tthis.registerColumnOption(\"topCalcFormatterParams\");\r\n\t\tthis.registerColumnOption(\"bottomCalc\");\r\n\t\tthis.registerColumnOption(\"bottomCalcParams\");\r\n\t\tthis.registerColumnOption(\"bottomCalcFormatter\");\r\n\t\tthis.registerColumnOption(\"bottomCalcFormatterParams\");\r\n\t}\r\n\r\n\tcreateElement (){\r\n\t\tvar el = document.createElement(\"div\");\r\n\t\tel.classList.add(\"tabulator-calcs-holder\");\r\n\t\treturn el;\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tthis.genColumn = new Column({field:\"value\"}, this);\r\n\r\n\t\tthis.subscribe(\"cell-value-changed\", this.cellValueChanged.bind(this));\r\n\t\tthis.subscribe(\"column-init\", this.initializeColumnCheck.bind(this));\r\n\t\tthis.subscribe(\"row-deleted\", this.rowsUpdated.bind(this));\r\n\t\tthis.subscribe(\"scroll-horizontal\", this.scrollHorizontal.bind(this));\r\n\t\tthis.subscribe(\"row-added\", this.rowsUpdated.bind(this));\r\n\t\tthis.subscribe(\"column-moved\", this.recalcActiveRows.bind(this));\r\n\t\tthis.subscribe(\"column-add\", this.recalcActiveRows.bind(this));\r\n\t\tthis.subscribe(\"data-refeshed\", this.recalcActiveRows.bind(this));\r\n\t\tthis.subscribe(\"table-redraw\", this.tableRedraw.bind(this));\r\n\r\n\t\tthis.registerTableFunction(\"getCalcResults\", this.getResults.bind(this));\r\n\t\tthis.registerTableFunction(\"recalc\", this.userRecalc.bind(this));\r\n\t}\r\n\r\n\ttableRedraw(force){\r\n\t\tthis.recalc(this.table.rowManager.activeRows);\r\n\r\n\t\tif(force){\r\n\t\t\tthis.redraw();\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t///////////////////////////////////\r\n\t///////// Table Functions /////////\r\n\t///////////////////////////////////\r\n\tuserRecalc(){\r\n\t\tthis.recalc(this.table.rowManager.activeRows);\r\n\t}\r\n\r\n\t///////////////////////////////////\r\n\t///////// Internal Logic //////////\r\n\t///////////////////////////////////\r\n\r\n\trowsUpdated(row){\r\n\t\tif(this.table.options.groupBy){\r\n\t\t\tthis.recalcRowGroup(this);\r\n\t\t}else{\r\n\t\t\tthis.recalcActiveRows();\r\n\t\t}\r\n\t}\r\n\r\n\trecalcActiveRows(){\r\n\t\tthis.recalc(this.table.rowManager.activeRows);\r\n\t}\r\n\r\n\tcellValueChanged(cell){\r\n\t\tif(cell.column.definition.topCalc || cell.column.definition.bottomCalc){\r\n\t\t\tif(this.table.options.groupBy){\r\n\r\n\t\t\t\tif(this.table.options.columnCalcs == \"table\" || this.table.options.columnCalcs == \"both\"){\r\n\t\t\t\t\tthis.recalcActiveRows();\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(this.table.options.columnCalcs != \"table\"){\r\n\t\t\t\t\tthis.recalcRowGroup(cell.row);\r\n\t\t\t\t}\r\n\r\n\t\t\t}else{\r\n\t\t\t\tthis.recalcActiveRows();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tinitializeColumnCheck(column){\r\n\t\tif(column.definition.topCalc || column.definition.bottomCalc){\r\n\t\t\tthis.initializeColumn(column);\r\n\t\t}\r\n\t}\r\n\r\n\t//initialize column calcs\r\n\tinitializeColumn(column){\r\n\t\tvar def = column.definition\r\n\r\n\t\tvar config = {\r\n\t\t\ttopCalcParams:def.topCalcParams || {},\r\n\t\t\tbotCalcParams:def.bottomCalcParams || {},\r\n\t\t};\r\n\r\n\t\tif(def.topCalc){\r\n\r\n\t\t\tswitch(typeof def.topCalc){\r\n\t\t\t\tcase \"string\":\r\n\t\t\t\tif(ColumnCalcs.calculations[def.topCalc]){\r\n\t\t\t\t\tconfig.topCalc = ColumnCalcs.calculations[def.topCalc]\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.warn(\"Column Calc Error - No such calculation found, ignoring: \", def.topCalc);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"function\":\r\n\t\t\t\tconfig.topCalc = def.topCalc;\r\n\t\t\t\tbreak\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif(config.topCalc){\r\n\t\t\t\tcolumn.modules.columnCalcs = config;\r\n\t\t\t\tthis.topCalcs.push(column);\r\n\r\n\t\t\t\tif(this.table.options.columnCalcs != \"group\"){\r\n\t\t\t\t\tthis.initializeTopRow();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tif(def.bottomCalc){\r\n\t\t\tswitch(typeof def.bottomCalc){\r\n\t\t\t\tcase \"string\":\r\n\t\t\t\tif(ColumnCalcs.calculations[def.bottomCalc]){\r\n\t\t\t\t\tconfig.botCalc = ColumnCalcs.calculations[def.bottomCalc]\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.warn(\"Column Calc Error - No such calculation found, ignoring: \", def.bottomCalc);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"function\":\r\n\t\t\t\tconfig.botCalc = def.bottomCalc;\r\n\t\t\t\tbreak\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif(config.botCalc){\r\n\t\t\t\tcolumn.modules.columnCalcs = config;\r\n\t\t\t\tthis.botCalcs.push(column);\r\n\r\n\t\t\t\tif(this.table.options.columnCalcs != \"group\"){\r\n\t\t\t\t\tthis.initializeBottomRow();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t//dummy functions to handle being mock column manager\r\n\tregisterColumnField(){};\r\n\r\n\tremoveCalcs(){\r\n\t\tvar changed = false;\r\n\r\n\t\tif(this.topInitialized){\r\n\t\t\tthis.topInitialized = false;\r\n\t\t\tthis.topElement.parentNode.removeChild(this.topElement);\r\n\t\t\tchanged = true;\r\n\t\t}\r\n\r\n\t\tif(this.botInitialized){\r\n\t\t\tthis.botInitialized = false;\r\n\t\t\tthis.table.footerManager.remove(this.botElement);\r\n\t\t\tchanged = true;\r\n\t\t}\r\n\r\n\t\tif(changed){\r\n\t\t\tthis.table.rowManager.adjustTableSize();\r\n\t\t}\r\n\t}\r\n\r\n\tinitializeTopRow(){\r\n\t\tif(!this.topInitialized){\r\n\t\t\tthis.table.columnManager.getElement().insertBefore(this.topElement, this.table.columnManager.headersElement.nextSibling);\r\n\t\t\tthis.topInitialized = true;\r\n\t\t}\r\n\t}\r\n\r\n\tinitializeBottomRow(){\r\n\t\tif(!this.botInitialized){\r\n\t\t\tthis.table.footerManager.prepend(this.botElement);\r\n\t\t\tthis.botInitialized = true;\r\n\t\t}\r\n\t}\r\n\r\n\tscrollHorizontal(left){\r\n\t\tif(this.botInitialized && this.botRow){\r\n\t\t\tthis.botRow.getElement().style.marginLeft = (-left) + \"px\";\r\n\t\t}\r\n\t}\r\n\r\n\trecalc(rows){\r\n\t\tvar data, row;\r\n\r\n\t\tif(this.topInitialized || this.botInitialized){\r\n\t\t\tdata = this.rowsToData(rows);\r\n\r\n\t\t\tif(this.topInitialized){\r\n\t\t\t\tif(this.topRow){\r\n\t\t\t\t\tthis.topRow.deleteCells();\r\n\t\t\t\t}\r\n\r\n\t\t\t\trow = this.generateRow(\"top\", this.rowsToData(rows))\r\n\t\t\t\tthis.topRow = row;\r\n\t\t\t\twhile(this.topElement.firstChild) this.topElement.removeChild(this.topElement.firstChild);\r\n\t\t\t\tthis.topElement.appendChild(row.getElement());\r\n\t\t\t\trow.initialize(true);\r\n\t\t\t}\r\n\r\n\t\t\tif(this.botInitialized){\r\n\t\t\t\tif(this.botRow){\r\n\t\t\t\t\tthis.botRow.deleteCells();\r\n\t\t\t\t}\r\n\r\n\t\t\t\trow = this.generateRow(\"bottom\", this.rowsToData(rows))\r\n\t\t\t\tthis.botRow = row;\r\n\t\t\t\twhile(this.botElement.firstChild) this.botElement.removeChild(this.botElement.firstChild);\r\n\t\t\t\tthis.botElement.appendChild(row.getElement());\r\n\t\t\t\trow.initialize(true);\r\n\t\t\t}\r\n\r\n\t\t\tthis.table.rowManager.adjustTableSize();\r\n\r\n\t\t\t//set resizable handles\r\n\t\t\tif(this.table.modExists(\"frozenColumns\")){\r\n\t\t\t\tthis.table.modules.frozenColumns.layout();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\trecalcRowGroup(row){\r\n\t\tthis.recalcGroup(this.table.modules.groupRows.getRowGroup(row));\r\n\t}\r\n\r\n\trecalcAll(){\r\n\t\tif(this.topCalcs.length || this.botCalcs.length){\r\n\t\t\tif(this.table.options.columnCalcs !== \"group\"){\r\n\t\t\t\tthis.recalcActiveRows();\r\n\t\t\t}\r\n\r\n\t\t\tif(this.table.options.groupBy && this.table.options.columnCalcs !== \"table\"){\r\n\r\n\r\n\t\t\t\tvar groups = table.modules.groupRows.getChildGroups();\r\n\r\n\t\t\t\tgroups.forEach((group) => {\r\n\t\t\t\t\tthis.recalcGroup(group);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\trecalcGroup(group){\r\n\t\tvar data, rowData;\r\n\r\n\t\tif(group){\r\n\t\t\tif(group.calcs){\r\n\t\t\t\tif(group.calcs.bottom){\r\n\t\t\t\t\tdata = this.rowsToData(group.rows);\r\n\t\t\t\t\trowData = this.generateRowData(\"bottom\", data);\r\n\r\n\t\t\t\t\tgroup.calcs.bottom.updateData(rowData);\r\n\t\t\t\t\tgroup.calcs.bottom.reinitialize();\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(group.calcs.top){\r\n\t\t\t\t\tdata = this.rowsToData(group.rows);\r\n\t\t\t\t\trowData = this.generateRowData(\"top\", data);\r\n\r\n\t\t\t\t\tgroup.calcs.top.updateData(rowData);\r\n\t\t\t\t\tgroup.calcs.top.reinitialize();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//generate top stats row\r\n\tgenerateTopRow(rows){\r\n\t\treturn this.generateRow(\"top\", this.rowsToData(rows));\r\n\t}\r\n\t//generate bottom stats row\r\n\tgenerateBottomRow(rows){\r\n\t\treturn this.generateRow(\"bottom\", this.rowsToData(rows));\r\n\t}\r\n\r\n\trowsToData(rows){\r\n\t\tvar data = [];\r\n\r\n\t\trows.forEach((row) => {\r\n\t\t\tdata.push(row.getData());\r\n\r\n\t\t\tif(this.table.options.dataTree && this.table.options.dataTreeChildColumnCalcs){\r\n\t\t\t\tif(row.modules.dataTree.open){\r\n\t\t\t\t\tvar children = this.rowsToData(this.table.modules.dataTree.getFilteredTreeChildren(row));\r\n\t\t\t\t\tdata = data.concat(children);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn data;\r\n\t}\r\n\r\n\t//generate stats row\r\n\tgenerateRow(pos, data){\r\n\t\tvar rowData = this.generateRowData(pos, data),\r\n\t\trow;\r\n\r\n\t\tif(this.table.modExists(\"mutator\")){\r\n\t\t\tthis.table.modules.mutator.disable();\r\n\t\t}\r\n\r\n\t\trow = new Row(rowData, this, \"calc\");\r\n\r\n\t\tif(this.table.modExists(\"mutator\")){\r\n\t\t\tthis.table.modules.mutator.enable();\r\n\t\t}\r\n\r\n\t\trow.getElement().classList.add(\"tabulator-calcs\", \"tabulator-calcs-\" + pos);\r\n\r\n\t\trow.component = false;\r\n\r\n\t\trow.getComponent = () => {\r\n\t\t\tif(!row.component){\r\n\t\t\t\trow.component = new CalcComponent(this);\r\n\t\t\t}\r\n\r\n\t\t\treturn row.component;\r\n\t\t};\r\n\r\n\t\trow.generateCells = () => {\r\n\r\n\t\t\tvar cells = [];\r\n\r\n\t\t\tthis.table.columnManager.columnsByIndex.forEach((column) => {\r\n\r\n\t\t\t\t\t//set field name of mock column\r\n\t\t\t\t\tthis.genColumn.setField(column.getField());\r\n\t\t\t\t\tthis.genColumn.hozAlign = column.hozAlign;\r\n\r\n\t\t\t\t\tif(column.definition[pos + \"CalcFormatter\"] && this.table.modExists(\"format\")){\r\n\t\t\t\t\t\tthis.genColumn.modules.format = {\r\n\t\t\t\t\t\t\tformatter: this.table.modules.format.getFormatter(column.definition[pos + \"CalcFormatter\"]),\r\n\t\t\t\t\t\t\tparams: column.definition[pos + \"CalcFormatterParams\"] || {},\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tthis.genColumn.modules.format = {\r\n\t\t\t\t\t\t\tformatter: this.table.modules.format.getFormatter(\"plaintext\"),\r\n\t\t\t\t\t\t\tparams:{}\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t//ensure css class defintion is replicated to calculation cell\r\n\t\t\t\t\tthis.genColumn.definition.cssClass = column.definition.cssClass;\r\n\r\n\t\t\t\t\t//generate cell and assign to correct column\r\n\t\t\t\t\tvar cell = new Cell(this.genColumn, row);\r\n\t\t\t\t\tcell.getElement();\r\n\t\t\t\t\tcell.column = column;\r\n\t\t\t\t\tcell.setWidth();\r\n\r\n\t\t\t\t\tcolumn.cells.push(cell);\r\n\t\t\t\t\tcells.push(cell);\r\n\r\n\t\t\t\t\tif(!column.visible){\r\n\t\t\t\t\t\tcell.hide();\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\trow.cells = cells;\r\n\t\t};\r\n\r\n\t\treturn row;\r\n\t}\r\n\r\n\t//generate stats row\r\n\tgenerateRowData(pos, data){\r\n\t\tvar rowData = {},\r\n\t\tcalcs = pos == \"top\" ? this.topCalcs : this.botCalcs,\r\n\t\ttype = pos == \"top\" ? \"topCalc\" : \"botCalc\",\r\n\t\tparams, paramKey;\r\n\r\n\t\tcalcs.forEach(function(column){\r\n\t\t\tvar values = [];\r\n\r\n\t\t\tif(column.modules.columnCalcs && column.modules.columnCalcs[type]){\r\n\t\t\t\tdata.forEach(function(item){\r\n\t\t\t\t\tvalues.push(column.getFieldValue(item));\r\n\t\t\t\t});\r\n\r\n\t\t\t\tparamKey = type + \"Params\";\r\n\t\t\t\tparams = typeof column.modules.columnCalcs[paramKey] === \"function\" ? column.modules.columnCalcs[paramKey](values, data) : column.modules.columnCalcs[paramKey];\r\n\r\n\t\t\t\tcolumn.setFieldValue(rowData, column.modules.columnCalcs[type](values, data, params));\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn rowData;\r\n\t}\r\n\r\n\thasTopCalcs(){\r\n\t\treturn\t!!(this.topCalcs.length);\r\n\t}\r\n\r\n\thasBottomCalcs(){\r\n\t\treturn\t!!(this.botCalcs.length);\r\n\t}\r\n\r\n\t//handle table redraw\r\n\tredraw(){\r\n\t\tif(this.topRow){\r\n\t\t\tthis.topRow.normalizeHeight(true);\r\n\t\t}\r\n\t\tif(this.botRow){\r\n\t\t\tthis.botRow.normalizeHeight(true);\r\n\t\t}\r\n\t}\r\n\r\n\t//return the calculated\r\n\tgetResults(){\r\n\t\tvar results = {},\r\n\t\tgroups;\r\n\r\n\t\tif(this.table.options.groupBy && this.table.modExists(\"groupRows\")){\r\n\t\t\tgroups = this.table.modules.groupRows.getGroups(true);\r\n\r\n\t\t\tgroups.forEach((group) => {\r\n\t\t\t\tresults[group.getKey()] = this.getGroupResults(group);\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tresults = {\r\n\t\t\t\ttop: this.topRow ? this.topRow.getData() : {},\r\n\t\t\t\tbottom: this.botRow ? this.botRow.getData() : {},\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn results;\r\n\t}\r\n\r\n\t//get results from a group\r\n\tgetGroupResults(group){\r\n\t\tvar groupObj = group._getSelf(),\r\n\t\tsubGroups = group.getSubGroups(),\r\n\t\tsubGroupResults = {},\r\n\t\tresults = {};\r\n\r\n\t\tsubGroups.forEach((subgroup) => {\r\n\t\t\tsubGroupResults[subgroup.getKey()] = this.getGroupResults(subgroup);\r\n\t\t});\r\n\r\n\t\tresults = {\r\n\t\t\ttop: groupObj.calcs.top ? groupObj.calcs.top.getData() : {},\r\n\t\t\tbottom: groupObj.calcs.bottom ? groupObj.calcs.bottom.getData() : {},\r\n\t\t\tgroups: subGroupResults,\r\n\t\t}\r\n\r\n\t\treturn results;\r\n\t}\r\n}\r\n\r\nColumnCalcs.moduleName = \"columnCalcs\";\r\n\r\n//load defaults\r\nColumnCalcs.calculations = defaultCalculations;\r\n\r\nexport default ColumnCalcs;","import Module from '../../core/Module.js';\r\n\r\nimport Row from '../../core/row/Row.js';\r\n\r\nclass DataTree extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.indent = 10;\r\n\t\tthis.field = \"\";\r\n\t\tthis.collapseEl = null;\r\n\t\tthis.expandEl = null;\r\n\t\tthis.branchEl = null;\r\n\t\tthis.elementField = false;\r\n\r\n\t\tthis.startOpen = function(){};\r\n\r\n\t\tthis.displayIndex = 0;\r\n\r\n\t\tthis.registerTableOption(\"dataTree\", false); //enable data tree\r\n\t\tthis.registerTableOption(\"dataTreeFilter\", true); //filter child rows\r\n\t\tthis.registerTableOption(\"dataTreeSort\", true); //sort child rows\r\n\t\tthis.registerTableOption(\"dataTreeElementColumn\", false);\r\n\t\tthis.registerTableOption(\"dataTreeBranchElement\", true);//show data tree branch element\r\n\t\tthis.registerTableOption(\"dataTreeChildIndent\", 9); //data tree child indent in px\r\n\t\tthis.registerTableOption(\"dataTreeChildField\", \"_children\");//data tre column field to look for child rows\r\n\t\tthis.registerTableOption(\"dataTreeCollapseElement\", false);//data tree row collapse element\r\n\t\tthis.registerTableOption(\"dataTreeExpandElement\", false);//data tree row expand element\r\n\t\tthis.registerTableOption(\"dataTreeStartExpanded\", false);\r\n\t\tthis.registerTableOption(\"dataTreeChildColumnCalcs\", false);//include visible data tree rows in column calculations\r\n\t\tthis.registerTableOption(\"dataTreeSelectPropagate\", false);//seleccting a parent row selects its children\r\n\r\n\t\t//register component functions\r\n\t\tthis.registerComponentFunction(\"row\", \"treeCollapse\", this.collapseRow.bind(this));\r\n\t\tthis.registerComponentFunction(\"row\", \"treeExpand\", this.expandRow.bind(this));\r\n\t\tthis.registerComponentFunction(\"row\", \"treeToggle\", this.toggleRow.bind(this));\r\n\t\tthis.registerComponentFunction(\"row\", \"getTreeParent\", this.getTreeParent.bind(this));\r\n\t\tthis.registerComponentFunction(\"row\", \"getTreeChildren\", this.getRowChildren.bind(this));\r\n\t\tthis.registerComponentFunction(\"row\", \"addTreeChild\", this.addTreeChildRow.bind(this));\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tif(this.table.options.dataTree){\r\n\t\t\tvar dummyEl = null,\r\n\t\t\tfirstCol = this.table.columnManager.getFirstVisibileColumn(),\r\n\t\t\toptions = this.table.options;\r\n\r\n\t\t\tthis.field = options.dataTreeChildField;\r\n\t\t\tthis.indent = options.dataTreeChildIndent;\r\n\t\t\tthis.elementField = options.dataTreeElementColumn || (firstCol ? firstCol.field : false);\r\n\r\n\t\t\tif(options.dataTreeBranchElement){\r\n\r\n\t\t\t\tif(options.dataTreeBranchElement === true){\r\n\t\t\t\t\tthis.branchEl = document.createElement(\"div\");\r\n\t\t\t\t\tthis.branchEl.classList.add(\"tabulator-data-tree-branch\");\r\n\t\t\t\t}else{\r\n\t\t\t\t\tif(typeof options.dataTreeBranchElement === \"string\"){\r\n\t\t\t\t\t\tdummyEl = document.createElement(\"div\");\r\n\t\t\t\t\t\tdummyEl.innerHTML = options.dataTreeBranchElement;\r\n\t\t\t\t\t\tthis.branchEl = dummyEl.firstChild;\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tthis.branchEl = options.dataTreeBranchElement;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif(options.dataTreeCollapseElement){\r\n\t\t\t\tif(typeof options.dataTreeCollapseElement === \"string\"){\r\n\t\t\t\t\tdummyEl = document.createElement(\"div\");\r\n\t\t\t\t\tdummyEl.innerHTML = options.dataTreeCollapseElement;\r\n\t\t\t\t\tthis.collapseEl = dummyEl.firstChild;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tthis.collapseEl = options.dataTreeCollapseElement;\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tthis.collapseEl = document.createElement(\"div\");\r\n\t\t\t\tthis.collapseEl.classList.add(\"tabulator-data-tree-control\");\r\n\t\t\t\tthis.collapseEl.tabIndex = 0;\r\n\t\t\t\tthis.collapseEl.innerHTML = \"
\";\r\n\t\t\t}\r\n\r\n\t\t\tif(options.dataTreeExpandElement){\r\n\t\t\t\tif(typeof options.dataTreeExpandElement === \"string\"){\r\n\t\t\t\t\tdummyEl = document.createElement(\"div\");\r\n\t\t\t\t\tdummyEl.innerHTML = options.dataTreeExpandElement;\r\n\t\t\t\t\tthis.expandEl = dummyEl.firstChild;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tthis.expandEl = options.dataTreeExpandElement;\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tthis.expandEl = document.createElement(\"div\");\r\n\t\t\t\tthis.expandEl.classList.add(\"tabulator-data-tree-control\");\r\n\t\t\t\tthis.expandEl.tabIndex = 0;\r\n\t\t\t\tthis.expandEl.innerHTML = \"
\";\r\n\t\t\t}\r\n\r\n\r\n\t\t\tswitch(typeof options.dataTreeStartExpanded){\r\n\t\t\t\tcase \"boolean\":\r\n\t\t\t\tthis.startOpen = function(row, index){\r\n\t\t\t\t\treturn options.dataTreeStartExpanded;\r\n\t\t\t\t};\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"function\":\r\n\t\t\t\tthis.startOpen = options.dataTreeStartExpanded;\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tdefault:\r\n\t\t\t\tthis.startOpen = function(row, index){\r\n\t\t\t\t\treturn options.dataTreeStartExpanded[index];\r\n\t\t\t\t};\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\r\n\t\t\tthis.subscribe(\"row-init\", this.initializeRow.bind(this));\r\n\t\t\tthis.subscribe(\"row-layout\", this.layoutRow.bind(this));\r\n\t\t\tthis.subscribe(\"row-relayout\", this.layoutRow.bind(this));\r\n\t\t\tthis.subscribe(\"row-deleted\", this.rowDelete.bind(this),0);\r\n\t\t\tthis.subscribe(\"row-data-changed\", this.rowDataChanged.bind(this), 10);\r\n\t\t\tthis.subscribe(\"column-moving-rows\", this.columnMoving.bind(this));\r\n\r\n\t\t\tthis.registerDisplayHandler(this.getRows.bind(this), 30);\r\n\t\t}\r\n\t}\r\n\r\n\tgetRowChildren(row){\r\n\t\treturn this.getTreeChildren(row, true);\r\n\t}\r\n\r\n\tcolumnMoving(){\r\n\t\tvar rows = [];\r\n\r\n\t\tthis.table.rowManager.rows.forEach((row) => {\r\n\t\t\trows = rows.concat(this.getTreeChildren(row, false, true));\r\n\t\t});\r\n\r\n\t\treturn rows;\r\n\t}\r\n\r\n\trowDataChanged(row, visible, updatedData){\r\n\t\tif(this.redrawNeeded(updatedData)){\r\n\t\t\tthis.initializeRow(row);\r\n\r\n\t\t\tif(visible){\r\n\t\t\t\tthis.layoutRow(row);\r\n\t\t\t\tthis.refreshData(true);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tinitializeRow(row){\r\n\t\tvar childArray = row.getData()[this.field];\r\n\t\tvar isArray = Array.isArray(childArray);\r\n\r\n\t\tvar children = isArray || (!isArray && typeof childArray === \"object\" && childArray !== null);\r\n\r\n\t\tif(!children && row.modules.dataTree && row.modules.dataTree.branchEl){\r\n\t\t\trow.modules.dataTree.branchEl.parentNode.removeChild(row.modules.dataTree.branchEl);\r\n\t\t}\r\n\r\n\t\tif(!children && row.modules.dataTree && row.modules.dataTree.controlEl){\r\n\t\t\trow.modules.dataTree.controlEl.parentNode.removeChild(row.modules.dataTree.controlEl);\r\n\t\t}\r\n\r\n\t\trow.modules.dataTree = {\r\n\t\t\tindex: row.modules.dataTree ? row.modules.dataTree.index : 0,\r\n\t\t\topen: children ? (row.modules.dataTree ? row.modules.dataTree.open : this.startOpen(row.getComponent(), 0)) : false,\r\n\t\t\tcontrolEl: row.modules.dataTree && children ? row.modules.dataTree.controlEl : false,\r\n\t\t\tbranchEl: row.modules.dataTree && children ? row.modules.dataTree.branchEl : false,\r\n\t\t\tparent: row.modules.dataTree ? row.modules.dataTree.parent : false,\r\n\t\t\tchildren:children,\r\n\t\t};\r\n\t}\r\n\r\n\treinitializeRowChildren(row){\r\n\t\tvar children = this.getTreeChildren(row, false, true);\r\n\r\n\t\tchildren.forEach(function(child){\r\n\t\t\tchild.reinitialize(true);\r\n\t\t});\r\n\t}\r\n\r\n\tlayoutRow(row){\r\n\t\tvar cell = this.elementField ? row.getCell(this.elementField) : row.getCells()[0],\r\n\t\tel = cell.getElement(),\r\n\t\tconfig = row.modules.dataTree;\r\n\r\n\t\tif(config.branchEl){\r\n\t\t\tif(config.branchEl.parentNode){\r\n\t\t\t\tconfig.branchEl.parentNode.removeChild(config.branchEl);\r\n\t\t\t}\r\n\t\t\tconfig.branchEl = false;\r\n\t\t}\r\n\r\n\t\tif(config.controlEl){\r\n\t\t\tif(config.controlEl.parentNode){\r\n\t\t\t\tconfig.controlEl.parentNode.removeChild(config.controlEl);\r\n\t\t\t}\r\n\t\t\tconfig.controlEl = false;\r\n\t\t}\r\n\r\n\t\tthis.generateControlElement(row, el);\r\n\r\n\t\trow.getElement().classList.add(\"tabulator-tree-level-\" + config.index);\r\n\r\n\t\tif(config.index){\r\n\t\t\tif(this.branchEl){\r\n\t\t\t\tconfig.branchEl = this.branchEl.cloneNode(true);\r\n\t\t\t\tel.insertBefore(config.branchEl, el.firstChild);\r\n\r\n\t\t\t\tif(this.table.rtl){\r\n\t\t\t\t\tconfig.branchEl.style.marginRight = (((config.branchEl.offsetWidth + config.branchEl.style.marginLeft) * (config.index - 1)) + (config.index * this.indent)) + \"px\";\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconfig.branchEl.style.marginLeft = (((config.branchEl.offsetWidth + config.branchEl.style.marginRight) * (config.index - 1)) + (config.index * this.indent)) + \"px\";\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\r\n\t\t\t\tif(this.table.rtl){\r\n\t\t\t\t\tel.style.paddingRight = parseInt(window.getComputedStyle(el, null).getPropertyValue('padding-right')) + (config.index * this.indent) + \"px\";\r\n\t\t\t\t}else{\r\n\t\t\t\t\tel.style.paddingLeft = parseInt(window.getComputedStyle(el, null).getPropertyValue('padding-left')) + (config.index * this.indent) + \"px\";\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tgenerateControlElement(row, el){\r\n\t\tvar config = row.modules.dataTree,\r\n\t\tel = el || row.getCells()[0].getElement(),\r\n\t\toldControl = config.controlEl;\r\n\r\n\t\tif(config.children !== false){\r\n\r\n\t\t\tif(config.open){\r\n\t\t\t\tconfig.controlEl = this.collapseEl.cloneNode(true);\r\n\t\t\t\tconfig.controlEl.addEventListener(\"click\", (e) => {\r\n\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\tthis.collapseRow(row);\r\n\t\t\t\t});\r\n\t\t\t}else{\r\n\t\t\t\tconfig.controlEl = this.expandEl.cloneNode(true);\r\n\t\t\t\tconfig.controlEl.addEventListener(\"click\", (e) => {\r\n\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\tthis.expandRow(row);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\tconfig.controlEl.addEventListener(\"mousedown\", (e) => {\r\n\t\t\t\te.stopPropagation();\r\n\t\t\t});\r\n\r\n\t\t\tif(oldControl && oldControl.parentNode === el){\r\n\t\t\t\toldControl.parentNode.replaceChild(config.controlEl,oldControl);\r\n\t\t\t}else{\r\n\t\t\t\tel.insertBefore(config.controlEl, el.firstChild);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tsetDisplayIndex (index) {\r\n\t\tthis.displayIndex = index;\r\n\t}\r\n\r\n\tgetDisplayIndex () {\r\n\t\treturn this.displayIndex;\r\n\t}\r\n\r\n\tgetRows(rows){\r\n\t\tvar output = [];\r\n\r\n\t\trows.forEach((row, i) => {\r\n\t\t\tvar config, children;\r\n\r\n\t\t\toutput.push(row);\r\n\r\n\t\t\tif(row instanceof Row){\r\n\r\n\t\t\t\trow.create();\r\n\r\n\t\t\t\tconfig = row.modules.dataTree.children;\r\n\r\n\t\t\t\tif(!config.index && config.children !== false){\r\n\t\t\t\t\tchildren = this.getChildren(row);\r\n\r\n\t\t\t\t\tchildren.forEach((child) => {\r\n\t\t\t\t\t\tchild.create();\r\n\t\t\t\t\t\toutput.push(child);\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tgetChildren(row, allChildren){\r\n\t\tvar config = row.modules.dataTree,\r\n\t\tchildren = [],\r\n\t\toutput = [];\r\n\r\n\t\tif(config.children !== false && (config.open || allChildren)){\r\n\t\t\tif(!Array.isArray(config.children)){\r\n\t\t\t\tconfig.children = this.generateChildren(row);\r\n\t\t\t}\r\n\r\n\t\t\tif(this.table.modExists(\"filter\") && this.table.options.dataTreeFilter){\r\n\t\t\t\tchildren = this.table.modules.filter.filter(config.children);\r\n\t\t\t}else{\r\n\t\t\t\tchildren = config.children;\r\n\t\t\t}\r\n\r\n\t\t\tif(this.table.modExists(\"sort\") && this.table.options.dataTreeSort){\r\n\t\t\t\tthis.table.modules.sort.sort(children);\r\n\t\t\t}\r\n\r\n\t\t\tchildren.forEach((child) => {\r\n\t\t\t\toutput.push(child);\r\n\r\n\t\t\t\tvar subChildren = this.getChildren(child);\r\n\r\n\t\t\t\tsubChildren.forEach((sub) => {\r\n\t\t\t\t\toutput.push(sub);\r\n\t\t\t\t});\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tgenerateChildren(row){\r\n\t\tvar children = [];\r\n\r\n\t\tvar childArray = row.getData()[this.field];\r\n\r\n\t\tif(!Array.isArray(childArray)){\r\n\t\t\tchildArray = [childArray];\r\n\t\t}\r\n\r\n\t\tchildArray.forEach((childData) => {\r\n\t\t\tvar childRow = new Row(childData || {}, this.table.rowManager);\r\n\r\n\t\t\tchildRow.create();\r\n\r\n\t\t\tchildRow.modules.dataTree.index = row.modules.dataTree.index + 1;\r\n\t\t\tchildRow.modules.dataTree.parent = row;\r\n\r\n\t\t\tif(childRow.modules.dataTree.children){\r\n\t\t\t\tchildRow.modules.dataTree.open = this.startOpen(childRow.getComponent(), childRow.modules.dataTree.index);\r\n\t\t\t}\r\n\t\t\tchildren.push(childRow);\r\n\t\t});\r\n\r\n\t\treturn children;\r\n\t}\r\n\r\n\texpandRow(row, silent){\r\n\t\tvar config = row.modules.dataTree;\r\n\r\n\t\tif(config.children !== false){\r\n\t\t\tconfig.open = true;\r\n\r\n\t\t\trow.reinitialize();\r\n\r\n\t\t\tthis.refreshData(true);\r\n\r\n\t\t\tthis.dispatchExternal(\"dataTreeRowExpanded\", row.getComponent(), row.modules.dataTree.index);\r\n\t\t}\r\n\t}\r\n\r\n\tcollapseRow(row){\r\n\t\tvar config = row.modules.dataTree;\r\n\r\n\t\tif(config.children !== false){\r\n\t\t\tconfig.open = false;\r\n\r\n\t\t\trow.reinitialize();\r\n\r\n\t\t\tthis.refreshData(true);\r\n\r\n\t\t\tthis.dispatchExternal(\"dataTreeRowCollapsed\", getComponent(), row.modules.dataTree.index);\r\n\t\t}\r\n\t}\r\n\r\n\ttoggleRow(row){\r\n\t\tvar config = row.modules.dataTree;\r\n\r\n\t\tif(config.children !== false){\r\n\t\t\tif(config.open){\r\n\t\t\t\tthis.collapseRow(row);\r\n\t\t\t}else{\r\n\t\t\t\tthis.expandRow(row);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tgetTreeParent(row){\r\n\t\treturn row.modules.dataTree.parent ? row.modules.dataTree.parent.getComponent() : false;\r\n\t}\r\n\r\n\tgetFilteredTreeChildren(row){\r\n\t\tvar config = row.modules.dataTree,\r\n\t\toutput = [], children;\r\n\r\n\t\tif(config.children){\r\n\r\n\t\t\tif(!Array.isArray(config.children)){\r\n\t\t\t\tconfig.children = this.generateChildren(row);\r\n\t\t\t}\r\n\r\n\t\t\tif(this.table.modExists(\"filter\") && this.table.options.dataTreeFilter){\r\n\t\t\t\tchildren = this.table.modules.filter.filter(config.children);\r\n\t\t\t}else{\r\n\t\t\t\tchildren = config.children;\r\n\t\t\t}\r\n\r\n\t\t\tchildren.forEach((childRow) => {\r\n\t\t\t\tif(childRow instanceof Row){\r\n\t\t\t\t\toutput.push(childRow);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\trowDelete(row){\r\n\t\tvar parent = row.modules.dataTree.parent,\r\n\t\tchildIndex;\r\n\r\n\t\tif(parent){\r\n\t\t\tchildIndex = this.findChildIndex(row, parent);\r\n\r\n\t\t\tif(childIndex !== false){\r\n\t\t\t\tparent.data[this.field].splice(childIndex, 1);\r\n\t\t\t}\r\n\r\n\t\t\tif(!parent.data[this.field].length){\r\n\t\t\t\tdelete parent.data[this.field];\r\n\t\t\t}\r\n\r\n\t\t\tthis.initializeRow(parent);\r\n\t\t\tthis.layoutRow(parent);\r\n\t\t}\r\n\r\n\t\tthis.refreshData(true);\r\n\t}\r\n\r\n\taddTreeChildRow(row, data, top, index){\r\n\t\tvar childIndex = false;\r\n\r\n\t\tif(typeof data === \"string\"){\r\n\t\t\tdata = JSON.parse(data);\r\n\t\t}\r\n\r\n\t\tif(!Array.isArray(row.data[this.field])){\r\n\t\t\trow.data[this.field] = [];\r\n\r\n\t\t\trow.modules.dataTree.open = this.startOpen(row.getComponent(), row.modules.dataTree.index);\r\n\t\t}\r\n\r\n\t\tif(typeof index !== \"undefined\"){\r\n\t\t\tchildIndex = this.findChildIndex(index, row);\r\n\r\n\t\t\tif(childIndex !== false){\r\n\t\t\t\trow.data[this.field].splice((top ? childIndex : childIndex + 1), 0, data);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(childIndex === false){\r\n\t\t\tif(top){\r\n\t\t\t\trow.data[this.field].unshift(data);\r\n\t\t\t}else{\r\n\t\t\t\trow.data[this.field].push(data);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.initializeRow(row);\r\n\t\tthis.layoutRow(row);\r\n\r\n\t\tthis.refreshData(true);\r\n\t}\r\n\r\n\tfindChildIndex(subject, parent){\r\n\t\tvar match = false;\r\n\r\n\t\tif(typeof subject == \"object\"){\r\n\r\n\t\t\tif(subject instanceof Row){\r\n\t\t\t\t//subject is row element\r\n\t\t\t\tmatch = subject.data;\r\n\t\t\t}else if(subject instanceof RowComponent){\r\n\t\t\t\t//subject is public row component\r\n\t\t\t\tmatch = subject._getSelf().data;\r\n\t\t\t}else if(typeof HTMLElement !== \"undefined\" && subject instanceof HTMLElement){\r\n\t\t\t\tif(parent.modules.dataTree){\r\n\t\t\t\t\tmatch = parent.modules.dataTree.children.find((childRow) => {\r\n\t\t\t\t\t\treturn childRow instanceof Row ? childRow.element === subject : false;\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\tif(match){\r\n\t\t\t\t\t\tmatch = match.data;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t}else if(typeof subject == \"undefined\" || subject === null){\r\n\t\t\tmatch = false\r\n\t\t}else{\r\n\t\t\t//subject should be treated as the index of the row\r\n\t\t\tmatch = parent.data[this.field].find((row) => {\r\n\t\t\t\treturn row.data[this.table.options.index] == subject;\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif(match){\r\n\r\n\t\t\tif(Array.isArray(parent.data[this.field])){\r\n\t\t\t\tmatch = parent.data[this.field].indexOf(match);\r\n\t\t\t}\r\n\r\n\t\t\tif(match == -1){\r\n\t\t\t\tmatch = false;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//catch all for any other type of input\r\n\r\n\t\treturn match;\r\n\t}\r\n\r\n\tgetTreeChildren(row, component, recurse){\r\n\t\tvar config = row.modules.dataTree,\r\n\t\toutput = [];\r\n\r\n\t\tif(config.children){\r\n\r\n\t\t\tif(!Array.isArray(config.children)){\r\n\t\t\t\tconfig.children = this.generateChildren(row);\r\n\t\t\t}\r\n\r\n\t\t\tconfig.children.forEach((childRow) => {\r\n\t\t\t\tif(childRow instanceof Row){\r\n\t\t\t\t\toutput.push(component ? childRow.getComponent() : childRow);\r\n\r\n\t\t\t\t\tif(recurse){\r\n\t\t\t\t\t\toutput = output.concat(this.getTreeChildren(childRow, component, recurse));\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tcheckForRestyle(cell){\r\n\t\tif(!cell.row.cells.indexOf(cell)){\r\n\t\t\tcell.row.reinitialize();\r\n\t\t}\r\n\t}\r\n\r\n\tgetChildField(){\r\n\t\treturn this.field;\r\n\t}\r\n\r\n\tredrawNeeded(data){\r\n\t\treturn (this.field ? typeof data[this.field] !== \"undefined\" : false) || (this.elementField ? typeof data[this.elementField] !== \"undefined\" : false);\r\n\t}\r\n}\r\n\r\nDataTree.moduleName = \"dataTree\";\r\n\r\nexport default DataTree;","import csv from './downloaders/csv.js';\r\nimport json from './downloaders/json.js';\r\nimport pdf from './downloaders/pdf.js';\r\nimport xlsx from './downloaders/xlsx.js';\r\nimport html from './downloaders/html.js';\r\n\r\nexport default {\r\n\tcsv:csv,\r\n\tjson:json,\r\n\tpdf:pdf,\r\n\txlsx:xlsx,\r\n\thtml:html,\r\n};","export default function(list, options, setFileContents){\r\n\tvar delimiter = options && options.delimiter ? options.delimiter : \",\",\r\n\tfileContents = [],\r\n\theaders = [];\r\n\r\n\tlist.forEach((row) => {\r\n\t\tvar item = [];\r\n\r\n\t\tswitch(row.type){\r\n\t\t\tcase \"group\":\r\n\t\t\tconsole.warn(\"Download Warning - CSV downloader cannot process row groups\");\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"calc\":\r\n\t\t\tconsole.warn(\"Download Warning - CSV downloader cannot process column calculations\");\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"header\":\r\n\t\t\trow.columns.forEach((col, i) => {\r\n\t\t\t\tif(col && col.depth === 1){\r\n\t\t\t\t\theaders[i] = typeof col.value == \"undefined\" || col.value === null ? \"\" : ('\"' + String(col.value).split('\"').join('\"\"') + '\"');\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"row\":\r\n\t\t\trow.columns.forEach((col) => {\r\n\r\n\t\t\t\tif(col){\r\n\r\n\t\t\t\t\tswitch(typeof col.value){\r\n\t\t\t\t\t\tcase \"object\":\r\n\t\t\t\t\t\tcol.value = JSON.stringify(col.value);\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\tcase \"undefined\":\r\n\t\t\t\t\t\tcase \"null\":\r\n\t\t\t\t\t\tcol.value = \"\";\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\titem.push('\"' + String(col.value).split('\"').join('\"\"') + '\"');\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tfileContents.push(item.join(delimiter));\r\n\t\t\tbreak;\r\n\t\t}\r\n\t});\r\n\r\n\tif(headers.length){\r\n\t\tfileContents.unshift(headers.join(delimiter));\r\n\t}\r\n\r\n\tfileContents = fileContents.join(\"\\n\");\r\n\r\n\tif(options.bom){\r\n\t\tfileContents = \"\\ufeff\" + fileContents;\r\n\t}\r\n\r\n\tsetFileContents(fileContents, \"text/csv\");\r\n};","export default function(list, options, setFileContents){\r\n\tvar fileContents = [];\r\n\r\n\tlist.forEach((row) => {\r\n\t\tvar item = {};\r\n\r\n\t\tswitch(row.type){\r\n\t\t\tcase \"header\":\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"group\":\r\n\t\t\tconsole.warn(\"Download Warning - JSON downloader cannot process row groups\");\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"calc\":\r\n\t\t\tconsole.warn(\"Download Warning - JSON downloader cannot process column calculations\");\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"row\":\r\n\t\t\trow.columns.forEach((col) => {\r\n\t\t\t\tif(col){\r\n\t\t\t\t\titem[col.component.getField()] = col.value;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tfileContents.push(item);\r\n\t\t\tbreak;\r\n\t\t}\r\n\t});\r\n\r\n\tfileContents = JSON.stringify(fileContents, null, '\\t');\r\n\r\n\tsetFileContents(fileContents, \"application/json\");\r\n};","export default function(list, options, setFileContents){\r\n\tvar header = [],\r\n\tbody = [],\r\n\tautoTableParams = {},\r\n\trowGroupStyles = options.rowGroupStyles || {\r\n\t\tfontStyle: \"bold\",\r\n\t\tfontSize: 12,\r\n\t\tcellPadding: 6,\r\n\t\tfillColor: 220,\r\n\t},\r\n\trowCalcStyles = options.rowCalcStyles || {\r\n\t\tfontStyle: \"bold\",\r\n\t\tfontSize: 10,\r\n\t\tcellPadding: 4,\r\n\t\tfillColor: 232,\r\n\t},\r\n\tjsPDFParams = options.jsPDF || {},\r\n\ttitle = options && options.title ? options.title : \"\";\r\n\r\n\tif(!jsPDFParams.orientation){\r\n\t\tjsPDFParams.orientation = options.orientation || \"landscape\";\r\n\t}\r\n\r\n\tif(!jsPDFParams.unit){\r\n\t\tjsPDFParams.unit = \"pt\";\r\n\t}\r\n\r\n\t//parse row list\r\n\tlist.forEach((row) => {\r\n\t\tvar item = {};\r\n\r\n\t\tswitch(row.type){\r\n\t\t\tcase \"header\":\r\n\t\t\theader.push(parseRow(row));\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"group\":\r\n\t\t\tbody.push(parseRow(row, rowGroupStyles));\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"calc\":\r\n\t\t\tbody.push(parseRow(row, rowCalcStyles));\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"row\":\r\n\t\t\tbody.push(parseRow(row));\r\n\t\t\tbreak;\r\n\t\t}\r\n\t});\r\n\r\n\tfunction parseRow(row, styles){\r\n\t\tvar rowData = [];\r\n\r\n\t\trow.columns.forEach((col) =>{\r\n\t\t\tvar cell;\r\n\r\n\t\t\tif(col){\r\n\t\t\t\tswitch(typeof col.value){\r\n\t\t\t\t\tcase \"object\":\r\n\t\t\t\t\tcol.value = JSON.stringify(col.value);\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase \"undefined\":\r\n\t\t\t\t\tcase \"null\":\r\n\t\t\t\t\tcol.value = \"\";\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tcell = {\r\n\t\t\t\t\tcontent:col.value,\r\n\t\t\t\t\tcolSpan:col.width,\r\n\t\t\t\t\trowSpan:col.height,\r\n\t\t\t\t};\r\n\r\n\t\t\t\tif(styles){\r\n\t\t\t\t\tcell.styles = styles;\r\n\t\t\t\t}\r\n\r\n\t\t\t\trowData.push(cell);\r\n\t\t\t}else{\r\n\t\t\t\trowData.push(\"\");\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn rowData;\r\n\t}\r\n\r\n\r\n\t//configure PDF\r\n\tvar doc = new jsPDF(jsPDFParams); //set document to landscape, better for most tables\r\n\r\n\tif(options && options.autoTable){\r\n\t\tif(typeof options.autoTable === \"function\"){\r\n\t\t\tautoTableParams = options.autoTable(doc) || {};\r\n\t\t}else{\r\n\t\t\tautoTableParams = options.autoTable;\r\n\t\t}\r\n\t}\r\n\r\n\tif(title){\r\n\t\tautoTableParams.addPageContent = function(data) {\r\n\t\t\tdoc.text(title, 40, 30);\r\n\t\t};\r\n\t}\r\n\r\n\tautoTableParams.head = header;\r\n\tautoTableParams.body = body;\r\n\r\n\tdoc.autoTable(autoTableParams);\r\n\r\n\tif(options && options.documentProcessing){\r\n\t\toptions.documentProcessing(doc);\r\n\t}\r\n\r\n\tsetFileContents(doc.output(\"arraybuffer\"), \"application/pdf\");\r\n};","import CoreFeature from '../../../../core/CoreFeature.js';\r\n\r\nexport default function(list, options, setFileContents){\r\n\tvar self = this,\r\n\tsheetName = options.sheetName || \"Sheet1\",\r\n\tworkbook = XLSX.utils.book_new(),\r\n\ttableFeatures = new CoreFeature(this);\r\n\toutput;\r\n\r\n\tworkbook.SheetNames = [];\r\n\tworkbook.Sheets = {};\r\n\r\n\tfunction generateSheet(){\r\n\t\tvar rows = [],\r\n\t\tmerges = [],\r\n\t\tworksheet = {},\r\n\t\trange = {s: {c:0, r:0}, e: {c:(list[0] ? list[0].columns.reduce((a, b) => a + (b && b.width ? b.width : 1), 0) : 0), r:list.length }};\r\n\r\n\t\t//parse row list\r\n\t\tlist.forEach((row, i) => {\r\n\t\t\tvar rowData = [];\r\n\r\n\t\t\trow.columns.forEach(function(col, j){\r\n\r\n\t\t\t\tif(col){\r\n\t\t\t\t\trowData.push(!(col.value instanceof Date) && typeof col.value === \"object\" ? JSON.stringify(col.value) : col.value);\r\n\r\n\t\t\t\t\tif(col.width > 1 || col.height > -1){\r\n\t\t\t\t\t\tmerges.push({s:{r:i,c:j},e:{r:i + col.height - 1,c:j + col.width - 1}});\r\n\t\t\t\t\t}\r\n\t\t\t\t}else{\r\n\t\t\t\t\trowData.push(\"\");\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\trows.push(rowData);\r\n\t\t});\r\n\r\n\r\n\t\t//convert rows to worksheet\r\n\t\tXLSX.utils.sheet_add_aoa(worksheet, rows);\r\n\r\n\t\tworksheet['!ref'] = XLSX.utils.encode_range(range);\r\n\r\n\t\tif(merges.length){\r\n\t\t\tworksheet[\"!merges\"] = merges;\r\n\t\t}\r\n\r\n\t\treturn worksheet;\r\n\t}\r\n\r\n\tif(options.sheetOnly){\r\n\t\tsetFileContents(generateSheet());\r\n\t\treturn;\r\n\t}\r\n\r\n\tif(options.sheets){\r\n\t\tfor(var sheet in options.sheets){\r\n\r\n\t\t\tif(options.sheets[sheet] === true){\r\n\t\t\t\tworkbook.SheetNames.push(sheet);\r\n\t\t\t\tworkbook.Sheets[sheet] = generateSheet();\r\n\t\t\t}else{\r\n\r\n\t\t\t\tworkbook.SheetNames.push(sheet);\r\n\r\n\t\t\t\ttableFeatures.commsSend(options.sheets[sheet], \"download\", \"intercept\",{\r\n\t\t\t\t\ttype:\"xlsx\",\r\n\t\t\t\t\toptions:{sheetOnly:true},\r\n\t\t\t\t\tactive:self.active,\r\n\t\t\t\t\tintercept:function(data){\r\n\t\t\t\t\t\tworkbook.Sheets[sheet] = data;\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\t}else{\r\n\t\tworkbook.SheetNames.push(sheetName);\r\n\t\tworkbook.Sheets[sheetName] = generateSheet();\r\n\t}\r\n\r\n\tif(options.documentProcessing){\r\n\t\tworkbook = options.documentProcessing(workbook);\r\n\t}\r\n\r\n\t//convert workbook to binary array\r\n\tfunction s2ab(s) {\r\n\t\tvar buf = new ArrayBuffer(s.length);\r\n\t\tvar view = new Uint8Array(buf);\r\n\t\tfor (var i=0; i!=s.length; ++i) view[i] = s.charCodeAt(i) & 0xFF;\r\n\t\t\treturn buf;\r\n\t}\r\n\r\n\toutput = XLSX.write(workbook, {bookType:'xlsx', bookSST:true, type: 'binary'});\r\n\r\n\tsetFileContents(s2ab(output), \"application/octet-stream\");\r\n};","export default function(list, options, setFileContents){\r\n\tif(this.modExists(\"export\", true)){\r\n\t\tsetFileContents(this.modules.export.genereateHTMLTable(list), \"text/html\");\r\n\t}\r\n};","import Module from '../../core/Module.js';\r\n\r\nimport defaultDownloaders from './defaults/downloaders.js';\r\n\r\nclass Download extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.registerTableOption(\"downloadReady\", function(data, blob){return blob;}); //function to manipulate download data\r\n\t\tthis.registerTableOption(\"downloadConfig\", {}); //download config\r\n\t\tthis.registerTableOption(\"downloadRowRange\", \"active\"); //restrict download to active rows only\r\n\r\n\t\tthis.registerColumnOption(\"download\");\r\n\t\tthis.registerColumnOption(\"titleDownload\");\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tthis.registerTableFunction(\"download\", this.download.bind(this));\r\n\t\tthis.registerTableFunction(\"downloadToTab\", this.downloadToTab.bind(this));\r\n\t}\r\n\r\n\t///////////////////////////////////\r\n\t///////// Table Functions /////////\r\n\t///////////////////////////////////\r\n\r\n\tdownloadToTab(type, filename, options, active){\r\n\t\tthis.download(type, filename, options, active, true);\r\n\t}\r\n\r\n\r\n\t///////////////////////////////////\r\n\t///////// Internal Logic //////////\r\n\t///////////////////////////////////\r\n\r\n\t//trigger file download\r\n\tdownload(type, filename, options, range, interceptCallback){\r\n\t\tvar downloadFunc = false;\r\n\r\n\t\tfunction buildLink(data, mime){\r\n\t\t\tif(interceptCallback){\r\n\t\t\t\tif(interceptCallback === true){\r\n\t\t\t\t\tthis.triggerDownload(data, mime, type, filename, true);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tinterceptCallback(data);\r\n\t\t\t\t}\r\n\r\n\t\t\t}else{\r\n\t\t\t\tthis.triggerDownload(data, mime, type, filename);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(typeof type == \"function\"){\r\n\t\t\tdownloadFunc = type;\r\n\t\t}else{\r\n\t\t\tif(Download.downloaders[type]){\r\n\t\t\t\tdownloadFunc = Download.downloaders[type];\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Download Error - No such download type found: \", type);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(downloadFunc){\r\n\t\t\tvar list = this.generateExportList(range);\r\n\r\n\t\t\tdownloadFunc.call(this.table, list , options || {}, buildLink);\r\n\t\t}\r\n\t}\r\n\r\n\tgenerateExportList(range){\r\n\t\tvar list = this.table.modules.export.generateExportList(this.table.options.downloadConfig, false, range || this.table.options.downloadRowRange, \"download\");\r\n\r\n\t\t//assign group header formatter\r\n\t\tvar groupHeader = this.table.options.groupHeaderDownload;\r\n\r\n\t\tif(groupHeader && !Array.isArray(groupHeader)){\r\n\t\t\tgroupHeader = [groupHeader];\r\n\t\t}\r\n\r\n\t\tlist.forEach((row) => {\r\n\t\t\tvar group;\r\n\r\n\t\t\tif(row.type === \"group\"){\r\n\t\t\t\tgroup = row.columns[0];\r\n\r\n\t\t\t\tif(groupHeader && groupHeader[row.indent]){\r\n\t\t\t\t\tgroup.value = groupHeader[row.indent](group.value, row.component._group.getRowCount(), row.component._group.getData(), row.component);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn list;\r\n\t}\r\n\r\n\ttriggerDownload(data, mime, type, filename, newTab){\r\n\t\tvar element = document.createElement('a'),\r\n\t\tblob = new Blob([data],{type:mime}),\r\n\t\tfilename = filename || \"Tabulator.\" + (typeof type === \"function\" ? \"txt\" : type);\r\n\r\n\t\tblob = this.table.options.downloadReady(data, blob);\r\n\r\n\t\tif(blob){\r\n\r\n\t\t\tif(newTab){\r\n\t\t\t\twindow.open(window.URL.createObjectURL(blob));\r\n\t\t\t}else{\r\n\t\t\t\tif(navigator.msSaveOrOpenBlob){\r\n\t\t\t\t\tnavigator.msSaveOrOpenBlob(blob, filename);\r\n\t\t\t\t}else{\r\n\t\t\t\t\telement.setAttribute('href', window.URL.createObjectURL(blob));\r\n\r\n\t\t\t\t\t//set file title\r\n\t\t\t\t\telement.setAttribute('download', filename);\r\n\r\n\t\t\t\t\t//trigger download\r\n\t\t\t\t\telement.style.display = 'none';\r\n\t\t\t\t\tdocument.body.appendChild(element);\r\n\t\t\t\t\telement.click();\r\n\r\n\t\t\t\t\t//remove temporary link element\r\n\t\t\t\t\tdocument.body.removeChild(element);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tthis.dispatchExternal(\"downloadComplete\");\r\n\t\t}\r\n\t}\r\n\r\n\tcommsReceived(table, action, data){\r\n\t\tswitch(action){\r\n\t\t\tcase \"intercept\":\r\n\t\t\tthis.download(data.type, \"\", data.options, data.active, data.intercept);\r\n\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n}\r\n\r\nDownload.moduleName = \"download\";\r\n\r\n//load defaults\r\nDownload.downloaders = defaultDownloaders;\r\n\r\nexport default Download;","export default function maskInput(el, options){\r\n\tvar mask = options.mask,\r\n\tmaskLetter = typeof options.maskLetterChar !== \"undefined\" ? options.maskLetterChar : \"A\",\r\n\tmaskNumber = typeof options.maskNumberChar !== \"undefined\" ? options.maskNumberChar : \"9\",\r\n\tmaskWildcard = typeof options.maskWildcardChar !== \"undefined\" ? options.maskWildcardChar : \"*\",\r\n\tsuccess = false;\r\n\r\n\tfunction fillSymbols(index){\r\n\t\tvar symbol = mask[index];\r\n\t\tif(typeof symbol !== \"undefined\" && symbol !== maskWildcard && symbol !== maskLetter && symbol !== maskNumber){\r\n\t\t\tel.value = el.value + \"\" + symbol;\r\n\t\t\tfillSymbols(index+1);\r\n\t\t}\r\n\t}\r\n\r\n\tel.addEventListener(\"keydown\", (e) => {\r\n\t\tvar index = el.value.length,\r\n\t\tchar = e.key;\r\n\r\n\t\tif(e.keyCode > 46){\r\n\t\t\tif(index >= mask.length){\r\n\t\t\t\te.preventDefault();\r\n\t\t\t\te.stopPropagation();\r\n\t\t\t\tsuccess = false;\r\n\t\t\t\treturn false;\r\n\t\t\t}else{\r\n\t\t\t\tswitch(mask[index]){\r\n\t\t\t\t\tcase maskLetter:\r\n\t\t\t\t\tif(char.toUpperCase() == char.toLowerCase()){\r\n\t\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\t\tsuccess = false;\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase maskNumber:\r\n\t\t\t\t\tif(isNaN(char)){\r\n\t\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\t\tsuccess = false;\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase maskWildcard:\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tdefault:\r\n\t\t\t\t\tif(char !== mask[index]){\r\n\t\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\t\tsuccess = false;\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tsuccess = true;\r\n\t\t}\r\n\r\n\t\treturn;\r\n\t});\r\n\r\n\tel.addEventListener(\"keyup\", (e) => {\r\n\t\tif(e.keyCode > 46){\r\n\t\t\tif(options.maskAutoFill){\r\n\t\t\t\tfillSymbols(el.value.length);\r\n\t\t\t}\r\n\t\t}\r\n\t});\r\n\r\n\r\n\tif(!el.placeholder){\r\n\t\tel.placeholder = mask;\r\n\t}\r\n\r\n\tif(options.maskAutoFill){\r\n\t\tfillSymbols(el.value.length);\r\n\t}\r\n}","import input from './editors/input.js';\r\nimport textarea from './editors/textarea.js';\r\nimport number from './editors/number.js';\r\nimport range from './editors/range.js';\r\nimport select from './editors/select.js';\r\nimport autocomplete from './editors/autocomplete.js';\r\nimport star from './editors/star.js';\r\nimport progress from './editors/progress.js';\r\nimport tickCross from './editors/tickCross.js';\r\n\r\nexport default {\r\n\tinput:input,\r\n\ttextarea:textarea,\r\n number:number,\r\n range:range,\r\n\tselect:select,\r\n\tautocomplete:autocomplete,\r\n\tstar:star,\r\n\tprogress:progress,\r\n\ttickCross:tickCross,\r\n};","import maskInput from '../../inputMask.js';\r\n\r\n//input element\r\nexport default function(cell, onRendered, success, cancel, editorParams){\r\n\t//create and style input\r\n\tvar cellValue = cell.getValue(),\r\n\tinput = document.createElement(\"input\");\r\n\r\n\tinput.setAttribute(\"type\", editorParams.search ? \"search\" : \"text\");\r\n\r\n\tinput.style.padding = \"4px\";\r\n\tinput.style.width = \"100%\";\r\n\tinput.style.boxSizing = \"border-box\";\r\n\r\n\tif(editorParams.elementAttributes && typeof editorParams.elementAttributes == \"object\"){\r\n\t\tfor (let key in editorParams.elementAttributes){\r\n\t\t\tif(key.charAt(0) == \"+\"){\r\n\t\t\t\tkey = key.slice(1);\r\n\t\t\t\tinput.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\r\n\t\t\t}else{\r\n\t\t\t\tinput.setAttribute(key, editorParams.elementAttributes[key]);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tinput.value = typeof cellValue !== \"undefined\" ? cellValue : \"\";\r\n\r\n\tonRendered(function(){\r\n\t\tinput.focus({preventScroll: true});\r\n\t\tinput.style.height = \"100%\";\r\n\t});\r\n\r\n\tfunction onChange(e){\r\n\t\tif(((cellValue === null || typeof cellValue === \"undefined\") && input.value !== \"\") || input.value !== cellValue){\r\n\t\t\tif(success(input.value)){\r\n\t\t\t\tcellValue = input.value; //persist value if successfully validated incase editor is used as header filter\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tcancel();\r\n\t\t}\r\n\t}\r\n\r\n\t//submit new value on blur or change\r\n\tinput.addEventListener(\"change\", onChange);\r\n\tinput.addEventListener(\"blur\", onChange);\r\n\r\n\t//submit new value on enter\r\n\tinput.addEventListener(\"keydown\", function(e){\r\n\t\tswitch(e.keyCode){\r\n\t\t\t// case 9:\r\n\t\t\tcase 13:\r\n\t\t\tonChange(e);\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 27:\r\n\t\t\tcancel();\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 35:\r\n\t\t\tcase 36:\r\n\t\t\te.stopPropagation();\r\n\t\t\tbreak;\r\n\t\t}\r\n\t});\r\n\r\n\tif(editorParams.mask){\r\n\t\tmaskInput(input, editorParams);\r\n\t}\r\n\r\n\treturn input;\r\n};","import maskInput from '../../inputMask.js';\r\n\r\n//resizable text area element\r\nexport default function(cell, onRendered, success, cancel, editorParams){\r\n var self = this,\r\n cellValue = cell.getValue(),\r\n vertNav = editorParams.verticalNavigation || \"hybrid\",\r\n value = String(cellValue !== null && typeof cellValue !== \"undefined\" ? cellValue : \"\"),\r\n count = (value.match(/(?:\\r\\n|\\r|\\n)/g) || []).length + 1,\r\n input = document.createElement(\"textarea\"),\r\n scrollHeight = 0;\r\n\r\n //create and style input\r\n input.style.display = \"block\";\r\n input.style.padding = \"2px\";\r\n input.style.height = \"100%\";\r\n input.style.width = \"100%\";\r\n input.style.boxSizing = \"border-box\";\r\n input.style.whiteSpace = \"pre-wrap\";\r\n input.style.resize = \"none\";\r\n\r\n if(editorParams.elementAttributes && typeof editorParams.elementAttributes == \"object\"){\r\n for (let key in editorParams.elementAttributes){\r\n if(key.charAt(0) == \"+\"){\r\n key = key.slice(1);\r\n input.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\r\n }else{\r\n input.setAttribute(key, editorParams.elementAttributes[key]);\r\n }\r\n }\r\n }\r\n\r\n input.value = value;\r\n\r\n onRendered(function(){\r\n input.focus({preventScroll: true});\r\n input.style.height = \"100%\";\r\n\r\n input.scrollHeight;\r\n input.style.height = input.scrollHeight + \"px\";\r\n cell.getRow().normalizeHeight();\r\n });\r\n\r\n function onChange(e){\r\n\r\n if(((cellValue === null || typeof cellValue === \"undefined\") && input.value !== \"\") || input.value !== cellValue){\r\n\r\n if(success(input.value)){\r\n cellValue = input.value; //persist value if successfully validated incase editor is used as header filter\r\n }\r\n\r\n setTimeout(function(){\r\n cell.getRow().normalizeHeight();\r\n },300)\r\n }else{\r\n cancel();\r\n }\r\n }\r\n\r\n //submit new value on blur or change\r\n input.addEventListener(\"change\", onChange);\r\n input.addEventListener(\"blur\", onChange);\r\n\r\n input.addEventListener(\"keyup\", function(){\r\n\r\n input.style.height = \"\";\r\n\r\n var heightNow = input.scrollHeight;\r\n\r\n input.style.height = heightNow + \"px\";\r\n\r\n if(heightNow != scrollHeight){\r\n scrollHeight = heightNow;\r\n cell.getRow().normalizeHeight();\r\n }\r\n });\r\n\r\n input.addEventListener(\"keydown\", function(e){\r\n\r\n switch(e.keyCode){\r\n case 27:\r\n cancel();\r\n break;\r\n\r\n case 38: //up arrow\r\n if(vertNav == \"editor\" || (vertNav == \"hybrid\" && input.selectionStart)){\r\n e.stopImmediatePropagation();\r\n e.stopPropagation();\r\n }\r\n\r\n break;\r\n\r\n case 40: //down arrow\r\n if(vertNav == \"editor\" || (vertNav == \"hybrid\" && input.selectionStart !== input.value.length)){\r\n e.stopImmediatePropagation();\r\n e.stopPropagation();\r\n }\r\n break;\r\n\r\n case 35:\r\n case 36:\r\n e.stopPropagation();\r\n break;\r\n }\r\n });\r\n\r\n if(editorParams.mask){\r\n maskInput(input, editorParams);\r\n }\r\n\r\n return input;\r\n};","import maskInput from '../../inputMask.js';\r\n\r\n//input element with type of number\r\nexport default function(cell, onRendered, success, cancel, editorParams){\r\n\tvar cellValue = cell.getValue(),\r\n\tvertNav = editorParams.verticalNavigation || \"editor\",\r\n\tinput = document.createElement(\"input\");\r\n\r\n\tinput.setAttribute(\"type\", \"number\");\r\n\r\n\tif(typeof editorParams.max != \"undefined\"){\r\n\t\tinput.setAttribute(\"max\", editorParams.max);\r\n\t}\r\n\r\n\tif(typeof editorParams.min != \"undefined\"){\r\n\t\tinput.setAttribute(\"min\", editorParams.min);\r\n\t}\r\n\r\n\tif(typeof editorParams.step != \"undefined\"){\r\n\t\tinput.setAttribute(\"step\", editorParams.step);\r\n\t}\r\n\r\n\t//create and style input\r\n\tinput.style.padding = \"4px\";\r\n\tinput.style.width = \"100%\";\r\n\tinput.style.boxSizing = \"border-box\";\r\n\r\n\tif(editorParams.elementAttributes && typeof editorParams.elementAttributes == \"object\"){\r\n\t\tfor (let key in editorParams.elementAttributes){\r\n\t\t\tif(key.charAt(0) == \"+\"){\r\n\t\t\t\tkey = key.slice(1);\r\n\t\t\t\tinput.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\r\n\t\t\t}else{\r\n\t\t\t\tinput.setAttribute(key, editorParams.elementAttributes[key]);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tinput.value = cellValue;\r\n\r\n\tvar blurFunc = function(e){\r\n\t\tonChange();\r\n\t};\r\n\r\n\tonRendered(function () {\r\n\t\t//submit new value on blur\r\n\t\tinput.removeEventListener(\"blur\", blurFunc);\r\n\r\n\t\tinput.focus({preventScroll: true});\r\n\t\tinput.style.height = \"100%\";\r\n\r\n\t\t//submit new value on blur\r\n\t\tinput.addEventListener(\"blur\", blurFunc);\r\n\t});\r\n\r\n\tfunction onChange(){\r\n\t\tvar value = input.value;\r\n\r\n\t\tif(!isNaN(value) && value !==\"\"){\r\n\t\t\tvalue = Number(value);\r\n\t\t}\r\n\r\n\t\tif(value !== cellValue){\r\n\t\t\tif(success(value)){\r\n\t\t\t\tcellValue = value; //persist value if successfully validated incase editor is used as header filter\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tcancel();\r\n\t\t}\r\n\t}\r\n\r\n\t//submit new value on enter\r\n\tinput.addEventListener(\"keydown\", function(e){\r\n\t\tswitch(e.keyCode){\r\n\t\t\tcase 13:\r\n\t\t\t// case 9:\r\n\t\t\tonChange();\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 27:\r\n\t\t\tcancel();\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 38: //up arrow\r\n\t\t\tcase 40: //down arrow\r\n\t\t\tif(vertNav == \"editor\"){\r\n\t\t\t\te.stopImmediatePropagation();\r\n\t\t\t\te.stopPropagation();\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 35:\r\n\t\t\tcase 36:\r\n\t\t\te.stopPropagation();\r\n\t\t\tbreak;\r\n\t\t}\r\n\t});\r\n\r\n\tif(editorParams.mask){\r\n\t\tmaskInput(input, editorParams);\r\n\t}\r\n\r\n\treturn input;\r\n};","//input element with type of number\r\nexport default function(cell, onRendered, success, cancel, editorParams){\r\n\tvar cellValue = cell.getValue(),\r\n\tinput = document.createElement(\"input\");\r\n\r\n\tinput.setAttribute(\"type\", \"range\");\r\n\r\n\tif (typeof editorParams.max != \"undefined\") {\r\n\t\tinput.setAttribute(\"max\", editorParams.max);\r\n\t}\r\n\r\n\tif (typeof editorParams.min != \"undefined\") {\r\n\t\tinput.setAttribute(\"min\", editorParams.min);\r\n\t}\r\n\r\n\tif (typeof editorParams.step != \"undefined\") {\r\n\t\tinput.setAttribute(\"step\", editorParams.step);\r\n\t}\r\n\r\n\t//create and style input\r\n\tinput.style.padding = \"4px\";\r\n\tinput.style.width = \"100%\";\r\n\tinput.style.boxSizing = \"border-box\";\r\n\r\n\tif(editorParams.elementAttributes && typeof editorParams.elementAttributes == \"object\"){\r\n\t\tfor (let key in editorParams.elementAttributes){\r\n\t\t\tif(key.charAt(0) == \"+\"){\r\n\t\t\t\tkey = key.slice(1);\r\n\t\t\t\tinput.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\r\n\t\t\t}else{\r\n\t\t\t\tinput.setAttribute(key, editorParams.elementAttributes[key]);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tinput.value = cellValue;\r\n\r\n\tonRendered(function () {\r\n\t\tinput.focus({preventScroll: true});\r\n\t\tinput.style.height = \"100%\";\r\n\t});\r\n\r\n\tfunction onChange(){\r\n\t\tvar value = input.value;\r\n\r\n\t\tif(!isNaN(value) && value !==\"\"){\r\n\t\t\tvalue = Number(value);\r\n\t\t}\r\n\r\n\t\tif(value != cellValue){\r\n\t\t\tif(success(value)){\r\n\t\t\t\tcellValue = value; //persist value if successfully validated incase editor is used as header filter\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tcancel();\r\n\t\t}\r\n\t}\r\n\r\n\t//submit new value on blur\r\n\tinput.addEventListener(\"blur\", function(e){\r\n\t\tonChange();\r\n\t});\r\n\r\n\t//submit new value on enter\r\n\tinput.addEventListener(\"keydown\", function(e){\r\n\t\tswitch(e.keyCode){\r\n\t\t\tcase 13:\r\n\t\t\t// case 9:\r\n\t\t\tonChange();\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 27:\r\n\t\t\tcancel();\r\n\t\t\tbreak;\r\n\t\t}\r\n\t});\r\n\r\n\treturn input;\r\n};","import Helpers from '../../../../core/tools/Helpers.js';\r\n\r\n//dropdown select editor\r\nexport default function(cell, onRendered, success, cancel, editorParams){\r\n\tvar self = this,\r\n\tcellEl = cell.getElement(),\r\n\tinitialValue = cell.getValue(),\r\n\tvertNav = editorParams.verticalNavigation || \"editor\",\r\n\tinitialDisplayValue = typeof initialValue !== \"undefined\" || initialValue === null ? (Array.isArray(initialValue) ? initialValue : [initialValue]) : (typeof editorParams.defaultValue !== \"undefined\" ? editorParams.defaultValue : []),\r\n\tinput = document.createElement(\"input\"),\r\n\tlistEl = document.createElement(\"div\"),\r\n\tmultiselect = editorParams.multiselect,\r\n\tdataItems = [],\r\n\tcurrentItem = {},\r\n\tdisplayItems = [],\r\n\tcurrentItems = [],\r\n\tblurable = true,\r\n\tblockListShow = false,\r\n\tsearchWord = \"\",\r\n\tsearchWordTimeout = null;\r\n\r\n\tif(Array.isArray(editorParams) || (!Array.isArray(editorParams) && typeof editorParams === \"object\" && !editorParams.values)){\r\n\t\tconsole.warn(\"DEPRECATION WARNING - values for the select editor must now be passed into the values property of the editorParams object, not as the editorParams object\");\r\n\t\teditorParams = {values:editorParams};\r\n\t}\r\n\r\n\tfunction getUniqueColumnValues(field){\r\n\t\tvar output = {},\r\n\t\tdata = self.table.getData(),\r\n\t\tcolumn;\r\n\r\n\t\tif(field){\r\n\t\t\tcolumn = self.table.columnManager.getColumnByField(field);\r\n\t\t}else{\r\n\t\t\tcolumn = cell.getColumn()._getSelf();\r\n\t\t}\r\n\r\n\t\tif(column){\r\n\t\t\tdata.forEach(function(row){\r\n\t\t\t\tvar val = column.getFieldValue(row);\r\n\r\n\t\t\t\tif(val !== null && typeof val !== \"undefined\" && val !== \"\"){\r\n\t\t\t\t\toutput[val] = true;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"unable to find matching column to create select lookup list:\", field);\r\n\t\t}\r\n\r\n\t\treturn Object.keys(output);\r\n\t}\r\n\r\n\tfunction parseItems(inputValues, curentValues){\r\n\t\tvar dataList = [];\r\n\t\tvar displayList = [];\r\n\r\n\t\tfunction processComplexListItem(item){\r\n\t\t\tvar item = {\r\n\t\t\t\tlabel:item.label,\r\n\t\t\t\tvalue:item.value,\r\n\t\t\t\titemParams:item.itemParams,\r\n\t\t\t\telementAttributes: item.elementAttributes,\r\n\t\t\t\telement:false,\r\n\t\t\t};\r\n\r\n\t\t\t// if(item.value === curentValue || (!isNaN(parseFloat(item.value)) && !isNaN(parseFloat(item.value)) && parseFloat(item.value) === parseFloat(curentValue))){\r\n\t\t\t// \tsetCurrentItem(item);\r\n\t\t\t// }\r\n\r\n\t\t\tif(curentValues.indexOf(item.value) > -1){\r\n\t\t\t\tsetItem(item);\r\n\t\t\t}\r\n\r\n\t\t\tdataList.push(item);\r\n\t\t\tdisplayList.push(item);\r\n\r\n\t\t\treturn item;\r\n\t\t}\r\n\r\n\t\tif(typeof inputValues == \"function\"){\r\n\t\t\tinputValues = inputValues(cell);\r\n\t\t}\r\n\r\n\t\tif(Array.isArray(inputValues)){\r\n\t\t\tinputValues.forEach(function(value){\r\n\t\t\t\tvar item;\r\n\r\n\t\t\t\tif(typeof value === \"object\"){\r\n\r\n\t\t\t\t\tif(value.options){\r\n\t\t\t\t\t\titem = {\r\n\t\t\t\t\t\t\tlabel:value.label,\r\n\t\t\t\t\t\t\tgroup:true,\r\n\t\t\t\t\t\t\titemParams:value.itemParams,\r\n\t\t\t\t\t\t\telementAttributes:value.elementAttributes,\r\n\t\t\t\t\t\t\telement:false,\r\n\t\t\t\t\t\t};\r\n\r\n\t\t\t\t\t\tdisplayList.push(item);\r\n\r\n\t\t\t\t\t\tvalue.options.forEach(function(item){\r\n\t\t\t\t\t\t\tprocessComplexListItem(item);\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tprocessComplexListItem(value);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}else{\r\n\r\n\t\t\t\t\titem = {\r\n\t\t\t\t\t\tlabel:value,\r\n\t\t\t\t\t\tvalue:value,\r\n\t\t\t\t\t\telement:false,\r\n\t\t\t\t\t};\r\n\r\n\t\t\t\t\t// if(item.value === curentValue || (!isNaN(parseFloat(item.value)) && !isNaN(parseFloat(item.value)) && parseFloat(item.value) === parseFloat(curentValue))){\r\n\t\t\t\t\t// \tsetCurrentItem(item);\r\n\t\t\t\t\t// }\r\n\r\n\t\t\t\t\tif(curentValues.indexOf(item.value) > -1){\r\n\t\t\t\t\t\tsetItem(item);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tdataList.push(item);\r\n\t\t\t\t\tdisplayList.push(item);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tfor(var key in inputValues){\r\n\t\t\t\tvar item = {\r\n\t\t\t\t\tlabel:inputValues[key],\r\n\t\t\t\t\tvalue:key,\r\n\t\t\t\t\telement:false,\r\n\t\t\t\t};\r\n\r\n\t\t\t\t// if(item.value === curentValue || (!isNaN(parseFloat(item.value)) && !isNaN(parseFloat(item.value)) && parseFloat(item.value) === parseFloat(curentValue))){\r\n\t\t\t\t// \tsetCurrentItem(item);\r\n\t\t\t\t// }\r\n\r\n\t\t\t\tif(curentValues.indexOf(item.value) > -1){\r\n\t\t\t\t\tsetItem(item);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tdataList.push(item);\r\n\t\t\t\tdisplayList.push(item);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(editorParams.sortValuesList){\r\n\t\t\tdataList.sort((a, b) => {\r\n\t\t\t\treturn a.label < b.label ? -1 : (a.label > b.label ? 1 : 0);\r\n\t\t\t});\r\n\r\n\t\t\tdisplayList.sort((a, b) => {\r\n\t\t\t\treturn a.label < b.label ? -1 : (a.label > b.label ? 1 : 0);\r\n\t\t\t});\r\n\r\n\t\t\tif(editorParams.sortValuesList !== \"asc\"){\r\n\t\t\t\tdataList.reverse();\r\n\t\t\t\tdisplayList.reverse();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tdataItems = dataList;\r\n\t\tdisplayItems = displayList;\r\n\r\n\t\tfillList();\r\n\t}\r\n\r\n\tfunction fillList(){\r\n\t\twhile(listEl.firstChild) listEl.removeChild(listEl.firstChild);\r\n\r\n\t\tdisplayItems.forEach(function(item){\r\n\r\n\t\t\tvar el = item.element;\r\n\r\n\t\t\tif(!el){\r\n\t\t\t\tel = document.createElement(\"div\");\r\n\t\t\t\titem.label = editorParams.listItemFormatter ? editorParams.listItemFormatter(item.value, item.label, cell, el, item.itemParams) : item.label;\r\n\t\t\t\tif(item.group){\r\n\t\t\t\t\tel.classList.add(\"tabulator-edit-select-list-group\");\r\n\t\t\t\t\tel.tabIndex = 0;\r\n\t\t\t\t\tel.innerHTML = item.label === \"\" ? \" \" : item.label;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tel.classList.add(\"tabulator-edit-select-list-item\");\r\n\t\t\t\t\tel.tabIndex = 0;\r\n\t\t\t\t\tel.innerHTML = item.label === \"\" ? \" \" : item.label;\r\n\r\n\t\t\t\t\tel.addEventListener(\"click\", function(){\r\n\t\t\t\t\t\tblockListShow = true;\r\n\r\n\t\t\t\t\t\tsetTimeout(() => {\r\n\t\t\t\t\t\t\tblockListShow = false;\r\n\t\t\t\t\t\t}, 10);\r\n\r\n\t\t\t\t\t\t// setCurrentItem(item);\r\n\t\t\t\t\t\t// chooseItem();\r\n\t\t\t\t\t\tif(multiselect){\r\n\t\t\t\t\t\t\ttoggleItem(item);\r\n\t\t\t\t\t\t\tinput.focus();\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\tchooseItem(item);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\t// if(item === currentItem){\r\n\t\t\t\t\t// \tel.classList.add(\"active\");\r\n\t\t\t\t\t// }\r\n\r\n\t\t\t\t\tif(currentItems.indexOf(item) > -1){\r\n\t\t\t\t\t\tel.classList.add(\"active\");\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(item.elementAttributes && typeof item.elementAttributes == \"object\"){\r\n\t\t\t\t\tfor (let key in item.elementAttributes){\r\n\t\t\t\t\t\tif(key.charAt(0) == \"+\"){\r\n\t\t\t\t\t\t\tkey = key.slice(1);\r\n\t\t\t\t\t\t\tel.setAttribute(key, input.getAttribute(key) + item.elementAttributes[\"+\" + key]);\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\tel.setAttribute(key, item.elementAttributes[key]);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tel.addEventListener(\"mousedown\", function(){\r\n\t\t\t\t\tblurable = false;\r\n\r\n\t\t\t\t\tsetTimeout(function(){\r\n\t\t\t\t\t\tblurable = true;\r\n\t\t\t\t\t}, 10);\r\n\t\t\t\t});\r\n\r\n\t\t\t\titem.element = el;\r\n\r\n\r\n\t\t\t}\r\n\r\n\t\t\tlistEl.appendChild(el);\r\n\t\t});\r\n\t}\r\n\r\n\r\n\tfunction setCurrentItem(item, active){\r\n\r\n\t\tif(!multiselect && currentItem && currentItem.element){\r\n\t\t\tcurrentItem.element.classList.remove(\"active\");\r\n\t\t}\r\n\r\n\t\tif(currentItem && currentItem.element){\r\n\t\t\tcurrentItem.element.classList.remove(\"focused\");\r\n\t\t}\r\n\r\n\t\tcurrentItem = item;\r\n\r\n\t\tif(item.element){\r\n\t\t\titem.element.classList.add(\"focused\");\r\n\t\t\tif(active){\r\n\t\t\t\titem.element.classList.add(\"active\");\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(item && item.element && item.element.scrollIntoView){\r\n\t\t\titem.element.scrollIntoView({behavior: 'smooth', block: 'nearest', inline: 'start'});\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t// function chooseItem(){\r\n\t// \thideList();\r\n\r\n\t// \tif(initialValue !== currentItem.value){\r\n\t// \t\tinitialValue = currentItem.value;\r\n\t// \t\tsuccess(currentItem.value);\r\n\t// \t}else{\r\n\t// \t\tcancel();\r\n\t// \t}\r\n\t// }\r\n\r\n\tfunction setItem(item) {\r\n\t\tvar index = currentItems.indexOf(item);\r\n\r\n\t\tif(index == -1){\r\n\t\t\tcurrentItems.push(item);\r\n\t\t\tsetCurrentItem(item, true);\r\n\t\t}\r\n\r\n\t\tfillInput();\r\n\t}\r\n\r\n\tfunction unsetItem(index) {\r\n\t\tvar item = currentItems[index];\r\n\r\n\t\tif(index > -1){\r\n\t\t\tcurrentItems.splice(index, 1);\r\n\t\t\tif(item.element){\r\n\t\t\t\titem.element.classList.remove(\"active\");\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tfunction toggleItem(item) {\r\n\t\tif(!item){\r\n\t\t\titem = currentItem;\r\n\t\t}\r\n\r\n\t\tvar index = currentItems.indexOf(item);\r\n\r\n\t\tif(index > -1){\r\n\t\t\tunsetItem(index);\r\n\t\t}else{\r\n\t\t\tif(multiselect !== true && currentItems.length >= multiselect){\r\n\t\t\t\tunsetItem(0);\r\n\t\t\t}\r\n\r\n\t\t\tsetItem(item);\r\n\t\t}\r\n\r\n\t\tfillInput();\r\n\r\n\t}\r\n\r\n\tfunction chooseItem(item){\r\n\t\thideList();\r\n\r\n\t\tif(!item){\r\n\t\t\titem = currentItem;\r\n\t\t}\r\n\r\n\t\tif(item){\r\n\t\t\tinput.value = item.label;\r\n\t\t\tsuccess(item.value);\r\n\t\t}\r\n\r\n\t\tinitialDisplayValue = [item.value];\r\n\t}\r\n\r\n\r\n\tfunction chooseItems(silent){\r\n\t\tif(!silent){\r\n\t\t\thideList();\r\n\t\t}\r\n\r\n\t\tvar output = [];\r\n\r\n\t\tcurrentItems.forEach((item) => {\r\n\t\t\toutput.push(item.value);\r\n\t\t});\r\n\r\n\t\tinitialDisplayValue = output;\r\n\r\n\t\tsuccess(output);\r\n\t}\r\n\r\n\tfunction fillInput(){\r\n\t\tvar output = [];\r\n\r\n\t\tcurrentItems.forEach((item) => {\r\n\t\t\toutput.push(item.label);\r\n\t\t});\r\n\r\n\t\tinput.value = output.join(\", \");\r\n\r\n\t\tif(self.currentCell === false){\r\n\t\t\tchooseItems(true);\r\n\t\t}\r\n\t}\r\n\r\n\r\n\tfunction unsetItems() {\r\n\r\n\t\tvar len = currentItems.length;\r\n\r\n\t\tfor(let i = 0; i < len; i++){\r\n\t\t\tunsetItem(0);\r\n\t\t}\r\n\t}\r\n\r\n\tfunction cancelItem(){\r\n\t\thideList();\r\n\t\tcancel();\r\n\t}\r\n\r\n\tfunction showList(){\r\n\t\tcurrentItems = [];\r\n\r\n\t\tif(!listEl.parentNode){\r\n\t\t\tif(editorParams.values === true){\r\n\t\t\t\tparseItems(getUniqueColumnValues(), initialDisplayValue);\r\n\t\t\t}else if(typeof editorParams.values === \"string\"){\r\n\t\t\t\tparseItems(getUniqueColumnValues(editorParams.values), initialDisplayValue);\r\n\t\t\t}else{\r\n\t\t\t\tparseItems(editorParams.values || [], initialDisplayValue);\r\n\t\t\t}\r\n\r\n\r\n\t\t\tvar offset = Helpers.elOffset(cellEl);\r\n\r\n\t\t\tlistEl.style.minWidth = cellEl.offsetWidth + \"px\";\r\n\r\n\t\t\tlistEl.style.top = (offset.top + cellEl.offsetHeight) + \"px\";\r\n\t\t\tlistEl.style.left = offset.left + \"px\";\r\n\r\n\r\n\t\t\tlistEl.addEventListener(\"mousedown\", function(e){\r\n\t\t\t\tblurable = false;\r\n\r\n\t\t\t\tsetTimeout(function(){\r\n\t\t\t\t\tblurable = true;\r\n\t\t\t\t}, 10);\r\n\t\t\t});\r\n\r\n\t\t\tdocument.body.appendChild(listEl);\r\n\t\t}\r\n\t}\r\n\r\n\tfunction hideList(){\r\n\t\tif(listEl.parentNode){\r\n\t\t\tlistEl.parentNode.removeChild(listEl);\r\n\t\t}\r\n\r\n\t\tremoveScrollListener();\r\n\t}\r\n\r\n\tfunction removeScrollListener() {\r\n\t\tself.table.rowManager.element.removeEventListener(\"scroll\", cancelItem);\r\n\t}\r\n\r\n\tfunction scrollTovalue(char){\r\n\r\n\t\tclearTimeout(searchWordTimeout);\r\n\r\n\t\tvar character = String.fromCharCode(event.keyCode).toLowerCase();\r\n\t\tsearchWord += character.toLowerCase();\r\n\r\n\t\tvar match = dataItems.find((item) => {\r\n\t\t\treturn typeof item.label !== \"undefined\" && item.label.toLowerCase().startsWith(searchWord);\r\n\t\t});\r\n\r\n\t\tif(match){\r\n\t\t\tsetCurrentItem(match, !multiselect);\r\n\t\t}\r\n\r\n\t\tsearchWordTimeout = setTimeout(() => {\r\n\t\t\tsearchWord = \"\";\r\n\t\t}, 800)\r\n\t}\r\n\r\n\t//style input\r\n\tinput.setAttribute(\"type\", \"text\");\r\n\r\n\tinput.style.padding = \"4px\";\r\n\tinput.style.width = \"100%\";\r\n\tinput.style.boxSizing = \"border-box\";\r\n\tinput.style.cursor = \"default\";\r\n\tinput.readOnly = (this.currentCell != false);\r\n\r\n\tif(editorParams.elementAttributes && typeof editorParams.elementAttributes == \"object\"){\r\n\t\tfor (let key in editorParams.elementAttributes){\r\n\t\t\tif(key.charAt(0) == \"+\"){\r\n\t\t\t\tkey = key.slice(1);\r\n\t\t\t\tinput.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\r\n\t\t\t}else{\r\n\t\t\t\tinput.setAttribute(key, editorParams.elementAttributes[key]);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tinput.value = typeof initialValue !== \"undefined\" || initialValue === null ? initialValue : \"\";\r\n\r\n\t// if(editorParams.values === true){\r\n\t// \tparseItems(getUniqueColumnValues(), initialValue);\r\n\t// }else if(typeof editorParams.values === \"string\"){\r\n\t// \tparseItems(getUniqueColumnValues(editorParams.values), initialValue);\r\n\t// }else{\r\n\t// \tparseItems(editorParams.values || [], initialValue);\r\n\t// }\r\n\r\n\tinput.addEventListener(\"search\", function(e){\r\n\t\tif(!input.value){\r\n\t\t\tunsetItems();\r\n\t\t\tchooseItems();\r\n\t\t}\r\n\t});\r\n\r\n\t//allow key based navigation\r\n\tinput.addEventListener(\"keydown\", function(e){\r\n\t\tvar index;\r\n\r\n\t\tswitch(e.keyCode){\r\n\t\t\tcase 38: //up arrow\r\n\t\t\tindex = dataItems.indexOf(currentItem);\r\n\r\n\t\t\tif(vertNav == \"editor\" || (vertNav == \"hybrid\" && index)){\r\n\t\t\t\te.stopImmediatePropagation();\r\n\t\t\t\te.stopPropagation();\r\n\t\t\t\te.preventDefault();\r\n\r\n\t\t\t\tif(index > 0){\r\n\t\t\t\t\tsetCurrentItem(dataItems[index - 1], !multiselect);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 40: //down arrow\r\n\t\t\tindex = dataItems.indexOf(currentItem);\r\n\r\n\t\t\tif(vertNav == \"editor\" || (vertNav == \"hybrid\" && index < dataItems.length - 1)){\r\n\t\t\t\te.stopImmediatePropagation();\r\n\t\t\t\te.stopPropagation();\r\n\t\t\t\te.preventDefault();\r\n\r\n\t\t\t\tif(index < dataItems.length - 1){\r\n\t\t\t\t\tif(index == -1){\r\n\t\t\t\t\t\tsetCurrentItem(dataItems[0], !multiselect);\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tsetCurrentItem(dataItems[index + 1], !multiselect);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 37: //left arrow\r\n\t\t\tcase 39: //right arrow\r\n\t\t\te.stopImmediatePropagation();\r\n\t\t\te.stopPropagation();\r\n\t\t\te.preventDefault();\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 13: //enter\r\n\t\t\t// chooseItem();\r\n\r\n\t\t\tif(multiselect){\r\n\t\t\t\ttoggleItem();\r\n\t\t\t}else{\r\n\t\t\t\tchooseItem();\r\n\t\t\t}\r\n\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 27: //escape\r\n\t\t\tcancelItem();\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 9: //tab\r\n\t\t\tbreak;\r\n\r\n\t\t\tdefault:\r\n\t\t\tif(self.currentCell === false){\r\n\t\t\t\te.preventDefault();\r\n\t\t\t}\r\n\r\n\t\t\tif(e.keyCode >= 38 && e.keyCode <= 90){\r\n\t\t\t\tscrollTovalue(e.keyCode);\r\n\t\t\t}\r\n\t\t}\r\n\t});\r\n\r\n\tinput.addEventListener(\"blur\", function(e){\r\n\t\tif(blurable){\r\n\t\t\tif(multiselect){\r\n\t\t\t\tchooseItems();\r\n\t\t\t}else{\r\n\t\t\t\tcancelItem();\r\n\t\t\t}\r\n\t\t}\r\n\t});\r\n\r\n\tinput.addEventListener(\"focus\", function(e){\r\n\t\tif(!blockListShow){\r\n\t\t\tshowList();\r\n\t\t}\r\n\t});\r\n\r\n\t//style list element\r\n\tlistEl = document.createElement(\"div\");\r\n\tlistEl.classList.add(\"tabulator-edit-select-list\");\r\n\r\n\tonRendered(function(){\r\n\t\tinput.style.height = \"100%\";\r\n\t\tinput.focus({preventScroll: true});\r\n\t});\r\n\r\n\tsetTimeout(() => {\r\n\t\tthis.table.rowManager.element.addEventListener(\"scroll\", cancelItem);\r\n\t}, 10);\r\n\r\n\treturn input;\r\n};","import Helpers from '../../../../core/tools/Helpers.js';\r\nimport maskInput from '../../inputMask.js';\r\n\r\n//autocomplete\r\nexport default function(cell, onRendered, success, cancel, editorParams){\r\n\tvar self = this,\r\n\tcellEl = cell.getElement(),\r\n\tinitialValue = cell.getValue(),\r\n\tvertNav = editorParams.verticalNavigation || \"editor\",\r\n\tinitialDisplayValue = typeof initialValue !== \"undefined\" || initialValue === null ? initialValue : (typeof editorParams.defaultValue !== \"undefined\" ? editorParams.defaultValue : \"\"),\r\n\tinput = document.createElement(\"input\"),\r\n\tlistEl = document.createElement(\"div\"),\r\n\tallItems = [],\r\n\tdisplayItems = [],\r\n\tvalues = [],\r\n\tcurrentItem = false,\r\n\tblurable = true,\r\n\tuniqueColumnValues = false;\r\n\r\n\t//style input\r\n\tinput.setAttribute(\"type\", \"search\");\r\n\r\n\tinput.style.padding = \"4px\";\r\n\tinput.style.width = \"100%\";\r\n\tinput.style.boxSizing = \"border-box\";\r\n\r\n\tif(editorParams.elementAttributes && typeof editorParams.elementAttributes == \"object\"){\r\n\t\tfor (let key in editorParams.elementAttributes){\r\n\t\t\tif(key.charAt(0) == \"+\"){\r\n\t\t\t\tkey = key.slice(1);\r\n\t\t\t\tinput.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\r\n\t\t\t}else{\r\n\t\t\t\tinput.setAttribute(key, editorParams.elementAttributes[key]);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//style list element\r\n\tlistEl.classList.add(\"tabulator-edit-select-list\");\r\n\r\n\tlistEl.addEventListener(\"mousedown\", function(e){\r\n\t\tblurable = false;\r\n\r\n\t\tsetTimeout(function(){\r\n\t\t\tblurable = true;\r\n\t\t}, 10);\r\n\t});\r\n\r\n\r\n\tfunction genUniqueColumnValues(){\r\n\t\tif(editorParams.values === true){\r\n\t\t\tuniqueColumnValues = getUniqueColumnValues();\r\n\t\t}else if(typeof editorParams.values === \"string\"){\r\n\t\t\tuniqueColumnValues = getUniqueColumnValues(editorParams.values);\r\n\t\t}\r\n\t}\r\n\r\n\tfunction getUniqueColumnValues(field){\r\n\t\tvar output = {},\r\n\t\tdata = self.table.getData(),\r\n\t\tcolumn;\r\n\r\n\t\tif(field){\r\n\t\t\tcolumn = self.table.columnManager.getColumnByField(field);\r\n\t\t}else{\r\n\t\t\tcolumn = cell.getColumn()._getSelf();\r\n\t\t}\r\n\r\n\t\tif(column){\r\n\t\t\tdata.forEach(function(row){\r\n\t\t\t\tvar val = column.getFieldValue(row);\r\n\r\n\t\t\t\tif(val !== null && typeof val !== \"undefined\" && val !== \"\"){\r\n\t\t\t\t\toutput[val] = true;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tif(editorParams.sortValuesList){\r\n\t\t\t\tif(editorParams.sortValuesList == \"asc\"){\r\n\t\t\t\t\toutput = Object.keys(output).sort();\r\n\t\t\t\t}else{\r\n\t\t\t\t\toutput = Object.keys(output).sort().reverse();\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\toutput = Object.keys(output);\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"unable to find matching column to create autocomplete lookup list:\", field);\r\n\t\t}\r\n\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tfunction filterList(term, intialLoad){\r\n\t\tvar matches = [],\r\n\t\tvalues, items, searchEl;\r\n\r\n\t\t//lookup base values list\r\n\t\tif(uniqueColumnValues){\r\n\t\t\tvalues = uniqueColumnValues;\r\n\t\t}else{\r\n\t\t\tvalues = editorParams.values || [];\r\n\t\t}\r\n\r\n\t\tif(editorParams.searchFunc){\r\n\t\t\tmatches = editorParams.searchFunc(term, values);\r\n\r\n\t\t\tif(matches instanceof Promise){\r\n\r\n\t\t\t\taddNotice(typeof editorParams.searchingPlaceholder !== \"undefined\" ? editorParams.searchingPlaceholder : \"Searching...\");\r\n\r\n\t\t\t\tmatches.then((result) => {\r\n\t\t\t\t\tfillListIfNotEmpty(parseItems(result), intialLoad);\r\n\t\t\t\t}).catch((err) => {\r\n\t\t\t\t\tconsole.err(\"error in autocomplete search promise:\", err);\r\n\t\t\t\t});\r\n\r\n\t\t\t}else{\r\n\t\t\t\tfillListIfNotEmpty(parseItems(matches), intialLoad);\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\titems = parseItems(values);\r\n\r\n\t\t\tif(term === \"\"){\r\n\t\t\t\tif(editorParams.showListOnEmpty){\r\n\t\t\t\t\tmatches = items;\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\titems.forEach(function(item){\r\n\t\t\t\t\tif(item.value !== null || typeof item.value !== \"undefined\"){\r\n\t\t\t\t\t\tif(String(item.value).toLowerCase().indexOf(String(term).toLowerCase()) > -1 || String(item.title).toLowerCase().indexOf(String(term).toLowerCase()) > -1){\r\n\t\t\t\t\t\t\tmatches.push(item);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\tfillListIfNotEmpty(matches, intialLoad);\r\n\t\t}\r\n\t}\r\n\r\n\tfunction addNotice(notice){\r\n\t\tvar searchEl = document.createElement(\"div\");\r\n\r\n\t\tclearList();\r\n\r\n\t\tif(notice !== false){\r\n\t\t\tsearchEl.classList.add(\"tabulator-edit-select-list-notice\");\r\n\t\t\tsearchEl.tabIndex = 0;\r\n\r\n\t\t\tif(notice instanceof Node){\r\n\t\t\t\tsearchEl.appendChild(notice);\r\n\t\t\t}else{\r\n\t\t\t\tsearchEl.innerHTML = notice;\r\n\t\t\t}\r\n\r\n\t\t\tlistEl.appendChild(searchEl);\r\n\t\t}\r\n\t}\r\n\r\n\tfunction parseItems(inputValues){\r\n\t\tvar itemList = [];\r\n\r\n\t\tif(Array.isArray(inputValues)){\r\n\t\t\tinputValues.forEach(function(value){\r\n\r\n\t\t\t\tvar item = {};\r\n\r\n\t\t\t\tif(typeof value === \"object\"){\r\n\t\t\t\t\titem.title = editorParams.listItemFormatter ? editorParams.listItemFormatter(value.value, value.label) : value.label;\r\n\t\t\t\t\titem.value = value.value;\r\n\t\t\t\t}else{\r\n\t\t\t\t\titem.title = editorParams.listItemFormatter ? editorParams.listItemFormatter(value, value) : value;\r\n\t\t\t\t\titem.value = value;\r\n\t\t\t\t}\r\n\r\n\t\t\t\titemList.push(item);\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tfor(var key in inputValues){\r\n\t\t\t\tvar item = {\r\n\t\t\t\t\ttitle:editorParams.listItemFormatter ? editorParams.listItemFormatter(key, inputValues[key]) : inputValues[key],\r\n\t\t\t\t\tvalue:key,\r\n\t\t\t\t};\r\n\r\n\t\t\t\titemList.push(item);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn itemList;\r\n\t}\r\n\r\n\tfunction clearList(){\r\n\t\twhile(listEl.firstChild) listEl.removeChild(listEl.firstChild);\r\n\t}\r\n\r\n\tfunction fillListIfNotEmpty(items, intialLoad){\r\n\t\tif(items.length){\r\n\t\t\tfillList(items, intialLoad);\r\n\t\t}else{\r\n\t\t\tif(editorParams.emptyPlaceholder){\r\n\t\t\t\taddNotice(editorParams.emptyPlaceholder);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tfunction fillList(items, intialLoad){\r\n\t\tvar current = false;\r\n\r\n\t\tclearList();\r\n\r\n\t\tdisplayItems = items;\r\n\r\n\t\tdisplayItems.forEach(function(item){\r\n\t\t\tvar el = item.element;\r\n\r\n\t\t\tif(!el){\r\n\t\t\t\tel = document.createElement(\"div\");\r\n\t\t\t\tel.classList.add(\"tabulator-edit-select-list-item\");\r\n\t\t\t\tel.tabIndex = 0;\r\n\t\t\t\tel.innerHTML = item.title;\r\n\r\n\t\t\t\tel.addEventListener(\"click\", function(e){\r\n\t\t\t\t\tsetCurrentItem(item);\r\n\t\t\t\t\tchooseItem();\r\n\t\t\t\t});\r\n\r\n\t\t\t\tel.addEventListener(\"mousedown\", function(e){\r\n\t\t\t\t\tblurable = false;\r\n\r\n\t\t\t\t\tsetTimeout(function(){\r\n\t\t\t\t\t\tblurable = true;\r\n\t\t\t\t\t}, 10);\r\n\t\t\t\t});\r\n\r\n\t\t\t\titem.element = el;\r\n\r\n\t\t\t\tif(intialLoad && item.value == initialValue){\r\n\t\t\t\t\tinput.value = item.title;\r\n\t\t\t\t\titem.element.classList.add(\"active\");\r\n\t\t\t\t\tcurrent = true;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(item === currentItem){\r\n\t\t\t\t\titem.element.classList.add(\"active\");\r\n\t\t\t\t\tcurrent = true;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tlistEl.appendChild(el);\r\n\t\t});\r\n\r\n\t\tif(!current){\r\n\t\t\tsetCurrentItem(false);\r\n\t\t}\r\n\t}\r\n\r\n\tfunction chooseItem(){\r\n\t\thideList();\r\n\r\n\t\tif(currentItem){\r\n\t\t\tif(initialValue !== currentItem.value){\r\n\t\t\t\tinitialValue = currentItem.value;\r\n\t\t\t\tinput.value = currentItem.title;\r\n\t\t\t\tsuccess(currentItem.value);\r\n\t\t\t}else{\r\n\t\t\t\tcancel();\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tif(editorParams.freetext){\r\n\t\t\t\tinitialValue = input.value;\r\n\t\t\t\tsuccess(input.value);\r\n\t\t\t}else{\r\n\t\t\t\tif(editorParams.allowEmpty && input.value === \"\"){\r\n\t\t\t\t\tinitialValue = input.value;\r\n\t\t\t\t\tsuccess(input.value);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tcancel();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tfunction showList(){\r\n\t\tif(!listEl.parentNode){\r\n\t\t\twhile(listEl.firstChild) listEl.removeChild(listEl.firstChild);\r\n\r\n\t\t\tvar offset = Helpers.elOffset(cellEl);\r\n\r\n\t\t\tlistEl.style.minWidth = cellEl.offsetWidth + \"px\";\r\n\r\n\t\t\tlistEl.style.top = (offset.top + cellEl.offsetHeight) + \"px\";\r\n\t\t\tlistEl.style.left = offset.left + \"px\";\r\n\t\t\tdocument.body.appendChild(listEl);\r\n\t\t}\r\n\t}\r\n\r\n\tfunction setCurrentItem(item, showInputValue){\r\n\t\tif(currentItem && currentItem.element){\r\n\t\t\tcurrentItem.element.classList.remove(\"active\");\r\n\t\t}\r\n\r\n\t\tcurrentItem = item;\r\n\r\n\t\tif(item && item.element){\r\n\t\t\titem.element.classList.add(\"active\");\r\n\t\t}\r\n\r\n\t\tif(item && item.element && item.element.scrollIntoView){\r\n\t\t\titem.element.scrollIntoView({behavior: 'smooth', block: 'nearest', inline: 'start'});\r\n\t\t}\r\n\t}\r\n\r\n\tfunction hideList(){\r\n\t\tif(listEl.parentNode){\r\n\t\t\tlistEl.parentNode.removeChild(listEl);\r\n\t\t}\r\n\r\n\t\tremoveScrollListener();\r\n\t}\r\n\r\n\r\n\tfunction cancelItem(){\r\n\t\thideList();\r\n\t\tcancel();\r\n\t}\r\n\r\n\tfunction removeScrollListener() {\r\n\t\tself.table.rowManager.element.removeEventListener(\"scroll\", cancelItem);\r\n\t}\r\n\r\n\t//allow key based navigation\r\n\tinput.addEventListener(\"keydown\", function(e){\r\n\t\tvar index;\r\n\r\n\t\tswitch(e.keyCode){\r\n\t\t\tcase 38: //up arrow\r\n\t\t\tindex = displayItems.indexOf(currentItem);\r\n\r\n\t\t\tif(vertNav == \"editor\" || (vertNav == \"hybrid\" && index)){\r\n\t\t\t\te.stopImmediatePropagation();\r\n\t\t\t\te.stopPropagation();\r\n\t\t\t\te.preventDefault();\r\n\r\n\t\t\t\tif(index > 0){\r\n\t\t\t\t\tsetCurrentItem(displayItems[index - 1]);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tsetCurrentItem(false);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 40: //down arrow\r\n\r\n\t\t\tindex = displayItems.indexOf(currentItem);\r\n\r\n\t\t\tif(vertNav == \"editor\" || (vertNav == \"hybrid\" && index < displayItems.length - 1)){\r\n\r\n\t\t\t\te.stopImmediatePropagation();\r\n\t\t\t\te.stopPropagation();\r\n\t\t\t\te.preventDefault();\r\n\r\n\t\t\t\tif(index < displayItems.length - 1){\r\n\t\t\t\t\tif(index == -1){\r\n\t\t\t\t\t\tsetCurrentItem(displayItems[0]);\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tsetCurrentItem(displayItems[index + 1]);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\r\n\r\n\t\t\tcase 37: //left arrow\r\n\t\t\tcase 39: //right arrow\r\n\t\t\te.stopImmediatePropagation();\r\n\t\t\te.stopPropagation();\r\n\t\t\t// e.preventDefault();\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 13: //enter\r\n\t\t\tchooseItem();\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 27: //escape\r\n\t\t\tcancelItem();\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 36: //home\r\n\t\t\tcase 35: //end\r\n\t\t\t//prevent table navigation while using input element\r\n\t\t\te.stopImmediatePropagation();\r\n\t\t\tbreak;\r\n\t\t}\r\n\t});\r\n\r\n\tinput.addEventListener(\"keyup\", function(e){\r\n\r\n\t\tswitch(e.keyCode){\r\n\t\t\tcase 38: //up arrow\r\n\t\t\tcase 37: //left arrow\r\n\t\t\tcase 39: //up arrow\r\n\t\t\tcase 40: //right arrow\r\n\t\t\tcase 13: //enter\r\n\t\t\tcase 27: //escape\r\n\t\t\tbreak;\r\n\r\n\t\t\tdefault:\r\n\t\t\tfilterList(input.value);\r\n\t\t}\r\n\r\n\t});\r\n\r\n\tinput.addEventListener(\"search\", function(e){\r\n\t\tfilterList(input.value);\r\n\t});\r\n\r\n\tinput.addEventListener(\"blur\", function(e){\r\n\t\tif(blurable){\r\n\t\t\tchooseItem();\r\n\t\t}\r\n\t});\r\n\r\n\tinput.addEventListener(\"focus\", function(e){\r\n\t\tvar value = initialDisplayValue;\r\n\t\tgenUniqueColumnValues();\r\n\t\tshowList();\r\n\t\tinput.value = value;\r\n\t\tfilterList(value, true);\r\n\t});\r\n\r\n\r\n\tonRendered(function(){\r\n\t\tinput.style.height = \"100%\";\r\n\t\tinput.focus({preventScroll: true});\r\n\t});\r\n\r\n\tif(editorParams.mask){\r\n\t\tmaskInput(input, editorParams);\r\n\t}\r\n\r\n\tsetTimeout(() => {\r\n\t\tthis.table.rowManager.element.addEventListener(\"scroll\", cancelItem);\r\n\t}, 10);\r\n\r\n\tgenUniqueColumnValues();\r\n\tinput.value = initialDisplayValue;\r\n\tfilterList(initialDisplayValue, true);\r\n\r\n\treturn input;\r\n};","//star rating\r\nexport default function(cell, onRendered, success, cancel, editorParams){\r\n\tvar self = this,\r\n\telement = cell.getElement(),\r\n\tvalue = cell.getValue(),\r\n\tmaxStars = element.getElementsByTagName(\"svg\").length || 5,\r\n\tsize = element.getElementsByTagName(\"svg\")[0] ? element.getElementsByTagName(\"svg\")[0].getAttribute(\"width\") : 14,\r\n\tstars = [],\r\n\tstarsHolder = document.createElement(\"div\"),\r\n\tstar = document.createElementNS('http://www.w3.org/2000/svg', \"svg\");\r\n\r\n\r\n\t//change star type\r\n\tfunction starChange(val){\r\n\t\tstars.forEach(function(star, i){\r\n\t\t\tif(i < val){\r\n\t\t\t\tif(self.table.browser == \"ie\"){\r\n\t\t\t\t\tstar.setAttribute(\"class\", \"tabulator-star-active\");\r\n\t\t\t\t}else{\r\n\t\t\t\t\tstar.classList.replace(\"tabulator-star-inactive\", \"tabulator-star-active\");\r\n\t\t\t\t}\r\n\r\n\t\t\t\tstar.innerHTML = '';\r\n\t\t\t}else{\r\n\t\t\t\tif(self.table.browser == \"ie\"){\r\n\t\t\t\t\tstar.setAttribute(\"class\", \"tabulator-star-inactive\");\r\n\t\t\t\t}else{\r\n\t\t\t\t\tstar.classList.replace(\"tabulator-star-active\", \"tabulator-star-inactive\");\r\n\t\t\t\t}\r\n\r\n\t\t\t\tstar.innerHTML = '';\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t//build stars\r\n\tfunction buildStar(i){\r\n\r\n\t\tvar starHolder = document.createElement(\"span\");\r\n\t\tvar nextStar = star.cloneNode(true);\r\n\r\n\t\tstars.push(nextStar);\r\n\r\n\t\tstarHolder.addEventListener(\"mouseenter\", function(e){\r\n\t\t\te.stopPropagation();\r\n\t\t\te.stopImmediatePropagation();\r\n\t\t\tstarChange(i);\r\n\t\t});\r\n\r\n\t\tstarHolder.addEventListener(\"mousemove\", function(e){\r\n\t\t\te.stopPropagation();\r\n\t\t\te.stopImmediatePropagation();\r\n\t\t});\r\n\r\n\t\tstarHolder.addEventListener(\"click\", function(e){\r\n\t\t\te.stopPropagation();\r\n\t\t\te.stopImmediatePropagation();\r\n\t\t\tsuccess(i);\r\n\t\t\telement.blur();\r\n\t\t});\r\n\r\n\t\tstarHolder.appendChild(nextStar);\r\n\t\tstarsHolder.appendChild(starHolder);\r\n\r\n\t}\r\n\r\n\t//handle keyboard navigation value change\r\n\tfunction changeValue(val){\r\n\t\tvalue = val;\r\n\t\tstarChange(val);\r\n\t}\r\n\r\n\t//style cell\r\n\telement.style.whiteSpace = \"nowrap\";\r\n\telement.style.overflow = \"hidden\";\r\n\telement.style.textOverflow = \"ellipsis\";\r\n\r\n\t//style holding element\r\n\tstarsHolder.style.verticalAlign = \"middle\";\r\n\tstarsHolder.style.display = \"inline-block\";\r\n\tstarsHolder.style.padding = \"4px\";\r\n\r\n\t//style star\r\n\tstar.setAttribute(\"width\", size);\r\n\tstar.setAttribute(\"height\", size);\r\n\tstar.setAttribute(\"viewBox\", \"0 0 512 512\");\r\n\tstar.setAttribute(\"xml:space\", \"preserve\");\r\n\tstar.style.padding = \"0 1px\";\r\n\r\n\tif(editorParams.elementAttributes && typeof editorParams.elementAttributes == \"object\"){\r\n\t\tfor (let key in editorParams.elementAttributes){\r\n\t\t\tif(key.charAt(0) == \"+\"){\r\n\t\t\t\tkey = key.slice(1);\r\n\t\t\t\tstarsHolder.setAttribute(key, starsHolder.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\r\n\t\t\t}else{\r\n\t\t\t\tstarsHolder.setAttribute(key, editorParams.elementAttributes[key]);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//create correct number of stars\r\n\tfor(var i=1;i<= maxStars;i++){\r\n\t\tbuildStar(i);\r\n\t}\r\n\r\n\t//ensure value does not exceed number of stars\r\n\tvalue = Math.min(parseInt(value), maxStars);\r\n\r\n\t// set initial styling of stars\r\n\tstarChange(value);\r\n\r\n\tstarsHolder.addEventListener(\"mousemove\", function(e){\r\n\t\tstarChange(0);\r\n\t});\r\n\r\n\tstarsHolder.addEventListener(\"click\", function(e){\r\n\t\tsuccess(0);\r\n\t});\r\n\r\n\telement.addEventListener(\"blur\", function(e){\r\n\t\tcancel();\r\n\t});\r\n\r\n\t//allow key based navigation\r\n\telement.addEventListener(\"keydown\", function(e){\r\n\t\tswitch(e.keyCode){\r\n\t\t\tcase 39: //right arrow\r\n\t\t\tchangeValue(value + 1);\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 37: //left arrow\r\n\t\t\tchangeValue(value - 1);\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 13: //enter\r\n\t\t\tsuccess(value);\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 27: //escape\r\n\t\t\tcancel();\r\n\t\t\tbreak;\r\n\t\t}\r\n\t});\r\n\r\n\treturn starsHolder;\r\n};","//draggable progress bar\r\nexport default function(cell, onRendered, success, cancel, editorParams){\r\n\tvar element = cell.getElement(),\r\n\tmax = typeof editorParams.max === \"undefined\" ? ( element.getElementsByTagName(\"div\")[0].getAttribute(\"max\") || 100) : editorParams.max,\r\n\tmin = typeof editorParams.min === \"undefined\" ? ( element.getElementsByTagName(\"div\")[0].getAttribute(\"min\") || 0) : editorParams.min,\r\n\tpercent = (max - min) / 100,\r\n\tvalue = cell.getValue() || 0,\r\n\thandle = document.createElement(\"div\"),\r\n\tbar = document.createElement(\"div\"),\r\n\tmouseDrag, mouseDragWidth;\r\n\r\n\t//set new value\r\n\tfunction updateValue(){\r\n\t\tvar style = window.getComputedStyle(element, null);\r\n\r\n\t\tvar calcVal = (percent * Math.round(bar.offsetWidth / ((element.clientWidth - parseInt(style.getPropertyValue(\"padding-left\")) - parseInt(style.getPropertyValue(\"padding-right\")))/100))) + min;\r\n\t\tsuccess(calcVal);\r\n\t\telement.setAttribute(\"aria-valuenow\", calcVal);\r\n\t\telement.setAttribute(\"aria-label\", value);\r\n\t}\r\n\r\n\t//style handle\r\n\thandle.style.position = \"absolute\";\r\n\thandle.style.right = \"0\";\r\n\thandle.style.top = \"0\";\r\n\thandle.style.bottom = \"0\";\r\n\thandle.style.width = \"5px\";\r\n\thandle.classList.add(\"tabulator-progress-handle\");\r\n\r\n\t//style bar\r\n\tbar.style.display = \"inline-block\";\r\n\tbar.style.position = \"relative\";\r\n\t// bar.style.top = \"8px\";\r\n\t// bar.style.bottom = \"8px\";\r\n\t// bar.style.left = \"4px\";\r\n\t// bar.style.marginRight = \"4px\";\r\n\tbar.style.height = \"100%\";\r\n\tbar.style.backgroundColor = \"#488CE9\";\r\n\tbar.style.maxWidth = \"100%\";\r\n\tbar.style.minWidth = \"0%\";\r\n\r\n\tif(editorParams.elementAttributes && typeof editorParams.elementAttributes == \"object\"){\r\n\t\tfor (let key in editorParams.elementAttributes){\r\n\t\t\tif(key.charAt(0) == \"+\"){\r\n\t\t\t\tkey = key.slice(1);\r\n\t\t\t\tbar.setAttribute(key, bar.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\r\n\t\t\t}else{\r\n\t\t\t\tbar.setAttribute(key, editorParams.elementAttributes[key]);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//style cell\r\n\telement.style.padding = \"4px 4px\";\r\n\r\n\t//make sure value is in range\r\n\tvalue = Math.min(parseFloat(value), max);\r\n\tvalue = Math.max(parseFloat(value), min);\r\n\r\n\t//workout percentage\r\n\tvalue = Math.round((value - min) / percent);\r\n\t// bar.style.right = value + \"%\";\r\n\tbar.style.width = value + \"%\";\r\n\r\n\telement.setAttribute(\"aria-valuemin\", min);\r\n\telement.setAttribute(\"aria-valuemax\", max);\r\n\r\n\tbar.appendChild(handle);\r\n\r\n\thandle.addEventListener(\"mousedown\", function(e){\r\n\t\tmouseDrag = e.screenX;\r\n\t\tmouseDragWidth = bar.offsetWidth;\r\n\t});\r\n\r\n\thandle.addEventListener(\"mouseover\", function(){\r\n\t\thandle.style.cursor = \"ew-resize\";\r\n\t});\r\n\r\n\telement.addEventListener(\"mousemove\", function(e){\r\n\t\tif(mouseDrag){\r\n\t\t\tbar.style.width = (mouseDragWidth + e.screenX - mouseDrag) + \"px\";\r\n\t\t}\r\n\t});\r\n\r\n\telement.addEventListener(\"mouseup\", function(e){\r\n\t\tif(mouseDrag){\r\n\t\t\te.stopPropagation();\r\n\t\t\te.stopImmediatePropagation();\r\n\r\n\t\t\tmouseDrag = false;\r\n\t\t\tmouseDragWidth = false;\r\n\r\n\t\t\tupdateValue();\r\n\t\t}\r\n\t});\r\n\r\n\t//allow key based navigation\r\n\telement.addEventListener(\"keydown\", function(e){\r\n\t\tswitch(e.keyCode){\r\n\t\t\tcase 39: //right arrow\r\n\t\t\te.preventDefault();\r\n\t\t\tbar.style.width = (bar.clientWidth + element.clientWidth/100) + \"px\";\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 37: //left arrow\r\n\t\t\te.preventDefault();\r\n\t\t\tbar.style.width = (bar.clientWidth - element.clientWidth/100) + \"px\";\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 9: //tab\r\n\t\t\tcase 13: //enter\r\n\t\t\tupdateValue();\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 27: //escape\r\n\t\t\tcancel();\r\n\t\t\tbreak;\r\n\r\n\t\t}\r\n\t});\r\n\r\n\telement.addEventListener(\"blur\", function(){\r\n\t\tcancel();\r\n\t});\r\n\r\n\treturn bar;\r\n};","//checkbox\r\nexport default function(cell, onRendered, success, cancel, editorParams){\r\n\tvar value = cell.getValue(),\r\n\tinput = document.createElement(\"input\"),\r\n\ttristate = editorParams.tristate,\r\n\tindetermValue = typeof editorParams.indeterminateValue === \"undefined\" ? null : editorParams.indeterminateValue,\r\n\tindetermState = false;\r\n\r\n\tinput.setAttribute(\"type\", \"checkbox\");\r\n\tinput.style.marginTop = \"5px\";\r\n\tinput.style.boxSizing = \"border-box\";\r\n\r\n\tif(editorParams.elementAttributes && typeof editorParams.elementAttributes == \"object\"){\r\n\t\tfor (let key in editorParams.elementAttributes){\r\n\t\t\tif(key.charAt(0) == \"+\"){\r\n\t\t\t\tkey = key.slice(1);\r\n\t\t\t\tinput.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\r\n\t\t\t}else{\r\n\t\t\t\tinput.setAttribute(key, editorParams.elementAttributes[key]);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tinput.value = value;\r\n\r\n\tif(tristate && (typeof value === \"undefined\" || value === indetermValue || value === \"\")){\r\n\t\tindetermState = true;\r\n\t\tinput.indeterminate = true;\r\n\t}\r\n\r\n\tif(this.table.browser != \"firefox\"){ //prevent blur issue on mac firefox\r\n\t\tonRendered(function(){\r\n\t\t\tinput.focus({preventScroll: true});\r\n\t\t});\r\n\t}\r\n\r\n\tinput.checked = value === true || value === \"true\" || value === \"True\" || value === 1;\r\n\r\n\tonRendered(function(){\r\n\t\tinput.focus();\r\n\t});\r\n\r\n\tfunction setValue(blur){\r\n\t\tif(tristate){\r\n\t\t\tif(!blur){\r\n\t\t\t\tif(input.checked && !indetermState){\r\n\t\t\t\t\tinput.checked = false;\r\n\t\t\t\t\tinput.indeterminate = true;\r\n\t\t\t\t\tindetermState = true;\r\n\t\t\t\t\treturn indetermValue;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tindetermState = false;\r\n\t\t\t\t\treturn input.checked;\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tif(indetermState){\r\n\t\t\t\t\treturn indetermValue;\r\n\t\t\t\t}else{\r\n\t\t\t\t\treturn input.checked;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\treturn input.checked;\r\n\t\t}\r\n\t}\r\n\r\n\t//submit new value on blur\r\n\tinput.addEventListener(\"change\", function(e){\r\n\t\tsuccess(setValue());\r\n\t});\r\n\r\n\tinput.addEventListener(\"blur\", function(e){\r\n\t\tsuccess(setValue(true));\r\n\t});\r\n\r\n\t//submit new value on enter\r\n\tinput.addEventListener(\"keydown\", function(e){\r\n\t\tif(e.keyCode == 13){\r\n\t\t\tsuccess(setValue());\r\n\t\t}\r\n\t\tif(e.keyCode == 27){\r\n\t\t\tcancel();\r\n\t\t}\r\n\t});\r\n\r\n\treturn input;\r\n};","import Module from '../../core/Module.js';\r\n\r\nimport defaultEditors from './defaults/editors.js';\r\n\r\nclass Edit extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.currentCell = false; //hold currently editing cell\r\n\t\tthis.mouseClick = false; //hold mousedown state to prevent click binding being overriden by editor opening\r\n\t\tthis.recursionBlock = false; //prevent focus recursion\r\n\t\tthis.invalidEdit = false;\r\n\t\tthis.editedCells = [];\r\n\r\n\t\tthis.editors = Edit.editors;\r\n\r\n\t\tthis.registerColumnOption(\"editable\");\r\n\t\tthis.registerColumnOption(\"editor\");\r\n\t\tthis.registerColumnOption(\"editorParams\");\r\n\r\n\t\tthis.registerColumnOption(\"cellEditing\");\r\n\t\tthis.registerColumnOption(\"cellEdited\");\r\n\t\tthis.registerColumnOption(\"cellEditCancelled\");\r\n\r\n\t\tthis.registerTableFunction(\"getEditedCells\", this.getEditedCells.bind(this));\r\n\t\tthis.registerTableFunction(\"clearCellEdited\", this.clearCellEdited.bind(this));\r\n\t\tthis.registerTableFunction(\"navigatePrev\", this.navigatePrev.bind(this));\r\n\t\tthis.registerTableFunction(\"navigateNext\", this.navigateNext.bind(this));\r\n\t\tthis.registerTableFunction(\"navigateLeft\", this.navigateLeft.bind(this));\r\n\t\tthis.registerTableFunction(\"navigateRight\", this.navigateRight.bind(this));\r\n\t\tthis.registerTableFunction(\"navigateUp\", this.navigateUp.bind(this));\r\n\t\tthis.registerTableFunction(\"navigateDown\", this.navigateDown.bind(this));\r\n\r\n\t\tthis.registerComponentFunction(\"cell\", \"isEdited\", this.cellisEdited.bind(this));\r\n\t\tthis.registerComponentFunction(\"cell\", \"clearEdited\", this.clearEdited.bind(this));\r\n\t\tthis.registerComponentFunction(\"cell\", \"edit\", this.editCell.bind(this));\r\n\t\tthis.registerComponentFunction(\"cell\", \"cancelEdit\", this.cellCancelEdit.bind(this));\r\n\r\n\t\tthis.registerComponentFunction(\"cell\", \"navigatePrev\", this.navigatePrev.bind(this));\r\n\t\tthis.registerComponentFunction(\"cell\", \"navigateNext\", this.navigateNext.bind(this));\r\n\t\tthis.registerComponentFunction(\"cell\", \"navigateLeft\", this.navigateLeft.bind(this));\r\n\t\tthis.registerComponentFunction(\"cell\", \"navigateRight\", this.navigateRight.bind(this));\r\n\t\tthis.registerComponentFunction(\"cell\", \"navigateUp\", this.navigateUp.bind(this));\r\n\t\tthis.registerComponentFunction(\"cell\", \"navigateDown\", this.navigateDown.bind(this));\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tthis.subscribe(\"cell-init\", this.bindEditor.bind(this));\r\n\t\tthis.subscribe(\"cell-delete\", this.clearEdited.bind(this));\r\n\t\tthis.subscribe(\"column-layout\", this.initializeColumnCheck.bind(this));\r\n\t\tthis.subscribe(\"column-delete\", this.columnDeleteCheck.bind(this));\r\n\t\tthis.subscribe(\"row-deleting\", this.rowDeleteCheck.bind(this));\r\n\t\tthis.subscribe(\"data-refeshing\", this.cancelEdit.bind(this));\r\n\r\n\t\tthis.subscribe(\"keybinding-nav-prev\", this.navigatePrev.bind(this));\r\n\t\tthis.subscribe(\"keybinding-nav-next\", this.keybindingNavigateNext.bind(this));\r\n\t\tthis.subscribe(\"keybinding-nav-left\", this.navigateLeft.bind(this));\r\n\t\tthis.subscribe(\"keybinding-nav-right\", this.navigateRight.bind(this));\r\n\t\tthis.subscribe(\"keybinding-nav-up\", this.navigateUp.bind(this));\r\n\t\tthis.subscribe(\"keybinding-nav-down\", this.navigateDown.bind(this));\r\n\t}\r\n\r\n\r\n\t///////////////////////////////////\r\n\t////// Keybinding Functions ///////\r\n\t///////////////////////////////////\r\n\r\n\tkeybindingNavigateNext(e){\r\n\t\tvar cell = this.currentCell,\r\n\t\tnewRow = this.options(\"tabEndNewRow\");\r\n\r\n\t\tif(cell){\r\n\t\t\tif(!this.navigateNext(e)){\r\n\t\t\t\tif(newRow){\r\n\t\t\t\t\tcell.getElement().firstChild.blur();\r\n\r\n\t\t\t\t\tif(newRow === true){\r\n\t\t\t\t\t\tnewRow = this.table.addRow({})\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tif(typeof newRow == \"function\"){\r\n\t\t\t\t\t\t\tnewRow = this.table.addRow(newRow(cell.row.getComponent()))\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\tnewRow = this.table.addRow(Object.assign({}, newRow));\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tnewRow.then(() => {\r\n\t\t\t\t\t\tsetTimeout(() => {\r\n\t\t\t\t\t\t\tnav.next();\r\n\t\t\t\t\t\t})\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t///////////////////////////////////\r\n\t///////// Cell Functions //////////\r\n\t///////////////////////////////////\r\n\r\n\tcellisEdited(cell){\r\n\t\treturn !! cell.modules.edit && cell.modules.edit.edited;\r\n\t}\r\n\r\n\tcellCancelEdit(cell){\r\n\t\tif(cell === this.currentCell){\r\n\t\t\tthis.table.modules.edit.cancelEdit();\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Cancel Editor Error - This cell is not currently being edited \");\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t///////////////////////////////////\r\n\t///////// Table Functions /////////\r\n\t///////////////////////////////////\r\n\tclearCellEdited(cells){\r\n\t\tif(!cells){\r\n\t\t\tcells = this.modules.edit.getEditedCells();\r\n\t\t}\r\n\r\n\t\tif(!Array.isArray(cells)){\r\n\t\t\tcells = [cells];\r\n\t\t}\r\n\r\n\t\tcells.forEach((cell) => {\r\n\t\t\tthis.modules.edit.clearEdited(cell._getSelf());\r\n\t\t});\r\n\t}\r\n\r\n\tnavigatePrev(e){\r\n\t\tvar cell = this.currentCell,\r\n\t\tnextCell, prevRow;\r\n\r\n\t\tif(cell){\r\n\r\n\t\t\tif(e){\r\n\t\t\t\te.preventDefault();\r\n\t\t\t}\r\n\r\n\t\t\tnextCell = this.navigateLeft();\r\n\r\n\t\t\tif(nextCell){\r\n\t\t\t\treturn true;\r\n\t\t\t}else{\r\n\t\t\t\tprevRow = this.table.rowManager.prevDisplayRow(cell.row, true);\r\n\r\n\t\t\t\tif(prevRow){\r\n\t\t\t\t\tnextCell = this.findNextEditableCell(prevRow, prevRow.cells.length);\r\n\r\n\t\t\t\t\tif(nextCell){\r\n\t\t\t\t\t\tnextCell.edit();\r\n\t\t\t\t\t\treturn true;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t}\r\n\r\n\tnavigateNext(e){\r\n\t\tvar cell = this.currentCell,\r\n\t\tnextCell, nextRow;\r\n\r\n\t\tif(cell){\r\n\r\n\t\t\tif(e){\r\n\t\t\t\te.preventDefault();\r\n\t\t\t}\r\n\r\n\t\t\tnextCell = this.navigateRight();\r\n\r\n\t\t\tif(nextCell){\r\n\t\t\t\treturn true;\r\n\t\t\t}else{\r\n\t\t\t\tnextRow = this.table.rowManager.nextDisplayRow(cell.row, true);\r\n\r\n\t\t\t\tif(nextRow){\r\n\t\t\t\t\tnextCell = this.findNextEditableCell(nextRow, -1);\r\n\r\n\t\t\t\t\tif(nextCell){\r\n\t\t\t\t\t\tnextCell.edit();\r\n\t\t\t\t\t\treturn true;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t}\r\n\r\n\tnavigateLeft(e){\r\n\t\tvar cell = this.currentCell,\r\n\t\tindex, nextCell;\r\n\r\n\t\tif(cell){\r\n\r\n\t\t\tif(e){\r\n\t\t\t\te.preventDefault();\r\n\t\t\t}\r\n\r\n\t\t\tindex = cell.getIndex();\r\n\t\t\tnextCell = this.findPrevEditableCell(cell.row, index);\r\n\r\n\t\t\tif(nextCell){\r\n\t\t\t\tnextCell.edit();\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t}\r\n\r\n\tnavigateRight(e){\r\n\t\tvar cell = this.currentCell,\r\n\t\tindex, nextCell;\r\n\r\n\t\tif(cell){\r\n\r\n\t\t\tif(e){\r\n\t\t\t\te.preventDefault();\r\n\t\t\t}\r\n\r\n\t\t\tindex = cell.getIndex();\r\n\t\t\tnextCell = this.findNextEditableCell(cell.row, index);\r\n\r\n\t\t\tif(nextCell){\r\n\t\t\t\tnextCell.edit();\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t}\r\n\r\n\tnavigateUp(e){\r\n\t\tvar cell = this.currentCell,\r\n\t\tindex, nextRow;\r\n\r\n\t\tif(cell){\r\n\r\n\t\t\tif(e){\r\n\t\t\t\te.preventDefault();\r\n\t\t\t}\r\n\r\n\t\t\tindex = cell.getIndex();\r\n\t\t\tnextRow = this.table.rowManager.prevDisplayRow(cell.row, true);\r\n\r\n\t\t\tif(nextRow){\r\n\t\t\t\tnextRow.cells[index].edit();\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t}\r\n\r\n\tnavigateDown(e){\r\n\t\tvar cell = this.currentCell,\r\n\t\tindex, nextRow;\r\n\r\n\t\tif(cell){\r\n\r\n\t\t\tif(e){\r\n\t\t\t\te.preventDefault();\r\n\t\t\t}\r\n\r\n\t\t\tindex = cell.getIndex();\r\n\t\t\tnextRow = this.table.rowManager.nextDisplayRow(cell.row, true);\r\n\r\n\t\t\tif(nextRow){\r\n\t\t\t\tnextRow.cells[index].edit();\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t}\r\n\r\n\tfindNextEditableCell(row, index){\r\n\t\tvar nextCell = false;\r\n\r\n\t\tif(index < row.cells.length-1){\r\n\t\t\tfor(var i = index+1; i < row.cells.length; i++){\r\n\t\t\t\tlet cell = row.cells[i];\r\n\r\n\t\t\t\tif(cell.column.modules.edit && Helpers.elVisible(cell.getElement())){\r\n\t\t\t\t\tlet allowEdit = true;\r\n\r\n\t\t\t\t\tif(typeof cell.column.modules.edit.check == \"function\"){\r\n\t\t\t\t\t\tallowEdit = cell.column.modules.edit.check(cell.getComponent());\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif(allowEdit){\r\n\t\t\t\t\t\tnextCell = cell;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn nextCell;\r\n\t}\r\n\r\n\tfindPrevEditableCell(row, index){\r\n\t\tvar prevCell = false;\r\n\r\n\t\tif(index > 0){\r\n\t\t\tfor(var i = index-1; i >= 0; i--){\r\n\t\t\t\tlet cell = row.cells[i],\r\n\t\t\t\tallowEdit = true;\r\n\r\n\t\t\t\tif(cell.column.modules.edit && Helpers.elVisible(cell.getElement())){\r\n\t\t\t\t\tif(typeof cell.column.modules.edit.check == \"function\"){\r\n\t\t\t\t\t\tallowEdit = cell.column.modules.edit.check(cell.getComponent());\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif(allowEdit){\r\n\t\t\t\t\t\tprevCell = cell;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn prevCell;\r\n\t}\r\n\r\n\t///////////////////////////////////\r\n\t///////// Internal Logic //////////\r\n\t///////////////////////////////////\r\n\r\n\tinitializeColumnCheck(column){\r\n\t\tif(typeof column.definition.editor !== \"undefined\"){\r\n\t\t\tthis.initializeColumn(column);\r\n\t\t}\r\n\t}\r\n\r\n\tcolumnDeleteCheck(column){\r\n\t\tif(this.currentCell && this.currentCell.column === column){\r\n\t\t\tthis.cancelEdit();\r\n\t\t}\r\n\t}\r\n\r\n\trowDeleteCheck(row){\r\n\t\tif(this.currentCell && this.currentCell.row === row){\r\n\t\t\tthis.cancelEdit();\r\n\t\t}\r\n\t}\r\n\r\n\t//initialize column editor\r\n\tinitializeColumn(column){\r\n\t\tvar self = this,\r\n\t\tconfig = {\r\n\t\t\teditor:false,\r\n\t\t\tblocked:false,\r\n\t\t\tcheck:column.definition.editable,\r\n\t\t\tparams:column.definition.editorParams || {}\r\n\t\t};\r\n\r\n\t\t//set column editor\r\n\t\tswitch(typeof column.definition.editor){\r\n\t\t\tcase \"string\":\r\n\t\t\tif(this.editors[column.definition.editor]){\r\n\t\t\t\tconfig.editor = this.editors[column.definition.editor];\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Editor Error - No such editor found: \", column.definition.editor);\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"function\":\r\n\t\t\tconfig.editor = column.definition.editor;\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"boolean\":\r\n\t\t\tif(column.definition.editor === true){\r\n\t\t\t\tif(typeof column.definition.formatter !== \"function\"){\r\n\t\t\t\t\tif(this.editors[column.definition.formatter]){\r\n\t\t\t\t\t\tconfig.editor = this.editors[column.definition.formatter];\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tconfig.editor = this.editors[\"input\"];\r\n\t\t\t\t\t}\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.warn(\"Editor Error - Cannot auto lookup editor for a custom formatter: \", column.definition.formatter);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\tif(config.editor){\r\n\t\t\tcolumn.modules.edit = config;\r\n\t\t}\r\n\t}\r\n\r\n\tgetCurrentCell(){\r\n\t\treturn this.currentCell ? this.currentCell.getComponent() : false;\r\n\t}\r\n\r\n\tclearEditor(cancel){\r\n\t\tvar cell = this.currentCell,\r\n\t\tcellEl;\r\n\r\n\t\tthis.invalidEdit = false;\r\n\r\n\t\tif(cell){\r\n\t\t\tthis.currentCell = false;\r\n\r\n\t\t\tcellEl = cell.getElement();\r\n\r\n\t\t\tif(cancel){\r\n\t\t\t\tcell.validate();\r\n\t\t\t}else{\r\n\t\t\t\tcellEl.classList.remove(\"tabulator-validation-fail\");\r\n\t\t\t}\r\n\r\n\t\t\tcellEl.classList.remove(\"tabulator-editing\");\r\n\t\t\twhile(cellEl.firstChild) cellEl.removeChild(cellEl.firstChild);\r\n\r\n\t\t\tcell.row.getElement().classList.remove(\"tabulator-row-editing\");\r\n\t\t}\r\n\t}\r\n\r\n\tcancelEdit(){\r\n\t\tif(this.currentCell){\r\n\t\t\tvar cell = this.currentCell;\r\n\t\t\tvar component = this.currentCell.getComponent();\r\n\r\n\t\t\tthis.clearEditor(true);\r\n\t\t\tcell.setValueActual(cell.getValue());\r\n\t\t\tcell.cellRendered();\r\n\r\n\t\t\tif(cell.column.definition.editor == \"textarea\" || cell.column.definition.variableHeight){\r\n\t\t\t\tcell.row.normalizeHeight(true);\r\n\t\t\t}\r\n\r\n\t\t\tif(cell.column.definition.cellEditCancelled){\r\n\t\t\t\tcell.column.definition.cellEditCancelled.call(this.table, component);\r\n\t\t\t}\r\n\r\n\t\t\tthis.dispatchExternal(\"cellEditCancelled\", component);\r\n\t\t}\r\n\t}\r\n\r\n\t//return a formatted value for a cell\r\n\tbindEditor(cell){\r\n\t\tif(cell.column.modules.edit){\r\n\t\t\tvar self = this,\r\n\t\t\telement = cell.getElement(true);\r\n\r\n\t\t\telement.setAttribute(\"tabindex\", 0);\r\n\r\n\t\t\telement.addEventListener(\"click\", function(e){\r\n\t\t\t\tif(!element.classList.contains(\"tabulator-editing\")){\r\n\t\t\t\t\telement.focus({preventScroll: true});\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\telement.addEventListener(\"mousedown\", function(e){\r\n\t\t\t\tif (e.button === 2) {\r\n\t\t\t\t\te.preventDefault();\r\n\t\t\t\t}else{\r\n\t\t\t\t\tself.mouseClick = true;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\telement.addEventListener(\"focus\", function(e){\r\n\t\t\t\tif(!self.recursionBlock){\r\n\t\t\t\t\tself.edit(cell, e, false);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tfocusCellNoEvent(cell, block){\r\n\t\tthis.recursionBlock = true;\r\n\r\n\t\tif(!(block && this.table.browser === \"ie\")){\r\n\t\t\tcell.getElement().focus({preventScroll: true});\r\n\t\t}\r\n\r\n\t\tthis.recursionBlock = false;\r\n\t}\r\n\r\n\teditCell(cell, forceEdit){\r\n\t\tthis.focusCellNoEvent(cell);\r\n\t\tthis.edit(cell, false, forceEdit);\r\n\t}\r\n\r\n\tfocusScrollAdjust(cell){\r\n\t\tif(this.table.rowManager.getRenderMode() == \"virtual\"){\r\n\t\t\tvar topEdge = this.table.rowManager.element.scrollTop,\r\n\t\t\tbottomEdge = this.table.rowManager.element.clientHeight + this.table.rowManager.element.scrollTop,\r\n\t\t\trowEl = cell.row.getElement(),\r\n\t\t\toffset = rowEl.offsetTop;\r\n\r\n\t\t\tif(rowEl.offsetTop < topEdge){\r\n\t\t\t\tthis.table.rowManager.element.scrollTop -= (topEdge - rowEl.offsetTop);\r\n\t\t\t}else{\r\n\t\t\t\tif(rowEl.offsetTop + rowEl.offsetHeight > bottomEdge){\r\n\t\t\t\t\tthis.table.rowManager.element.scrollTop += (rowEl.offsetTop + rowEl.offsetHeight - bottomEdge);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tvar leftEdge = this.table.rowManager.element.scrollLeft,\r\n\t\t\trightEdge = this.table.rowManager.element.clientWidth + this.table.rowManager.element.scrollLeft,\r\n\t\t\tcellEl = cell.getElement(),\r\n\t\t\toffset = cellEl.offsetLeft;\r\n\r\n\t\t\tif(this.table.modExists(\"frozenColumns\")){\r\n\t\t\t\tleftEdge += parseInt(this.table.modules.frozenColumns.leftMargin);\r\n\t\t\t\trightEdge -= parseInt(this.table.modules.frozenColumns.rightMargin);\r\n\t\t\t}\r\n\r\n\t\t\tif(this.table.options.renderHorizontal === \"virtual\"){\r\n\t\t\t\tleftEdge -= parseInt(this.table.columnManager.renderer.vDomPadLeft);\r\n\t\t\t\trightEdge -= parseInt(this.table.columnManager.renderer.vDomPadLeft);\r\n\t\t\t}\r\n\r\n\t\t\tif(cellEl.offsetLeft < leftEdge){\r\n\r\n\t\t\t\tthis.table.rowManager.element.scrollLeft -= (leftEdge - cellEl.offsetLeft);\r\n\t\t\t}else{\r\n\t\t\t\tif(cellEl.offsetLeft + cellEl.offsetWidth > rightEdge){\r\n\t\t\t\t\tthis.table.rowManager.element.scrollLeft += (cellEl.offsetLeft + cellEl.offsetWidth - rightEdge);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tedit(cell, e, forceEdit){\r\n\t\tvar self = this,\r\n\t\tallowEdit = true,\r\n\t\trendered = function(){},\r\n\t\telement = cell.getElement(),\r\n\t\tcellEditor, component, params;\r\n\r\n\t\t//prevent editing if another cell is refusing to leave focus (eg. validation fail)\r\n\t\tif(this.currentCell){\r\n\t\t\tif(!this.invalidEdit){\r\n\t\t\t\tthis.cancelEdit();\r\n\t\t\t}\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t//handle successfull value change\r\n\t\tfunction success(value){\r\n\t\t\tif(self.currentCell === cell){\r\n\t\t\t\tvar valid = true;\r\n\r\n\t\t\t\tif(cell.column.modules.validate && self.table.modExists(\"validate\") && self.table.options.validationMode != \"manual\"){\r\n\t\t\t\t\tvalid = self.table.modules.validate.validate(cell.column.modules.validate, cell, value);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(valid === true || self.table.options.validationMode === \"highlight\"){\r\n\t\t\t\t\tself.clearEditor();\r\n\r\n\r\n\t\t\t\t\tif(!cell.modules.edit){\r\n\t\t\t\t\t\tcell.modules.edit = {};\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tcell.modules.edit.edited = true;\r\n\r\n\t\t\t\t\tif(self.editedCells.indexOf(cell) == -1){\r\n\t\t\t\t\t\tself.editedCells.push(cell);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tcell.setValue(value, true);\r\n\r\n\t\t\t\t\tif(self.table.options.dataTree && self.table.modExists(\"dataTree\")){\r\n\t\t\t\t\t\tself.table.modules.dataTree.checkForRestyle(cell);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif(valid !== true){\r\n\t\t\t\t\t\telement.classList.add(\"tabulator-validation-fail\");\r\n\t\t\t\t\t\tself.table.externalEvents.dispatch(\"validationFailed\", cell.getComponent(), value, valid);\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tself.invalidEdit = true;\r\n\t\t\t\t\telement.classList.add(\"tabulator-validation-fail\");\r\n\t\t\t\t\tself.focusCellNoEvent(cell, true);\r\n\t\t\t\t\trendered();\r\n\t\t\t\t\tself.table.externalEvents.dispatch(\"validationFailed\", cell.getComponent(), value, valid);\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\t// console.warn(\"Edit Success Error - cannot call success on a cell that is no longer being edited\");\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//handle aborted edit\r\n\t\tfunction cancel(){\r\n\t\t\tif(self.currentCell === cell){\r\n\t\t\t\tself.cancelEdit();\r\n\r\n\t\t\t\tif(self.table.options.dataTree && self.table.modExists(\"dataTree\")){\r\n\t\t\t\t\tself.table.modules.dataTree.checkForRestyle(cell);\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\t// console.warn(\"Edit Success Error - cannot call cancel on a cell that is no longer being edited\");\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction onRendered(callback){\r\n\t\t\trendered = callback;\r\n\t\t}\r\n\r\n\t\tif(!cell.column.modules.edit.blocked){\r\n\t\t\tif(e){\r\n\t\t\t\te.stopPropagation();\r\n\t\t\t}\r\n\r\n\t\t\tswitch(typeof cell.column.modules.edit.check){\r\n\t\t\t\tcase \"function\":\r\n\t\t\t\tallowEdit = cell.column.modules.edit.check(cell.getComponent());\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"boolean\":\r\n\t\t\t\tallowEdit = cell.column.modules.edit.check;\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\r\n\t\t\tif(allowEdit || forceEdit){\r\n\r\n\t\t\t\tself.cancelEdit();\r\n\r\n\t\t\t\tself.currentCell = cell;\r\n\r\n\t\t\t\tthis.focusScrollAdjust(cell);\r\n\r\n\t\t\t\tcomponent = cell.getComponent();\r\n\r\n\t\t\t\tif(this.mouseClick){\r\n\t\t\t\t\tthis.mouseClick = false;\r\n\r\n\t\t\t\t\tif(cell.column.definition.cellClick){\r\n\t\t\t\t\t\tcell.column.definition.cellClick.call(this.table, e, component);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(cell.column.definition.cellEditing){\r\n\t\t\t\t\tcell.column.definition.cellEditing.call(this.table, component);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.dispatchExternal(\"cellEditing\", component);\r\n\r\n\t\t\t\tparams = typeof cell.column.modules.edit.params === \"function\" ? cell.column.modules.edit.params(component) : cell.column.modules.edit.params;\r\n\r\n\t\t\t\tcellEditor = cell.column.modules.edit.editor.call(self, component, onRendered, success, cancel, params);\r\n\r\n\t\t\t\t//if editor returned, add to DOM, if false, abort edit\r\n\t\t\t\tif(cellEditor !== false){\r\n\r\n\t\t\t\t\tif(cellEditor instanceof Node){\r\n\t\t\t\t\t\telement.classList.add(\"tabulator-editing\");\r\n\t\t\t\t\t\tcell.row.getElement().classList.add(\"tabulator-row-editing\");\r\n\t\t\t\t\t\twhile(element.firstChild) element.removeChild(element.firstChild);\r\n\t\t\t\t\t\telement.appendChild(cellEditor);\r\n\r\n\t\t\t\t\t\t//trigger onRendered Callback\r\n\t\t\t\t\t\trendered();\r\n\r\n\t\t\t\t\t\t//prevent editing from triggering rowClick event\r\n\t\t\t\t\t\tvar children = element.children;\r\n\r\n\t\t\t\t\t\tfor (var i = 0; i < children.length; i++) {\r\n\t\t\t\t\t\t\tchildren[i].addEventListener(\"click\", function(e){\r\n\t\t\t\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tconsole.warn(\"Edit Error - Editor should return an instance of Node, the editor returned:\", cellEditor);\r\n\t\t\t\t\t\telement.blur();\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}else{\r\n\t\t\t\t\telement.blur();\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn true;\r\n\t\t\t}else{\r\n\t\t\t\tthis.mouseClick = false;\r\n\t\t\t\telement.blur();\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tthis.mouseClick = false;\r\n\t\t\telement.blur();\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\tgetEditedCells(){\r\n\t\tvar output = [];\r\n\r\n\t\tthis.editedCells.forEach((cell) => {\r\n\t\t\toutput.push(cell.getComponent());\r\n\t\t});\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tclearEdited(cell){\r\n\t\tvar editIndex;\r\n\r\n\t\tif(cell.modules.edit && cell.modules.edit.edited){\r\n\t\t\tcell.modules.edit.edited = false;\r\n\r\n\t\t\tif(cell.modules.validate){\r\n\t\t\t\tcell.modules.validate.invalid = false;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\teditIndex = this.editedCells.indexOf(cell);\r\n\r\n\t\tif(editIndex > -1){\r\n\t\t\tthis.editedCells.splice(editIndex, 1);\r\n\t\t}\r\n\t}\r\n}\r\n\r\nEdit.moduleName = \"edit\";\r\n\r\n//load defaults\r\nEdit.editors = defaultEditors;\r\n\r\n\r\nexport default Edit;","class ExportRow{\r\n\tconstructor(type, columns, component, indent){\r\n\t\tthis.type = type;\r\n\t\tthis.columns = columns;\r\n\t\tthis.component = component || false;\r\n\t\tthis.indent = indent || 0;\r\n\t}\r\n}\r\n\r\nexport default ExportRow;","class ExportColumn{\r\n\tconstructor(value, component, width, height, depth){\r\n\t\tthis.value = value;\r\n\t\tthis.component = component || false;\r\n\t\tthis.width = width;\r\n\t\tthis.height = height;\r\n\t\tthis.depth = depth;\r\n\t}\r\n}\r\n\r\nexport default ExportColumn;","import Module from '../../core/Module.js';\r\n\r\nimport ExportRow from './ExportRow.js';\r\nimport ExportColumn from './ExportColumn.js';\r\n\r\nclass Export extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.config = {};\r\n\t\tthis.cloneTableStyle = true;\r\n\t\tthis.colVisProp = \"\";\r\n\r\n\t\tthis.registerTableOption(\"htmlOutputConfig\", false); //html outypu config\r\n\r\n\t\tthis.registerColumnOption(\"htmlOutput\");\r\n\t\tthis.registerColumnOption(\"titleHtmlOutput\");\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tthis.registerTableFunction(\"getHtml\", this.getHtml.bind(this));\r\n\t}\r\n\r\n\t///////////////////////////////////\r\n\t///////// Table Functions /////////\r\n\t///////////////////////////////////\r\n\r\n\r\n\t///////////////////////////////////\r\n\t///////// Internal Logic //////////\r\n\t///////////////////////////////////\r\n\r\n\tgenerateExportList(config, style, range, colVisProp){\r\n\t\tthis.cloneTableStyle = style;\r\n\t\tthis.config = config || {};\r\n\t\tthis.colVisProp = colVisProp;\r\n\r\n\t\tvar headers = this.config.columnHeaders !== false ? this.headersToExportRows(this.generateColumnGroupHeaders()) : [];\r\n\t\tvar body = this.bodyToExportRows(this.rowLookup(range));\r\n\r\n\t\treturn headers.concat(body);\r\n\t}\r\n\r\n\tgenereateTable(config, style, range, colVisProp){\r\n\t\tvar list = this.generateExportList(config, style, range, colVisProp);\r\n\r\n\t\treturn this.genereateTableElement(list);\r\n\t}\r\n\r\n\trowLookup(range){\r\n\t\tvar rows = [];\r\n\r\n\t\tif(typeof range == \"function\"){\r\n\t\t\trange.call(this.table).forEach((row) =>{\r\n\t\t\t\trow = this.table.rowManager.findRow(row);\r\n\r\n\t\t\t\tif(row){\r\n\t\t\t\t\trows.push(row);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tswitch(range){\r\n\t\t\t\tcase true:\r\n\t\t\t\tcase \"visible\":\r\n\t\t\t\trows = this.table.rowManager.getVisibleRows(true);\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"all\":\r\n\t\t\t\trows = this.table.rowManager.rows;\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"selected\":\r\n\t\t\t\trows = this.table.modules.selectRow.selectedRows;\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"active\":\r\n\t\t\t\tdefault:\r\n\t\t\t\tif(this.table.options.pagination){\r\n\t\t\t\t\trows = this.table.rowManager.getDisplayRows(this.table.rowManager.displayRows.length - 2);\r\n\t\t\t\t}else{\r\n\t\t\t\t\trows = this.table.rowManager.getDisplayRows();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn Object.assign([], rows);\r\n\t}\r\n\r\n\tgenerateColumnGroupHeaders(){\r\n\t\tvar output = [];\r\n\r\n\t\tvar columns = this.config.columnGroups !== false ? this.table.columnManager.columns : this.table.columnManager.columnsByIndex;\r\n\r\n\t\tcolumns.forEach((column) => {\r\n\t\t\tvar colData = this.processColumnGroup(column);\r\n\r\n\t\t\tif(colData){\r\n\t\t\t\toutput.push(colData);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tprocessColumnGroup(column){\r\n\t\tvar subGroups = column.columns,\r\n\t\tmaxDepth = 0,\r\n\t\ttitle = column.definition[\"title\" + (this.colVisProp.charAt(0).toUpperCase() + this.colVisProp.slice(1))] || column.definition.title;\r\n\r\n\t\tvar groupData = {\r\n\t\t\ttitle:title,\r\n\t\t\tcolumn:column,\r\n\t\t\tdepth:1,\r\n\t\t};\r\n\r\n\t\tif(subGroups.length){\r\n\t\t\tgroupData.subGroups = [];\r\n\t\t\tgroupData.width = 0;\r\n\r\n\t\t\tsubGroups.forEach((subGroup) => {\r\n\t\t\t\tvar subGroupData = this.processColumnGroup(subGroup);\r\n\r\n\t\t\t\tif(subGroupData){\r\n\t\t\t\t\tgroupData.width += subGroupData.width;\r\n\t\t\t\t\tgroupData.subGroups.push(subGroupData);\r\n\r\n\t\t\t\t\tif(subGroupData.depth > maxDepth){\r\n\t\t\t\t\t\tmaxDepth = subGroupData.depth;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tgroupData.depth += maxDepth;\r\n\r\n\t\t\tif(!groupData.width){\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tif(this.columnVisCheck(column)){\r\n\t\t\t\tgroupData.width = 1;\r\n\t\t\t}else{\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn groupData;\r\n\t}\r\n\r\n\tcolumnVisCheck(column){\r\n\t\treturn column.definition[this.colVisProp] !== false && (column.visible || (!column.visible && column.definition[this.colVisProp]));\r\n\t}\r\n\r\n\theadersToExportRows(columns){\r\n\t\tvar headers = [],\r\n\t\theaderDepth = 0,\r\n\t\texportRows = [];\r\n\r\n\t\tfunction parseColumnGroup(column, level){\r\n\r\n\t\t\tvar depth = headerDepth - level;\r\n\r\n\t\t\tif(typeof headers[level] === \"undefined\"){\r\n\t\t\t\theaders[level] = [];\r\n\t\t\t}\r\n\r\n\t\t\tcolumn.height = column.subGroups ? 1 : (depth - column.depth) + 1;\r\n\r\n\t\t\theaders[level].push(column);\r\n\r\n\t\t\tif(column.height > 1){\r\n\t\t\t\tfor(let i = 1; i < column.height; i ++){\r\n\r\n\t\t\t\t\tif(typeof headers[level + i] === \"undefined\"){\r\n\t\t\t\t\t\theaders[level + i] = [];\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\theaders[level + i].push(false);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif(column.width > 1){\r\n\t\t\t\tfor(let i = 1; i < column.width; i ++){\r\n\t\t\t\t\theaders[level].push(false);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif(column.subGroups){\r\n\t\t\t\tcolumn.subGroups.forEach(function(subGroup){\r\n\t\t\t\t\tparseColumnGroup(subGroup, level+1);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//calculate maximum header debth\r\n\t\tcolumns.forEach(function(column){\r\n\t\t\tif(column.depth > headerDepth){\r\n\t\t\t\theaderDepth = column.depth;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tcolumns.forEach(function(column){\r\n\t\t\tparseColumnGroup(column,0);\r\n\t\t});\r\n\r\n\t\theaders.forEach((header) => {\r\n\t\t\tvar columns = [];\r\n\r\n\t\t\theader.forEach((col) => {\r\n\t\t\t\tif(col){\r\n\t\t\t\t\tcolumns.push(new ExportColumn(col.title, col.column.getComponent(), col.width, col.height, col.depth));\r\n\t\t\t\t}else{\r\n\t\t\t\t\tcolumns.push(null);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\texportRows.push(new ExportRow(\"header\", columns));\r\n\t\t});\r\n\r\n\t\treturn exportRows;\r\n\t}\r\n\r\n\tbodyToExportRows(rows){\r\n\r\n\t\tvar columns = [];\r\n\t\tvar exportRows = [];\r\n\r\n\t\tthis.table.columnManager.columnsByIndex.forEach((column) => {\r\n\t\t\tif (this.columnVisCheck(column)) {\r\n\t\t\t\tcolumns.push(column.getComponent());\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tif(this.config.columnCalcs !== false && this.table.modExists(\"columnCalcs\")){\r\n\t\t\tif(this.table.modules.columnCalcs.topInitialized){\r\n\t\t\t\trows.unshift(this.table.modules.columnCalcs.topRow);\r\n\t\t\t}\r\n\r\n\t\t\tif(this.table.modules.columnCalcs.botInitialized){\r\n\t\t\t\trows.push(this.table.modules.columnCalcs.botRow);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\trows = rows.filter((row) => {\r\n\t\t\tswitch(row.type){\r\n\t\t\t\tcase \"group\":\r\n\t\t\t\treturn this.config.rowGroups !== false;\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"calc\":\r\n\t\t\t\treturn this.config.columnCalcs !== false;\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"row\":\r\n\t\t\t\treturn !(this.table.options.dataTree && this.config.dataTree === false && row.modules.dataTree.parent);\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\r\n\t\t\treturn true;\r\n\t\t});\r\n\r\n\t\trows.forEach((row, i) => {\r\n\t\t\tvar rowData = row.getData(this.colVisProp);\r\n\t\t\tvar exportCols = [];\r\n\t\t\tvar indent = 0;\r\n\r\n\t\t\tswitch(row.type){\r\n\t\t\t\tcase \"group\":\r\n\t\t\t\tindent = row.level;\r\n\t\t\t\texportCols.push(new ExportColumn(row.key, row.getComponent(), columns.length, 1));\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"calc\" :\r\n\t\t\t\tcase \"row\" :\r\n\t\t\t\tcolumns.forEach((col) => {\r\n\t\t\t\t\texportCols.push(new ExportColumn(col._column.getFieldValue(rowData), col, 1, 1));\r\n\t\t\t\t});\r\n\r\n\t\t\t\tif(this.table.options.dataTree && this.config.dataTree !== false){\r\n\t\t\t\t\tindent = row.modules.dataTree.index;\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\r\n\t\t\texportRows.push(new ExportRow(row.type, exportCols, row.getComponent(), indent));\r\n\t\t});\r\n\r\n\t\treturn exportRows;\r\n\t}\r\n\r\n\tgenereateTableElement(list){\r\n\t\tvar table = document.createElement(\"table\"),\r\n\t\theaderEl = document.createElement(\"thead\"),\r\n\t\tbodyEl = document.createElement(\"tbody\"),\r\n\t\tstyles = this.lookupTableStyles(),\r\n\t\trowFormatter = this.table.options[\"rowFormatter\" + (this.colVisProp.charAt(0).toUpperCase() + this.colVisProp.slice(1))],\r\n\t\tsetup = {};\r\n\r\n\t\tsetup.rowFormatter = rowFormatter !== null ? rowFormatter : this.table.options.rowFormatter;\r\n\r\n\t\tif(this.table.options.dataTree &&this.config.dataTree !== false && this.table.modExists(\"columnCalcs\")){\r\n\t\t\tsetup.treeElementField = this.table.modules.dataTree.elementField;\r\n\t\t}\r\n\r\n\t\t//assign group header formatter\r\n\t\tsetup.groupHeader = this.table.options[\"groupHeader\" + (this.colVisProp.charAt(0).toUpperCase() + this.colVisProp.slice(1))];\r\n\r\n\t\tif(setup.groupHeader && !Array.isArray(setup.groupHeader)){\r\n\t\t\tsetup.groupHeader = [setup.groupHeader];\r\n\t\t}\r\n\r\n\t\ttable.classList.add(\"tabulator-print-table\");\r\n\r\n\t\tthis.mapElementStyles(this.table.columnManager.getHeadersElement(), headerEl, [\"border-top\", \"border-left\", \"border-right\", \"border-bottom\", \"background-color\", \"color\", \"font-weight\", \"font-family\", \"font-size\"]);\r\n\r\n\r\n\t\tif(list.length > 1000){\r\n\t\t\tconsole.warn(\"It may take a long time to render an HTML table with more than 1000 rows\");\r\n\t\t}\r\n\r\n\t\tlist.forEach((row, i) => {\r\n\t\t\tswitch(row.type){\r\n\t\t\t\tcase \"header\":\r\n\t\t\t\theaderEl.appendChild(this.genereateHeaderElement(row, setup, styles));\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"group\":\r\n\t\t\t\tbodyEl.appendChild(this.genereateGroupElement(row, setup, styles));\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"calc\":\r\n\t\t\t\tbodyEl.appendChild(this.genereateCalcElement(row, setup, styles));\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"row\":\r\n\t\t\t\tlet rowEl = this.genereateRowElement(row, setup, styles);\r\n\t\t\t\tthis.mapElementStyles(((i % 2) && styles.evenRow) ? styles.evenRow : styles.oddRow, rowEl, [\"border-top\", \"border-left\", \"border-right\", \"border-bottom\", \"color\", \"font-weight\", \"font-family\", \"font-size\", \"background-color\"]);\r\n\t\t\t\tbodyEl.appendChild(rowEl);\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tif(headerEl.innerHTML){\r\n\t\t\ttable.appendChild(headerEl);\r\n\t\t}\r\n\r\n\t\ttable.appendChild(bodyEl);\r\n\r\n\r\n\t\tthis.mapElementStyles(this.table.element, table, [\"border-top\", \"border-left\", \"border-right\", \"border-bottom\"]);\r\n\t\treturn table;\r\n\t}\r\n\r\n\tlookupTableStyles(){\r\n\t\tvar styles = {};\r\n\r\n\t\t//lookup row styles\r\n\t\tif(this.cloneTableStyle && window.getComputedStyle){\r\n\t\t\tstyles.oddRow = this.table.element.querySelector(\".tabulator-row-odd:not(.tabulator-group):not(.tabulator-calcs)\");\r\n\t\t\tstyles.evenRow = this.table.element.querySelector(\".tabulator-row-even:not(.tabulator-group):not(.tabulator-calcs)\");\r\n\t\t\tstyles.calcRow = this.table.element.querySelector(\".tabulator-row.tabulator-calcs\");\r\n\t\t\tstyles.firstRow = this.table.element.querySelector(\".tabulator-row:not(.tabulator-group):not(.tabulator-calcs)\");\r\n\t\t\tstyles.firstGroup = this.table.element.getElementsByClassName(\"tabulator-group\")[0];\r\n\r\n\t\t\tif(styles.firstRow){\r\n\t\t\t\tstyles.styleCells = styles.firstRow.getElementsByClassName(\"tabulator-cell\");\r\n\t\t\t\tstyles.firstCell = styles.styleCells[0];\r\n\t\t\t\tstyles.lastCell = styles.styleCells[styles.styleCells.length - 1];\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn styles;\r\n\t}\r\n\r\n\tgenereateHeaderElement(row, setup, styles){\r\n\t\tvar rowEl = document.createElement(\"tr\");\r\n\r\n\t\trow.columns.forEach((column) => {\r\n\t\t\tif(column){\r\n\t\t\t\tvar cellEl = document.createElement(\"th\");\r\n\t\t\t\tvar classNames = column.component._column.definition.cssClass ? column.component._column.definition.cssClass.split(\" \") : [];\r\n\r\n\t\t\t\tcellEl.colSpan = column.width;\r\n\t\t\t\tcellEl.rowSpan = column.height;\r\n\r\n\t\t\t\tcellEl.innerHTML = column.value;\r\n\r\n\t\t\t\tif(this.cloneTableStyle){\r\n\t\t\t\t\tcellEl.style.boxSizing = \"border-box\";\r\n\t\t\t\t}\r\n\r\n\t\t\t\tclassNames.forEach(function(className) {\r\n\t\t\t\t\tcellEl.classList.add(className);\r\n\t\t\t\t});\r\n\r\n\t\t\t\tthis.mapElementStyles(column.component.getElement(), cellEl, [\"text-align\", \"border-top\", \"border-left\", \"border-right\", \"border-bottom\", \"background-color\", \"color\", \"font-weight\", \"font-family\", \"font-size\"]);\r\n\t\t\t\tthis.mapElementStyles(column.component._column.contentElement, cellEl, [\"padding-top\", \"padding-left\", \"padding-right\", \"padding-bottom\"]);\r\n\r\n\t\t\t\tif(column.component._column.visible){\r\n\t\t\t\t\tthis.mapElementStyles(column.component.getElement(), cellEl, [\"width\"]);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tif(column.component._column.definition.width){\r\n\t\t\t\t\t\tcellEl.style.width = column.component._column.definition.width + \"px\";\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(column.component._column.parent){\r\n\t\t\t\t\tthis.mapElementStyles(column.component._column.parent.groupElement, cellEl, [\"border-top\"]);\r\n\t\t\t\t}\r\n\r\n\t\t\t\trowEl.appendChild(cellEl);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn rowEl;\r\n\t}\r\n\r\n\tgenereateGroupElement(row, setup, styles){\r\n\r\n\t\tvar rowEl = document.createElement(\"tr\"),\r\n\t\tcellEl = document.createElement(\"td\"),\r\n\t\tgroup = row.columns[0];\r\n\r\n\t\trowEl.classList.add(\"tabulator-print-table-row\");\r\n\r\n\t\tif(setup.groupHeader && setup.groupHeader[row.indent]){\r\n\t\t\tgroup.value = setup.groupHeader[row.indent](group.value, row.component._group.getRowCount(), row.component._group.getData(), row.component);\r\n\t\t}else{\r\n\t\t\tif(setup.groupHeader === false){\r\n\t\t\t\tgroup.value = group.value;\r\n\t\t\t}else{\r\n\t\t\t\tgroup.value = row.component._group.generator(group.value, row.component._group.getRowCount(), row.component._group.getData(), row.component);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tcellEl.colSpan = group.width;\r\n\t\tcellEl.innerHTML = group.value;\r\n\r\n\t\trowEl.classList.add(\"tabulator-print-table-group\");\r\n\t\trowEl.classList.add(\"tabulator-group-level-\" + row.indent);\r\n\r\n\t\tif(group.component.isVisible()){\r\n\t\t\trowEl.classList.add(\"tabulator-group-visible\");\r\n\t\t}\r\n\r\n\t\tthis.mapElementStyles(styles.firstGroup, rowEl, [\"border-top\", \"border-left\", \"border-right\", \"border-bottom\", \"color\", \"font-weight\", \"font-family\", \"font-size\", \"background-color\"]);\r\n\t\tthis.mapElementStyles(styles.firstGroup, cellEl, [\"padding-top\", \"padding-left\", \"padding-right\", \"padding-bottom\"]);\r\n\r\n\t\trowEl.appendChild(cellEl);\r\n\r\n\t\treturn rowEl;\r\n\t}\r\n\r\n\tgenereateCalcElement(row, setup, styles){\r\n\t\tvar rowEl = this.genereateRowElement(row, setup, styles);\r\n\r\n\t\trowEl.classList.add(\"tabulator-print-table-calcs\");\r\n\t\tthis.mapElementStyles(styles.calcRow, rowEl, [\"border-top\", \"border-left\", \"border-right\", \"border-bottom\", \"color\", \"font-weight\", \"font-family\", \"font-size\", \"background-color\"]);\r\n\r\n\t\treturn rowEl;\r\n\t}\r\n\r\n\tgenereateRowElement(row, setup, styles){\r\n\t\tvar rowEl = document.createElement(\"tr\");\r\n\r\n\t\trowEl.classList.add(\"tabulator-print-table-row\");\r\n\r\n\t\trow.columns.forEach((col) => {\r\n\r\n\t\t\tif(col){\r\n\t\t\t\tvar cellEl = document.createElement(\"td\"),\r\n\t\t\t\tcolumn = col.component._column,\r\n\t\t\t\tvalue = col.value;\r\n\r\n\t\t\t\tvar cellWrapper = {\r\n\t\t\t\t\tmodules:{},\r\n\t\t\t\t\tgetValue:function(){\r\n\t\t\t\t\t\treturn value;\r\n\t\t\t\t\t},\r\n\t\t\t\t\tgetField:function(){\r\n\t\t\t\t\t\treturn column.definition.field;\r\n\t\t\t\t\t},\r\n\t\t\t\t\tgetElement:function(){\r\n\t\t\t\t\t\treturn cellEl;\r\n\t\t\t\t\t},\r\n\t\t\t\t\tgetColumn:function(){\r\n\t\t\t\t\t\treturn column.getComponent();\r\n\t\t\t\t\t},\r\n\t\t\t\t\tgetData:function(){\r\n\t\t\t\t\t\treturn row.component.getData();\r\n\t\t\t\t\t},\r\n\t\t\t\t\tgetRow:function(){\r\n\t\t\t\t\t\treturn row.component;\r\n\t\t\t\t\t},\r\n\t\t\t\t\tgetComponent:function(){\r\n\t\t\t\t\t\treturn cellWrapper;\r\n\t\t\t\t\t},\r\n\t\t\t\t\tcolumn:column,\r\n\t\t\t\t};\r\n\r\n\t\t\t\tvar classNames = column.definition.cssClass ? column.definition.cssClass.split(\" \") : [];\r\n\r\n\t\t\t\tclassNames.forEach(function(className) {\r\n\t\t\t\t\tcellEl.classList.add(className);\r\n\t\t\t\t});\r\n\r\n\t\t\t\tif(this.table.modExists(\"format\") && this.config.formatCells !== false){\r\n\t\t\t\t\tvalue = this.table.modules.format.formatExportValue(cellWrapper, this.colVisProp);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tswitch(typeof value){\r\n\t\t\t\t\t\tcase \"object\":\r\n\t\t\t\t\t\tvalue = JSON.stringify(value);\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\tcase \"undefined\":\r\n\t\t\t\t\t\tcase \"null\":\r\n\t\t\t\t\t\tvalue = \"\";\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\tdefault:\r\n\t\t\t\t\t\tvalue = value;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(value instanceof Node){\r\n\t\t\t\t\tcellEl.appendChild(value);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tcellEl.innerHTML = value;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(styles.firstCell){\r\n\t\t\t\t\tthis.mapElementStyles(styles.firstCell, cellEl, [\"padding-top\", \"padding-left\", \"padding-right\", \"padding-bottom\", \"border-top\", \"border-left\", \"border-right\", \"border-bottom\", \"color\", \"font-weight\", \"font-family\", \"font-size\"]);\r\n\r\n\t\t\t\t\tif(column.definition.align){\r\n\t\t\t\t\t\tcellEl.style.textAlign = column.definition.align;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(this.table.options.dataTree && this.config.dataTree !== false){\r\n\t\t\t\t\tif((setup.treeElementField && setup.treeElementField == column.field) || (!setup.treeElementField && i == 0)){\r\n\t\t\t\t\t\tif(row.component._row.modules.dataTree.controlEl){\r\n\t\t\t\t\t\t\tcellEl.insertBefore(row.component._row.modules.dataTree.controlEl.cloneNode(true), cellEl.firstChild);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif(row.component._row.modules.dataTree.branchEl){\r\n\t\t\t\t\t\t\tcellEl.insertBefore(row.component._row.modules.dataTree.branchEl.cloneNode(true), cellEl.firstChild);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\trowEl.appendChild(cellEl);\r\n\r\n\t\t\t\tif(cellWrapper.modules.format && cellWrapper.modules.format.renderedCallback){\r\n\t\t\t\t\tcellWrapper.modules.format.renderedCallback();\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(setup.rowFormatter && this.config.formatCells !== false){\r\n\t\t\t\t\tsetup.rowFormatter(row.component);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn rowEl;\r\n\t}\r\n\r\n\tgenereateHTMLTable(list){\r\n\t\tvar holder = document.createElement(\"div\");\r\n\r\n\t\tholder.appendChild(this.genereateTableElement(list));\r\n\r\n\t\treturn holder.innerHTML;\r\n\t}\r\n\r\n\tgetHtml(visible, style, config, colVisProp){\r\n\t\tvar list = this.generateExportList(config || this.table.options.htmlOutputConfig, style, visible, colVisProp || \"htmlOutput\");\r\n\r\n\t\treturn this.genereateHTMLTable(list);\r\n\t}\r\n\r\n\tmapElementStyles(from, to, props){\r\n\t\tif(this.cloneTableStyle && from && to){\r\n\r\n\t\t\tvar lookup = {\r\n\t\t\t\t\"background-color\" : \"backgroundColor\",\r\n\t\t\t\t\"color\" : \"fontColor\",\r\n\t\t\t\t\"width\" : \"width\",\r\n\t\t\t\t\"font-weight\" : \"fontWeight\",\r\n\t\t\t\t\"font-family\" : \"fontFamily\",\r\n\t\t\t\t\"font-size\" : \"fontSize\",\r\n\t\t\t\t\"text-align\" : \"textAlign\",\r\n\t\t\t\t\"border-top\" : \"borderTop\",\r\n\t\t\t\t\"border-left\" : \"borderLeft\",\r\n\t\t\t\t\"border-right\" : \"borderRight\",\r\n\t\t\t\t\"border-bottom\" : \"borderBottom\",\r\n\t\t\t\t\"padding-top\" : \"paddingTop\",\r\n\t\t\t\t\"padding-left\" : \"paddingLeft\",\r\n\t\t\t\t\"padding-right\" : \"paddingRight\",\r\n\t\t\t\t\"padding-bottom\" : \"paddingBottom\",\r\n\t\t\t};\r\n\r\n\t\t\tif(window.getComputedStyle){\r\n\t\t\t\tvar fromStyle = window.getComputedStyle(from);\r\n\r\n\t\t\t\tprops.forEach(function(prop){\r\n\t\t\t\t\tto.style[lookup[prop]] = fromStyle.getPropertyValue(prop);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n\r\nExport.moduleName = \"export\";\r\n\r\nexport default Export;\r\n","export default {\r\n\r\n\t//equal to\r\n\t\"=\":function(filterVal, rowVal, rowData, filterParams){\r\n\t\treturn rowVal == filterVal ? true : false;\r\n\t},\r\n\r\n\t//less than\r\n\t\"<\":function(filterVal, rowVal, rowData, filterParams){\r\n\t\treturn rowVal < filterVal ? true : false;\r\n\t},\r\n\r\n\t//less than or equal to\r\n\t\"<=\":function(filterVal, rowVal, rowData, filterParams){\r\n\t\treturn rowVal <= filterVal ? true : false;\r\n\t},\r\n\r\n\t//greater than\r\n\t\">\":function(filterVal, rowVal, rowData, filterParams){\r\n\t\treturn rowVal > filterVal ? true : false;\r\n\t},\r\n\r\n\t//greater than or equal to\r\n\t\">=\":function(filterVal, rowVal, rowData, filterParams){\r\n\t\treturn rowVal >= filterVal ? true : false;\r\n\t},\r\n\r\n\t//not equal to\r\n\t\"!=\":function(filterVal, rowVal, rowData, filterParams){\r\n\t\treturn rowVal != filterVal ? true : false;\r\n\t},\r\n\r\n\t\"regex\":function(filterVal, rowVal, rowData, filterParams){\r\n\r\n\t\tif(typeof filterVal == \"string\"){\r\n\t\t\tfilterVal = new RegExp(filterVal);\r\n\t\t}\r\n\r\n\t\treturn filterVal.test(rowVal);\r\n\t},\r\n\r\n\t//contains the string\r\n\t\"like\":function(filterVal, rowVal, rowData, filterParams){\r\n\t\tif(filterVal === null || typeof filterVal === \"undefined\"){\r\n\t\t\treturn rowVal === filterVal ? true : false;\r\n\t\t}else{\r\n\t\t\tif(typeof rowVal !== 'undefined' && rowVal !== null){\r\n\t\t\t\treturn String(rowVal).toLowerCase().indexOf(filterVal.toLowerCase()) > -1;\r\n\t\t\t}\r\n\t\t\telse{\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\t//contains the keywords\r\n\t\"keywords\":function(filterVal, rowVal, rowData, filterParams){\r\n\t\tvar keywords = filterVal.toLowerCase().split(typeof filterParams.separator === \"undefined\" ? \" \" : filterParams.separator),\r\n\t\tvalue = String(rowVal === null || typeof rowVal === \"undefined\" ? \"\" : rowVal).toLowerCase(),\r\n\t\tmatches = [];\r\n\r\n\t\tkeywords.forEach((keyword) =>{\r\n\t\t\tif(value.includes(keyword)){\r\n\t\t\t\tmatches.push(true);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn filterParams.matchAll ? matches.length === keywords.length : !!matches.length;\r\n\t},\r\n\r\n\t//starts with the string\r\n\t\"starts\":function(filterVal, rowVal, rowData, filterParams){\r\n\t\tif(filterVal === null || typeof filterVal === \"undefined\"){\r\n\t\t\treturn rowVal === filterVal ? true : false;\r\n\t\t}else{\r\n\t\t\tif(typeof rowVal !== 'undefined' && rowVal !== null){\r\n\t\t\t\treturn String(rowVal).toLowerCase().startsWith(filterVal.toLowerCase());\r\n\t\t\t}\r\n\t\t\telse{\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\t//ends with the string\r\n\t\"ends\":function(filterVal, rowVal, rowData, filterParams){\r\n\t\tif(filterVal === null || typeof filterVal === \"undefined\"){\r\n\t\t\treturn rowVal === filterVal ? true : false;\r\n\t\t}else{\r\n\t\t\tif(typeof rowVal !== 'undefined' && rowVal !== null){\r\n\t\t\t\treturn String(rowVal).toLowerCase().endsWith(filterVal.toLowerCase());\r\n\t\t\t}\r\n\t\t\telse{\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\t//in array\r\n\t\"in\":function(filterVal, rowVal, rowData, filterParams){\r\n\t\tif(Array.isArray(filterVal)){\r\n\t\t\treturn filterVal.length ? filterVal.indexOf(rowVal) > -1 : true;\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Filter Error - filter value is not an array:\", filterVal);\r\n\t\t\treturn false;\r\n\t\t}\r\n\t},\r\n};","import Module from '../../core/Module.js';\r\n\r\nimport defaultFilters from './defaults/filters.js';\r\n\r\nclass Filter extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.filterList = []; //hold filter list\r\n\t\tthis.headerFilters = {}; //hold column filters\r\n\t\tthis.headerFilterColumns = []; //hold columns that use header filters\r\n\r\n\t\tthis.prevHeaderFilterChangeCheck = \"\";\r\n\t\tthis.prevHeaderFilterChangeCheck = \"{}\";\r\n\r\n\t\tthis.changed = false; //has filtering changed since last render\r\n\r\n\t\tthis.registerTableOption(\"filterMode\", \"local\"); //local or remote filtering\r\n\r\n\t\tthis.registerTableOption(\"initialFilter\", false); //initial filtering criteria\r\n\t\tthis.registerTableOption(\"initialHeaderFilter\", false); //initial header filtering criteria\r\n\t\tthis.registerTableOption(\"headerFilterLiveFilterDelay\", 300); //delay before updating column after user types in header filter\r\n\r\n\t\tthis.registerColumnOption(\"headerFilter\");\r\n\t\tthis.registerColumnOption(\"headerFilterPlaceholder\");\r\n\t\tthis.registerColumnOption(\"headerFilterParams\");\r\n\t\tthis.registerColumnOption(\"headerFilterEmptyCheck\");\r\n\t\tthis.registerColumnOption(\"headerFilterFunc\");\r\n\t\tthis.registerColumnOption(\"headerFilterFuncParams\");\r\n\t\tthis.registerColumnOption(\"headerFilterLiveFilter\");\r\n\r\n\t\tthis.registerTableFunction(\"searchRows\", this.searchRows.bind(this));\r\n\t\tthis.registerTableFunction(\"searchData\", this.searchData.bind(this));\r\n\r\n\t\tthis.registerTableFunction(\"setFilter\", this.userSetFilter.bind(this));\r\n\t\tthis.registerTableFunction(\"refreshFilter\", this.userRefreshFilter.bind(this));\r\n\t\tthis.registerTableFunction(\"addFilter\", this.userAddFilter.bind(this));\r\n\t\tthis.registerTableFunction(\"getFilters\", this.getFilters.bind(this));\r\n\t\tthis.registerTableFunction(\"setHeaderFilterFocus\", this.userSetHeaderFilterFocus.bind(this));\r\n\t\tthis.registerTableFunction(\"getHeaderFilterValue\", this.userGetHeaderFilterValue.bind(this));\r\n\t\tthis.registerTableFunction(\"setHeaderFilterValue\", this.userSetHeaderFilterValue.bind(this));\r\n\t\tthis.registerTableFunction(\"getHeaderFilters\", this.getHeaderFilters.bind(this));\r\n\t\tthis.registerTableFunction(\"removeFilter\", this.userRemoveFilter.bind(this));\r\n\t\tthis.registerTableFunction(\"clearFilter\", this.userClearFilter.bind(this));\r\n\t\tthis.registerTableFunction(\"clearHeaderFilter\", this.userClearHeaderFilter.bind(this));\r\n\r\n\t\tthis.registerComponentFunction(\"column\", \"headerFilterFocus\", this.setHeaderFilterFocus.bind(this));\r\n\t\tthis.registerComponentFunction(\"column\", \"reloadHeaderFilter\", this.reloadHeaderFilter.bind(this));\r\n\t\tthis.registerComponentFunction(\"column\", \"getHeaderFilterValue\", this.getHeaderFilterValue.bind(this));\r\n\t\tthis.registerComponentFunction(\"column\", \"setHeaderFilterValue\", this.setHeaderFilterValue.bind(this));\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tthis.subscribe(\"column-init\", this.initializeColumnHeaderFilter.bind(this));\r\n\t\tthis.subscribe(\"column-width-fit-before\", this.hideHeaderFilterElements.bind(this));\r\n\t\tthis.subscribe(\"column-width-fit-after\", this.showHeaderFilterElements.bind(this));\r\n\t\tthis.subscribe(\"table-built\", this.tableBuilt.bind(this));\r\n\r\n\t\tif(this.table.options.filterMode === \"remote\"){\r\n\t\t\tthis.subscribe(\"data-params\", this.remoteFilterParams.bind(this));\r\n\t\t}\r\n\r\n\t\tthis.registerDataHandler(this.filter.bind(this), 10);\r\n\t}\r\n\r\n\ttableBuilt(){\r\n\t\tif(this.table.options.initialFilter){\r\n\t\t\tthis.setFilter(this.table.options.initialFilter);\r\n\t\t}\r\n\r\n\t\tif(this.table.options.initialHeaderFilter){\r\n\t\t\tthis.table.options.initialHeaderFilter.forEach((item) => {\r\n\r\n\t\t\t\tvar column = this.table.columnManager.findColumn(item.field);\r\n\r\n\t\t\t\tif(column){\r\n\t\t\t\t\tthis.setHeaderFilterValue(column, item.value);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.warn(\"Column Filter Error - No matching column found:\", item.field);\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tremoteFilterParams(data, config, silent, params){\r\n\t\tparams.filter = this.getFilters(true, true);\r\n\t\treturn params;\r\n\t}\r\n\r\n\t///////////////////////////////////\r\n\t///////// Table Functions /////////\r\n\t///////////////////////////////////\r\n\r\n\t//set standard filters\r\n\tuserSetFilter(field, type, value, params){\r\n\t\tthis.setFilter(field, type, value, params);\r\n\t\tthis.refreshFilter();\r\n\t}\r\n\r\n\t//set standard filters\r\n\tuserRefreshFilter(){\r\n\t\tthis.refreshFilter();\r\n\t}\r\n\r\n\t//add filter to array\r\n\tuserAddFilter(field, type, value, params){\r\n\t\tthis.addFilter(field, type, value, params);\r\n\t\tthis.refreshFilter();\r\n\t}\r\n\r\n\tuserSetHeaderFilterFocus(field){\r\n\t\tvar column = this.table.columnManager.findColumn(field);\r\n\r\n\t\tif(column){\r\n\t\t\tthis.setHeaderFilterFocus(column);\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Column Filter Focus Error - No matching column found:\", field);\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\tuserGetHeaderFilterValue(field) {\r\n\t\tvar column = this.table.columnManager.findColumn(field);\r\n\r\n\t\tif(column){\r\n\t\t\treturn this.getHeaderFilterValue(column);\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Column Filter Error - No matching column found:\", field);\r\n\t\t}\r\n\t}\r\n\r\n\tuserSetHeaderFilterValue(field, value){\r\n\t\tvar column = this.table.columnManager.findColumn(field);\r\n\r\n\t\tif(column){\r\n\t\t\tthis.setHeaderFilterValue(column, value);\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Column Filter Error - No matching column found:\", field);\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\t//remove filter from array\r\n\tuserRemoveFilter(field, type, value){\r\n\t\tthis.removeFilter(field, type, value);\r\n\t\tthis.refreshFilter();\r\n\t}\r\n\r\n\t//clear filters\r\n\tuserClearFilter(all){\r\n\t\tthis.clearFilter(all);\r\n\t\tthis.refreshFilter();\r\n\t}\r\n\r\n\t//clear header filters\r\n\tuserClearHeaderFilter(){\r\n\t\tthis.clearHeaderFilter();\r\n\t\tthis.refreshFilter();\r\n\t}\r\n\r\n\r\n\t//search for specific row components\r\n\tsearchRows(field, type, value){\r\n\t\treturn this.search(\"rows\", field, type, value);\r\n\t}\r\n\r\n\t//search for specific data\r\n\tsearchData(field, type, value){\r\n\t\treturn this.search(\"data\", field, type, value);\r\n\t}\r\n\r\n\t///////////////////////////////////\r\n\t///////// Internal Logic //////////\r\n\t///////////////////////////////////\r\n\r\n\tinitializeColumnHeaderFilter(column){\r\n\t\tvar def = column.definition;\r\n\r\n\t\tif(def.headerFilter){\r\n\r\n\t\t\tif(typeof def.headerFilterPlaceholder !== \"undefined\" && def.field){\r\n\t\t\t\tthis.module(\"localize\").setHeaderFilterColumnPlaceholder(def.field, def.headerFilterPlaceholder);\r\n\t\t\t}\r\n\r\n\t\t\tthis.initializeColumn(column);\r\n\t\t}\r\n\t}\r\n\r\n\t//initialize column header filter\r\n\tinitializeColumn(column, value){\r\n\t\tvar self = this,\r\n\t\tfield = column.getField(),\r\n\t\tparams;\r\n\r\n\t\t//handle successfull value change\r\n\t\tfunction success(value){\r\n\t\t\tvar filterType = (column.modules.filter.tagType == \"input\" && column.modules.filter.attrType == \"text\") || column.modules.filter.tagType == \"textarea\" ? \"partial\" : \"match\",\r\n\t\t\ttype = \"\",\r\n\t\t\tfilterChangeCheck = \"\",\r\n\t\t\tfilterFunc;\r\n\r\n\t\t\tif(typeof column.modules.filter.prevSuccess === \"undefined\" || column.modules.filter.prevSuccess !== value){\r\n\r\n\t\t\t\tcolumn.modules.filter.prevSuccess = value;\r\n\r\n\t\t\t\tif(!column.modules.filter.emptyFunc(value)){\r\n\t\t\t\t\tcolumn.modules.filter.value = value;\r\n\r\n\t\t\t\t\tswitch(typeof column.definition.headerFilterFunc){\r\n\t\t\t\t\t\tcase \"string\":\r\n\t\t\t\t\t\tif(Filter.filters[column.definition.headerFilterFunc]){\r\n\t\t\t\t\t\t\ttype = column.definition.headerFilterFunc;\r\n\t\t\t\t\t\t\tfilterFunc = function(data){\r\n\t\t\t\t\t\t\t\tvar params = column.definition.headerFilterFuncParams || {};\r\n\t\t\t\t\t\t\t\tvar fieldVal = column.getFieldValue(data);\r\n\r\n\t\t\t\t\t\t\t\tparams = typeof params === \"function\" ? params(value, fieldVal, data) : params;\r\n\r\n\t\t\t\t\t\t\t\treturn Filter.filters[column.definition.headerFilterFunc](value, fieldVal, data, params);\r\n\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\tconsole.warn(\"Header Filter Error - Matching filter function not found: \", column.definition.headerFilterFunc);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\tcase \"function\":\r\n\t\t\t\t\t\tfilterFunc = function(data){\r\n\t\t\t\t\t\t\tvar params = column.definition.headerFilterFuncParams || {};\r\n\t\t\t\t\t\t\tvar fieldVal = column.getFieldValue(data);\r\n\r\n\t\t\t\t\t\t\tparams = typeof params === \"function\" ? params(value, fieldVal, data) : params;\r\n\r\n\t\t\t\t\t\t\treturn column.definition.headerFilterFunc(value, fieldVal, data, params);\r\n\t\t\t\t\t\t};\r\n\r\n\t\t\t\t\t\ttype = filterFunc;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif(!filterFunc){\r\n\t\t\t\t\t\tswitch(filterType){\r\n\t\t\t\t\t\t\tcase \"partial\":\r\n\t\t\t\t\t\t\tfilterFunc = function(data){\r\n\t\t\t\t\t\t\t\tvar colVal = column.getFieldValue(data);\r\n\r\n\t\t\t\t\t\t\t\tif(typeof colVal !== 'undefined' && colVal !== null){\r\n\t\t\t\t\t\t\t\t\treturn String(colVal).toLowerCase().indexOf(String(value).toLowerCase()) > -1;\r\n\t\t\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t\ttype = \"like\";\r\n\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\t\tdefault:\r\n\t\t\t\t\t\t\tfilterFunc = function(data){\r\n\t\t\t\t\t\t\t\treturn column.getFieldValue(data) == value;\r\n\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t\ttype = \"=\";\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tself.headerFilters[field] = {value:value, func:filterFunc, type:type, params:params || {}};\r\n\r\n\t\t\t\t}else{\r\n\t\t\t\t\tdelete self.headerFilters[field];\r\n\t\t\t\t}\r\n\r\n\t\t\t\tfilterChangeCheck = JSON.stringify(self.headerFilters);\r\n\r\n\t\t\t\tif(self.prevHeaderFilterChangeCheck !== filterChangeCheck){\r\n\t\t\t\t\tself.prevHeaderFilterChangeCheck = filterChangeCheck;\r\n\r\n\t\t\t\t\tself.trackChanges();\r\n\t\t\t\t\tself.refreshFilter();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\tcolumn.modules.filter = {\r\n\t\t\tsuccess:success,\r\n\t\t\tattrType:false,\r\n\t\t\ttagType:false,\r\n\t\t\temptyFunc:false,\r\n\t\t};\r\n\r\n\t\tthis.generateHeaderFilterElement(column);\r\n\t}\r\n\r\n\tgenerateHeaderFilterElement(column, initialValue, reinitialize){\r\n\t\tvar self = this,\r\n\t\tsuccess = column.modules.filter.success,\r\n\t\tfield = column.getField(),\r\n\t\tfilterElement, editor, editorElement, cellWrapper, typingTimer, searchTrigger, params;\r\n\r\n\t\t//handle aborted edit\r\n\t\tfunction cancel(){}\r\n\r\n\t\tif(column.modules.filter.headerElement && column.modules.filter.headerElement.parentNode){\r\n\t\t\tcolumn.contentElement.removeChild(column.modules.filter.headerElement.parentNode);\r\n\t\t}\r\n\r\n\t\tif(field){\r\n\r\n\t\t\t//set empty value function\r\n\t\t\tcolumn.modules.filter.emptyFunc = column.definition.headerFilterEmptyCheck || function(value){\r\n\t\t\t\treturn !value && value !== \"0\" && value !== 0;\r\n\t\t\t};\r\n\r\n\t\t\tfilterElement = document.createElement(\"div\");\r\n\t\t\tfilterElement.classList.add(\"tabulator-header-filter\");\r\n\r\n\t\t\t//set column editor\r\n\t\t\tswitch(typeof column.definition.headerFilter){\r\n\t\t\t\tcase \"string\":\r\n\t\t\t\tif(self.table.modules.edit.editors[column.definition.headerFilter]){\r\n\t\t\t\t\teditor = self.table.modules.edit.editors[column.definition.headerFilter];\r\n\r\n\t\t\t\t\tif((column.definition.headerFilter === \"tick\" || column.definition.headerFilter === \"tickCross\") && !column.definition.headerFilterEmptyCheck){\r\n\t\t\t\t\t\tcolumn.modules.filter.emptyFunc = function(value){\r\n\t\t\t\t\t\t\treturn value !== true && value !== false;\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t}\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.warn(\"Filter Error - Cannot build header filter, No such editor found: \", column.definition.editor);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"function\":\r\n\t\t\t\teditor = column.definition.headerFilter;\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"boolean\":\r\n\t\t\t\tif(column.modules.edit && column.modules.edit.editor){\r\n\t\t\t\t\teditor = column.modules.edit.editor;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tif(column.definition.formatter && self.table.modules.edit.editors[column.definition.formatter]){\r\n\t\t\t\t\t\teditor = self.table.modules.edit.editors[column.definition.formatter];\r\n\r\n\t\t\t\t\t\tif((column.definition.formatter === \"tick\" || column.definition.formatter === \"tickCross\") && !column.definition.headerFilterEmptyCheck){\r\n\t\t\t\t\t\t\tcolumn.modules.filter.emptyFunc = function(value){\r\n\t\t\t\t\t\t\t\treturn value !== true && value !== false;\r\n\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\teditor = self.table.modules.edit.editors[\"input\"];\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\r\n\t\t\tif(editor){\r\n\r\n\t\t\t\tcellWrapper = {\r\n\t\t\t\t\tgetValue:function(){\r\n\t\t\t\t\t\treturn typeof initialValue !== \"undefined\" ? initialValue : \"\";\r\n\t\t\t\t\t},\r\n\t\t\t\t\tgetField:function(){\r\n\t\t\t\t\t\treturn column.definition.field;\r\n\t\t\t\t\t},\r\n\t\t\t\t\tgetElement:function(){\r\n\t\t\t\t\t\treturn filterElement;\r\n\t\t\t\t\t},\r\n\t\t\t\t\tgetColumn:function(){\r\n\t\t\t\t\t\treturn column.getComponent();\r\n\t\t\t\t\t},\r\n\t\t\t\t\tgetRow:function(){\r\n\t\t\t\t\t\treturn {\r\n\t\t\t\t\t\t\tnormalizeHeight:function(){\r\n\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t}\r\n\t\t\t\t};\r\n\r\n\t\t\t\tparams = column.definition.headerFilterParams || {};\r\n\r\n\t\t\t\tparams = typeof params === \"function\" ? params.call(self.table) : params;\r\n\r\n\t\t\t\teditorElement = editor.call(this.table.modules.edit, cellWrapper, function(){}, success, cancel, params);\r\n\r\n\t\t\t\tif(!editorElement){\r\n\t\t\t\t\tconsole.warn(\"Filter Error - Cannot add filter to \" + field + \" column, editor returned a value of false\");\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(!(editorElement instanceof Node)){\r\n\t\t\t\t\tconsole.warn(\"Filter Error - Cannot add filter to \" + field + \" column, editor should return an instance of Node, the editor returned:\", editorElement);\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//set Placeholder Text\r\n\t\t\t\tif(field){\r\n\t\t\t\t\tself.langBind(\"headerFilters|columns|\" + column.definition.field, function(value){\r\n\t\t\t\t\t\teditorElement.setAttribute(\"placeholder\", typeof value !== \"undefined\" && value ? value : self.langText(\"headerFilters|default\"));\r\n\t\t\t\t\t});\r\n\t\t\t\t}else{\r\n\t\t\t\t\tself.langBind(\"headerFilters|default\", function(value){\r\n\t\t\t\t\t\teditorElement.setAttribute(\"placeholder\", value);\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//focus on element on click\r\n\t\t\t\teditorElement.addEventListener(\"click\", function(e){\r\n\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\teditorElement.focus();\r\n\t\t\t\t});\r\n\r\n\t\t\t\teditorElement.addEventListener(\"focus\", (e) => {\r\n\t\t\t\t\tvar left = this.table.columnManager.element.scrollLeft;\r\n\r\n\t\t\t\t\tif(left !== this.table.rowManager.element.scrollLeft){\r\n\t\t\t\t\t\tthis.table.rowManager.scrollHorizontal(left);\r\n\t\t\t\t\t\tthis.table.columnManager.scrollHorizontal(left);\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\t//live update filters as user types\r\n\t\t\t\ttypingTimer = false;\r\n\r\n\t\t\t\tsearchTrigger = function(e){\r\n\t\t\t\t\tif(typingTimer){\r\n\t\t\t\t\t\tclearTimeout(typingTimer);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\ttypingTimer = setTimeout(function(){\r\n\t\t\t\t\t\tsuccess(editorElement.value);\r\n\t\t\t\t\t},self.table.options.headerFilterLiveFilterDelay);\r\n\t\t\t\t};\r\n\r\n\t\t\t\tcolumn.modules.filter.headerElement = editorElement;\r\n\t\t\t\tcolumn.modules.filter.attrType = editorElement.hasAttribute(\"type\") ? editorElement.getAttribute(\"type\").toLowerCase() : \"\" ;\r\n\t\t\t\tcolumn.modules.filter.tagType = editorElement.tagName.toLowerCase();\r\n\r\n\t\t\t\tif(column.definition.headerFilterLiveFilter !== false){\r\n\r\n\t\t\t\t\tif (\r\n\t\t\t\t\t\t!(\r\n\t\t\t\t\t\t\tcolumn.definition.headerFilter === 'autocomplete' ||\r\n\t\t\t\t\t\t\tcolumn.definition.headerFilter === 'tickCross' ||\r\n\t\t\t\t\t\t\t((column.definition.editor === 'autocomplete' ||\r\n\t\t\t\t\t\t\t\tcolumn.definition.editor === 'tickCross') &&\r\n\t\t\t\t\t\t\tcolumn.definition.headerFilter === true)\r\n\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t) {\r\n\t\t\t\t\t\teditorElement.addEventListener(\"keyup\", searchTrigger);\r\n\t\t\t\t\teditorElement.addEventListener(\"search\", searchTrigger);\r\n\r\n\r\n\t\t\t\t\t//update number filtered columns on change\r\n\t\t\t\t\tif(column.modules.filter.attrType == \"number\"){\r\n\t\t\t\t\t\teditorElement.addEventListener(\"change\", function(e){\r\n\t\t\t\t\t\t\tsuccess(editorElement.value);\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t//change text inputs to search inputs to allow for clearing of field\r\n\t\t\t\t\tif(column.modules.filter.attrType == \"text\" && this.table.browser !== \"ie\"){\r\n\t\t\t\t\t\teditorElement.setAttribute(\"type\", \"search\");\r\n\t\t\t\t\t\t// editorElement.off(\"change blur\"); //prevent blur from triggering filter and preventing selection click\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\t\t//prevent input and select elements from propegating click to column sorters etc\r\n\t\t\t\t\tif(column.modules.filter.tagType == \"input\" || column.modules.filter.tagType == \"select\" || column.modules.filter.tagType == \"textarea\"){\r\n\t\t\t\t\t\teditorElement.addEventListener(\"mousedown\",function(e){\r\n\t\t\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tfilterElement.appendChild(editorElement);\r\n\r\n\t\t\t\tcolumn.contentElement.appendChild(filterElement);\r\n\r\n\t\t\t\tif(!reinitialize){\r\n\t\t\t\t\tself.headerFilterColumns.push(column);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Filter Error - Cannot add header filter, column has no field set:\", column.definition.title);\r\n\t\t}\r\n\t}\r\n\r\n\t//hide all header filter elements (used to ensure correct column widths in \"fitData\" layout mode)\r\n\thideHeaderFilterElements(){\r\n\t\tthis.headerFilterColumns.forEach(function(column){\r\n\t\t\tif(column.modules.filter && column.modules.filter.headerElement){\r\n\t\t\t\tcolumn.modules.filter.headerElement.style.display = 'none';\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t//show all header filter elements (used to ensure correct column widths in \"fitData\" layout mode)\r\n\tshowHeaderFilterElements(){\r\n\t\tthis.headerFilterColumns.forEach(function(column){\r\n\t\t\tif(column.modules.filter && column.modules.filter.headerElement){\r\n\t\t\t\tcolumn.modules.filter.headerElement.style.display = '';\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t//programatically set focus of header filter\r\n\tsetHeaderFilterFocus(column){\r\n\t\tif(column.modules.filter && column.modules.filter.headerElement){\r\n\t\t\tcolumn.modules.filter.headerElement.focus();\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Column Filter Focus Error - No header filter set on column:\", column.getField());\r\n\t\t}\r\n\t}\r\n\r\n\t//programmatically get value of header filter\r\n\tgetHeaderFilterValue(column){\r\n\t\tif(column.modules.filter && column.modules.filter.headerElement){\r\n\t\t\treturn column.modules.filter.headerElement.value;\r\n\t\t} else {\r\n\t\t\tconsole.warn(\"Column Filter Error - No header filter set on column:\", column.getField());\r\n\t\t}\r\n\t}\r\n\r\n\t//programatically set value of header filter\r\n\tsetHeaderFilterValue(column, value){\r\n\t\tif (column){\r\n\t\t\tif(column.modules.filter && column.modules.filter.headerElement){\r\n\t\t\t\tthis.generateHeaderFilterElement(column, value, true);\r\n\t\t\t\tcolumn.modules.filter.success(value);\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Column Filter Error - No header filter set on column:\", column.getField());\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\treloadHeaderFilter(column){\r\n\t\tif (column){\r\n\t\t\tif(column.modules.filter && column.modules.filter.headerElement){\r\n\t\t\t\tthis.generateHeaderFilterElement(column, column.modules.filter.value, true);\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Column Filter Error - No header filter set on column:\", column.getField());\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\trefreshFilter(){\r\n\t\tif(this.table.options.filterMode === \"remote\"){\r\n\t\t\tthis.reloadData();\r\n\t\t}else{\r\n\t\t\tthis.refreshData()\r\n\t\t}\r\n\r\n\t\t//TODO - Persist left position of row manager\r\n\t\t// left = this.scrollLeft;\r\n\t\t// this.scrollHorizontal(left);\r\n\t}\r\n\r\n\t//check if the filters has changed since last use\r\n\ttrackChanges(){\r\n\t\tthis.changed = true;\r\n\t\tthis.dispatch(\"filter-changed\");\r\n\t}\r\n\r\n\t//check if the filters has changed since last use\r\n\thasChanged(){\r\n\t\tvar changed = this.changed;\r\n\t\tthis.changed = false;\r\n\t\treturn changed;\r\n\t}\r\n\r\n\t//set standard filters\r\n\tsetFilter(field, type, value, params){\r\n\t\tthis.filterList = [];\r\n\r\n\t\tif(!Array.isArray(field)){\r\n\t\t\tfield = [{field:field, type:type, value:value, params:params}];\r\n\t\t}\r\n\r\n\t\tthis.addFilter(field);\r\n\t}\r\n\r\n\t//add filter to array\r\n\taddFilter(field, type, value, params){\r\n\t\tvar changed = false;\r\n\r\n\t\tif(!Array.isArray(field)){\r\n\t\t\tfield = [{field:field, type:type, value:value, params:params}];\r\n\t\t}\r\n\r\n\t\tfield.forEach((filter) => {\r\n\r\n\t\t\tfilter = this.findFilter(filter);\r\n\r\n\t\t\tif(filter){\r\n\t\t\t\tthis.filterList.push(filter);\r\n\t\t\t\tthis.changed = true;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tif(changed){\r\n\t\t\tthis.trackChanges();\r\n\t\t}\r\n\t}\r\n\r\n\tfindFilter(filter){\r\n\t\tvar column;\r\n\r\n\t\tif(Array.isArray(filter)){\r\n\t\t\treturn this.findSubFilters(filter);\r\n\t\t}\r\n\r\n\t\tvar filterFunc = false;\r\n\r\n\t\tif(typeof filter.field == \"function\"){\r\n\t\t\tfilterFunc = function(data){\r\n\t\t\t\treturn filter.field(data, filter.type || {})// pass params to custom filter function\r\n\t\t\t};\r\n\t\t}else{\r\n\r\n\t\t\tif(Filter.filters[filter.type]){\r\n\r\n\t\t\t\tcolumn = this.table.columnManager.getColumnByField(filter.field);\r\n\r\n\t\t\t\tif(column){\r\n\t\t\t\t\tfilterFunc = function(data){\r\n\t\t\t\t\t\treturn Filter.filters[filter.type](filter.value, column.getFieldValue(data), data, filter.params || {});\r\n\t\t\t\t\t};\r\n\t\t\t\t}else{\r\n\t\t\t\t\tfilterFunc = function(data){\r\n\t\t\t\t\t\treturn Filter.filters[filter.type](filter.value, data[filter.field], data, filter.params || {});\r\n\t\t\t\t\t};\r\n\t\t\t\t}\r\n\r\n\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Filter Error - No such filter type found, ignoring: \", filter.type);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfilter.func = filterFunc;\r\n\r\n\t\treturn filter.func ? filter : false;\r\n\t}\r\n\r\n\tfindSubFilters(filters){\r\n\t\tvar output = [];\r\n\r\n\t\tfilters.forEach((filter) => {\r\n\t\t\tfilter = this.findFilter(filter);\r\n\r\n\t\t\tif(filter){\r\n\t\t\t\toutput.push(filter);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn output.length ? output : false;\r\n\t}\r\n\r\n\t//get all filters\r\n\tgetFilters(all, ajax){\r\n\t\tvar output = [];\r\n\r\n\t\tif(all){\r\n\t\t\toutput = this.getHeaderFilters();\r\n\t\t}\r\n\r\n\t\tif(ajax){\r\n\t\t\toutput.forEach(function(item){\r\n\t\t\t\tif(typeof item.type == \"function\"){\r\n\t\t\t\t\titem.type = \"function\";\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\toutput = output.concat(this.filtersToArray(this.filterList, ajax));\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\t//filter to Object\r\n\tfiltersToArray(filterList, ajax){\r\n\t\tvar output = [];\r\n\r\n\t\tfilterList.forEach((filter) => {\r\n\t\t\tvar item;\r\n\r\n\t\t\tif(Array.isArray(filter)){\r\n\t\t\t\toutput.push(this.filtersToArray(filter, ajax));\r\n\t\t\t}else{\r\n\t\t\t\titem = {field:filter.field, type:filter.type, value:filter.value}\r\n\r\n\t\t\t\tif(ajax){\r\n\t\t\t\t\tif(typeof item.type == \"function\"){\r\n\t\t\t\t\t\titem.type = \"function\";\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\toutput.push(item);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\t//get all filters\r\n\tgetHeaderFilters(){\r\n\t\tvar output = [];\r\n\r\n\t\tfor(var key in this.headerFilters){\r\n\t\t\toutput.push({field:key, type:this.headerFilters[key].type, value:this.headerFilters[key].value});\r\n\t\t}\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\t//remove filter from array\r\n\tremoveFilter(field, type, value){\r\n\t\tvar changed = false;\r\n\r\n\t\tif(!Array.isArray(field)){\r\n\t\t\tfield = [{field:field, type:type, value:value}];\r\n\t\t}\r\n\r\n\t\tfield.forEach((filter) => {\r\n\t\t\tvar index = -1;\r\n\r\n\t\t\tif(typeof filter.field == \"object\"){\r\n\t\t\t\tindex = this.filterList.findIndex((element) => {\r\n\t\t\t\t\treturn filter === element;\r\n\t\t\t\t});\r\n\t\t\t}else{\r\n\t\t\t\tindex = this.filterList.findIndex((element) => {\r\n\t\t\t\t\treturn filter.field === element.field && filter.type === element.type && filter.value === element.value;\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\tif(index > -1){\r\n\t\t\t\tthis.filterList.splice(index, 1);\r\n\t\t\t\tchanged = true;\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Filter Error - No matching filter type found, ignoring: \", filter.type);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tthis.trackChanges();\r\n\t}\r\n\r\n\t//clear filters\r\n\tclearFilter(all){\r\n\t\tthis.filterList = [];\r\n\r\n\t\tif(all){\r\n\t\t\tthis.clearHeaderFilter();\r\n\t\t}\r\n\r\n\t\tthis.trackChanges();\r\n\t}\r\n\r\n\t//clear header filters\r\n\tclearHeaderFilter(){\r\n\t\tthis.headerFilters = {};\r\n\t\tthis.prevHeaderFilterChangeCheck = \"{}\";\r\n\r\n\t\tthis.headerFilterColumns.forEach((column) => {\r\n\t\t\tif(typeof column.modules.filter.value !== \"undefined\"){\r\n\t\t\t\tdelete column.modules.filter.value;\r\n\t\t\t}\r\n\t\t\tcolumn.modules.filter.prevSuccess = undefined;\r\n\t\t\tthis.reloadHeaderFilter(column);\r\n\t\t});\r\n\r\n\t\tthis.trackChanges();\r\n\t}\r\n\r\n\t//search data and return matching rows\r\n\tsearch (searchType, field, type, value){\r\n\t\tvar activeRows = [],\r\n\t\tfilterList = [];\r\n\r\n\t\tif(!Array.isArray(field)){\r\n\t\t\tfield = [{field:field, type:type, value:value}];\r\n\t\t}\r\n\r\n\t\tfield.forEach((filter) => {\r\n\t\t\tfilter = this.findFilter(filter);\r\n\r\n\t\t\tif(filter){\r\n\t\t\t\tfilterList.push(filter);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tthis.table.rowManager.rows.forEach((row) => {\r\n\t\t\tvar match = true;\r\n\r\n\t\t\tfilterList.forEach((filter) => {\r\n\t\t\t\tif(!this.filterRecurse(filter, row.getData())){\r\n\t\t\t\t\tmatch = false;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tif(match){\r\n\t\t\t\tactiveRows.push(searchType === \"data\" ? row.getData(\"data\") : row.getComponent());\r\n\t\t\t}\r\n\r\n\t\t});\r\n\r\n\t\treturn activeRows;\r\n\t}\r\n\r\n\t//filter row array\r\n\tfilter(rowList, filters){\r\n\t\tvar activeRows = [],\r\n\t\tactiveRowComponents = [];\r\n\r\n\t\tif(this.subscribedExternal(\"dataFiltering\")){\r\n\t\t\tthis.dispatchExternal(\"dataFiltering\", this.getFilters());\r\n\t\t}\r\n\r\n\t\tif(this.table.options.filterMode !== \"remote\" && (this.filterList.length || Object.keys(this.headerFilters).length)){\r\n\r\n\t\t\trowList.forEach((row) => {\r\n\t\t\t\tif(this.filterRow(row)){\r\n\t\t\t\t\tactiveRows.push(row);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t}else{\r\n\t\t\tactiveRows = rowList.slice(0);\r\n\t\t}\r\n\r\n\t\tif(this.subscribedExternal(\"dataFiltered\")){\r\n\r\n\t\t\tactiveRows.forEach((row) => {\r\n\t\t\t\tactiveRowComponents.push(row.getComponent());\r\n\t\t\t});\r\n\r\n\t\t\tthis.dispatchExternal(\"dataFiltered\", this.getFilters(), activeRowComponents);\r\n\t\t}\r\n\r\n\t\treturn activeRows;\r\n\t}\r\n\r\n\t//filter individual row\r\n\tfilterRow(row, filters){\r\n\t\tvar match = true,\r\n\t\tdata = row.getData();\r\n\r\n\t\tthis.filterList.forEach((filter) => {\r\n\t\t\tif(!this.filterRecurse(filter, data)){\r\n\t\t\t\tmatch = false;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\r\n\t\tfor(var field in this.headerFilters){\r\n\t\t\tif(!this.headerFilters[field].func(data)){\r\n\t\t\t\tmatch = false;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn match;\r\n\t}\r\n\r\n\tfilterRecurse(filter, data){\r\n\t\tvar match = false;\r\n\r\n\t\tif(Array.isArray(filter)){\r\n\t\t\tfilter.forEach((subFilter) => {\r\n\t\t\t\tif(this.filterRecurse(subFilter, data)){\r\n\t\t\t\t\tmatch = true;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tmatch = filter.func(data);\r\n\t\t}\r\n\r\n\t\treturn match;\r\n\t}\r\n}\r\n\r\nFilter.moduleName = \"filter\";\r\n\r\n//load defaults\r\nFilter.filters = defaultFilters;\r\n\r\nexport default Filter;","import plaintext from './formatters/plaintext.js';\r\nimport html from './formatters/html.js';\r\nimport textarea from './formatters/textarea.js';\r\nimport money from './formatters/money.js';\r\nimport link from './formatters/link.js';\r\nimport image from './formatters/image.js';\r\nimport tickCross from './formatters/tickCross.js';\r\nimport datetime from './formatters/datetime.js';\r\nimport datetimediff from './formatters/datetimediff.js';\r\nimport lookup from './formatters/lookup.js';\r\nimport star from './formatters/star.js';\r\nimport traffic from './formatters/traffic.js';\r\nimport progress from './formatters/progress.js';\r\nimport color from './formatters/color.js';\r\nimport buttonTick from './formatters/buttonTick.js';\r\nimport buttonCross from './formatters/buttonCross.js';\r\nimport rownum from './formatters/rownum.js';\r\nimport handle from './formatters/handle.js';\r\nimport responsiveCollapse from './formatters/responsiveCollapse.js';\r\nimport rowSelection from './formatters/rowSelection.js';\r\n\r\nexport default {\r\n\tplaintext:plaintext,\r\n\thtml:html,\r\n\ttextarea:textarea,\r\n\tmoney:money,\r\n\tlink:link,\r\n\timage:image,\r\n\ttickCross:tickCross,\r\n\tdatetime:datetime,\r\n\tdatetimediff:datetimediff,\r\n\tlookup:lookup,\r\n\tstar:star,\r\n\ttraffic:traffic,\r\n\tprogress:progress,\r\n\tcolor:color,\r\n\tbuttonTick:buttonTick,\r\n\tbuttonCross:buttonCross,\r\n\trownum:rownum,\r\n\thandle:handle,\r\n\tresponsiveCollapse:responsiveCollapse,\r\n\trowSelection:rowSelection,\r\n};","export default function(cell, formatterParams, onRendered){\r\n\treturn this.emptyToSpace(this.sanitizeHTML(cell.getValue()));\r\n};","export default function(cell, formatterParams, onRendered){\r\n\treturn cell.getValue();\r\n};","export default function(cell, formatterParams, onRendered){\r\n\tcell.getElement().style.whiteSpace = \"pre-wrap\";\r\n\treturn this.emptyToSpace(this.sanitizeHTML(cell.getValue()));\r\n};","export default function(cell, formatterParams, onRendered){\r\n\tvar floatVal = parseFloat(cell.getValue()),\r\n\tnumber, integer, decimal, rgx;\r\n\r\n\tvar decimalSym = formatterParams.decimal || \".\";\r\n\tvar thousandSym = formatterParams.thousand || \",\";\r\n\tvar symbol = formatterParams.symbol || \"\";\r\n\tvar after = !!formatterParams.symbolAfter;\r\n\tvar precision = typeof formatterParams.precision !== \"undefined\" ? formatterParams.precision : 2;\r\n\r\n\tif(isNaN(floatVal)){\r\n\t\treturn this.emptyToSpace(this.sanitizeHTML(cell.getValue()));\r\n\t}\r\n\r\n\tnumber = precision !== false ? floatVal.toFixed(precision) : floatVal;\r\n\tnumber = String(number).split(\".\");\r\n\r\n\tinteger = number[0];\r\n\tdecimal = number.length > 1 ? decimalSym + number[1] : \"\";\r\n\r\n\trgx = /(\\d+)(\\d{3})/;\r\n\r\n\twhile (rgx.test(integer)){\r\n\t\tinteger = integer.replace(rgx, \"$1\" + thousandSym + \"$2\");\r\n\t}\r\n\r\n\treturn after ? integer + decimal + symbol : symbol + integer + decimal;\r\n};","export default function(cell, formatterParams, onRendered){\r\n\tvar value = cell.getValue(),\r\n\turlPrefix = formatterParams.urlPrefix || \"\",\r\n\tdownload = formatterParams.download,\r\n\tlabel = value,\r\n\tel = document.createElement(\"a\"),\r\n\tdata;\r\n\r\n\tif(formatterParams.labelField){\r\n\t\tdata = cell.getData();\r\n\t\tlabel = data[formatterParams.labelField];\r\n\t}\r\n\r\n\tif(formatterParams.label){\r\n\t\tswitch(typeof formatterParams.label){\r\n\t\t\tcase \"string\":\r\n\t\t\tlabel = formatterParams.label;\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"function\":\r\n\t\t\tlabel = formatterParams.label(cell);\r\n\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\tif(label){\r\n\t\tif(formatterParams.urlField){\r\n\t\t\tdata = cell.getData();\r\n\t\t\tvalue = data[formatterParams.urlField];\r\n\t\t}\r\n\r\n\t\tif(formatterParams.url){\r\n\t\t\tswitch(typeof formatterParams.url){\r\n\t\t\t\tcase \"string\":\r\n\t\t\t\tvalue = formatterParams.url;\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"function\":\r\n\t\t\t\tvalue = formatterParams.url(cell);\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tel.setAttribute(\"href\", urlPrefix + value);\r\n\r\n\t\tif(formatterParams.target){\r\n\t\t\tel.setAttribute(\"target\", formatterParams.target);\r\n\t\t}\r\n\r\n\t\tif(formatterParams.download){\r\n\r\n\t\t\tif(typeof download == \"function\"){\r\n\t\t\t\tdownload = download(cell);\r\n\t\t\t}else{\r\n\t\t\t\tdownload = download === true ? \"\" : download;\r\n\t\t\t}\r\n\r\n\t\t\tel.setAttribute(\"download\", download);\r\n\t\t}\r\n\r\n\t\tel.innerHTML = this.emptyToSpace(this.sanitizeHTML(label));\r\n\r\n\t\treturn el;\r\n\t}else{\r\n\t\treturn \" \";\r\n\t}\r\n};","export default function(cell, formatterParams, onRendered){\r\n\tvar el = document.createElement(\"img\"),\r\n\tsrc = cell.getValue();\r\n\r\n\tif(formatterParams.urlPrefix){\r\n\t\tsrc = formatterParams.urlPrefix + cell.getValue();\r\n\t}\r\n\r\n\tif(formatterParams.urlSuffix){\r\n\t\tsrc = src + formatterParams.urlSuffix;\r\n\t}\r\n\r\n\tel.setAttribute(\"src\", src);\r\n\r\n\tswitch(typeof formatterParams.height){\r\n\t\tcase \"number\":\r\n\t\tel.style.height = formatterParams.height + \"px\";\r\n\t\tbreak;\r\n\r\n\t\tcase \"string\":\r\n\t\tel.style.height = formatterParams.height;\r\n\t\tbreak;\r\n\t}\r\n\r\n\tswitch(typeof formatterParams.width){\r\n\t\tcase \"number\":\r\n\t\tel.style.width = formatterParams.width + \"px\";\r\n\t\tbreak;\r\n\r\n\t\tcase \"string\":\r\n\t\tel.style.width = formatterParams.width;\r\n\t\tbreak;\r\n\t}\r\n\r\n\tel.addEventListener(\"load\", function(){\r\n\t\tcell.getRow().normalizeHeight();\r\n\t});\r\n\r\n\treturn el;\r\n};","export default function(cell, formatterParams, onRendered){\r\n\tvar value = cell.getValue(),\r\n\telement = cell.getElement(),\r\n\tempty = formatterParams.allowEmpty,\r\n\ttruthy = formatterParams.allowTruthy,\r\n\ttick = typeof formatterParams.tickElement !== \"undefined\" ? formatterParams.tickElement : '',\r\n\tcross = typeof formatterParams.crossElement !== \"undefined\" ? formatterParams.crossElement : '';\r\n\r\n\tif((truthy && value) || (value === true || value === \"true\" || value === \"True\" || value === 1 || value === \"1\")){\r\n\t\telement.setAttribute(\"aria-checked\", true);\r\n\t\treturn tick || \"\";\r\n\t}else{\r\n\t\tif(empty && (value === \"null\" || value === \"\" || value === null || typeof value === \"undefined\")){\r\n\t\t\telement.setAttribute(\"aria-checked\", \"mixed\");\r\n\t\t\treturn \"\";\r\n\t\t}else{\r\n\t\t\telement.setAttribute(\"aria-checked\", false);\r\n\t\t\treturn cross || \"\";\r\n\t\t}\r\n\t}\r\n};","export default function(cell, formatterParams, onRendered){\r\n\tvar inputFormat = formatterParams.inputFormat || \"YYYY-MM-DD hh:mm:ss\";\r\n\tvar\toutputFormat = formatterParams.outputFormat || \"DD/MM/YYYY hh:mm:ss\";\r\n\tvar\tinvalid = typeof formatterParams.invalidPlaceholder !== \"undefined\" ? formatterParams.invalidPlaceholder : \"\";\r\n\tvar value = cell.getValue();\r\n\r\n\tvar newDatetime = moment(value, inputFormat);\r\n\r\n\tif(newDatetime.isValid()){\r\n\t\treturn formatterParams.timezone ? newDatetime.tz(formatterParams.timezone).format(outputFormat) : newDatetime.format(outputFormat);\r\n\t}else{\r\n\r\n\t\tif(invalid === true){\r\n\t\t\treturn value;\r\n\t\t}else if(typeof invalid === \"function\"){\r\n\t\t\treturn invalid(value);\r\n\t\t}else{\r\n\t\t\treturn invalid;\r\n\t\t}\r\n\t}\r\n};","export default function datetime(cell, formatterParams, onRendered) {\r\n\tvar inputFormat = formatterParams.inputFormat || \"YYYY-MM-DD hh:mm:ss\";\r\n\tvar invalid = typeof formatterParams.invalidPlaceholder !== \"undefined\" ? formatterParams.invalidPlaceholder : \"\";\r\n\tvar suffix = typeof formatterParams.suffix !== \"undefined\" ? formatterParams.suffix : false;\r\n\tvar unit = typeof formatterParams.unit !== \"undefined\" ? formatterParams.unit : undefined;\r\n\tvar humanize = typeof formatterParams.humanize !== \"undefined\" ? formatterParams.humanize : false;\r\n\tvar date = typeof formatterParams.date !== \"undefined\" ? formatterParams.date : moment();\r\n\tvar value = cell.getValue();\r\n\r\n\tvar newDatetime = moment(value, inputFormat);\r\n\r\n\tif (newDatetime.isValid()) {\r\n\t\tif(humanize){\r\n\t\t\treturn moment.duration(newDatetime.diff(date)).humanize(suffix);\r\n\t\t}else{\r\n\t\t\treturn newDatetime.diff(date, unit) + (suffix ? \" \" + suffix : \"\");\r\n\t\t}\r\n\r\n\t} else {\r\n\r\n\t\tif (invalid === true) {\r\n\t\t\treturn value;\r\n\t\t} else if (typeof invalid === \"function\") {\r\n\t\t\treturn invalid(value);\r\n\t\t} else {\r\n\t\t\treturn invalid;\r\n\t\t}\r\n\t}\r\n};","export default function (cell, formatterParams, onRendered) {\r\n\tvar value = cell.getValue();\r\n\r\n\tif (typeof formatterParams[value] === \"undefined\") {\r\n\t\tconsole.warn('Missing display value for ' + value);\r\n\t\treturn value;\r\n\t}\r\n\r\n\treturn formatterParams[value];\r\n};","export default function(cell, formatterParams, onRendered){\r\n\tvar value = cell.getValue(),\r\n\telement = cell.getElement(),\r\n\tmaxStars = formatterParams && formatterParams.stars ? formatterParams.stars : 5,\r\n\tstars = document.createElement(\"span\"),\r\n\tstar = document.createElementNS('http://www.w3.org/2000/svg', \"svg\"),\r\n\tstarActive = '',\r\n\tstarInactive = '';\r\n\r\n\t//style stars holder\r\n\tstars.style.verticalAlign = \"middle\";\r\n\r\n\t//style star\r\n\tstar.setAttribute(\"width\", \"14\");\r\n\tstar.setAttribute(\"height\", \"14\");\r\n\tstar.setAttribute(\"viewBox\", \"0 0 512 512\");\r\n\tstar.setAttribute(\"xml:space\", \"preserve\");\r\n\tstar.style.padding = \"0 1px\";\r\n\r\n\tvalue = value && !isNaN(value) ? parseInt(value) : 0;\r\n\r\n\tvalue = Math.max(0, Math.min(value, maxStars));\r\n\r\n\tfor(var i=1;i<= maxStars;i++){\r\n\t\tvar nextStar = star.cloneNode(true);\r\n\t\tnextStar.innerHTML = i <= value ? starActive : starInactive;\r\n\r\n\t\tstars.appendChild(nextStar);\r\n\t}\r\n\r\n\telement.style.whiteSpace = \"nowrap\";\r\n\telement.style.overflow = \"hidden\";\r\n\telement.style.textOverflow = \"ellipsis\";\r\n\r\n\telement.setAttribute(\"aria-label\", value);\r\n\r\n\treturn stars;\r\n};","export default function(cell, formatterParams, onRendered){\r\n\tvar value = this.sanitizeHTML(cell.getValue()) || 0,\r\n\tel = document.createElement(\"span\"),\r\n\tmax = formatterParams && formatterParams.max ? formatterParams.max : 100,\r\n\tmin = formatterParams && formatterParams.min ? formatterParams.min : 0,\r\n\tcolors = formatterParams && typeof formatterParams.color !== \"undefined\" ? formatterParams.color : [\"red\", \"orange\", \"green\"],\r\n\tcolor = \"#666666\",\r\n\tpercent, percentValue;\r\n\r\n\tif(isNaN(value) || typeof cell.getValue() === \"undefined\"){\r\n\t\treturn;\r\n\t}\r\n\r\n\tel.classList.add(\"tabulator-traffic-light\");\r\n\r\n\t//make sure value is in range\r\n\tpercentValue = parseFloat(value) <= max ? parseFloat(value) : max;\r\n\tpercentValue = parseFloat(percentValue) >= min ? parseFloat(percentValue) : min;\r\n\r\n\t//workout percentage\r\n\tpercent = (max - min) / 100;\r\n\tpercentValue = Math.round((percentValue - min) / percent);\r\n\r\n\t//set color\r\n\tswitch(typeof colors){\r\n\t\tcase \"string\":\r\n\t\tcolor = colors;\r\n\t\tbreak;\r\n\t\tcase \"function\":\r\n\t\tcolor = colors(value);\r\n\t\tbreak;\r\n\t\tcase \"object\":\r\n\t\tif(Array.isArray(colors)){\r\n\t\t\tvar unit = 100 / colors.length;\r\n\t\t\tvar index = Math.floor(percentValue / unit);\r\n\r\n\t\t\tindex = Math.min(index, colors.length - 1);\r\n\t\t\tindex = Math.max(index, 0);\r\n\t\t\tcolor = colors[index];\r\n\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\tel.style.backgroundColor = color;\r\n\r\n\treturn el;\r\n};","import CellComponent from '../../../../core/cell/CellComponent.js';\r\n\r\nexport default function(cell, formatterParams, onRendered){ //progress bar\r\n\tvar value = this.sanitizeHTML(cell.getValue()) || 0,\r\n\telement = cell.getElement(),\r\n\tmax = formatterParams && formatterParams.max ? formatterParams.max : 100,\r\n\tmin = formatterParams && formatterParams.min ? formatterParams.min : 0,\r\n\tlegendAlign = formatterParams && formatterParams.legendAlign ? formatterParams.legendAlign : \"center\",\r\n\tpercent, percentValue, color, legend, legendColor, top, left, right, bottom;\r\n\r\n\t//make sure value is in range\r\n\tpercentValue = parseFloat(value) <= max ? parseFloat(value) : max;\r\n\tpercentValue = parseFloat(percentValue) >= min ? parseFloat(percentValue) : min;\r\n\r\n\t//workout percentage\r\n\tpercent = (max - min) / 100;\r\n\tpercentValue = Math.round((percentValue - min) / percent);\r\n\r\n\t//set bar color\r\n\tswitch(typeof formatterParams.color){\r\n\t\tcase \"string\":\r\n\t\tcolor = formatterParams.color;\r\n\t\tbreak;\r\n\t\tcase \"function\":\r\n\t\tcolor = formatterParams.color(value);\r\n\t\tbreak;\r\n\t\tcase \"object\":\r\n\t\tif(Array.isArray(formatterParams.color)){\r\n\t\t\tvar unit = 100 / formatterParams.color.length;\r\n\t\t\tvar index = Math.floor(percentValue / unit);\r\n\r\n\t\t\tindex = Math.min(index, formatterParams.color.length - 1);\r\n\t\t\tindex = Math.max(index, 0);\r\n\t\t\tcolor = formatterParams.color[index];\r\n\t\t\tbreak;\r\n\t\t}\r\n\t\tdefault:\r\n\t\tcolor = \"#2DC214\";\r\n\t}\r\n\r\n\t//generate legend\r\n\tswitch(typeof formatterParams.legend){\r\n\t\tcase \"string\":\r\n\t\tlegend = formatterParams.legend;\r\n\t\tbreak;\r\n\t\tcase \"function\":\r\n\t\tlegend = formatterParams.legend(value);\r\n\t\tbreak;\r\n\t\tcase \"boolean\":\r\n\t\tlegend = value;\r\n\t\tbreak;\r\n\t\tdefault:\r\n\t\tlegend = false;\r\n\t}\r\n\r\n\t//set legend color\r\n\tswitch(typeof formatterParams.legendColor){\r\n\t\tcase \"string\":\r\n\t\tlegendColor = formatterParams.legendColor;\r\n\t\tbreak;\r\n\t\tcase \"function\":\r\n\t\tlegendColor = formatterParams.legendColor(value);\r\n\t\tbreak;\r\n\t\tcase \"object\":\r\n\t\tif(Array.isArray(formatterParams.legendColor)){\r\n\t\t\tvar unit = 100 / formatterParams.legendColor.length;\r\n\t\t\tvar index = Math.floor(percentValue / unit);\r\n\r\n\t\t\tindex = Math.min(index, formatterParams.legendColor.length - 1);\r\n\t\t\tindex = Math.max(index, 0);\r\n\t\t\tlegendColor = formatterParams.legendColor[index];\r\n\t\t}\r\n\t\tbreak;\r\n\t\tdefault:\r\n\t\tlegendColor = \"#000\";\r\n\t}\r\n\r\n\telement.style.minWidth = \"30px\";\r\n\telement.style.position = \"relative\";\r\n\r\n\telement.setAttribute(\"aria-label\", percentValue);\r\n\r\n\tvar barEl = document.createElement(\"div\");\r\n\tbarEl.style.display = \"inline-block\";\r\n\tbarEl.style.position = \"relative\";\r\n\tbarEl.style.width = percentValue + \"%\";\r\n\tbarEl.style.backgroundColor = color;\r\n\tbarEl.style.height = \"100%\";\r\n\r\n\tbarEl.setAttribute('data-max', max);\r\n\tbarEl.setAttribute('data-min', min);\r\n\r\n\r\n\tif(legend){\r\n\t\tvar legendEl = document.createElement(\"div\");\r\n\t\tlegendEl.style.position = \"absolute\";\r\n\t\tlegendEl.style.top = \"4px\";\r\n\t\tlegendEl.style.left = 0;\r\n\t\tlegendEl.style.textAlign = legendAlign;\r\n\t\tlegendEl.style.width = \"100%\";\r\n\t\tlegendEl.style.color = legendColor;\r\n\t\tlegendEl.innerHTML = legend;\r\n\t}\r\n\r\n\tonRendered(function(){\r\n\r\n\t\t//handle custom element needed if formatter is to be included in printed/downloaded output\r\n\t\tif(!(cell instanceof CellComponent)){\r\n\t\t\tvar holderEl = document.createElement(\"div\");\r\n\t\t\tholderEl.style.position = \"absolute\";\r\n\t\t\tholderEl.style.top = \"4px\";\r\n\t\t\tholderEl.style.bottom = \"4px\";\r\n\t\t\tholderEl.style.left = \"4px\";\r\n\t\t\tholderEl.style.right = \"4px\";\r\n\r\n\t\t\telement.appendChild(holderEl);\r\n\r\n\t\t\telement = holderEl;\r\n\t\t}\r\n\r\n\t\telement.appendChild(barEl);\r\n\r\n\t\tif(legend){\r\n\t\t\telement.appendChild(legendEl);\r\n\t\t}\r\n\t});\r\n\r\n\treturn \"\";\r\n};","export default function(cell, formatterParams, onRendered){\r\n\tcell.getElement().style.backgroundColor = this.sanitizeHTML(cell.getValue());\r\n\treturn \"\";\r\n};","export default function(cell, formatterParams, onRendered){\r\n\treturn '';\r\n};","export default function(cell, formatterParams, onRendered){\r\n\treturn '';\r\n};","export default function(cell, formatterParams, onRendered){\r\n\treturn this.table.rowManager.activeRows.indexOf(cell.getRow()._getSelf()) + 1;\r\n};","export default function(cell, formatterParams, onRendered){\r\n\tcell.getElement().classList.add(\"tabulator-row-handle\");\r\n\treturn \"
\";\r\n};","export default function(cell, formatterParams, onRendered){\r\n\tvar open = false,\r\n\tel = document.createElement(\"div\"),\r\n\tconfig = cell.getRow()._row.modules.responsiveLayout;\r\n\r\n\tel.classList.add(\"tabulator-responsive-collapse-toggle\");\r\n\tel.innerHTML = \"+-\";\r\n\r\n\tcell.getElement().classList.add(\"tabulator-row-handle\");\r\n\r\n\tfunction toggleList(isOpen){\r\n\t\tvar collapseEl = config.element;\r\n\r\n\t\tconfig.open = isOpen;\r\n\r\n\t\tif(collapseEl){\r\n\r\n\t\t\tif(config.open){\r\n\t\t\t\tel.classList.add(\"open\");\r\n\t\t\t\tcollapseEl.style.display = '';\r\n\t\t\t}else{\r\n\t\t\t\tel.classList.remove(\"open\");\r\n\t\t\t\tcollapseEl.style.display = 'none';\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tel.addEventListener(\"click\", function(e){\r\n\t\te.stopImmediatePropagation();\r\n\t\ttoggleList(!config.open);\r\n\t});\r\n\r\n\ttoggleList(config.open);\r\n\r\n\treturn el;\r\n};","export default function(cell, formatterParams, onRendered){\r\n\tvar checkbox = document.createElement(\"input\");\r\n\r\n\tcheckbox.type = 'checkbox';\r\n\r\n\tif(this.table.modExists(\"selectRow\", true)){\r\n\r\n\t\tcheckbox.addEventListener(\"click\", (e) => {\r\n\t\t\te.stopPropagation();\r\n\t\t});\r\n\r\n\t\tif(typeof cell.getRow == 'function'){\r\n\t\t\tvar row = cell.getRow();\r\n\r\n\t\t\tif(row instanceof RowComponent){\r\n\r\n\t\t\t\tcheckbox.addEventListener(\"change\", (e) => {\r\n\t\t\t\t\trow.toggleSelect();\r\n\t\t\t\t});\r\n\r\n\t\t\t\tcheckbox.checked = row.isSelected && row.isSelected();\r\n\t\t\t\tthis.table.modules.selectRow.registerRowSelectCheckbox(row, checkbox);\r\n\t\t\t}else{\r\n\t\t\t\tcheckbox = \"\";\r\n\t\t\t}\r\n\t\t}else {\r\n\t\t\tcheckbox.addEventListener(\"change\", (e) => {\r\n\t\t\t\tif(this.table.modules.selectRow.selectedRows.length){\r\n\t\t\t\t\tthis.table.deselectRow();\r\n\t\t\t\t}else {\r\n\t\t\t\t\tthis.table.selectRow(formatterParams.rowRange);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tthis.table.modules.selectRow.registerHeaderSelectCheckbox(checkbox);\r\n\t\t}\r\n\t}\r\n\r\n\treturn checkbox;\r\n};","import Module from '../../core/Module.js';\r\n\r\nimport defaultFormatters from './defaults/formatters.js';\r\n\r\nclass Format extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.registerColumnOption(\"formatter\");\r\n\t\tthis.registerColumnOption(\"formatterParams\");\r\n\r\n\t\tthis.registerColumnOption(\"formatterPrint\");\r\n\t\tthis.registerColumnOption(\"formatterPrintParams\");\r\n\t\tthis.registerColumnOption(\"formatterClipboard\");\r\n\t\tthis.registerColumnOption(\"formatterClipboardParams\");\r\n\t\tthis.registerColumnOption(\"formatterHtmlOutput\");\r\n\t\tthis.registerColumnOption(\"formatterHtmlOutputParams\");\r\n\t\tthis.registerColumnOption(\"titleFormatter\");\r\n\t\tthis.registerColumnOption(\"titleFormatterParams\");\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tthis.subscribe(\"cell-format\", this.formatValue.bind(this));\r\n\t\tthis.subscribe(\"cell-rendered\", this.cellRendered.bind(this));\r\n\t\tthis.subscribe(\"column-layout\", this.initializeColumn.bind(this));\r\n\t\tthis.subscribe(\"column-format\", this.formatHeader.bind(this));\r\n\t}\r\n\r\n\t//initialize column formatter\r\n\tinitializeColumn(column){\r\n\t\tcolumn.modules.format = this.lookupFormatter(column, \"\");\r\n\r\n\t\tif(typeof column.definition.formatterPrint !== \"undefined\"){\r\n\t\t\tcolumn.modules.format.print = this.lookupFormatter(column, \"Print\");\r\n\t\t}\r\n\r\n\t\tif(typeof column.definition.formatterClipboard !== \"undefined\"){\r\n\t\t\tcolumn.modules.format.clipboard = this.lookupFormatter(column, \"Clipboard\");\r\n\t\t}\r\n\r\n\t\tif(typeof column.definition.formatterHtmlOutput !== \"undefined\"){\r\n\t\t\tcolumn.modules.format.htmlOutput = this.lookupFormatter(column, \"HtmlOutput\");\r\n\t\t}\r\n\t}\r\n\r\n\tlookupFormatter(column, type){\r\n\t\tvar config = {params:column.definition[\"formatter\" + type + \"Params\"] || {}},\r\n\t\tformatter = column.definition[\"formatter\" + type];\r\n\r\n\t\t//set column formatter\r\n\t\tswitch(typeof formatter){\r\n\t\t\tcase \"string\":\r\n\t\t\tif(Format.formatters[formatter]){\r\n\t\t\t\tconfig.formatter = Format.formatters[formatter];\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Formatter Error - No such formatter found: \", formatter);\r\n\t\t\t\tconfig.formatter = Format.formatters.plaintext;\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"function\":\r\n\t\t\tconfig.formatter = formatter;\r\n\t\t\tbreak;\r\n\r\n\t\t\tdefault:\r\n\t\t\tconfig.formatter = Format.formatters.plaintext;\r\n\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\treturn config;\r\n\t}\r\n\r\n\tcellRendered(cell){\r\n\t\tif(cell.modules.format && cell.modules.format.renderedCallback && !cell.modules.format.rendered){\r\n\t\t\tcell.modules.format.renderedCallback();\r\n\t\t\tcell.modules.format.rendered = true;\r\n\t\t}\r\n\t}\r\n\r\n\t//return a formatted value for a column header\r\n\tformatHeader(column, title, el){\r\n\t\tvar formatter, params, onRendered, mockCell;\r\n\r\n\t\tif(column.definition.titleFormatter){\r\n\t\t\tformatter = this.getFormatter(column.definition.titleFormatter);\r\n\r\n\t\t\tonRendered = (callback) => {\r\n\t\t\t\tcolumn.titleFormatterRendered = callback;\r\n\t\t\t};\r\n\r\n\t\t\tmockCell = {\r\n\t\t\t\tgetValue:function(){\r\n\t\t\t\t\treturn title;\r\n\t\t\t\t},\r\n\t\t\t\tgetElement:function(){\r\n\t\t\t\t\treturn el;\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\tparams = column.definition.titleFormatterParams || {};\r\n\r\n\t\t\tparams = typeof params === \"function\" ? params() : params;\r\n\r\n\t\t\treturn formatter.call(this, mockCell, params, onRendered);\r\n\t\t}else{\r\n\t\t\treturn title;\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t//return a formatted value for a cell\r\n\tformatValue(cell){\r\n\t\tvar component = cell.getComponent(),\r\n\t\tparams = typeof cell.column.modules.format.params === \"function\" ? cell.column.modules.format.params(component) : cell.column.modules.format.params;\r\n\r\n\t\tfunction onRendered(callback){\r\n\t\t\tif(!cell.modules.format){\r\n\t\t\t\tcell.modules.format = {};\r\n\t\t\t}\r\n\r\n\t\t\tcell.modules.format.renderedCallback = callback;\r\n\t\t\tcell.modules.format.rendered = false;\r\n\t\t}\r\n\r\n\t\treturn cell.column.modules.format.formatter.call(this, component, params, onRendered);\r\n\t}\r\n\r\n\tformatExportValue(cell, type){\r\n\t\tvar formatter = cell.column.modules.format[type],\r\n\t\tparams;\r\n\r\n\t\tif(formatter){\r\n\t\t\tparams = typeof formatter.params === \"function\" ? formatter.params(component) : formatter.params;\r\n\r\n\t\t\tfunction onRendered(callback){\r\n\t\t\t\tif(!cell.modules.format){\r\n\t\t\t\t\tcell.modules.format = {};\r\n\t\t\t\t}\r\n\r\n\t\t\t\tcell.modules.format.renderedCallback = callback;\r\n\t\t\t\tcell.modules.format.rendered = false;\r\n\t\t\t}\r\n\r\n\t\t\treturn formatter.formatter.call(this, cell.getComponent(), params, onRendered);\r\n\r\n\t\t}else{\r\n\t\t\treturn this.formatValue(cell);\r\n\t\t}\r\n\t}\r\n\r\n\tsanitizeHTML(value){\r\n\t\tif(value){\r\n\t\t\tvar entityMap = {\r\n\t\t\t\t'&': '&',\r\n\t\t\t\t'<': '<',\r\n\t\t\t\t'>': '>',\r\n\t\t\t\t'\"': '"',\r\n\t\t\t\t\"'\": ''',\r\n\t\t\t\t'/': '/',\r\n\t\t\t\t'`': '`',\r\n\t\t\t\t'=': '='\r\n\t\t\t};\r\n\r\n\t\t\treturn String(value).replace(/[&<>\"'`=\\/]/g, function (s) {\r\n\t\t\t\treturn entityMap[s];\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\treturn value;\r\n\t\t}\r\n\t}\r\n\r\n\temptyToSpace(value){\r\n\t\treturn value === null || typeof value === \"undefined\" || value === \"\" ? \" \" : value;\r\n\t}\r\n\r\n\t//get formatter for cell\r\n\tgetFormatter(formatter){\r\n\t\tvar formatter;\r\n\r\n\t\tswitch(typeof formatter){\r\n\t\t\tcase \"string\":\r\n\t\t\tif(Format.formatters[formatter]){\r\n\t\t\t\tformatter = Format.formatters[formatter]\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Formatter Error - No such formatter found: \", formatter);\r\n\t\t\t\tformatter = Format.formatters.plaintext;\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"function\":\r\n\t\t\tformatter = formatter;\r\n\t\t\tbreak;\r\n\r\n\t\t\tdefault:\r\n\t\t\tformatter = Format.formatters.plaintext;\r\n\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\treturn formatter;\r\n\t}\r\n}\r\n\r\nFormat.moduleName = \"format\";\r\n\r\n//load defaults\r\nFormat.formatters = defaultFormatters;\r\n\r\nexport default Format;","import Module from '../../core/Module.js';\r\n\r\nclass FrozenColumns extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.leftColumns = [];\r\n\t\tthis.rightColumns = [];\r\n\t\tthis.leftMargin = 0;\r\n\t\tthis.rightMargin = 0;\r\n\t\tthis.rightPadding = 0;\r\n\t\tthis.initializationMode = \"left\";\r\n\t\tthis.active = false;\r\n\t\tthis.scrollEndTimer = false;\r\n\r\n\t\tthis.registerColumnOption(\"frozen\");\r\n\t}\r\n\r\n\t//reset initial state\r\n\treset(){\r\n\t\tthis.initializationMode = \"left\";\r\n\t\tthis.leftColumns = [];\r\n\t\tthis.rightColumns = [];\r\n\t\tthis.leftMargin = 0;\r\n\t\tthis.rightMargin = 0;\r\n\t\tthis.rightMargin = 0;\r\n\t\tthis.active = false;\r\n\r\n\t\tthis.table.columnManager.headersElement.style.marginLeft = 0;\r\n\t\tthis.table.columnManager.element.style.paddingRight = 0;\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tthis.subscribe(\"cell-layout\", this.layoutCell.bind(this));\r\n\t\tthis.subscribe(\"column-init\", this.initializeColumn.bind(this));\r\n\t\tthis.subscribe(\"column-width\", this.layout.bind(this));\r\n\t\tthis.subscribe(\"row-layout-before\", this.layoutRow.bind(this));\r\n\t\tthis.subscribe(\"table-layout\", this.layout.bind(this));\r\n\t\tthis.subscribe(\"scroll-horizontal\", this.scrollHorizontal.bind(this));\r\n\t\tthis.subscribe(\"columns-loading\", this.reset.bind(this));\r\n\t\tthis.subscribe(\"table-redraw\", this.layout.bind(this));\r\n\t}\r\n\r\n\tlayoutCell(cell){\r\n\t\tthis.layoutElement(cell.element, cell.column)\r\n\t}\r\n\r\n\t//initialize specific column\r\n\tinitializeColumn(column){\r\n\t\tvar config = {margin:0, edge:false};\r\n\r\n\t\tif(!column.isGroup){\r\n\r\n\t\t\tif(this.frozenCheck(column)){\r\n\r\n\t\t\t\tconfig.position = this.initializationMode;\r\n\r\n\t\t\t\tif(this.initializationMode == \"left\"){\r\n\t\t\t\t\tthis.leftColumns.push(column);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tthis.rightColumns.unshift(column);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.active = true;\r\n\r\n\t\t\t\tcolumn.modules.frozen = config;\r\n\t\t\t}else{\r\n\t\t\t\tthis.initializationMode = \"right\";\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tfrozenCheck(column){\r\n\t\tvar frozen = false;\r\n\r\n\t\tif(column.parent.isGroup && column.definition.frozen){\r\n\t\t\tconsole.warn(\"Frozen Column Error - Parent column group must be frozen, not individual columns or sub column groups\");\r\n\t\t}\r\n\r\n\t\tif(column.parent.isGroup){\r\n\t\t\treturn this.frozenCheck(column.parent);\r\n\t\t}else{\r\n\t\t\treturn column.definition.frozen;\r\n\t\t}\r\n\r\n\t\treturn frozen;\r\n\t}\r\n\r\n\t//quick layout to smooth horizontal scrolling\r\n\tscrollHorizontal(){\r\n\t\tvar rows;\r\n\r\n\t\tif(this.active){\r\n\t\t\tclearTimeout(this.scrollEndTimer);\r\n\r\n\t\t\t//layout all rows after scroll is complete\r\n\t\t\tthis.scrollEndTimer = setTimeout(() => {\r\n\t\t\t\tthis.layout();\r\n\t\t\t}, 100);\r\n\r\n\t\t\trows = this.table.rowManager.getVisibleRows();\r\n\r\n\t\t\tthis.calcMargins();\r\n\r\n\t\t\tthis.layoutColumnPosition();\r\n\r\n\t\t\tthis.layoutCalcRows();\r\n\r\n\t\t\trows.forEach((row) => {\r\n\t\t\t\tif(row.type === \"row\"){\r\n\t\t\t\t\tthis.layoutRow(row);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tthis.table.rowManager.tableElement.style.marginRight = this.rightMargin;\r\n\t\t}\r\n\t}\r\n\r\n\t//calculate margins for rows\r\n\tcalcMargins(){\r\n\t\tthis.leftMargin = this._calcSpace(this.leftColumns, this.leftColumns.length) + \"px\";\r\n\t\tthis.table.columnManager.headersElement.style.marginLeft = this.leftMargin;\r\n\r\n\t\tthis.rightMargin = this._calcSpace(this.rightColumns, this.rightColumns.length) + \"px\";\r\n\t\tthis.table.columnManager.element.style.paddingRight = this.rightMargin;\r\n\r\n\t\t//calculate right frozen columns\r\n\t\tthis.rightPadding = this.table.rowManager.element.clientWidth + this.table.columnManager.scrollLeft;\r\n\t}\r\n\r\n\t//layout calculation rows\r\n\tlayoutCalcRows(){\r\n\t\tif(this.table.modExists(\"columnCalcs\")){\r\n\t\t\tif(this.table.modules.columnCalcs.topInitialized && this.table.modules.columnCalcs.topRow){\r\n\t\t\t\tthis.layoutRow(this.table.modules.columnCalcs.topRow);\r\n\t\t\t}\r\n\t\t\tif(this.table.modules.columnCalcs.botInitialized && this.table.modules.columnCalcs.botRow){\r\n\t\t\t\tthis.layoutRow(this.table.modules.columnCalcs.botRow);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//calculate column positions and layout headers\r\n\tlayoutColumnPosition(allCells){\r\n\r\n\t\tvar leftParents = [];\r\n\r\n\t\tthis.leftColumns.forEach((column, i) => {\r\n\t\t\tcolumn.modules.frozen.margin = (this._calcSpace(this.leftColumns, i) + this.table.columnManager.scrollLeft) + \"px\";\r\n\r\n\t\t\tif(i == this.leftColumns.length - 1){\r\n\t\t\t\tcolumn.modules.frozen.edge = true;\r\n\t\t\t}else{\r\n\t\t\t\tcolumn.modules.frozen.edge = false;\r\n\t\t\t}\r\n\r\n\t\t\tif(column.parent.isGroup){\r\n\t\t\t\tvar parentEl = this.getColGroupParentElement(column);\r\n\t\t\t\tif(!leftParents.includes(parentEl)){\r\n\t\t\t\t\tthis.layoutElement(parentEl, column);\r\n\t\t\t\t\tleftParents.push(parentEl);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(column.modules.frozen.edge){\r\n\t\t\t\t\tparentEl.classList.add(\"tabulator-frozen-\" + column.modules.frozen.position);\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tthis.layoutElement(column.getElement(), column);\r\n\t\t\t}\r\n\r\n\t\t\tif(allCells){\r\n\t\t\t\tcolumn.cells.forEach((cell) => {\r\n\t\t\t\t\tthis.layoutElement(cell.getElement(true), column);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tthis.rightColumns.forEach((column, i) => {\r\n\t\t\tcolumn.modules.frozen.margin = (this.rightPadding - this._calcSpace(this.rightColumns, i + 1)) + \"px\";\r\n\r\n\t\t\tif(i == this.rightColumns.length - 1){\r\n\t\t\t\tcolumn.modules.frozen.edge = true;\r\n\t\t\t}else{\r\n\t\t\t\tcolumn.modules.frozen.edge = false;\r\n\t\t\t}\r\n\r\n\r\n\t\t\tif(column.parent.isGroup){\r\n\t\t\t\tthis.layoutElement(this.getColGroupParentElement(column), column);\r\n\t\t\t}else{\r\n\t\t\t\tthis.layoutElement(column.getElement(), column);\r\n\t\t\t}\r\n\r\n\t\t\tif(allCells){\r\n\t\t\t\tcolumn.cells.forEach((cell) => {\r\n\t\t\t\t\tthis.layoutElement(cell.getElement(true), column);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tgetColGroupParentElement(column){\r\n\t\treturn column.parent.isGroup ? this.getColGroupParentElement(column.parent) : column.getElement();\r\n\t}\r\n\r\n\t//layout columns appropropriatly\r\n\tlayout(){\r\n\t\tvar rightMargin = 0;\r\n\r\n\t\tif(this.active){\r\n\r\n\t\t\t//calculate row padding\r\n\t\t\tthis.calcMargins();\r\n\r\n\t\t\tthis.table.rowManager.getDisplayRows().forEach((row) =>{\r\n\t\t\t\tif(row.type === \"row\"){\r\n\t\t\t\t\tthis.layoutRow(row);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tthis.layoutCalcRows();\r\n\r\n\t\t\t//calculate left columns\r\n\t\t\tthis.layoutColumnPosition(true);\r\n\r\n\t\t\tthis.table.rowManager.tableElement.style.marginRight = this.rightMargin;\r\n\t\t}\r\n\t}\r\n\r\n\tlayoutRow(row){\r\n\t\tvar rowEl = row.getElement();\r\n\r\n\t\trowEl.style.paddingLeft = this.leftMargin;\r\n\r\n\t\tthis.leftColumns.forEach((column) => {\r\n\t\t\tvar cell = row.getCell(column);\r\n\r\n\t\t\tif(cell){\r\n\t\t\t\tthis.layoutElement(cell.getElement(true), column);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tthis.rightColumns.forEach((column) => {\r\n\t\t\tvar cell = row.getCell(column);\r\n\r\n\t\t\tif(cell){\r\n\t\t\t\tthis.layoutElement(cell.getElement(true), column);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tlayoutElement(element, column){\r\n\r\n\t\tif(column.modules.frozen){\r\n\t\t\telement.style.position = \"absolute\";\r\n\t\t\telement.style.left = column.modules.frozen.margin;\r\n\r\n\t\t\telement.classList.add(\"tabulator-frozen\");\r\n\r\n\t\t\tif(column.modules.frozen.edge){\r\n\t\t\t\telement.classList.add(\"tabulator-frozen-\" + column.modules.frozen.position);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t_calcSpace(columns, index){\r\n\t\tvar width = 0;\r\n\r\n\t\tfor (let i = 0; i < index; i++){\r\n\t\t\tif(columns[i].visible){\r\n\t\t\t\twidth += columns[i].getWidth();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn width;\r\n\t}\r\n}\r\n\r\nFrozenColumns.moduleName = \"frozenColumns\";\r\n\r\nexport default FrozenColumns;","import Module from '../../core/Module.js';\r\n\r\nclass FrozenRows extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.topElement = document.createElement(\"div\");\r\n\t\tthis.rows = [];\r\n\r\n\t\t//register component functions\r\n\t\tthis.registerComponentFunction(\"row\", \"freeze\", this.freezeRow.bind(this));\r\n\t\tthis.registerComponentFunction(\"row\", \"unfreeze\", this.unfreezeRow.bind(this));\r\n\t\tthis.registerComponentFunction(\"row\", \"isFrozen\", this.isRowFrozen.bind(this));\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tthis.rows = [];\r\n\r\n\t\tthis.topElement.classList.add(\"tabulator-frozen-rows-holder\");\r\n\r\n\t\t// this.table.columnManager.element.append(this.topElement);\r\n\t\tthis.table.columnManager.getElement().insertBefore(this.topElement, this.table.columnManager.headersElement.nextSibling);\r\n\r\n\t\tthis.subscribe(\"row-deleting\", this.detachRow.bind(this));\r\n\r\n\t\tthis.registerDisplayHandler(this.getRows.bind(this), 10);\r\n\t}\r\n\r\n\tisRowFrozen(row){\r\n\t\tvar index = this.rows.indexOf(row);\r\n\t\treturn index > -1;\r\n\t}\r\n\r\n\tisFrozen(){\r\n\t\treturn !!this.rows.length;\r\n\t}\r\n\r\n\t//filter frozen rows out of display data\r\n\tgetRows(rows){\r\n\t\tvar self = this,\r\n\t\tfrozen = [],\r\n\t\toutput = rows.slice(0);\r\n\r\n\t\tthis.rows.forEach(function(row){\r\n\t\t\tvar index = output.indexOf(row);\r\n\r\n\t\t\tif(index > -1){\r\n\t\t\t\toutput.splice(index, 1);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tfreezeRow(row){\r\n\t\tif(!row.modules.frozen){\r\n\t\t\trow.modules.frozen = true;\r\n\t\t\tthis.topElement.appendChild(row.getElement());\r\n\t\t\trow.initialize();\r\n\t\t\trow.normalizeHeight();\r\n\t\t\tthis.table.rowManager.adjustTableSize();\r\n\r\n\t\t\tthis.rows.push(row);\r\n\r\n\t\t\tthis.table.rowManager.refreshActiveData(\"display\");\r\n\r\n\t\t\tthis.styleRows();\r\n\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Freeze Error - Row is already frozen\");\r\n\t\t}\r\n\t}\r\n\r\n\tunfreezeRow(row){\r\n\t\tvar index = this.rows.indexOf(row);\r\n\r\n\t\tif(row.modules.frozen){\r\n\r\n\t\t\trow.modules.frozen = false;\r\n\r\n\t\t\tthis.detachRow(row);\r\n\r\n\t\t\tthis.table.rowManager.adjustTableSize();\r\n\r\n\t\t\tthis.table.rowManager.refreshActiveData(\"display\");\r\n\r\n\t\t\tif(this.rows.length){\r\n\t\t\t\tthis.styleRows();\r\n\t\t\t}\r\n\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Freeze Error - Row is already unfrozen\");\r\n\t\t}\r\n\t}\r\n\r\n\tdetachRow(row){\r\n\t\tvar index = this.rows.indexOf(row);\r\n\r\n\t\tif(index > -1){\r\n\t\t\tvar rowEl = row.getElement();\r\n\t\t\trowEl.parentNode.removeChild(rowEl);\r\n\r\n\t\t\tthis.rows.splice(index, 1);\r\n\t\t}\r\n\t}\r\n\r\n\tstyleRows(row){\r\n\t\tthis.rows.forEach((row, i) => {\r\n\t\t\tthis.table.rowManager.styleRow(row, i);\r\n\t\t});\r\n\t}\r\n}\r\n\r\nFrozenRows.moduleName = \"frozenRows\";\r\n\r\nexport default FrozenRows;","//public group object\r\nclass GroupComponent {\r\n\tconstructor (group){\r\n\t\tthis._group = group;\r\n\t\tthis.type = \"GroupComponent\";\r\n\r\n\t\treturn new Proxy(this, {\r\n\t\t\tget: function(target, name, receiver) {\r\n\t\t\t\tif (typeof target[name] !== \"undefined\") {\r\n\t\t\t\t\treturn target[name];\r\n\t\t\t\t}else{\r\n\t\t\t\t\treturn target._group.table.componentFunctionBinder.handle(\"row\", target._group, name)\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t})\r\n\t}\r\n\r\n\tgetKey(){\r\n\t\treturn this._group.key;\r\n\t}\r\n\r\n\tgetField(){\r\n\t\treturn this._group.field;\r\n\t}\r\n\r\n\tgetElement(){\r\n\t\treturn this._group.element;\r\n\t}\r\n\r\n\tgetRows(){\r\n\t\treturn this._group.getRows(true);\r\n\t}\r\n\r\n\tgetSubGroups(){\r\n\t\treturn this._group.getSubGroups(true);\r\n\t}\r\n\r\n\tgetParentGroup(){\r\n\t\treturn this._group.parent ? this._group.parent.getComponent() : false;\r\n\t}\r\n\r\n\tisVisible(){\r\n\t\treturn this._group.visible;\r\n\t}\r\n\r\n\tshow(){\r\n\t\tthis._group.show();\r\n\t}\r\n\r\n\thide(){\r\n\t\tthis._group.hide();\r\n\t}\r\n\r\n\ttoggle(){\r\n\t\tthis._group.toggleVisibility();\r\n\t}\r\n\r\n\t_getSelf(){\r\n\t\treturn this._group;\r\n\t}\r\n\r\n\tgetTable(){\r\n\t\treturn this._group.groupManager.table;\r\n\t}\r\n}\r\n\r\nexport default GroupComponent;","import Helpers from '../../core/tools/Helpers.js';\r\nimport GroupComponent from './GroupComponent.js';\r\n\r\n//Group functions\r\nclass Group{\r\n\r\n\tconstructor(groupManager, parent, level, key, field, generator, oldGroup){\r\n\t\tthis.groupManager = groupManager;\r\n\t\tthis.parent = parent;\r\n\t\tthis.key = key;\r\n\t\tthis.level = level;\r\n\t\tthis.field = field;\r\n\t\tthis.hasSubGroups = level < (groupManager.groupIDLookups.length - 1);\r\n\t\tthis.addRow = this.hasSubGroups ? this._addRowToGroup : this._addRow;\r\n\t\tthis.type = \"group\"; //type of element\r\n\t\tthis.old = oldGroup;\r\n\t\tthis.rows = [];\r\n\t\tthis.groups = [];\r\n\t\tthis.groupList = [];\r\n\t\tthis.generator = generator;\r\n\t\tthis.elementContents = false;\r\n\t\tthis.height = 0;\r\n\t\tthis.outerHeight = 0;\r\n\t\tthis.initialized = false;\r\n\t\tthis.calcs = {};\r\n\t\tthis.initialized = false;\r\n\t\tthis.modules = {};\r\n\t\tthis.arrowElement = false;\r\n\r\n\t\tthis.visible = oldGroup ? oldGroup.visible : (typeof groupManager.startOpen[level] !== \"undefined\" ? groupManager.startOpen[level] : groupManager.startOpen[0]);\r\n\r\n\t\tthis.component = null;\r\n\r\n\t\tthis.createElements();\r\n\t\tthis.addBindings();\r\n\r\n\t\tthis.createValueGroups();\r\n\t}\r\n\r\n\twipe(){\r\n\t\tif(this.groupList.length){\r\n\t\t\tthis.groupList.forEach(function(group){\r\n\t\t\t\tgroup.wipe();\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tthis.element = false;\r\n\t\t\tthis.arrowElement = false;\r\n\t\t\tthis.elementContents = false;\r\n\t\t}\r\n\t}\r\n\r\n\tcreateElements(){\r\n\t\tvar arrow = document.createElement(\"div\");\r\n\t\tarrow.classList.add(\"tabulator-arrow\");\r\n\r\n\t\tthis.element = document.createElement(\"div\");\r\n\t\tthis.element.classList.add(\"tabulator-row\");\r\n\t\tthis.element.classList.add(\"tabulator-group\");\r\n\t\tthis.element.classList.add(\"tabulator-group-level-\" + this.level);\r\n\t\tthis.element.setAttribute(\"role\", \"rowgroup\");\r\n\r\n\t\tthis.arrowElement = document.createElement(\"div\");\r\n\t\tthis.arrowElement.classList.add(\"tabulator-group-toggle\");\r\n\t\tthis.arrowElement.appendChild(arrow);\r\n\r\n\t\t//setup movable rows\r\n\t\tif(this.groupManager.table.options.movableRows !== false && this.groupManager.table.modExists(\"moveRow\")){\r\n\t\t\tthis.groupManager.table.modules.moveRow.initializeGroupHeader(this);\r\n\t\t}\r\n\t}\r\n\r\n\tcreateValueGroups(){\r\n\t\tvar level = this.level + 1;\r\n\t\tif(this.groupManager.allowedValues && this.groupManager.allowedValues[level]){\r\n\t\t\tthis.groupManager.allowedValues[level].forEach((value) => {\r\n\t\t\t\tthis._createGroup(value, level);\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\taddBindings(){\r\n\t\tvar dblTap,\ttapHold, tap, toggleElement;\r\n\r\n\t\tif ((this.groupManager.table.options.groupContextMenu || this.groupManager.table.options.groupClickMenu) && this.groupManager.table.modExists(\"menu\")){\r\n\t\t\tthis.groupManager.table.modules.menu.initializeGroup.call(this.groupManager.table.modules.menu, this);\r\n\t\t}\r\n\r\n\t\tif (this.groupManager.table.options.groupTap){\r\n\t\t\ttap = false;\r\n\r\n\t\t\tthis.element.addEventListener(\"touchstart\", (e) => {\r\n\t\t\t\ttap = true;\r\n\t\t\t}, {passive: true});\r\n\r\n\t\t\tthis.element.addEventListener(\"touchend\", (e) => {\r\n\t\t\t\tif(tap){\r\n\t\t\t\t\tthis.groupManager.table.options.groupTap(e, this.getComponent());\r\n\t\t\t\t}\r\n\r\n\t\t\t\ttap = false;\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif (this.groupManager.table.options.groupDblTap){\r\n\t\t\tdblTap = null;\r\n\r\n\t\t\tthis.element.addEventListener(\"touchend\", (e) => {\r\n\t\t\t\tif(dblTap){\r\n\t\t\t\t\tclearTimeout(dblTap);\r\n\t\t\t\t\tdblTap = null;\r\n\r\n\t\t\t\t\tthis.groupManager.table.options.groupDblTap(e, this.getComponent());\r\n\t\t\t\t}else{\r\n\r\n\t\t\t\t\tdblTap = setTimeout(() => {\r\n\t\t\t\t\t\tclearTimeout(dblTap);\r\n\t\t\t\t\t\tdblTap = null;\r\n\t\t\t\t\t}, 300);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif (this.groupManager.table.options.groupTapHold){\r\n\t\t\ttapHold = null;\r\n\r\n\t\t\tthis.element.addEventListener(\"touchstart\", (e) => {\r\n\t\t\t\tclearTimeout(tapHold);\r\n\r\n\t\t\t\ttapHold = setTimeout(() => {\r\n\t\t\t\t\tclearTimeout(tapHold);\r\n\t\t\t\t\ttapHold = null;\r\n\t\t\t\t\ttap = false;\r\n\t\t\t\t\tthis.groupManager.table.options.groupTapHold(e, this.getComponent());\r\n\t\t\t\t}, 1000);\r\n\r\n\t\t\t}, {passive: true});\r\n\r\n\t\t\tthis.element.addEventListener(\"touchend\", (e) => {\r\n\t\t\t\tclearTimeout(tapHold);\r\n\t\t\t\ttapHold = null;\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif(this.groupManager.table.options.groupToggleElement){\r\n\t\t\ttoggleElement = this.groupManager.table.options.groupToggleElement == \"arrow\" ? this.arrowElement : this.element;\r\n\r\n\t\t\ttoggleElement.addEventListener(\"click\", (e) => {\r\n\t\t\t\te.stopPropagation();\r\n\t\t\t\te.stopImmediatePropagation();\r\n\t\t\t\tthis.toggleVisibility();\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\t_createGroup(groupID, level){\r\n\t\tvar groupKey = level + \"_\" + groupID;\r\n\t\tvar group = new Group(this.groupManager, this, level, groupID, this.groupManager.groupIDLookups[level].field, this.groupManager.headerGenerator[level] || this.groupManager.headerGenerator[0], this.old ? this.old.groups[groupKey] : false);\r\n\r\n\t\tthis.groups[groupKey] = group;\r\n\t\tthis.groupList.push(group);\r\n\t}\r\n\r\n\t_addRowToGroup(row){\r\n\r\n\t\tvar level = this.level + 1;\r\n\r\n\t\tif(this.hasSubGroups){\r\n\t\t\tvar groupID = this.groupManager.groupIDLookups[level].func(row.getData()),\r\n\t\t\tgroupKey = level + \"_\" + groupID;\r\n\r\n\t\t\tif(this.groupManager.allowedValues && this.groupManager.allowedValues[level]){\r\n\t\t\t\tif(this.groups[groupKey]){\r\n\t\t\t\t\tthis.groups[groupKey].addRow(row);\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tif(!this.groups[groupKey]){\r\n\t\t\t\t\tthis._createGroup(groupID, level);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.groups[groupKey].addRow(row);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t_addRow(row){\r\n\t\tthis.rows.push(row);\r\n\t\trow.modules.group = this;\r\n\t}\r\n\r\n\tinsertRow(row, to, after){\r\n\t\tvar data = this.conformRowData({});\r\n\r\n\t\trow.updateData(data);\r\n\r\n\t\tvar toIndex = this.rows.indexOf(to);\r\n\r\n\t\tif(toIndex > -1){\r\n\t\t\tif(after){\r\n\t\t\t\tthis.rows.splice(toIndex+1, 0, row);\r\n\t\t\t}else{\r\n\t\t\t\tthis.rows.splice(toIndex, 0, row);\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tif(after){\r\n\t\t\t\tthis.rows.push(row);\r\n\t\t\t}else{\r\n\t\t\t\tthis.rows.unshift(row);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\trow.modules.group = this;\r\n\r\n\t\tthis.generateGroupHeaderContents();\r\n\r\n\t\tif(this.groupManager.table.modExists(\"columnCalcs\") && this.groupManager.table.options.columnCalcs != \"table\"){\r\n\t\t\tthis.groupManager.table.modules.columnCalcs.recalcGroup(this);\r\n\t\t}\r\n\r\n\t\tthis.groupManager.updateGroupRows(true);\r\n\t}\r\n\r\n\tscrollHeader(left){\r\n\t\tthis.arrowElement.style.marginLeft = left;\r\n\r\n\t\tthis.groupList.forEach(function(child){\r\n\t\t\tchild.scrollHeader(left);\r\n\t\t});\r\n\t}\r\n\r\n\tgetRowIndex(row){}\r\n\r\n\t//update row data to match grouping contraints\r\n\tconformRowData(data){\r\n\t\tif(this.field){\r\n\t\t\tdata[this.field] = this.key;\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Data Conforming Error - Cannot conform row data to match new group as groupBy is a function\");\r\n\t\t}\r\n\r\n\t\tif(this.parent){\r\n\t\t\tdata = this.parent.conformRowData(data);\r\n\t\t}\r\n\r\n\t\treturn data;\r\n\t}\r\n\r\n\tremoveRow(row){\r\n\t\tvar index = this.rows.indexOf(row);\r\n\t\tvar el = row.getElement();\r\n\r\n\r\n\t\tif(index > -1){\r\n\t\t\tthis.rows.splice(index, 1);\r\n\t\t}\r\n\r\n\t\tif(!this.groupManager.table.options.groupValues && !this.rows.length){\r\n\t\t\tif(this.parent){\r\n\t\t\t\tthis.parent.removeGroup(this);\r\n\t\t\t}else{\r\n\t\t\t\tthis.groupManager.removeGroup(this);\r\n\t\t\t}\r\n\r\n\t\t\tthis.groupManager.updateGroupRows(true);\r\n\t\t}else{\r\n\r\n\t\t\tif(el.parentNode){\r\n\t\t\t\tel.parentNode.removeChild(el);\r\n\t\t\t}\r\n\r\n\t\t\tthis.generateGroupHeaderContents();\r\n\r\n\t\t\tif(this.groupManager.table.modExists(\"columnCalcs\") && this.groupManager.table.options.columnCalcs != \"table\"){\r\n\t\t\t\tthis.groupManager.table.modules.columnCalcs.recalcGroup(this);\r\n\t\t\t}\r\n\r\n\t\t}\r\n\t}\r\n\r\n\tremoveGroup(group){\r\n\t\tvar groupKey = group.level + \"_\" + group.key,\r\n\t\tindex;\r\n\r\n\t\tif(this.groups[groupKey]){\r\n\t\t\tdelete this.groups[groupKey];\r\n\r\n\t\t\tindex = this.groupList.indexOf(group);\r\n\r\n\t\t\tif(index > -1){\r\n\t\t\t\tthis.groupList.splice(index, 1);\r\n\t\t\t}\r\n\r\n\t\t\tif(!this.groupList.length){\r\n\t\t\t\tif(this.parent){\r\n\t\t\t\t\tthis.parent.removeGroup(this);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tthis.groupManager.removeGroup(this);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tgetHeadersAndRows(noCalc){\r\n\t\tvar output = [];\r\n\r\n\t\toutput.push(this);\r\n\r\n\t\tthis._visSet();\r\n\r\n\t\tif(this.visible){\r\n\t\t\tif(this.groupList.length){\r\n\t\t\t\tthis.groupList.forEach(function(group){\r\n\t\t\t\t\toutput = output.concat(group.getHeadersAndRows(noCalc));\r\n\t\t\t\t});\r\n\r\n\t\t\t}else{\r\n\t\t\t\tif(!noCalc && this.groupManager.table.options.columnCalcs != \"table\" && this.groupManager.table.modExists(\"columnCalcs\") && this.groupManager.table.modules.columnCalcs.hasTopCalcs()){\r\n\t\t\t\t\tif(this.calcs.top){\r\n\t\t\t\t\t\tthis.calcs.top.detachElement();\r\n\t\t\t\t\t\tthis.calcs.top.deleteCells();\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tthis.calcs.top = this.groupManager.table.modules.columnCalcs.generateTopRow(this.rows);\r\n\t\t\t\t\toutput.push(this.calcs.top);\r\n\t\t\t\t}\r\n\r\n\t\t\t\toutput = output.concat(this.rows);\r\n\r\n\t\t\t\tif(!noCalc && this.groupManager.table.options.columnCalcs != \"table\" && this.groupManager.table.modExists(\"columnCalcs\") && this.groupManager.table.modules.columnCalcs.hasBottomCalcs()){\r\n\t\t\t\t\tif(this.calcs.bottom){\r\n\t\t\t\t\t\tthis.calcs.bottom.detachElement();\r\n\t\t\t\t\t\tthis.calcs.bottom.deleteCells();\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tthis.calcs.bottom = this.groupManager.table.modules.columnCalcs.generateBottomRow(this.rows);\r\n\t\t\t\t\toutput.push(this.calcs.bottom);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tif(!this.groupList.length && this.groupManager.table.options.columnCalcs != \"table\"){\r\n\r\n\t\t\t\tif(this.groupManager.table.modExists(\"columnCalcs\")){\r\n\r\n\t\t\t\t\tif(!noCalc && this.groupManager.table.modules.columnCalcs.hasTopCalcs()){\r\n\t\t\t\t\t\tif(this.calcs.top){\r\n\t\t\t\t\t\t\tthis.calcs.top.detachElement();\r\n\t\t\t\t\t\t\tthis.calcs.top.deleteCells();\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif(this.groupManager.table.options.groupClosedShowCalcs){\r\n\t\t\t\t\t\t\tthis.calcs.top = this.groupManager.table.modules.columnCalcs.generateTopRow(this.rows);\r\n\t\t\t\t\t\t\toutput.push(this.calcs.top);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif(!noCalc && this.groupManager.table.modules.columnCalcs.hasBottomCalcs()){\r\n\t\t\t\t\t\tif(this.calcs.bottom){\r\n\t\t\t\t\t\t\tthis.calcs.bottom.detachElement();\r\n\t\t\t\t\t\t\tthis.calcs.bottom.deleteCells();\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif(this.groupManager.table.options.groupClosedShowCalcs){\r\n\t\t\t\t\t\t\tthis.calcs.bottom = this.groupManager.table.modules.columnCalcs.generateBottomRow(this.rows);\r\n\t\t\t\t\t\t\toutput.push(this.calcs.bottom);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tgetData(visible, transform){\r\n\t\tvar output = [];\r\n\r\n\t\tthis._visSet();\r\n\r\n\t\tif(!visible || (visible && this.visible)){\r\n\t\t\tthis.rows.forEach((row) => {\r\n\t\t\t\toutput.push(row.getData(transform || \"data\"));\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tgetRowCount(){\r\n\t\tvar count = 0;\r\n\r\n\t\tif(this.groupList.length){\r\n\t\t\tthis.groupList.forEach((group) => {\r\n\t\t\t\tcount += group.getRowCount();\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tcount = this.rows.length;\r\n\t\t}\r\n\t\treturn count;\r\n\t}\r\n\r\n\ttoggleVisibility(){\r\n\t\tif(this.visible){\r\n\t\t\tthis.hide();\r\n\t\t}else{\r\n\t\t\tthis.show();\r\n\t\t}\r\n\t}\r\n\r\n\thide(){\r\n\t\tthis.visible = false;\r\n\r\n\t\tif(this.groupManager.table.rowManager.getRenderMode() == \"classic\" && !this.groupManager.table.options.pagination){\r\n\r\n\t\t\tthis.element.classList.remove(\"tabulator-group-visible\");\r\n\r\n\t\t\tif(this.groupList.length){\r\n\t\t\t\tthis.groupList.forEach((group) => {\r\n\r\n\t\t\t\t\tvar rows = group.getHeadersAndRows();\r\n\r\n\t\t\t\t\trows.forEach((row) => {\r\n\t\t\t\t\t\trow.detachElement();\r\n\t\t\t\t\t});\r\n\t\t\t\t});\r\n\r\n\t\t\t}else{\r\n\t\t\t\tthis.rows.forEach((row) => {\r\n\t\t\t\t\tvar rowEl = row.getElement();\r\n\t\t\t\t\trowEl.parentNode.removeChild(rowEl);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\tthis.groupManager.table.rowManager.setDisplayRows(this.groupManager.updateGroupRows(), this.groupManager.getDisplayIndex());\r\n\r\n\t\t\tthis.groupManager.table.rowManager.checkClassicModeGroupHeaderWidth();\r\n\r\n\t\t}else{\r\n\t\t\tthis.groupManager.updateGroupRows(true);\r\n\t\t}\r\n\r\n\t\tthis.groupManager.table.externalEvents.dispatch(\"groupVisibilityChanged\", this.getComponent(), false);\r\n\t}\r\n\r\n\tshow(){\r\n\t\tthis.visible = true;\r\n\r\n\t\tif(this.groupManager.table.rowManager.getRenderMode() == \"classic\" && !this.groupManager.table.options.pagination){\r\n\r\n\t\t\tthis.element.classList.add(\"tabulator-group-visible\");\r\n\r\n\t\t\tvar prev = this.getElement();\r\n\r\n\t\t\tif(this.groupList.length){\r\n\t\t\t\tthis.groupList.forEach((group) => {\r\n\t\t\t\t\tvar rows = group.getHeadersAndRows();\r\n\r\n\t\t\t\t\trows.forEach((row) => {\r\n\t\t\t\t\t\tvar rowEl = row.getElement();\r\n\t\t\t\t\t\tprev.parentNode.insertBefore(rowEl, prev.nextSibling);\r\n\t\t\t\t\t\trow.initialize();\r\n\t\t\t\t\t\tprev = rowEl;\r\n\t\t\t\t\t});\r\n\t\t\t\t});\r\n\r\n\t\t\t}else{\r\n\t\t\t\tthis.rows.forEach((row) => {\r\n\t\t\t\t\tvar rowEl = row.getElement();\r\n\t\t\t\t\tprev.parentNode.insertBefore(rowEl, prev.nextSibling);\r\n\t\t\t\t\trow.initialize();\r\n\t\t\t\t\tprev = rowEl;\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\tthis.groupManager.table.rowManager.setDisplayRows(this.groupManager.updateGroupRows(), this.groupManager.getDisplayIndex());\r\n\r\n\t\t\tthis.groupManager.table.rowManager.checkClassicModeGroupHeaderWidth();\r\n\t\t}else{\r\n\t\t\tthis.groupManager.updateGroupRows(true);\r\n\t\t}\r\n\r\n\t\tthis.groupManager.table.externalEvents.dispatch(\"groupVisibilityChanged\", this.getComponent(), true);\r\n\t}\r\n\r\n\t_visSet(){\r\n\t\tvar data = [];\r\n\r\n\t\tif(typeof this.visible == \"function\"){\r\n\r\n\t\t\tthis.rows.forEach(function(row){\r\n\t\t\t\tdata.push(row.getData());\r\n\t\t\t});\r\n\r\n\t\t\tthis.visible = this.visible(this.key, this.getRowCount(), data, this.getComponent());\r\n\t\t}\r\n\t}\r\n\r\n\tgetRowGroup(row){\r\n\t\tvar match = false;\r\n\t\tif(this.groupList.length){\r\n\t\t\tthis.groupList.forEach(function(group){\r\n\t\t\t\tvar result = group.getRowGroup(row);\r\n\r\n\t\t\t\tif(result){\r\n\t\t\t\t\tmatch = result;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tif(this.rows.find(function(item){\r\n\t\t\t\treturn item === row;\r\n\t\t\t})){\r\n\t\t\t\tmatch = this;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn match;\r\n\t}\r\n\r\n\tgetSubGroups(component){\r\n\t\tvar output = [];\r\n\r\n\t\tthis.groupList.forEach(function(child){\r\n\t\t\toutput.push(component ? child.getComponent() : child);\r\n\t\t});\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tgetRows(compoment){\r\n\t\tvar output = [];\r\n\r\n\t\tthis.rows.forEach(function(row){\r\n\t\t\toutput.push(compoment ? row.getComponent() : row);\r\n\t\t});\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tgenerateGroupHeaderContents(){\r\n\t\tvar data = [];\r\n\r\n\t\tthis.rows.forEach(function(row){\r\n\t\t\tdata.push(row.getData());\r\n\t\t});\r\n\r\n\t\tthis.elementContents = this.generator(this.key, this.getRowCount(), data, this.getComponent());\r\n\r\n\t\twhile(this.element.firstChild) this.element.removeChild(this.element.firstChild);\r\n\r\n\t\tif(typeof this.elementContents === \"string\"){\r\n\t\t\tthis.element.innerHTML = this.elementContents;\r\n\t\t}else{\r\n\t\t\tthis.element.appendChild(this.elementContents);\r\n\t\t}\r\n\r\n\t\tthis.element.insertBefore(this.arrowElement, this.element.firstChild);\r\n\t}\r\n\r\n\tgetPath(path = []) {\r\n\t\tpath.unshift(this.key);\r\n\t\tif(this.parent) {\r\n\t\t\tthis.parent.getPath(path);\r\n\t\t}\r\n\t\treturn path;\r\n\t}\r\n\r\n\t////////////// Standard Row Functions //////////////\r\n\r\n\tgetElement(){\r\n\t\tthis.addBindingsd = false;\r\n\r\n\t\tthis._visSet();\r\n\r\n\t\tif(this.visible){\r\n\t\t\tthis.element.classList.add(\"tabulator-group-visible\");\r\n\t\t}else{\r\n\t\t\tthis.element.classList.remove(\"tabulator-group-visible\");\r\n\t\t}\r\n\r\n\t\tfor(var i = 0; i < this.element.childNodes.length; ++i){\r\n\t\t\tthis.element.childNodes[i].parentNode.removeChild(this.element.childNodes[i]);\r\n\t\t}\r\n\r\n\t\tthis.generateGroupHeaderContents();\r\n\r\n\t\t// this.addBindings();\r\n\r\n\t\treturn this.element;\r\n\t}\r\n\r\n\tdetachElement(){\r\n\t\tif (this.element && this.element.parentNode){\r\n\t\t\tthis.element.parentNode.removeChild(this.element);\r\n\t\t}\r\n\t}\r\n\r\n\t//normalize the height of elements in the row\r\n\tnormalizeHeight(){\r\n\t\tthis.setHeight(this.element.clientHeight);\r\n\t}\r\n\r\n\tinitialize(force){\r\n\t\tif(!this.initialized || force){\r\n\t\t\tthis.normalizeHeight();\r\n\t\t\tthis.initialized = true;\r\n\t\t}\r\n\t}\r\n\r\n\treinitialize(){\r\n\t\tthis.initialized = false;\r\n\t\tthis.height = 0;\r\n\r\n\t\tif(Helpers.elVisible(this.element)){\r\n\t\t\tthis.initialize(true);\r\n\t\t}\r\n\t}\r\n\r\n\tsetHeight(height){\r\n\t\tif(this.height != height){\r\n\t\t\tthis.height = height;\r\n\t\t\tthis.outerHeight = this.element.offsetHeight;\r\n\t\t}\r\n\t}\r\n\r\n\t//return rows outer height\r\n\tgetHeight(){\r\n\t\treturn this.outerHeight;\r\n\t}\r\n\r\n\tgetGroup(){\r\n\t\treturn this;\r\n\t}\r\n\r\n\treinitializeHeight(){}\r\n\r\n\tcalcHeight(){}\r\n\r\n\tsetCellHeight(){}\r\n\r\n\tclearCellHeight(){}\r\n\r\n\t//////////////// Object Generation /////////////////\r\n\tgetComponent(){\r\n\t\tif(!this.component){\r\n\t\t\tthis.component = new GroupComponent(this);\r\n\t\t}\r\n\r\n\t\treturn this.component;\r\n\t}\r\n}\r\n\r\nexport default Group;","import Module from '../../core/Module.js';\r\n\r\nimport GroupComponent from './GroupComponent.js';\r\nimport Group from './Group.js';\r\n\r\nclass GroupRows extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.groupIDLookups = false; //enable table grouping and set field to group by\r\n\t\tthis.startOpen = [function(){return false;}]; //starting state of group\r\n\t\tthis.headerGenerator = [function(){return \"\";}];\r\n\t\tthis.groupList = []; //ordered list of groups\r\n\t\tthis.allowedValues = false;\r\n\t\tthis.groups = {}; //hold row groups\r\n\t\tthis.displayIndex = 0; //index in display pipeline\r\n\r\n\t\t//register table options\r\n\t\tthis.registerTableOption(\"groupBy\", false); //enable table grouping and set field to group by\r\n\t\tthis.registerTableOption(\"groupStartOpen\", true); //starting state of group\r\n\t\tthis.registerTableOption(\"groupValues\", false);\r\n\t\tthis.registerTableOption(\"groupUpdateOnCellEdit\", false);\r\n\t\tthis.registerTableOption(\"groupHeader\", false); //header generation function\r\n\t\tthis.registerTableOption(\"groupHeaderPrint\", null);\r\n\t\tthis.registerTableOption(\"groupHeaderClipboard\", null);\r\n\t\tthis.registerTableOption(\"groupHeaderHtmlOutput\", null);\r\n\t\tthis.registerTableOption(\"groupHeaderDownload\", null);\r\n\t\tthis.registerTableOption(\"groupToggleElement\", \"arrow\");\r\n\t\tthis.registerTableOption(\"groupClosedShowCalcs\", false);\r\n\r\n\t\t//register table functions\r\n\t\tthis.registerTableFunction(\"setGroupBy\", this.setGroupBy.bind(this));\r\n\t\tthis.registerTableFunction(\"setGroupValues\", this.setGroupValues.bind(this));\r\n\t\tthis.registerTableFunction(\"setGroupStartOpen\", this.setGroupStartOpen.bind(this));\r\n\t\tthis.registerTableFunction(\"setGroupHeader\", this.setGroupHeader.bind(this));\r\n\t\tthis.registerTableFunction(\"getGroups\", this.userGetGroups.bind(this));\r\n\t\tthis.registerTableFunction(\"getGroupedData\", this.userGetGroupedData.bind(this));\r\n\r\n\t\t//register component functions\r\n\t\tthis.registerComponentFunction(\"row\", \"getGroup\", this.rowGetGroup.bind(this));\r\n\t}\r\n\r\n\t//initialize group configuration\r\n\tinitialize(){\r\n\t\tif(this.table.options.groupBy){\r\n\t\t\tvar groupBy = this.table.options.groupBy,\r\n\t\t\tstartOpen = this.table.options.groupStartOpen,\r\n\t\t\tgroupHeader = this.table.options.groupHeader;\r\n\r\n\t\t\tthis.allowedValues = this.table.options.groupValues;\r\n\r\n\t\t\tif(Array.isArray(groupBy) && Array.isArray(groupHeader) && groupBy.length > groupHeader.length){\r\n\t\t\t\tconsole.warn(\"Error creating group headers, groupHeader array is shorter than groupBy array\");\r\n\t\t\t}\r\n\r\n\t\t\tthis.headerGenerator = [function(){return \"\";}];\r\n\t\t\tthis.startOpen = [function(){return false;}]; //starting state of group\r\n\r\n\t\t\tthis.langBind(\"groups|item\", (langValue, lang) => {\r\n\t\t\t\tthis.headerGenerator[0] = (value, count, data) => { //header layout function\r\n\t\t\t\t\treturn (typeof value === \"undefined\" ? \"\" : value) + \"(\" + count + \" \" + ((count === 1) ? langValue : lang.groups.items) + \")\";\r\n\t\t\t\t};\r\n\t\t\t});\r\n\r\n\t\t\tthis.groupIDLookups = [];\r\n\r\n\t\t\tif(Array.isArray(groupBy) || groupBy){\r\n\t\t\t\tif(this.table.modExists(\"columnCalcs\") && this.table.options.columnCalcs != \"table\" && this.table.options.columnCalcs != \"both\"){\r\n\t\t\t\t\tthis.table.modules.columnCalcs.removeCalcs();\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tif(this.table.modExists(\"columnCalcs\") && this.table.options.columnCalcs != \"group\"){\r\n\r\n\t\t\t\t\tvar cols = this.table.columnManager.getRealColumns();\r\n\r\n\t\t\t\t\tcols.forEach((col) => {\r\n\t\t\t\t\t\tif(col.definition.topCalc){\r\n\t\t\t\t\t\t\tthis.table.modules.columnCalcs.initializeTopRow();\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif(col.definition.bottomCalc){\r\n\t\t\t\t\t\t\tthis.table.modules.columnCalcs.initializeBottomRow();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif(!Array.isArray(groupBy)){\r\n\t\t\t\tgroupBy = [groupBy];\r\n\t\t\t}\r\n\r\n\t\t\tgroupBy.forEach((group, i) => {\r\n\t\t\t\tvar lookupFunc, column;\r\n\r\n\t\t\t\tif(typeof group == \"function\"){\r\n\t\t\t\t\tlookupFunc = group;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tcolumn = this.table.columnManager.getColumnByField(group);\r\n\r\n\t\t\t\t\tif(column){\r\n\t\t\t\t\t\tlookupFunc = function(data){\r\n\t\t\t\t\t\t\treturn column.getFieldValue(data);\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tlookupFunc = function(data){\r\n\t\t\t\t\t\t\treturn data[group];\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.groupIDLookups.push({\r\n\t\t\t\t\tfield: typeof group === \"function\" ? false : group,\r\n\t\t\t\t\tfunc:lookupFunc,\r\n\t\t\t\t\tvalues:this.allowedValues ? this.allowedValues[i] : false,\r\n\t\t\t\t});\r\n\t\t\t});\r\n\r\n\t\t\tif(startOpen){\r\n\t\t\t\tif(!Array.isArray(startOpen)){\r\n\t\t\t\t\tstartOpen = [startOpen];\r\n\t\t\t\t}\r\n\r\n\t\t\t\tstartOpen.forEach((level) => {\r\n\t\t\t\t\tlevel = typeof level == \"function\" ? level : function(){return true;};\r\n\t\t\t\t});\r\n\r\n\t\t\t\tthis.startOpen = startOpen;\r\n\t\t\t}\r\n\r\n\t\t\tif(groupHeader){\r\n\t\t\t\tthis.headerGenerator = Array.isArray(groupHeader) ? groupHeader : [groupHeader];\r\n\t\t\t}\r\n\r\n\t\t\tif(this.table.options.groupUpdateOnCellEdit){\r\n\t\t\t\tthis.subscribe(\"cell-value-updated\", this.cellUpdated.bind(this));\r\n\t\t\t\tthis.subscribe(\"row-data-changed\", this.reassignRowToGroup.bind(this), 0);\r\n\t\t\t}\r\n\r\n\t\t\tthis.subscribe(\"row-deleting\", this.rowDeleting.bind(this));\r\n\t\t\tthis.subscribe(\"row-deleted\", this.rowsUpdated.bind(this));\r\n\t\t\tthis.subscribe(\"scroll-horizontal\", this.scrollHeaders.bind(this));\r\n\t\t\tthis.subscribe(\"rows-wipe\", this.wipe.bind(this));\r\n\t\t\tthis.subscribe(\"rows-added\", this.rowsUpdated.bind(this));\r\n\t\t\tthis.subscribe(\"row-moving\", this.rowMoving.bind(this));\r\n\t\t\tthis.subscribe(\"row-adding-index\", this.rowAddingIndex.bind(this));\r\n\r\n\t\t\tthis.subscribe(\"rows-sample\", this.rowSample.bind(this));\r\n\r\n\t\t\tthis.subscribe(\"render-virtual-fill\", this.rowAddingIndex.bind(this));\r\n\r\n\t\t\tthis.registerDisplayHandler(this.getRows.bind(this), 20);\r\n\r\n\t\t\tthis.initialized = true;\r\n\t\t}\r\n\t}\r\n\r\n\trowSample(rows, prevValue){\r\n\t\tvar group = this.getGroups(false)[0];\r\n\r\n\t\tprevValue.push(group.getRows(false)[0]);\r\n\r\n\t\treturn prevValue;\r\n\t}\r\n\r\n\tvirtualRenderFill(){\r\n\t\tvar el = this.table.rowManager.tableElement;\r\n\t\trows = this.table.rowManager.getVisibleRows();\r\n\r\n\t\trows = rows.filter((row) => {\r\n\t\t\treturn row.type !== \"group\";\r\n\t\t});\r\n\r\n\t\tel.style.minWidth = !rows.length ? this.table.columnManager.getWidth() + \"px\" : \"\";\r\n\r\n\t\t// if(this.table.options.groupBy){\r\n\t\t// \tif(this.layoutMode() != \"fitDataFill\" && rowsCount == this.table.modules.groupRows.countGroups()){\r\n\t\t// \t\tel.style.minWidth = this.table.columnManager.getWidth() + \"px\";\r\n\t\t// \t}\r\n\t\t// }\r\n\t}\r\n\r\n\trowAddingIndex(row, index, top){\r\n\t\tthis.assignRowToGroup(row);\r\n\r\n\t\tvar groupRows = row.modules.group.rows;\r\n\r\n\t\tif(groupRows.length > 1){\r\n\t\t\tif(!index || (index && groupRows.indexOf(index) == -1)){\r\n\t\t\t\tif(top){\r\n\t\t\t\t\tif(groupRows[0] !== row){\r\n\t\t\t\t\t\tindex = groupRows[0];\r\n\t\t\t\t\t\tthis.table.rowManager.moveRowInArray(row.modules.group.rows, row, index, !top);\r\n\t\t\t\t\t}\r\n\t\t\t\t}else{\r\n\t\t\t\t\tif(groupRows[groupRows.length -1] !== row){\r\n\t\t\t\t\t\tindex = groupRows[groupRows.length -1];\r\n\t\t\t\t\t\tthis.table.rowManager.moveRowInArray(row.modules.group.rows, row, index, !top);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tthis.table.rowManager.moveRowInArray(row.modules.group.rows, row, index, !top);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn index;\r\n\t}\r\n\r\n\ttrackChanges(){\r\n\t\tthis.dispatch(\"group-changed\");\r\n\t}\r\n\r\n\t///////////////////////////////////\r\n\t///////// Table Functions /////////\r\n\t///////////////////////////////////\r\n\r\n\tsetGroupBy(groups){\r\n\t\tthis.table.options.groupBy = groups;\r\n\t\tthis.initialize();\r\n\t\tthis.refreshData(false, \"display\");\r\n\r\n\t\tthis.trackChanges();\r\n\t}\r\n\r\n\tsetGroupValues(groupValues){\r\n\t\tthis.table.options.groupValues = groupValues;\r\n\t\tthis.initialize();\r\n\t\tthis.refreshData(false, \"display\");\r\n\r\n\t\tthis.trackChanges();\r\n\t}\r\n\r\n\tsetGroupStartOpen(values){\r\n\t\tthis.table.options.groupStartOpen = values;\r\n\t\tthis.initialize();\r\n\r\n\t\tif(this.table.options.groupBy){\r\n\t\t\tthis.refreshData();\r\n\r\n\t\t\tthis.trackChanges();\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Grouping Update - cant refresh view, no groups have been set\");\r\n\t\t}\r\n\t}\r\n\r\n\tsetGroupHeader(values){\r\n\t\tthis.table.options.groupHeader = values;\r\n\t\tthis.initialize();\r\n\r\n\t\tif(this.table.options.groupBy){\r\n\t\t\tthis.refreshData();\r\n\r\n\t\t\tthis.trackChanges();\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Grouping Update - cant refresh view, no groups have been set\");\r\n\t\t}\r\n\t}\r\n\r\n\tuserGetGroups(values){\r\n\t\treturn this.getGroups(true);\r\n\t}\r\n\r\n\t// get grouped table data in the same format as getData()\r\n\tuserGetGroupedData(){\r\n\t\treturn this.table.options.groupBy ?\r\n\t\tthis.getGroupedData() : this.getData()\r\n\t}\r\n\r\n\r\n\t///////////////////////////////////////\r\n\t///////// Component Functions /////////\r\n\t///////////////////////////////////////\r\n\r\n\trowGetGroup(row){\r\n\t\treturn row.modules.group ? row.modules.group.getComponent() : false;\r\n\t}\r\n\r\n\t///////////////////////////////////\r\n\t///////// Internal Logic //////////\r\n\t///////////////////////////////////\r\n\r\n\trowMoving(from, to, after){\r\n\t\tif(!after && to instanceof Group){\r\n\t\t\tto = this.table.rowManager.prevDisplayRow(from) || to;\r\n\t\t}\r\n\r\n\t\tvar toGroup = to.modules.group;\r\n\t\tvar fromGroup = from.modules.group;\r\n\r\n\t\tif(toGroup === fromGroup){\r\n\t\t\tthis.table.rowManager.moveRowInArray(toGroup.rows, from, to, after);\r\n\t\t}else{\r\n\t\t\tif(fromGroup){\r\n\t\t\t\tfromGroup.removeRow(from);\r\n\t\t\t}\r\n\r\n\t\t\ttoGroup.insertRow(from, to, after);\r\n\t\t}\r\n\t}\r\n\r\n\r\n\trowDeleting(row){\r\n\t\t//remove from group\r\n\t\tif(row.modules.group){\r\n\t\t\trow.modules.group.removeRow(row);\r\n\t\t}\r\n\t}\r\n\r\n\r\n\trowsUpdated(row){\r\n\t\tthis.updateGroupRows(true);\r\n\t}\r\n\r\n\tcellUpdated(cell){\r\n\t\tthis.reassignRowToGroup(cell.row);\r\n\t}\r\n\r\n\r\n\tsetDisplayIndex(index){\r\n\t\tthis.displayIndex = index;\r\n\t}\r\n\r\n\tgetDisplayIndex(){\r\n\t\treturn this.displayIndex;\r\n\t}\r\n\r\n\t//return appropriate rows with group headers\r\n\tgetRows(rows){\r\n\t\tif(this.groupIDLookups.length){\r\n\r\n\t\t\tthis.dispatchExternal(\"dataGrouping\");\r\n\r\n\t\t\tthis.generateGroups(rows);\r\n\r\n\t\t\tif(this.subscribedExternal(\"dataGrouped\")){\r\n\t\t\t\tthis.dispatchExternal(\"dataGrouped\", this.getGroups(true));\r\n\t\t\t}\r\n\r\n\t\t\treturn this.updateGroupRows();\r\n\r\n\t\t}else{\r\n\t\t\treturn rows.slice(0);\r\n\t\t}\r\n\t}\r\n\r\n\tgetGroups(component){\r\n\t\tvar groupComponents = [];\r\n\r\n\t\tthis.groupList.forEach(function(group){\r\n\t\t\tgroupComponents.push(component ? group.getComponent() : group);\r\n\t\t});\r\n\r\n\t\treturn groupComponents;\r\n\t}\r\n\r\n\tgetChildGroups(group){\r\n\t\tvar groupComponents = [];\r\n\r\n\t\tif(!group){\r\n\t\t\tgroup = this;\r\n\t\t}\r\n\r\n\t\tgroup.groupList.forEach((child) => {\r\n\t\t\tif(child.groupList.length){\r\n\t\t\t\tgroupComponents = groupComponents.concat(this.getChildGroups(child));\r\n\t\t\t}else{\r\n\t\t\t\tgroupComponents.push(child);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn groupComponents;\r\n\t}\r\n\r\n\twipe(){\r\n\t\tthis.groupList.forEach(function(group){\r\n\t\t\tgroup.wipe();\r\n\t\t});\r\n\t}\r\n\r\n\tpullGroupListData(groupList) {\r\n\t\tvar groupListData = [];\r\n\r\n\t\tgroupList.forEach((group) => {\r\n\t\t\tvar groupHeader = {};\r\n\t\t\tgroupHeader.level = 0;\r\n\t\t\tgroupHeader.rowCount = 0;\r\n\t\t\tgroupHeader.headerContent = \"\";\r\n\t\t\tvar childData = [];\r\n\r\n\t\t\tif (group.hasSubGroups) {\r\n\t\t\t\tchildData = this.pullGroupListData(group.groupList);\r\n\r\n\t\t\t\tgroupHeader.level = group.level;\r\n\t\t\t\tgroupHeader.rowCount = childData.length - group.groupList.length; // data length minus number of sub-headers\r\n\t\t\t\tgroupHeader.headerContent = group.generator(group.key, groupHeader.rowCount, group.rows, group);\r\n\r\n\t\t\t\tgroupListData.push(groupHeader);\r\n\t\t\t\tgroupListData = groupListData.concat(childData);\r\n\t\t\t}\r\n\r\n\t\t\telse {\r\n\t\t\t\tgroupHeader.level = group.level;\r\n\t\t\t\tgroupHeader.headerContent = group.generator(group.key, group.rows.length, group.rows, group);\r\n\t\t\t\tgroupHeader.rowCount = group.getRows().length;\r\n\r\n\t\t\t\tgroupListData.push(groupHeader);\r\n\r\n\t\t\t\tgroup.getRows().forEach((row) => {\r\n\t\t\t\t\tgroupListData.push(row.getData(\"data\"));\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn groupListData\r\n\t}\r\n\r\n\tgetGroupedData(){\r\n\r\n\t\treturn this.pullGroupListData(this.groupList);\r\n\t}\r\n\r\n\tgetRowGroup(row){\r\n\t\tvar match = false;\r\n\r\n\t\tthis.groupList.forEach((group) => {\r\n\t\t\tvar result = group.getRowGroup(row);\r\n\r\n\t\t\tif(result){\r\n\t\t\t\tmatch = result;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn match;\r\n\t}\r\n\r\n\tcountGroups(){\r\n\t\treturn this.groupList.length;\r\n\t}\r\n\r\n\tgenerateGroups(rows){\r\n\t\tvar oldGroups = this.groups;\r\n\r\n\t\tthis.groups = {};\r\n\t\tthis.groupList =[];\r\n\r\n\t\tif(this.allowedValues && this.allowedValues[0]){\r\n\t\t\tthis.allowedValues[0].forEach((value) => {\r\n\t\t\t\tthis.createGroup(value, 0, oldGroups);\r\n\t\t\t});\r\n\r\n\t\t\trows.forEach((row) => {\r\n\t\t\t\tthis.assignRowToExistingGroup(row, oldGroups);\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\trows.forEach((row) => {\r\n\t\t\t\tthis.assignRowToGroup(row, oldGroups);\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tcreateGroup(groupID, level, oldGroups){\r\n\t\tvar groupKey = level + \"_\" + groupID,\r\n\t\tgroup;\r\n\r\n\t\toldGroups = oldGroups || [];\r\n\r\n\t\tgroup = new Group(this, false, level, groupID, this.groupIDLookups[0].field, this.headerGenerator[0], oldGroups[groupKey]);\r\n\r\n\t\tthis.groups[groupKey] = group;\r\n\t\tthis.groupList.push(group);\r\n\t}\r\n\r\n\tassignRowToExistingGroup(row, oldGroups){\r\n\t\tvar groupID = this.groupIDLookups[0].func(row.getData()),\r\n\t\tgroupKey = \"0_\" + groupID;\r\n\r\n\t\tif(this.groups[groupKey]){\r\n\t\t\tthis.groups[groupKey].addRow(row);\r\n\t\t}\r\n\t}\r\n\r\n\tassignRowToGroup(row, oldGroups){\r\n\t\tvar groupID = this.groupIDLookups[0].func(row.getData()),\r\n\t\tnewGroupNeeded = !this.groups[\"0_\" + groupID];\r\n\r\n\t\tif(newGroupNeeded){\r\n\t\t\tthis.createGroup(groupID, 0, oldGroups);\r\n\t\t}\r\n\r\n\t\tthis.groups[\"0_\" + groupID].addRow(row);\r\n\r\n\t\treturn !newGroupNeeded;\r\n\t}\r\n\r\n\treassignRowToGroup(row){\r\n\t\tif(row.type === \"row\"){\r\n\t\t\tvar oldRowGroup = row.modules.group,\r\n\t\t\toldGroupPath = oldRowGroup.getPath(),\r\n\t\t\tnewGroupPath = this.getExpectedPath(row),\r\n\t\t\tsamePath = true;\r\n\r\n\t\t\t// figure out if new group path is the same as old group path\r\n\t\t\tvar samePath = (oldGroupPath.length == newGroupPath.length) && oldGroupPath.every((element, index) => {\r\n\t\t\t\treturn element === newGroupPath[index];\r\n\t\t\t});\r\n\r\n\t\t\t// refresh if they new path and old path aren't the same (aka the row's groupings have changed)\r\n\t\t\tif(!samePath) {\r\n\t\t\t\toldRowGroup.removeRow(row);\r\n\t\t\t\tthis.assignRowToGroup(row, this.groups);\r\n\t\t\t\tthis.refreshData(true);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tgetExpectedPath(row) {\r\n\t\tvar groupPath = [], rowData = row.getData();\r\n\r\n\t\tthis.groupIDLookups.forEach((groupId) => {\r\n\t\t\tgroupPath.push(groupId.func(rowData));\r\n\t\t});\r\n\r\n\t\treturn groupPath;\r\n\t}\r\n\r\n\tupdateGroupRows(force){\r\n\t\tvar output = [],\r\n\t\toldRowCount;\r\n\r\n\t\tthis.groupList.forEach((group) => {\r\n\t\t\toutput = output.concat(group.getHeadersAndRows());\r\n\t\t});\r\n\r\n\t\t//force update of table display\r\n\t\tif(force){\r\n\t\t\tvar displayIndex = this.table.rowManager.setDisplayRows(output, this.getDisplayIndex());\r\n\r\n\t\t\tif(displayIndex !== true){\r\n\t\t\t\tthis.setDisplayIndex(displayIndex);\r\n\t\t\t}\r\n\r\n\t\t\tthis.refreshData(true);\r\n\t\t}\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tscrollHeaders(left){\r\n\t\tif(this.table.options.renderHorizontal === \"virtual\"){\r\n\t\t\tleft -= this.table.columnManager.renderer.vDomPadLeft;\r\n\t\t}\r\n\r\n\t\tleft = left + \"px\";\r\n\r\n\t\tthis.groupList.forEach((group) => {\r\n\t\t\tgroup.scrollHeader(left);\r\n\t\t});\r\n\t}\r\n\r\n\tremoveGroup(group){\r\n\t\tvar groupKey = group.level + \"_\" + group.key,\r\n\t\tindex;\r\n\r\n\t\tif(this.groups[groupKey]){\r\n\t\t\tdelete this.groups[groupKey];\r\n\r\n\t\t\tindex = this.groupList.indexOf(group);\r\n\r\n\t\t\tif(index > -1){\r\n\t\t\t\tthis.groupList.splice(index, 1);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n\r\nGroupRows.moduleName = \"groupRows\";\r\n\r\nexport default GroupRows;","import Module from '../../core/Module.js';\r\n\r\nimport defaultUndoers from './defaults/undoers.js';\r\nimport defaultRedoers from './defaults/redoers.js';\r\n\r\nclass History extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.history = [];\r\n\t\tthis.index = -1;\r\n\r\n\t\tthis.registerTableOption(\"history\", false); //enable edit history\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tif(this.table.options.history){\r\n\t\t\tthis.subscribe(\"cell-value-updated\", this.layoutCell.bind(this));\r\n\t\t\tthis.subscribe(\"cell-delete\", this.clearComponentHistory.bind(this));\r\n\t\t\tthis.subscribe(\"row-delete\", this.rowDeleted.bind(this));\r\n\t\t\tthis.subscribe(\"rows-wipe\", this.clear.bind(this));\r\n\t\t\tthis.subscribe(\"row-added\", this.clear.bind(this));\r\n\t\t\tthis.subscribe(\"row-move\", this.rowMoved.bind(this));\r\n\t\t}\r\n\r\n\t\tthis.registerTableFunction(\"undo\", this.undo.bind(this));\r\n\t\tthis.registerTableFunction(\"redo\", this.redo.bind(this));\r\n\t\tthis.registerTableFunction(\"getHistoryUndoSize\", this.getHistoryUndoSize.bind(this));\r\n\t\tthis.registerTableFunction(\"getHistoryRedoSize\", this.getHistoryRedoSize.bind(this));\r\n\t\tthis.registerTableFunction(\"clearHistory\", this.clear.bind(this));\r\n\t}\r\n\r\n\trowMoved(from, to, after){\r\n\t\tthis.action(\"rowMove\", from, {posFrom:this.table.rowManager.getRowPosition(from), posTo:this.table.rowManager.getRowPosition(to), to:to, after:after});\r\n\t}\r\n\r\n\trowAdded(row, data, pos, index){\r\n\t\tthis.action(\"rowAdd\", row, {data:data, pos:pos, index:index});\r\n\t}\r\n\r\n\trowDeleted(row){\r\n\t\tvar index, rows;\r\n\r\n\t\tif(this.table.options.groupBy){\r\n\r\n\t\t\trows = row.getComponent().getGroup().rows\r\n\t\t\tindex = rows.indexOf(row);\r\n\r\n\t\t\tif(index){\r\n\t\t\t\tindex = rows[index-1];\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tindex = row.table.rowManager.getRowIndex(row);\r\n\r\n\t\t\tif(index){\r\n\t\t\t\tindex = row.table.rowManager.rows[index-1];\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.history.action(\"rowDelete\", row, {data:row.getData(), pos:!index, index:index});\r\n\t}\r\n\r\n\tcellUpdated(cell){\r\n\t\tthis.action(\"cellEdit\", cell, {oldValue:cell.oldValue, newValue:cell.value});\r\n\t}\r\n\r\n\tclear(){\r\n\t\tthis.history = [];\r\n\t\tthis.index = -1;\r\n\t}\r\n\r\n\taction(type, component, data){\r\n\t\tthis.history = this.history.slice(0, this.index + 1);\r\n\r\n\t\tthis.history.push({\r\n\t\t\ttype:type,\r\n\t\t\tcomponent:component,\r\n\t\t\tdata:data,\r\n\t\t});\r\n\r\n\t\tthis.index ++;\r\n\t}\r\n\r\n\tgetHistoryUndoSize(){\r\n\t\treturn this.index + 1;\r\n\t}\r\n\r\n\tgetHistoryRedoSize(){\r\n\t\treturn this.history.length - (this.index + 1);\r\n\t}\r\n\r\n\tclearComponentHistory(component){\r\n\t\tvar index = this.history.findIndex(function(item){\r\n\t\t\treturn item.component === component;\r\n\t\t});\r\n\r\n\t\tif(index > -1){\r\n\t\t\tthis.history.splice(index, 1);\r\n\t\t\tif(index <= this.index){\r\n\t\t\t\tthis.index--;\r\n\t\t\t}\r\n\r\n\t\t\tthis.clearComponentHistory(component);\r\n\t\t}\r\n\t}\r\n\r\n\tundo(){\r\n\t\tif(this.index > -1){\r\n\t\t\tlet action = this.history[this.index];\r\n\r\n\t\t\tHistory.undoers[action.type].call(this, action);\r\n\r\n\t\t\tthis.index--;\r\n\r\n\t\t\tthis.dispatchExternal(\"historyUndo\", action.type, action.component.getComponent(), action.data);\r\n\r\n\t\t\treturn true;\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"History Undo Error - No more history to undo\");\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\tredo(){\r\n\t\tif(this.history.length-1 > this.index){\r\n\r\n\t\t\tthis.index++;\r\n\r\n\t\t\tlet action = this.history[this.index];\r\n\r\n\t\t\tHistory.redoers[action.type].call(this, action);\r\n\r\n\t\t\tthis.dispatchExternal(\"historyRedo\", action.type, action.component.getComponent(), action.data);\r\n\r\n\t\t\treturn true;\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"History Redo Error - No more history to redo\");\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\t//rebind rows to new element after deletion\r\n\t_rebindRow(oldRow, newRow){\r\n\t\tthis.history.forEach(function(action){\r\n\t\t\tif(action.component instanceof Row){\r\n\t\t\t\tif(action.component === oldRow){\r\n\t\t\t\t\taction.component = newRow;\r\n\t\t\t\t}\r\n\t\t\t}else if(action.component instanceof Cell){\r\n\t\t\t\tif(action.component.row === oldRow){\r\n\t\t\t\t\tvar field = action.component.column.getField();\r\n\r\n\t\t\t\t\tif(field){\r\n\t\t\t\t\t\taction.component = newRow.getCell(field);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n}\r\n\r\nHistory.moduleName = \"history\";\r\n\r\n//load defaults\r\nHistory.undoers = defaultUndoers;\r\nHistory.redoers = defaultRedoers;\r\n\r\nexport default History;","export default {\r\n\tcellEdit: function(action){\r\n\t\taction.component.setValueProcessData(action.data.oldValue);\r\n\t},\r\n\r\n\trowAdd: function(action){\r\n\t\taction.component.deleteActual();\r\n\t},\r\n\r\n\trowDelete: function(action){\r\n\t\tvar newRow = this.table.rowManager.addRowActual(action.data.data, action.data.pos, action.data.index);\r\n\r\n\t\tif(this.table.options.groupBy && this.table.modExists(\"groupRows\")){\r\n\t\t\tthis.table.modules.groupRows.updateGroupRows(true);\r\n\t\t}\r\n\r\n\t\tthis._rebindRow(action.component, newRow);\r\n\t},\r\n\r\n\trowMove: function(action){\r\n\t\tthis.table.rowManager.moveRowActual(action.component, this.table.rowManager.rows[action.data.posFrom], !action.data.after);\r\n\t\tthis.table.rowManager.redraw();\r\n\t},\r\n};","export default {\r\n\tcellEdit: function(action){\r\n\t\taction.component.setValueProcessData(action.data.newValue);\r\n\t},\r\n\r\n\trowAdd: function(action){\r\n\t\tvar newRow = this.table.rowManager.addRowActual(action.data.data, action.data.pos, action.data.index);\r\n\r\n\t\tif(this.table.options.groupBy && this.table.modExists(\"groupRows\")){\r\n\t\t\tthis.table.modules.groupRows.updateGroupRows(true);\r\n\t\t}\r\n\r\n\t\tthis._rebindRow(action.component, newRow);\r\n\t},\r\n\r\n\trowDelete:function(action){\r\n\t\taction.component.deleteActual();\r\n\t},\r\n\r\n\trowMove: function(action){\r\n\t\tthis.table.rowManager.moveRowActual(action.component, this.table.rowManager.rows[action.data.posTo], action.data.after);\r\n\t\tthis.table.rowManager.redraw();\r\n\t},\r\n};","import Module from '../../core/Module.js';\r\n\r\nclass HtmlTableImport extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.fieldIndex = [];\r\n\t\tthis.hasIndex = false;\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tthis.subscribe(\"table-building\", this.tableElementCheck.bind(this));\r\n\t}\r\n\r\n\ttableElementCheck(){\r\n\t\tif(this.table.element.tagName === \"TABLE\"){\r\n\t\t\tthis.parseTable();\r\n\t\t}\r\n\t}\r\n\r\n\tparseTable(){\r\n\t\tvar element = this.table.element,\r\n\t\toptions = this.table.options,\r\n\t\tcolumns = options.columns,\r\n\t\theaders = element.getElementsByTagName(\"th\"),\r\n\t\trows = element.getElementsByTagName(\"tbody\")[0],\r\n\t\tdata = [],\r\n\t\tnewTable;\r\n\r\n\t\tthis.hasIndex = false;\r\n\r\n\t\tthis.dispatchExternal(\"htmlImporting\");\r\n\r\n\t\trows = rows ? rows.getElementsByTagName(\"tr\") : [];\r\n\r\n\t\t//check for tablator inline options\r\n\t\tthis._extractOptions(element, options);\r\n\r\n\t\tif(headers.length){\r\n\t\t\tthis._extractHeaders(headers, rows);\r\n\t\t}else{\r\n\t\t\tthis._generateBlankHeaders(headers, rows);\r\n\t\t}\r\n\r\n\t\t//iterate through table rows and build data set\r\n\t\tfor(var index = 0; index < rows.length; index++){\r\n\t\t\tvar row = rows[index],\r\n\t\t\tcells = row.getElementsByTagName(\"td\"),\r\n\t\t\titem = {};\r\n\r\n\t\t\t//create index if the dont exist in table\r\n\t\t\tif(!this.hasIndex){\r\n\t\t\t\titem[options.index] = index;\r\n\t\t\t}\r\n\r\n\t\t\tfor(var i = 0; i < cells.length; i++){\r\n\t\t\t\tvar cell = cells[i];\r\n\t\t\t\tif(typeof this.fieldIndex[i] !== \"undefined\"){\r\n\t\t\t\t\titem[this.fieldIndex[i]] = cell.innerHTML;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t//add row data to item\r\n\t\t\tdata.push(item);\r\n\t\t}\r\n\r\n\t\t//create new element\r\n\t\tvar newElement = document.createElement(\"div\");\r\n\r\n\t\t//transfer attributes to new element\r\n\t\tvar attributes = element.attributes;\r\n\r\n\t\t// loop through attributes and apply them on div\r\n\r\n\t\tfor(var i in attributes){\r\n\t\t\tif(typeof attributes[i] == \"object\"){\r\n\t\t\t\tnewElement.setAttribute(attributes[i].name, attributes[i].value);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// replace table with div element\r\n\t\telement.parentNode.replaceChild(newElement, element);\r\n\r\n\t\toptions.data = data;\r\n\r\n\t\tthis.dispatchExternal(\"htmlImported\");\r\n\r\n\t\tthis.table.element = newElement;\r\n\t}\r\n\r\n\t//extract tabulator attribute options\r\n\t_extractOptions(element, options, defaultOptions){\r\n\t\tvar attributes = element.attributes;\r\n\t\tvar optionsArr = defaultOptions ? Object.assign([], defaultOptions) : Object.keys(options);\r\n\t\tvar optionsList = {};\r\n\r\n\t\toptionsArr.forEach((item) => {\r\n\t\t\toptionsList[item.toLowerCase()] = item;\r\n\t\t});\r\n\r\n\t\tfor(var index in attributes){\r\n\t\t\tvar attrib = attributes[index];\r\n\t\t\tvar name;\r\n\r\n\t\t\tif(attrib && typeof attrib == \"object\" && attrib.name && attrib.name.indexOf(\"tabulator-\") === 0){\r\n\t\t\t\tname = attrib.name.replace(\"tabulator-\", \"\");\r\n\r\n\t\t\t\tif(typeof optionsList[name] !== \"undefined\"){\r\n\t\t\t\t\toptions[optionsList[name]] = this._attribValue(attrib.value);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//get value of attribute\r\n\t_attribValue(value){\r\n\t\tif(value === \"true\"){\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\tif(value === \"false\"){\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\treturn value;\r\n\t}\r\n\r\n\t//find column if it has already been defined\r\n\t_findCol(title){\r\n\t\tvar match = this.table.options.columns.find((column) => {\r\n\t\t\treturn column.title === title;\r\n\t\t});\r\n\r\n\t\treturn match || false;\r\n\t}\r\n\r\n\t//extract column from headers\r\n\t_extractHeaders(headers, rows){\r\n\t\tfor(var index = 0; index < headers.length; index++){\r\n\t\t\tvar header = headers[index],\r\n\t\t\texists = false,\r\n\t\t\tcol = this._findCol(header.textContent),\r\n\t\t\twidth, attributes;\r\n\r\n\t\t\tif(col){\r\n\t\t\t\texists = true;\r\n\t\t\t}else{\r\n\t\t\t\tcol = {title:header.textContent.trim()};\r\n\t\t\t}\r\n\r\n\t\t\tif(!col.field) {\r\n\t\t\t\tcol.field = header.textContent.trim().toLowerCase().replace(\" \", \"_\");\r\n\t\t\t}\r\n\r\n\t\t\twidth = header.getAttribute(\"width\");\r\n\r\n\t\t\tif(width && !col.width)\t{\r\n\t\t\t\tcol.width = width;\r\n\t\t\t}\r\n\r\n\t\t\t//check for tablator inline options\r\n\t\t\tattributes = header.attributes;\r\n\r\n\t\t\t// //check for tablator inline options\r\n\t\t\tthis._extractOptions(header, col, Column.prototype.defaultOptionList);\r\n\r\n\t\t\tthis.fieldIndex[index] = col.field;\r\n\r\n\t\t\tif(col.field == this.table.options.index){\r\n\t\t\t\tthis.hasIndex = true;\r\n\t\t\t}\r\n\r\n\t\t\tif(!exists){\r\n\t\t\t\tthis.table.options.columns.push(col);\r\n\t\t\t}\r\n\r\n\t\t}\r\n\t}\r\n\r\n\t//generate blank headers\r\n\t_generateBlankHeaders(headers, rows){\r\n\t\tfor(var index = 0; index < headers.length; index++){\r\n\t\t\tvar header = headers[index],\r\n\t\t\tcol = {title:\"\", field:\"col\" + index};\r\n\r\n\t\t\tthis.fieldIndex[index] = col.field;\r\n\r\n\t\t\tvar width = header.getAttribute(\"width\");\r\n\r\n\t\t\tif(width){\r\n\t\t\t\tcol.width = width;\r\n\t\t\t}\r\n\r\n\t\t\tthis.table.options.columns.push(col);\r\n\t\t}\r\n\t}\r\n}\r\n\r\nHtmlTableImport.moduleName = \"htmlTableImport\";\r\n\r\nexport default HtmlTableImport;","import Module from '../../core/Module.js';\r\nimport Helpers from '../../core/tools/Helpers.js';\r\n\r\nimport Cell from '../../core/cell/Cell';\r\nimport Column from '../../core/column/Column';\r\n\r\nclass Interaction extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.eventMap = {\r\n\t\t\t//row events\r\n\t\t\trowClick:\"row-click\",\r\n\t\t\trowDblClick:\"row-dblclick\",\r\n\t\t\trowContext:\"row-contextmenu\",\r\n\t\t\trowMouseEnter:\"row-mouseenter\",\r\n\t\t\trowMouseLeave:\"row-mouseleave\",\r\n\t\t\trowMouseOver:\"row-mouseover\",\r\n\t\t\trowMouseOut:\"row-mouseout\",\r\n\t\t\trowMouseMove:\"row-mousemove\",\r\n\t\t\trowTap:\"row\",\r\n\t\t\trowDblTap:\"row\",\r\n\t\t\trowTapHold:\"row\",\r\n\r\n\t\t\t//cell events\r\n\t\t\tcellClick:\"cell-click\",\r\n\t\t\tcellDblClick:\"cell-dblclick\",\r\n\t\t\tcellContext:\"cell-contextmenu\",\r\n\t\t\tcellMouseEnter:\"cell-mouseenter\",\r\n\t\t\tcellMouseLeave:\"cell-mouseleave\",\r\n\t\t\tcellMouseOver:\"cell-mouseover\",\r\n\t\t\tcellMouseOut:\"cell-mouseout\",\r\n\t\t\tcellMouseMove:\"cell-mousemove\",\r\n\t\t\tcellTap:\"cell\",\r\n\t\t\tcellDblTap:\"cell\",\r\n\t\t\tcellTapHold:\"cell\",\r\n\r\n\t\t\t//column header events\r\n\t\t\theaderClick:\"column-click\",\r\n\t\t\theaderDblClick:\"column-dblclick\",\r\n\t\t\theaderContext:\"column-contextmenu\",\r\n\t\t\theaderMouseEnter:\"column-mouseenter\",\r\n\t\t\theaderMouseLeave:\"column-mouseleave\",\r\n\t\t\theaderMouseOver:\"column-mouseover\",\r\n\t\t\theaderMouseOut:\"column-mouseout\",\r\n\t\t\theaderMouseMove:\"column-mousemove\",\r\n\t\t\theaderTap:\"column\",\r\n\t\t\theaderDblTap:\"column\",\r\n\t\t\theaderTapHold:\"column\",\r\n\r\n\t\t\t//group header\r\n\t\t\tgroupClick:\"group-click\",\r\n\t\t\tgroupDblClick:\"group-dblclick\",\r\n\t\t\tgroupContext:\"group-contextmenu\",\r\n\t\t\tgroupMouseEnter:\"group-mouseenter\",\r\n\t\t\tgroupMouseLeave:\"group-mouseleave\",\r\n\t\t\tgroupMouseOver:\"group-mouseover\",\r\n\t\t\tgroupMouseOut:\"group-mouseout\",\r\n\t\t\tgroupMouseMove:\"group-mousemove\",\r\n\t\t\tgroupTap:\"group\",\r\n\t\t\tgroupDblTap:\"group\",\r\n\t\t\tgroupTapHold:\"group\",\r\n\t\t}\r\n\r\n\t\tthis.subscribers = {};\r\n\r\n\t\tthis.touchSubscribers = {};\r\n\r\n\t\tthis.columnSubscribers = {};\r\n\r\n\t\tthis.touchWatchers = {\r\n\t\t\trow:{\r\n\t\t\t\ttap:null,\r\n\t\t\t\ttapDbl:null,\r\n\t\t\t\ttapHold:null,\r\n\t\t\t},\r\n\t\t\tcell:{\r\n\t\t\t\ttap:null,\r\n\t\t\t\ttapDbl:null,\r\n\t\t\t\ttapHold:null,\r\n\t\t\t},\r\n\t\t\tcolumn:{\r\n\t\t\t\ttap:null,\r\n\t\t\t\ttapDbl:null,\r\n\t\t\t\ttapHold:null,\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.registerColumnOption(\"headerClick\");\r\n\t\tthis.registerColumnOption(\"headerDblClick\");\r\n\t\tthis.registerColumnOption(\"headerContext\");\r\n\t\tthis.registerColumnOption(\"headerMouseEnter\");\r\n\t\tthis.registerColumnOption(\"headerMouseLeave\");\r\n\t\tthis.registerColumnOption(\"headerMouseOver\");\r\n\t\tthis.registerColumnOption(\"headerMouseOut\");\r\n\t\tthis.registerColumnOption(\"headerMouseMove\");\r\n\t\tthis.registerColumnOption(\"headerTap\");\r\n\t\tthis.registerColumnOption(\"headerDblTap\");\r\n\t\tthis.registerColumnOption(\"headerTapHold\");\r\n\r\n\t\tthis.registerColumnOption(\"cellClick\");\r\n\t\tthis.registerColumnOption(\"cellDblClick\");\r\n\t\tthis.registerColumnOption(\"cellContext\");\r\n\t\tthis.registerColumnOption(\"cellMouseEnter\");\r\n\t\tthis.registerColumnOption(\"cellMouseLeave\");\r\n\t\tthis.registerColumnOption(\"cellMouseOver\");\r\n\t\tthis.registerColumnOption(\"cellMouseOut\");\r\n\t\tthis.registerColumnOption(\"cellMouseMove\");\r\n\t\tthis.registerColumnOption(\"cellTap\");\r\n\t\tthis.registerColumnOption(\"cellDblTap\");\r\n\t\tthis.registerColumnOption(\"cellTapHold\");\r\n\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tthis.initializeExternalEvents();\r\n\r\n\t\tthis.subscribe(\"column-init\", this.initializeColumn.bind(this))\r\n\t\tthis.subscribe(\"cell-dblclick\", this.cellContentsSelectionFixer.bind(this))\r\n\t}\r\n\r\n\tcellContentsSelectionFixer(e, cell){\r\n\t\tif(this.table.modExists(\"edit\")){\r\n\t\t\tif (this.table.modules.edit.currentCell === this){\r\n\t\t\t\treturn; //prevent instant selection of editor content\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\te.preventDefault();\r\n\r\n\t\ttry{\r\n\t\t\tif (document.selection) { // IE\r\n\t\t\t\tvar range = document.body.createTextRange();\r\n\t\t\t\trange.moveToElementText(this.element);\r\n\t\t\t\trange.select();\r\n\t\t\t} else if (window.getSelection) {\r\n\t\t\t\tvar range = document.createRange();\r\n\t\t\t\trange.selectNode(this.element);\r\n\t\t\t\twindow.getSelection().removeAllRanges();\r\n\t\t\t\twindow.getSelection().addRange(range);\r\n\t\t\t}\r\n\t\t}catch(e){}\r\n\t}\r\n\r\n\tinitializeExternalEvents(){\r\n\t\tfor(let key in this.eventMap){\r\n\t\t\tthis.subscriptionChangeExternal(key, this.subscriptionChanged.bind(this, key))\r\n\t\t}\r\n\t}\r\n\r\n\tsubscriptionChanged(key, added){\r\n\t\tvar index;\r\n\r\n\t\tif(added){\r\n\t\t\tif(!this.subscribers[key]){\r\n\t\t\t\tif(this.eventMap[key].includes(\"-\")){\r\n\t\t\t\t\tthis.subscribers[key] = this.handle.bind(this, key);\r\n\t\t\t\t\tthis.subscribe(this.eventMap[key], this.subscribers[key]);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tthis.subscribeTouchEvents(key);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tif(this.eventMap[key].includes(\"-\")){\r\n\t\t\t\tif(this.subscribers[key] && !this.columnSubscribers[key] && !this.subscribedExternal(key)){\r\n\t\t\t\t\tthis.unsubscribe(this.eventMap[key], this.subscribers[key]);\r\n\t\t\t\t\tdelete this.subscribers[key];\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tthis.unsubscribeTouchEvents(key);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\r\n\tsubscribeTouchEvents(key){\r\n\t\tvar type = this.eventMap[key];\r\n\r\n\t\tif(!this.touchSubscribers[type + \"-touchstart\"]){\r\n\t\t\tthis.touchSubscribers[type + \"-touchstart\"] = this.handleTouch.bind(this, type, \"start\");\r\n\t\t\tthis.touchSubscribers[type + \"-touchend\"] = this.handleTouch.bind(this, type, \"end\");\r\n\r\n\t\t\tthis.subscribe(type + \"-touchstart\", this.touchSubscribers[type + \"-touchstart\"]);\r\n\t\t\tthis.subscribe(type + \"-touchend\", this.touchSubscribers[type + \"-touchend\"]);\r\n\t\t}\r\n\r\n\t\tthis.subscribers[key] = true;\r\n\t}\r\n\r\n\tunsubscribeTouchEvents(key){\r\n\t\tvar notouch = true,\r\n\t\ttype = this.eventMap[key];\r\n\r\n\t\tif(this.subscribers[key] && !this.subscribedExternal(key)){\r\n\t\t\tdelete this.subscribers[key];\r\n\r\n\t\t\tfor(let i in this.eventMap){\r\n\t\t\t\tif(this.eventMap[i] === type){\r\n\t\t\t\t\tif(this.subscribers[i]){\r\n\t\t\t\t\t\tnotouch = false;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif(notouch){\r\n\t\t\t\tthis.unsubscribe(type + \"-touchstart\", this.touchSubscribers[type + \"-touchstart\"]);\r\n\t\t\t\tthis.unsubscribe(type + \"-touchend\", this.touchSubscribers[type + \"-touchend\"]);\r\n\r\n\t\t\t\tdelete this.touchSubscribers[type + \"-touchstart\"];\r\n\t\t\t\tdelete this.touchSubscribers[type + \"-touchend\"];\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tinitializeColumn(column){\r\n\t\tvar def = column.definition;\r\n\r\n\t\tfor(let key in this.eventMap){\r\n\t\t\tif(def[key]){\r\n\t\t\t\tthis.subscriptionChanged(key, true);\r\n\r\n\t\t\t\tif(!this.columnSubscribers[key]){\r\n\t\t\t\t\tthis.columnSubscribers[key] = [];\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.columnSubscribers[key].push(column);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\thandle(action, e, component){\r\n\t\tthis.dispatchEvent(action, e, component);\r\n\t}\r\n\r\n\thandleTouch(type, action, e, component){\r\n\t\tvar watchers = this.touchWatchers[type];\r\n\r\n\t\tif(type === \"column\"){\r\n\t\t\ttype = \"header\";\r\n\t\t}\r\n\r\n\t\tswitch(action){\r\n\t\t\tcase \"start\":\r\n\t\t\twatchers.tap = true;\r\n\r\n\t\t\tclearTimeout(watchers.tapHold);\r\n\r\n\t\t\twatchers.tapHold = setTimeout(() => {\r\n\t\t\t\tclearTimeout(watchers.tapHold);\r\n\t\t\t\twatchers.tapHold = null;\r\n\r\n\t\t\t\twatchers.tap = null;\r\n\t\t\t\tclearTimeout(watchers.tapDbl);\r\n\t\t\t\twatchers.tapDbl = null;\r\n\r\n\t\t\t\tthis.dispatchEvent(type + \"TapHold\", e, component);\r\n\t\t\t}, 1000);\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"end\":\r\n\t\t\tif(watchers.tap){\r\n\r\n\t\t\t\twatchers.tap = null;\r\n\t\t\t\tthis.dispatchEvent(type + \"Tap\", e, component);\r\n\t\t\t}\r\n\r\n\t\t\tif(watchers.tapDbl){\r\n\t\t\t\tclearTimeout(watchers.tapDbl);\r\n\t\t\t\twatchers.tapDbl = null;\r\n\r\n\t\t\t\tthis.dispatchEvent(type + \"DblTap\", e, component);\r\n\t\t\t}else{\r\n\t\t\t\twatchers.tapDbl = setTimeout(() => {\r\n\t\t\t\t\tclearTimeout(watchers.tapDbl);\r\n\t\t\t\t\twatchers.tapDbl = null;\r\n\t\t\t\t}, 300);\r\n\t\t\t}\r\n\r\n\t\t\tclearTimeout(watchers.tapHold);\r\n\t\t\twatchers.tapHold = null;\r\n\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\tdispatchEvent(action, e, component){\r\n\t\tvar componentObj = component.getComponent(),\r\n\t\tcallback;\r\n\r\n\t\tif(this.columnSubscribers[action]){\r\n\r\n\t\t\tif(component instanceof Cell){\r\n\t\t\t\tcallback = component.column.definition[action];\r\n\t\t\t}else if(component instanceof Column){\r\n\t\t\t\tcallback = component.definition[action];\r\n\t\t\t}\r\n\r\n\t\t\tif(callback){\r\n\t\t\t\tcallback(e, componentObj);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.dispatchExternal(action, e, componentObj);\r\n\t}\r\n}\r\n\r\nInteraction.moduleName = \"interaction\";\r\n\r\nexport default Interaction;","import Module from '../../core/Module.js';\r\n\r\nimport defaultBindings from './defaults/bindings.js';\r\nimport defaultActions from './defaults/actions.js';\r\n\r\nclass Keybindings extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.watchKeys = null;\r\n\t\tthis.pressedKeys = null;\r\n\t\tthis.keyupBinding = false;\r\n\t\tthis.keydownBinding = false;\r\n\r\n\t\tthis.registerTableOption(\"keybindings\", []); //array for keybindings\r\n\t\tthis.registerTableOption(\"tabEndNewRow\", false); //create new row when tab to end of table\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tvar bindings = this.table.options.keybindings,\r\n\t\tmergedBindings = {};\r\n\r\n\t\tthis.watchKeys = {};\r\n\t\tthis.pressedKeys = [];\r\n\r\n\t\tif(bindings !== false){\r\n\r\n\t\t\tfor(let key in Keybindings.bindings){\r\n\t\t\t\tmergedBindings[key] = Keybindings.bindings[key];\r\n\t\t\t}\r\n\r\n\t\t\tif(Object.keys(bindings).length){\r\n\r\n\t\t\t\tfor(let key in bindings){\r\n\t\t\t\t\tmergedBindings[key] = bindings[key];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tthis.mapBindings(mergedBindings);\r\n\t\t\tthis.bindEvents();\r\n\t\t}\r\n\r\n\t\tthis.subscribe(\"table-destroy\", this.clearBindings.bind(this));\r\n\t}\r\n\r\n\tmapBindings(bindings){\r\n\t\tfor(let key in bindings){\r\n\t\t\tif(Keybindings.actions[key]){\r\n\t\t\t\tif(bindings[key]){\r\n\t\t\t\t\tif(typeof bindings[key] !== \"object\"){\r\n\t\t\t\t\t\tbindings[key] = [bindings[key]];\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tbindings[key].forEach((binding) => {\r\n\t\t\t\t\t\tthis.mapBinding(key, binding);\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Key Binding Error - no such action:\", key);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tmapBinding(action, symbolsList){\r\n\t\tvar binding = {\r\n\t\t\taction: Keybindings.actions[action],\r\n\t\t\tkeys: [],\r\n\t\t\tctrl: false,\r\n\t\t\tshift: false,\r\n\t\t\tmeta: false,\r\n\t\t};\r\n\r\n\t\tvar symbols = symbolsList.toString().toLowerCase().split(\" \").join(\"\").split(\"+\");\r\n\r\n\t\tsymbols.forEach((symbol) => {\r\n\t\t\tswitch(symbol){\r\n\t\t\t\tcase \"ctrl\":\r\n\t\t\t\tbinding.ctrl = true;\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"shift\":\r\n\t\t\t\tbinding.shift = true;\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"meta\":\r\n\t\t\t\tbinding.meta = true;\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tdefault:\r\n\t\t\t\tsymbol = parseInt(symbol);\r\n\t\t\t\tbinding.keys.push(symbol);\r\n\r\n\t\t\t\tif(!this.watchKeys[symbol]){\r\n\t\t\t\t\tthis.watchKeys[symbol] = [];\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.watchKeys[symbol].push(binding);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tbindEvents(){\r\n\t\tvar self = this;\r\n\r\n\t\tthis.keyupBinding = function(e){\r\n\t\t\tvar code = e.keyCode;\r\n\t\t\tvar bindings = self.watchKeys[code];\r\n\r\n\t\t\tif(bindings){\r\n\r\n\t\t\t\tself.pressedKeys.push(code);\r\n\r\n\t\t\t\tbindings.forEach(function(binding){\r\n\t\t\t\t\tself.checkBinding(e, binding);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tthis.keydownBinding = function(e){\r\n\t\t\tvar code = e.keyCode;\r\n\t\t\tvar bindings = self.watchKeys[code];\r\n\r\n\t\t\tif(bindings){\r\n\r\n\t\t\t\tvar index = self.pressedKeys.indexOf(code);\r\n\r\n\t\t\t\tif(index > -1){\r\n\t\t\t\t\tself.pressedKeys.splice(index, 1);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tthis.table.element.addEventListener(\"keydown\", this.keyupBinding);\r\n\r\n\t\tthis.table.element.addEventListener(\"keyup\", this.keydownBinding);\r\n\t}\r\n\r\n\tclearBindings(){\r\n\t\tif(this.keyupBinding){\r\n\t\t\tthis.table.element.removeEventListener(\"keydown\", this.keyupBinding);\r\n\t\t}\r\n\r\n\t\tif(this.keydownBinding){\r\n\t\t\tthis.table.element.removeEventListener(\"keyup\", this.keydownBinding);\r\n\t\t}\r\n\t}\r\n\r\n\tcheckBinding(e, binding){\r\n\t\tvar match = true;\r\n\r\n\t\tif(e.ctrlKey == binding.ctrl && e.shiftKey == binding.shift && e.metaKey == binding.meta){\r\n\t\t\tbinding.keys.forEach((key) => {\r\n\t\t\t\tvar index = this.pressedKeys.indexOf(key);\r\n\r\n\t\t\t\tif(index == -1){\r\n\t\t\t\t\tmatch = false;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tif(match){\r\n\t\t\t\tbinding.action.call(this, e);\r\n\t\t\t}\r\n\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t}\r\n}\r\n\r\nKeybindings.moduleName = \"keybindings\";\r\n\r\n//load defaults\r\nKeybindings.bindings = defaultBindings;\r\nKeybindings.actions = defaultActions;\r\n\r\nexport default Keybindings;","export default {\r\n\tnavPrev:\"shift + 9\",\r\n\tnavNext:9,\r\n\tnavUp:38,\r\n\tnavDown:40,\r\n\tscrollPageUp:33,\r\n\tscrollPageDown:34,\r\n\tscrollToStart:36,\r\n\tscrollToEnd:35,\r\n\tundo:\"ctrl + 90\",\r\n\tredo:\"ctrl + 89\",\r\n\tcopyToClipboard:\"ctrl + 67\",\r\n};","export default {\r\n\tkeyBlock:function(e){\r\n\t\te.stopPropagation();\r\n\t\te.preventDefault();\r\n\t},\r\n\tscrollPageUp:function(e){\r\n\t\tvar rowManager = this.table.rowManager,\r\n\t\tnewPos = rowManager.scrollTop - rowManager.element.clientHeight,\r\n\t\tscrollMax = rowManager.element.scrollHeight;\r\n\r\n\t\te.preventDefault();\r\n\r\n\t\tif(rowManager.displayRowsCount){\r\n\t\t\tif(newPos >= 0){\r\n\t\t\t\trowManager.element.scrollTop = newPos;\r\n\t\t\t}else{\r\n\t\t\t\trowManager.scrollToRow(rowManager.getDisplayRows()[0]);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.table.element.focus();\r\n\t},\r\n\tscrollPageDown:function(e){\r\n\t\tvar rowManager = this.table.rowManager,\r\n\t\tnewPos = rowManager.scrollTop + rowManager.element.clientHeight,\r\n\t\tscrollMax = rowManager.element.scrollHeight;\r\n\r\n\t\te.preventDefault();\r\n\r\n\t\tif(rowManager.displayRowsCount){\r\n\t\t\tif(newPos <= scrollMax){\r\n\t\t\t\trowManager.element.scrollTop = newPos;\r\n\t\t\t}else{\r\n\t\t\t\trowManager.scrollToRow(rowManager.getDisplayRows()[rowManager.displayRowsCount - 1]);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.table.element.focus();\r\n\r\n\t},\r\n\tscrollToStart:function(e){\r\n\t\tvar rowManager = this.table.rowManager;\r\n\r\n\t\te.preventDefault();\r\n\r\n\t\tif(rowManager.displayRowsCount){\r\n\t\t\trowManager.scrollToRow(rowManager.getDisplayRows()[0]);\r\n\t\t}\r\n\r\n\t\tthis.table.element.focus();\r\n\t},\r\n\tscrollToEnd:function(e){\r\n\t\tvar rowManager = this.table.rowManager;\r\n\r\n\t\te.preventDefault();\r\n\r\n\t\tif(rowManager.displayRowsCount){\r\n\t\t\trowManager.scrollToRow(rowManager.getDisplayRows()[rowManager.displayRowsCount - 1]);\r\n\t\t}\r\n\r\n\t\tthis.table.element.focus();\r\n\t},\r\n\tnavPrev:function(e){\r\n\t\tthis.dispatch(\"keybinding-nav-prev\", e);\r\n\t},\r\n\r\n\tnavNext:function(e){\r\n\t\tthis.dispatch(\"keybinding-nav-next\", e);\r\n\t},\r\n\r\n\tnavLeft:function(e){\r\n\t\tthis.dispatch(\"keybinding-nav-left\", e);\r\n\t},\r\n\r\n\tnavRight:function(e){\r\n\t\tthis.dispatch(\"keybinding-nav-right\", e);\r\n\t},\r\n\r\n\tnavUp:function(e){\r\n\t\tthis.dispatch(\"keybinding-nav-up\", e);\r\n\t},\r\n\r\n\tnavDown:function(e){\r\n\t\tthis.dispatch(\"keybinding-nav-down\", e);\r\n\t},\r\n\r\n\tundo:function(e){\r\n\t\tvar cell = false;\r\n\t\tif(this.table.options.history && this.table.modExists(\"history\") && this.table.modExists(\"edit\")){\r\n\r\n\t\t\tcell = this.table.modules.edit.currentCell;\r\n\r\n\t\t\tif(!cell){\r\n\t\t\t\te.preventDefault();\r\n\t\t\t\tthis.table.modules.history.undo();\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\tredo:function(e){\r\n\t\tvar cell = false;\r\n\t\tif(this.table.options.history && this.table.modExists(\"history\") && this.table.modExists(\"edit\")){\r\n\r\n\t\t\tcell = this.table.modules.edit.currentCell;\r\n\r\n\t\t\tif(!cell){\r\n\t\t\t\te.preventDefault();\r\n\t\t\t\tthis.table.modules.history.redo();\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\tcopyToClipboard:function(e){\r\n\t\tif(!this.table.modules.edit.currentCell){\r\n\t\t\tif(this.table.modExists(\"clipboard\", true)){\r\n\t\t\t\tthis.table.modules.clipboard.copy(false, true);\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n};","import Module from '../../core/Module.js';\r\nimport Helpers from '../../core/tools/Helpers.js';\r\n\r\nclass Menu extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.menuElements = [];\r\n\t\tthis.blurEvent = this.hideMenu.bind(this);\r\n\t\tthis.escEvent = this.escMenu.bind(this);\r\n\t\tthis.nestedMenuBlock = false;\r\n\t\tthis.positionReversedX = false;\r\n\r\n\t\tthis.registerTableOption(\"rowContextMenu\", false);\r\n\t\tthis.registerTableOption(\"rowClickMenu\", false);\r\n\t\tthis.registerTableOption(\"groupContextMenu\", false);\r\n\t\tthis.registerTableOption(\"groupClickMenu\", false);\r\n\r\n\t\tthis.registerColumnOption(\"headerContextMenu\");\r\n\t\tthis.registerColumnOption(\"headerMenu\");\r\n\t\tthis.registerColumnOption(\"contextMenu\");\r\n\t\tthis.registerColumnOption(\"clickMenu\");\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tthis.subscribe(\"cell-layout\", this.layoutCell.bind(this));\r\n\t\tthis.subscribe(\"column-init\", this.initializeColumn.bind(this));\r\n\t\tthis.subscribe(\"row-init\", this.initializeRow.bind(this));\r\n\t}\r\n\r\n\tlayoutCell(cell){\r\n\t\tif(cell.column.definition.contextMenu || cell.column.definition.clickMenu){\r\n\t\t\tthis.initializeCell(cell);\r\n\t\t}\r\n\t}\r\n\r\n\tinitializeColumn(column){\r\n\t\tvar def = column.definition;\r\n\r\n\t\tif(def.headerContextMenu || def.headerClickMenu || def.headerMenu){\r\n\t\t\tthis.initializeColumnHeader(this);\r\n\t\t}\r\n\t}\r\n\r\n\tinitializeColumnHeader(column){\r\n\t\tvar headerMenuEl;\r\n\r\n\t\tif(column.definition.headerContextMenu){\r\n\t\t\tcolumn.getElement().addEventListener(\"contextmenu\", this.LoadMenuEvent.bind(this, column, column.definition.headerContextMenu));\r\n\t\t\tthis.tapHold(column, column.definition.headerContextMenu);\r\n\t\t}\r\n\r\n\t\t// if(column.definition.headerClickMenu){\r\n\t\t// \tcolumn.getElement().addEventListener(\"click\", this.LoadMenuEvent.bind(this, column, column.definition.headerClickMenu));\r\n\t\t// }\r\n\r\n\t\tif(column.definition.headerMenu){\r\n\r\n\t\t\theaderMenuEl = document.createElement(\"span\");\r\n\t\t\theaderMenuEl.classList.add(\"tabulator-header-menu-button\");\r\n\t\t\theaderMenuEl.innerHTML = \"⋮\";\r\n\r\n\t\t\theaderMenuEl.addEventListener(\"click\", (e) => {\r\n\t\t\t\te.stopPropagation();\r\n\t\t\t\te.preventDefault();\r\n\r\n\t\t\t\tthis.LoadMenuEvent(column, column.definition.headerMenu, e);\r\n\t\t\t});\r\n\r\n\t\t\tcolumn.titleElement.insertBefore(headerMenuEl, column.titleElement.firstChild);\r\n\t\t}\r\n\t}\r\n\r\n\tLoadMenuEvent(component, menu, e){\r\n\t\tmenu = typeof menu == \"function\" ? menu.call(this.table, component.getComponent(), e) : menu;\r\n\r\n\t\t// if(component instanceof Cell){\r\n\t\t// \te.stopImmediatePropagation();\r\n\t\t// }\r\n\r\n\t\tthis.loadMenu(e, component, menu);\r\n\t}\r\n\r\n\ttapHold(component, menu){\r\n\t\tvar element = component.getElement(),\r\n\t\ttapHold = null,\r\n\t\tloaded = false;\r\n\r\n\t\telement.addEventListener(\"touchstart\", (e) => {\r\n\t\t\tclearTimeout(tapHold);\r\n\t\t\tloaded = false;\r\n\r\n\t\t\ttapHold = setTimeout(() => {\r\n\t\t\t\tclearTimeout(tapHold);\r\n\t\t\t\ttapHold = null;\r\n\t\t\t\tloaded = true;\r\n\r\n\t\t\t\tthis.LoadMenuEvent(component, menu, e);\r\n\t\t\t}, 1000);\r\n\r\n\t\t}, {passive: true});\r\n\r\n\t\telement.addEventListener(\"touchend\", (e) => {\r\n\t\t\tclearTimeout(tapHold);\r\n\t\t\ttapHold = null;\r\n\r\n\t\t\tif(loaded){\r\n\t\t\t\te.preventDefault();\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tinitializeCell(cell){\r\n\t\tif(cell.column.definition.contextMenu){\r\n\t\t\tcell.getElement(true).addEventListener(\"contextmenu\", this.LoadMenuEvent.bind(this, cell, cell.column.definition.contextMenu));\r\n\t\t\tthis.tapHold(cell, cell.column.definition.contextMenu);\r\n\t\t}\r\n\r\n\t\tif(cell.column.definition.clickMenu){\r\n\t\t\tcell.getElement(true).addEventListener(\"click\", this.LoadMenuEvent.bind(this, cell, cell.column.definition.clickMenu));\r\n\t\t}\r\n\t}\r\n\r\n\tinitializeRow(row){\r\n\t\tif(this.table.options.rowContextMenu){\r\n\t\t\trow.getElement().addEventListener(\"contextmenu\", this.LoadMenuEvent.bind(this, row, this.table.options.rowContextMenu));\r\n\t\t\tthis.tapHold(row, this.table.options.rowContextMenu);\r\n\t\t}\r\n\r\n\t\tif(this.table.options.rowClickMenu){\r\n\t\t\trow.getElement().addEventListener(\"click\", this.LoadMenuEvent.bind(this, row, this.table.options.rowClickMenu));\r\n\t\t}\r\n\t}\r\n\r\n\tinitializeGroup (group){\r\n\t\tif(this.table.options.groupContextMenu){\r\n\t\t\tgroup.getElement().addEventListener(\"contextmenu\", this.LoadMenuEvent.bind(this, group, this.table.options.groupContextMenu));\r\n\t\t\tthis.tapHold(group, this.table.options.groupContextMenu);\r\n\t\t}\r\n\r\n\t\tif(this.table.options.groupClickMenu){\r\n\t\t\tgroup.getElement().addEventListener(\"click\", this.LoadMenuEvent.bind(this, group, this.table.options.groupClickMenu));\r\n\t\t}\r\n\t}\r\n\r\n\tloadMenu(e, component, menu, parentEl){\r\n\r\n\t\tvar touch = !(e instanceof MouseEvent);\r\n\r\n\t\tvar menuEl = document.createElement(\"div\");\r\n\t\tmenuEl.classList.add(\"tabulator-menu\");\r\n\r\n\t\tif(!touch){\r\n\t\t\te.preventDefault();\r\n\t\t}\r\n\r\n\t\t//abort if no menu set\r\n\t\tif(!menu || !menu.length){\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif(!parentEl){\r\n\t\t\tif(this.nestedMenuBlock){\r\n\t\t\t\t//abort if child menu already open\r\n\t\t\t\tif(this.isOpen()){\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tthis.nestedMenuBlock = setTimeout(() => {\r\n\t\t\t\t\tthis.nestedMenuBlock = false;\r\n\t\t\t\t}, 100)\r\n\t\t\t}\r\n\r\n\t\t\tthis.hideMenu();\r\n\t\t\tthis.menuElements = [];\r\n\t\t}\r\n\r\n\t\tmenu.forEach((item) => {\r\n\t\t\tvar itemEl = document.createElement(\"div\"),\r\n\t\t\tlabel = item.label,\r\n\t\t\tdisabled = item.disabled;\r\n\r\n\t\t\tif(item.separator){\r\n\t\t\t\titemEl.classList.add(\"tabulator-menu-separator\");\r\n\t\t\t}else{\r\n\t\t\t\titemEl.classList.add(\"tabulator-menu-item\");\r\n\r\n\t\t\t\tif(typeof label == \"function\"){\r\n\t\t\t\t\tlabel = label.call(this.table, component.getComponent());\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(label instanceof Node){\r\n\t\t\t\t\titemEl.appendChild(label);\r\n\t\t\t\t}else{\r\n\t\t\t\t\titemEl.innerHTML = label;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(typeof disabled == \"function\"){\r\n\t\t\t\t\tdisabled = disabled.call(this.table, component.getComponent());\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(disabled){\r\n\t\t\t\t\titemEl.classList.add(\"tabulator-menu-item-disabled\");\r\n\t\t\t\t\titemEl.addEventListener(\"click\", (e) => {\r\n\t\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\t});\r\n\t\t\t\t}else{\r\n\t\t\t\t\tif(item.menu && item.menu.length){\r\n\t\t\t\t\t\titemEl.addEventListener(\"click\", (e) => {\r\n\t\t\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\t\t\tthis.hideOldSubMenus(menuEl);\r\n\t\t\t\t\t\t\tthis.loadMenu(e, component, item.menu, itemEl);\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tif(item.action){\r\n\t\t\t\t\t\t\titemEl.addEventListener(\"click\", (e) => {\r\n\t\t\t\t\t\t\t\titem.action(e, component.getComponent());\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(item.menu && item.menu.length){\r\n\t\t\t\t\titemEl.classList.add(\"tabulator-menu-item-submenu\");\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tmenuEl.appendChild(itemEl);\r\n\t\t});\r\n\r\n\t\tmenuEl.addEventListener(\"click\", (e) => {\r\n\t\t\tthis.hideMenu();\r\n\t\t});\r\n\r\n\t\tthis.menuElements.push(menuEl);\r\n\t\tthis.positionMenu(menuEl, parentEl, touch, e);\r\n\t}\r\n\r\n\thideOldSubMenus(menuEl){\r\n\t\tvar index = this.menuElements.indexOf(menuEl);\r\n\r\n\t\tif(index > -1){\r\n\t\t\tfor(let i = this.menuElements.length - 1; i > index; i--){\r\n\t\t\t\tvar el = this.menuElements[i];\r\n\r\n\t\t\t\tif(el.parentNode){\r\n\t\t\t\t\tel.parentNode.removeChild(el);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.menuElements.pop();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tpositionMenu(element, parentEl, touch, e){\r\n\t\tvar docHeight = Math.max(document.body.offsetHeight, window.innerHeight),\r\n\t\tx, y, parentOffset;\r\n\r\n\t\tif(!parentEl){\r\n\t\t\tx = touch ? e.touches[0].pageX : e.pageX;\r\n\t\t\ty = touch ? e.touches[0].pageY : e.pageY;\r\n\r\n\t\t\tthis.positionReversedX = false;\r\n\t\t}else{\r\n\t\t\tparentOffset = Helpers.elOffset(parentEl);\r\n\t\t\tx = parentOffset.left + parentEl.offsetWidth;\r\n\t\t\ty = parentOffset.top - 1;\r\n\t\t}\r\n\r\n\t\telement.style.top = y + \"px\";\r\n\t\telement.style.left = x + \"px\";\r\n\r\n\t\tsetTimeout(() => {\r\n\t\t\tthis.table.rowManager.element.addEventListener(\"scroll\", this.blurEvent);\r\n\t\t\tdocument.body.addEventListener(\"click\", this.blurEvent);\r\n\t\t\tdocument.body.addEventListener(\"contextmenu\", this.blurEvent);\r\n\t\t\twindow.addEventListener(\"resize\", this.blurEvent);\r\n\t\t\tdocument.body.addEventListener(\"keydown\", this.escEvent);\r\n\t\t}, 100);\r\n\r\n\t\tdocument.body.appendChild(element);\r\n\r\n\t\t//move menu to start on bottom edge if it is too close to the edge of the screen\r\n\t\tif((y + element.offsetHeight) >= docHeight){\r\n\t\t\telement.style.top = \"\";\r\n\r\n\t\t\tif(parentEl){\r\n\t\t\t\telement.style.bottom = (docHeight - parentOffset.top - parentEl.offsetHeight - 1) + \"px\";\r\n\t\t\t}else{\r\n\t\t\t\telement.style.bottom = (docHeight - y) + \"px\";\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//move menu to start on right edge if it is too close to the edge of the screen\r\n\t\tif((x + element.offsetWidth) >= document.body.offsetWidth || this.positionReversedX){\r\n\t\t\telement.style.left = \"\";\r\n\r\n\t\t\tif(parentEl){\r\n\t\t\t\telement.style.right = (document.documentElement.offsetWidth - parentOffset.left) + \"px\";\r\n\t\t\t}else{\r\n\t\t\t\telement.style.right = (document.documentElement.offsetWidth - x) + \"px\";\r\n\t\t\t}\r\n\r\n\t\t\tthis.positionReversedX = true;\r\n\t\t}\r\n\t}\r\n\r\n\tisOpen(){\r\n\t\treturn !!this.menuElements.length;\r\n\t}\r\n\r\n\tescMenu(e){\r\n\t\tif(e.keyCode == 27){\r\n\t\t\tthis.hideMenu();\r\n\t\t}\r\n\t}\r\n\r\n\thideMenu(){\r\n\t\tthis.menuElements.forEach((menuEl) => {\r\n\t\t\tif(menuEl.parentNode){\r\n\t\t\t\tmenuEl.parentNode.removeChild(menuEl);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tdocument.body.removeEventListener(\"keydown\", this.escEvent);\r\n\t\tdocument.body.removeEventListener(\"click\", this.blurEvent);\r\n\t\tdocument.body.removeEventListener(\"contextmenu\", this.blurEvent);\r\n\t\twindow.removeEventListener(\"resize\", this.blurEvent);\r\n\t\tthis.table.rowManager.element.removeEventListener(\"scroll\", this.blurEvent);\r\n\t}\r\n}\r\n\r\nMenu.moduleName = \"menu\";\r\n\r\nexport default Menu;","import Module from '../../core/Module.js';\r\nimport Helpers from '../../core/tools/Helpers.js';\r\n\r\nclass MoveColumns extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.placeholderElement = this.createPlaceholderElement();\r\n\t\tthis.hoverElement = false; //floating column header element\r\n\t\tthis.checkTimeout = false; //click check timeout holder\r\n\t\tthis.checkPeriod = 250; //period to wait on mousedown to consider this a move and not a click\r\n\t\tthis.moving = false; //currently moving column\r\n\t\tthis.toCol = false; //destination column\r\n\t\tthis.toColAfter = false; //position of moving column relative to the desitnation column\r\n\t\tthis.startX = 0; //starting position within header element\r\n\t\tthis.autoScrollMargin = 40; //auto scroll on edge when within margin\r\n\t\tthis.autoScrollStep = 5; //auto scroll distance in pixels\r\n\t\tthis.autoScrollTimeout = false; //auto scroll timeout\r\n\t\tthis.touchMove = false;\r\n\r\n\t\tthis.moveHover = this.moveHover.bind(this);\r\n\t\tthis.endMove = this.endMove.bind(this);\r\n\r\n\t\tthis.registerTableOption(\"movableColumns\", false); //enable movable columns\r\n\t}\r\n\r\n\tcreatePlaceholderElement(){\r\n\t\tvar el = document.createElement(\"div\");\r\n\r\n\t\tel.classList.add(\"tabulator-col\");\r\n\t\tel.classList.add(\"tabulator-col-placeholder\");\r\n\r\n\t\treturn el;\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tthis.subscribe(\"column-init\", this.initializeColumn.bind(this));\r\n\t}\r\n\r\n\tinitializeColumn(column){\r\n\t\tvar self = this,\r\n\t\tconfig = {},\r\n\t\tcolEl;\r\n\r\n\t\tif(!column.modules.frozen){\r\n\r\n\t\t\tcolEl = column.getElement();\r\n\r\n\t\t\tconfig.mousemove = function(e){\r\n\t\t\t\tif(column.parent === self.moving.parent){\r\n\t\t\t\t\tif((((self.touchMove ? e.touches[0].pageX : e.pageX) - Helpers.elOffset(colEl).left) + self.table.columnManager.element.scrollLeft) > (column.getWidth() / 2)){\r\n\t\t\t\t\t\tif(self.toCol !== column || !self.toColAfter){\r\n\t\t\t\t\t\t\tcolEl.parentNode.insertBefore(self.placeholderElement, colEl.nextSibling);\r\n\t\t\t\t\t\t\tself.moveColumn(column, true);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tif(self.toCol !== column || self.toColAfter){\r\n\t\t\t\t\t\t\tcolEl.parentNode.insertBefore(self.placeholderElement, colEl);\r\n\t\t\t\t\t\t\tself.moveColumn(column, false);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}.bind(self);\r\n\r\n\t\t\tcolEl.addEventListener(\"mousedown\", function(e){\r\n\t\t\t\tself.touchMove = false;\r\n\t\t\t\tif(e.which === 1){\r\n\t\t\t\t\tself.checkTimeout = setTimeout(function(){\r\n\t\t\t\t\t\tself.startMove(e, column);\r\n\t\t\t\t\t}, self.checkPeriod);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tcolEl.addEventListener(\"mouseup\", function(e){\r\n\t\t\t\tif(e.which === 1){\r\n\t\t\t\t\tif(self.checkTimeout){\r\n\t\t\t\t\t\tclearTimeout(self.checkTimeout);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tself.bindTouchEvents(column);\r\n\t\t}\r\n\r\n\t\tcolumn.modules.moveColumn = config;\r\n\t}\r\n\r\n\tbindTouchEvents(column){\r\n\t\tvar colEl = column.getElement(),\r\n\t\tstartXMove = false, //shifting center position of the cell\r\n\t\tdir = false,\r\n\t\tcurrentCol, nextCol, prevCol, nextColWidth, prevColWidth, nextColWidthLast, prevColWidthLast;\r\n\r\n\t\tcolEl.addEventListener(\"touchstart\", (e) => {\r\n\t\t\tthis.checkTimeout = setTimeout(() => {\r\n\t\t\t\tthis.touchMove = true;\r\n\t\t\t\tcurrentCol = column;\r\n\t\t\t\tnextCol = column.nextColumn();\r\n\t\t\t\tnextColWidth = nextCol ? nextCol.getWidth()/2 : 0;\r\n\t\t\t\tprevCol = column.prevColumn();\r\n\t\t\t\tprevColWidth = prevCol ? prevCol.getWidth()/2 : 0;\r\n\t\t\t\tnextColWidthLast = 0;\r\n\t\t\t\tprevColWidthLast = 0;\r\n\t\t\t\tstartXMove = false;\r\n\r\n\t\t\t\tthis.startMove(e, column);\r\n\t\t\t}, this.checkPeriod);\r\n\t\t}, {passive: true});\r\n\r\n\t\tcolEl.addEventListener(\"touchmove\", (e) => {\r\n\t\t\tvar halfCol, diff, moveToCol;\r\n\r\n\t\t\tif(this.moving){\r\n\t\t\t\tthis.moveHover(e);\r\n\r\n\t\t\t\tif(!startXMove){\r\n\t\t\t\t\tstartXMove = e.touches[0].pageX;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tdiff = e.touches[0].pageX - startXMove;\r\n\r\n\t\t\t\tif(diff > 0){\r\n\t\t\t\t\tif(nextCol && diff - nextColWidthLast > nextColWidth){\r\n\t\t\t\t\t\tmoveToCol = nextCol;\r\n\r\n\t\t\t\t\t\tif(moveToCol !== column){\r\n\t\t\t\t\t\t\tstartXMove = e.touches[0].pageX;\r\n\t\t\t\t\t\t\tmoveToCol.getElement().parentNode.insertBefore(this.placeholderElement, moveToCol.getElement().nextSibling);\r\n\t\t\t\t\t\t\tthis.moveColumn(moveToCol, true);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}else{\r\n\t\t\t\t\tif(prevCol && -diff - prevColWidthLast > prevColWidth){\r\n\t\t\t\t\t\tmoveToCol = prevCol;\r\n\r\n\t\t\t\t\t\tif(moveToCol !== column){\r\n\t\t\t\t\t\t\tstartXMove = e.touches[0].pageX;\r\n\t\t\t\t\t\t\tmoveToCol.getElement().parentNode.insertBefore(this.placeholderElement, moveToCol.getElement());\r\n\t\t\t\t\t\t\tthis.moveColumn(moveToCol, false);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(moveToCol){\r\n\t\t\t\t\tcurrentCol = moveToCol;\r\n\t\t\t\t\tnextCol = moveToCol.nextColumn();\r\n\t\t\t\t\tnextColWidthLast = nextColWidth;\r\n\t\t\t\t\tnextColWidth = nextCol ? nextCol.getWidth() / 2 : 0;\r\n\t\t\t\t\tprevCol = moveToCol.prevColumn();\r\n\t\t\t\t\tprevColWidthLast = prevColWidth;\r\n\t\t\t\t\tprevColWidth = prevCol ? prevCol.getWidth() / 2 : 0;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}, {passive: true});\r\n\r\n\t\tcolEl.addEventListener(\"touchend\", (e) => {\r\n\t\t\tif(this.checkTimeout){\r\n\t\t\t\tclearTimeout(this.checkTimeout);\r\n\t\t\t}\r\n\t\t\tif(this.moving){\r\n\t\t\t\tthis.endMove(e);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tstartMove(e, column){\r\n\t\tvar element = column.getElement();\r\n\r\n\t\tthis.moving = column;\r\n\t\tthis.startX = (this.touchMove ? e.touches[0].pageX : e.pageX) - Helpers.elOffset(element).left;\r\n\r\n\t\tthis.table.element.classList.add(\"tabulator-block-select\");\r\n\r\n\t\t//create placeholder\r\n\t\tthis.placeholderElement.style.width = column.getWidth() + \"px\";\r\n\t\tthis.placeholderElement.style.height = column.getHeight() + \"px\";\r\n\r\n\t\telement.parentNode.insertBefore(this.placeholderElement, element);\r\n\t\telement.parentNode.removeChild(element);\r\n\r\n\t\t//create hover element\r\n\t\tthis.hoverElement = element.cloneNode(true);\r\n\t\tthis.hoverElement.classList.add(\"tabulator-moving\");\r\n\r\n\t\tthis.table.columnManager.getElement().appendChild(this.hoverElement);\r\n\r\n\t\tthis.hoverElement.style.left = \"0\";\r\n\t\tthis.hoverElement.style.bottom = \"0\";\r\n\r\n\t\tif(!this.touchMove){\r\n\t\t\tthis._bindMouseMove();\r\n\r\n\t\t\tdocument.body.addEventListener(\"mousemove\", this.moveHover);\r\n\t\t\tdocument.body.addEventListener(\"mouseup\", this.endMove);\r\n\t\t}\r\n\r\n\t\tthis.moveHover(e);\r\n\t}\r\n\r\n\t_bindMouseMove(){\r\n\t\tthis.table.columnManager.columnsByIndex.forEach(function(column){\r\n\t\t\tif(column.modules.moveColumn.mousemove){\r\n\t\t\t\tcolumn.getElement().addEventListener(\"mousemove\", column.modules.moveColumn.mousemove);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t_unbindMouseMove(){\r\n\t\tthis.table.columnManager.columnsByIndex.forEach(function(column){\r\n\t\t\tif(column.modules.moveColumn.mousemove){\r\n\t\t\t\tcolumn.getElement().removeEventListener(\"mousemove\", column.modules.moveColumn.mousemove);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tmoveColumn(column, after){\r\n\t\tvar movingCells = this.moving.getCells();\r\n\r\n\t\tthis.toCol = column;\r\n\t\tthis.toColAfter = after;\r\n\r\n\t\tif(after){\r\n\t\t\tcolumn.getCells().forEach(function(cell, i){\r\n\t\t\t\tvar cellEl = cell.getElement(true);\r\n\t\t\t\tcellEl.parentNode.insertBefore(movingCells[i].getElement(), cellEl.nextSibling);\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tcolumn.getCells().forEach(function(cell, i){\r\n\t\t\t\tvar cellEl = cell.getElement(true);\r\n\t\t\t\tcellEl.parentNode.insertBefore(movingCells[i].getElement(), cellEl);\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tendMove(e){\r\n\t\tif(e.which === 1 || this.touchMove){\r\n\t\t\tthis._unbindMouseMove();\r\n\r\n\t\t\tthis.placeholderElement.parentNode.insertBefore(this.moving.getElement(), this.placeholderElement.nextSibling);\r\n\t\t\tthis.placeholderElement.parentNode.removeChild(this.placeholderElement);\r\n\t\t\tthis.hoverElement.parentNode.removeChild(this.hoverElement);\r\n\r\n\t\t\tthis.table.element.classList.remove(\"tabulator-block-select\");\r\n\r\n\t\t\tif(this.toCol){\r\n\t\t\t\tthis.table.columnManager.moveColumnActual(this.moving, this.toCol, this.toColAfter);\r\n\t\t\t}\r\n\r\n\t\t\tthis.moving = false;\r\n\t\t\tthis.toCol = false;\r\n\t\t\tthis.toColAfter = false;\r\n\r\n\t\t\tif(!this.touchMove){\r\n\t\t\t\tdocument.body.removeEventListener(\"mousemove\", this.moveHover);\r\n\t\t\t\tdocument.body.removeEventListener(\"mouseup\", this.endMove);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tmoveHover(e){\r\n\t\tvar columnHolder = this.table.columnManager.getElement(),\r\n\t\tscrollLeft = columnHolder.scrollLeft,\r\n\t\txPos = ((this.touchMove ? e.touches[0].pageX : e.pageX) - Helpers.elOffset(columnHolder).left) + scrollLeft,\r\n\t\tscrollPos;\r\n\r\n\t\tthis.hoverElement.style.left = (xPos - this.startX) + \"px\";\r\n\r\n\t\tif(xPos - scrollLeft < this.autoScrollMargin){\r\n\t\t\tif(!this.autoScrollTimeout){\r\n\t\t\t\tthis.autoScrollTimeout = setTimeout(() => {\r\n\t\t\t\t\tscrollPos = Math.max(0,scrollLeft-5);\r\n\t\t\t\t\tthis.table.rowManager.getElement().scrollLeft = scrollPos;\r\n\t\t\t\t\tthis.autoScrollTimeout = false;\r\n\t\t\t\t}, 1);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(scrollLeft + columnHolder.clientWidth - xPos < this.autoScrollMargin){\r\n\t\t\tif(!this.autoScrollTimeout){\r\n\t\t\t\tthis.autoScrollTimeout = setTimeout(() => {\r\n\t\t\t\t\tscrollPos = Math.min(columnHolder.clientWidth, scrollLeft+5);\r\n\t\t\t\t\tthis.table.rowManager.getElement().scrollLeft = scrollPos;\r\n\t\t\t\t\tthis.autoScrollTimeout = false;\r\n\t\t\t\t}, 1);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n\r\nMoveColumns.moduleName = \"moveColumn\";\r\n\r\nexport default MoveColumns;\r\n","import Module from '../../core/Module.js';\r\nimport Helpers from '../../core/tools/Helpers.js';\r\n\r\nclass MoveRows extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.placeholderElement = this.createPlaceholderElement();\r\n\t\tthis.hoverElement = false; //floating row header element\r\n\t\tthis.checkTimeout = false; //click check timeout holder\r\n\t\tthis.checkPeriod = 150; //period to wait on mousedown to consider this a move and not a click\r\n\t\tthis.moving = false; //currently moving row\r\n\t\tthis.toRow = false; //destination row\r\n\t\tthis.toRowAfter = false; //position of moving row relative to the desitnation row\r\n\t\tthis.hasHandle = false; //row has handle instead of fully movable row\r\n\t\tthis.startY = 0; //starting Y position within header element\r\n\t\tthis.startX = 0; //starting X position within header element\r\n\r\n\t\tthis.moveHover = this.moveHover.bind(this);\r\n\t\tthis.endMove = this.endMove.bind(this);\r\n\t\tthis.tableRowDropEvent = false;\r\n\r\n\t\tthis.touchMove = false;\r\n\r\n\t\tthis.connection = false;\r\n\t\tthis.connectionSelectorsTables = false;\r\n\t\tthis.connectionSelectorsElements = false;\r\n\t\tthis.connectionElements = [];\r\n\t\tthis.connections = [];\r\n\r\n\t\tthis.connectedTable = false;\r\n\t\tthis.connectedRow = false;\r\n\r\n\t\tthis.registerTableOption(\"movableRows\", false); //enable movable rows\r\n\t\tthis.registerTableOption(\"movableRowsConnectedTables\", false); //tables for movable rows to be connected to\r\n\t\tthis.registerTableOption(\"movableRowsConnectedElements\", false); //other elements for movable rows to be connected to\r\n\t\tthis.registerTableOption(\"movableRowsSender\", false);\r\n\t\tthis.registerTableOption(\"movableRowsReceiver\", \"insert\");\r\n\r\n\t\tthis.registerColumnOption(\"rowHandle\");\r\n\t}\r\n\r\n\tcreatePlaceholderElement(){\r\n\t\tvar el = document.createElement(\"div\");\r\n\r\n\t\tel.classList.add(\"tabulator-row\");\r\n\t\tel.classList.add(\"tabulator-row-placeholder\");\r\n\r\n\t\treturn el;\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tif(this.table.options.movableRows){\r\n\t\t\tthis.connectionSelectorsTables = this.table.options.movableRowsConnectedTables;\r\n\t\t\tthis.connectionSelectorsElements = this.table.options.movableRowsConnectedElements;\r\n\r\n\t\t\tthis.connection = this.connectionSelectorsTables || this.connectionSelectorsElements;\r\n\r\n\t\t\tthis.subscribe(\"cell-init\", this.initializeCell.bind(this));\r\n\t\t\tthis.subscribe(\"column-init\", this.initializeColumn.bind(this));\r\n\t\t\tthis.subscribe(\"row-init\", this.initializeRow.bind(this));\r\n\t\t}\r\n\t}\r\n\r\n\tinitializeGroupHeader(group){\r\n\t\tvar self = this,\r\n\t\tconfig = {},\r\n\t\trowEl;\r\n\r\n\t\t//inter table drag drop\r\n\t\tconfig.mouseup = function(e){\r\n\t\t\tself.tableRowDrop(e, row);\r\n\t\t}.bind(self);\r\n\r\n\t\t//same table drag drop\r\n\t\tconfig.mousemove = function(e){\r\n\t\t\tif(((e.pageY - Helpers.elOffset(group.element).top) + self.table.rowManager.element.scrollTop) > (group.getHeight() / 2)){\r\n\t\t\t\tif(self.toRow !== group || !self.toRowAfter){\r\n\t\t\t\t\tvar rowEl = group.getElement();\r\n\t\t\t\t\trowEl.parentNode.insertBefore(self.placeholderElement, rowEl.nextSibling);\r\n\t\t\t\t\tself.moveRow(group, true);\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tif(self.toRow !== group || self.toRowAfter){\r\n\t\t\t\t\tvar rowEl = group.getElement();\r\n\t\t\t\t\tif(rowEl.previousSibling){\r\n\t\t\t\t\t\trowEl.parentNode.insertBefore(self.placeholderElement, rowEl);\r\n\t\t\t\t\t\tself.moveRow(group, false);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}.bind(self);\r\n\r\n\t\tgroup.modules.moveRow = config;\r\n\t}\r\n\r\n\tinitializeRow(row){\r\n\t\tvar self = this,\r\n\t\tconfig = {},\r\n\t\trowEl;\r\n\r\n\t\t//inter table drag drop\r\n\t\tconfig.mouseup = function(e){\r\n\t\t\tself.tableRowDrop(e, row);\r\n\t\t}.bind(self);\r\n\r\n\t\t//same table drag drop\r\n\t\tconfig.mousemove = function(e){\r\n\t\t\tvar rowEl = row.getElement();\r\n\r\n\t\t\tif(((e.pageY - Helpers.elOffset(rowEl).top) + self.table.rowManager.element.scrollTop) > (row.getHeight() / 2)){\r\n\t\t\t\tif(self.toRow !== row || !self.toRowAfter){\r\n\t\t\t\t\trowEl.parentNode.insertBefore(self.placeholderElement, rowEl.nextSibling);\r\n\t\t\t\t\tself.moveRow(row, true);\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tif(self.toRow !== row || self.toRowAfter){\r\n\t\t\t\t\trowEl.parentNode.insertBefore(self.placeholderElement, rowEl);\r\n\t\t\t\t\tself.moveRow(row, false);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}.bind(self);\r\n\r\n\r\n\t\tif(!this.hasHandle){\r\n\r\n\t\t\trowEl = row.getElement();\r\n\r\n\t\t\trowEl.addEventListener(\"mousedown\", function(e){\r\n\t\t\t\tif(e.which === 1){\r\n\t\t\t\t\tself.checkTimeout = setTimeout(function(){\r\n\t\t\t\t\t\tself.startMove(e, row);\r\n\t\t\t\t\t}, self.checkPeriod);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\trowEl.addEventListener(\"mouseup\", function(e){\r\n\t\t\t\tif(e.which === 1){\r\n\t\t\t\t\tif(self.checkTimeout){\r\n\t\t\t\t\t\tclearTimeout(self.checkTimeout);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tthis.bindTouchEvents(row, row.getElement());\r\n\t\t}\r\n\r\n\t\trow.modules.moveRow = config;\r\n\t}\r\n\r\n\tinitializeColumn(column){\r\n\t\tif(column.definition.rowHandle && this.table.options.movableRows !== false){\r\n\t\t\tthis.hasHandle = true;\r\n\t\t}\r\n\t}\r\n\r\n\tinitializeCell(cell){\r\n\t\tif(cell.column.definition.rowHandle && this.table.options.movableRows !== false){\r\n\t\t\tvar self = this,\r\n\t\t\tcellEl = cell.getElement(true);\r\n\r\n\t\t\tcellEl.addEventListener(\"mousedown\", function(e){\r\n\t\t\t\tif(e.which === 1){\r\n\t\t\t\t\tself.checkTimeout = setTimeout(function(){\r\n\t\t\t\t\t\tself.startMove(e, cell.row);\r\n\t\t\t\t\t}, self.checkPeriod);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tcellEl.addEventListener(\"mouseup\", function(e){\r\n\t\t\t\tif(e.which === 1){\r\n\t\t\t\t\tif(self.checkTimeout){\r\n\t\t\t\t\t\tclearTimeout(self.checkTimeout);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tthis.bindTouchEvents(cell.row, cellEl);\r\n\t\t}\r\n\t}\r\n\r\n\tbindTouchEvents(row, element){\r\n\t\tvar startYMove = false, //shifting center position of the cell\r\n\t\tdir = false,\r\n\t\tcurrentRow, nextRow, prevRow, nextRowHeight, prevRowHeight, nextRowHeightLast, prevRowHeightLast;\r\n\r\n\t\telement.addEventListener(\"touchstart\", (e) => {\r\n\t\t\tthis.checkTimeout = setTimeout(() => {\r\n\t\t\t\tthis.touchMove = true;\r\n\t\t\t\tcurrentRow = row;\r\n\t\t\t\tnextRow = row.nextRow();\r\n\t\t\t\tnextRowHeight = nextRow ? nextRow.getHeight()/2 : 0;\r\n\t\t\t\tprevRow = row.prevRow();\r\n\t\t\t\tprevRowHeight = prevRow ? prevRow.getHeight()/2 : 0;\r\n\t\t\t\tnextRowHeightLast = 0;\r\n\t\t\t\tprevRowHeightLast = 0;\r\n\t\t\t\tstartYMove = false;\r\n\r\n\t\t\t\tthis.startMove(e, row);\r\n\t\t\t}, this.checkPeriod);\r\n\t\t}, {passive: true});\r\n\t\tthis.moving, this.toRow, this.toRowAfter\r\n\t\telement.addEventListener(\"touchmove\", (e) => {\r\n\r\n\t\t\tvar halfCol, diff, moveToRow;\r\n\r\n\t\t\tif(this.moving){\r\n\t\t\t\te.preventDefault();\r\n\r\n\t\t\t\tthis.moveHover(e);\r\n\r\n\t\t\t\tif(!startYMove){\r\n\t\t\t\t\tstartYMove = e.touches[0].pageY;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tdiff = e.touches[0].pageY - startYMove;\r\n\r\n\t\t\t\tif(diff > 0){\r\n\t\t\t\t\tif(nextRow && diff - nextRowHeightLast > nextRowHeight){\r\n\t\t\t\t\t\tmoveToRow = nextRow;\r\n\r\n\t\t\t\t\t\tif(moveToRow !== row){\r\n\t\t\t\t\t\t\tstartYMove = e.touches[0].pageY\r\n\t\t\t\t\t\t\tmoveToRow.getElement().parentNode.insertBefore(this.placeholderElement, moveToRow.getElement().nextSibling);\r\n\t\t\t\t\t\t\tthis.moveRow(moveToRow, true);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}else{\r\n\t\t\t\t\tif(prevRow && -diff - prevRowHeightLast > prevRowHeight){\r\n\t\t\t\t\t\tmoveToRow = prevRow;\r\n\r\n\t\t\t\t\t\tif(moveToRow !== row){\r\n\t\t\t\t\t\t\tstartYMove = e.touches[0].pageY;\r\n\t\t\t\t\t\t\tmoveToRow.getElement().parentNode.insertBefore(this.placeholderElement, moveToRow.getElement());\r\n\t\t\t\t\t\t\tthis.moveRow(moveToRow, false);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(moveToRow){\r\n\t\t\t\t\tcurrentRow = moveToRow;\r\n\t\t\t\t\tnextRow = moveToRow.nextRow();\r\n\t\t\t\t\tnextRowHeightLast = nextRowHeight;\r\n\t\t\t\t\tnextRowHeight = nextRow ? nextRow.getHeight() / 2 : 0;\r\n\t\t\t\t\tprevRow = moveToRow.prevRow();\r\n\t\t\t\t\tprevRowHeightLast = prevRowHeight;\r\n\t\t\t\t\tprevRowHeight = prevRow ? prevRow.getHeight() / 2 : 0;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\telement.addEventListener(\"touchend\", (e) => {\r\n\t\t\tif(this.checkTimeout){\r\n\t\t\t\tclearTimeout(this.checkTimeout);\r\n\t\t\t}\r\n\t\t\tif(this.moving){\r\n\t\t\t\tthis.endMove(e);\r\n\t\t\t\tthis.touchMove = false;\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t_bindMouseMove(){\r\n\t\tthis.table.rowManager.getDisplayRows().forEach((row) => {\r\n\t\t\tif((row.type === \"row\" || row.type === \"group\") && row.modules.moveRow.mousemove){\r\n\t\t\t\trow.getElement().addEventListener(\"mousemove\", row.modules.moveRow.mousemove);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t_unbindMouseMove(){\r\n\t\tthis.table.rowManager.getDisplayRows().forEach((row) => {\r\n\t\t\tif((row.type === \"row\" || row.type === \"group\") && row.modules.moveRow.mousemove){\r\n\t\t\t\trow.getElement().removeEventListener(\"mousemove\", row.modules.moveRow.mousemove);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tstartMove(e, row){\r\n\t\tvar element = row.getElement();\r\n\r\n\t\tthis.setStartPosition(e, row);\r\n\r\n\t\tthis.moving = row;\r\n\r\n\t\tthis.table.element.classList.add(\"tabulator-block-select\");\r\n\r\n\t\t//create placeholder\r\n\t\tthis.placeholderElement.style.width = row.getWidth() + \"px\";\r\n\t\tthis.placeholderElement.style.height = row.getHeight() + \"px\";\r\n\r\n\t\tif(!this.connection){\r\n\t\t\telement.parentNode.insertBefore(this.placeholderElement, element);\r\n\t\t\telement.parentNode.removeChild(element);\r\n\t\t}else{\r\n\t\t\tthis.table.element.classList.add(\"tabulator-movingrow-sending\");\r\n\t\t\tthis.connectToTables(row);\r\n\t\t}\r\n\r\n\t\t//create hover element\r\n\t\tthis.hoverElement = element.cloneNode(true);\r\n\t\tthis.hoverElement.classList.add(\"tabulator-moving\");\r\n\r\n\t\tif(this.connection){\r\n\t\t\tdocument.body.appendChild(this.hoverElement);\r\n\t\t\tthis.hoverElement.style.left = \"0\";\r\n\t\t\tthis.hoverElement.style.top = \"0\";\r\n\t\t\tthis.hoverElement.style.width = this.table.element.clientWidth + \"px\";\r\n\t\t\tthis.hoverElement.style.whiteSpace = \"nowrap\";\r\n\t\t\tthis.hoverElement.style.overflow = \"hidden\";\r\n\t\t\tthis.hoverElement.style.pointerEvents = \"none\";\r\n\t\t}else{\r\n\t\t\tthis.table.rowManager.getTableElement().appendChild(this.hoverElement);\r\n\r\n\t\t\tthis.hoverElement.style.left = \"0\";\r\n\t\t\tthis.hoverElement.style.top = \"0\";\r\n\r\n\t\t\tthis._bindMouseMove();\r\n\t\t}\r\n\r\n\t\tdocument.body.addEventListener(\"mousemove\", this.moveHover);\r\n\t\tdocument.body.addEventListener(\"mouseup\", this.endMove);\r\n\r\n\t\tthis.moveHover(e);\r\n\t}\r\n\r\n\tsetStartPosition(e, row){\r\n\t\tvar pageX = this.touchMove ? e.touches[0].pageX : e.pageX,\r\n\t\tpageY = this.touchMove ? e.touches[0].pageY : e.pageY,\r\n\t\telement, position;\r\n\r\n\t\telement = row.getElement();\r\n\t\tif(this.connection){\r\n\t\t\tposition = element.getBoundingClientRect();\r\n\r\n\t\t\tthis.startX = position.left - pageX + window.pageXOffset;\r\n\t\t\tthis.startY = position.top - pageY + window.pageYOffset;\r\n\t\t}else{\r\n\t\t\tthis.startY = (pageY - element.getBoundingClientRect().top);\r\n\t\t}\r\n\t}\r\n\r\n\tendMove(e){\r\n\t\tif(!e || e.which === 1 || this.touchMove){\r\n\t\t\tthis._unbindMouseMove();\r\n\r\n\t\t\tif(!this.connection){\r\n\t\t\t\tthis.placeholderElement.parentNode.insertBefore(this.moving.getElement(), this.placeholderElement.nextSibling);\r\n\t\t\t\tthis.placeholderElement.parentNode.removeChild(this.placeholderElement);\r\n\t\t\t}\r\n\r\n\t\t\tthis.hoverElement.parentNode.removeChild(this.hoverElement);\r\n\r\n\t\t\tthis.table.element.classList.remove(\"tabulator-block-select\");\r\n\r\n\t\t\tif(this.toRow){\r\n\t\t\t\tthis.table.rowManager.moveRow(this.moving, this.toRow, this.toRowAfter);\r\n\t\t\t}\r\n\r\n\t\t\tthis.moving = false;\r\n\t\t\tthis.toRow = false;\r\n\t\t\tthis.toRowAfter = false;\r\n\r\n\t\t\tdocument.body.removeEventListener(\"mousemove\", this.moveHover);\r\n\t\t\tdocument.body.removeEventListener(\"mouseup\", this.endMove);\r\n\r\n\t\t\tif(this.connection){\r\n\t\t\t\tthis.table.element.classList.remove(\"tabulator-movingrow-sending\");\r\n\t\t\t\tthis.disconnectFromTables();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tmoveRow(row, after){\r\n\t\tthis.toRow = row;\r\n\t\tthis.toRowAfter = after;\r\n\t}\r\n\r\n\tmoveHover(e){\r\n\t\tif(this.connection){\r\n\t\t\tthis.moveHoverConnections.call(this, e);\r\n\t\t}else{\r\n\t\t\tthis.moveHoverTable.call(this, e);\r\n\t\t}\r\n\t}\r\n\r\n\tmoveHoverTable(e){\r\n\t\tvar rowHolder = this.table.rowManager.getElement(),\r\n\t\tscrollTop = rowHolder.scrollTop,\r\n\t\tyPos = ((this.touchMove ? e.touches[0].pageY : e.pageY) - rowHolder.getBoundingClientRect().top) + scrollTop,\r\n\t\tscrollPos;\r\n\r\n\t\tthis.hoverElement.style.top = (yPos - this.startY) + \"px\";\r\n\t}\r\n\r\n\tmoveHoverConnections(e){\r\n\t\tthis.hoverElement.style.left = (this.startX + (this.touchMove ? e.touches[0].pageX : e.pageX)) + \"px\";\r\n\t\tthis.hoverElement.style.top = (this.startY + (this.touchMove ? e.touches[0].pageY : e.pageY)) + \"px\";\r\n\t}\r\n\r\n\telementRowDrop(e, element, row){\r\n\t\tif(this.table.options.movableRowsElementDrop){\r\n\t\t\tthis.dispatchExternal(\"movableRowsElementDrop\", e, element, row ? row.getComponent() : false);\r\n\t\t}\r\n\t}\r\n\r\n\t//establish connection with other tables\r\n\tconnectToTables(row){\r\n\t\tvar connectionTables;\r\n\r\n\t\tif(this.connectionSelectorsTables){\r\n\t\t\tconnectionTables = this.commsConnections(this.connectionSelectorsTables);\r\n\r\n\t\t\tthis.dispatchExternal(\"movableRowsSendingStart\", connectionTables);\r\n\r\n\t\t\tthis.commsSend(this.connectionSelectorsTables, \"moveRow\", \"connect\", {\r\n\t\t\t\trow:row,\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif(this.connectionSelectorsElements){\r\n\r\n\t\t\tthis.connectionElements = [];\r\n\r\n\t\t\tif(!Array.isArray(this.connectionSelectorsElements)){\r\n\t\t\t\tthis.connectionSelectorsElements = [this.connectionSelectorsElements];\r\n\t\t\t}\r\n\r\n\t\t\tthis.connectionSelectorsElements.forEach((query) => {\r\n\t\t\t\tif(typeof query === \"string\"){\r\n\t\t\t\t\tthis.connectionElements = this.connectionElements.concat(Array.prototype.slice.call(document.querySelectorAll(query)));\r\n\t\t\t\t}else{\r\n\t\t\t\t\tthis.connectionElements.push(query);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tthis.connectionElements.forEach((element) => {\r\n\t\t\t\tvar dropEvent = (e) => {\r\n\t\t\t\t\tthis.elementRowDrop(e, element, this.moving);\r\n\t\t\t\t};\r\n\r\n\t\t\t\telement.addEventListener(\"mouseup\", dropEvent);\r\n\t\t\t\telement.tabulatorElementDropEvent = dropEvent;\r\n\r\n\t\t\t\telement.classList.add(\"tabulator-movingrow-receiving\");\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\t//disconnect from other tables\r\n\tdisconnectFromTables(){\r\n\t\tvar connectionTables;\r\n\r\n\t\tif(this.connectionSelectorsTables){\r\n\t\t\tconnectionTables = this.commsConnections(this.connectionSelectorsTables);\r\n\r\n\t\t\tthis.dispatchExternal(\"movableRowsSendingStop\", connectionTables);\r\n\r\n\t\t\tthis.commsSend(this.connectionSelectorsTables, \"moveRow\", \"disconnect\");\r\n\t\t}\r\n\r\n\t\tthis.connectionElements.forEach((element) => {\r\n\t\t\telement.classList.remove(\"tabulator-movingrow-receiving\");\r\n\t\t\telement.removeEventListener(\"mouseup\", element.tabulatorElementDropEvent);\r\n\t\t\tdelete element.tabulatorElementDropEvent;\r\n\t\t});\r\n\t}\r\n\r\n\t//accept incomming connection\r\n\tconnect(table, row){\r\n\t\tif(!this.connectedTable){\r\n\t\t\tthis.connectedTable = table;\r\n\t\t\tthis.connectedRow = row;\r\n\r\n\t\t\tthis.table.element.classList.add(\"tabulator-movingrow-receiving\");\r\n\r\n\t\t\tthis.table.rowManager.getDisplayRows().forEach((row) => {\r\n\t\t\t\tif(row.type === \"row\" && row.modules.moveRow && row.modules.moveRow.mouseup){\r\n\t\t\t\t\trow.getElement().addEventListener(\"mouseup\", row.modules.moveRow.mouseup);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tthis.tableRowDropEvent = this.tableRowDrop.bind(this);\r\n\r\n\t\t\tthis.table.element.addEventListener(\"mouseup\", this.tableRowDropEvent);\r\n\r\n\t\t\tthis.dispatchExternal(\"movableRowsReceivingStart\", row, table);\r\n\r\n\t\t\treturn true;\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Move Row Error - Table cannot accept connection, already connected to table:\", this.connectedTable);\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\t//close incomming connection\r\n\tdisconnect(table){\r\n\t\tif(table === this.connectedTable){\r\n\t\t\tthis.connectedTable = false;\r\n\t\t\tthis.connectedRow = false;\r\n\r\n\t\t\tthis.table.element.classList.remove(\"tabulator-movingrow-receiving\");\r\n\r\n\t\t\tthis.table.rowManager.getDisplayRows().forEach((row) =>{\r\n\t\t\t\tif(row.type === \"row\" && row.modules.moveRow && row.modules.moveRow.mouseup){\r\n\t\t\t\t\trow.getElement().removeEventListener(\"mouseup\", row.modules.moveRow.mouseup);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tthis.table.element.removeEventListener(\"mouseup\", this.tableRowDropEvent);\r\n\r\n\t\t\tthis.dispatchExternal(\"movableRowsReceivingStop\", table);\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Move Row Error - trying to disconnect from non connected table\")\r\n\t\t}\r\n\t}\r\n\r\n\tdropComplete(table, row, success){\r\n\t\tvar sender = false;\r\n\r\n\t\tif(success){\r\n\r\n\t\t\tswitch(typeof this.table.options.movableRowsSender){\r\n\t\t\t\tcase \"string\":\r\n\t\t\t\tsender = this.senders[this.table.options.movableRowsSender];\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"function\":\r\n\t\t\t\tsender = this.table.options.movableRowsSender;\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\r\n\t\t\tif(sender){\r\n\t\t\t\tsender.call(this, this.moving.getComponent(), row ? row.getComponent() : undefined, table)\r\n\t\t\t}else{\r\n\t\t\t\tif(this.table.options.movableRowsSender){\r\n\t\t\t\t\tconsole.warn(\"Mover Row Error - no matching sender found:\", this.table.options.movableRowsSender);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tthis.dispatchExternal(\"movableRowsSent\", this.moving.getComponent(), row ? row.getComponent() : undefined, table);\r\n\t\t}else{\r\n\t\t\tthis.dispatchExternal(\"movableRowsSentFailed\", this.moving.getComponent(), row ? row.getComponent() : undefined, table);\r\n\t\t}\r\n\r\n\t\tthis.endMove();\r\n\t}\r\n\r\n\ttableRowDrop(e, row){\r\n\t\tvar receiver = false,\r\n\t\tsuccess = false;\r\n\r\n\t\te.stopImmediatePropagation();\r\n\r\n\t\tswitch(typeof this.table.options.movableRowsReceiver){\r\n\t\t\tcase \"string\":\r\n\t\t\treceiver = this.receivers[this.table.options.movableRowsReceiver];\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"function\":\r\n\t\t\treceiver = this.table.options.movableRowsReceiver;\r\n\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\tif(receiver){\r\n\t\t\tsuccess = receiver.call(this, this.connectedRow.getComponent(), row ? row.getComponent() : undefined, this.connectedTable)\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Mover Row Error - no matching receiver found:\", this.table.options.movableRowsReceiver)\r\n\t\t}\r\n\r\n\t\tif(success){\r\n\t\t\tthis.dispatchExternal(\"movableRowsReceived\", this.connectedRow.getComponent(), row ? row.getComponent() : undefined, this.connectedTable);\r\n\t\t}else{\r\n\t\t\tthis.dispatchExternal(\"movableRowsReceivedFailed\", this.connectedRow.getComponent(), row ? row.getComponent() : undefined, this.connectedTable);\r\n\t\t}\r\n\r\n\t\tthis.commsSend(this.connectedTable, \"moveRow\", \"dropcomplete\", {\r\n\t\t\trow:row,\r\n\t\t\tsuccess:success,\r\n\t\t});\r\n\t}\r\n\r\n\tcommsReceived(table, action, data){\r\n\t\tswitch(action){\r\n\t\t\tcase \"connect\":\r\n\t\t\treturn this.connect(table, data.row);\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"disconnect\":\r\n\t\t\treturn this.disconnect(table);\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"dropcomplete\":\r\n\t\t\treturn this.dropComplete(table, data.row, data.success);\r\n\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n}\r\n\r\nMoveRows.prototype.receivers = {\r\n\tinsert:function(fromRow, toRow, fromTable){\r\n\t\tthis.table.addRow(fromRow.getData(), undefined, toRow);\r\n\t\treturn true;\r\n\t},\r\n\r\n\tadd:function(fromRow, toRow, fromTable){\r\n\t\tthis.table.addRow(fromRow.getData());\r\n\t\treturn true;\r\n\t},\r\n\r\n\tupdate:function(fromRow, toRow, fromTable){\r\n\t\tif(toRow){\r\n\t\t\ttoRow.update(fromRow.getData());\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t},\r\n\r\n\treplace:function(fromRow, toRow, fromTable){\r\n\t\tif(toRow){\r\n\t\t\tthis.table.addRow(fromRow.getData(), undefined, toRow);\r\n\t\t\ttoRow.delete();\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t},\r\n};\r\n\r\nMoveRows.prototype.senders = {\r\n\tdelete:function(fromRow, toRow, toTable){\r\n\t\tfromRow.delete();\r\n\t}\r\n};\r\n\r\nMoveRows.moduleName = \"moveRow\";\r\n\r\nexport default MoveRows;","import Module from '../../core/Module.js';\r\n\r\nimport defaultMutators from './defaults/mutators.js';\r\n\r\nclass Mutator extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.allowedTypes = [\"\", \"data\", \"edit\", \"clipboard\"]; //list of muatation types\r\n\t\tthis.enabled = true;\r\n\r\n\t\tthis.registerColumnOption(\"mutator\");\r\n\t\tthis.registerColumnOption(\"mutatorParams\");\r\n\t\tthis.registerColumnOption(\"mutatorData\");\r\n\t\tthis.registerColumnOption(\"mutatorDataParams\");\r\n\t\tthis.registerColumnOption(\"mutatorEdit\");\r\n\t\tthis.registerColumnOption(\"mutatorEditParams\");\r\n\t\tthis.registerColumnOption(\"mutatorClipboard\");\r\n\t\tthis.registerColumnOption(\"mutatorClipboardParams\");\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tthis.subscribe(\"cell-value-changing\", this.transformCell.bind(this));\r\n\t\tthis.subscribe(\"column-layout\", this.initializeColumn.bind(this));\r\n\t\tthis.subscribe(\"row-data-init-before\", this.rowDataChanged.bind(this));\r\n\t\tthis.subscribe(\"row-data-changing\", this.rowDataChanged.bind(this));\r\n\t}\r\n\r\n\trowDataChanged(row, tempData, updatedData){\r\n\t\treturn this.transformRow(tempData, \"data\", updatedData);\r\n\t}\r\n\r\n\t//initialize column mutator\r\n\tinitializeColumn(column){\r\n\t\tvar match = false,\r\n\t\tconfig = {};\r\n\r\n\t\tthis.allowedTypes.forEach((type) => {\r\n\t\t\tvar key = \"mutator\" + (type.charAt(0).toUpperCase() + type.slice(1)),\r\n\t\t\tmutator;\r\n\r\n\t\t\tif(column.definition[key]){\r\n\t\t\t\tmutator = this.lookupMutator(column.definition[key]);\r\n\r\n\t\t\t\tif(mutator){\r\n\t\t\t\t\tmatch = true;\r\n\r\n\t\t\t\t\tconfig[key] = {\r\n\t\t\t\t\t\tmutator:mutator,\r\n\t\t\t\t\t\tparams: column.definition[key + \"Params\"] || {},\r\n\t\t\t\t\t};\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tif(match){\r\n\t\t\tcolumn.modules.mutate = config;\r\n\t\t}\r\n\t}\r\n\r\n\tlookupMutator(value){\r\n\t\tvar mutator = false;\r\n\r\n\t\t//set column mutator\r\n\t\tswitch(typeof value){\r\n\t\t\tcase \"string\":\r\n\t\t\tif(Mutator.mutators[value]){\r\n\t\t\t\tmutator = Mutator.mutators[value];\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Mutator Error - No such mutator found, ignoring: \", value);\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"function\":\r\n\t\t\tmutator = value;\r\n\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\treturn mutator;\r\n\t}\r\n\r\n\t//apply mutator to row\r\n\ttransformRow(data, type, updatedData){\r\n\t\tvar key = \"mutator\" + (type.charAt(0).toUpperCase() + type.slice(1)),\r\n\t\tvalue;\r\n\r\n\t\tif(this.enabled){\r\n\r\n\t\t\tthis.table.columnManager.traverse((column) => {\r\n\t\t\t\tvar mutator, params, component;\r\n\r\n\t\t\t\tif(column.modules.mutate){\r\n\t\t\t\t\tmutator = column.modules.mutate[key] || column.modules.mutate.mutator || false;\r\n\r\n\t\t\t\t\tif(mutator){\r\n\t\t\t\t\t\tvalue = column.getFieldValue(typeof updatedData !== \"undefined\" ? updatedData : data);\r\n\r\n\t\t\t\t\t\tif(type == \"data\" || typeof value !== \"undefined\"){\r\n\t\t\t\t\t\t\tcomponent = column.getComponent();\r\n\t\t\t\t\t\t\tparams = typeof mutator.params === \"function\" ? mutator.params(value, data, type, component) : mutator.params;\r\n\t\t\t\t\t\t\tcolumn.setFieldValue(data, mutator.mutator(value, data, type, params, component));\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn data;\r\n\t}\r\n\r\n\t//apply mutator to new cell value\r\n\ttransformCell(cell, value){\r\n\t\tif(cell.column.modules.mutate){\r\n\t\t\tvar mutator = cell.column.modules.mutate.mutatorEdit || cell.column.modules.mutate.mutator || false,\r\n\t\t\ttempData = {};\r\n\r\n\t\t\tif(mutator){\r\n\t\t\t\ttempData = Object.assign(tempData, cell.row.getData());\r\n\t\t\t\tcell.column.setFieldValue(tempData, value);\r\n\t\t\t\treturn mutator.mutator(value, tempData, \"edit\", mutator.params, cell.getComponent());\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn value;\r\n\t}\r\n\r\n\tenable(){\r\n\t\tthis.enabled = true;\r\n\t}\r\n\r\n\tdisable(){\r\n\t\tthis.enabled = false;\r\n\t}\r\n}\r\n\r\nMutator.moduleName = \"mutator\";\r\n\r\n//load defaults\r\nMutator.mutators = defaultMutators;\r\n\r\nexport default Mutator;","export default {};","import Module from '../../core/Module.js';\r\n\r\nimport Helpers from '../../core/tools/Helpers.js';\r\n\r\nclass Page extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.mode = \"local\";\r\n\t\tthis.progressiveLoad = false;\r\n\r\n\t\tthis.size = 0;\r\n\t\tthis.page = 1;\r\n\t\tthis.count = 5;\r\n\t\tthis.max = 1;\r\n\r\n\t\tthis.displayIndex = 0; //index in display pipeline\r\n\r\n\t\tthis.initialLoad = true;\r\n\t\tthis.dataChanging = false; //flag to check if data is being changed by this module\r\n\r\n\t\tthis.pageSizes = [];\r\n\r\n\t\tthis.dataReceivedNames = {}; //TODO - remove once pagimation update is complete\r\n\t\tthis.dataSentNames = {}; //TODO - remove once pagimation update is complete\r\n\r\n\t\tthis.registerTableOption(\"pagination\", false); //set pagination type\r\n\t\tthis.registerTableOption(\"paginationMode\", \"local\"); //local or remote pagination\r\n\t\tthis.registerTableOption(\"paginationSize\", false); //set number of rows to a page\r\n\t\tthis.registerTableOption(\"paginationInitialPage\", 1); //initail page to show on load\r\n\t\tthis.registerTableOption(\"paginationButtonCount\", 5); // set count of page button\r\n\t\tthis.registerTableOption(\"paginationSizeSelector\", false); //add pagination size selector element\r\n\t\tthis.registerTableOption(\"paginationElement\", false); //element to hold pagination numbers\r\n\t\t// this.registerTableOption(\"paginationDataSent\", {}); //pagination data sent to the server\r\n\t\t// this.registerTableOption(\"paginationDataReceived\", {}); //pagination data received from the server\r\n\t\tthis.registerTableOption(\"paginationAddRow\", \"page\"); //add rows on table or page\r\n\r\n\t\tthis.registerTableOption(\"progressiveLoad\", false); //progressive loading\r\n\t\tthis.registerTableOption(\"progressiveLoadDelay\", 0); //delay between requests\r\n\t\tthis.registerTableOption(\"progressiveLoadScrollMargin\", 0); //margin before scroll begins\r\n\r\n\t\tthis.registerTableFunction(\"setMaxPage\", this.setMaxPage.bind(this));\r\n\t\tthis.registerTableFunction(\"setPage\", this.setPage.bind(this));\r\n\t\tthis.registerTableFunction(\"setPageToRow\", this.userSetPageToRow.bind(this));\r\n\t\tthis.registerTableFunction(\"setPageSize\", this.userSetPageSize.bind(this));\r\n\t\tthis.registerTableFunction(\"getPageSize\", this.getPageSize.bind(this));\r\n\t\tthis.registerTableFunction(\"previousPage\", this.previousPage.bind(this));\r\n\t\tthis.registerTableFunction(\"nextPage\", this.nextPage.bind(this));\r\n\t\tthis.registerTableFunction(\"getPage\", this.getPage.bind(this));\r\n\t\tthis.registerTableFunction(\"getPageMax\", this.getPageMax.bind(this));\r\n\r\n\t\t//register component functions\r\n\t\tthis.registerComponentFunction(\"row\", \"pageTo\", this.setPageToRow.bind(this));\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tif(this.table.options.pagination){\r\n\t\t\tthis.subscribe(\"row-deleted\", this.rowsUpdated.bind(this));\r\n\t\t\tthis.subscribe(\"row-adding-position\", this.rowAddingPosition.bind(this));\r\n\t\t\tthis.subscribe(\"row-added\", this.rowsUpdated.bind(this));\r\n\t\t\tthis.subscribe(\"data-processed\", this.initialLoadComplete.bind(this));\r\n\t\t\tthis.subscribe(\"table-built\", this.calculatePageSizes.bind(this));\r\n\r\n\t\t\tif(this.table.options.paginationMode === \"remote\"){\r\n\t\t\t\tthis.subscribe(\"data-params\", this.remotePageParams.bind(this));\r\n\t\t\t\tthis.subscribe(\"data-loaded\", this._parseRemoteData.bind(this));\r\n\t\t\t}\r\n\r\n\t\t\tif(this.table.options.progressiveLoad){\r\n\t\t\t\tconsole.error(\"Progressive Load Error - Pagination and progressive load cannot be used at the same time\");\r\n\t\t\t}\r\n\r\n\t\t\tthis.registerDisplayHandler(this.restOnRenderBefore.bind(this), 40);\r\n\t\t\tthis.registerDisplayHandler(this.getRows.bind(this), 50);\r\n\r\n\t\t\tthis.createElements();\r\n\t\t\tthis.initializePaginator();\r\n\t\t}else if(this.table.options.progressiveLoad){\r\n\r\n\t\t\tthis.subscribe(\"data-params\", this.remotePageParams.bind(this));\r\n\t\t\tthis.subscribe(\"data-loaded\", this._parseRemoteData.bind(this));\r\n\r\n\t\t\tthis.initializeProgressive(this.table.options.progressiveLoad)\r\n\r\n\t\t\tif(this.table.options.progressiveLoad === \"scroll\"){\r\n\t\t\t\tthis.subscribe(\"scroll-vertical\", this.scrollVertical.bind(this));\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\trowAddingPosition(row, top){\r\n\t\tvar rowManager = this.table.rowManager,\r\n\t\tdispRows = rowManager.getDisplayRows(),\r\n\t\tindex;\r\n\r\n\t\tif(top){\r\n\t\t\tif(dispRows.length){\r\n\t\t\t\tindex = dispRows[0];\r\n\t\t\t}else{\r\n\t\t\t\tif(rowManager.activeRows.length){\r\n\t\t\t\t\tindex = rowManager.activeRows[rowManager.activeRows.length-1];\r\n\t\t\t\t\ttop = false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tif(dispRows.length){\r\n\t\t\t\tindex = dispRows[dispRows.length - 1];\r\n\t\t\t\ttop = dispRows.length < this.size ? false : true;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn {index, top}\r\n\t}\r\n\r\n\tcalculatePageSizes(){\r\n\t\tvar testElRow, testElCell;\r\n\r\n\t\tif(this.table.options.paginationSize){\r\n\t\t\tthis.size = this.table.options.paginationSize;\r\n\t\t}else{\r\n\t\t\ttestElRow = document.createElement(\"div\");\r\n\t\t\ttestElRow.classList.add(\"tabulator-row\");\r\n\t\t\ttestElRow.style.visibility = \"hidden\";\r\n\r\n\t\t\ttestElCell = document.createElement(\"div\");\r\n\t\t\ttestElCell.classList.add(\"tabulator-cell\");\r\n\t\t\ttestElCell.innerHTML = \"Page Row Test\";\r\n\r\n\t\t\ttestElRow.appendChild(testElCell);\r\n\r\n\t\t\tthis.table.rowManager.getTableElement().appendChild(testElRow);\r\n\r\n\t\t\tthis.size = Math.floor(this.table.rowManager.getElement().clientHeight / testElRow.offsetHeight);\r\n\r\n\t\t\tthis.table.rowManager.getTableElement().removeChild(testElRow);\r\n\t\t}\r\n\t}\r\n\r\n\tinitialLoadComplete(){\r\n\t\tthis.initialLoad = false;\r\n\t}\r\n\r\n\tremotePageParams(data, config, silent, params){\r\n\t\tif(!this.initialLoad){\r\n\t\t\tif((this.progressiveLoad && !silent) || (!this.progressiveLoad && !this.dataChanging)){\r\n\t\t\t\tthis.reset(true);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//configure request params\r\n\t\tparams.page = this.page;\r\n\r\n\t\t//set page size if defined\r\n\t\tif(this.size){\r\n\t\t\tparams.size = this.size;\r\n\t\t}\r\n\r\n\t\treturn params;\r\n\t}\r\n\r\n\t///////////////////////////////////\r\n\t///////// Table Functions /////////\r\n\t///////////////////////////////////\r\n\r\n\tuserSetPageToRow(row){\r\n\t\tif(this.table.options.pagination){\r\n\t\t\trow = this.rowManager.findRow(row);\r\n\r\n\t\t\tif(row){\r\n\t\t\t\treturn this.setPageToRow(row)\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn Promise.reject();\r\n\t}\r\n\r\n\tuserSetPageSize(size){\r\n\t\tif(this.table.options.pagination){\r\n\t\t\tthis.setPageSize(size);\r\n\t\t\treturn this.setPage(1);\r\n\t\t}else{\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\t///////////////////////////////////\r\n\t///////// Internal Logic //////////\r\n\t///////////////////////////////////\r\n\r\n\tscrollVertical(top, dir){\r\n\t\tvar element, diff, margin;\r\n\t\tif(!dir && !this.table.dataLoader.loading){\r\n\t\t\telement = this.table.rowManager.getElement();\r\n\t\t\tdiff = element.scrollHeight - element.clientHeight - top;\r\n\t\t\tmargin = this.table.options.progressiveLoadScrollMargin || (element.clientHeight * 2);\r\n\r\n\t\t\tif(diff < margin){\r\n\t\t\t\tthis.nextPage();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\trestOnRenderBefore(rows, renderInPosition){\r\n\t\tif(!renderInPosition){\r\n\t\t\tif(this.mode === \"local\"){\r\n\t\t\t\tthis.reset();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn rows;\r\n\t}\r\n\r\n\trowsUpdated(){\r\n\t\tthis.refreshData(true, \"all\");\r\n\t}\r\n\r\n\tcreateElements(){\r\n\t\tvar button;\r\n\r\n\t\tthis.element = document.createElement(\"span\");\r\n\t\tthis.element.classList.add(\"tabulator-paginator\");\r\n\r\n\t\tthis.pagesElement = document.createElement(\"span\");\r\n\t\tthis.pagesElement.classList.add(\"tabulator-pages\");\r\n\r\n\t\tbutton = document.createElement(\"button\");\r\n\t\tbutton.classList.add(\"tabulator-page\");\r\n\t\tbutton.setAttribute(\"type\", \"button\");\r\n\t\tbutton.setAttribute(\"role\", \"button\");\r\n\t\tbutton.setAttribute(\"aria-label\", \"\");\r\n\t\tbutton.setAttribute(\"title\", \"\");\r\n\r\n\t\tthis.firstBut = button.cloneNode(true);\r\n\t\tthis.firstBut.setAttribute(\"data-page\", \"first\");\r\n\r\n\t\tthis.prevBut = button.cloneNode(true);\r\n\t\tthis.prevBut.setAttribute(\"data-page\", \"prev\");\r\n\r\n\t\tthis.nextBut = button.cloneNode(true);\r\n\t\tthis.nextBut.setAttribute(\"data-page\", \"next\");\r\n\r\n\t\tthis.lastBut = button.cloneNode(true);\r\n\t\tthis.lastBut.setAttribute(\"data-page\", \"last\");\r\n\r\n\t\tif(this.table.options.paginationSizeSelector){\r\n\t\t\tthis.pageSizeSelect = document.createElement(\"select\");\r\n\t\t\tthis.pageSizeSelect.classList.add(\"tabulator-page-size\");\r\n\t\t}\r\n\t}\r\n\r\n\tgeneratePageSizeSelectList(){\r\n\t\tvar pageSizes = [];\r\n\r\n\t\tif(this.pageSizeSelect){\r\n\r\n\t\t\tif(Array.isArray(this.table.options.paginationSizeSelector)){\r\n\t\t\t\tpageSizes = this.table.options.paginationSizeSelector;\r\n\t\t\t\tthis.pageSizes = pageSizes;\r\n\r\n\t\t\t\tif(this.pageSizes.indexOf(this.size) == -1){\r\n\t\t\t\t\tpageSizes.unshift(this.size);\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\r\n\t\t\t\tif(this.pageSizes.indexOf(this.size) == -1){\r\n\t\t\t\t\tpageSizes = [];\r\n\r\n\t\t\t\t\tfor (let i = 1; i < 5; i++){\r\n\t\t\t\t\t\tpageSizes.push(this.size * i);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tthis.pageSizes = pageSizes;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tpageSizes = this.pageSizes;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\twhile(this.pageSizeSelect.firstChild) this.pageSizeSelect.removeChild(this.pageSizeSelect.firstChild);\r\n\r\n\t\t\tpageSizes.forEach((item) => {\r\n\t\t\t\tvar itemEl = document.createElement(\"option\");\r\n\t\t\t\titemEl.value = item;\r\n\r\n\t\t\t\tif(item === true){\r\n\t\t\t\t\tthis.langBind(\"pagination|all\", function(value){\r\n\t\t\t\t\t\titemEl.innerHTML = value;\r\n\t\t\t\t\t});\r\n\t\t\t\t}else{\r\n\t\t\t\t\titemEl.innerHTML = item;\r\n\t\t\t\t}\r\n\r\n\r\n\r\n\t\t\t\tthis.pageSizeSelect.appendChild(itemEl);\r\n\t\t\t});\r\n\r\n\t\t\tthis.pageSizeSelect.value = this.size;\r\n\t\t}\r\n\t}\r\n\r\n\t//setup pageination\r\n\tinitializePaginator(hidden){\r\n\t\tvar pageSelectLabel;\r\n\r\n\t\tif(!hidden){\r\n\t\t\t//build pagination element\r\n\r\n\t\t\t//bind localizations\r\n\t\t\tthis.langBind(\"pagination|first\", (value) => {\r\n\t\t\t\tthis.firstBut.innerHTML = value;\r\n\t\t\t});\r\n\r\n\t\t\tthis.langBind(\"pagination|first_title\", (value) => {\r\n\t\t\t\tthis.firstBut.setAttribute(\"aria-label\", value);\r\n\t\t\t\tthis.firstBut.setAttribute(\"title\", value);\r\n\t\t\t});\r\n\r\n\t\t\tthis.langBind(\"pagination|prev\", (value) => {\r\n\t\t\t\tthis.prevBut.innerHTML = value;\r\n\t\t\t});\r\n\r\n\t\t\tthis.langBind(\"pagination|prev_title\", (value) => {\r\n\t\t\t\tthis.prevBut.setAttribute(\"aria-label\", value);\r\n\t\t\t\tthis.prevBut.setAttribute(\"title\", value);\r\n\t\t\t});\r\n\r\n\t\t\tthis.langBind(\"pagination|next\", (value) => {\r\n\t\t\t\tthis.nextBut.innerHTML = value;\r\n\t\t\t});\r\n\r\n\t\t\tthis.langBind(\"pagination|next_title\", (value) => {\r\n\t\t\t\tthis.nextBut.setAttribute(\"aria-label\", value);\r\n\t\t\t\tthis.nextBut.setAttribute(\"title\", value);\r\n\t\t\t});\r\n\r\n\t\t\tthis.langBind(\"pagination|last\", (value) => {\r\n\t\t\t\tthis.lastBut.innerHTML = value;\r\n\t\t\t});\r\n\r\n\t\t\tthis.langBind(\"pagination|last_title\", (value) => {\r\n\t\t\t\tthis.lastBut.setAttribute(\"aria-label\", value);\r\n\t\t\t\tthis.lastBut.setAttribute(\"title\", value);\r\n\t\t\t});\r\n\r\n\t\t\t//click bindings\r\n\t\t\tthis.firstBut.addEventListener(\"click\", () => {\r\n\t\t\t\tthis.setPage(1)\r\n\t\t\t});\r\n\r\n\t\t\tthis.prevBut.addEventListener(\"click\", () => {\r\n\t\t\t\tthis.previousPage()\r\n\t\t\t});\r\n\r\n\t\t\tthis.nextBut.addEventListener(\"click\", () => {\r\n\t\t\t\tthis.nextPage()\r\n\t\t\t});\r\n\r\n\t\t\tthis.lastBut.addEventListener(\"click\", () => {\r\n\t\t\t\tthis.setPage(this.max)\r\n\t\t\t});\r\n\r\n\t\t\tif(this.table.options.paginationElement){\r\n\t\t\t\tthis.element = this.table.options.paginationElement;\r\n\t\t\t}\r\n\r\n\t\t\tif(this.pageSizeSelect){\r\n\t\t\t\tpageSelectLabel = document.createElement(\"label\");\r\n\r\n\t\t\t\tthis.langBind(\"pagination|page_size\", (value) => {\r\n\t\t\t\t\tthis.pageSizeSelect.setAttribute(\"aria-label\", value);\r\n\t\t\t\t\tthis.pageSizeSelect.setAttribute(\"title\", value);\r\n\t\t\t\t\tpageSelectLabel.innerHTML = value;\r\n\t\t\t\t});\r\n\r\n\t\t\t\tthis.element.appendChild(pageSelectLabel);\r\n\t\t\t\tthis.element.appendChild(this.pageSizeSelect);\r\n\r\n\t\t\t\tthis.pageSizeSelect.addEventListener(\"change\", (e) => {\r\n\t\t\t\t\tthis.setPageSize(this.pageSizeSelect.value == \"true\" ? true : this.pageSizeSelect.value);\r\n\t\t\t\t\tthis.setPage(1)\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\t//append to DOM\r\n\t\t\tthis.element.appendChild(this.firstBut);\r\n\t\t\tthis.element.appendChild(this.prevBut);\r\n\t\t\tthis.element.appendChild(this.pagesElement);\r\n\t\t\tthis.element.appendChild(this.nextBut);\r\n\t\t\tthis.element.appendChild(this.lastBut);\r\n\r\n\t\t\tif(!this.table.options.paginationElement && !hidden){\r\n\t\t\t\tthis.table.footerManager.append(this.element, this);\r\n\t\t\t}\r\n\r\n\t\t\tthis.page = this.table.options.paginationInitialPage;\r\n\t\t\tthis.count = this.table.options.paginationButtonCount;\r\n\r\n\t\t\tthis.generatePageSizeSelectList();\r\n\t\t}\r\n\r\n\t\t//set default values\r\n\t\tthis.mode = this.table.options.paginationMode;\r\n\t}\r\n\r\n\tinitializeProgressive(mode){\r\n\t\tthis.initializePaginator(true);\r\n\t\tthis.mode = \"progressive_\" + mode;\r\n\t\tthis.progressiveLoad = true;\r\n\t}\r\n\r\n\ttrackChanges(){\r\n\t\tthis.dispatch(\"page-changed\");\r\n\t}\r\n\r\n\tsetDisplayIndex(index){\r\n\t\tthis.displayIndex = index;\r\n\t}\r\n\r\n\tgetDisplayIndex(){\r\n\t\treturn this.displayIndex;\r\n\t}\r\n\r\n\t//calculate maximum page from number of rows\r\n\tsetMaxRows(rowCount){\r\n\t\tif(!rowCount){\r\n\t\t\tthis.max = 1;\r\n\t\t}else{\r\n\t\t\tthis.max = this.size === true ? 1 : Math.ceil(rowCount/this.size);\r\n\t\t}\r\n\r\n\t\tif(this.page > this.max){\r\n\t\t\tthis.page = this.max;\r\n\t\t}\r\n\t}\r\n\r\n\t//reset to first page without triggering action\r\n\treset(force){\r\n\t\tif(!this.initialLoad){\r\n\t\t\tif(this.mode == \"local\" || force){\r\n\t\t\t\tthis.page = 1;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//set the maxmum page\r\n\tsetMaxPage(max){\r\n\r\n\t\tmax = parseInt(max);\r\n\r\n\t\tthis.max = max || 1;\r\n\r\n\t\tif(this.page > this.max){\r\n\t\t\tthis.page = this.max;\r\n\t\t\tthis.trigger();\r\n\t\t}\r\n\t}\r\n\r\n\t//set current page number\r\n\tsetPage(page){\r\n\t\tswitch(page){\r\n\t\t\tcase \"first\":\r\n\t\t\treturn this.setPage(1);\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"prev\":\r\n\t\t\treturn this.previousPage();\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"next\":\r\n\t\t\treturn this.nextPage();\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"last\":\r\n\t\t\treturn this.setPage(this.max);\r\n\t\t\tbreak;\r\n\t\t}\r\n\r\n\r\n\t\tpage = parseInt(page);\r\n\r\n\t\tif((page > 0 && page <= this.max) || this.mode !== \"local\"){\r\n\t\t\tthis.page = page;\r\n\r\n\t\t\tthis.trackChanges();\r\n\r\n\t\t\treturn this.trigger();\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Pagination Error - Requested page is out of range of 1 - \" + this.max + \":\", page);\r\n\t\t\treturn Promise.reject();\r\n\t\t}\r\n\t}\r\n\r\n\tsetPageToRow(row){\r\n\t\tvar rows = this.table.rowManager.getDisplayRows(this.displayIndex - 1);\r\n\t\tvar index = rows.indexOf(row);\r\n\r\n\t\tif(index > -1){\r\n\t\t\tvar page = this.size === true ? 1 : Math.ceil((index + 1) / this.size);\r\n\r\n\t\t\treturn this.setPage(page)\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Pagination Error - Requested row is not visible\");\r\n\t\t\treturn Promise.reject();\r\n\t\t}\r\n\t}\r\n\r\n\tsetPageSize(size){\r\n\t\tif(size !== true){\r\n\t\t\tsize = parseInt(size);\r\n\t\t}\r\n\r\n\t\tif(size > 0){\r\n\t\t\tthis.size = size;\r\n\t\t}\r\n\r\n\t\tif(this.pageSizeSelect){\r\n\t\t\t// this.pageSizeSelect.value = size;\r\n\t\t\tthis.generatePageSizeSelectList();\r\n\t\t}\r\n\r\n\t\tthis.trackChanges();\r\n\t}\r\n\r\n\t//setup the pagination buttons\r\n\t_setPageButtons(){\r\n\t\tlet leftSize = Math.floor((this.count-1) / 2);\r\n\t\tlet rightSize = Math.ceil((this.count-1) / 2);\r\n\t\tlet min = this.max - this.page + leftSize + 1 < this.count ? this.max-this.count+1: Math.max(this.page-leftSize,1);\r\n\t\tlet max = this.page <= rightSize? Math.min(this.count, this.max) :Math.min(this.page+rightSize, this.max);\r\n\r\n\t\twhile(this.pagesElement.firstChild) this.pagesElement.removeChild(this.pagesElement.firstChild);\r\n\r\n\t\tif(this.page == 1){\r\n\t\t\tthis.firstBut.disabled = true;\r\n\t\t\tthis.prevBut.disabled = true;\r\n\t\t}else{\r\n\t\t\tthis.firstBut.disabled = false;\r\n\t\t\tthis.prevBut.disabled = false;\r\n\t\t}\r\n\r\n\t\tif(this.page == this.max){\r\n\t\t\tthis.lastBut.disabled = true;\r\n\t\t\tthis.nextBut.disabled = true;\r\n\t\t}else{\r\n\t\t\tthis.lastBut.disabled = false;\r\n\t\t\tthis.nextBut.disabled = false;\r\n\t\t}\r\n\r\n\t\tfor(let i = min; i <= max; i++){\r\n\t\t\tif(i>0 && i <= this.max){\r\n\t\t\t\tthis.pagesElement.appendChild(this._generatePageButton(i));\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.footerRedraw();\r\n\t}\r\n\r\n\t_generatePageButton(page){\r\n\t\tvar button = document.createElement(\"button\");\r\n\r\n\t\tbutton.classList.add(\"tabulator-page\");\r\n\t\tif(page == this.page){\r\n\t\t\tbutton.classList.add(\"active\");\r\n\t\t}\r\n\r\n\t\tbutton.setAttribute(\"type\", \"button\");\r\n\t\tbutton.setAttribute(\"role\", \"button\");\r\n\r\n\t\tthis.langBind(\"pagination|page_title\", (value) => {\r\n\t\t\tbutton.setAttribute(\"aria-label\", value + \" \" + page);\r\n\t\t\tbutton.setAttribute(\"title\", value + \" \" + page);\r\n\t\t});\r\n\r\n\t\tbutton.setAttribute(\"data-page\", page);\r\n\t\tbutton.textContent = page;\r\n\r\n\t\tbutton.addEventListener(\"click\", (e) => {\r\n\t\t\tthis.setPage(page)\r\n\t\t});\r\n\r\n\t\treturn button;\r\n\t}\r\n\r\n\t//previous page\r\n\tpreviousPage(){\r\n\t\tif(this.page > 1){\r\n\t\t\tthis.page--;\r\n\r\n\t\t\tthis.trackChanges();\r\n\r\n\t\t\treturn this.trigger()\r\n\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Pagination Error - Previous page would be less than page 1:\", 0);\r\n\t\t\treturn Promise.reject();\r\n\t\t}\r\n\t}\r\n\r\n\t//next page\r\n\tnextPage(){\r\n\t\tif(this.page < this.max){\r\n\t\t\tthis.page++;\r\n\r\n\t\t\tthis.trackChanges();\r\n\r\n\t\t\treturn this.trigger();\r\n\r\n\t\t}else{\r\n\t\t\tif(!this.progressiveLoad){\r\n\t\t\t\tconsole.warn(\"Pagination Error - Next page would be greater than maximum page of \" + this.max + \":\", this.max + 1);\r\n\t\t\t}\r\n\t\t\treturn Promise.reject();\r\n\t\t}\r\n\t}\r\n\r\n\t//return current page number\r\n\tgetPage(){\r\n\t\treturn this.page;\r\n\t}\r\n\r\n\t//return max page number\r\n\tgetPageMax(){\r\n\t\treturn this.max;\r\n\t}\r\n\r\n\tgetPageSize(size){\r\n\t\treturn this.size;\r\n\t}\r\n\r\n\tgetMode(){\r\n\t\treturn this.mode;\r\n\t}\r\n\r\n\t//return appropriate rows for current page\r\n\tgetRows(data){\r\n\t\tvar output, start, end;\r\n\r\n\t\tif(this.mode == \"local\"){\r\n\t\t\toutput = [];\r\n\r\n\t\t\tthis.setMaxRows(data.length);\r\n\r\n\t\t\tif(this.size === true){\r\n\t\t\t\tstart = 0;\r\n\t\t\t\tend = data.length;\r\n\t\t\t}else{\r\n\t\t\t\tstart = this.size * (this.page - 1);\r\n\t\t\t\tend = start + parseInt(this.size);\r\n\t\t\t}\r\n\r\n\r\n\t\t\tthis._setPageButtons();\r\n\r\n\t\t\tfor(let i = start; i < end; i++){\r\n\t\t\t\tif(data[i]){\r\n\t\t\t\t\toutput.push(data[i]);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn output;\r\n\t\t}else{\r\n\t\t\tthis._setPageButtons();\r\n\r\n\t\t\treturn data.slice(0);\r\n\t\t}\r\n\t}\r\n\r\n\ttrigger(){\r\n\t\tvar left;\r\n\r\n\t\tswitch(this.mode){\r\n\t\t\tcase \"local\":\r\n\t\t\tleft = this.table.rowManager.scrollLeft;\r\n\r\n\t\t\tthis.refreshData();\r\n\t\t\tthis.table.rowManager.scrollHorizontal(left);\r\n\r\n\t\t\tthis.dispatchExternal(\"pageLoaded\", this.getPage());\r\n\r\n\t\t\treturn Promise.resolve();\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"remote\":\r\n\t\t\tthis.dataChanging = true;\r\n\t\t\treturn this.reloadData(null)\r\n\t\t\t.finally(() => {\r\n\t\t\t\tthis.dataChanging = false;\r\n\t\t\t})\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"progressive_load\":\r\n\t\t\tcase \"progressive_scroll\":\r\n\t\t\treturn this.reloadData(null, true);\r\n\t\t\tbreak;\r\n\r\n\t\t\tdefault:\r\n\t\t\tconsole.warn(\"Pagination Error - no such pagination mode:\", this.mode);\r\n\t\t\treturn Promise.reject();\r\n\t\t}\r\n\t}\r\n\r\n\t_parseRemoteData(data){\r\n\t\tvar left, data, margin;\r\n\r\n\t\tif(typeof data.last_page === \"undefined\"){\r\n\t\t\tconsole.warn(\"Remote Pagination Error - Server response missing '\" + this.dataReceivedNames.last_page + \"' property\");\r\n\t\t}\r\n\r\n\t\tif(data.data){\r\n\t\t\tthis.max = parseInt(data.last_page) || 1;\r\n\r\n\t\t\tif(this.progressiveLoad){\r\n\t\t\t\tswitch(this.mode){\r\n\t\t\t\t\tcase \"progressive_load\":\r\n\r\n\t\t\t\t\tif(this.page == 1){\r\n\t\t\t\t\t\tthis.table.rowManager.setData(data.data, false, this.page == 1)\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tthis.table.rowManager.addRows(data.data);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif(this.page < this.max){\r\n\t\t\t\t\t\tsetTimeout(() => {\r\n\t\t\t\t\t\t\tthis.nextPage();\r\n\t\t\t\t\t\t}, this.table.options.progressiveLoadDelay);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase \"progressive_scroll\":\r\n\t\t\t\t\tdata = this.table.rowManager.getData().concat(data.data);\r\n\r\n\t\t\t\t\tthis.table.rowManager.setData(data, this.page !== 1, this.page == 1);\r\n\r\n\t\t\t\t\tmargin = this.table.options.progressiveLoadScrollMargin || (this.table.rowManager.element.clientHeight * 2);\r\n\r\n\t\t\t\t\tif(this.table.rowManager.element.scrollHeight <= (this.table.rowManager.element.clientHeight + margin)){\r\n\t\t\t\t\t\tsetTimeout(() => {\r\n\t\t\t\t\t\t\tthis.nextPage();\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn false;\r\n\t\t\t}else{\r\n\t\t\t\t// left = this.table.rowManager.scrollLeft;\r\n\t\t\t\tthis.dispatchExternal(\"pageLoaded\", this.getPage());\r\n\t\t\t\t// this.table.rowManager.scrollHorizontal(left);\r\n\t\t\t\t// this.table.columnManager.scrollHorizontal(left);\r\n\t\t\t}\r\n\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Remote Pagination Error - Server response missing '\" + this.dataReceivedNames.data + \"' property\");\r\n\t\t}\r\n\r\n\t\treturn data.data;\r\n\t}\r\n\r\n\t//handle the footer element being redrawn\r\n\tfooterRedraw(){\r\n\t\tvar footer = this.table.footerManager.element;\r\n\r\n\t\tif((Math.ceil(footer.clientWidth) - footer.scrollWidth) < 0){\r\n\t\t\tthis.pagesElement.style.display = 'none';\r\n\t\t}else{\r\n\t\t\tthis.pagesElement.style.display = '';\r\n\r\n\t\t\tif((Math.ceil(footer.clientWidth) - footer.scrollWidth) < 0){\r\n\t\t\t\tthis.pagesElement.style.display = 'none';\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n\r\nPage.moduleName = \"page\";\r\n\r\nexport default Page;","// read peristence information from storage\r\nexport default {\r\n\tlocal:function(id, type){\r\n\t\tvar data = localStorage.getItem(id + \"-\" + type);\r\n\r\n\t\treturn data ? JSON.parse(data) : false;\r\n\t},\r\n\tcookie:function(id, type){\r\n\t\tvar cookie = document.cookie,\r\n\t\tkey = id + \"-\" + type,\r\n\t\tcookiePos = cookie.indexOf(key + \"=\"),\r\n\t\tend, data;\r\n\r\n\t\t//if cookie exists, decode and load column data into tabulator\r\n\t\tif(cookiePos > -1){\r\n\t\t\tcookie = cookie.substr(cookiePos);\r\n\r\n\t\t\tend = cookie.indexOf(\";\");\r\n\r\n\t\t\tif(end > -1){\r\n\t\t\t\tcookie = cookie.substr(0, end);\r\n\t\t\t}\r\n\r\n\t\t\tdata = cookie.replace(key + \"=\", \"\");\r\n\t\t}\r\n\r\n\t\treturn data ? JSON.parse(data) : false;\r\n\t}\r\n};","//write persistence information to storage\r\nexport default {\r\n\tlocal:function(id, type, data){\r\n\t\tlocalStorage.setItem(id + \"-\" + type, JSON.stringify(data));\r\n\t},\r\n\tcookie:function(id, type, data){\r\n\t\tvar expireDate = new Date();\r\n\r\n\t\texpireDate.setDate(expireDate.getDate() + 10000);\r\n\r\n\t\tdocument.cookie = id + \"-\" + type + \"=\" + JSON.stringify(data) + \"; expires=\" + expireDate.toUTCString();\r\n\t}\r\n};","import Module from '../../core/Module.js';\r\n\r\nimport defaultReaders from './defaults/readers.js';\r\nimport defaultWriters from './defaults/writers.js';\r\n\r\nclass Persistence extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.mode = \"\";\r\n\t\tthis.id = \"\";\r\n\t\t// this.persistProps = [\"field\", \"width\", \"visible\"];\r\n\t\tthis.defWatcherBlock = false;\r\n\t\tthis.config = {};\r\n\t\tthis.readFunc = false;\r\n\t\tthis.writeFunc = false;\r\n\r\n\t\tthis.registerTableOption(\"persistence\", false);\r\n\t\tthis.registerTableOption(\"persistenceID\", \"\"); //key for persistent storage\r\n\t\tthis.registerTableOption(\"persistenceMode\", true); //mode for storing persistence information\r\n\t\tthis.registerTableOption(\"persistenceReaderFunc\", false); //function for handling persistence data reading\r\n\t\tthis.registerTableOption(\"persistenceWriterFunc\", false); //function for handling persistence data writing\r\n\t}\r\n\r\n\t// Test for whether localStorage is available for use.\r\n\tlocalStorageTest() {\r\n\t\tvar testKey = \"_tabulator_test\";\r\n\r\n\t\ttry {\r\n\t\t\twindow.localStorage.setItem( testKey, testKey);\r\n\t\t\twindow.localStorage.removeItem( testKey );\r\n\t\t\treturn true;\r\n\t\t} catch(e) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\t//setup parameters\r\n\tinitialize(){\r\n\t\tif(this.table.options.persistence){\r\n\t\t\t//determine persistent layout storage type\r\n\t\t\tvar mode = this.table.options.persistenceMode,\r\n\t\t\tid = this.table.options.persistenceID,\r\n\t\t\tretreivedData;\r\n\r\n\t\t\tthis.mode = mode !== true ? mode : (this.localStorageTest() ? \"local\" : \"cookie\");\r\n\r\n\t\t\tif(this.table.options.persistenceReaderFunc){\r\n\t\t\t\tif(typeof this.table.options.persistenceReaderFunc === \"function\"){\r\n\t\t\t\t\tthis.readFunc = this.table.options.persistenceReaderFunc;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tif(Persistence.readers[this.table.options.persistenceReaderFunc]){\r\n\t\t\t\t\t\tthis.readFunc = Persistence.readers[this.table.options.persistenceReaderFunc];\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tconsole.warn(\"Persistence Read Error - invalid reader set\", this.table.options.persistenceReaderFunc);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tif(Persistence.readers[this.mode]){\r\n\t\t\t\t\tthis.readFunc = Persistence.readers[this.mode];\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.warn(\"Persistence Read Error - invalid reader set\", this.mode);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif(this.table.options.persistenceWriterFunc){\r\n\t\t\t\tif(typeof this.table.options.persistenceWriterFunc === \"function\"){\r\n\t\t\t\t\tthis.writeFunc = this.table.options.persistenceWriterFunc;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tif(Persistence.writers[this.table.options.persistenceWriterFunc]){\r\n\t\t\t\t\t\tthis.writeFunc = Persistence.writers[this.table.options.persistenceWriterFunc];\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tconsole.warn(\"Persistence Write Error - invalid reader set\", this.table.options.persistenceWriterFunc);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tif(Persistence.writers[this.mode]){\r\n\t\t\t\t\tthis.writeFunc = Persistence.writers[this.mode];\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.warn(\"Persistence Write Error - invalid writer set\", this.mode);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t//set storage tag\r\n\t\t\tthis.id = \"tabulator-\" + (id || (this.table.element.getAttribute(\"id\") || \"\"));\r\n\r\n\t\t\tthis.config = {\r\n\t\t\t\tsort:this.table.options.persistence === true || this.table.options.persistence.sort,\r\n\t\t\t\tfilter:this.table.options.persistence === true || this.table.options.persistence.filter,\r\n\t\t\t\tgroup:this.table.options.persistence === true || this.table.options.persistence.group,\r\n\t\t\t\tpage:this.table.options.persistence === true || this.table.options.persistence.page,\r\n\t\t\t\tcolumns:this.table.options.persistence === true ? [\"title\", \"width\", \"visible\"] : this.table.options.persistence.columns,\r\n\t\t\t};\r\n\r\n\t\t\t//load pagination data if needed\r\n\t\t\tif(this.config.page){\r\n\t\t\t\tretreivedData = this.retreiveData(\"page\");\r\n\r\n\t\t\t\tif(retreivedData){\r\n\t\t\t\t\tif(typeof retreivedData.paginationSize !== \"undefined\" && (this.config.page === true || this.config.page.size)){\r\n\t\t\t\t\t\tthis.table.options.paginationSize = retreivedData.paginationSize;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif(typeof retreivedData.paginationInitialPage !== \"undefined\" && (this.config.page === true || this.config.page.page)){\r\n\t\t\t\t\t\tthis.table.options.paginationInitialPage = retreivedData.paginationInitialPage;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t//load group data if needed\r\n\t\t\tif(this.config.group){\r\n\t\t\t\tretreivedData = this.retreiveData(\"group\");\r\n\r\n\t\t\t\tif(retreivedData){\r\n\t\t\t\t\tif(typeof retreivedData.groupBy !== \"undefined\" && (this.config.group === true || this.config.group.groupBy)){\r\n\t\t\t\t\t\tthis.table.options.groupBy = retreivedData.groupBy;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif(typeof retreivedData.groupStartOpen !== \"undefined\" && (this.config.group === true || this.config.group.groupStartOpen)){\r\n\t\t\t\t\t\tthis.table.options.groupStartOpen = retreivedData.groupStartOpen;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif(typeof retreivedData.groupHeader !== \"undefined\" && (this.config.group === true || this.config.group.groupHeader)){\r\n\t\t\t\t\t\tthis.table.options.groupHeader = retreivedData.groupHeader;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif(this.config.columns){\r\n\t\t\t\tthis.table.options.columns = this.load(\"columns\", this.table.options.columns);\r\n\t\t\t\tthis.subscribe(\"column-init\", this.initializeColumn.bind(this));\r\n\t\t\t\tthis.subscribe(\"column-show\", this.save.bind(this, \"columns\"));\r\n\t\t\t\tthis.subscribe(\"column-hide\", this.save.bind(this, \"columns\"));\r\n\t\t\t\tthis.subscribe(\"column-moved\", this.save.bind(this, \"columns\"));\r\n\t\t\t\tthis.subscribe(\"table-built\", this.tableBuilt.bind(this), 0);\r\n\t\t\t}\r\n\r\n\t\t\tthis.subscribe(\"table-redraw\", this.tableRedraw.bind(this));\r\n\r\n\r\n\t\t\tthis.subscribe(\"filter-changed\", this.eventSave.bind(this, \"filter\"));\r\n\t\t\tthis.subscribe(\"sort-changed\", this.eventSave.bind(this, \"sort\"));\r\n\t\t\tthis.subscribe(\"group-changed\", this.eventSave.bind(this, \"group\"));\r\n\t\t\tthis.subscribe(\"page-changed\", this.eventSave.bind(this, \"page\"));\r\n\t\t\tthis.subscribe(\"column-resized\", this.eventSave.bind(this, \"columns\"));\r\n\t\t\tthis.subscribe(\"layout-refreshed\", this.eventSave.bind(this, \"columns\"));\r\n\t\t}\r\n\r\n\t\tthis.registerTableFunction(\"getColumnLayout\", this.getColumnLayout.bind(this));\r\n\t\tthis.registerTableFunction(\"setColumnLayout\", this.setColumnLayout.bind(this));\r\n\t}\r\n\r\n\teventSave(type){\r\n\t\tif(this.config[type]){\r\n\t\t\tthis.save(type);\r\n\t\t}\r\n\t}\r\n\r\n\ttableBuilt(){\r\n\t\tvar options = this.table.options,\r\n\t\tsorters, filters;\r\n\r\n\t\tif(this.config.sort){\r\n\t\t\tsorters = this.load(\"sort\");\r\n\r\n\t\t\tif(!sorters === false){\r\n\t\t\t\tthis.table.initialSort = sorters;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(this.config.filter){\r\n\t\t\tfilters = this.load(\"filter\");\r\n\r\n\t\t\tif(!filters === false){\r\n\t\t\t\tthis.table.initialFilter = filters;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\ttableRedraw(force){\r\n\t\tif(force && this.config.columns){\r\n\t\t\tthis.save(\"columns\");\r\n\t\t}\r\n\t}\r\n\r\n\t///////////////////////////////////\r\n\t///////// Table Functions /////////\r\n\t///////////////////////////////////\r\n\r\n\tgetColumnLayout(){\r\n\t\treturn this.parseColumns(this.table.columnManager.getColumns());\r\n\t}\r\n\r\n\tsetColumnLayout(layout){\r\n\t\tthis.table.columnManager.setColumns(this.mergeDefinition(this.table.options.columns, layout))\r\n\t\treturn true;\r\n\t}\r\n\r\n\t///////////////////////////////////\r\n\t///////// Internal Logic //////////\r\n\t///////////////////////////////////\r\n\r\n\tinitializeColumn(column){\r\n\t\tvar def, keys;\r\n\r\n\t\tif(this.config.columns){\r\n\t\t\tthis.defWatcherBlock = true;\r\n\r\n\t\t\tdef = column.getDefinition();\r\n\r\n\t\t\tkeys = this.config.columns === true ? Object.keys(def) : this.config.columns;\r\n\r\n\t\t\tkeys.forEach((key)=>{\r\n\t\t\t\tvar props = Object.getOwnPropertyDescriptor(def, key);\r\n\t\t\t\tvar value = def[key];\r\n\t\t\t\tif(props){\r\n\t\t\t\t\tObject.defineProperty(def, key, {\r\n\t\t\t\t\t\tset: function(newValue){\r\n\t\t\t\t\t\t\tvalue = newValue;\r\n\r\n\t\t\t\t\t\t\tif(!this.defWatcherBlock){\r\n\t\t\t\t\t\t\t\tthis.save(\"columns\");\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\tif(props.set){\r\n\t\t\t\t\t\t\t\tprops.set(newValue);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tget:function(){\r\n\t\t\t\t\t\t\tif(props.get){\r\n\t\t\t\t\t\t\t\tprops.get();\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\treturn value;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tthis.defWatcherBlock = false;\r\n\t\t}\r\n\t}\r\n\r\n\t//load saved definitions\r\n\tload(type, current){\r\n\t\tvar data = this.retreiveData(type);\r\n\r\n\t\tif(current){\r\n\t\t\tdata = data ? this.mergeDefinition(current, data) : current;\r\n\t\t}\r\n\r\n\t\treturn data;\r\n\t}\r\n\r\n\t//retreive data from memory\r\n\tretreiveData(type){\r\n\t\treturn this.readFunc ? this.readFunc(this.id, type) : false;\r\n\t}\r\n\r\n\t//merge old and new column definitions\r\n\tmergeDefinition(oldCols, newCols){\r\n\t\tvar output = [];\r\n\r\n\t\tnewCols = newCols || [];\r\n\r\n\t\tnewCols.forEach((column, to) => {\r\n\t\t\tvar from = this._findColumn(oldCols, column),\r\n\t\t\tkeys;\r\n\r\n\t\t\tif(from){\r\n\t\t\t\tif(this.config.columns === true || this.config.columns == undefined){\r\n\t\t\t\t\tkeys = Object.keys(from);\r\n\t\t\t\t\tkeys.push(\"width\");\r\n\t\t\t\t}else{\r\n\t\t\t\t\tkeys = this.config.columns;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tkeys.forEach((key)=>{\r\n\t\t\t\t\tif(key !== \"columns\" && typeof column[key] !== \"undefined\"){\r\n\t\t\t\t\t\tfrom[key] = column[key];\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\tif(from.columns){\r\n\t\t\t\t\tfrom.columns = this.mergeDefinition(from.columns, column.columns);\r\n\t\t\t\t}\r\n\r\n\t\t\t\toutput.push(from);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\toldCols.forEach((column, i) => {\r\n\t\t\tvar from = this._findColumn(newCols, column);\r\n\r\n\t\t\tif (!from) {\r\n\t\t\t\tif(output.length>i){\r\n\t\t\t\t\toutput.splice(i, 0, column);\r\n\t\t\t\t}else{\r\n\t\t\t\t\toutput.push(column);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\t//find matching columns\r\n\t_findColumn(columns, subject){\r\n\t\tvar type = subject.columns ? \"group\" : (subject.field ? \"field\" : \"object\");\r\n\r\n\t\treturn columns.find(function(col){\r\n\t\t\tswitch(type){\r\n\t\t\t\tcase \"group\":\r\n\t\t\t\treturn col.title === subject.title && col.columns.length === subject.columns.length;\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"field\":\r\n\t\t\t\treturn col.field === subject.field;\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"object\":\r\n\t\t\t\treturn col === subject;\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t//save data\r\n\tsave(type){\r\n\t\tvar data = {};\r\n\r\n\t\tswitch(type){\r\n\t\t\tcase \"columns\":\r\n\t\t\tdata = this.parseColumns(this.table.columnManager.getColumns())\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"filter\":\r\n\t\t\tdata = this.table.modules.filter.getFilters();\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"sort\":\r\n\t\t\tdata = this.validateSorters(this.table.modules.sort.getSort());\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"group\":\r\n\t\t\tdata = this.getGroupConfig();\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"page\":\r\n\t\t\tdata = this.getPageConfig();\r\n\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\tif(this.writeFunc){\r\n\t\t\tthis.writeFunc(this.id, type, data);\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t//ensure sorters contain no function data\r\n\tvalidateSorters(data){\r\n\t\tdata.forEach(function(item){\r\n\t\t\titem.column = item.field;\r\n\t\t\tdelete item.field;\r\n\t\t});\r\n\r\n\t\treturn data;\r\n\t}\r\n\r\n\tgetGroupConfig(){\r\n\t\tvar data = {};\r\n\r\n\t\tif(this.config.group){\r\n\t\t\tif(this.config.group === true || this.config.group.groupBy){\r\n\t\t\t\tdata.groupBy = this.table.options.groupBy;\r\n\t\t\t}\r\n\r\n\t\t\tif(this.config.group === true || this.config.group.groupStartOpen){\r\n\t\t\t\tdata.groupStartOpen = this.table.options.groupStartOpen;\r\n\t\t\t}\r\n\r\n\t\t\tif(this.config.group === true || this.config.group.groupHeader){\r\n\t\t\t\tdata.groupHeader = this.table.options.groupHeader;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn data;\r\n\t}\r\n\r\n\tgetPageConfig(){\r\n\t\tvar data = {};\r\n\r\n\t\tif(this.config.page){\r\n\t\t\tif(this.config.page === true || this.config.page.size){\r\n\t\t\t\tdata.paginationSize = this.table.modules.page.getPageSize();\r\n\t\t\t}\r\n\r\n\t\t\tif(this.config.page === true || this.config.page.page){\r\n\t\t\t\tdata.paginationInitialPage = this.table.modules.page.getPage();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn data;\r\n\t}\r\n\r\n\r\n\t//parse columns for data to store\r\n\tparseColumns(columns){\r\n\t\tvar definitions = [],\r\n\t\texcludedKeys = [\"headerContextMenu\", \"headerMenu\", \"contextMenu\", \"clickMenu\"];\r\n\r\n\t\tcolumns.forEach((column) => {\r\n\t\t\tvar defStore = {},\r\n\t\t\tcolDef = column.getDefinition(),\r\n\t\t\tkeys;\r\n\r\n\t\t\tif(column.isGroup){\r\n\t\t\t\tdefStore.title = colDef.title;\r\n\t\t\t\tdefStore.columns = this.parseColumns(column.getColumns());\r\n\t\t\t}else{\r\n\t\t\t\tdefStore.field = column.getField();\r\n\r\n\t\t\t\tif(this.config.columns === true || this.config.columns == undefined){\r\n\t\t\t\t\tkeys = Object.keys(colDef);\r\n\t\t\t\t\tkeys.push(\"width\");\r\n\t\t\t\t}else{\r\n\t\t\t\t\tkeys = this.config.columns;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tkeys.forEach((key)=>{\r\n\t\t\t\t\tswitch(key){\r\n\t\t\t\t\t\tcase \"width\":\r\n\t\t\t\t\t\tdefStore.width = column.getWidth();\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase \"visible\":\r\n\t\t\t\t\t\tdefStore.visible = column.visible;\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\tdefault:\r\n\t\t\t\t\t\tif(typeof colDef[key] !== \"function\" && excludedKeys.indexOf(key) === -1){\r\n\t\t\t\t\t\t\tdefStore[key] = colDef[key];\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\tdefinitions.push(defStore);\r\n\t\t});\r\n\r\n\t\treturn definitions;\r\n\t}\r\n}\r\n\r\nPersistence.moduleName = \"persistence\";\r\n\r\n//load defaults\r\nPersistence.readers = defaultReaders;\r\nPersistence.writers = defaultWriters;\r\n\r\nexport default Persistence;","import Module from '../../core/Module.js';\r\n\r\nclass Print extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.element = false;\r\n\t\tthis.manualBlock = false;\r\n\r\n\t\tthis.registerTableOption(\"printAsHtml\", false); //enable print as html\r\n\t\tthis.registerTableOption(\"printFormatter\", false); //printing page formatter\r\n\t\tthis.registerTableOption(\"printHeader\", false); //page header contents\r\n\t\tthis.registerTableOption(\"printFooter\", false); //page footer contents\r\n\t\tthis.registerTableOption(\"printStyled\", true); //enable print as html styling\r\n\t\tthis.registerTableOption(\"printRowRange\", \"visible\"); //restrict print to visible rows only\r\n\t\tthis.registerTableOption(\"printConfig\", {}); //print config options\r\n\r\n\t\tthis.registerColumnOption(\"print\");\r\n\t\tthis.registerColumnOption(\"titlePrint\");\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tif(this.table.options.printAsHtml){\r\n\t\t\twindow.addEventListener(\"beforeprint\", this.replaceTable.bind(this));\r\n\t\t\twindow.addEventListener(\"afterprint\", this.cleanup.bind(this));\r\n\t\t}\r\n\r\n\t\tthis.registerTableFunction(\"print\", this.printFullscreen.bind(this));\r\n\t}\r\n\r\n\t///////////////////////////////////\r\n\t///////// Table Functions /////////\r\n\t///////////////////////////////////\r\n\r\n\t///////////////////////////////////\r\n\t///////// Internal Logic //////////\r\n\t///////////////////////////////////\r\n\r\n\treplaceTable(){\r\n\t\tif(!this.manualBlock){\r\n\t\t\tthis.element = document.createElement(\"div\");\r\n\t\t\tthis.element.classList.add(\"tabulator-print-table\");\r\n\r\n\t\t\tthis.element.appendChild(this.table.modules.export.genereateTable(this.table.options.printConfig, this.table.options.printStyled, this.table.options.printRowRange, \"print\"));\r\n\r\n\t\t\tthis.table.element.style.display = \"none\";\r\n\r\n\t\t\tthis.table.element.parentNode.insertBefore(this.element, this.table.element);\r\n\t\t}\r\n\t}\r\n\r\n\tcleanup(){\r\n\t\tdocument.body.classList.remove(\"tabulator-print-fullscreen-hide\");\r\n\r\n\t\tif(this.element && this.element.parentNode){\r\n\t\t\tthis.element.parentNode.removeChild(this.element);\r\n\t\t\tthis.table.element.style.display = \"\";\r\n\t\t}\r\n\t}\r\n\r\n\tprintFullscreen(visible, style, config){\r\n\t\tvar scrollX = window.scrollX,\r\n\t\tscrollY = window.scrollY,\r\n\t\theaderEl = document.createElement(\"div\"),\r\n\t\tfooterEl = document.createElement(\"div\"),\r\n\t\ttableEl = this.table.modules.export.genereateTable(typeof config != \"undefined\" ? config : this.table.options.printConfig, typeof style != \"undefined\" ? style : this.table.options.printStyled, visible || this.table.options.printRowRange, \"print\"),\r\n\t\theaderContent, footerContent;\r\n\r\n\t\tthis.manualBlock = true;\r\n\r\n\t\tthis.element = document.createElement(\"div\");\r\n\t\tthis.element.classList.add(\"tabulator-print-fullscreen\");\r\n\r\n\t\tif(this.table.options.printHeader){\r\n\t\t\theaderEl.classList.add(\"tabulator-print-header\");\r\n\r\n\t\t\theaderContent = typeof this.table.options.printHeader == \"function\" ? this.table.options.printHeader.call(this.table) : this.table.options.printHeader;\r\n\r\n\t\t\tif(typeof headerContent == \"string\"){\r\n\t\t\t\theaderEl.innerHTML = headerContent;\r\n\t\t\t}else{\r\n\t\t\t\theaderEl.appendChild(headerContent);\r\n\t\t\t}\r\n\r\n\t\t\tthis.element.appendChild(headerEl);\r\n\t\t}\r\n\r\n\t\tthis.element.appendChild(tableEl);\r\n\r\n\t\tif(this.table.options.printFooter){\r\n\t\t\tfooterEl.classList.add(\"tabulator-print-footer\");\r\n\r\n\t\t\tfooterContent = typeof this.table.options.printFooter == \"function\" ? this.table.options.printFooter.call(this.table) : this.table.options.printFooter;\r\n\r\n\r\n\t\t\tif(typeof footerContent == \"string\"){\r\n\t\t\t\tfooterEl.innerHTML = footerContent;\r\n\t\t\t}else{\r\n\t\t\t\tfooterEl.appendChild(footerContent);\r\n\t\t\t}\r\n\r\n\t\t\tthis.element.appendChild(footerEl);\r\n\t\t}\r\n\r\n\t\tdocument.body.classList.add(\"tabulator-print-fullscreen-hide\");\r\n\t\tdocument.body.appendChild(this.element);\r\n\r\n\t\tif(this.table.options.printFormatter){\r\n\t\t\tthis.table.options.printFormatter(this.element, tableEl);\r\n\t\t}\r\n\r\n\t\twindow.print();\r\n\r\n\t\tthis.cleanup();\r\n\r\n\t\twindow.scrollTo(scrollX, scrollY);\r\n\r\n\t\tthis.manualBlock = false;\r\n\t}\r\n}\r\n\r\nPrint.moduleName = \"print\";\r\n\r\nexport default Print;","import Module from '../../core/Module.js';\r\n\r\nclass ReactiveData extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.data = false;\r\n\t\tthis.blocked = false; //block reactivity while performing update\r\n\t\tthis.origFuncs = {}; // hold original data array functions to allow replacement after data is done with\r\n\t\tthis.currentVersion = 0;\r\n\r\n\t\tthis.registerTableOption(\"reactiveData\", false); //enable data reactivity\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tif(this.table.options.reactiveData){\r\n\t\t\tthis.subscribe(\"cell-value-save-before\", this.block.bind(this));\r\n\t\t\tthis.subscribe(\"cell-value-save-after\", this.unblock.bind(this));\r\n\t\t\tthis.subscribe(\"row-data-save-before\", this.block.bind(this));\r\n\t\t\tthis.subscribe(\"row-data-save-after\", this.unblock.bind(this));\r\n\t\t\tthis.subscribe(\"row-data-init-after\", this.watchRow.bind(this));\r\n\t\t\tthis.subscribe(\"data-processing\", this.watchData.bind(this));\r\n\t\t\tthis.subscribe(\"data-processing\", this.watchData.bind(this));\r\n\t\t\tthis.subscribe(\"table-destroy\", this.unwatchData.bind(this));\r\n\t\t}\r\n\t}\r\n\r\n\twatchData(data){\r\n\t\tvar self = this,\r\n\t\tpushFunc, version;\r\n\r\n\t\tthis.currentVersion ++;\r\n\r\n\t\tversion = this.currentVersion;\r\n\r\n\t\tself.unwatchData();\r\n\r\n\t\tself.data = data;\r\n\r\n\t\t//override array push function\r\n\t\tself.origFuncs.push = data.push;\r\n\r\n\t\tObject.defineProperty(self.data, \"push\", {\r\n\t\t\tenumerable: false,\r\n\t\t\tconfigurable: true,\r\n\t\t\tvalue: function () {\r\n\t\t\t\tvar args = Array.from(arguments);\r\n\r\n\t\t\t\tif(!self.blocked && version === self.currentVersion){\r\n\t\t\t\t\targs.forEach(function (arg){\r\n\t\t\t\t\t\tself.table.rowManager.addRowActual(arg, false);\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn self.origFuncs.push.apply(data, arguments);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\t//override array unshift function\r\n\t\tself.origFuncs.unshift = data.unshift;\r\n\r\n\t\tObject.defineProperty(self.data, \"unshift\", {\r\n\t\t\tenumerable: false,\r\n\t\t\tconfigurable: true,\r\n\t\t\tvalue: function () {\r\n\t\t\t\tvar args = Array.from(arguments);\r\n\r\n\t\t\t\tif(!self.blocked && version === self.currentVersion){\r\n\t\t\t\t\targs.forEach(function (arg){\r\n\t\t\t\t\t\tself.table.rowManager.addRowActual(arg, true);\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn self.origFuncs.unshift.apply(data, arguments);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\r\n\t\t//override array shift function\r\n\t\tself.origFuncs.shift = data.shift;\r\n\r\n\t\tObject.defineProperty(self.data, \"shift\", {\r\n\t\t\tenumerable: false,\r\n\t\t\tconfigurable: true,\r\n\t\t\tvalue: function () {\r\n\t\t\t\tvar row;\r\n\r\n\t\t\t\tif(!self.blocked && version === self.currentVersion){\r\n\t\t\t\t\tif(self.data.length){\r\n\t\t\t\t\t\trow = self.table.rowManager.getRowFromDataObject(self.data[0]);\r\n\r\n\t\t\t\t\t\tif(row){\r\n\t\t\t\t\t\t\trow.deleteActual();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn self.origFuncs.shift.call(data);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\t//override array pop function\r\n\t\tself.origFuncs.pop = data.pop;\r\n\r\n\t\tObject.defineProperty(self.data, \"pop\", {\r\n\t\t\tenumerable: false,\r\n\t\t\tconfigurable: true,\r\n\t\t\tvalue: function () {\r\n\t\t\t\tvar row;\r\n\t\t\t\tif(!self.blocked && version === self.currentVersion){\r\n\t\t\t\t\tif(self.data.length){\r\n\t\t\t\t\t\trow = self.table.rowManager.getRowFromDataObject(self.data[self.data.length - 1]);\r\n\r\n\t\t\t\t\t\tif(row){\r\n\t\t\t\t\t\t\trow.deleteActual();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn self.origFuncs.pop.call(data);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\r\n\t\t//override array splice function\r\n\t\tself.origFuncs.splice = data.splice;\r\n\r\n\t\tObject.defineProperty(self.data, \"splice\", {\r\n\t\t\tenumerable: false,\r\n\t\t\tconfigurable: true,\r\n\t\t\tvalue: function () {\r\n\t\t\t\tvar args = Array.from(arguments),\r\n\t\t\t\tstart = args[0] < 0 ? data.length + args[0] : args[0],\r\n\t\t\t\tend = args[1],\r\n\t\t\t\tnewRows = args[2] ? args.slice(2) : false,\r\n\t\t\t\tstartRow;\r\n\r\n\t\t\t\tif(!self.blocked && version === self.currentVersion){\r\n\r\n\t\t\t\t\t//add new rows\r\n\t\t\t\t\tif(newRows){\r\n\t\t\t\t\t\tstartRow = data[start] ? self.table.rowManager.getRowFromDataObject(data[start]) : false;\r\n\r\n\t\t\t\t\t\tif(startRow){\r\n\t\t\t\t\t\t\tnewRows.forEach(function(rowData){\r\n\t\t\t\t\t\t\t\tself.table.rowManager.addRowActual(rowData, true, startRow, true);\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\tnewRows = newRows.slice().reverse();\r\n\r\n\t\t\t\t\t\t\tnewRows.forEach(function(rowData){\r\n\t\t\t\t\t\t\t\tself.table.rowManager.addRowActual(rowData, true, false, true);\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t//delete removed rows\r\n\t\t\t\t\tif(end !== 0){\r\n\t\t\t\t\t\tvar oldRows = data.slice(start, typeof args[1] === \"undefined\" ? args[1] : start + end);\r\n\r\n\t\t\t\t\t\toldRows.forEach(function(rowData, i){\r\n\t\t\t\t\t\t\tvar row = self.table.rowManager.getRowFromDataObject(rowData);\r\n\r\n\t\t\t\t\t\t\tif(row){\r\n\t\t\t\t\t\t\t\trow.deleteActual(i !== oldRows.length - 1);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif(newRows || end !== 0){\r\n\t\t\t\t\t\tself.table.rowManager.reRenderInPosition();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn self.origFuncs.splice.apply(data, arguments);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tunwatchData(){\r\n\t\tif(this.data !== false){\r\n\t\t\tfor(var key in this.origFuncs){\r\n\t\t\t\tObject.defineProperty(this.data, key, {\r\n\t\t\t\t\tenumerable: true,\r\n\t\t\t\t\tconfigurable:true,\r\n\t\t\t\t\twritable:true,\r\n\t\t\t\t\tvalue: this.origFuncs.key,\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\twatchRow(row){\r\n\t\tvar data = row.getData();\r\n\r\n\t\tthis.blocked = true;\r\n\r\n\t\tfor(var key in data){\r\n\t\t\tthis.watchKey(row, data, key);\r\n\t\t}\r\n\r\n\t\tif(this.table.options.dataTree){\r\n\t\t\tthis.watchTreeChildren(row);\r\n\t\t}\r\n\r\n\t\tthis.blocked = false;\r\n\t}\r\n\r\n\twatchTreeChildren (row){\r\n\t\tvar self = this,\r\n\t\tchildField = row.getData()[this.table.options.dataTreeChildField],\r\n\t\torigFuncs = {};\r\n\r\n\t\tfunction rebuildTree(){\r\n\t\t\tself.table.modules.dataTree.initializeRow(row);\r\n\t\t\tself.table.modules.dataTree.layoutRow(row);\r\n\t\t\tself.table.rowManager.refreshActiveData(\"tree\", false, true);\r\n\t\t}\r\n\r\n\t\tif(childField){\r\n\r\n\t\t\torigFuncs.push = childField.push;\r\n\r\n\t\t\tObject.defineProperty(childField, \"push\", {\r\n\t\t\t\tenumerable: false,\r\n\t\t\t\tconfigurable: true,\r\n\t\t\t\tvalue: function value() {\r\n\t\t\t\t\tvar result = origFuncs.push.apply(childField, arguments);\r\n\r\n\t\t\t\t\trebuildTree();\r\n\r\n\t\t\t\t\treturn result;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\torigFuncs.unshift = childField.unshift;\r\n\r\n\t\t\tObject.defineProperty(childField, \"unshift\", {\r\n\t\t\t\tenumerable: false,\r\n\t\t\t\tconfigurable: true,\r\n\t\t\t\tvalue: function value() {\r\n\t\t\t\t\tvar result = origFuncs.unshift.apply(childField, arguments);\r\n\r\n\t\t\t\t\trebuildTree();\r\n\r\n\t\t\t\t\treturn result;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\torigFuncs.shift = childField.shift;\r\n\r\n\t\t\tObject.defineProperty(childField, \"shift\", {\r\n\t\t\t\tenumerable: false,\r\n\t\t\t\tconfigurable: true,\r\n\t\t\t\tvalue: function value() {\r\n\t\t\t\t\tvar result = origFuncs.shift.call(childField);\r\n\r\n\t\t\t\t\trebuildTree();\r\n\r\n\t\t\t\t\treturn result;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\torigFuncs.pop = childField.pop;\r\n\r\n\t\t\tObject.defineProperty(childField, \"pop\", {\r\n\t\t\t\tenumerable: false,\r\n\t\t\t\tconfigurable: true,\r\n\t\t\t\tvalue: function value() {\r\n\t\t\t\t\tvar result = origFuncs.pop.call(childField);\r\n\r\n\t\t\t\t\trebuildTree();\r\n\r\n\t\t\t\t\treturn result;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\torigFuncs.splice = childField.splice;\r\n\r\n\t\t\tObject.defineProperty(childField, \"splice\", {\r\n\t\t\t\tenumerable: false,\r\n\t\t\t\tconfigurable: true,\r\n\t\t\t\tvalue: function value() {\r\n\t\t\t\t\tvar result = origFuncs.splice.apply(childField, arguments);\r\n\r\n\t\t\t\t\trebuildTree();\r\n\r\n\t\t\t\t\treturn result;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\twatchKey(row, data, key){\r\n\t\tvar self = this,\r\n\t\tprops = Object.getOwnPropertyDescriptor(data, key),\r\n\t\tvalue = data[key],\r\n\t\tversion = this.currentVersion;\r\n\r\n\t\tObject.defineProperty(data, key, {\r\n\t\t\tset: function(newValue){\r\n\t\t\t\tvalue = newValue;\r\n\t\t\t\tif(!self.blocked && version === self.currentVersion){\r\n\t\t\t\t\tvar update = {};\r\n\t\t\t\t\tupdate[key] = newValue;\r\n\t\t\t\t\trow.updateData(update);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(props.set){\r\n\t\t\t\t\tprops.set(newValue);\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tget:function(){\r\n\r\n\t\t\t\tif(props.get){\r\n\t\t\t\t\tprops.get();\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn value;\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tunwatchRow(row){\r\n\t\tvar data = row.getData();\r\n\r\n\t\tfor(var key in data){\r\n\t\t\tObject.defineProperty(data, key, {\r\n\t\t\t\tvalue:data[key],\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tblock(){\r\n\t\tthis.blocked = true;\r\n\t}\r\n\r\n\tunblock(){\r\n\t\tthis.blocked = false;\r\n\t}\r\n}\r\n\r\nReactiveData.moduleName = \"reactiveData\";\r\n\r\nexport default ReactiveData;\r\n\r\n\r\n\r\n","import Module from '../../core/Module.js';\r\n\r\nclass ResizeColumns extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.startColumn = false;\r\n\t\tthis.startX = false;\r\n\t\tthis.startWidth = false;\r\n\t\tthis.handle = null;\r\n\t\tthis.prevHandle = null;\r\n\r\n\t\tthis.registerColumnOption(\"resizable\", true);\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\t// if(this.table.options.resizableColumns){\r\n\t\t\tthis.subscribe(\"cell-layout\", this.layoutCellHandles.bind(this));\r\n\t\t\tthis.subscribe(\"column-init\", this.layoutColumnHeader.bind(this));\r\n\t\t// }\r\n\t}\r\n\r\n\tlayoutCellHandles(cell){\r\n\t\tif(cell.row.type === \"row\"){\r\n\t\t\tthis.initializeColumn(\"cell\", cell.column, cell.element);\r\n\t\t}\r\n\t}\r\n\r\n\tlayoutColumnHeader(column){\r\n\t\tthis.initializeColumn(\"header\", column, column.element);\r\n\t}\r\n\r\n\tinitializeColumn(type, column, element){\r\n\t\tvar self = this,\r\n\t\tvariableHeight = false,\r\n\t\tmode = column.definition.resizable;\r\n\r\n\t\t//set column resize mode\r\n\t\tif(type === \"header\"){\r\n\t\t\tvariableHeight = column.definition.formatter == \"textarea\" || column.definition.variableHeight;\r\n\t\t\tcolumn.modules.resize = {variableHeight:variableHeight};\r\n\t\t}\r\n\r\n\t\tif(mode === true || mode == type){\r\n\r\n\t\t\tvar handle = document.createElement('div');\r\n\t\t\thandle.className = \"tabulator-col-resize-handle\";\r\n\r\n\r\n\t\t\tvar prevHandle = document.createElement('div');\r\n\t\t\tprevHandle.className = \"tabulator-col-resize-handle prev\";\r\n\r\n\t\t\thandle.addEventListener(\"click\", function(e){\r\n\t\t\t\te.stopPropagation();\r\n\t\t\t});\r\n\r\n\t\t\tvar handleDown = function(e){\r\n\t\t\t\tvar nearestColumn = column.getLastColumn();\r\n\r\n\t\t\t\tif(nearestColumn && self._checkResizability(nearestColumn)){\r\n\t\t\t\t\tself.startColumn = column;\r\n\t\t\t\t\tself._mouseDown(e, nearestColumn, handle);\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\thandle.addEventListener(\"mousedown\", handleDown);\r\n\t\t\thandle.addEventListener(\"touchstart\", handleDown, {passive: true});\r\n\r\n\t\t\t//reszie column on double click\r\n\t\t\thandle.addEventListener(\"dblclick\", function(e){\r\n\t\t\t\tvar col = column.getLastColumn();\r\n\r\n\t\t\t\tif(col && self._checkResizability(col)){\r\n\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\tcol.reinitializeWidth(true);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\r\n\t\t\tprevHandle.addEventListener(\"click\", function(e){\r\n\t\t\t\te.stopPropagation();\r\n\t\t\t});\r\n\r\n\t\t\tvar prevHandleDown = function(e){\r\n\t\t\t\tvar nearestColumn, colIndex, prevColumn;\r\n\r\n\t\t\t\tnearestColumn = column.getFirstColumn();\r\n\r\n\t\t\t\tif(nearestColumn){\r\n\t\t\t\t\tcolIndex = self.table.columnManager.findColumnIndex(nearestColumn);\r\n\t\t\t\t\tprevColumn = colIndex > 0 ? self.table.columnManager.getColumnByIndex(colIndex - 1) : false;\r\n\r\n\t\t\t\t\tif(prevColumn && self._checkResizability(prevColumn)){\r\n\t\t\t\t\t\tself.startColumn = column;\r\n\t\t\t\t\t\tself._mouseDown(e, prevColumn, prevHandle);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\tprevHandle.addEventListener(\"mousedown\", prevHandleDown);\r\n\t\t\tprevHandle.addEventListener(\"touchstart\", prevHandleDown, {passive: true});\r\n\r\n\t\t\t//resize column on double click\r\n\t\t\tprevHandle.addEventListener(\"dblclick\", function(e){\r\n\t\t\t\tvar nearestColumn, colIndex, prevColumn;\r\n\r\n\t\t\t\tnearestColumn = column.getFirstColumn();\r\n\r\n\t\t\t\tif(nearestColumn){\r\n\t\t\t\t\tcolIndex = self.table.columnManager.findColumnIndex(nearestColumn);\r\n\t\t\t\t\tprevColumn = colIndex > 0 ? self.table.columnManager.getColumnByIndex(colIndex - 1) : false;\r\n\r\n\t\t\t\t\tif(prevColumn && self._checkResizability(prevColumn)){\r\n\t\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\t\tprevColumn.reinitializeWidth(true);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\telement.appendChild(handle);\r\n\t\t\telement.appendChild(prevHandle);\r\n\t\t}\r\n\t}\r\n\r\n\t_checkResizability(column){\r\n\t\treturn column.definition.resizable;\r\n\t}\r\n\r\n\t_mouseDown(e, column, handle){\r\n\t\tvar self = this;\r\n\r\n\t\tself.table.element.classList.add(\"tabulator-block-select\");\r\n\r\n\t\tfunction mouseMove(e){\r\n\t\t\t// self.table.columnManager.tempScrollBlock();\r\n\r\n\t\t\tif(self.table.rtl){\r\n\t\t\t\tcolumn.setWidth(self.startWidth - ((typeof e.screenX === \"undefined\" ? e.touches[0].screenX : e.screenX) - self.startX));\r\n\t\t\t}else{\r\n\t\t\t\tcolumn.setWidth(self.startWidth + ((typeof e.screenX === \"undefined\" ? e.touches[0].screenX : e.screenX) - self.startX));\r\n\t\t\t}\r\n\r\n\t\t\tself.table.columnManager.renderer.rerenderColumns(true);\r\n\r\n\t\t\tif(!self.table.browserSlow && column.modules.resize && column.modules.resize.variableHeight){\r\n\t\t\t\tcolumn.checkCellHeights();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction mouseUp(e){\r\n\r\n\t\t\t//block editor from taking action while resizing is taking place\r\n\t\t\tif(self.startColumn.modules.edit){\r\n\t\t\t\tself.startColumn.modules.edit.blocked = false;\r\n\t\t\t}\r\n\r\n\t\t\tif(self.table.browserSlow && column.modules.resize && column.modules.resize.variableHeight){\r\n\t\t\t\tcolumn.checkCellHeights();\r\n\t\t\t}\r\n\r\n\t\t\tdocument.body.removeEventListener(\"mouseup\", mouseUp);\r\n\t\t\tdocument.body.removeEventListener(\"mousemove\", mouseMove);\r\n\r\n\t\t\thandle.removeEventListener(\"touchmove\", mouseMove);\r\n\t\t\thandle.removeEventListener(\"touchend\", mouseUp);\r\n\r\n\t\t\tself.table.element.classList.remove(\"tabulator-block-select\");\r\n\r\n\t\t\tself.dispatch(\"column-resized\", column);\r\n\t\t\tself.table.externalEvents.dispatch(\"columnResized\", column.getComponent());\r\n\t\t}\r\n\r\n\t\te.stopPropagation(); //prevent resize from interfereing with movable columns\r\n\r\n\t\t//block editor from taking action while resizing is taking place\r\n\t\tif(self.startColumn.modules.edit){\r\n\t\t\tself.startColumn.modules.edit.blocked = true;\r\n\t\t}\r\n\r\n\t\tself.startX = typeof e.screenX === \"undefined\" ? e.touches[0].screenX : e.screenX;\r\n\t\tself.startWidth = column.getWidth();\r\n\r\n\t\tdocument.body.addEventListener(\"mousemove\", mouseMove);\r\n\t\tdocument.body.addEventListener(\"mouseup\", mouseUp);\r\n\t\thandle.addEventListener(\"touchmove\", mouseMove, {passive: true});\r\n\t\thandle.addEventListener(\"touchend\", mouseUp);\r\n\t}\r\n}\r\n\r\nResizeColumns.moduleName = \"resizeColumns\";\r\n\r\nexport default ResizeColumns;","import Module from '../../core/Module.js';\r\n\r\nclass ResizeRows extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.startColumn = false;\r\n\t\tthis.startY = false;\r\n\t\tthis.startHeight = false;\r\n\t\tthis.handle = null;\r\n\t\tthis.prevHandle = null;\r\n\r\n\t\tthis.registerTableOption(\"resizableRows\", false); //resizable rows\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tif(this.table.options.resizableRows){\r\n\t\t\tthis.subscribe(\"row-layout-after\", this.initializeRow.bind(this));\r\n\t\t}\r\n\t}\r\n\r\n\tinitializeRow(row){\r\n\t\tvar self = this,\r\n\t\trowEl = row.getElement();\r\n\r\n\t\tvar handle = document.createElement('div');\r\n\t\thandle.className = \"tabulator-row-resize-handle\";\r\n\r\n\t\tvar prevHandle = document.createElement('div');\r\n\t\tprevHandle.className = \"tabulator-row-resize-handle prev\";\r\n\r\n\t\thandle.addEventListener(\"click\", function(e){\r\n\t\t\te.stopPropagation();\r\n\t\t});\r\n\r\n\t\tvar handleDown = function(e){\r\n\t\t\tself.startRow = row;\r\n\t\t\tself._mouseDown(e, row, handle);\r\n\t\t};\r\n\r\n\t\thandle.addEventListener(\"mousedown\", handleDown);\r\n\t\thandle.addEventListener(\"touchstart\", handleDown, {passive: true});\r\n\r\n\t\tprevHandle.addEventListener(\"click\", function(e){\r\n\t\t\te.stopPropagation();\r\n\t\t});\r\n\r\n\t\tvar prevHandleDown = function(e){\r\n\t\t\tvar prevRow = self.table.rowManager.prevDisplayRow(row);\r\n\r\n\t\t\tif(prevRow){\r\n\t\t\t\tself.startRow = prevRow;\r\n\t\t\t\tself._mouseDown(e, prevRow, prevHandle);\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tprevHandle.addEventListener(\"mousedown\",prevHandleDown);\r\n\t\tprevHandle.addEventListener(\"touchstart\",prevHandleDown, {passive: true});\r\n\r\n\t\trowEl.appendChild(handle);\r\n\t\trowEl.appendChild(prevHandle);\r\n\t}\r\n\r\n\t_mouseDown(e, row, handle){\r\n\t\tvar self = this;\r\n\r\n\t\tself.table.element.classList.add(\"tabulator-block-select\");\r\n\r\n\t\tfunction mouseMove(e){\r\n\t\t\trow.setHeight(self.startHeight + ((typeof e.screenY === \"undefined\" ? e.touches[0].screenY : e.screenY) - self.startY));\r\n\t\t}\r\n\r\n\t\tfunction mouseUp(e){\r\n\r\n\t\t\t// //block editor from taking action while resizing is taking place\r\n\t\t\t// if(self.startColumn.modules.edit){\r\n\t\t\t// \tself.startColumn.modules.edit.blocked = false;\r\n\t\t\t// }\r\n\r\n\t\t\tdocument.body.removeEventListener(\"mouseup\", mouseMove);\r\n\t\t\tdocument.body.removeEventListener(\"mousemove\", mouseMove);\r\n\r\n\t\t\thandle.removeEventListener(\"touchmove\", mouseMove);\r\n\t\t\thandle.removeEventListener(\"touchend\", mouseUp);\r\n\r\n\t\t\tself.table.element.classList.remove(\"tabulator-block-select\");\r\n\r\n\t\t\tthis.dispatchExternal(\"rowResized\", row.getComponent());\r\n\t\t}\r\n\r\n\t\te.stopPropagation(); //prevent resize from interfereing with movable columns\r\n\r\n\t\t//block editor from taking action while resizing is taking place\r\n\t\t// if(self.startColumn.modules.edit){\r\n\t\t// \tself.startColumn.modules.edit.blocked = true;\r\n\t\t// }\r\n\r\n\t\tself.startY = typeof e.screenY === \"undefined\" ? e.touches[0].screenY : e.screenY;\r\n\t\tself.startHeight = row.getHeight();\r\n\r\n\t\tdocument.body.addEventListener(\"mousemove\", mouseMove);\r\n\t\tdocument.body.addEventListener(\"mouseup\", mouseUp);\r\n\r\n\t\thandle.addEventListener(\"touchmove\", mouseMove, {passive: true});\r\n\t\thandle.addEventListener(\"touchend\", mouseUp);\r\n\t}\r\n}\r\n\r\nResizeRows.moduleName = \"resizeRows\";\r\n\r\nexport default ResizeRows;","import Module from '../../core/Module.js';\r\n\r\nclass ResizeTable extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.binding = false;\r\n\t\tthis.observer = false;\r\n\t\tthis.containerObserver = false;\r\n\r\n\t\tthis.tableHeight = 0;\r\n\t\tthis.tableWidth = 0;\r\n\t\tthis.containerHeight = 0;\r\n\t\tthis.containerWidth = 0;\r\n\r\n\t\tthis.autoResize = false;\r\n\r\n\t\tthis.registerTableOption(\"autoResize\", true); //auto resize table\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tif(this.table.options.autoResize){\r\n\t\t\tvar table = this.table,\r\n\t\t\ttableStyle;\r\n\r\n\t\t\tthis.tableHeight = table.element.clientHeight;\r\n\t\t\tthis.tableWidth = table.element.clientWidth;\r\n\r\n\t\t\tif(table.element.parentNode){\r\n\t\t\t\tthis.containerHeight = table.element.parentNode.clientHeight;\r\n\t\t\t\tthis.containerWidth = table.element.parentNode.clientWidth;\r\n\t\t\t}\r\n\r\n\t\t\tif(typeof ResizeObserver !== \"undefined\" && table.rowManager.getRenderMode() === \"virtual\"){\r\n\r\n\t\t\t\tthis.autoResize = true;\r\n\r\n\t\t\t\tthis.observer = new ResizeObserver((entry) => {\r\n\t\t\t\t\tif(!table.browserMobile || (table.browserMobile &&!table.modules.edit.currentCell)){\r\n\r\n\t\t\t\t\t\tvar nodeHeight = Math.floor(entry[0].contentRect.height);\r\n\t\t\t\t\t\tvar nodeWidth = Math.floor(entry[0].contentRect.width);\r\n\r\n\t\t\t\t\t\tif(this.tableHeight != nodeHeight || this.tableWidth != nodeWidth){\r\n\t\t\t\t\t\t\tthis.tableHeight = nodeHeight;\r\n\t\t\t\t\t\t\tthis.tableWidth = nodeWidth;\r\n\r\n\t\t\t\t\t\t\tif(table.element.parentNode){\r\n\t\t\t\t\t\t\t\tthis.containerHeight = table.element.parentNode.clientHeight;\r\n\t\t\t\t\t\t\t\tthis.containerWidth = table.element.parentNode.clientWidth;\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\tthis.table.columnManager.renderer.rerenderColumns(true);\r\n\r\n\t\t\t\t\t\t\ttable.redraw();\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\tthis.observer.observe(table.element);\r\n\r\n\t\t\t\ttableStyle = window.getComputedStyle(table.element);\r\n\r\n\t\t\t\tif(this.table.element.parentNode && !this.table.rowManager.fixedHeight && (tableStyle.getPropertyValue(\"max-height\") || tableStyle.getPropertyValue(\"min-height\"))){\r\n\r\n\t\t\t\t\tthis.containerObserver = new ResizeObserver((entry) => {\r\n\t\t\t\t\t\tif(!table.browserMobile || (table.browserMobile &&!table.modules.edit.currentCell)){\r\n\r\n\t\t\t\t\t\t\tvar nodeHeight = Math.floor(entry[0].contentRect.height);\r\n\t\t\t\t\t\t\tvar nodeWidth = Math.floor(entry[0].contentRect.width);\r\n\r\n\t\t\t\t\t\t\tif(this.containerHeight != nodeHeight || this.containerWidth != nodeWidth){\r\n\t\t\t\t\t\t\t\tthis.containerHeight = nodeHeight;\r\n\t\t\t\t\t\t\t\tthis.containerWidth = nodeWidth;\r\n\t\t\t\t\t\t\t\tthis.tableHeight = table.element.clientHeight;\r\n\t\t\t\t\t\t\t\tthis.tableWidth = table.element.clientWidth;\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\ttable.columnManager.renderer.rerenderColumns(true);\r\n\r\n\t\t\t\t\t\t\ttable.redraw();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\tthis.containerObserver.observe(this.table.element.parentNode);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.subscribe(\"table-resize\", this.tableResized.bind(this));\r\n\r\n\t\t\t}else{\r\n\t\t\t\tthis.binding = function(){\r\n\t\t\t\t\tif(!table.browserMobile || (table.browserMobile && !table.modules.edit.currentCell)){\r\n\r\n\t\t\t\t\t\ttable.columnManager.renderer.rerenderColumns(true);\r\n\r\n\t\t\t\t\t\ttable.redraw();\r\n\t\t\t\t\t}\r\n\t\t\t\t};\r\n\r\n\t\t\t\twindow.addEventListener(\"resize\", this.binding);\r\n\t\t\t}\r\n\r\n\t\t\tthis.subscribe(\"table-destroy\", this.clearBindings.bind(this));\r\n\t\t}\r\n\t}\r\n\r\n\ttableResized(){\r\n\t\tthis.table.rowManager.redraw();\r\n\t}\r\n\r\n\tclearBindings(){\r\n\t\tif(this.binding){\r\n\t\t\twindow.removeEventListener(\"resize\", this.binding);\r\n\t\t}\r\n\r\n\t\tif(this.observer){\r\n\t\t\tthis.observer.unobserve(this.table.element);\r\n\t\t}\r\n\r\n\t\tif(this.containerObserver){\r\n\t\t\tthis.containerObserver.unobserve(this.table.element.parentNode);\r\n\t\t}\r\n\t}\r\n}\r\n\r\nResizeTable.moduleName = \"resizeTable\";\r\n\r\nexport default ResizeTable;","import Module from '../../core/Module.js';\r\n\r\nclass ResponsiveLayout extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.columns = [];\r\n\t\tthis.hiddenColumns = [];\r\n\t\tthis.mode = \"\";\r\n\t\tthis.index = 0;\r\n\t\tthis.collapseFormatter = [];\r\n\t\tthis.collapseStartOpen = true;\r\n\t\tthis.collapseHandleColumn = false;\r\n\r\n\t\tthis.registerTableOption(\"responsiveLayout\", false); //responsive layout flags\r\n\t\tthis.registerTableOption(\"responsiveLayoutCollapseStartOpen\", true); //start showing collapsed data\r\n\t\tthis.registerTableOption(\"responsiveLayoutCollapseUseFormatters\", true); //responsive layout collapse formatter\r\n\t\tthis.registerTableOption(\"responsiveLayoutCollapseFormatter\", false); //responsive layout collapse formatter\r\n\r\n\t\tthis.registerColumnOption(\"responsive\");\r\n\t}\r\n\r\n\t//generate resposive columns list\r\n\tinitialize(){\r\n\t\tvar self = this,\r\n\t\tcolumns = [];\r\n\r\n\t\tif(this.table.options.responsiveLayout){\r\n\t\t\tthis.subscribe(\"column-layout\", this.initializeColumn.bind(this));\r\n\t\t\tthis.subscribe(\"column-show\", this.updateColumnVisibility.bind(this));\r\n\t\t\tthis.subscribe(\"column-hide\", this.updateColumnVisibility.bind(this));\r\n\t\t\tthis.subscribe(\"columns-loaded\", this.initializeResponsivity.bind(this));\r\n\t\t\tthis.subscribe(\"column-moved\", this.initializeResponsivity.bind(this));\r\n\t\t\tthis.subscribe(\"column-add\", this.initializeResponsivity.bind(this));\r\n\t\t\tthis.subscribe(\"column-delete\", this.initializeResponsivity.bind(this));\r\n\r\n\t\t\tthis.subscribe(\"table-redrawing\", this.tableRedraw.bind(this));\r\n\r\n\t\t\tif(this.table.options.responsiveLayout === \"collapse\"){\r\n\t\t\t\tthis.subscribe(\"row-init\", this.initializeRow.bind(this));\r\n\t\t\t\tthis.subscribe(\"row-layout\", this.layoutRow.bind(this));\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\ttableRedraw(force){\r\n\t\tif([\"fitColumns\", \"fitDataStretch\"].indexOf(this.layoutMode()) === -1){\r\n\t\t\tif(!force){\r\n\t\t\t\tthis.update();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tinitializeResponsivity(){\r\n\t\tthis.mode = this.table.options.responsiveLayout;\r\n\t\tthis.collapseFormatter = this.table.options.responsiveLayoutCollapseFormatter || this.formatCollapsedData;\r\n\t\tthis.collapseStartOpen = this.table.options.responsiveLayoutCollapseStartOpen;\r\n\t\tthis.hiddenColumns = [];\r\n\r\n\t\t//detemine level of responsivity for each column\r\n\t\tthis.table.columnManager.columnsByIndex.forEach(function(column, i){\r\n\t\t\tif(column.modules.responsive){\r\n\t\t\t\tif(column.modules.responsive.order && column.modules.responsive.visible){\r\n\t\t\t\t\tcolumn.modules.responsive.index = i;\r\n\t\t\t\t\tcolumns.push(column);\r\n\r\n\t\t\t\t\tif(!column.visible && self.mode === \"collapse\"){\r\n\t\t\t\t\t\tself.hiddenColumns.push(column);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\t//sort list by responsivity\r\n\t\tcolumns = columns.reverse();\r\n\t\tcolumns = columns.sort(function(a, b){\r\n\t\t\tvar diff = b.modules.responsive.order - a.modules.responsive.order;\r\n\t\t\treturn diff || (b.modules.responsive.index - a.modules.responsive.index);\r\n\t\t});\r\n\r\n\t\tthis.columns = columns;\r\n\r\n\t\tif(this.mode === \"collapse\"){\r\n\t\t\tthis.generateCollapsedContent();\r\n\t\t}\r\n\r\n\t\t//assign collapse column\r\n\t\tfor (let col of this.table.columnManager.columnsByIndex){\r\n\t\t\tif(col.definition.formatter == \"responsiveCollapse\"){\r\n\t\t\t\tthis.collapseHandleColumn = col;\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(this.collapseHandleColumn){\r\n\t\t\tif(this.hiddenColumns.length){\r\n\t\t\t\tthis.collapseHandleColumn.show();\r\n\t\t\t}else{\r\n\t\t\t\tthis.collapseHandleColumn.hide();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//define layout information\r\n\tinitializeColumn(column){\r\n\t\tvar def = column.getDefinition();\r\n\r\n\t\tcolumn.modules.responsive = {order: typeof def.responsive === \"undefined\" ? 1 : def.responsive, visible:def.visible === false ? false : true};\r\n\t}\r\n\r\n\tinitializeRow(row){\r\n\t\tvar el;\r\n\r\n\t\tif(row.type !== \"calc\"){\r\n\t\t\tel = document.createElement(\"div\");\r\n\t\t\tel.classList.add(\"tabulator-responsive-collapse\");\r\n\r\n\t\t\trow.modules.responsiveLayout = {\r\n\t\t\t\telement:el,\r\n\t\t\t\topen:this.collapseStartOpen,\r\n\t\t\t};\r\n\r\n\t\t\tif(!this.collapseStartOpen){\r\n\t\t\t\tel.style.display = 'none';\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tlayoutRow(row){\r\n\t\tvar rowEl = row.getElement();\r\n\r\n\t\tif(row.modules.responsiveLayout){\r\n\t\t\trowEl.appendChild(row.modules.responsiveLayout.element);\r\n\t\t\tthis.generateCollapsedRowContent(row);\r\n\t\t}\r\n\t}\r\n\r\n\t//update column visibility\r\n\tupdateColumnVisibility(column, responsiveToggle){\r\n\t\tif(!responsiveToggle && column.modules.responsive){\r\n\t\t\tcolumn.modules.responsive.visible = column.visible;\r\n\t\t\tthis.initialize();\r\n\t\t}\r\n\r\n\t\t//this.update();\r\n\t}\r\n\r\n\thideColumn(column){\r\n\t\tvar colCount = this.hiddenColumns.length;\r\n\r\n\t\tcolumn.hide(false, true);\r\n\r\n\t\tif(this.mode === \"collapse\"){\r\n\t\t\tthis.hiddenColumns.unshift(column);\r\n\t\t\tthis.generateCollapsedContent();\r\n\r\n\t\t\tif(this.collapseHandleColumn && !colCount){\r\n\t\t\t\tthis.collapseHandleColumn.show();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tshowColumn(column){\r\n\t\tvar index;\r\n\r\n\t\tcolumn.show(false, true);\r\n\t\t//set column width to prevent calculation loops on uninitialized columns\r\n\t\tcolumn.setWidth(column.getWidth());\r\n\r\n\t\tif(this.mode === \"collapse\"){\r\n\t\t\tindex = this.hiddenColumns.indexOf(column);\r\n\r\n\t\t\tif(index > -1){\r\n\t\t\t\tthis.hiddenColumns.splice(index, 1);\r\n\t\t\t}\r\n\r\n\t\t\tthis.generateCollapsedContent();\r\n\r\n\t\t\tif(this.collapseHandleColumn && !this.hiddenColumns.length){\r\n\t\t\t\tthis.collapseHandleColumn.hide();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//redraw columns to fit space\r\n\tupdate(){\r\n\t\tvar self = this,\r\n\t\tworking = true;\r\n\r\n\t\twhile(working){\r\n\r\n\t\t\tlet width = self.table.modules.layout.getMode() == \"fitColumns\" ? self.table.columnManager.getFlexBaseWidth() : self.table.columnManager.getWidth();\r\n\r\n\t\t\tlet diff = (self.table.options.headerVisible ? self.table.columnManager.element.clientWidth : self.table.element.clientWidth) - width;\r\n\r\n\t\t\tif(diff < 0){\r\n\t\t\t\t//table is too wide\r\n\t\t\t\tlet column = self.columns[self.index];\r\n\r\n\t\t\t\tif(column){\r\n\t\t\t\t\tself.hideColumn(column);\r\n\t\t\t\t\tself.index ++;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tworking = false;\r\n\t\t\t\t}\r\n\r\n\t\t\t}else{\r\n\r\n\t\t\t\t//table has spare space\r\n\t\t\t\tlet column = self.columns[self.index -1];\r\n\r\n\t\t\t\tif(column){\r\n\t\t\t\t\tif(diff > 0){\r\n\t\t\t\t\t\tif(diff >= column.getWidth()){\r\n\t\t\t\t\t\t\tself.showColumn(column);\r\n\t\t\t\t\t\t\tself.index --;\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\tworking = false;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tworking = false;\r\n\t\t\t\t\t}\r\n\t\t\t\t}else{\r\n\t\t\t\t\tworking = false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif(!self.table.rowManager.activeRowsCount){\r\n\t\t\t\tself.table.rowManager.renderEmptyScroll();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tgenerateCollapsedContent(){\r\n\t\tvar self = this,\r\n\t\trows = this.table.rowManager.getDisplayRows();\r\n\r\n\t\trows.forEach(function(row){\r\n\t\t\tself.generateCollapsedRowContent(row);\r\n\t\t});\r\n\t}\r\n\r\n\tgenerateCollapsedRowContent(row){\r\n\t\tvar el, contents;\r\n\r\n\t\tif(row.modules.responsiveLayout){\r\n\t\t\tel = row.modules.responsiveLayout.element;\r\n\r\n\t\t\twhile(el.firstChild) el.removeChild(el.firstChild);\r\n\r\n\t\t\tcontents = this.collapseFormatter(this.generateCollapsedRowData(row));\r\n\t\t\tif(contents){\r\n\t\t\t\tel.appendChild(contents);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tgenerateCollapsedRowData(row){\r\n\t\tvar self = this,\r\n\t\tdata = row.getData(),\r\n\t\toutput = [],\r\n\t\tmockCellComponent;\r\n\r\n\t\tthis.hiddenColumns.forEach(function(column){\r\n\t\t\tvar value = column.getFieldValue(data);\r\n\r\n\t\t\tif(column.definition.title && column.field){\r\n\t\t\t\tif(column.modules.format && self.table.options.responsiveLayoutCollapseUseFormatters){\r\n\r\n\t\t\t\t\tmockCellComponent = {\r\n\t\t\t\t\t\tvalue:false,\r\n\t\t\t\t\t\tdata:{},\r\n\t\t\t\t\t\tgetValue:function(){\r\n\t\t\t\t\t\t\treturn value;\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tgetData:function(){\r\n\t\t\t\t\t\t\treturn data;\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tgetElement:function(){\r\n\t\t\t\t\t\t\treturn document.createElement(\"div\");\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tgetRow:function(){\r\n\t\t\t\t\t\t\treturn row.getComponent();\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tgetColumn:function(){\r\n\t\t\t\t\t\t\treturn column.getComponent();\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t};\r\n\r\n\t\t\t\t\toutput.push({\r\n\t\t\t\t\t\tfield: column.field,\r\n\t\t\t\t\t\ttitle: column.definition.title,\r\n\t\t\t\t\t\tvalue: column.modules.format.formatter.call(self.table.modules.format, mockCellComponent, column.modules.format.params)\r\n\t\t\t\t\t});\r\n\t\t\t\t}else{\r\n\t\t\t\t\toutput.push({\r\n\t\t\t\t\t\tfield: column.field,\r\n\t\t\t\t\t\ttitle: column.definition.title,\r\n\t\t\t\t\t\tvalue: value\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tformatCollapsedData(data){\r\n\t\tvar list = document.createElement(\"table\");\r\n\r\n\t\tdata.forEach(function(item){\r\n\t\t\tvar row = document.createElement(\"tr\");\r\n\t\t\tvar titleData = document.createElement(\"td\");\r\n\t\t\tvar valueData = document.createElement(\"td\");\r\n\t\t\tvar node_content;\r\n\r\n\t\t\tvar titleHighlight = document.createElement(\"strong\");\r\n\t\t\ttitleData.appendChild(titleHighlight);\r\n\t\t\tthis.langBind(\"columns|\" + item.field, function(text){\r\n\t\t\t\ttitleHighlight.innerText = text || item.title;\r\n\t\t\t});\r\n\r\n\t\t\tif(item.value instanceof Node){\r\n\t\t\t\tnode_content = document.createElement(\"div\");\r\n\t\t\t\tnode_content.appendChild(item.value);\r\n\t\t\t\tvalueData.appendChild(node_content);\r\n\t\t\t}else{\r\n\t\t\t\tvalueData.innerHTML = item.value;\r\n\t\t\t}\r\n\r\n\t\t\trow.appendChild(titleData);\r\n\t\t\trow.appendChild(valueData);\r\n\t\t\tlist.appendChild(row);\r\n\t\t}, this);\r\n\r\n\t\treturn Object.keys(data).length ? list : \"\";\r\n\t}\r\n}\r\n\r\nResponsiveLayout.moduleName = \"responsiveLayout\";\r\n\r\nexport default ResponsiveLayout;","import Module from '../../core/Module.js';\r\n\r\nclass SelectRow extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.selecting = false; //flag selecting in progress\r\n\t\tthis.lastClickedRow = false; //last clicked row\r\n\t\tthis.selectPrev = []; //hold previously selected element for drag drop selection\r\n\t\tthis.selectedRows = []; //hold selected rows\r\n\t\tthis.headerCheckboxElement = null; // hold header select element\r\n\r\n\t\tthis.registerTableOption(\"selectable\", \"highlight\"); //highlight rows on hover\r\n\t\tthis.registerTableOption(\"selectableRangeMode\", \"drag\"); //highlight rows on hover\r\n\t\tthis.registerTableOption(\"selectableRollingSelection\", true); //roll selection once maximum number of selectable rows is reached\r\n\t\tthis.registerTableOption(\"selectablePersistence\", true); // maintain selection when table view is updated\r\n\t\tthis.registerTableOption(\"selectableCheck\", function(data, row){return true;}); //check wheather row is selectable\r\n\r\n\t\tthis.registerTableFunction(\"selectRow\", this.selectRows.bind(this));\r\n\t\tthis.registerTableFunction(\"deselectRow\", this.deselectRows.bind(this));\r\n\t\tthis.registerTableFunction(\"toggleSelectRow\", this.toggleRow.bind(this));\r\n\t\tthis.registerTableFunction(\"getSelectedRows\", this.getSelectedRows.bind(this));\r\n\t\tthis.registerTableFunction(\"getSelectedData\", this.getSelectedData.bind(this));\r\n\r\n\t\t//register component functions\r\n\t\tthis.registerComponentFunction(\"row\", \"select\", this.selectRows.bind(this));\r\n\t\tthis.registerComponentFunction(\"row\", \"deselect\", this.deselectRows.bind(this));\r\n\t\tthis.registerComponentFunction(\"row\", \"toggleSelect\", this.toggleRow.bind(this));\r\n\t\tthis.registerComponentFunction(\"row\", \"isSelected\", this.isRowSelected.bind(this));\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tif(this.table.options.selectable !== false){\r\n\t\t\tthis.subscribe(\"row-init\", this.initializeRow.bind(this));\r\n\t\t\tthis.subscribe(\"row-deleting\", this.rowDeleted.bind(this));\r\n\t\t\tthis.subscribe(\"rows-wipe\", this.clearSelectionData.bind(this));\r\n\t\t\tthis.subscribe(\"rows-retrieve\", this.clearSelectionData.bind(this));\r\n\r\n\t\t\tif(this.table.options.selectable && this.table.options.selectablePersistence){\r\n\t\t\t\tthis.subscribe(\"data-refeshing\", this.deselectRows.bind(this));\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\trowRetrieve(type, prevValue){\r\n\t\treturn type === \"selected\" ? this.selectedRows : prevValue;\r\n\t}\r\n\r\n\trowDeleted(row){\r\n\t\tthis._deselectRow(row, true);\r\n\t}\r\n\r\n\r\n\tclearSelectionData(silent){\r\n\t\tthis.selecting = false;\r\n\t\tthis.lastClickedRow = false;\r\n\t\tthis.selectPrev = [];\r\n\t\tthis.selectedRows = [];\r\n\r\n\t\tif(silent !== true){\r\n\t\t\tthis._rowSelectionChanged();\r\n\t\t}\r\n\t}\r\n\r\n\tinitializeRow(row){\r\n\t\tvar self = this,\r\n\t\telement = row.getElement();\r\n\r\n\t\t// trigger end of row selection\r\n\t\tvar endSelect = function(){\r\n\r\n\t\t\tsetTimeout(function(){\r\n\t\t\t\tself.selecting = false;\r\n\t\t\t}, 50);\r\n\r\n\t\t\tdocument.body.removeEventListener(\"mouseup\", endSelect);\r\n\t\t};\r\n\r\n\t\trow.modules.select = {selected:false};\r\n\r\n\t\t//set row selection class\r\n\t\tif(self.table.options.selectableCheck.call(this.table, row.getComponent())){\r\n\t\t\telement.classList.add(\"tabulator-selectable\");\r\n\t\t\telement.classList.remove(\"tabulator-unselectable\");\r\n\r\n\t\t\tif(self.table.options.selectable && self.table.options.selectable != \"highlight\"){\r\n\t\t\t\tif(self.table.options.selectableRangeMode === \"click\"){\r\n\t\t\t\t\telement.addEventListener(\"click\", function(e){\r\n\t\t\t\t\t\tif(e.shiftKey){\r\n\t\t\t\t\t\t\tself.table._clearSelection();\r\n\t\t\t\t\t\t\tself.lastClickedRow = self.lastClickedRow || row;\r\n\r\n\t\t\t\t\t\t\tvar lastClickedRowIdx = self.table.rowManager.getDisplayRowIndex(self.lastClickedRow);\r\n\t\t\t\t\t\t\tvar rowIdx = self.table.rowManager.getDisplayRowIndex(row);\r\n\r\n\t\t\t\t\t\t\tvar fromRowIdx = lastClickedRowIdx <= rowIdx ? lastClickedRowIdx : rowIdx;\r\n\t\t\t\t\t\t\tvar toRowIdx = lastClickedRowIdx >= rowIdx ? lastClickedRowIdx : rowIdx;\r\n\r\n\t\t\t\t\t\t\tvar rows = self.table.rowManager.getDisplayRows().slice(0);\r\n\t\t\t\t\t\t\tvar toggledRows = rows.splice(fromRowIdx, toRowIdx - fromRowIdx + 1);\r\n\r\n\t\t\t\t\t\t\tif(e.ctrlKey || e.metaKey){\r\n\t\t\t\t\t\t\t\ttoggledRows.forEach(function(toggledRow){\r\n\t\t\t\t\t\t\t\t\tif(toggledRow !== self.lastClickedRow){\r\n\r\n\t\t\t\t\t\t\t\t\t\tif(self.table.options.selectable !== true && !self.isRowSelected(row)){\r\n\t\t\t\t\t\t\t\t\t\t\tif(self.selectedRows.length < self.table.options.selectable){\r\n\t\t\t\t\t\t\t\t\t\t\t\tself.toggleRow(toggledRow);\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\t\t\t\t\tself.toggleRow(toggledRow);\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\tself.lastClickedRow = row;\r\n\t\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\t\tself.deselectRows(undefined, true);\r\n\r\n\t\t\t\t\t\t\t\tif(self.table.options.selectable !== true){\r\n\t\t\t\t\t\t\t\t\tif(toggledRows.length > self.table.options.selectable){\r\n\t\t\t\t\t\t\t\t\t\ttoggledRows = toggledRows.slice(0, self.table.options.selectable)\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\tself.selectRows(toggledRows);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tself.table._clearSelection();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse if(e.ctrlKey || e.metaKey){\r\n\t\t\t\t\t\t\tself.toggleRow(row);\r\n\t\t\t\t\t\t\tself.lastClickedRow = row;\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\tself.deselectRows(undefined, true);\r\n\t\t\t\t\t\t\tself.selectRows(row);\r\n\t\t\t\t\t\t\tself.lastClickedRow = row;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t}else{\r\n\t\t\t\t\telement.addEventListener(\"click\", function(e){\r\n\t\t\t\t\t\tif(!self.table.modExists(\"edit\") || !self.table.modules.edit.getCurrentCell()){\r\n\t\t\t\t\t\t\tself.table._clearSelection();\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif(!self.selecting){\r\n\t\t\t\t\t\t\tself.toggleRow(row);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\telement.addEventListener(\"mousedown\", function(e){\r\n\t\t\t\t\t\tif(e.shiftKey){\r\n\t\t\t\t\t\t\tself.table._clearSelection();\r\n\r\n\t\t\t\t\t\t\tself.selecting = true;\r\n\r\n\t\t\t\t\t\t\tself.selectPrev = [];\r\n\r\n\t\t\t\t\t\t\tdocument.body.addEventListener(\"mouseup\", endSelect);\r\n\t\t\t\t\t\t\tdocument.body.addEventListener(\"keyup\", endSelect);\r\n\r\n\t\t\t\t\t\t\tself.toggleRow(row);\r\n\r\n\t\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\telement.addEventListener(\"mouseenter\", function(e){\r\n\t\t\t\t\t\tif(self.selecting){\r\n\t\t\t\t\t\t\tself.table._clearSelection();\r\n\t\t\t\t\t\t\tself.toggleRow(row);\r\n\r\n\t\t\t\t\t\t\tif(self.selectPrev[1] == row){\r\n\t\t\t\t\t\t\t\tself.toggleRow(self.selectPrev[0]);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\telement.addEventListener(\"mouseout\", function(e){\r\n\t\t\t\t\t\tif(self.selecting){\r\n\t\t\t\t\t\t\tself.table._clearSelection();\r\n\t\t\t\t\t\t\tself.selectPrev.unshift(row);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t}else{\r\n\t\t\telement.classList.add(\"tabulator-unselectable\");\r\n\t\t\telement.classList.remove(\"tabulator-selectable\");\r\n\t\t}\r\n\t}\r\n\r\n\t//toggle row selection\r\n\ttoggleRow(row){\r\n\t\tif(this.table.options.selectableCheck.call(this.table, row.getComponent())){\r\n\t\t\tif(row.modules.select && row.modules.select.selected){\r\n\t\t\t\tthis._deselectRow(row);\r\n\t\t\t}else{\r\n\t\t\t\tthis._selectRow(row);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//select a number of rows\r\n\tselectRows(rows){\r\n\t\tvar rowMatch;\r\n\r\n\t\tswitch(typeof rows){\r\n\t\t\tcase \"undefined\":\r\n\t\t\tthis.table.rowManager.rows.forEach((row) => {\r\n\t\t\t\tthis._selectRow(row, true, true);\r\n\t\t\t});\r\n\r\n\t\t\tthis._rowSelectionChanged();\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"string\":\r\n\r\n\t\t\trowMatch = this.table.rowManager.findRow(rows);\r\n\r\n\t\t\tif(rowMatch){\r\n\t\t\t\tthis._selectRow(rowMatch, true, true);\r\n\t\t\t}else{\r\n\t\t\t\tthis.table.rowManager.getRows(rows).forEach((row) => {\r\n\t\t\t\t\tthis._selectRow(row, true, true);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\tthis._rowSelectionChanged();\r\n\t\t\tbreak;\r\n\r\n\t\t\tdefault:\r\n\t\t\tif(Array.isArray(rows)){\r\n\t\t\t\trows.forEach((row) => {\r\n\t\t\t\t\tthis._selectRow(row, true, true);\r\n\t\t\t\t});\r\n\r\n\t\t\t\tthis._rowSelectionChanged();\r\n\t\t\t}else{\r\n\t\t\t\tthis._selectRow(rows, false, true);\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\t//select an individual row\r\n\t_selectRow(rowInfo, silent, force){\r\n\t\tvar index;\r\n\r\n\t\t//handle max row count\r\n\t\tif(!isNaN(this.table.options.selectable) && this.table.options.selectable !== true && !force){\r\n\t\t\tif(this.selectedRows.length >= this.table.options.selectable){\r\n\t\t\t\tif(this.table.options.selectableRollingSelection){\r\n\t\t\t\t\tthis._deselectRow(this.selectedRows[0]);\r\n\t\t\t\t}else{\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tvar row = this.table.rowManager.findRow(rowInfo);\r\n\r\n\t\tif(row){\r\n\t\t\tif(this.selectedRows.indexOf(row) == -1){\r\n\t\t\t\trow.getElement().classList.add(\"tabulator-selected\");\r\n\t\t\t\tif(!row.modules.select){\r\n\t\t\t\t\trow.modules.select = {};\r\n\t\t\t\t}\r\n\r\n\t\t\t\trow.modules.select.selected = true;\r\n\t\t\t\tif(row.modules.select.checkboxEl){\r\n\t\t\t\t\trow.modules.select.checkboxEl.checked = true;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.selectedRows.push(row);\r\n\r\n\t\t\t\tif(this.table.options.dataTreeSelectPropagate){\r\n\t\t\t\t\tthis.childRowSelection(row, true);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(!silent){\r\n\t\t\t\t\tthis.dispatchExternal(\"rowSelected\", row.getComponent());\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis._rowSelectionChanged(silent);\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tif(!silent){\r\n\t\t\t\tconsole.warn(\"Selection Error - No such row found, ignoring selection:\" + rowInfo);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tisRowSelected(row){\r\n\t\treturn this.selectedRows.indexOf(row) !== -1;\r\n\t}\r\n\r\n\t//deselect a number of rows\r\n\tdeselectRows(rows, silent){\r\n\t\tvar self = this,\r\n\t\trowCount;\r\n\r\n\t\tif(typeof rows == \"undefined\"){\r\n\r\n\t\t\trowCount = self.selectedRows.length;\r\n\r\n\t\t\tfor(let i = 0; i < rowCount; i++){\r\n\t\t\t\tself._deselectRow(self.selectedRows[0], true);\r\n\t\t\t}\r\n\r\n\t\t\tself._rowSelectionChanged(silent);\r\n\r\n\t\t}else{\r\n\t\t\tif(Array.isArray(rows)){\r\n\t\t\t\trows.forEach(function(row){\r\n\t\t\t\t\tself._deselectRow(row, true);\r\n\t\t\t\t});\r\n\r\n\t\t\t\tself._rowSelectionChanged(silent);\r\n\t\t\t}else{\r\n\t\t\t\tself._deselectRow(rows, silent);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//deselect an individual row\r\n\t_deselectRow(rowInfo, silent){\r\n\t\tvar self = this,\r\n\t\trow = self.table.rowManager.findRow(rowInfo),\r\n\t\tindex;\r\n\r\n\t\tif(row){\r\n\t\t\tindex = self.selectedRows.findIndex(function(selectedRow){\r\n\t\t\t\treturn selectedRow == row;\r\n\t\t\t});\r\n\r\n\t\t\tif(index > -1){\r\n\r\n\t\t\t\trow.getElement().classList.remove(\"tabulator-selected\");\r\n\t\t\t\tif(!row.modules.select){\r\n\t\t\t\t\trow.modules.select = {};\r\n\t\t\t\t}\r\n\r\n\t\t\t\trow.modules.select.selected = false;\r\n\t\t\t\tif(row.modules.select.checkboxEl){\r\n\t\t\t\t\trow.modules.select.checkboxEl.checked = false;\r\n\t\t\t\t}\r\n\t\t\t\tself.selectedRows.splice(index, 1);\r\n\r\n\t\t\t\tif(this.table.options.dataTreeSelectPropagate){\r\n\t\t\t\t\tthis.childRowSelection(row, false);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(!silent){\r\n\t\t\t\t\tthis.dispatchExternal(\"rowDeselected\", row.getComponent());\r\n\t\t\t\t}\r\n\r\n\t\t\t\tself._rowSelectionChanged(silent);\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tif(!silent){\r\n\t\t\t\tconsole.warn(\"Deselection Error - No such row found, ignoring selection:\" + rowInfo);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tgetSelectedData(){\r\n\t\tvar data = [];\r\n\r\n\t\tthis.selectedRows.forEach(function(row){\r\n\t\t\tdata.push(row.getData());\r\n\t\t});\r\n\r\n\t\treturn data;\r\n\t}\r\n\r\n\tgetSelectedRows(){\r\n\r\n\t\tvar rows = [];\r\n\r\n\t\tthis.selectedRows.forEach(function(row){\r\n\t\t\trows.push(row.getComponent());\r\n\t\t});\r\n\r\n\t\treturn rows;\r\n\t}\r\n\r\n\t_rowSelectionChanged(silent){\r\n\t\tif(this.headerCheckboxElement){\r\n\t\t\tif(this.selectedRows.length === 0){\r\n\t\t\t\tthis.headerCheckboxElement.checked = false;\r\n\t\t\t\tthis.headerCheckboxElement.indeterminate = false;\r\n\t\t\t} else if(this.table.rowManager.rows.length === this.selectedRows.length){\r\n\t\t\t\tthis.headerCheckboxElement.checked = true;\r\n\t\t\t\tthis.headerCheckboxElement.indeterminate = false;\r\n\t\t\t} else {\r\n\t\t\t\tthis.headerCheckboxElement.indeterminate = true;\r\n\t\t\t\tthis.headerCheckboxElement.checked = false;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(!silent){\r\n\t\t\tthis.dispatchExternal(\"rowSelectionChanged\", this.getSelectedData(), this.getSelectedRows());\r\n\t\t}\r\n\t}\r\n\r\n\tregisterRowSelectCheckbox (row, element) {\r\n\t\tif(!row._row.modules.select){\r\n\t\t\trow._row.modules.select = {};\r\n\t\t}\r\n\r\n\t\trow._row.modules.select.checkboxEl = element;\r\n\t}\r\n\r\n\tregisterHeaderSelectCheckbox (element) {\r\n\t\tthis.headerCheckboxElement = element;\r\n\t}\r\n\r\n\tchildRowSelection(row, select){\r\n\t\tvar children = this.table.modules.dataTree.getChildren(row, true);\r\n\r\n\t\tif(select){\r\n\t\t\tfor(let child of children){\r\n\t\t\t\tthis._selectRow(child, true);\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tfor(let child of children){\r\n\t\t\t\tthis._deselectRow(child, true);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n\r\nSelectRow.moduleName = \"selectRow\";\r\n\r\nexport default SelectRow;","//sort datetime\r\nexport default function(a, b, aRow, bRow, column, dir, params){\r\n\tvar format = params.format || \"DD/MM/YYYY HH:mm:ss\",\r\n\talignEmptyValues = params.alignEmptyValues,\r\n\temptyAlign = 0;\r\n\r\n\tif(typeof moment != \"undefined\"){\r\n\t\ta = moment(a, format);\r\n\t\tb = moment(b, format);\r\n\r\n\t\tif(!a.isValid()){\r\n\t\t\temptyAlign = !b.isValid() ? 0 : -1;\r\n\t\t}else if(!b.isValid()){\r\n\t\t\temptyAlign = 1;\r\n\t\t}else{\r\n\t\t\t//compare valid values\r\n\t\t\treturn a - b;\r\n\t\t}\r\n\r\n\t\t//fix empty values in position\r\n\t\tif((alignEmptyValues === \"top\" && dir === \"desc\") || (alignEmptyValues === \"bottom\" && dir === \"asc\")){\r\n\t\t\temptyAlign *= -1;\r\n\t\t}\r\n\r\n\t\treturn emptyAlign;\r\n\r\n\t}else{\r\n\t\tconsole.error(\"Sort Error - 'datetime' sorter is dependant on moment.js\");\r\n\t}\r\n};","import number from './sorters/number.js';\r\nimport string from './sorters/string.js';\r\nimport date from './sorters/date.js';\r\nimport time from './sorters/time.js';\r\nimport datetime from './sorters/datetime.js';\r\nimport boolean from './sorters/boolean.js';\r\nimport array from './sorters/array.js';\r\nimport exists from './sorters/exists.js';\r\nimport alphanum from './sorters/alphanum.js';\r\n\r\nexport default {\r\n\tnumber:number,\r\n\tstring:string,\r\n\tdate:date,\r\n\ttime:time,\r\n\tdatetime:datetime,\r\n\tboolean:boolean,\r\n\tarray:array,\r\n\texists:exists,\r\n\talphanum:alphanum\r\n};","//sort numbers\r\nexport default function(a, b, aRow, bRow, column, dir, params){\r\n\tvar alignEmptyValues = params.alignEmptyValues;\r\n\tvar decimal = params.decimalSeparator;\r\n\tvar thousand = params.thousandSeparator;\r\n\tvar emptyAlign = 0;\r\n\r\n\ta = String(a);\r\n\tb = String(b);\r\n\r\n\tif(thousand){\r\n\t\ta = a.split(thousand).join(\"\");\r\n\t\tb = b.split(thousand).join(\"\");\r\n\t}\r\n\r\n\tif(decimal){\r\n\t\ta = a.split(decimal).join(\".\");\r\n\t\tb = b.split(decimal).join(\".\");\r\n\t}\r\n\r\n\ta = parseFloat(a);\r\n\tb = parseFloat(b);\r\n\r\n\t//handle non numeric values\r\n\tif(isNaN(a)){\r\n\t\temptyAlign = isNaN(b) ? 0 : -1;\r\n\t}else if(isNaN(b)){\r\n\t\temptyAlign = 1;\r\n\t}else{\r\n\t\t//compare valid values\r\n\t\treturn a - b;\r\n\t}\r\n\r\n\t//fix empty values in position\r\n\tif((alignEmptyValues === \"top\" && dir === \"desc\") || (alignEmptyValues === \"bottom\" && dir === \"asc\")){\r\n\t\temptyAlign *= -1;\r\n\t}\r\n\r\n\treturn emptyAlign;\r\n};","//sort strings\r\nexport default function(a, b, aRow, bRow, column, dir, params){\r\n\tvar alignEmptyValues = params.alignEmptyValues;\r\n\tvar emptyAlign = 0;\r\n\tvar locale;\r\n\r\n\t//handle empty values\r\n\tif(!a){\r\n\t\temptyAlign = !b ? 0 : -1;\r\n\t}else if(!b){\r\n\t\temptyAlign = 1;\r\n\t}else{\r\n\t\t//compare valid values\r\n\t\tswitch(typeof params.locale){\r\n\t\t\tcase \"boolean\":\r\n\t\t\tif(params.locale){\r\n\t\t\t\tlocale = this.langLocale();\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\t\t\tcase \"string\":\r\n\t\t\tlocale = params.locale;\r\n\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\treturn String(a).toLowerCase().localeCompare(String(b).toLowerCase(), locale);\r\n\t}\r\n\r\n\t//fix empty values in position\r\n\tif((alignEmptyValues === \"top\" && dir === \"desc\") || (alignEmptyValues === \"bottom\" && dir === \"asc\")){\r\n\t\temptyAlign *= -1;\r\n\t}\r\n\r\n\treturn emptyAlign;\r\n};","import datetime from './datetime.js';\r\n\r\n//sort date\r\nexport default function(a, b, aRow, bRow, column, dir, params){\r\n\tif(!params.format){\r\n\t\tparams.format = \"DD/MM/YYYY\";\r\n\t}\r\n\r\n\treturn datetime.call(this, a, b, aRow, bRow, column, dir, params);\r\n};","import datetime from './datetime.js';\r\n\r\n//sort times\r\nexport default function(a, b, aRow, bRow, column, dir, params){\r\n\tif(!params.format){\r\n\t\tparams.format = \"HH:mm\";\r\n\t}\r\n\r\n\treturn datetime.call(this, a, b, aRow, bRow, column, dir, params);\r\n};","//sort booleans\r\nexport default function(a, b, aRow, bRow, column, dir, params){\r\n\tvar el1 = a === true || a === \"true\" || a === \"True\" || a === 1 ? 1 : 0;\r\n\tvar el2 = b === true || b === \"true\" || b === \"True\" || b === 1 ? 1 : 0;\r\n\r\n\treturn el1 - el2;\r\n};","//sort if element contains any data\r\nexport default function(a, b, aRow, bRow, column, dir, params){\r\n\tvar el1 = 0;\r\n\tvar el2 = 0;\r\n\tvar type = params.type || \"length\";\r\n\tvar alignEmptyValues = params.alignEmptyValues;\r\n\tvar emptyAlign = 0;\r\n\r\n\tfunction calc(value){\r\n\r\n\t\tswitch(type){\r\n\t\t\tcase \"length\":\r\n\t\t\treturn value.length;\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"sum\":\r\n\t\t\treturn value.reduce(function(c, d){\r\n\t\t\t\treturn c + d;\r\n\t\t\t});\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"max\":\r\n\t\t\treturn Math.max.apply(null, value) ;\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"min\":\r\n\t\t\treturn Math.min.apply(null, value) ;\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"avg\":\r\n\t\t\treturn value.reduce(function(c, d){\r\n\t\t\t\treturn c + d;\r\n\t\t\t}) / value.length;\r\n\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\t//handle non array values\r\n\tif(!Array.isArray(a)){\r\n\t\talignEmptyValues = !Array.isArray(b) ? 0 : -1;\r\n\t}else if(!Array.isArray(b)){\r\n\t\talignEmptyValues = 1;\r\n\t}else{\r\n\r\n\t\t//compare valid values\r\n\t\tel1 = a ? calc(a) : 0;\r\n\t\tel2 = b ? calc(b) : 0;\r\n\r\n\t\treturn el1 - el2;\r\n\t}\r\n\r\n\t//fix empty values in position\r\n\tif((alignEmptyValues === \"top\" && dir === \"desc\") || (alignEmptyValues === \"bottom\" && dir === \"asc\")){\r\n\t\temptyAlign *= -1;\r\n\t}\r\n\r\n\treturn emptyAlign;\r\n};","//sort if element contains any data\r\nexport default function(a, b, aRow, bRow, column, dir, params){\r\n\tvar el1 = typeof a == \"undefined\" ? 0 : 1;\r\n\tvar el2 = typeof b == \"undefined\" ? 0 : 1;\r\n\r\n\treturn el1 - el2;\r\n};","//sort alpha numeric strings\r\nexport default function(as, bs, aRow, bRow, column, dir, params){\r\n\tvar a, b, a1, b1, i= 0, L, rx = /(\\d+)|(\\D+)/g, rd = /\\d/;\r\n\tvar alignEmptyValues = params.alignEmptyValues;\r\n\tvar emptyAlign = 0;\r\n\r\n\t//handle empty values\r\n\tif(!as && as!== 0){\r\n\t\temptyAlign = !bs && bs!== 0 ? 0 : -1;\r\n\t}else if(!bs && bs!== 0){\r\n\t\temptyAlign = 1;\r\n\t}else{\r\n\r\n\t\tif(isFinite(as) && isFinite(bs)) return as - bs;\r\n\t\ta = String(as).toLowerCase();\r\n\t\tb = String(bs).toLowerCase();\r\n\t\tif(a === b) return 0;\r\n\t\tif(!(rd.test(a) && rd.test(b))) return a > b ? 1 : -1;\r\n\t\ta = a.match(rx);\r\n\t\tb = b.match(rx);\r\n\t\tL = a.length > b.length ? b.length : a.length;\r\n\t\twhile(i < L){\r\n\t\t\ta1= a[i];\r\n\t\t\tb1= b[i++];\r\n\t\t\tif(a1 !== b1){\r\n\t\t\t\tif(isFinite(a1) && isFinite(b1)){\r\n\t\t\t\t\tif(a1.charAt(0) === \"0\") a1 = \".\" + a1;\r\n\t\t\t\t\tif(b1.charAt(0) === \"0\") b1 = \".\" + b1;\r\n\t\t\t\t\treturn a1 - b1;\r\n\t\t\t\t}\r\n\t\t\t\telse return a1 > b1 ? 1 : -1;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn a.length > b.length;\r\n\t}\r\n\r\n\t//fix empty values in position\r\n\tif((alignEmptyValues === \"top\" && dir === \"desc\") || (alignEmptyValues === \"bottom\" && dir === \"asc\")){\r\n\t\temptyAlign *= -1;\r\n\t}\r\n\r\n\treturn emptyAlign;\r\n};","import Module from '../../core/Module.js';\r\n\r\nimport defaultSorters from './defaults/sorters.js';\r\n\r\nclass Sort extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t \tthis.sortList = []; //holder current sort\r\n\t \tthis.changed = false; //has the sort changed since last render\r\n\r\n\t \tthis.registerTableOption(\"sortMode\", \"local\"); //local or remote sorting\r\n\r\n\t \tthis.registerTableOption(\"initialSort\", false); //initial sorting criteria\r\n\t \tthis.registerTableOption(\"columnHeaderSortMulti\", true); //multiple or single column sorting\r\n\t \tthis.registerTableOption(\"sortOrderReverse\", false); //reverse internal sort ordering\r\n\t \tthis.registerTableOption(\"headerSortElement\", \"
\"); //header sort element\r\n\r\n\t \tthis.registerColumnOption(\"sorter\");\r\n\t \tthis.registerColumnOption(\"sorterParams\");\r\n\r\n\t \tthis.registerColumnOption(\"headerSort\", true);\r\n\t \tthis.registerColumnOption(\"headerSortStartingDir\");\r\n\t \tthis.registerColumnOption(\"headerSortTristate\");\r\n\r\n\t }\r\n\r\n\t initialize(){\r\n\t \tthis.subscribe(\"column-layout\", this.initializeColumn.bind(this));\r\n\t \tthis.subscribe(\"table-built\", this.tableBuilt.bind(this));\r\n\t \tthis.registerDataHandler(this.sort.bind(this), 20);\r\n\r\n\t \tthis.registerTableFunction(\"setSort\", this.userSetSort.bind(this));\r\n\t \tthis.registerTableFunction(\"getSorters\", this.getSort.bind(this));\r\n\t \tthis.registerTableFunction(\"clearSort\", this.clearSort.bind(this));\r\n\r\n\t \tif(this.table.options.sortMode === \"remote\"){\r\n\t \t\tthis.subscribe(\"data-params\", this.remoteSortParams.bind(this));\r\n\t \t}\r\n\t }\r\n\r\n\t tableBuilt(){\r\n\t \tif(this.table.options.initialSort){\r\n\t \t\tthis.setSort(this.table.options.initialSort);\r\n\t \t}\r\n\t }\r\n\r\n\t remoteSortParams(data, config, silent, params){\r\n\t \tvar sorters = this.getSort();\r\n\r\n\t \tsorters.forEach((item) => {\r\n\t \t\tdelete item.column;\r\n\t \t});\r\n\r\n\t \tparams.sort = sorters;\r\n\r\n\t \treturn params;\r\n\t }\r\n\r\n\r\n\t///////////////////////////////////\r\n\t///////// Table Functions /////////\r\n\t///////////////////////////////////\r\n\r\n\tuserSetSort(sortList, dir){\r\n\t\tthis.setSort(sortList, dir);\r\n\t\t// this.table.rowManager.sorterRefresh();\r\n\t\tthis.refreshSort();\r\n\t}\r\n\r\n\tclearSort(){\r\n\t\tthis.clear();\r\n\t\t// this.table.rowManager.sorterRefresh();\r\n\t\tthis.refreshSort();\r\n\t}\r\n\r\n\r\n\t///////////////////////////////////\r\n\t///////// Internal Logic //////////\r\n\t///////////////////////////////////\r\n\r\n\t//initialize column header for sorting\r\n\tinitializeColumn(column){\r\n\t\tvar sorter = false,\r\n\t\tcolEl,\r\n\t\tarrowEl;\r\n\r\n\t\tswitch(typeof column.definition.sorter){\r\n\t\t\tcase \"string\":\r\n\t\t\tif(Sort.sorters[column.definition.sorter]){\r\n\t\t\t\tsorter = Sort.sorters[column.definition.sorter];\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Sort Error - No such sorter found: \", column.definition.sorter);\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"function\":\r\n\t\t\tsorter = column.definition.sorter;\r\n\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\tcolumn.modules.sort = {\r\n\t\t\tsorter:sorter, dir:\"none\",\r\n\t\t\tparams:column.definition.sorterParams || {},\r\n\t\t\tstartingDir:column.definition.headerSortStartingDir || \"asc\",\r\n\t\t\ttristate: column.definition.headerSortTristate,\r\n\t\t};\r\n\r\n\t\tif(column.definition.headerSort !== false){\r\n\r\n\t\t\tcolEl = column.getElement();\r\n\r\n\t\t\tcolEl.classList.add(\"tabulator-sortable\");\r\n\r\n\r\n\t\t\tarrowEl = document.createElement(\"div\");\r\n\t\t\tarrowEl.classList.add(\"tabulator-col-sorter\");\r\n\r\n\t\t\tif(typeof this.table.options.headerSortElement == \"object\"){\r\n\t\t\t\tarrowEl.appendChild(this.table.options.headerSortElement);\r\n\t\t\t}else{\r\n\t\t\t\tarrowEl.innerHTML = this.table.options.headerSortElement;\r\n\t\t\t}\r\n\r\n\t\t\t//create sorter arrow\r\n\t\t\tcolumn.titleHolderElement.appendChild(arrowEl);\r\n\r\n\t\t\tcolumn.modules.sort.element = arrowEl;\r\n\r\n\t\t\t//sort on click\r\n\t\t\tcolEl.addEventListener(\"click\", (e) => {\r\n\t\t\t\tvar dir = \"\",\r\n\t\t\t\tsorters=[],\r\n\t\t\t\tmatch = false;\r\n\r\n\t\t\t\tif(column.modules.sort){\r\n\t\t\t\t\tif(column.modules.sort.tristate){\r\n\t\t\t\t\t\tif(column.modules.sort.dir == \"none\"){\r\n\t\t\t\t\t\t\tdir = column.modules.sort.startingDir;\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\tif(column.modules.sort.dir == column.modules.sort.startingDir){\r\n\t\t\t\t\t\t\t\tdir = column.modules.sort.dir == \"asc\" ? \"desc\" : \"asc\";\r\n\t\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\t\tdir = \"none\";\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tswitch(column.modules.sort.dir){\r\n\t\t\t\t\t\t\tcase \"asc\":\r\n\t\t\t\t\t\t\tdir = \"desc\";\r\n\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\t\tcase \"desc\":\r\n\t\t\t\t\t\t\tdir = \"asc\";\r\n\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\t\tdefault:\r\n\t\t\t\t\t\t\tdir = column.modules.sort.startingDir;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\r\n\t\t\t\t\tif (this.table.options.columnHeaderSortMulti && (e.shiftKey || e.ctrlKey)) {\r\n\t\t\t\t\t\tsorters = this.getSort();\r\n\r\n\t\t\t\t\t\tmatch = sorters.findIndex((sorter) => {\r\n\t\t\t\t\t\t\treturn sorter.field === column.getField();\r\n\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\tif(match > -1){\r\n\t\t\t\t\t\t\tsorters[match].dir = dir;\r\n\r\n\t\t\t\t\t\t\tif(match != sorters.length -1){\r\n\t\t\t\t\t\t\t\tmatch = sorters.splice(match, 1)[0];\r\n\t\t\t\t\t\t\t\tif(dir != \"none\"){\r\n\t\t\t\t\t\t\t\t\tsorters.push(match);\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\tif(dir != \"none\"){\r\n\t\t\t\t\t\t\t\tsorters.push({column:column, dir:dir});\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t//add to existing sort\r\n\t\t\t\t\t\tthis.setSort(sorters);\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tif(dir == \"none\"){\r\n\t\t\t\t\t\t\tthis.clear();\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\t//sort by column only\r\n\t\t\t\t\t\t\tthis.setSort(column, dir);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// this.table.rowManager.sorterRefresh(!this.sortList.length);\r\n\t\t\t\t\tthis.refreshSort();\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\trefreshSort(){\r\n\t\tif(this.table.options.sortMode === \"remote\"){\r\n\t\t\tthis.reloadData();\r\n\t\t}else{\r\n\t\t\tthis.refreshData()\r\n\t\t}\r\n\r\n\t\t//TODO - Persist left position of row manager\r\n\t\t// left = this.scrollLeft;\r\n\t\t// this.scrollHorizontal(left);\r\n\t}\r\n\r\n\t//check if the sorters have changed since last use\r\n\thasChanged(){\r\n\t\tvar changed = this.changed;\r\n\t\tthis.changed = false;\r\n\t\treturn changed;\r\n\t}\r\n\r\n\t//return current sorters\r\n\tgetSort(){\r\n\t\tvar self = this,\r\n\t\tsorters = [];\r\n\r\n\t\tself.sortList.forEach(function(item){\r\n\t\t\tif(item.column){\r\n\t\t\t\tsorters.push({column:item.column.getComponent(), field:item.column.getField(), dir:item.dir});\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn sorters;\r\n\t}\r\n\r\n\t//change sort list and trigger sort\r\n\tsetSort(sortList, dir){\r\n\t\tvar self = this,\r\n\t\tnewSortList = [];\r\n\r\n\t\tif(!Array.isArray(sortList)){\r\n\t\t\tsortList = [{column: sortList, dir:dir}];\r\n\t\t}\r\n\r\n\t\tsortList.forEach(function(item){\r\n\t\t\tvar column;\r\n\r\n\t\t\tcolumn = self.table.columnManager.findColumn(item.column);\r\n\r\n\t\t\tif(column){\r\n\t\t\t\titem.column = column;\r\n\t\t\t\tnewSortList.push(item);\r\n\t\t\t\tself.changed = true;\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Sort Warning - Sort field does not exist and is being ignored: \", item.column);\r\n\t\t\t}\r\n\r\n\t\t});\r\n\r\n\t\tself.sortList = newSortList;\r\n\r\n\t\tthis.dispatch(\"sort-changed\");\r\n\t}\r\n\r\n\t//clear sorters\r\n\tclear(){\r\n\t\tthis.setSort([]);\r\n\t}\r\n\r\n\t//find appropriate sorter for column\r\n\tfindSorter(column){\r\n\t\tvar row = this.table.rowManager.activeRows[0],\r\n\t\tsorter = \"string\",\r\n\t\tfield, value;\r\n\r\n\t\tif(row){\r\n\t\t\trow = row.getData();\r\n\t\t\tfield = column.getField();\r\n\r\n\t\t\tif(field){\r\n\r\n\t\t\t\tvalue = column.getFieldValue(row);\r\n\r\n\t\t\t\tswitch(typeof value){\r\n\t\t\t\t\tcase \"undefined\":\r\n\t\t\t\t\tsorter = \"string\";\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase \"boolean\":\r\n\t\t\t\t\tsorter = \"boolean\";\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tdefault:\r\n\t\t\t\t\tif(!isNaN(value) && value !== \"\"){\r\n\t\t\t\t\t\tsorter = \"number\";\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tif(value.match(/((^[0-9]+[a-z]+)|(^[a-z]+[0-9]+))+$/i)){\r\n\t\t\t\t\t\t\tsorter = \"alphanum\";\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn Sort.sorters[sorter];\r\n\t}\r\n\r\n\t//work through sort list sorting data\r\n\tsort(data){\r\n\t\tvar self = this,\r\n\t\tsortList = this.table.options.sortOrderReverse ? self.sortList.slice().reverse() : self.sortList,\r\n\t\tsortListActual = [],\r\n\t\trowComponents = [],\r\n\t\tlastSort;\r\n\r\n\t\tif(this.subscribedExternal(\"dataSorting\")){\r\n\t\t\tthis.dispatchExternal(\"dataSorting\", self.getSort());\r\n\t\t}\r\n\r\n\t\tself.clearColumnHeaders();\r\n\r\n\t\tif(this.table.options.sortMode !== \"remote\"){\r\n\r\n\t\t\t//build list of valid sorters and trigger column specific callbacks before sort begins\r\n\t\t\tsortList.forEach(function(item, i){\r\n\t\t\t\tvar sortObj = item.column.modules.sort;\r\n\r\n\t\t\t\tif(item.column && sortObj){\r\n\r\n\t\t\t\t\t//if no sorter has been defined, take a guess\r\n\t\t\t\t\tif(!sortObj.sorter){\r\n\t\t\t\t\t\tsortObj.sorter = self.findSorter(item.column);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\titem.params = typeof sortObj.params === \"function\" ? sortObj.params(item.column.getComponent(), item.dir) : sortObj.params;\r\n\r\n\t\t\t\t\tsortListActual.push(item);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tself.setColumnHeader(item.column, item.dir);\r\n\t\t\t});\r\n\r\n\t\t\t//sort data\r\n\t\t\tif (sortListActual.length) {\r\n\t\t\t\tself._sortItems(data, sortListActual);\r\n\t\t\t}\r\n\r\n\t\t}else{\r\n\t\t\tsortList.forEach(function(item, i){\r\n\t\t\t\tself.setColumnHeader(item.column, item.dir);\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif(this.subscribedExternal(\"dataSorted\")){\r\n\t\t\tdata.forEach((row) => {\r\n\t\t\t\trowComponents.push(row.getComponent());\r\n\t\t\t});\r\n\r\n\t\t\tthis.dispatchExternal(\"dataSorted\", self.getSort(), rowComponents);\r\n\t\t}\r\n\t}\r\n\r\n\t//clear sort arrows on columns\r\n\tclearColumnHeaders(){\r\n\t\tthis.table.columnManager.getRealColumns().forEach(function(column){\r\n\t\t\tif(column.modules.sort){\r\n\t\t\t\tcolumn.modules.sort.dir = \"none\";\r\n\t\t\t\tcolumn.getElement().setAttribute(\"aria-sort\", \"none\");\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t//set the column header sort direction\r\n\tsetColumnHeader(column, dir){\r\n\t\tcolumn.modules.sort.dir = dir;\r\n\t\tcolumn.getElement().setAttribute(\"aria-sort\", dir);\r\n\t}\r\n\r\n\t//sort each item in sort list\r\n\t_sortItems(data, sortList){\r\n\t\tvar sorterCount = sortList.length - 1;\r\n\r\n\t\tdata.sort((a, b) => {\r\n\t\t\tvar result;\r\n\r\n\t\t\tfor(var i = sorterCount; i>= 0; i--){\r\n\t\t\t\tlet sortItem = sortList[i];\r\n\r\n\t\t\t\tresult = this._sortRow(a, b, sortItem.column, sortItem.dir, sortItem.params);\r\n\r\n\t\t\t\tif(result !== 0){\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn result;\r\n\t\t});\r\n\t}\r\n\r\n\t//process individual rows for a sort function on active data\r\n\t_sortRow(a, b, column, dir, params){\r\n\t\tvar el1Comp, el2Comp, colComp;\r\n\r\n\t\t//switch elements depending on search direction\r\n\t\tvar el1 = dir == \"asc\" ? a : b;\r\n\t\tvar el2 = dir == \"asc\" ? b : a;\r\n\r\n\t\ta = column.getFieldValue(el1.getData());\r\n\t\tb = column.getFieldValue(el2.getData());\r\n\r\n\t\ta = typeof a !== \"undefined\" ? a : \"\";\r\n\t\tb = typeof b !== \"undefined\" ? b : \"\";\r\n\r\n\t\tel1Comp = el1.getComponent();\r\n\t\tel2Comp = el2.getComponent();\r\n\r\n\t\treturn column.modules.sort.sorter.call(this, a, b, el1Comp, el2Comp, column.getComponent(), dir, params);\r\n\t}\r\n}\r\n\r\nSort.moduleName = \"sort\";\r\n\r\n//load defaults\r\nSort.sorters = defaultSorters;\r\n\r\nexport default Sort;","export default {\r\n\t//is integer\r\n\tinteger: function(cell, value, parameters){\r\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\tvalue = Number(value);\r\n\t\treturn typeof value === 'number' && isFinite(value) && Math.floor(value) === value;\r\n\t},\r\n\r\n\t//is float\r\n\tfloat: function(cell, value, parameters){\r\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\tvalue = Number(value);\r\n\t\treturn typeof value === 'number' && isFinite(value) && value % 1 !== 0;\r\n\t},\r\n\r\n\t//must be a number\r\n\tnumeric: function(cell, value, parameters){\r\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn !isNaN(value);\r\n\t},\r\n\r\n\t//must be a string\r\n\tstring: function(cell, value, parameters){\r\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn isNaN(value);\r\n\t},\r\n\r\n\t//maximum value\r\n\tmax: function(cell, value, parameters){\r\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn parseFloat(value) <= parameters;\r\n\t},\r\n\r\n\t//minimum value\r\n\tmin: function(cell, value, parameters){\r\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn parseFloat(value) >= parameters;\r\n\t},\r\n\r\n\t//starts with value\r\n\tstarts: function(cell, value, parameters){\r\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn String(value).toLowerCase().startsWith(String(parameters).toLowerCase());\r\n\t},\r\n\r\n\t//ends with value\r\n\tends: function(cell, value, parameters){\r\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn String(value).toLowerCase().endsWith(String(parameters).toLowerCase());\r\n\t},\r\n\r\n\r\n\t//minimum string length\r\n\tminLength: function(cell, value, parameters){\r\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn String(value).length >= parameters;\r\n\t},\r\n\r\n\t//maximum string length\r\n\tmaxLength: function(cell, value, parameters){\r\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn String(value).length <= parameters;\r\n\t},\r\n\r\n\t//in provided value list\r\n\tin: function(cell, value, parameters){\r\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\tif(typeof parameters == \"string\"){\r\n\t\t\tparameters = parameters.split(\"|\");\r\n\t\t}\r\n\r\n\t\treturn value === \"\" || parameters.indexOf(value) > -1;\r\n\t},\r\n\r\n\t//must match provided regex\r\n\tregex: function(cell, value, parameters){\r\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\tvar reg = new RegExp(parameters);\r\n\r\n\t\treturn reg.test(value);\r\n\t},\r\n\r\n\t//value must be unique in this column\r\n\tunique: function(cell, value, parameters){\r\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\tvar unique = true;\r\n\r\n\t\tvar cellData = cell.getData();\r\n\t\tvar column = cell.getColumn()._getSelf();\r\n\r\n\t\tthis.table.rowManager.rows.forEach(function(row){\r\n\t\t\tvar data = row.getData();\r\n\r\n\t\t\tif(data !== cellData){\r\n\t\t\t\tif(value == column.getFieldValue(data)){\r\n\t\t\t\t\tunique = false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn unique;\r\n\t},\r\n\r\n\t//must have a value\r\n\trequired:function(cell, value, parameters){\r\n\t\treturn value !== \"\" && value !== null && typeof value !== \"undefined\";\r\n\t},\r\n};","import Module from '../../core/Module.js';\r\n\r\nimport defaultValidators from './defaults/validators.js';\r\n\r\nclass Validate extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.invalidCells = [];\r\n\r\n\t\tthis.registerTableOption(\"validationMode\", \"blocking\");\r\n\r\n\t\tthis.registerColumnOption(\"validator\");\r\n\r\n\t\tthis.registerTableFunction(\"getInvalidCells\", this.getInvalidCells.bind(this));\r\n\t\tthis.registerTableFunction(\"clearCellValidation\", this.userClearCellValidation.bind(this));\r\n\t\tthis.registerTableFunction(\"validate\", this.userValidate.bind(this));\r\n\r\n\t\tthis.registerComponentFunction(\"cell\", \"isValid\", this.cellIsValid.bind(this));\r\n\t\tthis.registerComponentFunction(\"cell\", \"clearValidation\", this.clearValidation.bind(this));\r\n\t\tthis.registerComponentFunction(\"cell\", \"validate\", this.cellValidate.bind(this));\r\n\r\n\t\tthis.registerComponentFunction(\"column\", \"validate\", this.columnValidate.bind(this));\r\n\t\tthis.registerComponentFunction(\"row\", \"validate\", this.rowValidate.bind(this));\r\n\t}\r\n\r\n\r\n\tinitialize(){\r\n\t\tthis.subscribe(\"cell-delete\", this.clearValidation.bind(this));\r\n\t\tthis.subscribe(\"column-layout\", this.initializeColumnCheck.bind(this));\r\n\t}\r\n\r\n\t///////////////////////////////////\r\n\t////////// Cell Functions /////////\r\n\t///////////////////////////////////\r\n\r\n\tcellIsValid(cell){\r\n\t\treturn cell.modules.validate ? !cell.modules.validate.invalid : true;\r\n\t}\r\n\r\n\tcellValidate(cell){\r\n\t\treturn this.validate(cell.column.modules.validate, cell, cell.getValue());\r\n\t}\r\n\r\n\t///////////////////////////////////\r\n\t///////// Column Functions ////////\r\n\t///////////////////////////////////\r\n\r\n\tcolumnValidate(column){\r\n\t\tvar invalid = [];\r\n\r\n\t\tcolumn.cells.forEach(function(cell){\r\n\t\t\tif(!this.cellValidate(cell)){\r\n\t\t\t\tinvalid.push(cell.getComponent());\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn invalid.length ? invalid : true;\r\n\t}\r\n\r\n\t///////////////////////////////////\r\n\t////////// Row Functions //////////\r\n\t///////////////////////////////////\r\n\r\n\trowValidate(row){\r\n\t\tvar invalid = [];\r\n\r\n\t\trow.cells.forEach(function(cell){\r\n\t\t\tif(!this.cellValidate(cell)){\r\n\t\t\t\tinvalid.push(cell.getComponent());\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn invalid.length ? invalid : true;\r\n\t}\r\n\r\n\t///////////////////////////////////\r\n\t///////// Table Functions /////////\r\n\t///////////////////////////////////\r\n\r\n\r\n\tuserClearCellValidation(cells){\r\n\t\tif(!cells){\r\n\t\t\tcells = this.getInvalidCells();\r\n\t\t}\r\n\r\n\t\tif(!Array.isArray(cells)){\r\n\t\t\tcells = [cells];\r\n\t\t}\r\n\r\n\t\tcells.forEach((cell) => {\r\n\t\t\tthis.clearValidation(cell._getSelf());\r\n\t\t});\r\n\t}\r\n\r\n\tuserValidate(cells){\r\n\t\tvar output = [];\r\n\r\n\t\t//clear row data\r\n\t\tthis.table.rowManager.rows.forEach(function(row){\r\n\t\t\tvar valid = row.validate();\r\n\r\n\t\t\tif(valid !== true){\r\n\t\t\t\toutput = output.concat(valid);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn output.length ? output : true;\r\n\t}\r\n\r\n\t///////////////////////////////////\r\n\t///////// Internal Logic //////////\r\n\t///////////////////////////////////\r\n\r\n\tinitializeColumnCheck(column){\r\n\t\tif(typeof column.definition.validator !== \"undefined\"){\r\n\t\t\tthis.initializeColumn(column);\r\n\t\t}\r\n\t}\r\n\r\n\t//validate\r\n\tinitializeColumn(column){\r\n\t\tvar self = this,\r\n\t\tconfig = [],\r\n\t\tvalidator;\r\n\r\n\t\tif(column.definition.validator){\r\n\r\n\t\t\tif(Array.isArray(column.definition.validator)){\r\n\t\t\t\tcolumn.definition.validator.forEach(function(item){\r\n\t\t\t\t\tvalidator = self._extractValidator(item);\r\n\r\n\t\t\t\t\tif(validator){\r\n\t\t\t\t\t\tconfig.push(validator);\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t}else{\r\n\t\t\t\tvalidator = this._extractValidator(column.definition.validator);\r\n\r\n\t\t\t\tif(validator){\r\n\t\t\t\t\tconfig.push(validator);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tcolumn.modules.validate = config.length ? config : false;\r\n\t\t}\r\n\t}\r\n\r\n\t_extractValidator(value){\r\n\t\tvar type, params, pos;\r\n\r\n\t\tswitch(typeof value){\r\n\t\t\tcase \"string\":\r\n\t\t\tpos = value.indexOf(':');\r\n\r\n\t\t\tif(pos > -1){\r\n\t\t\t\ttype = value.substring(0,pos);\r\n\t\t\t\tparams = value.substring(pos+1);\r\n\t\t\t}else{\r\n\t\t\t\ttype = value;\r\n\t\t\t}\r\n\r\n\t\t\treturn this._buildValidator(type, params);\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"function\":\r\n\t\t\treturn this._buildValidator(value);\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"object\":\r\n\t\t\treturn this._buildValidator(value.type, value.parameters);\r\n\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\t_buildValidator(type, params){\r\n\r\n\t\tvar func = typeof type == \"function\" ? type : Validate.validators[type];\r\n\r\n\t\tif(!func){\r\n\t\t\tconsole.warn(\"Validator Setup Error - No matching validator found:\", type);\r\n\t\t\treturn false;\r\n\t\t}else{\r\n\t\t\treturn {\r\n\t\t\t\ttype:typeof type == \"function\" ? \"function\" : type,\r\n\t\t\t\tfunc:func,\r\n\t\t\t\tparams:params,\r\n\t\t\t};\r\n\t\t}\r\n\t}\r\n\r\n\tvalidate(validators, cell, value){\r\n\t\tvar self = this,\r\n\t\tvalid = [],\r\n\t\tinvalidIndex = this.invalidCells.indexOf(cell);\r\n\r\n\t\tif(validators){\r\n\t\t\tvalidators.forEach(function(item){\r\n\t\t\t\tif(!item.func.call(self, cell.getComponent(), value, item.params)){\r\n\t\t\t\t\tvalid.push({\r\n\t\t\t\t\t\ttype:item.type,\r\n\t\t\t\t\t\tparameters:item.params\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tvalid = valid.length ? valid : true;\r\n\r\n\t\tif(!cell.modules.validate){\r\n\t\t\tcell.modules.validate = {};\r\n\t\t}\r\n\r\n\t\tif(valid === true){\r\n\t\t\tcell.modules.validate.invalid = false;\r\n\t\t\tcell.getElement().classList.remove(\"tabulator-validation-fail\");\r\n\r\n\t\t\tif(invalidIndex > -1){\r\n\t\t\t\tthis.invalidCells.splice(invalidIndex, 1);\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tcell.modules.validate.invalid = true;\r\n\r\n\t\t\tif(this.table.options.validationMode !== \"manual\"){\r\n\t\t\t\tcell.getElement().classList.add(\"tabulator-validation-fail\");\r\n\t\t\t}\r\n\r\n\t\t\tif(invalidIndex == -1){\r\n\t\t\t\tthis.invalidCells.push(cell);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn valid;\r\n\t}\r\n\r\n\tgetInvalidCells(){\r\n\t\tvar output = [];\r\n\r\n\t\tthis.invalidCells.forEach((cell) => {\r\n\t\t\toutput.push(cell.getComponent());\r\n\t\t});\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tclearValidation(cell){\r\n\t\tvar invalidIndex;\r\n\r\n\t\tif(cell.modules.validate && cell.modules.validate.invalid){\r\n\r\n\t\t\tcell.getElement().classList.remove(\"tabulator-validation-fail\");\r\n\t\t\tcell.modules.validate.invalid = false;\r\n\r\n\t\t\tinvalidIndex = this.invalidCells.indexOf(cell);\r\n\r\n\t\t\tif(invalidIndex > -1){\r\n\t\t\t\tthis.invalidCells.splice(invalidIndex, 1);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n\r\nValidate.moduleName = \"validate\";\r\n\r\n//load defaults\r\nValidate.validators = defaultValidators;\r\n\r\nexport default Validate;","//tabulator with all modules installed\r\nimport {default as Tabulator} from './Tabulator.js';\r\nimport * as modules from '../core/modules/optional.js';\r\nimport ModuleBinder from './tools/ModuleBinder.js';\r\n\r\nclass TabulatorFull extends Tabulator {};\r\n\r\n//bind modules and static functionality\r\nnew ModuleBinder(TabulatorFull, modules);\r\n\r\nexport default TabulatorFull;"],"names":["CoreFeature","table","data","silent","this","dataLoader","load","undefined","modules","localize","getText","arguments","bind","getLocale","comms","getConnections","send","layout","getMode","eventBus","subscribe","unsubscribe","key","subscribed","subscriptionChange","dispatch","chain","confirm","externalEvents","value","options","module","ColumnComponent","column","_column","type","Proxy","get","target","name","receiver","componentFunctionBinder","handle","getElement","getDefinition","getField","cells","forEach","cell","push","getComponent","visible","isGroup","columns","show","hide","output","length","parent","Column","columnManager","scrollToColumn","to","after","toColumn","findColumn","moveColumn","console","warn","nextCol","nextColumn","prevCol","prevColumn","updates","updateDefinition","getWidth","width","result","reinitializeWidth","setWidth","renderer","rerenderColumns","CellComponent","_cell","getValue","getOldValue","initialValue","row","getData","mutate","setValue","setValueActual","checkHeight","Cell","element","oldValue","height","minWidth","component","loaded","build","generateElement","_configureCell","getFieldValue","document","createElement","className","setAttribute","field","style","textAlign","hozAlign","vertAlign","display","alignItems","top","bottom","middle","justifyContent","left","right","center","definition","cssClass","split","classList","add","tooltipGenerationMode","addEventListener","e","_this2","_generateTooltip","val","_this3","innerHTML","Node","firstChild","removeChild","appendChild","tooltip","containerOnly","layoutElement","setValueProcessData","cellRendered","dispatchExternal","subscribedExternal","rowManager","changed","setFieldValue","_generateContents","widthStyled","offsetWidth","minWidthStyled","maxWidth","maxWidthStyled","reinitializeHeight","heightStyled","offsetHeight","redrawBlock","parentNode","deleteCell","calcs","getCellIndex","def","_this","contentElement","titleHolderElement","titleElement","groupElement","createGroupElement","fieldStructure","titleFormatterRendered","mapDefinitions","setField","widthFixed","i","newCol","attachColumn","checkColumnVisibility","registerColumnField","_initialize","bindModuleColumns","el","defaults","columnDefaults","optionsList","generate","defaultOptionList","Object","keys","indexOf","title","nestedFieldSeparator","_getNestedData","_getFlatData","_setNestedData","_setFlatData","registerColumnPosition","reRegisterPosition","headerTooltip","langBind","headerVertical","_bindEvents","_buildColumnHeaderContent","_buildGroupHeader","_buildColumnHeader","setTooltip","_this4","dblTap","tapHold","tap","headerClick","_this5","headerDblClick","headerContext","headerTap","passive","headerDblTap","clearTimeout","setTimeout","headerTapHold","_this6","setMinWidth","parseInt","setMaxWidth","headerHozAlign","_buildColumnHeaderTitle","editableTitle","stopPropagation","focus","_this7","text","_formatColumnHeaderTitle","contents","_this8","dataObj","structure","alignment","parentHeight","getGroupElement","clientHeight","getHeadersElement","minHeight","paddingTop","verticalAlign","clearVerticalAlign","formatter","rowNumColumn","getFirstColumn","getLastColumn","getTopColumn","updateBranches","colDefs","responsiveToggle","_verticalAlignHeaders","matchChildWidths","childWidth","child","index","splice","setWidthActual","isNaN","Math","floor","clientWidth","max","min","rows","heightInitialized","offsetParent","clearCellHeight","calcHeight","setCellHeight","Promise","resolve","reject","_this9","cellCount","deregisterColumn","findColumnIndex","_nextVisibleColumn","getColumnByIndex","_prevVisibleColumn","force","fitToData","clearWidth","_this10","assign","addColumn","then","err","defaultOptions","Helpers","box","getBoundingClientRect","window","pageYOffset","documentElement","clientTop","pageXOffset","clientLeft","obj","clone","Array","isArray","_typeof","Date","deepClone","OptionsList","msgType","registeredDefaults","option","userOptions","debugInvalidOptions","hasOwnProperty","Renderer","elementVertical","elementHorizontal","tableElement","verticalFillMode","callback","update","blockRedraw","dir","includingBuffer","getDisplayRows","rowEl","remove","clearRows","clearColumns","renderRows","renderColumns","rerenderRows","position","ifVisible","rowIndex","offset","scrollToRowIfVisible","elVisible","elOffset","scrollToRowPosition","scrollToRowNearestTop","scrollToRow","scrollHeight","scrollTop","offsetTop","BaiscHorizontal","VirtualDomHorizontal","leftCol","rightCol","scrollLeft","vDomScrollPosLeft","vDomScrollPosRight","vDomPadLeft","vDomPadRight","fitDataColAvg","initialized","compatabilityCheck","ok","find","col","frozen","virtualDomHoz","dataChange","scroll","old","cols","clear","colPos","columnsByIndex","config","leftPos","rightPos","fitDataCheck","vdomHoz","paddingLeft","paddingRight","reinitChanged","renitializeRows","initializeRow","reinitializeRow","change","collsWidth","colEnd","generateCells","layoutRefresh","match","getVisibleRows","diff","addColRight","removeColLeft","addColLeft","removeColRight","start","end","getCell","fitDataColActualWidthCheck","prepend","newWidth","widthDiff","colPositionAdjust","ColumnManager","blockHozScrollEvent","headersElement","columnsByField","initializeRenderer","createHeadersElement","createHeaderElement","insertBefore","scrollHorizontal","renderClass","renderers","RendererVirtualDomHorizontal","RendererBasicHorizontal","renderVertical","initialize","error","headerVisible","hozAdjust","scrollWidth","marginLeft","scrollColumns","sorter","definitions","autoColumnsDefinitions","call","setColumns","_addColumn","_reIndexColumns","redraw","before","nextToColumn","colEl","parentIndex","nextEl","nextSibling","unshift","columnRendered","getHeight","columnHeaderVertAlign","adjustTableSize","subject","_getSelf","HTMLElement","root","matches","findIndex","active","structured","from","moveColumnActual","reinitialize","_moveColumnInArray","getComponents","updateRows","toIndex","fromIndex","concat","adjust","scrollToColumnPosition","scrollToColumnIfVisible","offsetLeft","generateCell","totalWidth","fixedWidth","colWidth","layoutMode","resetScroll","footerManager","RowComponent","_row","transform","getCells","getRowPosition","moveToRow","updateData","normalizeHeight","nextRow","prevRow","Row","manualHeight","outerHeight","created","setData","create","deleteCells","renderRowCells","rowFormatter","rerenderRowCells","children","maxHeight","resizableRows","setHeight","clearHeight","updatedData","newRowData","tempData","attrname","JSON","parse","getColumnsByFieldRoot","findCell","nextDisplayRow","prevDisplayRow","toRow","findRow","moveRowActual","refreshActiveData","deleteActual","getRowIndex","detatchModules","deleteRow","group","BaiscVertical","visibility","onlyGroupHeaders","styleRow","render","rowTop","abs","VirtualDomVertical","vDomRowHeight","vDomTop","vDomBottom","vDomScrollPosTop","vDomScrollPosBottom","vDomTopPad","vDomBottomPad","vDomMaxRenderChain","vDomWindowBuffer","vDomWindowMinTotalRows","vDomWindowMinMarginRows","vDomTopNewRows","vDomBottomNewRows","paddingBottom","_virtualRenderFill","topRow","topOffset","topDiff","bottomDiff","margin","_addTopRow","vDomScrollHeight","_removeBottomRow","_addBottomRow","_removeTopRow","renderVerticalBuffer","topEdge","bottomEdge","topFound","bottomRow","slice","forceMove","holder","topPad","rowsHeight","heightOccupied","topPadHeight","rowsCount","containerHeight","ceil","rowHeight","fillableSpace","addedRows","paddingAdjust","_quickNormalizeRowHeight","removableRows","RowManager","createHolderElement","createTableElement","heightFixer","firstRender","renderMode","fixedHeight","activeRowsPipeline","activeRows","activeRowsCount","displayRows","displayRowsCount","redrawBlockRestoreConfig","redrawBlockRederInPosition","dataPipeline","displayPipeline","leftDir","topDir","scrollRows","renderInPosition","columnsChanged","pagination","_setDataActual","reRenderInPosition","autoColumns","generateColumnsFromRowData","_wipeElements","wipe","allIndex","activeIndex","setActiveRows","displayRowIterator","displayIndex","regenerateRowNumbers","pos","addRowActual","findAddRowPos","reverse","item","addRow","addRowPos","chainResult","moveRowInArray","findRowIndex","rowOnly","getDisplayRowIndex","list","getRows","handler","priority","sort","a","b","skipStage","stage","cascadeOrder","resetDisplayRows","setDisplayRows","renderTable","layoutColumnsOnNewData","viewable","visibleRows","RendererVirtualDomVertical","RendererBasicVertical","_clearTable","renderEmptyScroll","placeholder","initialHeight","otherHeight","external","resize","tableWidth","browser","event","createEvent","initEvent","dispatchEvent","Event","FooterManager","links","initializeElement","footerElement","querySelector","activate","deactivate","link","footerRedraw","InteractionManager","abortClasses","previousTargets","listeners","componentMap","buildListenerMap","bindSubscriptionWatchers","listenerMap","listener","components","values","comp","subscriptionChanged","added","updateEventListeners","track","removeEventListener","targets","findTargets","path","bindComponents","triggerEvents","filter","includes","targetMatches","previousTarget","ComponentFuctionBinder","bindings","funcName","hanlder","DataLoader","loaderElement","createLoaderElement","msgElement","createMsgElement","loadingElement","errorElement","requestOrder","loading","template","dataLoaderLoading","trim","content","dataLoaderError","params","replace","requestNo","showLoader","mapParams","dataSendParams","response","objectInvert","dataReceiveParams","rowData","hideLoader","showError","map","langText","ExternalEventBus","debug","events","subscriptionNotifiers","_debugDispatch","_dispatch","_notifiySubscriptionChange","notifiers","args","shift","callResult","apply","log","InternalEventBus","_debugChain","_chain","_debugConfirm","_confirm","fallback","subscriber","confirmed","TableRegistry","tables","query","results","querySelectorAll","matchElement","Tabulator","lookupTable","Module","_handler","register","func","registerDataPipelineHandler","registerDisplayPipelineHandler","responsiveLayout","modExists","fitData","reinitializeColumnWidths","fitDataFill","fitDataGeneral","fitDataTable","fitDataStretch","colsWidth","gap","lastCol","responsive","fitColumns","flexColWidth","overflowWidth","flexWidth","flexGrowUnits","flexColumns","fixedShrinkColumns","flexShrinkUnits","gapFill","calcWidth","scaleColumns","freeSpace","shrinkCols","oversizeCols","oversizeSpace","remainingSpace","nextColWidth","remainingFlexGrowUnits","changeUnits","undersizeCols","calcGrow","widthGrow","calcShrink","widthShrink","Layout","mode","registerTableOption","registerColumnOption","modes","moduleName","defaultModes","Localize","locale","lang","langList","langs","headerFilterPlaceholder","setHeaderFilterPlaceholder","installLang","setLocale","registerTableFunction","getLang","headerFilters","_setLangProp","desiredLocale","navigator","language","toLowerCase","prefix","traverseLang","trans","prop","_executeBindings","pathArray","_getLangElement","level","rootPath","binding","Comms","receive","selectors","connections","con","action","connection","tableComms","commsReceived","ModuleBinder","tabulator","bindStaticFuctionality","bindModules","coreModules","moduleBindings","extendModule","property","source","prototype","registerModule","mod","registerModuleBinding","findTable","moduleCore","modulesCore","modulesRegular","core","mods","interactionMonitor","browserSlow","browserMobile","rtl","initialzeCoreSystems","_create","_clearObjectPointers","_mapDepricatedFunctionality","debugEventsExternal","debugEventsInternal","InteractionMonitor","getComputedStyle","textDirection","direction","getSelection","empty","removeAllRanges","selection","rtlCheck","_buildElement","_loadInitialData","reactiveData","_detectBrowser","span","deregister","ua","userAgent","vendor","opera","test","substr","restoreRedraw","extensions","input","accept","file","files","reader","FileReader","readAsText","onload","onerror","click","blockActiveLoad","clearData","getDataCount","responses","addRows","newRows","getRowFromPosition","count","successCount","foundRows","doneCheck","fromRow","getDefinitionTree","returncolumn","fromColumn","plugin","required","columnMaxWidth","renderHorizontal","rowFormatterPrint","rowFormatterClipboard","rowFormatterHtmlOutput","Accessor","allowedTypes","initializeColumn","transformRow","accessor","charAt","toUpperCase","lookupAccessor","accessors","rowComponent","traverse","colCompnent","generateParamsList","serializeParams","encoded","encodeURIComponent","join","headers","body","url","stringify","form","FormData","append","Ajax","urlGenerator","loaderPromise","contentTypeFormatters","ajaxRequestFunc","defaultLoaderPromise","ajaxURLGenerator","defaultURLGenerator","ajaxParams","setParams","ajaxConfig","setConfig","ajaxURL","setUrl","getUrl","requestDataCheck","requestData","previousData","sendRequest","_loadDefaultConfig","method","defaultConfig","ajaxRequesting","ajaxResponse","contentType","ajaxContentType","Accept","location","origin","credentials","fetch","json","status","statusText","defaultContentTypeFormatters","Clipboard","pasteParser","pasteAction","customSelection","rowRange","blocked","clipboard","clipboardCopyRowRange","plain","html","preventDefault","clipboardCopyFormatter","generateExportList","clipboardCopyConfig","clipboardCopyStyled","genereateHTMLTable","generatePlainContent","clipboardData","originalEvent","reset","paste","setPasteParser","clipboardPasteParser","setPasteAction","clipboardPasteAction","copy","getKey","range","internal","sel","textRange","createRange","selectNodeContents","toString","addRange","createTextRange","moveToElementText","select","execCommand","pasteActions","parser","pasteParsers","checkPaseOrigin","getPasteData","mutateData","mutator","valid","tagName","edit","currentCell","updateOrAddData","insert","addData","headerFindSuccess","columnMap","CalcComponent","calcParams","precision","reduce","sum","Number","toFixed","parseFloat","String","ColumnCalcs","topCalcs","botCalcs","genColumn","topElement","botElement","botRow","topInitialized","botInitialized","cellValueChanged","initializeColumnCheck","rowsUpdated","recalcActiveRows","tableRedraw","getResults","userRecalc","recalc","groupBy","recalcRowGroup","topCalc","bottomCalc","columnCalcs","topCalcParams","botCalcParams","bottomCalcParams","calculations","initializeTopRow","botCalc","initializeBottomRow","rowsToData","generateRow","frozenColumns","recalcGroup","groupRows","getRowGroup","getChildGroups","generateRowData","dataTree","dataTreeChildColumnCalcs","open","getFilteredTreeChildren","disable","enable","format","getFormatter","paramKey","getGroups","getGroupResults","groupObj","subGroups","getSubGroups","subGroupResults","subgroup","groups","defaultCalculations","DataTree","indent","collapseEl","expandEl","branchEl","elementField","startOpen","registerComponentFunction","collapseRow","expandRow","toggleRow","getTreeParent","getRowChildren","addTreeChildRow","dummyEl","firstCol","getFirstVisibileColumn","dataTreeChildField","dataTreeChildIndent","dataTreeElementColumn","dataTreeBranchElement","dataTreeCollapseElement","tabIndex","dataTreeExpandElement","dataTreeStartExpanded","layoutRow","rowDelete","rowDataChanged","columnMoving","registerDisplayHandler","getTreeChildren","redrawNeeded","refreshData","childArray","controlEl","generateControlElement","cloneNode","marginRight","getPropertyValue","oldControl","replaceChild","getChildren","allChildren","generateChildren","dataTreeFilter","dataTreeSort","sub","childData","childRow","childIndex","findChildIndex","recurse","csv","setFileContents","delimiter","fileContents","depth","bom","pdf","header","autoTableParams","rowGroupStyles","fontStyle","fontSize","cellPadding","fillColor","rowCalcStyles","jsPDFParams","jsPDF","parseRow","styles","colSpan","rowSpan","orientation","unit","doc","autoTable","addPageContent","head","documentProcessing","xlsx","sheetName","workbook","XLSX","utils","book_new","tableFeatures","generateSheet","merges","worksheet","s","c","r","j","sheet_add_aoa","encode_range","SheetNames","Sheets","sheetOnly","sheets","sheet","commsSend","intercept","write","bookType","bookSST","buf","ArrayBuffer","view","Uint8Array","charCodeAt","s2ab","Download","blob","download","downloadToTab","filename","interceptCallback","downloadFunc","downloaders","mime","triggerDownload","downloadConfig","downloadRowRange","groupHeader","groupHeaderDownload","_group","getRowCount","newTab","Blob","downloadReady","URL","createObjectURL","msSaveOrOpenBlob","maskInput","mask","maskLetter","maskLetterChar","maskNumber","maskNumberChar","maskWildcard","maskWildcardChar","fillSymbols","symbol","char","keyCode","maskAutoFill","defaultDownloaders","onRendered","success","cancel","editorParams","cellValue","search","padding","boxSizing","elementAttributes","getAttribute","onChange","preventScroll","textarea","vertNav","verticalNavigation","whiteSpace","getRow","heightNow","selectionStart","stopImmediatePropagation","number","step","blurFunc","self","cellEl","initialDisplayValue","defaultValue","listEl","multiselect","dataItems","currentItem","displayItems","currentItems","blurable","blockListShow","searchWord","searchWordTimeout","getUniqueColumnValues","getColumnByField","getColumn","parseItems","inputValues","curentValues","dataList","displayList","processComplexListItem","label","itemParams","setItem","sortValuesList","listItemFormatter","toggleItem","chooseItem","fillList","setCurrentItem","scrollIntoView","behavior","block","inline","fillInput","unsetItem","hideList","chooseItems","cancelItem","cursor","readOnly","len","unsetItems","character","fromCharCode","startsWith","scrollTovalue","showList","autocomplete","uniqueColumnValues","genUniqueColumnValues","filterList","term","intialLoad","items","searchFunc","addNotice","searchingPlaceholder","fillListIfNotEmpty","showListOnEmpty","notice","searchEl","clearList","itemList","current","emptyPlaceholder","freetext","allowEmpty","showInputValue","star","maxStars","getElementsByTagName","size","stars","starsHolder","createElementNS","starChange","buildStar","starHolder","nextStar","blur","changeValue","overflow","textOverflow","progress","mouseDrag","mouseDragWidth","percent","bar","updateValue","calcVal","round","backgroundColor","screenX","tickCross","tristate","indetermValue","indeterminateValue","indetermState","marginTop","checked","indeterminate","Edit","mouseClick","recursionBlock","invalidEdit","editedCells","editors","getEditedCells","clearCellEdited","navigatePrev","navigateNext","navigateLeft","navigateRight","navigateUp","navigateDown","cellisEdited","clearEdited","editCell","cellCancelEdit","bindEditor","columnDeleteCheck","rowDeleteCheck","cancelEdit","keybindingNavigateNext","newRow","nav","next","edited","nextCell","findNextEditableCell","getIndex","findPrevEditableCell","allowEdit","check","prevCell","editor","editable","validate","clearEditor","variableHeight","cellEditCancelled","contains","button","forceEdit","focusCellNoEvent","getRenderMode","leftEdge","rightEdge","leftMargin","rightMargin","cellEditor","rendered","focusScrollAdjust","cellClick","cellEditing","validationMode","checkForRestyle","editIndex","invalid","defaultEditors","ExportRow","ExportColumn","Export","cloneTableStyle","colVisProp","getHtml","columnHeaders","headersToExportRows","generateColumnGroupHeaders","bodyToExportRows","rowLookup","genereateTableElement","selectRow","selectedRows","columnGroups","colData","processColumnGroup","maxDepth","groupData","subGroup","subGroupData","columnVisCheck","headerDepth","exportRows","parseColumnGroup","rowGroups","exportCols","headerEl","bodyEl","lookupTableStyles","setup","treeElementField","mapElementStyles","genereateHeaderElement","genereateGroupElement","genereateCalcElement","genereateRowElement","evenRow","oddRow","calcRow","firstRow","firstGroup","getElementsByClassName","styleCells","firstCell","lastCell","classNames","generator","isVisible","cellWrapper","formatCells","formatExportValue","align","renderedCallback","htmlOutputConfig","props","lookup","fromStyle","filterVal","rowVal","filterParams","RegExp","keywords","separator","keyword","matchAll","endsWith","Filter","headerFilterColumns","prevHeaderFilterChangeCheck","searchRows","searchData","userSetFilter","userRefreshFilter","userAddFilter","getFilters","userSetHeaderFilterFocus","userGetHeaderFilterValue","userSetHeaderFilterValue","getHeaderFilters","userRemoveFilter","userClearFilter","userClearHeaderFilter","setHeaderFilterFocus","reloadHeaderFilter","getHeaderFilterValue","setHeaderFilterValue","initializeColumnHeaderFilter","hideHeaderFilterElements","showHeaderFilterElements","tableBuilt","filterMode","remoteFilterParams","registerDataHandler","initialFilter","setFilter","initialHeaderFilter","refreshFilter","addFilter","removeFilter","all","clearFilter","clearHeaderFilter","headerFilter","setHeaderFilterColumnPlaceholder","filterFunc","filterType","tagType","attrType","filterChangeCheck","prevSuccess","emptyFunc","headerFilterFunc","filters","headerFilterFuncParams","fieldVal","colVal","trackChanges","generateHeaderFilterElement","filterElement","editorElement","typingTimer","searchTrigger","headerElement","headerFilterEmptyCheck","headerFilterParams","headerFilterLiveFilterDelay","hasAttribute","headerFilterLiveFilter","reloadData","findFilter","findSubFilters","ajax","filtersToArray","searchType","filterRecurse","rowList","activeRowComponents","filterRow","_this11","subFilter","_this12","defaultFilters","plaintext","formatterParams","emptyToSpace","sanitizeHTML","money","integer","decimal","rgx","floatVal","decimalSym","thousandSym","thousand","symbolAfter","urlPrefix","labelField","urlField","image","src","urlSuffix","truthy","allowTruthy","tick","tickElement","cross","crossElement","datetime","inputFormat","outputFormat","invalidPlaceholder","newDatetime","moment","isValid","timezone","tz","datetimediff","suffix","humanize","date","duration","traffic","percentValue","colors","color","legend","legendColor","legendAlign","barEl","legendEl","holderEl","buttonTick","buttonCross","rownum","responsiveCollapse","toggleList","isOpen","rowSelection","checkbox","toggleSelect","isSelected","registerRowSelectCheckbox","deselectRow","registerHeaderSelectCheckbox","Format","formatValue","formatHeader","lookupFormatter","formatterPrint","print","formatterClipboard","formatterHtmlOutput","htmlOutput","formatters","mockCell","titleFormatter","titleFormatterParams","entityMap","defaultFormatters","FrozenColumns","leftColumns","rightColumns","rightPadding","initializationMode","scrollEndTimer","layoutCell","edge","frozenCheck","calcMargins","layoutColumnPosition","layoutCalcRows","_calcSpace","allCells","leftParents","parentEl","getColGroupParentElement","FrozenRows","freezeRow","unfreezeRow","isRowFrozen","detachRow","styleRows","GroupComponent","toggleVisibility","groupManager","Group","oldGroup","hasSubGroups","groupIDLookups","_addRowToGroup","_addRow","groupList","elementContents","arrowElement","createElements","addBindings","createValueGroups","arrow","movableRows","moveRow","initializeGroupHeader","allowedValues","_createGroup","groupContextMenu","groupClickMenu","menu","initializeGroup","groupTap","groupDblTap","groupTapHold","groupToggleElement","groupID","groupKey","headerGenerator","conformRowData","generateGroupHeaderContents","updateGroupRows","scrollHeader","groupValues","removeGroup","noCalc","_visSet","getHeadersAndRows","hasTopCalcs","detachElement","generateTopRow","hasBottomCalcs","generateBottomRow","groupClosedShowCalcs","getDisplayIndex","checkClassicModeGroupHeaderWidth","prev","compoment","getPath","addBindingsd","childNodes","GroupRows","setGroupBy","setGroupValues","setGroupStartOpen","setGroupHeader","userGetGroups","userGetGroupedData","rowGetGroup","groupStartOpen","langValue","removeCalcs","getRealColumns","lookupFunc","groupUpdateOnCellEdit","cellUpdated","reassignRowToGroup","rowDeleting","scrollHeaders","rowMoving","rowAddingIndex","rowSample","prevValue","assignRowToGroup","getGroupedData","toGroup","fromGroup","removeRow","insertRow","generateGroups","groupComponents","groupListData","pullGroupListData","rowCount","headerContent","oldGroups","createGroup","assignRowToExistingGroup","newGroupNeeded","oldRowGroup","oldGroupPath","newGroupPath","getExpectedPath","every","groupPath","groupId","setDisplayIndex","History","history","clearComponentHistory","rowDeleted","rowMoved","undo","redo","getHistoryUndoSize","getHistoryRedoSize","posFrom","posTo","getGroup","newValue","undoers","redoers","oldRow","cellEdit","rowAdd","_rebindRow","rowMove","HtmlTableImport","fieldIndex","hasIndex","tableElementCheck","parseTable","_extractOptions","_extractHeaders","_generateBlankHeaders","newElement","attributes","optionsArr","attrib","_attribValue","exists","_findCol","textContent","Interaction","eventMap","rowClick","rowDblClick","rowContext","rowMouseEnter","rowMouseLeave","rowMouseOver","rowMouseOut","rowMouseMove","rowTap","rowDblTap","rowTapHold","cellDblClick","cellContext","cellMouseEnter","cellMouseLeave","cellMouseOver","cellMouseOut","cellMouseMove","cellTap","cellDblTap","cellTapHold","headerMouseEnter","headerMouseLeave","headerMouseOver","headerMouseOut","headerMouseMove","groupClick","groupDblClick","groupContext","groupMouseEnter","groupMouseLeave","groupMouseOver","groupMouseOut","groupMouseMove","subscribers","touchSubscribers","columnSubscribers","touchWatchers","tapDbl","initializeExternalEvents","cellContentsSelectionFixer","selectNode","subscriptionChangeExternal","subscribeTouchEvents","unsubscribeTouchEvents","handleTouch","notouch","watchers","componentObj","Keybindings","watchKeys","pressedKeys","keyupBinding","keydownBinding","keybindings","mergedBindings","mapBindings","bindEvents","clearBindings","actions","mapBinding","symbolsList","ctrl","meta","code","checkBinding","ctrlKey","shiftKey","metaKey","navPrev","navNext","navUp","navDown","scrollPageUp","scrollPageDown","scrollToStart","scrollToEnd","copyToClipboard","keyBlock","newPos","scrollMax","navLeft","navRight","Menu","menuElements","blurEvent","hideMenu","escEvent","escMenu","nestedMenuBlock","positionReversedX","contextMenu","clickMenu","initializeCell","headerContextMenu","headerClickMenu","headerMenu","initializeColumnHeader","headerMenuEl","LoadMenuEvent","loadMenu","rowContextMenu","rowClickMenu","touch","MouseEvent","menuEl","itemEl","disabled","hideOldSubMenus","positionMenu","pop","x","y","parentOffset","docHeight","innerHeight","touches","pageX","pageY","MoveColumns","placeholderElement","createPlaceholderElement","hoverElement","checkTimeout","checkPeriod","moving","toCol","toColAfter","startX","autoScrollMargin","autoScrollStep","autoScrollTimeout","touchMove","moveHover","endMove","mousemove","which","startMove","bindTouchEvents","prevColWidth","nextColWidthLast","prevColWidthLast","startXMove","moveToCol","_bindMouseMove","movingCells","_unbindMouseMove","scrollPos","columnHolder","xPos","MoveRows","toRowAfter","hasHandle","startY","tableRowDropEvent","connectionSelectorsTables","connectionSelectorsElements","connectionElements","connectedTable","connectedRow","movableRowsConnectedTables","movableRowsConnectedElements","mouseup","tableRowDrop","previousSibling","rowHandle","nextRowHeight","prevRowHeight","nextRowHeightLast","prevRowHeightLast","startYMove","setStartPosition","connectToTables","pointerEvents","getTableElement","disconnectFromTables","moveHoverConnections","moveHoverTable","rowHolder","yPos","movableRowsElementDrop","connectionTables","commsConnections","dropEvent","elementRowDrop","tabulatorElementDropEvent","sender","movableRowsSender","senders","movableRowsReceiver","receivers","connect","disconnect","dropComplete","fromTable","toTable","Mutator","enabled","transformCell","lookupMutator","mutators","mutatorEdit","Page","progressiveLoad","page","initialLoad","dataChanging","pageSizes","dataReceivedNames","dataSentNames","setMaxPage","setPage","userSetPageToRow","userSetPageSize","getPageSize","previousPage","nextPage","getPage","getPageMax","setPageToRow","rowAddingPosition","initialLoadComplete","calculatePageSizes","paginationMode","remotePageParams","_parseRemoteData","restOnRenderBefore","initializePaginator","initializeProgressive","scrollVertical","dispRows","testElRow","testElCell","paginationSize","setPageSize","progressiveLoadScrollMargin","pagesElement","firstBut","prevBut","nextBut","lastBut","paginationSizeSelector","pageSizeSelect","hidden","pageSelectLabel","paginationElement","paginationInitialPage","paginationButtonCount","generatePageSizeSelectList","trigger","leftSize","rightSize","_generatePageButton","setMaxRows","_setPageButtons","last_page","progressiveLoadDelay","footer","local","id","localStorage","getItem","cookie","cookiePos","expireDate","setDate","getDate","toUTCString","Persistence","defWatcherBlock","readFunc","writeFunc","testKey","removeItem","persistence","retreivedData","persistenceMode","persistenceID","localStorageTest","persistenceReaderFunc","readers","persistenceWriterFunc","writers","retreiveData","save","eventSave","getColumnLayout","setColumnLayout","sorters","initialSort","parseColumns","getColumns","mergeDefinition","getOwnPropertyDescriptor","defineProperty","set","oldCols","newCols","_findColumn","validateSorters","getSort","getGroupConfig","getPageConfig","excludedKeys","defStore","colDef","defaultReaders","defaultWriters","Print","manualBlock","printAsHtml","replaceTable","cleanup","printFullscreen","genereateTable","printConfig","printStyled","printRowRange","footerContent","scrollX","scrollY","footerEl","tableEl","printHeader","printFooter","printFormatter","scrollTo","ReactiveData","origFuncs","currentVersion","unblock","watchRow","watchData","unwatchData","version","enumerable","configurable","arg","getRowFromDataObject","startRow","oldRows","writable","watchKey","watchTreeChildren","childField","rebuildTree","ResizeColumns","startColumn","startWidth","prevHandle","layoutCellHandles","layoutColumnHeader","resizable","handleDown","nearestColumn","_checkResizability","_mouseDown","prevHandleDown","colIndex","mouseMove","checkCellHeights","mouseUp","ResizeRows","startHeight","screenY","ResizeTable","observer","containerObserver","tableHeight","containerWidth","autoResize","tableStyle","ResizeObserver","entry","nodeHeight","contentRect","nodeWidth","observe","tableResized","unobserve","ResponsiveLayout","hiddenColumns","collapseFormatter","collapseStartOpen","collapseHandleColumn","updateColumnVisibility","initializeResponsivity","responsiveLayoutCollapseFormatter","formatCollapsedData","responsiveLayoutCollapseStartOpen","order","generateCollapsedContent","generateCollapsedRowContent","colCount","working","getFlexBaseWidth","hideColumn","showColumn","generateCollapsedRowData","mockCellComponent","responsiveLayoutCollapseUseFormatters","node_content","titleData","valueData","titleHighlight","innerText","SelectRow","selecting","lastClickedRow","selectPrev","headerCheckboxElement","selectRows","deselectRows","getSelectedRows","getSelectedData","isRowSelected","selectable","clearSelectionData","selectablePersistence","_deselectRow","_rowSelectionChanged","endSelect","selected","selectableCheck","selectableRangeMode","_clearSelection","lastClickedRowIdx","rowIdx","fromRowIdx","toRowIdx","toggledRows","toggledRow","getCurrentCell","_selectRow","rowMatch","rowInfo","selectableRollingSelection","checkboxEl","dataTreeSelectPropagate","childRowSelection","selectedRow","aRow","bRow","alignEmptyValues","emptyAlign","decimalSeparator","thousandSeparator","string","langLocale","localeCompare","time","array","calc","d","alphanum","as","bs","a1","b1","L","rx","rd","isFinite","Sort","sortList","userSetSort","clearSort","sortMode","remoteSortParams","setSort","refreshSort","arrowEl","sorterParams","startingDir","headerSortStartingDir","headerSortTristate","headerSort","headerSortElement","columnHeaderSortMulti","newSortList","sortOrderReverse","sortListActual","rowComponents","clearColumnHeaders","sortObj","findSorter","setColumnHeader","_sortItems","sorterCount","sortItem","_sortRow","el1Comp","el2Comp","el1","el2","defaultSorters","parameters","numeric","starts","ends","minLength","maxLength","regex","unique","cellData","Validate","invalidCells","getInvalidCells","userClearCellValidation","userValidate","cellIsValid","clearValidation","cellValidate","columnValidate","rowValidate","validator","_extractValidator","substring","_buildValidator","validators","invalidIndex","defaultValidators","TabulatorFull"],"mappings":"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"} \ No newline at end of file diff --git a/dist/js/tabulator_esm.js b/dist/js/tabulator_esm.js index bf0c450fb..081aecabd 100644 --- a/dist/js/tabulator_esm.js +++ b/dist/js/tabulator_esm.js @@ -1,4 +1,4 @@ -/* Tabulator v4.9.3 (c) Oliver Folkerd 2021 */ +/* Tabulator v5.0.0-alpha.0 (c) Oliver Folkerd 2021 */ class CoreFeature{ constructor(table){ diff --git a/dist/js/tabulator_esm.min.js b/dist/js/tabulator_esm.min.js index 1ffe7bf3d..705a5d7d9 100644 --- a/dist/js/tabulator_esm.min.js +++ b/dist/js/tabulator_esm.min.js @@ -1,3 +1,3 @@ -/* Tabulator v4.9.3 (c) Oliver Folkerd 2021 */ -class t{constructor(e,t){this.table=e}register(){}}class o{static elVisible(e){return!(e.offsetWidth<=0&&e.offsetHeight<=0)}static elOffset(e){var t=e.getBoundingClientRect();return{top:t.top+window.pageYOffset-document.documentElement.clientTop,left:t.left+window.pageXOffset-document.documentElement.clientLeft}}static deepClone(e){var t=Object.assign(Array.isArray(e)?[]:{},e);for(var i in e)null!=e[i]&&"object"==typeof e[i]&&(e[i]instanceof Date?t[i]=new Date(e[i]):t[i]=this.deepClone(e[i]));return t}}class s extends t{constructor(e){super(e),this.allowedTypes=["","data","download","clipboard","print","htmlOutput"]}initializeColumn(e){var t=!1,i={};this.allowedTypes.forEach((function(o){var s,a="accessor"+(o.charAt(0).toUpperCase()+o.slice(1));e.definition[a]&&(s=this.lookupAccessor(e.definition[a]))&&(t=!0,i[a]={accessor:s,params:e.definition[a+"Params"]||{}})})),t&&(e.modules.accessor=i)}lookupAccessor(e){var t=!1;switch(typeof e){case"string":s.accessors[e]?t=s.accessors[e]:console.warn("Accessor Error - No such accessor found, ignoring: ",e);break;case"function":t=e}return t}transformRow(e,t){var i="accessor"+(t.charAt(0).toUpperCase()+t.slice(1)),s=e.getComponent(),a=o.deepClone(e.data||{});return this.table.columnManager.traverse((function(e){var o,l,n,r;e.modules.accessor&&(l=e.modules.accessor[i]||e.modules.accessor.accessor||!1)&&"undefined"!=(o=e.getFieldValue(a))&&(r=e.getComponent(),n="function"==typeof l.params?l.params(o,a,t,r,s):l.params,e.setFieldValue(a,l.accessor(o,a,t,n,r,s)))})),a}}s.moduleName="accessor",s.accessors={};var a={json:{headers:{"Content-Type":"application/json"},body:function(e,t,i){return JSON.stringify(i)}},form:{headers:{},body:function(e,t,i){var o=this.generateParamsList(i),s=new FormData;return o.forEach((function(e){s.append(e.key,e.value)})),s}}};class l extends t{constructor(e){super(e),this.config=!1,this.url="",this.urlGenerator=!1,this.params=!1,this.loaderElement=this.createLoaderElement(),this.msgElement=this.createMsgElement(),this.loadingElement=!1,this.errorElement=!1,this.loaderPromise=!1,this.progressiveLoad=!1,this.loading=!1,this.requestOrder=0}initialize(){var e;this.loaderElement.appendChild(this.msgElement),this.table.options.ajaxLoaderLoading&&("string"==typeof this.table.options.ajaxLoaderLoading?((e=document.createElement("template")).innerHTML=this.table.options.ajaxLoaderLoading.trim(),this.loadingElement=e.content.firstChild):this.loadingElement=this.table.options.ajaxLoaderLoading),this.loaderPromise=this.table.options.ajaxRequestFunc||l.defaultLoaderPromise,this.urlGenerator=this.table.options.ajaxURLGenerator||l.defaultURLGenerator,this.table.options.ajaxLoaderError&&("string"==typeof this.table.options.ajaxLoaderError?((e=document.createElement("template")).innerHTML=this.table.options.ajaxLoaderError.trim(),this.errorElement=e.content.firstChild):this.errorElement=this.table.options.ajaxLoaderError),this.table.options.ajaxParams&&this.setParams(this.table.options.ajaxParams),this.table.options.ajaxConfig&&this.setConfig(this.table.options.ajaxConfig),this.table.options.ajaxURL&&this.setUrl(this.table.options.ajaxURL),this.table.options.ajaxProgressiveLoad&&(this.table.options.pagination?(this.progressiveLoad=!1,console.error("Progressive Load Error - Pagination and progressive load cannot be used at the same time")):this.table.modExists("page")?(this.progressiveLoad=this.table.options.ajaxProgressiveLoad,this.table.modules.page.initializeProgressive(this.progressiveLoad)):console.error("Pagination plugin is required for progressive ajax loading"))}createLoaderElement(){var e=document.createElement("div");return e.classList.add("tabulator-loader"),e}createMsgElement(){var e=document.createElement("div");return e.classList.add("tabulator-loader-msg"),e.setAttribute("role","alert"),e}setParams(e,t){if(t){this.params=this.params||{};for(let t in e)this.params[t]=e[t]}else this.params=e}getParams(){return this.params||{}}setConfig(e){if(this._loadDefaultConfig(),"string"==typeof e)this.config.method=e;else for(let t in e)this.config[t]=e[t]}_loadDefaultConfig(e){if(!this.config||e){this.config={};for(let e in l.defaultConfig)this.config[e]=l.defaultConfig[e]}}setUrl(e){this.url=e}getUrl(){return this.url}loadData(e,t){return this.progressiveLoad?this._loadDataProgressive():this._loadDataStandard(e,t)}nextPage(e){this.loading||e<(this.table.options.ajaxProgressiveLoadScrollMargin||2*this.table.rowManager.getElement().clientHeight)&&this.table.modules.page.nextPage().then((()=>{})).catch((()=>{}))}blockActiveRequest(){this.requestOrder++}_loadDataProgressive(){return this.table.rowManager.setData([]),this.table.modules.page.setPage(1)}_loadDataStandard(e,t){return new Promise(((i,o)=>{this.sendRequest(e).then((s=>{this.table.rowManager.setData(s,e,t).then((()=>{i()})).catch((e=>{o(e)}))})).catch((e=>{o(e)}))}))}generateParamsList(e,t){var i=[];if(t=t||"",Array.isArray(e))e.forEach(((e,o)=>{i=i.concat(this.generateParamsList(e,t?t+"["+o+"]":o))}));else if("object"==typeof e)for(var o in e)i=i.concat(this.generateParamsList(e[o],t?t+"["+o+"]":o));else i.push({key:t,value:e});return i}serializeParams(e){var t=this.generateParamsList(e),i=[];return t.forEach((function(e){i.push(encodeURIComponent(e.key)+"="+encodeURIComponent(e.value))})),i.join("&")}sendRequest(e){var t,i=this.url;return this.requestOrder++,t=this.requestOrder,this._loadDefaultConfig(),new Promise(((o,s)=>{!1!==this.table.options.ajaxRequesting.call(this.table,this.url,this.params)?(this.loading=!0,e||this.showLoader(),this.loaderPromise(i,this.config,this.params).then((e=>{t===this.requestOrder?(this.table.options.ajaxResponse&&(e=this.table.options.ajaxResponse.call(this.table,this.url,this.params,e)),o(e),this.hideLoader(),this.loading=!1):console.warn("Ajax Response Blocked - An active ajax request was blocked by an attempt to change table data while the request was being made")})).catch((e=>{console.error("Ajax Load Error: ",e),this.table.options.ajaxError.call(this.table,e),this.showError(),setTimeout((()=>{this.hideLoader()}),3e3),this.loading=!1,s(e)}))):s()}))}showLoader(){if("function"==typeof this.table.options.ajaxLoader?this.table.options.ajaxLoader():this.table.options.ajaxLoader){for(this.hideLoader();this.msgElement.firstChild;)this.msgElement.removeChild(this.msgElement.firstChild);this.msgElement.classList.remove("tabulator-error"),this.msgElement.classList.add("tabulator-loading"),this.loadingElement?this.msgElement.appendChild(this.loadingElement):this.msgElement.innerHTML=this.table.modules.localize.getText("ajax|loading"),this.table.element.appendChild(this.loaderElement)}}showError(){for(this.hideLoader();this.msgElement.firstChild;)this.msgElement.removeChild(this.msgElement.firstChild);this.msgElement.classList.remove("tabulator-loading"),this.msgElement.classList.add("tabulator-error"),this.errorElement?this.msgElement.appendChild(this.errorElement):this.msgElement.innerHTML=this.table.modules.localize.getText("ajax|error"),this.table.element.appendChild(this.loaderElement)}hideLoader(){this.loaderElement.parentNode&&this.loaderElement.parentNode.removeChild(this.loaderElement)}}l.moduleName="ajax",l.defaultConfig={method:"GET"},l.defaultURLGenerator=function(e,t,i){return e&&i&&Object.keys(i).length&&(t.method&&"get"!=t.method.toLowerCase()||(t.method="get",e+=(e.includes("?")?"&":"?")+this.modules.ajax.serializeParams(i))),e},l.defaultLoaderPromise=function(e,t,i){var o;return new Promise(((s,a)=>{if(e=this.urlGenerator.call(this.table,e,t,i),"GET"!=t.method.toUpperCase())if(o="object"==typeof this.table.options.ajaxContentType?this.table.options.ajaxContentType:this.contentTypeFormatters[this.table.options.ajaxContentType]){for(var l in o.headers)t.headers||(t.headers={}),void 0===t.headers[l]&&(t.headers[l]=o.headers[l]);t.body=o.body.call(this,e,t,i)}else console.warn("Ajax Error - Invalid ajaxContentType value:",this.table.options.ajaxContentType);e?(void 0===t.headers&&(t.headers={}),void 0===t.headers.Accept&&(t.headers.Accept="application/json"),void 0===t.headers["X-Requested-With"]&&(t.headers["X-Requested-With"]="XMLHttpRequest"),void 0===t.mode&&(t.mode="cors"),"cors"==t.mode?(void 0===t.headers["Access-Control-Allow-Origin"]&&(t.headers["Access-Control-Allow-Origin"]=window.location.origin),void 0===t.credentials&&(t.credentials="same-origin")):void 0===t.credentials&&(t.credentials="include"),fetch(e,t).then((e=>{e.ok?e.json().then((e=>{s(e)})).catch((e=>{a(e),console.warn("Ajax Load Error - Invalid JSON returned",e)})):(console.error("Ajax Load Error - Connection Error: "+e.status,e.statusText),a(e))})).catch((e=>{console.error("Ajax Load Error - Connection Error: ",e),a(e)}))):(console.warn("Ajax Load Error - No URL Set"),s([]))}))},l.contentTypeFormatters=a;class n extends t{constructor(e){super(e),this.mode=!0,this.pasteParser=function(){},this.pasteAction=function(){},this.customSelection=!1,this.rowRange=!1,this.blocked=!0}initialize(){this.mode=this.table.options.clipboard,this.rowRange=this.table.options.clipboardCopyRowRange,!0!==this.mode&&"copy"!==this.mode||this.table.element.addEventListener("copy",(e=>{var t,i;if(!this.blocked){if(e.preventDefault(),this.customSelection)t=this.customSelection,this.table.options.clipboardCopyFormatter&&(t=this.table.options.clipboardCopyFormatter("plain",t));else{var o=this.table.modules.export.generateExportList(this.table.options.clipboardCopyConfig,this.table.options.clipboardCopyStyled,this.rowRange,"clipboard");t=(i=this.table.modules.export.genereateHTMLTable(o))?this.generatePlainContent(o):"",this.table.options.clipboardCopyFormatter&&(t=this.table.options.clipboardCopyFormatter("plain",t),i=this.table.options.clipboardCopyFormatter("html",i))}window.clipboardData&&window.clipboardData.setData?window.clipboardData.setData("Text",t):e.clipboardData&&e.clipboardData.setData?(e.clipboardData.setData("text/plain",t),i&&e.clipboardData.setData("text/html",i)):e.originalEvent&&e.originalEvent.clipboardData.setData&&(e.originalEvent.clipboardData.setData("text/plain",t),i&&e.originalEvent.clipboardData.setData("text/html",i)),this.table.options.clipboardCopied.call(this.table,t,i),this.reset()}})),!0!==this.mode&&"paste"!==this.mode||this.table.element.addEventListener("paste",(e=>{this.paste(e)})),this.setPasteParser(this.table.options.clipboardPasteParser),this.setPasteAction(this.table.options.clipboardPasteAction)}reset(){this.blocked=!0,this.customSelection=!1}generatePlainContent(e){var t=[];return e.forEach((e=>{var i=[];e.columns.forEach((t=>{var o="";if(t)if("group"===e.type&&(t.value=t.component.getKey()),null===t.value)o="";else switch(typeof t.value){case"object":o=JSON.stringify(t.value);break;case"undefined":o="";break;default:o=t.value}i.push(o)})),t.push(i.join("\t"))})),t.join("\n")}copy(e,t){var i,o;this.blocked=!1,this.customSelection=!1,!0!==this.mode&&"copy"!==this.mode||(this.rowRange=e||this.table.options.clipboardCopyRowRange,void 0!==window.getSelection&&void 0!==document.createRange?((e=document.createRange()).selectNodeContents(this.table.element),(i=window.getSelection()).toString()&&t&&(this.customSelection=i.toString()),i.removeAllRanges(),i.addRange(e)):void 0!==document.selection&&void 0!==document.body.createTextRange&&((o=document.body.createTextRange()).moveToElementText(this.table.element),o.select()),document.execCommand("copy"),i&&i.removeAllRanges())}setPasteAction(e){switch(typeof e){case"string":this.pasteAction=n.pasteActions[e],this.pasteAction||console.warn("Clipboard Error - No such paste action found:",e);break;case"function":this.pasteAction=e}}setPasteParser(e){switch(typeof e){case"string":this.pasteParser=n.pasteParsers[e],this.pasteParser||console.warn("Clipboard Error - No such paste parser found:",e);break;case"function":this.pasteParser=e}}paste(e){var t,i,o;this.checkPaseOrigin(e)&&(t=this.getPasteData(e),(i=this.pasteParser.call(this,t))?(e.preventDefault(),this.table.modExists("mutator")&&(i=this.mutateData(i)),o=this.pasteAction.call(this,i),this.table.options.clipboardPasted.call(this.table,t,i,o)):this.table.options.clipboardPasteError.call(this.table,t))}mutateData(e){var t=[];return Array.isArray(e)?e.forEach((e=>{t.push(this.table.modules.mutator.transformRow(e,"clipboard"))})):t=e,t}checkPaseOrigin(e){var t=!0;return("DIV"!=e.target.tagName||this.table.modules.edit.currentCell)&&(t=!1),t}getPasteData(e){var t;return window.clipboardData&&window.clipboardData.getData?t=window.clipboardData.getData("Text"):e.clipboardData&&e.clipboardData.getData?t=e.clipboardData.getData("text/plain"):e.originalEvent&&e.originalEvent.clipboardData.getData&&(t=e.originalEvent.clipboardData.getData("text/plain")),t}}n.moduleName="clipboard",n.pasteActions={replace:function(e){return this.table.setData(e)},update:function(e){return this.table.updateOrAddData(e)},insert:function(e){return this.table.addData(e)}},n.pasteParsers={table:function(e){var t=[],i=!0,o=this.table.columnManager.columns,s=[],a=[];return(e=e.split("\n")).forEach((function(e){t.push(e.split("\t"))})),!(!t.length||1===t.length&&t[0].length<2)&&(t[0].forEach((function(e){var t=o.find((function(t){return e&&t.definition.title&&e.trim()&&t.definition.title.trim()===e.trim()}));t?s.push(t):i=!1})),i||(i=!0,s=[],t[0].forEach((function(e){var t=o.find((function(t){return e&&t.field&&e.trim()&&t.field.trim()===e.trim()}));t?s.push(t):i=!1})),i||(s=this.table.columnManager.columnsByIndex)),i&&t.shift(),t.forEach((function(e){var t={};e.forEach((function(e,i){s[i]&&(t[s[i].field]=e)})),a.push(t)})),a)}};class r{constructor(e){this._row=e}getData(e){return this._row.getData(e)}getElement(){return this._row.getElement()}getTable(){return this._row.table}getCells(){var e=[];return this._row.getCells().forEach((function(t){e.push(t.getComponent())})),e}getCell(e){var t=this._row.getCell(e);return!!t&&t.getComponent()}_getSelf(){return this._row}}class h{constructor(e){this._cell=e}getValue(){return this._cell.getValue()}getOldValue(){return this._cell.getOldValue()}getInitialValue(){return this._cell.initialValue}getElement(){return this._cell.getElement()}getRow(){return this._cell.row.getComponent()}getData(){return this._cell.row.getData()}getField(){return this._cell.column.getField()}getColumn(){return this._cell.column.getComponent()}setValue(e,t){void 0===t&&(t=!0),this._cell.setValue(e,t)}restoreOldValue(){this._cell.setValueActual(this._cell.getOldValue())}restoreInitialValue(){this._cell.setValueActual(this._cell.initialValue)}edit(e){return this._cell.edit(e)}cancelEdit(){this._cell.cancelEdit()}isEdited(){return!!this._cell.modules.edit&&this._cell.modules.edit.edited}clearEdited(){this._cell.table.modExists("edit",!0)&&this._cell.table.modules.edit.clearEdited(this._cell)}isValid(){return!this._cell.modules.validate||!this._cell.modules.validate.invalid}validate(){return this._cell.validate()}clearValidation(){this._cell.table.modExists("validate",!0)&&this._cell.table.modules.validate.clearValidation(this._cell)}nav(){return this._cell.nav()}checkHeight(){this._cell.checkHeight()}getTable(){return this._cell.table}_getSelf(){return this._cell}}class d{constructor(e,t){this.table=e.table,this.column=e,this.row=t,this.element=null,this.value=null,this.initialValue,this.oldValue=null,this.modules={},this.height=null,this.width=null,this.minWidth=null,this.component=null,this.loaded=!1,this.build()}build(){this.generateElement(),this.setWidth(),this._configureCell(),this.setValueActual(this.column.getFieldValue(this.row.data)),this.initialValue=this.value}generateElement(){this.element=document.createElement("div"),this.element.className="tabulator-cell",this.element.setAttribute("role","gridcell"),this.element=this.element}_configureCell(){var e=this.column.cellEvents,t=this.element,i=this.column.getField();(t.style.textAlign=this.column.hozAlign,this.column.vertAlign&&(t.style.display="inline-flex",t.style.alignItems={top:"flex-start",bottom:"flex-end",middle:"center"}[this.column.vertAlign]||"",this.column.hozAlign&&(t.style.justifyContent={left:"flex-start",right:"flex-end",center:"center"}[this.column.hozAlign]||"")),i&&t.setAttribute("tabulator-field",i),this.column.definition.cssClass)&&this.column.definition.cssClass.split(" ").forEach((e=>{t.classList.add(e)}));"hover"===this.table.options.tooltipGenerationMode&&t.addEventListener("mouseenter",(e=>{this._generateTooltip()})),this._bindClickEvents(e),this._bindTouchEvents(e),this._bindMouseEvents(e),this.column.modules.edit&&this.table.modules.edit.bindEditor(this),this.column.definition.rowHandle&&!1!==this.table.options.movableRows&&this.table.modExists("moveRow")&&this.table.modules.moveRow.initializeCell(this),this.column.visible||this.hide()}_bindClickEvents(e){var t=this.element;(e.cellClick||this.table.options.cellClick)&&t.addEventListener("click",(t=>{var i=this.getComponent();e.cellClick&&e.cellClick.call(this.table,t,i),this.table.options.cellClick&&this.table.options.cellClick.call(this.table,t,i)})),e.cellDblClick||this.table.options.cellDblClick?t.addEventListener("dblclick",(t=>{var i=this.getComponent();e.cellDblClick&&e.cellDblClick.call(this.table,t,i),this.table.options.cellDblClick&&this.table.options.cellDblClick.call(this.table,t,i)})):t.addEventListener("dblclick",(e=>{if(!this.table.modExists("edit")||this.table.modules.edit.currentCell!==this){e.preventDefault();try{if(document.selection)(t=document.body.createTextRange()).moveToElementText(this.element),t.select();else if(window.getSelection){var t;(t=document.createRange()).selectNode(this.element),window.getSelection().removeAllRanges(),window.getSelection().addRange(t)}}catch(e){}}})),(e.cellContext||this.table.options.cellContext)&&t.addEventListener("contextmenu",(t=>{var i=this.getComponent();e.cellContext&&e.cellContext.call(this.table,t,i),this.table.options.cellContext&&this.table.options.cellContext.call(this.table,t,i)}))}_bindMouseEvents(e){var t=this.element;(e.cellMouseEnter||this.table.options.cellMouseEnter)&&t.addEventListener("mouseenter",(t=>{var i=this.getComponent();e.cellMouseEnter&&e.cellMouseEnter.call(this.table,t,i),this.table.options.cellMouseEnter&&this.table.options.cellMouseEnter.call(this.table,t,i)})),(e.cellMouseLeave||this.table.options.cellMouseLeave)&&t.addEventListener("mouseleave",(t=>{var i=this.getComponent();e.cellMouseLeave&&e.cellMouseLeave.call(this.table,t,i),this.table.options.cellMouseLeave&&this.table.options.cellMouseLeave.call(this.table,t,i)})),(e.cellMouseOver||this.table.options.cellMouseOver)&&t.addEventListener("mouseover",(t=>{var i=this.getComponent();e.cellMouseOver&&e.cellMouseOver.call(this.table,t,i),this.table.options.cellMouseOver&&this.table.options.cellMouseOver.call(this.table,t,i)})),(e.cellMouseOut||this.table.options.cellMouseOut)&&t.addEventListener("mouseout",(t=>{var i=this.getComponent();e.cellMouseOut&&e.cellMouseOut.call(this.table,t,i),this.table.options.cellMouseOut&&this.table.options.cellMouseOut.call(this.table,t,i)})),(e.cellMouseMove||this.table.options.cellMouseMove)&&t.addEventListener("mousemove",(t=>{var i=this.getComponent();e.cellMouseMove&&e.cellMouseMove.call(this.table,t,i),this.table.options.cellMouseMove&&this.table.options.cellMouseMove.call(this.table,t,i)}))}_bindTouchEvents(e){var t,i,o,s=this.element;(e.cellTap||this.table.options.cellTap)&&(o=!1,s.addEventListener("touchstart",(e=>{o=!0}),{passive:!0}),s.addEventListener("touchend",(t=>{if(o){var i=this.getComponent();e.cellTap&&e.cellTap.call(this.table,t,i),this.table.options.cellTap&&this.table.options.cellTap.call(this.table,t,i)}o=!1}))),(e.cellDblTap||this.table.options.cellDblTap)&&(t=null,s.addEventListener("touchend",(i=>{if(t){clearTimeout(t),t=null;var o=this.getComponent();e.cellDblTap&&e.cellDblTap.call(this.table,i,o),this.table.options.cellDblTap&&this.table.options.cellDblTap.call(this.table,i,o)}else t=setTimeout((()=>{clearTimeout(t),t=null}),300)}))),(e.cellTapHold||this.table.options.cellTapHold)&&(i=null,s.addEventListener("touchstart",(t=>{clearTimeout(i),i=setTimeout((()=>{clearTimeout(i),i=null,o=!1;var s=this.getComponent();e.cellTapHold&&e.cellTapHold.call(this.table,t,s),this.table.options.cellTapHold&&this.table.options.cellTapHold.call(this.table,t,s)}),1e3)}),{passive:!0}),s.addEventListener("touchend",(e=>{clearTimeout(i),i=null})))}_generateContents(){var e;switch(typeof(e=this.table.modExists("format")?this.table.modules.format.formatValue(this):this.element.innerHTML=this.value)){case"object":if(e instanceof Node){for(;this.element.firstChild;)this.element.removeChild(this.element.firstChild);this.element.appendChild(e)}else this.element.innerHTML="",null!=e&&console.warn("Format Error - Formatter has returned a type of object, the only valid formatter object return is an instance of Node, the formatter returned:",e);break;case"undefined":case"null":this.element.innerHTML="";break;default:this.element.innerHTML=e}}cellRendered(){this.table.modExists("format")&&this.table.modules.format.cellRendered&&this.table.modules.format.cellRendered(this)}_generateTooltip(){var e=this.column.tooltip;e?(!0===e?e=this.value:"function"==typeof e&&!1===(e=e(this.getComponent()))&&(e=""),void 0===e&&(e=""),this.element.setAttribute("title",e)):this.element.setAttribute("title","")}getElement(e){return this.loaded||(this.loaded=!0,e||this.layoutElement()),this.element}getValue(){return this.value}getOldValue(){return this.oldValue}setValue(e,t){var i;this.setValueProcessData(e,t)&&(this.table.options.history&&this.table.modExists("history")&&this.table.modules.history.action("cellEdit",this,{oldValue:this.oldValue,newValue:this.value}),i=this.getComponent(),this.column.cellEvents.cellEdited&&this.column.cellEvents.cellEdited.call(this.table,i),this.table.options.groupUpdateOnCellEdit&&this.table.options.groupBy&&this.table.modExists("groupRows")&&this.table.modules.groupRows.reassignRowToGroup(this.row),this.cellRendered(),this.table.options.cellEdited.call(this.table,i),this.table.options.dataChanged&&this.table.options.dataChanged.call(this.table,this.table.rowManager.getData()))}setValueProcessData(e,t){var i=!1;return this.value!=e&&(i=!0,t&&this.column.modules.mutate&&(e=this.table.modules.mutator.transformCell(this,e))),this.setValueActual(e),i&&this.table.modExists("columnCalcs")&&(this.column.definition.topCalc||this.column.definition.bottomCalc)&&(this.table.options.groupBy&&this.table.modExists("groupRows")?("table"!=this.table.options.columnCalcs&&"both"!=this.table.options.columnCalcs||this.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows),"table"!=this.table.options.columnCalcs&&this.table.modules.columnCalcs.recalcRowGroup(this.row)):this.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows)),i}setValueActual(e){this.oldValue=this.value,this.value=e,this.table.options.reactiveData&&this.table.modExists("reactiveData")&&this.table.modules.reactiveData.block(),this.column.setFieldValue(this.row.data,e),this.table.options.reactiveData&&this.table.modExists("reactiveData")&&this.table.modules.reactiveData.unblock(),this.loaded&&this.layoutElement()}layoutElement(){this._generateContents(),this._generateTooltip(),this.table.options.resizableColumns&&this.table.modExists("resizeColumns")&&"row"===this.row.type&&this.table.modules.resizeColumns.initializeColumn("cell",this.column,this.element),(this.column.definition.contextMenu||this.column.definition.clickMenu)&&this.table.modExists("menu")&&this.table.modules.menu.initializeCell(this),this.table.modExists("frozenColumns")&&this.table.modules.frozenColumns.layoutElement(this.element,this.column)}setWidth(){this.width=this.column.width,this.element.style.width=this.column.widthStyled}clearWidth(){this.width="",this.element.style.width=""}getWidth(){return this.width||this.element.offsetWidth}setMinWidth(){this.minWidth=this.column.minWidth,this.element.style.minWidth=this.column.minWidthStyled}setMaxWidth(){this.maxWidth=this.column.maxWidth,this.element.style.maxWidth=this.column.maxWidthStyled}checkHeight(){this.row.reinitializeHeight()}clearHeight(){this.element.style.height="",this.height=null}setHeight(){this.height=this.row.height,this.element.style.height=this.row.heightStyled}getHeight(){return this.height||this.element.offsetHeight}show(){this.element.style.display=this.column.vertAlign?"inline-flex":""}hide(){this.element.style.display="none"}edit(e){if(this.table.modExists("edit",!0))return this.table.modules.edit.editCell(this,e)}cancelEdit(){if(this.table.modExists("edit",!0)){var e=this.table.modules.edit.getCurrentCell();e&&e._getSelf()===this?this.table.modules.edit.cancelEdit():console.warn("Cancel Editor Error - This cell is not currently being edited ")}}validate(){return!this.column.modules.validate||!this.table.modExists("validate",!0)||!0===this.table.modules.validate.validate(this.column.modules.validate,this,this.getValue())}delete(){!this.table.rowManager.redrawBlock&&this.element.parentNode&&this.element.parentNode.removeChild(this.element),this.modules.validate&&this.modules.validate.invalid&&this.table.modules.validate.clearValidation(this),this.modules.edit&&this.modules.edit.edited&&this.table.modules.edit.clearEdited(this),this.table.options.history&&this.table.modules.history.clearComponentHistory(this),this.element=!1,this.column.deleteCell(this),this.row.deleteCell(this),this.calcs={}}nav(){var e=this,t=!1,i=this.row.getCellIndex(this);return{next:function(){var t,i=this.right();return!!i||!(!(t=e.table.rowManager.nextDisplayRow(e.row,!0))||!(i=t.findNextEditableCell(-1)))&&(i.edit(),!0)},prev:function(){var t,i=this.left();return!!i||!(!(t=e.table.rowManager.prevDisplayRow(e.row,!0))||!(i=t.findPrevEditableCell(t.cells.length)))&&(i.edit(),!0)},left:function(){return!!(t=e.row.findPrevEditableCell(i))&&(t.edit(),!0)},right:function(){return!!(t=e.row.findNextEditableCell(i))&&(t.edit(),!0)},up:function(){var t=e.table.rowManager.prevDisplayRow(e.row,!0);t&&t.cells[i].edit()},down:function(){var t=e.table.rowManager.nextDisplayRow(e.row,!0);t&&t.cells[i].edit()}}}getIndex(){this.row.getCellIndex(this)}getComponent(){return this.component||(this.component=new h(this)),this.component}}class c{constructor(e){this._column=e,this.type="ColumnComponent"}getElement(){return this._column.getElement()}getDefinition(){return this._column.getDefinition()}getField(){return this._column.getField()}getCells(){var e=[];return this._column.cells.forEach((function(t){e.push(t.getComponent())})),e}isVisible(){return this._column.visible}show(){this._column.isGroup?this._column.columns.forEach((function(e){e.show()})):this._column.show()}hide(){this._column.isGroup?this._column.columns.forEach((function(e){e.hide()})):this._column.hide()}toggle(){this._column.visible?this.hide():this.show()}delete(){return this._column.delete()}getSubColumns(){var e=[];return this._column.columns.length&&this._column.columns.forEach((function(t){e.push(t.getComponent())})),e}getParentColumn(){return this._column.parent instanceof Column&&this._column.parent.getComponent()}_getSelf(){return this._column}scrollTo(){return this._column.table.columnManager.scrollToColumn(this._column)}getTable(){return this._column.table}headerFilterFocus(){this._column.table.modExists("filter",!0)&&this._column.table.modules.filter.setHeaderFilterFocus(this._column)}reloadHeaderFilter(){this._column.table.modExists("filter",!0)&&this._column.table.modules.filter.reloadHeaderFilter(this._column)}getHeaderFilterValue(){if(this._column.table.modExists("filter",!0))return this._column.table.modules.filter.getHeaderFilterValue(this._column)}setHeaderFilterValue(e){this._column.table.modExists("filter",!0)&&this._column.table.modules.filter.setHeaderFilterValue(this._column,e)}move(e,t){var i=this._column.table.columnManager.findColumn(e);i?this._column.table.columnManager.moveColumn(this._column,i,t):console.warn("Move Error - No matching column found:",i)}getNextColumn(){var e=this._column.nextColumn();return!!e&&e.getComponent()}getPrevColumn(){var e=this._column.prevColumn();return!!e&&e.getComponent()}updateDefinition(e){return this._column.updateDefinition(e)}getWidth(){return this._column.getWidth()}setWidth(e){var t;return t=!0===e?this._column.reinitializeWidth(!0):this._column.setWidth(e),this._column.table.options.virtualDomHoz&&this._column.table.vdomHoz.reinitialize(!0),t}validate(){return this._column.validate()}}class u{constructor(e,t){this.table=t.table,this.definition=e,this.parent=t,this.type="column",this.columns=[],this.cells=[],this.element=this.createElement(),this.contentElement=!1,this.titleHolderElement=!1,this.titleElement=!1,this.groupElement=this.createGroupElement(),this.isGroup=!1,this.tooltip=!1,this.hozAlign="",this.vertAlign="",this.field="",this.fieldStructure="",this.getFieldValue="",this.setFieldValue="",this.titleFormatterRendered=!1,this.mapDefinitionDefaults(),this.setField(this.definition.field),this.table.options.invalidOptionWarnings&&this.checkDefinition(),this.modules={},this.cellEvents={cellClick:!1,cellDblClick:!1,cellContext:!1,cellTap:!1,cellDblTap:!1,cellTapHold:!1,cellMouseEnter:!1,cellMouseLeave:!1,cellMouseOver:!1,cellMouseOut:!1,cellMouseMove:!1},this.width=null,this.widthStyled="",this.maxWidth=null,this.maxWidthStyled="",this.minWidth=null,this.minWidthStyled="",this.widthFixed=!1,this.visible=!0,this.component=null,this._mapDepricatedFunctionality(),e.columns?(this.isGroup=!0,e.columns.forEach(((e,t)=>{var i=new u(e,this);this.attachColumn(i)})),this.checkColumnVisibility()):t.registerColumnField(this),e.rowHandle&&!1!==this.table.options.movableRows&&this.table.modExists("moveRow")&&this.table.modules.moveRow.setHandle(!0),this._buildHeader(),this.bindModuleColumns()}createElement(){var e=document.createElement("div");return e.classList.add("tabulator-col"),e.setAttribute("role","columnheader"),e.setAttribute("aria-sort","none"),e}createGroupElement(){var e=document.createElement("div");return e.classList.add("tabulator-col-group-cols"),e}mapDefinitionDefaults(){var e=this.table.options.columnDefaults;if(e)for(let t in e)void 0===this.definition[t]&&(this.definition[t]=e[t])}checkDefinition(){Object.keys(this.definition).forEach((e=>{-1===u.defaultOptionList.indexOf(e)&&console.warn("Invalid column definition option in '"+(this.field||this.definition.title)+"' column:",e)}))}setField(e){this.field=e,this.fieldStructure=e?this.table.options.nestedFieldSeparator?e.split(this.table.options.nestedFieldSeparator):[e]:[],this.getFieldValue=this.fieldStructure.length>1?this._getNestedData:this._getFlatData,this.setFieldValue=this.fieldStructure.length>1?this._setNestedData:this._setFlatData}registerColumnPosition(e){this.parent.registerColumnPosition(e)}registerColumnField(e){this.parent.registerColumnField(e)}reRegisterPosition(){this.isGroup?this.columns.forEach((function(e){e.reRegisterPosition()})):this.registerColumnPosition(this)}_mapDepricatedFunctionality(){}setTooltip(){var e=this.definition,t=e.headerTooltip||!1===e.tooltip?e.headerTooltip:this.table.options.tooltipsHeader;t?!0===t?e.field?this.table.modules.localize.bind("columns|"+e.field,(t=>{this.element.setAttribute("title",t||e.title)})):this.element.setAttribute("title",e.title):("function"==typeof t&&!1===(t=t(this.getComponent()))&&(t=""),this.element.setAttribute("title",t)):this.element.setAttribute("title","")}_buildHeader(){for(var e=this.definition;this.element.firstChild;)this.element.removeChild(this.element.firstChild);e.headerVertical&&(this.element.classList.add("tabulator-col-vertical"),"flip"===e.headerVertical&&this.element.classList.add("tabulator-col-vertical-flip")),this.contentElement=this._bindEvents(),this.contentElement=this._buildColumnHeaderContent(),this.element.appendChild(this.contentElement),this.isGroup?this._buildGroupHeader():this._buildColumnHeader(),this.setTooltip(),this.table.options.resizableColumns&&this.table.modExists("resizeColumns")&&this.table.modules.resizeColumns.initializeColumn("header",this,this.element),e.headerFilter&&this.table.modExists("filter")&&this.table.modExists("edit")&&(void 0!==e.headerFilterPlaceholder&&e.field&&this.table.modules.localize.setHeaderFilterColumnPlaceholder(e.field,e.headerFilterPlaceholder),this.table.modules.filter.initializeColumn(this)),this.table.modExists("frozenColumns")&&this.table.modules.frozenColumns.initializeColumn(this),this.table.options.movableColumns&&!this.isGroup&&this.table.modExists("moveColumn")&&this.table.modules.moveColumn.initializeColumn(this),(e.topCalc||e.bottomCalc)&&this.table.modExists("columnCalcs")&&this.table.modules.columnCalcs.initializeColumn(this),this.table.modExists("persistence")&&this.table.modules.persistence.config.columns&&this.table.modules.persistence.initializeColumn(this),this.element.addEventListener("mouseenter",(e=>{this.setTooltip()}))}_bindEvents(){var e,t,i,o=this.definition;"function"==typeof o.headerClick&&this.element.addEventListener("click",(e=>{o.headerClick(e,this.getComponent())})),"function"==typeof o.headerDblClick&&this.element.addEventListener("dblclick",(e=>{o.headerDblClick(e,this.getComponent())})),"function"==typeof o.headerContext&&this.element.addEventListener("contextmenu",(e=>{o.headerContext(e,this.getComponent())})),"function"==typeof o.headerTap&&(i=!1,this.element.addEventListener("touchstart",(e=>{i=!0}),{passive:!0}),this.element.addEventListener("touchend",(e=>{i&&o.headerTap(e,this.getComponent()),i=!1}))),"function"==typeof o.headerDblTap&&(e=null,this.element.addEventListener("touchend",(t=>{e?(clearTimeout(e),e=null,o.headerDblTap(t,this.getComponent())):e=setTimeout((()=>{clearTimeout(e),e=null}),300)}))),"function"==typeof o.headerTapHold&&(t=null,this.element.addEventListener("touchstart",(e=>{clearTimeout(t),t=setTimeout((function(){clearTimeout(t),t=null,i=!1,o.headerTapHold(e,this.getComponent())}),1e3)}),{passive:!0}),this.element.addEventListener("touchend",(e=>{clearTimeout(t),t=null}))),"function"==typeof o.cellClick&&(this.cellEvents.cellClick=o.cellClick),"function"==typeof o.cellDblClick&&(this.cellEvents.cellDblClick=o.cellDblClick),"function"==typeof o.cellContext&&(this.cellEvents.cellContext=o.cellContext),"function"==typeof o.cellMouseEnter&&(this.cellEvents.cellMouseEnter=o.cellMouseEnter),"function"==typeof o.cellMouseLeave&&(this.cellEvents.cellMouseLeave=o.cellMouseLeave),"function"==typeof o.cellMouseOver&&(this.cellEvents.cellMouseOver=o.cellMouseOver),"function"==typeof o.cellMouseOut&&(this.cellEvents.cellMouseOut=o.cellMouseOut),"function"==typeof o.cellMouseMove&&(this.cellEvents.cellMouseMove=o.cellMouseMove),"function"==typeof o.cellTap&&(this.cellEvents.cellTap=o.cellTap),"function"==typeof o.cellDblTap&&(this.cellEvents.cellDblTap=o.cellDblTap),"function"==typeof o.cellTapHold&&(this.cellEvents.cellTapHold=o.cellTapHold),"function"==typeof o.cellEdited&&(this.cellEvents.cellEdited=o.cellEdited),"function"==typeof o.cellEditing&&(this.cellEvents.cellEditing=o.cellEditing),"function"==typeof o.cellEditCancelled&&(this.cellEvents.cellEditCancelled=o.cellEditCancelled)}_buildColumnHeader(){var e=this.definition,t=this.table;(t.modExists("sort")&&t.modules.sort.initializeColumn(this,this.titleHolderElement),(e.headerContextMenu||e.headerClickMenu||e.headerMenu)&&t.modExists("menu")&&t.modules.menu.initializeColumnHeader(this),t.modExists("format")&&t.modules.format.initializeColumn(this),void 0!==e.editor&&t.modExists("edit")&&t.modules.edit.initializeColumn(this),void 0!==e.validator&&t.modExists("validate")&&t.modules.validate.initializeColumn(this),t.modExists("mutator")&&t.modules.mutator.initializeColumn(this),t.modExists("accessor")&&t.modules.accessor.initializeColumn(this),t.options.responsiveLayout,t.modExists("responsiveLayout")&&t.modules.responsiveLayout.initializeColumn(this),void 0!==e.visible&&(e.visible?this.show(!0):this.hide(!0)),e.cssClass)&&e.cssClass.split(" ").forEach((e=>{this.element.classList.add(e)}));e.field&&this.element.setAttribute("tabulator-field",e.field),this.setMinWidth(void 0===e.minWidth?this.table.options.columnMinWidth:parseInt(e.minWidth)),(e.maxWidth||this.table.options.columnMaxWidth)&&!1!==e.maxWidth&&this.setMaxWidth(void 0===e.maxWidth?this.table.options.columnMaxWidth:parseInt(e.maxWidth)),this.reinitializeWidth(),this.tooltip=this.definition.tooltip||!1===this.definition.tooltip?this.definition.tooltip:this.table.options.tooltips,this.hozAlign=void 0===this.definition.hozAlign?this.table.options.cellHozAlign:this.definition.hozAlign,this.vertAlign=void 0===this.definition.vertAlign?this.table.options.cellVertAlign:this.definition.vertAlign,this.titleElement.style.textAlign=this.definition.headerHozAlign||this.table.options.headerHozAlign}_buildColumnHeaderContent(){this.definition,this.table;var e=document.createElement("div");return e.classList.add("tabulator-col-content"),this.titleHolderElement=document.createElement("div"),this.titleHolderElement.classList.add("tabulator-col-title-holder"),e.appendChild(this.titleHolderElement),this.titleElement=this._buildColumnHeaderTitle(),this.titleHolderElement.appendChild(this.titleElement),e}_buildColumnHeaderTitle(){var e=this.definition,t=this.table,i=document.createElement("div");if(i.classList.add("tabulator-col-title"),e.editableTitle){var o=document.createElement("input");o.classList.add("tabulator-title-editor"),o.addEventListener("click",(e=>{e.stopPropagation(),o.focus()})),o.addEventListener("change",(()=>{e.title=o.value,t.options.columnTitleChanged.call(this.table,this.getComponent())})),i.appendChild(o),e.field?t.modules.localize.bind("columns|"+e.field,(t=>{o.value=t||e.title||" "})):o.value=e.title||" "}else e.field?t.modules.localize.bind("columns|"+e.field,(t=>{this._formatColumnHeaderTitle(i,t||e.title||" ")})):this._formatColumnHeaderTitle(i,e.title||" ");return i}_formatColumnHeaderTitle(e,t){var i,o,s,a,l;if(this.definition.titleFormatter&&this.table.modExists("format"))switch(i=this.table.modules.format.getFormatter(this.definition.titleFormatter),l=e=>{this.titleFormatterRendered=e},a={getValue:function(){return t},getElement:function(){return e}},s="function"==typeof(s=this.definition.titleFormatterParams||{})?s():s,typeof(o=i.call(this.table.modules.format,a,s,l))){case"object":o instanceof Node?e.appendChild(o):(e.innerHTML="",console.warn("Format Error - Title formatter has returned a type of object, the only valid formatter object return is an instance of Node, the formatter returned:",o));break;case"undefined":case"null":e.innerHTML="";break;default:e.innerHTML=o}else e.innerHTML=t}_buildGroupHeader(){(this.element.classList.add("tabulator-col-group"),this.element.setAttribute("role","columngroup"),this.element.setAttribute("aria-title",this.definition.title),this.definition.cssClass)&&this.definition.cssClass.split(" ").forEach((e=>{this.element.classList.add(e)}));(this.definition.headerContextMenu||this.definition.headerMenu)&&this.table.modExists("menu")&&this.table.modules.menu.initializeColumnHeader(this),this.titleElement.style.textAlign=this.definition.headerHozAlign||this.table.options.headerHozAlign,this.element.appendChild(this.groupElement)}_getFlatData(e){return e[this.field]}_getNestedData(e){var t,i=e,o=this.fieldStructure,s=o.length;for(let e=0;e-1&&this.columns.splice(t,1),this.columns.length||this.delete()}setWidth(e){this.widthFixed=!0,this.setWidthActual(e)}setWidthActual(e){isNaN(e)&&(e=Math.floor(this.table.element.clientWidth/100*parseInt(e))),e=Math.max(this.minWidth,e),this.maxWidth&&(e=Math.min(this.maxWidth,e)),this.width=e,this.widthStyled=e?e+"px":"",this.element.style.width=this.widthStyled,this.isGroup||this.cells.forEach((function(e){e.setWidth()})),this.parent.isGroup&&this.parent.matchChildWidths(),this.table.modExists("frozenColumns")&&this.table.modules.frozenColumns.layout()}checkCellHeights(){var e=[];this.cells.forEach((function(t){t.row.heightInitialized&&(null!==t.row.getElement().offsetParent?(e.push(t.row),t.row.clearCellHeight()):t.row.heightInitialized=!1)})),e.forEach((function(e){e.calcHeight()})),e.forEach((function(e){e.setCellHeight()}))}getWidth(){var e=0;return this.isGroup?this.columns.forEach((function(t){t.visible&&(e+=t.getWidth())})):e=this.width,e}getHeight(){return this.element.offsetHeight}setMinWidth(e){this.minWidth=e,this.minWidthStyled=e?e+"px":"",this.element.style.minWidth=this.minWidthStyled,this.cells.forEach((function(e){e.setMinWidth()}))}setMaxWidth(e){this.maxWidth=e,this.maxWidthStyled=e?e+"px":"",this.element.style.maxWidth=this.maxWidthStyled,this.cells.forEach((function(e){e.setMaxWidth()}))}delete(){return new Promise(((e,t)=>{this.isGroup&&this.columns.forEach((function(e){e.delete()})),this.table.modExists("edit")&&this.table.modules.edit.currentCell.column===this&&this.table.modules.edit.cancelEdit();var i=this.cells.length;for(let e=0;e-1&&this._nextVisibleColumn(e+1)}_nextVisibleColumn(e){var t=this.table.columnManager.getColumnByIndex(e);return!t||t.visible?t:this._nextVisibleColumn(e+1)}prevColumn(){var e=this.table.columnManager.findColumnIndex(this);return e>-1&&this._prevVisibleColumn(e-1)}_prevVisibleColumn(e){var t=this.table.columnManager.getColumnByIndex(e);return!t||t.visible?t:this._prevVisibleColumn(e-1)}reinitializeWidth(e){this.widthFixed=!1,void 0===this.definition.width||e||this.setWidth(this.definition.width),this.table.modExists("filter")&&this.table.modules.filter.hideHeaderFilterElements(),this.fitToData(),this.table.modExists("filter")&&this.table.modules.filter.showHeaderFilterElements()}fitToData(){this.widthFixed||(this.element.style.width="",this.cells.forEach((e=>{e.clearWidth()})));var e=this.element.offsetWidth;this.width&&this.widthFixed||(this.cells.forEach((t=>{var i=t.getWidth();i>e&&(e=i)})),e&&this.setWidthActual(e+1))}updateDefinition(e){return new Promise(((t,i)=>{var o;this.isGroup||this.parent.isGroup?(console.warn("Column Update Error - The updateDefinition function is only available on ungrouped columns"),i("Column Update Error - The updateDefinition function is only available on columns, not column groups")):(o=Object.assign({},this.getDefinition()),o=Object.assign(o,e),this.table.columnManager.addColumn(o,!1,this).then((e=>{o.field==this.field&&(this.field=!1),this.delete().then((()=>{t(e.getComponent())})).catch((e=>{i(e)}))})).catch((e=>{i(e)})))}))}deleteCell(e){var t=this.cells.indexOf(e);t>-1&&this.cells.splice(t,1)}getComponent(){return this.component||(this.component=new c(this)),this.component}}u.defaultOptionList=["title","field","columns","visible","hozAlign","vertAlign","width","minWidth","maxWidth","widthGrow","widthShrink","resizable","frozen","responsive","tooltip","cssClass","rowHandle","print","htmlOutput","sorter","sorterParams","formatter","formatterParams","variableHeight","editable","editor","editorParams","validator","mutator","mutatorParams","mutatorData","mutatorDataParams","mutatorEdit","mutatorEditParams","mutatorClipboard","mutatorClipboardParams","accessor","accessorParams","accessorData","accessorDataParams","accessorDownload","accessorDownloadParams","accessorClipboard","accessorClipboardParams","accessorPrint","accessorPrintParams","accessorHtmlOutput","accessorHtmlOutputParams","clipboard","download","topCalc","topCalcParams","topCalcFormatter","topCalcFormatterParams","bottomCalc","bottomCalcParams","bottomCalcFormatter","bottomCalcFormatterParams","cellClick","cellDblClick","cellContext","cellTap","cellDblTap","cellTapHold","cellMouseEnter","cellMouseLeave","cellMouseOver","cellMouseOut","cellMouseMove","cellEditing","cellEdited","cellEditCancelled","headerSort","headerSortStartingDir","headerSortTristate","headerClick","headerDblClick","headerContext","headerTap","headerDblTap","headerTapHold","headerTooltip","headerVertical","headerHozAlign","editableTitle","titleFormatter","titleFormatterParams","headerFilter","headerFilterPlaceholder","headerFilterParams","headerFilterEmptyCheck","headerFilterFunc","headerFilterFuncParams","headerFilterLiveFilter","print","headerContextMenu","headerMenu","contextMenu","clickMenu","formatterPrint","formatterPrintParams","formatterClipboard","formatterClipboardParams","formatterHtmlOutput","formatterHtmlOutputParams","titlePrint","titleClipboard","titleHtmlOutput","titleDownload"];class m{constructor(e){this._row=e}getData(e){return this._row.getData(e)}getElement(){return this._row.getElement()}getCells(){var e=[];return this._row.getCells().forEach((function(t){e.push(t.getComponent())})),e}getCell(e){var t=this._row.getCell(e);return!!t&&t.getComponent()}getIndex(){return this._row.getData("data")[this._row.table.options.index]}getPosition(e){return this._row.table.rowManager.getRowPosition(this._row,e)}delete(){return this._row.delete()}scrollTo(){return this._row.table.rowManager.scrollToRow(this._row)}pageTo(){if(this._row.table.modExists("page",!0))return this._row.table.modules.page.setPageToRow(this._row)}move(e,t){this._row.moveToRow(e,t)}update(e){return this._row.updateData(e)}normalizeHeight(){this._row.normalizeHeight(!0)}select(){this._row.table.modules.selectRow.selectRows(this._row)}deselect(){this._row.table.modules.selectRow.deselectRows(this._row)}toggleSelect(){this._row.table.modules.selectRow.toggleRow(this._row)}isSelected(){return this._row.table.modules.selectRow.isRowSelected(this._row)}_getSelf(){return this._row}validate(){return this._row.validate()}freeze(){this._row.table.modExists("frozenRows",!0)&&this._row.table.modules.frozenRows.freezeRow(this._row)}unfreeze(){this._row.table.modExists("frozenRows",!0)&&this._row.table.modules.frozenRows.unfreezeRow(this._row)}isFrozen(){return!!this._row.table.modExists("frozenRows",!0)&&this._row.table.modules.frozenRows.rows.indexOf(this._row)>-1}treeCollapse(){this._row.table.modExists("dataTree",!0)&&this._row.table.modules.dataTree.collapseRow(this._row)}treeExpand(){this._row.table.modExists("dataTree",!0)&&this._row.table.modules.dataTree.expandRow(this._row)}treeToggle(){this._row.table.modExists("dataTree",!0)&&this._row.table.modules.dataTree.toggleRow(this._row)}getTreeParent(){return!!this._row.table.modExists("dataTree",!0)&&this._row.table.modules.dataTree.getTreeParent(this._row)}getTreeChildren(){return!!this._row.table.modExists("dataTree",!0)&&this._row.table.modules.dataTree.getTreeChildren(this._row,!0)}addTreeChild(e,t,i){return!!this._row.table.modExists("dataTree",!0)&&this._row.table.modules.dataTree.addTreeChildRow(this._row,e,t,i)}reformat(){return this._row.reinitialize()}getGroup(){return this._row.getGroup().getComponent()}getTable(){return this._row.table}getNextRow(){var e=this._row.nextRow();return e?e.getComponent():e}getPrevRow(){var e=this._row.prevRow();return e?e.getComponent():e}}class p{constructor(e,t,i="row"){this.table=t.table,this.parent=t,this.data={},this.type=i,this.element=!1,this.modules={},this.cells=[],this.height=0,this.heightStyled="",this.manualHeight=!1,this.outerHeight=0,this.initialized=!1,this.heightInitialized=!1,this.component=null,this.created=!1,this.setData(e)}create(){this.created||(this.created=!0,this.generateElement())}createElement(){var e=document.createElement("div");e.classList.add("tabulator-row"),e.setAttribute("role","row"),this.element=e}getElement(){return this.create(),this.element}detachElement(){this.element&&this.element.parentNode&&this.element.parentNode.removeChild(this.element)}generateElement(){var e,t,i;this.createElement(),!1!==this.table.options.selectable&&this.table.modExists("selectRow")&&this.table.modules.selectRow.initializeRow(this),!1!==this.table.options.movableRows&&this.table.modExists("moveRow")&&this.table.modules.moveRow.initializeRow(this),!1!==this.table.options.dataTree&&this.table.modExists("dataTree")&&this.table.modules.dataTree.initializeRow(this),"collapse"===this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout")&&this.table.modules.responsiveLayout.initializeRow(this),(this.table.options.rowContextMenu||this.table.options.rowClickMenu)&&this.table.modExists("menu")&&this.table.modules.menu.initializeRow(this),this.table.options.rowClick&&this.element.addEventListener("click",(e=>{this.table.options.rowClick(e,this.getComponent())})),this.table.options.rowDblClick&&this.element.addEventListener("dblclick",(e=>{this.table.options.rowDblClick(e,this.getComponent())})),this.table.options.rowContext&&this.element.addEventListener("contextmenu",(e=>{this.table.options.rowContext(e,this.getComponent())})),this.table.options.rowMouseEnter&&this.element.addEventListener("mouseenter",(e=>{this.table.options.rowMouseEnter(e,this.getComponent())})),this.table.options.rowMouseLeave&&this.element.addEventListener("mouseleave",(e=>{this.table.options.rowMouseLeave(e,this.getComponent())})),this.table.options.rowMouseOver&&this.element.addEventListener("mouseover",(e=>{this.table.options.rowMouseOver(e,this.getComponent())})),this.table.options.rowMouseOut&&this.element.addEventListener("mouseout",(e=>{this.table.options.rowMouseOut(e,this.getComponent())})),this.table.options.rowMouseMove&&this.element.addEventListener("mousemove",(e=>{this.table.options.rowMouseMove(e,this.getComponent())})),this.table.options.rowTap&&(i=!1,this.element.addEventListener("touchstart",(e=>{i=!0}),{passive:!0}),this.element.addEventListener("touchend",(e=>{i&&this.table.options.rowTap(e,this.getComponent()),i=!1}))),this.table.options.rowDblTap&&(e=null,this.element.addEventListener("touchend",(t=>{e?(clearTimeout(e),e=null,this.table.options.rowDblTap(t,this.getComponent())):e=setTimeout((()=>{clearTimeout(e),e=null}),300)}))),this.table.options.rowTapHold&&(t=null,this.element.addEventListener("touchstart",(e=>{clearTimeout(t),t=setTimeout((()=>{clearTimeout(t),t=null,i=!1,this.table.options.rowTapHold(e,this.getComponent())}),1e3)}),{passive:!0}),this.element.addEventListener("touchend",(e=>{clearTimeout(t),t=null})))}generateCells(){this.cells=this.table.columnManager.generateCells(this)}initialize(e){if(this.create(),!this.initialized||e){for(this.deleteCells();this.element.firstChild;)this.element.removeChild(this.element.firstChild);this.table.modExists("frozenColumns")&&this.table.modules.frozenColumns.layoutRow(this),this.generateCells(),this.table.options.virtualDomHoz&&this.table.vdomHoz.initialized?this.table.vdomHoz.initializeRow(this):this.cells.forEach((e=>{this.element.appendChild(e.getElement()),e.cellRendered()})),e&&this.normalizeHeight(),this.table.options.dataTree&&this.table.modExists("dataTree")&&this.table.modules.dataTree.layoutRow(this),"collapse"===this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout")&&this.table.modules.responsiveLayout.layoutRow(this),this.table.options.rowFormatter&&this.table.options.rowFormatter(this.getComponent()),this.table.options.resizableRows&&this.table.modExists("resizeRows")&&this.table.modules.resizeRows.initializeRow(this),this.initialized=!0}else this.table.options.virtualDomHoz&&this.table.vdomHoz.reinitializeRow(this)}reinitializeHeight(){this.heightInitialized=!1,this.element&&null!==this.element.offsetParent&&this.normalizeHeight(!0)}reinitialize(e){this.initialized=!1,this.heightInitialized=!1,this.manualHeight||(this.height=0,this.heightStyled=""),this.element&&null!==this.element.offsetParent&&this.initialize(!0),this.table.options.dataTree&&this.table.modExists("dataTree",!0)&&this.table.modules.dataTree.getTreeChildren(this,!1,!0).forEach((function(e){e.reinitialize(!0)}))}calcHeight(e){var t=0,i=this.table.options.resizableRows?this.element.clientHeight:0;this.cells.forEach((function(e){var i=e.getHeight();i>t&&(t=i)})),this.height=e?Math.max(t,i):this.manualHeight?this.height:Math.max(t,i),this.heightStyled=this.height?this.height+"px":"",this.outerHeight=this.element.offsetHeight}setCellHeight(){this.cells.forEach((function(e){e.setHeight()})),this.heightInitialized=!0}clearCellHeight(){this.cells.forEach((function(e){e.clearHeight()}))}normalizeHeight(e){e&&this.clearCellHeight(),this.calcHeight(e),this.setCellHeight()}setHeight(e,t){(this.height!=e||t)&&(this.manualHeight=!0,this.height=e,this.heightStyled=e?e+"px":"",this.setCellHeight(),this.outerHeight=this.element.offsetHeight)}getHeight(){return this.outerHeight}getWidth(){return this.element.offsetWidth}deleteCell(e){var t=this.cells.indexOf(e);t>-1&&this.cells.splice(t,1)}setData(e){this.table.modExists("mutator")&&(e=this.table.modules.mutator.transformRow(e,"data")),this.data=e,this.table.options.reactiveData&&this.table.modExists("reactiveData",!0)&&this.table.modules.reactiveData.watchRow(this)}updateData(e){var t,i=this.element&&o.elVisible(this.element),s={};return new Promise(((o,a)=>{for(var l in"string"==typeof e&&(e=JSON.parse(e)),this.table.options.reactiveData&&this.table.modExists("reactiveData",!0)&&this.table.modules.reactiveData.block(),this.table.modExists("mutator")?(s=Object.assign(s,this.data),s=Object.assign(s,e),t=this.table.modules.mutator.transformRow(s,"data",e)):t=e,t)this.data[l]=t[l];for(var l in this.table.options.reactiveData&&this.table.modExists("reactiveData",!0)&&this.table.modules.reactiveData.unblock(),e){this.table.columnManager.getColumnsByFieldRoot(l).forEach((e=>{let o=this.getCell(e.getField());if(o){let s=e.getFieldValue(t);o.getValue()!=s&&(o.setValueProcessData(s),i&&o.cellRendered())}}))}this.table.options.groupUpdateOnCellEdit&&this.table.options.groupBy&&this.table.modExists("groupRows")&&this.table.modules.groupRows.reassignRowToGroup(this.row),i?(this.normalizeHeight(!0),this.table.options.rowFormatter&&this.table.options.rowFormatter(this.getComponent())):(this.initialized=!1,this.height=0,this.heightStyled=""),!1!==this.table.options.dataTree&&this.table.modExists("dataTree")&&this.table.modules.dataTree.redrawNeeded(e)&&(this.table.modules.dataTree.initializeRow(this),i&&(this.table.modules.dataTree.layoutRow(this),this.table.rowManager.refreshActiveData("tree",!1,!0))),this.table.options.rowUpdated.call(this.table,this.getComponent()),this.table.options.dataChanged&&this.table.options.dataChanged.call(this.table,this.table.rowManager.getData()),o()}))}getData(e){return e&&this.table.modExists("accessor")?this.table.modules.accessor.transformRow(this,e):this.data}getCell(e){return e=this.table.columnManager.findColumn(e),this.cells.find((function(t){return t.column===e}))}getCellIndex(e){return this.cells.findIndex((function(t){return t===e}))}findNextEditableCell(e){var t=!1;if(e0)for(var i=e-1;i>=0;i--){let e=this.cells[i],s=!0;if(e.column.modules.edit&&o.elVisible(e.getElement())&&("function"==typeof e.column.modules.edit.check&&(s=e.column.modules.edit.check(e.getComponent())),s)){t=e;break}}return t}getCells(){return this.cells}nextRow(){return this.table.rowManager.nextDisplayRow(this,!0)||!1}prevRow(){return this.table.rowManager.prevDisplayRow(this,!0)||!1}moveToRow(e,t){var i=this.table.rowManager.findRow(e);i?(this.table.rowManager.moveRowActual(this,i,!t),this.table.rowManager.refreshActiveData("display",!1,!0)):console.warn("Move Error - No matching row found:",e)}validate(){var e=[];return this.cells.forEach((function(t){t.validate()||e.push(t.getComponent())})),!e.length||e}delete(){return new Promise(((e,t)=>{var i,o;this.table.options.history&&this.table.modExists("history")&&(this.table.options.groupBy&&this.table.modExists("groupRows")?(i=(o=this.getGroup().rows).indexOf(this))&&(i=o[i-1]):(i=this.table.rowManager.getRowIndex(this))&&(i=this.table.rowManager.rows[i-1]),this.table.modules.history.action("rowDelete",this,{data:this.getData(),pos:!i,index:i})),this.deleteActual(),e()}))}deleteActual(e){this.table.rowManager.getRowIndex(this);this.detatchModules(),this.table.options.reactiveData&&this.table.modExists("reactiveData",!0),this.modules.group&&this.modules.group.removeRow(this),this.table.rowManager.deleteRow(this,e),this.deleteCells(),this.initialized=!1,this.heightInitialized=!1,this.element=!1,this.table.options.dataTree&&this.table.modExists("dataTree",!0)&&this.table.modules.dataTree.rowDelete(this),this.table.modExists("columnCalcs")&&(this.table.options.groupBy&&this.table.modExists("groupRows")?this.table.modules.columnCalcs.recalcRowGroup(this):this.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows))}detatchModules(){this.table.modExists("selectRow")&&this.table.modules.selectRow._deselectRow(this,!0),this.table.modExists("edit")&&this.table.modules.edit.currentCell.row===this&&this.table.modules.edit.cancelEdit(),this.table.modExists("frozenRows")&&this.table.modules.frozenRows.detachRow(this)}deleteCells(){var e=this.cells.length;for(let t=0;to||null===o)&&(o=e)})),null!==o?!1!==s?o.toFixed(s):o:""},min:function(e,t,i){var o=null,s=void 0!==i.precision&&i.precision;return e.forEach((function(e){((e=Number(e)){this.recalcGroup(e)})))}recalcGroup(e){var t,i;e&&e.calcs&&(e.calcs.bottom&&(t=this.rowsToData(e.rows),i=this.generateRowData("bottom",t),e.calcs.bottom.updateData(i),e.calcs.bottom.reinitialize()),e.calcs.top&&(t=this.rowsToData(e.rows),i=this.generateRowData("top",t),e.calcs.top.updateData(i),e.calcs.top.reinitialize()))}generateTopRow(e){return this.generateRow("top",this.rowsToData(e))}generateBottomRow(e){return this.generateRow("bottom",this.rowsToData(e))}rowsToData(e){var t=[];return e.forEach((e=>{if(t.push(e.getData()),this.table.options.dataTree&&this.table.options.dataTreeChildColumnCalcs&&e.modules.dataTree.open){var i=this.rowsToData(this.table.modules.dataTree.getFilteredTreeChildren(e));t=t.concat(i)}})),t}generateRow(e,t){var i,o=this.generateRowData(e,t);return this.table.modExists("mutator")&&this.table.modules.mutator.disable(),i=new p(o,this,"calc"),this.table.modExists("mutator")&&this.table.modules.mutator.enable(),i.getElement().classList.add("tabulator-calcs","tabulator-calcs-"+e),i.component=!1,i.getComponent=()=>(this.component||(this.component=new r(this)),this.component),i.generateCells=()=>{var t=[];this.table.columnManager.columnsByIndex.forEach((o=>{this.genColumn.setField(o.getField()),this.genColumn.hozAlign=o.hozAlign,o.definition[e+"CalcFormatter"]&&this.table.modExists("format")?this.genColumn.modules.format={formatter:this.table.modules.format.getFormatter(o.definition[e+"CalcFormatter"]),params:o.definition[e+"CalcFormatterParams"]||{}}:this.genColumn.modules.format={formatter:this.table.modules.format.getFormatter("plaintext"),params:{}},this.genColumn.definition.cssClass=o.definition.cssClass;var s=new d(this.genColumn,i);s.getElement(),s.column=o,s.setWidth(),o.cells.push(s),t.push(s),o.visible||s.hide()})),this.cells=t},i}generateRowData(e,t){var i,o,s={},a="top"==e?this.topCalcs:this.botCalcs,l="top"==e?"topCalc":"botCalc";return a.forEach((function(e){var a=[];e.modules.columnCalcs&&e.modules.columnCalcs[l]&&(t.forEach((function(t){a.push(e.getFieldValue(t))})),o=l+"Params",i="function"==typeof e.modules.columnCalcs[o]?e.modules.columnCalcs[o](a,t):e.modules.columnCalcs[o],e.setFieldValue(s,e.modules.columnCalcs[l](a,t,i)))})),s}hasTopCalcs(){return!!this.topCalcs.length}hasBottomCalcs(){return!!this.botCalcs.length}redraw(){this.topRow&&this.topRow.normalizeHeight(!0),this.botRow&&this.botRow.normalizeHeight(!0)}getResults(){var e={};return this.table.options.groupBy&&this.table.modExists("groupRows")?this.table.modules.groupRows.getGroups(!0).forEach((t=>{e[t.getKey()]=this.getGroupResults(t)})):e={top:this.topRow?this.topRow.getData():{},bottom:this.botRow?this.botRow.getData():{}},e}getGroupResults(e){var t=e._getSelf(),i=e.getSubGroups(),o={};return i.forEach((e=>{o[e.getKey()]=this.getGroupResults(e)})),{top:t.calcs.top?t.calcs.top.getData():{},bottom:t.calcs.bottom?t.calcs.bottom.getData():{},groups:o}}}f.moduleName="columnCalcs",f.calculations=g;class b extends t{constructor(e){super(e),this.indent=10,this.field="",this.collapseEl=null,this.expandEl=null,this.branchEl=null,this.elementField=!1,this.startOpen=function(){},this.displayIndex=0}initialize(){var e=null,t=this.table.columnManager.getFirstVisibileColumn(),i=this.table.options;switch(this.field=i.dataTreeChildField,this.indent=i.dataTreeChildIndent,this.elementField=i.dataTreeElementColumn||!!t&&t.field,i.dataTreeBranchElement&&(!0===i.dataTreeBranchElement?(this.branchEl=document.createElement("div"),this.branchEl.classList.add("tabulator-data-tree-branch")):"string"==typeof i.dataTreeBranchElement?((e=document.createElement("div")).innerHTML=i.dataTreeBranchElement,this.branchEl=e.firstChild):this.branchEl=i.dataTreeBranchElement),i.dataTreeCollapseElement?"string"==typeof i.dataTreeCollapseElement?((e=document.createElement("div")).innerHTML=i.dataTreeCollapseElement,this.collapseEl=e.firstChild):this.collapseEl=i.dataTreeCollapseElement:(this.collapseEl=document.createElement("div"),this.collapseEl.classList.add("tabulator-data-tree-control"),this.collapseEl.tabIndex=0,this.collapseEl.innerHTML="
"),i.dataTreeExpandElement?"string"==typeof i.dataTreeExpandElement?((e=document.createElement("div")).innerHTML=i.dataTreeExpandElement,this.expandEl=e.firstChild):this.expandEl=i.dataTreeExpandElement:(this.expandEl=document.createElement("div"),this.expandEl.classList.add("tabulator-data-tree-control"),this.expandEl.tabIndex=0,this.expandEl.innerHTML="
"),typeof i.dataTreeStartExpanded){case"boolean":this.startOpen=function(e,t){return i.dataTreeStartExpanded};break;case"function":this.startOpen=i.dataTreeStartExpanded;break;default:this.startOpen=function(e,t){return i.dataTreeStartExpanded[t]}}}initializeRow(e){var t=e.getData()[this.field],i=Array.isArray(t),o=i||!i&&"object"==typeof t&&null!==t;!o&&e.modules.dataTree&&e.modules.dataTree.branchEl&&e.modules.dataTree.branchEl.parentNode.removeChild(e.modules.dataTree.branchEl),!o&&e.modules.dataTree&&e.modules.dataTree.controlEl&&e.modules.dataTree.controlEl.parentNode.removeChild(e.modules.dataTree.controlEl),e.modules.dataTree={index:e.modules.dataTree?e.modules.dataTree.index:0,open:!!o&&(e.modules.dataTree?e.modules.dataTree.open:this.startOpen(e.getComponent(),0)),controlEl:!(!e.modules.dataTree||!o)&&e.modules.dataTree.controlEl,branchEl:!(!e.modules.dataTree||!o)&&e.modules.dataTree.branchEl,parent:!!e.modules.dataTree&&e.modules.dataTree.parent,children:o}}layoutRow(e){var t=(this.elementField?e.getCell(this.elementField):e.getCells()[0]).getElement(),i=e.modules.dataTree;i.branchEl&&(i.branchEl.parentNode&&i.branchEl.parentNode.removeChild(i.branchEl),i.branchEl=!1),i.controlEl&&(i.controlEl.parentNode&&i.controlEl.parentNode.removeChild(i.controlEl),i.controlEl=!1),this.generateControlElement(e,t),e.getElement().classList.add("tabulator-tree-level-"+i.index),i.index&&(this.branchEl?(i.branchEl=this.branchEl.cloneNode(!0),t.insertBefore(i.branchEl,t.firstChild),this.table.rtl?i.branchEl.style.marginRight=(i.branchEl.offsetWidth+i.branchEl.style.marginLeft)*(i.index-1)+i.index*this.indent+"px":i.branchEl.style.marginLeft=(i.branchEl.offsetWidth+i.branchEl.style.marginRight)*(i.index-1)+i.index*this.indent+"px"):this.table.rtl?t.style.paddingRight=parseInt(window.getComputedStyle(t,null).getPropertyValue("padding-right"))+i.index*this.indent+"px":t.style.paddingLeft=parseInt(window.getComputedStyle(t,null).getPropertyValue("padding-left"))+i.index*this.indent+"px")}generateControlElement(e,t){var i=e.modules.dataTree,o=(t=t||e.getCells()[0].getElement(),i.controlEl);!1!==i.children&&(i.open?(i.controlEl=this.collapseEl.cloneNode(!0),i.controlEl.addEventListener("click",(t=>{t.stopPropagation(),this.collapseRow(e)}))):(i.controlEl=this.expandEl.cloneNode(!0),i.controlEl.addEventListener("click",(t=>{t.stopPropagation(),this.expandRow(e)}))),i.controlEl.addEventListener("mousedown",(e=>{e.stopPropagation()})),o&&o.parentNode===t?o.parentNode.replaceChild(i.controlEl,o):t.insertBefore(i.controlEl,t.firstChild))}setDisplayIndex(e){this.displayIndex=e}getDisplayIndex(){return this.displayIndex}getRows(e){var t=[];return e.forEach(((e,i)=>{var o;t.push(e),e instanceof p&&(e.create(),(o=e.modules.dataTree.children).index||!1===o.children||this.getChildren(e).forEach((e=>{e.create(),t.push(e)})))})),t}getChildren(e,t){var i=e.modules.dataTree,o=[],s=[];return!1!==i.children&&(i.open||t)&&(Array.isArray(i.children)||(i.children=this.generateChildren(e)),o=this.table.modExists("filter")&&this.table.options.dataTreeFilter?this.table.modules.filter.filter(i.children):i.children,this.table.modExists("sort")&&this.table.options.dataTreeSort&&this.table.modules.sort.sort(o),o.forEach((e=>{s.push(e),this.getChildren(e).forEach((e=>{s.push(e)}))}))),s}generateChildren(e){var t=[],i=e.getData()[this.field];return Array.isArray(i)||(i=[i]),i.forEach((i=>{var o=new p(i||{},this.table.rowManager);o.create(),o.modules.dataTree.index=e.modules.dataTree.index+1,o.modules.dataTree.parent=e,o.modules.dataTree.children&&(o.modules.dataTree.open=this.startOpen(o.getComponent(),o.modules.dataTree.index)),t.push(o)})),t}expandRow(e,t){var i=e.modules.dataTree;!1!==i.children&&(i.open=!0,e.reinitialize(),this.table.rowManager.refreshActiveData("tree",!1,!0),this.table.options.dataTreeRowExpanded(e.getComponent(),e.modules.dataTree.index))}collapseRow(e){var t=e.modules.dataTree;!1!==t.children&&(t.open=!1,e.reinitialize(),this.table.rowManager.refreshActiveData("tree",!1,!0),this.table.options.dataTreeRowCollapsed(e.getComponent(),e.modules.dataTree.index))}toggleRow(e){var t=e.modules.dataTree;!1!==t.children&&(t.open?this.collapseRow(e):this.expandRow(e))}getTreeParent(e){return!!e.modules.dataTree.parent&&e.modules.dataTree.parent.getComponent()}getFilteredTreeChildren(e){var t=e.modules.dataTree,i=[];return t.children&&(Array.isArray(t.children)||(t.children=this.generateChildren(e)),(this.table.modExists("filter")&&this.table.options.dataTreeFilter?this.table.modules.filter.filter(t.children):t.children).forEach((e=>{e instanceof p&&i.push(e)}))),i}rowDelete(e){var t,i=e.modules.dataTree.parent;i&&(!1!==(t=this.findChildIndex(e,i))&&i.data[this.field].splice(t,1),i.data[this.field].length||delete i.data[this.field],this.initializeRow(i),this.layoutRow(i)),this.table.rowManager.refreshActiveData("tree",!1,!0)}addTreeChildRow(e,t,i,o){var s=!1;"string"==typeof t&&(t=JSON.parse(t)),Array.isArray(e.data[this.field])||(e.data[this.field]=[],e.modules.dataTree.open=this.startOpen(e.getComponent(),e.modules.dataTree.index)),void 0!==o&&!1!==(s=this.findChildIndex(o,e))&&e.data[this.field].splice(i?s:s+1,0,t),!1===s&&(i?e.data[this.field].unshift(t):e.data[this.field].push(t)),this.initializeRow(e),this.layoutRow(e),this.table.rowManager.refreshActiveData("tree",!1,!0)}findChildIndex(e,t){var i=!1;return"object"==typeof e?e instanceof p?i=e.data:e instanceof RowComponent?i=e._getSelf().data:"undefined"!=typeof HTMLElement&&e instanceof HTMLElement&&t.modules.dataTree&&(i=t.modules.dataTree.children.find((t=>t instanceof p&&t.element===e)))&&(i=i.data):i=null!=e&&t.data[this.field].find((t=>t.data[this.table.options.index]==e)),i&&(Array.isArray(t.data[this.field])&&(i=t.data[this.field].indexOf(i)),-1==i&&(i=!1)),i}getTreeChildren(e,t,i){var o=e.modules.dataTree,s=[];return o.children&&(Array.isArray(o.children)||(o.children=this.generateChildren(e)),o.children.forEach((e=>{e instanceof p&&(s.push(t?e.getComponent():e),i&&(s=s.concat(this.getTreeChildren(e,t,i))))}))),s}checkForRestyle(e){e.row.cells.indexOf(e)||e.row.reinitialize()}getChildField(){return this.field}redrawNeeded(e){return!!this.field&&void 0!==e[this.field]||!!this.elementField&&void 0!==e[this.elementField]}}b.moduleName="dataTree";var v={csv:function(e,t,i){var o=t&&t.delimiter?t.delimiter:",",s=[],a=[];e.forEach((e=>{var t=[];switch(e.type){case"group":console.warn("Download Warning - CSV downloader cannot process row groups");break;case"calc":console.warn("Download Warning - CSV downloader cannot process column calculations");break;case"header":e.columns.forEach(((e,t)=>{e&&1===e.depth&&(a[t]=void 0===e.value||null===e.value?"":'"'+String(e.value).split('"').join('""')+'"')}));break;case"row":e.columns.forEach((e=>{if(e){switch(typeof e.value){case"object":e.value=JSON.stringify(e.value);break;case"undefined":case"null":e.value=""}t.push('"'+String(e.value).split('"').join('""')+'"')}})),s.push(t.join(o))}})),a.length&&s.unshift(a.join(o)),s=s.join("\n"),t.bom&&(s="\ufeff"+s),i(s,"text/csv")},json:function(e,t,i){var o=[];e.forEach((e=>{var t={};switch(e.type){case"header":break;case"group":console.warn("Download Warning - JSON downloader cannot process row groups");break;case"calc":console.warn("Download Warning - JSON downloader cannot process column calculations");break;case"row":e.columns.forEach((e=>{e&&(t[e.component.getField()]=e.value)})),o.push(t)}})),i(o=JSON.stringify(o,null,"\t"),"application/json")},pdf:function(e,t,i){var o=[],s=[],a={},l=t.rowGroupStyles||{fontStyle:"bold",fontSize:12,cellPadding:6,fillColor:220},n=t.rowCalcStyles||{fontStyle:"bold",fontSize:10,cellPadding:4,fillColor:232},r=t.jsPDF||{},h=t&&t.title?t.title:"";function d(e,t){var i=[];return e.columns.forEach((e=>{var o;if(e){switch(typeof e.value){case"object":e.value=JSON.stringify(e.value);break;case"undefined":case"null":e.value=""}o={content:e.value,colSpan:e.width,rowSpan:e.height},t&&(o.styles=t),i.push(o)}else i.push("")})),i}r.orientation||(r.orientation=t.orientation||"landscape"),r.unit||(r.unit="pt"),e.forEach((e=>{switch(e.type){case"header":o.push(d(e));break;case"group":s.push(d(e,l));break;case"calc":s.push(d(e,n));break;case"row":s.push(d(e))}}));var c=new jsPDF(r);t&&t.autoTable&&(a="function"==typeof t.autoTable?t.autoTable(c)||{}:t.autoTable),h&&(a.addPageContent=function(e){c.text(h,40,30)}),a.head=o,a.body=s,c.autoTable(a),t&&t.documentProcessing&&t.documentProcessing(c),i(c.output("arraybuffer"),"application/pdf")},xlsx:function(e,t,i){var o=t.sheetName||"Sheet1",s=XLSX.utils.book_new();function a(){var t=[],i=[],o={},s={s:{c:0,r:0},e:{c:e[0]?e[0].columns.reduce(((e,t)=>e+(t&&t.width?t.width:1)),0):0,r:e.length}};return e.forEach(((e,o)=>{var s=[];e.columns.forEach((function(e,t){e?(s.push(e.value instanceof Date||"object"!=typeof e.value?e.value:JSON.stringify(e.value)),(e.width>1||e.height>-1)&&i.push({s:{r:o,c:t},e:{r:o+e.height-1,c:t+e.width-1}})):s.push("")})),t.push(s)})),XLSX.utils.sheet_add_aoa(o,t),o["!ref"]=XLSX.utils.encode_range(s),i.length&&(o["!merges"]=i),o}if(s.SheetNames=[],s.Sheets={},t.sheetOnly)i(a());else{if(t.sheets)for(var l in t.sheets)!0===t.sheets[l]?(s.SheetNames.push(l),s.Sheets[l]=a()):(s.SheetNames.push(l),this.modules.comms.send(t.sheets[l],"download","intercept",{type:"xlsx",options:{sheetOnly:!0},active:this.active,intercept:function(e){s.Sheets[l]=e}}));else s.SheetNames.push(o),s.Sheets[o]=a();t.documentProcessing&&(s=t.documentProcessing(s)),i(function(e){for(var t=new ArrayBuffer(e.length),i=new Uint8Array(t),o=0;o!=e.length;++o)i[o]=255&e.charCodeAt(o);return t}(XLSX.write(s,{bookType:"xlsx",bookSST:!0,type:"binary"})),"application/octet-stream")}},html:function(e,t,i){this.modExists("export",!0)&&i(this.modules.export.genereateHTMLTable(e),"text/html")}};class w extends t{constructor(e){super(e)}download(e,t,i,o,s){var a=!1;if("function"==typeof e?a=e:w.downloaders[e]?a=w.downloaders[e]:console.warn("Download Error - No such download type found: ",e),a){var l=this.generateExportList(o);a.call(this.table,l,i||{},(function(i,o){s?!0===s?this.triggerDownload(i,o,e,t,!0):s(i):this.triggerDownload(i,o,e,t)}))}}generateExportList(e){var t=this.table.modules.export.generateExportList(this.table.options.downloadConfig,!1,e||this.table.options.downloadRowRange,"download"),i=this.table.options.groupHeaderDownload;return i&&!Array.isArray(i)&&(i=[i]),t.forEach((e=>{var t;"group"===e.type&&(t=e.columns[0],i&&i[e.indent]&&(t.value=i[e.indent](t.value,e.component._group.getRowCount(),e.component._group.getData(),e.component)))})),t}triggerDownload(e,t,i,o,s){var a=document.createElement("a"),l=new Blob([e],{type:t});o=o||"Tabulator."+("function"==typeof i?"txt":i);(l=this.table.options.downloadReady.call(this.table,e,l))&&(s?window.open(window.URL.createObjectURL(l)):navigator.msSaveOrOpenBlob?navigator.msSaveOrOpenBlob(l,o):(a.setAttribute("href",window.URL.createObjectURL(l)),a.setAttribute("download",o),a.style.display="none",document.body.appendChild(a),a.click(),document.body.removeChild(a)),this.table.options.downloadComplete&&this.table.options.downloadComplete())}commsReceived(e,t,i){switch(t){case"intercept":this.download(i.type,"",i.options,i.active,i.intercept)}}}w.moduleName="download",w.downloaders=v;var E={input:function(e,t,i,o,s){var a=e.getValue(),l=document.createElement("input");if(l.setAttribute("type",s.search?"search":"text"),l.style.padding="4px",l.style.width="100%",l.style.boxSizing="border-box",s.elementAttributes&&"object"==typeof s.elementAttributes)for(let e in s.elementAttributes)"+"==e.charAt(0)?(e=e.slice(1),l.setAttribute(e,l.getAttribute(e)+s.elementAttributes["+"+e])):l.setAttribute(e,s.elementAttributes[e]);function n(e){null==a&&""!==l.value||l.value!==a?i(l.value)&&(a=l.value):o()}return l.value=void 0!==a?a:"",t((function(){l.focus({preventScroll:!0}),l.style.height="100%"})),l.addEventListener("change",n),l.addEventListener("blur",n),l.addEventListener("keydown",(function(e){switch(e.keyCode){case 13:n();break;case 27:o();break;case 35:case 36:e.stopPropagation()}})),s.mask&&this.table.modules.edit.maskInput(l,s),l},textarea:function(e,t,i,o,s){var a=e.getValue(),l=s.verticalNavigation||"hybrid",n=String(null!=a?a:""),r=((n.match(/(?:\r\n|\r|\n)/g)||[]).length,document.createElement("textarea")),h=0;if(r.style.display="block",r.style.padding="2px",r.style.height="100%",r.style.width="100%",r.style.boxSizing="border-box",r.style.whiteSpace="pre-wrap",r.style.resize="none",s.elementAttributes&&"object"==typeof s.elementAttributes)for(let e in s.elementAttributes)"+"==e.charAt(0)?(e=e.slice(1),r.setAttribute(e,r.getAttribute(e)+s.elementAttributes["+"+e])):r.setAttribute(e,s.elementAttributes[e]);function d(t){null==a&&""!==r.value||r.value!==a?(i(r.value)&&(a=r.value),setTimeout((function(){e.getRow().normalizeHeight()}),300)):o()}return r.value=n,t((function(){r.focus({preventScroll:!0}),r.style.height="100%",r.scrollHeight,r.style.height=r.scrollHeight+"px",e.getRow().normalizeHeight()})),r.addEventListener("change",d),r.addEventListener("blur",d),r.addEventListener("keyup",(function(){r.style.height="";var t=r.scrollHeight;r.style.height=t+"px",t!=h&&(h=t,e.getRow().normalizeHeight())})),r.addEventListener("keydown",(function(e){switch(e.keyCode){case 27:o();break;case 38:("editor"==l||"hybrid"==l&&r.selectionStart)&&(e.stopImmediatePropagation(),e.stopPropagation());break;case 40:("editor"==l||"hybrid"==l&&r.selectionStart!==r.value.length)&&(e.stopImmediatePropagation(),e.stopPropagation());break;case 35:case 36:e.stopPropagation()}})),s.mask&&this.table.modules.edit.maskInput(r,s),r},number:function(e,t,i,o,s){var a=e.getValue(),l=s.verticalNavigation||"editor",n=document.createElement("input");if(n.setAttribute("type","number"),void 0!==s.max&&n.setAttribute("max",s.max),void 0!==s.min&&n.setAttribute("min",s.min),void 0!==s.step&&n.setAttribute("step",s.step),n.style.padding="4px",n.style.width="100%",n.style.boxSizing="border-box",s.elementAttributes&&"object"==typeof s.elementAttributes)for(let e in s.elementAttributes)"+"==e.charAt(0)?(e=e.slice(1),n.setAttribute(e,n.getAttribute(e)+s.elementAttributes["+"+e])):n.setAttribute(e,s.elementAttributes[e]);n.value=a;var r=function(e){h()};function h(){var e=n.value;isNaN(e)||""===e||(e=Number(e)),e!==a?i(e)&&(a=e):o()}return t((function(){n.removeEventListener("blur",r),n.focus({preventScroll:!0}),n.style.height="100%",n.addEventListener("blur",r)})),n.addEventListener("keydown",(function(e){switch(e.keyCode){case 13:h();break;case 27:o();break;case 38:case 40:"editor"==l&&(e.stopImmediatePropagation(),e.stopPropagation());break;case 35:case 36:e.stopPropagation()}})),s.mask&&this.table.modules.edit.maskInput(n,s),n},range:function(e,t,i,o,s){var a=e.getValue(),l=document.createElement("input");if(l.setAttribute("type","range"),void 0!==s.max&&l.setAttribute("max",s.max),void 0!==s.min&&l.setAttribute("min",s.min),void 0!==s.step&&l.setAttribute("step",s.step),l.style.padding="4px",l.style.width="100%",l.style.boxSizing="border-box",s.elementAttributes&&"object"==typeof s.elementAttributes)for(let e in s.elementAttributes)"+"==e.charAt(0)?(e=e.slice(1),l.setAttribute(e,l.getAttribute(e)+s.elementAttributes["+"+e])):l.setAttribute(e,s.elementAttributes[e]);function n(){var e=l.value;isNaN(e)||""===e||(e=Number(e)),e!=a?i(e)&&(a=e):o()}return l.value=a,t((function(){l.focus({preventScroll:!0}),l.style.height="100%"})),l.addEventListener("blur",(function(e){n()})),l.addEventListener("keydown",(function(e){switch(e.keyCode){case 13:n();break;case 27:o()}})),l},select:function(e,t,i,s,a){var l=this,n=e.getElement(),r=e.getValue(),h=a.verticalNavigation||"editor",d=void 0!==r||null===r?Array.isArray(r)?r:[r]:void 0!==a.defaultValue?a.defaultValue:[],c=document.createElement("input"),u=document.createElement("div"),m=a.multiselect,p=[],g={},f=[],b=[],v=!0,w=!1,E="",C=null;function y(t){var i,o={},s=l.table.getData();return(i=t?l.table.columnManager.getColumnByField(t):e.getColumn()._getSelf())?s.forEach((function(e){var t=i.getFieldValue(e);null!=t&&""!==t&&(o[t]=!0)})):console.warn("unable to find matching column to create select lookup list:",t),Object.keys(o)}function x(t,i){var o=[],s=[];function l(e){e={label:e.label,value:e.value,itemParams:e.itemParams,elementAttributes:e.elementAttributes,element:!1};return i.indexOf(e.value)>-1&&M(e),o.push(e),s.push(e),e}if("function"==typeof t&&(t=t(e)),Array.isArray(t))t.forEach((function(e){var t;"object"==typeof e?e.options?(t={label:e.label,group:!0,itemParams:e.itemParams,elementAttributes:e.elementAttributes,element:!1},s.push(t),e.options.forEach((function(e){l(e)}))):l(e):(t={label:e,value:e,element:!1},i.indexOf(t.value)>-1&&M(t),o.push(t),s.push(t))}));else for(var n in t){var r={label:t[n],value:n,element:!1};i.indexOf(r.value)>-1&&M(r),o.push(r),s.push(r)}a.sortValuesList&&(o.sort(((e,t)=>e.labelt.label?1:0)),s.sort(((e,t)=>e.labelt.label?1:0)),"asc"!==a.sortValuesList&&(o.reverse(),s.reverse())),p=o,f=s,function(){for(;u.firstChild;)u.removeChild(u.firstChild);f.forEach((function(t){var i=t.element;if(!i){if(i=document.createElement("div"),t.label=a.listItemFormatter?a.listItemFormatter(t.value,t.label,e,i,t.itemParams):t.label,t.group?(i.classList.add("tabulator-edit-select-list-group"),i.tabIndex=0,i.innerHTML=""===t.label?" ":t.label):(i.classList.add("tabulator-edit-select-list-item"),i.tabIndex=0,i.innerHTML=""===t.label?" ":t.label,i.addEventListener("click",(function(){w=!0,setTimeout((()=>{w=!1}),10),m?(D(t),c.focus()):T(t)})),b.indexOf(t)>-1&&i.classList.add("active")),t.elementAttributes&&"object"==typeof t.elementAttributes)for(let e in t.elementAttributes)"+"==e.charAt(0)?(e=e.slice(1),i.setAttribute(e,c.getAttribute(e)+t.elementAttributes["+"+e])):i.setAttribute(e,t.elementAttributes[e]);i.addEventListener("mousedown",(function(){v=!1,setTimeout((function(){v=!0}),10)})),t.element=i}u.appendChild(i)}))}()}function R(e,t){!m&&g&&g.element&&g.element.classList.remove("active"),g&&g.element&&g.element.classList.remove("focused"),g=e,e.element&&(e.element.classList.add("focused"),t&&e.element.classList.add("active")),e&&e.element&&e.element.scrollIntoView&&e.element.scrollIntoView({behavior:"smooth",block:"nearest",inline:"start"})}function M(e){-1==b.indexOf(e)&&(b.push(e),R(e,!0)),z()}function L(e){var t=b[e];e>-1&&(b.splice(e,1),t.element&&t.element.classList.remove("active"))}function D(e){e||(e=g);var t=b.indexOf(e);t>-1?L(t):(!0!==m&&b.length>=m&&L(0),M(e)),z()}function T(e){H(),e||(e=g),e&&(c.value=e.label,i(e.value)),d=[e.value]}function k(e){e||H();var t=[];b.forEach((e=>{t.push(e.value)})),d=t,i(t)}function z(){var e=[];b.forEach((t=>{e.push(t.label)})),c.value=e.join(", "),!1===l.currentCell&&k(!0)}function S(){H(),s()}function H(){u.parentNode&&u.parentNode.removeChild(u),l.table.rowManager.element.removeEventListener("scroll",S)}if((Array.isArray(a)||!Array.isArray(a)&&"object"==typeof a&&!a.values)&&(console.warn("DEPRECATION WARNING - values for the select editor must now be passed into the values property of the editorParams object, not as the editorParams object"),a={values:a}),c.setAttribute("type","text"),c.style.padding="4px",c.style.width="100%",c.style.boxSizing="border-box",c.style.cursor="default",c.readOnly=0!=this.currentCell,a.elementAttributes&&"object"==typeof a.elementAttributes)for(let e in a.elementAttributes)"+"==e.charAt(0)?(e=e.slice(1),c.setAttribute(e,c.getAttribute(e)+a.elementAttributes["+"+e])):c.setAttribute(e,a.elementAttributes[e]);return c.value=void 0!==r||null===r?r:"",c.addEventListener("search",(function(e){c.value||(!function(){var e=b.length;for(let t=0;t0&&R(p[t-1],!m));break;case 40:t=p.indexOf(g),("editor"==h||"hybrid"==h&&t=38&&e.keyCode<=90&&function(e){clearTimeout(C);var t=String.fromCharCode(event.keyCode).toLowerCase();E+=t.toLowerCase();var i=p.find((e=>void 0!==e.label&&e.label.toLowerCase().startsWith(E)));i&&R(i,!m),C=setTimeout((()=>{E=""}),800)}(e.keyCode)}})),c.addEventListener("blur",(function(e){v&&(m?k():S())})),c.addEventListener("focus",(function(e){w||function(){if(b=[],!u.parentNode){!0===a.values?x(y(),d):"string"==typeof a.values?x(y(a.values),d):x(a.values||[],d);var e=o.elOffset(n);u.style.minWidth=n.offsetWidth+"px",u.style.top=e.top+n.offsetHeight+"px",u.style.left=e.left+"px",u.addEventListener("mousedown",(function(e){v=!1,setTimeout((function(){v=!0}),10)})),document.body.appendChild(u)}}()})),(u=document.createElement("div")).classList.add("tabulator-edit-select-list"),t((function(){c.style.height="100%",c.focus({preventScroll:!0})})),setTimeout((()=>{this.table.rowManager.element.addEventListener("scroll",S)}),10),c},autocomplete:function(e,t,i,s,a){var l=this,n=e.getElement(),r=e.getValue(),h=a.verticalNavigation||"editor",d=void 0!==r||null===r?r:void 0!==a.defaultValue?a.defaultValue:"",c=document.createElement("input"),u=document.createElement("div"),m=[],p=!1,g=!0,f=!1;if(c.setAttribute("type","search"),c.style.padding="4px",c.style.width="100%",c.style.boxSizing="border-box",a.elementAttributes&&"object"==typeof a.elementAttributes)for(let e in a.elementAttributes)"+"==e.charAt(0)?(e=e.slice(1),c.setAttribute(e,c.getAttribute(e)+a.elementAttributes["+"+e])):c.setAttribute(e,a.elementAttributes[e]);function b(){!0===a.values?f=v():"string"==typeof a.values&&(f=v(a.values))}function v(t){var i,o={},s=l.table.getData();return(i=t?l.table.columnManager.getColumnByField(t):e.getColumn()._getSelf())?(s.forEach((function(e){var t=i.getFieldValue(e);null!=t&&""!==t&&(o[t]=!0)})),o=a.sortValuesList?"asc"==a.sortValuesList?Object.keys(o).sort():Object.keys(o).sort().reverse():Object.keys(o)):console.warn("unable to find matching column to create autocomplete lookup list:",t),o}function w(e,t){var i,o,s=[];i=f||(a.values||[]),a.searchFunc?(s=a.searchFunc(e,i))instanceof Promise?(E(void 0!==a.searchingPlaceholder?a.searchingPlaceholder:"Searching..."),s.then((e=>{x(C(e),t)})).catch((e=>{console.err("error in autocomplete search promise:",e)}))):x(C(s),t):(o=C(i),""===e?a.showListOnEmpty&&(s=o):o.forEach((function(t){null===t.value&&void 0===t.value||(String(t.value).toLowerCase().indexOf(String(e).toLowerCase())>-1||String(t.title).toLowerCase().indexOf(String(e).toLowerCase())>-1)&&s.push(t)})),x(s,t))}function E(e){var t=document.createElement("div");y(),!1!==e&&(t.classList.add("tabulator-edit-select-list-notice"),t.tabIndex=0,e instanceof Node?t.appendChild(e):t.innerHTML=e,u.appendChild(t))}function C(e){var t=[];if(Array.isArray(e))e.forEach((function(e){var i={};"object"==typeof e?(i.title=a.listItemFormatter?a.listItemFormatter(e.value,e.label):e.label,i.value=e.value):(i.title=a.listItemFormatter?a.listItemFormatter(e,e):e,i.value=e),t.push(i)}));else for(var i in e){var o={title:a.listItemFormatter?a.listItemFormatter(i,e[i]):e[i],value:i};t.push(o)}return t}function y(){for(;u.firstChild;)u.removeChild(u.firstChild)}function x(e,t){e.length?function(e,t){var i=!1;y(),(m=e).forEach((function(e){var o=e.element;o||((o=document.createElement("div")).classList.add("tabulator-edit-select-list-item"),o.tabIndex=0,o.innerHTML=e.title,o.addEventListener("click",(function(t){M(e),R()})),o.addEventListener("mousedown",(function(e){g=!1,setTimeout((function(){g=!0}),10)})),e.element=o,t&&e.value==r&&(c.value=e.title,e.element.classList.add("active"),i=!0),e===p&&(e.element.classList.add("active"),i=!0)),u.appendChild(o)})),i||M(!1)}(e,t):a.emptyPlaceholder&&E(a.emptyPlaceholder)}function R(){L(),p?r!==p.value?(r=p.value,c.value=p.title,i(p.value)):s():a.freetext||a.allowEmpty&&""===c.value?(r=c.value,i(c.value)):s()}function M(e,t){p&&p.element&&p.element.classList.remove("active"),p=e,e&&e.element&&e.element.classList.add("active"),e&&e.element&&e.element.scrollIntoView&&e.element.scrollIntoView({behavior:"smooth",block:"nearest",inline:"start"})}function L(){u.parentNode&&u.parentNode.removeChild(u),l.table.rowManager.element.removeEventListener("scroll",D)}function D(){L(),s()}return u.classList.add("tabulator-edit-select-list"),u.addEventListener("mousedown",(function(e){g=!1,setTimeout((function(){g=!0}),10)})),c.addEventListener("keydown",(function(e){var t;switch(e.keyCode){case 38:t=m.indexOf(p),("editor"==h||"hybrid"==h&&t)&&(e.stopImmediatePropagation(),e.stopPropagation(),e.preventDefault(),M(t>0&&m[t-1]));break;case 40:t=m.indexOf(p),("editor"==h||"hybrid"==h&&t{this.table.rowManager.element.addEventListener("scroll",D)}),10),b(),c.value=d,w(d,!0),c},star:function(e,t,i,o,s){var a=this,l=e.getElement(),n=e.getValue(),r=l.getElementsByTagName("svg").length||5,h=l.getElementsByTagName("svg")[0]?l.getElementsByTagName("svg")[0].getAttribute("width"):14,d=[],c=document.createElement("div"),u=document.createElementNS("http://www.w3.org/2000/svg","svg");function m(e){d.forEach((function(t,i){i'):("ie"==a.table.browser?t.setAttribute("class","tabulator-star-inactive"):t.classList.replace("tabulator-star-active","tabulator-star-inactive"),t.innerHTML='')}))}function p(e){var t=document.createElement("span"),o=u.cloneNode(!0);d.push(o),t.addEventListener("mouseenter",(function(t){t.stopPropagation(),t.stopImmediatePropagation(),m(e)})),t.addEventListener("mousemove",(function(e){e.stopPropagation(),e.stopImmediatePropagation()})),t.addEventListener("click",(function(t){t.stopPropagation(),t.stopImmediatePropagation(),i(e),l.blur()})),t.appendChild(o),c.appendChild(t)}function g(e){n=e,m(e)}if(l.style.whiteSpace="nowrap",l.style.overflow="hidden",l.style.textOverflow="ellipsis",c.style.verticalAlign="middle",c.style.display="inline-block",c.style.padding="4px",u.setAttribute("width",h),u.setAttribute("height",h),u.setAttribute("viewBox","0 0 512 512"),u.setAttribute("xml:space","preserve"),u.style.padding="0 1px",s.elementAttributes&&"object"==typeof s.elementAttributes)for(let e in s.elementAttributes)"+"==e.charAt(0)?(e=e.slice(1),c.setAttribute(e,c.getAttribute(e)+s.elementAttributes["+"+e])):c.setAttribute(e,s.elementAttributes[e]);for(var f=1;f<=r;f++)p(f);return m(n=Math.min(parseInt(n),r)),c.addEventListener("mousemove",(function(e){m(0)})),c.addEventListener("click",(function(e){i(0)})),l.addEventListener("blur",(function(e){o()})),l.addEventListener("keydown",(function(e){switch(e.keyCode){case 39:g(n+1);break;case 37:g(n-1);break;case 13:i(n);break;case 27:o()}})),c},progress:function(e,t,i,o,s){var a,l,n=e.getElement(),r=void 0===s.max?n.getElementsByTagName("div")[0].getAttribute("max")||100:s.max,h=void 0===s.min?n.getElementsByTagName("div")[0].getAttribute("min")||0:s.min,d=(r-h)/100,c=e.getValue()||0,u=document.createElement("div"),m=document.createElement("div");function p(){var e=window.getComputedStyle(n,null),t=d*Math.round(m.offsetWidth/((n.clientWidth-parseInt(e.getPropertyValue("padding-left"))-parseInt(e.getPropertyValue("padding-right")))/100))+h;i(t),n.setAttribute("aria-valuenow",t),n.setAttribute("aria-label",c)}if(u.style.position="absolute",u.style.right="0",u.style.top="0",u.style.bottom="0",u.style.width="5px",u.classList.add("tabulator-progress-handle"),m.style.display="inline-block",m.style.position="relative",m.style.height="100%",m.style.backgroundColor="#488CE9",m.style.maxWidth="100%",m.style.minWidth="0%",s.elementAttributes&&"object"==typeof s.elementAttributes)for(let e in s.elementAttributes)"+"==e.charAt(0)?(e=e.slice(1),m.setAttribute(e,m.getAttribute(e)+s.elementAttributes["+"+e])):m.setAttribute(e,s.elementAttributes[e]);return n.style.padding="4px 4px",c=Math.min(parseFloat(c),r),c=Math.max(parseFloat(c),h),c=Math.round((c-h)/d),m.style.width=c+"%",n.setAttribute("aria-valuemin",h),n.setAttribute("aria-valuemax",r),m.appendChild(u),u.addEventListener("mousedown",(function(e){a=e.screenX,l=m.offsetWidth})),u.addEventListener("mouseover",(function(){u.style.cursor="ew-resize"})),n.addEventListener("mousemove",(function(e){a&&(m.style.width=l+e.screenX-a+"px")})),n.addEventListener("mouseup",(function(e){a&&(e.stopPropagation(),e.stopImmediatePropagation(),a=!1,l=!1,p())})),n.addEventListener("keydown",(function(e){switch(e.keyCode){case 39:e.preventDefault(),m.style.width=m.clientWidth+n.clientWidth/100+"px";break;case 37:e.preventDefault(),m.style.width=m.clientWidth-n.clientWidth/100+"px";break;case 9:case 13:p();break;case 27:o()}})),n.addEventListener("blur",(function(){o()})),m},tickCross:function(e,t,i,o,s){var a=e.getValue(),l=document.createElement("input"),n=s.tristate,r=void 0===s.indeterminateValue?null:s.indeterminateValue,h=!1;if(l.setAttribute("type","checkbox"),l.style.marginTop="5px",l.style.boxSizing="border-box",s.elementAttributes&&"object"==typeof s.elementAttributes)for(let e in s.elementAttributes)"+"==e.charAt(0)?(e=e.slice(1),l.setAttribute(e,l.getAttribute(e)+s.elementAttributes["+"+e])):l.setAttribute(e,s.elementAttributes[e]);function d(e){return n?e?h?r:l.checked:l.checked&&!h?(l.checked=!1,l.indeterminate=!0,h=!0,r):(h=!1,l.checked):l.checked}return l.value=a,!n||void 0!==a&&a!==r&&""!==a||(h=!0,l.indeterminate=!0),"firefox"!=this.table.browser&&t((function(){l.focus({preventScroll:!0})})),l.checked=!0===a||"true"===a||"True"===a||1===a,t((function(){l.focus()})),l.addEventListener("change",(function(e){i(d())})),l.addEventListener("blur",(function(e){i(d(!0))})),l.addEventListener("keydown",(function(e){13==e.keyCode&&i(d()),27==e.keyCode&&o()})),l}};class C extends t{constructor(e){super(e),this.currentCell=!1,this.mouseClick=!1,this.recursionBlock=!1,this.invalidEdit=!1,this.editedCells=[]}initializeColumn(e){var t={editor:!1,blocked:!1,check:e.definition.editable,params:e.definition.editorParams||{}};switch(typeof e.definition.editor){case"string":C.editors[e.definition.editor]?t.editor=C.editors[e.definition.editor]:console.warn("Editor Error - No such editor found: ",e.definition.editor);break;case"function":t.editor=e.definition.editor;break;case"boolean":!0===e.definition.editor&&("function"!=typeof e.definition.formatter?C.editors[e.definition.formatter]?t.editor=C.editors[e.definition.formatter]:t.editor=C.editors.input:console.warn("Editor Error - Cannot auto lookup editor for a custom formatter: ",e.definition.formatter))}t.editor&&(e.modules.edit=t)}getCurrentCell(){return!!this.currentCell&&this.currentCell.getComponent()}clearEditor(e){var t,i=this.currentCell;if(this.invalidEdit=!1,i){for(this.currentCell=!1,t=i.getElement(),e?i.validate():t.classList.remove("tabulator-validation-fail"),t.classList.remove("tabulator-editing");t.firstChild;)t.removeChild(t.firstChild);i.row.getElement().classList.remove("tabulator-row-editing")}}cancelEdit(){if(this.currentCell){var e=this.currentCell,t=this.currentCell.getComponent();this.clearEditor(!0),e.setValueActual(e.getValue()),e.cellRendered(),("textarea"==e.column.definition.editor||e.column.definition.variableHeight)&&e.row.normalizeHeight(!0),e.column.cellEvents.cellEditCancelled&&e.column.cellEvents.cellEditCancelled.call(this.table,t),this.table.options.cellEditCancelled.call(this.table,t)}}bindEditor(e){var t=this,i=e.getElement(!0);i.setAttribute("tabindex",0),i.addEventListener("click",(function(e){i.classList.contains("tabulator-editing")||i.focus({preventScroll:!0})})),i.addEventListener("mousedown",(function(e){2===e.button?e.preventDefault():t.mouseClick=!0})),i.addEventListener("focus",(function(i){t.recursionBlock||t.edit(e,i,!1)}))}focusCellNoEvent(e,t){this.recursionBlock=!0,t&&"ie"===this.table.browser||e.getElement().focus({preventScroll:!0}),this.recursionBlock=!1}editCell(e,t){this.focusCellNoEvent(e),this.edit(e,!1,t)}focusScrollAdjust(e){if("virtual"==this.table.rowManager.getRenderMode()){var t=this.table.rowManager.element.scrollTop,i=this.table.rowManager.element.clientHeight+this.table.rowManager.element.scrollTop,o=e.row.getElement();o.offsetTop;o.offsetTopi&&(this.table.rowManager.element.scrollTop+=o.offsetTop+o.offsetHeight-i);var s=this.table.rowManager.element.scrollLeft,a=this.table.rowManager.element.clientWidth+this.table.rowManager.element.scrollLeft,l=e.getElement();l.offsetLeft;this.table.modExists("frozenColumns")&&(s+=parseInt(this.table.modules.frozenColumns.leftMargin),a-=parseInt(this.table.modules.frozenColumns.rightMargin)),this.table.options.virtualDomHoz&&(s-=parseInt(this.table.vdomHoz.vDomPadLeft),a-=parseInt(this.table.vdomHoz.vDomPadLeft)),l.offsetLefta&&(this.table.rowManager.element.scrollLeft+=l.offsetLeft+l.offsetWidth-a)}}edit(e,t,i){var o,s,a,l=this,n=!0,r=function(){},h=e.getElement();if(!this.currentCell){if(e.column.modules.edit.blocked)return this.mouseClick=!1,h.blur(),!1;switch(t&&t.stopPropagation(),typeof e.column.modules.edit.check){case"function":n=e.column.modules.edit.check(e.getComponent());break;case"boolean":n=e.column.modules.edit.check}if(n||i){if(l.cancelEdit(),l.currentCell=e,this.focusScrollAdjust(e),s=e.getComponent(),this.mouseClick&&(this.mouseClick=!1,e.column.cellEvents.cellClick&&e.column.cellEvents.cellClick.call(this.table,t,s)),e.column.cellEvents.cellEditing&&e.column.cellEvents.cellEditing.call(this.table,s),l.table.options.cellEditing.call(this.table,s),a="function"==typeof e.column.modules.edit.params?e.column.modules.edit.params(s):e.column.modules.edit.params,!1===(o=e.column.modules.edit.editor.call(l,s,(function(e){r=e}),(function(t){if(l.currentCell===e){var i=!0;return e.column.modules.validate&&l.table.modExists("validate")&&"manual"!=l.table.options.validationMode&&(i=l.table.modules.validate.validate(e.column.modules.validate,e,t)),!0===i||"highlight"===l.table.options.validationMode?(l.clearEditor(),e.modules.edit||(e.modules.edit={}),e.modules.edit.edited=!0,-1==l.editedCells.indexOf(e)&&l.editedCells.push(e),e.setValue(t,!0),l.table.options.dataTree&&l.table.modExists("dataTree")&&l.table.modules.dataTree.checkForRestyle(e),!0===i||(h.classList.add("tabulator-validation-fail"),l.table.options.validationFailed.call(l.table,e.getComponent(),t,i),!1)):(l.invalidEdit=!0,h.classList.add("tabulator-validation-fail"),l.focusCellNoEvent(e,!0),r(),l.table.options.validationFailed.call(l.table,e.getComponent(),t,i),!1)}}),(function(){l.currentCell===e&&(l.cancelEdit(),l.table.options.dataTree&&l.table.modExists("dataTree")&&l.table.modules.dataTree.checkForRestyle(e))}),a)))return h.blur(),!1;if(!(o instanceof Node))return console.warn("Edit Error - Editor should return an instance of Node, the editor returned:",o),h.blur(),!1;for(h.classList.add("tabulator-editing"),e.row.getElement().classList.add("tabulator-row-editing");h.firstChild;)h.removeChild(h.firstChild);h.appendChild(o),r();for(var d=h.children,c=0;c{var l=e.value.length,n=t.key;if(t.keyCode>46){if(l>=i.length)return t.preventDefault(),t.stopPropagation(),!1;switch(i[l]){case o:if(n.toUpperCase()==n.toLowerCase())return t.preventDefault(),t.stopPropagation(),!1;break;case s:if(isNaN(n))return t.preventDefault(),t.stopPropagation(),!1;break;case a:break;default:if(n!==i[l])return t.preventDefault(),t.stopPropagation(),!1}}})),e.addEventListener("keyup",(i=>{i.keyCode>46&&t.maskAutoFill&&l(e.value.length)})),e.placeholder||(e.placeholder=i),t.maskAutoFill&&l(e.value.length)}getEditedCells(){var e=[];return this.editedCells.forEach((t=>{e.push(t.getComponent())})),e}clearEdited(e){var t;e.modules.edit&&e.modules.edit.edited&&(e.modules.edit.edited=!1,e.modules.validate&&(e.modules.validate.invalid=!1)),(t=this.editedCells.indexOf(e))>-1&&this.editedCells.splice(t,1)}}C.moduleName="edit",C.editors=E;class y{constructor(e,t,i,o){this.type=e,this.columns=t,this.component=i||!1,this.indent=o||0}}class x{constructor(e,t,i,o,s){this.value=e,this.component=t||!1,this.width=i,this.height=o,this.depth=s}}class R extends t{constructor(e){super(e),this.config={},this.cloneTableStyle=!0,this.colVisProp=""}generateExportList(e,t,i,o){this.cloneTableStyle=t,this.config=e||{},this.colVisProp=o;var s=!1!==this.config.columnHeaders?this.headersToExportRows(this.generateColumnGroupHeaders()):[],a=this.bodyToExportRows(this.rowLookup(i));return s.concat(a)}genereateTable(e,t,i,o){var s=this.generateExportList(e,t,i,o);return this.genereateTableElement(s)}rowLookup(e){var t=[];if("function"==typeof e)e.call(this.table).forEach((e=>{(e=this.table.rowManager.findRow(e))&&t.push(e)}));else switch(e){case!0:case"visible":t=this.table.rowManager.getVisibleRows(!0);break;case"all":t=this.table.rowManager.rows;break;case"selected":t=this.table.modules.selectRow.selectedRows;break;case"active":default:t=this.table.options.pagination?this.table.rowManager.getDisplayRows(this.table.rowManager.displayRows.length-2):this.table.rowManager.getDisplayRows()}return Object.assign([],t)}generateColumnGroupHeaders(){var e=[];return(!1!==this.config.columnGroups?this.table.columnManager.columns:this.table.columnManager.columnsByIndex).forEach((t=>{var i=this.processColumnGroup(t);i&&e.push(i)})),e}processColumnGroup(e){var t=e.columns,i=0,o={title:e.definition["title"+(this.colVisProp.charAt(0).toUpperCase()+this.colVisProp.slice(1))]||e.definition.title,column:e,depth:1};if(t.length){if(o.subGroups=[],o.width=0,t.forEach((e=>{var t=this.processColumnGroup(e);t&&(o.width+=t.width,o.subGroups.push(t),t.depth>i&&(i=t.depth))})),o.depth+=i,!o.width)return!1}else{if(!this.columnVisCheck(e))return!1;o.width=1}return o}columnVisCheck(e){return!1!==e.definition[this.colVisProp]&&(e.visible||!e.visible&&e.definition[this.colVisProp])}headersToExportRows(e){var t=[],i=0,o=[];function s(e,o){var a=i-o;if(void 0===t[o]&&(t[o]=[]),e.height=e.subGroups?1:a-e.depth+1,t[o].push(e),e.height>1)for(let i=1;i1)for(let i=1;ii&&(i=e.depth)})),e.forEach((function(e){s(e,0)})),t.forEach((e=>{var t=[];e.forEach((e=>{e?t.push(new x(e.title,e.column.getComponent(),e.width,e.height,e.depth)):t.push(null)})),o.push(new y("header",t))})),o}bodyToExportRows(e){var t=[],i=[];return this.table.columnManager.columnsByIndex.forEach((e=>{this.columnVisCheck(e)&&t.push(e.getComponent())})),!1!==this.config.columnCalcs&&this.table.modExists("columnCalcs")&&(this.table.modules.columnCalcs.topInitialized&&e.unshift(this.table.modules.columnCalcs.topRow),this.table.modules.columnCalcs.botInitialized&&e.push(this.table.modules.columnCalcs.botRow)),(e=e.filter((e=>{switch(e.type){case"group":return!1!==this.config.rowGroups;case"calc":return!1!==this.config.columnCalcs;case"row":return!(this.table.options.dataTree&&!1===this.config.dataTree&&e.modules.dataTree.parent)}return!0}))).forEach(((e,o)=>{var s=e.getData(this.colVisProp),a=[],l=0;switch(e.type){case"group":l=e.level,a.push(new x(e.key,e.getComponent(),t.length,1));break;case"calc":case"row":t.forEach((e=>{a.push(new x(e._column.getFieldValue(s),e,1,1))})),this.table.options.dataTree&&!1!==this.config.dataTree&&(l=e.modules.dataTree.index)}i.push(new y(e.type,a,e.getComponent(),l))})),i}genereateTableElement(e){var t=document.createElement("table"),i=document.createElement("thead"),o=document.createElement("tbody"),s=this.lookupTableStyles(),a=this.table.options["rowFormatter"+(this.colVisProp.charAt(0).toUpperCase()+this.colVisProp.slice(1))],l={};return l.rowFormatter=null!==a?a:this.table.options.rowFormatter,this.table.options.dataTree&&!1!==this.config.dataTree&&this.table.modExists("columnCalcs")&&(l.treeElementField=this.table.modules.dataTree.elementField),l.groupHeader=this.table.options["groupHeader"+(this.colVisProp.charAt(0).toUpperCase()+this.colVisProp.slice(1))],l.groupHeader&&!Array.isArray(l.groupHeader)&&(l.groupHeader=[l.groupHeader]),t.classList.add("tabulator-print-table"),this.mapElementStyles(this.table.columnManager.getHeadersElement(),i,["border-top","border-left","border-right","border-bottom","background-color","color","font-weight","font-family","font-size"]),e.length>1e3&&console.warn("It may take a long time to render an HTML table with more than 1000 rows"),e.forEach(((e,t)=>{switch(e.type){case"header":i.appendChild(this.genereateHeaderElement(e,l,s));break;case"group":o.appendChild(this.genereateGroupElement(e,l,s));break;case"calc":o.appendChild(this.genereateCalcElement(e,l,s));break;case"row":let a=this.genereateRowElement(e,l,s);this.mapElementStyles(t%2&&s.evenRow?s.evenRow:s.oddRow,a,["border-top","border-left","border-right","border-bottom","color","font-weight","font-family","font-size","background-color"]),o.appendChild(a)}})),i.innerHTML&&t.appendChild(i),t.appendChild(o),this.mapElementStyles(this.table.element,t,["border-top","border-left","border-right","border-bottom"]),t}lookupTableStyles(){var e={};return this.cloneTableStyle&&window.getComputedStyle&&(e.oddRow=this.table.element.querySelector(".tabulator-row-odd:not(.tabulator-group):not(.tabulator-calcs)"),e.evenRow=this.table.element.querySelector(".tabulator-row-even:not(.tabulator-group):not(.tabulator-calcs)"),e.calcRow=this.table.element.querySelector(".tabulator-row.tabulator-calcs"),e.firstRow=this.table.element.querySelector(".tabulator-row:not(.tabulator-group):not(.tabulator-calcs)"),e.firstGroup=this.table.element.getElementsByClassName("tabulator-group")[0],e.firstRow&&(e.styleCells=e.firstRow.getElementsByClassName("tabulator-cell"),e.firstCell=e.styleCells[0],e.lastCell=e.styleCells[e.styleCells.length-1])),e}genereateHeaderElement(e,t,i){var o=document.createElement("tr");return e.columns.forEach((e=>{if(e){var t=document.createElement("th"),i=e.component._column.definition.cssClass?e.component._column.definition.cssClass.split(" "):[];t.colSpan=e.width,t.rowSpan=e.height,t.innerHTML=e.value,this.cloneTableStyle&&(t.style.boxSizing="border-box"),i.forEach((function(e){t.classList.add(e)})),this.mapElementStyles(e.component.getElement(),t,["text-align","border-top","border-left","border-right","border-bottom","background-color","color","font-weight","font-family","font-size"]),this.mapElementStyles(e.component._column.contentElement,t,["padding-top","padding-left","padding-right","padding-bottom"]),e.component._column.visible?this.mapElementStyles(e.component.getElement(),t,["width"]):e.component._column.definition.width&&(t.style.width=e.component._column.definition.width+"px"),e.component._column.parent&&this.mapElementStyles(e.component._column.parent.groupElement,t,["border-top"]),o.appendChild(t)}})),o}genereateGroupElement(e,t,i){var o=document.createElement("tr"),s=document.createElement("td"),a=e.columns[0];return o.classList.add("tabulator-print-table-row"),t.groupHeader&&t.groupHeader[e.indent]?a.value=t.groupHeader[e.indent](a.value,e.component._group.getRowCount(),e.component._group.getData(),e.component):!1===t.groupHeader?a.value=a.value:a.value=e.component._group.generator(a.value,e.component._group.getRowCount(),e.component._group.getData(),e.component),s.colSpan=a.width,s.innerHTML=a.value,o.classList.add("tabulator-print-table-group"),o.classList.add("tabulator-group-level-"+e.indent),a.component.isVisible()&&o.classList.add("tabulator-group-visible"),this.mapElementStyles(i.firstGroup,o,["border-top","border-left","border-right","border-bottom","color","font-weight","font-family","font-size","background-color"]),this.mapElementStyles(i.firstGroup,s,["padding-top","padding-left","padding-right","padding-bottom"]),o.appendChild(s),o}genereateCalcElement(e,t,i){var o=this.genereateRowElement(e,t,i);return o.classList.add("tabulator-print-table-calcs"),this.mapElementStyles(i.calcRow,o,["border-top","border-left","border-right","border-bottom","color","font-weight","font-family","font-size","background-color"]),o}genereateRowElement(e,t,o){var s=document.createElement("tr");return s.classList.add("tabulator-print-table-row"),e.columns.forEach((a=>{if(a){var l=document.createElement("td"),n=a.component._column,r=a.value,h={modules:{},getValue:function(){return r},getField:function(){return n.definition.field},getElement:function(){return l},getColumn:function(){return n.getComponent()},getData:function(){return e.component.getData()},getRow:function(){return e.component},getComponent:function(){return h},column:n};if((n.definition.cssClass?n.definition.cssClass.split(" "):[]).forEach((function(e){l.classList.add(e)})),this.table.modExists("format")&&!1!==this.config.formatCells)r=this.table.modules.format.formatExportValue(h,this.colVisProp);else switch(typeof r){case"object":r=JSON.stringify(r);break;case"undefined":case"null":r="";break;default:r=r}r instanceof Node?l.appendChild(r):l.innerHTML=r,o.firstCell&&(this.mapElementStyles(o.firstCell,l,["padding-top","padding-left","padding-right","padding-bottom","border-top","border-left","border-right","border-bottom","color","font-weight","font-family","font-size"]),n.definition.align&&(l.style.textAlign=n.definition.align)),this.table.options.dataTree&&!1!==this.config.dataTree&&(t.treeElementField&&t.treeElementField==n.field||!t.treeElementField&&0==i)&&(e.component._row.modules.dataTree.controlEl&&l.insertBefore(e.component._row.modules.dataTree.controlEl.cloneNode(!0),l.firstChild),e.component._row.modules.dataTree.branchEl&&l.insertBefore(e.component._row.modules.dataTree.branchEl.cloneNode(!0),l.firstChild)),s.appendChild(l),h.modules.format&&h.modules.format.renderedCallback&&h.modules.format.renderedCallback(),t.rowFormatter&&!1!==this.config.formatCells&&t.rowFormatter(e.component)}})),s}genereateHTMLTable(e){var t=document.createElement("div");return t.appendChild(this.genereateTableElement(e)),t.innerHTML}getHtml(e,t,i,o){var s=this.generateExportList(i||this.table.options.htmlOutputConfig,t,e,o||"htmlOutput");return this.genereateHTMLTable(s)}mapElementStyles(e,t,i){if(this.cloneTableStyle&&e&&t){var o={"background-color":"backgroundColor",color:"fontColor",width:"width","font-weight":"fontWeight","font-family":"fontFamily","font-size":"fontSize","text-align":"textAlign","border-top":"borderTop","border-left":"borderLeft","border-right":"borderRight","border-bottom":"borderBottom","padding-top":"paddingTop","padding-left":"paddingLeft","padding-right":"paddingRight","padding-bottom":"paddingBottom"};if(window.getComputedStyle){var s=window.getComputedStyle(e);i.forEach((function(e){t.style[o[e]]=s.getPropertyValue(e)}))}}}}R.moduleName="export";var M={"=":function(e,t,i,o){return t==e},"<":function(e,t,i,o){return t":function(e,t,i,o){return t>e},">=":function(e,t,i,o){return t>=e},"!=":function(e,t,i,o){return t!=e},regex:function(e,t,i,o){return"string"==typeof e&&(e=new RegExp(e)),e.test(t)},like:function(e,t,i,o){return null==e?t===e:null!=t&&String(t).toLowerCase().indexOf(e.toLowerCase())>-1},keywords:function(e,t,i,o){var s=e.toLowerCase().split(void 0===o.separator?" ":o.separator),a=String(null==t?"":t).toLowerCase(),l=[];return s.forEach((e=>{a.includes(e)&&l.push(!0)})),o.matchAll?l.length===s.length:!!l.length},starts:function(e,t,i,o){return null==e?t===e:null!=t&&String(t).toLowerCase().startsWith(e.toLowerCase())},ends:function(e,t,i,o){return null==e?t===e:null!=t&&String(t).toLowerCase().endsWith(e.toLowerCase())},in:function(e,t,i,o){return Array.isArray(e)?!e.length||e.indexOf(t)>-1:(console.warn("Filter Error - filter value is not an array:",e),!1)}};class L extends t{constructor(e){super(e),this.filterList=[],this.headerFilters={},this.headerFilterColumns=[],this.prevHeaderFilterChangeCheck="",this.prevHeaderFilterChangeCheck="{}",this.changed=!1}initializeColumn(e,t){var i=this,o=e.getField();e.modules.filter={success:function(t){var s,a="input"==e.modules.filter.tagType&&"text"==e.modules.filter.attrType||"textarea"==e.modules.filter.tagType?"partial":"match",l="",n="";if(void 0===e.modules.filter.prevSuccess||e.modules.filter.prevSuccess!==t){if(e.modules.filter.prevSuccess=t,e.modules.filter.emptyFunc(t))delete i.headerFilters[o];else{switch(e.modules.filter.value=t,typeof e.definition.headerFilterFunc){case"string":L.filters[e.definition.headerFilterFunc]?(l=e.definition.headerFilterFunc,s=function(i){var o=e.definition.headerFilterFuncParams||{},s=e.getFieldValue(i);return o="function"==typeof o?o(t,s,i):o,L.filters[e.definition.headerFilterFunc](t,s,i,o)}):console.warn("Header Filter Error - Matching filter function not found: ",e.definition.headerFilterFunc);break;case"function":l=s=function(i){var o=e.definition.headerFilterFuncParams||{},s=e.getFieldValue(i);return o="function"==typeof o?o(t,s,i):o,e.definition.headerFilterFunc(t,s,i,o)}}if(!s)switch(a){case"partial":s=function(i){var o=e.getFieldValue(i);return null!=o&&String(o).toLowerCase().indexOf(String(t).toLowerCase())>-1},l="like";break;default:s=function(i){return e.getFieldValue(i)==t},l="="}i.headerFilters[o]={value:t,func:s,type:l,params:{}}}n=JSON.stringify(i.headerFilters),i.prevHeaderFilterChangeCheck!==n&&(i.prevHeaderFilterChangeCheck=n,i.changed=!0,i.table.rowManager.filterRefresh())}return!0},attrType:!1,tagType:!1,emptyFunc:!1},this.generateHeaderFilterElement(e)}generateHeaderFilterElement(e,t,i){var o,s,a,l,n,r,h,d=this,c=e.modules.filter.success,u=e.getField();if(e.modules.filter.headerElement&&e.modules.filter.headerElement.parentNode&&e.contentElement.removeChild(e.modules.filter.headerElement.parentNode),u){switch(e.modules.filter.emptyFunc=e.definition.headerFilterEmptyCheck||function(e){return!e&&"0"!==e&&0!==e},(o=document.createElement("div")).classList.add("tabulator-header-filter"),typeof e.definition.headerFilter){case"string":d.table.modules.edit.editors[e.definition.headerFilter]?(s=d.table.modules.edit.editors[e.definition.headerFilter],"tick"!==e.definition.headerFilter&&"tickCross"!==e.definition.headerFilter||e.definition.headerFilterEmptyCheck||(e.modules.filter.emptyFunc=function(e){return!0!==e&&!1!==e})):console.warn("Filter Error - Cannot build header filter, No such editor found: ",e.definition.editor);break;case"function":s=e.definition.headerFilter;break;case"boolean":e.modules.edit&&e.modules.edit.editor?s=e.modules.edit.editor:e.definition.formatter&&d.table.modules.edit.editors[e.definition.formatter]?(s=d.table.modules.edit.editors[e.definition.formatter],"tick"!==e.definition.formatter&&"tickCross"!==e.definition.formatter||e.definition.headerFilterEmptyCheck||(e.modules.filter.emptyFunc=function(e){return!0!==e&&!1!==e})):s=d.table.modules.edit.editors.input}if(s){if(l={getValue:function(){return void 0!==t?t:""},getField:function(){return e.definition.field},getElement:function(){return o},getColumn:function(){return e.getComponent()},getRow:function(){return{normalizeHeight:function(){}}}},h="function"==typeof(h=e.definition.headerFilterParams||{})?h.call(d.table):h,!(a=s.call(this.table.modules.edit,l,(function(){}),c,(function(){}),h)))return void console.warn("Filter Error - Cannot add filter to "+u+" column, editor returned a value of false");if(!(a instanceof Node))return void console.warn("Filter Error - Cannot add filter to "+u+" column, editor should return an instance of Node, the editor returned:",a);u?d.table.modules.localize.bind("headerFilters|columns|"+e.definition.field,(function(e){a.setAttribute("placeholder",void 0!==e&&e?e:d.table.modules.localize.getText("headerFilters|default"))})):d.table.modules.localize.bind("headerFilters|default",(function(e){a.setAttribute("placeholder",void 0!==d.column.definition.headerFilterPlaceholder&&d.column.definition.headerFilterPlaceholder?d.column.definition.headerFilterPlaceholder:e)})),a.addEventListener("click",(function(e){e.stopPropagation(),a.focus()})),a.addEventListener("focus",(e=>{var t=this.table.columnManager.element.scrollLeft;t!==this.table.rowManager.element.scrollLeft&&(this.table.rowManager.scrollHorizontal(t),this.table.columnManager.scrollHorizontal(t))})),n=!1,r=function(e){n&&clearTimeout(n),n=setTimeout((function(){c(a.value)}),d.table.options.headerFilterLiveFilterDelay)},e.modules.filter.headerElement=a,e.modules.filter.attrType=a.hasAttribute("type")?a.getAttribute("type").toLowerCase():"",e.modules.filter.tagType=a.tagName.toLowerCase(),!1!==e.definition.headerFilterLiveFilter&&("autocomplete"!==e.definition.headerFilter&&"tickCross"!==e.definition.headerFilter&&("autocomplete"!==e.definition.editor&&"tickCross"!==e.definition.editor||!0!==e.definition.headerFilter)&&(a.addEventListener("keyup",r),a.addEventListener("search",r),"number"==e.modules.filter.attrType&&a.addEventListener("change",(function(e){c(a.value)})),"text"==e.modules.filter.attrType&&"ie"!==this.table.browser&&a.setAttribute("type","search")),"input"!=e.modules.filter.tagType&&"select"!=e.modules.filter.tagType&&"textarea"!=e.modules.filter.tagType||a.addEventListener("mousedown",(function(e){e.stopPropagation()}))),o.appendChild(a),e.contentElement.appendChild(o),i||d.headerFilterColumns.push(e)}}else console.warn("Filter Error - Cannot add header filter, column has no field set:",e.definition.title)}hideHeaderFilterElements(){this.headerFilterColumns.forEach((function(e){e.modules.filter&&e.modules.filter.headerElement&&(e.modules.filter.headerElement.style.display="none")}))}showHeaderFilterElements(){this.headerFilterColumns.forEach((function(e){e.modules.filter&&e.modules.filter.headerElement&&(e.modules.filter.headerElement.style.display="")}))}setHeaderFilterFocus(e){e.modules.filter&&e.modules.filter.headerElement?e.modules.filter.headerElement.focus():console.warn("Column Filter Focus Error - No header filter set on column:",e.getField())}getHeaderFilterValue(e){if(e.modules.filter&&e.modules.filter.headerElement)return e.modules.filter.headerElement.value;console.warn("Column Filter Error - No header filter set on column:",e.getField())}setHeaderFilterValue(e,t){e&&(e.modules.filter&&e.modules.filter.headerElement?(this.generateHeaderFilterElement(e,t,!0),e.modules.filter.success(t)):console.warn("Column Filter Error - No header filter set on column:",e.getField()))}reloadHeaderFilter(e){e&&(e.modules.filter&&e.modules.filter.headerElement?this.generateHeaderFilterElement(e,e.modules.filter.value,!0):console.warn("Column Filter Error - No header filter set on column:",e.getField()))}hasChanged(){var e=this.changed;return this.changed=!1,e}setFilter(e,t,i,o){this.filterList=[],Array.isArray(e)||(e=[{field:e,type:t,value:i,params:o}]),this.addFilter(e)}addFilter(e,t,i,o){var s=this;Array.isArray(e)||(e=[{field:e,type:t,value:i,params:o}]),e.forEach((function(e){(e=s.findFilter(e))&&(s.filterList.push(e),s.changed=!0)})),this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.filter&&this.table.modules.persistence.save("filter")}findFilter(e){var t;if(Array.isArray(e))return this.findSubFilters(e);var i=!1;return"function"==typeof e.field?i=function(t){return e.field(t,e.type||{})}:L.filters[e.type]?i=(t=this.table.columnManager.getColumnByField(e.field))?function(i){return L.filters[e.type](e.value,t.getFieldValue(i),i,e.params||{})}:function(t){return L.filters[e.type](e.value,t[e.field],t,e.params||{})}:console.warn("Filter Error - No such filter type found, ignoring: ",e.type),e.func=i,!!e.func&&e}findSubFilters(e){var t=this,i=[];return e.forEach((function(e){(e=t.findFilter(e))&&i.push(e)})),!!i.length&&i}getFilters(e,t){var i=[];return e&&(i=this.getHeaderFilters()),t&&i.forEach((function(e){"function"==typeof e.type&&(e.type="function")})),i=i.concat(this.filtersToArray(this.filterList,t))}filtersToArray(e,t){var i=[];return e.forEach((e=>{var o;Array.isArray(e)?i.push(this.filtersToArray(e,t)):(o={field:e.field,type:e.type,value:e.value},t&&"function"==typeof o.type&&(o.type="function"),i.push(o))})),i}getHeaderFilters(){var e=[];for(var t in this.headerFilters)e.push({field:t,type:this.headerFilters[t].type,value:this.headerFilters[t].value});return e}removeFilter(e,t,i){var o=this;Array.isArray(e)||(e=[{field:e,type:t,value:i}]),e.forEach((function(e){var t=-1;(t="object"==typeof e.field?o.filterList.findIndex((function(t){return e===t})):o.filterList.findIndex((function(t){return e.field===t.field&&e.type===t.type&&e.value===t.value})))>-1?(o.filterList.splice(t,1),o.changed=!0):console.warn("Filter Error - No matching filter type found, ignoring: ",e.type)})),this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.filter&&this.table.modules.persistence.save("filter")}clearFilter(e){this.filterList=[],e&&this.clearHeaderFilter(),this.changed=!0,this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.filter&&this.table.modules.persistence.save("filter")}clearHeaderFilter(){var e=this;this.headerFilters={},e.prevHeaderFilterChangeCheck="{}",this.headerFilterColumns.forEach((function(t){void 0!==t.modules.filter.value&&delete t.modules.filter.value,t.modules.filter.prevSuccess=void 0,e.reloadHeaderFilter(t)})),this.changed=!0}search(e,t,i,o){var s=this,a=[],l=[];return Array.isArray(t)||(t=[{field:t,type:i,value:o}]),t.forEach((function(e){(e=s.findFilter(e))&&l.push(e)})),this.table.rowManager.rows.forEach((function(t){var i=!0;l.forEach((function(e){s.filterRecurse(e,t.getData())||(i=!1)})),i&&a.push("data"===e?t.getData("data"):t.getComponent())})),a}filter(e,t){var i=this,o=[],s=[];return i.table.options.dataFiltering&&i.table.options.dataFiltering.call(i.table,i.getFilters()),i.table.options.ajaxFiltering||!i.filterList.length&&!Object.keys(i.headerFilters).length?o=e.slice(0):e.forEach((function(e){i.filterRow(e)&&o.push(e)})),i.table.options.dataFiltered&&(o.forEach((function(e){s.push(e.getComponent())})),i.table.options.dataFiltered.call(i.table,i.getFilters(),s)),o}filterRow(e,t){var i=this,o=!0,s=e.getData();for(var a in i.filterList.forEach((function(e){i.filterRecurse(e,s)||(o=!1)})),i.headerFilters)i.headerFilters[a].func(s)||(o=!1);return o}filterRecurse(e,t){var i=this,o=!1;return Array.isArray(e)?e.forEach((function(e){i.filterRecurse(e,t)&&(o=!0)})):o=e.func(t),o}}L.moduleName="filter",L.filters=M;var D={plaintext:function(e,t,i){return this.emptyToSpace(this.sanitizeHTML(e.getValue()))},html:function(e,t,i){return e.getValue()},textarea:function(e,t,i){return e.getElement().style.whiteSpace="pre-wrap",this.emptyToSpace(this.sanitizeHTML(e.getValue()))},money:function(e,t,i){var o,s,a,l,n=parseFloat(e.getValue()),r=t.decimal||".",h=t.thousand||",",d=t.symbol||"",c=!!t.symbolAfter,u=void 0!==t.precision?t.precision:2;if(isNaN(n))return this.emptyToSpace(this.sanitizeHTML(e.getValue()));for(o=!1!==u?n.toFixed(u):n,s=(o=String(o).split("."))[0],a=o.length>1?r+o[1]:"",l=/(\d+)(\d{3})/;l.test(s);)s=s.replace(l,"$1"+h+"$2");return c?s+a+d:d+s+a},link:function(e,t,i){var o=e.getValue(),s=t.urlPrefix||"",a=t.download,l=o,n=document.createElement("a");if(t.labelField&&(l=e.getData()[t.labelField]),t.label)switch(typeof t.label){case"string":l=t.label;break;case"function":l=t.label(e)}if(l){if(t.urlField&&(o=e.getData()[t.urlField]),t.url)switch(typeof t.url){case"string":o=t.url;break;case"function":o=t.url(e)}return n.setAttribute("href",s+o),t.target&&n.setAttribute("target",t.target),t.download&&(a="function"==typeof a?a(e):!0===a?"":a,n.setAttribute("download",a)),n.innerHTML=this.emptyToSpace(this.sanitizeHTML(l)),n}return" "},image:function(e,t,i){var o=document.createElement("img"),s=e.getValue();switch(t.urlPrefix&&(s=t.urlPrefix+e.getValue()),t.urlSuffix&&(s+=t.urlSuffix),o.setAttribute("src",s),typeof t.height){case"number":o.style.height=t.height+"px";break;case"string":o.style.height=t.height}switch(typeof t.width){case"number":o.style.width=t.width+"px";break;case"string":o.style.width=t.width}return o.addEventListener("load",(function(){e.getRow().normalizeHeight()})),o},tickCross:function(e,t,i){var o=e.getValue(),s=e.getElement(),a=t.allowEmpty,l=t.allowTruthy,n=void 0!==t.tickElement?t.tickElement:'',r=void 0!==t.crossElement?t.crossElement:'';return l&&o||!0===o||"true"===o||"True"===o||1===o||"1"===o?(s.setAttribute("aria-checked",!0),n||""):!a||"null"!==o&&""!==o&&null!=o?(s.setAttribute("aria-checked",!1),r||""):(s.setAttribute("aria-checked","mixed"),"")},datetime:function(e,t,i){var o=t.inputFormat||"YYYY-MM-DD hh:mm:ss",s=t.outputFormat||"DD/MM/YYYY hh:mm:ss",a=void 0!==t.invalidPlaceholder?t.invalidPlaceholder:"",l=e.getValue(),n=moment(l,o);return n.isValid()?t.timezone?n.tz(t.timezone).format(s):n.format(s):!0===a?l:"function"==typeof a?a(l):a},datetimediff:function(e,t,i){var o=t.inputFormat||"YYYY-MM-DD hh:mm:ss",s=void 0!==t.invalidPlaceholder?t.invalidPlaceholder:"",a=void 0!==t.suffix&&t.suffix,l=void 0!==t.unit?t.unit:void 0,n=void 0!==t.humanize&&t.humanize,r=void 0!==t.date?t.date:moment(),h=e.getValue(),d=moment(h,o);return d.isValid()?n?moment.duration(d.diff(r)).humanize(a):d.diff(r,l)+(a?" "+a:""):!0===s?h:"function"==typeof s?s(h):s},lookup:function(e,t,i){var o=e.getValue();return void 0===t[o]?(console.warn("Missing display value for "+o),o):t[o]},star:function(e,t,i){var o=e.getValue(),s=e.getElement(),a=t&&t.stars?t.stars:5,l=document.createElement("span"),n=document.createElementNS("http://www.w3.org/2000/svg","svg");l.style.verticalAlign="middle",n.setAttribute("width","14"),n.setAttribute("height","14"),n.setAttribute("viewBox","0 0 512 512"),n.setAttribute("xml:space","preserve"),n.style.padding="0 1px",o=o&&!isNaN(o)?parseInt(o):0,o=Math.max(0,Math.min(o,a));for(var r=1;r<=a;r++){var h=n.cloneNode(!0);h.innerHTML=r<=o?'':'',l.appendChild(h)}return s.style.whiteSpace="nowrap",s.style.overflow="hidden",s.style.textOverflow="ellipsis",s.setAttribute("aria-label",o),l},traffic:function(e,t,i){var o,s,a=this.sanitizeHTML(e.getValue())||0,l=document.createElement("span"),n=t&&t.max?t.max:100,r=t&&t.min?t.min:0,h=t&&void 0!==t.color?t.color:["red","orange","green"],d="#666666";if(!isNaN(a)&&void 0!==e.getValue()){switch(l.classList.add("tabulator-traffic-light"),s=parseFloat(a)<=n?parseFloat(a):n,s=parseFloat(s)>=r?parseFloat(s):r,o=(n-r)/100,s=Math.round((s-r)/o),typeof h){case"string":d=h;break;case"function":d=h(a);break;case"object":if(Array.isArray(h)){var c=100/h.length,u=Math.floor(s/c);u=Math.min(u,h.length-1),d=h[u=Math.max(u,0)];break}}return l.style.backgroundColor=d,l}},progress:function(e,t,i){var o,s,a,l,n,r=this.sanitizeHTML(e.getValue())||0,h=e.getElement(),d=t&&t.max?t.max:100,c=t&&t.min?t.min:0,u=t&&t.legendAlign?t.legendAlign:"center";switch(s=parseFloat(r)<=d?parseFloat(r):d,s=parseFloat(s)>=c?parseFloat(s):c,o=(d-c)/100,s=Math.round((s-c)/o),typeof t.color){case"string":a=t.color;break;case"function":a=t.color(r);break;case"object":if(Array.isArray(t.color)){var m=100/t.color.length,p=Math.floor(s/m);p=Math.min(p,t.color.length-1),p=Math.max(p,0),a=t.color[p];break}default:a="#2DC214"}switch(typeof t.legend){case"string":l=t.legend;break;case"function":l=t.legend(r);break;case"boolean":l=r;break;default:l=!1}switch(typeof t.legendColor){case"string":n=t.legendColor;break;case"function":n=t.legendColor(r);break;case"object":if(Array.isArray(t.legendColor)){m=100/t.legendColor.length,p=Math.floor(s/m);p=Math.min(p,t.legendColor.length-1),p=Math.max(p,0),n=t.legendColor[p]}break;default:n="#000"}h.style.minWidth="30px",h.style.position="relative",h.setAttribute("aria-label",s);var g=document.createElement("div");if(g.style.display="inline-block",g.style.position="relative",g.style.width=s+"%",g.style.backgroundColor=a,g.style.height="100%",g.setAttribute("data-max",d),g.setAttribute("data-min",c),l){var f=document.createElement("div");f.style.position="absolute",f.style.top="4px",f.style.left=0,f.style.textAlign=u,f.style.width="100%",f.style.color=n,f.innerHTML=l}return i((function(){if(!(e instanceof CellComponent)){var t=document.createElement("div");t.style.position="absolute",t.style.top="4px",t.style.bottom="4px",t.style.left="4px",t.style.right="4px",h.appendChild(t),h=t}h.appendChild(g),l&&h.appendChild(f)})),""},color:function(e,t,i){return e.getElement().style.backgroundColor=this.sanitizeHTML(e.getValue()),""},buttonTick:function(e,t,i){return''},buttonCross:function(e,t,i){return''},rownum:function(e,t,i){return this.table.rowManager.activeRows.indexOf(e.getRow()._getSelf())+1},handle:function(e,t,i){return e.getElement().classList.add("tabulator-row-handle"),"
"},responsiveCollapse:function(e,t,i){var o=document.createElement("div"),s=e.getRow()._row.modules.responsiveLayout;function a(e){var t=s.element;s.open=e,t&&(s.open?(o.classList.add("open"),t.style.display=""):(o.classList.remove("open"),t.style.display="none"))}return o.classList.add("tabulator-responsive-collapse-toggle"),o.innerHTML="+-",e.getElement().classList.add("tabulator-row-handle"),o.addEventListener("click",(function(e){e.stopImmediatePropagation(),a(!s.open)})),a(s.open),o},rowSelection:function(e,t,i){var o=document.createElement("input");if(o.type="checkbox",this.table.modExists("selectRow",!0))if(o.addEventListener("click",(e=>{e.stopPropagation()})),"function"==typeof e.getRow){var s=e.getRow();s instanceof RowComponent?(o.addEventListener("change",(e=>{s.toggleSelect()})),o.checked=s.isSelected&&s.isSelected(),this.table.modules.selectRow.registerRowSelectCheckbox(s,o)):o=""}else o.addEventListener("change",(e=>{this.table.modules.selectRow.selectedRows.length?this.table.deselectRow():this.table.selectRow(t.rowRange)})),this.table.modules.selectRow.registerHeaderSelectCheckbox(o);return o}};class T extends t{initializeColumn(e){e.modules.format=this.lookupFormatter(e,""),void 0!==e.definition.formatterPrint&&(e.modules.format.print=this.lookupFormatter(e,"Print")),void 0!==e.definition.formatterClipboard&&(e.modules.format.clipboard=this.lookupFormatter(e,"Clipboard")),void 0!==e.definition.formatterHtmlOutput&&(e.modules.format.htmlOutput=this.lookupFormatter(e,"HtmlOutput"))}lookupFormatter(e,t){var i={params:e.definition["formatter"+t+"Params"]||{}},o=e.definition["formatter"+t];switch(typeof o){case"string":T.formatters[o]?i.formatter=T.formatters[o]:(console.warn("Formatter Error - No such formatter found: ",o),i.formatter=T.formatters.plaintext);break;case"function":i.formatter=o;break;default:i.formatter=T.formatters.plaintext}return i}cellRendered(e){e.modules.format&&e.modules.format.renderedCallback&&!e.modules.format.rendered&&(e.modules.format.renderedCallback(),e.modules.format.rendered=!0)}formatValue(e){var t=e.getComponent(),i="function"==typeof e.column.modules.format.params?e.column.modules.format.params(t):e.column.modules.format.params;return e.column.modules.format.formatter.call(this,t,i,(function(t){e.modules.format||(e.modules.format={}),e.modules.format.renderedCallback=t,e.modules.format.rendered=!1}))}formatExportValue(e,t){var i,o=e.column.modules.format[t];if(o){return i="function"==typeof o.params?o.params(component):o.params,o.formatter.call(this,e.getComponent(),i,(function(t){e.modules.format||(e.modules.format={}),e.modules.format.renderedCallback=t,e.modules.format.rendered=!1}))}return this.formatValue(e)}sanitizeHTML(e){if(e){var t={"&":"&","<":"<",">":">",'"':""","'":"'","/":"/","`":"`","=":"="};return String(e).replace(/[&<>"'`=\/]/g,(function(e){return t[e]}))}return e}emptyToSpace(e){return null==e||""===e?" ":e}getFormatter(e){switch(typeof e){case"string":T.formatters[e]?e=T.formatters[e]:(console.warn("Formatter Error - No such formatter found: ",e),e=T.formatters.plaintext);break;case"function":e=e;break;default:e=T.formatters.plaintext}return e}}T.moduleName="format",T.formatters=D;class k extends t{constructor(e){super(e),this.leftColumns=[],this.rightColumns=[],this.leftMargin=0,this.rightMargin=0,this.rightPadding=0,this.initializationMode="left",this.active=!1,this.scrollEndTimer=!1}reset(){this.initializationMode="left",this.leftColumns=[],this.rightColumns=[],this.leftMargin=0,this.rightMargin=0,this.rightMargin=0,this.active=!1,this.table.columnManager.headersElement.style.marginLeft=0,this.table.columnManager.element.style.paddingRight=0}initializeColumn(e){var t={margin:0,edge:!1};e.isGroup||(this.frozenCheck(e)?(t.position=this.initializationMode,"left"==this.initializationMode?this.leftColumns.push(e):this.rightColumns.unshift(e),this.active=!0,e.modules.frozen=t):this.initializationMode="right")}frozenCheck(e){return e.parent.isGroup&&e.definition.frozen&&console.warn("Frozen Column Error - Parent column group must be frozen, not individual columns or sub column groups"),e.parent.isGroup?this.frozenCheck(e.parent):e.definition.frozen}scrollHorizontal(){var e;this.active&&(clearTimeout(this.scrollEndTimer),this.scrollEndTimer=setTimeout((()=>{this.layout()}),100),e=this.table.rowManager.getVisibleRows(),this.calcMargins(),this.layoutColumnPosition(),this.layoutCalcRows(),e.forEach((e=>{"row"===e.type&&this.layoutRow(e)})),this.table.rowManager.tableElement.style.marginRight=this.rightMargin)}calcMargins(){this.leftMargin=this._calcSpace(this.leftColumns,this.leftColumns.length)+"px",this.table.columnManager.headersElement.style.marginLeft=this.leftMargin,this.rightMargin=this._calcSpace(this.rightColumns,this.rightColumns.length)+"px",this.table.columnManager.element.style.paddingRight=this.rightMargin,this.rightPadding=this.table.rowManager.element.clientWidth+this.table.columnManager.scrollLeft}layoutCalcRows(){this.table.modExists("columnCalcs")&&(this.table.modules.columnCalcs.topInitialized&&this.table.modules.columnCalcs.topRow&&this.layoutRow(this.table.modules.columnCalcs.topRow),this.table.modules.columnCalcs.botInitialized&&this.table.modules.columnCalcs.botRow&&this.layoutRow(this.table.modules.columnCalcs.botRow))}layoutColumnPosition(e){var t=[];this.leftColumns.forEach(((i,o)=>{if(i.modules.frozen.margin=this._calcSpace(this.leftColumns,o)+this.table.columnManager.scrollLeft+"px",o==this.leftColumns.length-1?i.modules.frozen.edge=!0:i.modules.frozen.edge=!1,i.parent.isGroup){var s=this.getColGroupParentElement(i);t.includes(s)||(this.layoutElement(s,i),t.push(s)),i.modules.frozen.edge&&s.classList.add("tabulator-frozen-"+i.modules.frozen.position)}else this.layoutElement(i.getElement(),i);e&&i.cells.forEach((e=>{this.layoutElement(e.getElement(!0),i)}))})),this.rightColumns.forEach(((t,i)=>{t.modules.frozen.margin=this.rightPadding-this._calcSpace(this.rightColumns,i+1)+"px",i==this.rightColumns.length-1?t.modules.frozen.edge=!0:t.modules.frozen.edge=!1,t.parent.isGroup?this.layoutElement(this.getColGroupParentElement(t),t):this.layoutElement(t.getElement(),t),e&&t.cells.forEach((e=>{this.layoutElement(e.getElement(!0),t)}))}))}getColGroupParentElement(e){return e.parent.isGroup?this.getColGroupParentElement(e.parent):e.getElement()}layout(){this.active&&(this.calcMargins(),this.table.rowManager.getDisplayRows().forEach((e=>{"row"===e.type&&this.layoutRow(e)})),this.layoutCalcRows(),this.layoutColumnPosition(!0),this.table.rowManager.tableElement.style.marginRight=this.rightMargin)}layoutRow(e){e.getElement().style.paddingLeft=this.leftMargin,this.leftColumns.forEach((t=>{var i=e.getCell(t);i&&this.layoutElement(i.getElement(!0),t)})),this.rightColumns.forEach((t=>{var i=e.getCell(t);i&&this.layoutElement(i.getElement(!0),t)}))}layoutElement(e,t){t.modules.frozen&&(e.style.position="absolute",e.style.left=t.modules.frozen.margin,e.classList.add("tabulator-frozen"),t.modules.frozen.edge&&e.classList.add("tabulator-frozen-"+t.modules.frozen.position))}_calcSpace(e,t){var i=0;for(let o=0;o-1&&t.splice(i,1)})),t}freezeRow(e){e.modules.frozen?console.warn("Freeze Error - Row is already frozen"):(e.modules.frozen=!0,this.topElement.appendChild(e.getElement()),e.initialize(),e.normalizeHeight(),this.table.rowManager.adjustTableSize(),this.rows.push(e),this.table.rowManager.refreshActiveData("display"),this.styleRows())}unfreezeRow(e){this.rows.indexOf(e);e.modules.frozen?(e.modules.frozen=!1,this.detachRow(e),this.table.rowManager.adjustTableSize(),this.table.rowManager.refreshActiveData("display"),this.rows.length&&this.styleRows()):console.warn("Freeze Error - Row is already unfrozen")}detachRow(e){var t=this.rows.indexOf(e);if(t>-1){var i=e.getElement();i.parentNode.removeChild(i),this.rows.splice(t,1)}}styleRows(e){this.rows.forEach(((e,t)=>{this.table.rowManager.styleRow(e,t)}))}}z.moduleName="frozenRows";class S{constructor(e,t,i,o,s,a,l){this.groupManager=e,this.parent=t,this.key=o,this.level=i,this.field=s,this.hasSubGroups=i{this._createGroup(t,e)}))}addBindings(){var e,t,i;this.groupManager.table.options.groupClick&&this.element.addEventListener("click",(e=>{this.groupManager.table.options.groupClick.call(this.groupManager.table,e,this.getComponent())})),this.groupManager.table.options.groupDblClick&&this.element.addEventListener("dblclick",(e=>{this.groupManager.table.options.groupDblClick.call(this.groupManager.table,e,this.getComponent())})),this.groupManager.table.options.groupContext&&this.element.addEventListener("contextmenu",(e=>{this.groupManager.table.options.groupContext.call(this.groupManager.table,e,this.getComponent())})),(this.groupManager.table.options.groupContextMenu||this.groupManager.table.options.groupClickMenu)&&this.groupManager.table.modExists("menu")&&this.groupManager.table.modules.menu.initializeGroup.call(this.groupManager.table.modules.menu,this),this.groupManager.table.options.groupTap&&(i=!1,this.element.addEventListener("touchstart",(e=>{i=!0}),{passive:!0}),this.element.addEventListener("touchend",(e=>{i&&this.groupManager.table.options.groupTap(e,this.getComponent()),i=!1}))),this.groupManager.table.options.groupDblTap&&(e=null,this.element.addEventListener("touchend",(t=>{e?(clearTimeout(e),e=null,this.groupManager.table.options.groupDblTap(t,this.getComponent())):e=setTimeout((()=>{clearTimeout(e),e=null}),300)}))),this.groupManager.table.options.groupTapHold&&(t=null,this.element.addEventListener("touchstart",(e=>{clearTimeout(t),t=setTimeout((()=>{clearTimeout(t),t=null,i=!1,this.groupManager.table.options.groupTapHold(e,this.getComponent())}),1e3)}),{passive:!0}),this.element.addEventListener("touchend",(e=>{clearTimeout(t),t=null}))),this.groupManager.table.options.groupToggleElement&&("arrow"==this.groupManager.table.options.groupToggleElement?this.arrowElement:this.element).addEventListener("click",(e=>{e.stopPropagation(),e.stopImmediatePropagation(),this.toggleVisibility()}))}_createGroup(e,t){var i=t+"_"+e,o=new S(this.groupManager,this,t,e,this.groupManager.groupIDLookups[t].field,this.groupManager.headerGenerator[t]||this.groupManager.headerGenerator[0],!!this.old&&this.old.groups[i]);this.groups[i]=o,this.groupList.push(o)}_addRowToGroup(e){var t=this.level+1;if(this.hasSubGroups){var i=this.groupManager.groupIDLookups[t].func(e.getData()),o=t+"_"+i;this.groupManager.allowedValues&&this.groupManager.allowedValues[t]?this.groups[o]&&this.groups[o].addRow(e):(this.groups[o]||this._createGroup(i,t),this.groups[o].addRow(e))}}_addRow(e){this.rows.push(e),e.modules.group=this}insertRow(e,t,i){var o=this.conformRowData({});e.updateData(o);var s=this.rows.indexOf(t);s>-1?i?this.rows.splice(s+1,0,e):this.rows.splice(s,0,e):i?this.rows.push(e):this.rows.unshift(e),e.modules.group=this,this.generateGroupHeaderContents(),this.groupManager.table.modExists("columnCalcs")&&"table"!=this.groupManager.table.options.columnCalcs&&this.groupManager.table.modules.columnCalcs.recalcGroup(this),this.groupManager.updateGroupRows(!0)}scrollHeader(e){this.arrowElement.style.marginLeft=e,this.groupList.forEach((function(t){t.scrollHeader(e)}))}getRowIndex(e){}conformRowData(e){return this.field?e[this.field]=this.key:console.warn("Data Conforming Error - Cannot conform row data to match new group as groupBy is a function"),this.parent&&(e=this.parent.conformRowData(e)),e}removeRow(e){var t=this.rows.indexOf(e),i=e.getElement();t>-1&&this.rows.splice(t,1),this.groupManager.table.options.groupValues||this.rows.length?(i.parentNode&&i.parentNode.removeChild(i),this.generateGroupHeaderContents(),this.groupManager.table.modExists("columnCalcs")&&"table"!=this.groupManager.table.options.columnCalcs&&this.groupManager.table.modules.columnCalcs.recalcGroup(this)):(this.parent?this.parent.removeGroup(this):this.groupManager.removeGroup(this),this.groupManager.updateGroupRows(!0))}removeGroup(e){var t,i=e.level+"_"+e.key;this.groups[i]&&(delete this.groups[i],(t=this.groupList.indexOf(e))>-1&&this.groupList.splice(t,1),this.groupList.length||(this.parent?this.parent.removeGroup(this):this.groupManager.removeGroup(this)))}getHeadersAndRows(e){var t=[];return t.push(this),this._visSet(),this.visible?this.groupList.length?this.groupList.forEach((function(i){t=t.concat(i.getHeadersAndRows(e))})):(!e&&"table"!=this.groupManager.table.options.columnCalcs&&this.groupManager.table.modExists("columnCalcs")&&this.groupManager.table.modules.columnCalcs.hasTopCalcs()&&(this.calcs.top&&(this.calcs.top.detachElement(),this.calcs.top.deleteCells()),this.calcs.top=this.groupManager.table.modules.columnCalcs.generateTopRow(this.rows),t.push(this.calcs.top)),t=t.concat(this.rows),!e&&"table"!=this.groupManager.table.options.columnCalcs&&this.groupManager.table.modExists("columnCalcs")&&this.groupManager.table.modules.columnCalcs.hasBottomCalcs()&&(this.calcs.bottom&&(this.calcs.bottom.detachElement(),this.calcs.bottom.deleteCells()),this.calcs.bottom=this.groupManager.table.modules.columnCalcs.generateBottomRow(this.rows),t.push(this.calcs.bottom))):this.groupList.length||"table"==this.groupManager.table.options.columnCalcs||this.groupManager.table.modExists("columnCalcs")&&(!e&&this.groupManager.table.modules.columnCalcs.hasTopCalcs()&&(this.calcs.top&&(this.calcs.top.detachElement(),this.calcs.top.deleteCells()),this.groupManager.table.options.groupClosedShowCalcs&&(this.calcs.top=this.groupManager.table.modules.columnCalcs.generateTopRow(this.rows),t.push(this.calcs.top))),!e&&this.groupManager.table.modules.columnCalcs.hasBottomCalcs()&&(this.calcs.bottom&&(this.calcs.bottom.detachElement(),this.calcs.bottom.deleteCells()),this.groupManager.table.options.groupClosedShowCalcs&&(this.calcs.bottom=this.groupManager.table.modules.columnCalcs.generateBottomRow(this.rows),t.push(this.calcs.bottom)))),t}getData(e,t){var i=[];return this._visSet(),(!e||e&&this.visible)&&this.rows.forEach((e=>{i.push(e.getData(t||"data"))})),i}getRowCount(){var e=0;return this.groupList.length?this.groupList.forEach((t=>{e+=t.getRowCount()})):e=this.rows.length,e}toggleVisibility(){this.visible?this.hide():this.show()}hide(){this.visible=!1,"classic"!=this.groupManager.table.rowManager.getRenderMode()||this.groupManager.table.options.pagination?this.groupManager.updateGroupRows(!0):(this.element.classList.remove("tabulator-group-visible"),this.groupList.length?this.groupList.forEach((e=>{e.getHeadersAndRows().forEach((e=>{e.detachElement()}))})):this.rows.forEach((e=>{var t=e.getElement();t.parentNode.removeChild(t)})),this.groupManager.table.rowManager.setDisplayRows(this.groupManager.updateGroupRows(),this.groupManager.getDisplayIndex()),this.groupManager.table.rowManager.checkClassicModeGroupHeaderWidth()),this.groupManager.table.options.groupVisibilityChanged.call(this.table,this.getComponent(),!1)}show(){if(this.visible=!0,"classic"!=this.groupManager.table.rowManager.getRenderMode()||this.groupManager.table.options.pagination)this.groupManager.updateGroupRows(!0);else{this.element.classList.add("tabulator-group-visible");var e=this.getElement();this.groupList.length?this.groupList.forEach((t=>{t.getHeadersAndRows().forEach((t=>{var i=t.getElement();e.parentNode.insertBefore(i,e.nextSibling),t.initialize(),e=i}))})):this.rows.forEach((t=>{var i=t.getElement();e.parentNode.insertBefore(i,e.nextSibling),t.initialize(),e=i})),this.groupManager.table.rowManager.setDisplayRows(this.groupManager.updateGroupRows(),this.groupManager.getDisplayIndex()),this.groupManager.table.rowManager.checkClassicModeGroupHeaderWidth()}this.groupManager.table.options.groupVisibilityChanged.call(this.table,this.getComponent(),!0)}_visSet(){var e=[];"function"==typeof this.visible&&(this.rows.forEach((function(t){e.push(t.getData())})),this.visible=this.visible(this.key,this.getRowCount(),e,this.getComponent()))}getRowGroup(e){var t=!1;return this.groupList.length?this.groupList.forEach((function(i){var o=i.getRowGroup(e);o&&(t=o)})):this.rows.find((function(t){return t===e}))&&(t=this),t}getSubGroups(e){var t=[];return this.groupList.forEach((function(i){t.push(e?i.getComponent():i)})),t}getRows(e){var t=[];return this.rows.forEach((function(i){t.push(e?i.getComponent():i)})),t}generateGroupHeaderContents(){var e=[];for(this.rows.forEach((function(t){e.push(t.getData())})),this.elementContents=this.generator(this.key,this.getRowCount(),e,this.getComponent());this.element.firstChild;)this.element.removeChild(this.element.firstChild);"string"==typeof this.elementContents?this.element.innerHTML=this.elementContents:this.element.appendChild(this.elementContents),this.element.insertBefore(this.arrowElement,this.element.firstChild)}getPath(e=[]){return e.unshift(this.key),this.parent&&this.parent.getPath(e),e}getElement(){this.addBindingsd=!1,this._visSet(),this.visible?this.element.classList.add("tabulator-group-visible"):this.element.classList.remove("tabulator-group-visible");for(var e=0;ei.length&&console.warn("Error creating group headers, groupHeader array is shorter than groupBy array"),this.headerGenerator=[function(){return""}],this.startOpen=[function(){return!1}],this.table.modules.localize.bind("groups|item",((e,t)=>{this.headerGenerator[0]=(i,o,s)=>(void 0===i?"":i)+"("+o+" "+(1===o?e:t.groups.items)+")"})),this.groupIDLookups=[],Array.isArray(e)||e)?this.table.modExists("columnCalcs")&&"table"!=this.table.options.columnCalcs&&"both"!=this.table.options.columnCalcs&&this.table.modules.columnCalcs.removeCalcs():this.table.modExists("columnCalcs")&&"group"!=this.table.options.columnCalcs&&this.table.columnManager.getRealColumns().forEach((e=>{e.definition.topCalc&&this.table.modules.columnCalcs.initializeTopRow(),e.definition.bottomCalc&&this.table.modules.columnCalcs.initializeBottomRow()}));Array.isArray(e)||(e=[e]),e.forEach(((e,t)=>{var i,o;i="function"==typeof e?e:(o=this.table.columnManager.getColumnByField(e))?function(e){return o.getFieldValue(e)}:function(t){return t[e]},this.groupIDLookups.push({field:"function"!=typeof e&&e,func:i,values:!!this.allowedValues&&this.allowedValues[t]})})),t&&(Array.isArray(t)||(t=[t]),t.forEach((e=>{})),this.startOpen=t),i&&(this.headerGenerator=Array.isArray(i)?i:[i]),this.initialized=!0}setDisplayIndex(e){this.displayIndex=e}getDisplayIndex(){return this.displayIndex}getRows(e){return this.groupIDLookups.length?(this.table.options.dataGrouping.call(this.table),this.generateGroups(e),this.table.options.dataGrouped&&this.table.options.dataGrouped.call(this.table,this.getGroups(!0)),this.updateGroupRows()):e.slice(0)}getGroups(e){var t=[];return this.groupList.forEach((function(i){t.push(e?i.getComponent():i)})),t}getChildGroups(e){var t=[];return e||(e=this),e.groupList.forEach((e=>{e.groupList.length?t=t.concat(this.getChildGroups(e)):t.push(e)})),t}wipe(){this.groupList.forEach((function(e){e.wipe()}))}pullGroupListData(e){var t=[];return e.forEach((e=>{var i={level:0,rowCount:0,headerContent:""},o=[];e.hasSubGroups?(o=this.pullGroupListData(e.groupList),i.level=e.level,i.rowCount=o.length-e.groupList.length,i.headerContent=e.generator(e.key,i.rowCount,e.rows,e),t.push(i),t=t.concat(o)):(i.level=e.level,i.headerContent=e.generator(e.key,e.rows.length,e.rows,e),i.rowCount=e.getRows().length,t.push(i),e.getRows().forEach((e=>{t.push(e.getData("data"))})))})),t}getGroupedData(){return this.pullGroupListData(this.groupList)}getRowGroup(e){var t=!1;return this.groupList.forEach((i=>{var o=i.getRowGroup(e);o&&(t=o)})),t}countGroups(){return this.groupList.length}generateGroups(e){var t=this.groups;this.groups={},this.groupList=[],this.allowedValues&&this.allowedValues[0]?(this.allowedValues[0].forEach((e=>{this.createGroup(e,0,t)})),e.forEach((e=>{this.assignRowToExistingGroup(e,t)}))):e.forEach((e=>{this.assignRowToGroup(e,t)}))}createGroup(e,t,i){var o,s=t+"_"+e;i=i||[],o=new S(this,!1,t,e,this.groupIDLookups[0].field,this.headerGenerator[0],i[s]),this.groups[s]=o,this.groupList.push(o)}assignRowToExistingGroup(e,t){var i="0_"+this.groupIDLookups[0].func(e.getData());this.groups[i]&&this.groups[i].addRow(e)}assignRowToGroup(e,t){var i=this.groupIDLookups[0].func(e.getData()),o=!this.groups["0_"+i];return o&&this.createGroup(i,0,t),this.groups["0_"+i].addRow(e),!o}reassignRowToGroup(e){var t=e.getGroup(),i=t.getPath(),o=this.getExpectedPath(e);i.length==o.length&&i.every(((e,t)=>e===o[t]))||(t.removeRow(e),this.assignRowToGroup(e,this.groups),this.table.rowManager.refreshActiveData("group",!1,!0))}getExpectedPath(e){var t=[],i=e.getData();return this.groupIDLookups.forEach((e=>{t.push(e.func(i))})),t}updateGroupRows(e){var t=[];if(this.groupList.forEach((e=>{t=t.concat(e.getHeadersAndRows())})),e){var i=this.table.rowManager.setDisplayRows(t,this.getDisplayIndex());!0!==i&&this.setDisplayIndex(i),this.table.rowManager.refreshActiveData("group",!0,!0)}return t}scrollHeaders(e){this.table.options.virtualDomHoz&&(e-=this.table.vdomHoz.vDomPadLeft),e+="px",this.groupList.forEach((t=>{t.scrollHeader(e)}))}removeGroup(e){var t,i=e.level+"_"+e.key;this.groups[i]&&(delete this.groups[i],(t=this.groupList.indexOf(e))>-1&&this.groupList.splice(t,1))}}H.moduleName="groupRows";class P extends t{constructor(e){super(e),this.history=[],this.index=-1}clear(){this.history=[],this.index=-1}action(e,t,i){this.history=this.history.slice(0,this.index+1),this.history.push({type:e,component:t,data:i}),this.index++}getHistoryUndoSize(){return this.index+1}getHistoryRedoSize(){return this.history.length-(this.index+1)}clearComponentHistory(e){var t=this.history.findIndex((function(t){return t.component===e}));t>-1&&(this.history.splice(t,1),t<=this.index&&this.index--,this.clearComponentHistory(e))}undo(){if(this.index>-1){let e=this.history[this.index];return P.undoers[e.type].call(this,e),this.index--,this.table.options.historyUndo.call(this.table,e.type,e.component.getComponent(),e.data),!0}return console.warn("History Undo Error - No more history to undo"),!1}redo(){if(this.history.length-1>this.index){this.index++;let e=this.history[this.index];return P.redoers[e.type].call(this,e),this.table.options.historyRedo.call(this.table,e.type,e.component.getComponent(),e.data),!0}return console.warn("History Redo Error - No more history to redo"),!1}_rebindRow(e,t){this.history.forEach((function(i){if(i.component instanceof Row)i.component===e&&(i.component=t);else if(i.component instanceof Cell&&i.component.row===e){var o=i.component.column.getField();o&&(i.component=t.getCell(o))}}))}}P.moduleName="history",P.undoers={cellEdit:function(e){e.component.setValueProcessData(e.data.oldValue)},rowAdd:function(e){e.component.deleteActual()},rowDelete:function(e){var t=this.table.rowManager.addRowActual(e.data.data,e.data.pos,e.data.index);this.table.options.groupBy&&this.table.modExists("groupRows")&&this.table.modules.groupRows.updateGroupRows(!0),this._rebindRow(e.component,t)},rowMove:function(e){this.table.rowManager.moveRowActual(e.component,this.table.rowManager.rows[e.data.posFrom],!e.data.after),this.table.rowManager.redraw()}},P.redoers={cellEdit:function(e){e.component.setValueProcessData(e.data.newValue)},rowAdd:function(e){var t=this.table.rowManager.addRowActual(e.data.data,e.data.pos,e.data.index);this.table.options.groupBy&&this.table.modExists("groupRows")&&this.table.modules.groupRows.updateGroupRows(!0),this._rebindRow(e.component,t)},rowDelete:function(e){e.component.deleteActual()},rowMove:function(e){this.table.rowManager.moveRowActual(e.component,this.table.rowManager.rows[e.data.posTo],e.data.after),this.table.rowManager.redraw()}};class A extends t{constructor(e){super(e),this.fieldIndex=[],this.hasIndex=!1}parseTable(){var e=this.table.element,t=this.table.options,i=(t.columns,e.getElementsByTagName("th")),o=e.getElementsByTagName("tbody")[0],s=[];this.hasIndex=!1,this.table.options.htmlImporting.call(this.table),o=o?o.getElementsByTagName("tr"):[],this._extractOptions(e,t),i.length?this._extractHeaders(i,o):this._generateBlankHeaders(i,o);for(var a=0;a{a[e.toLowerCase()]=e})),o){var n,r=o[l];r&&"object"==typeof r&&r.name&&0===r.name.indexOf("tabulator-")&&(n=r.name.replace("tabulator-",""),void 0!==a[n]&&(t[a[n]]=this._attribValue(r.value)))}}_attribValue(e){return"true"===e||"false"!==e&&e}_findCol(e){return this.table.options.columns.find((t=>t.title===e))||!1}_extractHeaders(e,t){for(var i=0;i=0?t.element.scrollTop=i:t.scrollToRow(t.getDisplayRows()[0])),this.table.element.focus()},scrollPageDown:function(e){var t=this.table.rowManager,i=t.scrollTop+t.height,o=t.element.scrollHeight;e.preventDefault(),t.displayRowsCount&&(i<=o?t.element.scrollTop=i:t.scrollToRow(t.getDisplayRows()[t.displayRowsCount-1])),this.table.element.focus()},scrollToStart:function(e){var t=this.table.rowManager;e.preventDefault(),t.displayRowsCount&&t.scrollToRow(t.getDisplayRows()[0]),this.table.element.focus()},scrollToEnd:function(e){var t=this.table.rowManager;e.preventDefault(),t.displayRowsCount&&t.scrollToRow(t.getDisplayRows()[t.displayRowsCount-1]),this.table.element.focus()},navPrev:function(e){var t=!1;this.table.modExists("edit")&&(t=this.table.modules.edit.currentCell)&&(e.preventDefault(),t.nav().prev())},navNext:function(e){var t,i=!1,o=this.table.options.tabEndNewRow;this.table.modExists("edit")&&(i=this.table.modules.edit.currentCell)&&(e.preventDefault(),(t=i.nav()).next()||o&&(i.getElement().firstChild.blur(),(o=!0===o?this.table.addRow({}):"function"==typeof o?this.table.addRow(o(i.row.getComponent())):this.table.addRow(Object.assign({},o))).then((()=>{setTimeout((()=>{t.next()}))}))))},navLeft:function(e){var t=!1;this.table.modExists("edit")&&(t=this.table.modules.edit.currentCell)&&(e.preventDefault(),t.nav().left())},navRight:function(e){var t=!1;this.table.modExists("edit")&&(t=this.table.modules.edit.currentCell)&&(e.preventDefault(),t.nav().right())},navUp:function(e){var t=!1;this.table.modExists("edit")&&(t=this.table.modules.edit.currentCell)&&(e.preventDefault(),t.nav().up())},navDown:function(e){var t=!1;this.table.modExists("edit")&&(t=this.table.modules.edit.currentCell)&&(e.preventDefault(),t.nav().down())},undo:function(e){this.table.options.history&&this.table.modExists("history")&&this.table.modExists("edit")&&(this.table.modules.edit.currentCell||(e.preventDefault(),this.table.modules.history.undo()))},redo:function(e){this.table.options.history&&this.table.modExists("history")&&this.table.modExists("edit")&&(this.table.modules.edit.currentCell||(e.preventDefault(),this.table.modules.history.redo()))},copyToClipboard:function(e){this.table.modules.edit.currentCell||this.table.modExists("clipboard",!0)&&this.table.modules.clipboard.copy(!1,!0)}};class _ extends t{constructor(e){super(e),this.watchKeys=null,this.pressedKeys=null,this.keyupBinding=!1,this.keydownBinding=!1}initialize(){var e=this.table.options.keybindings,t={};if(this.watchKeys={},this.pressedKeys=[],!1!==e){for(let e in _.bindings)t[e]=_.bindings[e];if(Object.keys(e).length)for(let i in e)t[i]=e[i];this.mapBindings(t),this.bindEvents()}}mapBindings(e){for(let t in e)_.actions[t]?e[t]&&("object"!=typeof e[t]&&(e[t]=[e[t]]),e[t].forEach((e=>{this.mapBinding(t,e)}))):console.warn("Key Binding Error - no such action:",t)}mapBinding(e,t){var i={action:_.actions[e],keys:[],ctrl:!1,shift:!1,meta:!1};t.toString().toLowerCase().split(" ").join("").split("+").forEach((e=>{switch(e){case"ctrl":i.ctrl=!0;break;case"shift":i.shift=!0;break;case"meta":i.meta=!0;break;default:e=parseInt(e),i.keys.push(e),this.watchKeys[e]||(this.watchKeys[e]=[]),this.watchKeys[e].push(i)}}))}bindEvents(){var e=this;this.keyupBinding=function(t){var i=t.keyCode,o=e.watchKeys[i];o&&(e.pressedKeys.push(i),o.forEach((function(i){e.checkBinding(t,i)})))},this.keydownBinding=function(t){var i=t.keyCode;if(e.watchKeys[i]){var o=e.pressedKeys.indexOf(i);o>-1&&e.pressedKeys.splice(o,1)}},this.table.element.addEventListener("keydown",this.keyupBinding),this.table.element.addEventListener("keyup",this.keydownBinding)}clearBindings(){this.keyupBinding&&this.table.element.removeEventListener("keydown",this.keyupBinding),this.keydownBinding&&this.table.element.removeEventListener("keyup",this.keydownBinding)}checkBinding(e,t){var i=!0;return e.ctrlKey==t.ctrl&&e.shiftKey==t.shift&&e.metaKey==t.meta&&(t.keys.forEach((e=>{-1==this.pressedKeys.indexOf(e)&&(i=!1)})),i&&t.action.call(this,e),!0)}}_.moduleName="keybindings",_.bindings={navPrev:"shift + 9",navNext:9,navUp:38,navDown:40,scrollPageUp:33,scrollPageDown:34,scrollToStart:36,scrollToEnd:35,undo:"ctrl + 90",redo:"ctrl + 89",copyToClipboard:"ctrl + 67"},_.actions=F;class N extends t{constructor(e){super(e),this.menuElements=[],this.blurEvent=this.hideMenu.bind(this),this.escEvent=this.escMenu.bind(this),this.nestedMenuBlock=!1,this.positionReversedX=!1}initializeColumnHeader(e){var t;e.definition.headerContextMenu&&(e.getElement().addEventListener("contextmenu",this.LoadMenuEvent.bind(this,e,e.definition.headerContextMenu)),this.tapHold(e,e.definition.headerContextMenu)),e.definition.headerMenu&&((t=document.createElement("span")).classList.add("tabulator-header-menu-button"),t.innerHTML="⋮",t.addEventListener("click",(t=>{t.stopPropagation(),t.preventDefault(),this.LoadMenuEvent(e,e.definition.headerMenu,t)})),e.titleElement.insertBefore(t,e.titleElement.firstChild))}LoadMenuEvent(e,t,i){t="function"==typeof t?t.call(this.table,e.getComponent(),i):t,this.loadMenu(i,e,t)}tapHold(e,t){var i=e.getElement(),o=null,s=!1;i.addEventListener("touchstart",(i=>{clearTimeout(o),s=!1,o=setTimeout((()=>{clearTimeout(o),o=null,s=!0,this.LoadMenuEvent(e,t,i)}),1e3)}),{passive:!0}),i.addEventListener("touchend",(e=>{clearTimeout(o),o=null,s&&e.preventDefault()}))}initializeCell(e){e.column.definition.contextMenu&&(e.getElement(!0).addEventListener("contextmenu",this.LoadMenuEvent.bind(this,e,e.column.definition.contextMenu)),this.tapHold(e,e.column.definition.contextMenu)),e.column.definition.clickMenu&&e.getElement(!0).addEventListener("click",this.LoadMenuEvent.bind(this,e,e.column.definition.clickMenu))}initializeRow(e){this.table.options.rowContextMenu&&(e.getElement().addEventListener("contextmenu",this.LoadMenuEvent.bind(this,e,this.table.options.rowContextMenu)),this.tapHold(e,this.table.options.rowContextMenu)),this.table.options.rowClickMenu&&e.getElement().addEventListener("click",this.LoadMenuEvent.bind(this,e,this.table.options.rowClickMenu))}initializeGroup(e){this.table.options.groupContextMenu&&(e.getElement().addEventListener("contextmenu",this.LoadMenuEvent.bind(this,e,this.table.options.groupContextMenu)),this.tapHold(e,this.table.options.groupContextMenu)),this.table.options.groupClickMenu&&e.getElement().addEventListener("click",this.LoadMenuEvent.bind(this,e,this.table.options.groupClickMenu))}loadMenu(e,t,i,o){var s=!(e instanceof MouseEvent),a=document.createElement("div");if(a.classList.add("tabulator-menu"),s||e.preventDefault(),i&&i.length){if(!o){if(this.nestedMenuBlock){if(this.isOpen())return}else this.nestedMenuBlock=setTimeout((()=>{this.nestedMenuBlock=!1}),100);this.hideMenu(),this.menuElements=[]}i.forEach((e=>{var i=document.createElement("div"),o=e.label,s=e.disabled;e.separator?i.classList.add("tabulator-menu-separator"):(i.classList.add("tabulator-menu-item"),"function"==typeof o&&(o=o.call(this.table,t.getComponent())),o instanceof Node?i.appendChild(o):i.innerHTML=o,"function"==typeof s&&(s=s.call(this.table,t.getComponent())),s?(i.classList.add("tabulator-menu-item-disabled"),i.addEventListener("click",(e=>{e.stopPropagation()}))):e.menu&&e.menu.length?i.addEventListener("click",(o=>{o.stopPropagation(),this.hideOldSubMenus(a),this.loadMenu(o,t,e.menu,i)})):e.action&&i.addEventListener("click",(i=>{e.action(i,t.getComponent())})),e.menu&&e.menu.length&&i.classList.add("tabulator-menu-item-submenu")),a.appendChild(i)})),a.addEventListener("click",(e=>{this.hideMenu()})),this.menuElements.push(a),this.positionMenu(a,o,s,e)}}hideOldSubMenus(e){var t=this.menuElements.indexOf(e);if(t>-1)for(let e=this.menuElements.length-1;e>t;e--){var i=this.menuElements[e];i.parentNode&&i.parentNode.removeChild(i),this.menuElements.pop()}}positionMenu(e,t,i,s){var a,l,n,r=Math.max(document.body.offsetHeight,window.innerHeight);t?(a=(n=o.elOffset(t)).left+t.offsetWidth,l=n.top-1):(a=i?s.touches[0].pageX:s.pageX,l=i?s.touches[0].pageY:s.pageY,this.positionReversedX=!1),e.style.top=l+"px",e.style.left=a+"px",setTimeout((()=>{this.table.rowManager.element.addEventListener("scroll",this.blurEvent),document.body.addEventListener("click",this.blurEvent),document.body.addEventListener("contextmenu",this.blurEvent),window.addEventListener("resize",this.blurEvent),document.body.addEventListener("keydown",this.escEvent)}),100),document.body.appendChild(e),l+e.offsetHeight>=r&&(e.style.top="",e.style.bottom=t?r-n.top-t.offsetHeight-1+"px":r-l+"px"),(a+e.offsetWidth>=document.body.offsetWidth||this.positionReversedX)&&(e.style.left="",e.style.right=t?document.documentElement.offsetWidth-n.left+"px":document.documentElement.offsetWidth-a+"px",this.positionReversedX=!0)}isOpen(){return!!this.menuElements.length}escMenu(e){27==e.keyCode&&this.hideMenu()}hideMenu(){this.menuElements.forEach((e=>{e.parentNode&&e.parentNode.removeChild(e)})),document.body.removeEventListener("keydown",this.escEvent),document.body.removeEventListener("click",this.blurEvent),document.body.removeEventListener("contextmenu",this.blurEvent),window.removeEventListener("resize",this.blurEvent),this.table.rowManager.element.removeEventListener("scroll",this.blurEvent)}}N.moduleName="menu";class B extends t{constructor(e){super(e),this.placeholderElement=this.createPlaceholderElement(),this.hoverElement=!1,this.checkTimeout=!1,this.checkPeriod=250,this.moving=!1,this.toCol=!1,this.toColAfter=!1,this.startX=0,this.autoScrollMargin=40,this.autoScrollStep=5,this.autoScrollTimeout=!1,this.touchMove=!1,this.moveHover=this.moveHover.bind(this),this.endMove=this.endMove.bind(this)}createPlaceholderElement(){var e=document.createElement("div");return e.classList.add("tabulator-col"),e.classList.add("tabulator-col-placeholder"),e}initializeColumn(e){var t,i=this,s={};e.modules.frozen||(t=e.getElement(),s.mousemove=function(s){e.parent===i.moving.parent&&((i.touchMove?s.touches[0].pageX:s.pageX)-o.elOffset(t).left+i.table.columnManager.element.scrollLeft>e.getWidth()/2?i.toCol===e&&i.toColAfter||(t.parentNode.insertBefore(i.placeholderElement,t.nextSibling),i.moveColumn(e,!0)):(i.toCol!==e||i.toColAfter)&&(t.parentNode.insertBefore(i.placeholderElement,t),i.moveColumn(e,!1)))}.bind(i),t.addEventListener("mousedown",(function(t){i.touchMove=!1,1===t.which&&(i.checkTimeout=setTimeout((function(){i.startMove(t,e)}),i.checkPeriod))})),t.addEventListener("mouseup",(function(e){1===e.which&&i.checkTimeout&&clearTimeout(i.checkTimeout)})),i.bindTouchEvents(e)),e.modules.moveColumn=s}bindTouchEvents(e){var t,i,o,s,a,l,n=e.getElement(),r=!1;n.addEventListener("touchstart",(n=>{this.checkTimeout=setTimeout((()=>{this.touchMove=!0,t=e.nextColumn(),o=t?t.getWidth()/2:0,i=e.prevColumn(),s=i?i.getWidth()/2:0,a=0,l=0,r=!1,this.startMove(n,e)}),this.checkPeriod)}),{passive:!0}),n.addEventListener("touchmove",(n=>{var h,d;this.moving&&(this.moveHover(n),r||(r=n.touches[0].pageX),(h=n.touches[0].pageX-r)>0?t&&h-a>o&&(d=t)!==e&&(r=n.touches[0].pageX,d.getElement().parentNode.insertBefore(this.placeholderElement,d.getElement().nextSibling),this.moveColumn(d,!0)):i&&-h-l>s&&(d=i)!==e&&(r=n.touches[0].pageX,d.getElement().parentNode.insertBefore(this.placeholderElement,d.getElement()),this.moveColumn(d,!1)),d&&(t=d.nextColumn(),a=o,o=t?t.getWidth()/2:0,i=d.prevColumn(),l=s,s=i?i.getWidth()/2:0))}),{passive:!0}),n.addEventListener("touchend",(e=>{this.checkTimeout&&clearTimeout(this.checkTimeout),this.moving&&this.endMove(e)}))}startMove(e,t){var i=t.getElement();this.moving=t,this.startX=(this.touchMove?e.touches[0].pageX:e.pageX)-o.elOffset(i).left,this.table.element.classList.add("tabulator-block-select"),this.placeholderElement.style.width=t.getWidth()+"px",this.placeholderElement.style.height=t.getHeight()+"px",i.parentNode.insertBefore(this.placeholderElement,i),i.parentNode.removeChild(i),this.hoverElement=i.cloneNode(!0),this.hoverElement.classList.add("tabulator-moving"),this.table.columnManager.getElement().appendChild(this.hoverElement),this.hoverElement.style.left="0",this.hoverElement.style.bottom="0",this.touchMove||(this._bindMouseMove(),document.body.addEventListener("mousemove",this.moveHover),document.body.addEventListener("mouseup",this.endMove)),this.moveHover(e)}_bindMouseMove(){this.table.columnManager.columnsByIndex.forEach((function(e){e.modules.moveColumn.mousemove&&e.getElement().addEventListener("mousemove",e.modules.moveColumn.mousemove)}))}_unbindMouseMove(){this.table.columnManager.columnsByIndex.forEach((function(e){e.modules.moveColumn.mousemove&&e.getElement().removeEventListener("mousemove",e.modules.moveColumn.mousemove)}))}moveColumn(e,t){var i=this.moving.getCells();this.toCol=e,this.toColAfter=t,t?e.getCells().forEach((function(e,t){var o=e.getElement(!0);o.parentNode.insertBefore(i[t].getElement(),o.nextSibling)})):e.getCells().forEach((function(e,t){var o=e.getElement(!0);o.parentNode.insertBefore(i[t].getElement(),o)}))}endMove(e){(1===e.which||this.touchMove)&&(this._unbindMouseMove(),this.placeholderElement.parentNode.insertBefore(this.moving.getElement(),this.placeholderElement.nextSibling),this.placeholderElement.parentNode.removeChild(this.placeholderElement),this.hoverElement.parentNode.removeChild(this.hoverElement),this.table.element.classList.remove("tabulator-block-select"),this.toCol&&this.table.columnManager.moveColumnActual(this.moving,this.toCol,this.toColAfter),this.moving=!1,this.toCol=!1,this.toColAfter=!1,this.touchMove||(document.body.removeEventListener("mousemove",this.moveHover),document.body.removeEventListener("mouseup",this.endMove)))}moveHover(e){var t,i=this.table.columnManager.getElement(),s=i.scrollLeft,a=(this.touchMove?e.touches[0].pageX:e.pageX)-o.elOffset(i).left+s;this.hoverElement.style.left=a-this.startX+"px",a-s{t=Math.max(0,s-5),this.table.rowManager.getElement().scrollLeft=t,this.autoScrollTimeout=!1}),1))),s+i.clientWidth-a{t=Math.min(i.clientWidth,s+5),this.table.rowManager.getElement().scrollLeft=t,this.autoScrollTimeout=!1}),1)))}}B.moduleName="moveColumn";class O extends t{constructor(e){super(e),this.placeholderElement=this.createPlaceholderElement(),this.hoverElement=!1,this.checkTimeout=!1,this.checkPeriod=150,this.moving=!1,this.toRow=!1,this.toRowAfter=!1,this.hasHandle=!1,this.startY=0,this.startX=0,this.moveHover=this.moveHover.bind(this),this.endMove=this.endMove.bind(this),this.tableRowDropEvent=!1,this.touchMove=!1,this.connection=!1,this.connectionSelectorsTables=!1,this.connectionSelectorsElements=!1,this.connectionElements=[],this.connections=[],this.connectedTable=!1,this.connectedRow=!1}createPlaceholderElement(){var e=document.createElement("div");return e.classList.add("tabulator-row"),e.classList.add("tabulator-row-placeholder"),e}initialize(e){this.connectionSelectorsTables=this.table.options.movableRowsConnectedTables,this.connectionSelectorsElements=this.table.options.movableRowsConnectedElements,this.connection=this.connectionSelectorsTables||this.connectionSelectorsElements}setHandle(e){this.hasHandle=e}initializeGroupHeader(e){var t=this,i={};i.mouseup=function(e){t.tableRowDrop(e,row)}.bind(t),i.mousemove=function(i){var s;i.pageY-o.elOffset(e.element).top+t.table.rowManager.element.scrollTop>e.getHeight()/2?t.toRow===e&&t.toRowAfter||((s=e.getElement()).parentNode.insertBefore(t.placeholderElement,s.nextSibling),t.moveRow(e,!0)):(t.toRow!==e||t.toRowAfter)&&(s=e.getElement()).previousSibling&&(s.parentNode.insertBefore(t.placeholderElement,s),t.moveRow(e,!1))}.bind(t),e.modules.moveRow=i}initializeRow(e){var t,i=this,s={};s.mouseup=function(t){i.tableRowDrop(t,e)}.bind(i),s.mousemove=function(t){var s=e.getElement();t.pageY-o.elOffset(s).top+i.table.rowManager.element.scrollTop>e.getHeight()/2?i.toRow===e&&i.toRowAfter||(s.parentNode.insertBefore(i.placeholderElement,s.nextSibling),i.moveRow(e,!0)):(i.toRow!==e||i.toRowAfter)&&(s.parentNode.insertBefore(i.placeholderElement,s),i.moveRow(e,!1))}.bind(i),this.hasHandle||((t=e.getElement()).addEventListener("mousedown",(function(t){1===t.which&&(i.checkTimeout=setTimeout((function(){i.startMove(t,e)}),i.checkPeriod))})),t.addEventListener("mouseup",(function(e){1===e.which&&i.checkTimeout&&clearTimeout(i.checkTimeout)})),this.bindTouchEvents(e,e.getElement())),e.modules.moveRow=s}initializeCell(e){var t=this,i=e.getElement(!0);i.addEventListener("mousedown",(function(i){1===i.which&&(t.checkTimeout=setTimeout((function(){t.startMove(i,e.row)}),t.checkPeriod))})),i.addEventListener("mouseup",(function(e){1===e.which&&t.checkTimeout&&clearTimeout(t.checkTimeout)})),this.bindTouchEvents(e.row,i)}bindTouchEvents(e,t){var i,o,s,a,l,n,r=!1;t.addEventListener("touchstart",(t=>{this.checkTimeout=setTimeout((()=>{this.touchMove=!0,i=e.nextRow(),s=i?i.getHeight()/2:0,o=e.prevRow(),a=o?o.getHeight()/2:0,l=0,n=0,r=!1,this.startMove(t,e)}),this.checkPeriod)}),{passive:!0}),this.moving,this.toRow,this.toRowAfter,t.addEventListener("touchmove",(t=>{var h,d;this.moving&&(t.preventDefault(),this.moveHover(t),r||(r=t.touches[0].pageY),(h=t.touches[0].pageY-r)>0?i&&h-l>s&&(d=i)!==e&&(r=t.touches[0].pageY,d.getElement().parentNode.insertBefore(this.placeholderElement,d.getElement().nextSibling),this.moveRow(d,!0)):o&&-h-n>a&&(d=o)!==e&&(r=t.touches[0].pageY,d.getElement().parentNode.insertBefore(this.placeholderElement,d.getElement()),this.moveRow(d,!1)),d&&(i=d.nextRow(),l=s,s=i?i.getHeight()/2:0,o=d.prevRow(),n=a,a=o?o.getHeight()/2:0))})),t.addEventListener("touchend",(e=>{this.checkTimeout&&clearTimeout(this.checkTimeout),this.moving&&(this.endMove(e),this.touchMove=!1)}))}_bindMouseMove(){this.table.rowManager.getDisplayRows().forEach((e=>{"row"!==e.type&&"group"!==e.type||!e.modules.moveRow.mousemove||e.getElement().addEventListener("mousemove",e.modules.moveRow.mousemove)}))}_unbindMouseMove(){this.table.rowManager.getDisplayRows().forEach((e=>{"row"!==e.type&&"group"!==e.type||!e.modules.moveRow.mousemove||e.getElement().removeEventListener("mousemove",e.modules.moveRow.mousemove)}))}startMove(e,t){var i=t.getElement();this.setStartPosition(e,t),this.moving=t,this.table.element.classList.add("tabulator-block-select"),this.placeholderElement.style.width=t.getWidth()+"px",this.placeholderElement.style.height=t.getHeight()+"px",this.connection?(this.table.element.classList.add("tabulator-movingrow-sending"),this.connectToTables(t)):(i.parentNode.insertBefore(this.placeholderElement,i),i.parentNode.removeChild(i)),this.hoverElement=i.cloneNode(!0),this.hoverElement.classList.add("tabulator-moving"),this.connection?(document.body.appendChild(this.hoverElement),this.hoverElement.style.left="0",this.hoverElement.style.top="0",this.hoverElement.style.width=this.table.element.clientWidth+"px",this.hoverElement.style.whiteSpace="nowrap",this.hoverElement.style.overflow="hidden",this.hoverElement.style.pointerEvents="none"):(this.table.rowManager.getTableElement().appendChild(this.hoverElement),this.hoverElement.style.left="0",this.hoverElement.style.top="0",this._bindMouseMove()),document.body.addEventListener("mousemove",this.moveHover),document.body.addEventListener("mouseup",this.endMove),this.moveHover(e)}setStartPosition(e,t){var i,o,s=this.touchMove?e.touches[0].pageX:e.pageX,a=this.touchMove?e.touches[0].pageY:e.pageY;i=t.getElement(),this.connection?(o=i.getBoundingClientRect(),this.startX=o.left-s+window.pageXOffset,this.startY=o.top-a+window.pageYOffset):this.startY=a-i.getBoundingClientRect().top}endMove(e){e&&1!==e.which&&!this.touchMove||(this._unbindMouseMove(),this.connection||(this.placeholderElement.parentNode.insertBefore(this.moving.getElement(),this.placeholderElement.nextSibling),this.placeholderElement.parentNode.removeChild(this.placeholderElement)),this.hoverElement.parentNode.removeChild(this.hoverElement),this.table.element.classList.remove("tabulator-block-select"),this.toRow&&this.table.rowManager.moveRow(this.moving,this.toRow,this.toRowAfter),this.moving=!1,this.toRow=!1,this.toRowAfter=!1,document.body.removeEventListener("mousemove",this.moveHover),document.body.removeEventListener("mouseup",this.endMove),this.connection&&(this.table.element.classList.remove("tabulator-movingrow-sending"),this.disconnectFromTables()))}moveRow(e,t){this.toRow=e,this.toRowAfter=t}moveHover(e){this.connection?this.moveHoverConnections.call(this,e):this.moveHoverTable.call(this,e)}moveHoverTable(e){var t=this.table.rowManager.getElement(),i=t.scrollTop,o=(this.touchMove?e.touches[0].pageY:e.pageY)-t.getBoundingClientRect().top+i;this.hoverElement.style.top=o-this.startY+"px"}moveHoverConnections(e){this.hoverElement.style.left=this.startX+(this.touchMove?e.touches[0].pageX:e.pageX)+"px",this.hoverElement.style.top=this.startY+(this.touchMove?e.touches[0].pageY:e.pageY)+"px"}elementRowDrop(e,t,i){this.table.options.movableRowsElementDrop&&this.table.options.movableRowsElementDrop(e,t,!!i&&i.getComponent())}connectToTables(e){var t;this.connectionSelectorsTables&&(t=this.table.modules.comms.getConnections(this.connectionSelectorsTables),this.table.options.movableRowsSendingStart.call(this.table,t),this.table.modules.comms.send(this.connectionSelectorsTables,"moveRow","connect",{row:e})),this.connectionSelectorsElements&&(this.connectionElements=[],Array.isArray(this.connectionSelectorsElements)||(this.connectionSelectorsElements=[this.connectionSelectorsElements]),this.connectionSelectorsElements.forEach((e=>{"string"==typeof e?this.connectionElements=this.connectionElements.concat(Array.prototype.slice.call(document.querySelectorAll(e))):this.connectionElements.push(e)})),this.connectionElements.forEach((e=>{var t=t=>{this.elementRowDrop(t,e,this.moving)};e.addEventListener("mouseup",t),e.tabulatorElementDropEvent=t,e.classList.add("tabulator-movingrow-receiving")})))}disconnectFromTables(){var e;this.connectionSelectorsTables&&(e=this.table.modules.comms.getConnections(this.connectionSelectorsTables),this.table.options.movableRowsSendingStop.call(this.table,e),this.table.modules.comms.send(this.connectionSelectorsTables,"moveRow","disconnect")),this.connectionElements.forEach((e=>{e.classList.remove("tabulator-movingrow-receiving"),e.removeEventListener("mouseup",e.tabulatorElementDropEvent),delete e.tabulatorElementDropEvent}))}connect(e,t){return this.connectedTable?(console.warn("Move Row Error - Table cannot accept connection, already connected to table:",this.connectedTable),!1):(this.connectedTable=e,this.connectedRow=t,this.table.element.classList.add("tabulator-movingrow-receiving"),this.table.rowManager.getDisplayRows().forEach((e=>{"row"===e.type&&e.modules.moveRow&&e.modules.moveRow.mouseup&&e.getElement().addEventListener("mouseup",e.modules.moveRow.mouseup)})),this.tableRowDropEvent=this.tableRowDrop.bind(this),this.table.element.addEventListener("mouseup",this.tableRowDropEvent),this.table.options.movableRowsReceivingStart.call(this.table,t,e),!0)}disconnect(e){e===this.connectedTable?(this.connectedTable=!1,this.connectedRow=!1,this.table.element.classList.remove("tabulator-movingrow-receiving"),this.table.rowManager.getDisplayRows().forEach((e=>{"row"===e.type&&e.modules.moveRow&&e.modules.moveRow.mouseup&&e.getElement().removeEventListener("mouseup",e.modules.moveRow.mouseup)})),this.table.element.removeEventListener("mouseup",this.tableRowDropEvent),this.table.options.movableRowsReceivingStop.call(this.table,e)):console.warn("Move Row Error - trying to disconnect from non connected table")}dropComplete(e,t,i){var o=!1;if(i){switch(typeof this.table.options.movableRowsSender){case"string":o=this.senders[this.table.options.movableRowsSender];break;case"function":o=this.table.options.movableRowsSender}o?o.call(this,this.moving.getComponent(),t?t.getComponent():void 0,e):this.table.options.movableRowsSender&&console.warn("Mover Row Error - no matching sender found:",this.table.options.movableRowsSender),this.table.options.movableRowsSent.call(this.table,this.moving.getComponent(),t?t.getComponent():void 0,e)}else this.table.options.movableRowsSentFailed.call(this.table,this.moving.getComponent(),t?t.getComponent():void 0,e);this.endMove()}tableRowDrop(e,t){var i=!1,o=!1;switch(e.stopImmediatePropagation(),typeof this.table.options.movableRowsReceiver){case"string":i=this.receivers[this.table.options.movableRowsReceiver];break;case"function":i=this.table.options.movableRowsReceiver}i?o=i.call(this,this.connectedRow.getComponent(),t?t.getComponent():void 0,this.connectedTable):console.warn("Mover Row Error - no matching receiver found:",this.table.options.movableRowsReceiver),o?this.table.options.movableRowsReceived.call(this.table,this.connectedRow.getComponent(),t?t.getComponent():void 0,this.connectedTable):this.table.options.movableRowsReceivedFailed.call(this.table,this.connectedRow.getComponent(),t?t.getComponent():void 0,this.connectedTable),this.table.modules.comms.send(this.connectedTable,"moveRow","dropcomplete",{row:t,success:o})}commsReceived(e,t,i){switch(t){case"connect":return this.connect(e,i.row);case"disconnect":return this.disconnect(e);case"dropcomplete":return this.dropComplete(e,i.row,i.success)}}}O.prototype.receivers={insert:function(e,t,i){return this.table.addRow(e.getData(),void 0,t),!0},add:function(e,t,i){return this.table.addRow(e.getData()),!0},update:function(e,t,i){return!!t&&(t.update(e.getData()),!0)},replace:function(e,t,i){return!!t&&(this.table.addRow(e.getData(),void 0,t),t.delete(),!0)}},O.prototype.senders={delete:function(e,t,i){e.delete()}},O.moduleName="moveRow";class I extends t{constructor(e){super(e),this.allowedTypes=["","data","edit","clipboard"],this.enabled=!0}initializeColumn(e){var t=!1,i={};this.allowedTypes.forEach((o=>{var s,a="mutator"+(o.charAt(0).toUpperCase()+o.slice(1));e.definition[a]&&(s=this.lookupMutator(e.definition[a]))&&(t=!0,i[a]={mutator:s,params:e.definition[a+"Params"]||{}})})),t&&(e.modules.mutate=i)}lookupMutator(e){var t=!1;switch(typeof e){case"string":I.mutators[e]?t=I.mutators[e]:console.warn("Mutator Error - No such mutator found, ignoring: ",e);break;case"function":t=e}return t}transformRow(e,t,i){var o,s="mutator"+(t.charAt(0).toUpperCase()+t.slice(1));return this.enabled&&this.table.columnManager.traverse((a=>{var l,n,r;a.modules.mutate&&(l=a.modules.mutate[s]||a.modules.mutate.mutator||!1)&&(o=a.getFieldValue(void 0!==i?i:e),"data"!=t&&void 0===o||(r=a.getComponent(),n="function"==typeof l.params?l.params(o,e,t,r):l.params,a.setFieldValue(e,l.mutator(o,e,t,n,r))))})),e}transformCell(e,t){var i=e.column.modules.mutate.mutatorEdit||e.column.modules.mutate.mutator||!1,o={};return i?(o=Object.assign(o,e.row.getData()),e.column.setFieldValue(o,t),i.mutator(t,o,"edit",i.params,e.getComponent())):t}enable(){this.enabled=!0}disable(){this.enabled=!1}}I.moduleName="mutator",I.mutators={};class j extends t{constructor(e){super(e),this.mode="local",this.progressiveLoad=!1,this.size=0,this.page=1,this.count=5,this.max=1,this.displayIndex=0,this.initialLoad=!0,this.pageSizes=[],this.dataReceivedNames={},this.dataSentNames={},this.createElements()}createElements(){var e;this.element=document.createElement("span"),this.element.classList.add("tabulator-paginator"),this.pagesElement=document.createElement("span"),this.pagesElement.classList.add("tabulator-pages"),(e=document.createElement("button")).classList.add("tabulator-page"),e.setAttribute("type","button"),e.setAttribute("role","button"),e.setAttribute("aria-label",""),e.setAttribute("title",""),this.firstBut=e.cloneNode(!0),this.firstBut.setAttribute("data-page","first"),this.prevBut=e.cloneNode(!0),this.prevBut.setAttribute("data-page","prev"),this.nextBut=e.cloneNode(!0),this.nextBut.setAttribute("data-page","next"),this.lastBut=e.cloneNode(!0),this.lastBut.setAttribute("data-page","last"),this.table.options.paginationSizeSelector&&(this.pageSizeSelect=document.createElement("select"),this.pageSizeSelect.classList.add("tabulator-page-size"))}generatePageSizeSelectList(){var e=[];if(this.pageSizeSelect){if(Array.isArray(this.table.options.paginationSizeSelector))e=this.table.options.paginationSizeSelector,this.pageSizes=e,-1==this.pageSizes.indexOf(this.size)&&e.unshift(this.size);else if(-1==this.pageSizes.indexOf(this.size)){e=[];for(let t=1;t<5;t++)e.push(this.size*t);this.pageSizes=e}else e=this.pageSizes;for(;this.pageSizeSelect.firstChild;)this.pageSizeSelect.removeChild(this.pageSizeSelect.firstChild);e.forEach((e=>{var t=document.createElement("option");t.value=e,!0===e?this.table.modules.localize.bind("pagination|all",(function(e){t.innerHTML=e})):t.innerHTML=e,this.pageSizeSelect.appendChild(t)})),this.pageSizeSelect.value=this.size}}initialize(e){var t,i,o;this.dataSentNames=Object.assign({},j.defaultDataSentNames),this.dataSentNames=Object.assign(this.dataSentNames,this.table.options.paginationDataSent),this.dataReceivedNames=Object.assign({},j.defaultDataReceivedNames),this.dataReceivedNames=Object.assign(this.dataReceivedNames,this.table.options.paginationDataReceived),this.table.modules.localize.bind("pagination|first",(e=>{this.firstBut.innerHTML=e})),this.table.modules.localize.bind("pagination|first_title",(e=>{this.firstBut.setAttribute("aria-label",e),this.firstBut.setAttribute("title",e)})),this.table.modules.localize.bind("pagination|prev",(e=>{this.prevBut.innerHTML=e})),this.table.modules.localize.bind("pagination|prev_title",(e=>{this.prevBut.setAttribute("aria-label",e),this.prevBut.setAttribute("title",e)})),this.table.modules.localize.bind("pagination|next",(e=>{this.nextBut.innerHTML=e})),this.table.modules.localize.bind("pagination|next_title",(e=>{this.nextBut.setAttribute("aria-label",e),this.nextBut.setAttribute("title",e)})),this.table.modules.localize.bind("pagination|last",(e=>{this.lastBut.innerHTML=e})),this.table.modules.localize.bind("pagination|last_title",(e=>{this.lastBut.setAttribute("aria-label",e),this.lastBut.setAttribute("title",e)})),this.firstBut.addEventListener("click",(()=>{this.setPage(1).then((()=>{})).catch((()=>{}))})),this.prevBut.addEventListener("click",(()=>{this.previousPage().then((()=>{})).catch((()=>{}))})),this.nextBut.addEventListener("click",(()=>{this.nextPage().then((()=>{})).catch((()=>{}))})),this.lastBut.addEventListener("click",(()=>{this.setPage(this.max).then((()=>{})).catch((()=>{}))})),this.table.options.paginationElement&&(this.element=this.table.options.paginationElement),this.pageSizeSelect&&(t=document.createElement("label"),this.table.modules.localize.bind("pagination|page_size",(e=>{this.pageSizeSelect.setAttribute("aria-label",e),this.pageSizeSelect.setAttribute("title",e),t.innerHTML=e})),this.element.appendChild(t),this.element.appendChild(this.pageSizeSelect),this.pageSizeSelect.addEventListener("change",(e=>{this.setPageSize("true"==this.pageSizeSelect.value||this.pageSizeSelect.value),this.setPage(1).then((()=>{})).catch((()=>{}))}))),this.element.appendChild(this.firstBut),this.element.appendChild(this.prevBut),this.element.appendChild(this.pagesElement),this.element.appendChild(this.nextBut),this.element.appendChild(this.lastBut),this.table.options.paginationElement||e||this.table.footerManager.append(this.element,this),this.mode=this.table.options.pagination,this.table.options.paginationSize?this.size=this.table.options.paginationSize:((i=document.createElement("div")).classList.add("tabulator-row"),i.style.visibility=e,(o=document.createElement("div")).classList.add("tabulator-cell"),o.innerHTML="Page Row Test",i.appendChild(o),this.table.rowManager.getTableElement().appendChild(i),this.size=Math.floor(this.table.rowManager.getElement().clientHeight/i.offsetHeight),this.table.rowManager.getTableElement().removeChild(i)),this.count=this.table.options.paginationButtonCount,this.generatePageSizeSelectList()}initializeProgressive(e){this.initialize(!0),this.mode="progressive_"+e,this.progressiveLoad=!0}setDisplayIndex(e){this.displayIndex=e}getDisplayIndex(){return this.displayIndex}setMaxRows(e){this.max=e?!0===this.size?1:Math.ceil(e/this.size):1,this.page>this.max&&(this.page=this.max)}reset(e,t){return("local"==this.mode||e)&&(this.page=1),t&&(this.initialLoad=!0),!0}setMaxPage(e){e=parseInt(e),this.max=e||1,this.page>this.max&&(this.page=this.max,this.trigger())}setPage(e){switch(e){case"first":return this.setPage(1);case"prev":return this.previousPage();case"next":return this.nextPage();case"last":return this.setPage(this.max)}return new Promise(((t,i)=>{(e=parseInt(e))>0&&e<=this.max||"local"!==this.mode?(this.page=e,this.trigger().then((()=>{t()})).catch((()=>{i()})),this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.page&&this.table.modules.persistence.save("page")):(console.warn("Pagination Error - Requested page is out of range of 1 - "+this.max+":",e),i())}))}setPageToRow(e){return new Promise(((t,i)=>{var o=this.table.rowManager.getDisplayRows(this.displayIndex-1).indexOf(e);if(o>-1){var s=!0===this.size?1:Math.ceil((o+1)/this.size);this.setPage(s).then((()=>{t()})).catch((()=>{i()}))}else console.warn("Pagination Error - Requested row is not visible"),i()}))}setPageSize(e){!0!==e&&(e=parseInt(e)),e>0&&(this.size=e),this.pageSizeSelect&&this.generatePageSizeSelectList(),this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.page&&this.table.modules.persistence.save("page")}_setPageButtons(){let e=Math.floor((this.count-1)/2),t=Math.ceil((this.count-1)/2),i=this.max-this.page+e+10&&e<=this.max&&this.pagesElement.appendChild(this._generatePageButton(e));this.footerRedraw()}_generatePageButton(e){var t=document.createElement("button");return t.classList.add("tabulator-page"),e==this.page&&t.classList.add("active"),t.setAttribute("type","button"),t.setAttribute("role","button"),this.table.modules.localize.bind("pagination|page_title",(i=>{t.setAttribute("aria-label",i+" "+e),t.setAttribute("title",i+" "+e)})),t.setAttribute("data-page",e),t.textContent=e,t.addEventListener("click",(t=>{this.setPage(e).then((()=>{})).catch((()=>{}))})),t}previousPage(){return new Promise(((e,t)=>{this.page>1?(this.page--,this.trigger().then((()=>{e()})).catch((()=>{t()})),this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.page&&this.table.modules.persistence.save("page")):(console.warn("Pagination Error - Previous page would be less than page 1:",0),t())}))}nextPage(){return new Promise(((e,t)=>{this.page{e()})).catch((()=>{t()})),this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.page&&this.table.modules.persistence.save("page")):(this.progressiveLoad||console.warn("Pagination Error - Next page would be greater than maximum page of "+this.max+":",this.max+1),t())}))}getPage(){return this.page}getPageMax(){return this.max}getPageSize(e){return this.size}getMode(){return this.mode}getRows(e){var t,i,o;if("local"==this.mode){t=[],!0===this.size?(i=0,o=e.length):o=(i=this.size*(this.page-1))+parseInt(this.size),this._setPageButtons();for(let s=i;s{switch(this.mode){case"local":e=this.table.rowManager.scrollLeft,this.table.rowManager.refreshActiveData("page"),this.table.rowManager.scrollHorizontal(e),this.table.options.pageLoaded.call(this.table,this.getPage()),t();break;case"remote":case"progressive_load":case"progressive_scroll":this.table.modules.ajax.blockActiveRequest(),this._getRemotePage().then((()=>{t()})).catch((()=>{i()}));break;default:console.warn("Pagination Error - no such pagination mode:",this.mode),i()}}))}_getRemotePage(){var e,t;return new Promise(((i,s)=>{if(this.table.modExists("ajax",!0)||s(),e=o.deepClone(this.table.modules.ajax.getParams()||{}),(t=this.table.modules.ajax.getParams())[this.dataSentNames.page]=this.page,this.size&&(t[this.dataSentNames.size]=this.size),this.table.options.ajaxSorting&&this.table.modExists("sort")){let e=this.table.modules.sort.getSort();e.forEach((e=>{delete e.column})),t[this.dataSentNames.sorters]=e}if(this.table.options.ajaxFiltering&&this.table.modExists("filter")){let e=this.table.modules.filter.getFilters(!0,!0);t[this.dataSentNames.filters]=e}this.table.modules.ajax.setParams(t),this.table.modules.ajax.sendRequest(this.progressiveLoad).then((e=>{this._parseRemoteData(e),i()})).catch((e=>{s()})),this.table.modules.ajax.setParams(e)}))}_parseRemoteData(e){var t,i;if(void 0===e[this.dataReceivedNames.last_page]&&console.warn("Remote Pagination Error - Server response missing '"+this.dataReceivedNames.last_page+"' property"),e[this.dataReceivedNames.data]){if(this.max=parseInt(e[this.dataReceivedNames.last_page])||1,this.progressiveLoad)switch(this.mode){case"progressive_load":1==this.page?this.table.rowManager.setData(e[this.dataReceivedNames.data],!1,this.initialLoad&&1==this.page):this.table.rowManager.addRows(e[this.dataReceivedNames.data]),this.page{this.nextPage().then((()=>{})).catch((()=>{}))}),this.table.options.ajaxProgressiveLoadDelay);break;case"progressive_scroll":e=this.table.rowManager.getData().concat(e[this.dataReceivedNames.data]),this.table.rowManager.setData(e,!0,this.initialLoad&&1==this.page),i=this.table.options.ajaxProgressiveLoadScrollMargin||2*this.table.rowManager.element.clientHeight,this.table.rowManager.element.scrollHeight<=this.table.rowManager.element.clientHeight+i&&this.nextPage().then((()=>{})).catch((()=>{}))}else t=this.table.rowManager.scrollLeft,this.table.rowManager.setData(e[this.dataReceivedNames.data],!1,this.initialLoad&&1==this.page),this.table.rowManager.scrollHorizontal(t),this.table.columnManager.scrollHorizontal(t),this.table.options.pageLoaded.call(this.table,this.getPage());this.initialLoad=!1}else console.warn("Remote Pagination Error - Server response missing '"+this.dataReceivedNames.data+"' property")}footerRedraw(){var e=this.table.footerManager.element;Math.ceil(e.clientWidth)-e.scrollWidth<0?this.pagesElement.style.display="none":(this.pagesElement.style.display="",Math.ceil(e.clientWidth)-e.scrollWidth<0&&(this.pagesElement.style.display="none"))}}j.moduleName="page",j.defaultDataSentNames={page:"page",size:"size",sorters:"sorters",filters:"filters"},j.defaultDataReceivedNames={current_page:"current_page",last_page:"last_page",data:"data"};var V={local:function(e,t){var i=localStorage.getItem(e+"-"+t);return!!i&&JSON.parse(i)},cookie:function(e,t){var i,o,s=document.cookie,a=e+"-"+t,l=s.indexOf(a+"=");return l>-1&&((i=(s=s.substr(l)).indexOf(";"))>-1&&(s=s.substr(0,i)),o=s.replace(a+"=","")),!!o&&JSON.parse(o)}},W={local:function(e,t,i){localStorage.setItem(e+"-"+t,JSON.stringify(i))},cookie:function(e,t,i){var o=new Date;o.setDate(o.getDate()+1e4),document.cookie=e+"-"+t+"="+JSON.stringify(i)+"; expires="+o.toUTCString()}};class G extends t{constructor(e){super(e),this.mode="",this.id="",this.defWatcherBlock=!1,this.config={},this.readFunc=!1,this.writeFunc=!1}localStorageTest(){var e="_tabulator_test";try{return window.localStorage.setItem(e,e),window.localStorage.removeItem(e),!0}catch(e){return!1}}initialize(){var e,t=this.table.options.persistenceMode,i=this.table.options.persistenceID;this.mode=!0!==t?t:this.localStorageTest()?"local":"cookie",this.table.options.persistenceReaderFunc?"function"==typeof this.table.options.persistenceReaderFunc?this.readFunc=this.table.options.persistenceReaderFunc:G.readers[this.table.options.persistenceReaderFunc]?this.readFunc=G.readers[this.table.options.persistenceReaderFunc]:console.warn("Persistence Read Error - invalid reader set",this.table.options.persistenceReaderFunc):G.readers[this.mode]?this.readFunc=G.readers[this.mode]:console.warn("Persistence Read Error - invalid reader set",this.mode),this.table.options.persistenceWriterFunc?"function"==typeof this.table.options.persistenceWriterFunc?this.writeFunc=this.table.options.persistenceWriterFunc:G.writers[this.table.options.persistenceWriterFunc]?this.writeFunc=G.writers[this.table.options.persistenceWriterFunc]:console.warn("Persistence Write Error - invalid reader set",this.table.options.persistenceWriterFunc):G.writers[this.mode]?this.writeFunc=G.writers[this.mode]:console.warn("Persistence Write Error - invalid writer set",this.mode),this.id="tabulator-"+(i||this.table.element.getAttribute("id")||""),this.config={sort:!0===this.table.options.persistence||this.table.options.persistence.sort,filter:!0===this.table.options.persistence||this.table.options.persistence.filter,group:!0===this.table.options.persistence||this.table.options.persistence.group,page:!0===this.table.options.persistence||this.table.options.persistence.page,columns:!0===this.table.options.persistence?["title","width","visible"]:this.table.options.persistence.columns},this.config.page&&(e=this.retreiveData("page"))&&(void 0===e.paginationSize||!0!==this.config.page&&!this.config.page.size||(this.table.options.paginationSize=e.paginationSize),void 0===e.paginationInitialPage||!0!==this.config.page&&!this.config.page.page||(this.table.options.paginationInitialPage=e.paginationInitialPage)),this.config.group&&(e=this.retreiveData("group"))&&(void 0===e.groupBy||!0!==this.config.group&&!this.config.group.groupBy||(this.table.options.groupBy=e.groupBy),void 0===e.groupStartOpen||!0!==this.config.group&&!this.config.group.groupStartOpen||(this.table.options.groupStartOpen=e.groupStartOpen),void 0===e.groupHeader||!0!==this.config.group&&!this.config.group.groupHeader||(this.table.options.groupHeader=e.groupHeader)),this.config.columns&&(this.table.options.columns=this.load("columns",this.table.options.columns))}initializeColumn(e){var t;this.config.columns&&(this.defWatcherBlock=!0,t=e.getDefinition(),(!0===this.config.columns?Object.keys(t):this.config.columns).forEach((e=>{var i=Object.getOwnPropertyDescriptor(t,e),o=t[e];i&&Object.defineProperty(t,e,{set:function(e){o=e,this.defWatcherBlock||this.save("columns"),i.set&&i.set(e)},get:function(){return i.get&&i.get(),o}})})),this.defWatcherBlock=!1)}load(e,t){var i=this.retreiveData(e);return t&&(i=i?this.mergeDefinition(t,i):t),i}retreiveData(e){return!!this.readFunc&&this.readFunc(this.id,e)}mergeDefinition(e,t){var i=[];return(t=t||[]).forEach(((t,o)=>{var s,a=this._findColumn(e,t);a&&(!0===this.config.columns||null==this.config.columns?(s=Object.keys(a)).push("width"):s=this.config.columns,s.forEach((e=>{"columns"!==e&&void 0!==t[e]&&(a[e]=t[e])})),a.columns&&(a.columns=this.mergeDefinition(a.columns,t.columns)),i.push(a))})),e.forEach(((e,o)=>{this._findColumn(t,e)||(i.length>o?i.splice(o,0,e):i.push(e))})),i}_findColumn(e,t){var i=t.columns?"group":t.field?"field":"object";return e.find((function(e){switch(i){case"group":return e.title===t.title&&e.columns.length===t.columns.length;case"field":return e.field===t.field;case"object":return e===t}}))}save(e){var t={};switch(e){case"columns":t=this.parseColumns(this.table.columnManager.getColumns());break;case"filter":t=this.table.modules.filter.getFilters();break;case"sort":t=this.validateSorters(this.table.modules.sort.getSort());break;case"group":t=this.getGroupConfig();break;case"page":t=this.getPageConfig()}this.writeFunc&&this.writeFunc(this.id,e,t)}validateSorters(e){return e.forEach((function(e){e.column=e.field,delete e.field})),e}getGroupConfig(){var e={};return this.config.group&&((!0===this.config.group||this.config.group.groupBy)&&(e.groupBy=this.table.options.groupBy),(!0===this.config.group||this.config.group.groupStartOpen)&&(e.groupStartOpen=this.table.options.groupStartOpen),(!0===this.config.group||this.config.group.groupHeader)&&(e.groupHeader=this.table.options.groupHeader)),e}getPageConfig(){var e={};return this.config.page&&((!0===this.config.page||this.config.page.size)&&(e.paginationSize=this.table.modules.page.getPageSize()),(!0===this.config.page||this.config.page.page)&&(e.paginationInitialPage=this.table.modules.page.getPage())),e}parseColumns(e){var t=[],i=["headerContextMenu","headerMenu","contextMenu","clickMenu"];return e.forEach((e=>{var o,s={},a=e.getDefinition();e.isGroup?(s.title=a.title,s.columns=this.parseColumns(e.getColumns())):(s.field=e.getField(),!0===this.config.columns||null==this.config.columns?(o=Object.keys(a)).push("width"):o=this.config.columns,o.forEach((t=>{switch(t){case"width":s.width=e.getWidth();break;case"visible":s.visible=e.visible;break;default:"function"!=typeof a[t]&&-1===i.indexOf(t)&&(s[t]=a[t])}}))),t.push(s)})),t}}G.moduleName="persistence",G.readers=V,G.writers=W;class U extends t{constructor(e){super(e),this.element=!1,this.manualBlock=!1}initialize(){window.addEventListener("beforeprint",this.replaceTable.bind(this)),window.addEventListener("afterprint",this.cleanup.bind(this))}replaceTable(){this.manualBlock||(this.element=document.createElement("div"),this.element.classList.add("tabulator-print-table"),this.element.appendChild(this.table.modules.export.genereateTable(this.table.options.printConfig,this.table.options.printStyled,this.table.options.printRowRange,"print")),this.table.element.style.display="none",this.table.element.parentNode.insertBefore(this.element,this.table.element))}cleanup(){document.body.classList.remove("tabulator-print-fullscreen-hide"),this.element&&this.element.parentNode&&(this.element.parentNode.removeChild(this.element),this.table.element.style.display="")}printFullscreen(e,t,i){var o,s,a=window.scrollX,l=window.scrollY,n=document.createElement("div"),r=document.createElement("div"),h=this.table.modules.export.genereateTable(void 0!==i?i:this.table.options.printConfig,void 0!==t?t:this.table.options.printStyled,e||this.table.options.printRowRange,"print");this.manualBlock=!0,this.element=document.createElement("div"),this.element.classList.add("tabulator-print-fullscreen"),this.table.options.printHeader&&(n.classList.add("tabulator-print-header"),"string"==typeof(o="function"==typeof this.table.options.printHeader?this.table.options.printHeader.call(this.table):this.table.options.printHeader)?n.innerHTML=o:n.appendChild(o),this.element.appendChild(n)),this.element.appendChild(h),this.table.options.printFooter&&(r.classList.add("tabulator-print-footer"),"string"==typeof(s="function"==typeof this.table.options.printFooter?this.table.options.printFooter.call(this.table):this.table.options.printFooter)?r.innerHTML=s:r.appendChild(s),this.element.appendChild(r)),document.body.classList.add("tabulator-print-fullscreen-hide"),document.body.appendChild(this.element),this.table.options.printFormatter&&this.table.options.printFormatter(this.element,h),window.print(),this.cleanup(),window.scrollTo(a,l),this.manualBlock=!1}}U.moduleName="print";class X extends t{constructor(e){super(e),this.data=!1,this.blocked=!1,this.origFuncs={},this.currentVersion=0}watchData(e){var t,i=this;this.currentVersion++,t=this.currentVersion,i.unwatchData(),i.data=e,i.origFuncs.push=e.push,Object.defineProperty(i.data,"push",{enumerable:!1,configurable:!0,value:function(){var o=Array.from(arguments);return i.blocked||t!==i.currentVersion||o.forEach((function(e){i.table.rowManager.addRowActual(e,!1)})),i.origFuncs.push.apply(e,arguments)}}),i.origFuncs.unshift=e.unshift,Object.defineProperty(i.data,"unshift",{enumerable:!1,configurable:!0,value:function(){var o=Array.from(arguments);return i.blocked||t!==i.currentVersion||o.forEach((function(e){i.table.rowManager.addRowActual(e,!0)})),i.origFuncs.unshift.apply(e,arguments)}}),i.origFuncs.shift=e.shift,Object.defineProperty(i.data,"shift",{enumerable:!1,configurable:!0,value:function(){var o;return i.blocked||t!==i.currentVersion||i.data.length&&(o=i.table.rowManager.getRowFromDataObject(i.data[0]))&&o.deleteActual(),i.origFuncs.shift.call(e)}}),i.origFuncs.pop=e.pop,Object.defineProperty(i.data,"pop",{enumerable:!1,configurable:!0,value:function(){var o;return i.blocked||t!==i.currentVersion||i.data.length&&(o=i.table.rowManager.getRowFromDataObject(i.data[i.data.length-1]))&&o.deleteActual(),i.origFuncs.pop.call(e)}}),i.origFuncs.splice=e.splice,Object.defineProperty(i.data,"splice",{enumerable:!1,configurable:!0,value:function(){var o,s=Array.from(arguments),a=s[0]<0?e.length+s[0]:s[0],l=s[1],n=!!s[2]&&s.slice(2);if(!i.blocked&&t===i.currentVersion){if(n&&((o=!!e[a]&&i.table.rowManager.getRowFromDataObject(e[a]))?n.forEach((function(e){i.table.rowManager.addRowActual(e,!0,o,!0)})):(n=n.slice().reverse()).forEach((function(e){i.table.rowManager.addRowActual(e,!0,!1,!0)}))),0!==l){var r=e.slice(a,void 0===s[1]?s[1]:a+l);r.forEach((function(e,t){var o=i.table.rowManager.getRowFromDataObject(e);o&&o.deleteActual(t!==r.length-1)}))}(n||0!==l)&&i.table.rowManager.reRenderInPosition()}return i.origFuncs.splice.apply(e,arguments)}})}unwatchData(){if(!1!==this.data)for(var e in this.origFuncs)Object.defineProperty(this.data,e,{enumerable:!0,configurable:!0,writable:!0,value:this.origFuncs.key})}watchRow(e){var t=e.getData();for(var i in this.blocked=!0,t)this.watchKey(e,t,i);this.table.options.dataTree&&this.watchTreeChildren(e),this.blocked=!1}watchTreeChildren(e){var t=this,i=e.getData()[this.table.options.dataTreeChildField],o={};function s(){t.table.modules.dataTree.initializeRow(e),t.table.modules.dataTree.layoutRow(e),t.table.rowManager.refreshActiveData("tree",!1,!0)}i&&(o.push=i.push,Object.defineProperty(i,"push",{enumerable:!1,configurable:!0,value:function(){var e=o.push.apply(i,arguments);return s(),e}}),o.unshift=i.unshift,Object.defineProperty(i,"unshift",{enumerable:!1,configurable:!0,value:function(){var e=o.unshift.apply(i,arguments);return s(),e}}),o.shift=i.shift,Object.defineProperty(i,"shift",{enumerable:!1,configurable:!0,value:function(){var e=o.shift.call(i);return s(),e}}),o.pop=i.pop,Object.defineProperty(i,"pop",{enumerable:!1,configurable:!0,value:function(){var e=o.pop.call(i);return s(),e}}),o.splice=i.splice,Object.defineProperty(i,"splice",{enumerable:!1,configurable:!0,value:function(){var e=o.splice.apply(i,arguments);return s(),e}}))}watchKey(e,t,i){var o=this,s=Object.getOwnPropertyDescriptor(t,i),a=t[i],l=this.currentVersion;Object.defineProperty(t,i,{set:function(t){if(a=t,!o.blocked&&l===o.currentVersion){var n={};n[i]=t,e.updateData(n)}s.set&&s.set(t)},get:function(){return s.get&&s.get(),a}})}unwatchRow(e){var t=e.getData();for(var i in t)Object.defineProperty(t,i,{value:t[i]})}block(){this.blocked=!0}unblock(){this.blocked=!1}}X.moduleName="reactiveData";class q extends t{constructor(e){super(e),this.startColumn=!1,this.startX=!1,this.startWidth=!1,this.handle=null,this.prevHandle=null}initializeColumn(e,t,i){var o=this,s=!1,a=this.table.options.resizableColumns;if("header"===e&&(s="textarea"==t.definition.formatter||t.definition.variableHeight,t.modules.resize={variableHeight:s}),!0===a||a==e){var l=document.createElement("div");l.className="tabulator-col-resize-handle";var n=document.createElement("div");n.className="tabulator-col-resize-handle prev",l.addEventListener("click",(function(e){e.stopPropagation()}));var r=function(e){var i=t.getLastColumn();i&&o._checkResizability(i)&&(o.startColumn=t,o._mouseDown(e,i,l))};l.addEventListener("mousedown",r),l.addEventListener("touchstart",r,{passive:!0}),l.addEventListener("dblclick",(function(e){var i=t.getLastColumn();i&&o._checkResizability(i)&&(e.stopPropagation(),i.reinitializeWidth(!0))})),n.addEventListener("click",(function(e){e.stopPropagation()}));var h=function(e){var i,s,a;(i=t.getFirstColumn())&&(a=(s=o.table.columnManager.findColumnIndex(i))>0&&o.table.columnManager.getColumnByIndex(s-1))&&o._checkResizability(a)&&(o.startColumn=t,o._mouseDown(e,a,n))};n.addEventListener("mousedown",h),n.addEventListener("touchstart",h,{passive:!0}),n.addEventListener("dblclick",(function(e){var i,s,a;(i=t.getFirstColumn())&&(a=(s=o.table.columnManager.findColumnIndex(i))>0&&o.table.columnManager.getColumnByIndex(s-1))&&o._checkResizability(a)&&(e.stopPropagation(),a.reinitializeWidth(!0))})),i.appendChild(l),i.appendChild(n)}}_checkResizability(e){return void 0!==e.definition.resizable?e.definition.resizable:this.table.options.resizableColumns}_mouseDown(e,t,i){var o=this;function s(e){o.table.rtl?t.setWidth(o.startWidth-((void 0===e.screenX?e.touches[0].screenX:e.screenX)-o.startX)):t.setWidth(o.startWidth+((void 0===e.screenX?e.touches[0].screenX:e.screenX)-o.startX)),o.table.options.virtualDomHoz&&o.table.vdomHoz.reinitialize(!0),!o.table.browserSlow&&t.modules.resize&&t.modules.resize.variableHeight&&t.checkCellHeights()}function a(e){o.startColumn.modules.edit&&(o.startColumn.modules.edit.blocked=!1),o.table.browserSlow&&t.modules.resize&&t.modules.resize.variableHeight&&t.checkCellHeights(),document.body.removeEventListener("mouseup",a),document.body.removeEventListener("mousemove",s),i.removeEventListener("touchmove",s),i.removeEventListener("touchend",a),o.table.element.classList.remove("tabulator-block-select"),o.table.options.persistence&&o.table.modExists("persistence",!0)&&o.table.modules.persistence.config.columns&&o.table.modules.persistence.save("columns"),o.table.options.columnResized.call(o.table,t.getComponent())}o.table.element.classList.add("tabulator-block-select"),e.stopPropagation(),o.startColumn.modules.edit&&(o.startColumn.modules.edit.blocked=!0),o.startX=void 0===e.screenX?e.touches[0].screenX:e.screenX,o.startWidth=t.getWidth(),document.body.addEventListener("mousemove",s),document.body.addEventListener("mouseup",a),i.addEventListener("touchmove",s,{passive:!0}),i.addEventListener("touchend",a)}}q.moduleName="resizeColumns";class Y extends t{constructor(e){super(e),this.startColumn=!1,this.startY=!1,this.startHeight=!1,this.handle=null,this.prevHandle=null}initializeRow(e){var t=this,i=e.getElement(),o=document.createElement("div");o.className="tabulator-row-resize-handle";var s=document.createElement("div");s.className="tabulator-row-resize-handle prev",o.addEventListener("click",(function(e){e.stopPropagation()}));var a=function(i){t.startRow=e,t._mouseDown(i,e,o)};o.addEventListener("mousedown",a),o.addEventListener("touchstart",a,{passive:!0}),s.addEventListener("click",(function(e){e.stopPropagation()}));var l=function(i){var o=t.table.rowManager.prevDisplayRow(e);o&&(t.startRow=o,t._mouseDown(i,o,s))};s.addEventListener("mousedown",l),s.addEventListener("touchstart",l,{passive:!0}),i.appendChild(o),i.appendChild(s)}_mouseDown(e,t,i){var o=this;function s(e){t.setHeight(o.startHeight+((void 0===e.screenY?e.touches[0].screenY:e.screenY)-o.startY))}function a(e){document.body.removeEventListener("mouseup",s),document.body.removeEventListener("mousemove",s),i.removeEventListener("touchmove",s),i.removeEventListener("touchend",a),o.table.element.classList.remove("tabulator-block-select"),o.table.options.rowResized.call(this.table,t.getComponent())}o.table.element.classList.add("tabulator-block-select"),e.stopPropagation(),o.startY=void 0===e.screenY?e.touches[0].screenY:e.screenY,o.startHeight=t.getHeight(),document.body.addEventListener("mousemove",s),document.body.addEventListener("mouseup",a),i.addEventListener("touchmove",s,{passive:!0}),i.addEventListener("touchend",a)}}Y.moduleName="resizeRows";class K extends t{constructor(e){super(e),this.binding=!1,this.observer=!1,this.containerObserver=!1,this.tableHeight=0,this.tableWidth=0,this.containerHeight=0,this.containerWidth=0,this.autoResize=!1}initialize(e){var t,i=this.table;this.tableHeight=i.element.clientHeight,this.tableWidth=i.element.clientWidth,i.element.parentNode&&(this.containerHeight=i.element.parentNode.clientHeight,this.containerWidth=i.element.parentNode.clientWidth),"undefined"!=typeof ResizeObserver&&"virtual"===i.rowManager.getRenderMode()?(this.autoResize=!0,this.observer=new ResizeObserver((e=>{if(!i.browserMobile||i.browserMobile&&!i.modules.edit.currentCell){var t=Math.floor(e[0].contentRect.height),o=Math.floor(e[0].contentRect.width);this.tableHeight==t&&this.tableWidth==o||(this.tableHeight=t,this.tableWidth=o,i.element.parentNode&&(this.containerHeight=i.element.parentNode.clientHeight,this.containerWidth=i.element.parentNode.clientWidth),i.options.virtualDomHoz&&i.vdomHoz.reinitialize(!0),i.redraw())}})),this.observer.observe(i.element),t=window.getComputedStyle(i.element),this.table.element.parentNode&&!this.table.rowManager.fixedHeight&&(t.getPropertyValue("max-height")||t.getPropertyValue("min-height"))&&(this.containerObserver=new ResizeObserver((e=>{if(!i.browserMobile||i.browserMobile&&!i.modules.edit.currentCell){var t=Math.floor(e[0].contentRect.height),o=Math.floor(e[0].contentRect.width);this.containerHeight==t&&this.containerWidth==o||(this.containerHeight=t,this.containerWidth=o,this.tableHeight=i.element.clientHeight,this.tableWidth=i.element.clientWidth),i.options.virtualDomHoz&&i.vdomHoz.reinitialize(!0),i.redraw()}})),this.containerObserver.observe(this.table.element.parentNode))):(this.binding=function(){(!i.browserMobile||i.browserMobile&&!i.modules.edit.currentCell)&&(i.options.virtualDomHoz&&i.vdomHoz.reinitialize(!0),i.redraw())},window.addEventListener("resize",this.binding))}clearBindings(e){this.binding&&window.removeEventListener("resize",this.binding),this.observer&&this.observer.unobserve(this.table.element),this.containerObserver&&this.containerObserver.unobserve(this.table.element.parentNode)}}K.moduleName="resizeTable";class J extends t{constructor(e){super(e),this.columns=[],this.hiddenColumns=[],this.mode="",this.index=0,this.collapseFormatter=[],this.collapseStartOpen=!0,this.collapseHandleColumn=!1}initialize(){var e=this,t=[];this.mode=this.table.options.responsiveLayout,this.collapseFormatter=this.table.options.responsiveLayoutCollapseFormatter||this.formatCollapsedData,this.collapseStartOpen=this.table.options.responsiveLayoutCollapseStartOpen,this.hiddenColumns=[],this.table.columnManager.columnsByIndex.forEach((function(i,o){i.modules.responsive&&i.modules.responsive.order&&i.modules.responsive.visible&&(i.modules.responsive.index=o,t.push(i),i.visible||"collapse"!==e.mode||e.hiddenColumns.push(i))})),t=(t=t.reverse()).sort((function(e,t){return t.modules.responsive.order-e.modules.responsive.order||t.modules.responsive.index-e.modules.responsive.index})),this.columns=t,"collapse"===this.mode&&this.generateCollapsedContent();for(let e of this.table.columnManager.columnsByIndex)if("responsiveCollapse"==e.definition.formatter){this.collapseHandleColumn=e;break}this.collapseHandleColumn&&(this.hiddenColumns.length?this.collapseHandleColumn.show():this.collapseHandleColumn.hide())}initializeColumn(e){var t=e.getDefinition();e.modules.responsive={order:void 0===t.responsive?1:t.responsive,visible:!1!==t.visible}}initializeRow(e){var t;"calc"!==e.type&&((t=document.createElement("div")).classList.add("tabulator-responsive-collapse"),e.modules.responsiveLayout={element:t,open:this.collapseStartOpen},this.collapseStartOpen||(t.style.display="none"))}layoutRow(e){var t=e.getElement();e.modules.responsiveLayout&&(t.appendChild(e.modules.responsiveLayout.element),this.generateCollapsedRowContent(e))}updateColumnVisibility(e,t){e.modules.responsive&&(e.modules.responsive.visible=t,this.initialize())}hideColumn(e){var t=this.hiddenColumns.length;e.hide(!1,!0),"collapse"===this.mode&&(this.hiddenColumns.unshift(e),this.generateCollapsedContent(),this.collapseHandleColumn&&!t&&this.collapseHandleColumn.show())}showColumn(e){var t;e.show(!1,!0),e.setWidth(e.getWidth()),"collapse"===this.mode&&((t=this.hiddenColumns.indexOf(e))>-1&&this.hiddenColumns.splice(t,1),this.generateCollapsedContent(),this.collapseHandleColumn&&!this.hiddenColumns.length&&this.collapseHandleColumn.hide())}update(){for(var e=this,t=!0;t;){let i="fitColumns"==e.table.modules.layout.getMode()?e.table.columnManager.getFlexBaseWidth():e.table.columnManager.getWidth(),o=(e.table.options.headerVisible?e.table.columnManager.element.clientWidth:e.table.element.clientWidth)-i;if(o<0){let i=e.columns[e.index];i?(e.hideColumn(i),e.index++):t=!1}else{let i=e.columns[e.index-1];i&&o>0&&o>=i.getWidth()?(e.showColumn(i),e.index--):t=!1}e.table.rowManager.activeRowsCount||e.table.rowManager.renderEmptyScroll()}}generateCollapsedContent(){var e=this;this.table.rowManager.getDisplayRows().forEach((function(t){e.generateCollapsedRowContent(t)}))}generateCollapsedRowContent(e){var t,i;if(e.modules.responsiveLayout){for(t=e.modules.responsiveLayout.element;t.firstChild;)t.removeChild(t.firstChild);(i=this.collapseFormatter(this.generateCollapsedRowData(e)))&&t.appendChild(i)}}generateCollapsedRowData(e){var t,i=this,o=e.getData(),s=[];return this.hiddenColumns.forEach((function(a){var l=a.getFieldValue(o);a.definition.title&&a.field&&(a.modules.format&&i.table.options.responsiveLayoutCollapseUseFormatters?(t={value:!1,data:{},getValue:function(){return l},getData:function(){return o},getElement:function(){return document.createElement("div")},getRow:function(){return e.getComponent()},getColumn:function(){return a.getComponent()}},s.push({field:a.field,title:a.definition.title,value:a.modules.format.formatter.call(i.table.modules.format,t,a.modules.format.params)})):s.push({field:a.field,title:a.definition.title,value:l}))})),s}formatCollapsedData(e){var t=document.createElement("table");return e.forEach((function(e){var i,o=document.createElement("tr"),s=document.createElement("td"),a=document.createElement("td"),l=document.createElement("strong");s.appendChild(l),this.table.modules.localize.bind("columns|"+e.field,(function(t){l.innerText=t||e.title})),e.value instanceof Node?((i=document.createElement("div")).appendChild(e.value),a.appendChild(i)):a.innerHTML=e.value,o.appendChild(s),o.appendChild(a),t.appendChild(o)}),this),Object.keys(e).length?t:""}}J.moduleName="responsiveLayout";class $ extends t{constructor(e){super(e),this.selecting=!1,this.lastClickedRow=!1,this.selectPrev=[],this.selectedRows=[],this.headerCheckboxElement=null}clearSelectionData(e){this.selecting=!1,this.lastClickedRow=!1,this.selectPrev=[],this.selectedRows=[],e||this._rowSelectionChanged()}initializeRow(e){var t=this,i=e.getElement(),o=function(){setTimeout((function(){t.selecting=!1}),50),document.body.removeEventListener("mouseup",o)};e.modules.select={selected:!1},t.table.options.selectableCheck.call(this.table,e.getComponent())?(i.classList.add("tabulator-selectable"),i.classList.remove("tabulator-unselectable"),t.table.options.selectable&&"highlight"!=t.table.options.selectable&&("click"===t.table.options.selectableRangeMode?i.addEventListener("click",(function(i){if(i.shiftKey){t.table._clearSelection(),t.lastClickedRow=t.lastClickedRow||e;var o=t.table.rowManager.getDisplayRowIndex(t.lastClickedRow),s=t.table.rowManager.getDisplayRowIndex(e),a=o<=s?o:s,l=o>=s?o:s,n=t.table.rowManager.getDisplayRows().slice(0).splice(a,l-a+1);i.ctrlKey||i.metaKey?(n.forEach((function(i){i!==t.lastClickedRow&&(!0===t.table.options.selectable||t.isRowSelected(e)||t.selectedRows.lengtht.table.options.selectable&&(n=n.slice(0,t.table.options.selectable)),t.selectRows(n)),t.table._clearSelection()}else i.ctrlKey||i.metaKey?(t.toggleRow(e),t.lastClickedRow=e):(t.deselectRows(void 0,!0),t.selectRows(e),t.lastClickedRow=e)})):(i.addEventListener("click",(function(i){t.table.modExists("edit")&&t.table.modules.edit.getCurrentCell()||t.table._clearSelection(),t.selecting||t.toggleRow(e)})),i.addEventListener("mousedown",(function(i){if(i.shiftKey)return t.table._clearSelection(),t.selecting=!0,t.selectPrev=[],document.body.addEventListener("mouseup",o),document.body.addEventListener("keyup",o),t.toggleRow(e),!1})),i.addEventListener("mouseenter",(function(i){t.selecting&&(t.table._clearSelection(),t.toggleRow(e),t.selectPrev[1]==e&&t.toggleRow(t.selectPrev[0]))})),i.addEventListener("mouseout",(function(i){t.selecting&&(t.table._clearSelection(),t.selectPrev.unshift(e))}))))):(i.classList.add("tabulator-unselectable"),i.classList.remove("tabulator-selectable"))}toggleRow(e){this.table.options.selectableCheck.call(this.table,e.getComponent())&&(e.modules.select&&e.modules.select.selected?this._deselectRow(e):this._selectRow(e))}selectRows(e){var t;switch(typeof e){case"undefined":this.table.rowManager.rows.forEach((e=>{this._selectRow(e,!0,!0)})),this._rowSelectionChanged();break;case"string":(t=this.table.rowManager.findRow(e))?this._selectRow(t,!0,!0):this.table.rowManager.getRows(e).forEach((e=>{this._selectRow(e,!0,!0)})),this._rowSelectionChanged();break;default:Array.isArray(e)?(e.forEach((e=>{this._selectRow(e,!0,!0)})),this._rowSelectionChanged()):this._selectRow(e,!1,!0)}}_selectRow(e,t,i){if(!isNaN(this.table.options.selectable)&&!0!==this.table.options.selectable&&!i&&this.selectedRows.length>=this.table.options.selectable){if(!this.table.options.selectableRollingSelection)return!1;this._deselectRow(this.selectedRows[0])}var o=this.table.rowManager.findRow(e);o?-1==this.selectedRows.indexOf(o)&&(o.getElement().classList.add("tabulator-selected"),o.modules.select||(o.modules.select={}),o.modules.select.selected=!0,o.modules.select.checkboxEl&&(o.modules.select.checkboxEl.checked=!0),this.selectedRows.push(o),this.table.options.dataTreeSelectPropagate&&this.childRowSelection(o,!0),t||this.table.options.rowSelected.call(this.table,o.getComponent()),this._rowSelectionChanged(t)):t||console.warn("Selection Error - No such row found, ignoring selection:"+e)}isRowSelected(e){return-1!==this.selectedRows.indexOf(e)}deselectRows(e,t){var i,o=this;if(void 0===e){i=o.selectedRows.length;for(let e=0;e-1&&(s.getElement().classList.remove("tabulator-selected"),s.modules.select||(s.modules.select={}),s.modules.select.selected=!1,s.modules.select.checkboxEl&&(s.modules.select.checkboxEl.checked=!1),o.selectedRows.splice(i,1),this.table.options.dataTreeSelectPropagate&&this.childRowSelection(s,!1),t||o.table.options.rowDeselected.call(this.table,s.getComponent()),o._rowSelectionChanged(t)):t||console.warn("Deselection Error - No such row found, ignoring selection:"+e)}getSelectedData(){var e=[];return this.selectedRows.forEach((function(t){e.push(t.getData())})),e}getSelectedRows(){var e=[];return this.selectedRows.forEach((function(t){e.push(t.getComponent())})),e}_rowSelectionChanged(e){this.headerCheckboxElement&&(0===this.selectedRows.length?(this.headerCheckboxElement.checked=!1,this.headerCheckboxElement.indeterminate=!1):this.table.rowManager.rows.length===this.selectedRows.length?(this.headerCheckboxElement.checked=!0,this.headerCheckboxElement.indeterminate=!1):(this.headerCheckboxElement.indeterminate=!0,this.headerCheckboxElement.checked=!1)),e||this.table.options.rowSelectionChanged.call(this.table,this.getSelectedData(),this.getSelectedRows())}registerRowSelectCheckbox(e,t){e._row.modules.select||(e._row.modules.select={}),e._row.modules.select.checkboxEl=t}registerHeaderSelectCheckbox(e){this.headerCheckboxElement=e}childRowSelection(e,t){var i=this.table.modules.dataTree.getChildren(e,!0);if(t)for(let e of i)this._selectRow(e,!0);else for(let e of i)this._deselectRow(e,!0)}}function Q(e,t,i,o,s,a,l){var n=l.format||"DD/MM/YYYY HH:mm:ss",r=l.alignEmptyValues,h=0;if("undefined"!=typeof moment){if(e=moment(e,n),t=moment(t,n),e.isValid()){if(t.isValid())return e-t;h=1}else h=t.isValid()?-1:0;return("top"===r&&"desc"===a||"bottom"===r&&"asc"===a)&&(h*=-1),h}console.error("Sort Error - 'datetime' sorter is dependant on moment.js")}$.moduleName="selectRow";var Z={number:function(e,t,i,o,s,a,l){var n=l.alignEmptyValues,r=l.decimalSeparator,h=l.thousandSeparator,d=0;if(e=String(e),t=String(t),h&&(e=e.split(h).join(""),t=t.split(h).join("")),r&&(e=e.split(r).join("."),t=t.split(r).join(".")),e=parseFloat(e),t=parseFloat(t),isNaN(e))d=isNaN(t)?0:-1;else{if(!isNaN(t))return e-t;d=1}return("top"===n&&"desc"===a||"bottom"===n&&"asc"===a)&&(d*=-1),d},string:function(e,t,i,o,s,a,l){var n,r=l.alignEmptyValues,h=0;if(e){if(t){switch(typeof l.locale){case"boolean":l.locale&&(n=this.table.modules.localize.getLocale());break;case"string":n=l.locale}return String(e).toLowerCase().localeCompare(String(t).toLowerCase(),n)}h=1}else h=t?-1:0;return("top"===r&&"desc"===a||"bottom"===r&&"asc"===a)&&(h*=-1),h},date:function(e,t,i,o,s,a,l){return l.format||(l.format="DD/MM/YYYY"),Q.call(this,e,t,i,o,s,a,l)},time:function(e,t,i,o,s,a,l){return l.format||(l.format="HH:mm"),Q.call(this,e,t,i,o,s,a,l)},datetime:Q,boolean:function(e,t,i,o,s,a,l){return(!0===e||"true"===e||"True"===e||1===e?1:0)-(!0===t||"true"===t||"True"===t||1===t?1:0)},array:function(e,t,i,o,s,a,l){var n=l.type||"length",r=l.alignEmptyValues,h=0;function d(e){switch(n){case"length":return e.length;case"sum":return e.reduce((function(e,t){return e+t}));case"max":return Math.max.apply(null,e);case"min":return Math.min.apply(null,e);case"avg":return e.reduce((function(e,t){return e+t}))/e.length}}if(Array.isArray(e)){if(Array.isArray(t))return(e?d(e):0)-(t?d(t):0);r=1}else r=Array.isArray(t)?-1:0;return("top"===r&&"desc"===a||"bottom"===r&&"asc"===a)&&(h*=-1),h},exists:function(e,t,i,o,s,a,l){return(void 0===e?0:1)-(void 0===t?0:1)},alphanum:function(e,t,i,o,s,a,l){var n,r,h,d,c,u=0,m=/(\d+)|(\D+)/g,p=/\d/,g=l.alignEmptyValues,f=0;if(e||0===e){if(t||0===t){if(isFinite(e)&&isFinite(t))return e-t;if((n=String(e).toLowerCase())===(r=String(t).toLowerCase()))return 0;if(!p.test(n)||!p.test(r))return n>r?1:-1;for(n=n.match(m),r=r.match(m),c=n.length>r.length?r.length:n.length;ud?1:-1;return n.length>r.length}f=1}else f=t||0===t?-1:0;return("top"===g&&"desc"===a||"bottom"===g&&"asc"===a)&&(f*=-1),f}};class ee extends t{constructor(e){super(e),this.sortList=[],this.changed=!1}initializeColumn(e,t){var i,o,s=this,a=!1;switch(typeof e.definition.sorter){case"string":ee.sorters[e.definition.sorter]?a=ee.sorters[e.definition.sorter]:console.warn("Sort Error - No such sorter found: ",e.definition.sorter);break;case"function":a=e.definition.sorter}e.modules.sort={sorter:a,dir:"none",params:e.definition.sorterParams||{},startingDir:e.definition.headerSortStartingDir||"asc",tristate:void 0!==e.definition.headerSortTristate?e.definition.headerSortTristate:this.table.options.headerSortTristate},(void 0===e.definition.headerSort?!1!==this.table.options.headerSort:!1!==e.definition.headerSort)&&((i=e.getElement()).classList.add("tabulator-sortable"),(o=document.createElement("div")).classList.add("tabulator-col-sorter"),"object"==typeof this.table.options.headerSortElement?o.appendChild(this.table.options.headerSortElement):o.innerHTML=this.table.options.headerSortElement,t.appendChild(o),e.modules.sort.element=o,i.addEventListener("click",(function(t){var i="",o=[],a=!1;if(e.modules.sort){if(e.modules.sort.tristate)i="none"==e.modules.sort.dir?e.modules.sort.startingDir:e.modules.sort.dir==e.modules.sort.startingDir?"asc"==e.modules.sort.dir?"desc":"asc":"none";else switch(e.modules.sort.dir){case"asc":i="desc";break;case"desc":i="asc";break;default:i=e.modules.sort.startingDir}s.table.options.columnHeaderSortMulti&&(t.shiftKey||t.ctrlKey)?((a=(o=s.getSort()).findIndex((function(t){return t.field===e.getField()})))>-1?(o[a].dir=i,a!=o.length-1&&(a=o.splice(a,1)[0],"none"!=i&&o.push(a))):"none"!=i&&o.push({column:e,dir:i}),s.setSort(o)):"none"==i?s.clear():s.setSort(e,i),s.table.rowManager.sorterRefresh(!s.sortList.length)}})))}hasChanged(){var e=this.changed;return this.changed=!1,e}getSort(){var e=[];return this.sortList.forEach((function(t){t.column&&e.push({column:t.column.getComponent(),field:t.column.getField(),dir:t.dir})})),e}setSort(e,t){var i=this,o=[];Array.isArray(e)||(e=[{column:e,dir:t}]),e.forEach((function(e){var t;(t=i.table.columnManager.findColumn(e.column))?(e.column=t,o.push(e),i.changed=!0):console.warn("Sort Warning - Sort field does not exist and is being ignored: ",e.column)})),i.sortList=o,this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.sort&&this.table.modules.persistence.save("sort")}clear(){this.setSort([])}findSorter(e){var t,i=this.table.rowManager.activeRows[0],o="string";if(i&&(i=i.getData(),e.getField()))switch(typeof(t=e.getFieldValue(i))){case"undefined":o="string";break;case"boolean":o="boolean";break;default:isNaN(t)||""===t?t.match(/((^[0-9]+[a-z]+)|(^[a-z]+[0-9]+))+$/i)&&(o="alphanum"):o="number"}return ee.sorters[o]}sort(e){var t=this,i=this.table.options.sortOrderReverse?t.sortList.slice().reverse():t.sortList,o=[],s=[];t.table.options.dataSorting&&t.table.options.dataSorting.call(t.table,t.getSort()),t.clearColumnHeaders(),t.table.options.ajaxSorting?i.forEach((function(e,i){t.setColumnHeader(e.column,e.dir)})):(i.forEach((function(e,i){var s=e.column.modules.sort;e.column&&s&&(s.sorter||(s.sorter=t.findSorter(e.column)),e.params="function"==typeof s.params?s.params(e.column.getComponent(),e.dir):s.params,o.push(e)),t.setColumnHeader(e.column,e.dir)})),o.length&&t._sortItems(e,o)),t.table.options.dataSorted&&(e.forEach((e=>{s.push(e.getComponent())})),t.table.options.dataSorted.call(t.table,t.getSort(),s))}clearColumnHeaders(){this.table.columnManager.getRealColumns().forEach((function(e){e.modules.sort&&(e.modules.sort.dir="none",e.getElement().setAttribute("aria-sort","none"))}))}setColumnHeader(e,t){e.modules.sort.dir=t,e.getElement().setAttribute("aria-sort",t)}_sortItems(e,t){var i=t.length-1;e.sort(((e,o)=>{for(var s,a=i;a>=0;a--){let i=t[a];if(0!==(s=this._sortRow(e,o,i.column,i.dir,i.params)))break}return s}))}_sortRow(e,t,i,o,s){var a,l,n="asc"==o?e:t,r="asc"==o?t:e;return e=void 0!==(e=i.getFieldValue(n.getData()))?e:"",t=void 0!==(t=i.getFieldValue(r.getData()))?t:"",a=n.getComponent(),l=r.getComponent(),i.modules.sort.sorter.call(this,e,t,a,l,i.getComponent(),o,s)}}ee.moduleName="sort",ee.sorters=Z;var te={integer:function(e,t,i){return""===t||null==t||"number"==typeof(t=Number(t))&&isFinite(t)&&Math.floor(t)===t},float:function(e,t,i){return""===t||null==t||"number"==typeof(t=Number(t))&&isFinite(t)&&t%1!=0},numeric:function(e,t,i){return""===t||null==t||!isNaN(t)},string:function(e,t,i){return""===t||null==t||isNaN(t)},max:function(e,t,i){return""===t||null==t||parseFloat(t)<=i},min:function(e,t,i){return""===t||null==t||parseFloat(t)>=i},starts:function(e,t,i){return""===t||null==t||String(t).toLowerCase().startsWith(String(i).toLowerCase())},ends:function(e,t,i){return""===t||null==t||String(t).toLowerCase().endsWith(String(i).toLowerCase())},minLength:function(e,t,i){return""===t||null==t||String(t).length>=i},maxLength:function(e,t,i){return""===t||null==t||String(t).length<=i},in:function(e,t,i){return""===t||null==t||("string"==typeof i&&(i=i.split("|")),""===t||i.indexOf(t)>-1)},regex:function(e,t,i){return""===t||null==t||new RegExp(i).test(t)},unique:function(e,t,i){if(""===t||null==t)return!0;var o=!0,s=e.getData(),a=e.getColumn()._getSelf();return this.table.rowManager.rows.forEach((function(e){var i=e.getData();i!==s&&t==a.getFieldValue(i)&&(o=!1)})),o},required:function(e,t,i){return""!==t&&null!=t}};class ie extends t{constructor(e){super(e),this.invalidCells=[]}initializeColumn(e){var t,i=this,o=[];e.definition.validator&&(Array.isArray(e.definition.validator)?e.definition.validator.forEach((function(e){(t=i._extractValidator(e))&&o.push(t)})):(t=this._extractValidator(e.definition.validator))&&o.push(t),e.modules.validate=!!o.length&&o)}_extractValidator(e){var t,i,o;switch(typeof e){case"string":return(o=e.indexOf(":"))>-1?(t=e.substring(0,o),i=e.substring(o+1)):t=e,this._buildValidator(t,i);case"function":return this._buildValidator(e);case"object":return this._buildValidator(e.type,e.parameters)}}_buildValidator(e,t){var i="function"==typeof e?e:ie.validators[e];return i?{type:"function"==typeof e?"function":e,func:i,params:t}:(console.warn("Validator Setup Error - No matching validator found:",e),!1)}validate(e,t,i){var o=this,s=[],a=this.invalidCells.indexOf(t);return e&&e.forEach((function(e){e.func.call(o,t.getComponent(),i,e.params)||s.push({type:e.type,parameters:e.params})})),s=!s.length||s,t.modules.validate||(t.modules.validate={}),!0===s?(t.modules.validate.invalid=!1,t.getElement().classList.remove("tabulator-validation-fail"),a>-1&&this.invalidCells.splice(a,1)):(t.modules.validate.invalid=!0,"manual"!==this.table.options.validationMode&&t.getElement().classList.add("tabulator-validation-fail"),-1==a&&this.invalidCells.push(t)),s}getInvalidCells(){var e=[];return this.invalidCells.forEach((t=>{e.push(t.getComponent())})),e}clearValidation(e){var t;e.modules.validate&&e.modules.validate.invalid&&(e.getElement().classList.remove("tabulator-validation-fail"),e.modules.validate.invalid=!1,(t=this.invalidCells.indexOf(e))>-1&&this.invalidCells.splice(t,1))}}ie.moduleName="validate",ie.validators=te;var oe=Object.freeze({__proto__:null,AccessorModule:s,AjaxModule:l,ClipboardModule:n,ColumnCalcsModule:f,DataTreeModule:b,DownloadModule:w,EditModule:C,ExportModule:R,FilterModule:L,FormatModule:T,FrozenColumnsModule:k,FrozenRowsModule:z,GroupRowsModule:H,HistoryModule:P,HtmlTableImportModule:A,KeybindingsModule:_,MenuModule:N,MoveColumnsModule:B,MoveRowsModule:O,MutatorModule:I,PageModule:j,PersistenceModule:G,PrintModule:U,ReactiveDataModule:X,ResizeColumnsModule:q,ResizeRowsModule:Y,ResizeTableModule:K,ResponsiveLayoutModule:J,SelectRowModule:$,SortModule:ee,ValidateModule:ie});class se{constructor(e){this.table=e,this.blockHozScrollEvent=!1,this.headersElement=this.createHeadersElement(),this.element=this.createHeaderElement(),this.rowManager=null,this.columns=[],this.columnsByIndex=[],this.columnsByField={},this.scrollLeft=0,this.element.insertBefore(this.headersElement,this.element.firstChild)}createHeadersElement(){var e=document.createElement("div");return e.classList.add("tabulator-headers"),e}createHeaderElement(){var e=document.createElement("div");return e.classList.add("tabulator-header"),this.table.options.headerVisible||e.classList.add("tabulator-header-hidden"),e}initialize(){}setRowManager(e){this.rowManager=e}getElement(){return this.element}getHeadersElement(){return this.headersElement}scrollHorizontal(e){var t=0,i=this.element.scrollWidth-this.table.element.clientWidth;this.element.scrollLeft=e,e>i?(t=e-i,this.element.style.marginLeft=-t+"px"):this.element.style.marginLeft=0,this.scrollLeft=e,this.table.modExists("frozenColumns")&&this.table.modules.frozenColumns.scrollHorizontal()}generateColumnsFromRowData(e){var t,i,o=[],s=this.table.options.autoColumnsDefinitions;if(e&&e.length){for(var a in t=e[0]){let e={field:a,title:a},s=t[a];switch(typeof s){case"undefined":i="string";break;case"boolean":i="boolean";break;case"object":i=Array.isArray(s)?"array":"string";break;default:i=isNaN(s)||""===s?s.match(/((^[0-9]+[a-z]+)|(^[a-z]+[0-9]+))+$/i)?"alphanum":"string":"number"}e.sorter=i,o.push(e)}if(s)switch(typeof s){case"function":this.table.options.columns=s.call(this.table,o);break;case"object":Array.isArray(s)?o.forEach((e=>{var t=s.find((t=>t.field===e.field));t&&Object.assign(e,t)})):o.forEach((e=>{s[e.field]&&Object.assign(e,s[e.field])})),this.table.options.columns=o}else this.table.options.columns=o;this.setColumns(this.table.options.columns)}}setColumns(e,t){for(;this.headersElement.firstChild;)this.headersElement.removeChild(this.headersElement.firstChild);this.columns=[],this.columnsByIndex=[],this.columnsByField={},this.table.modExists("frozenColumns")&&this.table.modules.frozenColumns.reset(),e.forEach(((e,t)=>{this._addColumn(e)})),this._reIndexColumns(),this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.initialize(),this.table.options.virtualDomHoz&&this.table.vdomHoz.reinitialize(!1,!0),this.redraw(!0)}_addColumn(e,t,i){var o=new u(e,this),s=o.getElement(),a=i?this.findColumnIndex(i):i;if(i&&a>-1){var l=this.columns.indexOf(i.getTopColumn()),n=i.getElement();t?(this.columns.splice(l,0,o),n.parentNode.insertBefore(s,n)):(this.columns.splice(l+1,0,o),n.parentNode.insertBefore(s,n.nextSibling))}else t?(this.columns.unshift(o),this.headersElement.insertBefore(o.getElement(),this.headersElement.firstChild)):(this.columns.push(o),this.headersElement.appendChild(o.getElement())),o.columnRendered();return o}registerColumnField(e){e.definition.field&&(this.columnsByField[e.definition.field]=e)}registerColumnPosition(e){this.columnsByIndex.push(e)}_reIndexColumns(){this.columnsByIndex=[],this.columns.forEach((function(e){e.reRegisterPosition()}))}_verticalAlignHeaders(){var e=0;this.columns.forEach((t=>{var i;t.clearVerticalAlign(),(i=t.getHeight())>e&&(e=i)})),this.columns.forEach((t=>{t.verticalAlign(this.table.options.columnHeaderVertAlign,e)})),this.rowManager.adjustTableSize()}findColumn(e){if("object"!=typeof e)return this.columnsByField[e]||!1;if(e instanceof u)return e;if(e instanceof ColumnComponent)return e._getSelf()||!1;if("undefined"!=typeof HTMLElement&&e instanceof HTMLElement){return this.columns.find((t=>t.element===e))||!1}return!1}getColumnByField(e){return this.columnsByField[e]}getColumnsByFieldRoot(e){var t=[];return Object.keys(this.columnsByField).forEach((i=>{i.split(".")[0]===e&&t.push(this.columnsByField[i])})),t}getColumnByIndex(e){return this.columnsByIndex[e]}getFirstVisibileColumn(e){return(e=this.columnsByIndex.findIndex((e=>e.visible)))>-1&&this.columnsByIndex[e]}getColumns(){return this.columns}findColumnIndex(e){return this.columnsByIndex.findIndex((t=>e===t))}getRealColumns(){return this.columnsByIndex}traverse(e){this.columnsByIndex.forEach(((t,i)=>{e(t,i)}))}getDefinitions(e){var t=[];return this.columnsByIndex.forEach((i=>{(!e||e&&i.visible)&&t.push(i.getDefinition())})),t}getDefinitionTree(){var e=[];return this.columns.forEach((t=>{e.push(t.getDefinition(!0))})),e}getComponents(e){var t=[];return(e?this.columns:this.columnsByIndex).forEach((e=>{t.push(e.getComponent())})),t}getWidth(){var e=0;return this.columnsByIndex.forEach((t=>{t.visible&&(e+=t.getWidth())})),e}moveColumn(e,t,i){this.moveColumnActual(e,t,i),this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.initialize(),this.table.modExists("columnCalcs")&&this.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows),t.element.parentNode.insertBefore(e.element,t.element),i&&t.element.parentNode.insertBefore(t.element,e.element),this._verticalAlignHeaders(),this.table.rowManager.reinitialize()}moveColumnActual(e,t,i){e.parent.isGroup?this._moveColumnInArray(e.parent.columns,e,t,i):this._moveColumnInArray(this.columns,e,t,i),this._moveColumnInArray(this.columnsByIndex,e,t,i,!0),this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.initialize(),this.table.options.virtualDomHoz&&this.table.vdomHoz.reinitialize(!0),this.table.options.columnMoved&&this.table.options.columnMoved.call(this.table,e.getComponent(),this.table.columnManager.getComponents()),this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.columns&&this.table.modules.persistence.save("columns")}_moveColumnInArray(e,t,i,o,s){var a,l=e.indexOf(t),n=[];l>-1&&(e.splice(l,1),(a=e.indexOf(i))>-1?o&&(a+=1):a=l,e.splice(a,0,t),s&&(this.table.options.dataTree&&this.table.modExists("dataTree",!0)&&this.table.rowManager.rows.forEach((e=>{n=n.concat(this.table.modules.dataTree.getTreeChildren(e,!1,!0))})),(n=n.concat(this.table.rowManager.rows)).forEach((function(e){if(e.cells.length){var t=e.cells.splice(l,1)[0];e.cells.splice(a,0,t)}}))))}scrollToColumn(e,t,i){var o=0,s=0,a=0,l=e.getElement();return new Promise(((n,r)=>{if(void 0===t&&(t=this.table.options.scrollToColumnPosition),void 0===i&&(i=this.table.options.scrollToColumnIfVisible),e.visible){switch(t){case"middle":case"center":a=-this.element.clientWidth/2;break;case"right":a=l.clientWidth-this.headersElement.clientWidth}if(!i&&(s=l.offsetLeft)>0&&s+l.offsetWidth{t.push(i.generateCell(e))})),t}getFlexBaseWidth(){var e=this.table.element.clientWidth,t=0;return this.rowManager.element.scrollHeight>this.rowManager.element.clientHeight&&(e-=this.rowManager.element.offsetWidth-this.rowManager.element.clientWidth),this.columnsByIndex.forEach((function(i){var o,s,a;i.visible&&(o=i.definition.width||0,s=void 0===i.minWidth?this.table.options.columnMinWidth:parseInt(i.minWidth),a="string"==typeof o?o.indexOf("%")>-1?e/100*parseInt(o):parseInt(o):o,t+=a>s?a:s)})),t}addColumn(e,t,i){return new Promise(((o,s)=>{var a=this._addColumn(e,t,i);this._reIndexColumns(),this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.initialize(),this.table.modExists("columnCalcs")&&this.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows),this.redraw(!0),"fitColumns"!=this.table.modules.layout.getMode()&&a.reinitializeWidth(),this._verticalAlignHeaders(),this.table.rowManager.reinitialize(),this.table.options.virtualDomHoz&&this.table.vdomHoz.reinitialize(),o(a)}))}deregisterColumn(e){var t,i=e.getField();i&&delete this.columnsByField[i],(t=this.columnsByIndex.indexOf(e))>-1&&this.columnsByIndex.splice(t,1),(t=this.columns.indexOf(e))>-1&&this.columns.splice(t,1),this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.initialize(),this._verticalAlignHeaders(),this.redraw()}redraw(e){e&&(o.elVisible(this.element)&&this._verticalAlignHeaders(),this.table.rowManager.resetScroll(),this.table.rowManager.reinitialize()),["fitColumns","fitDataStretch"].indexOf(this.table.modules.layout.getMode())>-1||e?this.table.modules.layout.layout():this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.update(),this.table.modExists("frozenColumns")&&this.table.modules.frozenColumns.layout(),this.table.modExists("columnCalcs")&&this.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows),e&&(this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.columns&&this.table.modules.persistence.save("columns"),this.table.modExists("columnCalcs")&&this.table.modules.columnCalcs.redraw()),this.table.footerManager.redraw()}}class ae{constructor(e){this.table=e,this.element=this.createHolderElement(),this.tableElement=this.createTableElement(),this.heightFixer=this.createTableElement(),this.columnManager=null,this.height=0,this.firstRender=!1,this.renderMode="virtual",this.fixedHeight=!1,this.rows=[],this.activeRows=[],this.activeRowsCount=0,this.displayRows=[],this.displayRowsCount=0,this.scrollTop=0,this.scrollLeft=0,this.vDomRowHeight=20,this.vDomTop=0,this.vDomBottom=0,this.vDomScrollPosTop=0,this.vDomScrollPosBottom=0,this.vDomTopPad=0,this.vDomBottomPad=0,this.vDomMaxRenderChain=90,this.vDomWindowBuffer=0,this.vDomWindowMinTotalRows=20,this.vDomWindowMinMarginRows=5,this.vDomTopNewRows=[],this.vDomBottomNewRows=[],this.rowNumColumn=!1,this.redrawBlock=!1,this.redrawBlockRestoreConfig=!1,this.redrawBlockRederInPosition=!1}createHolderElement(){var e=document.createElement("div");return e.classList.add("tabulator-tableHolder"),e.setAttribute("tabindex",0),e}createTableElement(){var e=document.createElement("div");return e.classList.add("tabulator-table"),e}getElement(){return this.element}getTableElement(){return this.tableElement}getRowPosition(e,t){return t?this.activeRows.indexOf(e):this.rows.indexOf(e)}setColumnManager(e){this.columnManager=e}initialize(){this.setRenderMode(),this.element.appendChild(this.tableElement),this.firstRender=!0,this.element.addEventListener("scroll",(()=>{var e=this.element.scrollLeft;this.scrollLeft!=e&&(this.columnManager.scrollHorizontal(e),this.table.options.groupBy&&this.table.modules.groupRows.scrollHeaders(e),this.table.modExists("columnCalcs")&&this.table.modules.columnCalcs.scrollHorizontal(e),this.table.options.scrollHorizontal(e)),this.scrollLeft=e})),"virtual"===this.renderMode&&this.element.addEventListener("scroll",(()=>{var e=this.element.scrollTop,t=this.scrollTop>e;this.scrollTop!=e?(this.scrollTop=e,this.scrollVertical(t),"scroll"==this.table.options.ajaxProgressiveLoad&&this.table.modules.ajax.nextPage(this.element.scrollHeight-this.element.clientHeight-e),this.table.options.scrollVertical(e)):this.scrollTop=e}))}findRow(e){if("object"!=typeof e){if(null==e)return!1;return this.rows.find((t=>t.data[this.table.options.index]==e))||!1}if(e instanceof p)return e;if(e instanceof RowComponent)return e._getSelf()||!1;if("undefined"!=typeof HTMLElement&&e instanceof HTMLElement){return this.rows.find((t=>t.getElement()===e))||!1}return!1}getRowFromDataObject(e){return this.rows.find((t=>t.data===e))||!1}getRowFromPosition(e,t){return t?this.activeRows[e]:this.rows[e]}scrollToRow(e,t,i){var s,a=this.getDisplayRows().indexOf(e),l=e.getElement(),n=0;return new Promise(((e,r)=>{if(a>-1){if(void 0===t&&(t=this.table.options.scrollToRowPosition),void 0===i&&(i=this.table.options.scrollToRowIfVisible),"nearest"===t)switch(this.renderMode){case"classic":s=o.elOffset(l).top,t=Math.abs(this.element.scrollTop-s)>Math.abs(this.element.scrollTop+this.element.clientHeight-s)?"bottom":"top";break;case"virtual":t=Math.abs(this.vDomTop-a)>Math.abs(this.vDomBottom-a)?"bottom":"top"}if(!i&&o.elVisible(l)&&(n=o.elOffset(l).top-o.elOffset(this.element).top)>0&&n{t&&this.getDisplayRows().length?this.table.options.pagination?this._setDataActual(e,!0):this.reRenderInPosition((()=>{this._setDataActual(e)})):(this.table.options.autoColumns&&i&&this.table.columnManager.generateColumnsFromRowData(e),this.resetScroll(),this._setDataActual(e)),o()}))}_setDataActual(e,t){this.table.options.dataLoading.call(this.table,e),this._wipeElements(),this.table.options.history&&this.table.modExists("history")&&this.table.modules.history.clear(),Array.isArray(e)?(this.table.modExists("selectRow")&&this.table.modules.selectRow.clearSelectionData(),this.table.options.reactiveData&&this.table.modExists("reactiveData",!0)&&this.table.modules.reactiveData.watchData(e),e.forEach(((e,t)=>{if(e&&"object"==typeof e){var i=new p(e,this);this.rows.push(i)}else console.warn("Data Loading Warning - Invalid row data detected and ignored, expecting object but received:",e)})),this.refreshActiveData(!1,!1,t),this.table.options.dataLoaded.call(this.table,e)):console.error("Data Loading Error - Unable to process data due to invalid data type \nExpecting: array \nReceived: ",typeof e,"\nData: ",e)}_wipeElements(){this.rows.forEach((e=>{e.wipe()})),this.table.options.groupBy&&this.table.modExists("groupRows")&&this.table.modules.groupRows.wipe(),this.rows=[],this.activeRows=[],this.activeRowsCount=0,this.displayRows=[],this.displayRowsCount=0,this.adjustTableSize()}deleteRow(e,t){var i=this.rows.indexOf(e),o=this.activeRows.indexOf(e);o>-1&&this.activeRows.splice(o,1),i>-1&&this.rows.splice(i,1),this.setActiveRows(this.activeRows),this.displayRowIterator((t=>{var i=t.indexOf(e);i>-1&&t.splice(i,1)})),t||this.reRenderInPosition(),this.regenerateRowNumbers(),this.table.options.rowDeleted.call(this.table,e.getComponent()),this.table.options.dataChanged&&this.table.options.dataChanged.call(this.table,this.getData()),this.table.options.groupBy&&this.table.modExists("groupRows")?this.table.modules.groupRows.updateGroupRows(!0):this.table.options.pagination&&this.table.modExists("page")?this.refreshActiveData(!1,!1,!0):this.table.options.pagination&&this.table.modExists("page")&&this.refreshActiveData("page")}addRow(e,t,i,o){var s=this.addRowActual(e,t,i,o);return this.table.options.history&&this.table.modExists("history")&&this.table.modules.history.action("rowAdd",s,{data:e,pos:t,index:i}),s}addRows(e,t,i){var o=[];return new Promise(((s,a)=>{t=this.findAddRowPos(t),Array.isArray(e)||(e=[e]),e.length,(void 0===i&&t||void 0!==i&&!t)&&e.reverse(),e.forEach(((e,s)=>{var a=this.addRow(e,t,i,!0);o.push(a)})),this.table.options.groupBy&&this.table.modExists("groupRows")?this.table.modules.groupRows.updateGroupRows(!0):this.table.options.pagination&&this.table.modExists("page")?this.refreshActiveData(!1,!1,!0):this.reRenderInPosition(),this.table.modExists("columnCalcs")&&this.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows),this.regenerateRowNumbers(),s(o)}))}findAddRowPos(e){return void 0===e&&(e=this.table.options.addRowPos),"pos"===e&&(e=!0),"bottom"===e&&(e=!1),e}addRowActual(e,t,i,o){var s,a,l=e instanceof p?e:new p(e||{},this),n=this.findAddRowPos(t),r=-1;if(!i&&this.table.options.pagination&&"page"==this.table.options.paginationAddRow&&(a=this.getDisplayRows(),n?a.length?i=a[0]:this.activeRows.length&&(i=this.activeRows[this.activeRows.length-1],n=!1):a.length&&(i=a[a.length-1],n=!(a.length1&&(!i||i&&-1==h.indexOf(i)?n?h[0]!==l&&(i=h[0],this._moveRowInArray(l.getGroup().rows,l,i,!n)):h[h.length-1]!==l&&(i=h[h.length-1],this._moveRowInArray(l.getGroup().rows,l,i,!n)):this._moveRowInArray(l.getGroup().rows,l,i,!n))}return i&&(r=this.rows.indexOf(i)),i&&r>-1?(s=this.activeRows.indexOf(i),this.displayRowIterator((function(e){var t=e.indexOf(i);t>-1&&e.splice(n?t:t+1,0,l)})),s>-1&&this.activeRows.splice(n?s:s+1,0,l),this.rows.splice(n?r:r+1,0,l)):n?(this.displayRowIterator((function(e){e.unshift(l)})),this.activeRows.unshift(l),this.rows.unshift(l)):(this.displayRowIterator((function(e){e.push(l)})),this.activeRows.push(l),this.rows.push(l)),this.setActiveRows(this.activeRows),this.table.options.rowAdded.call(this.table,l.getComponent()),this.table.options.dataChanged&&this.table.options.dataChanged.call(this.table,this.getData()),o||this.reRenderInPosition(),l}moveRow(e,t,i){this.table.options.history&&this.table.modExists("history")&&this.table.modules.history.action("rowMove",e,{posFrom:this.getRowPosition(e),posTo:this.getRowPosition(t),to:t,after:i}),this.moveRowActual(e,t,i),this.regenerateRowNumbers(),this.table.options.rowMoved.call(this.table,e.getComponent())}moveRowActual(e,t,i){if(this._moveRowInArray(this.rows,e,t,i),this._moveRowInArray(this.activeRows,e,t,i),this.displayRowIterator((o=>{this._moveRowInArray(o,e,t,i)})),this.table.options.groupBy&&this.table.modExists("groupRows")){!i&&t instanceof Group&&(t=this.table.rowManager.prevDisplayRow(e)||t);var o=t.getGroup(),s=e.getGroup();o===s?this._moveRowInArray(o.rows,e,t,i):(s&&s.removeRow(e),o.insertRow(e,t,i))}}_moveRowInArray(e,t,i,o){var s,a,l;if(t!==i&&((s=e.indexOf(t))>-1&&(e.splice(s,1),(a=e.indexOf(i))>-1?o?e.splice(a+1,0,t):e.splice(a,0,t):e.splice(s,0,t)),e===this.getDisplayRows())){l=a>s?a:s+1;for(let t=s-1&&t}nextDisplayRow(e,t){var i=this.getDisplayRowIndex(e),o=!1;return!1!==i&&i-1)&&i}getData(e,t){var i=[];return this.getRows(e).forEach((function(e){"row"==e.type&&i.push(e.getData(t||"data"))})),i}getComponents(e){var t=[];return this.getRows(e).forEach((function(e){t.push(e.getComponent())})),t}getDataCount(e){return this.getRows(e).length}_genRemoteRequest(){var e=this.table,t=e.options,i={};if(e.modExists("page")){if(t.ajaxSorting){let e=this.table.modules.sort.getSort();e.forEach((function(e){delete e.column})),i[this.table.modules.page.paginationDataSentNames.sorters]=e}if(t.ajaxFiltering){let e=this.table.modules.filter.getFilters(!0,!0);i[this.table.modules.page.paginationDataSentNames.filters]=e}this.table.modules.ajax.setParams(i,!0)}e.modules.ajax.sendRequest().then((e=>{this._setDataActual(e,!0)})).catch((e=>{}))}filterRefresh(){var e=this.table,t=e.options,i=this.scrollLeft;t.ajaxFiltering?"remote"==t.pagination&&e.modExists("page")?(e.modules.page.reset(!0),e.modules.page.setPage(1).then((()=>{})).catch((()=>{}))):t.ajaxProgressiveLoad?e.modules.ajax.loadData().then((()=>{})).catch((()=>{})):this._genRemoteRequest():this.refreshActiveData("filter"),this.scrollHorizontal(i)}sorterRefresh(e){var t=this.table,i=this.table.options,o=this.scrollLeft;i.ajaxSorting?("remote"==i.pagination||i.progressiveLoad)&&t.modExists("page")?(t.modules.page.reset(!0),t.modules.page.setPage(1).then((()=>{})).catch((()=>{}))):i.ajaxProgressiveLoad?t.modules.ajax.loadData().then((()=>{})).catch((()=>{})):this._genRemoteRequest():this.refreshActiveData(e?"filter":"sort"),this.scrollHorizontal(o)}scrollHorizontal(e){this.scrollLeft=e,this.element.scrollLeft=e,this.table.options.groupBy&&this.table.modules.groupRows.scrollHeaders(e),this.table.modExists("columnCalcs")&&this.table.modules.columnCalcs.scrollHorizontal(e)}refreshActiveData(e,t,i){var s,a=this.table,l=["all","filter","sort","display","freeze","group","tree","page"];if(this.redrawBlock)(!this.redrawBlockRestoreConfig||l.indexOf(e){var t=e.getCell(this.rowNumColumn);t&&t._generateContents()}))}setActiveRows(e){this.activeRows=e,this.activeRowsCount=this.activeRows.length}resetDisplayRows(){this.displayRows=[],this.displayRows.push(this.activeRows.slice(0)),this.displayRowsCount=this.displayRows[0].length,this.table.modExists("frozenRows")&&this.table.modules.frozenRows.setDisplayIndex(0),this.table.options.groupBy&&this.table.modExists("groupRows")&&this.table.modules.groupRows.setDisplayIndex(0),this.table.options.pagination&&this.table.modExists("page")&&this.table.modules.page.setDisplayIndex(0)}getNextDisplayIndex(){return this.displayRows.length}setDisplayRows(e,t){var i=!0;return t&&void 0!==this.displayRows[t]?(this.displayRows[t]=e,i=!0):(this.displayRows.push(e),i=t=this.displayRows.length-1),t==this.displayRows.length-1&&(this.displayRowsCount=this.displayRows[this.displayRows.length-1].length),i}getDisplayRows(e){return void 0===e?this.displayRows.length?this.displayRows[this.displayRows.length-1]:[]:this.displayRows[e]||[]}getVisibleRows(e){var t=this.element.scrollTop,i=this.element.clientHeight+t,o=!1,s=0,a=0,l=this.getDisplayRows();if(e){this.getDisplayRows();for(var n=this.vDomTop;n<=this.vDomBottom;n++)if(l[n])if(o){if(!(i-l[n].getElement().offsetTop>=0))break;a=n}else if(t-l[n].getElement().offsetTop>=0)s=n;else{if(o=!0,!(i-l[n].getElement().offsetTop>=0))break;a=n}}else s=this.vDomTop,a=this.vDomBottom;return l.slice(s,a+1)}displayRowIterator(e){this.displayRows.forEach(e),this.displayRowsCount=this.displayRows[this.displayRows.length-1].length}getRows(e){var t;switch(e){case"active":t=this.activeRows;break;case"display":t=this.table.rowManager.getDisplayRows();break;case"visible":t=this.getVisibleRows(!0);break;case"selected":t=this.table.modules.selectRow.selectedRows;break;default:t=this.rows}return t}reRenderInPosition(e){if("virtual"==this.getRenderMode())if(this.redrawBlock)e?e():this.redrawBlockRederInPosition=!0;else{for(var t=this.element.scrollTop,i=!1,o=!1,s=this.scrollLeft,a=this.getDisplayRows(),l=this.vDomTop;l<=this.vDomBottom;l++)if(a[l]){var n=t-a[l].getElement().offsetTop;if(!(!1===o||Math.abs(n){this.styleRow(i,o),e.appendChild(i.getElement()),i.initialize(!0),"group"!==i.type&&(t=!1)})),e.style.minWidth=t?this.table.columnManager.getWidth()+"px":""}renderEmptyScroll(){this.table.options.placeholder?this.tableElement.style.display="none":this.tableElement.style.minWidth=this.table.columnManager.getWidth()+"px"}_clearVirtualDom(){var e=this.tableElement;for(this.table.options.placeholder&&this.table.options.placeholder.parentNode&&this.table.options.placeholder.parentNode.removeChild(this.table.options.placeholder);e.firstChild;)e.removeChild(e.firstChild);e.style.paddingTop="",e.style.paddingBottom="",e.style.minWidth="",e.style.minHeight="",e.style.display="",e.style.visibility="",this.scrollTop=0,this.scrollLeft=0,this.vDomTop=0,this.vDomBottom=0,this.vDomTopPad=0,this.vDomBottomPad=0}styleRow(e,t){var i=e.getElement();t%2?(i.classList.add("tabulator-row-even"),i.classList.remove("tabulator-row-odd")):(i.classList.add("tabulator-row-odd"),i.classList.remove("tabulator-row-even"))}_virtualRenderFill(e,t,i){var s=this.tableElement,a=this.element,l=0,n=0,r=0,h=0,d=!0,c=this.getDisplayRows();if(i=i||0,e=e||0){for(;s.firstChild;)s.removeChild(s.firstChild);let t=(this.displayRowsCount-e+1)*this.vDomRowHeight;tthis.vDomWindowBuffer&&(this.vDomWindowBuffer=2*u),"group"!==p.type&&(d=!1),this.vDomBottom++,h++}e?(this.vDomTopPad=t?this.vDomRowHeight*this.vDomTop+i:this.scrollTop-r,this.vDomBottomPad=this.vDomBottom==this.displayRowsCount-1?0:Math.max(this.vDomScrollHeight-this.vDomTopPad-n-r,0)):(this.vDomTopPad=0,this.vDomRowHeight=Math.floor((n+r)/h),this.vDomBottomPad=this.vDomRowHeight*(this.displayRowsCount-this.vDomBottom-1),this.vDomScrollHeight=r+n+this.vDomBottomPad-this.height),s.style.paddingTop=this.vDomTopPad+"px",s.style.paddingBottom=this.vDomBottomPad+"px",t&&(this.scrollTop=this.vDomTopPad+r+i-(this.element.scrollWidth>this.element.clientWidth?this.element.offsetHeight-this.element.clientHeight:0)),this.scrollTop=Math.min(this.scrollTop,this.element.scrollHeight-this.height),this.element.scrollWidth>this.element.offsetWidth&&t&&(this.scrollTop+=this.element.offsetHeight-this.element.clientHeight),this.vDomScrollPosTop=this.scrollTop,this.vDomScrollPosBottom=this.scrollTop,a.scrollTop=this.scrollTop,s.style.minWidth=d?this.table.columnManager.getWidth()+"px":"",this.table.options.groupBy&&"fitDataFill"!=this.table.modules.layout.getMode()&&this.displayRowsCount==this.table.modules.groupRows.countGroups()&&(this.tableElement.style.minWidth=this.table.columnManager.getWidth())}else this.renderEmptyScroll();this.fixedHeight||this.adjustTableSize()}scrollVertical(e){var t=this.scrollTop-this.vDomScrollPosTop,i=this.scrollTop-this.vDomScrollPosBottom,o=2*this.vDomWindowBuffer;if(-t>o||i>o){var s=this.scrollLeft;this._virtualRenderFill(Math.floor(this.element.scrollTop/this.element.scrollHeight*this.displayRowsCount)),this.scrollHorizontal(s)}else e?(t<0&&this._addTopRow(-t),i<0&&(this.vDomScrollHeight-this.scrollTop>this.vDomWindowBuffer?this._removeBottomRow(-i):this.vDomScrollPosBottom=this.scrollTop)):(t>=0&&(this.scrollTop>this.vDomWindowBuffer?this._removeTopRow(t):this.vDomScrollPosTop=this.scrollTop),i>=0&&this._addBottomRow(i))}_addTopRow(e,t=0){var i=this.tableElement,o=this.getDisplayRows();if(this.vDomTop){let s=this.vDomTop-1,a=o[s],l=a.getHeight()||this.vDomRowHeight;e>=l&&(this.styleRow(a,s),i.insertBefore(a.getElement(),i.firstChild),a.initialized&&a.heightInitialized||(this.vDomTopNewRows.push(a),a.heightInitialized||a.clearCellHeight()),a.initialize(),this.vDomTopPad-=l,this.vDomTopPad<0&&(this.vDomTopPad=s*this.vDomRowHeight),s||(this.vDomTopPad=0),i.style.paddingTop=this.vDomTopPad+"px",this.vDomScrollPosTop-=l,this.vDomTop--),e=-(this.scrollTop-this.vDomScrollPosTop),a.getHeight()>this.vDomWindowBuffer&&(this.vDomWindowBuffer=2*a.getHeight()),t=(o[this.vDomTop-1].getHeight()||this.vDomRowHeight)?this._addTopRow(e,t+1):this._quickNormalizeRowHeight(this.vDomTopNewRows)}}_removeTopRow(e){var t=this.tableElement,i=this.getDisplayRows()[this.vDomTop],o=i.getHeight()||this.vDomRowHeight;if(e>=o){var s=i.getElement();s.parentNode.removeChild(s),this.vDomTopPad+=o,t.style.paddingTop=this.vDomTopPad+"px",this.vDomScrollPosTop+=this.vDomTop?o:o+this.vDomWindowBuffer,this.vDomTop++,e=this.scrollTop-this.vDomScrollPosTop,this._removeTopRow(e)}}_addBottomRow(e,t=0){var i=this.tableElement,o=this.getDisplayRows();if(this.vDomBottom=l&&(this.styleRow(a,s),i.appendChild(a.getElement()),a.initialized&&a.heightInitialized||(this.vDomBottomNewRows.push(a),a.heightInitialized||a.clearCellHeight()),a.initialize(),this.vDomBottomPad-=l,(this.vDomBottomPad<0||s==this.displayRowsCount-1)&&(this.vDomBottomPad=0),i.style.paddingBottom=this.vDomBottomPad+"px",this.vDomScrollPosBottom+=l,this.vDomBottom++),e=this.scrollTop-this.vDomScrollPosBottom,a.getHeight()>this.vDomWindowBuffer&&(this.vDomWindowBuffer=2*a.getHeight()),t=(o[this.vDomBottom+1].getHeight()||this.vDomRowHeight)?this._addBottomRow(e,t+1):this._quickNormalizeRowHeight(this.vDomBottomNewRows)}}_removeBottomRow(e){var t=this.tableElement,i=this.getDisplayRows()[this.vDomBottom],o=i.getHeight()||this.vDomRowHeight;if(e>=o){var s=i.getElement();s.parentNode&&s.parentNode.removeChild(s),this.vDomBottomPad+=o,this.vDomBottomPad<0&&(this.vDomBottomPad=0),t.style.paddingBottom=this.vDomBottomPad+"px",this.vDomScrollPosBottom-=o,this.vDomBottom--,e=-(this.scrollTop-this.vDomScrollPosBottom),this._removeBottomRow(e)}}_quickNormalizeRowHeight(e){e.forEach((function(e){e.calcHeight()})),e.forEach((function(e){e.setCellHeight()})),e.length=0}normalizeHeight(){this.activeRows.forEach((function(e){e.normalizeHeight()}))}adjustTableSize(){var e,t=this.element.clientHeight;if("virtual"===this.renderMode){let i=Math.floor(this.columnManager.getElement().getBoundingClientRect().height+(this.table.footerManager&&this.table.footerManager.active&&!this.table.footerManager.external?this.table.footerManager.getElement().getBoundingClientRect().height:0));this.fixedHeight?(this.element.style.minHeight="calc(100% - "+i+"px)",this.element.style.height="calc(100% - "+i+"px)",this.element.style.maxHeight="calc(100% - "+i+"px)"):(this.element.style.height="",this.element.style.height=this.table.element.clientHeight-i+"px",this.element.scrollTop=this.scrollTop),this.height=this.element.clientHeight,this.vDomWindowBuffer=this.table.options.virtualDomBuffer||this.height,this.fixedHeight||t==this.element.clientHeight||((e=this.table.modExists("resizeTable"))&&!this.table.modules.resizeTable.autoResize||!e)&&this.redraw()}}reinitialize(){this.rows.forEach((function(e){e.reinitialize(!0)}))}blockRedraw(){this.redrawBlock=!0,this.redrawBlockRestoreConfig=!1}restoreRedraw(){this.redrawBlock=!1,this.redrawBlockRestoreConfig?(this.refreshActiveData(this.redrawBlockRestoreConfig.stage,this.redrawBlockRestoreConfig.skipStage,this.redrawBlockRestoreConfig.renderInPosition),this.redrawBlockRestoreConfig=!1):this.redrawBlockRederInPosition&&this.reRenderInPosition(),this.redrawBlockRederInPosition=!1}redraw(e){var t=this.scrollLeft;this.adjustTableSize(),this.table.tableWidth=this.table.element.clientWidth,e?this.renderTable():("classic"==this.renderMode?this.table.options.groupBy?this.refreshActiveData("group",!1,!1):this._simpleRender():(this.reRenderInPosition(),this.scrollHorizontal(t)),this.displayRowsCount||this.table.options.placeholder&&this.getElement().appendChild(this.table.options.placeholder))}resetScroll(){if(this.element.scrollLeft=0,this.element.scrollTop=0,"ie"===this.table.browser){var e=document.createEvent("Event");e.initEvent("scroll",!1,!0),this.element.dispatchEvent(e)}else this.element.dispatchEvent(new Event("scroll"))}}class le{constructor(e){this.table=e,this.active=!1,this.element=this.createElement(),this.external=!1,this.links=[],this._initialize()}createElement(){var e=document.createElement("div");return e.classList.add("tabulator-footer"),e}_initialize(e){if(this.table.options.footerElement)switch(typeof this.table.options.footerElement){case"string":"<"===this.table.options.footerElement[0]?this.element.innerHTML=this.table.options.footerElement:(this.external=!0,this.element=document.querySelector(this.table.options.footerElement));break;default:this.element=this.table.options.footerElement}}getElement(){return this.element}append(e,t){this.activate(t),this.element.appendChild(e),this.table.rowManager.adjustTableSize()}prepend(e,t){this.activate(t),this.element.insertBefore(e,this.element.firstChild),this.table.rowManager.adjustTableSize()}remove(e){e.parentNode.removeChild(e),this.deactivate()}deactivate(e){this.element.firstChild&&!e||(this.external||this.element.parentNode.removeChild(this.element),this.active=!1)}activate(e){this.active||(this.active=!0,this.external||(this.table.element.appendChild(this.getElement()),this.table.element.style.display="")),e&&this.links.push(e)}redraw(){this.links.forEach((function(e){e.footerRedraw()}))}}class ne{static register(e){ne.tables.push(e)}static deregister(e){var t=ne.tables.indexOf(e);t>-1&&ne.tables.splice(t,1)}static lookupTable(e,t){var i,o,s=[];if("string"==typeof e){if((i=document.querySelectorAll(e)).length)for(var a=0;a{e.widthFixed||e.reinitializeWidth(),(this.table.options.responsiveLayout?e.modules.responsive.visible:e.visible)&&(s=e),e.visible&&(t+=e.getWidth())})),s?(o=i-t+s.getWidth(),this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&(s.setWidth(0),this.table.modules.responsiveLayout.update()),o>0?s.setWidth(o):s.reinitializeWidth()):this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.update()},fitColumns:function(e){var t,i,o=this.table.element.clientWidth,s=0,a=0,l=0,n=[],r=[],h=0,d=0;function c(e){return"string"==typeof e?e.indexOf("%")>-1?o/100*parseInt(e):parseInt(e):e}function u(e,t,i,o){var s=[],a=0,n=0,r=0,h=l,d=0,m=0,p=[];function g(e){return i*(e.column.definition.widthGrow||1)}function f(e){return c(e.width)-i*(e.column.definition.widthShrink||0)}return e.forEach((function(e,a){var l=o?f(e):g(e);e.column.minWidth>=l?s.push(e):e.column.maxWidth&&e.column.maxWidththis.table.rowManager.element.clientHeight&&(o-=this.table.rowManager.element.offsetWidth-this.table.rowManager.element.clientWidth),e.forEach((function(e){var t,i,o;e.visible&&(t=e.definition.width,i=parseInt(e.minWidth),t?(o=c(t),s+=o>i?o:i,e.definition.widthShrink&&(r.push({column:e,width:o>i?o:i}),h+=e.definition.widthShrink)):(n.push({column:e,width:0}),l+=e.definition.widthGrow||1))})),a=o-s,t=Math.floor(a/l),d=u(n,a,t,!1),n.length&&d>0&&(n[n.length-1].width+=+d),n.forEach((function(e){a-=e.width})),(i=Math.abs(d)+a)>0&&h&&(d=u(r,i,Math.floor(i/h),!0)),r.length&&(r[r.length-1].width-=d),n.forEach((function(e){e.column.setWidth(e.width)})),r.forEach((function(e){e.column.setWidth(e.width)}))}};class de extends t{constructor(e){super(e,"layout"),this.mode=null}initialize(e){de.modes[e]?this.mode=e:(console.warn("Layout Error - invalid mode set, defaulting to 'fitData' : "+e),this.mode="fitData"),this.table.element.setAttribute("tabulator-layout",this.mode)}getMode(){return this.mode}layout(){de.modes[this.mode].call(this,this.table.columnManager.columnsByIndex),0===this.mode.indexOf("fitData")&&this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.columns&&this.table.modules.persistence.save("columns")}}de.moduleName="layout",de.modes=he;class ce extends t{constructor(e){super(e),this.locale="default",this.lang=!1,this.bindings={},this.langList={}}initialize(){this.langList=o.deepClone(ce.langs)}setHeaderFilterPlaceholder(e){this.langList.default.headerFilters.default=e}setHeaderFilterColumnPlaceholder(e,t){this.langList.default.headerFilters.columns[e]=t,this.lang&&!this.lang.headerFilters.columns[e]&&(this.lang.headerFilters.columns[e]=t)}installLang(e,t){this.langList[e]?this._setLangProp(this.langList[e],t):this.langList[e]=t}_setLangProp(e,t){for(let i in t)e[i]&&"object"==typeof e[i]?this._setLangProp(e[i],t[i]):e[i]=t[i]}setLocale(e){if(!0===(e=e||"default")&&navigator.language&&(e=navigator.language.toLowerCase()),e&&!this.langList[e]){let t=e.split("-")[0];this.langList[t]?(console.warn("Localization Error - Exact matching locale not found, using closest match: ",e,t),e=t):(console.warn("Localization Error - Matching locale not found, using default: ",e),e="default")}this.locale=e,this.lang=o.deepClone(this.langList.default||{}),"default"!=e&&function e(t,i){for(var o in t)"object"==typeof t[o]?(i[o]||(i[o]={}),e(t[o],i[o])):i[o]=t[o]}(this.langList[e],this.lang),this.table.options.localized.call(this.table,this.locale,this.lang),this._executeBindings()}getLocale(e){return this.locale}getLang(e){return e?this.langList[e]:this.lang}getText(e,t){var i=(e=t?e+"|"+t:e).split("|");return this._getLangElement(i,this.locale)||""}_getLangElement(e,t){var i=this.lang;return e.forEach((function(e){var t;i&&(t=i[e],i=void 0!==t&&t)})),i}bind(e,t){this.bindings[e]||(this.bindings[e]=[]),this.bindings[e].push(t),t(this.getText(e),this.lang)}_executeBindings(){for(let e in this.bindings)this.bindings[e].forEach((t=>{t(this.getText(e),this.lang)}))}}ce.moduleName="localize",ce.langs={default:{groups:{item:"item",items:"items"},columns:{},ajax:{loading:"Loading",error:"Error"},pagination:{page_size:"Page Size",page_title:"Show Page",first:"First",first_title:"First Page",last:"Last",last_title:"Last Page",prev:"Prev",prev_title:"Prev Page",next:"Next",next_title:"Next Page",all:"All"},headerFilters:{default:"filter column...",columns:{}}}};class ue extends t{getConnections(e){var t=[];return Tabulator.comms.lookupTable(e).forEach((e=>{this.table!==e&&t.push(e)})),t}send(e,t,i,o){var s=this.getConnections(e);s.forEach((e=>{e.tableComms(this.table.element,t,i,o)})),!s.length&&e&&console.warn("Table Connection Error - No tables matching selector found",e)}receive(e,t,i,o){if(this.table.modExists(t))return this.table.modules[t].commsReceived(e,i,o);console.warn("Inter-table Comms Error - no such module:",t)}}ue.moduleName="comms";var me=Object.freeze({__proto__:null,LayoutModule:de,LocalizeModule:ce,CommsModule:ue});class pe{constructor(e,t){this.bindStaticFuctionality(e),this.bindModules(e,me),t&&this.bindModules(e,t)}bindStaticFuctionality(e){e.moduleBindings={},e.extendModule=function(t,i,o){if(e.moduleBindings[t]){var s=e.moduleBindings[t].prototype[i];if(s)if("object"==typeof o)for(let e in o)s[e]=o[e];else console.warn("Module Error - Invalid value type, it must be an object");else console.warn("Module Error - property does not exist:",i)}else console.warn("Module Error - module does not exist:",t)},e.registerModule=function(t){Array.isArray(t)||(t=[t]),t.forEach((t=>{e.registerModuleBinding(t)}))},e.registerModuleBinding=function(t){e.moduleBindings[t.moduleName]=t},e.findTable=function(e){var t=ne.lookupTable(e,!0);return!(Array.isArray(t)&&!t.length)&&t},e.prototype.bindModules=function(){for(var t in this.modules={},e.moduleBindings)this.modules[t]=new e.moduleBindings[t](this)}}bindModules(e,t){var i=Object.values(t);e.registerModule(i)}}class ge{constructor(e){this.table=e,this.element=this.table.rowManager.tableElement,this.holderEl=this.table.rowManager.element,this.leftCol=0,this.rightCol=0,this.scrollLeft=0,this.vDomScrollPosLeft=0,this.vDomScrollPosRight=0,this.vDomPadLeft=0,this.vDomPadRight=0,this.fitDataColAvg=0,this.window=200,this.initialized=!1,this.columns=[],this.compatabilityCheck()&&this.initialize()}compatabilityCheck(){var e=this.table.options,t=!0;return"fitDataTable"==e.layout&&(console.warn("Horizontal Vitrual DOM is not compatible with fitDataTable layout mode"),t=!1),e.responsiveLayout&&(console.warn("Horizontal Vitrual DOM is not compatible with responsive columns"),t=!1),this.table.rtl&&(console.warn("Horizontal Vitrual DOM is not currently compatible with RTL text direction"),t=!1),e.columns&&e.columns.find((e=>e.frozen))&&(console.warn("Horizontal Vitrual DOM is not compatible with frozen columns"),t=!1),t||(e.virtualDomHoz=!1),t}initialize(){this.holderEl.addEventListener("scroll",(()=>{var e=this.holderEl.scrollLeft;this.scrollLeft!=e&&(this.scrollLeft=e,this.scroll(e-(this.vDomScrollPosLeft+this.window)))}))}deinitialize(){this.initialized=!1}clear(){this.columns=[],this.leftCol=-1,this.rightCol=0,this.vDomScrollPosLeft=0,this.vDomScrollPosRight=0,this.vDomPadLeft=0,this.vDomPadRight=0}dataChange(){var e,t,i=!1,o=0,s=0;if("fitData"===this.table.options.layout){if(this.table.columnManager.columnsByIndex.forEach((e=>{!e.definition.width&&e.visible&&(i=!0)})),i&&i&&this.table.rowManager.getDisplayRows().length&&(this.vDomScrollPosRight=this.scrollLeft+this.holderEl.clientWidth+this.window,e=this.table.options.groupBy?this.table.modules.groupRows.getGroups(!1)[0].getRows(!1)[0]:this.table.rowManager.getDisplayRows()[0])){t=e.getElement(),e.generateCells(),this.element.appendChild(t);for(s=0;sthis.vDomScrollPosRight)break}for(t.parentNode.removeChild(t),this.fitDataColAvg=Math.floor(o/(s+1));s{var t={};if(e.visible){var i=e.getWidth();t.leftPos=o,t.rightPos=o+i,t.width=i,"fitData"===_this18.table.options.layout&&(t.fitDataCheck=!0),o+i>this.vDomScrollPosLeft&&o{e!==this.columns[i]&&(t=!1)})),!t)}renitializeRows(){this.table.rowManager.getVisibleRows().forEach((e=>{this.reinitializeRow(e,!0)}))}scroll(e){this.vDomScrollPosLeft+=e,this.vDomScrollPosRight+=e,e>.8*this.holderEl.clientWidth?this.reinitialize():e>0?(this.addColRight(),this.removeColLeft()):(this.addColLeft(),this.removeColRight())}colPositionAdjust(e,t,i){for(let o=e;o{if("group"!==t.type){var i=t.getCell(e);t.getElement().appendChild(i.getElement()),i.cellRendered()}})),this.fitDataColActualWidthCheck(e),this.rightCol++,this.rightCol>=this.columns.length-1?this.vDomPadRight=0:this.vDomPadRight-=e.getWidth(),this.element.style.paddingRight=this.vDomPadRight+"px",this.addColRight())}addColLeft(){var e=this.columns[this.leftCol-1];e&&e.modules.vdomHoz.rightPos>=this.vDomScrollPosLeft&&(this.table.rowManager.getVisibleRows().forEach((t=>{if("group"!==t.type){var i=t.getCell(e);t.getElement().prepend(i.getElement()),i.cellRendered()}})),this.fitDataColActualWidthCheck(e),this.leftCol?this.vDomPadLeft-=e.getWidth():this.vDomPadLeft=0,this.element.style.paddingLeft=this.vDomPadLeft+"px",this.leftCol--,this.addColLeft())}removeColRight(e){var t;(e=this.columns[this.rightCol])&&e.modules.vdomHoz.leftPos>this.vDomScrollPosRight&&(t=this.table.rowManager.getVisibleRows(),e.modules.vdomHoz.visible=!1,t.forEach((t=>{if("group"!==t.type){var i=t.getCell(e);t.getElement().removeChild(i.getElement())}})),this.vDomPadRight+=e.getWidth(),this.element.style.paddingRight=this.vDomPadRight+"px",this.rightCol--,this.removeColRight())}removeColLeft(){var e=this.columns[this.leftCol];e&&e.modules.vdomHoz.rightPos{if("group"!==t.type){var i=t.getCell(e);t.getElement().removeChild(i.getElement())}})),this.vDomPadLeft+=e.getWidth(),this.element.style.paddingLeft=this.vDomPadLeft+"px",this.leftCol++,this.removeColLeft())}fitDataColActualWidthCheck(e){var t,i;e.modules.vdomHoz.fitDataCheck&&(e.reinitializeWidth(),(i=(t=e.getWidth())-e.modules.vdomHoz.width)&&(e.modules.vdomHoz.rightPos+=i,e.modules.vdomHoz.width=t,this.colPositionAdjust(this.rightCol+2,this.columns.length,i)),e.modules.vdomHoz.fitDataCheck=!1)}initializeRow(e){if("group"!==e.type){e.modules.vdomHoz={leftCol:this.leftCol,rightCol:this.rightCol};for(let t=this.leftCol;t<=this.rightCol;t++){let i=this.columns[t];if(i&&i.visible){let t=e.getCell(i);e.getElement().appendChild(t.getElement()),t.cellRendered()}}}}reinitializeRow(e,t){if("group"!==e.type&&(t||!e.modules.vdomHoz||e.modules.vdomHoz.leftCol!==this.leftCol||e.modules.vdomHoz.rightCol!==this.rightCol)){for(var i=e.getElement();i.firstChild;)i.removeChild(i.firstChild);this.initializeRow(e)}}}class fe{constructor(e,t){this.options={},this.columnManager=null,this.rowManager=null,this.footerManager=null,this.vdomHoz=null,this.browser="",this.browserSlow=!1,this.browserMobile=!1,this.rtl=!1,this.modules={},this.initializeElement(e)&&(this.initializeOptions(t||{}),this._create()),ne.register(this)}initializeOptions(e){var t=fe.defaultOptions;if(!1!==e.invalidOptionWarnings)for(var i in e)void 0===t[i]&&console.warn("Invalid table constructor option:",i);for(var i in t)i in e?this.options[i]=e[i]:Array.isArray(t[i])?this.options[i]=Object.assign([],t[i]):"object"==typeof t[i]&&null!==t[i]?this.options[i]=Object.assign({},t[i]):this.options[i]=t[i]}initializeElement(e){return"undefined"!=typeof HTMLElement&&e instanceof HTMLElement?(this.element=e,!0):"string"==typeof e?(this.element=document.querySelector(e),!!this.element||(console.error("Tabulator Creation Error - no element found matching selector: ",e),!1)):(console.error("Tabulator Creation Error - Invalid element provided:",e),!1)}rtlCheck(){var e=window.getComputedStyle(this.element);switch(this.options.textDirection){case"auto":if("rtl"!==e.direction)break;case"rtl":this.element.classList.add("tabulator-rtl"),this.rtl=!0;break;case"ltr":this.element.classList.add("tabulator-ltr");default:this.rtl=!1}}_mapDepricatedFunctionality(){}_clearSelection(){this.element.classList.add("tabulator-block-select"),window.getSelection?window.getSelection().empty?window.getSelection().empty():window.getSelection().removeAllRanges&&window.getSelection().removeAllRanges():document.selection&&document.selection.empty(),this.element.classList.remove("tabulator-block-select")}_create(){this._clearObjectPointers(),this._mapDepricatedFunctionality(),this.bindModules(),this.rtlCheck(),"TABLE"===this.element.tagName&&this.modExists("htmlTableImport",!0)&&this.modules.htmlTableImport.parseTable(),this.columnManager=new se(this),this.rowManager=new ae(this),this.footerManager=new le(this),this.columnManager.setRowManager(this.rowManager),this.rowManager.setColumnManager(this.columnManager),this.options.virtualDomHoz&&(this.vdomHoz=new ge(this)),this._buildElement(),this._loadInitialData()}_clearObjectPointers(){this.options.columns=this.options.columns.slice(0),this.options.reactiveData||(this.options.data=this.options.data.slice(0))}_buildElement(){var e=this.element,t=this.modules,i=this.options;for(i.tableBuilding.call(this),e.classList.add("tabulator"),e.setAttribute("role","grid");e.firstChild;)e.removeChild(e.firstChild);i.height&&(i.height=isNaN(i.height)?i.height:i.height+"px",e.style.height=i.height),!1!==i.minHeight&&(i.minHeight=isNaN(i.minHeight)?i.minHeight:i.minHeight+"px",e.style.minHeight=i.minHeight),!1!==i.maxHeight&&(i.maxHeight=isNaN(i.maxHeight)?i.maxHeight:i.maxHeight+"px",e.style.maxHeight=i.maxHeight),this.columnManager.initialize(),this.rowManager.initialize(),this._detectBrowser(),this.modExists("layout",!0)&&t.layout.initialize(i.layout),t.localize.initialize(),!1!==i.headerFilterPlaceholder&&t.localize.setHeaderFilterPlaceholder(i.headerFilterPlaceholder);for(let e in i.langs)t.localize.installLang(e,i.langs[e]);if(t.localize.setLocale(i.locale),"string"==typeof i.placeholder){var o=document.createElement("div");o.classList.add("tabulator-placeholder");var s=document.createElement("span");s.innerHTML=i.placeholder,o.appendChild(s),i.placeholder=o}if(e.appendChild(this.columnManager.getElement()),e.appendChild(this.rowManager.getElement()),i.footerElement&&this.footerManager.activate(),i.persistence&&this.modExists("persistence",!0)&&t.persistence.initialize(),i.movableRows&&this.modExists("moveRow")&&t.moveRow.initialize(),i.autoColumns&&this.options.data&&this.columnManager.generateColumnsFromRowData(this.options.data),this.modExists("columnCalcs")&&t.columnCalcs.initialize(),this.columnManager.setColumns(i.columns),i.dataTree&&this.modExists("dataTree",!0)&&t.dataTree.initialize(),this.modExists("frozenRows")&&this.modules.frozenRows.initialize(),(i.persistence&&this.modExists("persistence",!0)&&t.persistence.config.sort||i.initialSort)&&this.modExists("sort",!0)){var a=[];i.persistence&&this.modExists("persistence",!0)&&t.persistence.config.sort?!1===(a=t.persistence.load("sort"))&&i.initialSort&&(a=i.initialSort):i.initialSort&&(a=i.initialSort),t.sort.setSort(a)}if((i.persistence&&this.modExists("persistence",!0)&&t.persistence.config.filter||i.initialFilter)&&this.modExists("filter",!0)){var l=[];i.persistence&&this.modExists("persistence",!0)&&t.persistence.config.filter?!1===(l=t.persistence.load("filter"))&&i.initialFilter&&(l=i.initialFilter):i.initialFilter&&(l=i.initialFilter),t.filter.setFilter(l)}i.initialHeaderFilter&&this.modExists("filter",!0)&&i.initialHeaderFilter.forEach((e=>{var i=this.columnManager.findColumn(e.field);if(!i)return console.warn("Column Filter Error - No matching column found:",e.field),!1;t.filter.setHeaderFilterValue(i,e.value)})),this.modExists("ajax")&&t.ajax.initialize(),i.pagination&&this.modExists("page",!0)&&t.page.initialize(),i.groupBy&&this.modExists("groupRows",!0)&&t.groupRows.initialize(),this.modExists("keybindings")&&t.keybindings.initialize(),this.modExists("selectRow")&&t.selectRow.clearSelectionData(!0),i.autoResize&&this.modExists("resizeTable")&&t.resizeTable.initialize(),this.modExists("clipboard")&&t.clipboard.initialize(),i.printAsHtml&&this.modExists("print")&&t.print.initialize(),i.tableBuilt.call(this)}_loadInitialData(){if(this.options.pagination&&this.modExists("page"))if(this.modules.page.reset(!0,!0),"local"==this.options.pagination){if(this.options.data.length)this.rowManager.setData(this.options.data,!1,!0);else{if((this.options.ajaxURL||this.options.ajaxURLGenerator)&&this.modExists("ajax"))return void this.modules.ajax.loadData(!1,!0).then((()=>{})).catch((()=>{this.options.paginationInitialPage&&this.modules.page.setPage(this.options.paginationInitialPage)}));this.rowManager.setData(this.options.data,!1,!0)}this.options.paginationInitialPage&&this.modules.page.setPage(this.options.paginationInitialPage)}else this.options.ajaxURL?this.modules.page.setPage(this.options.paginationInitialPage).then((()=>{})).catch((()=>{})):this.rowManager.setData([],!1,!0);else this.options.data.length?this.rowManager.setData(this.options.data):(this.options.ajaxURL||this.options.ajaxURLGenerator)&&this.modExists("ajax")?this.modules.ajax.loadData(!1,!0).then((()=>{})).catch((()=>{})):this.rowManager.setData(this.options.data,!1,!0)}destroy(){var e=this.element;for(comms(this),this.options.reactiveData&&this.modExists("reactiveData",!0)&&this.modules.reactiveData.unwatchData(),this.rowManager.rows.forEach((function(e){e.wipe()})),this.rowManager.rows=[],this.rowManager.activeRows=[],this.rowManager.displayRows=[],this.options.autoResize&&this.modExists("resizeTable")&&this.modules.resizeTable.clearBindings(),this.modExists("keybindings")&&this.modules.keybindings.clearBindings();e.firstChild;)e.removeChild(e.firstChild);e.classList.remove("tabulator")}_detectBrowser(){var e=navigator.userAgent||navigator.vendor||window.opera;e.indexOf("Trident")>-1?(this.browser="ie",this.browserSlow=!0):e.indexOf("Edge")>-1?(this.browser="edge",this.browserSlow=!0):e.indexOf("Firefox")>-1?(this.browser="firefox",this.browserSlow=!1):(this.browser="other",this.browserSlow=!1),this.browserMobile=/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i.test(e)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(e.substr(0,4))}blockRedraw(){return this.rowManager.blockRedraw()}restoreRedraw(){return this.rowManager.restoreRedraw()}setDataFromLocalFile(e){return new Promise(((t,i)=>{var o=document.createElement("input");o.type="file",o.accept=e||".json,application/json",o.addEventListener("change",(e=>{var s,a=o.files[0],l=new FileReader;l.readAsText(a),l.onload=e=>{try{s=JSON.parse(l.result)}catch(e){return console.warn("File Load Error - File contents is invalid JSON",e),void i(e)}this.setData(s).then((e=>{t(e)})).catch((e=>{t(e)}))},l.onerror=e=>{console.warn("File Load Error - Unable to read file"),i()}})),o.click()}))}setData(e,t,i){return this.modExists("ajax")&&this.modules.ajax.blockActiveRequest(),this._setData(e,t,i,!1,!0)}_setData(e,t,i,o,s){return"string"!=typeof e?e?this.rowManager.setData(e,o,s):this.modExists("ajax")&&(this.modules.ajax.getUrl||this.options.ajaxURLGenerator)?"remote"==this.options.pagination&&this.modExists("page",!0)?(this.modules.page.reset(!0,!0),this.modules.page.setPage(1)):this.modules.ajax.loadData(o,s):this.rowManager.setData([],o,s):0==e.indexOf("{")||0==e.indexOf("[")?this.rowManager.setData(JSON.parse(e),o,s):this.modExists("ajax",!0)?(t&&this.modules.ajax.setParams(t),i&&this.modules.ajax.setConfig(i),this.modules.ajax.setUrl(e),"remote"==this.options.pagination&&this.modExists("page",!0)?(this.modules.page.reset(!0,!0),this.modules.page.setPage(1)):this.modules.ajax.loadData(o,s)):void 0}clearData(){this.modExists("ajax")&&this.modules.ajax.blockActiveRequest(),this.rowManager.clearData()}getData(e){return this.rowManager.getData(e)}getDataCount(e){return this.rowManager.getDataCount(e)}searchRows(e,t,i){if(this.modExists("filter",!0))return this.modules.filter.search("rows",e,t,i)}searchData(e,t,i){if(this.modExists("filter",!0))return this.modules.filter.search("data",e,t,i)}getHtml(e,t,i){if(this.modExists("export",!0))return this.modules.export.getHtml(e,t,i)}print(e,t,i){if(this.modExists("print",!0))return this.modules.print.printFullscreen(e,t,i)}getAjaxUrl(){if(this.modExists("ajax",!0))return this.modules.ajax.getUrl()}replaceData(e,t,i){return this.modExists("ajax")&&this.modules.ajax.blockActiveRequest(),this._setData(e,t,i,!0)}updateData(e){var t=0;return new Promise(((i,o)=>{this.modExists("ajax")&&this.modules.ajax.blockActiveRequest(),"string"==typeof e&&(e=JSON.parse(e)),e?e.forEach((e=>{var o=this.rowManager.findRow(e[this.options.index]);o&&(t++,o.updateData(e).then((()=>{--t||i()})))})):(console.warn("Update Error - No data provided"),o("Update Error - No data provided"))}))}addData(e,t,i){return new Promise(((o,s)=>{this.modExists("ajax")&&this.modules.ajax.blockActiveRequest(),"string"==typeof e&&(e=JSON.parse(e)),e?this.rowManager.addRows(e,t,i).then((e=>{var t=[];e.forEach((function(e){t.push(e.getComponent())})),o(t)})):(console.warn("Update Error - No data provided"),s("Update Error - No data provided"))}))}updateOrAddData(e){var t=[],i=0;return new Promise(((o,s)=>{this.modExists("ajax")&&this.modules.ajax.blockActiveRequest(),"string"==typeof e&&(e=JSON.parse(e)),e?e.forEach((e=>{var s=this.rowManager.findRow(e[this.options.index]);i++,s?s.updateData(e).then((()=>{i--,t.push(s.getComponent()),i||o(t)})):this.rowManager.addRows(e).then((e=>{i--,t.push(e[0].getComponent()),i||o(t)}))})):(console.warn("Update Error - No data provided"),s("Update Error - No data provided"))}))}getRow(e){var t=this.rowManager.findRow(e);return t?t.getComponent():(console.warn("Find Error - No matching row found:",e),!1)}getRowFromPosition(e,t){var i=this.rowManager.getRowFromPosition(e,t);return i?i.getComponent():(console.warn("Find Error - No matching row found:",e),!1)}deleteRow(e){return new Promise(((t,i)=>{var o=0,s=0,a=[];function l(){++o==e.length&&s&&(this.rowManager.reRenderInPosition(),t())}Array.isArray(e)||(e=[e]),e.forEach((e=>{var t=this.rowManager.findRow(e,!0);t?a.push(t):(console.warn("Delete Error - No matching row found:",e),i("Delete Error - No matching row found"),l())})),a.sort(((e,t)=>this.rowManager.rows.indexOf(e)>this.rowManager.rows.indexOf(t)?1:-1)),a.forEach((e=>{e.delete().then((()=>{s++,l()})).catch((e=>{l(),i(e)}))}))}))}addRow(e,t,i){return new Promise(((o,s)=>{"string"==typeof e&&(e=JSON.parse(e)),this.rowManager.addRows(e,t,i).then((e=>{this.modExists("columnCalcs")&&this.modules.columnCalcs.recalc(this.rowManager.activeRows),o(e[0].getComponent())}))}))}updateOrAddRow(e,t){return new Promise(((i,o)=>{var s=this.rowManager.findRow(e);"string"==typeof t&&(t=JSON.parse(t)),s?s.updateData(t).then((()=>{this.modExists("columnCalcs")&&this.modules.columnCalcs.recalc(this.rowManager.activeRows),i(s.getComponent())})).catch((e=>{o(e)})):s=this.rowManager.addRows(t).then((e=>{this.modExists("columnCalcs")&&this.modules.columnCalcs.recalc(this.rowManager.activeRows),i(e[0].getComponent())})).catch((e=>{o(e)}))}))}updateRow(e,t){return new Promise(((i,o)=>{var s=this.rowManager.findRow(e);"string"==typeof t&&(t=JSON.parse(t)),s?s.updateData(t).then((()=>{i(s.getComponent())})).catch((e=>{o(e)})):(console.warn("Update Error - No matching row found:",e),o("Update Error - No matching row found"))}))}scrollToRow(e,t,i){return new Promise(((o,s)=>{var a=this.rowManager.findRow(e);a?this.rowManager.scrollToRow(a,t,i).then((()=>{o()})).catch((e=>{s(e)})):(console.warn("Scroll Error - No matching row found:",e),s("Scroll Error - No matching row found"))}))}moveRow(e,t,i){var o=this.rowManager.findRow(e);o?o.moveToRow(t,i):console.warn("Move Error - No matching row found:",e)}getRows(e){return this.rowManager.getComponents(e)}getRowPosition(e,t){var i=this.rowManager.findRow(e);return i?this.rowManager.getRowPosition(i,t):(console.warn("Position Error - No matching row found:",e),!1)}copyToClipboard(e){this.modExists("clipboard",!0)&&this.modules.clipboard.copy(e)}setColumns(e){this.columnManager.setColumns(e)}getColumns(e){return this.columnManager.getComponents(e)}getColumn(e){var t=this.columnManager.findColumn(e);return t?t.getComponent():(console.warn("Find Error - No matching column found:",e),!1)}getColumnDefinitions(){return this.columnManager.getDefinitionTree()}getColumnLayout(){if(this.modExists("persistence",!0))return this.modules.persistence.parseColumns(this.columnManager.getColumns())}setColumnLayout(e){return!!this.modExists("persistence",!0)&&(this.columnManager.setColumns(this.modules.persistence.mergeDefinition(this.options.columns,e)),!0)}showColumn(e){var t=this.columnManager.findColumn(e);if(!t)return console.warn("Column Show Error - No matching column found:",e),!1;t.show(),this.options.responsiveLayout&&this.modExists("responsiveLayout",!0)&&this.modules.responsiveLayout.update()}hideColumn(e){var t=this.columnManager.findColumn(e);if(!t)return console.warn("Column Hide Error - No matching column found:",e),!1;t.hide(),this.options.responsiveLayout&&this.modExists("responsiveLayout",!0)&&this.modules.responsiveLayout.update()}toggleColumn(e){var t=this.columnManager.findColumn(e);if(!t)return console.warn("Column Visibility Toggle Error - No matching column found:",e),!1;t.visible?t.hide():t.show()}addColumn(e,t,i){return new Promise(((o,s)=>{var a=this.columnManager.findColumn(i);this.columnManager.addColumn(e,t,a).then((e=>{o(e.getComponent())})).catch((e=>{s(e)}))}))}deleteColumn(e){return new Promise(((t,i)=>{var o=this.columnManager.findColumn(e);o?o.delete().then((()=>{t()})).catch((e=>{i(e)})):(console.warn("Column Delete Error - No matching column found:",e),i())}))}updateColumnDefinition(e,t){return new Promise(((i,o)=>{var s=this.columnManager.findColumn(e);s?s.updateDefinition(t).then((e=>{i(e)})).catch((e=>{o(e)})):(console.warn("Column Update Error - No matching column found:",e),o())}))}moveColumn(e,t,i){var o=this.columnManager.findColumn(e),s=this.columnManager.findColumn(t);o?s?this.columnManager.moveColumn(o,s,i):console.warn("Move Error - No matching column found:",s):console.warn("Move Error - No matching column found:",e)}scrollToColumn(e,t,i){return new Promise(((o,s)=>{var a=this.columnManager.findColumn(e);a?this.columnManager.scrollToColumn(a,t,i).then((()=>{o()})).catch((e=>{s(e)})):(console.warn("Scroll Error - No matching column found:",e),s("Scroll Error - No matching column found"))}))}setLocale(e){this.modules.localize.setLocale(e)}getLocale(){return this.modules.localize.getLocale()}getLang(e){return this.modules.localize.getLang(e)}redraw(e){this.columnManager.redraw(e),this.rowManager.redraw(e)}setHeight(e){"classic"!==this.rowManager.renderMode?(this.options.height=isNaN(e)?e:e+"px",this.element.style.height=this.options.height,this.rowManager.setRenderMode(),this.rowManager.redraw()):console.warn("setHeight function is not available in classic render mode")}setSort(e,t){this.modExists("sort",!0)&&(this.modules.sort.setSort(e,t),this.rowManager.sorterRefresh())}getSorters(){if(this.modExists("sort",!0))return this.modules.sort.getSort()}clearSort(){this.modExists("sort",!0)&&(this.modules.sort.clear(),this.rowManager.sorterRefresh())}setFilter(e,t,i,o){this.modExists("filter",!0)&&(this.modules.filter.setFilter(e,t,i,o),this.rowManager.filterRefresh())}refreshFilter(){this.modExists("filter",!0)&&this.rowManager.filterRefresh()}addFilter(e,t,i,o){this.modExists("filter",!0)&&(this.modules.filter.addFilter(e,t,i,o),this.rowManager.filterRefresh())}getFilters(e){if(this.modExists("filter",!0))return this.modules.filter.getFilters(e)}setHeaderFilterFocus(e){if(this.modExists("filter",!0)){var t=this.columnManager.findColumn(e);if(!t)return console.warn("Column Filter Focus Error - No matching column found:",e),!1;this.modules.filter.setHeaderFilterFocus(t)}}getHeaderFilterValue(e){if(this.modExists("filter",!0)){var t=this.columnManager.findColumn(e);if(t)return this.modules.filter.getHeaderFilterValue(t);console.warn("Column Filter Error - No matching column found:",e)}}setHeaderFilterValue(e,t){if(this.modExists("filter",!0)){var i=this.columnManager.findColumn(e);if(!i)return console.warn("Column Filter Error - No matching column found:",e),!1;this.modules.filter.setHeaderFilterValue(i,t)}}getHeaderFilters(){if(this.modExists("filter",!0))return this.modules.filter.getHeaderFilters()}removeFilter(e,t,i){this.modExists("filter",!0)&&(this.modules.filter.removeFilter(e,t,i),this.rowManager.filterRefresh())}clearFilter(e){this.modExists("filter",!0)&&(this.modules.filter.clearFilter(e),this.rowManager.filterRefresh())}clearHeaderFilter(){this.modExists("filter",!0)&&(this.modules.filter.clearHeaderFilter(),this.rowManager.filterRefresh())}selectRow(e){this.modExists("selectRow",!0)&&this.modules.selectRow.selectRows(e)}deselectRow(e){this.modExists("selectRow",!0)&&this.modules.selectRow.deselectRows(e)}toggleSelectRow(e){this.modExists("selectRow",!0)&&this.modules.selectRow.toggleRow(e)}getSelectedRows(){if(this.modExists("selectRow",!0))return this.modules.selectRow.getSelectedRows()}getSelectedData(){if(this.modExists("selectRow",!0))return this.modules.selectRow.getSelectedData()}getInvalidCells(){if(this.modExists("validate",!0))return this.modules.validate.getInvalidCells()}clearCellValidation(e){this.modExists("validate",!0)&&(e||(e=this.modules.validate.getInvalidCells()),Array.isArray(e)||(e=[e]),e.forEach((e=>{this.modules.validate.clearValidation(e._getSelf())})))}validate(e){var t=[];return this.rowManager.rows.forEach((function(e){var i=e.validate();!0!==i&&(t=t.concat(i))})),!t.length||t}setMaxPage(e){if(!this.options.pagination||!this.modExists("page"))return!1;this.modules.page.setMaxPage(e)}setPage(e){return this.options.pagination&&this.modExists("page")?this.modules.page.setPage(e):new Promise(((e,t)=>{t()}))}setPageToRow(e){return new Promise(((t,i)=>{this.options.pagination&&this.modExists("page")&&(e=this.rowManager.findRow(e))?this.modules.page.setPageToRow(e).then((()=>{t()})).catch((()=>{i()})):i()}))}setPageSize(e){if(!this.options.pagination||!this.modExists("page"))return!1;this.modules.page.setPageSize(e),this.modules.page.setPage(1).then((()=>{})).catch((()=>{}))}getPageSize(){if(this.options.pagination&&this.modExists("page",!0))return this.modules.page.getPageSize()}previousPage(){if(!this.options.pagination||!this.modExists("page"))return!1;this.modules.page.previousPage()}nextPage(){if(!this.options.pagination||!this.modExists("page"))return!1;this.modules.page.nextPage()}getPage(){return!(!this.options.pagination||!this.modExists("page"))&&this.modules.page.getPage()}getPageMax(){return!(!this.options.pagination||!this.modExists("page"))&&this.modules.page.getPageMax()}setGroupBy(e){if(!this.modExists("groupRows",!0))return!1;this.options.groupBy=e,this.modules.groupRows.initialize(),this.rowManager.refreshActiveData("display"),this.options.persistence&&this.modExists("persistence",!0)&&this.modules.persistence.config.group&&this.modules.persistence.save("group")}setGroupValues(e){if(!this.modExists("groupRows",!0))return!1;this.options.groupValues=e,this.modules.groupRows.initialize(),this.rowManager.refreshActiveData("display"),this.options.persistence&&this.modExists("persistence",!0)&&this.modules.persistence.config.group&&this.modules.persistence.save("group")}setGroupStartOpen(e){if(!this.modExists("groupRows",!0))return!1;this.options.groupStartOpen=e,this.modules.groupRows.initialize(),this.options.groupBy?(this.rowManager.refreshActiveData("group"),this.options.persistence&&this.modExists("persistence",!0)&&this.modules.persistence.config.group&&this.modules.persistence.save("group")):console.warn("Grouping Update - cant refresh view, no groups have been set")}setGroupHeader(e){if(!this.modExists("groupRows",!0))return!1;this.options.groupHeader=e,this.modules.groupRows.initialize(),this.options.groupBy?(this.rowManager.refreshActiveData("group"),this.options.persistence&&this.modExists("persistence",!0)&&this.modules.persistence.config.group&&this.modules.persistence.save("group")):console.warn("Grouping Update - cant refresh view, no groups have been set")}getGroups(e){return!!this.modExists("groupRows",!0)&&this.modules.groupRows.getGroups(!0)}getGroupedData(){if(this.modExists("groupRows",!0))return this.options.groupBy?this.modules.groupRows.getGroupedData():this.getData()}getEditedCells(){if(this.modExists("edit",!0))return this.modules.edit.getEditedCells()}clearCellEdited(e){this.modExists("edit",!0)&&(e||(e=this.modules.edit.getEditedCells()),Array.isArray(e)||(e=[e]),e.forEach((e=>{this.modules.edit.clearEdited(e._getSelf())})))}getCalcResults(){return!!this.modExists("columnCalcs",!0)&&this.modules.columnCalcs.getResults()}recalc(){this.modExists("columnCalcs",!0)&&this.modules.columnCalcs.recalcAll(this.rowManager.activeRows)}navigatePrev(){var e=!1;return!(!this.modExists("edit",!0)||!(e=this.modules.edit.currentCell))&&e.nav().prev()}navigateNext(){var e=!1;return!(!this.modExists("edit",!0)||!(e=this.modules.edit.currentCell))&&e.nav().next()}navigateLeft(){var t=!1;return!(!this.modExists("edit",!0)||!(t=this.modules.edit.currentCell))&&(e.preventDefault(),t.nav().left())}navigateRight(){var t=!1;return!(!this.modExists("edit",!0)||!(t=this.modules.edit.currentCell))&&(e.preventDefault(),t.nav().right())}navigateUp(){var t=!1;return!(!this.modExists("edit",!0)||!(t=this.modules.edit.currentCell))&&(e.preventDefault(),t.nav().up())}navigateDown(){var t=!1;return!(!this.modExists("edit",!0)||!(t=this.modules.edit.currentCell))&&(e.preventDefault(),t.nav().down())}undo(){return!(!this.options.history||!this.modExists("history",!0))&&this.modules.history.undo()}redo(){return!(!this.options.history||!this.modExists("history",!0))&&this.modules.history.redo()}getHistoryUndoSize(){return!(!this.options.history||!this.modExists("history",!0))&&this.modules.history.getHistoryUndoSize()}getHistoryRedoSize(){return!(!this.options.history||!this.modExists("history",!0))&&this.modules.history.getHistoryRedoSize()}clearHistory(){return!(!this.options.history||!this.modExists("history",!0))&&this.modules.history.clear()}download(e,t,i,o){this.modExists("download",!0)&&this.modules.download.download(e,t,i,o)}downloadToTab(e,t,i,o){this.modExists("download",!0)&&this.modules.download.download(e,t,i,o,!0)}tableComms(e,t,i,o){this.modules.comms.receive(e,t,i,o)}modExists(e,t){return!!this.modules[e]||(t&&console.error("Tabulator Module Not Installed: "+e),!1)}}fe.defaultOptions={height:!1,minHeight:!1,maxHeight:!1,layout:"fitData",layoutColumnsOnNewData:!1,columnMinWidth:40,columnMaxWidth:!1,columnHeaderVertAlign:"top",resizableColumns:!0,resizableRows:!1,autoResize:!0,columns:[],columnDefaults:!1,cellHozAlign:"",cellVertAlign:"",headerHozAlign:"",data:[],autoColumns:!1,autoColumnsDefinitions:!1,reactiveData:!1,nestedFieldSeparator:".",tooltips:!1,tooltipsHeader:!1,tooltipGenerationMode:"load",initialSort:!1,initialFilter:!1,initialHeaderFilter:!1,columnHeaderSortMulti:!0,sortOrderReverse:!1,headerSort:!0,headerSortTristate:!1,headerSortElement:"
",footerElement:!1,index:"id",textDirection:"auto",keybindings:[],tabEndNewRow:!1,invalidOptionWarnings:!0,clipboard:!1,clipboardCopyStyled:!0,clipboardCopyConfig:!1,clipboardCopyFormatter:!1,clipboardCopyRowRange:"active",clipboardPasteParser:"table",clipboardPasteAction:"insert",clipboardCopied:function(){},clipboardPasted:function(){},clipboardPasteError:function(){},downloadReady:function(e,t){return t},downloadComplete:!1,downloadConfig:{},downloadRowRange:"active",dataTree:!1,dataTreeFilter:!0,dataTreeSort:!0,dataTreeElementColumn:!1,dataTreeBranchElement:!0,dataTreeChildIndent:9,dataTreeChildField:"_children",dataTreeCollapseElement:!1,dataTreeExpandElement:!1,dataTreeStartExpanded:!1,dataTreeRowExpanded:function(){},dataTreeRowCollapsed:function(){},dataTreeChildColumnCalcs:!1,dataTreeSelectPropagate:!1,printAsHtml:!1,printFormatter:!1,printHeader:!1,printFooter:!1,printStyled:!0,printRowRange:"visible",printConfig:{},addRowPos:"bottom",selectable:"highlight",selectableRangeMode:"drag",selectableRollingSelection:!0,selectablePersistence:!0,selectableCheck:function(e,t){return!0},headerFilterLiveFilterDelay:300,headerFilterPlaceholder:!1,headerVisible:!0,history:!1,locale:!1,langs:{},virtualDom:!0,virtualDomBuffer:0,virtualDomHoz:!1,persistence:!1,persistenceID:"",persistenceMode:!0,persistenceReaderFunc:!1,persistenceWriterFunc:!1,responsiveLayout:!1,responsiveLayoutCollapseStartOpen:!0,responsiveLayoutCollapseUseFormatters:!0,responsiveLayoutCollapseFormatter:!1,pagination:!1,paginationSize:!1,paginationInitialPage:1,paginationButtonCount:5,paginationSizeSelector:!1,paginationElement:!1,paginationDataSent:{},paginationDataReceived:{},paginationAddRow:"page",ajaxURL:!1,ajaxURLGenerator:!1,ajaxParams:{},ajaxConfig:"get",ajaxContentType:"form",ajaxRequestFunc:!1,ajaxLoader:!0,ajaxLoaderLoading:!1,ajaxLoaderError:!1,ajaxFiltering:!1,ajaxSorting:!1,ajaxProgressiveLoad:!1,ajaxProgressiveLoadDelay:0,ajaxProgressiveLoadScrollMargin:0,groupBy:!1,groupStartOpen:!0,groupValues:!1,groupUpdateOnCellEdit:!1,groupHeader:!1,groupHeaderPrint:null,groupHeaderClipboard:null,groupHeaderHtmlOutput:null,groupHeaderDownload:null,htmlOutputConfig:!1,movableColumns:!1,movableRows:!1,movableRowsConnectedTables:!1,movableRowsConnectedElements:!1,movableRowsSender:!1,movableRowsReceiver:"insert",movableRowsSendingStart:function(){},movableRowsSent:function(){},movableRowsSentFailed:function(){},movableRowsSendingStop:function(){},movableRowsReceivingStart:function(){},movableRowsReceived:function(){},movableRowsReceivedFailed:function(){},movableRowsReceivingStop:function(){},movableRowsElementDrop:function(){},scrollToRowPosition:"top",scrollToRowIfVisible:!0,scrollToColumnPosition:"left",scrollToColumnIfVisible:!0,rowFormatter:!1,rowFormatterPrint:null,rowFormatterClipboard:null,rowFormatterHtmlOutput:null,placeholder:!1,tableBuilding:function(){},tableBuilt:function(){},renderStarted:function(){},renderComplete:function(){},rowClick:!1,rowDblClick:!1,rowContext:!1,rowTap:!1,rowDblTap:!1,rowTapHold:!1,rowMouseEnter:!1,rowMouseLeave:!1,rowMouseOver:!1,rowMouseOut:!1,rowMouseMove:!1,rowContextMenu:!1,rowClickMenu:!1,rowAdded:function(){},rowDeleted:function(){},rowMoved:function(){},rowUpdated:function(){},rowSelectionChanged:function(){},rowSelected:function(){},rowDeselected:function(){},rowResized:function(){},cellClick:!1,cellDblClick:!1,cellContext:!1,cellTap:!1,cellDblTap:!1,cellTapHold:!1,cellMouseEnter:!1,cellMouseLeave:!1,cellMouseOver:!1,cellMouseOut:!1,cellMouseMove:!1,cellEditing:function(){},cellEdited:function(){},cellEditCancelled:function(){},columnMoved:!1,columnResized:function(){},columnTitleChanged:function(){},columnVisibilityChanged:function(){},htmlImporting:function(){},htmlImported:function(){},dataLoading:function(){},dataLoaded:function(){},dataChanged:!1,ajaxRequesting:function(){},ajaxResponse:!1,ajaxError:function(){},dataFiltering:!1,dataFiltered:!1,dataSorting:function(){},dataSorted:function(){},groupToggleElement:"arrow",groupClosedShowCalcs:!1,dataGrouping:function(){},dataGrouped:!1,groupVisibilityChanged:function(){},groupClick:!1,groupDblClick:!1,groupContext:!1,groupContextMenu:!1,groupClickMenu:!1,groupTap:!1,groupDblTap:!1,groupTapHold:!1,columnCalcs:!0,pageLoaded:function(){},localized:function(){},validationMode:"blocking",validationFailed:function(){},historyUndo:function(){},historyRedo:function(){},scrollHorizontal:function(){},scrollVertical:function(){}},new pe(fe);class be extends fe{}new pe(be,oe);export{be as Tabulator,fe as TabulatorCore,oe as modules}; +/* Tabulator v5.0.0-alpha.0 (c) Oliver Folkerd 2021 */ +class e{constructor(e){this.table=e}reloadData(e,t){return this.table.dataLoader.load(e,void 0,void 0,void 0,t)}langText(){return this.table.modules.localize.getText(...arguments)}langBind(){return this.table.modules.localize.bind(...arguments)}langLocale(){return this.table.modules.localize.getLocale(...arguments)}commsConnections(){return this.table.modules.comms.getConnections(...arguments)}commsSend(){return this.table.modules.comms.send(...arguments)}layoutMode(){return this.table.modules.layout.getMode()}layoutRefresh(){return this.table.modules.layout.layout()}subscribe(){this.table.eventBus.subscribe(...arguments)}unsubscribe(){this.table.eventBus.unsubscribe(...arguments)}subscribed(e){this.table.eventBus.subscribed(e)}subscriptionChange(){this.table.eventBus.subscriptionChange(...arguments)}dispatch(){this.table.eventBus.dispatch(...arguments)}chain(){return this.table.eventBus.chain(...arguments)}confirm(){return this.table.eventBus.confirm(...arguments)}dispatchExternal(){this.table.externalEvents.dispatch(...arguments)}subscribedExternal(e){this.table.externalEvents.subscribed(e)}subscriptionChangeExternal(){this.table.externalEvents.subscriptionChange(...arguments)}options(e,t){return void 0!==t&&(this.table.options[e]=t),this.table.options[e]}setOption(e,t){return void 0!==t&&(this.table.options[e]=t),this.table.options[e]}module(e){return this.table.module(e)}}class t extends e{constructor(e,t){super(e),this._handler=null}initialize(){}registerTableOption(e,t){this.table.optionsList.register(e,t)}registerColumnOption(e,t){this.table.columnManager.optionsList.register(e,t)}registerTableFunction(e,t){void 0===this.table[e]?this.table[e]=t:console.warn("Unable to bind table function, name already in use",e)}registerComponentFunction(e,t,i){return this.table.componentFunctionBinder.bind(e,t,i)}registerDataHandler(e,t){this.table.rowManager.registerDataPipelineHandler(e,t),this._handler=e}registerDisplayHandler(e,t){this.table.rowManager.registerDisplayPipelineHandler(e,t),this._handler=e}refreshData(e,t){t||(t=this._handler),t&&this.table.rowManager.refreshActiveData(t,!1,e)}}class s{static elVisible(e){return!(e.offsetWidth<=0&&e.offsetHeight<=0)}static elOffset(e){var t=e.getBoundingClientRect();return{top:t.top+window.pageYOffset-document.documentElement.clientTop,left:t.left+window.pageXOffset-document.documentElement.clientLeft}}static deepClone(e){var t=Object.assign(Array.isArray(e)?[]:{},e);for(var i in e)null!=e[i]&&"object"==typeof e[i]&&(e[i]instanceof Date?t[i]=new Date(e[i]):t[i]=this.deepClone(e[i]));return t}}class o extends t{constructor(e){super(e),this.allowedTypes=["","data","download","clipboard","print","htmlOutput"],this.registerColumnOption("accessor"),this.registerColumnOption("accessorParams"),this.registerColumnOption("accessorData"),this.registerColumnOption("accessorDataParams"),this.registerColumnOption("accessorDownload"),this.registerColumnOption("accessorDownloadParams"),this.registerColumnOption("accessorClipboard"),this.registerColumnOption("accessorClipboardParams"),this.registerColumnOption("accessorPrint"),this.registerColumnOption("accessorPrintParams"),this.registerColumnOption("accessorHtmlOutput"),this.registerColumnOption("accessorHtmlOutputParams")}initialize(){this.subscribe("column-layout",this.initializeColumn.bind(this)),this.subscribe("row-data-retrieve",this.transformRow.bind(this))}initializeColumn(e){var t=!1,i={};this.allowedTypes.forEach((function(s){var o,n="accessor"+(s.charAt(0).toUpperCase()+s.slice(1));e.definition[n]&&(o=this.lookupAccessor(e.definition[n]))&&(t=!0,i[n]={accessor:o,params:e.definition[n+"Params"]||{}})})),t&&(e.modules.accessor=i)}lookupAccessor(e){var t=!1;switch(typeof e){case"string":o.accessors[e]?t=o.accessors[e]:console.warn("Accessor Error - No such accessor found, ignoring: ",e);break;case"function":t=e}return t}transformRow(e,t){var i="accessor"+(t.charAt(0).toUpperCase()+t.slice(1)),o=e.getComponent(),n=s.deepClone(e.data||{});return this.table.columnManager.traverse((function(e){var s,r,a,l;e.modules.accessor&&(r=e.modules.accessor[i]||e.modules.accessor.accessor||!1)&&"undefined"!=(s=e.getFieldValue(n))&&(l=e.getComponent(),a="function"==typeof r.params?r.params(s,n,t,l,o):r.params,e.setFieldValue(n,r.accessor(s,n,t,a,l,o)))})),n}}o.moduleName="accessor",o.accessors={};function n(e,t){var i=[];if(t=t||"",Array.isArray(e))e.forEach(((e,s)=>{i=i.concat(n(e,t?t+"["+s+"]":s))}));else if("object"==typeof e)for(var s in e)i=i.concat(n(e[s],t?t+"["+s+"]":s));else i.push({key:t,value:e});return i}function r(e){var t=n(e),i=[];return t.forEach((function(e){i.push(encodeURIComponent(e.key)+"="+encodeURIComponent(e.value))})),i.join("&")}var a={json:{headers:{"Content-Type":"application/json"},body:function(e,t,i){return JSON.stringify(i)}},form:{headers:{},body:function(e,t,i){var s=this.generateParamsList(i),o=new FormData;return s.forEach((function(e){o.append(e.key,e.value)})),o}}};class l extends t{constructor(e){super(e),this.config=!1,this.url="",this.urlGenerator=!1,this.params=!1,this.loaderPromise=!1,this.registerTableOption("ajaxURL",!1),this.registerTableOption("ajaxURLGenerator",!1),this.registerTableOption("ajaxParams",{}),this.registerTableOption("ajaxConfig","get"),this.registerTableOption("ajaxContentType","form"),this.registerTableOption("ajaxRequestFunc",!1),this.registerTableOption("ajaxRequesting",(function(){})),this.registerTableOption("ajaxResponse",!1),this.contentTypeFormatters=l.contentTypeFormatters}initialize(){this.loaderPromise=this.table.options.ajaxRequestFunc||l.defaultLoaderPromise,this.urlGenerator=this.table.options.ajaxURLGenerator||l.defaultURLGenerator,this.table.options.ajaxParams&&this.setParams(this.table.options.ajaxParams),this.table.options.ajaxConfig&&this.setConfig(this.table.options.ajaxConfig),this.table.options.ajaxURL&&this.setUrl(this.table.options.ajaxURL),this.registerTableFunction("getAjaxUrl",this.getUrl.bind(this)),this.subscribe("data-loading",this.requestDataCheck.bind(this)),this.subscribe("data-load",this.requestData.bind(this))}requestDataCheck(e,t,i,s){return!((e||!this.url)&&"string"!=typeof e)}requestData(e,t,i,s,o){return this.requestDataCheck(e)?(e&&this.setUrl(e),t&&this.setParams(t,!0),i&&this.setConfig(i),this.sendRequest()):o}setParams(e,t){if(t){this.params=this.params||{};for(let t in e)this.params[t]=e[t]}else this.params=e}getParams(){return this.params||{}}setConfig(e){if(this._loadDefaultConfig(),"string"==typeof e)this.config.method=e;else for(let t in e)this.config[t]=e[t]}_loadDefaultConfig(e){if(!this.config||e){this.config={};for(let e in l.defaultConfig)this.config[e]=l.defaultConfig[e]}}setUrl(e){this.url=e}getUrl(){return this.url}sendRequest(e){var t=this.url;return this._loadDefaultConfig(),!1!==this.table.options.ajaxRequesting.call(this.table,this.url,this.params)?this.loaderPromise(t,this.config,this.params).then((e=>(this.table.options.ajaxResponse&&(e=this.table.options.ajaxResponse.call(this.table,this.url,this.params,e)),e))):Promise.reject()}}l.moduleName="ajax",l.defaultConfig={method:"GET"},l.defaultURLGenerator=function(e,t,i){return e&&i&&Object.keys(i).length&&(t.method&&"get"!=t.method.toLowerCase()||(t.method="get",e+=(e.includes("?")?"&":"?")+r(i))),e},l.defaultLoaderPromise=function(e,t,i){var s;return new Promise(((o,n)=>{if(e=this.urlGenerator.call(this.table,e,t,i),"GET"!=t.method.toUpperCase())if(s="object"==typeof this.table.options.ajaxContentType?this.table.options.ajaxContentType:this.contentTypeFormatters[this.table.options.ajaxContentType]){for(var r in s.headers)t.headers||(t.headers={}),void 0===t.headers[r]&&(t.headers[r]=s.headers[r]);t.body=s.body.call(this,e,t,i)}else console.warn("Ajax Error - Invalid ajaxContentType value:",this.table.options.ajaxContentType);e?(void 0===t.headers&&(t.headers={}),void 0===t.headers.Accept&&(t.headers.Accept="application/json"),void 0===t.headers["X-Requested-With"]&&(t.headers["X-Requested-With"]="XMLHttpRequest"),void 0===t.mode&&(t.mode="cors"),"cors"==t.mode?(void 0===t.headers["Access-Control-Allow-Origin"]&&(t.headers["Access-Control-Allow-Origin"]=window.location.origin),void 0===t.credentials&&(t.credentials="same-origin")):void 0===t.credentials&&(t.credentials="include"),fetch(e,t).then((e=>{e.ok?e.json().then((e=>{o(e)})).catch((e=>{n(e),console.warn("Ajax Load Error - Invalid JSON returned",e)})):(console.error("Ajax Load Error - Connection Error: "+e.status,e.statusText),n(e))})).catch((e=>{console.error("Ajax Load Error - Connection Error: ",e),n(e)}))):(console.warn("Ajax Load Error - No URL Set"),o([]))}))},l.contentTypeFormatters=a;class h extends t{constructor(e){super(e),this.mode=!0,this.pasteParser=function(){},this.pasteAction=function(){},this.customSelection=!1,this.rowRange=!1,this.blocked=!0,this.registerTableOption("clipboard",!1),this.registerTableOption("clipboardCopyStyled",!0),this.registerTableOption("clipboardCopyConfig",!1),this.registerTableOption("clipboardCopyFormatter",!1),this.registerTableOption("clipboardCopyRowRange","active"),this.registerTableOption("clipboardPasteParser","table"),this.registerTableOption("clipboardPasteAction","insert"),this.registerColumnOption("clipboard"),this.registerColumnOption("titleClipboard")}initialize(){this.mode=this.table.options.clipboard,this.rowRange=this.table.options.clipboardCopyRowRange,!0!==this.mode&&"copy"!==this.mode||this.table.element.addEventListener("copy",(e=>{var t,i;if(!this.blocked){if(e.preventDefault(),this.customSelection)t=this.customSelection,this.table.options.clipboardCopyFormatter&&(t=this.table.options.clipboardCopyFormatter("plain",t));else{var s=this.table.modules.export.generateExportList(this.table.options.clipboardCopyConfig,this.table.options.clipboardCopyStyled,this.rowRange,"clipboard");t=(i=this.table.modules.export.genereateHTMLTable(s))?this.generatePlainContent(s):"",this.table.options.clipboardCopyFormatter&&(t=this.table.options.clipboardCopyFormatter("plain",t),i=this.table.options.clipboardCopyFormatter("html",i))}window.clipboardData&&window.clipboardData.setData?window.clipboardData.setData("Text",t):e.clipboardData&&e.clipboardData.setData?(e.clipboardData.setData("text/plain",t),i&&e.clipboardData.setData("text/html",i)):e.originalEvent&&e.originalEvent.clipboardData.setData&&(e.originalEvent.clipboardData.setData("text/plain",t),i&&e.originalEvent.clipboardData.setData("text/html",i)),this.dispatchExternal("clipboardCopied",t,i),this.reset()}})),!0!==this.mode&&"paste"!==this.mode||this.table.element.addEventListener("paste",(e=>{this.paste(e)})),this.setPasteParser(this.table.options.clipboardPasteParser),this.setPasteAction(this.table.options.clipboardPasteAction),this.registerTableFunction("copyToClipboard",this.copy.bind(this))}reset(){this.blocked=!0,this.customSelection=!1}generatePlainContent(e){var t=[];return e.forEach((e=>{var i=[];e.columns.forEach((t=>{var s="";if(t)if("group"===e.type&&(t.value=t.component.getKey()),null===t.value)s="";else switch(typeof t.value){case"object":s=JSON.stringify(t.value);break;case"undefined":s="";break;default:s=t.value}i.push(s)})),t.push(i.join("\t"))})),t.join("\n")}copy(e,t){var i,s;this.blocked=!1,this.customSelection=!1,!0!==this.mode&&"copy"!==this.mode||(this.rowRange=e||this.table.options.clipboardCopyRowRange,void 0!==window.getSelection&&void 0!==document.createRange?((e=document.createRange()).selectNodeContents(this.table.element),(i=window.getSelection()).toString()&&t&&(this.customSelection=i.toString()),i.removeAllRanges(),i.addRange(e)):void 0!==document.selection&&void 0!==document.body.createTextRange&&((s=document.body.createTextRange()).moveToElementText(this.table.element),s.select()),document.execCommand("copy"),i&&i.removeAllRanges())}setPasteAction(e){switch(typeof e){case"string":this.pasteAction=h.pasteActions[e],this.pasteAction||console.warn("Clipboard Error - No such paste action found:",e);break;case"function":this.pasteAction=e}}setPasteParser(e){switch(typeof e){case"string":this.pasteParser=h.pasteParsers[e],this.pasteParser||console.warn("Clipboard Error - No such paste parser found:",e);break;case"function":this.pasteParser=e}}paste(e){var t,i,s;this.checkPaseOrigin(e)&&(t=this.getPasteData(e),(i=this.pasteParser.call(this,t))?(e.preventDefault(),this.table.modExists("mutator")&&(i=this.mutateData(i)),s=this.pasteAction.call(this,i),this.dispatchExternal("clipboardPasted",t,i,s)):this.dispatchExternal("clipboardPasteError",t))}mutateData(e){var t=[];return Array.isArray(e)?e.forEach((e=>{t.push(this.table.modules.mutator.transformRow(e,"clipboard"))})):t=e,t}checkPaseOrigin(e){var t=!0;return("DIV"!=e.target.tagName||this.table.modules.edit.currentCell)&&(t=!1),t}getPasteData(e){var t;return window.clipboardData&&window.clipboardData.getData?t=window.clipboardData.getData("Text"):e.clipboardData&&e.clipboardData.getData?t=e.clipboardData.getData("text/plain"):e.originalEvent&&e.originalEvent.clipboardData.getData&&(t=e.originalEvent.clipboardData.getData("text/plain")),t}}h.moduleName="clipboard",h.pasteActions={replace:function(e){return this.table.setData(e)},update:function(e){return this.table.updateOrAddData(e)},insert:function(e){return this.table.addData(e)}},h.pasteParsers={table:function(e){var t=[],i=!0,s=this.table.columnManager.columns,o=[],n=[];return(e=e.split("\n")).forEach((function(e){t.push(e.split("\t"))})),!(!t.length||1===t.length&&t[0].length<2)&&(t[0].forEach((function(e){var t=s.find((function(t){return e&&t.definition.title&&e.trim()&&t.definition.title.trim()===e.trim()}));t?o.push(t):i=!1})),i||(i=!0,o=[],t[0].forEach((function(e){var t=s.find((function(t){return e&&t.field&&e.trim()&&t.field.trim()===e.trim()}));t?o.push(t):i=!1})),i||(o=this.table.columnManager.columnsByIndex)),i&&t.shift(),t.forEach((function(e){var t={};e.forEach((function(e,i){o[i]&&(t[o[i].field]=e)})),n.push(t)})),n)}};class d{constructor(e){return this._row=e,new Proxy(this,{get:function(e,t,i){return void 0!==e[t]?e[t]:e._row.table.componentFunctionBinder.handle("row",e._row,t)}})}getData(e){return this._row.getData(e)}getElement(){return this._row.getElement()}getTable(){return this._row.table}getCells(){var e=[];return this._row.getCells().forEach((function(t){e.push(t.getComponent())})),e}getCell(e){var t=this._row.getCell(e);return!!t&&t.getComponent()}_getSelf(){return this._row}}class c{constructor(e){return this._cell=e,new Proxy(this,{get:function(e,t,i){return void 0!==e[t]?e[t]:e._cell.table.componentFunctionBinder.handle("cell",e._cell,t)}})}getValue(){return this._cell.getValue()}getOldValue(){return this._cell.getOldValue()}getInitialValue(){return this._cell.initialValue}getElement(){return this._cell.getElement()}getRow(){return this._cell.row.getComponent()}getData(){return this._cell.row.getData()}getField(){return this._cell.column.getField()}getColumn(){return this._cell.column.getComponent()}setValue(e,t){void 0===t&&(t=!0),this._cell.setValue(e,t)}restoreOldValue(){this._cell.setValueActual(this._cell.getOldValue())}restoreInitialValue(){this._cell.setValueActual(this._cell.initialValue)}checkHeight(){this._cell.checkHeight()}getTable(){return this._cell.table}_getSelf(){return this._cell}}class u extends e{constructor(e,t){super(e.table),this.table=e.table,this.column=e,this.row=t,this.element=null,this.value=null,this.initialValue,this.oldValue=null,this.modules={},this.height=null,this.width=null,this.minWidth=null,this.component=null,this.loaded=!1,this.build()}build(){this.generateElement(),this.setWidth(),this._configureCell(),this.setValueActual(this.column.getFieldValue(this.row.data)),this.initialValue=this.value}generateElement(){this.element=document.createElement("div"),this.element.className="tabulator-cell",this.element.setAttribute("role","gridcell"),this.element=this.element}_configureCell(){var e=this.element,t=this.column.getField();(e.style.textAlign=this.column.hozAlign,this.column.vertAlign&&(e.style.display="inline-flex",e.style.alignItems={top:"flex-start",bottom:"flex-end",middle:"center"}[this.column.vertAlign]||"",this.column.hozAlign&&(e.style.justifyContent={left:"flex-start",right:"flex-end",center:"center"}[this.column.hozAlign]||"")),t&&e.setAttribute("tabulator-field",t),this.column.definition.cssClass)&&this.column.definition.cssClass.split(" ").forEach((t=>{e.classList.add(t)}));"hover"===this.table.options.tooltipGenerationMode&&e.addEventListener("mouseenter",(e=>{this._generateTooltip()})),this.dispatch("cell-init",this),this.column.visible||this.hide()}_generateContents(){var e;switch(typeof(e=this.chain("cell-format",this,null,(()=>this.element.innerHTML=this.value)))){case"object":if(e instanceof Node){for(;this.element.firstChild;)this.element.removeChild(this.element.firstChild);this.element.appendChild(e)}else this.element.innerHTML="",null!=e&&console.warn("Format Error - Formatter has returned a type of object, the only valid formatter object return is an instance of Node, the formatter returned:",e);break;case"undefined":case"null":this.element.innerHTML="";break;default:this.element.innerHTML=e}}cellRendered(){this.dispatch("cell-rendered",this)}_generateTooltip(){var e=this.column.tooltip;e?(!0===e?e=this.value:"function"==typeof e&&!1===(e=e(this.getComponent()))&&(e=""),void 0===e&&(e=""),this.element.setAttribute("title",e)):this.element.setAttribute("title","")}getElement(e){return this.loaded||(this.loaded=!0,e||this.layoutElement()),this.element}getValue(){return this.value}getOldValue(){return this.oldValue}setValue(e,t){this.setValueProcessData(e,t)&&(this.dispatch("cell-value-updated",this),this.cellRendered(),this.dispatchExternal("cellEdited",this.getComponent()),this.subscribedExternal("dataChanged")&&this.dispatchExternal("dataChanged",this.table.rowManager.getData()))}setValueProcessData(e,t){var i=!1;return this.value!=e&&(i=!0,t&&(e=this.chain("cell-value-changing",[this,e],null,e))),this.setValueActual(e),i&&this.dispatch("cell-value-changed",this),i}setValueActual(e){this.oldValue=this.value,this.value=e,this.dispatch("cell-value-save-before",this),this.column.setFieldValue(this.row.data,e),this.dispatch("cell-value-save-after",this),this.loaded&&this.layoutElement()}layoutElement(){this._generateContents(),this._generateTooltip(),this.dispatch("cell-layout",this)}setWidth(){this.width=this.column.width,this.element.style.width=this.column.widthStyled}clearWidth(){this.width="",this.element.style.width=""}getWidth(){return this.width||this.element.offsetWidth}setMinWidth(){this.minWidth=this.column.minWidth,this.element.style.minWidth=this.column.minWidthStyled}setMaxWidth(){this.maxWidth=this.column.maxWidth,this.element.style.maxWidth=this.column.maxWidthStyled}checkHeight(){this.row.reinitializeHeight()}clearHeight(){this.element.style.height="",this.height=null}setHeight(){this.height=this.row.height,this.element.style.height=this.row.heightStyled}getHeight(){return this.height||this.element.offsetHeight}show(){this.element.style.display=this.column.vertAlign?"inline-flex":""}hide(){this.element.style.display="none"}delete(){this.dispatch("cell-delete",this),!this.table.rowManager.redrawBlock&&this.element.parentNode&&this.element.parentNode.removeChild(this.element),this.element=!1,this.column.deleteCell(this),this.row.deleteCell(this),this.calcs={}}getIndex(){return this.row.getCellIndex(this)}getComponent(){return this.component||(this.component=new c(this)),this.component}}class m{constructor(e){return this._column=e,this.type="ColumnComponent",new Proxy(this,{get:function(e,t,i){return void 0!==e[t]?e[t]:e._column.table.componentFunctionBinder.handle("column",e._column,t)}})}getElement(){return this._column.getElement()}getDefinition(){return this._column.getDefinition()}getField(){return this._column.getField()}getCells(){var e=[];return this._column.cells.forEach((function(t){e.push(t.getComponent())})),e}isVisible(){return this._column.visible}show(){this._column.isGroup?this._column.columns.forEach((function(e){e.show()})):this._column.show()}hide(){this._column.isGroup?this._column.columns.forEach((function(e){e.hide()})):this._column.hide()}toggle(){this._column.visible?this.hide():this.show()}delete(){return this._column.delete()}getSubColumns(){var e=[];return this._column.columns.length&&this._column.columns.forEach((function(t){e.push(t.getComponent())})),e}getParentColumn(){return this._column.parent instanceof Column&&this._column.parent.getComponent()}_getSelf(){return this._column}scrollTo(){return this._column.table.columnManager.scrollToColumn(this._column)}getTable(){return this._column.table}move(e,t){var i=this._column.table.columnManager.findColumn(e);i?this._column.table.columnManager.moveColumn(this._column,i,t):console.warn("Move Error - No matching column found:",i)}getNextColumn(){var e=this._column.nextColumn();return!!e&&e.getComponent()}getPrevColumn(){var e=this._column.prevColumn();return!!e&&e.getComponent()}updateDefinition(e){return this._column.updateDefinition(e)}getWidth(){return this._column.getWidth()}setWidth(e){var t;return t=!0===e?this._column.reinitializeWidth(!0):this._column.setWidth(e),this._column.table.columnManager.renderer.rerenderColumns(!0),t}}var p={title:void 0,field:void 0,columns:void 0,visible:void 0,hozAlign:void 0,vertAlign:void 0,width:void 0,minWidth:40,maxWidth:void 0,tooltip:void 0,cssClass:void 0,variableHeight:void 0,headerTooltip:void 0,headerVertical:void 0,headerHozAlign:void 0,editableTitle:void 0};class g extends e{constructor(e,t){super(t.table),this.definition=e,this.parent=t,this.type="column",this.columns=[],this.cells=[],this.element=this.createElement(),this.contentElement=!1,this.titleHolderElement=!1,this.titleElement=!1,this.groupElement=this.createGroupElement(),this.isGroup=!1,this.tooltip=!1,this.hozAlign="",this.vertAlign="",this.field="",this.fieldStructure="",this.getFieldValue="",this.setFieldValue="",this.titleFormatterRendered=!1,this.mapDefinitions(),this.setField(this.definition.field),this.modules={},this.width=null,this.widthStyled="",this.maxWidth=null,this.maxWidthStyled="",this.minWidth=null,this.minWidthStyled="",this.widthFixed=!1,this.visible=!0,this.component=null,this.definition.columns?(this.isGroup=!0,this.definition.columns.forEach(((e,t)=>{var i=new g(e,this);this.attachColumn(i)})),this.checkColumnVisibility()):t.registerColumnField(this),this._initialize(),this.bindModuleColumns()}createElement(){var e=document.createElement("div");return e.classList.add("tabulator-col"),e.setAttribute("role","columnheader"),e.setAttribute("aria-sort","none"),e}createGroupElement(){var e=document.createElement("div");return e.classList.add("tabulator-col-group-cols"),e}mapDefinitions(){var e=this.table.options.columnDefaults;if(e)for(let t in e)void 0===this.definition[t]&&(this.definition[t]=e[t]);this.definition=this.table.columnManager.optionsList.generate(g.defaultOptionList,this.definition)}checkDefinition(){Object.keys(this.definition).forEach((e=>{-1===g.defaultOptionList.indexOf(e)&&console.warn("Invalid column definition option in '"+(this.field||this.definition.title)+"' column:",e)}))}setField(e){this.field=e,this.fieldStructure=e?this.table.options.nestedFieldSeparator?e.split(this.table.options.nestedFieldSeparator):[e]:[],this.getFieldValue=this.fieldStructure.length>1?this._getNestedData:this._getFlatData,this.setFieldValue=this.fieldStructure.length>1?this._setNestedData:this._setFlatData}registerColumnPosition(e){this.parent.registerColumnPosition(e)}registerColumnField(e){this.parent.registerColumnField(e)}reRegisterPosition(){this.isGroup?this.columns.forEach((function(e){e.reRegisterPosition()})):this.registerColumnPosition(this)}_mapDepricatedFunctionality(){}setTooltip(){var e=this.definition,t=void 0===e.headerTooltip?e.tooltip:e.headerTooltip;t?!0===t?e.field?this.langBind("columns|"+e.field,(t=>{this.element.setAttribute("title",t||e.title)})):this.element.setAttribute("title",e.title):("function"==typeof t&&!1===(t=t(this.getComponent()))&&(t=""),this.element.setAttribute("title",t)):this.element.setAttribute("title","")}_initialize(){for(var e=this.definition;this.element.firstChild;)this.element.removeChild(this.element.firstChild);e.headerVertical&&(this.element.classList.add("tabulator-col-vertical"),"flip"===e.headerVertical&&this.element.classList.add("tabulator-col-vertical-flip")),this.contentElement=this._bindEvents(),this.contentElement=this._buildColumnHeaderContent(),this.element.appendChild(this.contentElement),this.isGroup?this._buildGroupHeader():this._buildColumnHeader(),this.setTooltip(),this.dispatch("column-init",this),this.element.addEventListener("mouseenter",(e=>{this.setTooltip()}))}_bindEvents(){var e,t,i,s=this.definition;"function"==typeof s.headerClick&&this.element.addEventListener("click",(e=>{s.headerClick(e,this.getComponent())})),"function"==typeof s.headerDblClick&&this.element.addEventListener("dblclick",(e=>{s.headerDblClick(e,this.getComponent())})),"function"==typeof s.headerContext&&this.element.addEventListener("contextmenu",(e=>{s.headerContext(e,this.getComponent())})),"function"==typeof s.headerTap&&(i=!1,this.element.addEventListener("touchstart",(e=>{i=!0}),{passive:!0}),this.element.addEventListener("touchend",(e=>{i&&s.headerTap(e,this.getComponent()),i=!1}))),"function"==typeof s.headerDblTap&&(e=null,this.element.addEventListener("touchend",(t=>{e?(clearTimeout(e),e=null,s.headerDblTap(t,this.getComponent())):e=setTimeout((()=>{clearTimeout(e),e=null}),300)}))),"function"==typeof s.headerTapHold&&(t=null,this.element.addEventListener("touchstart",(e=>{clearTimeout(t),t=setTimeout((function(){clearTimeout(t),t=null,i=!1,s.headerTapHold(e,this.getComponent())}),1e3)}),{passive:!0}),this.element.addEventListener("touchend",(e=>{clearTimeout(t),t=null})))}_buildColumnHeader(){var e=this.definition;this.table;(this.dispatch("column-layout",this),void 0!==e.visible&&(e.visible?this.show(!0):this.hide(!0)),e.cssClass)&&e.cssClass.split(" ").forEach((e=>{this.element.classList.add(e)}));e.field&&this.element.setAttribute("tabulator-field",e.field),this.setMinWidth(parseInt(e.minWidth)),e.maxWidth&&this.setMaxWidth(parseInt(e.maxWidth)),this.reinitializeWidth(),this.tooltip=this.definition.tooltip,this.hozAlign=this.definition.hozAlign,this.vertAlign=this.definition.vertAlign,this.titleElement.style.textAlign=this.definition.headerHozAlign}_buildColumnHeaderContent(){this.definition,this.table;var e=document.createElement("div");return e.classList.add("tabulator-col-content"),this.titleHolderElement=document.createElement("div"),this.titleHolderElement.classList.add("tabulator-col-title-holder"),e.appendChild(this.titleHolderElement),this.titleElement=this._buildColumnHeaderTitle(),this.titleHolderElement.appendChild(this.titleElement),e}_buildColumnHeaderTitle(){var e=this.definition,t=document.createElement("div");if(t.classList.add("tabulator-col-title"),e.editableTitle){var i=document.createElement("input");i.classList.add("tabulator-title-editor"),i.addEventListener("click",(e=>{e.stopPropagation(),i.focus()})),i.addEventListener("change",(()=>{e.title=i.value,this.dispatchExternal("columnTitleChanged",this.getComponent())})),t.appendChild(i),e.field?this.langBind("columns|"+e.field,(t=>{i.value=t||e.title||" "})):i.value=e.title||" "}else e.field?this.langBind("columns|"+e.field,(i=>{this._formatColumnHeaderTitle(t,i||e.title||" ")})):this._formatColumnHeaderTitle(t,e.title||" ");return t}_formatColumnHeaderTitle(e,t){var i=this.chain("column-format",[this,t,e],null,(()=>t));switch(typeof i){case"object":i instanceof Node?e.appendChild(i):(e.innerHTML="",console.warn("Format Error - Title formatter has returned a type of object, the only valid formatter object return is an instance of Node, the formatter returned:",i));break;case"undefined":case"null":e.innerHTML="";break;default:e.innerHTML=i}}_buildGroupHeader(){(this.element.classList.add("tabulator-col-group"),this.element.setAttribute("role","columngroup"),this.element.setAttribute("aria-title",this.definition.title),this.definition.cssClass)&&this.definition.cssClass.split(" ").forEach((e=>{this.element.classList.add(e)}));this.titleElement.style.textAlign=this.definition.headerHozAlign,this.element.appendChild(this.groupElement)}_getFlatData(e){return e[this.field]}_getNestedData(e){var t,i=e,s=this.fieldStructure,o=s.length;for(let e=0;e-1&&this.columns.splice(t,1),this.columns.length||this.delete()}setWidth(e){this.widthFixed=!0,this.setWidthActual(e)}setWidthActual(e){isNaN(e)&&(e=Math.floor(this.table.element.clientWidth/100*parseInt(e))),e=Math.max(this.minWidth,e),this.maxWidth&&(e=Math.min(this.maxWidth,e)),this.width=e,this.widthStyled=e?e+"px":"",this.element.style.width=this.widthStyled,this.isGroup||this.cells.forEach((function(e){e.setWidth()})),this.parent.isGroup&&this.parent.matchChildWidths(),this.dispatch("column-width",this)}checkCellHeights(){var e=[];this.cells.forEach((function(t){t.row.heightInitialized&&(null!==t.row.getElement().offsetParent?(e.push(t.row),t.row.clearCellHeight()):t.row.heightInitialized=!1)})),e.forEach((function(e){e.calcHeight()})),e.forEach((function(e){e.setCellHeight()}))}getWidth(){var e=0;return this.isGroup?this.columns.forEach((function(t){t.visible&&(e+=t.getWidth())})):e=this.width,e}getHeight(){return this.element.offsetHeight}setMinWidth(e){this.minWidth=e,this.minWidthStyled=e?e+"px":"",this.element.style.minWidth=this.minWidthStyled,this.cells.forEach((function(e){e.setMinWidth()}))}setMaxWidth(e){this.maxWidth=e,this.maxWidthStyled=e?e+"px":"",this.element.style.maxWidth=this.maxWidthStyled,this.cells.forEach((function(e){e.setMaxWidth()}))}delete(){return new Promise(((e,t)=>{this.isGroup&&this.columns.forEach((function(e){e.delete()})),this.dispatch("column-delete",this);var i=this.cells.length;for(let e=0;e-1&&this._nextVisibleColumn(e+1)}_nextVisibleColumn(e){var t=this.table.columnManager.getColumnByIndex(e);return!t||t.visible?t:this._nextVisibleColumn(e+1)}prevColumn(){var e=this.table.columnManager.findColumnIndex(this);return e>-1&&this._prevVisibleColumn(e-1)}_prevVisibleColumn(e){var t=this.table.columnManager.getColumnByIndex(e);return!t||t.visible?t:this._prevVisibleColumn(e-1)}reinitializeWidth(e){this.widthFixed=!1,void 0===this.definition.width||e||this.setWidth(this.definition.width),this.dispatch("column-width-fit-before",this),this.fitToData(),this.dispatch("column-width-fit-after",this)}fitToData(){this.widthFixed||(this.element.style.width="",this.cells.forEach((e=>{e.clearWidth()})));var e=this.element.offsetWidth;this.width&&this.widthFixed||(this.cells.forEach((t=>{var i=t.getWidth();i>e&&(e=i)})),e&&this.setWidthActual(e+1))}updateDefinition(e){return new Promise(((t,i)=>{var s;this.isGroup||this.parent.isGroup?(console.warn("Column Update Error - The updateDefinition function is only available on ungrouped columns"),i("Column Update Error - The updateDefinition function is only available on columns, not column groups")):(s=Object.assign({},this.getDefinition()),s=Object.assign(s,e),this.table.columnManager.addColumn(s,!1,this).then((e=>{s.field==this.field&&(this.field=!1),this.delete().then((()=>{t(e.getComponent())})).catch((e=>{i(e)}))})).catch((e=>{i(e)})))}))}deleteCell(e){var t=this.cells.indexOf(e);t>-1&&this.cells.splice(t,1)}getComponent(){return this.component||(this.component=new m(this)),this.component}}g.defaultOptionList=p;class b{constructor(e){return this._row=e,new Proxy(this,{get:function(e,t,i){return void 0!==e[t]?e[t]:e._row.table.componentFunctionBinder.handle("row",e._row,t)}})}getData(e){return this._row.getData(e)}getElement(){return this._row.getElement()}getCells(){var e=[];return this._row.getCells().forEach((function(t){e.push(t.getComponent())})),e}getCell(e){var t=this._row.getCell(e);return!!t&&t.getComponent()}getIndex(){return this._row.getData("data")[this._row.table.options.index]}getPosition(e){return this._row.table.rowManager.getRowPosition(this._row,e)}delete(){return this._row.delete()}scrollTo(){return this._row.table.rowManager.scrollToRow(this._row)}move(e,t){this._row.moveToRow(e,t)}update(e){return this._row.updateData(e)}normalizeHeight(){this._row.normalizeHeight(!0)}_getSelf(){return this._row}reformat(){return this._row.reinitialize()}getTable(){return this._row.table}getNextRow(){var e=this._row.nextRow();return e?e.getComponent():e}getPrevRow(){var e=this._row.prevRow();return e?e.getComponent():e}}class f extends e{constructor(e,t,i="row"){super(t.table),this.parent=t,this.data={},this.type=i,this.element=!1,this.modules={},this.cells=[],this.height=0,this.heightStyled="",this.manualHeight=!1,this.outerHeight=0,this.initialized=!1,this.heightInitialized=!1,this.component=null,this.created=!1,this.setData(e)}create(){this.created||(this.created=!0,this.generateElement())}createElement(){var e=document.createElement("div");e.classList.add("tabulator-row"),e.setAttribute("role","row"),this.element=e}getElement(){return this.create(),this.element}detachElement(){this.element&&this.element.parentNode&&this.element.parentNode.removeChild(this.element)}generateElement(){this.createElement(),this.dispatch("row-init",this)}generateCells(){this.cells=this.table.columnManager.generateCells(this)}initialize(e){if(this.create(),!this.initialized||e){for(this.deleteCells();this.element.firstChild;)this.element.removeChild(this.element.firstChild);this.dispatch("row-layout-before",this),this.generateCells(),this.table.columnManager.renderer.renderRowCells(this),e&&this.normalizeHeight(),this.dispatch("row-layout",this),this.table.options.rowFormatter&&this.table.options.rowFormatter(this.getComponent()),this.dispatch("row-layout-after",this),this.initialized=!0}else this.table.columnManager.renderer.rerenderRowCells(this)}reinitializeHeight(){this.heightInitialized=!1,this.element&&null!==this.element.offsetParent&&this.normalizeHeight(!0)}reinitialize(e){this.initialized=!1,this.heightInitialized=!1,this.manualHeight||(this.height=0,this.heightStyled=""),this.element&&null!==this.element.offsetParent&&this.initialize(!0),this.dispatch("row-relayout",this)}calcHeight(e){var t=0,i=this.table.options.resizableRows?this.element.clientHeight:0;this.cells.forEach((function(e){var i=e.getHeight();i>t&&(t=i)})),this.height=e?Math.max(t,i):this.manualHeight?this.height:Math.max(t,i),this.heightStyled=this.height?this.height+"px":"",this.outerHeight=this.element.offsetHeight}setCellHeight(){this.cells.forEach((function(e){e.setHeight()})),this.heightInitialized=!0}clearCellHeight(){this.cells.forEach((function(e){e.clearHeight()}))}normalizeHeight(e){e&&this.clearCellHeight(),this.calcHeight(e),this.setCellHeight()}setHeight(e,t){(this.height!=e||t)&&(this.manualHeight=!0,this.height=e,this.heightStyled=e?e+"px":"",this.setCellHeight(),this.outerHeight=this.element.offsetHeight)}getHeight(){return this.outerHeight}getWidth(){return this.element.offsetWidth}deleteCell(e){var t=this.cells.indexOf(e);t>-1&&this.cells.splice(t,1)}setData(e){this.data=this.chain("row-data-init-before",[this,e],null,e),this.dispatch("row-data-init-after",this)}updateData(e){var t,i=this.element&&s.elVisible(this.element),o={};return new Promise(((s,n)=>{for(var r in"string"==typeof e&&(e=JSON.parse(e)),this.dispatch("row-data-save-before",this),this.subscribed("row-data-changing")&&(o=Object.assign(o,this.data),o=Object.assign(o,e)),t=this.chain("row-data-changing",[this,o,e],null,e))this.data[r]=t[r];for(var r in this.dispatch("row-data-save-after",this),e){this.table.columnManager.getColumnsByFieldRoot(r).forEach((e=>{let s=this.getCell(e.getField());if(s){let o=e.getFieldValue(t);s.getValue()!=o&&(s.setValueProcessData(o),i&&s.cellRendered())}}))}i?(this.normalizeHeight(!0),this.table.options.rowFormatter&&this.table.options.rowFormatter(this.getComponent())):(this.initialized=!1,this.height=0,this.heightStyled=""),this.dispatch("row-data-changed",this,i,e),this.dispatchExternal("rowUpdated",this.getComponent()),this.subscribedExternal.subscribed("dataChanged")&&this.dispatchExternal("dataChanged",this.table.rowManager.getData()),s()}))}getData(e){return e?this.chain("row-data-retrieve",[this,e],null,this.data):this.data}getCell(e){return e=this.table.columnManager.findColumn(e),this.cells.find((function(t){return t.column===e}))}getCellIndex(e){return this.cells.findIndex((function(t){return t===e}))}findCell(e){return this.cells.find((t=>t.element===e))}getCells(){return this.cells}nextRow(){return this.table.rowManager.nextDisplayRow(this,!0)||!1}prevRow(){return this.table.rowManager.prevDisplayRow(this,!0)||!1}moveToRow(e,t){var i=this.table.rowManager.findRow(e);i?(this.table.rowManager.moveRowActual(this,i,!t),this.table.rowManager.refreshActiveData("display",!1,!0)):console.warn("Move Error - No matching row found:",e)}delete(){return new Promise(((e,t)=>{this.dispatch("row-delete",this),this.deleteActual(),e()}))}deleteActual(e){this.table.rowManager.getRowIndex(this);this.detatchModules(),this.table.rowManager.deleteRow(this,e),this.deleteCells(),this.initialized=!1,this.heightInitialized=!1,this.element=!1,this.dispatch("row-deleted",this)}detatchModules(){this.dispatch("row-deleting",this)}deleteCells(){var e=this.cells.length;for(let t=0;ts||null===s)&&(s=e)})),null!==s?!1!==o?s.toFixed(o):s:""},min:function(e,t,i){var s=null,o=void 0!==i.precision&&i.precision;return e.forEach((function(e){((e=Number(e)){this.recalcGroup(e)})))}recalcGroup(e){var t,i;e&&e.calcs&&(e.calcs.bottom&&(t=this.rowsToData(e.rows),i=this.generateRowData("bottom",t),e.calcs.bottom.updateData(i),e.calcs.bottom.reinitialize()),e.calcs.top&&(t=this.rowsToData(e.rows),i=this.generateRowData("top",t),e.calcs.top.updateData(i),e.calcs.top.reinitialize()))}generateTopRow(e){return this.generateRow("top",this.rowsToData(e))}generateBottomRow(e){return this.generateRow("bottom",this.rowsToData(e))}rowsToData(e){var t=[];return e.forEach((e=>{if(t.push(e.getData()),this.table.options.dataTree&&this.table.options.dataTreeChildColumnCalcs&&e.modules.dataTree.open){var i=this.rowsToData(this.table.modules.dataTree.getFilteredTreeChildren(e));t=t.concat(i)}})),t}generateRow(e,t){var i,s=this.generateRowData(e,t);return this.table.modExists("mutator")&&this.table.modules.mutator.disable(),i=new f(s,this,"calc"),this.table.modExists("mutator")&&this.table.modules.mutator.enable(),i.getElement().classList.add("tabulator-calcs","tabulator-calcs-"+e),i.component=!1,i.getComponent=()=>(i.component||(i.component=new d(this)),i.component),i.generateCells=()=>{var t=[];this.table.columnManager.columnsByIndex.forEach((s=>{this.genColumn.setField(s.getField()),this.genColumn.hozAlign=s.hozAlign,s.definition[e+"CalcFormatter"]&&this.table.modExists("format")?this.genColumn.modules.format={formatter:this.table.modules.format.getFormatter(s.definition[e+"CalcFormatter"]),params:s.definition[e+"CalcFormatterParams"]||{}}:this.genColumn.modules.format={formatter:this.table.modules.format.getFormatter("plaintext"),params:{}},this.genColumn.definition.cssClass=s.definition.cssClass;var o=new u(this.genColumn,i);o.getElement(),o.column=s,o.setWidth(),s.cells.push(o),t.push(o),s.visible||o.hide()})),i.cells=t},i}generateRowData(e,t){var i,s,o={},n="top"==e?this.topCalcs:this.botCalcs,r="top"==e?"topCalc":"botCalc";return n.forEach((function(e){var n=[];e.modules.columnCalcs&&e.modules.columnCalcs[r]&&(t.forEach((function(t){n.push(e.getFieldValue(t))})),s=r+"Params",i="function"==typeof e.modules.columnCalcs[s]?e.modules.columnCalcs[s](n,t):e.modules.columnCalcs[s],e.setFieldValue(o,e.modules.columnCalcs[r](n,t,i)))})),o}hasTopCalcs(){return!!this.topCalcs.length}hasBottomCalcs(){return!!this.botCalcs.length}redraw(){this.topRow&&this.topRow.normalizeHeight(!0),this.botRow&&this.botRow.normalizeHeight(!0)}getResults(){var e={};return this.table.options.groupBy&&this.table.modExists("groupRows")?this.table.modules.groupRows.getGroups(!0).forEach((t=>{e[t.getKey()]=this.getGroupResults(t)})):e={top:this.topRow?this.topRow.getData():{},bottom:this.botRow?this.botRow.getData():{}},e}getGroupResults(e){var t=e._getSelf(),i=e.getSubGroups(),s={};return i.forEach((e=>{s[e.getKey()]=this.getGroupResults(e)})),{top:t.calcs.top?t.calcs.top.getData():{},bottom:t.calcs.bottom?t.calcs.bottom.getData():{},groups:s}}}w.moduleName="columnCalcs",w.calculations=v;class C extends t{constructor(e){super(e),this.indent=10,this.field="",this.collapseEl=null,this.expandEl=null,this.branchEl=null,this.elementField=!1,this.startOpen=function(){},this.displayIndex=0,this.registerTableOption("dataTree",!1),this.registerTableOption("dataTreeFilter",!0),this.registerTableOption("dataTreeSort",!0),this.registerTableOption("dataTreeElementColumn",!1),this.registerTableOption("dataTreeBranchElement",!0),this.registerTableOption("dataTreeChildIndent",9),this.registerTableOption("dataTreeChildField","_children"),this.registerTableOption("dataTreeCollapseElement",!1),this.registerTableOption("dataTreeExpandElement",!1),this.registerTableOption("dataTreeStartExpanded",!1),this.registerTableOption("dataTreeChildColumnCalcs",!1),this.registerTableOption("dataTreeSelectPropagate",!1),this.registerComponentFunction("row","treeCollapse",this.collapseRow.bind(this)),this.registerComponentFunction("row","treeExpand",this.expandRow.bind(this)),this.registerComponentFunction("row","treeToggle",this.toggleRow.bind(this)),this.registerComponentFunction("row","getTreeParent",this.getTreeParent.bind(this)),this.registerComponentFunction("row","getTreeChildren",this.getRowChildren.bind(this)),this.registerComponentFunction("row","addTreeChild",this.addTreeChildRow.bind(this))}initialize(){if(this.table.options.dataTree){var e=null,t=this.table.columnManager.getFirstVisibileColumn(),i=this.table.options;switch(this.field=i.dataTreeChildField,this.indent=i.dataTreeChildIndent,this.elementField=i.dataTreeElementColumn||!!t&&t.field,i.dataTreeBranchElement&&(!0===i.dataTreeBranchElement?(this.branchEl=document.createElement("div"),this.branchEl.classList.add("tabulator-data-tree-branch")):"string"==typeof i.dataTreeBranchElement?((e=document.createElement("div")).innerHTML=i.dataTreeBranchElement,this.branchEl=e.firstChild):this.branchEl=i.dataTreeBranchElement),i.dataTreeCollapseElement?"string"==typeof i.dataTreeCollapseElement?((e=document.createElement("div")).innerHTML=i.dataTreeCollapseElement,this.collapseEl=e.firstChild):this.collapseEl=i.dataTreeCollapseElement:(this.collapseEl=document.createElement("div"),this.collapseEl.classList.add("tabulator-data-tree-control"),this.collapseEl.tabIndex=0,this.collapseEl.innerHTML="
"),i.dataTreeExpandElement?"string"==typeof i.dataTreeExpandElement?((e=document.createElement("div")).innerHTML=i.dataTreeExpandElement,this.expandEl=e.firstChild):this.expandEl=i.dataTreeExpandElement:(this.expandEl=document.createElement("div"),this.expandEl.classList.add("tabulator-data-tree-control"),this.expandEl.tabIndex=0,this.expandEl.innerHTML="
"),typeof i.dataTreeStartExpanded){case"boolean":this.startOpen=function(e,t){return i.dataTreeStartExpanded};break;case"function":this.startOpen=i.dataTreeStartExpanded;break;default:this.startOpen=function(e,t){return i.dataTreeStartExpanded[t]}}this.subscribe("row-init",this.initializeRow.bind(this)),this.subscribe("row-layout",this.layoutRow.bind(this)),this.subscribe("row-relayout",this.layoutRow.bind(this)),this.subscribe("row-deleted",this.rowDelete.bind(this),0),this.subscribe("row-data-changed",this.rowDataChanged.bind(this),10),this.subscribe("column-moving-rows",this.columnMoving.bind(this)),this.registerDisplayHandler(this.getRows.bind(this),30)}}getRowChildren(e){return this.getTreeChildren(e,!0)}columnMoving(){var e=[];return this.table.rowManager.rows.forEach((t=>{e=e.concat(this.getTreeChildren(t,!1,!0))})),e}rowDataChanged(e,t,i){this.redrawNeeded(i)&&(this.initializeRow(e),t&&(this.layoutRow(e),this.refreshData(!0)))}initializeRow(e){var t=e.getData()[this.field],i=Array.isArray(t),s=i||!i&&"object"==typeof t&&null!==t;!s&&e.modules.dataTree&&e.modules.dataTree.branchEl&&e.modules.dataTree.branchEl.parentNode.removeChild(e.modules.dataTree.branchEl),!s&&e.modules.dataTree&&e.modules.dataTree.controlEl&&e.modules.dataTree.controlEl.parentNode.removeChild(e.modules.dataTree.controlEl),e.modules.dataTree={index:e.modules.dataTree?e.modules.dataTree.index:0,open:!!s&&(e.modules.dataTree?e.modules.dataTree.open:this.startOpen(e.getComponent(),0)),controlEl:!(!e.modules.dataTree||!s)&&e.modules.dataTree.controlEl,branchEl:!(!e.modules.dataTree||!s)&&e.modules.dataTree.branchEl,parent:!!e.modules.dataTree&&e.modules.dataTree.parent,children:s}}reinitializeRowChildren(e){this.getTreeChildren(e,!1,!0).forEach((function(e){e.reinitialize(!0)}))}layoutRow(e){var t=(this.elementField?e.getCell(this.elementField):e.getCells()[0]).getElement(),i=e.modules.dataTree;i.branchEl&&(i.branchEl.parentNode&&i.branchEl.parentNode.removeChild(i.branchEl),i.branchEl=!1),i.controlEl&&(i.controlEl.parentNode&&i.controlEl.parentNode.removeChild(i.controlEl),i.controlEl=!1),this.generateControlElement(e,t),e.getElement().classList.add("tabulator-tree-level-"+i.index),i.index&&(this.branchEl?(i.branchEl=this.branchEl.cloneNode(!0),t.insertBefore(i.branchEl,t.firstChild),this.table.rtl?i.branchEl.style.marginRight=(i.branchEl.offsetWidth+i.branchEl.style.marginLeft)*(i.index-1)+i.index*this.indent+"px":i.branchEl.style.marginLeft=(i.branchEl.offsetWidth+i.branchEl.style.marginRight)*(i.index-1)+i.index*this.indent+"px"):this.table.rtl?t.style.paddingRight=parseInt(window.getComputedStyle(t,null).getPropertyValue("padding-right"))+i.index*this.indent+"px":t.style.paddingLeft=parseInt(window.getComputedStyle(t,null).getPropertyValue("padding-left"))+i.index*this.indent+"px")}generateControlElement(e,t){var i=e.modules.dataTree,s=(t=t||e.getCells()[0].getElement(),i.controlEl);!1!==i.children&&(i.open?(i.controlEl=this.collapseEl.cloneNode(!0),i.controlEl.addEventListener("click",(t=>{t.stopPropagation(),this.collapseRow(e)}))):(i.controlEl=this.expandEl.cloneNode(!0),i.controlEl.addEventListener("click",(t=>{t.stopPropagation(),this.expandRow(e)}))),i.controlEl.addEventListener("mousedown",(e=>{e.stopPropagation()})),s&&s.parentNode===t?s.parentNode.replaceChild(i.controlEl,s):t.insertBefore(i.controlEl,t.firstChild))}setDisplayIndex(e){this.displayIndex=e}getDisplayIndex(){return this.displayIndex}getRows(e){var t=[];return e.forEach(((e,i)=>{var s;t.push(e),e instanceof f&&(e.create(),(s=e.modules.dataTree.children).index||!1===s.children||this.getChildren(e).forEach((e=>{e.create(),t.push(e)})))})),t}getChildren(e,t){var i=e.modules.dataTree,s=[],o=[];return!1!==i.children&&(i.open||t)&&(Array.isArray(i.children)||(i.children=this.generateChildren(e)),s=this.table.modExists("filter")&&this.table.options.dataTreeFilter?this.table.modules.filter.filter(i.children):i.children,this.table.modExists("sort")&&this.table.options.dataTreeSort&&this.table.modules.sort.sort(s),s.forEach((e=>{o.push(e),this.getChildren(e).forEach((e=>{o.push(e)}))}))),o}generateChildren(e){var t=[],i=e.getData()[this.field];return Array.isArray(i)||(i=[i]),i.forEach((i=>{var s=new f(i||{},this.table.rowManager);s.create(),s.modules.dataTree.index=e.modules.dataTree.index+1,s.modules.dataTree.parent=e,s.modules.dataTree.children&&(s.modules.dataTree.open=this.startOpen(s.getComponent(),s.modules.dataTree.index)),t.push(s)})),t}expandRow(e,t){var i=e.modules.dataTree;!1!==i.children&&(i.open=!0,e.reinitialize(),this.refreshData(!0),this.dispatchExternal("dataTreeRowExpanded",e.getComponent(),e.modules.dataTree.index))}collapseRow(e){var t=e.modules.dataTree;!1!==t.children&&(t.open=!1,e.reinitialize(),this.refreshData(!0),this.dispatchExternal("dataTreeRowCollapsed",getComponent(),e.modules.dataTree.index))}toggleRow(e){var t=e.modules.dataTree;!1!==t.children&&(t.open?this.collapseRow(e):this.expandRow(e))}getTreeParent(e){return!!e.modules.dataTree.parent&&e.modules.dataTree.parent.getComponent()}getFilteredTreeChildren(e){var t=e.modules.dataTree,i=[];return t.children&&(Array.isArray(t.children)||(t.children=this.generateChildren(e)),(this.table.modExists("filter")&&this.table.options.dataTreeFilter?this.table.modules.filter.filter(t.children):t.children).forEach((e=>{e instanceof f&&i.push(e)}))),i}rowDelete(e){var t,i=e.modules.dataTree.parent;i&&(!1!==(t=this.findChildIndex(e,i))&&i.data[this.field].splice(t,1),i.data[this.field].length||delete i.data[this.field],this.initializeRow(i),this.layoutRow(i)),this.refreshData(!0)}addTreeChildRow(e,t,i,s){var o=!1;"string"==typeof t&&(t=JSON.parse(t)),Array.isArray(e.data[this.field])||(e.data[this.field]=[],e.modules.dataTree.open=this.startOpen(e.getComponent(),e.modules.dataTree.index)),void 0!==s&&!1!==(o=this.findChildIndex(s,e))&&e.data[this.field].splice(i?o:o+1,0,t),!1===o&&(i?e.data[this.field].unshift(t):e.data[this.field].push(t)),this.initializeRow(e),this.layoutRow(e),this.refreshData(!0)}findChildIndex(e,t){var i=!1;return"object"==typeof e?e instanceof f?i=e.data:e instanceof RowComponent?i=e._getSelf().data:"undefined"!=typeof HTMLElement&&e instanceof HTMLElement&&t.modules.dataTree&&(i=t.modules.dataTree.children.find((t=>t instanceof f&&t.element===e)))&&(i=i.data):i=null!=e&&t.data[this.field].find((t=>t.data[this.table.options.index]==e)),i&&(Array.isArray(t.data[this.field])&&(i=t.data[this.field].indexOf(i)),-1==i&&(i=!1)),i}getTreeChildren(e,t,i){var s=e.modules.dataTree,o=[];return s.children&&(Array.isArray(s.children)||(s.children=this.generateChildren(e)),s.children.forEach((e=>{e instanceof f&&(o.push(t?e.getComponent():e),i&&(o=o.concat(this.getTreeChildren(e,t,i))))}))),o}checkForRestyle(e){e.row.cells.indexOf(e)||e.row.reinitialize()}getChildField(){return this.field}redrawNeeded(e){return!!this.field&&void 0!==e[this.field]||!!this.elementField&&void 0!==e[this.elementField]}}C.moduleName="dataTree";var E={csv:function(e,t,i){var s=t&&t.delimiter?t.delimiter:",",o=[],n=[];e.forEach((e=>{var t=[];switch(e.type){case"group":console.warn("Download Warning - CSV downloader cannot process row groups");break;case"calc":console.warn("Download Warning - CSV downloader cannot process column calculations");break;case"header":e.columns.forEach(((e,t)=>{e&&1===e.depth&&(n[t]=void 0===e.value||null===e.value?"":'"'+String(e.value).split('"').join('""')+'"')}));break;case"row":e.columns.forEach((e=>{if(e){switch(typeof e.value){case"object":e.value=JSON.stringify(e.value);break;case"undefined":case"null":e.value=""}t.push('"'+String(e.value).split('"').join('""')+'"')}})),o.push(t.join(s))}})),n.length&&o.unshift(n.join(s)),o=o.join("\n"),t.bom&&(o="\ufeff"+o),i(o,"text/csv")},json:function(e,t,i){var s=[];e.forEach((e=>{var t={};switch(e.type){case"header":break;case"group":console.warn("Download Warning - JSON downloader cannot process row groups");break;case"calc":console.warn("Download Warning - JSON downloader cannot process column calculations");break;case"row":e.columns.forEach((e=>{e&&(t[e.component.getField()]=e.value)})),s.push(t)}})),i(s=JSON.stringify(s,null,"\t"),"application/json")},pdf:function(e,t,i){var s=[],o=[],n={},r=t.rowGroupStyles||{fontStyle:"bold",fontSize:12,cellPadding:6,fillColor:220},a=t.rowCalcStyles||{fontStyle:"bold",fontSize:10,cellPadding:4,fillColor:232},l=t.jsPDF||{},h=t&&t.title?t.title:"";function d(e,t){var i=[];return e.columns.forEach((e=>{var s;if(e){switch(typeof e.value){case"object":e.value=JSON.stringify(e.value);break;case"undefined":case"null":e.value=""}s={content:e.value,colSpan:e.width,rowSpan:e.height},t&&(s.styles=t),i.push(s)}else i.push("")})),i}l.orientation||(l.orientation=t.orientation||"landscape"),l.unit||(l.unit="pt"),e.forEach((e=>{switch(e.type){case"header":s.push(d(e));break;case"group":o.push(d(e,r));break;case"calc":o.push(d(e,a));break;case"row":o.push(d(e))}}));var c=new jsPDF(l);t&&t.autoTable&&(n="function"==typeof t.autoTable?t.autoTable(c)||{}:t.autoTable),h&&(n.addPageContent=function(e){c.text(h,40,30)}),n.head=s,n.body=o,c.autoTable(n),t&&t.documentProcessing&&t.documentProcessing(c),i(c.output("arraybuffer"),"application/pdf")},xlsx:function(t,i,s){var o=i.sheetName||"Sheet1",n=XLSX.utils.book_new(),r=new e(this);function a(){var e=[],i=[],s={},o={s:{c:0,r:0},e:{c:t[0]?t[0].columns.reduce(((e,t)=>e+(t&&t.width?t.width:1)),0):0,r:t.length}};return t.forEach(((t,s)=>{var o=[];t.columns.forEach((function(e,t){e?(o.push(e.value instanceof Date||"object"!=typeof e.value?e.value:JSON.stringify(e.value)),(e.width>1||e.height>-1)&&i.push({s:{r:s,c:t},e:{r:s+e.height-1,c:t+e.width-1}})):o.push("")})),e.push(o)})),XLSX.utils.sheet_add_aoa(s,e),s["!ref"]=XLSX.utils.encode_range(o),i.length&&(s["!merges"]=i),s}if(output,n.SheetNames=[],n.Sheets={},i.sheetOnly)s(a());else{if(i.sheets)for(var l in i.sheets)!0===i.sheets[l]?(n.SheetNames.push(l),n.Sheets[l]=a()):(n.SheetNames.push(l),r.commsSend(i.sheets[l],"download","intercept",{type:"xlsx",options:{sheetOnly:!0},active:this.active,intercept:function(e){n.Sheets[l]=e}}));else n.SheetNames.push(o),n.Sheets[o]=a();i.documentProcessing&&(n=i.documentProcessing(n)),output=XLSX.write(n,{bookType:"xlsx",bookSST:!0,type:"binary"}),s(function(e){for(var t=new ArrayBuffer(e.length),i=new Uint8Array(t),s=0;s!=e.length;++s)i[s]=255&e.charCodeAt(s);return t}(output),"application/octet-stream")}},html:function(e,t,i){this.modExists("export",!0)&&i(this.modules.export.genereateHTMLTable(e),"text/html")}};class y extends t{constructor(e){super(e),this.registerTableOption("downloadReady",(function(e,t){return t})),this.registerTableOption("downloadConfig",{}),this.registerTableOption("downloadRowRange","active"),this.registerColumnOption("download"),this.registerColumnOption("titleDownload")}initialize(){this.registerTableFunction("download",this.download.bind(this)),this.registerTableFunction("downloadToTab",this.downloadToTab.bind(this))}downloadToTab(e,t,i,s){this.download(e,t,i,s,!0)}download(e,t,i,s,o){var n=!1;if("function"==typeof e?n=e:y.downloaders[e]?n=y.downloaders[e]:console.warn("Download Error - No such download type found: ",e),n){var r=this.generateExportList(s);n.call(this.table,r,i||{},(function(i,s){o?!0===o?this.triggerDownload(i,s,e,t,!0):o(i):this.triggerDownload(i,s,e,t)}))}}generateExportList(e){var t=this.table.modules.export.generateExportList(this.table.options.downloadConfig,!1,e||this.table.options.downloadRowRange,"download"),i=this.table.options.groupHeaderDownload;return i&&!Array.isArray(i)&&(i=[i]),t.forEach((e=>{var t;"group"===e.type&&(t=e.columns[0],i&&i[e.indent]&&(t.value=i[e.indent](t.value,e.component._group.getRowCount(),e.component._group.getData(),e.component)))})),t}triggerDownload(e,t,i,s,o){var n=document.createElement("a"),r=new Blob([e],{type:t});s=s||"Tabulator."+("function"==typeof i?"txt":i);(r=this.table.options.downloadReady(e,r))&&(o?window.open(window.URL.createObjectURL(r)):navigator.msSaveOrOpenBlob?navigator.msSaveOrOpenBlob(r,s):(n.setAttribute("href",window.URL.createObjectURL(r)),n.setAttribute("download",s),n.style.display="none",document.body.appendChild(n),n.click(),document.body.removeChild(n)),this.dispatchExternal("downloadComplete"))}commsReceived(e,t,i){switch(t){case"intercept":this.download(i.type,"",i.options,i.active,i.intercept)}}}function R(e,t){var i=t.mask,s=void 0!==t.maskLetterChar?t.maskLetterChar:"A",o=void 0!==t.maskNumberChar?t.maskNumberChar:"9",n=void 0!==t.maskWildcardChar?t.maskWildcardChar:"*";function r(t){var a=i[t];void 0!==a&&a!==n&&a!==s&&a!==o&&(e.value=e.value+""+a,r(t+1))}e.addEventListener("keydown",(t=>{var r=e.value.length,a=t.key;if(t.keyCode>46){if(r>=i.length)return t.preventDefault(),t.stopPropagation(),!1;switch(i[r]){case s:if(a.toUpperCase()==a.toLowerCase())return t.preventDefault(),t.stopPropagation(),!1;break;case o:if(isNaN(a))return t.preventDefault(),t.stopPropagation(),!1;break;case n:break;default:if(a!==i[r])return t.preventDefault(),t.stopPropagation(),!1}}})),e.addEventListener("keyup",(i=>{i.keyCode>46&&t.maskAutoFill&&r(e.value.length)})),e.placeholder||(e.placeholder=i),t.maskAutoFill&&r(e.value.length)}y.moduleName="download",y.downloaders=E;var x={input:function(e,t,i,s,o){var n=e.getValue(),r=document.createElement("input");if(r.setAttribute("type",o.search?"search":"text"),r.style.padding="4px",r.style.width="100%",r.style.boxSizing="border-box",o.elementAttributes&&"object"==typeof o.elementAttributes)for(let e in o.elementAttributes)"+"==e.charAt(0)?(e=e.slice(1),r.setAttribute(e,r.getAttribute(e)+o.elementAttributes["+"+e])):r.setAttribute(e,o.elementAttributes[e]);function a(e){null==n&&""!==r.value||r.value!==n?i(r.value)&&(n=r.value):s()}return r.value=void 0!==n?n:"",t((function(){r.focus({preventScroll:!0}),r.style.height="100%"})),r.addEventListener("change",a),r.addEventListener("blur",a),r.addEventListener("keydown",(function(e){switch(e.keyCode){case 13:a();break;case 27:s();break;case 35:case 36:e.stopPropagation()}})),o.mask&&R(r,o),r},textarea:function(e,t,i,s,o){var n=e.getValue(),r=o.verticalNavigation||"hybrid",a=String(null!=n?n:""),l=((a.match(/(?:\r\n|\r|\n)/g)||[]).length,document.createElement("textarea")),h=0;if(l.style.display="block",l.style.padding="2px",l.style.height="100%",l.style.width="100%",l.style.boxSizing="border-box",l.style.whiteSpace="pre-wrap",l.style.resize="none",o.elementAttributes&&"object"==typeof o.elementAttributes)for(let e in o.elementAttributes)"+"==e.charAt(0)?(e=e.slice(1),l.setAttribute(e,l.getAttribute(e)+o.elementAttributes["+"+e])):l.setAttribute(e,o.elementAttributes[e]);function d(t){null==n&&""!==l.value||l.value!==n?(i(l.value)&&(n=l.value),setTimeout((function(){e.getRow().normalizeHeight()}),300)):s()}return l.value=a,t((function(){l.focus({preventScroll:!0}),l.style.height="100%",l.scrollHeight,l.style.height=l.scrollHeight+"px",e.getRow().normalizeHeight()})),l.addEventListener("change",d),l.addEventListener("blur",d),l.addEventListener("keyup",(function(){l.style.height="";var t=l.scrollHeight;l.style.height=t+"px",t!=h&&(h=t,e.getRow().normalizeHeight())})),l.addEventListener("keydown",(function(e){switch(e.keyCode){case 27:s();break;case 38:("editor"==r||"hybrid"==r&&l.selectionStart)&&(e.stopImmediatePropagation(),e.stopPropagation());break;case 40:("editor"==r||"hybrid"==r&&l.selectionStart!==l.value.length)&&(e.stopImmediatePropagation(),e.stopPropagation());break;case 35:case 36:e.stopPropagation()}})),o.mask&&R(l,o),l},number:function(e,t,i,s,o){var n=e.getValue(),r=o.verticalNavigation||"editor",a=document.createElement("input");if(a.setAttribute("type","number"),void 0!==o.max&&a.setAttribute("max",o.max),void 0!==o.min&&a.setAttribute("min",o.min),void 0!==o.step&&a.setAttribute("step",o.step),a.style.padding="4px",a.style.width="100%",a.style.boxSizing="border-box",o.elementAttributes&&"object"==typeof o.elementAttributes)for(let e in o.elementAttributes)"+"==e.charAt(0)?(e=e.slice(1),a.setAttribute(e,a.getAttribute(e)+o.elementAttributes["+"+e])):a.setAttribute(e,o.elementAttributes[e]);a.value=n;var l=function(e){h()};function h(){var e=a.value;isNaN(e)||""===e||(e=Number(e)),e!==n?i(e)&&(n=e):s()}return t((function(){a.removeEventListener("blur",l),a.focus({preventScroll:!0}),a.style.height="100%",a.addEventListener("blur",l)})),a.addEventListener("keydown",(function(e){switch(e.keyCode){case 13:h();break;case 27:s();break;case 38:case 40:"editor"==r&&(e.stopImmediatePropagation(),e.stopPropagation());break;case 35:case 36:e.stopPropagation()}})),o.mask&&R(a,o),a},range:function(e,t,i,s,o){var n=e.getValue(),r=document.createElement("input");if(r.setAttribute("type","range"),void 0!==o.max&&r.setAttribute("max",o.max),void 0!==o.min&&r.setAttribute("min",o.min),void 0!==o.step&&r.setAttribute("step",o.step),r.style.padding="4px",r.style.width="100%",r.style.boxSizing="border-box",o.elementAttributes&&"object"==typeof o.elementAttributes)for(let e in o.elementAttributes)"+"==e.charAt(0)?(e=e.slice(1),r.setAttribute(e,r.getAttribute(e)+o.elementAttributes["+"+e])):r.setAttribute(e,o.elementAttributes[e]);function a(){var e=r.value;isNaN(e)||""===e||(e=Number(e)),e!=n?i(e)&&(n=e):s()}return r.value=n,t((function(){r.focus({preventScroll:!0}),r.style.height="100%"})),r.addEventListener("blur",(function(e){a()})),r.addEventListener("keydown",(function(e){switch(e.keyCode){case 13:a();break;case 27:s()}})),r},select:function(e,t,i,o,n){var r=this,a=e.getElement(),l=e.getValue(),h=n.verticalNavigation||"editor",d=void 0!==l||null===l?Array.isArray(l)?l:[l]:void 0!==n.defaultValue?n.defaultValue:[],c=document.createElement("input"),u=document.createElement("div"),m=n.multiselect,p=[],g={},b=[],f=[],v=!0,w=!1,C="",E=null;function y(t){var i,s={},o=r.table.getData();return(i=t?r.table.columnManager.getColumnByField(t):e.getColumn()._getSelf())?o.forEach((function(e){var t=i.getFieldValue(e);null!=t&&""!==t&&(s[t]=!0)})):console.warn("unable to find matching column to create select lookup list:",t),Object.keys(s)}function R(t,i){var s=[],o=[];function r(e){e={label:e.label,value:e.value,itemParams:e.itemParams,elementAttributes:e.elementAttributes,element:!1};return i.indexOf(e.value)>-1&&M(e),s.push(e),o.push(e),e}if("function"==typeof t&&(t=t(e)),Array.isArray(t))t.forEach((function(e){var t;"object"==typeof e?e.options?(t={label:e.label,group:!0,itemParams:e.itemParams,elementAttributes:e.elementAttributes,element:!1},o.push(t),e.options.forEach((function(e){r(e)}))):r(e):(t={label:e,value:e,element:!1},i.indexOf(t.value)>-1&&M(t),s.push(t),o.push(t))}));else for(var a in t){var l={label:t[a],value:a,element:!1};i.indexOf(l.value)>-1&&M(l),s.push(l),o.push(l)}n.sortValuesList&&(s.sort(((e,t)=>e.labelt.label?1:0)),o.sort(((e,t)=>e.labelt.label?1:0)),"asc"!==n.sortValuesList&&(s.reverse(),o.reverse())),p=s,b=o,function(){for(;u.firstChild;)u.removeChild(u.firstChild);b.forEach((function(t){var i=t.element;if(!i){if(i=document.createElement("div"),t.label=n.listItemFormatter?n.listItemFormatter(t.value,t.label,e,i,t.itemParams):t.label,t.group?(i.classList.add("tabulator-edit-select-list-group"),i.tabIndex=0,i.innerHTML=""===t.label?" ":t.label):(i.classList.add("tabulator-edit-select-list-item"),i.tabIndex=0,i.innerHTML=""===t.label?" ":t.label,i.addEventListener("click",(function(){w=!0,setTimeout((()=>{w=!1}),10),m?(L(t),c.focus()):D(t)})),f.indexOf(t)>-1&&i.classList.add("active")),t.elementAttributes&&"object"==typeof t.elementAttributes)for(let e in t.elementAttributes)"+"==e.charAt(0)?(e=e.slice(1),i.setAttribute(e,c.getAttribute(e)+t.elementAttributes["+"+e])):i.setAttribute(e,t.elementAttributes[e]);i.addEventListener("mousedown",(function(){v=!1,setTimeout((function(){v=!0}),10)})),t.element=i}u.appendChild(i)}))}()}function x(e,t){!m&&g&&g.element&&g.element.classList.remove("active"),g&&g.element&&g.element.classList.remove("focused"),g=e,e.element&&(e.element.classList.add("focused"),t&&e.element.classList.add("active")),e&&e.element&&e.element.scrollIntoView&&e.element.scrollIntoView({behavior:"smooth",block:"nearest",inline:"start"})}function M(e){-1==f.indexOf(e)&&(f.push(e),x(e,!0)),S()}function T(e){var t=f[e];e>-1&&(f.splice(e,1),t.element&&t.element.classList.remove("active"))}function L(e){e||(e=g);var t=f.indexOf(e);t>-1?T(t):(!0!==m&&f.length>=m&&T(0),M(e)),S()}function D(e){H(),e||(e=g),e&&(c.value=e.label,i(e.value)),d=[e.value]}function k(e){e||H();var t=[];f.forEach((e=>{t.push(e.value)})),d=t,i(t)}function S(){var e=[];f.forEach((t=>{e.push(t.label)})),c.value=e.join(", "),!1===r.currentCell&&k(!0)}function F(){H(),o()}function H(){u.parentNode&&u.parentNode.removeChild(u),r.table.rowManager.element.removeEventListener("scroll",F)}if((Array.isArray(n)||!Array.isArray(n)&&"object"==typeof n&&!n.values)&&(console.warn("DEPRECATION WARNING - values for the select editor must now be passed into the values property of the editorParams object, not as the editorParams object"),n={values:n}),c.setAttribute("type","text"),c.style.padding="4px",c.style.width="100%",c.style.boxSizing="border-box",c.style.cursor="default",c.readOnly=0!=this.currentCell,n.elementAttributes&&"object"==typeof n.elementAttributes)for(let e in n.elementAttributes)"+"==e.charAt(0)?(e=e.slice(1),c.setAttribute(e,c.getAttribute(e)+n.elementAttributes["+"+e])):c.setAttribute(e,n.elementAttributes[e]);return c.value=void 0!==l||null===l?l:"",c.addEventListener("search",(function(e){c.value||(!function(){var e=f.length;for(let t=0;t0&&x(p[t-1],!m));break;case 40:t=p.indexOf(g),("editor"==h||"hybrid"==h&&t=38&&e.keyCode<=90&&function(e){clearTimeout(E);var t=String.fromCharCode(event.keyCode).toLowerCase();C+=t.toLowerCase();var i=p.find((e=>void 0!==e.label&&e.label.toLowerCase().startsWith(C)));i&&x(i,!m),E=setTimeout((()=>{C=""}),800)}(e.keyCode)}})),c.addEventListener("blur",(function(e){v&&(m?k():F())})),c.addEventListener("focus",(function(e){w||function(){if(f=[],!u.parentNode){!0===n.values?R(y(),d):"string"==typeof n.values?R(y(n.values),d):R(n.values||[],d);var e=s.elOffset(a);u.style.minWidth=a.offsetWidth+"px",u.style.top=e.top+a.offsetHeight+"px",u.style.left=e.left+"px",u.addEventListener("mousedown",(function(e){v=!1,setTimeout((function(){v=!0}),10)})),document.body.appendChild(u)}}()})),(u=document.createElement("div")).classList.add("tabulator-edit-select-list"),t((function(){c.style.height="100%",c.focus({preventScroll:!0})})),setTimeout((()=>{this.table.rowManager.element.addEventListener("scroll",F)}),10),c},autocomplete:function(e,t,i,o,n){var r=this,a=e.getElement(),l=e.getValue(),h=n.verticalNavigation||"editor",d=void 0!==l||null===l?l:void 0!==n.defaultValue?n.defaultValue:"",c=document.createElement("input"),u=document.createElement("div"),m=[],p=!1,g=!0,b=!1;if(c.setAttribute("type","search"),c.style.padding="4px",c.style.width="100%",c.style.boxSizing="border-box",n.elementAttributes&&"object"==typeof n.elementAttributes)for(let e in n.elementAttributes)"+"==e.charAt(0)?(e=e.slice(1),c.setAttribute(e,c.getAttribute(e)+n.elementAttributes["+"+e])):c.setAttribute(e,n.elementAttributes[e]);function f(){!0===n.values?b=v():"string"==typeof n.values&&(b=v(n.values))}function v(t){var i,s={},o=r.table.getData();return(i=t?r.table.columnManager.getColumnByField(t):e.getColumn()._getSelf())?(o.forEach((function(e){var t=i.getFieldValue(e);null!=t&&""!==t&&(s[t]=!0)})),s=n.sortValuesList?"asc"==n.sortValuesList?Object.keys(s).sort():Object.keys(s).sort().reverse():Object.keys(s)):console.warn("unable to find matching column to create autocomplete lookup list:",t),s}function w(e,t){var i,s,o=[];i=b||(n.values||[]),n.searchFunc?(o=n.searchFunc(e,i))instanceof Promise?(C(void 0!==n.searchingPlaceholder?n.searchingPlaceholder:"Searching..."),o.then((e=>{x(E(e),t)})).catch((e=>{console.err("error in autocomplete search promise:",e)}))):x(E(o),t):(s=E(i),""===e?n.showListOnEmpty&&(o=s):s.forEach((function(t){null===t.value&&void 0===t.value||(String(t.value).toLowerCase().indexOf(String(e).toLowerCase())>-1||String(t.title).toLowerCase().indexOf(String(e).toLowerCase())>-1)&&o.push(t)})),x(o,t))}function C(e){var t=document.createElement("div");y(),!1!==e&&(t.classList.add("tabulator-edit-select-list-notice"),t.tabIndex=0,e instanceof Node?t.appendChild(e):t.innerHTML=e,u.appendChild(t))}function E(e){var t=[];if(Array.isArray(e))e.forEach((function(e){var i={};"object"==typeof e?(i.title=n.listItemFormatter?n.listItemFormatter(e.value,e.label):e.label,i.value=e.value):(i.title=n.listItemFormatter?n.listItemFormatter(e,e):e,i.value=e),t.push(i)}));else for(var i in e){var s={title:n.listItemFormatter?n.listItemFormatter(i,e[i]):e[i],value:i};t.push(s)}return t}function y(){for(;u.firstChild;)u.removeChild(u.firstChild)}function x(e,t){e.length?function(e,t){var i=!1;y(),(m=e).forEach((function(e){var s=e.element;s||((s=document.createElement("div")).classList.add("tabulator-edit-select-list-item"),s.tabIndex=0,s.innerHTML=e.title,s.addEventListener("click",(function(t){T(e),M()})),s.addEventListener("mousedown",(function(e){g=!1,setTimeout((function(){g=!0}),10)})),e.element=s,t&&e.value==l&&(c.value=e.title,e.element.classList.add("active"),i=!0),e===p&&(e.element.classList.add("active"),i=!0)),u.appendChild(s)})),i||T(!1)}(e,t):n.emptyPlaceholder&&C(n.emptyPlaceholder)}function M(){L(),p?l!==p.value?(l=p.value,c.value=p.title,i(p.value)):o():n.freetext||n.allowEmpty&&""===c.value?(l=c.value,i(c.value)):o()}function T(e,t){p&&p.element&&p.element.classList.remove("active"),p=e,e&&e.element&&e.element.classList.add("active"),e&&e.element&&e.element.scrollIntoView&&e.element.scrollIntoView({behavior:"smooth",block:"nearest",inline:"start"})}function L(){u.parentNode&&u.parentNode.removeChild(u),r.table.rowManager.element.removeEventListener("scroll",D)}function D(){L(),o()}return u.classList.add("tabulator-edit-select-list"),u.addEventListener("mousedown",(function(e){g=!1,setTimeout((function(){g=!0}),10)})),c.addEventListener("keydown",(function(e){var t;switch(e.keyCode){case 38:t=m.indexOf(p),("editor"==h||"hybrid"==h&&t)&&(e.stopImmediatePropagation(),e.stopPropagation(),e.preventDefault(),T(t>0&&m[t-1]));break;case 40:t=m.indexOf(p),("editor"==h||"hybrid"==h&&t{this.table.rowManager.element.addEventListener("scroll",D)}),10),f(),c.value=d,w(d,!0),c},star:function(e,t,i,s,o){var n=this,r=e.getElement(),a=e.getValue(),l=r.getElementsByTagName("svg").length||5,h=r.getElementsByTagName("svg")[0]?r.getElementsByTagName("svg")[0].getAttribute("width"):14,d=[],c=document.createElement("div"),u=document.createElementNS("http://www.w3.org/2000/svg","svg");function m(e){d.forEach((function(t,i){i'):("ie"==n.table.browser?t.setAttribute("class","tabulator-star-inactive"):t.classList.replace("tabulator-star-active","tabulator-star-inactive"),t.innerHTML='')}))}function p(e){var t=document.createElement("span"),s=u.cloneNode(!0);d.push(s),t.addEventListener("mouseenter",(function(t){t.stopPropagation(),t.stopImmediatePropagation(),m(e)})),t.addEventListener("mousemove",(function(e){e.stopPropagation(),e.stopImmediatePropagation()})),t.addEventListener("click",(function(t){t.stopPropagation(),t.stopImmediatePropagation(),i(e),r.blur()})),t.appendChild(s),c.appendChild(t)}function g(e){a=e,m(e)}if(r.style.whiteSpace="nowrap",r.style.overflow="hidden",r.style.textOverflow="ellipsis",c.style.verticalAlign="middle",c.style.display="inline-block",c.style.padding="4px",u.setAttribute("width",h),u.setAttribute("height",h),u.setAttribute("viewBox","0 0 512 512"),u.setAttribute("xml:space","preserve"),u.style.padding="0 1px",o.elementAttributes&&"object"==typeof o.elementAttributes)for(let e in o.elementAttributes)"+"==e.charAt(0)?(e=e.slice(1),c.setAttribute(e,c.getAttribute(e)+o.elementAttributes["+"+e])):c.setAttribute(e,o.elementAttributes[e]);for(var b=1;b<=l;b++)p(b);return m(a=Math.min(parseInt(a),l)),c.addEventListener("mousemove",(function(e){m(0)})),c.addEventListener("click",(function(e){i(0)})),r.addEventListener("blur",(function(e){s()})),r.addEventListener("keydown",(function(e){switch(e.keyCode){case 39:g(a+1);break;case 37:g(a-1);break;case 13:i(a);break;case 27:s()}})),c},progress:function(e,t,i,s,o){var n,r,a=e.getElement(),l=void 0===o.max?a.getElementsByTagName("div")[0].getAttribute("max")||100:o.max,h=void 0===o.min?a.getElementsByTagName("div")[0].getAttribute("min")||0:o.min,d=(l-h)/100,c=e.getValue()||0,u=document.createElement("div"),m=document.createElement("div");function p(){var e=window.getComputedStyle(a,null),t=d*Math.round(m.offsetWidth/((a.clientWidth-parseInt(e.getPropertyValue("padding-left"))-parseInt(e.getPropertyValue("padding-right")))/100))+h;i(t),a.setAttribute("aria-valuenow",t),a.setAttribute("aria-label",c)}if(u.style.position="absolute",u.style.right="0",u.style.top="0",u.style.bottom="0",u.style.width="5px",u.classList.add("tabulator-progress-handle"),m.style.display="inline-block",m.style.position="relative",m.style.height="100%",m.style.backgroundColor="#488CE9",m.style.maxWidth="100%",m.style.minWidth="0%",o.elementAttributes&&"object"==typeof o.elementAttributes)for(let e in o.elementAttributes)"+"==e.charAt(0)?(e=e.slice(1),m.setAttribute(e,m.getAttribute(e)+o.elementAttributes["+"+e])):m.setAttribute(e,o.elementAttributes[e]);return a.style.padding="4px 4px",c=Math.min(parseFloat(c),l),c=Math.max(parseFloat(c),h),c=Math.round((c-h)/d),m.style.width=c+"%",a.setAttribute("aria-valuemin",h),a.setAttribute("aria-valuemax",l),m.appendChild(u),u.addEventListener("mousedown",(function(e){n=e.screenX,r=m.offsetWidth})),u.addEventListener("mouseover",(function(){u.style.cursor="ew-resize"})),a.addEventListener("mousemove",(function(e){n&&(m.style.width=r+e.screenX-n+"px")})),a.addEventListener("mouseup",(function(e){n&&(e.stopPropagation(),e.stopImmediatePropagation(),n=!1,r=!1,p())})),a.addEventListener("keydown",(function(e){switch(e.keyCode){case 39:e.preventDefault(),m.style.width=m.clientWidth+a.clientWidth/100+"px";break;case 37:e.preventDefault(),m.style.width=m.clientWidth-a.clientWidth/100+"px";break;case 9:case 13:p();break;case 27:s()}})),a.addEventListener("blur",(function(){s()})),m},tickCross:function(e,t,i,s,o){var n=e.getValue(),r=document.createElement("input"),a=o.tristate,l=void 0===o.indeterminateValue?null:o.indeterminateValue,h=!1;if(r.setAttribute("type","checkbox"),r.style.marginTop="5px",r.style.boxSizing="border-box",o.elementAttributes&&"object"==typeof o.elementAttributes)for(let e in o.elementAttributes)"+"==e.charAt(0)?(e=e.slice(1),r.setAttribute(e,r.getAttribute(e)+o.elementAttributes["+"+e])):r.setAttribute(e,o.elementAttributes[e]);function d(e){return a?e?h?l:r.checked:r.checked&&!h?(r.checked=!1,r.indeterminate=!0,h=!0,l):(h=!1,r.checked):r.checked}return r.value=n,!a||void 0!==n&&n!==l&&""!==n||(h=!0,r.indeterminate=!0),"firefox"!=this.table.browser&&t((function(){r.focus({preventScroll:!0})})),r.checked=!0===n||"true"===n||"True"===n||1===n,t((function(){r.focus()})),r.addEventListener("change",(function(e){i(d())})),r.addEventListener("blur",(function(e){i(d(!0))})),r.addEventListener("keydown",(function(e){13==e.keyCode&&i(d()),27==e.keyCode&&s()})),r}};class M extends t{constructor(e){super(e),this.currentCell=!1,this.mouseClick=!1,this.recursionBlock=!1,this.invalidEdit=!1,this.editedCells=[],this.editors=M.editors,this.registerColumnOption("editable"),this.registerColumnOption("editor"),this.registerColumnOption("editorParams"),this.registerColumnOption("cellEditing"),this.registerColumnOption("cellEdited"),this.registerColumnOption("cellEditCancelled"),this.registerTableFunction("getEditedCells",this.getEditedCells.bind(this)),this.registerTableFunction("clearCellEdited",this.clearCellEdited.bind(this)),this.registerTableFunction("navigatePrev",this.navigatePrev.bind(this)),this.registerTableFunction("navigateNext",this.navigateNext.bind(this)),this.registerTableFunction("navigateLeft",this.navigateLeft.bind(this)),this.registerTableFunction("navigateRight",this.navigateRight.bind(this)),this.registerTableFunction("navigateUp",this.navigateUp.bind(this)),this.registerTableFunction("navigateDown",this.navigateDown.bind(this)),this.registerComponentFunction("cell","isEdited",this.cellisEdited.bind(this)),this.registerComponentFunction("cell","clearEdited",this.clearEdited.bind(this)),this.registerComponentFunction("cell","edit",this.editCell.bind(this)),this.registerComponentFunction("cell","cancelEdit",this.cellCancelEdit.bind(this)),this.registerComponentFunction("cell","navigatePrev",this.navigatePrev.bind(this)),this.registerComponentFunction("cell","navigateNext",this.navigateNext.bind(this)),this.registerComponentFunction("cell","navigateLeft",this.navigateLeft.bind(this)),this.registerComponentFunction("cell","navigateRight",this.navigateRight.bind(this)),this.registerComponentFunction("cell","navigateUp",this.navigateUp.bind(this)),this.registerComponentFunction("cell","navigateDown",this.navigateDown.bind(this))}initialize(){this.subscribe("cell-init",this.bindEditor.bind(this)),this.subscribe("cell-delete",this.clearEdited.bind(this)),this.subscribe("column-layout",this.initializeColumnCheck.bind(this)),this.subscribe("column-delete",this.columnDeleteCheck.bind(this)),this.subscribe("row-deleting",this.rowDeleteCheck.bind(this)),this.subscribe("data-refeshing",this.cancelEdit.bind(this)),this.subscribe("keybinding-nav-prev",this.navigatePrev.bind(this)),this.subscribe("keybinding-nav-next",this.keybindingNavigateNext.bind(this)),this.subscribe("keybinding-nav-left",this.navigateLeft.bind(this)),this.subscribe("keybinding-nav-right",this.navigateRight.bind(this)),this.subscribe("keybinding-nav-up",this.navigateUp.bind(this)),this.subscribe("keybinding-nav-down",this.navigateDown.bind(this))}keybindingNavigateNext(e){var t=this.currentCell,i=this.options("tabEndNewRow");t&&(this.navigateNext(e)||i&&(t.getElement().firstChild.blur(),(i=!0===i?this.table.addRow({}):"function"==typeof i?this.table.addRow(i(t.row.getComponent())):this.table.addRow(Object.assign({},i))).then((()=>{setTimeout((()=>{nav.next()}))}))))}cellisEdited(e){return!!e.modules.edit&&e.modules.edit.edited}cellCancelEdit(e){e===this.currentCell?this.table.modules.edit.cancelEdit():console.warn("Cancel Editor Error - This cell is not currently being edited ")}clearCellEdited(e){e||(e=this.modules.edit.getEditedCells()),Array.isArray(e)||(e=[e]),e.forEach((e=>{this.modules.edit.clearEdited(e._getSelf())}))}navigatePrev(e){var t,i,s=this.currentCell;if(s){if(e&&e.preventDefault(),t=this.navigateLeft())return!0;if((i=this.table.rowManager.prevDisplayRow(s.row,!0))&&(t=this.findNextEditableCell(i,i.cells.length)))return t.edit(),!0}return!1}navigateNext(e){var t,i,s=this.currentCell;if(s){if(e&&e.preventDefault(),t=this.navigateRight())return!0;if((i=this.table.rowManager.nextDisplayRow(s.row,!0))&&(t=this.findNextEditableCell(i,-1)))return t.edit(),!0}return!1}navigateLeft(e){var t,i,s=this.currentCell;return!!(s&&(e&&e.preventDefault(),t=s.getIndex(),i=this.findPrevEditableCell(s.row,t)))&&(i.edit(),!0)}navigateRight(e){var t,i,s=this.currentCell;return!!(s&&(e&&e.preventDefault(),t=s.getIndex(),i=this.findNextEditableCell(s.row,t)))&&(i.edit(),!0)}navigateUp(e){var t,i,s=this.currentCell;return!!(s&&(e&&e.preventDefault(),t=s.getIndex(),i=this.table.rowManager.prevDisplayRow(s.row,!0)))&&(i.cells[t].edit(),!0)}navigateDown(e){var t,i,s=this.currentCell;return!!(s&&(e&&e.preventDefault(),t=s.getIndex(),i=this.table.rowManager.nextDisplayRow(s.row,!0)))&&(i.cells[t].edit(),!0)}findNextEditableCell(e,t){var i=!1;if(t0)for(var s=t-1;s>=0;s--){let t=e.cells[s],o=!0;if(t.column.modules.edit&&Helpers.elVisible(t.getElement())&&("function"==typeof t.column.modules.edit.check&&(o=t.column.modules.edit.check(t.getComponent())),o)){i=t;break}}return i}initializeColumnCheck(e){void 0!==e.definition.editor&&this.initializeColumn(e)}columnDeleteCheck(e){this.currentCell&&this.currentCell.column===e&&this.cancelEdit()}rowDeleteCheck(e){this.currentCell&&this.currentCell.row===e&&this.cancelEdit()}initializeColumn(e){var t={editor:!1,blocked:!1,check:e.definition.editable,params:e.definition.editorParams||{}};switch(typeof e.definition.editor){case"string":this.editors[e.definition.editor]?t.editor=this.editors[e.definition.editor]:console.warn("Editor Error - No such editor found: ",e.definition.editor);break;case"function":t.editor=e.definition.editor;break;case"boolean":!0===e.definition.editor&&("function"!=typeof e.definition.formatter?this.editors[e.definition.formatter]?t.editor=this.editors[e.definition.formatter]:t.editor=this.editors.input:console.warn("Editor Error - Cannot auto lookup editor for a custom formatter: ",e.definition.formatter))}t.editor&&(e.modules.edit=t)}getCurrentCell(){return!!this.currentCell&&this.currentCell.getComponent()}clearEditor(e){var t,i=this.currentCell;if(this.invalidEdit=!1,i){for(this.currentCell=!1,t=i.getElement(),e?i.validate():t.classList.remove("tabulator-validation-fail"),t.classList.remove("tabulator-editing");t.firstChild;)t.removeChild(t.firstChild);i.row.getElement().classList.remove("tabulator-row-editing")}}cancelEdit(){if(this.currentCell){var e=this.currentCell,t=this.currentCell.getComponent();this.clearEditor(!0),e.setValueActual(e.getValue()),e.cellRendered(),("textarea"==e.column.definition.editor||e.column.definition.variableHeight)&&e.row.normalizeHeight(!0),e.column.definition.cellEditCancelled&&e.column.definition.cellEditCancelled.call(this.table,t),this.dispatchExternal("cellEditCancelled",t)}}bindEditor(e){if(e.column.modules.edit){var t=this,i=e.getElement(!0);i.setAttribute("tabindex",0),i.addEventListener("click",(function(e){i.classList.contains("tabulator-editing")||i.focus({preventScroll:!0})})),i.addEventListener("mousedown",(function(e){2===e.button?e.preventDefault():t.mouseClick=!0})),i.addEventListener("focus",(function(i){t.recursionBlock||t.edit(e,i,!1)}))}}focusCellNoEvent(e,t){this.recursionBlock=!0,t&&"ie"===this.table.browser||e.getElement().focus({preventScroll:!0}),this.recursionBlock=!1}editCell(e,t){this.focusCellNoEvent(e),this.edit(e,!1,t)}focusScrollAdjust(e){if("virtual"==this.table.rowManager.getRenderMode()){var t=this.table.rowManager.element.scrollTop,i=this.table.rowManager.element.clientHeight+this.table.rowManager.element.scrollTop,s=e.row.getElement();s.offsetTop;s.offsetTopi&&(this.table.rowManager.element.scrollTop+=s.offsetTop+s.offsetHeight-i);var o=this.table.rowManager.element.scrollLeft,n=this.table.rowManager.element.clientWidth+this.table.rowManager.element.scrollLeft,r=e.getElement();r.offsetLeft;this.table.modExists("frozenColumns")&&(o+=parseInt(this.table.modules.frozenColumns.leftMargin),n-=parseInt(this.table.modules.frozenColumns.rightMargin)),"virtual"===this.table.options.renderHorizontal&&(o-=parseInt(this.table.columnManager.renderer.vDomPadLeft),n-=parseInt(this.table.columnManager.renderer.vDomPadLeft)),r.offsetLeftn&&(this.table.rowManager.element.scrollLeft+=r.offsetLeft+r.offsetWidth-n)}}edit(e,t,i){var s,o,n,r=this,a=!0,l=function(){},h=e.getElement();if(!this.currentCell){if(e.column.modules.edit.blocked)return this.mouseClick=!1,h.blur(),!1;switch(t&&t.stopPropagation(),typeof e.column.modules.edit.check){case"function":a=e.column.modules.edit.check(e.getComponent());break;case"boolean":a=e.column.modules.edit.check}if(a||i){if(r.cancelEdit(),r.currentCell=e,this.focusScrollAdjust(e),o=e.getComponent(),this.mouseClick&&(this.mouseClick=!1,e.column.definition.cellClick&&e.column.definition.cellClick.call(this.table,t,o)),e.column.definition.cellEditing&&e.column.definition.cellEditing.call(this.table,o),this.dispatchExternal("cellEditing",o),n="function"==typeof e.column.modules.edit.params?e.column.modules.edit.params(o):e.column.modules.edit.params,!1===(s=e.column.modules.edit.editor.call(r,o,(function(e){l=e}),(function(t){if(r.currentCell===e){var i=!0;return e.column.modules.validate&&r.table.modExists("validate")&&"manual"!=r.table.options.validationMode&&(i=r.table.modules.validate.validate(e.column.modules.validate,e,t)),!0===i||"highlight"===r.table.options.validationMode?(r.clearEditor(),e.modules.edit||(e.modules.edit={}),e.modules.edit.edited=!0,-1==r.editedCells.indexOf(e)&&r.editedCells.push(e),e.setValue(t,!0),r.table.options.dataTree&&r.table.modExists("dataTree")&&r.table.modules.dataTree.checkForRestyle(e),!0===i||(h.classList.add("tabulator-validation-fail"),r.table.externalEvents.dispatch("validationFailed",e.getComponent(),t,i),!1)):(r.invalidEdit=!0,h.classList.add("tabulator-validation-fail"),r.focusCellNoEvent(e,!0),l(),r.table.externalEvents.dispatch("validationFailed",e.getComponent(),t,i),!1)}}),(function(){r.currentCell===e&&(r.cancelEdit(),r.table.options.dataTree&&r.table.modExists("dataTree")&&r.table.modules.dataTree.checkForRestyle(e))}),n)))return h.blur(),!1;if(!(s instanceof Node))return console.warn("Edit Error - Editor should return an instance of Node, the editor returned:",s),h.blur(),!1;for(h.classList.add("tabulator-editing"),e.row.getElement().classList.add("tabulator-row-editing");h.firstChild;)h.removeChild(h.firstChild);h.appendChild(s),l();for(var d=h.children,c=0;c{e.push(t.getComponent())})),e}clearEdited(e){var t;e.modules.edit&&e.modules.edit.edited&&(e.modules.edit.edited=!1,e.modules.validate&&(e.modules.validate.invalid=!1)),(t=this.editedCells.indexOf(e))>-1&&this.editedCells.splice(t,1)}}M.moduleName="edit",M.editors=x;class T{constructor(e,t,i,s){this.type=e,this.columns=t,this.component=i||!1,this.indent=s||0}}class L{constructor(e,t,i,s,o){this.value=e,this.component=t||!1,this.width=i,this.height=s,this.depth=o}}class D extends t{constructor(e){super(e),this.config={},this.cloneTableStyle=!0,this.colVisProp="",this.registerTableOption("htmlOutputConfig",!1),this.registerColumnOption("htmlOutput"),this.registerColumnOption("titleHtmlOutput")}initialize(){this.registerTableFunction("getHtml",this.getHtml.bind(this))}generateExportList(e,t,i,s){this.cloneTableStyle=t,this.config=e||{},this.colVisProp=s;var o=!1!==this.config.columnHeaders?this.headersToExportRows(this.generateColumnGroupHeaders()):[],n=this.bodyToExportRows(this.rowLookup(i));return o.concat(n)}genereateTable(e,t,i,s){var o=this.generateExportList(e,t,i,s);return this.genereateTableElement(o)}rowLookup(e){var t=[];if("function"==typeof e)e.call(this.table).forEach((e=>{(e=this.table.rowManager.findRow(e))&&t.push(e)}));else switch(e){case!0:case"visible":t=this.table.rowManager.getVisibleRows(!0);break;case"all":t=this.table.rowManager.rows;break;case"selected":t=this.table.modules.selectRow.selectedRows;break;case"active":default:t=this.table.options.pagination?this.table.rowManager.getDisplayRows(this.table.rowManager.displayRows.length-2):this.table.rowManager.getDisplayRows()}return Object.assign([],t)}generateColumnGroupHeaders(){var e=[];return(!1!==this.config.columnGroups?this.table.columnManager.columns:this.table.columnManager.columnsByIndex).forEach((t=>{var i=this.processColumnGroup(t);i&&e.push(i)})),e}processColumnGroup(e){var t=e.columns,i=0,s={title:e.definition["title"+(this.colVisProp.charAt(0).toUpperCase()+this.colVisProp.slice(1))]||e.definition.title,column:e,depth:1};if(t.length){if(s.subGroups=[],s.width=0,t.forEach((e=>{var t=this.processColumnGroup(e);t&&(s.width+=t.width,s.subGroups.push(t),t.depth>i&&(i=t.depth))})),s.depth+=i,!s.width)return!1}else{if(!this.columnVisCheck(e))return!1;s.width=1}return s}columnVisCheck(e){return!1!==e.definition[this.colVisProp]&&(e.visible||!e.visible&&e.definition[this.colVisProp])}headersToExportRows(e){var t=[],i=0,s=[];function o(e,s){var n=i-s;if(void 0===t[s]&&(t[s]=[]),e.height=e.subGroups?1:n-e.depth+1,t[s].push(e),e.height>1)for(let i=1;i1)for(let i=1;ii&&(i=e.depth)})),e.forEach((function(e){o(e,0)})),t.forEach((e=>{var t=[];e.forEach((e=>{e?t.push(new L(e.title,e.column.getComponent(),e.width,e.height,e.depth)):t.push(null)})),s.push(new T("header",t))})),s}bodyToExportRows(e){var t=[],i=[];return this.table.columnManager.columnsByIndex.forEach((e=>{this.columnVisCheck(e)&&t.push(e.getComponent())})),!1!==this.config.columnCalcs&&this.table.modExists("columnCalcs")&&(this.table.modules.columnCalcs.topInitialized&&e.unshift(this.table.modules.columnCalcs.topRow),this.table.modules.columnCalcs.botInitialized&&e.push(this.table.modules.columnCalcs.botRow)),(e=e.filter((e=>{switch(e.type){case"group":return!1!==this.config.rowGroups;case"calc":return!1!==this.config.columnCalcs;case"row":return!(this.table.options.dataTree&&!1===this.config.dataTree&&e.modules.dataTree.parent)}return!0}))).forEach(((e,s)=>{var o=e.getData(this.colVisProp),n=[],r=0;switch(e.type){case"group":r=e.level,n.push(new L(e.key,e.getComponent(),t.length,1));break;case"calc":case"row":t.forEach((e=>{n.push(new L(e._column.getFieldValue(o),e,1,1))})),this.table.options.dataTree&&!1!==this.config.dataTree&&(r=e.modules.dataTree.index)}i.push(new T(e.type,n,e.getComponent(),r))})),i}genereateTableElement(e){var t=document.createElement("table"),i=document.createElement("thead"),s=document.createElement("tbody"),o=this.lookupTableStyles(),n=this.table.options["rowFormatter"+(this.colVisProp.charAt(0).toUpperCase()+this.colVisProp.slice(1))],r={};return r.rowFormatter=null!==n?n:this.table.options.rowFormatter,this.table.options.dataTree&&!1!==this.config.dataTree&&this.table.modExists("columnCalcs")&&(r.treeElementField=this.table.modules.dataTree.elementField),r.groupHeader=this.table.options["groupHeader"+(this.colVisProp.charAt(0).toUpperCase()+this.colVisProp.slice(1))],r.groupHeader&&!Array.isArray(r.groupHeader)&&(r.groupHeader=[r.groupHeader]),t.classList.add("tabulator-print-table"),this.mapElementStyles(this.table.columnManager.getHeadersElement(),i,["border-top","border-left","border-right","border-bottom","background-color","color","font-weight","font-family","font-size"]),e.length>1e3&&console.warn("It may take a long time to render an HTML table with more than 1000 rows"),e.forEach(((e,t)=>{switch(e.type){case"header":i.appendChild(this.genereateHeaderElement(e,r,o));break;case"group":s.appendChild(this.genereateGroupElement(e,r,o));break;case"calc":s.appendChild(this.genereateCalcElement(e,r,o));break;case"row":let n=this.genereateRowElement(e,r,o);this.mapElementStyles(t%2&&o.evenRow?o.evenRow:o.oddRow,n,["border-top","border-left","border-right","border-bottom","color","font-weight","font-family","font-size","background-color"]),s.appendChild(n)}})),i.innerHTML&&t.appendChild(i),t.appendChild(s),this.mapElementStyles(this.table.element,t,["border-top","border-left","border-right","border-bottom"]),t}lookupTableStyles(){var e={};return this.cloneTableStyle&&window.getComputedStyle&&(e.oddRow=this.table.element.querySelector(".tabulator-row-odd:not(.tabulator-group):not(.tabulator-calcs)"),e.evenRow=this.table.element.querySelector(".tabulator-row-even:not(.tabulator-group):not(.tabulator-calcs)"),e.calcRow=this.table.element.querySelector(".tabulator-row.tabulator-calcs"),e.firstRow=this.table.element.querySelector(".tabulator-row:not(.tabulator-group):not(.tabulator-calcs)"),e.firstGroup=this.table.element.getElementsByClassName("tabulator-group")[0],e.firstRow&&(e.styleCells=e.firstRow.getElementsByClassName("tabulator-cell"),e.firstCell=e.styleCells[0],e.lastCell=e.styleCells[e.styleCells.length-1])),e}genereateHeaderElement(e,t,i){var s=document.createElement("tr");return e.columns.forEach((e=>{if(e){var t=document.createElement("th"),i=e.component._column.definition.cssClass?e.component._column.definition.cssClass.split(" "):[];t.colSpan=e.width,t.rowSpan=e.height,t.innerHTML=e.value,this.cloneTableStyle&&(t.style.boxSizing="border-box"),i.forEach((function(e){t.classList.add(e)})),this.mapElementStyles(e.component.getElement(),t,["text-align","border-top","border-left","border-right","border-bottom","background-color","color","font-weight","font-family","font-size"]),this.mapElementStyles(e.component._column.contentElement,t,["padding-top","padding-left","padding-right","padding-bottom"]),e.component._column.visible?this.mapElementStyles(e.component.getElement(),t,["width"]):e.component._column.definition.width&&(t.style.width=e.component._column.definition.width+"px"),e.component._column.parent&&this.mapElementStyles(e.component._column.parent.groupElement,t,["border-top"]),s.appendChild(t)}})),s}genereateGroupElement(e,t,i){var s=document.createElement("tr"),o=document.createElement("td"),n=e.columns[0];return s.classList.add("tabulator-print-table-row"),t.groupHeader&&t.groupHeader[e.indent]?n.value=t.groupHeader[e.indent](n.value,e.component._group.getRowCount(),e.component._group.getData(),e.component):!1===t.groupHeader?n.value=n.value:n.value=e.component._group.generator(n.value,e.component._group.getRowCount(),e.component._group.getData(),e.component),o.colSpan=n.width,o.innerHTML=n.value,s.classList.add("tabulator-print-table-group"),s.classList.add("tabulator-group-level-"+e.indent),n.component.isVisible()&&s.classList.add("tabulator-group-visible"),this.mapElementStyles(i.firstGroup,s,["border-top","border-left","border-right","border-bottom","color","font-weight","font-family","font-size","background-color"]),this.mapElementStyles(i.firstGroup,o,["padding-top","padding-left","padding-right","padding-bottom"]),s.appendChild(o),s}genereateCalcElement(e,t,i){var s=this.genereateRowElement(e,t,i);return s.classList.add("tabulator-print-table-calcs"),this.mapElementStyles(i.calcRow,s,["border-top","border-left","border-right","border-bottom","color","font-weight","font-family","font-size","background-color"]),s}genereateRowElement(e,t,s){var o=document.createElement("tr");return o.classList.add("tabulator-print-table-row"),e.columns.forEach((n=>{if(n){var r=document.createElement("td"),a=n.component._column,l=n.value,h={modules:{},getValue:function(){return l},getField:function(){return a.definition.field},getElement:function(){return r},getColumn:function(){return a.getComponent()},getData:function(){return e.component.getData()},getRow:function(){return e.component},getComponent:function(){return h},column:a};if((a.definition.cssClass?a.definition.cssClass.split(" "):[]).forEach((function(e){r.classList.add(e)})),this.table.modExists("format")&&!1!==this.config.formatCells)l=this.table.modules.format.formatExportValue(h,this.colVisProp);else switch(typeof l){case"object":l=JSON.stringify(l);break;case"undefined":case"null":l="";break;default:l=l}l instanceof Node?r.appendChild(l):r.innerHTML=l,s.firstCell&&(this.mapElementStyles(s.firstCell,r,["padding-top","padding-left","padding-right","padding-bottom","border-top","border-left","border-right","border-bottom","color","font-weight","font-family","font-size"]),a.definition.align&&(r.style.textAlign=a.definition.align)),this.table.options.dataTree&&!1!==this.config.dataTree&&(t.treeElementField&&t.treeElementField==a.field||!t.treeElementField&&0==i)&&(e.component._row.modules.dataTree.controlEl&&r.insertBefore(e.component._row.modules.dataTree.controlEl.cloneNode(!0),r.firstChild),e.component._row.modules.dataTree.branchEl&&r.insertBefore(e.component._row.modules.dataTree.branchEl.cloneNode(!0),r.firstChild)),o.appendChild(r),h.modules.format&&h.modules.format.renderedCallback&&h.modules.format.renderedCallback(),t.rowFormatter&&!1!==this.config.formatCells&&t.rowFormatter(e.component)}})),o}genereateHTMLTable(e){var t=document.createElement("div");return t.appendChild(this.genereateTableElement(e)),t.innerHTML}getHtml(e,t,i,s){var o=this.generateExportList(i||this.table.options.htmlOutputConfig,t,e,s||"htmlOutput");return this.genereateHTMLTable(o)}mapElementStyles(e,t,i){if(this.cloneTableStyle&&e&&t){var s={"background-color":"backgroundColor",color:"fontColor",width:"width","font-weight":"fontWeight","font-family":"fontFamily","font-size":"fontSize","text-align":"textAlign","border-top":"borderTop","border-left":"borderLeft","border-right":"borderRight","border-bottom":"borderBottom","padding-top":"paddingTop","padding-left":"paddingLeft","padding-right":"paddingRight","padding-bottom":"paddingBottom"};if(window.getComputedStyle){var o=window.getComputedStyle(e);i.forEach((function(e){t.style[s[e]]=o.getPropertyValue(e)}))}}}}D.moduleName="export";var k={"=":function(e,t,i,s){return t==e},"<":function(e,t,i,s){return t":function(e,t,i,s){return t>e},">=":function(e,t,i,s){return t>=e},"!=":function(e,t,i,s){return t!=e},regex:function(e,t,i,s){return"string"==typeof e&&(e=new RegExp(e)),e.test(t)},like:function(e,t,i,s){return null==e?t===e:null!=t&&String(t).toLowerCase().indexOf(e.toLowerCase())>-1},keywords:function(e,t,i,s){var o=e.toLowerCase().split(void 0===s.separator?" ":s.separator),n=String(null==t?"":t).toLowerCase(),r=[];return o.forEach((e=>{n.includes(e)&&r.push(!0)})),s.matchAll?r.length===o.length:!!r.length},starts:function(e,t,i,s){return null==e?t===e:null!=t&&String(t).toLowerCase().startsWith(e.toLowerCase())},ends:function(e,t,i,s){return null==e?t===e:null!=t&&String(t).toLowerCase().endsWith(e.toLowerCase())},in:function(e,t,i,s){return Array.isArray(e)?!e.length||e.indexOf(t)>-1:(console.warn("Filter Error - filter value is not an array:",e),!1)}};class S extends t{constructor(e){super(e),this.filterList=[],this.headerFilters={},this.headerFilterColumns=[],this.prevHeaderFilterChangeCheck="",this.prevHeaderFilterChangeCheck="{}",this.changed=!1,this.registerTableOption("filterMode","local"),this.registerTableOption("initialFilter",!1),this.registerTableOption("initialHeaderFilter",!1),this.registerTableOption("headerFilterLiveFilterDelay",300),this.registerColumnOption("headerFilter"),this.registerColumnOption("headerFilterPlaceholder"),this.registerColumnOption("headerFilterParams"),this.registerColumnOption("headerFilterEmptyCheck"),this.registerColumnOption("headerFilterFunc"),this.registerColumnOption("headerFilterFuncParams"),this.registerColumnOption("headerFilterLiveFilter"),this.registerTableFunction("searchRows",this.searchRows.bind(this)),this.registerTableFunction("searchData",this.searchData.bind(this)),this.registerTableFunction("setFilter",this.userSetFilter.bind(this)),this.registerTableFunction("refreshFilter",this.userRefreshFilter.bind(this)),this.registerTableFunction("addFilter",this.userAddFilter.bind(this)),this.registerTableFunction("getFilters",this.getFilters.bind(this)),this.registerTableFunction("setHeaderFilterFocus",this.userSetHeaderFilterFocus.bind(this)),this.registerTableFunction("getHeaderFilterValue",this.userGetHeaderFilterValue.bind(this)),this.registerTableFunction("setHeaderFilterValue",this.userSetHeaderFilterValue.bind(this)),this.registerTableFunction("getHeaderFilters",this.getHeaderFilters.bind(this)),this.registerTableFunction("removeFilter",this.userRemoveFilter.bind(this)),this.registerTableFunction("clearFilter",this.userClearFilter.bind(this)),this.registerTableFunction("clearHeaderFilter",this.userClearHeaderFilter.bind(this)),this.registerComponentFunction("column","headerFilterFocus",this.setHeaderFilterFocus.bind(this)),this.registerComponentFunction("column","reloadHeaderFilter",this.reloadHeaderFilter.bind(this)),this.registerComponentFunction("column","getHeaderFilterValue",this.getHeaderFilterValue.bind(this)),this.registerComponentFunction("column","setHeaderFilterValue",this.setHeaderFilterValue.bind(this))}initialize(){this.subscribe("column-init",this.initializeColumnHeaderFilter.bind(this)),this.subscribe("column-width-fit-before",this.hideHeaderFilterElements.bind(this)),this.subscribe("column-width-fit-after",this.showHeaderFilterElements.bind(this)),this.subscribe("table-built",this.tableBuilt.bind(this)),"remote"===this.table.options.filterMode&&this.subscribe("data-params",this.remoteFilterParams.bind(this)),this.registerDataHandler(this.filter.bind(this),10)}tableBuilt(){this.table.options.initialFilter&&this.setFilter(this.table.options.initialFilter),this.table.options.initialHeaderFilter&&this.table.options.initialHeaderFilter.forEach((e=>{var t=this.table.columnManager.findColumn(e.field);if(!t)return console.warn("Column Filter Error - No matching column found:",e.field),!1;this.setHeaderFilterValue(t,e.value)}))}remoteFilterParams(e,t,i,s){return s.filter=this.getFilters(!0,!0),s}userSetFilter(e,t,i,s){this.setFilter(e,t,i,s),this.refreshFilter()}userRefreshFilter(){this.refreshFilter()}userAddFilter(e,t,i,s){this.addFilter(e,t,i,s),this.refreshFilter()}userSetHeaderFilterFocus(e){var t=this.table.columnManager.findColumn(e);if(!t)return console.warn("Column Filter Focus Error - No matching column found:",e),!1;this.setHeaderFilterFocus(t)}userGetHeaderFilterValue(e){var t=this.table.columnManager.findColumn(e);if(t)return this.getHeaderFilterValue(t);console.warn("Column Filter Error - No matching column found:",e)}userSetHeaderFilterValue(e,t){var i=this.table.columnManager.findColumn(e);if(!i)return console.warn("Column Filter Error - No matching column found:",e),!1;this.setHeaderFilterValue(i,t)}userRemoveFilter(e,t,i){this.removeFilter(e,t,i),this.refreshFilter()}userClearFilter(e){this.clearFilter(e),this.refreshFilter()}userClearHeaderFilter(){this.clearHeaderFilter(),this.refreshFilter()}searchRows(e,t,i){return this.search("rows",e,t,i)}searchData(e,t,i){return this.search("data",e,t,i)}initializeColumnHeaderFilter(e){var t=e.definition;t.headerFilter&&(void 0!==t.headerFilterPlaceholder&&t.field&&this.module("localize").setHeaderFilterColumnPlaceholder(t.field,t.headerFilterPlaceholder),this.initializeColumn(e))}initializeColumn(e,t){var i=this,s=e.getField();e.modules.filter={success:function(t){var o,n="input"==e.modules.filter.tagType&&"text"==e.modules.filter.attrType||"textarea"==e.modules.filter.tagType?"partial":"match",r="",a="";if(void 0===e.modules.filter.prevSuccess||e.modules.filter.prevSuccess!==t){if(e.modules.filter.prevSuccess=t,e.modules.filter.emptyFunc(t))delete i.headerFilters[s];else{switch(e.modules.filter.value=t,typeof e.definition.headerFilterFunc){case"string":S.filters[e.definition.headerFilterFunc]?(r=e.definition.headerFilterFunc,o=function(i){var s=e.definition.headerFilterFuncParams||{},o=e.getFieldValue(i);return s="function"==typeof s?s(t,o,i):s,S.filters[e.definition.headerFilterFunc](t,o,i,s)}):console.warn("Header Filter Error - Matching filter function not found: ",e.definition.headerFilterFunc);break;case"function":r=o=function(i){var s=e.definition.headerFilterFuncParams||{},o=e.getFieldValue(i);return s="function"==typeof s?s(t,o,i):s,e.definition.headerFilterFunc(t,o,i,s)}}if(!o)switch(n){case"partial":o=function(i){var s=e.getFieldValue(i);return null!=s&&String(s).toLowerCase().indexOf(String(t).toLowerCase())>-1},r="like";break;default:o=function(i){return e.getFieldValue(i)==t},r="="}i.headerFilters[s]={value:t,func:o,type:r,params:{}}}a=JSON.stringify(i.headerFilters),i.prevHeaderFilterChangeCheck!==a&&(i.prevHeaderFilterChangeCheck=a,i.trackChanges(),i.refreshFilter())}return!0},attrType:!1,tagType:!1,emptyFunc:!1},this.generateHeaderFilterElement(e)}generateHeaderFilterElement(e,t,i){var s,o,n,r,a,l,h,d=this,c=e.modules.filter.success,u=e.getField();if(e.modules.filter.headerElement&&e.modules.filter.headerElement.parentNode&&e.contentElement.removeChild(e.modules.filter.headerElement.parentNode),u){switch(e.modules.filter.emptyFunc=e.definition.headerFilterEmptyCheck||function(e){return!e&&"0"!==e&&0!==e},(s=document.createElement("div")).classList.add("tabulator-header-filter"),typeof e.definition.headerFilter){case"string":d.table.modules.edit.editors[e.definition.headerFilter]?(o=d.table.modules.edit.editors[e.definition.headerFilter],"tick"!==e.definition.headerFilter&&"tickCross"!==e.definition.headerFilter||e.definition.headerFilterEmptyCheck||(e.modules.filter.emptyFunc=function(e){return!0!==e&&!1!==e})):console.warn("Filter Error - Cannot build header filter, No such editor found: ",e.definition.editor);break;case"function":o=e.definition.headerFilter;break;case"boolean":e.modules.edit&&e.modules.edit.editor?o=e.modules.edit.editor:e.definition.formatter&&d.table.modules.edit.editors[e.definition.formatter]?(o=d.table.modules.edit.editors[e.definition.formatter],"tick"!==e.definition.formatter&&"tickCross"!==e.definition.formatter||e.definition.headerFilterEmptyCheck||(e.modules.filter.emptyFunc=function(e){return!0!==e&&!1!==e})):o=d.table.modules.edit.editors.input}if(o){if(r={getValue:function(){return void 0!==t?t:""},getField:function(){return e.definition.field},getElement:function(){return s},getColumn:function(){return e.getComponent()},getRow:function(){return{normalizeHeight:function(){}}}},h="function"==typeof(h=e.definition.headerFilterParams||{})?h.call(d.table):h,!(n=o.call(this.table.modules.edit,r,(function(){}),c,(function(){}),h)))return void console.warn("Filter Error - Cannot add filter to "+u+" column, editor returned a value of false");if(!(n instanceof Node))return void console.warn("Filter Error - Cannot add filter to "+u+" column, editor should return an instance of Node, the editor returned:",n);u?d.langBind("headerFilters|columns|"+e.definition.field,(function(e){n.setAttribute("placeholder",void 0!==e&&e?e:d.langText("headerFilters|default"))})):d.langBind("headerFilters|default",(function(e){n.setAttribute("placeholder",e)})),n.addEventListener("click",(function(e){e.stopPropagation(),n.focus()})),n.addEventListener("focus",(e=>{var t=this.table.columnManager.element.scrollLeft;t!==this.table.rowManager.element.scrollLeft&&(this.table.rowManager.scrollHorizontal(t),this.table.columnManager.scrollHorizontal(t))})),a=!1,l=function(e){a&&clearTimeout(a),a=setTimeout((function(){c(n.value)}),d.table.options.headerFilterLiveFilterDelay)},e.modules.filter.headerElement=n,e.modules.filter.attrType=n.hasAttribute("type")?n.getAttribute("type").toLowerCase():"",e.modules.filter.tagType=n.tagName.toLowerCase(),!1!==e.definition.headerFilterLiveFilter&&("autocomplete"!==e.definition.headerFilter&&"tickCross"!==e.definition.headerFilter&&("autocomplete"!==e.definition.editor&&"tickCross"!==e.definition.editor||!0!==e.definition.headerFilter)&&(n.addEventListener("keyup",l),n.addEventListener("search",l),"number"==e.modules.filter.attrType&&n.addEventListener("change",(function(e){c(n.value)})),"text"==e.modules.filter.attrType&&"ie"!==this.table.browser&&n.setAttribute("type","search")),"input"!=e.modules.filter.tagType&&"select"!=e.modules.filter.tagType&&"textarea"!=e.modules.filter.tagType||n.addEventListener("mousedown",(function(e){e.stopPropagation()}))),s.appendChild(n),e.contentElement.appendChild(s),i||d.headerFilterColumns.push(e)}}else console.warn("Filter Error - Cannot add header filter, column has no field set:",e.definition.title)}hideHeaderFilterElements(){this.headerFilterColumns.forEach((function(e){e.modules.filter&&e.modules.filter.headerElement&&(e.modules.filter.headerElement.style.display="none")}))}showHeaderFilterElements(){this.headerFilterColumns.forEach((function(e){e.modules.filter&&e.modules.filter.headerElement&&(e.modules.filter.headerElement.style.display="")}))}setHeaderFilterFocus(e){e.modules.filter&&e.modules.filter.headerElement?e.modules.filter.headerElement.focus():console.warn("Column Filter Focus Error - No header filter set on column:",e.getField())}getHeaderFilterValue(e){if(e.modules.filter&&e.modules.filter.headerElement)return e.modules.filter.headerElement.value;console.warn("Column Filter Error - No header filter set on column:",e.getField())}setHeaderFilterValue(e,t){e&&(e.modules.filter&&e.modules.filter.headerElement?(this.generateHeaderFilterElement(e,t,!0),e.modules.filter.success(t)):console.warn("Column Filter Error - No header filter set on column:",e.getField()))}reloadHeaderFilter(e){e&&(e.modules.filter&&e.modules.filter.headerElement?this.generateHeaderFilterElement(e,e.modules.filter.value,!0):console.warn("Column Filter Error - No header filter set on column:",e.getField()))}refreshFilter(){"remote"===this.table.options.filterMode?this.reloadData():this.refreshData()}trackChanges(){this.changed=!0,this.dispatch("filter-changed")}hasChanged(){var e=this.changed;return this.changed=!1,e}setFilter(e,t,i,s){this.filterList=[],Array.isArray(e)||(e=[{field:e,type:t,value:i,params:s}]),this.addFilter(e)}addFilter(e,t,i,s){Array.isArray(e)||(e=[{field:e,type:t,value:i,params:s}]),e.forEach((e=>{(e=this.findFilter(e))&&(this.filterList.push(e),this.changed=!0)}))}findFilter(e){var t;if(Array.isArray(e))return this.findSubFilters(e);var i=!1;return"function"==typeof e.field?i=function(t){return e.field(t,e.type||{})}:S.filters[e.type]?i=(t=this.table.columnManager.getColumnByField(e.field))?function(i){return S.filters[e.type](e.value,t.getFieldValue(i),i,e.params||{})}:function(t){return S.filters[e.type](e.value,t[e.field],t,e.params||{})}:console.warn("Filter Error - No such filter type found, ignoring: ",e.type),e.func=i,!!e.func&&e}findSubFilters(e){var t=[];return e.forEach((e=>{(e=this.findFilter(e))&&t.push(e)})),!!t.length&&t}getFilters(e,t){var i=[];return e&&(i=this.getHeaderFilters()),t&&i.forEach((function(e){"function"==typeof e.type&&(e.type="function")})),i=i.concat(this.filtersToArray(this.filterList,t))}filtersToArray(e,t){var i=[];return e.forEach((e=>{var s;Array.isArray(e)?i.push(this.filtersToArray(e,t)):(s={field:e.field,type:e.type,value:e.value},t&&"function"==typeof s.type&&(s.type="function"),i.push(s))})),i}getHeaderFilters(){var e=[];for(var t in this.headerFilters)e.push({field:t,type:this.headerFilters[t].type,value:this.headerFilters[t].value});return e}removeFilter(e,t,i){Array.isArray(e)||(e=[{field:e,type:t,value:i}]),e.forEach((e=>{var t=-1;(t="object"==typeof e.field?this.filterList.findIndex((t=>e===t)):this.filterList.findIndex((t=>e.field===t.field&&e.type===t.type&&e.value===t.value)))>-1?this.filterList.splice(t,1):console.warn("Filter Error - No matching filter type found, ignoring: ",e.type)})),this.trackChanges()}clearFilter(e){this.filterList=[],e&&this.clearHeaderFilter(),this.trackChanges()}clearHeaderFilter(){this.headerFilters={},this.prevHeaderFilterChangeCheck="{}",this.headerFilterColumns.forEach((e=>{void 0!==e.modules.filter.value&&delete e.modules.filter.value,e.modules.filter.prevSuccess=void 0,this.reloadHeaderFilter(e)})),this.trackChanges()}search(e,t,i,s){var o=[],n=[];return Array.isArray(t)||(t=[{field:t,type:i,value:s}]),t.forEach((e=>{(e=this.findFilter(e))&&n.push(e)})),this.table.rowManager.rows.forEach((t=>{var i=!0;n.forEach((e=>{this.filterRecurse(e,t.getData())||(i=!1)})),i&&o.push("data"===e?t.getData("data"):t.getComponent())})),o}filter(e,t){var i=[],s=[];return this.subscribedExternal("dataFiltering")&&this.dispatchExternal("dataFiltering",this.getFilters()),"remote"!==this.table.options.filterMode&&(this.filterList.length||Object.keys(this.headerFilters).length)?e.forEach((e=>{this.filterRow(e)&&i.push(e)})):i=e.slice(0),this.subscribedExternal("dataFiltered")&&(i.forEach((e=>{s.push(e.getComponent())})),this.dispatchExternal("dataFiltered",this.getFilters(),s)),i}filterRow(e,t){var i=!0,s=e.getData();for(var o in this.filterList.forEach((e=>{this.filterRecurse(e,s)||(i=!1)})),this.headerFilters)this.headerFilters[o].func(s)||(i=!1);return i}filterRecurse(e,t){var i=!1;return Array.isArray(e)?e.forEach((e=>{this.filterRecurse(e,t)&&(i=!0)})):i=e.func(t),i}}S.moduleName="filter",S.filters=k;var F={plaintext:function(e,t,i){return this.emptyToSpace(this.sanitizeHTML(e.getValue()))},html:function(e,t,i){return e.getValue()},textarea:function(e,t,i){return e.getElement().style.whiteSpace="pre-wrap",this.emptyToSpace(this.sanitizeHTML(e.getValue()))},money:function(e,t,i){var s,o,n,r,a=parseFloat(e.getValue()),l=t.decimal||".",h=t.thousand||",",d=t.symbol||"",c=!!t.symbolAfter,u=void 0!==t.precision?t.precision:2;if(isNaN(a))return this.emptyToSpace(this.sanitizeHTML(e.getValue()));for(s=!1!==u?a.toFixed(u):a,o=(s=String(s).split("."))[0],n=s.length>1?l+s[1]:"",r=/(\d+)(\d{3})/;r.test(o);)o=o.replace(r,"$1"+h+"$2");return c?o+n+d:d+o+n},link:function(e,t,i){var s=e.getValue(),o=t.urlPrefix||"",n=t.download,r=s,a=document.createElement("a");if(t.labelField&&(r=e.getData()[t.labelField]),t.label)switch(typeof t.label){case"string":r=t.label;break;case"function":r=t.label(e)}if(r){if(t.urlField&&(s=e.getData()[t.urlField]),t.url)switch(typeof t.url){case"string":s=t.url;break;case"function":s=t.url(e)}return a.setAttribute("href",o+s),t.target&&a.setAttribute("target",t.target),t.download&&(n="function"==typeof n?n(e):!0===n?"":n,a.setAttribute("download",n)),a.innerHTML=this.emptyToSpace(this.sanitizeHTML(r)),a}return" "},image:function(e,t,i){var s=document.createElement("img"),o=e.getValue();switch(t.urlPrefix&&(o=t.urlPrefix+e.getValue()),t.urlSuffix&&(o+=t.urlSuffix),s.setAttribute("src",o),typeof t.height){case"number":s.style.height=t.height+"px";break;case"string":s.style.height=t.height}switch(typeof t.width){case"number":s.style.width=t.width+"px";break;case"string":s.style.width=t.width}return s.addEventListener("load",(function(){e.getRow().normalizeHeight()})),s},tickCross:function(e,t,i){var s=e.getValue(),o=e.getElement(),n=t.allowEmpty,r=t.allowTruthy,a=void 0!==t.tickElement?t.tickElement:'',l=void 0!==t.crossElement?t.crossElement:'';return r&&s||!0===s||"true"===s||"True"===s||1===s||"1"===s?(o.setAttribute("aria-checked",!0),a||""):!n||"null"!==s&&""!==s&&null!=s?(o.setAttribute("aria-checked",!1),l||""):(o.setAttribute("aria-checked","mixed"),"")},datetime:function(e,t,i){var s=t.inputFormat||"YYYY-MM-DD hh:mm:ss",o=t.outputFormat||"DD/MM/YYYY hh:mm:ss",n=void 0!==t.invalidPlaceholder?t.invalidPlaceholder:"",r=e.getValue(),a=moment(r,s);return a.isValid()?t.timezone?a.tz(t.timezone).format(o):a.format(o):!0===n?r:"function"==typeof n?n(r):n},datetimediff:function(e,t,i){var s=t.inputFormat||"YYYY-MM-DD hh:mm:ss",o=void 0!==t.invalidPlaceholder?t.invalidPlaceholder:"",n=void 0!==t.suffix&&t.suffix,r=void 0!==t.unit?t.unit:void 0,a=void 0!==t.humanize&&t.humanize,l=void 0!==t.date?t.date:moment(),h=e.getValue(),d=moment(h,s);return d.isValid()?a?moment.duration(d.diff(l)).humanize(n):d.diff(l,r)+(n?" "+n:""):!0===o?h:"function"==typeof o?o(h):o},lookup:function(e,t,i){var s=e.getValue();return void 0===t[s]?(console.warn("Missing display value for "+s),s):t[s]},star:function(e,t,i){var s=e.getValue(),o=e.getElement(),n=t&&t.stars?t.stars:5,r=document.createElement("span"),a=document.createElementNS("http://www.w3.org/2000/svg","svg");r.style.verticalAlign="middle",a.setAttribute("width","14"),a.setAttribute("height","14"),a.setAttribute("viewBox","0 0 512 512"),a.setAttribute("xml:space","preserve"),a.style.padding="0 1px",s=s&&!isNaN(s)?parseInt(s):0,s=Math.max(0,Math.min(s,n));for(var l=1;l<=n;l++){var h=a.cloneNode(!0);h.innerHTML=l<=s?'':'',r.appendChild(h)}return o.style.whiteSpace="nowrap",o.style.overflow="hidden",o.style.textOverflow="ellipsis",o.setAttribute("aria-label",s),r},traffic:function(e,t,i){var s,o,n=this.sanitizeHTML(e.getValue())||0,r=document.createElement("span"),a=t&&t.max?t.max:100,l=t&&t.min?t.min:0,h=t&&void 0!==t.color?t.color:["red","orange","green"],d="#666666";if(!isNaN(n)&&void 0!==e.getValue()){switch(r.classList.add("tabulator-traffic-light"),o=parseFloat(n)<=a?parseFloat(n):a,o=parseFloat(o)>=l?parseFloat(o):l,s=(a-l)/100,o=Math.round((o-l)/s),typeof h){case"string":d=h;break;case"function":d=h(n);break;case"object":if(Array.isArray(h)){var c=100/h.length,u=Math.floor(o/c);u=Math.min(u,h.length-1),d=h[u=Math.max(u,0)];break}}return r.style.backgroundColor=d,r}},progress:function(e,t,i){var s,o,n,r,a,l=this.sanitizeHTML(e.getValue())||0,h=e.getElement(),d=t&&t.max?t.max:100,u=t&&t.min?t.min:0,m=t&&t.legendAlign?t.legendAlign:"center";switch(o=parseFloat(l)<=d?parseFloat(l):d,o=parseFloat(o)>=u?parseFloat(o):u,s=(d-u)/100,o=Math.round((o-u)/s),typeof t.color){case"string":n=t.color;break;case"function":n=t.color(l);break;case"object":if(Array.isArray(t.color)){var p=100/t.color.length,g=Math.floor(o/p);g=Math.min(g,t.color.length-1),g=Math.max(g,0),n=t.color[g];break}default:n="#2DC214"}switch(typeof t.legend){case"string":r=t.legend;break;case"function":r=t.legend(l);break;case"boolean":r=l;break;default:r=!1}switch(typeof t.legendColor){case"string":a=t.legendColor;break;case"function":a=t.legendColor(l);break;case"object":if(Array.isArray(t.legendColor)){p=100/t.legendColor.length,g=Math.floor(o/p);g=Math.min(g,t.legendColor.length-1),g=Math.max(g,0),a=t.legendColor[g]}break;default:a="#000"}h.style.minWidth="30px",h.style.position="relative",h.setAttribute("aria-label",o);var b=document.createElement("div");if(b.style.display="inline-block",b.style.position="relative",b.style.width=o+"%",b.style.backgroundColor=n,b.style.height="100%",b.setAttribute("data-max",d),b.setAttribute("data-min",u),r){var f=document.createElement("div");f.style.position="absolute",f.style.top="4px",f.style.left=0,f.style.textAlign=m,f.style.width="100%",f.style.color=a,f.innerHTML=r}return i((function(){if(!(e instanceof c)){var t=document.createElement("div");t.style.position="absolute",t.style.top="4px",t.style.bottom="4px",t.style.left="4px",t.style.right="4px",h.appendChild(t),h=t}h.appendChild(b),r&&h.appendChild(f)})),""},color:function(e,t,i){return e.getElement().style.backgroundColor=this.sanitizeHTML(e.getValue()),""},buttonTick:function(e,t,i){return''},buttonCross:function(e,t,i){return''},rownum:function(e,t,i){return this.table.rowManager.activeRows.indexOf(e.getRow()._getSelf())+1},handle:function(e,t,i){return e.getElement().classList.add("tabulator-row-handle"),"
"},responsiveCollapse:function(e,t,i){var s=document.createElement("div"),o=e.getRow()._row.modules.responsiveLayout;function n(e){var t=o.element;o.open=e,t&&(o.open?(s.classList.add("open"),t.style.display=""):(s.classList.remove("open"),t.style.display="none"))}return s.classList.add("tabulator-responsive-collapse-toggle"),s.innerHTML="+-",e.getElement().classList.add("tabulator-row-handle"),s.addEventListener("click",(function(e){e.stopImmediatePropagation(),n(!o.open)})),n(o.open),s},rowSelection:function(e,t,i){var s=document.createElement("input");if(s.type="checkbox",this.table.modExists("selectRow",!0))if(s.addEventListener("click",(e=>{e.stopPropagation()})),"function"==typeof e.getRow){var o=e.getRow();o instanceof RowComponent?(s.addEventListener("change",(e=>{o.toggleSelect()})),s.checked=o.isSelected&&o.isSelected(),this.table.modules.selectRow.registerRowSelectCheckbox(o,s)):s=""}else s.addEventListener("change",(e=>{this.table.modules.selectRow.selectedRows.length?this.table.deselectRow():this.table.selectRow(t.rowRange)})),this.table.modules.selectRow.registerHeaderSelectCheckbox(s);return s}};class H extends t{constructor(e){super(e),this.registerColumnOption("formatter"),this.registerColumnOption("formatterParams"),this.registerColumnOption("formatterPrint"),this.registerColumnOption("formatterPrintParams"),this.registerColumnOption("formatterClipboard"),this.registerColumnOption("formatterClipboardParams"),this.registerColumnOption("formatterHtmlOutput"),this.registerColumnOption("formatterHtmlOutputParams"),this.registerColumnOption("titleFormatter"),this.registerColumnOption("titleFormatterParams")}initialize(){this.subscribe("cell-format",this.formatValue.bind(this)),this.subscribe("cell-rendered",this.cellRendered.bind(this)),this.subscribe("column-layout",this.initializeColumn.bind(this)),this.subscribe("column-format",this.formatHeader.bind(this))}initializeColumn(e){e.modules.format=this.lookupFormatter(e,""),void 0!==e.definition.formatterPrint&&(e.modules.format.print=this.lookupFormatter(e,"Print")),void 0!==e.definition.formatterClipboard&&(e.modules.format.clipboard=this.lookupFormatter(e,"Clipboard")),void 0!==e.definition.formatterHtmlOutput&&(e.modules.format.htmlOutput=this.lookupFormatter(e,"HtmlOutput"))}lookupFormatter(e,t){var i={params:e.definition["formatter"+t+"Params"]||{}},s=e.definition["formatter"+t];switch(typeof s){case"string":H.formatters[s]?i.formatter=H.formatters[s]:(console.warn("Formatter Error - No such formatter found: ",s),i.formatter=H.formatters.plaintext);break;case"function":i.formatter=s;break;default:i.formatter=H.formatters.plaintext}return i}cellRendered(e){e.modules.format&&e.modules.format.renderedCallback&&!e.modules.format.rendered&&(e.modules.format.renderedCallback(),e.modules.format.rendered=!0)}formatHeader(e,t,i){var s,o,n,r;return e.definition.titleFormatter?(s=this.getFormatter(e.definition.titleFormatter),n=t=>{e.titleFormatterRendered=t},r={getValue:function(){return t},getElement:function(){return i}},o="function"==typeof(o=e.definition.titleFormatterParams||{})?o():o,s.call(this,r,o,n)):t}formatValue(e){var t=e.getComponent(),i="function"==typeof e.column.modules.format.params?e.column.modules.format.params(t):e.column.modules.format.params;return e.column.modules.format.formatter.call(this,t,i,(function(t){e.modules.format||(e.modules.format={}),e.modules.format.renderedCallback=t,e.modules.format.rendered=!1}))}formatExportValue(e,t){var i,s=e.column.modules.format[t];if(s){return i="function"==typeof s.params?s.params(component):s.params,s.formatter.call(this,e.getComponent(),i,(function(t){e.modules.format||(e.modules.format={}),e.modules.format.renderedCallback=t,e.modules.format.rendered=!1}))}return this.formatValue(e)}sanitizeHTML(e){if(e){var t={"&":"&","<":"<",">":">",'"':""","'":"'","/":"/","`":"`","=":"="};return String(e).replace(/[&<>"'`=\/]/g,(function(e){return t[e]}))}return e}emptyToSpace(e){return null==e||""===e?" ":e}getFormatter(e){switch(typeof e){case"string":H.formatters[e]?e=H.formatters[e]:(console.warn("Formatter Error - No such formatter found: ",e),e=H.formatters.plaintext);break;case"function":e=e;break;default:e=H.formatters.plaintext}return e}}H.moduleName="format",H.formatters=F;class P extends t{constructor(e){super(e),this.leftColumns=[],this.rightColumns=[],this.leftMargin=0,this.rightMargin=0,this.rightPadding=0,this.initializationMode="left",this.active=!1,this.scrollEndTimer=!1,this.registerColumnOption("frozen")}reset(){this.initializationMode="left",this.leftColumns=[],this.rightColumns=[],this.leftMargin=0,this.rightMargin=0,this.rightMargin=0,this.active=!1,this.table.columnManager.headersElement.style.marginLeft=0,this.table.columnManager.element.style.paddingRight=0}initialize(){this.subscribe("cell-layout",this.layoutCell.bind(this)),this.subscribe("column-init",this.initializeColumn.bind(this)),this.subscribe("column-width",this.layout.bind(this)),this.subscribe("row-layout-before",this.layoutRow.bind(this)),this.subscribe("table-layout",this.layout.bind(this)),this.subscribe("scroll-horizontal",this.scrollHorizontal.bind(this)),this.subscribe("columns-loading",this.reset.bind(this)),this.subscribe("table-redraw",this.layout.bind(this))}layoutCell(e){this.layoutElement(e.element,e.column)}initializeColumn(e){var t={margin:0,edge:!1};e.isGroup||(this.frozenCheck(e)?(t.position=this.initializationMode,"left"==this.initializationMode?this.leftColumns.push(e):this.rightColumns.unshift(e),this.active=!0,e.modules.frozen=t):this.initializationMode="right")}frozenCheck(e){return e.parent.isGroup&&e.definition.frozen&&console.warn("Frozen Column Error - Parent column group must be frozen, not individual columns or sub column groups"),e.parent.isGroup?this.frozenCheck(e.parent):e.definition.frozen}scrollHorizontal(){var e;this.active&&(clearTimeout(this.scrollEndTimer),this.scrollEndTimer=setTimeout((()=>{this.layout()}),100),e=this.table.rowManager.getVisibleRows(),this.calcMargins(),this.layoutColumnPosition(),this.layoutCalcRows(),e.forEach((e=>{"row"===e.type&&this.layoutRow(e)})),this.table.rowManager.tableElement.style.marginRight=this.rightMargin)}calcMargins(){this.leftMargin=this._calcSpace(this.leftColumns,this.leftColumns.length)+"px",this.table.columnManager.headersElement.style.marginLeft=this.leftMargin,this.rightMargin=this._calcSpace(this.rightColumns,this.rightColumns.length)+"px",this.table.columnManager.element.style.paddingRight=this.rightMargin,this.rightPadding=this.table.rowManager.element.clientWidth+this.table.columnManager.scrollLeft}layoutCalcRows(){this.table.modExists("columnCalcs")&&(this.table.modules.columnCalcs.topInitialized&&this.table.modules.columnCalcs.topRow&&this.layoutRow(this.table.modules.columnCalcs.topRow),this.table.modules.columnCalcs.botInitialized&&this.table.modules.columnCalcs.botRow&&this.layoutRow(this.table.modules.columnCalcs.botRow))}layoutColumnPosition(e){var t=[];this.leftColumns.forEach(((i,s)=>{if(i.modules.frozen.margin=this._calcSpace(this.leftColumns,s)+this.table.columnManager.scrollLeft+"px",s==this.leftColumns.length-1?i.modules.frozen.edge=!0:i.modules.frozen.edge=!1,i.parent.isGroup){var o=this.getColGroupParentElement(i);t.includes(o)||(this.layoutElement(o,i),t.push(o)),i.modules.frozen.edge&&o.classList.add("tabulator-frozen-"+i.modules.frozen.position)}else this.layoutElement(i.getElement(),i);e&&i.cells.forEach((e=>{this.layoutElement(e.getElement(!0),i)}))})),this.rightColumns.forEach(((t,i)=>{t.modules.frozen.margin=this.rightPadding-this._calcSpace(this.rightColumns,i+1)+"px",i==this.rightColumns.length-1?t.modules.frozen.edge=!0:t.modules.frozen.edge=!1,t.parent.isGroup?this.layoutElement(this.getColGroupParentElement(t),t):this.layoutElement(t.getElement(),t),e&&t.cells.forEach((e=>{this.layoutElement(e.getElement(!0),t)}))}))}getColGroupParentElement(e){return e.parent.isGroup?this.getColGroupParentElement(e.parent):e.getElement()}layout(){this.active&&(this.calcMargins(),this.table.rowManager.getDisplayRows().forEach((e=>{"row"===e.type&&this.layoutRow(e)})),this.layoutCalcRows(),this.layoutColumnPosition(!0),this.table.rowManager.tableElement.style.marginRight=this.rightMargin)}layoutRow(e){e.getElement().style.paddingLeft=this.leftMargin,this.leftColumns.forEach((t=>{var i=e.getCell(t);i&&this.layoutElement(i.getElement(!0),t)})),this.rightColumns.forEach((t=>{var i=e.getCell(t);i&&this.layoutElement(i.getElement(!0),t)}))}layoutElement(e,t){t.modules.frozen&&(e.style.position="absolute",e.style.left=t.modules.frozen.margin,e.classList.add("tabulator-frozen"),t.modules.frozen.edge&&e.classList.add("tabulator-frozen-"+t.modules.frozen.position))}_calcSpace(e,t){var i=0;for(let s=0;s-1}isFrozen(){return!!this.rows.length}getRows(e){var t=e.slice(0);return this.rows.forEach((function(e){var i=t.indexOf(e);i>-1&&t.splice(i,1)})),t}freezeRow(e){e.modules.frozen?console.warn("Freeze Error - Row is already frozen"):(e.modules.frozen=!0,this.topElement.appendChild(e.getElement()),e.initialize(),e.normalizeHeight(),this.table.rowManager.adjustTableSize(),this.rows.push(e),this.table.rowManager.refreshActiveData("display"),this.styleRows())}unfreezeRow(e){this.rows.indexOf(e);e.modules.frozen?(e.modules.frozen=!1,this.detachRow(e),this.table.rowManager.adjustTableSize(),this.table.rowManager.refreshActiveData("display"),this.rows.length&&this.styleRows()):console.warn("Freeze Error - Row is already unfrozen")}detachRow(e){var t=this.rows.indexOf(e);if(t>-1){var i=e.getElement();i.parentNode.removeChild(i),this.rows.splice(t,1)}}styleRows(e){this.rows.forEach(((e,t)=>{this.table.rowManager.styleRow(e,t)}))}}z.moduleName="frozenRows";class A{constructor(e){return this._group=e,this.type="GroupComponent",new Proxy(this,{get:function(e,t,i){return void 0!==e[t]?e[t]:e._group.table.componentFunctionBinder.handle("row",e._group,t)}})}getKey(){return this._group.key}getField(){return this._group.field}getElement(){return this._group.element}getRows(){return this._group.getRows(!0)}getSubGroups(){return this._group.getSubGroups(!0)}getParentGroup(){return!!this._group.parent&&this._group.parent.getComponent()}isVisible(){return this._group.visible}show(){this._group.show()}hide(){this._group.hide()}toggle(){this._group.toggleVisibility()}_getSelf(){return this._group}getTable(){return this._group.groupManager.table}}class O{constructor(e,t,i,s,o,n,r){this.groupManager=e,this.parent=t,this.key=s,this.level=i,this.field=o,this.hasSubGroups=i{this._createGroup(t,e)}))}addBindings(){var e,t,i;(this.groupManager.table.options.groupContextMenu||this.groupManager.table.options.groupClickMenu)&&this.groupManager.table.modExists("menu")&&this.groupManager.table.modules.menu.initializeGroup.call(this.groupManager.table.modules.menu,this),this.groupManager.table.options.groupTap&&(i=!1,this.element.addEventListener("touchstart",(e=>{i=!0}),{passive:!0}),this.element.addEventListener("touchend",(e=>{i&&this.groupManager.table.options.groupTap(e,this.getComponent()),i=!1}))),this.groupManager.table.options.groupDblTap&&(e=null,this.element.addEventListener("touchend",(t=>{e?(clearTimeout(e),e=null,this.groupManager.table.options.groupDblTap(t,this.getComponent())):e=setTimeout((()=>{clearTimeout(e),e=null}),300)}))),this.groupManager.table.options.groupTapHold&&(t=null,this.element.addEventListener("touchstart",(e=>{clearTimeout(t),t=setTimeout((()=>{clearTimeout(t),t=null,i=!1,this.groupManager.table.options.groupTapHold(e,this.getComponent())}),1e3)}),{passive:!0}),this.element.addEventListener("touchend",(e=>{clearTimeout(t),t=null}))),this.groupManager.table.options.groupToggleElement&&("arrow"==this.groupManager.table.options.groupToggleElement?this.arrowElement:this.element).addEventListener("click",(e=>{e.stopPropagation(),e.stopImmediatePropagation(),this.toggleVisibility()}))}_createGroup(e,t){var i=t+"_"+e,s=new O(this.groupManager,this,t,e,this.groupManager.groupIDLookups[t].field,this.groupManager.headerGenerator[t]||this.groupManager.headerGenerator[0],!!this.old&&this.old.groups[i]);this.groups[i]=s,this.groupList.push(s)}_addRowToGroup(e){var t=this.level+1;if(this.hasSubGroups){var i=this.groupManager.groupIDLookups[t].func(e.getData()),s=t+"_"+i;this.groupManager.allowedValues&&this.groupManager.allowedValues[t]?this.groups[s]&&this.groups[s].addRow(e):(this.groups[s]||this._createGroup(i,t),this.groups[s].addRow(e))}}_addRow(e){this.rows.push(e),e.modules.group=this}insertRow(e,t,i){var s=this.conformRowData({});e.updateData(s);var o=this.rows.indexOf(t);o>-1?i?this.rows.splice(o+1,0,e):this.rows.splice(o,0,e):i?this.rows.push(e):this.rows.unshift(e),e.modules.group=this,this.generateGroupHeaderContents(),this.groupManager.table.modExists("columnCalcs")&&"table"!=this.groupManager.table.options.columnCalcs&&this.groupManager.table.modules.columnCalcs.recalcGroup(this),this.groupManager.updateGroupRows(!0)}scrollHeader(e){this.arrowElement.style.marginLeft=e,this.groupList.forEach((function(t){t.scrollHeader(e)}))}getRowIndex(e){}conformRowData(e){return this.field?e[this.field]=this.key:console.warn("Data Conforming Error - Cannot conform row data to match new group as groupBy is a function"),this.parent&&(e=this.parent.conformRowData(e)),e}removeRow(e){var t=this.rows.indexOf(e),i=e.getElement();t>-1&&this.rows.splice(t,1),this.groupManager.table.options.groupValues||this.rows.length?(i.parentNode&&i.parentNode.removeChild(i),this.generateGroupHeaderContents(),this.groupManager.table.modExists("columnCalcs")&&"table"!=this.groupManager.table.options.columnCalcs&&this.groupManager.table.modules.columnCalcs.recalcGroup(this)):(this.parent?this.parent.removeGroup(this):this.groupManager.removeGroup(this),this.groupManager.updateGroupRows(!0))}removeGroup(e){var t,i=e.level+"_"+e.key;this.groups[i]&&(delete this.groups[i],(t=this.groupList.indexOf(e))>-1&&this.groupList.splice(t,1),this.groupList.length||(this.parent?this.parent.removeGroup(this):this.groupManager.removeGroup(this)))}getHeadersAndRows(e){var t=[];return t.push(this),this._visSet(),this.visible?this.groupList.length?this.groupList.forEach((function(i){t=t.concat(i.getHeadersAndRows(e))})):(!e&&"table"!=this.groupManager.table.options.columnCalcs&&this.groupManager.table.modExists("columnCalcs")&&this.groupManager.table.modules.columnCalcs.hasTopCalcs()&&(this.calcs.top&&(this.calcs.top.detachElement(),this.calcs.top.deleteCells()),this.calcs.top=this.groupManager.table.modules.columnCalcs.generateTopRow(this.rows),t.push(this.calcs.top)),t=t.concat(this.rows),!e&&"table"!=this.groupManager.table.options.columnCalcs&&this.groupManager.table.modExists("columnCalcs")&&this.groupManager.table.modules.columnCalcs.hasBottomCalcs()&&(this.calcs.bottom&&(this.calcs.bottom.detachElement(),this.calcs.bottom.deleteCells()),this.calcs.bottom=this.groupManager.table.modules.columnCalcs.generateBottomRow(this.rows),t.push(this.calcs.bottom))):this.groupList.length||"table"==this.groupManager.table.options.columnCalcs||this.groupManager.table.modExists("columnCalcs")&&(!e&&this.groupManager.table.modules.columnCalcs.hasTopCalcs()&&(this.calcs.top&&(this.calcs.top.detachElement(),this.calcs.top.deleteCells()),this.groupManager.table.options.groupClosedShowCalcs&&(this.calcs.top=this.groupManager.table.modules.columnCalcs.generateTopRow(this.rows),t.push(this.calcs.top))),!e&&this.groupManager.table.modules.columnCalcs.hasBottomCalcs()&&(this.calcs.bottom&&(this.calcs.bottom.detachElement(),this.calcs.bottom.deleteCells()),this.groupManager.table.options.groupClosedShowCalcs&&(this.calcs.bottom=this.groupManager.table.modules.columnCalcs.generateBottomRow(this.rows),t.push(this.calcs.bottom)))),t}getData(e,t){var i=[];return this._visSet(),(!e||e&&this.visible)&&this.rows.forEach((e=>{i.push(e.getData(t||"data"))})),i}getRowCount(){var e=0;return this.groupList.length?this.groupList.forEach((t=>{e+=t.getRowCount()})):e=this.rows.length,e}toggleVisibility(){this.visible?this.hide():this.show()}hide(){this.visible=!1,"classic"!=this.groupManager.table.rowManager.getRenderMode()||this.groupManager.table.options.pagination?this.groupManager.updateGroupRows(!0):(this.element.classList.remove("tabulator-group-visible"),this.groupList.length?this.groupList.forEach((e=>{e.getHeadersAndRows().forEach((e=>{e.detachElement()}))})):this.rows.forEach((e=>{var t=e.getElement();t.parentNode.removeChild(t)})),this.groupManager.table.rowManager.setDisplayRows(this.groupManager.updateGroupRows(),this.groupManager.getDisplayIndex()),this.groupManager.table.rowManager.checkClassicModeGroupHeaderWidth()),this.groupManager.table.externalEvents.dispatch("groupVisibilityChanged",this.getComponent(),!1)}show(){if(this.visible=!0,"classic"!=this.groupManager.table.rowManager.getRenderMode()||this.groupManager.table.options.pagination)this.groupManager.updateGroupRows(!0);else{this.element.classList.add("tabulator-group-visible");var e=this.getElement();this.groupList.length?this.groupList.forEach((t=>{t.getHeadersAndRows().forEach((t=>{var i=t.getElement();e.parentNode.insertBefore(i,e.nextSibling),t.initialize(),e=i}))})):this.rows.forEach((t=>{var i=t.getElement();e.parentNode.insertBefore(i,e.nextSibling),t.initialize(),e=i})),this.groupManager.table.rowManager.setDisplayRows(this.groupManager.updateGroupRows(),this.groupManager.getDisplayIndex()),this.groupManager.table.rowManager.checkClassicModeGroupHeaderWidth()}this.groupManager.table.externalEvents.dispatch("groupVisibilityChanged",this.getComponent(),!0)}_visSet(){var e=[];"function"==typeof this.visible&&(this.rows.forEach((function(t){e.push(t.getData())})),this.visible=this.visible(this.key,this.getRowCount(),e,this.getComponent()))}getRowGroup(e){var t=!1;return this.groupList.length?this.groupList.forEach((function(i){var s=i.getRowGroup(e);s&&(t=s)})):this.rows.find((function(t){return t===e}))&&(t=this),t}getSubGroups(e){var t=[];return this.groupList.forEach((function(i){t.push(e?i.getComponent():i)})),t}getRows(e){var t=[];return this.rows.forEach((function(i){t.push(e?i.getComponent():i)})),t}generateGroupHeaderContents(){var e=[];for(this.rows.forEach((function(t){e.push(t.getData())})),this.elementContents=this.generator(this.key,this.getRowCount(),e,this.getComponent());this.element.firstChild;)this.element.removeChild(this.element.firstChild);"string"==typeof this.elementContents?this.element.innerHTML=this.elementContents:this.element.appendChild(this.elementContents),this.element.insertBefore(this.arrowElement,this.element.firstChild)}getPath(e=[]){return e.unshift(this.key),this.parent&&this.parent.getPath(e),e}getElement(){this.addBindingsd=!1,this._visSet(),this.visible?this.element.classList.add("tabulator-group-visible"):this.element.classList.remove("tabulator-group-visible");for(var e=0;ei.length&&console.warn("Error creating group headers, groupHeader array is shorter than groupBy array"),this.headerGenerator=[function(){return""}],this.startOpen=[function(){return!1}],this.langBind("groups|item",((e,t)=>{this.headerGenerator[0]=(i,s,o)=>(void 0===i?"":i)+"("+s+" "+(1===s?e:t.groups.items)+")"})),this.groupIDLookups=[],Array.isArray(e)||e)this.table.modExists("columnCalcs")&&"table"!=this.table.options.columnCalcs&&"both"!=this.table.options.columnCalcs&&this.table.modules.columnCalcs.removeCalcs();else if(this.table.modExists("columnCalcs")&&"group"!=this.table.options.columnCalcs)this.table.columnManager.getRealColumns().forEach((e=>{e.definition.topCalc&&this.table.modules.columnCalcs.initializeTopRow(),e.definition.bottomCalc&&this.table.modules.columnCalcs.initializeBottomRow()}));Array.isArray(e)||(e=[e]),e.forEach(((e,t)=>{var i,s;i="function"==typeof e?e:(s=this.table.columnManager.getColumnByField(e))?function(e){return s.getFieldValue(e)}:function(t){return t[e]},this.groupIDLookups.push({field:"function"!=typeof e&&e,func:i,values:!!this.allowedValues&&this.allowedValues[t]})})),t&&(Array.isArray(t)||(t=[t]),t.forEach((e=>{})),this.startOpen=t),i&&(this.headerGenerator=Array.isArray(i)?i:[i]),this.table.options.groupUpdateOnCellEdit&&(this.subscribe("cell-value-updated",this.cellUpdated.bind(this)),this.subscribe("row-data-changed",this.reassignRowToGroup.bind(this),0)),this.subscribe("row-deleting",this.rowDeleting.bind(this)),this.subscribe("row-deleted",this.rowsUpdated.bind(this)),this.subscribe("scroll-horizontal",this.scrollHeaders.bind(this)),this.subscribe("rows-wipe",this.wipe.bind(this)),this.subscribe("rows-added",this.rowsUpdated.bind(this)),this.subscribe("row-moving",this.rowMoving.bind(this)),this.subscribe("row-adding-index",this.rowAddingIndex.bind(this)),this.subscribe("rows-sample",this.rowSample.bind(this)),this.subscribe("render-virtual-fill",this.rowAddingIndex.bind(this)),this.registerDisplayHandler(this.getRows.bind(this),20),this.initialized=!0}}rowSample(e,t){var i=this.getGroups(!1)[0];return t.push(i.getRows(!1)[0]),t}virtualRenderFill(){var e=this.table.rowManager.tableElement;rows=this.table.rowManager.getVisibleRows(),rows=rows.filter((e=>"group"!==e.type)),e.style.minWidth=rows.length?"":this.table.columnManager.getWidth()+"px"}rowAddingIndex(e,t,i){this.assignRowToGroup(e);var s=e.modules.group.rows;return s.length>1&&(!t||t&&-1==s.indexOf(t)?i?s[0]!==e&&(t=s[0],this.table.rowManager.moveRowInArray(e.modules.group.rows,e,t,!i)):s[s.length-1]!==e&&(t=s[s.length-1],this.table.rowManager.moveRowInArray(e.modules.group.rows,e,t,!i)):this.table.rowManager.moveRowInArray(e.modules.group.rows,e,t,!i)),t}trackChanges(){this.dispatch("group-changed")}setGroupBy(e){this.table.options.groupBy=e,this.initialize(),this.refreshData(!1,"display"),this.trackChanges()}setGroupValues(e){this.table.options.groupValues=e,this.initialize(),this.refreshData(!1,"display"),this.trackChanges()}setGroupStartOpen(e){this.table.options.groupStartOpen=e,this.initialize(),this.table.options.groupBy?(this.refreshData(),this.trackChanges()):console.warn("Grouping Update - cant refresh view, no groups have been set")}setGroupHeader(e){this.table.options.groupHeader=e,this.initialize(),this.table.options.groupBy?(this.refreshData(),this.trackChanges()):console.warn("Grouping Update - cant refresh view, no groups have been set")}userGetGroups(e){return this.getGroups(!0)}userGetGroupedData(){return this.table.options.groupBy?this.getGroupedData():this.getData()}rowGetGroup(e){return!!e.modules.group&&e.modules.group.getComponent()}rowMoving(e,t,i){!i&&t instanceof O&&(t=this.table.rowManager.prevDisplayRow(e)||t);var s=t.modules.group,o=e.modules.group;s===o?this.table.rowManager.moveRowInArray(s.rows,e,t,i):(o&&o.removeRow(e),s.insertRow(e,t,i))}rowDeleting(e){e.modules.group&&e.modules.group.removeRow(e)}rowsUpdated(e){this.updateGroupRows(!0)}cellUpdated(e){this.reassignRowToGroup(e.row)}setDisplayIndex(e){this.displayIndex=e}getDisplayIndex(){return this.displayIndex}getRows(e){return this.groupIDLookups.length?(this.dispatchExternal("dataGrouping"),this.generateGroups(e),this.subscribedExternal("dataGrouped")&&this.dispatchExternal("dataGrouped",this.getGroups(!0)),this.updateGroupRows()):e.slice(0)}getGroups(e){var t=[];return this.groupList.forEach((function(i){t.push(e?i.getComponent():i)})),t}getChildGroups(e){var t=[];return e||(e=this),e.groupList.forEach((e=>{e.groupList.length?t=t.concat(this.getChildGroups(e)):t.push(e)})),t}wipe(){this.groupList.forEach((function(e){e.wipe()}))}pullGroupListData(e){var t=[];return e.forEach((e=>{var i={level:0,rowCount:0,headerContent:""},s=[];e.hasSubGroups?(s=this.pullGroupListData(e.groupList),i.level=e.level,i.rowCount=s.length-e.groupList.length,i.headerContent=e.generator(e.key,i.rowCount,e.rows,e),t.push(i),t=t.concat(s)):(i.level=e.level,i.headerContent=e.generator(e.key,e.rows.length,e.rows,e),i.rowCount=e.getRows().length,t.push(i),e.getRows().forEach((e=>{t.push(e.getData("data"))})))})),t}getGroupedData(){return this.pullGroupListData(this.groupList)}getRowGroup(e){var t=!1;return this.groupList.forEach((i=>{var s=i.getRowGroup(e);s&&(t=s)})),t}countGroups(){return this.groupList.length}generateGroups(e){var t=this.groups;this.groups={},this.groupList=[],this.allowedValues&&this.allowedValues[0]?(this.allowedValues[0].forEach((e=>{this.createGroup(e,0,t)})),e.forEach((e=>{this.assignRowToExistingGroup(e,t)}))):e.forEach((e=>{this.assignRowToGroup(e,t)}))}createGroup(e,t,i){var s,o=t+"_"+e;i=i||[],s=new O(this,!1,t,e,this.groupIDLookups[0].field,this.headerGenerator[0],i[o]),this.groups[o]=s,this.groupList.push(s)}assignRowToExistingGroup(e,t){var i="0_"+this.groupIDLookups[0].func(e.getData());this.groups[i]&&this.groups[i].addRow(e)}assignRowToGroup(e,t){var i=this.groupIDLookups[0].func(e.getData()),s=!this.groups["0_"+i];return s&&this.createGroup(i,0,t),this.groups["0_"+i].addRow(e),!s}reassignRowToGroup(e){if("row"===e.type){var t=e.modules.group,i=t.getPath(),s=this.getExpectedPath(e);i.length==s.length&&i.every(((e,t)=>e===s[t]))||(t.removeRow(e),this.assignRowToGroup(e,this.groups),this.refreshData(!0))}}getExpectedPath(e){var t=[],i=e.getData();return this.groupIDLookups.forEach((e=>{t.push(e.func(i))})),t}updateGroupRows(e){var t=[];if(this.groupList.forEach((e=>{t=t.concat(e.getHeadersAndRows())})),e){var i=this.table.rowManager.setDisplayRows(t,this.getDisplayIndex());!0!==i&&this.setDisplayIndex(i),this.refreshData(!0)}return t}scrollHeaders(e){"virtual"===this.table.options.renderHorizontal&&(e-=this.table.columnManager.renderer.vDomPadLeft),e+="px",this.groupList.forEach((t=>{t.scrollHeader(e)}))}removeGroup(e){var t,i=e.level+"_"+e.key;this.groups[i]&&(delete this.groups[i],(t=this.groupList.indexOf(e))>-1&&this.groupList.splice(t,1))}}_.moduleName="groupRows";class B extends t{constructor(e){super(e),this.history=[],this.index=-1,this.registerTableOption("history",!1)}initialize(){this.table.options.history&&(this.subscribe("cell-value-updated",this.layoutCell.bind(this)),this.subscribe("cell-delete",this.clearComponentHistory.bind(this)),this.subscribe("row-delete",this.rowDeleted.bind(this)),this.subscribe("rows-wipe",this.clear.bind(this)),this.subscribe("row-added",this.clear.bind(this)),this.subscribe("row-move",this.rowMoved.bind(this))),this.registerTableFunction("undo",this.undo.bind(this)),this.registerTableFunction("redo",this.redo.bind(this)),this.registerTableFunction("getHistoryUndoSize",this.getHistoryUndoSize.bind(this)),this.registerTableFunction("getHistoryRedoSize",this.getHistoryRedoSize.bind(this)),this.registerTableFunction("clearHistory",this.clear.bind(this))}rowMoved(e,t,i){this.action("rowMove",e,{posFrom:this.table.rowManager.getRowPosition(e),posTo:this.table.rowManager.getRowPosition(t),to:t,after:i})}rowAdded(e,t,i,s){this.action("rowAdd",e,{data:t,pos:i,index:s})}rowDeleted(e){var t,i;this.table.options.groupBy?(t=(i=e.getComponent().getGroup().rows).indexOf(e))&&(t=i[t-1]):(t=e.table.rowManager.getRowIndex(e))&&(t=e.table.rowManager.rows[t-1]),this.history.action("rowDelete",e,{data:e.getData(),pos:!t,index:t})}cellUpdated(e){this.action("cellEdit",e,{oldValue:e.oldValue,newValue:e.value})}clear(){this.history=[],this.index=-1}action(e,t,i){this.history=this.history.slice(0,this.index+1),this.history.push({type:e,component:t,data:i}),this.index++}getHistoryUndoSize(){return this.index+1}getHistoryRedoSize(){return this.history.length-(this.index+1)}clearComponentHistory(e){var t=this.history.findIndex((function(t){return t.component===e}));t>-1&&(this.history.splice(t,1),t<=this.index&&this.index--,this.clearComponentHistory(e))}undo(){if(this.index>-1){let e=this.history[this.index];return B.undoers[e.type].call(this,e),this.index--,this.dispatchExternal("historyUndo",e.type,e.component.getComponent(),e.data),!0}return console.warn("History Undo Error - No more history to undo"),!1}redo(){if(this.history.length-1>this.index){this.index++;let e=this.history[this.index];return B.redoers[e.type].call(this,e),this.dispatchExternal("historyRedo",e.type,e.component.getComponent(),e.data),!0}return console.warn("History Redo Error - No more history to redo"),!1}_rebindRow(e,t){this.history.forEach((function(i){if(i.component instanceof Row)i.component===e&&(i.component=t);else if(i.component instanceof Cell&&i.component.row===e){var s=i.component.column.getField();s&&(i.component=t.getCell(s))}}))}}B.moduleName="history",B.undoers={cellEdit:function(e){e.component.setValueProcessData(e.data.oldValue)},rowAdd:function(e){e.component.deleteActual()},rowDelete:function(e){var t=this.table.rowManager.addRowActual(e.data.data,e.data.pos,e.data.index);this.table.options.groupBy&&this.table.modExists("groupRows")&&this.table.modules.groupRows.updateGroupRows(!0),this._rebindRow(e.component,t)},rowMove:function(e){this.table.rowManager.moveRowActual(e.component,this.table.rowManager.rows[e.data.posFrom],!e.data.after),this.table.rowManager.redraw()}},B.redoers={cellEdit:function(e){e.component.setValueProcessData(e.data.newValue)},rowAdd:function(e){var t=this.table.rowManager.addRowActual(e.data.data,e.data.pos,e.data.index);this.table.options.groupBy&&this.table.modExists("groupRows")&&this.table.modules.groupRows.updateGroupRows(!0),this._rebindRow(e.component,t)},rowDelete:function(e){e.component.deleteActual()},rowMove:function(e){this.table.rowManager.moveRowActual(e.component,this.table.rowManager.rows[e.data.posTo],e.data.after),this.table.rowManager.redraw()}};class N extends t{constructor(e){super(e),this.fieldIndex=[],this.hasIndex=!1}initialize(){this.subscribe("table-building",this.tableElementCheck.bind(this))}tableElementCheck(){"TABLE"===this.table.element.tagName&&this.parseTable()}parseTable(){var e=this.table.element,t=this.table.options,i=(t.columns,e.getElementsByTagName("th")),s=e.getElementsByTagName("tbody")[0],o=[];this.hasIndex=!1,this.dispatchExternal("htmlImporting"),s=s?s.getElementsByTagName("tr"):[],this._extractOptions(e,t),i.length?this._extractHeaders(i,s):this._generateBlankHeaders(i,s);for(var n=0;n{n[e.toLowerCase()]=e})),s){var a,l=s[r];l&&"object"==typeof l&&l.name&&0===l.name.indexOf("tabulator-")&&(a=l.name.replace("tabulator-",""),void 0!==n[a]&&(t[n[a]]=this._attribValue(l.value)))}}_attribValue(e){return"true"===e||"false"!==e&&e}_findCol(e){return this.table.options.columns.find((t=>t.title===e))||!1}_extractHeaders(e,t){for(var i=0;i{clearTimeout(o.tapHold),o.tapHold=null,o.tap=null,clearTimeout(o.tapDbl),o.tapDbl=null,this.dispatchEvent(e+"TapHold",i,s)}),1e3);break;case"end":o.tap&&(o.tap=null,this.dispatchEvent(e+"Tap",i,s)),o.tapDbl?(clearTimeout(o.tapDbl),o.tapDbl=null,this.dispatchEvent(e+"DblTap",i,s)):o.tapDbl=setTimeout((()=>{clearTimeout(o.tapDbl),o.tapDbl=null}),300),clearTimeout(o.tapHold),o.tapHold=null}}dispatchEvent(e,t,i){var s,o=i.getComponent();this.columnSubscribers[e]&&(i instanceof u?s=i.column.definition[e]:i instanceof g&&(s=i.definition[e]),s&&s(t,o)),this.dispatchExternal(e,t,o)}}V.moduleName="interaction";class I extends t{constructor(e){super(e),this.watchKeys=null,this.pressedKeys=null,this.keyupBinding=!1,this.keydownBinding=!1,this.registerTableOption("keybindings",[]),this.registerTableOption("tabEndNewRow",!1)}initialize(){var e=this.table.options.keybindings,t={};if(this.watchKeys={},this.pressedKeys=[],!1!==e){for(let e in I.bindings)t[e]=I.bindings[e];if(Object.keys(e).length)for(let i in e)t[i]=e[i];this.mapBindings(t),this.bindEvents()}this.subscribe("table-destroy",this.clearBindings.bind(this))}mapBindings(e){for(let t in e)I.actions[t]?e[t]&&("object"!=typeof e[t]&&(e[t]=[e[t]]),e[t].forEach((e=>{this.mapBinding(t,e)}))):console.warn("Key Binding Error - no such action:",t)}mapBinding(e,t){var i={action:I.actions[e],keys:[],ctrl:!1,shift:!1,meta:!1};t.toString().toLowerCase().split(" ").join("").split("+").forEach((e=>{switch(e){case"ctrl":i.ctrl=!0;break;case"shift":i.shift=!0;break;case"meta":i.meta=!0;break;default:e=parseInt(e),i.keys.push(e),this.watchKeys[e]||(this.watchKeys[e]=[]),this.watchKeys[e].push(i)}}))}bindEvents(){var e=this;this.keyupBinding=function(t){var i=t.keyCode,s=e.watchKeys[i];s&&(e.pressedKeys.push(i),s.forEach((function(i){e.checkBinding(t,i)})))},this.keydownBinding=function(t){var i=t.keyCode;if(e.watchKeys[i]){var s=e.pressedKeys.indexOf(i);s>-1&&e.pressedKeys.splice(s,1)}},this.table.element.addEventListener("keydown",this.keyupBinding),this.table.element.addEventListener("keyup",this.keydownBinding)}clearBindings(){this.keyupBinding&&this.table.element.removeEventListener("keydown",this.keyupBinding),this.keydownBinding&&this.table.element.removeEventListener("keyup",this.keydownBinding)}checkBinding(e,t){var i=!0;return e.ctrlKey==t.ctrl&&e.shiftKey==t.shift&&e.metaKey==t.meta&&(t.keys.forEach((e=>{-1==this.pressedKeys.indexOf(e)&&(i=!1)})),i&&t.action.call(this,e),!0)}}I.moduleName="keybindings",I.bindings={navPrev:"shift + 9",navNext:9,navUp:38,navDown:40,scrollPageUp:33,scrollPageDown:34,scrollToStart:36,scrollToEnd:35,undo:"ctrl + 90",redo:"ctrl + 89",copyToClipboard:"ctrl + 67"},I.actions={keyBlock:function(e){e.stopPropagation(),e.preventDefault()},scrollPageUp:function(e){var t=this.table.rowManager,i=t.scrollTop-t.element.clientHeight;t.element.scrollHeight;e.preventDefault(),t.displayRowsCount&&(i>=0?t.element.scrollTop=i:t.scrollToRow(t.getDisplayRows()[0])),this.table.element.focus()},scrollPageDown:function(e){var t=this.table.rowManager,i=t.scrollTop+t.element.clientHeight,s=t.element.scrollHeight;e.preventDefault(),t.displayRowsCount&&(i<=s?t.element.scrollTop=i:t.scrollToRow(t.getDisplayRows()[t.displayRowsCount-1])),this.table.element.focus()},scrollToStart:function(e){var t=this.table.rowManager;e.preventDefault(),t.displayRowsCount&&t.scrollToRow(t.getDisplayRows()[0]),this.table.element.focus()},scrollToEnd:function(e){var t=this.table.rowManager;e.preventDefault(),t.displayRowsCount&&t.scrollToRow(t.getDisplayRows()[t.displayRowsCount-1]),this.table.element.focus()},navPrev:function(e){this.dispatch("keybinding-nav-prev",e)},navNext:function(e){this.dispatch("keybinding-nav-next",e)},navLeft:function(e){this.dispatch("keybinding-nav-left",e)},navRight:function(e){this.dispatch("keybinding-nav-right",e)},navUp:function(e){this.dispatch("keybinding-nav-up",e)},navDown:function(e){this.dispatch("keybinding-nav-down",e)},undo:function(e){this.table.options.history&&this.table.modExists("history")&&this.table.modExists("edit")&&(this.table.modules.edit.currentCell||(e.preventDefault(),this.table.modules.history.undo()))},redo:function(e){this.table.options.history&&this.table.modExists("history")&&this.table.modExists("edit")&&(this.table.modules.edit.currentCell||(e.preventDefault(),this.table.modules.history.redo()))},copyToClipboard:function(e){this.table.modules.edit.currentCell||this.table.modExists("clipboard",!0)&&this.table.modules.clipboard.copy(!1,!0)}};class W extends t{constructor(e){super(e),this.menuElements=[],this.blurEvent=this.hideMenu.bind(this),this.escEvent=this.escMenu.bind(this),this.nestedMenuBlock=!1,this.positionReversedX=!1,this.registerTableOption("rowContextMenu",!1),this.registerTableOption("rowClickMenu",!1),this.registerTableOption("groupContextMenu",!1),this.registerTableOption("groupClickMenu",!1),this.registerColumnOption("headerContextMenu"),this.registerColumnOption("headerMenu"),this.registerColumnOption("contextMenu"),this.registerColumnOption("clickMenu")}initialize(){this.subscribe("cell-layout",this.layoutCell.bind(this)),this.subscribe("column-init",this.initializeColumn.bind(this)),this.subscribe("row-init",this.initializeRow.bind(this))}layoutCell(e){(e.column.definition.contextMenu||e.column.definition.clickMenu)&&this.initializeCell(e)}initializeColumn(e){var t=e.definition;(t.headerContextMenu||t.headerClickMenu||t.headerMenu)&&this.initializeColumnHeader(this)}initializeColumnHeader(e){var t;e.definition.headerContextMenu&&(e.getElement().addEventListener("contextmenu",this.LoadMenuEvent.bind(this,e,e.definition.headerContextMenu)),this.tapHold(e,e.definition.headerContextMenu)),e.definition.headerMenu&&((t=document.createElement("span")).classList.add("tabulator-header-menu-button"),t.innerHTML="⋮",t.addEventListener("click",(t=>{t.stopPropagation(),t.preventDefault(),this.LoadMenuEvent(e,e.definition.headerMenu,t)})),e.titleElement.insertBefore(t,e.titleElement.firstChild))}LoadMenuEvent(e,t,i){t="function"==typeof t?t.call(this.table,e.getComponent(),i):t,this.loadMenu(i,e,t)}tapHold(e,t){var i=e.getElement(),s=null,o=!1;i.addEventListener("touchstart",(i=>{clearTimeout(s),o=!1,s=setTimeout((()=>{clearTimeout(s),s=null,o=!0,this.LoadMenuEvent(e,t,i)}),1e3)}),{passive:!0}),i.addEventListener("touchend",(e=>{clearTimeout(s),s=null,o&&e.preventDefault()}))}initializeCell(e){e.column.definition.contextMenu&&(e.getElement(!0).addEventListener("contextmenu",this.LoadMenuEvent.bind(this,e,e.column.definition.contextMenu)),this.tapHold(e,e.column.definition.contextMenu)),e.column.definition.clickMenu&&e.getElement(!0).addEventListener("click",this.LoadMenuEvent.bind(this,e,e.column.definition.clickMenu))}initializeRow(e){this.table.options.rowContextMenu&&(e.getElement().addEventListener("contextmenu",this.LoadMenuEvent.bind(this,e,this.table.options.rowContextMenu)),this.tapHold(e,this.table.options.rowContextMenu)),this.table.options.rowClickMenu&&e.getElement().addEventListener("click",this.LoadMenuEvent.bind(this,e,this.table.options.rowClickMenu))}initializeGroup(e){this.table.options.groupContextMenu&&(e.getElement().addEventListener("contextmenu",this.LoadMenuEvent.bind(this,e,this.table.options.groupContextMenu)),this.tapHold(e,this.table.options.groupContextMenu)),this.table.options.groupClickMenu&&e.getElement().addEventListener("click",this.LoadMenuEvent.bind(this,e,this.table.options.groupClickMenu))}loadMenu(e,t,i,s){var o=!(e instanceof MouseEvent),n=document.createElement("div");if(n.classList.add("tabulator-menu"),o||e.preventDefault(),i&&i.length){if(!s){if(this.nestedMenuBlock){if(this.isOpen())return}else this.nestedMenuBlock=setTimeout((()=>{this.nestedMenuBlock=!1}),100);this.hideMenu(),this.menuElements=[]}i.forEach((e=>{var i=document.createElement("div"),s=e.label,o=e.disabled;e.separator?i.classList.add("tabulator-menu-separator"):(i.classList.add("tabulator-menu-item"),"function"==typeof s&&(s=s.call(this.table,t.getComponent())),s instanceof Node?i.appendChild(s):i.innerHTML=s,"function"==typeof o&&(o=o.call(this.table,t.getComponent())),o?(i.classList.add("tabulator-menu-item-disabled"),i.addEventListener("click",(e=>{e.stopPropagation()}))):e.menu&&e.menu.length?i.addEventListener("click",(s=>{s.stopPropagation(),this.hideOldSubMenus(n),this.loadMenu(s,t,e.menu,i)})):e.action&&i.addEventListener("click",(i=>{e.action(i,t.getComponent())})),e.menu&&e.menu.length&&i.classList.add("tabulator-menu-item-submenu")),n.appendChild(i)})),n.addEventListener("click",(e=>{this.hideMenu()})),this.menuElements.push(n),this.positionMenu(n,s,o,e)}}hideOldSubMenus(e){var t=this.menuElements.indexOf(e);if(t>-1)for(let e=this.menuElements.length-1;e>t;e--){var i=this.menuElements[e];i.parentNode&&i.parentNode.removeChild(i),this.menuElements.pop()}}positionMenu(e,t,i,o){var n,r,a,l=Math.max(document.body.offsetHeight,window.innerHeight);t?(n=(a=s.elOffset(t)).left+t.offsetWidth,r=a.top-1):(n=i?o.touches[0].pageX:o.pageX,r=i?o.touches[0].pageY:o.pageY,this.positionReversedX=!1),e.style.top=r+"px",e.style.left=n+"px",setTimeout((()=>{this.table.rowManager.element.addEventListener("scroll",this.blurEvent),document.body.addEventListener("click",this.blurEvent),document.body.addEventListener("contextmenu",this.blurEvent),window.addEventListener("resize",this.blurEvent),document.body.addEventListener("keydown",this.escEvent)}),100),document.body.appendChild(e),r+e.offsetHeight>=l&&(e.style.top="",e.style.bottom=t?l-a.top-t.offsetHeight-1+"px":l-r+"px"),(n+e.offsetWidth>=document.body.offsetWidth||this.positionReversedX)&&(e.style.left="",e.style.right=t?document.documentElement.offsetWidth-a.left+"px":document.documentElement.offsetWidth-n+"px",this.positionReversedX=!0)}isOpen(){return!!this.menuElements.length}escMenu(e){27==e.keyCode&&this.hideMenu()}hideMenu(){this.menuElements.forEach((e=>{e.parentNode&&e.parentNode.removeChild(e)})),document.body.removeEventListener("keydown",this.escEvent),document.body.removeEventListener("click",this.blurEvent),document.body.removeEventListener("contextmenu",this.blurEvent),window.removeEventListener("resize",this.blurEvent),this.table.rowManager.element.removeEventListener("scroll",this.blurEvent)}}W.moduleName="menu";class G extends t{constructor(e){super(e),this.placeholderElement=this.createPlaceholderElement(),this.hoverElement=!1,this.checkTimeout=!1,this.checkPeriod=250,this.moving=!1,this.toCol=!1,this.toColAfter=!1,this.startX=0,this.autoScrollMargin=40,this.autoScrollStep=5,this.autoScrollTimeout=!1,this.touchMove=!1,this.moveHover=this.moveHover.bind(this),this.endMove=this.endMove.bind(this),this.registerTableOption("movableColumns",!1)}createPlaceholderElement(){var e=document.createElement("div");return e.classList.add("tabulator-col"),e.classList.add("tabulator-col-placeholder"),e}initialize(){this.subscribe("column-init",this.initializeColumn.bind(this))}initializeColumn(e){var t,i=this,o={};e.modules.frozen||(t=e.getElement(),o.mousemove=function(o){e.parent===i.moving.parent&&((i.touchMove?o.touches[0].pageX:o.pageX)-s.elOffset(t).left+i.table.columnManager.element.scrollLeft>e.getWidth()/2?i.toCol===e&&i.toColAfter||(t.parentNode.insertBefore(i.placeholderElement,t.nextSibling),i.moveColumn(e,!0)):(i.toCol!==e||i.toColAfter)&&(t.parentNode.insertBefore(i.placeholderElement,t),i.moveColumn(e,!1)))}.bind(i),t.addEventListener("mousedown",(function(t){i.touchMove=!1,1===t.which&&(i.checkTimeout=setTimeout((function(){i.startMove(t,e)}),i.checkPeriod))})),t.addEventListener("mouseup",(function(e){1===e.which&&i.checkTimeout&&clearTimeout(i.checkTimeout)})),i.bindTouchEvents(e)),e.modules.moveColumn=o}bindTouchEvents(e){var t,i,s,o,n,r,a=e.getElement(),l=!1;a.addEventListener("touchstart",(a=>{this.checkTimeout=setTimeout((()=>{this.touchMove=!0,t=e.nextColumn(),s=t?t.getWidth()/2:0,i=e.prevColumn(),o=i?i.getWidth()/2:0,n=0,r=0,l=!1,this.startMove(a,e)}),this.checkPeriod)}),{passive:!0}),a.addEventListener("touchmove",(a=>{var h,d;this.moving&&(this.moveHover(a),l||(l=a.touches[0].pageX),(h=a.touches[0].pageX-l)>0?t&&h-n>s&&(d=t)!==e&&(l=a.touches[0].pageX,d.getElement().parentNode.insertBefore(this.placeholderElement,d.getElement().nextSibling),this.moveColumn(d,!0)):i&&-h-r>o&&(d=i)!==e&&(l=a.touches[0].pageX,d.getElement().parentNode.insertBefore(this.placeholderElement,d.getElement()),this.moveColumn(d,!1)),d&&(t=d.nextColumn(),n=s,s=t?t.getWidth()/2:0,i=d.prevColumn(),r=o,o=i?i.getWidth()/2:0))}),{passive:!0}),a.addEventListener("touchend",(e=>{this.checkTimeout&&clearTimeout(this.checkTimeout),this.moving&&this.endMove(e)}))}startMove(e,t){var i=t.getElement();this.moving=t,this.startX=(this.touchMove?e.touches[0].pageX:e.pageX)-s.elOffset(i).left,this.table.element.classList.add("tabulator-block-select"),this.placeholderElement.style.width=t.getWidth()+"px",this.placeholderElement.style.height=t.getHeight()+"px",i.parentNode.insertBefore(this.placeholderElement,i),i.parentNode.removeChild(i),this.hoverElement=i.cloneNode(!0),this.hoverElement.classList.add("tabulator-moving"),this.table.columnManager.getElement().appendChild(this.hoverElement),this.hoverElement.style.left="0",this.hoverElement.style.bottom="0",this.touchMove||(this._bindMouseMove(),document.body.addEventListener("mousemove",this.moveHover),document.body.addEventListener("mouseup",this.endMove)),this.moveHover(e)}_bindMouseMove(){this.table.columnManager.columnsByIndex.forEach((function(e){e.modules.moveColumn.mousemove&&e.getElement().addEventListener("mousemove",e.modules.moveColumn.mousemove)}))}_unbindMouseMove(){this.table.columnManager.columnsByIndex.forEach((function(e){e.modules.moveColumn.mousemove&&e.getElement().removeEventListener("mousemove",e.modules.moveColumn.mousemove)}))}moveColumn(e,t){var i=this.moving.getCells();this.toCol=e,this.toColAfter=t,t?e.getCells().forEach((function(e,t){var s=e.getElement(!0);s.parentNode.insertBefore(i[t].getElement(),s.nextSibling)})):e.getCells().forEach((function(e,t){var s=e.getElement(!0);s.parentNode.insertBefore(i[t].getElement(),s)}))}endMove(e){(1===e.which||this.touchMove)&&(this._unbindMouseMove(),this.placeholderElement.parentNode.insertBefore(this.moving.getElement(),this.placeholderElement.nextSibling),this.placeholderElement.parentNode.removeChild(this.placeholderElement),this.hoverElement.parentNode.removeChild(this.hoverElement),this.table.element.classList.remove("tabulator-block-select"),this.toCol&&this.table.columnManager.moveColumnActual(this.moving,this.toCol,this.toColAfter),this.moving=!1,this.toCol=!1,this.toColAfter=!1,this.touchMove||(document.body.removeEventListener("mousemove",this.moveHover),document.body.removeEventListener("mouseup",this.endMove)))}moveHover(e){var t,i=this.table.columnManager.getElement(),o=i.scrollLeft,n=(this.touchMove?e.touches[0].pageX:e.pageX)-s.elOffset(i).left+o;this.hoverElement.style.left=n-this.startX+"px",n-o{t=Math.max(0,o-5),this.table.rowManager.getElement().scrollLeft=t,this.autoScrollTimeout=!1}),1))),o+i.clientWidth-n{t=Math.min(i.clientWidth,o+5),this.table.rowManager.getElement().scrollLeft=t,this.autoScrollTimeout=!1}),1)))}}G.moduleName="moveColumn";class j extends t{constructor(e){super(e),this.placeholderElement=this.createPlaceholderElement(),this.hoverElement=!1,this.checkTimeout=!1,this.checkPeriod=150,this.moving=!1,this.toRow=!1,this.toRowAfter=!1,this.hasHandle=!1,this.startY=0,this.startX=0,this.moveHover=this.moveHover.bind(this),this.endMove=this.endMove.bind(this),this.tableRowDropEvent=!1,this.touchMove=!1,this.connection=!1,this.connectionSelectorsTables=!1,this.connectionSelectorsElements=!1,this.connectionElements=[],this.connections=[],this.connectedTable=!1,this.connectedRow=!1,this.registerTableOption("movableRows",!1),this.registerTableOption("movableRowsConnectedTables",!1),this.registerTableOption("movableRowsConnectedElements",!1),this.registerTableOption("movableRowsSender",!1),this.registerTableOption("movableRowsReceiver","insert"),this.registerColumnOption("rowHandle")}createPlaceholderElement(){var e=document.createElement("div");return e.classList.add("tabulator-row"),e.classList.add("tabulator-row-placeholder"),e}initialize(){this.table.options.movableRows&&(this.connectionSelectorsTables=this.table.options.movableRowsConnectedTables,this.connectionSelectorsElements=this.table.options.movableRowsConnectedElements,this.connection=this.connectionSelectorsTables||this.connectionSelectorsElements,this.subscribe("cell-init",this.initializeCell.bind(this)),this.subscribe("column-init",this.initializeColumn.bind(this)),this.subscribe("row-init",this.initializeRow.bind(this)))}initializeGroupHeader(e){var t=this,i={};i.mouseup=function(e){t.tableRowDrop(e,row)}.bind(t),i.mousemove=function(i){var o;i.pageY-s.elOffset(e.element).top+t.table.rowManager.element.scrollTop>e.getHeight()/2?t.toRow===e&&t.toRowAfter||((o=e.getElement()).parentNode.insertBefore(t.placeholderElement,o.nextSibling),t.moveRow(e,!0)):(t.toRow!==e||t.toRowAfter)&&(o=e.getElement()).previousSibling&&(o.parentNode.insertBefore(t.placeholderElement,o),t.moveRow(e,!1))}.bind(t),e.modules.moveRow=i}initializeRow(e){var t,i=this,o={};o.mouseup=function(t){i.tableRowDrop(t,e)}.bind(i),o.mousemove=function(t){var o=e.getElement();t.pageY-s.elOffset(o).top+i.table.rowManager.element.scrollTop>e.getHeight()/2?i.toRow===e&&i.toRowAfter||(o.parentNode.insertBefore(i.placeholderElement,o.nextSibling),i.moveRow(e,!0)):(i.toRow!==e||i.toRowAfter)&&(o.parentNode.insertBefore(i.placeholderElement,o),i.moveRow(e,!1))}.bind(i),this.hasHandle||((t=e.getElement()).addEventListener("mousedown",(function(t){1===t.which&&(i.checkTimeout=setTimeout((function(){i.startMove(t,e)}),i.checkPeriod))})),t.addEventListener("mouseup",(function(e){1===e.which&&i.checkTimeout&&clearTimeout(i.checkTimeout)})),this.bindTouchEvents(e,e.getElement())),e.modules.moveRow=o}initializeColumn(e){e.definition.rowHandle&&!1!==this.table.options.movableRows&&(this.hasHandle=!0)}initializeCell(e){if(e.column.definition.rowHandle&&!1!==this.table.options.movableRows){var t=this,i=e.getElement(!0);i.addEventListener("mousedown",(function(i){1===i.which&&(t.checkTimeout=setTimeout((function(){t.startMove(i,e.row)}),t.checkPeriod))})),i.addEventListener("mouseup",(function(e){1===e.which&&t.checkTimeout&&clearTimeout(t.checkTimeout)})),this.bindTouchEvents(e.row,i)}}bindTouchEvents(e,t){var i,s,o,n,r,a,l=!1;t.addEventListener("touchstart",(t=>{this.checkTimeout=setTimeout((()=>{this.touchMove=!0,i=e.nextRow(),o=i?i.getHeight()/2:0,s=e.prevRow(),n=s?s.getHeight()/2:0,r=0,a=0,l=!1,this.startMove(t,e)}),this.checkPeriod)}),{passive:!0}),this.moving,this.toRow,this.toRowAfter,t.addEventListener("touchmove",(t=>{var h,d;this.moving&&(t.preventDefault(),this.moveHover(t),l||(l=t.touches[0].pageY),(h=t.touches[0].pageY-l)>0?i&&h-r>o&&(d=i)!==e&&(l=t.touches[0].pageY,d.getElement().parentNode.insertBefore(this.placeholderElement,d.getElement().nextSibling),this.moveRow(d,!0)):s&&-h-a>n&&(d=s)!==e&&(l=t.touches[0].pageY,d.getElement().parentNode.insertBefore(this.placeholderElement,d.getElement()),this.moveRow(d,!1)),d&&(i=d.nextRow(),r=o,o=i?i.getHeight()/2:0,s=d.prevRow(),a=n,n=s?s.getHeight()/2:0))})),t.addEventListener("touchend",(e=>{this.checkTimeout&&clearTimeout(this.checkTimeout),this.moving&&(this.endMove(e),this.touchMove=!1)}))}_bindMouseMove(){this.table.rowManager.getDisplayRows().forEach((e=>{"row"!==e.type&&"group"!==e.type||!e.modules.moveRow.mousemove||e.getElement().addEventListener("mousemove",e.modules.moveRow.mousemove)}))}_unbindMouseMove(){this.table.rowManager.getDisplayRows().forEach((e=>{"row"!==e.type&&"group"!==e.type||!e.modules.moveRow.mousemove||e.getElement().removeEventListener("mousemove",e.modules.moveRow.mousemove)}))}startMove(e,t){var i=t.getElement();this.setStartPosition(e,t),this.moving=t,this.table.element.classList.add("tabulator-block-select"),this.placeholderElement.style.width=t.getWidth()+"px",this.placeholderElement.style.height=t.getHeight()+"px",this.connection?(this.table.element.classList.add("tabulator-movingrow-sending"),this.connectToTables(t)):(i.parentNode.insertBefore(this.placeholderElement,i),i.parentNode.removeChild(i)),this.hoverElement=i.cloneNode(!0),this.hoverElement.classList.add("tabulator-moving"),this.connection?(document.body.appendChild(this.hoverElement),this.hoverElement.style.left="0",this.hoverElement.style.top="0",this.hoverElement.style.width=this.table.element.clientWidth+"px",this.hoverElement.style.whiteSpace="nowrap",this.hoverElement.style.overflow="hidden",this.hoverElement.style.pointerEvents="none"):(this.table.rowManager.getTableElement().appendChild(this.hoverElement),this.hoverElement.style.left="0",this.hoverElement.style.top="0",this._bindMouseMove()),document.body.addEventListener("mousemove",this.moveHover),document.body.addEventListener("mouseup",this.endMove),this.moveHover(e)}setStartPosition(e,t){var i,s,o=this.touchMove?e.touches[0].pageX:e.pageX,n=this.touchMove?e.touches[0].pageY:e.pageY;i=t.getElement(),this.connection?(s=i.getBoundingClientRect(),this.startX=s.left-o+window.pageXOffset,this.startY=s.top-n+window.pageYOffset):this.startY=n-i.getBoundingClientRect().top}endMove(e){e&&1!==e.which&&!this.touchMove||(this._unbindMouseMove(),this.connection||(this.placeholderElement.parentNode.insertBefore(this.moving.getElement(),this.placeholderElement.nextSibling),this.placeholderElement.parentNode.removeChild(this.placeholderElement)),this.hoverElement.parentNode.removeChild(this.hoverElement),this.table.element.classList.remove("tabulator-block-select"),this.toRow&&this.table.rowManager.moveRow(this.moving,this.toRow,this.toRowAfter),this.moving=!1,this.toRow=!1,this.toRowAfter=!1,document.body.removeEventListener("mousemove",this.moveHover),document.body.removeEventListener("mouseup",this.endMove),this.connection&&(this.table.element.classList.remove("tabulator-movingrow-sending"),this.disconnectFromTables()))}moveRow(e,t){this.toRow=e,this.toRowAfter=t}moveHover(e){this.connection?this.moveHoverConnections.call(this,e):this.moveHoverTable.call(this,e)}moveHoverTable(e){var t=this.table.rowManager.getElement(),i=t.scrollTop,s=(this.touchMove?e.touches[0].pageY:e.pageY)-t.getBoundingClientRect().top+i;this.hoverElement.style.top=s-this.startY+"px"}moveHoverConnections(e){this.hoverElement.style.left=this.startX+(this.touchMove?e.touches[0].pageX:e.pageX)+"px",this.hoverElement.style.top=this.startY+(this.touchMove?e.touches[0].pageY:e.pageY)+"px"}elementRowDrop(e,t,i){this.table.options.movableRowsElementDrop&&this.dispatchExternal("movableRowsElementDrop",e,t,!!i&&i.getComponent())}connectToTables(e){var t;this.connectionSelectorsTables&&(t=this.commsConnections(this.connectionSelectorsTables),this.dispatchExternal("movableRowsSendingStart",t),this.commsSend(this.connectionSelectorsTables,"moveRow","connect",{row:e})),this.connectionSelectorsElements&&(this.connectionElements=[],Array.isArray(this.connectionSelectorsElements)||(this.connectionSelectorsElements=[this.connectionSelectorsElements]),this.connectionSelectorsElements.forEach((e=>{"string"==typeof e?this.connectionElements=this.connectionElements.concat(Array.prototype.slice.call(document.querySelectorAll(e))):this.connectionElements.push(e)})),this.connectionElements.forEach((e=>{var t=t=>{this.elementRowDrop(t,e,this.moving)};e.addEventListener("mouseup",t),e.tabulatorElementDropEvent=t,e.classList.add("tabulator-movingrow-receiving")})))}disconnectFromTables(){var e;this.connectionSelectorsTables&&(e=this.commsConnections(this.connectionSelectorsTables),this.dispatchExternal("movableRowsSendingStop",e),this.commsSend(this.connectionSelectorsTables,"moveRow","disconnect")),this.connectionElements.forEach((e=>{e.classList.remove("tabulator-movingrow-receiving"),e.removeEventListener("mouseup",e.tabulatorElementDropEvent),delete e.tabulatorElementDropEvent}))}connect(e,t){return this.connectedTable?(console.warn("Move Row Error - Table cannot accept connection, already connected to table:",this.connectedTable),!1):(this.connectedTable=e,this.connectedRow=t,this.table.element.classList.add("tabulator-movingrow-receiving"),this.table.rowManager.getDisplayRows().forEach((e=>{"row"===e.type&&e.modules.moveRow&&e.modules.moveRow.mouseup&&e.getElement().addEventListener("mouseup",e.modules.moveRow.mouseup)})),this.tableRowDropEvent=this.tableRowDrop.bind(this),this.table.element.addEventListener("mouseup",this.tableRowDropEvent),this.dispatchExternal("movableRowsReceivingStart",t,e),!0)}disconnect(e){e===this.connectedTable?(this.connectedTable=!1,this.connectedRow=!1,this.table.element.classList.remove("tabulator-movingrow-receiving"),this.table.rowManager.getDisplayRows().forEach((e=>{"row"===e.type&&e.modules.moveRow&&e.modules.moveRow.mouseup&&e.getElement().removeEventListener("mouseup",e.modules.moveRow.mouseup)})),this.table.element.removeEventListener("mouseup",this.tableRowDropEvent),this.dispatchExternal("movableRowsReceivingStop",e)):console.warn("Move Row Error - trying to disconnect from non connected table")}dropComplete(e,t,i){var s=!1;if(i){switch(typeof this.table.options.movableRowsSender){case"string":s=this.senders[this.table.options.movableRowsSender];break;case"function":s=this.table.options.movableRowsSender}s?s.call(this,this.moving.getComponent(),t?t.getComponent():void 0,e):this.table.options.movableRowsSender&&console.warn("Mover Row Error - no matching sender found:",this.table.options.movableRowsSender),this.dispatchExternal("movableRowsSent",this.moving.getComponent(),t?t.getComponent():void 0,e)}else this.dispatchExternal("movableRowsSentFailed",this.moving.getComponent(),t?t.getComponent():void 0,e);this.endMove()}tableRowDrop(e,t){var i=!1,s=!1;switch(e.stopImmediatePropagation(),typeof this.table.options.movableRowsReceiver){case"string":i=this.receivers[this.table.options.movableRowsReceiver];break;case"function":i=this.table.options.movableRowsReceiver}i?s=i.call(this,this.connectedRow.getComponent(),t?t.getComponent():void 0,this.connectedTable):console.warn("Mover Row Error - no matching receiver found:",this.table.options.movableRowsReceiver),s?this.dispatchExternal("movableRowsReceived",this.connectedRow.getComponent(),t?t.getComponent():void 0,this.connectedTable):this.dispatchExternal("movableRowsReceivedFailed",this.connectedRow.getComponent(),t?t.getComponent():void 0,this.connectedTable),this.commsSend(this.connectedTable,"moveRow","dropcomplete",{row:t,success:s})}commsReceived(e,t,i){switch(t){case"connect":return this.connect(e,i.row);case"disconnect":return this.disconnect(e);case"dropcomplete":return this.dropComplete(e,i.row,i.success)}}}j.prototype.receivers={insert:function(e,t,i){return this.table.addRow(e.getData(),void 0,t),!0},add:function(e,t,i){return this.table.addRow(e.getData()),!0},update:function(e,t,i){return!!t&&(t.update(e.getData()),!0)},replace:function(e,t,i){return!!t&&(this.table.addRow(e.getData(),void 0,t),t.delete(),!0)}},j.prototype.senders={delete:function(e,t,i){e.delete()}},j.moduleName="moveRow";class U extends t{constructor(e){super(e),this.allowedTypes=["","data","edit","clipboard"],this.enabled=!0,this.registerColumnOption("mutator"),this.registerColumnOption("mutatorParams"),this.registerColumnOption("mutatorData"),this.registerColumnOption("mutatorDataParams"),this.registerColumnOption("mutatorEdit"),this.registerColumnOption("mutatorEditParams"),this.registerColumnOption("mutatorClipboard"),this.registerColumnOption("mutatorClipboardParams")}initialize(){this.subscribe("cell-value-changing",this.transformCell.bind(this)),this.subscribe("column-layout",this.initializeColumn.bind(this)),this.subscribe("row-data-init-before",this.rowDataChanged.bind(this)),this.subscribe("row-data-changing",this.rowDataChanged.bind(this))}rowDataChanged(e,t,i){return this.transformRow(t,"data",i)}initializeColumn(e){var t=!1,i={};this.allowedTypes.forEach((s=>{var o,n="mutator"+(s.charAt(0).toUpperCase()+s.slice(1));e.definition[n]&&(o=this.lookupMutator(e.definition[n]))&&(t=!0,i[n]={mutator:o,params:e.definition[n+"Params"]||{}})})),t&&(e.modules.mutate=i)}lookupMutator(e){var t=!1;switch(typeof e){case"string":U.mutators[e]?t=U.mutators[e]:console.warn("Mutator Error - No such mutator found, ignoring: ",e);break;case"function":t=e}return t}transformRow(e,t,i){var s,o="mutator"+(t.charAt(0).toUpperCase()+t.slice(1));return this.enabled&&this.table.columnManager.traverse((n=>{var r,a,l;n.modules.mutate&&(r=n.modules.mutate[o]||n.modules.mutate.mutator||!1)&&(s=n.getFieldValue(void 0!==i?i:e),"data"!=t&&void 0===s||(l=n.getComponent(),a="function"==typeof r.params?r.params(s,e,t,l):r.params,n.setFieldValue(e,r.mutator(s,e,t,a,l))))})),e}transformCell(e,t){if(e.column.modules.mutate){var i=e.column.modules.mutate.mutatorEdit||e.column.modules.mutate.mutator||!1,s={};if(i)return s=Object.assign(s,e.row.getData()),e.column.setFieldValue(s,t),i.mutator(t,s,"edit",i.params,e.getComponent())}return t}enable(){this.enabled=!0}disable(){this.enabled=!1}}U.moduleName="mutator",U.mutators={};class X extends t{constructor(e){super(e),this.mode="local",this.progressiveLoad=!1,this.size=0,this.page=1,this.count=5,this.max=1,this.displayIndex=0,this.initialLoad=!0,this.dataChanging=!1,this.pageSizes=[],this.dataReceivedNames={},this.dataSentNames={},this.registerTableOption("pagination",!1),this.registerTableOption("paginationMode","local"),this.registerTableOption("paginationSize",!1),this.registerTableOption("paginationInitialPage",1),this.registerTableOption("paginationButtonCount",5),this.registerTableOption("paginationSizeSelector",!1),this.registerTableOption("paginationElement",!1),this.registerTableOption("paginationAddRow","page"),this.registerTableOption("progressiveLoad",!1),this.registerTableOption("progressiveLoadDelay",0),this.registerTableOption("progressiveLoadScrollMargin",0),this.registerTableFunction("setMaxPage",this.setMaxPage.bind(this)),this.registerTableFunction("setPage",this.setPage.bind(this)),this.registerTableFunction("setPageToRow",this.userSetPageToRow.bind(this)),this.registerTableFunction("setPageSize",this.userSetPageSize.bind(this)),this.registerTableFunction("getPageSize",this.getPageSize.bind(this)),this.registerTableFunction("previousPage",this.previousPage.bind(this)),this.registerTableFunction("nextPage",this.nextPage.bind(this)),this.registerTableFunction("getPage",this.getPage.bind(this)),this.registerTableFunction("getPageMax",this.getPageMax.bind(this)),this.registerComponentFunction("row","pageTo",this.setPageToRow.bind(this))}initialize(){this.table.options.pagination?(this.subscribe("row-deleted",this.rowsUpdated.bind(this)),this.subscribe("row-adding-position",this.rowAddingPosition.bind(this)),this.subscribe("row-added",this.rowsUpdated.bind(this)),this.subscribe("data-processed",this.initialLoadComplete.bind(this)),this.subscribe("table-built",this.calculatePageSizes.bind(this)),"remote"===this.table.options.paginationMode&&(this.subscribe("data-params",this.remotePageParams.bind(this)),this.subscribe("data-loaded",this._parseRemoteData.bind(this))),this.table.options.progressiveLoad&&console.error("Progressive Load Error - Pagination and progressive load cannot be used at the same time"),this.registerDisplayHandler(this.restOnRenderBefore.bind(this),40),this.registerDisplayHandler(this.getRows.bind(this),50),this.createElements(),this.initializePaginator()):this.table.options.progressiveLoad&&(this.subscribe("data-params",this.remotePageParams.bind(this)),this.subscribe("data-loaded",this._parseRemoteData.bind(this)),this.initializeProgressive(this.table.options.progressiveLoad),"scroll"===this.table.options.progressiveLoad&&this.subscribe("scroll-vertical",this.scrollVertical.bind(this)))}rowAddingPosition(e,t){var i,s=this.table.rowManager,o=s.getDisplayRows();return t?o.length?i=o[0]:s.activeRows.length&&(i=s.activeRows[s.activeRows.length-1],t=!1):o.length&&(i=o[o.length-1],t=!(o.length{var t=document.createElement("option");t.value=e,!0===e?this.langBind("pagination|all",(function(e){t.innerHTML=e})):t.innerHTML=e,this.pageSizeSelect.appendChild(t)})),this.pageSizeSelect.value=this.size}}initializePaginator(e){var t;e||(this.langBind("pagination|first",(e=>{this.firstBut.innerHTML=e})),this.langBind("pagination|first_title",(e=>{this.firstBut.setAttribute("aria-label",e),this.firstBut.setAttribute("title",e)})),this.langBind("pagination|prev",(e=>{this.prevBut.innerHTML=e})),this.langBind("pagination|prev_title",(e=>{this.prevBut.setAttribute("aria-label",e),this.prevBut.setAttribute("title",e)})),this.langBind("pagination|next",(e=>{this.nextBut.innerHTML=e})),this.langBind("pagination|next_title",(e=>{this.nextBut.setAttribute("aria-label",e),this.nextBut.setAttribute("title",e)})),this.langBind("pagination|last",(e=>{this.lastBut.innerHTML=e})),this.langBind("pagination|last_title",(e=>{this.lastBut.setAttribute("aria-label",e),this.lastBut.setAttribute("title",e)})),this.firstBut.addEventListener("click",(()=>{this.setPage(1)})),this.prevBut.addEventListener("click",(()=>{this.previousPage()})),this.nextBut.addEventListener("click",(()=>{this.nextPage()})),this.lastBut.addEventListener("click",(()=>{this.setPage(this.max)})),this.table.options.paginationElement&&(this.element=this.table.options.paginationElement),this.pageSizeSelect&&(t=document.createElement("label"),this.langBind("pagination|page_size",(e=>{this.pageSizeSelect.setAttribute("aria-label",e),this.pageSizeSelect.setAttribute("title",e),t.innerHTML=e})),this.element.appendChild(t),this.element.appendChild(this.pageSizeSelect),this.pageSizeSelect.addEventListener("change",(e=>{this.setPageSize("true"==this.pageSizeSelect.value||this.pageSizeSelect.value),this.setPage(1)}))),this.element.appendChild(this.firstBut),this.element.appendChild(this.prevBut),this.element.appendChild(this.pagesElement),this.element.appendChild(this.nextBut),this.element.appendChild(this.lastBut),this.table.options.paginationElement||e||this.table.footerManager.append(this.element,this),this.page=this.table.options.paginationInitialPage,this.count=this.table.options.paginationButtonCount,this.generatePageSizeSelectList()),this.mode=this.table.options.paginationMode}initializeProgressive(e){this.initializePaginator(!0),this.mode="progressive_"+e,this.progressiveLoad=!0}trackChanges(){this.dispatch("page-changed")}setDisplayIndex(e){this.displayIndex=e}getDisplayIndex(){return this.displayIndex}setMaxRows(e){this.max=e?!0===this.size?1:Math.ceil(e/this.size):1,this.page>this.max&&(this.page=this.max)}reset(e){this.initialLoad||("local"==this.mode||e)&&(this.page=1)}setMaxPage(e){e=parseInt(e),this.max=e||1,this.page>this.max&&(this.page=this.max,this.trigger())}setPage(e){switch(e){case"first":return this.setPage(1);case"prev":return this.previousPage();case"next":return this.nextPage();case"last":return this.setPage(this.max)}return(e=parseInt(e))>0&&e<=this.max||"local"!==this.mode?(this.page=e,this.trackChanges(),this.trigger()):(console.warn("Pagination Error - Requested page is out of range of 1 - "+this.max+":",e),Promise.reject())}setPageToRow(e){var t=this.table.rowManager.getDisplayRows(this.displayIndex-1).indexOf(e);if(t>-1){var i=!0===this.size?1:Math.ceil((t+1)/this.size);return this.setPage(i)}return console.warn("Pagination Error - Requested row is not visible"),Promise.reject()}setPageSize(e){!0!==e&&(e=parseInt(e)),e>0&&(this.size=e),this.pageSizeSelect&&this.generatePageSizeSelectList(),this.trackChanges()}_setPageButtons(){let e=Math.floor((this.count-1)/2),t=Math.ceil((this.count-1)/2),i=this.max-this.page+e+10&&e<=this.max&&this.pagesElement.appendChild(this._generatePageButton(e));this.footerRedraw()}_generatePageButton(e){var t=document.createElement("button");return t.classList.add("tabulator-page"),e==this.page&&t.classList.add("active"),t.setAttribute("type","button"),t.setAttribute("role","button"),this.langBind("pagination|page_title",(i=>{t.setAttribute("aria-label",i+" "+e),t.setAttribute("title",i+" "+e)})),t.setAttribute("data-page",e),t.textContent=e,t.addEventListener("click",(t=>{this.setPage(e)})),t}previousPage(){return this.page>1?(this.page--,this.trackChanges(),this.trigger()):(console.warn("Pagination Error - Previous page would be less than page 1:",0),Promise.reject())}nextPage(){return this.page{this.dataChanging=!1}));case"progressive_load":case"progressive_scroll":return this.reloadData(null,!0);default:return console.warn("Pagination Error - no such pagination mode:",this.mode),Promise.reject()}}_parseRemoteData(e){var t;if(void 0===e.last_page&&console.warn("Remote Pagination Error - Server response missing '"+this.dataReceivedNames.last_page+"' property"),e.data){if(this.max=parseInt(e.last_page)||1,this.progressiveLoad){switch(this.mode){case"progressive_load":1==this.page?this.table.rowManager.setData(e.data,!1,1==this.page):this.table.rowManager.addRows(e.data),this.page{this.nextPage()}),this.table.options.progressiveLoadDelay);break;case"progressive_scroll":e=this.table.rowManager.getData().concat(e.data),this.table.rowManager.setData(e,1!==this.page,1==this.page),t=this.table.options.progressiveLoadScrollMargin||2*this.table.rowManager.element.clientHeight,this.table.rowManager.element.scrollHeight<=this.table.rowManager.element.clientHeight+t&&setTimeout((()=>{this.nextPage()}))}return!1}this.dispatchExternal("pageLoaded",this.getPage())}else console.warn("Remote Pagination Error - Server response missing '"+this.dataReceivedNames.data+"' property");return e.data}footerRedraw(){var e=this.table.footerManager.element;Math.ceil(e.clientWidth)-e.scrollWidth<0?this.pagesElement.style.display="none":(this.pagesElement.style.display="",Math.ceil(e.clientWidth)-e.scrollWidth<0&&(this.pagesElement.style.display="none"))}}X.moduleName="page";var Y={local:function(e,t){var i=localStorage.getItem(e+"-"+t);return!!i&&JSON.parse(i)},cookie:function(e,t){var i,s,o=document.cookie,n=e+"-"+t,r=o.indexOf(n+"=");return r>-1&&((i=(o=o.substr(r)).indexOf(";"))>-1&&(o=o.substr(0,i)),s=o.replace(n+"=","")),!!s&&JSON.parse(s)}},q={local:function(e,t,i){localStorage.setItem(e+"-"+t,JSON.stringify(i))},cookie:function(e,t,i){var s=new Date;s.setDate(s.getDate()+1e4),document.cookie=e+"-"+t+"="+JSON.stringify(i)+"; expires="+s.toUTCString()}};class K extends t{constructor(e){super(e),this.mode="",this.id="",this.defWatcherBlock=!1,this.config={},this.readFunc=!1,this.writeFunc=!1,this.registerTableOption("persistence",!1),this.registerTableOption("persistenceID",""),this.registerTableOption("persistenceMode",!0),this.registerTableOption("persistenceReaderFunc",!1),this.registerTableOption("persistenceWriterFunc",!1)}localStorageTest(){var e="_tabulator_test";try{return window.localStorage.setItem(e,e),window.localStorage.removeItem(e),!0}catch(e){return!1}}initialize(){if(this.table.options.persistence){var e,t=this.table.options.persistenceMode,i=this.table.options.persistenceID;this.mode=!0!==t?t:this.localStorageTest()?"local":"cookie",this.table.options.persistenceReaderFunc?"function"==typeof this.table.options.persistenceReaderFunc?this.readFunc=this.table.options.persistenceReaderFunc:K.readers[this.table.options.persistenceReaderFunc]?this.readFunc=K.readers[this.table.options.persistenceReaderFunc]:console.warn("Persistence Read Error - invalid reader set",this.table.options.persistenceReaderFunc):K.readers[this.mode]?this.readFunc=K.readers[this.mode]:console.warn("Persistence Read Error - invalid reader set",this.mode),this.table.options.persistenceWriterFunc?"function"==typeof this.table.options.persistenceWriterFunc?this.writeFunc=this.table.options.persistenceWriterFunc:K.writers[this.table.options.persistenceWriterFunc]?this.writeFunc=K.writers[this.table.options.persistenceWriterFunc]:console.warn("Persistence Write Error - invalid reader set",this.table.options.persistenceWriterFunc):K.writers[this.mode]?this.writeFunc=K.writers[this.mode]:console.warn("Persistence Write Error - invalid writer set",this.mode),this.id="tabulator-"+(i||this.table.element.getAttribute("id")||""),this.config={sort:!0===this.table.options.persistence||this.table.options.persistence.sort,filter:!0===this.table.options.persistence||this.table.options.persistence.filter,group:!0===this.table.options.persistence||this.table.options.persistence.group,page:!0===this.table.options.persistence||this.table.options.persistence.page,columns:!0===this.table.options.persistence?["title","width","visible"]:this.table.options.persistence.columns},this.config.page&&(e=this.retreiveData("page"))&&(void 0===e.paginationSize||!0!==this.config.page&&!this.config.page.size||(this.table.options.paginationSize=e.paginationSize),void 0===e.paginationInitialPage||!0!==this.config.page&&!this.config.page.page||(this.table.options.paginationInitialPage=e.paginationInitialPage)),this.config.group&&(e=this.retreiveData("group"))&&(void 0===e.groupBy||!0!==this.config.group&&!this.config.group.groupBy||(this.table.options.groupBy=e.groupBy),void 0===e.groupStartOpen||!0!==this.config.group&&!this.config.group.groupStartOpen||(this.table.options.groupStartOpen=e.groupStartOpen),void 0===e.groupHeader||!0!==this.config.group&&!this.config.group.groupHeader||(this.table.options.groupHeader=e.groupHeader)),this.config.columns&&(this.table.options.columns=this.load("columns",this.table.options.columns),this.subscribe("column-init",this.initializeColumn.bind(this)),this.subscribe("column-show",this.save.bind(this,"columns")),this.subscribe("column-hide",this.save.bind(this,"columns")),this.subscribe("column-moved",this.save.bind(this,"columns")),this.subscribe("table-built",this.tableBuilt.bind(this),0)),this.subscribe("table-redraw",this.tableRedraw.bind(this)),this.subscribe("filter-changed",this.eventSave.bind(this,"filter")),this.subscribe("sort-changed",this.eventSave.bind(this,"sort")),this.subscribe("group-changed",this.eventSave.bind(this,"group")),this.subscribe("page-changed",this.eventSave.bind(this,"page")),this.subscribe("column-resized",this.eventSave.bind(this,"columns")),this.subscribe("layout-refreshed",this.eventSave.bind(this,"columns"))}this.registerTableFunction("getColumnLayout",this.getColumnLayout.bind(this)),this.registerTableFunction("setColumnLayout",this.setColumnLayout.bind(this))}eventSave(e){this.config[e]&&this.save(e)}tableBuilt(){var e,t;this.table.options;this.config.sort&&!1==!(e=this.load("sort"))&&(this.table.initialSort=e),this.config.filter&&!1==!(t=this.load("filter"))&&(this.table.initialFilter=t)}tableRedraw(e){e&&this.config.columns&&this.save("columns")}getColumnLayout(){return this.parseColumns(this.table.columnManager.getColumns())}setColumnLayout(e){return this.table.columnManager.setColumns(this.mergeDefinition(this.table.options.columns,e)),!0}initializeColumn(e){var t;this.config.columns&&(this.defWatcherBlock=!0,t=e.getDefinition(),(!0===this.config.columns?Object.keys(t):this.config.columns).forEach((e=>{var i=Object.getOwnPropertyDescriptor(t,e),s=t[e];i&&Object.defineProperty(t,e,{set:function(e){s=e,this.defWatcherBlock||this.save("columns"),i.set&&i.set(e)},get:function(){return i.get&&i.get(),s}})})),this.defWatcherBlock=!1)}load(e,t){var i=this.retreiveData(e);return t&&(i=i?this.mergeDefinition(t,i):t),i}retreiveData(e){return!!this.readFunc&&this.readFunc(this.id,e)}mergeDefinition(e,t){var i=[];return(t=t||[]).forEach(((t,s)=>{var o,n=this._findColumn(e,t);n&&(!0===this.config.columns||null==this.config.columns?(o=Object.keys(n)).push("width"):o=this.config.columns,o.forEach((e=>{"columns"!==e&&void 0!==t[e]&&(n[e]=t[e])})),n.columns&&(n.columns=this.mergeDefinition(n.columns,t.columns)),i.push(n))})),e.forEach(((e,s)=>{this._findColumn(t,e)||(i.length>s?i.splice(s,0,e):i.push(e))})),i}_findColumn(e,t){var i=t.columns?"group":t.field?"field":"object";return e.find((function(e){switch(i){case"group":return e.title===t.title&&e.columns.length===t.columns.length;case"field":return e.field===t.field;case"object":return e===t}}))}save(e){var t={};switch(e){case"columns":t=this.parseColumns(this.table.columnManager.getColumns());break;case"filter":t=this.table.modules.filter.getFilters();break;case"sort":t=this.validateSorters(this.table.modules.sort.getSort());break;case"group":t=this.getGroupConfig();break;case"page":t=this.getPageConfig()}this.writeFunc&&this.writeFunc(this.id,e,t)}validateSorters(e){return e.forEach((function(e){e.column=e.field,delete e.field})),e}getGroupConfig(){var e={};return this.config.group&&((!0===this.config.group||this.config.group.groupBy)&&(e.groupBy=this.table.options.groupBy),(!0===this.config.group||this.config.group.groupStartOpen)&&(e.groupStartOpen=this.table.options.groupStartOpen),(!0===this.config.group||this.config.group.groupHeader)&&(e.groupHeader=this.table.options.groupHeader)),e}getPageConfig(){var e={};return this.config.page&&((!0===this.config.page||this.config.page.size)&&(e.paginationSize=this.table.modules.page.getPageSize()),(!0===this.config.page||this.config.page.page)&&(e.paginationInitialPage=this.table.modules.page.getPage())),e}parseColumns(e){var t=[],i=["headerContextMenu","headerMenu","contextMenu","clickMenu"];return e.forEach((e=>{var s,o={},n=e.getDefinition();e.isGroup?(o.title=n.title,o.columns=this.parseColumns(e.getColumns())):(o.field=e.getField(),!0===this.config.columns||null==this.config.columns?(s=Object.keys(n)).push("width"):s=this.config.columns,s.forEach((t=>{switch(t){case"width":o.width=e.getWidth();break;case"visible":o.visible=e.visible;break;default:"function"!=typeof n[t]&&-1===i.indexOf(t)&&(o[t]=n[t])}}))),t.push(o)})),t}}K.moduleName="persistence",K.readers=Y,K.writers=q;class J extends t{constructor(e){super(e),this.element=!1,this.manualBlock=!1,this.registerTableOption("printAsHtml",!1),this.registerTableOption("printFormatter",!1),this.registerTableOption("printHeader",!1),this.registerTableOption("printFooter",!1),this.registerTableOption("printStyled",!0),this.registerTableOption("printRowRange","visible"),this.registerTableOption("printConfig",{}),this.registerColumnOption("print"),this.registerColumnOption("titlePrint")}initialize(){this.table.options.printAsHtml&&(window.addEventListener("beforeprint",this.replaceTable.bind(this)),window.addEventListener("afterprint",this.cleanup.bind(this))),this.registerTableFunction("print",this.printFullscreen.bind(this))}replaceTable(){this.manualBlock||(this.element=document.createElement("div"),this.element.classList.add("tabulator-print-table"),this.element.appendChild(this.table.modules.export.genereateTable(this.table.options.printConfig,this.table.options.printStyled,this.table.options.printRowRange,"print")),this.table.element.style.display="none",this.table.element.parentNode.insertBefore(this.element,this.table.element))}cleanup(){document.body.classList.remove("tabulator-print-fullscreen-hide"),this.element&&this.element.parentNode&&(this.element.parentNode.removeChild(this.element),this.table.element.style.display="")}printFullscreen(e,t,i){var s,o,n=window.scrollX,r=window.scrollY,a=document.createElement("div"),l=document.createElement("div"),h=this.table.modules.export.genereateTable(void 0!==i?i:this.table.options.printConfig,void 0!==t?t:this.table.options.printStyled,e||this.table.options.printRowRange,"print");this.manualBlock=!0,this.element=document.createElement("div"),this.element.classList.add("tabulator-print-fullscreen"),this.table.options.printHeader&&(a.classList.add("tabulator-print-header"),"string"==typeof(s="function"==typeof this.table.options.printHeader?this.table.options.printHeader.call(this.table):this.table.options.printHeader)?a.innerHTML=s:a.appendChild(s),this.element.appendChild(a)),this.element.appendChild(h),this.table.options.printFooter&&(l.classList.add("tabulator-print-footer"),"string"==typeof(o="function"==typeof this.table.options.printFooter?this.table.options.printFooter.call(this.table):this.table.options.printFooter)?l.innerHTML=o:l.appendChild(o),this.element.appendChild(l)),document.body.classList.add("tabulator-print-fullscreen-hide"),document.body.appendChild(this.element),this.table.options.printFormatter&&this.table.options.printFormatter(this.element,h),window.print(),this.cleanup(),window.scrollTo(n,r),this.manualBlock=!1}}J.moduleName="print";class $ extends t{constructor(e){super(e),this.data=!1,this.blocked=!1,this.origFuncs={},this.currentVersion=0,this.registerTableOption("reactiveData",!1)}initialize(){this.table.options.reactiveData&&(this.subscribe("cell-value-save-before",this.block.bind(this)),this.subscribe("cell-value-save-after",this.unblock.bind(this)),this.subscribe("row-data-save-before",this.block.bind(this)),this.subscribe("row-data-save-after",this.unblock.bind(this)),this.subscribe("row-data-init-after",this.watchRow.bind(this)),this.subscribe("data-processing",this.watchData.bind(this)),this.subscribe("data-processing",this.watchData.bind(this)),this.subscribe("table-destroy",this.unwatchData.bind(this)))}watchData(e){var t,i=this;this.currentVersion++,t=this.currentVersion,i.unwatchData(),i.data=e,i.origFuncs.push=e.push,Object.defineProperty(i.data,"push",{enumerable:!1,configurable:!0,value:function(){var s=Array.from(arguments);return i.blocked||t!==i.currentVersion||s.forEach((function(e){i.table.rowManager.addRowActual(e,!1)})),i.origFuncs.push.apply(e,arguments)}}),i.origFuncs.unshift=e.unshift,Object.defineProperty(i.data,"unshift",{enumerable:!1,configurable:!0,value:function(){var s=Array.from(arguments);return i.blocked||t!==i.currentVersion||s.forEach((function(e){i.table.rowManager.addRowActual(e,!0)})),i.origFuncs.unshift.apply(e,arguments)}}),i.origFuncs.shift=e.shift,Object.defineProperty(i.data,"shift",{enumerable:!1,configurable:!0,value:function(){var s;return i.blocked||t!==i.currentVersion||i.data.length&&(s=i.table.rowManager.getRowFromDataObject(i.data[0]))&&s.deleteActual(),i.origFuncs.shift.call(e)}}),i.origFuncs.pop=e.pop,Object.defineProperty(i.data,"pop",{enumerable:!1,configurable:!0,value:function(){var s;return i.blocked||t!==i.currentVersion||i.data.length&&(s=i.table.rowManager.getRowFromDataObject(i.data[i.data.length-1]))&&s.deleteActual(),i.origFuncs.pop.call(e)}}),i.origFuncs.splice=e.splice,Object.defineProperty(i.data,"splice",{enumerable:!1,configurable:!0,value:function(){var s,o=Array.from(arguments),n=o[0]<0?e.length+o[0]:o[0],r=o[1],a=!!o[2]&&o.slice(2);if(!i.blocked&&t===i.currentVersion){if(a&&((s=!!e[n]&&i.table.rowManager.getRowFromDataObject(e[n]))?a.forEach((function(e){i.table.rowManager.addRowActual(e,!0,s,!0)})):(a=a.slice().reverse()).forEach((function(e){i.table.rowManager.addRowActual(e,!0,!1,!0)}))),0!==r){var l=e.slice(n,void 0===o[1]?o[1]:n+r);l.forEach((function(e,t){var s=i.table.rowManager.getRowFromDataObject(e);s&&s.deleteActual(t!==l.length-1)}))}(a||0!==r)&&i.table.rowManager.reRenderInPosition()}return i.origFuncs.splice.apply(e,arguments)}})}unwatchData(){if(!1!==this.data)for(var e in this.origFuncs)Object.defineProperty(this.data,e,{enumerable:!0,configurable:!0,writable:!0,value:this.origFuncs.key})}watchRow(e){var t=e.getData();for(var i in this.blocked=!0,t)this.watchKey(e,t,i);this.table.options.dataTree&&this.watchTreeChildren(e),this.blocked=!1}watchTreeChildren(e){var t=this,i=e.getData()[this.table.options.dataTreeChildField],s={};function o(){t.table.modules.dataTree.initializeRow(e),t.table.modules.dataTree.layoutRow(e),t.table.rowManager.refreshActiveData("tree",!1,!0)}i&&(s.push=i.push,Object.defineProperty(i,"push",{enumerable:!1,configurable:!0,value:function(){var e=s.push.apply(i,arguments);return o(),e}}),s.unshift=i.unshift,Object.defineProperty(i,"unshift",{enumerable:!1,configurable:!0,value:function(){var e=s.unshift.apply(i,arguments);return o(),e}}),s.shift=i.shift,Object.defineProperty(i,"shift",{enumerable:!1,configurable:!0,value:function(){var e=s.shift.call(i);return o(),e}}),s.pop=i.pop,Object.defineProperty(i,"pop",{enumerable:!1,configurable:!0,value:function(){var e=s.pop.call(i);return o(),e}}),s.splice=i.splice,Object.defineProperty(i,"splice",{enumerable:!1,configurable:!0,value:function(){var e=s.splice.apply(i,arguments);return o(),e}}))}watchKey(e,t,i){var s=this,o=Object.getOwnPropertyDescriptor(t,i),n=t[i],r=this.currentVersion;Object.defineProperty(t,i,{set:function(t){if(n=t,!s.blocked&&r===s.currentVersion){var a={};a[i]=t,e.updateData(a)}o.set&&o.set(t)},get:function(){return o.get&&o.get(),n}})}unwatchRow(e){var t=e.getData();for(var i in t)Object.defineProperty(t,i,{value:t[i]})}block(){this.blocked=!0}unblock(){this.blocked=!1}}$.moduleName="reactiveData";class Q extends t{constructor(e){super(e),this.startColumn=!1,this.startX=!1,this.startWidth=!1,this.handle=null,this.prevHandle=null,this.registerColumnOption("resizable",!0)}initialize(){this.subscribe("cell-layout",this.layoutCellHandles.bind(this)),this.subscribe("column-init",this.layoutColumnHeader.bind(this))}layoutCellHandles(e){"row"===e.row.type&&this.initializeColumn("cell",e.column,e.element)}layoutColumnHeader(e){this.initializeColumn("header",e,e.element)}initializeColumn(e,t,i){var s=this,o=!1,n=t.definition.resizable;if("header"===e&&(o="textarea"==t.definition.formatter||t.definition.variableHeight,t.modules.resize={variableHeight:o}),!0===n||n==e){var r=document.createElement("div");r.className="tabulator-col-resize-handle";var a=document.createElement("div");a.className="tabulator-col-resize-handle prev",r.addEventListener("click",(function(e){e.stopPropagation()}));var l=function(e){var i=t.getLastColumn();i&&s._checkResizability(i)&&(s.startColumn=t,s._mouseDown(e,i,r))};r.addEventListener("mousedown",l),r.addEventListener("touchstart",l,{passive:!0}),r.addEventListener("dblclick",(function(e){var i=t.getLastColumn();i&&s._checkResizability(i)&&(e.stopPropagation(),i.reinitializeWidth(!0))})),a.addEventListener("click",(function(e){e.stopPropagation()}));var h=function(e){var i,o,n;(i=t.getFirstColumn())&&(n=(o=s.table.columnManager.findColumnIndex(i))>0&&s.table.columnManager.getColumnByIndex(o-1))&&s._checkResizability(n)&&(s.startColumn=t,s._mouseDown(e,n,a))};a.addEventListener("mousedown",h),a.addEventListener("touchstart",h,{passive:!0}),a.addEventListener("dblclick",(function(e){var i,o,n;(i=t.getFirstColumn())&&(n=(o=s.table.columnManager.findColumnIndex(i))>0&&s.table.columnManager.getColumnByIndex(o-1))&&s._checkResizability(n)&&(e.stopPropagation(),n.reinitializeWidth(!0))})),i.appendChild(r),i.appendChild(a)}}_checkResizability(e){return e.definition.resizable}_mouseDown(e,t,i){var s=this;function o(e){s.table.rtl?t.setWidth(s.startWidth-((void 0===e.screenX?e.touches[0].screenX:e.screenX)-s.startX)):t.setWidth(s.startWidth+((void 0===e.screenX?e.touches[0].screenX:e.screenX)-s.startX)),s.table.columnManager.renderer.rerenderColumns(!0),!s.table.browserSlow&&t.modules.resize&&t.modules.resize.variableHeight&&t.checkCellHeights()}function n(e){s.startColumn.modules.edit&&(s.startColumn.modules.edit.blocked=!1),s.table.browserSlow&&t.modules.resize&&t.modules.resize.variableHeight&&t.checkCellHeights(),document.body.removeEventListener("mouseup",n),document.body.removeEventListener("mousemove",o),i.removeEventListener("touchmove",o),i.removeEventListener("touchend",n),s.table.element.classList.remove("tabulator-block-select"),s.dispatch("column-resized",t),s.table.externalEvents.dispatch("columnResized",t.getComponent())}s.table.element.classList.add("tabulator-block-select"),e.stopPropagation(),s.startColumn.modules.edit&&(s.startColumn.modules.edit.blocked=!0),s.startX=void 0===e.screenX?e.touches[0].screenX:e.screenX,s.startWidth=t.getWidth(),document.body.addEventListener("mousemove",o),document.body.addEventListener("mouseup",n),i.addEventListener("touchmove",o,{passive:!0}),i.addEventListener("touchend",n)}}Q.moduleName="resizeColumns";class Z extends t{constructor(e){super(e),this.startColumn=!1,this.startY=!1,this.startHeight=!1,this.handle=null,this.prevHandle=null,this.registerTableOption("resizableRows",!1)}initialize(){this.table.options.resizableRows&&this.subscribe("row-layout-after",this.initializeRow.bind(this))}initializeRow(e){var t=this,i=e.getElement(),s=document.createElement("div");s.className="tabulator-row-resize-handle";var o=document.createElement("div");o.className="tabulator-row-resize-handle prev",s.addEventListener("click",(function(e){e.stopPropagation()}));var n=function(i){t.startRow=e,t._mouseDown(i,e,s)};s.addEventListener("mousedown",n),s.addEventListener("touchstart",n,{passive:!0}),o.addEventListener("click",(function(e){e.stopPropagation()}));var r=function(i){var s=t.table.rowManager.prevDisplayRow(e);s&&(t.startRow=s,t._mouseDown(i,s,o))};o.addEventListener("mousedown",r),o.addEventListener("touchstart",r,{passive:!0}),i.appendChild(s),i.appendChild(o)}_mouseDown(e,t,i){var s=this;function o(e){t.setHeight(s.startHeight+((void 0===e.screenY?e.touches[0].screenY:e.screenY)-s.startY))}function n(e){document.body.removeEventListener("mouseup",o),document.body.removeEventListener("mousemove",o),i.removeEventListener("touchmove",o),i.removeEventListener("touchend",n),s.table.element.classList.remove("tabulator-block-select"),this.dispatchExternal("rowResized",t.getComponent())}s.table.element.classList.add("tabulator-block-select"),e.stopPropagation(),s.startY=void 0===e.screenY?e.touches[0].screenY:e.screenY,s.startHeight=t.getHeight(),document.body.addEventListener("mousemove",o),document.body.addEventListener("mouseup",n),i.addEventListener("touchmove",o,{passive:!0}),i.addEventListener("touchend",n)}}Z.moduleName="resizeRows";class ee extends t{constructor(e){super(e),this.binding=!1,this.observer=!1,this.containerObserver=!1,this.tableHeight=0,this.tableWidth=0,this.containerHeight=0,this.containerWidth=0,this.autoResize=!1,this.registerTableOption("autoResize",!0)}initialize(){if(this.table.options.autoResize){var e,t=this.table;this.tableHeight=t.element.clientHeight,this.tableWidth=t.element.clientWidth,t.element.parentNode&&(this.containerHeight=t.element.parentNode.clientHeight,this.containerWidth=t.element.parentNode.clientWidth),"undefined"!=typeof ResizeObserver&&"virtual"===t.rowManager.getRenderMode()?(this.autoResize=!0,this.observer=new ResizeObserver((e=>{if(!t.browserMobile||t.browserMobile&&!t.modules.edit.currentCell){var i=Math.floor(e[0].contentRect.height),s=Math.floor(e[0].contentRect.width);this.tableHeight==i&&this.tableWidth==s||(this.tableHeight=i,this.tableWidth=s,t.element.parentNode&&(this.containerHeight=t.element.parentNode.clientHeight,this.containerWidth=t.element.parentNode.clientWidth),this.table.columnManager.renderer.rerenderColumns(!0),t.redraw())}})),this.observer.observe(t.element),e=window.getComputedStyle(t.element),this.table.element.parentNode&&!this.table.rowManager.fixedHeight&&(e.getPropertyValue("max-height")||e.getPropertyValue("min-height"))&&(this.containerObserver=new ResizeObserver((e=>{if(!t.browserMobile||t.browserMobile&&!t.modules.edit.currentCell){var i=Math.floor(e[0].contentRect.height),s=Math.floor(e[0].contentRect.width);this.containerHeight==i&&this.containerWidth==s||(this.containerHeight=i,this.containerWidth=s,this.tableHeight=t.element.clientHeight,this.tableWidth=t.element.clientWidth),t.columnManager.renderer.rerenderColumns(!0),t.redraw()}})),this.containerObserver.observe(this.table.element.parentNode)),this.subscribe("table-resize",this.tableResized.bind(this))):(this.binding=function(){(!t.browserMobile||t.browserMobile&&!t.modules.edit.currentCell)&&(t.columnManager.renderer.rerenderColumns(!0),t.redraw())},window.addEventListener("resize",this.binding)),this.subscribe("table-destroy",this.clearBindings.bind(this))}}tableResized(){this.table.rowManager.redraw()}clearBindings(){this.binding&&window.removeEventListener("resize",this.binding),this.observer&&this.observer.unobserve(this.table.element),this.containerObserver&&this.containerObserver.unobserve(this.table.element.parentNode)}}ee.moduleName="resizeTable";class te extends t{constructor(e){super(e),this.columns=[],this.hiddenColumns=[],this.mode="",this.index=0,this.collapseFormatter=[],this.collapseStartOpen=!0,this.collapseHandleColumn=!1,this.registerTableOption("responsiveLayout",!1),this.registerTableOption("responsiveLayoutCollapseStartOpen",!0),this.registerTableOption("responsiveLayoutCollapseUseFormatters",!0),this.registerTableOption("responsiveLayoutCollapseFormatter",!1),this.registerColumnOption("responsive")}initialize(){this.table.options.responsiveLayout&&(this.subscribe("column-layout",this.initializeColumn.bind(this)),this.subscribe("column-show",this.updateColumnVisibility.bind(this)),this.subscribe("column-hide",this.updateColumnVisibility.bind(this)),this.subscribe("columns-loaded",this.initializeResponsivity.bind(this)),this.subscribe("column-moved",this.initializeResponsivity.bind(this)),this.subscribe("column-add",this.initializeResponsivity.bind(this)),this.subscribe("column-delete",this.initializeResponsivity.bind(this)),this.subscribe("table-redrawing",this.tableRedraw.bind(this)),"collapse"===this.table.options.responsiveLayout&&(this.subscribe("row-init",this.initializeRow.bind(this)),this.subscribe("row-layout",this.layoutRow.bind(this))))}tableRedraw(e){-1===["fitColumns","fitDataStretch"].indexOf(this.layoutMode())&&(e||this.update())}initializeResponsivity(){this.mode=this.table.options.responsiveLayout,this.collapseFormatter=this.table.options.responsiveLayoutCollapseFormatter||this.formatCollapsedData,this.collapseStartOpen=this.table.options.responsiveLayoutCollapseStartOpen,this.hiddenColumns=[],this.table.columnManager.columnsByIndex.forEach((function(e,t){e.modules.responsive&&e.modules.responsive.order&&e.modules.responsive.visible&&(e.modules.responsive.index=t,columns.push(e),e.visible||"collapse"!==self.mode||self.hiddenColumns.push(e))})),columns=columns.reverse(),columns=columns.sort((function(e,t){return t.modules.responsive.order-e.modules.responsive.order||t.modules.responsive.index-e.modules.responsive.index})),this.columns=columns,"collapse"===this.mode&&this.generateCollapsedContent();for(let e of this.table.columnManager.columnsByIndex)if("responsiveCollapse"==e.definition.formatter){this.collapseHandleColumn=e;break}this.collapseHandleColumn&&(this.hiddenColumns.length?this.collapseHandleColumn.show():this.collapseHandleColumn.hide())}initializeColumn(e){var t=e.getDefinition();e.modules.responsive={order:void 0===t.responsive?1:t.responsive,visible:!1!==t.visible}}initializeRow(e){var t;"calc"!==e.type&&((t=document.createElement("div")).classList.add("tabulator-responsive-collapse"),e.modules.responsiveLayout={element:t,open:this.collapseStartOpen},this.collapseStartOpen||(t.style.display="none"))}layoutRow(e){var t=e.getElement();e.modules.responsiveLayout&&(t.appendChild(e.modules.responsiveLayout.element),this.generateCollapsedRowContent(e))}updateColumnVisibility(e,t){!t&&e.modules.responsive&&(e.modules.responsive.visible=e.visible,this.initialize())}hideColumn(e){var t=this.hiddenColumns.length;e.hide(!1,!0),"collapse"===this.mode&&(this.hiddenColumns.unshift(e),this.generateCollapsedContent(),this.collapseHandleColumn&&!t&&this.collapseHandleColumn.show())}showColumn(e){var t;e.show(!1,!0),e.setWidth(e.getWidth()),"collapse"===this.mode&&((t=this.hiddenColumns.indexOf(e))>-1&&this.hiddenColumns.splice(t,1),this.generateCollapsedContent(),this.collapseHandleColumn&&!this.hiddenColumns.length&&this.collapseHandleColumn.hide())}update(){for(var e=this,t=!0;t;){let i="fitColumns"==e.table.modules.layout.getMode()?e.table.columnManager.getFlexBaseWidth():e.table.columnManager.getWidth(),s=(e.table.options.headerVisible?e.table.columnManager.element.clientWidth:e.table.element.clientWidth)-i;if(s<0){let i=e.columns[e.index];i?(e.hideColumn(i),e.index++):t=!1}else{let i=e.columns[e.index-1];i&&s>0&&s>=i.getWidth()?(e.showColumn(i),e.index--):t=!1}e.table.rowManager.activeRowsCount||e.table.rowManager.renderEmptyScroll()}}generateCollapsedContent(){var e=this;this.table.rowManager.getDisplayRows().forEach((function(t){e.generateCollapsedRowContent(t)}))}generateCollapsedRowContent(e){var t,i;if(e.modules.responsiveLayout){for(t=e.modules.responsiveLayout.element;t.firstChild;)t.removeChild(t.firstChild);(i=this.collapseFormatter(this.generateCollapsedRowData(e)))&&t.appendChild(i)}}generateCollapsedRowData(e){var t,i=this,s=e.getData(),o=[];return this.hiddenColumns.forEach((function(n){var r=n.getFieldValue(s);n.definition.title&&n.field&&(n.modules.format&&i.table.options.responsiveLayoutCollapseUseFormatters?(t={value:!1,data:{},getValue:function(){return r},getData:function(){return s},getElement:function(){return document.createElement("div")},getRow:function(){return e.getComponent()},getColumn:function(){return n.getComponent()}},o.push({field:n.field,title:n.definition.title,value:n.modules.format.formatter.call(i.table.modules.format,t,n.modules.format.params)})):o.push({field:n.field,title:n.definition.title,value:r}))})),o}formatCollapsedData(e){var t=document.createElement("table");return e.forEach((function(e){var i,s=document.createElement("tr"),o=document.createElement("td"),n=document.createElement("td"),r=document.createElement("strong");o.appendChild(r),this.langBind("columns|"+e.field,(function(t){r.innerText=t||e.title})),e.value instanceof Node?((i=document.createElement("div")).appendChild(e.value),n.appendChild(i)):n.innerHTML=e.value,s.appendChild(o),s.appendChild(n),t.appendChild(s)}),this),Object.keys(e).length?t:""}}te.moduleName="responsiveLayout";class ie extends t{constructor(e){super(e),this.selecting=!1,this.lastClickedRow=!1,this.selectPrev=[],this.selectedRows=[],this.headerCheckboxElement=null,this.registerTableOption("selectable","highlight"),this.registerTableOption("selectableRangeMode","drag"),this.registerTableOption("selectableRollingSelection",!0),this.registerTableOption("selectablePersistence",!0),this.registerTableOption("selectableCheck",(function(e,t){return!0})),this.registerTableFunction("selectRow",this.selectRows.bind(this)),this.registerTableFunction("deselectRow",this.deselectRows.bind(this)),this.registerTableFunction("toggleSelectRow",this.toggleRow.bind(this)),this.registerTableFunction("getSelectedRows",this.getSelectedRows.bind(this)),this.registerTableFunction("getSelectedData",this.getSelectedData.bind(this)),this.registerComponentFunction("row","select",this.selectRows.bind(this)),this.registerComponentFunction("row","deselect",this.deselectRows.bind(this)),this.registerComponentFunction("row","toggleSelect",this.toggleRow.bind(this)),this.registerComponentFunction("row","isSelected",this.isRowSelected.bind(this))}initialize(){!1!==this.table.options.selectable&&(this.subscribe("row-init",this.initializeRow.bind(this)),this.subscribe("row-deleting",this.rowDeleted.bind(this)),this.subscribe("rows-wipe",this.clearSelectionData.bind(this)),this.subscribe("rows-retrieve",this.clearSelectionData.bind(this)),this.table.options.selectable&&this.table.options.selectablePersistence&&this.subscribe("data-refeshing",this.deselectRows.bind(this)))}rowRetrieve(e,t){return"selected"===e?this.selectedRows:t}rowDeleted(e){this._deselectRow(e,!0)}clearSelectionData(e){this.selecting=!1,this.lastClickedRow=!1,this.selectPrev=[],this.selectedRows=[],!0!==e&&this._rowSelectionChanged()}initializeRow(e){var t=this,i=e.getElement(),s=function(){setTimeout((function(){t.selecting=!1}),50),document.body.removeEventListener("mouseup",s)};e.modules.select={selected:!1},t.table.options.selectableCheck.call(this.table,e.getComponent())?(i.classList.add("tabulator-selectable"),i.classList.remove("tabulator-unselectable"),t.table.options.selectable&&"highlight"!=t.table.options.selectable&&("click"===t.table.options.selectableRangeMode?i.addEventListener("click",(function(i){if(i.shiftKey){t.table._clearSelection(),t.lastClickedRow=t.lastClickedRow||e;var s=t.table.rowManager.getDisplayRowIndex(t.lastClickedRow),o=t.table.rowManager.getDisplayRowIndex(e),n=s<=o?s:o,r=s>=o?s:o,a=t.table.rowManager.getDisplayRows().slice(0).splice(n,r-n+1);i.ctrlKey||i.metaKey?(a.forEach((function(i){i!==t.lastClickedRow&&(!0===t.table.options.selectable||t.isRowSelected(e)||t.selectedRows.lengtht.table.options.selectable&&(a=a.slice(0,t.table.options.selectable)),t.selectRows(a)),t.table._clearSelection()}else i.ctrlKey||i.metaKey?(t.toggleRow(e),t.lastClickedRow=e):(t.deselectRows(void 0,!0),t.selectRows(e),t.lastClickedRow=e)})):(i.addEventListener("click",(function(i){t.table.modExists("edit")&&t.table.modules.edit.getCurrentCell()||t.table._clearSelection(),t.selecting||t.toggleRow(e)})),i.addEventListener("mousedown",(function(i){if(i.shiftKey)return t.table._clearSelection(),t.selecting=!0,t.selectPrev=[],document.body.addEventListener("mouseup",s),document.body.addEventListener("keyup",s),t.toggleRow(e),!1})),i.addEventListener("mouseenter",(function(i){t.selecting&&(t.table._clearSelection(),t.toggleRow(e),t.selectPrev[1]==e&&t.toggleRow(t.selectPrev[0]))})),i.addEventListener("mouseout",(function(i){t.selecting&&(t.table._clearSelection(),t.selectPrev.unshift(e))}))))):(i.classList.add("tabulator-unselectable"),i.classList.remove("tabulator-selectable"))}toggleRow(e){this.table.options.selectableCheck.call(this.table,e.getComponent())&&(e.modules.select&&e.modules.select.selected?this._deselectRow(e):this._selectRow(e))}selectRows(e){var t;switch(typeof e){case"undefined":this.table.rowManager.rows.forEach((e=>{this._selectRow(e,!0,!0)})),this._rowSelectionChanged();break;case"string":(t=this.table.rowManager.findRow(e))?this._selectRow(t,!0,!0):this.table.rowManager.getRows(e).forEach((e=>{this._selectRow(e,!0,!0)})),this._rowSelectionChanged();break;default:Array.isArray(e)?(e.forEach((e=>{this._selectRow(e,!0,!0)})),this._rowSelectionChanged()):this._selectRow(e,!1,!0)}}_selectRow(e,t,i){if(!isNaN(this.table.options.selectable)&&!0!==this.table.options.selectable&&!i&&this.selectedRows.length>=this.table.options.selectable){if(!this.table.options.selectableRollingSelection)return!1;this._deselectRow(this.selectedRows[0])}var s=this.table.rowManager.findRow(e);s?-1==this.selectedRows.indexOf(s)&&(s.getElement().classList.add("tabulator-selected"),s.modules.select||(s.modules.select={}),s.modules.select.selected=!0,s.modules.select.checkboxEl&&(s.modules.select.checkboxEl.checked=!0),this.selectedRows.push(s),this.table.options.dataTreeSelectPropagate&&this.childRowSelection(s,!0),t||this.dispatchExternal("rowSelected",s.getComponent()),this._rowSelectionChanged(t)):t||console.warn("Selection Error - No such row found, ignoring selection:"+e)}isRowSelected(e){return-1!==this.selectedRows.indexOf(e)}deselectRows(e,t){var i,s=this;if(void 0===e){i=s.selectedRows.length;for(let e=0;e-1&&(o.getElement().classList.remove("tabulator-selected"),o.modules.select||(o.modules.select={}),o.modules.select.selected=!1,o.modules.select.checkboxEl&&(o.modules.select.checkboxEl.checked=!1),s.selectedRows.splice(i,1),this.table.options.dataTreeSelectPropagate&&this.childRowSelection(o,!1),t||this.dispatchExternal("rowDeselected",o.getComponent()),s._rowSelectionChanged(t)):t||console.warn("Deselection Error - No such row found, ignoring selection:"+e)}getSelectedData(){var e=[];return this.selectedRows.forEach((function(t){e.push(t.getData())})),e}getSelectedRows(){var e=[];return this.selectedRows.forEach((function(t){e.push(t.getComponent())})),e}_rowSelectionChanged(e){this.headerCheckboxElement&&(0===this.selectedRows.length?(this.headerCheckboxElement.checked=!1,this.headerCheckboxElement.indeterminate=!1):this.table.rowManager.rows.length===this.selectedRows.length?(this.headerCheckboxElement.checked=!0,this.headerCheckboxElement.indeterminate=!1):(this.headerCheckboxElement.indeterminate=!0,this.headerCheckboxElement.checked=!1)),e||this.dispatchExternal("rowSelectionChanged",this.getSelectedData(),this.getSelectedRows())}registerRowSelectCheckbox(e,t){e._row.modules.select||(e._row.modules.select={}),e._row.modules.select.checkboxEl=t}registerHeaderSelectCheckbox(e){this.headerCheckboxElement=e}childRowSelection(e,t){var i=this.table.modules.dataTree.getChildren(e,!0);if(t)for(let e of i)this._selectRow(e,!0);else for(let e of i)this._deselectRow(e,!0)}}function se(e,t,i,s,o,n,r){var a=r.format||"DD/MM/YYYY HH:mm:ss",l=r.alignEmptyValues,h=0;if("undefined"!=typeof moment){if(e=moment(e,a),t=moment(t,a),e.isValid()){if(t.isValid())return e-t;h=1}else h=t.isValid()?-1:0;return("top"===l&&"desc"===n||"bottom"===l&&"asc"===n)&&(h*=-1),h}console.error("Sort Error - 'datetime' sorter is dependant on moment.js")}ie.moduleName="selectRow";var oe={number:function(e,t,i,s,o,n,r){var a=r.alignEmptyValues,l=r.decimalSeparator,h=r.thousandSeparator,d=0;if(e=String(e),t=String(t),h&&(e=e.split(h).join(""),t=t.split(h).join("")),l&&(e=e.split(l).join("."),t=t.split(l).join(".")),e=parseFloat(e),t=parseFloat(t),isNaN(e))d=isNaN(t)?0:-1;else{if(!isNaN(t))return e-t;d=1}return("top"===a&&"desc"===n||"bottom"===a&&"asc"===n)&&(d*=-1),d},string:function(e,t,i,s,o,n,r){var a,l=r.alignEmptyValues,h=0;if(e){if(t){switch(typeof r.locale){case"boolean":r.locale&&(a=this.langLocale());break;case"string":a=r.locale}return String(e).toLowerCase().localeCompare(String(t).toLowerCase(),a)}h=1}else h=t?-1:0;return("top"===l&&"desc"===n||"bottom"===l&&"asc"===n)&&(h*=-1),h},date:function(e,t,i,s,o,n,r){return r.format||(r.format="DD/MM/YYYY"),se.call(this,e,t,i,s,o,n,r)},time:function(e,t,i,s,o,n,r){return r.format||(r.format="HH:mm"),se.call(this,e,t,i,s,o,n,r)},datetime:se,boolean:function(e,t,i,s,o,n,r){return(!0===e||"true"===e||"True"===e||1===e?1:0)-(!0===t||"true"===t||"True"===t||1===t?1:0)},array:function(e,t,i,s,o,n,r){var a=r.type||"length",l=r.alignEmptyValues,h=0;function d(e){switch(a){case"length":return e.length;case"sum":return e.reduce((function(e,t){return e+t}));case"max":return Math.max.apply(null,e);case"min":return Math.min.apply(null,e);case"avg":return e.reduce((function(e,t){return e+t}))/e.length}}if(Array.isArray(e)){if(Array.isArray(t))return(e?d(e):0)-(t?d(t):0);l=1}else l=Array.isArray(t)?-1:0;return("top"===l&&"desc"===n||"bottom"===l&&"asc"===n)&&(h*=-1),h},exists:function(e,t,i,s,o,n,r){return(void 0===e?0:1)-(void 0===t?0:1)},alphanum:function(e,t,i,s,o,n,r){var a,l,h,d,c,u=0,m=/(\d+)|(\D+)/g,p=/\d/,g=r.alignEmptyValues,b=0;if(e||0===e){if(t||0===t){if(isFinite(e)&&isFinite(t))return e-t;if((a=String(e).toLowerCase())===(l=String(t).toLowerCase()))return 0;if(!p.test(a)||!p.test(l))return a>l?1:-1;for(a=a.match(m),l=l.match(m),c=a.length>l.length?l.length:a.length;ud?1:-1;return a.length>l.length}b=1}else b=t||0===t?-1:0;return("top"===g&&"desc"===n||"bottom"===g&&"asc"===n)&&(b*=-1),b}};class ne extends t{constructor(e){super(e),this.sortList=[],this.changed=!1,this.registerTableOption("sortMode","local"),this.registerTableOption("initialSort",!1),this.registerTableOption("columnHeaderSortMulti",!0),this.registerTableOption("sortOrderReverse",!1),this.registerTableOption("headerSortElement","
"),this.registerColumnOption("sorter"),this.registerColumnOption("sorterParams"),this.registerColumnOption("headerSort",!0),this.registerColumnOption("headerSortStartingDir"),this.registerColumnOption("headerSortTristate")}initialize(){this.subscribe("column-layout",this.initializeColumn.bind(this)),this.subscribe("table-built",this.tableBuilt.bind(this)),this.registerDataHandler(this.sort.bind(this),20),this.registerTableFunction("setSort",this.userSetSort.bind(this)),this.registerTableFunction("getSorters",this.getSort.bind(this)),this.registerTableFunction("clearSort",this.clearSort.bind(this)),"remote"===this.table.options.sortMode&&this.subscribe("data-params",this.remoteSortParams.bind(this))}tableBuilt(){this.table.options.initialSort&&this.setSort(this.table.options.initialSort)}remoteSortParams(e,t,i,s){var o=this.getSort();return o.forEach((e=>{delete e.column})),s.sort=o,s}userSetSort(e,t){this.setSort(e,t),this.refreshSort()}clearSort(){this.clear(),this.refreshSort()}initializeColumn(e){var t,i,s=!1;switch(typeof e.definition.sorter){case"string":ne.sorters[e.definition.sorter]?s=ne.sorters[e.definition.sorter]:console.warn("Sort Error - No such sorter found: ",e.definition.sorter);break;case"function":s=e.definition.sorter}e.modules.sort={sorter:s,dir:"none",params:e.definition.sorterParams||{},startingDir:e.definition.headerSortStartingDir||"asc",tristate:e.definition.headerSortTristate},!1!==e.definition.headerSort&&((t=e.getElement()).classList.add("tabulator-sortable"),(i=document.createElement("div")).classList.add("tabulator-col-sorter"),"object"==typeof this.table.options.headerSortElement?i.appendChild(this.table.options.headerSortElement):i.innerHTML=this.table.options.headerSortElement,e.titleHolderElement.appendChild(i),e.modules.sort.element=i,t.addEventListener("click",(t=>{var i="",s=[],o=!1;if(e.modules.sort){if(e.modules.sort.tristate)i="none"==e.modules.sort.dir?e.modules.sort.startingDir:e.modules.sort.dir==e.modules.sort.startingDir?"asc"==e.modules.sort.dir?"desc":"asc":"none";else switch(e.modules.sort.dir){case"asc":i="desc";break;case"desc":i="asc";break;default:i=e.modules.sort.startingDir}this.table.options.columnHeaderSortMulti&&(t.shiftKey||t.ctrlKey)?((o=(s=this.getSort()).findIndex((t=>t.field===e.getField())))>-1?(s[o].dir=i,o!=s.length-1&&(o=s.splice(o,1)[0],"none"!=i&&s.push(o))):"none"!=i&&s.push({column:e,dir:i}),this.setSort(s)):"none"==i?this.clear():this.setSort(e,i),this.refreshSort()}})))}refreshSort(){"remote"===this.table.options.sortMode?this.reloadData():this.refreshData()}hasChanged(){var e=this.changed;return this.changed=!1,e}getSort(){var e=[];return this.sortList.forEach((function(t){t.column&&e.push({column:t.column.getComponent(),field:t.column.getField(),dir:t.dir})})),e}setSort(e,t){var i=this,s=[];Array.isArray(e)||(e=[{column:e,dir:t}]),e.forEach((function(e){var t;(t=i.table.columnManager.findColumn(e.column))?(e.column=t,s.push(e),i.changed=!0):console.warn("Sort Warning - Sort field does not exist and is being ignored: ",e.column)})),i.sortList=s,this.dispatch("sort-changed")}clear(){this.setSort([])}findSorter(e){var t,i=this.table.rowManager.activeRows[0],s="string";if(i&&(i=i.getData(),e.getField()))switch(typeof(t=e.getFieldValue(i))){case"undefined":s="string";break;case"boolean":s="boolean";break;default:isNaN(t)||""===t?t.match(/((^[0-9]+[a-z]+)|(^[a-z]+[0-9]+))+$/i)&&(s="alphanum"):s="number"}return ne.sorters[s]}sort(e){var t=this,i=this.table.options.sortOrderReverse?t.sortList.slice().reverse():t.sortList,s=[],o=[];this.subscribedExternal("dataSorting")&&this.dispatchExternal("dataSorting",t.getSort()),t.clearColumnHeaders(),"remote"!==this.table.options.sortMode?(i.forEach((function(e,i){var o=e.column.modules.sort;e.column&&o&&(o.sorter||(o.sorter=t.findSorter(e.column)),e.params="function"==typeof o.params?o.params(e.column.getComponent(),e.dir):o.params,s.push(e)),t.setColumnHeader(e.column,e.dir)})),s.length&&t._sortItems(e,s)):i.forEach((function(e,i){t.setColumnHeader(e.column,e.dir)})),this.subscribedExternal("dataSorted")&&(e.forEach((e=>{o.push(e.getComponent())})),this.dispatchExternal("dataSorted",t.getSort(),o))}clearColumnHeaders(){this.table.columnManager.getRealColumns().forEach((function(e){e.modules.sort&&(e.modules.sort.dir="none",e.getElement().setAttribute("aria-sort","none"))}))}setColumnHeader(e,t){e.modules.sort.dir=t,e.getElement().setAttribute("aria-sort",t)}_sortItems(e,t){var i=t.length-1;e.sort(((e,s)=>{for(var o,n=i;n>=0;n--){let i=t[n];if(0!==(o=this._sortRow(e,s,i.column,i.dir,i.params)))break}return o}))}_sortRow(e,t,i,s,o){var n,r,a="asc"==s?e:t,l="asc"==s?t:e;return e=void 0!==(e=i.getFieldValue(a.getData()))?e:"",t=void 0!==(t=i.getFieldValue(l.getData()))?t:"",n=a.getComponent(),r=l.getComponent(),i.modules.sort.sorter.call(this,e,t,n,r,i.getComponent(),s,o)}}ne.moduleName="sort",ne.sorters=oe;var re={integer:function(e,t,i){return""===t||null==t||"number"==typeof(t=Number(t))&&isFinite(t)&&Math.floor(t)===t},float:function(e,t,i){return""===t||null==t||"number"==typeof(t=Number(t))&&isFinite(t)&&t%1!=0},numeric:function(e,t,i){return""===t||null==t||!isNaN(t)},string:function(e,t,i){return""===t||null==t||isNaN(t)},max:function(e,t,i){return""===t||null==t||parseFloat(t)<=i},min:function(e,t,i){return""===t||null==t||parseFloat(t)>=i},starts:function(e,t,i){return""===t||null==t||String(t).toLowerCase().startsWith(String(i).toLowerCase())},ends:function(e,t,i){return""===t||null==t||String(t).toLowerCase().endsWith(String(i).toLowerCase())},minLength:function(e,t,i){return""===t||null==t||String(t).length>=i},maxLength:function(e,t,i){return""===t||null==t||String(t).length<=i},in:function(e,t,i){return""===t||null==t||("string"==typeof i&&(i=i.split("|")),""===t||i.indexOf(t)>-1)},regex:function(e,t,i){return""===t||null==t||new RegExp(i).test(t)},unique:function(e,t,i){if(""===t||null==t)return!0;var s=!0,o=e.getData(),n=e.getColumn()._getSelf();return this.table.rowManager.rows.forEach((function(e){var i=e.getData();i!==o&&t==n.getFieldValue(i)&&(s=!1)})),s},required:function(e,t,i){return""!==t&&null!=t}};class ae extends t{constructor(e){super(e),this.invalidCells=[],this.registerTableOption("validationMode","blocking"),this.registerColumnOption("validator"),this.registerTableFunction("getInvalidCells",this.getInvalidCells.bind(this)),this.registerTableFunction("clearCellValidation",this.userClearCellValidation.bind(this)),this.registerTableFunction("validate",this.userValidate.bind(this)),this.registerComponentFunction("cell","isValid",this.cellIsValid.bind(this)),this.registerComponentFunction("cell","clearValidation",this.clearValidation.bind(this)),this.registerComponentFunction("cell","validate",this.cellValidate.bind(this)),this.registerComponentFunction("column","validate",this.columnValidate.bind(this)),this.registerComponentFunction("row","validate",this.rowValidate.bind(this))}initialize(){this.subscribe("cell-delete",this.clearValidation.bind(this)),this.subscribe("column-layout",this.initializeColumnCheck.bind(this))}cellIsValid(e){return!e.modules.validate||!e.modules.validate.invalid}cellValidate(e){return this.validate(e.column.modules.validate,e,e.getValue())}columnValidate(e){var t=[];return e.cells.forEach((function(e){this.cellValidate(e)||t.push(e.getComponent())})),!t.length||t}rowValidate(e){var t=[];return e.cells.forEach((function(e){this.cellValidate(e)||t.push(e.getComponent())})),!t.length||t}userClearCellValidation(e){e||(e=this.getInvalidCells()),Array.isArray(e)||(e=[e]),e.forEach((e=>{this.clearValidation(e._getSelf())}))}userValidate(e){var t=[];return this.table.rowManager.rows.forEach((function(e){var i=e.validate();!0!==i&&(t=t.concat(i))})),!t.length||t}initializeColumnCheck(e){void 0!==e.definition.validator&&this.initializeColumn(e)}initializeColumn(e){var t,i=this,s=[];e.definition.validator&&(Array.isArray(e.definition.validator)?e.definition.validator.forEach((function(e){(t=i._extractValidator(e))&&s.push(t)})):(t=this._extractValidator(e.definition.validator))&&s.push(t),e.modules.validate=!!s.length&&s)}_extractValidator(e){var t,i,s;switch(typeof e){case"string":return(s=e.indexOf(":"))>-1?(t=e.substring(0,s),i=e.substring(s+1)):t=e,this._buildValidator(t,i);case"function":return this._buildValidator(e);case"object":return this._buildValidator(e.type,e.parameters)}}_buildValidator(e,t){var i="function"==typeof e?e:ae.validators[e];return i?{type:"function"==typeof e?"function":e,func:i,params:t}:(console.warn("Validator Setup Error - No matching validator found:",e),!1)}validate(e,t,i){var s=this,o=[],n=this.invalidCells.indexOf(t);return e&&e.forEach((function(e){e.func.call(s,t.getComponent(),i,e.params)||o.push({type:e.type,parameters:e.params})})),o=!o.length||o,t.modules.validate||(t.modules.validate={}),!0===o?(t.modules.validate.invalid=!1,t.getElement().classList.remove("tabulator-validation-fail"),n>-1&&this.invalidCells.splice(n,1)):(t.modules.validate.invalid=!0,"manual"!==this.table.options.validationMode&&t.getElement().classList.add("tabulator-validation-fail"),-1==n&&this.invalidCells.push(t)),o}getInvalidCells(){var e=[];return this.invalidCells.forEach((t=>{e.push(t.getComponent())})),e}clearValidation(e){var t;e.modules.validate&&e.modules.validate.invalid&&(e.getElement().classList.remove("tabulator-validation-fail"),e.modules.validate.invalid=!1,(t=this.invalidCells.indexOf(e))>-1&&this.invalidCells.splice(t,1))}}ae.moduleName="validate",ae.validators=re;var le=Object.freeze({__proto__:null,AccessorModule:o,AjaxModule:l,ClipboardModule:h,ColumnCalcsModule:w,DataTreeModule:C,DownloadModule:y,EditModule:M,ExportModule:D,FilterModule:S,FormatModule:H,FrozenColumnsModule:P,FrozenRowsModule:z,GroupRowsModule:_,HistoryModule:B,HtmlTableImportModule:N,InteractionModule:V,KeybindingsModule:I,MenuModule:W,MoveColumnsModule:G,MoveRowsModule:j,MutatorModule:U,PageModule:X,PersistenceModule:K,PrintModule:J,ReactiveDataModule:$,ResizeColumnsModule:Q,ResizeRowsModule:Z,ResizeTableModule:ee,ResponsiveLayoutModule:te,SelectRowModule:ie,SortModule:ne,ValidateModule:ae});class he{constructor(e,t){this.table=e,this.msgType=t,this.registeredDefaults={}}register(e,t){this.registeredDefaults[e]=t}generate(e,t={}){var i=Object.assign({},this.registeredDefaults);if(Object.assign(i,e),!1!==t.debugInvalidOptions||this.table.options.debugInvalidOptions)for(var s in t)i.hasOwnProperty(s)||console.warn("Invalid "+this.msgType+" option:",s);for(var s in i)s in t?i[s]=t[s]:Array.isArray(i[s])?i[s]=Object.assign([],i[s]):"object"==typeof i[s]&&null!==i[s]?i[s]=Object.assign({},i[s]):void 0===i[s]&&delete i[s];return i}}class de extends e{constructor(e){super(e),this.elementVertical=e.rowManager.element,this.elementHorizontal=e.columnManager.element,this.tableElement=e.rowManager.tableElement,this.verticalFillMode="fit"}initialize(){}clearRows(){}clearColumns(){}reinitializeColumnWidths(e){}renderRows(){}renderColumns(){}rerenderRows(e){e&&e()}rerenderColumns(e,t){}renderRowCells(e){}rerenderRowCells(e,t){}scrollColumns(e,t){}scrollRows(e,t){}resize(){}scrollToRow(e){}scrollToRowNearestTop(e){}visibleRows(e){return[]}rows(){return this.table.rowManager.getDisplayRows()}styleRow(e,t){var i=e.getElement();t%2?(i.classList.add("tabulator-row-even"),i.classList.remove("tabulator-row-odd")):(i.classList.add("tabulator-row-odd"),i.classList.remove("tabulator-row-even"))}clear(){this.clearRows(),this.clearColumns()}render(){this.renderRows(),this.renderColumns()}rerender(e){this.rerenderRows(),this.rerenderColumns()}scrollToRowPosition(e,t,i){var o=this.rows().indexOf(e),n=e.getElement(),r=0;return new Promise(((a,l)=>{if(o>-1){if(void 0===i&&(i=this.table.options.scrollToRowIfVisible),!i&&s.elVisible(n)&&(r=s.elOffset(n).top-s.elOffset(this.elementVertical).top)>0&&r{e.element.appendChild(t.getElement()),t.cellRendered()}))}reinitializeColumnWidths(e){e.forEach((function(e){e.reinitializeWidth()}))}}class ue extends de{constructor(e){super(e),this.leftCol=0,this.rightCol=0,this.scrollLeft=0,this.vDomScrollPosLeft=0,this.vDomScrollPosRight=0,this.vDomPadLeft=0,this.vDomPadRight=0,this.fitDataColAvg=0,this.window=200,this.initialized=!1,this.columns=[]}initialize(){this.compatabilityCheck()}compatabilityCheck(){var e=this.options("columns"),t=!0;return"fitDataTable"==this.options("layout")&&(console.warn("Horizontal Vitrual DOM is not compatible with fitDataTable layout mode"),t=!1),this.options("responsiveLayout")&&(console.warn("Horizontal Vitrual DOM is not compatible with responsive columns"),t=!1),this.options("rtl")&&(console.warn("Horizontal Vitrual DOM is not currently compatible with RTL text direction"),t=!1),e&&e.find((e=>e.frozen))&&(console.warn("Horizontal Vitrual DOM is not compatible with frozen columns"),t=!1),t||(options.virtualDomHoz=!1),t}renderColumns(e,t){this.dataChange()}scrollColumns(e,t){this.scrollLeft!=e&&(this.scrollLeft=e,this.scroll(e-(this.vDomScrollPosLeft+this.window)))}rerenderColumns(e,t){var i={cols:this.columns,leftCol:this.leftCol,rightCol:this.rightCol};if(!e||this.initialized){this.clear(),this.scrollLeft=this.elementVertical.scrollLeft,this.vDomScrollPosLeft=this.scrollLeft-this.window,this.vDomScrollPosRight=this.scrollLeft+this.elementVertical.clientWidth+this.window;var s=0;this.table.columnManager.columnsByIndex.forEach((e=>{var t={};if(e.visible){var i=e.getWidth();t.leftPos=s,t.rightPos=s+i,t.width=i,"fitData"===this.options("layout")&&(t.fitDataCheck=!0),s+i>this.vDomScrollPosLeft&&s{e.element.appendChild(t.getElement()),t.cellRendered()}))}rerenderRowCells(e,t){this.reinitializeRow(e,t)}reinitializeColumnWidths(e){for(let e=this.leftCol;e<=this.rightCol;e++)this.columns[e].reinitializeWidth()}deinitialize(){this.initialized=!1}clear(){this.columns=[],this.leftCol=-1,this.rightCol=0,this.vDomScrollPosLeft=0,this.vDomScrollPosRight=0,this.vDomPadLeft=0,this.vDomPadRight=0}dataChange(){var e,t,i=!1,s=0,o=0;if("fitData"===this.options("layout")){if(this.table.columnManager.columnsByIndex.forEach((e=>{!e.definition.width&&e.visible&&(i=!0)})),i&&i&&this.table.rowManager.getDisplayRows().length&&(this.vDomScrollPosRight=this.scrollLeft+this.elementVertical.clientWidth+this.window,t=this.chain("rows-sample",[1],[],(()=>this.table.rowManager.getDisplayRows()[0]))[0])){e=t.getElement(),t.generateCells(),this.tableElement.appendChild(e);for(o=0;othis.vDomScrollPosRight)break}for(e.parentNode.removeChild(e),this.fitDataColAvg=Math.floor(s/(o+1));o{e!==this.columns[i]&&(t=!1)})),!t)}renitializeRows(){this.table.rowManager.getVisibleRows().forEach((e=>{this.reinitializeRow(e,!0)}))}scroll(e){this.vDomScrollPosLeft+=e,this.vDomScrollPosRight+=e,e>.8*this.elementVertical.clientWidth?this.rerenderColumns():e>0?(this.addColRight(),this.removeColLeft()):(this.addColLeft(),this.removeColRight())}colPositionAdjust(e,t,i){for(let s=e;s{if("group"!==t.type){var i=t.getCell(e);t.getElement().appendChild(i.getElement()),i.cellRendered()}})),this.fitDataColActualWidthCheck(e),this.rightCol++,this.rightCol>=this.columns.length-1?this.vDomPadRight=0:this.vDomPadRight-=e.getWidth(),this.tableElement.style.paddingRight=this.vDomPadRight+"px",this.addColRight())}addColLeft(){var e=this.columns[this.leftCol-1];e&&e.modules.vdomHoz.rightPos>=this.vDomScrollPosLeft&&(this.table.rowManager.getVisibleRows().forEach((t=>{if("group"!==t.type){var i=t.getCell(e);t.getElement().prepend(i.getElement()),i.cellRendered()}})),this.fitDataColActualWidthCheck(e),this.leftCol?this.vDomPadLeft-=e.getWidth():this.vDomPadLeft=0,this.tableElement.style.paddingLeft=this.vDomPadLeft+"px",this.leftCol--,this.addColLeft())}removeColRight(e){var t;(e=this.columns[this.rightCol])&&e.modules.vdomHoz.leftPos>this.vDomScrollPosRight&&(t=this.table.rowManager.getVisibleRows(),e.modules.vdomHoz.visible=!1,t.forEach((t=>{if("group"!==t.type){var i=t.getCell(e);t.getElement().removeChild(i.getElement())}})),this.vDomPadRight+=e.getWidth(),this.tableElement.style.paddingRight=this.vDomPadRight+"px",this.rightCol--,this.removeColRight())}removeColLeft(){var e=this.columns[this.leftCol];e&&e.modules.vdomHoz.rightPos{if("group"!==t.type){var i=t.getCell(e);t.getElement().removeChild(i.getElement())}})),this.vDomPadLeft+=e.getWidth(),this.tableElement.style.paddingLeft=this.vDomPadLeft+"px",this.leftCol++,this.removeColLeft())}fitDataColActualWidthCheck(e){var t,i;e.modules.vdomHoz.fitDataCheck&&(e.reinitializeWidth(),(i=(t=e.getWidth())-e.modules.vdomHoz.width)&&(e.modules.vdomHoz.rightPos+=i,e.modules.vdomHoz.width=t,this.colPositionAdjust(this.rightCol+2,this.columns.length,i)),e.modules.vdomHoz.fitDataCheck=!1)}initializeRow(e){if("group"!==e.type){e.modules.vdomHoz={leftCol:this.leftCol,rightCol:this.rightCol};for(let t=this.leftCol;t<=this.rightCol;t++){let i=this.columns[t];if(i&&i.visible){let t=e.getCell(i);e.getElement().appendChild(t.getElement()),t.cellRendered()}}}}reinitializeRow(e,t){if("group"!==e.type&&(t||!e.modules.vdomHoz||e.modules.vdomHoz.leftCol!==this.leftCol||e.modules.vdomHoz.rightCol!==this.rightCol)){for(var i=e.getElement();i.firstChild;)i.removeChild(i.firstChild);this.initializeRow(e)}}}class me extends e{constructor(e){super(e),this.blockHozScrollEvent=!1,this.headersElement=null,this.element=null,this.columns=[],this.columnsByIndex=[],this.columnsByField={},this.scrollLeft=0,this.optionsList=new he(this.table,"column definition"),this.renderer=null}initialize(){this.initializeRenderer(),this.headersElement=this.createHeadersElement(),this.element=this.createHeaderElement(),this.element.insertBefore(this.headersElement,this.element.firstChild),this.subscribe("scroll-horizontal",this.scrollHorizontal.bind(this))}initializeRenderer(){var e,t={virtual:ue,basic:ce};(e="string"==typeof this.table.options.renderVertical?t[this.table.options.renderVertical]:this.table.options.renderVertical)?(this.renderer=new e(this.table,this.element,this.tableElement),this.renderer.initialize()):console.error("Unable to find matching renderer:",table.options.renderVertical)}createHeadersElement(){var e=document.createElement("div");return e.classList.add("tabulator-headers"),e}createHeaderElement(){var e=document.createElement("div");return e.classList.add("tabulator-header"),this.table.options.headerVisible||e.classList.add("tabulator-header-hidden"),e}getElement(){return this.element}getHeadersElement(){return this.headersElement}scrollHorizontal(e){var t=0,i=this.element.scrollWidth-this.table.element.clientWidth;this.element.scrollLeft=e,e>i?(t=e-i,this.element.style.marginLeft=-t+"px"):this.element.style.marginLeft=0,this.scrollLeft=e,this.renderer.scrollColumns(e)}generateColumnsFromRowData(e){var t,i,s=[],o=this.table.options.autoColumnsDefinitions;if(e&&e.length){for(var n in t=e[0]){let e={field:n,title:n},o=t[n];switch(typeof o){case"undefined":i="string";break;case"boolean":i="boolean";break;case"object":i=Array.isArray(o)?"array":"string";break;default:i=isNaN(o)||""===o?o.match(/((^[0-9]+[a-z]+)|(^[a-z]+[0-9]+))+$/i)?"alphanum":"string":"number"}e.sorter=i,s.push(e)}if(o)switch(typeof o){case"function":this.table.options.columns=o.call(this.table,s);break;case"object":Array.isArray(o)?s.forEach((e=>{var t=o.find((t=>t.field===e.field));t&&Object.assign(e,t)})):s.forEach((e=>{o[e.field]&&Object.assign(e,o[e.field])})),this.table.options.columns=s}else this.table.options.columns=s;this.setColumns(this.table.options.columns)}}setColumns(e,t){for(;this.headersElement.firstChild;)this.headersElement.removeChild(this.headersElement.firstChild);this.columns=[],this.columnsByIndex=[],this.columnsByField={},this.dispatch("columns-loading"),e.forEach(((e,t)=>{this._addColumn(e)})),this._reIndexColumns(),this.dispatch("columns-loaded"),this.renderer.rerenderColumns(!1,!0),this.redraw(!0)}_addColumn(e,t,i){var s=new g(e,this),o=s.getElement(),n=i?this.findColumnIndex(i):i;if(i&&n>-1){var r=this.columns.indexOf(i.getTopColumn()),a=i.getElement();t?(this.columns.splice(r,0,s),a.parentNode.insertBefore(o,a)):(this.columns.splice(r+1,0,s),a.parentNode.insertBefore(o,a.nextSibling))}else t?(this.columns.unshift(s),this.headersElement.insertBefore(s.getElement(),this.headersElement.firstChild)):(this.columns.push(s),this.headersElement.appendChild(s.getElement())),s.columnRendered();return s}registerColumnField(e){e.definition.field&&(this.columnsByField[e.definition.field]=e)}registerColumnPosition(e){this.columnsByIndex.push(e)}_reIndexColumns(){this.columnsByIndex=[],this.columns.forEach((function(e){e.reRegisterPosition()}))}_verticalAlignHeaders(){var e=0;this.columns.forEach((t=>{var i;t.clearVerticalAlign(),(i=t.getHeight())>e&&(e=i)})),this.columns.forEach((t=>{t.verticalAlign(this.table.options.columnHeaderVertAlign,e)})),this.table.rowManager.adjustTableSize()}findColumn(e){if("object"!=typeof e)return this.columnsByField[e]||!1;if(e instanceof g)return e;if(e instanceof m)return e._getSelf()||!1;if("undefined"!=typeof HTMLElement&&e instanceof HTMLElement){return this.columns.find((t=>t.element===e))||!1}return!1}getColumnByField(e){return this.columnsByField[e]}getColumnsByFieldRoot(e){var t=[];return Object.keys(this.columnsByField).forEach((i=>{i.split(".")[0]===e&&t.push(this.columnsByField[i])})),t}getColumnByIndex(e){return this.columnsByIndex[e]}getFirstVisibileColumn(e){return(e=this.columnsByIndex.findIndex((e=>e.visible)))>-1&&this.columnsByIndex[e]}getColumns(){return this.columns}findColumnIndex(e){return this.columnsByIndex.findIndex((t=>e===t))}getRealColumns(){return this.columnsByIndex}traverse(e){this.columnsByIndex.forEach(((t,i)=>{e(t,i)}))}getDefinitions(e){var t=[];return this.columnsByIndex.forEach((i=>{(!e||e&&i.visible)&&t.push(i.getDefinition())})),t}getDefinitionTree(){var e=[];return this.columns.forEach((t=>{e.push(t.getDefinition(!0))})),e}getComponents(e){var t=[];return(e?this.columns:this.columnsByIndex).forEach((e=>{t.push(e.getComponent())})),t}getWidth(){var e=0;return this.columnsByIndex.forEach((t=>{t.visible&&(e+=t.getWidth())})),e}moveColumn(e,t,i){this.moveColumnActual(e,t,i),t.element.parentNode.insertBefore(e.element,t.element),i&&t.element.parentNode.insertBefore(t.element,e.element),this._verticalAlignHeaders(),this.table.rowManager.reinitialize()}moveColumnActual(e,t,i){e.parent.isGroup?this._moveColumnInArray(e.parent.columns,e,t,i):this._moveColumnInArray(this.columns,e,t,i),this._moveColumnInArray(this.columnsByIndex,e,t,i,!0),this.renderer.rerenderColumns(!0),this.dispatch("column-moved",e,t,i),this.subscribedExternal("columnMoved")&&this.dispatchExternal("columnMoved",e.getComponent(),this.table.columnManager.getComponents())}_moveColumnInArray(e,t,i,s,o){var n,r=e.indexOf(t);r>-1&&(e.splice(r,1),(n=e.indexOf(i))>-1?s&&(n+=1):n=r,e.splice(n,0,t),o&&(this.chain("column-moving-rows",[t,i,s],null,[])||[]).concat(this.table.rowManager.rows).forEach((function(e){if(e.cells.length){var t=e.cells.splice(r,1)[0];e.cells.splice(n,0,t)}})))}scrollToColumn(e,t,i){var s=0,o=0,n=0,r=e.getElement();return new Promise(((a,l)=>{if(void 0===t&&(t=this.table.options.scrollToColumnPosition),void 0===i&&(i=this.table.options.scrollToColumnIfVisible),e.visible){switch(t){case"middle":case"center":n=-this.element.clientWidth/2;break;case"right":n=r.clientWidth-this.headersElement.clientWidth}if(!i&&(o=r.offsetLeft)>0&&o+r.offsetWidth{t.push(i.generateCell(e))})),t}getFlexBaseWidth(){var e=this.table.element.clientWidth,t=0;return this.table.rowManager.element.scrollHeight>this.table.rowManager.element.clientHeight&&(e-=this.table.rowManager.element.offsetWidth-this.table.rowManager.element.clientWidth),this.columnsByIndex.forEach((function(i){var s,o,n;i.visible&&(s=i.definition.width||0,o=parseInt(i.minWidth),n="string"==typeof s?s.indexOf("%")>-1?e/100*parseInt(s):parseInt(s):s,t+=n>o?n:o)})),t}addColumn(e,t,i){return new Promise(((s,o)=>{var n=this._addColumn(e,t,i);this._reIndexColumns(),this.dispatch("column-add",e,t,i),this.redraw(!0),"fitColumns"!=this.layoutMode()&&n.reinitializeWidth(),this._verticalAlignHeaders(),this.table.rowManager.reinitialize(),this.renderer.rerenderColumns(),s(n)}))}deregisterColumn(e){var t,i=e.getField();i&&delete this.columnsByField[i],(t=this.columnsByIndex.indexOf(e))>-1&&this.columnsByIndex.splice(t,1),(t=this.columns.indexOf(e))>-1&&this.columns.splice(t,1),this._verticalAlignHeaders(),this.redraw()}redraw(e){e&&(s.elVisible(this.element)&&this._verticalAlignHeaders(),this.table.rowManager.resetScroll(),this.table.rowManager.reinitialize()),this.confirm("table-redrawing",e)||this.layoutRefresh(),this.dispatch("table-redraw",e),this.table.footerManager.redraw()}}class pe extends de{constructor(e){super(e),this.verticalFillMode="fill",this.scrollTop=0,this.scrollLeft=0,this.scrollTop=0,this.scrollLeft=0}clearRows(){for(var e=this.tableElement;e.firstChild;)e.removeChild(e.firstChild);e.scrollTop=0,e.scrollLeft=0,e.style.minWidth="",e.style.minHeight="",e.style.display="",e.style.visibility=""}renderRows(){var e=this.tableElement,t=!0;this.rows().forEach(((i,s)=>{this.styleRow(i,s),e.appendChild(i.getElement()),i.initialize(!0),"group"!==i.type&&(t=!1)})),e.style.minWidth=t?this.table.columnManager.getWidth()+"px":""}rerenderRows(e){this.render(),e&&e()}scrollToRowNearestTop(e){var t=s.elOffset(e.getElement()).top;return!(Math.abs(this.elementVertical.scrollTop-t)>Math.abs(this.elementVertical.scrollTop+this.elementVertical.clientHeight-t))}scrollToRow(e){var t=e.getElement();this.elementVertical.scrollTop=s.elOffset(t).top-s.elOffset(this.elementVertical).top+this.elementVertical.scrollTop}visibleRows(e){return this.rows()}}class ge extends de{constructor(e){super(e),this.verticalFillMode="fill",this.scrollTop=0,this.scrollLeft=0,this.vDomRowHeight=20,this.vDomTop=0,this.vDomBottom=0,this.vDomScrollPosTop=0,this.vDomScrollPosBottom=0,this.vDomTopPad=0,this.vDomBottomPad=0,this.vDomMaxRenderChain=90,this.vDomWindowBuffer=0,this.vDomWindowMinTotalRows=20,this.vDomWindowMinMarginRows=5,this.vDomTopNewRows=[],this.vDomBottomNewRows=[]}clearRows(){for(var e=this.tableElement;e.firstChild;)e.removeChild(e.firstChild);e.style.paddingTop="",e.style.paddingBottom="",e.style.minWidth="",e.style.minHeight="",e.style.display="",e.style.visibility="",this.elementVertical.scrollTop=0,this.elementVertical.scrollLeft=0,this.scrollTop=0,this.scrollLeft=0,this.vDomTop=0,this.vDomBottom=0,this.vDomTopPad=0,this.vDomBottomPad=0,this.vDomScrollPosTop=0,this.vDomScrollPosBottom=0}renderRows(){this._virtualRenderFill()}rerenderRows(e){for(var t=this.elementVertical.scrollTop,i=!1,s=!1,o=this.table.rowManager.scrollLeft,n=this.rows(),r=this.vDomTop;r<=this.vDomBottom;r++)if(n[r]){var a=t-n[r].getElement().offsetTop;if(!(!1===s||Math.abs(a)o||s>o){var r=this.table.rowManager.scrollLeft;this._virtualRenderFill(Math.floor(this.elementVertical.scrollTop/this.elementVertical.scrollHeight*n.length)),this.scrollColumns(r)}else t?(i<0&&this._addTopRow(n,-i),s<0&&(this.vDomScrollHeight-this.scrollTop>this.vDomWindowBuffer?this._removeBottomRow(n,-s):this.vDomScrollPosBottom=this.scrollTop)):(s>=0&&this._addBottomRow(n,s),i>=0&&(this.scrollTop>this.vDomWindowBuffer?this._removeTopRow(n,i):this.vDomScrollPosTop=this.scrollTop))}resize(){this.vDomWindowBuffer=this.table.options.renderVerticalBuffer||this.elementVertical.clientHeight}scrollToRowNearestTop(e){var t=this.rows().indexOf(e);return!(Math.abs(this.vDomTop-t)>Math.abs(this.vDomBottom-t))}scrollToRow(e){var t=this.rows().indexOf(e);t>-1&&this._virtualRenderFill(t,!0)}visibleRows(e){var t=this.elementVertical.scrollTop,i=this.elementVertical.clientHeight+t,s=!1,o=0,n=0,r=this.rows();if(e)o=this.vDomTop,n=this.vDomBottom;else for(var a=this.vDomTop;a<=this.vDomBottom;a++)if(r[a])if(s){if(!(i-r[a].getElement().offsetTop>=0))break;n=a}else if(t-r[a].getElement().offsetTop>=0)o=a;else{if(s=!0,!(i-r[a].getElement().offsetTop>=0))break;n=a}return r.slice(o,n+1)}_virtualRenderFill(e,t,i){var o=this.tableElement,n=this.elementVertical,r=0,a=0,l=0,h=0,d=0,c=this.rows(),u=c.length,m=this.elementVertical.clientHeight;if(i=i||0,e=e||0){for(;o.firstChild;)o.removeChild(o.firstChild);(l=(u-e+1)*this.vDomRowHeight)this.vDomWindowBuffer&&(this.vDomWindowBuffer=2*p),this.vDomBottom++,d++}e?(this.vDomTopPad=t?this.vDomRowHeight*this.vDomTop+i:this.scrollTop-h,this.vDomBottomPad=this.vDomBottom==u-1?0:Math.max(this.vDomScrollHeight-this.vDomTopPad-a-h,0)):(this.vDomTopPad=0,this.vDomRowHeight=Math.floor((a+h)/d),this.vDomBottomPad=this.vDomRowHeight*(u-this.vDomBottom-1),this.vDomScrollHeight=h+a+this.vDomBottomPad-m),o.style.paddingTop=this.vDomTopPad+"px",o.style.paddingBottom=this.vDomBottomPad+"px",t&&(this.scrollTop=this.vDomTopPad+h+i-(this.elementVertical.scrollWidth>this.elementVertical.clientWidth?this.elementVertical.offsetHeight-m:0)),this.scrollTop=Math.min(this.scrollTop,this.elementVertical.scrollHeight-m),this.elementVertical.scrollWidth>this.elementVertical.offsetWidth&&t&&(this.scrollTop+=this.elementVertical.offsetHeight-m),this.vDomScrollPosTop=this.scrollTop,this.vDomScrollPosBottom=this.scrollTop,n.scrollTop=this.scrollTop,this.dispatch("render-virtual-fill")}}_addTopRow(e,t){for(var i=this.tableElement,s=[],o=0,n=this.vDomTop-1,r=0;this.vDomTop;){let a,l,h=e[n];if(!(h&&r=a))break;this.styleRow(h,n),i.insertBefore(h.getElement(),i.firstChild),h.initialized&&h.heightInitialized||s.push(h),h.initialize(),l||(a=h.getElement().offsetHeight,a>this.vDomWindowBuffer&&(this.vDomWindowBuffer=2*a)),t-=a,o+=a,this.vDomTop--,n--,r++}for(let e of s)e.clearCellHeight();this._quickNormalizeRowHeight(s),o&&(this.vDomTopPad-=o,this.vDomTopPad<0&&(this.vDomTopPad=n*this.vDomRowHeight),n<1&&(this.vDomTopPad=0),i.style.paddingTop=this.vDomTopPad+"px",this.vDomScrollPosTop-=o)}_removeTopRow(e,t){for(var i=[],s=0,o=0;;){let n,r=e[this.vDomTop];if(!(r&&o=n))break;this.vDomTop++,t-=n,s+=n,i.push(r),o++}for(let e of i){let t=e.getElement();t.parentNode&&t.parentNode.removeChild(t)}s&&(this.vDomTopPad+=s,this.tableElement.style.paddingTop=this.vDomTopPad+"px",this.vDomScrollPosTop+=this.vDomTop?s:s+this.vDomWindowBuffer)}_addBottomRow(e,t){for(var i=this.tableElement,s=[],o=0,n=this.vDomBottom+1,r=0;;){let a,l,h=e[n];if(!(h&&r=a))break;this.styleRow(h,n),i.appendChild(h.getElement()),h.initialized&&h.heightInitialized||s.push(h),h.initialize(),l||(a=h.getElement().offsetHeight,a>this.vDomWindowBuffer&&(this.vDomWindowBuffer=2*a)),t-=a,o+=a,this.vDomBottom++,n++,r++}for(let e of s)e.clearCellHeight();this._quickNormalizeRowHeight(s),o&&(this.vDomBottomPad-=o,(this.vDomBottomPad<0||n==e.length-1)&&(this.vDomBottomPad=0),i.style.paddingBottom=this.vDomBottomPad+"px",this.vDomScrollPosBottom+=o)}_removeBottomRow(e,t){for(var i=[],s=0,o=0;;){let n,r=e[this.vDomBottom];if(!(r&&o=n))break;this.vDomBottom--,t-=n,s+=n,i.push(r),o++}for(let e of i){let t=e.getElement();t.parentNode&&t.parentNode.removeChild(t)}s&&(this.vDomBottomPad+=s,this.vDomBottomPad<0&&(this.vDomBottomPad=0),this.tableElement.style.paddingBottom=this.vDomBottomPad+"px",this.vDomScrollPosBottom-=s)}_quickNormalizeRowHeight(e){for(let t of e)t.calcHeight();for(let t of e)t.setCellHeight()}}class be extends e{constructor(e){super(e),this.element=this.createHolderElement(),this.tableElement=this.createTableElement(),this.heightFixer=this.createTableElement(),this.firstRender=!1,this.renderMode="virtual",this.fixedHeight=!1,this.rows=[],this.activeRowsPipeline=[],this.activeRows=[],this.activeRowsCount=0,this.displayRows=[],this.displayRowsCount=0,this.scrollTop=0,this.scrollLeft=0,this.rowNumColumn=!1,this.redrawBlock=!1,this.redrawBlockRestoreConfig=!1,this.redrawBlockRederInPosition=!1,this.dataPipeline=[],this.displayPipeline=[],this.renderer=null}createHolderElement(){var e=document.createElement("div");return e.classList.add("tabulator-tableHolder"),e.setAttribute("tabindex",0),e}createTableElement(){var e=document.createElement("div");return e.classList.add("tabulator-table"),e}getElement(){return this.element}getTableElement(){return this.tableElement}getRowPosition(e,t){return t?this.activeRows.indexOf(e):this.rows.indexOf(e)}initialize(){this.initializeRenderer(),this.element.appendChild(this.tableElement),this.firstRender=!0,this.element.addEventListener("scroll",(()=>{var e=this.element.scrollLeft,t=this.scrollLeft>e,i=this.element.scrollTop,s=this.scrollTop>i;this.scrollLeft!=e&&(this.scrollLeft=e,this.dispatch("scroll-horizontal",e,t),this.dispatchExternal("scrollHorizontal",e,t)),this.scrollTop!=i&&(this.scrollTop=i,this.renderer.scrollRows(i,s),this.dispatch("scroll-vertical",i,s),this.dispatchExternal("scrollVertical",i,s))}))}findRow(e){if("object"!=typeof e){if(null==e)return!1;return this.rows.find((t=>t.data[this.table.options.index]==e))||!1}if(e instanceof f)return e;if(e instanceof b)return e._getSelf()||!1;if("undefined"!=typeof HTMLElement&&e instanceof HTMLElement){return this.rows.find((t=>t.getElement()===e))||!1}return!1}getRowFromDataObject(e){return this.rows.find((t=>t.data===e))||!1}getRowFromPosition(e,t){return t?this.activeRows[e]:this.rows[e]}scrollToRow(e,t,i){return this.renderer.scrollToRowPosition(e,t,i)}setData(e,t,i){return new Promise(((s,o)=>{t&&this.getDisplayRows().length?this.table.options.pagination?this._setDataActual(e,!0):this.reRenderInPosition((()=>{this._setDataActual(e)})):(this.table.options.autoColumns&&i&&this.table.columnManager.generateColumnsFromRowData(e),this.resetScroll(),this._setDataActual(e)),s()}))}_setDataActual(e,t){this.dispatchExternal("dataProcessing",e),this._wipeElements(),Array.isArray(e)?(this.dispatch("data-processing",e),e.forEach(((e,t)=>{if(e&&"object"==typeof e){var i=new f(e,this);this.rows.push(i)}else console.warn("Data Loading Warning - Invalid row data detected and ignored, expecting object but received:",e)})),this.refreshActiveData(!1,!1,t),this.dispatch("data-processed",e),this.dispatchExternal("dataProcesed",e)):console.error("Data Loading Error - Unable to process data due to invalid data type \nExpecting: array \nReceived: ",typeof e,"\nData: ",e)}_wipeElements(){this.dispatch("rows-wipe"),this.rows.forEach((e=>{e.wipe()})),this.rows=[],this.activeRows=[],this.activeRowsPipeline=[],this.activeRowsCount=0,this.displayRows=[],this.displayRowsCount=0,this.adjustTableSize()}deleteRow(e,t){var i=this.rows.indexOf(e),s=this.activeRows.indexOf(e);s>-1&&this.activeRows.splice(s,1),i>-1&&this.rows.splice(i,1),this.setActiveRows(this.activeRows),this.displayRowIterator((t=>{var i=t.indexOf(e);i>-1&&t.splice(i,1)})),t||this.reRenderInPosition(),this.regenerateRowNumbers(),this.dispatchExternal("rowDeleted",e.getComponent()),this.subscribedExternal("dataChanged")&&this.dispatchExternal("dataChanged",this.getData())}addRow(e,t,i,s){var o=this.addRowActual(e,t,i,s);return this.dispatch("row-added",o,e,t,i),o}addRows(e,t,i){var s=[];return new Promise(((o,n)=>{t=this.findAddRowPos(t),Array.isArray(e)||(e=[e]),e.length,(void 0===i&&t||void 0!==i&&!t)&&e.reverse(),e.forEach(((e,o)=>{var n=this.addRow(e,t,i,!0);s.push(n)})),this.subscribed("row-added")?this.dispatch("row-added",row,e,t,i):this.reRenderInPosition(),this.regenerateRowNumbers(),o(s)}))}findAddRowPos(e){return void 0===e&&(e=this.table.options.addRowPos),"pos"===e&&(e=!0),"bottom"===e&&(e=!1),e}addRowActual(e,t,i,s){var o,n,r=e instanceof f?e:new f(e||{},this),a=this.findAddRowPos(t),l=-1;return i||(n=this.chain("row-adding-position",[r,a],null,{index:i,top:a}),i=n.index,a=n.top),void 0!==i&&(i=this.findRow(i)),(i=this.chain("row-adding-index",[r,i,a],null,i))&&(l=this.rows.indexOf(i)),i&&l>-1?(o=this.activeRows.indexOf(i),this.displayRowIterator((function(e){var t=e.indexOf(i);t>-1&&e.splice(a?t:t+1,0,r)})),o>-1&&this.activeRows.splice(a?o:o+1,0,r),this.rows.splice(a?l:l+1,0,r)):a?(this.displayRowIterator((function(e){e.unshift(r)})),this.activeRows.unshift(r),this.rows.unshift(r)):(this.displayRowIterator((function(e){e.push(r)})),this.activeRows.push(r),this.rows.push(r)),this.setActiveRows(this.activeRows),this.dispatchExternal("rowAdded",r.getComponent()),this.subscribedExternal("dataChanged")&&this.dispatchExternal("dataChanged",this.table.rowManager.getData()),s||this.reRenderInPosition(),r}moveRow(e,t,i){this.dispatch("row-move",e,t,i),this.moveRowActual(e,t,i),this.regenerateRowNumbers(),this.dispatch("row-moved",e,t,i),this.dispatchExternal("rowMoved",e.getComponent())}moveRowActual(e,t,i){this.moveRowInArray(this.rows,e,t,i),this.moveRowInArray(this.activeRows,e,t,i),this.displayRowIterator((s=>{this.moveRowInArray(s,e,t,i)})),this.dispatch("row-moving",e,t,i)}moveRowInArray(e,t,i,s){var o,n,r;if(t!==i&&((o=e.indexOf(t))>-1&&(e.splice(o,1),(n=e.indexOf(i))>-1?s?e.splice(n+1,0,t):e.splice(n,0,t):e.splice(o,0,t)),e===this.getDisplayRows())){r=n>o?n:o+1;for(let t=o-1&&t}nextDisplayRow(e,t){var i=this.getDisplayRowIndex(e),s=!1;return!1!==i&&i-1)&&i}getData(e,t){var i=[];return this.getRows(e).forEach((function(e){"row"==e.type&&i.push(e.getData(t||"data"))})),i}getComponents(e){var t=[];return this.getRows(e).forEach((function(e){t.push(e.getComponent())})),t}getDataCount(e){return this.getRows(e).length}scrollHorizontal(e){this.scrollLeft=e,this.element.scrollLeft=e,this.dispatch("scroll-horizontal",e)}registerDataPipelineHandler(e,t){void 0!==t?(this.dataPipeline.push({handler:e,priority:t}),this.dataPipeline.sort(((e,t)=>e.priority-t.priority))):console.error("Data pipeline handlers must have a priority in order to be registered")}registerDisplayPipelineHandler(e,t){void 0!==t?(this.displayPipeline.push({handler:e,priority:t}),this.displayPipeline.sort(((e,t)=>e.priority-t.priority))):console.error("Display pipeline handlers must have a priority in order to be registered")}refreshActiveData(e,t,i){var o=this.table,n="",r=0,a=["all","dataPipeline","display","displayPipeline","end"];if("function"==typeof e)if((r=this.dataPipeline.findIndex((t=>t.handler===e)))>-1)n="dataPipeline",t&&(r==this.dataPipeline.length-1?n="display":r++);else{if(!((r=this.displayPipeline.findIndex((t=>t.handler===e)))>-1))return void console.error("Unable to refresh data, invalid handler provided",e);n="displayPipeline",t&&(r==this.displayPipeline.length-1?n="end":r++)}else n=e||"all",r=0;if(this.redrawBlock)(!this.redrawBlockRestoreConfig||this.redrawBlockRestoreConfig&&(this.redrawBlockRestoreConfig.stage===n&&r{var t=e.getCell(this.rowNumColumn);t&&t._generateContents()}))}setActiveRows(e){this.activeRows=e,this.activeRowsCount=this.activeRows.length}resetDisplayRows(){this.displayRows=[],this.displayRows.push(this.activeRows.slice(0)),this.displayRowsCount=this.displayRows[0].length}getNextDisplayIndex(){return this.displayRows.length}setDisplayRows(e,t){var i=!0;return t&&void 0!==this.displayRows[t]?(this.displayRows[t]=e,i=!0):(this.displayRows.push(e),i=t=this.displayRows.length-1),t==this.displayRows.length-1&&(this.displayRowsCount=this.displayRows[this.displayRows.length-1].length),i}getDisplayRows(e){return void 0===e?this.displayRows.length?this.displayRows[this.displayRows.length-1]:[]:this.displayRows[e]||[]}getVisibleRows(e){return this.renderer.visibleRows(!e)}displayRowIterator(e){this.activeRowsPipeline.forEach(e),this.displayRows.forEach(e),this.displayRowsCount=this.displayRows[this.displayRows.length-1].length}getRows(e){var t;switch(e){case"active":t=this.activeRows;break;case"display":t=this.table.rowManager.getDisplayRows();break;case"visible":t=this.getVisibleRows(!0);break;default:t=this.chain("rows-retrieve",e,null,this.rows)||this.rows}return t}reRenderInPosition(e){this.redrawBlock?e?e():this.redrawBlockRederInPosition=!0:this.renderer.rerenderRows(e)}initializeRenderer(){var e,t={virtual:ge,basic:pe};(e="string"==typeof this.table.options.renderVertical?t[this.table.options.renderVertical]:this.table.options.renderVertical)?(this.renderer=new e(this.table,this.element,this.tableElement),this.renderer.initialize(),this.table.element.clientHeight||this.table.options.height?this.fixedHeight=!0:this.fixedHeight=!1):console.error("Unable to find matching renderer:",table.options.renderVertical)}getRenderMode(){return this.renderMode}renderTable(){this.dispatchExternal("renderStarted"),this.element.scrollTop=0,this.displayRowsCount?(this._clearTable(),this.renderer.renderRows(),this.firstRender&&(this.firstRender=!1,this.layoutRefresh())):this.renderEmptyScroll(),this.fixedHeight||this.adjustTableSize(),this.dispatch("table-layout"),this.displayRowsCount||this.table.options.placeholder&&(this.table.options.placeholder.setAttribute("tabulator-render-mode",this.renderMode),this.getElement().appendChild(this.table.options.placeholder),this.table.options.placeholder.style.width=this.table.columnManager.getWidth()+"px"),this.dispatchExternal("renderComplete")}renderEmptyScroll(){this.table.options.placeholder?this.tableElement.style.display="none":this.tableElement.style.minWidth=this.table.columnManager.getWidth()+"px"}_clearTable(){this.tableElement;this.table.options.placeholder&&this.table.options.placeholder.parentNode&&this.table.options.placeholder.parentNode.removeChild(this.table.options.placeholder),this.scrollTop=0,this.scrollLeft=0,this.renderer.clearRows()}styleRow(e,t){var i=e.getElement();t%2?(i.classList.add("tabulator-row-even"),i.classList.remove("tabulator-row-odd")):(i.classList.add("tabulator-row-odd"),i.classList.remove("tabulator-row-even"))}normalizeHeight(){this.activeRows.forEach((function(e){e.normalizeHeight()}))}adjustTableSize(){var e=this.element.clientHeight;if("fill"===this.renderer.verticalFillMode){let t=Math.floor(this.table.columnManager.getElement().getBoundingClientRect().height+(this.table.footerManager&&this.table.footerManager.active&&!this.table.footerManager.external?this.table.footerManager.getElement().getBoundingClientRect().height:0));this.fixedHeight?(this.element.style.minHeight="calc(100% - "+t+"px)",this.element.style.height="calc(100% - "+t+"px)",this.element.style.maxHeight="calc(100% - "+t+"px)"):(this.element.style.height="",this.element.style.height=this.table.element.clientHeight-t+"px",this.element.scrollTop=this.scrollTop),this.renderer.resize(),this.fixedHeight||e==this.element.clientHeight||(this.subscribed("table-resize")?this.dispatch("table-resize"):this.redraw())}}reinitialize(){this.rows.forEach((function(e){e.reinitialize(!0)}))}blockRedraw(){this.redrawBlock=!0,this.redrawBlockRestoreConfig=!1}restoreRedraw(){this.redrawBlock=!1,this.redrawBlockRestoreConfig?(this.refreshActiveData(this.redrawBlockRestoreConfig.handler,this.redrawBlockRestoreConfig.skipStage,this.redrawBlockRestoreConfig.renderInPosition),this.redrawBlockRestoreConfig=!1):this.redrawBlockRederInPosition&&this.reRenderInPosition(),this.redrawBlockRederInPosition=!1}redraw(e){var t=this.scrollLeft;this.adjustTableSize(),this.table.tableWidth=this.table.element.clientWidth,e?this.renderTable():(this.reRenderInPosition(),this.scrollHorizontal(t),this.displayRowsCount||this.table.options.placeholder&&this.getElement().appendChild(this.table.options.placeholder))}resetScroll(){if(this.element.scrollLeft=0,this.element.scrollTop=0,"ie"===this.table.browser){var e=document.createEvent("Event");e.initEvent("scroll",!1,!0),this.element.dispatchEvent(e)}else this.element.dispatchEvent(new Event("scroll"))}}class fe extends e{constructor(e){super(e),this.active=!1,this.element=this.createElement(),this.external=!1,this.links=[],this.initializeElement()}initialize(){}createElement(){var e=document.createElement("div");return e.classList.add("tabulator-footer"),e}initializeElement(e){if(this.table.options.footerElement)switch(typeof this.table.options.footerElement){case"string":"<"===this.table.options.footerElement[0]?this.element.innerHTML=this.table.options.footerElement:(this.external=!0,this.element=document.querySelector(this.table.options.footerElement));break;default:this.element=this.table.options.footerElement}}getElement(){return this.element}append(e,t){this.activate(t),this.element.appendChild(e),this.table.rowManager.adjustTableSize()}prepend(e,t){this.activate(t),this.element.insertBefore(e,this.element.firstChild),this.table.rowManager.adjustTableSize()}remove(e){e.parentNode.removeChild(e),this.deactivate()}deactivate(e){this.element.firstChild&&!e||(this.external||this.element.parentNode.removeChild(this.element),this.active=!1)}activate(e){this.active||(this.active=!0,this.external||(this.table.element.appendChild(this.getElement()),this.table.element.style.display="")),e&&this.links.push(e)}redraw(){this.links.forEach((function(e){e.footerRedraw()}))}}class ve extends e{constructor(e){super(e),this.el=this.table.element,this.abortClasses=["tabulator-headers","tabulator-table"],this.previousTargets={},this.listeners=["click","dblclick","contextmenu","mouseenter","mouseleave","mouseover","mouseout","mousemove","touchstart","touchend"],this.componentMap={"tabulator-cell":"cell","tabulator-row":"row","tabulator-group":"group","tabulator-col":"column"},this.buildListenerMap(),this.bindSubscriptionWatchers()}buildListenerMap(){var e={};this.listeners.forEach((t=>{e[t]={handler:null,components:[]}})),this.listeners=e}bindSubscriptionWatchers(){var e=Object.keys(this.listeners),t=Object.values(this.componentMap);for(let i of t)for(let t of e){let e=i+"-"+t;this.subscriptionChange(e,this.subscriptionChanged.bind(this,i,t))}}subscriptionChanged(e,t,i){var s=this.listeners[t].components,o=s.indexOf(e),n=!1;i?-1===o&&(s.push(e),n=!0):this.subscribed(e+"-"+t)||o>-1&&(s.splice(o,1),n=!0),n&&this.updateEventListeners()}updateEventListeners(){for(let e in this.listeners){let t=this.listeners[e];t.components.length?t.handler||(t.handler=this.track.bind(this,e),this.el.addEventListener(e,t.handler)):t.handler&&(this.el.removeEventListener(e,t.handler),t.handler=null)}}track(e,t){var i=this.findTargets(t.path);i=this.bindComponents(e,i),this.triggerEvents(e,t,i)}findTargets(e){var t={};let i=Object.keys(this.componentMap);for(let s of e){let e=s.classList?[...s.classList]:[];if(e.filter((e=>this.abortClasses.includes(e))).length)break;let o=e.filter((e=>i.includes(e)));for(let e of o)t[this.componentMap[e]]=s}return t.group&&t.group===t.row&&delete t.row,t}bindComponents(e,t){var i=Object.keys(t).reverse(),s=this.listeners[e],o={};for(let e of i){let i,n=t[e],r=this.previousTargets[e];if(r&&r.target===n)i=r.component;else switch(e){case"row":case"group":if(s.components.includes("row")||s.components.includes("cell")){i=this.table.rowManager.getVisibleRows().find((e=>e.getElement()===n))}break;case"column":s.components.includes("column")&&(i=this.table.columnManager.findColumn(n));break;case"cell":s.components.includes("cell")&&(i=t.row.findCell(n))}i&&(t[e]=i,o[e]={target:n,component:i})}return this.previousTargets=o,t}triggerEvents(e,t,i){var s=this.listeners[e];for(let o in i)i[o]&&s.components.includes(o)&&this.dispatch(o+"-"+e,t,i[o])}}class we{constructor(e){this.table=e,this.bindings={}}bind(e,t,i){this.bindings[e]||(this.bindings[e]={}),this.bindings[e][t]?console.warn("Unable to bind component handler, a matching function name is already bound",e,t,hanlder):this.bindings[e][t]=i}handle(e,t,i){if(this.bindings[e]&&this.bindings[e][i])return this.bindings[e][i].bind(null,t);console.error("The "+e+" component does not have a "+i+" function, have you checked that you have the correct Tabulator module installed?")}}class Ce extends e{constructor(e){super(e),this.loaderElement=this.createLoaderElement(),this.msgElement=this.createMsgElement(),this.loadingElement=null,this.errorElement=null,this.requestOrder=0,this.loading=!1}initialize(){var e;this.loaderElement.appendChild(this.msgElement),this.table.options.dataLoaderLoading&&("string"==typeof this.table.options.dataLoaderLoading?((e=document.createElement("template")).innerHTML=this.table.options.dataLoaderLoading.trim(),this.loadingElement=e.content.firstChild):this.loadingElement=this.table.options.dataLoaderLoading),this.table.options.dataLoaderError&&("string"==typeof this.table.options.dataLoaderError?((e=document.createElement("template")).innerHTML=this.table.options.dataLoaderError.trim(),this.errorElement=e.content.firstChild):this.errorElement=this.table.options.dataLoaderError)}createLoaderElement(){var e=document.createElement("div");return e.classList.add("tabulator-loader"),e}createMsgElement(){var e=document.createElement("div");return e.classList.add("tabulator-loader-msg"),e.setAttribute("role","alert"),e}load(e,t,i,s,o){var n=++this.requestOrder;if(this.dispatchExternal("dataLoading",e),!e||0!=e.indexOf("{")&&0!=e.indexOf("[")||(e=JSON.parse(e)),this.confirm("data-loading",e,t,i,o)){this.loading=!0,o||this.showLoader();t=this.chain("data-params",[e,i,o],t||{},{});return t=this.mapParams(t,this.table.options.dataSendParams),this.chain("data-load",[e,t,i,o],Promise.resolve([])).then((t=>{Array.isArray(t)||"object"!=typeof t||(t=this.mapParams(t,this.objectInvert(this.table.options.dataReceiveParams)));var i=this.chain("data-loaded",t,null,t);n==this.requestOrder?(this.hideLoader(),!1!==i&&(this.dispatchExternal("dataLoaded",e),this.table.rowManager.setData(i,s,!s))):console.warn("Data Load Response Blocked - An active data load request was blocked by an attempt to change table data while the request was being made")})).catch((e=>{console.error("Data Load Error: ",e),this.dispatchExternal("dataLoadError",e),o||this.showError(),setTimeout((()=>{this.hideLoader()}),3e3)})).finally((()=>{this.loading=!1}))}return this.dispatchExternal("dataLoaded",e),this.table.rowManager.setData(e,s,!s),Promise.resolve()}mapParams(e,t){var i={};for(let s in e)i[t.hasOwnProperty(s)?t[s]:s]=e[s];return i}objectInvert(e){var t={};for(let i in e)t[e[i]]=i;return t}blockActiveLoad(){this.requestOrder++}showLoader(){if("function"==typeof this.table.options.dataLoader?this.table.options.dataLoader():this.table.options.dataLoader){for(this.hideLoader();this.msgElement.firstChild;)this.msgElement.removeChild(this.msgElement.firstChild);this.msgElement.classList.remove("tabulator-error"),this.msgElement.classList.add("tabulator-loading"),this.loadingElement?this.msgElement.appendChild(this.loadingElement):this.msgElement.innerHTML=this.langText("data|loading"),this.table.element.appendChild(this.loaderElement)}}showError(){for(this.hideLoader();this.msgElement.firstChild;)this.msgElement.removeChild(this.msgElement.firstChild);this.msgElement.classList.remove("tabulator-loading"),this.msgElement.classList.add("tabulator-error"),this.errorElement?this.msgElement.appendChild(this.errorElement):this.msgElement.innerHTML=this.langText("data|error"),this.table.element.appendChild(this.loaderElement)}hideLoader(){this.loaderElement.parentNode&&this.loaderElement.parentNode.removeChild(this.loaderElement)}}class Ee{constructor(e,t){this.events={},this.optionsList=e||{},this.subscriptionNotifiers={},this.dispatch=t?this._debugDispatch.bind(this):this._dispatch.bind(this),this.debug=t}subscriptionChange(e,t){this.subscriptionNotifiers[e]||(this.subscriptionNotifiers[e]=[]),this.subscriptionNotifiers[e].push(t),this.subscribed(e)&&this._notifiySubscriptionChange(e,!0)}subscribe(e,t){this.events[e]||(this.events[e]=[]),this.events[e].push(t),this._notifiySubscriptionChange(e,!0)}unsubscribe(e,t){var i;if(this.events[e]){if(t){if(!((i=this.events[e].findIndex((e=>e===t)))>-1))return void console.warn("Cannot remove event, no matching event found:",e,t);this.events[e].splice(i,1)}else delete this.events[e];this._notifiySubscriptionChange(e,!1)}else console.warn("Cannot remove event, no events set on:",e)}subscribed(e){return this.events[e]&&this.events[e].length}_notifiySubscriptionChange(e,t){var i=this.subscriptionNotifiers[e];i&&i.forEach((e=>{e(t)}))}_dispatch(){var e,t=Array.from(arguments),i=t.shift();return this.events[i]&&this.events[i].forEach(((i,s)=>{let o=i.apply(this,t);s||(e=o)})),e}_debugDispatch(){var e=Array.from(arguments),t=e[0];return e[0]="ExternalEvent:"+e[0],(!0===this.debug||this.debug.includes(t))&&console.log(...e),this._dispatch(...arguments)}}class ye{constructor(e){this.events={},this.subscriptionNotifiers={},this.dispatch=e?this._debugDispatch.bind(this):this._dispatch.bind(this),this.chain=e?this._debugChain.bind(this):this._chain.bind(this),this.confirm=e?this._debugConfirm.bind(this):this._confirm.bind(this),this.debug=e}subscriptionChange(e,t){this.subscriptionNotifiers[e]||(this.subscriptionNotifiers[e]=[]),this.subscriptionNotifiers[e].push(t),this.subscribed(e)&&this._notifiySubscriptionChange(e,!0)}subscribe(e,t,i=1e4){this.events[e]||(this.events[e]=[]),this.events[e].push({callback:t,priority:i}),this.events[e].sort(((e,t)=>e.priority-t.priority)),this._notifiySubscriptionChange(e,!0)}unsubscribe(e,t){var i;if(this.events[e]){if(t){if(!((i=this.events[e].findIndex((e=>e.callback===t)))>-1))return void console.warn("Cannot remove event, no matching event found:",e,t);this.events[e].splice(i,1)}this._notifiySubscriptionChange(e,!1)}else console.warn("Cannot remove event, no events set on:",e)}subscribed(e){return this.events[e]&&this.events[e].length}_chain(e,t,i,s){var o=i;return Array.isArray(t)||(t=[t]),this.subscribed(e)?(this.events[e].forEach(((e,i)=>{o=e.callback.apply(this,t.concat([o]))})),o):"function"==typeof s?s():s}_confirm(e,t){var i=!1;return Array.isArray(t)||(t=[t]),this.subscribed(e)&&this.events[e].forEach(((e,s)=>{e.callback.apply(this,t)&&(i=!0)})),i}_notifiySubscriptionChange(e,t){var i=this.subscriptionNotifiers[e];i&&i.forEach((e=>{e(t)}))}_dispatch(){var e=Array.from(arguments),t=e.shift();this.events[t]&&this.events[t].forEach((t=>{t.callback.apply(this,e)}))}_debugDispatch(){var e=Array.from(arguments),t=e[0];return e[0]="InternalEvent:"+t,(!0===this.debug||this.debug.includes(t))&&console.log(...e),this._dispatch(...arguments)}_debugChain(){var e=Array.from(arguments),t=e[0];return e[0]="InternalEvent:"+t,(!0===this.debug||this.debug.includes(t))&&console.log(...e),this._chain(...arguments)}_debugConfirm(){var e=Array.from(arguments),t=e[0];return e[0]="InternalEvent:"+t,(!0===this.debug||this.debug.includes(t))&&console.log(...e),this._confirm(...arguments)}}class Re{static register(e){Re.tables.push(e)}static deregister(e){var t=Re.tables.indexOf(e);t>-1&&Re.tables.splice(t,1)}static lookupTable(e,t){var i,s,o=[];if("string"==typeof e){if((i=document.querySelectorAll(e)).length)for(var n=0;n{e.widthFixed||e.reinitializeWidth(),(this.table.options.responsiveLayout?e.modules.responsive.visible:e.visible)&&(o=e),e.visible&&(t+=e.getWidth())})),o?(s=i-t+o.getWidth(),this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&(o.setWidth(0),this.table.modules.responsiveLayout.update()),s>0?o.setWidth(s):o.reinitializeWidth()):this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.update()},fitColumns:function(e){var t,i,s=this.table.element.clientWidth,o=0,n=0,r=0,a=[],l=[],h=0,d=0;function c(e){return"string"==typeof e?e.indexOf("%")>-1?s/100*parseInt(e):parseInt(e):e}function u(e,t,i,s){var o=[],n=0,a=0,l=0,h=r,d=0,m=0,p=[];function g(e){return i*(e.column.definition.widthGrow||1)}function b(e){return c(e.width)-i*(e.column.definition.widthShrink||0)}return e.forEach((function(e,n){var r=s?b(e):g(e);e.column.minWidth>=r?o.push(e):e.column.maxWidth&&e.column.maxWidththis.table.rowManager.element.clientHeight&&(s-=this.table.rowManager.element.offsetWidth-this.table.rowManager.element.clientWidth),e.forEach((function(e){var t,i,s;e.visible&&(t=e.definition.width,i=parseInt(e.minWidth),t?(s=c(t),o+=s>i?s:i,e.definition.widthShrink&&(l.push({column:e,width:s>i?s:i}),h+=e.definition.widthShrink)):(a.push({column:e,width:0}),r+=e.definition.widthGrow||1))})),n=s-o,t=Math.floor(n/r),d=u(a,n,t,!1),a.length&&d>0&&(a[a.length-1].width+=+d),a.forEach((function(e){n-=e.width})),(i=Math.abs(d)+n)>0&&h&&(d=u(l,i,Math.floor(i/h),!0)),l.length&&(l[l.length-1].width-=d),a.forEach((function(e){e.column.setWidth(e.width)})),l.forEach((function(e){e.column.setWidth(e.width)}))}};class Te extends t{constructor(e){super(e,"layout"),this.mode=null,this.registerTableOption("layout","fitData"),this.registerTableOption("layoutColumnsOnNewData",!1),this.registerColumnOption("widthGrow"),this.registerColumnOption("widthShrink")}initialize(){var e=this.table.options.layout;Te.modes[e]?this.mode=e:(console.warn("Layout Error - invalid mode set, defaulting to 'fitData' : "+e),this.mode="fitData"),this.table.element.setAttribute("tabulator-layout",this.mode)}getMode(){return this.mode}layout(){Te.modes[this.mode].call(this,this.table.columnManager.columnsByIndex),this.dispatch("layout-refreshed")}}Te.moduleName="layout",Te.modes=Me;class Le extends t{constructor(e){super(e),this.locale="default",this.lang=!1,this.bindings={},this.langList={},this.registerTableOption("locale",!1),this.registerTableOption("langs",{})}initialize(){this.langList=s.deepClone(Le.langs),!1!==this.table.options.columnDefaults.headerFilterPlaceholder&&this.setHeaderFilterPlaceholder(this.table.options.columnDefaults.headerFilterPlaceholder);for(let e in this.table.options.langs)this.installLang(e,this.table.options.langs[e]);this.setLocale(this.table.options.locale),this.registerTableFunction("setLocale",this.setLocale.bind(this)),this.registerTableFunction("getLocale",this.getLocale.bind(this)),this.registerTableFunction("getLang",this.getLang.bind(this))}setHeaderFilterPlaceholder(e){this.langList.default.headerFilters.default=e}setHeaderFilterColumnPlaceholder(e,t){this.langList.default.headerFilters.columns[e]=t,this.lang&&!this.lang.headerFilters.columns[e]&&(this.lang.headerFilters.columns[e]=t)}installLang(e,t){this.langList[e]?this._setLangProp(this.langList[e],t):this.langList[e]=t}_setLangProp(e,t){for(let i in t)e[i]&&"object"==typeof e[i]?this._setLangProp(e[i],t[i]):e[i]=t[i]}setLocale(e){if(!0===(e=e||"default")&&navigator.language&&(e=navigator.language.toLowerCase()),e&&!this.langList[e]){let t=e.split("-")[0];this.langList[t]?(console.warn("Localization Error - Exact matching locale not found, using closest match: ",e,t),e=t):(console.warn("Localization Error - Matching locale not found, using default: ",e),e="default")}this.locale=e,this.lang=s.deepClone(this.langList.default||{}),"default"!=e&&function e(t,i){for(var s in t)"object"==typeof t[s]?(i[s]||(i[s]={}),e(t[s],i[s])):i[s]=t[s]}(this.langList[e],this.lang),this.dispatchExternal("localized",this.locale,this.lang),this._executeBindings()}getLocale(e){return this.locale}getLang(e){return e?this.langList[e]:this.lang}getText(e,t){var i=(e=t?e+"|"+t:e).split("|");return this._getLangElement(i,this.locale)||""}_getLangElement(e,t){var i=this.lang;return e.forEach((function(e){var t;i&&(t=i[e],i=void 0!==t&&t)})),i}bind(e,t){this.bindings[e]||(this.bindings[e]=[]),this.bindings[e].push(t),t(this.getText(e),this.lang)}_executeBindings(){for(let e in this.bindings)this.bindings[e].forEach((t=>{t(this.getText(e),this.lang)}))}}Le.moduleName="localize",Le.langs={default:{groups:{item:"item",items:"items"},columns:{},data:{loading:"Loading",error:"Error"},pagination:{page_size:"Page Size",page_title:"Show Page",first:"First",first_title:"First Page",last:"Last",last_title:"Last Page",prev:"Prev",prev_title:"Prev Page",next:"Next",next_title:"Next Page",all:"All"},headerFilters:{default:"filter column...",columns:{}}}};class De extends t{constructor(e){super(e)}initialize(){this.registerTableFunction("tableComms",this.receive.bind(this))}getConnections(e){var t=[];return Tabulator.comms.lookupTable(e).forEach((e=>{this.table!==e&&t.push(e)})),t}send(e,t,i,s){var o=this.getConnections(e);o.forEach((e=>{e.tableComms(this.table.element,t,i,s)})),!o.length&&e&&console.warn("Table Connection Error - No tables matching selector found",e)}receive(e,t,i,s){if(this.table.modExists(t))return this.table.modules[t].commsReceived(e,i,s);console.warn("Inter-table Comms Error - no such module:",t)}}De.moduleName="comms";var ke=Object.freeze({__proto__:null,LayoutModule:Te,LocalizeModule:Le,CommsModule:De});class Se{constructor(e,t){this.bindStaticFuctionality(e),this.bindModules(e,ke,!0),t&&this.bindModules(e,t)}bindStaticFuctionality(e){e.moduleBindings={},e.extendModule=function(t,i,s){if(e.moduleBindings[t]){var o=e.moduleBindings[t].prototype[i];if(o)if("object"==typeof s)for(let e in s)o[e]=s[e];else console.warn("Module Error - Invalid value type, it must be an object");else console.warn("Module Error - property does not exist:",i)}else console.warn("Module Error - module does not exist:",t)},e.registerModule=function(t){Array.isArray(t)||(t=[t]),t.forEach((t=>{e.registerModuleBinding(t)}))},e.registerModuleBinding=function(t){e.moduleBindings[t.moduleName]=t},e.findTable=function(e){var t=Re.lookupTable(e,!0);return!(Array.isArray(t)&&!t.length)&&t},e.prototype.bindModules=function(){for(var t in this.modules={},e.moduleBindings){let i=e.moduleBindings[t];this.modules[t]=new i(this),i.prototype.moduleCore?this.modulesCore[t]=this.modules[t]:this.modulesRegular[t]=this.modules[t]}}}bindModules(e,t,i){var s=Object.values(t);i&&s.forEach((e=>{e.prototype.moduleCore=!0})),e.registerModule(s)}}class Fe{constructor(e,t){this.options={},this.columnManager=null,this.rowManager=null,this.footerManager=null,this.vdomHoz=null,this.externalEvents=null,this.eventBus=null,this.interactionMonitor=!1,this.browser="",this.browserSlow=!1,this.browserMobile=!1,this.rtl=!1,this.componentFunctionBinder=new we(this),this.dataLoader=!1,this.modules={},this.modulesCore={},this.modulesRegular={},this.optionsList=new he(this,"table constructor"),this.initializeElement(e)&&(this.initialzeCoreSystems(t),setTimeout((()=>{this._create()}))),Re.register(this)}initializeElement(e){return"undefined"!=typeof HTMLElement&&e instanceof HTMLElement?(this.element=e,!0):"string"==typeof e?(this.element=document.querySelector(e),!!this.element||(console.error("Tabulator Creation Error - no element found matching selector: ",e),!1)):(console.error("Tabulator Creation Error - Invalid element provided:",e),!1)}initialzeCoreSystems(e){this.columnManager=new me(this),this.rowManager=new be(this),this.footerManager=new fe(this),this.dataLoader=new Ce(this),this.bindModules(),this.options=this.optionsList.generate(Fe.defaultOptions,e),this._clearObjectPointers(),this._mapDepricatedFunctionality(),this.externalEvents=new Ee(this.options,this.options.debugEventsExternal),this.eventBus=new ye(this.options.debugEventsInternal),this.interactionMonitor=new ve(this),this.dataLoader.initialize(),this.columnManager.initialize(),this.rowManager.initialize(),this.footerManager.initialize()}rtlCheck(){var e=window.getComputedStyle(this.element);switch(this.options.textDirection){case"auto":if("rtl"!==e.direction)break;case"rtl":this.element.classList.add("tabulator-rtl"),this.rtl=!0;break;case"ltr":this.element.classList.add("tabulator-ltr");default:this.rtl=!1}}_mapDepricatedFunctionality(){}_clearSelection(){this.element.classList.add("tabulator-block-select"),window.getSelection?window.getSelection().empty?window.getSelection().empty():window.getSelection().removeAllRanges&&window.getSelection().removeAllRanges():document.selection&&document.selection.empty(),this.element.classList.remove("tabulator-block-select")}_create(){this.externalEvents.dispatch("tableBuilding"),this.eventBus.dispatch("table-building"),this.rtlCheck(),this._buildElement(),this._loadInitialData()}_clearObjectPointers(){this.options.columns=this.options.columns.slice(0),this.options.data&&!this.options.reactiveData&&(this.options.data=this.options.data.slice(0))}_buildElement(){var e=this.element,t=this.options;for(e.classList.add("tabulator"),e.setAttribute("role","grid");e.firstChild;)e.removeChild(e.firstChild);t.height&&(t.height=isNaN(t.height)?t.height:t.height+"px",e.style.height=t.height),!1!==t.minHeight&&(t.minHeight=isNaN(t.minHeight)?t.minHeight:t.minHeight+"px",e.style.minHeight=t.minHeight),!1!==t.maxHeight&&(t.maxHeight=isNaN(t.maxHeight)?t.maxHeight:t.maxHeight+"px",e.style.maxHeight=t.maxHeight),this.columnManager.initialize(),this.rowManager.initialize(),this._detectBrowser();for(let e in this.modulesCore){this.modulesCore[e].initialize()}if("string"==typeof t.placeholder){var i=document.createElement("div");i.classList.add("tabulator-placeholder");var s=document.createElement("span");s.innerHTML=t.placeholder,i.appendChild(s),t.placeholder=i}e.appendChild(this.columnManager.getElement()),e.appendChild(this.rowManager.getElement()),t.footerElement&&this.footerManager.activate(),t.autoColumns&&this.options.data&&this.columnManager.generateColumnsFromRowData(this.options.data);for(let e in this.modulesRegular){this.modulesRegular[e].initialize()}this.columnManager.setColumns(t.columns),this.eventBus.dispatch("table-built"),this.externalEvents.dispatch("tableBuilt")}_loadInitialData(){this.dataLoader.load(this.options.data)}destroy(){var e=this.element;for(Re.deregister(this),this.eventBus.dispatch("table-destroy"),this.rowManager.rows.forEach((function(e){e.wipe()})),this.rowManager.rows=[],this.rowManager.activeRows=[],this.rowManager.displayRows=[];e.firstChild;)e.removeChild(e.firstChild);e.classList.remove("tabulator")}_detectBrowser(){var e=navigator.userAgent||navigator.vendor||window.opera;e.indexOf("Trident")>-1?(this.browser="ie",this.browserSlow=!0):e.indexOf("Edge")>-1?(this.browser="edge",this.browserSlow=!0):e.indexOf("Firefox")>-1?(this.browser="firefox",this.browserSlow=!1):(this.browser="other",this.browserSlow=!1),this.browserMobile=/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i.test(e)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(e.substr(0,4))}blockRedraw(){return this.rowManager.blockRedraw()}restoreRedraw(){return this.rowManager.restoreRedraw()}setDataFromLocalFile(e){return new Promise(((t,i)=>{var s=document.createElement("input");s.type="file",s.accept=e||".json,application/json",s.addEventListener("change",(e=>{var o,n=s.files[0],r=new FileReader;r.readAsText(n),r.onload=e=>{try{o=JSON.parse(r.result)}catch(e){return console.warn("File Load Error - File contents is invalid JSON",e),void i(e)}this.setData(o).then((e=>{t(e)})).catch((e=>{t(e)}))},r.onerror=e=>{console.warn("File Load Error - Unable to read file"),i()}})),s.click()}))}setData(e,t,i){return this.dataLoader.load(e,t,i,!1)}clearData(){this.dataLoader.blockActiveLoad(),this.rowManager.clearData()}getData(e){return this.rowManager.getData(e)}getDataCount(e){return this.rowManager.getDataCount(e)}replaceData(e,t,i){return this.dataLoader.load(e,t,i,!0,!0)}updateData(e){var t=0;return new Promise(((i,s)=>{this.dataLoader.blockActiveLoad(),"string"==typeof e&&(e=JSON.parse(e)),e?e.forEach((e=>{var s=this.rowManager.findRow(e[this.options.index]);s&&(t++,s.updateData(e).then((()=>{--t||i()})))})):(console.warn("Update Error - No data provided"),s("Update Error - No data provided"))}))}addData(e,t,i){return new Promise(((s,o)=>{this.dataLoader.blockActiveLoad(),"string"==typeof e&&(e=JSON.parse(e)),e?this.rowManager.addRows(e,t,i).then((e=>{var t=[];e.forEach((function(e){t.push(e.getComponent())})),s(t)})):(console.warn("Update Error - No data provided"),o("Update Error - No data provided"))}))}updateOrAddData(e){var t=[],i=0;return new Promise(((s,o)=>{this.dataLoader.blockActiveLoad(),"string"==typeof e&&(e=JSON.parse(e)),e?e.forEach((e=>{var o=this.rowManager.findRow(e[this.options.index]);i++,o?o.updateData(e).then((()=>{i--,t.push(o.getComponent()),i||s(t)})):this.rowManager.addRows(e).then((e=>{i--,t.push(e[0].getComponent()),i||s(t)}))})):(console.warn("Update Error - No data provided"),o("Update Error - No data provided"))}))}getRow(e){var t=this.rowManager.findRow(e);return t?t.getComponent():(console.warn("Find Error - No matching row found:",e),!1)}getRowFromPosition(e,t){var i=this.rowManager.getRowFromPosition(e,t);return i?i.getComponent():(console.warn("Find Error - No matching row found:",e),!1)}deleteRow(e){return new Promise(((t,i)=>{var s=0,o=0,n=[];function r(){++s==e.length&&o&&(this.rowManager.reRenderInPosition(),t())}Array.isArray(e)||(e=[e]),e.forEach((e=>{var t=this.rowManager.findRow(e,!0);t?n.push(t):(console.warn("Delete Error - No matching row found:",e),i("Delete Error - No matching row found"),r())})),n.sort(((e,t)=>this.rowManager.rows.indexOf(e)>this.rowManager.rows.indexOf(t)?1:-1)),n.forEach((e=>{e.delete().then((()=>{o++,r()})).catch((e=>{r(),i(e)}))}))}))}addRow(e,t,i){return"string"==typeof e&&(e=JSON.parse(e)),this.rowManager.addRows(e,t,i).then((e=>e[0].getComponent()))}updateOrAddRow(e,t){var i=this.rowManager.findRow(e);return"string"==typeof t&&(t=JSON.parse(t)),i?i.updateData(t).then((()=>i.getComponent())):this.rowManager.addRows(t).then((e=>e[0].getComponent()))}updateRow(e,t){var i=this.rowManager.findRow(e);return"string"==typeof t&&(t=JSON.parse(t)),i?i.updateData(t).then((()=>{resolve(i.getComponent())})):(console.warn("Update Error - No matching row found:",e),Promise.reject("Update Error - No matching row found"))}scrollToRow(e,t,i){var s=this.rowManager.findRow(e);return s?this.rowManager.scrollToRow(s,t,i):(console.warn("Scroll Error - No matching row found:",e),Promise.reject("Scroll Error - No matching row found"))}moveRow(e,t,i){var s=this.rowManager.findRow(e);s?s.moveToRow(t,i):console.warn("Move Error - No matching row found:",e)}getRows(e){return this.rowManager.getComponents(e)}getRowPosition(e,t){var i=this.rowManager.findRow(e);return i?this.rowManager.getRowPosition(i,t):(console.warn("Position Error - No matching row found:",e),!1)}setColumns(e){this.columnManager.setColumns(e)}getColumns(e){return this.columnManager.getComponents(e)}getColumn(e){var t=this.columnManager.findColumn(e);return t?t.getComponent():(console.warn("Find Error - No matching column found:",e),!1)}getColumnDefinitions(){return this.columnManager.getDefinitionTree()}showColumn(e){var t=this.columnManager.findColumn(e);if(!t)return console.warn("Column Show Error - No matching column found:",e),!1;t.show()}hideColumn(e){var t=this.columnManager.findColumn(e);if(!t)return console.warn("Column Hide Error - No matching column found:",e),!1;t.hide()}toggleColumn(e){var t=this.columnManager.findColumn(e);if(!t)return console.warn("Column Visibility Toggle Error - No matching column found:",e),!1;t.visible?t.hide():t.show()}addColumn(e,t,i){var s=this.columnManager.findColumn(i);return this.columnManager.addColumn(e,t,s).then((e=>{returncolumn.getComponent()}))}deleteColumn(e){var t=this.columnManager.findColumn(e);return t?t.delete():(console.warn("Column Delete Error - No matching column found:",e),Promise.reject())}updateColumnDefinition(e,t){var i=this.columnManager.findColumn(e);return i?i.updateDefinition(t):(console.warn("Column Update Error - No matching column found:",e),Promise.reject())}moveColumn(e,t,i){var s=this.columnManager.findColumn(e),o=this.columnManager.findColumn(t);s?o?this.columnManager.moveColumn(s,o,i):console.warn("Move Error - No matching column found:",o):console.warn("Move Error - No matching column found:",e)}scrollToColumn(e,t,i){return new Promise(((s,o)=>{var n=this.columnManager.findColumn(e);return n?this.columnManager.scrollToColumn(n,t,i):(console.warn("Scroll Error - No matching column found:",e),Promise.reject("Scroll Error - No matching column found"))}))}redraw(e){this.columnManager.redraw(e),this.rowManager.redraw(e)}setHeight(e){this.options.height=isNaN(e)?e:e+"px",this.element.style.height=this.options.height,this.rowManager.initializeRenderer(),this.rowManager.redraw()}on(e,t){this.externalEvents.subscribe(e,t)}off(e,t){this.externalEvents.unsubscribe(e,t)}dispatchEvent(){Array.from(arguments).shift();this.externalEvents.dispatch(...arguments)}modExists(e,t){return!!this.modules[e]||(t&&console.error("Tabulator Module Not Installed: "+e),!1)}module(e){var t=this.modules[e];return t||console.error("Tabulator module not installed: "+e),t}}Fe.defaultOptions={debugEventsExternal:!1,debugEventsInternal:!1,debugInvalidOptions:!0,height:!1,minHeight:!1,maxHeight:!1,columnMaxWidth:!1,columnHeaderVertAlign:"top",columns:[],columnDefaults:{},data:!1,autoColumns:!1,autoColumnsDefinitions:!1,nestedFieldSeparator:".",tooltipGenerationMode:"load",footerElement:!1,index:"id",textDirection:"auto",addRowPos:"bottom",headerVisible:!0,renderVertical:"virtual",renderHorizontal:"basic",renderVerticalBuffer:0,scrollToRowPosition:"top",scrollToRowIfVisible:!0,scrollToColumnPosition:"left",scrollToColumnIfVisible:!0,rowFormatter:!1,rowFormatterPrint:null,rowFormatterClipboard:null,rowFormatterHtmlOutput:null,placeholder:!1,dataLoader:!0,dataLoaderLoading:!1,dataLoaderError:!1,dataSendParams:{},dataReceiveParams:{}},new Se(Fe);class He extends Fe{}new Se(He,le);class Pe{constructor(e){this.type=e,this.element=this._createElement()}_createElement(){var e=document.createElement("div");return e.classList.add("tabulator-row"),e}getElement(){return this.element}getComponent(){return!1}getData(){return{}}getHeight(){return this.element.outerHeight}initialize(){}reinitialize(){}normalizeHeight(){}generateCells(){}reinitializeHeight(){}calcHeight(){}setCellHeight(){}clearCellHeight(){}}export{d as CalcComponent,c as CellComponent,m as ColumnComponent,A as GroupComponent,t as Module,Pe as PseudoRow,de as Renderer,b as RowComponent,Fe as Tabulator,He as TabulatorFull,le as modules}; //# sourceMappingURL=tabulator_esm.min.js.map diff --git a/dist/js/tabulator_esm.min.js.map b/dist/js/tabulator_esm.min.js.map index f184d4db6..443f39dbe 100644 --- a/dist/js/tabulator_esm.min.js.map +++ b/dist/js/tabulator_esm.min.js.map @@ -1 +1 @@ -{"version":3,"file":"tabulator_esm.min.js","sources":["../../src/js/core/Module.js","../../src/js/core/Helpers.js","../../src/js/modules/Accessor/Accessor.js","../../src/js/modules/Accessor/defaults/accessors.js","../../src/js/modules/Ajax/defaults/contentTypeFormatters.js","../../src/js/modules/Ajax/Ajax.js","../../src/js/modules/Ajax/defaults/config.js","../../src/js/modules/Ajax/defaults/urlGenerator.js","../../src/js/modules/Ajax/defaults/loaderPromise.js","../../src/js/modules/Clipboard/Clipboard.js","../../src/js/modules/Clipboard/defaults/pasteActions.js","../../src/js/modules/Clipboard/defaults/pasteParsers.js","../../src/js/modules/ColumnCalcs/CalcComponent.js","../../src/js/core/cell/CellComponent.js","../../src/js/core/cell/Cell.js","../../src/js/core/column/ColumnComponent.js","../../src/js/core/column/Column.js","../../src/js/core/row/RowComponent.js","../../src/js/core/column/defaults/options.js","../../src/js/core/row/Row.js","../../src/js/modules/ColumnCalcs/defaults/calculations.js","../../src/js/modules/ColumnCalcs/ColumnCalcs.js","../../src/js/modules/DataTree/DataTree.js","../../src/js/modules/Download/defaults/downloaders/csv.js","../../src/js/modules/Download/defaults/downloaders.js","../../src/js/modules/Download/defaults/downloaders/json.js","../../src/js/modules/Download/defaults/downloaders/pdf.js","../../src/js/modules/Download/defaults/downloaders/xlsx.js","../../src/js/modules/Download/defaults/downloaders/html.js","../../src/js/modules/Download/Download.js","../../src/js/modules/Edit/defaults/editors/input.js","../../src/js/modules/Edit/defaults/editors.js","../../src/js/modules/Edit/defaults/editors/textarea.js","../../src/js/modules/Edit/defaults/editors/number.js","../../src/js/modules/Edit/defaults/editors/range.js","../../src/js/modules/Edit/defaults/editors/select.js","../../src/js/modules/Edit/defaults/editors/autocomplete.js","../../src/js/modules/Edit/defaults/editors/star.js","../../src/js/modules/Edit/defaults/editors/progress.js","../../src/js/modules/Edit/defaults/editors/tickCross.js","../../src/js/modules/Edit/Edit.js","../../src/js/modules/Export/ExportRow.js","../../src/js/modules/Export/ExportColumn.js","../../src/js/modules/Export/Export.js","../../src/js/modules/Filter/defaults/filters.js","../../src/js/modules/Filter/Filter.js","../../src/js/modules/Format/defaults/formatters/plaintext.js","../../src/js/modules/Format/defaults/formatters.js","../../src/js/modules/Format/defaults/formatters/html.js","../../src/js/modules/Format/defaults/formatters/textarea.js","../../src/js/modules/Format/defaults/formatters/money.js","../../src/js/modules/Format/defaults/formatters/link.js","../../src/js/modules/Format/defaults/formatters/image.js","../../src/js/modules/Format/defaults/formatters/tickCross.js","../../src/js/modules/Format/defaults/formatters/datetime.js","../../src/js/modules/Format/defaults/formatters/datetimediff.js","../../src/js/modules/Format/defaults/formatters/lookup.js","../../src/js/modules/Format/defaults/formatters/star.js","../../src/js/modules/Format/defaults/formatters/traffic.js","../../src/js/modules/Format/defaults/formatters/progress.js","../../src/js/modules/Format/defaults/formatters/color.js","../../src/js/modules/Format/defaults/formatters/buttonTick.js","../../src/js/modules/Format/defaults/formatters/buttonCross.js","../../src/js/modules/Format/defaults/formatters/rownum.js","../../src/js/modules/Format/defaults/formatters/handle.js","../../src/js/modules/Format/defaults/formatters/responsiveCollapse.js","../../src/js/modules/Format/defaults/formatters/rowSelection.js","../../src/js/modules/Format/Format.js","../../src/js/modules/FrozenColumns/FrozenColumns.js","../../src/js/modules/FrozenRows/FrozenRows.js","../../src/js/modules/GroupRows/Group.js","../../src/js/modules/GroupRows/GroupRows.js","../../src/js/modules/History/defaults/undoers.js","../../src/js/modules/History/History.js","../../src/js/modules/HtmlTableImport/HtmlTableImport.js","../../src/js/modules/History/defaults/redoers.js","../../src/js/modules/Keybindings/defaults/bindings.js","../../src/js/modules/Keybindings/defaults/actions.js","../../src/js/modules/Keybindings/Keybindings.js","../../src/js/modules/Menu/Menu.js","../../src/js/modules/MoveColumns/MoveColumns.js","../../src/js/modules/MoveRows/MoveRows.js","../../src/js/modules/Mutator/defaults/mutators.js","../../src/js/modules/Mutator/Mutator.js","../../src/js/modules/Page/defaults/dataSentNames.js","../../src/js/modules/Page/Page.js","../../src/js/modules/Persistence/defaults/readers.js","../../src/js/modules/Page/defaults/dataReceivedNames.js","../../src/js/modules/Persistence/defaults/writers.js","../../src/js/modules/Persistence/Persistence.js","../../src/js/modules/Print/Print.js","../../src/js/modules/ReactiveData/ReactiveData.js","../../src/js/modules/ResizeColumns/ResizeColumns.js","../../src/js/modules/ResizeRows/ResizeRows.js","../../src/js/modules/ResizeTable/ResizeTable.js","../../src/js/modules/ResponsiveLayout/ResponsiveLayout.js","../../src/js/modules/SelectRow/SelectRow.js","../../src/js/modules/Sort/defaults/sorters/datetime.js","../../src/js/modules/Sort/defaults/sorters/date.js","../../src/js/modules/Sort/defaults/sorters/number.js","../../src/js/modules/Sort/defaults/sorters.js","../../src/js/modules/Sort/defaults/sorters/string.js","../../src/js/modules/Sort/defaults/sorters/time.js","../../src/js/modules/Sort/defaults/sorters/boolean.js","../../src/js/modules/Sort/Sort.js","../../src/js/modules/Sort/defaults/sorters/array.js","../../src/js/modules/Sort/defaults/sorters/exists.js","../../src/js/modules/Sort/defaults/sorters/alphanum.js","../../src/js/modules/Validate/defaults/validators.js","../../src/js/modules/Validate/Validate.js","../../src/js/core/defaults/options.js","../../src/js/core/ColumnManager.js","../../src/js/core/RowManager.js","../../src/js/core/FooterManager.js","../../src/js/core/TableRegistry.js","../../src/js/modules/Layout/defaults/modes/fitDataStretch.js","../../src/js/modules/Layout/defaults/modes/fitData.js","../../src/js/modules/Layout/Layout.js","../../src/js/modules/Layout/defaults/modes/fitDataGeneral.js","../../src/js/modules/Layout/defaults/modes/fitColumns.js","../../src/js/modules/Layout/defaults/modes.js","../../src/js/modules/Localize/defaults/langs.js","../../src/js/modules/Localize/Localize.js","../../src/js/modules/Comms/Comms.js","../../src/js/core/ModuleBinder.js","../../src/js/core/renderers/VirtualDomHorizontal.js","../../src/js/core/Tabulator.js","../../src/js/core/TabulatorFull.js"],"sourcesContent":["class Module{\r\n\r\n\tconstructor(table, name){\r\n\t\tthis.table = table;\r\n\t}\r\n\r\n\tregister(){\r\n\t}\r\n}\r\n\r\nexport default Module;","export default class Helpers{\r\n\r\n\tstatic elVisible(el){\r\n\t\treturn !(el.offsetWidth <= 0 && el.offsetHeight <= 0);\r\n\t}\r\n\r\n\tstatic elOffset(el){\r\n\t\tvar box = el.getBoundingClientRect();\r\n\r\n\t\treturn {\r\n\t\t\ttop: box.top + window.pageYOffset - document.documentElement.clientTop,\r\n\t\t\tleft: box.left + window.pageXOffset - document.documentElement.clientLeft\r\n\t\t};\r\n\t}\r\n\r\n\tstatic deepClone(obj){\r\n\t\tvar clone = Object.assign(Array.isArray(obj) ? [] : {}, obj);\r\n\r\n\t\tfor(var i in obj) {\r\n\t\t\tif(obj[i] != null && typeof(obj[i]) === \"object\"){\r\n\t\t\t\tif (obj[i] instanceof Date) {\r\n\t\t\t\t\tclone[i] = new Date(obj[i]);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tclone[i] = this.deepClone(obj[i]);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn clone;\r\n\t}\r\n}","import Module from '../../core/Module.js';\r\nimport Helpers from '../../core/Helpers.js';\r\n\r\nimport defautlAccessors from './defaults/accessors.js';\r\n\r\nclass Accessor extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.allowedTypes = [\"\", \"data\", \"download\", \"clipboard\", \"print\", \"htmlOutput\"] //list of accessor types\r\n\t}\r\n\r\n\t//initialize column accessor\r\n\tinitializeColumn(column){\r\n\t\tvar match = false,\r\n\t\tconfig = {};\r\n\r\n\t\tthis.allowedTypes.forEach(function(type){\r\n\t\t\tvar key = \"accessor\" + (type.charAt(0).toUpperCase() + type.slice(1)),\r\n\t\t\taccessor;\r\n\r\n\t\t\tif(column.definition[key]){\r\n\t\t\t\taccessor = this.lookupAccessor(column.definition[key]);\r\n\r\n\t\t\t\tif(accessor){\r\n\t\t\t\t\tmatch = true;\r\n\r\n\t\t\t\t\tconfig[key] = {\r\n\t\t\t\t\t\taccessor:accessor,\r\n\t\t\t\t\t\tparams: column.definition[key + \"Params\"] || {},\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tif(match){\r\n\t\t\tcolumn.modules.accessor = config;\r\n\t\t}\r\n\t}\r\n\r\n\tlookupAccessor(value){\r\n\t\tvar accessor = false;\r\n\r\n\t\t//set column accessor\r\n\t\tswitch(typeof value){\r\n\t\t\tcase \"string\":\r\n\t\t\tif(Accessor.accessors[value]){\r\n\t\t\t\taccessor = Accessor.accessors[value]\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Accessor Error - No such accessor found, ignoring: \", value);\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"function\":\r\n\t\t\taccessor = value;\r\n\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\treturn accessor;\r\n\t}\r\n\r\n\t//apply accessor to row\r\n\ttransformRow(row, type){\r\n\t\tvar key = \"accessor\" + (type.charAt(0).toUpperCase() + type.slice(1)),\r\n\t\trowComponent = row.getComponent();\r\n\r\n\t\t//clone data object with deep copy to isolate internal data from returned result\r\n\t\tvar data = Helpers.deepClone(row.data || {});\r\n\r\n\t\tthis.table.columnManager.traverse(function(column){\r\n\t\t\tvar value, accessor, params, colCompnent;\r\n\r\n\t\t\tif(column.modules.accessor){\r\n\r\n\t\t\t\taccessor = column.modules.accessor[key] || column.modules.accessor.accessor || false;\r\n\r\n\t\t\t\tif(accessor){\r\n\t\t\t\t\tvalue = column.getFieldValue(data);\r\n\r\n\t\t\t\t\tif(value != \"undefined\"){\r\n\t\t\t\t\t\tcolCompnent = column.getComponent();\r\n\t\t\t\t\t\tparams = typeof accessor.params === \"function\" ? accessor.params(value, data, type, colCompnent, rowComponent) : accessor.params;\r\n\t\t\t\t\t\tcolumn.setFieldValue(data, accessor.accessor(value, data, type, params, colCompnent, rowComponent));\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn data;\r\n\t}\r\n}\r\n\r\n//load defaults\r\nAccessor.moduleName = \"accessor\";\r\nAccessor.accessors = defautlAccessors;\r\n\r\nexport default Accessor;","export default {}","export default {\r\n\t\"json\":{\r\n\t\theaders:{\r\n\t\t\t'Content-Type': 'application/json',\r\n\t\t},\r\n\t\tbody:function(url, config, params){\r\n\t\t\treturn JSON.stringify(params);\r\n\t\t},\r\n\t},\r\n\t\"form\":{\r\n\t\theaders:{\r\n\t\t},\r\n\t\tbody:function(url, config, params){\r\n\t\t\tvar output = this.generateParamsList(params),\r\n\t\t\tform = new FormData();\r\n\r\n\t\t\toutput.forEach(function(item){\r\n\t\t\t\tform.append(item.key, item.value);\r\n\t\t\t});\r\n\r\n\t\t\treturn form;\r\n\t\t},\r\n\t},\r\n};","import Module from '../../core/Module.js';\r\n\r\nimport defaultConfig from './defaults/config.js';\r\nimport defaultURLGenerator from './defaults/urlGenerator.js';\r\nimport defaultLoaderPromise from './defaults/loaderPromise.js';\r\nimport defaultContentTypeFormatters from './defaults/contentTypeFormatters.js';\r\n\r\nclass Ajax extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.config = false; //hold config object for ajax request\r\n\t\tthis.url = \"\"; //request URL\r\n\t\tthis.urlGenerator = false;\r\n\t\tthis.params = false; //request parameters\r\n\r\n\t\tthis.loaderElement = this.createLoaderElement(); //loader message div\r\n\t\tthis.msgElement = this.createMsgElement(); //message element\r\n\t\tthis.loadingElement = false;\r\n\t\tthis.errorElement = false;\r\n\t\tthis.loaderPromise = false;\r\n\r\n\t\tthis.progressiveLoad = false;\r\n\t\tthis.loading = false;\r\n\r\n\t\tthis.requestOrder = 0; //prevent requests comming out of sequence if overridden by another load request\r\n\t}\r\n\r\n\t//initialize setup options\r\n\tinitialize(){\r\n\t\tvar template;\r\n\r\n\t\tthis.loaderElement.appendChild(this.msgElement);\r\n\r\n\t\tif(this.table.options.ajaxLoaderLoading){\r\n\t\t\tif(typeof this.table.options.ajaxLoaderLoading == \"string\"){\r\n\t\t\t\ttemplate = document.createElement('template');\r\n\t\t\t\ttemplate.innerHTML = this.table.options.ajaxLoaderLoading.trim();\r\n\t\t\t\tthis.loadingElement = template.content.firstChild;\r\n\t\t\t}else{\r\n\t\t\t\tthis.loadingElement = this.table.options.ajaxLoaderLoading;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.loaderPromise = this.table.options.ajaxRequestFunc || Ajax.defaultLoaderPromise;\r\n\r\n\t\tthis.urlGenerator = this.table.options.ajaxURLGenerator || Ajax.defaultURLGenerator;\r\n\r\n\t\tif(this.table.options.ajaxLoaderError){\r\n\t\t\tif(typeof this.table.options.ajaxLoaderError == \"string\"){\r\n\t\t\t\ttemplate = document.createElement('template');\r\n\t\t\t\ttemplate.innerHTML = this.table.options.ajaxLoaderError.trim();\r\n\t\t\t\tthis.errorElement = template.content.firstChild;\r\n\t\t\t}else{\r\n\t\t\t\tthis.errorElement = this.table.options.ajaxLoaderError;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(this.table.options.ajaxParams){\r\n\t\t\tthis.setParams(this.table.options.ajaxParams);\r\n\t\t}\r\n\r\n\t\tif(this.table.options.ajaxConfig){\r\n\t\t\tthis.setConfig(this.table.options.ajaxConfig);\r\n\t\t}\r\n\r\n\t\tif(this.table.options.ajaxURL){\r\n\t\t\tthis.setUrl(this.table.options.ajaxURL);\r\n\t\t}\r\n\r\n\t\tif(this.table.options.ajaxProgressiveLoad){\r\n\t\t\tif(this.table.options.pagination){\r\n\t\t\t\tthis.progressiveLoad = false;\r\n\t\t\t\tconsole.error(\"Progressive Load Error - Pagination and progressive load cannot be used at the same time\");\r\n\t\t\t}else{\r\n\t\t\t\tif(this.table.modExists(\"page\")){\r\n\t\t\t\t\tthis.progressiveLoad = this.table.options.ajaxProgressiveLoad;\r\n\t\t\t\t\tthis.table.modules.page.initializeProgressive(this.progressiveLoad);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.error(\"Pagination plugin is required for progressive ajax loading\");\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tcreateLoaderElement(){\r\n\t\tvar el = document.createElement(\"div\");\r\n\t\tel.classList.add(\"tabulator-loader\");\r\n\t\treturn el;\r\n\t}\r\n\r\n\tcreateMsgElement(){\r\n\t\tvar el = document.createElement(\"div\");\r\n\r\n\t\tel.classList.add(\"tabulator-loader-msg\");\r\n\t\tel.setAttribute(\"role\", \"alert\");\r\n\r\n\t\treturn el;\r\n\t}\r\n\r\n\t//set ajax params\r\n\tsetParams(params, update){\r\n\t\tif(update){\r\n\t\t\tthis.params = this.params || {};\r\n\r\n\t\t\tfor(let key in params){\r\n\t\t\t\tthis.params[key] = params[key];\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tthis.params = params;\r\n\t\t}\r\n\t}\r\n\r\n\tgetParams(){\r\n\t\treturn this.params || {};\r\n\t}\r\n\r\n\t//load config object\r\n\tsetConfig(config){\r\n\t\tthis._loadDefaultConfig();\r\n\r\n\t\tif(typeof config == \"string\"){\r\n\t\t\tthis.config.method = config;\r\n\t\t}else{\r\n\t\t\tfor(let key in config){\r\n\t\t\t\tthis.config[key] = config[key];\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//create config object from default\r\n\t_loadDefaultConfig(force){\r\n\t\tif(!this.config || force){\r\n\r\n\t\t\tthis.config = {};\r\n\r\n\t\t\t//load base config from defaults\r\n\t\t\tfor(let key in Ajax.defaultConfig){\r\n\t\t\t\tthis.config[key] = Ajax.defaultConfig[key];\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//set request url\r\n\tsetUrl(url){\r\n\t\tthis.url = url;\r\n\t}\r\n\r\n\t//get request url\r\n\tgetUrl(){\r\n\t\treturn this.url;\r\n\t}\r\n\r\n\t//lstandard loading function\r\n\tloadData(inPosition, columnsChanged){\r\n\t\tif(this.progressiveLoad){\r\n\t\t\treturn this._loadDataProgressive();\r\n\t\t}else{\r\n\t\t\treturn this._loadDataStandard(inPosition, columnsChanged);\r\n\t\t}\r\n\t}\r\n\r\n\tnextPage(diff){\r\n\t\tvar margin;\r\n\r\n\t\tif(!this.loading){\r\n\r\n\t\t\tmargin = this.table.options.ajaxProgressiveLoadScrollMargin || (this.table.rowManager.getElement().clientHeight * 2);\r\n\r\n\t\t\tif(diff < margin){\r\n\t\t\t\tthis.table.modules.page.nextPage()\r\n\t\t\t\t.then(()=>{}).catch(()=>{});\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tblockActiveRequest(){\r\n\t\tthis.requestOrder ++;\r\n\t}\r\n\r\n\t_loadDataProgressive(){\r\n\t\tthis.table.rowManager.setData([]);\r\n\t\treturn this.table.modules.page.setPage(1);\r\n\t}\r\n\r\n\t_loadDataStandard(inPosition, columnsChanged){\r\n\t\treturn new Promise((resolve, reject)=>{\r\n\t\t\tthis.sendRequest(inPosition)\r\n\t\t\t.then((data)=>{\r\n\t\t\t\tthis.table.rowManager.setData(data, inPosition, columnsChanged)\r\n\t\t\t\t.then(()=>{\r\n\t\t\t\t\tresolve();\r\n\t\t\t\t})\r\n\t\t\t\t.catch((e)=>{\r\n\t\t\t\t\treject(e)\r\n\t\t\t\t});\r\n\t\t\t})\r\n\t\t\t.catch((e)=>{\r\n\t\t\t\treject(e)\r\n\t\t\t});\r\n\t\t});\r\n\t}\r\n\r\n\tgenerateParamsList(data, prefix){\r\n\t\tvar output = [];\r\n\r\n\t\tprefix = prefix || \"\";\r\n\r\n\t\tif(Array.isArray(data)){\r\n\t\t\tdata.forEach((item, i) => {\r\n\t\t\t\toutput = output.concat(this.generateParamsList(item, prefix ? prefix + \"[\" + i + \"]\" : i));\r\n\t\t\t});\r\n\t\t}else if (typeof data === \"object\"){\r\n\t\t\tfor (var key in data){\r\n\t\t\t\toutput = output.concat(this.generateParamsList(data[key], prefix ? prefix + \"[\" + key + \"]\" : key));\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\toutput.push({key:prefix, value:data});\r\n\t\t}\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tserializeParams(params){\r\n\t\tvar output = this.generateParamsList(params),\r\n\t\tencoded = [];\r\n\r\n\t\toutput.forEach(function(item){\r\n\t\t\tencoded.push(encodeURIComponent(item.key) + \"=\" + encodeURIComponent(item.value));\r\n\t\t});\r\n\r\n\t\treturn encoded.join(\"&\");\r\n\t}\r\n\r\n\t//send ajax request\r\n\tsendRequest(silent){\r\n\t\tvar url = this.url,\r\n\t\trequestNo, esc, query;\r\n\r\n\t\tthis.requestOrder ++;\r\n\t\trequestNo = this.requestOrder;\r\n\r\n\t\tthis._loadDefaultConfig();\r\n\r\n\t\treturn new Promise((resolve, reject)=>{\r\n\t\t\tif(this.table.options.ajaxRequesting.call(this.table, this.url, this.params) !== false){\r\n\r\n\t\t\t\tthis.loading = true;\r\n\r\n\t\t\t\tif(!silent){\r\n\t\t\t\t\tthis.showLoader();\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.loaderPromise(url, this.config, this.params).then((data)=>{\r\n\t\t\t\t\tif(requestNo === this.requestOrder){\r\n\t\t\t\t\t\tif(this.table.options.ajaxResponse){\r\n\t\t\t\t\t\t\tdata = this.table.options.ajaxResponse.call(this.table, this.url, this.params, data);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tresolve(data);\r\n\r\n\t\t\t\t\t\tthis.hideLoader();\r\n\t\t\t\t\t\tthis.loading = false;\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tconsole.warn(\"Ajax Response Blocked - An active ajax request was blocked by an attempt to change table data while the request was being made\");\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t})\r\n\t\t\t\t.catch((error)=>{\r\n\t\t\t\t\tconsole.error(\"Ajax Load Error: \", error);\r\n\t\t\t\t\tthis.table.options.ajaxError.call(this.table, error);\r\n\r\n\t\t\t\t\tthis.showError();\r\n\r\n\t\t\t\t\tsetTimeout(() => {\r\n\t\t\t\t\t\tthis.hideLoader();\r\n\t\t\t\t\t}, 3000);\r\n\r\n\t\t\t\t\tthis.loading = false;\r\n\r\n\t\t\t\t\treject(error);\r\n\t\t\t\t});\r\n\t\t\t}else{\r\n\t\t\t\treject();\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tshowLoader(){\r\n\t\tvar shouldLoad = typeof this.table.options.ajaxLoader === \"function\" ? this.table.options.ajaxLoader() : this.table.options.ajaxLoader;\r\n\r\n\t\tif(shouldLoad){\r\n\r\n\t\t\tthis.hideLoader();\r\n\r\n\t\t\twhile(this.msgElement.firstChild) this.msgElement.removeChild(this.msgElement.firstChild);\r\n\t\t\tthis.msgElement.classList.remove(\"tabulator-error\");\r\n\t\t\tthis.msgElement.classList.add(\"tabulator-loading\");\r\n\r\n\t\t\tif(this.loadingElement){\r\n\t\t\t\tthis.msgElement.appendChild(this.loadingElement);\r\n\t\t\t}else{\r\n\t\t\t\tthis.msgElement.innerHTML = this.table.modules.localize.getText(\"ajax|loading\");\r\n\t\t\t}\r\n\r\n\t\t\tthis.table.element.appendChild(this.loaderElement);\r\n\t\t}\r\n\t}\r\n\r\n\tshowError(){\r\n\t\tthis.hideLoader();\r\n\r\n\t\twhile(this.msgElement.firstChild) this.msgElement.removeChild(this.msgElement.firstChild);\r\n\t\tthis.msgElement.classList.remove(\"tabulator-loading\");\r\n\t\tthis.msgElement.classList.add(\"tabulator-error\");\r\n\r\n\t\tif(this.errorElement){\r\n\t\t\tthis.msgElement.appendChild(this.errorElement);\r\n\t\t}else{\r\n\t\t\tthis.msgElement.innerHTML = this.table.modules.localize.getText(\"ajax|error\");\r\n\t\t}\r\n\r\n\t\tthis.table.element.appendChild(this.loaderElement);\r\n\t}\r\n\r\n\thideLoader(){\r\n\t\tif(this.loaderElement.parentNode){\r\n\t\t\tthis.loaderElement.parentNode.removeChild(this.loaderElement);\r\n\t\t}\r\n\t}\r\n}\r\n\r\nAjax.moduleName = \"ajax\";\r\n\r\n//load defaults\r\nAjax.defaultConfig = defaultConfig;\r\nAjax.defaultURLGenerator = defaultURLGenerator;\r\nAjax.defaultLoaderPromise = defaultLoaderPromise;\r\nAjax.contentTypeFormatters = defaultContentTypeFormatters;\r\n\r\nexport default Ajax;","export default {\r\n\tmethod: \"GET\",\r\n};","export default function(url, config, params){\r\n\tif(url){\r\n\t\tif(params && Object.keys(params).length){\r\n\t\t\tif(!config.method || config.method.toLowerCase() == \"get\"){\r\n\t\t\t\tconfig.method = \"get\";\r\n\r\n\t\t\t\turl += (url.includes(\"?\") ? \"&\" : \"?\") + this.modules.ajax.serializeParams(params);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\treturn url;\r\n};","export default function(url, config, params){\r\n\tvar contentType;\r\n\r\n\treturn new Promise((resolve, reject) => {\r\n\t\t//set url\r\n\t\turl = this.urlGenerator.call(this.table, url, config, params);\r\n\r\n\t\t//set body content if not GET request\r\n\t\tif(config.method.toUpperCase() != \"GET\"){\r\n\t\t\tcontentType = typeof this.table.options.ajaxContentType === \"object\" ? this.table.options.ajaxContentType : this.contentTypeFormatters[this.table.options.ajaxContentType];\r\n\t\t\tif(contentType){\r\n\r\n\t\t\t\tfor(var key in contentType.headers){\r\n\t\t\t\t\tif(!config.headers){\r\n\t\t\t\t\t\tconfig.headers = {};\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif(typeof config.headers[key] === \"undefined\"){\r\n\t\t\t\t\t\tconfig.headers[key] = contentType.headers[key];\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tconfig.body = contentType.body.call(this, url, config, params);\r\n\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Ajax Error - Invalid ajaxContentType value:\", this.table.options.ajaxContentType);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(url){\r\n\t\t\t//configure headers\r\n\t\t\tif(typeof config.headers === \"undefined\"){\r\n\t\t\t\tconfig.headers = {};\r\n\t\t\t}\r\n\r\n\t\t\tif(typeof config.headers.Accept === \"undefined\"){\r\n\t\t\t\tconfig.headers.Accept = \"application/json\";\r\n\t\t\t}\r\n\r\n\t\t\tif(typeof config.headers[\"X-Requested-With\"] === \"undefined\"){\r\n\t\t\t\tconfig.headers[\"X-Requested-With\"] = \"XMLHttpRequest\";\r\n\t\t\t}\r\n\r\n\t\t\tif(typeof config.mode === \"undefined\"){\r\n\t\t\t\tconfig.mode = \"cors\";\r\n\t\t\t}\r\n\r\n\t\t\tif(config.mode == \"cors\"){\r\n\r\n\t\t\t\tif(typeof config.headers[\"Access-Control-Allow-Origin\"] === \"undefined\"){\r\n\t\t\t\t\tconfig.headers[\"Access-Control-Allow-Origin\"] = window.location.origin;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(typeof config.credentials === \"undefined\"){\r\n\t\t\t\t\tconfig.credentials = 'same-origin';\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tif(typeof config.credentials === \"undefined\"){\r\n\t\t\t\t\tconfig.credentials = 'include';\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t//send request\r\n\t\t\tfetch(url, config)\r\n\t\t\t.then((response)=>{\r\n\t\t\t\tif(response.ok) {\r\n\t\t\t\t\tresponse.json()\r\n\t\t\t\t\t.then((data)=>{\r\n\t\t\t\t\t\tresolve(data);\r\n\t\t\t\t\t}).catch((error)=>{\r\n\t\t\t\t\t\treject(error);\r\n\t\t\t\t\t\tconsole.warn(\"Ajax Load Error - Invalid JSON returned\", error);\r\n\t\t\t\t\t});\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.error(\"Ajax Load Error - Connection Error: \" + response.status, response.statusText);\r\n\t\t\t\t\treject(response);\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t\t.catch((error)=>{\r\n\t\t\t\tconsole.error(\"Ajax Load Error - Connection Error: \", error);\r\n\t\t\t\treject(error);\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Ajax Load Error - No URL Set\");\r\n\t\t\tresolve([]);\r\n\t\t}\r\n\t});\r\n};","import Module from '../../core/Module.js';\r\n\r\nimport defaultPasteActions from './defaults/pasteActions.js';\r\nimport defaultPasteParsers from './defaults/pasteParsers.js';\r\n\r\nclass Clipboard extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.mode = true;\r\n\t\tthis.pasteParser = function(){};\r\n\t\tthis.pasteAction = function(){};\r\n\t\tthis.customSelection = false;\r\n\t\tthis.rowRange = false;\r\n\t\tthis.blocked = true; //block copy actions not originating from this command\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tthis.mode = this.table.options.clipboard;\r\n\r\n\t\tthis.rowRange = this.table.options.clipboardCopyRowRange;\r\n\r\n\t\tif(this.mode === true || this.mode === \"copy\"){\r\n\t\t\tthis.table.element.addEventListener(\"copy\", (e) => {\r\n\t\t\t\tvar plain, html, list;\r\n\r\n\t\t\t\tif(!this.blocked){\r\n\t\t\t\t\te.preventDefault();\r\n\r\n\t\t\t\t\tif(this.customSelection){\r\n\t\t\t\t\t\tplain = this.customSelection;\r\n\r\n\t\t\t\t\t\tif(this.table.options.clipboardCopyFormatter){\r\n\t\t\t\t\t\t\tplain = this.table.options.clipboardCopyFormatter(\"plain\", plain);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}else{\r\n\r\n\t\t\t\t\t\tvar list = this.table.modules.export.generateExportList(this.table.options.clipboardCopyConfig, this.table.options.clipboardCopyStyled, this.rowRange, \"clipboard\");\r\n\r\n\t\t\t\t\t\thtml = this.table.modules.export.genereateHTMLTable(list);\r\n\t\t\t\t\t\tplain = html ? this.generatePlainContent(list) : \"\";\r\n\r\n\t\t\t\t\t\tif(this.table.options.clipboardCopyFormatter){\r\n\t\t\t\t\t\t\tplain = this.table.options.clipboardCopyFormatter(\"plain\", plain);\r\n\t\t\t\t\t\t\thtml = this.table.options.clipboardCopyFormatter(\"html\", html);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (window.clipboardData && window.clipboardData.setData) {\r\n\t\t\t\t\t\twindow.clipboardData.setData('Text', plain);\r\n\t\t\t\t\t} else if (e.clipboardData && e.clipboardData.setData) {\r\n\t\t\t\t\t\te.clipboardData.setData('text/plain', plain);\r\n\t\t\t\t\t\tif(html){\r\n\t\t\t\t\t\t\te.clipboardData.setData('text/html', html);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} else if (e.originalEvent && e.originalEvent.clipboardData.setData) {\r\n\t\t\t\t\t\te.originalEvent.clipboardData.setData('text/plain', plain);\r\n\t\t\t\t\t\tif(html){\r\n\t\t\t\t\t\t\te.originalEvent.clipboardData.setData('text/html', html);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tthis.table.options.clipboardCopied.call(this.table, plain, html);\r\n\r\n\t\t\t\t\tthis.reset();\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif(this.mode === true || this.mode === \"paste\"){\r\n\t\t\tthis.table.element.addEventListener(\"paste\", (e) => {\r\n\t\t\t\tthis.paste(e);\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tthis.setPasteParser(this.table.options.clipboardPasteParser);\r\n\t\tthis.setPasteAction(this.table.options.clipboardPasteAction);\r\n\t}\r\n\r\n\treset(){\r\n\t\tthis.blocked = true;\r\n\t\tthis.customSelection = false;\r\n\t}\r\n\r\n\tgeneratePlainContent (list) {\r\n\t\tvar output = [];\r\n\r\n\t\tlist.forEach((row) => {\r\n\t\t\tvar rowData = [];\r\n\r\n\t\t\trow.columns.forEach((col) => {\r\n\t\t\t\tvar value = \"\";\r\n\r\n\t\t\t\tif(col){\r\n\r\n\t\t\t\t\tif(row.type === \"group\"){\r\n\t\t\t\t\t\tcol.value = col.component.getKey();\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif(col.value === null){\r\n\t\t\t\t\t\tvalue = \"\";\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tswitch(typeof col.value){\r\n\t\t\t\t\t\t\tcase \"object\":\r\n\t\t\t\t\t\t\tvalue = JSON.stringify(col.value);\r\n\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\t\tcase \"undefined\":\r\n\t\t\t\t\t\t\tvalue = \"\";\r\n\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\t\tdefault:\r\n\t\t\t\t\t\t\tvalue = col.value;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\trowData.push(value);\r\n\t\t\t});\r\n\r\n\t\t\toutput.push(rowData.join(\"\\t\"));\r\n\t\t});\r\n\r\n\t\treturn output.join(\"\\n\");\r\n\t}\r\n\r\n\tcopy (range, internal) {\r\n\t\tvar range, sel, textRange;\r\n\t\tthis.blocked = false;\r\n\t\tthis.customSelection = false;\r\n\r\n\t\tif (this.mode === true || this.mode === \"copy\") {\r\n\r\n\t\t\tthis.rowRange = range || this.table.options.clipboardCopyRowRange;\r\n\r\n\t\t\tif (typeof window.getSelection != \"undefined\" && typeof document.createRange != \"undefined\") {\r\n\t\t\t\trange = document.createRange();\r\n\t\t\t\trange.selectNodeContents(this.table.element);\r\n\t\t\t\tsel = window.getSelection();\r\n\r\n\t\t\t\tif (sel.toString() && internal) {\r\n\t\t\t\t\tthis.customSelection = sel.toString();\r\n\t\t\t\t}\r\n\r\n\t\t\t\tsel.removeAllRanges();\r\n\t\t\t\tsel.addRange(range);\r\n\t\t\t} else if (typeof document.selection != \"undefined\" && typeof document.body.createTextRange != \"undefined\") {\r\n\t\t\t\ttextRange = document.body.createTextRange();\r\n\t\t\t\ttextRange.moveToElementText(this.table.element);\r\n\t\t\t\ttextRange.select();\r\n\t\t\t}\r\n\r\n\t\t\tdocument.execCommand('copy');\r\n\r\n\t\t\tif (sel) {\r\n\t\t\t\tsel.removeAllRanges();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//PASTE EVENT HANDLING\r\n\tsetPasteAction(action){\r\n\r\n\t\tswitch(typeof action){\r\n\t\t\tcase \"string\":\r\n\t\t\tthis.pasteAction = Clipboard.pasteActions[action];\r\n\r\n\t\t\tif(!this.pasteAction){\r\n\t\t\t\tconsole.warn(\"Clipboard Error - No such paste action found:\", action);\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"function\":\r\n\t\t\tthis.pasteAction = action;\r\n\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\tsetPasteParser(parser){\r\n\t\tswitch(typeof parser){\r\n\t\t\tcase \"string\":\r\n\t\t\tthis.pasteParser = Clipboard.pasteParsers[parser];\r\n\r\n\t\t\tif(!this.pasteParser){\r\n\t\t\t\tconsole.warn(\"Clipboard Error - No such paste parser found:\", parser);\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"function\":\r\n\t\t\tthis.pasteParser = parser;\r\n\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\tpaste(e){\r\n\t\tvar data, rowData, rows;\r\n\r\n\t\tif(this.checkPaseOrigin(e)){\r\n\r\n\t\t\tdata = this.getPasteData(e);\r\n\r\n\t\t\trowData = this.pasteParser.call(this, data);\r\n\r\n\t\t\tif(rowData){\r\n\t\t\t\te.preventDefault();\r\n\r\n\t\t\t\tif(this.table.modExists(\"mutator\")){\r\n\t\t\t\t\trowData = this.mutateData(rowData);\r\n\t\t\t\t}\r\n\r\n\t\t\t\trows = this.pasteAction.call(this, rowData);\r\n\t\t\t\tthis.table.options.clipboardPasted.call(this.table, data, rowData, rows);\r\n\t\t\t}else{\r\n\t\t\t\tthis.table.options.clipboardPasteError.call(this.table, data);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tmutateData(data){\r\n\t\tvar output = [];\r\n\r\n\t\tif(Array.isArray(data)){\r\n\t\t\tdata.forEach((row) => {\r\n\t\t\t\toutput.push(this.table.modules.mutator.transformRow(row, \"clipboard\"));\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\toutput = data;\r\n\t\t}\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\r\n\tcheckPaseOrigin(e){\r\n\t\tvar valid = true;\r\n\r\n\t\tif(e.target.tagName != \"DIV\" || this.table.modules.edit.currentCell){\r\n\t\t\tvalid = false;\r\n\t\t}\r\n\r\n\t\treturn valid;\r\n\t}\r\n\r\n\tgetPasteData(e){\r\n\t\tvar data;\r\n\r\n\t\tif (window.clipboardData && window.clipboardData.getData) {\r\n\t\t\tdata = window.clipboardData.getData('Text');\r\n\t\t} else if (e.clipboardData && e.clipboardData.getData) {\r\n\t\t\tdata = e.clipboardData.getData('text/plain');\r\n\t\t} else if (e.originalEvent && e.originalEvent.clipboardData.getData) {\r\n\t\t\tdata = e.originalEvent.clipboardData.getData('text/plain');\r\n\t\t}\r\n\r\n\t\treturn data;\r\n\t}\r\n}\r\n\r\nClipboard.moduleName = \"clipboard\";\r\n\r\n//load defaults\r\nClipboard.pasteActions = defaultPasteActions;\r\nClipboard.pasteParsers = defaultPasteParsers;\r\n\r\nexport default Clipboard;","export default {\r\n\treplace:function(rows){\r\n\t\treturn this.table.setData(rows);\r\n\t},\r\n\tupdate:function(rows){\r\n\t\treturn this.table.updateOrAddData(rows);\r\n\t},\r\n\tinsert:function(rows){\r\n\t\treturn this.table.addData(rows);\r\n\t},\r\n};","export default {\r\n\ttable:function(clipboard){\r\n\t\tvar data = [],\r\n\t\tsuccess = false,\r\n\t\theaderFindSuccess = true,\r\n\t\tcolumns = this.table.columnManager.columns,\r\n\t\tcolumnMap = [],\r\n\t\trows = [];\r\n\r\n\t\t//get data from clipboard into array of columns and rows.\r\n\t\tclipboard = clipboard.split(\"\\n\");\r\n\r\n\t\tclipboard.forEach(function(row){\r\n\t\t\tdata.push(row.split(\"\\t\"));\r\n\t\t});\r\n\r\n\t\tif(data.length && !(data.length === 1 && data[0].length < 2)){\r\n\t\t\tsuccess = true;\r\n\r\n\t\t\t//check if headers are present by title\r\n\t\t\tdata[0].forEach(function(value){\r\n\t\t\t\tvar column = columns.find(function(column){\r\n\t\t\t\t\treturn value && column.definition.title && value.trim() && column.definition.title.trim() === value.trim();\r\n\t\t\t\t});\r\n\r\n\t\t\t\tif(column){\r\n\t\t\t\t\tcolumnMap.push(column);\r\n\t\t\t\t}else{\r\n\t\t\t\t\theaderFindSuccess = false;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\t//check if column headers are present by field\r\n\t\t\tif(!headerFindSuccess){\r\n\t\t\t\theaderFindSuccess = true;\r\n\t\t\t\tcolumnMap = [];\r\n\r\n\t\t\t\tdata[0].forEach(function(value){\r\n\t\t\t\t\tvar column = columns.find(function(column){\r\n\t\t\t\t\t\treturn value && column.field && value.trim() && column.field.trim() === value.trim();\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\tif(column){\r\n\t\t\t\t\t\tcolumnMap.push(column);\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\theaderFindSuccess = false;\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\tif(!headerFindSuccess){\r\n\t\t\t\t\tcolumnMap = this.table.columnManager.columnsByIndex;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t//remove header row if found\r\n\t\t\tif(headerFindSuccess){\r\n\t\t\t\tdata.shift();\r\n\t\t\t}\r\n\r\n\t\t\tdata.forEach(function(item){\r\n\t\t\t\tvar row = {};\r\n\r\n\t\t\t\titem.forEach(function(value, i){\r\n\t\t\t\t\tif(columnMap[i]){\r\n\t\t\t\t\t\trow[columnMap[i].field] = value;\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\trows.push(row);\r\n\t\t\t});\r\n\r\n\t\t\treturn rows;\r\n\t\t}else{\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n};","class CalcComponent{\r\n\tconstructor (row){\r\n\t\tthis._row = row;\r\n\t}\r\n\r\n\tgetData(transform){\r\n\t\treturn this._row.getData(transform);\r\n\t}\r\n\r\n\tgetElement(){\r\n\t\treturn this._row.getElement();\r\n\t}\r\n\r\n\tgetTable(){\r\n\t\treturn this._row.table;\r\n\t}\r\n\r\n\tgetCells(){\r\n\t\tvar cells = [];\r\n\r\n\t\tthis._row.getCells().forEach(function(cell){\r\n\t\t\tcells.push(cell.getComponent());\r\n\t\t});\r\n\r\n\t\treturn cells;\r\n\t}\r\n\r\n\tgetCell(column){\r\n\t\tvar cell = this._row.getCell(column);\r\n\t\treturn cell ? cell.getComponent() : false;\r\n\t}\r\n\r\n\t_getSelf(){\r\n\t\treturn this._row;\r\n\t}\r\n}\r\n\r\nexport default CalcComponent;","//public cell object\r\nexport default class CellComponent {\r\n\r\n\tconstructor (cell){\r\n\t\tthis._cell = cell;\r\n\t}\r\n\r\n\tgetValue(){\r\n\t\treturn this._cell.getValue();\r\n\t}\r\n\r\n\tgetOldValue(){\r\n\t\treturn this._cell.getOldValue();\r\n\t}\r\n\r\n\tgetInitialValue(){\r\n\t\treturn this._cell.initialValue;\r\n\t}\r\n\r\n\tgetElement(){\r\n\t\treturn this._cell.getElement();\r\n\t}\r\n\r\n\tgetRow(){\r\n\t\treturn this._cell.row.getComponent();\r\n\t}\r\n\r\n\tgetData(){\r\n\t\treturn this._cell.row.getData();\r\n\t}\r\n\r\n\tgetField(){\r\n\t\treturn this._cell.column.getField();\r\n\t}\r\n\r\n\tgetColumn(){\r\n\t\treturn this._cell.column.getComponent();\r\n\t}\r\n\r\n\tsetValue(value, mutate){\r\n\t\tif(typeof mutate == \"undefined\"){\r\n\t\t\tmutate = true;\r\n\t\t}\r\n\r\n\t\tthis._cell.setValue(value, mutate);\r\n\t}\r\n\r\n\trestoreOldValue(){\r\n\t\tthis._cell.setValueActual(this._cell.getOldValue());\r\n\t}\r\n\r\n\trestoreInitialValue(){\r\n\t\tthis._cell.setValueActual(this._cell.initialValue);\r\n\t}\r\n\r\n\tedit(force){\r\n\t\treturn this._cell.edit(force);\r\n\t}\r\n\r\n\tcancelEdit(){\r\n\t\tthis._cell.cancelEdit();\r\n\t}\r\n\r\n\tisEdited(){\r\n\t\treturn !! this._cell.modules.edit && this._cell.modules.edit.edited;\r\n\t}\r\n\r\n\tclearEdited(){\r\n\t\tif(this._cell.table.modExists(\"edit\", true)){\r\n\t\t\tthis._cell.table.modules.edit.clearEdited(this._cell);\r\n\t\t}\r\n\t}\r\n\r\n\tisValid(){\r\n\t\treturn this._cell.modules.validate ? !this._cell.modules.validate.invalid : true;\r\n\t}\r\n\r\n\tvalidate(){\r\n\t\treturn this._cell.validate();\r\n\t}\r\n\r\n\tclearValidation(){\r\n\t\tif(this._cell.table.modExists(\"validate\", true)){\r\n\t\t\tthis._cell.table.modules.validate.clearValidation(this._cell);\r\n\t\t}\r\n\t}\r\n\r\n\tnav(){\r\n\t\treturn this._cell.nav();\r\n\t}\r\n\r\n\tcheckHeight(){\r\n\t\tthis._cell.checkHeight();\r\n\t}\r\n\r\n\tgetTable(){\r\n\t\treturn this._cell.table;\r\n\t}\r\n\r\n\t_getSelf(){\r\n\t\treturn this._cell;\r\n\t}\r\n}","import CellComponent from './CellComponent.js';\r\n\r\nexport default class Cell {\r\n\tconstructor(column, row){\r\n\t\tthis.table = column.table;\r\n\t\tthis.column = column;\r\n\t\tthis.row = row;\r\n\t\tthis.element = null;\r\n\t\tthis.value = null;\r\n\t\tthis.initialValue;\r\n\t\tthis.oldValue = null;\r\n\t\tthis.modules = {};\r\n\r\n\t\tthis.height = null;\r\n\t\tthis.width = null;\r\n\t\tthis.minWidth = null;\r\n\r\n\t\tthis.component = null;\r\n\r\n\t\tthis.loaded = false; //track if the cell has been added to the DOM yet\r\n\r\n\t\tthis.build();\r\n\t}\r\n\r\n\t//////////////// Setup Functions /////////////////\r\n\t//generate element\r\n\tbuild(){\r\n\t\tthis.generateElement();\r\n\r\n\t\tthis.setWidth();\r\n\r\n\t\tthis._configureCell();\r\n\r\n\t\tthis.setValueActual(this.column.getFieldValue(this.row.data));\r\n\r\n\t\tthis.initialValue = this.value;\r\n\t}\r\n\r\n\tgenerateElement(){\r\n\t\tthis.element = document.createElement('div');\r\n\t\tthis.element.className = \"tabulator-cell\";\r\n\t\tthis.element.setAttribute(\"role\", \"gridcell\");\r\n\t\tthis.element = this.element;\r\n\t}\r\n\r\n\t_configureCell(){\r\n\t\tvar cellEvents = this.column.cellEvents,\r\n\t\telement = this.element,\r\n\t\tfield = this.column.getField(),\r\n\t\tvertAligns = {\r\n\t\t\ttop:\"flex-start\",\r\n\t\t\tbottom:\"flex-end\",\r\n\t\t\tmiddle:\"center\",\r\n\t\t},\r\n\t\thozAligns = {\r\n\t\t\tleft:\"flex-start\",\r\n\t\t\tright:\"flex-end\",\r\n\t\t\tcenter:\"center\",\r\n\t\t};\r\n\r\n\t\t//set text alignment\r\n\t\telement.style.textAlign = this.column.hozAlign;\r\n\r\n\t\tif(this.column.vertAlign){\r\n\t\t\telement.style.display = \"inline-flex\";\r\n\r\n\t\t\telement.style.alignItems = vertAligns[this.column.vertAlign] || \"\";\r\n\r\n\t\t\tif(this.column.hozAlign){\r\n\t\t\t\telement.style.justifyContent = hozAligns[this.column.hozAlign] || \"\";\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(field){\r\n\t\t\telement.setAttribute(\"tabulator-field\", field);\r\n\t\t}\r\n\r\n\t\t//add class to cell if needed\r\n\t\tif(this.column.definition.cssClass){\r\n\t\t\tvar classNames = this.column.definition.cssClass.split(\" \")\r\n\t\t\tclassNames.forEach((className) => {\r\n\t\t\t\telement.classList.add(className)\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\t//update tooltip on mouse enter\r\n\t\tif (this.table.options.tooltipGenerationMode === \"hover\"){\r\n\t\t\telement.addEventListener(\"mouseenter\", (e) => {\r\n\t\t\t\tthis._generateTooltip();\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tthis._bindClickEvents(cellEvents);\r\n\r\n\t\tthis._bindTouchEvents(cellEvents);\r\n\r\n\t\tthis._bindMouseEvents(cellEvents);\r\n\r\n\t\tif(this.column.modules.edit){\r\n\t\t\tthis.table.modules.edit.bindEditor(this);\r\n\t\t}\r\n\r\n\t\tif(this.column.definition.rowHandle && this.table.options.movableRows !== false && this.table.modExists(\"moveRow\")){\r\n\t\t\tthis.table.modules.moveRow.initializeCell(this);\r\n\t\t}\r\n\r\n\t\t//hide cell if not visible\r\n\t\tif(!this.column.visible){\r\n\t\t\tthis.hide();\r\n\t\t}\r\n\t}\r\n\r\n\t_bindClickEvents(cellEvents){\r\n\t\tvar element = this.element;\r\n\r\n\t\t//set event bindings\r\n\t\tif (cellEvents.cellClick || this.table.options.cellClick){\r\n\t\t\telement.addEventListener(\"click\", (e) => {\r\n\t\t\t\tvar component = this.getComponent();\r\n\r\n\t\t\t\tif(cellEvents.cellClick){\r\n\t\t\t\t\tcellEvents.cellClick.call(this.table, e, component);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(this.table.options.cellClick){\r\n\t\t\t\t\tthis.table.options.cellClick.call(this.table, e, component);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif (cellEvents.cellDblClick || this.table.options.cellDblClick){\r\n\t\t\telement.addEventListener(\"dblclick\", (e) => {\r\n\t\t\t\tvar component = this.getComponent();\r\n\r\n\t\t\t\tif(cellEvents.cellDblClick){\r\n\t\t\t\t\tcellEvents.cellDblClick.call(this.table, e, component);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(this.table.options.cellDblClick){\r\n\t\t\t\t\tthis.table.options.cellDblClick.call(this.table, e, component);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\telement.addEventListener(\"dblclick\", (e) => {\r\n\t\t\t\tif(this.table.modExists(\"edit\")){\r\n\t\t\t\t\tif (this.table.modules.edit.currentCell === this){\r\n\t\t\t\t\t\treturn; //prevent instant selection of editor content\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\te.preventDefault();\r\n\r\n\t\t\t\ttry{\r\n\t\t\t\t\tif (document.selection) { // IE\r\n\t\t\t\t\t\tvar range = document.body.createTextRange();\r\n\t\t\t\t\t\trange.moveToElementText(this.element);\r\n\t\t\t\t\t\trange.select();\r\n\t\t\t\t\t} else if (window.getSelection) {\r\n\t\t\t\t\t\tvar range = document.createRange();\r\n\t\t\t\t\t\trange.selectNode(this.element);\r\n\t\t\t\t\t\twindow.getSelection().removeAllRanges();\r\n\t\t\t\t\t\twindow.getSelection().addRange(range);\r\n\t\t\t\t\t}\r\n\t\t\t\t}catch(e){}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif (cellEvents.cellContext || this.table.options.cellContext){\r\n\t\t\telement.addEventListener(\"contextmenu\", (e) => {\r\n\t\t\t\tvar component = this.getComponent();\r\n\r\n\t\t\t\tif(cellEvents.cellContext){\r\n\t\t\t\t\tcellEvents.cellContext.call(this.table, e, component);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(this.table.options.cellContext){\r\n\t\t\t\t\tthis.table.options.cellContext.call(this.table, e, component);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\t_bindMouseEvents(cellEvents){\r\n\t\tvar element = this.element;\r\n\r\n\t\tif (cellEvents.cellMouseEnter || this.table.options.cellMouseEnter){\r\n\t\t\telement.addEventListener(\"mouseenter\", (e) => {\r\n\t\t\t\tvar component = this.getComponent();\r\n\r\n\t\t\t\tif(cellEvents.cellMouseEnter){\r\n\t\t\t\t\tcellEvents.cellMouseEnter.call(this.table, e, component);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(this.table.options.cellMouseEnter){\r\n\t\t\t\t\tthis.table.options.cellMouseEnter.call(this.table, e, component);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif (cellEvents.cellMouseLeave || this.table.options.cellMouseLeave){\r\n\t\t\telement.addEventListener(\"mouseleave\", (e) => {\r\n\t\t\t\tvar component = this.getComponent();\r\n\r\n\t\t\t\tif(cellEvents.cellMouseLeave){\r\n\t\t\t\t\tcellEvents.cellMouseLeave.call(this.table, e, component);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(this.table.options.cellMouseLeave){\r\n\t\t\t\t\tthis.table.options.cellMouseLeave.call(this.table, e, component);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif (cellEvents.cellMouseOver || this.table.options.cellMouseOver){\r\n\t\t\telement.addEventListener(\"mouseover\", (e) => {\r\n\t\t\t\tvar component = this.getComponent();\r\n\r\n\t\t\t\tif(cellEvents.cellMouseOver){\r\n\t\t\t\t\tcellEvents.cellMouseOver.call(this.table, e, component);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(this.table.options.cellMouseOver){\r\n\t\t\t\t\tthis.table.options.cellMouseOver.call(this.table, e, component);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif (cellEvents.cellMouseOut || this.table.options.cellMouseOut){\r\n\t\t\telement.addEventListener(\"mouseout\", (e) => {\r\n\t\t\t\tvar component = this.getComponent();\r\n\r\n\t\t\t\tif(cellEvents.cellMouseOut){\r\n\t\t\t\t\tcellEvents.cellMouseOut.call(this.table, e, component);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(this.table.options.cellMouseOut){\r\n\t\t\t\t\tthis.table.options.cellMouseOut.call(this.table, e, component);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif (cellEvents.cellMouseMove || this.table.options.cellMouseMove){\r\n\t\t\telement.addEventListener(\"mousemove\", (e) => {\r\n\t\t\t\tvar component = this.getComponent();\r\n\r\n\t\t\t\tif(cellEvents.cellMouseMove){\r\n\t\t\t\t\tcellEvents.cellMouseMove.call(this.table, e, component);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(this.table.options.cellMouseMove){\r\n\t\t\t\t\tthis.table.options.cellMouseMove.call(this.table, e, component);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\t_bindTouchEvents(cellEvents){\r\n\t\tvar element = this.element,\r\n\t\tdblTap,\ttapHold, tap;\r\n\r\n\t\tif (cellEvents.cellTap || this.table.options.cellTap){\r\n\t\t\ttap = false;\r\n\r\n\t\t\telement.addEventListener(\"touchstart\", (e) => {\r\n\t\t\t\ttap = true;\r\n\t\t\t}, {passive: true});\r\n\r\n\t\t\telement.addEventListener(\"touchend\", (e) => {\r\n\t\t\t\tif(tap){\r\n\t\t\t\t\tvar component = this.getComponent();\r\n\r\n\t\t\t\t\tif(cellEvents.cellTap){\r\n\t\t\t\t\t\tcellEvents.cellTap.call(this.table, e, component);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif(this.table.options.cellTap){\r\n\t\t\t\t\t\tthis.table.options.cellTap.call(this.table, e, component);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\ttap = false;\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif (cellEvents.cellDblTap || this.table.options.cellDblTap){\r\n\t\t\tdblTap = null;\r\n\r\n\t\t\telement.addEventListener(\"touchend\", (e) => {\r\n\t\t\t\tif(dblTap){\r\n\t\t\t\t\tclearTimeout(dblTap);\r\n\t\t\t\t\tdblTap = null;\r\n\r\n\t\t\t\t\tvar component = this.getComponent();\r\n\r\n\t\t\t\t\tif(cellEvents.cellDblTap){\r\n\t\t\t\t\t\tcellEvents.cellDblTap.call(this.table, e, component);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif(this.table.options.cellDblTap){\r\n\t\t\t\t\t\tthis.table.options.cellDblTap.call(this.table, e, component);\r\n\t\t\t\t\t}\r\n\t\t\t\t}else{\r\n\r\n\t\t\t\t\tdblTap = setTimeout(() => {\r\n\t\t\t\t\t\tclearTimeout(dblTap);\r\n\t\t\t\t\t\tdblTap = null;\r\n\t\t\t\t\t}, 300);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif (cellEvents.cellTapHold || this.table.options.cellTapHold){\r\n\t\t\ttapHold = null;\r\n\r\n\t\t\telement.addEventListener(\"touchstart\", (e) => {\r\n\t\t\t\tclearTimeout(tapHold);\r\n\r\n\t\t\t\ttapHold = setTimeout(() => {\r\n\t\t\t\t\tclearTimeout(tapHold);\r\n\t\t\t\t\ttapHold = null;\r\n\t\t\t\t\ttap = false;\r\n\t\t\t\t\tvar component = this.getComponent();\r\n\r\n\t\t\t\t\tif(cellEvents.cellTapHold){\r\n\t\t\t\t\t\tcellEvents.cellTapHold.call(this.table, e, component);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif(this.table.options.cellTapHold){\r\n\t\t\t\t\t\tthis.table.options.cellTapHold.call(this.table, e, component);\r\n\t\t\t\t\t}\r\n\t\t\t\t}, 1000);\r\n\r\n\t\t\t}, {passive: true});\r\n\r\n\t\t\telement.addEventListener(\"touchend\", (e) => {\r\n\t\t\t\tclearTimeout(tapHold);\r\n\t\t\t\ttapHold = null;\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\t//generate cell contents\r\n\t_generateContents(){\r\n\t\tvar val;\r\n\r\n\t\tif(this.table.modExists(\"format\")){\r\n\t\t\tval = this.table.modules.format.formatValue(this);\r\n\t\t}else{\r\n\t\t\tval = this.element.innerHTML = this.value;\r\n\t\t}\r\n\r\n\t\tswitch(typeof val){\r\n\t\t\tcase \"object\":\r\n\t\t\tif(val instanceof Node){\r\n\r\n\t\t\t\t//clear previous cell contents\r\n\t\t\t\twhile(this.element.firstChild) this.element.removeChild(this.element.firstChild);\r\n\r\n\t\t\t\tthis.element.appendChild(val);\r\n\t\t\t}else{\r\n\t\t\t\tthis.element.innerHTML = \"\";\r\n\r\n\t\t\t\tif(val != null){\r\n\t\t\t\t\tconsole.warn(\"Format Error - Formatter has returned a type of object, the only valid formatter object return is an instance of Node, the formatter returned:\", val);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\t\t\tcase \"undefined\":\r\n\t\t\tcase \"null\":\r\n\t\t\tthis.element.innerHTML = \"\";\r\n\t\t\tbreak;\r\n\t\t\tdefault:\r\n\t\t\tthis.element.innerHTML = val;\r\n\t\t}\r\n\t}\r\n\r\n\tcellRendered(){\r\n\t\tif(this.table.modExists(\"format\") && this.table.modules.format.cellRendered){\r\n\t\t\tthis.table.modules.format.cellRendered(this);\r\n\t\t}\r\n\t}\r\n\r\n\t//generate tooltip text\r\n\t_generateTooltip(){\r\n\t\tvar tooltip = this.column.tooltip;\r\n\r\n\t\tif(tooltip){\r\n\t\t\tif(tooltip === true){\r\n\t\t\t\ttooltip = this.value;\r\n\t\t\t}else if(typeof(tooltip) == \"function\"){\r\n\t\t\t\ttooltip = tooltip(this.getComponent());\r\n\r\n\t\t\t\tif(tooltip === false){\r\n\t\t\t\t\ttooltip = \"\";\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif(typeof tooltip === \"undefined\"){\r\n\t\t\t\ttooltip = \"\";\r\n\t\t\t}\r\n\r\n\t\t\tthis.element.setAttribute(\"title\", tooltip);\r\n\t\t}else{\r\n\t\t\tthis.element.setAttribute(\"title\", \"\");\r\n\t\t}\r\n\t}\r\n\r\n\t//////////////////// Getters ////////////////////\r\n\tgetElement(containerOnly){\r\n\t\tif(!this.loaded){\r\n\t\t\tthis.loaded = true;\r\n\t\t\tif(!containerOnly){\r\n\t\t\t\tthis.layoutElement();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this.element;\r\n\t}\r\n\r\n\tgetValue(){\r\n\t\treturn this.value;\r\n\t}\r\n\r\n\tgetOldValue(){\r\n\t\treturn this.oldValue;\r\n\t}\r\n\r\n\t//////////////////// Actions ////////////////////\r\n\tsetValue(value, mutate){\r\n\t\tvar changed = this.setValueProcessData(value, mutate),\r\n\t\tcomponent;\r\n\r\n\t\tif(changed){\r\n\t\t\tif(this.table.options.history && this.table.modExists(\"history\")){\r\n\t\t\t\tthis.table.modules.history.action(\"cellEdit\", this, {oldValue:this.oldValue, newValue:this.value});\r\n\t\t\t}\r\n\r\n\t\t\tcomponent = this.getComponent();\r\n\r\n\t\t\tif(this.column.cellEvents.cellEdited){\r\n\t\t\t\tthis.column.cellEvents.cellEdited.call(this.table, component);\r\n\t\t\t}\r\n\r\n\t\t\tif(this.table.options.groupUpdateOnCellEdit && this.table.options.groupBy && this.table.modExists(\"groupRows\")) {\r\n\t\t\t\tthis.table.modules.groupRows.reassignRowToGroup(this.row);\r\n\t\t\t}\r\n\r\n\t\t\tthis.cellRendered();\r\n\r\n\t\t\tthis.table.options.cellEdited.call(this.table, component);\r\n\r\n\t\t\tif(this.table.options.dataChanged){\r\n\t\t\t\tthis.table.options.dataChanged.call(this.table, this.table.rowManager.getData());\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tsetValueProcessData(value, mutate){\r\n\t\tvar changed = false;\r\n\r\n\t\tif(this.value != value){\r\n\r\n\t\t\tchanged = true;\r\n\r\n\t\t\tif(mutate){\r\n\t\t\t\tif(this.column.modules.mutate){\r\n\t\t\t\t\tvalue = this.table.modules.mutator.transformCell(this, value);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.setValueActual(value);\r\n\r\n\t\tif(changed && this.table.modExists(\"columnCalcs\")){\r\n\t\t\tif(this.column.definition.topCalc || this.column.definition.bottomCalc){\r\n\t\t\t\tif(this.table.options.groupBy && this.table.modExists(\"groupRows\")){\r\n\r\n\t\t\t\t\tif(this.table.options.columnCalcs == \"table\" || this.table.options.columnCalcs == \"both\"){\r\n\t\t\t\t\t\tthis.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif(this.table.options.columnCalcs != \"table\"){\r\n\t\t\t\t\t\tthis.table.modules.columnCalcs.recalcRowGroup(this.row);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}else{\r\n\t\t\t\t\tthis.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn changed;\r\n\t}\r\n\r\n\tsetValueActual(value){\r\n\t\tthis.oldValue = this.value;\r\n\r\n\t\tthis.value = value;\r\n\r\n\t\tif(this.table.options.reactiveData && this.table.modExists(\"reactiveData\")){\r\n\t\t\tthis.table.modules.reactiveData.block();\r\n\t\t}\r\n\r\n\t\tthis.column.setFieldValue(this.row.data, value);\r\n\r\n\t\tif(this.table.options.reactiveData && this.table.modExists(\"reactiveData\")){\r\n\t\t\tthis.table.modules.reactiveData.unblock();\r\n\t\t}\r\n\r\n\t\tif(this.loaded){\r\n\t\t\tthis.layoutElement();\r\n\t\t}\r\n\t}\r\n\r\n\tlayoutElement(){\r\n\t\tthis._generateContents();\r\n\t\tthis._generateTooltip();\r\n\r\n\t\t//set resizable handles\r\n\t\tif(this.table.options.resizableColumns && this.table.modExists(\"resizeColumns\") && this.row.type === \"row\"){\r\n\t\t\tthis.table.modules.resizeColumns.initializeColumn(\"cell\", this.column, this.element);\r\n\t\t}\r\n\r\n\r\n\t\tif((this.column.definition.contextMenu || this.column.definition.clickMenu) && this.table.modExists(\"menu\")){\r\n\t\t\tthis.table.modules.menu.initializeCell(this);\r\n\t\t}\r\n\r\n\t\t//handle frozen cells\r\n\t\tif(this.table.modExists(\"frozenColumns\")){\r\n\t\t\tthis.table.modules.frozenColumns.layoutElement(this.element, this.column);\r\n\t\t}\r\n\t}\r\n\r\n\tsetWidth(){\r\n\t\tthis.width = this.column.width;\r\n\t\tthis.element.style.width = this.column.widthStyled;\r\n\t}\r\n\r\n\tclearWidth(){\r\n\t\tthis.width = \"\";\r\n\t\tthis.element.style.width = \"\";\r\n\t}\r\n\r\n\tgetWidth(){\r\n\t\treturn this.width || this.element.offsetWidth;\r\n\t}\r\n\r\n\tsetMinWidth(){\r\n\t\tthis.minWidth = this.column.minWidth;\r\n\t\tthis.element.style.minWidth = this.column.minWidthStyled;\r\n\t}\r\n\r\n\tsetMaxWidth(){\r\n\t\tthis.maxWidth = this.column.maxWidth;\r\n\t\tthis.element.style.maxWidth = this.column.maxWidthStyled;\r\n\t}\r\n\r\n\tcheckHeight(){\r\n\t\t// var height = this.element.css(\"height\");\r\n\t\tthis.row.reinitializeHeight();\r\n\t}\r\n\r\n\tclearHeight(){\r\n\t\tthis.element.style.height = \"\";\r\n\t\tthis.height = null;\r\n\t}\r\n\r\n\tsetHeight(){\r\n\t\tthis.height = this.row.height;\r\n\t\tthis.element.style.height = this.row.heightStyled;\r\n\t}\r\n\r\n\tgetHeight(){\r\n\t\treturn this.height || this.element.offsetHeight;\r\n\t}\r\n\r\n\tshow(){\r\n\t\tthis.element.style.display = this.column.vertAlign ? \"inline-flex\" : \"\";\r\n\t}\r\n\r\n\thide(){\r\n\t\tthis.element.style.display = \"none\";\r\n\t}\r\n\r\n\tedit(force){\r\n\t\tif(this.table.modExists(\"edit\", true)){\r\n\t\t\treturn this.table.modules.edit.editCell(this, force);\r\n\t\t}\r\n\t}\r\n\r\n\tcancelEdit(){\r\n\t\tif(this.table.modExists(\"edit\", true)){\r\n\t\t\tvar editing = this.table.modules.edit.getCurrentCell();\r\n\r\n\t\t\tif(editing && editing._getSelf() === this){\r\n\t\t\t\tthis.table.modules.edit.cancelEdit();\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Cancel Editor Error - This cell is not currently being edited \");\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tvalidate(){\r\n\t\tif(this.column.modules.validate && this.table.modExists(\"validate\", true)){\r\n\t\t\tvar valid = this.table.modules.validate.validate(this.column.modules.validate, this, this.getValue());\r\n\r\n\t\t\treturn valid === true;\r\n\t\t}else{\r\n\t\t\treturn true;\r\n\t\t}\r\n\t}\r\n\r\n\tdelete(){\r\n\t\tif(!this.table.rowManager.redrawBlock && this.element.parentNode){\r\n\t\t\tthis.element.parentNode.removeChild(this.element);\r\n\t\t}\r\n\r\n\t\tif(this.modules.validate && this.modules.validate.invalid){\r\n\t\t\tthis.table.modules.validate.clearValidation(this);\r\n\t\t}\r\n\r\n\t\tif(this.modules.edit && this.modules.edit.edited){\r\n\t\t\tthis.table.modules.edit.clearEdited(this);\r\n\t\t}\r\n\r\n\t\tif(this.table.options.history){\r\n\t\t\tthis.table.modules.history.clearComponentHistory(this);\r\n\t\t}\r\n\r\n\t\tthis.element = false;\r\n\t\tthis.column.deleteCell(this);\r\n\t\tthis.row.deleteCell(this);\r\n\t\tthis.calcs = {};\r\n\t}\r\n\r\n\t//////////////// Navigation /////////////////\r\n\tnav(){\r\n\t\tvar self = this,\r\n\t\tnextCell = false,\r\n\t\tindex = this.row.getCellIndex(this);\r\n\r\n\t\treturn {\r\n\t\t\tnext:function(){\r\n\t\t\t\tvar nextCell = this.right(),\r\n\t\t\t\tnextRow;\r\n\r\n\t\t\t\tif(!nextCell){\r\n\t\t\t\t\tnextRow = self.table.rowManager.nextDisplayRow(self.row, true);\r\n\r\n\t\t\t\t\tif(nextRow){\r\n\t\t\t\t\t\tnextCell = nextRow.findNextEditableCell(-1);\r\n\r\n\t\t\t\t\t\tif(nextCell){\r\n\t\t\t\t\t\t\tnextCell.edit();\r\n\t\t\t\t\t\t\treturn true;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}else{\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn false;\r\n\t\t\t},\r\n\t\t\tprev:function(){\r\n\t\t\t\tvar nextCell = this.left(),\r\n\t\t\t\tprevRow;\r\n\r\n\t\t\t\tif(!nextCell){\r\n\t\t\t\t\tprevRow = self.table.rowManager.prevDisplayRow(self.row, true);\r\n\r\n\t\t\t\t\tif(prevRow){\r\n\t\t\t\t\t\tnextCell = prevRow.findPrevEditableCell(prevRow.cells.length);\r\n\r\n\t\t\t\t\t\tif(nextCell){\r\n\t\t\t\t\t\t\tnextCell.edit();\r\n\t\t\t\t\t\t\treturn true;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}else{\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn false;\r\n\t\t\t},\r\n\t\t\tleft:function(){\r\n\r\n\t\t\t\tnextCell = self.row.findPrevEditableCell(index);\r\n\r\n\t\t\t\tif(nextCell){\r\n\t\t\t\t\tnextCell.edit();\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t}else{\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tright:function(){\r\n\t\t\t\tnextCell = self.row.findNextEditableCell(index);\r\n\r\n\t\t\t\tif(nextCell){\r\n\t\t\t\t\tnextCell.edit();\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t}else{\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tup:function(){\r\n\t\t\t\tvar nextRow = self.table.rowManager.prevDisplayRow(self.row, true);\r\n\r\n\t\t\t\tif(nextRow){\r\n\t\t\t\t\tnextRow.cells[index].edit();\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tdown:function(){\r\n\t\t\t\tvar nextRow = self.table.rowManager.nextDisplayRow(self.row, true);\r\n\r\n\t\t\t\tif(nextRow){\r\n\t\t\t\t\tnextRow.cells[index].edit();\r\n\t\t\t\t}\r\n\t\t\t},\r\n\r\n\t\t};\r\n\t}\r\n\r\n\tgetIndex(){\r\n\t\tthis.row.getCellIndex(this);\r\n\t}\r\n\r\n\t//////////////// Object Generation /////////////////\r\n\tgetComponent(){\r\n\t\tif(!this.component){\r\n\t\t\tthis.component = new CellComponent(this);\r\n\t\t}\r\n\r\n\t\treturn this.component;\r\n\t}\r\n}","//public column object\r\nexport default class ColumnComponent {\r\n\tconstructor (column){\r\n\t\tthis._column = column;\r\n\t\tthis.type = \"ColumnComponent\";\r\n\t}\r\n\r\n\tgetElement(){\r\n\t\treturn this._column.getElement();\r\n\t}\r\n\r\n\tgetDefinition(){\r\n\t\treturn this._column.getDefinition();\r\n\t}\r\n\r\n\tgetField(){\r\n\t\treturn this._column.getField();\r\n\t}\r\n\r\n\tgetCells(){\r\n\t\tvar cells = [];\r\n\r\n\t\tthis._column.cells.forEach(function(cell){\r\n\t\t\tcells.push(cell.getComponent());\r\n\t\t});\r\n\r\n\t\treturn cells;\r\n\t}\r\n\r\n\tisVisible(){\r\n\t\treturn this._column.visible;\r\n\t}\r\n\r\n\tshow(){\r\n\t\tif(this._column.isGroup){\r\n\t\t\tthis._column.columns.forEach(function(column){\r\n\t\t\t\tcolumn.show();\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tthis._column.show();\r\n\t\t}\r\n\t}\r\n\r\n\thide(){\r\n\t\tif(this._column.isGroup){\r\n\t\t\tthis._column.columns.forEach(function(column){\r\n\t\t\t\tcolumn.hide();\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tthis._column.hide();\r\n\t\t}\r\n\t}\r\n\r\n\ttoggle(){\r\n\t\tif(this._column.visible){\r\n\t\t\tthis.hide();\r\n\t\t}else{\r\n\t\t\tthis.show();\r\n\t\t}\r\n\t}\r\n\r\n\tdelete(){\r\n\t\treturn this._column.delete();\r\n\t}\r\n\r\n\tgetSubColumns(){\r\n\t\tvar output = [];\r\n\r\n\t\tif(this._column.columns.length){\r\n\t\t\tthis._column.columns.forEach(function(column){\r\n\t\t\t\toutput.push(column.getComponent());\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tgetParentColumn(){\r\n\t\treturn this._column.parent instanceof Column ? this._column.parent.getComponent() : false;\r\n\t}\r\n\r\n\t_getSelf(){\r\n\t\treturn this._column;\r\n\t}\r\n\r\n\tscrollTo(){\r\n\t\treturn this._column.table.columnManager.scrollToColumn(this._column);\r\n\t}\r\n\r\n\tgetTable(){\r\n\t\treturn this._column.table;\r\n\t}\r\n\r\n\theaderFilterFocus(){\r\n\t\tif(this._column.table.modExists(\"filter\", true)){\r\n\t\t\tthis._column.table.modules.filter.setHeaderFilterFocus(this._column);\r\n\t\t}\r\n\t}\r\n\r\n\treloadHeaderFilter(){\r\n\t\tif(this._column.table.modExists(\"filter\", true)){\r\n\t\t\tthis._column.table.modules.filter.reloadHeaderFilter(this._column);\r\n\t\t}\r\n\t}\r\n\r\n\tgetHeaderFilterValue(){\r\n\t\tif(this._column.table.modExists(\"filter\", true)){\r\n\t\t\treturn this._column.table.modules.filter.getHeaderFilterValue(this._column);\r\n\t\t}\r\n\t}\r\n\r\n\tsetHeaderFilterValue(value){\r\n\t\tif(this._column.table.modExists(\"filter\", true)){\r\n\t\t\tthis._column.table.modules.filter.setHeaderFilterValue(this._column, value);\r\n\t\t}\r\n\t}\r\n\r\n\tmove(to, after){\r\n\t\tvar toColumn = this._column.table.columnManager.findColumn(to);\r\n\r\n\t\tif(toColumn){\r\n\t\t\tthis._column.table.columnManager.moveColumn(this._column, toColumn, after)\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Move Error - No matching column found:\", toColumn);\r\n\t\t}\r\n\t}\r\n\r\n\tgetNextColumn(){\r\n\t\tvar nextCol = this._column.nextColumn();\r\n\r\n\t\treturn nextCol ? nextCol.getComponent() : false;\r\n\t}\r\n\r\n\tgetPrevColumn(){\r\n\t\tvar prevCol = this._column.prevColumn();\r\n\r\n\t\treturn prevCol ? prevCol.getComponent() : false;\r\n\t}\r\n\r\n\tupdateDefinition(updates){\r\n\t\treturn this._column.updateDefinition(updates);\r\n\t}\r\n\r\n\tgetWidth(){\r\n\t\treturn this._column.getWidth();\r\n\t}\r\n\r\n\tsetWidth(width){\r\n\t\tvar result;\r\n\r\n\t\tif(width === true){\r\n\t\t\tresult = this._column.reinitializeWidth(true);\r\n\t\t}else{\r\n\t\t\tresult = this._column.setWidth(width);\r\n\t\t}\r\n\r\n\t\tif(this._column.table.options.virtualDomHoz){\r\n\t\t\tthis._column.table.vdomHoz.reinitialize(true);\r\n\t\t}\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\tvalidate(){\r\n\t\treturn this._column.validate();\r\n\t}\r\n}","import ColumnComponent from './ColumnComponent.js';\r\nimport defaultOptions from './defaults/options.js';\r\n\r\nimport Cell from '../cell/Cell.js';\r\n\r\nclass Column {\r\n\r\n\tconstructor(def, parent){\r\n\t\tthis.table = parent.table;\r\n\t\tthis.definition = def; //column definition\r\n\t\tthis.parent = parent; //hold parent object\r\n\t\tthis.type = \"column\"; //type of element\r\n\t\tthis.columns = []; //child columns\r\n\t\tthis.cells = []; //cells bound to this column\r\n\t\tthis.element = this.createElement(); //column header element\r\n\t\tthis.contentElement = false;\r\n\t\tthis.titleHolderElement = false;\r\n\t\tthis.titleElement = false;\r\n\t\tthis.groupElement = this.createGroupElement(); //column group holder element\r\n\t\tthis.isGroup = false;\r\n\t\tthis.tooltip = false; //hold column tooltip\r\n\t\tthis.hozAlign = \"\"; //horizontal text alignment\r\n\t\tthis.vertAlign = \"\"; //vert text alignment\r\n\r\n\t\t//multi dimensional filed handling\r\n\t\tthis.field =\"\";\r\n\t\tthis.fieldStructure = \"\";\r\n\t\tthis.getFieldValue = \"\";\r\n\t\tthis.setFieldValue = \"\";\r\n\r\n\t\tthis.titleFormatterRendered = false;\r\n\r\n\t\tthis.mapDefinitionDefaults();\r\n\r\n\t\tthis.setField(this.definition.field);\r\n\r\n\t\tif(this.table.options.invalidOptionWarnings){\r\n\t\t\tthis.checkDefinition();\r\n\t\t}\r\n\r\n\t\tthis.modules = {}; //hold module variables;\r\n\r\n\t\tthis.cellEvents = {\r\n\t\t\tcellClick:false,\r\n\t\t\tcellDblClick:false,\r\n\t\t\tcellContext:false,\r\n\t\t\tcellTap:false,\r\n\t\t\tcellDblTap:false,\r\n\t\t\tcellTapHold:false,\r\n\t\t\tcellMouseEnter:false,\r\n\t\t\tcellMouseLeave:false,\r\n\t\t\tcellMouseOver:false,\r\n\t\t\tcellMouseOut:false,\r\n\t\t\tcellMouseMove:false,\r\n\t\t};\r\n\r\n\t\tthis.width = null; //column width\r\n\t\tthis.widthStyled = \"\"; //column width prestyled to improve render efficiency\r\n\t\tthis.maxWidth = null; //column maximum width\r\n\t\tthis.maxWidthStyled = \"\"; //column maximum prestyled to improve render efficiency\r\n\t\tthis.minWidth = null; //column minimum width\r\n\t\tthis.minWidthStyled = \"\"; //column minimum prestyled to improve render efficiency\r\n\t\tthis.widthFixed = false; //user has specified a width for this column\r\n\r\n\t\tthis.visible = true; //default visible state\r\n\r\n\t\tthis.component = null;\r\n\r\n\t\tthis._mapDepricatedFunctionality();\r\n\r\n\t\t//initialize column\r\n\t\tif(def.columns){\r\n\r\n\t\t\tthis.isGroup = true;\r\n\r\n\t\t\tdef.columns.forEach((def, i) => {\r\n\t\t\t\tvar newCol = new Column(def, this);\r\n\t\t\t\tthis.attachColumn(newCol);\r\n\t\t\t});\r\n\r\n\t\t\tthis.checkColumnVisibility();\r\n\t\t}else{\r\n\t\t\tparent.registerColumnField(this);\r\n\t\t}\r\n\r\n\t\tif(def.rowHandle && this.table.options.movableRows !== false && this.table.modExists(\"moveRow\")){\r\n\t\t\tthis.table.modules.moveRow.setHandle(true);\r\n\t\t}\r\n\r\n\t\tthis._buildHeader();\r\n\r\n\t\tthis.bindModuleColumns();\r\n\t}\r\n\r\n\tcreateElement (){\r\n\t\tvar el = document.createElement(\"div\");\r\n\r\n\t\tel.classList.add(\"tabulator-col\");\r\n\t\tel.setAttribute(\"role\", \"columnheader\");\r\n\t\tel.setAttribute(\"aria-sort\", \"none\");\r\n\r\n\t\treturn el;\r\n\t}\r\n\r\n\tcreateGroupElement (){\r\n\t\tvar el = document.createElement(\"div\");\r\n\r\n\t\tel.classList.add(\"tabulator-col-group-cols\");\r\n\r\n\t\treturn el;\r\n\t}\r\n\r\n\tmapDefinitionDefaults(){\r\n\t\tvar defaults = this.table.options.columnDefaults;\r\n\r\n\t\tif(defaults){\r\n\t\t\tfor(let key in defaults){\r\n\t\t\t\tif(typeof this.definition[key] === \"undefined\"){\r\n\t\t\t\t\tthis.definition[key] = defaults[key];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tcheckDefinition(){\r\n\t\tObject.keys(this.definition).forEach((key) => {\r\n\t\t\tif(Column.defaultOptionList.indexOf(key) === -1){\r\n\t\t\t\tconsole.warn(\"Invalid column definition option in '\" + (this.field || this.definition.title) + \"' column:\", key)\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tsetField(field){\r\n\t\tthis.field = field;\r\n\t\tthis.fieldStructure = field ? (this.table.options.nestedFieldSeparator ? field.split(this.table.options.nestedFieldSeparator) : [field]) : [];\r\n\t\tthis.getFieldValue = this.fieldStructure.length > 1 ? this._getNestedData : this._getFlatData;\r\n\t\tthis.setFieldValue = this.fieldStructure.length > 1 ? this._setNestedData : this._setFlatData;\r\n\t}\r\n\r\n\t//register column position with column manager\r\n\tregisterColumnPosition(column){\r\n\t\tthis.parent.registerColumnPosition(column);\r\n\t}\r\n\r\n\t//register column position with column manager\r\n\tregisterColumnField(column){\r\n\t\tthis.parent.registerColumnField(column);\r\n\t}\r\n\r\n\t//trigger position registration\r\n\treRegisterPosition(){\r\n\t\tif(this.isGroup){\r\n\t\t\tthis.columns.forEach(function(column){\r\n\t\t\t\tcolumn.reRegisterPosition();\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tthis.registerColumnPosition(this);\r\n\t\t}\r\n\t}\r\n\r\n\t_mapDepricatedFunctionality(){\r\n\t\t//all previously deprecated functionality removed in the 5.0 release\r\n\t}\r\n\r\n\tsetTooltip(){\r\n\t\tvar def = this.definition;\r\n\r\n\t\t//set header tooltips\r\n\t\tvar tooltip = def.headerTooltip || def.tooltip === false ? def.headerTooltip : this.table.options.tooltipsHeader;\r\n\r\n\t\tif(tooltip){\r\n\t\t\tif(tooltip === true){\r\n\t\t\t\tif(def.field){\r\n\t\t\t\t\tthis.table.modules.localize.bind(\"columns|\" + def.field, (value) => {\r\n\t\t\t\t\t\tthis.element.setAttribute(\"title\", value || def.title);\r\n\t\t\t\t\t});\r\n\t\t\t\t}else{\r\n\t\t\t\t\tthis.element.setAttribute(\"title\", def.title);\r\n\t\t\t\t}\r\n\r\n\t\t\t}else{\r\n\t\t\t\tif(typeof(tooltip) == \"function\"){\r\n\t\t\t\t\ttooltip = tooltip(this.getComponent());\r\n\r\n\t\t\t\t\tif(tooltip === false){\r\n\t\t\t\t\t\ttooltip = \"\";\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.element.setAttribute(\"title\", tooltip);\r\n\t\t\t}\r\n\r\n\t\t}else{\r\n\t\t\tthis.element.setAttribute(\"title\", \"\");\r\n\t\t}\r\n\t}\r\n\r\n\t//build header element\r\n\t_buildHeader(){\r\n\t\tvar def = this.definition;\r\n\r\n\t\twhile(this.element.firstChild) this.element.removeChild(this.element.firstChild);\r\n\r\n\t\tif(def.headerVertical){\r\n\t\t\tthis.element.classList.add(\"tabulator-col-vertical\");\r\n\r\n\t\t\tif(def.headerVertical === \"flip\"){\r\n\t\t\t\tthis.element.classList.add(\"tabulator-col-vertical-flip\");\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.contentElement = this._bindEvents();\r\n\r\n\t\tthis.contentElement = this._buildColumnHeaderContent();\r\n\r\n\t\tthis.element.appendChild(this.contentElement);\r\n\r\n\t\tif(this.isGroup){\r\n\t\t\tthis._buildGroupHeader();\r\n\t\t}else{\r\n\t\t\tthis._buildColumnHeader();\r\n\t\t}\r\n\r\n\t\tthis.setTooltip();\r\n\r\n\t\t//set resizable handles\r\n\t\tif(this.table.options.resizableColumns && this.table.modExists(\"resizeColumns\")){\r\n\t\t\tthis.table.modules.resizeColumns.initializeColumn(\"header\", this, this.element);\r\n\t\t}\r\n\r\n\t\t//set resizable handles\r\n\t\tif(def.headerFilter && this.table.modExists(\"filter\") && this.table.modExists(\"edit\")){\r\n\t\t\tif(typeof def.headerFilterPlaceholder !== \"undefined\" && def.field){\r\n\t\t\t\tthis.table.modules.localize.setHeaderFilterColumnPlaceholder(def.field, def.headerFilterPlaceholder);\r\n\t\t\t}\r\n\r\n\t\t\tthis.table.modules.filter.initializeColumn(this);\r\n\t\t}\r\n\r\n\r\n\t\t//set resizable handles\r\n\t\tif(this.table.modExists(\"frozenColumns\")){\r\n\t\t\tthis.table.modules.frozenColumns.initializeColumn(this);\r\n\t\t}\r\n\r\n\t\t//set movable column\r\n\t\tif(this.table.options.movableColumns && !this.isGroup && this.table.modExists(\"moveColumn\")){\r\n\t\t\tthis.table.modules.moveColumn.initializeColumn(this);\r\n\t\t}\r\n\r\n\t\t//set calcs column\r\n\t\tif((def.topCalc || def.bottomCalc) && this.table.modExists(\"columnCalcs\")){\r\n\t\t\tthis.table.modules.columnCalcs.initializeColumn(this);\r\n\t\t}\r\n\r\n\t\t//handle persistence\r\n\t\tif(this.table.modExists(\"persistence\") && this.table.modules.persistence.config.columns){\r\n\t\t\tthis.table.modules.persistence.initializeColumn(this);\r\n\t\t}\r\n\r\n\r\n\t\t//update header tooltip on mouse enter\r\n\t\tthis.element.addEventListener(\"mouseenter\", (e) => {\r\n\t\t\tthis.setTooltip();\r\n\t\t});\r\n\t}\r\n\r\n\t_bindEvents(){\r\n\t\tvar def = this.definition,\r\n\t\tdblTap,\ttapHold, tap;\r\n\r\n\t\t//setup header click event bindings\r\n\t\tif(typeof(def.headerClick) == \"function\"){\r\n\t\t\tthis.element.addEventListener(\"click\", (e) => {def.headerClick(e, this.getComponent());});\r\n\t\t}\r\n\r\n\t\tif(typeof(def.headerDblClick) == \"function\"){\r\n\t\t\tthis.element.addEventListener(\"dblclick\", (e) => {def.headerDblClick(e, this.getComponent());});\r\n\t\t}\r\n\r\n\t\tif(typeof(def.headerContext) == \"function\"){\r\n\t\t\tthis.element.addEventListener(\"contextmenu\", (e) => {def.headerContext(e, this.getComponent());});\r\n\t\t}\r\n\r\n\t\t//setup header tap event bindings\r\n\t\tif(typeof(def.headerTap) == \"function\"){\r\n\t\t\ttap = false;\r\n\r\n\t\t\tthis.element.addEventListener(\"touchstart\", (e) => {\r\n\t\t\t\ttap = true;\r\n\t\t\t}, {passive: true});\r\n\r\n\t\t\tthis.element.addEventListener(\"touchend\", (e) => {\r\n\t\t\t\tif(tap){\r\n\t\t\t\t\tdef.headerTap(e, this.getComponent());\r\n\t\t\t\t}\r\n\r\n\t\t\t\ttap = false;\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif(typeof(def.headerDblTap) == \"function\"){\r\n\t\t\tdblTap = null;\r\n\r\n\t\t\tthis.element.addEventListener(\"touchend\", (e) => {\r\n\r\n\t\t\t\tif(dblTap){\r\n\t\t\t\t\tclearTimeout(dblTap);\r\n\t\t\t\t\tdblTap = null;\r\n\r\n\t\t\t\t\tdef.headerDblTap(e, this.getComponent());\r\n\t\t\t\t}else{\r\n\r\n\t\t\t\t\tdblTap = setTimeout(() => {\r\n\t\t\t\t\t\tclearTimeout(dblTap);\r\n\t\t\t\t\t\tdblTap = null;\r\n\t\t\t\t\t}, 300);\r\n\t\t\t\t}\r\n\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif(typeof(def.headerTapHold) == \"function\"){\r\n\t\t\ttapHold = null;\r\n\r\n\t\t\tthis.element.addEventListener(\"touchstart\", (e) => {\r\n\t\t\t\tclearTimeout(tapHold);\r\n\r\n\t\t\t\ttapHold = setTimeout(function(){\r\n\t\t\t\t\tclearTimeout(tapHold);\r\n\t\t\t\t\ttapHold = null;\r\n\t\t\t\t\ttap = false;\r\n\t\t\t\t\tdef.headerTapHold(e, this.getComponent());\r\n\t\t\t\t}, 1000);\r\n\r\n\t\t\t}, {passive: true});\r\n\r\n\t\t\tthis.element.addEventListener(\"touchend\", (e) => {\r\n\t\t\t\tclearTimeout(tapHold);\r\n\t\t\t\ttapHold = null;\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\t//store column cell click event bindings\r\n\t\tif(typeof(def.cellClick) == \"function\"){\r\n\t\t\tthis.cellEvents.cellClick = def.cellClick;\r\n\t\t}\r\n\r\n\t\tif(typeof(def.cellDblClick) == \"function\"){\r\n\t\t\tthis.cellEvents.cellDblClick = def.cellDblClick;\r\n\t\t}\r\n\r\n\t\tif(typeof(def.cellContext) == \"function\"){\r\n\t\t\tthis.cellEvents.cellContext = def.cellContext;\r\n\t\t}\r\n\r\n\t\t//store column mouse event bindings\r\n\t\tif(typeof(def.cellMouseEnter) == \"function\"){\r\n\t\t\tthis.cellEvents.cellMouseEnter = def.cellMouseEnter;\r\n\t\t}\r\n\r\n\t\tif(typeof(def.cellMouseLeave) == \"function\"){\r\n\t\t\tthis.cellEvents.cellMouseLeave = def.cellMouseLeave;\r\n\t\t}\r\n\r\n\t\tif(typeof(def.cellMouseOver) == \"function\"){\r\n\t\t\tthis.cellEvents.cellMouseOver = def.cellMouseOver;\r\n\t\t}\r\n\r\n\t\tif(typeof(def.cellMouseOut) == \"function\"){\r\n\t\t\tthis.cellEvents.cellMouseOut = def.cellMouseOut;\r\n\t\t}\r\n\r\n\t\tif(typeof(def.cellMouseMove) == \"function\"){\r\n\t\t\tthis.cellEvents.cellMouseMove = def.cellMouseMove;\r\n\t\t}\r\n\r\n\t\t//setup column cell tap event bindings\r\n\t\tif(typeof(def.cellTap) == \"function\"){\r\n\t\t\tthis.cellEvents.cellTap = def.cellTap;\r\n\t\t}\r\n\r\n\t\tif(typeof(def.cellDblTap) == \"function\"){\r\n\t\t\tthis.cellEvents.cellDblTap = def.cellDblTap;\r\n\t\t}\r\n\r\n\t\tif(typeof(def.cellTapHold) == \"function\"){\r\n\t\t\tthis.cellEvents.cellTapHold = def.cellTapHold;\r\n\t\t}\r\n\r\n\t\t//setup column cell edit callbacks\r\n\t\tif(typeof(def.cellEdited) == \"function\"){\r\n\t\t\tthis.cellEvents.cellEdited = def.cellEdited;\r\n\t\t}\r\n\r\n\t\tif(typeof(def.cellEditing) == \"function\"){\r\n\t\t\tthis.cellEvents.cellEditing = def.cellEditing;\r\n\t\t}\r\n\r\n\t\tif(typeof(def.cellEditCancelled) == \"function\"){\r\n\t\t\tthis.cellEvents.cellEditCancelled = def.cellEditCancelled;\r\n\t\t}\r\n\t}\r\n\r\n\t//build header element for header\r\n\t_buildColumnHeader(){\r\n\t\tvar def = this.definition,\r\n\t\ttable = this.table,\r\n\t\tsortable;\r\n\r\n\t\t//set column sorter\r\n\t\tif(table.modExists(\"sort\")){\r\n\t\t\ttable.modules.sort.initializeColumn(this, this.titleHolderElement);\r\n\t\t}\r\n\r\n\t\t//set column header context menu\r\n\t\tif((def.headerContextMenu || def.headerClickMenu || def.headerMenu) && table.modExists(\"menu\")){\r\n\t\t\ttable.modules.menu.initializeColumnHeader(this);\r\n\t\t}\r\n\r\n\t\t//set column formatter\r\n\t\tif(table.modExists(\"format\")){\r\n\t\t\ttable.modules.format.initializeColumn(this);\r\n\t\t}\r\n\r\n\t\t//set column editor\r\n\t\tif(typeof def.editor != \"undefined\" && table.modExists(\"edit\")){\r\n\t\t\ttable.modules.edit.initializeColumn(this);\r\n\t\t}\r\n\r\n\t\t//set colum validator\r\n\t\tif(typeof def.validator != \"undefined\" && table.modExists(\"validate\")){\r\n\t\t\ttable.modules.validate.initializeColumn(this);\r\n\t\t}\r\n\r\n\r\n\t\t//set column mutator\r\n\t\tif(table.modExists(\"mutator\")){\r\n\t\t\ttable.modules.mutator.initializeColumn(this);\r\n\t\t}\r\n\r\n\t\t//set column accessor\r\n\t\tif(table.modExists(\"accessor\")){\r\n\t\t\ttable.modules.accessor.initializeColumn(this);\r\n\t\t}\r\n\r\n\t\t//set respoviveLayout\r\n\t\tif(typeof table.options.responsiveLayout && table.modExists(\"responsiveLayout\")){\r\n\t\t\ttable.modules.responsiveLayout.initializeColumn(this);\r\n\t\t}\r\n\r\n\t\t//set column visibility\r\n\t\tif(typeof def.visible != \"undefined\"){\r\n\t\t\tif(def.visible){\r\n\t\t\t\tthis.show(true);\r\n\t\t\t}else{\r\n\t\t\t\tthis.hide(true);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//asign additional css classes to column header\r\n\t\tif(def.cssClass){\r\n\t\t\tvar classeNames = def.cssClass.split(\" \");\r\n\t\t\tclasseNames.forEach((className) => {\r\n\t\t\t\tthis.element.classList.add(className);\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif(def.field){\r\n\t\t\tthis.element.setAttribute(\"tabulator-field\", def.field);\r\n\t\t}\r\n\r\n\t\t//set min width if present\r\n\t\tthis.setMinWidth(typeof def.minWidth == \"undefined\" ? this.table.options.columnMinWidth : parseInt(def.minWidth));\r\n\r\n\t\tif(def.maxWidth || this.table.options.columnMaxWidth){\r\n\t\t\tif(def.maxWidth !== false){\r\n\t\t\t\tthis.setMaxWidth(typeof def.maxWidth == \"undefined\" ? this.table.options.columnMaxWidth : parseInt(def.maxWidth));\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.reinitializeWidth();\r\n\r\n\t\t//set tooltip if present\r\n\t\tthis.tooltip = this.definition.tooltip || this.definition.tooltip === false ? this.definition.tooltip : this.table.options.tooltips;\r\n\r\n\t\t//set orizontal text alignment\r\n\t\tthis.hozAlign = typeof(this.definition.hozAlign) == \"undefined\" ? this.table.options.cellHozAlign : this.definition.hozAlign;\r\n\t\tthis.vertAlign = typeof(this.definition.vertAlign) == \"undefined\" ? this.table.options.cellVertAlign : this.definition.vertAlign;\r\n\r\n\t\tthis.titleElement.style.textAlign = this.definition.headerHozAlign || this.table.options.headerHozAlign;\r\n\t}\r\n\r\n\t_buildColumnHeaderContent(){\r\n\t\tvar def = this.definition,\r\n\t\ttable = this.table;\r\n\r\n\t\tvar contentElement = document.createElement(\"div\");\r\n\t\tcontentElement.classList.add(\"tabulator-col-content\");\r\n\r\n\t\tthis.titleHolderElement = document.createElement(\"div\");\r\n\t\tthis.titleHolderElement.classList.add(\"tabulator-col-title-holder\");\r\n\r\n\t\tcontentElement.appendChild(this.titleHolderElement);\r\n\r\n\t\tthis.titleElement = this._buildColumnHeaderTitle();\r\n\r\n\t\tthis.titleHolderElement.appendChild(this.titleElement);\r\n\r\n\t\treturn contentElement;\r\n\t}\r\n\r\n\t//build title element of column\r\n\t_buildColumnHeaderTitle(){\r\n\t\tvar def = this.definition,\r\n\t\ttable = this.table,\r\n\t\ttitle;\r\n\r\n\t\tvar titleHolderElement = document.createElement(\"div\");\r\n\t\ttitleHolderElement.classList.add(\"tabulator-col-title\");\r\n\r\n\t\tif(def.editableTitle){\r\n\t\t\tvar titleElement = document.createElement(\"input\");\r\n\t\t\ttitleElement.classList.add(\"tabulator-title-editor\");\r\n\r\n\t\t\ttitleElement.addEventListener(\"click\", (e) => {\r\n\t\t\t\te.stopPropagation();\r\n\t\t\t\ttitleElement.focus();\r\n\t\t\t});\r\n\r\n\t\t\ttitleElement.addEventListener(\"change\", () => {\r\n\t\t\t\tdef.title = titleElement.value;\r\n\t\t\t\ttable.options.columnTitleChanged.call(this.table, this.getComponent());\r\n\t\t\t});\r\n\r\n\t\t\ttitleHolderElement.appendChild(titleElement);\r\n\r\n\t\t\tif(def.field){\r\n\t\t\t\ttable.modules.localize.bind(\"columns|\" + def.field, (text) => {\r\n\t\t\t\t\ttitleElement.value = text || (def.title || \" \");\r\n\t\t\t\t});\r\n\t\t\t}else{\r\n\t\t\t\ttitleElement.value = def.title || \" \";\r\n\t\t\t}\r\n\r\n\t\t}else{\r\n\t\t\tif(def.field){\r\n\t\t\t\ttable.modules.localize.bind(\"columns|\" + def.field, (text) => {\r\n\t\t\t\t\tthis._formatColumnHeaderTitle(titleHolderElement, text || (def.title || \" \"));\r\n\t\t\t\t});\r\n\t\t\t}else{\r\n\t\t\t\tthis._formatColumnHeaderTitle(titleHolderElement, def.title || \" \");\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn titleHolderElement;\r\n\t}\r\n\r\n\t_formatColumnHeaderTitle(el, title){\r\n\t\tvar formatter, contents, params, mockCell, onRendered;\r\n\r\n\t\tif(this.definition.titleFormatter && this.table.modExists(\"format\")){\r\n\r\n\t\t\tformatter = this.table.modules.format.getFormatter(this.definition.titleFormatter);\r\n\r\n\t\t\tonRendered = (callback) => {\r\n\t\t\t\tthis.titleFormatterRendered = callback;\r\n\t\t\t};\r\n\r\n\t\t\tmockCell = {\r\n\t\t\t\tgetValue:function(){\r\n\t\t\t\t\treturn title;\r\n\t\t\t\t},\r\n\t\t\t\tgetElement:function(){\r\n\t\t\t\t\treturn el;\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\tparams = this.definition.titleFormatterParams || {};\r\n\r\n\t\t\tparams = typeof params === \"function\" ? params() : params;\r\n\r\n\t\t\tcontents = formatter.call(this.table.modules.format, mockCell, params, onRendered);\r\n\r\n\t\t\tswitch(typeof contents){\r\n\t\t\t\tcase \"object\":\r\n\t\t\t\tif(contents instanceof Node){\r\n\t\t\t\t\tel.appendChild(contents);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tel.innerHTML = \"\";\r\n\t\t\t\t\tconsole.warn(\"Format Error - Title formatter has returned a type of object, the only valid formatter object return is an instance of Node, the formatter returned:\", contents);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\t\tcase \"undefined\":\r\n\t\t\t\tcase \"null\":\r\n\t\t\t\tel.innerHTML = \"\";\r\n\t\t\t\tbreak;\r\n\t\t\t\tdefault:\r\n\t\t\t\tel.innerHTML = contents;\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tel.innerHTML = title;\r\n\t\t}\r\n\t}\r\n\r\n\t//build header element for column group\r\n\t_buildGroupHeader(){\r\n\t\tthis.element.classList.add(\"tabulator-col-group\");\r\n\t\tthis.element.setAttribute(\"role\", \"columngroup\");\r\n\t\tthis.element.setAttribute(\"aria-title\", this.definition.title);\r\n\r\n\t\t//asign additional css classes to column header\r\n\t\tif(this.definition.cssClass){\r\n\t\t\tvar classeNames = this.definition.cssClass.split(\" \");\r\n\t\t\tclasseNames.forEach((className) => {\r\n\t\t\t\tthis.element.classList.add(className);\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\t//set column header context menu\r\n\t\tif ((this.definition.headerContextMenu || this.definition.headerMenu) && this.table.modExists(\"menu\")) {\r\n\t\t\tthis.table.modules.menu.initializeColumnHeader(this);\r\n\t\t}\r\n\r\n\t\tthis.titleElement.style.textAlign = this.definition.headerHozAlign || this.table.options.headerHozAlign;\r\n\r\n\t\tthis.element.appendChild(this.groupElement);\r\n\t}\r\n\r\n\t//flat field lookup\r\n\t_getFlatData(data){\r\n\t\treturn data[this.field];\r\n\t}\r\n\r\n\t//nested field lookup\r\n\t_getNestedData(data){\r\n\t\tvar dataObj = data,\r\n\t\tstructure = this.fieldStructure,\r\n\t\tlength = structure.length,\r\n\t\toutput;\r\n\r\n\t\tfor(let i = 0; i < length; i++){\r\n\r\n\t\t\tdataObj = dataObj[structure[i]];\r\n\r\n\t\t\toutput = dataObj;\r\n\r\n\t\t\tif(!dataObj){\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\t//flat field set\r\n\t_setFlatData(data, value){\r\n\t\tif(this.field){\r\n\t\t\tdata[this.field] = value;\r\n\t\t}\r\n\t}\r\n\r\n\t//nested field set\r\n\t_setNestedData(data, value){\r\n\t\tvar dataObj = data,\r\n\t\tstructure = this.fieldStructure,\r\n\t\tlength = structure.length;\r\n\r\n\t\tfor(let i = 0; i < length; i++){\r\n\r\n\t\t\tif(i == length -1){\r\n\t\t\t\tdataObj[structure[i]] = value;\r\n\t\t\t}else{\r\n\t\t\t\tif(!dataObj[structure[i]]){\r\n\t\t\t\t\tif(typeof value !== \"undefined\"){\r\n\t\t\t\t\t\tdataObj[structure[i]] = {};\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tdataObj = dataObj[structure[i]];\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//attach column to this group\r\n\tattachColumn(column){\r\n\t\tif(this.groupElement){\r\n\t\t\tthis.columns.push(column);\r\n\t\t\tthis.groupElement.appendChild(column.getElement());\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Column Warning - Column being attached to another column instead of column group\");\r\n\t\t}\r\n\t}\r\n\r\n\t//vertically align header in column\r\n\tverticalAlign(alignment, height){\r\n\r\n\t\t//calculate height of column header and group holder element\r\n\t\tvar parentHeight = this.parent.isGroup ? this.parent.getGroupElement().clientHeight : (height || this.parent.getHeadersElement().clientHeight);\r\n\t\t// var parentHeight = this.parent.isGroup ? this.parent.getGroupElement().clientHeight : this.parent.getHeadersElement().clientHeight;\r\n\r\n\t\tthis.element.style.height = parentHeight + \"px\";\r\n\r\n\t\tif(this.isGroup){\r\n\t\t\tthis.groupElement.style.minHeight = (parentHeight - this.contentElement.offsetHeight) + \"px\";\r\n\t\t}\r\n\r\n\t\t//vertically align cell contents\r\n\t\tif(!this.isGroup && alignment !== \"top\"){\r\n\t\t\tif(alignment === \"bottom\"){\r\n\t\t\t\tthis.element.style.paddingTop = (this.element.clientHeight - this.contentElement.offsetHeight) + \"px\";\r\n\t\t\t}else{\r\n\t\t\t\tthis.element.style.paddingTop = ((this.element.clientHeight - this.contentElement.offsetHeight) / 2) + \"px\";\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.columns.forEach(function(column){\r\n\t\t\tcolumn.verticalAlign(alignment);\r\n\t\t});\r\n\t}\r\n\r\n\t//clear vertical alignmenet\r\n\tclearVerticalAlign(){\r\n\t\tthis.element.style.paddingTop = \"\";\r\n\t\tthis.element.style.height = \"\";\r\n\t\tthis.element.style.minHeight = \"\";\r\n\t\tthis.groupElement.style.minHeight = \"\";\r\n\r\n\t\tthis.columns.forEach(function(column){\r\n\t\t\tcolumn.clearVerticalAlign();\r\n\t\t});\r\n\t}\r\n\r\n\tbindModuleColumns (){\r\n\t\t//check if rownum formatter is being used on a column\r\n\t\tif(this.definition.formatter == \"rownum\"){\r\n\t\t\tthis.table.rowManager.rowNumColumn = this;\r\n\t\t}\r\n\t}\r\n\r\n\t//// Retreive Column Information ////\r\n\t//return column header element\r\n\tgetElement(){\r\n\t\treturn this.element;\r\n\t}\r\n\r\n\t//return colunm group element\r\n\tgetGroupElement(){\r\n\t\treturn this.groupElement;\r\n\t}\r\n\r\n\t//return field name\r\n\tgetField(){\r\n\t\treturn this.field;\r\n\t}\r\n\r\n\t//return the first column in a group\r\n\tgetFirstColumn(){\r\n\t\tif(!this.isGroup){\r\n\t\t\treturn this;\r\n\t\t}else{\r\n\t\t\tif(this.columns.length){\r\n\t\t\t\treturn this.columns[0].getFirstColumn();\r\n\t\t\t}else{\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//return the last column in a group\r\n\tgetLastColumn(){\r\n\t\tif(!this.isGroup){\r\n\t\t\treturn this;\r\n\t\t}else{\r\n\t\t\tif(this.columns.length){\r\n\t\t\t\treturn this.columns[this.columns.length -1].getLastColumn();\r\n\t\t\t}else{\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//return all columns in a group\r\n\tgetColumns(){\r\n\t\treturn this.columns;\r\n\t}\r\n\r\n\t//return all columns in a group\r\n\tgetCells(){\r\n\t\treturn this.cells;\r\n\t}\r\n\r\n\t//retreive the top column in a group of columns\r\n\tgetTopColumn(){\r\n\t\tif(this.parent.isGroup){\r\n\t\t\treturn this.parent.getTopColumn();\r\n\t\t}else{\r\n\t\t\treturn this;\r\n\t\t}\r\n\t}\r\n\r\n\t//return column definition object\r\n\tgetDefinition(updateBranches){\r\n\t\tvar colDefs = [];\r\n\r\n\t\tif(this.isGroup && updateBranches){\r\n\t\t\tthis.columns.forEach(function(column){\r\n\t\t\t\tcolDefs.push(column.getDefinition(true));\r\n\t\t\t});\r\n\r\n\t\t\tthis.definition.columns = colDefs;\r\n\t\t}\r\n\r\n\t\treturn this.definition;\r\n\t}\r\n\r\n\t//////////////////// Actions ////////////////////\r\n\tcheckColumnVisibility(){\r\n\t\tvar visible = false;\r\n\r\n\t\tthis.columns.forEach(function(column){\r\n\t\t\tif(column.visible){\r\n\t\t\t\tvisible = true;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tif(visible){\r\n\t\t\tthis.show();\r\n\t\t\tthis.parent.table.options.columnVisibilityChanged.call(this.table, this.getComponent(), false);\r\n\t\t}else{\r\n\t\t\tthis.hide();\r\n\t\t}\r\n\t}\r\n\r\n\t//show column\r\n\tshow(silent, responsiveToggle){\r\n\t\tif(!this.visible){\r\n\t\t\tthis.visible = true;\r\n\r\n\t\t\tthis.element.style.display = \"\";\r\n\r\n\t\t\tif(this.parent.isGroup){\r\n\t\t\t\tthis.parent.checkColumnVisibility();\r\n\t\t\t}\r\n\r\n\t\t\tthis.cells.forEach(function(cell){\r\n\t\t\t\tcell.show();\r\n\t\t\t});\r\n\r\n\t\t\tif(!this.isGroup && this.width === null){\r\n\t\t\t\tthis.reinitializeWidth();\r\n\t\t\t}\r\n\r\n\t\t\tthis.table.columnManager._verticalAlignHeaders();\r\n\r\n\t\t\tif(this.table.options.persistence && this.table.modExists(\"persistence\", true) && this.table.modules.persistence.config.columns){\r\n\t\t\t\tthis.table.modules.persistence.save(\"columns\");\r\n\t\t\t}\r\n\r\n\t\t\tif(!responsiveToggle && this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)){\r\n\t\t\t\tthis.table.modules.responsiveLayout.updateColumnVisibility(this, this.visible);\r\n\t\t\t}\r\n\r\n\t\t\tif(!silent){\r\n\t\t\t\tthis.table.options.columnVisibilityChanged.call(this.table, this.getComponent(), true);\r\n\t\t\t}\r\n\r\n\t\t\tif(this.parent.isGroup){\r\n\t\t\t\tthis.parent.matchChildWidths();\r\n\t\t\t}\r\n\r\n\t\t\tif(!this.silent && this.table.options.virtualDomHoz){\r\n\t\t\t\tthis.table.vdomHoz.reinitialize();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//hide column\r\n\thide(silent, responsiveToggle){\r\n\t\tif(this.visible){\r\n\t\t\tthis.visible = false;\r\n\r\n\t\t\tthis.element.style.display = \"none\";\r\n\r\n\t\t\tthis.table.columnManager._verticalAlignHeaders();\r\n\r\n\t\t\tif(this.parent.isGroup){\r\n\t\t\t\tthis.parent.checkColumnVisibility();\r\n\t\t\t}\r\n\r\n\t\t\tthis.cells.forEach(function(cell){\r\n\t\t\t\tcell.hide();\r\n\t\t\t});\r\n\r\n\t\t\tif(this.table.options.persistence && this.table.modExists(\"persistence\", true) && this.table.modules.persistence.config.columns){\r\n\t\t\t\tthis.table.modules.persistence.save(\"columns\");\r\n\t\t\t}\r\n\r\n\t\t\tif(!responsiveToggle && this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)){\r\n\t\t\t\tthis.table.modules.responsiveLayout.updateColumnVisibility(this, this.visible);\r\n\t\t\t}\r\n\r\n\t\t\tif(!silent){\r\n\t\t\t\tthis.table.options.columnVisibilityChanged.call(this.table, this.getComponent(), false);\r\n\t\t\t}\r\n\r\n\t\t\tif(this.parent.isGroup){\r\n\t\t\t\tthis.parent.matchChildWidths();\r\n\t\t\t}\r\n\r\n\t\t\tif(!this.silent && this.table.options.virtualDomHoz){\r\n\t\t\t\tthis.table.vdomHoz.reinitialize();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tmatchChildWidths(){\r\n\t\tvar childWidth = 0;\r\n\r\n\t\tif(this.contentElement && this.columns.length){\r\n\t\t\tthis.columns.forEach(function(column){\r\n\t\t\t\tif(column.visible){\r\n\t\t\t\t\tchildWidth += column.getWidth();\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tthis.contentElement.style.maxWidth = (childWidth - 1) + \"px\";\r\n\r\n\t\t\tif(this.parent.isGroup){\r\n\t\t\t\tthis.parent.matchChildWidths();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tremoveChild(child){\r\n\t\tvar index = this.columns.indexOf(child);\r\n\r\n\t\tif(index > -1){\r\n\t\t\tthis.columns.splice(index, 1);\r\n\t\t}\r\n\r\n\t\tif(!this.columns.length){\r\n\t\t\tthis.delete();\r\n\t\t}\r\n\t}\r\n\r\n\tsetWidth(width){\r\n\t\tthis.widthFixed = true;\r\n\t\tthis.setWidthActual(width);\r\n\t}\r\n\r\n\tsetWidthActual(width){\r\n\t\tif(isNaN(width)){\r\n\t\t\twidth = Math.floor((this.table.element.clientWidth/100) * parseInt(width));\r\n\t\t}\r\n\r\n\t\twidth = Math.max(this.minWidth, width);\r\n\r\n\t\tif(this.maxWidth){\r\n\t\t\twidth = Math.min(this.maxWidth, width);\r\n\t\t}\r\n\r\n\t\tthis.width = width;\r\n\t\tthis.widthStyled = width ? width + \"px\" : \"\";\r\n\r\n\t\tthis.element.style.width = this.widthStyled;\r\n\r\n\t\tif(!this.isGroup){\r\n\t\t\tthis.cells.forEach(function(cell){\r\n\t\t\t\tcell.setWidth();\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif(this.parent.isGroup){\r\n\t\t\tthis.parent.matchChildWidths();\r\n\t\t}\r\n\r\n\t\t//set resizable handles\r\n\t\tif(this.table.modExists(\"frozenColumns\")){\r\n\t\t\tthis.table.modules.frozenColumns.layout();\r\n\t\t}\r\n\t}\r\n\r\n\tcheckCellHeights(){\r\n\t\tvar rows = [];\r\n\r\n\t\tthis.cells.forEach(function(cell){\r\n\t\t\tif(cell.row.heightInitialized){\r\n\t\t\t\tif(cell.row.getElement().offsetParent !== null){\r\n\t\t\t\t\trows.push(cell.row);\r\n\t\t\t\t\tcell.row.clearCellHeight();\r\n\t\t\t\t}else{\r\n\t\t\t\t\tcell.row.heightInitialized = false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\trows.forEach(function(row){\r\n\t\t\trow.calcHeight();\r\n\t\t});\r\n\r\n\t\trows.forEach(function(row){\r\n\t\t\trow.setCellHeight();\r\n\t\t});\r\n\t}\r\n\r\n\tgetWidth(){\r\n\t\tvar width = 0;\r\n\r\n\t\tif(this.isGroup){\r\n\t\t\tthis.columns.forEach(function(column){\r\n\t\t\t\tif(column.visible){\r\n\t\t\t\t\twidth += column.getWidth();\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\twidth = this.width;\r\n\t\t}\r\n\r\n\t\treturn width;\r\n\t}\r\n\r\n\tgetHeight(){\r\n\t\treturn this.element.offsetHeight;\r\n\t}\r\n\r\n\tsetMinWidth(minWidth){\r\n\t\tthis.minWidth = minWidth;\r\n\t\tthis.minWidthStyled = minWidth ? minWidth + \"px\" : \"\";\r\n\r\n\t\tthis.element.style.minWidth = this.minWidthStyled;\r\n\r\n\t\tthis.cells.forEach(function(cell){\r\n\t\t\tcell.setMinWidth();\r\n\t\t});\r\n\t}\r\n\r\n\tsetMaxWidth(maxWidth){\r\n\t\tthis.maxWidth = maxWidth;\r\n\t\tthis.maxWidthStyled = maxWidth ? maxWidth + \"px\" : \"\";\r\n\r\n\t\tthis.element.style.maxWidth = this.maxWidthStyled;\r\n\r\n\t\tthis.cells.forEach(function(cell){\r\n\t\t\tcell.setMaxWidth();\r\n\t\t});\r\n\t}\r\n\r\n\tdelete(){\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tvar index;\r\n\r\n\t\t\tif(this.isGroup){\r\n\t\t\t\tthis.columns.forEach(function(column){\r\n\t\t\t\t\tcolumn.delete();\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\t//cancel edit if column is currently being edited\r\n\t\t\tif(this.table.modExists(\"edit\")){\r\n\t\t\t\tif(this.table.modules.edit.currentCell.column === this){\r\n\t\t\t\t\tthis.table.modules.edit.cancelEdit();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tvar cellCount = this.cells.length;\r\n\r\n\t\t\tfor(let i = 0; i < cellCount; i++){\r\n\t\t\t\tthis.cells[0].delete();\r\n\t\t\t}\r\n\r\n\t\t\tif(this.element.parentNode){\r\n\t\t\t\tthis.element.parentNode.removeChild(this.element);\r\n\t\t\t}\r\n\r\n\t\t\tthis.element = false;\r\n\t\t\tthis.contentElement = false;\r\n\t\t\tthis.titleElement = false;\r\n\t\t\tthis.groupElement = false;\r\n\r\n\t\t\tif(this.parent.isGroup){\r\n\t\t\t\tthis.parent.removeChild(this);\r\n\t\t\t}\r\n\r\n\t\t\tthis.table.columnManager.deregisterColumn(this);\r\n\r\n\t\t\tif(this.table.options.virtualDomHoz){\r\n\t\t\t\tthis.table.vdomHoz.reinitialize(true);\r\n\t\t\t}\r\n\r\n\t\t\tresolve();\r\n\t\t});\r\n\t}\r\n\r\n\tcolumnRendered(){\r\n\t\tif(this.titleFormatterRendered){\r\n\t\t\tthis.titleFormatterRendered();\r\n\t\t}\r\n\t}\r\n\r\n\tvalidate(){\r\n\t\tvar invalid = [];\r\n\r\n\t\tthis.cells.forEach(function(cell){\r\n\t\t\tif(!cell.validate()){\r\n\t\t\t\tinvalid.push(cell.getComponent());\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn invalid.length ? invalid : true;\r\n\t}\r\n\r\n\t//////////////// Cell Management /////////////////\r\n\t//generate cell for this column\r\n\tgenerateCell(row){\r\n\t\tvar cell = new Cell(this, row);\r\n\r\n\t\tthis.cells.push(cell);\r\n\r\n\t\treturn cell;\r\n\t}\r\n\r\n\tnextColumn(){\r\n\t\tvar index = this.table.columnManager.findColumnIndex(this);\r\n\t\treturn index > -1 ? this._nextVisibleColumn(index + 1) : false;\r\n\t}\r\n\r\n\t_nextVisibleColumn(index){\r\n\t\tvar column = this.table.columnManager.getColumnByIndex(index);\r\n\t\treturn !column || column.visible ? column : this._nextVisibleColumn(index + 1);\r\n\t}\r\n\r\n\tprevColumn(){\r\n\t\tvar index = this.table.columnManager.findColumnIndex(this);\r\n\t\treturn index > -1 ? this._prevVisibleColumn(index - 1) : false;\r\n\t}\r\n\r\n\t_prevVisibleColumn(index){\r\n\t\tvar column = this.table.columnManager.getColumnByIndex(index);\r\n\t\treturn !column || column.visible ? column : this._prevVisibleColumn(index - 1);\r\n\t}\r\n\r\n\treinitializeWidth(force){\r\n\t\tthis.widthFixed = false;\r\n\r\n\t\t//set width if present\r\n\t\tif(typeof this.definition.width !== \"undefined\" && !force){\r\n\t\t\tthis.setWidth(this.definition.width);\r\n\t\t}\r\n\r\n\t\t//hide header filters to prevent them altering column width\r\n\t\tif(this.table.modExists(\"filter\")){\r\n\t\t\tthis.table.modules.filter.hideHeaderFilterElements();\r\n\t\t}\r\n\r\n\t\tthis.fitToData();\r\n\r\n\t\t//show header filters again after layout is complete\r\n\t\tif(this.table.modExists(\"filter\")){\r\n\t\t\tthis.table.modules.filter.showHeaderFilterElements();\r\n\t\t}\r\n\t}\r\n\r\n\t//set column width to maximum cell width\r\n\tfitToData(){\r\n\t\tif(!this.widthFixed){\r\n\t\t\tthis.element.style.width = \"\";\r\n\r\n\t\t\tthis.cells.forEach((cell) => {\r\n\t\t\t\tcell.clearWidth();\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tvar maxWidth = this.element.offsetWidth;\r\n\r\n\t\tif(!this.width || !this.widthFixed){\r\n\t\t\tthis.cells.forEach((cell) => {\r\n\t\t\t\tvar width = cell.getWidth();\r\n\r\n\t\t\t\tif(width > maxWidth){\r\n\t\t\t\t\tmaxWidth = width;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tif(maxWidth){\r\n\t\t\t\tthis.setWidthActual(maxWidth + 1);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tupdateDefinition(updates){\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tvar definition;\r\n\r\n\t\t\tif(!this.isGroup){\r\n\t\t\t\tif(!this.parent.isGroup){\r\n\t\t\t\t\tdefinition = Object.assign({}, this.getDefinition());\r\n\t\t\t\t\tdefinition = Object.assign(definition, updates);\r\n\r\n\t\t\t\t\tthis.table.columnManager.addColumn(definition, false, this)\r\n\t\t\t\t\t.then((column) => {\r\n\r\n\t\t\t\t\t\tif(definition.field == this.field){\r\n\t\t\t\t\t\t\tthis.field = false; //cleair field name to prevent deletion of duplicate column from arrays\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tthis.delete()\r\n\t\t\t\t\t\t.then(() => {\r\n\t\t\t\t\t\t\tresolve(column.getComponent());\r\n\t\t\t\t\t\t}).catch((err) => {\r\n\t\t\t\t\t\t\treject(err);\r\n\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t}).catch((err) => {\r\n\t\t\t\t\t\treject(err);\r\n\t\t\t\t\t});\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.warn(\"Column Update Error - The updateDefinition function is only available on ungrouped columns\");\r\n\t\t\t\t\treject(\"Column Update Error - The updateDefinition function is only available on columns, not column groups\");\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Column Update Error - The updateDefinition function is only available on ungrouped columns\");\r\n\t\t\t\treject(\"Column Update Error - The updateDefinition function is only available on columns, not column groups\");\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tdeleteCell(cell){\r\n\t\tvar index = this.cells.indexOf(cell);\r\n\r\n\t\tif(index > -1){\r\n\t\t\tthis.cells.splice(index, 1);\r\n\t\t}\r\n\t}\r\n\r\n\t//////////////// Object Generation /////////////////\r\n\tgetComponent(){\r\n\t\tif(!this.component){\r\n\t\t\tthis.component = new ColumnComponent(this);\r\n\t\t}\r\n\r\n\t\treturn this.component;\r\n\t}\r\n}\r\n\r\nColumn.defaultOptionList = defaultOptions;\r\n\r\nexport default Column;","//public row object\r\nexport default class RowComponent {\r\n\r\n\tconstructor (row){\r\n\t\tthis._row = row;\r\n\t}\r\n\r\n\tgetData(transform){\r\n\t\treturn this._row.getData(transform);\r\n\t}\r\n\r\n\tgetElement(){\r\n\t\treturn this._row.getElement();\r\n\t}\r\n\r\n\tgetCells(){\r\n\t\tvar cells = [];\r\n\r\n\t\tthis._row.getCells().forEach(function(cell){\r\n\t\t\tcells.push(cell.getComponent());\r\n\t\t});\r\n\r\n\t\treturn cells;\r\n\t}\r\n\r\n\tgetCell(column){\r\n\t\tvar cell = this._row.getCell(column);\r\n\t\treturn cell ? cell.getComponent() : false;\r\n\t}\r\n\r\n\tgetIndex(){\r\n\t\treturn this._row.getData(\"data\")[this._row.table.options.index];\r\n\t}\r\n\r\n\tgetPosition(active){\r\n\t\treturn this._row.table.rowManager.getRowPosition(this._row, active);\r\n\t}\r\n\r\n\tdelete(){\r\n\t\treturn this._row.delete();\r\n\t}\r\n\r\n\tscrollTo(){\r\n\t\treturn this._row.table.rowManager.scrollToRow(this._row);\r\n\t}\r\n\r\n\tpageTo(){\r\n\t\tif(this._row.table.modExists(\"page\", true)){\r\n\t\t\treturn this._row.table.modules.page.setPageToRow(this._row);\r\n\t\t}\r\n\t}\r\n\r\n\tmove(to, after){\r\n\t\tthis._row.moveToRow(to, after);\r\n\t}\r\n\r\n\tupdate(data){\r\n\t\treturn this._row.updateData(data);\r\n\t}\r\n\r\n\tnormalizeHeight(){\r\n\t\tthis._row.normalizeHeight(true);\r\n\t}\r\n\r\n\tselect(){\r\n\t\tthis._row.table.modules.selectRow.selectRows(this._row);\r\n\t}\r\n\r\n\tdeselect(){\r\n\t\tthis._row.table.modules.selectRow.deselectRows(this._row);\r\n\t}\r\n\r\n\ttoggleSelect(){\r\n\t\tthis._row.table.modules.selectRow.toggleRow(this._row);\r\n\t}\r\n\r\n\tisSelected(){\r\n\t\treturn this._row.table.modules.selectRow.isRowSelected(this._row);\r\n\t}\r\n\r\n\t_getSelf(){\r\n\t\treturn this._row;\r\n\t}\r\n\r\n\tvalidate(){\r\n\t\treturn this._row.validate();\r\n\t}\r\n\r\n\tfreeze(){\r\n\t\tif(this._row.table.modExists(\"frozenRows\", true)){\r\n\t\t\tthis._row.table.modules.frozenRows.freezeRow(this._row);\r\n\t\t}\r\n\t}\r\n\r\n\tunfreeze(){\r\n\t\tif(this._row.table.modExists(\"frozenRows\", true)){\r\n\t\t\tthis._row.table.modules.frozenRows.unfreezeRow(this._row);\r\n\t\t}\r\n\t}\r\n\r\n\tisFrozen(){\r\n\t\tif(this._row.table.modExists(\"frozenRows\", true)){\r\n\t\t\tvar index = this._row.table.modules.frozenRows.rows.indexOf(this._row);\r\n\t\t\treturn index > -1;\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t}\r\n\r\n\ttreeCollapse(){\r\n\t\tif(this._row.table.modExists(\"dataTree\", true)){\r\n\t\t\tthis._row.table.modules.dataTree.collapseRow(this._row);\r\n\t\t}\r\n\t}\r\n\r\n\ttreeExpand(){\r\n\t\tif(this._row.table.modExists(\"dataTree\", true)){\r\n\t\t\tthis._row.table.modules.dataTree.expandRow(this._row);\r\n\t\t}\r\n\t}\r\n\r\n\ttreeToggle(){\r\n\t\tif(this._row.table.modExists(\"dataTree\", true)){\r\n\t\t\tthis._row.table.modules.dataTree.toggleRow(this._row);\r\n\t\t}\r\n\t}\r\n\r\n\tgetTreeParent(){\r\n\t\tif(this._row.table.modExists(\"dataTree\", true)){\r\n\t\t\treturn this._row.table.modules.dataTree.getTreeParent(this._row);\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t}\r\n\r\n\tgetTreeChildren(){\r\n\t\tif(this._row.table.modExists(\"dataTree\", true)){\r\n\t\t\treturn this._row.table.modules.dataTree.getTreeChildren(this._row, true);\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t}\r\n\r\n\taddTreeChild(data, pos, index){\r\n\t\tif(this._row.table.modExists(\"dataTree\", true)){\r\n\t\t\treturn this._row.table.modules.dataTree.addTreeChildRow(this._row, data, pos, index);\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t}\r\n\r\n\treformat(){\r\n\t\treturn this._row.reinitialize();\r\n\t}\r\n\r\n\tgetGroup(){\r\n\t\treturn this._row.getGroup().getComponent();\r\n\t}\r\n\r\n\tgetTable(){\r\n\t\treturn this._row.table;\r\n\t}\r\n\r\n\tgetNextRow(){\r\n\t\tvar row = this._row.nextRow();\r\n\t\treturn row ? row.getComponent() : row;\r\n\t}\r\n\r\n\tgetPrevRow(){\r\n\t\tvar row = this._row.prevRow();\r\n\t\treturn row ? row.getComponent() : row;\r\n\t}\r\n}","export default [\r\n\t\"title\",\r\n\t\"field\",\r\n\t\"columns\",\r\n\t\"visible\",\r\n\t\"hozAlign\",\r\n\t\"vertAlign\",\r\n\t\"width\",\r\n\t\"minWidth\",\r\n\t\"maxWidth\",\r\n\t\"widthGrow\",\r\n\t\"widthShrink\",\r\n\t\"resizable\",\r\n\t\"frozen\",\r\n\t\"responsive\",\r\n\t\"tooltip\",\r\n\t\"cssClass\",\r\n\t\"rowHandle\",\r\n\t\"print\",\r\n\t\"htmlOutput\",\r\n\t\"sorter\",\r\n\t\"sorterParams\",\r\n\t\"formatter\",\r\n\t\"formatterParams\",\r\n\t\"variableHeight\",\r\n\t\"editable\",\r\n\t\"editor\",\r\n\t\"editorParams\",\r\n\t\"validator\",\r\n\t\"mutator\",\r\n\t\"mutatorParams\",\r\n\t\"mutatorData\",\r\n\t\"mutatorDataParams\",\r\n\t\"mutatorEdit\",\r\n\t\"mutatorEditParams\",\r\n\t\"mutatorClipboard\",\r\n\t\"mutatorClipboardParams\",\r\n\t\"accessor\",\r\n\t\"accessorParams\",\r\n\t\"accessorData\",\r\n\t\"accessorDataParams\",\r\n\t\"accessorDownload\",\r\n\t\"accessorDownloadParams\",\r\n\t\"accessorClipboard\",\r\n\t\"accessorClipboardParams\",\r\n\t\"accessorPrint\",\r\n\t\"accessorPrintParams\",\r\n\t\"accessorHtmlOutput\",\r\n\t\"accessorHtmlOutputParams\",\r\n\t\"clipboard\",\r\n\t\"download\",\r\n\t\"topCalc\",\r\n\t\"topCalcParams\",\r\n\t\"topCalcFormatter\",\r\n\t\"topCalcFormatterParams\",\r\n\t\"bottomCalc\",\r\n\t\"bottomCalcParams\",\r\n\t\"bottomCalcFormatter\",\r\n\t\"bottomCalcFormatterParams\",\r\n\t\"cellClick\",\r\n\t\"cellDblClick\",\r\n\t\"cellContext\",\r\n\t\"cellTap\",\r\n\t\"cellDblTap\",\r\n\t\"cellTapHold\",\r\n\t\"cellMouseEnter\",\r\n\t\"cellMouseLeave\",\r\n\t\"cellMouseOver\",\r\n\t\"cellMouseOut\",\r\n\t\"cellMouseMove\",\r\n\t\"cellEditing\",\r\n\t\"cellEdited\",\r\n\t\"cellEditCancelled\",\r\n\t\"headerSort\",\r\n\t\"headerSortStartingDir\",\r\n\t\"headerSortTristate\",\r\n\t\"headerClick\",\r\n\t\"headerDblClick\",\r\n\t\"headerContext\",\r\n\t\"headerTap\",\r\n\t\"headerDblTap\",\r\n\t\"headerTapHold\",\r\n\t\"headerTooltip\",\r\n\t\"headerVertical\",\r\n\t\"headerHozAlign\",\r\n\t\"editableTitle\",\r\n\t\"titleFormatter\",\r\n\t\"titleFormatterParams\",\r\n\t\"headerFilter\",\r\n\t\"headerFilterPlaceholder\",\r\n\t\"headerFilterParams\",\r\n\t\"headerFilterEmptyCheck\",\r\n\t\"headerFilterFunc\",\r\n\t\"headerFilterFuncParams\",\r\n\t\"headerFilterLiveFilter\",\r\n\t\"print\",\r\n\t\"headerContextMenu\",\r\n\t\"headerMenu\",\r\n\t\"contextMenu\",\r\n\t// \"headerClickMenu\",\r\n\t\"clickMenu\",\r\n\t\"formatterPrint\",\r\n\t\"formatterPrintParams\",\r\n\t\"formatterClipboard\",\r\n\t\"formatterClipboardParams\",\r\n\t\"formatterHtmlOutput\",\r\n\t\"formatterHtmlOutputParams\",\r\n\t\"titlePrint\",\r\n\t\"titleClipboard\",\r\n\t\"titleHtmlOutput\",\r\n\t\"titleDownload\",\r\n];","import RowComponent from './RowComponent.js';\r\nimport Helpers from '../Helpers.js';\r\n\r\nexport default class Row {\r\n\tconstructor (data, parent, type = \"row\"){\r\n\t\tthis.table = parent.table;\r\n\t\tthis.parent = parent;\r\n\t\tthis.data = {};\r\n\t\tthis.type = type; //type of element\r\n\t\tthis.element = false;\r\n\t\tthis.modules = {}; //hold module variables;\r\n\t\tthis.cells = [];\r\n\t\tthis.height = 0; //hold element height\r\n\t\tthis.heightStyled = \"\"; //hold element height prestyled to improve render efficiency\r\n\t\tthis.manualHeight = false; //user has manually set row height\r\n\t\tthis.outerHeight = 0; //holde lements outer height\r\n\t\tthis.initialized = false; //element has been rendered\r\n\t\tthis.heightInitialized = false; //element has resized cells to fit\r\n\r\n\t\tthis.component = null;\r\n\r\n\t\tthis.created = false;\r\n\r\n\t\tthis.setData(data);\r\n\t}\r\n\r\n\tcreate(){\r\n\t\tif(!this.created){\r\n\t\t\tthis.created = true;\r\n\t\t\tthis.generateElement();\r\n\t\t}\r\n\t}\r\n\r\n\tcreateElement (){\r\n\t\tvar el = document.createElement(\"div\");\r\n\r\n\t\tel.classList.add(\"tabulator-row\");\r\n\t\tel.setAttribute(\"role\", \"row\");\r\n\r\n\t\tthis.element = el;\r\n\t}\r\n\r\n\tgetElement(){\r\n\t\tthis.create();\r\n\t\treturn this.element;\r\n\t}\r\n\r\n\tdetachElement(){\r\n\t\tif (this.element && this.element.parentNode){\r\n\t\t\tthis.element.parentNode.removeChild(this.element);\r\n\t\t}\r\n\t}\r\n\r\n\tgenerateElement(){\r\n\t\tvar dblTap,\ttapHold, tap;\r\n\r\n\t\tthis.createElement();\r\n\r\n\t\t//set row selection characteristics\r\n\t\tif(this.table.options.selectable !== false && this.table.modExists(\"selectRow\")){\r\n\t\t\tthis.table.modules.selectRow.initializeRow(this);\r\n\t\t}\r\n\r\n\t\t//setup movable rows\r\n\t\tif(this.table.options.movableRows !== false && this.table.modExists(\"moveRow\")){\r\n\t\t\tthis.table.modules.moveRow.initializeRow(this);\r\n\t\t}\r\n\r\n\t\t//setup data tree\r\n\t\tif(this.table.options.dataTree !== false && this.table.modExists(\"dataTree\")){\r\n\t\t\tthis.table.modules.dataTree.initializeRow(this);\r\n\t\t}\r\n\r\n\t\t//setup column colapse container\r\n\t\tif(this.table.options.responsiveLayout === \"collapse\" && this.table.modExists(\"responsiveLayout\")){\r\n\t\t\tthis.table.modules.responsiveLayout.initializeRow(this);\r\n\t\t}\r\n\r\n\t\t//set column menu\r\n\t\tif((this.table.options.rowContextMenu || this.table.options.rowClickMenu) && this.table.modExists(\"menu\")){\r\n\t\t\tthis.table.modules.menu.initializeRow(this);\r\n\t\t}\r\n\r\n\t\t//handle row click events\r\n\t\tif (this.table.options.rowClick){\r\n\t\t\tthis.element.addEventListener(\"click\", (e) => {\r\n\t\t\t\tthis.table.options.rowClick(e, this.getComponent());\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif (this.table.options.rowDblClick){\r\n\t\t\tthis.element.addEventListener(\"dblclick\", (e) => {\r\n\t\t\t\tthis.table.options.rowDblClick(e, this.getComponent());\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif (this.table.options.rowContext){\r\n\t\t\tthis.element.addEventListener(\"contextmenu\", (e) => {\r\n\t\t\t\tthis.table.options.rowContext(e, this.getComponent());\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\t//handle mouse events\r\n\t\tif (this.table.options.rowMouseEnter){\r\n\t\t\tthis.element.addEventListener(\"mouseenter\", (e) => {\r\n\t\t\t\tthis.table.options.rowMouseEnter(e, this.getComponent());\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif (this.table.options.rowMouseLeave){\r\n\t\t\tthis.element.addEventListener(\"mouseleave\", (e) => {\r\n\t\t\t\tthis.table.options.rowMouseLeave(e, this.getComponent());\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif (this.table.options.rowMouseOver){\r\n\t\t\tthis.element.addEventListener(\"mouseover\", (e) => {\r\n\t\t\t\tthis.table.options.rowMouseOver(e, this.getComponent());\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif (this.table.options.rowMouseOut){\r\n\t\t\tthis.element.addEventListener(\"mouseout\", (e) => {\r\n\t\t\t\tthis.table.options.rowMouseOut(e, this.getComponent());\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif (this.table.options.rowMouseMove){\r\n\t\t\tthis.element.addEventListener(\"mousemove\", (e) => {\r\n\t\t\t\tthis.table.options.rowMouseMove(e, this.getComponent());\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif (this.table.options.rowTap){\r\n\r\n\t\t\ttap = false;\r\n\r\n\t\t\tthis.element.addEventListener(\"touchstart\", (e) => {\r\n\t\t\t\ttap = true;\r\n\t\t\t}, {passive: true});\r\n\r\n\t\t\tthis.element.addEventListener(\"touchend\", (e) => {\r\n\t\t\t\tif(tap){\r\n\t\t\t\t\tthis.table.options.rowTap(e, this.getComponent());\r\n\t\t\t\t}\r\n\r\n\t\t\t\ttap = false;\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif (this.table.options.rowDblTap){\r\n\r\n\t\t\tdblTap = null;\r\n\r\n\t\t\tthis.element.addEventListener(\"touchend\", (e) => {\r\n\t\t\t\tif(dblTap){\r\n\t\t\t\t\tclearTimeout(dblTap);\r\n\t\t\t\t\tdblTap = null;\r\n\r\n\t\t\t\t\tthis.table.options.rowDblTap(e, this.getComponent());\r\n\t\t\t\t}else{\r\n\r\n\t\t\t\t\tdblTap = setTimeout(() => {\r\n\t\t\t\t\t\tclearTimeout(dblTap);\r\n\t\t\t\t\t\tdblTap = null;\r\n\t\t\t\t\t}, 300);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif (this.table.options.rowTapHold){\r\n\r\n\t\t\ttapHold = null;\r\n\r\n\t\t\tthis.element.addEventListener(\"touchstart\", (e) => {\r\n\t\t\t\tclearTimeout(tapHold);\r\n\r\n\t\t\t\ttapHold = setTimeout(() => {\r\n\t\t\t\t\tclearTimeout(tapHold);\r\n\t\t\t\t\ttapHold = null;\r\n\t\t\t\t\ttap = false;\r\n\t\t\t\t\tthis.table.options.rowTapHold(e, this.getComponent());\r\n\t\t\t\t}, 1000);\r\n\r\n\t\t\t}, {passive: true});\r\n\r\n\t\t\tthis.element.addEventListener(\"touchend\", (e) => {\r\n\t\t\t\tclearTimeout(tapHold);\r\n\t\t\t\ttapHold = null;\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tgenerateCells(){\r\n\t\tthis.cells = this.table.columnManager.generateCells(this);\r\n\t}\r\n\r\n\t//functions to setup on first render\r\n\tinitialize(force){\r\n\t\tthis.create();\r\n\r\n\t\tif(!this.initialized || force){\r\n\r\n\t\t\tthis.deleteCells();\r\n\r\n\t\t\twhile(this.element.firstChild) this.element.removeChild(this.element.firstChild);\r\n\r\n\t\t\t//handle frozen cells\r\n\t\t\tif(this.table.modExists(\"frozenColumns\")){\r\n\t\t\t\tthis.table.modules.frozenColumns.layoutRow(this);\r\n\t\t\t}\r\n\r\n\t\t\tthis.generateCells();\r\n\r\n\t\t\tif(this.table.options.virtualDomHoz && this.table.vdomHoz.initialized){\r\n\t\t\t\tthis.table.vdomHoz.initializeRow(this);\r\n\t\t\t}else{\r\n\t\t\t\tthis.cells.forEach((cell) => {\r\n\t\t\t\t\tthis.element.appendChild(cell.getElement());\r\n\t\t\t\t\tcell.cellRendered();\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\tif(force){\r\n\t\t\t\tthis.normalizeHeight();\r\n\t\t\t}\r\n\r\n\t\t\t//setup movable rows\r\n\t\t\tif(this.table.options.dataTree && this.table.modExists(\"dataTree\")){\r\n\t\t\t\tthis.table.modules.dataTree.layoutRow(this);\r\n\t\t\t}\r\n\r\n\t\t\t//setup column colapse container\r\n\t\t\tif(this.table.options.responsiveLayout === \"collapse\" && this.table.modExists(\"responsiveLayout\")){\r\n\t\t\t\tthis.table.modules.responsiveLayout.layoutRow(this);\r\n\t\t\t}\r\n\r\n\t\t\tif(this.table.options.rowFormatter){\r\n\t\t\t\tthis.table.options.rowFormatter(this.getComponent());\r\n\t\t\t}\r\n\r\n\t\t\t//set resizable handles\r\n\t\t\tif(this.table.options.resizableRows && this.table.modExists(\"resizeRows\")){\r\n\t\t\t\tthis.table.modules.resizeRows.initializeRow(this);\r\n\t\t\t}\r\n\r\n\t\t\tthis.initialized = true;\r\n\t\t}else{\r\n\t\t\tif(this.table.options.virtualDomHoz){\r\n\t\t\t\tthis.table.vdomHoz.reinitializeRow(this);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\treinitializeHeight(){\r\n\t\tthis.heightInitialized = false;\r\n\r\n\t\tif(this.element && this.element.offsetParent !== null){\r\n\t\t\tthis.normalizeHeight(true);\r\n\t\t}\r\n\t}\r\n\r\n\treinitialize(children){\r\n\t\tthis.initialized = false;\r\n\t\tthis.heightInitialized = false;\r\n\r\n\t\tif(!this.manualHeight){\r\n\t\t\tthis.height = 0;\r\n\t\t\tthis.heightStyled = \"\";\r\n\t\t}\r\n\r\n\t\tif(this.element && this.element.offsetParent !== null){\r\n\t\t\tthis.initialize(true);\r\n\t\t}\r\n\r\n\t\tif(this.table.options.dataTree && this.table.modExists(\"dataTree\", true)){\r\n\t\t\tthis.table.modules.dataTree.getTreeChildren(this, false, true).forEach(function(child){\r\n\t\t\t\tchild.reinitialize(true);\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\t//get heights when doing bulk row style calcs in virtual DOM\r\n\tcalcHeight(force){\r\n\r\n\t\tvar maxHeight = 0,\r\n\t\tminHeight = this.table.options.resizableRows ? this.element.clientHeight : 0;\r\n\r\n\t\tthis.cells.forEach(function(cell){\r\n\t\t\tvar height = cell.getHeight();\r\n\t\t\tif(height > maxHeight){\r\n\t\t\t\tmaxHeight = height;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tif(force){\r\n\t\t\tthis.height = Math.max(maxHeight, minHeight);\r\n\t\t}else{\r\n\t\t\tthis.height = this.manualHeight ? this.height : Math.max(maxHeight, minHeight);\r\n\t\t}\r\n\r\n\t\tthis.heightStyled = this.height ? this.height + \"px\" : \"\";\r\n\t\tthis.outerHeight = this.element.offsetHeight;\r\n\t}\r\n\r\n\t//set of cells\r\n\tsetCellHeight(){\r\n\t\tthis.cells.forEach(function(cell){\r\n\t\t\tcell.setHeight();\r\n\t\t});\r\n\r\n\t\tthis.heightInitialized = true;\r\n\t}\r\n\r\n\tclearCellHeight(){\r\n\t\tthis.cells.forEach(function(cell){\r\n\t\t\tcell.clearHeight();\r\n\t\t});\r\n\t}\r\n\r\n\t//normalize the height of elements in the row\r\n\tnormalizeHeight(force){\r\n\r\n\t\tif(force){\r\n\t\t\tthis.clearCellHeight();\r\n\t\t}\r\n\r\n\t\tthis.calcHeight(force);\r\n\r\n\t\tthis.setCellHeight();\r\n\t}\r\n\r\n\t//set height of rows\r\n\tsetHeight(height, force){\r\n\t\tif(this.height != height || force){\r\n\r\n\t\t\tthis.manualHeight = true;\r\n\r\n\t\t\tthis.height = height;\r\n\t\t\tthis.heightStyled = height ? height + \"px\" : \"\";\r\n\r\n\t\t\tthis.setCellHeight();\r\n\r\n\t\t\t// this.outerHeight = this.element.outerHeight();\r\n\t\t\tthis.outerHeight = this.element.offsetHeight;\r\n\t\t}\r\n\t}\r\n\r\n\t//return rows outer height\r\n\tgetHeight(){\r\n\t\treturn this.outerHeight;\r\n\t}\r\n\r\n\t//return rows outer Width\r\n\tgetWidth(){\r\n\t\treturn this.element.offsetWidth;\r\n\t}\r\n\r\n\t//////////////// Cell Management /////////////////\r\n\tdeleteCell(cell){\r\n\t\tvar index = this.cells.indexOf(cell);\r\n\r\n\t\tif(index > -1){\r\n\t\t\tthis.cells.splice(index, 1);\r\n\t\t}\r\n\t}\r\n\r\n\t//////////////// Data Management /////////////////\r\n\tsetData(data){\r\n\t\tif(this.table.modExists(\"mutator\")){\r\n\t\t\tdata = this.table.modules.mutator.transformRow(data, \"data\");\r\n\t\t}\r\n\r\n\t\tthis.data = data;\r\n\r\n\t\tif(this.table.options.reactiveData && this.table.modExists(\"reactiveData\", true)){\r\n\t\t\tthis.table.modules.reactiveData.watchRow(this);\r\n\t\t}\r\n\t}\r\n\r\n\t//update the rows data\r\n\tupdateData(updatedData){\r\n\t\tvar visible = this.element && Helpers.elVisible(this.element),\r\n\t\ttempData = {},\r\n\t\tnewRowData;\r\n\r\n\t\treturn new Promise((resolve, reject) => {\r\n\r\n\t\t\tif(typeof updatedData === \"string\"){\r\n\t\t\t\tupdatedData = JSON.parse(updatedData);\r\n\t\t\t}\r\n\r\n\t\t\tif(this.table.options.reactiveData && this.table.modExists(\"reactiveData\", true)){\r\n\t\t\t\tthis.table.modules.reactiveData.block();\r\n\t\t\t}\r\n\r\n\t\t\t//mutate incomming data if needed\r\n\t\t\tif(this.table.modExists(\"mutator\")){\r\n\r\n\t\t\t\ttempData = Object.assign(tempData, this.data);\r\n\t\t\t\ttempData = Object.assign(tempData, updatedData);\r\n\r\n\t\t\t\tnewRowData = this.table.modules.mutator.transformRow(tempData, \"data\", updatedData);\r\n\t\t\t}else{\r\n\t\t\t\tnewRowData = updatedData;\r\n\t\t\t}\r\n\r\n\t\t\t//set data\r\n\t\t\tfor (var attrname in newRowData) {\r\n\t\t\t\tthis.data[attrname] = newRowData[attrname];\r\n\t\t\t}\r\n\r\n\t\t\tif(this.table.options.reactiveData && this.table.modExists(\"reactiveData\", true)){\r\n\t\t\t\tthis.table.modules.reactiveData.unblock();\r\n\t\t\t}\r\n\r\n\t\t\t//update affected cells only\r\n\t\t\tfor (var attrname in updatedData) {\r\n\r\n\t\t\t\tlet columns = this.table.columnManager.getColumnsByFieldRoot(attrname);\r\n\r\n\t\t\t\tcolumns.forEach((column) => {\r\n\t\t\t\t\tlet cell = this.getCell(column.getField());\r\n\r\n\t\t\t\t\tif(cell){\r\n\t\t\t\t\t\tlet value = column.getFieldValue(newRowData);\r\n\t\t\t\t\t\tif(cell.getValue() != value){\r\n\t\t\t\t\t\t\tcell.setValueProcessData(value);\r\n\r\n\t\t\t\t\t\t\tif(visible){\r\n\t\t\t\t\t\t\t\tcell.cellRendered();\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\tif(this.table.options.groupUpdateOnCellEdit && this.table.options.groupBy && this.table.modExists(\"groupRows\")) {\r\n\t\t\t\tthis.table.modules.groupRows.reassignRowToGroup(this.row);\r\n\t\t\t}\r\n\r\n\t\t\t//Partial reinitialization if visible\r\n\t\t\tif(visible){\r\n\t\t\t\tthis.normalizeHeight(true);\r\n\r\n\t\t\t\tif(this.table.options.rowFormatter){\r\n\t\t\t\t\tthis.table.options.rowFormatter(this.getComponent());\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tthis.initialized = false;\r\n\t\t\t\tthis.height = 0;\r\n\t\t\t\tthis.heightStyled = \"\";\r\n\t\t\t}\r\n\r\n\t\t\tif(this.table.options.dataTree !== false && this.table.modExists(\"dataTree\") && this.table.modules.dataTree.redrawNeeded(updatedData)){\r\n\t\t\t\tthis.table.modules.dataTree.initializeRow(this);\r\n\r\n\t\t\t\tif(visible){\r\n\t\t\t\t\tthis.table.modules.dataTree.layoutRow(this);\r\n\t\t\t\t\tthis.table.rowManager.refreshActiveData(\"tree\", false, true);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\r\n\t\t\t//this.reinitialize();\r\n\r\n\t\t\tthis.table.options.rowUpdated.call(this.table, this.getComponent());\r\n\r\n\t\t\tif(this.table.options.dataChanged){\r\n\t\t\t\tthis.table.options.dataChanged.call(this.table, this.table.rowManager.getData());\r\n\t\t\t}\r\n\r\n\t\t\tresolve();\r\n\t\t});\r\n\t}\r\n\r\n\tgetData(transform){\r\n\t\tif(transform){\r\n\t\t\tif(this.table.modExists(\"accessor\")){\r\n\t\t\t\treturn this.table.modules.accessor.transformRow(this, transform);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this.data;\r\n\t}\r\n\r\n\tgetCell(column){\r\n\t\tvar match = false;\r\n\r\n\t\tcolumn = this.table.columnManager.findColumn(column);\r\n\r\n\t\tmatch = this.cells.find(function(cell){\r\n\t\t\treturn cell.column === column;\r\n\t\t});\r\n\r\n\t\treturn match;\r\n\t}\r\n\r\n\tgetCellIndex(findCell){\r\n\t\treturn this.cells.findIndex(function(cell){\r\n\t\t\treturn cell === findCell;\r\n\t\t});\r\n\t}\r\n\r\n\tfindNextEditableCell(index){\r\n\t\tvar nextCell = false;\r\n\r\n\t\tif(index < this.cells.length-1){\r\n\t\t\tfor(var i = index+1; i < this.cells.length; i++){\r\n\t\t\t\tlet cell = this.cells[i];\r\n\r\n\t\t\t\tif(cell.column.modules.edit && Helpers.elVisible(cell.getElement())){\r\n\t\t\t\t\tlet allowEdit = true;\r\n\r\n\t\t\t\t\tif(typeof cell.column.modules.edit.check == \"function\"){\r\n\t\t\t\t\t\tallowEdit = cell.column.modules.edit.check(cell.getComponent());\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif(allowEdit){\r\n\t\t\t\t\t\tnextCell = cell;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn nextCell;\r\n\t}\r\n\r\n\tfindPrevEditableCell(index){\r\n\t\tvar prevCell = false;\r\n\r\n\t\tif(index > 0){\r\n\t\t\tfor(var i = index-1; i >= 0; i--){\r\n\t\t\t\tlet cell = this.cells[i],\r\n\t\t\t\tallowEdit = true;\r\n\r\n\t\t\t\tif(cell.column.modules.edit && Helpers.elVisible(cell.getElement())){\r\n\t\t\t\t\tif(typeof cell.column.modules.edit.check == \"function\"){\r\n\t\t\t\t\t\tallowEdit = cell.column.modules.edit.check(cell.getComponent());\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif(allowEdit){\r\n\t\t\t\t\t\tprevCell = cell;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn prevCell;\r\n\t}\r\n\r\n\tgetCells(){\r\n\t\treturn this.cells;\r\n\t}\r\n\r\n\tnextRow(){\r\n\t\tvar row = this.table.rowManager.nextDisplayRow(this, true);\r\n\t\treturn row || false;\r\n\t}\r\n\r\n\tprevRow(){\r\n\t\tvar row = this.table.rowManager.prevDisplayRow(this, true);\r\n\t\treturn row || false;\r\n\t}\r\n\r\n\tmoveToRow(to, before){\r\n\t\tvar toRow = this.table.rowManager.findRow(to);\r\n\r\n\t\tif(toRow){\r\n\t\t\tthis.table.rowManager.moveRowActual(this, toRow, !before);\r\n\t\t\tthis.table.rowManager.refreshActiveData(\"display\", false, true);\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Move Error - No matching row found:\", to);\r\n\t\t}\r\n\t}\r\n\r\n\tvalidate(){\r\n\t\tvar invalid = [];\r\n\r\n\t\tthis.cells.forEach(function(cell){\r\n\t\t\tif(!cell.validate()){\r\n\t\t\t\tinvalid.push(cell.getComponent());\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn invalid.length ? invalid : true;\r\n\t}\r\n\r\n\t///////////////////// Actions /////////////////////\r\n\tdelete(){\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tvar index, rows;\r\n\r\n\t\t\tif(this.table.options.history && this.table.modExists(\"history\")){\r\n\r\n\t\t\t\tif(this.table.options.groupBy && this.table.modExists(\"groupRows\")){\r\n\t\t\t\t\trows = this.getGroup().rows\r\n\t\t\t\t\tindex = rows.indexOf(this);\r\n\r\n\t\t\t\t\tif(index){\r\n\t\t\t\t\t\tindex = rows[index-1];\r\n\t\t\t\t\t}\r\n\t\t\t\t}else{\r\n\t\t\t\t\tindex = this.table.rowManager.getRowIndex(this);\r\n\r\n\t\t\t\t\tif(index){\r\n\t\t\t\t\t\tindex = this.table.rowManager.rows[index-1];\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.table.modules.history.action(\"rowDelete\", this, {data:this.getData(), pos:!index, index:index});\r\n\t\t\t}\r\n\r\n\t\t\tthis.deleteActual();\r\n\r\n\t\t\tresolve();\r\n\t\t});\r\n\t}\r\n\r\n\tdeleteActual(blockRedraw){\r\n\t\tvar index = this.table.rowManager.getRowIndex(this);\r\n\r\n\t\tthis.detatchModules();\r\n\r\n\t\t// if(this.table.options.dataTree && this.table.modExists(\"dataTree\")){\r\n\t\t// \tthis.table.modules.dataTree.collapseRow(this, true);\r\n\t\t// }\r\n\r\n\t\t//remove any reactive data watchers from row object\r\n\t\tif(this.table.options.reactiveData && this.table.modExists(\"reactiveData\", true)){\r\n\t\t\t// this.table.modules.reactiveData.unwatchRow(this);\r\n\t\t}\r\n\r\n\t\t//remove from group\r\n\t\tif(this.modules.group){\r\n\t\t\tthis.modules.group.removeRow(this);\r\n\t\t}\r\n\r\n\t\tthis.table.rowManager.deleteRow(this, blockRedraw);\r\n\r\n\t\tthis.deleteCells();\r\n\r\n\t\tthis.initialized = false;\r\n\t\tthis.heightInitialized = false;\r\n\t\tthis.element = false;\r\n\r\n\t\tif(this.table.options.dataTree && this.table.modExists(\"dataTree\", true)){\r\n\t\t\tthis.table.modules.dataTree.rowDelete(this);\r\n\t\t}\r\n\r\n\t\t//recalc column calculations if present\r\n\t\tif(this.table.modExists(\"columnCalcs\")){\r\n\t\t\tif(this.table.options.groupBy && this.table.modExists(\"groupRows\")){\r\n\t\t\t\tthis.table.modules.columnCalcs.recalcRowGroup(this);\r\n\t\t\t}else{\r\n\t\t\t\tthis.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tdetatchModules(){\r\n\t\t//deselect row if it is selected\r\n\t\tif(this.table.modExists(\"selectRow\")){\r\n\t\t\tthis.table.modules.selectRow._deselectRow(this, true);\r\n\t\t}\r\n\r\n\t\t//cancel edit if row is currently being edited\r\n\t\tif(this.table.modExists(\"edit\")){\r\n\t\t\tif(this.table.modules.edit.currentCell.row === this){\r\n\t\t\t\tthis.table.modules.edit.cancelEdit();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(this.table.modExists(\"frozenRows\")){\r\n\t\t\tthis.table.modules.frozenRows.detachRow(this);\r\n\t\t}\r\n\t}\r\n\r\n\tdeleteCells(){\r\n\t\tvar cellCount = this.cells.length;\r\n\r\n\t\tfor(let i = 0; i < cellCount; i++){\r\n\t\t\tthis.cells[0].delete();\r\n\t\t}\r\n\t}\r\n\r\n\twipe(){\r\n\t\tthis.detatchModules();\r\n\t\tthis.deleteCells();\r\n\r\n\t\tif(this.element){\r\n\t\t\twhile(this.element.firstChild) this.element.removeChild(this.element.firstChild);\r\n\r\n\t\t\tif(this.element.parentNode){\r\n\t\t\t\tthis.element.parentNode.removeChild(this.element);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.element = false;\r\n\t\tthis.modules = {};\r\n\t}\r\n\r\n\tgetGroup(){\r\n\t\treturn this.modules.group || false;\r\n\t}\r\n\r\n\t//////////////// Object Generation /////////////////\r\n\tgetComponent(){\r\n\t\tif(!this.component){\r\n\t\t\tthis.component = new RowComponent(this);\r\n\t\t}\r\n\r\n\t\treturn this.component;\r\n\t}\r\n}","export default {\r\n\t\"avg\":function(values, data, calcParams){\r\n\t\tvar output = 0,\r\n\t\tprecision = typeof calcParams.precision !== \"undefined\" ? calcParams.precision : 2\r\n\r\n\t\tif(values.length){\r\n\t\t\toutput = values.reduce(function(sum, value){\r\n\t\t\t\treturn Number(sum) + Number(value);\r\n\t\t\t});\r\n\r\n\t\t\toutput = output / values.length;\r\n\r\n\t\t\toutput = precision !== false ? output.toFixed(precision) : output;\r\n\t\t}\r\n\r\n\t\treturn parseFloat(output).toString();\r\n\t},\r\n\t\"max\":function(values, data, calcParams){\r\n\t\tvar output = null,\r\n\t\tprecision = typeof calcParams.precision !== \"undefined\" ? calcParams.precision : false;\r\n\r\n\t\tvalues.forEach(function(value){\r\n\r\n\t\t\tvalue = Number(value);\r\n\r\n\t\t\tif(value > output || output === null){\r\n\t\t\t\toutput = value;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn output !== null ? (precision !== false ? output.toFixed(precision) : output) : \"\";\r\n\t},\r\n\t\"min\":function(values, data, calcParams){\r\n\t\tvar output = null,\r\n\t\tprecision = typeof calcParams.precision !== \"undefined\" ? calcParams.precision : false;\r\n\r\n\t\tvalues.forEach(function(value){\r\n\r\n\t\t\tvalue = Number(value);\r\n\r\n\t\t\tif(value < output || output === null){\r\n\t\t\t\toutput = value;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn output !== null ? (precision !== false ? output.toFixed(precision) : output) : \"\";\r\n\t},\r\n\t\"sum\":function(values, data, calcParams){\r\n\t\tvar output = 0,\r\n\t\tprecision = typeof calcParams.precision !== \"undefined\" ? calcParams.precision : false;\r\n\r\n\t\tif(values.length){\r\n\t\t\tvalues.forEach(function(value){\r\n\t\t\t\tvalue = Number(value);\r\n\r\n\t\t\t\toutput += !isNaN(value) ? Number(value) : 0;\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn precision !== false ? output.toFixed(precision) : output;\r\n\t},\r\n\t\"concat\":function(values, data, calcParams){\r\n\t\tvar output = 0;\r\n\r\n\t\tif(values.length){\r\n\t\t\toutput = values.reduce(function(sum, value){\r\n\t\t\t\treturn String(sum) + String(value);\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn output;\r\n\t},\r\n\t\"count\":function(values, data, calcParams){\r\n\t\tvar output = 0;\r\n\r\n\t\tif(values.length){\r\n\t\t\tvalues.forEach(function(value){\r\n\t\t\t\tif(value){\r\n\t\t\t\t\toutput ++;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn output;\r\n\t},\r\n};","import Module from '../../core/Module.js';\r\n\r\nimport CalcComponent from './CalcComponent.js';\r\n\r\nimport Cell from '../../core/cell/Cell.js';\r\nimport Column from '../../core/column/Column.js';\r\nimport Row from '../../core/row/Row.js';\r\n\r\nimport defaultCalculations from './defaults/calculations.js';\r\n\r\nclass ColumnCalcs extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.topCalcs = [];\r\n\t\tthis.botCalcs = [];\r\n\t\tthis.genColumn = false;\r\n\t\tthis.topElement = this.createElement();\r\n\t\tthis.botElement = this.createElement();\r\n\t\tthis.topRow = false;\r\n\t\tthis.botRow = false;\r\n\t\tthis.topInitialized = false;\r\n\t\tthis.botInitialized = false;\r\n\r\n\t\tthis.initialize();\r\n\t}\r\n\r\n\tcreateElement (){\r\n\t\tvar el = document.createElement(\"div\");\r\n\t\tel.classList.add(\"tabulator-calcs-holder\");\r\n\t\treturn el;\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tthis.genColumn = new Column({field:\"value\"}, this);\r\n\t}\r\n\r\n\t//dummy functions to handle being mock column manager\r\n\tregisterColumnField(){};\r\n\r\n\t//initialize column calcs\r\n\tinitializeColumn(column){\r\n\t\tvar def = column.definition\r\n\r\n\t\tvar config = {\r\n\t\t\ttopCalcParams:def.topCalcParams || {},\r\n\t\t\tbotCalcParams:def.bottomCalcParams || {},\r\n\t\t};\r\n\r\n\t\tif(def.topCalc){\r\n\r\n\t\t\tswitch(typeof def.topCalc){\r\n\t\t\t\tcase \"string\":\r\n\t\t\t\tif(ColumnCalcs.calculations[def.topCalc]){\r\n\t\t\t\t\tconfig.topCalc = ColumnCalcs.calculations[def.topCalc]\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.warn(\"Column Calc Error - No such calculation found, ignoring: \", def.topCalc);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"function\":\r\n\t\t\t\tconfig.topCalc = def.topCalc;\r\n\t\t\t\tbreak\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif(config.topCalc){\r\n\t\t\t\tcolumn.modules.columnCalcs = config;\r\n\t\t\t\tthis.topCalcs.push(column);\r\n\r\n\t\t\t\tif(this.table.options.columnCalcs != \"group\"){\r\n\t\t\t\t\tthis.initializeTopRow();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tif(def.bottomCalc){\r\n\t\t\tswitch(typeof def.bottomCalc){\r\n\t\t\t\tcase \"string\":\r\n\t\t\t\tif(ColumnCalcs.calculations[def.bottomCalc]){\r\n\t\t\t\t\tconfig.botCalc = ColumnCalcs.calculations[def.bottomCalc]\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.warn(\"Column Calc Error - No such calculation found, ignoring: \", def.bottomCalc);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"function\":\r\n\t\t\t\tconfig.botCalc = def.bottomCalc;\r\n\t\t\t\tbreak\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif(config.botCalc){\r\n\t\t\t\tcolumn.modules.columnCalcs = config;\r\n\t\t\t\tthis.botCalcs.push(column);\r\n\r\n\t\t\t\tif(this.table.options.columnCalcs != \"group\"){\r\n\t\t\t\t\tthis.initializeBottomRow();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tremoveCalcs(){\r\n\t\tvar changed = false;\r\n\r\n\t\tif(this.topInitialized){\r\n\t\t\tthis.topInitialized = false;\r\n\t\t\tthis.topElement.parentNode.removeChild(this.topElement);\r\n\t\t\tchanged = true;\r\n\t\t}\r\n\r\n\t\tif(this.botInitialized){\r\n\t\t\tthis.botInitialized = false;\r\n\t\t\tthis.table.footerManager.remove(this.botElement);\r\n\t\t\tchanged = true;\r\n\t\t}\r\n\r\n\t\tif(changed){\r\n\t\t\tthis.table.rowManager.adjustTableSize();\r\n\t\t}\r\n\t}\r\n\r\n\tinitializeTopRow(){\r\n\t\tif(!this.topInitialized){\r\n\t\t\tthis.table.columnManager.getElement().insertBefore(this.topElement, this.table.columnManager.headersElement.nextSibling);\r\n\t\t\tthis.topInitialized = true;\r\n\t\t}\r\n\t}\r\n\r\n\tinitializeBottomRow(){\r\n\t\tif(!this.botInitialized){\r\n\t\t\tthis.table.footerManager.prepend(this.botElement);\r\n\t\t\tthis.botInitialized = true;\r\n\t\t}\r\n\t}\r\n\r\n\tscrollHorizontal(left){\r\n\t\tif(this.botInitialized && this.botRow){\r\n\t\t\tthis.botRow.getElement().style.marginLeft = (-left) + \"px\";\r\n\t\t}\r\n\t}\r\n\r\n\trecalc(rows){\r\n\t\tvar data, row;\r\n\r\n\t\tif(this.topInitialized || this.botInitialized){\r\n\t\t\tdata = this.rowsToData(rows);\r\n\r\n\t\t\tif(this.topInitialized){\r\n\t\t\t\tif(this.topRow){\r\n\t\t\t\t\tthis.topRow.deleteCells();\r\n\t\t\t\t}\r\n\r\n\t\t\t\trow = this.generateRow(\"top\", this.rowsToData(rows))\r\n\t\t\t\tthis.topRow = row;\r\n\t\t\t\twhile(this.topElement.firstChild) this.topElement.removeChild(this.topElement.firstChild);\r\n\t\t\t\tthis.topElement.appendChild(row.getElement());\r\n\t\t\t\trow.initialize(true);\r\n\t\t\t}\r\n\r\n\t\t\tif(this.botInitialized){\r\n\t\t\t\tif(this.botRow){\r\n\t\t\t\t\tthis.botRow.deleteCells();\r\n\t\t\t\t}\r\n\r\n\t\t\t\trow = this.generateRow(\"bottom\", this.rowsToData(rows))\r\n\t\t\t\tthis.botRow = row;\r\n\t\t\t\twhile(this.botElement.firstChild) this.botElement.removeChild(this.botElement.firstChild);\r\n\t\t\t\tthis.botElement.appendChild(row.getElement());\r\n\t\t\t\trow.initialize(true);\r\n\t\t\t}\r\n\r\n\t\t\tthis.table.rowManager.adjustTableSize();\r\n\r\n\t\t\t//set resizable handles\r\n\t\t\tif(this.table.modExists(\"frozenColumns\")){\r\n\t\t\t\tthis.table.modules.frozenColumns.layout();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\trecalcRowGroup(row){\r\n\t\tthis.recalcGroup(this.table.modules.groupRows.getRowGroup(row));\r\n\t}\r\n\r\n\trecalcAll(){\r\n\t\tif(this.topCalcs.length || this.botCalcs.length){\r\n\t\t\tif(this.table.options.columnCalcs !== \"group\"){\r\n\t\t\t\tthis.recalc(this.table.rowManager.activeRows);\r\n\t\t\t}\r\n\r\n\t\t\tif(this.table.options.groupBy && this.table.options.columnCalcs !== \"table\"){\r\n\r\n\r\n\t\t\t\tvar groups = table.modules.groupRows.getChildGroups();\r\n\r\n\t\t\t\tgroups.forEach((group) => {\r\n\t\t\t\t\tthis.recalcGroup(group);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\trecalcGroup(group){\r\n\t\tvar data, rowData;\r\n\r\n\t\tif(group){\r\n\t\t\tif(group.calcs){\r\n\t\t\t\tif(group.calcs.bottom){\r\n\t\t\t\t\tdata = this.rowsToData(group.rows);\r\n\t\t\t\t\trowData = this.generateRowData(\"bottom\", data);\r\n\r\n\t\t\t\t\tgroup.calcs.bottom.updateData(rowData);\r\n\t\t\t\t\tgroup.calcs.bottom.reinitialize();\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(group.calcs.top){\r\n\t\t\t\t\tdata = this.rowsToData(group.rows);\r\n\t\t\t\t\trowData = this.generateRowData(\"top\", data);\r\n\r\n\t\t\t\t\tgroup.calcs.top.updateData(rowData);\r\n\t\t\t\t\tgroup.calcs.top.reinitialize();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//generate top stats row\r\n\tgenerateTopRow(rows){\r\n\t\treturn this.generateRow(\"top\", this.rowsToData(rows));\r\n\t}\r\n\t//generate bottom stats row\r\n\tgenerateBottomRow(rows){\r\n\t\treturn this.generateRow(\"bottom\", this.rowsToData(rows));\r\n\t}\r\n\r\n\trowsToData(rows){\r\n\t\tvar data = [];\r\n\r\n\t\trows.forEach((row) => {\r\n\t\t\tdata.push(row.getData());\r\n\r\n\t\t\tif(this.table.options.dataTree && this.table.options.dataTreeChildColumnCalcs){\r\n\t\t\t\tif(row.modules.dataTree.open){\r\n\t\t\t\t\tvar children = this.rowsToData(this.table.modules.dataTree.getFilteredTreeChildren(row));\r\n\t\t\t\t\tdata = data.concat(children);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn data;\r\n\t}\r\n\r\n\t//generate stats row\r\n\tgenerateRow(pos, data){\r\n\t\tvar rowData = this.generateRowData(pos, data),\r\n\t\trow;\r\n\r\n\t\tif(this.table.modExists(\"mutator\")){\r\n\t\t\tthis.table.modules.mutator.disable();\r\n\t\t}\r\n\r\n\t\trow = new Row(rowData, this, \"calc\");\r\n\r\n\t\tif(this.table.modExists(\"mutator\")){\r\n\t\t\tthis.table.modules.mutator.enable();\r\n\t\t}\r\n\r\n\t\trow.getElement().classList.add(\"tabulator-calcs\", \"tabulator-calcs-\" + pos);\r\n\r\n\t\trow.component = false;\r\n\r\n\t\trow.getComponent = () => {\r\n\t\t\tif(!this.component){\r\n\t\t\t\tthis.component = new CalcComponent(this);\r\n\t\t\t}\r\n\r\n\t\t\treturn this.component;\r\n\t\t};\r\n\r\n\t\trow.generateCells = () => {\r\n\r\n\t\t\tvar cells = [];\r\n\r\n\t\t\tthis.table.columnManager.columnsByIndex.forEach((column) => {\r\n\r\n\t\t\t\t\t//set field name of mock column\r\n\t\t\t\t\tthis.genColumn.setField(column.getField());\r\n\t\t\t\t\tthis.genColumn.hozAlign = column.hozAlign;\r\n\r\n\t\t\t\t\tif(column.definition[pos + \"CalcFormatter\"] && this.table.modExists(\"format\")){\r\n\t\t\t\t\t\tthis.genColumn.modules.format = {\r\n\t\t\t\t\t\t\tformatter: this.table.modules.format.getFormatter(column.definition[pos + \"CalcFormatter\"]),\r\n\t\t\t\t\t\t\tparams: column.definition[pos + \"CalcFormatterParams\"] || {},\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tthis.genColumn.modules.format = {\r\n\t\t\t\t\t\t\tformatter: this.table.modules.format.getFormatter(\"plaintext\"),\r\n\t\t\t\t\t\t\tparams:{}\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t//ensure css class defintion is replicated to calculation cell\r\n\t\t\t\t\tthis.genColumn.definition.cssClass = column.definition.cssClass;\r\n\r\n\t\t\t\t\t//generate cell and assign to correct column\r\n\t\t\t\t\tvar cell = new Cell(this.genColumn, row);\r\n\t\t\t\t\tcell.getElement();\r\n\t\t\t\t\tcell.column = column;\r\n\t\t\t\t\tcell.setWidth();\r\n\r\n\t\t\t\t\tcolumn.cells.push(cell);\r\n\t\t\t\t\tcells.push(cell);\r\n\r\n\t\t\t\t\tif(!column.visible){\r\n\t\t\t\t\t\tcell.hide();\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\tthis.cells = cells;\r\n\t\t};\r\n\r\n\t\treturn row;\r\n\t}\r\n\r\n\t//generate stats row\r\n\tgenerateRowData(pos, data){\r\n\t\tvar rowData = {},\r\n\t\tcalcs = pos == \"top\" ? this.topCalcs : this.botCalcs,\r\n\t\ttype = pos == \"top\" ? \"topCalc\" : \"botCalc\",\r\n\t\tparams, paramKey;\r\n\r\n\t\tcalcs.forEach(function(column){\r\n\t\t\tvar values = [];\r\n\r\n\t\t\tif(column.modules.columnCalcs && column.modules.columnCalcs[type]){\r\n\t\t\t\tdata.forEach(function(item){\r\n\t\t\t\t\tvalues.push(column.getFieldValue(item));\r\n\t\t\t\t});\r\n\r\n\t\t\t\tparamKey = type + \"Params\";\r\n\t\t\t\tparams = typeof column.modules.columnCalcs[paramKey] === \"function\" ? column.modules.columnCalcs[paramKey](values, data) : column.modules.columnCalcs[paramKey];\r\n\r\n\t\t\t\tcolumn.setFieldValue(rowData, column.modules.columnCalcs[type](values, data, params));\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn rowData;\r\n\t}\r\n\r\n\thasTopCalcs(){\r\n\t\treturn\t!!(this.topCalcs.length);\r\n\t}\r\n\r\n\thasBottomCalcs(){\r\n\t\treturn\t!!(this.botCalcs.length);\r\n\t}\r\n\r\n\t//handle table redraw\r\n\tredraw(){\r\n\t\tif(this.topRow){\r\n\t\t\tthis.topRow.normalizeHeight(true);\r\n\t\t}\r\n\t\tif(this.botRow){\r\n\t\t\tthis.botRow.normalizeHeight(true);\r\n\t\t}\r\n\t}\r\n\r\n\t//return the calculated\r\n\tgetResults(){\r\n\t\tvar results = {},\r\n\t\tgroups;\r\n\r\n\t\tif(this.table.options.groupBy && this.table.modExists(\"groupRows\")){\r\n\t\t\tgroups = this.table.modules.groupRows.getGroups(true);\r\n\r\n\t\t\tgroups.forEach((group) => {\r\n\t\t\t\tresults[group.getKey()] = this.getGroupResults(group);\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tresults = {\r\n\t\t\t\ttop: this.topRow ? this.topRow.getData() : {},\r\n\t\t\t\tbottom: this.botRow ? this.botRow.getData() : {},\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn results;\r\n\t}\r\n\r\n\t//get results from a group\r\n\tgetGroupResults(group){\r\n\t\tvar groupObj = group._getSelf(),\r\n\t\tsubGroups = group.getSubGroups(),\r\n\t\tsubGroupResults = {},\r\n\t\tresults = {};\r\n\r\n\t\tsubGroups.forEach((subgroup) => {\r\n\t\t\tsubGroupResults[subgroup.getKey()] = this.getGroupResults(subgroup);\r\n\t\t});\r\n\r\n\t\tresults = {\r\n\t\t\ttop: groupObj.calcs.top ? groupObj.calcs.top.getData() : {},\r\n\t\t\tbottom: groupObj.calcs.bottom ? groupObj.calcs.bottom.getData() : {},\r\n\t\t\tgroups: subGroupResults,\r\n\t\t}\r\n\r\n\t\treturn results;\r\n\t}\r\n}\r\n\r\nColumnCalcs.moduleName = \"columnCalcs\";\r\n\r\n//load defaults\r\nColumnCalcs.calculations = defaultCalculations;\r\n\r\nexport default ColumnCalcs;","import Module from '../../core/Module.js';\r\n\r\nimport Row from '../../core/row/Row.js';\r\n\r\nclass DataTree extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.indent = 10;\r\n\t\tthis.field = \"\";\r\n\t\tthis.collapseEl = null;\r\n\t\tthis.expandEl = null;\r\n\t\tthis.branchEl = null;\r\n\t\tthis.elementField = false;\r\n\r\n\t\tthis.startOpen = function(){};\r\n\r\n\t\tthis.displayIndex = 0;\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tvar dummyEl = null,\r\n\t\tfirstCol = this.table.columnManager.getFirstVisibileColumn(),\r\n\t\toptions = this.table.options;\r\n\r\n\t\tthis.field = options.dataTreeChildField;\r\n\t\tthis.indent = options.dataTreeChildIndent;\r\n\t\tthis.elementField = options.dataTreeElementColumn || (firstCol ? firstCol.field : false);\r\n\r\n\t\tif(options.dataTreeBranchElement){\r\n\r\n\t\t\tif(options.dataTreeBranchElement === true){\r\n\t\t\t\tthis.branchEl = document.createElement(\"div\");\r\n\t\t\t\tthis.branchEl.classList.add(\"tabulator-data-tree-branch\");\r\n\t\t\t}else{\r\n\t\t\t\tif(typeof options.dataTreeBranchElement === \"string\"){\r\n\t\t\t\t\tdummyEl = document.createElement(\"div\");\r\n\t\t\t\t\tdummyEl.innerHTML = options.dataTreeBranchElement;\r\n\t\t\t\t\tthis.branchEl = dummyEl.firstChild;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tthis.branchEl = options.dataTreeBranchElement;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(options.dataTreeCollapseElement){\r\n\t\t\tif(typeof options.dataTreeCollapseElement === \"string\"){\r\n\t\t\t\tdummyEl = document.createElement(\"div\");\r\n\t\t\t\tdummyEl.innerHTML = options.dataTreeCollapseElement;\r\n\t\t\t\tthis.collapseEl = dummyEl.firstChild;\r\n\t\t\t}else{\r\n\t\t\t\tthis.collapseEl = options.dataTreeCollapseElement;\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tthis.collapseEl = document.createElement(\"div\");\r\n\t\t\tthis.collapseEl.classList.add(\"tabulator-data-tree-control\");\r\n\t\t\tthis.collapseEl.tabIndex = 0;\r\n\t\t\tthis.collapseEl.innerHTML = \"
\";\r\n\t\t}\r\n\r\n\t\tif(options.dataTreeExpandElement){\r\n\t\t\tif(typeof options.dataTreeExpandElement === \"string\"){\r\n\t\t\t\tdummyEl = document.createElement(\"div\");\r\n\t\t\t\tdummyEl.innerHTML = options.dataTreeExpandElement;\r\n\t\t\t\tthis.expandEl = dummyEl.firstChild;\r\n\t\t\t}else{\r\n\t\t\t\tthis.expandEl = options.dataTreeExpandElement;\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tthis.expandEl = document.createElement(\"div\");\r\n\t\t\tthis.expandEl.classList.add(\"tabulator-data-tree-control\");\r\n\t\t\tthis.expandEl.tabIndex = 0;\r\n\t\t\tthis.expandEl.innerHTML = \"
\";\r\n\t\t}\r\n\r\n\r\n\t\tswitch(typeof options.dataTreeStartExpanded){\r\n\t\t\tcase \"boolean\":\r\n\t\t\tthis.startOpen = function(row, index){\r\n\t\t\t\treturn options.dataTreeStartExpanded;\r\n\t\t\t};\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"function\":\r\n\t\t\tthis.startOpen = options.dataTreeStartExpanded;\r\n\t\t\tbreak;\r\n\r\n\t\t\tdefault:\r\n\t\t\tthis.startOpen = function(row, index){\r\n\t\t\t\treturn options.dataTreeStartExpanded[index];\r\n\t\t\t};\r\n\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\tinitializeRow(row){\r\n\t\tvar childArray = row.getData()[this.field];\r\n\t\tvar isArray = Array.isArray(childArray);\r\n\r\n\t\tvar children = isArray || (!isArray && typeof childArray === \"object\" && childArray !== null);\r\n\r\n\t\tif(!children && row.modules.dataTree && row.modules.dataTree.branchEl){\r\n\t\t\trow.modules.dataTree.branchEl.parentNode.removeChild(row.modules.dataTree.branchEl);\r\n\t\t}\r\n\r\n\t\tif(!children && row.modules.dataTree && row.modules.dataTree.controlEl){\r\n\t\t\trow.modules.dataTree.controlEl.parentNode.removeChild(row.modules.dataTree.controlEl);\r\n\t\t}\r\n\r\n\t\trow.modules.dataTree = {\r\n\t\t\tindex: row.modules.dataTree ? row.modules.dataTree.index : 0,\r\n\t\t\topen: children ? (row.modules.dataTree ? row.modules.dataTree.open : this.startOpen(row.getComponent(), 0)) : false,\r\n\t\t\tcontrolEl: row.modules.dataTree && children ? row.modules.dataTree.controlEl : false,\r\n\t\t\tbranchEl: row.modules.dataTree && children ? row.modules.dataTree.branchEl : false,\r\n\t\t\tparent: row.modules.dataTree ? row.modules.dataTree.parent : false,\r\n\t\t\tchildren:children,\r\n\t\t};\r\n\t}\r\n\r\n\tlayoutRow(row){\r\n\t\tvar cell = this.elementField ? row.getCell(this.elementField) : row.getCells()[0],\r\n\t\tel = cell.getElement(),\r\n\t\tconfig = row.modules.dataTree;\r\n\r\n\t\tif(config.branchEl){\r\n\t\t\tif(config.branchEl.parentNode){\r\n\t\t\t\tconfig.branchEl.parentNode.removeChild(config.branchEl);\r\n\t\t\t}\r\n\t\t\tconfig.branchEl = false;\r\n\t\t}\r\n\r\n\t\tif(config.controlEl){\r\n\t\t\tif(config.controlEl.parentNode){\r\n\t\t\t\tconfig.controlEl.parentNode.removeChild(config.controlEl);\r\n\t\t\t}\r\n\t\t\tconfig.controlEl = false;\r\n\t\t}\r\n\r\n\t\tthis.generateControlElement(row, el);\r\n\r\n\t\trow.getElement().classList.add(\"tabulator-tree-level-\" + config.index);\r\n\r\n\t\tif(config.index){\r\n\t\t\tif(this.branchEl){\r\n\t\t\t\tconfig.branchEl = this.branchEl.cloneNode(true);\r\n\t\t\t\tel.insertBefore(config.branchEl, el.firstChild);\r\n\r\n\t\t\t\tif(this.table.rtl){\r\n\t\t\t\t\tconfig.branchEl.style.marginRight = (((config.branchEl.offsetWidth + config.branchEl.style.marginLeft) * (config.index - 1)) + (config.index * this.indent)) + \"px\";\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconfig.branchEl.style.marginLeft = (((config.branchEl.offsetWidth + config.branchEl.style.marginRight) * (config.index - 1)) + (config.index * this.indent)) + \"px\";\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\r\n\t\t\t\tif(this.table.rtl){\r\n\t\t\t\t\tel.style.paddingRight = parseInt(window.getComputedStyle(el, null).getPropertyValue('padding-right')) + (config.index * this.indent) + \"px\";\r\n\t\t\t\t}else{\r\n\t\t\t\t\tel.style.paddingLeft = parseInt(window.getComputedStyle(el, null).getPropertyValue('padding-left')) + (config.index * this.indent) + \"px\";\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tgenerateControlElement(row, el){\r\n\t\tvar config = row.modules.dataTree,\r\n\t\tel = el || row.getCells()[0].getElement(),\r\n\t\toldControl = config.controlEl;\r\n\r\n\t\tif(config.children !== false){\r\n\r\n\t\t\tif(config.open){\r\n\t\t\t\tconfig.controlEl = this.collapseEl.cloneNode(true);\r\n\t\t\t\tconfig.controlEl.addEventListener(\"click\", (e) => {\r\n\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\tthis.collapseRow(row);\r\n\t\t\t\t});\r\n\t\t\t}else{\r\n\t\t\t\tconfig.controlEl = this.expandEl.cloneNode(true);\r\n\t\t\t\tconfig.controlEl.addEventListener(\"click\", (e) => {\r\n\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\tthis.expandRow(row);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\tconfig.controlEl.addEventListener(\"mousedown\", (e) => {\r\n\t\t\t\te.stopPropagation();\r\n\t\t\t});\r\n\r\n\t\t\tif(oldControl && oldControl.parentNode === el){\r\n\t\t\t\toldControl.parentNode.replaceChild(config.controlEl,oldControl);\r\n\t\t\t}else{\r\n\t\t\t\tel.insertBefore(config.controlEl, el.firstChild);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tsetDisplayIndex (index) {\r\n\t\tthis.displayIndex = index;\r\n\t}\r\n\r\n\tgetDisplayIndex () {\r\n\t\treturn this.displayIndex;\r\n\t}\r\n\r\n\tgetRows(rows){\r\n\t\tvar output = [];\r\n\r\n\t\trows.forEach((row, i) => {\r\n\t\t\tvar config, children;\r\n\r\n\t\t\toutput.push(row);\r\n\r\n\t\t\tif(row instanceof Row){\r\n\r\n\t\t\t\trow.create();\r\n\r\n\t\t\t\tconfig = row.modules.dataTree.children;\r\n\r\n\t\t\t\tif(!config.index && config.children !== false){\r\n\t\t\t\t\tchildren = this.getChildren(row);\r\n\r\n\t\t\t\t\tchildren.forEach((child) => {\r\n\t\t\t\t\t\tchild.create();\r\n\t\t\t\t\t\toutput.push(child);\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tgetChildren(row, allChildren){\r\n\t\tvar config = row.modules.dataTree,\r\n\t\tchildren = [],\r\n\t\toutput = [];\r\n\r\n\t\tif(config.children !== false && (config.open || allChildren)){\r\n\t\t\tif(!Array.isArray(config.children)){\r\n\t\t\t\tconfig.children = this.generateChildren(row);\r\n\t\t\t}\r\n\r\n\t\t\tif(this.table.modExists(\"filter\") && this.table.options.dataTreeFilter){\r\n\t\t\t\tchildren = this.table.modules.filter.filter(config.children);\r\n\t\t\t}else{\r\n\t\t\t\tchildren = config.children;\r\n\t\t\t}\r\n\r\n\t\t\tif(this.table.modExists(\"sort\") && this.table.options.dataTreeSort){\r\n\t\t\t\tthis.table.modules.sort.sort(children);\r\n\t\t\t}\r\n\r\n\t\t\tchildren.forEach((child) => {\r\n\t\t\t\toutput.push(child);\r\n\r\n\t\t\t\tvar subChildren = this.getChildren(child);\r\n\r\n\t\t\t\tsubChildren.forEach((sub) => {\r\n\t\t\t\t\toutput.push(sub);\r\n\t\t\t\t});\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tgenerateChildren(row){\r\n\t\tvar children = [];\r\n\r\n\t\tvar childArray = row.getData()[this.field];\r\n\r\n\t\tif(!Array.isArray(childArray)){\r\n\t\t\tchildArray = [childArray];\r\n\t\t}\r\n\r\n\t\tchildArray.forEach((childData) => {\r\n\t\t\tvar childRow = new Row(childData || {}, this.table.rowManager);\r\n\r\n\t\t\tchildRow.create();\r\n\r\n\t\t\tchildRow.modules.dataTree.index = row.modules.dataTree.index + 1;\r\n\t\t\tchildRow.modules.dataTree.parent = row;\r\n\r\n\t\t\tif(childRow.modules.dataTree.children){\r\n\t\t\t\tchildRow.modules.dataTree.open = this.startOpen(childRow.getComponent(), childRow.modules.dataTree.index);\r\n\t\t\t}\r\n\t\t\tchildren.push(childRow);\r\n\t\t});\r\n\r\n\t\treturn children;\r\n\t}\r\n\r\n\texpandRow(row, silent){\r\n\t\tvar config = row.modules.dataTree;\r\n\r\n\t\tif(config.children !== false){\r\n\t\t\tconfig.open = true;\r\n\r\n\t\t\trow.reinitialize();\r\n\r\n\t\t\tthis.table.rowManager.refreshActiveData(\"tree\", false, true);\r\n\r\n\t\t\tthis.table.options.dataTreeRowExpanded(row.getComponent(), row.modules.dataTree.index);\r\n\t\t}\r\n\t}\r\n\r\n\tcollapseRow(row){\r\n\t\tvar config = row.modules.dataTree;\r\n\r\n\t\tif(config.children !== false){\r\n\t\t\tconfig.open = false;\r\n\r\n\t\t\trow.reinitialize();\r\n\r\n\t\t\tthis.table.rowManager.refreshActiveData(\"tree\", false, true);\r\n\r\n\t\t\tthis.table.options.dataTreeRowCollapsed(row.getComponent(), row.modules.dataTree.index);\r\n\t\t}\r\n\t}\r\n\r\n\ttoggleRow(row){\r\n\t\tvar config = row.modules.dataTree;\r\n\r\n\t\tif(config.children !== false){\r\n\t\t\tif(config.open){\r\n\t\t\t\tthis.collapseRow(row);\r\n\t\t\t}else{\r\n\t\t\t\tthis.expandRow(row);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tgetTreeParent(row){\r\n\t\treturn row.modules.dataTree.parent ? row.modules.dataTree.parent.getComponent() : false;\r\n\t}\r\n\r\n\tgetFilteredTreeChildren(row){\r\n\t\tvar config = row.modules.dataTree,\r\n\t\toutput = [], children;\r\n\r\n\t\tif(config.children){\r\n\r\n\t\t\tif(!Array.isArray(config.children)){\r\n\t\t\t\tconfig.children = this.generateChildren(row);\r\n\t\t\t}\r\n\r\n\t\t\tif(this.table.modExists(\"filter\") && this.table.options.dataTreeFilter){\r\n\t\t\t\tchildren = this.table.modules.filter.filter(config.children);\r\n\t\t\t}else{\r\n\t\t\t\tchildren = config.children;\r\n\t\t\t}\r\n\r\n\t\t\tchildren.forEach((childRow) => {\r\n\t\t\t\tif(childRow instanceof Row){\r\n\t\t\t\t\toutput.push(childRow);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\trowDelete(row){\r\n\t\tvar parent = row.modules.dataTree.parent,\r\n\t\tchildIndex;\r\n\r\n\t\tif(parent){\r\n\t\t\tchildIndex = this.findChildIndex(row, parent);\r\n\r\n\t\t\tif(childIndex !== false){\r\n\t\t\t\tparent.data[this.field].splice(childIndex, 1);\r\n\t\t\t}\r\n\r\n\t\t\tif(!parent.data[this.field].length){\r\n\t\t\t\tdelete parent.data[this.field];\r\n\t\t\t}\r\n\r\n\t\t\tthis.initializeRow(parent);\r\n\t\t\tthis.layoutRow(parent);\r\n\t\t}\r\n\r\n\t\tthis.table.rowManager.refreshActiveData(\"tree\", false, true);\r\n\t}\r\n\r\n\taddTreeChildRow(row, data, top, index){\r\n\t\tvar childIndex = false;\r\n\r\n\t\tif(typeof data === \"string\"){\r\n\t\t\tdata = JSON.parse(data);\r\n\t\t}\r\n\r\n\t\tif(!Array.isArray(row.data[this.field])){\r\n\t\t\trow.data[this.field] = [];\r\n\r\n\t\t\trow.modules.dataTree.open = this.startOpen(row.getComponent(), row.modules.dataTree.index);\r\n\t\t}\r\n\r\n\t\tif(typeof index !== \"undefined\"){\r\n\t\t\tchildIndex = this.findChildIndex(index, row);\r\n\r\n\t\t\tif(childIndex !== false){\r\n\t\t\t\trow.data[this.field].splice((top ? childIndex : childIndex + 1), 0, data);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(childIndex === false){\r\n\t\t\tif(top){\r\n\t\t\t\trow.data[this.field].unshift(data);\r\n\t\t\t}else{\r\n\t\t\t\trow.data[this.field].push(data);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.initializeRow(row);\r\n\t\tthis.layoutRow(row);\r\n\r\n\t\tthis.table.rowManager.refreshActiveData(\"tree\", false, true);\r\n\t}\r\n\r\n\tfindChildIndex(subject, parent){\r\n\t\tvar match = false;\r\n\r\n\t\tif(typeof subject == \"object\"){\r\n\r\n\t\t\tif(subject instanceof Row){\r\n\t\t\t\t//subject is row element\r\n\t\t\t\tmatch = subject.data;\r\n\t\t\t}else if(subject instanceof RowComponent){\r\n\t\t\t\t//subject is public row component\r\n\t\t\t\tmatch = subject._getSelf().data;\r\n\t\t\t}else if(typeof HTMLElement !== \"undefined\" && subject instanceof HTMLElement){\r\n\t\t\t\tif(parent.modules.dataTree){\r\n\t\t\t\t\tmatch = parent.modules.dataTree.children.find((childRow) => {\r\n\t\t\t\t\t\treturn childRow instanceof Row ? childRow.element === subject : false;\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\tif(match){\r\n\t\t\t\t\t\tmatch = match.data;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t}else if(typeof subject == \"undefined\" || subject === null){\r\n\t\t\tmatch = false\r\n\t\t}else{\r\n\t\t\t//subject should be treated as the index of the row\r\n\t\t\tmatch = parent.data[this.field].find((row) => {\r\n\t\t\t\treturn row.data[this.table.options.index] == subject;\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif(match){\r\n\r\n\t\t\tif(Array.isArray(parent.data[this.field])){\r\n\t\t\t\tmatch = parent.data[this.field].indexOf(match);\r\n\t\t\t}\r\n\r\n\t\t\tif(match == -1){\r\n\t\t\t\tmatch = false;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//catch all for any other type of input\r\n\r\n\t\treturn match;\r\n\t}\r\n\r\n\tgetTreeChildren(row, component, recurse){\r\n\t\tvar config = row.modules.dataTree,\r\n\t\toutput = [];\r\n\r\n\t\tif(config.children){\r\n\r\n\t\t\tif(!Array.isArray(config.children)){\r\n\t\t\t\tconfig.children = this.generateChildren(row);\r\n\t\t\t}\r\n\r\n\t\t\tconfig.children.forEach((childRow) => {\r\n\t\t\t\tif(childRow instanceof Row){\r\n\t\t\t\t\toutput.push(component ? childRow.getComponent() : childRow);\r\n\r\n\t\t\t\t\tif(recurse){\r\n\t\t\t\t\t\toutput = output.concat(this.getTreeChildren(childRow, component, recurse));\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tcheckForRestyle(cell){\r\n\t\tif(!cell.row.cells.indexOf(cell)){\r\n\t\t\tcell.row.reinitialize();\r\n\t\t}\r\n\t}\r\n\r\n\tgetChildField(){\r\n\t\treturn this.field;\r\n\t}\r\n\r\n\tredrawNeeded(data){\r\n\t\treturn (this.field ? typeof data[this.field] !== \"undefined\" : false) || (this.elementField ? typeof data[this.elementField] !== \"undefined\" : false);\r\n\t}\r\n}\r\n\r\nDataTree.moduleName = \"dataTree\";\r\n\r\nexport default DataTree;","export default function(list, options, setFileContents){\r\n\tvar delimiter = options && options.delimiter ? options.delimiter : \",\",\r\n\tfileContents = [],\r\n\theaders = [];\r\n\r\n\tlist.forEach((row) => {\r\n\t\tvar item = [];\r\n\r\n\t\tswitch(row.type){\r\n\t\t\tcase \"group\":\r\n\t\t\tconsole.warn(\"Download Warning - CSV downloader cannot process row groups\");\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"calc\":\r\n\t\t\tconsole.warn(\"Download Warning - CSV downloader cannot process column calculations\");\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"header\":\r\n\t\t\trow.columns.forEach((col, i) => {\r\n\t\t\t\tif(col && col.depth === 1){\r\n\t\t\t\t\theaders[i] = typeof col.value == \"undefined\" || col.value === null ? \"\" : ('\"' + String(col.value).split('\"').join('\"\"') + '\"');\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"row\":\r\n\t\t\trow.columns.forEach((col) => {\r\n\r\n\t\t\t\tif(col){\r\n\r\n\t\t\t\t\tswitch(typeof col.value){\r\n\t\t\t\t\t\tcase \"object\":\r\n\t\t\t\t\t\tcol.value = JSON.stringify(col.value);\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\tcase \"undefined\":\r\n\t\t\t\t\t\tcase \"null\":\r\n\t\t\t\t\t\tcol.value = \"\";\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\titem.push('\"' + String(col.value).split('\"').join('\"\"') + '\"');\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tfileContents.push(item.join(delimiter));\r\n\t\t\tbreak;\r\n\t\t}\r\n\t});\r\n\r\n\tif(headers.length){\r\n\t\tfileContents.unshift(headers.join(delimiter));\r\n\t}\r\n\r\n\tfileContents = fileContents.join(\"\\n\");\r\n\r\n\tif(options.bom){\r\n\t\tfileContents = \"\\ufeff\" + fileContents;\r\n\t}\r\n\r\n\tsetFileContents(fileContents, \"text/csv\");\r\n};","import csv from './downloaders/csv.js';\r\nimport json from './downloaders/json.js';\r\nimport pdf from './downloaders/pdf.js';\r\nimport xlsx from './downloaders/xlsx.js';\r\nimport html from './downloaders/html.js';\r\n\r\nexport default {\r\n\tcsv:csv,\r\n\tjson:json,\r\n\tpdf:pdf,\r\n\txlsx:xlsx,\r\n\thtml:html,\r\n};","export default function(list, options, setFileContents){\r\n\tvar fileContents = [];\r\n\r\n\tlist.forEach((row) => {\r\n\t\tvar item = {};\r\n\r\n\t\tswitch(row.type){\r\n\t\t\tcase \"header\":\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"group\":\r\n\t\t\tconsole.warn(\"Download Warning - JSON downloader cannot process row groups\");\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"calc\":\r\n\t\t\tconsole.warn(\"Download Warning - JSON downloader cannot process column calculations\");\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"row\":\r\n\t\t\trow.columns.forEach((col) => {\r\n\t\t\t\tif(col){\r\n\t\t\t\t\titem[col.component.getField()] = col.value;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tfileContents.push(item);\r\n\t\t\tbreak;\r\n\t\t}\r\n\t});\r\n\r\n\tfileContents = JSON.stringify(fileContents, null, '\\t');\r\n\r\n\tsetFileContents(fileContents, \"application/json\");\r\n};","export default function(list, options, setFileContents){\r\n\tvar header = [],\r\n\tbody = [],\r\n\tautoTableParams = {},\r\n\trowGroupStyles = options.rowGroupStyles || {\r\n\t\tfontStyle: \"bold\",\r\n\t\tfontSize: 12,\r\n\t\tcellPadding: 6,\r\n\t\tfillColor: 220,\r\n\t},\r\n\trowCalcStyles = options.rowCalcStyles || {\r\n\t\tfontStyle: \"bold\",\r\n\t\tfontSize: 10,\r\n\t\tcellPadding: 4,\r\n\t\tfillColor: 232,\r\n\t},\r\n\tjsPDFParams = options.jsPDF || {},\r\n\ttitle = options && options.title ? options.title : \"\";\r\n\r\n\tif(!jsPDFParams.orientation){\r\n\t\tjsPDFParams.orientation = options.orientation || \"landscape\";\r\n\t}\r\n\r\n\tif(!jsPDFParams.unit){\r\n\t\tjsPDFParams.unit = \"pt\";\r\n\t}\r\n\r\n\t//parse row list\r\n\tlist.forEach((row) => {\r\n\t\tvar item = {};\r\n\r\n\t\tswitch(row.type){\r\n\t\t\tcase \"header\":\r\n\t\t\theader.push(parseRow(row));\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"group\":\r\n\t\t\tbody.push(parseRow(row, rowGroupStyles));\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"calc\":\r\n\t\t\tbody.push(parseRow(row, rowCalcStyles));\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"row\":\r\n\t\t\tbody.push(parseRow(row));\r\n\t\t\tbreak;\r\n\t\t}\r\n\t});\r\n\r\n\tfunction parseRow(row, styles){\r\n\t\tvar rowData = [];\r\n\r\n\t\trow.columns.forEach((col) =>{\r\n\t\t\tvar cell;\r\n\r\n\t\t\tif(col){\r\n\t\t\t\tswitch(typeof col.value){\r\n\t\t\t\t\tcase \"object\":\r\n\t\t\t\t\tcol.value = JSON.stringify(col.value);\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase \"undefined\":\r\n\t\t\t\t\tcase \"null\":\r\n\t\t\t\t\tcol.value = \"\";\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tcell = {\r\n\t\t\t\t\tcontent:col.value,\r\n\t\t\t\t\tcolSpan:col.width,\r\n\t\t\t\t\trowSpan:col.height,\r\n\t\t\t\t};\r\n\r\n\t\t\t\tif(styles){\r\n\t\t\t\t\tcell.styles = styles;\r\n\t\t\t\t}\r\n\r\n\t\t\t\trowData.push(cell);\r\n\t\t\t}else{\r\n\t\t\t\trowData.push(\"\");\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn rowData;\r\n\t}\r\n\r\n\r\n\t//configure PDF\r\n\tvar doc = new jsPDF(jsPDFParams); //set document to landscape, better for most tables\r\n\r\n\tif(options && options.autoTable){\r\n\t\tif(typeof options.autoTable === \"function\"){\r\n\t\t\tautoTableParams = options.autoTable(doc) || {};\r\n\t\t}else{\r\n\t\t\tautoTableParams = options.autoTable;\r\n\t\t}\r\n\t}\r\n\r\n\tif(title){\r\n\t\tautoTableParams.addPageContent = function(data) {\r\n\t\t\tdoc.text(title, 40, 30);\r\n\t\t};\r\n\t}\r\n\r\n\tautoTableParams.head = header;\r\n\tautoTableParams.body = body;\r\n\r\n\tdoc.autoTable(autoTableParams);\r\n\r\n\tif(options && options.documentProcessing){\r\n\t\toptions.documentProcessing(doc);\r\n\t}\r\n\r\n\tsetFileContents(doc.output(\"arraybuffer\"), \"application/pdf\");\r\n};","export default function(list, options, setFileContents){\r\n\tvar self = this,\r\n\tsheetName = options.sheetName || \"Sheet1\",\r\n\tworkbook = XLSX.utils.book_new(),\r\n\toutput;\r\n\r\n\tworkbook.SheetNames = [];\r\n\tworkbook.Sheets = {};\r\n\r\n\tfunction generateSheet(){\r\n\t\tvar rows = [],\r\n\t\tmerges = [],\r\n\t\tworksheet = {},\r\n\t\trange = {s: {c:0, r:0}, e: {c:(list[0] ? list[0].columns.reduce((a, b) => a + (b && b.width ? b.width : 1), 0) : 0), r:list.length }};\r\n\r\n\t\t//parse row list\r\n\t\tlist.forEach((row, i) => {\r\n\t\t\tvar rowData = [];\r\n\r\n\t\t\trow.columns.forEach(function(col, j){\r\n\r\n\t\t\t\tif(col){\r\n\t\t\t\t\trowData.push(!(col.value instanceof Date) && typeof col.value === \"object\" ? JSON.stringify(col.value) : col.value);\r\n\r\n\t\t\t\t\tif(col.width > 1 || col.height > -1){\r\n\t\t\t\t\t\tmerges.push({s:{r:i,c:j},e:{r:i + col.height - 1,c:j + col.width - 1}});\r\n\t\t\t\t\t}\r\n\t\t\t\t}else{\r\n\t\t\t\t\trowData.push(\"\");\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\trows.push(rowData);\r\n\t\t});\r\n\r\n\r\n\t\t//convert rows to worksheet\r\n\t\tXLSX.utils.sheet_add_aoa(worksheet, rows);\r\n\r\n\t\tworksheet['!ref'] = XLSX.utils.encode_range(range);\r\n\r\n\t\tif(merges.length){\r\n\t\t\tworksheet[\"!merges\"] = merges;\r\n\t\t}\r\n\r\n\t\treturn worksheet;\r\n\t}\r\n\r\n\tif(options.sheetOnly){\r\n\t\tsetFileContents(generateSheet());\r\n\t\treturn;\r\n\t}\r\n\r\n\tif(options.sheets){\r\n\t\tfor(var sheet in options.sheets){\r\n\r\n\t\t\tif(options.sheets[sheet] === true){\r\n\t\t\t\tworkbook.SheetNames.push(sheet);\r\n\t\t\t\tworkbook.Sheets[sheet] = generateSheet();\r\n\t\t\t}else{\r\n\r\n\t\t\t\tworkbook.SheetNames.push(sheet);\r\n\r\n\t\t\t\tthis.modules.comms.send(options.sheets[sheet], \"download\", \"intercept\",{\r\n\t\t\t\t\ttype:\"xlsx\",\r\n\t\t\t\t\toptions:{sheetOnly:true},\r\n\t\t\t\t\tactive:self.active,\r\n\t\t\t\t\tintercept:function(data){\r\n\t\t\t\t\t\tworkbook.Sheets[sheet] = data;\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\t}else{\r\n\t\tworkbook.SheetNames.push(sheetName);\r\n\t\tworkbook.Sheets[sheetName] = generateSheet();\r\n\t}\r\n\r\n\tif(options.documentProcessing){\r\n\t\tworkbook = options.documentProcessing(workbook);\r\n\t}\r\n\r\n\t//convert workbook to binary array\r\n\tfunction s2ab(s) {\r\n\t\tvar buf = new ArrayBuffer(s.length);\r\n\t\tvar view = new Uint8Array(buf);\r\n\t\tfor (var i=0; i!=s.length; ++i) view[i] = s.charCodeAt(i) & 0xFF;\r\n\t\t\treturn buf;\r\n\t}\r\n\r\n\toutput = XLSX.write(workbook, {bookType:'xlsx', bookSST:true, type: 'binary'});\r\n\r\n\tsetFileContents(s2ab(output), \"application/octet-stream\");\r\n};","export default function(list, options, setFileContents){\r\n\tif(this.modExists(\"export\", true)){\r\n\t\tsetFileContents(this.modules.export.genereateHTMLTable(list), \"text/html\");\r\n\t}\r\n};","import Module from '../../core/Module.js';\r\n\r\nimport defaultDownloaders from './defaults/downloaders.js';\r\n\r\nclass Download extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\t}\r\n\r\n\t//trigger file download\r\n\tdownload(type, filename, options, range, interceptCallback){\r\n\t\tvar downloadFunc = false;\r\n\r\n\t\tfunction buildLink(data, mime){\r\n\t\t\tif(interceptCallback){\r\n\t\t\t\tif(interceptCallback === true){\r\n\t\t\t\t\tthis.triggerDownload(data, mime, type, filename, true);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tinterceptCallback(data);\r\n\t\t\t\t}\r\n\r\n\t\t\t}else{\r\n\t\t\t\tthis.triggerDownload(data, mime, type, filename);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(typeof type == \"function\"){\r\n\t\t\tdownloadFunc = type;\r\n\t\t}else{\r\n\t\t\tif(Download.downloaders[type]){\r\n\t\t\t\tdownloadFunc = Download.downloaders[type];\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Download Error - No such download type found: \", type);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(downloadFunc){\r\n\t\t\tvar list = this.generateExportList(range);\r\n\r\n\t\t\tdownloadFunc.call(this.table, list , options || {}, buildLink);\r\n\t\t}\r\n\t}\r\n\r\n\tgenerateExportList(range){\r\n\t\tvar list = this.table.modules.export.generateExportList(this.table.options.downloadConfig, false, range || this.table.options.downloadRowRange, \"download\");\r\n\r\n\t\t//assign group header formatter\r\n\t\tvar groupHeader = this.table.options.groupHeaderDownload;\r\n\r\n\t\tif(groupHeader && !Array.isArray(groupHeader)){\r\n\t\t\tgroupHeader = [groupHeader];\r\n\t\t}\r\n\r\n\t\tlist.forEach((row) => {\r\n\t\t\tvar group;\r\n\r\n\t\t\tif(row.type === \"group\"){\r\n\t\t\t\tgroup = row.columns[0];\r\n\r\n\t\t\t\tif(groupHeader && groupHeader[row.indent]){\r\n\t\t\t\t\tgroup.value = groupHeader[row.indent](group.value, row.component._group.getRowCount(), row.component._group.getData(), row.component);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn list;\r\n\t}\r\n\r\n\ttriggerDownload(data, mime, type, filename, newTab){\r\n\t\tvar element = document.createElement('a'),\r\n\t\tblob = new Blob([data],{type:mime}),\r\n\t\tfilename = filename || \"Tabulator.\" + (typeof type === \"function\" ? \"txt\" : type);\r\n\r\n\t\tblob = this.table.options.downloadReady.call(this.table, data, blob);\r\n\r\n\t\tif(blob){\r\n\r\n\t\t\tif(newTab){\r\n\t\t\t\twindow.open(window.URL.createObjectURL(blob));\r\n\t\t\t}else{\r\n\t\t\t\tif(navigator.msSaveOrOpenBlob){\r\n\t\t\t\t\tnavigator.msSaveOrOpenBlob(blob, filename);\r\n\t\t\t\t}else{\r\n\t\t\t\t\telement.setAttribute('href', window.URL.createObjectURL(blob));\r\n\r\n\t\t\t\t\t//set file title\r\n\t\t\t\t\telement.setAttribute('download', filename);\r\n\r\n\t\t\t\t\t//trigger download\r\n\t\t\t\t\telement.style.display = 'none';\r\n\t\t\t\t\tdocument.body.appendChild(element);\r\n\t\t\t\t\telement.click();\r\n\r\n\t\t\t\t\t//remove temporary link element\r\n\t\t\t\t\tdocument.body.removeChild(element);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\r\n\t\t\tif(this.table.options.downloadComplete){\r\n\t\t\t\tthis.table.options.downloadComplete();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tcommsReceived(table, action, data){\r\n\t\tswitch(action){\r\n\t\t\tcase \"intercept\":\r\n\t\t\tthis.download(data.type, \"\", data.options, data.active, data.intercept);\r\n\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n}\r\n\r\nDownload.moduleName = \"download\";\r\n\r\n//load defaults\r\nDownload.downloaders = defaultDownloaders;\r\n\r\nexport default Download;","//input element\r\nexport default function(cell, onRendered, success, cancel, editorParams){\r\n\t//create and style input\r\n\tvar cellValue = cell.getValue(),\r\n\tinput = document.createElement(\"input\");\r\n\r\n\tinput.setAttribute(\"type\", editorParams.search ? \"search\" : \"text\");\r\n\r\n\tinput.style.padding = \"4px\";\r\n\tinput.style.width = \"100%\";\r\n\tinput.style.boxSizing = \"border-box\";\r\n\r\n\tif(editorParams.elementAttributes && typeof editorParams.elementAttributes == \"object\"){\r\n\t\tfor (let key in editorParams.elementAttributes){\r\n\t\t\tif(key.charAt(0) == \"+\"){\r\n\t\t\t\tkey = key.slice(1);\r\n\t\t\t\tinput.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\r\n\t\t\t}else{\r\n\t\t\t\tinput.setAttribute(key, editorParams.elementAttributes[key]);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tinput.value = typeof cellValue !== \"undefined\" ? cellValue : \"\";\r\n\r\n\tonRendered(function(){\r\n\t\tinput.focus({preventScroll: true});\r\n\t\tinput.style.height = \"100%\";\r\n\t});\r\n\r\n\tfunction onChange(e){\r\n\t\tif(((cellValue === null || typeof cellValue === \"undefined\") && input.value !== \"\") || input.value !== cellValue){\r\n\t\t\tif(success(input.value)){\r\n\t\t\t\tcellValue = input.value; //persist value if successfully validated incase editor is used as header filter\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tcancel();\r\n\t\t}\r\n\t}\r\n\r\n\t//submit new value on blur or change\r\n\tinput.addEventListener(\"change\", onChange);\r\n\tinput.addEventListener(\"blur\", onChange);\r\n\r\n\t//submit new value on enter\r\n\tinput.addEventListener(\"keydown\", function(e){\r\n\t\tswitch(e.keyCode){\r\n\t\t\t// case 9:\r\n\t\t\tcase 13:\r\n\t\t\tonChange(e);\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 27:\r\n\t\t\tcancel();\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 35:\r\n\t\t\tcase 36:\r\n\t\t\te.stopPropagation();\r\n\t\t\tbreak;\r\n\t\t}\r\n\t});\r\n\r\n\tif(editorParams.mask){\r\n\t\tthis.table.modules.edit.maskInput(input, editorParams);\r\n\t}\r\n\r\n\treturn input;\r\n};","import input from './editors/input.js';\r\nimport textarea from './editors/textarea.js';\r\nimport number from './editors/number.js';\r\nimport range from './editors/range.js';\r\nimport select from './editors/select.js';\r\nimport autocomplete from './editors/autocomplete.js';\r\nimport star from './editors/star.js';\r\nimport progress from './editors/progress.js';\r\nimport tickCross from './editors/tickCross.js';\r\n\r\nexport default {\r\n\tinput:input,\r\n\ttextarea:textarea,\r\n number:number,\r\n range:range,\r\n\tselect:select,\r\n\tautocomplete:autocomplete,\r\n\tstar:star,\r\n\tprogress:progress,\r\n\ttickCross:tickCross,\r\n};","//resizable text area element\r\nexport default function(cell, onRendered, success, cancel, editorParams){\r\n var self = this,\r\n cellValue = cell.getValue(),\r\n vertNav = editorParams.verticalNavigation || \"hybrid\",\r\n value = String(cellValue !== null && typeof cellValue !== \"undefined\" ? cellValue : \"\"),\r\n count = (value.match(/(?:\\r\\n|\\r|\\n)/g) || []).length + 1,\r\n input = document.createElement(\"textarea\"),\r\n scrollHeight = 0;\r\n\r\n //create and style input\r\n input.style.display = \"block\";\r\n input.style.padding = \"2px\";\r\n input.style.height = \"100%\";\r\n input.style.width = \"100%\";\r\n input.style.boxSizing = \"border-box\";\r\n input.style.whiteSpace = \"pre-wrap\";\r\n input.style.resize = \"none\";\r\n\r\n if(editorParams.elementAttributes && typeof editorParams.elementAttributes == \"object\"){\r\n for (let key in editorParams.elementAttributes){\r\n if(key.charAt(0) == \"+\"){\r\n key = key.slice(1);\r\n input.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\r\n }else{\r\n input.setAttribute(key, editorParams.elementAttributes[key]);\r\n }\r\n }\r\n }\r\n\r\n input.value = value;\r\n\r\n onRendered(function(){\r\n input.focus({preventScroll: true});\r\n input.style.height = \"100%\";\r\n\r\n input.scrollHeight;\r\n input.style.height = input.scrollHeight + \"px\";\r\n cell.getRow().normalizeHeight();\r\n });\r\n\r\n function onChange(e){\r\n\r\n if(((cellValue === null || typeof cellValue === \"undefined\") && input.value !== \"\") || input.value !== cellValue){\r\n\r\n if(success(input.value)){\r\n cellValue = input.value; //persist value if successfully validated incase editor is used as header filter\r\n }\r\n\r\n setTimeout(function(){\r\n cell.getRow().normalizeHeight();\r\n },300)\r\n }else{\r\n cancel();\r\n }\r\n }\r\n\r\n //submit new value on blur or change\r\n input.addEventListener(\"change\", onChange);\r\n input.addEventListener(\"blur\", onChange);\r\n\r\n input.addEventListener(\"keyup\", function(){\r\n\r\n input.style.height = \"\";\r\n\r\n var heightNow = input.scrollHeight;\r\n\r\n input.style.height = heightNow + \"px\";\r\n\r\n if(heightNow != scrollHeight){\r\n scrollHeight = heightNow;\r\n cell.getRow().normalizeHeight();\r\n }\r\n });\r\n\r\n input.addEventListener(\"keydown\", function(e){\r\n\r\n switch(e.keyCode){\r\n case 27:\r\n cancel();\r\n break;\r\n\r\n case 38: //up arrow\r\n if(vertNav == \"editor\" || (vertNav == \"hybrid\" && input.selectionStart)){\r\n e.stopImmediatePropagation();\r\n e.stopPropagation();\r\n }\r\n\r\n break;\r\n\r\n case 40: //down arrow\r\n if(vertNav == \"editor\" || (vertNav == \"hybrid\" && input.selectionStart !== input.value.length)){\r\n e.stopImmediatePropagation();\r\n e.stopPropagation();\r\n }\r\n break;\r\n\r\n case 35:\r\n case 36:\r\n e.stopPropagation();\r\n break;\r\n }\r\n });\r\n\r\n if(editorParams.mask){\r\n this.table.modules.edit.maskInput(input, editorParams);\r\n }\r\n\r\n return input;\r\n};","//input element with type of number\r\nexport default function(cell, onRendered, success, cancel, editorParams){\r\n\tvar cellValue = cell.getValue(),\r\n\tvertNav = editorParams.verticalNavigation || \"editor\",\r\n\tinput = document.createElement(\"input\");\r\n\r\n\tinput.setAttribute(\"type\", \"number\");\r\n\r\n\tif(typeof editorParams.max != \"undefined\"){\r\n\t\tinput.setAttribute(\"max\", editorParams.max);\r\n\t}\r\n\r\n\tif(typeof editorParams.min != \"undefined\"){\r\n\t\tinput.setAttribute(\"min\", editorParams.min);\r\n\t}\r\n\r\n\tif(typeof editorParams.step != \"undefined\"){\r\n\t\tinput.setAttribute(\"step\", editorParams.step);\r\n\t}\r\n\r\n\t//create and style input\r\n\tinput.style.padding = \"4px\";\r\n\tinput.style.width = \"100%\";\r\n\tinput.style.boxSizing = \"border-box\";\r\n\r\n\tif(editorParams.elementAttributes && typeof editorParams.elementAttributes == \"object\"){\r\n\t\tfor (let key in editorParams.elementAttributes){\r\n\t\t\tif(key.charAt(0) == \"+\"){\r\n\t\t\t\tkey = key.slice(1);\r\n\t\t\t\tinput.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\r\n\t\t\t}else{\r\n\t\t\t\tinput.setAttribute(key, editorParams.elementAttributes[key]);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tinput.value = cellValue;\r\n\r\n\tvar blurFunc = function(e){\r\n\t\tonChange();\r\n\t};\r\n\r\n\tonRendered(function () {\r\n\t\t//submit new value on blur\r\n\t\tinput.removeEventListener(\"blur\", blurFunc);\r\n\r\n\t\tinput.focus({preventScroll: true});\r\n\t\tinput.style.height = \"100%\";\r\n\r\n\t\t//submit new value on blur\r\n\t\tinput.addEventListener(\"blur\", blurFunc);\r\n\t});\r\n\r\n\tfunction onChange(){\r\n\t\tvar value = input.value;\r\n\r\n\t\tif(!isNaN(value) && value !==\"\"){\r\n\t\t\tvalue = Number(value);\r\n\t\t}\r\n\r\n\t\tif(value !== cellValue){\r\n\t\t\tif(success(value)){\r\n\t\t\t\tcellValue = value; //persist value if successfully validated incase editor is used as header filter\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tcancel();\r\n\t\t}\r\n\t}\r\n\r\n\t//submit new value on enter\r\n\tinput.addEventListener(\"keydown\", function(e){\r\n\t\tswitch(e.keyCode){\r\n\t\t\tcase 13:\r\n\t\t\t// case 9:\r\n\t\t\tonChange();\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 27:\r\n\t\t\tcancel();\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 38: //up arrow\r\n\t\t\tcase 40: //down arrow\r\n\t\t\tif(vertNav == \"editor\"){\r\n\t\t\t\te.stopImmediatePropagation();\r\n\t\t\t\te.stopPropagation();\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 35:\r\n\t\t\tcase 36:\r\n\t\t\te.stopPropagation();\r\n\t\t\tbreak;\r\n\t\t}\r\n\t});\r\n\r\n\tif(editorParams.mask){\r\n\t\tthis.table.modules.edit.maskInput(input, editorParams);\r\n\t}\r\n\r\n\treturn input;\r\n};","//input element with type of number\r\nexport default function(cell, onRendered, success, cancel, editorParams){\r\n\tvar cellValue = cell.getValue(),\r\n\tinput = document.createElement(\"input\");\r\n\r\n\tinput.setAttribute(\"type\", \"range\");\r\n\r\n\tif (typeof editorParams.max != \"undefined\") {\r\n\t\tinput.setAttribute(\"max\", editorParams.max);\r\n\t}\r\n\r\n\tif (typeof editorParams.min != \"undefined\") {\r\n\t\tinput.setAttribute(\"min\", editorParams.min);\r\n\t}\r\n\r\n\tif (typeof editorParams.step != \"undefined\") {\r\n\t\tinput.setAttribute(\"step\", editorParams.step);\r\n\t}\r\n\r\n\t//create and style input\r\n\tinput.style.padding = \"4px\";\r\n\tinput.style.width = \"100%\";\r\n\tinput.style.boxSizing = \"border-box\";\r\n\r\n\tif(editorParams.elementAttributes && typeof editorParams.elementAttributes == \"object\"){\r\n\t\tfor (let key in editorParams.elementAttributes){\r\n\t\t\tif(key.charAt(0) == \"+\"){\r\n\t\t\t\tkey = key.slice(1);\r\n\t\t\t\tinput.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\r\n\t\t\t}else{\r\n\t\t\t\tinput.setAttribute(key, editorParams.elementAttributes[key]);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tinput.value = cellValue;\r\n\r\n\tonRendered(function () {\r\n\t\tinput.focus({preventScroll: true});\r\n\t\tinput.style.height = \"100%\";\r\n\t});\r\n\r\n\tfunction onChange(){\r\n\t\tvar value = input.value;\r\n\r\n\t\tif(!isNaN(value) && value !==\"\"){\r\n\t\t\tvalue = Number(value);\r\n\t\t}\r\n\r\n\t\tif(value != cellValue){\r\n\t\t\tif(success(value)){\r\n\t\t\t\tcellValue = value; //persist value if successfully validated incase editor is used as header filter\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tcancel();\r\n\t\t}\r\n\t}\r\n\r\n\t//submit new value on blur\r\n\tinput.addEventListener(\"blur\", function(e){\r\n\t\tonChange();\r\n\t});\r\n\r\n\t//submit new value on enter\r\n\tinput.addEventListener(\"keydown\", function(e){\r\n\t\tswitch(e.keyCode){\r\n\t\t\tcase 13:\r\n\t\t\t// case 9:\r\n\t\t\tonChange();\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 27:\r\n\t\t\tcancel();\r\n\t\t\tbreak;\r\n\t\t}\r\n\t});\r\n\r\n\treturn input;\r\n};","import Helpers from '../../../../core/Helpers.js';\r\n\r\n//dropdown select editor\r\nexport default function(cell, onRendered, success, cancel, editorParams){\r\n\tvar self = this,\r\n\tcellEl = cell.getElement(),\r\n\tinitialValue = cell.getValue(),\r\n\tvertNav = editorParams.verticalNavigation || \"editor\",\r\n\tinitialDisplayValue = typeof initialValue !== \"undefined\" || initialValue === null ? (Array.isArray(initialValue) ? initialValue : [initialValue]) : (typeof editorParams.defaultValue !== \"undefined\" ? editorParams.defaultValue : []),\r\n\tinput = document.createElement(\"input\"),\r\n\tlistEl = document.createElement(\"div\"),\r\n\tmultiselect = editorParams.multiselect,\r\n\tdataItems = [],\r\n\tcurrentItem = {},\r\n\tdisplayItems = [],\r\n\tcurrentItems = [],\r\n\tblurable = true,\r\n\tblockListShow = false,\r\n\tsearchWord = \"\",\r\n\tsearchWordTimeout = null;\r\n\r\n\tif(Array.isArray(editorParams) || (!Array.isArray(editorParams) && typeof editorParams === \"object\" && !editorParams.values)){\r\n\t\tconsole.warn(\"DEPRECATION WARNING - values for the select editor must now be passed into the values property of the editorParams object, not as the editorParams object\");\r\n\t\teditorParams = {values:editorParams};\r\n\t}\r\n\r\n\tfunction getUniqueColumnValues(field){\r\n\t\tvar output = {},\r\n\t\tdata = self.table.getData(),\r\n\t\tcolumn;\r\n\r\n\t\tif(field){\r\n\t\t\tcolumn = self.table.columnManager.getColumnByField(field);\r\n\t\t}else{\r\n\t\t\tcolumn = cell.getColumn()._getSelf();\r\n\t\t}\r\n\r\n\t\tif(column){\r\n\t\t\tdata.forEach(function(row){\r\n\t\t\t\tvar val = column.getFieldValue(row);\r\n\r\n\t\t\t\tif(val !== null && typeof val !== \"undefined\" && val !== \"\"){\r\n\t\t\t\t\toutput[val] = true;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"unable to find matching column to create select lookup list:\", field);\r\n\t\t}\r\n\r\n\t\treturn Object.keys(output);\r\n\t}\r\n\r\n\tfunction parseItems(inputValues, curentValues){\r\n\t\tvar dataList = [];\r\n\t\tvar displayList = [];\r\n\r\n\t\tfunction processComplexListItem(item){\r\n\t\t\tvar item = {\r\n\t\t\t\tlabel:item.label,\r\n\t\t\t\tvalue:item.value,\r\n\t\t\t\titemParams:item.itemParams,\r\n\t\t\t\telementAttributes: item.elementAttributes,\r\n\t\t\t\telement:false,\r\n\t\t\t};\r\n\r\n\t\t\t// if(item.value === curentValue || (!isNaN(parseFloat(item.value)) && !isNaN(parseFloat(item.value)) && parseFloat(item.value) === parseFloat(curentValue))){\r\n\t\t\t// \tsetCurrentItem(item);\r\n\t\t\t// }\r\n\r\n\t\t\tif(curentValues.indexOf(item.value) > -1){\r\n\t\t\t\tsetItem(item);\r\n\t\t\t}\r\n\r\n\t\t\tdataList.push(item);\r\n\t\t\tdisplayList.push(item);\r\n\r\n\t\t\treturn item;\r\n\t\t}\r\n\r\n\t\tif(typeof inputValues == \"function\"){\r\n\t\t\tinputValues = inputValues(cell);\r\n\t\t}\r\n\r\n\t\tif(Array.isArray(inputValues)){\r\n\t\t\tinputValues.forEach(function(value){\r\n\t\t\t\tvar item;\r\n\r\n\t\t\t\tif(typeof value === \"object\"){\r\n\r\n\t\t\t\t\tif(value.options){\r\n\t\t\t\t\t\titem = {\r\n\t\t\t\t\t\t\tlabel:value.label,\r\n\t\t\t\t\t\t\tgroup:true,\r\n\t\t\t\t\t\t\titemParams:value.itemParams,\r\n\t\t\t\t\t\t\telementAttributes:value.elementAttributes,\r\n\t\t\t\t\t\t\telement:false,\r\n\t\t\t\t\t\t};\r\n\r\n\t\t\t\t\t\tdisplayList.push(item);\r\n\r\n\t\t\t\t\t\tvalue.options.forEach(function(item){\r\n\t\t\t\t\t\t\tprocessComplexListItem(item);\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tprocessComplexListItem(value);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}else{\r\n\r\n\t\t\t\t\titem = {\r\n\t\t\t\t\t\tlabel:value,\r\n\t\t\t\t\t\tvalue:value,\r\n\t\t\t\t\t\telement:false,\r\n\t\t\t\t\t};\r\n\r\n\t\t\t\t\t// if(item.value === curentValue || (!isNaN(parseFloat(item.value)) && !isNaN(parseFloat(item.value)) && parseFloat(item.value) === parseFloat(curentValue))){\r\n\t\t\t\t\t// \tsetCurrentItem(item);\r\n\t\t\t\t\t// }\r\n\r\n\t\t\t\t\tif(curentValues.indexOf(item.value) > -1){\r\n\t\t\t\t\t\tsetItem(item);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tdataList.push(item);\r\n\t\t\t\t\tdisplayList.push(item);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tfor(var key in inputValues){\r\n\t\t\t\tvar item = {\r\n\t\t\t\t\tlabel:inputValues[key],\r\n\t\t\t\t\tvalue:key,\r\n\t\t\t\t\telement:false,\r\n\t\t\t\t};\r\n\r\n\t\t\t\t// if(item.value === curentValue || (!isNaN(parseFloat(item.value)) && !isNaN(parseFloat(item.value)) && parseFloat(item.value) === parseFloat(curentValue))){\r\n\t\t\t\t// \tsetCurrentItem(item);\r\n\t\t\t\t// }\r\n\r\n\t\t\t\tif(curentValues.indexOf(item.value) > -1){\r\n\t\t\t\t\tsetItem(item);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tdataList.push(item);\r\n\t\t\t\tdisplayList.push(item);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(editorParams.sortValuesList){\r\n\t\t\tdataList.sort((a, b) => {\r\n\t\t\t\treturn a.label < b.label ? -1 : (a.label > b.label ? 1 : 0);\r\n\t\t\t});\r\n\r\n\t\t\tdisplayList.sort((a, b) => {\r\n\t\t\t\treturn a.label < b.label ? -1 : (a.label > b.label ? 1 : 0);\r\n\t\t\t});\r\n\r\n\t\t\tif(editorParams.sortValuesList !== \"asc\"){\r\n\t\t\t\tdataList.reverse();\r\n\t\t\t\tdisplayList.reverse();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tdataItems = dataList;\r\n\t\tdisplayItems = displayList;\r\n\r\n\t\tfillList();\r\n\t}\r\n\r\n\tfunction fillList(){\r\n\t\twhile(listEl.firstChild) listEl.removeChild(listEl.firstChild);\r\n\r\n\t\tdisplayItems.forEach(function(item){\r\n\r\n\t\t\tvar el = item.element;\r\n\r\n\t\t\tif(!el){\r\n\t\t\t\tel = document.createElement(\"div\");\r\n\t\t\t\titem.label = editorParams.listItemFormatter ? editorParams.listItemFormatter(item.value, item.label, cell, el, item.itemParams) : item.label;\r\n\t\t\t\tif(item.group){\r\n\t\t\t\t\tel.classList.add(\"tabulator-edit-select-list-group\");\r\n\t\t\t\t\tel.tabIndex = 0;\r\n\t\t\t\t\tel.innerHTML = item.label === \"\" ? \" \" : item.label;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tel.classList.add(\"tabulator-edit-select-list-item\");\r\n\t\t\t\t\tel.tabIndex = 0;\r\n\t\t\t\t\tel.innerHTML = item.label === \"\" ? \" \" : item.label;\r\n\r\n\t\t\t\t\tel.addEventListener(\"click\", function(){\r\n\t\t\t\t\t\tblockListShow = true;\r\n\r\n\t\t\t\t\t\tsetTimeout(() => {\r\n\t\t\t\t\t\t\tblockListShow = false;\r\n\t\t\t\t\t\t}, 10);\r\n\r\n\t\t\t\t\t\t// setCurrentItem(item);\r\n\t\t\t\t\t\t// chooseItem();\r\n\t\t\t\t\t\tif(multiselect){\r\n\t\t\t\t\t\t\ttoggleItem(item);\r\n\t\t\t\t\t\t\tinput.focus();\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\tchooseItem(item);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\t// if(item === currentItem){\r\n\t\t\t\t\t// \tel.classList.add(\"active\");\r\n\t\t\t\t\t// }\r\n\r\n\t\t\t\t\tif(currentItems.indexOf(item) > -1){\r\n\t\t\t\t\t\tel.classList.add(\"active\");\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(item.elementAttributes && typeof item.elementAttributes == \"object\"){\r\n\t\t\t\t\tfor (let key in item.elementAttributes){\r\n\t\t\t\t\t\tif(key.charAt(0) == \"+\"){\r\n\t\t\t\t\t\t\tkey = key.slice(1);\r\n\t\t\t\t\t\t\tel.setAttribute(key, input.getAttribute(key) + item.elementAttributes[\"+\" + key]);\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\tel.setAttribute(key, item.elementAttributes[key]);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tel.addEventListener(\"mousedown\", function(){\r\n\t\t\t\t\tblurable = false;\r\n\r\n\t\t\t\t\tsetTimeout(function(){\r\n\t\t\t\t\t\tblurable = true;\r\n\t\t\t\t\t}, 10);\r\n\t\t\t\t});\r\n\r\n\t\t\t\titem.element = el;\r\n\r\n\r\n\t\t\t}\r\n\r\n\t\t\tlistEl.appendChild(el);\r\n\t\t});\r\n\t}\r\n\r\n\r\n\tfunction setCurrentItem(item, active){\r\n\r\n\t\tif(!multiselect && currentItem && currentItem.element){\r\n\t\t\tcurrentItem.element.classList.remove(\"active\");\r\n\t\t}\r\n\r\n\t\tif(currentItem && currentItem.element){\r\n\t\t\tcurrentItem.element.classList.remove(\"focused\");\r\n\t\t}\r\n\r\n\t\tcurrentItem = item;\r\n\r\n\t\tif(item.element){\r\n\t\t\titem.element.classList.add(\"focused\");\r\n\t\t\tif(active){\r\n\t\t\t\titem.element.classList.add(\"active\");\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(item && item.element && item.element.scrollIntoView){\r\n\t\t\titem.element.scrollIntoView({behavior: 'smooth', block: 'nearest', inline: 'start'});\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t// function chooseItem(){\r\n\t// \thideList();\r\n\r\n\t// \tif(initialValue !== currentItem.value){\r\n\t// \t\tinitialValue = currentItem.value;\r\n\t// \t\tsuccess(currentItem.value);\r\n\t// \t}else{\r\n\t// \t\tcancel();\r\n\t// \t}\r\n\t// }\r\n\r\n\tfunction setItem(item) {\r\n\t\tvar index = currentItems.indexOf(item);\r\n\r\n\t\tif(index == -1){\r\n\t\t\tcurrentItems.push(item);\r\n\t\t\tsetCurrentItem(item, true);\r\n\t\t}\r\n\r\n\t\tfillInput();\r\n\t}\r\n\r\n\tfunction unsetItem(index) {\r\n\t\tvar item = currentItems[index];\r\n\r\n\t\tif(index > -1){\r\n\t\t\tcurrentItems.splice(index, 1);\r\n\t\t\tif(item.element){\r\n\t\t\t\titem.element.classList.remove(\"active\");\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tfunction toggleItem(item) {\r\n\t\tif(!item){\r\n\t\t\titem = currentItem;\r\n\t\t}\r\n\r\n\t\tvar index = currentItems.indexOf(item);\r\n\r\n\t\tif(index > -1){\r\n\t\t\tunsetItem(index);\r\n\t\t}else{\r\n\t\t\tif(multiselect !== true && currentItems.length >= multiselect){\r\n\t\t\t\tunsetItem(0);\r\n\t\t\t}\r\n\r\n\t\t\tsetItem(item);\r\n\t\t}\r\n\r\n\t\tfillInput();\r\n\r\n\t}\r\n\r\n\tfunction chooseItem(item){\r\n\t\thideList();\r\n\r\n\t\tif(!item){\r\n\t\t\titem = currentItem;\r\n\t\t}\r\n\r\n\t\tif(item){\r\n\t\t\tinput.value = item.label;\r\n\t\t\tsuccess(item.value);\r\n\t\t}\r\n\r\n\t\tinitialDisplayValue = [item.value];\r\n\t}\r\n\r\n\r\n\tfunction chooseItems(silent){\r\n\t\tif(!silent){\r\n\t\t\thideList();\r\n\t\t}\r\n\r\n\t\tvar output = [];\r\n\r\n\t\tcurrentItems.forEach((item) => {\r\n\t\t\toutput.push(item.value);\r\n\t\t});\r\n\r\n\t\tinitialDisplayValue = output;\r\n\r\n\t\tsuccess(output);\r\n\t}\r\n\r\n\tfunction fillInput(){\r\n\t\tvar output = [];\r\n\r\n\t\tcurrentItems.forEach((item) => {\r\n\t\t\toutput.push(item.label);\r\n\t\t});\r\n\r\n\t\tinput.value = output.join(\", \");\r\n\r\n\t\tif(self.currentCell === false){\r\n\t\t\tchooseItems(true);\r\n\t\t}\r\n\t}\r\n\r\n\r\n\tfunction unsetItems() {\r\n\r\n\t\tvar len = currentItems.length;\r\n\r\n\t\tfor(let i = 0; i < len; i++){\r\n\t\t\tunsetItem(0);\r\n\t\t}\r\n\t}\r\n\r\n\tfunction cancelItem(){\r\n\t\thideList();\r\n\t\tcancel();\r\n\t}\r\n\r\n\tfunction showList(){\r\n\t\tcurrentItems = [];\r\n\r\n\t\tif(!listEl.parentNode){\r\n\t\t\tif(editorParams.values === true){\r\n\t\t\t\tparseItems(getUniqueColumnValues(), initialDisplayValue);\r\n\t\t\t}else if(typeof editorParams.values === \"string\"){\r\n\t\t\t\tparseItems(getUniqueColumnValues(editorParams.values), initialDisplayValue);\r\n\t\t\t}else{\r\n\t\t\t\tparseItems(editorParams.values || [], initialDisplayValue);\r\n\t\t\t}\r\n\r\n\r\n\t\t\tvar offset = Helpers.elOffset(cellEl);\r\n\r\n\t\t\tlistEl.style.minWidth = cellEl.offsetWidth + \"px\";\r\n\r\n\t\t\tlistEl.style.top = (offset.top + cellEl.offsetHeight) + \"px\";\r\n\t\t\tlistEl.style.left = offset.left + \"px\";\r\n\r\n\r\n\t\t\tlistEl.addEventListener(\"mousedown\", function(e){\r\n\t\t\t\tblurable = false;\r\n\r\n\t\t\t\tsetTimeout(function(){\r\n\t\t\t\t\tblurable = true;\r\n\t\t\t\t}, 10);\r\n\t\t\t});\r\n\r\n\t\t\tdocument.body.appendChild(listEl);\r\n\t\t}\r\n\t}\r\n\r\n\tfunction hideList(){\r\n\t\tif(listEl.parentNode){\r\n\t\t\tlistEl.parentNode.removeChild(listEl);\r\n\t\t}\r\n\r\n\t\tremoveScrollListener();\r\n\t}\r\n\r\n\tfunction removeScrollListener() {\r\n\t\tself.table.rowManager.element.removeEventListener(\"scroll\", cancelItem);\r\n\t}\r\n\r\n\tfunction scrollTovalue(char){\r\n\r\n\t\tclearTimeout(searchWordTimeout);\r\n\r\n\t\tvar character = String.fromCharCode(event.keyCode).toLowerCase();\r\n\t\tsearchWord += character.toLowerCase();\r\n\r\n\t\tvar match = dataItems.find((item) => {\r\n\t\t\treturn typeof item.label !== \"undefined\" && item.label.toLowerCase().startsWith(searchWord);\r\n\t\t});\r\n\r\n\t\tif(match){\r\n\t\t\tsetCurrentItem(match, !multiselect);\r\n\t\t}\r\n\r\n\t\tsearchWordTimeout = setTimeout(() => {\r\n\t\t\tsearchWord = \"\";\r\n\t\t}, 800)\r\n\t}\r\n\r\n\t//style input\r\n\tinput.setAttribute(\"type\", \"text\");\r\n\r\n\tinput.style.padding = \"4px\";\r\n\tinput.style.width = \"100%\";\r\n\tinput.style.boxSizing = \"border-box\";\r\n\tinput.style.cursor = \"default\";\r\n\tinput.readOnly = (this.currentCell != false);\r\n\r\n\tif(editorParams.elementAttributes && typeof editorParams.elementAttributes == \"object\"){\r\n\t\tfor (let key in editorParams.elementAttributes){\r\n\t\t\tif(key.charAt(0) == \"+\"){\r\n\t\t\t\tkey = key.slice(1);\r\n\t\t\t\tinput.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\r\n\t\t\t}else{\r\n\t\t\t\tinput.setAttribute(key, editorParams.elementAttributes[key]);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tinput.value = typeof initialValue !== \"undefined\" || initialValue === null ? initialValue : \"\";\r\n\r\n\t// if(editorParams.values === true){\r\n\t// \tparseItems(getUniqueColumnValues(), initialValue);\r\n\t// }else if(typeof editorParams.values === \"string\"){\r\n\t// \tparseItems(getUniqueColumnValues(editorParams.values), initialValue);\r\n\t// }else{\r\n\t// \tparseItems(editorParams.values || [], initialValue);\r\n\t// }\r\n\r\n\tinput.addEventListener(\"search\", function(e){\r\n\t\tif(!input.value){\r\n\t\t\tunsetItems();\r\n\t\t\tchooseItems();\r\n\t\t}\r\n\t});\r\n\r\n\t//allow key based navigation\r\n\tinput.addEventListener(\"keydown\", function(e){\r\n\t\tvar index;\r\n\r\n\t\tswitch(e.keyCode){\r\n\t\t\tcase 38: //up arrow\r\n\t\t\tindex = dataItems.indexOf(currentItem);\r\n\r\n\t\t\tif(vertNav == \"editor\" || (vertNav == \"hybrid\" && index)){\r\n\t\t\t\te.stopImmediatePropagation();\r\n\t\t\t\te.stopPropagation();\r\n\t\t\t\te.preventDefault();\r\n\r\n\t\t\t\tif(index > 0){\r\n\t\t\t\t\tsetCurrentItem(dataItems[index - 1], !multiselect);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 40: //down arrow\r\n\t\t\tindex = dataItems.indexOf(currentItem);\r\n\r\n\t\t\tif(vertNav == \"editor\" || (vertNav == \"hybrid\" && index < dataItems.length - 1)){\r\n\t\t\t\te.stopImmediatePropagation();\r\n\t\t\t\te.stopPropagation();\r\n\t\t\t\te.preventDefault();\r\n\r\n\t\t\t\tif(index < dataItems.length - 1){\r\n\t\t\t\t\tif(index == -1){\r\n\t\t\t\t\t\tsetCurrentItem(dataItems[0], !multiselect);\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tsetCurrentItem(dataItems[index + 1], !multiselect);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 37: //left arrow\r\n\t\t\tcase 39: //right arrow\r\n\t\t\te.stopImmediatePropagation();\r\n\t\t\te.stopPropagation();\r\n\t\t\te.preventDefault();\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 13: //enter\r\n\t\t\t// chooseItem();\r\n\r\n\t\t\tif(multiselect){\r\n\t\t\t\ttoggleItem();\r\n\t\t\t}else{\r\n\t\t\t\tchooseItem();\r\n\t\t\t}\r\n\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 27: //escape\r\n\t\t\tcancelItem();\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 9: //tab\r\n\t\t\tbreak;\r\n\r\n\t\t\tdefault:\r\n\t\t\tif(self.currentCell === false){\r\n\t\t\t\te.preventDefault();\r\n\t\t\t}\r\n\r\n\t\t\tif(e.keyCode >= 38 && e.keyCode <= 90){\r\n\t\t\t\tscrollTovalue(e.keyCode);\r\n\t\t\t}\r\n\t\t}\r\n\t});\r\n\r\n\tinput.addEventListener(\"blur\", function(e){\r\n\t\tif(blurable){\r\n\t\t\tif(multiselect){\r\n\t\t\t\tchooseItems();\r\n\t\t\t}else{\r\n\t\t\t\tcancelItem();\r\n\t\t\t}\r\n\t\t}\r\n\t});\r\n\r\n\tinput.addEventListener(\"focus\", function(e){\r\n\t\tif(!blockListShow){\r\n\t\t\tshowList();\r\n\t\t}\r\n\t});\r\n\r\n\t//style list element\r\n\tlistEl = document.createElement(\"div\");\r\n\tlistEl.classList.add(\"tabulator-edit-select-list\");\r\n\r\n\tonRendered(function(){\r\n\t\tinput.style.height = \"100%\";\r\n\t\tinput.focus({preventScroll: true});\r\n\t});\r\n\r\n\tsetTimeout(() => {\r\n\t\tthis.table.rowManager.element.addEventListener(\"scroll\", cancelItem);\r\n\t}, 10);\r\n\r\n\treturn input;\r\n};","import Helpers from '../../../../core/Helpers.js';\r\n\r\n//autocomplete\r\nexport default function(cell, onRendered, success, cancel, editorParams){\r\n\tvar self = this,\r\n\tcellEl = cell.getElement(),\r\n\tinitialValue = cell.getValue(),\r\n\tvertNav = editorParams.verticalNavigation || \"editor\",\r\n\tinitialDisplayValue = typeof initialValue !== \"undefined\" || initialValue === null ? initialValue : (typeof editorParams.defaultValue !== \"undefined\" ? editorParams.defaultValue : \"\"),\r\n\tinput = document.createElement(\"input\"),\r\n\tlistEl = document.createElement(\"div\"),\r\n\tallItems = [],\r\n\tdisplayItems = [],\r\n\tvalues = [],\r\n\tcurrentItem = false,\r\n\tblurable = true,\r\n\tuniqueColumnValues = false;\r\n\r\n\t//style input\r\n\tinput.setAttribute(\"type\", \"search\");\r\n\r\n\tinput.style.padding = \"4px\";\r\n\tinput.style.width = \"100%\";\r\n\tinput.style.boxSizing = \"border-box\";\r\n\r\n\tif(editorParams.elementAttributes && typeof editorParams.elementAttributes == \"object\"){\r\n\t\tfor (let key in editorParams.elementAttributes){\r\n\t\t\tif(key.charAt(0) == \"+\"){\r\n\t\t\t\tkey = key.slice(1);\r\n\t\t\t\tinput.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\r\n\t\t\t}else{\r\n\t\t\t\tinput.setAttribute(key, editorParams.elementAttributes[key]);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//style list element\r\n\tlistEl.classList.add(\"tabulator-edit-select-list\");\r\n\r\n\tlistEl.addEventListener(\"mousedown\", function(e){\r\n\t\tblurable = false;\r\n\r\n\t\tsetTimeout(function(){\r\n\t\t\tblurable = true;\r\n\t\t}, 10);\r\n\t});\r\n\r\n\r\n\tfunction genUniqueColumnValues(){\r\n\t\tif(editorParams.values === true){\r\n\t\t\tuniqueColumnValues = getUniqueColumnValues();\r\n\t\t}else if(typeof editorParams.values === \"string\"){\r\n\t\t\tuniqueColumnValues = getUniqueColumnValues(editorParams.values);\r\n\t\t}\r\n\t}\r\n\r\n\tfunction getUniqueColumnValues(field){\r\n\t\tvar output = {},\r\n\t\tdata = self.table.getData(),\r\n\t\tcolumn;\r\n\r\n\t\tif(field){\r\n\t\t\tcolumn = self.table.columnManager.getColumnByField(field);\r\n\t\t}else{\r\n\t\t\tcolumn = cell.getColumn()._getSelf();\r\n\t\t}\r\n\r\n\t\tif(column){\r\n\t\t\tdata.forEach(function(row){\r\n\t\t\t\tvar val = column.getFieldValue(row);\r\n\r\n\t\t\t\tif(val !== null && typeof val !== \"undefined\" && val !== \"\"){\r\n\t\t\t\t\toutput[val] = true;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tif(editorParams.sortValuesList){\r\n\t\t\t\tif(editorParams.sortValuesList == \"asc\"){\r\n\t\t\t\t\toutput = Object.keys(output).sort();\r\n\t\t\t\t}else{\r\n\t\t\t\t\toutput = Object.keys(output).sort().reverse();\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\toutput = Object.keys(output);\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"unable to find matching column to create autocomplete lookup list:\", field);\r\n\t\t}\r\n\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tfunction filterList(term, intialLoad){\r\n\t\tvar matches = [],\r\n\t\tvalues, items, searchEl;\r\n\r\n\t\t//lookup base values list\r\n\t\tif(uniqueColumnValues){\r\n\t\t\tvalues = uniqueColumnValues;\r\n\t\t}else{\r\n\t\t\tvalues = editorParams.values || [];\r\n\t\t}\r\n\r\n\t\tif(editorParams.searchFunc){\r\n\t\t\tmatches = editorParams.searchFunc(term, values);\r\n\r\n\t\t\tif(matches instanceof Promise){\r\n\r\n\t\t\t\taddNotice(typeof editorParams.searchingPlaceholder !== \"undefined\" ? editorParams.searchingPlaceholder : \"Searching...\");\r\n\r\n\t\t\t\tmatches.then((result) => {\r\n\t\t\t\t\tfillListIfNotEmpty(parseItems(result), intialLoad);\r\n\t\t\t\t}).catch((err) => {\r\n\t\t\t\t\tconsole.err(\"error in autocomplete search promise:\", err);\r\n\t\t\t\t});\r\n\r\n\t\t\t}else{\r\n\t\t\t\tfillListIfNotEmpty(parseItems(matches), intialLoad);\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\titems = parseItems(values);\r\n\r\n\t\t\tif(term === \"\"){\r\n\t\t\t\tif(editorParams.showListOnEmpty){\r\n\t\t\t\t\tmatches = items;\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\titems.forEach(function(item){\r\n\t\t\t\t\tif(item.value !== null || typeof item.value !== \"undefined\"){\r\n\t\t\t\t\t\tif(String(item.value).toLowerCase().indexOf(String(term).toLowerCase()) > -1 || String(item.title).toLowerCase().indexOf(String(term).toLowerCase()) > -1){\r\n\t\t\t\t\t\t\tmatches.push(item);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\tfillListIfNotEmpty(matches, intialLoad);\r\n\t\t}\r\n\t}\r\n\r\n\tfunction addNotice(notice){\r\n\t\tvar searchEl = document.createElement(\"div\");\r\n\r\n\t\tclearList();\r\n\r\n\t\tif(notice !== false){\r\n\t\t\tsearchEl.classList.add(\"tabulator-edit-select-list-notice\");\r\n\t\t\tsearchEl.tabIndex = 0;\r\n\r\n\t\t\tif(notice instanceof Node){\r\n\t\t\t\tsearchEl.appendChild(notice);\r\n\t\t\t}else{\r\n\t\t\t\tsearchEl.innerHTML = notice;\r\n\t\t\t}\r\n\r\n\t\t\tlistEl.appendChild(searchEl);\r\n\t\t}\r\n\t}\r\n\r\n\tfunction parseItems(inputValues){\r\n\t\tvar itemList = [];\r\n\r\n\t\tif(Array.isArray(inputValues)){\r\n\t\t\tinputValues.forEach(function(value){\r\n\r\n\t\t\t\tvar item = {};\r\n\r\n\t\t\t\tif(typeof value === \"object\"){\r\n\t\t\t\t\titem.title = editorParams.listItemFormatter ? editorParams.listItemFormatter(value.value, value.label) : value.label;\r\n\t\t\t\t\titem.value = value.value;\r\n\t\t\t\t}else{\r\n\t\t\t\t\titem.title = editorParams.listItemFormatter ? editorParams.listItemFormatter(value, value) : value;\r\n\t\t\t\t\titem.value = value;\r\n\t\t\t\t}\r\n\r\n\t\t\t\titemList.push(item);\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tfor(var key in inputValues){\r\n\t\t\t\tvar item = {\r\n\t\t\t\t\ttitle:editorParams.listItemFormatter ? editorParams.listItemFormatter(key, inputValues[key]) : inputValues[key],\r\n\t\t\t\t\tvalue:key,\r\n\t\t\t\t};\r\n\r\n\t\t\t\titemList.push(item);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn itemList;\r\n\t}\r\n\r\n\tfunction clearList(){\r\n\t\twhile(listEl.firstChild) listEl.removeChild(listEl.firstChild);\r\n\t}\r\n\r\n\tfunction fillListIfNotEmpty(items, intialLoad){\r\n\t\tif(items.length){\r\n\t\t\tfillList(items, intialLoad);\r\n\t\t}else{\r\n\t\t\tif(editorParams.emptyPlaceholder){\r\n\t\t\t\taddNotice(editorParams.emptyPlaceholder);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tfunction fillList(items, intialLoad){\r\n\t\tvar current = false;\r\n\r\n\t\tclearList();\r\n\r\n\t\tdisplayItems = items;\r\n\r\n\t\tdisplayItems.forEach(function(item){\r\n\t\t\tvar el = item.element;\r\n\r\n\t\t\tif(!el){\r\n\t\t\t\tel = document.createElement(\"div\");\r\n\t\t\t\tel.classList.add(\"tabulator-edit-select-list-item\");\r\n\t\t\t\tel.tabIndex = 0;\r\n\t\t\t\tel.innerHTML = item.title;\r\n\r\n\t\t\t\tel.addEventListener(\"click\", function(e){\r\n\t\t\t\t\tsetCurrentItem(item);\r\n\t\t\t\t\tchooseItem();\r\n\t\t\t\t});\r\n\r\n\t\t\t\tel.addEventListener(\"mousedown\", function(e){\r\n\t\t\t\t\tblurable = false;\r\n\r\n\t\t\t\t\tsetTimeout(function(){\r\n\t\t\t\t\t\tblurable = true;\r\n\t\t\t\t\t}, 10);\r\n\t\t\t\t});\r\n\r\n\t\t\t\titem.element = el;\r\n\r\n\t\t\t\tif(intialLoad && item.value == initialValue){\r\n\t\t\t\t\tinput.value = item.title;\r\n\t\t\t\t\titem.element.classList.add(\"active\");\r\n\t\t\t\t\tcurrent = true;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(item === currentItem){\r\n\t\t\t\t\titem.element.classList.add(\"active\");\r\n\t\t\t\t\tcurrent = true;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tlistEl.appendChild(el);\r\n\t\t});\r\n\r\n\t\tif(!current){\r\n\t\t\tsetCurrentItem(false);\r\n\t\t}\r\n\t}\r\n\r\n\tfunction chooseItem(){\r\n\t\thideList();\r\n\r\n\t\tif(currentItem){\r\n\t\t\tif(initialValue !== currentItem.value){\r\n\t\t\t\tinitialValue = currentItem.value;\r\n\t\t\t\tinput.value = currentItem.title;\r\n\t\t\t\tsuccess(currentItem.value);\r\n\t\t\t}else{\r\n\t\t\t\tcancel();\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tif(editorParams.freetext){\r\n\t\t\t\tinitialValue = input.value;\r\n\t\t\t\tsuccess(input.value);\r\n\t\t\t}else{\r\n\t\t\t\tif(editorParams.allowEmpty && input.value === \"\"){\r\n\t\t\t\t\tinitialValue = input.value;\r\n\t\t\t\t\tsuccess(input.value);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tcancel();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tfunction showList(){\r\n\t\tif(!listEl.parentNode){\r\n\r\n\t\t\tconsole.log(\"show\", initialDisplayValue)\r\n\t\t\twhile(listEl.firstChild) listEl.removeChild(listEl.firstChild);\r\n\r\n\t\t\tvar offset = Helpers.elOffset(cellEl);\r\n\r\n\t\t\tlistEl.style.minWidth = cellEl.offsetWidth + \"px\";\r\n\r\n\t\t\tlistEl.style.top = (offset.top + cellEl.offsetHeight) + \"px\";\r\n\t\t\tlistEl.style.left = offset.left + \"px\";\r\n\t\t\tdocument.body.appendChild(listEl);\r\n\t\t}\r\n\t}\r\n\r\n\tfunction setCurrentItem(item, showInputValue){\r\n\t\tif(currentItem && currentItem.element){\r\n\t\t\tcurrentItem.element.classList.remove(\"active\");\r\n\t\t}\r\n\r\n\t\tcurrentItem = item;\r\n\r\n\t\tif(item && item.element){\r\n\t\t\titem.element.classList.add(\"active\");\r\n\t\t}\r\n\r\n\t\tif(item && item.element && item.element.scrollIntoView){\r\n\t\t\titem.element.scrollIntoView({behavior: 'smooth', block: 'nearest', inline: 'start'});\r\n\t\t}\r\n\t}\r\n\r\n\tfunction hideList(){\r\n\t\tif(listEl.parentNode){\r\n\t\t\tlistEl.parentNode.removeChild(listEl);\r\n\t\t}\r\n\r\n\t\tremoveScrollListener();\r\n\t}\r\n\r\n\r\n\tfunction cancelItem(){\r\n\t\thideList();\r\n\t\tcancel();\r\n\t}\r\n\r\n\tfunction removeScrollListener() {\r\n\t\tself.table.rowManager.element.removeEventListener(\"scroll\", cancelItem);\r\n\t}\r\n\r\n\t//allow key based navigation\r\n\tinput.addEventListener(\"keydown\", function(e){\r\n\t\tvar index;\r\n\r\n\t\tswitch(e.keyCode){\r\n\t\t\tcase 38: //up arrow\r\n\t\t\tindex = displayItems.indexOf(currentItem);\r\n\r\n\t\t\tif(vertNav == \"editor\" || (vertNav == \"hybrid\" && index)){\r\n\t\t\t\te.stopImmediatePropagation();\r\n\t\t\t\te.stopPropagation();\r\n\t\t\t\te.preventDefault();\r\n\r\n\t\t\t\tif(index > 0){\r\n\t\t\t\t\tsetCurrentItem(displayItems[index - 1]);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tsetCurrentItem(false);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 40: //down arrow\r\n\r\n\t\t\tindex = displayItems.indexOf(currentItem);\r\n\r\n\t\t\tif(vertNav == \"editor\" || (vertNav == \"hybrid\" && index < displayItems.length - 1)){\r\n\r\n\t\t\t\te.stopImmediatePropagation();\r\n\t\t\t\te.stopPropagation();\r\n\t\t\t\te.preventDefault();\r\n\r\n\t\t\t\tif(index < displayItems.length - 1){\r\n\t\t\t\t\tif(index == -1){\r\n\t\t\t\t\t\tsetCurrentItem(displayItems[0]);\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tsetCurrentItem(displayItems[index + 1]);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\r\n\r\n\t\t\tcase 37: //left arrow\r\n\t\t\tcase 39: //right arrow\r\n\t\t\te.stopImmediatePropagation();\r\n\t\t\te.stopPropagation();\r\n\t\t\t// e.preventDefault();\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 13: //enter\r\n\t\t\tchooseItem();\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 27: //escape\r\n\t\t\tcancelItem();\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 36: //home\r\n\t\t\tcase 35: //end\r\n\t\t\t//prevent table navigation while using input element\r\n\t\t\te.stopImmediatePropagation();\r\n\t\t\tbreak;\r\n\t\t}\r\n\t});\r\n\r\n\tinput.addEventListener(\"keyup\", function(e){\r\n\r\n\t\tswitch(e.keyCode){\r\n\t\t\tcase 38: //up arrow\r\n\t\t\tcase 37: //left arrow\r\n\t\t\tcase 39: //up arrow\r\n\t\t\tcase 40: //right arrow\r\n\t\t\tcase 13: //enter\r\n\t\t\tcase 27: //escape\r\n\t\t\tbreak;\r\n\r\n\t\t\tdefault:\r\n\t\t\tfilterList(input.value);\r\n\t\t}\r\n\r\n\t});\r\n\r\n\tinput.addEventListener(\"search\", function(e){\r\n\t\tfilterList(input.value);\r\n\t});\r\n\r\n\tinput.addEventListener(\"blur\", function(e){\r\n\t\tif(blurable){\r\n\t\t\tchooseItem();\r\n\t\t}\r\n\t});\r\n\r\n\tinput.addEventListener(\"focus\", function(e){\r\n\t\tvar value = initialDisplayValue;\r\n\t\tgenUniqueColumnValues();\r\n\t\tshowList();\r\n\t\tinput.value = value;\r\n\t\tfilterList(value, true);\r\n\t});\r\n\r\n\r\n\tonRendered(function(){\r\n\t\tinput.style.height = \"100%\";\r\n\t\tinput.focus({preventScroll: true});\r\n\t});\r\n\r\n\tif(editorParams.mask){\r\n\t\tthis.table.modules.edit.maskInput(input, editorParams);\r\n\t}\r\n\r\n\tsetTimeout(() => {\r\n\t\tthis.table.rowManager.element.addEventListener(\"scroll\", cancelItem);\r\n\t}, 10);\r\n\r\n\tgenUniqueColumnValues();\r\n\tinput.value = initialDisplayValue;\r\n\tfilterList(initialDisplayValue, true);\r\n\r\n\treturn input;\r\n};","//star rating\r\nexport default function(cell, onRendered, success, cancel, editorParams){\r\n\tvar self = this,\r\n\telement = cell.getElement(),\r\n\tvalue = cell.getValue(),\r\n\tmaxStars = element.getElementsByTagName(\"svg\").length || 5,\r\n\tsize = element.getElementsByTagName(\"svg\")[0] ? element.getElementsByTagName(\"svg\")[0].getAttribute(\"width\") : 14,\r\n\tstars = [],\r\n\tstarsHolder = document.createElement(\"div\"),\r\n\tstar = document.createElementNS('http://www.w3.org/2000/svg', \"svg\");\r\n\r\n\r\n\t//change star type\r\n\tfunction starChange(val){\r\n\t\tstars.forEach(function(star, i){\r\n\t\t\tif(i < val){\r\n\t\t\t\tif(self.table.browser == \"ie\"){\r\n\t\t\t\t\tstar.setAttribute(\"class\", \"tabulator-star-active\");\r\n\t\t\t\t}else{\r\n\t\t\t\t\tstar.classList.replace(\"tabulator-star-inactive\", \"tabulator-star-active\");\r\n\t\t\t\t}\r\n\r\n\t\t\t\tstar.innerHTML = '';\r\n\t\t\t}else{\r\n\t\t\t\tif(self.table.browser == \"ie\"){\r\n\t\t\t\t\tstar.setAttribute(\"class\", \"tabulator-star-inactive\");\r\n\t\t\t\t}else{\r\n\t\t\t\t\tstar.classList.replace(\"tabulator-star-active\", \"tabulator-star-inactive\");\r\n\t\t\t\t}\r\n\r\n\t\t\t\tstar.innerHTML = '';\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t//build stars\r\n\tfunction buildStar(i){\r\n\r\n\t\tvar starHolder = document.createElement(\"span\");\r\n\t\tvar nextStar = star.cloneNode(true);\r\n\r\n\t\tstars.push(nextStar);\r\n\r\n\t\tstarHolder.addEventListener(\"mouseenter\", function(e){\r\n\t\t\te.stopPropagation();\r\n\t\t\te.stopImmediatePropagation();\r\n\t\t\tstarChange(i);\r\n\t\t});\r\n\r\n\t\tstarHolder.addEventListener(\"mousemove\", function(e){\r\n\t\t\te.stopPropagation();\r\n\t\t\te.stopImmediatePropagation();\r\n\t\t});\r\n\r\n\t\tstarHolder.addEventListener(\"click\", function(e){\r\n\t\t\te.stopPropagation();\r\n\t\t\te.stopImmediatePropagation();\r\n\t\t\tsuccess(i);\r\n\t\t\telement.blur();\r\n\t\t});\r\n\r\n\t\tstarHolder.appendChild(nextStar);\r\n\t\tstarsHolder.appendChild(starHolder);\r\n\r\n\t}\r\n\r\n\t//handle keyboard navigation value change\r\n\tfunction changeValue(val){\r\n\t\tvalue = val;\r\n\t\tstarChange(val);\r\n\t}\r\n\r\n\t//style cell\r\n\telement.style.whiteSpace = \"nowrap\";\r\n\telement.style.overflow = \"hidden\";\r\n\telement.style.textOverflow = \"ellipsis\";\r\n\r\n\t//style holding element\r\n\tstarsHolder.style.verticalAlign = \"middle\";\r\n\tstarsHolder.style.display = \"inline-block\";\r\n\tstarsHolder.style.padding = \"4px\";\r\n\r\n\t//style star\r\n\tstar.setAttribute(\"width\", size);\r\n\tstar.setAttribute(\"height\", size);\r\n\tstar.setAttribute(\"viewBox\", \"0 0 512 512\");\r\n\tstar.setAttribute(\"xml:space\", \"preserve\");\r\n\tstar.style.padding = \"0 1px\";\r\n\r\n\tif(editorParams.elementAttributes && typeof editorParams.elementAttributes == \"object\"){\r\n\t\tfor (let key in editorParams.elementAttributes){\r\n\t\t\tif(key.charAt(0) == \"+\"){\r\n\t\t\t\tkey = key.slice(1);\r\n\t\t\t\tstarsHolder.setAttribute(key, starsHolder.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\r\n\t\t\t}else{\r\n\t\t\t\tstarsHolder.setAttribute(key, editorParams.elementAttributes[key]);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//create correct number of stars\r\n\tfor(var i=1;i<= maxStars;i++){\r\n\t\tbuildStar(i);\r\n\t}\r\n\r\n\t//ensure value does not exceed number of stars\r\n\tvalue = Math.min(parseInt(value), maxStars);\r\n\r\n\t// set initial styling of stars\r\n\tstarChange(value);\r\n\r\n\tstarsHolder.addEventListener(\"mousemove\", function(e){\r\n\t\tstarChange(0);\r\n\t});\r\n\r\n\tstarsHolder.addEventListener(\"click\", function(e){\r\n\t\tsuccess(0);\r\n\t});\r\n\r\n\telement.addEventListener(\"blur\", function(e){\r\n\t\tcancel();\r\n\t});\r\n\r\n\t//allow key based navigation\r\n\telement.addEventListener(\"keydown\", function(e){\r\n\t\tswitch(e.keyCode){\r\n\t\t\tcase 39: //right arrow\r\n\t\t\tchangeValue(value + 1);\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 37: //left arrow\r\n\t\t\tchangeValue(value - 1);\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 13: //enter\r\n\t\t\tsuccess(value);\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 27: //escape\r\n\t\t\tcancel();\r\n\t\t\tbreak;\r\n\t\t}\r\n\t});\r\n\r\n\treturn starsHolder;\r\n};","//draggable progress bar\r\nexport default function(cell, onRendered, success, cancel, editorParams){\r\n\tvar element = cell.getElement(),\r\n\tmax = typeof editorParams.max === \"undefined\" ? ( element.getElementsByTagName(\"div\")[0].getAttribute(\"max\") || 100) : editorParams.max,\r\n\tmin = typeof editorParams.min === \"undefined\" ? ( element.getElementsByTagName(\"div\")[0].getAttribute(\"min\") || 0) : editorParams.min,\r\n\tpercent = (max - min) / 100,\r\n\tvalue = cell.getValue() || 0,\r\n\thandle = document.createElement(\"div\"),\r\n\tbar = document.createElement(\"div\"),\r\n\tmouseDrag, mouseDragWidth;\r\n\r\n\t//set new value\r\n\tfunction updateValue(){\r\n\t\tvar style = window.getComputedStyle(element, null);\r\n\r\n\t\tvar calcVal = (percent * Math.round(bar.offsetWidth / ((element.clientWidth - parseInt(style.getPropertyValue(\"padding-left\")) - parseInt(style.getPropertyValue(\"padding-right\")))/100))) + min;\r\n\t\tsuccess(calcVal);\r\n\t\telement.setAttribute(\"aria-valuenow\", calcVal);\r\n\t\telement.setAttribute(\"aria-label\", value);\r\n\t}\r\n\r\n\t//style handle\r\n\thandle.style.position = \"absolute\";\r\n\thandle.style.right = \"0\";\r\n\thandle.style.top = \"0\";\r\n\thandle.style.bottom = \"0\";\r\n\thandle.style.width = \"5px\";\r\n\thandle.classList.add(\"tabulator-progress-handle\");\r\n\r\n\t//style bar\r\n\tbar.style.display = \"inline-block\";\r\n\tbar.style.position = \"relative\";\r\n\t// bar.style.top = \"8px\";\r\n\t// bar.style.bottom = \"8px\";\r\n\t// bar.style.left = \"4px\";\r\n\t// bar.style.marginRight = \"4px\";\r\n\tbar.style.height = \"100%\";\r\n\tbar.style.backgroundColor = \"#488CE9\";\r\n\tbar.style.maxWidth = \"100%\";\r\n\tbar.style.minWidth = \"0%\";\r\n\r\n\tif(editorParams.elementAttributes && typeof editorParams.elementAttributes == \"object\"){\r\n\t\tfor (let key in editorParams.elementAttributes){\r\n\t\t\tif(key.charAt(0) == \"+\"){\r\n\t\t\t\tkey = key.slice(1);\r\n\t\t\t\tbar.setAttribute(key, bar.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\r\n\t\t\t}else{\r\n\t\t\t\tbar.setAttribute(key, editorParams.elementAttributes[key]);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//style cell\r\n\telement.style.padding = \"4px 4px\";\r\n\r\n\t//make sure value is in range\r\n\tvalue = Math.min(parseFloat(value), max);\r\n\tvalue = Math.max(parseFloat(value), min);\r\n\r\n\t//workout percentage\r\n\tvalue = Math.round((value - min) / percent);\r\n\t// bar.style.right = value + \"%\";\r\n\tbar.style.width = value + \"%\";\r\n\r\n\telement.setAttribute(\"aria-valuemin\", min);\r\n\telement.setAttribute(\"aria-valuemax\", max);\r\n\r\n\tbar.appendChild(handle);\r\n\r\n\thandle.addEventListener(\"mousedown\", function(e){\r\n\t\tmouseDrag = e.screenX;\r\n\t\tmouseDragWidth = bar.offsetWidth;\r\n\t});\r\n\r\n\thandle.addEventListener(\"mouseover\", function(){\r\n\t\thandle.style.cursor = \"ew-resize\";\r\n\t});\r\n\r\n\telement.addEventListener(\"mousemove\", function(e){\r\n\t\tif(mouseDrag){\r\n\t\t\tbar.style.width = (mouseDragWidth + e.screenX - mouseDrag) + \"px\";\r\n\t\t}\r\n\t});\r\n\r\n\telement.addEventListener(\"mouseup\", function(e){\r\n\t\tif(mouseDrag){\r\n\t\t\te.stopPropagation();\r\n\t\t\te.stopImmediatePropagation();\r\n\r\n\t\t\tmouseDrag = false;\r\n\t\t\tmouseDragWidth = false;\r\n\r\n\t\t\tupdateValue();\r\n\t\t}\r\n\t});\r\n\r\n\t//allow key based navigation\r\n\telement.addEventListener(\"keydown\", function(e){\r\n\t\tswitch(e.keyCode){\r\n\t\t\tcase 39: //right arrow\r\n\t\t\te.preventDefault();\r\n\t\t\tbar.style.width = (bar.clientWidth + element.clientWidth/100) + \"px\";\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 37: //left arrow\r\n\t\t\te.preventDefault();\r\n\t\t\tbar.style.width = (bar.clientWidth - element.clientWidth/100) + \"px\";\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 9: //tab\r\n\t\t\tcase 13: //enter\r\n\t\t\tupdateValue();\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 27: //escape\r\n\t\t\tcancel();\r\n\t\t\tbreak;\r\n\r\n\t\t}\r\n\t});\r\n\r\n\telement.addEventListener(\"blur\", function(){\r\n\t\tcancel();\r\n\t});\r\n\r\n\treturn bar;\r\n};","//checkbox\r\nexport default function(cell, onRendered, success, cancel, editorParams){\r\n\tvar value = cell.getValue(),\r\n\tinput = document.createElement(\"input\"),\r\n\ttristate = editorParams.tristate,\r\n\tindetermValue = typeof editorParams.indeterminateValue === \"undefined\" ? null : editorParams.indeterminateValue,\r\n\tindetermState = false;\r\n\r\n\tinput.setAttribute(\"type\", \"checkbox\");\r\n\tinput.style.marginTop = \"5px\";\r\n\tinput.style.boxSizing = \"border-box\";\r\n\r\n\tif(editorParams.elementAttributes && typeof editorParams.elementAttributes == \"object\"){\r\n\t\tfor (let key in editorParams.elementAttributes){\r\n\t\t\tif(key.charAt(0) == \"+\"){\r\n\t\t\t\tkey = key.slice(1);\r\n\t\t\t\tinput.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\r\n\t\t\t}else{\r\n\t\t\t\tinput.setAttribute(key, editorParams.elementAttributes[key]);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tinput.value = value;\r\n\r\n\tif(tristate && (typeof value === \"undefined\" || value === indetermValue || value === \"\")){\r\n\t\tindetermState = true;\r\n\t\tinput.indeterminate = true;\r\n\t}\r\n\r\n\tif(this.table.browser != \"firefox\"){ //prevent blur issue on mac firefox\r\n\t\tonRendered(function(){\r\n\t\t\tinput.focus({preventScroll: true});\r\n\t\t});\r\n\t}\r\n\r\n\tinput.checked = value === true || value === \"true\" || value === \"True\" || value === 1;\r\n\r\n\tonRendered(function(){\r\n\t\tinput.focus();\r\n\t});\r\n\r\n\tfunction setValue(blur){\r\n\t\tif(tristate){\r\n\t\t\tif(!blur){\r\n\t\t\t\tif(input.checked && !indetermState){\r\n\t\t\t\t\tinput.checked = false;\r\n\t\t\t\t\tinput.indeterminate = true;\r\n\t\t\t\t\tindetermState = true;\r\n\t\t\t\t\treturn indetermValue;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tindetermState = false;\r\n\t\t\t\t\treturn input.checked;\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tif(indetermState){\r\n\t\t\t\t\treturn indetermValue;\r\n\t\t\t\t}else{\r\n\t\t\t\t\treturn input.checked;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\treturn input.checked;\r\n\t\t}\r\n\t}\r\n\r\n\t//submit new value on blur\r\n\tinput.addEventListener(\"change\", function(e){\r\n\t\tsuccess(setValue());\r\n\t});\r\n\r\n\tinput.addEventListener(\"blur\", function(e){\r\n\t\tsuccess(setValue(true));\r\n\t});\r\n\r\n\t//submit new value on enter\r\n\tinput.addEventListener(\"keydown\", function(e){\r\n\t\tif(e.keyCode == 13){\r\n\t\t\tsuccess(setValue());\r\n\t\t}\r\n\t\tif(e.keyCode == 27){\r\n\t\t\tcancel();\r\n\t\t}\r\n\t});\r\n\r\n\treturn input;\r\n};","import Module from '../../core/Module.js';\r\n\r\nimport defaultEditors from './defaults/editors.js';\r\n\r\nclass Edit extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.currentCell = false; //hold currently editing cell\r\n\t\tthis.mouseClick = false; //hold mousedown state to prevent click binding being overriden by editor opening\r\n\t\tthis.recursionBlock = false; //prevent focus recursion\r\n\t\tthis.invalidEdit = false;\r\n\t\tthis.editedCells = [];\r\n\t}\r\n\r\n\t//initialize column editor\r\n\tinitializeColumn(column){\r\n\t\tvar self = this,\r\n\t\tconfig = {\r\n\t\t\teditor:false,\r\n\t\t\tblocked:false,\r\n\t\t\tcheck:column.definition.editable,\r\n\t\t\tparams:column.definition.editorParams || {}\r\n\t\t};\r\n\r\n\t\t//set column editor\r\n\t\tswitch(typeof column.definition.editor){\r\n\t\t\tcase \"string\":\r\n\t\t\t\tif(Edit.editors[column.definition.editor]){\r\n\t\t\t\t\tconfig.editor = Edit.editors[column.definition.editor];\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.warn(\"Editor Error - No such editor found: \", column.definition.editor);\r\n\t\t\t\t}\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"function\":\r\n\t\t\t\tconfig.editor = column.definition.editor;\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"boolean\":\r\n\t\t\t\tif(column.definition.editor === true){\r\n\t\t\t\t\tif(typeof column.definition.formatter !== \"function\"){\r\n\t\t\t\t\t\tif(Edit.editors[column.definition.formatter]){\r\n\t\t\t\t\t\t\tconfig.editor = Edit.editors[column.definition.formatter];\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\tconfig.editor = Edit.editors[\"input\"];\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tconsole.warn(\"Editor Error - Cannot auto lookup editor for a custom formatter: \", column.definition.formatter);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\tif(config.editor){\r\n\t\t\tcolumn.modules.edit = config;\r\n\t\t}\r\n\t}\r\n\r\n\tgetCurrentCell(){\r\n\t\treturn this.currentCell ? this.currentCell.getComponent() : false;\r\n\t}\r\n\r\n\tclearEditor(cancel){\r\n\t\tvar cell = this.currentCell,\r\n\t\tcellEl;\r\n\r\n\t\tthis.invalidEdit = false;\r\n\r\n\t\tif(cell){\r\n\t\t\tthis.currentCell = false;\r\n\r\n\t\t\tcellEl = cell.getElement();\r\n\r\n\t\t\tif(cancel){\r\n\t\t\t\tcell.validate();\r\n\t\t\t}else{\r\n\t\t\t\tcellEl.classList.remove(\"tabulator-validation-fail\");\r\n\t\t\t}\r\n\r\n\t\t\tcellEl.classList.remove(\"tabulator-editing\");\r\n\t\t\twhile(cellEl.firstChild) cellEl.removeChild(cellEl.firstChild);\r\n\r\n\t\t\tcell.row.getElement().classList.remove(\"tabulator-row-editing\");\r\n\t\t}\r\n\t}\r\n\r\n\tcancelEdit(){\r\n\t\tif(this.currentCell){\r\n\t\t\tvar cell = this.currentCell;\r\n\t\t\tvar component = this.currentCell.getComponent();\r\n\r\n\t\t\tthis.clearEditor(true);\r\n\t\t\tcell.setValueActual(cell.getValue());\r\n\t\t\tcell.cellRendered();\r\n\r\n\t\t\tif(cell.column.definition.editor == \"textarea\" || cell.column.definition.variableHeight){\r\n\t\t\t\tcell.row.normalizeHeight(true);\r\n\t\t\t}\r\n\r\n\t\t\tif(cell.column.cellEvents.cellEditCancelled){\r\n\t\t\t\tcell.column.cellEvents.cellEditCancelled.call(this.table, component);\r\n\t\t\t}\r\n\r\n\t\t\tthis.table.options.cellEditCancelled.call(this.table, component);\r\n\t\t}\r\n\t}\r\n\r\n\t//return a formatted value for a cell\r\n\tbindEditor(cell){\r\n\t\tvar self = this,\r\n\t\telement = cell.getElement(true);\r\n\r\n\t\telement.setAttribute(\"tabindex\", 0);\r\n\r\n\t\telement.addEventListener(\"click\", function(e){\r\n\t\t\tif(!element.classList.contains(\"tabulator-editing\")){\r\n\t\t\t\telement.focus({preventScroll: true});\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\telement.addEventListener(\"mousedown\", function(e){\r\n\t\t\tif (e.button === 2) {\r\n\t\t\t\te.preventDefault();\r\n\t\t\t}else{\r\n\t\t\t\tself.mouseClick = true;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\telement.addEventListener(\"focus\", function(e){\r\n\t\t\tif(!self.recursionBlock){\r\n\t\t\t\tself.edit(cell, e, false);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tfocusCellNoEvent(cell, block){\r\n\t\tthis.recursionBlock = true;\r\n\r\n\t\tif(!(block && this.table.browser === \"ie\")){\r\n\t\t\tcell.getElement().focus({preventScroll: true});\r\n\t\t}\r\n\r\n\t\tthis.recursionBlock = false;\r\n\t}\r\n\r\n\teditCell(cell, forceEdit){\r\n\t\tthis.focusCellNoEvent(cell);\r\n\t\tthis.edit(cell, false, forceEdit);\r\n\t}\r\n\r\n\tfocusScrollAdjust(cell){\r\n\t\tif(this.table.rowManager.getRenderMode() == \"virtual\"){\r\n\t\t\tvar topEdge = this.table.rowManager.element.scrollTop,\r\n\t\t\tbottomEdge = this.table.rowManager.element.clientHeight + this.table.rowManager.element.scrollTop,\r\n\t\t\trowEl = cell.row.getElement(),\r\n\t\t\toffset = rowEl.offsetTop;\r\n\r\n\t\t\tif(rowEl.offsetTop < topEdge){\r\n\t\t\t\tthis.table.rowManager.element.scrollTop -= (topEdge - rowEl.offsetTop);\r\n\t\t\t}else{\r\n\t\t\t\tif(rowEl.offsetTop + rowEl.offsetHeight > bottomEdge){\r\n\t\t\t\t\tthis.table.rowManager.element.scrollTop += (rowEl.offsetTop + rowEl.offsetHeight - bottomEdge);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tvar leftEdge = this.table.rowManager.element.scrollLeft,\r\n\t\t\trightEdge = this.table.rowManager.element.clientWidth + this.table.rowManager.element.scrollLeft,\r\n\t\t\tcellEl = cell.getElement(),\r\n\t\t\toffset = cellEl.offsetLeft;\r\n\r\n\t\t\tif(this.table.modExists(\"frozenColumns\")){\r\n\t\t\t\tleftEdge += parseInt(this.table.modules.frozenColumns.leftMargin);\r\n\t\t\t\trightEdge -= parseInt(this.table.modules.frozenColumns.rightMargin);\r\n\t\t\t}\r\n\r\n\t\t\tif(this.table.options.virtualDomHoz){\r\n\t\t\t\tleftEdge -= parseInt(this.table.vdomHoz.vDomPadLeft);\r\n\t\t\t\trightEdge -= parseInt(this.table.vdomHoz.vDomPadLeft);\r\n\t\t\t}\r\n\r\n\t\t\tif(cellEl.offsetLeft < leftEdge){\r\n\r\n\t\t\t\tthis.table.rowManager.element.scrollLeft -= (leftEdge - cellEl.offsetLeft);\r\n\t\t\t}else{\r\n\t\t\t\tif(cellEl.offsetLeft + cellEl.offsetWidth > rightEdge){\r\n\t\t\t\t\tthis.table.rowManager.element.scrollLeft += (cellEl.offsetLeft + cellEl.offsetWidth - rightEdge);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tedit(cell, e, forceEdit){\r\n\t\tvar self = this,\r\n\t\tallowEdit = true,\r\n\t\trendered = function(){},\r\n\t\telement = cell.getElement(),\r\n\t\tcellEditor, component, params;\r\n\r\n\t\t//prevent editing if another cell is refusing to leave focus (eg. validation fail)\r\n\t\tif(this.currentCell){\r\n\t\t\tif(!this.invalidEdit){\r\n\t\t\t\tthis.cancelEdit();\r\n\t\t\t}\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t//handle successfull value change\r\n\t\tfunction success(value){\r\n\t\t\tif(self.currentCell === cell){\r\n\t\t\t\tvar valid = true;\r\n\r\n\t\t\t\tif(cell.column.modules.validate && self.table.modExists(\"validate\") && self.table.options.validationMode != \"manual\"){\r\n\t\t\t\t\tvalid = self.table.modules.validate.validate(cell.column.modules.validate, cell, value);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(valid === true || self.table.options.validationMode === \"highlight\"){\r\n\t\t\t\t\tself.clearEditor();\r\n\r\n\r\n\t\t\t\t\tif(!cell.modules.edit){\r\n\t\t\t\t\t\tcell.modules.edit = {};\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tcell.modules.edit.edited = true;\r\n\r\n\t\t\t\t\tif(self.editedCells.indexOf(cell) == -1){\r\n\t\t\t\t\t\tself.editedCells.push(cell);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tcell.setValue(value, true);\r\n\r\n\t\t\t\t\tif(self.table.options.dataTree && self.table.modExists(\"dataTree\")){\r\n\t\t\t\t\t\tself.table.modules.dataTree.checkForRestyle(cell);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif(valid !== true){\r\n\t\t\t\t\t\telement.classList.add(\"tabulator-validation-fail\");\r\n\t\t\t\t\t\tself.table.options.validationFailed.call(self.table, cell.getComponent(), value, valid);\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tself.invalidEdit = true;\r\n\t\t\t\t\telement.classList.add(\"tabulator-validation-fail\");\r\n\t\t\t\t\tself.focusCellNoEvent(cell, true);\r\n\t\t\t\t\trendered();\r\n\t\t\t\t\tself.table.options.validationFailed.call(self.table, cell.getComponent(), value, valid);\r\n\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\t// console.warn(\"Edit Success Error - cannot call success on a cell that is no longer being edited\");\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//handle aborted edit\r\n\t\tfunction cancel(){\r\n\t\t\tif(self.currentCell === cell){\r\n\t\t\t\tself.cancelEdit();\r\n\r\n\t\t\t\tif(self.table.options.dataTree && self.table.modExists(\"dataTree\")){\r\n\t\t\t\t\tself.table.modules.dataTree.checkForRestyle(cell);\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\t// console.warn(\"Edit Success Error - cannot call cancel on a cell that is no longer being edited\");\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction onRendered(callback){\r\n\t\t\trendered = callback;\r\n\t\t}\r\n\r\n\t\tif(!cell.column.modules.edit.blocked){\r\n\t\t\tif(e){\r\n\t\t\t\te.stopPropagation();\r\n\t\t\t}\r\n\r\n\t\t\tswitch(typeof cell.column.modules.edit.check){\r\n\t\t\t\tcase \"function\":\r\n\t\t\t\tallowEdit = cell.column.modules.edit.check(cell.getComponent());\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"boolean\":\r\n\t\t\t\tallowEdit = cell.column.modules.edit.check;\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\r\n\t\t\tif(allowEdit || forceEdit){\r\n\r\n\t\t\t\tself.cancelEdit();\r\n\r\n\t\t\t\tself.currentCell = cell;\r\n\r\n\t\t\t\tthis.focusScrollAdjust(cell);\r\n\r\n\t\t\t\tcomponent = cell.getComponent();\r\n\r\n\t\t\t\tif(this.mouseClick){\r\n\t\t\t\t\tthis.mouseClick = false;\r\n\r\n\t\t\t\t\tif(cell.column.cellEvents.cellClick){\r\n\t\t\t\t\t\tcell.column.cellEvents.cellClick.call(this.table, e, component);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(cell.column.cellEvents.cellEditing){\r\n\t\t\t\t\tcell.column.cellEvents.cellEditing.call(this.table, component);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tself.table.options.cellEditing.call(this.table, component);\r\n\r\n\t\t\t\tparams = typeof cell.column.modules.edit.params === \"function\" ? cell.column.modules.edit.params(component) : cell.column.modules.edit.params;\r\n\r\n\t\t\t\tcellEditor = cell.column.modules.edit.editor.call(self, component, onRendered, success, cancel, params);\r\n\r\n\t\t\t\t//if editor returned, add to DOM, if false, abort edit\r\n\t\t\t\tif(cellEditor !== false){\r\n\r\n\t\t\t\t\tif(cellEditor instanceof Node){\r\n\t\t\t\t\t\telement.classList.add(\"tabulator-editing\");\r\n\t\t\t\t\t\tcell.row.getElement().classList.add(\"tabulator-row-editing\");\r\n\t\t\t\t\t\twhile(element.firstChild) element.removeChild(element.firstChild);\r\n\t\t\t\t\t\telement.appendChild(cellEditor);\r\n\r\n\t\t\t\t\t\t//trigger onRendered Callback\r\n\t\t\t\t\t\trendered();\r\n\r\n\t\t\t\t\t\t//prevent editing from triggering rowClick event\r\n\t\t\t\t\t\tvar children = element.children;\r\n\r\n\t\t\t\t\t\tfor (var i = 0; i < children.length; i++) {\r\n\t\t\t\t\t\t\tchildren[i].addEventListener(\"click\", function(e){\r\n\t\t\t\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tconsole.warn(\"Edit Error - Editor should return an instance of Node, the editor returned:\", cellEditor);\r\n\t\t\t\t\t\telement.blur();\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}else{\r\n\t\t\t\t\telement.blur();\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn true;\r\n\t\t\t}else{\r\n\t\t\t\tthis.mouseClick = false;\r\n\t\t\t\telement.blur();\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tthis.mouseClick = false;\r\n\t\t\telement.blur();\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\tmaskInput(el, options){\r\n\t\tvar mask = options.mask,\r\n\t\tmaskLetter = typeof options.maskLetterChar !== \"undefined\" ? options.maskLetterChar : \"A\",\r\n\t\tmaskNumber = typeof options.maskNumberChar !== \"undefined\" ? options.maskNumberChar : \"9\",\r\n\t\tmaskWildcard = typeof options.maskWildcardChar !== \"undefined\" ? options.maskWildcardChar : \"*\",\r\n\t\tsuccess = false;\r\n\r\n\t\tfunction fillSymbols(index){\r\n\t\t\tvar symbol = mask[index];\r\n\t\t\tif(typeof symbol !== \"undefined\" && symbol !== maskWildcard && symbol !== maskLetter && symbol !== maskNumber){\r\n\t\t\t\tel.value = el.value + \"\" + symbol;\r\n\t\t\t\tfillSymbols(index+1);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tel.addEventListener(\"keydown\", (e) => {\r\n\t\t\tvar index = el.value.length,\r\n\t\t\tchar = e.key;\r\n\r\n\t\t\tif(e.keyCode > 46){\r\n\t\t\t\tif(index >= mask.length){\r\n\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\tsuccess = false;\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tswitch(mask[index]){\r\n\t\t\t\t\t\tcase maskLetter:\r\n\t\t\t\t\t\tif(char.toUpperCase() == char.toLowerCase()){\r\n\t\t\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\t\t\tsuccess = false;\r\n\t\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\tcase maskNumber:\r\n\t\t\t\t\t\tif(isNaN(char)){\r\n\t\t\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\t\t\tsuccess = false;\r\n\t\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\tcase maskWildcard:\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\tdefault:\r\n\t\t\t\t\t\tif(char !== mask[index]){\r\n\t\t\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\t\t\tsuccess = false;\r\n\t\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tsuccess = true;\r\n\t\t\t}\r\n\r\n\t\t\treturn;\r\n\t\t});\r\n\r\n\t\tel.addEventListener(\"keyup\", (e) => {\r\n\t\t\tif(e.keyCode > 46){\r\n\t\t\t\tif(options.maskAutoFill){\r\n\t\t\t\t\tfillSymbols(el.value.length);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\r\n\t\tif(!el.placeholder){\r\n\t\t\tel.placeholder = mask;\r\n\t\t}\r\n\r\n\t\tif(options.maskAutoFill){\r\n\t\t\tfillSymbols(el.value.length);\r\n\t\t}\r\n\t}\r\n\r\n\tgetEditedCells(){\r\n\t\tvar output = [];\r\n\r\n\t\tthis.editedCells.forEach((cell) => {\r\n\t\t\toutput.push(cell.getComponent());\r\n\t\t});\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tclearEdited(cell){\r\n\t\tvar editIndex;\r\n\r\n\t\tif(cell.modules.edit && cell.modules.edit.edited){\r\n\t\t\tcell.modules.edit.edited = false;\r\n\r\n\t\t\tif(cell.modules.validate){\r\n\t\t\t\tcell.modules.validate.invalid = false;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\teditIndex = this.editedCells.indexOf(cell);\r\n\r\n\t\tif(editIndex > -1){\r\n\t\t\tthis.editedCells.splice(editIndex, 1);\r\n\t\t}\r\n\t}\r\n}\r\n\r\nEdit.moduleName = \"edit\";\r\n\r\n//load defaults\r\nEdit.editors = defaultEditors;\r\n\r\n\r\nexport default Edit;","class ExportRow{\r\n\tconstructor(type, columns, component, indent){\r\n\t\tthis.type = type;\r\n\t\tthis.columns = columns;\r\n\t\tthis.component = component || false;\r\n\t\tthis.indent = indent || 0;\r\n\t}\r\n}\r\n\r\nexport default ExportRow;","class ExportColumn{\r\n\tconstructor(value, component, width, height, depth){\r\n\t\tthis.value = value;\r\n\t\tthis.component = component || false;\r\n\t\tthis.width = width;\r\n\t\tthis.height = height;\r\n\t\tthis.depth = depth;\r\n\t}\r\n}\r\n\r\nexport default ExportColumn;","import Module from '../../core/Module.js';\r\n\r\nimport ExportRow from './ExportRow.js';\r\nimport ExportColumn from './ExportColumn.js';\r\n\r\nclass Export extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.config = {};\r\n\t\tthis.cloneTableStyle = true;\r\n\t\tthis.colVisProp = \"\";\r\n\t}\r\n\r\n\tgenerateExportList(config, style, range, colVisProp){\r\n\t\tthis.cloneTableStyle = style;\r\n\t\tthis.config = config || {};\r\n\t\tthis.colVisProp = colVisProp;\r\n\r\n\t\tvar headers = this.config.columnHeaders !== false ? this.headersToExportRows(this.generateColumnGroupHeaders()) : [];\r\n\t\tvar body = this.bodyToExportRows(this.rowLookup(range));\r\n\r\n\t\treturn headers.concat(body);\r\n\t}\r\n\r\n\tgenereateTable(config, style, range, colVisProp){\r\n\t\tvar list = this.generateExportList(config, style, range, colVisProp);\r\n\r\n\t\treturn this.genereateTableElement(list);\r\n\t}\r\n\r\n\trowLookup(range){\r\n\t\tvar rows = [];\r\n\r\n\t\tif(typeof range == \"function\"){\r\n\t\t\trange.call(this.table).forEach((row) =>{\r\n\t\t\t\trow = this.table.rowManager.findRow(row);\r\n\r\n\t\t\t\tif(row){\r\n\t\t\t\t\trows.push(row);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tswitch(range){\r\n\t\t\t\tcase true:\r\n\t\t\t\tcase \"visible\":\r\n\t\t\t\trows = this.table.rowManager.getVisibleRows(true);\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"all\":\r\n\t\t\t\trows = this.table.rowManager.rows;\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"selected\":\r\n\t\t\t\trows = this.table.modules.selectRow.selectedRows;\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"active\":\r\n\t\t\t\tdefault:\r\n\t\t\t\tif(this.table.options.pagination){\r\n\t\t\t\t\trows = this.table.rowManager.getDisplayRows(this.table.rowManager.displayRows.length - 2);\r\n\t\t\t\t}else{\r\n\t\t\t\t\trows = this.table.rowManager.getDisplayRows();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn Object.assign([], rows);\r\n\t}\r\n\r\n\tgenerateColumnGroupHeaders(){\r\n\t\tvar output = [];\r\n\r\n\t\tvar columns = this.config.columnGroups !== false ? this.table.columnManager.columns : this.table.columnManager.columnsByIndex;\r\n\r\n\t\tcolumns.forEach((column) => {\r\n\t\t\tvar colData = this.processColumnGroup(column);\r\n\r\n\t\t\tif(colData){\r\n\t\t\t\toutput.push(colData);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tprocessColumnGroup(column){\r\n\t\tvar subGroups = column.columns,\r\n\t\tmaxDepth = 0,\r\n\t\ttitle = column.definition[\"title\" + (this.colVisProp.charAt(0).toUpperCase() + this.colVisProp.slice(1))] || column.definition.title;\r\n\r\n\t\tvar groupData = {\r\n\t\t\ttitle:title,\r\n\t\t\tcolumn:column,\r\n\t\t\tdepth:1,\r\n\t\t};\r\n\r\n\t\tif(subGroups.length){\r\n\t\t\tgroupData.subGroups = [];\r\n\t\t\tgroupData.width = 0;\r\n\r\n\t\t\tsubGroups.forEach((subGroup) => {\r\n\t\t\t\tvar subGroupData = this.processColumnGroup(subGroup);\r\n\r\n\t\t\t\tif(subGroupData){\r\n\t\t\t\t\tgroupData.width += subGroupData.width;\r\n\t\t\t\t\tgroupData.subGroups.push(subGroupData);\r\n\r\n\t\t\t\t\tif(subGroupData.depth > maxDepth){\r\n\t\t\t\t\t\tmaxDepth = subGroupData.depth;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tgroupData.depth += maxDepth;\r\n\r\n\t\t\tif(!groupData.width){\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tif(this.columnVisCheck(column)){\r\n\t\t\t\tgroupData.width = 1;\r\n\t\t\t}else{\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn groupData;\r\n\t}\r\n\r\n\tcolumnVisCheck(column){\r\n\t\treturn column.definition[this.colVisProp] !== false && (column.visible || (!column.visible && column.definition[this.colVisProp]));\r\n\t}\r\n\r\n\theadersToExportRows(columns){\r\n\t\tvar headers = [],\r\n\t\theaderDepth = 0,\r\n\t\texportRows = [];\r\n\r\n\t\tfunction parseColumnGroup(column, level){\r\n\r\n\t\t\tvar depth = headerDepth - level;\r\n\r\n\t\t\tif(typeof headers[level] === \"undefined\"){\r\n\t\t\t\theaders[level] = [];\r\n\t\t\t}\r\n\r\n\t\t\tcolumn.height = column.subGroups ? 1 : (depth - column.depth) + 1;\r\n\r\n\t\t\theaders[level].push(column);\r\n\r\n\t\t\tif(column.height > 1){\r\n\t\t\t\tfor(let i = 1; i < column.height; i ++){\r\n\r\n\t\t\t\t\tif(typeof headers[level + i] === \"undefined\"){\r\n\t\t\t\t\t\theaders[level + i] = [];\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\theaders[level + i].push(false);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif(column.width > 1){\r\n\t\t\t\tfor(let i = 1; i < column.width; i ++){\r\n\t\t\t\t\theaders[level].push(false);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif(column.subGroups){\r\n\t\t\t\tcolumn.subGroups.forEach(function(subGroup){\r\n\t\t\t\t\tparseColumnGroup(subGroup, level+1);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//calculate maximum header debth\r\n\t\tcolumns.forEach(function(column){\r\n\t\t\tif(column.depth > headerDepth){\r\n\t\t\t\theaderDepth = column.depth;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tcolumns.forEach(function(column){\r\n\t\t\tparseColumnGroup(column,0);\r\n\t\t});\r\n\r\n\t\theaders.forEach((header) => {\r\n\t\t\tvar columns = [];\r\n\r\n\t\t\theader.forEach((col) => {\r\n\t\t\t\tif(col){\r\n\t\t\t\t\tcolumns.push(new ExportColumn(col.title, col.column.getComponent(), col.width, col.height, col.depth));\r\n\t\t\t\t}else{\r\n\t\t\t\t\tcolumns.push(null);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\texportRows.push(new ExportRow(\"header\", columns));\r\n\t\t});\r\n\r\n\t\treturn exportRows;\r\n\t}\r\n\r\n\tbodyToExportRows(rows){\r\n\r\n\t\tvar columns = [];\r\n\t\tvar exportRows = [];\r\n\r\n\t\tthis.table.columnManager.columnsByIndex.forEach((column) => {\r\n\t\t\tif (this.columnVisCheck(column)) {\r\n\t\t\t\tcolumns.push(column.getComponent());\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tif(this.config.columnCalcs !== false && this.table.modExists(\"columnCalcs\")){\r\n\t\t\tif(this.table.modules.columnCalcs.topInitialized){\r\n\t\t\t\trows.unshift(this.table.modules.columnCalcs.topRow);\r\n\t\t\t}\r\n\r\n\t\t\tif(this.table.modules.columnCalcs.botInitialized){\r\n\t\t\t\trows.push(this.table.modules.columnCalcs.botRow);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\trows = rows.filter((row) => {\r\n\t\t\tswitch(row.type){\r\n\t\t\t\tcase \"group\":\r\n\t\t\t\treturn this.config.rowGroups !== false;\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"calc\":\r\n\t\t\t\treturn this.config.columnCalcs !== false;\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"row\":\r\n\t\t\t\treturn !(this.table.options.dataTree && this.config.dataTree === false && row.modules.dataTree.parent);\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\r\n\t\t\treturn true;\r\n\t\t});\r\n\r\n\t\trows.forEach((row, i) => {\r\n\t\t\tvar rowData = row.getData(this.colVisProp);\r\n\t\t\tvar exportCols = [];\r\n\t\t\tvar indent = 0;\r\n\r\n\t\t\tswitch(row.type){\r\n\t\t\t\tcase \"group\":\r\n\t\t\t\tindent = row.level;\r\n\t\t\t\texportCols.push(new ExportColumn(row.key, row.getComponent(), columns.length, 1));\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"calc\" :\r\n\t\t\t\tcase \"row\" :\r\n\t\t\t\tcolumns.forEach((col) => {\r\n\t\t\t\t\texportCols.push(new ExportColumn(col._column.getFieldValue(rowData), col, 1, 1));\r\n\t\t\t\t});\r\n\r\n\t\t\t\tif(this.table.options.dataTree && this.config.dataTree !== false){\r\n\t\t\t\t\tindent = row.modules.dataTree.index;\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\r\n\t\t\texportRows.push(new ExportRow(row.type, exportCols, row.getComponent(), indent));\r\n\t\t});\r\n\r\n\t\treturn exportRows;\r\n\t}\r\n\r\n\tgenereateTableElement(list){\r\n\t\tvar table = document.createElement(\"table\"),\r\n\t\theaderEl = document.createElement(\"thead\"),\r\n\t\tbodyEl = document.createElement(\"tbody\"),\r\n\t\tstyles = this.lookupTableStyles(),\r\n\t\trowFormatter = this.table.options[\"rowFormatter\" + (this.colVisProp.charAt(0).toUpperCase() + this.colVisProp.slice(1))],\r\n\t\tsetup = {};\r\n\r\n\t\tsetup.rowFormatter = rowFormatter !== null ? rowFormatter : this.table.options.rowFormatter;\r\n\r\n\t\tif(this.table.options.dataTree &&this.config.dataTree !== false && this.table.modExists(\"columnCalcs\")){\r\n\t\t\tsetup.treeElementField = this.table.modules.dataTree.elementField;\r\n\t\t}\r\n\r\n\t\t//assign group header formatter\r\n\t\tsetup.groupHeader = this.table.options[\"groupHeader\" + (this.colVisProp.charAt(0).toUpperCase() + this.colVisProp.slice(1))];\r\n\r\n\t\tif(setup.groupHeader && !Array.isArray(setup.groupHeader)){\r\n\t\t\tsetup.groupHeader = [setup.groupHeader];\r\n\t\t}\r\n\r\n\t\ttable.classList.add(\"tabulator-print-table\");\r\n\r\n\t\tthis.mapElementStyles(this.table.columnManager.getHeadersElement(), headerEl, [\"border-top\", \"border-left\", \"border-right\", \"border-bottom\", \"background-color\", \"color\", \"font-weight\", \"font-family\", \"font-size\"]);\r\n\r\n\r\n\t\tif(list.length > 1000){\r\n\t\t\tconsole.warn(\"It may take a long time to render an HTML table with more than 1000 rows\");\r\n\t\t}\r\n\r\n\t\tlist.forEach((row, i) => {\r\n\t\t\tswitch(row.type){\r\n\t\t\t\tcase \"header\":\r\n\t\t\t\theaderEl.appendChild(this.genereateHeaderElement(row, setup, styles));\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"group\":\r\n\t\t\t\tbodyEl.appendChild(this.genereateGroupElement(row, setup, styles));\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"calc\":\r\n\t\t\t\tbodyEl.appendChild(this.genereateCalcElement(row, setup, styles));\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"row\":\r\n\t\t\t\tlet rowEl = this.genereateRowElement(row, setup, styles);\r\n\t\t\t\tthis.mapElementStyles(((i % 2) && styles.evenRow) ? styles.evenRow : styles.oddRow, rowEl, [\"border-top\", \"border-left\", \"border-right\", \"border-bottom\", \"color\", \"font-weight\", \"font-family\", \"font-size\", \"background-color\"]);\r\n\t\t\t\tbodyEl.appendChild(rowEl);\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tif(headerEl.innerHTML){\r\n\t\t\ttable.appendChild(headerEl);\r\n\t\t}\r\n\r\n\t\ttable.appendChild(bodyEl);\r\n\r\n\r\n\t\tthis.mapElementStyles(this.table.element, table, [\"border-top\", \"border-left\", \"border-right\", \"border-bottom\"]);\r\n\t\treturn table;\r\n\t}\r\n\r\n\tlookupTableStyles(){\r\n\t\tvar styles = {};\r\n\r\n\t\t//lookup row styles\r\n\t\tif(this.cloneTableStyle && window.getComputedStyle){\r\n\t\t\tstyles.oddRow = this.table.element.querySelector(\".tabulator-row-odd:not(.tabulator-group):not(.tabulator-calcs)\");\r\n\t\t\tstyles.evenRow = this.table.element.querySelector(\".tabulator-row-even:not(.tabulator-group):not(.tabulator-calcs)\");\r\n\t\t\tstyles.calcRow = this.table.element.querySelector(\".tabulator-row.tabulator-calcs\");\r\n\t\t\tstyles.firstRow = this.table.element.querySelector(\".tabulator-row:not(.tabulator-group):not(.tabulator-calcs)\");\r\n\t\t\tstyles.firstGroup = this.table.element.getElementsByClassName(\"tabulator-group\")[0];\r\n\r\n\t\t\tif(styles.firstRow){\r\n\t\t\t\tstyles.styleCells = styles.firstRow.getElementsByClassName(\"tabulator-cell\");\r\n\t\t\t\tstyles.firstCell = styles.styleCells[0];\r\n\t\t\t\tstyles.lastCell = styles.styleCells[styles.styleCells.length - 1];\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn styles;\r\n\t}\r\n\r\n\tgenereateHeaderElement(row, setup, styles){\r\n\t\tvar rowEl = document.createElement(\"tr\");\r\n\r\n\t\trow.columns.forEach((column) => {\r\n\t\t\tif(column){\r\n\t\t\t\tvar cellEl = document.createElement(\"th\");\r\n\t\t\t\tvar classNames = column.component._column.definition.cssClass ? column.component._column.definition.cssClass.split(\" \") : [];\r\n\r\n\t\t\t\tcellEl.colSpan = column.width;\r\n\t\t\t\tcellEl.rowSpan = column.height;\r\n\r\n\t\t\t\tcellEl.innerHTML = column.value;\r\n\r\n\t\t\t\tif(this.cloneTableStyle){\r\n\t\t\t\t\tcellEl.style.boxSizing = \"border-box\";\r\n\t\t\t\t}\r\n\r\n\t\t\t\tclassNames.forEach(function(className) {\r\n\t\t\t\t\tcellEl.classList.add(className);\r\n\t\t\t\t});\r\n\r\n\t\t\t\tthis.mapElementStyles(column.component.getElement(), cellEl, [\"text-align\", \"border-top\", \"border-left\", \"border-right\", \"border-bottom\", \"background-color\", \"color\", \"font-weight\", \"font-family\", \"font-size\"]);\r\n\t\t\t\tthis.mapElementStyles(column.component._column.contentElement, cellEl, [\"padding-top\", \"padding-left\", \"padding-right\", \"padding-bottom\"]);\r\n\r\n\t\t\t\tif(column.component._column.visible){\r\n\t\t\t\t\tthis.mapElementStyles(column.component.getElement(), cellEl, [\"width\"]);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tif(column.component._column.definition.width){\r\n\t\t\t\t\t\tcellEl.style.width = column.component._column.definition.width + \"px\";\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(column.component._column.parent){\r\n\t\t\t\t\tthis.mapElementStyles(column.component._column.parent.groupElement, cellEl, [\"border-top\"]);\r\n\t\t\t\t}\r\n\r\n\t\t\t\trowEl.appendChild(cellEl);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn rowEl;\r\n\t}\r\n\r\n\tgenereateGroupElement(row, setup, styles){\r\n\r\n\t\tvar rowEl = document.createElement(\"tr\"),\r\n\t\tcellEl = document.createElement(\"td\"),\r\n\t\tgroup = row.columns[0];\r\n\r\n\t\trowEl.classList.add(\"tabulator-print-table-row\");\r\n\r\n\t\tif(setup.groupHeader && setup.groupHeader[row.indent]){\r\n\t\t\tgroup.value = setup.groupHeader[row.indent](group.value, row.component._group.getRowCount(), row.component._group.getData(), row.component);\r\n\t\t}else{\r\n\t\t\tif(setup.groupHeader === false){\r\n\t\t\t\tgroup.value = group.value;\r\n\t\t\t}else{\r\n\t\t\t\tgroup.value = row.component._group.generator(group.value, row.component._group.getRowCount(), row.component._group.getData(), row.component);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tcellEl.colSpan = group.width;\r\n\t\tcellEl.innerHTML = group.value;\r\n\r\n\t\trowEl.classList.add(\"tabulator-print-table-group\");\r\n\t\trowEl.classList.add(\"tabulator-group-level-\" + row.indent);\r\n\r\n\t\tif(group.component.isVisible()){\r\n\t\t\trowEl.classList.add(\"tabulator-group-visible\");\r\n\t\t}\r\n\r\n\t\tthis.mapElementStyles(styles.firstGroup, rowEl, [\"border-top\", \"border-left\", \"border-right\", \"border-bottom\", \"color\", \"font-weight\", \"font-family\", \"font-size\", \"background-color\"]);\r\n\t\tthis.mapElementStyles(styles.firstGroup, cellEl, [\"padding-top\", \"padding-left\", \"padding-right\", \"padding-bottom\"]);\r\n\r\n\t\trowEl.appendChild(cellEl);\r\n\r\n\t\treturn rowEl;\r\n\t}\r\n\r\n\tgenereateCalcElement(row, setup, styles){\r\n\t\tvar rowEl = this.genereateRowElement(row, setup, styles);\r\n\r\n\t\trowEl.classList.add(\"tabulator-print-table-calcs\");\r\n\t\tthis.mapElementStyles(styles.calcRow, rowEl, [\"border-top\", \"border-left\", \"border-right\", \"border-bottom\", \"color\", \"font-weight\", \"font-family\", \"font-size\", \"background-color\"]);\r\n\r\n\t\treturn rowEl;\r\n\t}\r\n\r\n\tgenereateRowElement(row, setup, styles){\r\n\t\tvar rowEl = document.createElement(\"tr\");\r\n\r\n\t\trowEl.classList.add(\"tabulator-print-table-row\");\r\n\r\n\t\trow.columns.forEach((col) => {\r\n\r\n\t\t\tif(col){\r\n\t\t\t\tvar cellEl = document.createElement(\"td\"),\r\n\t\t\t\tcolumn = col.component._column,\r\n\t\t\t\tvalue = col.value;\r\n\r\n\t\t\t\tvar cellWrapper = {\r\n\t\t\t\t\tmodules:{},\r\n\t\t\t\t\tgetValue:function(){\r\n\t\t\t\t\t\treturn value;\r\n\t\t\t\t\t},\r\n\t\t\t\t\tgetField:function(){\r\n\t\t\t\t\t\treturn column.definition.field;\r\n\t\t\t\t\t},\r\n\t\t\t\t\tgetElement:function(){\r\n\t\t\t\t\t\treturn cellEl;\r\n\t\t\t\t\t},\r\n\t\t\t\t\tgetColumn:function(){\r\n\t\t\t\t\t\treturn column.getComponent();\r\n\t\t\t\t\t},\r\n\t\t\t\t\tgetData:function(){\r\n\t\t\t\t\t\treturn row.component.getData();\r\n\t\t\t\t\t},\r\n\t\t\t\t\tgetRow:function(){\r\n\t\t\t\t\t\treturn row.component;\r\n\t\t\t\t\t},\r\n\t\t\t\t\tgetComponent:function(){\r\n\t\t\t\t\t\treturn cellWrapper;\r\n\t\t\t\t\t},\r\n\t\t\t\t\tcolumn:column,\r\n\t\t\t\t};\r\n\r\n\t\t\t\tvar classNames = column.definition.cssClass ? column.definition.cssClass.split(\" \") : [];\r\n\r\n\t\t\t\tclassNames.forEach(function(className) {\r\n\t\t\t\t\tcellEl.classList.add(className);\r\n\t\t\t\t});\r\n\r\n\t\t\t\tif(this.table.modExists(\"format\") && this.config.formatCells !== false){\r\n\t\t\t\t\tvalue = this.table.modules.format.formatExportValue(cellWrapper, this.colVisProp);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tswitch(typeof value){\r\n\t\t\t\t\t\tcase \"object\":\r\n\t\t\t\t\t\tvalue = JSON.stringify(value);\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\tcase \"undefined\":\r\n\t\t\t\t\t\tcase \"null\":\r\n\t\t\t\t\t\tvalue = \"\";\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\tdefault:\r\n\t\t\t\t\t\tvalue = value;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(value instanceof Node){\r\n\t\t\t\t\tcellEl.appendChild(value);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tcellEl.innerHTML = value;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(styles.firstCell){\r\n\t\t\t\t\tthis.mapElementStyles(styles.firstCell, cellEl, [\"padding-top\", \"padding-left\", \"padding-right\", \"padding-bottom\", \"border-top\", \"border-left\", \"border-right\", \"border-bottom\", \"color\", \"font-weight\", \"font-family\", \"font-size\"]);\r\n\r\n\t\t\t\t\tif(column.definition.align){\r\n\t\t\t\t\t\tcellEl.style.textAlign = column.definition.align;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(this.table.options.dataTree && this.config.dataTree !== false){\r\n\t\t\t\t\tif((setup.treeElementField && setup.treeElementField == column.field) || (!setup.treeElementField && i == 0)){\r\n\t\t\t\t\t\tif(row.component._row.modules.dataTree.controlEl){\r\n\t\t\t\t\t\t\tcellEl.insertBefore(row.component._row.modules.dataTree.controlEl.cloneNode(true), cellEl.firstChild);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif(row.component._row.modules.dataTree.branchEl){\r\n\t\t\t\t\t\t\tcellEl.insertBefore(row.component._row.modules.dataTree.branchEl.cloneNode(true), cellEl.firstChild);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\trowEl.appendChild(cellEl);\r\n\r\n\t\t\t\tif(cellWrapper.modules.format && cellWrapper.modules.format.renderedCallback){\r\n\t\t\t\t\tcellWrapper.modules.format.renderedCallback();\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(setup.rowFormatter && this.config.formatCells !== false){\r\n\t\t\t\t\tsetup.rowFormatter(row.component);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn rowEl;\r\n\t}\r\n\r\n\tgenereateHTMLTable(list){\r\n\t\tvar holder = document.createElement(\"div\");\r\n\r\n\t\tholder.appendChild(this.genereateTableElement(list));\r\n\r\n\t\treturn holder.innerHTML;\r\n\t}\r\n\r\n\tgetHtml(visible, style, config, colVisProp){\r\n\t\tvar list = this.generateExportList(config || this.table.options.htmlOutputConfig, style, visible, colVisProp || \"htmlOutput\");\r\n\r\n\t\treturn this.genereateHTMLTable(list);\r\n\t}\r\n\r\n\tmapElementStyles(from, to, props){\r\n\t\tif(this.cloneTableStyle && from && to){\r\n\r\n\t\t\tvar lookup = {\r\n\t\t\t\t\"background-color\" : \"backgroundColor\",\r\n\t\t\t\t\"color\" : \"fontColor\",\r\n\t\t\t\t\"width\" : \"width\",\r\n\t\t\t\t\"font-weight\" : \"fontWeight\",\r\n\t\t\t\t\"font-family\" : \"fontFamily\",\r\n\t\t\t\t\"font-size\" : \"fontSize\",\r\n\t\t\t\t\"text-align\" : \"textAlign\",\r\n\t\t\t\t\"border-top\" : \"borderTop\",\r\n\t\t\t\t\"border-left\" : \"borderLeft\",\r\n\t\t\t\t\"border-right\" : \"borderRight\",\r\n\t\t\t\t\"border-bottom\" : \"borderBottom\",\r\n\t\t\t\t\"padding-top\" : \"paddingTop\",\r\n\t\t\t\t\"padding-left\" : \"paddingLeft\",\r\n\t\t\t\t\"padding-right\" : \"paddingRight\",\r\n\t\t\t\t\"padding-bottom\" : \"paddingBottom\",\r\n\t\t\t};\r\n\r\n\t\t\tif(window.getComputedStyle){\r\n\t\t\t\tvar fromStyle = window.getComputedStyle(from);\r\n\r\n\t\t\t\tprops.forEach(function(prop){\r\n\t\t\t\t\tto.style[lookup[prop]] = fromStyle.getPropertyValue(prop);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n\r\nExport.moduleName = \"export\";\r\n\r\nexport default Export;\r\n","export default {\r\n\r\n\t//equal to\r\n\t\"=\":function(filterVal, rowVal, rowData, filterParams){\r\n\t\treturn rowVal == filterVal ? true : false;\r\n\t},\r\n\r\n\t//less than\r\n\t\"<\":function(filterVal, rowVal, rowData, filterParams){\r\n\t\treturn rowVal < filterVal ? true : false;\r\n\t},\r\n\r\n\t//less than or equal to\r\n\t\"<=\":function(filterVal, rowVal, rowData, filterParams){\r\n\t\treturn rowVal <= filterVal ? true : false;\r\n\t},\r\n\r\n\t//greater than\r\n\t\">\":function(filterVal, rowVal, rowData, filterParams){\r\n\t\treturn rowVal > filterVal ? true : false;\r\n\t},\r\n\r\n\t//greater than or equal to\r\n\t\">=\":function(filterVal, rowVal, rowData, filterParams){\r\n\t\treturn rowVal >= filterVal ? true : false;\r\n\t},\r\n\r\n\t//not equal to\r\n\t\"!=\":function(filterVal, rowVal, rowData, filterParams){\r\n\t\treturn rowVal != filterVal ? true : false;\r\n\t},\r\n\r\n\t\"regex\":function(filterVal, rowVal, rowData, filterParams){\r\n\r\n\t\tif(typeof filterVal == \"string\"){\r\n\t\t\tfilterVal = new RegExp(filterVal);\r\n\t\t}\r\n\r\n\t\treturn filterVal.test(rowVal);\r\n\t},\r\n\r\n\t//contains the string\r\n\t\"like\":function(filterVal, rowVal, rowData, filterParams){\r\n\t\tif(filterVal === null || typeof filterVal === \"undefined\"){\r\n\t\t\treturn rowVal === filterVal ? true : false;\r\n\t\t}else{\r\n\t\t\tif(typeof rowVal !== 'undefined' && rowVal !== null){\r\n\t\t\t\treturn String(rowVal).toLowerCase().indexOf(filterVal.toLowerCase()) > -1;\r\n\t\t\t}\r\n\t\t\telse{\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\t//contains the keywords\r\n\t\"keywords\":function(filterVal, rowVal, rowData, filterParams){\r\n\t\tvar keywords = filterVal.toLowerCase().split(typeof filterParams.separator === \"undefined\" ? \" \" : filterParams.separator),\r\n\t\tvalue = String(rowVal === null || typeof rowVal === \"undefined\" ? \"\" : rowVal).toLowerCase(),\r\n\t\tmatches = [];\r\n\r\n\t\tkeywords.forEach((keyword) =>{\r\n\t\t\tif(value.includes(keyword)){\r\n\t\t\t\tmatches.push(true);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn filterParams.matchAll ? matches.length === keywords.length : !!matches.length;\r\n\t},\r\n\r\n\t//starts with the string\r\n\t\"starts\":function(filterVal, rowVal, rowData, filterParams){\r\n\t\tif(filterVal === null || typeof filterVal === \"undefined\"){\r\n\t\t\treturn rowVal === filterVal ? true : false;\r\n\t\t}else{\r\n\t\t\tif(typeof rowVal !== 'undefined' && rowVal !== null){\r\n\t\t\t\treturn String(rowVal).toLowerCase().startsWith(filterVal.toLowerCase());\r\n\t\t\t}\r\n\t\t\telse{\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\t//ends with the string\r\n\t\"ends\":function(filterVal, rowVal, rowData, filterParams){\r\n\t\tif(filterVal === null || typeof filterVal === \"undefined\"){\r\n\t\t\treturn rowVal === filterVal ? true : false;\r\n\t\t}else{\r\n\t\t\tif(typeof rowVal !== 'undefined' && rowVal !== null){\r\n\t\t\t\treturn String(rowVal).toLowerCase().endsWith(filterVal.toLowerCase());\r\n\t\t\t}\r\n\t\t\telse{\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\t//in array\r\n\t\"in\":function(filterVal, rowVal, rowData, filterParams){\r\n\t\tif(Array.isArray(filterVal)){\r\n\t\t\treturn filterVal.length ? filterVal.indexOf(rowVal) > -1 : true;\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Filter Error - filter value is not an array:\", filterVal);\r\n\t\t\treturn false;\r\n\t\t}\r\n\t},\r\n};","import Module from '../../core/Module.js';\r\n\r\nimport defaultFilters from './defaults/filters.js';\r\n\r\nclass Filter extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.filterList = []; //hold filter list\r\n\t\tthis.headerFilters = {}; //hold column filters\r\n\t\tthis.headerFilterColumns = []; //hold columns that use header filters\r\n\r\n\t\tthis.prevHeaderFilterChangeCheck = \"\";\r\n\t\tthis.prevHeaderFilterChangeCheck = \"{}\";\r\n\r\n\t\tthis.changed = false; //has filtering changed since last render\r\n\t}\r\n\r\n\t//initialize column header filter\r\n\tinitializeColumn(column, value){\r\n\t\tvar self = this,\r\n\t\tfield = column.getField(),\r\n\t\tparams;\r\n\r\n\t\t//handle successfull value change\r\n\t\tfunction success(value){\r\n\t\t\tvar filterType = (column.modules.filter.tagType == \"input\" && column.modules.filter.attrType == \"text\") || column.modules.filter.tagType == \"textarea\" ? \"partial\" : \"match\",\r\n\t\t\ttype = \"\",\r\n\t\t\tfilterChangeCheck = \"\",\r\n\t\t\tfilterFunc;\r\n\r\n\t\t\tif(typeof column.modules.filter.prevSuccess === \"undefined\" || column.modules.filter.prevSuccess !== value){\r\n\r\n\t\t\t\tcolumn.modules.filter.prevSuccess = value;\r\n\r\n\t\t\t\tif(!column.modules.filter.emptyFunc(value)){\r\n\t\t\t\t\tcolumn.modules.filter.value = value;\r\n\r\n\t\t\t\t\tswitch(typeof column.definition.headerFilterFunc){\r\n\t\t\t\t\t\tcase \"string\":\r\n\t\t\t\t\t\tif(Filter.filters[column.definition.headerFilterFunc]){\r\n\t\t\t\t\t\t\ttype = column.definition.headerFilterFunc;\r\n\t\t\t\t\t\t\tfilterFunc = function(data){\r\n\t\t\t\t\t\t\t\tvar params = column.definition.headerFilterFuncParams || {};\r\n\t\t\t\t\t\t\t\tvar fieldVal = column.getFieldValue(data);\r\n\r\n\t\t\t\t\t\t\t\tparams = typeof params === \"function\" ? params(value, fieldVal, data) : params;\r\n\r\n\t\t\t\t\t\t\t\treturn Filter.filters[column.definition.headerFilterFunc](value, fieldVal, data, params);\r\n\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\tconsole.warn(\"Header Filter Error - Matching filter function not found: \", column.definition.headerFilterFunc);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\tcase \"function\":\r\n\t\t\t\t\t\tfilterFunc = function(data){\r\n\t\t\t\t\t\t\tvar params = column.definition.headerFilterFuncParams || {};\r\n\t\t\t\t\t\t\tvar fieldVal = column.getFieldValue(data);\r\n\r\n\t\t\t\t\t\t\tparams = typeof params === \"function\" ? params(value, fieldVal, data) : params;\r\n\r\n\t\t\t\t\t\t\treturn column.definition.headerFilterFunc(value, fieldVal, data, params);\r\n\t\t\t\t\t\t};\r\n\r\n\t\t\t\t\t\ttype = filterFunc;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif(!filterFunc){\r\n\t\t\t\t\t\tswitch(filterType){\r\n\t\t\t\t\t\t\tcase \"partial\":\r\n\t\t\t\t\t\t\tfilterFunc = function(data){\r\n\t\t\t\t\t\t\t\tvar colVal = column.getFieldValue(data);\r\n\r\n\t\t\t\t\t\t\t\tif(typeof colVal !== 'undefined' && colVal !== null){\r\n\t\t\t\t\t\t\t\t\treturn String(colVal).toLowerCase().indexOf(String(value).toLowerCase()) > -1;\r\n\t\t\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t\ttype = \"like\";\r\n\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\t\tdefault:\r\n\t\t\t\t\t\t\tfilterFunc = function(data){\r\n\t\t\t\t\t\t\t\treturn column.getFieldValue(data) == value;\r\n\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t\ttype = \"=\";\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tself.headerFilters[field] = {value:value, func:filterFunc, type:type, params:params || {}};\r\n\r\n\t\t\t\t}else{\r\n\t\t\t\t\tdelete self.headerFilters[field];\r\n\t\t\t\t}\r\n\r\n\t\t\t\tfilterChangeCheck = JSON.stringify(self.headerFilters);\r\n\r\n\t\t\t\tif(self.prevHeaderFilterChangeCheck !== filterChangeCheck){\r\n\t\t\t\t\tself.prevHeaderFilterChangeCheck = filterChangeCheck;\r\n\r\n\t\t\t\t\tself.changed = true;\r\n\t\t\t\t\tself.table.rowManager.filterRefresh();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\tcolumn.modules.filter = {\r\n\t\t\tsuccess:success,\r\n\t\t\tattrType:false,\r\n\t\t\ttagType:false,\r\n\t\t\temptyFunc:false,\r\n\t\t};\r\n\r\n\t\tthis.generateHeaderFilterElement(column);\r\n\t}\r\n\r\n\tgenerateHeaderFilterElement(column, initialValue, reinitialize){\r\n\t\tvar self = this,\r\n\t\tsuccess = column.modules.filter.success,\r\n\t\tfield = column.getField(),\r\n\t\tfilterElement, editor, editorElement, cellWrapper, typingTimer, searchTrigger, params;\r\n\r\n\t\t//handle aborted edit\r\n\t\tfunction cancel(){}\r\n\r\n\t\tif(column.modules.filter.headerElement && column.modules.filter.headerElement.parentNode){\r\n\t\t\tcolumn.contentElement.removeChild(column.modules.filter.headerElement.parentNode);\r\n\t\t}\r\n\r\n\t\tif(field){\r\n\r\n\t\t\t//set empty value function\r\n\t\t\tcolumn.modules.filter.emptyFunc = column.definition.headerFilterEmptyCheck || function(value){\r\n\t\t\t\treturn !value && value !== \"0\" && value !== 0;\r\n\t\t\t};\r\n\r\n\t\t\tfilterElement = document.createElement(\"div\");\r\n\t\t\tfilterElement.classList.add(\"tabulator-header-filter\");\r\n\r\n\t\t\t//set column editor\r\n\t\t\tswitch(typeof column.definition.headerFilter){\r\n\t\t\t\tcase \"string\":\r\n\t\t\t\tif(self.table.modules.edit.editors[column.definition.headerFilter]){\r\n\t\t\t\t\teditor = self.table.modules.edit.editors[column.definition.headerFilter];\r\n\r\n\t\t\t\t\tif((column.definition.headerFilter === \"tick\" || column.definition.headerFilter === \"tickCross\") && !column.definition.headerFilterEmptyCheck){\r\n\t\t\t\t\t\tcolumn.modules.filter.emptyFunc = function(value){\r\n\t\t\t\t\t\t\treturn value !== true && value !== false;\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t}\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.warn(\"Filter Error - Cannot build header filter, No such editor found: \", column.definition.editor);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"function\":\r\n\t\t\t\teditor = column.definition.headerFilter;\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"boolean\":\r\n\t\t\t\tif(column.modules.edit && column.modules.edit.editor){\r\n\t\t\t\t\teditor = column.modules.edit.editor;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tif(column.definition.formatter && self.table.modules.edit.editors[column.definition.formatter]){\r\n\t\t\t\t\t\teditor = self.table.modules.edit.editors[column.definition.formatter];\r\n\r\n\t\t\t\t\t\tif((column.definition.formatter === \"tick\" || column.definition.formatter === \"tickCross\") && !column.definition.headerFilterEmptyCheck){\r\n\t\t\t\t\t\t\tcolumn.modules.filter.emptyFunc = function(value){\r\n\t\t\t\t\t\t\t\treturn value !== true && value !== false;\r\n\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\teditor = self.table.modules.edit.editors[\"input\"];\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\r\n\t\t\tif(editor){\r\n\r\n\t\t\t\tcellWrapper = {\r\n\t\t\t\t\tgetValue:function(){\r\n\t\t\t\t\t\treturn typeof initialValue !== \"undefined\" ? initialValue : \"\";\r\n\t\t\t\t\t},\r\n\t\t\t\t\tgetField:function(){\r\n\t\t\t\t\t\treturn column.definition.field;\r\n\t\t\t\t\t},\r\n\t\t\t\t\tgetElement:function(){\r\n\t\t\t\t\t\treturn filterElement;\r\n\t\t\t\t\t},\r\n\t\t\t\t\tgetColumn:function(){\r\n\t\t\t\t\t\treturn column.getComponent();\r\n\t\t\t\t\t},\r\n\t\t\t\t\tgetRow:function(){\r\n\t\t\t\t\t\treturn {\r\n\t\t\t\t\t\t\tnormalizeHeight:function(){\r\n\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t}\r\n\t\t\t\t};\r\n\r\n\t\t\t\tparams = column.definition.headerFilterParams || {};\r\n\r\n\t\t\t\tparams = typeof params === \"function\" ? params.call(self.table) : params;\r\n\r\n\t\t\t\teditorElement = editor.call(this.table.modules.edit, cellWrapper, function(){}, success, cancel, params);\r\n\r\n\t\t\t\tif(!editorElement){\r\n\t\t\t\t\tconsole.warn(\"Filter Error - Cannot add filter to \" + field + \" column, editor returned a value of false\");\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(!(editorElement instanceof Node)){\r\n\t\t\t\t\tconsole.warn(\"Filter Error - Cannot add filter to \" + field + \" column, editor should return an instance of Node, the editor returned:\", editorElement);\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//set Placeholder Text\r\n\t\t\t\tif(field){\r\n\t\t\t\t\tself.table.modules.localize.bind(\"headerFilters|columns|\" + column.definition.field, function(value){\r\n\t\t\t\t\t\teditorElement.setAttribute(\"placeholder\", typeof value !== \"undefined\" && value ? value : self.table.modules.localize.getText(\"headerFilters|default\"));\r\n\t\t\t\t\t});\r\n\t\t\t\t}else{\r\n\t\t\t\t\tself.table.modules.localize.bind(\"headerFilters|default\", function(value){\r\n\t\t\t\t\t\teditorElement.setAttribute(\"placeholder\", typeof self.column.definition.headerFilterPlaceholder !== \"undefined\" && self.column.definition.headerFilterPlaceholder ? self.column.definition.headerFilterPlaceholder : value);\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//focus on element on click\r\n\t\t\t\teditorElement.addEventListener(\"click\", function(e){\r\n\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\teditorElement.focus();\r\n\t\t\t\t});\r\n\r\n\t\t\t\teditorElement.addEventListener(\"focus\", (e) => {\r\n\t\t\t\t\tvar left = this.table.columnManager.element.scrollLeft;\r\n\r\n\t\t\t\t\tif(left !== this.table.rowManager.element.scrollLeft){\r\n\t\t\t\t\t\tthis.table.rowManager.scrollHorizontal(left);\r\n\t\t\t\t\t\tthis.table.columnManager.scrollHorizontal(left);\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\t//live update filters as user types\r\n\t\t\t\ttypingTimer = false;\r\n\r\n\t\t\t\tsearchTrigger = function(e){\r\n\t\t\t\t\tif(typingTimer){\r\n\t\t\t\t\t\tclearTimeout(typingTimer);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\ttypingTimer = setTimeout(function(){\r\n\t\t\t\t\t\tsuccess(editorElement.value);\r\n\t\t\t\t\t},self.table.options.headerFilterLiveFilterDelay);\r\n\t\t\t\t};\r\n\r\n\t\t\t\tcolumn.modules.filter.headerElement = editorElement;\r\n\t\t\t\tcolumn.modules.filter.attrType = editorElement.hasAttribute(\"type\") ? editorElement.getAttribute(\"type\").toLowerCase() : \"\" ;\r\n\t\t\t\tcolumn.modules.filter.tagType = editorElement.tagName.toLowerCase();\r\n\r\n\t\t\t\tif(column.definition.headerFilterLiveFilter !== false){\r\n\r\n\t\t\t\t\tif (\r\n\t\t\t\t\t\t!(\r\n\t\t\t\t\t\t\tcolumn.definition.headerFilter === 'autocomplete' ||\r\n\t\t\t\t\t\t\tcolumn.definition.headerFilter === 'tickCross' ||\r\n\t\t\t\t\t\t\t((column.definition.editor === 'autocomplete' ||\r\n\t\t\t\t\t\t\t\tcolumn.definition.editor === 'tickCross') &&\r\n\t\t\t\t\t\t\tcolumn.definition.headerFilter === true)\r\n\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t) {\r\n\t\t\t\t\t\teditorElement.addEventListener(\"keyup\", searchTrigger);\r\n\t\t\t\t\teditorElement.addEventListener(\"search\", searchTrigger);\r\n\r\n\r\n\t\t\t\t\t//update number filtered columns on change\r\n\t\t\t\t\tif(column.modules.filter.attrType == \"number\"){\r\n\t\t\t\t\t\teditorElement.addEventListener(\"change\", function(e){\r\n\t\t\t\t\t\t\tsuccess(editorElement.value);\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t//change text inputs to search inputs to allow for clearing of field\r\n\t\t\t\t\tif(column.modules.filter.attrType == \"text\" && this.table.browser !== \"ie\"){\r\n\t\t\t\t\t\teditorElement.setAttribute(\"type\", \"search\");\r\n\t\t\t\t\t\t// editorElement.off(\"change blur\"); //prevent blur from triggering filter and preventing selection click\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\t\t//prevent input and select elements from propegating click to column sorters etc\r\n\t\t\t\t\tif(column.modules.filter.tagType == \"input\" || column.modules.filter.tagType == \"select\" || column.modules.filter.tagType == \"textarea\"){\r\n\t\t\t\t\t\teditorElement.addEventListener(\"mousedown\",function(e){\r\n\t\t\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tfilterElement.appendChild(editorElement);\r\n\r\n\t\t\t\tcolumn.contentElement.appendChild(filterElement);\r\n\r\n\t\t\t\tif(!reinitialize){\r\n\t\t\t\t\tself.headerFilterColumns.push(column);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Filter Error - Cannot add header filter, column has no field set:\", column.definition.title);\r\n\t\t}\r\n\t}\r\n\r\n\t//hide all header filter elements (used to ensure correct column widths in \"fitData\" layout mode)\r\n\thideHeaderFilterElements(){\r\n\t\tthis.headerFilterColumns.forEach(function(column){\r\n\t\t\tif(column.modules.filter && column.modules.filter.headerElement){\r\n\t\t\t\tcolumn.modules.filter.headerElement.style.display = 'none';\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t//show all header filter elements (used to ensure correct column widths in \"fitData\" layout mode)\r\n\tshowHeaderFilterElements(){\r\n\t\tthis.headerFilterColumns.forEach(function(column){\r\n\t\t\tif(column.modules.filter && column.modules.filter.headerElement){\r\n\t\t\t\tcolumn.modules.filter.headerElement.style.display = '';\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t//programatically set focus of header filter\r\n\tsetHeaderFilterFocus(column){\r\n\t\tif(column.modules.filter && column.modules.filter.headerElement){\r\n\t\t\tcolumn.modules.filter.headerElement.focus();\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Column Filter Focus Error - No header filter set on column:\", column.getField());\r\n\t\t}\r\n\t}\r\n\r\n\t//programmatically get value of header filter\r\n\tgetHeaderFilterValue(column){\r\n\t\tif(column.modules.filter && column.modules.filter.headerElement){\r\n\t\t\treturn column.modules.filter.headerElement.value;\r\n\t\t} else {\r\n\t\t\tconsole.warn(\"Column Filter Error - No header filter set on column:\", column.getField());\r\n\t\t}\r\n\t}\r\n\r\n\t//programatically set value of header filter\r\n\tsetHeaderFilterValue(column, value){\r\n\t\tif (column){\r\n\t\t\tif(column.modules.filter && column.modules.filter.headerElement){\r\n\t\t\t\tthis.generateHeaderFilterElement(column, value, true);\r\n\t\t\t\tcolumn.modules.filter.success(value);\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Column Filter Error - No header filter set on column:\", column.getField());\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\treloadHeaderFilter(column){\r\n\t\tif (column){\r\n\t\t\tif(column.modules.filter && column.modules.filter.headerElement){\r\n\t\t\t\tthis.generateHeaderFilterElement(column, column.modules.filter.value, true);\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Column Filter Error - No header filter set on column:\", column.getField());\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//check if the filters has changed since last use\r\n\thasChanged(){\r\n\t\tvar changed = this.changed;\r\n\t\tthis.changed = false;\r\n\t\treturn changed;\r\n\t}\r\n\r\n\t//set standard filters\r\n\tsetFilter(field, type, value, params){\r\n\t\tvar self = this;\r\n\r\n\t\tself.filterList = [];\r\n\r\n\t\tif(!Array.isArray(field)){\r\n\t\t\tfield = [{field:field, type:type, value:value, params:params}];\r\n\t\t}\r\n\r\n\t\tself.addFilter(field);\r\n\t}\r\n\r\n\t//add filter to array\r\n\taddFilter(field, type, value, params){\r\n\t\tvar self = this;\r\n\r\n\t\tif(!Array.isArray(field)){\r\n\t\t\tfield = [{field:field, type:type, value:value, params:params}];\r\n\t\t}\r\n\r\n\t\tfield.forEach(function(filter){\r\n\r\n\t\t\tfilter = self.findFilter(filter);\r\n\r\n\t\t\tif(filter){\r\n\t\t\t\tself.filterList.push(filter);\r\n\r\n\t\t\t\tself.changed = true;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tif(this.table.options.persistence && this.table.modExists(\"persistence\", true) && this.table.modules.persistence.config.filter){\r\n\t\t\tthis.table.modules.persistence.save(\"filter\");\r\n\t\t}\r\n\t}\r\n\r\n\tfindFilter(filter){\r\n\t\tvar self = this,\r\n\t\tcolumn;\r\n\r\n\t\tif(Array.isArray(filter)){\r\n\t\t\treturn this.findSubFilters(filter);\r\n\t\t}\r\n\r\n\t\tvar filterFunc = false;\r\n\r\n\t\tif(typeof filter.field == \"function\"){\r\n\t\t\tfilterFunc = function(data){\r\n\t\t\t\treturn filter.field(data, filter.type || {})// pass params to custom filter function\r\n\t\t\t};\r\n\t\t}else{\r\n\r\n\t\t\tif(Filter.filters[filter.type]){\r\n\r\n\t\t\t\tcolumn = self.table.columnManager.getColumnByField(filter.field);\r\n\r\n\t\t\t\tif(column){\r\n\t\t\t\t\tfilterFunc = function(data){\r\n\t\t\t\t\t\treturn Filter.filters[filter.type](filter.value, column.getFieldValue(data), data, filter.params || {});\r\n\t\t\t\t\t};\r\n\t\t\t\t}else{\r\n\t\t\t\t\tfilterFunc = function(data){\r\n\t\t\t\t\t\treturn Filter.filters[filter.type](filter.value, data[filter.field], data, filter.params || {});\r\n\t\t\t\t\t};\r\n\t\t\t\t}\r\n\r\n\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Filter Error - No such filter type found, ignoring: \", filter.type);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfilter.func = filterFunc;\r\n\r\n\t\treturn filter.func ? filter : false;\r\n\t}\r\n\r\n\tfindSubFilters(filters){\r\n\t\tvar self = this,\r\n\t\toutput = [];\r\n\r\n\t\tfilters.forEach(function(filter){\r\n\t\t\tfilter = self.findFilter(filter);\r\n\r\n\t\t\tif(filter){\r\n\t\t\t\toutput.push(filter);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn output.length ? output : false;\r\n\t}\r\n\r\n\t//get all filters\r\n\tgetFilters(all, ajax){\r\n\t\tvar output = [];\r\n\r\n\t\tif(all){\r\n\t\t\toutput = this.getHeaderFilters();\r\n\t\t}\r\n\r\n\t\tif(ajax){\r\n\t\t\toutput.forEach(function(item){\r\n\t\t\t\tif(typeof item.type == \"function\"){\r\n\t\t\t\t\titem.type = \"function\";\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\toutput = output.concat(this.filtersToArray(this.filterList, ajax));\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\t//filter to Object\r\n\tfiltersToArray(filterList, ajax){\r\n\t\tvar output = [];\r\n\r\n\t\tfilterList.forEach((filter) => {\r\n\t\t\tvar item;\r\n\r\n\t\t\tif(Array.isArray(filter)){\r\n\t\t\t\toutput.push(this.filtersToArray(filter, ajax));\r\n\t\t\t}else{\r\n\t\t\t\titem = {field:filter.field, type:filter.type, value:filter.value}\r\n\r\n\t\t\t\tif(ajax){\r\n\t\t\t\t\tif(typeof item.type == \"function\"){\r\n\t\t\t\t\t\titem.type = \"function\";\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\toutput.push(item);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\t//get all filters\r\n\tgetHeaderFilters(){\r\n\t\tvar self = this,\r\n\t\toutput = [];\r\n\r\n\t\tfor(var key in this.headerFilters){\r\n\t\t\toutput.push({field:key, type:this.headerFilters[key].type, value:this.headerFilters[key].value});\r\n\t\t}\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\t//remove filter from array\r\n\tremoveFilter(field, type, value){\r\n\t\tvar self = this;\r\n\r\n\t\tif(!Array.isArray(field)){\r\n\t\t\tfield = [{field:field, type:type, value:value}];\r\n\t\t}\r\n\r\n\t\tfield.forEach(function(filter){\r\n\t\t\tvar index = -1;\r\n\r\n\t\t\tif(typeof filter.field == \"object\"){\r\n\t\t\t\tindex = self.filterList.findIndex(function(element){\r\n\t\t\t\t\treturn filter === element;\r\n\t\t\t\t});\r\n\t\t\t}else{\r\n\t\t\t\tindex = self.filterList.findIndex(function(element){\r\n\t\t\t\t\treturn filter.field === element.field && filter.type === element.type && filter.value === element.value;\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\tif(index > -1){\r\n\t\t\t\tself.filterList.splice(index, 1);\r\n\t\t\t\tself.changed = true;\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Filter Error - No matching filter type found, ignoring: \", filter.type);\r\n\t\t\t}\r\n\r\n\t\t});\r\n\r\n\t\tif(this.table.options.persistence && this.table.modExists(\"persistence\", true) && this.table.modules.persistence.config.filter){\r\n\t\t\tthis.table.modules.persistence.save(\"filter\");\r\n\t\t}\r\n\t}\r\n\r\n\t//clear filters\r\n\tclearFilter(all){\r\n\t\tthis.filterList = [];\r\n\r\n\t\tif(all){\r\n\t\t\tthis.clearHeaderFilter();\r\n\t\t}\r\n\r\n\t\tthis.changed = true;\r\n\r\n\t\tif(this.table.options.persistence && this.table.modExists(\"persistence\", true) && this.table.modules.persistence.config.filter){\r\n\t\t\tthis.table.modules.persistence.save(\"filter\");\r\n\t\t}\r\n\t}\r\n\r\n\t//clear header filters\r\n\tclearHeaderFilter(){\r\n\t\tvar self = this;\r\n\r\n\t\tthis.headerFilters = {};\r\n\t\tself.prevHeaderFilterChangeCheck = \"{}\";\r\n\r\n\t\tthis.headerFilterColumns.forEach(function(column){\r\n\t\t\tif(typeof column.modules.filter.value !== \"undefined\"){\r\n\t\t\t\tdelete column.modules.filter.value;\r\n\t\t\t}\r\n\t\t\tcolumn.modules.filter.prevSuccess = undefined;\r\n\t\t\tself.reloadHeaderFilter(column);\r\n\t\t});\r\n\r\n\t\tthis.changed = true;\r\n\t}\r\n\r\n\t//search data and return matching rows\r\n\tsearch (searchType, field, type, value){\r\n\t\tvar self = this,\r\n\t\tactiveRows = [],\r\n\t\tfilterList = [];\r\n\r\n\t\tif(!Array.isArray(field)){\r\n\t\t\tfield = [{field:field, type:type, value:value}];\r\n\t\t}\r\n\r\n\t\tfield.forEach(function(filter){\r\n\t\t\tfilter = self.findFilter(filter);\r\n\r\n\t\t\tif(filter){\r\n\t\t\t\tfilterList.push(filter);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tthis.table.rowManager.rows.forEach(function(row){\r\n\t\t\tvar match = true;\r\n\r\n\t\t\tfilterList.forEach(function(filter){\r\n\t\t\t\tif(!self.filterRecurse(filter, row.getData())){\r\n\t\t\t\t\tmatch = false;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tif(match){\r\n\t\t\t\tactiveRows.push(searchType === \"data\" ? row.getData(\"data\") : row.getComponent());\r\n\t\t\t}\r\n\r\n\t\t});\r\n\r\n\t\treturn activeRows;\r\n\t}\r\n\r\n\t//filter row array\r\n\tfilter(rowList, filters){\r\n\t\tvar self = this,\r\n\t\tactiveRows = [],\r\n\t\tactiveRowComponents = [];\r\n\r\n\t\tif(self.table.options.dataFiltering){\r\n\t\t\tself.table.options.dataFiltering.call(self.table, self.getFilters());\r\n\t\t}\r\n\r\n\t\tif(!self.table.options.ajaxFiltering && (self.filterList.length || Object.keys(self.headerFilters).length)){\r\n\r\n\t\t\trowList.forEach(function(row){\r\n\t\t\t\tif(self.filterRow(row)){\r\n\t\t\t\t\tactiveRows.push(row);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t}else{\r\n\t\t\tactiveRows = rowList.slice(0);\r\n\t\t}\r\n\r\n\t\tif(self.table.options.dataFiltered){\r\n\r\n\t\t\tactiveRows.forEach(function(row){\r\n\t\t\t\tactiveRowComponents.push(row.getComponent());\r\n\t\t\t});\r\n\r\n\t\t\tself.table.options.dataFiltered.call(self.table, self.getFilters(), activeRowComponents);\r\n\t\t}\r\n\r\n\t\treturn activeRows;\r\n\t}\r\n\r\n\t//filter individual row\r\n\tfilterRow(row, filters){\r\n\t\tvar self = this,\r\n\t\tmatch = true,\r\n\t\tdata = row.getData();\r\n\r\n\t\tself.filterList.forEach(function(filter){\r\n\t\t\tif(!self.filterRecurse(filter, data)){\r\n\t\t\t\tmatch = false;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\r\n\t\tfor(var field in self.headerFilters){\r\n\t\t\tif(!self.headerFilters[field].func(data)){\r\n\t\t\t\tmatch = false;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn match;\r\n\t}\r\n\r\n\tfilterRecurse(filter, data){\r\n\t\tvar self = this,\r\n\t\tmatch = false;\r\n\r\n\t\tif(Array.isArray(filter)){\r\n\t\t\tfilter.forEach(function(subFilter){\r\n\t\t\t\tif(self.filterRecurse(subFilter, data)){\r\n\t\t\t\t\tmatch = true;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tmatch = filter.func(data);\r\n\t\t}\r\n\r\n\t\treturn match;\r\n\t}\r\n}\r\n\r\nFilter.moduleName = \"filter\";\r\n\r\n//load defaults\r\nFilter.filters = defaultFilters;\r\n\r\nexport default Filter;","export default function(cell, formatterParams, onRendered){\r\n\treturn this.emptyToSpace(this.sanitizeHTML(cell.getValue()));\r\n};","import plaintext from './formatters/plaintext.js';\r\nimport html from './formatters/html.js';\r\nimport textarea from './formatters/textarea.js';\r\nimport money from './formatters/money.js';\r\nimport link from './formatters/link.js';\r\nimport image from './formatters/image.js';\r\nimport tickCross from './formatters/tickCross.js';\r\nimport datetime from './formatters/datetime.js';\r\nimport datetimediff from './formatters/datetimediff.js';\r\nimport lookup from './formatters/lookup.js';\r\nimport star from './formatters/star.js';\r\nimport traffic from './formatters/traffic.js';\r\nimport progress from './formatters/progress.js';\r\nimport color from './formatters/color.js';\r\nimport buttonTick from './formatters/buttonTick.js';\r\nimport buttonCross from './formatters/buttonCross.js';\r\nimport rownum from './formatters/rownum.js';\r\nimport handle from './formatters/handle.js';\r\nimport responsiveCollapse from './formatters/responsiveCollapse.js';\r\nimport rowSelection from './formatters/rowSelection.js';\r\n\r\nexport default {\r\n\tplaintext:plaintext,\r\n\thtml:html,\r\n\ttextarea:textarea,\r\n\tmoney:money,\r\n\tlink:link,\r\n\timage:image,\r\n\ttickCross:tickCross,\r\n\tdatetime:datetime,\r\n\tdatetimediff:datetimediff,\r\n\tlookup:lookup,\r\n\tstar:star,\r\n\ttraffic:traffic,\r\n\tprogress:progress,\r\n\tcolor:color,\r\n\tbuttonTick:buttonTick,\r\n\tbuttonCross:buttonCross,\r\n\trownum:rownum,\r\n\thandle:handle,\r\n\tresponsiveCollapse:responsiveCollapse,\r\n\trowSelection:rowSelection,\r\n};","export default function(cell, formatterParams, onRendered){\r\n\treturn cell.getValue();\r\n};","export default function(cell, formatterParams, onRendered){\r\n\tcell.getElement().style.whiteSpace = \"pre-wrap\";\r\n\treturn this.emptyToSpace(this.sanitizeHTML(cell.getValue()));\r\n};","export default function(cell, formatterParams, onRendered){\r\n\tvar floatVal = parseFloat(cell.getValue()),\r\n\tnumber, integer, decimal, rgx;\r\n\r\n\tvar decimalSym = formatterParams.decimal || \".\";\r\n\tvar thousandSym = formatterParams.thousand || \",\";\r\n\tvar symbol = formatterParams.symbol || \"\";\r\n\tvar after = !!formatterParams.symbolAfter;\r\n\tvar precision = typeof formatterParams.precision !== \"undefined\" ? formatterParams.precision : 2;\r\n\r\n\tif(isNaN(floatVal)){\r\n\t\treturn this.emptyToSpace(this.sanitizeHTML(cell.getValue()));\r\n\t}\r\n\r\n\tnumber = precision !== false ? floatVal.toFixed(precision) : floatVal;\r\n\tnumber = String(number).split(\".\");\r\n\r\n\tinteger = number[0];\r\n\tdecimal = number.length > 1 ? decimalSym + number[1] : \"\";\r\n\r\n\trgx = /(\\d+)(\\d{3})/;\r\n\r\n\twhile (rgx.test(integer)){\r\n\t\tinteger = integer.replace(rgx, \"$1\" + thousandSym + \"$2\");\r\n\t}\r\n\r\n\treturn after ? integer + decimal + symbol : symbol + integer + decimal;\r\n};","export default function(cell, formatterParams, onRendered){\r\n\tvar value = cell.getValue(),\r\n\turlPrefix = formatterParams.urlPrefix || \"\",\r\n\tdownload = formatterParams.download,\r\n\tlabel = value,\r\n\tel = document.createElement(\"a\"),\r\n\tdata;\r\n\r\n\tif(formatterParams.labelField){\r\n\t\tdata = cell.getData();\r\n\t\tlabel = data[formatterParams.labelField];\r\n\t}\r\n\r\n\tif(formatterParams.label){\r\n\t\tswitch(typeof formatterParams.label){\r\n\t\t\tcase \"string\":\r\n\t\t\tlabel = formatterParams.label;\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"function\":\r\n\t\t\tlabel = formatterParams.label(cell);\r\n\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\tif(label){\r\n\t\tif(formatterParams.urlField){\r\n\t\t\tdata = cell.getData();\r\n\t\t\tvalue = data[formatterParams.urlField];\r\n\t\t}\r\n\r\n\t\tif(formatterParams.url){\r\n\t\t\tswitch(typeof formatterParams.url){\r\n\t\t\t\tcase \"string\":\r\n\t\t\t\tvalue = formatterParams.url;\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"function\":\r\n\t\t\t\tvalue = formatterParams.url(cell);\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tel.setAttribute(\"href\", urlPrefix + value);\r\n\r\n\t\tif(formatterParams.target){\r\n\t\t\tel.setAttribute(\"target\", formatterParams.target);\r\n\t\t}\r\n\r\n\t\tif(formatterParams.download){\r\n\r\n\t\t\tif(typeof download == \"function\"){\r\n\t\t\t\tdownload = download(cell);\r\n\t\t\t}else{\r\n\t\t\t\tdownload = download === true ? \"\" : download;\r\n\t\t\t}\r\n\r\n\t\t\tel.setAttribute(\"download\", download);\r\n\t\t}\r\n\r\n\t\tel.innerHTML = this.emptyToSpace(this.sanitizeHTML(label));\r\n\r\n\t\treturn el;\r\n\t}else{\r\n\t\treturn \" \";\r\n\t}\r\n};","export default function(cell, formatterParams, onRendered){\r\n\tvar el = document.createElement(\"img\"),\r\n\tsrc = cell.getValue();\r\n\r\n\tif(formatterParams.urlPrefix){\r\n\t\tsrc = formatterParams.urlPrefix + cell.getValue();\r\n\t}\r\n\r\n\tif(formatterParams.urlSuffix){\r\n\t\tsrc = src + formatterParams.urlSuffix;\r\n\t}\r\n\r\n\tel.setAttribute(\"src\", src);\r\n\r\n\tswitch(typeof formatterParams.height){\r\n\t\tcase \"number\":\r\n\t\tel.style.height = formatterParams.height + \"px\";\r\n\t\tbreak;\r\n\r\n\t\tcase \"string\":\r\n\t\tel.style.height = formatterParams.height;\r\n\t\tbreak;\r\n\t}\r\n\r\n\tswitch(typeof formatterParams.width){\r\n\t\tcase \"number\":\r\n\t\tel.style.width = formatterParams.width + \"px\";\r\n\t\tbreak;\r\n\r\n\t\tcase \"string\":\r\n\t\tel.style.width = formatterParams.width;\r\n\t\tbreak;\r\n\t}\r\n\r\n\tel.addEventListener(\"load\", function(){\r\n\t\tcell.getRow().normalizeHeight();\r\n\t});\r\n\r\n\treturn el;\r\n};","export default function(cell, formatterParams, onRendered){\r\n\tvar value = cell.getValue(),\r\n\telement = cell.getElement(),\r\n\tempty = formatterParams.allowEmpty,\r\n\ttruthy = formatterParams.allowTruthy,\r\n\ttick = typeof formatterParams.tickElement !== \"undefined\" ? formatterParams.tickElement : '',\r\n\tcross = typeof formatterParams.crossElement !== \"undefined\" ? formatterParams.crossElement : '';\r\n\r\n\tif((truthy && value) || (value === true || value === \"true\" || value === \"True\" || value === 1 || value === \"1\")){\r\n\t\telement.setAttribute(\"aria-checked\", true);\r\n\t\treturn tick || \"\";\r\n\t}else{\r\n\t\tif(empty && (value === \"null\" || value === \"\" || value === null || typeof value === \"undefined\")){\r\n\t\t\telement.setAttribute(\"aria-checked\", \"mixed\");\r\n\t\t\treturn \"\";\r\n\t\t}else{\r\n\t\t\telement.setAttribute(\"aria-checked\", false);\r\n\t\t\treturn cross || \"\";\r\n\t\t}\r\n\t}\r\n};","export default function(cell, formatterParams, onRendered){\r\n\tvar inputFormat = formatterParams.inputFormat || \"YYYY-MM-DD hh:mm:ss\";\r\n\tvar\toutputFormat = formatterParams.outputFormat || \"DD/MM/YYYY hh:mm:ss\";\r\n\tvar\tinvalid = typeof formatterParams.invalidPlaceholder !== \"undefined\" ? formatterParams.invalidPlaceholder : \"\";\r\n\tvar value = cell.getValue();\r\n\r\n\tvar newDatetime = moment(value, inputFormat);\r\n\r\n\tif(newDatetime.isValid()){\r\n\t\treturn formatterParams.timezone ? newDatetime.tz(formatterParams.timezone).format(outputFormat) : newDatetime.format(outputFormat);\r\n\t}else{\r\n\r\n\t\tif(invalid === true){\r\n\t\t\treturn value;\r\n\t\t}else if(typeof invalid === \"function\"){\r\n\t\t\treturn invalid(value);\r\n\t\t}else{\r\n\t\t\treturn invalid;\r\n\t\t}\r\n\t}\r\n};","export default function datetime(cell, formatterParams, onRendered) {\r\n\tvar inputFormat = formatterParams.inputFormat || \"YYYY-MM-DD hh:mm:ss\";\r\n\tvar invalid = typeof formatterParams.invalidPlaceholder !== \"undefined\" ? formatterParams.invalidPlaceholder : \"\";\r\n\tvar suffix = typeof formatterParams.suffix !== \"undefined\" ? formatterParams.suffix : false;\r\n\tvar unit = typeof formatterParams.unit !== \"undefined\" ? formatterParams.unit : undefined;\r\n\tvar humanize = typeof formatterParams.humanize !== \"undefined\" ? formatterParams.humanize : false;\r\n\tvar date = typeof formatterParams.date !== \"undefined\" ? formatterParams.date : moment();\r\n\tvar value = cell.getValue();\r\n\r\n\tvar newDatetime = moment(value, inputFormat);\r\n\r\n\tif (newDatetime.isValid()) {\r\n\t\tif(humanize){\r\n\t\t\treturn moment.duration(newDatetime.diff(date)).humanize(suffix);\r\n\t\t}else{\r\n\t\t\treturn newDatetime.diff(date, unit) + (suffix ? \" \" + suffix : \"\");\r\n\t\t}\r\n\r\n\t} else {\r\n\r\n\t\tif (invalid === true) {\r\n\t\t\treturn value;\r\n\t\t} else if (typeof invalid === \"function\") {\r\n\t\t\treturn invalid(value);\r\n\t\t} else {\r\n\t\t\treturn invalid;\r\n\t\t}\r\n\t}\r\n};","export default function (cell, formatterParams, onRendered) {\r\n\tvar value = cell.getValue();\r\n\r\n\tif (typeof formatterParams[value] === \"undefined\") {\r\n\t\tconsole.warn('Missing display value for ' + value);\r\n\t\treturn value;\r\n\t}\r\n\r\n\treturn formatterParams[value];\r\n};","export default function(cell, formatterParams, onRendered){\r\n\tvar value = cell.getValue(),\r\n\telement = cell.getElement(),\r\n\tmaxStars = formatterParams && formatterParams.stars ? formatterParams.stars : 5,\r\n\tstars = document.createElement(\"span\"),\r\n\tstar = document.createElementNS('http://www.w3.org/2000/svg', \"svg\"),\r\n\tstarActive = '',\r\n\tstarInactive = '';\r\n\r\n\t//style stars holder\r\n\tstars.style.verticalAlign = \"middle\";\r\n\r\n\t//style star\r\n\tstar.setAttribute(\"width\", \"14\");\r\n\tstar.setAttribute(\"height\", \"14\");\r\n\tstar.setAttribute(\"viewBox\", \"0 0 512 512\");\r\n\tstar.setAttribute(\"xml:space\", \"preserve\");\r\n\tstar.style.padding = \"0 1px\";\r\n\r\n\tvalue = value && !isNaN(value) ? parseInt(value) : 0;\r\n\r\n\tvalue = Math.max(0, Math.min(value, maxStars));\r\n\r\n\tfor(var i=1;i<= maxStars;i++){\r\n\t\tvar nextStar = star.cloneNode(true);\r\n\t\tnextStar.innerHTML = i <= value ? starActive : starInactive;\r\n\r\n\t\tstars.appendChild(nextStar);\r\n\t}\r\n\r\n\telement.style.whiteSpace = \"nowrap\";\r\n\telement.style.overflow = \"hidden\";\r\n\telement.style.textOverflow = \"ellipsis\";\r\n\r\n\telement.setAttribute(\"aria-label\", value);\r\n\r\n\treturn stars;\r\n};","export default function(cell, formatterParams, onRendered){\r\n\tvar value = this.sanitizeHTML(cell.getValue()) || 0,\r\n\tel = document.createElement(\"span\"),\r\n\tmax = formatterParams && formatterParams.max ? formatterParams.max : 100,\r\n\tmin = formatterParams && formatterParams.min ? formatterParams.min : 0,\r\n\tcolors = formatterParams && typeof formatterParams.color !== \"undefined\" ? formatterParams.color : [\"red\", \"orange\", \"green\"],\r\n\tcolor = \"#666666\",\r\n\tpercent, percentValue;\r\n\r\n\tif(isNaN(value) || typeof cell.getValue() === \"undefined\"){\r\n\t\treturn;\r\n\t}\r\n\r\n\tel.classList.add(\"tabulator-traffic-light\");\r\n\r\n\t//make sure value is in range\r\n\tpercentValue = parseFloat(value) <= max ? parseFloat(value) : max;\r\n\tpercentValue = parseFloat(percentValue) >= min ? parseFloat(percentValue) : min;\r\n\r\n\t//workout percentage\r\n\tpercent = (max - min) / 100;\r\n\tpercentValue = Math.round((percentValue - min) / percent);\r\n\r\n\t//set color\r\n\tswitch(typeof colors){\r\n\t\tcase \"string\":\r\n\t\tcolor = colors;\r\n\t\tbreak;\r\n\t\tcase \"function\":\r\n\t\tcolor = colors(value);\r\n\t\tbreak;\r\n\t\tcase \"object\":\r\n\t\tif(Array.isArray(colors)){\r\n\t\t\tvar unit = 100 / colors.length;\r\n\t\t\tvar index = Math.floor(percentValue / unit);\r\n\r\n\t\t\tindex = Math.min(index, colors.length - 1);\r\n\t\t\tindex = Math.max(index, 0);\r\n\t\t\tcolor = colors[index];\r\n\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\tel.style.backgroundColor = color;\r\n\r\n\treturn el;\r\n};","export default function(cell, formatterParams, onRendered){ //progress bar\r\n\tvar value = this.sanitizeHTML(cell.getValue()) || 0,\r\n\telement = cell.getElement(),\r\n\tmax = formatterParams && formatterParams.max ? formatterParams.max : 100,\r\n\tmin = formatterParams && formatterParams.min ? formatterParams.min : 0,\r\n\tlegendAlign = formatterParams && formatterParams.legendAlign ? formatterParams.legendAlign : \"center\",\r\n\tpercent, percentValue, color, legend, legendColor, top, left, right, bottom;\r\n\r\n\t//make sure value is in range\r\n\tpercentValue = parseFloat(value) <= max ? parseFloat(value) : max;\r\n\tpercentValue = parseFloat(percentValue) >= min ? parseFloat(percentValue) : min;\r\n\r\n\t//workout percentage\r\n\tpercent = (max - min) / 100;\r\n\tpercentValue = Math.round((percentValue - min) / percent);\r\n\r\n\t//set bar color\r\n\tswitch(typeof formatterParams.color){\r\n\t\tcase \"string\":\r\n\t\tcolor = formatterParams.color;\r\n\t\tbreak;\r\n\t\tcase \"function\":\r\n\t\tcolor = formatterParams.color(value);\r\n\t\tbreak;\r\n\t\tcase \"object\":\r\n\t\tif(Array.isArray(formatterParams.color)){\r\n\t\t\tvar unit = 100 / formatterParams.color.length;\r\n\t\t\tvar index = Math.floor(percentValue / unit);\r\n\r\n\t\t\tindex = Math.min(index, formatterParams.color.length - 1);\r\n\t\t\tindex = Math.max(index, 0);\r\n\t\t\tcolor = formatterParams.color[index];\r\n\t\t\tbreak;\r\n\t\t}\r\n\t\tdefault:\r\n\t\tcolor = \"#2DC214\";\r\n\t}\r\n\r\n\t//generate legend\r\n\tswitch(typeof formatterParams.legend){\r\n\t\tcase \"string\":\r\n\t\tlegend = formatterParams.legend;\r\n\t\tbreak;\r\n\t\tcase \"function\":\r\n\t\tlegend = formatterParams.legend(value);\r\n\t\tbreak;\r\n\t\tcase \"boolean\":\r\n\t\tlegend = value;\r\n\t\tbreak;\r\n\t\tdefault:\r\n\t\tlegend = false;\r\n\t}\r\n\r\n\t//set legend color\r\n\tswitch(typeof formatterParams.legendColor){\r\n\t\tcase \"string\":\r\n\t\tlegendColor = formatterParams.legendColor;\r\n\t\tbreak;\r\n\t\tcase \"function\":\r\n\t\tlegendColor = formatterParams.legendColor(value);\r\n\t\tbreak;\r\n\t\tcase \"object\":\r\n\t\tif(Array.isArray(formatterParams.legendColor)){\r\n\t\t\tvar unit = 100 / formatterParams.legendColor.length;\r\n\t\t\tvar index = Math.floor(percentValue / unit);\r\n\r\n\t\t\tindex = Math.min(index, formatterParams.legendColor.length - 1);\r\n\t\t\tindex = Math.max(index, 0);\r\n\t\t\tlegendColor = formatterParams.legendColor[index];\r\n\t\t}\r\n\t\tbreak;\r\n\t\tdefault:\r\n\t\tlegendColor = \"#000\";\r\n\t}\r\n\r\n\telement.style.minWidth = \"30px\";\r\n\telement.style.position = \"relative\";\r\n\r\n\telement.setAttribute(\"aria-label\", percentValue);\r\n\r\n\tvar barEl = document.createElement(\"div\");\r\n\tbarEl.style.display = \"inline-block\";\r\n\tbarEl.style.position = \"relative\";\r\n\tbarEl.style.width = percentValue + \"%\";\r\n\tbarEl.style.backgroundColor = color;\r\n\tbarEl.style.height = \"100%\";\r\n\r\n\tbarEl.setAttribute('data-max', max);\r\n\tbarEl.setAttribute('data-min', min);\r\n\r\n\r\n\tif(legend){\r\n\t\tvar legendEl = document.createElement(\"div\");\r\n\t\tlegendEl.style.position = \"absolute\";\r\n\t\tlegendEl.style.top = \"4px\";\r\n\t\tlegendEl.style.left = 0;\r\n\t\tlegendEl.style.textAlign = legendAlign;\r\n\t\tlegendEl.style.width = \"100%\";\r\n\t\tlegendEl.style.color = legendColor;\r\n\t\tlegendEl.innerHTML = legend;\r\n\t}\r\n\r\n\tonRendered(function(){\r\n\r\n\t\t//handle custom element needed if formatter is to be included in printed/downloaded output\r\n\t\tif(!(cell instanceof CellComponent)){\r\n\t\t\tvar holderEl = document.createElement(\"div\");\r\n\t\t\tholderEl.style.position = \"absolute\";\r\n\t\t\tholderEl.style.top = \"4px\";\r\n\t\t\tholderEl.style.bottom = \"4px\";\r\n\t\t\tholderEl.style.left = \"4px\";\r\n\t\t\tholderEl.style.right = \"4px\";\r\n\r\n\t\t\telement.appendChild(holderEl);\r\n\r\n\t\t\telement = holderEl;\r\n\t\t}\r\n\r\n\t\telement.appendChild(barEl);\r\n\r\n\t\tif(legend){\r\n\t\t\telement.appendChild(legendEl);\r\n\t\t}\r\n\t});\r\n\r\n\treturn \"\";\r\n};","export default function(cell, formatterParams, onRendered){\r\n\tcell.getElement().style.backgroundColor = this.sanitizeHTML(cell.getValue());\r\n\treturn \"\";\r\n};","export default function(cell, formatterParams, onRendered){\r\n\treturn '';\r\n};","export default function(cell, formatterParams, onRendered){\r\n\treturn '';\r\n};","export default function(cell, formatterParams, onRendered){\r\n\treturn this.table.rowManager.activeRows.indexOf(cell.getRow()._getSelf()) + 1;\r\n};","export default function(cell, formatterParams, onRendered){\r\n\tcell.getElement().classList.add(\"tabulator-row-handle\");\r\n\treturn \"
\";\r\n};","export default function(cell, formatterParams, onRendered){\r\n\tvar open = false,\r\n\tel = document.createElement(\"div\"),\r\n\tconfig = cell.getRow()._row.modules.responsiveLayout;\r\n\r\n\tel.classList.add(\"tabulator-responsive-collapse-toggle\");\r\n\tel.innerHTML = \"+-\";\r\n\r\n\tcell.getElement().classList.add(\"tabulator-row-handle\");\r\n\r\n\tfunction toggleList(isOpen){\r\n\t\tvar collapseEl = config.element;\r\n\r\n\t\tconfig.open = isOpen;\r\n\r\n\t\tif(collapseEl){\r\n\r\n\t\t\tif(config.open){\r\n\t\t\t\tel.classList.add(\"open\");\r\n\t\t\t\tcollapseEl.style.display = '';\r\n\t\t\t}else{\r\n\t\t\t\tel.classList.remove(\"open\");\r\n\t\t\t\tcollapseEl.style.display = 'none';\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tel.addEventListener(\"click\", function(e){\r\n\t\te.stopImmediatePropagation();\r\n\t\ttoggleList(!config.open);\r\n\t});\r\n\r\n\ttoggleList(config.open);\r\n\r\n\treturn el;\r\n};","export default function(cell, formatterParams, onRendered){\r\n\tvar checkbox = document.createElement(\"input\");\r\n\r\n\tcheckbox.type = 'checkbox';\r\n\r\n\tif(this.table.modExists(\"selectRow\", true)){\r\n\r\n\t\tcheckbox.addEventListener(\"click\", (e) => {\r\n\t\t\te.stopPropagation();\r\n\t\t});\r\n\r\n\t\tif(typeof cell.getRow == 'function'){\r\n\t\t\tvar row = cell.getRow();\r\n\r\n\t\t\tif(row instanceof RowComponent){\r\n\r\n\t\t\t\tcheckbox.addEventListener(\"change\", (e) => {\r\n\t\t\t\t\trow.toggleSelect();\r\n\t\t\t\t});\r\n\r\n\t\t\t\tcheckbox.checked = row.isSelected && row.isSelected();\r\n\t\t\t\tthis.table.modules.selectRow.registerRowSelectCheckbox(row, checkbox);\r\n\t\t\t}else{\r\n\t\t\t\tcheckbox = \"\";\r\n\t\t\t}\r\n\t\t}else {\r\n\t\t\tcheckbox.addEventListener(\"change\", (e) => {\r\n\t\t\t\tif(this.table.modules.selectRow.selectedRows.length){\r\n\t\t\t\t\tthis.table.deselectRow();\r\n\t\t\t\t}else {\r\n\t\t\t\t\tthis.table.selectRow(formatterParams.rowRange);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tthis.table.modules.selectRow.registerHeaderSelectCheckbox(checkbox);\r\n\t\t}\r\n\t}\r\n\r\n\treturn checkbox;\r\n};","import Module from '../../core/Module.js';\r\n\r\nimport defaultFormatters from './defaults/formatters.js';\r\n\r\nclass Format extends Module{\r\n\r\n\t//initialize column formatter\r\n\tinitializeColumn(column){\r\n\t\tcolumn.modules.format = this.lookupFormatter(column, \"\");\r\n\r\n\t\tif(typeof column.definition.formatterPrint !== \"undefined\"){\r\n\t\t\tcolumn.modules.format.print = this.lookupFormatter(column, \"Print\");\r\n\t\t}\r\n\r\n\t\tif(typeof column.definition.formatterClipboard !== \"undefined\"){\r\n\t\t\tcolumn.modules.format.clipboard = this.lookupFormatter(column, \"Clipboard\");\r\n\t\t}\r\n\r\n\t\tif(typeof column.definition.formatterHtmlOutput !== \"undefined\"){\r\n\t\t\tcolumn.modules.format.htmlOutput = this.lookupFormatter(column, \"HtmlOutput\");\r\n\t\t}\r\n\t}\r\n\r\n\tlookupFormatter(column, type){\r\n\t\tvar config = {params:column.definition[\"formatter\" + type + \"Params\"] || {}},\r\n\t\tformatter = column.definition[\"formatter\" + type];\r\n\r\n\t\t//set column formatter\r\n\t\tswitch(typeof formatter){\r\n\t\t\tcase \"string\":\r\n\t\t\tif(Format.formatters[formatter]){\r\n\t\t\t\tconfig.formatter = Format.formatters[formatter];\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Formatter Error - No such formatter found: \", formatter);\r\n\t\t\t\tconfig.formatter = Format.formatters.plaintext;\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"function\":\r\n\t\t\tconfig.formatter = formatter;\r\n\t\t\tbreak;\r\n\r\n\t\t\tdefault:\r\n\t\t\tconfig.formatter = Format.formatters.plaintext;\r\n\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\treturn config;\r\n\t}\r\n\r\n\tcellRendered(cell){\r\n\t\tif(cell.modules.format && cell.modules.format.renderedCallback && !cell.modules.format.rendered){\r\n\t\t\tcell.modules.format.renderedCallback();\r\n\t\t\tcell.modules.format.rendered = true;\r\n\t\t}\r\n\t}\r\n\r\n\t//return a formatted value for a cell\r\n\tformatValue(cell){\r\n\t\tvar component = cell.getComponent(),\r\n\t\tparams = typeof cell.column.modules.format.params === \"function\" ? cell.column.modules.format.params(component) : cell.column.modules.format.params;\r\n\r\n\t\tfunction onRendered(callback){\r\n\t\t\tif(!cell.modules.format){\r\n\t\t\t\tcell.modules.format = {};\r\n\t\t\t}\r\n\r\n\t\t\tcell.modules.format.renderedCallback = callback;\r\n\t\t\tcell.modules.format.rendered = false;\r\n\t\t}\r\n\r\n\t\treturn cell.column.modules.format.formatter.call(this, component, params, onRendered);\r\n\t}\r\n\r\n\tformatExportValue(cell, type){\r\n\t\tvar formatter = cell.column.modules.format[type],\r\n\t\tparams;\r\n\r\n\t\tif(formatter){\r\n\t\t\tparams = typeof formatter.params === \"function\" ? formatter.params(component) : formatter.params;\r\n\r\n\t\t\tfunction onRendered(callback){\r\n\t\t\t\tif(!cell.modules.format){\r\n\t\t\t\t\tcell.modules.format = {};\r\n\t\t\t\t}\r\n\r\n\t\t\t\tcell.modules.format.renderedCallback = callback;\r\n\t\t\t\tcell.modules.format.rendered = false;\r\n\t\t\t}\r\n\r\n\t\t\treturn formatter.formatter.call(this, cell.getComponent(), params, onRendered);\r\n\r\n\t\t}else{\r\n\t\t\treturn this.formatValue(cell);\r\n\t\t}\r\n\t}\r\n\r\n\tsanitizeHTML(value){\r\n\t\tif(value){\r\n\t\t\tvar entityMap = {\r\n\t\t\t\t'&': '&',\r\n\t\t\t\t'<': '<',\r\n\t\t\t\t'>': '>',\r\n\t\t\t\t'\"': '"',\r\n\t\t\t\t\"'\": ''',\r\n\t\t\t\t'/': '/',\r\n\t\t\t\t'`': '`',\r\n\t\t\t\t'=': '='\r\n\t\t\t};\r\n\r\n\t\t\treturn String(value).replace(/[&<>\"'`=\\/]/g, function (s) {\r\n\t\t\t\treturn entityMap[s];\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\treturn value;\r\n\t\t}\r\n\t}\r\n\r\n\temptyToSpace(value){\r\n\t\treturn value === null || typeof value === \"undefined\" || value === \"\" ? \" \" : value;\r\n\t}\r\n\r\n\t//get formatter for cell\r\n\tgetFormatter(formatter){\r\n\t\tvar formatter;\r\n\r\n\t\tswitch(typeof formatter){\r\n\t\t\tcase \"string\":\r\n\t\t\tif(Format.formatters[formatter]){\r\n\t\t\t\tformatter = Format.formatters[formatter]\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Formatter Error - No such formatter found: \", formatter);\r\n\t\t\t\tformatter = Format.formatters.plaintext;\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"function\":\r\n\t\t\tformatter = formatter;\r\n\t\t\tbreak;\r\n\r\n\t\t\tdefault:\r\n\t\t\tformatter = Format.formatters.plaintext;\r\n\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\treturn formatter;\r\n\t}\r\n}\r\n\r\nFormat.moduleName = \"format\";\r\n\r\n//load defaults\r\nFormat.formatters = defaultFormatters;\r\n\r\nexport default Format;","import Module from '../../core/Module.js';\r\n\r\nclass FrozenColumns extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.leftColumns = [];\r\n\t\tthis.rightColumns = [];\r\n\t\tthis.leftMargin = 0;\r\n\t\tthis.rightMargin = 0;\r\n\t\tthis.rightPadding = 0;\r\n\t\tthis.initializationMode = \"left\";\r\n\t\tthis.active = false;\r\n\t\tthis.scrollEndTimer = false;\r\n\t}\r\n\r\n\t//reset initial state\r\n\treset(){\r\n\t\tthis.initializationMode = \"left\";\r\n\t\tthis.leftColumns = [];\r\n\t\tthis.rightColumns = [];\r\n\t\tthis.leftMargin = 0;\r\n\t\tthis.rightMargin = 0;\r\n\t\tthis.rightMargin = 0;\r\n\t\tthis.active = false;\r\n\r\n\t\tthis.table.columnManager.headersElement.style.marginLeft = 0;\r\n\t\tthis.table.columnManager.element.style.paddingRight = 0;\r\n\t}\r\n\r\n\t//initialize specific column\r\n\tinitializeColumn(column){\r\n\t\tvar config = {margin:0, edge:false};\r\n\r\n\t\tif(!column.isGroup){\r\n\r\n\t\t\tif(this.frozenCheck(column)){\r\n\r\n\t\t\t\tconfig.position = this.initializationMode;\r\n\r\n\t\t\t\tif(this.initializationMode == \"left\"){\r\n\t\t\t\t\tthis.leftColumns.push(column);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tthis.rightColumns.unshift(column);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.active = true;\r\n\r\n\t\t\t\tcolumn.modules.frozen = config;\r\n\t\t\t}else{\r\n\t\t\t\tthis.initializationMode = \"right\";\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tfrozenCheck(column){\r\n\t\tvar frozen = false;\r\n\r\n\t\tif(column.parent.isGroup && column.definition.frozen){\r\n\t\t\tconsole.warn(\"Frozen Column Error - Parent column group must be frozen, not individual columns or sub column groups\");\r\n\t\t}\r\n\r\n\t\tif(column.parent.isGroup){\r\n\t\t\treturn this.frozenCheck(column.parent);\r\n\t\t}else{\r\n\t\t\treturn column.definition.frozen;\r\n\t\t}\r\n\r\n\t\treturn frozen;\r\n\t}\r\n\r\n\t//quick layout to smooth horizontal scrolling\r\n\tscrollHorizontal(){\r\n\t\tvar rows;\r\n\r\n\t\tif(this.active){\r\n\t\t\tclearTimeout(this.scrollEndTimer);\r\n\r\n\t\t\t//layout all rows after scroll is complete\r\n\t\t\tthis.scrollEndTimer = setTimeout(() => {\r\n\t\t\t\tthis.layout();\r\n\t\t\t}, 100);\r\n\r\n\t\t\trows = this.table.rowManager.getVisibleRows();\r\n\r\n\t\t\tthis.calcMargins();\r\n\r\n\t\t\tthis.layoutColumnPosition();\r\n\r\n\t\t\tthis.layoutCalcRows();\r\n\r\n\t\t\trows.forEach((row) => {\r\n\t\t\t\tif(row.type === \"row\"){\r\n\t\t\t\t\tthis.layoutRow(row);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tthis.table.rowManager.tableElement.style.marginRight = this.rightMargin;\r\n\t\t}\r\n\t}\r\n\r\n\t//calculate margins for rows\r\n\tcalcMargins(){\r\n\t\tthis.leftMargin = this._calcSpace(this.leftColumns, this.leftColumns.length) + \"px\";\r\n\t\tthis.table.columnManager.headersElement.style.marginLeft = this.leftMargin;\r\n\r\n\t\tthis.rightMargin = this._calcSpace(this.rightColumns, this.rightColumns.length) + \"px\";\r\n\t\tthis.table.columnManager.element.style.paddingRight = this.rightMargin;\r\n\r\n\t\t//calculate right frozen columns\r\n\t\tthis.rightPadding = this.table.rowManager.element.clientWidth + this.table.columnManager.scrollLeft;\r\n\t}\r\n\r\n\t//layout calculation rows\r\n\tlayoutCalcRows(){\r\n\t\tif(this.table.modExists(\"columnCalcs\")){\r\n\t\t\tif(this.table.modules.columnCalcs.topInitialized && this.table.modules.columnCalcs.topRow){\r\n\t\t\t\tthis.layoutRow(this.table.modules.columnCalcs.topRow);\r\n\t\t\t}\r\n\t\t\tif(this.table.modules.columnCalcs.botInitialized && this.table.modules.columnCalcs.botRow){\r\n\t\t\t\tthis.layoutRow(this.table.modules.columnCalcs.botRow);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//calculate column positions and layout headers\r\n\tlayoutColumnPosition(allCells){\r\n\r\n\t\tvar leftParents = [];\r\n\r\n\t\tthis.leftColumns.forEach((column, i) => {\r\n\t\t\tcolumn.modules.frozen.margin = (this._calcSpace(this.leftColumns, i) + this.table.columnManager.scrollLeft) + \"px\";\r\n\r\n\t\t\tif(i == this.leftColumns.length - 1){\r\n\t\t\t\tcolumn.modules.frozen.edge = true;\r\n\t\t\t}else{\r\n\t\t\t\tcolumn.modules.frozen.edge = false;\r\n\t\t\t}\r\n\r\n\t\t\tif(column.parent.isGroup){\r\n\t\t\t\tvar parentEl = this.getColGroupParentElement(column);\r\n\t\t\t\tif(!leftParents.includes(parentEl)){\r\n\t\t\t\t\tthis.layoutElement(parentEl, column);\r\n\t\t\t\t\tleftParents.push(parentEl);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(column.modules.frozen.edge){\r\n\t\t\t\t\tparentEl.classList.add(\"tabulator-frozen-\" + column.modules.frozen.position);\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tthis.layoutElement(column.getElement(), column);\r\n\t\t\t}\r\n\r\n\t\t\tif(allCells){\r\n\t\t\t\tcolumn.cells.forEach((cell) => {\r\n\t\t\t\t\tthis.layoutElement(cell.getElement(true), column);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tthis.rightColumns.forEach((column, i) => {\r\n\t\t\tcolumn.modules.frozen.margin = (this.rightPadding - this._calcSpace(this.rightColumns, i + 1)) + \"px\";\r\n\r\n\t\t\tif(i == this.rightColumns.length - 1){\r\n\t\t\t\tcolumn.modules.frozen.edge = true;\r\n\t\t\t}else{\r\n\t\t\t\tcolumn.modules.frozen.edge = false;\r\n\t\t\t}\r\n\r\n\r\n\t\t\tif(column.parent.isGroup){\r\n\t\t\t\tthis.layoutElement(this.getColGroupParentElement(column), column);\r\n\t\t\t}else{\r\n\t\t\t\tthis.layoutElement(column.getElement(), column);\r\n\t\t\t}\r\n\r\n\t\t\tif(allCells){\r\n\t\t\t\tcolumn.cells.forEach((cell) => {\r\n\t\t\t\t\tthis.layoutElement(cell.getElement(true), column);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tgetColGroupParentElement(column){\r\n\t\treturn column.parent.isGroup ? this.getColGroupParentElement(column.parent) : column.getElement();\r\n\t}\r\n\r\n\t//layout columns appropropriatly\r\n\tlayout(){\r\n\t\tvar rightMargin = 0;\r\n\r\n\t\tif(this.active){\r\n\r\n\t\t\t//calculate row padding\r\n\t\t\tthis.calcMargins();\r\n\r\n\t\t\tthis.table.rowManager.getDisplayRows().forEach((row) =>{\r\n\t\t\t\tif(row.type === \"row\"){\r\n\t\t\t\t\tthis.layoutRow(row);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tthis.layoutCalcRows();\r\n\r\n\t\t\t//calculate left columns\r\n\t\t\tthis.layoutColumnPosition(true);\r\n\r\n\t\t\tthis.table.rowManager.tableElement.style.marginRight = this.rightMargin;\r\n\t\t}\r\n\t}\r\n\r\n\tlayoutRow(row){\r\n\t\tvar rowEl = row.getElement();\r\n\r\n\t\trowEl.style.paddingLeft = this.leftMargin;\r\n\r\n\t\tthis.leftColumns.forEach((column) => {\r\n\t\t\tvar cell = row.getCell(column);\r\n\r\n\t\t\tif(cell){\r\n\t\t\t\tthis.layoutElement(cell.getElement(true), column);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tthis.rightColumns.forEach((column) => {\r\n\t\t\tvar cell = row.getCell(column);\r\n\r\n\t\t\tif(cell){\r\n\t\t\t\tthis.layoutElement(cell.getElement(true), column);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tlayoutElement(element, column){\r\n\r\n\t\tif(column.modules.frozen){\r\n\t\t\telement.style.position = \"absolute\";\r\n\t\t\telement.style.left = column.modules.frozen.margin;\r\n\r\n\t\t\telement.classList.add(\"tabulator-frozen\");\r\n\r\n\t\t\tif(column.modules.frozen.edge){\r\n\t\t\t\telement.classList.add(\"tabulator-frozen-\" + column.modules.frozen.position);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t_calcSpace(columns, index){\r\n\t\tvar width = 0;\r\n\r\n\t\tfor (let i = 0; i < index; i++){\r\n\t\t\tif(columns[i].visible){\r\n\t\t\t\twidth += columns[i].getWidth();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn width;\r\n\t}\r\n}\r\n\r\nFrozenColumns.moduleName = \"frozenColumns\";\r\n\r\nexport default FrozenColumns;","import Module from '../../core/Module.js';\r\n\r\nclass FrozenRows extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.topElement = document.createElement(\"div\");\r\n\t\tthis.rows = [];\r\n\t\tthis.displayIndex = 0; //index in display pipeline\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tthis.rows = [];\r\n\r\n\t\tthis.topElement.classList.add(\"tabulator-frozen-rows-holder\");\r\n\r\n\t\t// this.table.columnManager.element.append(this.topElement);\r\n\t\tthis.table.columnManager.getElement().insertBefore(this.topElement, this.table.columnManager.headersElement.nextSibling);\r\n\t}\r\n\r\n\tsetDisplayIndex(index){\r\n\t\tthis.displayIndex = index;\r\n\t}\r\n\r\n\tgetDisplayIndex(){\r\n\t\treturn this.displayIndex;\r\n\t}\r\n\r\n\tisFrozen(){\r\n\t\treturn !!this.rows.length;\r\n\t}\r\n\r\n\t//filter frozen rows out of display data\r\n\tgetRows(rows){\r\n\t\tvar self = this,\r\n\t\tfrozen = [],\r\n\t\toutput = rows.slice(0);\r\n\r\n\t\tthis.rows.forEach(function(row){\r\n\t\t\tvar index = output.indexOf(row);\r\n\r\n\t\t\tif(index > -1){\r\n\t\t\t\toutput.splice(index, 1);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tfreezeRow(row){\r\n\t\tif(!row.modules.frozen){\r\n\t\t\trow.modules.frozen = true;\r\n\t\t\tthis.topElement.appendChild(row.getElement());\r\n\t\t\trow.initialize();\r\n\t\t\trow.normalizeHeight();\r\n\t\t\tthis.table.rowManager.adjustTableSize();\r\n\r\n\t\t\tthis.rows.push(row);\r\n\r\n\t\t\tthis.table.rowManager.refreshActiveData(\"display\");\r\n\r\n\t\t\tthis.styleRows();\r\n\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Freeze Error - Row is already frozen\");\r\n\t\t}\r\n\t}\r\n\r\n\tunfreezeRow(row){\r\n\t\tvar index = this.rows.indexOf(row);\r\n\r\n\t\tif(row.modules.frozen){\r\n\r\n\t\t\trow.modules.frozen = false;\r\n\r\n\t\t\tthis.detachRow(row);\r\n\r\n\t\t\tthis.table.rowManager.adjustTableSize();\r\n\r\n\t\t\tthis.table.rowManager.refreshActiveData(\"display\");\r\n\r\n\t\t\tif(this.rows.length){\r\n\t\t\t\tthis.styleRows();\r\n\t\t\t}\r\n\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Freeze Error - Row is already unfrozen\");\r\n\t\t}\r\n\t}\r\n\r\n\tdetachRow(row){\r\n\t\tvar index = this.rows.indexOf(row);\r\n\r\n\t\tif(index > -1){\r\n\t\t\tvar rowEl = row.getElement();\r\n\t\t\trowEl.parentNode.removeChild(rowEl);\r\n\r\n\t\t\tthis.rows.splice(index, 1);\r\n\t\t}\r\n\t}\r\n\r\n\tstyleRows(row){\r\n\t\tthis.rows.forEach((row, i) => {\r\n\t\t\tthis.table.rowManager.styleRow(row, i);\r\n\t\t});\r\n\t}\r\n}\r\n\r\nFrozenRows.moduleName = \"frozenRows\";\r\n\r\nexport default FrozenRows;","import Helpers from '../../core/Helpers.js';\r\n\r\n//Group functions\r\nclass Group{\r\n\r\n\tconstructor(groupManager, parent, level, key, field, generator, oldGroup){\r\n\t\tthis.groupManager = groupManager;\r\n\t\tthis.parent = parent;\r\n\t\tthis.key = key;\r\n\t\tthis.level = level;\r\n\t\tthis.field = field;\r\n\t\tthis.hasSubGroups = level < (groupManager.groupIDLookups.length - 1);\r\n\t\tthis.addRow = this.hasSubGroups ? this._addRowToGroup : this._addRow;\r\n\t\tthis.type = \"group\"; //type of element\r\n\t\tthis.old = oldGroup;\r\n\t\tthis.rows = [];\r\n\t\tthis.groups = [];\r\n\t\tthis.groupList = [];\r\n\t\tthis.generator = generator;\r\n\t\tthis.elementContents = false;\r\n\t\tthis.height = 0;\r\n\t\tthis.outerHeight = 0;\r\n\t\tthis.initialized = false;\r\n\t\tthis.calcs = {};\r\n\t\tthis.initialized = false;\r\n\t\tthis.modules = {};\r\n\t\tthis.arrowElement = false;\r\n\r\n\t\tthis.visible = oldGroup ? oldGroup.visible : (typeof groupManager.startOpen[level] !== \"undefined\" ? groupManager.startOpen[level] : groupManager.startOpen[0]);\r\n\r\n\t\tthis.component = null;\r\n\r\n\t\tthis.createElements();\r\n\t\tthis.addBindings();\r\n\r\n\t\tthis.createValueGroups();\r\n\t}\r\n\r\n\twipe(){\r\n\t\tif(this.groupList.length){\r\n\t\t\tthis.groupList.forEach(function(group){\r\n\t\t\t\tgroup.wipe();\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tthis.element = false;\r\n\t\t\tthis.arrowElement = false;\r\n\t\t\tthis.elementContents = false;\r\n\t\t}\r\n\t}\r\n\r\n\tcreateElements(){\r\n\t\tvar arrow = document.createElement(\"div\");\r\n\t\tarrow.classList.add(\"tabulator-arrow\");\r\n\r\n\t\tthis.element = document.createElement(\"div\");\r\n\t\tthis.element.classList.add(\"tabulator-row\");\r\n\t\tthis.element.classList.add(\"tabulator-group\");\r\n\t\tthis.element.classList.add(\"tabulator-group-level-\" + this.level);\r\n\t\tthis.element.setAttribute(\"role\", \"rowgroup\");\r\n\r\n\t\tthis.arrowElement = document.createElement(\"div\");\r\n\t\tthis.arrowElement.classList.add(\"tabulator-group-toggle\");\r\n\t\tthis.arrowElement.appendChild(arrow);\r\n\r\n\t\t//setup movable rows\r\n\t\tif(this.groupManager.table.options.movableRows !== false && this.groupManager.table.modExists(\"moveRow\")){\r\n\t\t\tthis.groupManager.table.modules.moveRow.initializeGroupHeader(this);\r\n\t\t}\r\n\t}\r\n\r\n\tcreateValueGroups(){\r\n\t\tvar level = this.level + 1;\r\n\t\tif(this.groupManager.allowedValues && this.groupManager.allowedValues[level]){\r\n\t\t\tthis.groupManager.allowedValues[level].forEach((value) => {\r\n\t\t\t\tthis._createGroup(value, level);\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\taddBindings(){\r\n\t\tvar dblTap,\ttapHold, tap, toggleElement;\r\n\r\n\t\t//handle group click events\r\n\t\tif (this.groupManager.table.options.groupClick){\r\n\t\t\tthis.element.addEventListener(\"click\", (e) => {\r\n\t\t\t\tthis.groupManager.table.options.groupClick.call(this.groupManager.table, e, this.getComponent());\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif (this.groupManager.table.options.groupDblClick){\r\n\t\t\tthis.element.addEventListener(\"dblclick\", (e) => {\r\n\t\t\t\tthis.groupManager.table.options.groupDblClick.call(this.groupManager.table, e, this.getComponent());\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif (this.groupManager.table.options.groupContext){\r\n\t\t\tthis.element.addEventListener(\"contextmenu\", (e) => {\r\n\t\t\t\tthis.groupManager.table.options.groupContext.call(this.groupManager.table, e, this.getComponent());\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif ((this.groupManager.table.options.groupContextMenu || this.groupManager.table.options.groupClickMenu) && this.groupManager.table.modExists(\"menu\")){\r\n\t\t\tthis.groupManager.table.modules.menu.initializeGroup.call(this.groupManager.table.modules.menu, this);\r\n\t\t}\r\n\r\n\t\tif (this.groupManager.table.options.groupTap){\r\n\t\t\ttap = false;\r\n\r\n\t\t\tthis.element.addEventListener(\"touchstart\", (e) => {\r\n\t\t\t\ttap = true;\r\n\t\t\t}, {passive: true});\r\n\r\n\t\t\tthis.element.addEventListener(\"touchend\", (e) => {\r\n\t\t\t\tif(tap){\r\n\t\t\t\t\tthis.groupManager.table.options.groupTap(e, this.getComponent());\r\n\t\t\t\t}\r\n\r\n\t\t\t\ttap = false;\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif (this.groupManager.table.options.groupDblTap){\r\n\t\t\tdblTap = null;\r\n\r\n\t\t\tthis.element.addEventListener(\"touchend\", (e) => {\r\n\t\t\t\tif(dblTap){\r\n\t\t\t\t\tclearTimeout(dblTap);\r\n\t\t\t\t\tdblTap = null;\r\n\r\n\t\t\t\t\tthis.groupManager.table.options.groupDblTap(e, this.getComponent());\r\n\t\t\t\t}else{\r\n\r\n\t\t\t\t\tdblTap = setTimeout(() => {\r\n\t\t\t\t\t\tclearTimeout(dblTap);\r\n\t\t\t\t\t\tdblTap = null;\r\n\t\t\t\t\t}, 300);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif (this.groupManager.table.options.groupTapHold){\r\n\t\t\ttapHold = null;\r\n\r\n\t\t\tthis.element.addEventListener(\"touchstart\", (e) => {\r\n\t\t\t\tclearTimeout(tapHold);\r\n\r\n\t\t\t\ttapHold = setTimeout(() => {\r\n\t\t\t\t\tclearTimeout(tapHold);\r\n\t\t\t\t\ttapHold = null;\r\n\t\t\t\t\ttap = false;\r\n\t\t\t\t\tthis.groupManager.table.options.groupTapHold(e, this.getComponent());\r\n\t\t\t\t}, 1000);\r\n\r\n\t\t\t}, {passive: true});\r\n\r\n\t\t\tthis.element.addEventListener(\"touchend\", (e) => {\r\n\t\t\t\tclearTimeout(tapHold);\r\n\t\t\t\ttapHold = null;\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif(this.groupManager.table.options.groupToggleElement){\r\n\t\t\ttoggleElement = this.groupManager.table.options.groupToggleElement == \"arrow\" ? this.arrowElement : this.element;\r\n\r\n\t\t\ttoggleElement.addEventListener(\"click\", (e) => {\r\n\t\t\t\te.stopPropagation();\r\n\t\t\t\te.stopImmediatePropagation();\r\n\t\t\t\tthis.toggleVisibility();\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\t_createGroup(groupID, level){\r\n\t\tvar groupKey = level + \"_\" + groupID;\r\n\t\tvar group = new Group(this.groupManager, this, level, groupID, this.groupManager.groupIDLookups[level].field, this.groupManager.headerGenerator[level] || this.groupManager.headerGenerator[0], this.old ? this.old.groups[groupKey] : false);\r\n\r\n\t\tthis.groups[groupKey] = group;\r\n\t\tthis.groupList.push(group);\r\n\t}\r\n\r\n\t_addRowToGroup(row){\r\n\r\n\t\tvar level = this.level + 1;\r\n\r\n\t\tif(this.hasSubGroups){\r\n\t\t\tvar groupID = this.groupManager.groupIDLookups[level].func(row.getData()),\r\n\t\t\tgroupKey = level + \"_\" + groupID;\r\n\r\n\t\t\tif(this.groupManager.allowedValues && this.groupManager.allowedValues[level]){\r\n\t\t\t\tif(this.groups[groupKey]){\r\n\t\t\t\t\tthis.groups[groupKey].addRow(row);\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tif(!this.groups[groupKey]){\r\n\t\t\t\t\tthis._createGroup(groupID, level);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.groups[groupKey].addRow(row);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t_addRow(row){\r\n\t\tthis.rows.push(row);\r\n\t\trow.modules.group = this;\r\n\t}\r\n\r\n\tinsertRow(row, to, after){\r\n\t\tvar data = this.conformRowData({});\r\n\r\n\t\trow.updateData(data);\r\n\r\n\t\tvar toIndex = this.rows.indexOf(to);\r\n\r\n\t\tif(toIndex > -1){\r\n\t\t\tif(after){\r\n\t\t\t\tthis.rows.splice(toIndex+1, 0, row);\r\n\t\t\t}else{\r\n\t\t\t\tthis.rows.splice(toIndex, 0, row);\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tif(after){\r\n\t\t\t\tthis.rows.push(row);\r\n\t\t\t}else{\r\n\t\t\t\tthis.rows.unshift(row);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\trow.modules.group = this;\r\n\r\n\t\tthis.generateGroupHeaderContents();\r\n\r\n\t\tif(this.groupManager.table.modExists(\"columnCalcs\") && this.groupManager.table.options.columnCalcs != \"table\"){\r\n\t\t\tthis.groupManager.table.modules.columnCalcs.recalcGroup(this);\r\n\t\t}\r\n\r\n\t\tthis.groupManager.updateGroupRows(true);\r\n\t}\r\n\r\n\tscrollHeader(left){\r\n\t\tthis.arrowElement.style.marginLeft = left;\r\n\r\n\t\tthis.groupList.forEach(function(child){\r\n\t\t\tchild.scrollHeader(left);\r\n\t\t});\r\n\t}\r\n\r\n\tgetRowIndex(row){}\r\n\r\n\t//update row data to match grouping contraints\r\n\tconformRowData(data){\r\n\t\tif(this.field){\r\n\t\t\tdata[this.field] = this.key;\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Data Conforming Error - Cannot conform row data to match new group as groupBy is a function\");\r\n\t\t}\r\n\r\n\t\tif(this.parent){\r\n\t\t\tdata = this.parent.conformRowData(data);\r\n\t\t}\r\n\r\n\t\treturn data;\r\n\t}\r\n\r\n\tremoveRow(row){\r\n\t\tvar index = this.rows.indexOf(row);\r\n\t\tvar el = row.getElement();\r\n\r\n\r\n\t\tif(index > -1){\r\n\t\t\tthis.rows.splice(index, 1);\r\n\t\t}\r\n\r\n\t\tif(!this.groupManager.table.options.groupValues && !this.rows.length){\r\n\t\t\tif(this.parent){\r\n\t\t\t\tthis.parent.removeGroup(this);\r\n\t\t\t}else{\r\n\t\t\t\tthis.groupManager.removeGroup(this);\r\n\t\t\t}\r\n\r\n\t\t\tthis.groupManager.updateGroupRows(true);\r\n\t\t}else{\r\n\r\n\t\t\tif(el.parentNode){\r\n\t\t\t\tel.parentNode.removeChild(el);\r\n\t\t\t}\r\n\r\n\t\t\tthis.generateGroupHeaderContents();\r\n\r\n\t\t\tif(this.groupManager.table.modExists(\"columnCalcs\") && this.groupManager.table.options.columnCalcs != \"table\"){\r\n\t\t\t\tthis.groupManager.table.modules.columnCalcs.recalcGroup(this);\r\n\t\t\t}\r\n\r\n\t\t}\r\n\t}\r\n\r\n\tremoveGroup(group){\r\n\t\tvar groupKey = group.level + \"_\" + group.key,\r\n\t\tindex;\r\n\r\n\t\tif(this.groups[groupKey]){\r\n\t\t\tdelete this.groups[groupKey];\r\n\r\n\t\t\tindex = this.groupList.indexOf(group);\r\n\r\n\t\t\tif(index > -1){\r\n\t\t\t\tthis.groupList.splice(index, 1);\r\n\t\t\t}\r\n\r\n\t\t\tif(!this.groupList.length){\r\n\t\t\t\tif(this.parent){\r\n\t\t\t\t\tthis.parent.removeGroup(this);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tthis.groupManager.removeGroup(this);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tgetHeadersAndRows(noCalc){\r\n\t\tvar output = [];\r\n\r\n\t\toutput.push(this);\r\n\r\n\t\tthis._visSet();\r\n\r\n\t\tif(this.visible){\r\n\t\t\tif(this.groupList.length){\r\n\t\t\t\tthis.groupList.forEach(function(group){\r\n\t\t\t\t\toutput = output.concat(group.getHeadersAndRows(noCalc));\r\n\t\t\t\t});\r\n\r\n\t\t\t}else{\r\n\t\t\t\tif(!noCalc && this.groupManager.table.options.columnCalcs != \"table\" && this.groupManager.table.modExists(\"columnCalcs\") && this.groupManager.table.modules.columnCalcs.hasTopCalcs()){\r\n\t\t\t\t\tif(this.calcs.top){\r\n\t\t\t\t\t\tthis.calcs.top.detachElement();\r\n\t\t\t\t\t\tthis.calcs.top.deleteCells();\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tthis.calcs.top = this.groupManager.table.modules.columnCalcs.generateTopRow(this.rows);\r\n\t\t\t\t\toutput.push(this.calcs.top);\r\n\t\t\t\t}\r\n\r\n\t\t\t\toutput = output.concat(this.rows);\r\n\r\n\t\t\t\tif(!noCalc && this.groupManager.table.options.columnCalcs != \"table\" && this.groupManager.table.modExists(\"columnCalcs\") && this.groupManager.table.modules.columnCalcs.hasBottomCalcs()){\r\n\t\t\t\t\tif(this.calcs.bottom){\r\n\t\t\t\t\t\tthis.calcs.bottom.detachElement();\r\n\t\t\t\t\t\tthis.calcs.bottom.deleteCells();\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tthis.calcs.bottom = this.groupManager.table.modules.columnCalcs.generateBottomRow(this.rows);\r\n\t\t\t\t\toutput.push(this.calcs.bottom);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tif(!this.groupList.length && this.groupManager.table.options.columnCalcs != \"table\"){\r\n\r\n\t\t\t\tif(this.groupManager.table.modExists(\"columnCalcs\")){\r\n\r\n\t\t\t\t\tif(!noCalc && this.groupManager.table.modules.columnCalcs.hasTopCalcs()){\r\n\t\t\t\t\t\tif(this.calcs.top){\r\n\t\t\t\t\t\t\tthis.calcs.top.detachElement();\r\n\t\t\t\t\t\t\tthis.calcs.top.deleteCells();\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif(this.groupManager.table.options.groupClosedShowCalcs){\r\n\t\t\t\t\t\t\tthis.calcs.top = this.groupManager.table.modules.columnCalcs.generateTopRow(this.rows);\r\n\t\t\t\t\t\t\toutput.push(this.calcs.top);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif(!noCalc && this.groupManager.table.modules.columnCalcs.hasBottomCalcs()){\r\n\t\t\t\t\t\tif(this.calcs.bottom){\r\n\t\t\t\t\t\t\tthis.calcs.bottom.detachElement();\r\n\t\t\t\t\t\t\tthis.calcs.bottom.deleteCells();\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif(this.groupManager.table.options.groupClosedShowCalcs){\r\n\t\t\t\t\t\t\tthis.calcs.bottom = this.groupManager.table.modules.columnCalcs.generateBottomRow(this.rows);\r\n\t\t\t\t\t\t\toutput.push(this.calcs.bottom);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tgetData(visible, transform){\r\n\t\tvar output = [];\r\n\r\n\t\tthis._visSet();\r\n\r\n\t\tif(!visible || (visible && this.visible)){\r\n\t\t\tthis.rows.forEach((row) => {\r\n\t\t\t\toutput.push(row.getData(transform || \"data\"));\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tgetRowCount(){\r\n\t\tvar count = 0;\r\n\r\n\t\tif(this.groupList.length){\r\n\t\t\tthis.groupList.forEach((group) => {\r\n\t\t\t\tcount += group.getRowCount();\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tcount = this.rows.length;\r\n\t\t}\r\n\t\treturn count;\r\n\t}\r\n\r\n\ttoggleVisibility(){\r\n\t\tif(this.visible){\r\n\t\t\tthis.hide();\r\n\t\t}else{\r\n\t\t\tthis.show();\r\n\t\t}\r\n\t}\r\n\r\n\thide(){\r\n\t\tthis.visible = false;\r\n\r\n\t\tif(this.groupManager.table.rowManager.getRenderMode() == \"classic\" && !this.groupManager.table.options.pagination){\r\n\r\n\t\t\tthis.element.classList.remove(\"tabulator-group-visible\");\r\n\r\n\t\t\tif(this.groupList.length){\r\n\t\t\t\tthis.groupList.forEach((group) => {\r\n\r\n\t\t\t\t\tvar rows = group.getHeadersAndRows();\r\n\r\n\t\t\t\t\trows.forEach((row) => {\r\n\t\t\t\t\t\trow.detachElement();\r\n\t\t\t\t\t});\r\n\t\t\t\t});\r\n\r\n\t\t\t}else{\r\n\t\t\t\tthis.rows.forEach((row) => {\r\n\t\t\t\t\tvar rowEl = row.getElement();\r\n\t\t\t\t\trowEl.parentNode.removeChild(rowEl);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\tthis.groupManager.table.rowManager.setDisplayRows(this.groupManager.updateGroupRows(), this.groupManager.getDisplayIndex());\r\n\r\n\t\t\tthis.groupManager.table.rowManager.checkClassicModeGroupHeaderWidth();\r\n\r\n\t\t}else{\r\n\t\t\tthis.groupManager.updateGroupRows(true);\r\n\t\t}\r\n\r\n\t\tthis.groupManager.table.options.groupVisibilityChanged.call(this.table, this.getComponent(), false);\r\n\t}\r\n\r\n\tshow(){\r\n\t\tthis.visible = true;\r\n\r\n\t\tif(this.groupManager.table.rowManager.getRenderMode() == \"classic\" && !this.groupManager.table.options.pagination){\r\n\r\n\t\t\tthis.element.classList.add(\"tabulator-group-visible\");\r\n\r\n\t\t\tvar prev = this.getElement();\r\n\r\n\t\t\tif(this.groupList.length){\r\n\t\t\t\tthis.groupList.forEach((group) => {\r\n\t\t\t\t\tvar rows = group.getHeadersAndRows();\r\n\r\n\t\t\t\t\trows.forEach((row) => {\r\n\t\t\t\t\t\tvar rowEl = row.getElement();\r\n\t\t\t\t\t\tprev.parentNode.insertBefore(rowEl, prev.nextSibling);\r\n\t\t\t\t\t\trow.initialize();\r\n\t\t\t\t\t\tprev = rowEl;\r\n\t\t\t\t\t});\r\n\t\t\t\t});\r\n\r\n\t\t\t}else{\r\n\t\t\t\tthis.rows.forEach((row) => {\r\n\t\t\t\t\tvar rowEl = row.getElement();\r\n\t\t\t\t\tprev.parentNode.insertBefore(rowEl, prev.nextSibling);\r\n\t\t\t\t\trow.initialize();\r\n\t\t\t\t\tprev = rowEl;\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\tthis.groupManager.table.rowManager.setDisplayRows(this.groupManager.updateGroupRows(), this.groupManager.getDisplayIndex());\r\n\r\n\t\t\tthis.groupManager.table.rowManager.checkClassicModeGroupHeaderWidth();\r\n\t\t}else{\r\n\t\t\tthis.groupManager.updateGroupRows(true);\r\n\t\t}\r\n\r\n\t\tthis.groupManager.table.options.groupVisibilityChanged.call(this.table, this.getComponent(), true);\r\n\t}\r\n\r\n\t_visSet(){\r\n\t\tvar data = [];\r\n\r\n\t\tif(typeof this.visible == \"function\"){\r\n\r\n\t\t\tthis.rows.forEach(function(row){\r\n\t\t\t\tdata.push(row.getData());\r\n\t\t\t});\r\n\r\n\t\t\tthis.visible = this.visible(this.key, this.getRowCount(), data, this.getComponent());\r\n\t\t}\r\n\t}\r\n\r\n\tgetRowGroup(row){\r\n\t\tvar match = false;\r\n\t\tif(this.groupList.length){\r\n\t\t\tthis.groupList.forEach(function(group){\r\n\t\t\t\tvar result = group.getRowGroup(row);\r\n\r\n\t\t\t\tif(result){\r\n\t\t\t\t\tmatch = result;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tif(this.rows.find(function(item){\r\n\t\t\t\treturn item === row;\r\n\t\t\t})){\r\n\t\t\t\tmatch = this;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn match;\r\n\t}\r\n\r\n\tgetSubGroups(component){\r\n\t\tvar output = [];\r\n\r\n\t\tthis.groupList.forEach(function(child){\r\n\t\t\toutput.push(component ? child.getComponent() : child);\r\n\t\t});\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tgetRows(compoment){\r\n\t\tvar output = [];\r\n\r\n\t\tthis.rows.forEach(function(row){\r\n\t\t\toutput.push(compoment ? row.getComponent() : row);\r\n\t\t});\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tgenerateGroupHeaderContents(){\r\n\t\tvar data = [];\r\n\r\n\t\tthis.rows.forEach(function(row){\r\n\t\t\tdata.push(row.getData());\r\n\t\t});\r\n\r\n\t\tthis.elementContents = this.generator(this.key, this.getRowCount(), data, this.getComponent());\r\n\r\n\t\twhile(this.element.firstChild) this.element.removeChild(this.element.firstChild);\r\n\r\n\t\tif(typeof this.elementContents === \"string\"){\r\n\t\t\tthis.element.innerHTML = this.elementContents;\r\n\t\t}else{\r\n\t\t\tthis.element.appendChild(this.elementContents);\r\n\t\t}\r\n\r\n\t\tthis.element.insertBefore(this.arrowElement, this.element.firstChild);\r\n\t}\r\n\r\n\tgetPath(path = []) {\r\n\t\tpath.unshift(this.key);\r\n\t\tif(this.parent) {\r\n\t\t\tthis.parent.getPath(path);\r\n\t\t}\r\n\t\treturn path;\r\n\t}\r\n\r\n\t////////////// Standard Row Functions //////////////\r\n\r\n\tgetElement(){\r\n\t\tthis.addBindingsd = false;\r\n\r\n\t\tthis._visSet();\r\n\r\n\t\tif(this.visible){\r\n\t\t\tthis.element.classList.add(\"tabulator-group-visible\");\r\n\t\t}else{\r\n\t\t\tthis.element.classList.remove(\"tabulator-group-visible\");\r\n\t\t}\r\n\r\n\t\tfor(var i = 0; i < this.element.childNodes.length; ++i){\r\n\t\t\tthis.element.childNodes[i].parentNode.removeChild(this.element.childNodes[i]);\r\n\t\t}\r\n\r\n\t\tthis.generateGroupHeaderContents();\r\n\r\n\t\t// this.addBindings();\r\n\r\n\t\treturn this.element;\r\n\t}\r\n\r\n\tdetachElement(){\r\n\t\tif (this.element && this.element.parentNode){\r\n\t\t\tthis.element.parentNode.removeChild(this.element);\r\n\t\t}\r\n\t}\r\n\r\n\t//normalize the height of elements in the row\r\n\tnormalizeHeight(){\r\n\t\tthis.setHeight(this.element.clientHeight);\r\n\t}\r\n\r\n\tinitialize(force){\r\n\t\tif(!this.initialized || force){\r\n\t\t\tthis.normalizeHeight();\r\n\t\t\tthis.initialized = true;\r\n\t\t}\r\n\t}\r\n\r\n\treinitialize(){\r\n\t\tthis.initialized = false;\r\n\t\tthis.height = 0;\r\n\r\n\t\tif(Helpers.elVisible(this.element)){\r\n\t\t\tthis.initialize(true);\r\n\t\t}\r\n\t}\r\n\r\n\tsetHeight(height){\r\n\t\tif(this.height != height){\r\n\t\t\tthis.height = height;\r\n\t\t\tthis.outerHeight = this.element.offsetHeight;\r\n\t\t}\r\n\t}\r\n\r\n\t//return rows outer height\r\n\tgetHeight(){\r\n\t\treturn this.outerHeight;\r\n\t}\r\n\r\n\tgetGroup(){\r\n\t\treturn this;\r\n\t}\r\n\r\n\treinitializeHeight(){}\r\n\r\n\tcalcHeight(){}\r\n\r\n\tsetCellHeight(){}\r\n\r\n\tclearCellHeight(){}\r\n\r\n\t//////////////// Object Generation /////////////////\r\n\tgetComponent(){\r\n\t\tif(!this.component){\r\n\t\t\tthis.component = new GroupComponent(this);\r\n\t\t}\r\n\r\n\t\treturn this.component;\r\n\t}\r\n}\r\n\r\nexport default Group;","import Module from '../../core/Module.js';\r\n\r\nimport GroupComponent from './GroupComponent.js';\r\nimport Group from './Group.js';\r\n\r\nclass GroupRows extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.groupIDLookups = false; //enable table grouping and set field to group by\r\n\t\tthis.startOpen = [function(){return false;}]; //starting state of group\r\n\t\tthis.headerGenerator = [function(){return \"\";}];\r\n\t\tthis.groupList = []; //ordered list of groups\r\n\t\tthis.allowedValues = false;\r\n\t\tthis.groups = {}; //hold row groups\r\n\t\tthis.displayIndex = 0; //index in display pipeline\r\n\t}\r\n\r\n\t//initialize group configuration\r\n\tinitialize(){\r\n\t\tvar groupBy = this.table.options.groupBy,\r\n\t\tstartOpen = this.table.options.groupStartOpen,\r\n\t\tgroupHeader = this.table.options.groupHeader;\r\n\r\n\t\tthis.allowedValues = this.table.options.groupValues;\r\n\r\n\t\tif(Array.isArray(groupBy) && Array.isArray(groupHeader) && groupBy.length > groupHeader.length){\r\n\t\t\tconsole.warn(\"Error creating group headers, groupHeader array is shorter than groupBy array\");\r\n\t\t}\r\n\r\n\t\tthis.headerGenerator = [function(){return \"\";}];\r\n\t\tthis.startOpen = [function(){return false;}]; //starting state of group\r\n\r\n\t\tthis.table.modules.localize.bind(\"groups|item\", (langValue, lang) => {\r\n\t\t\tthis.headerGenerator[0] = (value, count, data) => { //header layout function\r\n\t\t\t\treturn (typeof value === \"undefined\" ? \"\" : value) + \"(\" + count + \" \" + ((count === 1) ? langValue : lang.groups.items) + \")\";\r\n\t\t\t};\r\n\t\t});\r\n\r\n\t\tthis.groupIDLookups = [];\r\n\r\n\t\tif(Array.isArray(groupBy) || groupBy){\r\n\t\t\tif(this.table.modExists(\"columnCalcs\") && this.table.options.columnCalcs != \"table\" && this.table.options.columnCalcs != \"both\"){\r\n\t\t\t\tthis.table.modules.columnCalcs.removeCalcs();\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tif(this.table.modExists(\"columnCalcs\") && this.table.options.columnCalcs != \"group\"){\r\n\r\n\t\t\t\tvar cols = this.table.columnManager.getRealColumns();\r\n\r\n\t\t\t\tcols.forEach((col) => {\r\n\t\t\t\t\tif(col.definition.topCalc){\r\n\t\t\t\t\t\tthis.table.modules.columnCalcs.initializeTopRow();\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif(col.definition.bottomCalc){\r\n\t\t\t\t\t\tthis.table.modules.columnCalcs.initializeBottomRow();\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(!Array.isArray(groupBy)){\r\n\t\t\tgroupBy = [groupBy];\r\n\t\t}\r\n\r\n\t\tgroupBy.forEach((group, i) => {\r\n\t\t\tvar lookupFunc, column;\r\n\r\n\t\t\tif(typeof group == \"function\"){\r\n\t\t\t\tlookupFunc = group;\r\n\t\t\t}else{\r\n\t\t\t\tcolumn = this.table.columnManager.getColumnByField(group);\r\n\r\n\t\t\t\tif(column){\r\n\t\t\t\t\tlookupFunc = function(data){\r\n\t\t\t\t\t\treturn column.getFieldValue(data);\r\n\t\t\t\t\t};\r\n\t\t\t\t}else{\r\n\t\t\t\t\tlookupFunc = function(data){\r\n\t\t\t\t\t\treturn data[group];\r\n\t\t\t\t\t};\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tthis.groupIDLookups.push({\r\n\t\t\t\tfield: typeof group === \"function\" ? false : group,\r\n\t\t\t\tfunc:lookupFunc,\r\n\t\t\t\tvalues:this.allowedValues ? this.allowedValues[i] : false,\r\n\t\t\t});\r\n\t\t});\r\n\r\n\t\tif(startOpen){\r\n\t\t\tif(!Array.isArray(startOpen)){\r\n\t\t\t\tstartOpen = [startOpen];\r\n\t\t\t}\r\n\r\n\t\t\tstartOpen.forEach((level) => {\r\n\t\t\t\tlevel = typeof level == \"function\" ? level : function(){return true;};\r\n\t\t\t});\r\n\r\n\t\t\tthis.startOpen = startOpen;\r\n\t\t}\r\n\r\n\t\tif(groupHeader){\r\n\t\t\tthis.headerGenerator = Array.isArray(groupHeader) ? groupHeader : [groupHeader];\r\n\t\t}\r\n\r\n\t\tthis.initialized = true;\r\n\t}\r\n\r\n\tsetDisplayIndex(index){\r\n\t\tthis.displayIndex = index;\r\n\t}\r\n\r\n\tgetDisplayIndex(){\r\n\t\treturn this.displayIndex;\r\n\t}\r\n\r\n\t//return appropriate rows with group headers\r\n\tgetRows(rows){\r\n\t\tif(this.groupIDLookups.length){\r\n\r\n\t\t\tthis.table.options.dataGrouping.call(this.table);\r\n\r\n\t\t\tthis.generateGroups(rows);\r\n\r\n\t\t\tif(this.table.options.dataGrouped){\r\n\t\t\t\tthis.table.options.dataGrouped.call(this.table, this.getGroups(true));\r\n\t\t\t}\r\n\r\n\t\t\treturn this.updateGroupRows();\r\n\r\n\t\t}else{\r\n\t\t\treturn rows.slice(0);\r\n\t\t}\r\n\t}\r\n\r\n\tgetGroups(compoment){\r\n\t\tvar groupComponents = [];\r\n\r\n\t\tthis.groupList.forEach(function(group){\r\n\t\t\tgroupComponents.push(compoment ? group.getComponent() : group);\r\n\t\t});\r\n\r\n\t\treturn groupComponents;\r\n\t}\r\n\r\n\tgetChildGroups(group){\r\n\t\tvar groupComponents = [];\r\n\r\n\t\tif(!group){\r\n\t\t\tgroup = this;\r\n\t\t}\r\n\r\n\t\tgroup.groupList.forEach((child) => {\r\n\t\t\tif(child.groupList.length){\r\n\t\t\t\tgroupComponents = groupComponents.concat(this.getChildGroups(child));\r\n\t\t\t}else{\r\n\t\t\t\tgroupComponents.push(child);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn groupComponents;\r\n\t}\r\n\r\n\twipe(){\r\n\t\tthis.groupList.forEach(function(group){\r\n\t\t\tgroup.wipe();\r\n\t\t});\r\n\t}\r\n\r\n\tpullGroupListData(groupList) {\r\n\t\tvar groupListData = [];\r\n\r\n\t\tgroupList.forEach((group) => {\r\n\t\t\tvar groupHeader = {};\r\n\t\t\tgroupHeader.level = 0;\r\n\t\t\tgroupHeader.rowCount = 0;\r\n\t\t\tgroupHeader.headerContent = \"\";\r\n\t\t\tvar childData = [];\r\n\r\n\t\t\tif (group.hasSubGroups) {\r\n\t\t\t\tchildData = this.pullGroupListData(group.groupList);\r\n\r\n\t\t\t\tgroupHeader.level = group.level;\r\n\t\t\t\tgroupHeader.rowCount = childData.length - group.groupList.length; // data length minus number of sub-headers\r\n\t\t\t\tgroupHeader.headerContent = group.generator(group.key, groupHeader.rowCount, group.rows, group);\r\n\r\n\t\t\t\tgroupListData.push(groupHeader);\r\n\t\t\t\tgroupListData = groupListData.concat(childData);\r\n\t\t\t}\r\n\r\n\t\t\telse {\r\n\t\t\t\tgroupHeader.level = group.level;\r\n\t\t\t\tgroupHeader.headerContent = group.generator(group.key, group.rows.length, group.rows, group);\r\n\t\t\t\tgroupHeader.rowCount = group.getRows().length;\r\n\r\n\t\t\t\tgroupListData.push(groupHeader);\r\n\r\n\t\t\t\tgroup.getRows().forEach((row) => {\r\n\t\t\t\t\tgroupListData.push(row.getData(\"data\"));\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn groupListData\r\n\t}\r\n\r\n\tgetGroupedData(){\r\n\r\n\t\treturn this.pullGroupListData(this.groupList);\r\n\t}\r\n\r\n\tgetRowGroup(row){\r\n\t\tvar match = false;\r\n\r\n\t\tthis.groupList.forEach((group) => {\r\n\t\t\tvar result = group.getRowGroup(row);\r\n\r\n\t\t\tif(result){\r\n\t\t\t\tmatch = result;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn match;\r\n\t}\r\n\r\n\tcountGroups(){\r\n\t\treturn this.groupList.length;\r\n\t}\r\n\r\n\tgenerateGroups(rows){\r\n\t\tvar oldGroups = this.groups;\r\n\r\n\t\tthis.groups = {};\r\n\t\tthis.groupList =[];\r\n\r\n\t\tif(this.allowedValues && this.allowedValues[0]){\r\n\t\t\tthis.allowedValues[0].forEach((value) => {\r\n\t\t\t\tthis.createGroup(value, 0, oldGroups);\r\n\t\t\t});\r\n\r\n\t\t\trows.forEach((row) => {\r\n\t\t\t\tthis.assignRowToExistingGroup(row, oldGroups);\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\trows.forEach((row) => {\r\n\t\t\t\tthis.assignRowToGroup(row, oldGroups);\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tcreateGroup(groupID, level, oldGroups){\r\n\t\tvar groupKey = level + \"_\" + groupID,\r\n\t\tgroup;\r\n\r\n\t\toldGroups = oldGroups || [];\r\n\r\n\t\tgroup = new Group(this, false, level, groupID, this.groupIDLookups[0].field, this.headerGenerator[0], oldGroups[groupKey]);\r\n\r\n\t\tthis.groups[groupKey] = group;\r\n\t\tthis.groupList.push(group);\r\n\t}\r\n\r\n\tassignRowToExistingGroup(row, oldGroups){\r\n\t\tvar groupID = this.groupIDLookups[0].func(row.getData()),\r\n\t\tgroupKey = \"0_\" + groupID;\r\n\r\n\t\tif(this.groups[groupKey]){\r\n\t\t\tthis.groups[groupKey].addRow(row);\r\n\t\t}\r\n\t}\r\n\r\n\tassignRowToGroup(row, oldGroups){\r\n\t\tvar groupID = this.groupIDLookups[0].func(row.getData()),\r\n\t\tnewGroupNeeded = !this.groups[\"0_\" + groupID];\r\n\r\n\t\tif(newGroupNeeded){\r\n\t\t\tthis.createGroup(groupID, 0, oldGroups);\r\n\t\t}\r\n\r\n\t\tthis.groups[\"0_\" + groupID].addRow(row);\r\n\r\n\t\treturn !newGroupNeeded;\r\n\t}\r\n\r\n\treassignRowToGroup(row){\r\n\t\tvar oldRowGroup = row.getGroup(),\r\n\t\t\toldGroupPath = oldRowGroup.getPath(),\r\n\t\t\tnewGroupPath = this.getExpectedPath(row),\r\n\t\t\tsamePath = true;\r\n\r\n\t\t// figure out if new group path is the same as old group path\r\n\t\tvar samePath = (oldGroupPath.length == newGroupPath.length) && oldGroupPath.every((element, index) => {\r\n\t\t\treturn element === newGroupPath[index];\r\n\t\t});\r\n\r\n\t\t// refresh if they new path and old path aren't the same (aka the row's groupings have changed)\r\n\t\tif(!samePath) {\r\n\t\t\toldRowGroup.removeRow(row);\r\n\t\t\tthis.assignRowToGroup(row, this.groups);\r\n\t\t\tthis.table.rowManager.refreshActiveData(\"group\", false, true);\r\n\t\t}\r\n\t}\r\n\r\n\tgetExpectedPath(row) {\r\n\t\tvar groupPath = [], rowData = row.getData();\r\n\r\n\t\tthis.groupIDLookups.forEach((groupId) => {\r\n\t\t\tgroupPath.push(groupId.func(rowData));\r\n\t\t});\r\n\r\n\t\treturn groupPath;\r\n\t}\r\n\r\n\tupdateGroupRows(force){\r\n\t\tvar output = [],\r\n\t\toldRowCount;\r\n\r\n\t\tthis.groupList.forEach((group) => {\r\n\t\t\toutput = output.concat(group.getHeadersAndRows());\r\n\t\t});\r\n\r\n\t\t//force update of table display\r\n\t\tif(force){\r\n\t\t\tvar displayIndex = this.table.rowManager.setDisplayRows(output, this.getDisplayIndex());\r\n\r\n\t\t\tif(displayIndex !== true){\r\n\t\t\t\tthis.setDisplayIndex(displayIndex);\r\n\t\t\t}\r\n\r\n\t\t\tthis.table.rowManager.refreshActiveData(\"group\", true, true);\r\n\t\t}\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tscrollHeaders(left){\r\n\t\tif(this.table.options.virtualDomHoz){\r\n\t\t\tleft -= this.table.vdomHoz.vDomPadLeft;\r\n\t\t}\r\n\r\n\t\tleft = left + \"px\";\r\n\r\n\t\tthis.groupList.forEach((group) => {\r\n\t\t\tgroup.scrollHeader(left);\r\n\t\t});\r\n\t}\r\n\r\n\tremoveGroup(group){\r\n\t\tvar groupKey = group.level + \"_\" + group.key,\r\n\t\tindex;\r\n\r\n\t\tif(this.groups[groupKey]){\r\n\t\t\tdelete this.groups[groupKey];\r\n\r\n\t\t\tindex = this.groupList.indexOf(group);\r\n\r\n\t\t\tif(index > -1){\r\n\t\t\t\tthis.groupList.splice(index, 1);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n\r\nGroupRows.moduleName = \"groupRows\";\r\n\r\nexport default GroupRows;","export default {\r\n\tcellEdit: function(action){\r\n\t\taction.component.setValueProcessData(action.data.oldValue);\r\n\t},\r\n\r\n\trowAdd: function(action){\r\n\t\taction.component.deleteActual();\r\n\t},\r\n\r\n\trowDelete: function(action){\r\n\t\tvar newRow = this.table.rowManager.addRowActual(action.data.data, action.data.pos, action.data.index);\r\n\r\n\t\tif(this.table.options.groupBy && this.table.modExists(\"groupRows\")){\r\n\t\t\tthis.table.modules.groupRows.updateGroupRows(true);\r\n\t\t}\r\n\r\n\t\tthis._rebindRow(action.component, newRow);\r\n\t},\r\n\r\n\trowMove: function(action){\r\n\t\tthis.table.rowManager.moveRowActual(action.component, this.table.rowManager.rows[action.data.posFrom], !action.data.after);\r\n\t\tthis.table.rowManager.redraw();\r\n\t},\r\n};","import Module from '../../core/Module.js';\r\n\r\nimport defaultUndoers from './defaults/undoers.js';\r\nimport defaultRedoers from './defaults/redoers.js';\r\n\r\nclass History extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.history = [];\r\n\t\tthis.index = -1;\r\n\t}\r\n\r\n\tclear(){\r\n\t\tthis.history = [];\r\n\t\tthis.index = -1;\r\n\t}\r\n\r\n\taction(type, component, data){\r\n\t\tthis.history = this.history.slice(0, this.index + 1);\r\n\r\n\t\tthis.history.push({\r\n\t\t\ttype:type,\r\n\t\t\tcomponent:component,\r\n\t\t\tdata:data,\r\n\t\t});\r\n\r\n\t\tthis.index ++;\r\n\t}\r\n\r\n\tgetHistoryUndoSize(){\r\n\t\treturn this.index + 1;\r\n\t}\r\n\r\n\tgetHistoryRedoSize(){\r\n\t\treturn this.history.length - (this.index + 1);\r\n\t}\r\n\r\n\tclearComponentHistory(component){\r\n\t\tvar index = this.history.findIndex(function(item){\r\n\t\t\treturn item.component === component;\r\n\t\t});\r\n\r\n\t\tif(index > -1){\r\n\t\t\tthis.history.splice(index, 1);\r\n\t \t\tif(index <= this.index){\r\n\t \t\t\tthis.index--;\r\n\t \t\t}\r\n\r\n\t \t\tthis.clearComponentHistory(component);\r\n\t\t}\r\n\t}\r\n\r\n\tundo(){\r\n\t\tif(this.index > -1){\r\n\t\t\tlet action = this.history[this.index];\r\n\r\n\t\t\tHistory.undoers[action.type].call(this, action);\r\n\r\n\t\t\tthis.index--;\r\n\r\n\t\t\tthis.table.options.historyUndo.call(this.table, action.type, action.component.getComponent(), action.data);\r\n\r\n\t\t\treturn true;\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"History Undo Error - No more history to undo\");\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\tredo(){\r\n\t\tif(this.history.length-1 > this.index){\r\n\r\n\t\t\tthis.index++;\r\n\r\n\t\t\tlet action = this.history[this.index];\r\n\r\n\t\t\tHistory.redoers[action.type].call(this, action);\r\n\r\n\t\t\tthis.table.options.historyRedo.call(this.table, action.type, action.component.getComponent(), action.data);\r\n\r\n\t\t\treturn true;\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"History Redo Error - No more history to redo\");\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\t//rebind rows to new element after deletion\r\n\t_rebindRow(oldRow, newRow){\r\n\t\tthis.history.forEach(function(action){\r\n\t\t\tif(action.component instanceof Row){\r\n\t\t\t\tif(action.component === oldRow){\r\n\t\t\t\t\taction.component = newRow;\r\n\t\t\t\t}\r\n\t\t\t}else if(action.component instanceof Cell){\r\n\t\t\t\tif(action.component.row === oldRow){\r\n\t\t\t\t\tvar field = action.component.column.getField();\r\n\r\n\t\t\t\t\tif(field){\r\n\t\t\t\t\t\taction.component = newRow.getCell(field);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n}\r\n\r\nHistory.moduleName = \"history\";\r\n\r\n//load defaults\r\nHistory.undoers = defaultUndoers;\r\nHistory.redoers = defaultRedoers;\r\n\r\nexport default History;","import Module from '../../core/Module.js';\r\n\r\nclass HtmlTableImport extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.fieldIndex = [];\r\n\t\tthis.hasIndex = false;\r\n\t}\r\n\r\n\tparseTable(){\r\n\t\tvar element = this.table.element,\r\n\t\toptions = this.table.options,\r\n\t\tcolumns = options.columns,\r\n\t\theaders = element.getElementsByTagName(\"th\"),\r\n\t\trows = element.getElementsByTagName(\"tbody\")[0],\r\n\t\tdata = [],\r\n\t\tnewTable;\r\n\r\n\t\tthis.hasIndex = false;\r\n\r\n\t\tthis.table.options.htmlImporting.call(this.table);\r\n\r\n\t\trows = rows ? rows.getElementsByTagName(\"tr\") : [];\r\n\r\n\t\t//check for tablator inline options\r\n\t\tthis._extractOptions(element, options);\r\n\r\n\t\tif(headers.length){\r\n\t\t\tthis._extractHeaders(headers, rows);\r\n\t\t}else{\r\n\t\t\tthis._generateBlankHeaders(headers, rows);\r\n\t\t}\r\n\r\n\t\t//iterate through table rows and build data set\r\n\t\tfor(var index = 0; index < rows.length; index++){\r\n\t\t\tvar row = rows[index],\r\n\t\t\tcells = row.getElementsByTagName(\"td\"),\r\n\t\t\titem = {};\r\n\r\n\t\t\t//create index if the dont exist in table\r\n\t\t\tif(!this.hasIndex){\r\n\t\t\t\titem[options.index] = index;\r\n\t\t\t}\r\n\r\n\t\t\tfor(var i = 0; i < cells.length; i++){\r\n\t\t\t\tvar cell = cells[i];\r\n\t\t\t\tif(typeof this.fieldIndex[i] !== \"undefined\"){\r\n\t\t\t\t\titem[this.fieldIndex[i]] = cell.innerHTML;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t//add row data to item\r\n\t\t\tdata.push(item);\r\n\t\t}\r\n\r\n\t\t//create new element\r\n\t\tvar newElement = document.createElement(\"div\");\r\n\r\n\t\t//transfer attributes to new element\r\n\t\tvar attributes = element.attributes;\r\n\r\n\t\t// loop through attributes and apply them on div\r\n\r\n\t\tfor(var i in attributes){\r\n\t\t\tif(typeof attributes[i] == \"object\"){\r\n\t\t\t\tnewElement.setAttribute(attributes[i].name, attributes[i].value);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// replace table with div element\r\n\t\telement.parentNode.replaceChild(newElement, element);\r\n\r\n\t\toptions.data = data;\r\n\r\n\t\tthis.table.options.htmlImported.call(this.table);\r\n\r\n\t\tthis.table.element = newElement;\r\n\t}\r\n\r\n\t//extract tabulator attribute options\r\n\t_extractOptions(element, options, defaultOptions){\r\n\t\tvar attributes = element.attributes;\r\n\t\tvar optionsArr = defaultOptions ? Object.assign([], defaultOptions) : Object.keys(options);\r\n\t\tvar optionsList = {};\r\n\r\n\t\toptionsArr.forEach((item) => {\r\n\t\t\toptionsList[item.toLowerCase()] = item;\r\n\t\t});\r\n\r\n\t\tfor(var index in attributes){\r\n\t\t\tvar attrib = attributes[index];\r\n\t\t\tvar name;\r\n\r\n\t\t\tif(attrib && typeof attrib == \"object\" && attrib.name && attrib.name.indexOf(\"tabulator-\") === 0){\r\n\t\t\t\tname = attrib.name.replace(\"tabulator-\", \"\");\r\n\r\n\t\t\t\tif(typeof optionsList[name] !== \"undefined\"){\r\n\t\t\t\t\toptions[optionsList[name]] = this._attribValue(attrib.value);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//get value of attribute\r\n\t_attribValue(value){\r\n\t\tif(value === \"true\"){\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\tif(value === \"false\"){\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\treturn value;\r\n\t}\r\n\r\n\t//find column if it has already been defined\r\n\t_findCol(title){\r\n\t\tvar match = this.table.options.columns.find((column) => {\r\n\t\t\treturn column.title === title;\r\n\t\t});\r\n\r\n\t\treturn match || false;\r\n\t}\r\n\r\n\t//extract column from headers\r\n\t_extractHeaders(headers, rows){\r\n\t\tfor(var index = 0; index < headers.length; index++){\r\n\t\t\tvar header = headers[index],\r\n\t\t\texists = false,\r\n\t\t\tcol = this._findCol(header.textContent),\r\n\t\t\twidth, attributes;\r\n\r\n\t\t\tif(col){\r\n\t\t\t\texists = true;\r\n\t\t\t}else{\r\n\t\t\t\tcol = {title:header.textContent.trim()};\r\n\t\t\t}\r\n\r\n\t\t\tif(!col.field) {\r\n\t\t\t\tcol.field = header.textContent.trim().toLowerCase().replace(\" \", \"_\");\r\n\t\t\t}\r\n\r\n\t\t\twidth = header.getAttribute(\"width\");\r\n\r\n\t\t\tif(width && !col.width)\t{\r\n\t\t\t\tcol.width = width;\r\n\t\t\t}\r\n\r\n\t\t\t//check for tablator inline options\r\n\t\t\tattributes = header.attributes;\r\n\r\n\t\t\t// //check for tablator inline options\r\n\t\t\tthis._extractOptions(header, col, Column.prototype.defaultOptionList);\r\n\r\n\t\t\tthis.fieldIndex[index] = col.field;\r\n\r\n\t\t\tif(col.field == this.table.options.index){\r\n\t\t\t\tthis.hasIndex = true;\r\n\t\t\t}\r\n\r\n\t\t\tif(!exists){\r\n\t\t\t\tthis.table.options.columns.push(col);\r\n\t\t\t}\r\n\r\n\t\t}\r\n\t}\r\n\r\n\t//generate blank headers\r\n\t_generateBlankHeaders(headers, rows){\r\n\t\tfor(var index = 0; index < headers.length; index++){\r\n\t\t\tvar header = headers[index],\r\n\t\t\tcol = {title:\"\", field:\"col\" + index};\r\n\r\n\t\t\tthis.fieldIndex[index] = col.field;\r\n\r\n\t\t\tvar width = header.getAttribute(\"width\");\r\n\r\n\t\t\tif(width){\r\n\t\t\t\tcol.width = width;\r\n\t\t\t}\r\n\r\n\t\t\tthis.table.options.columns.push(col);\r\n\t\t}\r\n\t}\r\n}\r\n\r\nHtmlTableImport.moduleName = \"htmlTableImport\";\r\n\r\nexport default HtmlTableImport;","export default {\r\n\tcellEdit: function(action){\r\n\t\taction.component.setValueProcessData(action.data.newValue);\r\n\t},\r\n\r\n\trowAdd: function(action){\r\n\t\tvar newRow = this.table.rowManager.addRowActual(action.data.data, action.data.pos, action.data.index);\r\n\r\n\t\tif(this.table.options.groupBy && this.table.modExists(\"groupRows\")){\r\n\t\t\tthis.table.modules.groupRows.updateGroupRows(true);\r\n\t\t}\r\n\r\n\t\tthis._rebindRow(action.component, newRow);\r\n\t},\r\n\r\n\trowDelete:function(action){\r\n\t\taction.component.deleteActual();\r\n\t},\r\n\r\n\trowMove: function(action){\r\n\t\tthis.table.rowManager.moveRowActual(action.component, this.table.rowManager.rows[action.data.posTo], action.data.after);\r\n\t\tthis.table.rowManager.redraw();\r\n\t},\r\n};","export default {\r\n\tnavPrev:\"shift + 9\",\r\n\tnavNext:9,\r\n\tnavUp:38,\r\n\tnavDown:40,\r\n\tscrollPageUp:33,\r\n\tscrollPageDown:34,\r\n\tscrollToStart:36,\r\n\tscrollToEnd:35,\r\n\tundo:\"ctrl + 90\",\r\n\tredo:\"ctrl + 89\",\r\n\tcopyToClipboard:\"ctrl + 67\",\r\n};","export default {\r\n\tkeyBlock:function(e){\r\n\t\te.stopPropagation();\r\n\t\te.preventDefault();\r\n\t},\r\n\tscrollPageUp:function(e){\r\n\t\tvar rowManager = this.table.rowManager,\r\n\t\tnewPos = rowManager.scrollTop - rowManager.height,\r\n\t\tscrollMax = rowManager.element.scrollHeight;\r\n\r\n\t\te.preventDefault();\r\n\r\n\t\tif(rowManager.displayRowsCount){\r\n\t\t\tif(newPos >= 0){\r\n\t\t\t\trowManager.element.scrollTop = newPos;\r\n\t\t\t}else{\r\n\t\t\t\trowManager.scrollToRow(rowManager.getDisplayRows()[0]);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.table.element.focus();\r\n\t},\r\n\tscrollPageDown:function(e){\r\n\t\tvar rowManager = this.table.rowManager,\r\n\t\tnewPos = rowManager.scrollTop + rowManager.height,\r\n\t\tscrollMax = rowManager.element.scrollHeight;\r\n\r\n\t\te.preventDefault();\r\n\r\n\t\tif(rowManager.displayRowsCount){\r\n\t\t\tif(newPos <= scrollMax){\r\n\t\t\t\trowManager.element.scrollTop = newPos;\r\n\t\t\t}else{\r\n\t\t\t\trowManager.scrollToRow(rowManager.getDisplayRows()[rowManager.displayRowsCount - 1]);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.table.element.focus();\r\n\r\n\t},\r\n\tscrollToStart:function(e){\r\n\t\tvar rowManager = this.table.rowManager;\r\n\r\n\t\te.preventDefault();\r\n\r\n\t\tif(rowManager.displayRowsCount){\r\n\t\t\trowManager.scrollToRow(rowManager.getDisplayRows()[0]);\r\n\t\t}\r\n\r\n\t\tthis.table.element.focus();\r\n\t},\r\n\tscrollToEnd:function(e){\r\n\t\tvar rowManager = this.table.rowManager;\r\n\r\n\t\te.preventDefault();\r\n\r\n\t\tif(rowManager.displayRowsCount){\r\n\t\t\trowManager.scrollToRow(rowManager.getDisplayRows()[rowManager.displayRowsCount - 1]);\r\n\t\t}\r\n\r\n\t\tthis.table.element.focus();\r\n\t},\r\n\tnavPrev:function(e){\r\n\t\tvar cell = false;\r\n\r\n\t\tif(this.table.modExists(\"edit\")){\r\n\t\t\tcell = this.table.modules.edit.currentCell;\r\n\r\n\t\t\tif(cell){\r\n\t\t\t\te.preventDefault();\r\n\t\t\t\tcell.nav().prev();\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\tnavNext:function(e){\r\n\t\tvar cell = false;\r\n\t\tvar newRow = this.table.options.tabEndNewRow;\r\n\t\tvar nav;\r\n\r\n\t\tif(this.table.modExists(\"edit\")){\r\n\t\t\tcell = this.table.modules.edit.currentCell;\r\n\r\n\t\t\tif(cell){\r\n\t\t\t\te.preventDefault();\r\n\r\n\t\t\t\tnav = cell.nav();\r\n\r\n\t\t\t\tif(!nav.next()){\r\n\t\t\t\t\tif(newRow){\r\n\r\n\t\t\t\t\t\tcell.getElement().firstChild.blur();\r\n\r\n\t\t\t\t\t\tif(newRow === true){\r\n\t\t\t\t\t\t\tnewRow = this.table.addRow({})\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\tif(typeof newRow == \"function\"){\r\n\t\t\t\t\t\t\t\tnewRow = this.table.addRow(newRow(cell.row.getComponent()))\r\n\t\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\t\tnewRow = this.table.addRow(Object.assign({}, newRow));\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tnewRow.then(() => {\r\n\t\t\t\t\t\t\tsetTimeout(() => {\r\n\t\t\t\t\t\t\t\tnav.next();\r\n\t\t\t\t\t\t\t})\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\tnavLeft:function(e){\r\n\t\tvar cell = false;\r\n\r\n\t\tif(this.table.modExists(\"edit\")){\r\n\t\t\tcell = this.table.modules.edit.currentCell;\r\n\r\n\t\t\tif(cell){\r\n\t\t\t\te.preventDefault();\r\n\t\t\t\tcell.nav().left();\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\tnavRight:function(e){\r\n\t\tvar cell = false;\r\n\r\n\t\tif(this.table.modExists(\"edit\")){\r\n\t\t\tcell = this.table.modules.edit.currentCell;\r\n\r\n\t\t\tif(cell){\r\n\t\t\t\te.preventDefault();\r\n\t\t\t\tcell.nav().right();\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\tnavUp:function(e){\r\n\t\tvar cell = false;\r\n\r\n\t\tif(this.table.modExists(\"edit\")){\r\n\t\t\tcell = this.table.modules.edit.currentCell;\r\n\r\n\t\t\tif(cell){\r\n\t\t\t\te.preventDefault();\r\n\t\t\t\tcell.nav().up();\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\tnavDown:function(e){\r\n\t\tvar cell = false;\r\n\r\n\t\tif(this.table.modExists(\"edit\")){\r\n\t\t\tcell = this.table.modules.edit.currentCell;\r\n\r\n\t\t\tif(cell){\r\n\t\t\t\te.preventDefault();\r\n\t\t\t\tcell.nav().down();\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\tundo:function(e){\r\n\t\tvar cell = false;\r\n\t\tif(this.table.options.history && this.table.modExists(\"history\") && this.table.modExists(\"edit\")){\r\n\r\n\t\t\tcell = this.table.modules.edit.currentCell;\r\n\r\n\t\t\tif(!cell){\r\n\t\t\t\te.preventDefault();\r\n\t\t\t\tthis.table.modules.history.undo();\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\tredo:function(e){\r\n\t\tvar cell = false;\r\n\t\tif(this.table.options.history && this.table.modExists(\"history\") && this.table.modExists(\"edit\")){\r\n\r\n\t\t\tcell = this.table.modules.edit.currentCell;\r\n\r\n\t\t\tif(!cell){\r\n\t\t\t\te.preventDefault();\r\n\t\t\t\tthis.table.modules.history.redo();\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\tcopyToClipboard:function(e){\r\n\t\tif(!this.table.modules.edit.currentCell){\r\n\t\t\tif(this.table.modExists(\"clipboard\", true)){\r\n\t\t\t\tthis.table.modules.clipboard.copy(false, true);\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n};","import Module from '../../core/Module.js';\r\n\r\nimport defaultBindings from './defaults/bindings.js';\r\nimport defaultActions from './defaults/actions.js';\r\n\r\nclass Keybindings extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.watchKeys = null;\r\n\t\tthis.pressedKeys = null;\r\n\t\tthis.keyupBinding = false;\r\n\t\tthis.keydownBinding = false;\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tvar bindings = this.table.options.keybindings,\r\n\t\tmergedBindings = {};\r\n\r\n\t\tthis.watchKeys = {};\r\n\t\tthis.pressedKeys = [];\r\n\r\n\t\tif(bindings !== false){\r\n\r\n\t\t\tfor(let key in Keybindings.bindings){\r\n\t\t\t\tmergedBindings[key] = Keybindings.bindings[key];\r\n\t\t\t}\r\n\r\n\t\t\tif(Object.keys(bindings).length){\r\n\r\n\t\t\t\tfor(let key in bindings){\r\n\t\t\t\t\tmergedBindings[key] = bindings[key];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tthis.mapBindings(mergedBindings);\r\n\t\t\tthis.bindEvents();\r\n\t\t}\r\n\t}\r\n\r\n\tmapBindings(bindings){\r\n\t\tfor(let key in bindings){\r\n\t\t\tif(Keybindings.actions[key]){\r\n\t\t\t\tif(bindings[key]){\r\n\t\t\t\t\tif(typeof bindings[key] !== \"object\"){\r\n\t\t\t\t\t\tbindings[key] = [bindings[key]];\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tbindings[key].forEach((binding) => {\r\n\t\t\t\t\t\tthis.mapBinding(key, binding);\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Key Binding Error - no such action:\", key);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tmapBinding(action, symbolsList){\r\n\t\tvar binding = {\r\n\t\t\taction: Keybindings.actions[action],\r\n\t\t\tkeys: [],\r\n\t\t\tctrl: false,\r\n\t\t\tshift: false,\r\n\t\t\tmeta: false,\r\n\t\t};\r\n\r\n\t\tvar symbols = symbolsList.toString().toLowerCase().split(\" \").join(\"\").split(\"+\");\r\n\r\n\t\tsymbols.forEach((symbol) => {\r\n\t\t\tswitch(symbol){\r\n\t\t\t\tcase \"ctrl\":\r\n\t\t\t\tbinding.ctrl = true;\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"shift\":\r\n\t\t\t\tbinding.shift = true;\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"meta\":\r\n\t\t\t\tbinding.meta = true;\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tdefault:\r\n\t\t\t\tsymbol = parseInt(symbol);\r\n\t\t\t\tbinding.keys.push(symbol);\r\n\r\n\t\t\t\tif(!this.watchKeys[symbol]){\r\n\t\t\t\t\tthis.watchKeys[symbol] = [];\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.watchKeys[symbol].push(binding);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tbindEvents(){\r\n\t\tvar self = this;\r\n\r\n\t\tthis.keyupBinding = function(e){\r\n\t\t\tvar code = e.keyCode;\r\n\t\t\tvar bindings = self.watchKeys[code];\r\n\r\n\t\t\tif(bindings){\r\n\r\n\t\t\t\tself.pressedKeys.push(code);\r\n\r\n\t\t\t\tbindings.forEach(function(binding){\r\n\t\t\t\t\tself.checkBinding(e, binding);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tthis.keydownBinding = function(e){\r\n\t\t\tvar code = e.keyCode;\r\n\t\t\tvar bindings = self.watchKeys[code];\r\n\r\n\t\t\tif(bindings){\r\n\r\n\t\t\t\tvar index = self.pressedKeys.indexOf(code);\r\n\r\n\t\t\t\tif(index > -1){\r\n\t\t\t\t\tself.pressedKeys.splice(index, 1);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tthis.table.element.addEventListener(\"keydown\", this.keyupBinding);\r\n\r\n\t\tthis.table.element.addEventListener(\"keyup\", this.keydownBinding);\r\n\t}\r\n\r\n\tclearBindings(){\r\n\t\tif(this.keyupBinding){\r\n\t\t\tthis.table.element.removeEventListener(\"keydown\", this.keyupBinding);\r\n\t\t}\r\n\r\n\t\tif(this.keydownBinding){\r\n\t\t\tthis.table.element.removeEventListener(\"keyup\", this.keydownBinding);\r\n\t\t}\r\n\t}\r\n\r\n\tcheckBinding(e, binding){\r\n\t\tvar match = true;\r\n\r\n\t\tif(e.ctrlKey == binding.ctrl && e.shiftKey == binding.shift && e.metaKey == binding.meta){\r\n\t\t\tbinding.keys.forEach((key) => {\r\n\t\t\t\tvar index = this.pressedKeys.indexOf(key);\r\n\r\n\t\t\t\tif(index == -1){\r\n\t\t\t\t\tmatch = false;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tif(match){\r\n\t\t\t\tbinding.action.call(this, e);\r\n\t\t\t}\r\n\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t}\r\n}\r\n\r\nKeybindings.moduleName = \"keybindings\";\r\n\r\n//load defaults\r\nKeybindings.bindings = defaultBindings;\r\nKeybindings.actions = defaultActions;\r\n\r\nexport default Keybindings;","import Module from '../../core/Module.js';\r\nimport Helpers from '../../core/Helpers.js';\r\n\r\nclass Menu extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.menuElements = [];\r\n\t\tthis.blurEvent = this.hideMenu.bind(this);\r\n\t\tthis.escEvent = this.escMenu.bind(this);\r\n\t\tthis.nestedMenuBlock = false;\r\n\t\tthis.positionReversedX = false;\r\n\t}\r\n\r\n\tinitializeColumnHeader(column){\r\n\t\tvar headerMenuEl;\r\n\r\n\t\tif(column.definition.headerContextMenu){\r\n\t\t\tcolumn.getElement().addEventListener(\"contextmenu\", this.LoadMenuEvent.bind(this, column, column.definition.headerContextMenu));\r\n\t\t\tthis.tapHold(column, column.definition.headerContextMenu);\r\n\t\t}\r\n\r\n\t\t// if(column.definition.headerClickMenu){\r\n\t\t// \tcolumn.getElement().addEventListener(\"click\", this.LoadMenuEvent.bind(this, column, column.definition.headerClickMenu));\r\n\t\t// }\r\n\r\n\t\tif(column.definition.headerMenu){\r\n\r\n\t\t\theaderMenuEl = document.createElement(\"span\");\r\n\t\t\theaderMenuEl.classList.add(\"tabulator-header-menu-button\");\r\n\t\t\theaderMenuEl.innerHTML = \"⋮\";\r\n\r\n\t\t\theaderMenuEl.addEventListener(\"click\", (e) => {\r\n\t\t\t\te.stopPropagation();\r\n\t\t\t\te.preventDefault();\r\n\r\n\t\t\t\tthis.LoadMenuEvent(column, column.definition.headerMenu, e);\r\n\t\t\t});\r\n\r\n\t\t\tcolumn.titleElement.insertBefore(headerMenuEl, column.titleElement.firstChild);\r\n\t\t}\r\n\t}\r\n\r\n\tLoadMenuEvent(component, menu, e){\r\n\t\tmenu = typeof menu == \"function\" ? menu.call(this.table, component.getComponent(), e) : menu;\r\n\r\n\t\t// if(component instanceof Cell){\r\n\t\t// \te.stopImmediatePropagation();\r\n\t\t// }\r\n\r\n\t\tthis.loadMenu(e, component, menu);\r\n\t}\r\n\r\n\ttapHold(component, menu){\r\n\t\tvar element = component.getElement(),\r\n\t\ttapHold = null,\r\n\t\tloaded = false;\r\n\r\n\t\telement.addEventListener(\"touchstart\", (e) => {\r\n\t\t\tclearTimeout(tapHold);\r\n\t\t\tloaded = false;\r\n\r\n\t\t\ttapHold = setTimeout(() => {\r\n\t\t\t\tclearTimeout(tapHold);\r\n\t\t\t\ttapHold = null;\r\n\t\t\t\tloaded = true;\r\n\r\n\t\t\t\tthis.LoadMenuEvent(component, menu, e);\r\n\t\t\t}, 1000);\r\n\r\n\t\t}, {passive: true});\r\n\r\n\t\telement.addEventListener(\"touchend\", (e) => {\r\n\t\t\tclearTimeout(tapHold);\r\n\t\t\ttapHold = null;\r\n\r\n\t\t\tif(loaded){\r\n\t\t\t\te.preventDefault();\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tinitializeCell(cell){\r\n\t\tif(cell.column.definition.contextMenu){\r\n\t\t\tcell.getElement(true).addEventListener(\"contextmenu\", this.LoadMenuEvent.bind(this, cell, cell.column.definition.contextMenu));\r\n\t\t\tthis.tapHold(cell, cell.column.definition.contextMenu);\r\n\t\t}\r\n\r\n\t\tif(cell.column.definition.clickMenu){\r\n\t\t\tcell.getElement(true).addEventListener(\"click\", this.LoadMenuEvent.bind(this, cell, cell.column.definition.clickMenu));\r\n\t\t}\r\n\t}\r\n\r\n\tinitializeRow(row){\r\n\t\tif(this.table.options.rowContextMenu){\r\n\t\t\trow.getElement().addEventListener(\"contextmenu\", this.LoadMenuEvent.bind(this, row, this.table.options.rowContextMenu));\r\n\t\t\tthis.tapHold(row, this.table.options.rowContextMenu);\r\n\t\t}\r\n\r\n\t\tif(this.table.options.rowClickMenu){\r\n\t\t\trow.getElement().addEventListener(\"click\", this.LoadMenuEvent.bind(this, row, this.table.options.rowClickMenu));\r\n\t\t}\r\n\t}\r\n\r\n\tinitializeGroup (group){\r\n\t\tif(this.table.options.groupContextMenu){\r\n\t\t\tgroup.getElement().addEventListener(\"contextmenu\", this.LoadMenuEvent.bind(this, group, this.table.options.groupContextMenu));\r\n\t\t\tthis.tapHold(group, this.table.options.groupContextMenu);\r\n\t\t}\r\n\r\n\t\tif(this.table.options.groupClickMenu){\r\n\t\t\tgroup.getElement().addEventListener(\"click\", this.LoadMenuEvent.bind(this, group, this.table.options.groupClickMenu));\r\n\t\t}\r\n\t}\r\n\r\n\tloadMenu(e, component, menu, parentEl){\r\n\r\n\t\tvar touch = !(e instanceof MouseEvent);\r\n\r\n\t\tvar menuEl = document.createElement(\"div\");\r\n\t\tmenuEl.classList.add(\"tabulator-menu\");\r\n\r\n\t\tif(!touch){\r\n\t\t\te.preventDefault();\r\n\t\t}\r\n\r\n\t\t//abort if no menu set\r\n\t\tif(!menu || !menu.length){\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif(!parentEl){\r\n\t\t\tif(this.nestedMenuBlock){\r\n\t\t\t\t//abort if child menu already open\r\n\t\t\t\tif(this.isOpen()){\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tthis.nestedMenuBlock = setTimeout(() => {\r\n\t\t\t\t\tthis.nestedMenuBlock = false;\r\n\t\t\t\t}, 100)\r\n\t\t\t}\r\n\r\n\t\t\tthis.hideMenu();\r\n\t\t\tthis.menuElements = [];\r\n\t\t}\r\n\r\n\t\tmenu.forEach((item) => {\r\n\t\t\tvar itemEl = document.createElement(\"div\"),\r\n\t\t\tlabel = item.label,\r\n\t\t\tdisabled = item.disabled;\r\n\r\n\t\t\tif(item.separator){\r\n\t\t\t\titemEl.classList.add(\"tabulator-menu-separator\");\r\n\t\t\t}else{\r\n\t\t\t\titemEl.classList.add(\"tabulator-menu-item\");\r\n\r\n\t\t\t\tif(typeof label == \"function\"){\r\n\t\t\t\t\tlabel = label.call(this.table, component.getComponent());\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(label instanceof Node){\r\n\t\t\t\t\titemEl.appendChild(label);\r\n\t\t\t\t}else{\r\n\t\t\t\t\titemEl.innerHTML = label;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(typeof disabled == \"function\"){\r\n\t\t\t\t\tdisabled = disabled.call(this.table, component.getComponent());\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(disabled){\r\n\t\t\t\t\titemEl.classList.add(\"tabulator-menu-item-disabled\");\r\n\t\t\t\t\titemEl.addEventListener(\"click\", (e) => {\r\n\t\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\t});\r\n\t\t\t\t}else{\r\n\t\t\t\t\tif(item.menu && item.menu.length){\r\n\t\t\t\t\t\titemEl.addEventListener(\"click\", (e) => {\r\n\t\t\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\t\t\tthis.hideOldSubMenus(menuEl);\r\n\t\t\t\t\t\t\tthis.loadMenu(e, component, item.menu, itemEl);\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tif(item.action){\r\n\t\t\t\t\t\t\titemEl.addEventListener(\"click\", (e) => {\r\n\t\t\t\t\t\t\t\titem.action(e, component.getComponent());\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(item.menu && item.menu.length){\r\n\t\t\t\t\titemEl.classList.add(\"tabulator-menu-item-submenu\");\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tmenuEl.appendChild(itemEl);\r\n\t\t});\r\n\r\n\t\tmenuEl.addEventListener(\"click\", (e) => {\r\n\t\t\tthis.hideMenu();\r\n\t\t});\r\n\r\n\t\tthis.menuElements.push(menuEl);\r\n\t\tthis.positionMenu(menuEl, parentEl, touch, e);\r\n\t}\r\n\r\n\thideOldSubMenus(menuEl){\r\n\t\tvar index = this.menuElements.indexOf(menuEl);\r\n\r\n\t\tif(index > -1){\r\n\t\t\tfor(let i = this.menuElements.length - 1; i > index; i--){\r\n\t\t\t\tvar el = this.menuElements[i];\r\n\r\n\t\t\t\tif(el.parentNode){\r\n\t\t\t\t\tel.parentNode.removeChild(el);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.menuElements.pop();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tpositionMenu(element, parentEl, touch, e){\r\n\t\tvar docHeight = Math.max(document.body.offsetHeight, window.innerHeight),\r\n\t\tx, y, parentOffset;\r\n\r\n\t\tif(!parentEl){\r\n\t\t\tx = touch ? e.touches[0].pageX : e.pageX;\r\n\t\t\ty = touch ? e.touches[0].pageY : e.pageY;\r\n\r\n\t\t\tthis.positionReversedX = false;\r\n\t\t}else{\r\n\t\t\tparentOffset = Helpers.elOffset(parentEl);\r\n\t\t\tx = parentOffset.left + parentEl.offsetWidth;\r\n\t\t\ty = parentOffset.top - 1;\r\n\t\t}\r\n\r\n\t\telement.style.top = y + \"px\";\r\n\t\telement.style.left = x + \"px\";\r\n\r\n\t\tsetTimeout(() => {\r\n\t\t\tthis.table.rowManager.element.addEventListener(\"scroll\", this.blurEvent);\r\n\t\t\tdocument.body.addEventListener(\"click\", this.blurEvent);\r\n\t\t\tdocument.body.addEventListener(\"contextmenu\", this.blurEvent);\r\n\t\t\twindow.addEventListener(\"resize\", this.blurEvent);\r\n\t\t\tdocument.body.addEventListener(\"keydown\", this.escEvent);\r\n\t\t}, 100);\r\n\r\n\t\tdocument.body.appendChild(element);\r\n\r\n\t\t//move menu to start on bottom edge if it is too close to the edge of the screen\r\n\t\tif((y + element.offsetHeight) >= docHeight){\r\n\t\t\telement.style.top = \"\";\r\n\r\n\t\t\tif(parentEl){\r\n\t\t\t\telement.style.bottom = (docHeight - parentOffset.top - parentEl.offsetHeight - 1) + \"px\";\r\n\t\t\t}else{\r\n\t\t\t\telement.style.bottom = (docHeight - y) + \"px\";\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//move menu to start on right edge if it is too close to the edge of the screen\r\n\t\tif((x + element.offsetWidth) >= document.body.offsetWidth || this.positionReversedX){\r\n\t\t\telement.style.left = \"\";\r\n\r\n\t\t\tif(parentEl){\r\n\t\t\t\telement.style.right = (document.documentElement.offsetWidth - parentOffset.left) + \"px\";\r\n\t\t\t}else{\r\n\t\t\t\telement.style.right = (document.documentElement.offsetWidth - x) + \"px\";\r\n\t\t\t}\r\n\r\n\t\t\tthis.positionReversedX = true;\r\n\t\t}\r\n\t}\r\n\r\n\tisOpen(){\r\n\t\treturn !!this.menuElements.length;\r\n\t}\r\n\r\n\tescMenu(e){\r\n\t\tif(e.keyCode == 27){\r\n\t\t\tthis.hideMenu();\r\n\t\t}\r\n\t}\r\n\r\n\thideMenu(){\r\n\t\tthis.menuElements.forEach((menuEl) => {\r\n\t\t\tif(menuEl.parentNode){\r\n\t\t\t\tmenuEl.parentNode.removeChild(menuEl);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tdocument.body.removeEventListener(\"keydown\", this.escEvent);\r\n\t\tdocument.body.removeEventListener(\"click\", this.blurEvent);\r\n\t\tdocument.body.removeEventListener(\"contextmenu\", this.blurEvent);\r\n\t\twindow.removeEventListener(\"resize\", this.blurEvent);\r\n\t\tthis.table.rowManager.element.removeEventListener(\"scroll\", this.blurEvent);\r\n\t}\r\n}\r\n\r\nMenu.moduleName = \"menu\";\r\n\r\nexport default Menu;","import Module from '../../core/Module.js';\r\nimport Helpers from '../../core/Helpers.js';\r\n\r\nclass MoveColumns extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.placeholderElement = this.createPlaceholderElement();\r\n\t\tthis.hoverElement = false; //floating column header element\r\n\t\tthis.checkTimeout = false; //click check timeout holder\r\n\t\tthis.checkPeriod = 250; //period to wait on mousedown to consider this a move and not a click\r\n\t\tthis.moving = false; //currently moving column\r\n\t\tthis.toCol = false; //destination column\r\n\t\tthis.toColAfter = false; //position of moving column relative to the desitnation column\r\n\t\tthis.startX = 0; //starting position within header element\r\n\t\tthis.autoScrollMargin = 40; //auto scroll on edge when within margin\r\n\t\tthis.autoScrollStep = 5; //auto scroll distance in pixels\r\n\t\tthis.autoScrollTimeout = false; //auto scroll timeout\r\n\t\tthis.touchMove = false;\r\n\r\n\t\tthis.moveHover = this.moveHover.bind(this);\r\n\t\tthis.endMove = this.endMove.bind(this);\r\n\t}\r\n\r\n\tcreatePlaceholderElement(){\r\n\t\tvar el = document.createElement(\"div\");\r\n\r\n\t\tel.classList.add(\"tabulator-col\");\r\n\t\tel.classList.add(\"tabulator-col-placeholder\");\r\n\r\n\t\treturn el;\r\n\t}\r\n\r\n\tinitializeColumn(column){\r\n\t\tvar self = this,\r\n\t\tconfig = {},\r\n\t\tcolEl;\r\n\r\n\t\tif(!column.modules.frozen){\r\n\r\n\t\t\tcolEl = column.getElement();\r\n\r\n\t\t\tconfig.mousemove = function(e){\r\n\t\t\t\tif(column.parent === self.moving.parent){\r\n\t\t\t\t\tif((((self.touchMove ? e.touches[0].pageX : e.pageX) - Helpers.elOffset(colEl).left) + self.table.columnManager.element.scrollLeft) > (column.getWidth() / 2)){\r\n\t\t\t\t\t\tif(self.toCol !== column || !self.toColAfter){\r\n\t\t\t\t\t\t\tcolEl.parentNode.insertBefore(self.placeholderElement, colEl.nextSibling);\r\n\t\t\t\t\t\t\tself.moveColumn(column, true);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tif(self.toCol !== column || self.toColAfter){\r\n\t\t\t\t\t\t\tcolEl.parentNode.insertBefore(self.placeholderElement, colEl);\r\n\t\t\t\t\t\t\tself.moveColumn(column, false);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}.bind(self);\r\n\r\n\t\t\tcolEl.addEventListener(\"mousedown\", function(e){\r\n\t\t\t\tself.touchMove = false;\r\n\t\t\t\tif(e.which === 1){\r\n\t\t\t\t\tself.checkTimeout = setTimeout(function(){\r\n\t\t\t\t\t\tself.startMove(e, column);\r\n\t\t\t\t\t}, self.checkPeriod);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tcolEl.addEventListener(\"mouseup\", function(e){\r\n\t\t\t\tif(e.which === 1){\r\n\t\t\t\t\tif(self.checkTimeout){\r\n\t\t\t\t\t\tclearTimeout(self.checkTimeout);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tself.bindTouchEvents(column);\r\n\t\t}\r\n\r\n\t\tcolumn.modules.moveColumn = config;\r\n\t}\r\n\r\n\tbindTouchEvents(column){\r\n\t\tvar colEl = column.getElement(),\r\n\t\tstartXMove = false, //shifting center position of the cell\r\n\t\tdir = false,\r\n\t\tcurrentCol, nextCol, prevCol, nextColWidth, prevColWidth, nextColWidthLast, prevColWidthLast;\r\n\r\n\t\tcolEl.addEventListener(\"touchstart\", (e) => {\r\n\t\t\tthis.checkTimeout = setTimeout(() => {\r\n\t\t\t\tthis.touchMove = true;\r\n\t\t\t\tcurrentCol = column;\r\n\t\t\t\tnextCol = column.nextColumn();\r\n\t\t\t\tnextColWidth = nextCol ? nextCol.getWidth()/2 : 0;\r\n\t\t\t\tprevCol = column.prevColumn();\r\n\t\t\t\tprevColWidth = prevCol ? prevCol.getWidth()/2 : 0;\r\n\t\t\t\tnextColWidthLast = 0;\r\n\t\t\t\tprevColWidthLast = 0;\r\n\t\t\t\tstartXMove = false;\r\n\r\n\t\t\t\tthis.startMove(e, column);\r\n\t\t\t}, this.checkPeriod);\r\n\t\t}, {passive: true});\r\n\r\n\t\tcolEl.addEventListener(\"touchmove\", (e) => {\r\n\t\t\tvar halfCol, diff, moveToCol;\r\n\r\n\t\t\tif(this.moving){\r\n\t\t\t\tthis.moveHover(e);\r\n\r\n\t\t\t\tif(!startXMove){\r\n\t\t\t\t\tstartXMove = e.touches[0].pageX;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tdiff = e.touches[0].pageX - startXMove;\r\n\r\n\t\t\t\tif(diff > 0){\r\n\t\t\t\t\tif(nextCol && diff - nextColWidthLast > nextColWidth){\r\n\t\t\t\t\t\tmoveToCol = nextCol;\r\n\r\n\t\t\t\t\t\tif(moveToCol !== column){\r\n\t\t\t\t\t\t\tstartXMove = e.touches[0].pageX;\r\n\t\t\t\t\t\t\tmoveToCol.getElement().parentNode.insertBefore(this.placeholderElement, moveToCol.getElement().nextSibling);\r\n\t\t\t\t\t\t\tthis.moveColumn(moveToCol, true);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}else{\r\n\t\t\t\t\tif(prevCol && -diff - prevColWidthLast > prevColWidth){\r\n\t\t\t\t\t\tmoveToCol = prevCol;\r\n\r\n\t\t\t\t\t\tif(moveToCol !== column){\r\n\t\t\t\t\t\t\tstartXMove = e.touches[0].pageX;\r\n\t\t\t\t\t\t\tmoveToCol.getElement().parentNode.insertBefore(this.placeholderElement, moveToCol.getElement());\r\n\t\t\t\t\t\t\tthis.moveColumn(moveToCol, false);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(moveToCol){\r\n\t\t\t\t\tcurrentCol = moveToCol;\r\n\t\t\t\t\tnextCol = moveToCol.nextColumn();\r\n\t\t\t\t\tnextColWidthLast = nextColWidth;\r\n\t\t\t\t\tnextColWidth = nextCol ? nextCol.getWidth() / 2 : 0;\r\n\t\t\t\t\tprevCol = moveToCol.prevColumn();\r\n\t\t\t\t\tprevColWidthLast = prevColWidth;\r\n\t\t\t\t\tprevColWidth = prevCol ? prevCol.getWidth() / 2 : 0;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}, {passive: true});\r\n\r\n\t\tcolEl.addEventListener(\"touchend\", (e) => {\r\n\t\t\tif(this.checkTimeout){\r\n\t\t\t\tclearTimeout(this.checkTimeout);\r\n\t\t\t}\r\n\t\t\tif(this.moving){\r\n\t\t\t\tthis.endMove(e);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tstartMove(e, column){\r\n\t\tvar element = column.getElement();\r\n\r\n\t\tthis.moving = column;\r\n\t\tthis.startX = (this.touchMove ? e.touches[0].pageX : e.pageX) - Helpers.elOffset(element).left;\r\n\r\n\t\tthis.table.element.classList.add(\"tabulator-block-select\");\r\n\r\n\t\t//create placeholder\r\n\t\tthis.placeholderElement.style.width = column.getWidth() + \"px\";\r\n\t\tthis.placeholderElement.style.height = column.getHeight() + \"px\";\r\n\r\n\t\telement.parentNode.insertBefore(this.placeholderElement, element);\r\n\t\telement.parentNode.removeChild(element);\r\n\r\n\t\t//create hover element\r\n\t\tthis.hoverElement = element.cloneNode(true);\r\n\t\tthis.hoverElement.classList.add(\"tabulator-moving\");\r\n\r\n\t\tthis.table.columnManager.getElement().appendChild(this.hoverElement);\r\n\r\n\t\tthis.hoverElement.style.left = \"0\";\r\n\t\tthis.hoverElement.style.bottom = \"0\";\r\n\r\n\t\tif(!this.touchMove){\r\n\t\t\tthis._bindMouseMove();\r\n\r\n\t\t\tdocument.body.addEventListener(\"mousemove\", this.moveHover);\r\n\t\t\tdocument.body.addEventListener(\"mouseup\", this.endMove);\r\n\t\t}\r\n\r\n\t\tthis.moveHover(e);\r\n\t}\r\n\r\n\t_bindMouseMove(){\r\n\t\tthis.table.columnManager.columnsByIndex.forEach(function(column){\r\n\t\t\tif(column.modules.moveColumn.mousemove){\r\n\t\t\t\tcolumn.getElement().addEventListener(\"mousemove\", column.modules.moveColumn.mousemove);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t_unbindMouseMove(){\r\n\t\tthis.table.columnManager.columnsByIndex.forEach(function(column){\r\n\t\t\tif(column.modules.moveColumn.mousemove){\r\n\t\t\t\tcolumn.getElement().removeEventListener(\"mousemove\", column.modules.moveColumn.mousemove);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tmoveColumn(column, after){\r\n\t\tvar movingCells = this.moving.getCells();\r\n\r\n\t\tthis.toCol = column;\r\n\t\tthis.toColAfter = after;\r\n\r\n\t\tif(after){\r\n\t\t\tcolumn.getCells().forEach(function(cell, i){\r\n\t\t\t\tvar cellEl = cell.getElement(true);\r\n\t\t\t\tcellEl.parentNode.insertBefore(movingCells[i].getElement(), cellEl.nextSibling);\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tcolumn.getCells().forEach(function(cell, i){\r\n\t\t\t\tvar cellEl = cell.getElement(true);\r\n\t\t\t\tcellEl.parentNode.insertBefore(movingCells[i].getElement(), cellEl);\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tendMove(e){\r\n\t\tif(e.which === 1 || this.touchMove){\r\n\t\t\tthis._unbindMouseMove();\r\n\r\n\t\t\tthis.placeholderElement.parentNode.insertBefore(this.moving.getElement(), this.placeholderElement.nextSibling);\r\n\t\t\tthis.placeholderElement.parentNode.removeChild(this.placeholderElement);\r\n\t\t\tthis.hoverElement.parentNode.removeChild(this.hoverElement);\r\n\r\n\t\t\tthis.table.element.classList.remove(\"tabulator-block-select\");\r\n\r\n\t\t\tif(this.toCol){\r\n\t\t\t\tthis.table.columnManager.moveColumnActual(this.moving, this.toCol, this.toColAfter);\r\n\t\t\t}\r\n\r\n\t\t\tthis.moving = false;\r\n\t\t\tthis.toCol = false;\r\n\t\t\tthis.toColAfter = false;\r\n\r\n\t\t\tif(!this.touchMove){\r\n\t\t\t\tdocument.body.removeEventListener(\"mousemove\", this.moveHover);\r\n\t\t\t\tdocument.body.removeEventListener(\"mouseup\", this.endMove);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tmoveHover(e){\r\n\t\tvar columnHolder = this.table.columnManager.getElement(),\r\n\t\tscrollLeft = columnHolder.scrollLeft,\r\n\t\txPos = ((this.touchMove ? e.touches[0].pageX : e.pageX) - Helpers.elOffset(columnHolder).left) + scrollLeft,\r\n\t\tscrollPos;\r\n\r\n\t\tthis.hoverElement.style.left = (xPos - this.startX) + \"px\";\r\n\r\n\t\tif(xPos - scrollLeft < this.autoScrollMargin){\r\n\t\t\tif(!this.autoScrollTimeout){\r\n\t\t\t\tthis.autoScrollTimeout = setTimeout(() => {\r\n\t\t\t\t\tscrollPos = Math.max(0,scrollLeft-5);\r\n\t\t\t\t\tthis.table.rowManager.getElement().scrollLeft = scrollPos;\r\n\t\t\t\t\tthis.autoScrollTimeout = false;\r\n\t\t\t\t}, 1);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(scrollLeft + columnHolder.clientWidth - xPos < this.autoScrollMargin){\r\n\t\t\tif(!this.autoScrollTimeout){\r\n\t\t\t\tthis.autoScrollTimeout = setTimeout(() => {\r\n\t\t\t\t\tscrollPos = Math.min(columnHolder.clientWidth, scrollLeft+5);\r\n\t\t\t\t\tthis.table.rowManager.getElement().scrollLeft = scrollPos;\r\n\t\t\t\t\tthis.autoScrollTimeout = false;\r\n\t\t\t\t}, 1);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n\r\nMoveColumns.moduleName = \"moveColumn\";\r\n\r\nexport default MoveColumns;\r\n","import Module from '../../core/Module.js';\r\nimport Helpers from '../../core/Helpers.js';\r\n\r\nclass MoveRows extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.placeholderElement = this.createPlaceholderElement();\r\n\t\tthis.hoverElement = false; //floating row header element\r\n\t\tthis.checkTimeout = false; //click check timeout holder\r\n\t\tthis.checkPeriod = 150; //period to wait on mousedown to consider this a move and not a click\r\n\t\tthis.moving = false; //currently moving row\r\n\t\tthis.toRow = false; //destination row\r\n\t\tthis.toRowAfter = false; //position of moving row relative to the desitnation row\r\n\t\tthis.hasHandle = false; //row has handle instead of fully movable row\r\n\t\tthis.startY = 0; //starting Y position within header element\r\n\t\tthis.startX = 0; //starting X position within header element\r\n\r\n\t\tthis.moveHover = this.moveHover.bind(this);\r\n\t\tthis.endMove = this.endMove.bind(this);\r\n\t\tthis.tableRowDropEvent = false;\r\n\r\n\t\tthis.touchMove = false;\r\n\r\n\t\tthis.connection = false;\r\n\t\tthis.connectionSelectorsTables = false;\r\n\t\tthis.connectionSelectorsElements = false;\r\n\t\tthis.connectionElements = [];\r\n\t\tthis.connections = [];\r\n\r\n\t\tthis.connectedTable = false;\r\n\t\tthis.connectedRow = false;\r\n\t}\r\n\r\n\tcreatePlaceholderElement(){\r\n\t\tvar el = document.createElement(\"div\");\r\n\r\n\t\tel.classList.add(\"tabulator-row\");\r\n\t\tel.classList.add(\"tabulator-row-placeholder\");\r\n\r\n\t\treturn el;\r\n\t}\r\n\r\n\tinitialize(handle){\r\n\t\tthis.connectionSelectorsTables = this.table.options.movableRowsConnectedTables;\r\n\t\tthis.connectionSelectorsElements = this.table.options.movableRowsConnectedElements;\r\n\r\n\t\tthis.connection = this.connectionSelectorsTables || this.connectionSelectorsElements;\r\n\t}\r\n\r\n\tsetHandle(handle){\r\n\t\tthis.hasHandle = handle;\r\n\t}\r\n\r\n\tinitializeGroupHeader(group){\r\n\t\tvar self = this,\r\n\t\tconfig = {},\r\n\t\trowEl;\r\n\r\n\t\t//inter table drag drop\r\n\t\tconfig.mouseup = function(e){\r\n\t\t\tself.tableRowDrop(e, row);\r\n\t\t}.bind(self);\r\n\r\n\t\t//same table drag drop\r\n\t\tconfig.mousemove = function(e){\r\n\t\t\tif(((e.pageY - Helpers.elOffset(group.element).top) + self.table.rowManager.element.scrollTop) > (group.getHeight() / 2)){\r\n\t\t\t\tif(self.toRow !== group || !self.toRowAfter){\r\n\t\t\t\t\tvar rowEl = group.getElement();\r\n\t\t\t\t\trowEl.parentNode.insertBefore(self.placeholderElement, rowEl.nextSibling);\r\n\t\t\t\t\tself.moveRow(group, true);\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tif(self.toRow !== group || self.toRowAfter){\r\n\t\t\t\t\tvar rowEl = group.getElement();\r\n\t\t\t\t\tif(rowEl.previousSibling){\r\n\t\t\t\t\t\trowEl.parentNode.insertBefore(self.placeholderElement, rowEl);\r\n\t\t\t\t\t\tself.moveRow(group, false);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}.bind(self);\r\n\r\n\t\tgroup.modules.moveRow = config;\r\n\t}\r\n\r\n\tinitializeRow(row){\r\n\t\tvar self = this,\r\n\t\tconfig = {},\r\n\t\trowEl;\r\n\r\n\t\t//inter table drag drop\r\n\t\tconfig.mouseup = function(e){\r\n\t\t\tself.tableRowDrop(e, row);\r\n\t\t}.bind(self);\r\n\r\n\t\t//same table drag drop\r\n\t\tconfig.mousemove = function(e){\r\n\t\t\tvar rowEl = row.getElement();\r\n\r\n\t\t\tif(((e.pageY - Helpers.elOffset(rowEl).top) + self.table.rowManager.element.scrollTop) > (row.getHeight() / 2)){\r\n\t\t\t\tif(self.toRow !== row || !self.toRowAfter){\r\n\t\t\t\t\trowEl.parentNode.insertBefore(self.placeholderElement, rowEl.nextSibling);\r\n\t\t\t\t\tself.moveRow(row, true);\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tif(self.toRow !== row || self.toRowAfter){\r\n\t\t\t\t\trowEl.parentNode.insertBefore(self.placeholderElement, rowEl);\r\n\t\t\t\t\tself.moveRow(row, false);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}.bind(self);\r\n\r\n\r\n\t\tif(!this.hasHandle){\r\n\r\n\t\t\trowEl = row.getElement();\r\n\r\n\t\t\trowEl.addEventListener(\"mousedown\", function(e){\r\n\t\t\t\tif(e.which === 1){\r\n\t\t\t\t\tself.checkTimeout = setTimeout(function(){\r\n\t\t\t\t\t\tself.startMove(e, row);\r\n\t\t\t\t\t}, self.checkPeriod);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\trowEl.addEventListener(\"mouseup\", function(e){\r\n\t\t\t\tif(e.which === 1){\r\n\t\t\t\t\tif(self.checkTimeout){\r\n\t\t\t\t\t\tclearTimeout(self.checkTimeout);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tthis.bindTouchEvents(row, row.getElement());\r\n\t\t}\r\n\r\n\t\trow.modules.moveRow = config;\r\n\t}\r\n\r\n\tinitializeCell(cell){\r\n\t\tvar self = this,\r\n\t\tcellEl = cell.getElement(true);\r\n\r\n\t\tcellEl.addEventListener(\"mousedown\", function(e){\r\n\t\t\tif(e.which === 1){\r\n\t\t\t\tself.checkTimeout = setTimeout(function(){\r\n\t\t\t\t\tself.startMove(e, cell.row);\r\n\t\t\t\t}, self.checkPeriod);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tcellEl.addEventListener(\"mouseup\", function(e){\r\n\t\t\tif(e.which === 1){\r\n\t\t\t\tif(self.checkTimeout){\r\n\t\t\t\t\tclearTimeout(self.checkTimeout);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tthis.bindTouchEvents(cell.row, cellEl);\r\n\t}\r\n\r\n\tbindTouchEvents(row, element){\r\n\t\tvar startYMove = false, //shifting center position of the cell\r\n\t\tdir = false,\r\n\t\tcurrentRow, nextRow, prevRow, nextRowHeight, prevRowHeight, nextRowHeightLast, prevRowHeightLast;\r\n\r\n\t\telement.addEventListener(\"touchstart\", (e) => {\r\n\t\t\tthis.checkTimeout = setTimeout(() => {\r\n\t\t\t\tthis.touchMove = true;\r\n\t\t\t\tcurrentRow = row;\r\n\t\t\t\tnextRow = row.nextRow();\r\n\t\t\t\tnextRowHeight = nextRow ? nextRow.getHeight()/2 : 0;\r\n\t\t\t\tprevRow = row.prevRow();\r\n\t\t\t\tprevRowHeight = prevRow ? prevRow.getHeight()/2 : 0;\r\n\t\t\t\tnextRowHeightLast = 0;\r\n\t\t\t\tprevRowHeightLast = 0;\r\n\t\t\t\tstartYMove = false;\r\n\r\n\t\t\t\tthis.startMove(e, row);\r\n\t\t\t}, this.checkPeriod);\r\n\t\t}, {passive: true});\r\n\t\tthis.moving, this.toRow, this.toRowAfter\r\n\t\telement.addEventListener(\"touchmove\", (e) => {\r\n\r\n\t\t\tvar halfCol, diff, moveToRow;\r\n\r\n\t\t\tif(this.moving){\r\n\t\t\t\te.preventDefault();\r\n\r\n\t\t\t\tthis.moveHover(e);\r\n\r\n\t\t\t\tif(!startYMove){\r\n\t\t\t\t\tstartYMove = e.touches[0].pageY;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tdiff = e.touches[0].pageY - startYMove;\r\n\r\n\t\t\t\tif(diff > 0){\r\n\t\t\t\t\tif(nextRow && diff - nextRowHeightLast > nextRowHeight){\r\n\t\t\t\t\t\tmoveToRow = nextRow;\r\n\r\n\t\t\t\t\t\tif(moveToRow !== row){\r\n\t\t\t\t\t\t\tstartYMove = e.touches[0].pageY\r\n\t\t\t\t\t\t\tmoveToRow.getElement().parentNode.insertBefore(this.placeholderElement, moveToRow.getElement().nextSibling);\r\n\t\t\t\t\t\t\tthis.moveRow(moveToRow, true);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}else{\r\n\t\t\t\t\tif(prevRow && -diff - prevRowHeightLast > prevRowHeight){\r\n\t\t\t\t\t\tmoveToRow = prevRow;\r\n\r\n\t\t\t\t\t\tif(moveToRow !== row){\r\n\t\t\t\t\t\t\tstartYMove = e.touches[0].pageY;\r\n\t\t\t\t\t\t\tmoveToRow.getElement().parentNode.insertBefore(this.placeholderElement, moveToRow.getElement());\r\n\t\t\t\t\t\t\tthis.moveRow(moveToRow, false);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(moveToRow){\r\n\t\t\t\t\tcurrentRow = moveToRow;\r\n\t\t\t\t\tnextRow = moveToRow.nextRow();\r\n\t\t\t\t\tnextRowHeightLast = nextRowHeight;\r\n\t\t\t\t\tnextRowHeight = nextRow ? nextRow.getHeight() / 2 : 0;\r\n\t\t\t\t\tprevRow = moveToRow.prevRow();\r\n\t\t\t\t\tprevRowHeightLast = prevRowHeight;\r\n\t\t\t\t\tprevRowHeight = prevRow ? prevRow.getHeight() / 2 : 0;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\telement.addEventListener(\"touchend\", (e) => {\r\n\t\t\tif(this.checkTimeout){\r\n\t\t\t\tclearTimeout(this.checkTimeout);\r\n\t\t\t}\r\n\t\t\tif(this.moving){\r\n\t\t\t\tthis.endMove(e);\r\n\t\t\t\tthis.touchMove = false;\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t_bindMouseMove(){\r\n\t\tthis.table.rowManager.getDisplayRows().forEach((row) => {\r\n\t\t\tif((row.type === \"row\" || row.type === \"group\") && row.modules.moveRow.mousemove){\r\n\t\t\t\trow.getElement().addEventListener(\"mousemove\", row.modules.moveRow.mousemove);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t_unbindMouseMove(){\r\n\t\tthis.table.rowManager.getDisplayRows().forEach((row) => {\r\n\t\t\tif((row.type === \"row\" || row.type === \"group\") && row.modules.moveRow.mousemove){\r\n\t\t\t\trow.getElement().removeEventListener(\"mousemove\", row.modules.moveRow.mousemove);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tstartMove(e, row){\r\n\t\tvar element = row.getElement();\r\n\r\n\t\tthis.setStartPosition(e, row);\r\n\r\n\t\tthis.moving = row;\r\n\r\n\t\tthis.table.element.classList.add(\"tabulator-block-select\");\r\n\r\n\t\t//create placeholder\r\n\t\tthis.placeholderElement.style.width = row.getWidth() + \"px\";\r\n\t\tthis.placeholderElement.style.height = row.getHeight() + \"px\";\r\n\r\n\t\tif(!this.connection){\r\n\t\t\telement.parentNode.insertBefore(this.placeholderElement, element);\r\n\t\t\telement.parentNode.removeChild(element);\r\n\t\t}else{\r\n\t\t\tthis.table.element.classList.add(\"tabulator-movingrow-sending\");\r\n\t\t\tthis.connectToTables(row);\r\n\t\t}\r\n\r\n\t\t//create hover element\r\n\t\tthis.hoverElement = element.cloneNode(true);\r\n\t\tthis.hoverElement.classList.add(\"tabulator-moving\");\r\n\r\n\t\tif(this.connection){\r\n\t\t\tdocument.body.appendChild(this.hoverElement);\r\n\t\t\tthis.hoverElement.style.left = \"0\";\r\n\t\t\tthis.hoverElement.style.top = \"0\";\r\n\t\t\tthis.hoverElement.style.width = this.table.element.clientWidth + \"px\";\r\n\t\t\tthis.hoverElement.style.whiteSpace = \"nowrap\";\r\n\t\t\tthis.hoverElement.style.overflow = \"hidden\";\r\n\t\t\tthis.hoverElement.style.pointerEvents = \"none\";\r\n\t\t}else{\r\n\t\t\tthis.table.rowManager.getTableElement().appendChild(this.hoverElement);\r\n\r\n\t\t\tthis.hoverElement.style.left = \"0\";\r\n\t\t\tthis.hoverElement.style.top = \"0\";\r\n\r\n\t\t\tthis._bindMouseMove();\r\n\t\t}\r\n\r\n\t\tdocument.body.addEventListener(\"mousemove\", this.moveHover);\r\n\t\tdocument.body.addEventListener(\"mouseup\", this.endMove);\r\n\r\n\t\tthis.moveHover(e);\r\n\t}\r\n\r\n\tsetStartPosition(e, row){\r\n\t\tvar pageX = this.touchMove ? e.touches[0].pageX : e.pageX,\r\n\t\tpageY = this.touchMove ? e.touches[0].pageY : e.pageY,\r\n\t\telement, position;\r\n\r\n\t\telement = row.getElement();\r\n\t\tif(this.connection){\r\n\t\t\tposition = element.getBoundingClientRect();\r\n\r\n\t\t\tthis.startX = position.left - pageX + window.pageXOffset;\r\n\t\t\tthis.startY = position.top - pageY + window.pageYOffset;\r\n\t\t}else{\r\n\t\t\tthis.startY = (pageY - element.getBoundingClientRect().top);\r\n\t\t}\r\n\t}\r\n\r\n\tendMove(e){\r\n\t\tif(!e || e.which === 1 || this.touchMove){\r\n\t\t\tthis._unbindMouseMove();\r\n\r\n\t\t\tif(!this.connection){\r\n\t\t\t\tthis.placeholderElement.parentNode.insertBefore(this.moving.getElement(), this.placeholderElement.nextSibling);\r\n\t\t\t\tthis.placeholderElement.parentNode.removeChild(this.placeholderElement);\r\n\t\t\t}\r\n\r\n\t\t\tthis.hoverElement.parentNode.removeChild(this.hoverElement);\r\n\r\n\t\t\tthis.table.element.classList.remove(\"tabulator-block-select\");\r\n\r\n\t\t\tif(this.toRow){\r\n\t\t\t\tthis.table.rowManager.moveRow(this.moving, this.toRow, this.toRowAfter);\r\n\t\t\t}\r\n\r\n\t\t\tthis.moving = false;\r\n\t\t\tthis.toRow = false;\r\n\t\t\tthis.toRowAfter = false;\r\n\r\n\t\t\tdocument.body.removeEventListener(\"mousemove\", this.moveHover);\r\n\t\t\tdocument.body.removeEventListener(\"mouseup\", this.endMove);\r\n\r\n\t\t\tif(this.connection){\r\n\t\t\t\tthis.table.element.classList.remove(\"tabulator-movingrow-sending\");\r\n\t\t\t\tthis.disconnectFromTables();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tmoveRow(row, after){\r\n\t\tthis.toRow = row;\r\n\t\tthis.toRowAfter = after;\r\n\t}\r\n\r\n\tmoveHover(e){\r\n\t\tif(this.connection){\r\n\t\t\tthis.moveHoverConnections.call(this, e);\r\n\t\t}else{\r\n\t\t\tthis.moveHoverTable.call(this, e);\r\n\t\t}\r\n\t}\r\n\r\n\tmoveHoverTable(e){\r\n\t\tvar rowHolder = this.table.rowManager.getElement(),\r\n\t\tscrollTop = rowHolder.scrollTop,\r\n\t\tyPos = ((this.touchMove ? e.touches[0].pageY : e.pageY) - rowHolder.getBoundingClientRect().top) + scrollTop,\r\n\t\tscrollPos;\r\n\r\n\t\tthis.hoverElement.style.top = (yPos - this.startY) + \"px\";\r\n\t}\r\n\r\n\tmoveHoverConnections(e){\r\n\t\tthis.hoverElement.style.left = (this.startX + (this.touchMove ? e.touches[0].pageX : e.pageX)) + \"px\";\r\n\t\tthis.hoverElement.style.top = (this.startY + (this.touchMove ? e.touches[0].pageY : e.pageY)) + \"px\";\r\n\t}\r\n\r\n\telementRowDrop(e, element, row){\r\n\t\tif(this.table.options.movableRowsElementDrop){\r\n\t\t\tthis.table.options.movableRowsElementDrop(e, element, row ? row.getComponent() : false);\r\n\t\t}\r\n\t}\r\n\r\n\t//establish connection with other tables\r\n\tconnectToTables(row){\r\n\t\tvar connectionTables;\r\n\r\n\t\tif(this.connectionSelectorsTables){\r\n\t\t\tconnectionTables = this.table.modules.comms.getConnections(this.connectionSelectorsTables);\r\n\r\n\t\t\tthis.table.options.movableRowsSendingStart.call(this.table, connectionTables);\r\n\r\n\t\t\tthis.table.modules.comms.send(this.connectionSelectorsTables, \"moveRow\", \"connect\", {\r\n\t\t\t\trow:row,\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif(this.connectionSelectorsElements){\r\n\r\n\t\t\tthis.connectionElements = [];\r\n\r\n\t\t\tif(!Array.isArray(this.connectionSelectorsElements)){\r\n\t\t\t\tthis.connectionSelectorsElements = [this.connectionSelectorsElements];\r\n\t\t\t}\r\n\r\n\t\t\tthis.connectionSelectorsElements.forEach((query) => {\r\n\t\t\t\tif(typeof query === \"string\"){\r\n\t\t\t\t\tthis.connectionElements = this.connectionElements.concat(Array.prototype.slice.call(document.querySelectorAll(query)));\r\n\t\t\t\t}else{\r\n\t\t\t\t\tthis.connectionElements.push(query);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tthis.connectionElements.forEach((element) => {\r\n\t\t\t\tvar dropEvent = (e) => {\r\n\t\t\t\t\tthis.elementRowDrop(e, element, this.moving);\r\n\t\t\t\t};\r\n\r\n\t\t\t\telement.addEventListener(\"mouseup\", dropEvent);\r\n\t\t\t\telement.tabulatorElementDropEvent = dropEvent;\r\n\r\n\t\t\t\telement.classList.add(\"tabulator-movingrow-receiving\");\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\t//disconnect from other tables\r\n\tdisconnectFromTables(){\r\n\t\tvar connectionTables;\r\n\r\n\t\tif(this.connectionSelectorsTables){\r\n\t\t\tconnectionTables = this.table.modules.comms.getConnections(this.connectionSelectorsTables);\r\n\r\n\t\t\tthis.table.options.movableRowsSendingStop.call(this.table, connectionTables);\r\n\r\n\t\t\tthis.table.modules.comms.send(this.connectionSelectorsTables, \"moveRow\", \"disconnect\");\r\n\t\t}\r\n\r\n\t\tthis.connectionElements.forEach((element) => {\r\n\t\t\telement.classList.remove(\"tabulator-movingrow-receiving\");\r\n\t\t\telement.removeEventListener(\"mouseup\", element.tabulatorElementDropEvent);\r\n\t\t\tdelete element.tabulatorElementDropEvent;\r\n\t\t});\r\n\t}\r\n\r\n\t//accept incomming connection\r\n\tconnect(table, row){\r\n\t\tif(!this.connectedTable){\r\n\t\t\tthis.connectedTable = table;\r\n\t\t\tthis.connectedRow = row;\r\n\r\n\t\t\tthis.table.element.classList.add(\"tabulator-movingrow-receiving\");\r\n\r\n\t\t\tthis.table.rowManager.getDisplayRows().forEach((row) => {\r\n\t\t\t\tif(row.type === \"row\" && row.modules.moveRow && row.modules.moveRow.mouseup){\r\n\t\t\t\t\trow.getElement().addEventListener(\"mouseup\", row.modules.moveRow.mouseup);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tthis.tableRowDropEvent = this.tableRowDrop.bind(this);\r\n\r\n\t\t\tthis.table.element.addEventListener(\"mouseup\", this.tableRowDropEvent);\r\n\r\n\t\t\tthis.table.options.movableRowsReceivingStart.call(this.table, row, table);\r\n\r\n\t\t\treturn true;\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Move Row Error - Table cannot accept connection, already connected to table:\", this.connectedTable);\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\t//close incomming connection\r\n\tdisconnect(table){\r\n\t\tif(table === this.connectedTable){\r\n\t\t\tthis.connectedTable = false;\r\n\t\t\tthis.connectedRow = false;\r\n\r\n\t\t\tthis.table.element.classList.remove(\"tabulator-movingrow-receiving\");\r\n\r\n\t\t\tthis.table.rowManager.getDisplayRows().forEach((row) =>{\r\n\t\t\t\tif(row.type === \"row\" && row.modules.moveRow && row.modules.moveRow.mouseup){\r\n\t\t\t\t\trow.getElement().removeEventListener(\"mouseup\", row.modules.moveRow.mouseup);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tthis.table.element.removeEventListener(\"mouseup\", this.tableRowDropEvent);\r\n\r\n\t\t\tthis.table.options.movableRowsReceivingStop.call(this.table, table);\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Move Row Error - trying to disconnect from non connected table\")\r\n\t\t}\r\n\t}\r\n\r\n\tdropComplete(table, row, success){\r\n\t\tvar sender = false;\r\n\r\n\t\tif(success){\r\n\r\n\t\t\tswitch(typeof this.table.options.movableRowsSender){\r\n\t\t\t\tcase \"string\":\r\n\t\t\t\tsender = this.senders[this.table.options.movableRowsSender];\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"function\":\r\n\t\t\t\tsender = this.table.options.movableRowsSender;\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\r\n\t\t\tif(sender){\r\n\t\t\t\tsender.call(this, this.moving.getComponent(), row ? row.getComponent() : undefined, table)\r\n\t\t\t}else{\r\n\t\t\t\tif(this.table.options.movableRowsSender){\r\n\t\t\t\t\tconsole.warn(\"Mover Row Error - no matching sender found:\", this.table.options.movableRowsSender);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tthis.table.options.movableRowsSent.call(this.table, this.moving.getComponent(), row ? row.getComponent() : undefined, table);\r\n\r\n\t\t}else{\r\n\t\t\tthis.table.options.movableRowsSentFailed.call(this.table, this.moving.getComponent(), row ? row.getComponent() : undefined, table);\r\n\t\t}\r\n\r\n\t\tthis.endMove();\r\n\t}\r\n\r\n\ttableRowDrop(e, row){\r\n\t\tvar receiver = false,\r\n\t\tsuccess = false;\r\n\r\n\t\te.stopImmediatePropagation();\r\n\r\n\t\tswitch(typeof this.table.options.movableRowsReceiver){\r\n\t\t\tcase \"string\":\r\n\t\t\treceiver = this.receivers[this.table.options.movableRowsReceiver];\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"function\":\r\n\t\t\treceiver = this.table.options.movableRowsReceiver;\r\n\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\tif(receiver){\r\n\t\t\tsuccess = receiver.call(this, this.connectedRow.getComponent(), row ? row.getComponent() : undefined, this.connectedTable)\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Mover Row Error - no matching receiver found:\", this.table.options.movableRowsReceiver)\r\n\t\t}\r\n\r\n\t\tif(success){\r\n\t\t\tthis.table.options.movableRowsReceived.call(this.table, this.connectedRow.getComponent(), row ? row.getComponent() : undefined, this.connectedTable);\r\n\t\t}else{\r\n\t\t\tthis.table.options.movableRowsReceivedFailed.call(this.table, this.connectedRow.getComponent(), row ? row.getComponent() : undefined, this.connectedTable);\r\n\t\t}\r\n\r\n\t\tthis.table.modules.comms.send(this.connectedTable, \"moveRow\", \"dropcomplete\", {\r\n\t\t\trow:row,\r\n\t\t\tsuccess:success,\r\n\t\t});\r\n\t}\r\n\r\n\tcommsReceived(table, action, data){\r\n\t\tswitch(action){\r\n\t\t\tcase \"connect\":\r\n\t\t\treturn this.connect(table, data.row);\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"disconnect\":\r\n\t\t\treturn this.disconnect(table);\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"dropcomplete\":\r\n\t\t\treturn this.dropComplete(table, data.row, data.success);\r\n\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n}\r\n\r\nMoveRows.prototype.receivers = {\r\n\tinsert:function(fromRow, toRow, fromTable){\r\n\t\tthis.table.addRow(fromRow.getData(), undefined, toRow);\r\n\t\treturn true;\r\n\t},\r\n\r\n\tadd:function(fromRow, toRow, fromTable){\r\n\t\tthis.table.addRow(fromRow.getData());\r\n\t\treturn true;\r\n\t},\r\n\r\n\tupdate:function(fromRow, toRow, fromTable){\r\n\t\tif(toRow){\r\n\t\t\ttoRow.update(fromRow.getData());\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t},\r\n\r\n\treplace:function(fromRow, toRow, fromTable){\r\n\t\tif(toRow){\r\n\t\t\tthis.table.addRow(fromRow.getData(), undefined, toRow);\r\n\t\t\ttoRow.delete();\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t},\r\n};\r\n\r\nMoveRows.prototype.senders = {\r\n\tdelete:function(fromRow, toRow, toTable){\r\n\t\tfromRow.delete();\r\n\t}\r\n};\r\n\r\nMoveRows.moduleName = \"moveRow\";\r\n\r\nexport default MoveRows;","export default {};","import Module from '../../core/Module.js';\r\n\r\nimport defaultMutators from './defaults/mutators.js';\r\n\r\nclass Mutator extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.allowedTypes = [\"\", \"data\", \"edit\", \"clipboard\"]; //list of muatation types\r\n\t\tthis.enabled = true;\r\n\t}\r\n\r\n\t//initialize column mutator\r\n\tinitializeColumn(column){\r\n\t\tvar match = false,\r\n\t\tconfig = {};\r\n\r\n\t\tthis.allowedTypes.forEach((type) => {\r\n\t\t\tvar key = \"mutator\" + (type.charAt(0).toUpperCase() + type.slice(1)),\r\n\t\t\tmutator;\r\n\r\n\t\t\tif(column.definition[key]){\r\n\t\t\t\tmutator = this.lookupMutator(column.definition[key]);\r\n\r\n\t\t\t\tif(mutator){\r\n\t\t\t\t\tmatch = true;\r\n\r\n\t\t\t\t\tconfig[key] = {\r\n\t\t\t\t\t\tmutator:mutator,\r\n\t\t\t\t\t\tparams: column.definition[key + \"Params\"] || {},\r\n\t\t\t\t\t};\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tif(match){\r\n\t\t\tcolumn.modules.mutate = config;\r\n\t\t}\r\n\t}\r\n\r\n\tlookupMutator(value){\r\n\t\tvar mutator = false;\r\n\r\n\t\t//set column mutator\r\n\t\tswitch(typeof value){\r\n\t\t\tcase \"string\":\r\n\t\t\tif(Mutator.mutators[value]){\r\n\t\t\t\tmutator = Mutator.mutators[value];\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Mutator Error - No such mutator found, ignoring: \", value);\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"function\":\r\n\t\t\tmutator = value;\r\n\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\treturn mutator;\r\n\t}\r\n\r\n\t//apply mutator to row\r\n\ttransformRow(data, type, updatedData){\r\n\t\tvar key = \"mutator\" + (type.charAt(0).toUpperCase() + type.slice(1)),\r\n\t\tvalue;\r\n\r\n\t\tif(this.enabled){\r\n\r\n\t\t\tthis.table.columnManager.traverse((column) => {\r\n\t\t\t\tvar mutator, params, component;\r\n\r\n\t\t\t\tif(column.modules.mutate){\r\n\t\t\t\t\tmutator = column.modules.mutate[key] || column.modules.mutate.mutator || false;\r\n\r\n\t\t\t\t\tif(mutator){\r\n\t\t\t\t\t\tvalue = column.getFieldValue(typeof updatedData !== \"undefined\" ? updatedData : data);\r\n\r\n\t\t\t\t\t\tif(type == \"data\" || typeof value !== \"undefined\"){\r\n\t\t\t\t\t\t\tcomponent = column.getComponent();\r\n\t\t\t\t\t\t\tparams = typeof mutator.params === \"function\" ? mutator.params(value, data, type, component) : mutator.params;\r\n\t\t\t\t\t\t\tcolumn.setFieldValue(data, mutator.mutator(value, data, type, params, component));\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn data;\r\n\t}\r\n\r\n\t//apply mutator to new cell value\r\n\ttransformCell(cell, value){\r\n\t\tvar mutator = cell.column.modules.mutate.mutatorEdit || cell.column.modules.mutate.mutator || false,\r\n\t\ttempData = {};\r\n\r\n\t\tif(mutator){\r\n\t\t\ttempData = Object.assign(tempData, cell.row.getData());\r\n\t\t\tcell.column.setFieldValue(tempData, value);\r\n\t\t\treturn mutator.mutator(value, tempData, \"edit\", mutator.params, cell.getComponent());\r\n\t\t}else{\r\n\t\t\treturn value;\r\n\t\t}\r\n\t}\r\n\r\n\tenable(){\r\n\t\tthis.enabled = true;\r\n\t}\r\n\r\n\tdisable(){\r\n\t\tthis.enabled = false;\r\n\t}\r\n}\r\n\r\nMutator.moduleName = \"mutator\";\r\n\r\n//load defaults\r\nMutator.mutators = defaultMutators;\r\n\r\nexport default Mutator;","export default {\r\n\t\"page\":\"page\",\r\n\t\"size\":\"size\",\r\n\t\"sorters\":\"sorters\",\r\n\t\"filters\":\"filters\",\r\n};","import Module from '../../core/Module.js';\r\n\r\nimport Helpers from '../../core/Helpers.js';\r\n\r\nimport defaultDataSentNames from './defaults/dataSentNames.js';\r\nimport defaultDataReceivedNames from './defaults/dataReceivedNames.js';\r\n\r\nclass Page extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.mode = \"local\";\r\n\t\tthis.progressiveLoad = false;\r\n\r\n\t\tthis.size = 0;\r\n\t\tthis.page = 1;\r\n\t\tthis.count = 5;\r\n\t\tthis.max = 1;\r\n\r\n\t\tthis.displayIndex = 0; //index in display pipeline\r\n\r\n\t\tthis.initialLoad = true;\r\n\r\n\t\tthis.pageSizes = [];\r\n\r\n\t\tthis.dataReceivedNames = {};\r\n\t\tthis.dataSentNames = {};\r\n\r\n\t\tthis.createElements();\r\n\t}\r\n\r\n\tcreateElements(){\r\n\t\tvar button;\r\n\r\n\t\tthis.element = document.createElement(\"span\");\r\n\t\tthis.element.classList.add(\"tabulator-paginator\");\r\n\r\n\t\tthis.pagesElement = document.createElement(\"span\");\r\n\t\tthis.pagesElement.classList.add(\"tabulator-pages\");\r\n\r\n\t\tbutton = document.createElement(\"button\");\r\n\t\tbutton.classList.add(\"tabulator-page\");\r\n\t\tbutton.setAttribute(\"type\", \"button\");\r\n\t\tbutton.setAttribute(\"role\", \"button\");\r\n\t\tbutton.setAttribute(\"aria-label\", \"\");\r\n\t\tbutton.setAttribute(\"title\", \"\");\r\n\r\n\t\tthis.firstBut = button.cloneNode(true);\r\n\t\tthis.firstBut.setAttribute(\"data-page\", \"first\");\r\n\r\n\t\tthis.prevBut = button.cloneNode(true);\r\n\t\tthis.prevBut.setAttribute(\"data-page\", \"prev\");\r\n\r\n\t\tthis.nextBut = button.cloneNode(true);\r\n\t\tthis.nextBut.setAttribute(\"data-page\", \"next\");\r\n\r\n\t\tthis.lastBut = button.cloneNode(true);\r\n\t\tthis.lastBut.setAttribute(\"data-page\", \"last\");\r\n\r\n\t\tif(this.table.options.paginationSizeSelector){\r\n\t\t\tthis.pageSizeSelect = document.createElement(\"select\");\r\n\t\t\tthis.pageSizeSelect.classList.add(\"tabulator-page-size\");\r\n\t\t}\r\n\t}\r\n\r\n\tgeneratePageSizeSelectList(){\r\n\t\tvar pageSizes = [];\r\n\r\n\t\tif(this.pageSizeSelect){\r\n\r\n\t\t\tif(Array.isArray(this.table.options.paginationSizeSelector)){\r\n\t\t\t\tpageSizes = this.table.options.paginationSizeSelector;\r\n\t\t\t\tthis.pageSizes = pageSizes;\r\n\r\n\t\t\t\tif(this.pageSizes.indexOf(this.size) == -1){\r\n\t\t\t\t\tpageSizes.unshift(this.size);\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\r\n\t\t\t\tif(this.pageSizes.indexOf(this.size) == -1){\r\n\t\t\t\t\tpageSizes = [];\r\n\r\n\t\t\t\t\tfor (let i = 1; i < 5; i++){\r\n\t\t\t\t\t\tpageSizes.push(this.size * i);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tthis.pageSizes = pageSizes;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tpageSizes = this.pageSizes;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\twhile(this.pageSizeSelect.firstChild) this.pageSizeSelect.removeChild(this.pageSizeSelect.firstChild);\r\n\r\n\t\t\tpageSizes.forEach((item) => {\r\n\t\t\t\tvar itemEl = document.createElement(\"option\");\r\n\t\t\t\titemEl.value = item;\r\n\r\n\t\t\t\tif(item === true){\r\n\t\t\t\t\tthis.table.modules.localize.bind(\"pagination|all\", function(value){\r\n\t\t\t\t\t\titemEl.innerHTML = value;\r\n\t\t\t\t\t});\r\n\t\t\t\t}else{\r\n\t\t\t\t\titemEl.innerHTML = item;\r\n\t\t\t\t}\r\n\r\n\r\n\r\n\t\t\t\tthis.pageSizeSelect.appendChild(itemEl);\r\n\t\t\t});\r\n\r\n\t\t\tthis.pageSizeSelect.value = this.size;\r\n\t\t}\r\n\t}\r\n\r\n\t//setup pageination\r\n\tinitialize(hidden){\r\n\t\tvar pageSelectLabel, testElRow, testElCell;\r\n\r\n\t\t//update param names\r\n\t\tthis.dataSentNames = Object.assign({}, Page.defaultDataSentNames);\r\n\t\tthis.dataSentNames = Object.assign(this.dataSentNames, this.table.options.paginationDataSent);\r\n\r\n\t\tthis.dataReceivedNames = Object.assign({}, Page.defaultDataReceivedNames);\r\n\t\tthis.dataReceivedNames = Object.assign(this.dataReceivedNames, this.table.options.paginationDataReceived);\r\n\r\n\t\t//build pagination element\r\n\r\n\t\t//bind localizations\r\n\t\tthis.table.modules.localize.bind(\"pagination|first\", (value) => {\r\n\t\t\tthis.firstBut.innerHTML = value;\r\n\t\t});\r\n\r\n\t\tthis.table.modules.localize.bind(\"pagination|first_title\", (value) => {\r\n\t\t\tthis.firstBut.setAttribute(\"aria-label\", value);\r\n\t\t\tthis.firstBut.setAttribute(\"title\", value);\r\n\t\t});\r\n\r\n\t\tthis.table.modules.localize.bind(\"pagination|prev\", (value) => {\r\n\t\t\tthis.prevBut.innerHTML = value;\r\n\t\t});\r\n\r\n\t\tthis.table.modules.localize.bind(\"pagination|prev_title\", (value) => {\r\n\t\t\tthis.prevBut.setAttribute(\"aria-label\", value);\r\n\t\t\tthis.prevBut.setAttribute(\"title\", value);\r\n\t\t});\r\n\r\n\t\tthis.table.modules.localize.bind(\"pagination|next\", (value) => {\r\n\t\t\tthis.nextBut.innerHTML = value;\r\n\t\t});\r\n\r\n\t\tthis.table.modules.localize.bind(\"pagination|next_title\", (value) => {\r\n\t\t\tthis.nextBut.setAttribute(\"aria-label\", value);\r\n\t\t\tthis.nextBut.setAttribute(\"title\", value);\r\n\t\t});\r\n\r\n\t\tthis.table.modules.localize.bind(\"pagination|last\", (value) => {\r\n\t\t\tthis.lastBut.innerHTML = value;\r\n\t\t});\r\n\r\n\t\tthis.table.modules.localize.bind(\"pagination|last_title\", (value) => {\r\n\t\t\tthis.lastBut.setAttribute(\"aria-label\", value);\r\n\t\t\tthis.lastBut.setAttribute(\"title\", value);\r\n\t\t});\r\n\r\n\t\t//click bindings\r\n\t\tthis.firstBut.addEventListener(\"click\", () => {\r\n\t\t\tthis.setPage(1).then(()=>{}).catch(()=>{});\r\n\t\t});\r\n\r\n\t\tthis.prevBut.addEventListener(\"click\", () => {\r\n\t\t\tthis.previousPage().then(()=>{}).catch(()=>{});\r\n\t\t});\r\n\r\n\t\tthis.nextBut.addEventListener(\"click\", () => {\r\n\t\t\tthis.nextPage().then(()=>{}).catch(()=>{});\r\n\t\t});\r\n\r\n\t\tthis.lastBut.addEventListener(\"click\", () => {\r\n\t\t\tthis.setPage(this.max).then(()=>{}).catch(()=>{});\r\n\t\t});\r\n\r\n\t\tif(this.table.options.paginationElement){\r\n\t\t\tthis.element = this.table.options.paginationElement;\r\n\t\t}\r\n\r\n\t\tif(this.pageSizeSelect){\r\n\t\t\tpageSelectLabel = document.createElement(\"label\");\r\n\r\n\t\t\tthis.table.modules.localize.bind(\"pagination|page_size\", (value) => {\r\n\t\t\t\tthis.pageSizeSelect.setAttribute(\"aria-label\", value);\r\n\t\t\t\tthis.pageSizeSelect.setAttribute(\"title\", value);\r\n\t\t\t\tpageSelectLabel.innerHTML = value;\r\n\t\t\t});\r\n\r\n\t\t\tthis.element.appendChild(pageSelectLabel);\r\n\t\t\tthis.element.appendChild(this.pageSizeSelect);\r\n\r\n\t\t\tthis.pageSizeSelect.addEventListener(\"change\", (e) => {\r\n\t\t\t\tthis.setPageSize(this.pageSizeSelect.value == \"true\" ? true : this.pageSizeSelect.value);\r\n\t\t\t\tthis.setPage(1).then(()=>{}).catch(()=>{});\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\t//append to DOM\r\n\t\tthis.element.appendChild(this.firstBut);\r\n\t\tthis.element.appendChild(this.prevBut);\r\n\t\tthis.element.appendChild(this.pagesElement);\r\n\t\tthis.element.appendChild(this.nextBut);\r\n\t\tthis.element.appendChild(this.lastBut);\r\n\r\n\t\tif(!this.table.options.paginationElement && !hidden){\r\n\t\t\tthis.table.footerManager.append(this.element, this);\r\n\t\t}\r\n\r\n\t\t//set default values\r\n\t\tthis.mode = this.table.options.pagination;\r\n\r\n\t\tif(this.table.options.paginationSize){\r\n\t\t\tthis.size = this.table.options.paginationSize;\r\n\t\t}else{\r\n\t\t\ttestElRow = document.createElement(\"div\");\r\n\t\t\ttestElRow.classList.add(\"tabulator-row\");\r\n\t\t\ttestElRow.style.visibility = hidden;\r\n\r\n\t\t\ttestElCell = document.createElement(\"div\");\r\n\t\t\ttestElCell.classList.add(\"tabulator-cell\");\r\n\t\t\ttestElCell.innerHTML = \"Page Row Test\";\r\n\r\n\t\t\ttestElRow.appendChild(testElCell);\r\n\r\n\t\t\tthis.table.rowManager.getTableElement().appendChild(testElRow);\r\n\r\n\t\t\tthis.size = Math.floor(this.table.rowManager.getElement().clientHeight / testElRow.offsetHeight);\r\n\r\n\t\t\tthis.table.rowManager.getTableElement().removeChild(testElRow);\r\n\t\t}\r\n\r\n\t\t// this.page = this.table.options.paginationInitialPage || 1;\r\n\t\tthis.count = this.table.options.paginationButtonCount;\r\n\r\n\t\tthis.generatePageSizeSelectList();\r\n\t}\r\n\r\n\tinitializeProgressive(mode){\r\n\t\tthis.initialize(true);\r\n\t\tthis.mode = \"progressive_\" + mode;\r\n\t\tthis.progressiveLoad = true;\r\n\t}\r\n\r\n\tsetDisplayIndex(index){\r\n\t\tthis.displayIndex = index;\r\n\t}\r\n\r\n\tgetDisplayIndex(){\r\n\t\treturn this.displayIndex;\r\n\t}\r\n\r\n\t//calculate maximum page from number of rows\r\n\tsetMaxRows(rowCount){\r\n\t\tif(!rowCount){\r\n\t\t\tthis.max = 1;\r\n\t\t}else{\r\n\t\t\tthis.max = this.size === true ? 1 : Math.ceil(rowCount/this.size);\r\n\t\t}\r\n\r\n\t\tif(this.page > this.max){\r\n\t\t\tthis.page = this.max;\r\n\t\t}\r\n\t}\r\n\r\n\t//reset to first page without triggering action\r\n\treset(force, columnsChanged){\r\n\t\tif(this.mode == \"local\" || force){\r\n\t\t\tthis.page = 1;\r\n\t\t}\r\n\r\n\t\tif(columnsChanged){\r\n\t\t\tthis.initialLoad = true;\r\n\t\t}\r\n\r\n\t\treturn true;\r\n\t}\r\n\r\n\t//set the maxmum page\r\n\tsetMaxPage(max){\r\n\r\n\t\tmax = parseInt(max);\r\n\r\n\t\tthis.max = max || 1;\r\n\r\n\t\tif(this.page > this.max){\r\n\t\t\tthis.page = this.max;\r\n\t\t\tthis.trigger();\r\n\t\t}\r\n\t}\r\n\r\n\t//set current page number\r\n\tsetPage(page){\r\n\t\tswitch(page){\r\n\t\t\tcase \"first\":\r\n\t\t\t\treturn this.setPage(1);\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"prev\":\r\n\t\t\t\treturn this.previousPage();\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"next\":\r\n\t\t\t\treturn this.nextPage();\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"last\":\r\n\t\t\t\treturn this.setPage(this.max);\r\n\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\treturn new Promise((resolve, reject) => {\r\n\r\n\t\t\tpage = parseInt(page);\r\n\r\n\t\t\tif((page > 0 && page <= this.max) || this.mode !== \"local\"){\r\n\t\t\t\tthis.page = page;\r\n\t\t\t\tthis.trigger()\r\n\t\t\t\t.then(()=>{\r\n\t\t\t\t\tresolve();\r\n\t\t\t\t})\r\n\t\t\t\t.catch(()=>{\r\n\t\t\t\t\treject();\r\n\t\t\t\t});\r\n\r\n\t\t\t\tif(this.table.options.persistence && this.table.modExists(\"persistence\", true) && this.table.modules.persistence.config.page){\r\n\t\t\t\t\tthis.table.modules.persistence.save(\"page\");\r\n\t\t\t\t}\r\n\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Pagination Error - Requested page is out of range of 1 - \" + this.max + \":\", page);\r\n\t\t\t\treject();\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tsetPageToRow(row){\r\n\t\treturn new Promise((resolve, reject)=>{\r\n\r\n\t\t\tvar rows = this.table.rowManager.getDisplayRows(this.displayIndex - 1);\r\n\t\t\tvar index = rows.indexOf(row);\r\n\r\n\t\t\tif(index > -1){\r\n\t\t\t\tvar page = this.size === true ? 1 : Math.ceil((index + 1) / this.size);\r\n\r\n\t\t\t\tthis.setPage(page)\r\n\t\t\t\t.then(()=>{\r\n\t\t\t\t\tresolve();\r\n\t\t\t\t})\r\n\t\t\t\t.catch(()=>{\r\n\t\t\t\t\treject();\r\n\t\t\t\t});\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Pagination Error - Requested row is not visible\");\r\n\t\t\t\treject();\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tsetPageSize(size){\r\n\t\tif(size !== true){\r\n\t\t\tsize = parseInt(size);\r\n\t\t}\r\n\r\n\t\tif(size > 0){\r\n\t\t\tthis.size = size;\r\n\t\t}\r\n\r\n\t\tif(this.pageSizeSelect){\r\n\t\t\t// this.pageSizeSelect.value = size;\r\n\t\t\tthis.generatePageSizeSelectList();\r\n\t\t}\r\n\r\n\t\tif(this.table.options.persistence && this.table.modExists(\"persistence\", true) && this.table.modules.persistence.config.page){\r\n\t\t\tthis.table.modules.persistence.save(\"page\");\r\n\t\t}\r\n\t}\r\n\r\n\t//setup the pagination buttons\r\n\t_setPageButtons(){\r\n\t\tlet leftSize = Math.floor((this.count-1) / 2);\r\n\t\tlet rightSize = Math.ceil((this.count-1) / 2);\r\n\t\tlet min = this.max - this.page + leftSize + 1 < this.count ? this.max-this.count+1: Math.max(this.page-leftSize,1);\r\n\t\tlet max = this.page <= rightSize? Math.min(this.count, this.max) :Math.min(this.page+rightSize, this.max);\r\n\r\n\t\twhile(this.pagesElement.firstChild) this.pagesElement.removeChild(this.pagesElement.firstChild);\r\n\r\n\t\tif(this.page == 1){\r\n\t\t\tthis.firstBut.disabled = true;\r\n\t\t\tthis.prevBut.disabled = true;\r\n\t\t}else{\r\n\t\t\tthis.firstBut.disabled = false;\r\n\t\t\tthis.prevBut.disabled = false;\r\n\t\t}\r\n\r\n\t\tif(this.page == this.max){\r\n\t\t\tthis.lastBut.disabled = true;\r\n\t\t\tthis.nextBut.disabled = true;\r\n\t\t}else{\r\n\t\t\tthis.lastBut.disabled = false;\r\n\t\t\tthis.nextBut.disabled = false;\r\n\t\t}\r\n\r\n\t\tfor(let i = min; i <= max; i++){\r\n\t\t\tif(i>0 && i <= this.max){\r\n\t\t\t\tthis.pagesElement.appendChild(this._generatePageButton(i));\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.footerRedraw();\r\n\t}\r\n\r\n\t_generatePageButton(page){\r\n\t\tvar button = document.createElement(\"button\");\r\n\r\n\t\tbutton.classList.add(\"tabulator-page\");\r\n\t\tif(page == this.page){\r\n\t\t\tbutton.classList.add(\"active\");\r\n\t\t}\r\n\r\n\t\tbutton.setAttribute(\"type\", \"button\");\r\n\t\tbutton.setAttribute(\"role\", \"button\");\r\n\r\n\t\tthis.table.modules.localize.bind(\"pagination|page_title\", (value) => {\r\n\t\t\tbutton.setAttribute(\"aria-label\", value + \" \" + page);\r\n\t\t\tbutton.setAttribute(\"title\", value + \" \" + page);\r\n\t\t});\r\n\r\n\t\tbutton.setAttribute(\"data-page\", page);\r\n\t\tbutton.textContent = page;\r\n\r\n\t\tbutton.addEventListener(\"click\", (e) => {\r\n\t\t\tthis.setPage(page).then(()=>{}).catch(()=>{});\r\n\t\t});\r\n\r\n\t\treturn button;\r\n\t}\r\n\r\n\t//previous page\r\n\tpreviousPage(){\r\n\t\treturn new Promise((resolve, reject)=>{\r\n\t\t\tif(this.page > 1){\r\n\t\t\t\tthis.page--;\r\n\t\t\t\tthis.trigger()\r\n\t\t\t\t.then(()=>{\r\n\t\t\t\t\tresolve();\r\n\t\t\t\t})\r\n\t\t\t\t.catch(()=>{\r\n\t\t\t\t\treject();\r\n\t\t\t\t});\r\n\r\n\t\t\t\tif(this.table.options.persistence && this.table.modExists(\"persistence\", true) && this.table.modules.persistence.config.page){\r\n\t\t\t\t\tthis.table.modules.persistence.save(\"page\");\r\n\t\t\t\t}\r\n\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Pagination Error - Previous page would be less than page 1:\", 0);\r\n\t\t\t\treject()\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t//next page\r\n\tnextPage(){\r\n\t\treturn new Promise((resolve, reject)=>{\r\n\t\t\tif(this.page < this.max){\r\n\t\t\t\tthis.page++;\r\n\t\t\t\tthis.trigger()\r\n\t\t\t\t.then(()=>{\r\n\t\t\t\t\tresolve();\r\n\t\t\t\t})\r\n\t\t\t\t.catch(()=>{\r\n\t\t\t\t\treject();\r\n\t\t\t\t});\r\n\r\n\t\t\t\tif(this.table.options.persistence && this.table.modExists(\"persistence\", true) && this.table.modules.persistence.config.page){\r\n\t\t\t\t\tthis.table.modules.persistence.save(\"page\");\r\n\t\t\t\t}\r\n\r\n\t\t\t}else{\r\n\t\t\t\tif(!this.progressiveLoad){\r\n\t\t\t\t\tconsole.warn(\"Pagination Error - Next page would be greater than maximum page of \" + this.max + \":\", this.max + 1);\r\n\t\t\t\t}\r\n\t\t\t\treject();\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t//return current page number\r\n\tgetPage(){\r\n\t\treturn this.page;\r\n\t}\r\n\r\n\t//return max page number\r\n\tgetPageMax(){\r\n\t\treturn this.max;\r\n\t}\r\n\r\n\tgetPageSize(size){\r\n\t\treturn this.size;\r\n\t}\r\n\r\n\tgetMode(){\r\n\t\treturn this.mode;\r\n\t}\r\n\r\n\t//return appropriate rows for current page\r\n\tgetRows(data){\r\n\t\tvar output, start, end;\r\n\r\n\t\tif(this.mode == \"local\"){\r\n\t\t\toutput = [];\r\n\r\n\t\t\tif(this.size === true){\r\n\t\t\t\tstart = 0;\r\n\t\t\t\tend = data.length;\r\n\t\t\t}else{\r\n\t\t\t\tstart = this.size * (this.page - 1);\r\n\t\t\t\tend = start + parseInt(this.size);\r\n\t\t\t}\r\n\r\n\r\n\t\t\tthis._setPageButtons();\r\n\r\n\t\t\tfor(let i = start; i < end; i++){\r\n\t\t\t\tif(data[i]){\r\n\t\t\t\t\toutput.push(data[i]);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn output;\r\n\t\t}else{\r\n\t\t\tthis._setPageButtons();\r\n\r\n\t\t\treturn data.slice(0);\r\n\t\t}\r\n\t}\r\n\r\n\ttrigger(){\r\n\t\tvar left;\r\n\r\n\t\treturn new Promise((resolve, reject)=>{\r\n\r\n\t\t\tswitch(this.mode){\r\n\t\t\t\tcase \"local\":\r\n\t\t\t\tleft = this.table.rowManager.scrollLeft;\r\n\r\n\t\t\t\tthis.table.rowManager.refreshActiveData(\"page\");\r\n\t\t\t\tthis.table.rowManager.scrollHorizontal(left);\r\n\r\n\t\t\t\tthis.table.options.pageLoaded.call(this.table, this.getPage());\r\n\t\t\t\tresolve();\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"remote\":\r\n\t\t\t\tcase \"progressive_load\":\r\n\t\t\t\tcase \"progressive_scroll\":\r\n\t\t\t\tthis.table.modules.ajax.blockActiveRequest();\r\n\t\t\t\tthis._getRemotePage()\r\n\t\t\t\t.then(()=>{\r\n\t\t\t\t\tresolve();\r\n\t\t\t\t})\r\n\t\t\t\t.catch(()=>{\r\n\t\t\t\t\treject();\r\n\t\t\t\t});\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tdefault:\r\n\t\t\t\tconsole.warn(\"Pagination Error - no such pagination mode:\", this.mode);\r\n\t\t\t\treject();\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t_getRemotePage(){\r\n\t\tvar oldParams, pageParams;\r\n\r\n\t\treturn new Promise((resolve, reject) => {\r\n\r\n\t\t\tif(!this.table.modExists(\"ajax\", true)){\r\n\t\t\t\treject();\r\n\t\t\t}\r\n\r\n\t\t\t//record old params and restore after request has been made\r\n\t\t\toldParams = Helpers.deepClone(this.table.modules.ajax.getParams() || {});\r\n\t\t\tpageParams = this.table.modules.ajax.getParams();\r\n\r\n\t\t\t//configure request params\r\n\t\t\tpageParams[this.dataSentNames.page] = this.page;\r\n\r\n\t\t\t//set page size if defined\r\n\t\t\tif(this.size){\r\n\t\t\t\tpageParams[this.dataSentNames.size] = this.size;\r\n\t\t\t}\r\n\r\n\t\t\t//set sort data if defined\r\n\t\t\tif(this.table.options.ajaxSorting && this.table.modExists(\"sort\")){\r\n\t\t\t\tlet sorters = this.table.modules.sort.getSort();\r\n\r\n\t\t\t\tsorters.forEach((item) => {\r\n\t\t\t\t\tdelete item.column;\r\n\t\t\t\t});\r\n\r\n\t\t\t\tpageParams[this.dataSentNames.sorters] = sorters;\r\n\t\t\t}\r\n\r\n\t\t\t//set filter data if defined\r\n\t\t\tif(this.table.options.ajaxFiltering && this.table.modExists(\"filter\")){\r\n\t\t\t\tlet filters = this.table.modules.filter.getFilters(true, true);\r\n\t\t\t\tpageParams[this.dataSentNames.filters] = filters;\r\n\t\t\t}\r\n\r\n\t\t\tthis.table.modules.ajax.setParams(pageParams);\r\n\r\n\t\t\tthis.table.modules.ajax.sendRequest(this.progressiveLoad)\r\n\t\t\t.then((data)=>{\r\n\t\t\t\tthis._parseRemoteData(data);\r\n\t\t\t\tresolve();\r\n\t\t\t})\r\n\t\t\t.catch((e)=>{reject()});\r\n\r\n\t\t\tthis.table.modules.ajax.setParams(oldParams);\r\n\t\t});\r\n\t}\r\n\r\n\t_parseRemoteData(data){\r\n\t\tvar left, data, margin;\r\n\r\n\t\tif(typeof data[this.dataReceivedNames.last_page] === \"undefined\"){\r\n\t\t\tconsole.warn(\"Remote Pagination Error - Server response missing '\" + this.dataReceivedNames.last_page + \"' property\");\r\n\t\t}\r\n\r\n\t\tif(data[this.dataReceivedNames.data]){\r\n\t\t\tthis.max = parseInt(data[this.dataReceivedNames.last_page]) || 1;\r\n\r\n\t\t\tif(this.progressiveLoad){\r\n\t\t\t\tswitch(this.mode){\r\n\t\t\t\t\tcase \"progressive_load\":\r\n\r\n\t\t\t\t\tif(this.page == 1){\r\n\t\t\t\t\t\tthis.table.rowManager.setData(data[this.dataReceivedNames.data], false, this.initialLoad && this.page == 1)\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tthis.table.rowManager.addRows(data[this.dataReceivedNames.data]);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif(this.page < this.max){\r\n\t\t\t\t\t\tsetTimeout(() => {\r\n\t\t\t\t\t\t\tthis.nextPage().then(()=>{}).catch(()=>{});\r\n\t\t\t\t\t\t}, this.table.options.ajaxProgressiveLoadDelay);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase \"progressive_scroll\":\r\n\t\t\t\t\tdata = this.table.rowManager.getData().concat(data[this.dataReceivedNames.data]);\r\n\r\n\t\t\t\t\tthis.table.rowManager.setData(data, true, this.initialLoad && this.page == 1);\r\n\r\n\t\t\t\t\tmargin = this.table.options.ajaxProgressiveLoadScrollMargin || (this.table.rowManager.element.clientHeight * 2);\r\n\r\n\t\t\t\t\tif(this.table.rowManager.element.scrollHeight <= (this.table.rowManager.element.clientHeight + margin)){\r\n\t\t\t\t\t\tthis.nextPage().then(()=>{}).catch(()=>{});\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tleft = this.table.rowManager.scrollLeft;\r\n\r\n\t\t\t\tthis.table.rowManager.setData(data[this.dataReceivedNames.data], false, this.initialLoad && this.page == 1);\r\n\r\n\t\t\t\tthis.table.rowManager.scrollHorizontal(left);\r\n\r\n\t\t\t\tthis.table.columnManager.scrollHorizontal(left);\r\n\r\n\t\t\t\tthis.table.options.pageLoaded.call(this.table, this.getPage());\r\n\t\t\t}\r\n\r\n\t\t\tthis.initialLoad = false;\r\n\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Remote Pagination Error - Server response missing '\" + this.dataReceivedNames.data + \"' property\");\r\n\t\t}\r\n\t}\r\n\r\n\t//handle the footer element being redrawn\r\n\tfooterRedraw(){\r\n\t\tvar footer = this.table.footerManager.element;\r\n\r\n\t\tif((Math.ceil(footer.clientWidth) - footer.scrollWidth) < 0){\r\n\t\t\tthis.pagesElement.style.display = 'none';\r\n\t\t}else{\r\n\t\t\tthis.pagesElement.style.display = '';\r\n\r\n\t\t\tif((Math.ceil(footer.clientWidth) - footer.scrollWidth) < 0){\r\n\t\t\t\tthis.pagesElement.style.display = 'none';\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n\r\nPage.moduleName = \"page\";\r\n\r\n//load defaults\r\nPage.defaultDataSentNames = defaultDataSentNames;\r\nPage.defaultDataReceivedNames = defaultDataReceivedNames;\r\n\r\nexport default Page;","// read peristence information from storage\r\nexport default {\r\n\tlocal:function(id, type){\r\n\t\tvar data = localStorage.getItem(id + \"-\" + type);\r\n\r\n\t\treturn data ? JSON.parse(data) : false;\r\n\t},\r\n\tcookie:function(id, type){\r\n\t\tvar cookie = document.cookie,\r\n\t\tkey = id + \"-\" + type,\r\n\t\tcookiePos = cookie.indexOf(key + \"=\"),\r\n\t\tend, data;\r\n\r\n\t\t//if cookie exists, decode and load column data into tabulator\r\n\t\tif(cookiePos > -1){\r\n\t\t\tcookie = cookie.substr(cookiePos);\r\n\r\n\t\t\tend = cookie.indexOf(\";\");\r\n\r\n\t\t\tif(end > -1){\r\n\t\t\t\tcookie = cookie.substr(0, end);\r\n\t\t\t}\r\n\r\n\t\t\tdata = cookie.replace(key + \"=\", \"\");\r\n\t\t}\r\n\r\n\t\treturn data ? JSON.parse(data) : false;\r\n\t}\r\n};","export default {\r\n\t\"current_page\":\"current_page\",\r\n\t\"last_page\":\"last_page\",\r\n\t\"data\":\"data\",\r\n};","//write persistence information to storage\r\nexport default {\r\n\tlocal:function(id, type, data){\r\n\t\tlocalStorage.setItem(id + \"-\" + type, JSON.stringify(data));\r\n\t},\r\n\tcookie:function(id, type, data){\r\n\t\tvar expireDate = new Date();\r\n\r\n\t\texpireDate.setDate(expireDate.getDate() + 10000);\r\n\r\n\t\tdocument.cookie = id + \"-\" + type + \"=\" + JSON.stringify(data) + \"; expires=\" + expireDate.toUTCString();\r\n\t}\r\n};","import Module from '../../core/Module.js';\r\n\r\nimport defaultReaders from './defaults/readers.js';\r\nimport defaultWriters from './defaults/writers.js';\r\n\r\nclass Persistence extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.mode = \"\";\r\n\t\tthis.id = \"\";\r\n\t\t// this.persistProps = [\"field\", \"width\", \"visible\"];\r\n\t\tthis.defWatcherBlock = false;\r\n\t\tthis.config = {};\r\n\t\tthis.readFunc = false;\r\n\t\tthis.writeFunc = false;\r\n\t}\r\n\r\n\t// Test for whether localStorage is available for use.\r\n\tlocalStorageTest() {\r\n\t\tvar testKey = \"_tabulator_test\";\r\n\r\n\t\ttry {\r\n\t\t\twindow.localStorage.setItem( testKey, testKey);\r\n\t\t\twindow.localStorage.removeItem( testKey );\r\n\t\t\treturn true;\r\n\t\t} catch(e) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\t//setup parameters\r\n\tinitialize(){\r\n\t\t//determine persistent layout storage type\r\n\t\tvar mode = this.table.options.persistenceMode,\r\n\t\tid = this.table.options.persistenceID,\r\n\t\tretreivedData;\r\n\r\n\t\tthis.mode = mode !== true ? mode : (this.localStorageTest() ? \"local\" : \"cookie\");\r\n\r\n\t\tif(this.table.options.persistenceReaderFunc){\r\n\t\t\tif(typeof this.table.options.persistenceReaderFunc === \"function\"){\r\n\t\t\t\tthis.readFunc = this.table.options.persistenceReaderFunc;\r\n\t\t\t}else{\r\n\t\t\t\tif(Persistence.readers[this.table.options.persistenceReaderFunc]){\r\n\t\t\t\t\tthis.readFunc = Persistence.readers[this.table.options.persistenceReaderFunc];\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.warn(\"Persistence Read Error - invalid reader set\", this.table.options.persistenceReaderFunc);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tif(Persistence.readers[this.mode]){\r\n\t\t\t\tthis.readFunc = Persistence.readers[this.mode];\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Persistence Read Error - invalid reader set\", this.mode);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(this.table.options.persistenceWriterFunc){\r\n\t\t\tif(typeof this.table.options.persistenceWriterFunc === \"function\"){\r\n\t\t\t\tthis.writeFunc = this.table.options.persistenceWriterFunc;\r\n\t\t\t}else{\r\n\t\t\t\tif(Persistence.writers[this.table.options.persistenceWriterFunc]){\r\n\t\t\t\t\tthis.writeFunc = Persistence.writers[this.table.options.persistenceWriterFunc];\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.warn(\"Persistence Write Error - invalid reader set\", this.table.options.persistenceWriterFunc);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tif(Persistence.writers[this.mode]){\r\n\t\t\t\tthis.writeFunc = Persistence.writers[this.mode];\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Persistence Write Error - invalid writer set\", this.mode);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//set storage tag\r\n\t\tthis.id = \"tabulator-\" + (id || (this.table.element.getAttribute(\"id\") || \"\"));\r\n\r\n\t\tthis.config = {\r\n\t\t\tsort:this.table.options.persistence === true || this.table.options.persistence.sort,\r\n\t\t\tfilter:this.table.options.persistence === true || this.table.options.persistence.filter,\r\n\t\t\tgroup:this.table.options.persistence === true || this.table.options.persistence.group,\r\n\t\t\tpage:this.table.options.persistence === true || this.table.options.persistence.page,\r\n\t\t\tcolumns:this.table.options.persistence === true ? [\"title\", \"width\", \"visible\"] : this.table.options.persistence.columns,\r\n\t\t};\r\n\r\n\t\t//load pagination data if needed\r\n\t\tif(this.config.page){\r\n\t\t\tretreivedData = this.retreiveData(\"page\");\r\n\r\n\t\t\tif(retreivedData){\r\n\t\t\t\tif(typeof retreivedData.paginationSize !== \"undefined\" && (this.config.page === true || this.config.page.size)){\r\n\t\t\t\t\tthis.table.options.paginationSize = retreivedData.paginationSize;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(typeof retreivedData.paginationInitialPage !== \"undefined\" && (this.config.page === true || this.config.page.page)){\r\n\t\t\t\t\tthis.table.options.paginationInitialPage = retreivedData.paginationInitialPage;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//load group data if needed\r\n\t\tif(this.config.group){\r\n\t\t\tretreivedData = this.retreiveData(\"group\");\r\n\r\n\t\t\tif(retreivedData){\r\n\t\t\t\tif(typeof retreivedData.groupBy !== \"undefined\" && (this.config.group === true || this.config.group.groupBy)){\r\n\t\t\t\t\tthis.table.options.groupBy = retreivedData.groupBy;\r\n\t\t\t\t}\r\n\t\t\t\tif(typeof retreivedData.groupStartOpen !== \"undefined\" && (this.config.group === true || this.config.group.groupStartOpen)){\r\n\t\t\t\t\tthis.table.options.groupStartOpen = retreivedData.groupStartOpen;\r\n\t\t\t\t}\r\n\t\t\t\tif(typeof retreivedData.groupHeader !== \"undefined\" && (this.config.group === true || this.config.group.groupHeader)){\r\n\t\t\t\t\tthis.table.options.groupHeader = retreivedData.groupHeader;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(this.config.columns){\r\n\t\t\tthis.table.options.columns = this.load(\"columns\", this.table.options.columns);\r\n\t\t}\r\n\t}\r\n\r\n\tinitializeColumn(column){\r\n\t\tvar def, keys;\r\n\r\n\t\tif(this.config.columns){\r\n\t\t\tthis.defWatcherBlock = true;\r\n\r\n\t\t\tdef = column.getDefinition();\r\n\r\n\t\t\tkeys = this.config.columns === true ? Object.keys(def) : this.config.columns;\r\n\r\n\t\t\tkeys.forEach((key)=>{\r\n\t\t\t\tvar props = Object.getOwnPropertyDescriptor(def, key);\r\n\t\t\t\tvar value = def[key];\r\n\t\t\t\tif(props){\r\n\t\t\t\t\tObject.defineProperty(def, key, {\r\n\t\t\t\t\t\tset: function(newValue){\r\n\t\t\t\t\t\t\tvalue = newValue;\r\n\r\n\t\t\t\t\t\t\tif(!this.defWatcherBlock){\r\n\t\t\t\t\t\t\t\tthis.save(\"columns\");\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\tif(props.set){\r\n\t\t\t\t\t\t\t\tprops.set(newValue);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tget:function(){\r\n\t\t\t\t\t\t\tif(props.get){\r\n\t\t\t\t\t\t\t\tprops.get();\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\treturn value;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tthis.defWatcherBlock = false;\r\n\t\t}\r\n\t}\r\n\r\n\t//load saved definitions\r\n\tload(type, current){\r\n\t\tvar data = this.retreiveData(type);\r\n\r\n\t\tif(current){\r\n\t\t\tdata = data ? this.mergeDefinition(current, data) : current;\r\n\t\t}\r\n\r\n\t\treturn data;\r\n\t}\r\n\r\n\t//retreive data from memory\r\n\tretreiveData(type){\r\n\t\treturn this.readFunc ? this.readFunc(this.id, type) : false;\r\n\t}\r\n\r\n\t//merge old and new column definitions\r\n\tmergeDefinition(oldCols, newCols){\r\n\t\tvar output = [];\r\n\r\n\t\tnewCols = newCols || [];\r\n\r\n\t\tnewCols.forEach((column, to) => {\r\n\t\t\tvar from = this._findColumn(oldCols, column),\r\n\t\t\tkeys;\r\n\r\n\t\t\tif(from){\r\n\t\t\t\tif(this.config.columns === true || this.config.columns == undefined){\r\n\t\t\t\t\tkeys = Object.keys(from);\r\n\t\t\t\t\tkeys.push(\"width\");\r\n\t\t\t\t}else{\r\n\t\t\t\t\tkeys = this.config.columns;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tkeys.forEach((key)=>{\r\n\t\t\t\t\tif(key !== \"columns\" && typeof column[key] !== \"undefined\"){\r\n\t\t\t\t\t\tfrom[key] = column[key];\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\tif(from.columns){\r\n\t\t\t\t\tfrom.columns = this.mergeDefinition(from.columns, column.columns);\r\n\t\t\t\t}\r\n\r\n\t\t\t\toutput.push(from);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\toldCols.forEach((column, i) => {\r\n\t\t\tvar from = this._findColumn(newCols, column);\r\n\r\n\t\t\tif (!from) {\r\n\t\t\t\tif(output.length>i){\r\n\t\t\t\t\toutput.splice(i, 0, column);\r\n\t\t\t\t}else{\r\n\t\t\t\t\toutput.push(column);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\t//find matching columns\r\n\t_findColumn(columns, subject){\r\n\t\tvar type = subject.columns ? \"group\" : (subject.field ? \"field\" : \"object\");\r\n\r\n\t\treturn columns.find(function(col){\r\n\t\t\tswitch(type){\r\n\t\t\t\tcase \"group\":\r\n\t\t\t\treturn col.title === subject.title && col.columns.length === subject.columns.length;\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"field\":\r\n\t\t\t\treturn col.field === subject.field;\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"object\":\r\n\t\t\t\treturn col === subject;\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t//save data\r\n\tsave(type){\r\n\t\tvar data = {};\r\n\r\n\t\tswitch(type){\r\n\t\t\tcase \"columns\":\r\n\t\t\tdata = this.parseColumns(this.table.columnManager.getColumns())\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"filter\":\r\n\t\t\tdata = this.table.modules.filter.getFilters();\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"sort\":\r\n\t\t\tdata = this.validateSorters(this.table.modules.sort.getSort());\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"group\":\r\n\t\t\tdata = this.getGroupConfig();\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"page\":\r\n\t\t\tdata = this.getPageConfig();\r\n\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\tif(this.writeFunc){\r\n\t\t\tthis.writeFunc(this.id, type, data);\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t//ensure sorters contain no function data\r\n\tvalidateSorters(data){\r\n\t\tdata.forEach(function(item){\r\n\t\t\titem.column = item.field;\r\n\t\t\tdelete item.field;\r\n\t\t});\r\n\r\n\t\treturn data;\r\n\t}\r\n\r\n\tgetGroupConfig(){\r\n\t\tvar data = {};\r\n\r\n\t\tif(this.config.group){\r\n\t\t\tif(this.config.group === true || this.config.group.groupBy){\r\n\t\t\t\tdata.groupBy = this.table.options.groupBy;\r\n\t\t\t}\r\n\r\n\t\t\tif(this.config.group === true || this.config.group.groupStartOpen){\r\n\t\t\t\tdata.groupStartOpen = this.table.options.groupStartOpen;\r\n\t\t\t}\r\n\r\n\t\t\tif(this.config.group === true || this.config.group.groupHeader){\r\n\t\t\t\tdata.groupHeader = this.table.options.groupHeader;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn data;\r\n\t}\r\n\r\n\tgetPageConfig(){\r\n\t\tvar data = {};\r\n\r\n\t\tif(this.config.page){\r\n\t\t\tif(this.config.page === true || this.config.page.size){\r\n\t\t\t\tdata.paginationSize = this.table.modules.page.getPageSize();\r\n\t\t\t}\r\n\r\n\t\t\tif(this.config.page === true || this.config.page.page){\r\n\t\t\t\tdata.paginationInitialPage = this.table.modules.page.getPage();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn data;\r\n\t}\r\n\r\n\r\n\t//parse columns for data to store\r\n\tparseColumns(columns){\r\n\t\tvar definitions = [],\r\n\t\texcludedKeys = [\"headerContextMenu\", \"headerMenu\", \"contextMenu\", \"clickMenu\"];\r\n\r\n\t\tcolumns.forEach((column) => {\r\n\t\t\tvar defStore = {},\r\n\t\t\tcolDef = column.getDefinition(),\r\n\t\t\tkeys;\r\n\r\n\t\t\tif(column.isGroup){\r\n\t\t\t\tdefStore.title = colDef.title;\r\n\t\t\t\tdefStore.columns = this.parseColumns(column.getColumns());\r\n\t\t\t}else{\r\n\t\t\t\tdefStore.field = column.getField();\r\n\r\n\t\t\t\tif(this.config.columns === true || this.config.columns == undefined){\r\n\t\t\t\t\tkeys = Object.keys(colDef);\r\n\t\t\t\t\tkeys.push(\"width\");\r\n\t\t\t\t}else{\r\n\t\t\t\t\tkeys = this.config.columns;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tkeys.forEach((key)=>{\r\n\t\t\t\t\tswitch(key){\r\n\t\t\t\t\t\tcase \"width\":\r\n\t\t\t\t\t\tdefStore.width = column.getWidth();\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase \"visible\":\r\n\t\t\t\t\t\tdefStore.visible = column.visible;\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\tdefault:\r\n\t\t\t\t\t\tif(typeof colDef[key] !== \"function\" && excludedKeys.indexOf(key) === -1){\r\n\t\t\t\t\t\t\tdefStore[key] = colDef[key];\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\tdefinitions.push(defStore);\r\n\t\t});\r\n\r\n\t\treturn definitions;\r\n\t}\r\n}\r\n\r\nPersistence.moduleName = \"persistence\";\r\n\r\n//load defaults\r\nPersistence.readers = defaultReaders;\r\nPersistence.writers = defaultWriters;\r\n\r\nexport default Persistence;","import Module from '../../core/Module.js';\r\n\r\nclass Print extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.element = false;\r\n\t\tthis.manualBlock = false;\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\twindow.addEventListener(\"beforeprint\", this.replaceTable.bind(this));\r\n\t\twindow.addEventListener(\"afterprint\", this.cleanup.bind(this));\r\n\t}\r\n\r\n\treplaceTable(){\r\n\t\tif(!this.manualBlock){\r\n\t\t\tthis.element = document.createElement(\"div\");\r\n\t\t\tthis.element.classList.add(\"tabulator-print-table\");\r\n\r\n\t\t\tthis.element.appendChild(this.table.modules.export.genereateTable(this.table.options.printConfig, this.table.options.printStyled, this.table.options.printRowRange, \"print\"));\r\n\r\n\t\t\tthis.table.element.style.display = \"none\";\r\n\r\n\t\t\tthis.table.element.parentNode.insertBefore(this.element, this.table.element);\r\n\t\t}\r\n\t}\r\n\r\n\tcleanup(){\r\n\t\tdocument.body.classList.remove(\"tabulator-print-fullscreen-hide\");\r\n\r\n\t\tif(this.element && this.element.parentNode){\r\n\t\t\tthis.element.parentNode.removeChild(this.element);\r\n\t\t\tthis.table.element.style.display = \"\";\r\n\t\t}\r\n\t}\r\n\r\n\tprintFullscreen(visible, style, config){\r\n\t\tvar scrollX = window.scrollX,\r\n\t\tscrollY = window.scrollY,\r\n\t\theaderEl = document.createElement(\"div\"),\r\n\t\tfooterEl = document.createElement(\"div\"),\r\n\t\ttableEl = this.table.modules.export.genereateTable(typeof config != \"undefined\" ? config : this.table.options.printConfig, typeof style != \"undefined\" ? style : this.table.options.printStyled, visible || this.table.options.printRowRange, \"print\"),\r\n\t\theaderContent, footerContent;\r\n\r\n\t\tthis.manualBlock = true;\r\n\r\n\t\tthis.element = document.createElement(\"div\");\r\n\t\tthis.element.classList.add(\"tabulator-print-fullscreen\");\r\n\r\n\t\tif(this.table.options.printHeader){\r\n\t\t\theaderEl.classList.add(\"tabulator-print-header\");\r\n\r\n\t\t\theaderContent = typeof this.table.options.printHeader == \"function\" ? this.table.options.printHeader.call(this.table) : this.table.options.printHeader;\r\n\r\n\t\t\tif(typeof headerContent == \"string\"){\r\n\t\t\t\theaderEl.innerHTML = headerContent;\r\n\t\t\t}else{\r\n\t\t\t\theaderEl.appendChild(headerContent);\r\n\t\t\t}\r\n\r\n\t\t\tthis.element.appendChild(headerEl);\r\n\t\t}\r\n\r\n\t\tthis.element.appendChild(tableEl);\r\n\r\n\t\tif(this.table.options.printFooter){\r\n\t\t\tfooterEl.classList.add(\"tabulator-print-footer\");\r\n\r\n\t\t\tfooterContent = typeof this.table.options.printFooter == \"function\" ? this.table.options.printFooter.call(this.table) : this.table.options.printFooter;\r\n\r\n\r\n\t\t\tif(typeof footerContent == \"string\"){\r\n\t\t\t\tfooterEl.innerHTML = footerContent;\r\n\t\t\t}else{\r\n\t\t\t\tfooterEl.appendChild(footerContent);\r\n\t\t\t}\r\n\r\n\t\t\tthis.element.appendChild(footerEl);\r\n\t\t}\r\n\r\n\t\tdocument.body.classList.add(\"tabulator-print-fullscreen-hide\");\r\n\t\tdocument.body.appendChild(this.element);\r\n\r\n\t\tif(this.table.options.printFormatter){\r\n\t\t\tthis.table.options.printFormatter(this.element, tableEl);\r\n\t\t}\r\n\r\n\t\twindow.print();\r\n\r\n\t\tthis.cleanup();\r\n\r\n\t\twindow.scrollTo(scrollX, scrollY);\r\n\r\n\t\tthis.manualBlock = false;\r\n\t}\r\n}\r\n\r\nPrint.moduleName = \"print\";\r\n\r\nexport default Print;","import Module from '../../core/Module.js';\r\n\r\nclass ReactiveData extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.data = false;\r\n\t\tthis.blocked = false; //block reactivity while performing update\r\n\t\tthis.origFuncs = {}; // hold original data array functions to allow replacement after data is done with\r\n\t\tthis.currentVersion = 0;\r\n\t}\r\n\r\n\twatchData(data){\r\n\t\tvar self = this,\r\n\t\tpushFunc, version;\r\n\r\n\t\tthis.currentVersion ++;\r\n\r\n\t\tversion = this.currentVersion;\r\n\r\n\t\tself.unwatchData();\r\n\r\n\t\tself.data = data;\r\n\r\n\t\t//override array push function\r\n\t\tself.origFuncs.push = data.push;\r\n\r\n\t\tObject.defineProperty(self.data, \"push\", {\r\n\t\t\tenumerable: false,\r\n\t\t\tconfigurable: true,\r\n\t\t\tvalue: function () {\r\n\t\t\t\tvar args = Array.from(arguments);\r\n\r\n\t\t\t\tif(!self.blocked && version === self.currentVersion){\r\n\t\t\t\t\targs.forEach(function (arg){\r\n\t\t\t\t\t\tself.table.rowManager.addRowActual(arg, false);\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn self.origFuncs.push.apply(data, arguments);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\t//override array unshift function\r\n\t\tself.origFuncs.unshift = data.unshift;\r\n\r\n\t\tObject.defineProperty(self.data, \"unshift\", {\r\n\t\t\tenumerable: false,\r\n\t\t\tconfigurable: true,\r\n\t\t\tvalue: function () {\r\n\t\t\t\tvar args = Array.from(arguments);\r\n\r\n\t\t\t\tif(!self.blocked && version === self.currentVersion){\r\n\t\t\t\t\targs.forEach(function (arg){\r\n\t\t\t\t\t\tself.table.rowManager.addRowActual(arg, true);\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn self.origFuncs.unshift.apply(data, arguments);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\r\n\t\t//override array shift function\r\n\t\tself.origFuncs.shift = data.shift;\r\n\r\n\t\tObject.defineProperty(self.data, \"shift\", {\r\n\t\t\tenumerable: false,\r\n\t\t\tconfigurable: true,\r\n\t\t\tvalue: function () {\r\n\t\t\t\tvar row;\r\n\r\n\t\t\t\tif(!self.blocked && version === self.currentVersion){\r\n\t\t\t\t\tif(self.data.length){\r\n\t\t\t\t\t\trow = self.table.rowManager.getRowFromDataObject(self.data[0]);\r\n\r\n\t\t\t\t\t\tif(row){\r\n\t\t\t\t\t\t\trow.deleteActual();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn self.origFuncs.shift.call(data);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\t//override array pop function\r\n\t\tself.origFuncs.pop = data.pop;\r\n\r\n\t\tObject.defineProperty(self.data, \"pop\", {\r\n\t\t\tenumerable: false,\r\n\t\t\tconfigurable: true,\r\n\t\t\tvalue: function () {\r\n\t\t\t\tvar row;\r\n\t\t\t\tif(!self.blocked && version === self.currentVersion){\r\n\t\t\t\t\tif(self.data.length){\r\n\t\t\t\t\t\trow = self.table.rowManager.getRowFromDataObject(self.data[self.data.length - 1]);\r\n\r\n\t\t\t\t\t\tif(row){\r\n\t\t\t\t\t\t\trow.deleteActual();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn self.origFuncs.pop.call(data);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\r\n\t\t//override array splice function\r\n\t\tself.origFuncs.splice = data.splice;\r\n\r\n\t\tObject.defineProperty(self.data, \"splice\", {\r\n\t\t\tenumerable: false,\r\n\t\t\tconfigurable: true,\r\n\t\t\tvalue: function () {\r\n\t\t\t\tvar args = Array.from(arguments),\r\n\t\t\t\tstart = args[0] < 0 ? data.length + args[0] : args[0],\r\n\t\t\t\tend = args[1],\r\n\t\t\t\tnewRows = args[2] ? args.slice(2) : false,\r\n\t\t\t\tstartRow;\r\n\r\n\t\t\t\tif(!self.blocked && version === self.currentVersion){\r\n\r\n\t\t\t\t\t//add new rows\r\n\t\t\t\t\tif(newRows){\r\n\t\t\t\t\t\tstartRow = data[start] ? self.table.rowManager.getRowFromDataObject(data[start]) : false;\r\n\r\n\t\t\t\t\t\tif(startRow){\r\n\t\t\t\t\t\t\tnewRows.forEach(function(rowData){\r\n\t\t\t\t\t\t\t\tself.table.rowManager.addRowActual(rowData, true, startRow, true);\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\tnewRows = newRows.slice().reverse();\r\n\r\n\t\t\t\t\t\t\tnewRows.forEach(function(rowData){\r\n\t\t\t\t\t\t\t\tself.table.rowManager.addRowActual(rowData, true, false, true);\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t//delete removed rows\r\n\t\t\t\t\tif(end !== 0){\r\n\t\t\t\t\t\tvar oldRows = data.slice(start, typeof args[1] === \"undefined\" ? args[1] : start + end);\r\n\r\n\t\t\t\t\t\toldRows.forEach(function(rowData, i){\r\n\t\t\t\t\t\t\tvar row = self.table.rowManager.getRowFromDataObject(rowData);\r\n\r\n\t\t\t\t\t\t\tif(row){\r\n\t\t\t\t\t\t\t\trow.deleteActual(i !== oldRows.length - 1);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif(newRows || end !== 0){\r\n\t\t\t\t\t\tself.table.rowManager.reRenderInPosition();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn self.origFuncs.splice.apply(data, arguments);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tunwatchData(){\r\n\t\tif(this.data !== false){\r\n\t\t\tfor(var key in this.origFuncs){\r\n\t\t\t\tObject.defineProperty(this.data, key, {\r\n\t\t\t\t\tenumerable: true,\r\n\t\t\t\t\tconfigurable:true,\r\n\t\t\t\t\twritable:true,\r\n\t\t\t\t\tvalue: this.origFuncs.key,\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\twatchRow(row){\r\n\t\tvar data = row.getData();\r\n\r\n\t\tthis.blocked = true;\r\n\r\n\t\tfor(var key in data){\r\n\t\t\tthis.watchKey(row, data, key);\r\n\t\t}\r\n\r\n\t\tif(this.table.options.dataTree){\r\n\t\t\tthis.watchTreeChildren(row);\r\n\t\t}\r\n\r\n\t\tthis.blocked = false;\r\n\t}\r\n\r\n\twatchTreeChildren (row){\r\n\t\tvar self = this,\r\n\t\tchildField = row.getData()[this.table.options.dataTreeChildField],\r\n\t\torigFuncs = {};\r\n\r\n\t\tfunction rebuildTree(){\r\n\t\t\tself.table.modules.dataTree.initializeRow(row);\r\n\t\t\tself.table.modules.dataTree.layoutRow(row);\r\n\t\t\tself.table.rowManager.refreshActiveData(\"tree\", false, true);\r\n\t\t}\r\n\r\n\t\tif(childField){\r\n\r\n\t\t\torigFuncs.push = childField.push;\r\n\r\n\t\t\tObject.defineProperty(childField, \"push\", {\r\n\t\t\t\tenumerable: false,\r\n\t\t\t\tconfigurable: true,\r\n\t\t\t\tvalue: function value() {\r\n\t\t\t\t\tvar result = origFuncs.push.apply(childField, arguments);\r\n\r\n\t\t\t\t\trebuildTree();\r\n\r\n\t\t\t\t\treturn result;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\torigFuncs.unshift = childField.unshift;\r\n\r\n\t\t\tObject.defineProperty(childField, \"unshift\", {\r\n\t\t\t\tenumerable: false,\r\n\t\t\t\tconfigurable: true,\r\n\t\t\t\tvalue: function value() {\r\n\t\t\t\t\tvar result = origFuncs.unshift.apply(childField, arguments);\r\n\r\n\t\t\t\t\trebuildTree();\r\n\r\n\t\t\t\t\treturn result;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\torigFuncs.shift = childField.shift;\r\n\r\n\t\t\tObject.defineProperty(childField, \"shift\", {\r\n\t\t\t\tenumerable: false,\r\n\t\t\t\tconfigurable: true,\r\n\t\t\t\tvalue: function value() {\r\n\t\t\t\t\tvar result = origFuncs.shift.call(childField);\r\n\r\n\t\t\t\t\trebuildTree();\r\n\r\n\t\t\t\t\treturn result;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\torigFuncs.pop = childField.pop;\r\n\r\n\t\t\tObject.defineProperty(childField, \"pop\", {\r\n\t\t\t\tenumerable: false,\r\n\t\t\t\tconfigurable: true,\r\n\t\t\t\tvalue: function value() {\r\n\t\t\t\t\tvar result = origFuncs.pop.call(childField);\r\n\r\n\t\t\t\t\trebuildTree();\r\n\r\n\t\t\t\t\treturn result;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\torigFuncs.splice = childField.splice;\r\n\r\n\t\t\tObject.defineProperty(childField, \"splice\", {\r\n\t\t\t\tenumerable: false,\r\n\t\t\t\tconfigurable: true,\r\n\t\t\t\tvalue: function value() {\r\n\t\t\t\t\tvar result = origFuncs.splice.apply(childField, arguments);\r\n\r\n\t\t\t\t\trebuildTree();\r\n\r\n\t\t\t\t\treturn result;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\twatchKey(row, data, key){\r\n\t\tvar self = this,\r\n\t\tprops = Object.getOwnPropertyDescriptor(data, key),\r\n\t\tvalue = data[key],\r\n\t\tversion = this.currentVersion;\r\n\r\n\t\tObject.defineProperty(data, key, {\r\n\t\t\tset: function(newValue){\r\n\t\t\t\tvalue = newValue;\r\n\t\t\t\tif(!self.blocked && version === self.currentVersion){\r\n\t\t\t\t\tvar update = {};\r\n\t\t\t\t\tupdate[key] = newValue;\r\n\t\t\t\t\trow.updateData(update);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(props.set){\r\n\t\t\t\t\tprops.set(newValue);\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tget:function(){\r\n\r\n\t\t\t\tif(props.get){\r\n\t\t\t\t\tprops.get();\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn value;\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tunwatchRow(row){\r\n\t\tvar data = row.getData();\r\n\r\n\t\tfor(var key in data){\r\n\t\t\tObject.defineProperty(data, key, {\r\n\t\t\t\tvalue:data[key],\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tblock(){\r\n\t\tthis.blocked = true;\r\n\t}\r\n\r\n\tunblock(){\r\n\t\tthis.blocked = false;\r\n\t}\r\n}\r\n\r\nReactiveData.moduleName = \"reactiveData\";\r\n\r\nexport default ReactiveData;\r\n\r\n\r\n\r\n","import Module from '../../core/Module.js';\r\n\r\nclass ResizeColumns extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.startColumn = false;\r\n\t\tthis.startX = false;\r\n\t\tthis.startWidth = false;\r\n\t\tthis.handle = null;\r\n\t\tthis.prevHandle = null;\r\n\t}\r\n\r\n\tinitializeColumn(type, column, element){\r\n\t\tvar self = this,\r\n\t\tvariableHeight = false,\r\n\t\tmode = this.table.options.resizableColumns;\r\n\r\n\t\t//set column resize mode\r\n\t\tif(type === \"header\"){\r\n\t\t\tvariableHeight = column.definition.formatter == \"textarea\" || column.definition.variableHeight;\r\n\t\t\tcolumn.modules.resize = {variableHeight:variableHeight};\r\n\t\t}\r\n\r\n\t\tif(mode === true || mode == type){\r\n\r\n\t\t\tvar handle = document.createElement('div');\r\n\t\t\thandle.className = \"tabulator-col-resize-handle\";\r\n\r\n\r\n\t\t\tvar prevHandle = document.createElement('div');\r\n\t\t\tprevHandle.className = \"tabulator-col-resize-handle prev\";\r\n\r\n\t\t\thandle.addEventListener(\"click\", function(e){\r\n\t\t\t\te.stopPropagation();\r\n\t\t\t});\r\n\r\n\t\t\tvar handleDown = function(e){\r\n\t\t\t\tvar nearestColumn = column.getLastColumn();\r\n\r\n\t\t\t\tif(nearestColumn && self._checkResizability(nearestColumn)){\r\n\t\t\t\t\tself.startColumn = column;\r\n\t\t\t\t\tself._mouseDown(e, nearestColumn, handle);\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\thandle.addEventListener(\"mousedown\", handleDown);\r\n\t\t\thandle.addEventListener(\"touchstart\", handleDown, {passive: true});\r\n\r\n\t\t\t//reszie column on double click\r\n\t\t\thandle.addEventListener(\"dblclick\", function(e){\r\n\t\t\t\tvar col = column.getLastColumn();\r\n\r\n\t\t\t\tif(col && self._checkResizability(col)){\r\n\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\tcol.reinitializeWidth(true);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\r\n\t\t\tprevHandle.addEventListener(\"click\", function(e){\r\n\t\t\t\te.stopPropagation();\r\n\t\t\t});\r\n\r\n\t\t\tvar prevHandleDown = function(e){\r\n\t\t\t\tvar nearestColumn, colIndex, prevColumn;\r\n\r\n\t\t\t\tnearestColumn = column.getFirstColumn();\r\n\r\n\t\t\t\tif(nearestColumn){\r\n\t\t\t\t\tcolIndex = self.table.columnManager.findColumnIndex(nearestColumn);\r\n\t\t\t\t\tprevColumn = colIndex > 0 ? self.table.columnManager.getColumnByIndex(colIndex - 1) : false;\r\n\r\n\t\t\t\t\tif(prevColumn && self._checkResizability(prevColumn)){\r\n\t\t\t\t\t\tself.startColumn = column;\r\n\t\t\t\t\t\tself._mouseDown(e, prevColumn, prevHandle);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\tprevHandle.addEventListener(\"mousedown\", prevHandleDown);\r\n\t\t\tprevHandle.addEventListener(\"touchstart\", prevHandleDown, {passive: true});\r\n\r\n\t\t\t//resize column on double click\r\n\t\t\tprevHandle.addEventListener(\"dblclick\", function(e){\r\n\t\t\t\tvar nearestColumn, colIndex, prevColumn;\r\n\r\n\t\t\t\tnearestColumn = column.getFirstColumn();\r\n\r\n\t\t\t\tif(nearestColumn){\r\n\t\t\t\t\tcolIndex = self.table.columnManager.findColumnIndex(nearestColumn);\r\n\t\t\t\t\tprevColumn = colIndex > 0 ? self.table.columnManager.getColumnByIndex(colIndex - 1) : false;\r\n\r\n\t\t\t\t\tif(prevColumn && self._checkResizability(prevColumn)){\r\n\t\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\t\tprevColumn.reinitializeWidth(true);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\telement.appendChild(handle);\r\n\t\t\telement.appendChild(prevHandle);\r\n\t\t}\r\n\t}\r\n\r\n\t_checkResizability(column){\r\n\t\treturn typeof column.definition.resizable != \"undefined\" ? column.definition.resizable : this.table.options.resizableColumns;\r\n\t}\r\n\r\n\t_mouseDown(e, column, handle){\r\n\t\tvar self = this;\r\n\r\n\t\tself.table.element.classList.add(\"tabulator-block-select\");\r\n\r\n\t\tfunction mouseMove(e){\r\n\t\t\t// self.table.columnManager.tempScrollBlock();\r\n\r\n\t\t\tif(self.table.rtl){\r\n\t\t\t\tcolumn.setWidth(self.startWidth - ((typeof e.screenX === \"undefined\" ? e.touches[0].screenX : e.screenX) - self.startX));\r\n\t\t\t}else{\r\n\t\t\t\tcolumn.setWidth(self.startWidth + ((typeof e.screenX === \"undefined\" ? e.touches[0].screenX : e.screenX) - self.startX));\r\n\t\t\t}\r\n\r\n\t\t\tif(self.table.options.virtualDomHoz){\r\n\t\t\t\tself.table.vdomHoz.reinitialize(true);\r\n\t\t\t}\r\n\r\n\t\t\tif(!self.table.browserSlow && column.modules.resize && column.modules.resize.variableHeight){\r\n\t\t\t\tcolumn.checkCellHeights();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction mouseUp(e){\r\n\r\n\t\t\t//block editor from taking action while resizing is taking place\r\n\t\t\tif(self.startColumn.modules.edit){\r\n\t\t\t\tself.startColumn.modules.edit.blocked = false;\r\n\t\t\t}\r\n\r\n\t\t\tif(self.table.browserSlow && column.modules.resize && column.modules.resize.variableHeight){\r\n\t\t\t\tcolumn.checkCellHeights();\r\n\t\t\t}\r\n\r\n\t\t\tdocument.body.removeEventListener(\"mouseup\", mouseUp);\r\n\t\t\tdocument.body.removeEventListener(\"mousemove\", mouseMove);\r\n\r\n\t\t\thandle.removeEventListener(\"touchmove\", mouseMove);\r\n\t\t\thandle.removeEventListener(\"touchend\", mouseUp);\r\n\r\n\t\t\tself.table.element.classList.remove(\"tabulator-block-select\");\r\n\r\n\t\t\tif(self.table.options.persistence && self.table.modExists(\"persistence\", true) && self.table.modules.persistence.config.columns){\r\n\t\t\t\tself.table.modules.persistence.save(\"columns\");\r\n\t\t\t}\r\n\r\n\t\t\tself.table.options.columnResized.call(self.table, column.getComponent());\r\n\t\t}\r\n\r\n\t\te.stopPropagation(); //prevent resize from interfereing with movable columns\r\n\r\n\t\t//block editor from taking action while resizing is taking place\r\n\t\tif(self.startColumn.modules.edit){\r\n\t\t\tself.startColumn.modules.edit.blocked = true;\r\n\t\t}\r\n\r\n\t\tself.startX = typeof e.screenX === \"undefined\" ? e.touches[0].screenX : e.screenX;\r\n\t\tself.startWidth = column.getWidth();\r\n\r\n\t\tdocument.body.addEventListener(\"mousemove\", mouseMove);\r\n\t\tdocument.body.addEventListener(\"mouseup\", mouseUp);\r\n\t\thandle.addEventListener(\"touchmove\", mouseMove, {passive: true});\r\n\t\thandle.addEventListener(\"touchend\", mouseUp);\r\n\t}\r\n}\r\n\r\nResizeColumns.moduleName = \"resizeColumns\";\r\n\r\nexport default ResizeColumns;","import Module from '../../core/Module.js';\r\n\r\nclass ResizeRows extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.startColumn = false;\r\n\t\tthis.startY = false;\r\n\t\tthis.startHeight = false;\r\n\t\tthis.handle = null;\r\n\t\tthis.prevHandle = null;\r\n\t}\r\n\r\n\tinitializeRow(row){\r\n\t\tvar self = this,\r\n\t\trowEl = row.getElement();\r\n\r\n\t\tvar handle = document.createElement('div');\r\n\t\thandle.className = \"tabulator-row-resize-handle\";\r\n\r\n\t\tvar prevHandle = document.createElement('div');\r\n\t\tprevHandle.className = \"tabulator-row-resize-handle prev\";\r\n\r\n\t\thandle.addEventListener(\"click\", function(e){\r\n\t\t\te.stopPropagation();\r\n\t\t});\r\n\r\n\t\tvar handleDown = function(e){\r\n\t\t\tself.startRow = row;\r\n\t\t\tself._mouseDown(e, row, handle);\r\n\t\t};\r\n\r\n\t\thandle.addEventListener(\"mousedown\", handleDown);\r\n\t\thandle.addEventListener(\"touchstart\", handleDown, {passive: true});\r\n\r\n\t\tprevHandle.addEventListener(\"click\", function(e){\r\n\t\t\te.stopPropagation();\r\n\t\t});\r\n\r\n\t\tvar prevHandleDown = function(e){\r\n\t\t\tvar prevRow = self.table.rowManager.prevDisplayRow(row);\r\n\r\n\t\t\tif(prevRow){\r\n\t\t\t\tself.startRow = prevRow;\r\n\t\t\t\tself._mouseDown(e, prevRow, prevHandle);\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tprevHandle.addEventListener(\"mousedown\",prevHandleDown);\r\n\t\tprevHandle.addEventListener(\"touchstart\",prevHandleDown, {passive: true});\r\n\r\n\t\trowEl.appendChild(handle);\r\n\t\trowEl.appendChild(prevHandle);\r\n\t}\r\n\r\n\t_mouseDown(e, row, handle){\r\n\t\tvar self = this;\r\n\r\n\t\tself.table.element.classList.add(\"tabulator-block-select\");\r\n\r\n\t\tfunction mouseMove(e){\r\n\t\t\trow.setHeight(self.startHeight + ((typeof e.screenY === \"undefined\" ? e.touches[0].screenY : e.screenY) - self.startY));\r\n\t\t}\r\n\r\n\t\tfunction mouseUp(e){\r\n\r\n\t\t\t// //block editor from taking action while resizing is taking place\r\n\t\t\t// if(self.startColumn.modules.edit){\r\n\t\t\t// \tself.startColumn.modules.edit.blocked = false;\r\n\t\t\t// }\r\n\r\n\t\t\tdocument.body.removeEventListener(\"mouseup\", mouseMove);\r\n\t\t\tdocument.body.removeEventListener(\"mousemove\", mouseMove);\r\n\r\n\t\t\thandle.removeEventListener(\"touchmove\", mouseMove);\r\n\t\t\thandle.removeEventListener(\"touchend\", mouseUp);\r\n\r\n\t\t\tself.table.element.classList.remove(\"tabulator-block-select\");\r\n\r\n\t\t\tself.table.options.rowResized.call(this.table, row.getComponent());\r\n\t\t}\r\n\r\n\t\te.stopPropagation(); //prevent resize from interfereing with movable columns\r\n\r\n\t\t//block editor from taking action while resizing is taking place\r\n\t\t// if(self.startColumn.modules.edit){\r\n\t\t// \tself.startColumn.modules.edit.blocked = true;\r\n\t\t// }\r\n\r\n\t\tself.startY = typeof e.screenY === \"undefined\" ? e.touches[0].screenY : e.screenY;\r\n\t\tself.startHeight = row.getHeight();\r\n\r\n\t\tdocument.body.addEventListener(\"mousemove\", mouseMove);\r\n\t\tdocument.body.addEventListener(\"mouseup\", mouseUp);\r\n\r\n\t\thandle.addEventListener(\"touchmove\", mouseMove, {passive: true});\r\n\t\thandle.addEventListener(\"touchend\", mouseUp);\r\n\t}\r\n}\r\n\r\nResizeRows.moduleName = \"resizeRows\";\r\n\r\nexport default ResizeRows;","import Module from '../../core/Module.js';\r\n\r\nclass ResizeTable extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.binding = false;\r\n\t\tthis.observer = false;\r\n\t\tthis.containerObserver = false;\r\n\r\n\t\tthis.tableHeight = 0;\r\n\t\tthis.tableWidth = 0;\r\n\t\tthis.containerHeight = 0;\r\n\t\tthis.containerWidth = 0;\r\n\r\n\t\tthis.autoResize = false;\r\n\t}\r\n\r\n\tinitialize(row){\r\n\t\tvar table = this.table,\r\n\t\ttableStyle;\r\n\r\n\t\tthis.tableHeight = table.element.clientHeight;\r\n\t\tthis.tableWidth = table.element.clientWidth;\r\n\r\n\t\tif(table.element.parentNode){\r\n\t\t\tthis.containerHeight = table.element.parentNode.clientHeight;\r\n\t\t\tthis.containerWidth = table.element.parentNode.clientWidth;\r\n\t\t}\r\n\r\n\t\tif(typeof ResizeObserver !== \"undefined\" && table.rowManager.getRenderMode() === \"virtual\"){\r\n\r\n\t\t\tthis.autoResize = true;\r\n\r\n\t\t\tthis.observer = new ResizeObserver((entry) => {\r\n\t\t\t\tif(!table.browserMobile || (table.browserMobile &&!table.modules.edit.currentCell)){\r\n\r\n\t\t\t\t\tvar nodeHeight = Math.floor(entry[0].contentRect.height);\r\n\t\t\t\t\tvar nodeWidth = Math.floor(entry[0].contentRect.width);\r\n\r\n\t\t\t\t\tif(this.tableHeight != nodeHeight || this.tableWidth != nodeWidth){\r\n\t\t\t\t\t\tthis.tableHeight = nodeHeight;\r\n\t\t\t\t\t\tthis.tableWidth = nodeWidth;\r\n\r\n\t\t\t\t\t\tif(table.element.parentNode){\r\n\t\t\t\t\t\t\tthis.containerHeight = table.element.parentNode.clientHeight;\r\n\t\t\t\t\t\t\tthis.containerWidth = table.element.parentNode.clientWidth;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif(table.options.virtualDomHoz){\r\n\t\t\t\t\t\t\ttable.vdomHoz.reinitialize(true);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\ttable.redraw();\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tthis.observer.observe(table.element);\r\n\r\n\t\t\ttableStyle = window.getComputedStyle(table.element);\r\n\r\n\t\t\tif(this.table.element.parentNode && !this.table.rowManager.fixedHeight && (tableStyle.getPropertyValue(\"max-height\") || tableStyle.getPropertyValue(\"min-height\"))){\r\n\r\n\t\t\t\tthis.containerObserver = new ResizeObserver((entry) => {\r\n\t\t\t\t\tif(!table.browserMobile || (table.browserMobile &&!table.modules.edit.currentCell)){\r\n\r\n\t\t\t\t\t\tvar nodeHeight = Math.floor(entry[0].contentRect.height);\r\n\t\t\t\t\t\tvar nodeWidth = Math.floor(entry[0].contentRect.width);\r\n\r\n\t\t\t\t\t\tif(this.containerHeight != nodeHeight || this.containerWidth != nodeWidth){\r\n\t\t\t\t\t\t\tthis.containerHeight = nodeHeight;\r\n\t\t\t\t\t\t\tthis.containerWidth = nodeWidth;\r\n\t\t\t\t\t\t\tthis.tableHeight = table.element.clientHeight;\r\n\t\t\t\t\t\t\tthis.tableWidth = table.element.clientWidth;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif(table.options.virtualDomHoz){\r\n\t\t\t\t\t\t\ttable.vdomHoz.reinitialize(true);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\ttable.redraw();\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\tthis.containerObserver.observe(this.table.element.parentNode);\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tthis.binding = function(){\r\n\t\t\t\tif(!table.browserMobile || (table.browserMobile && !table.modules.edit.currentCell)){\r\n\t\t\t\t\tif(table.options.virtualDomHoz){\r\n\t\t\t\t\t\ttable.vdomHoz.reinitialize(true);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\ttable.redraw();\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\twindow.addEventListener(\"resize\", this.binding);\r\n\t\t}\r\n\t}\r\n\r\n\tclearBindings(row){\r\n\t\tif(this.binding){\r\n\t\t\twindow.removeEventListener(\"resize\", this.binding);\r\n\t\t}\r\n\r\n\t\tif(this.observer){\r\n\t\t\tthis.observer.unobserve(this.table.element);\r\n\t\t}\r\n\r\n\t\tif(this.containerObserver){\r\n\t\t\tthis.containerObserver.unobserve(this.table.element.parentNode);\r\n\t\t}\r\n\t}\r\n}\r\n\r\nResizeTable.moduleName = \"resizeTable\";\r\n\r\nexport default ResizeTable;","import Module from '../../core/Module.js';\r\n\r\nclass ResponsiveLayout extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.columns = [];\r\n\t\tthis.hiddenColumns = [];\r\n\t\tthis.mode = \"\";\r\n\t\tthis.index = 0;\r\n\t\tthis.collapseFormatter = [];\r\n\t\tthis.collapseStartOpen = true;\r\n\t\tthis.collapseHandleColumn = false;\r\n\t}\r\n\r\n\t//generate resposive columns list\r\n\tinitialize(){\r\n\t\tvar self = this,\r\n\t\tcolumns = [];\r\n\r\n\t\tthis.mode = this.table.options.responsiveLayout;\r\n\t\tthis.collapseFormatter = this.table.options.responsiveLayoutCollapseFormatter || this.formatCollapsedData;\r\n\t\tthis.collapseStartOpen = this.table.options.responsiveLayoutCollapseStartOpen;\r\n\t\tthis.hiddenColumns = [];\r\n\r\n\t\t//detemine level of responsivity for each column\r\n\t\tthis.table.columnManager.columnsByIndex.forEach(function(column, i){\r\n\t\t\tif(column.modules.responsive){\r\n\t\t\t\tif(column.modules.responsive.order && column.modules.responsive.visible){\r\n\t\t\t\t\tcolumn.modules.responsive.index = i;\r\n\t\t\t\t\tcolumns.push(column);\r\n\r\n\t\t\t\t\tif(!column.visible && self.mode === \"collapse\"){\r\n\t\t\t\t\t\tself.hiddenColumns.push(column);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\t//sort list by responsivity\r\n\t\tcolumns = columns.reverse();\r\n\t\tcolumns = columns.sort(function(a, b){\r\n\t\t\tvar diff = b.modules.responsive.order - a.modules.responsive.order;\r\n\t\t\treturn diff || (b.modules.responsive.index - a.modules.responsive.index);\r\n\t\t});\r\n\r\n\t\tthis.columns = columns;\r\n\r\n\t\tif(this.mode === \"collapse\"){\r\n\t\t\tthis.generateCollapsedContent();\r\n\t\t}\r\n\r\n\t\t//assign collapse column\r\n\t\tfor (let col of this.table.columnManager.columnsByIndex){\r\n\t\t\tif(col.definition.formatter == \"responsiveCollapse\"){\r\n\t\t\t\tthis.collapseHandleColumn = col;\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(this.collapseHandleColumn){\r\n\t\t\tif(this.hiddenColumns.length){\r\n\t\t\t\tthis.collapseHandleColumn.show();\r\n\t\t\t}else{\r\n\t\t\t\tthis.collapseHandleColumn.hide();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//define layout information\r\n\tinitializeColumn(column){\r\n\t\tvar def = column.getDefinition();\r\n\r\n\t\tcolumn.modules.responsive = {order: typeof def.responsive === \"undefined\" ? 1 : def.responsive, visible:def.visible === false ? false : true};\r\n\t}\r\n\r\n\tinitializeRow(row){\r\n\t\tvar el;\r\n\r\n\t\tif(row.type !== \"calc\"){\r\n\t\t\tel = document.createElement(\"div\");\r\n\t\t\tel.classList.add(\"tabulator-responsive-collapse\");\r\n\r\n\t\t\trow.modules.responsiveLayout = {\r\n\t\t\t\telement:el,\r\n\t\t\t\topen:this.collapseStartOpen,\r\n\t\t\t};\r\n\r\n\t\t\tif(!this.collapseStartOpen){\r\n\t\t\t\tel.style.display = 'none';\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tlayoutRow(row){\r\n\t\tvar rowEl = row.getElement();\r\n\r\n\t\tif(row.modules.responsiveLayout){\r\n\t\t\trowEl.appendChild(row.modules.responsiveLayout.element);\r\n\t\t\tthis.generateCollapsedRowContent(row);\r\n\t\t}\r\n\t}\r\n\r\n\t//update column visibility\r\n\tupdateColumnVisibility(column, visible){\r\n\t\tvar index;\r\n\t\tif(column.modules.responsive){\r\n\t\t\tcolumn.modules.responsive.visible = visible;\r\n\t\t\tthis.initialize();\r\n\t\t}\r\n\t}\r\n\r\n\thideColumn(column){\r\n\t\tvar colCount = this.hiddenColumns.length;\r\n\r\n\t\tcolumn.hide(false, true);\r\n\r\n\t\tif(this.mode === \"collapse\"){\r\n\t\t\tthis.hiddenColumns.unshift(column);\r\n\t\t\tthis.generateCollapsedContent();\r\n\r\n\t\t\tif(this.collapseHandleColumn && !colCount){\r\n\t\t\t\tthis.collapseHandleColumn.show();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tshowColumn(column){\r\n\t\tvar index;\r\n\r\n\t\tcolumn.show(false, true);\r\n\t\t//set column width to prevent calculation loops on uninitialized columns\r\n\t\tcolumn.setWidth(column.getWidth());\r\n\r\n\t\tif(this.mode === \"collapse\"){\r\n\t\t\tindex = this.hiddenColumns.indexOf(column);\r\n\r\n\t\t\tif(index > -1){\r\n\t\t\t\tthis.hiddenColumns.splice(index, 1);\r\n\t\t\t}\r\n\r\n\t\t\tthis.generateCollapsedContent();\r\n\r\n\t\t\tif(this.collapseHandleColumn && !this.hiddenColumns.length){\r\n\t\t\t\tthis.collapseHandleColumn.hide();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//redraw columns to fit space\r\n\tupdate(){\r\n\t\tvar self = this,\r\n\t\tworking = true;\r\n\r\n\t\twhile(working){\r\n\r\n\t\t\tlet width = self.table.modules.layout.getMode() == \"fitColumns\" ? self.table.columnManager.getFlexBaseWidth() : self.table.columnManager.getWidth();\r\n\r\n\t\t\tlet diff = (self.table.options.headerVisible ? self.table.columnManager.element.clientWidth : self.table.element.clientWidth) - width;\r\n\r\n\t\t\tif(diff < 0){\r\n\t\t\t\t//table is too wide\r\n\t\t\t\tlet column = self.columns[self.index];\r\n\r\n\t\t\t\tif(column){\r\n\t\t\t\t\tself.hideColumn(column);\r\n\t\t\t\t\tself.index ++;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tworking = false;\r\n\t\t\t\t}\r\n\r\n\t\t\t}else{\r\n\r\n\t\t\t\t//table has spare space\r\n\t\t\t\tlet column = self.columns[self.index -1];\r\n\r\n\t\t\t\tif(column){\r\n\t\t\t\t\tif(diff > 0){\r\n\t\t\t\t\t\tif(diff >= column.getWidth()){\r\n\t\t\t\t\t\t\tself.showColumn(column);\r\n\t\t\t\t\t\t\tself.index --;\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\tworking = false;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tworking = false;\r\n\t\t\t\t\t}\r\n\t\t\t\t}else{\r\n\t\t\t\t\tworking = false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif(!self.table.rowManager.activeRowsCount){\r\n\t\t\t\tself.table.rowManager.renderEmptyScroll();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tgenerateCollapsedContent(){\r\n\t\tvar self = this,\r\n\t\trows = this.table.rowManager.getDisplayRows();\r\n\r\n\t\trows.forEach(function(row){\r\n\t\t\tself.generateCollapsedRowContent(row);\r\n\t\t});\r\n\t}\r\n\r\n\tgenerateCollapsedRowContent(row){\r\n\t\tvar el, contents;\r\n\r\n\t\tif(row.modules.responsiveLayout){\r\n\t\t\tel = row.modules.responsiveLayout.element;\r\n\r\n\t\t\twhile(el.firstChild) el.removeChild(el.firstChild);\r\n\r\n\t\t\tcontents = this.collapseFormatter(this.generateCollapsedRowData(row));\r\n\t\t\tif(contents){\r\n\t\t\t\tel.appendChild(contents);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tgenerateCollapsedRowData(row){\r\n\t\tvar self = this,\r\n\t\tdata = row.getData(),\r\n\t\toutput = [],\r\n\t\tmockCellComponent;\r\n\r\n\t\tthis.hiddenColumns.forEach(function(column){\r\n\t\t\tvar value = column.getFieldValue(data);\r\n\r\n\t\t\tif(column.definition.title && column.field){\r\n\t\t\t\tif(column.modules.format && self.table.options.responsiveLayoutCollapseUseFormatters){\r\n\r\n\t\t\t\t\tmockCellComponent = {\r\n\t\t\t\t\t\tvalue:false,\r\n\t\t\t\t\t\tdata:{},\r\n\t\t\t\t\t\tgetValue:function(){\r\n\t\t\t\t\t\t\treturn value;\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tgetData:function(){\r\n\t\t\t\t\t\t\treturn data;\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tgetElement:function(){\r\n\t\t\t\t\t\t\treturn document.createElement(\"div\");\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tgetRow:function(){\r\n\t\t\t\t\t\t\treturn row.getComponent();\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tgetColumn:function(){\r\n\t\t\t\t\t\t\treturn column.getComponent();\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t};\r\n\r\n\t\t\t\t\toutput.push({\r\n\t\t\t\t\t\tfield: column.field,\r\n\t\t\t\t\t\ttitle: column.definition.title,\r\n\t\t\t\t\t\tvalue: column.modules.format.formatter.call(self.table.modules.format, mockCellComponent, column.modules.format.params)\r\n\t\t\t\t\t});\r\n\t\t\t\t}else{\r\n\t\t\t\t\toutput.push({\r\n\t\t\t\t\t\tfield: column.field,\r\n\t\t\t\t\t\ttitle: column.definition.title,\r\n\t\t\t\t\t\tvalue: value\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tformatCollapsedData(data){\r\n\t\tvar list = document.createElement(\"table\");\r\n\r\n\t\tdata.forEach(function(item){\r\n\t\t\tvar row = document.createElement(\"tr\");\r\n\t\t\tvar titleData = document.createElement(\"td\");\r\n\t\t\tvar valueData = document.createElement(\"td\");\r\n\t\t\tvar node_content;\r\n\r\n\t\t\tvar titleHighlight = document.createElement(\"strong\");\r\n\t\t\ttitleData.appendChild(titleHighlight);\r\n\t\t\tthis.table.modules.localize.bind(\"columns|\" + item.field, function(text){\r\n\t\t\t\ttitleHighlight.innerText = text || item.title;\r\n\t\t\t});\r\n\r\n\t\t\tif(item.value instanceof Node){\r\n\t\t\t\tnode_content = document.createElement(\"div\");\r\n\t\t\t\tnode_content.appendChild(item.value);\r\n\t\t\t\tvalueData.appendChild(node_content);\r\n\t\t\t}else{\r\n\t\t\t\tvalueData.innerHTML = item.value;\r\n\t\t\t}\r\n\r\n\t\t\trow.appendChild(titleData);\r\n\t\t\trow.appendChild(valueData);\r\n\t\t\tlist.appendChild(row);\r\n\t\t}, this);\r\n\r\n\t\treturn Object.keys(data).length ? list : \"\";\r\n\t}\r\n}\r\n\r\nResponsiveLayout.moduleName = \"responsiveLayout\";\r\n\r\nexport default ResponsiveLayout;","import Module from '../../core/Module.js';\r\n\r\nclass SelectRow extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.selecting = false; //flag selecting in progress\r\n\t\tthis.lastClickedRow = false; //last clicked row\r\n\t\tthis.selectPrev = []; //hold previously selected element for drag drop selection\r\n\t\tthis.selectedRows = []; //hold selected rows\r\n\t\tthis.headerCheckboxElement = null; // hold header select element\r\n\t}\r\n\r\n\tclearSelectionData(silent){\r\n\t\tthis.selecting = false;\r\n\t\tthis.lastClickedRow = false;\r\n\t\tthis.selectPrev = [];\r\n\t\tthis.selectedRows = [];\r\n\r\n\t\tif(!silent){\r\n\t\t\tthis._rowSelectionChanged();\r\n\t\t}\r\n\t}\r\n\r\n\tinitializeRow(row){\r\n\t\tvar self = this,\r\n\t\telement = row.getElement();\r\n\r\n\t\t// trigger end of row selection\r\n\t\tvar endSelect = function(){\r\n\r\n\t\t\tsetTimeout(function(){\r\n\t\t\t\tself.selecting = false;\r\n\t\t\t}, 50);\r\n\r\n\t\t\tdocument.body.removeEventListener(\"mouseup\", endSelect);\r\n\t\t};\r\n\r\n\t\trow.modules.select = {selected:false};\r\n\r\n\t\t//set row selection class\r\n\t\tif(self.table.options.selectableCheck.call(this.table, row.getComponent())){\r\n\t\t\telement.classList.add(\"tabulator-selectable\");\r\n\t\t\telement.classList.remove(\"tabulator-unselectable\");\r\n\r\n\t\t\tif(self.table.options.selectable && self.table.options.selectable != \"highlight\"){\r\n\t\t\t\tif(self.table.options.selectableRangeMode === \"click\"){\r\n\t\t\t\t\telement.addEventListener(\"click\", function(e){\r\n\t\t\t\t\t\tif(e.shiftKey){\r\n\t\t\t\t\t\t\tself.table._clearSelection();\r\n\t\t\t\t\t\t\tself.lastClickedRow = self.lastClickedRow || row;\r\n\r\n\t\t\t\t\t\t\tvar lastClickedRowIdx = self.table.rowManager.getDisplayRowIndex(self.lastClickedRow);\r\n\t\t\t\t\t\t\tvar rowIdx = self.table.rowManager.getDisplayRowIndex(row);\r\n\r\n\t\t\t\t\t\t\tvar fromRowIdx = lastClickedRowIdx <= rowIdx ? lastClickedRowIdx : rowIdx;\r\n\t\t\t\t\t\t\tvar toRowIdx = lastClickedRowIdx >= rowIdx ? lastClickedRowIdx : rowIdx;\r\n\r\n\t\t\t\t\t\t\tvar rows = self.table.rowManager.getDisplayRows().slice(0);\r\n\t\t\t\t\t\t\tvar toggledRows = rows.splice(fromRowIdx, toRowIdx - fromRowIdx + 1);\r\n\r\n\t\t\t\t\t\t\tif(e.ctrlKey || e.metaKey){\r\n\t\t\t\t\t\t\t\ttoggledRows.forEach(function(toggledRow){\r\n\t\t\t\t\t\t\t\t\tif(toggledRow !== self.lastClickedRow){\r\n\r\n\t\t\t\t\t\t\t\t\t\tif(self.table.options.selectable !== true && !self.isRowSelected(row)){\r\n\t\t\t\t\t\t\t\t\t\t\tif(self.selectedRows.length < self.table.options.selectable){\r\n\t\t\t\t\t\t\t\t\t\t\t\tself.toggleRow(toggledRow);\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\t\t\t\t\tself.toggleRow(toggledRow);\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\tself.lastClickedRow = row;\r\n\t\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\t\tself.deselectRows(undefined, true);\r\n\r\n\t\t\t\t\t\t\t\tif(self.table.options.selectable !== true){\r\n\t\t\t\t\t\t\t\t\tif(toggledRows.length > self.table.options.selectable){\r\n\t\t\t\t\t\t\t\t\t\ttoggledRows = toggledRows.slice(0, self.table.options.selectable)\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\tself.selectRows(toggledRows);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tself.table._clearSelection();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse if(e.ctrlKey || e.metaKey){\r\n\t\t\t\t\t\t\tself.toggleRow(row);\r\n\t\t\t\t\t\t\tself.lastClickedRow = row;\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\tself.deselectRows(undefined, true);\r\n\t\t\t\t\t\t\tself.selectRows(row);\r\n\t\t\t\t\t\t\tself.lastClickedRow = row;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t}else{\r\n\t\t\t\t\telement.addEventListener(\"click\", function(e){\r\n\t\t\t\t\t\tif(!self.table.modExists(\"edit\") || !self.table.modules.edit.getCurrentCell()){\r\n\t\t\t\t\t\t\tself.table._clearSelection();\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif(!self.selecting){\r\n\t\t\t\t\t\t\tself.toggleRow(row);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\telement.addEventListener(\"mousedown\", function(e){\r\n\t\t\t\t\t\tif(e.shiftKey){\r\n\t\t\t\t\t\t\tself.table._clearSelection();\r\n\r\n\t\t\t\t\t\t\tself.selecting = true;\r\n\r\n\t\t\t\t\t\t\tself.selectPrev = [];\r\n\r\n\t\t\t\t\t\t\tdocument.body.addEventListener(\"mouseup\", endSelect);\r\n\t\t\t\t\t\t\tdocument.body.addEventListener(\"keyup\", endSelect);\r\n\r\n\t\t\t\t\t\t\tself.toggleRow(row);\r\n\r\n\t\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\telement.addEventListener(\"mouseenter\", function(e){\r\n\t\t\t\t\t\tif(self.selecting){\r\n\t\t\t\t\t\t\tself.table._clearSelection();\r\n\t\t\t\t\t\t\tself.toggleRow(row);\r\n\r\n\t\t\t\t\t\t\tif(self.selectPrev[1] == row){\r\n\t\t\t\t\t\t\t\tself.toggleRow(self.selectPrev[0]);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\telement.addEventListener(\"mouseout\", function(e){\r\n\t\t\t\t\t\tif(self.selecting){\r\n\t\t\t\t\t\t\tself.table._clearSelection();\r\n\t\t\t\t\t\t\tself.selectPrev.unshift(row);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t}else{\r\n\t\t\telement.classList.add(\"tabulator-unselectable\");\r\n\t\t\telement.classList.remove(\"tabulator-selectable\");\r\n\t\t}\r\n\t}\r\n\r\n\t//toggle row selection\r\n\ttoggleRow(row){\r\n\t\tif(this.table.options.selectableCheck.call(this.table, row.getComponent())){\r\n\t\t\tif(row.modules.select && row.modules.select.selected){\r\n\t\t\t\tthis._deselectRow(row);\r\n\t\t\t}else{\r\n\t\t\t\tthis._selectRow(row);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//select a number of rows\r\n\tselectRows(rows){\r\n\t\tvar rowMatch;\r\n\r\n\t\tswitch(typeof rows){\r\n\t\t\tcase \"undefined\":\r\n\t\t\tthis.table.rowManager.rows.forEach((row) => {\r\n\t\t\t\tthis._selectRow(row, true, true);\r\n\t\t\t});\r\n\r\n\t\t\tthis._rowSelectionChanged();\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"string\":\r\n\r\n\t\t\trowMatch = this.table.rowManager.findRow(rows);\r\n\r\n\t\t\tif(rowMatch){\r\n\t\t\t\tthis._selectRow(rowMatch, true, true);\r\n\t\t\t}else{\r\n\t\t\t\tthis.table.rowManager.getRows(rows).forEach((row) => {\r\n\t\t\t\t\tthis._selectRow(row, true, true);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\tthis._rowSelectionChanged();\r\n\t\t\tbreak;\r\n\r\n\t\t\tdefault:\r\n\t\t\tif(Array.isArray(rows)){\r\n\t\t\t\trows.forEach((row) => {\r\n\t\t\t\t\tthis._selectRow(row, true, true);\r\n\t\t\t\t});\r\n\r\n\t\t\t\tthis._rowSelectionChanged();\r\n\t\t\t}else{\r\n\t\t\t\tthis._selectRow(rows, false, true);\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\t//select an individual row\r\n\t_selectRow(rowInfo, silent, force){\r\n\t\tvar index;\r\n\r\n\t\t//handle max row count\r\n\t\tif(!isNaN(this.table.options.selectable) && this.table.options.selectable !== true && !force){\r\n\t\t\tif(this.selectedRows.length >= this.table.options.selectable){\r\n\t\t\t\tif(this.table.options.selectableRollingSelection){\r\n\t\t\t\t\tthis._deselectRow(this.selectedRows[0]);\r\n\t\t\t\t}else{\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tvar row = this.table.rowManager.findRow(rowInfo);\r\n\r\n\t\tif(row){\r\n\t\t\tif(this.selectedRows.indexOf(row) == -1){\r\n\t\t\t\trow.getElement().classList.add(\"tabulator-selected\");\r\n\t\t\t\tif(!row.modules.select){\r\n\t\t\t\t\trow.modules.select = {};\r\n\t\t\t\t}\r\n\r\n\t\t\t\trow.modules.select.selected = true;\r\n\t\t\t\tif(row.modules.select.checkboxEl){\r\n\t\t\t\t\trow.modules.select.checkboxEl.checked = true;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.selectedRows.push(row);\r\n\r\n\t\t\t\tif(this.table.options.dataTreeSelectPropagate){\r\n\t\t\t\t\tthis.childRowSelection(row, true);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(!silent){\r\n\t\t\t\t\tthis.table.options.rowSelected.call(this.table, row.getComponent());\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis._rowSelectionChanged(silent);\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tif(!silent){\r\n\t\t\t\tconsole.warn(\"Selection Error - No such row found, ignoring selection:\" + rowInfo);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tisRowSelected(row){\r\n\t\treturn this.selectedRows.indexOf(row) !== -1;\r\n\t}\r\n\r\n\t//deselect a number of rows\r\n\tdeselectRows(rows, silent){\r\n\t\tvar self = this,\r\n\t\trowCount;\r\n\r\n\t\tif(typeof rows == \"undefined\"){\r\n\r\n\t\t\trowCount = self.selectedRows.length;\r\n\r\n\t\t\tfor(let i = 0; i < rowCount; i++){\r\n\t\t\t\tself._deselectRow(self.selectedRows[0], true);\r\n\t\t\t}\r\n\r\n\t\t\tself._rowSelectionChanged(silent);\r\n\r\n\t\t}else{\r\n\t\t\tif(Array.isArray(rows)){\r\n\t\t\t\trows.forEach(function(row){\r\n\t\t\t\t\tself._deselectRow(row, true);\r\n\t\t\t\t});\r\n\r\n\t\t\t\tself._rowSelectionChanged(silent);\r\n\t\t\t}else{\r\n\t\t\t\tself._deselectRow(rows, silent);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//deselect an individual row\r\n\t_deselectRow(rowInfo, silent){\r\n\t\tvar self = this,\r\n\t\trow = self.table.rowManager.findRow(rowInfo),\r\n\t\tindex;\r\n\r\n\t\tif(row){\r\n\t\t\tindex = self.selectedRows.findIndex(function(selectedRow){\r\n\t\t\t\treturn selectedRow == row;\r\n\t\t\t});\r\n\r\n\t\t\tif(index > -1){\r\n\r\n\t\t\t\trow.getElement().classList.remove(\"tabulator-selected\");\r\n\t\t\t\tif(!row.modules.select){\r\n\t\t\t\t\trow.modules.select = {};\r\n\t\t\t\t}\r\n\r\n\t\t\t\trow.modules.select.selected = false;\r\n\t\t\t\tif(row.modules.select.checkboxEl){\r\n\t\t\t\t\trow.modules.select.checkboxEl.checked = false;\r\n\t\t\t\t}\r\n\t\t\t\tself.selectedRows.splice(index, 1);\r\n\r\n\t\t\t\tif(this.table.options.dataTreeSelectPropagate){\r\n\t\t\t\t\tthis.childRowSelection(row, false);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(!silent){\r\n\t\t\t\t\tself.table.options.rowDeselected.call(this.table, row.getComponent());\r\n\t\t\t\t}\r\n\r\n\t\t\t\tself._rowSelectionChanged(silent);\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tif(!silent){\r\n\t\t\t\tconsole.warn(\"Deselection Error - No such row found, ignoring selection:\" + rowInfo);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tgetSelectedData(){\r\n\t\tvar data = [];\r\n\r\n\t\tthis.selectedRows.forEach(function(row){\r\n\t\t\tdata.push(row.getData());\r\n\t\t});\r\n\r\n\t\treturn data;\r\n\t}\r\n\r\n\tgetSelectedRows(){\r\n\r\n\t\tvar rows = [];\r\n\r\n\t\tthis.selectedRows.forEach(function(row){\r\n\t\t\trows.push(row.getComponent());\r\n\t\t});\r\n\r\n\t\treturn rows;\r\n\t}\r\n\r\n\t_rowSelectionChanged(silent){\r\n\t\tif(this.headerCheckboxElement){\r\n\t\t\tif(this.selectedRows.length === 0){\r\n\t\t\t\tthis.headerCheckboxElement.checked = false;\r\n\t\t\t\tthis.headerCheckboxElement.indeterminate = false;\r\n\t\t\t} else if(this.table.rowManager.rows.length === this.selectedRows.length){\r\n\t\t\t\tthis.headerCheckboxElement.checked = true;\r\n\t\t\t\tthis.headerCheckboxElement.indeterminate = false;\r\n\t\t\t} else {\r\n\t\t\t\tthis.headerCheckboxElement.indeterminate = true;\r\n\t\t\t\tthis.headerCheckboxElement.checked = false;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(!silent){\r\n\t\t\tthis.table.options.rowSelectionChanged.call(this.table, this.getSelectedData(), this.getSelectedRows());\r\n\t\t}\r\n\t}\r\n\r\n\tregisterRowSelectCheckbox (row, element) {\r\n\t\tif(!row._row.modules.select){\r\n\t\t\trow._row.modules.select = {};\r\n\t\t}\r\n\r\n\t\trow._row.modules.select.checkboxEl = element;\r\n\t}\r\n\r\n\tregisterHeaderSelectCheckbox (element) {\r\n\t\tthis.headerCheckboxElement = element;\r\n\t}\r\n\r\n\tchildRowSelection(row, select){\r\n\t\tvar children = this.table.modules.dataTree.getChildren(row, true);\r\n\r\n\t\tif(select){\r\n\t\t\tfor(let child of children){\r\n\t\t\t\tthis._selectRow(child, true);\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tfor(let child of children){\r\n\t\t\t\tthis._deselectRow(child, true);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n\r\nSelectRow.moduleName = \"selectRow\";\r\n\r\nexport default SelectRow;","//sort datetime\r\nexport default function(a, b, aRow, bRow, column, dir, params){\r\n\tvar format = params.format || \"DD/MM/YYYY HH:mm:ss\",\r\n\talignEmptyValues = params.alignEmptyValues,\r\n\temptyAlign = 0;\r\n\r\n\tif(typeof moment != \"undefined\"){\r\n\t\ta = moment(a, format);\r\n\t\tb = moment(b, format);\r\n\r\n\t\tif(!a.isValid()){\r\n\t\t\temptyAlign = !b.isValid() ? 0 : -1;\r\n\t\t}else if(!b.isValid()){\r\n\t\t\temptyAlign = 1;\r\n\t\t}else{\r\n\t\t\t//compare valid values\r\n\t\t\treturn a - b;\r\n\t\t}\r\n\r\n\t\t//fix empty values in position\r\n\t\tif((alignEmptyValues === \"top\" && dir === \"desc\") || (alignEmptyValues === \"bottom\" && dir === \"asc\")){\r\n\t\t\temptyAlign *= -1;\r\n\t\t}\r\n\r\n\t\treturn emptyAlign;\r\n\r\n\t}else{\r\n\t\tconsole.error(\"Sort Error - 'datetime' sorter is dependant on moment.js\");\r\n\t}\r\n};","import datetime from './datetime.js';\r\n\r\n//sort date\r\nexport default function(a, b, aRow, bRow, column, dir, params){\r\n\tif(!params.format){\r\n\t\tparams.format = \"DD/MM/YYYY\";\r\n\t}\r\n\r\n\treturn datetime.call(this, a, b, aRow, bRow, column, dir, params);\r\n};","//sort numbers\r\nexport default function(a, b, aRow, bRow, column, dir, params){\r\n\tvar alignEmptyValues = params.alignEmptyValues;\r\n\tvar decimal = params.decimalSeparator;\r\n\tvar thousand = params.thousandSeparator;\r\n\tvar emptyAlign = 0;\r\n\r\n\ta = String(a);\r\n\tb = String(b);\r\n\r\n\tif(thousand){\r\n\t\ta = a.split(thousand).join(\"\");\r\n\t\tb = b.split(thousand).join(\"\");\r\n\t}\r\n\r\n\tif(decimal){\r\n\t\ta = a.split(decimal).join(\".\");\r\n\t\tb = b.split(decimal).join(\".\");\r\n\t}\r\n\r\n\ta = parseFloat(a);\r\n\tb = parseFloat(b);\r\n\r\n\t//handle non numeric values\r\n\tif(isNaN(a)){\r\n\t\temptyAlign = isNaN(b) ? 0 : -1;\r\n\t}else if(isNaN(b)){\r\n\t\temptyAlign = 1;\r\n\t}else{\r\n\t\t//compare valid values\r\n\t\treturn a - b;\r\n\t}\r\n\r\n\t//fix empty values in position\r\n\tif((alignEmptyValues === \"top\" && dir === \"desc\") || (alignEmptyValues === \"bottom\" && dir === \"asc\")){\r\n\t\temptyAlign *= -1;\r\n\t}\r\n\r\n\treturn emptyAlign;\r\n};","import number from './sorters/number.js';\r\nimport string from './sorters/string.js';\r\nimport date from './sorters/date.js';\r\nimport time from './sorters/time.js';\r\nimport datetime from './sorters/datetime.js';\r\nimport boolean from './sorters/boolean.js';\r\nimport array from './sorters/array.js';\r\nimport exists from './sorters/exists.js';\r\nimport alphanum from './sorters/alphanum.js';\r\n\r\nexport default {\r\n\tnumber:number,\r\n\tstring:string,\r\n\tdate:date,\r\n\ttime:time,\r\n\tdatetime:datetime,\r\n\tboolean:boolean,\r\n\tarray:array,\r\n\texists:exists,\r\n\talphanum:alphanum\r\n};","//sort strings\r\nexport default function(a, b, aRow, bRow, column, dir, params){\r\n\tvar alignEmptyValues = params.alignEmptyValues;\r\n\tvar emptyAlign = 0;\r\n\tvar locale;\r\n\r\n\t//handle empty values\r\n\tif(!a){\r\n\t\temptyAlign = !b ? 0 : -1;\r\n\t}else if(!b){\r\n\t\temptyAlign = 1;\r\n\t}else{\r\n\t\t//compare valid values\r\n\t\tswitch(typeof params.locale){\r\n\t\t\tcase \"boolean\":\r\n\t\t\tif(params.locale){\r\n\t\t\t\tlocale = this.table.modules.localize.getLocale();\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\t\t\tcase \"string\":\r\n\t\t\tlocale = params.locale;\r\n\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\treturn String(a).toLowerCase().localeCompare(String(b).toLowerCase(), locale);\r\n\t}\r\n\r\n\t//fix empty values in position\r\n\tif((alignEmptyValues === \"top\" && dir === \"desc\") || (alignEmptyValues === \"bottom\" && dir === \"asc\")){\r\n\t\temptyAlign *= -1;\r\n\t}\r\n\r\n\treturn emptyAlign;\r\n};","import datetime from './datetime.js';\r\n\r\n//sort times\r\nexport default function(a, b, aRow, bRow, column, dir, params){\r\n\tif(!params.format){\r\n\t\tparams.format = \"HH:mm\";\r\n\t}\r\n\r\n\treturn datetime.call(this, a, b, aRow, bRow, column, dir, params);\r\n};","//sort booleans\r\nexport default function(a, b, aRow, bRow, column, dir, params){\r\n\tvar el1 = a === true || a === \"true\" || a === \"True\" || a === 1 ? 1 : 0;\r\n\tvar el2 = b === true || b === \"true\" || b === \"True\" || b === 1 ? 1 : 0;\r\n\r\n\treturn el1 - el2;\r\n};","import Module from '../../core/Module.js';\r\n\r\nimport defaultSorters from './defaults/sorters.js';\r\n\r\nclass Sort extends Module{\r\n\r\n\tconstructor(table){\r\n\t \tsuper(table);\r\n\r\n\t \tthis.sortList = []; //holder current sort\r\n\t \tthis.changed = false; //has the sort changed since last render\r\n\t}\r\n\r\n\t//initialize column header for sorting\r\n\tinitializeColumn(column, content){\r\n\t\tvar self = this,\r\n\t\tsorter = false,\r\n\t\tcolEl,\r\n\t\tarrowEl;\r\n\r\n\t\tswitch(typeof column.definition.sorter){\r\n\t\t\tcase \"string\":\r\n\t\t\tif(Sort.sorters[column.definition.sorter]){\r\n\t\t\t\tsorter = Sort.sorters[column.definition.sorter];\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Sort Error - No such sorter found: \", column.definition.sorter);\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"function\":\r\n\t\t\tsorter = column.definition.sorter;\r\n\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\tcolumn.modules.sort = {\r\n\t\t\tsorter:sorter, dir:\"none\",\r\n\t\t\tparams:column.definition.sorterParams || {},\r\n\t\t\tstartingDir:column.definition.headerSortStartingDir || \"asc\",\r\n\t\t\ttristate: typeof column.definition.headerSortTristate !== \"undefined\" ? column.definition.headerSortTristate : this.table.options.headerSortTristate,\r\n\t\t};\r\n\r\n\t\tif(typeof column.definition.headerSort === \"undefined\" ? (this.table.options.headerSort !== false) : column.definition.headerSort !== false){\r\n\r\n\t\t\tcolEl = column.getElement();\r\n\r\n\t\t\tcolEl.classList.add(\"tabulator-sortable\");\r\n\r\n\r\n\t\t\tarrowEl = document.createElement(\"div\");\r\n\t\t\tarrowEl.classList.add(\"tabulator-col-sorter\");\r\n\r\n\t\t\tif(typeof this.table.options.headerSortElement == \"object\"){\r\n\t\t\t\tarrowEl.appendChild(this.table.options.headerSortElement);\r\n\t\t\t}else{\r\n\t\t\t\tarrowEl.innerHTML = this.table.options.headerSortElement;\r\n\t\t\t}\r\n\r\n\t\t\t//create sorter arrow\r\n\t\t\tcontent.appendChild(arrowEl);\r\n\r\n\t\t\tcolumn.modules.sort.element = arrowEl;\r\n\r\n\t\t\t//sort on click\r\n\t\t\tcolEl.addEventListener(\"click\", function(e){\r\n\t\t\t\tvar dir = \"\",\r\n\t\t\t\tsorters=[],\r\n\t\t\t\tmatch = false;\r\n\r\n\t\t\t\tif(column.modules.sort){\r\n\t\t\t\t\tif(column.modules.sort.tristate){\r\n\t\t\t\t\t\tif(column.modules.sort.dir == \"none\"){\r\n\t\t\t\t\t\t\tdir = column.modules.sort.startingDir;\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\tif(column.modules.sort.dir == column.modules.sort.startingDir){\r\n\t\t\t\t\t\t\t\tdir = column.modules.sort.dir == \"asc\" ? \"desc\" : \"asc\";\r\n\t\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\t\tdir = \"none\";\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tswitch(column.modules.sort.dir){\r\n\t\t\t\t\t\t\tcase \"asc\":\r\n\t\t\t\t\t\t\tdir = \"desc\";\r\n\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\t\tcase \"desc\":\r\n\t\t\t\t\t\t\tdir = \"asc\";\r\n\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\t\tdefault:\r\n\t\t\t\t\t\t\tdir = column.modules.sort.startingDir;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\r\n\t\t\t\t\tif (self.table.options.columnHeaderSortMulti && (e.shiftKey || e.ctrlKey)) {\r\n\t\t\t\t\t\tsorters = self.getSort();\r\n\r\n\t\t\t\t\t\tmatch = sorters.findIndex(function(sorter){\r\n\t\t\t\t\t\t\treturn sorter.field === column.getField();\r\n\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\tif(match > -1){\r\n\t\t\t\t\t\t\tsorters[match].dir = dir;\r\n\r\n\t\t\t\t\t\t\tif(match != sorters.length -1){\r\n\t\t\t\t\t\t\t\tmatch = sorters.splice(match, 1)[0];\r\n\t\t\t\t\t\t\t\tif(dir != \"none\"){\r\n\t\t\t\t\t\t\t\t\tsorters.push(match);\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\tif(dir != \"none\"){\r\n\t\t\t\t\t\t\t\tsorters.push({column:column, dir:dir});\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t//add to existing sort\r\n\t\t\t\t\t\tself.setSort(sorters);\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tif(dir == \"none\"){\r\n\t\t\t\t\t\t\tself.clear();\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\t//sort by column only\r\n\t\t\t\t\t\t\tself.setSort(column, dir);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tself.table.rowManager.sorterRefresh(!self.sortList.length);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\t//check if the sorters have changed since last use\r\n\thasChanged(){\r\n\t\tvar changed = this.changed;\r\n\t\tthis.changed = false;\r\n\t\treturn changed;\r\n\t}\r\n\r\n\t//return current sorters\r\n\tgetSort(){\r\n\t\tvar self = this,\r\n\t\tsorters = [];\r\n\r\n\t\tself.sortList.forEach(function(item){\r\n\t\t\tif(item.column){\r\n\t\t\t\tsorters.push({column:item.column.getComponent(), field:item.column.getField(), dir:item.dir});\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn sorters;\r\n\t}\r\n\r\n\t//change sort list and trigger sort\r\n\tsetSort(sortList, dir){\r\n\t\tvar self = this,\r\n\t\tnewSortList = [];\r\n\r\n\t\tif(!Array.isArray(sortList)){\r\n\t\t\tsortList = [{column: sortList, dir:dir}];\r\n\t\t}\r\n\r\n\t\tsortList.forEach(function(item){\r\n\t\t\tvar column;\r\n\r\n\t\t\tcolumn = self.table.columnManager.findColumn(item.column);\r\n\r\n\t\t\tif(column){\r\n\t\t\t\titem.column = column;\r\n\t\t\t\tnewSortList.push(item);\r\n\t\t\t\tself.changed = true;\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Sort Warning - Sort field does not exist and is being ignored: \", item.column);\r\n\t\t\t}\r\n\r\n\t\t});\r\n\r\n\t\tself.sortList = newSortList;\r\n\r\n\t\tif(this.table.options.persistence && this.table.modExists(\"persistence\", true) && this.table.modules.persistence.config.sort){\r\n\t\t\tthis.table.modules.persistence.save(\"sort\");\r\n\t\t}\r\n\t}\r\n\r\n\t//clear sorters\r\n\tclear(){\r\n\t\tthis.setSort([]);\r\n\t}\r\n\r\n\t//find appropriate sorter for column\r\n\tfindSorter(column){\r\n\t\tvar row = this.table.rowManager.activeRows[0],\r\n\t\tsorter = \"string\",\r\n\t\tfield, value;\r\n\r\n\t\tif(row){\r\n\t\t\trow = row.getData();\r\n\t\t\tfield = column.getField();\r\n\r\n\t\t\tif(field){\r\n\r\n\t\t\t\tvalue = column.getFieldValue(row);\r\n\r\n\t\t\t\tswitch(typeof value){\r\n\t\t\t\t\tcase \"undefined\":\r\n\t\t\t\t\tsorter = \"string\";\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase \"boolean\":\r\n\t\t\t\t\tsorter = \"boolean\";\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tdefault:\r\n\t\t\t\t\tif(!isNaN(value) && value !== \"\"){\r\n\t\t\t\t\t\tsorter = \"number\";\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tif(value.match(/((^[0-9]+[a-z]+)|(^[a-z]+[0-9]+))+$/i)){\r\n\t\t\t\t\t\t\tsorter = \"alphanum\";\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn Sort.sorters[sorter];\r\n\t}\r\n\r\n\t//work through sort list sorting data\r\n\tsort(data){\r\n\t\tvar self = this,\r\n\t\tsortList = this.table.options.sortOrderReverse ? self.sortList.slice().reverse() : self.sortList,\r\n\t\tsortListActual = [],\r\n\t\trowComponents = [],\r\n\t\tlastSort;\r\n\r\n\t\tif(self.table.options.dataSorting){\r\n\t\t\tself.table.options.dataSorting.call(self.table, self.getSort());\r\n\t\t}\r\n\r\n\t\tself.clearColumnHeaders();\r\n\r\n\t\tif(!self.table.options.ajaxSorting){\r\n\r\n\t\t\t//build list of valid sorters and trigger column specific callbacks before sort begins\r\n\t\t\tsortList.forEach(function(item, i){\r\n\t\t\t\tvar sortObj = item.column.modules.sort;\r\n\r\n\t\t\t\tif(item.column && sortObj){\r\n\r\n\t\t\t\t\t//if no sorter has been defined, take a guess\r\n\t\t\t\t\tif(!sortObj.sorter){\r\n\t\t\t\t\t\tsortObj.sorter = self.findSorter(item.column);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\titem.params = typeof sortObj.params === \"function\" ? sortObj.params(item.column.getComponent(), item.dir) : sortObj.params;\r\n\r\n\t\t\t\t\tsortListActual.push(item);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tself.setColumnHeader(item.column, item.dir);\r\n\t\t\t});\r\n\r\n\t\t\t//sort data\r\n\t\t\tif (sortListActual.length) {\r\n\t\t\t\tself._sortItems(data, sortListActual);\r\n\t\t\t}\r\n\r\n\t\t}else{\r\n\t\t\tsortList.forEach(function(item, i){\r\n\t\t\t\tself.setColumnHeader(item.column, item.dir);\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif(self.table.options.dataSorted){\r\n\t\t\tdata.forEach((row) => {\r\n\t\t\t\trowComponents.push(row.getComponent());\r\n\t\t\t});\r\n\r\n\t\t\tself.table.options.dataSorted.call(self.table, self.getSort(), rowComponents);\r\n\t\t}\r\n\t}\r\n\r\n\t//clear sort arrows on columns\r\n\tclearColumnHeaders(){\r\n\t\tthis.table.columnManager.getRealColumns().forEach(function(column){\r\n\t\t\tif(column.modules.sort){\r\n\t\t\t\tcolumn.modules.sort.dir = \"none\";\r\n\t\t\t\tcolumn.getElement().setAttribute(\"aria-sort\", \"none\");\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t//set the column header sort direction\r\n\tsetColumnHeader(column, dir){\r\n\t\tcolumn.modules.sort.dir = dir;\r\n\t\tcolumn.getElement().setAttribute(\"aria-sort\", dir);\r\n\t}\r\n\r\n\t//sort each item in sort list\r\n\t_sortItems(data, sortList){\r\n\t\tvar sorterCount = sortList.length - 1;\r\n\r\n\t\tdata.sort((a, b) => {\r\n\t\t\tvar result;\r\n\r\n\t\t\tfor(var i = sorterCount; i>= 0; i--){\r\n\t\t\t\tlet sortItem = sortList[i];\r\n\r\n\t\t\t\tresult = this._sortRow(a, b, sortItem.column, sortItem.dir, sortItem.params);\r\n\r\n\t\t\t\tif(result !== 0){\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn result;\r\n\t\t});\r\n\t}\r\n\r\n\t//process individual rows for a sort function on active data\r\n\t_sortRow(a, b, column, dir, params){\r\n\t\tvar el1Comp, el2Comp, colComp;\r\n\r\n\t\t//switch elements depending on search direction\r\n\t\tvar el1 = dir == \"asc\" ? a : b;\r\n\t\tvar el2 = dir == \"asc\" ? b : a;\r\n\r\n\t\ta = column.getFieldValue(el1.getData());\r\n\t\tb = column.getFieldValue(el2.getData());\r\n\r\n\t\ta = typeof a !== \"undefined\" ? a : \"\";\r\n\t\tb = typeof b !== \"undefined\" ? b : \"\";\r\n\r\n\t\tel1Comp = el1.getComponent();\r\n\t\tel2Comp = el2.getComponent();\r\n\r\n\t\treturn column.modules.sort.sorter.call(this, a, b, el1Comp, el2Comp, column.getComponent(), dir, params);\r\n\t}\r\n}\r\n\r\nSort.moduleName = \"sort\";\r\n\r\n//load defaults\r\nSort.sorters = defaultSorters;\r\n\r\nexport default Sort;","//sort if element contains any data\r\nexport default function(a, b, aRow, bRow, column, dir, params){\r\n\tvar el1 = 0;\r\n\tvar el2 = 0;\r\n\tvar type = params.type || \"length\";\r\n\tvar alignEmptyValues = params.alignEmptyValues;\r\n\tvar emptyAlign = 0;\r\n\r\n\tfunction calc(value){\r\n\r\n\t\tswitch(type){\r\n\t\t\tcase \"length\":\r\n\t\t\treturn value.length;\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"sum\":\r\n\t\t\treturn value.reduce(function(c, d){\r\n\t\t\t\treturn c + d;\r\n\t\t\t});\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"max\":\r\n\t\t\treturn Math.max.apply(null, value) ;\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"min\":\r\n\t\t\treturn Math.min.apply(null, value) ;\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"avg\":\r\n\t\t\treturn value.reduce(function(c, d){\r\n\t\t\t\treturn c + d;\r\n\t\t\t}) / value.length;\r\n\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\t//handle non array values\r\n\tif(!Array.isArray(a)){\r\n\t\talignEmptyValues = !Array.isArray(b) ? 0 : -1;\r\n\t}else if(!Array.isArray(b)){\r\n\t\talignEmptyValues = 1;\r\n\t}else{\r\n\r\n\t\t//compare valid values\r\n\t\tel1 = a ? calc(a) : 0;\r\n\t\tel2 = b ? calc(b) : 0;\r\n\r\n\t\treturn el1 - el2;\r\n\t}\r\n\r\n\t//fix empty values in position\r\n\tif((alignEmptyValues === \"top\" && dir === \"desc\") || (alignEmptyValues === \"bottom\" && dir === \"asc\")){\r\n\t\temptyAlign *= -1;\r\n\t}\r\n\r\n\treturn emptyAlign;\r\n};","//sort if element contains any data\r\nexport default function(a, b, aRow, bRow, column, dir, params){\r\n\tvar el1 = typeof a == \"undefined\" ? 0 : 1;\r\n\tvar el2 = typeof b == \"undefined\" ? 0 : 1;\r\n\r\n\treturn el1 - el2;\r\n};","//sort alpha numeric strings\r\nexport default function(as, bs, aRow, bRow, column, dir, params){\r\n\tvar a, b, a1, b1, i= 0, L, rx = /(\\d+)|(\\D+)/g, rd = /\\d/;\r\n\tvar alignEmptyValues = params.alignEmptyValues;\r\n\tvar emptyAlign = 0;\r\n\r\n\t//handle empty values\r\n\tif(!as && as!== 0){\r\n\t\temptyAlign = !bs && bs!== 0 ? 0 : -1;\r\n\t}else if(!bs && bs!== 0){\r\n\t\temptyAlign = 1;\r\n\t}else{\r\n\r\n\t\tif(isFinite(as) && isFinite(bs)) return as - bs;\r\n\t\ta = String(as).toLowerCase();\r\n\t\tb = String(bs).toLowerCase();\r\n\t\tif(a === b) return 0;\r\n\t\tif(!(rd.test(a) && rd.test(b))) return a > b ? 1 : -1;\r\n\t\ta = a.match(rx);\r\n\t\tb = b.match(rx);\r\n\t\tL = a.length > b.length ? b.length : a.length;\r\n\t\twhile(i < L){\r\n\t\t\ta1= a[i];\r\n\t\t\tb1= b[i++];\r\n\t\t\tif(a1 !== b1){\r\n\t\t\t\tif(isFinite(a1) && isFinite(b1)){\r\n\t\t\t\t\tif(a1.charAt(0) === \"0\") a1 = \".\" + a1;\r\n\t\t\t\t\tif(b1.charAt(0) === \"0\") b1 = \".\" + b1;\r\n\t\t\t\t\treturn a1 - b1;\r\n\t\t\t\t}\r\n\t\t\t\telse return a1 > b1 ? 1 : -1;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn a.length > b.length;\r\n\t}\r\n\r\n\t//fix empty values in position\r\n\tif((alignEmptyValues === \"top\" && dir === \"desc\") || (alignEmptyValues === \"bottom\" && dir === \"asc\")){\r\n\t\temptyAlign *= -1;\r\n\t}\r\n\r\n\treturn emptyAlign;\r\n};","export default {\r\n\t//is integer\r\n\tinteger: function(cell, value, parameters){\r\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\tvalue = Number(value);\r\n\t\treturn typeof value === 'number' && isFinite(value) && Math.floor(value) === value;\r\n\t},\r\n\r\n\t//is float\r\n\tfloat: function(cell, value, parameters){\r\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\tvalue = Number(value);\r\n\t\treturn typeof value === 'number' && isFinite(value) && value % 1 !== 0;\r\n\t},\r\n\r\n\t//must be a number\r\n\tnumeric: function(cell, value, parameters){\r\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn !isNaN(value);\r\n\t},\r\n\r\n\t//must be a string\r\n\tstring: function(cell, value, parameters){\r\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn isNaN(value);\r\n\t},\r\n\r\n\t//maximum value\r\n\tmax: function(cell, value, parameters){\r\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn parseFloat(value) <= parameters;\r\n\t},\r\n\r\n\t//minimum value\r\n\tmin: function(cell, value, parameters){\r\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn parseFloat(value) >= parameters;\r\n\t},\r\n\r\n\t//starts with value\r\n\tstarts: function(cell, value, parameters){\r\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn String(value).toLowerCase().startsWith(String(parameters).toLowerCase());\r\n\t},\r\n\r\n\t//ends with value\r\n\tends: function(cell, value, parameters){\r\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn String(value).toLowerCase().endsWith(String(parameters).toLowerCase());\r\n\t},\r\n\r\n\r\n\t//minimum string length\r\n\tminLength: function(cell, value, parameters){\r\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn String(value).length >= parameters;\r\n\t},\r\n\r\n\t//maximum string length\r\n\tmaxLength: function(cell, value, parameters){\r\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn String(value).length <= parameters;\r\n\t},\r\n\r\n\t//in provided value list\r\n\tin: function(cell, value, parameters){\r\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\tif(typeof parameters == \"string\"){\r\n\t\t\tparameters = parameters.split(\"|\");\r\n\t\t}\r\n\r\n\t\treturn value === \"\" || parameters.indexOf(value) > -1;\r\n\t},\r\n\r\n\t//must match provided regex\r\n\tregex: function(cell, value, parameters){\r\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\tvar reg = new RegExp(parameters);\r\n\r\n\t\treturn reg.test(value);\r\n\t},\r\n\r\n\t//value must be unique in this column\r\n\tunique: function(cell, value, parameters){\r\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\tvar unique = true;\r\n\r\n\t\tvar cellData = cell.getData();\r\n\t\tvar column = cell.getColumn()._getSelf();\r\n\r\n\t\tthis.table.rowManager.rows.forEach(function(row){\r\n\t\t\tvar data = row.getData();\r\n\r\n\t\t\tif(data !== cellData){\r\n\t\t\t\tif(value == column.getFieldValue(data)){\r\n\t\t\t\t\tunique = false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn unique;\r\n\t},\r\n\r\n\t//must have a value\r\n\trequired:function(cell, value, parameters){\r\n\t\treturn value !== \"\" && value !== null && typeof value !== \"undefined\";\r\n\t},\r\n};","import Module from '../../core/Module.js';\r\n\r\nimport defaultValidators from './defaults/validators.js';\r\n\r\nclass Validate extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.invalidCells = [];\r\n\t}\r\n\r\n\t//validate\r\n\tinitializeColumn(column){\r\n\t\tvar self = this,\r\n\t\tconfig = [],\r\n\t\tvalidator;\r\n\r\n\t\tif(column.definition.validator){\r\n\r\n\t\t\tif(Array.isArray(column.definition.validator)){\r\n\t\t\t\tcolumn.definition.validator.forEach(function(item){\r\n\t\t\t\t\tvalidator = self._extractValidator(item);\r\n\r\n\t\t\t\t\tif(validator){\r\n\t\t\t\t\t\tconfig.push(validator);\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t}else{\r\n\t\t\t\tvalidator = this._extractValidator(column.definition.validator);\r\n\r\n\t\t\t\tif(validator){\r\n\t\t\t\t\tconfig.push(validator);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tcolumn.modules.validate = config.length ? config : false;\r\n\t\t}\r\n\t}\r\n\r\n\t_extractValidator(value){\r\n\t\tvar type, params, pos;\r\n\r\n\t\tswitch(typeof value){\r\n\t\t\tcase \"string\":\r\n\t\t\tpos = value.indexOf(':');\r\n\r\n\t\t\tif(pos > -1){\r\n\t\t\t\ttype = value.substring(0,pos);\r\n\t\t\t\tparams = value.substring(pos+1);\r\n\t\t\t}else{\r\n\t\t\t\ttype = value;\r\n\t\t\t}\r\n\r\n\t\t\treturn this._buildValidator(type, params);\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"function\":\r\n\t\t\treturn this._buildValidator(value);\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"object\":\r\n\t\t\treturn this._buildValidator(value.type, value.parameters);\r\n\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\t_buildValidator(type, params){\r\n\r\n\t\tvar func = typeof type == \"function\" ? type : Validate.validators[type];\r\n\r\n\t\tif(!func){\r\n\t\t\tconsole.warn(\"Validator Setup Error - No matching validator found:\", type);\r\n\t\t\treturn false;\r\n\t\t}else{\r\n\t\t\treturn {\r\n\t\t\t\ttype:typeof type == \"function\" ? \"function\" : type,\r\n\t\t\t\tfunc:func,\r\n\t\t\t\tparams:params,\r\n\t\t\t};\r\n\t\t}\r\n\t}\r\n\r\n\tvalidate(validators, cell, value){\r\n\t\tvar self = this,\r\n\t\tvalid = [],\r\n\t\tinvalidIndex = this.invalidCells.indexOf(cell);\r\n\r\n\t\tif(validators){\r\n\t\t\tvalidators.forEach(function(item){\r\n\t\t\t\tif(!item.func.call(self, cell.getComponent(), value, item.params)){\r\n\t\t\t\t\tvalid.push({\r\n\t\t\t\t\t\ttype:item.type,\r\n\t\t\t\t\t\tparameters:item.params\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tvalid = valid.length ? valid : true;\r\n\r\n\t\tif(!cell.modules.validate){\r\n\t\t\tcell.modules.validate = {};\r\n\t\t}\r\n\r\n\t\tif(valid === true){\r\n\t\t\tcell.modules.validate.invalid = false;\r\n\t\t\tcell.getElement().classList.remove(\"tabulator-validation-fail\");\r\n\r\n\t\t\tif(invalidIndex > -1){\r\n\t\t\t\tthis.invalidCells.splice(invalidIndex, 1);\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tcell.modules.validate.invalid = true;\r\n\r\n\t\t\tif(this.table.options.validationMode !== \"manual\"){\r\n\t\t\t\tcell.getElement().classList.add(\"tabulator-validation-fail\");\r\n\t\t\t}\r\n\r\n\t\t\tif(invalidIndex == -1){\r\n\t\t\t\tthis.invalidCells.push(cell);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn valid;\r\n\t}\r\n\r\n\tgetInvalidCells(){\r\n\t\tvar output = [];\r\n\r\n\t\tthis.invalidCells.forEach((cell) => {\r\n\t\t\toutput.push(cell.getComponent());\r\n\t\t});\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tclearValidation(cell){\r\n\t\tvar invalidIndex;\r\n\r\n\t\tif(cell.modules.validate && cell.modules.validate.invalid){\r\n\r\n\t\t\tcell.getElement().classList.remove(\"tabulator-validation-fail\");\r\n\t\t\tcell.modules.validate.invalid = false;\r\n\r\n\t\t\tinvalidIndex = this.invalidCells.indexOf(cell);\r\n\r\n\t\t\tif(invalidIndex > -1){\r\n\t\t\t\tthis.invalidCells.splice(invalidIndex, 1);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n\r\nValidate.moduleName = \"validate\";\r\n\r\n//load defaults\r\nValidate.validators = defaultValidators;\r\n\r\nexport default Validate;","export default {\r\n\theight:false, //height of tabulator\r\n\tminHeight:false, //minimum height of tabulator\r\n\tmaxHeight:false, //maximum height of tabulator\r\n\r\n\tlayout:\"fitData\", ///layout type \"fitColumns\" | \"fitData\"\r\n\tlayoutColumnsOnNewData:false, //update column widths on setData\r\n\r\n\tcolumnMinWidth:40, //minimum global width for a column\r\n\tcolumnMaxWidth:false, //minimum global width for a column\r\n\tcolumnHeaderVertAlign:\"top\", //vertical alignment of column headers\r\n\r\n\tresizableColumns:true, //resizable columns\r\n\tresizableRows:false, //resizable rows\r\n\tautoResize:true, //auto resize table\r\n\r\n\tcolumns:[],//store for colum header info\r\n\tcolumnDefaults:false, //store column default props\r\n\r\n\tcellHozAlign:\"\", //horizontal align columns\r\n\tcellVertAlign:\"\", //vertical align columns\r\n\theaderHozAlign:\"\", //horizontal header alignment\r\n\r\n\tdata:[], //default starting data\r\n\r\n\tautoColumns:false, //build columns from data row structure\r\n\tautoColumnsDefinitions:false,\r\n\r\n\treactiveData:false, //enable data reactivity\r\n\r\n\tnestedFieldSeparator:\".\", //seperatpr for nested data\r\n\r\n\ttooltips: false, //Tool tip value\r\n\ttooltipsHeader: false, //Tool tip for headers\r\n\ttooltipGenerationMode:\"load\", //when to generate tooltips\r\n\r\n\tinitialSort:false, //initial sorting criteria\r\n\tinitialFilter:false, //initial filtering criteria\r\n\tinitialHeaderFilter:false, //initial header filtering criteria\r\n\r\n\tcolumnHeaderSortMulti: true, //multiple or single column sorting\r\n\r\n\tsortOrderReverse:false, //reverse internal sort ordering\r\n\r\n\theaderSort:true, //set default global header sort\r\n\theaderSortTristate:false, //set default tristate header sorting\r\n\theaderSortElement:\"
\", //header sort element\r\n\r\n\tfooterElement:false, //hold footer element\r\n\r\n\tindex:\"id\", //filed for row index\r\n\r\n\ttextDirection:\"auto\",\r\n\r\n\tkeybindings:[], //array for keybindings\r\n\r\n\ttabEndNewRow:false, //create new row when tab to end of table\r\n\r\n\tinvalidOptionWarnings:true, //allow toggling of invalid option warnings\r\n\r\n\tclipboard:false, //enable clipboard\r\n\tclipboardCopyStyled:true, //formatted table data\r\n\tclipboardCopyConfig:false, //clipboard config\r\n\tclipboardCopyFormatter:false, //DEPRICATED - REMOVE in 5.0\r\n\tclipboardCopyRowRange:\"active\", //restrict clipboard to visible rows only\r\n\tclipboardPasteParser:\"table\", //convert pasted clipboard data to rows\r\n\tclipboardPasteAction:\"insert\", //how to insert pasted data into the table\r\n\r\n\tclipboardCopied:function(){}, //data has been copied to the clipboard\r\n\tclipboardPasted:function(){}, //data has been pasted into the table\r\n\tclipboardPasteError:function(){}, //data has not successfully been pasted into the table\r\n\r\n\tdownloadReady:function(data, blob){return blob;}, //function to manipulate download data\r\n\tdownloadComplete:false, //function to manipulate download data\r\n\tdownloadConfig:{},\t//download config\r\n\tdownloadRowRange:\"active\", //restrict download to active rows only\r\n\r\n\tdataTree:false, //enable data tree\r\n\tdataTreeFilter:true, //filter child rows\r\n\tdataTreeSort:true, //sort child rows\r\n\tdataTreeElementColumn:false,\r\n\tdataTreeBranchElement: true, //show data tree branch element\r\n\tdataTreeChildIndent:9, //data tree child indent in px\r\n\tdataTreeChildField:\"_children\", //data tre column field to look for child rows\r\n\tdataTreeCollapseElement:false, //data tree row collapse element\r\n\tdataTreeExpandElement:false, //data tree row expand element\r\n\tdataTreeStartExpanded:false,\r\n\tdataTreeRowExpanded:function(){}, //row has been expanded\r\n\tdataTreeRowCollapsed:function(){}, //row has been collapsed\r\n\tdataTreeChildColumnCalcs:false, //include visible data tree rows in column calculations\r\n\tdataTreeSelectPropagate:false, //seleccting a parent row selects its children\r\n\r\n\tprintAsHtml:false, //enable print as html\r\n\tprintFormatter:false, //printing page formatter\r\n\tprintHeader:false, //page header contents\r\n\tprintFooter:false, //page footer contents\r\n\tprintStyled:true, //enable print as html styling\r\n\tprintRowRange:\"visible\", //restrict print to visible rows only\r\n\tprintConfig:{}, //print config options\r\n\r\n\taddRowPos:\"bottom\", //position to insert blank rows, top|bottom\r\n\r\n\tselectable:\"highlight\", //highlight rows on hover\r\n\tselectableRangeMode: \"drag\", //highlight rows on hover\r\n\tselectableRollingSelection:true, //roll selection once maximum number of selectable rows is reached\r\n\tselectablePersistence:true, // maintain selection when table view is updated\r\n\tselectableCheck:function(data, row){return true;}, //check wheather row is selectable\r\n\r\n\theaderFilterLiveFilterDelay: 300, //delay before updating column after user types in header filter\r\n\theaderFilterPlaceholder: false, //placeholder text to display in header filters\r\n\r\n\theaderVisible:true, //hide header\r\n\r\n\thistory:false, //enable edit history\r\n\r\n\tlocale:false, //current system language\r\n\tlangs:{},\r\n\r\n\tvirtualDom:true, //enable DOM virtualization\r\n virtualDomBuffer:0, // set virtual DOM buffer size\r\n\tvirtualDomHoz:false, //enable horizontal DOM virtualization\r\n\r\n\tpersistence:false,\r\n\tpersistenceID:\"\", //key for persistent storage\r\n\tpersistenceMode:true, //mode for storing persistence information\r\n\tpersistenceReaderFunc:false, //function for handling persistence data reading\r\n\tpersistenceWriterFunc:false, //function for handling persistence data writing\r\n\r\n\r\n\tresponsiveLayout:false, //responsive layout flags\r\n\tresponsiveLayoutCollapseStartOpen:true, //start showing collapsed data\r\n\tresponsiveLayoutCollapseUseFormatters:true, //responsive layout collapse formatter\r\n\tresponsiveLayoutCollapseFormatter:false, //responsive layout collapse formatter\r\n\r\n\tpagination:false, //set pagination type\r\n\tpaginationSize:false, //set number of rows to a page\r\n\tpaginationInitialPage:1, //initail page to show on load\r\n\tpaginationButtonCount: 5, // set count of page button\r\n\tpaginationSizeSelector:false, //add pagination size selector element\r\n\tpaginationElement:false, //element to hold pagination numbers\r\n\tpaginationDataSent:{}, //pagination data sent to the server\r\n\tpaginationDataReceived:{}, //pagination data received from the server\r\n\tpaginationAddRow: \"page\", //add rows on table or page\r\n\r\n\tajaxURL:false, //url for ajax loading\r\n\tajaxURLGenerator:false,\r\n\tajaxParams:{}, //params for ajax loading\r\n\tajaxConfig:\"get\", //ajax request type\r\n\tajaxContentType:\"form\", //ajax request type\r\n\tajaxRequestFunc:false, //promise function\r\n\tajaxLoader:true, //show loader\r\n\tajaxLoaderLoading:false, //loader element\r\n\tajaxLoaderError:false, //loader element\r\n\tajaxFiltering:false,\r\n\tajaxSorting:false,\r\n\tajaxProgressiveLoad:false, //progressive loading\r\n\tajaxProgressiveLoadDelay:0, //delay between requests\r\n\tajaxProgressiveLoadScrollMargin:0, //margin before scroll begins\r\n\r\n\tgroupBy:false, //enable table grouping and set field to group by\r\n\tgroupStartOpen:true, //starting state of group\r\n\tgroupValues:false,\r\n\tgroupUpdateOnCellEdit:false,\r\n\r\n\tgroupHeader:false, //header generation function\r\n\tgroupHeaderPrint:null,\r\n\tgroupHeaderClipboard:null,\r\n\tgroupHeaderHtmlOutput:null,\r\n\tgroupHeaderDownload:null,\r\n\r\n\thtmlOutputConfig:false, //html outypu config\r\n\r\n\tmovableColumns:false, //enable movable columns\r\n\r\n\tmovableRows:false, //enable movable rows\r\n\tmovableRowsConnectedTables:false, //tables for movable rows to be connected to\r\n\tmovableRowsConnectedElements:false, //other elements for movable rows to be connected to\r\n\tmovableRowsSender:false,\r\n\tmovableRowsReceiver:\"insert\",\r\n\tmovableRowsSendingStart:function(){},\r\n\tmovableRowsSent:function(){},\r\n\tmovableRowsSentFailed:function(){},\r\n\tmovableRowsSendingStop:function(){},\r\n\tmovableRowsReceivingStart:function(){},\r\n\tmovableRowsReceived:function(){},\r\n\tmovableRowsReceivedFailed:function(){},\r\n\tmovableRowsReceivingStop:function(){},\r\n\tmovableRowsElementDrop:function(){},\r\n\r\n\tscrollToRowPosition:\"top\",\r\n\tscrollToRowIfVisible:true,\r\n\r\n\tscrollToColumnPosition:\"left\",\r\n\tscrollToColumnIfVisible:true,\r\n\r\n\trowFormatter:false,\r\n\trowFormatterPrint:null,\r\n\trowFormatterClipboard:null,\r\n\trowFormatterHtmlOutput:null,\r\n\r\n\tplaceholder:false,\r\n\r\n\t//table building callbacks\r\n\ttableBuilding:function(){},\r\n\ttableBuilt:function(){},\r\n\r\n\t//render callbacks\r\n\trenderStarted:function(){},\r\n\trenderComplete:function(){},\r\n\r\n\t//row callbacks\r\n\trowClick:false,\r\n\trowDblClick:false,\r\n\trowContext:false,\r\n\trowTap:false,\r\n\trowDblTap:false,\r\n\trowTapHold:false,\r\n\trowMouseEnter:false,\r\n\trowMouseLeave:false,\r\n\trowMouseOver:false,\r\n\trowMouseOut:false,\r\n\trowMouseMove:false,\r\n\trowContextMenu:false,\r\n\trowClickMenu:false,\r\n\trowAdded:function(){},\r\n\trowDeleted:function(){},\r\n\trowMoved:function(){},\r\n\trowUpdated:function(){},\r\n\trowSelectionChanged:function(){},\r\n\trowSelected:function(){},\r\n\trowDeselected:function(){},\r\n\trowResized:function(){},\r\n\r\n\t//cell callbacks\r\n\t//row callbacks\r\n\tcellClick:false,\r\n\tcellDblClick:false,\r\n\tcellContext:false,\r\n\tcellTap:false,\r\n\tcellDblTap:false,\r\n\tcellTapHold:false,\r\n\tcellMouseEnter:false,\r\n\tcellMouseLeave:false,\r\n\tcellMouseOver:false,\r\n\tcellMouseOut:false,\r\n\tcellMouseMove:false,\r\n\tcellEditing:function(){},\r\n\tcellEdited:function(){},\r\n\tcellEditCancelled:function(){},\r\n\r\n\t//column callbacks\r\n\tcolumnMoved:false,\r\n\tcolumnResized:function(){},\r\n\tcolumnTitleChanged:function(){},\r\n\tcolumnVisibilityChanged:function(){},\r\n\r\n\t//HTML iport callbacks\r\n\thtmlImporting:function(){},\r\n\thtmlImported:function(){},\r\n\r\n\t//data callbacks\r\n\tdataLoading:function(){},\r\n\tdataLoaded:function(){},\r\n\tdataChanged:false,\r\n\r\n\t//ajax callbacks\r\n\tajaxRequesting:function(){},\r\n\tajaxResponse:false,\r\n\tajaxError:function(){},\r\n\r\n\t//filtering callbacks\r\n\tdataFiltering:false,\r\n\tdataFiltered:false,\r\n\r\n\t//sorting callbacks\r\n\tdataSorting:function(){},\r\n\tdataSorted:function(){},\r\n\r\n\t//grouping callbacks\r\n\tgroupToggleElement:\"arrow\",\r\n\tgroupClosedShowCalcs:false,\r\n\tdataGrouping:function(){},\r\n\tdataGrouped:false,\r\n\tgroupVisibilityChanged:function(){},\r\n\tgroupClick:false,\r\n\tgroupDblClick:false,\r\n\tgroupContext:false,\r\n\tgroupContextMenu:false,\r\n\tgroupClickMenu:false,\r\n\tgroupTap:false,\r\n\tgroupDblTap:false,\r\n\tgroupTapHold:false,\r\n\r\n\tcolumnCalcs:true,\r\n\r\n\t//pagination callbacks\r\n\tpageLoaded:function(){},\r\n\r\n\t//localization callbacks\r\n\tlocalized:function(){},\r\n\r\n\t//validation callbacks\r\n\tvalidationMode:\"blocking\",\r\n\tvalidationFailed:function(){},\r\n\r\n\t//history callbacks\r\n\thistoryUndo:function(){},\r\n\thistoryRedo:function(){},\r\n\r\n\t//scroll callbacks\r\n\tscrollHorizontal:function(){},\r\n\tscrollVertical:function(){},\r\n};","import Column from './column/Column.js';\r\nimport Helpers from './Helpers.js';\r\n\r\nexport default class ColumnManager {\r\n\r\n\tconstructor (table){\r\n\t\tthis.table = table; //hold parent table\r\n\t\tthis.blockHozScrollEvent = false;\r\n\t\tthis.headersElement = this.createHeadersElement();\r\n\t\tthis.element = this.createHeaderElement(); //containing element\r\n\t\tthis.rowManager = null; //hold row manager object\r\n\t\tthis.columns = []; // column definition object\r\n\t\tthis.columnsByIndex = []; //columns by index\r\n\t\tthis.columnsByField = {}; //columns by field\r\n\t\tthis.scrollLeft = 0;\r\n\r\n\t\tthis.element.insertBefore(this.headersElement, this.element.firstChild);\r\n\t}\r\n\r\n\t////////////// Setup Functions /////////////////\r\n\r\n\tcreateHeadersElement (){\r\n\t\tvar el = document.createElement(\"div\");\r\n\r\n\t\tel.classList.add(\"tabulator-headers\");\r\n\r\n\t\treturn el;\r\n\t}\r\n\r\n\tcreateHeaderElement (){\r\n\t\tvar el = document.createElement(\"div\");\r\n\r\n\t\tel.classList.add(\"tabulator-header\");\r\n\r\n\t\tif(!this.table.options.headerVisible){\r\n\t\t\tel.classList.add(\"tabulator-header-hidden\");\r\n\t\t}\r\n\r\n\t\treturn el;\r\n\t}\r\n\r\n\tinitialize (){\r\n\t\t//scroll body along with header\r\n\t\t// this.element.addEventListener(\"scroll\", (e) => {\r\n\t\t// \tif(!this.blockHozScrollEvent){\r\n\t\t// \t\tthis.table.rowManager.scrollHorizontal(this.element.scrollLeft);\r\n\t\t// \t}\r\n\t\t// });\r\n\t}\r\n\r\n\t//link to row manager\r\n\tsetRowManager(manager){\r\n\t\tthis.rowManager = manager;\r\n\t}\r\n\r\n\t//return containing element\r\n\tgetElement(){\r\n\t\treturn this.element;\r\n\t}\r\n\r\n\t//return header containing element\r\n\tgetHeadersElement(){\r\n\t\treturn this.headersElement;\r\n\t}\r\n\r\n\t//scroll horizontally to match table body\r\n\tscrollHorizontal(left){\r\n\t\tvar hozAdjust = 0,\r\n\t\tscrollWidth = this.element.scrollWidth - this.table.element.clientWidth;\r\n\r\n\t\t// this.tempScrollBlock();\r\n\t\tthis.element.scrollLeft = left;\r\n\r\n\t\t//adjust for vertical scrollbar moving table when present\r\n\t\tif(left > scrollWidth){\r\n\t\t\thozAdjust = left - scrollWidth;\r\n\t\t\tthis.element.style.marginLeft = (-(hozAdjust)) + \"px\";\r\n\t\t}else{\r\n\t\t\tthis.element.style.marginLeft = 0;\r\n\t\t}\r\n\r\n\t\t//keep frozen columns fixed in position\r\n\t\t//this._calcFrozenColumnsPos(hozAdjust + 3);\r\n\r\n\t\tthis.scrollLeft = left;\r\n\r\n\t\tif(this.table.modExists(\"frozenColumns\")){\r\n\t\t\tthis.table.modules.frozenColumns.scrollHorizontal();\r\n\t\t}\r\n\t}\r\n\r\n\t///////////// Column Setup Functions /////////////\r\n\tgenerateColumnsFromRowData(data){\r\n\t\tvar cols = [],\r\n\t\tdefinitions = this.table.options.autoColumnsDefinitions,\r\n\t\trow, sorter;\r\n\r\n\t\tif(data && data.length){\r\n\r\n\t\t\trow = data[0];\r\n\r\n\t\t\tfor(var key in row){\r\n\t\t\t\tlet col = {\r\n\t\t\t\t\tfield:key,\r\n\t\t\t\t\ttitle:key,\r\n\t\t\t\t};\r\n\r\n\t\t\t\tlet value = row[key];\r\n\r\n\t\t\t\tswitch(typeof value){\r\n\t\t\t\t\tcase \"undefined\":\r\n\t\t\t\t\tsorter = \"string\";\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase \"boolean\":\r\n\t\t\t\t\tsorter = \"boolean\";\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase \"object\":\r\n\t\t\t\t\tif(Array.isArray(value)){\r\n\t\t\t\t\t\tsorter = \"array\";\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tsorter = \"string\";\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tdefault:\r\n\t\t\t\t\tif(!isNaN(value) && value !== \"\"){\r\n\t\t\t\t\t\tsorter = \"number\";\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tif(value.match(/((^[0-9]+[a-z]+)|(^[a-z]+[0-9]+))+$/i)){\r\n\t\t\t\t\t\t\tsorter = \"alphanum\";\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\tsorter = \"string\";\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tcol.sorter = sorter;\r\n\r\n\t\t\t\tcols.push(col);\r\n\t\t\t}\r\n\r\n\t\t\tif(definitions){\r\n\r\n\t\t\t\tswitch(typeof definitions){\r\n\t\t\t\t\tcase \"function\":\r\n\t\t\t\t\t\tthis.table.options.columns = definitions.call(this.table, cols);\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase \"object\":\r\n\t\t\t\t\t\tif(Array.isArray(definitions)){\r\n\t\t\t\t\t\t\tcols.forEach((col) => {\r\n\t\t\t\t\t\t\t\tvar match = definitions.find((def) => {\r\n\t\t\t\t\t\t\t\t\treturn def.field === col.field;\r\n\t\t\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\t\t\tif(match){\r\n\t\t\t\t\t\t\t\t\tObject.assign(col, match);\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\tcols.forEach((col) => {\r\n\t\t\t\t\t\t\t\tif(definitions[col.field]){\r\n\t\t\t\t\t\t\t\t\tObject.assign(col, definitions[col.field]);\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tthis.table.options.columns = cols;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tthis.table.options.columns = cols;\r\n\t\t\t}\r\n\r\n\t\t\tthis.setColumns(this.table.options.columns);\r\n\t\t}\r\n\t}\r\n\r\n\tsetColumns(cols, row){\r\n\t\twhile(this.headersElement.firstChild) this.headersElement.removeChild(this.headersElement.firstChild);\r\n\r\n\t\tthis.columns = [];\r\n\t\tthis.columnsByIndex = [];\r\n\t\tthis.columnsByField = {};\r\n\r\n\t\t//reset frozen columns\r\n\t\tif(this.table.modExists(\"frozenColumns\")){\r\n\t\t\tthis.table.modules.frozenColumns.reset();\r\n\t\t}\r\n\r\n\t\tcols.forEach((def, i) => {\r\n\t\t\tthis._addColumn(def);\r\n\t\t});\r\n\r\n\t\tthis._reIndexColumns();\r\n\r\n\t\tif(this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)){\r\n\t\t\tthis.table.modules.responsiveLayout.initialize();\r\n\t\t}\r\n\r\n\t\tif(this.table.options.virtualDomHoz){\r\n\t\t\tthis.table.vdomHoz.reinitialize(false, true);\r\n\t\t}\r\n\r\n\t\tthis.redraw(true);\r\n\t}\r\n\r\n\t_addColumn(definition, before, nextToColumn){\r\n\t\tvar column = new Column(definition, this),\r\n\t\tcolEl = column.getElement(),\r\n\t\tindex = nextToColumn ? this.findColumnIndex(nextToColumn) : nextToColumn;\r\n\r\n\t\tif(nextToColumn && index > -1){\r\n\r\n\t\t\tvar parentIndex = this.columns.indexOf(nextToColumn.getTopColumn());\r\n\t\t\tvar nextEl = nextToColumn.getElement();\r\n\r\n\t\t\tif(before){\r\n\t\t\t\tthis.columns.splice(parentIndex, 0, column);\r\n\t\t\t\tnextEl.parentNode.insertBefore(colEl, nextEl);\r\n\t\t\t}else{\r\n\t\t\t\tthis.columns.splice(parentIndex + 1, 0, column);\r\n\t\t\t\tnextEl.parentNode.insertBefore(colEl, nextEl.nextSibling);\r\n\t\t\t}\r\n\r\n\t\t}else{\r\n\t\t\tif(before){\r\n\t\t\t\tthis.columns.unshift(column);\r\n\t\t\t\tthis.headersElement.insertBefore(column.getElement(), this.headersElement.firstChild);\r\n\t\t\t}else{\r\n\t\t\t\tthis.columns.push(column);\r\n\t\t\t\tthis.headersElement.appendChild(column.getElement());\r\n\t\t\t}\r\n\r\n\t\t\tcolumn.columnRendered();\r\n\t\t}\r\n\r\n\t\treturn column;\r\n\t}\r\n\r\n\tregisterColumnField(col){\r\n\t\tif(col.definition.field){\r\n\t\t\tthis.columnsByField[col.definition.field] = col;\r\n\t\t}\r\n\t}\r\n\r\n\tregisterColumnPosition(col){\r\n\t\tthis.columnsByIndex.push(col);\r\n\t}\r\n\r\n\t_reIndexColumns(){\r\n\t\tthis.columnsByIndex = [];\r\n\r\n\t\tthis.columns.forEach(function(column){\r\n\t\t\tcolumn.reRegisterPosition();\r\n\t\t});\r\n\t}\r\n\r\n\t//ensure column headers take up the correct amount of space in column groups\r\n\t_verticalAlignHeaders(){\r\n\t\tvar minHeight = 0;\r\n\r\n\t\tthis.columns.forEach((column) => {\r\n\t\t\tvar height;\r\n\r\n\t\t\tcolumn.clearVerticalAlign();\r\n\r\n\t\t\theight = column.getHeight();\r\n\r\n\t\t\tif(height > minHeight){\r\n\t\t\t\tminHeight = height;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tthis.columns.forEach((column) => {\r\n\t\t\tcolumn.verticalAlign(this.table.options.columnHeaderVertAlign, minHeight);\r\n\t\t});\r\n\r\n\t\tthis.rowManager.adjustTableSize();\r\n\t}\r\n\r\n\t//////////////// Column Details /////////////////\r\n\tfindColumn(subject){\r\n\t\tif(typeof subject == \"object\"){\r\n\r\n\t\t\tif(subject instanceof Column){\r\n\t\t\t\t//subject is column element\r\n\t\t\t\treturn subject;\r\n\t\t\t}else if(subject instanceof ColumnComponent){\r\n\t\t\t\t//subject is public column component\r\n\t\t\t\treturn subject._getSelf() || false;\r\n\t\t\t}else if(typeof HTMLElement !== \"undefined\" && subject instanceof HTMLElement){\r\n\t\t\t\t//subject is a HTML element of the column header\r\n\t\t\t\tlet match = this.columns.find((column) => {\r\n\t\t\t\t\treturn column.element === subject;\r\n\t\t\t\t});\r\n\r\n\t\t\t\treturn match || false;\r\n\t\t\t}\r\n\r\n\t\t}else{\r\n\t\t\t//subject should be treated as the field name of the column\r\n\t\t\treturn this.columnsByField[subject] || false;\r\n\t\t}\r\n\r\n\t\t//catch all for any other type of input\r\n\t\treturn false;\r\n\t}\r\n\r\n\tgetColumnByField(field){\r\n\t\treturn this.columnsByField[field];\r\n\t}\r\n\r\n\tgetColumnsByFieldRoot(root){\r\n\t\tvar matches = [];\r\n\r\n\t\tObject.keys(this.columnsByField).forEach((field) => {\r\n\t\t\tvar fieldRoot = field.split(\".\")[0];\r\n\t\t\tif(fieldRoot === root){\r\n\t\t\t\tmatches.push(this.columnsByField[field]);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn matches;\r\n\t}\r\n\r\n\tgetColumnByIndex(index){\r\n\t\treturn this.columnsByIndex[index];\r\n\t}\r\n\r\n\tgetFirstVisibileColumn(index){\r\n\t\tvar index = this.columnsByIndex.findIndex((col) => {\r\n\t\t\treturn col.visible;\r\n\t\t});\r\n\r\n\t\treturn index > -1 ? this.columnsByIndex[index] : false;\r\n\t}\r\n\r\n\tgetColumns(){\r\n\t\treturn this.columns;\r\n\t}\r\n\r\n\tfindColumnIndex(column){\r\n\t\treturn this.columnsByIndex.findIndex((col) => {\r\n\t\t\treturn column === col;\r\n\t\t});\r\n\t}\r\n\r\n\t//return all columns that are not groups\r\n\tgetRealColumns(){\r\n\t\treturn this.columnsByIndex;\r\n\t}\r\n\r\n\t//travers across columns and call action\r\n\ttraverse(callback){\r\n\t\tthis.columnsByIndex.forEach((column,i) =>{\r\n\t\t\tcallback(column, i);\r\n\t\t});\r\n\t}\r\n\r\n\t//get defintions of actual columns\r\n\tgetDefinitions(active){\r\n\t\tvar output = [];\r\n\r\n\t\tthis.columnsByIndex.forEach((column) => {\r\n\t\t\tif(!active || (active && column.visible)){\r\n\t\t\t\toutput.push(column.getDefinition());\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\t//get full nested definition tree\r\n\tgetDefinitionTree(){\r\n\t\tvar output = [];\r\n\r\n\t\tthis.columns.forEach((column) => {\r\n\t\t\toutput.push(column.getDefinition(true));\r\n\t\t});\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tgetComponents(structured){\r\n\t\tvar output = [],\r\n\t\tcolumns = structured ? this.columns : this.columnsByIndex;\r\n\r\n\t\tcolumns.forEach((column) => {\r\n\t\t\toutput.push(column.getComponent());\r\n\t\t});\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tgetWidth(){\r\n\t\tvar width = 0;\r\n\r\n\t\tthis.columnsByIndex.forEach((column) => {\r\n\t\t\tif(column.visible){\r\n\t\t\t\twidth += column.getWidth();\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn width;\r\n\t}\r\n\r\n\tmoveColumn(from, to, after){\r\n\t\tthis.moveColumnActual(from, to, after);\r\n\r\n\t\tif(this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)){\r\n\t\t\tthis.table.modules.responsiveLayout.initialize();\r\n\t\t}\r\n\r\n\t\tif(this.table.modExists(\"columnCalcs\")){\r\n\t\t\tthis.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows);\r\n\t\t}\r\n\r\n\t\tto.element.parentNode.insertBefore(from.element, to.element);\r\n\r\n\t\tif(after){\r\n\t\t\tto.element.parentNode.insertBefore(to.element, from.element);\r\n\t\t}\r\n\r\n\t\tthis._verticalAlignHeaders();\r\n\r\n\t\tthis.table.rowManager.reinitialize();\r\n\t}\r\n\r\n\tmoveColumnActual(from, to, after){\r\n\r\n\t\tif(from.parent.isGroup){\r\n\t\t\tthis._moveColumnInArray(from.parent.columns, from, to, after);\r\n\t\t}else{\r\n\t\t\tthis._moveColumnInArray(this.columns, from, to, after);\r\n\t\t}\r\n\r\n\t\tthis._moveColumnInArray(this.columnsByIndex, from, to, after, true);\r\n\r\n\t\tif(this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)){\r\n\t\t\tthis.table.modules.responsiveLayout.initialize();\r\n\t\t}\r\n\r\n\t\tif(this.table.options.virtualDomHoz){\r\n\t\t\tthis.table.vdomHoz.reinitialize(true);\r\n\t\t}\r\n\r\n\t\tif(this.table.options.columnMoved){\r\n\t\t\tthis.table.options.columnMoved.call(this.table, from.getComponent(), this.table.columnManager.getComponents());\r\n\t\t}\r\n\r\n\t\tif(this.table.options.persistence && this.table.modExists(\"persistence\", true) && this.table.modules.persistence.config.columns){\r\n\t\t\tthis.table.modules.persistence.save(\"columns\");\r\n\t\t}\r\n\t}\r\n\r\n\t_moveColumnInArray(columns, from, to, after, updateRows){\r\n\t\tvar\tfromIndex = columns.indexOf(from),\r\n\t\ttoIndex, rows = [];\r\n\r\n\t\tif (fromIndex > -1) {\r\n\r\n\t\t\tcolumns.splice(fromIndex, 1);\r\n\r\n\t\t\ttoIndex = columns.indexOf(to);\r\n\r\n\t\t\tif (toIndex > -1) {\r\n\r\n\t\t\t\tif(after){\r\n\t\t\t\t\ttoIndex = toIndex+1;\r\n\t\t\t\t}\r\n\r\n\t\t\t}else{\r\n\t\t\t\ttoIndex = fromIndex;\r\n\t\t\t}\r\n\r\n\t\t\tcolumns.splice(toIndex, 0, from);\r\n\r\n\t\t\tif(updateRows){\r\n\r\n\t\t\t\tif(this.table.options.dataTree && this.table.modExists(\"dataTree\", true)){\r\n\t\t\t\t\tthis.table.rowManager.rows.forEach((row) => {\r\n\t\t\t\t\t\trows = rows.concat(this.table.modules.dataTree.getTreeChildren(row, false, true));\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\r\n\t\t\t\trows = rows.concat(this.table.rowManager.rows);\r\n\r\n\t\t\t\trows.forEach(function(row){\r\n\t\t\t\t\tif(row.cells.length){\r\n\t\t\t\t\t\tvar cell = row.cells.splice(fromIndex, 1)[0];\r\n\t\t\t\t\t\trow.cells.splice(toIndex, 0, cell);\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tscrollToColumn(column, position, ifVisible){\r\n\t\tvar left = 0,\r\n\t\toffset = 0,\r\n\t\tadjust = 0,\r\n\t\tcolEl = column.getElement();\r\n\r\n\t\treturn new Promise((resolve, reject) => {\r\n\r\n\t\t\tif(typeof position === \"undefined\"){\r\n\t\t\t\tposition = this.table.options.scrollToColumnPosition;\r\n\t\t\t}\r\n\r\n\t\t\tif(typeof ifVisible === \"undefined\"){\r\n\t\t\t\tifVisible = this.table.options.scrollToColumnIfVisible;\r\n\t\t\t}\r\n\r\n\t\t\tif(column.visible){\r\n\r\n\t\t\t\t//align to correct position\r\n\t\t\t\tswitch(position){\r\n\t\t\t\t\tcase \"middle\":\r\n\t\t\t\t\tcase \"center\":\r\n\t\t\t\t\tadjust = -this.element.clientWidth / 2;\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase \"right\":\r\n\t\t\t\t\tadjust = colEl.clientWidth - this.headersElement.clientWidth;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//check column visibility\r\n\t\t\t\tif(!ifVisible){\r\n\r\n\t\t\t\t\toffset = colEl.offsetLeft;\r\n\r\n\t\t\t\t\tif(offset > 0 && offset + colEl.offsetWidth < this.element.clientWidth){\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//calculate scroll position\r\n\t\t\t\tleft = colEl.offsetLeft + adjust;\r\n\r\n\t\t\t\tleft = Math.max(Math.min(left, this.table.rowManager.element.scrollWidth - this.table.rowManager.element.clientWidth),0);\r\n\r\n\t\t\t\tthis.table.rowManager.scrollHorizontal(left);\r\n\t\t\t\tthis.scrollHorizontal(left);\r\n\r\n\t\t\t\tresolve();\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Scroll Error - Column not visible\");\r\n\t\t\t\treject(\"Scroll Error - Column not visible\");\r\n\t\t\t}\r\n\r\n\t\t});\r\n\t}\r\n\r\n\t//////////////// Cell Management /////////////////\r\n\tgenerateCells(row){\r\n\t\tvar cells = [];\r\n\r\n\t\tthis.columnsByIndex.forEach((column) => {\r\n\t\t\tcells.push(column.generateCell(row));\r\n\t\t});\r\n\r\n\t\treturn cells;\r\n\t}\r\n\r\n\t//////////////// Column Management /////////////////\r\n\tgetFlexBaseWidth(){\r\n\t\tvar totalWidth = this.table.element.clientWidth, //table element width\r\n\t\tfixedWidth = 0;\r\n\r\n\t\t//adjust for vertical scrollbar if present\r\n\t\tif(this.rowManager.element.scrollHeight > this.rowManager.element.clientHeight){\r\n\t\t\ttotalWidth -= this.rowManager.element.offsetWidth - this.rowManager.element.clientWidth;\r\n\t\t}\r\n\r\n\t\tthis.columnsByIndex.forEach(function(column){\r\n\t\t\tvar width, minWidth, colWidth;\r\n\r\n\t\t\tif(column.visible){\r\n\r\n\t\t\t\twidth = column.definition.width || 0;\r\n\r\n\t\t\t\tminWidth = typeof column.minWidth == \"undefined\" ? this.table.options.columnMinWidth : parseInt(column.minWidth);\r\n\r\n\t\t\t\tif(typeof(width) == \"string\"){\r\n\t\t\t\t\tif(width.indexOf(\"%\") > -1){\r\n\t\t\t\t\t\tcolWidth = (totalWidth / 100) * parseInt(width) ;\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tcolWidth = parseInt(width);\r\n\t\t\t\t\t}\r\n\t\t\t\t}else{\r\n\t\t\t\t\tcolWidth = width;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tfixedWidth += colWidth > minWidth ? colWidth : minWidth;\r\n\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn fixedWidth;\r\n\t}\r\n\r\n\taddColumn(definition, before, nextToColumn){\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tvar column = this._addColumn(definition, before, nextToColumn);\r\n\r\n\t\t\tthis._reIndexColumns();\r\n\r\n\t\t\tif(this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)){\r\n\t\t\t\tthis.table.modules.responsiveLayout.initialize();\r\n\t\t\t}\r\n\r\n\t\t\tif(this.table.modExists(\"columnCalcs\")){\r\n\t\t\t\tthis.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows);\r\n\t\t\t}\r\n\r\n\t\t\tthis.redraw(true);\r\n\r\n\t\t\tif(this.table.modules.layout.getMode() != \"fitColumns\"){\r\n\t\t\t\tcolumn.reinitializeWidth();\r\n\t\t\t}\r\n\r\n\t\t\tthis._verticalAlignHeaders();\r\n\r\n\t\t\tthis.table.rowManager.reinitialize();\r\n\r\n\t\t\tif(this.table.options.virtualDomHoz){\r\n\t\t\t\tthis.table.vdomHoz.reinitialize();\r\n\t\t\t}\r\n\r\n\t\t\tresolve(column);\r\n\t\t});\r\n\t}\r\n\r\n\t//remove column from system\r\n\tderegisterColumn(column){\r\n\t\tvar field = column.getField(),\r\n\t\tindex;\r\n\r\n\t\t//remove from field list\r\n\t\tif(field){\r\n\t\t\tdelete this.columnsByField[field];\r\n\t\t}\r\n\r\n\t\t//remove from index list\r\n\t\tindex = this.columnsByIndex.indexOf(column);\r\n\r\n\t\tif(index > -1){\r\n\t\t\tthis.columnsByIndex.splice(index, 1);\r\n\t\t}\r\n\r\n\t\t//remove from column list\r\n\t\tindex = this.columns.indexOf(column);\r\n\r\n\t\tif(index > -1){\r\n\t\t\tthis.columns.splice(index, 1);\r\n\t\t}\r\n\r\n\t\tif(this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)){\r\n\t\t\tthis.table.modules.responsiveLayout.initialize();\r\n\t\t}\r\n\r\n\t\tthis._verticalAlignHeaders();\r\n\r\n\t\tthis.redraw();\r\n\t}\r\n\r\n\t//redraw columns\r\n\tredraw(force){\r\n\t\tif(force){\r\n\t\t\tif(Helpers.elVisible(this.element)){\r\n\t\t\t\tthis._verticalAlignHeaders();\r\n\t\t\t}\r\n\r\n\t\t\tthis.table.rowManager.resetScroll();\r\n\t\t\tthis.table.rowManager.reinitialize();\r\n\t\t}\r\n\r\n\t\tif([\"fitColumns\", \"fitDataStretch\"].indexOf(this.table.modules.layout.getMode()) > -1){\r\n\t\t\tthis.table.modules.layout.layout();\r\n\t\t}else{\r\n\t\t\tif(force){\r\n\t\t\t\tthis.table.modules.layout.layout();\r\n\t\t\t}else{\r\n\t\t\t\tif(this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)){\r\n\t\t\t\t\tthis.table.modules.responsiveLayout.update();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(this.table.modExists(\"frozenColumns\")){\r\n\t\t\tthis.table.modules.frozenColumns.layout();\r\n\t\t}\r\n\r\n\t\tif(this.table.modExists(\"columnCalcs\")){\r\n\t\t\tthis.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows);\r\n\t\t}\r\n\r\n\t\tif(force){\r\n\t\t\tif(this.table.options.persistence && this.table.modExists(\"persistence\", true) && this.table.modules.persistence.config.columns){\r\n\t\t\t\tthis.table.modules.persistence.save(\"columns\");\r\n\t\t\t}\r\n\r\n\t\t\tif(this.table.modExists(\"columnCalcs\")){\r\n\t\t\t\tthis.table.modules.columnCalcs.redraw();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.table.footerManager.redraw();\r\n\t}\r\n}","import Row from './row/Row.js';\r\nimport Helpers from './Helpers.js';\r\n\r\nexport default class RowManager {\r\n\r\n\tconstructor(table){\r\n\t\tthis.table = table;\r\n\t\tthis.element = this.createHolderElement(); //containing element\r\n\t\tthis.tableElement = this.createTableElement(); //table element\r\n\t\tthis.heightFixer = this.createTableElement(); //table element\r\n\t\tthis.columnManager = null; //hold column manager object\r\n\t\tthis.height = 0; //hold height of table element\r\n\r\n\t\tthis.firstRender = false; //handle first render\r\n\t\tthis.renderMode = \"virtual\"; //current rendering mode\r\n\t\tthis.fixedHeight = false; //current rendering mode\r\n\r\n\t\tthis.rows = []; //hold row data objects\r\n\t\tthis.activeRows = []; //rows currently available to on display in the table\r\n\t\tthis.activeRowsCount = 0; //count of active rows\r\n\r\n\t\tthis.displayRows = []; //rows currently on display in the table\r\n\t\tthis.displayRowsCount = 0; //count of display rows\r\n\r\n\t\tthis.scrollTop = 0;\r\n\t\tthis.scrollLeft = 0;\r\n\r\n\t\tthis.vDomRowHeight = 20; //approximation of row heights for padding\r\n\r\n\t\tthis.vDomTop = 0; //hold position for first rendered row in the virtual DOM\r\n\t\tthis.vDomBottom = 0; //hold possition for last rendered row in the virtual DOM\r\n\r\n\t\tthis.vDomScrollPosTop = 0; //last scroll position of the vDom top;\r\n\t\tthis.vDomScrollPosBottom = 0; //last scroll position of the vDom bottom;\r\n\r\n\t\tthis.vDomTopPad = 0; //hold value of padding for top of virtual DOM\r\n\t\tthis.vDomBottomPad = 0; //hold value of padding for bottom of virtual DOM\r\n\r\n\t\tthis.vDomMaxRenderChain = 90; //the maximum number of dom elements that can be rendered in 1 go\r\n\r\n\t\tthis.vDomWindowBuffer = 0; //window row buffer before removing elements, to smooth scrolling\r\n\r\n\t\tthis.vDomWindowMinTotalRows = 20; //minimum number of rows to be generated in virtual dom (prevent buffering issues on tables with tall rows)\r\n\t\tthis.vDomWindowMinMarginRows = 5; //minimum number of rows to be generated in virtual dom margin\r\n\r\n\t\tthis.vDomTopNewRows = []; //rows to normalize after appending to optimize render speed\r\n\t\tthis.vDomBottomNewRows = []; //rows to normalize after appending to optimize render speed\r\n\r\n\t\tthis.rowNumColumn = false; //hold column component for row number column\r\n\r\n\t\tthis.redrawBlock = false; //prevent redraws to allow multiple data manipulations becore continuing\r\n\t\tthis.redrawBlockRestoreConfig = false; //store latest redraw function calls for when redraw is needed\r\n\t\tthis.redrawBlockRederInPosition = false; //store latest redraw function calls for when redraw is needed\r\n\t}\r\n\r\n\t//////////////// Setup Functions /////////////////\r\n\r\n\tcreateHolderElement (){\r\n\t\tvar el = document.createElement(\"div\");\r\n\r\n\t\tel.classList.add(\"tabulator-tableHolder\");\r\n\t\tel.setAttribute(\"tabindex\", 0);\r\n\r\n\t\treturn el;\r\n\t}\r\n\r\n\tcreateTableElement (){\r\n\t\tvar el = document.createElement(\"div\");\r\n\r\n\t\tel.classList.add(\"tabulator-table\");\r\n\r\n\t\treturn el;\r\n\t}\r\n\r\n\t//return containing element\r\n\tgetElement(){\r\n\t\treturn this.element;\r\n\t}\r\n\r\n\t//return table element\r\n\tgetTableElement(){\r\n\t\treturn this.tableElement;\r\n\t}\r\n\r\n\t//return position of row in table\r\n\tgetRowPosition(row, active){\r\n\t\tif(active){\r\n\t\t\treturn this.activeRows.indexOf(row);\r\n\t\t}else{\r\n\t\t\treturn this.rows.indexOf(row);\r\n\t\t}\r\n\t}\r\n\r\n\t//link to column manager\r\n\tsetColumnManager(manager){\r\n\t\tthis.columnManager = manager;\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tthis.setRenderMode();\r\n\r\n\t\t//initialize manager\r\n\t\tthis.element.appendChild(this.tableElement);\r\n\r\n\t\tthis.firstRender = true;\r\n\r\n\t\t//scroll header along with table body\r\n\t\tthis.element.addEventListener(\"scroll\", () => {\r\n\t\t\tvar left = this.element.scrollLeft;\r\n\r\n\t\t\t//handle horizontal scrolling\r\n\t\t\tif(this.scrollLeft != left){\r\n\t\t\t\tthis.columnManager.scrollHorizontal(left);\r\n\r\n\t\t\t\tif(this.table.options.groupBy){\r\n\t\t\t\t\tthis.table.modules.groupRows.scrollHeaders(left);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(this.table.modExists(\"columnCalcs\")){\r\n\t\t\t\t\tthis.table.modules.columnCalcs.scrollHorizontal(left);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.table.options.scrollHorizontal(left);\r\n\t\t\t}\r\n\r\n\t\t\tthis.scrollLeft = left;\r\n\t\t});\r\n\r\n\t\t//handle virtual dom scrolling\r\n\t\tif(this.renderMode === \"virtual\"){\r\n\t\t\tthis.element.addEventListener(\"scroll\", () => {\r\n\t\t\t\tvar top = this.element.scrollTop;\r\n\t\t\t\tvar dir = this.scrollTop > top;\r\n\r\n\t\t\t\t//handle verical scrolling\r\n\t\t\t\tif(this.scrollTop != top){\r\n\t\t\t\t\tthis.scrollTop = top;\r\n\t\t\t\t\tthis.scrollVertical(dir);\r\n\r\n\t\t\t\t\tif(this.table.options.ajaxProgressiveLoad == \"scroll\"){\r\n\t\t\t\t\t\tthis.table.modules.ajax.nextPage(this.element.scrollHeight - this.element.clientHeight - top);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tthis.table.options.scrollVertical(top);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tthis.scrollTop = top;\r\n\t\t\t\t}\r\n\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\t////////////////// Row Manipulation //////////////////\r\n\tfindRow(subject){\r\n\t\tif(typeof subject == \"object\"){\r\n\t\t\tif(subject instanceof Row){\r\n\t\t\t\t//subject is row element\r\n\t\t\t\treturn subject;\r\n\t\t\t}else if(subject instanceof RowComponent){\r\n\t\t\t\t//subject is public row component\r\n\t\t\t\treturn subject._getSelf() || false;\r\n\t\t\t}else if(typeof HTMLElement !== \"undefined\" && subject instanceof HTMLElement){\r\n\t\t\t\t//subject is a HTML element of the row\r\n\t\t\t\tlet match = this.rows.find((row) => {\r\n\t\t\t\t\treturn row.getElement() === subject;\r\n\t\t\t\t});\r\n\r\n\t\t\t\treturn match || false;\r\n\t\t\t}\r\n\t\t}else if(typeof subject == \"undefined\" || subject === null){\r\n\t\t\treturn false;\r\n\t\t}else{\r\n\t\t\t//subject should be treated as the index of the row\r\n\t\t\tlet match = this.rows.find((row) => {\r\n\t\t\t\treturn row.data[this.table.options.index] == subject;\r\n\t\t\t});\r\n\r\n\t\t\treturn match || false;\r\n\t\t}\r\n\r\n\t\t//catch all for any other type of input\r\n\t\treturn false;\r\n\t}\r\n\r\n\tgetRowFromDataObject(data){\r\n\t\tvar match = this.rows.find((row) => {\r\n\t\t\treturn row.data === data;\r\n\t\t});\r\n\r\n\t\treturn match || false;\r\n\t}\r\n\r\n\tgetRowFromPosition(position, active){\r\n\t\tif(active){\r\n\t\t\treturn this.activeRows[position];\r\n\t\t}else{\r\n\t\t\treturn this.rows[position];\r\n\t\t}\r\n\t}\r\n\r\n\tscrollToRow(row, position, ifVisible){\r\n\t\tvar rowIndex = this.getDisplayRows().indexOf(row),\r\n\t\trowEl = row.getElement(),\r\n\t\trowTop,\r\n\t\toffset = 0;\r\n\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tif(rowIndex > -1){\r\n\r\n\t\t\t\tif(typeof position === \"undefined\"){\r\n\t\t\t\t\tposition = this.table.options.scrollToRowPosition;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(typeof ifVisible === \"undefined\"){\r\n\t\t\t\t\tifVisible = this.table.options.scrollToRowIfVisible;\r\n\t\t\t\t}\r\n\r\n\r\n\t\t\t\tif(position === \"nearest\"){\r\n\t\t\t\t\tswitch(this.renderMode){\r\n\t\t\t\t\t\tcase\"classic\":\r\n\t\t\t\t\t\trowTop = Helpers.elOffset(rowEl).top;\r\n\t\t\t\t\t\tposition = Math.abs(this.element.scrollTop - rowTop) > Math.abs(this.element.scrollTop + this.element.clientHeight - rowTop) ? \"bottom\" : \"top\";\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase\"virtual\":\r\n\t\t\t\t\t\tposition = Math.abs(this.vDomTop - rowIndex) > Math.abs(this.vDomBottom - rowIndex) ? \"bottom\" : \"top\";\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//check row visibility\r\n\t\t\t\tif(!ifVisible){\r\n\t\t\t\t\tif(Helpers.elVisible(rowEl)){\r\n\t\t\t\t\t\toffset = Helpers.elOffset(rowEl).top - Helpers.elOffset(this.element).top;\r\n\r\n\t\t\t\t\t\tif(offset > 0 && offset < this.element.clientHeight - rowEl.offsetHeight){\r\n\t\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//scroll to row\r\n\t\t\t\tswitch(this.renderMode){\r\n\t\t\t\t\tcase\"classic\":\r\n\t\t\t\t\tthis.element.scrollTop = Helpers.elOffset(rowEl).top - Helpers.elOffset(this.element).top + this.element.scrollTop;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase\"virtual\":\r\n\t\t\t\t\tthis._virtualRenderFill(rowIndex, true);\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//align to correct position\r\n\t\t\t\tswitch(position){\r\n\t\t\t\t\tcase \"middle\":\r\n\t\t\t\t\tcase \"center\":\r\n\r\n\t\t\t\t\tif(this.element.scrollHeight - this.element.scrollTop == this.element.clientHeight){\r\n\t\t\t\t\t\tthis.element.scrollTop = this.element.scrollTop + (rowEl.offsetTop - this.element.scrollTop) - ((this.element.scrollHeight - rowEl.offsetTop) / 2);\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tthis.element.scrollTop = this.element.scrollTop - (this.element.clientHeight / 2);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase \"bottom\":\r\n\r\n\t\t\t\t\tif(this.element.scrollHeight - this.element.scrollTop == this.element.clientHeight){\r\n\t\t\t\t\t\tthis.element.scrollTop = this.element.scrollTop - (this.element.scrollHeight - rowEl.offsetTop) + rowEl.offsetHeight;\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tthis.element.scrollTop = this.element.scrollTop - this.element.clientHeight + rowEl.offsetHeight;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tresolve();\r\n\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Scroll Error - Row not visible\");\r\n\t\t\t\treject(\"Scroll Error - Row not visible\");\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t////////////////// Data Handling //////////////////\r\n\tsetData(data, renderInPosition, columnsChanged){\r\n\t\treturn new Promise((resolve, reject)=>{\r\n\t\t\tif(renderInPosition && this.getDisplayRows().length){\r\n\t\t\t\tif(this.table.options.pagination){\r\n\t\t\t\t\tthis._setDataActual(data, true);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tthis.reRenderInPosition(() => {\r\n\t\t\t\t\t\tthis._setDataActual(data);\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tif(this.table.options.autoColumns && columnsChanged){\r\n\t\t\t\t\tthis.table.columnManager.generateColumnsFromRowData(data);\r\n\t\t\t\t}\r\n\t\t\t\tthis.resetScroll();\r\n\r\n\t\t\t\tthis._setDataActual(data);\r\n\r\n\t\t\t}\r\n\r\n\t\t\tresolve();\r\n\t\t});\r\n\t}\r\n\r\n\t_setDataActual(data, renderInPosition){\r\n\t\tthis.table.options.dataLoading.call(this.table, data);\r\n\r\n\t\tthis._wipeElements();\r\n\r\n\t\tif(this.table.options.history && this.table.modExists(\"history\")){\r\n\t\t\tthis.table.modules.history.clear();\r\n\t\t}\r\n\r\n\t\tif(Array.isArray(data)){\r\n\r\n\t\t\tif(this.table.modExists(\"selectRow\")){\r\n\t\t\t\tthis.table.modules.selectRow.clearSelectionData();\r\n\t\t\t}\r\n\r\n\t\t\tif(this.table.options.reactiveData && this.table.modExists(\"reactiveData\", true)){\r\n\t\t\t\tthis.table.modules.reactiveData.watchData(data);\r\n\t\t\t}\r\n\r\n\t\t\tdata.forEach((def, i) => {\r\n\t\t\t\tif(def && typeof def === \"object\"){\r\n\t\t\t\t\tvar row = new Row(def, this);\r\n\t\t\t\t\tthis.rows.push(row);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.warn(\"Data Loading Warning - Invalid row data detected and ignored, expecting object but received:\", def);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tthis.refreshActiveData(false, false, renderInPosition);\r\n\r\n\t\t\tthis.table.options.dataLoaded.call(this.table, data);\r\n\t\t}else{\r\n\t\t\tconsole.error(\"Data Loading Error - Unable to process data due to invalid data type \\nExpecting: array \\nReceived: \", typeof data, \"\\nData: \", data);\r\n\t\t}\r\n\t}\r\n\r\n\t_wipeElements(){\r\n\t\tthis.rows.forEach((row) => {\r\n\t\t\trow.wipe();\r\n\t\t});\r\n\r\n\t\tif(this.table.options.groupBy && this.table.modExists(\"groupRows\")){\r\n\t\t\tthis.table.modules.groupRows.wipe();\r\n\t\t}\r\n\r\n\t\tthis.rows = [];\r\n\t\tthis.activeRows = [];\r\n\t\tthis.activeRowsCount = 0;\r\n\t\tthis.displayRows = [];\r\n\t\tthis.displayRowsCount = 0;\r\n\r\n\t\tthis.adjustTableSize();\r\n\t}\r\n\r\n\tdeleteRow(row, blockRedraw){\r\n\t\tvar allIndex = this.rows.indexOf(row),\r\n\t\tactiveIndex = this.activeRows.indexOf(row);\r\n\r\n\t\tif(activeIndex > -1){\r\n\t\t\tthis.activeRows.splice(activeIndex, 1);\r\n\t\t}\r\n\r\n\t\tif(allIndex > -1){\r\n\t\t\tthis.rows.splice(allIndex, 1);\r\n\t\t}\r\n\r\n\t\tthis.setActiveRows(this.activeRows);\r\n\r\n\t\tthis.displayRowIterator((rows) => {\r\n\t\t\tvar displayIndex = rows.indexOf(row);\r\n\r\n\t\t\tif(displayIndex > -1){\r\n\t\t\t\trows.splice(displayIndex, 1);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tif(!blockRedraw){\r\n\t\t\tthis.reRenderInPosition();\r\n\t\t}\r\n\r\n\t\tthis.regenerateRowNumbers();\r\n\r\n\t\tthis.table.options.rowDeleted.call(this.table, row.getComponent());\r\n\r\n\t\tif(this.table.options.dataChanged){\r\n\t\t\tthis.table.options.dataChanged.call(this.table, this.getData());\r\n\t\t}\r\n\r\n\t\tif(this.table.options.groupBy && this.table.modExists(\"groupRows\")){\r\n\t\t\tthis.table.modules.groupRows.updateGroupRows(true);\r\n\t\t}else if(this.table.options.pagination && this.table.modExists(\"page\")){\r\n\t\t\tthis.refreshActiveData(false, false, true);\r\n\t\t}else{\r\n\t\t\tif(this.table.options.pagination && this.table.modExists(\"page\")){\r\n\t\t\t\tthis.refreshActiveData(\"page\");\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\taddRow(data, pos, index, blockRedraw){\r\n\t\tvar row = this.addRowActual(data, pos, index, blockRedraw);\r\n\r\n\t\tif(this.table.options.history && this.table.modExists(\"history\")){\r\n\t\t\tthis.table.modules.history.action(\"rowAdd\", row, {data:data, pos:pos, index:index});\r\n\t\t}\r\n\r\n\t\treturn row;\r\n\t}\r\n\r\n\t//add multiple rows\r\n\taddRows(data, pos, index){\r\n\t\tvar length = 0,\r\n\t\trows = [];\r\n\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tpos = this.findAddRowPos(pos);\r\n\r\n\t\t\tif(!Array.isArray(data)){\r\n\t\t\t\tdata = [data];\r\n\t\t\t}\r\n\r\n\t\t\tlength = data.length - 1;\r\n\r\n\t\t\tif((typeof index == \"undefined\" && pos) || (typeof index !== \"undefined\" && !pos)){\r\n\t\t\t\tdata.reverse();\r\n\t\t\t}\r\n\r\n\t\t\tdata.forEach((item, i) => {\r\n\t\t\t\tvar row = this.addRow(item, pos, index, true);\r\n\t\t\t\trows.push(row);\r\n\t\t\t});\r\n\r\n\t\t\tif(this.table.options.groupBy && this.table.modExists(\"groupRows\")){\r\n\t\t\t\tthis.table.modules.groupRows.updateGroupRows(true);\r\n\t\t\t}else if(this.table.options.pagination && this.table.modExists(\"page\")){\r\n\t\t\t\tthis.refreshActiveData(false, false, true);\r\n\t\t\t}else{\r\n\t\t\t\tthis.reRenderInPosition();\r\n\t\t\t}\r\n\r\n\t\t\t//recalc column calculations if present\r\n\t\t\tif(this.table.modExists(\"columnCalcs\")){\r\n\t\t\t\tthis.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows);\r\n\t\t\t}\r\n\r\n\t\t\tthis.regenerateRowNumbers();\r\n\t\t\tresolve(rows);\r\n\t\t});\r\n\t}\r\n\r\n\tfindAddRowPos(pos){\r\n\t\tif(typeof pos === \"undefined\"){\r\n\t\t\tpos = this.table.options.addRowPos;\r\n\t\t}\r\n\r\n\t\tif(pos === \"pos\"){\r\n\t\t\tpos = true;\r\n\t\t}\r\n\r\n\t\tif(pos === \"bottom\"){\r\n\t\t\tpos = false;\r\n\t\t}\r\n\r\n\t\treturn pos;\r\n\t}\r\n\r\n\taddRowActual(data, pos, index, blockRedraw){\r\n\t\tvar row = data instanceof Row ? data : new Row(data || {}, this),\r\n\t\ttop = this.findAddRowPos(pos),\r\n\t\tallIndex = -1,\r\n\t\tactiveIndex, dispRows;\r\n\r\n\t\tif(!index && this.table.options.pagination && this.table.options.paginationAddRow == \"page\"){\r\n\t\t\tdispRows = this.getDisplayRows();\r\n\r\n\t\t\tif(top){\r\n\t\t\t\tif(dispRows.length){\r\n\t\t\t\t\tindex = dispRows[0];\r\n\t\t\t\t}else{\r\n\t\t\t\t\tif(this.activeRows.length){\r\n\t\t\t\t\t\tindex = this.activeRows[this.activeRows.length-1];\r\n\t\t\t\t\t\ttop = false;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tif(dispRows.length){\r\n\t\t\t\t\tindex = dispRows[dispRows.length - 1];\r\n\t\t\t\t\ttop = dispRows.length < this.table.modules.page.getPageSize() ? false : true;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(typeof index !== \"undefined\"){\r\n\t\t\tindex = this.findRow(index);\r\n\t\t}\r\n\r\n\t\tif(this.table.options.groupBy && this.table.modExists(\"groupRows\")){\r\n\t\t\tthis.table.modules.groupRows.assignRowToGroup(row);\r\n\r\n\t\t\tvar groupRows = row.getGroup().rows;\r\n\r\n\t\t\tif(groupRows.length > 1){\r\n\r\n\t\t\t\tif(!index || (index && groupRows.indexOf(index) == -1)){\r\n\t\t\t\t\tif(top){\r\n\t\t\t\t\t\tif(groupRows[0] !== row){\r\n\t\t\t\t\t\t\tindex = groupRows[0];\r\n\t\t\t\t\t\t\tthis._moveRowInArray(row.getGroup().rows, row, index, !top);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tif(groupRows[groupRows.length -1] !== row){\r\n\t\t\t\t\t\t\tindex = groupRows[groupRows.length -1];\r\n\t\t\t\t\t\t\tthis._moveRowInArray(row.getGroup().rows, row, index, !top);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}else{\r\n\t\t\t\t\tthis._moveRowInArray(row.getGroup().rows, row, index, !top);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(index){\r\n\t\t\tallIndex = this.rows.indexOf(index);\r\n\t\t}\r\n\r\n\t\tif(index && allIndex > -1){\r\n\t\t\tactiveIndex = this.activeRows.indexOf(index);\r\n\r\n\t\t\tthis.displayRowIterator(function(rows){\r\n\t\t\t\tvar displayIndex = rows.indexOf(index);\r\n\r\n\t\t\t\tif(displayIndex > -1){\r\n\t\t\t\t\trows.splice((top ? displayIndex : displayIndex + 1), 0, row);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tif(activeIndex > -1){\r\n\t\t\t\tthis.activeRows.splice((top ? activeIndex : activeIndex + 1), 0, row);\r\n\t\t\t}\r\n\r\n\t\t\tthis.rows.splice((top ? allIndex : allIndex + 1), 0, row);\r\n\r\n\t\t}else{\r\n\r\n\t\t\tif(top){\r\n\r\n\t\t\t\tthis.displayRowIterator(function(rows){\r\n\t\t\t\t\trows.unshift(row);\r\n\t\t\t\t});\r\n\r\n\t\t\t\tthis.activeRows.unshift(row);\r\n\t\t\t\tthis.rows.unshift(row);\r\n\t\t\t}else{\r\n\t\t\t\tthis.displayRowIterator(function(rows){\r\n\t\t\t\t\trows.push(row);\r\n\t\t\t\t});\r\n\r\n\t\t\t\tthis.activeRows.push(row);\r\n\t\t\t\tthis.rows.push(row);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.setActiveRows(this.activeRows);\r\n\r\n\t\tthis.table.options.rowAdded.call(this.table, row.getComponent());\r\n\r\n\t\tif(this.table.options.dataChanged){\r\n\t\t\tthis.table.options.dataChanged.call(this.table, this.getData());\r\n\t\t}\r\n\r\n\t\tif(!blockRedraw){\r\n\t\t\tthis.reRenderInPosition();\r\n\t\t}\r\n\r\n\t\treturn row;\r\n\t}\r\n\r\n\tmoveRow(from, to, after){\r\n\t\tif(this.table.options.history && this.table.modExists(\"history\")){\r\n\t\t\tthis.table.modules.history.action(\"rowMove\", from, {posFrom:this.getRowPosition(from), posTo:this.getRowPosition(to), to:to, after:after});\r\n\t\t}\r\n\r\n\t\tthis.moveRowActual(from, to, after);\r\n\r\n\t\tthis.regenerateRowNumbers();\r\n\r\n\t\tthis.table.options.rowMoved.call(this.table, from.getComponent());\r\n\t}\r\n\r\n\tmoveRowActual(from, to, after){\r\n\t\tthis._moveRowInArray(this.rows, from, to, after);\r\n\t\tthis._moveRowInArray(this.activeRows, from, to, after);\r\n\r\n\t\tthis.displayRowIterator((rows) => {\r\n\t\t\tthis._moveRowInArray(rows, from, to, after);\r\n\t\t});\r\n\r\n\t\tif(this.table.options.groupBy && this.table.modExists(\"groupRows\")){\r\n\r\n\t\t\tif(!after && to instanceof Group){\r\n\t\t\t\tto = this.table.rowManager.prevDisplayRow(from) || to;\r\n\t\t\t}\r\n\r\n\t\t\tvar toGroup = to.getGroup();\r\n\t\t\tvar fromGroup = from.getGroup();\r\n\r\n\t\t\tif(toGroup === fromGroup){\r\n\t\t\t\tthis._moveRowInArray(toGroup.rows, from, to, after);\r\n\t\t\t}else{\r\n\t\t\t\tif(fromGroup){\r\n\t\t\t\t\tfromGroup.removeRow(from);\r\n\t\t\t\t}\r\n\r\n\t\t\t\ttoGroup.insertRow(from, to, after);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t_moveRowInArray(rows, from, to, after){\r\n\t\tvar\tfromIndex, toIndex, start, end;\r\n\r\n\t\tif(from !== to){\r\n\r\n\t\t\tfromIndex = rows.indexOf(from);\r\n\r\n\t\t\tif (fromIndex > -1) {\r\n\r\n\t\t\t\trows.splice(fromIndex, 1);\r\n\r\n\t\t\t\ttoIndex = rows.indexOf(to);\r\n\r\n\t\t\t\tif (toIndex > -1) {\r\n\r\n\t\t\t\t\tif(after){\r\n\t\t\t\t\t\trows.splice(toIndex+1, 0, from);\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\trows.splice(toIndex, 0, from);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}else{\r\n\t\t\t\t\trows.splice(fromIndex, 0, from);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t//restyle rows\r\n\t\t\tif(rows === this.getDisplayRows()){\r\n\r\n\t\t\t\tstart = fromIndex < toIndex ? fromIndex : toIndex;\r\n\t\t\t\tend = toIndex > fromIndex ? toIndex : fromIndex +1;\r\n\r\n\t\t\t\tfor(let i = start; i <= end; i++){\r\n\t\t\t\t\tif(rows[i]){\r\n\t\t\t\t\t\tthis.styleRow(rows[i], i);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tclearData(){\r\n\t\tthis.setData([]);\r\n\t}\r\n\r\n\tgetRowIndex(row){\r\n\t\treturn this.findRowIndex(row, this.rows);\r\n\t}\r\n\r\n\tgetDisplayRowIndex(row){\r\n\t\tvar index = this.getDisplayRows().indexOf(row);\r\n\t\treturn index > -1 ? index : false;\r\n\t}\r\n\r\n\tnextDisplayRow(row, rowOnly){\r\n\t\tvar index = this.getDisplayRowIndex(row),\r\n\t\tnextRow = false;\r\n\r\n\r\n\t\tif(index !== false && index < this.displayRowsCount -1){\r\n\t\t\tnextRow = this.getDisplayRows()[index+1];\r\n\t\t}\r\n\r\n\t\tif(nextRow && (!(nextRow instanceof Row) || nextRow.type != \"row\")){\r\n\t\t\treturn this.nextDisplayRow(nextRow, rowOnly);\r\n\t\t}\r\n\r\n\t\treturn nextRow;\r\n\t}\r\n\r\n\tprevDisplayRow(row, rowOnly){\r\n\t\tvar index = this.getDisplayRowIndex(row),\r\n\t\tprevRow = false;\r\n\r\n\t\tif(index){\r\n\t\t\tprevRow = this.getDisplayRows()[index-1];\r\n\t\t}\r\n\r\n\t\tif(rowOnly && prevRow && (!(prevRow instanceof Row) || prevRow.type != \"row\")){\r\n\t\t\treturn this.prevDisplayRow(prevRow, rowOnly);\r\n\t\t}\r\n\r\n\t\treturn prevRow;\r\n\t}\r\n\r\n\tfindRowIndex(row, list){\r\n\t\tvar rowIndex;\r\n\r\n\t\trow = this.findRow(row);\r\n\r\n\t\tif(row){\r\n\t\t\trowIndex = list.indexOf(row);\r\n\r\n\t\t\tif(rowIndex > -1){\r\n\t\t\t\treturn rowIndex;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t}\r\n\r\n\tgetData(active, transform){\r\n\t\tvar output = [],\r\n\t\trows = this.getRows(active);\r\n\r\n\t\trows.forEach(function(row){\r\n\t\t\tif(row.type == \"row\"){\r\n\t\t\t\toutput.push(row.getData(transform || \"data\"));\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tgetComponents(active){\r\n\t\tvar\toutput = [],\r\n\t\trows = this.getRows(active);\r\n\r\n\t\trows.forEach(function(row){\r\n\t\t\toutput.push(row.getComponent());\r\n\t\t});\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tgetDataCount(active){\r\n\t\tvar rows = this.getRows(active);\r\n\r\n\t\treturn rows.length;\r\n\t}\r\n\r\n\t_genRemoteRequest(){\r\n\t\tvar table = this.table,\r\n\t\toptions = table.options,\r\n\t\tparams = {};\r\n\r\n\t\tif(table.modExists(\"page\")){\r\n\t\t\t//set sort data if defined\r\n\t\t\tif(options.ajaxSorting){\r\n\t\t\t\tlet sorters = this.table.modules.sort.getSort();\r\n\r\n\t\t\t\tsorters.forEach(function(item){\r\n\t\t\t\t\tdelete item.column;\r\n\t\t\t\t});\r\n\r\n\t\t\t\tparams[this.table.modules.page.paginationDataSentNames.sorters] = sorters;\r\n\t\t\t}\r\n\r\n\t\t\t//set filter data if defined\r\n\t\t\tif(options.ajaxFiltering){\r\n\t\t\t\tlet filters = this.table.modules.filter.getFilters(true, true);\r\n\r\n\t\t\t\tparams[this.table.modules.page.paginationDataSentNames.filters] = filters;\r\n\t\t\t}\r\n\r\n\r\n\t\t\tthis.table.modules.ajax.setParams(params, true);\r\n\t\t}\r\n\r\n\t\ttable.modules.ajax.sendRequest()\r\n\t\t.then((data)=>{\r\n\t\t\tthis._setDataActual(data, true);\r\n\t\t})\r\n\t\t.catch((e)=>{});\r\n\t}\r\n\r\n\t//choose the path to refresh data after a filter update\r\n\tfilterRefresh(){\r\n\t\tvar table = this.table,\r\n\t\toptions = table.options,\r\n\t\tleft = this.scrollLeft;\r\n\r\n\t\tif(options.ajaxFiltering){\r\n\t\t\tif(options.pagination == \"remote\" && table.modExists(\"page\")){\r\n\t\t\t\ttable.modules.page.reset(true);\r\n\t\t\t\ttable.modules.page.setPage(1).then(()=>{}).catch(()=>{});\r\n\t\t\t}else if(options.ajaxProgressiveLoad){\r\n\t\t\t\ttable.modules.ajax.loadData().then(()=>{}).catch(()=>{});\r\n\t\t\t}else{\r\n\t\t\t\t//assume data is url, make ajax call to url to get data\r\n\t\t\t\tthis._genRemoteRequest();\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tthis.refreshActiveData(\"filter\");\r\n\t\t}\r\n\r\n\t\tthis.scrollHorizontal(left);\r\n\t}\r\n\r\n\t//choose the path to refresh data after a sorter update\r\n\tsorterRefresh(loadOrignalData){\r\n\t\tvar table = this.table,\r\n\t\toptions = this.table.options,\r\n\t\tleft = this.scrollLeft;\r\n\r\n\t\tif(options.ajaxSorting){\r\n\t\t\tif((options.pagination == \"remote\" || options.progressiveLoad) && table.modExists(\"page\")){\r\n\t\t\t\ttable.modules.page.reset(true);\r\n\t\t\t\ttable.modules.page.setPage(1).then(()=>{}).catch(()=>{});\r\n\t\t\t}else if(options.ajaxProgressiveLoad){\r\n\t\t\t\ttable.modules.ajax.loadData().then(()=>{}).catch(()=>{});\r\n\t\t\t}else{\r\n\t\t\t\t//assume data is url, make ajax call to url to get data\r\n\t\t\t\tthis._genRemoteRequest();\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tthis.refreshActiveData(loadOrignalData ? \"filter\" : \"sort\");\r\n\t\t}\r\n\r\n\t\tthis.scrollHorizontal(left);\r\n\t}\r\n\r\n\tscrollHorizontal(left){\r\n\t\tthis.scrollLeft = left;\r\n\t\tthis.element.scrollLeft = left;\r\n\r\n\t\tif(this.table.options.groupBy){\r\n\t\t\tthis.table.modules.groupRows.scrollHeaders(left);\r\n\t\t}\r\n\r\n\t\tif(this.table.modExists(\"columnCalcs\")){\r\n\t\t\tthis.table.modules.columnCalcs.scrollHorizontal(left);\r\n\t\t}\r\n\t}\r\n\r\n\t//set active data set\r\n\trefreshActiveData(stage, skipStage, renderInPosition){\r\n\t\tvar table = this.table,\r\n\t\tcascadeOrder = [\"all\", \"filter\", \"sort\", \"display\", \"freeze\", \"group\", \"tree\", \"page\"],\r\n\t\tdisplayIndex;\r\n\r\n\t\tif(this.redrawBlock){\r\n\r\n\t\t\tif(!this.redrawBlockRestoreConfig || (cascadeOrder.indexOf(stage) < cascadeOrder.indexOf(this.redrawBlockRestoreConfig.stage))){\r\n\t\t\t\tthis.redrawBlockRestoreConfig = {\r\n\t\t\t\t\tstage: stage,\r\n\t\t\t\t\tskipStage: skipStage,\r\n\t\t\t\t\trenderInPosition: renderInPosition,\r\n\t\t\t\t};\r\n\t\t\t}\r\n\r\n\t\t\treturn;\r\n\t\t}else{\r\n\r\n\t\t\tif(this.table.modExists(\"edit\")){\r\n\t\t\t\tthis.table.modules.edit.cancelEdit();\r\n\t\t\t}\r\n\r\n\t\t\tif(!stage){\r\n\t\t\t\tstage = \"all\";\r\n\t\t\t}\r\n\r\n\t\t\tif(table.options.selectable && !table.options.selectablePersistence && table.modExists(\"selectRow\")){\r\n\t\t\t\ttable.modules.selectRow.deselectRows();\r\n\t\t\t}\r\n\r\n\t\t\t//cascade through data refresh stages\r\n\t\t\tswitch(stage){\r\n\t\t\t\tcase \"all\":\r\n\r\n\t\t\t\tcase \"filter\":\r\n\t\t\t\tif(!skipStage){\r\n\t\t\t\t\tif(table.modExists(\"filter\")){\r\n\t\t\t\t\t\tthis.setActiveRows(table.modules.filter.filter(this.rows));\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tthis.setActiveRows(this.rows.slice(0));\r\n\t\t\t\t\t}\r\n\t\t\t\t}else{\r\n\t\t\t\t\tskipStage = false;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tcase \"sort\":\r\n\t\t\t\tif(!skipStage){\r\n\t\t\t\t\tif(table.modExists(\"sort\")){\r\n\t\t\t\t\t\ttable.modules.sort.sort(this.activeRows);\r\n\t\t\t\t\t}\r\n\t\t\t\t}else{\r\n\t\t\t\t\tskipStage = false;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//regenerate row numbers for row number formatter if in use\r\n\t\t\t\tthis.regenerateRowNumbers();\r\n\r\n\t\t\t\t//generic stage to allow for pipeline trigger after the data manipulation stage\r\n\t\t\t\tcase \"display\":\r\n\t\t\t\tthis.resetDisplayRows();\r\n\r\n\t\t\t\tcase \"freeze\":\r\n\t\t\t\tif(!skipStage){\r\n\t\t\t\t\tif(this.table.modExists(\"frozenRows\")){\r\n\t\t\t\t\t\tif(table.modules.frozenRows.isFrozen()){\r\n\t\t\t\t\t\t\tif(!table.modules.frozenRows.getDisplayIndex()){\r\n\t\t\t\t\t\t\t\ttable.modules.frozenRows.setDisplayIndex(this.getNextDisplayIndex());\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\tdisplayIndex = table.modules.frozenRows.getDisplayIndex();\r\n\r\n\t\t\t\t\t\t\tdisplayIndex = this.setDisplayRows(table.modules.frozenRows.getRows(this.getDisplayRows(displayIndex - 1)), displayIndex);\r\n\r\n\t\t\t\t\t\t\tif(displayIndex !== true){\r\n\t\t\t\t\t\t\t\ttable.modules.frozenRows.setDisplayIndex(displayIndex);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}else{\r\n\t\t\t\t\tskipStage = false;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tcase \"group\":\r\n\t\t\t\tif(!skipStage){\r\n\t\t\t\t\tif(table.options.groupBy && table.modExists(\"groupRows\")){\r\n\r\n\t\t\t\t\t\tif(!table.modules.groupRows.getDisplayIndex()){\r\n\t\t\t\t\t\t\ttable.modules.groupRows.setDisplayIndex(this.getNextDisplayIndex());\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tdisplayIndex = table.modules.groupRows.getDisplayIndex();\r\n\r\n\t\t\t\t\t\tdisplayIndex = this.setDisplayRows(table.modules.groupRows.getRows(this.getDisplayRows(displayIndex - 1)), displayIndex);\r\n\r\n\t\t\t\t\t\tif(displayIndex !== true){\r\n\t\t\t\t\t\t\ttable.modules.groupRows.setDisplayIndex(displayIndex);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}else{\r\n\t\t\t\t\tskipStage = false;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tcase \"tree\":\r\n\r\n\t\t\t\tif(!skipStage){\r\n\t\t\t\t\tif(table.options.dataTree && table.modExists(\"dataTree\")){\r\n\t\t\t\t\t\tif(!table.modules.dataTree.getDisplayIndex()){\r\n\t\t\t\t\t\t\ttable.modules.dataTree.setDisplayIndex(this.getNextDisplayIndex());\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tdisplayIndex = table.modules.dataTree.getDisplayIndex();\r\n\r\n\t\t\t\t\t\tdisplayIndex = this.setDisplayRows(table.modules.dataTree.getRows(this.getDisplayRows(displayIndex - 1)), displayIndex);\r\n\r\n\t\t\t\t\t\tif(displayIndex !== true){\r\n\t\t\t\t\t\t\ttable.modules.dataTree.setDisplayIndex(displayIndex);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}else{\r\n\t\t\t\t\tskipStage = false;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(table.options.pagination && table.modExists(\"page\") && !renderInPosition){\r\n\t\t\t\t\tif(table.modules.page.getMode() == \"local\"){\r\n\t\t\t\t\t\ttable.modules.page.reset();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tcase \"page\":\r\n\t\t\t\tif(!skipStage){\r\n\t\t\t\t\tif(table.options.pagination && table.modExists(\"page\")){\r\n\r\n\t\t\t\t\t\tif(!table.modules.page.getDisplayIndex()){\r\n\t\t\t\t\t\t\ttable.modules.page.setDisplayIndex(this.getNextDisplayIndex());\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tdisplayIndex = table.modules.page.getDisplayIndex();\r\n\r\n\t\t\t\t\t\tif(table.modules.page.getMode() == \"local\"){\r\n\t\t\t\t\t\t\ttable.modules.page.setMaxRows(this.getDisplayRows(displayIndex - 1).length);\r\n\t\t\t\t\t\t}\r\n\r\n\r\n\t\t\t\t\t\tdisplayIndex = this.setDisplayRows(table.modules.page.getRows(this.getDisplayRows(displayIndex - 1)), displayIndex);\r\n\r\n\t\t\t\t\t\tif(displayIndex !== true){\r\n\t\t\t\t\t\t\ttable.modules.page.setDisplayIndex(displayIndex);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}else{\r\n\t\t\t\t\tskipStage = false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\r\n\t\t\tif(Helpers.elVisible(this.element)){\r\n\t\t\t\tif(renderInPosition){\r\n\t\t\t\t\tthis.reRenderInPosition();\r\n\t\t\t\t}else{\r\n\r\n\t\t\t\t\tif(stage === \"all\" && this.table.options.virtualDomHoz){\r\n\t\t\t\t\t\tthis.table.vdomHoz.dataChange();\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tthis.renderTable();\r\n\r\n\t\t\t\t\tif(table.options.layoutColumnsOnNewData){\r\n\t\t\t\t\t\tthis.table.columnManager.redraw(true);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif(table.modExists(\"columnCalcs\")){\r\n\t\t\t\ttable.modules.columnCalcs.recalc(this.activeRows);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//regenerate row numbers for row number formatter if in use\r\n\tregenerateRowNumbers(){\r\n\t\tif(this.rowNumColumn){\r\n\t\t\tthis.activeRows.forEach((row) => {\r\n\t\t\t\tvar cell = row.getCell(this.rowNumColumn);\r\n\r\n\t\t\t\tif(cell){\r\n\t\t\t\t\tcell._generateContents();\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tsetActiveRows(activeRows){\r\n\t\tthis.activeRows = activeRows;\r\n\t\tthis.activeRowsCount = this.activeRows.length;\r\n\t}\r\n\r\n\t//reset display rows array\r\n\tresetDisplayRows(){\r\n\t\tthis.displayRows = [];\r\n\r\n\t\tthis.displayRows.push(this.activeRows.slice(0));\r\n\r\n\t\tthis.displayRowsCount = this.displayRows[0].length;\r\n\r\n\t\tif(this.table.modExists(\"frozenRows\")){\r\n\t\t\tthis.table.modules.frozenRows.setDisplayIndex(0);\r\n\t\t}\r\n\r\n\t\tif(this.table.options.groupBy && this.table.modExists(\"groupRows\")){\r\n\t\t\tthis.table.modules.groupRows.setDisplayIndex(0);\r\n\t\t}\r\n\r\n\t\tif(this.table.options.pagination && this.table.modExists(\"page\")){\r\n\t\t\tthis.table.modules.page.setDisplayIndex(0);\r\n\t\t}\r\n\t}\r\n\r\n\tgetNextDisplayIndex(){\r\n\t\treturn this.displayRows.length;\r\n\t}\r\n\r\n\t//set display row pipeline data\r\n\tsetDisplayRows(displayRows, index){\r\n\r\n\t\tvar output = true;\r\n\r\n\t\tif(index && typeof this.displayRows[index] != \"undefined\"){\r\n\t\t\tthis.displayRows[index] = displayRows;\r\n\t\t\toutput = true;\r\n\t\t}else{\r\n\t\t\tthis.displayRows.push(displayRows)\r\n\t\t\toutput = index = this.displayRows.length -1;\r\n\t\t}\r\n\r\n\t\tif(index == this.displayRows.length -1){\r\n\t\t\tthis.displayRowsCount = this.displayRows[this.displayRows.length -1].length;\r\n\t\t}\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tgetDisplayRows(index){\r\n\t\tif(typeof index == \"undefined\"){\r\n\t\t\treturn this.displayRows.length ? this.displayRows[this.displayRows.length -1] : [];\r\n\t\t}else{\r\n\t\t\treturn this.displayRows[index] || [];\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tgetVisibleRows(viewable){\r\n\t\tvar topEdge = this.element.scrollTop,\r\n\t\tbottomEdge = this.element.clientHeight + topEdge,\r\n\t\ttopFound = false,\r\n\t\ttopRow = 0,\r\n\t\tbottomRow = 0,\r\n\t\trows = this.getDisplayRows();\r\n\r\n\t\tif(viewable){\r\n\r\n\t\t\tthis.getDisplayRows();\r\n\t\t\tfor(var i = this.vDomTop; i <= this.vDomBottom; i++){\r\n\t\t\t\tif(rows[i]){\r\n\t\t\t\t\tif(!topFound){\r\n\t\t\t\t\t\tif((topEdge - rows[i].getElement().offsetTop) >= 0){\r\n\t\t\t\t\t\t\ttopRow = i;\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\ttopFound = true;\r\n\r\n\t\t\t\t\t\t\tif(bottomEdge - rows[i].getElement().offsetTop >= 0){\r\n\t\t\t\t\t\t\t\tbottomRow = i;\r\n\t\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tif(bottomEdge - rows[i].getElement().offsetTop >= 0){\r\n\t\t\t\t\t\t\tbottomRow = i;\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\ttopRow = this.vDomTop;\r\n\t\t\tbottomRow = this.vDomBottom;\r\n\t\t}\r\n\r\n\t\treturn rows.slice(topRow, bottomRow + 1);\r\n\t}\r\n\r\n\t//repeat action accross display rows\r\n\tdisplayRowIterator(callback){\r\n\t\tthis.displayRows.forEach(callback);\r\n\r\n\t\tthis.displayRowsCount = this.displayRows[this.displayRows.length -1].length;\r\n\t}\r\n\r\n\t//return only actual rows (not group headers etc)\r\n\tgetRows(active){\r\n\t\tvar rows;\r\n\r\n\t\tswitch(active){\r\n\t\t\tcase \"active\":\r\n\t\t\trows = this.activeRows;\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"display\":\r\n\t\t\trows = this.table.rowManager.getDisplayRows();\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"visible\":\r\n\t\t\trows = this.getVisibleRows(true);\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"selected\":\r\n\t\t\trows = this.table.modules.selectRow.selectedRows;\r\n\t\t\tbreak;\r\n\r\n\t\t\tdefault:\r\n\t\t\trows = this.rows;\r\n\t\t}\r\n\r\n\t\treturn rows;\r\n\t}\r\n\r\n\t///////////////// Table Rendering /////////////////\r\n\t//trigger rerender of table in current position\r\n\treRenderInPosition(callback){\r\n\t\tif(this.getRenderMode() == \"virtual\"){\r\n\r\n\t\t\tif(this.redrawBlock){\r\n\t\t\t\tif(callback){\r\n\t\t\t\t\tcallback();\r\n\t\t\t\t}else{\r\n\t\t\t\t\tthis.redrawBlockRederInPosition = true;\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tvar scrollTop = this.element.scrollTop;\r\n\t\t\t\tvar topRow = false;\r\n\t\t\t\tvar topOffset = false;\r\n\r\n\t\t\t\tvar left = this.scrollLeft;\r\n\r\n\t\t\t\tvar rows = this.getDisplayRows();\r\n\r\n\t\t\t\tfor(var i = this.vDomTop; i <= this.vDomBottom; i++){\r\n\r\n\t\t\t\t\tif(rows[i]){\r\n\t\t\t\t\t\tvar diff = scrollTop - rows[i].getElement().offsetTop;\r\n\r\n\t\t\t\t\t\tif(topOffset === false || Math.abs(diff) < topOffset){\r\n\t\t\t\t\t\t\ttopOffset = diff;\r\n\t\t\t\t\t\t\ttopRow = i;\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(callback){\r\n\t\t\t\t\tcallback();\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis._virtualRenderFill((topRow === false ? this.displayRowsCount - 1 : topRow), true, topOffset || 0);\r\n\r\n\t\t\t\tthis.scrollHorizontal(left);\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tthis.renderTable();\r\n\r\n\t\t\tif(callback){\r\n\t\t\t\tcallback();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tsetRenderMode(){\r\n\r\n\t\tif(this.table.options.virtualDom){\r\n\r\n\t\t\tthis.renderMode = \"virtual\";\r\n\r\n\t\t\tif((this.table.element.clientHeight || this.table.options.height)){\r\n\t\t\t\tthis.fixedHeight = true;\r\n\t\t\t}else{\r\n\t\t\t\tthis.fixedHeight = false;\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tthis.renderMode = \"classic\";\r\n\t\t}\r\n\t}\r\n\r\n\tgetRenderMode(){\r\n\t\treturn this.renderMode;\r\n\t}\r\n\r\n\trenderTable(){\r\n\r\n\t\tthis.table.options.renderStarted.call(this.table);\r\n\r\n\t\tthis.element.scrollTop = 0;\r\n\r\n\t\tswitch(this.renderMode){\r\n\t\t\tcase \"classic\":\r\n\t\t\tthis._simpleRender();\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"virtual\":\r\n\t\t\tthis._virtualRenderFill();\r\n\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\tif(this.firstRender){\r\n\t\t\tif(this.displayRowsCount){\r\n\t\t\t\tthis.firstRender = false;\r\n\t\t\t\tthis.table.modules.layout.layout();\r\n\t\t\t}else{\r\n\t\t\t\tthis.renderEmptyScroll();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(this.table.modExists(\"frozenColumns\")){\r\n\t\t\tthis.table.modules.frozenColumns.layout();\r\n\t\t}\r\n\r\n\t\tif(!this.displayRowsCount){\r\n\t\t\tif(this.table.options.placeholder){\r\n\r\n\t\t\t\tthis.table.options.placeholder.setAttribute(\"tabulator-render-mode\", this.renderMode);\r\n\r\n\t\t\t\tthis.getElement().appendChild(this.table.options.placeholder);\r\n\t\t\t\tthis.table.options.placeholder.style.width = this.table.columnManager.getWidth() + \"px\";\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.table.options.renderComplete.call(this.table);\r\n\t}\r\n\r\n\t//simple render on heightless table\r\n\t_simpleRender(){\r\n\t\tthis._clearVirtualDom();\r\n\r\n\t\tif(this.displayRowsCount){\r\n\t\t\tthis.checkClassicModeGroupHeaderWidth();\r\n\t\t}else{\r\n\t\t\tthis.renderEmptyScroll();\r\n\t\t}\r\n\t}\r\n\r\n\tcheckClassicModeGroupHeaderWidth(){\r\n\t\tvar element = this.tableElement,\r\n\t\tonlyGroupHeaders = true;\r\n\r\n\t\tthis.getDisplayRows().forEach((row, index) => {\r\n\t\t\tthis.styleRow(row, index);\r\n\t\t\telement.appendChild(row.getElement());\r\n\t\t\trow.initialize(true);\r\n\r\n\t\t\tif(row.type !== \"group\"){\r\n\t\t\t\tonlyGroupHeaders = false;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tif(onlyGroupHeaders){\r\n\t\t\telement.style.minWidth = this.table.columnManager.getWidth() + \"px\";\r\n\t\t}else{\r\n\t\t\telement.style.minWidth = \"\";\r\n\t\t}\r\n\t}\r\n\r\n\t//show scrollbars on empty table div\r\n\trenderEmptyScroll(){\r\n\t\tif(this.table.options.placeholder){\r\n\t\t\tthis.tableElement.style.display = \"none\";\r\n\t\t}else{\r\n\t\t\tthis.tableElement.style.minWidth = this.table.columnManager.getWidth() + \"px\";\r\n\t\t\t// this.tableElement.style.minHeight = \"1px\";\r\n\t\t\t// this.tableElement.style.visibility = \"hidden\";\r\n\t\t}\r\n\t}\r\n\r\n\t_clearVirtualDom(){\r\n\t\tvar element = this.tableElement;\r\n\r\n\t\tif(this.table.options.placeholder && this.table.options.placeholder.parentNode){\r\n\t\t\tthis.table.options.placeholder.parentNode.removeChild(this.table.options.placeholder);\r\n\t\t}\r\n\r\n\t\t// element.children.detach();\r\n\t\twhile(element.firstChild) element.removeChild(element.firstChild);\r\n\r\n\t\telement.style.paddingTop = \"\";\r\n\t\telement.style.paddingBottom = \"\";\r\n\t\telement.style.minWidth = \"\";\r\n\t\telement.style.minHeight = \"\";\r\n\t\telement.style.display = \"\";\r\n\t\telement.style.visibility = \"\";\r\n\r\n\t\tthis.scrollTop = 0;\r\n\t\tthis.scrollLeft = 0;\r\n\t\tthis.vDomTop = 0;\r\n\t\tthis.vDomBottom = 0;\r\n\t\tthis.vDomTopPad = 0;\r\n\t\tthis.vDomBottomPad = 0;\r\n\t}\r\n\r\n\tstyleRow(row, index){\r\n\t\tvar rowEl = row.getElement();\r\n\r\n\t\tif(index % 2){\r\n\t\t\trowEl.classList.add(\"tabulator-row-even\");\r\n\t\t\trowEl.classList.remove(\"tabulator-row-odd\");\r\n\t\t}else{\r\n\t\t\trowEl.classList.add(\"tabulator-row-odd\");\r\n\t\t\trowEl.classList.remove(\"tabulator-row-even\");\r\n\t\t}\r\n\t}\r\n\r\n\t//full virtual render\r\n\t_virtualRenderFill(position, forceMove, offset){\r\n\t\tvar\telement = this.tableElement,\r\n\t\tholder = this.element,\r\n\t\ttopPad = 0,\r\n\t\trowsHeight = 0,\r\n\t\ttopPadHeight = 0,\r\n\t\ti = 0,\r\n\t\tonlyGroupHeaders = true,\r\n\t\trows = this.getDisplayRows();\r\n\r\n\t\tposition = position || 0;\r\n\r\n\t\toffset = offset || 0;\r\n\r\n\t\tif(!position){\r\n\t\t\tthis._clearVirtualDom();\r\n\t\t}else{\r\n\t\t\twhile(element.firstChild) element.removeChild(element.firstChild);\r\n\r\n\t\t\t//check if position is too close to bottom of table\r\n\t\t\tlet heightOccupied = (this.displayRowsCount - position + 1) * this.vDomRowHeight;\r\n\r\n\t\t\tif(heightOccupied < this.height){\r\n\t\t\t\tposition -= Math.ceil((this.height - heightOccupied ) / this.vDomRowHeight);\r\n\r\n\t\t\t\tif(position < 0){\r\n\t\t\t\t\tposition = 0;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t//calculate initial pad\r\n\t\t\ttopPad = Math.min(Math.max(Math.floor(this.vDomWindowBuffer / this.vDomRowHeight), this.vDomWindowMinMarginRows), position);\r\n\t\t\tposition -= topPad;\r\n\t\t}\r\n\r\n\t\tif(this.displayRowsCount && Helpers.elVisible(this.element)){\r\n\t\t\tthis.vDomTop = position;\r\n\r\n\t\t\tthis.vDomBottom = position -1;\r\n\r\n\t\t\twhile ((rowsHeight <= this.height + this.vDomWindowBuffer || i < this.vDomWindowMinTotalRows) && this.vDomBottom < this.displayRowsCount -1){\r\n\t\t\t\tvar index = this.vDomBottom + 1,\r\n\t\t\t\trow = rows[index],\r\n\t\t\t\trowHeight = 0;\r\n\r\n\t\t\t\tthis.styleRow(row, index);\r\n\r\n\t\t\t\telement.appendChild(row.getElement());\r\n\r\n\t\t\t\trow.initialize();\r\n\r\n\t\t\t\tif(!row.heightInitialized){\r\n\t\t\t\t\trow.normalizeHeight(true);\r\n\t\t\t\t}\r\n\r\n\t\t\t\trowHeight = row.getHeight();\r\n\r\n\t\t\t\tif(i < topPad){\r\n\t\t\t\t\ttopPadHeight += rowHeight;\r\n\t\t\t\t}else{\r\n\t\t\t\t\trowsHeight += rowHeight;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(rowHeight > this.vDomWindowBuffer){\r\n\t\t\t\t\tthis.vDomWindowBuffer = rowHeight * 2;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(row.type !== \"group\"){\r\n\t\t\t\t\tonlyGroupHeaders = false;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.vDomBottom ++;\r\n\t\t\t\ti++;\r\n\t\t\t}\r\n\r\n\t\t\tif(!position){\r\n\t\t\t\tthis.vDomTopPad = 0;\r\n\t\t\t\t//adjust rowheight to match average of rendered elements\r\n\t\t\t\tthis.vDomRowHeight = Math.floor((rowsHeight + topPadHeight) / i);\r\n\t\t\t\tthis.vDomBottomPad = this.vDomRowHeight * (this.displayRowsCount - this.vDomBottom -1);\r\n\r\n\t\t\t\tthis.vDomScrollHeight = topPadHeight + rowsHeight + this.vDomBottomPad - this.height;\r\n\t\t\t}else{\r\n\t\t\t\tthis.vDomTopPad = !forceMove ? this.scrollTop - topPadHeight : (this.vDomRowHeight * this.vDomTop) + offset;\r\n\t\t\t\tthis.vDomBottomPad = this.vDomBottom == this.displayRowsCount-1 ? 0 : Math.max(this.vDomScrollHeight - this.vDomTopPad - rowsHeight - topPadHeight, 0);\r\n\t\t\t}\r\n\r\n\t\t\telement.style.paddingTop = this.vDomTopPad + \"px\";\r\n\t\t\telement.style.paddingBottom = this.vDomBottomPad + \"px\";\r\n\r\n\t\t\tif(forceMove){\r\n\t\t\t\tthis.scrollTop = this.vDomTopPad + (topPadHeight) + offset - (this.element.scrollWidth > this.element.clientWidth ? this.element.offsetHeight - this.element.clientHeight : 0);\r\n\t\t\t}\r\n\r\n\t\t\tthis.scrollTop = Math.min(this.scrollTop, this.element.scrollHeight - this.height);\r\n\r\n\t\t\t//adjust for horizontal scrollbar if present (and not at top of table)\r\n\t\t\tif(this.element.scrollWidth > this.element.offsetWidth && forceMove){\r\n\t\t\t\tthis.scrollTop += this.element.offsetHeight - this.element.clientHeight;\r\n\t\t\t}\r\n\r\n\t\t\tthis.vDomScrollPosTop = this.scrollTop;\r\n\t\t\tthis.vDomScrollPosBottom = this.scrollTop;\r\n\r\n\t\t\tholder.scrollTop = this.scrollTop;\r\n\r\n\t\t\telement.style.minWidth = onlyGroupHeaders ? this.table.columnManager.getWidth() + \"px\" : \"\";\r\n\r\n\t\t\tif(this.table.options.groupBy){\r\n\t\t\t\tif(this.table.modules.layout.getMode() != \"fitDataFill\" && this.displayRowsCount == this.table.modules.groupRows.countGroups()){\r\n\t\t\t\t\tthis.tableElement.style.minWidth = this.table.columnManager.getWidth();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tthis.renderEmptyScroll();\r\n\t\t}\r\n\r\n\t\tif(!this.fixedHeight){\r\n\t\t\tthis.adjustTableSize();\r\n\t\t}\r\n\t}\r\n\r\n\t//handle vertical scrolling\r\n\tscrollVertical(dir){\r\n\t\tvar topDiff = this.scrollTop - this.vDomScrollPosTop;\r\n\t\tvar bottomDiff = this.scrollTop - this.vDomScrollPosBottom;\r\n\t\tvar margin = this.vDomWindowBuffer * 2;\r\n\r\n\t\tif(-topDiff > margin || bottomDiff > margin){\r\n\t\t\t//if big scroll redraw table;\r\n\t\t\tvar left = this.scrollLeft;\r\n\t\t\tthis._virtualRenderFill(Math.floor((this.element.scrollTop / this.element.scrollHeight) * this.displayRowsCount));\r\n\t\t\tthis.scrollHorizontal(left);\r\n\t\t}else{\r\n\r\n\t\t\tif(dir){\r\n\t\t\t\t//scrolling up\r\n\t\t\t\tif(topDiff < 0){\r\n\r\n\t\t\t\t\tthis._addTopRow(-topDiff);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(bottomDiff < 0){\r\n\r\n\t\t\t\t\t//hide bottom row if needed\r\n\t\t\t\t\tif(this.vDomScrollHeight - this.scrollTop > this.vDomWindowBuffer){\r\n\t\t\t\t\t\tthis._removeBottomRow(-bottomDiff);\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tthis.vDomScrollPosBottom = this.scrollTop;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\t//scrolling down\r\n\t\t\t\tif(topDiff >= 0){\r\n\r\n\t\t\t\t\t//hide top row if needed\r\n\t\t\t\t\tif(this.scrollTop > this.vDomWindowBuffer){\r\n\r\n\t\t\t\t\t\tthis._removeTopRow(topDiff);\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tthis.vDomScrollPosTop = this.scrollTop;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(bottomDiff >= 0){\r\n\r\n\t\t\t\t\tthis._addBottomRow(bottomDiff);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t_addTopRow(topDiff, i=0){\r\n\t\tvar table = this.tableElement,\r\n\t\trows = this.getDisplayRows();\r\n\r\n\t\tif(this.vDomTop){\r\n\t\t\tlet index = this.vDomTop -1,\r\n\t\t\ttopRow = rows[index],\r\n\t\t\ttopRowHeight = topRow.getHeight() || this.vDomRowHeight;\r\n\r\n\t\t\t//hide top row if needed\r\n\t\t\tif(topDiff >= topRowHeight){\r\n\t\t\t\tthis.styleRow(topRow, index);\r\n\t\t\t\ttable.insertBefore(topRow.getElement(), table.firstChild);\r\n\t\t\t\tif(!topRow.initialized || !topRow.heightInitialized){\r\n\t\t\t\t\tthis.vDomTopNewRows.push(topRow);\r\n\r\n\t\t\t\t\tif(!topRow.heightInitialized){\r\n\t\t\t\t\t\ttopRow.clearCellHeight();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\ttopRow.initialize();\r\n\r\n\t\t\t\tthis.vDomTopPad -= topRowHeight;\r\n\r\n\t\t\t\tif(this.vDomTopPad < 0){\r\n\t\t\t\t\tthis.vDomTopPad = index * this.vDomRowHeight;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(!index){\r\n\t\t\t\t\tthis.vDomTopPad = 0;\r\n\t\t\t\t}\r\n\r\n\t\t\t\ttable.style.paddingTop = this.vDomTopPad + \"px\";\r\n\t\t\t\tthis.vDomScrollPosTop -= topRowHeight;\r\n\t\t\t\tthis.vDomTop--;\r\n\t\t\t}\r\n\r\n\t\t\ttopDiff = -(this.scrollTop - this.vDomScrollPosTop);\r\n\r\n\t\t\tif(topRow.getHeight() > this.vDomWindowBuffer){\r\n\t\t\t\tthis.vDomWindowBuffer = topRow.getHeight() * 2;\r\n\t\t\t}\r\n\r\n\t\t\tif(i < this.vDomMaxRenderChain && this.vDomTop && topDiff >= (rows[this.vDomTop -1].getHeight() || this.vDomRowHeight)){\r\n\t\t\t\tthis._addTopRow(topDiff, i+1);\r\n\t\t\t}else{\r\n\t\t\t\tthis._quickNormalizeRowHeight(this.vDomTopNewRows);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t_removeTopRow(topDiff){\r\n\t\tvar table = this.tableElement,\r\n\t\ttopRow = this.getDisplayRows()[this.vDomTop],\r\n\t\ttopRowHeight = topRow.getHeight() || this.vDomRowHeight;\r\n\r\n\t\tif(topDiff >= topRowHeight){\r\n\r\n\t\t\tvar rowEl = topRow.getElement();\r\n\t\t\trowEl.parentNode.removeChild(rowEl);\r\n\r\n\t\t\tthis.vDomTopPad += topRowHeight;\r\n\t\t\ttable.style.paddingTop = this.vDomTopPad + \"px\";\r\n\t\t\tthis.vDomScrollPosTop += this.vDomTop ? topRowHeight : topRowHeight + this.vDomWindowBuffer;\r\n\t\t\tthis.vDomTop++;\r\n\r\n\t\t\ttopDiff = this.scrollTop - this.vDomScrollPosTop;\r\n\r\n\t\t\tthis._removeTopRow(topDiff);\r\n\t\t}\r\n\t}\r\n\r\n\t_addBottomRow(bottomDiff, i=0){\r\n\t\tvar table = this.tableElement,\r\n\t\trows = this.getDisplayRows();\r\n\r\n\t\tif(this.vDomBottom < this.displayRowsCount -1){\r\n\t\t\tlet index = this.vDomBottom + 1,\r\n\t\t\tbottomRow = rows[index],\r\n\t\t\tbottomRowHeight = bottomRow.getHeight() || this.vDomRowHeight;\r\n\r\n\t\t\t//hide bottom row if needed\r\n\t\t\tif(bottomDiff >= bottomRowHeight){\r\n\t\t\t\tthis.styleRow(bottomRow, index);\r\n\t\t\t\ttable.appendChild(bottomRow.getElement());\r\n\r\n\t\t\t\tif(!bottomRow.initialized || !bottomRow.heightInitialized){\r\n\t\t\t\t\tthis.vDomBottomNewRows.push(bottomRow);\r\n\r\n\t\t\t\t\tif(!bottomRow.heightInitialized){\r\n\t\t\t\t\t\tbottomRow.clearCellHeight();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tbottomRow.initialize();\r\n\r\n\t\t\t\tthis.vDomBottomPad -= bottomRowHeight;\r\n\r\n\t\t\t\tif(this.vDomBottomPad < 0 || index == this.displayRowsCount -1){\r\n\t\t\t\t\tthis.vDomBottomPad = 0;\r\n\t\t\t\t}\r\n\r\n\t\t\t\ttable.style.paddingBottom = this.vDomBottomPad + \"px\";\r\n\t\t\t\tthis.vDomScrollPosBottom += bottomRowHeight;\r\n\t\t\t\tthis.vDomBottom++;\r\n\t\t\t}\r\n\r\n\t\t\tbottomDiff = this.scrollTop - this.vDomScrollPosBottom;\r\n\r\n\t\t\tif(bottomRow.getHeight() > this.vDomWindowBuffer){\r\n\t\t\t\tthis.vDomWindowBuffer = bottomRow.getHeight() * 2;\r\n\t\t\t}\r\n\r\n\t\t\tif(i < this.vDomMaxRenderChain && this.vDomBottom < this.displayRowsCount -1 && bottomDiff >= (rows[this.vDomBottom + 1].getHeight() || this.vDomRowHeight)){\r\n\t\t\t\tthis._addBottomRow(bottomDiff, i+1);\r\n\t\t\t}else{\r\n\t\t\t\tthis._quickNormalizeRowHeight(this.vDomBottomNewRows);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t_removeBottomRow(bottomDiff){\r\n\t\tvar table = this.tableElement,\r\n\t\tbottomRow = this.getDisplayRows()[this.vDomBottom],\r\n\t\tbottomRowHeight = bottomRow.getHeight() || this.vDomRowHeight;\r\n\r\n\t\tif(bottomDiff >= bottomRowHeight){\r\n\r\n\t\t\tvar rowEl = bottomRow.getElement();\r\n\r\n\t\t\tif(rowEl.parentNode){\r\n\t\t\t\trowEl.parentNode.removeChild(rowEl);\r\n\t\t\t}\r\n\r\n\t\t\tthis.vDomBottomPad += bottomRowHeight;\r\n\r\n\t\t\tif(this.vDomBottomPad < 0){\r\n\t\t\t\tthis.vDomBottomPad = 0;\r\n\t\t\t}\r\n\r\n\t\t\ttable.style.paddingBottom = this.vDomBottomPad + \"px\";\r\n\t\t\tthis.vDomScrollPosBottom -= bottomRowHeight;\r\n\t\t\tthis.vDomBottom--;\r\n\r\n\t\t\tbottomDiff = -(this.scrollTop - this.vDomScrollPosBottom);\r\n\r\n\t\t\tthis._removeBottomRow(bottomDiff);\r\n\t\t}\r\n\t}\r\n\r\n\t_quickNormalizeRowHeight(rows){\r\n\t\trows.forEach(function(row){\r\n\t\t\trow.calcHeight();\r\n\t\t});\r\n\r\n\t\trows.forEach(function(row){\r\n\t\t\trow.setCellHeight();\r\n\t\t});\r\n\r\n\t\trows.length = 0;\r\n\t}\r\n\r\n\t//normalize height of active rows\r\n\tnormalizeHeight(){\r\n\t\tthis.activeRows.forEach(function(row){\r\n\t\t\trow.normalizeHeight();\r\n\t\t});\r\n\t}\r\n\r\n\t//adjust the height of the table holder to fit in the Tabulator element\r\n\tadjustTableSize(){\r\n\t\tvar initialHeight = this.element.clientHeight,\r\n\t\tmodExists;\r\n\r\n\t\tif(this.renderMode === \"virtual\"){\r\n\r\n\t\t\tlet otherHeight = Math.floor(this.columnManager.getElement().getBoundingClientRect().height + (this.table.footerManager && this.table.footerManager.active && !this.table.footerManager.external ? this.table.footerManager.getElement().getBoundingClientRect().height : 0));\r\n\r\n\t\t\tif(this.fixedHeight){\r\n\t\t\t\tthis.element.style.minHeight = \"calc(100% - \" + otherHeight + \"px)\";\r\n\t\t\t\tthis.element.style.height = \"calc(100% - \" + otherHeight + \"px)\";\r\n\t\t\t\tthis.element.style.maxHeight = \"calc(100% - \" + otherHeight + \"px)\";\r\n\t\t\t}else{\r\n\t\t\t\tthis.element.style.height = \"\";\r\n\t\t\t\tthis.element.style.height = (this.table.element.clientHeight - otherHeight) + \"px\";\r\n\t\t\t\tthis.element.scrollTop = this.scrollTop;\r\n\t\t\t}\r\n\r\n\t\t\tthis.height = this.element.clientHeight;\r\n\t\t\tthis.vDomWindowBuffer = this.table.options.virtualDomBuffer || this.height;\r\n\r\n\t\t\t//check if the table has changed size when dealing with variable height tables\r\n\t\t\tif(!this.fixedHeight && initialHeight != this.element.clientHeight){\r\n\t\t\t\tmodExists = this.table.modExists(\"resizeTable\");\r\n\r\n\t\t\t\tif((modExists && !this.table.modules.resizeTable.autoResize) || !modExists){\r\n\t\t\t\t\tthis.redraw();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t}\r\n\t}\r\n\r\n\t//renitialize all rows\r\n\treinitialize(){\r\n\t\tthis.rows.forEach(function(row){\r\n\t\t\trow.reinitialize(true);\r\n\t\t});\r\n\t}\r\n\r\n\t//prevent table from being redrawn\r\n\tblockRedraw (){\r\n\t\tthis.redrawBlock = true;\r\n\t\tthis.redrawBlockRestoreConfig = false;\r\n\t}\r\n\r\n\t//restore table redrawing\r\n\trestoreRedraw (){\r\n\t\tthis.redrawBlock = false;\r\n\r\n\t\tif(this.redrawBlockRestoreConfig){\r\n\t\t\tthis.refreshActiveData(this.redrawBlockRestoreConfig.stage, this.redrawBlockRestoreConfig.skipStage, this.redrawBlockRestoreConfig.renderInPosition)\r\n\r\n\t\t\tthis.redrawBlockRestoreConfig = false;\r\n\t\t}else{\r\n\t\t\tif(this.redrawBlockRederInPosition){\r\n\t\t\t\tthis.reRenderInPosition();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.redrawBlockRederInPosition = false;\r\n\t}\r\n\r\n\t//redraw table\r\n\tredraw (force){\r\n\t\tvar pos = 0,\r\n\t\tleft = this.scrollLeft;\r\n\r\n\t\tthis.adjustTableSize();\r\n\r\n\t\tthis.table.tableWidth = this.table.element.clientWidth;\r\n\r\n\t\tif(!force){\r\n\t\t\tif(this.renderMode == \"classic\"){\r\n\r\n\t\t\t\tif(this.table.options.groupBy){\r\n\t\t\t\t\tthis.refreshActiveData(\"group\", false, false);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tthis._simpleRender();\r\n\t\t\t\t}\r\n\r\n\t\t\t}else{\r\n\t\t\t\tthis.reRenderInPosition();\r\n\t\t\t\tthis.scrollHorizontal(left);\r\n\t\t\t}\r\n\r\n\t\t\tif(!this.displayRowsCount){\r\n\t\t\t\tif(this.table.options.placeholder){\r\n\t\t\t\t\tthis.getElement().appendChild(this.table.options.placeholder);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t}else{\r\n\t\t\tthis.renderTable();\r\n\t\t}\r\n\t}\r\n\r\n\tresetScroll(){\r\n\t\tthis.element.scrollLeft = 0;\r\n\t\tthis.element.scrollTop = 0;\r\n\r\n\t\tif(this.table.browser === \"ie\"){\r\n\t\t\tvar event = document.createEvent(\"Event\");\r\n\t\t\tevent.initEvent(\"scroll\", false, true);\r\n\t\t\tthis.element.dispatchEvent(event);\r\n\t\t}else{\r\n\t\t\tthis.element.dispatchEvent(new Event('scroll'));\r\n\t\t}\r\n\t}\r\n}","export default class FooterManager {\r\n\r\n\tconstructor(table){\r\n\t\tthis.table = table;\r\n\t\tthis.active = false;\r\n\t\tthis.element = this.createElement(); //containing element\r\n\t\tthis.external = false;\r\n\t\tthis.links = [];\r\n\r\n\t\tthis._initialize();\r\n\t}\r\n\r\n\tcreateElement (){\r\n\t\tvar el = document.createElement(\"div\");\r\n\r\n\t\tel.classList.add(\"tabulator-footer\");\r\n\r\n\t\treturn el;\r\n\t}\r\n\r\n\t_initialize(element){\r\n\t\tif(this.table.options.footerElement){\r\n\r\n\t\t\tswitch(typeof this.table.options.footerElement){\r\n\t\t\t\tcase \"string\":\r\n\t\t\t\tif(this.table.options.footerElement[0] === \"<\"){\r\n\t\t\t\t\tthis.element.innerHTML = this.table.options.footerElement;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tthis.external = true;\r\n\t\t\t\t\tthis.element = document.querySelector(this.table.options.footerElement);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tdefault:\r\n\t\t\t\tthis.element = this.table.options.footerElement;\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tgetElement(){\r\n\t\treturn this.element;\r\n\t}\r\n\r\n\tappend(element, parent){\r\n\t\tthis.activate(parent);\r\n\r\n\t\tthis.element.appendChild(element);\r\n\t\tthis.table.rowManager.adjustTableSize();\r\n\t}\r\n\r\n\tprepend(element, parent){\r\n\t\tthis.activate(parent);\r\n\r\n\t\tthis.element.insertBefore(element, this.element.firstChild);\r\n\t\tthis.table.rowManager.adjustTableSize();\r\n\t}\r\n\r\n\tremove(element){\r\n\t\telement.parentNode.removeChild(element);\r\n\t\tthis.deactivate();\r\n\t}\r\n\r\n\tdeactivate(force){\r\n\t\tif(!this.element.firstChild || force){\r\n\t\t\tif(!this.external){\r\n\t\t\t\tthis.element.parentNode.removeChild(this.element);\r\n\t\t\t}\r\n\t\t\tthis.active = false;\r\n\t\t}\r\n\t}\r\n\r\n\tactivate(parent){\r\n\t\tif(!this.active){\r\n\t\t\tthis.active = true;\r\n\t\t\tif(!this.external){\r\n\t\t\t\tthis.table.element.appendChild(this.getElement());\r\n\t\t\t\tthis.table.element.style.display = '';\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(parent){\r\n\t\t\tthis.links.push(parent);\r\n\t\t}\r\n\t}\r\n\r\n\tredraw(){\r\n\t\tthis.links.forEach(function(link){\r\n\t\t\tlink.footerRedraw();\r\n\t\t});\r\n\t}\r\n}","import Tabulator from './Tabulator.js';\r\n\r\nclass TableRegistry {\r\n\r\n\tstatic register(table){\r\n\t\tTableRegistry.tables.push(table);\r\n\t}\r\n\r\n\tstatic deregister(table){\r\n\t\tvar index = TableRegistry.tables.indexOf(table);\r\n\r\n\t\tif(index > -1){\r\n\t\t\tTableRegistry.tables.splice(index, 1);\r\n\t\t}\r\n\t}\r\n\r\n\tstatic lookupTable(query, silent){\r\n\t\tvar results = [],\r\n\t\tmatches, match;\r\n\r\n\t\tif(typeof query === \"string\"){\r\n\t\t\tmatches = document.querySelectorAll(query);\r\n\r\n\t\t\tif(matches.length){\r\n\t\t\t\tfor(var i = 0; i < matches.length; i++){\r\n\t\t\t\t\tmatch = TableRegistry.matchElement(matches[i]);\r\n\r\n\t\t\t\t\tif(match){\r\n\t\t\t\t\t\tresults.push(match);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t}else if((typeof HTMLElement !== \"undefined\" && query instanceof HTMLElement) || query instanceof Tabulator){\r\n\t\t\tmatch = TableRegistry.matchElement(query);\r\n\r\n\t\t\tif(match){\r\n\t\t\t\tresults.push(match);\r\n\t\t\t}\r\n\t\t}else if(Array.isArray(query)){\r\n\t\t\tquery.forEach(function(item){\r\n\t\t\t\tresults = results.concat(TableRegistry.lookupTable(item));\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tif(!silent){\r\n\t\t\t\tconsole.warn(\"Table Connection Error - Invalid Selector\", query);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn results;\r\n\t}\r\n\r\n\tstatic matchElement(element){\r\n\t\treturn TableRegistry.tables.find(function(table){\r\n\t\t\treturn element instanceof Tabulator ? table === element : table.element === element;\r\n\t\t});\r\n\t}\r\n}\r\n\r\nTableRegistry.tables = [];\r\n\r\nexport default TableRegistry;","//resize columns to fit data the contain and stretch last column to fill table\r\nexport default function(columns){\r\n\tvar colsWidth = 0,\r\n\ttableWidth = this.table.rowManager.element.clientWidth,\r\n\tgap = 0,\r\n\tlastCol = false;\r\n\r\n\tcolumns.forEach((column, i) => {\r\n\t\tif(!column.widthFixed){\r\n\t\t\tcolumn.reinitializeWidth();\r\n\t\t}\r\n\r\n\t\tif(this.table.options.responsiveLayout ? column.modules.responsive.visible : column.visible){\r\n\t\t\tlastCol = column;\r\n\t\t}\r\n\r\n\t\tif(column.visible){\r\n\t\t\tcolsWidth += column.getWidth();\r\n\t\t}\r\n\t});\r\n\r\n\tif(lastCol){\r\n\t\tgap = tableWidth - colsWidth + lastCol.getWidth();\r\n\r\n\t\tif(this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)){\r\n\t\t\tlastCol.setWidth(0);\r\n\t\t\tthis.table.modules.responsiveLayout.update();\r\n\t\t}\r\n\r\n\t\tif(gap > 0){\r\n\t\t\tlastCol.setWidth(gap);\r\n\t\t}else{\r\n\t\t\tlastCol.reinitializeWidth();\r\n\t\t}\r\n\t}else{\r\n\t\tif(this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)){\r\n\t\t\tthis.table.modules.responsiveLayout.update();\r\n\t\t}\r\n\t}\r\n};","//resize columns to fit data they contain\r\nexport default function(columns){\r\n\tif(this.table.options.virtualDomHoz){\r\n\t\tthis.table.vdomHoz.fitDataLayoutOverride();\r\n\t}else{\r\n\t\tcolumns.forEach(function(column){\r\n\t\t\tcolumn.reinitializeWidth();\r\n\t\t});\r\n\t}\r\n\r\n\tif(this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)){\r\n\t\tthis.table.modules.responsiveLayout.update();\r\n\t}\r\n};","import Module from '../../core/Module.js';\r\n\r\nimport defaultModes from './defaults/modes.js';\r\n\r\nclass Layout extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table, \"layout\");\r\n\r\n\t\tthis.mode = null;\r\n\t}\r\n\r\n\t//initialize layout system\r\n\tinitialize(layout){\r\n\t\tif(Layout.modes[layout]){\r\n\t\t\tthis.mode = layout;\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Layout Error - invalid mode set, defaulting to 'fitData' : \" + layout);\r\n\t\t\tthis.mode = 'fitData';\r\n\t\t}\r\n\r\n\t\tthis.table.element.setAttribute(\"tabulator-layout\", this.mode);\r\n\t}\r\n\r\n\tgetMode(){\r\n\t\treturn this.mode;\r\n\t}\r\n\r\n\t//trigger table layout\r\n\tlayout(){\r\n\t\tLayout.modes[this.mode].call(this, this.table.columnManager.columnsByIndex);\r\n\r\n\t\tif(this.mode.indexOf(\"fitData\") === 0 && this.table.options.persistence && this.table.modExists(\"persistence\", true) && this.table.modules.persistence.config.columns){\r\n\t\t\tthis.table.modules.persistence.save(\"columns\");\r\n\t\t}\r\n\t}\r\n}\r\n\r\nLayout.moduleName = \"layout\";\r\n\r\n//load defaults\r\nLayout.modes = defaultModes;\r\n\r\nexport default Layout;","//resize columns to fit data they contain and stretch row to fill table, also used for fitDataTable\r\nexport default function(columns){\r\n\tcolumns.forEach(function(column){\r\n\t\tcolumn.reinitializeWidth();\r\n\t});\r\n\r\n\tif(this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)){\r\n\t\tthis.table.modules.responsiveLayout.update();\r\n\t}\r\n};","//resize columns to fit\r\nexport default function(columns){\r\n\tvar totalWidth = this.table.element.clientWidth; //table element width\r\n\tvar fixedWidth = 0; //total width of columns with a defined width\r\n\tvar flexWidth = 0; //total width available to flexible columns\r\n\tvar flexGrowUnits = 0; //total number of widthGrow blocks accross all columns\r\n\tvar flexColWidth = 0; //desired width of flexible columns\r\n\tvar flexColumns = []; //array of flexible width columns\r\n\tvar fixedShrinkColumns = []; //array of fixed width columns that can shrink\r\n\tvar flexShrinkUnits = 0; //total number of widthShrink blocks accross all columns\r\n\tvar overflowWidth = 0; //horizontal overflow width\r\n\tvar gapFill=0; //number of pixels to be added to final column to close and half pixel gaps\r\n\r\n\tfunction calcWidth(width){\r\n\t\tvar colWidth;\r\n\r\n\t\tif(typeof(width) == \"string\"){\r\n\t\t\tif(width.indexOf(\"%\") > -1){\r\n\t\t\t\tcolWidth = (totalWidth / 100) * parseInt(width);\r\n\t\t\t}else{\r\n\t\t\t\tcolWidth = parseInt(width);\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tcolWidth = width;\r\n\t\t}\r\n\r\n\t\treturn colWidth;\r\n\t}\r\n\r\n\t//ensure columns resize to take up the correct amount of space\r\n\tfunction scaleColumns(columns, freeSpace, colWidth, shrinkCols){\r\n\r\n\t\tvar oversizeCols = [],\r\n\t\toversizeSpace = 0,\r\n\t\tremainingSpace = 0,\r\n\t\tnextColWidth = 0,\r\n\t\tremainingFlexGrowUnits = flexGrowUnits,\r\n\t\tgap = 0,\r\n\t\tchangeUnits = 0,\r\n\t\tundersizeCols = [];\r\n\r\n\t\tfunction calcGrow(col){\r\n\t\t\treturn (colWidth * (col.column.definition.widthGrow || 1));\r\n\t\t}\r\n\r\n\t\tfunction calcShrink(col){\r\n\t\t\treturn (calcWidth(col.width) - (colWidth * (col.column.definition.widthShrink || 0)))\r\n\t\t}\r\n\r\n\t\tcolumns.forEach(function(col, i){\r\n\t\t\tvar width = shrinkCols ? calcShrink(col) : calcGrow(col);\r\n\t\t\tif(col.column.minWidth >= width){\r\n\t\t\t\toversizeCols.push(col);\r\n\t\t\t}else{\r\n\t\t\t\tif(col.column.maxWidth && col.column.maxWidth < width){\r\n\t\t\t\t\tcol.width = col.column.maxWidth;\r\n\t\t\t\t\tfreeSpace -= col.column.maxWidth;\r\n\r\n\t\t\t\t\tremainingFlexGrowUnits -= shrinkCols ? (col.column.definition.widthShrink || 1) : (col.column.definition.widthGrow || 1);\r\n\r\n\t\t\t\t\tif(remainingFlexGrowUnits){\r\n\t\t\t\t\t\tcolWidth = Math.floor(freeSpace/remainingFlexGrowUnits);\r\n\t\t\t\t\t}\r\n\t\t\t\t}else{\r\n\t\t\t\t\tundersizeCols.push(col);\r\n\t\t\t\t\tchangeUnits += shrinkCols ? (col.column.definition.widthShrink || 1) : (col.column.definition.widthGrow || 1);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tif(oversizeCols.length){\r\n\t\t\toversizeCols.forEach(function(col){\r\n\t\t\t\toversizeSpace += shrinkCols ? col.width - col.column.minWidth : col.column.minWidth;\r\n\t\t\t\tcol.width = col.column.minWidth;\r\n\t\t\t});\r\n\r\n\t\t\tremainingSpace = freeSpace - oversizeSpace;\r\n\r\n\t\t\tnextColWidth = changeUnits ? Math.floor(remainingSpace/changeUnits) : remainingSpace;\r\n\r\n\t\t\tgap = remainingSpace - (nextColWidth * changeUnits);\r\n\r\n\t\t\tgap += scaleColumns(undersizeCols, remainingSpace, nextColWidth, shrinkCols);\r\n\t\t}else{\r\n\t\t\tgap = changeUnits ? freeSpace - (Math.floor(freeSpace/changeUnits) * changeUnits) : freeSpace;\r\n\r\n\t\t\tundersizeCols.forEach(function(column){\r\n\t\t\t\tcolumn.width = shrinkCols ? calcShrink(column) : calcGrow(column);\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn gap;\r\n\t}\r\n\r\n\tif(this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)){\r\n\t\tthis.table.modules.responsiveLayout.update();\r\n\t}\r\n\r\n\t//adjust for vertical scrollbar if present\r\n\tif(this.table.rowManager.element.scrollHeight > this.table.rowManager.element.clientHeight){\r\n\t\ttotalWidth -= this.table.rowManager.element.offsetWidth - this.table.rowManager.element.clientWidth;\r\n\t}\r\n\r\n\tcolumns.forEach(function(column){\r\n\t\tvar width, minWidth, colWidth;\r\n\r\n\t\tif(column.visible){\r\n\r\n\t\t\twidth = column.definition.width;\r\n\t\t\tminWidth = parseInt(column.minWidth);\r\n\r\n\t\t\tif(width){\r\n\r\n\t\t\t\tcolWidth = calcWidth(width);\r\n\r\n\t\t\t\tfixedWidth += colWidth > minWidth ? colWidth : minWidth;\r\n\r\n\t\t\t\tif(column.definition.widthShrink){\r\n\t\t\t\t\tfixedShrinkColumns.push({\r\n\t\t\t\t\t\tcolumn:column,\r\n\t\t\t\t\t\twidth:colWidth > minWidth ? colWidth : minWidth\r\n\t\t\t\t\t});\r\n\t\t\t\t\tflexShrinkUnits += column.definition.widthShrink;\r\n\t\t\t\t}\r\n\r\n\t\t\t}else{\r\n\t\t\t\tflexColumns.push({\r\n\t\t\t\t\tcolumn:column,\r\n\t\t\t\t\twidth:0,\r\n\t\t\t\t});\r\n\t\t\t\tflexGrowUnits += column.definition.widthGrow || 1;\r\n\t\t\t}\r\n\t\t}\r\n\t});\r\n\r\n\t//calculate available space\r\n\tflexWidth = totalWidth - fixedWidth;\r\n\r\n\t//calculate correct column size\r\n\tflexColWidth = Math.floor(flexWidth / flexGrowUnits)\r\n\r\n\t//generate column widths\r\n\tvar gapFill = scaleColumns(flexColumns, flexWidth, flexColWidth, false);\r\n\r\n\t//increase width of last column to account for rounding errors\r\n\tif(flexColumns.length && gapFill > 0){\r\n\t\tflexColumns[flexColumns.length-1].width += + gapFill;\r\n\t}\r\n\r\n\t//caculate space for columns to be shrunk into\r\n\tflexColumns.forEach(function(col){\r\n\t\tflexWidth -= col.width;\r\n\t});\r\n\r\n\toverflowWidth = Math.abs(gapFill) + flexWidth;\r\n\r\n\t//shrink oversize columns if there is no available space\r\n\tif(overflowWidth > 0 && flexShrinkUnits){\r\n\t\tgapFill = scaleColumns(fixedShrinkColumns, overflowWidth, Math.floor(overflowWidth / flexShrinkUnits), true);\r\n\t}\r\n\r\n\t//decrease width of last column to account for rounding errors\r\n\tif(fixedShrinkColumns.length){\r\n\t\tfixedShrinkColumns[fixedShrinkColumns.length-1].width -= gapFill;\r\n\t}\r\n\r\n\tflexColumns.forEach(function(col){\r\n\t\tcol.column.setWidth(col.width);\r\n\t});\r\n\r\n\tfixedShrinkColumns.forEach(function(col){\r\n\t\tcol.column.setWidth(col.width);\r\n\t});\r\n};","import fitData from './modes/fitData.js';\r\nimport fitDataGeneral from './modes/fitDataGeneral.js';\r\nimport fitDataStretch from './modes/fitDataStretch.js';\r\nimport fitColumns from './modes/fitColumns.js';\r\n\r\nexport default {\r\n\tfitData:fitData,\r\n\tfitDataFill:fitDataGeneral,\r\n\tfitDataTable:fitDataGeneral,\r\n\tfitDataStretch:fitDataStretch,\r\n\tfitColumns:fitColumns ,\r\n};","export default {\r\n\t\"default\":{ //hold default locale text\r\n\t\t\"groups\":{\r\n\t\t\t\"item\":\"item\",\r\n\t\t\t\"items\":\"items\",\r\n\t\t},\r\n\t\t\"columns\":{\r\n\t\t},\r\n\t\t\"ajax\":{\r\n\t\t\t\"loading\":\"Loading\",\r\n\t\t\t\"error\":\"Error\",\r\n\t\t},\r\n\t\t\"pagination\":{\r\n\t\t\t\"page_size\":\"Page Size\",\r\n\t\t\t\"page_title\":\"Show Page\",\r\n\t\t\t\"first\":\"First\",\r\n\t\t\t\"first_title\":\"First Page\",\r\n\t\t\t\"last\":\"Last\",\r\n\t\t\t\"last_title\":\"Last Page\",\r\n\t\t\t\"prev\":\"Prev\",\r\n\t\t\t\"prev_title\":\"Prev Page\",\r\n\t\t\t\"next\":\"Next\",\r\n\t\t\t\"next_title\":\"Next Page\",\r\n\t\t\t\"all\":\"All\",\r\n\t\t},\r\n\t\t\"headerFilters\":{\r\n\t\t\t\"default\":\"filter column...\",\r\n\t\t\t\"columns\":{}\r\n\t\t}\r\n\t},\r\n};","import Module from '../../core/Module.js';\r\n\r\nimport Helpers from '../../core/Helpers.js';\r\n\r\nimport defaultLangs from './defaults/langs.js';\r\n\r\nclass Localize extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.locale = \"default\"; //current locale\r\n\t\tthis.lang = false; //current language\r\n\t\tthis.bindings = {}; //update events to call when locale is changed\r\n\t\tthis.langList = {};\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tthis.langList = Helpers.deepClone(Localize.langs);\r\n\t}\r\n\r\n\t//set header placehoder\r\n\tsetHeaderFilterPlaceholder(placeholder){\r\n\t\tthis.langList.default.headerFilters.default = placeholder;\r\n\t}\r\n\r\n\t//set header filter placeholder by column\r\n\tsetHeaderFilterColumnPlaceholder(column, placeholder){\r\n\t\tthis.langList.default.headerFilters.columns[column] = placeholder;\r\n\r\n\t\tif(this.lang && !this.lang.headerFilters.columns[column]){\r\n\t\t\tthis.lang.headerFilters.columns[column] = placeholder;\r\n\t\t}\r\n\t}\r\n\r\n\t//setup a lang description object\r\n\tinstallLang(locale, lang){\r\n\t\tif(this.langList[locale]){\r\n\t\t\tthis._setLangProp(this.langList[locale], lang);\r\n\t\t}else{\r\n\t\t\tthis.langList[locale] = lang;\r\n\t\t}\r\n\t}\r\n\r\n\t_setLangProp(lang, values){\r\n\t\tfor(let key in values){\r\n\t\t\tif(lang[key] && typeof lang[key] == \"object\"){\r\n\t\t\t\tthis._setLangProp(lang[key], values[key])\r\n\t\t\t}else{\r\n\t\t\t\tlang[key] = values[key];\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//set current locale\r\n\tsetLocale(desiredLocale){\r\n\t\tdesiredLocale = desiredLocale || \"default\";\r\n\r\n\t\t//fill in any matching languge values\r\n\t\tfunction traverseLang(trans, path){\r\n\t\t\tfor(var prop in trans){\r\n\t\t\t\tif(typeof trans[prop] == \"object\"){\r\n\t\t\t\t\tif(!path[prop]){\r\n\t\t\t\t\t\tpath[prop] = {};\r\n\t\t\t\t\t}\r\n\t\t\t\t\ttraverseLang(trans[prop], path[prop]);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tpath[prop] = trans[prop];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//determing correct locale to load\r\n\t\tif(desiredLocale === true && navigator.language){\r\n\t\t\t//get local from system\r\n\t\t\tdesiredLocale = navigator.language.toLowerCase();\r\n\t\t}\r\n\r\n\t\tif(desiredLocale){\r\n\t\t\t//if locale is not set, check for matching top level locale else use default\r\n\t\t\tif(!this.langList[desiredLocale]){\r\n\t\t\t\tlet prefix = desiredLocale.split(\"-\")[0];\r\n\r\n\t\t\t\tif(this.langList[prefix]){\r\n\t\t\t\t\tconsole.warn(\"Localization Error - Exact matching locale not found, using closest match: \", desiredLocale, prefix);\r\n\t\t\t\t\tdesiredLocale = prefix;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.warn(\"Localization Error - Matching locale not found, using default: \", desiredLocale);\r\n\t\t\t\t\tdesiredLocale = \"default\";\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.locale = desiredLocale;\r\n\r\n\t\t//load default lang template\r\n\t\tthis.lang = Helpers.deepClone(this.langList.default || {});\r\n\r\n\t\tif(desiredLocale != \"default\"){\r\n\t\t\ttraverseLang(this.langList[desiredLocale], this.lang);\r\n\t\t}\r\n\r\n\t\tthis.table.options.localized.call(this.table, this.locale, this.lang);\r\n\r\n\t\tthis._executeBindings();\r\n\t}\r\n\r\n\t//get current locale\r\n\tgetLocale(locale){\r\n\t\treturn this.locale;\r\n\t}\r\n\r\n\t//get lang object for given local or current if none provided\r\n\tgetLang(locale){\r\n\t\treturn locale ? this.langList[locale] : this.lang;\r\n\t}\r\n\r\n\t//get text for current locale\r\n\tgetText(path, value){\r\n\t\tvar path = value ? path + \"|\" + value : path,\r\n\t\tpathArray = path.split(\"|\"),\r\n\t\ttext = this._getLangElement(pathArray, this.locale);\r\n\r\n\t\t// if(text === false){\r\n\t\t// \tconsole.warn(\"Localization Error - Matching localized text not found for given path: \", path);\r\n\t\t// }\r\n\r\n\t\treturn text || \"\";\r\n\t}\r\n\r\n\t//traverse langs object and find localized copy\r\n\t_getLangElement(path, locale){\r\n\t\tvar root = this.lang;\r\n\r\n\t\tpath.forEach(function(level){\r\n\t\t\tvar rootPath;\r\n\r\n\t\t\tif(root){\r\n\t\t\t\trootPath = root[level];\r\n\r\n\t\t\t\tif(typeof rootPath != \"undefined\"){\r\n\t\t\t\t\troot = rootPath;\r\n\t\t\t\t}else{\r\n\t\t\t\t\troot = false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn root;\r\n\t}\r\n\r\n\t//set update binding\r\n\tbind(path, callback){\r\n\t\tif(!this.bindings[path]){\r\n\t\t\tthis.bindings[path] = [];\r\n\t\t}\r\n\r\n\t\tthis.bindings[path].push(callback);\r\n\r\n\t\tcallback(this.getText(path), this.lang);\r\n\t}\r\n\r\n\t//itterate through bindings and trigger updates\r\n\t_executeBindings(){\r\n\t\tfor(let path in this.bindings){\r\n\t\t\tthis.bindings[path].forEach((binding) => {\r\n\t\t\t\tbinding(this.getText(path), this.lang);\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n}\r\n\r\nLocalize.moduleName = \"localize\";\r\n\r\n//load defaults\r\nLocalize.langs = defaultLangs;\r\n\r\nexport default Localize;","import Module from '../../core/Module.js';\r\nimport TableRegistry from '../../core/TableRegistry.js';\r\n\r\nclass Comms extends Module{\r\n\r\n\tgetConnections(selectors){\r\n\t\tvar connections = [],\r\n\t\tconnection;\r\n\r\n\t\tconnection = Tabulator.comms.lookupTable(selectors);\r\n\r\n\t\tconnection.forEach((con) =>{\r\n\t\t\tif(this.table !== con){\r\n\t\t\t\tconnections.push(con);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn connections;\r\n\t}\r\n\r\n\tsend(selectors, module, action, data){\r\n\t\tvar connections = this.getConnections(selectors);\r\n\r\n\t\tconnections.forEach((connection) => {\r\n\t\t\tconnection.tableComms(this.table.element, module, action, data);\r\n\t\t});\r\n\r\n\t\tif(!connections.length && selectors){\r\n\t\t\tconsole.warn(\"Table Connection Error - No tables matching selector found\", selectors);\r\n\t\t}\r\n\t}\r\n\r\n\treceive(table, module, action, data){\r\n\t\tif(this.table.modExists(module)){\r\n\t\t\treturn this.table.modules[module].commsReceived(table, action, data);\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Inter-table Comms Error - no such module:\", module);\r\n\t\t}\r\n\t}\r\n}\r\n\r\nComms.moduleName = \"comms\";\r\n\r\nexport default Comms;","import * as coreModules from './modules/core.js';\r\nimport TableRegistry from './TableRegistry.js';\r\n\r\nexport default class ModuleBinder {\r\n\r\n\tconstructor(tabulator, modules){\r\n\t\tthis.bindStaticFuctionality(tabulator);\r\n\t\tthis.bindModules(tabulator, coreModules);\r\n\r\n\t\tif(modules){\r\n\t\t\tthis.bindModules(tabulator, modules);\r\n\t\t}\r\n\t}\r\n\r\n\tbindStaticFuctionality(tabulator){\r\n\r\n\t\ttabulator.moduleBindings = {};\r\n\r\n\t\ttabulator.extendModule = function(name, property, values){\r\n\t\t\tif(tabulator.moduleBindings[name]){\r\n\t\t\t\tvar source = tabulator.moduleBindings[name].prototype[property];\r\n\r\n\t\t\t\tif(source){\r\n\t\t\t\t\tif(typeof values == \"object\"){\r\n\t\t\t\t\t\tfor(let key in values){\r\n\t\t\t\t\t\t\tsource[key] = values[key];\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tconsole.warn(\"Module Error - Invalid value type, it must be an object\");\r\n\t\t\t\t\t}\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.warn(\"Module Error - property does not exist:\", property);\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Module Error - module does not exist:\", name);\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\ttabulator.registerModule = function(modules){\r\n\t\t\tif(!Array.isArray(modules)){\r\n\t\t\t\tmodules = [modules];\r\n\t\t\t}\r\n\r\n\t\t\tmodules.forEach((mod) => {\r\n\t\t\t\ttabulator.registerModuleBinding(mod)\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\ttabulator.registerModuleBinding = function(mod){\r\n\t\t\ttabulator.moduleBindings[mod.moduleName] = mod;\r\n\t\t};\r\n\r\n\t\ttabulator.findTable = function(query){\r\n\t\t\tvar results = TableRegistry.lookupTable(query, true);\r\n\t\t\treturn Array.isArray(results) && !results.length ? false : results;\r\n\t\t}\r\n\r\n\t\t//ensure that module are bound to instantiated function\r\n\t\ttabulator.prototype.bindModules = function(){\r\n\t\t\tthis.modules = {};\r\n\r\n\t\t\tfor(var name in tabulator.moduleBindings){\r\n\t\t\t\tthis.modules[name] = new tabulator.moduleBindings[name](this);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tbindModules(tabulator, modules){\r\n\t\tvar mods = Object.values(modules);\r\n\r\n\t\ttabulator.registerModule(mods);\r\n\t}\r\n}","export default class VirtualDomHorizontal {\r\n\tconstructor(table){\r\n\t\tthis.table = table;\r\n\r\n\t\tthis.element = this.table.rowManager.tableElement;\r\n\t\tthis.holderEl = this.table.rowManager.element;\r\n\r\n\t\tthis.leftCol = 0;\r\n\t\tthis.rightCol = 0;\r\n\t\tthis.scrollLeft = 0;\r\n\r\n\t\tthis.vDomScrollPosLeft = 0;\r\n\t\tthis.vDomScrollPosRight = 0;\r\n\r\n\t\tthis.vDomPadLeft = 0;\r\n\t\tthis.vDomPadRight = 0;\r\n\r\n\t\tthis.fitDataColAvg = 0;\r\n\r\n\t\tthis.window = 200; //pixel margin to make column visible before it is shown on screen\r\n\r\n\t\tthis.initialized = false;\r\n\r\n\t\tthis.columns = [];\r\n\r\n\t\tif(this.compatabilityCheck()){\r\n\t\t\tthis.initialize();\r\n\t\t}\r\n\t}\r\n\r\n\tcompatabilityCheck(){\r\n\t\tvar options = this.table.options,\r\n\t\tfrozen = false,\r\n\t\tok = true;\r\n\r\n\t\tif(options.layout == \"fitDataTable\"){\r\n\t\t\tconsole.warn(\"Horizontal Vitrual DOM is not compatible with fitDataTable layout mode\");\r\n\t\t\tok = false;\r\n\t\t}\r\n\r\n\t\tif(options.responsiveLayout){\r\n\t\t\tconsole.warn(\"Horizontal Vitrual DOM is not compatible with responsive columns\");\r\n\t\t\tok = false;\r\n\t\t}\r\n\r\n\t\tif(this.table.rtl){\r\n\t\t\tconsole.warn(\"Horizontal Vitrual DOM is not currently compatible with RTL text direction\");\r\n\t\t\tok = false;\r\n\t\t}\r\n\r\n\t\tif(options.columns){\r\n\t\t\tfrozen = options.columns.find((col) => {\r\n\t\t\t\treturn col.frozen;\r\n\t\t\t});\r\n\r\n\t\t\tif(frozen){\r\n\t\t\t\tconsole.warn(\"Horizontal Vitrual DOM is not compatible with frozen columns\");\r\n\t\t\t\tok = false;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(!ok){\r\n\t\t\toptions.virtualDomHoz = false;\r\n\t\t}\r\n\r\n\t\treturn ok;\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tthis.holderEl.addEventListener(\"scroll\", () => {\r\n\t\t\tvar left = this.holderEl.scrollLeft;\r\n\r\n\t\t\tif(this.scrollLeft != left){\r\n\t\t\t\tthis.scrollLeft = left;\r\n\t\t\t\tthis.scroll(left - (this.vDomScrollPosLeft + this.window));\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tdeinitialize(){\r\n\t\tthis.initialized = false;\r\n\t}\r\n\r\n\tclear(){\r\n\t\tthis.columns = [];\r\n\r\n\t\tthis.leftCol = -1;\r\n\t\tthis.rightCol = 0;\r\n\r\n\t\tthis.vDomScrollPosLeft = 0;\r\n\t\tthis.vDomScrollPosRight = 0;\r\n\t\tthis.vDomPadLeft = 0;\r\n\t\tthis.vDomPadRight = 0;\r\n\t}\r\n\r\n\tdataChange(){\r\n\t\tvar change = false,\r\n\t\tcollsWidth = 0,\r\n\t\tcolEnd = 0,\r\n\t\tgroup, row, rowEl;\r\n\r\n\t\tif(this.table.options.layout === \"fitData\"){\r\n\t\t\tthis.table.columnManager.columnsByIndex.forEach((column) => {\r\n\t\t\t\tif(!column.definition.width && column.visible){\r\n\t\t\t\t\tchange = true;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tif(change){\r\n\t\t\t\tif(change && this.table.rowManager.getDisplayRows().length){\r\n\r\n\t\t\t\t\tthis.vDomScrollPosRight = this.scrollLeft + this.holderEl.clientWidth + this.window;\r\n\r\n\t\t\t\t\tif(this.table.options.groupBy){\r\n\t\t\t\t\t\tgroup = this.table.modules.groupRows.getGroups(false)[0];\r\n\r\n\t\t\t\t\t\trow = group.getRows(false)[0];\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\trow = this.table.rowManager.getDisplayRows()[0];\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif(row){\r\n\r\n\t\t\t\t\t\trowEl = row.getElement();\r\n\r\n\t\t\t\t\t\trow.generateCells();\r\n\r\n\t\t\t\t\t\tthis.element.appendChild(rowEl);\r\n\r\n\t\t\t\t\t\tfor(var colEnd = 0; colEnd < row.cells.length; colEnd++){\r\n\t\t\t\t\t\t\tlet cell = row.cells[colEnd];\r\n\t\t\t\t\t\t\trowEl.appendChild(cell.getElement());\r\n\r\n\t\t\t\t\t\t\tcell.column.reinitializeWidth();\r\n\r\n\t\t\t\t\t\t\tcollsWidth += cell.column.getWidth();\r\n\r\n\t\t\t\t\t\t\tif(collsWidth > this.vDomScrollPosRight){\r\n\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\trowEl.parentNode.removeChild(rowEl);\r\n\r\n\t\t\t\t\t\tthis.fitDataColAvg = Math.floor(collsWidth / (colEnd + 1));\r\n\r\n\t\t\t\t\t\tfor(colEnd; colEnd < this.table.columnManager.columnsByIndex.length; colEnd++){\r\n\t\t\t\t\t\t\tthis.table.columnManager.columnsByIndex[colEnd].setWidth(this.fitDataColAvg);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tthis.reinitialize(false, true);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tif(this.table.options.layout === \"fitColumns\"){\r\n\t\t\t\tthis.table.modules.layout.layout();\r\n\t\t\t\tthis.table.vdomHoz.reinitialize(false, true);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tfitDataLayoutOverride(){\r\n\t\tfor(let i = this.leftCol; i <= this.rightCol; i++){\r\n\t\t\tthis.columns[i].reinitializeWidth();\r\n\t\t}\r\n\t}\r\n\r\n\treinitialize(update, blockRedraw){\r\n\t\tvar old = {\r\n\t\t\tcols:this.columns,\r\n\t\t\tleftCol:this.leftCol,\r\n\t\t\trightCol:this.rightCol,\r\n\t\t};\r\n\r\n\t\tif(update && !this.initialized){\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.clear();\r\n\r\n\t\tthis.scrollLeft = this.holderEl.scrollLeft;\r\n\r\n\t\tthis.vDomScrollPosLeft = this.scrollLeft - this.window;\r\n\t\tthis.vDomScrollPosRight = this.scrollLeft + this.holderEl.clientWidth + this.window;\r\n\r\n\t\tvar colPos = 0;\r\n\r\n\t\tthis.table.columnManager.columnsByIndex.forEach((column) => {\r\n\t\t\tvar config = {};\r\n\r\n\t\t\tif(column.visible){\r\n\t\t\t\tvar width = column.getWidth();\r\n\r\n\t\t\t\tconfig.leftPos = colPos;\r\n\t\t\t\tconfig.rightPos = colPos + width;\r\n\r\n\t\t\t\tconfig.width = width;\r\n\r\n\t\t\t\tif (_this18.table.options.layout === \"fitData\") {\r\n\r\n\t\t\t\t config.fitDataCheck = true;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif((colPos + width > this.vDomScrollPosLeft) && (colPos < this.vDomScrollPosRight)){\r\n\t \t\t//column is visible\r\n\r\n\t \t\tif(this.leftCol == -1){\r\n\t \t\t\tthis.leftCol = this.columns.length;\r\n\t \t\t\tthis.vDomPadLeft = colPos;\r\n\t \t\t}\r\n\r\n\t \t\tthis.rightCol = this.columns.length;\r\n\t \t}else{\r\n\t \t\t// column is hidden\r\n\t \t\tif(this.leftCol !== -1){\r\n\t \t\t\tthis.vDomPadRight += width;\r\n\t \t\t}\r\n\t \t}\r\n\r\n\t \tthis.columns.push(column);\r\n\r\n\t \tcolumn.modules.vdomHoz = config;\r\n\r\n\t \tcolPos += width;\r\n\t }\r\n\t });\r\n\r\n\t\tthis.element.style.paddingLeft = this.vDomPadLeft + \"px\";\r\n\t\tthis.element.style.paddingRight = this.vDomPadRight + \"px\";\r\n\r\n\t\tthis.initialized = true;\r\n\r\n\t\tif(!blockRedraw){\r\n\t\t\tif(!update || this.reinitChanged(old)){\r\n\t\t\t\tthis.renitializeRows();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.holderEl.scrollLeft = this.scrollLeft;\r\n\t}\r\n\r\n\treinitChanged(old){\r\n\t\tvar match = true;\r\n\r\n\t\tif(old.cols.length !== this.columns.length || old.leftCol !== this.leftCol || old.rightCol !== this.rightCol){\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\told.cols.forEach((col, i) => {\r\n\t\t\tif(col !== this.columns[i]){\r\n\t\t\t\tmatch = false;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn !match;\r\n\t}\r\n\r\n\trenitializeRows(){\r\n\t\tvar rows = this.table.rowManager.getVisibleRows();\r\n\t\trows.forEach((row) => {\r\n\t\t\tthis.reinitializeRow(row, true);\r\n\t\t});\r\n\t}\r\n\r\n\tscroll(diff){\r\n\t\tthis.vDomScrollPosLeft += diff;\r\n\t\tthis.vDomScrollPosRight += diff;\r\n\r\n\t\tif(diff > (this.holderEl.clientWidth * .8)){\r\n\t\t\tthis.reinitialize();\r\n\t\t}else{\r\n\t\t\tif(diff > 0){\r\n\t\t\t\t//scroll right\r\n\t\t\t\tthis.addColRight();\r\n\t\t\t\tthis.removeColLeft();\r\n\t\t\t}else{\r\n\t\t\t\t//scroll left\r\n\t\t\t\tthis.addColLeft();\r\n\t\t\t\tthis.removeColRight();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tcolPositionAdjust (start, end, diff){\r\n\t\tfor(let i = start; i < end; i++){\r\n\t\t\tlet column = this.columns[i];\r\n\r\n\t\t\tcolumn.modules.vdomHoz.leftPos += diff;\r\n\t\t\tcolumn.modules.vdomHoz.rightPos += diff;\r\n\t\t}\r\n\t}\r\n\r\n\taddColRight(){\r\n\t\tvar column = this.columns[this.rightCol + 1],\r\n\t\trows, newWidth, widthDiff;\r\n\r\n\t\tif(column && column.modules.vdomHoz.leftPos <= this.vDomScrollPosRight){\r\n\r\n\t\t\trows = this.table.rowManager.getVisibleRows();\r\n\r\n\t\t\trows.forEach((row) => {\r\n\t\t\t\tif(row.type !== \"group\"){\r\n\t\t\t\t\tvar cell = row.getCell(column);\r\n\t\t\t\t\trow.getElement().appendChild(cell.getElement());\r\n\t\t\t\t\tcell.cellRendered();\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tthis.fitDataColActualWidthCheck(column);\r\n\r\n\t\t\tthis.rightCol++;\r\n\r\n\t\t\tif(this.rightCol >= (this.columns.length - 1)){\r\n\t\t\t\tthis.vDomPadRight = 0;\r\n\t\t\t}else{\r\n\t\t\t\tthis.vDomPadRight -= column.getWidth();\r\n\t\t\t}\r\n\r\n\t\t\tthis.element.style.paddingRight = this.vDomPadRight + \"px\";\r\n\r\n\t\t\tthis.addColRight();\r\n\t\t}\r\n\t}\r\n\r\n\taddColLeft(){\r\n\t\tvar column = this.columns[this.leftCol - 1],\r\n\t\trows;\r\n\r\n\t\tif(column && column.modules.vdomHoz.rightPos >= this.vDomScrollPosLeft){\r\n\t\t\tvar rows = this.table.rowManager.getVisibleRows();\r\n\r\n\t\t\trows.forEach((row) => {\r\n\t\t\t\tif(row.type !== \"group\"){\r\n\t\t\t\t\tvar cell = row.getCell(column);\r\n\t\t\t\t\trow.getElement().prepend(cell.getElement());\r\n\t\t\t\t\tcell.cellRendered();\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tthis.fitDataColActualWidthCheck(column);\r\n\r\n\t\t\tif(!this.leftCol){\r\n\t\t\t\tthis.vDomPadLeft = 0;\r\n\t\t\t}else{\r\n\t\t\t\tthis.vDomPadLeft -= column.getWidth();\r\n\t\t\t}\r\n\r\n\t\t\tthis.element.style.paddingLeft = this.vDomPadLeft + \"px\";\r\n\r\n\t\t\tthis.leftCol--;\r\n\r\n\t\t\tthis.addColLeft();\r\n\t\t}\r\n\t}\r\n\r\n\tremoveColRight(column){\r\n\t\tvar column = this.columns[this.rightCol],\r\n\t\trows;\r\n\r\n\t\tif(column && column.modules.vdomHoz.leftPos > this.vDomScrollPosRight){\r\n\t\t\trows = this.table.rowManager.getVisibleRows();\r\n\r\n\t\t\tcolumn.modules.vdomHoz.visible = false;\r\n\r\n\t\t\trows.forEach((row) => {\r\n\t\t\t\tif(row.type !== \"group\"){\r\n\t\t\t\t\tvar cell = row.getCell(column);\r\n\t\t\t\t\trow.getElement().removeChild(cell.getElement());\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tthis.vDomPadRight += column.getWidth();\r\n\t\t\tthis.element.style.paddingRight = this.vDomPadRight + \"px\";\r\n\r\n\t\t\tthis.rightCol --;\r\n\r\n\t\t\tthis.removeColRight();\r\n\t\t}\r\n\t}\r\n\r\n\tremoveColLeft(){\r\n\t\tvar column = this.columns[this.leftCol],\r\n\t\trows;\r\n\r\n\t\tif(column && column.modules.vdomHoz.rightPos < this.vDomScrollPosLeft){\r\n\r\n\t\t\trows = this.table.rowManager.getVisibleRows();\r\n\r\n\t\t\trows.forEach((row) => {\r\n\t\t\t\tif(row.type !== \"group\"){\r\n\t\t\t\t\tvar cell = row.getCell(column);\r\n\t\t\t\t\trow.getElement().removeChild(cell.getElement());\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tthis.vDomPadLeft += column.getWidth();\r\n\t\t\tthis.element.style.paddingLeft = this.vDomPadLeft + \"px\";\r\n\r\n\t\t\tthis.leftCol ++;\r\n\r\n\t\t\tthis.removeColLeft();\r\n\t\t}\r\n\t}\r\n\r\n\tfitDataColActualWidthCheck(column){\r\n\t var newWidth, widthDiff;\r\n\r\n\t if(column.modules.vdomHoz.fitDataCheck){\r\n\t column.reinitializeWidth();\r\n\r\n\t newWidth = column.getWidth();\r\n\t widthDiff = newWidth - column.modules.vdomHoz.width;\r\n\r\n\t if(widthDiff){\r\n\t column.modules.vdomHoz.rightPos += widthDiff;\r\n\t column.modules.vdomHoz.width = newWidth;\r\n\t this.colPositionAdjust(this.rightCol + 2, this.columns.length, widthDiff);\r\n\t }\r\n\r\n\t column.modules.vdomHoz.fitDataCheck = false;\r\n\t }\r\n\t};\r\n\r\n\tinitializeRow(row){\r\n\t\tif(row.type !== \"group\"){\r\n\t\t\trow.modules.vdomHoz = {\r\n\t\t\t\tleftCol:this.leftCol,\r\n\t\t\t\trightCol:this.rightCol,\r\n\t\t\t};\r\n\r\n\t\t\tfor(let i = this.leftCol; i <= this.rightCol; i++){\r\n\t\t\t\tlet column = this.columns[i];\r\n\r\n\t\t\t\tif(column && column.visible){\r\n\t\t\t\t\tlet cell = row.getCell(column);\r\n\r\n\t\t\t\t\trow.getElement().appendChild(cell.getElement());\r\n\t\t\t\t\tcell.cellRendered();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\treinitializeRow(row, force){\r\n\t\tif(row.type !== \"group\"){\r\n\t\t\tif(force || !row.modules.vdomHoz || row.modules.vdomHoz.leftCol !== this.leftCol || row.modules.vdomHoz.rightCol !== this.rightCol){\r\n\t\t\t\tvar rowEl = row.getElement();\r\n\t\t\t\twhile(rowEl.firstChild) rowEl.removeChild(rowEl.firstChild);\r\n\r\n\t\t\t\tthis.initializeRow(row);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}","'use strict';\r\n\r\nimport defaultOptions from './defaults/options.js';\r\n\r\n\r\nimport ColumnManager from './ColumnManager.js';\r\nimport RowManager from './RowManager.js';\r\nimport FooterManager from './FooterManager.js';\r\n\r\nimport TableRegistry from './TableRegistry.js';\r\nimport ModuleBinder from './ModuleBinder.js';\r\n\r\nimport VirtualDomHorizontal from './renderers/VirtualDomHorizontal.js';\r\n\r\nclass Tabulator {\r\n\r\n\tconstructor(element, options){\r\n\r\n\t\tthis.options = {};\r\n\r\n\t\tthis.columnManager = null; // hold Column Manager\r\n\t\tthis.rowManager = null; //hold Row Manager\r\n\t\tthis.footerManager = null; //holder Footer Manager\r\n\t\tthis.vdomHoz = null; //holder horizontal virtual dom\r\n\r\n\t\tthis.browser = \"\"; //hold current browser type\r\n\t\tthis.browserSlow = false; //handle reduced functionality for slower browsers\r\n\t\tthis.browserMobile = false; //check if running on moble, prevent resize cancelling edit on keyboard appearence\r\n\t\tthis.rtl = false; //check if the table is in RTL mode\r\n\r\n\t\tthis.modules = {}; //hold all modules bound to this table\r\n\r\n\t\tif(this.initializeElement(element)){\r\n\t\t\tthis.initializeOptions(options || {});\r\n\t\t\tthis._create();\r\n\t\t}\r\n\r\n\t\tTableRegistry.register(this); //register table for inderdevice communication\r\n\t}\r\n\r\n\tinitializeOptions(options){\r\n\r\n\t\tvar defaults = Tabulator.defaultOptions;\r\n\r\n\t\t//warn user if option is not available\r\n\t\tif(options.invalidOptionWarnings !== false){\r\n\t\t\tfor (var key in options){\r\n\t\t\t\tif(typeof defaults[key] === \"undefined\"){\r\n\t\t\t\t\tconsole.warn(\"Invalid table constructor option:\", key)\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//assign options to table\r\n\t\tfor (var key in defaults){\r\n\t\t\tif(key in options){\r\n\t\t\t\tthis.options[key] = options[key];\r\n\t\t\t}else{\r\n\t\t\t\tif(Array.isArray(defaults[key])){\r\n\t\t\t\t\tthis.options[key] = Object.assign([], defaults[key]);\r\n\t\t\t\t}else if(typeof defaults[key] === \"object\" && defaults[key] !== null){\r\n\t\t\t\t\tthis.options[key] = Object.assign({}, defaults[key]);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tthis.options[key] = defaults[key];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tinitializeElement(element){\r\n\t\tif(typeof HTMLElement !== \"undefined\" && element instanceof HTMLElement){\r\n\t\t\tthis.element = element;\r\n\t\t\treturn true;\r\n\t\t}else if(typeof element === \"string\"){\r\n\t\t\tthis.element = document.querySelector(element);\r\n\r\n\t\t\tif(this.element){\r\n\t\t\t\treturn true;\r\n\t\t\t}else{\r\n\t\t\t\tconsole.error(\"Tabulator Creation Error - no element found matching selector: \", element);\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tconsole.error(\"Tabulator Creation Error - Invalid element provided:\", element);\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\trtlCheck(){\r\n\t\tvar style = window.getComputedStyle(this.element);\r\n\r\n\t\tswitch(this.options.textDirection){\r\n\t\t\tcase\"auto\":\r\n\t\t\tif(style.direction !== \"rtl\"){\r\n\t\t\t\tbreak;\r\n\t\t\t};\r\n\r\n\t\t\tcase \"rtl\":\r\n\t\t\tthis.element.classList.add(\"tabulator-rtl\");\r\n\t\t\tthis.rtl = true;\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"ltr\":\r\n\t\t\tthis.element.classList.add(\"tabulator-ltr\");\r\n\r\n\t\t\tdefault:\r\n\t\t\tthis.rtl = false;\r\n\t\t}\r\n\t}\r\n\r\n\t//convert depricated functionality to new functions\r\n\t_mapDepricatedFunctionality(){\r\n\t\t//all previously deprecated functionality removed in the 5.0 release\r\n\t}\r\n\r\n\t_clearSelection(){\r\n\r\n\t\tthis.element.classList.add(\"tabulator-block-select\");\r\n\r\n\t\tif (window.getSelection) {\r\n\t\t if (window.getSelection().empty) { // Chrome\r\n\t\t \twindow.getSelection().empty();\r\n\t\t } else if (window.getSelection().removeAllRanges) { // Firefox\r\n\t\t \twindow.getSelection().removeAllRanges();\r\n\t\t }\r\n\t\t} else if (document.selection) { // IE?\r\n\t\t\tdocument.selection.empty();\r\n\t\t}\r\n\r\n\t\tthis.element.classList.remove(\"tabulator-block-select\");\r\n\t}\r\n\r\n\t//concreate table\r\n\t_create(){\r\n\t\tthis._clearObjectPointers();\r\n\r\n\t\tthis._mapDepricatedFunctionality();\r\n\r\n\t\tthis.bindModules();\r\n\r\n\t\tthis.rtlCheck();\r\n\r\n\t\tif(this.element.tagName === \"TABLE\"){\r\n\t\t\tif(this.modExists(\"htmlTableImport\", true)){\r\n\t\t\t\tthis.modules.htmlTableImport.parseTable();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.columnManager = new ColumnManager(this);\r\n\t\tthis.rowManager = new RowManager(this);\r\n\t\tthis.footerManager = new FooterManager(this);\r\n\r\n\t\tthis.columnManager.setRowManager(this.rowManager);\r\n\t\tthis.rowManager.setColumnManager(this.columnManager);\r\n\r\n\t\tif(this.options.virtualDomHoz){\r\n\t\t\tthis.vdomHoz = new VirtualDomHorizontal(this);\r\n\t\t}\r\n\r\n\t\tthis._buildElement();\r\n\r\n\t\tthis._loadInitialData();\r\n\t}\r\n\r\n\t//clear pointers to objects in default config object\r\n\t_clearObjectPointers(){\r\n\t\tthis.options.columns = this.options.columns.slice(0);\r\n\r\n\t\tif(!this.options.reactiveData){\r\n\t\t\tthis.options.data = this.options.data.slice(0);\r\n\t\t}\r\n\t}\r\n\r\n\t//build tabulator element\r\n\t_buildElement(){\r\n\t\tvar element = this.element,\r\n\t\tmod = this.modules,\r\n\t\toptions = this.options;\r\n\r\n\t\toptions.tableBuilding.call(this);\r\n\r\n\t\telement.classList.add(\"tabulator\");\r\n\t\telement.setAttribute(\"role\", \"grid\");\r\n\r\n\t\t//empty element\r\n\t\twhile(element.firstChild) element.removeChild(element.firstChild);\r\n\r\n\t\t//set table height\r\n\t\tif(options.height){\r\n\t\t\toptions.height = isNaN(options.height) ? options.height : options.height + \"px\";\r\n\t\t\telement.style.height = options.height;\r\n\t\t}\r\n\r\n\t\t//set table min height\r\n\t\tif(options.minHeight !== false){\r\n\t\t\toptions.minHeight = isNaN(options.minHeight) ? options.minHeight : options.minHeight + \"px\";\r\n\t\t\telement.style.minHeight = options.minHeight;\r\n\t\t}\r\n\r\n\t\t//set table maxHeight\r\n\t\tif(options.maxHeight !== false){\r\n\t\t\toptions.maxHeight = isNaN(options.maxHeight) ? options.maxHeight : options.maxHeight + \"px\";\r\n\t\t\telement.style.maxHeight = options.maxHeight;\r\n\t\t}\r\n\r\n\t\tthis.columnManager.initialize();\r\n\t\tthis.rowManager.initialize();\r\n\r\n\t\tthis._detectBrowser();\r\n\r\n\t\tif(this.modExists(\"layout\", true)){\r\n\t\t\tmod.layout.initialize(options.layout);\r\n\t\t}\r\n\r\n\t\t//set localization\r\n\t\tmod.localize.initialize();\r\n\r\n\t\tif(options.headerFilterPlaceholder !== false){\r\n\t\t\tmod.localize.setHeaderFilterPlaceholder(options.headerFilterPlaceholder);\r\n\t\t}\r\n\r\n\t\tfor(let locale in options.langs){\r\n\t\t\tmod.localize.installLang(locale, options.langs[locale]);\r\n\t\t}\r\n\r\n\t\tmod.localize.setLocale(options.locale);\r\n\r\n\t\t//configure placeholder element\r\n\t\tif(typeof options.placeholder == \"string\"){\r\n\r\n\t\t\tvar el = document.createElement(\"div\");\r\n\t\t\tel.classList.add(\"tabulator-placeholder\");\r\n\r\n\t\t\tvar span = document.createElement(\"span\");\r\n\t\t\tspan.innerHTML = options.placeholder;\r\n\r\n\t\t\tel.appendChild(span);\r\n\r\n\t\t\toptions.placeholder = el;\r\n\t\t}\r\n\r\n\t\t//build table elements\r\n\t\telement.appendChild(this.columnManager.getElement());\r\n\t\telement.appendChild(this.rowManager.getElement());\r\n\r\n\t\tif(options.footerElement){\r\n\t\t\tthis.footerManager.activate();\r\n\t\t}\r\n\r\n\t\tif(options.persistence && this.modExists(\"persistence\", true)){\r\n\t\t\tmod.persistence.initialize();\r\n\t\t}\r\n\r\n\t\tif(options.movableRows && this.modExists(\"moveRow\")){\r\n\t\t\tmod.moveRow.initialize();\r\n\t\t}\r\n\r\n\t\tif(options.autoColumns && this.options.data){\r\n\t\t\tthis.columnManager.generateColumnsFromRowData(this.options.data);\r\n\t\t}\r\n\r\n\t\tif(this.modExists(\"columnCalcs\")){\r\n\t\t\tmod.columnCalcs.initialize();\r\n\t\t}\r\n\r\n\t\tthis.columnManager.setColumns(options.columns);\r\n\r\n\t\tif(options.dataTree && this.modExists(\"dataTree\", true)){\r\n\t\t\tmod.dataTree.initialize();\r\n\t\t}\r\n\r\n\t\tif(this.modExists(\"frozenRows\")){\r\n\t\t\tthis.modules.frozenRows.initialize();\r\n\t\t}\r\n\r\n\t\tif(((options.persistence && this.modExists(\"persistence\", true) && mod.persistence.config.sort) || options.initialSort) && this.modExists(\"sort\", true)){\r\n\t\t\tvar sorters = [];\r\n\r\n\t\t\tif(options.persistence && this.modExists(\"persistence\", true) && mod.persistence.config.sort){\r\n\t\t\t\tsorters = mod.persistence.load(\"sort\");\r\n\r\n\t\t\t\tif(sorters === false && options.initialSort){\r\n\t\t\t\t\tsorters = options.initialSort;\r\n\t\t\t\t}\r\n\t\t\t}else if(options.initialSort){\r\n\t\t\t\tsorters = options.initialSort;\r\n\t\t\t}\r\n\r\n\t\t\tmod.sort.setSort(sorters);\r\n\t\t}\r\n\r\n\t\tif(((options.persistence && this.modExists(\"persistence\", true) && mod.persistence.config.filter) || options.initialFilter) && this.modExists(\"filter\", true)){\r\n\t\t\tvar filters = [];\r\n\r\n\r\n\t\t\tif(options.persistence && this.modExists(\"persistence\", true) && mod.persistence.config.filter){\r\n\t\t\t\tfilters = mod.persistence.load(\"filter\");\r\n\r\n\t\t\t\tif(filters === false && options.initialFilter){\r\n\t\t\t\t\tfilters = options.initialFilter;\r\n\t\t\t\t}\r\n\t\t\t}else if(options.initialFilter){\r\n\t\t\t\tfilters = options.initialFilter;\r\n\t\t\t}\r\n\r\n\t\t\tmod.filter.setFilter(filters);\r\n\t\t}\r\n\r\n\t\tif(options.initialHeaderFilter && this.modExists(\"filter\", true)){\r\n\t\t\toptions.initialHeaderFilter.forEach((item) => {\r\n\r\n\t\t\t\tvar column = this.columnManager.findColumn(item.field);\r\n\r\n\t\t\t\tif(column){\r\n\t\t\t\t\tmod.filter.setHeaderFilterValue(column, item.value);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.warn(\"Column Filter Error - No matching column found:\", item.field);\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\r\n\t\tif(this.modExists(\"ajax\")){\r\n\t\t\tmod.ajax.initialize();\r\n\t\t}\r\n\r\n\t\tif(options.pagination && this.modExists(\"page\", true)){\r\n\t\t\tmod.page.initialize();\r\n\t\t}\r\n\r\n\t\tif(options.groupBy && this.modExists(\"groupRows\", true)){\r\n\t\t\tmod.groupRows.initialize();\r\n\t\t}\r\n\r\n\t\tif(this.modExists(\"keybindings\")){\r\n\t\t\tmod.keybindings.initialize();\r\n\t\t}\r\n\r\n\t\tif(this.modExists(\"selectRow\")){\r\n\t\t\tmod.selectRow.clearSelectionData(true);\r\n\t\t}\r\n\r\n\t\tif(options.autoResize && this.modExists(\"resizeTable\")){\r\n\t\t\tmod.resizeTable.initialize();\r\n\t\t}\r\n\r\n\t\tif(this.modExists(\"clipboard\")){\r\n\t\t\tmod.clipboard.initialize();\r\n\t\t}\r\n\r\n\t\tif(options.printAsHtml && this.modExists(\"print\")){\r\n\t\t\tmod.print.initialize();\r\n\t\t}\r\n\r\n\t\toptions.tableBuilt.call(this);\r\n\t}\r\n\r\n\t_loadInitialData(){\r\n\t\tif(this.options.pagination && this.modExists(\"page\")){\r\n\t\t\tthis.modules.page.reset(true, true);\r\n\r\n\t\t\tif(this.options.pagination == \"local\"){\r\n\t\t\t\tif(this.options.data.length){\r\n\t\t\t\t\tthis.rowManager.setData(this.options.data, false, true);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tif((this.options.ajaxURL || this.options.ajaxURLGenerator) && this.modExists(\"ajax\")){\r\n\t\t\t\t\t\tthis.modules.ajax.loadData(false, true).then(()=>{}).catch(()=>{\r\n\t\t\t\t\t\t\tif(this.options.paginationInitialPage){\r\n\t\t\t\t\t\t\t\tthis.modules.page.setPage(this.options.paginationInitialPage);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tthis.rowManager.setData(this.options.data, false, true);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(this.options.paginationInitialPage){\r\n\t\t\t\t\tthis.modules.page.setPage(this.options.paginationInitialPage);\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tif(this.options.ajaxURL){\r\n\t\t\t\t\tthis.modules.page.setPage(this.options.paginationInitialPage).then(()=>{}).catch(()=>{});\r\n\t\t\t\t}else{\r\n\t\t\t\t\tthis.rowManager.setData([], false, true);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tif(this.options.data.length){\r\n\t\t\t\tthis.rowManager.setData(this.options.data);\r\n\t\t\t}else{\r\n\t\t\t\tif((this.options.ajaxURL || this.options.ajaxURLGenerator) && this.modExists(\"ajax\")){\r\n\t\t\t\t\tthis.modules.ajax.loadData(false, true).then(()=>{}).catch(()=>{});\r\n\t\t\t\t}else{\r\n\t\t\t\t\tthis.rowManager.setData(this.options.data, false, true);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//deconstructor\r\n\tdestroy(){\r\n\t\tvar element = this.element;\r\n\r\n\t\tcomms(this); //deregister table from inderdevice communication\r\n\r\n\t\tif(this.options.reactiveData && this.modExists(\"reactiveData\", true)){\r\n\t\t\tthis.modules.reactiveData.unwatchData();\r\n\t\t}\r\n\r\n\t\t//clear row data\r\n\t\tthis.rowManager.rows.forEach(function(row){\r\n\t\t\trow.wipe();\r\n\t\t});\r\n\r\n\t\tthis.rowManager.rows = [];\r\n\t\tthis.rowManager.activeRows = [];\r\n\t\tthis.rowManager.displayRows = [];\r\n\r\n\t\t//clear event bindings\r\n\t\tif(this.options.autoResize && this.modExists(\"resizeTable\")){\r\n\t\t\tthis.modules.resizeTable.clearBindings();\r\n\t\t}\r\n\r\n\t\tif(this.modExists(\"keybindings\")){\r\n\t\t\tthis.modules.keybindings.clearBindings();\r\n\t\t}\r\n\r\n\t\t//clear DOM\r\n\t\twhile(element.firstChild) element.removeChild(element.firstChild);\r\n\t\telement.classList.remove(\"tabulator\");\r\n\t}\r\n\r\n\t_detectBrowser(){\r\n\t\tvar ua = navigator.userAgent||navigator.vendor||window.opera;\r\n\r\n\t\tif(ua.indexOf(\"Trident\") > -1){\r\n\t\t\tthis.browser = \"ie\";\r\n\t\t\tthis.browserSlow = true;\r\n\t\t}else if(ua.indexOf(\"Edge\") > -1){\r\n\t\t\tthis.browser = \"edge\";\r\n\t\t\tthis.browserSlow = true;\r\n\t\t}else if(ua.indexOf(\"Firefox\") > -1){\r\n\t\t\tthis.browser = \"firefox\";\r\n\t\t\tthis.browserSlow = false;\r\n\t\t}else{\r\n\t\t\tthis.browser = \"other\";\r\n\t\t\tthis.browserSlow = false;\r\n\t\t}\r\n\r\n\t\tthis.browserMobile = /(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i.test(ua)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\\-(n|u)|c55\\/|capi|ccwa|cdm\\-|cell|chtm|cldc|cmd\\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\\-s|devi|dica|dmob|do(c|p)o|ds(12|\\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\\-|_)|g1 u|g560|gene|gf\\-5|g\\-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd\\-(m|p|t)|hei\\-|hi(pt|ta)|hp( i|ip)|hs\\-c|ht(c(\\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\\-(20|go|ma)|i230|iac( |\\-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc\\-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|\\-[a-w])|libw|lynx|m1\\-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m\\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\\-2|po(ck|rt|se)|prox|psio|pt\\-g|qa\\-a|qc(07|12|21|32|60|\\-[2-7]|i\\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\\-|oo|p\\-)|sdk\\/|se(c(\\-|0|1)|47|mc|nd|ri)|sgh\\-|shar|sie(\\-|m)|sk\\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\\-|v\\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\\-|tdg\\-|tel(i|m)|tim\\-|t\\-mo|to(pl|sh)|ts(70|m\\-|m3|m5)|tx\\-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\\-|your|zeto|zte\\-/i.test(ua.substr(0,4));\r\n\t}\r\n\r\n\t////////////////// Data Handling //////////////////\r\n\t//block table redrawing\r\n\tblockRedraw(){\r\n\t\treturn this.rowManager.blockRedraw();\r\n\t}\r\n\r\n\t//restore table redrawing\r\n\trestoreRedraw(){\r\n\t\treturn this.rowManager.restoreRedraw();\r\n\t}\r\n\r\n\t//local data from local file\r\n\tsetDataFromLocalFile(extensions){\r\n\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tvar input = document.createElement(\"input\");\r\n\t\t\tinput.type = \"file\";\r\n\t\t\tinput.accept = extensions || \".json,application/json\";\r\n\r\n\t\t\tinput.addEventListener(\"change\", (e) => {\r\n\t\t\t\tvar file = input.files[0],\r\n\t\t\t\treader = new FileReader(),\r\n\t\t\t\tdata;\r\n\r\n\t\t\t\treader.readAsText(file);\r\n\r\n\t\t\t\treader.onload = (e) => {\r\n\r\n\t\t\t\t\ttry {\r\n\t\t\t\t\t\tdata = JSON.parse(reader.result);\r\n\t\t\t\t\t} catch(e) {\r\n\t\t\t\t\t\tconsole.warn(\"File Load Error - File contents is invalid JSON\", e);\r\n\t\t\t\t\t\treject(e);\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tthis.setData(data)\r\n\t\t\t\t\t.then((data) => {\r\n\t\t\t\t\t\tresolve(data);\r\n\t\t\t\t\t})\r\n\t\t\t\t\t.catch((err) => {\r\n\t\t\t\t\t\tresolve(err);\r\n\t\t\t\t\t});\r\n\t\t\t\t};\r\n\r\n\t\t\t\treader.onerror = (e) => {\r\n\t\t\t\t\tconsole.warn(\"File Load Error - Unable to read file\");\r\n\t\t\t\t\treject();\r\n\t\t\t\t};\r\n\t\t\t});\r\n\r\n\t\t\tinput.click();\r\n\t\t});\r\n\t}\r\n\r\n\t//load data\r\n\tsetData(data, params, config){\r\n\t\tif(this.modExists(\"ajax\")){\r\n\t\t\tthis.modules.ajax.blockActiveRequest();\r\n\t\t}\r\n\r\n\t\treturn this._setData(data, params, config, false, true);\r\n\t}\r\n\r\n\t_setData(data, params, config, inPosition, columnsChanged){\r\n\t\tif(typeof(data) === \"string\"){\r\n\t\t\tif (data.indexOf(\"{\") == 0 || data.indexOf(\"[\") == 0){\r\n\t\t\t\t//data is a json encoded string\r\n\t\t\t\treturn this.rowManager.setData(JSON.parse(data), inPosition, columnsChanged);\r\n\t\t\t}else{\r\n\r\n\t\t\t\tif(this.modExists(\"ajax\", true)){\r\n\t\t\t\t\tif(params){\r\n\t\t\t\t\t\tthis.modules.ajax.setParams(params);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif(config){\r\n\t\t\t\t\t\tthis.modules.ajax.setConfig(config);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tthis.modules.ajax.setUrl(data);\r\n\r\n\t\t\t\t\tif(this.options.pagination == \"remote\" && this.modExists(\"page\", true)){\r\n\t\t\t\t\t\tthis.modules.page.reset(true, true);\r\n\t\t\t\t\t\treturn this.modules.page.setPage(1);\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\t//assume data is url, make ajax call to url to get data\r\n\t\t\t\t\t\treturn this.modules.ajax.loadData(inPosition, columnsChanged);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tif(data){\r\n\t\t\t\t//asume data is already an object\r\n\t\t\t\treturn this.rowManager.setData(data, inPosition, columnsChanged);\r\n\t\t\t}else{\r\n\t\t\t\t//no data provided, check if ajaxURL is present;\r\n\t\t\t\tif(this.modExists(\"ajax\") && (this.modules.ajax.getUrl || this.options.ajaxURLGenerator)){\r\n\t\t\t\t\tif(this.options.pagination == \"remote\" && this.modExists(\"page\", true)){\r\n\t\t\t\t\t\tthis.modules.page.reset(true, true);\r\n\t\t\t\t\t\treturn this.modules.page.setPage(1);\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\treturn this.modules.ajax.loadData(inPosition, columnsChanged);\r\n\t\t\t\t\t}\r\n\t\t\t\t}else{\r\n\t\t\t\t\t//empty data\r\n\t\t\t\t\treturn this.rowManager.setData([], inPosition, columnsChanged);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//clear data\r\n\tclearData(){\r\n\t\tif(this.modExists(\"ajax\")){\r\n\t\t\tthis.modules.ajax.blockActiveRequest();\r\n\t\t}\r\n\r\n\t\tthis.rowManager.clearData();\r\n\t}\r\n\r\n\t//get table data array\r\n\tgetData(active){\r\n\t\treturn this.rowManager.getData(active);\r\n\t}\r\n\r\n\t//get table data array count\r\n\tgetDataCount(active){\r\n\t\treturn this.rowManager.getDataCount(active);\r\n\t}\r\n\r\n\t//search for specific row components\r\n\tsearchRows(field, type, value){\r\n\t\tif(this.modExists(\"filter\", true)){\r\n\t\t\treturn this.modules.filter.search(\"rows\", field, type, value);\r\n\t\t}\r\n\t}\r\n\r\n\t//search for specific data\r\n\tsearchData(field, type, value){\r\n\t\tif(this.modExists(\"filter\", true)){\r\n\t\t\treturn this.modules.filter.search(\"data\", field, type, value);\r\n\t\t}\r\n\t}\r\n\r\n\t//get table html\r\n\tgetHtml(visible, style, config){\r\n\t\tif(this.modExists(\"export\", true)){\r\n\t\t\treturn this.modules.export.getHtml(visible, style, config);\r\n\t\t}\r\n\t}\r\n\r\n\t//get print html\r\n\tprint(visible, style, config){\r\n\t\tif(this.modExists(\"print\", true)){\r\n\t\t\treturn this.modules.print.printFullscreen(visible, style, config);\r\n\t\t}\r\n\t}\r\n\r\n\t//retrieve Ajax URL\r\n\tgetAjaxUrl(){\r\n\t\tif(this.modExists(\"ajax\", true)){\r\n\t\t\treturn this.modules.ajax.getUrl();\r\n\t\t}\r\n\t}\r\n\r\n\t//replace data, keeping table in position with same sort\r\n\treplaceData(data, params, config){\r\n\t\tif(this.modExists(\"ajax\")){\r\n\t\t\tthis.modules.ajax.blockActiveRequest();\r\n\t\t}\r\n\r\n\t\treturn this._setData(data, params, config, true);\r\n\t}\r\n\r\n\t//update table data\r\n\tupdateData(data){\r\n\t\tvar responses = 0;\r\n\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tif(this.modExists(\"ajax\")){\r\n\t\t\t\tthis.modules.ajax.blockActiveRequest();\r\n\t\t\t}\r\n\r\n\t\t\tif(typeof data === \"string\"){\r\n\t\t\t\tdata = JSON.parse(data);\r\n\t\t\t}\r\n\r\n\t\t\tif(data){\r\n\t\t\t\tdata.forEach((item) => {\r\n\t\t\t\t\tvar row = this.rowManager.findRow(item[this.options.index]);\r\n\r\n\t\t\t\t\tif(row){\r\n\t\t\t\t\t\tresponses++;\r\n\r\n\t\t\t\t\t\trow.updateData(item)\r\n\t\t\t\t\t\t.then(()=>{\r\n\t\t\t\t\t\t\tresponses--;\r\n\r\n\t\t\t\t\t\t\tif(!responses){\r\n\t\t\t\t\t\t\t\tresolve();\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Update Error - No data provided\");\r\n\t\t\t\treject(\"Update Error - No data provided\");\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\taddData(data, pos, index){\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tif(this.modExists(\"ajax\")){\r\n\t\t\t\tthis.modules.ajax.blockActiveRequest();\r\n\t\t\t}\r\n\r\n\t\t\tif(typeof data === \"string\"){\r\n\t\t\t\tdata = JSON.parse(data);\r\n\t\t\t}\r\n\r\n\t\t\tif(data){\r\n\t\t\t\tthis.rowManager.addRows(data, pos, index)\r\n\t\t\t\t.then((rows) => {\r\n\t\t\t\t\tvar output = [];\r\n\r\n\t\t\t\t\trows.forEach(function(row){\r\n\t\t\t\t\t\toutput.push(row.getComponent());\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\tresolve(output);\r\n\t\t\t\t});\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Update Error - No data provided\");\r\n\t\t\t\treject(\"Update Error - No data provided\");\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t//update table data\r\n\tupdateOrAddData(data){\r\n\t\tvar rows = [],\r\n\t\tresponses = 0;\r\n\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tif(this.modExists(\"ajax\")){\r\n\t\t\t\tthis.modules.ajax.blockActiveRequest();\r\n\t\t\t}\r\n\r\n\t\t\tif(typeof data === \"string\"){\r\n\t\t\t\tdata = JSON.parse(data);\r\n\t\t\t}\r\n\r\n\t\t\tif(data){\r\n\t\t\t\tdata.forEach((item) => {\r\n\t\t\t\t\tvar row = this.rowManager.findRow(item[this.options.index]);\r\n\r\n\t\t\t\t\tresponses++;\r\n\r\n\t\t\t\t\tif(row){\r\n\t\t\t\t\t\trow.updateData(item)\r\n\t\t\t\t\t\t.then(()=>{\r\n\t\t\t\t\t\t\tresponses--;\r\n\t\t\t\t\t\t\trows.push(row.getComponent());\r\n\r\n\t\t\t\t\t\t\tif(!responses){\r\n\t\t\t\t\t\t\t\tresolve(rows);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tthis.rowManager.addRows(item)\r\n\t\t\t\t\t\t.then((newRows)=>{\r\n\t\t\t\t\t\t\tresponses--;\r\n\t\t\t\t\t\t\trows.push(newRows[0].getComponent());\r\n\r\n\t\t\t\t\t\t\tif(!responses){\r\n\t\t\t\t\t\t\t\tresolve(rows);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Update Error - No data provided\");\r\n\t\t\t\treject(\"Update Error - No data provided\");\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t//get row object\r\n\tgetRow(index){\r\n\t\tvar row = this.rowManager.findRow(index);\r\n\r\n\t\tif(row){\r\n\t\t\treturn row.getComponent();\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Find Error - No matching row found:\", index);\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\t//get row object\r\n\tgetRowFromPosition(position, active){\r\n\t\tvar row = this.rowManager.getRowFromPosition(position, active);\r\n\r\n\t\tif(row){\r\n\t\t\treturn row.getComponent();\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Find Error - No matching row found:\", position);\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\t//delete row from table\r\n\tdeleteRow(index){\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tvar count = 0,\r\n\t\t\tsuccessCount = 0,\r\n\t\t\tfoundRows = [];\r\n\r\n\t\t\tfunction doneCheck(){\r\n\t\t\t\tcount++;\r\n\r\n\t\t\t\tif(count == index.length){\r\n\t\t\t\t\tif(successCount){\r\n\t\t\t\t\t\tthis.rowManager.reRenderInPosition();\r\n\t\t\t\t\t\tresolve();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif(!Array.isArray(index)){\r\n\t\t\t\tindex = [index];\r\n\t\t\t}\r\n\r\n\t\t\t//find matching rows\r\n\t\t\tindex.forEach((item) =>{\r\n\t\t\t\tvar row = this.rowManager.findRow(item, true);\r\n\r\n\t\t\t\tif(row){\r\n\t\t\t\t\tfoundRows.push(row);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.warn(\"Delete Error - No matching row found:\", item);\r\n\t\t\t\t\treject(\"Delete Error - No matching row found\")\r\n\t\t\t\t\tdoneCheck();\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\t//sort rows into correct order to ensure smooth delete from table\r\n\t\t\tfoundRows.sort((a, b) => {\r\n\t\t\t\treturn this.rowManager.rows.indexOf(a) > this.rowManager.rows.indexOf(b) ? 1 : -1;\r\n\t\t\t});\r\n\r\n\t\t\tfoundRows.forEach((row) =>{\r\n\t\t\t\trow.delete()\r\n\t\t\t\t.then(() => {\r\n\t\t\t\t\tsuccessCount++;\r\n\t\t\t\t\tdoneCheck();\r\n\t\t\t\t})\r\n\t\t\t\t.catch((err) => {\r\n\t\t\t\t\tdoneCheck();\r\n\t\t\t\t\treject(err);\r\n\t\t\t\t});\r\n\t\t\t});\r\n\t\t});\r\n\t}\r\n\r\n\t//add row to table\r\n\taddRow(data, pos, index){\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tif(typeof data === \"string\"){\r\n\t\t\t\tdata = JSON.parse(data);\r\n\t\t\t}\r\n\r\n\t\t\tthis.rowManager.addRows(data, pos, index)\r\n\t\t\t.then((rows)=>{\r\n\t\t\t\t//recalc column calculations if present\r\n\t\t\t\tif(this.modExists(\"columnCalcs\")){\r\n\t\t\t\t\tthis.modules.columnCalcs.recalc(this.rowManager.activeRows);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tresolve(rows[0].getComponent());\r\n\t\t\t});\r\n\t\t});\r\n\t}\r\n\r\n\t//update a row if it exitsts otherwise create it\r\n\tupdateOrAddRow(index, data){\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tvar row = this.rowManager.findRow(index);\r\n\r\n\t\t\tif(typeof data === \"string\"){\r\n\t\t\t\tdata = JSON.parse(data);\r\n\t\t\t}\r\n\r\n\t\t\tif(row){\r\n\t\t\t\trow.updateData(data)\r\n\t\t\t\t.then(()=>{\r\n\t\t\t\t\t//recalc column calculations if present\r\n\t\t\t\t\tif(this.modExists(\"columnCalcs\")){\r\n\t\t\t\t\t\tthis.modules.columnCalcs.recalc(this.rowManager.activeRows);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tresolve(row.getComponent());\r\n\t\t\t\t})\r\n\t\t\t\t.catch((err)=>{\r\n\t\t\t\t\treject(err);\r\n\t\t\t\t});\r\n\t\t\t}else{\r\n\t\t\t\trow = this.rowManager.addRows(data)\r\n\t\t\t\t.then((rows)=>{\r\n\t\t\t\t\t//recalc column calculations if present\r\n\t\t\t\t\tif(this.modExists(\"columnCalcs\")){\r\n\t\t\t\t\t\tthis.modules.columnCalcs.recalc(this.rowManager.activeRows);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tresolve(rows[0].getComponent());\r\n\t\t\t\t})\r\n\t\t\t\t.catch((err)=>{\r\n\t\t\t\t\treject(err);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t//update row data\r\n\tupdateRow(index, data){\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tvar row = this.rowManager.findRow(index);\r\n\r\n\t\t\tif(typeof data === \"string\"){\r\n\t\t\t\tdata = JSON.parse(data);\r\n\t\t\t}\r\n\r\n\t\t\tif(row){\r\n\t\t\t\trow.updateData(data).then(()=>{\r\n\t\t\t\t\tresolve(row.getComponent());\r\n\t\t\t\t})\r\n\t\t\t\t.catch((err)=>{\r\n\t\t\t\t\treject(err);\r\n\t\t\t\t});\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Update Error - No matching row found:\", index);\r\n\t\t\t\treject(\"Update Error - No matching row found\");\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t//scroll to row in DOM\r\n\tscrollToRow(index, position, ifVisible){\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tvar row = this.rowManager.findRow(index);\r\n\r\n\t\t\tif(row){\r\n\t\t\t\tthis.rowManager.scrollToRow(row, position, ifVisible)\r\n\t\t\t\t.then(()=>{\r\n\t\t\t\t\tresolve();\r\n\t\t\t\t})\r\n\t\t\t\t.catch((err)=>{\r\n\t\t\t\t\treject(err);\r\n\t\t\t\t});\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Scroll Error - No matching row found:\", index);\r\n\t\t\t\treject(\"Scroll Error - No matching row found\");\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tmoveRow(from, to, after){\r\n\t\tvar fromRow = this.rowManager.findRow(from);\r\n\r\n\t\tif(fromRow){\r\n\t\t\tfromRow.moveToRow(to, after);\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Move Error - No matching row found:\", from);\r\n\t\t}\r\n\t}\r\n\r\n\tgetRows(active){\r\n\t\treturn this.rowManager.getComponents(active);\r\n\t}\r\n\r\n\t//get position of row in table\r\n\tgetRowPosition(index, active){\r\n\t\tvar row = this.rowManager.findRow(index);\r\n\r\n\t\tif(row){\r\n\t\t\treturn this.rowManager.getRowPosition(row, active);\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Position Error - No matching row found:\", index);\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\t//copy table data to clipboard\r\n\tcopyToClipboard(selector){\r\n\t\tif(this.modExists(\"clipboard\", true)){\r\n\t\t\tthis.modules.clipboard.copy(selector);\r\n\t\t}\r\n\t}\r\n\r\n\t/////////////// Column Functions ///////////////\r\n\tsetColumns(definition){\r\n\t\tthis.columnManager.setColumns(definition);\r\n\t}\r\n\r\n\tgetColumns(structured){\r\n\t\treturn this.columnManager.getComponents(structured);\r\n\t}\r\n\r\n\tgetColumn(field){\r\n\t\tvar col = this.columnManager.findColumn(field);\r\n\r\n\t\tif(col){\r\n\t\t\treturn col.getComponent();\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Find Error - No matching column found:\", field);\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\tgetColumnDefinitions(){\r\n\t\treturn this.columnManager.getDefinitionTree();\r\n\t}\r\n\r\n\tgetColumnLayout(){\r\n\t\tif(this.modExists(\"persistence\", true)){\r\n\t\t\treturn this.modules.persistence.parseColumns(this.columnManager.getColumns());\r\n\t\t}\r\n\t}\r\n\r\n\tsetColumnLayout(layout){\r\n\t\tif(this.modExists(\"persistence\", true)){\r\n\t\t\tthis.columnManager.setColumns(this.modules.persistence.mergeDefinition(this.options.columns, layout))\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn false;\r\n\t}\r\n\r\n\tshowColumn(field){\r\n\t\tvar column = this.columnManager.findColumn(field);\r\n\r\n\t\tif(column){\r\n\t\t\tcolumn.show();\r\n\r\n\t\t\tif(this.options.responsiveLayout && this.modExists(\"responsiveLayout\", true)){\r\n\t\t\t\tthis.modules.responsiveLayout.update();\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Column Show Error - No matching column found:\", field);\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\thideColumn(field){\r\n\t\tvar column = this.columnManager.findColumn(field);\r\n\r\n\t\tif(column){\r\n\t\t\tcolumn.hide();\r\n\r\n\t\t\tif(this.options.responsiveLayout && this.modExists(\"responsiveLayout\", true)){\r\n\t\t\t\tthis.modules.responsiveLayout.update();\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Column Hide Error - No matching column found:\", field);\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\ttoggleColumn(field){\r\n\t\tvar column = this.columnManager.findColumn(field);\r\n\r\n\t\tif(column){\r\n\t\t\tif(column.visible){\r\n\t\t\t\tcolumn.hide();\r\n\t\t\t}else{\r\n\t\t\t\tcolumn.show();\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Column Visibility Toggle Error - No matching column found:\", field);\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\taddColumn(definition, before, field){\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tvar column = this.columnManager.findColumn(field);\r\n\r\n\t\t\tthis.columnManager.addColumn(definition, before, column)\r\n\t\t\t.then((column) => {\r\n\t\t\t\tresolve(column.getComponent());\r\n\t\t\t}).catch((err) => {\r\n\t\t\t\treject(err);\r\n\t\t\t});\r\n\t\t});\r\n\t}\r\n\r\n\tdeleteColumn(field){\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tvar column = this.columnManager.findColumn(field);\r\n\r\n\t\t\tif(column){\r\n\t\t\t\tcolumn.delete()\r\n\t\t\t\t.then(() => {\r\n\t\t\t\t\tresolve();\r\n\t\t\t\t}).catch((err) => {\r\n\t\t\t\t\treject(err);\r\n\t\t\t\t});\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Column Delete Error - No matching column found:\", field);\r\n\t\t\t\treject();\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tupdateColumnDefinition(field, definition){\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tvar column = this.columnManager.findColumn(field);\r\n\r\n\t\t\tif(column){\r\n\t\t\t\tcolumn.updateDefinition(definition)\r\n\t\t\t\t.then((col) => {\r\n\t\t\t\t\tresolve(col);\r\n\t\t\t\t}).catch((err) => {\r\n\t\t\t\t\treject(err);\r\n\t\t\t\t});\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Column Update Error - No matching column found:\", field);\r\n\t\t\t\treject();\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tmoveColumn(from, to, after){\r\n\t\tvar fromColumn = this.columnManager.findColumn(from);\r\n\t\tvar toColumn = this.columnManager.findColumn(to);\r\n\r\n\t\tif(fromColumn){\r\n\t\t\tif(toColumn){\r\n\t\t\t\tthis.columnManager.moveColumn(fromColumn, toColumn, after)\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Move Error - No matching column found:\", toColumn);\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Move Error - No matching column found:\", from);\r\n\t\t}\r\n\t}\r\n\r\n\t//scroll to column in DOM\r\n\tscrollToColumn(field, position, ifVisible){\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tvar column = this.columnManager.findColumn(field);\r\n\r\n\t\t\tif(column){\r\n\t\t\t\tthis.columnManager.scrollToColumn(column, position, ifVisible)\r\n\t\t\t\t.then(()=>{\r\n\t\t\t\t\tresolve();\r\n\t\t\t\t})\r\n\t\t\t\t.catch((err)=>{\r\n\t\t\t\t\treject(err);\r\n\t\t\t\t});\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Scroll Error - No matching column found:\", field);\r\n\t\t\t\treject(\"Scroll Error - No matching column found\");\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t//////////// Localization Functions ////////////\r\n\tsetLocale(locale){\r\n\t\tthis.modules.localize.setLocale(locale);\r\n\t}\r\n\r\n\tgetLocale(){\r\n\t\treturn this.modules.localize.getLocale();\r\n\t}\r\n\r\n\tgetLang(locale){\r\n\t\treturn this.modules.localize.getLang(locale);\r\n\t}\r\n\r\n\t//////////// General Public Functions ////////////\r\n\t//redraw list without updating data\r\n\tredraw(force){\r\n\t\tthis.columnManager.redraw(force);\r\n\t\tthis.rowManager.redraw(force);\r\n\t}\r\n\r\n\tsetHeight(height){\r\n\r\n\t\tif(this.rowManager.renderMode !== \"classic\"){\r\n\t\t\tthis.options.height = isNaN(height) ? height : height + \"px\";\r\n\t\t\tthis.element.style.height = this.options.height;\r\n\t\t\tthis.rowManager.setRenderMode();\r\n\t\t\tthis.rowManager.redraw();\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"setHeight function is not available in classic render mode\");\r\n\t\t}\r\n\t}\r\n\r\n\t///////////////////// Sorting ////////////////////\r\n\tsetSort(sortList, dir){\r\n\t\tif(this.modExists(\"sort\", true)){\r\n\t\t\tthis.modules.sort.setSort(sortList, dir);\r\n\t\t\tthis.rowManager.sorterRefresh();\r\n\t\t}\r\n\t}\r\n\r\n\tgetSorters(){\r\n\t\tif(this.modExists(\"sort\", true)){\r\n\t\t\treturn this.modules.sort.getSort();\r\n\t\t}\r\n\t}\r\n\r\n\tclearSort(){\r\n\t\tif(this.modExists(\"sort\", true)){\r\n\t\t\tthis.modules.sort.clear();\r\n\t\t\tthis.rowManager.sorterRefresh();\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t///////////////////// Filtering ////////////////////\r\n\r\n\t//set standard filters\r\n\tsetFilter(field, type, value, params){\r\n\t\tif(this.modExists(\"filter\", true)){\r\n\t\t\tthis.modules.filter.setFilter(field, type, value, params);\r\n\t\t\tthis.rowManager.filterRefresh();\r\n\t\t}\r\n\t}\r\n\r\n\t//set standard filters\r\n\trefreshFilter(){\r\n\t\tif(this.modExists(\"filter\", true)){\r\n\t\t\tthis.rowManager.filterRefresh();\r\n\t\t}\r\n\t}\r\n\r\n\t//add filter to array\r\n\taddFilter(field, type, value, params){\r\n\t\tif(this.modExists(\"filter\", true)){\r\n\t\t\tthis.modules.filter.addFilter(field, type, value, params);\r\n\t\t\tthis.rowManager.filterRefresh();\r\n\t\t}\r\n\t}\r\n\r\n\t//get all filters\r\n\tgetFilters(all){\r\n\t\tif(this.modExists(\"filter\", true)){\r\n\t\t\treturn this.modules.filter.getFilters(all);\r\n\t\t}\r\n\t}\r\n\r\n\tsetHeaderFilterFocus(field){\r\n\t\tif(this.modExists(\"filter\", true)){\r\n\t\t\tvar column = this.columnManager.findColumn(field);\r\n\r\n\t\t\tif(column){\r\n\t\t\t\tthis.modules.filter.setHeaderFilterFocus(column);\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Column Filter Focus Error - No matching column found:\", field);\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tgetHeaderFilterValue(field) {\r\n\t\tif(this.modExists(\"filter\", true)){\r\n\t\t\tvar column = this.columnManager.findColumn(field);\r\n\r\n\t\t\tif(column){\r\n\t\t\t\treturn this.modules.filter.getHeaderFilterValue(column);\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Column Filter Error - No matching column found:\", field);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tsetHeaderFilterValue(field, value){\r\n\t\tif(this.modExists(\"filter\", true)){\r\n\t\t\tvar column = this.columnManager.findColumn(field);\r\n\r\n\t\t\tif(column){\r\n\t\t\t\tthis.modules.filter.setHeaderFilterValue(column, value);\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Column Filter Error - No matching column found:\", field);\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tgetHeaderFilters(){\r\n\t\tif(this.modExists(\"filter\", true)){\r\n\t\t\treturn this.modules.filter.getHeaderFilters();\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t//remove filter from array\r\n\tremoveFilter(field, type, value){\r\n\t\tif(this.modExists(\"filter\", true)){\r\n\t\t\tthis.modules.filter.removeFilter(field, type, value);\r\n\t\t\tthis.rowManager.filterRefresh();\r\n\t\t}\r\n\t}\r\n\r\n\t//clear filters\r\n\tclearFilter(all){\r\n\t\tif(this.modExists(\"filter\", true)){\r\n\t\t\tthis.modules.filter.clearFilter(all);\r\n\t\t\tthis.rowManager.filterRefresh();\r\n\t\t}\r\n\t}\r\n\r\n\t//clear header filters\r\n\tclearHeaderFilter(){\r\n\t\tif(this.modExists(\"filter\", true)){\r\n\t\t\tthis.modules.filter.clearHeaderFilter();\r\n\t\t\tthis.rowManager.filterRefresh();\r\n\t\t}\r\n\t}\r\n\r\n\t///////////////////// select ////////////////////\r\n\tselectRow(rows){\r\n\t\tif(this.modExists(\"selectRow\", true)){\r\n\t\t\tthis.modules.selectRow.selectRows(rows);\r\n\t\t}\r\n\t}\r\n\r\n\tdeselectRow(rows){\r\n\t\tif(this.modExists(\"selectRow\", true)){\r\n\t\t\tthis.modules.selectRow.deselectRows(rows);\r\n\t\t}\r\n\t}\r\n\r\n\ttoggleSelectRow(row){\r\n\t\tif(this.modExists(\"selectRow\", true)){\r\n\t\t\tthis.modules.selectRow.toggleRow(row);\r\n\t\t}\r\n\t}\r\n\r\n\tgetSelectedRows(){\r\n\t\tif(this.modExists(\"selectRow\", true)){\r\n\t\t\treturn this.modules.selectRow.getSelectedRows();\r\n\t\t}\r\n\t}\r\n\r\n\tgetSelectedData(){\r\n\t\tif(this.modExists(\"selectRow\", true)){\r\n\t\t\treturn this.modules.selectRow.getSelectedData();\r\n\t\t}\r\n\t}\r\n\r\n\t///////////////////// validation ////////////////////\r\n\tgetInvalidCells(){\r\n\t\tif(this.modExists(\"validate\", true)){\r\n\t\t\treturn this.modules.validate.getInvalidCells();\r\n\t\t}\r\n\t}\r\n\r\n\tclearCellValidation(cells){\r\n\r\n\t\tif(this.modExists(\"validate\", true)){\r\n\r\n\t\t\tif(!cells){\r\n\t\t\t\tcells = this.modules.validate.getInvalidCells();\r\n\t\t\t}\r\n\r\n\t\t\tif(!Array.isArray(cells)){\r\n\t\t\t\tcells = [cells];\r\n\t\t\t}\r\n\r\n\t\t\tcells.forEach((cell) => {\r\n\t\t\t\tthis.modules.validate.clearValidation(cell._getSelf());\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tvalidate(cells){\r\n\t\tvar output = [];\r\n\r\n\t\t//clear row data\r\n\t\tthis.rowManager.rows.forEach(function(row){\r\n\t\t\tvar valid = row.validate();\r\n\r\n\t\t\tif(valid !== true){\r\n\t\t\t\toutput = output.concat(valid);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn output.length ? output : true;\r\n\t}\r\n\r\n\t//////////// Pagination Functions ////////////\r\n\tsetMaxPage(max){\r\n\t\tif(this.options.pagination && this.modExists(\"page\")){\r\n\t\t\tthis.modules.page.setMaxPage(max);\r\n\t\t}else{\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\tsetPage(page){\r\n\t\tif(this.options.pagination && this.modExists(\"page\")){\r\n\t\t\treturn this.modules.page.setPage(page);\r\n\t\t}else{\r\n\t\t\treturn new Promise((resolve, reject) => { reject() });\r\n\t\t}\r\n\t}\r\n\r\n\tsetPageToRow(row){\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tif(this.options.pagination && this.modExists(\"page\")){\r\n\t\t\t\trow = this.rowManager.findRow(row);\r\n\r\n\t\t\t\tif(row){\r\n\t\t\t\t\tthis.modules.page.setPageToRow(row)\r\n\t\t\t\t\t.then(()=>{\r\n\t\t\t\t\t\tresolve();\r\n\t\t\t\t\t})\r\n\t\t\t\t\t.catch(()=>{\r\n\t\t\t\t\t\treject();\r\n\t\t\t\t\t});\r\n\t\t\t\t}else{\r\n\t\t\t\t\treject();\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\treject();\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tsetPageSize(size){\r\n\t\tif(this.options.pagination && this.modExists(\"page\")){\r\n\t\t\tthis.modules.page.setPageSize(size);\r\n\t\t\tthis.modules.page.setPage(1).then(()=>{}).catch(()=>{});\r\n\t\t}else{\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\tgetPageSize(){\r\n\t\tif(this.options.pagination && this.modExists(\"page\", true)){\r\n\t\t\treturn this.modules.page.getPageSize();\r\n\t\t}\r\n\t}\r\n\r\n\tpreviousPage(){\r\n\t\tif(this.options.pagination && this.modExists(\"page\")){\r\n\t\t\tthis.modules.page.previousPage();\r\n\t\t}else{\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\tnextPage(){\r\n\t\tif(this.options.pagination && this.modExists(\"page\")){\r\n\t\t\tthis.modules.page.nextPage();\r\n\t\t}else{\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\tgetPage(){\r\n\t\tif(this.options.pagination && this.modExists(\"page\")){\r\n\t\t\treturn this.modules.page.getPage();\r\n\t\t}else{\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\tgetPageMax(){\r\n\t\tif(this.options.pagination && this.modExists(\"page\")){\r\n\t\t\treturn this.modules.page.getPageMax();\r\n\t\t}else{\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\t///////////////// Grouping Functions ///////////////\r\n\tsetGroupBy(groups){\r\n\t\tif(this.modExists(\"groupRows\", true)){\r\n\t\t\tthis.options.groupBy = groups;\r\n\t\t\tthis.modules.groupRows.initialize();\r\n\t\t\tthis.rowManager.refreshActiveData(\"display\");\r\n\r\n\t\t\tif(this.options.persistence && this.modExists(\"persistence\", true) && this.modules.persistence.config.group){\r\n\t\t\t\tthis.modules.persistence.save(\"group\");\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\tsetGroupValues(groupValues){\r\n\t\tif(this.modExists(\"groupRows\", true)){\r\n\t\t\tthis.options.groupValues = groupValues;\r\n\t\t\tthis.modules.groupRows.initialize();\r\n\t\t\tthis.rowManager.refreshActiveData(\"display\");\r\n\r\n\t\t\tif(this.options.persistence && this.modExists(\"persistence\", true) && this.modules.persistence.config.group){\r\n\t\t\t\tthis.modules.persistence.save(\"group\");\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\tsetGroupStartOpen(values){\r\n\t\tif(this.modExists(\"groupRows\", true)){\r\n\t\t\tthis.options.groupStartOpen = values;\r\n\t\t\tthis.modules.groupRows.initialize();\r\n\t\t\tif(this.options.groupBy){\r\n\t\t\t\tthis.rowManager.refreshActiveData(\"group\");\r\n\r\n\t\t\t\tif(this.options.persistence && this.modExists(\"persistence\", true) && this.modules.persistence.config.group){\r\n\t\t\t\t\tthis.modules.persistence.save(\"group\");\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Grouping Update - cant refresh view, no groups have been set\");\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\tsetGroupHeader(values){\r\n\t\tif(this.modExists(\"groupRows\", true)){\r\n\t\t\tthis.options.groupHeader = values;\r\n\t\t\tthis.modules.groupRows.initialize();\r\n\t\t\tif(this.options.groupBy){\r\n\t\t\t\tthis.rowManager.refreshActiveData(\"group\");\r\n\r\n\t\t\t\tif(this.options.persistence && this.modExists(\"persistence\", true) && this.modules.persistence.config.group){\r\n\t\t\t\t\tthis.modules.persistence.save(\"group\");\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Grouping Update - cant refresh view, no groups have been set\");\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\tgetGroups(values){\r\n\t\tif(this.modExists(\"groupRows\", true)){\r\n\t\t\treturn this.modules.groupRows.getGroups(true);\r\n\t\t}else{\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\t// get grouped table data in the same format as getData()\r\n\tgetGroupedData(){\r\n\t\tif (this.modExists(\"groupRows\", true)){\r\n\t\t\treturn this.options.groupBy ?\r\n\t\t\tthis.modules.groupRows.getGroupedData() : this.getData()\r\n\t\t}\r\n\t}\r\n\r\n\tgetEditedCells(){\r\n\t\tif(this.modExists(\"edit\", true)){\r\n\t\t\treturn this.modules.edit.getEditedCells();\r\n\t\t}\r\n\t}\r\n\r\n\tclearCellEdited(cells){\r\n\t\tif(this.modExists(\"edit\", true)){\r\n\r\n\t\t\tif(!cells){\r\n\t\t\t\tcells = this.modules.edit.getEditedCells();\r\n\t\t\t}\r\n\r\n\t\t\tif(!Array.isArray(cells)){\r\n\t\t\t\tcells = [cells];\r\n\t\t\t}\r\n\r\n\t\t\tcells.forEach((cell) => {\r\n\t\t\t\tthis.modules.edit.clearEdited(cell._getSelf());\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\t///////////////// Column Calculation Functions ///////////////\r\n\tgetCalcResults(){\r\n\t\tif(this.modExists(\"columnCalcs\", true)){\r\n\t\t\treturn this.modules.columnCalcs.getResults();\r\n\t\t}else{\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\trecalc(){\r\n\t\tif(this.modExists(\"columnCalcs\", true)){\r\n\t\t\tthis.modules.columnCalcs.recalcAll(this.rowManager.activeRows);\r\n\t\t}\r\n\t}\r\n\r\n\t/////////////// Navigation Management //////////////\r\n\tnavigatePrev(){\r\n\t\tvar cell = false;\r\n\r\n\t\tif(this.modExists(\"edit\", true)){\r\n\t\t\tcell = this.modules.edit.currentCell;\r\n\r\n\t\t\tif(cell){\r\n\t\t\t\treturn cell.nav().prev();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t}\r\n\r\n\tnavigateNext(){\r\n\t\tvar cell = false;\r\n\r\n\t\tif(this.modExists(\"edit\", true)){\r\n\t\t\tcell = this.modules.edit.currentCell;\r\n\r\n\t\t\tif(cell){\r\n\t\t\t\treturn cell.nav().next();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t}\r\n\r\n\tnavigateLeft(){\r\n\t\tvar cell = false;\r\n\r\n\t\tif(this.modExists(\"edit\", true)){\r\n\t\t\tcell = this.modules.edit.currentCell;\r\n\r\n\t\t\tif(cell){\r\n\t\t\t\te.preventDefault();\r\n\t\t\t\treturn cell.nav().left();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t}\r\n\r\n\tnavigateRight(){\r\n\t\tvar cell = false;\r\n\r\n\t\tif(this.modExists(\"edit\", true)){\r\n\t\t\tcell = this.modules.edit.currentCell;\r\n\r\n\t\t\tif(cell){\r\n\t\t\t\te.preventDefault();\r\n\t\t\t\treturn cell.nav().right();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t}\r\n\r\n\tnavigateUp(){\r\n\t\tvar cell = false;\r\n\r\n\t\tif(this.modExists(\"edit\", true)){\r\n\t\t\tcell = this.modules.edit.currentCell;\r\n\r\n\t\t\tif(cell){\r\n\t\t\t\te.preventDefault();\r\n\t\t\t\treturn cell.nav().up();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t}\r\n\r\n\tnavigateDown(){\r\n\t\tvar cell = false;\r\n\r\n\t\tif(this.modExists(\"edit\", true)){\r\n\t\t\tcell = this.modules.edit.currentCell;\r\n\r\n\t\t\tif(cell){\r\n\t\t\t\te.preventDefault();\r\n\t\t\t\treturn cell.nav().down();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t}\r\n\r\n\t/////////////// History Management //////////////\r\n\tundo(){\r\n\t\tif(this.options.history && this.modExists(\"history\", true)){\r\n\t\t\treturn this.modules.history.undo();\r\n\t\t}else{\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\tredo(){\r\n\t\tif(this.options.history && this.modExists(\"history\", true)){\r\n\t\t\treturn this.modules.history.redo();\r\n\t\t}else{\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\tgetHistoryUndoSize(){\r\n\t\tif(this.options.history && this.modExists(\"history\", true)){\r\n\t\t\treturn this.modules.history.getHistoryUndoSize();\r\n\t\t}else{\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\tgetHistoryRedoSize(){\r\n\t\tif(this.options.history && this.modExists(\"history\", true)){\r\n\t\t\treturn this.modules.history.getHistoryRedoSize();\r\n\t\t}else{\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\tclearHistory(){\r\n\t\tif(this.options.history && this.modExists(\"history\", true)){\r\n\t\t\treturn this.modules.history.clear();\r\n\t\t}else{\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\t/////////////// Download Management //////////////\r\n\tdownload(type, filename, options, active){\r\n\t\tif(this.modExists(\"download\", true)){\r\n\t\t\tthis.modules.download.download(type, filename, options, active);\r\n\t\t}\r\n\t}\r\n\r\n\tdownloadToTab(type, filename, options, active){\r\n\t\tif(this.modExists(\"download\", true)){\r\n\t\t\tthis.modules.download.download(type, filename, options, active, true);\r\n\t\t}\r\n\t}\r\n\r\n\t/////////// Inter Table Communications ///////////\r\n\ttableComms(table, module, action, data){\r\n\t\tthis.modules.comms.receive(table, module, action, data);\r\n\t}\r\n\r\n\t////////////// Extension Management //////////////\r\n\tmodExists(plugin, required){\r\n\t\tif(this.modules[plugin]){\r\n\t\t\treturn true;\r\n\t\t}else{\r\n\t\t\tif(required){\r\n\t\t\t\tconsole.error(\"Tabulator Module Not Installed: \" + plugin);\r\n\t\t\t}\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n}\r\n\r\n//default setup options\r\nTabulator.defaultOptions = defaultOptions;\r\n\r\n//bind modules and static functionality\r\nnew ModuleBinder(Tabulator);\r\n\r\nexport default Tabulator;","//tabulator with all modules installed\r\nimport {default as Tabulator} from './Tabulator.js';\r\nimport * as modules from '../core/modules/optional.js';\r\nimport ModuleBinder from './ModuleBinder.js';\r\n\r\nclass TabulatorFull extends Tabulator {};\r\n\r\n//bind modules and static functionality\r\nnew ModuleBinder(TabulatorFull, modules);\r\n\r\nexport default TabulatorFull;"],"names":["Module","[object Object]","table","name","this","Helpers","el","offsetWidth","offsetHeight","box","getBoundingClientRect","top","window","pageYOffset","document","documentElement","clientTop","left","pageXOffset","clientLeft","obj","clone","Object","assign","Array","isArray","i","Date","deepClone","Accessor","super","allowedTypes","column","match","config","forEach","type","accessor","key","charAt","toUpperCase","slice","definition","lookupAccessor","params","modules","value","accessors","console","warn","row","rowComponent","getComponent","data","columnManager","traverse","colCompnent","getFieldValue","setFieldValue","moduleName","json","headers","Content-Type","body","url","JSON","stringify","form","output","generateParamsList","FormData","item","append","Ajax","urlGenerator","loaderElement","createLoaderElement","msgElement","createMsgElement","loadingElement","errorElement","loaderPromise","progressiveLoad","loading","requestOrder","template","appendChild","options","ajaxLoaderLoading","createElement","innerHTML","trim","content","firstChild","ajaxRequestFunc","defaultLoaderPromise","ajaxURLGenerator","defaultURLGenerator","ajaxLoaderError","ajaxParams","setParams","ajaxConfig","setConfig","ajaxURL","setUrl","ajaxProgressiveLoad","pagination","error","modExists","page","initializeProgressive","classList","add","setAttribute","update","_loadDefaultConfig","method","force","defaultConfig","inPosition","columnsChanged","_loadDataProgressive","_loadDataStandard","diff","ajaxProgressiveLoadScrollMargin","rowManager","getElement","clientHeight","nextPage","then","catch","setData","setPage","Promise","resolve","reject","sendRequest","e","prefix","concat","push","encoded","encodeURIComponent","join","silent","requestNo","ajaxRequesting","call","showLoader","ajaxResponse","hideLoader","ajaxError","showError","setTimeout","ajaxLoader","removeChild","remove","localize","getText","element","parentNode","keys","length","toLowerCase","includes","ajax","serializeParams","contentType","ajaxContentType","contentTypeFormatters","Accept","mode","location","origin","credentials","fetch","response","ok","status","statusText","defaultContentTypeFormatters","Clipboard","pasteParser","pasteAction","customSelection","rowRange","blocked","clipboard","clipboardCopyRowRange","addEventListener","plain","html","preventDefault","clipboardCopyFormatter","list","export","generateExportList","clipboardCopyConfig","clipboardCopyStyled","genereateHTMLTable","generatePlainContent","clipboardData","originalEvent","clipboardCopied","reset","paste","setPasteParser","clipboardPasteParser","setPasteAction","clipboardPasteAction","rowData","columns","col","component","getKey","range","internal","sel","textRange","getSelection","createRange","selectNodeContents","toString","removeAllRanges","addRange","selection","createTextRange","moveToElementText","select","execCommand","action","pasteActions","parser","pasteParsers","rows","checkPaseOrigin","getPasteData","mutateData","clipboardPasted","clipboardPasteError","mutator","transformRow","valid","target","tagName","edit","currentCell","getData","replace","updateOrAddData","insert","addData","headerFindSuccess","columnMap","split","find","title","field","columnsByIndex","shift","CalcComponent","_row","transform","cells","getCells","cell","getCell","CellComponent","_cell","getValue","getOldValue","initialValue","getField","mutate","setValue","setValueActual","cancelEdit","edited","clearEdited","validate","invalid","clearValidation","nav","checkHeight","Cell","oldValue","height","width","minWidth","loaded","build","generateElement","setWidth","_configureCell","className","cellEvents","style","textAlign","hozAlign","vertAlign","display","alignItems","bottom","middle","justifyContent","right","center","cssClass","tooltipGenerationMode","_generateTooltip","_bindClickEvents","_bindTouchEvents","_bindMouseEvents","bindEditor","rowHandle","movableRows","moveRow","initializeCell","visible","hide","cellClick","cellDblClick","selectNode","cellContext","cellMouseEnter","cellMouseLeave","cellMouseOver","cellMouseOut","cellMouseMove","dblTap","tapHold","tap","cellTap","passive","cellDblTap","clearTimeout","cellTapHold","val","format","formatValue","Node","cellRendered","tooltip","containerOnly","layoutElement","setValueProcessData","history","newValue","cellEdited","groupUpdateOnCellEdit","groupBy","groupRows","reassignRowToGroup","dataChanged","changed","transformCell","topCalc","bottomCalc","columnCalcs","recalc","activeRows","recalcRowGroup","reactiveData","block","unblock","_generateContents","resizableColumns","resizeColumns","initializeColumn","contextMenu","clickMenu","menu","frozenColumns","widthStyled","minWidthStyled","maxWidth","maxWidthStyled","reinitializeHeight","heightStyled","editCell","editing","getCurrentCell","_getSelf","redrawBlock","clearComponentHistory","deleteCell","calcs","self","nextCell","index","getCellIndex","next","nextRow","nextDisplayRow","findNextEditableCell","prev","prevRow","prevDisplayRow","findPrevEditableCell","up","down","ColumnComponent","_column","getDefinition","isGroup","show","delete","parent","Column","scrollToColumn","filter","setHeaderFilterFocus","reloadHeaderFilter","getHeaderFilterValue","setHeaderFilterValue","to","after","toColumn","findColumn","moveColumn","nextCol","nextColumn","prevCol","prevColumn","updates","updateDefinition","getWidth","result","reinitializeWidth","virtualDomHoz","vdomHoz","reinitialize","def","contentElement","titleHolderElement","titleElement","groupElement","createGroupElement","fieldStructure","titleFormatterRendered","mapDefinitionDefaults","setField","invalidOptionWarnings","checkDefinition","widthFixed","_mapDepricatedFunctionality","newCol","attachColumn","checkColumnVisibility","registerColumnField","setHandle","_buildHeader","bindModuleColumns","defaults","columnDefaults","defaultOptionList","indexOf","nestedFieldSeparator","_getNestedData","_getFlatData","_setNestedData","_setFlatData","registerColumnPosition","reRegisterPosition","headerTooltip","tooltipsHeader","bind","headerVertical","_bindEvents","_buildColumnHeaderContent","_buildGroupHeader","_buildColumnHeader","setTooltip","headerFilter","headerFilterPlaceholder","setHeaderFilterColumnPlaceholder","movableColumns","persistence","headerClick","headerDblClick","headerContext","headerTap","headerDblTap","headerTapHold","cellEditing","cellEditCancelled","editor","validator","stopPropagation","mockCell","formatter","contents","structure","dataObj","alignment","paddingTop","childWidth","Math","heightInitialized","offsetParent","clearCellHeight","cellCount","Cell$1","Column$1","pos","Row$1","manualHeight","outerHeight","created","initializeRow","minHeight","maxHeight","max","calcHeight","newRowData","tempData","initialized","findCell","allowEdit","elVisible","prevCell","deleteCells","precision","values","Number","topCalcs","botCalcs","genColumn","topElement","botElement","topRow","botRow","botInitialized","topCalcParams","botCalc","generateRow","rowsToData","group","generateRowData","dataTree","subGroups","ColumnCalcs","indent","collapseEl","expandEl","elementField","startOpen","dataTreeBranchElement","branchEl","dummyEl","dataTreeCollapseElement","dataTreeExpandElement","childArray","children","open","controlEl","insertBefore","marginRight","paddingRight","oldControl","replaceChild","getChildren","child","childRow","create","collapseRow","childIndex","findChildIndex","unshift","layoutRow","subject","RowComponent","HTMLElement","DataTree","csv","fileContents","pdf","fontStyle","fontSize","cellPadding","colSpan","jsPDF","autoTableParams","autoTable","doc","xlsx","sheetName","merges","XLSX","worksheet","workbook","Sheets","setFileContents","sheets","send","sheetOnly","ArrayBuffer","downloadFunc","mime","filename","blob","navigator","Download","onRendered","input","editorParams","padding","elementAttributes","cellValue","cancel","vertNav","String","boxSizing","onChange","removeEventListener","blurFunc","cellEl","initialDisplayValue","listEl","multiselect","dataItems","currentItem","displayItems","currentItems","blurable","blockListShow","searchWordTimeout","getColumnByField","label","itemParams","displayList","dataList","sortValuesList","toggleItem","splice","unsetItem","fillInput","hideList","cancelItem","len","unsetItems","chooseItems","keyCode","stopImmediatePropagation","setCurrentItem","searchWord","parseItems","getUniqueColumnValues","elOffset","showList","autocomplete","uniqueColumnValues","sort","filterList","matches","addNotice","fillListIfNotEmpty","items","clearList","searchEl","tabIndex","notice","fillList","intialLoad","success","chooseItem","genUniqueColumnValues","star","maxStars","size","stars","starChange","cloneNode","nextStar","starsHolder","whiteSpace","verticalAlign","getAttribute","progress","min","percent","handle","bar","calcVal","position","backgroundColor","mouseDrag","mouseDragWidth","updateValue","tristate","indetermState","indetermValue","browser","mouseClick","recursionBlock","Edit","editors","clearEditor","button","forceEdit","getRenderMode","bottomEdge","rowEl","rightEdge","leftEdge","scrollLeft","rendered","invalidEdit","focusCellNoEvent","maskLetter","maskWildcard","mask","fillSymbols","editedCells","ExportRow","ExportColumn","columnHeaders","maxDepth","groupData","subGroupData","columnVisCheck","headerDepth","header","rowGroups","exportCols","headerEl","bodyEl","rowFormatter","colVisProp","groupHeader","cloneTableStyle","styles","oddRow","evenRow","firstGroup","setup","mapElementStyles","getColumn","getRow","firstCell","holder","background-color","color","font-weight","font-family","font-size","text-align","border-top","border-left","border-right","border-bottom","padding-top","padding-left","fromStyle","getComputedStyle","props","Export","defaultFilters","rowVal","RegExp","filterVal","headerFilters","headerFilterColumns","prevHeaderFilterChangeCheck","filterFunc","filterElement","headerFilterParams","editorElement","headerFilterLiveFilterDelay","headerFilterLiveFilter","filters","Filter","all","getHeaderFilters","findIndex","dataFiltering","ajaxFiltering","plaintext","emptyToSpace","textarea","sanitizeHTML","money","number","floatVal","parseFloat","decimalSym","symbolAfter","toFixed","decimal","rgx","link","urlPrefix","labelField","formatterParams","urlField","image","src","tickCross","truthy","allowTruthy","datetime","outputFormat","datetimediff","inputFormat","suffix","humanize","lookup","traffic","colors","isNaN","percentValue","legendColor","legendAlign","legend","barEl","legendEl","holderEl","buttonTick","buttonCross","rownum","checkbox","toggleSelect","formatterPrint","print","formatterClipboard","lookupFormatter","htmlOutput","entityMap","&","<",">","\"","'","=","formatters","Format","leftColumns","rightColumns","leftMargin","rightMargin","initializationMode","frozenCheck","active","calcMargins","layoutColumnPosition","_calcSpace","topInitialized","frozen","leftParents","edge","FrozenColumns","displayIndex","initialize","adjustTableSize","detachRow","FrozenRows","Group$1","groupManager","level","hasSubGroups","addRow","old","groups","groupList","generator","elementContents","arrowElement","arrow","groupID","groupKey","updateGroupRows","groupValues","count","getHeadersAndRows","compoment","path","childNodes","groupIDLookups","headerGenerator","initializeTopRow","lookupFunc","groupComponents","rowCount","childData","groupListData","pullGroupListData","allowedValues","createGroup","assignRowToExistingGroup","oldGroups","GroupRows","History","_rebindRow","redoers","HtmlTableImport","_generateBlankHeaders","fieldIndex","attributes","newElement","optionsList","attrib","exists","scrollToRow","focus","newRow","blur","Keybindings","actions","meta","binding","bindings","navPrev","navNext","navUp","navDown","scrollPageUp","scrollPageDown","undo","Menu","hideMenu","LoadMenuEvent","rowClickMenu","isOpen","itemEl","hideOldSubMenus","menuEl","pop","touch","parentOffset","x","y","pageY","MoveColumns","placeholderElement","hoverElement","checkTimeout","checkPeriod","moving","toCol","startX","autoScrollMargin","touches","colEl","nextColWidthLast","prevColWidth","startXMove","moveToCol","nextColWidth","pageX","_unbindMouseMove","xPos","MoveRows","toRow","toRowAfter","hasHandle","moveHover","endMove","tableRowDropEvent","touchMove","connection","connectionSelectorsTables","connectionSelectorsElements","mousemove","nextSibling","tableRowDrop","which","nextRowHeight","startYMove","moveToRow","nextRowHeightLast","setStartPosition","scrollTop","yPos","connectionElements","connectionTables","mouseup","receiver","prototype","fromRow","enabled","Mutator","Page","dataSentNames","firstBut","nextBut","pageSizes","paginationSizeSelector","prevBut","previousPage","paginationElement","pageSelectLabel","pageSizeSelect","paginationSize","testElRow","testElCell","getTableElement","parseInt","rightSize","disabled","lastBut","start","end","pageLoaded","pageParams","scrollHeight","margin","sorters","cookie","localStorage","expireDate","setDate","Persistence","defWatcherBlock","readers","readFunc","persistenceWriterFunc","retreiveData","groupStartOpen","get","mergeDefinition","current","oldCols","from","parseColumns","validateSorters","writeFunc","definitions","defStore","defaultReaders","scrollY","tableEl","printHeader","headerContent","footerContent","scrollX","Print","ReactiveData","origFuncs","version","arguments","defineProperty","childField","configurable","apply","ResizeColumns","_mouseDown","nearestColumn","colIndex","prevHandle","mouseUp","startColumn","mouseMove","ResizeRows","startY","handleDown","observer","autoResize","containerHeight","containerWidth","floor","browserMobile","nodeHeight","tableHeight","ResizeTable","ResponsiveLayout","collapseHandleColumn","responsiveLayout","a","generateCollapsedRowContent","colCount","working","titleHighlight","text","SelectRow","selecting","lastClickedRow","selectPrev","selectedRows","selectable","shiftKey","rowIdx","fromRowIdx","toggledRow","toggleRow","deselectRows","toggledRows","_rowSelectionChanged","_selectRow","rowInfo","_deselectRow","emptyAlign","decimalSeparator","thousandSeparator","b","string","datetime$2","boolean","d","c","calc","alignEmptyValues","aRow","bs","as","rd","b1","sorter","dir","startingDir","columnHeaderSortMulti","sortList","rowComponents","dataSorting","sortObj","_sortItems","el1Comp","el2","Sort","integer","isFinite","float","parameters","ends","_buildValidator","validators","invalidIndex","invalidCells","ResizeRowsModule","ResizeTableModule","ResponsiveLayoutModule","SortModule","ValidateModule","ColumnManager","blockHozScrollEvent","manager","headersElement","marginLeft","nextToColumn","before","parentIndex","nextEl","callback","fromIndex","ifVisible","adjust","offsetLeft","redraw","tableElement","heightFixer","firstRender","fixedHeight","displayRows","vDomRowHeight","vDomTop","vDomScrollPosBottom","vDomBottomPad","vDomWindowMinTotalRows","vDomWindowMinMarginRows","setRenderMode","wipe","activeIndex","displayRowIterator","regenerateRowNumbers","reverse","findAddRowPos","dispRows","_moveRowInArray","setActiveRows","moveRowActual","removeRow","findRowIndex","getRows","paginationDataSentNames","loadData","stage","skipStage","setDisplayIndex","renderTable","activeRowsCount","displayRowsCount","renderMode","_virtualRenderFill","placeholder","renderEmptyScroll","onlyGroupHeaders","topPad","topPadHeight","ceil","rowsHeight","rowHeight","layout","_addTopRow","getHeight","bottomDiff","bottomRow","bottomRowHeight","setCellHeight","redrawBlockRederInPosition","dispatchEvent","FooterManager","activate","TableRegistry","results","fitData","fitDataGeneral","colsWidth","tableWidth","totalWidth","flexColumns","remainingFlexGrowUnits","calcShrink","colWidth","freeSpace","changeUnits","oversizeCols","gap","remainingSpace","fixedShrinkColumns","widthGrow","flexWidth","fixedWidth","scaleColumns","gapFill","Layout","langList","lang","locale","_setLangProp","desiredLocale","Localize","page_size","page_title","first","last","last_title","Comms","module","tabulator","registerModuleBinding","mod","bindModules","VirtualDomHorizontal","rightCol","vDomScrollPosRight","vDomPadLeft","fitDataColAvg","change","colEnd","clear","colPos","reinitializeRow","removeColRight","leftCol","widthDiff","newWidth","Tabulator$1","rtlCheck","htmlTableImport","footerManager","installLang","langs","initialFilter","tableBuilt","paginationInitialPage","browserSlow","parse","getUrl","responses","newRows","err","sorterRefresh","recalcAll","columnMinWidth","columnHeaderVertAlign","cellHozAlign","headerHozAlign","autoColumns","initialSort","headerSortTristate","textDirection","keybindings","tabEndNewRow","downloadReady","downloadComplete","downloadConfig","downloadRowRange","dataTreeFilter","dataTreeSort","dataTreeElementColumn","dataTreeChildField","dataTreeStartExpanded","dataTreeRowExpanded","dataTreeRowCollapsed","dataTreeChildColumnCalcs","printFormatter","printFooter","printStyled","printRowRange","addRowPos","selectableRollingSelection","selectableCheck","headerVisible","persistenceID","persistenceReaderFunc","responsiveLayoutCollapseStartOpen","responsiveLayoutCollapseUseFormatters","responsiveLayoutCollapseFormatter","paginationButtonCount","paginationDataSent","paginationDataReceived","paginationAddRow","ajaxProgressiveLoadDelay","groupHeaderPrint","groupHeaderClipboard","groupHeaderHtmlOutput","groupHeaderDownload","htmlOutputConfig","movableRowsConnectedTables","movableRowsConnectedElements","movableRowsSender","movableRowsReceiver","movableRowsSent","movableRowsSentFailed","movableRowsReceivingStart","movableRowsReceived","movableRowsReceivingStop","movableRowsElementDrop","scrollToRowPosition","rowFormatterHtmlOutput","tableBuilding","renderStarted","renderComplete","rowClick","rowDblClick","rowContext","rowTap","rowDblTap","rowTapHold","rowMouseEnter","rowMouseLeave","rowMouseOver","rowMouseOut","rowMouseMove","rowContextMenu","rowMoved","rowUpdated","rowSelectionChanged","rowSelected","rowDeselected","rowResized","columnResized","columnTitleChanged","columnVisibilityChanged","htmlImporting","htmlImported","dataLoaded","dataFiltered","dataSorted","groupToggleElement","groupClosedShowCalcs","dataGrouping","dataGrouped","groupClick","groupContextMenu","groupDblTap","validationMode","validationFailed","historyRedo"],"mappings":"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AAIwF,uCAEenX,0CAEjB,yBAGCmX,sDAUaiD,+BAEf,IAAI9X,qCA6BHM,2GACAuF,oJAzBC7F,mEAGCuF,6DAOCA,WACAK,uBACEJ,sBAIDA,qCAeN,MAAY9H,sIChtCdmf,oBCAe,CACd,QACA,QACA,UACA,UACA,WACA,YACA,QACA,WACA,WACA,YACA,cACA,YACA,SACA,aACA,UACA,WACA,YACA,QACA,aACA,SACA,eACA,YACA,kBACA,iBACA,WACA,SACA,eACA,YACA,UACA,gBACA,cACA,oBACA,cACA,oBACA,mBACA,yBACA,WACA,iBACA,eACA,qBACA,mBACA,yBACA,oBACA,0BACA,gBACA,sBACA,qBACA,2BACA,YACA,WACA,UACA,gBACA,mBACA,yBACA,aACA,mBACA,sBACA,4BACA,YACA,eACA,cACA,UACA,aACA,cACA,iBACA,iBACA,gBACA,eACA,gBACA,cACA,aACA,oBACA,aACA,wBACA,qBACA,cACA,iBACA,gBACA,YACA,eACA,gBACA,gBACA,iBACA,iBACA,gBACA,iBACA,uBACA,eACA,0BACA,qBACA,yBACA,mBACA,yBACA,yBACA,QACA,oBACA,aACA,cAEA,YACA,iBACA,uBACA,qBACA,2BACA,sBACA,4BACA,aACA,iBACA,kBACA,iBD3GD,gIAeE,IAAIhP,4FASGvO,GACP,mnCA2EQqO,KAAKnQ,MAAM0G,irBA0CPvD,EAAMmc,EAAKnH,uQAqBvB,mEAKA,uDEtKF,MAAMoH,2BAEJrf,KAAKF,cACLE,KAAKmZ,SACLnZ,KAAKiD,KAAO,GACZjD,KAAKgC,KAAOA,EACZhC,KAAK2J,SAAU,EACf3J,KAAKyC,QAAU,GACfzC,KAAKmQ,SACLnQ,KAAK0R,SACL1R,KAAKsX,aAAe,GACpBtX,KAAKsf,gBACLtf,KAAKuf,kCAELvf,KAAK8e,qBAEL9e,KAAKiN,eAELjN,KAAKwf,mDAOJxf,wDAMD,6BAAgC,wCAGhCE,gEAMAF,sJAWA,IAAIqU,IAAiBE,8tDA+EjBvU,4BAEHuU,kBAEa9I,2CAETgJ,SAAS,iBAEAhJ,yGASCtG,oBAEdkP,wEAKEA,+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"} \ No newline at end of file +{"version":3,"file":"tabulator_esm.min.js","sources":["../../src/js/core/CoreFeature.js","../../src/js/core/Module.js","../../src/js/core/tools/Helpers.js","../../src/js/modules/Accessor/Accessor.js","../../src/js/modules/Accessor/defaults/accessors.js","../../src/js/modules/Ajax/defaults/urlGenerator.js","../../src/js/modules/Ajax/defaults/contentTypeFormatters.js","../../src/js/modules/Ajax/Ajax.js","../../src/js/modules/Ajax/defaults/config.js","../../src/js/modules/Ajax/defaults/loaderPromise.js","../../src/js/modules/Clipboard/Clipboard.js","../../src/js/modules/Clipboard/defaults/pasteActions.js","../../src/js/modules/Clipboard/defaults/pasteParsers.js","../../src/js/modules/ColumnCalcs/CalcComponent.js","../../src/js/core/cell/CellComponent.js","../../src/js/core/cell/Cell.js","../../src/js/core/column/ColumnComponent.js","../../src/js/core/column/defaults/options.js","../../src/js/core/column/Column.js","../../src/js/core/row/RowComponent.js","../../src/js/core/row/Row.js","../../src/js/modules/ColumnCalcs/defaults/calculations.js","../../src/js/modules/ColumnCalcs/ColumnCalcs.js","../../src/js/modules/DataTree/DataTree.js","../../src/js/modules/Download/defaults/downloaders/csv.js","../../src/js/modules/Download/defaults/downloaders.js","../../src/js/modules/Download/defaults/downloaders/json.js","../../src/js/modules/Download/defaults/downloaders/pdf.js","../../src/js/modules/Download/defaults/downloaders/xlsx.js","../../src/js/modules/Download/defaults/downloaders/html.js","../../src/js/modules/Download/Download.js","../../src/js/modules/Edit/inputMask.js","../../src/js/modules/Edit/defaults/editors.js","../../src/js/modules/Edit/defaults/editors/input.js","../../src/js/modules/Edit/defaults/editors/textarea.js","../../src/js/modules/Edit/defaults/editors/number.js","../../src/js/modules/Edit/defaults/editors/range.js","../../src/js/modules/Edit/defaults/editors/select.js","../../src/js/modules/Edit/defaults/editors/autocomplete.js","../../src/js/modules/Edit/defaults/editors/star.js","../../src/js/modules/Edit/defaults/editors/progress.js","../../src/js/modules/Edit/defaults/editors/tickCross.js","../../src/js/modules/Edit/Edit.js","../../src/js/modules/Export/ExportRow.js","../../src/js/modules/Export/ExportColumn.js","../../src/js/modules/Export/Export.js","../../src/js/modules/Filter/defaults/filters.js","../../src/js/modules/Filter/Filter.js","../../src/js/modules/Format/defaults/formatters/plaintext.js","../../src/js/modules/Format/defaults/formatters.js","../../src/js/modules/Format/defaults/formatters/html.js","../../src/js/modules/Format/defaults/formatters/textarea.js","../../src/js/modules/Format/defaults/formatters/money.js","../../src/js/modules/Format/defaults/formatters/link.js","../../src/js/modules/Format/defaults/formatters/image.js","../../src/js/modules/Format/defaults/formatters/tickCross.js","../../src/js/modules/Format/defaults/formatters/datetime.js","../../src/js/modules/Format/defaults/formatters/datetimediff.js","../../src/js/modules/Format/defaults/formatters/lookup.js","../../src/js/modules/Format/defaults/formatters/star.js","../../src/js/modules/Format/defaults/formatters/traffic.js","../../src/js/modules/Format/defaults/formatters/progress.js","../../src/js/modules/Format/defaults/formatters/color.js","../../src/js/modules/Format/defaults/formatters/buttonTick.js","../../src/js/modules/Format/defaults/formatters/buttonCross.js","../../src/js/modules/Format/defaults/formatters/rownum.js","../../src/js/modules/Format/defaults/formatters/handle.js","../../src/js/modules/Format/defaults/formatters/responsiveCollapse.js","../../src/js/modules/Format/defaults/formatters/rowSelection.js","../../src/js/modules/Format/Format.js","../../src/js/modules/FrozenColumns/FrozenColumns.js","../../src/js/modules/FrozenRows/FrozenRows.js","../../src/js/modules/GroupRows/GroupComponent.js","../../src/js/modules/GroupRows/Group.js","../../src/js/modules/GroupRows/GroupRows.js","../../src/js/modules/History/defaults/undoers.js","../../src/js/modules/History/History.js","../../src/js/modules/HtmlTableImport/HtmlTableImport.js","../../src/js/modules/History/defaults/redoers.js","../../src/js/modules/Interaction/Interaction.js","../../src/js/modules/Keybindings/defaults/bindings.js","../../src/js/modules/Keybindings/Keybindings.js","../../src/js/modules/Menu/Menu.js","../../src/js/modules/Keybindings/defaults/actions.js","../../src/js/modules/MoveColumns/MoveColumns.js","../../src/js/modules/MoveRows/MoveRows.js","../../src/js/modules/Mutator/defaults/mutators.js","../../src/js/modules/Mutator/Mutator.js","../../src/js/modules/Page/Page.js","../../src/js/modules/Persistence/defaults/readers.js","../../src/js/modules/Persistence/defaults/writers.js","../../src/js/modules/Persistence/Persistence.js","../../src/js/modules/Print/Print.js","../../src/js/modules/ReactiveData/ReactiveData.js","../../src/js/modules/ResizeColumns/ResizeColumns.js","../../src/js/modules/ResizeRows/ResizeRows.js","../../src/js/modules/ResizeTable/ResizeTable.js","../../src/js/modules/ResponsiveLayout/ResponsiveLayout.js","../../src/js/modules/SelectRow/SelectRow.js","../../src/js/modules/Sort/defaults/sorters/datetime.js","../../src/js/modules/Sort/defaults/sorters/date.js","../../src/js/modules/Sort/defaults/sorters/number.js","../../src/js/modules/Sort/defaults/sorters.js","../../src/js/modules/Sort/defaults/sorters/string.js","../../src/js/modules/Sort/defaults/sorters/time.js","../../src/js/modules/Sort/defaults/sorters/boolean.js","../../src/js/modules/Sort/Sort.js","../../src/js/modules/Sort/defaults/sorters/array.js","../../src/js/modules/Sort/defaults/sorters/exists.js","../../src/js/modules/Sort/defaults/sorters/alphanum.js","../../src/js/modules/Validate/defaults/validators.js","../../src/js/modules/Validate/Validate.js","../../src/js/core/defaults/options.js","../../src/js/core/tools/OptionsList.js","../../src/js/core/rendering/Renderer.js","../../src/js/core/rendering/renderers/BasicHorizontal.js","../../src/js/core/rendering/renderers/VirtualDomHorizontal.js","../../src/js/core/ColumnManager.js","../../src/js/core/rendering/renderers/BasicVertical.js","../../src/js/core/rendering/renderers/VirtualDomVertical.js","../../src/js/core/RowManager.js","../../src/js/core/FooterManager.js","../../src/js/core/tools/InteractionMonitor.js","../../src/js/core/tools/ComponentFuctionBinder.js","../../src/js/core/tools/dataLoader.js","../../src/js/core/tools/ExternalEventBus.js","../../src/js/core/tools/InternalEventBus.js","../../src/js/core/tools/TableRegistry.js","../../src/js/modules/Layout/defaults/modes/fitData.js","../../src/js/modules/Layout/defaults/modes/fitDataStretch.js","../../src/js/modules/Layout/defaults/modes/fitDataGeneral.js","../../src/js/modules/Layout/Layout.js","../../src/js/modules/Layout/defaults/modes/fitColumns.js","../../src/js/modules/Layout/defaults/modes.js","../../src/js/modules/Localize/defaults/langs.js","../../src/js/modules/Localize/Localize.js","../../src/js/modules/Comms/Comms.js","../../src/js/core/tools/ModuleBinder.js","../../src/js/core/Tabulator.js","../../src/js/core/row/PseudoRow.js"],"sourcesContent":["export default class CoreFeature{\r\n\r\n\tconstructor(table){\r\n\t\tthis.table = table;\r\n\t}\r\n\r\n\t//////////////////////////////////////////\r\n\t/////////////// DataLoad /////////////////\r\n\t//////////////////////////////////////////\r\n\r\n\treloadData(data, silent){\r\n\t\treturn this.table.dataLoader.load(data, undefined, undefined, undefined, silent);\r\n\t}\r\n\r\n\t//////////////////////////////////////////\r\n\t///////////// Localization ///////////////\r\n\t//////////////////////////////////////////\r\n\r\n\tlangText(){\r\n\t\treturn this.table.modules.localize.getText(...arguments);\r\n\t}\r\n\r\n\tlangBind(){\r\n\t\treturn this.table.modules.localize.bind(...arguments);\r\n\t}\r\n\r\n\tlangLocale(){\r\n\t\treturn this.table.modules.localize.getLocale(...arguments);\r\n\t}\r\n\r\n\r\n\t//////////////////////////////////////////\r\n\t////////// Inter Table Comms /////////////\r\n\t//////////////////////////////////////////\r\n\r\n\tcommsConnections(){\r\n\t\treturn this.table.modules.comms.getConnections(...arguments);\r\n\t}\r\n\r\n\tcommsSend(){\r\n\t\treturn this.table.modules.comms.send(...arguments);\r\n\t}\r\n\r\n\t//////////////////////////////////////////\r\n\t//////////////// Layout /////////////////\r\n\t//////////////////////////////////////////\r\n\r\n\tlayoutMode(){\r\n\t\treturn this.table.modules.layout.getMode();\r\n\t}\r\n\r\n\tlayoutRefresh(){\r\n\t\treturn this.table.modules.layout.layout();\r\n\t}\r\n\r\n\r\n\t//////////////////////////////////////////\r\n\t/////////////// Event Bus ////////////////\r\n\t//////////////////////////////////////////\r\n\r\n\tsubscribe(){\r\n\t\tthis.table.eventBus.subscribe(...arguments);\r\n\t}\r\n\r\n\tunsubscribe(){\r\n\t\tthis.table.eventBus.unsubscribe(...arguments);\r\n\t}\r\n\r\n\tsubscribed(key){\r\n\t\tthis.table.eventBus.subscribed(key);\r\n\t}\r\n\r\n\tsubscriptionChange(){\r\n\t\tthis.table.eventBus.subscriptionChange(...arguments);\r\n\t}\r\n\r\n\tdispatch(){\r\n\t\tthis.table.eventBus.dispatch(...arguments);\r\n\t}\r\n\r\n\tchain(){\r\n\t\treturn this.table.eventBus.chain(...arguments);\r\n\t}\r\n\r\n\tconfirm(){\r\n\t\treturn this.table.eventBus.confirm(...arguments);\r\n\t}\r\n\r\n\tdispatchExternal(){\r\n\t\tthis.table.externalEvents.dispatch(...arguments);\r\n\t}\r\n\r\n\tsubscribedExternal(key){\r\n\t\tthis.table.externalEvents.subscribed(key);\r\n\t}\r\n\r\n\tsubscriptionChangeExternal(){\r\n\t\tthis.table.externalEvents.subscriptionChange(...arguments);\r\n\t}\r\n\r\n\t//////////////////////////////////////////\r\n\t//////////////// Options /////////////////\r\n\t//////////////////////////////////////////\r\n\r\n\toptions(key, value){\r\n\t\tif(typeof value !== \"undefined\"){\r\n\t\t\tthis.table.options[key] = value;\r\n\t\t}\r\n\r\n\t\treturn this.table.options[key];\r\n\t}\r\n\r\n\tsetOption(key, value){\r\n\t\tif(typeof value !== \"undefined\"){\r\n\t\t\tthis.table.options[key] = value;\r\n\t\t}\r\n\r\n\t\treturn this.table.options[key];\r\n\t}\r\n\r\n\r\n\t//////////////////////////////////////////\r\n\t//////////////// Modules /////////////////\r\n\t//////////////////////////////////////////\r\n\r\n\tmodule(key){\r\n\t\treturn this.table.module(key);\r\n\t}\r\n}","import CoreFeature from './CoreFeature.js';\r\n\r\nclass Module extends CoreFeature{\r\n\r\n\tconstructor(table, name){\r\n\t\tsuper(table);\r\n\r\n\t\tthis._handler = null;\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\t// setup module when table is initialized, to be overriden in module\r\n\t}\r\n\r\n\r\n\t///////////////////////////////////\r\n\t////// Options Registration ///////\r\n\t///////////////////////////////////\r\n\r\n\tregisterTableOption(key, value){\r\n\t\tthis.table.optionsList.register(key, value);\r\n\t}\r\n\r\n\tregisterColumnOption(key, value){\r\n\t\tthis.table.columnManager.optionsList.register(key, value);\r\n\t}\r\n\r\n\t///////////////////////////////////\r\n\t/// Public Function Registation ///\r\n\t///////////////////////////////////\r\n\r\n\tregisterTableFunction(name, func){\r\n\t\tif(typeof this.table[name] === \"undefined\"){\r\n\t\t\tthis.table[name] = func;\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Unable to bind table function, name already in use\", name)\r\n\t\t}\r\n\t}\r\n\r\n\tregisterComponentFunction(component, func, handler){\r\n\t\treturn this.table.componentFunctionBinder.bind(component, func, handler);\r\n\t}\r\n\r\n\t///////////////////////////////////\r\n\t////////// Data Pipeline //////////\r\n\t///////////////////////////////////\r\n\r\n\tregisterDataHandler(handler, priority){\r\n\t\tthis.table.rowManager.registerDataPipelineHandler(handler, priority)\r\n\t\tthis._handler = handler;\r\n\t}\r\n\r\n\tregisterDisplayHandler(handler, priority){\r\n\t\tthis.table.rowManager.registerDisplayPipelineHandler(handler, priority)\r\n\t\tthis._handler = handler;\r\n\t}\r\n\r\n\trefreshData(renderInPosition, handler){\r\n\t\tif(!handler){\r\n\t\t\thandler = this._handler;\r\n\t\t}\r\n\r\n\t\tif(handler){\r\n\t\t\tthis.table.rowManager.refreshActiveData(handler, false, renderInPosition);\r\n\t\t}\r\n\t}\r\n}\r\n\r\nexport default Module;","export default class Helpers{\r\n\r\n\tstatic elVisible(el){\r\n\t\treturn !(el.offsetWidth <= 0 && el.offsetHeight <= 0);\r\n\t}\r\n\r\n\tstatic elOffset(el){\r\n\t\tvar box = el.getBoundingClientRect();\r\n\r\n\t\treturn {\r\n\t\t\ttop: box.top + window.pageYOffset - document.documentElement.clientTop,\r\n\t\t\tleft: box.left + window.pageXOffset - document.documentElement.clientLeft\r\n\t\t};\r\n\t}\r\n\r\n\tstatic deepClone(obj){\r\n\t\tvar clone = Object.assign(Array.isArray(obj) ? [] : {}, obj);\r\n\r\n\t\tfor(var i in obj) {\r\n\t\t\tif(obj[i] != null && typeof(obj[i]) === \"object\"){\r\n\t\t\t\tif (obj[i] instanceof Date) {\r\n\t\t\t\t\tclone[i] = new Date(obj[i]);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tclone[i] = this.deepClone(obj[i]);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn clone;\r\n\t}\r\n}","import Module from '../../core/Module.js';\r\nimport Helpers from '../../core/tools/Helpers.js';\r\n\r\nimport defautlAccessors from './defaults/accessors.js';\r\n\r\nclass Accessor extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.allowedTypes = [\"\", \"data\", \"download\", \"clipboard\", \"print\", \"htmlOutput\"] //list of accessor types\r\n\r\n\t\tthis.registerColumnOption(\"accessor\");\r\n\t\tthis.registerColumnOption(\"accessorParams\");\r\n\t\tthis.registerColumnOption(\"accessorData\");\r\n\t\tthis.registerColumnOption(\"accessorDataParams\");\r\n\t\tthis.registerColumnOption(\"accessorDownload\");\r\n\t\tthis.registerColumnOption(\"accessorDownloadParams\");\r\n\t\tthis.registerColumnOption(\"accessorClipboard\");\r\n\t\tthis.registerColumnOption(\"accessorClipboardParams\");\r\n\t\tthis.registerColumnOption(\"accessorPrint\");\r\n\t\tthis.registerColumnOption(\"accessorPrintParams\");\r\n\t\tthis.registerColumnOption(\"accessorHtmlOutput\");\r\n\t\tthis.registerColumnOption(\"accessorHtmlOutputParams\");\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tthis.subscribe(\"column-layout\", this.initializeColumn.bind(this));\r\n\t\tthis.subscribe(\"row-data-retrieve\", this.transformRow.bind(this));\r\n\t}\r\n\r\n\t//initialize column accessor\r\n\tinitializeColumn(column){\r\n\t\tvar match = false,\r\n\t\tconfig = {};\r\n\r\n\t\tthis.allowedTypes.forEach(function(type){\r\n\t\t\tvar key = \"accessor\" + (type.charAt(0).toUpperCase() + type.slice(1)),\r\n\t\t\taccessor;\r\n\r\n\t\t\tif(column.definition[key]){\r\n\t\t\t\taccessor = this.lookupAccessor(column.definition[key]);\r\n\r\n\t\t\t\tif(accessor){\r\n\t\t\t\t\tmatch = true;\r\n\r\n\t\t\t\t\tconfig[key] = {\r\n\t\t\t\t\t\taccessor:accessor,\r\n\t\t\t\t\t\tparams: column.definition[key + \"Params\"] || {},\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tif(match){\r\n\t\t\tcolumn.modules.accessor = config;\r\n\t\t}\r\n\t}\r\n\r\n\tlookupAccessor(value){\r\n\t\tvar accessor = false;\r\n\r\n\t\t//set column accessor\r\n\t\tswitch(typeof value){\r\n\t\t\tcase \"string\":\r\n\t\t\tif(Accessor.accessors[value]){\r\n\t\t\t\taccessor = Accessor.accessors[value]\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Accessor Error - No such accessor found, ignoring: \", value);\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"function\":\r\n\t\t\taccessor = value;\r\n\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\treturn accessor;\r\n\t}\r\n\r\n\t//apply accessor to row\r\n\ttransformRow(row, type){\r\n\t\tvar key = \"accessor\" + (type.charAt(0).toUpperCase() + type.slice(1)),\r\n\t\trowComponent = row.getComponent();\r\n\r\n\t\t//clone data object with deep copy to isolate internal data from returned result\r\n\t\tvar data = Helpers.deepClone(row.data || {});\r\n\r\n\t\tthis.table.columnManager.traverse(function(column){\r\n\t\t\tvar value, accessor, params, colCompnent;\r\n\r\n\t\t\tif(column.modules.accessor){\r\n\r\n\t\t\t\taccessor = column.modules.accessor[key] || column.modules.accessor.accessor || false;\r\n\r\n\t\t\t\tif(accessor){\r\n\t\t\t\t\tvalue = column.getFieldValue(data);\r\n\r\n\t\t\t\t\tif(value != \"undefined\"){\r\n\t\t\t\t\t\tcolCompnent = column.getComponent();\r\n\t\t\t\t\t\tparams = typeof accessor.params === \"function\" ? accessor.params(value, data, type, colCompnent, rowComponent) : accessor.params;\r\n\t\t\t\t\t\tcolumn.setFieldValue(data, accessor.accessor(value, data, type, params, colCompnent, rowComponent));\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn data;\r\n\t}\r\n}\r\n\r\n//load defaults\r\nAccessor.moduleName = \"accessor\";\r\nAccessor.accessors = defautlAccessors;\r\n\r\nexport default Accessor;","export default {}","function generateParamsList(data, prefix){\r\n\tvar output = [];\r\n\r\n\tprefix = prefix || \"\";\r\n\r\n\tif(Array.isArray(data)){\r\n\t\tdata.forEach((item, i) => {\r\n\t\t\toutput = output.concat(generateParamsList(item, prefix ? prefix + \"[\" + i + \"]\" : i));\r\n\t\t});\r\n\t}else if (typeof data === \"object\"){\r\n\t\tfor (var key in data){\r\n\t\t\toutput = output.concat(generateParamsList(data[key], prefix ? prefix + \"[\" + key + \"]\" : key));\r\n\t\t}\r\n\t}else{\r\n\t\toutput.push({key:prefix, value:data});\r\n\t}\r\n\r\n\treturn output;\r\n}\r\n\r\nfunction serializeParams(params){\r\n\tvar output = generateParamsList(params),\r\n\tencoded = [];\r\n\r\n\toutput.forEach(function(item){\r\n\t\tencoded.push(encodeURIComponent(item.key) + \"=\" + encodeURIComponent(item.value));\r\n\t});\r\n\r\n\treturn encoded.join(\"&\");\r\n}\r\n\r\nexport default function(url, config, params){\r\n\tif(url){\r\n\t\tif(params && Object.keys(params).length){\r\n\t\t\tif(!config.method || config.method.toLowerCase() == \"get\"){\r\n\t\t\t\tconfig.method = \"get\";\r\n\r\n\t\t\t\turl += (url.includes(\"?\") ? \"&\" : \"?\") + serializeParams(params);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\treturn url;\r\n};","export default {\r\n\t\"json\":{\r\n\t\theaders:{\r\n\t\t\t'Content-Type': 'application/json',\r\n\t\t},\r\n\t\tbody:function(url, config, params){\r\n\t\t\treturn JSON.stringify(params);\r\n\t\t},\r\n\t},\r\n\t\"form\":{\r\n\t\theaders:{\r\n\t\t},\r\n\t\tbody:function(url, config, params){\r\n\t\t\tvar output = this.generateParamsList(params),\r\n\t\t\tform = new FormData();\r\n\r\n\t\t\toutput.forEach(function(item){\r\n\t\t\t\tform.append(item.key, item.value);\r\n\t\t\t});\r\n\r\n\t\t\treturn form;\r\n\t\t},\r\n\t},\r\n};","import Module from '../../core/Module.js';\r\n\r\nimport defaultConfig from './defaults/config.js';\r\nimport defaultURLGenerator from './defaults/urlGenerator.js';\r\nimport defaultLoaderPromise from './defaults/loaderPromise.js';\r\nimport defaultContentTypeFormatters from './defaults/contentTypeFormatters.js';\r\n\r\nclass Ajax extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.config = false; //hold config object for ajax request\r\n\t\tthis.url = \"\"; //request URL\r\n\t\tthis.urlGenerator = false;\r\n\t\tthis.params = false; //request parameters\r\n\r\n\t\tthis.loaderPromise = false;\r\n\r\n\t\tthis.registerTableOption(\"ajaxURL\", false); //url for ajax loading\r\n\t\tthis.registerTableOption(\"ajaxURLGenerator\", false);\r\n\t\tthis.registerTableOption(\"ajaxParams\", {}); //params for ajax loading\r\n\t\tthis.registerTableOption(\"ajaxConfig\", \"get\"); //ajax request type\r\n\t\tthis.registerTableOption(\"ajaxContentType\", \"form\"); //ajax request type\r\n\t\tthis.registerTableOption(\"ajaxRequestFunc\", false); //promise function\r\n\r\n\t\tthis.registerTableOption(\"ajaxRequesting\", function(){});\r\n\t\tthis.registerTableOption(\"ajaxResponse\", false);\r\n\r\n\t\tthis.contentTypeFormatters = Ajax.contentTypeFormatters;\r\n\t}\r\n\r\n\t//initialize setup options\r\n\tinitialize(){\r\n\t\tthis.loaderPromise = this.table.options.ajaxRequestFunc || Ajax.defaultLoaderPromise;\r\n\t\tthis.urlGenerator = this.table.options.ajaxURLGenerator || Ajax.defaultURLGenerator;\r\n\r\n\t\tif(this.table.options.ajaxParams){\r\n\t\t\tthis.setParams(this.table.options.ajaxParams);\r\n\t\t}\r\n\r\n\t\tif(this.table.options.ajaxConfig){\r\n\t\t\tthis.setConfig(this.table.options.ajaxConfig);\r\n\t\t}\r\n\r\n\t\tif(this.table.options.ajaxURL){\r\n\t\t\tthis.setUrl(this.table.options.ajaxURL);\r\n\t\t}\r\n\r\n\t\tthis.registerTableFunction(\"getAjaxUrl\", this.getUrl.bind(this));\r\n\r\n\t\tthis.subscribe(\"data-loading\", this.requestDataCheck.bind(this));\r\n\t\tthis.subscribe(\"data-load\", this.requestData.bind(this));\r\n\t}\r\n\r\n\r\n\trequestDataCheck(data, params, config, silent){\r\n\t\treturn !!((!data && this.url) || typeof data === \"string\");\r\n\t}\r\n\r\n\trequestData(data, params, config, silent, previousData){\r\n\t\tif(this.requestDataCheck(data)){\r\n\t\t\tif(data){\r\n\t\t\t\tthis.setUrl(data);\r\n\t\t\t}\r\n\r\n\t\t\tif(params){\r\n\t\t\t\tthis.setParams(params, true);\r\n\t\t\t}\r\n\r\n\t\t\tif(config){\r\n\t\t\t\tthis.setConfig(config);\r\n\t\t\t}\r\n\r\n\t\t\treturn this.sendRequest();\r\n\t\t}else{\r\n\t\t\treturn previousData;\r\n\t\t}\r\n\t}\r\n\r\n\t//set ajax params\r\n\tsetParams(params, update){\r\n\t\tif(update){\r\n\t\t\tthis.params = this.params || {};\r\n\r\n\t\t\tfor(let key in params){\r\n\t\t\t\tthis.params[key] = params[key];\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tthis.params = params;\r\n\t\t}\r\n\t}\r\n\r\n\tgetParams(){\r\n\t\treturn this.params || {};\r\n\t}\r\n\r\n\t//load config object\r\n\tsetConfig(config){\r\n\t\tthis._loadDefaultConfig();\r\n\r\n\t\tif(typeof config == \"string\"){\r\n\t\t\tthis.config.method = config;\r\n\t\t}else{\r\n\t\t\tfor(let key in config){\r\n\t\t\t\tthis.config[key] = config[key];\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//create config object from default\r\n\t_loadDefaultConfig(force){\r\n\t\tif(!this.config || force){\r\n\r\n\t\t\tthis.config = {};\r\n\r\n\t\t\t//load base config from defaults\r\n\t\t\tfor(let key in Ajax.defaultConfig){\r\n\t\t\t\tthis.config[key] = Ajax.defaultConfig[key];\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//set request url\r\n\tsetUrl(url){\r\n\t\tthis.url = url;\r\n\t}\r\n\r\n\t//get request url\r\n\tgetUrl(){\r\n\t\treturn this.url;\r\n\t}\r\n\r\n\t//send ajax request\r\n\tsendRequest(silent){\r\n\t\tvar url = this.url,\r\n\t\tesc, query;\r\n\r\n\t\tthis._loadDefaultConfig();\r\n\r\n\t\tif(this.table.options.ajaxRequesting.call(this.table, this.url, this.params) !== false){\r\n\t\t\treturn this.loaderPromise(url, this.config, this.params)\r\n\t\t\t.then((data)=>{\r\n\t\t\t\tif(this.table.options.ajaxResponse){\r\n\t\t\t\t\tdata = this.table.options.ajaxResponse.call(this.table, this.url, this.params, data);\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn data;\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\treturn Promise.reject();\r\n\t\t}\r\n\t}\r\n}\r\n\r\nAjax.moduleName = \"ajax\";\r\n\r\n//load defaults\r\nAjax.defaultConfig = defaultConfig;\r\nAjax.defaultURLGenerator = defaultURLGenerator;\r\nAjax.defaultLoaderPromise = defaultLoaderPromise;\r\nAjax.contentTypeFormatters = defaultContentTypeFormatters;\r\n\r\nexport default Ajax;","export default {\r\n\tmethod: \"GET\",\r\n};","export default function(url, config, params){\r\n\tvar contentType;\r\n\r\n\treturn new Promise((resolve, reject) => {\r\n\t\t//set url\r\n\t\turl = this.urlGenerator.call(this.table, url, config, params);\r\n\r\n\t\t//set body content if not GET request\r\n\t\tif(config.method.toUpperCase() != \"GET\"){\r\n\t\t\tcontentType = typeof this.table.options.ajaxContentType === \"object\" ? this.table.options.ajaxContentType : this.contentTypeFormatters[this.table.options.ajaxContentType];\r\n\t\t\tif(contentType){\r\n\r\n\t\t\t\tfor(var key in contentType.headers){\r\n\t\t\t\t\tif(!config.headers){\r\n\t\t\t\t\t\tconfig.headers = {};\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif(typeof config.headers[key] === \"undefined\"){\r\n\t\t\t\t\t\tconfig.headers[key] = contentType.headers[key];\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tconfig.body = contentType.body.call(this, url, config, params);\r\n\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Ajax Error - Invalid ajaxContentType value:\", this.table.options.ajaxContentType);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(url){\r\n\t\t\t//configure headers\r\n\t\t\tif(typeof config.headers === \"undefined\"){\r\n\t\t\t\tconfig.headers = {};\r\n\t\t\t}\r\n\r\n\t\t\tif(typeof config.headers.Accept === \"undefined\"){\r\n\t\t\t\tconfig.headers.Accept = \"application/json\";\r\n\t\t\t}\r\n\r\n\t\t\tif(typeof config.headers[\"X-Requested-With\"] === \"undefined\"){\r\n\t\t\t\tconfig.headers[\"X-Requested-With\"] = \"XMLHttpRequest\";\r\n\t\t\t}\r\n\r\n\t\t\tif(typeof config.mode === \"undefined\"){\r\n\t\t\t\tconfig.mode = \"cors\";\r\n\t\t\t}\r\n\r\n\t\t\tif(config.mode == \"cors\"){\r\n\r\n\t\t\t\tif(typeof config.headers[\"Access-Control-Allow-Origin\"] === \"undefined\"){\r\n\t\t\t\t\tconfig.headers[\"Access-Control-Allow-Origin\"] = window.location.origin;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(typeof config.credentials === \"undefined\"){\r\n\t\t\t\t\tconfig.credentials = 'same-origin';\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tif(typeof config.credentials === \"undefined\"){\r\n\t\t\t\t\tconfig.credentials = 'include';\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t//send request\r\n\t\t\tfetch(url, config)\r\n\t\t\t.then((response)=>{\r\n\t\t\t\tif(response.ok) {\r\n\t\t\t\t\tresponse.json()\r\n\t\t\t\t\t.then((data)=>{\r\n\t\t\t\t\t\tresolve(data);\r\n\t\t\t\t\t}).catch((error)=>{\r\n\t\t\t\t\t\treject(error);\r\n\t\t\t\t\t\tconsole.warn(\"Ajax Load Error - Invalid JSON returned\", error);\r\n\t\t\t\t\t});\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.error(\"Ajax Load Error - Connection Error: \" + response.status, response.statusText);\r\n\t\t\t\t\treject(response);\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t\t.catch((error)=>{\r\n\t\t\t\tconsole.error(\"Ajax Load Error - Connection Error: \", error);\r\n\t\t\t\treject(error);\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Ajax Load Error - No URL Set\");\r\n\t\t\tresolve([]);\r\n\t\t}\r\n\t});\r\n};","import Module from '../../core/Module.js';\r\n\r\nimport defaultPasteActions from './defaults/pasteActions.js';\r\nimport defaultPasteParsers from './defaults/pasteParsers.js';\r\n\r\nclass Clipboard extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.mode = true;\r\n\t\tthis.pasteParser = function(){};\r\n\t\tthis.pasteAction = function(){};\r\n\t\tthis.customSelection = false;\r\n\t\tthis.rowRange = false;\r\n\t\tthis.blocked = true; //block copy actions not originating from this command\r\n\r\n\t\tthis.registerTableOption(\"clipboard\", false); //enable clipboard\r\n\t\tthis.registerTableOption(\"clipboardCopyStyled\", true); //formatted table data\r\n\t\tthis.registerTableOption(\"clipboardCopyConfig\", false); //clipboard config\r\n\t\tthis.registerTableOption(\"clipboardCopyFormatter\", false); //DEPRICATED - REMOVE in 5.0\r\n\t\tthis.registerTableOption(\"clipboardCopyRowRange\", \"active\"); //restrict clipboard to visible rows only\r\n\t\tthis.registerTableOption(\"clipboardPasteParser\", \"table\"); //convert pasted clipboard data to rows\r\n\t\tthis.registerTableOption(\"clipboardPasteAction\", \"insert\"); //how to insert pasted data into the table\r\n\r\n\t\tthis.registerColumnOption(\"clipboard\");\r\n\t\tthis.registerColumnOption(\"titleClipboard\");\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tthis.mode = this.table.options.clipboard;\r\n\r\n\t\tthis.rowRange = this.table.options.clipboardCopyRowRange;\r\n\r\n\t\tif(this.mode === true || this.mode === \"copy\"){\r\n\t\t\tthis.table.element.addEventListener(\"copy\", (e) => {\r\n\t\t\t\tvar plain, html, list;\r\n\r\n\t\t\t\tif(!this.blocked){\r\n\t\t\t\t\te.preventDefault();\r\n\r\n\t\t\t\t\tif(this.customSelection){\r\n\t\t\t\t\t\tplain = this.customSelection;\r\n\r\n\t\t\t\t\t\tif(this.table.options.clipboardCopyFormatter){\r\n\t\t\t\t\t\t\tplain = this.table.options.clipboardCopyFormatter(\"plain\", plain);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}else{\r\n\r\n\t\t\t\t\t\tvar list = this.table.modules.export.generateExportList(this.table.options.clipboardCopyConfig, this.table.options.clipboardCopyStyled, this.rowRange, \"clipboard\");\r\n\r\n\t\t\t\t\t\thtml = this.table.modules.export.genereateHTMLTable(list);\r\n\t\t\t\t\t\tplain = html ? this.generatePlainContent(list) : \"\";\r\n\r\n\t\t\t\t\t\tif(this.table.options.clipboardCopyFormatter){\r\n\t\t\t\t\t\t\tplain = this.table.options.clipboardCopyFormatter(\"plain\", plain);\r\n\t\t\t\t\t\t\thtml = this.table.options.clipboardCopyFormatter(\"html\", html);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (window.clipboardData && window.clipboardData.setData) {\r\n\t\t\t\t\t\twindow.clipboardData.setData('Text', plain);\r\n\t\t\t\t\t} else if (e.clipboardData && e.clipboardData.setData) {\r\n\t\t\t\t\t\te.clipboardData.setData('text/plain', plain);\r\n\t\t\t\t\t\tif(html){\r\n\t\t\t\t\t\t\te.clipboardData.setData('text/html', html);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} else if (e.originalEvent && e.originalEvent.clipboardData.setData) {\r\n\t\t\t\t\t\te.originalEvent.clipboardData.setData('text/plain', plain);\r\n\t\t\t\t\t\tif(html){\r\n\t\t\t\t\t\t\te.originalEvent.clipboardData.setData('text/html', html);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tthis.dispatchExternal(\"clipboardCopied\", plain, html);\r\n\r\n\t\t\t\t\tthis.reset();\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif(this.mode === true || this.mode === \"paste\"){\r\n\t\t\tthis.table.element.addEventListener(\"paste\", (e) => {\r\n\t\t\t\tthis.paste(e);\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tthis.setPasteParser(this.table.options.clipboardPasteParser);\r\n\t\tthis.setPasteAction(this.table.options.clipboardPasteAction);\r\n\r\n\t\tthis.registerTableFunction(\"copyToClipboard\", this.copy.bind(this));\r\n\t}\r\n\r\n\treset(){\r\n\t\tthis.blocked = true;\r\n\t\tthis.customSelection = false;\r\n\t}\r\n\r\n\tgeneratePlainContent (list) {\r\n\t\tvar output = [];\r\n\r\n\t\tlist.forEach((row) => {\r\n\t\t\tvar rowData = [];\r\n\r\n\t\t\trow.columns.forEach((col) => {\r\n\t\t\t\tvar value = \"\";\r\n\r\n\t\t\t\tif(col){\r\n\r\n\t\t\t\t\tif(row.type === \"group\"){\r\n\t\t\t\t\t\tcol.value = col.component.getKey();\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif(col.value === null){\r\n\t\t\t\t\t\tvalue = \"\";\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tswitch(typeof col.value){\r\n\t\t\t\t\t\t\tcase \"object\":\r\n\t\t\t\t\t\t\tvalue = JSON.stringify(col.value);\r\n\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\t\tcase \"undefined\":\r\n\t\t\t\t\t\t\tvalue = \"\";\r\n\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\t\tdefault:\r\n\t\t\t\t\t\t\tvalue = col.value;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\trowData.push(value);\r\n\t\t\t});\r\n\r\n\t\t\toutput.push(rowData.join(\"\\t\"));\r\n\t\t});\r\n\r\n\t\treturn output.join(\"\\n\");\r\n\t}\r\n\r\n\tcopy (range, internal) {\r\n\t\tvar range, sel, textRange;\r\n\t\tthis.blocked = false;\r\n\t\tthis.customSelection = false;\r\n\r\n\t\tif (this.mode === true || this.mode === \"copy\") {\r\n\r\n\t\t\tthis.rowRange = range || this.table.options.clipboardCopyRowRange;\r\n\r\n\t\t\tif (typeof window.getSelection != \"undefined\" && typeof document.createRange != \"undefined\") {\r\n\t\t\t\trange = document.createRange();\r\n\t\t\t\trange.selectNodeContents(this.table.element);\r\n\t\t\t\tsel = window.getSelection();\r\n\r\n\t\t\t\tif (sel.toString() && internal) {\r\n\t\t\t\t\tthis.customSelection = sel.toString();\r\n\t\t\t\t}\r\n\r\n\t\t\t\tsel.removeAllRanges();\r\n\t\t\t\tsel.addRange(range);\r\n\t\t\t} else if (typeof document.selection != \"undefined\" && typeof document.body.createTextRange != \"undefined\") {\r\n\t\t\t\ttextRange = document.body.createTextRange();\r\n\t\t\t\ttextRange.moveToElementText(this.table.element);\r\n\t\t\t\ttextRange.select();\r\n\t\t\t}\r\n\r\n\t\t\tdocument.execCommand('copy');\r\n\r\n\t\t\tif (sel) {\r\n\t\t\t\tsel.removeAllRanges();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//PASTE EVENT HANDLING\r\n\tsetPasteAction(action){\r\n\r\n\t\tswitch(typeof action){\r\n\t\t\tcase \"string\":\r\n\t\t\tthis.pasteAction = Clipboard.pasteActions[action];\r\n\r\n\t\t\tif(!this.pasteAction){\r\n\t\t\t\tconsole.warn(\"Clipboard Error - No such paste action found:\", action);\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"function\":\r\n\t\t\tthis.pasteAction = action;\r\n\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\tsetPasteParser(parser){\r\n\t\tswitch(typeof parser){\r\n\t\t\tcase \"string\":\r\n\t\t\tthis.pasteParser = Clipboard.pasteParsers[parser];\r\n\r\n\t\t\tif(!this.pasteParser){\r\n\t\t\t\tconsole.warn(\"Clipboard Error - No such paste parser found:\", parser);\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"function\":\r\n\t\t\tthis.pasteParser = parser;\r\n\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\tpaste(e){\r\n\t\tvar data, rowData, rows;\r\n\r\n\t\tif(this.checkPaseOrigin(e)){\r\n\r\n\t\t\tdata = this.getPasteData(e);\r\n\r\n\t\t\trowData = this.pasteParser.call(this, data);\r\n\r\n\t\t\tif(rowData){\r\n\t\t\t\te.preventDefault();\r\n\r\n\t\t\t\tif(this.table.modExists(\"mutator\")){\r\n\t\t\t\t\trowData = this.mutateData(rowData);\r\n\t\t\t\t}\r\n\r\n\t\t\t\trows = this.pasteAction.call(this, rowData);\r\n\r\n\t\t\t\tthis.dispatchExternal(\"clipboardPasted\", data, rowData, rows);\r\n\t\t\t}else{\r\n\t\t\t\tthis.dispatchExternal(\"clipboardPasteError\", data);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tmutateData(data){\r\n\t\tvar output = [];\r\n\r\n\t\tif(Array.isArray(data)){\r\n\t\t\tdata.forEach((row) => {\r\n\t\t\t\toutput.push(this.table.modules.mutator.transformRow(row, \"clipboard\"));\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\toutput = data;\r\n\t\t}\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\r\n\tcheckPaseOrigin(e){\r\n\t\tvar valid = true;\r\n\r\n\t\tif(e.target.tagName != \"DIV\" || this.table.modules.edit.currentCell){\r\n\t\t\tvalid = false;\r\n\t\t}\r\n\r\n\t\treturn valid;\r\n\t}\r\n\r\n\tgetPasteData(e){\r\n\t\tvar data;\r\n\r\n\t\tif (window.clipboardData && window.clipboardData.getData) {\r\n\t\t\tdata = window.clipboardData.getData('Text');\r\n\t\t} else if (e.clipboardData && e.clipboardData.getData) {\r\n\t\t\tdata = e.clipboardData.getData('text/plain');\r\n\t\t} else if (e.originalEvent && e.originalEvent.clipboardData.getData) {\r\n\t\t\tdata = e.originalEvent.clipboardData.getData('text/plain');\r\n\t\t}\r\n\r\n\t\treturn data;\r\n\t}\r\n}\r\n\r\nClipboard.moduleName = \"clipboard\";\r\n\r\n//load defaults\r\nClipboard.pasteActions = defaultPasteActions;\r\nClipboard.pasteParsers = defaultPasteParsers;\r\n\r\nexport default Clipboard;","export default {\r\n\treplace:function(rows){\r\n\t\treturn this.table.setData(rows);\r\n\t},\r\n\tupdate:function(rows){\r\n\t\treturn this.table.updateOrAddData(rows);\r\n\t},\r\n\tinsert:function(rows){\r\n\t\treturn this.table.addData(rows);\r\n\t},\r\n};","export default {\r\n\ttable:function(clipboard){\r\n\t\tvar data = [],\r\n\t\tsuccess = false,\r\n\t\theaderFindSuccess = true,\r\n\t\tcolumns = this.table.columnManager.columns,\r\n\t\tcolumnMap = [],\r\n\t\trows = [];\r\n\r\n\t\t//get data from clipboard into array of columns and rows.\r\n\t\tclipboard = clipboard.split(\"\\n\");\r\n\r\n\t\tclipboard.forEach(function(row){\r\n\t\t\tdata.push(row.split(\"\\t\"));\r\n\t\t});\r\n\r\n\t\tif(data.length && !(data.length === 1 && data[0].length < 2)){\r\n\t\t\tsuccess = true;\r\n\r\n\t\t\t//check if headers are present by title\r\n\t\t\tdata[0].forEach(function(value){\r\n\t\t\t\tvar column = columns.find(function(column){\r\n\t\t\t\t\treturn value && column.definition.title && value.trim() && column.definition.title.trim() === value.trim();\r\n\t\t\t\t});\r\n\r\n\t\t\t\tif(column){\r\n\t\t\t\t\tcolumnMap.push(column);\r\n\t\t\t\t}else{\r\n\t\t\t\t\theaderFindSuccess = false;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\t//check if column headers are present by field\r\n\t\t\tif(!headerFindSuccess){\r\n\t\t\t\theaderFindSuccess = true;\r\n\t\t\t\tcolumnMap = [];\r\n\r\n\t\t\t\tdata[0].forEach(function(value){\r\n\t\t\t\t\tvar column = columns.find(function(column){\r\n\t\t\t\t\t\treturn value && column.field && value.trim() && column.field.trim() === value.trim();\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\tif(column){\r\n\t\t\t\t\t\tcolumnMap.push(column);\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\theaderFindSuccess = false;\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\tif(!headerFindSuccess){\r\n\t\t\t\t\tcolumnMap = this.table.columnManager.columnsByIndex;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t//remove header row if found\r\n\t\t\tif(headerFindSuccess){\r\n\t\t\t\tdata.shift();\r\n\t\t\t}\r\n\r\n\t\t\tdata.forEach(function(item){\r\n\t\t\t\tvar row = {};\r\n\r\n\t\t\t\titem.forEach(function(value, i){\r\n\t\t\t\t\tif(columnMap[i]){\r\n\t\t\t\t\t\trow[columnMap[i].field] = value;\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\trows.push(row);\r\n\t\t\t});\r\n\r\n\t\t\treturn rows;\r\n\t\t}else{\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n};","class CalcComponent{\r\n\tconstructor (row){\r\n\t\tthis._row = row;\r\n\r\n\t\treturn new Proxy(this, {\r\n\t\t\tget: function(target, name, receiver) {\r\n\t\t\t\tif (typeof target[name] !== \"undefined\") {\r\n\t\t\t\t\treturn target[name];\r\n\t\t\t\t}else{\r\n\t\t\t\t\treturn target._row.table.componentFunctionBinder.handle(\"row\", target._row, name)\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t})\r\n\t}\r\n\r\n\tgetData(transform){\r\n\t\treturn this._row.getData(transform);\r\n\t}\r\n\r\n\tgetElement(){\r\n\t\treturn this._row.getElement();\r\n\t}\r\n\r\n\tgetTable(){\r\n\t\treturn this._row.table;\r\n\t}\r\n\r\n\tgetCells(){\r\n\t\tvar cells = [];\r\n\r\n\t\tthis._row.getCells().forEach(function(cell){\r\n\t\t\tcells.push(cell.getComponent());\r\n\t\t});\r\n\r\n\t\treturn cells;\r\n\t}\r\n\r\n\tgetCell(column){\r\n\t\tvar cell = this._row.getCell(column);\r\n\t\treturn cell ? cell.getComponent() : false;\r\n\t}\r\n\r\n\t_getSelf(){\r\n\t\treturn this._row;\r\n\t}\r\n}\r\n\r\nexport default CalcComponent;","//public cell object\r\nexport default class CellComponent {\r\n\r\n\tconstructor (cell){\r\n\t\tthis._cell = cell;\r\n\r\n\t\treturn new Proxy(this, {\r\n\t\t\tget: function(target, name, receiver) {\r\n\t\t\t\tif (typeof target[name] !== \"undefined\") {\r\n\t\t\t\t\treturn target[name];\r\n\t\t\t\t}else{\r\n\t\t\t\t\treturn target._cell.table.componentFunctionBinder.handle(\"cell\", target._cell, name)\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t})\r\n\t}\r\n\r\n\tgetValue(){\r\n\t\treturn this._cell.getValue();\r\n\t}\r\n\r\n\tgetOldValue(){\r\n\t\treturn this._cell.getOldValue();\r\n\t}\r\n\r\n\tgetInitialValue(){\r\n\t\treturn this._cell.initialValue;\r\n\t}\r\n\r\n\tgetElement(){\r\n\t\treturn this._cell.getElement();\r\n\t}\r\n\r\n\tgetRow(){\r\n\t\treturn this._cell.row.getComponent();\r\n\t}\r\n\r\n\tgetData(){\r\n\t\treturn this._cell.row.getData();\r\n\t}\r\n\r\n\tgetField(){\r\n\t\treturn this._cell.column.getField();\r\n\t}\r\n\r\n\tgetColumn(){\r\n\t\treturn this._cell.column.getComponent();\r\n\t}\r\n\r\n\tsetValue(value, mutate){\r\n\t\tif(typeof mutate == \"undefined\"){\r\n\t\t\tmutate = true;\r\n\t\t}\r\n\r\n\t\tthis._cell.setValue(value, mutate);\r\n\t}\r\n\r\n\trestoreOldValue(){\r\n\t\tthis._cell.setValueActual(this._cell.getOldValue());\r\n\t}\r\n\r\n\trestoreInitialValue(){\r\n\t\tthis._cell.setValueActual(this._cell.initialValue);\r\n\t}\r\n\r\n\tcheckHeight(){\r\n\t\tthis._cell.checkHeight();\r\n\t}\r\n\r\n\tgetTable(){\r\n\t\treturn this._cell.table;\r\n\t}\r\n\r\n\t_getSelf(){\r\n\t\treturn this._cell;\r\n\t}\r\n}","import CoreFeature from '../CoreFeature.js';\r\nimport CellComponent from './CellComponent.js';\r\n\r\nexport default class Cell extends CoreFeature{\r\n\tconstructor(column, row){\r\n\t\tsuper(column.table);\r\n\r\n\t\tthis.table = column.table;\r\n\t\tthis.column = column;\r\n\t\tthis.row = row;\r\n\t\tthis.element = null;\r\n\t\tthis.value = null;\r\n\t\tthis.initialValue;\r\n\t\tthis.oldValue = null;\r\n\t\tthis.modules = {};\r\n\r\n\t\tthis.height = null;\r\n\t\tthis.width = null;\r\n\t\tthis.minWidth = null;\r\n\r\n\t\tthis.component = null;\r\n\r\n\t\tthis.loaded = false; //track if the cell has been added to the DOM yet\r\n\r\n\t\tthis.build();\r\n\t}\r\n\r\n\t//////////////// Setup Functions /////////////////\r\n\t//generate element\r\n\tbuild(){\r\n\t\tthis.generateElement();\r\n\r\n\t\tthis.setWidth();\r\n\r\n\t\tthis._configureCell();\r\n\r\n\t\tthis.setValueActual(this.column.getFieldValue(this.row.data));\r\n\r\n\t\tthis.initialValue = this.value;\r\n\t}\r\n\r\n\tgenerateElement(){\r\n\t\tthis.element = document.createElement('div');\r\n\t\tthis.element.className = \"tabulator-cell\";\r\n\t\tthis.element.setAttribute(\"role\", \"gridcell\");\r\n\t\tthis.element = this.element;\r\n\t}\r\n\r\n\t_configureCell(){\r\n\t\tvar element = this.element,\r\n\t\tfield = this.column.getField(),\r\n\t\tvertAligns = {\r\n\t\t\ttop:\"flex-start\",\r\n\t\t\tbottom:\"flex-end\",\r\n\t\t\tmiddle:\"center\",\r\n\t\t},\r\n\t\thozAligns = {\r\n\t\t\tleft:\"flex-start\",\r\n\t\t\tright:\"flex-end\",\r\n\t\t\tcenter:\"center\",\r\n\t\t};\r\n\r\n\t\t//set text alignment\r\n\t\telement.style.textAlign = this.column.hozAlign;\r\n\r\n\t\tif(this.column.vertAlign){\r\n\t\t\telement.style.display = \"inline-flex\";\r\n\r\n\t\t\telement.style.alignItems = vertAligns[this.column.vertAlign] || \"\";\r\n\r\n\t\t\tif(this.column.hozAlign){\r\n\t\t\t\telement.style.justifyContent = hozAligns[this.column.hozAlign] || \"\";\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(field){\r\n\t\t\telement.setAttribute(\"tabulator-field\", field);\r\n\t\t}\r\n\r\n\t\t//add class to cell if needed\r\n\t\tif(this.column.definition.cssClass){\r\n\t\t\tvar classNames = this.column.definition.cssClass.split(\" \")\r\n\t\t\tclassNames.forEach((className) => {\r\n\t\t\t\telement.classList.add(className)\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\t//update tooltip on mouse enter\r\n\t\tif (this.table.options.tooltipGenerationMode === \"hover\"){\r\n\t\t\telement.addEventListener(\"mouseenter\", (e) => {\r\n\t\t\t\tthis._generateTooltip();\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tthis.dispatch(\"cell-init\", this);\r\n\r\n\t\t//hide cell if not visible\r\n\t\tif(!this.column.visible){\r\n\t\t\tthis.hide();\r\n\t\t}\r\n\t}\r\n\r\n\t//generate cell contents\r\n\t_generateContents(){\r\n\t\tvar val;\r\n\r\n\t\tval = this.chain(\"cell-format\", this, null, () => {\r\n\t\t\treturn this.element.innerHTML = this.value;\r\n\t\t});\r\n\r\n\t\tswitch(typeof val){\r\n\t\t\tcase \"object\":\r\n\t\t\tif(val instanceof Node){\r\n\r\n\t\t\t\t//clear previous cell contents\r\n\t\t\t\twhile(this.element.firstChild) this.element.removeChild(this.element.firstChild);\r\n\r\n\t\t\t\tthis.element.appendChild(val);\r\n\t\t\t}else{\r\n\t\t\t\tthis.element.innerHTML = \"\";\r\n\r\n\t\t\t\tif(val != null){\r\n\t\t\t\t\tconsole.warn(\"Format Error - Formatter has returned a type of object, the only valid formatter object return is an instance of Node, the formatter returned:\", val);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\t\t\tcase \"undefined\":\r\n\t\t\tcase \"null\":\r\n\t\t\tthis.element.innerHTML = \"\";\r\n\t\t\tbreak;\r\n\t\t\tdefault:\r\n\t\t\tthis.element.innerHTML = val;\r\n\t\t}\r\n\t}\r\n\r\n\tcellRendered(){\r\n\t\tthis.dispatch(\"cell-rendered\", this);\r\n\t}\r\n\r\n\t//generate tooltip text\r\n\t_generateTooltip(){\r\n\t\tvar tooltip = this.column.tooltip;\r\n\r\n\t\tif(tooltip){\r\n\t\t\tif(tooltip === true){\r\n\t\t\t\ttooltip = this.value;\r\n\t\t\t}else if(typeof(tooltip) == \"function\"){\r\n\t\t\t\ttooltip = tooltip(this.getComponent());\r\n\r\n\t\t\t\tif(tooltip === false){\r\n\t\t\t\t\ttooltip = \"\";\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif(typeof tooltip === \"undefined\"){\r\n\t\t\t\ttooltip = \"\";\r\n\t\t\t}\r\n\r\n\t\t\tthis.element.setAttribute(\"title\", tooltip);\r\n\t\t}else{\r\n\t\t\tthis.element.setAttribute(\"title\", \"\");\r\n\t\t}\r\n\t}\r\n\r\n\t//////////////////// Getters ////////////////////\r\n\tgetElement(containerOnly){\r\n\t\tif(!this.loaded){\r\n\t\t\tthis.loaded = true;\r\n\t\t\tif(!containerOnly){\r\n\t\t\t\tthis.layoutElement();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this.element;\r\n\t}\r\n\r\n\tgetValue(){\r\n\t\treturn this.value;\r\n\t}\r\n\r\n\tgetOldValue(){\r\n\t\treturn this.oldValue;\r\n\t}\r\n\r\n\t//////////////////// Actions ////////////////////\r\n\tsetValue(value, mutate){\r\n\t\tvar changed = this.setValueProcessData(value, mutate);\r\n\r\n\t\tif(changed){\r\n\t\t\tthis.dispatch(\"cell-value-updated\", this);\r\n\r\n\t\t\tthis.cellRendered();\r\n\r\n\t\t\tthis.dispatchExternal(\"cellEdited\", this.getComponent());\r\n\r\n\t\t\tif(this.subscribedExternal(\"dataChanged\")){\r\n\t\t\t\tthis.dispatchExternal(\"dataChanged\", this.table.rowManager.getData());\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tsetValueProcessData(value, mutate){\r\n\t\tvar changed = false;\r\n\r\n\t\tif(this.value != value){\r\n\r\n\t\t\tchanged = true;\r\n\r\n\t\t\tif(mutate){\r\n\t\t\t\tvalue = this.chain(\"cell-value-changing\", [this, value], null, value);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.setValueActual(value);\r\n\r\n\t\tif(changed){\r\n\t\t\tthis.dispatch(\"cell-value-changed\", this);\r\n\t\t}\r\n\r\n\t\treturn changed;\r\n\t}\r\n\r\n\tsetValueActual(value){\r\n\t\tthis.oldValue = this.value;\r\n\r\n\t\tthis.value = value;\r\n\r\n\t\tthis.dispatch(\"cell-value-save-before\", this);\r\n\r\n\t\tthis.column.setFieldValue(this.row.data, value);\r\n\r\n\t\tthis.dispatch(\"cell-value-save-after\", this);\r\n\r\n\t\tif(this.loaded){\r\n\t\t\tthis.layoutElement();\r\n\t\t}\r\n\t}\r\n\r\n\tlayoutElement(){\r\n\t\tthis._generateContents();\r\n\t\tthis._generateTooltip();\r\n\r\n\t\tthis.dispatch(\"cell-layout\", this);\r\n\t}\r\n\r\n\tsetWidth(){\r\n\t\tthis.width = this.column.width;\r\n\t\tthis.element.style.width = this.column.widthStyled;\r\n\t}\r\n\r\n\tclearWidth(){\r\n\t\tthis.width = \"\";\r\n\t\tthis.element.style.width = \"\";\r\n\t}\r\n\r\n\tgetWidth(){\r\n\t\treturn this.width || this.element.offsetWidth;\r\n\t}\r\n\r\n\tsetMinWidth(){\r\n\t\tthis.minWidth = this.column.minWidth;\r\n\t\tthis.element.style.minWidth = this.column.minWidthStyled;\r\n\t}\r\n\r\n\tsetMaxWidth(){\r\n\t\tthis.maxWidth = this.column.maxWidth;\r\n\t\tthis.element.style.maxWidth = this.column.maxWidthStyled;\r\n\t}\r\n\r\n\tcheckHeight(){\r\n\t\t// var height = this.element.css(\"height\");\r\n\t\tthis.row.reinitializeHeight();\r\n\t}\r\n\r\n\tclearHeight(){\r\n\t\tthis.element.style.height = \"\";\r\n\t\tthis.height = null;\r\n\t}\r\n\r\n\tsetHeight(){\r\n\t\tthis.height = this.row.height;\r\n\t\tthis.element.style.height = this.row.heightStyled;\r\n\t}\r\n\r\n\tgetHeight(){\r\n\t\treturn this.height || this.element.offsetHeight;\r\n\t}\r\n\r\n\tshow(){\r\n\t\tthis.element.style.display = this.column.vertAlign ? \"inline-flex\" : \"\";\r\n\t}\r\n\r\n\thide(){\r\n\t\tthis.element.style.display = \"none\";\r\n\t}\r\n\r\n\tdelete(){\r\n\t\tthis.dispatch(\"cell-delete\", this);\r\n\r\n\t\tif(!this.table.rowManager.redrawBlock && this.element.parentNode){\r\n\t\t\tthis.element.parentNode.removeChild(this.element);\r\n\t\t}\r\n\r\n\t\tthis.element = false;\r\n\t\tthis.column.deleteCell(this);\r\n\t\tthis.row.deleteCell(this);\r\n\t\tthis.calcs = {};\r\n\t}\r\n\r\n\tgetIndex(){\r\n\t\treturn this.row.getCellIndex(this);\r\n\t}\r\n\r\n\t//////////////// Object Generation /////////////////\r\n\tgetComponent(){\r\n\t\tif(!this.component){\r\n\t\t\tthis.component = new CellComponent(this);\r\n\t\t}\r\n\r\n\t\treturn this.component;\r\n\t}\r\n}","//public column object\r\nexport default class ColumnComponent {\r\n\tconstructor (column){\r\n\t\tthis._column = column;\r\n\t\tthis.type = \"ColumnComponent\";\r\n\r\n\t\treturn new Proxy(this, {\r\n\t\t\tget: function(target, name, receiver) {\r\n\t\t\t\tif (typeof target[name] !== \"undefined\") {\r\n\t\t\t\t\treturn target[name];\r\n\t\t\t\t}else{\r\n\t\t\t\t\treturn target._column.table.componentFunctionBinder.handle(\"column\", target._column, name)\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t})\r\n\t}\r\n\r\n\tgetElement(){\r\n\t\treturn this._column.getElement();\r\n\t}\r\n\r\n\tgetDefinition(){\r\n\t\treturn this._column.getDefinition();\r\n\t}\r\n\r\n\tgetField(){\r\n\t\treturn this._column.getField();\r\n\t}\r\n\r\n\tgetCells(){\r\n\t\tvar cells = [];\r\n\r\n\t\tthis._column.cells.forEach(function(cell){\r\n\t\t\tcells.push(cell.getComponent());\r\n\t\t});\r\n\r\n\t\treturn cells;\r\n\t}\r\n\r\n\tisVisible(){\r\n\t\treturn this._column.visible;\r\n\t}\r\n\r\n\tshow(){\r\n\t\tif(this._column.isGroup){\r\n\t\t\tthis._column.columns.forEach(function(column){\r\n\t\t\t\tcolumn.show();\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tthis._column.show();\r\n\t\t}\r\n\t}\r\n\r\n\thide(){\r\n\t\tif(this._column.isGroup){\r\n\t\t\tthis._column.columns.forEach(function(column){\r\n\t\t\t\tcolumn.hide();\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tthis._column.hide();\r\n\t\t}\r\n\t}\r\n\r\n\ttoggle(){\r\n\t\tif(this._column.visible){\r\n\t\t\tthis.hide();\r\n\t\t}else{\r\n\t\t\tthis.show();\r\n\t\t}\r\n\t}\r\n\r\n\tdelete(){\r\n\t\treturn this._column.delete();\r\n\t}\r\n\r\n\tgetSubColumns(){\r\n\t\tvar output = [];\r\n\r\n\t\tif(this._column.columns.length){\r\n\t\t\tthis._column.columns.forEach(function(column){\r\n\t\t\t\toutput.push(column.getComponent());\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tgetParentColumn(){\r\n\t\treturn this._column.parent instanceof Column ? this._column.parent.getComponent() : false;\r\n\t}\r\n\r\n\t_getSelf(){\r\n\t\treturn this._column;\r\n\t}\r\n\r\n\tscrollTo(){\r\n\t\treturn this._column.table.columnManager.scrollToColumn(this._column);\r\n\t}\r\n\r\n\tgetTable(){\r\n\t\treturn this._column.table;\r\n\t}\r\n\r\n\tmove(to, after){\r\n\t\tvar toColumn = this._column.table.columnManager.findColumn(to);\r\n\r\n\t\tif(toColumn){\r\n\t\t\tthis._column.table.columnManager.moveColumn(this._column, toColumn, after)\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Move Error - No matching column found:\", toColumn);\r\n\t\t}\r\n\t}\r\n\r\n\tgetNextColumn(){\r\n\t\tvar nextCol = this._column.nextColumn();\r\n\r\n\t\treturn nextCol ? nextCol.getComponent() : false;\r\n\t}\r\n\r\n\tgetPrevColumn(){\r\n\t\tvar prevCol = this._column.prevColumn();\r\n\r\n\t\treturn prevCol ? prevCol.getComponent() : false;\r\n\t}\r\n\r\n\tupdateDefinition(updates){\r\n\t\treturn this._column.updateDefinition(updates);\r\n\t}\r\n\r\n\tgetWidth(){\r\n\t\treturn this._column.getWidth();\r\n\t}\r\n\r\n\tsetWidth(width){\r\n\t\tvar result;\r\n\r\n\t\tif(width === true){\r\n\t\t\tresult = this._column.reinitializeWidth(true);\r\n\t\t}else{\r\n\t\t\tresult = this._column.setWidth(width);\r\n\t\t}\r\n\r\n\t\tthis._column.table.columnManager.renderer.rerenderColumns(true);\r\n\r\n\t\treturn result;\r\n\t}\r\n}","export default {\r\n\t\"title\": undefined,\r\n\t\"field\": undefined,\r\n\t\"columns\": undefined,\r\n\t\"visible\": undefined,\r\n\t\"hozAlign\": undefined,\r\n\t\"vertAlign\": undefined,\r\n\t\"width\": undefined,\r\n\t\"minWidth\": 40,\r\n\t\"maxWidth\": undefined,\r\n\t\"tooltip\": undefined,\r\n\t\"cssClass\": undefined,\r\n\t\"variableHeight\": undefined,\r\n\t\"headerTooltip\": undefined,\r\n\t\"headerVertical\": undefined,\r\n\t\"headerHozAlign\": undefined,\r\n\t\"editableTitle\": undefined,\r\n}","import CoreFeature from '../CoreFeature.js';\r\nimport ColumnComponent from './ColumnComponent.js';\r\nimport defaultOptions from './defaults/options.js';\r\n\r\nimport Cell from '../cell/Cell.js';\r\n\r\nclass Column extends CoreFeature{\r\n\r\n\tconstructor(def, parent){\r\n\t\tsuper(parent.table);\r\n\r\n\t\tthis.definition = def; //column definition\r\n\t\tthis.parent = parent; //hold parent object\r\n\t\tthis.type = \"column\"; //type of element\r\n\t\tthis.columns = []; //child columns\r\n\t\tthis.cells = []; //cells bound to this column\r\n\t\tthis.element = this.createElement(); //column header element\r\n\t\tthis.contentElement = false;\r\n\t\tthis.titleHolderElement = false;\r\n\t\tthis.titleElement = false;\r\n\t\tthis.groupElement = this.createGroupElement(); //column group holder element\r\n\t\tthis.isGroup = false;\r\n\t\tthis.tooltip = false; //hold column tooltip\r\n\t\tthis.hozAlign = \"\"; //horizontal text alignment\r\n\t\tthis.vertAlign = \"\"; //vert text alignment\r\n\r\n\t\t//multi dimensional filed handling\r\n\t\tthis.field =\"\";\r\n\t\tthis.fieldStructure = \"\";\r\n\t\tthis.getFieldValue = \"\";\r\n\t\tthis.setFieldValue = \"\";\r\n\r\n\t\tthis.titleFormatterRendered = false;\r\n\r\n\t\tthis.mapDefinitions();\r\n\r\n\t\tthis.setField(this.definition.field);\r\n\r\n\t\tthis.modules = {}; //hold module variables;\r\n\r\n\t\tthis.width = null; //column width\r\n\t\tthis.widthStyled = \"\"; //column width prestyled to improve render efficiency\r\n\t\tthis.maxWidth = null; //column maximum width\r\n\t\tthis.maxWidthStyled = \"\"; //column maximum prestyled to improve render efficiency\r\n\t\tthis.minWidth = null; //column minimum width\r\n\t\tthis.minWidthStyled = \"\"; //column minimum prestyled to improve render efficiency\r\n\t\tthis.widthFixed = false; //user has specified a width for this column\r\n\r\n\t\tthis.visible = true; //default visible state\r\n\r\n\t\tthis.component = null;\r\n\r\n\t\t//initialize column\r\n\t\tif(this.definition.columns){\r\n\r\n\t\t\tthis.isGroup = true;\r\n\r\n\t\t\tthis.definition.columns.forEach((def, i) => {\r\n\t\t\t\tvar newCol = new Column(def, this);\r\n\t\t\t\tthis.attachColumn(newCol);\r\n\t\t\t});\r\n\r\n\t\t\tthis.checkColumnVisibility();\r\n\t\t}else{\r\n\t\t\tparent.registerColumnField(this);\r\n\t\t}\r\n\r\n\t\tthis._initialize();\r\n\r\n\t\tthis.bindModuleColumns();\r\n\t}\r\n\r\n\tcreateElement (){\r\n\t\tvar el = document.createElement(\"div\");\r\n\r\n\t\tel.classList.add(\"tabulator-col\");\r\n\t\tel.setAttribute(\"role\", \"columnheader\");\r\n\t\tel.setAttribute(\"aria-sort\", \"none\");\r\n\r\n\t\treturn el;\r\n\t}\r\n\r\n\tcreateGroupElement (){\r\n\t\tvar el = document.createElement(\"div\");\r\n\r\n\t\tel.classList.add(\"tabulator-col-group-cols\");\r\n\r\n\t\treturn el;\r\n\t}\r\n\r\n\tmapDefinitions(){\r\n\t\tvar defaults = this.table.options.columnDefaults;\r\n\r\n\t\t//map columnDefaults onto column definitions\r\n\t\tif(defaults){\r\n\t\t\tfor(let key in defaults){\r\n\t\t\t\tif(typeof this.definition[key] === \"undefined\"){\r\n\t\t\t\t\tthis.definition[key] = defaults[key];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.definition = this.table.columnManager.optionsList.generate(Column.defaultOptionList, this.definition)\r\n\t}\r\n\r\n\tcheckDefinition(){\r\n\t\tObject.keys(this.definition).forEach((key) => {\r\n\t\t\tif(Column.defaultOptionList.indexOf(key) === -1){\r\n\t\t\t\tconsole.warn(\"Invalid column definition option in '\" + (this.field || this.definition.title) + \"' column:\", key)\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tsetField(field){\r\n\t\tthis.field = field;\r\n\t\tthis.fieldStructure = field ? (this.table.options.nestedFieldSeparator ? field.split(this.table.options.nestedFieldSeparator) : [field]) : [];\r\n\t\tthis.getFieldValue = this.fieldStructure.length > 1 ? this._getNestedData : this._getFlatData;\r\n\t\tthis.setFieldValue = this.fieldStructure.length > 1 ? this._setNestedData : this._setFlatData;\r\n\t}\r\n\r\n\t//register column position with column manager\r\n\tregisterColumnPosition(column){\r\n\t\tthis.parent.registerColumnPosition(column);\r\n\t}\r\n\r\n\t//register column position with column manager\r\n\tregisterColumnField(column){\r\n\t\tthis.parent.registerColumnField(column);\r\n\t}\r\n\r\n\t//trigger position registration\r\n\treRegisterPosition(){\r\n\t\tif(this.isGroup){\r\n\t\t\tthis.columns.forEach(function(column){\r\n\t\t\t\tcolumn.reRegisterPosition();\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tthis.registerColumnPosition(this);\r\n\t\t}\r\n\t}\r\n\r\n\t_mapDepricatedFunctionality(){\r\n\t\t//all previously deprecated functionality removed in the 5.0 release\r\n\t}\r\n\r\n\tsetTooltip(){\r\n\t\tvar def = this.definition;\r\n\r\n\t\t//set header tooltips\r\n\t\tvar tooltip = typeof def.headerTooltip === \"undefined\" ? def.tooltip : def.headerTooltip;\r\n\r\n\t\tif(tooltip){\r\n\t\t\tif(tooltip === true){\r\n\t\t\t\tif(def.field){\r\n\t\t\t\t\tthis.langBind(\"columns|\" + def.field, (value) => {\r\n\t\t\t\t\t\tthis.element.setAttribute(\"title\", value || def.title);\r\n\t\t\t\t\t});\r\n\t\t\t\t}else{\r\n\t\t\t\t\tthis.element.setAttribute(\"title\", def.title);\r\n\t\t\t\t}\r\n\r\n\t\t\t}else{\r\n\t\t\t\tif(typeof(tooltip) == \"function\"){\r\n\t\t\t\t\ttooltip = tooltip(this.getComponent());\r\n\r\n\t\t\t\t\tif(tooltip === false){\r\n\t\t\t\t\t\ttooltip = \"\";\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.element.setAttribute(\"title\", tooltip);\r\n\t\t\t}\r\n\r\n\t\t}else{\r\n\t\t\tthis.element.setAttribute(\"title\", \"\");\r\n\t\t}\r\n\t}\r\n\r\n\t//build header element\r\n\t_initialize(){\r\n\t\tvar def = this.definition;\r\n\r\n\t\twhile(this.element.firstChild) this.element.removeChild(this.element.firstChild);\r\n\r\n\t\tif(def.headerVertical){\r\n\t\t\tthis.element.classList.add(\"tabulator-col-vertical\");\r\n\r\n\t\t\tif(def.headerVertical === \"flip\"){\r\n\t\t\t\tthis.element.classList.add(\"tabulator-col-vertical-flip\");\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.contentElement = this._bindEvents();\r\n\r\n\t\tthis.contentElement = this._buildColumnHeaderContent();\r\n\r\n\t\tthis.element.appendChild(this.contentElement);\r\n\r\n\t\tif(this.isGroup){\r\n\t\t\tthis._buildGroupHeader();\r\n\t\t}else{\r\n\t\t\tthis._buildColumnHeader();\r\n\t\t}\r\n\r\n\t\tthis.setTooltip();\r\n\r\n\t\tthis.dispatch(\"column-init\", this);\r\n\r\n\t\t//update header tooltip on mouse enter\r\n\t\tthis.element.addEventListener(\"mouseenter\", (e) => {\r\n\t\t\tthis.setTooltip();\r\n\t\t});\r\n\t}\r\n\r\n\t_bindEvents(){\r\n\t\tvar def = this.definition,\r\n\t\tdblTap,\ttapHold, tap;\r\n\r\n\t\t//setup header click event bindings\r\n\t\tif(typeof(def.headerClick) == \"function\"){\r\n\t\t\tthis.element.addEventListener(\"click\", (e) => {def.headerClick(e, this.getComponent());});\r\n\t\t}\r\n\r\n\t\tif(typeof(def.headerDblClick) == \"function\"){\r\n\t\t\tthis.element.addEventListener(\"dblclick\", (e) => {def.headerDblClick(e, this.getComponent());});\r\n\t\t}\r\n\r\n\t\tif(typeof(def.headerContext) == \"function\"){\r\n\t\t\tthis.element.addEventListener(\"contextmenu\", (e) => {def.headerContext(e, this.getComponent());});\r\n\t\t}\r\n\r\n\t\t//setup header tap event bindings\r\n\t\tif(typeof(def.headerTap) == \"function\"){\r\n\t\t\ttap = false;\r\n\r\n\t\t\tthis.element.addEventListener(\"touchstart\", (e) => {\r\n\t\t\t\ttap = true;\r\n\t\t\t}, {passive: true});\r\n\r\n\t\t\tthis.element.addEventListener(\"touchend\", (e) => {\r\n\t\t\t\tif(tap){\r\n\t\t\t\t\tdef.headerTap(e, this.getComponent());\r\n\t\t\t\t}\r\n\r\n\t\t\t\ttap = false;\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif(typeof(def.headerDblTap) == \"function\"){\r\n\t\t\tdblTap = null;\r\n\r\n\t\t\tthis.element.addEventListener(\"touchend\", (e) => {\r\n\r\n\t\t\t\tif(dblTap){\r\n\t\t\t\t\tclearTimeout(dblTap);\r\n\t\t\t\t\tdblTap = null;\r\n\r\n\t\t\t\t\tdef.headerDblTap(e, this.getComponent());\r\n\t\t\t\t}else{\r\n\r\n\t\t\t\t\tdblTap = setTimeout(() => {\r\n\t\t\t\t\t\tclearTimeout(dblTap);\r\n\t\t\t\t\t\tdblTap = null;\r\n\t\t\t\t\t}, 300);\r\n\t\t\t\t}\r\n\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif(typeof(def.headerTapHold) == \"function\"){\r\n\t\t\ttapHold = null;\r\n\r\n\t\t\tthis.element.addEventListener(\"touchstart\", (e) => {\r\n\t\t\t\tclearTimeout(tapHold);\r\n\r\n\t\t\t\ttapHold = setTimeout(function(){\r\n\t\t\t\t\tclearTimeout(tapHold);\r\n\t\t\t\t\ttapHold = null;\r\n\t\t\t\t\ttap = false;\r\n\t\t\t\t\tdef.headerTapHold(e, this.getComponent());\r\n\t\t\t\t}, 1000);\r\n\r\n\t\t\t}, {passive: true});\r\n\r\n\t\t\tthis.element.addEventListener(\"touchend\", (e) => {\r\n\t\t\t\tclearTimeout(tapHold);\r\n\t\t\t\ttapHold = null;\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\t//build header element for header\r\n\t_buildColumnHeader(){\r\n\t\tvar def = this.definition,\r\n\t\ttable = this.table;\r\n\r\n\t\tthis.dispatch(\"column-layout\", this);\r\n\r\n\t\t//set column visibility\r\n\t\tif(typeof def.visible != \"undefined\"){\r\n\t\t\tif(def.visible){\r\n\t\t\t\tthis.show(true);\r\n\t\t\t}else{\r\n\t\t\t\tthis.hide(true);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//asign additional css classes to column header\r\n\t\tif(def.cssClass){\r\n\t\t\tvar classeNames = def.cssClass.split(\" \");\r\n\t\t\tclasseNames.forEach((className) => {\r\n\t\t\t\tthis.element.classList.add(className);\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif(def.field){\r\n\t\t\tthis.element.setAttribute(\"tabulator-field\", def.field);\r\n\t\t}\r\n\r\n\t\t//set min width if present\r\n\t\tthis.setMinWidth(parseInt(def.minWidth));\r\n\r\n\t\tif(def.maxWidth){\r\n\t\t\tthis.setMaxWidth(parseInt(def.maxWidth));\r\n\t\t}\r\n\r\n\t\tthis.reinitializeWidth();\r\n\r\n\t\t//set tooltip if present\r\n\t\tthis.tooltip = this.definition.tooltip;\r\n\r\n\t\t//set orizontal text alignment\r\n\t\tthis.hozAlign = this.definition.hozAlign;\r\n\t\tthis.vertAlign = this.definition.vertAlign;\r\n\r\n\t\tthis.titleElement.style.textAlign = this.definition.headerHozAlign;\r\n\t}\r\n\r\n\t_buildColumnHeaderContent(){\r\n\t\tvar def = this.definition,\r\n\t\ttable = this.table;\r\n\r\n\t\tvar contentElement = document.createElement(\"div\");\r\n\t\tcontentElement.classList.add(\"tabulator-col-content\");\r\n\r\n\t\tthis.titleHolderElement = document.createElement(\"div\");\r\n\t\tthis.titleHolderElement.classList.add(\"tabulator-col-title-holder\");\r\n\r\n\t\tcontentElement.appendChild(this.titleHolderElement);\r\n\r\n\t\tthis.titleElement = this._buildColumnHeaderTitle();\r\n\r\n\t\tthis.titleHolderElement.appendChild(this.titleElement);\r\n\r\n\t\treturn contentElement;\r\n\t}\r\n\r\n\t//build title element of column\r\n\t_buildColumnHeaderTitle(){\r\n\t\tvar def = this.definition,\r\n\t\ttitle;\r\n\r\n\t\tvar titleHolderElement = document.createElement(\"div\");\r\n\t\ttitleHolderElement.classList.add(\"tabulator-col-title\");\r\n\r\n\t\tif(def.editableTitle){\r\n\t\t\tvar titleElement = document.createElement(\"input\");\r\n\t\t\ttitleElement.classList.add(\"tabulator-title-editor\");\r\n\r\n\t\t\ttitleElement.addEventListener(\"click\", (e) => {\r\n\t\t\t\te.stopPropagation();\r\n\t\t\t\ttitleElement.focus();\r\n\t\t\t});\r\n\r\n\t\t\ttitleElement.addEventListener(\"change\", () => {\r\n\t\t\t\tdef.title = titleElement.value;\r\n\t\t\t\tthis.dispatchExternal(\"columnTitleChanged\", this.getComponent());\r\n\t\t\t});\r\n\r\n\t\t\ttitleHolderElement.appendChild(titleElement);\r\n\r\n\t\t\tif(def.field){\r\n\t\t\t\tthis.langBind(\"columns|\" + def.field, (text) => {\r\n\t\t\t\t\ttitleElement.value = text || (def.title || \" \");\r\n\t\t\t\t});\r\n\t\t\t}else{\r\n\t\t\t\ttitleElement.value = def.title || \" \";\r\n\t\t\t}\r\n\r\n\t\t}else{\r\n\t\t\tif(def.field){\r\n\t\t\t\tthis.langBind(\"columns|\" + def.field, (text) => {\r\n\t\t\t\t\tthis._formatColumnHeaderTitle(titleHolderElement, text || (def.title || \" \"));\r\n\t\t\t\t});\r\n\t\t\t}else{\r\n\t\t\t\tthis._formatColumnHeaderTitle(titleHolderElement, def.title || \" \");\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn titleHolderElement;\r\n\t}\r\n\r\n\t_formatColumnHeaderTitle(el, title){\r\n\t\tvar contents = this.chain(\"column-format\", [this, title, el], null, () => {\r\n\t\t\treturn title;\r\n\t\t});\r\n\r\n\t\tswitch(typeof contents){\r\n\t\t\tcase \"object\":\r\n\t\t\tif(contents instanceof Node){\r\n\t\t\t\tel.appendChild(contents);\r\n\t\t\t}else{\r\n\t\t\t\tel.innerHTML = \"\";\r\n\t\t\t\tconsole.warn(\"Format Error - Title formatter has returned a type of object, the only valid formatter object return is an instance of Node, the formatter returned:\", contents);\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\t\t\tcase \"undefined\":\r\n\t\t\tcase \"null\":\r\n\t\t\tel.innerHTML = \"\";\r\n\t\t\tbreak;\r\n\t\t\tdefault:\r\n\t\t\tel.innerHTML = contents;\r\n\t\t}\r\n\t}\r\n\r\n\t//build header element for column group\r\n\t_buildGroupHeader(){\r\n\t\tthis.element.classList.add(\"tabulator-col-group\");\r\n\t\tthis.element.setAttribute(\"role\", \"columngroup\");\r\n\t\tthis.element.setAttribute(\"aria-title\", this.definition.title);\r\n\r\n\t\t//asign additional css classes to column header\r\n\t\tif(this.definition.cssClass){\r\n\t\t\tvar classeNames = this.definition.cssClass.split(\" \");\r\n\t\t\tclasseNames.forEach((className) => {\r\n\t\t\t\tthis.element.classList.add(className);\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tthis.titleElement.style.textAlign = this.definition.headerHozAlign;\r\n\r\n\t\tthis.element.appendChild(this.groupElement);\r\n\t}\r\n\r\n\t//flat field lookup\r\n\t_getFlatData(data){\r\n\t\treturn data[this.field];\r\n\t}\r\n\r\n\t//nested field lookup\r\n\t_getNestedData(data){\r\n\t\tvar dataObj = data,\r\n\t\tstructure = this.fieldStructure,\r\n\t\tlength = structure.length,\r\n\t\toutput;\r\n\r\n\t\tfor(let i = 0; i < length; i++){\r\n\r\n\t\t\tdataObj = dataObj[structure[i]];\r\n\r\n\t\t\toutput = dataObj;\r\n\r\n\t\t\tif(!dataObj){\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\t//flat field set\r\n\t_setFlatData(data, value){\r\n\t\tif(this.field){\r\n\t\t\tdata[this.field] = value;\r\n\t\t}\r\n\t}\r\n\r\n\t//nested field set\r\n\t_setNestedData(data, value){\r\n\t\tvar dataObj = data,\r\n\t\tstructure = this.fieldStructure,\r\n\t\tlength = structure.length;\r\n\r\n\t\tfor(let i = 0; i < length; i++){\r\n\r\n\t\t\tif(i == length -1){\r\n\t\t\t\tdataObj[structure[i]] = value;\r\n\t\t\t}else{\r\n\t\t\t\tif(!dataObj[structure[i]]){\r\n\t\t\t\t\tif(typeof value !== \"undefined\"){\r\n\t\t\t\t\t\tdataObj[structure[i]] = {};\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tdataObj = dataObj[structure[i]];\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//attach column to this group\r\n\tattachColumn(column){\r\n\t\tif(this.groupElement){\r\n\t\t\tthis.columns.push(column);\r\n\t\t\tthis.groupElement.appendChild(column.getElement());\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Column Warning - Column being attached to another column instead of column group\");\r\n\t\t}\r\n\t}\r\n\r\n\t//vertically align header in column\r\n\tverticalAlign(alignment, height){\r\n\r\n\t\t//calculate height of column header and group holder element\r\n\t\tvar parentHeight = this.parent.isGroup ? this.parent.getGroupElement().clientHeight : (height || this.parent.getHeadersElement().clientHeight);\r\n\t\t// var parentHeight = this.parent.isGroup ? this.parent.getGroupElement().clientHeight : this.parent.getHeadersElement().clientHeight;\r\n\r\n\t\tthis.element.style.height = parentHeight + \"px\";\r\n\r\n\t\tif(this.isGroup){\r\n\t\t\tthis.groupElement.style.minHeight = (parentHeight - this.contentElement.offsetHeight) + \"px\";\r\n\t\t}\r\n\r\n\t\t//vertically align cell contents\r\n\t\tif(!this.isGroup && alignment !== \"top\"){\r\n\t\t\tif(alignment === \"bottom\"){\r\n\t\t\t\tthis.element.style.paddingTop = (this.element.clientHeight - this.contentElement.offsetHeight) + \"px\";\r\n\t\t\t}else{\r\n\t\t\t\tthis.element.style.paddingTop = ((this.element.clientHeight - this.contentElement.offsetHeight) / 2) + \"px\";\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.columns.forEach(function(column){\r\n\t\t\tcolumn.verticalAlign(alignment);\r\n\t\t});\r\n\t}\r\n\r\n\t//clear vertical alignmenet\r\n\tclearVerticalAlign(){\r\n\t\tthis.element.style.paddingTop = \"\";\r\n\t\tthis.element.style.height = \"\";\r\n\t\tthis.element.style.minHeight = \"\";\r\n\t\tthis.groupElement.style.minHeight = \"\";\r\n\r\n\t\tthis.columns.forEach(function(column){\r\n\t\t\tcolumn.clearVerticalAlign();\r\n\t\t});\r\n\t}\r\n\r\n\tbindModuleColumns (){\r\n\t\t//check if rownum formatter is being used on a column\r\n\t\tif(this.definition.formatter == \"rownum\"){\r\n\t\t\tthis.table.rowManager.rowNumColumn = this;\r\n\t\t}\r\n\t}\r\n\r\n\t//// Retreive Column Information ////\r\n\t//return column header element\r\n\tgetElement(){\r\n\t\treturn this.element;\r\n\t}\r\n\r\n\t//return colunm group element\r\n\tgetGroupElement(){\r\n\t\treturn this.groupElement;\r\n\t}\r\n\r\n\t//return field name\r\n\tgetField(){\r\n\t\treturn this.field;\r\n\t}\r\n\r\n\t//return the first column in a group\r\n\tgetFirstColumn(){\r\n\t\tif(!this.isGroup){\r\n\t\t\treturn this;\r\n\t\t}else{\r\n\t\t\tif(this.columns.length){\r\n\t\t\t\treturn this.columns[0].getFirstColumn();\r\n\t\t\t}else{\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//return the last column in a group\r\n\tgetLastColumn(){\r\n\t\tif(!this.isGroup){\r\n\t\t\treturn this;\r\n\t\t}else{\r\n\t\t\tif(this.columns.length){\r\n\t\t\t\treturn this.columns[this.columns.length -1].getLastColumn();\r\n\t\t\t}else{\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//return all columns in a group\r\n\tgetColumns(){\r\n\t\treturn this.columns;\r\n\t}\r\n\r\n\t//return all columns in a group\r\n\tgetCells(){\r\n\t\treturn this.cells;\r\n\t}\r\n\r\n\t//retreive the top column in a group of columns\r\n\tgetTopColumn(){\r\n\t\tif(this.parent.isGroup){\r\n\t\t\treturn this.parent.getTopColumn();\r\n\t\t}else{\r\n\t\t\treturn this;\r\n\t\t}\r\n\t}\r\n\r\n\t//return column definition object\r\n\tgetDefinition(updateBranches){\r\n\t\tvar colDefs = [];\r\n\r\n\t\tif(this.isGroup && updateBranches){\r\n\t\t\tthis.columns.forEach(function(column){\r\n\t\t\t\tcolDefs.push(column.getDefinition(true));\r\n\t\t\t});\r\n\r\n\t\t\tthis.definition.columns = colDefs;\r\n\t\t}\r\n\r\n\t\treturn this.definition;\r\n\t}\r\n\r\n\t//////////////////// Actions ////////////////////\r\n\tcheckColumnVisibility(){\r\n\t\tvar visible = false;\r\n\r\n\t\tthis.columns.forEach(function(column){\r\n\t\t\tif(column.visible){\r\n\t\t\t\tvisible = true;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tif(visible){\r\n\t\t\tthis.show();\r\n\t\t\tthis.dispatchExternal(\"columnVisibilityChanged\", this.getComponent(), false);\r\n\t\t}else{\r\n\t\t\tthis.hide();\r\n\t\t}\r\n\t}\r\n\r\n\t//show column\r\n\tshow(silent, responsiveToggle){\r\n\t\tif(!this.visible){\r\n\t\t\tthis.visible = true;\r\n\r\n\t\t\tthis.element.style.display = \"\";\r\n\r\n\t\t\tif(this.parent.isGroup){\r\n\t\t\t\tthis.parent.checkColumnVisibility();\r\n\t\t\t}\r\n\r\n\t\t\tthis.cells.forEach(function(cell){\r\n\t\t\t\tcell.show();\r\n\t\t\t});\r\n\r\n\t\t\tif(!this.isGroup && this.width === null){\r\n\t\t\t\tthis.reinitializeWidth();\r\n\t\t\t}\r\n\r\n\t\t\tthis.table.columnManager._verticalAlignHeaders();\r\n\r\n\t\t\tthis.dispatch(\"column-show\", this, responsiveToggle);\r\n\r\n\t\t\tif(!silent){\r\n\t\t\t\tthis.dispatchExternal(\"columnVisibilityChanged\", this.getComponent(), true);\r\n\t\t\t}\r\n\r\n\t\t\tif(this.parent.isGroup){\r\n\t\t\t\tthis.parent.matchChildWidths();\r\n\t\t\t}\r\n\r\n\t\t\tif(!this.silent){\r\n\t\t\t\tthis.table.columnManager.renderer.rerenderColumns();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//hide column\r\n\thide(silent, responsiveToggle){\r\n\t\tif(this.visible){\r\n\t\t\tthis.visible = false;\r\n\r\n\t\t\tthis.element.style.display = \"none\";\r\n\r\n\t\t\tthis.table.columnManager._verticalAlignHeaders();\r\n\r\n\t\t\tif(this.parent.isGroup){\r\n\t\t\t\tthis.parent.checkColumnVisibility();\r\n\t\t\t}\r\n\r\n\t\t\tthis.cells.forEach(function(cell){\r\n\t\t\t\tcell.hide();\r\n\t\t\t});\r\n\r\n\t\t\tthis.dispatch(\"column-hide\", this);\r\n\r\n\t\t\tif(!silent){\r\n\t\t\t\tthis.dispatchExternal(\"columnVisibilityChanged\", this.getComponent(), false);\r\n\t\t\t}\r\n\r\n\t\t\tif(this.parent.isGroup){\r\n\t\t\t\tthis.parent.matchChildWidths();\r\n\t\t\t}\r\n\r\n\t\t\tif(!this.silent){\r\n\t\t\t\tthis.table.columnManager.renderer.rerenderColumns();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tmatchChildWidths(){\r\n\t\tvar childWidth = 0;\r\n\r\n\t\tif(this.contentElement && this.columns.length){\r\n\t\t\tthis.columns.forEach(function(column){\r\n\t\t\t\tif(column.visible){\r\n\t\t\t\t\tchildWidth += column.getWidth();\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tthis.contentElement.style.maxWidth = (childWidth - 1) + \"px\";\r\n\r\n\t\t\tif(this.parent.isGroup){\r\n\t\t\t\tthis.parent.matchChildWidths();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tremoveChild(child){\r\n\t\tvar index = this.columns.indexOf(child);\r\n\r\n\t\tif(index > -1){\r\n\t\t\tthis.columns.splice(index, 1);\r\n\t\t}\r\n\r\n\t\tif(!this.columns.length){\r\n\t\t\tthis.delete();\r\n\t\t}\r\n\t}\r\n\r\n\tsetWidth(width){\r\n\t\tthis.widthFixed = true;\r\n\t\tthis.setWidthActual(width);\r\n\t}\r\n\r\n\tsetWidthActual(width){\r\n\t\tif(isNaN(width)){\r\n\t\t\twidth = Math.floor((this.table.element.clientWidth/100) * parseInt(width));\r\n\t\t}\r\n\r\n\t\twidth = Math.max(this.minWidth, width);\r\n\r\n\t\tif(this.maxWidth){\r\n\t\t\twidth = Math.min(this.maxWidth, width);\r\n\t\t}\r\n\r\n\t\tthis.width = width;\r\n\t\tthis.widthStyled = width ? width + \"px\" : \"\";\r\n\r\n\t\tthis.element.style.width = this.widthStyled;\r\n\r\n\t\tif(!this.isGroup){\r\n\t\t\tthis.cells.forEach(function(cell){\r\n\t\t\t\tcell.setWidth();\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif(this.parent.isGroup){\r\n\t\t\tthis.parent.matchChildWidths();\r\n\t\t}\r\n\r\n\t\tthis.dispatch(\"column-width\", this);\r\n\t}\r\n\r\n\tcheckCellHeights(){\r\n\t\tvar rows = [];\r\n\r\n\t\tthis.cells.forEach(function(cell){\r\n\t\t\tif(cell.row.heightInitialized){\r\n\t\t\t\tif(cell.row.getElement().offsetParent !== null){\r\n\t\t\t\t\trows.push(cell.row);\r\n\t\t\t\t\tcell.row.clearCellHeight();\r\n\t\t\t\t}else{\r\n\t\t\t\t\tcell.row.heightInitialized = false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\trows.forEach(function(row){\r\n\t\t\trow.calcHeight();\r\n\t\t});\r\n\r\n\t\trows.forEach(function(row){\r\n\t\t\trow.setCellHeight();\r\n\t\t});\r\n\t}\r\n\r\n\tgetWidth(){\r\n\t\tvar width = 0;\r\n\r\n\t\tif(this.isGroup){\r\n\t\t\tthis.columns.forEach(function(column){\r\n\t\t\t\tif(column.visible){\r\n\t\t\t\t\twidth += column.getWidth();\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\twidth = this.width;\r\n\t\t}\r\n\r\n\t\treturn width;\r\n\t}\r\n\r\n\tgetHeight(){\r\n\t\treturn this.element.offsetHeight;\r\n\t}\r\n\r\n\tsetMinWidth(minWidth){\r\n\t\tthis.minWidth = minWidth;\r\n\t\tthis.minWidthStyled = minWidth ? minWidth + \"px\" : \"\";\r\n\r\n\t\tthis.element.style.minWidth = this.minWidthStyled;\r\n\r\n\t\tthis.cells.forEach(function(cell){\r\n\t\t\tcell.setMinWidth();\r\n\t\t});\r\n\t}\r\n\r\n\tsetMaxWidth(maxWidth){\r\n\t\tthis.maxWidth = maxWidth;\r\n\t\tthis.maxWidthStyled = maxWidth ? maxWidth + \"px\" : \"\";\r\n\r\n\t\tthis.element.style.maxWidth = this.maxWidthStyled;\r\n\r\n\t\tthis.cells.forEach(function(cell){\r\n\t\t\tcell.setMaxWidth();\r\n\t\t});\r\n\t}\r\n\r\n\tdelete(){\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tvar index;\r\n\r\n\t\t\tif(this.isGroup){\r\n\t\t\t\tthis.columns.forEach(function(column){\r\n\t\t\t\t\tcolumn.delete();\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\tthis.dispatch(\"column-delete\", this);\r\n\r\n\t\t\tvar cellCount = this.cells.length;\r\n\r\n\t\t\tfor(let i = 0; i < cellCount; i++){\r\n\t\t\t\tthis.cells[0].delete();\r\n\t\t\t}\r\n\r\n\t\t\tif(this.element.parentNode){\r\n\t\t\t\tthis.element.parentNode.removeChild(this.element);\r\n\t\t\t}\r\n\r\n\t\t\tthis.element = false;\r\n\t\t\tthis.contentElement = false;\r\n\t\t\tthis.titleElement = false;\r\n\t\t\tthis.groupElement = false;\r\n\r\n\t\t\tif(this.parent.isGroup){\r\n\t\t\t\tthis.parent.removeChild(this);\r\n\t\t\t}\r\n\r\n\t\t\tthis.table.columnManager.deregisterColumn(this);\r\n\r\n\t\t\tthis.table.columnManager.renderer.rerenderColumns(true);\r\n\r\n\t\t\tresolve();\r\n\t\t});\r\n\t}\r\n\r\n\tcolumnRendered(){\r\n\t\tif(this.titleFormatterRendered){\r\n\t\t\tthis.titleFormatterRendered();\r\n\t\t}\r\n\t}\r\n\r\n\t//////////////// Cell Management /////////////////\r\n\t//generate cell for this column\r\n\tgenerateCell(row){\r\n\t\tvar cell = new Cell(this, row);\r\n\r\n\t\tthis.cells.push(cell);\r\n\r\n\t\treturn cell;\r\n\t}\r\n\r\n\tnextColumn(){\r\n\t\tvar index = this.table.columnManager.findColumnIndex(this);\r\n\t\treturn index > -1 ? this._nextVisibleColumn(index + 1) : false;\r\n\t}\r\n\r\n\t_nextVisibleColumn(index){\r\n\t\tvar column = this.table.columnManager.getColumnByIndex(index);\r\n\t\treturn !column || column.visible ? column : this._nextVisibleColumn(index + 1);\r\n\t}\r\n\r\n\tprevColumn(){\r\n\t\tvar index = this.table.columnManager.findColumnIndex(this);\r\n\t\treturn index > -1 ? this._prevVisibleColumn(index - 1) : false;\r\n\t}\r\n\r\n\t_prevVisibleColumn(index){\r\n\t\tvar column = this.table.columnManager.getColumnByIndex(index);\r\n\t\treturn !column || column.visible ? column : this._prevVisibleColumn(index - 1);\r\n\t}\r\n\r\n\treinitializeWidth(force){\r\n\t\tthis.widthFixed = false;\r\n\r\n\t\t//set width if present\r\n\t\tif(typeof this.definition.width !== \"undefined\" && !force){\r\n\t\t\tthis.setWidth(this.definition.width);\r\n\t\t}\r\n\r\n\t\tthis.dispatch(\"column-width-fit-before\", this);\r\n\r\n\t\tthis.fitToData();\r\n\r\n\t\tthis.dispatch(\"column-width-fit-after\", this);\r\n\t}\r\n\r\n\t//set column width to maximum cell width\r\n\tfitToData(){\r\n\t\tif(!this.widthFixed){\r\n\t\t\tthis.element.style.width = \"\";\r\n\r\n\t\t\tthis.cells.forEach((cell) => {\r\n\t\t\t\tcell.clearWidth();\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tvar maxWidth = this.element.offsetWidth;\r\n\r\n\t\tif(!this.width || !this.widthFixed){\r\n\t\t\tthis.cells.forEach((cell) => {\r\n\t\t\t\tvar width = cell.getWidth();\r\n\r\n\t\t\t\tif(width > maxWidth){\r\n\t\t\t\t\tmaxWidth = width;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tif(maxWidth){\r\n\t\t\t\tthis.setWidthActual(maxWidth + 1);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tupdateDefinition(updates){\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tvar definition;\r\n\r\n\t\t\tif(!this.isGroup){\r\n\t\t\t\tif(!this.parent.isGroup){\r\n\t\t\t\t\tdefinition = Object.assign({}, this.getDefinition());\r\n\t\t\t\t\tdefinition = Object.assign(definition, updates);\r\n\r\n\t\t\t\t\tthis.table.columnManager.addColumn(definition, false, this)\r\n\t\t\t\t\t.then((column) => {\r\n\r\n\t\t\t\t\t\tif(definition.field == this.field){\r\n\t\t\t\t\t\t\tthis.field = false; //cleair field name to prevent deletion of duplicate column from arrays\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tthis.delete()\r\n\t\t\t\t\t\t.then(() => {\r\n\t\t\t\t\t\t\tresolve(column.getComponent());\r\n\t\t\t\t\t\t}).catch((err) => {\r\n\t\t\t\t\t\t\treject(err);\r\n\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t}).catch((err) => {\r\n\t\t\t\t\t\treject(err);\r\n\t\t\t\t\t});\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.warn(\"Column Update Error - The updateDefinition function is only available on ungrouped columns\");\r\n\t\t\t\t\treject(\"Column Update Error - The updateDefinition function is only available on columns, not column groups\");\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Column Update Error - The updateDefinition function is only available on ungrouped columns\");\r\n\t\t\t\treject(\"Column Update Error - The updateDefinition function is only available on columns, not column groups\");\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tdeleteCell(cell){\r\n\t\tvar index = this.cells.indexOf(cell);\r\n\r\n\t\tif(index > -1){\r\n\t\t\tthis.cells.splice(index, 1);\r\n\t\t}\r\n\t}\r\n\r\n\t//////////////// Object Generation /////////////////\r\n\tgetComponent(){\r\n\t\tif(!this.component){\r\n\t\t\tthis.component = new ColumnComponent(this);\r\n\t\t}\r\n\r\n\t\treturn this.component;\r\n\t}\r\n}\r\n\r\nColumn.defaultOptionList = defaultOptions;\r\n\r\nexport default Column;","//public row object\r\nexport default class RowComponent {\r\n\r\n\tconstructor (row){\r\n\t\tthis._row = row;\r\n\r\n\t\treturn new Proxy(this, {\r\n\t\t\tget: function(target, name, receiver) {\r\n\t\t\t\tif (typeof target[name] !== \"undefined\") {\r\n\t\t\t\t\treturn target[name];\r\n\t\t\t\t}else{\r\n\t\t\t\t\treturn target._row.table.componentFunctionBinder.handle(\"row\", target._row, name)\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t})\r\n\t}\r\n\r\n\tgetData(transform){\r\n\t\treturn this._row.getData(transform);\r\n\t}\r\n\r\n\tgetElement(){\r\n\t\treturn this._row.getElement();\r\n\t}\r\n\r\n\tgetCells(){\r\n\t\tvar cells = [];\r\n\r\n\t\tthis._row.getCells().forEach(function(cell){\r\n\t\t\tcells.push(cell.getComponent());\r\n\t\t});\r\n\r\n\t\treturn cells;\r\n\t}\r\n\r\n\tgetCell(column){\r\n\t\tvar cell = this._row.getCell(column);\r\n\t\treturn cell ? cell.getComponent() : false;\r\n\t}\r\n\r\n\tgetIndex(){\r\n\t\treturn this._row.getData(\"data\")[this._row.table.options.index];\r\n\t}\r\n\r\n\tgetPosition(active){\r\n\t\treturn this._row.table.rowManager.getRowPosition(this._row, active);\r\n\t}\r\n\r\n\tdelete(){\r\n\t\treturn this._row.delete();\r\n\t}\r\n\r\n\tscrollTo(){\r\n\t\treturn this._row.table.rowManager.scrollToRow(this._row);\r\n\t}\r\n\r\n\tmove(to, after){\r\n\t\tthis._row.moveToRow(to, after);\r\n\t}\r\n\r\n\tupdate(data){\r\n\t\treturn this._row.updateData(data);\r\n\t}\r\n\r\n\tnormalizeHeight(){\r\n\t\tthis._row.normalizeHeight(true);\r\n\t}\r\n\r\n\t_getSelf(){\r\n\t\treturn this._row;\r\n\t}\r\n\r\n\treformat(){\r\n\t\treturn this._row.reinitialize();\r\n\t}\r\n\r\n\tgetTable(){\r\n\t\treturn this._row.table;\r\n\t}\r\n\r\n\tgetNextRow(){\r\n\t\tvar row = this._row.nextRow();\r\n\t\treturn row ? row.getComponent() : row;\r\n\t}\r\n\r\n\tgetPrevRow(){\r\n\t\tvar row = this._row.prevRow();\r\n\t\treturn row ? row.getComponent() : row;\r\n\t}\r\n}","import CoreFeature from '../CoreFeature.js';\r\nimport RowComponent from './RowComponent.js';\r\nimport Helpers from '../tools/Helpers.js';\r\n\r\nexport default class Row extends CoreFeature{\r\n\tconstructor (data, parent, type = \"row\"){\r\n\t\tsuper(parent.table);\r\n\r\n\t\tthis.parent = parent;\r\n\t\tthis.data = {};\r\n\t\tthis.type = type; //type of element\r\n\t\tthis.element = false;\r\n\t\tthis.modules = {}; //hold module variables;\r\n\t\tthis.cells = [];\r\n\t\tthis.height = 0; //hold element height\r\n\t\tthis.heightStyled = \"\"; //hold element height prestyled to improve render efficiency\r\n\t\tthis.manualHeight = false; //user has manually set row height\r\n\t\tthis.outerHeight = 0; //holde lements outer height\r\n\t\tthis.initialized = false; //element has been rendered\r\n\t\tthis.heightInitialized = false; //element has resized cells to fit\r\n\r\n\t\tthis.component = null;\r\n\r\n\t\tthis.created = false;\r\n\r\n\t\tthis.setData(data);\r\n\t}\r\n\r\n\tcreate(){\r\n\t\tif(!this.created){\r\n\t\t\tthis.created = true;\r\n\t\t\tthis.generateElement();\r\n\t\t}\r\n\t}\r\n\r\n\tcreateElement (){\r\n\t\tvar el = document.createElement(\"div\");\r\n\r\n\t\tel.classList.add(\"tabulator-row\");\r\n\t\tel.setAttribute(\"role\", \"row\");\r\n\r\n\t\tthis.element = el;\r\n\t}\r\n\r\n\tgetElement(){\r\n\t\tthis.create();\r\n\t\treturn this.element;\r\n\t}\r\n\r\n\tdetachElement(){\r\n\t\tif (this.element && this.element.parentNode){\r\n\t\t\tthis.element.parentNode.removeChild(this.element);\r\n\t\t}\r\n\t}\r\n\r\n\tgenerateElement(){\r\n\t\tthis.createElement();\r\n\t\tthis.dispatch(\"row-init\", this);\r\n\t}\r\n\r\n\tgenerateCells(){\r\n\t\tthis.cells = this.table.columnManager.generateCells(this);\r\n\t}\r\n\r\n\t//functions to setup on first render\r\n\tinitialize(force){\r\n\t\tthis.create();\r\n\r\n\t\tif(!this.initialized || force){\r\n\r\n\t\t\tthis.deleteCells();\r\n\r\n\t\t\twhile(this.element.firstChild) this.element.removeChild(this.element.firstChild);\r\n\r\n\t\t\tthis.dispatch(\"row-layout-before\", this);\r\n\r\n\t\t\tthis.generateCells();\r\n\r\n\t\t\tthis.table.columnManager.renderer.renderRowCells(this);\r\n\r\n\t\t\tif(force){\r\n\t\t\t\tthis.normalizeHeight();\r\n\t\t\t}\r\n\r\n\t\t\tthis.dispatch(\"row-layout\", this);\r\n\r\n\t\t\tif(this.table.options.rowFormatter){\r\n\t\t\t\tthis.table.options.rowFormatter(this.getComponent());\r\n\t\t\t}\r\n\r\n\t\t\tthis.dispatch(\"row-layout-after\", this);\r\n\r\n\t\t\tthis.initialized = true;\r\n\t\t}else{\r\n\t\t\tthis.table.columnManager.renderer.rerenderRowCells(this);\r\n\t\t}\r\n\t}\r\n\r\n\treinitializeHeight(){\r\n\t\tthis.heightInitialized = false;\r\n\r\n\t\tif(this.element && this.element.offsetParent !== null){\r\n\t\t\tthis.normalizeHeight(true);\r\n\t\t}\r\n\t}\r\n\r\n\treinitialize(children){\r\n\t\tthis.initialized = false;\r\n\t\tthis.heightInitialized = false;\r\n\r\n\t\tif(!this.manualHeight){\r\n\t\t\tthis.height = 0;\r\n\t\t\tthis.heightStyled = \"\";\r\n\t\t}\r\n\r\n\t\tif(this.element && this.element.offsetParent !== null){\r\n\t\t\tthis.initialize(true);\r\n\t\t}\r\n\r\n\t\tthis.dispatch(\"row-relayout\", this);\r\n\t}\r\n\r\n\t//get heights when doing bulk row style calcs in virtual DOM\r\n\tcalcHeight(force){\r\n\r\n\t\tvar maxHeight = 0,\r\n\t\tminHeight = this.table.options.resizableRows ? this.element.clientHeight : 0;\r\n\r\n\t\tthis.cells.forEach(function(cell){\r\n\t\t\tvar height = cell.getHeight();\r\n\t\t\tif(height > maxHeight){\r\n\t\t\t\tmaxHeight = height;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tif(force){\r\n\t\t\tthis.height = Math.max(maxHeight, minHeight);\r\n\t\t}else{\r\n\t\t\tthis.height = this.manualHeight ? this.height : Math.max(maxHeight, minHeight);\r\n\t\t}\r\n\r\n\t\tthis.heightStyled = this.height ? this.height + \"px\" : \"\";\r\n\t\tthis.outerHeight = this.element.offsetHeight;\r\n\t}\r\n\r\n\t//set of cells\r\n\tsetCellHeight(){\r\n\t\tthis.cells.forEach(function(cell){\r\n\t\t\tcell.setHeight();\r\n\t\t});\r\n\r\n\t\tthis.heightInitialized = true;\r\n\t}\r\n\r\n\tclearCellHeight(){\r\n\t\tthis.cells.forEach(function(cell){\r\n\t\t\tcell.clearHeight();\r\n\t\t});\r\n\t}\r\n\r\n\t//normalize the height of elements in the row\r\n\tnormalizeHeight(force){\r\n\r\n\t\tif(force){\r\n\t\t\tthis.clearCellHeight();\r\n\t\t}\r\n\r\n\t\tthis.calcHeight(force);\r\n\r\n\t\tthis.setCellHeight();\r\n\t}\r\n\r\n\t//set height of rows\r\n\tsetHeight(height, force){\r\n\t\tif(this.height != height || force){\r\n\r\n\t\t\tthis.manualHeight = true;\r\n\r\n\t\t\tthis.height = height;\r\n\t\t\tthis.heightStyled = height ? height + \"px\" : \"\";\r\n\r\n\t\t\tthis.setCellHeight();\r\n\r\n\t\t\t// this.outerHeight = this.element.outerHeight();\r\n\t\t\tthis.outerHeight = this.element.offsetHeight;\r\n\t\t}\r\n\t}\r\n\r\n\t//return rows outer height\r\n\tgetHeight(){\r\n\t\treturn this.outerHeight;\r\n\t}\r\n\r\n\t//return rows outer Width\r\n\tgetWidth(){\r\n\t\treturn this.element.offsetWidth;\r\n\t}\r\n\r\n\t//////////////// Cell Management /////////////////\r\n\tdeleteCell(cell){\r\n\t\tvar index = this.cells.indexOf(cell);\r\n\r\n\t\tif(index > -1){\r\n\t\t\tthis.cells.splice(index, 1);\r\n\t\t}\r\n\t}\r\n\r\n\t//////////////// Data Management /////////////////\r\n\tsetData(data){\r\n\t\tthis.data = this.chain(\"row-data-init-before\", [this, data], null, data);\r\n\r\n\t\tthis.dispatch(\"row-data-init-after\", this);\r\n\t}\r\n\r\n\t//update the rows data\r\n\tupdateData(updatedData){\r\n\t\tvar visible = this.element && Helpers.elVisible(this.element),\r\n\t\ttempData = {},\r\n\t\tnewRowData;\r\n\r\n\t\treturn new Promise((resolve, reject) => {\r\n\r\n\t\t\tif(typeof updatedData === \"string\"){\r\n\t\t\t\tupdatedData = JSON.parse(updatedData);\r\n\t\t\t}\r\n\r\n\t\t\tthis.dispatch(\"row-data-save-before\", this);\r\n\r\n\t\t\tif(this.subscribed(\"row-data-changing\")){\r\n\t\t\t\ttempData = Object.assign(tempData, this.data);\r\n\t\t\t\ttempData = Object.assign(tempData, updatedData);\r\n\t\t\t}\r\n\r\n\t\t\tnewRowData = this.chain(\"row-data-changing\", [this, tempData, updatedData], null, updatedData);\r\n\r\n\t\t\t//set data\r\n\t\t\tfor (var attrname in newRowData) {\r\n\t\t\t\tthis.data[attrname] = newRowData[attrname];\r\n\t\t\t}\r\n\r\n\t\t\tthis.dispatch(\"row-data-save-after\", this);\r\n\r\n\t\t\t//update affected cells only\r\n\t\t\tfor (var attrname in updatedData) {\r\n\r\n\t\t\t\tlet columns = this.table.columnManager.getColumnsByFieldRoot(attrname);\r\n\r\n\t\t\t\tcolumns.forEach((column) => {\r\n\t\t\t\t\tlet cell = this.getCell(column.getField());\r\n\r\n\t\t\t\t\tif(cell){\r\n\t\t\t\t\t\tlet value = column.getFieldValue(newRowData);\r\n\t\t\t\t\t\tif(cell.getValue() != value){\r\n\t\t\t\t\t\t\tcell.setValueProcessData(value);\r\n\r\n\t\t\t\t\t\t\tif(visible){\r\n\t\t\t\t\t\t\t\tcell.cellRendered();\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\t//Partial reinitialization if visible\r\n\t\t\tif(visible){\r\n\t\t\t\tthis.normalizeHeight(true);\r\n\r\n\t\t\t\tif(this.table.options.rowFormatter){\r\n\t\t\t\t\tthis.table.options.rowFormatter(this.getComponent());\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tthis.initialized = false;\r\n\t\t\t\tthis.height = 0;\r\n\t\t\t\tthis.heightStyled = \"\";\r\n\t\t\t}\r\n\r\n\t\t\tthis.dispatch(\"row-data-changed\", this, visible, updatedData);\r\n\r\n\t\t\t//this.reinitialize();\r\n\r\n\t\t\tthis.dispatchExternal(\"rowUpdated\", this.getComponent());\r\n\r\n\t\t\tif(this.subscribedExternal.subscribed(\"dataChanged\")){\r\n\t\t\t\tthis.dispatchExternal(\"dataChanged\", this.table.rowManager.getData());\r\n\t\t\t}\r\n\r\n\t\t\tresolve();\r\n\t\t});\r\n\t}\r\n\r\n\tgetData(transform){\r\n\t\tif(transform){\r\n\t\t\treturn this.chain(\"row-data-retrieve\", [this, transform], null, this.data);\r\n\t\t}\r\n\r\n\t\treturn this.data;\r\n\t}\r\n\r\n\tgetCell(column){\r\n\t\tvar match = false;\r\n\r\n\t\tcolumn = this.table.columnManager.findColumn(column);\r\n\r\n\t\tmatch = this.cells.find(function(cell){\r\n\t\t\treturn cell.column === column;\r\n\t\t});\r\n\r\n\t\treturn match;\r\n\t}\r\n\r\n\tgetCellIndex(findCell){\r\n\t\treturn this.cells.findIndex(function(cell){\r\n\t\t\treturn cell === findCell;\r\n\t\t});\r\n\t}\r\n\r\n\tfindCell(subject){\r\n\t\treturn this.cells.find((cell) => {\r\n\t\t\treturn cell.element === subject;\r\n\t\t});\r\n\t}\r\n\r\n\tgetCells(){\r\n\t\treturn this.cells;\r\n\t}\r\n\r\n\tnextRow(){\r\n\t\tvar row = this.table.rowManager.nextDisplayRow(this, true);\r\n\t\treturn row || false;\r\n\t}\r\n\r\n\tprevRow(){\r\n\t\tvar row = this.table.rowManager.prevDisplayRow(this, true);\r\n\t\treturn row || false;\r\n\t}\r\n\r\n\tmoveToRow(to, before){\r\n\t\tvar toRow = this.table.rowManager.findRow(to);\r\n\r\n\t\tif(toRow){\r\n\t\t\tthis.table.rowManager.moveRowActual(this, toRow, !before);\r\n\t\t\tthis.table.rowManager.refreshActiveData(\"display\", false, true);\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Move Error - No matching row found:\", to);\r\n\t\t}\r\n\t}\r\n\r\n\t///////////////////// Actions /////////////////////\r\n\tdelete(){\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tthis.dispatch(\"row-delete\", this);\r\n\r\n\t\t\tthis.deleteActual();\r\n\r\n\t\t\tresolve();\r\n\t\t});\r\n\t}\r\n\r\n\tdeleteActual(blockRedraw){\r\n\t\tvar index = this.table.rowManager.getRowIndex(this);\r\n\r\n\t\tthis.detatchModules();\r\n\r\n\t\tthis.table.rowManager.deleteRow(this, blockRedraw);\r\n\r\n\t\tthis.deleteCells();\r\n\r\n\t\tthis.initialized = false;\r\n\t\tthis.heightInitialized = false;\r\n\t\tthis.element = false;\r\n\r\n\t\tthis.dispatch(\"row-deleted\", this);\r\n\t}\r\n\r\n\tdetatchModules(){\r\n\t\tthis.dispatch(\"row-deleting\", this);\r\n\t}\r\n\r\n\tdeleteCells(){\r\n\t\tvar cellCount = this.cells.length;\r\n\r\n\t\tfor(let i = 0; i < cellCount; i++){\r\n\t\t\tthis.cells[0].delete();\r\n\t\t}\r\n\t}\r\n\r\n\twipe(){\r\n\t\tthis.detatchModules();\r\n\t\tthis.deleteCells();\r\n\r\n\t\tif(this.element){\r\n\t\t\twhile(this.element.firstChild) this.element.removeChild(this.element.firstChild);\r\n\r\n\t\t\tif(this.element.parentNode){\r\n\t\t\t\tthis.element.parentNode.removeChild(this.element);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.element = false;\r\n\t\tthis.modules = {};\r\n\t}\r\n\r\n\tgetGroup(){\r\n\t\treturn this.modules.group || false;\r\n\t}\r\n\r\n\t//////////////// Object Generation /////////////////\r\n\tgetComponent(){\r\n\t\tif(!this.component){\r\n\t\t\tthis.component = new RowComponent(this);\r\n\t\t}\r\n\r\n\t\treturn this.component;\r\n\t}\r\n}","export default {\r\n\t\"avg\":function(values, data, calcParams){\r\n\t\tvar output = 0,\r\n\t\tprecision = typeof calcParams.precision !== \"undefined\" ? calcParams.precision : 2\r\n\r\n\t\tif(values.length){\r\n\t\t\toutput = values.reduce(function(sum, value){\r\n\t\t\t\treturn Number(sum) + Number(value);\r\n\t\t\t});\r\n\r\n\t\t\toutput = output / values.length;\r\n\r\n\t\t\toutput = precision !== false ? output.toFixed(precision) : output;\r\n\t\t}\r\n\r\n\t\treturn parseFloat(output).toString();\r\n\t},\r\n\t\"max\":function(values, data, calcParams){\r\n\t\tvar output = null,\r\n\t\tprecision = typeof calcParams.precision !== \"undefined\" ? calcParams.precision : false;\r\n\r\n\t\tvalues.forEach(function(value){\r\n\r\n\t\t\tvalue = Number(value);\r\n\r\n\t\t\tif(value > output || output === null){\r\n\t\t\t\toutput = value;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn output !== null ? (precision !== false ? output.toFixed(precision) : output) : \"\";\r\n\t},\r\n\t\"min\":function(values, data, calcParams){\r\n\t\tvar output = null,\r\n\t\tprecision = typeof calcParams.precision !== \"undefined\" ? calcParams.precision : false;\r\n\r\n\t\tvalues.forEach(function(value){\r\n\r\n\t\t\tvalue = Number(value);\r\n\r\n\t\t\tif(value < output || output === null){\r\n\t\t\t\toutput = value;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn output !== null ? (precision !== false ? output.toFixed(precision) : output) : \"\";\r\n\t},\r\n\t\"sum\":function(values, data, calcParams){\r\n\t\tvar output = 0,\r\n\t\tprecision = typeof calcParams.precision !== \"undefined\" ? calcParams.precision : false;\r\n\r\n\t\tif(values.length){\r\n\t\t\tvalues.forEach(function(value){\r\n\t\t\t\tvalue = Number(value);\r\n\r\n\t\t\t\toutput += !isNaN(value) ? Number(value) : 0;\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn precision !== false ? output.toFixed(precision) : output;\r\n\t},\r\n\t\"concat\":function(values, data, calcParams){\r\n\t\tvar output = 0;\r\n\r\n\t\tif(values.length){\r\n\t\t\toutput = values.reduce(function(sum, value){\r\n\t\t\t\treturn String(sum) + String(value);\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn output;\r\n\t},\r\n\t\"count\":function(values, data, calcParams){\r\n\t\tvar output = 0;\r\n\r\n\t\tif(values.length){\r\n\t\t\tvalues.forEach(function(value){\r\n\t\t\t\tif(value){\r\n\t\t\t\t\toutput ++;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn output;\r\n\t},\r\n};","import Module from '../../core/Module.js';\r\n\r\nimport CalcComponent from './CalcComponent.js';\r\n\r\nimport Cell from '../../core/cell/Cell.js';\r\nimport Column from '../../core/column/Column.js';\r\nimport Row from '../../core/row/Row.js';\r\n\r\nimport defaultCalculations from './defaults/calculations.js';\r\n\r\nclass ColumnCalcs extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.topCalcs = [];\r\n\t\tthis.botCalcs = [];\r\n\t\tthis.genColumn = false;\r\n\t\tthis.topElement = this.createElement();\r\n\t\tthis.botElement = this.createElement();\r\n\t\tthis.topRow = false;\r\n\t\tthis.botRow = false;\r\n\t\tthis.topInitialized = false;\r\n\t\tthis.botInitialized = false;\r\n\r\n\t\tthis.registerTableOption(\"columnCalcs\", true);\r\n\r\n\t\tthis.registerColumnOption(\"topCalc\");\r\n\t\tthis.registerColumnOption(\"topCalcParams\");\r\n\t\tthis.registerColumnOption(\"topCalcFormatter\");\r\n\t\tthis.registerColumnOption(\"topCalcFormatterParams\");\r\n\t\tthis.registerColumnOption(\"bottomCalc\");\r\n\t\tthis.registerColumnOption(\"bottomCalcParams\");\r\n\t\tthis.registerColumnOption(\"bottomCalcFormatter\");\r\n\t\tthis.registerColumnOption(\"bottomCalcFormatterParams\");\r\n\t}\r\n\r\n\tcreateElement (){\r\n\t\tvar el = document.createElement(\"div\");\r\n\t\tel.classList.add(\"tabulator-calcs-holder\");\r\n\t\treturn el;\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tthis.genColumn = new Column({field:\"value\"}, this);\r\n\r\n\t\tthis.subscribe(\"cell-value-changed\", this.cellValueChanged.bind(this));\r\n\t\tthis.subscribe(\"column-init\", this.initializeColumnCheck.bind(this));\r\n\t\tthis.subscribe(\"row-deleted\", this.rowsUpdated.bind(this));\r\n\t\tthis.subscribe(\"scroll-horizontal\", this.scrollHorizontal.bind(this));\r\n\t\tthis.subscribe(\"row-added\", this.rowsUpdated.bind(this));\r\n\t\tthis.subscribe(\"column-moved\", this.recalcActiveRows.bind(this));\r\n\t\tthis.subscribe(\"column-add\", this.recalcActiveRows.bind(this));\r\n\t\tthis.subscribe(\"data-refeshed\", this.recalcActiveRows.bind(this));\r\n\t\tthis.subscribe(\"table-redraw\", this.tableRedraw.bind(this));\r\n\r\n\t\tthis.registerTableFunction(\"getCalcResults\", this.getResults.bind(this));\r\n\t\tthis.registerTableFunction(\"recalc\", this.userRecalc.bind(this));\r\n\t}\r\n\r\n\ttableRedraw(force){\r\n\t\tthis.recalc(this.table.rowManager.activeRows);\r\n\r\n\t\tif(force){\r\n\t\t\tthis.redraw();\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t///////////////////////////////////\r\n\t///////// Table Functions /////////\r\n\t///////////////////////////////////\r\n\tuserRecalc(){\r\n\t\tthis.recalc(this.table.rowManager.activeRows);\r\n\t}\r\n\r\n\t///////////////////////////////////\r\n\t///////// Internal Logic //////////\r\n\t///////////////////////////////////\r\n\r\n\trowsUpdated(row){\r\n\t\tif(this.table.options.groupBy){\r\n\t\t\tthis.recalcRowGroup(this);\r\n\t\t}else{\r\n\t\t\tthis.recalcActiveRows();\r\n\t\t}\r\n\t}\r\n\r\n\trecalcActiveRows(){\r\n\t\tthis.recalc(this.table.rowManager.activeRows);\r\n\t}\r\n\r\n\tcellValueChanged(cell){\r\n\t\tif(cell.column.definition.topCalc || cell.column.definition.bottomCalc){\r\n\t\t\tif(this.table.options.groupBy){\r\n\r\n\t\t\t\tif(this.table.options.columnCalcs == \"table\" || this.table.options.columnCalcs == \"both\"){\r\n\t\t\t\t\tthis.recalcActiveRows();\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(this.table.options.columnCalcs != \"table\"){\r\n\t\t\t\t\tthis.recalcRowGroup(cell.row);\r\n\t\t\t\t}\r\n\r\n\t\t\t}else{\r\n\t\t\t\tthis.recalcActiveRows();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tinitializeColumnCheck(column){\r\n\t\tif(column.definition.topCalc || column.definition.bottomCalc){\r\n\t\t\tthis.initializeColumn(column);\r\n\t\t}\r\n\t}\r\n\r\n\t//initialize column calcs\r\n\tinitializeColumn(column){\r\n\t\tvar def = column.definition\r\n\r\n\t\tvar config = {\r\n\t\t\ttopCalcParams:def.topCalcParams || {},\r\n\t\t\tbotCalcParams:def.bottomCalcParams || {},\r\n\t\t};\r\n\r\n\t\tif(def.topCalc){\r\n\r\n\t\t\tswitch(typeof def.topCalc){\r\n\t\t\t\tcase \"string\":\r\n\t\t\t\tif(ColumnCalcs.calculations[def.topCalc]){\r\n\t\t\t\t\tconfig.topCalc = ColumnCalcs.calculations[def.topCalc]\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.warn(\"Column Calc Error - No such calculation found, ignoring: \", def.topCalc);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"function\":\r\n\t\t\t\tconfig.topCalc = def.topCalc;\r\n\t\t\t\tbreak\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif(config.topCalc){\r\n\t\t\t\tcolumn.modules.columnCalcs = config;\r\n\t\t\t\tthis.topCalcs.push(column);\r\n\r\n\t\t\t\tif(this.table.options.columnCalcs != \"group\"){\r\n\t\t\t\t\tthis.initializeTopRow();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tif(def.bottomCalc){\r\n\t\t\tswitch(typeof def.bottomCalc){\r\n\t\t\t\tcase \"string\":\r\n\t\t\t\tif(ColumnCalcs.calculations[def.bottomCalc]){\r\n\t\t\t\t\tconfig.botCalc = ColumnCalcs.calculations[def.bottomCalc]\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.warn(\"Column Calc Error - No such calculation found, ignoring: \", def.bottomCalc);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"function\":\r\n\t\t\t\tconfig.botCalc = def.bottomCalc;\r\n\t\t\t\tbreak\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif(config.botCalc){\r\n\t\t\t\tcolumn.modules.columnCalcs = config;\r\n\t\t\t\tthis.botCalcs.push(column);\r\n\r\n\t\t\t\tif(this.table.options.columnCalcs != \"group\"){\r\n\t\t\t\t\tthis.initializeBottomRow();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t//dummy functions to handle being mock column manager\r\n\tregisterColumnField(){};\r\n\r\n\tremoveCalcs(){\r\n\t\tvar changed = false;\r\n\r\n\t\tif(this.topInitialized){\r\n\t\t\tthis.topInitialized = false;\r\n\t\t\tthis.topElement.parentNode.removeChild(this.topElement);\r\n\t\t\tchanged = true;\r\n\t\t}\r\n\r\n\t\tif(this.botInitialized){\r\n\t\t\tthis.botInitialized = false;\r\n\t\t\tthis.table.footerManager.remove(this.botElement);\r\n\t\t\tchanged = true;\r\n\t\t}\r\n\r\n\t\tif(changed){\r\n\t\t\tthis.table.rowManager.adjustTableSize();\r\n\t\t}\r\n\t}\r\n\r\n\tinitializeTopRow(){\r\n\t\tif(!this.topInitialized){\r\n\t\t\tthis.table.columnManager.getElement().insertBefore(this.topElement, this.table.columnManager.headersElement.nextSibling);\r\n\t\t\tthis.topInitialized = true;\r\n\t\t}\r\n\t}\r\n\r\n\tinitializeBottomRow(){\r\n\t\tif(!this.botInitialized){\r\n\t\t\tthis.table.footerManager.prepend(this.botElement);\r\n\t\t\tthis.botInitialized = true;\r\n\t\t}\r\n\t}\r\n\r\n\tscrollHorizontal(left){\r\n\t\tif(this.botInitialized && this.botRow){\r\n\t\t\tthis.botRow.getElement().style.marginLeft = (-left) + \"px\";\r\n\t\t}\r\n\t}\r\n\r\n\trecalc(rows){\r\n\t\tvar data, row;\r\n\r\n\t\tif(this.topInitialized || this.botInitialized){\r\n\t\t\tdata = this.rowsToData(rows);\r\n\r\n\t\t\tif(this.topInitialized){\r\n\t\t\t\tif(this.topRow){\r\n\t\t\t\t\tthis.topRow.deleteCells();\r\n\t\t\t\t}\r\n\r\n\t\t\t\trow = this.generateRow(\"top\", this.rowsToData(rows))\r\n\t\t\t\tthis.topRow = row;\r\n\t\t\t\twhile(this.topElement.firstChild) this.topElement.removeChild(this.topElement.firstChild);\r\n\t\t\t\tthis.topElement.appendChild(row.getElement());\r\n\t\t\t\trow.initialize(true);\r\n\t\t\t}\r\n\r\n\t\t\tif(this.botInitialized){\r\n\t\t\t\tif(this.botRow){\r\n\t\t\t\t\tthis.botRow.deleteCells();\r\n\t\t\t\t}\r\n\r\n\t\t\t\trow = this.generateRow(\"bottom\", this.rowsToData(rows))\r\n\t\t\t\tthis.botRow = row;\r\n\t\t\t\twhile(this.botElement.firstChild) this.botElement.removeChild(this.botElement.firstChild);\r\n\t\t\t\tthis.botElement.appendChild(row.getElement());\r\n\t\t\t\trow.initialize(true);\r\n\t\t\t}\r\n\r\n\t\t\tthis.table.rowManager.adjustTableSize();\r\n\r\n\t\t\t//set resizable handles\r\n\t\t\tif(this.table.modExists(\"frozenColumns\")){\r\n\t\t\t\tthis.table.modules.frozenColumns.layout();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\trecalcRowGroup(row){\r\n\t\tthis.recalcGroup(this.table.modules.groupRows.getRowGroup(row));\r\n\t}\r\n\r\n\trecalcAll(){\r\n\t\tif(this.topCalcs.length || this.botCalcs.length){\r\n\t\t\tif(this.table.options.columnCalcs !== \"group\"){\r\n\t\t\t\tthis.recalcActiveRows();\r\n\t\t\t}\r\n\r\n\t\t\tif(this.table.options.groupBy && this.table.options.columnCalcs !== \"table\"){\r\n\r\n\r\n\t\t\t\tvar groups = table.modules.groupRows.getChildGroups();\r\n\r\n\t\t\t\tgroups.forEach((group) => {\r\n\t\t\t\t\tthis.recalcGroup(group);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\trecalcGroup(group){\r\n\t\tvar data, rowData;\r\n\r\n\t\tif(group){\r\n\t\t\tif(group.calcs){\r\n\t\t\t\tif(group.calcs.bottom){\r\n\t\t\t\t\tdata = this.rowsToData(group.rows);\r\n\t\t\t\t\trowData = this.generateRowData(\"bottom\", data);\r\n\r\n\t\t\t\t\tgroup.calcs.bottom.updateData(rowData);\r\n\t\t\t\t\tgroup.calcs.bottom.reinitialize();\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(group.calcs.top){\r\n\t\t\t\t\tdata = this.rowsToData(group.rows);\r\n\t\t\t\t\trowData = this.generateRowData(\"top\", data);\r\n\r\n\t\t\t\t\tgroup.calcs.top.updateData(rowData);\r\n\t\t\t\t\tgroup.calcs.top.reinitialize();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//generate top stats row\r\n\tgenerateTopRow(rows){\r\n\t\treturn this.generateRow(\"top\", this.rowsToData(rows));\r\n\t}\r\n\t//generate bottom stats row\r\n\tgenerateBottomRow(rows){\r\n\t\treturn this.generateRow(\"bottom\", this.rowsToData(rows));\r\n\t}\r\n\r\n\trowsToData(rows){\r\n\t\tvar data = [];\r\n\r\n\t\trows.forEach((row) => {\r\n\t\t\tdata.push(row.getData());\r\n\r\n\t\t\tif(this.table.options.dataTree && this.table.options.dataTreeChildColumnCalcs){\r\n\t\t\t\tif(row.modules.dataTree.open){\r\n\t\t\t\t\tvar children = this.rowsToData(this.table.modules.dataTree.getFilteredTreeChildren(row));\r\n\t\t\t\t\tdata = data.concat(children);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn data;\r\n\t}\r\n\r\n\t//generate stats row\r\n\tgenerateRow(pos, data){\r\n\t\tvar rowData = this.generateRowData(pos, data),\r\n\t\trow;\r\n\r\n\t\tif(this.table.modExists(\"mutator\")){\r\n\t\t\tthis.table.modules.mutator.disable();\r\n\t\t}\r\n\r\n\t\trow = new Row(rowData, this, \"calc\");\r\n\r\n\t\tif(this.table.modExists(\"mutator\")){\r\n\t\t\tthis.table.modules.mutator.enable();\r\n\t\t}\r\n\r\n\t\trow.getElement().classList.add(\"tabulator-calcs\", \"tabulator-calcs-\" + pos);\r\n\r\n\t\trow.component = false;\r\n\r\n\t\trow.getComponent = () => {\r\n\t\t\tif(!row.component){\r\n\t\t\t\trow.component = new CalcComponent(this);\r\n\t\t\t}\r\n\r\n\t\t\treturn row.component;\r\n\t\t};\r\n\r\n\t\trow.generateCells = () => {\r\n\r\n\t\t\tvar cells = [];\r\n\r\n\t\t\tthis.table.columnManager.columnsByIndex.forEach((column) => {\r\n\r\n\t\t\t\t\t//set field name of mock column\r\n\t\t\t\t\tthis.genColumn.setField(column.getField());\r\n\t\t\t\t\tthis.genColumn.hozAlign = column.hozAlign;\r\n\r\n\t\t\t\t\tif(column.definition[pos + \"CalcFormatter\"] && this.table.modExists(\"format\")){\r\n\t\t\t\t\t\tthis.genColumn.modules.format = {\r\n\t\t\t\t\t\t\tformatter: this.table.modules.format.getFormatter(column.definition[pos + \"CalcFormatter\"]),\r\n\t\t\t\t\t\t\tparams: column.definition[pos + \"CalcFormatterParams\"] || {},\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tthis.genColumn.modules.format = {\r\n\t\t\t\t\t\t\tformatter: this.table.modules.format.getFormatter(\"plaintext\"),\r\n\t\t\t\t\t\t\tparams:{}\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t//ensure css class defintion is replicated to calculation cell\r\n\t\t\t\t\tthis.genColumn.definition.cssClass = column.definition.cssClass;\r\n\r\n\t\t\t\t\t//generate cell and assign to correct column\r\n\t\t\t\t\tvar cell = new Cell(this.genColumn, row);\r\n\t\t\t\t\tcell.getElement();\r\n\t\t\t\t\tcell.column = column;\r\n\t\t\t\t\tcell.setWidth();\r\n\r\n\t\t\t\t\tcolumn.cells.push(cell);\r\n\t\t\t\t\tcells.push(cell);\r\n\r\n\t\t\t\t\tif(!column.visible){\r\n\t\t\t\t\t\tcell.hide();\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\trow.cells = cells;\r\n\t\t};\r\n\r\n\t\treturn row;\r\n\t}\r\n\r\n\t//generate stats row\r\n\tgenerateRowData(pos, data){\r\n\t\tvar rowData = {},\r\n\t\tcalcs = pos == \"top\" ? this.topCalcs : this.botCalcs,\r\n\t\ttype = pos == \"top\" ? \"topCalc\" : \"botCalc\",\r\n\t\tparams, paramKey;\r\n\r\n\t\tcalcs.forEach(function(column){\r\n\t\t\tvar values = [];\r\n\r\n\t\t\tif(column.modules.columnCalcs && column.modules.columnCalcs[type]){\r\n\t\t\t\tdata.forEach(function(item){\r\n\t\t\t\t\tvalues.push(column.getFieldValue(item));\r\n\t\t\t\t});\r\n\r\n\t\t\t\tparamKey = type + \"Params\";\r\n\t\t\t\tparams = typeof column.modules.columnCalcs[paramKey] === \"function\" ? column.modules.columnCalcs[paramKey](values, data) : column.modules.columnCalcs[paramKey];\r\n\r\n\t\t\t\tcolumn.setFieldValue(rowData, column.modules.columnCalcs[type](values, data, params));\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn rowData;\r\n\t}\r\n\r\n\thasTopCalcs(){\r\n\t\treturn\t!!(this.topCalcs.length);\r\n\t}\r\n\r\n\thasBottomCalcs(){\r\n\t\treturn\t!!(this.botCalcs.length);\r\n\t}\r\n\r\n\t//handle table redraw\r\n\tredraw(){\r\n\t\tif(this.topRow){\r\n\t\t\tthis.topRow.normalizeHeight(true);\r\n\t\t}\r\n\t\tif(this.botRow){\r\n\t\t\tthis.botRow.normalizeHeight(true);\r\n\t\t}\r\n\t}\r\n\r\n\t//return the calculated\r\n\tgetResults(){\r\n\t\tvar results = {},\r\n\t\tgroups;\r\n\r\n\t\tif(this.table.options.groupBy && this.table.modExists(\"groupRows\")){\r\n\t\t\tgroups = this.table.modules.groupRows.getGroups(true);\r\n\r\n\t\t\tgroups.forEach((group) => {\r\n\t\t\t\tresults[group.getKey()] = this.getGroupResults(group);\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tresults = {\r\n\t\t\t\ttop: this.topRow ? this.topRow.getData() : {},\r\n\t\t\t\tbottom: this.botRow ? this.botRow.getData() : {},\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn results;\r\n\t}\r\n\r\n\t//get results from a group\r\n\tgetGroupResults(group){\r\n\t\tvar groupObj = group._getSelf(),\r\n\t\tsubGroups = group.getSubGroups(),\r\n\t\tsubGroupResults = {},\r\n\t\tresults = {};\r\n\r\n\t\tsubGroups.forEach((subgroup) => {\r\n\t\t\tsubGroupResults[subgroup.getKey()] = this.getGroupResults(subgroup);\r\n\t\t});\r\n\r\n\t\tresults = {\r\n\t\t\ttop: groupObj.calcs.top ? groupObj.calcs.top.getData() : {},\r\n\t\t\tbottom: groupObj.calcs.bottom ? groupObj.calcs.bottom.getData() : {},\r\n\t\t\tgroups: subGroupResults,\r\n\t\t}\r\n\r\n\t\treturn results;\r\n\t}\r\n}\r\n\r\nColumnCalcs.moduleName = \"columnCalcs\";\r\n\r\n//load defaults\r\nColumnCalcs.calculations = defaultCalculations;\r\n\r\nexport default ColumnCalcs;","import Module from '../../core/Module.js';\r\n\r\nimport Row from '../../core/row/Row.js';\r\n\r\nclass DataTree extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.indent = 10;\r\n\t\tthis.field = \"\";\r\n\t\tthis.collapseEl = null;\r\n\t\tthis.expandEl = null;\r\n\t\tthis.branchEl = null;\r\n\t\tthis.elementField = false;\r\n\r\n\t\tthis.startOpen = function(){};\r\n\r\n\t\tthis.displayIndex = 0;\r\n\r\n\t\tthis.registerTableOption(\"dataTree\", false); //enable data tree\r\n\t\tthis.registerTableOption(\"dataTreeFilter\", true); //filter child rows\r\n\t\tthis.registerTableOption(\"dataTreeSort\", true); //sort child rows\r\n\t\tthis.registerTableOption(\"dataTreeElementColumn\", false);\r\n\t\tthis.registerTableOption(\"dataTreeBranchElement\", true);//show data tree branch element\r\n\t\tthis.registerTableOption(\"dataTreeChildIndent\", 9); //data tree child indent in px\r\n\t\tthis.registerTableOption(\"dataTreeChildField\", \"_children\");//data tre column field to look for child rows\r\n\t\tthis.registerTableOption(\"dataTreeCollapseElement\", false);//data tree row collapse element\r\n\t\tthis.registerTableOption(\"dataTreeExpandElement\", false);//data tree row expand element\r\n\t\tthis.registerTableOption(\"dataTreeStartExpanded\", false);\r\n\t\tthis.registerTableOption(\"dataTreeChildColumnCalcs\", false);//include visible data tree rows in column calculations\r\n\t\tthis.registerTableOption(\"dataTreeSelectPropagate\", false);//seleccting a parent row selects its children\r\n\r\n\t\t//register component functions\r\n\t\tthis.registerComponentFunction(\"row\", \"treeCollapse\", this.collapseRow.bind(this));\r\n\t\tthis.registerComponentFunction(\"row\", \"treeExpand\", this.expandRow.bind(this));\r\n\t\tthis.registerComponentFunction(\"row\", \"treeToggle\", this.toggleRow.bind(this));\r\n\t\tthis.registerComponentFunction(\"row\", \"getTreeParent\", this.getTreeParent.bind(this));\r\n\t\tthis.registerComponentFunction(\"row\", \"getTreeChildren\", this.getRowChildren.bind(this));\r\n\t\tthis.registerComponentFunction(\"row\", \"addTreeChild\", this.addTreeChildRow.bind(this));\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tif(this.table.options.dataTree){\r\n\t\t\tvar dummyEl = null,\r\n\t\t\tfirstCol = this.table.columnManager.getFirstVisibileColumn(),\r\n\t\t\toptions = this.table.options;\r\n\r\n\t\t\tthis.field = options.dataTreeChildField;\r\n\t\t\tthis.indent = options.dataTreeChildIndent;\r\n\t\t\tthis.elementField = options.dataTreeElementColumn || (firstCol ? firstCol.field : false);\r\n\r\n\t\t\tif(options.dataTreeBranchElement){\r\n\r\n\t\t\t\tif(options.dataTreeBranchElement === true){\r\n\t\t\t\t\tthis.branchEl = document.createElement(\"div\");\r\n\t\t\t\t\tthis.branchEl.classList.add(\"tabulator-data-tree-branch\");\r\n\t\t\t\t}else{\r\n\t\t\t\t\tif(typeof options.dataTreeBranchElement === \"string\"){\r\n\t\t\t\t\t\tdummyEl = document.createElement(\"div\");\r\n\t\t\t\t\t\tdummyEl.innerHTML = options.dataTreeBranchElement;\r\n\t\t\t\t\t\tthis.branchEl = dummyEl.firstChild;\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tthis.branchEl = options.dataTreeBranchElement;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif(options.dataTreeCollapseElement){\r\n\t\t\t\tif(typeof options.dataTreeCollapseElement === \"string\"){\r\n\t\t\t\t\tdummyEl = document.createElement(\"div\");\r\n\t\t\t\t\tdummyEl.innerHTML = options.dataTreeCollapseElement;\r\n\t\t\t\t\tthis.collapseEl = dummyEl.firstChild;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tthis.collapseEl = options.dataTreeCollapseElement;\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tthis.collapseEl = document.createElement(\"div\");\r\n\t\t\t\tthis.collapseEl.classList.add(\"tabulator-data-tree-control\");\r\n\t\t\t\tthis.collapseEl.tabIndex = 0;\r\n\t\t\t\tthis.collapseEl.innerHTML = \"
\";\r\n\t\t\t}\r\n\r\n\t\t\tif(options.dataTreeExpandElement){\r\n\t\t\t\tif(typeof options.dataTreeExpandElement === \"string\"){\r\n\t\t\t\t\tdummyEl = document.createElement(\"div\");\r\n\t\t\t\t\tdummyEl.innerHTML = options.dataTreeExpandElement;\r\n\t\t\t\t\tthis.expandEl = dummyEl.firstChild;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tthis.expandEl = options.dataTreeExpandElement;\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tthis.expandEl = document.createElement(\"div\");\r\n\t\t\t\tthis.expandEl.classList.add(\"tabulator-data-tree-control\");\r\n\t\t\t\tthis.expandEl.tabIndex = 0;\r\n\t\t\t\tthis.expandEl.innerHTML = \"
\";\r\n\t\t\t}\r\n\r\n\r\n\t\t\tswitch(typeof options.dataTreeStartExpanded){\r\n\t\t\t\tcase \"boolean\":\r\n\t\t\t\tthis.startOpen = function(row, index){\r\n\t\t\t\t\treturn options.dataTreeStartExpanded;\r\n\t\t\t\t};\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"function\":\r\n\t\t\t\tthis.startOpen = options.dataTreeStartExpanded;\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tdefault:\r\n\t\t\t\tthis.startOpen = function(row, index){\r\n\t\t\t\t\treturn options.dataTreeStartExpanded[index];\r\n\t\t\t\t};\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\r\n\t\t\tthis.subscribe(\"row-init\", this.initializeRow.bind(this));\r\n\t\t\tthis.subscribe(\"row-layout\", this.layoutRow.bind(this));\r\n\t\t\tthis.subscribe(\"row-relayout\", this.layoutRow.bind(this));\r\n\t\t\tthis.subscribe(\"row-deleted\", this.rowDelete.bind(this),0);\r\n\t\t\tthis.subscribe(\"row-data-changed\", this.rowDataChanged.bind(this), 10);\r\n\t\t\tthis.subscribe(\"column-moving-rows\", this.columnMoving.bind(this));\r\n\r\n\t\t\tthis.registerDisplayHandler(this.getRows.bind(this), 30);\r\n\t\t}\r\n\t}\r\n\r\n\tgetRowChildren(row){\r\n\t\treturn this.getTreeChildren(row, true);\r\n\t}\r\n\r\n\tcolumnMoving(){\r\n\t\tvar rows = [];\r\n\r\n\t\tthis.table.rowManager.rows.forEach((row) => {\r\n\t\t\trows = rows.concat(this.getTreeChildren(row, false, true));\r\n\t\t});\r\n\r\n\t\treturn rows;\r\n\t}\r\n\r\n\trowDataChanged(row, visible, updatedData){\r\n\t\tif(this.redrawNeeded(updatedData)){\r\n\t\t\tthis.initializeRow(row);\r\n\r\n\t\t\tif(visible){\r\n\t\t\t\tthis.layoutRow(row);\r\n\t\t\t\tthis.refreshData(true);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tinitializeRow(row){\r\n\t\tvar childArray = row.getData()[this.field];\r\n\t\tvar isArray = Array.isArray(childArray);\r\n\r\n\t\tvar children = isArray || (!isArray && typeof childArray === \"object\" && childArray !== null);\r\n\r\n\t\tif(!children && row.modules.dataTree && row.modules.dataTree.branchEl){\r\n\t\t\trow.modules.dataTree.branchEl.parentNode.removeChild(row.modules.dataTree.branchEl);\r\n\t\t}\r\n\r\n\t\tif(!children && row.modules.dataTree && row.modules.dataTree.controlEl){\r\n\t\t\trow.modules.dataTree.controlEl.parentNode.removeChild(row.modules.dataTree.controlEl);\r\n\t\t}\r\n\r\n\t\trow.modules.dataTree = {\r\n\t\t\tindex: row.modules.dataTree ? row.modules.dataTree.index : 0,\r\n\t\t\topen: children ? (row.modules.dataTree ? row.modules.dataTree.open : this.startOpen(row.getComponent(), 0)) : false,\r\n\t\t\tcontrolEl: row.modules.dataTree && children ? row.modules.dataTree.controlEl : false,\r\n\t\t\tbranchEl: row.modules.dataTree && children ? row.modules.dataTree.branchEl : false,\r\n\t\t\tparent: row.modules.dataTree ? row.modules.dataTree.parent : false,\r\n\t\t\tchildren:children,\r\n\t\t};\r\n\t}\r\n\r\n\treinitializeRowChildren(row){\r\n\t\tvar children = this.getTreeChildren(row, false, true);\r\n\r\n\t\tchildren.forEach(function(child){\r\n\t\t\tchild.reinitialize(true);\r\n\t\t});\r\n\t}\r\n\r\n\tlayoutRow(row){\r\n\t\tvar cell = this.elementField ? row.getCell(this.elementField) : row.getCells()[0],\r\n\t\tel = cell.getElement(),\r\n\t\tconfig = row.modules.dataTree;\r\n\r\n\t\tif(config.branchEl){\r\n\t\t\tif(config.branchEl.parentNode){\r\n\t\t\t\tconfig.branchEl.parentNode.removeChild(config.branchEl);\r\n\t\t\t}\r\n\t\t\tconfig.branchEl = false;\r\n\t\t}\r\n\r\n\t\tif(config.controlEl){\r\n\t\t\tif(config.controlEl.parentNode){\r\n\t\t\t\tconfig.controlEl.parentNode.removeChild(config.controlEl);\r\n\t\t\t}\r\n\t\t\tconfig.controlEl = false;\r\n\t\t}\r\n\r\n\t\tthis.generateControlElement(row, el);\r\n\r\n\t\trow.getElement().classList.add(\"tabulator-tree-level-\" + config.index);\r\n\r\n\t\tif(config.index){\r\n\t\t\tif(this.branchEl){\r\n\t\t\t\tconfig.branchEl = this.branchEl.cloneNode(true);\r\n\t\t\t\tel.insertBefore(config.branchEl, el.firstChild);\r\n\r\n\t\t\t\tif(this.table.rtl){\r\n\t\t\t\t\tconfig.branchEl.style.marginRight = (((config.branchEl.offsetWidth + config.branchEl.style.marginLeft) * (config.index - 1)) + (config.index * this.indent)) + \"px\";\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconfig.branchEl.style.marginLeft = (((config.branchEl.offsetWidth + config.branchEl.style.marginRight) * (config.index - 1)) + (config.index * this.indent)) + \"px\";\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\r\n\t\t\t\tif(this.table.rtl){\r\n\t\t\t\t\tel.style.paddingRight = parseInt(window.getComputedStyle(el, null).getPropertyValue('padding-right')) + (config.index * this.indent) + \"px\";\r\n\t\t\t\t}else{\r\n\t\t\t\t\tel.style.paddingLeft = parseInt(window.getComputedStyle(el, null).getPropertyValue('padding-left')) + (config.index * this.indent) + \"px\";\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tgenerateControlElement(row, el){\r\n\t\tvar config = row.modules.dataTree,\r\n\t\tel = el || row.getCells()[0].getElement(),\r\n\t\toldControl = config.controlEl;\r\n\r\n\t\tif(config.children !== false){\r\n\r\n\t\t\tif(config.open){\r\n\t\t\t\tconfig.controlEl = this.collapseEl.cloneNode(true);\r\n\t\t\t\tconfig.controlEl.addEventListener(\"click\", (e) => {\r\n\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\tthis.collapseRow(row);\r\n\t\t\t\t});\r\n\t\t\t}else{\r\n\t\t\t\tconfig.controlEl = this.expandEl.cloneNode(true);\r\n\t\t\t\tconfig.controlEl.addEventListener(\"click\", (e) => {\r\n\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\tthis.expandRow(row);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\tconfig.controlEl.addEventListener(\"mousedown\", (e) => {\r\n\t\t\t\te.stopPropagation();\r\n\t\t\t});\r\n\r\n\t\t\tif(oldControl && oldControl.parentNode === el){\r\n\t\t\t\toldControl.parentNode.replaceChild(config.controlEl,oldControl);\r\n\t\t\t}else{\r\n\t\t\t\tel.insertBefore(config.controlEl, el.firstChild);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tsetDisplayIndex (index) {\r\n\t\tthis.displayIndex = index;\r\n\t}\r\n\r\n\tgetDisplayIndex () {\r\n\t\treturn this.displayIndex;\r\n\t}\r\n\r\n\tgetRows(rows){\r\n\t\tvar output = [];\r\n\r\n\t\trows.forEach((row, i) => {\r\n\t\t\tvar config, children;\r\n\r\n\t\t\toutput.push(row);\r\n\r\n\t\t\tif(row instanceof Row){\r\n\r\n\t\t\t\trow.create();\r\n\r\n\t\t\t\tconfig = row.modules.dataTree.children;\r\n\r\n\t\t\t\tif(!config.index && config.children !== false){\r\n\t\t\t\t\tchildren = this.getChildren(row);\r\n\r\n\t\t\t\t\tchildren.forEach((child) => {\r\n\t\t\t\t\t\tchild.create();\r\n\t\t\t\t\t\toutput.push(child);\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tgetChildren(row, allChildren){\r\n\t\tvar config = row.modules.dataTree,\r\n\t\tchildren = [],\r\n\t\toutput = [];\r\n\r\n\t\tif(config.children !== false && (config.open || allChildren)){\r\n\t\t\tif(!Array.isArray(config.children)){\r\n\t\t\t\tconfig.children = this.generateChildren(row);\r\n\t\t\t}\r\n\r\n\t\t\tif(this.table.modExists(\"filter\") && this.table.options.dataTreeFilter){\r\n\t\t\t\tchildren = this.table.modules.filter.filter(config.children);\r\n\t\t\t}else{\r\n\t\t\t\tchildren = config.children;\r\n\t\t\t}\r\n\r\n\t\t\tif(this.table.modExists(\"sort\") && this.table.options.dataTreeSort){\r\n\t\t\t\tthis.table.modules.sort.sort(children);\r\n\t\t\t}\r\n\r\n\t\t\tchildren.forEach((child) => {\r\n\t\t\t\toutput.push(child);\r\n\r\n\t\t\t\tvar subChildren = this.getChildren(child);\r\n\r\n\t\t\t\tsubChildren.forEach((sub) => {\r\n\t\t\t\t\toutput.push(sub);\r\n\t\t\t\t});\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tgenerateChildren(row){\r\n\t\tvar children = [];\r\n\r\n\t\tvar childArray = row.getData()[this.field];\r\n\r\n\t\tif(!Array.isArray(childArray)){\r\n\t\t\tchildArray = [childArray];\r\n\t\t}\r\n\r\n\t\tchildArray.forEach((childData) => {\r\n\t\t\tvar childRow = new Row(childData || {}, this.table.rowManager);\r\n\r\n\t\t\tchildRow.create();\r\n\r\n\t\t\tchildRow.modules.dataTree.index = row.modules.dataTree.index + 1;\r\n\t\t\tchildRow.modules.dataTree.parent = row;\r\n\r\n\t\t\tif(childRow.modules.dataTree.children){\r\n\t\t\t\tchildRow.modules.dataTree.open = this.startOpen(childRow.getComponent(), childRow.modules.dataTree.index);\r\n\t\t\t}\r\n\t\t\tchildren.push(childRow);\r\n\t\t});\r\n\r\n\t\treturn children;\r\n\t}\r\n\r\n\texpandRow(row, silent){\r\n\t\tvar config = row.modules.dataTree;\r\n\r\n\t\tif(config.children !== false){\r\n\t\t\tconfig.open = true;\r\n\r\n\t\t\trow.reinitialize();\r\n\r\n\t\t\tthis.refreshData(true);\r\n\r\n\t\t\tthis.dispatchExternal(\"dataTreeRowExpanded\", row.getComponent(), row.modules.dataTree.index);\r\n\t\t}\r\n\t}\r\n\r\n\tcollapseRow(row){\r\n\t\tvar config = row.modules.dataTree;\r\n\r\n\t\tif(config.children !== false){\r\n\t\t\tconfig.open = false;\r\n\r\n\t\t\trow.reinitialize();\r\n\r\n\t\t\tthis.refreshData(true);\r\n\r\n\t\t\tthis.dispatchExternal(\"dataTreeRowCollapsed\", getComponent(), row.modules.dataTree.index);\r\n\t\t}\r\n\t}\r\n\r\n\ttoggleRow(row){\r\n\t\tvar config = row.modules.dataTree;\r\n\r\n\t\tif(config.children !== false){\r\n\t\t\tif(config.open){\r\n\t\t\t\tthis.collapseRow(row);\r\n\t\t\t}else{\r\n\t\t\t\tthis.expandRow(row);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tgetTreeParent(row){\r\n\t\treturn row.modules.dataTree.parent ? row.modules.dataTree.parent.getComponent() : false;\r\n\t}\r\n\r\n\tgetFilteredTreeChildren(row){\r\n\t\tvar config = row.modules.dataTree,\r\n\t\toutput = [], children;\r\n\r\n\t\tif(config.children){\r\n\r\n\t\t\tif(!Array.isArray(config.children)){\r\n\t\t\t\tconfig.children = this.generateChildren(row);\r\n\t\t\t}\r\n\r\n\t\t\tif(this.table.modExists(\"filter\") && this.table.options.dataTreeFilter){\r\n\t\t\t\tchildren = this.table.modules.filter.filter(config.children);\r\n\t\t\t}else{\r\n\t\t\t\tchildren = config.children;\r\n\t\t\t}\r\n\r\n\t\t\tchildren.forEach((childRow) => {\r\n\t\t\t\tif(childRow instanceof Row){\r\n\t\t\t\t\toutput.push(childRow);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\trowDelete(row){\r\n\t\tvar parent = row.modules.dataTree.parent,\r\n\t\tchildIndex;\r\n\r\n\t\tif(parent){\r\n\t\t\tchildIndex = this.findChildIndex(row, parent);\r\n\r\n\t\t\tif(childIndex !== false){\r\n\t\t\t\tparent.data[this.field].splice(childIndex, 1);\r\n\t\t\t}\r\n\r\n\t\t\tif(!parent.data[this.field].length){\r\n\t\t\t\tdelete parent.data[this.field];\r\n\t\t\t}\r\n\r\n\t\t\tthis.initializeRow(parent);\r\n\t\t\tthis.layoutRow(parent);\r\n\t\t}\r\n\r\n\t\tthis.refreshData(true);\r\n\t}\r\n\r\n\taddTreeChildRow(row, data, top, index){\r\n\t\tvar childIndex = false;\r\n\r\n\t\tif(typeof data === \"string\"){\r\n\t\t\tdata = JSON.parse(data);\r\n\t\t}\r\n\r\n\t\tif(!Array.isArray(row.data[this.field])){\r\n\t\t\trow.data[this.field] = [];\r\n\r\n\t\t\trow.modules.dataTree.open = this.startOpen(row.getComponent(), row.modules.dataTree.index);\r\n\t\t}\r\n\r\n\t\tif(typeof index !== \"undefined\"){\r\n\t\t\tchildIndex = this.findChildIndex(index, row);\r\n\r\n\t\t\tif(childIndex !== false){\r\n\t\t\t\trow.data[this.field].splice((top ? childIndex : childIndex + 1), 0, data);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(childIndex === false){\r\n\t\t\tif(top){\r\n\t\t\t\trow.data[this.field].unshift(data);\r\n\t\t\t}else{\r\n\t\t\t\trow.data[this.field].push(data);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.initializeRow(row);\r\n\t\tthis.layoutRow(row);\r\n\r\n\t\tthis.refreshData(true);\r\n\t}\r\n\r\n\tfindChildIndex(subject, parent){\r\n\t\tvar match = false;\r\n\r\n\t\tif(typeof subject == \"object\"){\r\n\r\n\t\t\tif(subject instanceof Row){\r\n\t\t\t\t//subject is row element\r\n\t\t\t\tmatch = subject.data;\r\n\t\t\t}else if(subject instanceof RowComponent){\r\n\t\t\t\t//subject is public row component\r\n\t\t\t\tmatch = subject._getSelf().data;\r\n\t\t\t}else if(typeof HTMLElement !== \"undefined\" && subject instanceof HTMLElement){\r\n\t\t\t\tif(parent.modules.dataTree){\r\n\t\t\t\t\tmatch = parent.modules.dataTree.children.find((childRow) => {\r\n\t\t\t\t\t\treturn childRow instanceof Row ? childRow.element === subject : false;\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\tif(match){\r\n\t\t\t\t\t\tmatch = match.data;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t}else if(typeof subject == \"undefined\" || subject === null){\r\n\t\t\tmatch = false\r\n\t\t}else{\r\n\t\t\t//subject should be treated as the index of the row\r\n\t\t\tmatch = parent.data[this.field].find((row) => {\r\n\t\t\t\treturn row.data[this.table.options.index] == subject;\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif(match){\r\n\r\n\t\t\tif(Array.isArray(parent.data[this.field])){\r\n\t\t\t\tmatch = parent.data[this.field].indexOf(match);\r\n\t\t\t}\r\n\r\n\t\t\tif(match == -1){\r\n\t\t\t\tmatch = false;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//catch all for any other type of input\r\n\r\n\t\treturn match;\r\n\t}\r\n\r\n\tgetTreeChildren(row, component, recurse){\r\n\t\tvar config = row.modules.dataTree,\r\n\t\toutput = [];\r\n\r\n\t\tif(config.children){\r\n\r\n\t\t\tif(!Array.isArray(config.children)){\r\n\t\t\t\tconfig.children = this.generateChildren(row);\r\n\t\t\t}\r\n\r\n\t\t\tconfig.children.forEach((childRow) => {\r\n\t\t\t\tif(childRow instanceof Row){\r\n\t\t\t\t\toutput.push(component ? childRow.getComponent() : childRow);\r\n\r\n\t\t\t\t\tif(recurse){\r\n\t\t\t\t\t\toutput = output.concat(this.getTreeChildren(childRow, component, recurse));\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tcheckForRestyle(cell){\r\n\t\tif(!cell.row.cells.indexOf(cell)){\r\n\t\t\tcell.row.reinitialize();\r\n\t\t}\r\n\t}\r\n\r\n\tgetChildField(){\r\n\t\treturn this.field;\r\n\t}\r\n\r\n\tredrawNeeded(data){\r\n\t\treturn (this.field ? typeof data[this.field] !== \"undefined\" : false) || (this.elementField ? typeof data[this.elementField] !== \"undefined\" : false);\r\n\t}\r\n}\r\n\r\nDataTree.moduleName = \"dataTree\";\r\n\r\nexport default DataTree;","export default function(list, options, setFileContents){\r\n\tvar delimiter = options && options.delimiter ? options.delimiter : \",\",\r\n\tfileContents = [],\r\n\theaders = [];\r\n\r\n\tlist.forEach((row) => {\r\n\t\tvar item = [];\r\n\r\n\t\tswitch(row.type){\r\n\t\t\tcase \"group\":\r\n\t\t\tconsole.warn(\"Download Warning - CSV downloader cannot process row groups\");\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"calc\":\r\n\t\t\tconsole.warn(\"Download Warning - CSV downloader cannot process column calculations\");\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"header\":\r\n\t\t\trow.columns.forEach((col, i) => {\r\n\t\t\t\tif(col && col.depth === 1){\r\n\t\t\t\t\theaders[i] = typeof col.value == \"undefined\" || col.value === null ? \"\" : ('\"' + String(col.value).split('\"').join('\"\"') + '\"');\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"row\":\r\n\t\t\trow.columns.forEach((col) => {\r\n\r\n\t\t\t\tif(col){\r\n\r\n\t\t\t\t\tswitch(typeof col.value){\r\n\t\t\t\t\t\tcase \"object\":\r\n\t\t\t\t\t\tcol.value = JSON.stringify(col.value);\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\tcase \"undefined\":\r\n\t\t\t\t\t\tcase \"null\":\r\n\t\t\t\t\t\tcol.value = \"\";\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\titem.push('\"' + String(col.value).split('\"').join('\"\"') + '\"');\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tfileContents.push(item.join(delimiter));\r\n\t\t\tbreak;\r\n\t\t}\r\n\t});\r\n\r\n\tif(headers.length){\r\n\t\tfileContents.unshift(headers.join(delimiter));\r\n\t}\r\n\r\n\tfileContents = fileContents.join(\"\\n\");\r\n\r\n\tif(options.bom){\r\n\t\tfileContents = \"\\ufeff\" + fileContents;\r\n\t}\r\n\r\n\tsetFileContents(fileContents, \"text/csv\");\r\n};","import csv from './downloaders/csv.js';\r\nimport json from './downloaders/json.js';\r\nimport pdf from './downloaders/pdf.js';\r\nimport xlsx from './downloaders/xlsx.js';\r\nimport html from './downloaders/html.js';\r\n\r\nexport default {\r\n\tcsv:csv,\r\n\tjson:json,\r\n\tpdf:pdf,\r\n\txlsx:xlsx,\r\n\thtml:html,\r\n};","export default function(list, options, setFileContents){\r\n\tvar fileContents = [];\r\n\r\n\tlist.forEach((row) => {\r\n\t\tvar item = {};\r\n\r\n\t\tswitch(row.type){\r\n\t\t\tcase \"header\":\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"group\":\r\n\t\t\tconsole.warn(\"Download Warning - JSON downloader cannot process row groups\");\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"calc\":\r\n\t\t\tconsole.warn(\"Download Warning - JSON downloader cannot process column calculations\");\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"row\":\r\n\t\t\trow.columns.forEach((col) => {\r\n\t\t\t\tif(col){\r\n\t\t\t\t\titem[col.component.getField()] = col.value;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tfileContents.push(item);\r\n\t\t\tbreak;\r\n\t\t}\r\n\t});\r\n\r\n\tfileContents = JSON.stringify(fileContents, null, '\\t');\r\n\r\n\tsetFileContents(fileContents, \"application/json\");\r\n};","export default function(list, options, setFileContents){\r\n\tvar header = [],\r\n\tbody = [],\r\n\tautoTableParams = {},\r\n\trowGroupStyles = options.rowGroupStyles || {\r\n\t\tfontStyle: \"bold\",\r\n\t\tfontSize: 12,\r\n\t\tcellPadding: 6,\r\n\t\tfillColor: 220,\r\n\t},\r\n\trowCalcStyles = options.rowCalcStyles || {\r\n\t\tfontStyle: \"bold\",\r\n\t\tfontSize: 10,\r\n\t\tcellPadding: 4,\r\n\t\tfillColor: 232,\r\n\t},\r\n\tjsPDFParams = options.jsPDF || {},\r\n\ttitle = options && options.title ? options.title : \"\";\r\n\r\n\tif(!jsPDFParams.orientation){\r\n\t\tjsPDFParams.orientation = options.orientation || \"landscape\";\r\n\t}\r\n\r\n\tif(!jsPDFParams.unit){\r\n\t\tjsPDFParams.unit = \"pt\";\r\n\t}\r\n\r\n\t//parse row list\r\n\tlist.forEach((row) => {\r\n\t\tvar item = {};\r\n\r\n\t\tswitch(row.type){\r\n\t\t\tcase \"header\":\r\n\t\t\theader.push(parseRow(row));\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"group\":\r\n\t\t\tbody.push(parseRow(row, rowGroupStyles));\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"calc\":\r\n\t\t\tbody.push(parseRow(row, rowCalcStyles));\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"row\":\r\n\t\t\tbody.push(parseRow(row));\r\n\t\t\tbreak;\r\n\t\t}\r\n\t});\r\n\r\n\tfunction parseRow(row, styles){\r\n\t\tvar rowData = [];\r\n\r\n\t\trow.columns.forEach((col) =>{\r\n\t\t\tvar cell;\r\n\r\n\t\t\tif(col){\r\n\t\t\t\tswitch(typeof col.value){\r\n\t\t\t\t\tcase \"object\":\r\n\t\t\t\t\tcol.value = JSON.stringify(col.value);\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase \"undefined\":\r\n\t\t\t\t\tcase \"null\":\r\n\t\t\t\t\tcol.value = \"\";\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tcell = {\r\n\t\t\t\t\tcontent:col.value,\r\n\t\t\t\t\tcolSpan:col.width,\r\n\t\t\t\t\trowSpan:col.height,\r\n\t\t\t\t};\r\n\r\n\t\t\t\tif(styles){\r\n\t\t\t\t\tcell.styles = styles;\r\n\t\t\t\t}\r\n\r\n\t\t\t\trowData.push(cell);\r\n\t\t\t}else{\r\n\t\t\t\trowData.push(\"\");\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn rowData;\r\n\t}\r\n\r\n\r\n\t//configure PDF\r\n\tvar doc = new jsPDF(jsPDFParams); //set document to landscape, better for most tables\r\n\r\n\tif(options && options.autoTable){\r\n\t\tif(typeof options.autoTable === \"function\"){\r\n\t\t\tautoTableParams = options.autoTable(doc) || {};\r\n\t\t}else{\r\n\t\t\tautoTableParams = options.autoTable;\r\n\t\t}\r\n\t}\r\n\r\n\tif(title){\r\n\t\tautoTableParams.addPageContent = function(data) {\r\n\t\t\tdoc.text(title, 40, 30);\r\n\t\t};\r\n\t}\r\n\r\n\tautoTableParams.head = header;\r\n\tautoTableParams.body = body;\r\n\r\n\tdoc.autoTable(autoTableParams);\r\n\r\n\tif(options && options.documentProcessing){\r\n\t\toptions.documentProcessing(doc);\r\n\t}\r\n\r\n\tsetFileContents(doc.output(\"arraybuffer\"), \"application/pdf\");\r\n};","import CoreFeature from '../../../../core/CoreFeature.js';\r\n\r\nexport default function(list, options, setFileContents){\r\n\tvar self = this,\r\n\tsheetName = options.sheetName || \"Sheet1\",\r\n\tworkbook = XLSX.utils.book_new(),\r\n\ttableFeatures = new CoreFeature(this);\r\n\toutput;\r\n\r\n\tworkbook.SheetNames = [];\r\n\tworkbook.Sheets = {};\r\n\r\n\tfunction generateSheet(){\r\n\t\tvar rows = [],\r\n\t\tmerges = [],\r\n\t\tworksheet = {},\r\n\t\trange = {s: {c:0, r:0}, e: {c:(list[0] ? list[0].columns.reduce((a, b) => a + (b && b.width ? b.width : 1), 0) : 0), r:list.length }};\r\n\r\n\t\t//parse row list\r\n\t\tlist.forEach((row, i) => {\r\n\t\t\tvar rowData = [];\r\n\r\n\t\t\trow.columns.forEach(function(col, j){\r\n\r\n\t\t\t\tif(col){\r\n\t\t\t\t\trowData.push(!(col.value instanceof Date) && typeof col.value === \"object\" ? JSON.stringify(col.value) : col.value);\r\n\r\n\t\t\t\t\tif(col.width > 1 || col.height > -1){\r\n\t\t\t\t\t\tmerges.push({s:{r:i,c:j},e:{r:i + col.height - 1,c:j + col.width - 1}});\r\n\t\t\t\t\t}\r\n\t\t\t\t}else{\r\n\t\t\t\t\trowData.push(\"\");\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\trows.push(rowData);\r\n\t\t});\r\n\r\n\r\n\t\t//convert rows to worksheet\r\n\t\tXLSX.utils.sheet_add_aoa(worksheet, rows);\r\n\r\n\t\tworksheet['!ref'] = XLSX.utils.encode_range(range);\r\n\r\n\t\tif(merges.length){\r\n\t\t\tworksheet[\"!merges\"] = merges;\r\n\t\t}\r\n\r\n\t\treturn worksheet;\r\n\t}\r\n\r\n\tif(options.sheetOnly){\r\n\t\tsetFileContents(generateSheet());\r\n\t\treturn;\r\n\t}\r\n\r\n\tif(options.sheets){\r\n\t\tfor(var sheet in options.sheets){\r\n\r\n\t\t\tif(options.sheets[sheet] === true){\r\n\t\t\t\tworkbook.SheetNames.push(sheet);\r\n\t\t\t\tworkbook.Sheets[sheet] = generateSheet();\r\n\t\t\t}else{\r\n\r\n\t\t\t\tworkbook.SheetNames.push(sheet);\r\n\r\n\t\t\t\ttableFeatures.commsSend(options.sheets[sheet], \"download\", \"intercept\",{\r\n\t\t\t\t\ttype:\"xlsx\",\r\n\t\t\t\t\toptions:{sheetOnly:true},\r\n\t\t\t\t\tactive:self.active,\r\n\t\t\t\t\tintercept:function(data){\r\n\t\t\t\t\t\tworkbook.Sheets[sheet] = data;\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\t}else{\r\n\t\tworkbook.SheetNames.push(sheetName);\r\n\t\tworkbook.Sheets[sheetName] = generateSheet();\r\n\t}\r\n\r\n\tif(options.documentProcessing){\r\n\t\tworkbook = options.documentProcessing(workbook);\r\n\t}\r\n\r\n\t//convert workbook to binary array\r\n\tfunction s2ab(s) {\r\n\t\tvar buf = new ArrayBuffer(s.length);\r\n\t\tvar view = new Uint8Array(buf);\r\n\t\tfor (var i=0; i!=s.length; ++i) view[i] = s.charCodeAt(i) & 0xFF;\r\n\t\t\treturn buf;\r\n\t}\r\n\r\n\toutput = XLSX.write(workbook, {bookType:'xlsx', bookSST:true, type: 'binary'});\r\n\r\n\tsetFileContents(s2ab(output), \"application/octet-stream\");\r\n};","export default function(list, options, setFileContents){\r\n\tif(this.modExists(\"export\", true)){\r\n\t\tsetFileContents(this.modules.export.genereateHTMLTable(list), \"text/html\");\r\n\t}\r\n};","import Module from '../../core/Module.js';\r\n\r\nimport defaultDownloaders from './defaults/downloaders.js';\r\n\r\nclass Download extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.registerTableOption(\"downloadReady\", function(data, blob){return blob;}); //function to manipulate download data\r\n\t\tthis.registerTableOption(\"downloadConfig\", {}); //download config\r\n\t\tthis.registerTableOption(\"downloadRowRange\", \"active\"); //restrict download to active rows only\r\n\r\n\t\tthis.registerColumnOption(\"download\");\r\n\t\tthis.registerColumnOption(\"titleDownload\");\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tthis.registerTableFunction(\"download\", this.download.bind(this));\r\n\t\tthis.registerTableFunction(\"downloadToTab\", this.downloadToTab.bind(this));\r\n\t}\r\n\r\n\t///////////////////////////////////\r\n\t///////// Table Functions /////////\r\n\t///////////////////////////////////\r\n\r\n\tdownloadToTab(type, filename, options, active){\r\n\t\tthis.download(type, filename, options, active, true);\r\n\t}\r\n\r\n\r\n\t///////////////////////////////////\r\n\t///////// Internal Logic //////////\r\n\t///////////////////////////////////\r\n\r\n\t//trigger file download\r\n\tdownload(type, filename, options, range, interceptCallback){\r\n\t\tvar downloadFunc = false;\r\n\r\n\t\tfunction buildLink(data, mime){\r\n\t\t\tif(interceptCallback){\r\n\t\t\t\tif(interceptCallback === true){\r\n\t\t\t\t\tthis.triggerDownload(data, mime, type, filename, true);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tinterceptCallback(data);\r\n\t\t\t\t}\r\n\r\n\t\t\t}else{\r\n\t\t\t\tthis.triggerDownload(data, mime, type, filename);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(typeof type == \"function\"){\r\n\t\t\tdownloadFunc = type;\r\n\t\t}else{\r\n\t\t\tif(Download.downloaders[type]){\r\n\t\t\t\tdownloadFunc = Download.downloaders[type];\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Download Error - No such download type found: \", type);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(downloadFunc){\r\n\t\t\tvar list = this.generateExportList(range);\r\n\r\n\t\t\tdownloadFunc.call(this.table, list , options || {}, buildLink);\r\n\t\t}\r\n\t}\r\n\r\n\tgenerateExportList(range){\r\n\t\tvar list = this.table.modules.export.generateExportList(this.table.options.downloadConfig, false, range || this.table.options.downloadRowRange, \"download\");\r\n\r\n\t\t//assign group header formatter\r\n\t\tvar groupHeader = this.table.options.groupHeaderDownload;\r\n\r\n\t\tif(groupHeader && !Array.isArray(groupHeader)){\r\n\t\t\tgroupHeader = [groupHeader];\r\n\t\t}\r\n\r\n\t\tlist.forEach((row) => {\r\n\t\t\tvar group;\r\n\r\n\t\t\tif(row.type === \"group\"){\r\n\t\t\t\tgroup = row.columns[0];\r\n\r\n\t\t\t\tif(groupHeader && groupHeader[row.indent]){\r\n\t\t\t\t\tgroup.value = groupHeader[row.indent](group.value, row.component._group.getRowCount(), row.component._group.getData(), row.component);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn list;\r\n\t}\r\n\r\n\ttriggerDownload(data, mime, type, filename, newTab){\r\n\t\tvar element = document.createElement('a'),\r\n\t\tblob = new Blob([data],{type:mime}),\r\n\t\tfilename = filename || \"Tabulator.\" + (typeof type === \"function\" ? \"txt\" : type);\r\n\r\n\t\tblob = this.table.options.downloadReady(data, blob);\r\n\r\n\t\tif(blob){\r\n\r\n\t\t\tif(newTab){\r\n\t\t\t\twindow.open(window.URL.createObjectURL(blob));\r\n\t\t\t}else{\r\n\t\t\t\tif(navigator.msSaveOrOpenBlob){\r\n\t\t\t\t\tnavigator.msSaveOrOpenBlob(blob, filename);\r\n\t\t\t\t}else{\r\n\t\t\t\t\telement.setAttribute('href', window.URL.createObjectURL(blob));\r\n\r\n\t\t\t\t\t//set file title\r\n\t\t\t\t\telement.setAttribute('download', filename);\r\n\r\n\t\t\t\t\t//trigger download\r\n\t\t\t\t\telement.style.display = 'none';\r\n\t\t\t\t\tdocument.body.appendChild(element);\r\n\t\t\t\t\telement.click();\r\n\r\n\t\t\t\t\t//remove temporary link element\r\n\t\t\t\t\tdocument.body.removeChild(element);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tthis.dispatchExternal(\"downloadComplete\");\r\n\t\t}\r\n\t}\r\n\r\n\tcommsReceived(table, action, data){\r\n\t\tswitch(action){\r\n\t\t\tcase \"intercept\":\r\n\t\t\tthis.download(data.type, \"\", data.options, data.active, data.intercept);\r\n\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n}\r\n\r\nDownload.moduleName = \"download\";\r\n\r\n//load defaults\r\nDownload.downloaders = defaultDownloaders;\r\n\r\nexport default Download;","export default function maskInput(el, options){\r\n\tvar mask = options.mask,\r\n\tmaskLetter = typeof options.maskLetterChar !== \"undefined\" ? options.maskLetterChar : \"A\",\r\n\tmaskNumber = typeof options.maskNumberChar !== \"undefined\" ? options.maskNumberChar : \"9\",\r\n\tmaskWildcard = typeof options.maskWildcardChar !== \"undefined\" ? options.maskWildcardChar : \"*\",\r\n\tsuccess = false;\r\n\r\n\tfunction fillSymbols(index){\r\n\t\tvar symbol = mask[index];\r\n\t\tif(typeof symbol !== \"undefined\" && symbol !== maskWildcard && symbol !== maskLetter && symbol !== maskNumber){\r\n\t\t\tel.value = el.value + \"\" + symbol;\r\n\t\t\tfillSymbols(index+1);\r\n\t\t}\r\n\t}\r\n\r\n\tel.addEventListener(\"keydown\", (e) => {\r\n\t\tvar index = el.value.length,\r\n\t\tchar = e.key;\r\n\r\n\t\tif(e.keyCode > 46){\r\n\t\t\tif(index >= mask.length){\r\n\t\t\t\te.preventDefault();\r\n\t\t\t\te.stopPropagation();\r\n\t\t\t\tsuccess = false;\r\n\t\t\t\treturn false;\r\n\t\t\t}else{\r\n\t\t\t\tswitch(mask[index]){\r\n\t\t\t\t\tcase maskLetter:\r\n\t\t\t\t\tif(char.toUpperCase() == char.toLowerCase()){\r\n\t\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\t\tsuccess = false;\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase maskNumber:\r\n\t\t\t\t\tif(isNaN(char)){\r\n\t\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\t\tsuccess = false;\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase maskWildcard:\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tdefault:\r\n\t\t\t\t\tif(char !== mask[index]){\r\n\t\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\t\tsuccess = false;\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tsuccess = true;\r\n\t\t}\r\n\r\n\t\treturn;\r\n\t});\r\n\r\n\tel.addEventListener(\"keyup\", (e) => {\r\n\t\tif(e.keyCode > 46){\r\n\t\t\tif(options.maskAutoFill){\r\n\t\t\t\tfillSymbols(el.value.length);\r\n\t\t\t}\r\n\t\t}\r\n\t});\r\n\r\n\r\n\tif(!el.placeholder){\r\n\t\tel.placeholder = mask;\r\n\t}\r\n\r\n\tif(options.maskAutoFill){\r\n\t\tfillSymbols(el.value.length);\r\n\t}\r\n}","import input from './editors/input.js';\r\nimport textarea from './editors/textarea.js';\r\nimport number from './editors/number.js';\r\nimport range from './editors/range.js';\r\nimport select from './editors/select.js';\r\nimport autocomplete from './editors/autocomplete.js';\r\nimport star from './editors/star.js';\r\nimport progress from './editors/progress.js';\r\nimport tickCross from './editors/tickCross.js';\r\n\r\nexport default {\r\n\tinput:input,\r\n\ttextarea:textarea,\r\n number:number,\r\n range:range,\r\n\tselect:select,\r\n\tautocomplete:autocomplete,\r\n\tstar:star,\r\n\tprogress:progress,\r\n\ttickCross:tickCross,\r\n};","import maskInput from '../../inputMask.js';\r\n\r\n//input element\r\nexport default function(cell, onRendered, success, cancel, editorParams){\r\n\t//create and style input\r\n\tvar cellValue = cell.getValue(),\r\n\tinput = document.createElement(\"input\");\r\n\r\n\tinput.setAttribute(\"type\", editorParams.search ? \"search\" : \"text\");\r\n\r\n\tinput.style.padding = \"4px\";\r\n\tinput.style.width = \"100%\";\r\n\tinput.style.boxSizing = \"border-box\";\r\n\r\n\tif(editorParams.elementAttributes && typeof editorParams.elementAttributes == \"object\"){\r\n\t\tfor (let key in editorParams.elementAttributes){\r\n\t\t\tif(key.charAt(0) == \"+\"){\r\n\t\t\t\tkey = key.slice(1);\r\n\t\t\t\tinput.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\r\n\t\t\t}else{\r\n\t\t\t\tinput.setAttribute(key, editorParams.elementAttributes[key]);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tinput.value = typeof cellValue !== \"undefined\" ? cellValue : \"\";\r\n\r\n\tonRendered(function(){\r\n\t\tinput.focus({preventScroll: true});\r\n\t\tinput.style.height = \"100%\";\r\n\t});\r\n\r\n\tfunction onChange(e){\r\n\t\tif(((cellValue === null || typeof cellValue === \"undefined\") && input.value !== \"\") || input.value !== cellValue){\r\n\t\t\tif(success(input.value)){\r\n\t\t\t\tcellValue = input.value; //persist value if successfully validated incase editor is used as header filter\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tcancel();\r\n\t\t}\r\n\t}\r\n\r\n\t//submit new value on blur or change\r\n\tinput.addEventListener(\"change\", onChange);\r\n\tinput.addEventListener(\"blur\", onChange);\r\n\r\n\t//submit new value on enter\r\n\tinput.addEventListener(\"keydown\", function(e){\r\n\t\tswitch(e.keyCode){\r\n\t\t\t// case 9:\r\n\t\t\tcase 13:\r\n\t\t\tonChange(e);\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 27:\r\n\t\t\tcancel();\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 35:\r\n\t\t\tcase 36:\r\n\t\t\te.stopPropagation();\r\n\t\t\tbreak;\r\n\t\t}\r\n\t});\r\n\r\n\tif(editorParams.mask){\r\n\t\tmaskInput(input, editorParams);\r\n\t}\r\n\r\n\treturn input;\r\n};","import maskInput from '../../inputMask.js';\r\n\r\n//resizable text area element\r\nexport default function(cell, onRendered, success, cancel, editorParams){\r\n var self = this,\r\n cellValue = cell.getValue(),\r\n vertNav = editorParams.verticalNavigation || \"hybrid\",\r\n value = String(cellValue !== null && typeof cellValue !== \"undefined\" ? cellValue : \"\"),\r\n count = (value.match(/(?:\\r\\n|\\r|\\n)/g) || []).length + 1,\r\n input = document.createElement(\"textarea\"),\r\n scrollHeight = 0;\r\n\r\n //create and style input\r\n input.style.display = \"block\";\r\n input.style.padding = \"2px\";\r\n input.style.height = \"100%\";\r\n input.style.width = \"100%\";\r\n input.style.boxSizing = \"border-box\";\r\n input.style.whiteSpace = \"pre-wrap\";\r\n input.style.resize = \"none\";\r\n\r\n if(editorParams.elementAttributes && typeof editorParams.elementAttributes == \"object\"){\r\n for (let key in editorParams.elementAttributes){\r\n if(key.charAt(0) == \"+\"){\r\n key = key.slice(1);\r\n input.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\r\n }else{\r\n input.setAttribute(key, editorParams.elementAttributes[key]);\r\n }\r\n }\r\n }\r\n\r\n input.value = value;\r\n\r\n onRendered(function(){\r\n input.focus({preventScroll: true});\r\n input.style.height = \"100%\";\r\n\r\n input.scrollHeight;\r\n input.style.height = input.scrollHeight + \"px\";\r\n cell.getRow().normalizeHeight();\r\n });\r\n\r\n function onChange(e){\r\n\r\n if(((cellValue === null || typeof cellValue === \"undefined\") && input.value !== \"\") || input.value !== cellValue){\r\n\r\n if(success(input.value)){\r\n cellValue = input.value; //persist value if successfully validated incase editor is used as header filter\r\n }\r\n\r\n setTimeout(function(){\r\n cell.getRow().normalizeHeight();\r\n },300)\r\n }else{\r\n cancel();\r\n }\r\n }\r\n\r\n //submit new value on blur or change\r\n input.addEventListener(\"change\", onChange);\r\n input.addEventListener(\"blur\", onChange);\r\n\r\n input.addEventListener(\"keyup\", function(){\r\n\r\n input.style.height = \"\";\r\n\r\n var heightNow = input.scrollHeight;\r\n\r\n input.style.height = heightNow + \"px\";\r\n\r\n if(heightNow != scrollHeight){\r\n scrollHeight = heightNow;\r\n cell.getRow().normalizeHeight();\r\n }\r\n });\r\n\r\n input.addEventListener(\"keydown\", function(e){\r\n\r\n switch(e.keyCode){\r\n case 27:\r\n cancel();\r\n break;\r\n\r\n case 38: //up arrow\r\n if(vertNav == \"editor\" || (vertNav == \"hybrid\" && input.selectionStart)){\r\n e.stopImmediatePropagation();\r\n e.stopPropagation();\r\n }\r\n\r\n break;\r\n\r\n case 40: //down arrow\r\n if(vertNav == \"editor\" || (vertNav == \"hybrid\" && input.selectionStart !== input.value.length)){\r\n e.stopImmediatePropagation();\r\n e.stopPropagation();\r\n }\r\n break;\r\n\r\n case 35:\r\n case 36:\r\n e.stopPropagation();\r\n break;\r\n }\r\n });\r\n\r\n if(editorParams.mask){\r\n maskInput(input, editorParams);\r\n }\r\n\r\n return input;\r\n};","import maskInput from '../../inputMask.js';\r\n\r\n//input element with type of number\r\nexport default function(cell, onRendered, success, cancel, editorParams){\r\n\tvar cellValue = cell.getValue(),\r\n\tvertNav = editorParams.verticalNavigation || \"editor\",\r\n\tinput = document.createElement(\"input\");\r\n\r\n\tinput.setAttribute(\"type\", \"number\");\r\n\r\n\tif(typeof editorParams.max != \"undefined\"){\r\n\t\tinput.setAttribute(\"max\", editorParams.max);\r\n\t}\r\n\r\n\tif(typeof editorParams.min != \"undefined\"){\r\n\t\tinput.setAttribute(\"min\", editorParams.min);\r\n\t}\r\n\r\n\tif(typeof editorParams.step != \"undefined\"){\r\n\t\tinput.setAttribute(\"step\", editorParams.step);\r\n\t}\r\n\r\n\t//create and style input\r\n\tinput.style.padding = \"4px\";\r\n\tinput.style.width = \"100%\";\r\n\tinput.style.boxSizing = \"border-box\";\r\n\r\n\tif(editorParams.elementAttributes && typeof editorParams.elementAttributes == \"object\"){\r\n\t\tfor (let key in editorParams.elementAttributes){\r\n\t\t\tif(key.charAt(0) == \"+\"){\r\n\t\t\t\tkey = key.slice(1);\r\n\t\t\t\tinput.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\r\n\t\t\t}else{\r\n\t\t\t\tinput.setAttribute(key, editorParams.elementAttributes[key]);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tinput.value = cellValue;\r\n\r\n\tvar blurFunc = function(e){\r\n\t\tonChange();\r\n\t};\r\n\r\n\tonRendered(function () {\r\n\t\t//submit new value on blur\r\n\t\tinput.removeEventListener(\"blur\", blurFunc);\r\n\r\n\t\tinput.focus({preventScroll: true});\r\n\t\tinput.style.height = \"100%\";\r\n\r\n\t\t//submit new value on blur\r\n\t\tinput.addEventListener(\"blur\", blurFunc);\r\n\t});\r\n\r\n\tfunction onChange(){\r\n\t\tvar value = input.value;\r\n\r\n\t\tif(!isNaN(value) && value !==\"\"){\r\n\t\t\tvalue = Number(value);\r\n\t\t}\r\n\r\n\t\tif(value !== cellValue){\r\n\t\t\tif(success(value)){\r\n\t\t\t\tcellValue = value; //persist value if successfully validated incase editor is used as header filter\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tcancel();\r\n\t\t}\r\n\t}\r\n\r\n\t//submit new value on enter\r\n\tinput.addEventListener(\"keydown\", function(e){\r\n\t\tswitch(e.keyCode){\r\n\t\t\tcase 13:\r\n\t\t\t// case 9:\r\n\t\t\tonChange();\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 27:\r\n\t\t\tcancel();\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 38: //up arrow\r\n\t\t\tcase 40: //down arrow\r\n\t\t\tif(vertNav == \"editor\"){\r\n\t\t\t\te.stopImmediatePropagation();\r\n\t\t\t\te.stopPropagation();\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 35:\r\n\t\t\tcase 36:\r\n\t\t\te.stopPropagation();\r\n\t\t\tbreak;\r\n\t\t}\r\n\t});\r\n\r\n\tif(editorParams.mask){\r\n\t\tmaskInput(input, editorParams);\r\n\t}\r\n\r\n\treturn input;\r\n};","//input element with type of number\r\nexport default function(cell, onRendered, success, cancel, editorParams){\r\n\tvar cellValue = cell.getValue(),\r\n\tinput = document.createElement(\"input\");\r\n\r\n\tinput.setAttribute(\"type\", \"range\");\r\n\r\n\tif (typeof editorParams.max != \"undefined\") {\r\n\t\tinput.setAttribute(\"max\", editorParams.max);\r\n\t}\r\n\r\n\tif (typeof editorParams.min != \"undefined\") {\r\n\t\tinput.setAttribute(\"min\", editorParams.min);\r\n\t}\r\n\r\n\tif (typeof editorParams.step != \"undefined\") {\r\n\t\tinput.setAttribute(\"step\", editorParams.step);\r\n\t}\r\n\r\n\t//create and style input\r\n\tinput.style.padding = \"4px\";\r\n\tinput.style.width = \"100%\";\r\n\tinput.style.boxSizing = \"border-box\";\r\n\r\n\tif(editorParams.elementAttributes && typeof editorParams.elementAttributes == \"object\"){\r\n\t\tfor (let key in editorParams.elementAttributes){\r\n\t\t\tif(key.charAt(0) == \"+\"){\r\n\t\t\t\tkey = key.slice(1);\r\n\t\t\t\tinput.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\r\n\t\t\t}else{\r\n\t\t\t\tinput.setAttribute(key, editorParams.elementAttributes[key]);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tinput.value = cellValue;\r\n\r\n\tonRendered(function () {\r\n\t\tinput.focus({preventScroll: true});\r\n\t\tinput.style.height = \"100%\";\r\n\t});\r\n\r\n\tfunction onChange(){\r\n\t\tvar value = input.value;\r\n\r\n\t\tif(!isNaN(value) && value !==\"\"){\r\n\t\t\tvalue = Number(value);\r\n\t\t}\r\n\r\n\t\tif(value != cellValue){\r\n\t\t\tif(success(value)){\r\n\t\t\t\tcellValue = value; //persist value if successfully validated incase editor is used as header filter\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tcancel();\r\n\t\t}\r\n\t}\r\n\r\n\t//submit new value on blur\r\n\tinput.addEventListener(\"blur\", function(e){\r\n\t\tonChange();\r\n\t});\r\n\r\n\t//submit new value on enter\r\n\tinput.addEventListener(\"keydown\", function(e){\r\n\t\tswitch(e.keyCode){\r\n\t\t\tcase 13:\r\n\t\t\t// case 9:\r\n\t\t\tonChange();\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 27:\r\n\t\t\tcancel();\r\n\t\t\tbreak;\r\n\t\t}\r\n\t});\r\n\r\n\treturn input;\r\n};","import Helpers from '../../../../core/tools/Helpers.js';\r\n\r\n//dropdown select editor\r\nexport default function(cell, onRendered, success, cancel, editorParams){\r\n\tvar self = this,\r\n\tcellEl = cell.getElement(),\r\n\tinitialValue = cell.getValue(),\r\n\tvertNav = editorParams.verticalNavigation || \"editor\",\r\n\tinitialDisplayValue = typeof initialValue !== \"undefined\" || initialValue === null ? (Array.isArray(initialValue) ? initialValue : [initialValue]) : (typeof editorParams.defaultValue !== \"undefined\" ? editorParams.defaultValue : []),\r\n\tinput = document.createElement(\"input\"),\r\n\tlistEl = document.createElement(\"div\"),\r\n\tmultiselect = editorParams.multiselect,\r\n\tdataItems = [],\r\n\tcurrentItem = {},\r\n\tdisplayItems = [],\r\n\tcurrentItems = [],\r\n\tblurable = true,\r\n\tblockListShow = false,\r\n\tsearchWord = \"\",\r\n\tsearchWordTimeout = null;\r\n\r\n\tif(Array.isArray(editorParams) || (!Array.isArray(editorParams) && typeof editorParams === \"object\" && !editorParams.values)){\r\n\t\tconsole.warn(\"DEPRECATION WARNING - values for the select editor must now be passed into the values property of the editorParams object, not as the editorParams object\");\r\n\t\teditorParams = {values:editorParams};\r\n\t}\r\n\r\n\tfunction getUniqueColumnValues(field){\r\n\t\tvar output = {},\r\n\t\tdata = self.table.getData(),\r\n\t\tcolumn;\r\n\r\n\t\tif(field){\r\n\t\t\tcolumn = self.table.columnManager.getColumnByField(field);\r\n\t\t}else{\r\n\t\t\tcolumn = cell.getColumn()._getSelf();\r\n\t\t}\r\n\r\n\t\tif(column){\r\n\t\t\tdata.forEach(function(row){\r\n\t\t\t\tvar val = column.getFieldValue(row);\r\n\r\n\t\t\t\tif(val !== null && typeof val !== \"undefined\" && val !== \"\"){\r\n\t\t\t\t\toutput[val] = true;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"unable to find matching column to create select lookup list:\", field);\r\n\t\t}\r\n\r\n\t\treturn Object.keys(output);\r\n\t}\r\n\r\n\tfunction parseItems(inputValues, curentValues){\r\n\t\tvar dataList = [];\r\n\t\tvar displayList = [];\r\n\r\n\t\tfunction processComplexListItem(item){\r\n\t\t\tvar item = {\r\n\t\t\t\tlabel:item.label,\r\n\t\t\t\tvalue:item.value,\r\n\t\t\t\titemParams:item.itemParams,\r\n\t\t\t\telementAttributes: item.elementAttributes,\r\n\t\t\t\telement:false,\r\n\t\t\t};\r\n\r\n\t\t\t// if(item.value === curentValue || (!isNaN(parseFloat(item.value)) && !isNaN(parseFloat(item.value)) && parseFloat(item.value) === parseFloat(curentValue))){\r\n\t\t\t// \tsetCurrentItem(item);\r\n\t\t\t// }\r\n\r\n\t\t\tif(curentValues.indexOf(item.value) > -1){\r\n\t\t\t\tsetItem(item);\r\n\t\t\t}\r\n\r\n\t\t\tdataList.push(item);\r\n\t\t\tdisplayList.push(item);\r\n\r\n\t\t\treturn item;\r\n\t\t}\r\n\r\n\t\tif(typeof inputValues == \"function\"){\r\n\t\t\tinputValues = inputValues(cell);\r\n\t\t}\r\n\r\n\t\tif(Array.isArray(inputValues)){\r\n\t\t\tinputValues.forEach(function(value){\r\n\t\t\t\tvar item;\r\n\r\n\t\t\t\tif(typeof value === \"object\"){\r\n\r\n\t\t\t\t\tif(value.options){\r\n\t\t\t\t\t\titem = {\r\n\t\t\t\t\t\t\tlabel:value.label,\r\n\t\t\t\t\t\t\tgroup:true,\r\n\t\t\t\t\t\t\titemParams:value.itemParams,\r\n\t\t\t\t\t\t\telementAttributes:value.elementAttributes,\r\n\t\t\t\t\t\t\telement:false,\r\n\t\t\t\t\t\t};\r\n\r\n\t\t\t\t\t\tdisplayList.push(item);\r\n\r\n\t\t\t\t\t\tvalue.options.forEach(function(item){\r\n\t\t\t\t\t\t\tprocessComplexListItem(item);\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tprocessComplexListItem(value);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}else{\r\n\r\n\t\t\t\t\titem = {\r\n\t\t\t\t\t\tlabel:value,\r\n\t\t\t\t\t\tvalue:value,\r\n\t\t\t\t\t\telement:false,\r\n\t\t\t\t\t};\r\n\r\n\t\t\t\t\t// if(item.value === curentValue || (!isNaN(parseFloat(item.value)) && !isNaN(parseFloat(item.value)) && parseFloat(item.value) === parseFloat(curentValue))){\r\n\t\t\t\t\t// \tsetCurrentItem(item);\r\n\t\t\t\t\t// }\r\n\r\n\t\t\t\t\tif(curentValues.indexOf(item.value) > -1){\r\n\t\t\t\t\t\tsetItem(item);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tdataList.push(item);\r\n\t\t\t\t\tdisplayList.push(item);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tfor(var key in inputValues){\r\n\t\t\t\tvar item = {\r\n\t\t\t\t\tlabel:inputValues[key],\r\n\t\t\t\t\tvalue:key,\r\n\t\t\t\t\telement:false,\r\n\t\t\t\t};\r\n\r\n\t\t\t\t// if(item.value === curentValue || (!isNaN(parseFloat(item.value)) && !isNaN(parseFloat(item.value)) && parseFloat(item.value) === parseFloat(curentValue))){\r\n\t\t\t\t// \tsetCurrentItem(item);\r\n\t\t\t\t// }\r\n\r\n\t\t\t\tif(curentValues.indexOf(item.value) > -1){\r\n\t\t\t\t\tsetItem(item);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tdataList.push(item);\r\n\t\t\t\tdisplayList.push(item);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(editorParams.sortValuesList){\r\n\t\t\tdataList.sort((a, b) => {\r\n\t\t\t\treturn a.label < b.label ? -1 : (a.label > b.label ? 1 : 0);\r\n\t\t\t});\r\n\r\n\t\t\tdisplayList.sort((a, b) => {\r\n\t\t\t\treturn a.label < b.label ? -1 : (a.label > b.label ? 1 : 0);\r\n\t\t\t});\r\n\r\n\t\t\tif(editorParams.sortValuesList !== \"asc\"){\r\n\t\t\t\tdataList.reverse();\r\n\t\t\t\tdisplayList.reverse();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tdataItems = dataList;\r\n\t\tdisplayItems = displayList;\r\n\r\n\t\tfillList();\r\n\t}\r\n\r\n\tfunction fillList(){\r\n\t\twhile(listEl.firstChild) listEl.removeChild(listEl.firstChild);\r\n\r\n\t\tdisplayItems.forEach(function(item){\r\n\r\n\t\t\tvar el = item.element;\r\n\r\n\t\t\tif(!el){\r\n\t\t\t\tel = document.createElement(\"div\");\r\n\t\t\t\titem.label = editorParams.listItemFormatter ? editorParams.listItemFormatter(item.value, item.label, cell, el, item.itemParams) : item.label;\r\n\t\t\t\tif(item.group){\r\n\t\t\t\t\tel.classList.add(\"tabulator-edit-select-list-group\");\r\n\t\t\t\t\tel.tabIndex = 0;\r\n\t\t\t\t\tel.innerHTML = item.label === \"\" ? \" \" : item.label;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tel.classList.add(\"tabulator-edit-select-list-item\");\r\n\t\t\t\t\tel.tabIndex = 0;\r\n\t\t\t\t\tel.innerHTML = item.label === \"\" ? \" \" : item.label;\r\n\r\n\t\t\t\t\tel.addEventListener(\"click\", function(){\r\n\t\t\t\t\t\tblockListShow = true;\r\n\r\n\t\t\t\t\t\tsetTimeout(() => {\r\n\t\t\t\t\t\t\tblockListShow = false;\r\n\t\t\t\t\t\t}, 10);\r\n\r\n\t\t\t\t\t\t// setCurrentItem(item);\r\n\t\t\t\t\t\t// chooseItem();\r\n\t\t\t\t\t\tif(multiselect){\r\n\t\t\t\t\t\t\ttoggleItem(item);\r\n\t\t\t\t\t\t\tinput.focus();\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\tchooseItem(item);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\t// if(item === currentItem){\r\n\t\t\t\t\t// \tel.classList.add(\"active\");\r\n\t\t\t\t\t// }\r\n\r\n\t\t\t\t\tif(currentItems.indexOf(item) > -1){\r\n\t\t\t\t\t\tel.classList.add(\"active\");\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(item.elementAttributes && typeof item.elementAttributes == \"object\"){\r\n\t\t\t\t\tfor (let key in item.elementAttributes){\r\n\t\t\t\t\t\tif(key.charAt(0) == \"+\"){\r\n\t\t\t\t\t\t\tkey = key.slice(1);\r\n\t\t\t\t\t\t\tel.setAttribute(key, input.getAttribute(key) + item.elementAttributes[\"+\" + key]);\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\tel.setAttribute(key, item.elementAttributes[key]);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tel.addEventListener(\"mousedown\", function(){\r\n\t\t\t\t\tblurable = false;\r\n\r\n\t\t\t\t\tsetTimeout(function(){\r\n\t\t\t\t\t\tblurable = true;\r\n\t\t\t\t\t}, 10);\r\n\t\t\t\t});\r\n\r\n\t\t\t\titem.element = el;\r\n\r\n\r\n\t\t\t}\r\n\r\n\t\t\tlistEl.appendChild(el);\r\n\t\t});\r\n\t}\r\n\r\n\r\n\tfunction setCurrentItem(item, active){\r\n\r\n\t\tif(!multiselect && currentItem && currentItem.element){\r\n\t\t\tcurrentItem.element.classList.remove(\"active\");\r\n\t\t}\r\n\r\n\t\tif(currentItem && currentItem.element){\r\n\t\t\tcurrentItem.element.classList.remove(\"focused\");\r\n\t\t}\r\n\r\n\t\tcurrentItem = item;\r\n\r\n\t\tif(item.element){\r\n\t\t\titem.element.classList.add(\"focused\");\r\n\t\t\tif(active){\r\n\t\t\t\titem.element.classList.add(\"active\");\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(item && item.element && item.element.scrollIntoView){\r\n\t\t\titem.element.scrollIntoView({behavior: 'smooth', block: 'nearest', inline: 'start'});\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t// function chooseItem(){\r\n\t// \thideList();\r\n\r\n\t// \tif(initialValue !== currentItem.value){\r\n\t// \t\tinitialValue = currentItem.value;\r\n\t// \t\tsuccess(currentItem.value);\r\n\t// \t}else{\r\n\t// \t\tcancel();\r\n\t// \t}\r\n\t// }\r\n\r\n\tfunction setItem(item) {\r\n\t\tvar index = currentItems.indexOf(item);\r\n\r\n\t\tif(index == -1){\r\n\t\t\tcurrentItems.push(item);\r\n\t\t\tsetCurrentItem(item, true);\r\n\t\t}\r\n\r\n\t\tfillInput();\r\n\t}\r\n\r\n\tfunction unsetItem(index) {\r\n\t\tvar item = currentItems[index];\r\n\r\n\t\tif(index > -1){\r\n\t\t\tcurrentItems.splice(index, 1);\r\n\t\t\tif(item.element){\r\n\t\t\t\titem.element.classList.remove(\"active\");\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tfunction toggleItem(item) {\r\n\t\tif(!item){\r\n\t\t\titem = currentItem;\r\n\t\t}\r\n\r\n\t\tvar index = currentItems.indexOf(item);\r\n\r\n\t\tif(index > -1){\r\n\t\t\tunsetItem(index);\r\n\t\t}else{\r\n\t\t\tif(multiselect !== true && currentItems.length >= multiselect){\r\n\t\t\t\tunsetItem(0);\r\n\t\t\t}\r\n\r\n\t\t\tsetItem(item);\r\n\t\t}\r\n\r\n\t\tfillInput();\r\n\r\n\t}\r\n\r\n\tfunction chooseItem(item){\r\n\t\thideList();\r\n\r\n\t\tif(!item){\r\n\t\t\titem = currentItem;\r\n\t\t}\r\n\r\n\t\tif(item){\r\n\t\t\tinput.value = item.label;\r\n\t\t\tsuccess(item.value);\r\n\t\t}\r\n\r\n\t\tinitialDisplayValue = [item.value];\r\n\t}\r\n\r\n\r\n\tfunction chooseItems(silent){\r\n\t\tif(!silent){\r\n\t\t\thideList();\r\n\t\t}\r\n\r\n\t\tvar output = [];\r\n\r\n\t\tcurrentItems.forEach((item) => {\r\n\t\t\toutput.push(item.value);\r\n\t\t});\r\n\r\n\t\tinitialDisplayValue = output;\r\n\r\n\t\tsuccess(output);\r\n\t}\r\n\r\n\tfunction fillInput(){\r\n\t\tvar output = [];\r\n\r\n\t\tcurrentItems.forEach((item) => {\r\n\t\t\toutput.push(item.label);\r\n\t\t});\r\n\r\n\t\tinput.value = output.join(\", \");\r\n\r\n\t\tif(self.currentCell === false){\r\n\t\t\tchooseItems(true);\r\n\t\t}\r\n\t}\r\n\r\n\r\n\tfunction unsetItems() {\r\n\r\n\t\tvar len = currentItems.length;\r\n\r\n\t\tfor(let i = 0; i < len; i++){\r\n\t\t\tunsetItem(0);\r\n\t\t}\r\n\t}\r\n\r\n\tfunction cancelItem(){\r\n\t\thideList();\r\n\t\tcancel();\r\n\t}\r\n\r\n\tfunction showList(){\r\n\t\tcurrentItems = [];\r\n\r\n\t\tif(!listEl.parentNode){\r\n\t\t\tif(editorParams.values === true){\r\n\t\t\t\tparseItems(getUniqueColumnValues(), initialDisplayValue);\r\n\t\t\t}else if(typeof editorParams.values === \"string\"){\r\n\t\t\t\tparseItems(getUniqueColumnValues(editorParams.values), initialDisplayValue);\r\n\t\t\t}else{\r\n\t\t\t\tparseItems(editorParams.values || [], initialDisplayValue);\r\n\t\t\t}\r\n\r\n\r\n\t\t\tvar offset = Helpers.elOffset(cellEl);\r\n\r\n\t\t\tlistEl.style.minWidth = cellEl.offsetWidth + \"px\";\r\n\r\n\t\t\tlistEl.style.top = (offset.top + cellEl.offsetHeight) + \"px\";\r\n\t\t\tlistEl.style.left = offset.left + \"px\";\r\n\r\n\r\n\t\t\tlistEl.addEventListener(\"mousedown\", function(e){\r\n\t\t\t\tblurable = false;\r\n\r\n\t\t\t\tsetTimeout(function(){\r\n\t\t\t\t\tblurable = true;\r\n\t\t\t\t}, 10);\r\n\t\t\t});\r\n\r\n\t\t\tdocument.body.appendChild(listEl);\r\n\t\t}\r\n\t}\r\n\r\n\tfunction hideList(){\r\n\t\tif(listEl.parentNode){\r\n\t\t\tlistEl.parentNode.removeChild(listEl);\r\n\t\t}\r\n\r\n\t\tremoveScrollListener();\r\n\t}\r\n\r\n\tfunction removeScrollListener() {\r\n\t\tself.table.rowManager.element.removeEventListener(\"scroll\", cancelItem);\r\n\t}\r\n\r\n\tfunction scrollTovalue(char){\r\n\r\n\t\tclearTimeout(searchWordTimeout);\r\n\r\n\t\tvar character = String.fromCharCode(event.keyCode).toLowerCase();\r\n\t\tsearchWord += character.toLowerCase();\r\n\r\n\t\tvar match = dataItems.find((item) => {\r\n\t\t\treturn typeof item.label !== \"undefined\" && item.label.toLowerCase().startsWith(searchWord);\r\n\t\t});\r\n\r\n\t\tif(match){\r\n\t\t\tsetCurrentItem(match, !multiselect);\r\n\t\t}\r\n\r\n\t\tsearchWordTimeout = setTimeout(() => {\r\n\t\t\tsearchWord = \"\";\r\n\t\t}, 800)\r\n\t}\r\n\r\n\t//style input\r\n\tinput.setAttribute(\"type\", \"text\");\r\n\r\n\tinput.style.padding = \"4px\";\r\n\tinput.style.width = \"100%\";\r\n\tinput.style.boxSizing = \"border-box\";\r\n\tinput.style.cursor = \"default\";\r\n\tinput.readOnly = (this.currentCell != false);\r\n\r\n\tif(editorParams.elementAttributes && typeof editorParams.elementAttributes == \"object\"){\r\n\t\tfor (let key in editorParams.elementAttributes){\r\n\t\t\tif(key.charAt(0) == \"+\"){\r\n\t\t\t\tkey = key.slice(1);\r\n\t\t\t\tinput.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\r\n\t\t\t}else{\r\n\t\t\t\tinput.setAttribute(key, editorParams.elementAttributes[key]);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tinput.value = typeof initialValue !== \"undefined\" || initialValue === null ? initialValue : \"\";\r\n\r\n\t// if(editorParams.values === true){\r\n\t// \tparseItems(getUniqueColumnValues(), initialValue);\r\n\t// }else if(typeof editorParams.values === \"string\"){\r\n\t// \tparseItems(getUniqueColumnValues(editorParams.values), initialValue);\r\n\t// }else{\r\n\t// \tparseItems(editorParams.values || [], initialValue);\r\n\t// }\r\n\r\n\tinput.addEventListener(\"search\", function(e){\r\n\t\tif(!input.value){\r\n\t\t\tunsetItems();\r\n\t\t\tchooseItems();\r\n\t\t}\r\n\t});\r\n\r\n\t//allow key based navigation\r\n\tinput.addEventListener(\"keydown\", function(e){\r\n\t\tvar index;\r\n\r\n\t\tswitch(e.keyCode){\r\n\t\t\tcase 38: //up arrow\r\n\t\t\tindex = dataItems.indexOf(currentItem);\r\n\r\n\t\t\tif(vertNav == \"editor\" || (vertNav == \"hybrid\" && index)){\r\n\t\t\t\te.stopImmediatePropagation();\r\n\t\t\t\te.stopPropagation();\r\n\t\t\t\te.preventDefault();\r\n\r\n\t\t\t\tif(index > 0){\r\n\t\t\t\t\tsetCurrentItem(dataItems[index - 1], !multiselect);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 40: //down arrow\r\n\t\t\tindex = dataItems.indexOf(currentItem);\r\n\r\n\t\t\tif(vertNav == \"editor\" || (vertNav == \"hybrid\" && index < dataItems.length - 1)){\r\n\t\t\t\te.stopImmediatePropagation();\r\n\t\t\t\te.stopPropagation();\r\n\t\t\t\te.preventDefault();\r\n\r\n\t\t\t\tif(index < dataItems.length - 1){\r\n\t\t\t\t\tif(index == -1){\r\n\t\t\t\t\t\tsetCurrentItem(dataItems[0], !multiselect);\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tsetCurrentItem(dataItems[index + 1], !multiselect);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 37: //left arrow\r\n\t\t\tcase 39: //right arrow\r\n\t\t\te.stopImmediatePropagation();\r\n\t\t\te.stopPropagation();\r\n\t\t\te.preventDefault();\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 13: //enter\r\n\t\t\t// chooseItem();\r\n\r\n\t\t\tif(multiselect){\r\n\t\t\t\ttoggleItem();\r\n\t\t\t}else{\r\n\t\t\t\tchooseItem();\r\n\t\t\t}\r\n\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 27: //escape\r\n\t\t\tcancelItem();\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 9: //tab\r\n\t\t\tbreak;\r\n\r\n\t\t\tdefault:\r\n\t\t\tif(self.currentCell === false){\r\n\t\t\t\te.preventDefault();\r\n\t\t\t}\r\n\r\n\t\t\tif(e.keyCode >= 38 && e.keyCode <= 90){\r\n\t\t\t\tscrollTovalue(e.keyCode);\r\n\t\t\t}\r\n\t\t}\r\n\t});\r\n\r\n\tinput.addEventListener(\"blur\", function(e){\r\n\t\tif(blurable){\r\n\t\t\tif(multiselect){\r\n\t\t\t\tchooseItems();\r\n\t\t\t}else{\r\n\t\t\t\tcancelItem();\r\n\t\t\t}\r\n\t\t}\r\n\t});\r\n\r\n\tinput.addEventListener(\"focus\", function(e){\r\n\t\tif(!blockListShow){\r\n\t\t\tshowList();\r\n\t\t}\r\n\t});\r\n\r\n\t//style list element\r\n\tlistEl = document.createElement(\"div\");\r\n\tlistEl.classList.add(\"tabulator-edit-select-list\");\r\n\r\n\tonRendered(function(){\r\n\t\tinput.style.height = \"100%\";\r\n\t\tinput.focus({preventScroll: true});\r\n\t});\r\n\r\n\tsetTimeout(() => {\r\n\t\tthis.table.rowManager.element.addEventListener(\"scroll\", cancelItem);\r\n\t}, 10);\r\n\r\n\treturn input;\r\n};","import Helpers from '../../../../core/tools/Helpers.js';\r\nimport maskInput from '../../inputMask.js';\r\n\r\n//autocomplete\r\nexport default function(cell, onRendered, success, cancel, editorParams){\r\n\tvar self = this,\r\n\tcellEl = cell.getElement(),\r\n\tinitialValue = cell.getValue(),\r\n\tvertNav = editorParams.verticalNavigation || \"editor\",\r\n\tinitialDisplayValue = typeof initialValue !== \"undefined\" || initialValue === null ? initialValue : (typeof editorParams.defaultValue !== \"undefined\" ? editorParams.defaultValue : \"\"),\r\n\tinput = document.createElement(\"input\"),\r\n\tlistEl = document.createElement(\"div\"),\r\n\tallItems = [],\r\n\tdisplayItems = [],\r\n\tvalues = [],\r\n\tcurrentItem = false,\r\n\tblurable = true,\r\n\tuniqueColumnValues = false;\r\n\r\n\t//style input\r\n\tinput.setAttribute(\"type\", \"search\");\r\n\r\n\tinput.style.padding = \"4px\";\r\n\tinput.style.width = \"100%\";\r\n\tinput.style.boxSizing = \"border-box\";\r\n\r\n\tif(editorParams.elementAttributes && typeof editorParams.elementAttributes == \"object\"){\r\n\t\tfor (let key in editorParams.elementAttributes){\r\n\t\t\tif(key.charAt(0) == \"+\"){\r\n\t\t\t\tkey = key.slice(1);\r\n\t\t\t\tinput.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\r\n\t\t\t}else{\r\n\t\t\t\tinput.setAttribute(key, editorParams.elementAttributes[key]);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//style list element\r\n\tlistEl.classList.add(\"tabulator-edit-select-list\");\r\n\r\n\tlistEl.addEventListener(\"mousedown\", function(e){\r\n\t\tblurable = false;\r\n\r\n\t\tsetTimeout(function(){\r\n\t\t\tblurable = true;\r\n\t\t}, 10);\r\n\t});\r\n\r\n\r\n\tfunction genUniqueColumnValues(){\r\n\t\tif(editorParams.values === true){\r\n\t\t\tuniqueColumnValues = getUniqueColumnValues();\r\n\t\t}else if(typeof editorParams.values === \"string\"){\r\n\t\t\tuniqueColumnValues = getUniqueColumnValues(editorParams.values);\r\n\t\t}\r\n\t}\r\n\r\n\tfunction getUniqueColumnValues(field){\r\n\t\tvar output = {},\r\n\t\tdata = self.table.getData(),\r\n\t\tcolumn;\r\n\r\n\t\tif(field){\r\n\t\t\tcolumn = self.table.columnManager.getColumnByField(field);\r\n\t\t}else{\r\n\t\t\tcolumn = cell.getColumn()._getSelf();\r\n\t\t}\r\n\r\n\t\tif(column){\r\n\t\t\tdata.forEach(function(row){\r\n\t\t\t\tvar val = column.getFieldValue(row);\r\n\r\n\t\t\t\tif(val !== null && typeof val !== \"undefined\" && val !== \"\"){\r\n\t\t\t\t\toutput[val] = true;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tif(editorParams.sortValuesList){\r\n\t\t\t\tif(editorParams.sortValuesList == \"asc\"){\r\n\t\t\t\t\toutput = Object.keys(output).sort();\r\n\t\t\t\t}else{\r\n\t\t\t\t\toutput = Object.keys(output).sort().reverse();\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\toutput = Object.keys(output);\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"unable to find matching column to create autocomplete lookup list:\", field);\r\n\t\t}\r\n\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tfunction filterList(term, intialLoad){\r\n\t\tvar matches = [],\r\n\t\tvalues, items, searchEl;\r\n\r\n\t\t//lookup base values list\r\n\t\tif(uniqueColumnValues){\r\n\t\t\tvalues = uniqueColumnValues;\r\n\t\t}else{\r\n\t\t\tvalues = editorParams.values || [];\r\n\t\t}\r\n\r\n\t\tif(editorParams.searchFunc){\r\n\t\t\tmatches = editorParams.searchFunc(term, values);\r\n\r\n\t\t\tif(matches instanceof Promise){\r\n\r\n\t\t\t\taddNotice(typeof editorParams.searchingPlaceholder !== \"undefined\" ? editorParams.searchingPlaceholder : \"Searching...\");\r\n\r\n\t\t\t\tmatches.then((result) => {\r\n\t\t\t\t\tfillListIfNotEmpty(parseItems(result), intialLoad);\r\n\t\t\t\t}).catch((err) => {\r\n\t\t\t\t\tconsole.err(\"error in autocomplete search promise:\", err);\r\n\t\t\t\t});\r\n\r\n\t\t\t}else{\r\n\t\t\t\tfillListIfNotEmpty(parseItems(matches), intialLoad);\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\titems = parseItems(values);\r\n\r\n\t\t\tif(term === \"\"){\r\n\t\t\t\tif(editorParams.showListOnEmpty){\r\n\t\t\t\t\tmatches = items;\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\titems.forEach(function(item){\r\n\t\t\t\t\tif(item.value !== null || typeof item.value !== \"undefined\"){\r\n\t\t\t\t\t\tif(String(item.value).toLowerCase().indexOf(String(term).toLowerCase()) > -1 || String(item.title).toLowerCase().indexOf(String(term).toLowerCase()) > -1){\r\n\t\t\t\t\t\t\tmatches.push(item);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\tfillListIfNotEmpty(matches, intialLoad);\r\n\t\t}\r\n\t}\r\n\r\n\tfunction addNotice(notice){\r\n\t\tvar searchEl = document.createElement(\"div\");\r\n\r\n\t\tclearList();\r\n\r\n\t\tif(notice !== false){\r\n\t\t\tsearchEl.classList.add(\"tabulator-edit-select-list-notice\");\r\n\t\t\tsearchEl.tabIndex = 0;\r\n\r\n\t\t\tif(notice instanceof Node){\r\n\t\t\t\tsearchEl.appendChild(notice);\r\n\t\t\t}else{\r\n\t\t\t\tsearchEl.innerHTML = notice;\r\n\t\t\t}\r\n\r\n\t\t\tlistEl.appendChild(searchEl);\r\n\t\t}\r\n\t}\r\n\r\n\tfunction parseItems(inputValues){\r\n\t\tvar itemList = [];\r\n\r\n\t\tif(Array.isArray(inputValues)){\r\n\t\t\tinputValues.forEach(function(value){\r\n\r\n\t\t\t\tvar item = {};\r\n\r\n\t\t\t\tif(typeof value === \"object\"){\r\n\t\t\t\t\titem.title = editorParams.listItemFormatter ? editorParams.listItemFormatter(value.value, value.label) : value.label;\r\n\t\t\t\t\titem.value = value.value;\r\n\t\t\t\t}else{\r\n\t\t\t\t\titem.title = editorParams.listItemFormatter ? editorParams.listItemFormatter(value, value) : value;\r\n\t\t\t\t\titem.value = value;\r\n\t\t\t\t}\r\n\r\n\t\t\t\titemList.push(item);\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tfor(var key in inputValues){\r\n\t\t\t\tvar item = {\r\n\t\t\t\t\ttitle:editorParams.listItemFormatter ? editorParams.listItemFormatter(key, inputValues[key]) : inputValues[key],\r\n\t\t\t\t\tvalue:key,\r\n\t\t\t\t};\r\n\r\n\t\t\t\titemList.push(item);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn itemList;\r\n\t}\r\n\r\n\tfunction clearList(){\r\n\t\twhile(listEl.firstChild) listEl.removeChild(listEl.firstChild);\r\n\t}\r\n\r\n\tfunction fillListIfNotEmpty(items, intialLoad){\r\n\t\tif(items.length){\r\n\t\t\tfillList(items, intialLoad);\r\n\t\t}else{\r\n\t\t\tif(editorParams.emptyPlaceholder){\r\n\t\t\t\taddNotice(editorParams.emptyPlaceholder);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tfunction fillList(items, intialLoad){\r\n\t\tvar current = false;\r\n\r\n\t\tclearList();\r\n\r\n\t\tdisplayItems = items;\r\n\r\n\t\tdisplayItems.forEach(function(item){\r\n\t\t\tvar el = item.element;\r\n\r\n\t\t\tif(!el){\r\n\t\t\t\tel = document.createElement(\"div\");\r\n\t\t\t\tel.classList.add(\"tabulator-edit-select-list-item\");\r\n\t\t\t\tel.tabIndex = 0;\r\n\t\t\t\tel.innerHTML = item.title;\r\n\r\n\t\t\t\tel.addEventListener(\"click\", function(e){\r\n\t\t\t\t\tsetCurrentItem(item);\r\n\t\t\t\t\tchooseItem();\r\n\t\t\t\t});\r\n\r\n\t\t\t\tel.addEventListener(\"mousedown\", function(e){\r\n\t\t\t\t\tblurable = false;\r\n\r\n\t\t\t\t\tsetTimeout(function(){\r\n\t\t\t\t\t\tblurable = true;\r\n\t\t\t\t\t}, 10);\r\n\t\t\t\t});\r\n\r\n\t\t\t\titem.element = el;\r\n\r\n\t\t\t\tif(intialLoad && item.value == initialValue){\r\n\t\t\t\t\tinput.value = item.title;\r\n\t\t\t\t\titem.element.classList.add(\"active\");\r\n\t\t\t\t\tcurrent = true;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(item === currentItem){\r\n\t\t\t\t\titem.element.classList.add(\"active\");\r\n\t\t\t\t\tcurrent = true;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tlistEl.appendChild(el);\r\n\t\t});\r\n\r\n\t\tif(!current){\r\n\t\t\tsetCurrentItem(false);\r\n\t\t}\r\n\t}\r\n\r\n\tfunction chooseItem(){\r\n\t\thideList();\r\n\r\n\t\tif(currentItem){\r\n\t\t\tif(initialValue !== currentItem.value){\r\n\t\t\t\tinitialValue = currentItem.value;\r\n\t\t\t\tinput.value = currentItem.title;\r\n\t\t\t\tsuccess(currentItem.value);\r\n\t\t\t}else{\r\n\t\t\t\tcancel();\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tif(editorParams.freetext){\r\n\t\t\t\tinitialValue = input.value;\r\n\t\t\t\tsuccess(input.value);\r\n\t\t\t}else{\r\n\t\t\t\tif(editorParams.allowEmpty && input.value === \"\"){\r\n\t\t\t\t\tinitialValue = input.value;\r\n\t\t\t\t\tsuccess(input.value);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tcancel();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tfunction showList(){\r\n\t\tif(!listEl.parentNode){\r\n\t\t\twhile(listEl.firstChild) listEl.removeChild(listEl.firstChild);\r\n\r\n\t\t\tvar offset = Helpers.elOffset(cellEl);\r\n\r\n\t\t\tlistEl.style.minWidth = cellEl.offsetWidth + \"px\";\r\n\r\n\t\t\tlistEl.style.top = (offset.top + cellEl.offsetHeight) + \"px\";\r\n\t\t\tlistEl.style.left = offset.left + \"px\";\r\n\t\t\tdocument.body.appendChild(listEl);\r\n\t\t}\r\n\t}\r\n\r\n\tfunction setCurrentItem(item, showInputValue){\r\n\t\tif(currentItem && currentItem.element){\r\n\t\t\tcurrentItem.element.classList.remove(\"active\");\r\n\t\t}\r\n\r\n\t\tcurrentItem = item;\r\n\r\n\t\tif(item && item.element){\r\n\t\t\titem.element.classList.add(\"active\");\r\n\t\t}\r\n\r\n\t\tif(item && item.element && item.element.scrollIntoView){\r\n\t\t\titem.element.scrollIntoView({behavior: 'smooth', block: 'nearest', inline: 'start'});\r\n\t\t}\r\n\t}\r\n\r\n\tfunction hideList(){\r\n\t\tif(listEl.parentNode){\r\n\t\t\tlistEl.parentNode.removeChild(listEl);\r\n\t\t}\r\n\r\n\t\tremoveScrollListener();\r\n\t}\r\n\r\n\r\n\tfunction cancelItem(){\r\n\t\thideList();\r\n\t\tcancel();\r\n\t}\r\n\r\n\tfunction removeScrollListener() {\r\n\t\tself.table.rowManager.element.removeEventListener(\"scroll\", cancelItem);\r\n\t}\r\n\r\n\t//allow key based navigation\r\n\tinput.addEventListener(\"keydown\", function(e){\r\n\t\tvar index;\r\n\r\n\t\tswitch(e.keyCode){\r\n\t\t\tcase 38: //up arrow\r\n\t\t\tindex = displayItems.indexOf(currentItem);\r\n\r\n\t\t\tif(vertNav == \"editor\" || (vertNav == \"hybrid\" && index)){\r\n\t\t\t\te.stopImmediatePropagation();\r\n\t\t\t\te.stopPropagation();\r\n\t\t\t\te.preventDefault();\r\n\r\n\t\t\t\tif(index > 0){\r\n\t\t\t\t\tsetCurrentItem(displayItems[index - 1]);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tsetCurrentItem(false);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 40: //down arrow\r\n\r\n\t\t\tindex = displayItems.indexOf(currentItem);\r\n\r\n\t\t\tif(vertNav == \"editor\" || (vertNav == \"hybrid\" && index < displayItems.length - 1)){\r\n\r\n\t\t\t\te.stopImmediatePropagation();\r\n\t\t\t\te.stopPropagation();\r\n\t\t\t\te.preventDefault();\r\n\r\n\t\t\t\tif(index < displayItems.length - 1){\r\n\t\t\t\t\tif(index == -1){\r\n\t\t\t\t\t\tsetCurrentItem(displayItems[0]);\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tsetCurrentItem(displayItems[index + 1]);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\r\n\r\n\t\t\tcase 37: //left arrow\r\n\t\t\tcase 39: //right arrow\r\n\t\t\te.stopImmediatePropagation();\r\n\t\t\te.stopPropagation();\r\n\t\t\t// e.preventDefault();\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 13: //enter\r\n\t\t\tchooseItem();\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 27: //escape\r\n\t\t\tcancelItem();\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 36: //home\r\n\t\t\tcase 35: //end\r\n\t\t\t//prevent table navigation while using input element\r\n\t\t\te.stopImmediatePropagation();\r\n\t\t\tbreak;\r\n\t\t}\r\n\t});\r\n\r\n\tinput.addEventListener(\"keyup\", function(e){\r\n\r\n\t\tswitch(e.keyCode){\r\n\t\t\tcase 38: //up arrow\r\n\t\t\tcase 37: //left arrow\r\n\t\t\tcase 39: //up arrow\r\n\t\t\tcase 40: //right arrow\r\n\t\t\tcase 13: //enter\r\n\t\t\tcase 27: //escape\r\n\t\t\tbreak;\r\n\r\n\t\t\tdefault:\r\n\t\t\tfilterList(input.value);\r\n\t\t}\r\n\r\n\t});\r\n\r\n\tinput.addEventListener(\"search\", function(e){\r\n\t\tfilterList(input.value);\r\n\t});\r\n\r\n\tinput.addEventListener(\"blur\", function(e){\r\n\t\tif(blurable){\r\n\t\t\tchooseItem();\r\n\t\t}\r\n\t});\r\n\r\n\tinput.addEventListener(\"focus\", function(e){\r\n\t\tvar value = initialDisplayValue;\r\n\t\tgenUniqueColumnValues();\r\n\t\tshowList();\r\n\t\tinput.value = value;\r\n\t\tfilterList(value, true);\r\n\t});\r\n\r\n\r\n\tonRendered(function(){\r\n\t\tinput.style.height = \"100%\";\r\n\t\tinput.focus({preventScroll: true});\r\n\t});\r\n\r\n\tif(editorParams.mask){\r\n\t\tmaskInput(input, editorParams);\r\n\t}\r\n\r\n\tsetTimeout(() => {\r\n\t\tthis.table.rowManager.element.addEventListener(\"scroll\", cancelItem);\r\n\t}, 10);\r\n\r\n\tgenUniqueColumnValues();\r\n\tinput.value = initialDisplayValue;\r\n\tfilterList(initialDisplayValue, true);\r\n\r\n\treturn input;\r\n};","//star rating\r\nexport default function(cell, onRendered, success, cancel, editorParams){\r\n\tvar self = this,\r\n\telement = cell.getElement(),\r\n\tvalue = cell.getValue(),\r\n\tmaxStars = element.getElementsByTagName(\"svg\").length || 5,\r\n\tsize = element.getElementsByTagName(\"svg\")[0] ? element.getElementsByTagName(\"svg\")[0].getAttribute(\"width\") : 14,\r\n\tstars = [],\r\n\tstarsHolder = document.createElement(\"div\"),\r\n\tstar = document.createElementNS('http://www.w3.org/2000/svg', \"svg\");\r\n\r\n\r\n\t//change star type\r\n\tfunction starChange(val){\r\n\t\tstars.forEach(function(star, i){\r\n\t\t\tif(i < val){\r\n\t\t\t\tif(self.table.browser == \"ie\"){\r\n\t\t\t\t\tstar.setAttribute(\"class\", \"tabulator-star-active\");\r\n\t\t\t\t}else{\r\n\t\t\t\t\tstar.classList.replace(\"tabulator-star-inactive\", \"tabulator-star-active\");\r\n\t\t\t\t}\r\n\r\n\t\t\t\tstar.innerHTML = '';\r\n\t\t\t}else{\r\n\t\t\t\tif(self.table.browser == \"ie\"){\r\n\t\t\t\t\tstar.setAttribute(\"class\", \"tabulator-star-inactive\");\r\n\t\t\t\t}else{\r\n\t\t\t\t\tstar.classList.replace(\"tabulator-star-active\", \"tabulator-star-inactive\");\r\n\t\t\t\t}\r\n\r\n\t\t\t\tstar.innerHTML = '';\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t//build stars\r\n\tfunction buildStar(i){\r\n\r\n\t\tvar starHolder = document.createElement(\"span\");\r\n\t\tvar nextStar = star.cloneNode(true);\r\n\r\n\t\tstars.push(nextStar);\r\n\r\n\t\tstarHolder.addEventListener(\"mouseenter\", function(e){\r\n\t\t\te.stopPropagation();\r\n\t\t\te.stopImmediatePropagation();\r\n\t\t\tstarChange(i);\r\n\t\t});\r\n\r\n\t\tstarHolder.addEventListener(\"mousemove\", function(e){\r\n\t\t\te.stopPropagation();\r\n\t\t\te.stopImmediatePropagation();\r\n\t\t});\r\n\r\n\t\tstarHolder.addEventListener(\"click\", function(e){\r\n\t\t\te.stopPropagation();\r\n\t\t\te.stopImmediatePropagation();\r\n\t\t\tsuccess(i);\r\n\t\t\telement.blur();\r\n\t\t});\r\n\r\n\t\tstarHolder.appendChild(nextStar);\r\n\t\tstarsHolder.appendChild(starHolder);\r\n\r\n\t}\r\n\r\n\t//handle keyboard navigation value change\r\n\tfunction changeValue(val){\r\n\t\tvalue = val;\r\n\t\tstarChange(val);\r\n\t}\r\n\r\n\t//style cell\r\n\telement.style.whiteSpace = \"nowrap\";\r\n\telement.style.overflow = \"hidden\";\r\n\telement.style.textOverflow = \"ellipsis\";\r\n\r\n\t//style holding element\r\n\tstarsHolder.style.verticalAlign = \"middle\";\r\n\tstarsHolder.style.display = \"inline-block\";\r\n\tstarsHolder.style.padding = \"4px\";\r\n\r\n\t//style star\r\n\tstar.setAttribute(\"width\", size);\r\n\tstar.setAttribute(\"height\", size);\r\n\tstar.setAttribute(\"viewBox\", \"0 0 512 512\");\r\n\tstar.setAttribute(\"xml:space\", \"preserve\");\r\n\tstar.style.padding = \"0 1px\";\r\n\r\n\tif(editorParams.elementAttributes && typeof editorParams.elementAttributes == \"object\"){\r\n\t\tfor (let key in editorParams.elementAttributes){\r\n\t\t\tif(key.charAt(0) == \"+\"){\r\n\t\t\t\tkey = key.slice(1);\r\n\t\t\t\tstarsHolder.setAttribute(key, starsHolder.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\r\n\t\t\t}else{\r\n\t\t\t\tstarsHolder.setAttribute(key, editorParams.elementAttributes[key]);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//create correct number of stars\r\n\tfor(var i=1;i<= maxStars;i++){\r\n\t\tbuildStar(i);\r\n\t}\r\n\r\n\t//ensure value does not exceed number of stars\r\n\tvalue = Math.min(parseInt(value), maxStars);\r\n\r\n\t// set initial styling of stars\r\n\tstarChange(value);\r\n\r\n\tstarsHolder.addEventListener(\"mousemove\", function(e){\r\n\t\tstarChange(0);\r\n\t});\r\n\r\n\tstarsHolder.addEventListener(\"click\", function(e){\r\n\t\tsuccess(0);\r\n\t});\r\n\r\n\telement.addEventListener(\"blur\", function(e){\r\n\t\tcancel();\r\n\t});\r\n\r\n\t//allow key based navigation\r\n\telement.addEventListener(\"keydown\", function(e){\r\n\t\tswitch(e.keyCode){\r\n\t\t\tcase 39: //right arrow\r\n\t\t\tchangeValue(value + 1);\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 37: //left arrow\r\n\t\t\tchangeValue(value - 1);\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 13: //enter\r\n\t\t\tsuccess(value);\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 27: //escape\r\n\t\t\tcancel();\r\n\t\t\tbreak;\r\n\t\t}\r\n\t});\r\n\r\n\treturn starsHolder;\r\n};","//draggable progress bar\r\nexport default function(cell, onRendered, success, cancel, editorParams){\r\n\tvar element = cell.getElement(),\r\n\tmax = typeof editorParams.max === \"undefined\" ? ( element.getElementsByTagName(\"div\")[0].getAttribute(\"max\") || 100) : editorParams.max,\r\n\tmin = typeof editorParams.min === \"undefined\" ? ( element.getElementsByTagName(\"div\")[0].getAttribute(\"min\") || 0) : editorParams.min,\r\n\tpercent = (max - min) / 100,\r\n\tvalue = cell.getValue() || 0,\r\n\thandle = document.createElement(\"div\"),\r\n\tbar = document.createElement(\"div\"),\r\n\tmouseDrag, mouseDragWidth;\r\n\r\n\t//set new value\r\n\tfunction updateValue(){\r\n\t\tvar style = window.getComputedStyle(element, null);\r\n\r\n\t\tvar calcVal = (percent * Math.round(bar.offsetWidth / ((element.clientWidth - parseInt(style.getPropertyValue(\"padding-left\")) - parseInt(style.getPropertyValue(\"padding-right\")))/100))) + min;\r\n\t\tsuccess(calcVal);\r\n\t\telement.setAttribute(\"aria-valuenow\", calcVal);\r\n\t\telement.setAttribute(\"aria-label\", value);\r\n\t}\r\n\r\n\t//style handle\r\n\thandle.style.position = \"absolute\";\r\n\thandle.style.right = \"0\";\r\n\thandle.style.top = \"0\";\r\n\thandle.style.bottom = \"0\";\r\n\thandle.style.width = \"5px\";\r\n\thandle.classList.add(\"tabulator-progress-handle\");\r\n\r\n\t//style bar\r\n\tbar.style.display = \"inline-block\";\r\n\tbar.style.position = \"relative\";\r\n\t// bar.style.top = \"8px\";\r\n\t// bar.style.bottom = \"8px\";\r\n\t// bar.style.left = \"4px\";\r\n\t// bar.style.marginRight = \"4px\";\r\n\tbar.style.height = \"100%\";\r\n\tbar.style.backgroundColor = \"#488CE9\";\r\n\tbar.style.maxWidth = \"100%\";\r\n\tbar.style.minWidth = \"0%\";\r\n\r\n\tif(editorParams.elementAttributes && typeof editorParams.elementAttributes == \"object\"){\r\n\t\tfor (let key in editorParams.elementAttributes){\r\n\t\t\tif(key.charAt(0) == \"+\"){\r\n\t\t\t\tkey = key.slice(1);\r\n\t\t\t\tbar.setAttribute(key, bar.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\r\n\t\t\t}else{\r\n\t\t\t\tbar.setAttribute(key, editorParams.elementAttributes[key]);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//style cell\r\n\telement.style.padding = \"4px 4px\";\r\n\r\n\t//make sure value is in range\r\n\tvalue = Math.min(parseFloat(value), max);\r\n\tvalue = Math.max(parseFloat(value), min);\r\n\r\n\t//workout percentage\r\n\tvalue = Math.round((value - min) / percent);\r\n\t// bar.style.right = value + \"%\";\r\n\tbar.style.width = value + \"%\";\r\n\r\n\telement.setAttribute(\"aria-valuemin\", min);\r\n\telement.setAttribute(\"aria-valuemax\", max);\r\n\r\n\tbar.appendChild(handle);\r\n\r\n\thandle.addEventListener(\"mousedown\", function(e){\r\n\t\tmouseDrag = e.screenX;\r\n\t\tmouseDragWidth = bar.offsetWidth;\r\n\t});\r\n\r\n\thandle.addEventListener(\"mouseover\", function(){\r\n\t\thandle.style.cursor = \"ew-resize\";\r\n\t});\r\n\r\n\telement.addEventListener(\"mousemove\", function(e){\r\n\t\tif(mouseDrag){\r\n\t\t\tbar.style.width = (mouseDragWidth + e.screenX - mouseDrag) + \"px\";\r\n\t\t}\r\n\t});\r\n\r\n\telement.addEventListener(\"mouseup\", function(e){\r\n\t\tif(mouseDrag){\r\n\t\t\te.stopPropagation();\r\n\t\t\te.stopImmediatePropagation();\r\n\r\n\t\t\tmouseDrag = false;\r\n\t\t\tmouseDragWidth = false;\r\n\r\n\t\t\tupdateValue();\r\n\t\t}\r\n\t});\r\n\r\n\t//allow key based navigation\r\n\telement.addEventListener(\"keydown\", function(e){\r\n\t\tswitch(e.keyCode){\r\n\t\t\tcase 39: //right arrow\r\n\t\t\te.preventDefault();\r\n\t\t\tbar.style.width = (bar.clientWidth + element.clientWidth/100) + \"px\";\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 37: //left arrow\r\n\t\t\te.preventDefault();\r\n\t\t\tbar.style.width = (bar.clientWidth - element.clientWidth/100) + \"px\";\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 9: //tab\r\n\t\t\tcase 13: //enter\r\n\t\t\tupdateValue();\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 27: //escape\r\n\t\t\tcancel();\r\n\t\t\tbreak;\r\n\r\n\t\t}\r\n\t});\r\n\r\n\telement.addEventListener(\"blur\", function(){\r\n\t\tcancel();\r\n\t});\r\n\r\n\treturn bar;\r\n};","//checkbox\r\nexport default function(cell, onRendered, success, cancel, editorParams){\r\n\tvar value = cell.getValue(),\r\n\tinput = document.createElement(\"input\"),\r\n\ttristate = editorParams.tristate,\r\n\tindetermValue = typeof editorParams.indeterminateValue === \"undefined\" ? null : editorParams.indeterminateValue,\r\n\tindetermState = false;\r\n\r\n\tinput.setAttribute(\"type\", \"checkbox\");\r\n\tinput.style.marginTop = \"5px\";\r\n\tinput.style.boxSizing = \"border-box\";\r\n\r\n\tif(editorParams.elementAttributes && typeof editorParams.elementAttributes == \"object\"){\r\n\t\tfor (let key in editorParams.elementAttributes){\r\n\t\t\tif(key.charAt(0) == \"+\"){\r\n\t\t\t\tkey = key.slice(1);\r\n\t\t\t\tinput.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\r\n\t\t\t}else{\r\n\t\t\t\tinput.setAttribute(key, editorParams.elementAttributes[key]);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tinput.value = value;\r\n\r\n\tif(tristate && (typeof value === \"undefined\" || value === indetermValue || value === \"\")){\r\n\t\tindetermState = true;\r\n\t\tinput.indeterminate = true;\r\n\t}\r\n\r\n\tif(this.table.browser != \"firefox\"){ //prevent blur issue on mac firefox\r\n\t\tonRendered(function(){\r\n\t\t\tinput.focus({preventScroll: true});\r\n\t\t});\r\n\t}\r\n\r\n\tinput.checked = value === true || value === \"true\" || value === \"True\" || value === 1;\r\n\r\n\tonRendered(function(){\r\n\t\tinput.focus();\r\n\t});\r\n\r\n\tfunction setValue(blur){\r\n\t\tif(tristate){\r\n\t\t\tif(!blur){\r\n\t\t\t\tif(input.checked && !indetermState){\r\n\t\t\t\t\tinput.checked = false;\r\n\t\t\t\t\tinput.indeterminate = true;\r\n\t\t\t\t\tindetermState = true;\r\n\t\t\t\t\treturn indetermValue;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tindetermState = false;\r\n\t\t\t\t\treturn input.checked;\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tif(indetermState){\r\n\t\t\t\t\treturn indetermValue;\r\n\t\t\t\t}else{\r\n\t\t\t\t\treturn input.checked;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\treturn input.checked;\r\n\t\t}\r\n\t}\r\n\r\n\t//submit new value on blur\r\n\tinput.addEventListener(\"change\", function(e){\r\n\t\tsuccess(setValue());\r\n\t});\r\n\r\n\tinput.addEventListener(\"blur\", function(e){\r\n\t\tsuccess(setValue(true));\r\n\t});\r\n\r\n\t//submit new value on enter\r\n\tinput.addEventListener(\"keydown\", function(e){\r\n\t\tif(e.keyCode == 13){\r\n\t\t\tsuccess(setValue());\r\n\t\t}\r\n\t\tif(e.keyCode == 27){\r\n\t\t\tcancel();\r\n\t\t}\r\n\t});\r\n\r\n\treturn input;\r\n};","import Module from '../../core/Module.js';\r\n\r\nimport defaultEditors from './defaults/editors.js';\r\n\r\nclass Edit extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.currentCell = false; //hold currently editing cell\r\n\t\tthis.mouseClick = false; //hold mousedown state to prevent click binding being overriden by editor opening\r\n\t\tthis.recursionBlock = false; //prevent focus recursion\r\n\t\tthis.invalidEdit = false;\r\n\t\tthis.editedCells = [];\r\n\r\n\t\tthis.editors = Edit.editors;\r\n\r\n\t\tthis.registerColumnOption(\"editable\");\r\n\t\tthis.registerColumnOption(\"editor\");\r\n\t\tthis.registerColumnOption(\"editorParams\");\r\n\r\n\t\tthis.registerColumnOption(\"cellEditing\");\r\n\t\tthis.registerColumnOption(\"cellEdited\");\r\n\t\tthis.registerColumnOption(\"cellEditCancelled\");\r\n\r\n\t\tthis.registerTableFunction(\"getEditedCells\", this.getEditedCells.bind(this));\r\n\t\tthis.registerTableFunction(\"clearCellEdited\", this.clearCellEdited.bind(this));\r\n\t\tthis.registerTableFunction(\"navigatePrev\", this.navigatePrev.bind(this));\r\n\t\tthis.registerTableFunction(\"navigateNext\", this.navigateNext.bind(this));\r\n\t\tthis.registerTableFunction(\"navigateLeft\", this.navigateLeft.bind(this));\r\n\t\tthis.registerTableFunction(\"navigateRight\", this.navigateRight.bind(this));\r\n\t\tthis.registerTableFunction(\"navigateUp\", this.navigateUp.bind(this));\r\n\t\tthis.registerTableFunction(\"navigateDown\", this.navigateDown.bind(this));\r\n\r\n\t\tthis.registerComponentFunction(\"cell\", \"isEdited\", this.cellisEdited.bind(this));\r\n\t\tthis.registerComponentFunction(\"cell\", \"clearEdited\", this.clearEdited.bind(this));\r\n\t\tthis.registerComponentFunction(\"cell\", \"edit\", this.editCell.bind(this));\r\n\t\tthis.registerComponentFunction(\"cell\", \"cancelEdit\", this.cellCancelEdit.bind(this));\r\n\r\n\t\tthis.registerComponentFunction(\"cell\", \"navigatePrev\", this.navigatePrev.bind(this));\r\n\t\tthis.registerComponentFunction(\"cell\", \"navigateNext\", this.navigateNext.bind(this));\r\n\t\tthis.registerComponentFunction(\"cell\", \"navigateLeft\", this.navigateLeft.bind(this));\r\n\t\tthis.registerComponentFunction(\"cell\", \"navigateRight\", this.navigateRight.bind(this));\r\n\t\tthis.registerComponentFunction(\"cell\", \"navigateUp\", this.navigateUp.bind(this));\r\n\t\tthis.registerComponentFunction(\"cell\", \"navigateDown\", this.navigateDown.bind(this));\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tthis.subscribe(\"cell-init\", this.bindEditor.bind(this));\r\n\t\tthis.subscribe(\"cell-delete\", this.clearEdited.bind(this));\r\n\t\tthis.subscribe(\"column-layout\", this.initializeColumnCheck.bind(this));\r\n\t\tthis.subscribe(\"column-delete\", this.columnDeleteCheck.bind(this));\r\n\t\tthis.subscribe(\"row-deleting\", this.rowDeleteCheck.bind(this));\r\n\t\tthis.subscribe(\"data-refeshing\", this.cancelEdit.bind(this));\r\n\r\n\t\tthis.subscribe(\"keybinding-nav-prev\", this.navigatePrev.bind(this));\r\n\t\tthis.subscribe(\"keybinding-nav-next\", this.keybindingNavigateNext.bind(this));\r\n\t\tthis.subscribe(\"keybinding-nav-left\", this.navigateLeft.bind(this));\r\n\t\tthis.subscribe(\"keybinding-nav-right\", this.navigateRight.bind(this));\r\n\t\tthis.subscribe(\"keybinding-nav-up\", this.navigateUp.bind(this));\r\n\t\tthis.subscribe(\"keybinding-nav-down\", this.navigateDown.bind(this));\r\n\t}\r\n\r\n\r\n\t///////////////////////////////////\r\n\t////// Keybinding Functions ///////\r\n\t///////////////////////////////////\r\n\r\n\tkeybindingNavigateNext(e){\r\n\t\tvar cell = this.currentCell,\r\n\t\tnewRow = this.options(\"tabEndNewRow\");\r\n\r\n\t\tif(cell){\r\n\t\t\tif(!this.navigateNext(e)){\r\n\t\t\t\tif(newRow){\r\n\t\t\t\t\tcell.getElement().firstChild.blur();\r\n\r\n\t\t\t\t\tif(newRow === true){\r\n\t\t\t\t\t\tnewRow = this.table.addRow({})\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tif(typeof newRow == \"function\"){\r\n\t\t\t\t\t\t\tnewRow = this.table.addRow(newRow(cell.row.getComponent()))\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\tnewRow = this.table.addRow(Object.assign({}, newRow));\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tnewRow.then(() => {\r\n\t\t\t\t\t\tsetTimeout(() => {\r\n\t\t\t\t\t\t\tnav.next();\r\n\t\t\t\t\t\t})\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t///////////////////////////////////\r\n\t///////// Cell Functions //////////\r\n\t///////////////////////////////////\r\n\r\n\tcellisEdited(cell){\r\n\t\treturn !! cell.modules.edit && cell.modules.edit.edited;\r\n\t}\r\n\r\n\tcellCancelEdit(cell){\r\n\t\tif(cell === this.currentCell){\r\n\t\t\tthis.table.modules.edit.cancelEdit();\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Cancel Editor Error - This cell is not currently being edited \");\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t///////////////////////////////////\r\n\t///////// Table Functions /////////\r\n\t///////////////////////////////////\r\n\tclearCellEdited(cells){\r\n\t\tif(!cells){\r\n\t\t\tcells = this.modules.edit.getEditedCells();\r\n\t\t}\r\n\r\n\t\tif(!Array.isArray(cells)){\r\n\t\t\tcells = [cells];\r\n\t\t}\r\n\r\n\t\tcells.forEach((cell) => {\r\n\t\t\tthis.modules.edit.clearEdited(cell._getSelf());\r\n\t\t});\r\n\t}\r\n\r\n\tnavigatePrev(e){\r\n\t\tvar cell = this.currentCell,\r\n\t\tnextCell, prevRow;\r\n\r\n\t\tif(cell){\r\n\r\n\t\t\tif(e){\r\n\t\t\t\te.preventDefault();\r\n\t\t\t}\r\n\r\n\t\t\tnextCell = this.navigateLeft();\r\n\r\n\t\t\tif(nextCell){\r\n\t\t\t\treturn true;\r\n\t\t\t}else{\r\n\t\t\t\tprevRow = this.table.rowManager.prevDisplayRow(cell.row, true);\r\n\r\n\t\t\t\tif(prevRow){\r\n\t\t\t\t\tnextCell = this.findNextEditableCell(prevRow, prevRow.cells.length);\r\n\r\n\t\t\t\t\tif(nextCell){\r\n\t\t\t\t\t\tnextCell.edit();\r\n\t\t\t\t\t\treturn true;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t}\r\n\r\n\tnavigateNext(e){\r\n\t\tvar cell = this.currentCell,\r\n\t\tnextCell, nextRow;\r\n\r\n\t\tif(cell){\r\n\r\n\t\t\tif(e){\r\n\t\t\t\te.preventDefault();\r\n\t\t\t}\r\n\r\n\t\t\tnextCell = this.navigateRight();\r\n\r\n\t\t\tif(nextCell){\r\n\t\t\t\treturn true;\r\n\t\t\t}else{\r\n\t\t\t\tnextRow = this.table.rowManager.nextDisplayRow(cell.row, true);\r\n\r\n\t\t\t\tif(nextRow){\r\n\t\t\t\t\tnextCell = this.findNextEditableCell(nextRow, -1);\r\n\r\n\t\t\t\t\tif(nextCell){\r\n\t\t\t\t\t\tnextCell.edit();\r\n\t\t\t\t\t\treturn true;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t}\r\n\r\n\tnavigateLeft(e){\r\n\t\tvar cell = this.currentCell,\r\n\t\tindex, nextCell;\r\n\r\n\t\tif(cell){\r\n\r\n\t\t\tif(e){\r\n\t\t\t\te.preventDefault();\r\n\t\t\t}\r\n\r\n\t\t\tindex = cell.getIndex();\r\n\t\t\tnextCell = this.findPrevEditableCell(cell.row, index);\r\n\r\n\t\t\tif(nextCell){\r\n\t\t\t\tnextCell.edit();\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t}\r\n\r\n\tnavigateRight(e){\r\n\t\tvar cell = this.currentCell,\r\n\t\tindex, nextCell;\r\n\r\n\t\tif(cell){\r\n\r\n\t\t\tif(e){\r\n\t\t\t\te.preventDefault();\r\n\t\t\t}\r\n\r\n\t\t\tindex = cell.getIndex();\r\n\t\t\tnextCell = this.findNextEditableCell(cell.row, index);\r\n\r\n\t\t\tif(nextCell){\r\n\t\t\t\tnextCell.edit();\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t}\r\n\r\n\tnavigateUp(e){\r\n\t\tvar cell = this.currentCell,\r\n\t\tindex, nextRow;\r\n\r\n\t\tif(cell){\r\n\r\n\t\t\tif(e){\r\n\t\t\t\te.preventDefault();\r\n\t\t\t}\r\n\r\n\t\t\tindex = cell.getIndex();\r\n\t\t\tnextRow = this.table.rowManager.prevDisplayRow(cell.row, true);\r\n\r\n\t\t\tif(nextRow){\r\n\t\t\t\tnextRow.cells[index].edit();\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t}\r\n\r\n\tnavigateDown(e){\r\n\t\tvar cell = this.currentCell,\r\n\t\tindex, nextRow;\r\n\r\n\t\tif(cell){\r\n\r\n\t\t\tif(e){\r\n\t\t\t\te.preventDefault();\r\n\t\t\t}\r\n\r\n\t\t\tindex = cell.getIndex();\r\n\t\t\tnextRow = this.table.rowManager.nextDisplayRow(cell.row, true);\r\n\r\n\t\t\tif(nextRow){\r\n\t\t\t\tnextRow.cells[index].edit();\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t}\r\n\r\n\tfindNextEditableCell(row, index){\r\n\t\tvar nextCell = false;\r\n\r\n\t\tif(index < row.cells.length-1){\r\n\t\t\tfor(var i = index+1; i < row.cells.length; i++){\r\n\t\t\t\tlet cell = row.cells[i];\r\n\r\n\t\t\t\tif(cell.column.modules.edit && Helpers.elVisible(cell.getElement())){\r\n\t\t\t\t\tlet allowEdit = true;\r\n\r\n\t\t\t\t\tif(typeof cell.column.modules.edit.check == \"function\"){\r\n\t\t\t\t\t\tallowEdit = cell.column.modules.edit.check(cell.getComponent());\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif(allowEdit){\r\n\t\t\t\t\t\tnextCell = cell;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn nextCell;\r\n\t}\r\n\r\n\tfindPrevEditableCell(row, index){\r\n\t\tvar prevCell = false;\r\n\r\n\t\tif(index > 0){\r\n\t\t\tfor(var i = index-1; i >= 0; i--){\r\n\t\t\t\tlet cell = row.cells[i],\r\n\t\t\t\tallowEdit = true;\r\n\r\n\t\t\t\tif(cell.column.modules.edit && Helpers.elVisible(cell.getElement())){\r\n\t\t\t\t\tif(typeof cell.column.modules.edit.check == \"function\"){\r\n\t\t\t\t\t\tallowEdit = cell.column.modules.edit.check(cell.getComponent());\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif(allowEdit){\r\n\t\t\t\t\t\tprevCell = cell;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn prevCell;\r\n\t}\r\n\r\n\t///////////////////////////////////\r\n\t///////// Internal Logic //////////\r\n\t///////////////////////////////////\r\n\r\n\tinitializeColumnCheck(column){\r\n\t\tif(typeof column.definition.editor !== \"undefined\"){\r\n\t\t\tthis.initializeColumn(column);\r\n\t\t}\r\n\t}\r\n\r\n\tcolumnDeleteCheck(column){\r\n\t\tif(this.currentCell && this.currentCell.column === column){\r\n\t\t\tthis.cancelEdit();\r\n\t\t}\r\n\t}\r\n\r\n\trowDeleteCheck(row){\r\n\t\tif(this.currentCell && this.currentCell.row === row){\r\n\t\t\tthis.cancelEdit();\r\n\t\t}\r\n\t}\r\n\r\n\t//initialize column editor\r\n\tinitializeColumn(column){\r\n\t\tvar self = this,\r\n\t\tconfig = {\r\n\t\t\teditor:false,\r\n\t\t\tblocked:false,\r\n\t\t\tcheck:column.definition.editable,\r\n\t\t\tparams:column.definition.editorParams || {}\r\n\t\t};\r\n\r\n\t\t//set column editor\r\n\t\tswitch(typeof column.definition.editor){\r\n\t\t\tcase \"string\":\r\n\t\t\tif(this.editors[column.definition.editor]){\r\n\t\t\t\tconfig.editor = this.editors[column.definition.editor];\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Editor Error - No such editor found: \", column.definition.editor);\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"function\":\r\n\t\t\tconfig.editor = column.definition.editor;\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"boolean\":\r\n\t\t\tif(column.definition.editor === true){\r\n\t\t\t\tif(typeof column.definition.formatter !== \"function\"){\r\n\t\t\t\t\tif(this.editors[column.definition.formatter]){\r\n\t\t\t\t\t\tconfig.editor = this.editors[column.definition.formatter];\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tconfig.editor = this.editors[\"input\"];\r\n\t\t\t\t\t}\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.warn(\"Editor Error - Cannot auto lookup editor for a custom formatter: \", column.definition.formatter);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\tif(config.editor){\r\n\t\t\tcolumn.modules.edit = config;\r\n\t\t}\r\n\t}\r\n\r\n\tgetCurrentCell(){\r\n\t\treturn this.currentCell ? this.currentCell.getComponent() : false;\r\n\t}\r\n\r\n\tclearEditor(cancel){\r\n\t\tvar cell = this.currentCell,\r\n\t\tcellEl;\r\n\r\n\t\tthis.invalidEdit = false;\r\n\r\n\t\tif(cell){\r\n\t\t\tthis.currentCell = false;\r\n\r\n\t\t\tcellEl = cell.getElement();\r\n\r\n\t\t\tif(cancel){\r\n\t\t\t\tcell.validate();\r\n\t\t\t}else{\r\n\t\t\t\tcellEl.classList.remove(\"tabulator-validation-fail\");\r\n\t\t\t}\r\n\r\n\t\t\tcellEl.classList.remove(\"tabulator-editing\");\r\n\t\t\twhile(cellEl.firstChild) cellEl.removeChild(cellEl.firstChild);\r\n\r\n\t\t\tcell.row.getElement().classList.remove(\"tabulator-row-editing\");\r\n\t\t}\r\n\t}\r\n\r\n\tcancelEdit(){\r\n\t\tif(this.currentCell){\r\n\t\t\tvar cell = this.currentCell;\r\n\t\t\tvar component = this.currentCell.getComponent();\r\n\r\n\t\t\tthis.clearEditor(true);\r\n\t\t\tcell.setValueActual(cell.getValue());\r\n\t\t\tcell.cellRendered();\r\n\r\n\t\t\tif(cell.column.definition.editor == \"textarea\" || cell.column.definition.variableHeight){\r\n\t\t\t\tcell.row.normalizeHeight(true);\r\n\t\t\t}\r\n\r\n\t\t\tif(cell.column.definition.cellEditCancelled){\r\n\t\t\t\tcell.column.definition.cellEditCancelled.call(this.table, component);\r\n\t\t\t}\r\n\r\n\t\t\tthis.dispatchExternal(\"cellEditCancelled\", component);\r\n\t\t}\r\n\t}\r\n\r\n\t//return a formatted value for a cell\r\n\tbindEditor(cell){\r\n\t\tif(cell.column.modules.edit){\r\n\t\t\tvar self = this,\r\n\t\t\telement = cell.getElement(true);\r\n\r\n\t\t\telement.setAttribute(\"tabindex\", 0);\r\n\r\n\t\t\telement.addEventListener(\"click\", function(e){\r\n\t\t\t\tif(!element.classList.contains(\"tabulator-editing\")){\r\n\t\t\t\t\telement.focus({preventScroll: true});\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\telement.addEventListener(\"mousedown\", function(e){\r\n\t\t\t\tif (e.button === 2) {\r\n\t\t\t\t\te.preventDefault();\r\n\t\t\t\t}else{\r\n\t\t\t\t\tself.mouseClick = true;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\telement.addEventListener(\"focus\", function(e){\r\n\t\t\t\tif(!self.recursionBlock){\r\n\t\t\t\t\tself.edit(cell, e, false);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tfocusCellNoEvent(cell, block){\r\n\t\tthis.recursionBlock = true;\r\n\r\n\t\tif(!(block && this.table.browser === \"ie\")){\r\n\t\t\tcell.getElement().focus({preventScroll: true});\r\n\t\t}\r\n\r\n\t\tthis.recursionBlock = false;\r\n\t}\r\n\r\n\teditCell(cell, forceEdit){\r\n\t\tthis.focusCellNoEvent(cell);\r\n\t\tthis.edit(cell, false, forceEdit);\r\n\t}\r\n\r\n\tfocusScrollAdjust(cell){\r\n\t\tif(this.table.rowManager.getRenderMode() == \"virtual\"){\r\n\t\t\tvar topEdge = this.table.rowManager.element.scrollTop,\r\n\t\t\tbottomEdge = this.table.rowManager.element.clientHeight + this.table.rowManager.element.scrollTop,\r\n\t\t\trowEl = cell.row.getElement(),\r\n\t\t\toffset = rowEl.offsetTop;\r\n\r\n\t\t\tif(rowEl.offsetTop < topEdge){\r\n\t\t\t\tthis.table.rowManager.element.scrollTop -= (topEdge - rowEl.offsetTop);\r\n\t\t\t}else{\r\n\t\t\t\tif(rowEl.offsetTop + rowEl.offsetHeight > bottomEdge){\r\n\t\t\t\t\tthis.table.rowManager.element.scrollTop += (rowEl.offsetTop + rowEl.offsetHeight - bottomEdge);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tvar leftEdge = this.table.rowManager.element.scrollLeft,\r\n\t\t\trightEdge = this.table.rowManager.element.clientWidth + this.table.rowManager.element.scrollLeft,\r\n\t\t\tcellEl = cell.getElement(),\r\n\t\t\toffset = cellEl.offsetLeft;\r\n\r\n\t\t\tif(this.table.modExists(\"frozenColumns\")){\r\n\t\t\t\tleftEdge += parseInt(this.table.modules.frozenColumns.leftMargin);\r\n\t\t\t\trightEdge -= parseInt(this.table.modules.frozenColumns.rightMargin);\r\n\t\t\t}\r\n\r\n\t\t\tif(this.table.options.renderHorizontal === \"virtual\"){\r\n\t\t\t\tleftEdge -= parseInt(this.table.columnManager.renderer.vDomPadLeft);\r\n\t\t\t\trightEdge -= parseInt(this.table.columnManager.renderer.vDomPadLeft);\r\n\t\t\t}\r\n\r\n\t\t\tif(cellEl.offsetLeft < leftEdge){\r\n\r\n\t\t\t\tthis.table.rowManager.element.scrollLeft -= (leftEdge - cellEl.offsetLeft);\r\n\t\t\t}else{\r\n\t\t\t\tif(cellEl.offsetLeft + cellEl.offsetWidth > rightEdge){\r\n\t\t\t\t\tthis.table.rowManager.element.scrollLeft += (cellEl.offsetLeft + cellEl.offsetWidth - rightEdge);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tedit(cell, e, forceEdit){\r\n\t\tvar self = this,\r\n\t\tallowEdit = true,\r\n\t\trendered = function(){},\r\n\t\telement = cell.getElement(),\r\n\t\tcellEditor, component, params;\r\n\r\n\t\t//prevent editing if another cell is refusing to leave focus (eg. validation fail)\r\n\t\tif(this.currentCell){\r\n\t\t\tif(!this.invalidEdit){\r\n\t\t\t\tthis.cancelEdit();\r\n\t\t\t}\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t//handle successfull value change\r\n\t\tfunction success(value){\r\n\t\t\tif(self.currentCell === cell){\r\n\t\t\t\tvar valid = true;\r\n\r\n\t\t\t\tif(cell.column.modules.validate && self.table.modExists(\"validate\") && self.table.options.validationMode != \"manual\"){\r\n\t\t\t\t\tvalid = self.table.modules.validate.validate(cell.column.modules.validate, cell, value);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(valid === true || self.table.options.validationMode === \"highlight\"){\r\n\t\t\t\t\tself.clearEditor();\r\n\r\n\r\n\t\t\t\t\tif(!cell.modules.edit){\r\n\t\t\t\t\t\tcell.modules.edit = {};\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tcell.modules.edit.edited = true;\r\n\r\n\t\t\t\t\tif(self.editedCells.indexOf(cell) == -1){\r\n\t\t\t\t\t\tself.editedCells.push(cell);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tcell.setValue(value, true);\r\n\r\n\t\t\t\t\tif(self.table.options.dataTree && self.table.modExists(\"dataTree\")){\r\n\t\t\t\t\t\tself.table.modules.dataTree.checkForRestyle(cell);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif(valid !== true){\r\n\t\t\t\t\t\telement.classList.add(\"tabulator-validation-fail\");\r\n\t\t\t\t\t\tself.table.externalEvents.dispatch(\"validationFailed\", cell.getComponent(), value, valid);\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tself.invalidEdit = true;\r\n\t\t\t\t\telement.classList.add(\"tabulator-validation-fail\");\r\n\t\t\t\t\tself.focusCellNoEvent(cell, true);\r\n\t\t\t\t\trendered();\r\n\t\t\t\t\tself.table.externalEvents.dispatch(\"validationFailed\", cell.getComponent(), value, valid);\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\t// console.warn(\"Edit Success Error - cannot call success on a cell that is no longer being edited\");\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//handle aborted edit\r\n\t\tfunction cancel(){\r\n\t\t\tif(self.currentCell === cell){\r\n\t\t\t\tself.cancelEdit();\r\n\r\n\t\t\t\tif(self.table.options.dataTree && self.table.modExists(\"dataTree\")){\r\n\t\t\t\t\tself.table.modules.dataTree.checkForRestyle(cell);\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\t// console.warn(\"Edit Success Error - cannot call cancel on a cell that is no longer being edited\");\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction onRendered(callback){\r\n\t\t\trendered = callback;\r\n\t\t}\r\n\r\n\t\tif(!cell.column.modules.edit.blocked){\r\n\t\t\tif(e){\r\n\t\t\t\te.stopPropagation();\r\n\t\t\t}\r\n\r\n\t\t\tswitch(typeof cell.column.modules.edit.check){\r\n\t\t\t\tcase \"function\":\r\n\t\t\t\tallowEdit = cell.column.modules.edit.check(cell.getComponent());\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"boolean\":\r\n\t\t\t\tallowEdit = cell.column.modules.edit.check;\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\r\n\t\t\tif(allowEdit || forceEdit){\r\n\r\n\t\t\t\tself.cancelEdit();\r\n\r\n\t\t\t\tself.currentCell = cell;\r\n\r\n\t\t\t\tthis.focusScrollAdjust(cell);\r\n\r\n\t\t\t\tcomponent = cell.getComponent();\r\n\r\n\t\t\t\tif(this.mouseClick){\r\n\t\t\t\t\tthis.mouseClick = false;\r\n\r\n\t\t\t\t\tif(cell.column.definition.cellClick){\r\n\t\t\t\t\t\tcell.column.definition.cellClick.call(this.table, e, component);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(cell.column.definition.cellEditing){\r\n\t\t\t\t\tcell.column.definition.cellEditing.call(this.table, component);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.dispatchExternal(\"cellEditing\", component);\r\n\r\n\t\t\t\tparams = typeof cell.column.modules.edit.params === \"function\" ? cell.column.modules.edit.params(component) : cell.column.modules.edit.params;\r\n\r\n\t\t\t\tcellEditor = cell.column.modules.edit.editor.call(self, component, onRendered, success, cancel, params);\r\n\r\n\t\t\t\t//if editor returned, add to DOM, if false, abort edit\r\n\t\t\t\tif(cellEditor !== false){\r\n\r\n\t\t\t\t\tif(cellEditor instanceof Node){\r\n\t\t\t\t\t\telement.classList.add(\"tabulator-editing\");\r\n\t\t\t\t\t\tcell.row.getElement().classList.add(\"tabulator-row-editing\");\r\n\t\t\t\t\t\twhile(element.firstChild) element.removeChild(element.firstChild);\r\n\t\t\t\t\t\telement.appendChild(cellEditor);\r\n\r\n\t\t\t\t\t\t//trigger onRendered Callback\r\n\t\t\t\t\t\trendered();\r\n\r\n\t\t\t\t\t\t//prevent editing from triggering rowClick event\r\n\t\t\t\t\t\tvar children = element.children;\r\n\r\n\t\t\t\t\t\tfor (var i = 0; i < children.length; i++) {\r\n\t\t\t\t\t\t\tchildren[i].addEventListener(\"click\", function(e){\r\n\t\t\t\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tconsole.warn(\"Edit Error - Editor should return an instance of Node, the editor returned:\", cellEditor);\r\n\t\t\t\t\t\telement.blur();\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}else{\r\n\t\t\t\t\telement.blur();\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn true;\r\n\t\t\t}else{\r\n\t\t\t\tthis.mouseClick = false;\r\n\t\t\t\telement.blur();\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tthis.mouseClick = false;\r\n\t\t\telement.blur();\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\tgetEditedCells(){\r\n\t\tvar output = [];\r\n\r\n\t\tthis.editedCells.forEach((cell) => {\r\n\t\t\toutput.push(cell.getComponent());\r\n\t\t});\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tclearEdited(cell){\r\n\t\tvar editIndex;\r\n\r\n\t\tif(cell.modules.edit && cell.modules.edit.edited){\r\n\t\t\tcell.modules.edit.edited = false;\r\n\r\n\t\t\tif(cell.modules.validate){\r\n\t\t\t\tcell.modules.validate.invalid = false;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\teditIndex = this.editedCells.indexOf(cell);\r\n\r\n\t\tif(editIndex > -1){\r\n\t\t\tthis.editedCells.splice(editIndex, 1);\r\n\t\t}\r\n\t}\r\n}\r\n\r\nEdit.moduleName = \"edit\";\r\n\r\n//load defaults\r\nEdit.editors = defaultEditors;\r\n\r\n\r\nexport default Edit;","class ExportRow{\r\n\tconstructor(type, columns, component, indent){\r\n\t\tthis.type = type;\r\n\t\tthis.columns = columns;\r\n\t\tthis.component = component || false;\r\n\t\tthis.indent = indent || 0;\r\n\t}\r\n}\r\n\r\nexport default ExportRow;","class ExportColumn{\r\n\tconstructor(value, component, width, height, depth){\r\n\t\tthis.value = value;\r\n\t\tthis.component = component || false;\r\n\t\tthis.width = width;\r\n\t\tthis.height = height;\r\n\t\tthis.depth = depth;\r\n\t}\r\n}\r\n\r\nexport default ExportColumn;","import Module from '../../core/Module.js';\r\n\r\nimport ExportRow from './ExportRow.js';\r\nimport ExportColumn from './ExportColumn.js';\r\n\r\nclass Export extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.config = {};\r\n\t\tthis.cloneTableStyle = true;\r\n\t\tthis.colVisProp = \"\";\r\n\r\n\t\tthis.registerTableOption(\"htmlOutputConfig\", false); //html outypu config\r\n\r\n\t\tthis.registerColumnOption(\"htmlOutput\");\r\n\t\tthis.registerColumnOption(\"titleHtmlOutput\");\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tthis.registerTableFunction(\"getHtml\", this.getHtml.bind(this));\r\n\t}\r\n\r\n\t///////////////////////////////////\r\n\t///////// Table Functions /////////\r\n\t///////////////////////////////////\r\n\r\n\r\n\t///////////////////////////////////\r\n\t///////// Internal Logic //////////\r\n\t///////////////////////////////////\r\n\r\n\tgenerateExportList(config, style, range, colVisProp){\r\n\t\tthis.cloneTableStyle = style;\r\n\t\tthis.config = config || {};\r\n\t\tthis.colVisProp = colVisProp;\r\n\r\n\t\tvar headers = this.config.columnHeaders !== false ? this.headersToExportRows(this.generateColumnGroupHeaders()) : [];\r\n\t\tvar body = this.bodyToExportRows(this.rowLookup(range));\r\n\r\n\t\treturn headers.concat(body);\r\n\t}\r\n\r\n\tgenereateTable(config, style, range, colVisProp){\r\n\t\tvar list = this.generateExportList(config, style, range, colVisProp);\r\n\r\n\t\treturn this.genereateTableElement(list);\r\n\t}\r\n\r\n\trowLookup(range){\r\n\t\tvar rows = [];\r\n\r\n\t\tif(typeof range == \"function\"){\r\n\t\t\trange.call(this.table).forEach((row) =>{\r\n\t\t\t\trow = this.table.rowManager.findRow(row);\r\n\r\n\t\t\t\tif(row){\r\n\t\t\t\t\trows.push(row);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tswitch(range){\r\n\t\t\t\tcase true:\r\n\t\t\t\tcase \"visible\":\r\n\t\t\t\trows = this.table.rowManager.getVisibleRows(true);\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"all\":\r\n\t\t\t\trows = this.table.rowManager.rows;\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"selected\":\r\n\t\t\t\trows = this.table.modules.selectRow.selectedRows;\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"active\":\r\n\t\t\t\tdefault:\r\n\t\t\t\tif(this.table.options.pagination){\r\n\t\t\t\t\trows = this.table.rowManager.getDisplayRows(this.table.rowManager.displayRows.length - 2);\r\n\t\t\t\t}else{\r\n\t\t\t\t\trows = this.table.rowManager.getDisplayRows();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn Object.assign([], rows);\r\n\t}\r\n\r\n\tgenerateColumnGroupHeaders(){\r\n\t\tvar output = [];\r\n\r\n\t\tvar columns = this.config.columnGroups !== false ? this.table.columnManager.columns : this.table.columnManager.columnsByIndex;\r\n\r\n\t\tcolumns.forEach((column) => {\r\n\t\t\tvar colData = this.processColumnGroup(column);\r\n\r\n\t\t\tif(colData){\r\n\t\t\t\toutput.push(colData);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tprocessColumnGroup(column){\r\n\t\tvar subGroups = column.columns,\r\n\t\tmaxDepth = 0,\r\n\t\ttitle = column.definition[\"title\" + (this.colVisProp.charAt(0).toUpperCase() + this.colVisProp.slice(1))] || column.definition.title;\r\n\r\n\t\tvar groupData = {\r\n\t\t\ttitle:title,\r\n\t\t\tcolumn:column,\r\n\t\t\tdepth:1,\r\n\t\t};\r\n\r\n\t\tif(subGroups.length){\r\n\t\t\tgroupData.subGroups = [];\r\n\t\t\tgroupData.width = 0;\r\n\r\n\t\t\tsubGroups.forEach((subGroup) => {\r\n\t\t\t\tvar subGroupData = this.processColumnGroup(subGroup);\r\n\r\n\t\t\t\tif(subGroupData){\r\n\t\t\t\t\tgroupData.width += subGroupData.width;\r\n\t\t\t\t\tgroupData.subGroups.push(subGroupData);\r\n\r\n\t\t\t\t\tif(subGroupData.depth > maxDepth){\r\n\t\t\t\t\t\tmaxDepth = subGroupData.depth;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tgroupData.depth += maxDepth;\r\n\r\n\t\t\tif(!groupData.width){\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tif(this.columnVisCheck(column)){\r\n\t\t\t\tgroupData.width = 1;\r\n\t\t\t}else{\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn groupData;\r\n\t}\r\n\r\n\tcolumnVisCheck(column){\r\n\t\treturn column.definition[this.colVisProp] !== false && (column.visible || (!column.visible && column.definition[this.colVisProp]));\r\n\t}\r\n\r\n\theadersToExportRows(columns){\r\n\t\tvar headers = [],\r\n\t\theaderDepth = 0,\r\n\t\texportRows = [];\r\n\r\n\t\tfunction parseColumnGroup(column, level){\r\n\r\n\t\t\tvar depth = headerDepth - level;\r\n\r\n\t\t\tif(typeof headers[level] === \"undefined\"){\r\n\t\t\t\theaders[level] = [];\r\n\t\t\t}\r\n\r\n\t\t\tcolumn.height = column.subGroups ? 1 : (depth - column.depth) + 1;\r\n\r\n\t\t\theaders[level].push(column);\r\n\r\n\t\t\tif(column.height > 1){\r\n\t\t\t\tfor(let i = 1; i < column.height; i ++){\r\n\r\n\t\t\t\t\tif(typeof headers[level + i] === \"undefined\"){\r\n\t\t\t\t\t\theaders[level + i] = [];\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\theaders[level + i].push(false);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif(column.width > 1){\r\n\t\t\t\tfor(let i = 1; i < column.width; i ++){\r\n\t\t\t\t\theaders[level].push(false);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif(column.subGroups){\r\n\t\t\t\tcolumn.subGroups.forEach(function(subGroup){\r\n\t\t\t\t\tparseColumnGroup(subGroup, level+1);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//calculate maximum header debth\r\n\t\tcolumns.forEach(function(column){\r\n\t\t\tif(column.depth > headerDepth){\r\n\t\t\t\theaderDepth = column.depth;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tcolumns.forEach(function(column){\r\n\t\t\tparseColumnGroup(column,0);\r\n\t\t});\r\n\r\n\t\theaders.forEach((header) => {\r\n\t\t\tvar columns = [];\r\n\r\n\t\t\theader.forEach((col) => {\r\n\t\t\t\tif(col){\r\n\t\t\t\t\tcolumns.push(new ExportColumn(col.title, col.column.getComponent(), col.width, col.height, col.depth));\r\n\t\t\t\t}else{\r\n\t\t\t\t\tcolumns.push(null);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\texportRows.push(new ExportRow(\"header\", columns));\r\n\t\t});\r\n\r\n\t\treturn exportRows;\r\n\t}\r\n\r\n\tbodyToExportRows(rows){\r\n\r\n\t\tvar columns = [];\r\n\t\tvar exportRows = [];\r\n\r\n\t\tthis.table.columnManager.columnsByIndex.forEach((column) => {\r\n\t\t\tif (this.columnVisCheck(column)) {\r\n\t\t\t\tcolumns.push(column.getComponent());\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tif(this.config.columnCalcs !== false && this.table.modExists(\"columnCalcs\")){\r\n\t\t\tif(this.table.modules.columnCalcs.topInitialized){\r\n\t\t\t\trows.unshift(this.table.modules.columnCalcs.topRow);\r\n\t\t\t}\r\n\r\n\t\t\tif(this.table.modules.columnCalcs.botInitialized){\r\n\t\t\t\trows.push(this.table.modules.columnCalcs.botRow);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\trows = rows.filter((row) => {\r\n\t\t\tswitch(row.type){\r\n\t\t\t\tcase \"group\":\r\n\t\t\t\treturn this.config.rowGroups !== false;\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"calc\":\r\n\t\t\t\treturn this.config.columnCalcs !== false;\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"row\":\r\n\t\t\t\treturn !(this.table.options.dataTree && this.config.dataTree === false && row.modules.dataTree.parent);\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\r\n\t\t\treturn true;\r\n\t\t});\r\n\r\n\t\trows.forEach((row, i) => {\r\n\t\t\tvar rowData = row.getData(this.colVisProp);\r\n\t\t\tvar exportCols = [];\r\n\t\t\tvar indent = 0;\r\n\r\n\t\t\tswitch(row.type){\r\n\t\t\t\tcase \"group\":\r\n\t\t\t\tindent = row.level;\r\n\t\t\t\texportCols.push(new ExportColumn(row.key, row.getComponent(), columns.length, 1));\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"calc\" :\r\n\t\t\t\tcase \"row\" :\r\n\t\t\t\tcolumns.forEach((col) => {\r\n\t\t\t\t\texportCols.push(new ExportColumn(col._column.getFieldValue(rowData), col, 1, 1));\r\n\t\t\t\t});\r\n\r\n\t\t\t\tif(this.table.options.dataTree && this.config.dataTree !== false){\r\n\t\t\t\t\tindent = row.modules.dataTree.index;\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\r\n\t\t\texportRows.push(new ExportRow(row.type, exportCols, row.getComponent(), indent));\r\n\t\t});\r\n\r\n\t\treturn exportRows;\r\n\t}\r\n\r\n\tgenereateTableElement(list){\r\n\t\tvar table = document.createElement(\"table\"),\r\n\t\theaderEl = document.createElement(\"thead\"),\r\n\t\tbodyEl = document.createElement(\"tbody\"),\r\n\t\tstyles = this.lookupTableStyles(),\r\n\t\trowFormatter = this.table.options[\"rowFormatter\" + (this.colVisProp.charAt(0).toUpperCase() + this.colVisProp.slice(1))],\r\n\t\tsetup = {};\r\n\r\n\t\tsetup.rowFormatter = rowFormatter !== null ? rowFormatter : this.table.options.rowFormatter;\r\n\r\n\t\tif(this.table.options.dataTree &&this.config.dataTree !== false && this.table.modExists(\"columnCalcs\")){\r\n\t\t\tsetup.treeElementField = this.table.modules.dataTree.elementField;\r\n\t\t}\r\n\r\n\t\t//assign group header formatter\r\n\t\tsetup.groupHeader = this.table.options[\"groupHeader\" + (this.colVisProp.charAt(0).toUpperCase() + this.colVisProp.slice(1))];\r\n\r\n\t\tif(setup.groupHeader && !Array.isArray(setup.groupHeader)){\r\n\t\t\tsetup.groupHeader = [setup.groupHeader];\r\n\t\t}\r\n\r\n\t\ttable.classList.add(\"tabulator-print-table\");\r\n\r\n\t\tthis.mapElementStyles(this.table.columnManager.getHeadersElement(), headerEl, [\"border-top\", \"border-left\", \"border-right\", \"border-bottom\", \"background-color\", \"color\", \"font-weight\", \"font-family\", \"font-size\"]);\r\n\r\n\r\n\t\tif(list.length > 1000){\r\n\t\t\tconsole.warn(\"It may take a long time to render an HTML table with more than 1000 rows\");\r\n\t\t}\r\n\r\n\t\tlist.forEach((row, i) => {\r\n\t\t\tswitch(row.type){\r\n\t\t\t\tcase \"header\":\r\n\t\t\t\theaderEl.appendChild(this.genereateHeaderElement(row, setup, styles));\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"group\":\r\n\t\t\t\tbodyEl.appendChild(this.genereateGroupElement(row, setup, styles));\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"calc\":\r\n\t\t\t\tbodyEl.appendChild(this.genereateCalcElement(row, setup, styles));\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"row\":\r\n\t\t\t\tlet rowEl = this.genereateRowElement(row, setup, styles);\r\n\t\t\t\tthis.mapElementStyles(((i % 2) && styles.evenRow) ? styles.evenRow : styles.oddRow, rowEl, [\"border-top\", \"border-left\", \"border-right\", \"border-bottom\", \"color\", \"font-weight\", \"font-family\", \"font-size\", \"background-color\"]);\r\n\t\t\t\tbodyEl.appendChild(rowEl);\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tif(headerEl.innerHTML){\r\n\t\t\ttable.appendChild(headerEl);\r\n\t\t}\r\n\r\n\t\ttable.appendChild(bodyEl);\r\n\r\n\r\n\t\tthis.mapElementStyles(this.table.element, table, [\"border-top\", \"border-left\", \"border-right\", \"border-bottom\"]);\r\n\t\treturn table;\r\n\t}\r\n\r\n\tlookupTableStyles(){\r\n\t\tvar styles = {};\r\n\r\n\t\t//lookup row styles\r\n\t\tif(this.cloneTableStyle && window.getComputedStyle){\r\n\t\t\tstyles.oddRow = this.table.element.querySelector(\".tabulator-row-odd:not(.tabulator-group):not(.tabulator-calcs)\");\r\n\t\t\tstyles.evenRow = this.table.element.querySelector(\".tabulator-row-even:not(.tabulator-group):not(.tabulator-calcs)\");\r\n\t\t\tstyles.calcRow = this.table.element.querySelector(\".tabulator-row.tabulator-calcs\");\r\n\t\t\tstyles.firstRow = this.table.element.querySelector(\".tabulator-row:not(.tabulator-group):not(.tabulator-calcs)\");\r\n\t\t\tstyles.firstGroup = this.table.element.getElementsByClassName(\"tabulator-group\")[0];\r\n\r\n\t\t\tif(styles.firstRow){\r\n\t\t\t\tstyles.styleCells = styles.firstRow.getElementsByClassName(\"tabulator-cell\");\r\n\t\t\t\tstyles.firstCell = styles.styleCells[0];\r\n\t\t\t\tstyles.lastCell = styles.styleCells[styles.styleCells.length - 1];\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn styles;\r\n\t}\r\n\r\n\tgenereateHeaderElement(row, setup, styles){\r\n\t\tvar rowEl = document.createElement(\"tr\");\r\n\r\n\t\trow.columns.forEach((column) => {\r\n\t\t\tif(column){\r\n\t\t\t\tvar cellEl = document.createElement(\"th\");\r\n\t\t\t\tvar classNames = column.component._column.definition.cssClass ? column.component._column.definition.cssClass.split(\" \") : [];\r\n\r\n\t\t\t\tcellEl.colSpan = column.width;\r\n\t\t\t\tcellEl.rowSpan = column.height;\r\n\r\n\t\t\t\tcellEl.innerHTML = column.value;\r\n\r\n\t\t\t\tif(this.cloneTableStyle){\r\n\t\t\t\t\tcellEl.style.boxSizing = \"border-box\";\r\n\t\t\t\t}\r\n\r\n\t\t\t\tclassNames.forEach(function(className) {\r\n\t\t\t\t\tcellEl.classList.add(className);\r\n\t\t\t\t});\r\n\r\n\t\t\t\tthis.mapElementStyles(column.component.getElement(), cellEl, [\"text-align\", \"border-top\", \"border-left\", \"border-right\", \"border-bottom\", \"background-color\", \"color\", \"font-weight\", \"font-family\", \"font-size\"]);\r\n\t\t\t\tthis.mapElementStyles(column.component._column.contentElement, cellEl, [\"padding-top\", \"padding-left\", \"padding-right\", \"padding-bottom\"]);\r\n\r\n\t\t\t\tif(column.component._column.visible){\r\n\t\t\t\t\tthis.mapElementStyles(column.component.getElement(), cellEl, [\"width\"]);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tif(column.component._column.definition.width){\r\n\t\t\t\t\t\tcellEl.style.width = column.component._column.definition.width + \"px\";\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(column.component._column.parent){\r\n\t\t\t\t\tthis.mapElementStyles(column.component._column.parent.groupElement, cellEl, [\"border-top\"]);\r\n\t\t\t\t}\r\n\r\n\t\t\t\trowEl.appendChild(cellEl);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn rowEl;\r\n\t}\r\n\r\n\tgenereateGroupElement(row, setup, styles){\r\n\r\n\t\tvar rowEl = document.createElement(\"tr\"),\r\n\t\tcellEl = document.createElement(\"td\"),\r\n\t\tgroup = row.columns[0];\r\n\r\n\t\trowEl.classList.add(\"tabulator-print-table-row\");\r\n\r\n\t\tif(setup.groupHeader && setup.groupHeader[row.indent]){\r\n\t\t\tgroup.value = setup.groupHeader[row.indent](group.value, row.component._group.getRowCount(), row.component._group.getData(), row.component);\r\n\t\t}else{\r\n\t\t\tif(setup.groupHeader === false){\r\n\t\t\t\tgroup.value = group.value;\r\n\t\t\t}else{\r\n\t\t\t\tgroup.value = row.component._group.generator(group.value, row.component._group.getRowCount(), row.component._group.getData(), row.component);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tcellEl.colSpan = group.width;\r\n\t\tcellEl.innerHTML = group.value;\r\n\r\n\t\trowEl.classList.add(\"tabulator-print-table-group\");\r\n\t\trowEl.classList.add(\"tabulator-group-level-\" + row.indent);\r\n\r\n\t\tif(group.component.isVisible()){\r\n\t\t\trowEl.classList.add(\"tabulator-group-visible\");\r\n\t\t}\r\n\r\n\t\tthis.mapElementStyles(styles.firstGroup, rowEl, [\"border-top\", \"border-left\", \"border-right\", \"border-bottom\", \"color\", \"font-weight\", \"font-family\", \"font-size\", \"background-color\"]);\r\n\t\tthis.mapElementStyles(styles.firstGroup, cellEl, [\"padding-top\", \"padding-left\", \"padding-right\", \"padding-bottom\"]);\r\n\r\n\t\trowEl.appendChild(cellEl);\r\n\r\n\t\treturn rowEl;\r\n\t}\r\n\r\n\tgenereateCalcElement(row, setup, styles){\r\n\t\tvar rowEl = this.genereateRowElement(row, setup, styles);\r\n\r\n\t\trowEl.classList.add(\"tabulator-print-table-calcs\");\r\n\t\tthis.mapElementStyles(styles.calcRow, rowEl, [\"border-top\", \"border-left\", \"border-right\", \"border-bottom\", \"color\", \"font-weight\", \"font-family\", \"font-size\", \"background-color\"]);\r\n\r\n\t\treturn rowEl;\r\n\t}\r\n\r\n\tgenereateRowElement(row, setup, styles){\r\n\t\tvar rowEl = document.createElement(\"tr\");\r\n\r\n\t\trowEl.classList.add(\"tabulator-print-table-row\");\r\n\r\n\t\trow.columns.forEach((col) => {\r\n\r\n\t\t\tif(col){\r\n\t\t\t\tvar cellEl = document.createElement(\"td\"),\r\n\t\t\t\tcolumn = col.component._column,\r\n\t\t\t\tvalue = col.value;\r\n\r\n\t\t\t\tvar cellWrapper = {\r\n\t\t\t\t\tmodules:{},\r\n\t\t\t\t\tgetValue:function(){\r\n\t\t\t\t\t\treturn value;\r\n\t\t\t\t\t},\r\n\t\t\t\t\tgetField:function(){\r\n\t\t\t\t\t\treturn column.definition.field;\r\n\t\t\t\t\t},\r\n\t\t\t\t\tgetElement:function(){\r\n\t\t\t\t\t\treturn cellEl;\r\n\t\t\t\t\t},\r\n\t\t\t\t\tgetColumn:function(){\r\n\t\t\t\t\t\treturn column.getComponent();\r\n\t\t\t\t\t},\r\n\t\t\t\t\tgetData:function(){\r\n\t\t\t\t\t\treturn row.component.getData();\r\n\t\t\t\t\t},\r\n\t\t\t\t\tgetRow:function(){\r\n\t\t\t\t\t\treturn row.component;\r\n\t\t\t\t\t},\r\n\t\t\t\t\tgetComponent:function(){\r\n\t\t\t\t\t\treturn cellWrapper;\r\n\t\t\t\t\t},\r\n\t\t\t\t\tcolumn:column,\r\n\t\t\t\t};\r\n\r\n\t\t\t\tvar classNames = column.definition.cssClass ? column.definition.cssClass.split(\" \") : [];\r\n\r\n\t\t\t\tclassNames.forEach(function(className) {\r\n\t\t\t\t\tcellEl.classList.add(className);\r\n\t\t\t\t});\r\n\r\n\t\t\t\tif(this.table.modExists(\"format\") && this.config.formatCells !== false){\r\n\t\t\t\t\tvalue = this.table.modules.format.formatExportValue(cellWrapper, this.colVisProp);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tswitch(typeof value){\r\n\t\t\t\t\t\tcase \"object\":\r\n\t\t\t\t\t\tvalue = JSON.stringify(value);\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\tcase \"undefined\":\r\n\t\t\t\t\t\tcase \"null\":\r\n\t\t\t\t\t\tvalue = \"\";\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\tdefault:\r\n\t\t\t\t\t\tvalue = value;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(value instanceof Node){\r\n\t\t\t\t\tcellEl.appendChild(value);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tcellEl.innerHTML = value;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(styles.firstCell){\r\n\t\t\t\t\tthis.mapElementStyles(styles.firstCell, cellEl, [\"padding-top\", \"padding-left\", \"padding-right\", \"padding-bottom\", \"border-top\", \"border-left\", \"border-right\", \"border-bottom\", \"color\", \"font-weight\", \"font-family\", \"font-size\"]);\r\n\r\n\t\t\t\t\tif(column.definition.align){\r\n\t\t\t\t\t\tcellEl.style.textAlign = column.definition.align;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(this.table.options.dataTree && this.config.dataTree !== false){\r\n\t\t\t\t\tif((setup.treeElementField && setup.treeElementField == column.field) || (!setup.treeElementField && i == 0)){\r\n\t\t\t\t\t\tif(row.component._row.modules.dataTree.controlEl){\r\n\t\t\t\t\t\t\tcellEl.insertBefore(row.component._row.modules.dataTree.controlEl.cloneNode(true), cellEl.firstChild);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif(row.component._row.modules.dataTree.branchEl){\r\n\t\t\t\t\t\t\tcellEl.insertBefore(row.component._row.modules.dataTree.branchEl.cloneNode(true), cellEl.firstChild);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\trowEl.appendChild(cellEl);\r\n\r\n\t\t\t\tif(cellWrapper.modules.format && cellWrapper.modules.format.renderedCallback){\r\n\t\t\t\t\tcellWrapper.modules.format.renderedCallback();\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(setup.rowFormatter && this.config.formatCells !== false){\r\n\t\t\t\t\tsetup.rowFormatter(row.component);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn rowEl;\r\n\t}\r\n\r\n\tgenereateHTMLTable(list){\r\n\t\tvar holder = document.createElement(\"div\");\r\n\r\n\t\tholder.appendChild(this.genereateTableElement(list));\r\n\r\n\t\treturn holder.innerHTML;\r\n\t}\r\n\r\n\tgetHtml(visible, style, config, colVisProp){\r\n\t\tvar list = this.generateExportList(config || this.table.options.htmlOutputConfig, style, visible, colVisProp || \"htmlOutput\");\r\n\r\n\t\treturn this.genereateHTMLTable(list);\r\n\t}\r\n\r\n\tmapElementStyles(from, to, props){\r\n\t\tif(this.cloneTableStyle && from && to){\r\n\r\n\t\t\tvar lookup = {\r\n\t\t\t\t\"background-color\" : \"backgroundColor\",\r\n\t\t\t\t\"color\" : \"fontColor\",\r\n\t\t\t\t\"width\" : \"width\",\r\n\t\t\t\t\"font-weight\" : \"fontWeight\",\r\n\t\t\t\t\"font-family\" : \"fontFamily\",\r\n\t\t\t\t\"font-size\" : \"fontSize\",\r\n\t\t\t\t\"text-align\" : \"textAlign\",\r\n\t\t\t\t\"border-top\" : \"borderTop\",\r\n\t\t\t\t\"border-left\" : \"borderLeft\",\r\n\t\t\t\t\"border-right\" : \"borderRight\",\r\n\t\t\t\t\"border-bottom\" : \"borderBottom\",\r\n\t\t\t\t\"padding-top\" : \"paddingTop\",\r\n\t\t\t\t\"padding-left\" : \"paddingLeft\",\r\n\t\t\t\t\"padding-right\" : \"paddingRight\",\r\n\t\t\t\t\"padding-bottom\" : \"paddingBottom\",\r\n\t\t\t};\r\n\r\n\t\t\tif(window.getComputedStyle){\r\n\t\t\t\tvar fromStyle = window.getComputedStyle(from);\r\n\r\n\t\t\t\tprops.forEach(function(prop){\r\n\t\t\t\t\tto.style[lookup[prop]] = fromStyle.getPropertyValue(prop);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n\r\nExport.moduleName = \"export\";\r\n\r\nexport default Export;\r\n","export default {\r\n\r\n\t//equal to\r\n\t\"=\":function(filterVal, rowVal, rowData, filterParams){\r\n\t\treturn rowVal == filterVal ? true : false;\r\n\t},\r\n\r\n\t//less than\r\n\t\"<\":function(filterVal, rowVal, rowData, filterParams){\r\n\t\treturn rowVal < filterVal ? true : false;\r\n\t},\r\n\r\n\t//less than or equal to\r\n\t\"<=\":function(filterVal, rowVal, rowData, filterParams){\r\n\t\treturn rowVal <= filterVal ? true : false;\r\n\t},\r\n\r\n\t//greater than\r\n\t\">\":function(filterVal, rowVal, rowData, filterParams){\r\n\t\treturn rowVal > filterVal ? true : false;\r\n\t},\r\n\r\n\t//greater than or equal to\r\n\t\">=\":function(filterVal, rowVal, rowData, filterParams){\r\n\t\treturn rowVal >= filterVal ? true : false;\r\n\t},\r\n\r\n\t//not equal to\r\n\t\"!=\":function(filterVal, rowVal, rowData, filterParams){\r\n\t\treturn rowVal != filterVal ? true : false;\r\n\t},\r\n\r\n\t\"regex\":function(filterVal, rowVal, rowData, filterParams){\r\n\r\n\t\tif(typeof filterVal == \"string\"){\r\n\t\t\tfilterVal = new RegExp(filterVal);\r\n\t\t}\r\n\r\n\t\treturn filterVal.test(rowVal);\r\n\t},\r\n\r\n\t//contains the string\r\n\t\"like\":function(filterVal, rowVal, rowData, filterParams){\r\n\t\tif(filterVal === null || typeof filterVal === \"undefined\"){\r\n\t\t\treturn rowVal === filterVal ? true : false;\r\n\t\t}else{\r\n\t\t\tif(typeof rowVal !== 'undefined' && rowVal !== null){\r\n\t\t\t\treturn String(rowVal).toLowerCase().indexOf(filterVal.toLowerCase()) > -1;\r\n\t\t\t}\r\n\t\t\telse{\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\t//contains the keywords\r\n\t\"keywords\":function(filterVal, rowVal, rowData, filterParams){\r\n\t\tvar keywords = filterVal.toLowerCase().split(typeof filterParams.separator === \"undefined\" ? \" \" : filterParams.separator),\r\n\t\tvalue = String(rowVal === null || typeof rowVal === \"undefined\" ? \"\" : rowVal).toLowerCase(),\r\n\t\tmatches = [];\r\n\r\n\t\tkeywords.forEach((keyword) =>{\r\n\t\t\tif(value.includes(keyword)){\r\n\t\t\t\tmatches.push(true);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn filterParams.matchAll ? matches.length === keywords.length : !!matches.length;\r\n\t},\r\n\r\n\t//starts with the string\r\n\t\"starts\":function(filterVal, rowVal, rowData, filterParams){\r\n\t\tif(filterVal === null || typeof filterVal === \"undefined\"){\r\n\t\t\treturn rowVal === filterVal ? true : false;\r\n\t\t}else{\r\n\t\t\tif(typeof rowVal !== 'undefined' && rowVal !== null){\r\n\t\t\t\treturn String(rowVal).toLowerCase().startsWith(filterVal.toLowerCase());\r\n\t\t\t}\r\n\t\t\telse{\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\t//ends with the string\r\n\t\"ends\":function(filterVal, rowVal, rowData, filterParams){\r\n\t\tif(filterVal === null || typeof filterVal === \"undefined\"){\r\n\t\t\treturn rowVal === filterVal ? true : false;\r\n\t\t}else{\r\n\t\t\tif(typeof rowVal !== 'undefined' && rowVal !== null){\r\n\t\t\t\treturn String(rowVal).toLowerCase().endsWith(filterVal.toLowerCase());\r\n\t\t\t}\r\n\t\t\telse{\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\t//in array\r\n\t\"in\":function(filterVal, rowVal, rowData, filterParams){\r\n\t\tif(Array.isArray(filterVal)){\r\n\t\t\treturn filterVal.length ? filterVal.indexOf(rowVal) > -1 : true;\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Filter Error - filter value is not an array:\", filterVal);\r\n\t\t\treturn false;\r\n\t\t}\r\n\t},\r\n};","import Module from '../../core/Module.js';\r\n\r\nimport defaultFilters from './defaults/filters.js';\r\n\r\nclass Filter extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.filterList = []; //hold filter list\r\n\t\tthis.headerFilters = {}; //hold column filters\r\n\t\tthis.headerFilterColumns = []; //hold columns that use header filters\r\n\r\n\t\tthis.prevHeaderFilterChangeCheck = \"\";\r\n\t\tthis.prevHeaderFilterChangeCheck = \"{}\";\r\n\r\n\t\tthis.changed = false; //has filtering changed since last render\r\n\r\n\t\tthis.registerTableOption(\"filterMode\", \"local\"); //local or remote filtering\r\n\r\n\t\tthis.registerTableOption(\"initialFilter\", false); //initial filtering criteria\r\n\t\tthis.registerTableOption(\"initialHeaderFilter\", false); //initial header filtering criteria\r\n\t\tthis.registerTableOption(\"headerFilterLiveFilterDelay\", 300); //delay before updating column after user types in header filter\r\n\r\n\t\tthis.registerColumnOption(\"headerFilter\");\r\n\t\tthis.registerColumnOption(\"headerFilterPlaceholder\");\r\n\t\tthis.registerColumnOption(\"headerFilterParams\");\r\n\t\tthis.registerColumnOption(\"headerFilterEmptyCheck\");\r\n\t\tthis.registerColumnOption(\"headerFilterFunc\");\r\n\t\tthis.registerColumnOption(\"headerFilterFuncParams\");\r\n\t\tthis.registerColumnOption(\"headerFilterLiveFilter\");\r\n\r\n\t\tthis.registerTableFunction(\"searchRows\", this.searchRows.bind(this));\r\n\t\tthis.registerTableFunction(\"searchData\", this.searchData.bind(this));\r\n\r\n\t\tthis.registerTableFunction(\"setFilter\", this.userSetFilter.bind(this));\r\n\t\tthis.registerTableFunction(\"refreshFilter\", this.userRefreshFilter.bind(this));\r\n\t\tthis.registerTableFunction(\"addFilter\", this.userAddFilter.bind(this));\r\n\t\tthis.registerTableFunction(\"getFilters\", this.getFilters.bind(this));\r\n\t\tthis.registerTableFunction(\"setHeaderFilterFocus\", this.userSetHeaderFilterFocus.bind(this));\r\n\t\tthis.registerTableFunction(\"getHeaderFilterValue\", this.userGetHeaderFilterValue.bind(this));\r\n\t\tthis.registerTableFunction(\"setHeaderFilterValue\", this.userSetHeaderFilterValue.bind(this));\r\n\t\tthis.registerTableFunction(\"getHeaderFilters\", this.getHeaderFilters.bind(this));\r\n\t\tthis.registerTableFunction(\"removeFilter\", this.userRemoveFilter.bind(this));\r\n\t\tthis.registerTableFunction(\"clearFilter\", this.userClearFilter.bind(this));\r\n\t\tthis.registerTableFunction(\"clearHeaderFilter\", this.userClearHeaderFilter.bind(this));\r\n\r\n\t\tthis.registerComponentFunction(\"column\", \"headerFilterFocus\", this.setHeaderFilterFocus.bind(this));\r\n\t\tthis.registerComponentFunction(\"column\", \"reloadHeaderFilter\", this.reloadHeaderFilter.bind(this));\r\n\t\tthis.registerComponentFunction(\"column\", \"getHeaderFilterValue\", this.getHeaderFilterValue.bind(this));\r\n\t\tthis.registerComponentFunction(\"column\", \"setHeaderFilterValue\", this.setHeaderFilterValue.bind(this));\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tthis.subscribe(\"column-init\", this.initializeColumnHeaderFilter.bind(this));\r\n\t\tthis.subscribe(\"column-width-fit-before\", this.hideHeaderFilterElements.bind(this));\r\n\t\tthis.subscribe(\"column-width-fit-after\", this.showHeaderFilterElements.bind(this));\r\n\t\tthis.subscribe(\"table-built\", this.tableBuilt.bind(this));\r\n\r\n\t\tif(this.table.options.filterMode === \"remote\"){\r\n\t\t\tthis.subscribe(\"data-params\", this.remoteFilterParams.bind(this));\r\n\t\t}\r\n\r\n\t\tthis.registerDataHandler(this.filter.bind(this), 10);\r\n\t}\r\n\r\n\ttableBuilt(){\r\n\t\tif(this.table.options.initialFilter){\r\n\t\t\tthis.setFilter(this.table.options.initialFilter);\r\n\t\t}\r\n\r\n\t\tif(this.table.options.initialHeaderFilter){\r\n\t\t\tthis.table.options.initialHeaderFilter.forEach((item) => {\r\n\r\n\t\t\t\tvar column = this.table.columnManager.findColumn(item.field);\r\n\r\n\t\t\t\tif(column){\r\n\t\t\t\t\tthis.setHeaderFilterValue(column, item.value);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.warn(\"Column Filter Error - No matching column found:\", item.field);\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tremoteFilterParams(data, config, silent, params){\r\n\t\tparams.filter = this.getFilters(true, true);\r\n\t\treturn params;\r\n\t}\r\n\r\n\t///////////////////////////////////\r\n\t///////// Table Functions /////////\r\n\t///////////////////////////////////\r\n\r\n\t//set standard filters\r\n\tuserSetFilter(field, type, value, params){\r\n\t\tthis.setFilter(field, type, value, params);\r\n\t\tthis.refreshFilter();\r\n\t}\r\n\r\n\t//set standard filters\r\n\tuserRefreshFilter(){\r\n\t\tthis.refreshFilter();\r\n\t}\r\n\r\n\t//add filter to array\r\n\tuserAddFilter(field, type, value, params){\r\n\t\tthis.addFilter(field, type, value, params);\r\n\t\tthis.refreshFilter();\r\n\t}\r\n\r\n\tuserSetHeaderFilterFocus(field){\r\n\t\tvar column = this.table.columnManager.findColumn(field);\r\n\r\n\t\tif(column){\r\n\t\t\tthis.setHeaderFilterFocus(column);\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Column Filter Focus Error - No matching column found:\", field);\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\tuserGetHeaderFilterValue(field) {\r\n\t\tvar column = this.table.columnManager.findColumn(field);\r\n\r\n\t\tif(column){\r\n\t\t\treturn this.getHeaderFilterValue(column);\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Column Filter Error - No matching column found:\", field);\r\n\t\t}\r\n\t}\r\n\r\n\tuserSetHeaderFilterValue(field, value){\r\n\t\tvar column = this.table.columnManager.findColumn(field);\r\n\r\n\t\tif(column){\r\n\t\t\tthis.setHeaderFilterValue(column, value);\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Column Filter Error - No matching column found:\", field);\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\t//remove filter from array\r\n\tuserRemoveFilter(field, type, value){\r\n\t\tthis.removeFilter(field, type, value);\r\n\t\tthis.refreshFilter();\r\n\t}\r\n\r\n\t//clear filters\r\n\tuserClearFilter(all){\r\n\t\tthis.clearFilter(all);\r\n\t\tthis.refreshFilter();\r\n\t}\r\n\r\n\t//clear header filters\r\n\tuserClearHeaderFilter(){\r\n\t\tthis.clearHeaderFilter();\r\n\t\tthis.refreshFilter();\r\n\t}\r\n\r\n\r\n\t//search for specific row components\r\n\tsearchRows(field, type, value){\r\n\t\treturn this.search(\"rows\", field, type, value);\r\n\t}\r\n\r\n\t//search for specific data\r\n\tsearchData(field, type, value){\r\n\t\treturn this.search(\"data\", field, type, value);\r\n\t}\r\n\r\n\t///////////////////////////////////\r\n\t///////// Internal Logic //////////\r\n\t///////////////////////////////////\r\n\r\n\tinitializeColumnHeaderFilter(column){\r\n\t\tvar def = column.definition;\r\n\r\n\t\tif(def.headerFilter){\r\n\r\n\t\t\tif(typeof def.headerFilterPlaceholder !== \"undefined\" && def.field){\r\n\t\t\t\tthis.module(\"localize\").setHeaderFilterColumnPlaceholder(def.field, def.headerFilterPlaceholder);\r\n\t\t\t}\r\n\r\n\t\t\tthis.initializeColumn(column);\r\n\t\t}\r\n\t}\r\n\r\n\t//initialize column header filter\r\n\tinitializeColumn(column, value){\r\n\t\tvar self = this,\r\n\t\tfield = column.getField(),\r\n\t\tparams;\r\n\r\n\t\t//handle successfull value change\r\n\t\tfunction success(value){\r\n\t\t\tvar filterType = (column.modules.filter.tagType == \"input\" && column.modules.filter.attrType == \"text\") || column.modules.filter.tagType == \"textarea\" ? \"partial\" : \"match\",\r\n\t\t\ttype = \"\",\r\n\t\t\tfilterChangeCheck = \"\",\r\n\t\t\tfilterFunc;\r\n\r\n\t\t\tif(typeof column.modules.filter.prevSuccess === \"undefined\" || column.modules.filter.prevSuccess !== value){\r\n\r\n\t\t\t\tcolumn.modules.filter.prevSuccess = value;\r\n\r\n\t\t\t\tif(!column.modules.filter.emptyFunc(value)){\r\n\t\t\t\t\tcolumn.modules.filter.value = value;\r\n\r\n\t\t\t\t\tswitch(typeof column.definition.headerFilterFunc){\r\n\t\t\t\t\t\tcase \"string\":\r\n\t\t\t\t\t\tif(Filter.filters[column.definition.headerFilterFunc]){\r\n\t\t\t\t\t\t\ttype = column.definition.headerFilterFunc;\r\n\t\t\t\t\t\t\tfilterFunc = function(data){\r\n\t\t\t\t\t\t\t\tvar params = column.definition.headerFilterFuncParams || {};\r\n\t\t\t\t\t\t\t\tvar fieldVal = column.getFieldValue(data);\r\n\r\n\t\t\t\t\t\t\t\tparams = typeof params === \"function\" ? params(value, fieldVal, data) : params;\r\n\r\n\t\t\t\t\t\t\t\treturn Filter.filters[column.definition.headerFilterFunc](value, fieldVal, data, params);\r\n\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\tconsole.warn(\"Header Filter Error - Matching filter function not found: \", column.definition.headerFilterFunc);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\tcase \"function\":\r\n\t\t\t\t\t\tfilterFunc = function(data){\r\n\t\t\t\t\t\t\tvar params = column.definition.headerFilterFuncParams || {};\r\n\t\t\t\t\t\t\tvar fieldVal = column.getFieldValue(data);\r\n\r\n\t\t\t\t\t\t\tparams = typeof params === \"function\" ? params(value, fieldVal, data) : params;\r\n\r\n\t\t\t\t\t\t\treturn column.definition.headerFilterFunc(value, fieldVal, data, params);\r\n\t\t\t\t\t\t};\r\n\r\n\t\t\t\t\t\ttype = filterFunc;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif(!filterFunc){\r\n\t\t\t\t\t\tswitch(filterType){\r\n\t\t\t\t\t\t\tcase \"partial\":\r\n\t\t\t\t\t\t\tfilterFunc = function(data){\r\n\t\t\t\t\t\t\t\tvar colVal = column.getFieldValue(data);\r\n\r\n\t\t\t\t\t\t\t\tif(typeof colVal !== 'undefined' && colVal !== null){\r\n\t\t\t\t\t\t\t\t\treturn String(colVal).toLowerCase().indexOf(String(value).toLowerCase()) > -1;\r\n\t\t\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t\ttype = \"like\";\r\n\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\t\tdefault:\r\n\t\t\t\t\t\t\tfilterFunc = function(data){\r\n\t\t\t\t\t\t\t\treturn column.getFieldValue(data) == value;\r\n\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t\ttype = \"=\";\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tself.headerFilters[field] = {value:value, func:filterFunc, type:type, params:params || {}};\r\n\r\n\t\t\t\t}else{\r\n\t\t\t\t\tdelete self.headerFilters[field];\r\n\t\t\t\t}\r\n\r\n\t\t\t\tfilterChangeCheck = JSON.stringify(self.headerFilters);\r\n\r\n\t\t\t\tif(self.prevHeaderFilterChangeCheck !== filterChangeCheck){\r\n\t\t\t\t\tself.prevHeaderFilterChangeCheck = filterChangeCheck;\r\n\r\n\t\t\t\t\tself.trackChanges();\r\n\t\t\t\t\tself.refreshFilter();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\tcolumn.modules.filter = {\r\n\t\t\tsuccess:success,\r\n\t\t\tattrType:false,\r\n\t\t\ttagType:false,\r\n\t\t\temptyFunc:false,\r\n\t\t};\r\n\r\n\t\tthis.generateHeaderFilterElement(column);\r\n\t}\r\n\r\n\tgenerateHeaderFilterElement(column, initialValue, reinitialize){\r\n\t\tvar self = this,\r\n\t\tsuccess = column.modules.filter.success,\r\n\t\tfield = column.getField(),\r\n\t\tfilterElement, editor, editorElement, cellWrapper, typingTimer, searchTrigger, params;\r\n\r\n\t\t//handle aborted edit\r\n\t\tfunction cancel(){}\r\n\r\n\t\tif(column.modules.filter.headerElement && column.modules.filter.headerElement.parentNode){\r\n\t\t\tcolumn.contentElement.removeChild(column.modules.filter.headerElement.parentNode);\r\n\t\t}\r\n\r\n\t\tif(field){\r\n\r\n\t\t\t//set empty value function\r\n\t\t\tcolumn.modules.filter.emptyFunc = column.definition.headerFilterEmptyCheck || function(value){\r\n\t\t\t\treturn !value && value !== \"0\" && value !== 0;\r\n\t\t\t};\r\n\r\n\t\t\tfilterElement = document.createElement(\"div\");\r\n\t\t\tfilterElement.classList.add(\"tabulator-header-filter\");\r\n\r\n\t\t\t//set column editor\r\n\t\t\tswitch(typeof column.definition.headerFilter){\r\n\t\t\t\tcase \"string\":\r\n\t\t\t\tif(self.table.modules.edit.editors[column.definition.headerFilter]){\r\n\t\t\t\t\teditor = self.table.modules.edit.editors[column.definition.headerFilter];\r\n\r\n\t\t\t\t\tif((column.definition.headerFilter === \"tick\" || column.definition.headerFilter === \"tickCross\") && !column.definition.headerFilterEmptyCheck){\r\n\t\t\t\t\t\tcolumn.modules.filter.emptyFunc = function(value){\r\n\t\t\t\t\t\t\treturn value !== true && value !== false;\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t}\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.warn(\"Filter Error - Cannot build header filter, No such editor found: \", column.definition.editor);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"function\":\r\n\t\t\t\teditor = column.definition.headerFilter;\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"boolean\":\r\n\t\t\t\tif(column.modules.edit && column.modules.edit.editor){\r\n\t\t\t\t\teditor = column.modules.edit.editor;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tif(column.definition.formatter && self.table.modules.edit.editors[column.definition.formatter]){\r\n\t\t\t\t\t\teditor = self.table.modules.edit.editors[column.definition.formatter];\r\n\r\n\t\t\t\t\t\tif((column.definition.formatter === \"tick\" || column.definition.formatter === \"tickCross\") && !column.definition.headerFilterEmptyCheck){\r\n\t\t\t\t\t\t\tcolumn.modules.filter.emptyFunc = function(value){\r\n\t\t\t\t\t\t\t\treturn value !== true && value !== false;\r\n\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\teditor = self.table.modules.edit.editors[\"input\"];\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\r\n\t\t\tif(editor){\r\n\r\n\t\t\t\tcellWrapper = {\r\n\t\t\t\t\tgetValue:function(){\r\n\t\t\t\t\t\treturn typeof initialValue !== \"undefined\" ? initialValue : \"\";\r\n\t\t\t\t\t},\r\n\t\t\t\t\tgetField:function(){\r\n\t\t\t\t\t\treturn column.definition.field;\r\n\t\t\t\t\t},\r\n\t\t\t\t\tgetElement:function(){\r\n\t\t\t\t\t\treturn filterElement;\r\n\t\t\t\t\t},\r\n\t\t\t\t\tgetColumn:function(){\r\n\t\t\t\t\t\treturn column.getComponent();\r\n\t\t\t\t\t},\r\n\t\t\t\t\tgetRow:function(){\r\n\t\t\t\t\t\treturn {\r\n\t\t\t\t\t\t\tnormalizeHeight:function(){\r\n\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t}\r\n\t\t\t\t};\r\n\r\n\t\t\t\tparams = column.definition.headerFilterParams || {};\r\n\r\n\t\t\t\tparams = typeof params === \"function\" ? params.call(self.table) : params;\r\n\r\n\t\t\t\teditorElement = editor.call(this.table.modules.edit, cellWrapper, function(){}, success, cancel, params);\r\n\r\n\t\t\t\tif(!editorElement){\r\n\t\t\t\t\tconsole.warn(\"Filter Error - Cannot add filter to \" + field + \" column, editor returned a value of false\");\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(!(editorElement instanceof Node)){\r\n\t\t\t\t\tconsole.warn(\"Filter Error - Cannot add filter to \" + field + \" column, editor should return an instance of Node, the editor returned:\", editorElement);\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//set Placeholder Text\r\n\t\t\t\tif(field){\r\n\t\t\t\t\tself.langBind(\"headerFilters|columns|\" + column.definition.field, function(value){\r\n\t\t\t\t\t\teditorElement.setAttribute(\"placeholder\", typeof value !== \"undefined\" && value ? value : self.langText(\"headerFilters|default\"));\r\n\t\t\t\t\t});\r\n\t\t\t\t}else{\r\n\t\t\t\t\tself.langBind(\"headerFilters|default\", function(value){\r\n\t\t\t\t\t\teditorElement.setAttribute(\"placeholder\", value);\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//focus on element on click\r\n\t\t\t\teditorElement.addEventListener(\"click\", function(e){\r\n\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\teditorElement.focus();\r\n\t\t\t\t});\r\n\r\n\t\t\t\teditorElement.addEventListener(\"focus\", (e) => {\r\n\t\t\t\t\tvar left = this.table.columnManager.element.scrollLeft;\r\n\r\n\t\t\t\t\tif(left !== this.table.rowManager.element.scrollLeft){\r\n\t\t\t\t\t\tthis.table.rowManager.scrollHorizontal(left);\r\n\t\t\t\t\t\tthis.table.columnManager.scrollHorizontal(left);\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\t//live update filters as user types\r\n\t\t\t\ttypingTimer = false;\r\n\r\n\t\t\t\tsearchTrigger = function(e){\r\n\t\t\t\t\tif(typingTimer){\r\n\t\t\t\t\t\tclearTimeout(typingTimer);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\ttypingTimer = setTimeout(function(){\r\n\t\t\t\t\t\tsuccess(editorElement.value);\r\n\t\t\t\t\t},self.table.options.headerFilterLiveFilterDelay);\r\n\t\t\t\t};\r\n\r\n\t\t\t\tcolumn.modules.filter.headerElement = editorElement;\r\n\t\t\t\tcolumn.modules.filter.attrType = editorElement.hasAttribute(\"type\") ? editorElement.getAttribute(\"type\").toLowerCase() : \"\" ;\r\n\t\t\t\tcolumn.modules.filter.tagType = editorElement.tagName.toLowerCase();\r\n\r\n\t\t\t\tif(column.definition.headerFilterLiveFilter !== false){\r\n\r\n\t\t\t\t\tif (\r\n\t\t\t\t\t\t!(\r\n\t\t\t\t\t\t\tcolumn.definition.headerFilter === 'autocomplete' ||\r\n\t\t\t\t\t\t\tcolumn.definition.headerFilter === 'tickCross' ||\r\n\t\t\t\t\t\t\t((column.definition.editor === 'autocomplete' ||\r\n\t\t\t\t\t\t\t\tcolumn.definition.editor === 'tickCross') &&\r\n\t\t\t\t\t\t\tcolumn.definition.headerFilter === true)\r\n\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t) {\r\n\t\t\t\t\t\teditorElement.addEventListener(\"keyup\", searchTrigger);\r\n\t\t\t\t\teditorElement.addEventListener(\"search\", searchTrigger);\r\n\r\n\r\n\t\t\t\t\t//update number filtered columns on change\r\n\t\t\t\t\tif(column.modules.filter.attrType == \"number\"){\r\n\t\t\t\t\t\teditorElement.addEventListener(\"change\", function(e){\r\n\t\t\t\t\t\t\tsuccess(editorElement.value);\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t//change text inputs to search inputs to allow for clearing of field\r\n\t\t\t\t\tif(column.modules.filter.attrType == \"text\" && this.table.browser !== \"ie\"){\r\n\t\t\t\t\t\teditorElement.setAttribute(\"type\", \"search\");\r\n\t\t\t\t\t\t// editorElement.off(\"change blur\"); //prevent blur from triggering filter and preventing selection click\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\t\t//prevent input and select elements from propegating click to column sorters etc\r\n\t\t\t\t\tif(column.modules.filter.tagType == \"input\" || column.modules.filter.tagType == \"select\" || column.modules.filter.tagType == \"textarea\"){\r\n\t\t\t\t\t\teditorElement.addEventListener(\"mousedown\",function(e){\r\n\t\t\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tfilterElement.appendChild(editorElement);\r\n\r\n\t\t\t\tcolumn.contentElement.appendChild(filterElement);\r\n\r\n\t\t\t\tif(!reinitialize){\r\n\t\t\t\t\tself.headerFilterColumns.push(column);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Filter Error - Cannot add header filter, column has no field set:\", column.definition.title);\r\n\t\t}\r\n\t}\r\n\r\n\t//hide all header filter elements (used to ensure correct column widths in \"fitData\" layout mode)\r\n\thideHeaderFilterElements(){\r\n\t\tthis.headerFilterColumns.forEach(function(column){\r\n\t\t\tif(column.modules.filter && column.modules.filter.headerElement){\r\n\t\t\t\tcolumn.modules.filter.headerElement.style.display = 'none';\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t//show all header filter elements (used to ensure correct column widths in \"fitData\" layout mode)\r\n\tshowHeaderFilterElements(){\r\n\t\tthis.headerFilterColumns.forEach(function(column){\r\n\t\t\tif(column.modules.filter && column.modules.filter.headerElement){\r\n\t\t\t\tcolumn.modules.filter.headerElement.style.display = '';\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t//programatically set focus of header filter\r\n\tsetHeaderFilterFocus(column){\r\n\t\tif(column.modules.filter && column.modules.filter.headerElement){\r\n\t\t\tcolumn.modules.filter.headerElement.focus();\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Column Filter Focus Error - No header filter set on column:\", column.getField());\r\n\t\t}\r\n\t}\r\n\r\n\t//programmatically get value of header filter\r\n\tgetHeaderFilterValue(column){\r\n\t\tif(column.modules.filter && column.modules.filter.headerElement){\r\n\t\t\treturn column.modules.filter.headerElement.value;\r\n\t\t} else {\r\n\t\t\tconsole.warn(\"Column Filter Error - No header filter set on column:\", column.getField());\r\n\t\t}\r\n\t}\r\n\r\n\t//programatically set value of header filter\r\n\tsetHeaderFilterValue(column, value){\r\n\t\tif (column){\r\n\t\t\tif(column.modules.filter && column.modules.filter.headerElement){\r\n\t\t\t\tthis.generateHeaderFilterElement(column, value, true);\r\n\t\t\t\tcolumn.modules.filter.success(value);\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Column Filter Error - No header filter set on column:\", column.getField());\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\treloadHeaderFilter(column){\r\n\t\tif (column){\r\n\t\t\tif(column.modules.filter && column.modules.filter.headerElement){\r\n\t\t\t\tthis.generateHeaderFilterElement(column, column.modules.filter.value, true);\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Column Filter Error - No header filter set on column:\", column.getField());\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\trefreshFilter(){\r\n\t\tif(this.table.options.filterMode === \"remote\"){\r\n\t\t\tthis.reloadData();\r\n\t\t}else{\r\n\t\t\tthis.refreshData()\r\n\t\t}\r\n\r\n\t\t//TODO - Persist left position of row manager\r\n\t\t// left = this.scrollLeft;\r\n\t\t// this.scrollHorizontal(left);\r\n\t}\r\n\r\n\t//check if the filters has changed since last use\r\n\ttrackChanges(){\r\n\t\tthis.changed = true;\r\n\t\tthis.dispatch(\"filter-changed\");\r\n\t}\r\n\r\n\t//check if the filters has changed since last use\r\n\thasChanged(){\r\n\t\tvar changed = this.changed;\r\n\t\tthis.changed = false;\r\n\t\treturn changed;\r\n\t}\r\n\r\n\t//set standard filters\r\n\tsetFilter(field, type, value, params){\r\n\t\tthis.filterList = [];\r\n\r\n\t\tif(!Array.isArray(field)){\r\n\t\t\tfield = [{field:field, type:type, value:value, params:params}];\r\n\t\t}\r\n\r\n\t\tthis.addFilter(field);\r\n\t}\r\n\r\n\t//add filter to array\r\n\taddFilter(field, type, value, params){\r\n\t\tvar changed = false;\r\n\r\n\t\tif(!Array.isArray(field)){\r\n\t\t\tfield = [{field:field, type:type, value:value, params:params}];\r\n\t\t}\r\n\r\n\t\tfield.forEach((filter) => {\r\n\r\n\t\t\tfilter = this.findFilter(filter);\r\n\r\n\t\t\tif(filter){\r\n\t\t\t\tthis.filterList.push(filter);\r\n\t\t\t\tthis.changed = true;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tif(changed){\r\n\t\t\tthis.trackChanges();\r\n\t\t}\r\n\t}\r\n\r\n\tfindFilter(filter){\r\n\t\tvar column;\r\n\r\n\t\tif(Array.isArray(filter)){\r\n\t\t\treturn this.findSubFilters(filter);\r\n\t\t}\r\n\r\n\t\tvar filterFunc = false;\r\n\r\n\t\tif(typeof filter.field == \"function\"){\r\n\t\t\tfilterFunc = function(data){\r\n\t\t\t\treturn filter.field(data, filter.type || {})// pass params to custom filter function\r\n\t\t\t};\r\n\t\t}else{\r\n\r\n\t\t\tif(Filter.filters[filter.type]){\r\n\r\n\t\t\t\tcolumn = this.table.columnManager.getColumnByField(filter.field);\r\n\r\n\t\t\t\tif(column){\r\n\t\t\t\t\tfilterFunc = function(data){\r\n\t\t\t\t\t\treturn Filter.filters[filter.type](filter.value, column.getFieldValue(data), data, filter.params || {});\r\n\t\t\t\t\t};\r\n\t\t\t\t}else{\r\n\t\t\t\t\tfilterFunc = function(data){\r\n\t\t\t\t\t\treturn Filter.filters[filter.type](filter.value, data[filter.field], data, filter.params || {});\r\n\t\t\t\t\t};\r\n\t\t\t\t}\r\n\r\n\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Filter Error - No such filter type found, ignoring: \", filter.type);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfilter.func = filterFunc;\r\n\r\n\t\treturn filter.func ? filter : false;\r\n\t}\r\n\r\n\tfindSubFilters(filters){\r\n\t\tvar output = [];\r\n\r\n\t\tfilters.forEach((filter) => {\r\n\t\t\tfilter = this.findFilter(filter);\r\n\r\n\t\t\tif(filter){\r\n\t\t\t\toutput.push(filter);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn output.length ? output : false;\r\n\t}\r\n\r\n\t//get all filters\r\n\tgetFilters(all, ajax){\r\n\t\tvar output = [];\r\n\r\n\t\tif(all){\r\n\t\t\toutput = this.getHeaderFilters();\r\n\t\t}\r\n\r\n\t\tif(ajax){\r\n\t\t\toutput.forEach(function(item){\r\n\t\t\t\tif(typeof item.type == \"function\"){\r\n\t\t\t\t\titem.type = \"function\";\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\toutput = output.concat(this.filtersToArray(this.filterList, ajax));\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\t//filter to Object\r\n\tfiltersToArray(filterList, ajax){\r\n\t\tvar output = [];\r\n\r\n\t\tfilterList.forEach((filter) => {\r\n\t\t\tvar item;\r\n\r\n\t\t\tif(Array.isArray(filter)){\r\n\t\t\t\toutput.push(this.filtersToArray(filter, ajax));\r\n\t\t\t}else{\r\n\t\t\t\titem = {field:filter.field, type:filter.type, value:filter.value}\r\n\r\n\t\t\t\tif(ajax){\r\n\t\t\t\t\tif(typeof item.type == \"function\"){\r\n\t\t\t\t\t\titem.type = \"function\";\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\toutput.push(item);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\t//get all filters\r\n\tgetHeaderFilters(){\r\n\t\tvar output = [];\r\n\r\n\t\tfor(var key in this.headerFilters){\r\n\t\t\toutput.push({field:key, type:this.headerFilters[key].type, value:this.headerFilters[key].value});\r\n\t\t}\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\t//remove filter from array\r\n\tremoveFilter(field, type, value){\r\n\t\tvar changed = false;\r\n\r\n\t\tif(!Array.isArray(field)){\r\n\t\t\tfield = [{field:field, type:type, value:value}];\r\n\t\t}\r\n\r\n\t\tfield.forEach((filter) => {\r\n\t\t\tvar index = -1;\r\n\r\n\t\t\tif(typeof filter.field == \"object\"){\r\n\t\t\t\tindex = this.filterList.findIndex((element) => {\r\n\t\t\t\t\treturn filter === element;\r\n\t\t\t\t});\r\n\t\t\t}else{\r\n\t\t\t\tindex = this.filterList.findIndex((element) => {\r\n\t\t\t\t\treturn filter.field === element.field && filter.type === element.type && filter.value === element.value;\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\tif(index > -1){\r\n\t\t\t\tthis.filterList.splice(index, 1);\r\n\t\t\t\tchanged = true;\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Filter Error - No matching filter type found, ignoring: \", filter.type);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tthis.trackChanges();\r\n\t}\r\n\r\n\t//clear filters\r\n\tclearFilter(all){\r\n\t\tthis.filterList = [];\r\n\r\n\t\tif(all){\r\n\t\t\tthis.clearHeaderFilter();\r\n\t\t}\r\n\r\n\t\tthis.trackChanges();\r\n\t}\r\n\r\n\t//clear header filters\r\n\tclearHeaderFilter(){\r\n\t\tthis.headerFilters = {};\r\n\t\tthis.prevHeaderFilterChangeCheck = \"{}\";\r\n\r\n\t\tthis.headerFilterColumns.forEach((column) => {\r\n\t\t\tif(typeof column.modules.filter.value !== \"undefined\"){\r\n\t\t\t\tdelete column.modules.filter.value;\r\n\t\t\t}\r\n\t\t\tcolumn.modules.filter.prevSuccess = undefined;\r\n\t\t\tthis.reloadHeaderFilter(column);\r\n\t\t});\r\n\r\n\t\tthis.trackChanges();\r\n\t}\r\n\r\n\t//search data and return matching rows\r\n\tsearch (searchType, field, type, value){\r\n\t\tvar activeRows = [],\r\n\t\tfilterList = [];\r\n\r\n\t\tif(!Array.isArray(field)){\r\n\t\t\tfield = [{field:field, type:type, value:value}];\r\n\t\t}\r\n\r\n\t\tfield.forEach((filter) => {\r\n\t\t\tfilter = this.findFilter(filter);\r\n\r\n\t\t\tif(filter){\r\n\t\t\t\tfilterList.push(filter);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tthis.table.rowManager.rows.forEach((row) => {\r\n\t\t\tvar match = true;\r\n\r\n\t\t\tfilterList.forEach((filter) => {\r\n\t\t\t\tif(!this.filterRecurse(filter, row.getData())){\r\n\t\t\t\t\tmatch = false;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tif(match){\r\n\t\t\t\tactiveRows.push(searchType === \"data\" ? row.getData(\"data\") : row.getComponent());\r\n\t\t\t}\r\n\r\n\t\t});\r\n\r\n\t\treturn activeRows;\r\n\t}\r\n\r\n\t//filter row array\r\n\tfilter(rowList, filters){\r\n\t\tvar activeRows = [],\r\n\t\tactiveRowComponents = [];\r\n\r\n\t\tif(this.subscribedExternal(\"dataFiltering\")){\r\n\t\t\tthis.dispatchExternal(\"dataFiltering\", this.getFilters());\r\n\t\t}\r\n\r\n\t\tif(this.table.options.filterMode !== \"remote\" && (this.filterList.length || Object.keys(this.headerFilters).length)){\r\n\r\n\t\t\trowList.forEach((row) => {\r\n\t\t\t\tif(this.filterRow(row)){\r\n\t\t\t\t\tactiveRows.push(row);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t}else{\r\n\t\t\tactiveRows = rowList.slice(0);\r\n\t\t}\r\n\r\n\t\tif(this.subscribedExternal(\"dataFiltered\")){\r\n\r\n\t\t\tactiveRows.forEach((row) => {\r\n\t\t\t\tactiveRowComponents.push(row.getComponent());\r\n\t\t\t});\r\n\r\n\t\t\tthis.dispatchExternal(\"dataFiltered\", this.getFilters(), activeRowComponents);\r\n\t\t}\r\n\r\n\t\treturn activeRows;\r\n\t}\r\n\r\n\t//filter individual row\r\n\tfilterRow(row, filters){\r\n\t\tvar match = true,\r\n\t\tdata = row.getData();\r\n\r\n\t\tthis.filterList.forEach((filter) => {\r\n\t\t\tif(!this.filterRecurse(filter, data)){\r\n\t\t\t\tmatch = false;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\r\n\t\tfor(var field in this.headerFilters){\r\n\t\t\tif(!this.headerFilters[field].func(data)){\r\n\t\t\t\tmatch = false;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn match;\r\n\t}\r\n\r\n\tfilterRecurse(filter, data){\r\n\t\tvar match = false;\r\n\r\n\t\tif(Array.isArray(filter)){\r\n\t\t\tfilter.forEach((subFilter) => {\r\n\t\t\t\tif(this.filterRecurse(subFilter, data)){\r\n\t\t\t\t\tmatch = true;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tmatch = filter.func(data);\r\n\t\t}\r\n\r\n\t\treturn match;\r\n\t}\r\n}\r\n\r\nFilter.moduleName = \"filter\";\r\n\r\n//load defaults\r\nFilter.filters = defaultFilters;\r\n\r\nexport default Filter;","export default function(cell, formatterParams, onRendered){\r\n\treturn this.emptyToSpace(this.sanitizeHTML(cell.getValue()));\r\n};","import plaintext from './formatters/plaintext.js';\r\nimport html from './formatters/html.js';\r\nimport textarea from './formatters/textarea.js';\r\nimport money from './formatters/money.js';\r\nimport link from './formatters/link.js';\r\nimport image from './formatters/image.js';\r\nimport tickCross from './formatters/tickCross.js';\r\nimport datetime from './formatters/datetime.js';\r\nimport datetimediff from './formatters/datetimediff.js';\r\nimport lookup from './formatters/lookup.js';\r\nimport star from './formatters/star.js';\r\nimport traffic from './formatters/traffic.js';\r\nimport progress from './formatters/progress.js';\r\nimport color from './formatters/color.js';\r\nimport buttonTick from './formatters/buttonTick.js';\r\nimport buttonCross from './formatters/buttonCross.js';\r\nimport rownum from './formatters/rownum.js';\r\nimport handle from './formatters/handle.js';\r\nimport responsiveCollapse from './formatters/responsiveCollapse.js';\r\nimport rowSelection from './formatters/rowSelection.js';\r\n\r\nexport default {\r\n\tplaintext:plaintext,\r\n\thtml:html,\r\n\ttextarea:textarea,\r\n\tmoney:money,\r\n\tlink:link,\r\n\timage:image,\r\n\ttickCross:tickCross,\r\n\tdatetime:datetime,\r\n\tdatetimediff:datetimediff,\r\n\tlookup:lookup,\r\n\tstar:star,\r\n\ttraffic:traffic,\r\n\tprogress:progress,\r\n\tcolor:color,\r\n\tbuttonTick:buttonTick,\r\n\tbuttonCross:buttonCross,\r\n\trownum:rownum,\r\n\thandle:handle,\r\n\tresponsiveCollapse:responsiveCollapse,\r\n\trowSelection:rowSelection,\r\n};","export default function(cell, formatterParams, onRendered){\r\n\treturn cell.getValue();\r\n};","export default function(cell, formatterParams, onRendered){\r\n\tcell.getElement().style.whiteSpace = \"pre-wrap\";\r\n\treturn this.emptyToSpace(this.sanitizeHTML(cell.getValue()));\r\n};","export default function(cell, formatterParams, onRendered){\r\n\tvar floatVal = parseFloat(cell.getValue()),\r\n\tnumber, integer, decimal, rgx;\r\n\r\n\tvar decimalSym = formatterParams.decimal || \".\";\r\n\tvar thousandSym = formatterParams.thousand || \",\";\r\n\tvar symbol = formatterParams.symbol || \"\";\r\n\tvar after = !!formatterParams.symbolAfter;\r\n\tvar precision = typeof formatterParams.precision !== \"undefined\" ? formatterParams.precision : 2;\r\n\r\n\tif(isNaN(floatVal)){\r\n\t\treturn this.emptyToSpace(this.sanitizeHTML(cell.getValue()));\r\n\t}\r\n\r\n\tnumber = precision !== false ? floatVal.toFixed(precision) : floatVal;\r\n\tnumber = String(number).split(\".\");\r\n\r\n\tinteger = number[0];\r\n\tdecimal = number.length > 1 ? decimalSym + number[1] : \"\";\r\n\r\n\trgx = /(\\d+)(\\d{3})/;\r\n\r\n\twhile (rgx.test(integer)){\r\n\t\tinteger = integer.replace(rgx, \"$1\" + thousandSym + \"$2\");\r\n\t}\r\n\r\n\treturn after ? integer + decimal + symbol : symbol + integer + decimal;\r\n};","export default function(cell, formatterParams, onRendered){\r\n\tvar value = cell.getValue(),\r\n\turlPrefix = formatterParams.urlPrefix || \"\",\r\n\tdownload = formatterParams.download,\r\n\tlabel = value,\r\n\tel = document.createElement(\"a\"),\r\n\tdata;\r\n\r\n\tif(formatterParams.labelField){\r\n\t\tdata = cell.getData();\r\n\t\tlabel = data[formatterParams.labelField];\r\n\t}\r\n\r\n\tif(formatterParams.label){\r\n\t\tswitch(typeof formatterParams.label){\r\n\t\t\tcase \"string\":\r\n\t\t\tlabel = formatterParams.label;\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"function\":\r\n\t\t\tlabel = formatterParams.label(cell);\r\n\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\tif(label){\r\n\t\tif(formatterParams.urlField){\r\n\t\t\tdata = cell.getData();\r\n\t\t\tvalue = data[formatterParams.urlField];\r\n\t\t}\r\n\r\n\t\tif(formatterParams.url){\r\n\t\t\tswitch(typeof formatterParams.url){\r\n\t\t\t\tcase \"string\":\r\n\t\t\t\tvalue = formatterParams.url;\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"function\":\r\n\t\t\t\tvalue = formatterParams.url(cell);\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tel.setAttribute(\"href\", urlPrefix + value);\r\n\r\n\t\tif(formatterParams.target){\r\n\t\t\tel.setAttribute(\"target\", formatterParams.target);\r\n\t\t}\r\n\r\n\t\tif(formatterParams.download){\r\n\r\n\t\t\tif(typeof download == \"function\"){\r\n\t\t\t\tdownload = download(cell);\r\n\t\t\t}else{\r\n\t\t\t\tdownload = download === true ? \"\" : download;\r\n\t\t\t}\r\n\r\n\t\t\tel.setAttribute(\"download\", download);\r\n\t\t}\r\n\r\n\t\tel.innerHTML = this.emptyToSpace(this.sanitizeHTML(label));\r\n\r\n\t\treturn el;\r\n\t}else{\r\n\t\treturn \" \";\r\n\t}\r\n};","export default function(cell, formatterParams, onRendered){\r\n\tvar el = document.createElement(\"img\"),\r\n\tsrc = cell.getValue();\r\n\r\n\tif(formatterParams.urlPrefix){\r\n\t\tsrc = formatterParams.urlPrefix + cell.getValue();\r\n\t}\r\n\r\n\tif(formatterParams.urlSuffix){\r\n\t\tsrc = src + formatterParams.urlSuffix;\r\n\t}\r\n\r\n\tel.setAttribute(\"src\", src);\r\n\r\n\tswitch(typeof formatterParams.height){\r\n\t\tcase \"number\":\r\n\t\tel.style.height = formatterParams.height + \"px\";\r\n\t\tbreak;\r\n\r\n\t\tcase \"string\":\r\n\t\tel.style.height = formatterParams.height;\r\n\t\tbreak;\r\n\t}\r\n\r\n\tswitch(typeof formatterParams.width){\r\n\t\tcase \"number\":\r\n\t\tel.style.width = formatterParams.width + \"px\";\r\n\t\tbreak;\r\n\r\n\t\tcase \"string\":\r\n\t\tel.style.width = formatterParams.width;\r\n\t\tbreak;\r\n\t}\r\n\r\n\tel.addEventListener(\"load\", function(){\r\n\t\tcell.getRow().normalizeHeight();\r\n\t});\r\n\r\n\treturn el;\r\n};","export default function(cell, formatterParams, onRendered){\r\n\tvar value = cell.getValue(),\r\n\telement = cell.getElement(),\r\n\tempty = formatterParams.allowEmpty,\r\n\ttruthy = formatterParams.allowTruthy,\r\n\ttick = typeof formatterParams.tickElement !== \"undefined\" ? formatterParams.tickElement : '',\r\n\tcross = typeof formatterParams.crossElement !== \"undefined\" ? formatterParams.crossElement : '';\r\n\r\n\tif((truthy && value) || (value === true || value === \"true\" || value === \"True\" || value === 1 || value === \"1\")){\r\n\t\telement.setAttribute(\"aria-checked\", true);\r\n\t\treturn tick || \"\";\r\n\t}else{\r\n\t\tif(empty && (value === \"null\" || value === \"\" || value === null || typeof value === \"undefined\")){\r\n\t\t\telement.setAttribute(\"aria-checked\", \"mixed\");\r\n\t\t\treturn \"\";\r\n\t\t}else{\r\n\t\t\telement.setAttribute(\"aria-checked\", false);\r\n\t\t\treturn cross || \"\";\r\n\t\t}\r\n\t}\r\n};","export default function(cell, formatterParams, onRendered){\r\n\tvar inputFormat = formatterParams.inputFormat || \"YYYY-MM-DD hh:mm:ss\";\r\n\tvar\toutputFormat = formatterParams.outputFormat || \"DD/MM/YYYY hh:mm:ss\";\r\n\tvar\tinvalid = typeof formatterParams.invalidPlaceholder !== \"undefined\" ? formatterParams.invalidPlaceholder : \"\";\r\n\tvar value = cell.getValue();\r\n\r\n\tvar newDatetime = moment(value, inputFormat);\r\n\r\n\tif(newDatetime.isValid()){\r\n\t\treturn formatterParams.timezone ? newDatetime.tz(formatterParams.timezone).format(outputFormat) : newDatetime.format(outputFormat);\r\n\t}else{\r\n\r\n\t\tif(invalid === true){\r\n\t\t\treturn value;\r\n\t\t}else if(typeof invalid === \"function\"){\r\n\t\t\treturn invalid(value);\r\n\t\t}else{\r\n\t\t\treturn invalid;\r\n\t\t}\r\n\t}\r\n};","export default function datetime(cell, formatterParams, onRendered) {\r\n\tvar inputFormat = formatterParams.inputFormat || \"YYYY-MM-DD hh:mm:ss\";\r\n\tvar invalid = typeof formatterParams.invalidPlaceholder !== \"undefined\" ? formatterParams.invalidPlaceholder : \"\";\r\n\tvar suffix = typeof formatterParams.suffix !== \"undefined\" ? formatterParams.suffix : false;\r\n\tvar unit = typeof formatterParams.unit !== \"undefined\" ? formatterParams.unit : undefined;\r\n\tvar humanize = typeof formatterParams.humanize !== \"undefined\" ? formatterParams.humanize : false;\r\n\tvar date = typeof formatterParams.date !== \"undefined\" ? formatterParams.date : moment();\r\n\tvar value = cell.getValue();\r\n\r\n\tvar newDatetime = moment(value, inputFormat);\r\n\r\n\tif (newDatetime.isValid()) {\r\n\t\tif(humanize){\r\n\t\t\treturn moment.duration(newDatetime.diff(date)).humanize(suffix);\r\n\t\t}else{\r\n\t\t\treturn newDatetime.diff(date, unit) + (suffix ? \" \" + suffix : \"\");\r\n\t\t}\r\n\r\n\t} else {\r\n\r\n\t\tif (invalid === true) {\r\n\t\t\treturn value;\r\n\t\t} else if (typeof invalid === \"function\") {\r\n\t\t\treturn invalid(value);\r\n\t\t} else {\r\n\t\t\treturn invalid;\r\n\t\t}\r\n\t}\r\n};","export default function (cell, formatterParams, onRendered) {\r\n\tvar value = cell.getValue();\r\n\r\n\tif (typeof formatterParams[value] === \"undefined\") {\r\n\t\tconsole.warn('Missing display value for ' + value);\r\n\t\treturn value;\r\n\t}\r\n\r\n\treturn formatterParams[value];\r\n};","export default function(cell, formatterParams, onRendered){\r\n\tvar value = cell.getValue(),\r\n\telement = cell.getElement(),\r\n\tmaxStars = formatterParams && formatterParams.stars ? formatterParams.stars : 5,\r\n\tstars = document.createElement(\"span\"),\r\n\tstar = document.createElementNS('http://www.w3.org/2000/svg', \"svg\"),\r\n\tstarActive = '',\r\n\tstarInactive = '';\r\n\r\n\t//style stars holder\r\n\tstars.style.verticalAlign = \"middle\";\r\n\r\n\t//style star\r\n\tstar.setAttribute(\"width\", \"14\");\r\n\tstar.setAttribute(\"height\", \"14\");\r\n\tstar.setAttribute(\"viewBox\", \"0 0 512 512\");\r\n\tstar.setAttribute(\"xml:space\", \"preserve\");\r\n\tstar.style.padding = \"0 1px\";\r\n\r\n\tvalue = value && !isNaN(value) ? parseInt(value) : 0;\r\n\r\n\tvalue = Math.max(0, Math.min(value, maxStars));\r\n\r\n\tfor(var i=1;i<= maxStars;i++){\r\n\t\tvar nextStar = star.cloneNode(true);\r\n\t\tnextStar.innerHTML = i <= value ? starActive : starInactive;\r\n\r\n\t\tstars.appendChild(nextStar);\r\n\t}\r\n\r\n\telement.style.whiteSpace = \"nowrap\";\r\n\telement.style.overflow = \"hidden\";\r\n\telement.style.textOverflow = \"ellipsis\";\r\n\r\n\telement.setAttribute(\"aria-label\", value);\r\n\r\n\treturn stars;\r\n};","export default function(cell, formatterParams, onRendered){\r\n\tvar value = this.sanitizeHTML(cell.getValue()) || 0,\r\n\tel = document.createElement(\"span\"),\r\n\tmax = formatterParams && formatterParams.max ? formatterParams.max : 100,\r\n\tmin = formatterParams && formatterParams.min ? formatterParams.min : 0,\r\n\tcolors = formatterParams && typeof formatterParams.color !== \"undefined\" ? formatterParams.color : [\"red\", \"orange\", \"green\"],\r\n\tcolor = \"#666666\",\r\n\tpercent, percentValue;\r\n\r\n\tif(isNaN(value) || typeof cell.getValue() === \"undefined\"){\r\n\t\treturn;\r\n\t}\r\n\r\n\tel.classList.add(\"tabulator-traffic-light\");\r\n\r\n\t//make sure value is in range\r\n\tpercentValue = parseFloat(value) <= max ? parseFloat(value) : max;\r\n\tpercentValue = parseFloat(percentValue) >= min ? parseFloat(percentValue) : min;\r\n\r\n\t//workout percentage\r\n\tpercent = (max - min) / 100;\r\n\tpercentValue = Math.round((percentValue - min) / percent);\r\n\r\n\t//set color\r\n\tswitch(typeof colors){\r\n\t\tcase \"string\":\r\n\t\tcolor = colors;\r\n\t\tbreak;\r\n\t\tcase \"function\":\r\n\t\tcolor = colors(value);\r\n\t\tbreak;\r\n\t\tcase \"object\":\r\n\t\tif(Array.isArray(colors)){\r\n\t\t\tvar unit = 100 / colors.length;\r\n\t\t\tvar index = Math.floor(percentValue / unit);\r\n\r\n\t\t\tindex = Math.min(index, colors.length - 1);\r\n\t\t\tindex = Math.max(index, 0);\r\n\t\t\tcolor = colors[index];\r\n\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\tel.style.backgroundColor = color;\r\n\r\n\treturn el;\r\n};","import CellComponent from '../../../../core/cell/CellComponent.js';\r\n\r\nexport default function(cell, formatterParams, onRendered){ //progress bar\r\n\tvar value = this.sanitizeHTML(cell.getValue()) || 0,\r\n\telement = cell.getElement(),\r\n\tmax = formatterParams && formatterParams.max ? formatterParams.max : 100,\r\n\tmin = formatterParams && formatterParams.min ? formatterParams.min : 0,\r\n\tlegendAlign = formatterParams && formatterParams.legendAlign ? formatterParams.legendAlign : \"center\",\r\n\tpercent, percentValue, color, legend, legendColor, top, left, right, bottom;\r\n\r\n\t//make sure value is in range\r\n\tpercentValue = parseFloat(value) <= max ? parseFloat(value) : max;\r\n\tpercentValue = parseFloat(percentValue) >= min ? parseFloat(percentValue) : min;\r\n\r\n\t//workout percentage\r\n\tpercent = (max - min) / 100;\r\n\tpercentValue = Math.round((percentValue - min) / percent);\r\n\r\n\t//set bar color\r\n\tswitch(typeof formatterParams.color){\r\n\t\tcase \"string\":\r\n\t\tcolor = formatterParams.color;\r\n\t\tbreak;\r\n\t\tcase \"function\":\r\n\t\tcolor = formatterParams.color(value);\r\n\t\tbreak;\r\n\t\tcase \"object\":\r\n\t\tif(Array.isArray(formatterParams.color)){\r\n\t\t\tvar unit = 100 / formatterParams.color.length;\r\n\t\t\tvar index = Math.floor(percentValue / unit);\r\n\r\n\t\t\tindex = Math.min(index, formatterParams.color.length - 1);\r\n\t\t\tindex = Math.max(index, 0);\r\n\t\t\tcolor = formatterParams.color[index];\r\n\t\t\tbreak;\r\n\t\t}\r\n\t\tdefault:\r\n\t\tcolor = \"#2DC214\";\r\n\t}\r\n\r\n\t//generate legend\r\n\tswitch(typeof formatterParams.legend){\r\n\t\tcase \"string\":\r\n\t\tlegend = formatterParams.legend;\r\n\t\tbreak;\r\n\t\tcase \"function\":\r\n\t\tlegend = formatterParams.legend(value);\r\n\t\tbreak;\r\n\t\tcase \"boolean\":\r\n\t\tlegend = value;\r\n\t\tbreak;\r\n\t\tdefault:\r\n\t\tlegend = false;\r\n\t}\r\n\r\n\t//set legend color\r\n\tswitch(typeof formatterParams.legendColor){\r\n\t\tcase \"string\":\r\n\t\tlegendColor = formatterParams.legendColor;\r\n\t\tbreak;\r\n\t\tcase \"function\":\r\n\t\tlegendColor = formatterParams.legendColor(value);\r\n\t\tbreak;\r\n\t\tcase \"object\":\r\n\t\tif(Array.isArray(formatterParams.legendColor)){\r\n\t\t\tvar unit = 100 / formatterParams.legendColor.length;\r\n\t\t\tvar index = Math.floor(percentValue / unit);\r\n\r\n\t\t\tindex = Math.min(index, formatterParams.legendColor.length - 1);\r\n\t\t\tindex = Math.max(index, 0);\r\n\t\t\tlegendColor = formatterParams.legendColor[index];\r\n\t\t}\r\n\t\tbreak;\r\n\t\tdefault:\r\n\t\tlegendColor = \"#000\";\r\n\t}\r\n\r\n\telement.style.minWidth = \"30px\";\r\n\telement.style.position = \"relative\";\r\n\r\n\telement.setAttribute(\"aria-label\", percentValue);\r\n\r\n\tvar barEl = document.createElement(\"div\");\r\n\tbarEl.style.display = \"inline-block\";\r\n\tbarEl.style.position = \"relative\";\r\n\tbarEl.style.width = percentValue + \"%\";\r\n\tbarEl.style.backgroundColor = color;\r\n\tbarEl.style.height = \"100%\";\r\n\r\n\tbarEl.setAttribute('data-max', max);\r\n\tbarEl.setAttribute('data-min', min);\r\n\r\n\r\n\tif(legend){\r\n\t\tvar legendEl = document.createElement(\"div\");\r\n\t\tlegendEl.style.position = \"absolute\";\r\n\t\tlegendEl.style.top = \"4px\";\r\n\t\tlegendEl.style.left = 0;\r\n\t\tlegendEl.style.textAlign = legendAlign;\r\n\t\tlegendEl.style.width = \"100%\";\r\n\t\tlegendEl.style.color = legendColor;\r\n\t\tlegendEl.innerHTML = legend;\r\n\t}\r\n\r\n\tonRendered(function(){\r\n\r\n\t\t//handle custom element needed if formatter is to be included in printed/downloaded output\r\n\t\tif(!(cell instanceof CellComponent)){\r\n\t\t\tvar holderEl = document.createElement(\"div\");\r\n\t\t\tholderEl.style.position = \"absolute\";\r\n\t\t\tholderEl.style.top = \"4px\";\r\n\t\t\tholderEl.style.bottom = \"4px\";\r\n\t\t\tholderEl.style.left = \"4px\";\r\n\t\t\tholderEl.style.right = \"4px\";\r\n\r\n\t\t\telement.appendChild(holderEl);\r\n\r\n\t\t\telement = holderEl;\r\n\t\t}\r\n\r\n\t\telement.appendChild(barEl);\r\n\r\n\t\tif(legend){\r\n\t\t\telement.appendChild(legendEl);\r\n\t\t}\r\n\t});\r\n\r\n\treturn \"\";\r\n};","export default function(cell, formatterParams, onRendered){\r\n\tcell.getElement().style.backgroundColor = this.sanitizeHTML(cell.getValue());\r\n\treturn \"\";\r\n};","export default function(cell, formatterParams, onRendered){\r\n\treturn '';\r\n};","export default function(cell, formatterParams, onRendered){\r\n\treturn '';\r\n};","export default function(cell, formatterParams, onRendered){\r\n\treturn this.table.rowManager.activeRows.indexOf(cell.getRow()._getSelf()) + 1;\r\n};","export default function(cell, formatterParams, onRendered){\r\n\tcell.getElement().classList.add(\"tabulator-row-handle\");\r\n\treturn \"
\";\r\n};","export default function(cell, formatterParams, onRendered){\r\n\tvar open = false,\r\n\tel = document.createElement(\"div\"),\r\n\tconfig = cell.getRow()._row.modules.responsiveLayout;\r\n\r\n\tel.classList.add(\"tabulator-responsive-collapse-toggle\");\r\n\tel.innerHTML = \"+-\";\r\n\r\n\tcell.getElement().classList.add(\"tabulator-row-handle\");\r\n\r\n\tfunction toggleList(isOpen){\r\n\t\tvar collapseEl = config.element;\r\n\r\n\t\tconfig.open = isOpen;\r\n\r\n\t\tif(collapseEl){\r\n\r\n\t\t\tif(config.open){\r\n\t\t\t\tel.classList.add(\"open\");\r\n\t\t\t\tcollapseEl.style.display = '';\r\n\t\t\t}else{\r\n\t\t\t\tel.classList.remove(\"open\");\r\n\t\t\t\tcollapseEl.style.display = 'none';\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tel.addEventListener(\"click\", function(e){\r\n\t\te.stopImmediatePropagation();\r\n\t\ttoggleList(!config.open);\r\n\t});\r\n\r\n\ttoggleList(config.open);\r\n\r\n\treturn el;\r\n};","export default function(cell, formatterParams, onRendered){\r\n\tvar checkbox = document.createElement(\"input\");\r\n\r\n\tcheckbox.type = 'checkbox';\r\n\r\n\tif(this.table.modExists(\"selectRow\", true)){\r\n\r\n\t\tcheckbox.addEventListener(\"click\", (e) => {\r\n\t\t\te.stopPropagation();\r\n\t\t});\r\n\r\n\t\tif(typeof cell.getRow == 'function'){\r\n\t\t\tvar row = cell.getRow();\r\n\r\n\t\t\tif(row instanceof RowComponent){\r\n\r\n\t\t\t\tcheckbox.addEventListener(\"change\", (e) => {\r\n\t\t\t\t\trow.toggleSelect();\r\n\t\t\t\t});\r\n\r\n\t\t\t\tcheckbox.checked = row.isSelected && row.isSelected();\r\n\t\t\t\tthis.table.modules.selectRow.registerRowSelectCheckbox(row, checkbox);\r\n\t\t\t}else{\r\n\t\t\t\tcheckbox = \"\";\r\n\t\t\t}\r\n\t\t}else {\r\n\t\t\tcheckbox.addEventListener(\"change\", (e) => {\r\n\t\t\t\tif(this.table.modules.selectRow.selectedRows.length){\r\n\t\t\t\t\tthis.table.deselectRow();\r\n\t\t\t\t}else {\r\n\t\t\t\t\tthis.table.selectRow(formatterParams.rowRange);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tthis.table.modules.selectRow.registerHeaderSelectCheckbox(checkbox);\r\n\t\t}\r\n\t}\r\n\r\n\treturn checkbox;\r\n};","import Module from '../../core/Module.js';\r\n\r\nimport defaultFormatters from './defaults/formatters.js';\r\n\r\nclass Format extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.registerColumnOption(\"formatter\");\r\n\t\tthis.registerColumnOption(\"formatterParams\");\r\n\r\n\t\tthis.registerColumnOption(\"formatterPrint\");\r\n\t\tthis.registerColumnOption(\"formatterPrintParams\");\r\n\t\tthis.registerColumnOption(\"formatterClipboard\");\r\n\t\tthis.registerColumnOption(\"formatterClipboardParams\");\r\n\t\tthis.registerColumnOption(\"formatterHtmlOutput\");\r\n\t\tthis.registerColumnOption(\"formatterHtmlOutputParams\");\r\n\t\tthis.registerColumnOption(\"titleFormatter\");\r\n\t\tthis.registerColumnOption(\"titleFormatterParams\");\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tthis.subscribe(\"cell-format\", this.formatValue.bind(this));\r\n\t\tthis.subscribe(\"cell-rendered\", this.cellRendered.bind(this));\r\n\t\tthis.subscribe(\"column-layout\", this.initializeColumn.bind(this));\r\n\t\tthis.subscribe(\"column-format\", this.formatHeader.bind(this));\r\n\t}\r\n\r\n\t//initialize column formatter\r\n\tinitializeColumn(column){\r\n\t\tcolumn.modules.format = this.lookupFormatter(column, \"\");\r\n\r\n\t\tif(typeof column.definition.formatterPrint !== \"undefined\"){\r\n\t\t\tcolumn.modules.format.print = this.lookupFormatter(column, \"Print\");\r\n\t\t}\r\n\r\n\t\tif(typeof column.definition.formatterClipboard !== \"undefined\"){\r\n\t\t\tcolumn.modules.format.clipboard = this.lookupFormatter(column, \"Clipboard\");\r\n\t\t}\r\n\r\n\t\tif(typeof column.definition.formatterHtmlOutput !== \"undefined\"){\r\n\t\t\tcolumn.modules.format.htmlOutput = this.lookupFormatter(column, \"HtmlOutput\");\r\n\t\t}\r\n\t}\r\n\r\n\tlookupFormatter(column, type){\r\n\t\tvar config = {params:column.definition[\"formatter\" + type + \"Params\"] || {}},\r\n\t\tformatter = column.definition[\"formatter\" + type];\r\n\r\n\t\t//set column formatter\r\n\t\tswitch(typeof formatter){\r\n\t\t\tcase \"string\":\r\n\t\t\tif(Format.formatters[formatter]){\r\n\t\t\t\tconfig.formatter = Format.formatters[formatter];\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Formatter Error - No such formatter found: \", formatter);\r\n\t\t\t\tconfig.formatter = Format.formatters.plaintext;\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"function\":\r\n\t\t\tconfig.formatter = formatter;\r\n\t\t\tbreak;\r\n\r\n\t\t\tdefault:\r\n\t\t\tconfig.formatter = Format.formatters.plaintext;\r\n\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\treturn config;\r\n\t}\r\n\r\n\tcellRendered(cell){\r\n\t\tif(cell.modules.format && cell.modules.format.renderedCallback && !cell.modules.format.rendered){\r\n\t\t\tcell.modules.format.renderedCallback();\r\n\t\t\tcell.modules.format.rendered = true;\r\n\t\t}\r\n\t}\r\n\r\n\t//return a formatted value for a column header\r\n\tformatHeader(column, title, el){\r\n\t\tvar formatter, params, onRendered, mockCell;\r\n\r\n\t\tif(column.definition.titleFormatter){\r\n\t\t\tformatter = this.getFormatter(column.definition.titleFormatter);\r\n\r\n\t\t\tonRendered = (callback) => {\r\n\t\t\t\tcolumn.titleFormatterRendered = callback;\r\n\t\t\t};\r\n\r\n\t\t\tmockCell = {\r\n\t\t\t\tgetValue:function(){\r\n\t\t\t\t\treturn title;\r\n\t\t\t\t},\r\n\t\t\t\tgetElement:function(){\r\n\t\t\t\t\treturn el;\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\tparams = column.definition.titleFormatterParams || {};\r\n\r\n\t\t\tparams = typeof params === \"function\" ? params() : params;\r\n\r\n\t\t\treturn formatter.call(this, mockCell, params, onRendered);\r\n\t\t}else{\r\n\t\t\treturn title;\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t//return a formatted value for a cell\r\n\tformatValue(cell){\r\n\t\tvar component = cell.getComponent(),\r\n\t\tparams = typeof cell.column.modules.format.params === \"function\" ? cell.column.modules.format.params(component) : cell.column.modules.format.params;\r\n\r\n\t\tfunction onRendered(callback){\r\n\t\t\tif(!cell.modules.format){\r\n\t\t\t\tcell.modules.format = {};\r\n\t\t\t}\r\n\r\n\t\t\tcell.modules.format.renderedCallback = callback;\r\n\t\t\tcell.modules.format.rendered = false;\r\n\t\t}\r\n\r\n\t\treturn cell.column.modules.format.formatter.call(this, component, params, onRendered);\r\n\t}\r\n\r\n\tformatExportValue(cell, type){\r\n\t\tvar formatter = cell.column.modules.format[type],\r\n\t\tparams;\r\n\r\n\t\tif(formatter){\r\n\t\t\tparams = typeof formatter.params === \"function\" ? formatter.params(component) : formatter.params;\r\n\r\n\t\t\tfunction onRendered(callback){\r\n\t\t\t\tif(!cell.modules.format){\r\n\t\t\t\t\tcell.modules.format = {};\r\n\t\t\t\t}\r\n\r\n\t\t\t\tcell.modules.format.renderedCallback = callback;\r\n\t\t\t\tcell.modules.format.rendered = false;\r\n\t\t\t}\r\n\r\n\t\t\treturn formatter.formatter.call(this, cell.getComponent(), params, onRendered);\r\n\r\n\t\t}else{\r\n\t\t\treturn this.formatValue(cell);\r\n\t\t}\r\n\t}\r\n\r\n\tsanitizeHTML(value){\r\n\t\tif(value){\r\n\t\t\tvar entityMap = {\r\n\t\t\t\t'&': '&',\r\n\t\t\t\t'<': '<',\r\n\t\t\t\t'>': '>',\r\n\t\t\t\t'\"': '"',\r\n\t\t\t\t\"'\": ''',\r\n\t\t\t\t'/': '/',\r\n\t\t\t\t'`': '`',\r\n\t\t\t\t'=': '='\r\n\t\t\t};\r\n\r\n\t\t\treturn String(value).replace(/[&<>\"'`=\\/]/g, function (s) {\r\n\t\t\t\treturn entityMap[s];\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\treturn value;\r\n\t\t}\r\n\t}\r\n\r\n\temptyToSpace(value){\r\n\t\treturn value === null || typeof value === \"undefined\" || value === \"\" ? \" \" : value;\r\n\t}\r\n\r\n\t//get formatter for cell\r\n\tgetFormatter(formatter){\r\n\t\tvar formatter;\r\n\r\n\t\tswitch(typeof formatter){\r\n\t\t\tcase \"string\":\r\n\t\t\tif(Format.formatters[formatter]){\r\n\t\t\t\tformatter = Format.formatters[formatter]\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Formatter Error - No such formatter found: \", formatter);\r\n\t\t\t\tformatter = Format.formatters.plaintext;\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"function\":\r\n\t\t\tformatter = formatter;\r\n\t\t\tbreak;\r\n\r\n\t\t\tdefault:\r\n\t\t\tformatter = Format.formatters.plaintext;\r\n\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\treturn formatter;\r\n\t}\r\n}\r\n\r\nFormat.moduleName = \"format\";\r\n\r\n//load defaults\r\nFormat.formatters = defaultFormatters;\r\n\r\nexport default Format;","import Module from '../../core/Module.js';\r\n\r\nclass FrozenColumns extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.leftColumns = [];\r\n\t\tthis.rightColumns = [];\r\n\t\tthis.leftMargin = 0;\r\n\t\tthis.rightMargin = 0;\r\n\t\tthis.rightPadding = 0;\r\n\t\tthis.initializationMode = \"left\";\r\n\t\tthis.active = false;\r\n\t\tthis.scrollEndTimer = false;\r\n\r\n\t\tthis.registerColumnOption(\"frozen\");\r\n\t}\r\n\r\n\t//reset initial state\r\n\treset(){\r\n\t\tthis.initializationMode = \"left\";\r\n\t\tthis.leftColumns = [];\r\n\t\tthis.rightColumns = [];\r\n\t\tthis.leftMargin = 0;\r\n\t\tthis.rightMargin = 0;\r\n\t\tthis.rightMargin = 0;\r\n\t\tthis.active = false;\r\n\r\n\t\tthis.table.columnManager.headersElement.style.marginLeft = 0;\r\n\t\tthis.table.columnManager.element.style.paddingRight = 0;\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tthis.subscribe(\"cell-layout\", this.layoutCell.bind(this));\r\n\t\tthis.subscribe(\"column-init\", this.initializeColumn.bind(this));\r\n\t\tthis.subscribe(\"column-width\", this.layout.bind(this));\r\n\t\tthis.subscribe(\"row-layout-before\", this.layoutRow.bind(this));\r\n\t\tthis.subscribe(\"table-layout\", this.layout.bind(this));\r\n\t\tthis.subscribe(\"scroll-horizontal\", this.scrollHorizontal.bind(this));\r\n\t\tthis.subscribe(\"columns-loading\", this.reset.bind(this));\r\n\t\tthis.subscribe(\"table-redraw\", this.layout.bind(this));\r\n\t}\r\n\r\n\tlayoutCell(cell){\r\n\t\tthis.layoutElement(cell.element, cell.column)\r\n\t}\r\n\r\n\t//initialize specific column\r\n\tinitializeColumn(column){\r\n\t\tvar config = {margin:0, edge:false};\r\n\r\n\t\tif(!column.isGroup){\r\n\r\n\t\t\tif(this.frozenCheck(column)){\r\n\r\n\t\t\t\tconfig.position = this.initializationMode;\r\n\r\n\t\t\t\tif(this.initializationMode == \"left\"){\r\n\t\t\t\t\tthis.leftColumns.push(column);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tthis.rightColumns.unshift(column);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.active = true;\r\n\r\n\t\t\t\tcolumn.modules.frozen = config;\r\n\t\t\t}else{\r\n\t\t\t\tthis.initializationMode = \"right\";\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tfrozenCheck(column){\r\n\t\tvar frozen = false;\r\n\r\n\t\tif(column.parent.isGroup && column.definition.frozen){\r\n\t\t\tconsole.warn(\"Frozen Column Error - Parent column group must be frozen, not individual columns or sub column groups\");\r\n\t\t}\r\n\r\n\t\tif(column.parent.isGroup){\r\n\t\t\treturn this.frozenCheck(column.parent);\r\n\t\t}else{\r\n\t\t\treturn column.definition.frozen;\r\n\t\t}\r\n\r\n\t\treturn frozen;\r\n\t}\r\n\r\n\t//quick layout to smooth horizontal scrolling\r\n\tscrollHorizontal(){\r\n\t\tvar rows;\r\n\r\n\t\tif(this.active){\r\n\t\t\tclearTimeout(this.scrollEndTimer);\r\n\r\n\t\t\t//layout all rows after scroll is complete\r\n\t\t\tthis.scrollEndTimer = setTimeout(() => {\r\n\t\t\t\tthis.layout();\r\n\t\t\t}, 100);\r\n\r\n\t\t\trows = this.table.rowManager.getVisibleRows();\r\n\r\n\t\t\tthis.calcMargins();\r\n\r\n\t\t\tthis.layoutColumnPosition();\r\n\r\n\t\t\tthis.layoutCalcRows();\r\n\r\n\t\t\trows.forEach((row) => {\r\n\t\t\t\tif(row.type === \"row\"){\r\n\t\t\t\t\tthis.layoutRow(row);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tthis.table.rowManager.tableElement.style.marginRight = this.rightMargin;\r\n\t\t}\r\n\t}\r\n\r\n\t//calculate margins for rows\r\n\tcalcMargins(){\r\n\t\tthis.leftMargin = this._calcSpace(this.leftColumns, this.leftColumns.length) + \"px\";\r\n\t\tthis.table.columnManager.headersElement.style.marginLeft = this.leftMargin;\r\n\r\n\t\tthis.rightMargin = this._calcSpace(this.rightColumns, this.rightColumns.length) + \"px\";\r\n\t\tthis.table.columnManager.element.style.paddingRight = this.rightMargin;\r\n\r\n\t\t//calculate right frozen columns\r\n\t\tthis.rightPadding = this.table.rowManager.element.clientWidth + this.table.columnManager.scrollLeft;\r\n\t}\r\n\r\n\t//layout calculation rows\r\n\tlayoutCalcRows(){\r\n\t\tif(this.table.modExists(\"columnCalcs\")){\r\n\t\t\tif(this.table.modules.columnCalcs.topInitialized && this.table.modules.columnCalcs.topRow){\r\n\t\t\t\tthis.layoutRow(this.table.modules.columnCalcs.topRow);\r\n\t\t\t}\r\n\t\t\tif(this.table.modules.columnCalcs.botInitialized && this.table.modules.columnCalcs.botRow){\r\n\t\t\t\tthis.layoutRow(this.table.modules.columnCalcs.botRow);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//calculate column positions and layout headers\r\n\tlayoutColumnPosition(allCells){\r\n\r\n\t\tvar leftParents = [];\r\n\r\n\t\tthis.leftColumns.forEach((column, i) => {\r\n\t\t\tcolumn.modules.frozen.margin = (this._calcSpace(this.leftColumns, i) + this.table.columnManager.scrollLeft) + \"px\";\r\n\r\n\t\t\tif(i == this.leftColumns.length - 1){\r\n\t\t\t\tcolumn.modules.frozen.edge = true;\r\n\t\t\t}else{\r\n\t\t\t\tcolumn.modules.frozen.edge = false;\r\n\t\t\t}\r\n\r\n\t\t\tif(column.parent.isGroup){\r\n\t\t\t\tvar parentEl = this.getColGroupParentElement(column);\r\n\t\t\t\tif(!leftParents.includes(parentEl)){\r\n\t\t\t\t\tthis.layoutElement(parentEl, column);\r\n\t\t\t\t\tleftParents.push(parentEl);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(column.modules.frozen.edge){\r\n\t\t\t\t\tparentEl.classList.add(\"tabulator-frozen-\" + column.modules.frozen.position);\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tthis.layoutElement(column.getElement(), column);\r\n\t\t\t}\r\n\r\n\t\t\tif(allCells){\r\n\t\t\t\tcolumn.cells.forEach((cell) => {\r\n\t\t\t\t\tthis.layoutElement(cell.getElement(true), column);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tthis.rightColumns.forEach((column, i) => {\r\n\t\t\tcolumn.modules.frozen.margin = (this.rightPadding - this._calcSpace(this.rightColumns, i + 1)) + \"px\";\r\n\r\n\t\t\tif(i == this.rightColumns.length - 1){\r\n\t\t\t\tcolumn.modules.frozen.edge = true;\r\n\t\t\t}else{\r\n\t\t\t\tcolumn.modules.frozen.edge = false;\r\n\t\t\t}\r\n\r\n\r\n\t\t\tif(column.parent.isGroup){\r\n\t\t\t\tthis.layoutElement(this.getColGroupParentElement(column), column);\r\n\t\t\t}else{\r\n\t\t\t\tthis.layoutElement(column.getElement(), column);\r\n\t\t\t}\r\n\r\n\t\t\tif(allCells){\r\n\t\t\t\tcolumn.cells.forEach((cell) => {\r\n\t\t\t\t\tthis.layoutElement(cell.getElement(true), column);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tgetColGroupParentElement(column){\r\n\t\treturn column.parent.isGroup ? this.getColGroupParentElement(column.parent) : column.getElement();\r\n\t}\r\n\r\n\t//layout columns appropropriatly\r\n\tlayout(){\r\n\t\tvar rightMargin = 0;\r\n\r\n\t\tif(this.active){\r\n\r\n\t\t\t//calculate row padding\r\n\t\t\tthis.calcMargins();\r\n\r\n\t\t\tthis.table.rowManager.getDisplayRows().forEach((row) =>{\r\n\t\t\t\tif(row.type === \"row\"){\r\n\t\t\t\t\tthis.layoutRow(row);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tthis.layoutCalcRows();\r\n\r\n\t\t\t//calculate left columns\r\n\t\t\tthis.layoutColumnPosition(true);\r\n\r\n\t\t\tthis.table.rowManager.tableElement.style.marginRight = this.rightMargin;\r\n\t\t}\r\n\t}\r\n\r\n\tlayoutRow(row){\r\n\t\tvar rowEl = row.getElement();\r\n\r\n\t\trowEl.style.paddingLeft = this.leftMargin;\r\n\r\n\t\tthis.leftColumns.forEach((column) => {\r\n\t\t\tvar cell = row.getCell(column);\r\n\r\n\t\t\tif(cell){\r\n\t\t\t\tthis.layoutElement(cell.getElement(true), column);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tthis.rightColumns.forEach((column) => {\r\n\t\t\tvar cell = row.getCell(column);\r\n\r\n\t\t\tif(cell){\r\n\t\t\t\tthis.layoutElement(cell.getElement(true), column);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tlayoutElement(element, column){\r\n\r\n\t\tif(column.modules.frozen){\r\n\t\t\telement.style.position = \"absolute\";\r\n\t\t\telement.style.left = column.modules.frozen.margin;\r\n\r\n\t\t\telement.classList.add(\"tabulator-frozen\");\r\n\r\n\t\t\tif(column.modules.frozen.edge){\r\n\t\t\t\telement.classList.add(\"tabulator-frozen-\" + column.modules.frozen.position);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t_calcSpace(columns, index){\r\n\t\tvar width = 0;\r\n\r\n\t\tfor (let i = 0; i < index; i++){\r\n\t\t\tif(columns[i].visible){\r\n\t\t\t\twidth += columns[i].getWidth();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn width;\r\n\t}\r\n}\r\n\r\nFrozenColumns.moduleName = \"frozenColumns\";\r\n\r\nexport default FrozenColumns;","import Module from '../../core/Module.js';\r\n\r\nclass FrozenRows extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.topElement = document.createElement(\"div\");\r\n\t\tthis.rows = [];\r\n\r\n\t\t//register component functions\r\n\t\tthis.registerComponentFunction(\"row\", \"freeze\", this.freezeRow.bind(this));\r\n\t\tthis.registerComponentFunction(\"row\", \"unfreeze\", this.unfreezeRow.bind(this));\r\n\t\tthis.registerComponentFunction(\"row\", \"isFrozen\", this.isRowFrozen.bind(this));\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tthis.rows = [];\r\n\r\n\t\tthis.topElement.classList.add(\"tabulator-frozen-rows-holder\");\r\n\r\n\t\t// this.table.columnManager.element.append(this.topElement);\r\n\t\tthis.table.columnManager.getElement().insertBefore(this.topElement, this.table.columnManager.headersElement.nextSibling);\r\n\r\n\t\tthis.subscribe(\"row-deleting\", this.detachRow.bind(this));\r\n\r\n\t\tthis.registerDisplayHandler(this.getRows.bind(this), 10);\r\n\t}\r\n\r\n\tisRowFrozen(row){\r\n\t\tvar index = this.rows.indexOf(row);\r\n\t\treturn index > -1;\r\n\t}\r\n\r\n\tisFrozen(){\r\n\t\treturn !!this.rows.length;\r\n\t}\r\n\r\n\t//filter frozen rows out of display data\r\n\tgetRows(rows){\r\n\t\tvar self = this,\r\n\t\tfrozen = [],\r\n\t\toutput = rows.slice(0);\r\n\r\n\t\tthis.rows.forEach(function(row){\r\n\t\t\tvar index = output.indexOf(row);\r\n\r\n\t\t\tif(index > -1){\r\n\t\t\t\toutput.splice(index, 1);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tfreezeRow(row){\r\n\t\tif(!row.modules.frozen){\r\n\t\t\trow.modules.frozen = true;\r\n\t\t\tthis.topElement.appendChild(row.getElement());\r\n\t\t\trow.initialize();\r\n\t\t\trow.normalizeHeight();\r\n\t\t\tthis.table.rowManager.adjustTableSize();\r\n\r\n\t\t\tthis.rows.push(row);\r\n\r\n\t\t\tthis.table.rowManager.refreshActiveData(\"display\");\r\n\r\n\t\t\tthis.styleRows();\r\n\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Freeze Error - Row is already frozen\");\r\n\t\t}\r\n\t}\r\n\r\n\tunfreezeRow(row){\r\n\t\tvar index = this.rows.indexOf(row);\r\n\r\n\t\tif(row.modules.frozen){\r\n\r\n\t\t\trow.modules.frozen = false;\r\n\r\n\t\t\tthis.detachRow(row);\r\n\r\n\t\t\tthis.table.rowManager.adjustTableSize();\r\n\r\n\t\t\tthis.table.rowManager.refreshActiveData(\"display\");\r\n\r\n\t\t\tif(this.rows.length){\r\n\t\t\t\tthis.styleRows();\r\n\t\t\t}\r\n\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Freeze Error - Row is already unfrozen\");\r\n\t\t}\r\n\t}\r\n\r\n\tdetachRow(row){\r\n\t\tvar index = this.rows.indexOf(row);\r\n\r\n\t\tif(index > -1){\r\n\t\t\tvar rowEl = row.getElement();\r\n\t\t\trowEl.parentNode.removeChild(rowEl);\r\n\r\n\t\t\tthis.rows.splice(index, 1);\r\n\t\t}\r\n\t}\r\n\r\n\tstyleRows(row){\r\n\t\tthis.rows.forEach((row, i) => {\r\n\t\t\tthis.table.rowManager.styleRow(row, i);\r\n\t\t});\r\n\t}\r\n}\r\n\r\nFrozenRows.moduleName = \"frozenRows\";\r\n\r\nexport default FrozenRows;","//public group object\r\nclass GroupComponent {\r\n\tconstructor (group){\r\n\t\tthis._group = group;\r\n\t\tthis.type = \"GroupComponent\";\r\n\r\n\t\treturn new Proxy(this, {\r\n\t\t\tget: function(target, name, receiver) {\r\n\t\t\t\tif (typeof target[name] !== \"undefined\") {\r\n\t\t\t\t\treturn target[name];\r\n\t\t\t\t}else{\r\n\t\t\t\t\treturn target._group.table.componentFunctionBinder.handle(\"row\", target._group, name)\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t})\r\n\t}\r\n\r\n\tgetKey(){\r\n\t\treturn this._group.key;\r\n\t}\r\n\r\n\tgetField(){\r\n\t\treturn this._group.field;\r\n\t}\r\n\r\n\tgetElement(){\r\n\t\treturn this._group.element;\r\n\t}\r\n\r\n\tgetRows(){\r\n\t\treturn this._group.getRows(true);\r\n\t}\r\n\r\n\tgetSubGroups(){\r\n\t\treturn this._group.getSubGroups(true);\r\n\t}\r\n\r\n\tgetParentGroup(){\r\n\t\treturn this._group.parent ? this._group.parent.getComponent() : false;\r\n\t}\r\n\r\n\tisVisible(){\r\n\t\treturn this._group.visible;\r\n\t}\r\n\r\n\tshow(){\r\n\t\tthis._group.show();\r\n\t}\r\n\r\n\thide(){\r\n\t\tthis._group.hide();\r\n\t}\r\n\r\n\ttoggle(){\r\n\t\tthis._group.toggleVisibility();\r\n\t}\r\n\r\n\t_getSelf(){\r\n\t\treturn this._group;\r\n\t}\r\n\r\n\tgetTable(){\r\n\t\treturn this._group.groupManager.table;\r\n\t}\r\n}\r\n\r\nexport default GroupComponent;","import Helpers from '../../core/tools/Helpers.js';\r\nimport GroupComponent from './GroupComponent.js';\r\n\r\n//Group functions\r\nclass Group{\r\n\r\n\tconstructor(groupManager, parent, level, key, field, generator, oldGroup){\r\n\t\tthis.groupManager = groupManager;\r\n\t\tthis.parent = parent;\r\n\t\tthis.key = key;\r\n\t\tthis.level = level;\r\n\t\tthis.field = field;\r\n\t\tthis.hasSubGroups = level < (groupManager.groupIDLookups.length - 1);\r\n\t\tthis.addRow = this.hasSubGroups ? this._addRowToGroup : this._addRow;\r\n\t\tthis.type = \"group\"; //type of element\r\n\t\tthis.old = oldGroup;\r\n\t\tthis.rows = [];\r\n\t\tthis.groups = [];\r\n\t\tthis.groupList = [];\r\n\t\tthis.generator = generator;\r\n\t\tthis.elementContents = false;\r\n\t\tthis.height = 0;\r\n\t\tthis.outerHeight = 0;\r\n\t\tthis.initialized = false;\r\n\t\tthis.calcs = {};\r\n\t\tthis.initialized = false;\r\n\t\tthis.modules = {};\r\n\t\tthis.arrowElement = false;\r\n\r\n\t\tthis.visible = oldGroup ? oldGroup.visible : (typeof groupManager.startOpen[level] !== \"undefined\" ? groupManager.startOpen[level] : groupManager.startOpen[0]);\r\n\r\n\t\tthis.component = null;\r\n\r\n\t\tthis.createElements();\r\n\t\tthis.addBindings();\r\n\r\n\t\tthis.createValueGroups();\r\n\t}\r\n\r\n\twipe(){\r\n\t\tif(this.groupList.length){\r\n\t\t\tthis.groupList.forEach(function(group){\r\n\t\t\t\tgroup.wipe();\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tthis.element = false;\r\n\t\t\tthis.arrowElement = false;\r\n\t\t\tthis.elementContents = false;\r\n\t\t}\r\n\t}\r\n\r\n\tcreateElements(){\r\n\t\tvar arrow = document.createElement(\"div\");\r\n\t\tarrow.classList.add(\"tabulator-arrow\");\r\n\r\n\t\tthis.element = document.createElement(\"div\");\r\n\t\tthis.element.classList.add(\"tabulator-row\");\r\n\t\tthis.element.classList.add(\"tabulator-group\");\r\n\t\tthis.element.classList.add(\"tabulator-group-level-\" + this.level);\r\n\t\tthis.element.setAttribute(\"role\", \"rowgroup\");\r\n\r\n\t\tthis.arrowElement = document.createElement(\"div\");\r\n\t\tthis.arrowElement.classList.add(\"tabulator-group-toggle\");\r\n\t\tthis.arrowElement.appendChild(arrow);\r\n\r\n\t\t//setup movable rows\r\n\t\tif(this.groupManager.table.options.movableRows !== false && this.groupManager.table.modExists(\"moveRow\")){\r\n\t\t\tthis.groupManager.table.modules.moveRow.initializeGroupHeader(this);\r\n\t\t}\r\n\t}\r\n\r\n\tcreateValueGroups(){\r\n\t\tvar level = this.level + 1;\r\n\t\tif(this.groupManager.allowedValues && this.groupManager.allowedValues[level]){\r\n\t\t\tthis.groupManager.allowedValues[level].forEach((value) => {\r\n\t\t\t\tthis._createGroup(value, level);\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\taddBindings(){\r\n\t\tvar dblTap,\ttapHold, tap, toggleElement;\r\n\r\n\t\tif ((this.groupManager.table.options.groupContextMenu || this.groupManager.table.options.groupClickMenu) && this.groupManager.table.modExists(\"menu\")){\r\n\t\t\tthis.groupManager.table.modules.menu.initializeGroup.call(this.groupManager.table.modules.menu, this);\r\n\t\t}\r\n\r\n\t\tif (this.groupManager.table.options.groupTap){\r\n\t\t\ttap = false;\r\n\r\n\t\t\tthis.element.addEventListener(\"touchstart\", (e) => {\r\n\t\t\t\ttap = true;\r\n\t\t\t}, {passive: true});\r\n\r\n\t\t\tthis.element.addEventListener(\"touchend\", (e) => {\r\n\t\t\t\tif(tap){\r\n\t\t\t\t\tthis.groupManager.table.options.groupTap(e, this.getComponent());\r\n\t\t\t\t}\r\n\r\n\t\t\t\ttap = false;\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif (this.groupManager.table.options.groupDblTap){\r\n\t\t\tdblTap = null;\r\n\r\n\t\t\tthis.element.addEventListener(\"touchend\", (e) => {\r\n\t\t\t\tif(dblTap){\r\n\t\t\t\t\tclearTimeout(dblTap);\r\n\t\t\t\t\tdblTap = null;\r\n\r\n\t\t\t\t\tthis.groupManager.table.options.groupDblTap(e, this.getComponent());\r\n\t\t\t\t}else{\r\n\r\n\t\t\t\t\tdblTap = setTimeout(() => {\r\n\t\t\t\t\t\tclearTimeout(dblTap);\r\n\t\t\t\t\t\tdblTap = null;\r\n\t\t\t\t\t}, 300);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif (this.groupManager.table.options.groupTapHold){\r\n\t\t\ttapHold = null;\r\n\r\n\t\t\tthis.element.addEventListener(\"touchstart\", (e) => {\r\n\t\t\t\tclearTimeout(tapHold);\r\n\r\n\t\t\t\ttapHold = setTimeout(() => {\r\n\t\t\t\t\tclearTimeout(tapHold);\r\n\t\t\t\t\ttapHold = null;\r\n\t\t\t\t\ttap = false;\r\n\t\t\t\t\tthis.groupManager.table.options.groupTapHold(e, this.getComponent());\r\n\t\t\t\t}, 1000);\r\n\r\n\t\t\t}, {passive: true});\r\n\r\n\t\t\tthis.element.addEventListener(\"touchend\", (e) => {\r\n\t\t\t\tclearTimeout(tapHold);\r\n\t\t\t\ttapHold = null;\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif(this.groupManager.table.options.groupToggleElement){\r\n\t\t\ttoggleElement = this.groupManager.table.options.groupToggleElement == \"arrow\" ? this.arrowElement : this.element;\r\n\r\n\t\t\ttoggleElement.addEventListener(\"click\", (e) => {\r\n\t\t\t\te.stopPropagation();\r\n\t\t\t\te.stopImmediatePropagation();\r\n\t\t\t\tthis.toggleVisibility();\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\t_createGroup(groupID, level){\r\n\t\tvar groupKey = level + \"_\" + groupID;\r\n\t\tvar group = new Group(this.groupManager, this, level, groupID, this.groupManager.groupIDLookups[level].field, this.groupManager.headerGenerator[level] || this.groupManager.headerGenerator[0], this.old ? this.old.groups[groupKey] : false);\r\n\r\n\t\tthis.groups[groupKey] = group;\r\n\t\tthis.groupList.push(group);\r\n\t}\r\n\r\n\t_addRowToGroup(row){\r\n\r\n\t\tvar level = this.level + 1;\r\n\r\n\t\tif(this.hasSubGroups){\r\n\t\t\tvar groupID = this.groupManager.groupIDLookups[level].func(row.getData()),\r\n\t\t\tgroupKey = level + \"_\" + groupID;\r\n\r\n\t\t\tif(this.groupManager.allowedValues && this.groupManager.allowedValues[level]){\r\n\t\t\t\tif(this.groups[groupKey]){\r\n\t\t\t\t\tthis.groups[groupKey].addRow(row);\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tif(!this.groups[groupKey]){\r\n\t\t\t\t\tthis._createGroup(groupID, level);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.groups[groupKey].addRow(row);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t_addRow(row){\r\n\t\tthis.rows.push(row);\r\n\t\trow.modules.group = this;\r\n\t}\r\n\r\n\tinsertRow(row, to, after){\r\n\t\tvar data = this.conformRowData({});\r\n\r\n\t\trow.updateData(data);\r\n\r\n\t\tvar toIndex = this.rows.indexOf(to);\r\n\r\n\t\tif(toIndex > -1){\r\n\t\t\tif(after){\r\n\t\t\t\tthis.rows.splice(toIndex+1, 0, row);\r\n\t\t\t}else{\r\n\t\t\t\tthis.rows.splice(toIndex, 0, row);\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tif(after){\r\n\t\t\t\tthis.rows.push(row);\r\n\t\t\t}else{\r\n\t\t\t\tthis.rows.unshift(row);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\trow.modules.group = this;\r\n\r\n\t\tthis.generateGroupHeaderContents();\r\n\r\n\t\tif(this.groupManager.table.modExists(\"columnCalcs\") && this.groupManager.table.options.columnCalcs != \"table\"){\r\n\t\t\tthis.groupManager.table.modules.columnCalcs.recalcGroup(this);\r\n\t\t}\r\n\r\n\t\tthis.groupManager.updateGroupRows(true);\r\n\t}\r\n\r\n\tscrollHeader(left){\r\n\t\tthis.arrowElement.style.marginLeft = left;\r\n\r\n\t\tthis.groupList.forEach(function(child){\r\n\t\t\tchild.scrollHeader(left);\r\n\t\t});\r\n\t}\r\n\r\n\tgetRowIndex(row){}\r\n\r\n\t//update row data to match grouping contraints\r\n\tconformRowData(data){\r\n\t\tif(this.field){\r\n\t\t\tdata[this.field] = this.key;\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Data Conforming Error - Cannot conform row data to match new group as groupBy is a function\");\r\n\t\t}\r\n\r\n\t\tif(this.parent){\r\n\t\t\tdata = this.parent.conformRowData(data);\r\n\t\t}\r\n\r\n\t\treturn data;\r\n\t}\r\n\r\n\tremoveRow(row){\r\n\t\tvar index = this.rows.indexOf(row);\r\n\t\tvar el = row.getElement();\r\n\r\n\r\n\t\tif(index > -1){\r\n\t\t\tthis.rows.splice(index, 1);\r\n\t\t}\r\n\r\n\t\tif(!this.groupManager.table.options.groupValues && !this.rows.length){\r\n\t\t\tif(this.parent){\r\n\t\t\t\tthis.parent.removeGroup(this);\r\n\t\t\t}else{\r\n\t\t\t\tthis.groupManager.removeGroup(this);\r\n\t\t\t}\r\n\r\n\t\t\tthis.groupManager.updateGroupRows(true);\r\n\t\t}else{\r\n\r\n\t\t\tif(el.parentNode){\r\n\t\t\t\tel.parentNode.removeChild(el);\r\n\t\t\t}\r\n\r\n\t\t\tthis.generateGroupHeaderContents();\r\n\r\n\t\t\tif(this.groupManager.table.modExists(\"columnCalcs\") && this.groupManager.table.options.columnCalcs != \"table\"){\r\n\t\t\t\tthis.groupManager.table.modules.columnCalcs.recalcGroup(this);\r\n\t\t\t}\r\n\r\n\t\t}\r\n\t}\r\n\r\n\tremoveGroup(group){\r\n\t\tvar groupKey = group.level + \"_\" + group.key,\r\n\t\tindex;\r\n\r\n\t\tif(this.groups[groupKey]){\r\n\t\t\tdelete this.groups[groupKey];\r\n\r\n\t\t\tindex = this.groupList.indexOf(group);\r\n\r\n\t\t\tif(index > -1){\r\n\t\t\t\tthis.groupList.splice(index, 1);\r\n\t\t\t}\r\n\r\n\t\t\tif(!this.groupList.length){\r\n\t\t\t\tif(this.parent){\r\n\t\t\t\t\tthis.parent.removeGroup(this);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tthis.groupManager.removeGroup(this);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tgetHeadersAndRows(noCalc){\r\n\t\tvar output = [];\r\n\r\n\t\toutput.push(this);\r\n\r\n\t\tthis._visSet();\r\n\r\n\t\tif(this.visible){\r\n\t\t\tif(this.groupList.length){\r\n\t\t\t\tthis.groupList.forEach(function(group){\r\n\t\t\t\t\toutput = output.concat(group.getHeadersAndRows(noCalc));\r\n\t\t\t\t});\r\n\r\n\t\t\t}else{\r\n\t\t\t\tif(!noCalc && this.groupManager.table.options.columnCalcs != \"table\" && this.groupManager.table.modExists(\"columnCalcs\") && this.groupManager.table.modules.columnCalcs.hasTopCalcs()){\r\n\t\t\t\t\tif(this.calcs.top){\r\n\t\t\t\t\t\tthis.calcs.top.detachElement();\r\n\t\t\t\t\t\tthis.calcs.top.deleteCells();\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tthis.calcs.top = this.groupManager.table.modules.columnCalcs.generateTopRow(this.rows);\r\n\t\t\t\t\toutput.push(this.calcs.top);\r\n\t\t\t\t}\r\n\r\n\t\t\t\toutput = output.concat(this.rows);\r\n\r\n\t\t\t\tif(!noCalc && this.groupManager.table.options.columnCalcs != \"table\" && this.groupManager.table.modExists(\"columnCalcs\") && this.groupManager.table.modules.columnCalcs.hasBottomCalcs()){\r\n\t\t\t\t\tif(this.calcs.bottom){\r\n\t\t\t\t\t\tthis.calcs.bottom.detachElement();\r\n\t\t\t\t\t\tthis.calcs.bottom.deleteCells();\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tthis.calcs.bottom = this.groupManager.table.modules.columnCalcs.generateBottomRow(this.rows);\r\n\t\t\t\t\toutput.push(this.calcs.bottom);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tif(!this.groupList.length && this.groupManager.table.options.columnCalcs != \"table\"){\r\n\r\n\t\t\t\tif(this.groupManager.table.modExists(\"columnCalcs\")){\r\n\r\n\t\t\t\t\tif(!noCalc && this.groupManager.table.modules.columnCalcs.hasTopCalcs()){\r\n\t\t\t\t\t\tif(this.calcs.top){\r\n\t\t\t\t\t\t\tthis.calcs.top.detachElement();\r\n\t\t\t\t\t\t\tthis.calcs.top.deleteCells();\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif(this.groupManager.table.options.groupClosedShowCalcs){\r\n\t\t\t\t\t\t\tthis.calcs.top = this.groupManager.table.modules.columnCalcs.generateTopRow(this.rows);\r\n\t\t\t\t\t\t\toutput.push(this.calcs.top);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif(!noCalc && this.groupManager.table.modules.columnCalcs.hasBottomCalcs()){\r\n\t\t\t\t\t\tif(this.calcs.bottom){\r\n\t\t\t\t\t\t\tthis.calcs.bottom.detachElement();\r\n\t\t\t\t\t\t\tthis.calcs.bottom.deleteCells();\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif(this.groupManager.table.options.groupClosedShowCalcs){\r\n\t\t\t\t\t\t\tthis.calcs.bottom = this.groupManager.table.modules.columnCalcs.generateBottomRow(this.rows);\r\n\t\t\t\t\t\t\toutput.push(this.calcs.bottom);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tgetData(visible, transform){\r\n\t\tvar output = [];\r\n\r\n\t\tthis._visSet();\r\n\r\n\t\tif(!visible || (visible && this.visible)){\r\n\t\t\tthis.rows.forEach((row) => {\r\n\t\t\t\toutput.push(row.getData(transform || \"data\"));\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tgetRowCount(){\r\n\t\tvar count = 0;\r\n\r\n\t\tif(this.groupList.length){\r\n\t\t\tthis.groupList.forEach((group) => {\r\n\t\t\t\tcount += group.getRowCount();\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tcount = this.rows.length;\r\n\t\t}\r\n\t\treturn count;\r\n\t}\r\n\r\n\ttoggleVisibility(){\r\n\t\tif(this.visible){\r\n\t\t\tthis.hide();\r\n\t\t}else{\r\n\t\t\tthis.show();\r\n\t\t}\r\n\t}\r\n\r\n\thide(){\r\n\t\tthis.visible = false;\r\n\r\n\t\tif(this.groupManager.table.rowManager.getRenderMode() == \"classic\" && !this.groupManager.table.options.pagination){\r\n\r\n\t\t\tthis.element.classList.remove(\"tabulator-group-visible\");\r\n\r\n\t\t\tif(this.groupList.length){\r\n\t\t\t\tthis.groupList.forEach((group) => {\r\n\r\n\t\t\t\t\tvar rows = group.getHeadersAndRows();\r\n\r\n\t\t\t\t\trows.forEach((row) => {\r\n\t\t\t\t\t\trow.detachElement();\r\n\t\t\t\t\t});\r\n\t\t\t\t});\r\n\r\n\t\t\t}else{\r\n\t\t\t\tthis.rows.forEach((row) => {\r\n\t\t\t\t\tvar rowEl = row.getElement();\r\n\t\t\t\t\trowEl.parentNode.removeChild(rowEl);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\tthis.groupManager.table.rowManager.setDisplayRows(this.groupManager.updateGroupRows(), this.groupManager.getDisplayIndex());\r\n\r\n\t\t\tthis.groupManager.table.rowManager.checkClassicModeGroupHeaderWidth();\r\n\r\n\t\t}else{\r\n\t\t\tthis.groupManager.updateGroupRows(true);\r\n\t\t}\r\n\r\n\t\tthis.groupManager.table.externalEvents.dispatch(\"groupVisibilityChanged\", this.getComponent(), false);\r\n\t}\r\n\r\n\tshow(){\r\n\t\tthis.visible = true;\r\n\r\n\t\tif(this.groupManager.table.rowManager.getRenderMode() == \"classic\" && !this.groupManager.table.options.pagination){\r\n\r\n\t\t\tthis.element.classList.add(\"tabulator-group-visible\");\r\n\r\n\t\t\tvar prev = this.getElement();\r\n\r\n\t\t\tif(this.groupList.length){\r\n\t\t\t\tthis.groupList.forEach((group) => {\r\n\t\t\t\t\tvar rows = group.getHeadersAndRows();\r\n\r\n\t\t\t\t\trows.forEach((row) => {\r\n\t\t\t\t\t\tvar rowEl = row.getElement();\r\n\t\t\t\t\t\tprev.parentNode.insertBefore(rowEl, prev.nextSibling);\r\n\t\t\t\t\t\trow.initialize();\r\n\t\t\t\t\t\tprev = rowEl;\r\n\t\t\t\t\t});\r\n\t\t\t\t});\r\n\r\n\t\t\t}else{\r\n\t\t\t\tthis.rows.forEach((row) => {\r\n\t\t\t\t\tvar rowEl = row.getElement();\r\n\t\t\t\t\tprev.parentNode.insertBefore(rowEl, prev.nextSibling);\r\n\t\t\t\t\trow.initialize();\r\n\t\t\t\t\tprev = rowEl;\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\tthis.groupManager.table.rowManager.setDisplayRows(this.groupManager.updateGroupRows(), this.groupManager.getDisplayIndex());\r\n\r\n\t\t\tthis.groupManager.table.rowManager.checkClassicModeGroupHeaderWidth();\r\n\t\t}else{\r\n\t\t\tthis.groupManager.updateGroupRows(true);\r\n\t\t}\r\n\r\n\t\tthis.groupManager.table.externalEvents.dispatch(\"groupVisibilityChanged\", this.getComponent(), true);\r\n\t}\r\n\r\n\t_visSet(){\r\n\t\tvar data = [];\r\n\r\n\t\tif(typeof this.visible == \"function\"){\r\n\r\n\t\t\tthis.rows.forEach(function(row){\r\n\t\t\t\tdata.push(row.getData());\r\n\t\t\t});\r\n\r\n\t\t\tthis.visible = this.visible(this.key, this.getRowCount(), data, this.getComponent());\r\n\t\t}\r\n\t}\r\n\r\n\tgetRowGroup(row){\r\n\t\tvar match = false;\r\n\t\tif(this.groupList.length){\r\n\t\t\tthis.groupList.forEach(function(group){\r\n\t\t\t\tvar result = group.getRowGroup(row);\r\n\r\n\t\t\t\tif(result){\r\n\t\t\t\t\tmatch = result;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tif(this.rows.find(function(item){\r\n\t\t\t\treturn item === row;\r\n\t\t\t})){\r\n\t\t\t\tmatch = this;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn match;\r\n\t}\r\n\r\n\tgetSubGroups(component){\r\n\t\tvar output = [];\r\n\r\n\t\tthis.groupList.forEach(function(child){\r\n\t\t\toutput.push(component ? child.getComponent() : child);\r\n\t\t});\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tgetRows(compoment){\r\n\t\tvar output = [];\r\n\r\n\t\tthis.rows.forEach(function(row){\r\n\t\t\toutput.push(compoment ? row.getComponent() : row);\r\n\t\t});\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tgenerateGroupHeaderContents(){\r\n\t\tvar data = [];\r\n\r\n\t\tthis.rows.forEach(function(row){\r\n\t\t\tdata.push(row.getData());\r\n\t\t});\r\n\r\n\t\tthis.elementContents = this.generator(this.key, this.getRowCount(), data, this.getComponent());\r\n\r\n\t\twhile(this.element.firstChild) this.element.removeChild(this.element.firstChild);\r\n\r\n\t\tif(typeof this.elementContents === \"string\"){\r\n\t\t\tthis.element.innerHTML = this.elementContents;\r\n\t\t}else{\r\n\t\t\tthis.element.appendChild(this.elementContents);\r\n\t\t}\r\n\r\n\t\tthis.element.insertBefore(this.arrowElement, this.element.firstChild);\r\n\t}\r\n\r\n\tgetPath(path = []) {\r\n\t\tpath.unshift(this.key);\r\n\t\tif(this.parent) {\r\n\t\t\tthis.parent.getPath(path);\r\n\t\t}\r\n\t\treturn path;\r\n\t}\r\n\r\n\t////////////// Standard Row Functions //////////////\r\n\r\n\tgetElement(){\r\n\t\tthis.addBindingsd = false;\r\n\r\n\t\tthis._visSet();\r\n\r\n\t\tif(this.visible){\r\n\t\t\tthis.element.classList.add(\"tabulator-group-visible\");\r\n\t\t}else{\r\n\t\t\tthis.element.classList.remove(\"tabulator-group-visible\");\r\n\t\t}\r\n\r\n\t\tfor(var i = 0; i < this.element.childNodes.length; ++i){\r\n\t\t\tthis.element.childNodes[i].parentNode.removeChild(this.element.childNodes[i]);\r\n\t\t}\r\n\r\n\t\tthis.generateGroupHeaderContents();\r\n\r\n\t\t// this.addBindings();\r\n\r\n\t\treturn this.element;\r\n\t}\r\n\r\n\tdetachElement(){\r\n\t\tif (this.element && this.element.parentNode){\r\n\t\t\tthis.element.parentNode.removeChild(this.element);\r\n\t\t}\r\n\t}\r\n\r\n\t//normalize the height of elements in the row\r\n\tnormalizeHeight(){\r\n\t\tthis.setHeight(this.element.clientHeight);\r\n\t}\r\n\r\n\tinitialize(force){\r\n\t\tif(!this.initialized || force){\r\n\t\t\tthis.normalizeHeight();\r\n\t\t\tthis.initialized = true;\r\n\t\t}\r\n\t}\r\n\r\n\treinitialize(){\r\n\t\tthis.initialized = false;\r\n\t\tthis.height = 0;\r\n\r\n\t\tif(Helpers.elVisible(this.element)){\r\n\t\t\tthis.initialize(true);\r\n\t\t}\r\n\t}\r\n\r\n\tsetHeight(height){\r\n\t\tif(this.height != height){\r\n\t\t\tthis.height = height;\r\n\t\t\tthis.outerHeight = this.element.offsetHeight;\r\n\t\t}\r\n\t}\r\n\r\n\t//return rows outer height\r\n\tgetHeight(){\r\n\t\treturn this.outerHeight;\r\n\t}\r\n\r\n\tgetGroup(){\r\n\t\treturn this;\r\n\t}\r\n\r\n\treinitializeHeight(){}\r\n\r\n\tcalcHeight(){}\r\n\r\n\tsetCellHeight(){}\r\n\r\n\tclearCellHeight(){}\r\n\r\n\t//////////////// Object Generation /////////////////\r\n\tgetComponent(){\r\n\t\tif(!this.component){\r\n\t\t\tthis.component = new GroupComponent(this);\r\n\t\t}\r\n\r\n\t\treturn this.component;\r\n\t}\r\n}\r\n\r\nexport default Group;","import Module from '../../core/Module.js';\r\n\r\nimport GroupComponent from './GroupComponent.js';\r\nimport Group from './Group.js';\r\n\r\nclass GroupRows extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.groupIDLookups = false; //enable table grouping and set field to group by\r\n\t\tthis.startOpen = [function(){return false;}]; //starting state of group\r\n\t\tthis.headerGenerator = [function(){return \"\";}];\r\n\t\tthis.groupList = []; //ordered list of groups\r\n\t\tthis.allowedValues = false;\r\n\t\tthis.groups = {}; //hold row groups\r\n\t\tthis.displayIndex = 0; //index in display pipeline\r\n\r\n\t\t//register table options\r\n\t\tthis.registerTableOption(\"groupBy\", false); //enable table grouping and set field to group by\r\n\t\tthis.registerTableOption(\"groupStartOpen\", true); //starting state of group\r\n\t\tthis.registerTableOption(\"groupValues\", false);\r\n\t\tthis.registerTableOption(\"groupUpdateOnCellEdit\", false);\r\n\t\tthis.registerTableOption(\"groupHeader\", false); //header generation function\r\n\t\tthis.registerTableOption(\"groupHeaderPrint\", null);\r\n\t\tthis.registerTableOption(\"groupHeaderClipboard\", null);\r\n\t\tthis.registerTableOption(\"groupHeaderHtmlOutput\", null);\r\n\t\tthis.registerTableOption(\"groupHeaderDownload\", null);\r\n\t\tthis.registerTableOption(\"groupToggleElement\", \"arrow\");\r\n\t\tthis.registerTableOption(\"groupClosedShowCalcs\", false);\r\n\r\n\t\t//register table functions\r\n\t\tthis.registerTableFunction(\"setGroupBy\", this.setGroupBy.bind(this));\r\n\t\tthis.registerTableFunction(\"setGroupValues\", this.setGroupValues.bind(this));\r\n\t\tthis.registerTableFunction(\"setGroupStartOpen\", this.setGroupStartOpen.bind(this));\r\n\t\tthis.registerTableFunction(\"setGroupHeader\", this.setGroupHeader.bind(this));\r\n\t\tthis.registerTableFunction(\"getGroups\", this.userGetGroups.bind(this));\r\n\t\tthis.registerTableFunction(\"getGroupedData\", this.userGetGroupedData.bind(this));\r\n\r\n\t\t//register component functions\r\n\t\tthis.registerComponentFunction(\"row\", \"getGroup\", this.rowGetGroup.bind(this));\r\n\t}\r\n\r\n\t//initialize group configuration\r\n\tinitialize(){\r\n\t\tif(this.table.options.groupBy){\r\n\t\t\tvar groupBy = this.table.options.groupBy,\r\n\t\t\tstartOpen = this.table.options.groupStartOpen,\r\n\t\t\tgroupHeader = this.table.options.groupHeader;\r\n\r\n\t\t\tthis.allowedValues = this.table.options.groupValues;\r\n\r\n\t\t\tif(Array.isArray(groupBy) && Array.isArray(groupHeader) && groupBy.length > groupHeader.length){\r\n\t\t\t\tconsole.warn(\"Error creating group headers, groupHeader array is shorter than groupBy array\");\r\n\t\t\t}\r\n\r\n\t\t\tthis.headerGenerator = [function(){return \"\";}];\r\n\t\t\tthis.startOpen = [function(){return false;}]; //starting state of group\r\n\r\n\t\t\tthis.langBind(\"groups|item\", (langValue, lang) => {\r\n\t\t\t\tthis.headerGenerator[0] = (value, count, data) => { //header layout function\r\n\t\t\t\t\treturn (typeof value === \"undefined\" ? \"\" : value) + \"(\" + count + \" \" + ((count === 1) ? langValue : lang.groups.items) + \")\";\r\n\t\t\t\t};\r\n\t\t\t});\r\n\r\n\t\t\tthis.groupIDLookups = [];\r\n\r\n\t\t\tif(Array.isArray(groupBy) || groupBy){\r\n\t\t\t\tif(this.table.modExists(\"columnCalcs\") && this.table.options.columnCalcs != \"table\" && this.table.options.columnCalcs != \"both\"){\r\n\t\t\t\t\tthis.table.modules.columnCalcs.removeCalcs();\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tif(this.table.modExists(\"columnCalcs\") && this.table.options.columnCalcs != \"group\"){\r\n\r\n\t\t\t\t\tvar cols = this.table.columnManager.getRealColumns();\r\n\r\n\t\t\t\t\tcols.forEach((col) => {\r\n\t\t\t\t\t\tif(col.definition.topCalc){\r\n\t\t\t\t\t\t\tthis.table.modules.columnCalcs.initializeTopRow();\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif(col.definition.bottomCalc){\r\n\t\t\t\t\t\t\tthis.table.modules.columnCalcs.initializeBottomRow();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif(!Array.isArray(groupBy)){\r\n\t\t\t\tgroupBy = [groupBy];\r\n\t\t\t}\r\n\r\n\t\t\tgroupBy.forEach((group, i) => {\r\n\t\t\t\tvar lookupFunc, column;\r\n\r\n\t\t\t\tif(typeof group == \"function\"){\r\n\t\t\t\t\tlookupFunc = group;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tcolumn = this.table.columnManager.getColumnByField(group);\r\n\r\n\t\t\t\t\tif(column){\r\n\t\t\t\t\t\tlookupFunc = function(data){\r\n\t\t\t\t\t\t\treturn column.getFieldValue(data);\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tlookupFunc = function(data){\r\n\t\t\t\t\t\t\treturn data[group];\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.groupIDLookups.push({\r\n\t\t\t\t\tfield: typeof group === \"function\" ? false : group,\r\n\t\t\t\t\tfunc:lookupFunc,\r\n\t\t\t\t\tvalues:this.allowedValues ? this.allowedValues[i] : false,\r\n\t\t\t\t});\r\n\t\t\t});\r\n\r\n\t\t\tif(startOpen){\r\n\t\t\t\tif(!Array.isArray(startOpen)){\r\n\t\t\t\t\tstartOpen = [startOpen];\r\n\t\t\t\t}\r\n\r\n\t\t\t\tstartOpen.forEach((level) => {\r\n\t\t\t\t\tlevel = typeof level == \"function\" ? level : function(){return true;};\r\n\t\t\t\t});\r\n\r\n\t\t\t\tthis.startOpen = startOpen;\r\n\t\t\t}\r\n\r\n\t\t\tif(groupHeader){\r\n\t\t\t\tthis.headerGenerator = Array.isArray(groupHeader) ? groupHeader : [groupHeader];\r\n\t\t\t}\r\n\r\n\t\t\tif(this.table.options.groupUpdateOnCellEdit){\r\n\t\t\t\tthis.subscribe(\"cell-value-updated\", this.cellUpdated.bind(this));\r\n\t\t\t\tthis.subscribe(\"row-data-changed\", this.reassignRowToGroup.bind(this), 0);\r\n\t\t\t}\r\n\r\n\t\t\tthis.subscribe(\"row-deleting\", this.rowDeleting.bind(this));\r\n\t\t\tthis.subscribe(\"row-deleted\", this.rowsUpdated.bind(this));\r\n\t\t\tthis.subscribe(\"scroll-horizontal\", this.scrollHeaders.bind(this));\r\n\t\t\tthis.subscribe(\"rows-wipe\", this.wipe.bind(this));\r\n\t\t\tthis.subscribe(\"rows-added\", this.rowsUpdated.bind(this));\r\n\t\t\tthis.subscribe(\"row-moving\", this.rowMoving.bind(this));\r\n\t\t\tthis.subscribe(\"row-adding-index\", this.rowAddingIndex.bind(this));\r\n\r\n\t\t\tthis.subscribe(\"rows-sample\", this.rowSample.bind(this));\r\n\r\n\t\t\tthis.subscribe(\"render-virtual-fill\", this.rowAddingIndex.bind(this));\r\n\r\n\t\t\tthis.registerDisplayHandler(this.getRows.bind(this), 20);\r\n\r\n\t\t\tthis.initialized = true;\r\n\t\t}\r\n\t}\r\n\r\n\trowSample(rows, prevValue){\r\n\t\tvar group = this.getGroups(false)[0];\r\n\r\n\t\tprevValue.push(group.getRows(false)[0]);\r\n\r\n\t\treturn prevValue;\r\n\t}\r\n\r\n\tvirtualRenderFill(){\r\n\t\tvar el = this.table.rowManager.tableElement;\r\n\t\trows = this.table.rowManager.getVisibleRows();\r\n\r\n\t\trows = rows.filter((row) => {\r\n\t\t\treturn row.type !== \"group\";\r\n\t\t});\r\n\r\n\t\tel.style.minWidth = !rows.length ? this.table.columnManager.getWidth() + \"px\" : \"\";\r\n\r\n\t\t// if(this.table.options.groupBy){\r\n\t\t// \tif(this.layoutMode() != \"fitDataFill\" && rowsCount == this.table.modules.groupRows.countGroups()){\r\n\t\t// \t\tel.style.minWidth = this.table.columnManager.getWidth() + \"px\";\r\n\t\t// \t}\r\n\t\t// }\r\n\t}\r\n\r\n\trowAddingIndex(row, index, top){\r\n\t\tthis.assignRowToGroup(row);\r\n\r\n\t\tvar groupRows = row.modules.group.rows;\r\n\r\n\t\tif(groupRows.length > 1){\r\n\t\t\tif(!index || (index && groupRows.indexOf(index) == -1)){\r\n\t\t\t\tif(top){\r\n\t\t\t\t\tif(groupRows[0] !== row){\r\n\t\t\t\t\t\tindex = groupRows[0];\r\n\t\t\t\t\t\tthis.table.rowManager.moveRowInArray(row.modules.group.rows, row, index, !top);\r\n\t\t\t\t\t}\r\n\t\t\t\t}else{\r\n\t\t\t\t\tif(groupRows[groupRows.length -1] !== row){\r\n\t\t\t\t\t\tindex = groupRows[groupRows.length -1];\r\n\t\t\t\t\t\tthis.table.rowManager.moveRowInArray(row.modules.group.rows, row, index, !top);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tthis.table.rowManager.moveRowInArray(row.modules.group.rows, row, index, !top);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn index;\r\n\t}\r\n\r\n\ttrackChanges(){\r\n\t\tthis.dispatch(\"group-changed\");\r\n\t}\r\n\r\n\t///////////////////////////////////\r\n\t///////// Table Functions /////////\r\n\t///////////////////////////////////\r\n\r\n\tsetGroupBy(groups){\r\n\t\tthis.table.options.groupBy = groups;\r\n\t\tthis.initialize();\r\n\t\tthis.refreshData(false, \"display\");\r\n\r\n\t\tthis.trackChanges();\r\n\t}\r\n\r\n\tsetGroupValues(groupValues){\r\n\t\tthis.table.options.groupValues = groupValues;\r\n\t\tthis.initialize();\r\n\t\tthis.refreshData(false, \"display\");\r\n\r\n\t\tthis.trackChanges();\r\n\t}\r\n\r\n\tsetGroupStartOpen(values){\r\n\t\tthis.table.options.groupStartOpen = values;\r\n\t\tthis.initialize();\r\n\r\n\t\tif(this.table.options.groupBy){\r\n\t\t\tthis.refreshData();\r\n\r\n\t\t\tthis.trackChanges();\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Grouping Update - cant refresh view, no groups have been set\");\r\n\t\t}\r\n\t}\r\n\r\n\tsetGroupHeader(values){\r\n\t\tthis.table.options.groupHeader = values;\r\n\t\tthis.initialize();\r\n\r\n\t\tif(this.table.options.groupBy){\r\n\t\t\tthis.refreshData();\r\n\r\n\t\t\tthis.trackChanges();\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Grouping Update - cant refresh view, no groups have been set\");\r\n\t\t}\r\n\t}\r\n\r\n\tuserGetGroups(values){\r\n\t\treturn this.getGroups(true);\r\n\t}\r\n\r\n\t// get grouped table data in the same format as getData()\r\n\tuserGetGroupedData(){\r\n\t\treturn this.table.options.groupBy ?\r\n\t\tthis.getGroupedData() : this.getData()\r\n\t}\r\n\r\n\r\n\t///////////////////////////////////////\r\n\t///////// Component Functions /////////\r\n\t///////////////////////////////////////\r\n\r\n\trowGetGroup(row){\r\n\t\treturn row.modules.group ? row.modules.group.getComponent() : false;\r\n\t}\r\n\r\n\t///////////////////////////////////\r\n\t///////// Internal Logic //////////\r\n\t///////////////////////////////////\r\n\r\n\trowMoving(from, to, after){\r\n\t\tif(!after && to instanceof Group){\r\n\t\t\tto = this.table.rowManager.prevDisplayRow(from) || to;\r\n\t\t}\r\n\r\n\t\tvar toGroup = to.modules.group;\r\n\t\tvar fromGroup = from.modules.group;\r\n\r\n\t\tif(toGroup === fromGroup){\r\n\t\t\tthis.table.rowManager.moveRowInArray(toGroup.rows, from, to, after);\r\n\t\t}else{\r\n\t\t\tif(fromGroup){\r\n\t\t\t\tfromGroup.removeRow(from);\r\n\t\t\t}\r\n\r\n\t\t\ttoGroup.insertRow(from, to, after);\r\n\t\t}\r\n\t}\r\n\r\n\r\n\trowDeleting(row){\r\n\t\t//remove from group\r\n\t\tif(row.modules.group){\r\n\t\t\trow.modules.group.removeRow(row);\r\n\t\t}\r\n\t}\r\n\r\n\r\n\trowsUpdated(row){\r\n\t\tthis.updateGroupRows(true);\r\n\t}\r\n\r\n\tcellUpdated(cell){\r\n\t\tthis.reassignRowToGroup(cell.row);\r\n\t}\r\n\r\n\r\n\tsetDisplayIndex(index){\r\n\t\tthis.displayIndex = index;\r\n\t}\r\n\r\n\tgetDisplayIndex(){\r\n\t\treturn this.displayIndex;\r\n\t}\r\n\r\n\t//return appropriate rows with group headers\r\n\tgetRows(rows){\r\n\t\tif(this.groupIDLookups.length){\r\n\r\n\t\t\tthis.dispatchExternal(\"dataGrouping\");\r\n\r\n\t\t\tthis.generateGroups(rows);\r\n\r\n\t\t\tif(this.subscribedExternal(\"dataGrouped\")){\r\n\t\t\t\tthis.dispatchExternal(\"dataGrouped\", this.getGroups(true));\r\n\t\t\t}\r\n\r\n\t\t\treturn this.updateGroupRows();\r\n\r\n\t\t}else{\r\n\t\t\treturn rows.slice(0);\r\n\t\t}\r\n\t}\r\n\r\n\tgetGroups(component){\r\n\t\tvar groupComponents = [];\r\n\r\n\t\tthis.groupList.forEach(function(group){\r\n\t\t\tgroupComponents.push(component ? group.getComponent() : group);\r\n\t\t});\r\n\r\n\t\treturn groupComponents;\r\n\t}\r\n\r\n\tgetChildGroups(group){\r\n\t\tvar groupComponents = [];\r\n\r\n\t\tif(!group){\r\n\t\t\tgroup = this;\r\n\t\t}\r\n\r\n\t\tgroup.groupList.forEach((child) => {\r\n\t\t\tif(child.groupList.length){\r\n\t\t\t\tgroupComponents = groupComponents.concat(this.getChildGroups(child));\r\n\t\t\t}else{\r\n\t\t\t\tgroupComponents.push(child);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn groupComponents;\r\n\t}\r\n\r\n\twipe(){\r\n\t\tthis.groupList.forEach(function(group){\r\n\t\t\tgroup.wipe();\r\n\t\t});\r\n\t}\r\n\r\n\tpullGroupListData(groupList) {\r\n\t\tvar groupListData = [];\r\n\r\n\t\tgroupList.forEach((group) => {\r\n\t\t\tvar groupHeader = {};\r\n\t\t\tgroupHeader.level = 0;\r\n\t\t\tgroupHeader.rowCount = 0;\r\n\t\t\tgroupHeader.headerContent = \"\";\r\n\t\t\tvar childData = [];\r\n\r\n\t\t\tif (group.hasSubGroups) {\r\n\t\t\t\tchildData = this.pullGroupListData(group.groupList);\r\n\r\n\t\t\t\tgroupHeader.level = group.level;\r\n\t\t\t\tgroupHeader.rowCount = childData.length - group.groupList.length; // data length minus number of sub-headers\r\n\t\t\t\tgroupHeader.headerContent = group.generator(group.key, groupHeader.rowCount, group.rows, group);\r\n\r\n\t\t\t\tgroupListData.push(groupHeader);\r\n\t\t\t\tgroupListData = groupListData.concat(childData);\r\n\t\t\t}\r\n\r\n\t\t\telse {\r\n\t\t\t\tgroupHeader.level = group.level;\r\n\t\t\t\tgroupHeader.headerContent = group.generator(group.key, group.rows.length, group.rows, group);\r\n\t\t\t\tgroupHeader.rowCount = group.getRows().length;\r\n\r\n\t\t\t\tgroupListData.push(groupHeader);\r\n\r\n\t\t\t\tgroup.getRows().forEach((row) => {\r\n\t\t\t\t\tgroupListData.push(row.getData(\"data\"));\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn groupListData\r\n\t}\r\n\r\n\tgetGroupedData(){\r\n\r\n\t\treturn this.pullGroupListData(this.groupList);\r\n\t}\r\n\r\n\tgetRowGroup(row){\r\n\t\tvar match = false;\r\n\r\n\t\tthis.groupList.forEach((group) => {\r\n\t\t\tvar result = group.getRowGroup(row);\r\n\r\n\t\t\tif(result){\r\n\t\t\t\tmatch = result;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn match;\r\n\t}\r\n\r\n\tcountGroups(){\r\n\t\treturn this.groupList.length;\r\n\t}\r\n\r\n\tgenerateGroups(rows){\r\n\t\tvar oldGroups = this.groups;\r\n\r\n\t\tthis.groups = {};\r\n\t\tthis.groupList =[];\r\n\r\n\t\tif(this.allowedValues && this.allowedValues[0]){\r\n\t\t\tthis.allowedValues[0].forEach((value) => {\r\n\t\t\t\tthis.createGroup(value, 0, oldGroups);\r\n\t\t\t});\r\n\r\n\t\t\trows.forEach((row) => {\r\n\t\t\t\tthis.assignRowToExistingGroup(row, oldGroups);\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\trows.forEach((row) => {\r\n\t\t\t\tthis.assignRowToGroup(row, oldGroups);\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tcreateGroup(groupID, level, oldGroups){\r\n\t\tvar groupKey = level + \"_\" + groupID,\r\n\t\tgroup;\r\n\r\n\t\toldGroups = oldGroups || [];\r\n\r\n\t\tgroup = new Group(this, false, level, groupID, this.groupIDLookups[0].field, this.headerGenerator[0], oldGroups[groupKey]);\r\n\r\n\t\tthis.groups[groupKey] = group;\r\n\t\tthis.groupList.push(group);\r\n\t}\r\n\r\n\tassignRowToExistingGroup(row, oldGroups){\r\n\t\tvar groupID = this.groupIDLookups[0].func(row.getData()),\r\n\t\tgroupKey = \"0_\" + groupID;\r\n\r\n\t\tif(this.groups[groupKey]){\r\n\t\t\tthis.groups[groupKey].addRow(row);\r\n\t\t}\r\n\t}\r\n\r\n\tassignRowToGroup(row, oldGroups){\r\n\t\tvar groupID = this.groupIDLookups[0].func(row.getData()),\r\n\t\tnewGroupNeeded = !this.groups[\"0_\" + groupID];\r\n\r\n\t\tif(newGroupNeeded){\r\n\t\t\tthis.createGroup(groupID, 0, oldGroups);\r\n\t\t}\r\n\r\n\t\tthis.groups[\"0_\" + groupID].addRow(row);\r\n\r\n\t\treturn !newGroupNeeded;\r\n\t}\r\n\r\n\treassignRowToGroup(row){\r\n\t\tif(row.type === \"row\"){\r\n\t\t\tvar oldRowGroup = row.modules.group,\r\n\t\t\toldGroupPath = oldRowGroup.getPath(),\r\n\t\t\tnewGroupPath = this.getExpectedPath(row),\r\n\t\t\tsamePath = true;\r\n\r\n\t\t\t// figure out if new group path is the same as old group path\r\n\t\t\tvar samePath = (oldGroupPath.length == newGroupPath.length) && oldGroupPath.every((element, index) => {\r\n\t\t\t\treturn element === newGroupPath[index];\r\n\t\t\t});\r\n\r\n\t\t\t// refresh if they new path and old path aren't the same (aka the row's groupings have changed)\r\n\t\t\tif(!samePath) {\r\n\t\t\t\toldRowGroup.removeRow(row);\r\n\t\t\t\tthis.assignRowToGroup(row, this.groups);\r\n\t\t\t\tthis.refreshData(true);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tgetExpectedPath(row) {\r\n\t\tvar groupPath = [], rowData = row.getData();\r\n\r\n\t\tthis.groupIDLookups.forEach((groupId) => {\r\n\t\t\tgroupPath.push(groupId.func(rowData));\r\n\t\t});\r\n\r\n\t\treturn groupPath;\r\n\t}\r\n\r\n\tupdateGroupRows(force){\r\n\t\tvar output = [],\r\n\t\toldRowCount;\r\n\r\n\t\tthis.groupList.forEach((group) => {\r\n\t\t\toutput = output.concat(group.getHeadersAndRows());\r\n\t\t});\r\n\r\n\t\t//force update of table display\r\n\t\tif(force){\r\n\t\t\tvar displayIndex = this.table.rowManager.setDisplayRows(output, this.getDisplayIndex());\r\n\r\n\t\t\tif(displayIndex !== true){\r\n\t\t\t\tthis.setDisplayIndex(displayIndex);\r\n\t\t\t}\r\n\r\n\t\t\tthis.refreshData(true);\r\n\t\t}\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tscrollHeaders(left){\r\n\t\tif(this.table.options.renderHorizontal === \"virtual\"){\r\n\t\t\tleft -= this.table.columnManager.renderer.vDomPadLeft;\r\n\t\t}\r\n\r\n\t\tleft = left + \"px\";\r\n\r\n\t\tthis.groupList.forEach((group) => {\r\n\t\t\tgroup.scrollHeader(left);\r\n\t\t});\r\n\t}\r\n\r\n\tremoveGroup(group){\r\n\t\tvar groupKey = group.level + \"_\" + group.key,\r\n\t\tindex;\r\n\r\n\t\tif(this.groups[groupKey]){\r\n\t\t\tdelete this.groups[groupKey];\r\n\r\n\t\t\tindex = this.groupList.indexOf(group);\r\n\r\n\t\t\tif(index > -1){\r\n\t\t\t\tthis.groupList.splice(index, 1);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n\r\nGroupRows.moduleName = \"groupRows\";\r\n\r\nexport default GroupRows;","export default {\r\n\tcellEdit: function(action){\r\n\t\taction.component.setValueProcessData(action.data.oldValue);\r\n\t},\r\n\r\n\trowAdd: function(action){\r\n\t\taction.component.deleteActual();\r\n\t},\r\n\r\n\trowDelete: function(action){\r\n\t\tvar newRow = this.table.rowManager.addRowActual(action.data.data, action.data.pos, action.data.index);\r\n\r\n\t\tif(this.table.options.groupBy && this.table.modExists(\"groupRows\")){\r\n\t\t\tthis.table.modules.groupRows.updateGroupRows(true);\r\n\t\t}\r\n\r\n\t\tthis._rebindRow(action.component, newRow);\r\n\t},\r\n\r\n\trowMove: function(action){\r\n\t\tthis.table.rowManager.moveRowActual(action.component, this.table.rowManager.rows[action.data.posFrom], !action.data.after);\r\n\t\tthis.table.rowManager.redraw();\r\n\t},\r\n};","import Module from '../../core/Module.js';\r\n\r\nimport defaultUndoers from './defaults/undoers.js';\r\nimport defaultRedoers from './defaults/redoers.js';\r\n\r\nclass History extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.history = [];\r\n\t\tthis.index = -1;\r\n\r\n\t\tthis.registerTableOption(\"history\", false); //enable edit history\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tif(this.table.options.history){\r\n\t\t\tthis.subscribe(\"cell-value-updated\", this.layoutCell.bind(this));\r\n\t\t\tthis.subscribe(\"cell-delete\", this.clearComponentHistory.bind(this));\r\n\t\t\tthis.subscribe(\"row-delete\", this.rowDeleted.bind(this));\r\n\t\t\tthis.subscribe(\"rows-wipe\", this.clear.bind(this));\r\n\t\t\tthis.subscribe(\"row-added\", this.clear.bind(this));\r\n\t\t\tthis.subscribe(\"row-move\", this.rowMoved.bind(this));\r\n\t\t}\r\n\r\n\t\tthis.registerTableFunction(\"undo\", this.undo.bind(this));\r\n\t\tthis.registerTableFunction(\"redo\", this.redo.bind(this));\r\n\t\tthis.registerTableFunction(\"getHistoryUndoSize\", this.getHistoryUndoSize.bind(this));\r\n\t\tthis.registerTableFunction(\"getHistoryRedoSize\", this.getHistoryRedoSize.bind(this));\r\n\t\tthis.registerTableFunction(\"clearHistory\", this.clear.bind(this));\r\n\t}\r\n\r\n\trowMoved(from, to, after){\r\n\t\tthis.action(\"rowMove\", from, {posFrom:this.table.rowManager.getRowPosition(from), posTo:this.table.rowManager.getRowPosition(to), to:to, after:after});\r\n\t}\r\n\r\n\trowAdded(row, data, pos, index){\r\n\t\tthis.action(\"rowAdd\", row, {data:data, pos:pos, index:index});\r\n\t}\r\n\r\n\trowDeleted(row){\r\n\t\tvar index, rows;\r\n\r\n\t\tif(this.table.options.groupBy){\r\n\r\n\t\t\trows = row.getComponent().getGroup().rows\r\n\t\t\tindex = rows.indexOf(row);\r\n\r\n\t\t\tif(index){\r\n\t\t\t\tindex = rows[index-1];\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tindex = row.table.rowManager.getRowIndex(row);\r\n\r\n\t\t\tif(index){\r\n\t\t\t\tindex = row.table.rowManager.rows[index-1];\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.history.action(\"rowDelete\", row, {data:row.getData(), pos:!index, index:index});\r\n\t}\r\n\r\n\tcellUpdated(cell){\r\n\t\tthis.action(\"cellEdit\", cell, {oldValue:cell.oldValue, newValue:cell.value});\r\n\t}\r\n\r\n\tclear(){\r\n\t\tthis.history = [];\r\n\t\tthis.index = -1;\r\n\t}\r\n\r\n\taction(type, component, data){\r\n\t\tthis.history = this.history.slice(0, this.index + 1);\r\n\r\n\t\tthis.history.push({\r\n\t\t\ttype:type,\r\n\t\t\tcomponent:component,\r\n\t\t\tdata:data,\r\n\t\t});\r\n\r\n\t\tthis.index ++;\r\n\t}\r\n\r\n\tgetHistoryUndoSize(){\r\n\t\treturn this.index + 1;\r\n\t}\r\n\r\n\tgetHistoryRedoSize(){\r\n\t\treturn this.history.length - (this.index + 1);\r\n\t}\r\n\r\n\tclearComponentHistory(component){\r\n\t\tvar index = this.history.findIndex(function(item){\r\n\t\t\treturn item.component === component;\r\n\t\t});\r\n\r\n\t\tif(index > -1){\r\n\t\t\tthis.history.splice(index, 1);\r\n\t\t\tif(index <= this.index){\r\n\t\t\t\tthis.index--;\r\n\t\t\t}\r\n\r\n\t\t\tthis.clearComponentHistory(component);\r\n\t\t}\r\n\t}\r\n\r\n\tundo(){\r\n\t\tif(this.index > -1){\r\n\t\t\tlet action = this.history[this.index];\r\n\r\n\t\t\tHistory.undoers[action.type].call(this, action);\r\n\r\n\t\t\tthis.index--;\r\n\r\n\t\t\tthis.dispatchExternal(\"historyUndo\", action.type, action.component.getComponent(), action.data);\r\n\r\n\t\t\treturn true;\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"History Undo Error - No more history to undo\");\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\tredo(){\r\n\t\tif(this.history.length-1 > this.index){\r\n\r\n\t\t\tthis.index++;\r\n\r\n\t\t\tlet action = this.history[this.index];\r\n\r\n\t\t\tHistory.redoers[action.type].call(this, action);\r\n\r\n\t\t\tthis.dispatchExternal(\"historyRedo\", action.type, action.component.getComponent(), action.data);\r\n\r\n\t\t\treturn true;\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"History Redo Error - No more history to redo\");\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\t//rebind rows to new element after deletion\r\n\t_rebindRow(oldRow, newRow){\r\n\t\tthis.history.forEach(function(action){\r\n\t\t\tif(action.component instanceof Row){\r\n\t\t\t\tif(action.component === oldRow){\r\n\t\t\t\t\taction.component = newRow;\r\n\t\t\t\t}\r\n\t\t\t}else if(action.component instanceof Cell){\r\n\t\t\t\tif(action.component.row === oldRow){\r\n\t\t\t\t\tvar field = action.component.column.getField();\r\n\r\n\t\t\t\t\tif(field){\r\n\t\t\t\t\t\taction.component = newRow.getCell(field);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n}\r\n\r\nHistory.moduleName = \"history\";\r\n\r\n//load defaults\r\nHistory.undoers = defaultUndoers;\r\nHistory.redoers = defaultRedoers;\r\n\r\nexport default History;","import Module from '../../core/Module.js';\r\n\r\nclass HtmlTableImport extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.fieldIndex = [];\r\n\t\tthis.hasIndex = false;\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tthis.subscribe(\"table-building\", this.tableElementCheck.bind(this));\r\n\t}\r\n\r\n\ttableElementCheck(){\r\n\t\tif(this.table.element.tagName === \"TABLE\"){\r\n\t\t\tthis.parseTable();\r\n\t\t}\r\n\t}\r\n\r\n\tparseTable(){\r\n\t\tvar element = this.table.element,\r\n\t\toptions = this.table.options,\r\n\t\tcolumns = options.columns,\r\n\t\theaders = element.getElementsByTagName(\"th\"),\r\n\t\trows = element.getElementsByTagName(\"tbody\")[0],\r\n\t\tdata = [],\r\n\t\tnewTable;\r\n\r\n\t\tthis.hasIndex = false;\r\n\r\n\t\tthis.dispatchExternal(\"htmlImporting\");\r\n\r\n\t\trows = rows ? rows.getElementsByTagName(\"tr\") : [];\r\n\r\n\t\t//check for tablator inline options\r\n\t\tthis._extractOptions(element, options);\r\n\r\n\t\tif(headers.length){\r\n\t\t\tthis._extractHeaders(headers, rows);\r\n\t\t}else{\r\n\t\t\tthis._generateBlankHeaders(headers, rows);\r\n\t\t}\r\n\r\n\t\t//iterate through table rows and build data set\r\n\t\tfor(var index = 0; index < rows.length; index++){\r\n\t\t\tvar row = rows[index],\r\n\t\t\tcells = row.getElementsByTagName(\"td\"),\r\n\t\t\titem = {};\r\n\r\n\t\t\t//create index if the dont exist in table\r\n\t\t\tif(!this.hasIndex){\r\n\t\t\t\titem[options.index] = index;\r\n\t\t\t}\r\n\r\n\t\t\tfor(var i = 0; i < cells.length; i++){\r\n\t\t\t\tvar cell = cells[i];\r\n\t\t\t\tif(typeof this.fieldIndex[i] !== \"undefined\"){\r\n\t\t\t\t\titem[this.fieldIndex[i]] = cell.innerHTML;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t//add row data to item\r\n\t\t\tdata.push(item);\r\n\t\t}\r\n\r\n\t\t//create new element\r\n\t\tvar newElement = document.createElement(\"div\");\r\n\r\n\t\t//transfer attributes to new element\r\n\t\tvar attributes = element.attributes;\r\n\r\n\t\t// loop through attributes and apply them on div\r\n\r\n\t\tfor(var i in attributes){\r\n\t\t\tif(typeof attributes[i] == \"object\"){\r\n\t\t\t\tnewElement.setAttribute(attributes[i].name, attributes[i].value);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// replace table with div element\r\n\t\telement.parentNode.replaceChild(newElement, element);\r\n\r\n\t\toptions.data = data;\r\n\r\n\t\tthis.dispatchExternal(\"htmlImported\");\r\n\r\n\t\tthis.table.element = newElement;\r\n\t}\r\n\r\n\t//extract tabulator attribute options\r\n\t_extractOptions(element, options, defaultOptions){\r\n\t\tvar attributes = element.attributes;\r\n\t\tvar optionsArr = defaultOptions ? Object.assign([], defaultOptions) : Object.keys(options);\r\n\t\tvar optionsList = {};\r\n\r\n\t\toptionsArr.forEach((item) => {\r\n\t\t\toptionsList[item.toLowerCase()] = item;\r\n\t\t});\r\n\r\n\t\tfor(var index in attributes){\r\n\t\t\tvar attrib = attributes[index];\r\n\t\t\tvar name;\r\n\r\n\t\t\tif(attrib && typeof attrib == \"object\" && attrib.name && attrib.name.indexOf(\"tabulator-\") === 0){\r\n\t\t\t\tname = attrib.name.replace(\"tabulator-\", \"\");\r\n\r\n\t\t\t\tif(typeof optionsList[name] !== \"undefined\"){\r\n\t\t\t\t\toptions[optionsList[name]] = this._attribValue(attrib.value);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//get value of attribute\r\n\t_attribValue(value){\r\n\t\tif(value === \"true\"){\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\tif(value === \"false\"){\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\treturn value;\r\n\t}\r\n\r\n\t//find column if it has already been defined\r\n\t_findCol(title){\r\n\t\tvar match = this.table.options.columns.find((column) => {\r\n\t\t\treturn column.title === title;\r\n\t\t});\r\n\r\n\t\treturn match || false;\r\n\t}\r\n\r\n\t//extract column from headers\r\n\t_extractHeaders(headers, rows){\r\n\t\tfor(var index = 0; index < headers.length; index++){\r\n\t\t\tvar header = headers[index],\r\n\t\t\texists = false,\r\n\t\t\tcol = this._findCol(header.textContent),\r\n\t\t\twidth, attributes;\r\n\r\n\t\t\tif(col){\r\n\t\t\t\texists = true;\r\n\t\t\t}else{\r\n\t\t\t\tcol = {title:header.textContent.trim()};\r\n\t\t\t}\r\n\r\n\t\t\tif(!col.field) {\r\n\t\t\t\tcol.field = header.textContent.trim().toLowerCase().replace(\" \", \"_\");\r\n\t\t\t}\r\n\r\n\t\t\twidth = header.getAttribute(\"width\");\r\n\r\n\t\t\tif(width && !col.width)\t{\r\n\t\t\t\tcol.width = width;\r\n\t\t\t}\r\n\r\n\t\t\t//check for tablator inline options\r\n\t\t\tattributes = header.attributes;\r\n\r\n\t\t\t// //check for tablator inline options\r\n\t\t\tthis._extractOptions(header, col, Column.prototype.defaultOptionList);\r\n\r\n\t\t\tthis.fieldIndex[index] = col.field;\r\n\r\n\t\t\tif(col.field == this.table.options.index){\r\n\t\t\t\tthis.hasIndex = true;\r\n\t\t\t}\r\n\r\n\t\t\tif(!exists){\r\n\t\t\t\tthis.table.options.columns.push(col);\r\n\t\t\t}\r\n\r\n\t\t}\r\n\t}\r\n\r\n\t//generate blank headers\r\n\t_generateBlankHeaders(headers, rows){\r\n\t\tfor(var index = 0; index < headers.length; index++){\r\n\t\t\tvar header = headers[index],\r\n\t\t\tcol = {title:\"\", field:\"col\" + index};\r\n\r\n\t\t\tthis.fieldIndex[index] = col.field;\r\n\r\n\t\t\tvar width = header.getAttribute(\"width\");\r\n\r\n\t\t\tif(width){\r\n\t\t\t\tcol.width = width;\r\n\t\t\t}\r\n\r\n\t\t\tthis.table.options.columns.push(col);\r\n\t\t}\r\n\t}\r\n}\r\n\r\nHtmlTableImport.moduleName = \"htmlTableImport\";\r\n\r\nexport default HtmlTableImport;","export default {\r\n\tcellEdit: function(action){\r\n\t\taction.component.setValueProcessData(action.data.newValue);\r\n\t},\r\n\r\n\trowAdd: function(action){\r\n\t\tvar newRow = this.table.rowManager.addRowActual(action.data.data, action.data.pos, action.data.index);\r\n\r\n\t\tif(this.table.options.groupBy && this.table.modExists(\"groupRows\")){\r\n\t\t\tthis.table.modules.groupRows.updateGroupRows(true);\r\n\t\t}\r\n\r\n\t\tthis._rebindRow(action.component, newRow);\r\n\t},\r\n\r\n\trowDelete:function(action){\r\n\t\taction.component.deleteActual();\r\n\t},\r\n\r\n\trowMove: function(action){\r\n\t\tthis.table.rowManager.moveRowActual(action.component, this.table.rowManager.rows[action.data.posTo], action.data.after);\r\n\t\tthis.table.rowManager.redraw();\r\n\t},\r\n};","import Module from '../../core/Module.js';\r\nimport Helpers from '../../core/tools/Helpers.js';\r\n\r\nimport Cell from '../../core/cell/Cell';\r\nimport Column from '../../core/column/Column';\r\n\r\nclass Interaction extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.eventMap = {\r\n\t\t\t//row events\r\n\t\t\trowClick:\"row-click\",\r\n\t\t\trowDblClick:\"row-dblclick\",\r\n\t\t\trowContext:\"row-contextmenu\",\r\n\t\t\trowMouseEnter:\"row-mouseenter\",\r\n\t\t\trowMouseLeave:\"row-mouseleave\",\r\n\t\t\trowMouseOver:\"row-mouseover\",\r\n\t\t\trowMouseOut:\"row-mouseout\",\r\n\t\t\trowMouseMove:\"row-mousemove\",\r\n\t\t\trowTap:\"row\",\r\n\t\t\trowDblTap:\"row\",\r\n\t\t\trowTapHold:\"row\",\r\n\r\n\t\t\t//cell events\r\n\t\t\tcellClick:\"cell-click\",\r\n\t\t\tcellDblClick:\"cell-dblclick\",\r\n\t\t\tcellContext:\"cell-contextmenu\",\r\n\t\t\tcellMouseEnter:\"cell-mouseenter\",\r\n\t\t\tcellMouseLeave:\"cell-mouseleave\",\r\n\t\t\tcellMouseOver:\"cell-mouseover\",\r\n\t\t\tcellMouseOut:\"cell-mouseout\",\r\n\t\t\tcellMouseMove:\"cell-mousemove\",\r\n\t\t\tcellTap:\"cell\",\r\n\t\t\tcellDblTap:\"cell\",\r\n\t\t\tcellTapHold:\"cell\",\r\n\r\n\t\t\t//column header events\r\n\t\t\theaderClick:\"column-click\",\r\n\t\t\theaderDblClick:\"column-dblclick\",\r\n\t\t\theaderContext:\"column-contextmenu\",\r\n\t\t\theaderMouseEnter:\"column-mouseenter\",\r\n\t\t\theaderMouseLeave:\"column-mouseleave\",\r\n\t\t\theaderMouseOver:\"column-mouseover\",\r\n\t\t\theaderMouseOut:\"column-mouseout\",\r\n\t\t\theaderMouseMove:\"column-mousemove\",\r\n\t\t\theaderTap:\"column\",\r\n\t\t\theaderDblTap:\"column\",\r\n\t\t\theaderTapHold:\"column\",\r\n\r\n\t\t\t//group header\r\n\t\t\tgroupClick:\"group-click\",\r\n\t\t\tgroupDblClick:\"group-dblclick\",\r\n\t\t\tgroupContext:\"group-contextmenu\",\r\n\t\t\tgroupMouseEnter:\"group-mouseenter\",\r\n\t\t\tgroupMouseLeave:\"group-mouseleave\",\r\n\t\t\tgroupMouseOver:\"group-mouseover\",\r\n\t\t\tgroupMouseOut:\"group-mouseout\",\r\n\t\t\tgroupMouseMove:\"group-mousemove\",\r\n\t\t\tgroupTap:\"group\",\r\n\t\t\tgroupDblTap:\"group\",\r\n\t\t\tgroupTapHold:\"group\",\r\n\t\t}\r\n\r\n\t\tthis.subscribers = {};\r\n\r\n\t\tthis.touchSubscribers = {};\r\n\r\n\t\tthis.columnSubscribers = {};\r\n\r\n\t\tthis.touchWatchers = {\r\n\t\t\trow:{\r\n\t\t\t\ttap:null,\r\n\t\t\t\ttapDbl:null,\r\n\t\t\t\ttapHold:null,\r\n\t\t\t},\r\n\t\t\tcell:{\r\n\t\t\t\ttap:null,\r\n\t\t\t\ttapDbl:null,\r\n\t\t\t\ttapHold:null,\r\n\t\t\t},\r\n\t\t\tcolumn:{\r\n\t\t\t\ttap:null,\r\n\t\t\t\ttapDbl:null,\r\n\t\t\t\ttapHold:null,\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.registerColumnOption(\"headerClick\");\r\n\t\tthis.registerColumnOption(\"headerDblClick\");\r\n\t\tthis.registerColumnOption(\"headerContext\");\r\n\t\tthis.registerColumnOption(\"headerMouseEnter\");\r\n\t\tthis.registerColumnOption(\"headerMouseLeave\");\r\n\t\tthis.registerColumnOption(\"headerMouseOver\");\r\n\t\tthis.registerColumnOption(\"headerMouseOut\");\r\n\t\tthis.registerColumnOption(\"headerMouseMove\");\r\n\t\tthis.registerColumnOption(\"headerTap\");\r\n\t\tthis.registerColumnOption(\"headerDblTap\");\r\n\t\tthis.registerColumnOption(\"headerTapHold\");\r\n\r\n\t\tthis.registerColumnOption(\"cellClick\");\r\n\t\tthis.registerColumnOption(\"cellDblClick\");\r\n\t\tthis.registerColumnOption(\"cellContext\");\r\n\t\tthis.registerColumnOption(\"cellMouseEnter\");\r\n\t\tthis.registerColumnOption(\"cellMouseLeave\");\r\n\t\tthis.registerColumnOption(\"cellMouseOver\");\r\n\t\tthis.registerColumnOption(\"cellMouseOut\");\r\n\t\tthis.registerColumnOption(\"cellMouseMove\");\r\n\t\tthis.registerColumnOption(\"cellTap\");\r\n\t\tthis.registerColumnOption(\"cellDblTap\");\r\n\t\tthis.registerColumnOption(\"cellTapHold\");\r\n\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tthis.initializeExternalEvents();\r\n\r\n\t\tthis.subscribe(\"column-init\", this.initializeColumn.bind(this))\r\n\t\tthis.subscribe(\"cell-dblclick\", this.cellContentsSelectionFixer.bind(this))\r\n\t}\r\n\r\n\tcellContentsSelectionFixer(e, cell){\r\n\t\tif(this.table.modExists(\"edit\")){\r\n\t\t\tif (this.table.modules.edit.currentCell === this){\r\n\t\t\t\treturn; //prevent instant selection of editor content\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\te.preventDefault();\r\n\r\n\t\ttry{\r\n\t\t\tif (document.selection) { // IE\r\n\t\t\t\tvar range = document.body.createTextRange();\r\n\t\t\t\trange.moveToElementText(this.element);\r\n\t\t\t\trange.select();\r\n\t\t\t} else if (window.getSelection) {\r\n\t\t\t\tvar range = document.createRange();\r\n\t\t\t\trange.selectNode(this.element);\r\n\t\t\t\twindow.getSelection().removeAllRanges();\r\n\t\t\t\twindow.getSelection().addRange(range);\r\n\t\t\t}\r\n\t\t}catch(e){}\r\n\t}\r\n\r\n\tinitializeExternalEvents(){\r\n\t\tfor(let key in this.eventMap){\r\n\t\t\tthis.subscriptionChangeExternal(key, this.subscriptionChanged.bind(this, key))\r\n\t\t}\r\n\t}\r\n\r\n\tsubscriptionChanged(key, added){\r\n\t\tvar index;\r\n\r\n\t\tif(added){\r\n\t\t\tif(!this.subscribers[key]){\r\n\t\t\t\tif(this.eventMap[key].includes(\"-\")){\r\n\t\t\t\t\tthis.subscribers[key] = this.handle.bind(this, key);\r\n\t\t\t\t\tthis.subscribe(this.eventMap[key], this.subscribers[key]);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tthis.subscribeTouchEvents(key);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tif(this.eventMap[key].includes(\"-\")){\r\n\t\t\t\tif(this.subscribers[key] && !this.columnSubscribers[key] && !this.subscribedExternal(key)){\r\n\t\t\t\t\tthis.unsubscribe(this.eventMap[key], this.subscribers[key]);\r\n\t\t\t\t\tdelete this.subscribers[key];\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tthis.unsubscribeTouchEvents(key);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\r\n\tsubscribeTouchEvents(key){\r\n\t\tvar type = this.eventMap[key];\r\n\r\n\t\tif(!this.touchSubscribers[type + \"-touchstart\"]){\r\n\t\t\tthis.touchSubscribers[type + \"-touchstart\"] = this.handleTouch.bind(this, type, \"start\");\r\n\t\t\tthis.touchSubscribers[type + \"-touchend\"] = this.handleTouch.bind(this, type, \"end\");\r\n\r\n\t\t\tthis.subscribe(type + \"-touchstart\", this.touchSubscribers[type + \"-touchstart\"]);\r\n\t\t\tthis.subscribe(type + \"-touchend\", this.touchSubscribers[type + \"-touchend\"]);\r\n\t\t}\r\n\r\n\t\tthis.subscribers[key] = true;\r\n\t}\r\n\r\n\tunsubscribeTouchEvents(key){\r\n\t\tvar notouch = true,\r\n\t\ttype = this.eventMap[key];\r\n\r\n\t\tif(this.subscribers[key] && !this.subscribedExternal(key)){\r\n\t\t\tdelete this.subscribers[key];\r\n\r\n\t\t\tfor(let i in this.eventMap){\r\n\t\t\t\tif(this.eventMap[i] === type){\r\n\t\t\t\t\tif(this.subscribers[i]){\r\n\t\t\t\t\t\tnotouch = false;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif(notouch){\r\n\t\t\t\tthis.unsubscribe(type + \"-touchstart\", this.touchSubscribers[type + \"-touchstart\"]);\r\n\t\t\t\tthis.unsubscribe(type + \"-touchend\", this.touchSubscribers[type + \"-touchend\"]);\r\n\r\n\t\t\t\tdelete this.touchSubscribers[type + \"-touchstart\"];\r\n\t\t\t\tdelete this.touchSubscribers[type + \"-touchend\"];\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tinitializeColumn(column){\r\n\t\tvar def = column.definition;\r\n\r\n\t\tfor(let key in this.eventMap){\r\n\t\t\tif(def[key]){\r\n\t\t\t\tthis.subscriptionChanged(key, true);\r\n\r\n\t\t\t\tif(!this.columnSubscribers[key]){\r\n\t\t\t\t\tthis.columnSubscribers[key] = [];\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.columnSubscribers[key].push(column);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\thandle(action, e, component){\r\n\t\tthis.dispatchEvent(action, e, component);\r\n\t}\r\n\r\n\thandleTouch(type, action, e, component){\r\n\t\tvar watchers = this.touchWatchers[type];\r\n\r\n\t\tif(type === \"column\"){\r\n\t\t\ttype = \"header\";\r\n\t\t}\r\n\r\n\t\tswitch(action){\r\n\t\t\tcase \"start\":\r\n\t\t\twatchers.tap = true;\r\n\r\n\t\t\tclearTimeout(watchers.tapHold);\r\n\r\n\t\t\twatchers.tapHold = setTimeout(() => {\r\n\t\t\t\tclearTimeout(watchers.tapHold);\r\n\t\t\t\twatchers.tapHold = null;\r\n\r\n\t\t\t\twatchers.tap = null;\r\n\t\t\t\tclearTimeout(watchers.tapDbl);\r\n\t\t\t\twatchers.tapDbl = null;\r\n\r\n\t\t\t\tthis.dispatchEvent(type + \"TapHold\", e, component);\r\n\t\t\t}, 1000);\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"end\":\r\n\t\t\tif(watchers.tap){\r\n\r\n\t\t\t\twatchers.tap = null;\r\n\t\t\t\tthis.dispatchEvent(type + \"Tap\", e, component);\r\n\t\t\t}\r\n\r\n\t\t\tif(watchers.tapDbl){\r\n\t\t\t\tclearTimeout(watchers.tapDbl);\r\n\t\t\t\twatchers.tapDbl = null;\r\n\r\n\t\t\t\tthis.dispatchEvent(type + \"DblTap\", e, component);\r\n\t\t\t}else{\r\n\t\t\t\twatchers.tapDbl = setTimeout(() => {\r\n\t\t\t\t\tclearTimeout(watchers.tapDbl);\r\n\t\t\t\t\twatchers.tapDbl = null;\r\n\t\t\t\t}, 300);\r\n\t\t\t}\r\n\r\n\t\t\tclearTimeout(watchers.tapHold);\r\n\t\t\twatchers.tapHold = null;\r\n\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\tdispatchEvent(action, e, component){\r\n\t\tvar componentObj = component.getComponent(),\r\n\t\tcallback;\r\n\r\n\t\tif(this.columnSubscribers[action]){\r\n\r\n\t\t\tif(component instanceof Cell){\r\n\t\t\t\tcallback = component.column.definition[action];\r\n\t\t\t}else if(component instanceof Column){\r\n\t\t\t\tcallback = component.definition[action];\r\n\t\t\t}\r\n\r\n\t\t\tif(callback){\r\n\t\t\t\tcallback(e, componentObj);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.dispatchExternal(action, e, componentObj);\r\n\t}\r\n}\r\n\r\nInteraction.moduleName = \"interaction\";\r\n\r\nexport default Interaction;","export default {\r\n\tnavPrev:\"shift + 9\",\r\n\tnavNext:9,\r\n\tnavUp:38,\r\n\tnavDown:40,\r\n\tscrollPageUp:33,\r\n\tscrollPageDown:34,\r\n\tscrollToStart:36,\r\n\tscrollToEnd:35,\r\n\tundo:\"ctrl + 90\",\r\n\tredo:\"ctrl + 89\",\r\n\tcopyToClipboard:\"ctrl + 67\",\r\n};","import Module from '../../core/Module.js';\r\n\r\nimport defaultBindings from './defaults/bindings.js';\r\nimport defaultActions from './defaults/actions.js';\r\n\r\nclass Keybindings extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.watchKeys = null;\r\n\t\tthis.pressedKeys = null;\r\n\t\tthis.keyupBinding = false;\r\n\t\tthis.keydownBinding = false;\r\n\r\n\t\tthis.registerTableOption(\"keybindings\", []); //array for keybindings\r\n\t\tthis.registerTableOption(\"tabEndNewRow\", false); //create new row when tab to end of table\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tvar bindings = this.table.options.keybindings,\r\n\t\tmergedBindings = {};\r\n\r\n\t\tthis.watchKeys = {};\r\n\t\tthis.pressedKeys = [];\r\n\r\n\t\tif(bindings !== false){\r\n\r\n\t\t\tfor(let key in Keybindings.bindings){\r\n\t\t\t\tmergedBindings[key] = Keybindings.bindings[key];\r\n\t\t\t}\r\n\r\n\t\t\tif(Object.keys(bindings).length){\r\n\r\n\t\t\t\tfor(let key in bindings){\r\n\t\t\t\t\tmergedBindings[key] = bindings[key];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tthis.mapBindings(mergedBindings);\r\n\t\t\tthis.bindEvents();\r\n\t\t}\r\n\r\n\t\tthis.subscribe(\"table-destroy\", this.clearBindings.bind(this));\r\n\t}\r\n\r\n\tmapBindings(bindings){\r\n\t\tfor(let key in bindings){\r\n\t\t\tif(Keybindings.actions[key]){\r\n\t\t\t\tif(bindings[key]){\r\n\t\t\t\t\tif(typeof bindings[key] !== \"object\"){\r\n\t\t\t\t\t\tbindings[key] = [bindings[key]];\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tbindings[key].forEach((binding) => {\r\n\t\t\t\t\t\tthis.mapBinding(key, binding);\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Key Binding Error - no such action:\", key);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tmapBinding(action, symbolsList){\r\n\t\tvar binding = {\r\n\t\t\taction: Keybindings.actions[action],\r\n\t\t\tkeys: [],\r\n\t\t\tctrl: false,\r\n\t\t\tshift: false,\r\n\t\t\tmeta: false,\r\n\t\t};\r\n\r\n\t\tvar symbols = symbolsList.toString().toLowerCase().split(\" \").join(\"\").split(\"+\");\r\n\r\n\t\tsymbols.forEach((symbol) => {\r\n\t\t\tswitch(symbol){\r\n\t\t\t\tcase \"ctrl\":\r\n\t\t\t\tbinding.ctrl = true;\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"shift\":\r\n\t\t\t\tbinding.shift = true;\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"meta\":\r\n\t\t\t\tbinding.meta = true;\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tdefault:\r\n\t\t\t\tsymbol = parseInt(symbol);\r\n\t\t\t\tbinding.keys.push(symbol);\r\n\r\n\t\t\t\tif(!this.watchKeys[symbol]){\r\n\t\t\t\t\tthis.watchKeys[symbol] = [];\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.watchKeys[symbol].push(binding);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tbindEvents(){\r\n\t\tvar self = this;\r\n\r\n\t\tthis.keyupBinding = function(e){\r\n\t\t\tvar code = e.keyCode;\r\n\t\t\tvar bindings = self.watchKeys[code];\r\n\r\n\t\t\tif(bindings){\r\n\r\n\t\t\t\tself.pressedKeys.push(code);\r\n\r\n\t\t\t\tbindings.forEach(function(binding){\r\n\t\t\t\t\tself.checkBinding(e, binding);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tthis.keydownBinding = function(e){\r\n\t\t\tvar code = e.keyCode;\r\n\t\t\tvar bindings = self.watchKeys[code];\r\n\r\n\t\t\tif(bindings){\r\n\r\n\t\t\t\tvar index = self.pressedKeys.indexOf(code);\r\n\r\n\t\t\t\tif(index > -1){\r\n\t\t\t\t\tself.pressedKeys.splice(index, 1);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tthis.table.element.addEventListener(\"keydown\", this.keyupBinding);\r\n\r\n\t\tthis.table.element.addEventListener(\"keyup\", this.keydownBinding);\r\n\t}\r\n\r\n\tclearBindings(){\r\n\t\tif(this.keyupBinding){\r\n\t\t\tthis.table.element.removeEventListener(\"keydown\", this.keyupBinding);\r\n\t\t}\r\n\r\n\t\tif(this.keydownBinding){\r\n\t\t\tthis.table.element.removeEventListener(\"keyup\", this.keydownBinding);\r\n\t\t}\r\n\t}\r\n\r\n\tcheckBinding(e, binding){\r\n\t\tvar match = true;\r\n\r\n\t\tif(e.ctrlKey == binding.ctrl && e.shiftKey == binding.shift && e.metaKey == binding.meta){\r\n\t\t\tbinding.keys.forEach((key) => {\r\n\t\t\t\tvar index = this.pressedKeys.indexOf(key);\r\n\r\n\t\t\t\tif(index == -1){\r\n\t\t\t\t\tmatch = false;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tif(match){\r\n\t\t\t\tbinding.action.call(this, e);\r\n\t\t\t}\r\n\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t}\r\n}\r\n\r\nKeybindings.moduleName = \"keybindings\";\r\n\r\n//load defaults\r\nKeybindings.bindings = defaultBindings;\r\nKeybindings.actions = defaultActions;\r\n\r\nexport default Keybindings;","import Module from '../../core/Module.js';\r\nimport Helpers from '../../core/tools/Helpers.js';\r\n\r\nclass Menu extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.menuElements = [];\r\n\t\tthis.blurEvent = this.hideMenu.bind(this);\r\n\t\tthis.escEvent = this.escMenu.bind(this);\r\n\t\tthis.nestedMenuBlock = false;\r\n\t\tthis.positionReversedX = false;\r\n\r\n\t\tthis.registerTableOption(\"rowContextMenu\", false);\r\n\t\tthis.registerTableOption(\"rowClickMenu\", false);\r\n\t\tthis.registerTableOption(\"groupContextMenu\", false);\r\n\t\tthis.registerTableOption(\"groupClickMenu\", false);\r\n\r\n\t\tthis.registerColumnOption(\"headerContextMenu\");\r\n\t\tthis.registerColumnOption(\"headerMenu\");\r\n\t\tthis.registerColumnOption(\"contextMenu\");\r\n\t\tthis.registerColumnOption(\"clickMenu\");\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tthis.subscribe(\"cell-layout\", this.layoutCell.bind(this));\r\n\t\tthis.subscribe(\"column-init\", this.initializeColumn.bind(this));\r\n\t\tthis.subscribe(\"row-init\", this.initializeRow.bind(this));\r\n\t}\r\n\r\n\tlayoutCell(cell){\r\n\t\tif(cell.column.definition.contextMenu || cell.column.definition.clickMenu){\r\n\t\t\tthis.initializeCell(cell);\r\n\t\t}\r\n\t}\r\n\r\n\tinitializeColumn(column){\r\n\t\tvar def = column.definition;\r\n\r\n\t\tif(def.headerContextMenu || def.headerClickMenu || def.headerMenu){\r\n\t\t\tthis.initializeColumnHeader(this);\r\n\t\t}\r\n\t}\r\n\r\n\tinitializeColumnHeader(column){\r\n\t\tvar headerMenuEl;\r\n\r\n\t\tif(column.definition.headerContextMenu){\r\n\t\t\tcolumn.getElement().addEventListener(\"contextmenu\", this.LoadMenuEvent.bind(this, column, column.definition.headerContextMenu));\r\n\t\t\tthis.tapHold(column, column.definition.headerContextMenu);\r\n\t\t}\r\n\r\n\t\t// if(column.definition.headerClickMenu){\r\n\t\t// \tcolumn.getElement().addEventListener(\"click\", this.LoadMenuEvent.bind(this, column, column.definition.headerClickMenu));\r\n\t\t// }\r\n\r\n\t\tif(column.definition.headerMenu){\r\n\r\n\t\t\theaderMenuEl = document.createElement(\"span\");\r\n\t\t\theaderMenuEl.classList.add(\"tabulator-header-menu-button\");\r\n\t\t\theaderMenuEl.innerHTML = \"⋮\";\r\n\r\n\t\t\theaderMenuEl.addEventListener(\"click\", (e) => {\r\n\t\t\t\te.stopPropagation();\r\n\t\t\t\te.preventDefault();\r\n\r\n\t\t\t\tthis.LoadMenuEvent(column, column.definition.headerMenu, e);\r\n\t\t\t});\r\n\r\n\t\t\tcolumn.titleElement.insertBefore(headerMenuEl, column.titleElement.firstChild);\r\n\t\t}\r\n\t}\r\n\r\n\tLoadMenuEvent(component, menu, e){\r\n\t\tmenu = typeof menu == \"function\" ? menu.call(this.table, component.getComponent(), e) : menu;\r\n\r\n\t\t// if(component instanceof Cell){\r\n\t\t// \te.stopImmediatePropagation();\r\n\t\t// }\r\n\r\n\t\tthis.loadMenu(e, component, menu);\r\n\t}\r\n\r\n\ttapHold(component, menu){\r\n\t\tvar element = component.getElement(),\r\n\t\ttapHold = null,\r\n\t\tloaded = false;\r\n\r\n\t\telement.addEventListener(\"touchstart\", (e) => {\r\n\t\t\tclearTimeout(tapHold);\r\n\t\t\tloaded = false;\r\n\r\n\t\t\ttapHold = setTimeout(() => {\r\n\t\t\t\tclearTimeout(tapHold);\r\n\t\t\t\ttapHold = null;\r\n\t\t\t\tloaded = true;\r\n\r\n\t\t\t\tthis.LoadMenuEvent(component, menu, e);\r\n\t\t\t}, 1000);\r\n\r\n\t\t}, {passive: true});\r\n\r\n\t\telement.addEventListener(\"touchend\", (e) => {\r\n\t\t\tclearTimeout(tapHold);\r\n\t\t\ttapHold = null;\r\n\r\n\t\t\tif(loaded){\r\n\t\t\t\te.preventDefault();\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tinitializeCell(cell){\r\n\t\tif(cell.column.definition.contextMenu){\r\n\t\t\tcell.getElement(true).addEventListener(\"contextmenu\", this.LoadMenuEvent.bind(this, cell, cell.column.definition.contextMenu));\r\n\t\t\tthis.tapHold(cell, cell.column.definition.contextMenu);\r\n\t\t}\r\n\r\n\t\tif(cell.column.definition.clickMenu){\r\n\t\t\tcell.getElement(true).addEventListener(\"click\", this.LoadMenuEvent.bind(this, cell, cell.column.definition.clickMenu));\r\n\t\t}\r\n\t}\r\n\r\n\tinitializeRow(row){\r\n\t\tif(this.table.options.rowContextMenu){\r\n\t\t\trow.getElement().addEventListener(\"contextmenu\", this.LoadMenuEvent.bind(this, row, this.table.options.rowContextMenu));\r\n\t\t\tthis.tapHold(row, this.table.options.rowContextMenu);\r\n\t\t}\r\n\r\n\t\tif(this.table.options.rowClickMenu){\r\n\t\t\trow.getElement().addEventListener(\"click\", this.LoadMenuEvent.bind(this, row, this.table.options.rowClickMenu));\r\n\t\t}\r\n\t}\r\n\r\n\tinitializeGroup (group){\r\n\t\tif(this.table.options.groupContextMenu){\r\n\t\t\tgroup.getElement().addEventListener(\"contextmenu\", this.LoadMenuEvent.bind(this, group, this.table.options.groupContextMenu));\r\n\t\t\tthis.tapHold(group, this.table.options.groupContextMenu);\r\n\t\t}\r\n\r\n\t\tif(this.table.options.groupClickMenu){\r\n\t\t\tgroup.getElement().addEventListener(\"click\", this.LoadMenuEvent.bind(this, group, this.table.options.groupClickMenu));\r\n\t\t}\r\n\t}\r\n\r\n\tloadMenu(e, component, menu, parentEl){\r\n\r\n\t\tvar touch = !(e instanceof MouseEvent);\r\n\r\n\t\tvar menuEl = document.createElement(\"div\");\r\n\t\tmenuEl.classList.add(\"tabulator-menu\");\r\n\r\n\t\tif(!touch){\r\n\t\t\te.preventDefault();\r\n\t\t}\r\n\r\n\t\t//abort if no menu set\r\n\t\tif(!menu || !menu.length){\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif(!parentEl){\r\n\t\t\tif(this.nestedMenuBlock){\r\n\t\t\t\t//abort if child menu already open\r\n\t\t\t\tif(this.isOpen()){\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tthis.nestedMenuBlock = setTimeout(() => {\r\n\t\t\t\t\tthis.nestedMenuBlock = false;\r\n\t\t\t\t}, 100)\r\n\t\t\t}\r\n\r\n\t\t\tthis.hideMenu();\r\n\t\t\tthis.menuElements = [];\r\n\t\t}\r\n\r\n\t\tmenu.forEach((item) => {\r\n\t\t\tvar itemEl = document.createElement(\"div\"),\r\n\t\t\tlabel = item.label,\r\n\t\t\tdisabled = item.disabled;\r\n\r\n\t\t\tif(item.separator){\r\n\t\t\t\titemEl.classList.add(\"tabulator-menu-separator\");\r\n\t\t\t}else{\r\n\t\t\t\titemEl.classList.add(\"tabulator-menu-item\");\r\n\r\n\t\t\t\tif(typeof label == \"function\"){\r\n\t\t\t\t\tlabel = label.call(this.table, component.getComponent());\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(label instanceof Node){\r\n\t\t\t\t\titemEl.appendChild(label);\r\n\t\t\t\t}else{\r\n\t\t\t\t\titemEl.innerHTML = label;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(typeof disabled == \"function\"){\r\n\t\t\t\t\tdisabled = disabled.call(this.table, component.getComponent());\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(disabled){\r\n\t\t\t\t\titemEl.classList.add(\"tabulator-menu-item-disabled\");\r\n\t\t\t\t\titemEl.addEventListener(\"click\", (e) => {\r\n\t\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\t});\r\n\t\t\t\t}else{\r\n\t\t\t\t\tif(item.menu && item.menu.length){\r\n\t\t\t\t\t\titemEl.addEventListener(\"click\", (e) => {\r\n\t\t\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\t\t\tthis.hideOldSubMenus(menuEl);\r\n\t\t\t\t\t\t\tthis.loadMenu(e, component, item.menu, itemEl);\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tif(item.action){\r\n\t\t\t\t\t\t\titemEl.addEventListener(\"click\", (e) => {\r\n\t\t\t\t\t\t\t\titem.action(e, component.getComponent());\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(item.menu && item.menu.length){\r\n\t\t\t\t\titemEl.classList.add(\"tabulator-menu-item-submenu\");\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tmenuEl.appendChild(itemEl);\r\n\t\t});\r\n\r\n\t\tmenuEl.addEventListener(\"click\", (e) => {\r\n\t\t\tthis.hideMenu();\r\n\t\t});\r\n\r\n\t\tthis.menuElements.push(menuEl);\r\n\t\tthis.positionMenu(menuEl, parentEl, touch, e);\r\n\t}\r\n\r\n\thideOldSubMenus(menuEl){\r\n\t\tvar index = this.menuElements.indexOf(menuEl);\r\n\r\n\t\tif(index > -1){\r\n\t\t\tfor(let i = this.menuElements.length - 1; i > index; i--){\r\n\t\t\t\tvar el = this.menuElements[i];\r\n\r\n\t\t\t\tif(el.parentNode){\r\n\t\t\t\t\tel.parentNode.removeChild(el);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.menuElements.pop();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tpositionMenu(element, parentEl, touch, e){\r\n\t\tvar docHeight = Math.max(document.body.offsetHeight, window.innerHeight),\r\n\t\tx, y, parentOffset;\r\n\r\n\t\tif(!parentEl){\r\n\t\t\tx = touch ? e.touches[0].pageX : e.pageX;\r\n\t\t\ty = touch ? e.touches[0].pageY : e.pageY;\r\n\r\n\t\t\tthis.positionReversedX = false;\r\n\t\t}else{\r\n\t\t\tparentOffset = Helpers.elOffset(parentEl);\r\n\t\t\tx = parentOffset.left + parentEl.offsetWidth;\r\n\t\t\ty = parentOffset.top - 1;\r\n\t\t}\r\n\r\n\t\telement.style.top = y + \"px\";\r\n\t\telement.style.left = x + \"px\";\r\n\r\n\t\tsetTimeout(() => {\r\n\t\t\tthis.table.rowManager.element.addEventListener(\"scroll\", this.blurEvent);\r\n\t\t\tdocument.body.addEventListener(\"click\", this.blurEvent);\r\n\t\t\tdocument.body.addEventListener(\"contextmenu\", this.blurEvent);\r\n\t\t\twindow.addEventListener(\"resize\", this.blurEvent);\r\n\t\t\tdocument.body.addEventListener(\"keydown\", this.escEvent);\r\n\t\t}, 100);\r\n\r\n\t\tdocument.body.appendChild(element);\r\n\r\n\t\t//move menu to start on bottom edge if it is too close to the edge of the screen\r\n\t\tif((y + element.offsetHeight) >= docHeight){\r\n\t\t\telement.style.top = \"\";\r\n\r\n\t\t\tif(parentEl){\r\n\t\t\t\telement.style.bottom = (docHeight - parentOffset.top - parentEl.offsetHeight - 1) + \"px\";\r\n\t\t\t}else{\r\n\t\t\t\telement.style.bottom = (docHeight - y) + \"px\";\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//move menu to start on right edge if it is too close to the edge of the screen\r\n\t\tif((x + element.offsetWidth) >= document.body.offsetWidth || this.positionReversedX){\r\n\t\t\telement.style.left = \"\";\r\n\r\n\t\t\tif(parentEl){\r\n\t\t\t\telement.style.right = (document.documentElement.offsetWidth - parentOffset.left) + \"px\";\r\n\t\t\t}else{\r\n\t\t\t\telement.style.right = (document.documentElement.offsetWidth - x) + \"px\";\r\n\t\t\t}\r\n\r\n\t\t\tthis.positionReversedX = true;\r\n\t\t}\r\n\t}\r\n\r\n\tisOpen(){\r\n\t\treturn !!this.menuElements.length;\r\n\t}\r\n\r\n\tescMenu(e){\r\n\t\tif(e.keyCode == 27){\r\n\t\t\tthis.hideMenu();\r\n\t\t}\r\n\t}\r\n\r\n\thideMenu(){\r\n\t\tthis.menuElements.forEach((menuEl) => {\r\n\t\t\tif(menuEl.parentNode){\r\n\t\t\t\tmenuEl.parentNode.removeChild(menuEl);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tdocument.body.removeEventListener(\"keydown\", this.escEvent);\r\n\t\tdocument.body.removeEventListener(\"click\", this.blurEvent);\r\n\t\tdocument.body.removeEventListener(\"contextmenu\", this.blurEvent);\r\n\t\twindow.removeEventListener(\"resize\", this.blurEvent);\r\n\t\tthis.table.rowManager.element.removeEventListener(\"scroll\", this.blurEvent);\r\n\t}\r\n}\r\n\r\nMenu.moduleName = \"menu\";\r\n\r\nexport default Menu;","export default {\r\n\tkeyBlock:function(e){\r\n\t\te.stopPropagation();\r\n\t\te.preventDefault();\r\n\t},\r\n\tscrollPageUp:function(e){\r\n\t\tvar rowManager = this.table.rowManager,\r\n\t\tnewPos = rowManager.scrollTop - rowManager.element.clientHeight,\r\n\t\tscrollMax = rowManager.element.scrollHeight;\r\n\r\n\t\te.preventDefault();\r\n\r\n\t\tif(rowManager.displayRowsCount){\r\n\t\t\tif(newPos >= 0){\r\n\t\t\t\trowManager.element.scrollTop = newPos;\r\n\t\t\t}else{\r\n\t\t\t\trowManager.scrollToRow(rowManager.getDisplayRows()[0]);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.table.element.focus();\r\n\t},\r\n\tscrollPageDown:function(e){\r\n\t\tvar rowManager = this.table.rowManager,\r\n\t\tnewPos = rowManager.scrollTop + rowManager.element.clientHeight,\r\n\t\tscrollMax = rowManager.element.scrollHeight;\r\n\r\n\t\te.preventDefault();\r\n\r\n\t\tif(rowManager.displayRowsCount){\r\n\t\t\tif(newPos <= scrollMax){\r\n\t\t\t\trowManager.element.scrollTop = newPos;\r\n\t\t\t}else{\r\n\t\t\t\trowManager.scrollToRow(rowManager.getDisplayRows()[rowManager.displayRowsCount - 1]);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.table.element.focus();\r\n\r\n\t},\r\n\tscrollToStart:function(e){\r\n\t\tvar rowManager = this.table.rowManager;\r\n\r\n\t\te.preventDefault();\r\n\r\n\t\tif(rowManager.displayRowsCount){\r\n\t\t\trowManager.scrollToRow(rowManager.getDisplayRows()[0]);\r\n\t\t}\r\n\r\n\t\tthis.table.element.focus();\r\n\t},\r\n\tscrollToEnd:function(e){\r\n\t\tvar rowManager = this.table.rowManager;\r\n\r\n\t\te.preventDefault();\r\n\r\n\t\tif(rowManager.displayRowsCount){\r\n\t\t\trowManager.scrollToRow(rowManager.getDisplayRows()[rowManager.displayRowsCount - 1]);\r\n\t\t}\r\n\r\n\t\tthis.table.element.focus();\r\n\t},\r\n\tnavPrev:function(e){\r\n\t\tthis.dispatch(\"keybinding-nav-prev\", e);\r\n\t},\r\n\r\n\tnavNext:function(e){\r\n\t\tthis.dispatch(\"keybinding-nav-next\", e);\r\n\t},\r\n\r\n\tnavLeft:function(e){\r\n\t\tthis.dispatch(\"keybinding-nav-left\", e);\r\n\t},\r\n\r\n\tnavRight:function(e){\r\n\t\tthis.dispatch(\"keybinding-nav-right\", e);\r\n\t},\r\n\r\n\tnavUp:function(e){\r\n\t\tthis.dispatch(\"keybinding-nav-up\", e);\r\n\t},\r\n\r\n\tnavDown:function(e){\r\n\t\tthis.dispatch(\"keybinding-nav-down\", e);\r\n\t},\r\n\r\n\tundo:function(e){\r\n\t\tvar cell = false;\r\n\t\tif(this.table.options.history && this.table.modExists(\"history\") && this.table.modExists(\"edit\")){\r\n\r\n\t\t\tcell = this.table.modules.edit.currentCell;\r\n\r\n\t\t\tif(!cell){\r\n\t\t\t\te.preventDefault();\r\n\t\t\t\tthis.table.modules.history.undo();\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\tredo:function(e){\r\n\t\tvar cell = false;\r\n\t\tif(this.table.options.history && this.table.modExists(\"history\") && this.table.modExists(\"edit\")){\r\n\r\n\t\t\tcell = this.table.modules.edit.currentCell;\r\n\r\n\t\t\tif(!cell){\r\n\t\t\t\te.preventDefault();\r\n\t\t\t\tthis.table.modules.history.redo();\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\tcopyToClipboard:function(e){\r\n\t\tif(!this.table.modules.edit.currentCell){\r\n\t\t\tif(this.table.modExists(\"clipboard\", true)){\r\n\t\t\t\tthis.table.modules.clipboard.copy(false, true);\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n};","import Module from '../../core/Module.js';\r\nimport Helpers from '../../core/tools/Helpers.js';\r\n\r\nclass MoveColumns extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.placeholderElement = this.createPlaceholderElement();\r\n\t\tthis.hoverElement = false; //floating column header element\r\n\t\tthis.checkTimeout = false; //click check timeout holder\r\n\t\tthis.checkPeriod = 250; //period to wait on mousedown to consider this a move and not a click\r\n\t\tthis.moving = false; //currently moving column\r\n\t\tthis.toCol = false; //destination column\r\n\t\tthis.toColAfter = false; //position of moving column relative to the desitnation column\r\n\t\tthis.startX = 0; //starting position within header element\r\n\t\tthis.autoScrollMargin = 40; //auto scroll on edge when within margin\r\n\t\tthis.autoScrollStep = 5; //auto scroll distance in pixels\r\n\t\tthis.autoScrollTimeout = false; //auto scroll timeout\r\n\t\tthis.touchMove = false;\r\n\r\n\t\tthis.moveHover = this.moveHover.bind(this);\r\n\t\tthis.endMove = this.endMove.bind(this);\r\n\r\n\t\tthis.registerTableOption(\"movableColumns\", false); //enable movable columns\r\n\t}\r\n\r\n\tcreatePlaceholderElement(){\r\n\t\tvar el = document.createElement(\"div\");\r\n\r\n\t\tel.classList.add(\"tabulator-col\");\r\n\t\tel.classList.add(\"tabulator-col-placeholder\");\r\n\r\n\t\treturn el;\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tthis.subscribe(\"column-init\", this.initializeColumn.bind(this));\r\n\t}\r\n\r\n\tinitializeColumn(column){\r\n\t\tvar self = this,\r\n\t\tconfig = {},\r\n\t\tcolEl;\r\n\r\n\t\tif(!column.modules.frozen){\r\n\r\n\t\t\tcolEl = column.getElement();\r\n\r\n\t\t\tconfig.mousemove = function(e){\r\n\t\t\t\tif(column.parent === self.moving.parent){\r\n\t\t\t\t\tif((((self.touchMove ? e.touches[0].pageX : e.pageX) - Helpers.elOffset(colEl).left) + self.table.columnManager.element.scrollLeft) > (column.getWidth() / 2)){\r\n\t\t\t\t\t\tif(self.toCol !== column || !self.toColAfter){\r\n\t\t\t\t\t\t\tcolEl.parentNode.insertBefore(self.placeholderElement, colEl.nextSibling);\r\n\t\t\t\t\t\t\tself.moveColumn(column, true);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tif(self.toCol !== column || self.toColAfter){\r\n\t\t\t\t\t\t\tcolEl.parentNode.insertBefore(self.placeholderElement, colEl);\r\n\t\t\t\t\t\t\tself.moveColumn(column, false);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}.bind(self);\r\n\r\n\t\t\tcolEl.addEventListener(\"mousedown\", function(e){\r\n\t\t\t\tself.touchMove = false;\r\n\t\t\t\tif(e.which === 1){\r\n\t\t\t\t\tself.checkTimeout = setTimeout(function(){\r\n\t\t\t\t\t\tself.startMove(e, column);\r\n\t\t\t\t\t}, self.checkPeriod);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tcolEl.addEventListener(\"mouseup\", function(e){\r\n\t\t\t\tif(e.which === 1){\r\n\t\t\t\t\tif(self.checkTimeout){\r\n\t\t\t\t\t\tclearTimeout(self.checkTimeout);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tself.bindTouchEvents(column);\r\n\t\t}\r\n\r\n\t\tcolumn.modules.moveColumn = config;\r\n\t}\r\n\r\n\tbindTouchEvents(column){\r\n\t\tvar colEl = column.getElement(),\r\n\t\tstartXMove = false, //shifting center position of the cell\r\n\t\tdir = false,\r\n\t\tcurrentCol, nextCol, prevCol, nextColWidth, prevColWidth, nextColWidthLast, prevColWidthLast;\r\n\r\n\t\tcolEl.addEventListener(\"touchstart\", (e) => {\r\n\t\t\tthis.checkTimeout = setTimeout(() => {\r\n\t\t\t\tthis.touchMove = true;\r\n\t\t\t\tcurrentCol = column;\r\n\t\t\t\tnextCol = column.nextColumn();\r\n\t\t\t\tnextColWidth = nextCol ? nextCol.getWidth()/2 : 0;\r\n\t\t\t\tprevCol = column.prevColumn();\r\n\t\t\t\tprevColWidth = prevCol ? prevCol.getWidth()/2 : 0;\r\n\t\t\t\tnextColWidthLast = 0;\r\n\t\t\t\tprevColWidthLast = 0;\r\n\t\t\t\tstartXMove = false;\r\n\r\n\t\t\t\tthis.startMove(e, column);\r\n\t\t\t}, this.checkPeriod);\r\n\t\t}, {passive: true});\r\n\r\n\t\tcolEl.addEventListener(\"touchmove\", (e) => {\r\n\t\t\tvar halfCol, diff, moveToCol;\r\n\r\n\t\t\tif(this.moving){\r\n\t\t\t\tthis.moveHover(e);\r\n\r\n\t\t\t\tif(!startXMove){\r\n\t\t\t\t\tstartXMove = e.touches[0].pageX;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tdiff = e.touches[0].pageX - startXMove;\r\n\r\n\t\t\t\tif(diff > 0){\r\n\t\t\t\t\tif(nextCol && diff - nextColWidthLast > nextColWidth){\r\n\t\t\t\t\t\tmoveToCol = nextCol;\r\n\r\n\t\t\t\t\t\tif(moveToCol !== column){\r\n\t\t\t\t\t\t\tstartXMove = e.touches[0].pageX;\r\n\t\t\t\t\t\t\tmoveToCol.getElement().parentNode.insertBefore(this.placeholderElement, moveToCol.getElement().nextSibling);\r\n\t\t\t\t\t\t\tthis.moveColumn(moveToCol, true);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}else{\r\n\t\t\t\t\tif(prevCol && -diff - prevColWidthLast > prevColWidth){\r\n\t\t\t\t\t\tmoveToCol = prevCol;\r\n\r\n\t\t\t\t\t\tif(moveToCol !== column){\r\n\t\t\t\t\t\t\tstartXMove = e.touches[0].pageX;\r\n\t\t\t\t\t\t\tmoveToCol.getElement().parentNode.insertBefore(this.placeholderElement, moveToCol.getElement());\r\n\t\t\t\t\t\t\tthis.moveColumn(moveToCol, false);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(moveToCol){\r\n\t\t\t\t\tcurrentCol = moveToCol;\r\n\t\t\t\t\tnextCol = moveToCol.nextColumn();\r\n\t\t\t\t\tnextColWidthLast = nextColWidth;\r\n\t\t\t\t\tnextColWidth = nextCol ? nextCol.getWidth() / 2 : 0;\r\n\t\t\t\t\tprevCol = moveToCol.prevColumn();\r\n\t\t\t\t\tprevColWidthLast = prevColWidth;\r\n\t\t\t\t\tprevColWidth = prevCol ? prevCol.getWidth() / 2 : 0;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}, {passive: true});\r\n\r\n\t\tcolEl.addEventListener(\"touchend\", (e) => {\r\n\t\t\tif(this.checkTimeout){\r\n\t\t\t\tclearTimeout(this.checkTimeout);\r\n\t\t\t}\r\n\t\t\tif(this.moving){\r\n\t\t\t\tthis.endMove(e);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tstartMove(e, column){\r\n\t\tvar element = column.getElement();\r\n\r\n\t\tthis.moving = column;\r\n\t\tthis.startX = (this.touchMove ? e.touches[0].pageX : e.pageX) - Helpers.elOffset(element).left;\r\n\r\n\t\tthis.table.element.classList.add(\"tabulator-block-select\");\r\n\r\n\t\t//create placeholder\r\n\t\tthis.placeholderElement.style.width = column.getWidth() + \"px\";\r\n\t\tthis.placeholderElement.style.height = column.getHeight() + \"px\";\r\n\r\n\t\telement.parentNode.insertBefore(this.placeholderElement, element);\r\n\t\telement.parentNode.removeChild(element);\r\n\r\n\t\t//create hover element\r\n\t\tthis.hoverElement = element.cloneNode(true);\r\n\t\tthis.hoverElement.classList.add(\"tabulator-moving\");\r\n\r\n\t\tthis.table.columnManager.getElement().appendChild(this.hoverElement);\r\n\r\n\t\tthis.hoverElement.style.left = \"0\";\r\n\t\tthis.hoverElement.style.bottom = \"0\";\r\n\r\n\t\tif(!this.touchMove){\r\n\t\t\tthis._bindMouseMove();\r\n\r\n\t\t\tdocument.body.addEventListener(\"mousemove\", this.moveHover);\r\n\t\t\tdocument.body.addEventListener(\"mouseup\", this.endMove);\r\n\t\t}\r\n\r\n\t\tthis.moveHover(e);\r\n\t}\r\n\r\n\t_bindMouseMove(){\r\n\t\tthis.table.columnManager.columnsByIndex.forEach(function(column){\r\n\t\t\tif(column.modules.moveColumn.mousemove){\r\n\t\t\t\tcolumn.getElement().addEventListener(\"mousemove\", column.modules.moveColumn.mousemove);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t_unbindMouseMove(){\r\n\t\tthis.table.columnManager.columnsByIndex.forEach(function(column){\r\n\t\t\tif(column.modules.moveColumn.mousemove){\r\n\t\t\t\tcolumn.getElement().removeEventListener(\"mousemove\", column.modules.moveColumn.mousemove);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tmoveColumn(column, after){\r\n\t\tvar movingCells = this.moving.getCells();\r\n\r\n\t\tthis.toCol = column;\r\n\t\tthis.toColAfter = after;\r\n\r\n\t\tif(after){\r\n\t\t\tcolumn.getCells().forEach(function(cell, i){\r\n\t\t\t\tvar cellEl = cell.getElement(true);\r\n\t\t\t\tcellEl.parentNode.insertBefore(movingCells[i].getElement(), cellEl.nextSibling);\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tcolumn.getCells().forEach(function(cell, i){\r\n\t\t\t\tvar cellEl = cell.getElement(true);\r\n\t\t\t\tcellEl.parentNode.insertBefore(movingCells[i].getElement(), cellEl);\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tendMove(e){\r\n\t\tif(e.which === 1 || this.touchMove){\r\n\t\t\tthis._unbindMouseMove();\r\n\r\n\t\t\tthis.placeholderElement.parentNode.insertBefore(this.moving.getElement(), this.placeholderElement.nextSibling);\r\n\t\t\tthis.placeholderElement.parentNode.removeChild(this.placeholderElement);\r\n\t\t\tthis.hoverElement.parentNode.removeChild(this.hoverElement);\r\n\r\n\t\t\tthis.table.element.classList.remove(\"tabulator-block-select\");\r\n\r\n\t\t\tif(this.toCol){\r\n\t\t\t\tthis.table.columnManager.moveColumnActual(this.moving, this.toCol, this.toColAfter);\r\n\t\t\t}\r\n\r\n\t\t\tthis.moving = false;\r\n\t\t\tthis.toCol = false;\r\n\t\t\tthis.toColAfter = false;\r\n\r\n\t\t\tif(!this.touchMove){\r\n\t\t\t\tdocument.body.removeEventListener(\"mousemove\", this.moveHover);\r\n\t\t\t\tdocument.body.removeEventListener(\"mouseup\", this.endMove);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tmoveHover(e){\r\n\t\tvar columnHolder = this.table.columnManager.getElement(),\r\n\t\tscrollLeft = columnHolder.scrollLeft,\r\n\t\txPos = ((this.touchMove ? e.touches[0].pageX : e.pageX) - Helpers.elOffset(columnHolder).left) + scrollLeft,\r\n\t\tscrollPos;\r\n\r\n\t\tthis.hoverElement.style.left = (xPos - this.startX) + \"px\";\r\n\r\n\t\tif(xPos - scrollLeft < this.autoScrollMargin){\r\n\t\t\tif(!this.autoScrollTimeout){\r\n\t\t\t\tthis.autoScrollTimeout = setTimeout(() => {\r\n\t\t\t\t\tscrollPos = Math.max(0,scrollLeft-5);\r\n\t\t\t\t\tthis.table.rowManager.getElement().scrollLeft = scrollPos;\r\n\t\t\t\t\tthis.autoScrollTimeout = false;\r\n\t\t\t\t}, 1);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(scrollLeft + columnHolder.clientWidth - xPos < this.autoScrollMargin){\r\n\t\t\tif(!this.autoScrollTimeout){\r\n\t\t\t\tthis.autoScrollTimeout = setTimeout(() => {\r\n\t\t\t\t\tscrollPos = Math.min(columnHolder.clientWidth, scrollLeft+5);\r\n\t\t\t\t\tthis.table.rowManager.getElement().scrollLeft = scrollPos;\r\n\t\t\t\t\tthis.autoScrollTimeout = false;\r\n\t\t\t\t}, 1);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n\r\nMoveColumns.moduleName = \"moveColumn\";\r\n\r\nexport default MoveColumns;\r\n","import Module from '../../core/Module.js';\r\nimport Helpers from '../../core/tools/Helpers.js';\r\n\r\nclass MoveRows extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.placeholderElement = this.createPlaceholderElement();\r\n\t\tthis.hoverElement = false; //floating row header element\r\n\t\tthis.checkTimeout = false; //click check timeout holder\r\n\t\tthis.checkPeriod = 150; //period to wait on mousedown to consider this a move and not a click\r\n\t\tthis.moving = false; //currently moving row\r\n\t\tthis.toRow = false; //destination row\r\n\t\tthis.toRowAfter = false; //position of moving row relative to the desitnation row\r\n\t\tthis.hasHandle = false; //row has handle instead of fully movable row\r\n\t\tthis.startY = 0; //starting Y position within header element\r\n\t\tthis.startX = 0; //starting X position within header element\r\n\r\n\t\tthis.moveHover = this.moveHover.bind(this);\r\n\t\tthis.endMove = this.endMove.bind(this);\r\n\t\tthis.tableRowDropEvent = false;\r\n\r\n\t\tthis.touchMove = false;\r\n\r\n\t\tthis.connection = false;\r\n\t\tthis.connectionSelectorsTables = false;\r\n\t\tthis.connectionSelectorsElements = false;\r\n\t\tthis.connectionElements = [];\r\n\t\tthis.connections = [];\r\n\r\n\t\tthis.connectedTable = false;\r\n\t\tthis.connectedRow = false;\r\n\r\n\t\tthis.registerTableOption(\"movableRows\", false); //enable movable rows\r\n\t\tthis.registerTableOption(\"movableRowsConnectedTables\", false); //tables for movable rows to be connected to\r\n\t\tthis.registerTableOption(\"movableRowsConnectedElements\", false); //other elements for movable rows to be connected to\r\n\t\tthis.registerTableOption(\"movableRowsSender\", false);\r\n\t\tthis.registerTableOption(\"movableRowsReceiver\", \"insert\");\r\n\r\n\t\tthis.registerColumnOption(\"rowHandle\");\r\n\t}\r\n\r\n\tcreatePlaceholderElement(){\r\n\t\tvar el = document.createElement(\"div\");\r\n\r\n\t\tel.classList.add(\"tabulator-row\");\r\n\t\tel.classList.add(\"tabulator-row-placeholder\");\r\n\r\n\t\treturn el;\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tif(this.table.options.movableRows){\r\n\t\t\tthis.connectionSelectorsTables = this.table.options.movableRowsConnectedTables;\r\n\t\t\tthis.connectionSelectorsElements = this.table.options.movableRowsConnectedElements;\r\n\r\n\t\t\tthis.connection = this.connectionSelectorsTables || this.connectionSelectorsElements;\r\n\r\n\t\t\tthis.subscribe(\"cell-init\", this.initializeCell.bind(this));\r\n\t\t\tthis.subscribe(\"column-init\", this.initializeColumn.bind(this));\r\n\t\t\tthis.subscribe(\"row-init\", this.initializeRow.bind(this));\r\n\t\t}\r\n\t}\r\n\r\n\tinitializeGroupHeader(group){\r\n\t\tvar self = this,\r\n\t\tconfig = {},\r\n\t\trowEl;\r\n\r\n\t\t//inter table drag drop\r\n\t\tconfig.mouseup = function(e){\r\n\t\t\tself.tableRowDrop(e, row);\r\n\t\t}.bind(self);\r\n\r\n\t\t//same table drag drop\r\n\t\tconfig.mousemove = function(e){\r\n\t\t\tif(((e.pageY - Helpers.elOffset(group.element).top) + self.table.rowManager.element.scrollTop) > (group.getHeight() / 2)){\r\n\t\t\t\tif(self.toRow !== group || !self.toRowAfter){\r\n\t\t\t\t\tvar rowEl = group.getElement();\r\n\t\t\t\t\trowEl.parentNode.insertBefore(self.placeholderElement, rowEl.nextSibling);\r\n\t\t\t\t\tself.moveRow(group, true);\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tif(self.toRow !== group || self.toRowAfter){\r\n\t\t\t\t\tvar rowEl = group.getElement();\r\n\t\t\t\t\tif(rowEl.previousSibling){\r\n\t\t\t\t\t\trowEl.parentNode.insertBefore(self.placeholderElement, rowEl);\r\n\t\t\t\t\t\tself.moveRow(group, false);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}.bind(self);\r\n\r\n\t\tgroup.modules.moveRow = config;\r\n\t}\r\n\r\n\tinitializeRow(row){\r\n\t\tvar self = this,\r\n\t\tconfig = {},\r\n\t\trowEl;\r\n\r\n\t\t//inter table drag drop\r\n\t\tconfig.mouseup = function(e){\r\n\t\t\tself.tableRowDrop(e, row);\r\n\t\t}.bind(self);\r\n\r\n\t\t//same table drag drop\r\n\t\tconfig.mousemove = function(e){\r\n\t\t\tvar rowEl = row.getElement();\r\n\r\n\t\t\tif(((e.pageY - Helpers.elOffset(rowEl).top) + self.table.rowManager.element.scrollTop) > (row.getHeight() / 2)){\r\n\t\t\t\tif(self.toRow !== row || !self.toRowAfter){\r\n\t\t\t\t\trowEl.parentNode.insertBefore(self.placeholderElement, rowEl.nextSibling);\r\n\t\t\t\t\tself.moveRow(row, true);\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tif(self.toRow !== row || self.toRowAfter){\r\n\t\t\t\t\trowEl.parentNode.insertBefore(self.placeholderElement, rowEl);\r\n\t\t\t\t\tself.moveRow(row, false);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}.bind(self);\r\n\r\n\r\n\t\tif(!this.hasHandle){\r\n\r\n\t\t\trowEl = row.getElement();\r\n\r\n\t\t\trowEl.addEventListener(\"mousedown\", function(e){\r\n\t\t\t\tif(e.which === 1){\r\n\t\t\t\t\tself.checkTimeout = setTimeout(function(){\r\n\t\t\t\t\t\tself.startMove(e, row);\r\n\t\t\t\t\t}, self.checkPeriod);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\trowEl.addEventListener(\"mouseup\", function(e){\r\n\t\t\t\tif(e.which === 1){\r\n\t\t\t\t\tif(self.checkTimeout){\r\n\t\t\t\t\t\tclearTimeout(self.checkTimeout);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tthis.bindTouchEvents(row, row.getElement());\r\n\t\t}\r\n\r\n\t\trow.modules.moveRow = config;\r\n\t}\r\n\r\n\tinitializeColumn(column){\r\n\t\tif(column.definition.rowHandle && this.table.options.movableRows !== false){\r\n\t\t\tthis.hasHandle = true;\r\n\t\t}\r\n\t}\r\n\r\n\tinitializeCell(cell){\r\n\t\tif(cell.column.definition.rowHandle && this.table.options.movableRows !== false){\r\n\t\t\tvar self = this,\r\n\t\t\tcellEl = cell.getElement(true);\r\n\r\n\t\t\tcellEl.addEventListener(\"mousedown\", function(e){\r\n\t\t\t\tif(e.which === 1){\r\n\t\t\t\t\tself.checkTimeout = setTimeout(function(){\r\n\t\t\t\t\t\tself.startMove(e, cell.row);\r\n\t\t\t\t\t}, self.checkPeriod);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tcellEl.addEventListener(\"mouseup\", function(e){\r\n\t\t\t\tif(e.which === 1){\r\n\t\t\t\t\tif(self.checkTimeout){\r\n\t\t\t\t\t\tclearTimeout(self.checkTimeout);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tthis.bindTouchEvents(cell.row, cellEl);\r\n\t\t}\r\n\t}\r\n\r\n\tbindTouchEvents(row, element){\r\n\t\tvar startYMove = false, //shifting center position of the cell\r\n\t\tdir = false,\r\n\t\tcurrentRow, nextRow, prevRow, nextRowHeight, prevRowHeight, nextRowHeightLast, prevRowHeightLast;\r\n\r\n\t\telement.addEventListener(\"touchstart\", (e) => {\r\n\t\t\tthis.checkTimeout = setTimeout(() => {\r\n\t\t\t\tthis.touchMove = true;\r\n\t\t\t\tcurrentRow = row;\r\n\t\t\t\tnextRow = row.nextRow();\r\n\t\t\t\tnextRowHeight = nextRow ? nextRow.getHeight()/2 : 0;\r\n\t\t\t\tprevRow = row.prevRow();\r\n\t\t\t\tprevRowHeight = prevRow ? prevRow.getHeight()/2 : 0;\r\n\t\t\t\tnextRowHeightLast = 0;\r\n\t\t\t\tprevRowHeightLast = 0;\r\n\t\t\t\tstartYMove = false;\r\n\r\n\t\t\t\tthis.startMove(e, row);\r\n\t\t\t}, this.checkPeriod);\r\n\t\t}, {passive: true});\r\n\t\tthis.moving, this.toRow, this.toRowAfter\r\n\t\telement.addEventListener(\"touchmove\", (e) => {\r\n\r\n\t\t\tvar halfCol, diff, moveToRow;\r\n\r\n\t\t\tif(this.moving){\r\n\t\t\t\te.preventDefault();\r\n\r\n\t\t\t\tthis.moveHover(e);\r\n\r\n\t\t\t\tif(!startYMove){\r\n\t\t\t\t\tstartYMove = e.touches[0].pageY;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tdiff = e.touches[0].pageY - startYMove;\r\n\r\n\t\t\t\tif(diff > 0){\r\n\t\t\t\t\tif(nextRow && diff - nextRowHeightLast > nextRowHeight){\r\n\t\t\t\t\t\tmoveToRow = nextRow;\r\n\r\n\t\t\t\t\t\tif(moveToRow !== row){\r\n\t\t\t\t\t\t\tstartYMove = e.touches[0].pageY\r\n\t\t\t\t\t\t\tmoveToRow.getElement().parentNode.insertBefore(this.placeholderElement, moveToRow.getElement().nextSibling);\r\n\t\t\t\t\t\t\tthis.moveRow(moveToRow, true);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}else{\r\n\t\t\t\t\tif(prevRow && -diff - prevRowHeightLast > prevRowHeight){\r\n\t\t\t\t\t\tmoveToRow = prevRow;\r\n\r\n\t\t\t\t\t\tif(moveToRow !== row){\r\n\t\t\t\t\t\t\tstartYMove = e.touches[0].pageY;\r\n\t\t\t\t\t\t\tmoveToRow.getElement().parentNode.insertBefore(this.placeholderElement, moveToRow.getElement());\r\n\t\t\t\t\t\t\tthis.moveRow(moveToRow, false);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(moveToRow){\r\n\t\t\t\t\tcurrentRow = moveToRow;\r\n\t\t\t\t\tnextRow = moveToRow.nextRow();\r\n\t\t\t\t\tnextRowHeightLast = nextRowHeight;\r\n\t\t\t\t\tnextRowHeight = nextRow ? nextRow.getHeight() / 2 : 0;\r\n\t\t\t\t\tprevRow = moveToRow.prevRow();\r\n\t\t\t\t\tprevRowHeightLast = prevRowHeight;\r\n\t\t\t\t\tprevRowHeight = prevRow ? prevRow.getHeight() / 2 : 0;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\telement.addEventListener(\"touchend\", (e) => {\r\n\t\t\tif(this.checkTimeout){\r\n\t\t\t\tclearTimeout(this.checkTimeout);\r\n\t\t\t}\r\n\t\t\tif(this.moving){\r\n\t\t\t\tthis.endMove(e);\r\n\t\t\t\tthis.touchMove = false;\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t_bindMouseMove(){\r\n\t\tthis.table.rowManager.getDisplayRows().forEach((row) => {\r\n\t\t\tif((row.type === \"row\" || row.type === \"group\") && row.modules.moveRow.mousemove){\r\n\t\t\t\trow.getElement().addEventListener(\"mousemove\", row.modules.moveRow.mousemove);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t_unbindMouseMove(){\r\n\t\tthis.table.rowManager.getDisplayRows().forEach((row) => {\r\n\t\t\tif((row.type === \"row\" || row.type === \"group\") && row.modules.moveRow.mousemove){\r\n\t\t\t\trow.getElement().removeEventListener(\"mousemove\", row.modules.moveRow.mousemove);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tstartMove(e, row){\r\n\t\tvar element = row.getElement();\r\n\r\n\t\tthis.setStartPosition(e, row);\r\n\r\n\t\tthis.moving = row;\r\n\r\n\t\tthis.table.element.classList.add(\"tabulator-block-select\");\r\n\r\n\t\t//create placeholder\r\n\t\tthis.placeholderElement.style.width = row.getWidth() + \"px\";\r\n\t\tthis.placeholderElement.style.height = row.getHeight() + \"px\";\r\n\r\n\t\tif(!this.connection){\r\n\t\t\telement.parentNode.insertBefore(this.placeholderElement, element);\r\n\t\t\telement.parentNode.removeChild(element);\r\n\t\t}else{\r\n\t\t\tthis.table.element.classList.add(\"tabulator-movingrow-sending\");\r\n\t\t\tthis.connectToTables(row);\r\n\t\t}\r\n\r\n\t\t//create hover element\r\n\t\tthis.hoverElement = element.cloneNode(true);\r\n\t\tthis.hoverElement.classList.add(\"tabulator-moving\");\r\n\r\n\t\tif(this.connection){\r\n\t\t\tdocument.body.appendChild(this.hoverElement);\r\n\t\t\tthis.hoverElement.style.left = \"0\";\r\n\t\t\tthis.hoverElement.style.top = \"0\";\r\n\t\t\tthis.hoverElement.style.width = this.table.element.clientWidth + \"px\";\r\n\t\t\tthis.hoverElement.style.whiteSpace = \"nowrap\";\r\n\t\t\tthis.hoverElement.style.overflow = \"hidden\";\r\n\t\t\tthis.hoverElement.style.pointerEvents = \"none\";\r\n\t\t}else{\r\n\t\t\tthis.table.rowManager.getTableElement().appendChild(this.hoverElement);\r\n\r\n\t\t\tthis.hoverElement.style.left = \"0\";\r\n\t\t\tthis.hoverElement.style.top = \"0\";\r\n\r\n\t\t\tthis._bindMouseMove();\r\n\t\t}\r\n\r\n\t\tdocument.body.addEventListener(\"mousemove\", this.moveHover);\r\n\t\tdocument.body.addEventListener(\"mouseup\", this.endMove);\r\n\r\n\t\tthis.moveHover(e);\r\n\t}\r\n\r\n\tsetStartPosition(e, row){\r\n\t\tvar pageX = this.touchMove ? e.touches[0].pageX : e.pageX,\r\n\t\tpageY = this.touchMove ? e.touches[0].pageY : e.pageY,\r\n\t\telement, position;\r\n\r\n\t\telement = row.getElement();\r\n\t\tif(this.connection){\r\n\t\t\tposition = element.getBoundingClientRect();\r\n\r\n\t\t\tthis.startX = position.left - pageX + window.pageXOffset;\r\n\t\t\tthis.startY = position.top - pageY + window.pageYOffset;\r\n\t\t}else{\r\n\t\t\tthis.startY = (pageY - element.getBoundingClientRect().top);\r\n\t\t}\r\n\t}\r\n\r\n\tendMove(e){\r\n\t\tif(!e || e.which === 1 || this.touchMove){\r\n\t\t\tthis._unbindMouseMove();\r\n\r\n\t\t\tif(!this.connection){\r\n\t\t\t\tthis.placeholderElement.parentNode.insertBefore(this.moving.getElement(), this.placeholderElement.nextSibling);\r\n\t\t\t\tthis.placeholderElement.parentNode.removeChild(this.placeholderElement);\r\n\t\t\t}\r\n\r\n\t\t\tthis.hoverElement.parentNode.removeChild(this.hoverElement);\r\n\r\n\t\t\tthis.table.element.classList.remove(\"tabulator-block-select\");\r\n\r\n\t\t\tif(this.toRow){\r\n\t\t\t\tthis.table.rowManager.moveRow(this.moving, this.toRow, this.toRowAfter);\r\n\t\t\t}\r\n\r\n\t\t\tthis.moving = false;\r\n\t\t\tthis.toRow = false;\r\n\t\t\tthis.toRowAfter = false;\r\n\r\n\t\t\tdocument.body.removeEventListener(\"mousemove\", this.moveHover);\r\n\t\t\tdocument.body.removeEventListener(\"mouseup\", this.endMove);\r\n\r\n\t\t\tif(this.connection){\r\n\t\t\t\tthis.table.element.classList.remove(\"tabulator-movingrow-sending\");\r\n\t\t\t\tthis.disconnectFromTables();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tmoveRow(row, after){\r\n\t\tthis.toRow = row;\r\n\t\tthis.toRowAfter = after;\r\n\t}\r\n\r\n\tmoveHover(e){\r\n\t\tif(this.connection){\r\n\t\t\tthis.moveHoverConnections.call(this, e);\r\n\t\t}else{\r\n\t\t\tthis.moveHoverTable.call(this, e);\r\n\t\t}\r\n\t}\r\n\r\n\tmoveHoverTable(e){\r\n\t\tvar rowHolder = this.table.rowManager.getElement(),\r\n\t\tscrollTop = rowHolder.scrollTop,\r\n\t\tyPos = ((this.touchMove ? e.touches[0].pageY : e.pageY) - rowHolder.getBoundingClientRect().top) + scrollTop,\r\n\t\tscrollPos;\r\n\r\n\t\tthis.hoverElement.style.top = (yPos - this.startY) + \"px\";\r\n\t}\r\n\r\n\tmoveHoverConnections(e){\r\n\t\tthis.hoverElement.style.left = (this.startX + (this.touchMove ? e.touches[0].pageX : e.pageX)) + \"px\";\r\n\t\tthis.hoverElement.style.top = (this.startY + (this.touchMove ? e.touches[0].pageY : e.pageY)) + \"px\";\r\n\t}\r\n\r\n\telementRowDrop(e, element, row){\r\n\t\tif(this.table.options.movableRowsElementDrop){\r\n\t\t\tthis.dispatchExternal(\"movableRowsElementDrop\", e, element, row ? row.getComponent() : false);\r\n\t\t}\r\n\t}\r\n\r\n\t//establish connection with other tables\r\n\tconnectToTables(row){\r\n\t\tvar connectionTables;\r\n\r\n\t\tif(this.connectionSelectorsTables){\r\n\t\t\tconnectionTables = this.commsConnections(this.connectionSelectorsTables);\r\n\r\n\t\t\tthis.dispatchExternal(\"movableRowsSendingStart\", connectionTables);\r\n\r\n\t\t\tthis.commsSend(this.connectionSelectorsTables, \"moveRow\", \"connect\", {\r\n\t\t\t\trow:row,\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif(this.connectionSelectorsElements){\r\n\r\n\t\t\tthis.connectionElements = [];\r\n\r\n\t\t\tif(!Array.isArray(this.connectionSelectorsElements)){\r\n\t\t\t\tthis.connectionSelectorsElements = [this.connectionSelectorsElements];\r\n\t\t\t}\r\n\r\n\t\t\tthis.connectionSelectorsElements.forEach((query) => {\r\n\t\t\t\tif(typeof query === \"string\"){\r\n\t\t\t\t\tthis.connectionElements = this.connectionElements.concat(Array.prototype.slice.call(document.querySelectorAll(query)));\r\n\t\t\t\t}else{\r\n\t\t\t\t\tthis.connectionElements.push(query);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tthis.connectionElements.forEach((element) => {\r\n\t\t\t\tvar dropEvent = (e) => {\r\n\t\t\t\t\tthis.elementRowDrop(e, element, this.moving);\r\n\t\t\t\t};\r\n\r\n\t\t\t\telement.addEventListener(\"mouseup\", dropEvent);\r\n\t\t\t\telement.tabulatorElementDropEvent = dropEvent;\r\n\r\n\t\t\t\telement.classList.add(\"tabulator-movingrow-receiving\");\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\t//disconnect from other tables\r\n\tdisconnectFromTables(){\r\n\t\tvar connectionTables;\r\n\r\n\t\tif(this.connectionSelectorsTables){\r\n\t\t\tconnectionTables = this.commsConnections(this.connectionSelectorsTables);\r\n\r\n\t\t\tthis.dispatchExternal(\"movableRowsSendingStop\", connectionTables);\r\n\r\n\t\t\tthis.commsSend(this.connectionSelectorsTables, \"moveRow\", \"disconnect\");\r\n\t\t}\r\n\r\n\t\tthis.connectionElements.forEach((element) => {\r\n\t\t\telement.classList.remove(\"tabulator-movingrow-receiving\");\r\n\t\t\telement.removeEventListener(\"mouseup\", element.tabulatorElementDropEvent);\r\n\t\t\tdelete element.tabulatorElementDropEvent;\r\n\t\t});\r\n\t}\r\n\r\n\t//accept incomming connection\r\n\tconnect(table, row){\r\n\t\tif(!this.connectedTable){\r\n\t\t\tthis.connectedTable = table;\r\n\t\t\tthis.connectedRow = row;\r\n\r\n\t\t\tthis.table.element.classList.add(\"tabulator-movingrow-receiving\");\r\n\r\n\t\t\tthis.table.rowManager.getDisplayRows().forEach((row) => {\r\n\t\t\t\tif(row.type === \"row\" && row.modules.moveRow && row.modules.moveRow.mouseup){\r\n\t\t\t\t\trow.getElement().addEventListener(\"mouseup\", row.modules.moveRow.mouseup);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tthis.tableRowDropEvent = this.tableRowDrop.bind(this);\r\n\r\n\t\t\tthis.table.element.addEventListener(\"mouseup\", this.tableRowDropEvent);\r\n\r\n\t\t\tthis.dispatchExternal(\"movableRowsReceivingStart\", row, table);\r\n\r\n\t\t\treturn true;\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Move Row Error - Table cannot accept connection, already connected to table:\", this.connectedTable);\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\t//close incomming connection\r\n\tdisconnect(table){\r\n\t\tif(table === this.connectedTable){\r\n\t\t\tthis.connectedTable = false;\r\n\t\t\tthis.connectedRow = false;\r\n\r\n\t\t\tthis.table.element.classList.remove(\"tabulator-movingrow-receiving\");\r\n\r\n\t\t\tthis.table.rowManager.getDisplayRows().forEach((row) =>{\r\n\t\t\t\tif(row.type === \"row\" && row.modules.moveRow && row.modules.moveRow.mouseup){\r\n\t\t\t\t\trow.getElement().removeEventListener(\"mouseup\", row.modules.moveRow.mouseup);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tthis.table.element.removeEventListener(\"mouseup\", this.tableRowDropEvent);\r\n\r\n\t\t\tthis.dispatchExternal(\"movableRowsReceivingStop\", table);\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Move Row Error - trying to disconnect from non connected table\")\r\n\t\t}\r\n\t}\r\n\r\n\tdropComplete(table, row, success){\r\n\t\tvar sender = false;\r\n\r\n\t\tif(success){\r\n\r\n\t\t\tswitch(typeof this.table.options.movableRowsSender){\r\n\t\t\t\tcase \"string\":\r\n\t\t\t\tsender = this.senders[this.table.options.movableRowsSender];\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"function\":\r\n\t\t\t\tsender = this.table.options.movableRowsSender;\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\r\n\t\t\tif(sender){\r\n\t\t\t\tsender.call(this, this.moving.getComponent(), row ? row.getComponent() : undefined, table)\r\n\t\t\t}else{\r\n\t\t\t\tif(this.table.options.movableRowsSender){\r\n\t\t\t\t\tconsole.warn(\"Mover Row Error - no matching sender found:\", this.table.options.movableRowsSender);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tthis.dispatchExternal(\"movableRowsSent\", this.moving.getComponent(), row ? row.getComponent() : undefined, table);\r\n\t\t}else{\r\n\t\t\tthis.dispatchExternal(\"movableRowsSentFailed\", this.moving.getComponent(), row ? row.getComponent() : undefined, table);\r\n\t\t}\r\n\r\n\t\tthis.endMove();\r\n\t}\r\n\r\n\ttableRowDrop(e, row){\r\n\t\tvar receiver = false,\r\n\t\tsuccess = false;\r\n\r\n\t\te.stopImmediatePropagation();\r\n\r\n\t\tswitch(typeof this.table.options.movableRowsReceiver){\r\n\t\t\tcase \"string\":\r\n\t\t\treceiver = this.receivers[this.table.options.movableRowsReceiver];\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"function\":\r\n\t\t\treceiver = this.table.options.movableRowsReceiver;\r\n\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\tif(receiver){\r\n\t\t\tsuccess = receiver.call(this, this.connectedRow.getComponent(), row ? row.getComponent() : undefined, this.connectedTable)\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Mover Row Error - no matching receiver found:\", this.table.options.movableRowsReceiver)\r\n\t\t}\r\n\r\n\t\tif(success){\r\n\t\t\tthis.dispatchExternal(\"movableRowsReceived\", this.connectedRow.getComponent(), row ? row.getComponent() : undefined, this.connectedTable);\r\n\t\t}else{\r\n\t\t\tthis.dispatchExternal(\"movableRowsReceivedFailed\", this.connectedRow.getComponent(), row ? row.getComponent() : undefined, this.connectedTable);\r\n\t\t}\r\n\r\n\t\tthis.commsSend(this.connectedTable, \"moveRow\", \"dropcomplete\", {\r\n\t\t\trow:row,\r\n\t\t\tsuccess:success,\r\n\t\t});\r\n\t}\r\n\r\n\tcommsReceived(table, action, data){\r\n\t\tswitch(action){\r\n\t\t\tcase \"connect\":\r\n\t\t\treturn this.connect(table, data.row);\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"disconnect\":\r\n\t\t\treturn this.disconnect(table);\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"dropcomplete\":\r\n\t\t\treturn this.dropComplete(table, data.row, data.success);\r\n\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n}\r\n\r\nMoveRows.prototype.receivers = {\r\n\tinsert:function(fromRow, toRow, fromTable){\r\n\t\tthis.table.addRow(fromRow.getData(), undefined, toRow);\r\n\t\treturn true;\r\n\t},\r\n\r\n\tadd:function(fromRow, toRow, fromTable){\r\n\t\tthis.table.addRow(fromRow.getData());\r\n\t\treturn true;\r\n\t},\r\n\r\n\tupdate:function(fromRow, toRow, fromTable){\r\n\t\tif(toRow){\r\n\t\t\ttoRow.update(fromRow.getData());\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t},\r\n\r\n\treplace:function(fromRow, toRow, fromTable){\r\n\t\tif(toRow){\r\n\t\t\tthis.table.addRow(fromRow.getData(), undefined, toRow);\r\n\t\t\ttoRow.delete();\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t},\r\n};\r\n\r\nMoveRows.prototype.senders = {\r\n\tdelete:function(fromRow, toRow, toTable){\r\n\t\tfromRow.delete();\r\n\t}\r\n};\r\n\r\nMoveRows.moduleName = \"moveRow\";\r\n\r\nexport default MoveRows;","export default {};","import Module from '../../core/Module.js';\r\n\r\nimport defaultMutators from './defaults/mutators.js';\r\n\r\nclass Mutator extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.allowedTypes = [\"\", \"data\", \"edit\", \"clipboard\"]; //list of muatation types\r\n\t\tthis.enabled = true;\r\n\r\n\t\tthis.registerColumnOption(\"mutator\");\r\n\t\tthis.registerColumnOption(\"mutatorParams\");\r\n\t\tthis.registerColumnOption(\"mutatorData\");\r\n\t\tthis.registerColumnOption(\"mutatorDataParams\");\r\n\t\tthis.registerColumnOption(\"mutatorEdit\");\r\n\t\tthis.registerColumnOption(\"mutatorEditParams\");\r\n\t\tthis.registerColumnOption(\"mutatorClipboard\");\r\n\t\tthis.registerColumnOption(\"mutatorClipboardParams\");\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tthis.subscribe(\"cell-value-changing\", this.transformCell.bind(this));\r\n\t\tthis.subscribe(\"column-layout\", this.initializeColumn.bind(this));\r\n\t\tthis.subscribe(\"row-data-init-before\", this.rowDataChanged.bind(this));\r\n\t\tthis.subscribe(\"row-data-changing\", this.rowDataChanged.bind(this));\r\n\t}\r\n\r\n\trowDataChanged(row, tempData, updatedData){\r\n\t\treturn this.transformRow(tempData, \"data\", updatedData);\r\n\t}\r\n\r\n\t//initialize column mutator\r\n\tinitializeColumn(column){\r\n\t\tvar match = false,\r\n\t\tconfig = {};\r\n\r\n\t\tthis.allowedTypes.forEach((type) => {\r\n\t\t\tvar key = \"mutator\" + (type.charAt(0).toUpperCase() + type.slice(1)),\r\n\t\t\tmutator;\r\n\r\n\t\t\tif(column.definition[key]){\r\n\t\t\t\tmutator = this.lookupMutator(column.definition[key]);\r\n\r\n\t\t\t\tif(mutator){\r\n\t\t\t\t\tmatch = true;\r\n\r\n\t\t\t\t\tconfig[key] = {\r\n\t\t\t\t\t\tmutator:mutator,\r\n\t\t\t\t\t\tparams: column.definition[key + \"Params\"] || {},\r\n\t\t\t\t\t};\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tif(match){\r\n\t\t\tcolumn.modules.mutate = config;\r\n\t\t}\r\n\t}\r\n\r\n\tlookupMutator(value){\r\n\t\tvar mutator = false;\r\n\r\n\t\t//set column mutator\r\n\t\tswitch(typeof value){\r\n\t\t\tcase \"string\":\r\n\t\t\tif(Mutator.mutators[value]){\r\n\t\t\t\tmutator = Mutator.mutators[value];\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Mutator Error - No such mutator found, ignoring: \", value);\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"function\":\r\n\t\t\tmutator = value;\r\n\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\treturn mutator;\r\n\t}\r\n\r\n\t//apply mutator to row\r\n\ttransformRow(data, type, updatedData){\r\n\t\tvar key = \"mutator\" + (type.charAt(0).toUpperCase() + type.slice(1)),\r\n\t\tvalue;\r\n\r\n\t\tif(this.enabled){\r\n\r\n\t\t\tthis.table.columnManager.traverse((column) => {\r\n\t\t\t\tvar mutator, params, component;\r\n\r\n\t\t\t\tif(column.modules.mutate){\r\n\t\t\t\t\tmutator = column.modules.mutate[key] || column.modules.mutate.mutator || false;\r\n\r\n\t\t\t\t\tif(mutator){\r\n\t\t\t\t\t\tvalue = column.getFieldValue(typeof updatedData !== \"undefined\" ? updatedData : data);\r\n\r\n\t\t\t\t\t\tif(type == \"data\" || typeof value !== \"undefined\"){\r\n\t\t\t\t\t\t\tcomponent = column.getComponent();\r\n\t\t\t\t\t\t\tparams = typeof mutator.params === \"function\" ? mutator.params(value, data, type, component) : mutator.params;\r\n\t\t\t\t\t\t\tcolumn.setFieldValue(data, mutator.mutator(value, data, type, params, component));\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn data;\r\n\t}\r\n\r\n\t//apply mutator to new cell value\r\n\ttransformCell(cell, value){\r\n\t\tif(cell.column.modules.mutate){\r\n\t\t\tvar mutator = cell.column.modules.mutate.mutatorEdit || cell.column.modules.mutate.mutator || false,\r\n\t\t\ttempData = {};\r\n\r\n\t\t\tif(mutator){\r\n\t\t\t\ttempData = Object.assign(tempData, cell.row.getData());\r\n\t\t\t\tcell.column.setFieldValue(tempData, value);\r\n\t\t\t\treturn mutator.mutator(value, tempData, \"edit\", mutator.params, cell.getComponent());\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn value;\r\n\t}\r\n\r\n\tenable(){\r\n\t\tthis.enabled = true;\r\n\t}\r\n\r\n\tdisable(){\r\n\t\tthis.enabled = false;\r\n\t}\r\n}\r\n\r\nMutator.moduleName = \"mutator\";\r\n\r\n//load defaults\r\nMutator.mutators = defaultMutators;\r\n\r\nexport default Mutator;","import Module from '../../core/Module.js';\r\n\r\nimport Helpers from '../../core/tools/Helpers.js';\r\n\r\nclass Page extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.mode = \"local\";\r\n\t\tthis.progressiveLoad = false;\r\n\r\n\t\tthis.size = 0;\r\n\t\tthis.page = 1;\r\n\t\tthis.count = 5;\r\n\t\tthis.max = 1;\r\n\r\n\t\tthis.displayIndex = 0; //index in display pipeline\r\n\r\n\t\tthis.initialLoad = true;\r\n\t\tthis.dataChanging = false; //flag to check if data is being changed by this module\r\n\r\n\t\tthis.pageSizes = [];\r\n\r\n\t\tthis.dataReceivedNames = {}; //TODO - remove once pagimation update is complete\r\n\t\tthis.dataSentNames = {}; //TODO - remove once pagimation update is complete\r\n\r\n\t\tthis.registerTableOption(\"pagination\", false); //set pagination type\r\n\t\tthis.registerTableOption(\"paginationMode\", \"local\"); //local or remote pagination\r\n\t\tthis.registerTableOption(\"paginationSize\", false); //set number of rows to a page\r\n\t\tthis.registerTableOption(\"paginationInitialPage\", 1); //initail page to show on load\r\n\t\tthis.registerTableOption(\"paginationButtonCount\", 5); // set count of page button\r\n\t\tthis.registerTableOption(\"paginationSizeSelector\", false); //add pagination size selector element\r\n\t\tthis.registerTableOption(\"paginationElement\", false); //element to hold pagination numbers\r\n\t\t// this.registerTableOption(\"paginationDataSent\", {}); //pagination data sent to the server\r\n\t\t// this.registerTableOption(\"paginationDataReceived\", {}); //pagination data received from the server\r\n\t\tthis.registerTableOption(\"paginationAddRow\", \"page\"); //add rows on table or page\r\n\r\n\t\tthis.registerTableOption(\"progressiveLoad\", false); //progressive loading\r\n\t\tthis.registerTableOption(\"progressiveLoadDelay\", 0); //delay between requests\r\n\t\tthis.registerTableOption(\"progressiveLoadScrollMargin\", 0); //margin before scroll begins\r\n\r\n\t\tthis.registerTableFunction(\"setMaxPage\", this.setMaxPage.bind(this));\r\n\t\tthis.registerTableFunction(\"setPage\", this.setPage.bind(this));\r\n\t\tthis.registerTableFunction(\"setPageToRow\", this.userSetPageToRow.bind(this));\r\n\t\tthis.registerTableFunction(\"setPageSize\", this.userSetPageSize.bind(this));\r\n\t\tthis.registerTableFunction(\"getPageSize\", this.getPageSize.bind(this));\r\n\t\tthis.registerTableFunction(\"previousPage\", this.previousPage.bind(this));\r\n\t\tthis.registerTableFunction(\"nextPage\", this.nextPage.bind(this));\r\n\t\tthis.registerTableFunction(\"getPage\", this.getPage.bind(this));\r\n\t\tthis.registerTableFunction(\"getPageMax\", this.getPageMax.bind(this));\r\n\r\n\t\t//register component functions\r\n\t\tthis.registerComponentFunction(\"row\", \"pageTo\", this.setPageToRow.bind(this));\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tif(this.table.options.pagination){\r\n\t\t\tthis.subscribe(\"row-deleted\", this.rowsUpdated.bind(this));\r\n\t\t\tthis.subscribe(\"row-adding-position\", this.rowAddingPosition.bind(this));\r\n\t\t\tthis.subscribe(\"row-added\", this.rowsUpdated.bind(this));\r\n\t\t\tthis.subscribe(\"data-processed\", this.initialLoadComplete.bind(this));\r\n\t\t\tthis.subscribe(\"table-built\", this.calculatePageSizes.bind(this));\r\n\r\n\t\t\tif(this.table.options.paginationMode === \"remote\"){\r\n\t\t\t\tthis.subscribe(\"data-params\", this.remotePageParams.bind(this));\r\n\t\t\t\tthis.subscribe(\"data-loaded\", this._parseRemoteData.bind(this));\r\n\t\t\t}\r\n\r\n\t\t\tif(this.table.options.progressiveLoad){\r\n\t\t\t\tconsole.error(\"Progressive Load Error - Pagination and progressive load cannot be used at the same time\");\r\n\t\t\t}\r\n\r\n\t\t\tthis.registerDisplayHandler(this.restOnRenderBefore.bind(this), 40);\r\n\t\t\tthis.registerDisplayHandler(this.getRows.bind(this), 50);\r\n\r\n\t\t\tthis.createElements();\r\n\t\t\tthis.initializePaginator();\r\n\t\t}else if(this.table.options.progressiveLoad){\r\n\r\n\t\t\tthis.subscribe(\"data-params\", this.remotePageParams.bind(this));\r\n\t\t\tthis.subscribe(\"data-loaded\", this._parseRemoteData.bind(this));\r\n\r\n\t\t\tthis.initializeProgressive(this.table.options.progressiveLoad)\r\n\r\n\t\t\tif(this.table.options.progressiveLoad === \"scroll\"){\r\n\t\t\t\tthis.subscribe(\"scroll-vertical\", this.scrollVertical.bind(this));\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\trowAddingPosition(row, top){\r\n\t\tvar rowManager = this.table.rowManager,\r\n\t\tdispRows = rowManager.getDisplayRows(),\r\n\t\tindex;\r\n\r\n\t\tif(top){\r\n\t\t\tif(dispRows.length){\r\n\t\t\t\tindex = dispRows[0];\r\n\t\t\t}else{\r\n\t\t\t\tif(rowManager.activeRows.length){\r\n\t\t\t\t\tindex = rowManager.activeRows[rowManager.activeRows.length-1];\r\n\t\t\t\t\ttop = false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tif(dispRows.length){\r\n\t\t\t\tindex = dispRows[dispRows.length - 1];\r\n\t\t\t\ttop = dispRows.length < this.size ? false : true;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn {index, top}\r\n\t}\r\n\r\n\tcalculatePageSizes(){\r\n\t\tvar testElRow, testElCell;\r\n\r\n\t\tif(this.table.options.paginationSize){\r\n\t\t\tthis.size = this.table.options.paginationSize;\r\n\t\t}else{\r\n\t\t\ttestElRow = document.createElement(\"div\");\r\n\t\t\ttestElRow.classList.add(\"tabulator-row\");\r\n\t\t\ttestElRow.style.visibility = \"hidden\";\r\n\r\n\t\t\ttestElCell = document.createElement(\"div\");\r\n\t\t\ttestElCell.classList.add(\"tabulator-cell\");\r\n\t\t\ttestElCell.innerHTML = \"Page Row Test\";\r\n\r\n\t\t\ttestElRow.appendChild(testElCell);\r\n\r\n\t\t\tthis.table.rowManager.getTableElement().appendChild(testElRow);\r\n\r\n\t\t\tthis.size = Math.floor(this.table.rowManager.getElement().clientHeight / testElRow.offsetHeight);\r\n\r\n\t\t\tthis.table.rowManager.getTableElement().removeChild(testElRow);\r\n\t\t}\r\n\t}\r\n\r\n\tinitialLoadComplete(){\r\n\t\tthis.initialLoad = false;\r\n\t}\r\n\r\n\tremotePageParams(data, config, silent, params){\r\n\t\tif(!this.initialLoad){\r\n\t\t\tif((this.progressiveLoad && !silent) || (!this.progressiveLoad && !this.dataChanging)){\r\n\t\t\t\tthis.reset(true);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//configure request params\r\n\t\tparams.page = this.page;\r\n\r\n\t\t//set page size if defined\r\n\t\tif(this.size){\r\n\t\t\tparams.size = this.size;\r\n\t\t}\r\n\r\n\t\treturn params;\r\n\t}\r\n\r\n\t///////////////////////////////////\r\n\t///////// Table Functions /////////\r\n\t///////////////////////////////////\r\n\r\n\tuserSetPageToRow(row){\r\n\t\tif(this.table.options.pagination){\r\n\t\t\trow = this.rowManager.findRow(row);\r\n\r\n\t\t\tif(row){\r\n\t\t\t\treturn this.setPageToRow(row)\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn Promise.reject();\r\n\t}\r\n\r\n\tuserSetPageSize(size){\r\n\t\tif(this.table.options.pagination){\r\n\t\t\tthis.setPageSize(size);\r\n\t\t\treturn this.setPage(1);\r\n\t\t}else{\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\t///////////////////////////////////\r\n\t///////// Internal Logic //////////\r\n\t///////////////////////////////////\r\n\r\n\tscrollVertical(top, dir){\r\n\t\tvar element, diff, margin;\r\n\t\tif(!dir && !this.table.dataLoader.loading){\r\n\t\t\telement = this.table.rowManager.getElement();\r\n\t\t\tdiff = element.scrollHeight - element.clientHeight - top;\r\n\t\t\tmargin = this.table.options.progressiveLoadScrollMargin || (element.clientHeight * 2);\r\n\r\n\t\t\tif(diff < margin){\r\n\t\t\t\tthis.nextPage();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\trestOnRenderBefore(rows, renderInPosition){\r\n\t\tif(!renderInPosition){\r\n\t\t\tif(this.mode === \"local\"){\r\n\t\t\t\tthis.reset();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn rows;\r\n\t}\r\n\r\n\trowsUpdated(){\r\n\t\tthis.refreshData(true, \"all\");\r\n\t}\r\n\r\n\tcreateElements(){\r\n\t\tvar button;\r\n\r\n\t\tthis.element = document.createElement(\"span\");\r\n\t\tthis.element.classList.add(\"tabulator-paginator\");\r\n\r\n\t\tthis.pagesElement = document.createElement(\"span\");\r\n\t\tthis.pagesElement.classList.add(\"tabulator-pages\");\r\n\r\n\t\tbutton = document.createElement(\"button\");\r\n\t\tbutton.classList.add(\"tabulator-page\");\r\n\t\tbutton.setAttribute(\"type\", \"button\");\r\n\t\tbutton.setAttribute(\"role\", \"button\");\r\n\t\tbutton.setAttribute(\"aria-label\", \"\");\r\n\t\tbutton.setAttribute(\"title\", \"\");\r\n\r\n\t\tthis.firstBut = button.cloneNode(true);\r\n\t\tthis.firstBut.setAttribute(\"data-page\", \"first\");\r\n\r\n\t\tthis.prevBut = button.cloneNode(true);\r\n\t\tthis.prevBut.setAttribute(\"data-page\", \"prev\");\r\n\r\n\t\tthis.nextBut = button.cloneNode(true);\r\n\t\tthis.nextBut.setAttribute(\"data-page\", \"next\");\r\n\r\n\t\tthis.lastBut = button.cloneNode(true);\r\n\t\tthis.lastBut.setAttribute(\"data-page\", \"last\");\r\n\r\n\t\tif(this.table.options.paginationSizeSelector){\r\n\t\t\tthis.pageSizeSelect = document.createElement(\"select\");\r\n\t\t\tthis.pageSizeSelect.classList.add(\"tabulator-page-size\");\r\n\t\t}\r\n\t}\r\n\r\n\tgeneratePageSizeSelectList(){\r\n\t\tvar pageSizes = [];\r\n\r\n\t\tif(this.pageSizeSelect){\r\n\r\n\t\t\tif(Array.isArray(this.table.options.paginationSizeSelector)){\r\n\t\t\t\tpageSizes = this.table.options.paginationSizeSelector;\r\n\t\t\t\tthis.pageSizes = pageSizes;\r\n\r\n\t\t\t\tif(this.pageSizes.indexOf(this.size) == -1){\r\n\t\t\t\t\tpageSizes.unshift(this.size);\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\r\n\t\t\t\tif(this.pageSizes.indexOf(this.size) == -1){\r\n\t\t\t\t\tpageSizes = [];\r\n\r\n\t\t\t\t\tfor (let i = 1; i < 5; i++){\r\n\t\t\t\t\t\tpageSizes.push(this.size * i);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tthis.pageSizes = pageSizes;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tpageSizes = this.pageSizes;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\twhile(this.pageSizeSelect.firstChild) this.pageSizeSelect.removeChild(this.pageSizeSelect.firstChild);\r\n\r\n\t\t\tpageSizes.forEach((item) => {\r\n\t\t\t\tvar itemEl = document.createElement(\"option\");\r\n\t\t\t\titemEl.value = item;\r\n\r\n\t\t\t\tif(item === true){\r\n\t\t\t\t\tthis.langBind(\"pagination|all\", function(value){\r\n\t\t\t\t\t\titemEl.innerHTML = value;\r\n\t\t\t\t\t});\r\n\t\t\t\t}else{\r\n\t\t\t\t\titemEl.innerHTML = item;\r\n\t\t\t\t}\r\n\r\n\r\n\r\n\t\t\t\tthis.pageSizeSelect.appendChild(itemEl);\r\n\t\t\t});\r\n\r\n\t\t\tthis.pageSizeSelect.value = this.size;\r\n\t\t}\r\n\t}\r\n\r\n\t//setup pageination\r\n\tinitializePaginator(hidden){\r\n\t\tvar pageSelectLabel;\r\n\r\n\t\tif(!hidden){\r\n\t\t\t//build pagination element\r\n\r\n\t\t\t//bind localizations\r\n\t\t\tthis.langBind(\"pagination|first\", (value) => {\r\n\t\t\t\tthis.firstBut.innerHTML = value;\r\n\t\t\t});\r\n\r\n\t\t\tthis.langBind(\"pagination|first_title\", (value) => {\r\n\t\t\t\tthis.firstBut.setAttribute(\"aria-label\", value);\r\n\t\t\t\tthis.firstBut.setAttribute(\"title\", value);\r\n\t\t\t});\r\n\r\n\t\t\tthis.langBind(\"pagination|prev\", (value) => {\r\n\t\t\t\tthis.prevBut.innerHTML = value;\r\n\t\t\t});\r\n\r\n\t\t\tthis.langBind(\"pagination|prev_title\", (value) => {\r\n\t\t\t\tthis.prevBut.setAttribute(\"aria-label\", value);\r\n\t\t\t\tthis.prevBut.setAttribute(\"title\", value);\r\n\t\t\t});\r\n\r\n\t\t\tthis.langBind(\"pagination|next\", (value) => {\r\n\t\t\t\tthis.nextBut.innerHTML = value;\r\n\t\t\t});\r\n\r\n\t\t\tthis.langBind(\"pagination|next_title\", (value) => {\r\n\t\t\t\tthis.nextBut.setAttribute(\"aria-label\", value);\r\n\t\t\t\tthis.nextBut.setAttribute(\"title\", value);\r\n\t\t\t});\r\n\r\n\t\t\tthis.langBind(\"pagination|last\", (value) => {\r\n\t\t\t\tthis.lastBut.innerHTML = value;\r\n\t\t\t});\r\n\r\n\t\t\tthis.langBind(\"pagination|last_title\", (value) => {\r\n\t\t\t\tthis.lastBut.setAttribute(\"aria-label\", value);\r\n\t\t\t\tthis.lastBut.setAttribute(\"title\", value);\r\n\t\t\t});\r\n\r\n\t\t\t//click bindings\r\n\t\t\tthis.firstBut.addEventListener(\"click\", () => {\r\n\t\t\t\tthis.setPage(1)\r\n\t\t\t});\r\n\r\n\t\t\tthis.prevBut.addEventListener(\"click\", () => {\r\n\t\t\t\tthis.previousPage()\r\n\t\t\t});\r\n\r\n\t\t\tthis.nextBut.addEventListener(\"click\", () => {\r\n\t\t\t\tthis.nextPage()\r\n\t\t\t});\r\n\r\n\t\t\tthis.lastBut.addEventListener(\"click\", () => {\r\n\t\t\t\tthis.setPage(this.max)\r\n\t\t\t});\r\n\r\n\t\t\tif(this.table.options.paginationElement){\r\n\t\t\t\tthis.element = this.table.options.paginationElement;\r\n\t\t\t}\r\n\r\n\t\t\tif(this.pageSizeSelect){\r\n\t\t\t\tpageSelectLabel = document.createElement(\"label\");\r\n\r\n\t\t\t\tthis.langBind(\"pagination|page_size\", (value) => {\r\n\t\t\t\t\tthis.pageSizeSelect.setAttribute(\"aria-label\", value);\r\n\t\t\t\t\tthis.pageSizeSelect.setAttribute(\"title\", value);\r\n\t\t\t\t\tpageSelectLabel.innerHTML = value;\r\n\t\t\t\t});\r\n\r\n\t\t\t\tthis.element.appendChild(pageSelectLabel);\r\n\t\t\t\tthis.element.appendChild(this.pageSizeSelect);\r\n\r\n\t\t\t\tthis.pageSizeSelect.addEventListener(\"change\", (e) => {\r\n\t\t\t\t\tthis.setPageSize(this.pageSizeSelect.value == \"true\" ? true : this.pageSizeSelect.value);\r\n\t\t\t\t\tthis.setPage(1)\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\t//append to DOM\r\n\t\t\tthis.element.appendChild(this.firstBut);\r\n\t\t\tthis.element.appendChild(this.prevBut);\r\n\t\t\tthis.element.appendChild(this.pagesElement);\r\n\t\t\tthis.element.appendChild(this.nextBut);\r\n\t\t\tthis.element.appendChild(this.lastBut);\r\n\r\n\t\t\tif(!this.table.options.paginationElement && !hidden){\r\n\t\t\t\tthis.table.footerManager.append(this.element, this);\r\n\t\t\t}\r\n\r\n\t\t\tthis.page = this.table.options.paginationInitialPage;\r\n\t\t\tthis.count = this.table.options.paginationButtonCount;\r\n\r\n\t\t\tthis.generatePageSizeSelectList();\r\n\t\t}\r\n\r\n\t\t//set default values\r\n\t\tthis.mode = this.table.options.paginationMode;\r\n\t}\r\n\r\n\tinitializeProgressive(mode){\r\n\t\tthis.initializePaginator(true);\r\n\t\tthis.mode = \"progressive_\" + mode;\r\n\t\tthis.progressiveLoad = true;\r\n\t}\r\n\r\n\ttrackChanges(){\r\n\t\tthis.dispatch(\"page-changed\");\r\n\t}\r\n\r\n\tsetDisplayIndex(index){\r\n\t\tthis.displayIndex = index;\r\n\t}\r\n\r\n\tgetDisplayIndex(){\r\n\t\treturn this.displayIndex;\r\n\t}\r\n\r\n\t//calculate maximum page from number of rows\r\n\tsetMaxRows(rowCount){\r\n\t\tif(!rowCount){\r\n\t\t\tthis.max = 1;\r\n\t\t}else{\r\n\t\t\tthis.max = this.size === true ? 1 : Math.ceil(rowCount/this.size);\r\n\t\t}\r\n\r\n\t\tif(this.page > this.max){\r\n\t\t\tthis.page = this.max;\r\n\t\t}\r\n\t}\r\n\r\n\t//reset to first page without triggering action\r\n\treset(force){\r\n\t\tif(!this.initialLoad){\r\n\t\t\tif(this.mode == \"local\" || force){\r\n\t\t\t\tthis.page = 1;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//set the maxmum page\r\n\tsetMaxPage(max){\r\n\r\n\t\tmax = parseInt(max);\r\n\r\n\t\tthis.max = max || 1;\r\n\r\n\t\tif(this.page > this.max){\r\n\t\t\tthis.page = this.max;\r\n\t\t\tthis.trigger();\r\n\t\t}\r\n\t}\r\n\r\n\t//set current page number\r\n\tsetPage(page){\r\n\t\tswitch(page){\r\n\t\t\tcase \"first\":\r\n\t\t\treturn this.setPage(1);\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"prev\":\r\n\t\t\treturn this.previousPage();\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"next\":\r\n\t\t\treturn this.nextPage();\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"last\":\r\n\t\t\treturn this.setPage(this.max);\r\n\t\t\tbreak;\r\n\t\t}\r\n\r\n\r\n\t\tpage = parseInt(page);\r\n\r\n\t\tif((page > 0 && page <= this.max) || this.mode !== \"local\"){\r\n\t\t\tthis.page = page;\r\n\r\n\t\t\tthis.trackChanges();\r\n\r\n\t\t\treturn this.trigger();\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Pagination Error - Requested page is out of range of 1 - \" + this.max + \":\", page);\r\n\t\t\treturn Promise.reject();\r\n\t\t}\r\n\t}\r\n\r\n\tsetPageToRow(row){\r\n\t\tvar rows = this.table.rowManager.getDisplayRows(this.displayIndex - 1);\r\n\t\tvar index = rows.indexOf(row);\r\n\r\n\t\tif(index > -1){\r\n\t\t\tvar page = this.size === true ? 1 : Math.ceil((index + 1) / this.size);\r\n\r\n\t\t\treturn this.setPage(page)\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Pagination Error - Requested row is not visible\");\r\n\t\t\treturn Promise.reject();\r\n\t\t}\r\n\t}\r\n\r\n\tsetPageSize(size){\r\n\t\tif(size !== true){\r\n\t\t\tsize = parseInt(size);\r\n\t\t}\r\n\r\n\t\tif(size > 0){\r\n\t\t\tthis.size = size;\r\n\t\t}\r\n\r\n\t\tif(this.pageSizeSelect){\r\n\t\t\t// this.pageSizeSelect.value = size;\r\n\t\t\tthis.generatePageSizeSelectList();\r\n\t\t}\r\n\r\n\t\tthis.trackChanges();\r\n\t}\r\n\r\n\t//setup the pagination buttons\r\n\t_setPageButtons(){\r\n\t\tlet leftSize = Math.floor((this.count-1) / 2);\r\n\t\tlet rightSize = Math.ceil((this.count-1) / 2);\r\n\t\tlet min = this.max - this.page + leftSize + 1 < this.count ? this.max-this.count+1: Math.max(this.page-leftSize,1);\r\n\t\tlet max = this.page <= rightSize? Math.min(this.count, this.max) :Math.min(this.page+rightSize, this.max);\r\n\r\n\t\twhile(this.pagesElement.firstChild) this.pagesElement.removeChild(this.pagesElement.firstChild);\r\n\r\n\t\tif(this.page == 1){\r\n\t\t\tthis.firstBut.disabled = true;\r\n\t\t\tthis.prevBut.disabled = true;\r\n\t\t}else{\r\n\t\t\tthis.firstBut.disabled = false;\r\n\t\t\tthis.prevBut.disabled = false;\r\n\t\t}\r\n\r\n\t\tif(this.page == this.max){\r\n\t\t\tthis.lastBut.disabled = true;\r\n\t\t\tthis.nextBut.disabled = true;\r\n\t\t}else{\r\n\t\t\tthis.lastBut.disabled = false;\r\n\t\t\tthis.nextBut.disabled = false;\r\n\t\t}\r\n\r\n\t\tfor(let i = min; i <= max; i++){\r\n\t\t\tif(i>0 && i <= this.max){\r\n\t\t\t\tthis.pagesElement.appendChild(this._generatePageButton(i));\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.footerRedraw();\r\n\t}\r\n\r\n\t_generatePageButton(page){\r\n\t\tvar button = document.createElement(\"button\");\r\n\r\n\t\tbutton.classList.add(\"tabulator-page\");\r\n\t\tif(page == this.page){\r\n\t\t\tbutton.classList.add(\"active\");\r\n\t\t}\r\n\r\n\t\tbutton.setAttribute(\"type\", \"button\");\r\n\t\tbutton.setAttribute(\"role\", \"button\");\r\n\r\n\t\tthis.langBind(\"pagination|page_title\", (value) => {\r\n\t\t\tbutton.setAttribute(\"aria-label\", value + \" \" + page);\r\n\t\t\tbutton.setAttribute(\"title\", value + \" \" + page);\r\n\t\t});\r\n\r\n\t\tbutton.setAttribute(\"data-page\", page);\r\n\t\tbutton.textContent = page;\r\n\r\n\t\tbutton.addEventListener(\"click\", (e) => {\r\n\t\t\tthis.setPage(page)\r\n\t\t});\r\n\r\n\t\treturn button;\r\n\t}\r\n\r\n\t//previous page\r\n\tpreviousPage(){\r\n\t\tif(this.page > 1){\r\n\t\t\tthis.page--;\r\n\r\n\t\t\tthis.trackChanges();\r\n\r\n\t\t\treturn this.trigger()\r\n\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Pagination Error - Previous page would be less than page 1:\", 0);\r\n\t\t\treturn Promise.reject();\r\n\t\t}\r\n\t}\r\n\r\n\t//next page\r\n\tnextPage(){\r\n\t\tif(this.page < this.max){\r\n\t\t\tthis.page++;\r\n\r\n\t\t\tthis.trackChanges();\r\n\r\n\t\t\treturn this.trigger();\r\n\r\n\t\t}else{\r\n\t\t\tif(!this.progressiveLoad){\r\n\t\t\t\tconsole.warn(\"Pagination Error - Next page would be greater than maximum page of \" + this.max + \":\", this.max + 1);\r\n\t\t\t}\r\n\t\t\treturn Promise.reject();\r\n\t\t}\r\n\t}\r\n\r\n\t//return current page number\r\n\tgetPage(){\r\n\t\treturn this.page;\r\n\t}\r\n\r\n\t//return max page number\r\n\tgetPageMax(){\r\n\t\treturn this.max;\r\n\t}\r\n\r\n\tgetPageSize(size){\r\n\t\treturn this.size;\r\n\t}\r\n\r\n\tgetMode(){\r\n\t\treturn this.mode;\r\n\t}\r\n\r\n\t//return appropriate rows for current page\r\n\tgetRows(data){\r\n\t\tvar output, start, end;\r\n\r\n\t\tif(this.mode == \"local\"){\r\n\t\t\toutput = [];\r\n\r\n\t\t\tthis.setMaxRows(data.length);\r\n\r\n\t\t\tif(this.size === true){\r\n\t\t\t\tstart = 0;\r\n\t\t\t\tend = data.length;\r\n\t\t\t}else{\r\n\t\t\t\tstart = this.size * (this.page - 1);\r\n\t\t\t\tend = start + parseInt(this.size);\r\n\t\t\t}\r\n\r\n\r\n\t\t\tthis._setPageButtons();\r\n\r\n\t\t\tfor(let i = start; i < end; i++){\r\n\t\t\t\tif(data[i]){\r\n\t\t\t\t\toutput.push(data[i]);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn output;\r\n\t\t}else{\r\n\t\t\tthis._setPageButtons();\r\n\r\n\t\t\treturn data.slice(0);\r\n\t\t}\r\n\t}\r\n\r\n\ttrigger(){\r\n\t\tvar left;\r\n\r\n\t\tswitch(this.mode){\r\n\t\t\tcase \"local\":\r\n\t\t\tleft = this.table.rowManager.scrollLeft;\r\n\r\n\t\t\tthis.refreshData();\r\n\t\t\tthis.table.rowManager.scrollHorizontal(left);\r\n\r\n\t\t\tthis.dispatchExternal(\"pageLoaded\", this.getPage());\r\n\r\n\t\t\treturn Promise.resolve();\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"remote\":\r\n\t\t\tthis.dataChanging = true;\r\n\t\t\treturn this.reloadData(null)\r\n\t\t\t.finally(() => {\r\n\t\t\t\tthis.dataChanging = false;\r\n\t\t\t})\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"progressive_load\":\r\n\t\t\tcase \"progressive_scroll\":\r\n\t\t\treturn this.reloadData(null, true);\r\n\t\t\tbreak;\r\n\r\n\t\t\tdefault:\r\n\t\t\tconsole.warn(\"Pagination Error - no such pagination mode:\", this.mode);\r\n\t\t\treturn Promise.reject();\r\n\t\t}\r\n\t}\r\n\r\n\t_parseRemoteData(data){\r\n\t\tvar left, data, margin;\r\n\r\n\t\tif(typeof data.last_page === \"undefined\"){\r\n\t\t\tconsole.warn(\"Remote Pagination Error - Server response missing '\" + this.dataReceivedNames.last_page + \"' property\");\r\n\t\t}\r\n\r\n\t\tif(data.data){\r\n\t\t\tthis.max = parseInt(data.last_page) || 1;\r\n\r\n\t\t\tif(this.progressiveLoad){\r\n\t\t\t\tswitch(this.mode){\r\n\t\t\t\t\tcase \"progressive_load\":\r\n\r\n\t\t\t\t\tif(this.page == 1){\r\n\t\t\t\t\t\tthis.table.rowManager.setData(data.data, false, this.page == 1)\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tthis.table.rowManager.addRows(data.data);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif(this.page < this.max){\r\n\t\t\t\t\t\tsetTimeout(() => {\r\n\t\t\t\t\t\t\tthis.nextPage();\r\n\t\t\t\t\t\t}, this.table.options.progressiveLoadDelay);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase \"progressive_scroll\":\r\n\t\t\t\t\tdata = this.table.rowManager.getData().concat(data.data);\r\n\r\n\t\t\t\t\tthis.table.rowManager.setData(data, this.page !== 1, this.page == 1);\r\n\r\n\t\t\t\t\tmargin = this.table.options.progressiveLoadScrollMargin || (this.table.rowManager.element.clientHeight * 2);\r\n\r\n\t\t\t\t\tif(this.table.rowManager.element.scrollHeight <= (this.table.rowManager.element.clientHeight + margin)){\r\n\t\t\t\t\t\tsetTimeout(() => {\r\n\t\t\t\t\t\t\tthis.nextPage();\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn false;\r\n\t\t\t}else{\r\n\t\t\t\t// left = this.table.rowManager.scrollLeft;\r\n\t\t\t\tthis.dispatchExternal(\"pageLoaded\", this.getPage());\r\n\t\t\t\t// this.table.rowManager.scrollHorizontal(left);\r\n\t\t\t\t// this.table.columnManager.scrollHorizontal(left);\r\n\t\t\t}\r\n\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Remote Pagination Error - Server response missing '\" + this.dataReceivedNames.data + \"' property\");\r\n\t\t}\r\n\r\n\t\treturn data.data;\r\n\t}\r\n\r\n\t//handle the footer element being redrawn\r\n\tfooterRedraw(){\r\n\t\tvar footer = this.table.footerManager.element;\r\n\r\n\t\tif((Math.ceil(footer.clientWidth) - footer.scrollWidth) < 0){\r\n\t\t\tthis.pagesElement.style.display = 'none';\r\n\t\t}else{\r\n\t\t\tthis.pagesElement.style.display = '';\r\n\r\n\t\t\tif((Math.ceil(footer.clientWidth) - footer.scrollWidth) < 0){\r\n\t\t\t\tthis.pagesElement.style.display = 'none';\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n\r\nPage.moduleName = \"page\";\r\n\r\nexport default Page;","// read peristence information from storage\r\nexport default {\r\n\tlocal:function(id, type){\r\n\t\tvar data = localStorage.getItem(id + \"-\" + type);\r\n\r\n\t\treturn data ? JSON.parse(data) : false;\r\n\t},\r\n\tcookie:function(id, type){\r\n\t\tvar cookie = document.cookie,\r\n\t\tkey = id + \"-\" + type,\r\n\t\tcookiePos = cookie.indexOf(key + \"=\"),\r\n\t\tend, data;\r\n\r\n\t\t//if cookie exists, decode and load column data into tabulator\r\n\t\tif(cookiePos > -1){\r\n\t\t\tcookie = cookie.substr(cookiePos);\r\n\r\n\t\t\tend = cookie.indexOf(\";\");\r\n\r\n\t\t\tif(end > -1){\r\n\t\t\t\tcookie = cookie.substr(0, end);\r\n\t\t\t}\r\n\r\n\t\t\tdata = cookie.replace(key + \"=\", \"\");\r\n\t\t}\r\n\r\n\t\treturn data ? JSON.parse(data) : false;\r\n\t}\r\n};","//write persistence information to storage\r\nexport default {\r\n\tlocal:function(id, type, data){\r\n\t\tlocalStorage.setItem(id + \"-\" + type, JSON.stringify(data));\r\n\t},\r\n\tcookie:function(id, type, data){\r\n\t\tvar expireDate = new Date();\r\n\r\n\t\texpireDate.setDate(expireDate.getDate() + 10000);\r\n\r\n\t\tdocument.cookie = id + \"-\" + type + \"=\" + JSON.stringify(data) + \"; expires=\" + expireDate.toUTCString();\r\n\t}\r\n};","import Module from '../../core/Module.js';\r\n\r\nimport defaultReaders from './defaults/readers.js';\r\nimport defaultWriters from './defaults/writers.js';\r\n\r\nclass Persistence extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.mode = \"\";\r\n\t\tthis.id = \"\";\r\n\t\t// this.persistProps = [\"field\", \"width\", \"visible\"];\r\n\t\tthis.defWatcherBlock = false;\r\n\t\tthis.config = {};\r\n\t\tthis.readFunc = false;\r\n\t\tthis.writeFunc = false;\r\n\r\n\t\tthis.registerTableOption(\"persistence\", false);\r\n\t\tthis.registerTableOption(\"persistenceID\", \"\"); //key for persistent storage\r\n\t\tthis.registerTableOption(\"persistenceMode\", true); //mode for storing persistence information\r\n\t\tthis.registerTableOption(\"persistenceReaderFunc\", false); //function for handling persistence data reading\r\n\t\tthis.registerTableOption(\"persistenceWriterFunc\", false); //function for handling persistence data writing\r\n\t}\r\n\r\n\t// Test for whether localStorage is available for use.\r\n\tlocalStorageTest() {\r\n\t\tvar testKey = \"_tabulator_test\";\r\n\r\n\t\ttry {\r\n\t\t\twindow.localStorage.setItem( testKey, testKey);\r\n\t\t\twindow.localStorage.removeItem( testKey );\r\n\t\t\treturn true;\r\n\t\t} catch(e) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\t//setup parameters\r\n\tinitialize(){\r\n\t\tif(this.table.options.persistence){\r\n\t\t\t//determine persistent layout storage type\r\n\t\t\tvar mode = this.table.options.persistenceMode,\r\n\t\t\tid = this.table.options.persistenceID,\r\n\t\t\tretreivedData;\r\n\r\n\t\t\tthis.mode = mode !== true ? mode : (this.localStorageTest() ? \"local\" : \"cookie\");\r\n\r\n\t\t\tif(this.table.options.persistenceReaderFunc){\r\n\t\t\t\tif(typeof this.table.options.persistenceReaderFunc === \"function\"){\r\n\t\t\t\t\tthis.readFunc = this.table.options.persistenceReaderFunc;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tif(Persistence.readers[this.table.options.persistenceReaderFunc]){\r\n\t\t\t\t\t\tthis.readFunc = Persistence.readers[this.table.options.persistenceReaderFunc];\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tconsole.warn(\"Persistence Read Error - invalid reader set\", this.table.options.persistenceReaderFunc);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tif(Persistence.readers[this.mode]){\r\n\t\t\t\t\tthis.readFunc = Persistence.readers[this.mode];\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.warn(\"Persistence Read Error - invalid reader set\", this.mode);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif(this.table.options.persistenceWriterFunc){\r\n\t\t\t\tif(typeof this.table.options.persistenceWriterFunc === \"function\"){\r\n\t\t\t\t\tthis.writeFunc = this.table.options.persistenceWriterFunc;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tif(Persistence.writers[this.table.options.persistenceWriterFunc]){\r\n\t\t\t\t\t\tthis.writeFunc = Persistence.writers[this.table.options.persistenceWriterFunc];\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tconsole.warn(\"Persistence Write Error - invalid reader set\", this.table.options.persistenceWriterFunc);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tif(Persistence.writers[this.mode]){\r\n\t\t\t\t\tthis.writeFunc = Persistence.writers[this.mode];\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.warn(\"Persistence Write Error - invalid writer set\", this.mode);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t//set storage tag\r\n\t\t\tthis.id = \"tabulator-\" + (id || (this.table.element.getAttribute(\"id\") || \"\"));\r\n\r\n\t\t\tthis.config = {\r\n\t\t\t\tsort:this.table.options.persistence === true || this.table.options.persistence.sort,\r\n\t\t\t\tfilter:this.table.options.persistence === true || this.table.options.persistence.filter,\r\n\t\t\t\tgroup:this.table.options.persistence === true || this.table.options.persistence.group,\r\n\t\t\t\tpage:this.table.options.persistence === true || this.table.options.persistence.page,\r\n\t\t\t\tcolumns:this.table.options.persistence === true ? [\"title\", \"width\", \"visible\"] : this.table.options.persistence.columns,\r\n\t\t\t};\r\n\r\n\t\t\t//load pagination data if needed\r\n\t\t\tif(this.config.page){\r\n\t\t\t\tretreivedData = this.retreiveData(\"page\");\r\n\r\n\t\t\t\tif(retreivedData){\r\n\t\t\t\t\tif(typeof retreivedData.paginationSize !== \"undefined\" && (this.config.page === true || this.config.page.size)){\r\n\t\t\t\t\t\tthis.table.options.paginationSize = retreivedData.paginationSize;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif(typeof retreivedData.paginationInitialPage !== \"undefined\" && (this.config.page === true || this.config.page.page)){\r\n\t\t\t\t\t\tthis.table.options.paginationInitialPage = retreivedData.paginationInitialPage;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t//load group data if needed\r\n\t\t\tif(this.config.group){\r\n\t\t\t\tretreivedData = this.retreiveData(\"group\");\r\n\r\n\t\t\t\tif(retreivedData){\r\n\t\t\t\t\tif(typeof retreivedData.groupBy !== \"undefined\" && (this.config.group === true || this.config.group.groupBy)){\r\n\t\t\t\t\t\tthis.table.options.groupBy = retreivedData.groupBy;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif(typeof retreivedData.groupStartOpen !== \"undefined\" && (this.config.group === true || this.config.group.groupStartOpen)){\r\n\t\t\t\t\t\tthis.table.options.groupStartOpen = retreivedData.groupStartOpen;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif(typeof retreivedData.groupHeader !== \"undefined\" && (this.config.group === true || this.config.group.groupHeader)){\r\n\t\t\t\t\t\tthis.table.options.groupHeader = retreivedData.groupHeader;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif(this.config.columns){\r\n\t\t\t\tthis.table.options.columns = this.load(\"columns\", this.table.options.columns);\r\n\t\t\t\tthis.subscribe(\"column-init\", this.initializeColumn.bind(this));\r\n\t\t\t\tthis.subscribe(\"column-show\", this.save.bind(this, \"columns\"));\r\n\t\t\t\tthis.subscribe(\"column-hide\", this.save.bind(this, \"columns\"));\r\n\t\t\t\tthis.subscribe(\"column-moved\", this.save.bind(this, \"columns\"));\r\n\t\t\t\tthis.subscribe(\"table-built\", this.tableBuilt.bind(this), 0);\r\n\t\t\t}\r\n\r\n\t\t\tthis.subscribe(\"table-redraw\", this.tableRedraw.bind(this));\r\n\r\n\r\n\t\t\tthis.subscribe(\"filter-changed\", this.eventSave.bind(this, \"filter\"));\r\n\t\t\tthis.subscribe(\"sort-changed\", this.eventSave.bind(this, \"sort\"));\r\n\t\t\tthis.subscribe(\"group-changed\", this.eventSave.bind(this, \"group\"));\r\n\t\t\tthis.subscribe(\"page-changed\", this.eventSave.bind(this, \"page\"));\r\n\t\t\tthis.subscribe(\"column-resized\", this.eventSave.bind(this, \"columns\"));\r\n\t\t\tthis.subscribe(\"layout-refreshed\", this.eventSave.bind(this, \"columns\"));\r\n\t\t}\r\n\r\n\t\tthis.registerTableFunction(\"getColumnLayout\", this.getColumnLayout.bind(this));\r\n\t\tthis.registerTableFunction(\"setColumnLayout\", this.setColumnLayout.bind(this));\r\n\t}\r\n\r\n\teventSave(type){\r\n\t\tif(this.config[type]){\r\n\t\t\tthis.save(type);\r\n\t\t}\r\n\t}\r\n\r\n\ttableBuilt(){\r\n\t\tvar options = this.table.options,\r\n\t\tsorters, filters;\r\n\r\n\t\tif(this.config.sort){\r\n\t\t\tsorters = this.load(\"sort\");\r\n\r\n\t\t\tif(!sorters === false){\r\n\t\t\t\tthis.table.initialSort = sorters;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(this.config.filter){\r\n\t\t\tfilters = this.load(\"filter\");\r\n\r\n\t\t\tif(!filters === false){\r\n\t\t\t\tthis.table.initialFilter = filters;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\ttableRedraw(force){\r\n\t\tif(force && this.config.columns){\r\n\t\t\tthis.save(\"columns\");\r\n\t\t}\r\n\t}\r\n\r\n\t///////////////////////////////////\r\n\t///////// Table Functions /////////\r\n\t///////////////////////////////////\r\n\r\n\tgetColumnLayout(){\r\n\t\treturn this.parseColumns(this.table.columnManager.getColumns());\r\n\t}\r\n\r\n\tsetColumnLayout(layout){\r\n\t\tthis.table.columnManager.setColumns(this.mergeDefinition(this.table.options.columns, layout))\r\n\t\treturn true;\r\n\t}\r\n\r\n\t///////////////////////////////////\r\n\t///////// Internal Logic //////////\r\n\t///////////////////////////////////\r\n\r\n\tinitializeColumn(column){\r\n\t\tvar def, keys;\r\n\r\n\t\tif(this.config.columns){\r\n\t\t\tthis.defWatcherBlock = true;\r\n\r\n\t\t\tdef = column.getDefinition();\r\n\r\n\t\t\tkeys = this.config.columns === true ? Object.keys(def) : this.config.columns;\r\n\r\n\t\t\tkeys.forEach((key)=>{\r\n\t\t\t\tvar props = Object.getOwnPropertyDescriptor(def, key);\r\n\t\t\t\tvar value = def[key];\r\n\t\t\t\tif(props){\r\n\t\t\t\t\tObject.defineProperty(def, key, {\r\n\t\t\t\t\t\tset: function(newValue){\r\n\t\t\t\t\t\t\tvalue = newValue;\r\n\r\n\t\t\t\t\t\t\tif(!this.defWatcherBlock){\r\n\t\t\t\t\t\t\t\tthis.save(\"columns\");\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\tif(props.set){\r\n\t\t\t\t\t\t\t\tprops.set(newValue);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tget:function(){\r\n\t\t\t\t\t\t\tif(props.get){\r\n\t\t\t\t\t\t\t\tprops.get();\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\treturn value;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tthis.defWatcherBlock = false;\r\n\t\t}\r\n\t}\r\n\r\n\t//load saved definitions\r\n\tload(type, current){\r\n\t\tvar data = this.retreiveData(type);\r\n\r\n\t\tif(current){\r\n\t\t\tdata = data ? this.mergeDefinition(current, data) : current;\r\n\t\t}\r\n\r\n\t\treturn data;\r\n\t}\r\n\r\n\t//retreive data from memory\r\n\tretreiveData(type){\r\n\t\treturn this.readFunc ? this.readFunc(this.id, type) : false;\r\n\t}\r\n\r\n\t//merge old and new column definitions\r\n\tmergeDefinition(oldCols, newCols){\r\n\t\tvar output = [];\r\n\r\n\t\tnewCols = newCols || [];\r\n\r\n\t\tnewCols.forEach((column, to) => {\r\n\t\t\tvar from = this._findColumn(oldCols, column),\r\n\t\t\tkeys;\r\n\r\n\t\t\tif(from){\r\n\t\t\t\tif(this.config.columns === true || this.config.columns == undefined){\r\n\t\t\t\t\tkeys = Object.keys(from);\r\n\t\t\t\t\tkeys.push(\"width\");\r\n\t\t\t\t}else{\r\n\t\t\t\t\tkeys = this.config.columns;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tkeys.forEach((key)=>{\r\n\t\t\t\t\tif(key !== \"columns\" && typeof column[key] !== \"undefined\"){\r\n\t\t\t\t\t\tfrom[key] = column[key];\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\tif(from.columns){\r\n\t\t\t\t\tfrom.columns = this.mergeDefinition(from.columns, column.columns);\r\n\t\t\t\t}\r\n\r\n\t\t\t\toutput.push(from);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\toldCols.forEach((column, i) => {\r\n\t\t\tvar from = this._findColumn(newCols, column);\r\n\r\n\t\t\tif (!from) {\r\n\t\t\t\tif(output.length>i){\r\n\t\t\t\t\toutput.splice(i, 0, column);\r\n\t\t\t\t}else{\r\n\t\t\t\t\toutput.push(column);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\t//find matching columns\r\n\t_findColumn(columns, subject){\r\n\t\tvar type = subject.columns ? \"group\" : (subject.field ? \"field\" : \"object\");\r\n\r\n\t\treturn columns.find(function(col){\r\n\t\t\tswitch(type){\r\n\t\t\t\tcase \"group\":\r\n\t\t\t\treturn col.title === subject.title && col.columns.length === subject.columns.length;\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"field\":\r\n\t\t\t\treturn col.field === subject.field;\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"object\":\r\n\t\t\t\treturn col === subject;\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t//save data\r\n\tsave(type){\r\n\t\tvar data = {};\r\n\r\n\t\tswitch(type){\r\n\t\t\tcase \"columns\":\r\n\t\t\tdata = this.parseColumns(this.table.columnManager.getColumns())\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"filter\":\r\n\t\t\tdata = this.table.modules.filter.getFilters();\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"sort\":\r\n\t\t\tdata = this.validateSorters(this.table.modules.sort.getSort());\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"group\":\r\n\t\t\tdata = this.getGroupConfig();\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"page\":\r\n\t\t\tdata = this.getPageConfig();\r\n\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\tif(this.writeFunc){\r\n\t\t\tthis.writeFunc(this.id, type, data);\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t//ensure sorters contain no function data\r\n\tvalidateSorters(data){\r\n\t\tdata.forEach(function(item){\r\n\t\t\titem.column = item.field;\r\n\t\t\tdelete item.field;\r\n\t\t});\r\n\r\n\t\treturn data;\r\n\t}\r\n\r\n\tgetGroupConfig(){\r\n\t\tvar data = {};\r\n\r\n\t\tif(this.config.group){\r\n\t\t\tif(this.config.group === true || this.config.group.groupBy){\r\n\t\t\t\tdata.groupBy = this.table.options.groupBy;\r\n\t\t\t}\r\n\r\n\t\t\tif(this.config.group === true || this.config.group.groupStartOpen){\r\n\t\t\t\tdata.groupStartOpen = this.table.options.groupStartOpen;\r\n\t\t\t}\r\n\r\n\t\t\tif(this.config.group === true || this.config.group.groupHeader){\r\n\t\t\t\tdata.groupHeader = this.table.options.groupHeader;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn data;\r\n\t}\r\n\r\n\tgetPageConfig(){\r\n\t\tvar data = {};\r\n\r\n\t\tif(this.config.page){\r\n\t\t\tif(this.config.page === true || this.config.page.size){\r\n\t\t\t\tdata.paginationSize = this.table.modules.page.getPageSize();\r\n\t\t\t}\r\n\r\n\t\t\tif(this.config.page === true || this.config.page.page){\r\n\t\t\t\tdata.paginationInitialPage = this.table.modules.page.getPage();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn data;\r\n\t}\r\n\r\n\r\n\t//parse columns for data to store\r\n\tparseColumns(columns){\r\n\t\tvar definitions = [],\r\n\t\texcludedKeys = [\"headerContextMenu\", \"headerMenu\", \"contextMenu\", \"clickMenu\"];\r\n\r\n\t\tcolumns.forEach((column) => {\r\n\t\t\tvar defStore = {},\r\n\t\t\tcolDef = column.getDefinition(),\r\n\t\t\tkeys;\r\n\r\n\t\t\tif(column.isGroup){\r\n\t\t\t\tdefStore.title = colDef.title;\r\n\t\t\t\tdefStore.columns = this.parseColumns(column.getColumns());\r\n\t\t\t}else{\r\n\t\t\t\tdefStore.field = column.getField();\r\n\r\n\t\t\t\tif(this.config.columns === true || this.config.columns == undefined){\r\n\t\t\t\t\tkeys = Object.keys(colDef);\r\n\t\t\t\t\tkeys.push(\"width\");\r\n\t\t\t\t}else{\r\n\t\t\t\t\tkeys = this.config.columns;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tkeys.forEach((key)=>{\r\n\t\t\t\t\tswitch(key){\r\n\t\t\t\t\t\tcase \"width\":\r\n\t\t\t\t\t\tdefStore.width = column.getWidth();\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase \"visible\":\r\n\t\t\t\t\t\tdefStore.visible = column.visible;\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\tdefault:\r\n\t\t\t\t\t\tif(typeof colDef[key] !== \"function\" && excludedKeys.indexOf(key) === -1){\r\n\t\t\t\t\t\t\tdefStore[key] = colDef[key];\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\tdefinitions.push(defStore);\r\n\t\t});\r\n\r\n\t\treturn definitions;\r\n\t}\r\n}\r\n\r\nPersistence.moduleName = \"persistence\";\r\n\r\n//load defaults\r\nPersistence.readers = defaultReaders;\r\nPersistence.writers = defaultWriters;\r\n\r\nexport default Persistence;","import Module from '../../core/Module.js';\r\n\r\nclass Print extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.element = false;\r\n\t\tthis.manualBlock = false;\r\n\r\n\t\tthis.registerTableOption(\"printAsHtml\", false); //enable print as html\r\n\t\tthis.registerTableOption(\"printFormatter\", false); //printing page formatter\r\n\t\tthis.registerTableOption(\"printHeader\", false); //page header contents\r\n\t\tthis.registerTableOption(\"printFooter\", false); //page footer contents\r\n\t\tthis.registerTableOption(\"printStyled\", true); //enable print as html styling\r\n\t\tthis.registerTableOption(\"printRowRange\", \"visible\"); //restrict print to visible rows only\r\n\t\tthis.registerTableOption(\"printConfig\", {}); //print config options\r\n\r\n\t\tthis.registerColumnOption(\"print\");\r\n\t\tthis.registerColumnOption(\"titlePrint\");\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tif(this.table.options.printAsHtml){\r\n\t\t\twindow.addEventListener(\"beforeprint\", this.replaceTable.bind(this));\r\n\t\t\twindow.addEventListener(\"afterprint\", this.cleanup.bind(this));\r\n\t\t}\r\n\r\n\t\tthis.registerTableFunction(\"print\", this.printFullscreen.bind(this));\r\n\t}\r\n\r\n\t///////////////////////////////////\r\n\t///////// Table Functions /////////\r\n\t///////////////////////////////////\r\n\r\n\t///////////////////////////////////\r\n\t///////// Internal Logic //////////\r\n\t///////////////////////////////////\r\n\r\n\treplaceTable(){\r\n\t\tif(!this.manualBlock){\r\n\t\t\tthis.element = document.createElement(\"div\");\r\n\t\t\tthis.element.classList.add(\"tabulator-print-table\");\r\n\r\n\t\t\tthis.element.appendChild(this.table.modules.export.genereateTable(this.table.options.printConfig, this.table.options.printStyled, this.table.options.printRowRange, \"print\"));\r\n\r\n\t\t\tthis.table.element.style.display = \"none\";\r\n\r\n\t\t\tthis.table.element.parentNode.insertBefore(this.element, this.table.element);\r\n\t\t}\r\n\t}\r\n\r\n\tcleanup(){\r\n\t\tdocument.body.classList.remove(\"tabulator-print-fullscreen-hide\");\r\n\r\n\t\tif(this.element && this.element.parentNode){\r\n\t\t\tthis.element.parentNode.removeChild(this.element);\r\n\t\t\tthis.table.element.style.display = \"\";\r\n\t\t}\r\n\t}\r\n\r\n\tprintFullscreen(visible, style, config){\r\n\t\tvar scrollX = window.scrollX,\r\n\t\tscrollY = window.scrollY,\r\n\t\theaderEl = document.createElement(\"div\"),\r\n\t\tfooterEl = document.createElement(\"div\"),\r\n\t\ttableEl = this.table.modules.export.genereateTable(typeof config != \"undefined\" ? config : this.table.options.printConfig, typeof style != \"undefined\" ? style : this.table.options.printStyled, visible || this.table.options.printRowRange, \"print\"),\r\n\t\theaderContent, footerContent;\r\n\r\n\t\tthis.manualBlock = true;\r\n\r\n\t\tthis.element = document.createElement(\"div\");\r\n\t\tthis.element.classList.add(\"tabulator-print-fullscreen\");\r\n\r\n\t\tif(this.table.options.printHeader){\r\n\t\t\theaderEl.classList.add(\"tabulator-print-header\");\r\n\r\n\t\t\theaderContent = typeof this.table.options.printHeader == \"function\" ? this.table.options.printHeader.call(this.table) : this.table.options.printHeader;\r\n\r\n\t\t\tif(typeof headerContent == \"string\"){\r\n\t\t\t\theaderEl.innerHTML = headerContent;\r\n\t\t\t}else{\r\n\t\t\t\theaderEl.appendChild(headerContent);\r\n\t\t\t}\r\n\r\n\t\t\tthis.element.appendChild(headerEl);\r\n\t\t}\r\n\r\n\t\tthis.element.appendChild(tableEl);\r\n\r\n\t\tif(this.table.options.printFooter){\r\n\t\t\tfooterEl.classList.add(\"tabulator-print-footer\");\r\n\r\n\t\t\tfooterContent = typeof this.table.options.printFooter == \"function\" ? this.table.options.printFooter.call(this.table) : this.table.options.printFooter;\r\n\r\n\r\n\t\t\tif(typeof footerContent == \"string\"){\r\n\t\t\t\tfooterEl.innerHTML = footerContent;\r\n\t\t\t}else{\r\n\t\t\t\tfooterEl.appendChild(footerContent);\r\n\t\t\t}\r\n\r\n\t\t\tthis.element.appendChild(footerEl);\r\n\t\t}\r\n\r\n\t\tdocument.body.classList.add(\"tabulator-print-fullscreen-hide\");\r\n\t\tdocument.body.appendChild(this.element);\r\n\r\n\t\tif(this.table.options.printFormatter){\r\n\t\t\tthis.table.options.printFormatter(this.element, tableEl);\r\n\t\t}\r\n\r\n\t\twindow.print();\r\n\r\n\t\tthis.cleanup();\r\n\r\n\t\twindow.scrollTo(scrollX, scrollY);\r\n\r\n\t\tthis.manualBlock = false;\r\n\t}\r\n}\r\n\r\nPrint.moduleName = \"print\";\r\n\r\nexport default Print;","import Module from '../../core/Module.js';\r\n\r\nclass ReactiveData extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.data = false;\r\n\t\tthis.blocked = false; //block reactivity while performing update\r\n\t\tthis.origFuncs = {}; // hold original data array functions to allow replacement after data is done with\r\n\t\tthis.currentVersion = 0;\r\n\r\n\t\tthis.registerTableOption(\"reactiveData\", false); //enable data reactivity\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tif(this.table.options.reactiveData){\r\n\t\t\tthis.subscribe(\"cell-value-save-before\", this.block.bind(this));\r\n\t\t\tthis.subscribe(\"cell-value-save-after\", this.unblock.bind(this));\r\n\t\t\tthis.subscribe(\"row-data-save-before\", this.block.bind(this));\r\n\t\t\tthis.subscribe(\"row-data-save-after\", this.unblock.bind(this));\r\n\t\t\tthis.subscribe(\"row-data-init-after\", this.watchRow.bind(this));\r\n\t\t\tthis.subscribe(\"data-processing\", this.watchData.bind(this));\r\n\t\t\tthis.subscribe(\"data-processing\", this.watchData.bind(this));\r\n\t\t\tthis.subscribe(\"table-destroy\", this.unwatchData.bind(this));\r\n\t\t}\r\n\t}\r\n\r\n\twatchData(data){\r\n\t\tvar self = this,\r\n\t\tpushFunc, version;\r\n\r\n\t\tthis.currentVersion ++;\r\n\r\n\t\tversion = this.currentVersion;\r\n\r\n\t\tself.unwatchData();\r\n\r\n\t\tself.data = data;\r\n\r\n\t\t//override array push function\r\n\t\tself.origFuncs.push = data.push;\r\n\r\n\t\tObject.defineProperty(self.data, \"push\", {\r\n\t\t\tenumerable: false,\r\n\t\t\tconfigurable: true,\r\n\t\t\tvalue: function () {\r\n\t\t\t\tvar args = Array.from(arguments);\r\n\r\n\t\t\t\tif(!self.blocked && version === self.currentVersion){\r\n\t\t\t\t\targs.forEach(function (arg){\r\n\t\t\t\t\t\tself.table.rowManager.addRowActual(arg, false);\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn self.origFuncs.push.apply(data, arguments);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\t//override array unshift function\r\n\t\tself.origFuncs.unshift = data.unshift;\r\n\r\n\t\tObject.defineProperty(self.data, \"unshift\", {\r\n\t\t\tenumerable: false,\r\n\t\t\tconfigurable: true,\r\n\t\t\tvalue: function () {\r\n\t\t\t\tvar args = Array.from(arguments);\r\n\r\n\t\t\t\tif(!self.blocked && version === self.currentVersion){\r\n\t\t\t\t\targs.forEach(function (arg){\r\n\t\t\t\t\t\tself.table.rowManager.addRowActual(arg, true);\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn self.origFuncs.unshift.apply(data, arguments);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\r\n\t\t//override array shift function\r\n\t\tself.origFuncs.shift = data.shift;\r\n\r\n\t\tObject.defineProperty(self.data, \"shift\", {\r\n\t\t\tenumerable: false,\r\n\t\t\tconfigurable: true,\r\n\t\t\tvalue: function () {\r\n\t\t\t\tvar row;\r\n\r\n\t\t\t\tif(!self.blocked && version === self.currentVersion){\r\n\t\t\t\t\tif(self.data.length){\r\n\t\t\t\t\t\trow = self.table.rowManager.getRowFromDataObject(self.data[0]);\r\n\r\n\t\t\t\t\t\tif(row){\r\n\t\t\t\t\t\t\trow.deleteActual();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn self.origFuncs.shift.call(data);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\t//override array pop function\r\n\t\tself.origFuncs.pop = data.pop;\r\n\r\n\t\tObject.defineProperty(self.data, \"pop\", {\r\n\t\t\tenumerable: false,\r\n\t\t\tconfigurable: true,\r\n\t\t\tvalue: function () {\r\n\t\t\t\tvar row;\r\n\t\t\t\tif(!self.blocked && version === self.currentVersion){\r\n\t\t\t\t\tif(self.data.length){\r\n\t\t\t\t\t\trow = self.table.rowManager.getRowFromDataObject(self.data[self.data.length - 1]);\r\n\r\n\t\t\t\t\t\tif(row){\r\n\t\t\t\t\t\t\trow.deleteActual();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn self.origFuncs.pop.call(data);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\r\n\t\t//override array splice function\r\n\t\tself.origFuncs.splice = data.splice;\r\n\r\n\t\tObject.defineProperty(self.data, \"splice\", {\r\n\t\t\tenumerable: false,\r\n\t\t\tconfigurable: true,\r\n\t\t\tvalue: function () {\r\n\t\t\t\tvar args = Array.from(arguments),\r\n\t\t\t\tstart = args[0] < 0 ? data.length + args[0] : args[0],\r\n\t\t\t\tend = args[1],\r\n\t\t\t\tnewRows = args[2] ? args.slice(2) : false,\r\n\t\t\t\tstartRow;\r\n\r\n\t\t\t\tif(!self.blocked && version === self.currentVersion){\r\n\r\n\t\t\t\t\t//add new rows\r\n\t\t\t\t\tif(newRows){\r\n\t\t\t\t\t\tstartRow = data[start] ? self.table.rowManager.getRowFromDataObject(data[start]) : false;\r\n\r\n\t\t\t\t\t\tif(startRow){\r\n\t\t\t\t\t\t\tnewRows.forEach(function(rowData){\r\n\t\t\t\t\t\t\t\tself.table.rowManager.addRowActual(rowData, true, startRow, true);\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\tnewRows = newRows.slice().reverse();\r\n\r\n\t\t\t\t\t\t\tnewRows.forEach(function(rowData){\r\n\t\t\t\t\t\t\t\tself.table.rowManager.addRowActual(rowData, true, false, true);\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t//delete removed rows\r\n\t\t\t\t\tif(end !== 0){\r\n\t\t\t\t\t\tvar oldRows = data.slice(start, typeof args[1] === \"undefined\" ? args[1] : start + end);\r\n\r\n\t\t\t\t\t\toldRows.forEach(function(rowData, i){\r\n\t\t\t\t\t\t\tvar row = self.table.rowManager.getRowFromDataObject(rowData);\r\n\r\n\t\t\t\t\t\t\tif(row){\r\n\t\t\t\t\t\t\t\trow.deleteActual(i !== oldRows.length - 1);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif(newRows || end !== 0){\r\n\t\t\t\t\t\tself.table.rowManager.reRenderInPosition();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn self.origFuncs.splice.apply(data, arguments);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tunwatchData(){\r\n\t\tif(this.data !== false){\r\n\t\t\tfor(var key in this.origFuncs){\r\n\t\t\t\tObject.defineProperty(this.data, key, {\r\n\t\t\t\t\tenumerable: true,\r\n\t\t\t\t\tconfigurable:true,\r\n\t\t\t\t\twritable:true,\r\n\t\t\t\t\tvalue: this.origFuncs.key,\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\twatchRow(row){\r\n\t\tvar data = row.getData();\r\n\r\n\t\tthis.blocked = true;\r\n\r\n\t\tfor(var key in data){\r\n\t\t\tthis.watchKey(row, data, key);\r\n\t\t}\r\n\r\n\t\tif(this.table.options.dataTree){\r\n\t\t\tthis.watchTreeChildren(row);\r\n\t\t}\r\n\r\n\t\tthis.blocked = false;\r\n\t}\r\n\r\n\twatchTreeChildren (row){\r\n\t\tvar self = this,\r\n\t\tchildField = row.getData()[this.table.options.dataTreeChildField],\r\n\t\torigFuncs = {};\r\n\r\n\t\tfunction rebuildTree(){\r\n\t\t\tself.table.modules.dataTree.initializeRow(row);\r\n\t\t\tself.table.modules.dataTree.layoutRow(row);\r\n\t\t\tself.table.rowManager.refreshActiveData(\"tree\", false, true);\r\n\t\t}\r\n\r\n\t\tif(childField){\r\n\r\n\t\t\torigFuncs.push = childField.push;\r\n\r\n\t\t\tObject.defineProperty(childField, \"push\", {\r\n\t\t\t\tenumerable: false,\r\n\t\t\t\tconfigurable: true,\r\n\t\t\t\tvalue: function value() {\r\n\t\t\t\t\tvar result = origFuncs.push.apply(childField, arguments);\r\n\r\n\t\t\t\t\trebuildTree();\r\n\r\n\t\t\t\t\treturn result;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\torigFuncs.unshift = childField.unshift;\r\n\r\n\t\t\tObject.defineProperty(childField, \"unshift\", {\r\n\t\t\t\tenumerable: false,\r\n\t\t\t\tconfigurable: true,\r\n\t\t\t\tvalue: function value() {\r\n\t\t\t\t\tvar result = origFuncs.unshift.apply(childField, arguments);\r\n\r\n\t\t\t\t\trebuildTree();\r\n\r\n\t\t\t\t\treturn result;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\torigFuncs.shift = childField.shift;\r\n\r\n\t\t\tObject.defineProperty(childField, \"shift\", {\r\n\t\t\t\tenumerable: false,\r\n\t\t\t\tconfigurable: true,\r\n\t\t\t\tvalue: function value() {\r\n\t\t\t\t\tvar result = origFuncs.shift.call(childField);\r\n\r\n\t\t\t\t\trebuildTree();\r\n\r\n\t\t\t\t\treturn result;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\torigFuncs.pop = childField.pop;\r\n\r\n\t\t\tObject.defineProperty(childField, \"pop\", {\r\n\t\t\t\tenumerable: false,\r\n\t\t\t\tconfigurable: true,\r\n\t\t\t\tvalue: function value() {\r\n\t\t\t\t\tvar result = origFuncs.pop.call(childField);\r\n\r\n\t\t\t\t\trebuildTree();\r\n\r\n\t\t\t\t\treturn result;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\torigFuncs.splice = childField.splice;\r\n\r\n\t\t\tObject.defineProperty(childField, \"splice\", {\r\n\t\t\t\tenumerable: false,\r\n\t\t\t\tconfigurable: true,\r\n\t\t\t\tvalue: function value() {\r\n\t\t\t\t\tvar result = origFuncs.splice.apply(childField, arguments);\r\n\r\n\t\t\t\t\trebuildTree();\r\n\r\n\t\t\t\t\treturn result;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\twatchKey(row, data, key){\r\n\t\tvar self = this,\r\n\t\tprops = Object.getOwnPropertyDescriptor(data, key),\r\n\t\tvalue = data[key],\r\n\t\tversion = this.currentVersion;\r\n\r\n\t\tObject.defineProperty(data, key, {\r\n\t\t\tset: function(newValue){\r\n\t\t\t\tvalue = newValue;\r\n\t\t\t\tif(!self.blocked && version === self.currentVersion){\r\n\t\t\t\t\tvar update = {};\r\n\t\t\t\t\tupdate[key] = newValue;\r\n\t\t\t\t\trow.updateData(update);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(props.set){\r\n\t\t\t\t\tprops.set(newValue);\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tget:function(){\r\n\r\n\t\t\t\tif(props.get){\r\n\t\t\t\t\tprops.get();\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn value;\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tunwatchRow(row){\r\n\t\tvar data = row.getData();\r\n\r\n\t\tfor(var key in data){\r\n\t\t\tObject.defineProperty(data, key, {\r\n\t\t\t\tvalue:data[key],\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tblock(){\r\n\t\tthis.blocked = true;\r\n\t}\r\n\r\n\tunblock(){\r\n\t\tthis.blocked = false;\r\n\t}\r\n}\r\n\r\nReactiveData.moduleName = \"reactiveData\";\r\n\r\nexport default ReactiveData;\r\n\r\n\r\n\r\n","import Module from '../../core/Module.js';\r\n\r\nclass ResizeColumns extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.startColumn = false;\r\n\t\tthis.startX = false;\r\n\t\tthis.startWidth = false;\r\n\t\tthis.handle = null;\r\n\t\tthis.prevHandle = null;\r\n\r\n\t\tthis.registerColumnOption(\"resizable\", true);\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\t// if(this.table.options.resizableColumns){\r\n\t\t\tthis.subscribe(\"cell-layout\", this.layoutCellHandles.bind(this));\r\n\t\t\tthis.subscribe(\"column-init\", this.layoutColumnHeader.bind(this));\r\n\t\t// }\r\n\t}\r\n\r\n\tlayoutCellHandles(cell){\r\n\t\tif(cell.row.type === \"row\"){\r\n\t\t\tthis.initializeColumn(\"cell\", cell.column, cell.element);\r\n\t\t}\r\n\t}\r\n\r\n\tlayoutColumnHeader(column){\r\n\t\tthis.initializeColumn(\"header\", column, column.element);\r\n\t}\r\n\r\n\tinitializeColumn(type, column, element){\r\n\t\tvar self = this,\r\n\t\tvariableHeight = false,\r\n\t\tmode = column.definition.resizable;\r\n\r\n\t\t//set column resize mode\r\n\t\tif(type === \"header\"){\r\n\t\t\tvariableHeight = column.definition.formatter == \"textarea\" || column.definition.variableHeight;\r\n\t\t\tcolumn.modules.resize = {variableHeight:variableHeight};\r\n\t\t}\r\n\r\n\t\tif(mode === true || mode == type){\r\n\r\n\t\t\tvar handle = document.createElement('div');\r\n\t\t\thandle.className = \"tabulator-col-resize-handle\";\r\n\r\n\r\n\t\t\tvar prevHandle = document.createElement('div');\r\n\t\t\tprevHandle.className = \"tabulator-col-resize-handle prev\";\r\n\r\n\t\t\thandle.addEventListener(\"click\", function(e){\r\n\t\t\t\te.stopPropagation();\r\n\t\t\t});\r\n\r\n\t\t\tvar handleDown = function(e){\r\n\t\t\t\tvar nearestColumn = column.getLastColumn();\r\n\r\n\t\t\t\tif(nearestColumn && self._checkResizability(nearestColumn)){\r\n\t\t\t\t\tself.startColumn = column;\r\n\t\t\t\t\tself._mouseDown(e, nearestColumn, handle);\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\thandle.addEventListener(\"mousedown\", handleDown);\r\n\t\t\thandle.addEventListener(\"touchstart\", handleDown, {passive: true});\r\n\r\n\t\t\t//reszie column on double click\r\n\t\t\thandle.addEventListener(\"dblclick\", function(e){\r\n\t\t\t\tvar col = column.getLastColumn();\r\n\r\n\t\t\t\tif(col && self._checkResizability(col)){\r\n\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\tcol.reinitializeWidth(true);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\r\n\t\t\tprevHandle.addEventListener(\"click\", function(e){\r\n\t\t\t\te.stopPropagation();\r\n\t\t\t});\r\n\r\n\t\t\tvar prevHandleDown = function(e){\r\n\t\t\t\tvar nearestColumn, colIndex, prevColumn;\r\n\r\n\t\t\t\tnearestColumn = column.getFirstColumn();\r\n\r\n\t\t\t\tif(nearestColumn){\r\n\t\t\t\t\tcolIndex = self.table.columnManager.findColumnIndex(nearestColumn);\r\n\t\t\t\t\tprevColumn = colIndex > 0 ? self.table.columnManager.getColumnByIndex(colIndex - 1) : false;\r\n\r\n\t\t\t\t\tif(prevColumn && self._checkResizability(prevColumn)){\r\n\t\t\t\t\t\tself.startColumn = column;\r\n\t\t\t\t\t\tself._mouseDown(e, prevColumn, prevHandle);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\tprevHandle.addEventListener(\"mousedown\", prevHandleDown);\r\n\t\t\tprevHandle.addEventListener(\"touchstart\", prevHandleDown, {passive: true});\r\n\r\n\t\t\t//resize column on double click\r\n\t\t\tprevHandle.addEventListener(\"dblclick\", function(e){\r\n\t\t\t\tvar nearestColumn, colIndex, prevColumn;\r\n\r\n\t\t\t\tnearestColumn = column.getFirstColumn();\r\n\r\n\t\t\t\tif(nearestColumn){\r\n\t\t\t\t\tcolIndex = self.table.columnManager.findColumnIndex(nearestColumn);\r\n\t\t\t\t\tprevColumn = colIndex > 0 ? self.table.columnManager.getColumnByIndex(colIndex - 1) : false;\r\n\r\n\t\t\t\t\tif(prevColumn && self._checkResizability(prevColumn)){\r\n\t\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\t\tprevColumn.reinitializeWidth(true);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\telement.appendChild(handle);\r\n\t\t\telement.appendChild(prevHandle);\r\n\t\t}\r\n\t}\r\n\r\n\t_checkResizability(column){\r\n\t\treturn column.definition.resizable;\r\n\t}\r\n\r\n\t_mouseDown(e, column, handle){\r\n\t\tvar self = this;\r\n\r\n\t\tself.table.element.classList.add(\"tabulator-block-select\");\r\n\r\n\t\tfunction mouseMove(e){\r\n\t\t\t// self.table.columnManager.tempScrollBlock();\r\n\r\n\t\t\tif(self.table.rtl){\r\n\t\t\t\tcolumn.setWidth(self.startWidth - ((typeof e.screenX === \"undefined\" ? e.touches[0].screenX : e.screenX) - self.startX));\r\n\t\t\t}else{\r\n\t\t\t\tcolumn.setWidth(self.startWidth + ((typeof e.screenX === \"undefined\" ? e.touches[0].screenX : e.screenX) - self.startX));\r\n\t\t\t}\r\n\r\n\t\t\tself.table.columnManager.renderer.rerenderColumns(true);\r\n\r\n\t\t\tif(!self.table.browserSlow && column.modules.resize && column.modules.resize.variableHeight){\r\n\t\t\t\tcolumn.checkCellHeights();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction mouseUp(e){\r\n\r\n\t\t\t//block editor from taking action while resizing is taking place\r\n\t\t\tif(self.startColumn.modules.edit){\r\n\t\t\t\tself.startColumn.modules.edit.blocked = false;\r\n\t\t\t}\r\n\r\n\t\t\tif(self.table.browserSlow && column.modules.resize && column.modules.resize.variableHeight){\r\n\t\t\t\tcolumn.checkCellHeights();\r\n\t\t\t}\r\n\r\n\t\t\tdocument.body.removeEventListener(\"mouseup\", mouseUp);\r\n\t\t\tdocument.body.removeEventListener(\"mousemove\", mouseMove);\r\n\r\n\t\t\thandle.removeEventListener(\"touchmove\", mouseMove);\r\n\t\t\thandle.removeEventListener(\"touchend\", mouseUp);\r\n\r\n\t\t\tself.table.element.classList.remove(\"tabulator-block-select\");\r\n\r\n\t\t\tself.dispatch(\"column-resized\", column);\r\n\t\t\tself.table.externalEvents.dispatch(\"columnResized\", column.getComponent());\r\n\t\t}\r\n\r\n\t\te.stopPropagation(); //prevent resize from interfereing with movable columns\r\n\r\n\t\t//block editor from taking action while resizing is taking place\r\n\t\tif(self.startColumn.modules.edit){\r\n\t\t\tself.startColumn.modules.edit.blocked = true;\r\n\t\t}\r\n\r\n\t\tself.startX = typeof e.screenX === \"undefined\" ? e.touches[0].screenX : e.screenX;\r\n\t\tself.startWidth = column.getWidth();\r\n\r\n\t\tdocument.body.addEventListener(\"mousemove\", mouseMove);\r\n\t\tdocument.body.addEventListener(\"mouseup\", mouseUp);\r\n\t\thandle.addEventListener(\"touchmove\", mouseMove, {passive: true});\r\n\t\thandle.addEventListener(\"touchend\", mouseUp);\r\n\t}\r\n}\r\n\r\nResizeColumns.moduleName = \"resizeColumns\";\r\n\r\nexport default ResizeColumns;","import Module from '../../core/Module.js';\r\n\r\nclass ResizeRows extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.startColumn = false;\r\n\t\tthis.startY = false;\r\n\t\tthis.startHeight = false;\r\n\t\tthis.handle = null;\r\n\t\tthis.prevHandle = null;\r\n\r\n\t\tthis.registerTableOption(\"resizableRows\", false); //resizable rows\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tif(this.table.options.resizableRows){\r\n\t\t\tthis.subscribe(\"row-layout-after\", this.initializeRow.bind(this));\r\n\t\t}\r\n\t}\r\n\r\n\tinitializeRow(row){\r\n\t\tvar self = this,\r\n\t\trowEl = row.getElement();\r\n\r\n\t\tvar handle = document.createElement('div');\r\n\t\thandle.className = \"tabulator-row-resize-handle\";\r\n\r\n\t\tvar prevHandle = document.createElement('div');\r\n\t\tprevHandle.className = \"tabulator-row-resize-handle prev\";\r\n\r\n\t\thandle.addEventListener(\"click\", function(e){\r\n\t\t\te.stopPropagation();\r\n\t\t});\r\n\r\n\t\tvar handleDown = function(e){\r\n\t\t\tself.startRow = row;\r\n\t\t\tself._mouseDown(e, row, handle);\r\n\t\t};\r\n\r\n\t\thandle.addEventListener(\"mousedown\", handleDown);\r\n\t\thandle.addEventListener(\"touchstart\", handleDown, {passive: true});\r\n\r\n\t\tprevHandle.addEventListener(\"click\", function(e){\r\n\t\t\te.stopPropagation();\r\n\t\t});\r\n\r\n\t\tvar prevHandleDown = function(e){\r\n\t\t\tvar prevRow = self.table.rowManager.prevDisplayRow(row);\r\n\r\n\t\t\tif(prevRow){\r\n\t\t\t\tself.startRow = prevRow;\r\n\t\t\t\tself._mouseDown(e, prevRow, prevHandle);\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tprevHandle.addEventListener(\"mousedown\",prevHandleDown);\r\n\t\tprevHandle.addEventListener(\"touchstart\",prevHandleDown, {passive: true});\r\n\r\n\t\trowEl.appendChild(handle);\r\n\t\trowEl.appendChild(prevHandle);\r\n\t}\r\n\r\n\t_mouseDown(e, row, handle){\r\n\t\tvar self = this;\r\n\r\n\t\tself.table.element.classList.add(\"tabulator-block-select\");\r\n\r\n\t\tfunction mouseMove(e){\r\n\t\t\trow.setHeight(self.startHeight + ((typeof e.screenY === \"undefined\" ? e.touches[0].screenY : e.screenY) - self.startY));\r\n\t\t}\r\n\r\n\t\tfunction mouseUp(e){\r\n\r\n\t\t\t// //block editor from taking action while resizing is taking place\r\n\t\t\t// if(self.startColumn.modules.edit){\r\n\t\t\t// \tself.startColumn.modules.edit.blocked = false;\r\n\t\t\t// }\r\n\r\n\t\t\tdocument.body.removeEventListener(\"mouseup\", mouseMove);\r\n\t\t\tdocument.body.removeEventListener(\"mousemove\", mouseMove);\r\n\r\n\t\t\thandle.removeEventListener(\"touchmove\", mouseMove);\r\n\t\t\thandle.removeEventListener(\"touchend\", mouseUp);\r\n\r\n\t\t\tself.table.element.classList.remove(\"tabulator-block-select\");\r\n\r\n\t\t\tthis.dispatchExternal(\"rowResized\", row.getComponent());\r\n\t\t}\r\n\r\n\t\te.stopPropagation(); //prevent resize from interfereing with movable columns\r\n\r\n\t\t//block editor from taking action while resizing is taking place\r\n\t\t// if(self.startColumn.modules.edit){\r\n\t\t// \tself.startColumn.modules.edit.blocked = true;\r\n\t\t// }\r\n\r\n\t\tself.startY = typeof e.screenY === \"undefined\" ? e.touches[0].screenY : e.screenY;\r\n\t\tself.startHeight = row.getHeight();\r\n\r\n\t\tdocument.body.addEventListener(\"mousemove\", mouseMove);\r\n\t\tdocument.body.addEventListener(\"mouseup\", mouseUp);\r\n\r\n\t\thandle.addEventListener(\"touchmove\", mouseMove, {passive: true});\r\n\t\thandle.addEventListener(\"touchend\", mouseUp);\r\n\t}\r\n}\r\n\r\nResizeRows.moduleName = \"resizeRows\";\r\n\r\nexport default ResizeRows;","import Module from '../../core/Module.js';\r\n\r\nclass ResizeTable extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.binding = false;\r\n\t\tthis.observer = false;\r\n\t\tthis.containerObserver = false;\r\n\r\n\t\tthis.tableHeight = 0;\r\n\t\tthis.tableWidth = 0;\r\n\t\tthis.containerHeight = 0;\r\n\t\tthis.containerWidth = 0;\r\n\r\n\t\tthis.autoResize = false;\r\n\r\n\t\tthis.registerTableOption(\"autoResize\", true); //auto resize table\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tif(this.table.options.autoResize){\r\n\t\t\tvar table = this.table,\r\n\t\t\ttableStyle;\r\n\r\n\t\t\tthis.tableHeight = table.element.clientHeight;\r\n\t\t\tthis.tableWidth = table.element.clientWidth;\r\n\r\n\t\t\tif(table.element.parentNode){\r\n\t\t\t\tthis.containerHeight = table.element.parentNode.clientHeight;\r\n\t\t\t\tthis.containerWidth = table.element.parentNode.clientWidth;\r\n\t\t\t}\r\n\r\n\t\t\tif(typeof ResizeObserver !== \"undefined\" && table.rowManager.getRenderMode() === \"virtual\"){\r\n\r\n\t\t\t\tthis.autoResize = true;\r\n\r\n\t\t\t\tthis.observer = new ResizeObserver((entry) => {\r\n\t\t\t\t\tif(!table.browserMobile || (table.browserMobile &&!table.modules.edit.currentCell)){\r\n\r\n\t\t\t\t\t\tvar nodeHeight = Math.floor(entry[0].contentRect.height);\r\n\t\t\t\t\t\tvar nodeWidth = Math.floor(entry[0].contentRect.width);\r\n\r\n\t\t\t\t\t\tif(this.tableHeight != nodeHeight || this.tableWidth != nodeWidth){\r\n\t\t\t\t\t\t\tthis.tableHeight = nodeHeight;\r\n\t\t\t\t\t\t\tthis.tableWidth = nodeWidth;\r\n\r\n\t\t\t\t\t\t\tif(table.element.parentNode){\r\n\t\t\t\t\t\t\t\tthis.containerHeight = table.element.parentNode.clientHeight;\r\n\t\t\t\t\t\t\t\tthis.containerWidth = table.element.parentNode.clientWidth;\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\tthis.table.columnManager.renderer.rerenderColumns(true);\r\n\r\n\t\t\t\t\t\t\ttable.redraw();\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\tthis.observer.observe(table.element);\r\n\r\n\t\t\t\ttableStyle = window.getComputedStyle(table.element);\r\n\r\n\t\t\t\tif(this.table.element.parentNode && !this.table.rowManager.fixedHeight && (tableStyle.getPropertyValue(\"max-height\") || tableStyle.getPropertyValue(\"min-height\"))){\r\n\r\n\t\t\t\t\tthis.containerObserver = new ResizeObserver((entry) => {\r\n\t\t\t\t\t\tif(!table.browserMobile || (table.browserMobile &&!table.modules.edit.currentCell)){\r\n\r\n\t\t\t\t\t\t\tvar nodeHeight = Math.floor(entry[0].contentRect.height);\r\n\t\t\t\t\t\t\tvar nodeWidth = Math.floor(entry[0].contentRect.width);\r\n\r\n\t\t\t\t\t\t\tif(this.containerHeight != nodeHeight || this.containerWidth != nodeWidth){\r\n\t\t\t\t\t\t\t\tthis.containerHeight = nodeHeight;\r\n\t\t\t\t\t\t\t\tthis.containerWidth = nodeWidth;\r\n\t\t\t\t\t\t\t\tthis.tableHeight = table.element.clientHeight;\r\n\t\t\t\t\t\t\t\tthis.tableWidth = table.element.clientWidth;\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\ttable.columnManager.renderer.rerenderColumns(true);\r\n\r\n\t\t\t\t\t\t\ttable.redraw();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\tthis.containerObserver.observe(this.table.element.parentNode);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.subscribe(\"table-resize\", this.tableResized.bind(this));\r\n\r\n\t\t\t}else{\r\n\t\t\t\tthis.binding = function(){\r\n\t\t\t\t\tif(!table.browserMobile || (table.browserMobile && !table.modules.edit.currentCell)){\r\n\r\n\t\t\t\t\t\ttable.columnManager.renderer.rerenderColumns(true);\r\n\r\n\t\t\t\t\t\ttable.redraw();\r\n\t\t\t\t\t}\r\n\t\t\t\t};\r\n\r\n\t\t\t\twindow.addEventListener(\"resize\", this.binding);\r\n\t\t\t}\r\n\r\n\t\t\tthis.subscribe(\"table-destroy\", this.clearBindings.bind(this));\r\n\t\t}\r\n\t}\r\n\r\n\ttableResized(){\r\n\t\tthis.table.rowManager.redraw();\r\n\t}\r\n\r\n\tclearBindings(){\r\n\t\tif(this.binding){\r\n\t\t\twindow.removeEventListener(\"resize\", this.binding);\r\n\t\t}\r\n\r\n\t\tif(this.observer){\r\n\t\t\tthis.observer.unobserve(this.table.element);\r\n\t\t}\r\n\r\n\t\tif(this.containerObserver){\r\n\t\t\tthis.containerObserver.unobserve(this.table.element.parentNode);\r\n\t\t}\r\n\t}\r\n}\r\n\r\nResizeTable.moduleName = \"resizeTable\";\r\n\r\nexport default ResizeTable;","import Module from '../../core/Module.js';\r\n\r\nclass ResponsiveLayout extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.columns = [];\r\n\t\tthis.hiddenColumns = [];\r\n\t\tthis.mode = \"\";\r\n\t\tthis.index = 0;\r\n\t\tthis.collapseFormatter = [];\r\n\t\tthis.collapseStartOpen = true;\r\n\t\tthis.collapseHandleColumn = false;\r\n\r\n\t\tthis.registerTableOption(\"responsiveLayout\", false); //responsive layout flags\r\n\t\tthis.registerTableOption(\"responsiveLayoutCollapseStartOpen\", true); //start showing collapsed data\r\n\t\tthis.registerTableOption(\"responsiveLayoutCollapseUseFormatters\", true); //responsive layout collapse formatter\r\n\t\tthis.registerTableOption(\"responsiveLayoutCollapseFormatter\", false); //responsive layout collapse formatter\r\n\r\n\t\tthis.registerColumnOption(\"responsive\");\r\n\t}\r\n\r\n\t//generate resposive columns list\r\n\tinitialize(){\r\n\t\tvar self = this,\r\n\t\tcolumns = [];\r\n\r\n\t\tif(this.table.options.responsiveLayout){\r\n\t\t\tthis.subscribe(\"column-layout\", this.initializeColumn.bind(this));\r\n\t\t\tthis.subscribe(\"column-show\", this.updateColumnVisibility.bind(this));\r\n\t\t\tthis.subscribe(\"column-hide\", this.updateColumnVisibility.bind(this));\r\n\t\t\tthis.subscribe(\"columns-loaded\", this.initializeResponsivity.bind(this));\r\n\t\t\tthis.subscribe(\"column-moved\", this.initializeResponsivity.bind(this));\r\n\t\t\tthis.subscribe(\"column-add\", this.initializeResponsivity.bind(this));\r\n\t\t\tthis.subscribe(\"column-delete\", this.initializeResponsivity.bind(this));\r\n\r\n\t\t\tthis.subscribe(\"table-redrawing\", this.tableRedraw.bind(this));\r\n\r\n\t\t\tif(this.table.options.responsiveLayout === \"collapse\"){\r\n\t\t\t\tthis.subscribe(\"row-init\", this.initializeRow.bind(this));\r\n\t\t\t\tthis.subscribe(\"row-layout\", this.layoutRow.bind(this));\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\ttableRedraw(force){\r\n\t\tif([\"fitColumns\", \"fitDataStretch\"].indexOf(this.layoutMode()) === -1){\r\n\t\t\tif(!force){\r\n\t\t\t\tthis.update();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tinitializeResponsivity(){\r\n\t\tthis.mode = this.table.options.responsiveLayout;\r\n\t\tthis.collapseFormatter = this.table.options.responsiveLayoutCollapseFormatter || this.formatCollapsedData;\r\n\t\tthis.collapseStartOpen = this.table.options.responsiveLayoutCollapseStartOpen;\r\n\t\tthis.hiddenColumns = [];\r\n\r\n\t\t//detemine level of responsivity for each column\r\n\t\tthis.table.columnManager.columnsByIndex.forEach(function(column, i){\r\n\t\t\tif(column.modules.responsive){\r\n\t\t\t\tif(column.modules.responsive.order && column.modules.responsive.visible){\r\n\t\t\t\t\tcolumn.modules.responsive.index = i;\r\n\t\t\t\t\tcolumns.push(column);\r\n\r\n\t\t\t\t\tif(!column.visible && self.mode === \"collapse\"){\r\n\t\t\t\t\t\tself.hiddenColumns.push(column);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\t//sort list by responsivity\r\n\t\tcolumns = columns.reverse();\r\n\t\tcolumns = columns.sort(function(a, b){\r\n\t\t\tvar diff = b.modules.responsive.order - a.modules.responsive.order;\r\n\t\t\treturn diff || (b.modules.responsive.index - a.modules.responsive.index);\r\n\t\t});\r\n\r\n\t\tthis.columns = columns;\r\n\r\n\t\tif(this.mode === \"collapse\"){\r\n\t\t\tthis.generateCollapsedContent();\r\n\t\t}\r\n\r\n\t\t//assign collapse column\r\n\t\tfor (let col of this.table.columnManager.columnsByIndex){\r\n\t\t\tif(col.definition.formatter == \"responsiveCollapse\"){\r\n\t\t\t\tthis.collapseHandleColumn = col;\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(this.collapseHandleColumn){\r\n\t\t\tif(this.hiddenColumns.length){\r\n\t\t\t\tthis.collapseHandleColumn.show();\r\n\t\t\t}else{\r\n\t\t\t\tthis.collapseHandleColumn.hide();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//define layout information\r\n\tinitializeColumn(column){\r\n\t\tvar def = column.getDefinition();\r\n\r\n\t\tcolumn.modules.responsive = {order: typeof def.responsive === \"undefined\" ? 1 : def.responsive, visible:def.visible === false ? false : true};\r\n\t}\r\n\r\n\tinitializeRow(row){\r\n\t\tvar el;\r\n\r\n\t\tif(row.type !== \"calc\"){\r\n\t\t\tel = document.createElement(\"div\");\r\n\t\t\tel.classList.add(\"tabulator-responsive-collapse\");\r\n\r\n\t\t\trow.modules.responsiveLayout = {\r\n\t\t\t\telement:el,\r\n\t\t\t\topen:this.collapseStartOpen,\r\n\t\t\t};\r\n\r\n\t\t\tif(!this.collapseStartOpen){\r\n\t\t\t\tel.style.display = 'none';\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tlayoutRow(row){\r\n\t\tvar rowEl = row.getElement();\r\n\r\n\t\tif(row.modules.responsiveLayout){\r\n\t\t\trowEl.appendChild(row.modules.responsiveLayout.element);\r\n\t\t\tthis.generateCollapsedRowContent(row);\r\n\t\t}\r\n\t}\r\n\r\n\t//update column visibility\r\n\tupdateColumnVisibility(column, responsiveToggle){\r\n\t\tif(!responsiveToggle && column.modules.responsive){\r\n\t\t\tcolumn.modules.responsive.visible = column.visible;\r\n\t\t\tthis.initialize();\r\n\t\t}\r\n\r\n\t\t//this.update();\r\n\t}\r\n\r\n\thideColumn(column){\r\n\t\tvar colCount = this.hiddenColumns.length;\r\n\r\n\t\tcolumn.hide(false, true);\r\n\r\n\t\tif(this.mode === \"collapse\"){\r\n\t\t\tthis.hiddenColumns.unshift(column);\r\n\t\t\tthis.generateCollapsedContent();\r\n\r\n\t\t\tif(this.collapseHandleColumn && !colCount){\r\n\t\t\t\tthis.collapseHandleColumn.show();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tshowColumn(column){\r\n\t\tvar index;\r\n\r\n\t\tcolumn.show(false, true);\r\n\t\t//set column width to prevent calculation loops on uninitialized columns\r\n\t\tcolumn.setWidth(column.getWidth());\r\n\r\n\t\tif(this.mode === \"collapse\"){\r\n\t\t\tindex = this.hiddenColumns.indexOf(column);\r\n\r\n\t\t\tif(index > -1){\r\n\t\t\t\tthis.hiddenColumns.splice(index, 1);\r\n\t\t\t}\r\n\r\n\t\t\tthis.generateCollapsedContent();\r\n\r\n\t\t\tif(this.collapseHandleColumn && !this.hiddenColumns.length){\r\n\t\t\t\tthis.collapseHandleColumn.hide();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//redraw columns to fit space\r\n\tupdate(){\r\n\t\tvar self = this,\r\n\t\tworking = true;\r\n\r\n\t\twhile(working){\r\n\r\n\t\t\tlet width = self.table.modules.layout.getMode() == \"fitColumns\" ? self.table.columnManager.getFlexBaseWidth() : self.table.columnManager.getWidth();\r\n\r\n\t\t\tlet diff = (self.table.options.headerVisible ? self.table.columnManager.element.clientWidth : self.table.element.clientWidth) - width;\r\n\r\n\t\t\tif(diff < 0){\r\n\t\t\t\t//table is too wide\r\n\t\t\t\tlet column = self.columns[self.index];\r\n\r\n\t\t\t\tif(column){\r\n\t\t\t\t\tself.hideColumn(column);\r\n\t\t\t\t\tself.index ++;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tworking = false;\r\n\t\t\t\t}\r\n\r\n\t\t\t}else{\r\n\r\n\t\t\t\t//table has spare space\r\n\t\t\t\tlet column = self.columns[self.index -1];\r\n\r\n\t\t\t\tif(column){\r\n\t\t\t\t\tif(diff > 0){\r\n\t\t\t\t\t\tif(diff >= column.getWidth()){\r\n\t\t\t\t\t\t\tself.showColumn(column);\r\n\t\t\t\t\t\t\tself.index --;\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\tworking = false;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tworking = false;\r\n\t\t\t\t\t}\r\n\t\t\t\t}else{\r\n\t\t\t\t\tworking = false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif(!self.table.rowManager.activeRowsCount){\r\n\t\t\t\tself.table.rowManager.renderEmptyScroll();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tgenerateCollapsedContent(){\r\n\t\tvar self = this,\r\n\t\trows = this.table.rowManager.getDisplayRows();\r\n\r\n\t\trows.forEach(function(row){\r\n\t\t\tself.generateCollapsedRowContent(row);\r\n\t\t});\r\n\t}\r\n\r\n\tgenerateCollapsedRowContent(row){\r\n\t\tvar el, contents;\r\n\r\n\t\tif(row.modules.responsiveLayout){\r\n\t\t\tel = row.modules.responsiveLayout.element;\r\n\r\n\t\t\twhile(el.firstChild) el.removeChild(el.firstChild);\r\n\r\n\t\t\tcontents = this.collapseFormatter(this.generateCollapsedRowData(row));\r\n\t\t\tif(contents){\r\n\t\t\t\tel.appendChild(contents);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tgenerateCollapsedRowData(row){\r\n\t\tvar self = this,\r\n\t\tdata = row.getData(),\r\n\t\toutput = [],\r\n\t\tmockCellComponent;\r\n\r\n\t\tthis.hiddenColumns.forEach(function(column){\r\n\t\t\tvar value = column.getFieldValue(data);\r\n\r\n\t\t\tif(column.definition.title && column.field){\r\n\t\t\t\tif(column.modules.format && self.table.options.responsiveLayoutCollapseUseFormatters){\r\n\r\n\t\t\t\t\tmockCellComponent = {\r\n\t\t\t\t\t\tvalue:false,\r\n\t\t\t\t\t\tdata:{},\r\n\t\t\t\t\t\tgetValue:function(){\r\n\t\t\t\t\t\t\treturn value;\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tgetData:function(){\r\n\t\t\t\t\t\t\treturn data;\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tgetElement:function(){\r\n\t\t\t\t\t\t\treturn document.createElement(\"div\");\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tgetRow:function(){\r\n\t\t\t\t\t\t\treturn row.getComponent();\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tgetColumn:function(){\r\n\t\t\t\t\t\t\treturn column.getComponent();\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t};\r\n\r\n\t\t\t\t\toutput.push({\r\n\t\t\t\t\t\tfield: column.field,\r\n\t\t\t\t\t\ttitle: column.definition.title,\r\n\t\t\t\t\t\tvalue: column.modules.format.formatter.call(self.table.modules.format, mockCellComponent, column.modules.format.params)\r\n\t\t\t\t\t});\r\n\t\t\t\t}else{\r\n\t\t\t\t\toutput.push({\r\n\t\t\t\t\t\tfield: column.field,\r\n\t\t\t\t\t\ttitle: column.definition.title,\r\n\t\t\t\t\t\tvalue: value\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tformatCollapsedData(data){\r\n\t\tvar list = document.createElement(\"table\");\r\n\r\n\t\tdata.forEach(function(item){\r\n\t\t\tvar row = document.createElement(\"tr\");\r\n\t\t\tvar titleData = document.createElement(\"td\");\r\n\t\t\tvar valueData = document.createElement(\"td\");\r\n\t\t\tvar node_content;\r\n\r\n\t\t\tvar titleHighlight = document.createElement(\"strong\");\r\n\t\t\ttitleData.appendChild(titleHighlight);\r\n\t\t\tthis.langBind(\"columns|\" + item.field, function(text){\r\n\t\t\t\ttitleHighlight.innerText = text || item.title;\r\n\t\t\t});\r\n\r\n\t\t\tif(item.value instanceof Node){\r\n\t\t\t\tnode_content = document.createElement(\"div\");\r\n\t\t\t\tnode_content.appendChild(item.value);\r\n\t\t\t\tvalueData.appendChild(node_content);\r\n\t\t\t}else{\r\n\t\t\t\tvalueData.innerHTML = item.value;\r\n\t\t\t}\r\n\r\n\t\t\trow.appendChild(titleData);\r\n\t\t\trow.appendChild(valueData);\r\n\t\t\tlist.appendChild(row);\r\n\t\t}, this);\r\n\r\n\t\treturn Object.keys(data).length ? list : \"\";\r\n\t}\r\n}\r\n\r\nResponsiveLayout.moduleName = \"responsiveLayout\";\r\n\r\nexport default ResponsiveLayout;","import Module from '../../core/Module.js';\r\n\r\nclass SelectRow extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.selecting = false; //flag selecting in progress\r\n\t\tthis.lastClickedRow = false; //last clicked row\r\n\t\tthis.selectPrev = []; //hold previously selected element for drag drop selection\r\n\t\tthis.selectedRows = []; //hold selected rows\r\n\t\tthis.headerCheckboxElement = null; // hold header select element\r\n\r\n\t\tthis.registerTableOption(\"selectable\", \"highlight\"); //highlight rows on hover\r\n\t\tthis.registerTableOption(\"selectableRangeMode\", \"drag\"); //highlight rows on hover\r\n\t\tthis.registerTableOption(\"selectableRollingSelection\", true); //roll selection once maximum number of selectable rows is reached\r\n\t\tthis.registerTableOption(\"selectablePersistence\", true); // maintain selection when table view is updated\r\n\t\tthis.registerTableOption(\"selectableCheck\", function(data, row){return true;}); //check wheather row is selectable\r\n\r\n\t\tthis.registerTableFunction(\"selectRow\", this.selectRows.bind(this));\r\n\t\tthis.registerTableFunction(\"deselectRow\", this.deselectRows.bind(this));\r\n\t\tthis.registerTableFunction(\"toggleSelectRow\", this.toggleRow.bind(this));\r\n\t\tthis.registerTableFunction(\"getSelectedRows\", this.getSelectedRows.bind(this));\r\n\t\tthis.registerTableFunction(\"getSelectedData\", this.getSelectedData.bind(this));\r\n\r\n\t\t//register component functions\r\n\t\tthis.registerComponentFunction(\"row\", \"select\", this.selectRows.bind(this));\r\n\t\tthis.registerComponentFunction(\"row\", \"deselect\", this.deselectRows.bind(this));\r\n\t\tthis.registerComponentFunction(\"row\", \"toggleSelect\", this.toggleRow.bind(this));\r\n\t\tthis.registerComponentFunction(\"row\", \"isSelected\", this.isRowSelected.bind(this));\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tif(this.table.options.selectable !== false){\r\n\t\t\tthis.subscribe(\"row-init\", this.initializeRow.bind(this));\r\n\t\t\tthis.subscribe(\"row-deleting\", this.rowDeleted.bind(this));\r\n\t\t\tthis.subscribe(\"rows-wipe\", this.clearSelectionData.bind(this));\r\n\t\t\tthis.subscribe(\"rows-retrieve\", this.clearSelectionData.bind(this));\r\n\r\n\t\t\tif(this.table.options.selectable && this.table.options.selectablePersistence){\r\n\t\t\t\tthis.subscribe(\"data-refeshing\", this.deselectRows.bind(this));\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\trowRetrieve(type, prevValue){\r\n\t\treturn type === \"selected\" ? this.selectedRows : prevValue;\r\n\t}\r\n\r\n\trowDeleted(row){\r\n\t\tthis._deselectRow(row, true);\r\n\t}\r\n\r\n\r\n\tclearSelectionData(silent){\r\n\t\tthis.selecting = false;\r\n\t\tthis.lastClickedRow = false;\r\n\t\tthis.selectPrev = [];\r\n\t\tthis.selectedRows = [];\r\n\r\n\t\tif(silent !== true){\r\n\t\t\tthis._rowSelectionChanged();\r\n\t\t}\r\n\t}\r\n\r\n\tinitializeRow(row){\r\n\t\tvar self = this,\r\n\t\telement = row.getElement();\r\n\r\n\t\t// trigger end of row selection\r\n\t\tvar endSelect = function(){\r\n\r\n\t\t\tsetTimeout(function(){\r\n\t\t\t\tself.selecting = false;\r\n\t\t\t}, 50);\r\n\r\n\t\t\tdocument.body.removeEventListener(\"mouseup\", endSelect);\r\n\t\t};\r\n\r\n\t\trow.modules.select = {selected:false};\r\n\r\n\t\t//set row selection class\r\n\t\tif(self.table.options.selectableCheck.call(this.table, row.getComponent())){\r\n\t\t\telement.classList.add(\"tabulator-selectable\");\r\n\t\t\telement.classList.remove(\"tabulator-unselectable\");\r\n\r\n\t\t\tif(self.table.options.selectable && self.table.options.selectable != \"highlight\"){\r\n\t\t\t\tif(self.table.options.selectableRangeMode === \"click\"){\r\n\t\t\t\t\telement.addEventListener(\"click\", function(e){\r\n\t\t\t\t\t\tif(e.shiftKey){\r\n\t\t\t\t\t\t\tself.table._clearSelection();\r\n\t\t\t\t\t\t\tself.lastClickedRow = self.lastClickedRow || row;\r\n\r\n\t\t\t\t\t\t\tvar lastClickedRowIdx = self.table.rowManager.getDisplayRowIndex(self.lastClickedRow);\r\n\t\t\t\t\t\t\tvar rowIdx = self.table.rowManager.getDisplayRowIndex(row);\r\n\r\n\t\t\t\t\t\t\tvar fromRowIdx = lastClickedRowIdx <= rowIdx ? lastClickedRowIdx : rowIdx;\r\n\t\t\t\t\t\t\tvar toRowIdx = lastClickedRowIdx >= rowIdx ? lastClickedRowIdx : rowIdx;\r\n\r\n\t\t\t\t\t\t\tvar rows = self.table.rowManager.getDisplayRows().slice(0);\r\n\t\t\t\t\t\t\tvar toggledRows = rows.splice(fromRowIdx, toRowIdx - fromRowIdx + 1);\r\n\r\n\t\t\t\t\t\t\tif(e.ctrlKey || e.metaKey){\r\n\t\t\t\t\t\t\t\ttoggledRows.forEach(function(toggledRow){\r\n\t\t\t\t\t\t\t\t\tif(toggledRow !== self.lastClickedRow){\r\n\r\n\t\t\t\t\t\t\t\t\t\tif(self.table.options.selectable !== true && !self.isRowSelected(row)){\r\n\t\t\t\t\t\t\t\t\t\t\tif(self.selectedRows.length < self.table.options.selectable){\r\n\t\t\t\t\t\t\t\t\t\t\t\tself.toggleRow(toggledRow);\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\t\t\t\t\tself.toggleRow(toggledRow);\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\tself.lastClickedRow = row;\r\n\t\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\t\tself.deselectRows(undefined, true);\r\n\r\n\t\t\t\t\t\t\t\tif(self.table.options.selectable !== true){\r\n\t\t\t\t\t\t\t\t\tif(toggledRows.length > self.table.options.selectable){\r\n\t\t\t\t\t\t\t\t\t\ttoggledRows = toggledRows.slice(0, self.table.options.selectable)\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\tself.selectRows(toggledRows);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tself.table._clearSelection();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse if(e.ctrlKey || e.metaKey){\r\n\t\t\t\t\t\t\tself.toggleRow(row);\r\n\t\t\t\t\t\t\tself.lastClickedRow = row;\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\tself.deselectRows(undefined, true);\r\n\t\t\t\t\t\t\tself.selectRows(row);\r\n\t\t\t\t\t\t\tself.lastClickedRow = row;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t}else{\r\n\t\t\t\t\telement.addEventListener(\"click\", function(e){\r\n\t\t\t\t\t\tif(!self.table.modExists(\"edit\") || !self.table.modules.edit.getCurrentCell()){\r\n\t\t\t\t\t\t\tself.table._clearSelection();\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif(!self.selecting){\r\n\t\t\t\t\t\t\tself.toggleRow(row);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\telement.addEventListener(\"mousedown\", function(e){\r\n\t\t\t\t\t\tif(e.shiftKey){\r\n\t\t\t\t\t\t\tself.table._clearSelection();\r\n\r\n\t\t\t\t\t\t\tself.selecting = true;\r\n\r\n\t\t\t\t\t\t\tself.selectPrev = [];\r\n\r\n\t\t\t\t\t\t\tdocument.body.addEventListener(\"mouseup\", endSelect);\r\n\t\t\t\t\t\t\tdocument.body.addEventListener(\"keyup\", endSelect);\r\n\r\n\t\t\t\t\t\t\tself.toggleRow(row);\r\n\r\n\t\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\telement.addEventListener(\"mouseenter\", function(e){\r\n\t\t\t\t\t\tif(self.selecting){\r\n\t\t\t\t\t\t\tself.table._clearSelection();\r\n\t\t\t\t\t\t\tself.toggleRow(row);\r\n\r\n\t\t\t\t\t\t\tif(self.selectPrev[1] == row){\r\n\t\t\t\t\t\t\t\tself.toggleRow(self.selectPrev[0]);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\telement.addEventListener(\"mouseout\", function(e){\r\n\t\t\t\t\t\tif(self.selecting){\r\n\t\t\t\t\t\t\tself.table._clearSelection();\r\n\t\t\t\t\t\t\tself.selectPrev.unshift(row);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t}else{\r\n\t\t\telement.classList.add(\"tabulator-unselectable\");\r\n\t\t\telement.classList.remove(\"tabulator-selectable\");\r\n\t\t}\r\n\t}\r\n\r\n\t//toggle row selection\r\n\ttoggleRow(row){\r\n\t\tif(this.table.options.selectableCheck.call(this.table, row.getComponent())){\r\n\t\t\tif(row.modules.select && row.modules.select.selected){\r\n\t\t\t\tthis._deselectRow(row);\r\n\t\t\t}else{\r\n\t\t\t\tthis._selectRow(row);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//select a number of rows\r\n\tselectRows(rows){\r\n\t\tvar rowMatch;\r\n\r\n\t\tswitch(typeof rows){\r\n\t\t\tcase \"undefined\":\r\n\t\t\tthis.table.rowManager.rows.forEach((row) => {\r\n\t\t\t\tthis._selectRow(row, true, true);\r\n\t\t\t});\r\n\r\n\t\t\tthis._rowSelectionChanged();\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"string\":\r\n\r\n\t\t\trowMatch = this.table.rowManager.findRow(rows);\r\n\r\n\t\t\tif(rowMatch){\r\n\t\t\t\tthis._selectRow(rowMatch, true, true);\r\n\t\t\t}else{\r\n\t\t\t\tthis.table.rowManager.getRows(rows).forEach((row) => {\r\n\t\t\t\t\tthis._selectRow(row, true, true);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\tthis._rowSelectionChanged();\r\n\t\t\tbreak;\r\n\r\n\t\t\tdefault:\r\n\t\t\tif(Array.isArray(rows)){\r\n\t\t\t\trows.forEach((row) => {\r\n\t\t\t\t\tthis._selectRow(row, true, true);\r\n\t\t\t\t});\r\n\r\n\t\t\t\tthis._rowSelectionChanged();\r\n\t\t\t}else{\r\n\t\t\t\tthis._selectRow(rows, false, true);\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\t//select an individual row\r\n\t_selectRow(rowInfo, silent, force){\r\n\t\tvar index;\r\n\r\n\t\t//handle max row count\r\n\t\tif(!isNaN(this.table.options.selectable) && this.table.options.selectable !== true && !force){\r\n\t\t\tif(this.selectedRows.length >= this.table.options.selectable){\r\n\t\t\t\tif(this.table.options.selectableRollingSelection){\r\n\t\t\t\t\tthis._deselectRow(this.selectedRows[0]);\r\n\t\t\t\t}else{\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tvar row = this.table.rowManager.findRow(rowInfo);\r\n\r\n\t\tif(row){\r\n\t\t\tif(this.selectedRows.indexOf(row) == -1){\r\n\t\t\t\trow.getElement().classList.add(\"tabulator-selected\");\r\n\t\t\t\tif(!row.modules.select){\r\n\t\t\t\t\trow.modules.select = {};\r\n\t\t\t\t}\r\n\r\n\t\t\t\trow.modules.select.selected = true;\r\n\t\t\t\tif(row.modules.select.checkboxEl){\r\n\t\t\t\t\trow.modules.select.checkboxEl.checked = true;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.selectedRows.push(row);\r\n\r\n\t\t\t\tif(this.table.options.dataTreeSelectPropagate){\r\n\t\t\t\t\tthis.childRowSelection(row, true);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(!silent){\r\n\t\t\t\t\tthis.dispatchExternal(\"rowSelected\", row.getComponent());\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis._rowSelectionChanged(silent);\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tif(!silent){\r\n\t\t\t\tconsole.warn(\"Selection Error - No such row found, ignoring selection:\" + rowInfo);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tisRowSelected(row){\r\n\t\treturn this.selectedRows.indexOf(row) !== -1;\r\n\t}\r\n\r\n\t//deselect a number of rows\r\n\tdeselectRows(rows, silent){\r\n\t\tvar self = this,\r\n\t\trowCount;\r\n\r\n\t\tif(typeof rows == \"undefined\"){\r\n\r\n\t\t\trowCount = self.selectedRows.length;\r\n\r\n\t\t\tfor(let i = 0; i < rowCount; i++){\r\n\t\t\t\tself._deselectRow(self.selectedRows[0], true);\r\n\t\t\t}\r\n\r\n\t\t\tself._rowSelectionChanged(silent);\r\n\r\n\t\t}else{\r\n\t\t\tif(Array.isArray(rows)){\r\n\t\t\t\trows.forEach(function(row){\r\n\t\t\t\t\tself._deselectRow(row, true);\r\n\t\t\t\t});\r\n\r\n\t\t\t\tself._rowSelectionChanged(silent);\r\n\t\t\t}else{\r\n\t\t\t\tself._deselectRow(rows, silent);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//deselect an individual row\r\n\t_deselectRow(rowInfo, silent){\r\n\t\tvar self = this,\r\n\t\trow = self.table.rowManager.findRow(rowInfo),\r\n\t\tindex;\r\n\r\n\t\tif(row){\r\n\t\t\tindex = self.selectedRows.findIndex(function(selectedRow){\r\n\t\t\t\treturn selectedRow == row;\r\n\t\t\t});\r\n\r\n\t\t\tif(index > -1){\r\n\r\n\t\t\t\trow.getElement().classList.remove(\"tabulator-selected\");\r\n\t\t\t\tif(!row.modules.select){\r\n\t\t\t\t\trow.modules.select = {};\r\n\t\t\t\t}\r\n\r\n\t\t\t\trow.modules.select.selected = false;\r\n\t\t\t\tif(row.modules.select.checkboxEl){\r\n\t\t\t\t\trow.modules.select.checkboxEl.checked = false;\r\n\t\t\t\t}\r\n\t\t\t\tself.selectedRows.splice(index, 1);\r\n\r\n\t\t\t\tif(this.table.options.dataTreeSelectPropagate){\r\n\t\t\t\t\tthis.childRowSelection(row, false);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(!silent){\r\n\t\t\t\t\tthis.dispatchExternal(\"rowDeselected\", row.getComponent());\r\n\t\t\t\t}\r\n\r\n\t\t\t\tself._rowSelectionChanged(silent);\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tif(!silent){\r\n\t\t\t\tconsole.warn(\"Deselection Error - No such row found, ignoring selection:\" + rowInfo);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tgetSelectedData(){\r\n\t\tvar data = [];\r\n\r\n\t\tthis.selectedRows.forEach(function(row){\r\n\t\t\tdata.push(row.getData());\r\n\t\t});\r\n\r\n\t\treturn data;\r\n\t}\r\n\r\n\tgetSelectedRows(){\r\n\r\n\t\tvar rows = [];\r\n\r\n\t\tthis.selectedRows.forEach(function(row){\r\n\t\t\trows.push(row.getComponent());\r\n\t\t});\r\n\r\n\t\treturn rows;\r\n\t}\r\n\r\n\t_rowSelectionChanged(silent){\r\n\t\tif(this.headerCheckboxElement){\r\n\t\t\tif(this.selectedRows.length === 0){\r\n\t\t\t\tthis.headerCheckboxElement.checked = false;\r\n\t\t\t\tthis.headerCheckboxElement.indeterminate = false;\r\n\t\t\t} else if(this.table.rowManager.rows.length === this.selectedRows.length){\r\n\t\t\t\tthis.headerCheckboxElement.checked = true;\r\n\t\t\t\tthis.headerCheckboxElement.indeterminate = false;\r\n\t\t\t} else {\r\n\t\t\t\tthis.headerCheckboxElement.indeterminate = true;\r\n\t\t\t\tthis.headerCheckboxElement.checked = false;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(!silent){\r\n\t\t\tthis.dispatchExternal(\"rowSelectionChanged\", this.getSelectedData(), this.getSelectedRows());\r\n\t\t}\r\n\t}\r\n\r\n\tregisterRowSelectCheckbox (row, element) {\r\n\t\tif(!row._row.modules.select){\r\n\t\t\trow._row.modules.select = {};\r\n\t\t}\r\n\r\n\t\trow._row.modules.select.checkboxEl = element;\r\n\t}\r\n\r\n\tregisterHeaderSelectCheckbox (element) {\r\n\t\tthis.headerCheckboxElement = element;\r\n\t}\r\n\r\n\tchildRowSelection(row, select){\r\n\t\tvar children = this.table.modules.dataTree.getChildren(row, true);\r\n\r\n\t\tif(select){\r\n\t\t\tfor(let child of children){\r\n\t\t\t\tthis._selectRow(child, true);\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tfor(let child of children){\r\n\t\t\t\tthis._deselectRow(child, true);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n\r\nSelectRow.moduleName = \"selectRow\";\r\n\r\nexport default SelectRow;","//sort datetime\r\nexport default function(a, b, aRow, bRow, column, dir, params){\r\n\tvar format = params.format || \"DD/MM/YYYY HH:mm:ss\",\r\n\talignEmptyValues = params.alignEmptyValues,\r\n\temptyAlign = 0;\r\n\r\n\tif(typeof moment != \"undefined\"){\r\n\t\ta = moment(a, format);\r\n\t\tb = moment(b, format);\r\n\r\n\t\tif(!a.isValid()){\r\n\t\t\temptyAlign = !b.isValid() ? 0 : -1;\r\n\t\t}else if(!b.isValid()){\r\n\t\t\temptyAlign = 1;\r\n\t\t}else{\r\n\t\t\t//compare valid values\r\n\t\t\treturn a - b;\r\n\t\t}\r\n\r\n\t\t//fix empty values in position\r\n\t\tif((alignEmptyValues === \"top\" && dir === \"desc\") || (alignEmptyValues === \"bottom\" && dir === \"asc\")){\r\n\t\t\temptyAlign *= -1;\r\n\t\t}\r\n\r\n\t\treturn emptyAlign;\r\n\r\n\t}else{\r\n\t\tconsole.error(\"Sort Error - 'datetime' sorter is dependant on moment.js\");\r\n\t}\r\n};","import datetime from './datetime.js';\r\n\r\n//sort date\r\nexport default function(a, b, aRow, bRow, column, dir, params){\r\n\tif(!params.format){\r\n\t\tparams.format = \"DD/MM/YYYY\";\r\n\t}\r\n\r\n\treturn datetime.call(this, a, b, aRow, bRow, column, dir, params);\r\n};","//sort numbers\r\nexport default function(a, b, aRow, bRow, column, dir, params){\r\n\tvar alignEmptyValues = params.alignEmptyValues;\r\n\tvar decimal = params.decimalSeparator;\r\n\tvar thousand = params.thousandSeparator;\r\n\tvar emptyAlign = 0;\r\n\r\n\ta = String(a);\r\n\tb = String(b);\r\n\r\n\tif(thousand){\r\n\t\ta = a.split(thousand).join(\"\");\r\n\t\tb = b.split(thousand).join(\"\");\r\n\t}\r\n\r\n\tif(decimal){\r\n\t\ta = a.split(decimal).join(\".\");\r\n\t\tb = b.split(decimal).join(\".\");\r\n\t}\r\n\r\n\ta = parseFloat(a);\r\n\tb = parseFloat(b);\r\n\r\n\t//handle non numeric values\r\n\tif(isNaN(a)){\r\n\t\temptyAlign = isNaN(b) ? 0 : -1;\r\n\t}else if(isNaN(b)){\r\n\t\temptyAlign = 1;\r\n\t}else{\r\n\t\t//compare valid values\r\n\t\treturn a - b;\r\n\t}\r\n\r\n\t//fix empty values in position\r\n\tif((alignEmptyValues === \"top\" && dir === \"desc\") || (alignEmptyValues === \"bottom\" && dir === \"asc\")){\r\n\t\temptyAlign *= -1;\r\n\t}\r\n\r\n\treturn emptyAlign;\r\n};","import number from './sorters/number.js';\r\nimport string from './sorters/string.js';\r\nimport date from './sorters/date.js';\r\nimport time from './sorters/time.js';\r\nimport datetime from './sorters/datetime.js';\r\nimport boolean from './sorters/boolean.js';\r\nimport array from './sorters/array.js';\r\nimport exists from './sorters/exists.js';\r\nimport alphanum from './sorters/alphanum.js';\r\n\r\nexport default {\r\n\tnumber:number,\r\n\tstring:string,\r\n\tdate:date,\r\n\ttime:time,\r\n\tdatetime:datetime,\r\n\tboolean:boolean,\r\n\tarray:array,\r\n\texists:exists,\r\n\talphanum:alphanum\r\n};","//sort strings\r\nexport default function(a, b, aRow, bRow, column, dir, params){\r\n\tvar alignEmptyValues = params.alignEmptyValues;\r\n\tvar emptyAlign = 0;\r\n\tvar locale;\r\n\r\n\t//handle empty values\r\n\tif(!a){\r\n\t\temptyAlign = !b ? 0 : -1;\r\n\t}else if(!b){\r\n\t\temptyAlign = 1;\r\n\t}else{\r\n\t\t//compare valid values\r\n\t\tswitch(typeof params.locale){\r\n\t\t\tcase \"boolean\":\r\n\t\t\tif(params.locale){\r\n\t\t\t\tlocale = this.langLocale();\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\t\t\tcase \"string\":\r\n\t\t\tlocale = params.locale;\r\n\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\treturn String(a).toLowerCase().localeCompare(String(b).toLowerCase(), locale);\r\n\t}\r\n\r\n\t//fix empty values in position\r\n\tif((alignEmptyValues === \"top\" && dir === \"desc\") || (alignEmptyValues === \"bottom\" && dir === \"asc\")){\r\n\t\temptyAlign *= -1;\r\n\t}\r\n\r\n\treturn emptyAlign;\r\n};","import datetime from './datetime.js';\r\n\r\n//sort times\r\nexport default function(a, b, aRow, bRow, column, dir, params){\r\n\tif(!params.format){\r\n\t\tparams.format = \"HH:mm\";\r\n\t}\r\n\r\n\treturn datetime.call(this, a, b, aRow, bRow, column, dir, params);\r\n};","//sort booleans\r\nexport default function(a, b, aRow, bRow, column, dir, params){\r\n\tvar el1 = a === true || a === \"true\" || a === \"True\" || a === 1 ? 1 : 0;\r\n\tvar el2 = b === true || b === \"true\" || b === \"True\" || b === 1 ? 1 : 0;\r\n\r\n\treturn el1 - el2;\r\n};","import Module from '../../core/Module.js';\r\n\r\nimport defaultSorters from './defaults/sorters.js';\r\n\r\nclass Sort extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t \tthis.sortList = []; //holder current sort\r\n\t \tthis.changed = false; //has the sort changed since last render\r\n\r\n\t \tthis.registerTableOption(\"sortMode\", \"local\"); //local or remote sorting\r\n\r\n\t \tthis.registerTableOption(\"initialSort\", false); //initial sorting criteria\r\n\t \tthis.registerTableOption(\"columnHeaderSortMulti\", true); //multiple or single column sorting\r\n\t \tthis.registerTableOption(\"sortOrderReverse\", false); //reverse internal sort ordering\r\n\t \tthis.registerTableOption(\"headerSortElement\", \"
\"); //header sort element\r\n\r\n\t \tthis.registerColumnOption(\"sorter\");\r\n\t \tthis.registerColumnOption(\"sorterParams\");\r\n\r\n\t \tthis.registerColumnOption(\"headerSort\", true);\r\n\t \tthis.registerColumnOption(\"headerSortStartingDir\");\r\n\t \tthis.registerColumnOption(\"headerSortTristate\");\r\n\r\n\t }\r\n\r\n\t initialize(){\r\n\t \tthis.subscribe(\"column-layout\", this.initializeColumn.bind(this));\r\n\t \tthis.subscribe(\"table-built\", this.tableBuilt.bind(this));\r\n\t \tthis.registerDataHandler(this.sort.bind(this), 20);\r\n\r\n\t \tthis.registerTableFunction(\"setSort\", this.userSetSort.bind(this));\r\n\t \tthis.registerTableFunction(\"getSorters\", this.getSort.bind(this));\r\n\t \tthis.registerTableFunction(\"clearSort\", this.clearSort.bind(this));\r\n\r\n\t \tif(this.table.options.sortMode === \"remote\"){\r\n\t \t\tthis.subscribe(\"data-params\", this.remoteSortParams.bind(this));\r\n\t \t}\r\n\t }\r\n\r\n\t tableBuilt(){\r\n\t \tif(this.table.options.initialSort){\r\n\t \t\tthis.setSort(this.table.options.initialSort);\r\n\t \t}\r\n\t }\r\n\r\n\t remoteSortParams(data, config, silent, params){\r\n\t \tvar sorters = this.getSort();\r\n\r\n\t \tsorters.forEach((item) => {\r\n\t \t\tdelete item.column;\r\n\t \t});\r\n\r\n\t \tparams.sort = sorters;\r\n\r\n\t \treturn params;\r\n\t }\r\n\r\n\r\n\t///////////////////////////////////\r\n\t///////// Table Functions /////////\r\n\t///////////////////////////////////\r\n\r\n\tuserSetSort(sortList, dir){\r\n\t\tthis.setSort(sortList, dir);\r\n\t\t// this.table.rowManager.sorterRefresh();\r\n\t\tthis.refreshSort();\r\n\t}\r\n\r\n\tclearSort(){\r\n\t\tthis.clear();\r\n\t\t// this.table.rowManager.sorterRefresh();\r\n\t\tthis.refreshSort();\r\n\t}\r\n\r\n\r\n\t///////////////////////////////////\r\n\t///////// Internal Logic //////////\r\n\t///////////////////////////////////\r\n\r\n\t//initialize column header for sorting\r\n\tinitializeColumn(column){\r\n\t\tvar sorter = false,\r\n\t\tcolEl,\r\n\t\tarrowEl;\r\n\r\n\t\tswitch(typeof column.definition.sorter){\r\n\t\t\tcase \"string\":\r\n\t\t\tif(Sort.sorters[column.definition.sorter]){\r\n\t\t\t\tsorter = Sort.sorters[column.definition.sorter];\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Sort Error - No such sorter found: \", column.definition.sorter);\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"function\":\r\n\t\t\tsorter = column.definition.sorter;\r\n\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\tcolumn.modules.sort = {\r\n\t\t\tsorter:sorter, dir:\"none\",\r\n\t\t\tparams:column.definition.sorterParams || {},\r\n\t\t\tstartingDir:column.definition.headerSortStartingDir || \"asc\",\r\n\t\t\ttristate: column.definition.headerSortTristate,\r\n\t\t};\r\n\r\n\t\tif(column.definition.headerSort !== false){\r\n\r\n\t\t\tcolEl = column.getElement();\r\n\r\n\t\t\tcolEl.classList.add(\"tabulator-sortable\");\r\n\r\n\r\n\t\t\tarrowEl = document.createElement(\"div\");\r\n\t\t\tarrowEl.classList.add(\"tabulator-col-sorter\");\r\n\r\n\t\t\tif(typeof this.table.options.headerSortElement == \"object\"){\r\n\t\t\t\tarrowEl.appendChild(this.table.options.headerSortElement);\r\n\t\t\t}else{\r\n\t\t\t\tarrowEl.innerHTML = this.table.options.headerSortElement;\r\n\t\t\t}\r\n\r\n\t\t\t//create sorter arrow\r\n\t\t\tcolumn.titleHolderElement.appendChild(arrowEl);\r\n\r\n\t\t\tcolumn.modules.sort.element = arrowEl;\r\n\r\n\t\t\t//sort on click\r\n\t\t\tcolEl.addEventListener(\"click\", (e) => {\r\n\t\t\t\tvar dir = \"\",\r\n\t\t\t\tsorters=[],\r\n\t\t\t\tmatch = false;\r\n\r\n\t\t\t\tif(column.modules.sort){\r\n\t\t\t\t\tif(column.modules.sort.tristate){\r\n\t\t\t\t\t\tif(column.modules.sort.dir == \"none\"){\r\n\t\t\t\t\t\t\tdir = column.modules.sort.startingDir;\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\tif(column.modules.sort.dir == column.modules.sort.startingDir){\r\n\t\t\t\t\t\t\t\tdir = column.modules.sort.dir == \"asc\" ? \"desc\" : \"asc\";\r\n\t\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\t\tdir = \"none\";\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tswitch(column.modules.sort.dir){\r\n\t\t\t\t\t\t\tcase \"asc\":\r\n\t\t\t\t\t\t\tdir = \"desc\";\r\n\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\t\tcase \"desc\":\r\n\t\t\t\t\t\t\tdir = \"asc\";\r\n\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\t\tdefault:\r\n\t\t\t\t\t\t\tdir = column.modules.sort.startingDir;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\r\n\t\t\t\t\tif (this.table.options.columnHeaderSortMulti && (e.shiftKey || e.ctrlKey)) {\r\n\t\t\t\t\t\tsorters = this.getSort();\r\n\r\n\t\t\t\t\t\tmatch = sorters.findIndex((sorter) => {\r\n\t\t\t\t\t\t\treturn sorter.field === column.getField();\r\n\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\tif(match > -1){\r\n\t\t\t\t\t\t\tsorters[match].dir = dir;\r\n\r\n\t\t\t\t\t\t\tif(match != sorters.length -1){\r\n\t\t\t\t\t\t\t\tmatch = sorters.splice(match, 1)[0];\r\n\t\t\t\t\t\t\t\tif(dir != \"none\"){\r\n\t\t\t\t\t\t\t\t\tsorters.push(match);\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\tif(dir != \"none\"){\r\n\t\t\t\t\t\t\t\tsorters.push({column:column, dir:dir});\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t//add to existing sort\r\n\t\t\t\t\t\tthis.setSort(sorters);\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tif(dir == \"none\"){\r\n\t\t\t\t\t\t\tthis.clear();\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\t//sort by column only\r\n\t\t\t\t\t\t\tthis.setSort(column, dir);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// this.table.rowManager.sorterRefresh(!this.sortList.length);\r\n\t\t\t\t\tthis.refreshSort();\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\trefreshSort(){\r\n\t\tif(this.table.options.sortMode === \"remote\"){\r\n\t\t\tthis.reloadData();\r\n\t\t}else{\r\n\t\t\tthis.refreshData()\r\n\t\t}\r\n\r\n\t\t//TODO - Persist left position of row manager\r\n\t\t// left = this.scrollLeft;\r\n\t\t// this.scrollHorizontal(left);\r\n\t}\r\n\r\n\t//check if the sorters have changed since last use\r\n\thasChanged(){\r\n\t\tvar changed = this.changed;\r\n\t\tthis.changed = false;\r\n\t\treturn changed;\r\n\t}\r\n\r\n\t//return current sorters\r\n\tgetSort(){\r\n\t\tvar self = this,\r\n\t\tsorters = [];\r\n\r\n\t\tself.sortList.forEach(function(item){\r\n\t\t\tif(item.column){\r\n\t\t\t\tsorters.push({column:item.column.getComponent(), field:item.column.getField(), dir:item.dir});\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn sorters;\r\n\t}\r\n\r\n\t//change sort list and trigger sort\r\n\tsetSort(sortList, dir){\r\n\t\tvar self = this,\r\n\t\tnewSortList = [];\r\n\r\n\t\tif(!Array.isArray(sortList)){\r\n\t\t\tsortList = [{column: sortList, dir:dir}];\r\n\t\t}\r\n\r\n\t\tsortList.forEach(function(item){\r\n\t\t\tvar column;\r\n\r\n\t\t\tcolumn = self.table.columnManager.findColumn(item.column);\r\n\r\n\t\t\tif(column){\r\n\t\t\t\titem.column = column;\r\n\t\t\t\tnewSortList.push(item);\r\n\t\t\t\tself.changed = true;\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Sort Warning - Sort field does not exist and is being ignored: \", item.column);\r\n\t\t\t}\r\n\r\n\t\t});\r\n\r\n\t\tself.sortList = newSortList;\r\n\r\n\t\tthis.dispatch(\"sort-changed\");\r\n\t}\r\n\r\n\t//clear sorters\r\n\tclear(){\r\n\t\tthis.setSort([]);\r\n\t}\r\n\r\n\t//find appropriate sorter for column\r\n\tfindSorter(column){\r\n\t\tvar row = this.table.rowManager.activeRows[0],\r\n\t\tsorter = \"string\",\r\n\t\tfield, value;\r\n\r\n\t\tif(row){\r\n\t\t\trow = row.getData();\r\n\t\t\tfield = column.getField();\r\n\r\n\t\t\tif(field){\r\n\r\n\t\t\t\tvalue = column.getFieldValue(row);\r\n\r\n\t\t\t\tswitch(typeof value){\r\n\t\t\t\t\tcase \"undefined\":\r\n\t\t\t\t\tsorter = \"string\";\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase \"boolean\":\r\n\t\t\t\t\tsorter = \"boolean\";\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tdefault:\r\n\t\t\t\t\tif(!isNaN(value) && value !== \"\"){\r\n\t\t\t\t\t\tsorter = \"number\";\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tif(value.match(/((^[0-9]+[a-z]+)|(^[a-z]+[0-9]+))+$/i)){\r\n\t\t\t\t\t\t\tsorter = \"alphanum\";\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn Sort.sorters[sorter];\r\n\t}\r\n\r\n\t//work through sort list sorting data\r\n\tsort(data){\r\n\t\tvar self = this,\r\n\t\tsortList = this.table.options.sortOrderReverse ? self.sortList.slice().reverse() : self.sortList,\r\n\t\tsortListActual = [],\r\n\t\trowComponents = [],\r\n\t\tlastSort;\r\n\r\n\t\tif(this.subscribedExternal(\"dataSorting\")){\r\n\t\t\tthis.dispatchExternal(\"dataSorting\", self.getSort());\r\n\t\t}\r\n\r\n\t\tself.clearColumnHeaders();\r\n\r\n\t\tif(this.table.options.sortMode !== \"remote\"){\r\n\r\n\t\t\t//build list of valid sorters and trigger column specific callbacks before sort begins\r\n\t\t\tsortList.forEach(function(item, i){\r\n\t\t\t\tvar sortObj = item.column.modules.sort;\r\n\r\n\t\t\t\tif(item.column && sortObj){\r\n\r\n\t\t\t\t\t//if no sorter has been defined, take a guess\r\n\t\t\t\t\tif(!sortObj.sorter){\r\n\t\t\t\t\t\tsortObj.sorter = self.findSorter(item.column);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\titem.params = typeof sortObj.params === \"function\" ? sortObj.params(item.column.getComponent(), item.dir) : sortObj.params;\r\n\r\n\t\t\t\t\tsortListActual.push(item);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tself.setColumnHeader(item.column, item.dir);\r\n\t\t\t});\r\n\r\n\t\t\t//sort data\r\n\t\t\tif (sortListActual.length) {\r\n\t\t\t\tself._sortItems(data, sortListActual);\r\n\t\t\t}\r\n\r\n\t\t}else{\r\n\t\t\tsortList.forEach(function(item, i){\r\n\t\t\t\tself.setColumnHeader(item.column, item.dir);\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif(this.subscribedExternal(\"dataSorted\")){\r\n\t\t\tdata.forEach((row) => {\r\n\t\t\t\trowComponents.push(row.getComponent());\r\n\t\t\t});\r\n\r\n\t\t\tthis.dispatchExternal(\"dataSorted\", self.getSort(), rowComponents);\r\n\t\t}\r\n\t}\r\n\r\n\t//clear sort arrows on columns\r\n\tclearColumnHeaders(){\r\n\t\tthis.table.columnManager.getRealColumns().forEach(function(column){\r\n\t\t\tif(column.modules.sort){\r\n\t\t\t\tcolumn.modules.sort.dir = \"none\";\r\n\t\t\t\tcolumn.getElement().setAttribute(\"aria-sort\", \"none\");\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t//set the column header sort direction\r\n\tsetColumnHeader(column, dir){\r\n\t\tcolumn.modules.sort.dir = dir;\r\n\t\tcolumn.getElement().setAttribute(\"aria-sort\", dir);\r\n\t}\r\n\r\n\t//sort each item in sort list\r\n\t_sortItems(data, sortList){\r\n\t\tvar sorterCount = sortList.length - 1;\r\n\r\n\t\tdata.sort((a, b) => {\r\n\t\t\tvar result;\r\n\r\n\t\t\tfor(var i = sorterCount; i>= 0; i--){\r\n\t\t\t\tlet sortItem = sortList[i];\r\n\r\n\t\t\t\tresult = this._sortRow(a, b, sortItem.column, sortItem.dir, sortItem.params);\r\n\r\n\t\t\t\tif(result !== 0){\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn result;\r\n\t\t});\r\n\t}\r\n\r\n\t//process individual rows for a sort function on active data\r\n\t_sortRow(a, b, column, dir, params){\r\n\t\tvar el1Comp, el2Comp, colComp;\r\n\r\n\t\t//switch elements depending on search direction\r\n\t\tvar el1 = dir == \"asc\" ? a : b;\r\n\t\tvar el2 = dir == \"asc\" ? b : a;\r\n\r\n\t\ta = column.getFieldValue(el1.getData());\r\n\t\tb = column.getFieldValue(el2.getData());\r\n\r\n\t\ta = typeof a !== \"undefined\" ? a : \"\";\r\n\t\tb = typeof b !== \"undefined\" ? b : \"\";\r\n\r\n\t\tel1Comp = el1.getComponent();\r\n\t\tel2Comp = el2.getComponent();\r\n\r\n\t\treturn column.modules.sort.sorter.call(this, a, b, el1Comp, el2Comp, column.getComponent(), dir, params);\r\n\t}\r\n}\r\n\r\nSort.moduleName = \"sort\";\r\n\r\n//load defaults\r\nSort.sorters = defaultSorters;\r\n\r\nexport default Sort;","//sort if element contains any data\r\nexport default function(a, b, aRow, bRow, column, dir, params){\r\n\tvar el1 = 0;\r\n\tvar el2 = 0;\r\n\tvar type = params.type || \"length\";\r\n\tvar alignEmptyValues = params.alignEmptyValues;\r\n\tvar emptyAlign = 0;\r\n\r\n\tfunction calc(value){\r\n\r\n\t\tswitch(type){\r\n\t\t\tcase \"length\":\r\n\t\t\treturn value.length;\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"sum\":\r\n\t\t\treturn value.reduce(function(c, d){\r\n\t\t\t\treturn c + d;\r\n\t\t\t});\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"max\":\r\n\t\t\treturn Math.max.apply(null, value) ;\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"min\":\r\n\t\t\treturn Math.min.apply(null, value) ;\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"avg\":\r\n\t\t\treturn value.reduce(function(c, d){\r\n\t\t\t\treturn c + d;\r\n\t\t\t}) / value.length;\r\n\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\t//handle non array values\r\n\tif(!Array.isArray(a)){\r\n\t\talignEmptyValues = !Array.isArray(b) ? 0 : -1;\r\n\t}else if(!Array.isArray(b)){\r\n\t\talignEmptyValues = 1;\r\n\t}else{\r\n\r\n\t\t//compare valid values\r\n\t\tel1 = a ? calc(a) : 0;\r\n\t\tel2 = b ? calc(b) : 0;\r\n\r\n\t\treturn el1 - el2;\r\n\t}\r\n\r\n\t//fix empty values in position\r\n\tif((alignEmptyValues === \"top\" && dir === \"desc\") || (alignEmptyValues === \"bottom\" && dir === \"asc\")){\r\n\t\temptyAlign *= -1;\r\n\t}\r\n\r\n\treturn emptyAlign;\r\n};","//sort if element contains any data\r\nexport default function(a, b, aRow, bRow, column, dir, params){\r\n\tvar el1 = typeof a == \"undefined\" ? 0 : 1;\r\n\tvar el2 = typeof b == \"undefined\" ? 0 : 1;\r\n\r\n\treturn el1 - el2;\r\n};","//sort alpha numeric strings\r\nexport default function(as, bs, aRow, bRow, column, dir, params){\r\n\tvar a, b, a1, b1, i= 0, L, rx = /(\\d+)|(\\D+)/g, rd = /\\d/;\r\n\tvar alignEmptyValues = params.alignEmptyValues;\r\n\tvar emptyAlign = 0;\r\n\r\n\t//handle empty values\r\n\tif(!as && as!== 0){\r\n\t\temptyAlign = !bs && bs!== 0 ? 0 : -1;\r\n\t}else if(!bs && bs!== 0){\r\n\t\temptyAlign = 1;\r\n\t}else{\r\n\r\n\t\tif(isFinite(as) && isFinite(bs)) return as - bs;\r\n\t\ta = String(as).toLowerCase();\r\n\t\tb = String(bs).toLowerCase();\r\n\t\tif(a === b) return 0;\r\n\t\tif(!(rd.test(a) && rd.test(b))) return a > b ? 1 : -1;\r\n\t\ta = a.match(rx);\r\n\t\tb = b.match(rx);\r\n\t\tL = a.length > b.length ? b.length : a.length;\r\n\t\twhile(i < L){\r\n\t\t\ta1= a[i];\r\n\t\t\tb1= b[i++];\r\n\t\t\tif(a1 !== b1){\r\n\t\t\t\tif(isFinite(a1) && isFinite(b1)){\r\n\t\t\t\t\tif(a1.charAt(0) === \"0\") a1 = \".\" + a1;\r\n\t\t\t\t\tif(b1.charAt(0) === \"0\") b1 = \".\" + b1;\r\n\t\t\t\t\treturn a1 - b1;\r\n\t\t\t\t}\r\n\t\t\t\telse return a1 > b1 ? 1 : -1;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn a.length > b.length;\r\n\t}\r\n\r\n\t//fix empty values in position\r\n\tif((alignEmptyValues === \"top\" && dir === \"desc\") || (alignEmptyValues === \"bottom\" && dir === \"asc\")){\r\n\t\temptyAlign *= -1;\r\n\t}\r\n\r\n\treturn emptyAlign;\r\n};","export default {\r\n\t//is integer\r\n\tinteger: function(cell, value, parameters){\r\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\tvalue = Number(value);\r\n\t\treturn typeof value === 'number' && isFinite(value) && Math.floor(value) === value;\r\n\t},\r\n\r\n\t//is float\r\n\tfloat: function(cell, value, parameters){\r\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\tvalue = Number(value);\r\n\t\treturn typeof value === 'number' && isFinite(value) && value % 1 !== 0;\r\n\t},\r\n\r\n\t//must be a number\r\n\tnumeric: function(cell, value, parameters){\r\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn !isNaN(value);\r\n\t},\r\n\r\n\t//must be a string\r\n\tstring: function(cell, value, parameters){\r\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn isNaN(value);\r\n\t},\r\n\r\n\t//maximum value\r\n\tmax: function(cell, value, parameters){\r\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn parseFloat(value) <= parameters;\r\n\t},\r\n\r\n\t//minimum value\r\n\tmin: function(cell, value, parameters){\r\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn parseFloat(value) >= parameters;\r\n\t},\r\n\r\n\t//starts with value\r\n\tstarts: function(cell, value, parameters){\r\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn String(value).toLowerCase().startsWith(String(parameters).toLowerCase());\r\n\t},\r\n\r\n\t//ends with value\r\n\tends: function(cell, value, parameters){\r\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn String(value).toLowerCase().endsWith(String(parameters).toLowerCase());\r\n\t},\r\n\r\n\r\n\t//minimum string length\r\n\tminLength: function(cell, value, parameters){\r\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn String(value).length >= parameters;\r\n\t},\r\n\r\n\t//maximum string length\r\n\tmaxLength: function(cell, value, parameters){\r\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn String(value).length <= parameters;\r\n\t},\r\n\r\n\t//in provided value list\r\n\tin: function(cell, value, parameters){\r\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\tif(typeof parameters == \"string\"){\r\n\t\t\tparameters = parameters.split(\"|\");\r\n\t\t}\r\n\r\n\t\treturn value === \"\" || parameters.indexOf(value) > -1;\r\n\t},\r\n\r\n\t//must match provided regex\r\n\tregex: function(cell, value, parameters){\r\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\tvar reg = new RegExp(parameters);\r\n\r\n\t\treturn reg.test(value);\r\n\t},\r\n\r\n\t//value must be unique in this column\r\n\tunique: function(cell, value, parameters){\r\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\tvar unique = true;\r\n\r\n\t\tvar cellData = cell.getData();\r\n\t\tvar column = cell.getColumn()._getSelf();\r\n\r\n\t\tthis.table.rowManager.rows.forEach(function(row){\r\n\t\t\tvar data = row.getData();\r\n\r\n\t\t\tif(data !== cellData){\r\n\t\t\t\tif(value == column.getFieldValue(data)){\r\n\t\t\t\t\tunique = false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn unique;\r\n\t},\r\n\r\n\t//must have a value\r\n\trequired:function(cell, value, parameters){\r\n\t\treturn value !== \"\" && value !== null && typeof value !== \"undefined\";\r\n\t},\r\n};","import Module from '../../core/Module.js';\r\n\r\nimport defaultValidators from './defaults/validators.js';\r\n\r\nclass Validate extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.invalidCells = [];\r\n\r\n\t\tthis.registerTableOption(\"validationMode\", \"blocking\");\r\n\r\n\t\tthis.registerColumnOption(\"validator\");\r\n\r\n\t\tthis.registerTableFunction(\"getInvalidCells\", this.getInvalidCells.bind(this));\r\n\t\tthis.registerTableFunction(\"clearCellValidation\", this.userClearCellValidation.bind(this));\r\n\t\tthis.registerTableFunction(\"validate\", this.userValidate.bind(this));\r\n\r\n\t\tthis.registerComponentFunction(\"cell\", \"isValid\", this.cellIsValid.bind(this));\r\n\t\tthis.registerComponentFunction(\"cell\", \"clearValidation\", this.clearValidation.bind(this));\r\n\t\tthis.registerComponentFunction(\"cell\", \"validate\", this.cellValidate.bind(this));\r\n\r\n\t\tthis.registerComponentFunction(\"column\", \"validate\", this.columnValidate.bind(this));\r\n\t\tthis.registerComponentFunction(\"row\", \"validate\", this.rowValidate.bind(this));\r\n\t}\r\n\r\n\r\n\tinitialize(){\r\n\t\tthis.subscribe(\"cell-delete\", this.clearValidation.bind(this));\r\n\t\tthis.subscribe(\"column-layout\", this.initializeColumnCheck.bind(this));\r\n\t}\r\n\r\n\t///////////////////////////////////\r\n\t////////// Cell Functions /////////\r\n\t///////////////////////////////////\r\n\r\n\tcellIsValid(cell){\r\n\t\treturn cell.modules.validate ? !cell.modules.validate.invalid : true;\r\n\t}\r\n\r\n\tcellValidate(cell){\r\n\t\treturn this.validate(cell.column.modules.validate, cell, cell.getValue());\r\n\t}\r\n\r\n\t///////////////////////////////////\r\n\t///////// Column Functions ////////\r\n\t///////////////////////////////////\r\n\r\n\tcolumnValidate(column){\r\n\t\tvar invalid = [];\r\n\r\n\t\tcolumn.cells.forEach(function(cell){\r\n\t\t\tif(!this.cellValidate(cell)){\r\n\t\t\t\tinvalid.push(cell.getComponent());\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn invalid.length ? invalid : true;\r\n\t}\r\n\r\n\t///////////////////////////////////\r\n\t////////// Row Functions //////////\r\n\t///////////////////////////////////\r\n\r\n\trowValidate(row){\r\n\t\tvar invalid = [];\r\n\r\n\t\trow.cells.forEach(function(cell){\r\n\t\t\tif(!this.cellValidate(cell)){\r\n\t\t\t\tinvalid.push(cell.getComponent());\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn invalid.length ? invalid : true;\r\n\t}\r\n\r\n\t///////////////////////////////////\r\n\t///////// Table Functions /////////\r\n\t///////////////////////////////////\r\n\r\n\r\n\tuserClearCellValidation(cells){\r\n\t\tif(!cells){\r\n\t\t\tcells = this.getInvalidCells();\r\n\t\t}\r\n\r\n\t\tif(!Array.isArray(cells)){\r\n\t\t\tcells = [cells];\r\n\t\t}\r\n\r\n\t\tcells.forEach((cell) => {\r\n\t\t\tthis.clearValidation(cell._getSelf());\r\n\t\t});\r\n\t}\r\n\r\n\tuserValidate(cells){\r\n\t\tvar output = [];\r\n\r\n\t\t//clear row data\r\n\t\tthis.table.rowManager.rows.forEach(function(row){\r\n\t\t\tvar valid = row.validate();\r\n\r\n\t\t\tif(valid !== true){\r\n\t\t\t\toutput = output.concat(valid);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn output.length ? output : true;\r\n\t}\r\n\r\n\t///////////////////////////////////\r\n\t///////// Internal Logic //////////\r\n\t///////////////////////////////////\r\n\r\n\tinitializeColumnCheck(column){\r\n\t\tif(typeof column.definition.validator !== \"undefined\"){\r\n\t\t\tthis.initializeColumn(column);\r\n\t\t}\r\n\t}\r\n\r\n\t//validate\r\n\tinitializeColumn(column){\r\n\t\tvar self = this,\r\n\t\tconfig = [],\r\n\t\tvalidator;\r\n\r\n\t\tif(column.definition.validator){\r\n\r\n\t\t\tif(Array.isArray(column.definition.validator)){\r\n\t\t\t\tcolumn.definition.validator.forEach(function(item){\r\n\t\t\t\t\tvalidator = self._extractValidator(item);\r\n\r\n\t\t\t\t\tif(validator){\r\n\t\t\t\t\t\tconfig.push(validator);\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t}else{\r\n\t\t\t\tvalidator = this._extractValidator(column.definition.validator);\r\n\r\n\t\t\t\tif(validator){\r\n\t\t\t\t\tconfig.push(validator);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tcolumn.modules.validate = config.length ? config : false;\r\n\t\t}\r\n\t}\r\n\r\n\t_extractValidator(value){\r\n\t\tvar type, params, pos;\r\n\r\n\t\tswitch(typeof value){\r\n\t\t\tcase \"string\":\r\n\t\t\tpos = value.indexOf(':');\r\n\r\n\t\t\tif(pos > -1){\r\n\t\t\t\ttype = value.substring(0,pos);\r\n\t\t\t\tparams = value.substring(pos+1);\r\n\t\t\t}else{\r\n\t\t\t\ttype = value;\r\n\t\t\t}\r\n\r\n\t\t\treturn this._buildValidator(type, params);\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"function\":\r\n\t\t\treturn this._buildValidator(value);\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"object\":\r\n\t\t\treturn this._buildValidator(value.type, value.parameters);\r\n\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\t_buildValidator(type, params){\r\n\r\n\t\tvar func = typeof type == \"function\" ? type : Validate.validators[type];\r\n\r\n\t\tif(!func){\r\n\t\t\tconsole.warn(\"Validator Setup Error - No matching validator found:\", type);\r\n\t\t\treturn false;\r\n\t\t}else{\r\n\t\t\treturn {\r\n\t\t\t\ttype:typeof type == \"function\" ? \"function\" : type,\r\n\t\t\t\tfunc:func,\r\n\t\t\t\tparams:params,\r\n\t\t\t};\r\n\t\t}\r\n\t}\r\n\r\n\tvalidate(validators, cell, value){\r\n\t\tvar self = this,\r\n\t\tvalid = [],\r\n\t\tinvalidIndex = this.invalidCells.indexOf(cell);\r\n\r\n\t\tif(validators){\r\n\t\t\tvalidators.forEach(function(item){\r\n\t\t\t\tif(!item.func.call(self, cell.getComponent(), value, item.params)){\r\n\t\t\t\t\tvalid.push({\r\n\t\t\t\t\t\ttype:item.type,\r\n\t\t\t\t\t\tparameters:item.params\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tvalid = valid.length ? valid : true;\r\n\r\n\t\tif(!cell.modules.validate){\r\n\t\t\tcell.modules.validate = {};\r\n\t\t}\r\n\r\n\t\tif(valid === true){\r\n\t\t\tcell.modules.validate.invalid = false;\r\n\t\t\tcell.getElement().classList.remove(\"tabulator-validation-fail\");\r\n\r\n\t\t\tif(invalidIndex > -1){\r\n\t\t\t\tthis.invalidCells.splice(invalidIndex, 1);\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tcell.modules.validate.invalid = true;\r\n\r\n\t\t\tif(this.table.options.validationMode !== \"manual\"){\r\n\t\t\t\tcell.getElement().classList.add(\"tabulator-validation-fail\");\r\n\t\t\t}\r\n\r\n\t\t\tif(invalidIndex == -1){\r\n\t\t\t\tthis.invalidCells.push(cell);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn valid;\r\n\t}\r\n\r\n\tgetInvalidCells(){\r\n\t\tvar output = [];\r\n\r\n\t\tthis.invalidCells.forEach((cell) => {\r\n\t\t\toutput.push(cell.getComponent());\r\n\t\t});\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tclearValidation(cell){\r\n\t\tvar invalidIndex;\r\n\r\n\t\tif(cell.modules.validate && cell.modules.validate.invalid){\r\n\r\n\t\t\tcell.getElement().classList.remove(\"tabulator-validation-fail\");\r\n\t\t\tcell.modules.validate.invalid = false;\r\n\r\n\t\t\tinvalidIndex = this.invalidCells.indexOf(cell);\r\n\r\n\t\t\tif(invalidIndex > -1){\r\n\t\t\t\tthis.invalidCells.splice(invalidIndex, 1);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n\r\nValidate.moduleName = \"validate\";\r\n\r\n//load defaults\r\nValidate.validators = defaultValidators;\r\n\r\nexport default Validate;","export default {\r\n\r\n\tdebugEventsExternal:false, //flag to console log events\r\n\tdebugEventsInternal:false, //flag to console log events\r\n\tdebugInvalidOptions:true, //allow toggling of invalid option warnings\r\n\r\n\theight:false, //height of tabulator\r\n\tminHeight:false, //minimum height of tabulator\r\n\tmaxHeight:false, //maximum height of tabulator\r\n\r\n\tcolumnMaxWidth:false, //minimum global width for a column\r\n\tcolumnHeaderVertAlign:\"top\", //vertical alignment of column headers\r\n\r\n\tcolumns:[],//store for colum header info\r\n\tcolumnDefaults:{}, //store column default props\r\n\r\n\tdata:false, //default starting data\r\n\r\n\tautoColumns:false, //build columns from data row structure\r\n\tautoColumnsDefinitions:false,\r\n\r\n\tnestedFieldSeparator:\".\", //seperatpr for nested data\r\n\r\n\ttooltipGenerationMode:\"load\", //when to generate tooltips\r\n\r\n\tfooterElement:false, //hold footer element\r\n\r\n\tindex:\"id\", //filed for row index\r\n\r\n\ttextDirection:\"auto\",\r\n\r\n\taddRowPos:\"bottom\", //position to insert blank rows, top|bottom\r\n\r\n\theaderVisible:true, //hide header\r\n\r\n\trenderVertical:\"virtual\",\r\n\trenderHorizontal:\"basic\",\r\n\trenderVerticalBuffer:0, // set virtual DOM buffer size\r\n\r\n\tscrollToRowPosition:\"top\",\r\n\tscrollToRowIfVisible:true,\r\n\r\n\tscrollToColumnPosition:\"left\",\r\n\tscrollToColumnIfVisible:true,\r\n\r\n\trowFormatter:false,\r\n\trowFormatterPrint:null,\r\n\trowFormatterClipboard:null,\r\n\trowFormatterHtmlOutput:null,\r\n\r\n\tplaceholder:false,\r\n\r\n\tdataLoader:true,\r\n\tdataLoaderLoading:false,\r\n\tdataLoaderError:false,\r\n\r\n\tdataSendParams:{},\r\n\r\n\tdataReceiveParams:{},\r\n}","export default class OptionsList {\r\n\tconstructor(table, msgType){\r\n\t\tthis.table = table;\r\n\t\tthis.msgType = msgType;\r\n\t\tthis.registeredDefaults = {};\r\n\t}\r\n\r\n\tregister(option, value){\r\n\t\tthis.registeredDefaults[option] = value;\r\n\t}\r\n\r\n\tgenerate(defaultOptions, userOptions = {}){\r\n\t\tvar output = Object.assign({}, this.registeredDefaults);\r\n\r\n\t\tObject.assign(output, defaultOptions);\r\n\r\n\t\tif(userOptions.debugInvalidOptions !== false || this.table.options.debugInvalidOptions){\r\n\t\t\tfor (var key in userOptions){\r\n\t\t\t\tif(!output.hasOwnProperty(key)){\r\n\t\t\t\t\tconsole.warn(\"Invalid \" + this.msgType + \" option:\", key)\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfor (var key in output){\r\n\t\t\tif(key in userOptions){\r\n\t\t\t\toutput[key] = userOptions[key];\r\n\t\t\t}else{\r\n\t\t\t\tif(Array.isArray(output[key])){\r\n\t\t\t\t\toutput[key] = Object.assign([], output[key]);\r\n\t\t\t\t}else if(typeof output[key] === \"object\" && output[key] !== null){\r\n\t\t\t\t\toutput[key] = Object.assign({}, output[key]);\r\n\t\t\t\t}else if (typeof output[key] === \"undefined\"){\r\n\t\t\t\t\tdelete output[key];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn output;\r\n\t}\r\n}","import CoreFeature from '../CoreFeature.js';\r\nimport Helpers from '../tools/Helpers.js';\r\n\r\nexport default class Renderer extends CoreFeature{\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.elementVertical = table.rowManager.element;\r\n\t\tthis.elementHorizontal = table.columnManager.element;\r\n\t\tthis.tableElement = table.rowManager.tableElement;\r\n\r\n\t\tthis.verticalFillMode = \"fit\"; // used by row manager to determin how to size the render area (\"fit\" - fits container to the contents, \"fill\" - fills the contianer without resizing it)\r\n\t}\r\n\r\n\r\n\t///////////////////////////////////\r\n\t/////// Internal Bindings /////////\r\n\t///////////////////////////////////\r\n\r\n\tinitialize(){\r\n\t\t//initialize core functionality\r\n\t}\r\n\r\n\tclearRows(){\r\n\t\t//clear down existing rows layout\r\n\t}\r\n\r\n\tclearColumns(){\r\n\t\t//clear down existing columns layout\r\n\t}\r\n\r\n\r\n\treinitializeColumnWidths(columns){\r\n\t\t//resize columns to fit data\r\n\t}\r\n\r\n\r\n\trenderRows(){\r\n\t\t//render rows from a clean slate\r\n\t}\r\n\r\n\trenderColumns(){\r\n\t\t//render columns from a clean slate\r\n\t}\r\n\r\n\trerenderRows(callback){\r\n\t\t// rerender rows and keep position\r\n\t\tif(callback){\r\n\t\t\tcallback();\r\n\t\t}\r\n\t}\r\n\r\n\trerenderColumns(update, blockRedraw){\r\n\t\t//rerender columns\r\n\t}\r\n\r\n\trenderRowCells(row){\r\n\t\t//render the cells in a row\r\n\t}\r\n\r\n\trerenderRowCells(row, force){\r\n\t\t//rerender the cells in a row\r\n\t}\r\n\r\n\tscrollColumns(left, dir){\r\n\t\t//handle horizontal scrolling\r\n\t}\r\n\r\n\tscrollRows(top, dir){\r\n\t\t//handle vertical scolling\r\n\t}\r\n\r\n\tresize(){\r\n\t\t//container has rezied, carry out any needed recalculations (DO NOT RERENDER IN THIS FUNCTION)\r\n\t}\r\n\r\n\tscrollToRow(row){\r\n\t\t//scroll to a specific row\r\n\t}\r\n\r\n\tscrollToRowNearestTop(row){\r\n\t\t//determin weather the row is nearest the top or bottom of the table, retur true for top or false for bottom\r\n\t}\r\n\r\n\tvisibleRows(includingBuffer){\r\n\t\t//return the visible rows\r\n\t\treturn [];\r\n\t}\r\n\r\n\t///////////////////////////////////\r\n\t//////// Helper Functions /////////\r\n\t///////////////////////////////////\r\n\r\n\trows(){\r\n\t\treturn this.table.rowManager.getDisplayRows();\r\n\t}\r\n\r\n\tstyleRow(row, index){\r\n\t\tvar rowEl = row.getElement();\r\n\r\n\t\tif(index % 2){\r\n\t\t\trowEl.classList.add(\"tabulator-row-even\");\r\n\t\t\trowEl.classList.remove(\"tabulator-row-odd\");\r\n\t\t}else{\r\n\t\t\trowEl.classList.add(\"tabulator-row-odd\");\r\n\t\t\trowEl.classList.remove(\"tabulator-row-even\");\r\n\t\t}\r\n\t}\r\n\r\n\t///////////////////////////////////\r\n\t/////// External Triggers /////////\r\n\t/////// (DO NOT OVERRIDE) /////////\r\n\t///////////////////////////////////\r\n\r\n\tclear(){\r\n\t\t//clear down existing layout\r\n\t\tthis.clearRows();\r\n\t\tthis.clearColumns();\r\n\t}\r\n\r\n\trender(){\r\n\t\t//render from a clean slate\r\n\t\tthis.renderRows();\r\n\t\tthis.renderColumns();\r\n\t}\r\n\r\n\trerender(callback){\r\n\t\t// rerender and keep position\r\n\t\tthis.rerenderRows();\r\n\t\tthis.rerenderColumns();\r\n\t}\r\n\r\n\tscrollToRowPosition(row, position, ifVisible){\r\n\t\tvar rowIndex = this.rows().indexOf(row),\r\n\t\trowEl = row.getElement(),\r\n\t\toffset = 0;\r\n\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tif(rowIndex > -1){\r\n\r\n\t\t\t\tif(typeof ifVisible === \"undefined\"){\r\n\t\t\t\t\tifVisible = this.table.options.scrollToRowIfVisible;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//check row visibility\r\n\t\t\t\tif(!ifVisible){\r\n\t\t\t\t\tif(Helpers.elVisible(rowEl)){\r\n\t\t\t\t\t\toffset = Helpers.elOffset(rowEl).top - Helpers.elOffset(this.elementVertical).top;\r\n\r\n\t\t\t\t\t\tif(offset > 0 && offset < this.elementVertical.clientHeight - rowEl.offsetHeight){\r\n\t\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(typeof position === \"undefined\"){\r\n\t\t\t\t\tposition = this.table.options.scrollToRowPosition;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(position === \"nearest\"){\r\n\t\t\t\t\tposition = this.scrollToRowNearestTop(row) ? \"top\" : \"bottom\"\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//scroll to row\r\n\t\t\t\tthis.scrollToRow(row);\r\n\r\n\t\t\t\t//align to correct position\r\n\t\t\t\tswitch(position){\r\n\t\t\t\t\tcase \"middle\":\r\n\t\t\t\t\tcase \"center\":\r\n\r\n\t\t\t\t\tif(this.elementVertical.scrollHeight - this.elementVertical.scrollTop == this.elementVertical.clientHeight){\r\n\t\t\t\t\t\tthis.elementVertical.scrollTop = this.elementVertical.scrollTop + (rowEl.offsetTop - this.elementVertical.scrollTop) - ((this.elementVertical.scrollHeight - rowEl.offsetTop) / 2);\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tthis.elementVertical.scrollTop = this.elementVertical.scrollTop - (this.elementVertical.clientHeight / 2);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase \"bottom\":\r\n\r\n\t\t\t\t\tif(this.elementVertical.scrollHeight - this.elementVertical.scrollTop == this.elementVertical.clientHeight){\r\n\t\t\t\t\t\tthis.elementVertical.scrollTop = this.elementVertical.scrollTop - (this.elementVertical.scrollHeight - rowEl.offsetTop) + rowEl.offsetHeight;\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tthis.elementVertical.scrollTop = this.elementVertical.scrollTop - this.elementVertical.clientHeight + rowEl.offsetHeight;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tresolve();\r\n\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Scroll Error - Row not visible\");\r\n\t\t\t\treject(\"Scroll Error - Row not visible\");\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n}","import Renderer from '../Renderer.js';\r\nimport Helpers from '../../tools/Helpers.js';\r\n\r\nexport default class BaiscHorizontal extends Renderer{\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\t}\r\n\r\n\trenderRowCells(row){\r\n\t\trow.cells.forEach((cell) => {\r\n\t\t\trow.element.appendChild(cell.getElement());\r\n\t\t\tcell.cellRendered();\r\n\t\t});\r\n\t}\r\n\r\n\treinitializeColumnWidths(columns){\r\n\t\tcolumns.forEach(function(column){\r\n\t\t\tcolumn.reinitializeWidth();\r\n\t\t});\r\n\t}\r\n}","import Renderer from '../Renderer.js';\r\nimport Helpers from '../../tools/Helpers.js';\r\n\r\nexport default class VirtualDomHorizontal extends Renderer{\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.leftCol = 0;\r\n\t\tthis.rightCol = 0;\r\n\t\tthis.scrollLeft = 0;\r\n\r\n\t\tthis.vDomScrollPosLeft = 0;\r\n\t\tthis.vDomScrollPosRight = 0;\r\n\r\n\t\tthis.vDomPadLeft = 0;\r\n\t\tthis.vDomPadRight = 0;\r\n\r\n\t\tthis.fitDataColAvg = 0;\r\n\r\n\t\tthis.window = 200; //pixel margin to make column visible before it is shown on screen\r\n\r\n\t\tthis.initialized = false;\r\n\r\n\t\tthis.columns = [];\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tthis.compatabilityCheck();\r\n\t}\r\n\r\n\tcompatabilityCheck(){\r\n\t\tvar columns = this.options(\"columns\"),\r\n\t\tfrozen = false,\r\n\t\tok = true;\r\n\r\n\t\tif(this.options(\"layout\") == \"fitDataTable\"){\r\n\t\t\tconsole.warn(\"Horizontal Vitrual DOM is not compatible with fitDataTable layout mode\");\r\n\t\t\tok = false;\r\n\t\t}\r\n\r\n\t\tif(this.options(\"responsiveLayout\")){\r\n\t\t\tconsole.warn(\"Horizontal Vitrual DOM is not compatible with responsive columns\");\r\n\t\t\tok = false;\r\n\t\t}\r\n\r\n\t\tif(this.options(\"rtl\")){\r\n\t\t\tconsole.warn(\"Horizontal Vitrual DOM is not currently compatible with RTL text direction\");\r\n\t\t\tok = false;\r\n\t\t}\r\n\r\n\t\tif(columns){\r\n\t\t\tfrozen = columns.find((col) => {\r\n\t\t\t\treturn col.frozen;\r\n\t\t\t});\r\n\r\n\t\t\tif(frozen){\r\n\t\t\t\tconsole.warn(\"Horizontal Vitrual DOM is not compatible with frozen columns\");\r\n\t\t\t\tok = false;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(!ok){\r\n\t\t\toptions.virtualDomHoz = false;\r\n\t\t}\r\n\r\n\t\treturn ok;\r\n\t}\r\n\r\n\t//////////////////////////////////////\r\n\t///////// Public Functions ///////////\r\n\t//////////////////////////////////////\r\n\r\n\trenderColumns(row, force){\r\n\t\tthis.dataChange();\r\n\t}\r\n\r\n\tscrollColumns(left, dir){\r\n\t\tif(this.scrollLeft != left){\r\n\t\t\tthis.scrollLeft = left;\r\n\r\n\t\t\tthis.scroll(left - (this.vDomScrollPosLeft + this.window));\r\n\t\t}\r\n\t}\r\n\r\n\trerenderColumns(update, blockRedraw){\r\n\t\tvar old = {\r\n\t\t\tcols:this.columns,\r\n\t\t\tleftCol:this.leftCol,\r\n\t\t\trightCol:this.rightCol,\r\n\t\t};\r\n\r\n\t\tif(update && !this.initialized){\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.clear();\r\n\r\n\t\tthis.scrollLeft = this.elementVertical.scrollLeft;\r\n\r\n\t\tthis.vDomScrollPosLeft = this.scrollLeft - this.window;\r\n\t\tthis.vDomScrollPosRight = this.scrollLeft + this.elementVertical.clientWidth + this.window;\r\n\r\n\t\tvar colPos = 0;\r\n\r\n\t\tthis.table.columnManager.columnsByIndex.forEach((column) => {\r\n\t\t\tvar config = {};\r\n\r\n\t\t\tif(column.visible){\r\n\t\t\t\tvar width = column.getWidth();\r\n\r\n\t\t\t\tconfig.leftPos = colPos;\r\n\t\t\t\tconfig.rightPos = colPos + width;\r\n\r\n\t\t\t\tconfig.width = width;\r\n\r\n\t\t\t\tif (this.options(\"layout\") === \"fitData\") {\r\n\t\t\t\t config.fitDataCheck = true;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif((colPos + width > this.vDomScrollPosLeft) && (colPos < this.vDomScrollPosRight)){\r\n\t \t\t//column is visible\r\n\r\n\t \t\tif(this.leftCol == -1){\r\n\t \t\t\tthis.leftCol = this.columns.length;\r\n\t \t\t\tthis.vDomPadLeft = colPos;\r\n\t \t\t}\r\n\r\n\t \t\tthis.rightCol = this.columns.length;\r\n\t \t}else{\r\n\t \t\t// column is hidden\r\n\t \t\tif(this.leftCol !== -1){\r\n\t \t\t\tthis.vDomPadRight += width;\r\n\t \t\t}\r\n\t \t}\r\n\r\n\t \tthis.columns.push(column);\r\n\r\n\t \tcolumn.modules.vdomHoz = config;\r\n\r\n\t \tcolPos += width;\r\n\t }\r\n\t });\r\n\r\n\t\tthis.tableElement.style.paddingLeft = this.vDomPadLeft + \"px\";\r\n\t\tthis.tableElement.style.paddingRight = this.vDomPadRight + \"px\";\r\n\r\n\t\tthis.initialized = true;\r\n\r\n\t\tif(!blockRedraw){\r\n\t\t\tif(!update || this.reinitChanged(old)){\r\n\t\t\t\tthis.renitializeRows();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.elementVertical.scrollLeft = this.scrollLeft;\r\n\t}\r\n\r\n\trenderRowCells(row){\r\n\t\tif(this.initialized){\r\n\t\t\tthis.initializeRow(row);\r\n\t\t}else{\r\n\t\t\trow.cells.forEach((cell) => {\r\n\t\t\t\trow.element.appendChild(cell.getElement());\r\n\t\t\t\tcell.cellRendered();\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\trerenderRowCells(row, force){\r\n\t\tthis.reinitializeRow(row, force);\r\n\t}\r\n\r\n\treinitializeColumnWidths(columns){\r\n\t\tfor(let i = this.leftCol; i <= this.rightCol; i++){\r\n\t\t\tthis.columns[i].reinitializeWidth();\r\n\t\t}\r\n\t}\r\n\r\n\t//////////////////////////////////////\r\n\t//////// Internal Rendering //////////\r\n\t//////////////////////////////////////\r\n\r\n\tdeinitialize(){\r\n\t\tthis.initialized = false;\r\n\t}\r\n\r\n\tclear(){\r\n\t\tthis.columns = [];\r\n\r\n\t\tthis.leftCol = -1;\r\n\t\tthis.rightCol = 0;\r\n\r\n\t\tthis.vDomScrollPosLeft = 0;\r\n\t\tthis.vDomScrollPosRight = 0;\r\n\t\tthis.vDomPadLeft = 0;\r\n\t\tthis.vDomPadRight = 0;\r\n\t}\r\n\r\n\tdataChange(){\r\n\t\tvar change = false,\r\n\t\tcollsWidth = 0,\r\n\t\tcolEnd = 0,\r\n\t\tgroup, row, rowEl;\r\n\r\n\t\tif(this.options(\"layout\") === \"fitData\"){\r\n\t\t\tthis.table.columnManager.columnsByIndex.forEach((column) => {\r\n\t\t\t\tif(!column.definition.width && column.visible){\r\n\t\t\t\t\tchange = true;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tif(change){\r\n\t\t\t\tif(change && this.table.rowManager.getDisplayRows().length){\r\n\r\n\t\t\t\t\tthis.vDomScrollPosRight = this.scrollLeft + this.elementVertical.clientWidth + this.window;\r\n\r\n\t\t\t\t\tvar row = this.chain(\"rows-sample\", [1], [], () => {\r\n\t\t\t\t\t\treturn this.table.rowManager.getDisplayRows()[0];\r\n\t\t\t\t\t})[0];\r\n\r\n\t\t\t\t\tif(row){\r\n\r\n\t\t\t\t\t\trowEl = row.getElement();\r\n\r\n\t\t\t\t\t\trow.generateCells();\r\n\r\n\t\t\t\t\t\tthis.tableElement.appendChild(rowEl);\r\n\r\n\t\t\t\t\t\tfor(var colEnd = 0; colEnd < row.cells.length; colEnd++){\r\n\t\t\t\t\t\t\tlet cell = row.cells[colEnd];\r\n\t\t\t\t\t\t\trowEl.appendChild(cell.getElement());\r\n\r\n\t\t\t\t\t\t\tcell.column.reinitializeWidth();\r\n\r\n\t\t\t\t\t\t\tcollsWidth += cell.column.getWidth();\r\n\r\n\t\t\t\t\t\t\tif(collsWidth > this.vDomScrollPosRight){\r\n\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\trowEl.parentNode.removeChild(rowEl);\r\n\r\n\t\t\t\t\t\tthis.fitDataColAvg = Math.floor(collsWidth / (colEnd + 1));\r\n\r\n\t\t\t\t\t\tfor(colEnd; colEnd < this.table.columnManager.columnsByIndex.length; colEnd++){\r\n\t\t\t\t\t\t\tthis.table.columnManager.columnsByIndex[colEnd].setWidth(this.fitDataColAvg);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tthis.rerenderColumns(false, true);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tif(this.options(\"layout\") === \"fitColumns\"){\r\n\t\t\t\tthis.layoutRefresh();\r\n\t\t\t\tthis.rerenderColumns(false, true);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\treinitChanged(old){\r\n\t\tvar match = true;\r\n\r\n\t\tif(old.cols.length !== this.columns.length || old.leftCol !== this.leftCol || old.rightCol !== this.rightCol){\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\told.cols.forEach((col, i) => {\r\n\t\t\tif(col !== this.columns[i]){\r\n\t\t\t\tmatch = false;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn !match;\r\n\t}\r\n\r\n\trenitializeRows(){\r\n\t\tvar rows = this.table.rowManager.getVisibleRows();\r\n\t\trows.forEach((row) => {\r\n\t\t\tthis.reinitializeRow(row, true);\r\n\t\t});\r\n\t}\r\n\r\n\tscroll(diff){\r\n\t\tthis.vDomScrollPosLeft += diff;\r\n\t\tthis.vDomScrollPosRight += diff;\r\n\r\n\t\tif(diff > (this.elementVertical.clientWidth * .8)){\r\n\t\t\tthis.rerenderColumns();\r\n\t\t}else{\r\n\t\t\tif(diff > 0){\r\n\t\t\t\t//scroll right\r\n\t\t\t\tthis.addColRight();\r\n\t\t\t\tthis.removeColLeft();\r\n\t\t\t}else{\r\n\t\t\t\t//scroll left\r\n\t\t\t\tthis.addColLeft();\r\n\t\t\t\tthis.removeColRight();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tcolPositionAdjust (start, end, diff){\r\n\t\tfor(let i = start; i < end; i++){\r\n\t\t\tlet column = this.columns[i];\r\n\r\n\t\t\tcolumn.modules.vdomHoz.leftPos += diff;\r\n\t\t\tcolumn.modules.vdomHoz.rightPos += diff;\r\n\t\t}\r\n\t}\r\n\r\n\taddColRight(){\r\n\t\tvar column = this.columns[this.rightCol + 1],\r\n\t\trows, newWidth, widthDiff;\r\n\r\n\t\tif(column && column.modules.vdomHoz.leftPos <= this.vDomScrollPosRight){\r\n\r\n\t\t\trows = this.table.rowManager.getVisibleRows();\r\n\r\n\t\t\trows.forEach((row) => {\r\n\t\t\t\tif(row.type !== \"group\"){\r\n\t\t\t\t\tvar cell = row.getCell(column);\r\n\t\t\t\t\trow.getElement().appendChild(cell.getElement());\r\n\t\t\t\t\tcell.cellRendered();\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tthis.fitDataColActualWidthCheck(column);\r\n\r\n\t\t\tthis.rightCol++;\r\n\r\n\t\t\tif(this.rightCol >= (this.columns.length - 1)){\r\n\t\t\t\tthis.vDomPadRight = 0;\r\n\t\t\t}else{\r\n\t\t\t\tthis.vDomPadRight -= column.getWidth();\r\n\t\t\t}\r\n\r\n\t\t\tthis.tableElement.style.paddingRight = this.vDomPadRight + \"px\";\r\n\r\n\t\t\tthis.addColRight();\r\n\t\t}\r\n\t}\r\n\r\n\taddColLeft(){\r\n\t\tvar column = this.columns[this.leftCol - 1],\r\n\t\trows;\r\n\r\n\t\tif(column && column.modules.vdomHoz.rightPos >= this.vDomScrollPosLeft){\r\n\t\t\tvar rows = this.table.rowManager.getVisibleRows();\r\n\r\n\t\t\trows.forEach((row) => {\r\n\t\t\t\tif(row.type !== \"group\"){\r\n\t\t\t\t\tvar cell = row.getCell(column);\r\n\t\t\t\t\trow.getElement().prepend(cell.getElement());\r\n\t\t\t\t\tcell.cellRendered();\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tthis.fitDataColActualWidthCheck(column);\r\n\r\n\t\t\tif(!this.leftCol){\r\n\t\t\t\tthis.vDomPadLeft = 0;\r\n\t\t\t}else{\r\n\t\t\t\tthis.vDomPadLeft -= column.getWidth();\r\n\t\t\t}\r\n\r\n\t\t\tthis.tableElement.style.paddingLeft = this.vDomPadLeft + \"px\";\r\n\r\n\t\t\tthis.leftCol--;\r\n\r\n\t\t\tthis.addColLeft();\r\n\t\t}\r\n\t}\r\n\r\n\tremoveColRight(column){\r\n\t\tvar column = this.columns[this.rightCol],\r\n\t\trows;\r\n\r\n\t\tif(column && column.modules.vdomHoz.leftPos > this.vDomScrollPosRight){\r\n\t\t\trows = this.table.rowManager.getVisibleRows();\r\n\r\n\t\t\tcolumn.modules.vdomHoz.visible = false;\r\n\r\n\t\t\trows.forEach((row) => {\r\n\t\t\t\tif(row.type !== \"group\"){\r\n\t\t\t\t\tvar cell = row.getCell(column);\r\n\t\t\t\t\trow.getElement().removeChild(cell.getElement());\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tthis.vDomPadRight += column.getWidth();\r\n\t\t\tthis.tableElement.style.paddingRight = this.vDomPadRight + \"px\";\r\n\r\n\t\t\tthis.rightCol --;\r\n\r\n\t\t\tthis.removeColRight();\r\n\t\t}\r\n\t}\r\n\r\n\tremoveColLeft(){\r\n\t\tvar column = this.columns[this.leftCol],\r\n\t\trows;\r\n\r\n\t\tif(column && column.modules.vdomHoz.rightPos < this.vDomScrollPosLeft){\r\n\r\n\t\t\trows = this.table.rowManager.getVisibleRows();\r\n\r\n\t\t\trows.forEach((row) => {\r\n\t\t\t\tif(row.type !== \"group\"){\r\n\t\t\t\t\tvar cell = row.getCell(column);\r\n\t\t\t\t\trow.getElement().removeChild(cell.getElement());\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tthis.vDomPadLeft += column.getWidth();\r\n\t\t\tthis.tableElement.style.paddingLeft = this.vDomPadLeft + \"px\";\r\n\r\n\t\t\tthis.leftCol ++;\r\n\r\n\t\t\tthis.removeColLeft();\r\n\t\t}\r\n\t}\r\n\r\n\tfitDataColActualWidthCheck(column){\r\n\t var newWidth, widthDiff;\r\n\r\n\t if(column.modules.vdomHoz.fitDataCheck){\r\n\t column.reinitializeWidth();\r\n\r\n\t newWidth = column.getWidth();\r\n\t widthDiff = newWidth - column.modules.vdomHoz.width;\r\n\r\n\t if(widthDiff){\r\n\t column.modules.vdomHoz.rightPos += widthDiff;\r\n\t column.modules.vdomHoz.width = newWidth;\r\n\t this.colPositionAdjust(this.rightCol + 2, this.columns.length, widthDiff);\r\n\t }\r\n\r\n\t column.modules.vdomHoz.fitDataCheck = false;\r\n\t }\r\n\t};\r\n\r\n\tinitializeRow(row){\r\n\t\tif(row.type !== \"group\"){\r\n\t\t\trow.modules.vdomHoz = {\r\n\t\t\t\tleftCol:this.leftCol,\r\n\t\t\t\trightCol:this.rightCol,\r\n\t\t\t};\r\n\r\n\t\t\tfor(let i = this.leftCol; i <= this.rightCol; i++){\r\n\t\t\t\tlet column = this.columns[i];\r\n\r\n\t\t\t\tif(column && column.visible){\r\n\t\t\t\t\tlet cell = row.getCell(column);\r\n\r\n\t\t\t\t\trow.getElement().appendChild(cell.getElement());\r\n\t\t\t\t\tcell.cellRendered();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\treinitializeRow(row, force){\r\n\t\tif(row.type !== \"group\"){\r\n\t\t\tif(force || !row.modules.vdomHoz || row.modules.vdomHoz.leftCol !== this.leftCol || row.modules.vdomHoz.rightCol !== this.rightCol){\r\n\t\t\t\tvar rowEl = row.getElement();\r\n\t\t\t\twhile(rowEl.firstChild) rowEl.removeChild(rowEl.firstChild);\r\n\r\n\t\t\t\tthis.initializeRow(row);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}","import CoreFeature from './CoreFeature.js';\r\nimport Column from './column/Column.js';\r\nimport ColumnComponent from './column/ColumnComponent.js';\r\nimport Helpers from './tools/Helpers.js';\r\nimport OptionsList from './tools/OptionsList.js';\r\n\r\nimport RendererBasicHorizontal from './rendering/renderers/BasicHorizontal.js';\r\nimport RendererVirtualDomHorizontal from './rendering/renderers/VirtualDomHorizontal.js';\r\n\r\nexport default class ColumnManager extends CoreFeature {\r\n\r\n\tconstructor (table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.blockHozScrollEvent = false;\r\n\t\tthis.headersElement = null;\r\n\t\tthis.element = null ; //containing element\r\n\t\tthis.columns = []; // column definition object\r\n\t\tthis.columnsByIndex = []; //columns by index\r\n\t\tthis.columnsByField = {}; //columns by field\r\n\t\tthis.scrollLeft = 0;\r\n\t\tthis.optionsList = new OptionsList(this.table, \"column definition\");\r\n\r\n\t\tthis.renderer = null;\r\n\t}\r\n\r\n\t////////////// Setup Functions /////////////////\r\n\r\n\tinitialize(){\r\n\t\tthis.initializeRenderer();\r\n\r\n\t\tthis.headersElement = this.createHeadersElement();\r\n\t\tthis.element = this.createHeaderElement();\r\n\r\n\t\tthis.element.insertBefore(this.headersElement, this.element.firstChild);\r\n\r\n\t\tthis.subscribe(\"scroll-horizontal\", this.scrollHorizontal.bind(this));\r\n\t}\r\n\r\n\tinitializeRenderer(){\r\n\t\tvar renderClass;\r\n\r\n\t\tvar renderers = {\r\n\t\t\t\"virtual\": RendererVirtualDomHorizontal,\r\n\t\t\t\"basic\": RendererBasicHorizontal,\r\n\t\t};\r\n\r\n\t\tif(typeof this.table.options.renderVertical === \"string\"){\r\n\t\t\trenderClass = renderers[this.table.options.renderVertical];\r\n\t\t}else{\r\n\t\t\trenderClass = this.table.options.renderVertical;\r\n\t\t}\r\n\r\n\t\tif(renderClass){\r\n\t\t\tthis.renderer = new renderClass(this.table, this.element, this.tableElement);\r\n\t\t\tthis.renderer.initialize();\r\n\t\t}else{\r\n\t\t\tconsole.error(\"Unable to find matching renderer:\", table.options.renderVertical);\r\n\t\t}\r\n\t}\r\n\r\n\r\n\tcreateHeadersElement (){\r\n\t\tvar el = document.createElement(\"div\");\r\n\r\n\t\tel.classList.add(\"tabulator-headers\");\r\n\r\n\t\treturn el;\r\n\t}\r\n\r\n\tcreateHeaderElement (){\r\n\t\tvar el = document.createElement(\"div\");\r\n\r\n\t\tel.classList.add(\"tabulator-header\");\r\n\r\n\t\tif(!this.table.options.headerVisible){\r\n\t\t\tel.classList.add(\"tabulator-header-hidden\");\r\n\t\t}\r\n\r\n\t\treturn el;\r\n\t}\r\n\r\n\t//return containing element\r\n\tgetElement(){\r\n\t\treturn this.element;\r\n\t}\r\n\r\n\t//return header containing element\r\n\tgetHeadersElement(){\r\n\t\treturn this.headersElement;\r\n\t}\r\n\r\n\t//scroll horizontally to match table body\r\n\tscrollHorizontal(left){\r\n\t\tvar hozAdjust = 0,\r\n\t\tscrollWidth = this.element.scrollWidth - this.table.element.clientWidth;\r\n\r\n\t\t// this.tempScrollBlock();\r\n\t\tthis.element.scrollLeft = left;\r\n\r\n\t\t//adjust for vertical scrollbar moving table when present\r\n\t\tif(left > scrollWidth){\r\n\t\t\thozAdjust = left - scrollWidth;\r\n\t\t\tthis.element.style.marginLeft = (-(hozAdjust)) + \"px\";\r\n\t\t}else{\r\n\t\t\tthis.element.style.marginLeft = 0;\r\n\t\t}\r\n\r\n\t\tthis.scrollLeft = left;\r\n\r\n\t\tthis.renderer.scrollColumns(left);\r\n\t}\r\n\r\n\t///////////// Column Setup Functions /////////////\r\n\tgenerateColumnsFromRowData(data){\r\n\t\tvar cols = [],\r\n\t\tdefinitions = this.table.options.autoColumnsDefinitions,\r\n\t\trow, sorter;\r\n\r\n\t\tif(data && data.length){\r\n\r\n\t\t\trow = data[0];\r\n\r\n\t\t\tfor(var key in row){\r\n\t\t\t\tlet col = {\r\n\t\t\t\t\tfield:key,\r\n\t\t\t\t\ttitle:key,\r\n\t\t\t\t};\r\n\r\n\t\t\t\tlet value = row[key];\r\n\r\n\t\t\t\tswitch(typeof value){\r\n\t\t\t\t\tcase \"undefined\":\r\n\t\t\t\t\tsorter = \"string\";\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase \"boolean\":\r\n\t\t\t\t\tsorter = \"boolean\";\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase \"object\":\r\n\t\t\t\t\tif(Array.isArray(value)){\r\n\t\t\t\t\t\tsorter = \"array\";\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tsorter = \"string\";\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tdefault:\r\n\t\t\t\t\tif(!isNaN(value) && value !== \"\"){\r\n\t\t\t\t\t\tsorter = \"number\";\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tif(value.match(/((^[0-9]+[a-z]+)|(^[a-z]+[0-9]+))+$/i)){\r\n\t\t\t\t\t\t\tsorter = \"alphanum\";\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\tsorter = \"string\";\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tcol.sorter = sorter;\r\n\r\n\t\t\t\tcols.push(col);\r\n\t\t\t}\r\n\r\n\t\t\tif(definitions){\r\n\r\n\t\t\t\tswitch(typeof definitions){\r\n\t\t\t\t\tcase \"function\":\r\n\t\t\t\t\tthis.table.options.columns = definitions.call(this.table, cols);\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase \"object\":\r\n\t\t\t\t\tif(Array.isArray(definitions)){\r\n\t\t\t\t\t\tcols.forEach((col) => {\r\n\t\t\t\t\t\t\tvar match = definitions.find((def) => {\r\n\t\t\t\t\t\t\t\treturn def.field === col.field;\r\n\t\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\t\tif(match){\r\n\t\t\t\t\t\t\t\tObject.assign(col, match);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tcols.forEach((col) => {\r\n\t\t\t\t\t\t\tif(definitions[col.field]){\r\n\t\t\t\t\t\t\t\tObject.assign(col, definitions[col.field]);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tthis.table.options.columns = cols;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tthis.table.options.columns = cols;\r\n\t\t\t}\r\n\r\n\t\t\tthis.setColumns(this.table.options.columns);\r\n\t\t}\r\n\t}\r\n\r\n\tsetColumns(cols, row){\r\n\t\twhile(this.headersElement.firstChild) this.headersElement.removeChild(this.headersElement.firstChild);\r\n\r\n\t\tthis.columns = [];\r\n\t\tthis.columnsByIndex = [];\r\n\t\tthis.columnsByField = {};\r\n\r\n\t\tthis.dispatch(\"columns-loading\");\r\n\r\n\t\tcols.forEach((def, i) => {\r\n\t\t\tthis._addColumn(def);\r\n\t\t});\r\n\r\n\t\tthis._reIndexColumns();\r\n\r\n\t\tthis.dispatch(\"columns-loaded\");\r\n\r\n\t\tthis.renderer.rerenderColumns(false, true);\r\n\r\n\t\tthis.redraw(true);\r\n\t}\r\n\r\n\t_addColumn(definition, before, nextToColumn){\r\n\t\tvar column = new Column(definition, this),\r\n\t\tcolEl = column.getElement(),\r\n\t\tindex = nextToColumn ? this.findColumnIndex(nextToColumn) : nextToColumn;\r\n\r\n\t\tif(nextToColumn && index > -1){\r\n\r\n\t\t\tvar parentIndex = this.columns.indexOf(nextToColumn.getTopColumn());\r\n\t\t\tvar nextEl = nextToColumn.getElement();\r\n\r\n\t\t\tif(before){\r\n\t\t\t\tthis.columns.splice(parentIndex, 0, column);\r\n\t\t\t\tnextEl.parentNode.insertBefore(colEl, nextEl);\r\n\t\t\t}else{\r\n\t\t\t\tthis.columns.splice(parentIndex + 1, 0, column);\r\n\t\t\t\tnextEl.parentNode.insertBefore(colEl, nextEl.nextSibling);\r\n\t\t\t}\r\n\r\n\t\t}else{\r\n\t\t\tif(before){\r\n\t\t\t\tthis.columns.unshift(column);\r\n\t\t\t\tthis.headersElement.insertBefore(column.getElement(), this.headersElement.firstChild);\r\n\t\t\t}else{\r\n\t\t\t\tthis.columns.push(column);\r\n\t\t\t\tthis.headersElement.appendChild(column.getElement());\r\n\t\t\t}\r\n\r\n\t\t\tcolumn.columnRendered();\r\n\t\t}\r\n\r\n\t\treturn column;\r\n\t}\r\n\r\n\tregisterColumnField(col){\r\n\t\tif(col.definition.field){\r\n\t\t\tthis.columnsByField[col.definition.field] = col;\r\n\t\t}\r\n\t}\r\n\r\n\tregisterColumnPosition(col){\r\n\t\tthis.columnsByIndex.push(col);\r\n\t}\r\n\r\n\t_reIndexColumns(){\r\n\t\tthis.columnsByIndex = [];\r\n\r\n\t\tthis.columns.forEach(function(column){\r\n\t\t\tcolumn.reRegisterPosition();\r\n\t\t});\r\n\t}\r\n\r\n\t//ensure column headers take up the correct amount of space in column groups\r\n\t_verticalAlignHeaders(){\r\n\t\tvar minHeight = 0;\r\n\r\n\t\tthis.columns.forEach((column) => {\r\n\t\t\tvar height;\r\n\r\n\t\t\tcolumn.clearVerticalAlign();\r\n\r\n\t\t\theight = column.getHeight();\r\n\r\n\t\t\tif(height > minHeight){\r\n\t\t\t\tminHeight = height;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tthis.columns.forEach((column) => {\r\n\t\t\tcolumn.verticalAlign(this.table.options.columnHeaderVertAlign, minHeight);\r\n\t\t});\r\n\r\n\t\tthis.table.rowManager.adjustTableSize();\r\n\t}\r\n\r\n\t//////////////// Column Details /////////////////\r\n\tfindColumn(subject){\r\n\t\tif(typeof subject == \"object\"){\r\n\r\n\t\t\tif(subject instanceof Column){\r\n\t\t\t\t//subject is column element\r\n\t\t\t\treturn subject;\r\n\t\t\t}else if(subject instanceof ColumnComponent){\r\n\t\t\t\t//subject is public column component\r\n\t\t\t\treturn subject._getSelf() || false;\r\n\t\t\t}else if(typeof HTMLElement !== \"undefined\" && subject instanceof HTMLElement){\r\n\t\t\t\t//subject is a HTML element of the column header\r\n\t\t\t\tlet match = this.columns.find((column) => {\r\n\t\t\t\t\treturn column.element === subject;\r\n\t\t\t\t});\r\n\r\n\t\t\t\treturn match || false;\r\n\t\t\t}\r\n\r\n\t\t}else{\r\n\t\t\t//subject should be treated as the field name of the column\r\n\t\t\treturn this.columnsByField[subject] || false;\r\n\t\t}\r\n\r\n\t\t//catch all for any other type of input\r\n\t\treturn false;\r\n\t}\r\n\r\n\tgetColumnByField(field){\r\n\t\treturn this.columnsByField[field];\r\n\t}\r\n\r\n\tgetColumnsByFieldRoot(root){\r\n\t\tvar matches = [];\r\n\r\n\t\tObject.keys(this.columnsByField).forEach((field) => {\r\n\t\t\tvar fieldRoot = field.split(\".\")[0];\r\n\t\t\tif(fieldRoot === root){\r\n\t\t\t\tmatches.push(this.columnsByField[field]);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn matches;\r\n\t}\r\n\r\n\tgetColumnByIndex(index){\r\n\t\treturn this.columnsByIndex[index];\r\n\t}\r\n\r\n\tgetFirstVisibileColumn(index){\r\n\t\tvar index = this.columnsByIndex.findIndex((col) => {\r\n\t\t\treturn col.visible;\r\n\t\t});\r\n\r\n\t\treturn index > -1 ? this.columnsByIndex[index] : false;\r\n\t}\r\n\r\n\tgetColumns(){\r\n\t\treturn this.columns;\r\n\t}\r\n\r\n\tfindColumnIndex(column){\r\n\t\treturn this.columnsByIndex.findIndex((col) => {\r\n\t\t\treturn column === col;\r\n\t\t});\r\n\t}\r\n\r\n\t//return all columns that are not groups\r\n\tgetRealColumns(){\r\n\t\treturn this.columnsByIndex;\r\n\t}\r\n\r\n\t//travers across columns and call action\r\n\ttraverse(callback){\r\n\t\tthis.columnsByIndex.forEach((column,i) =>{\r\n\t\t\tcallback(column, i);\r\n\t\t});\r\n\t}\r\n\r\n\t//get defintions of actual columns\r\n\tgetDefinitions(active){\r\n\t\tvar output = [];\r\n\r\n\t\tthis.columnsByIndex.forEach((column) => {\r\n\t\t\tif(!active || (active && column.visible)){\r\n\t\t\t\toutput.push(column.getDefinition());\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\t//get full nested definition tree\r\n\tgetDefinitionTree(){\r\n\t\tvar output = [];\r\n\r\n\t\tthis.columns.forEach((column) => {\r\n\t\t\toutput.push(column.getDefinition(true));\r\n\t\t});\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tgetComponents(structured){\r\n\t\tvar output = [],\r\n\t\tcolumns = structured ? this.columns : this.columnsByIndex;\r\n\r\n\t\tcolumns.forEach((column) => {\r\n\t\t\toutput.push(column.getComponent());\r\n\t\t});\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tgetWidth(){\r\n\t\tvar width = 0;\r\n\r\n\t\tthis.columnsByIndex.forEach((column) => {\r\n\t\t\tif(column.visible){\r\n\t\t\t\twidth += column.getWidth();\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn width;\r\n\t}\r\n\r\n\tmoveColumn(from, to, after){\r\n\t\tthis.moveColumnActual(from, to, after);\r\n\r\n\t\tto.element.parentNode.insertBefore(from.element, to.element);\r\n\r\n\t\tif(after){\r\n\t\t\tto.element.parentNode.insertBefore(to.element, from.element);\r\n\t\t}\r\n\r\n\t\tthis._verticalAlignHeaders();\r\n\r\n\t\tthis.table.rowManager.reinitialize();\r\n\t}\r\n\r\n\tmoveColumnActual(from, to, after){\r\n\t\tif(from.parent.isGroup){\r\n\t\t\tthis._moveColumnInArray(from.parent.columns, from, to, after);\r\n\t\t}else{\r\n\t\t\tthis._moveColumnInArray(this.columns, from, to, after);\r\n\t\t}\r\n\r\n\t\tthis._moveColumnInArray(this.columnsByIndex, from, to, after, true);\r\n\r\n\t\tthis.renderer.rerenderColumns(true);\r\n\r\n\t\tthis.dispatch(\"column-moved\", from, to, after);\r\n\r\n\t\tif(this.subscribedExternal(\"columnMoved\")){\r\n\t\t\tthis.dispatchExternal(\"columnMoved\", from.getComponent(), this.table.columnManager.getComponents());\r\n\t\t}\r\n\t}\r\n\r\n\t_moveColumnInArray(columns, from, to, after, updateRows){\r\n\t\tvar\tfromIndex = columns.indexOf(from),\r\n\t\ttoIndex, rows = [];\r\n\r\n\t\tif (fromIndex > -1) {\r\n\r\n\t\t\tcolumns.splice(fromIndex, 1);\r\n\r\n\t\t\ttoIndex = columns.indexOf(to);\r\n\r\n\t\t\tif (toIndex > -1) {\r\n\r\n\t\t\t\tif(after){\r\n\t\t\t\t\ttoIndex = toIndex+1;\r\n\t\t\t\t}\r\n\r\n\t\t\t}else{\r\n\t\t\t\ttoIndex = fromIndex;\r\n\t\t\t}\r\n\r\n\t\t\tcolumns.splice(toIndex, 0, from);\r\n\r\n\t\t\tif(updateRows){\r\n\r\n\t\t\t\trows = this.chain(\"column-moving-rows\", [from, to, after], null, []) || [];\r\n\r\n\t\t\t\trows = rows.concat(this.table.rowManager.rows);\r\n\r\n\t\t\t\trows.forEach(function(row){\r\n\t\t\t\t\tif(row.cells.length){\r\n\t\t\t\t\t\tvar cell = row.cells.splice(fromIndex, 1)[0];\r\n\t\t\t\t\t\trow.cells.splice(toIndex, 0, cell);\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tscrollToColumn(column, position, ifVisible){\r\n\t\tvar left = 0,\r\n\t\toffset = 0,\r\n\t\tadjust = 0,\r\n\t\tcolEl = column.getElement();\r\n\r\n\t\treturn new Promise((resolve, reject) => {\r\n\r\n\t\t\tif(typeof position === \"undefined\"){\r\n\t\t\t\tposition = this.table.options.scrollToColumnPosition;\r\n\t\t\t}\r\n\r\n\t\t\tif(typeof ifVisible === \"undefined\"){\r\n\t\t\t\tifVisible = this.table.options.scrollToColumnIfVisible;\r\n\t\t\t}\r\n\r\n\t\t\tif(column.visible){\r\n\r\n\t\t\t\t//align to correct position\r\n\t\t\t\tswitch(position){\r\n\t\t\t\t\tcase \"middle\":\r\n\t\t\t\t\tcase \"center\":\r\n\t\t\t\t\tadjust = -this.element.clientWidth / 2;\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase \"right\":\r\n\t\t\t\t\tadjust = colEl.clientWidth - this.headersElement.clientWidth;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//check column visibility\r\n\t\t\t\tif(!ifVisible){\r\n\r\n\t\t\t\t\toffset = colEl.offsetLeft;\r\n\r\n\t\t\t\t\tif(offset > 0 && offset + colEl.offsetWidth < this.element.clientWidth){\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//calculate scroll position\r\n\t\t\t\tleft = colEl.offsetLeft + adjust;\r\n\r\n\t\t\t\tleft = Math.max(Math.min(left, this.table.rowManager.element.scrollWidth - this.table.rowManager.element.clientWidth),0);\r\n\r\n\t\t\t\tthis.table.rowManager.scrollHorizontal(left);\r\n\t\t\t\tthis.scrollHorizontal(left);\r\n\r\n\t\t\t\tresolve();\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Scroll Error - Column not visible\");\r\n\t\t\t\treject(\"Scroll Error - Column not visible\");\r\n\t\t\t}\r\n\r\n\t\t});\r\n\t}\r\n\r\n\t//////////////// Cell Management /////////////////\r\n\tgenerateCells(row){\r\n\t\tvar cells = [];\r\n\r\n\t\tthis.columnsByIndex.forEach((column) => {\r\n\t\t\tcells.push(column.generateCell(row));\r\n\t\t});\r\n\r\n\t\treturn cells;\r\n\t}\r\n\r\n\t//////////////// Column Management /////////////////\r\n\tgetFlexBaseWidth(){\r\n\t\tvar totalWidth = this.table.element.clientWidth, //table element width\r\n\t\tfixedWidth = 0;\r\n\r\n\t\t//adjust for vertical scrollbar if present\r\n\t\tif(this.table.rowManager.element.scrollHeight > this.table.rowManager.element.clientHeight){\r\n\t\t\ttotalWidth -= this.table.rowManager.element.offsetWidth - this.table.rowManager.element.clientWidth;\r\n\t\t}\r\n\r\n\t\tthis.columnsByIndex.forEach(function(column){\r\n\t\t\tvar width, minWidth, colWidth;\r\n\r\n\t\t\tif(column.visible){\r\n\r\n\t\t\t\twidth = column.definition.width || 0;\r\n\r\n\t\t\t\tminWidth = parseInt(column.minWidth);\r\n\r\n\t\t\t\tif(typeof(width) == \"string\"){\r\n\t\t\t\t\tif(width.indexOf(\"%\") > -1){\r\n\t\t\t\t\t\tcolWidth = (totalWidth / 100) * parseInt(width) ;\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tcolWidth = parseInt(width);\r\n\t\t\t\t\t}\r\n\t\t\t\t}else{\r\n\t\t\t\t\tcolWidth = width;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tfixedWidth += colWidth > minWidth ? colWidth : minWidth;\r\n\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn fixedWidth;\r\n\t}\r\n\r\n\taddColumn(definition, before, nextToColumn){\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tvar column = this._addColumn(definition, before, nextToColumn);\r\n\r\n\t\t\tthis._reIndexColumns();\r\n\r\n\t\t\tthis.dispatch(\"column-add\", definition, before, nextToColumn);\r\n\r\n\t\t\tthis.redraw(true);\r\n\r\n\t\t\tif(this.layoutMode() != \"fitColumns\"){\r\n\t\t\t\tcolumn.reinitializeWidth();\r\n\t\t\t}\r\n\r\n\t\t\tthis._verticalAlignHeaders();\r\n\r\n\t\t\tthis.table.rowManager.reinitialize();\r\n\r\n\t\t\tthis.renderer.rerenderColumns();\r\n\r\n\t\t\tresolve(column);\r\n\t\t});\r\n\t}\r\n\r\n\t//remove column from system\r\n\tderegisterColumn(column){\r\n\t\tvar field = column.getField(),\r\n\t\tindex;\r\n\r\n\t\t//remove from field list\r\n\t\tif(field){\r\n\t\t\tdelete this.columnsByField[field];\r\n\t\t}\r\n\r\n\t\t//remove from index list\r\n\t\tindex = this.columnsByIndex.indexOf(column);\r\n\r\n\t\tif(index > -1){\r\n\t\t\tthis.columnsByIndex.splice(index, 1);\r\n\t\t}\r\n\r\n\t\t//remove from column list\r\n\t\tindex = this.columns.indexOf(column);\r\n\r\n\t\tif(index > -1){\r\n\t\t\tthis.columns.splice(index, 1);\r\n\t\t}\r\n\r\n\t\tthis._verticalAlignHeaders();\r\n\r\n\t\tthis.redraw();\r\n\t}\r\n\r\n\t//redraw columns\r\n\tredraw(force){\r\n\t\tif(force){\r\n\t\t\tif(Helpers.elVisible(this.element)){\r\n\t\t\t\tthis._verticalAlignHeaders();\r\n\t\t\t}\r\n\r\n\t\t\tthis.table.rowManager.resetScroll();\r\n\t\t\tthis.table.rowManager.reinitialize();\r\n\t\t}\r\n\r\n\t\tif(!this.confirm(\"table-redrawing\", force)){\r\n\t\t\tthis.layoutRefresh();\r\n\t\t}\r\n\r\n\t\tthis.dispatch(\"table-redraw\", force);\r\n\r\n\t\tthis.table.footerManager.redraw();\r\n\t}\r\n}","import Renderer from '../Renderer.js';\r\nimport Helpers from '../../tools/Helpers.js';\r\n\r\nexport default class BaiscVertical extends Renderer{\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.verticalFillMode = \"fill\";\r\n\r\n\t\tthis.scrollTop = 0;\r\n\t\tthis.scrollLeft = 0;\r\n\r\n\t\tthis.scrollTop = 0;\r\n\t\tthis.scrollLeft = 0;\r\n\t}\r\n\r\n\tclearRows(){\r\n\t\tvar element = this.tableElement;\r\n\r\n\t\t// element.children.detach();\r\n\t\twhile(element.firstChild) element.removeChild(element.firstChild);\r\n\r\n\t\telement.scrollTop = 0;\r\n\t\telement.scrollLeft = 0;\r\n\r\n\t\telement.style.minWidth = \"\";\r\n\t\telement.style.minHeight = \"\";\r\n\t\telement.style.display = \"\";\r\n\t\telement.style.visibility = \"\";\r\n\t}\r\n\r\n\trenderRows(){\r\n\t\tvar element = this.tableElement,\r\n\t\tonlyGroupHeaders = true;\r\n\r\n\t\tthis.rows().forEach((row, index) => {\r\n\t\t\tthis.styleRow(row, index);\r\n\t\t\telement.appendChild(row.getElement());\r\n\t\t\trow.initialize(true);\r\n\r\n\t\t\tif(row.type !== \"group\"){\r\n\t\t\t\tonlyGroupHeaders = false;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tif(onlyGroupHeaders){\r\n\t\t\telement.style.minWidth = this.table.columnManager.getWidth() + \"px\";\r\n\t\t}else{\r\n\t\t\telement.style.minWidth = \"\";\r\n\t\t}\r\n\t}\r\n\r\n\r\n\trerenderRows(callback){\r\n\t\tthis.render();\r\n\r\n\t\tif(callback){\r\n\t\t\tcallback();\r\n\t\t}\r\n\t}\r\n\r\n\tscrollToRowNearestTop(row){\r\n\t\tvar rowTop = Helpers.elOffset(row.getElement()).top;\r\n\r\n\t\treturn !(Math.abs(this.elementVertical.scrollTop - rowTop) > Math.abs(this.elementVertical.scrollTop + this.elementVertical.clientHeight - rowTop));\r\n\t}\r\n\r\n\tscrollToRow(row){\r\n\t\tvar rowEl = row.getElement();\r\n\r\n\t\tthis.elementVertical.scrollTop = Helpers.elOffset(rowEl).top - Helpers.elOffset(this.elementVertical).top + this.elementVertical.scrollTop;\r\n\t}\r\n\r\n\tvisibleRows(includingBuffer){\r\n\t\treturn this.rows();\r\n\t}\r\n\r\n}","import Renderer from '../Renderer.js';\r\nimport Helpers from '../../tools/Helpers.js';\r\n\r\nexport default class VirtualDomVertical extends Renderer{\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.verticalFillMode = \"fill\";\r\n\r\n\t\tthis.scrollTop = 0;\r\n\t\tthis.scrollLeft = 0;\r\n\r\n\t\tthis.vDomRowHeight = 20; //approximation of row heights for padding\r\n\r\n\t\tthis.vDomTop = 0; //hold position for first rendered row in the virtual DOM\r\n\t\tthis.vDomBottom = 0; //hold possition for last rendered row in the virtual DOM\r\n\r\n\t\tthis.vDomScrollPosTop = 0; //last scroll position of the vDom top;\r\n\t\tthis.vDomScrollPosBottom = 0; //last scroll position of the vDom bottom;\r\n\r\n\t\tthis.vDomTopPad = 0; //hold value of padding for top of virtual DOM\r\n\t\tthis.vDomBottomPad = 0; //hold value of padding for bottom of virtual DOM\r\n\r\n\t\tthis.vDomMaxRenderChain = 90; //the maximum number of dom elements that can be rendered in 1 go\r\n\r\n\t\tthis.vDomWindowBuffer = 0; //window row buffer before removing elements, to smooth scrolling\r\n\r\n\t\tthis.vDomWindowMinTotalRows = 20; //minimum number of rows to be generated in virtual dom (prevent buffering issues on tables with tall rows)\r\n\t\tthis.vDomWindowMinMarginRows = 5; //minimum number of rows to be generated in virtual dom margin\r\n\r\n\t\tthis.vDomTopNewRows = []; //rows to normalize after appending to optimize render speed\r\n\t\tthis.vDomBottomNewRows = []; //rows to normalize after appending to optimize render speed\r\n\t}\r\n\r\n\t//////////////////////////////////////\r\n\t///////// Public Functions ///////////\r\n\t//////////////////////////////////////\r\n\r\n\tclearRows(){\r\n\t\tvar element = this.tableElement;\r\n\r\n\t\t// element.children.detach();\r\n\t\twhile(element.firstChild) element.removeChild(element.firstChild);\r\n\r\n\t\telement.style.paddingTop = \"\";\r\n\t\telement.style.paddingBottom = \"\";\r\n\t\telement.style.minWidth = \"\";\r\n\t\telement.style.minHeight = \"\";\r\n\t\telement.style.display = \"\";\r\n\t\telement.style.visibility = \"\";\r\n\r\n\t\tthis.elementVertical.scrollTop = 0;\r\n\t\tthis.elementVertical.scrollLeft = 0;\r\n\r\n\t\tthis.scrollTop = 0;\r\n\t\tthis.scrollLeft = 0;\r\n\r\n\t\tthis.vDomTop = 0;\r\n\t\tthis.vDomBottom = 0;\r\n\t\tthis.vDomTopPad = 0;\r\n\t\tthis.vDomBottomPad = 0;\r\n\t\tthis.vDomScrollPosTop = 0;\r\n\t\tthis.vDomScrollPosBottom = 0;\r\n\t}\r\n\r\n\trenderRows(){\r\n\t\tthis._virtualRenderFill();\r\n\t}\r\n\r\n\trerenderRows(callback){\r\n\t\tvar scrollTop = this.elementVertical.scrollTop;\r\n\t\tvar topRow = false;\r\n\t\tvar topOffset = false;\r\n\r\n\t\tvar left = this.table.rowManager.scrollLeft;\r\n\r\n\t\tvar rows = this.rows();\r\n\r\n\t\tfor(var i = this.vDomTop; i <= this.vDomBottom; i++){\r\n\r\n\t\t\tif(rows[i]){\r\n\t\t\t\tvar diff = scrollTop - rows[i].getElement().offsetTop;\r\n\r\n\t\t\t\tif(topOffset === false || Math.abs(diff) < topOffset){\r\n\t\t\t\t\ttopOffset = diff;\r\n\t\t\t\t\ttopRow = i;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(callback){\r\n\t\t\tcallback();\r\n\t\t}\r\n\r\n\t\tthis._virtualRenderFill((topRow === false ? this.rows.length - 1 : topRow), true, topOffset || 0);\r\n\r\n\t\tthis.scrollColumns(left);\r\n\t}\r\n\r\n\tscrollColumns(left){\r\n\t\tthis.table.rowManager.scrollHorizontal(left);\r\n\t}\r\n\r\n\tscrollRows(top, dir){\r\n\t\tvar topDiff = top - this.vDomScrollPosTop;\r\n\t\tvar bottomDiff = top - this.vDomScrollPosBottom;\r\n\t\tvar margin = this.vDomWindowBuffer * 2;\r\n\t\tvar rows = this.rows();\r\n\r\n\t\tthis.scrollTop = top;\r\n\r\n\t\tif(-topDiff > margin || bottomDiff > margin){\r\n\t\t\t//if big scroll redraw table;\r\n\t\t\tvar left = this.table.rowManager.scrollLeft;\r\n\t\t\tthis._virtualRenderFill(Math.floor((this.elementVertical.scrollTop / this.elementVertical.scrollHeight) * rows.length));\r\n\t\t\tthis.scrollColumns(left);\r\n\t\t}else{\r\n\r\n\t\t\tif(dir){\r\n\t\t\t\t//scrolling up\r\n\t\t\t\tif(topDiff < 0){\r\n\t\t\t\t\tthis._addTopRow(rows, -topDiff);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(bottomDiff < 0){\r\n\t\t\t\t\t//hide bottom row if needed\r\n\t\t\t\t\tif(this.vDomScrollHeight - this.scrollTop > this.vDomWindowBuffer){\r\n\t\t\t\t\t\tthis._removeBottomRow(rows, -bottomDiff);\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tthis.vDomScrollPosBottom = this.scrollTop;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\r\n\t\t\t\tif(bottomDiff >= 0){\r\n\t\t\t\t\tthis._addBottomRow(rows, bottomDiff);\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//scrolling down\r\n\t\t\t\tif(topDiff >= 0){\r\n\t\t\t\t\t//hide top row if needed\r\n\t\t\t\t\tif(this.scrollTop > this.vDomWindowBuffer){\r\n\t\t\t\t\t\tthis._removeTopRow(rows, topDiff);\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tthis.vDomScrollPosTop = this.scrollTop;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tresize(){\r\n\t\tthis.vDomWindowBuffer = this.table.options.renderVerticalBuffer || this.elementVertical.clientHeight;\r\n\t}\r\n\r\n\tscrollToRowNearestTop(row){\r\n\t\tvar rowIndex = this.rows().indexOf(row);\r\n\r\n\t\treturn !(Math.abs(this.vDomTop - rowIndex) > Math.abs(this.vDomBottom - rowIndex));\r\n\t}\r\n\r\n\tscrollToRow(row){\r\n\t\tvar index = this.rows().indexOf(row);\r\n\r\n\t\tif(index > -1){\r\n\t\t\tthis._virtualRenderFill(index, true);\r\n\t\t}\r\n\t}\r\n\r\n\tvisibleRows(includingBuffer){\r\n\t\tvar topEdge = this.elementVertical.scrollTop,\r\n\t\tbottomEdge = this.elementVertical.clientHeight + topEdge,\r\n\t\ttopFound = false,\r\n\t\ttopRow = 0,\r\n\t\tbottomRow = 0,\r\n\t\trows = this.rows();\r\n\r\n\t\tif(includingBuffer){\r\n\t\t\ttopRow = this.vDomTop;\r\n\t\t\tbottomRow = this.vDomBottom;\r\n\t\t}else{\r\n\t\t\tfor(var i = this.vDomTop; i <= this.vDomBottom; i++){\r\n\t\t\t\tif(rows[i]){\r\n\t\t\t\t\tif(!topFound){\r\n\t\t\t\t\t\tif((topEdge - rows[i].getElement().offsetTop) >= 0){\r\n\t\t\t\t\t\t\ttopRow = i;\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\ttopFound = true;\r\n\r\n\t\t\t\t\t\t\tif(bottomEdge - rows[i].getElement().offsetTop >= 0){\r\n\t\t\t\t\t\t\t\tbottomRow = i;\r\n\t\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tif(bottomEdge - rows[i].getElement().offsetTop >= 0){\r\n\t\t\t\t\t\t\tbottomRow = i;\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn rows.slice(topRow, bottomRow + 1);\r\n\t}\r\n\r\n\t//////////////////////////////////////\r\n\t//////// Internal Rendering //////////\r\n\t//////////////////////////////////////\r\n\r\n\t//full virtual render\r\n\t_virtualRenderFill(position, forceMove, offset){\r\n\t\tvar\telement = this.tableElement,\r\n\t\tholder = this.elementVertical,\r\n\t\ttopPad = 0,\r\n\t\trowsHeight = 0,\r\n\t\theightOccupied = 0,\r\n\t\ttopPadHeight = 0,\r\n\t\ti = 0,\r\n\t\trows = this.rows(),\r\n\t\trowsCount = rows.length,\r\n\t\tcontainerHeight = this.elementVertical.clientHeight;\r\n\r\n\t\tposition = position || 0;\r\n\r\n\t\toffset = offset || 0;\r\n\r\n\t\tif(!position){\r\n\t\t\tthis.clear();\r\n\t\t}else{\r\n\t\t\twhile(element.firstChild) element.removeChild(element.firstChild);\r\n\r\n\t\t\t//check if position is too close to bottom of table\r\n\t\t\theightOccupied = (rowsCount - position + 1) * this.vDomRowHeight;\r\n\r\n\t\t\tif(heightOccupied < containerHeight){\r\n\t\t\t\tposition -= Math.ceil((containerHeight - heightOccupied) / this.vDomRowHeight);\r\n\t\t\t\tif(position < 0){\r\n\t\t\t\t\tposition = 0;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t//calculate initial pad\r\n\t\t\ttopPad = Math.min(Math.max(Math.floor(this.vDomWindowBuffer / this.vDomRowHeight), this.vDomWindowMinMarginRows), position);\r\n\t\t\tposition -= topPad;\r\n\t\t}\r\n\r\n\t\tif(rowsCount && Helpers.elVisible(this.elementVertical)){\r\n\t\t\tthis.vDomTop = position;\r\n\r\n\t\t\tthis.vDomBottom = position -1;\r\n\r\n\t\t\twhile ((rowsHeight <= containerHeight + this.vDomWindowBuffer || i < this.vDomWindowMinTotalRows) && this.vDomBottom < rowsCount -1){\r\n\t\t\t\tvar index = this.vDomBottom + 1,\r\n\t\t\t\trow = rows[index],\r\n\t\t\t\trowHeight = 0;\r\n\r\n\t\t\t\tthis.styleRow(row, index);\r\n\r\n\t\t\t\telement.appendChild(row.getElement());\r\n\r\n\t\t\t\trow.initialize();\r\n\r\n\t\t\t\tif(!row.heightInitialized){\r\n\t\t\t\t\trow.normalizeHeight(true);\r\n\t\t\t\t}\r\n\r\n\t\t\t\trowHeight = row.getHeight();\r\n\r\n\t\t\t\tif(i < topPad){\r\n\t\t\t\t\ttopPadHeight += rowHeight;\r\n\t\t\t\t}else{\r\n\t\t\t\t\trowsHeight += rowHeight;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(rowHeight > this.vDomWindowBuffer){\r\n\t\t\t\t\tthis.vDomWindowBuffer = rowHeight * 2;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.vDomBottom ++;\r\n\t\t\t\ti++;\r\n\t\t\t}\r\n\r\n\t\t\tif(!position){\r\n\t\t\t\tthis.vDomTopPad = 0;\r\n\t\t\t\t//adjust rowheight to match average of rendered elements\r\n\t\t\t\tthis.vDomRowHeight = Math.floor((rowsHeight + topPadHeight) / i);\r\n\t\t\t\tthis.vDomBottomPad = this.vDomRowHeight * (rowsCount - this.vDomBottom -1);\r\n\r\n\t\t\t\tthis.vDomScrollHeight = topPadHeight + rowsHeight + this.vDomBottomPad - containerHeight;\r\n\t\t\t}else{\r\n\t\t\t\tthis.vDomTopPad = !forceMove ? this.scrollTop - topPadHeight : (this.vDomRowHeight * this.vDomTop) + offset;\r\n\t\t\t\tthis.vDomBottomPad = this.vDomBottom == rowsCount-1 ? 0 : Math.max(this.vDomScrollHeight - this.vDomTopPad - rowsHeight - topPadHeight, 0);\r\n\t\t\t}\r\n\r\n\t\t\telement.style.paddingTop = this.vDomTopPad + \"px\";\r\n\t\t\telement.style.paddingBottom = this.vDomBottomPad + \"px\";\r\n\r\n\t\t\tif(forceMove){\r\n\t\t\t\tthis.scrollTop = this.vDomTopPad + (topPadHeight) + offset - (this.elementVertical.scrollWidth > this.elementVertical.clientWidth ? this.elementVertical.offsetHeight - containerHeight : 0);\r\n\t\t\t}\r\n\r\n\t\t\tthis.scrollTop = Math.min(this.scrollTop, this.elementVertical.scrollHeight - containerHeight);\r\n\r\n\t\t\t//adjust for horizontal scrollbar if present (and not at top of table)\r\n\t\t\tif(this.elementVertical.scrollWidth > this.elementVertical.offsetWidth && forceMove){\r\n\t\t\t\tthis.scrollTop += this.elementVertical.offsetHeight - containerHeight;\r\n\t\t\t}\r\n\r\n\t\t\tthis.vDomScrollPosTop = this.scrollTop;\r\n\t\t\tthis.vDomScrollPosBottom = this.scrollTop;\r\n\r\n\t\t\tholder.scrollTop = this.scrollTop;\r\n\r\n\t\t\tthis.dispatch(\"render-virtual-fill\");\r\n\t\t}\r\n\t}\r\n\r\n\t_addTopRow(rows, fillableSpace){\r\n\t\tvar table = this.tableElement,\r\n\t\taddedRows = [],\r\n\t\tpaddingAdjust = 0,\r\n\t\tindex = this.vDomTop -1,\r\n\t\ti = 0;\r\n\r\n\t\twhile(true){\r\n\t\t\tif(this.vDomTop){\r\n\t\t\t\tlet row = rows[index],\r\n\t\t\t\trowHeight, initialized;\r\n\r\n\t\t\t\tif(row && i < this.vDomMaxRenderChain){\r\n\t\t\t\t\trowHeight = row.getHeight() || this.vDomRowHeight;\r\n\t\t\t\t\tinitialized = row.initialized;\r\n\r\n\t\t\t\t\tif(fillableSpace >= rowHeight){\r\n\r\n\t\t\t\t\t\tthis.styleRow(row, index);\r\n\t\t\t\t\t\ttable.insertBefore(row.getElement(), table.firstChild);\r\n\r\n\t\t\t\t\t\tif(!row.initialized || !row.heightInitialized){\r\n\t\t\t\t\t\t\taddedRows.push(row);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\trow.initialize();\r\n\r\n\t\t\t\t\t\tif(!initialized){\r\n\t\t\t\t\t\t\trowHeight = row.getElement().offsetHeight;\r\n\r\n\t\t\t\t\t\t\tif(rowHeight > this.vDomWindowBuffer){\r\n\t\t\t\t\t\t\t\tthis.vDomWindowBuffer = rowHeight * 2;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tfillableSpace -= rowHeight;\r\n\t\t\t\t\t\tpaddingAdjust += rowHeight;\r\n\r\n\t\t\t\t\t\tthis.vDomTop--;\r\n\t\t\t\t\t\tindex--;\r\n\t\t\t\t\t\ti++;\r\n\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}else{\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\r\n\t\t\t}else{\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfor (let row of addedRows){\r\n\t\t\trow.clearCellHeight();\r\n\t\t}\r\n\r\n\t\tthis._quickNormalizeRowHeight(addedRows);\r\n\r\n\t\tif(paddingAdjust){\r\n\t\t\tthis.vDomTopPad -= paddingAdjust;\r\n\r\n\t\t\tif(this.vDomTopPad < 0){\r\n\t\t\t\tthis.vDomTopPad = index * this.vDomRowHeight;\r\n\t\t\t}\r\n\r\n\t\t\tif(index < 1){\r\n\t\t\t\tthis.vDomTopPad = 0;\r\n\t\t\t}\r\n\r\n\t\t\ttable.style.paddingTop = this.vDomTopPad + \"px\";\r\n\t\t\tthis.vDomScrollPosTop -= paddingAdjust;\r\n\t\t}\r\n\t}\r\n\r\n\t_removeTopRow(rows, fillableSpace){\r\n\t\tvar removableRows = [],\r\n\t\tpaddingAdjust = 0,\r\n\t\ti = 0;\r\n\r\n\t\twhile(true){\r\n\t\t\tlet row = rows[this.vDomTop],\r\n\t\t\trowHeight, diff;\r\n\r\n\t\t\tif(row && i < this.vDomMaxRenderChain){\r\n\t\t\t\trowHeight = row.getHeight() || this.vDomRowHeight;\r\n\r\n\t\t\t\tif(fillableSpace >= rowHeight){\r\n\t\t\t\t\tthis.vDomTop++;\r\n\r\n\t\t\t\t\tfillableSpace -= rowHeight;\r\n\t\t\t\t\tpaddingAdjust += rowHeight;\r\n\r\n\t\t\t\t\tremovableRows.push(row);\r\n\t\t\t\t\ti++;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfor (let row of removableRows){\r\n\t\t\tlet rowEl = row.getElement();\r\n\r\n\t\t\tif(rowEl.parentNode){\r\n\t\t\t\trowEl.parentNode.removeChild(rowEl);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(paddingAdjust){\r\n\t\t\tthis.vDomTopPad += paddingAdjust;\r\n\t\t\tthis.tableElement.style.paddingTop = this.vDomTopPad + \"px\";\r\n\t\t\tthis.vDomScrollPosTop += this.vDomTop ? paddingAdjust : paddingAdjust + this.vDomWindowBuffer;\r\n\t\t}\r\n\t}\r\n\r\n\t_addBottomRow(rows, fillableSpace){\r\n\t\tvar table = this.tableElement,\r\n\t\taddedRows = [],\r\n\t\tpaddingAdjust = 0,\r\n\t\tindex = this.vDomBottom + 1,\r\n\t\ti = 0;\r\n\r\n\t\twhile(true){\r\n\t\t\tlet row = rows[index],\r\n\t\t\trowHeight, initialized;\r\n\r\n\t\t\tif(row && i < this.vDomMaxRenderChain){\r\n\t\t\t\trowHeight = row.getHeight() || this.vDomRowHeight;\r\n\t\t\t\tinitialized = row.initialized;\r\n\r\n\t\t\t\tif(fillableSpace >= rowHeight){\r\n\r\n\t\t\t\t\tthis.styleRow(row, index);\r\n\t\t\t\t\ttable.appendChild(row.getElement());\r\n\r\n\t\t\t\t\tif(!row.initialized || !row.heightInitialized){\r\n\t\t\t\t\t\taddedRows.push(row);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\trow.initialize();\r\n\r\n\t\t\t\t\tif(!initialized){\r\n\t\t\t\t\t\trowHeight = row.getElement().offsetHeight;\r\n\r\n\t\t\t\t\t\tif(rowHeight > this.vDomWindowBuffer){\r\n\t\t\t\t\t\t\tthis.vDomWindowBuffer = rowHeight * 2;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tfillableSpace -= rowHeight;\r\n\t\t\t\t\tpaddingAdjust += rowHeight;\r\n\r\n\t\t\t\t\tthis.vDomBottom++;\r\n\t\t\t\t\tindex++;\r\n\t\t\t\t\ti++;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfor (let row of addedRows){\r\n\t\t\trow.clearCellHeight();\r\n\t\t}\r\n\r\n\t\tthis._quickNormalizeRowHeight(addedRows);\r\n\r\n\t\tif(paddingAdjust){\r\n\t\t\tthis.vDomBottomPad -= paddingAdjust;\r\n\r\n\t\t\tif(this.vDomBottomPad < 0 || index == rows.length -1){\r\n\t\t\t\tthis.vDomBottomPad = 0;\r\n\t\t\t}\r\n\r\n\t\t\ttable.style.paddingBottom = this.vDomBottomPad + \"px\";\r\n\t\t\tthis.vDomScrollPosBottom += paddingAdjust;\r\n\t\t}\r\n\t}\r\n\r\n\t_removeBottomRow(rows, fillableSpace){\r\n\t\tvar removableRows = [],\r\n\t\tpaddingAdjust = 0,\r\n\t\ti = 0;\r\n\r\n\t\twhile(true){\r\n\t\t\tlet row = rows[this.vDomBottom],\r\n\t\t\trowHeight, diff;\r\n\r\n\t\t\tif(row && i < this.vDomMaxRenderChain){\r\n\t\t\t\trowHeight = row.getHeight() || this.vDomRowHeight;\r\n\r\n\t\t\t\tif(fillableSpace >= rowHeight){\r\n\t\t\t\t\tthis.vDomBottom --;\r\n\r\n\t\t\t\t\tfillableSpace -= rowHeight;\r\n\t\t\t\t\tpaddingAdjust += rowHeight;\r\n\r\n\t\t\t\t\tremovableRows.push(row);\r\n\t\t\t\t\ti++;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfor (let row of removableRows){\r\n\t\t\tlet rowEl = row.getElement();\r\n\r\n\t\t\tif(rowEl.parentNode){\r\n\t\t\t\trowEl.parentNode.removeChild(rowEl);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(paddingAdjust){\r\n\t\t\tthis.vDomBottomPad += paddingAdjust;\r\n\r\n\t\t\tif(this.vDomBottomPad < 0){\r\n\t\t\t\tthis.vDomBottomPad = 0;\r\n\t\t\t}\r\n\r\n\t\t\tthis.tableElement.style.paddingBottom = this.vDomBottomPad + \"px\";\r\n\t\t\tthis.vDomScrollPosBottom -= paddingAdjust;\r\n\t\t}\r\n\t}\r\n\r\n\t_quickNormalizeRowHeight(rows){\r\n\t\tfor(let row of rows){\r\n\t\t\trow.calcHeight();\r\n\t\t}\r\n\r\n\t\tfor(let row of rows){\r\n\t\t\trow.setCellHeight();\r\n\t\t}\r\n\t}\r\n}","import CoreFeature from './CoreFeature.js';\r\nimport Row from './row/Row.js';\r\nimport RowComponent from './row/RowComponent.js';\r\nimport Helpers from './tools/Helpers.js';\r\n\r\nimport RendererBasicVertical from './rendering/renderers/BasicVertical.js';\r\nimport RendererVirtualDomVertical from './rendering/renderers/VirtualDomVertical.js';\r\n\r\nexport default class RowManager extends CoreFeature{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.element = this.createHolderElement(); //containing element\r\n\t\tthis.tableElement = this.createTableElement(); //table element\r\n\t\tthis.heightFixer = this.createTableElement(); //table element\r\n\r\n\t\tthis.firstRender = false; //handle first render\r\n\t\tthis.renderMode = \"virtual\"; //current rendering mode\r\n\t\tthis.fixedHeight = false; //current rendering mode\r\n\r\n\t\tthis.rows = []; //hold row data objects\r\n\t\tthis.activeRowsPipeline = []; //hold caluclation of active rows\r\n\t\tthis.activeRows = []; //rows currently available to on display in the table\r\n\t\tthis.activeRowsCount = 0; //count of active rows\r\n\r\n\t\tthis.displayRows = []; //rows currently on display in the table\r\n\t\tthis.displayRowsCount = 0; //count of display rows\r\n\r\n\t\tthis.scrollTop = 0;\r\n\t\tthis.scrollLeft = 0;\r\n\r\n\t\tthis.rowNumColumn = false; //hold column component for row number column\r\n\r\n\t\tthis.redrawBlock = false; //prevent redraws to allow multiple data manipulations becore continuing\r\n\t\tthis.redrawBlockRestoreConfig = false; //store latest redraw function calls for when redraw is needed\r\n\t\tthis.redrawBlockRederInPosition = false; //store latest redraw function calls for when redraw is needed\r\n\r\n\t\tthis.dataPipeline = []; //hold data pipeline tasks\r\n\t\tthis.displayPipeline = []; //hold data display pipeline tasks\r\n\r\n\t\tthis.renderer = null;\r\n\t}\r\n\r\n\t//////////////// Setup Functions /////////////////\r\n\r\n\tcreateHolderElement (){\r\n\t\tvar el = document.createElement(\"div\");\r\n\r\n\t\tel.classList.add(\"tabulator-tableHolder\");\r\n\t\tel.setAttribute(\"tabindex\", 0);\r\n\r\n\t\treturn el;\r\n\t}\r\n\r\n\tcreateTableElement (){\r\n\t\tvar el = document.createElement(\"div\");\r\n\r\n\t\tel.classList.add(\"tabulator-table\");\r\n\r\n\t\treturn el;\r\n\t}\r\n\r\n\t//return containing element\r\n\tgetElement(){\r\n\t\treturn this.element;\r\n\t}\r\n\r\n\t//return table element\r\n\tgetTableElement(){\r\n\t\treturn this.tableElement;\r\n\t}\r\n\r\n\t//return position of row in table\r\n\tgetRowPosition(row, active){\r\n\t\tif(active){\r\n\t\t\treturn this.activeRows.indexOf(row);\r\n\t\t}else{\r\n\t\t\treturn this.rows.indexOf(row);\r\n\t\t}\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tthis.initializeRenderer();\r\n\r\n\t\t//initialize manager\r\n\t\tthis.element.appendChild(this.tableElement);\r\n\r\n\t\tthis.firstRender = true;\r\n\r\n\t\t//scroll header along with table body\r\n\t\tthis.element.addEventListener(\"scroll\", () => {\r\n\t\t\tvar left = this.element.scrollLeft,\r\n\t\t\tleftDir = this.scrollLeft > left,\r\n\t\t\ttop = this.element.scrollTop,\r\n\t\t\ttopDir = this.scrollTop > top;\r\n\r\n\t\t\t//handle horizontal scrolling\r\n\t\t\tif(this.scrollLeft != left){\r\n\t\t\t\tthis.scrollLeft = left;\r\n\r\n\t\t\t\tthis.dispatch(\"scroll-horizontal\", left, leftDir);\r\n\t\t\t\tthis.dispatchExternal(\"scrollHorizontal\", left, leftDir);\r\n\t\t\t}\r\n\r\n\t\t\t//handle verical scrolling\r\n\t\t\tif(this.scrollTop != top){\r\n\t\t\t\tthis.scrollTop = top;\r\n\r\n\t\t\t\tthis.renderer.scrollRows(top, topDir);\r\n\r\n\t\t\t\tthis.dispatch(\"scroll-vertical\", top, topDir);\r\n\t\t\t\tthis.dispatchExternal(\"scrollVertical\", top, topDir);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t////////////////// Row Manipulation //////////////////\r\n\tfindRow(subject){\r\n\t\tif(typeof subject == \"object\"){\r\n\t\t\tif(subject instanceof Row){\r\n\t\t\t\t//subject is row element\r\n\t\t\t\treturn subject;\r\n\t\t\t}else if(subject instanceof RowComponent){\r\n\t\t\t\t//subject is public row component\r\n\t\t\t\treturn subject._getSelf() || false;\r\n\t\t\t}else if(typeof HTMLElement !== \"undefined\" && subject instanceof HTMLElement){\r\n\t\t\t\t//subject is a HTML element of the row\r\n\t\t\t\tlet match = this.rows.find((row) => {\r\n\t\t\t\t\treturn row.getElement() === subject;\r\n\t\t\t\t});\r\n\r\n\t\t\t\treturn match || false;\r\n\t\t\t}\r\n\t\t}else if(typeof subject == \"undefined\" || subject === null){\r\n\t\t\treturn false;\r\n\t\t}else{\r\n\t\t\t//subject should be treated as the index of the row\r\n\t\t\tlet match = this.rows.find((row) => {\r\n\t\t\t\treturn row.data[this.table.options.index] == subject;\r\n\t\t\t});\r\n\r\n\t\t\treturn match || false;\r\n\t\t}\r\n\r\n\t\t//catch all for any other type of input\r\n\t\treturn false;\r\n\t}\r\n\r\n\tgetRowFromDataObject(data){\r\n\t\tvar match = this.rows.find((row) => {\r\n\t\t\treturn row.data === data;\r\n\t\t});\r\n\r\n\t\treturn match || false;\r\n\t}\r\n\r\n\tgetRowFromPosition(position, active){\r\n\t\tif(active){\r\n\t\t\treturn this.activeRows[position];\r\n\t\t}else{\r\n\t\t\treturn this.rows[position];\r\n\t\t}\r\n\t}\r\n\r\n\tscrollToRow(row, position, ifVisible){\r\n\t\treturn this.renderer.scrollToRowPosition(row, position, ifVisible);\r\n\t}\r\n\r\n\t////////////////// Data Handling //////////////////\r\n\tsetData(data, renderInPosition, columnsChanged){\r\n\t\treturn new Promise((resolve, reject)=>{\r\n\t\t\tif(renderInPosition && this.getDisplayRows().length){\r\n\t\t\t\tif(this.table.options.pagination){\r\n\t\t\t\t\tthis._setDataActual(data, true);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tthis.reRenderInPosition(() => {\r\n\t\t\t\t\t\tthis._setDataActual(data);\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tif(this.table.options.autoColumns && columnsChanged){\r\n\t\t\t\t\tthis.table.columnManager.generateColumnsFromRowData(data);\r\n\t\t\t\t}\r\n\t\t\t\tthis.resetScroll();\r\n\r\n\t\t\t\tthis._setDataActual(data);\r\n\r\n\t\t\t}\r\n\r\n\t\t\tresolve();\r\n\t\t});\r\n\t}\r\n\r\n\t_setDataActual(data, renderInPosition){\r\n\t\tthis.dispatchExternal(\"dataProcessing\", data);\r\n\r\n\t\tthis._wipeElements();\r\n\r\n\t\tif(Array.isArray(data)){\r\n\t\t\tthis.dispatch(\"data-processing\", data);\r\n\r\n\t\t\tdata.forEach((def, i) => {\r\n\t\t\t\tif(def && typeof def === \"object\"){\r\n\t\t\t\t\tvar row = new Row(def, this);\r\n\t\t\t\t\tthis.rows.push(row);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.warn(\"Data Loading Warning - Invalid row data detected and ignored, expecting object but received:\", def);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tthis.refreshActiveData(false, false, renderInPosition);\r\n\r\n\t\t\tthis.dispatch(\"data-processed\", data);\r\n\t\t\tthis.dispatchExternal(\"dataProcesed\", data);\r\n\t\t}else{\r\n\t\t\tconsole.error(\"Data Loading Error - Unable to process data due to invalid data type \\nExpecting: array \\nReceived: \", typeof data, \"\\nData: \", data);\r\n\t\t}\r\n\t}\r\n\r\n\t_wipeElements(){\r\n\t\tthis.dispatch(\"rows-wipe\");\r\n\r\n\t\tthis.rows.forEach((row) => {\r\n\t\t\trow.wipe();\r\n\t\t});\r\n\r\n\t\tthis.rows = [];\r\n\t\tthis.activeRows = [];\r\n\t\tthis.activeRowsPipeline = [];\r\n\t\tthis.activeRowsCount = 0;\r\n\t\tthis.displayRows = [];\r\n\t\tthis.displayRowsCount = 0;\r\n\r\n\t\tthis.adjustTableSize();\r\n\t}\r\n\r\n\tdeleteRow(row, blockRedraw){\r\n\t\tvar allIndex = this.rows.indexOf(row),\r\n\t\tactiveIndex = this.activeRows.indexOf(row);\r\n\r\n\t\tif(activeIndex > -1){\r\n\t\t\tthis.activeRows.splice(activeIndex, 1);\r\n\t\t}\r\n\r\n\t\tif(allIndex > -1){\r\n\t\t\tthis.rows.splice(allIndex, 1);\r\n\t\t}\r\n\r\n\t\tthis.setActiveRows(this.activeRows);\r\n\r\n\t\tthis.displayRowIterator((rows) => {\r\n\t\t\tvar displayIndex = rows.indexOf(row);\r\n\r\n\t\t\tif(displayIndex > -1){\r\n\t\t\t\trows.splice(displayIndex, 1);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tif(!blockRedraw){\r\n\t\t\tthis.reRenderInPosition();\r\n\t\t}\r\n\r\n\t\tthis.regenerateRowNumbers();\r\n\r\n\t\tthis.dispatchExternal(\"rowDeleted\", row.getComponent());\r\n\r\n\t\tif(this.subscribedExternal(\"dataChanged\")){\r\n\t\t\tthis.dispatchExternal(\"dataChanged\", this.getData());\r\n\t\t}\r\n\t}\r\n\r\n\taddRow(data, pos, index, blockRedraw){\r\n\t\tvar row = this.addRowActual(data, pos, index, blockRedraw);\r\n\r\n\t\tthis.dispatch(\"row-added\", row, data, pos, index);\r\n\r\n\t\treturn row;\r\n\t}\r\n\r\n\t//add multiple rows\r\n\taddRows(data, pos, index){\r\n\t\tvar length = 0,\r\n\t\trows = [];\r\n\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tpos = this.findAddRowPos(pos);\r\n\r\n\t\t\tif(!Array.isArray(data)){\r\n\t\t\t\tdata = [data];\r\n\t\t\t}\r\n\r\n\t\t\tlength = data.length - 1;\r\n\r\n\t\t\tif((typeof index == \"undefined\" && pos) || (typeof index !== \"undefined\" && !pos)){\r\n\t\t\t\tdata.reverse();\r\n\t\t\t}\r\n\r\n\t\t\tdata.forEach((item, i) => {\r\n\t\t\t\tvar row = this.addRow(item, pos, index, true);\r\n\t\t\t\trows.push(row);\r\n\t\t\t});\r\n\r\n\t\t\tif(this.subscribed(\"row-added\")){\r\n\t\t\t\tthis.dispatch(\"row-added\", row, data, pos, index);\r\n\t\t\t}else{\r\n\t\t\t\tthis.reRenderInPosition();\r\n\t\t\t}\r\n\r\n\t\t\tthis.regenerateRowNumbers();\r\n\r\n\t\t\tresolve(rows);\r\n\t\t});\r\n\t}\r\n\r\n\tfindAddRowPos(pos){\r\n\t\tif(typeof pos === \"undefined\"){\r\n\t\t\tpos = this.table.options.addRowPos;\r\n\t\t}\r\n\r\n\t\tif(pos === \"pos\"){\r\n\t\t\tpos = true;\r\n\t\t}\r\n\r\n\t\tif(pos === \"bottom\"){\r\n\t\t\tpos = false;\r\n\t\t}\r\n\r\n\t\treturn pos;\r\n\t}\r\n\r\n\taddRowActual(data, pos, index, blockRedraw){\r\n\t\tvar row = data instanceof Row ? data : new Row(data || {}, this),\r\n\t\ttop = this.findAddRowPos(pos),\r\n\t\tallIndex = -1,\r\n\t\tactiveIndex, chainResult;\r\n\r\n\t\tif(!index){\r\n\t\t\tchainResult = this.chain(\"row-adding-position\", [row, top], null, {index, top});\r\n\r\n\t\t\tindex = chainResult.index;\r\n\t\t\ttop = chainResult.top;\r\n\t\t}\r\n\r\n\t\tif(typeof index !== \"undefined\"){\r\n\t\t\tindex = this.findRow(index);\r\n\t\t}\r\n\r\n\t\tindex = this.chain(\"row-adding-index\", [row, index, top], null, index);\r\n\r\n\t\tif(index){\r\n\t\t\tallIndex = this.rows.indexOf(index);\r\n\t\t}\r\n\r\n\t\tif(index && allIndex > -1){\r\n\t\t\tactiveIndex = this.activeRows.indexOf(index);\r\n\r\n\t\t\tthis.displayRowIterator(function(rows){\r\n\t\t\t\tvar displayIndex = rows.indexOf(index);\r\n\r\n\t\t\t\tif(displayIndex > -1){\r\n\t\t\t\t\trows.splice((top ? displayIndex : displayIndex + 1), 0, row);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tif(activeIndex > -1){\r\n\t\t\t\tthis.activeRows.splice((top ? activeIndex : activeIndex + 1), 0, row);\r\n\t\t\t}\r\n\r\n\t\t\tthis.rows.splice((top ? allIndex : allIndex + 1), 0, row);\r\n\r\n\t\t}else{\r\n\r\n\t\t\tif(top){\r\n\r\n\t\t\t\tthis.displayRowIterator(function(rows){\r\n\t\t\t\t\trows.unshift(row);\r\n\t\t\t\t});\r\n\r\n\t\t\t\tthis.activeRows.unshift(row);\r\n\t\t\t\tthis.rows.unshift(row);\r\n\t\t\t}else{\r\n\t\t\t\tthis.displayRowIterator(function(rows){\r\n\t\t\t\t\trows.push(row);\r\n\t\t\t\t});\r\n\r\n\t\t\t\tthis.activeRows.push(row);\r\n\t\t\t\tthis.rows.push(row);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.setActiveRows(this.activeRows);\r\n\r\n\t\tthis.dispatchExternal(\"rowAdded\", row.getComponent());\r\n\r\n\t\tif(this.subscribedExternal(\"dataChanged\")){\r\n\t\t\tthis.dispatchExternal(\"dataChanged\", this.table.rowManager.getData());\r\n\t\t}\r\n\r\n\t\tif(!blockRedraw){\r\n\t\t\tthis.reRenderInPosition();\r\n\t\t}\r\n\r\n\t\treturn row;\r\n\t}\r\n\r\n\tmoveRow(from, to, after){\r\n\t\tthis.dispatch(\"row-move\", from, to, after);\r\n\r\n\t\tthis.moveRowActual(from, to, after);\r\n\r\n\t\tthis.regenerateRowNumbers();\r\n\r\n\t\tthis.dispatch(\"row-moved\", from, to, after);\r\n\t\tthis.dispatchExternal(\"rowMoved\", from.getComponent());\r\n\t}\r\n\r\n\tmoveRowActual(from, to, after){\r\n\t\tthis.moveRowInArray(this.rows, from, to, after);\r\n\t\tthis.moveRowInArray(this.activeRows, from, to, after);\r\n\r\n\t\tthis.displayRowIterator((rows) => {\r\n\t\t\tthis.moveRowInArray(rows, from, to, after);\r\n\t\t});\r\n\r\n\t\tthis.dispatch(\"row-moving\", from, to, after);\r\n\t}\r\n\r\n\tmoveRowInArray(rows, from, to, after){\r\n\t\tvar\tfromIndex, toIndex, start, end;\r\n\r\n\t\tif(from !== to){\r\n\r\n\t\t\tfromIndex = rows.indexOf(from);\r\n\r\n\t\t\tif (fromIndex > -1) {\r\n\r\n\t\t\t\trows.splice(fromIndex, 1);\r\n\r\n\t\t\t\ttoIndex = rows.indexOf(to);\r\n\r\n\t\t\t\tif (toIndex > -1) {\r\n\r\n\t\t\t\t\tif(after){\r\n\t\t\t\t\t\trows.splice(toIndex+1, 0, from);\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\trows.splice(toIndex, 0, from);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}else{\r\n\t\t\t\t\trows.splice(fromIndex, 0, from);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t//restyle rows\r\n\t\t\tif(rows === this.getDisplayRows()){\r\n\r\n\t\t\t\tstart = fromIndex < toIndex ? fromIndex : toIndex;\r\n\t\t\t\tend = toIndex > fromIndex ? toIndex : fromIndex +1;\r\n\r\n\t\t\t\tfor(let i = start; i <= end; i++){\r\n\t\t\t\t\tif(rows[i]){\r\n\t\t\t\t\t\tthis.styleRow(rows[i], i);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tclearData(){\r\n\t\tthis.setData([]);\r\n\t}\r\n\r\n\tgetRowIndex(row){\r\n\t\treturn this.findRowIndex(row, this.rows);\r\n\t}\r\n\r\n\tgetDisplayRowIndex(row){\r\n\t\tvar index = this.getDisplayRows().indexOf(row);\r\n\t\treturn index > -1 ? index : false;\r\n\t}\r\n\r\n\tnextDisplayRow(row, rowOnly){\r\n\t\tvar index = this.getDisplayRowIndex(row),\r\n\t\tnextRow = false;\r\n\r\n\r\n\t\tif(index !== false && index < this.displayRowsCount -1){\r\n\t\t\tnextRow = this.getDisplayRows()[index+1];\r\n\t\t}\r\n\r\n\t\tif(nextRow && (!(nextRow instanceof Row) || nextRow.type != \"row\")){\r\n\t\t\treturn this.nextDisplayRow(nextRow, rowOnly);\r\n\t\t}\r\n\r\n\t\treturn nextRow;\r\n\t}\r\n\r\n\tprevDisplayRow(row, rowOnly){\r\n\t\tvar index = this.getDisplayRowIndex(row),\r\n\t\tprevRow = false;\r\n\r\n\t\tif(index){\r\n\t\t\tprevRow = this.getDisplayRows()[index-1];\r\n\t\t}\r\n\r\n\t\tif(rowOnly && prevRow && (!(prevRow instanceof Row) || prevRow.type != \"row\")){\r\n\t\t\treturn this.prevDisplayRow(prevRow, rowOnly);\r\n\t\t}\r\n\r\n\t\treturn prevRow;\r\n\t}\r\n\r\n\tfindRowIndex(row, list){\r\n\t\tvar rowIndex;\r\n\r\n\t\trow = this.findRow(row);\r\n\r\n\t\tif(row){\r\n\t\t\trowIndex = list.indexOf(row);\r\n\r\n\t\t\tif(rowIndex > -1){\r\n\t\t\t\treturn rowIndex;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t}\r\n\r\n\tgetData(active, transform){\r\n\t\tvar output = [],\r\n\t\trows = this.getRows(active);\r\n\r\n\t\trows.forEach(function(row){\r\n\t\t\tif(row.type == \"row\"){\r\n\t\t\t\toutput.push(row.getData(transform || \"data\"));\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tgetComponents(active){\r\n\t\tvar\toutput = [],\r\n\t\trows = this.getRows(active);\r\n\r\n\t\trows.forEach(function(row){\r\n\t\t\toutput.push(row.getComponent());\r\n\t\t});\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tgetDataCount(active){\r\n\t\tvar rows = this.getRows(active);\r\n\r\n\t\treturn rows.length;\r\n\t}\r\n\r\n\tscrollHorizontal(left){\r\n\t\tthis.scrollLeft = left;\r\n\t\tthis.element.scrollLeft = left;\r\n\r\n\t\tthis.dispatch(\"scroll-horizontal\", left);\r\n\t}\r\n\r\n\tregisterDataPipelineHandler(handler, priority){\r\n\t\tif(typeof priority !== \"undefined\"){\r\n\t\t\tthis.dataPipeline.push({handler, priority})\r\n\t\t\tthis.dataPipeline.sort((a, b) => {\r\n\t\t\t\treturn a.priority - b.priority;\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tconsole.error(\"Data pipeline handlers must have a priority in order to be registered\")\r\n\t\t}\r\n\t}\r\n\r\n\tregisterDisplayPipelineHandler(handler, priority){\r\n\t\tif(typeof priority !== \"undefined\"){\r\n\t\t\tthis.displayPipeline.push({handler, priority})\r\n\t\t\tthis.displayPipeline.sort((a, b) => {\r\n\t\t\t\treturn a.priority - b.priority;\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tconsole.error(\"Display pipeline handlers must have a priority in order to be registered\")\r\n\t\t}\r\n\t}\r\n\r\n\t//set active data set\r\n\trefreshActiveData(handler, skipStage, renderInPosition){\r\n\t\tvar table = this.table,\r\n\t\tstage = \"\",\r\n\t\tindex = 0,\r\n\t\tcascadeOrder = [\"all\", \"dataPipeline\", \"display\", \"displayPipeline\", \"end\"],\r\n\t\tdisplayIndex;\r\n\r\n\r\n\t\tif(typeof handler === \"function\"){\r\n\t\t\tindex = this.dataPipeline.findIndex((item) => {\r\n\t\t\t\treturn item.handler === handler;\r\n\t\t\t});\r\n\r\n\t\t\tif(index > -1){\r\n\t\t\t\tstage = \"dataPipeline\";\r\n\r\n\t\t\t\tif(skipStage){\r\n\t\t\t\t\tif(index == this.dataPipeline.length - 1){\r\n\t\t\t\t\t\tstage = \"display\";\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tindex++;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tindex = this.displayPipeline.findIndex((item) => {\r\n\t\t\t\t\treturn item.handler === handler;\r\n\t\t\t\t});\r\n\r\n\t\t\t\tif(index > -1){\r\n\t\t\t\t\tstage = \"displayPipeline\";\r\n\r\n\t\t\t\t\tif(skipStage){\r\n\t\t\t\t\t\tif(index == this.displayPipeline.length - 1){\r\n\t\t\t\t\t\t\tstage = \"end\";\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\tindex++;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.error(\"Unable to refresh data, invalid handler provided\", handler)\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tstage = handler || \"all\";\r\n\t\t\tindex = 0;\r\n\t\t}\r\n\r\n\t\tif(this.redrawBlock){\r\n\t\t\tif(!this.redrawBlockRestoreConfig || (this.redrawBlockRestoreConfig && ((this.redrawBlockRestoreConfig.stage === stage && index < this.redrawBlockRestoreConfig.index) || (cascadeOrder.indexOf(stage) < cascadeOrder.indexOf(this.redrawBlockRestoreConfig.stage))))){\r\n\t\t\t\tthis.redrawBlockRestoreConfig = {\r\n\t\t\t\t\thandler: handler,\r\n\t\t\t\t\tskipStage: skipStage,\r\n\t\t\t\t\trenderInPosition: renderInPosition,\r\n\t\t\t\t\tstage:stage,\r\n\t\t\t\t\tindex:index,\r\n\t\t\t\t};\r\n\t\t\t}\r\n\r\n\t\t\treturn;\r\n\t\t}else{\r\n\t\t\tthis.dispatch(\"data-refeshing\");\r\n\r\n\t\t\tif(!handler){\r\n\t\t\t\tthis.activeRowsPipeline[0] = this.rows.slice(0);\r\n\t\t\t}\r\n\r\n\t\t\t//cascade through data refresh stages\r\n\t\t\tswitch(stage){\r\n\t\t\t\tcase \"all\":\r\n\t\t\t\t//handle case where alldata needs refreshing\r\n\r\n\t\t\t\tcase \"dataPipeline\":\r\n\r\n\t\t\t\tfor(let i = index; i < this.dataPipeline.length; i++){\r\n\t\t\t\t\tlet result = this.dataPipeline[i].handler(this.activeRowsPipeline[i].slice(0));\r\n\r\n\t\t\t\t\tthis.activeRowsPipeline[i + 1] = result || this.activeRowsPipeline[i].slice(0);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.setActiveRows(this.activeRowsPipeline[this.dataPipeline.length]);\r\n\r\n\t\t\t\tthis.regenerateRowNumbers();\r\n\r\n\t\t\t\tcase \"display\":\r\n\t\t\t\tindex = 0;\r\n\t\t\t\tthis.resetDisplayRows();\r\n\r\n\t\t\t\tcase \"displayPipeline\":\r\n\t\t\t\tfor(let i = index; i < this.displayPipeline.length; i++){\r\n\t\t\t\t\tlet result = this.displayPipeline[i].handler((i ? this.getDisplayRows(i - 1) : this.activeRows).slice(0), renderInPosition);\r\n\r\n\t\t\t\t\tthis.setDisplayRows(result || this.getDisplayRows(i - 1).slice(0), i);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tcase \"end\":\r\n\t\t\t\t//case to handle scenario when trying to skip past end stage\r\n\t\t\t}\r\n\r\n\t\t\tif(Helpers.elVisible(this.element)){\r\n\t\t\t\tif(renderInPosition){\r\n\t\t\t\t\tthis.reRenderInPosition();\r\n\t\t\t\t}else{\r\n\r\n\t\t\t\t\tif(!handler){\r\n\t\t\t\t\t\tthis.table.columnManager.renderer.renderColumns();\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tthis.renderTable();\r\n\r\n\t\t\t\t\tif(table.options.layoutColumnsOnNewData){\r\n\t\t\t\t\t\tthis.table.columnManager.redraw(true);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tthis.dispatch(\"data-refeshed\");\r\n\t\t}\r\n\t}\r\n\r\n\t//regenerate row numbers for row number formatter if in use\r\n\tregenerateRowNumbers(){\r\n\t\tif(this.rowNumColumn){\r\n\t\t\tthis.activeRows.forEach((row) => {\r\n\t\t\t\tvar cell = row.getCell(this.rowNumColumn);\r\n\r\n\t\t\t\tif(cell){\r\n\t\t\t\t\tcell._generateContents();\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tsetActiveRows(activeRows){\r\n\t\tthis.activeRows = activeRows;\r\n\t\tthis.activeRowsCount = this.activeRows.length;\r\n\t}\r\n\r\n\t//reset display rows array\r\n\tresetDisplayRows(){\r\n\t\tthis.displayRows = [];\r\n\r\n\t\tthis.displayRows.push(this.activeRows.slice(0));\r\n\r\n\t\tthis.displayRowsCount = this.displayRows[0].length;\r\n\t}\r\n\r\n\tgetNextDisplayIndex(){\r\n\t\treturn this.displayRows.length;\r\n\t}\r\n\r\n\t//set display row pipeline data\r\n\tsetDisplayRows(displayRows, index){\r\n\r\n\t\tvar output = true;\r\n\r\n\t\tif(index && typeof this.displayRows[index] != \"undefined\"){\r\n\t\t\tthis.displayRows[index] = displayRows;\r\n\t\t\toutput = true;\r\n\t\t}else{\r\n\t\t\tthis.displayRows.push(displayRows)\r\n\t\t\toutput = index = this.displayRows.length -1;\r\n\t\t}\r\n\r\n\t\tif(index == this.displayRows.length -1){\r\n\t\t\tthis.displayRowsCount = this.displayRows[this.displayRows.length -1].length;\r\n\t\t}\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tgetDisplayRows(index){\r\n\t\tif(typeof index == \"undefined\"){\r\n\t\t\treturn this.displayRows.length ? this.displayRows[this.displayRows.length -1] : [];\r\n\t\t}else{\r\n\t\t\treturn this.displayRows[index] || [];\r\n\t\t}\r\n\t}\r\n\r\n\tgetVisibleRows(viewable){\r\n\t\treturn this.renderer.visibleRows(!viewable);\r\n\t}\r\n\r\n\t//repeat action accross display rows\r\n\tdisplayRowIterator(callback){\r\n\t\tthis.activeRowsPipeline.forEach(callback);\r\n\t\tthis.displayRows.forEach(callback);\r\n\r\n\t\tthis.displayRowsCount = this.displayRows[this.displayRows.length -1].length;\r\n\t}\r\n\r\n\t//return only actual rows (not group headers etc)\r\n\tgetRows(type){\r\n\t\tvar rows;\r\n\r\n\t\tswitch(type){\r\n\t\t\tcase \"active\":\r\n\t\t\trows = this.activeRows;\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"display\":\r\n\t\t\trows = this.table.rowManager.getDisplayRows();\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"visible\":\r\n\t\t\trows = this.getVisibleRows(true);\r\n\t\t\tbreak;\r\n\r\n\t\t\tdefault:\r\n\t\t\trows = this.chain(\"rows-retrieve\", type, null, this.rows) || this.rows;\r\n\t\t}\r\n\r\n\t\treturn rows;\r\n\t}\r\n\r\n\t///////////////// Table Rendering /////////////////\r\n\t//trigger rerender of table in current position\r\n\treRenderInPosition(callback){\r\n\t\tif(this.redrawBlock){\r\n\t\t\tif(callback){\r\n\t\t\t\tcallback();\r\n\t\t\t}else{\r\n\t\t\t\tthis.redrawBlockRederInPosition = true;\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tthis.renderer.rerenderRows(callback);\r\n\t\t}\r\n\t}\r\n\r\n\tinitializeRenderer(){\r\n\t\tvar renderClass;\r\n\r\n\t\tvar renderers = {\r\n\t\t\t\"virtual\": RendererVirtualDomVertical,\r\n\t\t\t\"basic\": RendererBasicVertical,\r\n\t\t};\r\n\r\n\t\tif(typeof this.table.options.renderVertical === \"string\"){\r\n\t\t\trenderClass = renderers[this.table.options.renderVertical];\r\n\t\t}else{\r\n\t\t\trenderClass = this.table.options.renderVertical;\r\n\t\t}\r\n\r\n\t\tif(renderClass){\r\n\t\t\tthis.renderer = new renderClass(this.table, this.element, this.tableElement);\r\n\t\t\tthis.renderer.initialize();\r\n\r\n\t\t\tif((this.table.element.clientHeight || this.table.options.height)){\r\n\t\t\t\tthis.fixedHeight = true;\r\n\t\t\t}else{\r\n\t\t\t\tthis.fixedHeight = false;\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tconsole.error(\"Unable to find matching renderer:\", table.options.renderVertical);\r\n\t\t}\r\n\t}\r\n\r\n\tgetRenderMode(){\r\n\t\treturn this.renderMode;\r\n\t}\r\n\r\n\trenderTable(){\r\n\r\n\t\tthis.dispatchExternal(\"renderStarted\");\r\n\r\n\t\tthis.element.scrollTop = 0;\r\n\r\n\t\tif(this.displayRowsCount){\r\n\t\t\tthis._clearTable();\r\n\t\t\tthis.renderer.renderRows();\r\n\r\n\t\t\tif(this.firstRender){\r\n\t\t\t\tthis.firstRender = false;\r\n\t\t\t\tthis.layoutRefresh();\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tthis.renderEmptyScroll();\r\n\t\t}\r\n\r\n\t\tif(!this.fixedHeight){\r\n\t\t\tthis.adjustTableSize();\r\n\t\t}\r\n\r\n\t\tthis.dispatch(\"table-layout\");\r\n\r\n\t\tif(!this.displayRowsCount){\r\n\t\t\tif(this.table.options.placeholder){\r\n\r\n\t\t\t\tthis.table.options.placeholder.setAttribute(\"tabulator-render-mode\", this.renderMode);\r\n\r\n\t\t\t\tthis.getElement().appendChild(this.table.options.placeholder);\r\n\t\t\t\tthis.table.options.placeholder.style.width = this.table.columnManager.getWidth() + \"px\";\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.dispatchExternal(\"renderComplete\");\r\n\t}\r\n\r\n\t//show scrollbars on empty table div\r\n\trenderEmptyScroll(){\r\n\t\tif(this.table.options.placeholder){\r\n\t\t\tthis.tableElement.style.display = \"none\";\r\n\t\t}else{\r\n\t\t\tthis.tableElement.style.minWidth = this.table.columnManager.getWidth() + \"px\";\r\n\t\t\t// this.tableElement.style.minHeight = \"1px\";\r\n\t\t\t// this.tableElement.style.visibility = \"hidden\";\r\n\t\t}\r\n\t}\r\n\r\n\t_clearTable(){\r\n\t\tvar element = this.tableElement;\r\n\r\n\t\tif(this.table.options.placeholder && this.table.options.placeholder.parentNode){\r\n\t\t\tthis.table.options.placeholder.parentNode.removeChild(this.table.options.placeholder);\r\n\t\t}\r\n\r\n\t\tthis.scrollTop = 0;\r\n\t\tthis.scrollLeft = 0;\r\n\r\n\t\tthis.renderer.clearRows();\r\n\t}\r\n\r\n\tstyleRow(row, index){\r\n\t\tvar rowEl = row.getElement();\r\n\r\n\t\tif(index % 2){\r\n\t\t\trowEl.classList.add(\"tabulator-row-even\");\r\n\t\t\trowEl.classList.remove(\"tabulator-row-odd\");\r\n\t\t}else{\r\n\t\t\trowEl.classList.add(\"tabulator-row-odd\");\r\n\t\t\trowEl.classList.remove(\"tabulator-row-even\");\r\n\t\t}\r\n\t}\r\n\r\n\t//normalize height of active rows\r\n\tnormalizeHeight(){\r\n\t\tthis.activeRows.forEach(function(row){\r\n\t\t\trow.normalizeHeight();\r\n\t\t});\r\n\t}\r\n\r\n\t//adjust the height of the table holder to fit in the Tabulator element\r\n\tadjustTableSize(){\r\n\t\tvar initialHeight = this.element.clientHeight,\r\n\t\tmodExists;\r\n\r\n\t\tif(this.renderer.verticalFillMode === \"fill\"){\r\n\t\t\tlet otherHeight = Math.floor(this.table.columnManager.getElement().getBoundingClientRect().height + (this.table.footerManager && this.table.footerManager.active && !this.table.footerManager.external ? this.table.footerManager.getElement().getBoundingClientRect().height : 0));\r\n\r\n\t\t\tif(this.fixedHeight){\r\n\t\t\t\tthis.element.style.minHeight = \"calc(100% - \" + otherHeight + \"px)\";\r\n\t\t\t\tthis.element.style.height = \"calc(100% - \" + otherHeight + \"px)\";\r\n\t\t\t\tthis.element.style.maxHeight = \"calc(100% - \" + otherHeight + \"px)\";\r\n\t\t\t}else{\r\n\t\t\t\tthis.element.style.height = \"\";\r\n\t\t\t\tthis.element.style.height = (this.table.element.clientHeight - otherHeight) + \"px\";\r\n\t\t\t\tthis.element.scrollTop = this.scrollTop;\r\n\t\t\t}\r\n\r\n\t\t\tthis.renderer.resize();\r\n\r\n\t\t\t//check if the table has changed size when dealing with variable height tables\r\n\t\t\tif(!this.fixedHeight && initialHeight != this.element.clientHeight){\r\n\t\t\t\tif(this.subscribed(\"table-resize\")){\r\n\t\t\t\t\tthis.dispatch(\"table-resize\");\r\n\t\t\t\t}else{\r\n\t\t\t\t\tthis.redraw();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//renitialize all rows\r\n\treinitialize(){\r\n\t\tthis.rows.forEach(function(row){\r\n\t\t\trow.reinitialize(true);\r\n\t\t});\r\n\t}\r\n\r\n\t//prevent table from being redrawn\r\n\tblockRedraw (){\r\n\t\tthis.redrawBlock = true;\r\n\t\tthis.redrawBlockRestoreConfig = false;\r\n\t}\r\n\r\n\t//restore table redrawing\r\n\trestoreRedraw (){\r\n\t\tthis.redrawBlock = false;\r\n\r\n\t\tif(this.redrawBlockRestoreConfig){\r\n\t\t\tthis.refreshActiveData(this.redrawBlockRestoreConfig.handler, this.redrawBlockRestoreConfig.skipStage, this.redrawBlockRestoreConfig.renderInPosition)\r\n\r\n\t\t\tthis.redrawBlockRestoreConfig = false;\r\n\t\t}else{\r\n\t\t\tif(this.redrawBlockRederInPosition){\r\n\t\t\t\tthis.reRenderInPosition();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.redrawBlockRederInPosition = false;\r\n\t}\r\n\r\n\t//redraw table\r\n\tredraw (force){\r\n\t\tvar pos = 0,\r\n\t\tleft = this.scrollLeft;\r\n\r\n\t\tthis.adjustTableSize();\r\n\r\n\t\tthis.table.tableWidth = this.table.element.clientWidth;\r\n\r\n\t\tif(!force){\r\n\t\t\tthis.reRenderInPosition();\r\n\t\t\tthis.scrollHorizontal(left);\r\n\r\n\t\t\tif(!this.displayRowsCount){\r\n\t\t\t\tif(this.table.options.placeholder){\r\n\t\t\t\t\tthis.getElement().appendChild(this.table.options.placeholder);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tthis.renderTable();\r\n\t\t}\r\n\t}\r\n\r\n\tresetScroll(){\r\n\t\tthis.element.scrollLeft = 0;\r\n\t\tthis.element.scrollTop = 0;\r\n\r\n\t\tif(this.table.browser === \"ie\"){\r\n\t\t\tvar event = document.createEvent(\"Event\");\r\n\t\t\tevent.initEvent(\"scroll\", false, true);\r\n\t\t\tthis.element.dispatchEvent(event);\r\n\t\t}else{\r\n\t\t\tthis.element.dispatchEvent(new Event('scroll'));\r\n\t\t}\r\n\t}\r\n}","import CoreFeature from './CoreFeature.js';\r\n\r\nexport default class FooterManager extends CoreFeature{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.active = false;\r\n\t\tthis.element = this.createElement(); //containing element\r\n\t\tthis.external = false;\r\n\t\tthis.links = [];\r\n\r\n\t\tthis.initializeElement();\r\n\t}\r\n\r\n\tinitialize(){\r\n\r\n\t}\r\n\r\n\tcreateElement (){\r\n\t\tvar el = document.createElement(\"div\");\r\n\r\n\t\tel.classList.add(\"tabulator-footer\");\r\n\r\n\t\treturn el;\r\n\t}\r\n\r\n\tinitializeElement(element){\r\n\t\tif(this.table.options.footerElement){\r\n\r\n\t\t\tswitch(typeof this.table.options.footerElement){\r\n\t\t\t\tcase \"string\":\r\n\t\t\t\tif(this.table.options.footerElement[0] === \"<\"){\r\n\t\t\t\t\tthis.element.innerHTML = this.table.options.footerElement;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tthis.external = true;\r\n\t\t\t\t\tthis.element = document.querySelector(this.table.options.footerElement);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tdefault:\r\n\t\t\t\tthis.element = this.table.options.footerElement;\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tgetElement(){\r\n\t\treturn this.element;\r\n\t}\r\n\r\n\tappend(element, parent){\r\n\t\tthis.activate(parent);\r\n\r\n\t\tthis.element.appendChild(element);\r\n\t\tthis.table.rowManager.adjustTableSize();\r\n\t}\r\n\r\n\tprepend(element, parent){\r\n\t\tthis.activate(parent);\r\n\r\n\t\tthis.element.insertBefore(element, this.element.firstChild);\r\n\t\tthis.table.rowManager.adjustTableSize();\r\n\t}\r\n\r\n\tremove(element){\r\n\t\telement.parentNode.removeChild(element);\r\n\t\tthis.deactivate();\r\n\t}\r\n\r\n\tdeactivate(force){\r\n\t\tif(!this.element.firstChild || force){\r\n\t\t\tif(!this.external){\r\n\t\t\t\tthis.element.parentNode.removeChild(this.element);\r\n\t\t\t}\r\n\t\t\tthis.active = false;\r\n\t\t}\r\n\t}\r\n\r\n\tactivate(parent){\r\n\t\tif(!this.active){\r\n\t\t\tthis.active = true;\r\n\t\t\tif(!this.external){\r\n\t\t\t\tthis.table.element.appendChild(this.getElement());\r\n\t\t\t\tthis.table.element.style.display = '';\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(parent){\r\n\t\t\tthis.links.push(parent);\r\n\t\t}\r\n\t}\r\n\r\n\tredraw(){\r\n\t\tthis.links.forEach(function(link){\r\n\t\t\tlink.footerRedraw();\r\n\t\t});\r\n\t}\r\n}","import CoreFeature from '../CoreFeature.js';\r\nimport Helpers from './Helpers.js';\r\n\r\nexport default class InteractionManager extends CoreFeature {\r\n\r\n\tconstructor (table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.el = this.table.element;\r\n\r\n\t\tthis.abortClasses = [\"tabulator-headers\", \"tabulator-table\"];\r\n\r\n\t\tthis.previousTargets = {};\r\n\r\n\t\tthis.listeners = [\r\n\t\t\"click\",\r\n\t\t\"dblclick\",\r\n\t\t\"contextmenu\",\r\n\t\t\"mouseenter\",\r\n\t\t\"mouseleave\",\r\n\t\t\"mouseover\",\r\n\t\t\"mouseout\",\r\n\t\t\"mousemove\",\r\n\t\t\"touchstart\",\r\n\t\t\"touchend\",\r\n\t\t];\r\n\r\n\t\tthis.componentMap = {\r\n\t\t\t\"tabulator-cell\":\"cell\",\r\n\t\t\t\"tabulator-row\":\"row\",\r\n\t\t\t\"tabulator-group\":\"group\",\r\n\t\t\t\"tabulator-col\":\"column\",\r\n\t\t};\r\n\r\n\t\tthis.buildListenerMap();\r\n\t\tthis.bindSubscriptionWatchers();\r\n\t}\r\n\r\n\tbuildListenerMap(){\r\n\t\tvar listenerMap = {};\r\n\r\n\t\tthis.listeners.forEach((listener) => {\r\n\t\t\tlistenerMap[listener] = {\r\n\t\t\t\thandler:null,\r\n\t\t\t\tcomponents:[],\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\tthis.listeners = listenerMap;\r\n\t}\r\n\r\n\tbindSubscriptionWatchers(){\r\n\t\tvar listeners = Object.keys(this.listeners),\r\n\t\tcomponents = Object.values(this.componentMap);\r\n\r\n\t\tfor(let comp of components){\r\n\t\t\tfor(let listener of listeners){\r\n\t\t\t\tlet key = comp + \"-\" + listener;\r\n\r\n\t\t\t\tthis.subscriptionChange(key, this.subscriptionChanged.bind(this, comp, listener));\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tsubscriptionChanged(component, key, added){\r\n\t\tvar listener = this.listeners[key].components,\r\n\t\tindex = listener.indexOf(component),\r\n\t\tchanged = false;\r\n\r\n\t\tif(added){\r\n\t\t\tif(index === -1){\r\n\t\t\t\tlistener.push(component);\r\n\t\t\t\tchanged = true;\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tif(!this.subscribed(component + \"-\" + key)){\r\n\t\t\t\tif(index > -1){\r\n\t\t\t\t\tlistener.splice(index, 1);\r\n\t\t\t\t\tchanged = true;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(changed){\r\n\t\t\tthis.updateEventListeners();\r\n\t\t}\r\n\t}\r\n\r\n\tupdateEventListeners(){\r\n\t\tfor(let key in this.listeners){\r\n\t\t\tlet listener = this.listeners[key];\r\n\r\n\t\t\tif(listener.components.length){\r\n\t\t\t\tif(!listener.handler){\r\n\t\t\t\t\tlistener.handler = this.track.bind(this, key);\r\n\t\t\t\t\tthis.el.addEventListener(key, listener.handler)\r\n\t\t\t\t\t// this.el.addEventListener(key, listener.handler, {passive: true})\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tif(listener.handler){\r\n\t\t\t\t\tthis.el.removeEventListener(key, listener.handler)\r\n\t\t\t\t\tlistener.handler = null;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\ttrack(type, e){\r\n\t\tvar targets = this.findTargets(e.path);\r\n\t\ttargets = this.bindComponents(type, targets);\r\n\t\tthis.triggerEvents(type, e, targets);\r\n\t}\r\n\r\n\tfindTargets(path){\r\n\t\tvar targets = {};\r\n\r\n\t\tlet componentMap = Object.keys(this.componentMap);\r\n\r\n\t\tfor (let el of path) {\r\n\t\t\tlet classList = el.classList ? [...el.classList] : [];\r\n\r\n\t\t\tlet abort = classList.filter((item) => {\r\n\t\t\t\treturn this.abortClasses.includes(item);\r\n\t\t\t})\r\n\r\n\t\t\tif(abort.length){\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\r\n\t\t\tlet elTargets = classList.filter((item) => {\r\n\t\t\t\treturn componentMap.includes(item);\r\n\t\t\t})\r\n\r\n\t\t\tfor (let target of elTargets) {\r\n\t\t\t\ttargets[this.componentMap[target]] = el;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(targets.group && targets.group === targets.row){\r\n\t\t\tdelete targets.row;\r\n\t\t}\r\n\r\n\t\treturn targets;\r\n\t}\r\n\r\n\tbindComponents(type, targets){\r\n\t\t//ensure row component is looked up before cell\r\n\t\tvar keys = Object.keys(targets).reverse(),\r\n\t\tlistener = this.listeners[type],\r\n\t\ttargetMatches = {};\r\n\r\n\t\tfor(let key of keys){\r\n\t\t\tlet component;\r\n\t\t\tlet target = targets[key];\r\n\t\t\tlet previousTarget = this.previousTargets[key];\r\n\r\n\t\t\tif(previousTarget && previousTarget.target === target){\r\n\t\t\t\tcomponent = previousTarget.component;\r\n\t\t\t}else{\r\n\t\t\t\tswitch(key){\r\n\t\t\t\t\tcase \"row\":\r\n\t\t\t\t\tcase \"group\":\r\n\t\t\t\t\tif(listener.components.includes(\"row\") || listener.components.includes(\"cell\")){\r\n\t\t\t\t\t\tlet rows = this.table.rowManager.getVisibleRows();\r\n\r\n\t\t\t\t\t\tcomponent = rows.find((row) => {\r\n\t\t\t\t\t\t\treturn row.getElement() === target;\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase \"column\":\r\n\t\t\t\t\tif(listener.components.includes(\"column\")){\r\n\t\t\t\t\t\tcomponent = this.table.columnManager.findColumn(target);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak\r\n\r\n\t\t\t\t\tcase \"cell\":\r\n\t\t\t\t\tif(listener.components.includes(\"cell\")){\r\n\t\t\t\t\t\tcomponent = targets[\"row\"].findCell(target);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif(component){\r\n\t\t\t\ttargets[key] = component;\r\n\t\t\t\ttargetMatches[key] = {\r\n\t\t\t\t\ttarget:target,\r\n\t\t\t\t\tcomponent:component,\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.previousTargets = targetMatches;\r\n\r\n\t\treturn targets;\r\n\t}\r\n\r\n\ttriggerEvents(type, e, targets){\r\n\t\tvar listener = this.listeners[type];\r\n\r\n\t\tfor(let key in targets){\r\n\t\t\tif(targets[key] && listener.components.includes(key)){\r\n\t\t\t\tthis.dispatch(key + \"-\" + type, e, targets[key]);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}","export default class ComponentFuctionBinder{\r\n\r\n\tconstructor(table){\r\n\t\tthis.table = table;\r\n\r\n\t\tthis.bindings = {};\r\n\t}\r\n\r\n\tbind(type, funcName, handler){\r\n\t\tif(!this.bindings[type]){\r\n\t\t\tthis.bindings[type] = {};\r\n\t\t}\r\n\r\n\t\tif(this.bindings[type][funcName]){\r\n\t\t\tconsole.warn(\"Unable to bind component handler, a matching function name is already bound\", type, funcName, hanlder)\r\n\t\t}else{\r\n\t\t\tthis.bindings[type][funcName] = handler;\r\n\t\t}\r\n\t}\r\n\r\n\thandle(type, component, name){\r\n\t\tif(this.bindings[type] && this.bindings[type][name]){\r\n\t\t\treturn this.bindings[type][name].bind(null, component);\r\n\t\t}else{\r\n\t\t\tconsole.error(\"The \" + type + \" component does not have a \" + name + \" function, have you checked that you have the correct Tabulator module installed?\")\r\n\t\t}\r\n\t}\r\n\r\n}","import CoreFeature from '../CoreFeature.js';\r\n\r\nexport default class DataLoader extends CoreFeature{\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.loaderElement = this.createLoaderElement(); //loader message div\r\n\t\tthis.msgElement = this.createMsgElement(); //message element\r\n\t\tthis.loadingElement = null;\r\n\t\tthis.errorElement = null;\r\n\r\n\t\tthis.requestOrder = 0; //prevent requests comming out of sequence if overridden by another load request\r\n\t\tthis.loading = false;\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tvar template;\r\n\r\n\t\tthis.loaderElement.appendChild(this.msgElement);\r\n\r\n\t\tif(this.table.options.dataLoaderLoading){\r\n\t\t\tif(typeof this.table.options.dataLoaderLoading == \"string\"){\r\n\t\t\t\ttemplate = document.createElement('template');\r\n\t\t\t\ttemplate.innerHTML = this.table.options.dataLoaderLoading.trim();\r\n\t\t\t\tthis.loadingElement = template.content.firstChild;\r\n\t\t\t}else{\r\n\t\t\t\tthis.loadingElement = this.table.options.dataLoaderLoading;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(this.table.options.dataLoaderError){\r\n\t\t\tif(typeof this.table.options.dataLoaderError == \"string\"){\r\n\t\t\t\ttemplate = document.createElement('template');\r\n\t\t\t\ttemplate.innerHTML = this.table.options.dataLoaderError.trim();\r\n\t\t\t\tthis.errorElement = template.content.firstChild;\r\n\t\t\t}else{\r\n\t\t\t\tthis.errorElement = this.table.options.dataLoaderError;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tcreateLoaderElement(){\r\n\t\tvar el = document.createElement(\"div\");\r\n\t\tel.classList.add(\"tabulator-loader\");\r\n\t\treturn el;\r\n\t}\r\n\r\n\tcreateMsgElement(){\r\n\t\tvar el = document.createElement(\"div\");\r\n\r\n\t\tel.classList.add(\"tabulator-loader-msg\");\r\n\t\tel.setAttribute(\"role\", \"alert\");\r\n\r\n\t\treturn el;\r\n\t}\r\n\r\n\tload(data, params, config, replace, silent){\r\n\t\tvar requestNo = ++this.requestOrder;\r\n\r\n\t\tthis.dispatchExternal(\"dataLoading\", data);\r\n\r\n\t\t//parse json data to array\r\n\t\tif (data && (data.indexOf(\"{\") == 0 || data.indexOf(\"[\") == 0)){\r\n\t\t\tdata = JSON.parse(data);\r\n\t\t}\r\n\r\n\t\tif(this.confirm(\"data-loading\", data, params, config, silent)){\r\n\t\t\tthis.loading = true;\r\n\r\n\t\t\tif(!silent){\r\n\t\t\t\tthis.showLoader();\r\n\t\t\t}\r\n\r\n\t\t\t//get params for request\r\n\t\t\tvar params = this.chain(\"data-params\", [data, config, silent], params || {}, {});\r\n\r\n\t\t\tparams = this.mapParams(params, this.table.options.dataSendParams);\r\n\r\n\t\t\tvar result = this.chain(\"data-load\", [data, params, config, silent], Promise.resolve([]));\r\n\r\n\t\t\treturn result.then((response) => {\r\n\t\t\t\tif(!Array.isArray(response) && typeof response == \"object\"){\r\n\t\t\t\t\tresponse = this.mapParams(response, this.objectInvert(this.table.options.dataReceiveParams));\r\n\t\t\t\t}\r\n\r\n\t\t\t\tvar rowData = this.chain(\"data-loaded\", response, null, response);\r\n\r\n\t\t\t\tif(requestNo == this.requestOrder){\r\n\t\t\t\t\tthis.hideLoader();\r\n\r\n\t\t\t\t\tif(rowData !== false){\r\n\t\t\t\t\t\tthis.dispatchExternal(\"dataLoaded\", data);\r\n\t\t\t\t\t\tthis.table.rowManager.setData(rowData, replace, !replace);\r\n\t\t\t\t\t}\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.warn(\"Data Load Response Blocked - An active data load request was blocked by an attempt to change table data while the request was being made\");\r\n\t\t\t\t}\r\n\t\t\t}).catch((error) => {\r\n\t\t\t\tconsole.error(\"Data Load Error: \", error);\r\n\t\t\t\tthis.dispatchExternal(\"dataLoadError\", error);\r\n\r\n\t\t\t\tif(!silent){\r\n\t\t\t\t\tthis.showError();\r\n\t\t\t\t}\r\n\r\n\t\t\t\tsetTimeout(() => {\r\n\t\t\t\t\tthis.hideLoader();\r\n\t\t\t\t}, 3000);\r\n\t\t\t})\r\n\t\t\t.finally(() => {\r\n\t\t\t\tthis.loading = false;\r\n\t\t\t})\r\n\t\t}else{\r\n\t\t\tthis.dispatchExternal(\"dataLoaded\", data);\r\n\t\t\tthis.table.rowManager.setData(data, replace, !replace);\r\n\t\t\treturn Promise.resolve();\r\n\t\t}\r\n\t}\r\n\r\n\tmapParams(params, map){\r\n\t\tvar output = {};\r\n\r\n\t\tfor(let key in params){\r\n\t\t\toutput[map.hasOwnProperty(key) ? map[key] : key] = params[key];\r\n\t\t}\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tobjectInvert(obj){\r\n\t\tvar output = {};\r\n\r\n\t\tfor(let key in obj){\r\n\t\t\toutput[obj[key]] = key;\r\n\t\t}\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tblockActiveLoad(){\r\n\t\tthis.requestOrder++;\r\n\t}\r\n\r\n\tshowLoader(){\r\n\t\tvar shouldLoad = typeof this.table.options.dataLoader === \"function\" ? this.table.options.dataLoader() : this.table.options.dataLoader;\r\n\r\n\t\tif(shouldLoad){\r\n\t\t\tthis.hideLoader();\r\n\r\n\t\t\twhile(this.msgElement.firstChild) this.msgElement.removeChild(this.msgElement.firstChild);\r\n\r\n\t\t\tthis.msgElement.classList.remove(\"tabulator-error\");\r\n\t\t\tthis.msgElement.classList.add(\"tabulator-loading\");\r\n\r\n\t\t\tif(this.loadingElement){\r\n\t\t\t\tthis.msgElement.appendChild(this.loadingElement);\r\n\t\t\t}else{\r\n\t\t\t\tthis.msgElement.innerHTML = this.langText(\"data|loading\");\r\n\t\t\t}\r\n\r\n\t\t\tthis.table.element.appendChild(this.loaderElement);\r\n\t\t}\r\n\t}\r\n\r\n\tshowError(){\r\n\t\tthis.hideLoader();\r\n\r\n\t\twhile(this.msgElement.firstChild) this.msgElement.removeChild(this.msgElement.firstChild);\r\n\t\tthis.msgElement.classList.remove(\"tabulator-loading\");\r\n\t\tthis.msgElement.classList.add(\"tabulator-error\");\r\n\r\n\t\tif(this.errorElement){\r\n\t\t\tthis.msgElement.appendChild(this.errorElement);\r\n\t\t}else{\r\n\t\t\tthis.msgElement.innerHTML = this.langText(\"data|error\");\r\n\t\t}\r\n\r\n\t\tthis.table.element.appendChild(this.loaderElement);\r\n\t}\r\n\r\n\r\n\thideLoader(){\r\n\t\tif(this.loaderElement.parentNode){\r\n\t\t\tthis.loaderElement.parentNode.removeChild(this.loaderElement);\r\n\t\t}\r\n\t}\r\n}","export default class ExternalEventBus {\r\n\r\n\tconstructor(optionsList, debug){\r\n\t\tthis.events = {};\r\n\t\tthis.optionsList = optionsList || {};\r\n\t\tthis.subscriptionNotifiers = {};\r\n\r\n\t\tthis.dispatch = debug ? this._debugDispatch.bind(this) : this._dispatch.bind(this);\r\n\t\tthis.debug = debug;\r\n\t}\r\n\r\n\tsubscriptionChange(key, callback){\r\n\t\tif(!this.subscriptionNotifiers[key]){\r\n\t\t\tthis.subscriptionNotifiers[key] = [];\r\n\t\t}\r\n\r\n\t\tthis.subscriptionNotifiers[key].push(callback);\r\n\r\n\t\tif(this.subscribed(key)){\r\n\t\t\tthis._notifiySubscriptionChange(key, true);\r\n\t\t}\r\n\t}\r\n\r\n\tsubscribe(key, callback){\r\n\t\tif(!this.events[key]){\r\n\t\t\tthis.events[key] = [];\r\n\t\t}\r\n\r\n\t\tthis.events[key].push(callback);\r\n\r\n\t\tthis._notifiySubscriptionChange(key, true);\r\n\t}\r\n\r\n\tunsubscribe(key, callback){\r\n\t\tvar index;\r\n\r\n\t\tif(this.events[key]){\r\n\t\t\tif(callback){\r\n\t\t\t\tindex = this.events[key].findIndex((item) => {\r\n\t\t\t\t\treturn item === callback;\r\n\t\t\t\t});\r\n\r\n\t\t\t\tif(index > -1){\r\n\t\t\t\t\tthis.events[key].splice(index, 1);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.warn(\"Cannot remove event, no matching event found:\", key, callback);\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tdelete this.events[key];\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Cannot remove event, no events set on:\", key);\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis._notifiySubscriptionChange(key, false);\r\n\t}\r\n\r\n\tsubscribed(key){\r\n\t\treturn this.events[key] && this.events[key].length;\r\n\t}\r\n\r\n\t_notifiySubscriptionChange(key, subscribed){\r\n\t\tvar notifiers = this.subscriptionNotifiers[key];\r\n\r\n\t\tif(notifiers){\r\n\t\t\tnotifiers.forEach((callback)=>{\r\n\t\t\t\tcallback(subscribed);\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\t_dispatch(){\r\n\t\tvar args = Array.from(arguments),\r\n\t\tkey = args.shift(),\r\n\t\tresult;\r\n\r\n\t\tif(this.events[key]){\r\n\t\t\tthis.events[key].forEach((callback, i) => {\r\n\t\t\t\tlet callResult = callback.apply(this, args);\r\n\r\n\t\t\t\tif(!i){\r\n\t\t\t\t\tresult = callResult;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\t_debugDispatch(){\r\n\t\tvar args = Array.from(arguments),\r\n\t\tkey = args[0];\r\n\r\n\t\targs[0] = \"ExternalEvent:\" + args[0];\r\n\r\n\t\tif(this.debug === true || this.debug.includes(key)){\r\n\t\t\tconsole.log(...args);\r\n\t\t}\r\n\r\n\t\treturn this._dispatch(...arguments)\r\n\t}\r\n}","export default class InternalEventBus {\r\n\r\n\tconstructor(debug){\r\n\t\tthis.events = {};\r\n\t\tthis.subscriptionNotifiers = {};\r\n\r\n\t\tthis.dispatch = debug ? this._debugDispatch.bind(this) : this._dispatch.bind(this);\r\n\t\tthis.chain = debug ? this._debugChain.bind(this) : this._chain.bind(this);\r\n\t\tthis.confirm = debug ? this._debugConfirm.bind(this) : this._confirm.bind(this);\r\n\t\tthis.debug = debug;\r\n\t}\r\n\r\n\tsubscriptionChange(key, callback){\r\n\t\tif(!this.subscriptionNotifiers[key]){\r\n\t\t\tthis.subscriptionNotifiers[key] = [];\r\n\t\t}\r\n\r\n\t\tthis.subscriptionNotifiers[key].push(callback);\r\n\r\n\t\tif(this.subscribed(key)){\r\n\t\t\tthis._notifiySubscriptionChange(key, true);\r\n\t\t}\r\n\t}\r\n\r\n\tsubscribe(key, callback, priority = 10000){\r\n\t\tif(!this.events[key]){\r\n\t\t\tthis.events[key] = [];\r\n\t\t}\r\n\r\n\t\tthis.events[key].push({callback, priority});\r\n\r\n\t\tthis.events[key].sort((a, b) => {\r\n\t\t\treturn a.priority - b.priority;\r\n\t\t});\r\n\r\n\t\tthis._notifiySubscriptionChange(key, true);\r\n\t}\r\n\r\n\tunsubscribe(key, callback){\r\n\t\tvar index;\r\n\r\n\t\tif(this.events[key]){\r\n\t\t\tif(callback){\r\n\t\t\t\tindex = this.events[key].findIndex((item) => {\r\n\t\t\t\t\treturn item.callback === callback;\r\n\t\t\t\t});\r\n\r\n\t\t\t\tif(index > -1){\r\n\t\t\t\t\tthis.events[key].splice(index, 1);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.warn(\"Cannot remove event, no matching event found:\", key, callback);\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Cannot remove event, no events set on:\", key);\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis._notifiySubscriptionChange(key, false);\r\n\t}\r\n\r\n\tsubscribed(key){\r\n\t\treturn this.events[key] && this.events[key].length;\r\n\t}\r\n\r\n\t_chain(key, args, initialValue, fallback){\r\n\t\tvar value = initialValue;\r\n\r\n\t\tif(!Array.isArray(args)){\r\n\t\t\targs = [args];\r\n\t\t}\r\n\r\n\t\tif(this.subscribed(key)){\r\n\t\t\tthis.events[key].forEach((subscriber, i) => {\r\n\t\t\t\tvalue = subscriber.callback.apply(this, args.concat([value]));\r\n\t\t\t});\r\n\r\n\t\t\treturn value;\r\n\t\t}else{\r\n\t\t\treturn typeof fallback === \"function\" ? fallback() : fallback;\r\n\t\t}\r\n\t}\r\n\r\n\t_confirm(key, args){\r\n\t\tvar confirmed = false;\r\n\r\n\t\tif(!Array.isArray(args)){\r\n\t\t\targs = [args];\r\n\t\t}\r\n\r\n\t\tif(this.subscribed(key)){\r\n\t\t\tthis.events[key].forEach((subscriber, i) => {\r\n\t\t\t\tif(subscriber.callback.apply(this, args)){\r\n\t\t\t\t\tconfirmed = true;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn confirmed;\r\n\t}\r\n\r\n\t_notifiySubscriptionChange(key, subscribed){\r\n\t\tvar notifiers = this.subscriptionNotifiers[key];\r\n\r\n\t\tif(notifiers){\r\n\t\t\tnotifiers.forEach((callback)=>{\r\n\t\t\t\tcallback(subscribed);\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\t_dispatch(){\r\n\t\tvar args = Array.from(arguments),\r\n\t\tkey = args.shift();\r\n\r\n\t\tif(this.events[key]){\r\n\t\t\tthis.events[key].forEach((subscriber) => {\r\n\t\t\t\tlet callResult = subscriber.callback.apply(this, args);\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\t_debugDispatch(){\r\n\t\tvar args = Array.from(arguments),\r\n\t\tkey = args[0];\r\n\r\n\t\targs[0] = \"InternalEvent:\" + key;\r\n\r\n\t\tif(this.debug === true || this.debug.includes(key)){\r\n\t\t\tconsole.log(...args);\r\n\t\t}\r\n\r\n\t\treturn this._dispatch(...arguments);\r\n\t}\r\n\r\n\t_debugChain(){\r\n\t\tvar args = Array.from(arguments),\r\n\t\tkey = args[0];\r\n\r\n\t\targs[0] = \"InternalEvent:\" + key;\r\n\r\n\t\tif(this.debug === true || this.debug.includes(key)){\r\n\t\t\tconsole.log(...args);\r\n\t\t}\r\n\r\n\t\treturn this._chain(...arguments);\r\n\t}\r\n\r\n\t_debugConfirm(){\r\n\t\tvar args = Array.from(arguments),\r\n\t\tkey = args[0];\r\n\r\n\t\targs[0] = \"InternalEvent:\" + key;\r\n\r\n\t\tif(this.debug === true || this.debug.includes(key)){\r\n\t\t\tconsole.log(...args);\r\n\t\t}\r\n\r\n\t\treturn this._confirm(...arguments);\r\n\t}\r\n}","import Tabulator from '../Tabulator.js';\r\n\r\nclass TableRegistry {\r\n\r\n\tstatic register(table){\r\n\t\tTableRegistry.tables.push(table);\r\n\t}\r\n\r\n\tstatic deregister(table){\r\n\t\tvar index = TableRegistry.tables.indexOf(table);\r\n\r\n\t\tif(index > -1){\r\n\t\t\tTableRegistry.tables.splice(index, 1);\r\n\t\t}\r\n\t}\r\n\r\n\tstatic lookupTable(query, silent){\r\n\t\tvar results = [],\r\n\t\tmatches, match;\r\n\r\n\t\tif(typeof query === \"string\"){\r\n\t\t\tmatches = document.querySelectorAll(query);\r\n\r\n\t\t\tif(matches.length){\r\n\t\t\t\tfor(var i = 0; i < matches.length; i++){\r\n\t\t\t\t\tmatch = TableRegistry.matchElement(matches[i]);\r\n\r\n\t\t\t\t\tif(match){\r\n\t\t\t\t\t\tresults.push(match);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t}else if((typeof HTMLElement !== \"undefined\" && query instanceof HTMLElement) || query instanceof Tabulator){\r\n\t\t\tmatch = TableRegistry.matchElement(query);\r\n\r\n\t\t\tif(match){\r\n\t\t\t\tresults.push(match);\r\n\t\t\t}\r\n\t\t}else if(Array.isArray(query)){\r\n\t\t\tquery.forEach(function(item){\r\n\t\t\t\tresults = results.concat(TableRegistry.lookupTable(item));\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tif(!silent){\r\n\t\t\t\tconsole.warn(\"Table Connection Error - Invalid Selector\", query);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn results;\r\n\t}\r\n\r\n\tstatic matchElement(element){\r\n\t\treturn TableRegistry.tables.find(function(table){\r\n\t\t\treturn element instanceof Tabulator ? table === element : table.element === element;\r\n\t\t});\r\n\t}\r\n}\r\n\r\nTableRegistry.tables = [];\r\n\r\nexport default TableRegistry;","//resize columns to fit data they contain\r\nexport default function(columns){\r\n\tthis.table.columnManager.renderer.reinitializeColumnWidths(columns);\r\n\r\n\tif(this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)){\r\n\t\tthis.table.modules.responsiveLayout.update();\r\n\t}\r\n};","//resize columns to fit data the contain and stretch last column to fill table\r\nexport default function(columns){\r\n\tvar colsWidth = 0,\r\n\ttableWidth = this.table.rowManager.element.clientWidth,\r\n\tgap = 0,\r\n\tlastCol = false;\r\n\r\n\tcolumns.forEach((column, i) => {\r\n\t\tif(!column.widthFixed){\r\n\t\t\tcolumn.reinitializeWidth();\r\n\t\t}\r\n\r\n\t\tif(this.table.options.responsiveLayout ? column.modules.responsive.visible : column.visible){\r\n\t\t\tlastCol = column;\r\n\t\t}\r\n\r\n\t\tif(column.visible){\r\n\t\t\tcolsWidth += column.getWidth();\r\n\t\t}\r\n\t});\r\n\r\n\tif(lastCol){\r\n\t\tgap = tableWidth - colsWidth + lastCol.getWidth();\r\n\r\n\t\tif(this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)){\r\n\t\t\tlastCol.setWidth(0);\r\n\t\t\tthis.table.modules.responsiveLayout.update();\r\n\t\t}\r\n\r\n\t\tif(gap > 0){\r\n\t\t\tlastCol.setWidth(gap);\r\n\t\t}else{\r\n\t\t\tlastCol.reinitializeWidth();\r\n\t\t}\r\n\t}else{\r\n\t\tif(this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)){\r\n\t\t\tthis.table.modules.responsiveLayout.update();\r\n\t\t}\r\n\t}\r\n};","//resize columns to fit data they contain and stretch row to fill table, also used for fitDataTable\r\nexport default function(columns){\r\n\tcolumns.forEach(function(column){\r\n\t\tcolumn.reinitializeWidth();\r\n\t});\r\n\r\n\tif(this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)){\r\n\t\tthis.table.modules.responsiveLayout.update();\r\n\t}\r\n};","import Module from '../../core/Module.js';\r\n\r\nimport defaultModes from './defaults/modes.js';\r\n\r\nclass Layout extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table, \"layout\");\r\n\r\n\t\tthis.mode = null;\r\n\r\n\t\tthis.registerTableOption(\"layout\", \"fitData\"); //layout type\r\n\t\tthis.registerTableOption(\"layoutColumnsOnNewData\", false); //update column widths on setData\r\n\r\n\t\tthis.registerColumnOption(\"widthGrow\");\r\n\t\tthis.registerColumnOption(\"widthShrink\");\r\n\t}\r\n\r\n\t//initialize layout system\r\n\tinitialize(){\r\n\t\tvar layout = this.table.options.layout;\r\n\r\n\t\tif(Layout.modes[layout]){\r\n\t\t\tthis.mode = layout;\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Layout Error - invalid mode set, defaulting to 'fitData' : \" + layout);\r\n\t\t\tthis.mode = 'fitData';\r\n\t\t}\r\n\r\n\t\tthis.table.element.setAttribute(\"tabulator-layout\", this.mode);\r\n\t}\r\n\r\n\tgetMode(){\r\n\t\treturn this.mode;\r\n\t}\r\n\r\n\t//trigger table layout\r\n\tlayout(){\r\n\t\tLayout.modes[this.mode].call(this, this.table.columnManager.columnsByIndex);\r\n\r\n\t\tthis.dispatch(\"layout-refreshed\")\r\n\t}\r\n}\r\n\r\nLayout.moduleName = \"layout\";\r\n\r\n//load defaults\r\nLayout.modes = defaultModes;\r\n\r\nexport default Layout;","//resize columns to fit\r\nexport default function(columns){\r\n\tvar totalWidth = this.table.element.clientWidth; //table element width\r\n\tvar fixedWidth = 0; //total width of columns with a defined width\r\n\tvar flexWidth = 0; //total width available to flexible columns\r\n\tvar flexGrowUnits = 0; //total number of widthGrow blocks accross all columns\r\n\tvar flexColWidth = 0; //desired width of flexible columns\r\n\tvar flexColumns = []; //array of flexible width columns\r\n\tvar fixedShrinkColumns = []; //array of fixed width columns that can shrink\r\n\tvar flexShrinkUnits = 0; //total number of widthShrink blocks accross all columns\r\n\tvar overflowWidth = 0; //horizontal overflow width\r\n\tvar gapFill=0; //number of pixels to be added to final column to close and half pixel gaps\r\n\r\n\tfunction calcWidth(width){\r\n\t\tvar colWidth;\r\n\r\n\t\tif(typeof(width) == \"string\"){\r\n\t\t\tif(width.indexOf(\"%\") > -1){\r\n\t\t\t\tcolWidth = (totalWidth / 100) * parseInt(width);\r\n\t\t\t}else{\r\n\t\t\t\tcolWidth = parseInt(width);\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tcolWidth = width;\r\n\t\t}\r\n\r\n\t\treturn colWidth;\r\n\t}\r\n\r\n\t//ensure columns resize to take up the correct amount of space\r\n\tfunction scaleColumns(columns, freeSpace, colWidth, shrinkCols){\r\n\r\n\t\tvar oversizeCols = [],\r\n\t\toversizeSpace = 0,\r\n\t\tremainingSpace = 0,\r\n\t\tnextColWidth = 0,\r\n\t\tremainingFlexGrowUnits = flexGrowUnits,\r\n\t\tgap = 0,\r\n\t\tchangeUnits = 0,\r\n\t\tundersizeCols = [];\r\n\r\n\t\tfunction calcGrow(col){\r\n\t\t\treturn (colWidth * (col.column.definition.widthGrow || 1));\r\n\t\t}\r\n\r\n\t\tfunction calcShrink(col){\r\n\t\t\treturn (calcWidth(col.width) - (colWidth * (col.column.definition.widthShrink || 0)))\r\n\t\t}\r\n\r\n\t\tcolumns.forEach(function(col, i){\r\n\t\t\tvar width = shrinkCols ? calcShrink(col) : calcGrow(col);\r\n\t\t\tif(col.column.minWidth >= width){\r\n\t\t\t\toversizeCols.push(col);\r\n\t\t\t}else{\r\n\t\t\t\tif(col.column.maxWidth && col.column.maxWidth < width){\r\n\t\t\t\t\tcol.width = col.column.maxWidth;\r\n\t\t\t\t\tfreeSpace -= col.column.maxWidth;\r\n\r\n\t\t\t\t\tremainingFlexGrowUnits -= shrinkCols ? (col.column.definition.widthShrink || 1) : (col.column.definition.widthGrow || 1);\r\n\r\n\t\t\t\t\tif(remainingFlexGrowUnits){\r\n\t\t\t\t\t\tcolWidth = Math.floor(freeSpace/remainingFlexGrowUnits);\r\n\t\t\t\t\t}\r\n\t\t\t\t}else{\r\n\t\t\t\t\tundersizeCols.push(col);\r\n\t\t\t\t\tchangeUnits += shrinkCols ? (col.column.definition.widthShrink || 1) : (col.column.definition.widthGrow || 1);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tif(oversizeCols.length){\r\n\t\t\toversizeCols.forEach(function(col){\r\n\t\t\t\toversizeSpace += shrinkCols ? col.width - col.column.minWidth : col.column.minWidth;\r\n\t\t\t\tcol.width = col.column.minWidth;\r\n\t\t\t});\r\n\r\n\t\t\tremainingSpace = freeSpace - oversizeSpace;\r\n\r\n\t\t\tnextColWidth = changeUnits ? Math.floor(remainingSpace/changeUnits) : remainingSpace;\r\n\r\n\t\t\tgap = remainingSpace - (nextColWidth * changeUnits);\r\n\r\n\t\t\tgap += scaleColumns(undersizeCols, remainingSpace, nextColWidth, shrinkCols);\r\n\t\t}else{\r\n\t\t\tgap = changeUnits ? freeSpace - (Math.floor(freeSpace/changeUnits) * changeUnits) : freeSpace;\r\n\r\n\t\t\tundersizeCols.forEach(function(column){\r\n\t\t\t\tcolumn.width = shrinkCols ? calcShrink(column) : calcGrow(column);\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn gap;\r\n\t}\r\n\r\n\tif(this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)){\r\n\t\tthis.table.modules.responsiveLayout.update();\r\n\t}\r\n\r\n\t//adjust for vertical scrollbar if present\r\n\tif(this.table.rowManager.element.scrollHeight > this.table.rowManager.element.clientHeight){\r\n\t\ttotalWidth -= this.table.rowManager.element.offsetWidth - this.table.rowManager.element.clientWidth;\r\n\t}\r\n\r\n\tcolumns.forEach(function(column){\r\n\t\tvar width, minWidth, colWidth;\r\n\r\n\t\tif(column.visible){\r\n\r\n\t\t\twidth = column.definition.width;\r\n\t\t\tminWidth = parseInt(column.minWidth);\r\n\r\n\t\t\tif(width){\r\n\r\n\t\t\t\tcolWidth = calcWidth(width);\r\n\r\n\t\t\t\tfixedWidth += colWidth > minWidth ? colWidth : minWidth;\r\n\r\n\t\t\t\tif(column.definition.widthShrink){\r\n\t\t\t\t\tfixedShrinkColumns.push({\r\n\t\t\t\t\t\tcolumn:column,\r\n\t\t\t\t\t\twidth:colWidth > minWidth ? colWidth : minWidth\r\n\t\t\t\t\t});\r\n\t\t\t\t\tflexShrinkUnits += column.definition.widthShrink;\r\n\t\t\t\t}\r\n\r\n\t\t\t}else{\r\n\t\t\t\tflexColumns.push({\r\n\t\t\t\t\tcolumn:column,\r\n\t\t\t\t\twidth:0,\r\n\t\t\t\t});\r\n\t\t\t\tflexGrowUnits += column.definition.widthGrow || 1;\r\n\t\t\t}\r\n\t\t}\r\n\t});\r\n\r\n\t//calculate available space\r\n\tflexWidth = totalWidth - fixedWidth;\r\n\r\n\t//calculate correct column size\r\n\tflexColWidth = Math.floor(flexWidth / flexGrowUnits)\r\n\r\n\t//generate column widths\r\n\tvar gapFill = scaleColumns(flexColumns, flexWidth, flexColWidth, false);\r\n\r\n\t//increase width of last column to account for rounding errors\r\n\tif(flexColumns.length && gapFill > 0){\r\n\t\tflexColumns[flexColumns.length-1].width += + gapFill;\r\n\t}\r\n\r\n\t//caculate space for columns to be shrunk into\r\n\tflexColumns.forEach(function(col){\r\n\t\tflexWidth -= col.width;\r\n\t});\r\n\r\n\toverflowWidth = Math.abs(gapFill) + flexWidth;\r\n\r\n\t//shrink oversize columns if there is no available space\r\n\tif(overflowWidth > 0 && flexShrinkUnits){\r\n\t\tgapFill = scaleColumns(fixedShrinkColumns, overflowWidth, Math.floor(overflowWidth / flexShrinkUnits), true);\r\n\t}\r\n\r\n\t//decrease width of last column to account for rounding errors\r\n\tif(fixedShrinkColumns.length){\r\n\t\tfixedShrinkColumns[fixedShrinkColumns.length-1].width -= gapFill;\r\n\t}\r\n\r\n\tflexColumns.forEach(function(col){\r\n\t\tcol.column.setWidth(col.width);\r\n\t});\r\n\r\n\tfixedShrinkColumns.forEach(function(col){\r\n\t\tcol.column.setWidth(col.width);\r\n\t});\r\n};","import fitData from './modes/fitData.js';\r\nimport fitDataGeneral from './modes/fitDataGeneral.js';\r\nimport fitDataStretch from './modes/fitDataStretch.js';\r\nimport fitColumns from './modes/fitColumns.js';\r\n\r\nexport default {\r\n\tfitData:fitData,\r\n\tfitDataFill:fitDataGeneral,\r\n\tfitDataTable:fitDataGeneral,\r\n\tfitDataStretch:fitDataStretch,\r\n\tfitColumns:fitColumns ,\r\n};","export default {\r\n\t\"default\":{ //hold default locale text\r\n\t\t\"groups\":{\r\n\t\t\t\"item\":\"item\",\r\n\t\t\t\"items\":\"items\",\r\n\t\t},\r\n\t\t\"columns\":{\r\n\t\t},\r\n\t\t\"data\":{\r\n\t\t\t\"loading\":\"Loading\",\r\n\t\t\t\"error\":\"Error\",\r\n\t\t},\r\n\t\t\"pagination\":{\r\n\t\t\t\"page_size\":\"Page Size\",\r\n\t\t\t\"page_title\":\"Show Page\",\r\n\t\t\t\"first\":\"First\",\r\n\t\t\t\"first_title\":\"First Page\",\r\n\t\t\t\"last\":\"Last\",\r\n\t\t\t\"last_title\":\"Last Page\",\r\n\t\t\t\"prev\":\"Prev\",\r\n\t\t\t\"prev_title\":\"Prev Page\",\r\n\t\t\t\"next\":\"Next\",\r\n\t\t\t\"next_title\":\"Next Page\",\r\n\t\t\t\"all\":\"All\",\r\n\t\t},\r\n\t\t\"headerFilters\":{\r\n\t\t\t\"default\":\"filter column...\",\r\n\t\t\t\"columns\":{}\r\n\t\t}\r\n\t},\r\n};","import Module from '../../core/Module.js';\r\n\r\nimport Helpers from '../../core/tools/Helpers.js';\r\n\r\nimport defaultLangs from './defaults/langs.js';\r\n\r\nclass Localize extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.locale = \"default\"; //current locale\r\n\t\tthis.lang = false; //current language\r\n\t\tthis.bindings = {}; //update events to call when locale is changed\r\n\t\tthis.langList = {};\r\n\r\n\t\tthis.registerTableOption(\"locale\", false); //current system language\r\n\t\tthis.registerTableOption(\"langs\", {});\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tthis.langList = Helpers.deepClone(Localize.langs);\r\n\r\n\t\tif(this.table.options.columnDefaults.headerFilterPlaceholder !== false){\r\n\t\t\tthis.setHeaderFilterPlaceholder(this.table.options.columnDefaults.headerFilterPlaceholder);\r\n\t\t}\r\n\r\n\t\tfor(let locale in this.table.options.langs){\r\n\t\t\tthis.installLang(locale, this.table.options.langs[locale]);\r\n\t\t}\r\n\r\n\t\tthis.setLocale(this.table.options.locale);\r\n\r\n\t\tthis.registerTableFunction(\"setLocale\", this.setLocale.bind(this));\r\n\t\tthis.registerTableFunction(\"getLocale\", this.getLocale.bind(this));\r\n\t\tthis.registerTableFunction(\"getLang\", this.getLang.bind(this));\r\n\t}\r\n\r\n\t//set header placehoder\r\n\tsetHeaderFilterPlaceholder(placeholder){\r\n\t\tthis.langList.default.headerFilters.default = placeholder;\r\n\t}\r\n\r\n\t//set header filter placeholder by column\r\n\tsetHeaderFilterColumnPlaceholder(column, placeholder){\r\n\t\tthis.langList.default.headerFilters.columns[column] = placeholder;\r\n\r\n\t\tif(this.lang && !this.lang.headerFilters.columns[column]){\r\n\t\t\tthis.lang.headerFilters.columns[column] = placeholder;\r\n\t\t}\r\n\t}\r\n\r\n\t//setup a lang description object\r\n\tinstallLang(locale, lang){\r\n\t\tif(this.langList[locale]){\r\n\t\t\tthis._setLangProp(this.langList[locale], lang);\r\n\t\t}else{\r\n\t\t\tthis.langList[locale] = lang;\r\n\t\t}\r\n\t}\r\n\r\n\t_setLangProp(lang, values){\r\n\t\tfor(let key in values){\r\n\t\t\tif(lang[key] && typeof lang[key] == \"object\"){\r\n\t\t\t\tthis._setLangProp(lang[key], values[key])\r\n\t\t\t}else{\r\n\t\t\t\tlang[key] = values[key];\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//set current locale\r\n\tsetLocale(desiredLocale){\r\n\t\tdesiredLocale = desiredLocale || \"default\";\r\n\r\n\t\t//fill in any matching languge values\r\n\t\tfunction traverseLang(trans, path){\r\n\t\t\tfor(var prop in trans){\r\n\t\t\t\tif(typeof trans[prop] == \"object\"){\r\n\t\t\t\t\tif(!path[prop]){\r\n\t\t\t\t\t\tpath[prop] = {};\r\n\t\t\t\t\t}\r\n\t\t\t\t\ttraverseLang(trans[prop], path[prop]);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tpath[prop] = trans[prop];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//determing correct locale to load\r\n\t\tif(desiredLocale === true && navigator.language){\r\n\t\t\t//get local from system\r\n\t\t\tdesiredLocale = navigator.language.toLowerCase();\r\n\t\t}\r\n\r\n\t\tif(desiredLocale){\r\n\t\t\t//if locale is not set, check for matching top level locale else use default\r\n\t\t\tif(!this.langList[desiredLocale]){\r\n\t\t\t\tlet prefix = desiredLocale.split(\"-\")[0];\r\n\r\n\t\t\t\tif(this.langList[prefix]){\r\n\t\t\t\t\tconsole.warn(\"Localization Error - Exact matching locale not found, using closest match: \", desiredLocale, prefix);\r\n\t\t\t\t\tdesiredLocale = prefix;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.warn(\"Localization Error - Matching locale not found, using default: \", desiredLocale);\r\n\t\t\t\t\tdesiredLocale = \"default\";\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.locale = desiredLocale;\r\n\r\n\t\t//load default lang template\r\n\t\tthis.lang = Helpers.deepClone(this.langList.default || {});\r\n\r\n\t\tif(desiredLocale != \"default\"){\r\n\t\t\ttraverseLang(this.langList[desiredLocale], this.lang);\r\n\t\t}\r\n\r\n\t\tthis.dispatchExternal(\"localized\", this.locale, this.lang);\r\n\r\n\t\tthis._executeBindings();\r\n\t}\r\n\r\n\t//get current locale\r\n\tgetLocale(locale){\r\n\t\treturn this.locale;\r\n\t}\r\n\r\n\t//get lang object for given local or current if none provided\r\n\tgetLang(locale){\r\n\t\treturn locale ? this.langList[locale] : this.lang;\r\n\t}\r\n\r\n\t//get text for current locale\r\n\tgetText(path, value){\r\n\t\tvar path = value ? path + \"|\" + value : path,\r\n\t\tpathArray = path.split(\"|\"),\r\n\t\ttext = this._getLangElement(pathArray, this.locale);\r\n\r\n\t\t// if(text === false){\r\n\t\t// \tconsole.warn(\"Localization Error - Matching localized text not found for given path: \", path);\r\n\t\t// }\r\n\r\n\t\treturn text || \"\";\r\n\t}\r\n\r\n\t//traverse langs object and find localized copy\r\n\t_getLangElement(path, locale){\r\n\t\tvar root = this.lang;\r\n\r\n\t\tpath.forEach(function(level){\r\n\t\t\tvar rootPath;\r\n\r\n\t\t\tif(root){\r\n\t\t\t\trootPath = root[level];\r\n\r\n\t\t\t\tif(typeof rootPath != \"undefined\"){\r\n\t\t\t\t\troot = rootPath;\r\n\t\t\t\t}else{\r\n\t\t\t\t\troot = false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn root;\r\n\t}\r\n\r\n\t//set update binding\r\n\tbind(path, callback){\r\n\t\tif(!this.bindings[path]){\r\n\t\t\tthis.bindings[path] = [];\r\n\t\t}\r\n\r\n\t\tthis.bindings[path].push(callback);\r\n\r\n\t\tcallback(this.getText(path), this.lang);\r\n\t}\r\n\r\n\t//itterate through bindings and trigger updates\r\n\t_executeBindings(){\r\n\t\tfor(let path in this.bindings){\r\n\t\t\tthis.bindings[path].forEach((binding) => {\r\n\t\t\t\tbinding(this.getText(path), this.lang);\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n}\r\n\r\nLocalize.moduleName = \"localize\";\r\n\r\n//load defaults\r\nLocalize.langs = defaultLangs;\r\n\r\nexport default Localize;","import Module from '../../core/Module.js';\r\nimport TableRegistry from '../../core/tools/TableRegistry.js';\r\n\r\nclass Comms extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tthis.registerTableFunction(\"tableComms\", this.receive.bind(this));\r\n\t}\r\n\r\n\tgetConnections(selectors){\r\n\t\tvar connections = [],\r\n\t\tconnection;\r\n\r\n\t\tconnection = Tabulator.comms.lookupTable(selectors);\r\n\r\n\t\tconnection.forEach((con) =>{\r\n\t\t\tif(this.table !== con){\r\n\t\t\t\tconnections.push(con);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn connections;\r\n\t}\r\n\r\n\tsend(selectors, module, action, data){\r\n\t\tvar connections = this.getConnections(selectors);\r\n\r\n\t\tconnections.forEach((connection) => {\r\n\t\t\tconnection.tableComms(this.table.element, module, action, data);\r\n\t\t});\r\n\r\n\t\tif(!connections.length && selectors){\r\n\t\t\tconsole.warn(\"Table Connection Error - No tables matching selector found\", selectors);\r\n\t\t}\r\n\t}\r\n\r\n\treceive(table, module, action, data){\r\n\t\tif(this.table.modExists(module)){\r\n\t\t\treturn this.table.modules[module].commsReceived(table, action, data);\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Inter-table Comms Error - no such module:\", module);\r\n\t\t}\r\n\t}\r\n}\r\n\r\nComms.moduleName = \"comms\";\r\n\r\nexport default Comms;","import * as coreModules from '../modules/core.js';\r\nimport TableRegistry from './TableRegistry.js';\r\n\r\nexport default class ModuleBinder {\r\n\r\n\tconstructor(tabulator, modules){\r\n\t\tthis.bindStaticFuctionality(tabulator);\r\n\t\tthis.bindModules(tabulator, coreModules, true);\r\n\r\n\t\tif(modules){\r\n\t\t\tthis.bindModules(tabulator, modules);\r\n\t\t}\r\n\t}\r\n\r\n\tbindStaticFuctionality(tabulator){\r\n\t\ttabulator.moduleBindings = {};\r\n\r\n\t\ttabulator.extendModule = function(name, property, values){\r\n\t\t\tif(tabulator.moduleBindings[name]){\r\n\t\t\t\tvar source = tabulator.moduleBindings[name].prototype[property];\r\n\r\n\t\t\t\tif(source){\r\n\t\t\t\t\tif(typeof values == \"object\"){\r\n\t\t\t\t\t\tfor(let key in values){\r\n\t\t\t\t\t\t\tsource[key] = values[key];\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tconsole.warn(\"Module Error - Invalid value type, it must be an object\");\r\n\t\t\t\t\t}\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.warn(\"Module Error - property does not exist:\", property);\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Module Error - module does not exist:\", name);\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\ttabulator.registerModule = function(modules){\r\n\t\t\tif(!Array.isArray(modules)){\r\n\t\t\t\tmodules = [modules];\r\n\t\t\t}\r\n\r\n\t\t\tmodules.forEach((mod) => {\r\n\t\t\t\ttabulator.registerModuleBinding(mod)\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\ttabulator.registerModuleBinding = function(mod){\r\n\t\t\ttabulator.moduleBindings[mod.moduleName] = mod;\r\n\t\t};\r\n\r\n\t\ttabulator.findTable = function(query){\r\n\t\t\tvar results = TableRegistry.lookupTable(query, true);\r\n\t\t\treturn Array.isArray(results) && !results.length ? false : results;\r\n\t\t}\r\n\r\n\t\t//ensure that module are bound to instantiated function\r\n\t\ttabulator.prototype.bindModules = function(){\r\n\t\t\tthis.modules = {};\r\n\r\n\t\t\tfor(var name in tabulator.moduleBindings){\r\n\t\t\t\tlet mod = tabulator.moduleBindings[name];\r\n\r\n\t\t\t\tthis.modules[name] = new mod(this);\r\n\r\n\t\t\t\tif(mod.prototype.moduleCore){\r\n\t\t\t\t\tthis.modulesCore[name] = this.modules[name];\r\n\t\t\t\t}else{\r\n\t\t\t\t\tthis.modulesRegular[name] = this.modules[name];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tbindModules(tabulator, modules, core){\r\n\t\tvar mods = Object.values(modules);\r\n\r\n\t\tif(core){\r\n\t\t\tmods.forEach((mod) => {\r\n\t\t\t\tmod.prototype.moduleCore = true;\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\ttabulator.registerModule(mods);\r\n\t}\r\n}","'use strict';\r\n\r\nimport defaultOptions from './defaults/options.js';\r\n\r\nimport ColumnManager from './ColumnManager.js';\r\nimport RowManager from './RowManager.js';\r\nimport FooterManager from './FooterManager.js';\r\n\r\nimport InteractionMonitor from './tools/InteractionMonitor.js';\r\nimport ComponentFuctionBinder from './tools/ComponentFuctionBinder.js';\r\nimport DataLoader from './tools/dataLoader.js';\r\n\r\nimport ExternalEventBus from './tools/ExternalEventBus.js';\r\nimport InternalEventBus from './tools/InternalEventBus.js';\r\n\r\nimport TableRegistry from './tools/TableRegistry.js';\r\nimport ModuleBinder from './tools/ModuleBinder.js';\r\n\r\nimport OptionsList from './tools/OptionsList.js';\r\n\r\nclass Tabulator {\r\n\r\n\tconstructor(element, options){\r\n\r\n\t\tthis.options = {};\r\n\r\n\t\tthis.columnManager = null; // hold Column Manager\r\n\t\tthis.rowManager = null; //hold Row Manager\r\n\t\tthis.footerManager = null; //holder Footer Manager\r\n\t\tthis.vdomHoz = null; //holder horizontal virtual dom\r\n\t\tthis.externalEvents = null; //handle external event messaging\r\n\t\tthis.eventBus = null; //handle internal event messaging\r\n\t\tthis.interactionMonitor = false; //track user interaction\r\n\t\tthis.browser = \"\"; //hold current browser type\r\n\t\tthis.browserSlow = false; //handle reduced functionality for slower browsers\r\n\t\tthis.browserMobile = false; //check if running on moble, prevent resize cancelling edit on keyboard appearence\r\n\t\tthis.rtl = false; //check if the table is in RTL mode\r\n\r\n\t\tthis.componentFunctionBinder = new ComponentFuctionBinder(this); //bind component functions\r\n\t\tthis.dataLoader = false; //bind component functions\r\n\r\n\t\tthis.modules = {}; //hold all modules bound to this table\r\n\t\tthis.modulesCore = {}; //hold core modules bound to this table (for initialization purposes)\r\n\t\tthis.modulesRegular = {}; //hold regular modules bound to this table (for initialization purposes)\r\n\r\n\t\tthis.optionsList = new OptionsList(this, \"table constructor\");\r\n\r\n\t\tif(this.initializeElement(element)){\r\n\r\n\t\t\tthis.initialzeCoreSystems(options);\r\n\r\n\t\t\t//delay table creation to allow event bindings immediatly after the constructor\r\n\t\t\tsetTimeout(() => {\r\n\t\t\t\tthis._create();\r\n\t\t\t})\r\n\t\t}\r\n\r\n\t\tTableRegistry.register(this); //register table for inderdevice communication\r\n\t}\r\n\r\n\tinitializeElement(element){\r\n\t\tif(typeof HTMLElement !== \"undefined\" && element instanceof HTMLElement){\r\n\t\t\tthis.element = element;\r\n\t\t\treturn true;\r\n\t\t}else if(typeof element === \"string\"){\r\n\t\t\tthis.element = document.querySelector(element);\r\n\r\n\t\t\tif(this.element){\r\n\t\t\t\treturn true;\r\n\t\t\t}else{\r\n\t\t\t\tconsole.error(\"Tabulator Creation Error - no element found matching selector: \", element);\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tconsole.error(\"Tabulator Creation Error - Invalid element provided:\", element);\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\tinitialzeCoreSystems(options){\r\n\t\tthis.columnManager = new ColumnManager(this);\r\n\t\tthis.rowManager = new RowManager(this);\r\n\t\tthis.footerManager = new FooterManager(this);\r\n\t\tthis.dataLoader = new DataLoader(this);\r\n\r\n\t\tthis.bindModules();\r\n\r\n\t\tthis.options = this.optionsList.generate(Tabulator.defaultOptions, options)\r\n\r\n\t\tthis._clearObjectPointers();\r\n\r\n\t\tthis._mapDepricatedFunctionality();\r\n\r\n\t\tthis.externalEvents = new ExternalEventBus(this.options, this.options.debugEventsExternal);\r\n\t\tthis.eventBus = new InternalEventBus(this.options.debugEventsInternal);\r\n\r\n\t\tthis.interactionMonitor = new InteractionMonitor(this);\r\n\r\n\t\tthis.dataLoader.initialize();\r\n\t\tthis.columnManager.initialize();\r\n\t\tthis.rowManager.initialize();\r\n\t\tthis.footerManager.initialize();\r\n\t}\r\n\r\n\trtlCheck(){\r\n\t\tvar style = window.getComputedStyle(this.element);\r\n\r\n\t\tswitch(this.options.textDirection){\r\n\t\t\tcase\"auto\":\r\n\t\t\tif(style.direction !== \"rtl\"){\r\n\t\t\t\tbreak;\r\n\t\t\t};\r\n\r\n\t\t\tcase \"rtl\":\r\n\t\t\tthis.element.classList.add(\"tabulator-rtl\");\r\n\t\t\tthis.rtl = true;\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"ltr\":\r\n\t\t\tthis.element.classList.add(\"tabulator-ltr\");\r\n\r\n\t\t\tdefault:\r\n\t\t\tthis.rtl = false;\r\n\t\t}\r\n\t}\r\n\r\n\t//convert depricated functionality to new functions\r\n\t_mapDepricatedFunctionality(){\r\n\t\t//all previously deprecated functionality removed in the 5.0 release\r\n\t}\r\n\r\n\t_clearSelection(){\r\n\r\n\t\tthis.element.classList.add(\"tabulator-block-select\");\r\n\r\n\t\tif (window.getSelection) {\r\n\t\t if (window.getSelection().empty) { // Chrome\r\n\t\t \twindow.getSelection().empty();\r\n\t\t } else if (window.getSelection().removeAllRanges) { // Firefox\r\n\t\t \twindow.getSelection().removeAllRanges();\r\n\t\t }\r\n\t\t} else if (document.selection) { // IE?\r\n\t\t\tdocument.selection.empty();\r\n\t\t}\r\n\r\n\t\tthis.element.classList.remove(\"tabulator-block-select\");\r\n\t}\r\n\r\n\t//concreate table\r\n\t_create(){\r\n\t\tthis.externalEvents.dispatch(\"tableBuilding\");\r\n\t\tthis.eventBus.dispatch(\"table-building\");\r\n\r\n\t\tthis.rtlCheck();\r\n\r\n\t\tthis._buildElement();\r\n\r\n\t\tthis._loadInitialData();\r\n\t}\r\n\r\n\t//clear pointers to objects in default config object\r\n\t_clearObjectPointers(){\r\n\t\tthis.options.columns = this.options.columns.slice(0);\r\n\r\n\t\tif(this.options.data && !this.options.reactiveData){\r\n\t\t\tthis.options.data = this.options.data.slice(0);\r\n\t\t}\r\n\t}\r\n\r\n\t//build tabulator element\r\n\t_buildElement(){\r\n\t\tvar element = this.element,\r\n\t\toptions = this.options;\r\n\r\n\t\telement.classList.add(\"tabulator\");\r\n\t\telement.setAttribute(\"role\", \"grid\");\r\n\r\n\t\t//empty element\r\n\t\twhile(element.firstChild) element.removeChild(element.firstChild);\r\n\r\n\t\t//set table height\r\n\t\tif(options.height){\r\n\t\t\toptions.height = isNaN(options.height) ? options.height : options.height + \"px\";\r\n\t\t\telement.style.height = options.height;\r\n\t\t}\r\n\r\n\t\t//set table min height\r\n\t\tif(options.minHeight !== false){\r\n\t\t\toptions.minHeight = isNaN(options.minHeight) ? options.minHeight : options.minHeight + \"px\";\r\n\t\t\telement.style.minHeight = options.minHeight;\r\n\t\t}\r\n\r\n\t\t//set table maxHeight\r\n\t\tif(options.maxHeight !== false){\r\n\t\t\toptions.maxHeight = isNaN(options.maxHeight) ? options.maxHeight : options.maxHeight + \"px\";\r\n\t\t\telement.style.maxHeight = options.maxHeight;\r\n\t\t}\r\n\r\n\t\tthis.columnManager.initialize();\r\n\t\tthis.rowManager.initialize();\r\n\r\n\t\tthis._detectBrowser();\r\n\r\n\t\t//initialize core modules\r\n\t\tfor (let key in this.modulesCore){\r\n\t\t\tlet mod = this.modulesCore[key];\r\n\r\n\t\t\tmod.initialize();\r\n\t\t}\r\n\r\n\t\t//configure placeholder element\r\n\t\tif(typeof options.placeholder == \"string\"){\r\n\r\n\t\t\tvar el = document.createElement(\"div\");\r\n\t\t\tel.classList.add(\"tabulator-placeholder\");\r\n\r\n\t\t\tvar span = document.createElement(\"span\");\r\n\t\t\tspan.innerHTML = options.placeholder;\r\n\r\n\t\t\tel.appendChild(span);\r\n\r\n\t\t\toptions.placeholder = el;\r\n\t\t}\r\n\r\n\t\t//build table elements\r\n\t\telement.appendChild(this.columnManager.getElement());\r\n\t\telement.appendChild(this.rowManager.getElement());\r\n\r\n\t\tif(options.footerElement){\r\n\t\t\tthis.footerManager.activate();\r\n\t\t}\r\n\r\n\t\tif(options.autoColumns && this.options.data){\r\n\t\t\tthis.columnManager.generateColumnsFromRowData(this.options.data);\r\n\t\t}\r\n\r\n\t\t//initialize regular modules\r\n\t\tfor (let key in this.modulesRegular){\r\n\t\t\tlet mod = this.modulesRegular[key];\r\n\r\n\t\t\tmod.initialize();\r\n\t\t}\r\n\r\n\t\tthis.columnManager.setColumns(options.columns);\r\n\r\n\t\tthis.eventBus.dispatch(\"table-built\");\r\n\t\tthis.externalEvents.dispatch(\"tableBuilt\");\r\n\t}\r\n\r\n\t_loadInitialData(){\r\n\t\tthis.dataLoader.load(this.options.data);\r\n\t}\r\n\r\n\t//deconstructor\r\n\tdestroy(){\r\n\t\tvar element = this.element;\r\n\r\n\t\tTableRegistry.deregister(this); //deregister table from inderdevice communication\r\n\r\n\t\tthis.eventBus.dispatch(\"table-destroy\");\r\n\r\n\t\t//clear row data\r\n\t\tthis.rowManager.rows.forEach(function(row){\r\n\t\t\trow.wipe();\r\n\t\t});\r\n\r\n\t\tthis.rowManager.rows = [];\r\n\t\tthis.rowManager.activeRows = [];\r\n\t\tthis.rowManager.displayRows = [];\r\n\r\n\t\t//clear DOM\r\n\t\twhile(element.firstChild) element.removeChild(element.firstChild);\r\n\t\telement.classList.remove(\"tabulator\");\r\n\t}\r\n\r\n\t_detectBrowser(){\r\n\t\tvar ua = navigator.userAgent||navigator.vendor||window.opera;\r\n\r\n\t\tif(ua.indexOf(\"Trident\") > -1){\r\n\t\t\tthis.browser = \"ie\";\r\n\t\t\tthis.browserSlow = true;\r\n\t\t}else if(ua.indexOf(\"Edge\") > -1){\r\n\t\t\tthis.browser = \"edge\";\r\n\t\t\tthis.browserSlow = true;\r\n\t\t}else if(ua.indexOf(\"Firefox\") > -1){\r\n\t\t\tthis.browser = \"firefox\";\r\n\t\t\tthis.browserSlow = false;\r\n\t\t}else{\r\n\t\t\tthis.browser = \"other\";\r\n\t\t\tthis.browserSlow = false;\r\n\t\t}\r\n\r\n\t\tthis.browserMobile = /(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i.test(ua)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\\-(n|u)|c55\\/|capi|ccwa|cdm\\-|cell|chtm|cldc|cmd\\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\\-s|devi|dica|dmob|do(c|p)o|ds(12|\\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\\-|_)|g1 u|g560|gene|gf\\-5|g\\-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd\\-(m|p|t)|hei\\-|hi(pt|ta)|hp( i|ip)|hs\\-c|ht(c(\\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\\-(20|go|ma)|i230|iac( |\\-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc\\-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|\\-[a-w])|libw|lynx|m1\\-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m\\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\\-2|po(ck|rt|se)|prox|psio|pt\\-g|qa\\-a|qc(07|12|21|32|60|\\-[2-7]|i\\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\\-|oo|p\\-)|sdk\\/|se(c(\\-|0|1)|47|mc|nd|ri)|sgh\\-|shar|sie(\\-|m)|sk\\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\\-|v\\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\\-|tdg\\-|tel(i|m)|tim\\-|t\\-mo|to(pl|sh)|ts(70|m\\-|m3|m5)|tx\\-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\\-|your|zeto|zte\\-/i.test(ua.substr(0,4));\r\n\t}\r\n\r\n\t////////////////// Data Handling //////////////////\r\n\t//block table redrawing\r\n\tblockRedraw(){\r\n\t\treturn this.rowManager.blockRedraw();\r\n\t}\r\n\r\n\t//restore table redrawing\r\n\trestoreRedraw(){\r\n\t\treturn this.rowManager.restoreRedraw();\r\n\t}\r\n\r\n\t//local data from local file\r\n\tsetDataFromLocalFile(extensions){\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tvar input = document.createElement(\"input\");\r\n\t\t\tinput.type = \"file\";\r\n\t\t\tinput.accept = extensions || \".json,application/json\";\r\n\r\n\t\t\tinput.addEventListener(\"change\", (e) => {\r\n\t\t\t\tvar file = input.files[0],\r\n\t\t\t\treader = new FileReader(),\r\n\t\t\t\tdata;\r\n\r\n\t\t\t\treader.readAsText(file);\r\n\r\n\t\t\t\treader.onload = (e) => {\r\n\r\n\t\t\t\t\ttry {\r\n\t\t\t\t\t\tdata = JSON.parse(reader.result);\r\n\t\t\t\t\t} catch(e) {\r\n\t\t\t\t\t\tconsole.warn(\"File Load Error - File contents is invalid JSON\", e);\r\n\t\t\t\t\t\treject(e);\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tthis.setData(data)\r\n\t\t\t\t\t.then((data) => {\r\n\t\t\t\t\t\tresolve(data);\r\n\t\t\t\t\t})\r\n\t\t\t\t\t.catch((err) => {\r\n\t\t\t\t\t\tresolve(err);\r\n\t\t\t\t\t});\r\n\t\t\t\t};\r\n\r\n\t\t\t\treader.onerror = (e) => {\r\n\t\t\t\t\tconsole.warn(\"File Load Error - Unable to read file\");\r\n\t\t\t\t\treject();\r\n\t\t\t\t};\r\n\t\t\t});\r\n\r\n\t\t\tinput.click();\r\n\t\t});\r\n\t}\r\n\r\n\t//load data\r\n\tsetData(data, params, config){\r\n\t\treturn this.dataLoader.load(data, params, config, false);\r\n\t}\r\n\r\n\t//clear data\r\n\tclearData(){\r\n\t\tthis.dataLoader.blockActiveLoad();\r\n\t\tthis.rowManager.clearData();\r\n\t}\r\n\r\n\t//get table data array\r\n\tgetData(active){\r\n\t\treturn this.rowManager.getData(active);\r\n\t}\r\n\r\n\t//get table data array count\r\n\tgetDataCount(active){\r\n\t\treturn this.rowManager.getDataCount(active);\r\n\t}\r\n\r\n\t//replace data, keeping table in position with same sort\r\n\treplaceData(data, params, config){\r\n\t\treturn this.dataLoader.load(data, params, config, true, true);\r\n\t}\r\n\r\n\t//update table data\r\n\tupdateData(data){\r\n\t\tvar responses = 0;\r\n\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tthis.dataLoader.blockActiveLoad();\r\n\r\n\t\t\tif(typeof data === \"string\"){\r\n\t\t\t\tdata = JSON.parse(data);\r\n\t\t\t}\r\n\r\n\t\t\tif(data){\r\n\t\t\t\tdata.forEach((item) => {\r\n\t\t\t\t\tvar row = this.rowManager.findRow(item[this.options.index]);\r\n\r\n\t\t\t\t\tif(row){\r\n\t\t\t\t\t\tresponses++;\r\n\r\n\t\t\t\t\t\trow.updateData(item)\r\n\t\t\t\t\t\t.then(()=>{\r\n\t\t\t\t\t\t\tresponses--;\r\n\r\n\t\t\t\t\t\t\tif(!responses){\r\n\t\t\t\t\t\t\t\tresolve();\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Update Error - No data provided\");\r\n\t\t\t\treject(\"Update Error - No data provided\");\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\taddData(data, pos, index){\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tthis.dataLoader.blockActiveLoad();\r\n\r\n\t\t\tif(typeof data === \"string\"){\r\n\t\t\t\tdata = JSON.parse(data);\r\n\t\t\t}\r\n\r\n\t\t\tif(data){\r\n\t\t\t\tthis.rowManager.addRows(data, pos, index)\r\n\t\t\t\t.then((rows) => {\r\n\t\t\t\t\tvar output = [];\r\n\r\n\t\t\t\t\trows.forEach(function(row){\r\n\t\t\t\t\t\toutput.push(row.getComponent());\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\tresolve(output);\r\n\t\t\t\t});\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Update Error - No data provided\");\r\n\t\t\t\treject(\"Update Error - No data provided\");\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t//update table data\r\n\tupdateOrAddData(data){\r\n\t\tvar rows = [],\r\n\t\tresponses = 0;\r\n\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tthis.dataLoader.blockActiveLoad();\r\n\r\n\t\t\tif(typeof data === \"string\"){\r\n\t\t\t\tdata = JSON.parse(data);\r\n\t\t\t}\r\n\r\n\t\t\tif(data){\r\n\t\t\t\tdata.forEach((item) => {\r\n\t\t\t\t\tvar row = this.rowManager.findRow(item[this.options.index]);\r\n\r\n\t\t\t\t\tresponses++;\r\n\r\n\t\t\t\t\tif(row){\r\n\t\t\t\t\t\trow.updateData(item)\r\n\t\t\t\t\t\t.then(()=>{\r\n\t\t\t\t\t\t\tresponses--;\r\n\t\t\t\t\t\t\trows.push(row.getComponent());\r\n\r\n\t\t\t\t\t\t\tif(!responses){\r\n\t\t\t\t\t\t\t\tresolve(rows);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tthis.rowManager.addRows(item)\r\n\t\t\t\t\t\t.then((newRows)=>{\r\n\t\t\t\t\t\t\tresponses--;\r\n\t\t\t\t\t\t\trows.push(newRows[0].getComponent());\r\n\r\n\t\t\t\t\t\t\tif(!responses){\r\n\t\t\t\t\t\t\t\tresolve(rows);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Update Error - No data provided\");\r\n\t\t\t\treject(\"Update Error - No data provided\");\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t//get row object\r\n\tgetRow(index){\r\n\t\tvar row = this.rowManager.findRow(index);\r\n\r\n\t\tif(row){\r\n\t\t\treturn row.getComponent();\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Find Error - No matching row found:\", index);\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\t//get row object\r\n\tgetRowFromPosition(position, active){\r\n\t\tvar row = this.rowManager.getRowFromPosition(position, active);\r\n\r\n\t\tif(row){\r\n\t\t\treturn row.getComponent();\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Find Error - No matching row found:\", position);\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\t//delete row from table\r\n\tdeleteRow(index){\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tvar count = 0,\r\n\t\t\tsuccessCount = 0,\r\n\t\t\tfoundRows = [];\r\n\r\n\t\t\tfunction doneCheck(){\r\n\t\t\t\tcount++;\r\n\r\n\t\t\t\tif(count == index.length){\r\n\t\t\t\t\tif(successCount){\r\n\t\t\t\t\t\tthis.rowManager.reRenderInPosition();\r\n\t\t\t\t\t\tresolve();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif(!Array.isArray(index)){\r\n\t\t\t\tindex = [index];\r\n\t\t\t}\r\n\r\n\t\t\t//find matching rows\r\n\t\t\tindex.forEach((item) =>{\r\n\t\t\t\tvar row = this.rowManager.findRow(item, true);\r\n\r\n\t\t\t\tif(row){\r\n\t\t\t\t\tfoundRows.push(row);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.warn(\"Delete Error - No matching row found:\", item);\r\n\t\t\t\t\treject(\"Delete Error - No matching row found\")\r\n\t\t\t\t\tdoneCheck();\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\t//sort rows into correct order to ensure smooth delete from table\r\n\t\t\tfoundRows.sort((a, b) => {\r\n\t\t\t\treturn this.rowManager.rows.indexOf(a) > this.rowManager.rows.indexOf(b) ? 1 : -1;\r\n\t\t\t});\r\n\r\n\t\t\tfoundRows.forEach((row) =>{\r\n\t\t\t\trow.delete()\r\n\t\t\t\t.then(() => {\r\n\t\t\t\t\tsuccessCount++;\r\n\t\t\t\t\tdoneCheck();\r\n\t\t\t\t})\r\n\t\t\t\t.catch((err) => {\r\n\t\t\t\t\tdoneCheck();\r\n\t\t\t\t\treject(err);\r\n\t\t\t\t});\r\n\t\t\t});\r\n\t\t});\r\n\t}\r\n\r\n\t//add row to table\r\n\taddRow(data, pos, index){\r\n\t\tif(typeof data === \"string\"){\r\n\t\t\tdata = JSON.parse(data);\r\n\t\t}\r\n\r\n\t\treturn this.rowManager.addRows(data, pos, index)\r\n\t\t.then((rows)=>{\r\n\t\t\treturn rows[0].getComponent();\r\n\t\t});\r\n\t}\r\n\r\n\t//update a row if it exitsts otherwise create it\r\n\tupdateOrAddRow(index, data){\r\n\t\tvar row = this.rowManager.findRow(index);\r\n\r\n\t\tif(typeof data === \"string\"){\r\n\t\t\tdata = JSON.parse(data);\r\n\t\t}\r\n\r\n\t\tif(row){\r\n\t\t\treturn row.updateData(data)\r\n\t\t\t.then(()=>{\r\n\t\t\t\treturn row.getComponent();\r\n\t\t\t})\r\n\t\t}else{\r\n\t\t\treturn this.rowManager.addRows(data)\r\n\t\t\t.then((rows)=>{\r\n\t\t\t\treturn rows[0].getComponent();\r\n\t\t\t})\r\n\t\t}\r\n\t}\r\n\r\n\t//update row data\r\n\tupdateRow(index, data){\r\n\t\tvar row = this.rowManager.findRow(index);\r\n\r\n\t\tif(typeof data === \"string\"){\r\n\t\t\tdata = JSON.parse(data);\r\n\t\t}\r\n\r\n\t\tif(row){\r\n\t\t\treturn row.updateData(data)\r\n\t\t\t.then(()=>{\r\n\t\t\t\tresolve(row.getComponent());\r\n\t\t\t})\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Update Error - No matching row found:\", index);\r\n\t\t\treturn Promise.reject(\"Update Error - No matching row found\");\r\n\t\t}\r\n\t}\r\n\r\n\t//scroll to row in DOM\r\n\tscrollToRow(index, position, ifVisible){\r\n\t\tvar row = this.rowManager.findRow(index);\r\n\r\n\t\tif(row){\r\n\t\t\treturn this.rowManager.scrollToRow(row, position, ifVisible)\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Scroll Error - No matching row found:\", index);\r\n\t\t\treturn Promise.reject(\"Scroll Error - No matching row found\");\r\n\t\t}\r\n\t}\r\n\r\n\tmoveRow(from, to, after){\r\n\t\tvar fromRow = this.rowManager.findRow(from);\r\n\r\n\t\tif(fromRow){\r\n\t\t\tfromRow.moveToRow(to, after);\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Move Error - No matching row found:\", from);\r\n\t\t}\r\n\t}\r\n\r\n\tgetRows(active){\r\n\t\treturn this.rowManager.getComponents(active);\r\n\t}\r\n\r\n\t//get position of row in table\r\n\tgetRowPosition(index, active){\r\n\t\tvar row = this.rowManager.findRow(index);\r\n\r\n\t\tif(row){\r\n\t\t\treturn this.rowManager.getRowPosition(row, active);\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Position Error - No matching row found:\", index);\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\t/////////////// Column Functions ///////////////\r\n\tsetColumns(definition){\r\n\t\tthis.columnManager.setColumns(definition);\r\n\t}\r\n\r\n\tgetColumns(structured){\r\n\t\treturn this.columnManager.getComponents(structured);\r\n\t}\r\n\r\n\tgetColumn(field){\r\n\t\tvar col = this.columnManager.findColumn(field);\r\n\r\n\t\tif(col){\r\n\t\t\treturn col.getComponent();\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Find Error - No matching column found:\", field);\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\tgetColumnDefinitions(){\r\n\t\treturn this.columnManager.getDefinitionTree();\r\n\t}\r\n\r\n\tshowColumn(field){\r\n\t\tvar column = this.columnManager.findColumn(field);\r\n\r\n\t\tif(column){\r\n\t\t\tcolumn.show();\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Column Show Error - No matching column found:\", field);\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\thideColumn(field){\r\n\t\tvar column = this.columnManager.findColumn(field);\r\n\r\n\t\tif(column){\r\n\t\t\tcolumn.hide();\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Column Hide Error - No matching column found:\", field);\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\ttoggleColumn(field){\r\n\t\tvar column = this.columnManager.findColumn(field);\r\n\r\n\t\tif(column){\r\n\t\t\tif(column.visible){\r\n\t\t\t\tcolumn.hide();\r\n\t\t\t}else{\r\n\t\t\t\tcolumn.show();\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Column Visibility Toggle Error - No matching column found:\", field);\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\taddColumn(definition, before, field){\r\n\t\tvar column = this.columnManager.findColumn(field);\r\n\r\n\t\treturn this.columnManager.addColumn(definition, before, column)\r\n\t\t.then((column) => {\r\n\t\t\treturncolumn.getComponent();\r\n\t\t});\r\n\t}\r\n\r\n\tdeleteColumn(field){\r\n\t\tvar column = this.columnManager.findColumn(field);\r\n\r\n\t\tif(column){\r\n\t\t\treturn column.delete();\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Column Delete Error - No matching column found:\", field);\r\n\t\t\treturn Promise.reject();\r\n\t\t}\r\n\t}\r\n\r\n\tupdateColumnDefinition(field, definition){\r\n\t\tvar column = this.columnManager.findColumn(field);\r\n\r\n\t\tif(column){\r\n\t\t\treturn column.updateDefinition(definition)\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Column Update Error - No matching column found:\", field);\r\n\t\t\treturn Promise.reject();\r\n\t\t}\r\n\t}\r\n\r\n\tmoveColumn(from, to, after){\r\n\t\tvar fromColumn = this.columnManager.findColumn(from);\r\n\t\tvar toColumn = this.columnManager.findColumn(to);\r\n\r\n\t\tif(fromColumn){\r\n\t\t\tif(toColumn){\r\n\t\t\t\tthis.columnManager.moveColumn(fromColumn, toColumn, after)\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Move Error - No matching column found:\", toColumn);\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Move Error - No matching column found:\", from);\r\n\t\t}\r\n\t}\r\n\r\n\t//scroll to column in DOM\r\n\tscrollToColumn(field, position, ifVisible){\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tvar column = this.columnManager.findColumn(field);\r\n\r\n\t\t\tif(column){\r\n\t\t\t\treturn this.columnManager.scrollToColumn(column, position, ifVisible)\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Scroll Error - No matching column found:\", field);\r\n\t\t\t\treturn Promise.reject(\"Scroll Error - No matching column found\");\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t//////////// General Public Functions ////////////\r\n\t//redraw list without updating data\r\n\tredraw(force){\r\n\t\tthis.columnManager.redraw(force);\r\n\t\tthis.rowManager.redraw(force);\r\n\t}\r\n\r\n\tsetHeight(height){\r\n\t\tthis.options.height = isNaN(height) ? height : height + \"px\";\r\n\t\tthis.element.style.height = this.options.height;\r\n\t\tthis.rowManager.initializeRenderer();\r\n\t\tthis.rowManager.redraw();\r\n\t}\r\n\r\n\t//////////////////// Event Bus ///////////////////\r\n\r\n\ton(key, callback){\r\n\t\tthis.externalEvents.subscribe(key, callback);\r\n\t}\r\n\r\n\toff(key, callback){\r\n\t\tthis.externalEvents.unsubscribe(key, callback);\r\n\t}\r\n\r\n\tdispatchEvent(){\r\n\t\tvar args = Array.from(arguments),\r\n\t\tkey = args.shift();\r\n\r\n\t\tthis.externalEvents.dispatch(...arguments)\r\n\t}\r\n\r\n\t////////////// Extension Management //////////////\r\n\tmodExists(plugin, required){\r\n\t\tif(this.modules[plugin]){\r\n\t\t\treturn true;\r\n\t\t}else{\r\n\t\t\tif(required){\r\n\t\t\t\tconsole.error(\"Tabulator Module Not Installed: \" + plugin);\r\n\t\t\t}\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\tmodule(key){\r\n\t\tvar mod = this.modules[key];\r\n\r\n\t\tif(!mod){\r\n\t\t\tconsole.error(\"Tabulator module not installed: \" + key);\r\n\t\t}\r\n\r\n\t\treturn mod;\r\n\t}\r\n}\r\n\r\n//default setup options\r\nTabulator.defaultOptions = defaultOptions;\r\n\r\n//bind modules and static functionality\r\nnew ModuleBinder(Tabulator);\r\n\r\nexport default Tabulator;","export default class PseudoRow {\r\n\r\n\tconstructor (type){\r\n\t\tthis.type = type;\r\n\t\tthis.element = this._createElement();\r\n\t}\r\n\r\n\t_createElement(){\r\n\t\tvar el = document.createElement(\"div\");\r\n\t\tel.classList.add(\"tabulator-row\");\r\n\t\treturn el;\r\n\t}\r\n\r\n\tgetElement(){\r\n\t\treturn this.element;\r\n\t}\r\n\r\n\tgetComponent(){\r\n\t\treturn false;\r\n\t}\r\n\r\n\tgetData(){\r\n\t\treturn {};\r\n\t}\r\n\r\n\tgetHeight(){\r\n\t\treturn this.element.outerHeight;\r\n\t}\r\n\r\n\tinitialize(){}\r\n\r\n\treinitialize(){}\r\n\r\n\tnormalizeHeight(){}\r\n\r\n\tgenerateCells(){}\r\n\r\n\treinitializeHeight(){}\r\n\r\n\tcalcHeight(){}\r\n\r\n\tsetCellHeight(){}\r\n\r\n\tclearCellHeight(){}\r\n}"],"names":["CoreFeature","[object Object]","table","this","data","silent","dataLoader","load","undefined","modules","localize","getText","arguments","bind","getLocale","comms","getConnections","send","layout","getMode","eventBus","subscribe","unsubscribe","key","subscribed","subscriptionChange","dispatch","chain","confirm","externalEvents","value","options","module","Module","name","super","_handler","optionsList","register","columnManager","func","console","warn","component","handler","componentFunctionBinder","priority","rowManager","registerDataPipelineHandler","registerDisplayPipelineHandler","renderInPosition","refreshActiveData","Helpers","el","offsetWidth","offsetHeight","box","getBoundingClientRect","top","window","pageYOffset","document","documentElement","clientTop","left","pageXOffset","clientLeft","obj","clone","Object","assign","Array","isArray","i","Date","deepClone","Accessor","allowedTypes","registerColumnOption","initializeColumn","transformRow","column","match","config","forEach","type","accessor","charAt","toUpperCase","slice","definition","lookupAccessor","params","accessors","row","rowComponent","getComponent","traverse","colCompnent","getFieldValue","setFieldValue","moduleName","generateParamsList","prefix","output","item","concat","push","serializeParams","encoded","encodeURIComponent","join","json","headers","Content-Type","body","url","JSON","stringify","form","FormData","append","Ajax","urlGenerator","loaderPromise","registerTableOption","contentTypeFormatters","ajaxRequestFunc","defaultLoaderPromise","ajaxURLGenerator","defaultURLGenerator","ajaxParams","setParams","ajaxConfig","setConfig","ajaxURL","setUrl","registerTableFunction","getUrl","requestDataCheck","requestData","previousData","sendRequest","update","_loadDefaultConfig","method","force","defaultConfig","call","then","keys","length","toLowerCase","includes","contentType","Promise","resolve","reject","ajaxContentType","Accept","mode","location","origin","credentials","fetch","response","ok","catch","error","status","statusText","pasteParser","pasteAction","customSelection","rowRange","plain","html","list","setData","e","element","setPasteParser","clipboardPasteParser","blocked","col","rowData","getSelection","range","selectNodeContents","sel","removeAllRanges","selection","textRange","moveToElementText","action","parser","dispatchExternal","valid","clipboardData","getData","Clipboard","pasteActions","clipboard","headerFindSuccess","columns","columnMap","rows","transform","cells","mutate","initialValue","oldValue","height","width","className","field","vertAlign","bottom","middle","hozAlign","right","center","tooltip","_generateContents","minWidth","maxWidth","_column","hide","to","result","title","visible","cssClass","variableHeight","headerTooltip","headerVertical","headerHozAlign","parent","contentElement","titleHolderElement","titleElement","groupElement","isGroup","fieldStructure","widthStyled","maxWidthStyled","minWidthStyled","newCol","Column$1","def","checkColumnVisibility","classList","setAttribute","defaults","nestedFieldSeparator","_getNestedData","_getFlatData","langBind","_buildGroupHeader","tap","clearTimeout","dblTap","addEventListener","tapHold","show","stopPropagation","appendChild","contents","textAlign","structure","dataObj","alignment","style","paddingTop","clientHeight","childWidth","Math","heightInitialized","offsetParent","cell","clearCellHeight","cellCount","deregisterColumn","Cell$1","index","fitToData","updates","target","heightStyled","manualHeight","outerHeight","created","generateCells","initialized","minHeight","maxHeight","max","calcHeight","newRowData","tempData","findCell","subject","detatchModules","deleteCells","precision","values","toString","Number","topCalcs","botCalcs","genColumn","topElement","botElement","topRow","botRow","botInitialized","rowsUpdated","recalcActiveRows","recalcRowGroup","groupBy","topCalcParams","topCalc","bottomCalc","botCalc","generateRow","rowsToData","calcs","group","generateRowData","dataTree","getElement","modExists","formatter","pos","columnCalcs","subGroups","ColumnCalcs","indent","collapseEl","expandEl","elementField","startOpen","displayIndex","registerComponentFunction","toggleRow","dataTreeBranchElement","branchEl","dummyEl","firstChild","dataTreeCollapseElement","createElement","dataTreeExpandElement","layoutRow","rowDelete","childArray","children","open","controlEl","insertBefore","marginRight","paddingRight","oldControl","replaceChild","getChildren","child","childRow","create","reinitialize","refreshData","collapseRow","childIndex","findChildIndex","unshift","Row$1","RowComponent","HTMLElement","DataTree","csv","fileContents","pdf","fontStyle","fontSize","cellPadding","content","colSpan","jsPDF","autoTableParams","autoTable","doc","xlsx","sheetName","workbook","merges","XLSX","worksheet","Sheets","setFileContents","sheets","sheetOnly","ArrayBuffer","downloadFunc","mime","filename","blob","navigator","maskLetter","maskWildcard","mask","fillSymbols","Download","downloaders","defaultDownloaders","defaultEditors","input","editorParams","keyCode","onChange","cancel","textarea","getValue","vertNav","cellValue","scrollHeight","display","padding","getRow","focus","normalizeHeight","stopImmediatePropagation","removeEventListener","select","cellEl","initialDisplayValue","listEl","multiselect","dataItems","currentItem","displayItems","currentItems","blurable","searchWord","label","itemParams","dataList","displayList","b","tabIndex","innerHTML","toggleItem","chooseItem","elementAttributes","setTimeout","setItem","indexOf","unsetItem","readOnly","unsetItems","setCurrentItem","cancelItem","preventDefault","character","searchWordTimeout","scrollTovalue","chooseItems","parseItems","autocomplete","uniqueColumnValues","sortValuesList","searchingPlaceholder","fillListIfNotEmpty","matches","searchEl","listItemFormatter","removeChild","items","success","add","filterList","genUniqueColumnValues","parentNode","showList","star","maxStars","size","getElementsByTagName","val","starHolder","starsHolder","parseInt","changeValue","mouseDrag","min","percent","handle","position","bar","mouseDragWidth","updateValue","onRendered","indetermValue","indetermState","tristate","indeterminate","checked","setValue","currentCell","mouseClick","invalidEdit","editors","navigatePrev","navigateLeft","clearEdited","initializeColumnCheck","rowDeleteCheck","cancelEdit","addRow","newRow","findNextEditableCell","findPrevEditableCell","edit","editor","cellRendered","button","recursionBlock","rowEl","offsetTop","scrollTop","scrollLeft","offsetLeft","cellEditor","allowEdit","self","edited","rendered","Node","editedCells","Edit","ExportRow","ExportColumn","cloneTableStyle","columnHeaders","maxDepth","groupData","subGroupData","columnVisCheck","headerDepth","header","rowGroups","exportCols","headerEl","bodyEl","rowFormatter","colVisProp","groupHeader","styles","oddRow","evenRow","firstGroup","setup","mapElementStyles","getField","getColumn","firstCell","_row","format","holder","background-color","color","font-weight","font-family","font-size","text-align","border-top","border-left","border-right","border-bottom","padding-top","padding-left","fromStyle","getComputedStyle","props","Export","defaultFilters","rowVal","RegExp","String","filterVal","headerFilters","headerFilterColumns","prevHeaderFilterChangeCheck","userSetFilter","userRefreshFilter","getHeaderFilters","initializeColumnHeaderFilter","showHeaderFilterElements","tableBuilt","remoteFilterParams","headerFilter","filterFunc","refreshFilter","filterElement","headerFilterParams","editorElement","headerFilterLiveFilterDelay","headerFilterLiveFilter","filter","filters","Filter","all","ajax","findIndex","trackChanges","subscribedExternal","filterMode","activeRows","plaintext","emptyToSpace","sanitizeHTML","money","number","floatVal","parseFloat","decimalSym","symbolAfter","toFixed","decimal","rgx","link","urlPrefix","labelField","formatterParams","urlField","image","src","tickCross","truthy","allowTruthy","datetime","outputFormat","datetimediff","inputFormat","invalid","suffix","humanize","lookup","stars","traffic","colors","isNaN","percentValue","progress","legendColor","legendAlign","legend","barEl","legendEl","holderEl","buttonTick","buttonCross","rownum","checkbox","toggleSelect","formatterPrint","print","formatterClipboard","lookupFormatter","htmlOutput","entityMap","&","<",">","\"","'","=","formatters","Format","leftColumns","rightColumns","leftMargin","rightMargin","initializationMode","layoutCell","frozenCheck","active","calcMargins","layoutColumnPosition","_calcSpace","topInitialized","frozen","leftParents","edge","FrozenColumns","getRows","initialize","adjustTableSize","detachRow","FrozenRows","receiver","_group","getSubGroups","toggleVisibility","Group","groupManager","level","hasSubGroups","old","groups","groupList","generator","elementContents","arrowElement","arrow","groupID","groupKey","splice","updateGroupRows","groupValues","count","getHeadersAndRows","prev","compoment","path","remove","childNodes","groupIDLookups","headerGenerator","setGroupValues","initializeTopRow","lookupFunc","getColumnByField","getGroups","groupStartOpen","after","prevDisplayRow","groupComponents","rowCount","childData","groupListData","pullGroupListData","allowedValues","createGroup","assignRowToExistingGroup","oldGroups","newGroupPath","renderer","GroupRows","History","history","Cell","_rebindRow","redoers","HtmlTableImport","fieldIndex","_generateBlankHeaders","attributes","newElement","attrib","exists","getAttribute","rowClick","rowDblClick","rowContext","rowMouseEnter","rowMouseLeave","rowMouseMove","rowTap","rowDblTap","rowTapHold","cellClick","cellDblClick","cellContext","cellMouseEnter","cellMouseLeave","cellMouseMove","cellTap","cellDblTap","cellTapHold","headerClick","headerDblClick","headerContext","headerMouseEnter","headerMouseLeave","headerMouseMove","headerTap","headerDblTap","headerTapHold","groupClick","groupDblClick","groupContext","groupMouseEnter","groupMouseLeave","subscribers","touchSubscribers","touchWatchers","tapDbl","added","eventMap","subscribeTouchEvents","subscriptionChanged","watchers","callback","Interaction","Keybindings","watchKeys","actions","meta","binding","bindings","navPrev","navNext","navUp","navDown","scrollPageUp","scrollPageDown","undo","scrollToRow","getDisplayRows","Menu","menuElements","blurEvent","escEvent","nestedMenuBlock","menu","passive","LoadMenuEvent","rowClickMenu","isOpen","hideMenu","itemEl","hideOldSubMenus","menuEl","pop","touch","parentOffset","x","y","pageY","MoveColumns","placeholderElement","hoverElement","checkTimeout","checkPeriod","moving","toCol","startX","autoScrollMargin","autoScrollTimeout","touches","colEl","nextColWidthLast","nextCol","prevCol","prevColWidth","startXMove","moveToCol","moveColumn","nextColWidth","pageX","Helpers$1","_unbindMouseMove","xPos","MoveRows","toRow","toRowAfter","hasHandle","moveHover","endMove","tableRowDropEvent","touchMove","connection","connectionSelectorsTables","connectionElements","connections","connectedTable","connectedRow","movableRowsConnectedTables","connectionSelectorsElements","mousemove","nextSibling","moveRow","tableRowDrop","which","rowHandle","prevRow","nextRowHeight","nextRow","diff","startYMove","moveToRow","nextRowHeightLast","setStartPosition","whiteSpace","yPos","connectionTables","commsConnections","prototype","fromRow","delete","Mutator","enabled","mutator","Page","initialLoad","dataChanging","pageSizes","dataReceivedNames","dataSentNames","setMaxPage","initialLoadComplete","registerDisplayHandler","dispRows","paginationSize","testElRow","testElCell","reset","setPageToRow","nextPage","firstBut","nextBut","paginationSizeSelector","pageSelectLabel","prevBut","setPage","previousPage","paginationElement","pageSizeSelect","pagesElement","progressiveLoad","page","rightSize","disabled","lastBut","start","end","scrollHorizontal","margin","cookie","localStorage","expireDate","setDate","Persistence","id","defWatcherBlock","persistence","readers","readFunc","persistenceWriterFunc","retreiveData","retreivedData","sort","sorters","initialSort","get","mergeDefinition","current","oldCols","from","find","parseColumns","validateSorters","writeFunc","definitions","getWidth","defStore","defaultReaders","Print","manualBlock","scrollY","tableEl","printHeader","headerContent","footerContent","scrollX","ReactiveData","origFuncs","currentVersion","version","defineProperty","childField","configurable","apply","shift","newValue","ResizeColumns","prevHandle","_mouseDown","nearestColumn","colIndex","rtl","setWidth","mouseUp","startColumn","ResizeRows","initializeRow","handleDown","observer","autoResize","containerHeight","containerWidth","floor","tableHeight","rerenderColumns","browserMobile","ResizeTable","ResponsiveLayout","hiddenColumns","collapseStartOpen","responsiveLayout","a","collapseHandleColumn","generateCollapsedRowContent","colCount","working","titleHighlight","text","SelectRow","selecting","lastClickedRow","selectPrev","headerCheckboxElement","isRowSelected","_deselectRow","selectable","shiftKey","rowIdx","fromRowIdx","toggledRow","deselectRows","toggledRows","_rowSelectionChanged","_selectRow","rowInfo","selectedRows","emptyAlign","decimalSeparator","thousandSeparator","string","langLocale","datetime$2","boolean","d","c","calc","alignEmptyValues","aRow","bs","as","rd","b1","sortList","setSort","sorter","dir","startingDir","columnHeaderSortMulti","rowComponents","sortMode","sortObj","_sortItems","el1Comp","el2","Sort","integer","isFinite","float","parameters","ends","Validate","clearValidation","_getSelf","_buildValidator","validators","validate","invalidIndex","invalidCells","ResizeTableModule","ResponsiveLayoutModule","SelectRowModule","ValidateModule","ifVisible","rowIndex","elementVertical","VirtualDomHorizontal","rightCol","vDomScrollPosRight","vDomPadLeft","clear","vdomHoz","reinitChanged","columnsByIndex","change","colEnd","layoutRefresh","reinitializeRow","removeColRight","getCell","paddingLeft","leftCol","widthDiff","newWidth","ColumnManager","blockHozScrollEvent","renderClass","renderers","headersElement","nextToColumn","before","parentIndex","nextEl","_verticalAlignHeaders","toIndex","updateRows","fromIndex","adjust","reinitializeWidth","BaiscVertical","VirtualDomVertical","vDomRowHeight","vDomTop","vDomScrollPosBottom","vDomBottomPad","paddingBottom","_addBottomRow","bottomDiff","topPad","heightOccupied","vDomWindowBuffer","fillableSpace","getHeight","vDomScrollPosTop","removableRows","vDomBottom","RowManager","tableElement","heightFixer","createTableElement","firstRender","renderMode","displayRows","displayRowsCount","rowNumColumn","initializeRenderer","activeIndex","displayRowIterator","regenerateRowNumbers","blockRedraw","reverse","setActiveRows","moveRowActual","findRowIndex","skipStage","stage","dataPipeline","reRenderInPosition","basic","fixedHeight","otherHeight","redrawBlock","redrawBlockRestoreConfig","renderTable","links","InteractionManager","tabulator-col","listener","comp","components","changed","findTargets","triggerEvents","targets","previousTargets","msgElement","dataLoaderLoading","template","loadingElement","requestOrder","errorElement","subscriptionNotifiers","debug","args","events","_notifiySubscriptionChange","confirmed","notifiers","_confirm","TableRegistry","results","lastCol","flexGrowUnits","remainingSpace","changeUnits","calcShrink","remainingFlexGrowUnits","shrinkCols","oversizeCols","oversizeSpace","freeSpace","fixedWidth","fixedShrinkColumns","flexColWidth","flexColumns","Layout","Localize","placeholder","lang","_setLangProp","langList","desiredLocale","locale","trans","root","rootPath","loading","page_size","first","first_title","last","Comms","Tabulator","lookupTable","con","coreModules","tabulator","registerModule","modulesCore","Tabulator$1","footerManager","interactionMonitor","browserSlow","ComponentFuctionBinder","bindModules","_clearObjectPointers","debugEventsInternal","extensions","accept","onload","parse","responses","findRow","doneCheck","foundRows","addRows","findColumn","returncolumn","plugin","debugEventsExternal","debugInvalidOptions","columnMaxWidth","columnDefaults","autoColumns","addRowPos","headerVisible","renderHorizontal","renderVerticalBuffer","scrollToRowPosition","scrollToColumnIfVisible","rowFormatterClipboard","ModuleBinder"],"mappings":"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"} \ No newline at end of file diff --git a/package.json b/package.json index 9cb9b0696..1e6dbf1a2 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "tabulator-tables", - "version": "4.9.3", + "version": "5.0.0-alpha.0", "description": "Interactive table generation JavaScript library", "main": "dist/js/tabulator.js", "module": "dist/js/tabulator_esm.js",