{"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/ComponentFunctionBinder.js","../../src/js/core/tools/DataLoader.js","../../src/js/core/tools/ExternalEventBus.js","../../src/js/core/tools/InternalEventBus.js","../../src/js/core/tools/DeprecationAdvisor.js","../../src/js/core/tools/TableRegistry.js","../../src/js/core/tools/Popup.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/tools/Alert.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/jsonLines.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/List.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/date.js","../../src/js/modules/Edit/defaults/editors/time.js","../../src/js/modules/Edit/defaults/editors/datetime.js","../../src/js/modules/Edit/defaults/editors/select.js","../../src/js/modules/Edit/defaults/editors/list.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/Import/defaults/importers.js","../../src/js/modules/Import/defaults/importers/csv.js","../../src/js/modules/Import/defaults/importers/json.js","../../src/js/modules/Import/defaults/importers/array.js","../../src/js/modules/Import/Import.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/defaults/pageCounters.js","../../src/js/modules/Page/defaults/pageCounters/rows.js","../../src/js/modules/Page/defaults/pageCounters/pages.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/Popup/Popup.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/Tooltip/Tooltip.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, columnsChanged){\r\n\t\treturn this.table.dataLoader.load(data, undefined, undefined, undefined, silent, columnsChanged);\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(force){\r\n\t\treturn this.table.modules.layout.layout(force);\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\treturn this.table.eventBus.subscribe(...arguments);\r\n\t}\r\n\r\n\tunsubscribe(){\r\n\t\treturn this.table.eventBus.unsubscribe(...arguments);\r\n\t}\r\n\r\n\tsubscribed(key){\r\n\t\treturn this.table.eventBus.subscribed(key);\r\n\t}\r\n\r\n\tsubscriptionChange(){\r\n\t\treturn this.table.eventBus.subscriptionChange(...arguments);\r\n\t}\r\n\r\n\tdispatch(){\r\n\t\treturn this.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\treturn this.table.externalEvents.dispatch(...arguments);\r\n\t}\r\n\r\n\tsubscribedExternal(key){\r\n\t\treturn this.table.externalEvents.subscribed(key);\r\n\t}\r\n\r\n\tsubscriptionChangeExternal(){\r\n\t\treturn this.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){\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\t//////////////////////////////////////////\r\n\t/////////// Deprecation Checks ///////////\r\n\t//////////////////////////////////////////\r\n\r\n\tdeprecationCheck(oldOption, newOption){\r\n\t\treturn this.table.deprecationAdvisor.check(oldOption, newOption);\r\n\t}\r\n\r\n\tdeprecationCheckMsg(oldOption, msg){\r\n\t\treturn this.table.deprecationAdvisor.checkMsg(oldOption, msg);\r\n\t}\r\n\r\n\tdeprecationMsg(msg){\r\n\t\treturn this.table.deprecationAdvisor.msg(msg);\r\n\t}\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 Column from './Column.js';\r\n\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\tgetTitleDownload() {\r\n\t\treturn this._column.getTitleDownload();\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.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\"maxInitialWidth\": undefined,\r\n\t\"cssClass\": undefined,\r\n\t\"variableHeight\": 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}\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\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\t\tif(val instanceof Node){\r\n\r\n\t\t\t\t\t//clear previous cell contents\r\n\t\t\t\t\twhile(this.element.firstChild) this.element.removeChild(this.element.firstChild);\r\n\r\n\t\t\t\t\tthis.element.appendChild(val);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tthis.element.innerHTML = \"\";\r\n\r\n\t\t\t\t\tif(val != null){\r\n\t\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\t}\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"undefined\":\r\n\t\t\t\tthis.element.innerHTML = \"\";\r\n\t\t\t\tbreak;\r\n\t\t\tdefault:\r\n\t\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//////////////////// 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, force){\r\n\t\tvar changed = this.setValueProcessData(value, mutate, force);\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\tif(this.column.definition.cellEdited){\r\n\t\t\t\tthis.column.definition.cellEdited.call(this.table, this.getComponent());\r\n\t\t\t}\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, force){\r\n\t\tvar changed = false;\r\n\r\n\t\tif(this.value !== value || force){\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\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\r\n\t\tthis.dispatch(\"cell-height\", this, \"\");\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\r\n\t\tthis.dispatch(\"cell-height\", this, 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}\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.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.titleDownload = null;\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 pre-styled to improve render efficiency\r\n\t\tthis.maxWidth = null; //column maximum width\r\n\t\tthis.maxWidthStyled = \"\"; //column maximum pre-styled to improve render efficiency\r\n\t\tthis.maxInitialWidth = null;\r\n\t\tthis.minWidth = null; //column minimum width\r\n\t\tthis.minWidthStyled = \"\"; //column minimum pre-styled 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\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\tswitch(this.table.options.columnHeaderVertAlign){\r\n\t\t\tcase \"middle\":\r\n\t\t\t\tel.style.justifyContent = \"center\";\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"bottom\":\r\n\t\t\t\tel.style.justifyContent = \"flex-end\";\r\n\t\t\t\tbreak;\r\n\t\t}\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//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._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.dispatch(\"column-init\", this);\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\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//assign additional css classes to column header\r\n\t\tif(def.cssClass){\r\n\t\t\tvar classNames = def.cssClass.split(\" \");\r\n\t\t\tclassNames.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.maxInitialWidth) {\r\n\t\t\tthis.maxInitialWidth = parseInt(def.maxInitialWidth);\r\n\t\t}\r\n\t\t\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 horizontal 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 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\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\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\tcase \"undefined\":\r\n\t\t\t\tel.innerHTML = \"\";\r\n\t\t\t\tbreak;\r\n\t\t\tdefault:\r\n\t\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 classNames = this.definition.cssClass.split(\" \");\r\n\t\t\tclassNames.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\r\n\t\t\tcolumn.columnRendered();\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\tthis.dispatch(\"column-height\", this, this.element.style.height);\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\t// if(!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 alignment\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\r\n\t\tthis.dispatch(\"column-height\", this, \"\");\r\n\t}\r\n\r\n\t//// Retrieve 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 column 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\tgetTitleDownload() {\r\n\t\treturn this.titleDownload;\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(traverse){\r\n\t\tvar columns = [];\r\n\r\n\t\tif(traverse){\r\n\t\t\tthis.columns.forEach((column) => {\r\n\t\t\t\tcolumns.push(column);\r\n\t\t\t\t\t\r\n\t\t\t\tcolumns = columns.concat(column.getColumns(true));\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tcolumns = this.columns;\r\n\t\t}\r\n\t\t\r\n\t\treturn 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//retrieve 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.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, responsiveToggle);\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.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 Math.ceil(this.element.getBoundingClientRect().height);\r\n\t}\r\n\r\n\tsetMinWidth(minWidth){\r\n\t\tif(this.maxWidth && minWidth > this.maxWidth){\r\n\t\t\tminWidth = this.maxWidth;\r\n\r\n\t\t\tconsole.warn(\"the minWidth (\"+ minWidth + \"px) for column '\" + this.field + \"' cannot be bigger that its maxWidth (\"+ this.maxWidthStyled + \")\");\r\n\t\t}\r\n\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\tif(this.minWidth && maxWidth < this.minWidth){\r\n\t\t\tmaxWidth = this.minWidth;\r\n\r\n\t\t\tconsole.warn(\"the maxWidth (\"+ maxWidth + \"px) for column '\" + this.field + \"' cannot be smaller that its minWidth (\"+ this.minWidthStyled + \")\");\r\n\t\t}\r\n\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\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.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\r\n\t\tthis.dispatch(\"column-rendered\", this);\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\t// maxInitialWidth ignored here as width specified\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(force);\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 for non group columns\r\n\tfitToData(force){\r\n\t\tif(this.isGroup){\r\n\t\t\treturn;\r\n\t\t}\r\n\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\tvar setTo = maxWidth + 1;\r\n\t\t\t\tif (this.maxInitialWidth && !force) {\r\n\t\t\t\t\tsetTo = Math.min(setTo, this.maxInitialWidth);\r\n\t\t\t\t}\r\n\t\t\t\tthis.setWidthActual(setTo);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tupdateDefinition(updates){\r\n\t\tvar definition;\r\n\r\n\t\tif(!this.isGroup){\r\n\t\t\tif(!this.parent.isGroup){\r\n\t\t\t\tdefinition = Object.assign({}, this.getDefinition());\r\n\t\t\t\tdefinition = Object.assign(definition, updates);\r\n\r\n\t\t\t\treturn this.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; //clear 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\treturn this.delete()\r\n\t\t\t\t\t\t\t.then(() => {\r\n\t\t\t\t\t\t\t\treturn column.getComponent();\r\n\t\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t});\r\n\t\t\t}else{\r\n\t\t\t\tconsole.error(\"Column Update Error - The updateDefinition function is only available on ungrouped columns\");\r\n\t\t\t\treturn Promise.reject(\"Column Update Error - The updateDefinition function is only available on columns, not column groups\");\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tconsole.error(\"Column Update Error - The updateDefinition function is only available on ungrouped columns\");\r\n\t\t\treturn Promise.reject(\"Column Update Error - The updateDefinition function is only available on columns, not column groups\");\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;\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, clone, list = []){\r\n\t\tvar objectProto = {}.__proto__,\r\n\t\tarrayProto = [].__proto__;\r\n\r\n\t\tif (!clone){\r\n\t\t\tclone = Object.assign(Array.isArray(obj) ? [] : {}, obj);\r\n\t\t}\r\n\r\n\t\tfor(var i in obj) {\r\n\t\t\tlet subject = obj[i],\r\n\t\t\tmatch, copy;\r\n\r\n\t\t\tif(subject != null && typeof subject === \"object\" && (subject.__proto__ === objectProto || subject.__proto__ === arrayProto)){\r\n\t\t\t\tmatch = list.findIndex((item) => {\r\n\t\t\t\t\treturn item.subject === subject;\r\n\t\t\t\t});\r\n\r\n\t\t\t\tif(match > -1){\r\n\t\t\t\t\tclone[i] = list[match].copy;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tcopy = Object.assign(Array.isArray(subject) ? [] : {}, subject);\r\n\r\n\t\t\t\t\tlist.unshift({subject, copy});\r\n\r\n\t\t\t\t\tclone[i] = this.deepClone(subject, copy, list);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn clone;\r\n\t}\r\n}","export default class OptionsList {\r\n\tconstructor(table, msgType, defaults = {}){\r\n\t\tthis.table = table;\r\n\t\tthis.msgType = msgType;\r\n\t\tthis.registeredDefaults = Object.assign({}, defaults);\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 (let 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 (let 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 determine how to size the render area (\"fit\" - fits container to the contents, \"fill\" - fills the container 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 scrolling\r\n\t}\r\n\r\n\tresize(){\r\n\t\t//container has resized, 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//determine weather the row is nearest the top or bottom of the table, return 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\t\t\t\t\t\t\r\n\t\t\t\t\t\tif(offset > 0 && offset < this.elementVertical.clientHeight - rowEl.offsetHeight){\r\n\t\t\t\t\t\t\tresolve();\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\t\tif(this.elementVertical.scrollHeight - this.elementVertical.scrollTop == this.elementVertical.clientHeight){\r\n\t\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\t}else{\r\n\t\t\t\t\t\t\tthis.elementVertical.scrollTop = this.elementVertical.scrollTop - (this.elementVertical.clientHeight / 2);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase \"bottom\":\r\n\r\n\t\t\t\t\t\tif(this.elementVertical.scrollHeight - this.elementVertical.scrollTop == this.elementVertical.clientHeight){\r\n\t\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\t}else{\r\n\t\t\t\t\t\t\tthis.elementVertical.scrollTop = this.elementVertical.scrollTop - this.elementVertical.clientHeight + rowEl.offsetHeight;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase \"top\":\r\n\t\t\t\t\t\tthis.elementVertical.scrollTop = rowEl.offsetTop;\t\t\t\t\t\r\n\t\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\n\r\nexport default class BasicHorizontal 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\n\r\nexport default class VirtualDomHorizontal extends Renderer{\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\t\t\r\n\t\tthis.leftCol = 0;\r\n\t\tthis.rightCol = 0;\r\n\t\tthis.scrollLeft = 0;\r\n\t\t\r\n\t\tthis.vDomScrollPosLeft = 0;\r\n\t\tthis.vDomScrollPosRight = 0;\r\n\t\t\r\n\t\tthis.vDomPadLeft = 0;\r\n\t\tthis.vDomPadRight = 0;\r\n\t\t\r\n\t\tthis.fitDataColAvg = 0;\r\n\t\t\r\n\t\tthis.windowBuffer = 200; //pixel margin to make column visible before it is shown on screen\r\n\t\t\r\n\t\tthis.visibleRows = null;\r\n\r\n\t\tthis.initialized = false;\r\n\t\tthis.isFitData = false;\r\n\t\t\r\n\t\tthis.columns = [];\r\n\t}\r\n\t\r\n\tinitialize(){\r\n\t\tthis.compatibilityCheck();\r\n\t\tthis.layoutCheck();\r\n\t\tthis.vertScrollListen();\r\n\t}\r\n\t\r\n\tcompatibilityCheck(){\r\n\t\tvar columns = this.options(\"columns\"),\r\n\t\tfrozen = false,\r\n\t\tok = true;\r\n\t\t\r\n\t\tif(this.options(\"layout\") == \"fitDataTable\"){\r\n\t\t\tconsole.warn(\"Horizontal Virtual DOM is not compatible with fitDataTable layout mode\");\r\n\t\t\tok = false;\r\n\t\t}\r\n\t\t\r\n\t\tif(this.options(\"responsiveLayout\")){\r\n\t\t\tconsole.warn(\"Horizontal Virtual DOM is not compatible with responsive columns\");\r\n\t\t\tok = false;\r\n\t\t}\r\n\t\t\r\n\t\tif(this.options(\"rtl\")){\r\n\t\t\tconsole.warn(\"Horizontal Virtual DOM is not currently compatible with RTL text direction\");\r\n\t\t\tok = false;\r\n\t\t}\r\n\t\t\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\t\t\t\r\n\t\t\tif(frozen){\r\n\t\t\t\tconsole.warn(\"Horizontal Virtual 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\t\t\r\n\t\t// if(!ok){\r\n\t\t// \toptions.virtualDomHoz = false;\r\n\t\t// }\r\n\t\t\r\n\t\treturn ok;\r\n\t}\r\n\t\r\n\tlayoutCheck(){\r\n\t\tthis.isFitData = this.options(\"layout\").startsWith('fitData');\r\n\t}\r\n\r\n\tvertScrollListen(){\r\n\t\tthis.subscribe(\"scroll-vertical\", this.clearVisRowCache.bind(this));\r\n\t\tthis.subscribe(\"data-refreshed\", this.clearVisRowCache.bind(this));\r\n\t}\r\n\r\n\tclearVisRowCache(){\r\n\t\tthis.visibleRows = null;\r\n\t}\r\n\t\r\n\t//////////////////////////////////////\r\n\t///////// Public Functions ///////////\r\n\t//////////////////////////////////////\r\n\t\r\n\trenderColumns(row, force){\r\n\t\tthis.dataChange();\r\n\t}\r\n\r\n\t\r\n\tscrollColumns(left, dir){\r\n\t\tif(this.scrollLeft != left){\r\n\t\t\tthis.scrollLeft = left;\r\n\t\t\t\r\n\t\t\tthis.scroll(left - (this.vDomScrollPosLeft + this.windowBuffer));\r\n\t\t}\r\n\t}\r\n\t\r\n\tcalcWindowBuffer(){\r\n\t\tvar buffer = this.elementVertical.clientWidth;\r\n\t\t\r\n\t\tthis.table.columnManager.columnsByIndex.forEach((column) => {\r\n\t\t\tif(column.visible){\r\n\t\t\t\tvar width = column.getWidth();\r\n\t\t\t\t\r\n\t\t\t\tif(width > buffer){\r\n\t\t\t\t\tbuffer = width;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\t\t\r\n\t\tthis.windowBuffer = buffer * 2;\r\n\t}\r\n\t\r\n\trerenderColumns(update, blockRedraw){\t\t\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\t\tcolPos = 0;\r\n\t\t\r\n\t\t\r\n\t\tif(update && !this.initialized){\r\n\t\t\treturn;\r\n\t\t}\r\n\t\t\r\n\t\tthis.clear();\r\n\t\t\r\n\t\tthis.calcWindowBuffer();\r\n\t\t\r\n\t\tthis.scrollLeft = this.elementVertical.scrollLeft;\r\n\t\t\r\n\t\tthis.vDomScrollPosLeft = this.scrollLeft - this.windowBuffer;\r\n\t\tthis.vDomScrollPosRight = this.scrollLeft + this.elementVertical.clientWidth + this.windowBuffer;\r\n\t\t\r\n\t\tthis.table.columnManager.columnsByIndex.forEach((column) => {\r\n\t\t\tvar config = {};\r\n\t\t\t\r\n\t\t\tif(column.visible){\r\n\t\t\t\tvar width = column.getWidth();\r\n\t\t\t\t\r\n\t\t\t\tconfig.leftPos = colPos;\r\n\t\t\t\tconfig.rightPos = colPos + width;\r\n\t\t\t\t\r\n\t\t\t\tconfig.width = width;\r\n\t\t\t\t\r\n\t\t\t\tif (this.isFitData) {\r\n\t\t\t\t\tconfig.fitDataCheck = column.modules.vdomHoz ? column.modules.vdomHoz.fitDataCheck : true;\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\tif((colPos + width > this.vDomScrollPosLeft) && (colPos < this.vDomScrollPosRight)){\r\n\t\t\t\t\t//column is visible\r\n\t\t\t\t\t\r\n\t\t\t\t\tif(this.leftCol == -1){\r\n\t\t\t\t\t\tthis.leftCol = this.columns.length;\r\n\t\t\t\t\t\tthis.vDomPadLeft = colPos;\r\n\t\t\t\t\t}\r\n\t\t\t\t\t\r\n\t\t\t\t\tthis.rightCol = this.columns.length;\r\n\t\t\t\t}else{\r\n\t\t\t\t\t// column is hidden\r\n\t\t\t\t\tif(this.leftCol !== -1){\r\n\t\t\t\t\t\tthis.vDomPadRight += width;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\tthis.columns.push(column);\r\n\t\t\t\t\r\n\t\t\t\tcolumn.modules.vdomHoz = config;\r\n\t\t\t\t\r\n\t\t\t\tcolPos += width;\r\n\t\t\t}\r\n\t\t});\r\n\t\t\r\n\t\tthis.tableElement.style.paddingLeft = this.vDomPadLeft + \"px\";\r\n\t\tthis.tableElement.style.paddingRight = this.vDomPadRight + \"px\";\r\n\t\t\r\n\t\tthis.initialized = true;\r\n\t\t\r\n\t\tif(!blockRedraw){\r\n\t\t\tif(!update || this.reinitChanged(old)){\r\n\t\t\t\tthis.reinitializeRows();\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\tthis.elementVertical.scrollLeft = this.scrollLeft;\r\n\t}\r\n\t\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\t\r\n\trerenderRowCells(row, force){\r\n\t\tthis.reinitializeRow(row, force);\r\n\t}\r\n\t\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\t\r\n\t//////////////////////////////////////\r\n\t//////// Internal Rendering //////////\r\n\t//////////////////////////////////////\r\n\t\r\n\tdeinitialize(){\r\n\t\tthis.initialized = false;\r\n\t}\r\n\t\r\n\tclear(){\r\n\t\tthis.columns = [];\r\n\t\t\r\n\t\tthis.leftCol = -1;\r\n\t\tthis.rightCol = 0;\r\n\t\t\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\t\r\n\tdataChange(){\r\n\t\tvar change = false,\r\n\t\trow, rowEl;\r\n\t\t\r\n\t\tif(this.isFitData){\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\t\t\t\r\n\t\t\tif(change && this.table.rowManager.getDisplayRows().length){\r\n\t\t\t\tthis.vDomScrollPosRight = this.scrollLeft + this.elementVertical.clientWidth + this.windowBuffer;\r\n\t\t\t\t\r\n\t\t\t\trow = this.chain(\"rows-sample\", [1], [], () => {\r\n\t\t\t\t\treturn this.table.rowManager.getDisplayRows();\r\n\t\t\t\t})[0];\r\n\t\t\t\t\r\n\t\t\t\tif(row){\r\n\t\t\t\t\trowEl = row.getElement();\r\n\t\t\t\t\t\r\n\t\t\t\t\trow.generateCells();\r\n\t\t\t\t\t\r\n\t\t\t\t\tthis.tableElement.appendChild(rowEl);\r\n\t\t\t\t\t\r\n\t\t\t\t\tfor(let colEnd = 0; colEnd < row.cells.length; colEnd++){\r\n\t\t\t\t\t\tlet cell = row.cells[colEnd];\r\n\t\t\t\t\t\trowEl.appendChild(cell.getElement());\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\tcell.column.reinitializeWidth();\r\n\t\t\t\t\t}\r\n\t\t\t\t\t\r\n\t\t\t\t\trowEl.parentNode.removeChild(rowEl);\r\n\r\n\t\t\t\t\tthis.rerenderColumns(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(\"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\t\r\n\treinitChanged(old){\r\n\t\tvar match = true;\r\n\t\t\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\t\t\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\t\t\r\n\t\treturn !match;\r\n\t}\r\n\t\r\n\treinitializeRows(){\r\n\t\tvar rows = this.getVisibleRows();\r\n\t\trows.forEach((row) => {\r\n\t\t\tthis.reinitializeRow(row, true);\r\n\t\t});\r\n\t}\r\n\t\r\n\tgetVisibleRows(){\r\n\t\tif (!this.visibleRows){\r\n\t\t\tthis.visibleRows = this.table.rowManager.getVisibleRows();\r\n\t\t}\r\n\r\n\t\treturn this.visibleRows;\t\r\n\t}\r\n\t\r\n\tscroll(diff){\r\n\t\tthis.vDomScrollPosLeft += diff;\r\n\t\tthis.vDomScrollPosRight += diff;\r\n\r\n\t\tif(Math.abs(diff) > (this.windowBuffer / 2)){\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\t\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\t\t\t\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\t\r\n\taddColRight(){\r\n\t\tvar changes = false,\r\n\t\tworking = true;\r\n\t\t\r\n\t\twhile(working){\r\n\t\t\t\r\n\t\t\tlet column = this.columns[this.rightCol + 1];\r\n\t\t\t\r\n\t\t\tif(column){\r\n\t\t\t\tif(column.modules.vdomHoz.leftPos <= this.vDomScrollPosRight){\r\n\t\t\t\t\tchanges = true;\r\n\t\t\t\t\t\r\n\t\t\t\t\tthis.getVisibleRows().forEach((row) => {\r\n\t\t\t\t\t\tif(row.type !== \"group\"){\r\n\t\t\t\t\t\t\tvar cell = row.getCell(column);\r\n\t\t\t\t\t\t\trow.getElement().appendChild(cell.getElement());\r\n\t\t\t\t\t\t\tcell.cellRendered();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t\t\r\n\t\t\t\t\tthis.fitDataColActualWidthCheck(column);\r\n\t\t\t\t\t\r\n\t\t\t\t\tthis.rightCol++; // Don't move this below the >= check below\r\n\t\t\t\t\t\r\n\t\t\t\t\tif(this.rightCol >= (this.columns.length - 1)){\r\n\t\t\t\t\t\tthis.vDomPadRight = 0;\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tthis.vDomPadRight -= column.getWidth();\r\n\t\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}else{\r\n\t\t\t\tworking = false;\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\tif(changes){\r\n\t\t\tthis.tableElement.style.paddingRight = this.vDomPadRight + \"px\";\r\n\t\t}\r\n\t}\r\n\t\r\n\taddColLeft(){\r\n\t\tvar changes = false,\r\n\t\tworking = true;\r\n\t\t\r\n\t\twhile(working){\r\n\t\t\tlet column = this.columns[this.leftCol - 1];\r\n\t\t\t\r\n\t\t\tif(column){\r\n\t\t\t\tif(column.modules.vdomHoz.rightPos >= this.vDomScrollPosLeft){\r\n\t\t\t\t\tchanges = true;\r\n\t\t\t\t\t\r\n\t\t\t\t\tthis.getVisibleRows().forEach((row) => {\r\n\t\t\t\t\t\tif(row.type !== \"group\"){\r\n\t\t\t\t\t\t\tvar cell = row.getCell(column);\r\n\t\t\t\t\t\t\trow.getElement().prepend(cell.getElement());\r\n\t\t\t\t\t\t\tcell.cellRendered();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t\t\r\n\t\t\t\t\tthis.leftCol--; // don't move this below the <= check below\r\n\t\t\t\t\t\r\n\t\t\t\t\tif(this.leftCol <= 0){ // replicating logic in addColRight\r\n\t\t\t\t\t\tthis.vDomPadLeft = 0;\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tthis.vDomPadLeft -= column.getWidth();\r\n\t\t\t\t\t}\r\n\t\t\t\t\t\r\n\t\t\t\t\tlet diff = this.fitDataColActualWidthCheck(column);\r\n\t\t\t\t\t\r\n\t\t\t\t\tif(diff){\r\n\t\t\t\t\t\tthis.scrollLeft = this.elementVertical.scrollLeft = this.elementVertical.scrollLeft + diff;\r\n\t\t\t\t\t\tthis.vDomPadRight -= diff;\r\n\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\tworking = false;\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tworking = false;\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\tif(changes){\r\n\t\t\tthis.tableElement.style.paddingLeft = this.vDomPadLeft + \"px\";\r\n\t\t}\r\n\t}\r\n\t\r\n\tremoveColRight(){\r\n\t\tvar changes = false,\r\n\t\tworking = true;\r\n\t\t\r\n\t\twhile(working){\r\n\t\t\tlet column = this.columns[this.rightCol];\r\n\t\t\t\r\n\t\t\tif(column){\r\n\t\t\t\tif(column.modules.vdomHoz.leftPos > this.vDomScrollPosRight){\r\n\t\t\t\t\tchanges = true;\r\n\t\t\t\t\t\r\n\t\t\t\t\tthis.getVisibleRows().forEach((row) => {\r\n\t\t\t\t\t\tif(row.type !== \"group\"){\r\n\t\t\t\t\t\t\tvar cell = row.getCell(column);\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\ttry {\r\n\t\t\t\t\t\t\t\trow.getElement().removeChild(cell.getElement());\r\n\t\t\t\t\t\t\t} catch (ex) {\r\n\t\t\t\t\t\t\t\tconsole.warn(\"Could not removeColRight\", ex.message);\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\t\r\n\t\t\t\t\tthis.vDomPadRight += column.getWidth();\r\n\t\t\t\t\tthis.rightCol --;\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}else{\r\n\t\t\t\tworking = false;\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\tif(changes){\r\n\t\t\tthis.tableElement.style.paddingRight = this.vDomPadRight + \"px\";\r\n\t\t}\r\n\t}\r\n\t\r\n\tremoveColLeft(){\r\n\t\tvar changes = false,\r\n\t\tworking = true;\r\n\t\t\r\n\t\twhile(working){\r\n\t\t\tlet column = this.columns[this.leftCol];\r\n\t\t\t\r\n\t\t\tif(column){\r\n\t\t\t\tif(column.modules.vdomHoz.rightPos < this.vDomScrollPosLeft){\r\n\t\t\t\t\tchanges = true;\r\n\t\t\t\t\t\r\n\t\t\t\t\tthis.getVisibleRows().forEach((row) => {\t\t\t\t\t\r\n\t\t\t\t\t\tif(row.type !== \"group\"){\r\n\t\t\t\t\t\t\tvar cell = row.getCell(column);\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\ttry {\r\n\t\t\t\t\t\t\t\trow.getElement().removeChild(cell.getElement());\r\n\t\t\t\t\t\t\t} catch (ex) {\r\n\t\t\t\t\t\t\t\tconsole.warn(\"Could not removeColLeft\", ex.message);\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\t\r\n\t\t\t\t\tthis.vDomPadLeft += column.getWidth();\r\n\t\t\t\t\tthis.leftCol ++;\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}else{\r\n\t\t\t\tworking = false;\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\tif(changes){\r\n\t\t\tthis.tableElement.style.paddingLeft = this.vDomPadLeft + \"px\";\r\n\t\t}\r\n\t}\r\n\t\r\n\tfitDataColActualWidthCheck(column){\r\n\t\tvar newWidth, widthDiff;\r\n\t\t\r\n\t\tif(column.modules.vdomHoz.fitDataCheck){\r\n\t\t\tcolumn.reinitializeWidth();\r\n\t\t\t\r\n\t\t\tnewWidth = column.getWidth();\r\n\t\t\twidthDiff = newWidth - column.modules.vdomHoz.width;\r\n\t\t\t\r\n\t\t\tif(widthDiff){\r\n\t\t\t\tcolumn.modules.vdomHoz.rightPos += widthDiff;\r\n\t\t\t\tcolumn.modules.vdomHoz.width = newWidth;\r\n\t\t\t\tthis.colPositionAdjust(this.columns.indexOf(column) + 1, this.columns.length, widthDiff);\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tcolumn.modules.vdomHoz.fitDataCheck = false;\r\n\t\t}\r\n\t\t\r\n\t\treturn widthDiff;\r\n\t}\r\n\t\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\t\t\t\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\t\t\t\t\r\n\t\t\t\tif(column && column.visible){\r\n\t\t\t\t\tlet cell = row.getCell(column);\r\n\t\t\t\t\t\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\t\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\t\t\t\t\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\nimport defaultColumnOptions from './column/defaults/options.js';\r\n\r\nexport default class ColumnManager extends CoreFeature {\r\n\t\r\n\tconstructor (table){\r\n\t\tsuper(table);\r\n\t\t\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\", defaultColumnOptions);\r\n\t\t\r\n\t\tthis.redrawBlock = false; //prevent redraws to allow multiple data manipulations before continuing\r\n\t\tthis.redrawBlockUpdate = null; //store latest redraw update only status\r\n\t\t\r\n\t\tthis.renderer = null;\r\n\t}\r\n\t\r\n\t////////////// Setup Functions /////////////////\r\n\t\r\n\tinitialize(){\r\n\t\tthis.initializeRenderer();\r\n\t\t\r\n\t\tthis.headersElement = this.createHeadersElement();\r\n\t\tthis.element = this.createHeaderElement();\r\n\t\t\r\n\t\tthis.element.insertBefore(this.headersElement, this.element.firstChild);\r\n\t\t\r\n\t\tthis.subscribe(\"scroll-horizontal\", this.scrollHorizontal.bind(this));\r\n\t}\r\n\t\r\n\tinitializeRenderer(){\r\n\t\tvar renderClass;\r\n\t\t\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\t\t\r\n\t\tif(typeof this.table.options.renderHorizontal === \"string\"){\r\n\t\t\trenderClass = renderers[this.table.options.renderHorizontal];\r\n\t\t}else{\r\n\t\t\trenderClass = this.table.options.renderHorizontal;\r\n\t\t}\r\n\t\t\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:\", this.table.options.renderHorizontal);\r\n\t\t}\r\n\t}\r\n\t\r\n\t\r\n\tcreateHeadersElement (){\r\n\t\tvar el = document.createElement(\"div\");\r\n\t\t\r\n\t\tel.classList.add(\"tabulator-headers\");\r\n\t\tel.setAttribute(\"role\", \"row\");\r\n\t\t\r\n\t\treturn el;\r\n\t}\r\n\t\r\n\tcreateHeaderElement (){\r\n\t\tvar el = document.createElement(\"div\");\r\n\t\t\r\n\t\tel.classList.add(\"tabulator-header\");\r\n\t\tel.setAttribute(\"role\", \"rowgroup\");\r\n\t\t\r\n\t\tif(!this.table.options.headerVisible){\r\n\t\t\tel.classList.add(\"tabulator-header-hidden\");\r\n\t\t}\r\n\t\t\r\n\t\treturn el;\r\n\t}\r\n\t\r\n\t//return containing element\r\n\tgetElement(){\r\n\t\treturn this.element;\r\n\t}\r\n\t\r\n\t//return header containing element\r\n\tgetHeadersElement(){\r\n\t\treturn this.headersElement;\r\n\t}\r\n\t\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\t\t\r\n\t\t// this.tempScrollBlock();\r\n\t\tthis.element.scrollLeft = left;\r\n\t\t\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\t\t\r\n\t\tthis.scrollLeft = left;\r\n\t\t\r\n\t\tthis.renderer.scrollColumns(left);\r\n\t}\r\n\t\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\t\t\r\n\t\tif(data && data.length){\r\n\t\t\t\r\n\t\t\trow = data[0];\r\n\t\t\t\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\t\t\t\t\r\n\t\t\t\tlet value = row[key];\r\n\t\t\t\t\r\n\t\t\t\tswitch(typeof value){\r\n\t\t\t\t\tcase \"undefined\":\r\n\t\t\t\t\t\tsorter = \"string\";\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\t\tcase \"boolean\":\r\n\t\t\t\t\t\tsorter = \"boolean\";\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\t\tcase \"object\":\r\n\t\t\t\t\t\tif(Array.isArray(value)){\r\n\t\t\t\t\t\t\tsorter = \"array\";\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\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\t\tdefault:\r\n\t\t\t\t\t\tif(!isNaN(value) && value !== \"\"){\r\n\t\t\t\t\t\t\tsorter = \"number\";\r\n\t\t\t\t\t\t}else{\r\n\t\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\t\tsorter = \"alphanum\";\r\n\t\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\t\tsorter = \"string\";\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\tcol.sorter = sorter;\r\n\t\t\t\t\r\n\t\t\t\tcols.push(col);\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif(definitions){\r\n\t\t\t\t\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\t\tbreak;\r\n\t\t\t\t\t\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\t\t\t\t\t\t\t\t\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\t\t\t\t\t\t\t\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\t\t\t\t\t\t\r\n\t\t\t\t\t\tthis.table.options.columns = cols;\r\n\t\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\t\t\t\r\n\t\t\tthis.setColumns(this.table.options.columns);\r\n\t\t}\r\n\t}\r\n\t\r\n\tsetColumns(cols, row){\r\n\t\twhile(this.headersElement.firstChild) this.headersElement.removeChild(this.headersElement.firstChild);\r\n\t\t\r\n\t\tthis.columns = [];\r\n\t\tthis.columnsByIndex = [];\r\n\t\tthis.columnsByField = {};\r\n\t\t\r\n\t\tthis.dispatch(\"columns-loading\");\r\n\t\t\r\n\t\tcols.forEach((def, i) => {\r\n\t\t\tthis._addColumn(def);\r\n\t\t});\r\n\t\t\r\n\t\tthis._reIndexColumns();\r\n\t\t\r\n\t\tthis.dispatch(\"columns-loaded\");\r\n\t\t\r\n\t\tthis.rerenderColumns(false, true);\r\n\t\t\r\n\t\tthis.redraw(true);\r\n\t}\r\n\t\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\t\t\r\n\t\tif(nextToColumn && index > -1){\r\n\t\t\tvar topColumn = nextToColumn.getTopColumn();\r\n\t\t\tvar parentIndex = this.columns.indexOf(topColumn);\r\n\t\t\tvar nextEl = topColumn.getElement();\r\n\t\t\t\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\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\t\t}\r\n\t\t\r\n\t\tcolumn.columnRendered();\r\n\t\t\r\n\t\treturn column;\r\n\t}\r\n\t\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\t\r\n\tregisterColumnPosition(col){\r\n\t\tthis.columnsByIndex.push(col);\r\n\t}\r\n\t\r\n\t_reIndexColumns(){\r\n\t\tthis.columnsByIndex = [];\r\n\t\t\r\n\t\tthis.columns.forEach(function(column){\r\n\t\t\tcolumn.reRegisterPosition();\r\n\t\t});\r\n\t}\r\n\t\r\n\t//ensure column headers take up the correct amount of space in column groups\r\n\tverticalAlignHeaders(){\r\n\t\tvar minHeight = 0;\r\n\t\t\r\n\t\tif(!this.redrawBlock){\r\n\r\n\t\t\tthis.headersElement.style.height=\"\";\r\n\t\t\t\r\n\t\t\tthis.columns.forEach((column) => {\r\n\t\t\t\tcolumn.clearVerticalAlign();\r\n\t\t\t});\r\n\t\t\t\r\n\t\t\tthis.columns.forEach((column) => {\r\n\t\t\t\tvar height = column.getHeight();\r\n\t\t\t\t\r\n\t\t\t\tif(height > minHeight){\r\n\t\t\t\t\tminHeight = height;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tthis.headersElement.style.height = minHeight + \"px\";\r\n\r\n\t\t\tthis.columns.forEach((column) => {\r\n\t\t\t\tcolumn.verticalAlign(this.table.options.columnHeaderVertAlign, minHeight);\r\n\t\t\t});\r\n\t\t\t\r\n\t\t\tthis.table.rowManager.adjustTableSize();\r\n\t\t}\r\n\t}\r\n\t\r\n\t//////////////// Column Details /////////////////\r\n\tfindColumn(subject){\r\n\t\tvar columns;\r\n\r\n\t\tif(typeof subject == \"object\"){\r\n\t\t\t\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\r\n\t\t\t\tcolumns = [];\r\n\r\n\t\t\t\tthis.columns.forEach((column) => {\r\n\t\t\t\t\tcolumns.push(column);\r\n\t\t\t\t\tcolumns = columns.concat(column.getColumns(true));\r\n\t\t\t\t});\r\n\r\n\t\t\t\t//subject is a HTML element of the column header\r\n\t\t\t\tlet match = columns.find((column) => {\r\n\t\t\t\t\treturn column.element === subject;\r\n\t\t\t\t});\r\n\t\t\t\t\r\n\t\t\t\treturn match || false;\r\n\t\t\t}\r\n\t\t\t\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\t\t\r\n\t\t//catch all for any other type of input\r\n\t\treturn false;\r\n\t}\r\n\t\r\n\tgetColumnByField(field){\r\n\t\treturn this.columnsByField[field];\r\n\t}\r\n\t\r\n\tgetColumnsByFieldRoot(root){\r\n\t\tvar matches = [];\r\n\t\t\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\t\t\r\n\t\treturn matches;\r\n\t}\r\n\t\r\n\tgetColumnByIndex(index){\r\n\t\treturn this.columnsByIndex[index];\r\n\t}\r\n\t\r\n\tgetFirstVisibleColumn(){\r\n\t\tvar index = this.columnsByIndex.findIndex((col) => {\r\n\t\t\treturn col.visible;\r\n\t\t});\r\n\t\t\r\n\t\treturn index > -1 ? this.columnsByIndex[index] : false;\r\n\t}\r\n\t\r\n\tgetColumns(){\r\n\t\treturn this.columns;\r\n\t}\r\n\t\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\t\r\n\t//return all columns that are not groups\r\n\tgetRealColumns(){\r\n\t\treturn this.columnsByIndex;\r\n\t}\r\n\t\r\n\t//traverse 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\t\r\n\t//get definitions of actual columns\r\n\tgetDefinitions(active){\r\n\t\tvar output = [];\r\n\t\t\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\t\t\r\n\t\treturn output;\r\n\t}\r\n\t\r\n\t//get full nested definition tree\r\n\tgetDefinitionTree(){\r\n\t\tvar output = [];\r\n\t\t\r\n\t\tthis.columns.forEach((column) => {\r\n\t\t\toutput.push(column.getDefinition(true));\r\n\t\t});\r\n\t\t\r\n\t\treturn output;\r\n\t}\r\n\t\r\n\tgetComponents(structured){\r\n\t\tvar output = [],\r\n\t\tcolumns = structured ? this.columns : this.columnsByIndex;\r\n\t\t\r\n\t\tcolumns.forEach((column) => {\r\n\t\t\toutput.push(column.getComponent());\r\n\t\t});\r\n\t\t\r\n\t\treturn output;\r\n\t}\r\n\t\r\n\tgetWidth(){\r\n\t\tvar width = 0;\r\n\t\t\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\t\t\r\n\t\treturn width;\r\n\t}\r\n\t\r\n\tmoveColumn(from, to, after){\r\n\t\tto.element.parentNode.insertBefore(from.element, to.element);\r\n\t\t\r\n\t\tif(after){\r\n\t\t\tto.element.parentNode.insertBefore(to.element, from.element);\r\n\t\t}\r\n\t\t\r\n\t\tthis.moveColumnActual(from, to, after);\r\n\r\n\t\tthis.verticalAlignHeaders();\r\n\t\t\r\n\t\tthis.table.rowManager.reinitialize();\r\n\t}\r\n\t\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\t\t\r\n\t\tthis._moveColumnInArray(this.columnsByIndex, from, to, after, true);\r\n\t\t\r\n\t\tthis.rerenderColumns(true);\r\n\t\t\r\n\t\tthis.dispatch(\"column-moved\", from, to, after);\r\n\t\t\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\t\r\n\t_moveColumnInArray(columns, from, to, after, updateRows){\r\n\t\tvar\tfromIndex = columns.indexOf(from),\r\n\t\ttoIndex, rows = [];\r\n\t\t\r\n\t\tif (fromIndex > -1) {\r\n\t\t\t\r\n\t\t\tcolumns.splice(fromIndex, 1);\r\n\t\t\t\r\n\t\t\ttoIndex = columns.indexOf(to);\r\n\t\t\t\r\n\t\t\tif (toIndex > -1) {\r\n\t\t\t\t\r\n\t\t\t\tif(after){\r\n\t\t\t\t\ttoIndex = toIndex+1;\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t}else{\r\n\t\t\t\ttoIndex = fromIndex;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tcolumns.splice(toIndex, 0, from);\r\n\t\t\t\r\n\t\t\tif(updateRows){\r\n\t\t\t\t\r\n\t\t\t\trows = this.chain(\"column-moving-rows\", [from, to, after], null, []) || [];\r\n\t\t\t\t\r\n\t\t\t\trows = rows.concat(this.table.rowManager.rows);\r\n\t\t\t\t\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\t\t\t\t\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\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\t\t\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\t\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\t\t\t\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\t\t\t\r\n\t\t\tif(column.visible){\r\n\t\t\t\t\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\t\tadjust = -this.element.clientWidth / 2;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\t\tcase \"right\":\r\n\t\t\t\t\t\tadjust = colEl.clientWidth - this.headersElement.clientWidth;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\t//check column visibility\r\n\t\t\t\tif(!ifVisible){\r\n\t\t\t\t\t\r\n\t\t\t\t\toffset = colEl.offsetLeft;\r\n\t\t\t\t\t\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\t\t\t\t\r\n\t\t\t\t//calculate scroll position\r\n\t\t\t\tleft = colEl.offsetLeft + adjust;\r\n\t\t\t\t\r\n\t\t\t\tleft = Math.max(Math.min(left, this.table.rowManager.element.scrollWidth - this.table.rowManager.element.clientWidth),0);\r\n\t\t\t\t\r\n\t\t\t\tthis.table.rowManager.scrollHorizontal(left);\r\n\t\t\t\tthis.scrollHorizontal(left);\r\n\t\t\t\t\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\t\t\t\r\n\t\t});\r\n\t}\r\n\t\r\n\t//////////////// Cell Management /////////////////\r\n\tgenerateCells(row){\r\n\t\tvar cells = [];\r\n\t\t\r\n\t\tthis.columnsByIndex.forEach((column) => {\r\n\t\t\tcells.push(column.generateCell(row));\r\n\t\t});\r\n\t\t\r\n\t\treturn cells;\r\n\t}\r\n\t\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\t\t\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\t\t\r\n\t\tthis.columnsByIndex.forEach(function(column){\r\n\t\t\tvar width, minWidth, colWidth;\r\n\t\t\t\r\n\t\t\tif(column.visible){\r\n\t\t\t\t\r\n\t\t\t\twidth = column.definition.width || 0;\r\n\t\t\t\t\r\n\t\t\t\tminWidth = parseInt(column.minWidth);\r\n\t\t\t\t\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\t\t\t\t\r\n\t\t\t\tfixedWidth += colWidth > minWidth ? colWidth : minWidth;\r\n\t\t\t\t\r\n\t\t\t}\r\n\t\t});\r\n\t\t\r\n\t\treturn fixedWidth;\r\n\t}\r\n\t\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\t\t\t\r\n\t\t\tthis._reIndexColumns();\r\n\t\t\t\r\n\t\t\tthis.dispatch(\"column-add\", definition, before, nextToColumn);\r\n\t\t\t\r\n\t\t\tif(this.layoutMode() != \"fitColumns\"){\r\n\t\t\t\tcolumn.reinitializeWidth();\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tthis.redraw(true);\r\n\t\t\t\r\n\t\t\tthis.table.rowManager.reinitialize();\r\n\t\t\t\r\n\t\t\tthis.rerenderColumns();\r\n\t\t\t\r\n\t\t\tresolve(column);\r\n\t\t});\r\n\t}\r\n\t\r\n\t//remove column from system\r\n\tderegisterColumn(column){\r\n\t\tvar field = column.getField(),\r\n\t\tindex;\r\n\t\t\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\t\t\r\n\t\t//remove from index list\r\n\t\tindex = this.columnsByIndex.indexOf(column);\r\n\t\t\r\n\t\tif(index > -1){\r\n\t\t\tthis.columnsByIndex.splice(index, 1);\r\n\t\t}\r\n\t\t\r\n\t\t//remove from column list\r\n\t\tindex = this.columns.indexOf(column);\r\n\t\t\r\n\t\tif(index > -1){\r\n\t\t\tthis.columns.splice(index, 1);\r\n\t\t}\r\n\t\t\r\n\t\tthis.verticalAlignHeaders();\r\n\t\t\r\n\t\tthis.redraw();\r\n\t}\r\n\t\r\n\trerenderColumns(update, silent){\r\n\t\tif(!this.redrawBlock){\r\n\t\t\tthis.renderer.rerenderColumns(update, silent);\r\n\t\t}else{\r\n\t\t\tif(update === false || (update === true && this.redrawBlockUpdate === null)){\r\n\t\t\t\tthis.redrawBlockUpdate = update;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\tblockRedraw(){\r\n\t\tthis.redrawBlock = true;\r\n\t\tthis.redrawBlockUpdate = null;\r\n\t}\r\n\t\r\n\trestoreRedraw(){\r\n\t\tthis.redrawBlock = false;\r\n\t\tthis.verticalAlignHeaders();\r\n\t\tthis.renderer.rerenderColumns(this.redrawBlockUpdate);\r\n\t\t\r\n\t}\r\n\t\r\n\t//redraw columns\r\n\tredraw(force){\r\n\t\tif(Helpers.elVisible(this.element)){\r\n\t\t\tthis.verticalAlignHeaders();\r\n\t\t}\r\n\t\t\r\n\t\tif(force){\r\n\t\t\tthis.table.rowManager.resetScroll();\r\n\t\t\tthis.table.rowManager.reinitialize();\r\n\t\t}\r\n\t\t\r\n\t\tif(!this.confirm(\"table-redrawing\", force)){\r\n\t\t\tthis.layoutRefresh(force);\r\n\t\t}\r\n\t\t\r\n\t\tthis.dispatch(\"table-redraw\", force);\r\n\t\t\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(){\r\n\t\treturn this._row.getPosition();\r\n\t}\r\n\r\n\twatchPosition(callback){\r\n\t\treturn this._row.watchPosition(callback);\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\t\t\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 pre-styled to improve render efficiency\r\n\t\tthis.manualHeight = false; //user has manually set row height\r\n\t\tthis.outerHeight = 0; //hold elements 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\t\tthis.position = 0; //store position of element in row list\r\n\t\tthis.positionWatchers = [];\r\n\t\t\r\n\t\tthis.component = null;\r\n\t\t\r\n\t\tthis.created = false;\r\n\t\t\r\n\t\tthis.setData(data);\r\n\t}\r\n\t\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\t\r\n\tcreateElement (){\r\n\t\tvar el = document.createElement(\"div\");\r\n\t\t\r\n\t\tel.classList.add(\"tabulator-row\");\r\n\t\tel.setAttribute(\"role\", \"row\");\r\n\t\t\r\n\t\tthis.element = el;\r\n\t}\r\n\t\r\n\tgetElement(){\r\n\t\tthis.create();\r\n\t\treturn this.element;\r\n\t}\r\n\t\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\t\r\n\tgenerateElement(){\r\n\t\tthis.createElement();\r\n\t\tthis.dispatch(\"row-init\", this);\r\n\t}\r\n\t\r\n\tgenerateCells(){\r\n\t\tthis.cells = this.table.columnManager.generateCells(this);\r\n\t}\r\n\t\r\n\t//functions to setup on first render\r\n\tinitialize(force){\r\n\t\tthis.create();\r\n\t\t\r\n\t\tif(!this.initialized || force){\r\n\t\t\t\r\n\t\t\tthis.deleteCells();\r\n\t\t\t\r\n\t\t\twhile(this.element.firstChild) this.element.removeChild(this.element.firstChild);\r\n\t\t\t\r\n\t\t\tthis.dispatch(\"row-layout-before\", this);\r\n\t\t\t\r\n\t\t\tthis.generateCells();\r\n\t\t\t\r\n\t\t\tthis.initialized = true;\r\n\t\t\t\r\n\t\t\tthis.table.columnManager.renderer.renderRowCells(this);\r\n\t\t\t\r\n\t\t\tif(force){\r\n\t\t\t\tthis.normalizeHeight();\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tthis.dispatch(\"row-layout\", this);\r\n\t\t\t\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\t\t\t\r\n\t\t\tthis.dispatch(\"row-layout-after\", this);\r\n\t\t}else{\r\n\t\t\tthis.table.columnManager.renderer.rerenderRowCells(this);\r\n\t\t}\r\n\t}\r\n\t\r\n\treinitializeHeight(){\r\n\t\tthis.heightInitialized = false;\r\n\t\t\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\tdeinitialize(){\r\n\t\tthis.initialized = false;\r\n\t}\r\n\t\r\n\tdeinitializeHeight(){\r\n\t\tthis.heightInitialized = false;\r\n\t}\r\n\t\r\n\treinitialize(children){\r\n\t\tthis.initialized = false;\r\n\t\tthis.heightInitialized = false;\r\n\t\t\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\t\t\r\n\t\tif(this.element && this.element.offsetParent !== null){\r\n\t\t\tthis.initialize(true);\r\n\t\t}\r\n\t\t\r\n\t\tthis.dispatch(\"row-relayout\", this);\r\n\t}\r\n\t\r\n\t//get heights when doing bulk row style calcs in virtual DOM\r\n\tcalcHeight(force){\r\n\t\tvar maxHeight = 0,\r\n\t\tminHeight;\r\n\t\t\r\n\t\tif(this.table.options.rowHeight){\r\n\t\t\tthis.height = this.table.options.rowHeight;\r\n\t\t}else{\r\n\t\t\tminHeight = this.table.options.resizableRows ? this.element.clientHeight : 0;\r\n\t\t\t\r\n\t\t\tthis.cells.forEach(function(cell){\r\n\t\t\t\tvar height = cell.getHeight();\r\n\t\t\t\tif(height > maxHeight){\r\n\t\t\t\t\tmaxHeight = height;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\t\r\n\t\t\tif(force){\r\n\t\t\t\tthis.height = Math.max(maxHeight, minHeight);\r\n\t\t\t}else{\r\n\t\t\t\tthis.height = this.manualHeight ? this.height : Math.max(maxHeight, minHeight);\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\tthis.heightStyled = this.height ? this.height + \"px\" : \"\";\r\n\t\tthis.outerHeight = this.element.offsetHeight;\r\n\t}\r\n\t\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\t\t\r\n\t\tthis.heightInitialized = true;\r\n\t}\r\n\t\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\t\r\n\t//normalize the height of elements in the row\r\n\tnormalizeHeight(force){\r\n\t\tif(force && !this.table.options.rowHeight){\r\n\t\t\tthis.clearCellHeight();\r\n\t\t}\r\n\t\t\r\n\t\tthis.calcHeight(force);\r\n\t\t\r\n\t\tthis.setCellHeight();\r\n\t}\r\n\t\r\n\t//set height of rows\r\n\tsetHeight(height, force){\r\n\t\tif(this.height != height || force){\r\n\t\t\t\r\n\t\t\tthis.manualHeight = true;\r\n\t\t\t\r\n\t\t\tthis.height = height;\r\n\t\t\tthis.heightStyled = height ? height + \"px\" : \"\";\r\n\t\t\t\r\n\t\t\tthis.setCellHeight();\r\n\t\t\t\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\t\r\n\t//return rows outer height\r\n\tgetHeight(){\r\n\t\treturn this.outerHeight;\r\n\t}\r\n\t\r\n\t//return rows outer Width\r\n\tgetWidth(){\r\n\t\treturn this.element.offsetWidth;\r\n\t}\r\n\t\r\n\t//////////////// Cell Management /////////////////\r\n\tdeleteCell(cell){\r\n\t\tvar index = this.cells.indexOf(cell);\r\n\t\t\r\n\t\tif(index > -1){\r\n\t\t\tthis.cells.splice(index, 1);\r\n\t\t}\r\n\t}\r\n\t\r\n\t//////////////// Data Management /////////////////\r\n\tsetData(data){\r\n\t\tthis.data = this.chain(\"row-data-init-before\", [this, data], undefined, data);\r\n\t\t\r\n\t\tthis.dispatch(\"row-data-init-after\", this);\r\n\t}\r\n\t\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\t\t\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\t\r\n\t\t\tif(typeof updatedData === \"string\"){\r\n\t\t\t\tupdatedData = JSON.parse(updatedData);\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tthis.dispatch(\"row-data-save-before\", this);\r\n\t\t\t\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\t\t\t\r\n\t\t\tnewRowData = this.chain(\"row-data-changing\", [this, tempData, updatedData], null, updatedData);\r\n\t\t\t\r\n\t\t\t//set data\r\n\t\t\tfor (let attrname in newRowData) {\r\n\t\t\t\tthis.data[attrname] = newRowData[attrname];\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tthis.dispatch(\"row-data-save-after\", this);\r\n\t\t\t\r\n\t\t\t//update affected cells only\r\n\t\t\tfor (let attrname in updatedData) {\r\n\t\t\t\t\r\n\t\t\t\tlet columns = this.table.columnManager.getColumnsByFieldRoot(attrname);\r\n\t\t\t\t\r\n\t\t\t\tcolumns.forEach((column) => {\r\n\t\t\t\t\tlet cell = this.getCell(column.getField());\r\n\t\t\t\t\t\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\t\t\t\t\t\t\t\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\t\t\t\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\t\t\t\t\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\t\t\t\r\n\t\t\tthis.dispatch(\"row-data-changed\", this, visible, updatedData);\r\n\t\t\t\r\n\t\t\t//this.reinitialize();\r\n\t\t\t\r\n\t\t\tthis.dispatchExternal(\"rowUpdated\", this.getComponent());\r\n\t\t\t\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\t\r\n\t\t\tresolve();\r\n\t\t});\r\n\t}\r\n\t\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\t\t\r\n\t\treturn this.data;\r\n\t}\r\n\t\r\n\tgetCell(column){\r\n\t\tvar match = false;\r\n\t\t\r\n\t\tcolumn = this.table.columnManager.findColumn(column);\r\n\t\t\r\n\t\tif(!this.initialized){\r\n\t\t\tthis.generateCells();\r\n\t\t}\r\n\t\t\r\n\t\tmatch = this.cells.find(function(cell){\r\n\t\t\treturn cell.column === column;\r\n\t\t});\r\n\t\t\r\n\t\treturn match;\r\n\t}\r\n\t\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\t\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\t\r\n\tgetCells(){\r\n\t\tif(!this.initialized){\r\n\t\t\tthis.generateCells();\r\n\t\t}\r\n\t\t\r\n\t\treturn this.cells;\r\n\t}\r\n\t\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\t\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\t\r\n\tmoveToRow(to, before){\r\n\t\tvar toRow = this.table.rowManager.findRow(to);\r\n\t\t\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\t\r\n\t///////////////////// Actions /////////////////////\r\n\tdelete(){\r\n\t\tthis.dispatch(\"row-delete\", this);\r\n\t\t\r\n\t\tthis.deleteActual();\r\n\t\t\r\n\t\treturn Promise.resolve();\r\n\t}\r\n\t\r\n\tdeleteActual(blockRedraw){\r\n\t\tthis.detachModules();\r\n\t\t\r\n\t\tthis.table.rowManager.deleteRow(this, blockRedraw);\r\n\t\t\r\n\t\tthis.deleteCells();\r\n\t\t\r\n\t\tthis.initialized = false;\r\n\t\tthis.heightInitialized = false;\r\n\t\tthis.element = false;\r\n\t\t\r\n\t\tthis.dispatch(\"row-deleted\", this);\r\n\t}\r\n\t\r\n\tdetachModules(){\r\n\t\tthis.dispatch(\"row-deleting\", this);\r\n\t}\r\n\t\r\n\tdeleteCells(){\r\n\t\tvar cellCount = this.cells.length;\r\n\t\t\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\t\r\n\twipe(){\r\n\t\tthis.detachModules();\r\n\t\tthis.deleteCells();\r\n\t\t\r\n\t\tif(this.element){\r\n\t\t\twhile(this.element.firstChild) this.element.removeChild(this.element.firstChild);\r\n\t\t\t\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\t\t\r\n\t\tthis.element = false;\r\n\t\tthis.modules = {};\r\n\t}\r\n\r\n\tisDisplayed(){\r\n\t\treturn this.table.rowManager.getDisplayRows().includes(this);\r\n\t}\r\n\r\n\tgetPosition(){\r\n\t\treturn this.isDisplayed() ? this.position : false;\r\n\t}\r\n\r\n\tsetPosition(position){\r\n\t\tif(position != this.position){\r\n\t\t\tthis.position = position;\r\n\r\n\t\t\tthis.positionWatchers.forEach((callback) => {\r\n\t\t\t\tcallback(this.position);\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\twatchPosition(callback){\r\n\t\tthis.positionWatchers.push(callback);\r\n\r\n\t\tcallback(this.position);\r\n\t}\r\n\t\r\n\tgetGroup(){\r\n\t\treturn this.modules.group || false;\r\n\t}\r\n\t\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\t\t\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 BasicVertical 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.clearRows();\r\n\t\tthis.renderRows();\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 position 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\t// element.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\trows.forEach((row) => {\r\n\t\t\trow.deinitializeHeight();\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\tif(this.rows().length){\r\n\t\t\tthis._virtualRenderFill((topRow === false ? this.rows.length - 1 : topRow), true, topOffset || 0);\r\n\t\t}else{\r\n\t\t\tthis.clear();\r\n\t\t\tthis.table.rowManager._showPlaceholder();\r\n\t\t}\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 row height 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\t\tworking = true;\r\n\r\n\t\twhile(working){\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\tworking = false;\r\n\t\t\t\t\t}\r\n\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\t\t\t\tworking = false;\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\t\tworking = true;\r\n\r\n\t\twhile(working){\r\n\t\t\tlet row = rows[this.vDomTop],\r\n\t\t\trowHeight;\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\tworking = false;\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tworking = false;\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\t\tworking = true;\r\n\r\n\t\twhile(working){\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\tworking = false;\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tworking = false;\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\t\tworking = true;\r\n\r\n\t\twhile(working){\r\n\t\t\tlet row = rows[this.vDomBottom],\r\n\t\t\trowHeight;\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\tworking = false;\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tworking = false;\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\t\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\t\t\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.placeholder = null; //placeholder element\r\n\t\tthis.placeholderContents = null; //placeholder element\r\n\t\t\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\t\t\r\n\t\tthis.rows = []; //hold row data objects\r\n\t\tthis.activeRowsPipeline = []; //hold calculation 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\t\t\r\n\t\tthis.displayRows = []; //rows currently on display in the table\r\n\t\tthis.displayRowsCount = 0; //count of display rows\r\n\t\t\r\n\t\tthis.scrollTop = 0;\r\n\t\tthis.scrollLeft = 0;\r\n\t\t\r\n\t\tthis.redrawBlock = false; //prevent redraws to allow multiple data manipulations before continuing\r\n\t\tthis.redrawBlockRestoreConfig = false; //store latest redraw function calls for when redraw is needed\r\n\t\tthis.redrawBlockRenderInPosition = false; //store latest redraw function calls for when redraw is needed\r\n\t\t\r\n\t\tthis.dataPipeline = []; //hold data pipeline tasks\r\n\t\tthis.displayPipeline = []; //hold data display pipeline tasks\r\n\t\t\r\n\t\tthis.renderer = null;\r\n\t}\r\n\t\r\n\t//////////////// Setup Functions /////////////////\r\n\t\r\n\tcreateHolderElement (){\r\n\t\tvar el = document.createElement(\"div\");\r\n\t\t\r\n\t\tel.classList.add(\"tabulator-tableholder\");\r\n\t\tel.setAttribute(\"tabindex\", 0);\r\n\t\t// el.setAttribute(\"role\", \"rowgroup\");\r\n\t\t\r\n\t\treturn el;\r\n\t}\r\n\t\r\n\tcreateTableElement (){\r\n\t\tvar el = document.createElement(\"div\");\r\n\t\t\r\n\t\tel.classList.add(\"tabulator-table\");\r\n\t\tel.setAttribute(\"role\", \"rowgroup\");\r\n\t\t\r\n\t\treturn el;\r\n\t}\r\n\t\r\n\tinitializePlaceholder(){\r\n\t\t//configure placeholder element\r\n\t\tif(typeof this.table.options.placeholder == \"string\"){\r\n\t\t\tlet el = document.createElement(\"div\");\r\n\t\t\tel.classList.add(\"tabulator-placeholder\");\r\n\t\t\t\r\n\t\t\tlet contents = document.createElement(\"div\");\r\n\t\t\tcontents.classList.add(\"tabulator-placeholder-contents\");\r\n\t\t\tcontents.innerHTML = this.table.options.placeholder;\r\n\t\t\t\r\n\t\t\tel.appendChild(contents);\r\n\t\t\t\r\n\t\t\tthis.placeholderContents = contents;\r\n\t\t\tthis.placeholder = el;\r\n\t\t}\r\n\t}\r\n\t\r\n\t//return containing element\r\n\tgetElement(){\r\n\t\treturn this.element;\r\n\t}\r\n\t\r\n\t//return table element\r\n\tgetTableElement(){\r\n\t\treturn this.tableElement;\r\n\t}\r\n\t\r\n\tinitialize(){\r\n\t\tthis.initializePlaceholder();\r\n\t\tthis.initializeRenderer();\r\n\t\t\r\n\t\t//initialize manager\r\n\t\tthis.element.appendChild(this.tableElement);\r\n\t\t\r\n\t\tthis.firstRender = true;\r\n\t\t\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\t\t\t\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\t\t\t\t\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\t\r\n\t\t\t\tthis._positionPlaceholder();\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\t//handle vertical scrolling\r\n\t\t\tif(this.scrollTop != top){\r\n\t\t\t\tthis.scrollTop = top;\r\n\t\t\t\t\r\n\t\t\t\tthis.renderer.scrollRows(top, topDir);\r\n\t\t\t\t\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\t\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\t\t\t\t\r\n\t\t\t\treturn match || false;\r\n\t\t\t}else if(subject === null){\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}else if(typeof subject == \"undefined\"){\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\t\t\t\r\n\t\t\treturn match || false;\r\n\t\t}\r\n\t\t\r\n\t\t//catch all for any other type of input\r\n\t\treturn false;\r\n\t}\r\n\t\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\t\t\r\n\t\treturn match || false;\r\n\t}\r\n\t\r\n\tgetRowFromPosition(position){\r\n\t\treturn this.getDisplayRows().find((row) => {\r\n\t\t\treturn row.getPosition() === position && row.isDisplayed();\r\n\t\t});\r\n\t}\r\n\t\r\n\tscrollToRow(row, position, ifVisible){\r\n\t\treturn this.renderer.scrollToRowPosition(row, position, ifVisible);\r\n\t}\r\n\t\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 && this.table.initialized){\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\t\t\t\t\r\n\t\t\t\tthis._setDataActual(data);\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tresolve();\r\n\t\t});\r\n\t}\r\n\t\r\n\t_setDataActual(data, renderInPosition){\r\n\t\tthis.dispatchExternal(\"dataProcessing\", data);\r\n\t\t\r\n\t\tthis._wipeElements();\r\n\t\t\r\n\t\tif(Array.isArray(data)){\r\n\t\t\tthis.dispatch(\"data-processing\", data);\r\n\t\t\t\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\t\t\t\r\n\t\t\tthis.refreshActiveData(false, false, renderInPosition);\r\n\t\t\t\r\n\t\t\tthis.dispatch(\"data-processed\", data);\r\n\t\t\tthis.dispatchExternal(\"dataProcessed\", 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\t\r\n\t_wipeElements(){\r\n\t\tthis.dispatch(\"rows-wipe\");\r\n\t\t\r\n\t\tthis.rows.forEach((row) => {\r\n\t\t\trow.wipe();\r\n\t\t});\r\n\t\t\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\t\t\r\n\t\tthis.adjustTableSize();\r\n\t}\r\n\t\r\n\tdeleteRow(row, blockRedraw){\r\n\t\tvar allIndex = this.rows.indexOf(row),\r\n\t\tactiveIndex = this.activeRows.indexOf(row);\r\n\t\t\r\n\t\tif(activeIndex > -1){\r\n\t\t\tthis.activeRows.splice(activeIndex, 1);\r\n\t\t}\r\n\t\t\r\n\t\tif(allIndex > -1){\r\n\t\t\tthis.rows.splice(allIndex, 1);\r\n\t\t}\r\n\t\t\r\n\t\tthis.setActiveRows(this.activeRows);\r\n\t\t\r\n\t\tthis.displayRowIterator((rows) => {\r\n\t\t\tvar displayIndex = rows.indexOf(row);\r\n\t\t\t\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\t\t\r\n\t\tif(!blockRedraw){\r\n\t\t\tthis.reRenderInPosition();\r\n\t\t}\r\n\t\t\r\n\t\tthis.regenerateRowPositions();\r\n\t\t\r\n\t\tthis.dispatchExternal(\"rowDeleted\", row.getComponent());\r\n\t\t\r\n\t\tif(!this.displayRowsCount){\r\n\t\t\tthis._showPlaceholder();\r\n\t\t}\r\n\t\t\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\t\r\n\taddRow(data, pos, index, blockRedraw){\r\n\t\tvar row = this.addRowActual(data, pos, index, blockRedraw);\r\n\t\treturn row;\r\n\t}\r\n\t\r\n\t//add multiple rows\r\n\taddRows(data, pos, index){\r\n\t\tvar rows = [];\r\n\t\t\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tpos = this.findAddRowPos(pos);\r\n\t\t\t\r\n\t\t\tif(!Array.isArray(data)){\r\n\t\t\t\tdata = [data];\r\n\t\t\t}\r\n\t\t\t\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\t\t\t\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\tthis.dispatch(\"row-added\", row, data, pos, index);\r\n\t\t\t});\r\n\t\t\t\r\n\t\t\tthis.refreshActiveData(false, false, true);\r\n\t\t\t\r\n\t\t\tthis.regenerateRowPositions();\r\n\t\t\t\r\n\t\t\tif(rows.length){\r\n\t\t\t\tthis._clearPlaceholder();\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tresolve(rows);\r\n\t\t});\r\n\t}\r\n\t\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\t\t\r\n\t\tif(pos === \"pos\"){\r\n\t\t\tpos = true;\r\n\t\t}\r\n\t\t\r\n\t\tif(pos === \"bottom\"){\r\n\t\t\tpos = false;\r\n\t\t}\r\n\t\t\r\n\t\treturn pos;\r\n\t}\r\n\t\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\t\t\r\n\t\tif(!index){\r\n\t\t\tchainResult = this.chain(\"row-adding-position\", [row, top], null, {index, top});\r\n\t\t\t\r\n\t\t\tindex = chainResult.index;\r\n\t\t\ttop = chainResult.top;\r\n\t\t}\r\n\t\t\r\n\t\tif(typeof index !== \"undefined\"){\r\n\t\t\tindex = this.findRow(index);\r\n\t\t}\r\n\t\t\r\n\t\tindex = this.chain(\"row-adding-index\", [row, index, top], null, index);\r\n\t\t\r\n\t\tif(index){\r\n\t\t\tallIndex = this.rows.indexOf(index);\r\n\t\t}\r\n\t\t\r\n\t\tif(index && allIndex > -1){\r\n\t\t\tactiveIndex = this.activeRows.indexOf(index);\r\n\t\t\t\r\n\t\t\tthis.displayRowIterator(function(rows){\r\n\t\t\t\tvar displayIndex = rows.indexOf(index);\r\n\t\t\t\t\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\t\t\t\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\t\t\t\r\n\t\t\tthis.rows.splice((top ? allIndex : allIndex + 1), 0, row);\r\n\t\t\t\r\n\t\t}else{\r\n\t\t\t\r\n\t\t\tif(top){\r\n\t\t\t\t\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\t\t\t\t\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\t\t\t\t\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\t\t\r\n\t\tthis.setActiveRows(this.activeRows);\r\n\t\t\r\n\t\tthis.dispatchExternal(\"rowAdded\", row.getComponent());\r\n\t\t\r\n\t\tif(this.subscribedExternal(\"dataChanged\")){\r\n\t\t\tthis.dispatchExternal(\"dataChanged\", this.table.rowManager.getData());\r\n\t\t}\r\n\t\t\r\n\t\tif(!blockRedraw){\r\n\t\t\tthis.reRenderInPosition();\r\n\t\t}\r\n\t\t\r\n\t\treturn row;\r\n\t}\r\n\t\r\n\tmoveRow(from, to, after){\r\n\t\tthis.dispatch(\"row-move\", from, to, after);\r\n\t\t\r\n\t\tthis.moveRowActual(from, to, after);\r\n\t\t\r\n\t\tthis.regenerateRowPositions();\r\n\t\t\r\n\t\tthis.dispatch(\"row-moved\", from, to, after);\r\n\t\tthis.dispatchExternal(\"rowMoved\", from.getComponent());\r\n\t}\r\n\t\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\t\t\r\n\t\tthis.displayRowIterator((rows) => {\r\n\t\t\tthis.moveRowInArray(rows, from, to, after);\r\n\t\t});\r\n\t\t\r\n\t\tthis.dispatch(\"row-moving\", from, to, after);\r\n\t}\r\n\t\r\n\tmoveRowInArray(rows, from, to, after){\r\n\t\tvar\tfromIndex, toIndex, start, end;\r\n\t\t\r\n\t\tif(from !== to){\r\n\t\t\t\r\n\t\t\tfromIndex = rows.indexOf(from);\r\n\t\t\t\r\n\t\t\tif (fromIndex > -1) {\r\n\t\t\t\t\r\n\t\t\t\trows.splice(fromIndex, 1);\r\n\t\t\t\t\r\n\t\t\t\ttoIndex = rows.indexOf(to);\r\n\t\t\t\t\r\n\t\t\t\tif (toIndex > -1) {\r\n\t\t\t\t\t\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\t\t\t\t\t\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\t\t\t\r\n\t\t\t//restyle rows\r\n\t\t\tif(rows === this.getDisplayRows()){\r\n\t\t\t\t\r\n\t\t\t\tstart = fromIndex < toIndex ? fromIndex : toIndex;\r\n\t\t\t\tend = toIndex > fromIndex ? toIndex : fromIndex +1;\r\n\t\t\t\t\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\t\r\n\tclearData(){\r\n\t\tthis.setData([]);\r\n\t}\r\n\t\r\n\tgetRowIndex(row){\r\n\t\treturn this.findRowIndex(row, this.rows);\r\n\t}\r\n\t\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\t\r\n\tnextDisplayRow(row, rowOnly){\r\n\t\tvar index = this.getDisplayRowIndex(row),\r\n\t\tnextRow = false;\r\n\t\t\r\n\t\t\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\t\t\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\t\t\r\n\t\treturn nextRow;\r\n\t}\r\n\t\r\n\tprevDisplayRow(row, rowOnly){\r\n\t\tvar index = this.getDisplayRowIndex(row),\r\n\t\tprevRow = false;\r\n\t\t\r\n\t\tif(index){\r\n\t\t\tprevRow = this.getDisplayRows()[index-1];\r\n\t\t}\r\n\t\t\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\t\t\r\n\t\treturn prevRow;\r\n\t}\r\n\t\r\n\tfindRowIndex(row, list){\r\n\t\tvar rowIndex;\r\n\t\t\r\n\t\trow = this.findRow(row);\r\n\t\t\r\n\t\tif(row){\r\n\t\t\trowIndex = list.indexOf(row);\r\n\t\t\t\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\t\t\r\n\t\treturn false;\r\n\t}\r\n\t\r\n\tgetData(active, transform){\r\n\t\tvar output = [],\r\n\t\trows = this.getRows(active);\r\n\t\t\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\t\t\r\n\t\treturn output;\r\n\t}\r\n\t\r\n\tgetComponents(active){\r\n\t\tvar\toutput = [],\r\n\t\trows = this.getRows(active);\r\n\t\t\r\n\t\trows.forEach(function(row){\r\n\t\t\toutput.push(row.getComponent());\r\n\t\t});\r\n\t\t\r\n\t\treturn output;\r\n\t}\r\n\t\r\n\tgetDataCount(active){\r\n\t\tvar rows = this.getRows(active);\r\n\t\t\r\n\t\treturn rows.length;\r\n\t}\r\n\t\r\n\tscrollHorizontal(left){\r\n\t\tthis.scrollLeft = left;\r\n\t\tthis.element.scrollLeft = left;\r\n\t\t\r\n\t\tthis.dispatch(\"scroll-horizontal\", left);\r\n\t}\r\n\t\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\t\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\t\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\t\r\n\t\tif(!this.table.destroyed){\r\n\t\t\tif(typeof handler === \"function\"){\r\n\t\t\t\tindex = this.dataPipeline.findIndex((item) => {\r\n\t\t\t\t\treturn item.handler === handler;\r\n\t\t\t\t});\r\n\t\t\t\t\r\n\t\t\t\tif(index > -1){\r\n\t\t\t\t\tstage = \"dataPipeline\";\r\n\t\t\t\t\t\r\n\t\t\t\t\tif(skipStage){\r\n\t\t\t\t\t\tif(index == this.dataPipeline.length - 1){\r\n\t\t\t\t\t\t\tstage = \"display\";\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\tindex = this.displayPipeline.findIndex((item) => {\r\n\t\t\t\t\t\treturn item.handler === handler;\r\n\t\t\t\t\t});\r\n\t\t\t\t\t\r\n\t\t\t\t\tif(index > -1){\r\n\t\t\t\t\t\tstage = \"displayPipeline\";\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\tif(skipStage){\r\n\t\t\t\t\t\t\tif(index == this.displayPipeline.length - 1){\r\n\t\t\t\t\t\t\t\tstage = \"end\";\r\n\t\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\t\tindex++;\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.error(\"Unable to refresh data, invalid handler provided\", handler);\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tstage = handler || \"all\";\r\n\t\t\t\tindex = 0;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif(this.redrawBlock){\r\n\t\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\t\tthis.redrawBlockRestoreConfig = {\r\n\t\t\t\t\t\thandler: handler,\r\n\t\t\t\t\t\tskipStage: skipStage,\r\n\t\t\t\t\t\trenderInPosition: renderInPosition,\r\n\t\t\t\t\t\tstage:stage,\r\n\t\t\t\t\t\tindex:index,\r\n\t\t\t\t\t};\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\treturn;\r\n\t\t\t}else{\r\n\t\t\t\tif(Helpers.elVisible(this.element)){\r\n\t\t\t\t\tif(renderInPosition){\r\n\t\t\t\t\t\tthis.reRenderInPosition(this.refreshPipelines.bind(this, handler, stage, index, renderInPosition));\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tthis.refreshPipelines(handler, stage, index, renderInPosition);\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\tif(!handler){\r\n\t\t\t\t\t\t\tthis.table.columnManager.renderer.renderColumns();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\tthis.renderTable();\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\tif(table.options.layoutColumnsOnNewData){\r\n\t\t\t\t\t\t\tthis.table.columnManager.redraw(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\tthis.refreshPipelines(handler, stage, index, renderInPosition);\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\tthis.dispatch(\"data-refreshed\");\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\trefreshPipelines(handler, stage, index, renderInPosition){\r\n\t\tthis.dispatch(\"data-refreshing\");\r\n\t\t\r\n\t\tif(!handler){\r\n\t\t\tthis.activeRowsPipeline[0] = this.rows.slice(0);\r\n\t\t}\r\n\t\t\r\n\t\t//cascade through data refresh stages\r\n\t\tswitch(stage){\r\n\t\t\tcase \"all\":\r\n\t\t\t//handle case where all data needs refreshing\r\n\t\t\t\r\n\t\t\tcase \"dataPipeline\":\r\n\t\t\t\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\t\t\t\t\t\r\n\t\t\t\t\tthis.activeRowsPipeline[i + 1] = result || this.activeRowsPipeline[i].slice(0);\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\tthis.setActiveRows(this.activeRowsPipeline[this.dataPipeline.length]);\r\n\t\t\t\t\r\n\t\t\tcase \"display\":\r\n\t\t\t\tindex = 0;\r\n\t\t\t\tthis.resetDisplayRows();\r\n\t\t\t\t\r\n\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\t\t\t\r\n\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\tthis.regenerateRowPositions();\r\n\t\t}\r\n\t}\r\n\t\r\n\t//regenerate row positions\r\n\tregenerateRowPositions(){\r\n\t\tvar rows = this.getDisplayRows();\r\n\t\tvar index = 1;\r\n\t\t\r\n\t\trows.forEach((row) => {\r\n\t\t\tif (row.type === \"row\"){\r\n\t\t\t\trow.setPosition(index);\r\n\t\t\t\tindex++;\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\t\r\n\tsetActiveRows(activeRows){\r\n\t\tthis.activeRows = activeRows;\r\n\t\tthis.activeRowsCount = this.activeRows.length;\r\n\t}\r\n\t\r\n\t//reset display rows array\r\n\tresetDisplayRows(){\r\n\t\tthis.displayRows = [];\r\n\t\t\r\n\t\tthis.displayRows.push(this.activeRows.slice(0));\r\n\t\t\r\n\t\tthis.displayRowsCount = this.displayRows[0].length;\r\n\t}\r\n\t\r\n\t//set display row pipeline data\r\n\tsetDisplayRows(displayRows, index){\r\n\t\tthis.displayRows[index] = displayRows;\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\t}\r\n\t\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\t\r\n\tgetVisibleRows(chain, viewable){\r\n\t\tvar rows = Object.assign([], this.renderer.visibleRows(!viewable));\r\n\t\t\r\n\t\tif(chain){\r\n\t\t\trows = this.chain(\"rows-visible\", [viewable], rows, rows);\r\n\t\t}\r\n\t\t\r\n\t\treturn rows;\r\n\t}\r\n\t\r\n\t//repeat action across display rows\r\n\tdisplayRowIterator(callback){\r\n\t\tthis.activeRowsPipeline.forEach(callback);\r\n\t\tthis.displayRows.forEach(callback);\r\n\t\t\r\n\t\tthis.displayRowsCount = this.displayRows[this.displayRows.length -1].length;\r\n\t}\r\n\t\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\tif(!type || type === true){\r\n\t\t\trows = this.chain(\"rows-retrieve\", type, null, this.rows) || this.rows;\r\n\t\t}else{\r\n\t\t\tswitch(type){\r\n\t\t\t\tcase \"active\":\r\n\t\t\t\t\trows = this.activeRows;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\r\n\t\t\t\tcase \"display\":\r\n\t\t\t\t\trows = this.table.rowManager.getDisplayRows();\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase \"visible\":\r\n\t\t\t\t\trows = this.getVisibleRows(false, true);\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\treturn rows;\r\n\t}\r\n\t\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.redrawBlockRenderInPosition = true;\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tthis.dispatchExternal(\"renderStarted\");\r\n\t\t\t\r\n\t\t\tthis.renderer.rerenderRows(callback);\r\n\r\n\t\t\tif(!this.fixedHeight){\r\n\t\t\t\tthis.adjustTableSize();\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tthis.dispatchExternal(\"renderComplete\");\r\n\t\t}\r\n\t}\r\n\t\r\n\tinitializeRenderer(){\r\n\t\tvar renderClass;\r\n\t\t\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\t\t\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\t\t\r\n\t\tif(renderClass){\r\n\t\t\tthis.renderMode = this.table.options.renderVertical;\r\n\t\t\t\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\t\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:\", this.table.options.renderVertical);\r\n\t\t}\r\n\t}\r\n\t\r\n\tgetRenderMode(){\r\n\t\treturn this.renderMode;\r\n\t}\r\n\t\r\n\trenderTable(){\r\n\t\tthis.dispatchExternal(\"renderStarted\");\r\n\t\t\r\n\t\tthis.element.scrollTop = 0;\r\n\t\t\r\n\t\tthis._clearTable();\r\n\t\t\r\n\t\tif(this.displayRowsCount){\r\n\t\t\tthis.renderer.renderRows();\r\n\t\t\t\r\n\t\t\tif(this.firstRender){\r\n\t\t\t\tthis.firstRender = false;\r\n\t\t\t\tthis.layoutRefresh(true);\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tthis.renderEmptyScroll();\r\n\t\t}\r\n\t\t\r\n\t\tif(!this.fixedHeight){\r\n\t\t\tthis.adjustTableSize();\r\n\t\t}\r\n\t\t\r\n\t\tthis.dispatch(\"table-layout\");\r\n\t\t\r\n\t\tif(!this.displayRowsCount){\r\n\t\t\tthis._showPlaceholder();\r\n\t\t}\r\n\t\t\r\n\t\tthis.dispatchExternal(\"renderComplete\");\r\n\t}\r\n\t\r\n\t//show scrollbars on empty table div\r\n\trenderEmptyScroll(){\r\n\t\tif(this.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\t\r\n\t_clearTable(){\t\r\n\t\tthis._clearPlaceholder();\r\n\t\t\r\n\t\tthis.scrollTop = 0;\r\n\t\tthis.scrollLeft = 0;\r\n\t\t\r\n\t\tthis.renderer.clearRows();\r\n\t}\r\n\t\r\n\t_showPlaceholder(){\r\n\t\tif(this.placeholder){\r\n\t\t\tthis.placeholder.setAttribute(\"tabulator-render-mode\", this.renderMode);\r\n\t\t\t\r\n\t\t\tthis.getElement().appendChild(this.placeholder);\r\n\t\t\tthis._positionPlaceholder();\r\n\t\t}\r\n\t}\r\n\t\r\n\t_clearPlaceholder(){\r\n\t\tif(this.placeholder && this.placeholder.parentNode){\r\n\t\t\tthis.placeholder.parentNode.removeChild(this.placeholder);\r\n\t\t}\r\n\r\n\t\t// clear empty table placeholder min\r\n\t\tthis.tableElement.style.minWidth = \"\";\r\n\t}\r\n\t\r\n\t_positionPlaceholder(){\r\n\t\tif(this.placeholder && this.placeholder.parentNode){\r\n\t\t\tthis.placeholder.style.width = this.table.columnManager.getWidth() + \"px\";\r\n\t\t\tthis.placeholderContents.style.width = this.table.rowManager.element.clientWidth + \"px\";\r\n\t\t\tthis.placeholderContents.style.marginLeft = this.scrollLeft + \"px\";\r\n\t\t}\r\n\t}\r\n\t\r\n\tstyleRow(row, index){\r\n\t\tvar rowEl = row.getElement();\r\n\t\t\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\t\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\t\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, minHeight;\r\n\t\t\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\t\t\t\r\n\t\t\tif(this.fixedHeight){\r\n\t\t\t\tminHeight = isNaN(this.table.options.minHeight) ? this.table.options.minHeight : this.table.options.minHeight + \"px\";\r\n\t\t\t\t\r\n\t\t\t\tthis.element.style.minHeight = 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\t\t\t\r\n\t\t\tthis.renderer.resize();\r\n\t\t\t\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\t\r\n\t\tthis._positionPlaceholder();\r\n\t}\r\n\t\r\n\t//reinitialize 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\t\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\t\r\n\t//restore table redrawing\r\n\trestoreRedraw (){\r\n\t\tthis.redrawBlock = false;\r\n\t\t\r\n\t\tif(this.redrawBlockRestoreConfig){\r\n\t\t\tthis.refreshActiveData(this.redrawBlockRestoreConfig.handler, this.redrawBlockRestoreConfig.skipStage, this.redrawBlockRestoreConfig.renderInPosition);\r\n\t\t\t\r\n\t\t\tthis.redrawBlockRestoreConfig = false;\r\n\t\t}else{\r\n\t\t\tif(this.redrawBlockRenderInPosition){\r\n\t\t\t\tthis.reRenderInPosition();\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\tthis.redrawBlockRenderInPosition = false;\r\n\t}\r\n\t\r\n\t//redraw table\r\n\tredraw (force){\r\n\t\tvar left = this.scrollLeft;\r\n\t\t\r\n\t\tthis.adjustTableSize();\r\n\t\t\r\n\t\tthis.table.tableWidth = this.table.element.clientWidth;\r\n\t\t\r\n\t\tif(!force){\r\n\t\t\tthis.reRenderInPosition();\r\n\t\t\tthis.scrollHorizontal(left);\r\n\t\t}else{\r\n\t\t\tthis.renderTable();\r\n\t\t}\r\n\t}\r\n\t\r\n\tresetScroll(){\r\n\t\tthis.element.scrollLeft = 0;\r\n\t\tthis.element.scrollTop = 0;\r\n\t\t\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.containerElement = this.createContainerElement(); //containing element\r\n\t\tthis.external = false;\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tthis.initializeElement();\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\r\n\tcreateContainerElement(){\r\n\t\tvar el = document.createElement(\"div\");\r\n\r\n\t\tel.classList.add(\"tabulator-footer-contents\");\r\n\r\n\t\tthis.element.appendChild(el);\r\n\r\n\t\treturn el;\r\n\t}\r\n\r\n\tinitializeElement(){\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\t\tif(this.table.options.footerElement[0] === \"<\"){\r\n\t\t\t\t\t\tthis.containerElement.innerHTML = this.table.options.footerElement;\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tthis.external = true;\r\n\t\t\t\t\t\tthis.containerElement = document.querySelector(this.table.options.footerElement);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tthis.element = this.table.options.footerElement;\r\n\t\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){\r\n\t\tthis.activate();\r\n\r\n\t\tthis.containerElement.appendChild(element);\r\n\t\tthis.table.rowManager.adjustTableSize();\r\n\t}\r\n\r\n\tprepend(element){\r\n\t\tthis.activate();\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(){\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\t}\r\n\r\n\tredraw(){\r\n\t\tthis.dispatch(\"footer-redraw\");\r\n\t}\r\n}","import CoreFeature from '../CoreFeature.js';\r\nimport Row from '../row/Row.js';\r\n\r\nexport default class InteractionManager extends CoreFeature {\r\n\t\r\n\tconstructor (table){\r\n\t\tsuper(table);\r\n\t\t\r\n\t\tthis.el = null;\r\n\t\t\r\n\t\tthis.abortClasses = [\"tabulator-headers\", \"tabulator-table\"];\r\n\t\t\r\n\t\tthis.previousTargets = {};\r\n\t\t\r\n\t\tthis.listeners = [\r\n\t\t\t\"click\",\r\n\t\t\t\"dblclick\",\r\n\t\t\t\"contextmenu\",\r\n\t\t\t\"mouseenter\",\r\n\t\t\t\"mouseleave\",\r\n\t\t\t\"mouseover\",\r\n\t\t\t\"mouseout\",\r\n\t\t\t\"mousemove\",\r\n\t\t\t\"touchstart\",\r\n\t\t\t\"touchend\",\r\n\t\t];\r\n\t\t\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\t\t\r\n\t\tthis.pseudoTrackers = {\r\n\t\t\t\"row\":{\r\n\t\t\t\tsubscriber:null,\r\n\t\t\t\ttarget:null,\r\n\t\t\t},\r\n\t\t\t\"cell\":{\r\n\t\t\t\tsubscriber:null,\r\n\t\t\t\ttarget:null,\r\n\t\t\t},\r\n\t\t\t\"group\":{\r\n\t\t\t\tsubscriber:null,\r\n\t\t\t\ttarget:null,\r\n\t\t\t},\r\n\t\t\t\"column\":{\r\n\t\t\t\tsubscriber:null,\r\n\t\t\t\ttarget:null,\r\n\t\t\t},\r\n\t\t};\r\n\t\t\r\n\t\tthis.pseudoTracking = false;\r\n\t}\r\n\t\r\n\tinitialize(){\r\n\t\tthis.el = this.table.element;\r\n\t\t\r\n\t\tthis.buildListenerMap();\r\n\t\tthis.bindSubscriptionWatchers();\r\n\t}\r\n\t\r\n\tbuildListenerMap(){\r\n\t\tvar listenerMap = {};\r\n\t\t\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\t\t\r\n\t\tthis.listeners = listenerMap;\r\n\t}\r\n\t\r\n\tbindPseudoEvents(){\r\n\t\tObject.keys(this.pseudoTrackers).forEach((key) => {\r\n\t\t\tthis.pseudoTrackers[key].subscriber = this.pseudoMouseEnter.bind(this, key);\r\n\t\t\tthis.subscribe(key + \"-mouseover\", this.pseudoTrackers[key].subscriber);\r\n\t\t});\r\n\t\t\r\n\t\tthis.pseudoTracking = true;\r\n\t}\r\n\t\r\n\tpseudoMouseEnter(key, e, target){\r\n\t\tif(this.pseudoTrackers[key].target !== target){\r\n\t\t\t\r\n\t\t\tif(this.pseudoTrackers[key].target){\r\n\t\t\t\tthis.dispatch(key + \"-mouseleave\", e, this.pseudoTrackers[key].target);\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tthis.pseudoMouseLeave(key, e);\r\n\t\t\t\r\n\t\t\tthis.pseudoTrackers[key].target = target;\r\n\t\t\t\r\n\t\t\tthis.dispatch(key + \"-mouseenter\", e, target);\r\n\t\t}\r\n\t}\r\n\t\r\n\tpseudoMouseLeave(key, e){\r\n\t\tvar leaveList = Object.keys(this.pseudoTrackers),\r\n\t\tlinkedKeys = {\r\n\t\t\t\"row\":[\"cell\"],\r\n\t\t\t\"cell\":[\"row\"],\r\n\t\t};\r\n\t\t\r\n\t\tleaveList = leaveList.filter((item) => {\r\n\t\t\tvar links = linkedKeys[key];\r\n\t\t\treturn item !== key && (!links || (links && !links.includes(item)));\r\n\t\t});\r\n\t\t\r\n\t\t\r\n\t\tleaveList.forEach((key) => {\r\n\t\t\tvar target = this.pseudoTrackers[key].target;\r\n\t\t\t\r\n\t\t\tif(this.pseudoTrackers[key].target){\r\n\t\t\t\tthis.dispatch(key + \"-mouseleave\", e, target);\r\n\t\t\t\t\r\n\t\t\t\tthis.pseudoTrackers[key].target = null;\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\t\r\n\t\r\n\tbindSubscriptionWatchers(){\r\n\t\tvar listeners = Object.keys(this.listeners),\r\n\t\tcomponents = Object.values(this.componentMap);\r\n\t\t\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\t\t\t\t\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\t\r\n\t\tthis.subscribe(\"table-destroy\", this.clearWatchers.bind(this));\r\n\t}\r\n\t\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\t\t\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\t\t\r\n\t\tif((key === \"mouseenter\" || key === \"mouseleave\") && !this.pseudoTracking){\r\n\t\t\tthis.bindPseudoEvents();\r\n\t\t}\r\n\t\t\r\n\t\tif(changed){\r\n\t\t\tthis.updateEventListeners();\r\n\t\t}\r\n\t}\r\n\t\r\n\tupdateEventListeners(){\r\n\t\tfor(let key in this.listeners){\r\n\t\t\tlet listener = this.listeners[key];\r\n\t\t\t\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\t\r\n\ttrack(type, e){\r\n\t\tvar path = (e.composedPath && e.composedPath()) || e.path;\r\n\t\t\r\n\t\tvar targets = this.findTargets(path);\r\n\t\ttargets = this.bindComponents(type, targets);\r\n\t\t\r\n\t\tthis.triggerEvents(type, e, targets);\r\n\t\t\r\n\t\tif(this.pseudoTracking && (type == \"mouseover\" || type == \"mouseleave\") && !Object.keys(targets).length){\r\n\t\t\tthis.pseudoMouseLeave(\"none\", e);\r\n\t\t}\r\n\t}\r\n\t\r\n\tfindTargets(path){\r\n\t\tvar targets = {};\r\n\t\t\r\n\t\tlet componentMap = Object.keys(this.componentMap);\r\n\t\t\r\n\t\tfor (let el of path) {\r\n\t\t\tlet classList = el.classList ? [...el.classList] : [];\r\n\t\t\t\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\t\t\t\r\n\t\t\tif(abort.length){\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t\t\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\t\t\t\r\n\t\t\tfor (let target of elTargets) {\r\n\t\t\t\tif(!targets[this.componentMap[target]]){\r\n\t\t\t\t\ttargets[this.componentMap[target]] = el;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\tif(targets.group && targets.group === targets.row){\r\n\t\t\tdelete targets.row;\r\n\t\t}\r\n\t\t\r\n\t\treturn targets;\r\n\t}\r\n\t\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\tmatches = {},\r\n\t\ttargetMatches = {};\r\n\t\t\r\n\t\tfor(let key of keys){\r\n\t\t\tlet component,\r\n\t\t\ttarget = targets[key],\r\n\t\t\tpreviousTarget = this.previousTargets[key];\r\n\t\t\t\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\t\tif(listener.components.includes(\"row\") || listener.components.includes(\"cell\") || listener.components.includes(\"group\")){\r\n\t\t\t\t\t\t\tlet rows = this.table.rowManager.getVisibleRows(true);\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tcomponent = rows.find((row) => {\r\n\t\t\t\t\t\t\t\treturn row.getElement() === target;\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tif(targets[\"row\"] && targets[\"row\"].parentNode && targets[\"row\"].parentNode.closest(\".tabulator-row\")){\r\n\t\t\t\t\t\t\t\ttargets[key] = 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\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\t\tcase \"column\":\r\n\t\t\t\t\t\tif(listener.components.includes(\"column\")){\r\n\t\t\t\t\t\t\tcomponent = this.table.columnManager.findColumn(target);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\t\tcase \"cell\":\r\n\t\t\t\t\t\tif(listener.components.includes(\"cell\")){\r\n\t\t\t\t\t\t\tif(matches[\"row\"] instanceof Row){\r\n\t\t\t\t\t\t\t\tcomponent = matches[\"row\"].findCell(target);\r\n\t\t\t\t\t\t\t}else{\t\r\n\t\t\t\t\t\t\t\tif(targets[\"row\"]){\r\n\t\t\t\t\t\t\t\t\tconsole.warn(\"Event Target Lookup Error - The row this cell is attached to cannot be found, has the table been reinitialized without being destroyed first?\");\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\t\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif(component){\r\n\t\t\t\tmatches[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\t\t\r\n\t\tthis.previousTargets = targetMatches;\r\n\t\t\r\n\t\treturn matches;\r\n\t}\r\n\t\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\t\r\n\tclearWatchers(){\r\n\t\tfor(let key in this.listeners){\r\n\t\t\tlet listener = this.listeners[key];\r\n\t\t\t\r\n\t\t\tif(listener.handler){\r\n\t\t\t\tthis.el.removeEventListener(key, listener.handler);\r\n\t\t\t\tlistener.handler = null;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}","export default class ComponentFunctionBinder{\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, handler);\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] && typeof this.bindings[type][name].bind === 'function'){\r\n\t\t\treturn this.bindings[type][name].bind(null, component);\r\n\t\t}else{\r\n\t\t\tif(name !== \"then\" && typeof name === \"string\" && !name.startsWith(\"_\")){\r\n\t\t\t\tif(this.table.options.debugInvalidComponentFuncs){\r\n\t\t\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\t\t}\r\n\t\t\t}\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.requestOrder = 0; //prevent requests coming 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\r\n\tload(data, params, config, replace, silent, columnsChanged){\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.alertLoader();\r\n\t\t\t}\r\n\r\n\t\t\t//get params for request\r\n\t\t\tparams = this.chain(\"data-params\", [data, config, silent], params || {}, 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], false, Promise.resolve([]));\r\n\t\t\t\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.clearAlert();\r\n\r\n\t\t\t\t\tif(rowData !== false){\r\n\t\t\t\t\t\tthis.dispatchExternal(\"dataLoaded\", rowData);\r\n\t\t\t\t\t\tthis.table.rowManager.setData(rowData, replace, typeof columnsChanged === \"undefined\" ? !replace : columnsChanged);\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.alertError();\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\tsetTimeout(() => {\r\n\t\t\t\t\tthis.clearAlert();\r\n\t\t\t\t}, this.table.options.dataLoaderErrorTimeout);\r\n\t\t\t})\r\n\t\t\t\t.finally(() => {\r\n\t\t\t\t\tthis.loading = false;\r\n\t\t\t\t});\r\n\t\t}else{\r\n\t\t\tthis.dispatchExternal(\"dataLoaded\", data);\r\n\r\n\t\t\tif(!data){\r\n\t\t\t\tdata = [];\r\n\t\t\t}\r\n\r\n\t\t\tthis.table.rowManager.setData(data, replace, typeof columnsChanged === \"undefined\" ? !replace : columnsChanged);\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\talertLoader(){\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.table.alertManager.alert(this.table.options.dataLoaderLoading || this.langText(\"data|loading\"));\r\n\t\t}\r\n\t}\r\n\r\n\talertError(){\r\n\t\tthis.table.alertManager.alert(this.table.options.dataLoaderError || this.langText(\"data|error\"), \"error\");\r\n\t}\r\n\r\n\tclearAlert(){\r\n\t\tthis.table.alertManager.clear();\r\n\t}\r\n}","export default class ExternalEventBus {\r\n\r\n\tconstructor(table, optionsList, debug){\r\n\t\tthis.table = table;\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._notifySubscriptionChange(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._notifySubscriptionChange(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._notifySubscriptionChange(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_notifySubscriptionChange(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.table, 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._notifySubscriptionChange(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._notifySubscriptionChange(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._notifySubscriptionChange(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_notifySubscriptionChange(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\tsubscriber.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 CoreFeature from '../CoreFeature.js';\r\n\r\nexport default class DeprecationAdvisor extends CoreFeature{\r\n\t\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\t}\r\n\t\r\n\t_warnUser(){\r\n\t\tif(this.options(\"debugDeprecation\")){\r\n\t\t\tconsole.warn(...arguments);\r\n\t\t}\r\n\t}\r\n\t\r\n\tcheck(oldOption, newOption){\r\n\t\tvar msg = \"\";\r\n\t\t\r\n\t\tif(typeof this.options(oldOption) !== \"undefined\"){\r\n\t\t\tmsg = \"Deprecated Setup Option - Use of the %c\" + oldOption + \"%c option is now deprecated\";\r\n\t\t\t\r\n\t\t\tif(newOption){\r\n\t\t\t\tmsg = msg + \", Please use the %c\" + newOption + \"%c option instead\";\r\n\t\t\t\tthis._warnUser(msg, 'font-weight: bold;', 'font-weight: normal;', 'font-weight: bold;', 'font-weight: normal;');\r\n\t\t\t}else{\r\n\t\t\t\tthis._warnUser(msg, 'font-weight: bold;', 'font-weight: normal;');\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn false;\r\n\t\t}else{\r\n\t\t\treturn true;\r\n\t\t}\r\n\t}\r\n\t\r\n\tcheckMsg(oldOption, msg){\r\n\t\tif(typeof this.options(oldOption) !== \"undefined\"){\r\n\t\t\tthis._warnUser(\"%cDeprecated Setup Option - Use of the %c\" + oldOption + \" %c option is now deprecated, \" + msg, 'font-weight: normal;', 'font-weight: bold;', 'font-weight: normal;');\r\n\t\t\t\r\n\t\t\treturn false;\r\n\t\t}else{\r\n\t\t\treturn true;\r\n\t\t}\r\n\t}\r\n\t\r\n\tmsg(msg){\r\n\t\tthis._warnUser(msg);\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\nimport Helpers from './Helpers.js';\r\n\r\nexport default class Popup extends CoreFeature{\r\n\tconstructor(table, element, parent){\r\n\t\tsuper(table);\r\n \r\n\t\tthis.element = element;\r\n\t\tthis.container = this._lookupContainer();\r\n \r\n\t\tthis.parent = parent;\r\n \r\n\t\tthis.reversedX = false;\r\n\t\tthis.childPopup = null;\r\n\t\tthis.blurable = false;\r\n\t\tthis.blurCallback = null;\r\n\t\tthis.renderedCallback = null;\r\n \r\n\t\tthis.visible = false;\r\n\t\tthis.hideable = true;\r\n \r\n\t\tthis.element.classList.add(\"tabulator-popup-container\");\r\n \r\n\t\tthis.blurEvent = this.hide.bind(this, false);\r\n\t\tthis.escEvent = this._escapeCheck.bind(this);\r\n\r\n\t\tthis.destroyBinding = this.tableDestroyed;\r\n\t\tthis.destroyed = false;\r\n\t}\r\n\r\n\ttableDestroyed(){\r\n\t\tthis.destroyed = true;\r\n\t\tthis.hide(true);\r\n\t}\r\n \r\n\t_lookupContainer(){\r\n\t\tvar container = this.table.options.popupContainer;\r\n \r\n\t\tif(typeof container === \"string\"){\r\n\t\t\tcontainer = document.querySelector(container);\r\n \r\n\t\t\tif(!container){\r\n\t\t\t\tconsole.warn(\"Menu Error - no container element found matching selector:\", this.table.options.popupContainer , \"(defaulting to document body)\");\r\n\t\t\t}\r\n\t\t}else if (container === true){\r\n\t\t\tcontainer = this.table.element;\r\n\t\t}\r\n \r\n\t\tif(container && !this._checkContainerIsParent(container)){\r\n\t\t\tcontainer = false;\r\n\t\t\tconsole.warn(\"Menu Error - container element does not contain this table:\", this.table.options.popupContainer , \"(defaulting to document body)\");\r\n\t\t}\r\n \r\n\t\tif(!container){\r\n\t\t\tcontainer = document.body;\r\n\t\t}\r\n \r\n\t\treturn container;\r\n\t}\r\n \r\n\t_checkContainerIsParent(container, element = this.table.element){\r\n\t\tif(container === element){\r\n\t\t\treturn true;\r\n\t\t}else{\r\n\t\t\treturn element.parentNode ? this._checkContainerIsParent(container, element.parentNode) : false;\r\n\t\t}\r\n\t}\r\n \r\n\trenderCallback(callback){\r\n\t\tthis.renderedCallback = callback;\r\n\t}\r\n \r\n\tcontainerEventCoords(e){\r\n\t\tvar touch = !(e instanceof MouseEvent);\r\n \r\n\t\tvar x = touch ? e.touches[0].pageX : e.pageX;\r\n\t\tvar y = touch ? e.touches[0].pageY : e.pageY;\r\n \r\n\t\tif(this.container !== document.body){\r\n\t\t\tlet parentOffset = Helpers.elOffset(this.container);\r\n \r\n\t\t\tx -= parentOffset.left;\r\n\t\t\ty -= parentOffset.top;\r\n\t\t}\r\n \r\n\t\treturn {x, y};\r\n\t}\r\n \r\n\telementPositionCoords(element, position = \"right\"){\r\n\t\tvar offset = Helpers.elOffset(element),\r\n\t\tcontainerOffset, x, y;\r\n \r\n\t\tif(this.container !== document.body){\r\n\t\t\tcontainerOffset = Helpers.elOffset(this.container);\r\n \r\n\t\t\toffset.left -= containerOffset.left;\r\n\t\t\toffset.top -= containerOffset.top;\r\n\t\t}\r\n \r\n\t\tswitch(position){\r\n\t\t\tcase \"right\":\r\n\t\t\t\tx = offset.left + element.offsetWidth;\r\n\t\t\t\ty = offset.top - 1;\r\n\t\t\t\tbreak;\r\n \r\n\t\t\tcase \"bottom\":\r\n\t\t\t\tx = offset.left;\r\n\t\t\t\ty = offset.top + element.offsetHeight;\r\n\t\t\t\tbreak;\r\n\t\t}\r\n \r\n\t\treturn {x, y, offset};\r\n\t}\r\n \r\n\tshow(origin, position){\r\n\t\tvar x, y, parentEl, parentOffset, coords;\r\n\r\n\t\tif(this.destroyed || this.table.destroyed){\r\n\t\t\treturn this;\r\n\t\t}\r\n \r\n\t\tif(origin instanceof HTMLElement){\r\n\t\t\tparentEl = origin;\r\n\t\t\tcoords = this.elementPositionCoords(origin, position);\r\n \r\n\t\t\tparentOffset = coords.offset;\r\n\t\t\tx = coords.x;\r\n\t\t\ty = coords.y;\r\n \r\n\t\t}else if(typeof origin === \"number\"){\r\n\t\t\tparentOffset = {top:0, left:0};\r\n\t\t\tx = origin;\r\n\t\t\ty = position;\r\n\t\t}else{\r\n\t\t\tcoords = this.containerEventCoords(origin);\r\n \r\n\t\t\tx = coords.x;\r\n\t\t\ty = coords.y;\r\n \r\n\t\t\tthis.reversedX = false;\r\n\t\t}\r\n \r\n\t\tthis.element.style.top = y + \"px\";\r\n\t\tthis.element.style.left = x + \"px\";\r\n \r\n\t\tthis.container.appendChild(this.element);\r\n \r\n\t\tif(typeof this.renderedCallback === \"function\"){\r\n\t\t\tthis.renderedCallback();\r\n\t\t}\r\n \r\n\t\tthis._fitToScreen(x, y, parentEl, parentOffset, position);\r\n \r\n\t\tthis.visible = true;\r\n\r\n\t\tthis.subscribe(\"table-destroy\", this.destroyBinding);\r\n\r\n\t\tthis.element.addEventListener(\"mousedown\", (e) => {\r\n\t\t\te.stopPropagation();\r\n\t\t});\r\n \r\n\t\treturn this;\r\n\t}\r\n \r\n\t_fitToScreen(x, y, parentEl, parentOffset, position){\r\n\t\tvar scrollTop = this.container === document.body ? document.documentElement.scrollTop : this.container.scrollTop;\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 + this.element.offsetWidth) >= this.container.offsetWidth || this.reversedX){\r\n\t\t\tthis.element.style.left = \"\";\r\n \r\n\t\t\tif(parentEl){\r\n\t\t\t\tthis.element.style.right = (this.container.offsetWidth - parentOffset.left) + \"px\";\r\n\t\t\t}else{\r\n\t\t\t\tthis.element.style.right = (this.container.offsetWidth - x) + \"px\";\r\n\t\t\t}\r\n \r\n\t\t\tthis.reversedX = true;\r\n\t\t}\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 + this.element.offsetHeight) > Math.max(this.container.offsetHeight, scrollTop ? this.container.scrollHeight : 0)) {\r\n\t\t\tif(parentEl){\r\n\t\t\t\tswitch(position){\r\n\t\t\t\t\tcase \"bottom\":\r\n\t\t\t\t\t\tthis.element.style.top = (parseInt(this.element.style.top) - this.element.offsetHeight - parentEl.offsetHeight - 1) + \"px\";\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tdefault:\r\n\t\t\t\t\t\tthis.element.style.top = (parseInt(this.element.style.top) - this.element.offsetHeight + parentEl.offsetHeight + 1) + \"px\";\r\n\t\t\t\t}\r\n \r\n\t\t\t}else{\r\n\t\t\t\tthis.element.style.top = (parseInt(this.element.style.top) - this.element.offsetHeight) + \"px\";\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n \r\n\tisVisible(){\r\n\t\treturn this.visible;\r\n\t}\r\n \r\n\thideOnBlur(callback){\r\n\t\tthis.blurable = true;\r\n \r\n\t\tif(this.visible){\r\n\t\t\tsetTimeout(() => {\r\n\t\t\t\tthis.table.rowManager.element.addEventListener(\"scroll\", this.blurEvent);\r\n\t\t\t\tthis.subscribe(\"cell-editing\", this.blurEvent);\r\n\t\t\t\tdocument.body.addEventListener(\"click\", this.blurEvent);\r\n\t\t\t\tdocument.body.addEventListener(\"contextmenu\", this.blurEvent);\r\n\t\t\t\tdocument.body.addEventListener(\"mousedown\", this.blurEvent);\r\n\t\t\t\twindow.addEventListener(\"resize\", this.blurEvent);\r\n\t\t\t\tdocument.body.addEventListener(\"keydown\", this.escEvent);\r\n\r\n\t\t\t}, 100);\r\n \r\n\t\t\tthis.blurCallback = callback;\r\n\t\t}\r\n \r\n\t\treturn this;\r\n\t}\r\n \r\n\t_escapeCheck(e){\r\n\t\tif(e.keyCode == 27){\r\n\t\t\tthis.hide();\r\n\t\t}\r\n\t}\r\n\r\n\tblockHide(){\r\n\t\tthis.hideable = false;\r\n\t}\r\n\r\n\trestoreHide(){\r\n\t\tthis.hideable = true;\r\n\t}\r\n \r\n\thide(silent = false){\r\n\t\tif(this.visible && this.hideable){\r\n\t\t\tif(this.blurable){\r\n\t\t\t\tdocument.body.removeEventListener(\"keydown\", this.escEvent);\r\n\t\t\t\tdocument.body.removeEventListener(\"click\", this.blurEvent);\r\n\t\t\t\tdocument.body.removeEventListener(\"contextmenu\", this.blurEvent);\r\n\t\t\t\tdocument.body.removeEventListener(\"mousedown\", this.blurEvent);\r\n\t\t\t\twindow.removeEventListener(\"resize\", this.blurEvent);\r\n\t\t\t\tthis.table.rowManager.element.removeEventListener(\"scroll\", this.blurEvent);\r\n\t\t\t\tthis.unsubscribe(\"cell-editing\", this.blurEvent);\r\n\t\t\t}\r\n \r\n\t\t\tif(this.childPopup){\r\n\t\t\t\tthis.childPopup.hide();\r\n\t\t\t}\r\n \r\n\t\t\tif(this.parent){\r\n\t\t\t\tthis.parent.childPopup = null;\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.visible = false;\r\n\r\n\t\t\tif(this.blurCallback && !silent){\r\n\t\t\t\tthis.blurCallback();\r\n\t\t\t}\r\n\r\n\t\t\tthis.unsubscribe(\"table-destroy\", this.destroyBinding);\r\n\t\t}\r\n \r\n\t\treturn this;\r\n\t}\r\n \r\n\tchild(element){\r\n\t\tif(this.childPopup){\r\n\t\t\tthis.childPopup.hide();\r\n\t\t}\r\n \r\n\t\tthis.childPopup = new Popup(this.table, element, this);\r\n \r\n\t\treturn this.childPopup;\r\n\t}\r\n}","import CoreFeature from './CoreFeature.js';\r\nimport Popup from './tools/Popup.js';\r\n\r\nclass Module extends CoreFeature{\r\n\t\r\n\tconstructor(table, name){\r\n\t\tsuper(table);\r\n\t\t\r\n\t\tthis._handler = null;\r\n\t}\r\n\t\r\n\tinitialize(){\r\n\t\t// setup module when table is initialized, to be overridden in module\r\n\t}\r\n\t\r\n\t\r\n\t///////////////////////////////////\r\n\t////// Options Registration ///////\r\n\t///////////////////////////////////\r\n\t\r\n\tregisterTableOption(key, value){\r\n\t\tthis.table.optionsList.register(key, value);\r\n\t}\r\n\t\r\n\tregisterColumnOption(key, value){\r\n\t\tthis.table.columnManager.optionsList.register(key, value);\r\n\t}\r\n\t\r\n\t///////////////////////////////////\r\n\t/// Public Function Registration ///\r\n\t///////////////////////////////////\r\n\t\r\n\tregisterTableFunction(name, func){\r\n\t\tif(typeof this.table[name] === \"undefined\"){\r\n\t\t\tthis.table[name] = (...args) => {\r\n\t\t\t\tthis.table.initGuard(name);\r\n\t\t\t\t\r\n\t\t\t\treturn func(...args);\r\n\t\t\t};\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\t\r\n\tregisterComponentFunction(component, func, handler){\r\n\t\treturn this.table.componentFunctionBinder.bind(component, func, handler);\r\n\t}\r\n\t\r\n\t///////////////////////////////////\r\n\t////////// Data Pipeline //////////\r\n\t///////////////////////////////////\r\n\t\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\t\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\t\r\n\tdisplayRows(adjust){\r\n\t\tvar index = this.table.rowManager.displayRows.length - 1, \r\n\t\tlookupIndex;\r\n\t\t\r\n\t\tif(this._handler){\r\n\t\t\tlookupIndex = this.table.rowManager.displayPipeline.findIndex((item) => {\r\n\t\t\t\treturn item.handler === this._handler;\r\n\t\t\t});\r\n\r\n\t\t\tif(lookupIndex > -1){\r\n\t\t\t\tindex = lookupIndex;\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\tif(adjust){\r\n\t\t\tindex = index + adjust;\r\n\t\t}\r\n\r\n\t\tif(this._handler){\r\n\t\t\tif(index > -1){\r\n\t\t\t\treturn this.table.rowManager.getDisplayRows(index);\r\n\t\t\t}else{\r\n\t\t\t\treturn this.activeRows();\r\n\t\t\t}\r\n\t\t}\t\r\n\t}\r\n\t\r\n\tactiveRows(){\r\n\t\treturn this.table.rowManager.activeRows;\r\n\t}\r\n\t\r\n\trefreshData(renderInPosition, handler){\r\n\t\tif(!handler){\r\n\t\t\thandler = this._handler;\r\n\t\t}\r\n\t\t\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\t\r\n\t///////////////////////////////////\r\n\t//////// Footer Management ////////\r\n\t///////////////////////////////////\r\n\t\r\n\tfooterAppend(element){\r\n\t\treturn this.table.footerManager.append(element);\r\n\t}\r\n\t\r\n\tfooterPrepend(element){\r\n\t\treturn this.table.footerManager.prepend(element);\r\n\t}\r\n\t\r\n\tfooterRemove(element){\r\n\t\treturn this.table.footerManager.remove(element);\r\n\t} \r\n\t\r\n\t///////////////////////////////////\r\n\t//////// Popups Management ////////\r\n\t///////////////////////////////////\r\n\t\r\n\tpopup(menuEl, menuContainer){\r\n\t\treturn new Popup(this.table, menuEl, menuContainer);\r\n\t}\r\n\t\r\n\t///////////////////////////////////\r\n\t//////// Alert Management ////////\r\n\t///////////////////////////////////\r\n\t\r\n\talert(content, type){\r\n\t\treturn this.table.alertManager.alert(content, type);\r\n\t}\r\n\t\r\n\tclearAlert(){\r\n\t\treturn this.table.alertManager.clear();\r\n\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, forced){\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, forced){\r\n\tif(forced){\r\n\t\tthis.table.columnManager.renderer.reinitializeColumnWidths(columns);\r\n\t}\r\n\t\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, forced){\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, forced){\r\n\tvar totalWidth = this.table.rowManager.element.getBoundingClientRect().width; //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 across 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 across 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\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 = 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\tgapFill = 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//calculate 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(gapFill && 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(dataChanged){\r\n\t\tthis.dispatch(\"layout-refreshing\");\r\n\t\tLayout.modes[this.mode].call(this, this.table.columnManager.columnsByIndex, dataChanged);\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 placeholder\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 language 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//determining 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 fillPath = value ? path + \"|\" + value : path,\r\n\t\tpathArray = fillPath.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//iterate 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\t\"counter\":{\r\n\t\t\t\t\"showing\": \"Showing\",\r\n\t\t\t\t\"of\": \"of\",\r\n\t\t\t\t\"rows\": \"rows\",\r\n\t\t\t\t\"pages\": \"pages\",\r\n\t\t\t}\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 = TableRegistry.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\t\r\n\tconstructor(tabulator, modules){\r\n\t\tthis.bindStaticFunctionality(tabulator);\r\n\t\tthis.bindModules(tabulator, coreModules, true);\r\n\t\t\r\n\t\tif(modules){\r\n\t\t\tthis.bindModules(tabulator, modules);\r\n\t\t}\r\n\t}\r\n\t\r\n\tbindStaticFunctionality(tabulator){\r\n\t\ttabulator.moduleBindings = {};\r\n\t\t\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][property];\r\n\t\t\t\t\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\t\t\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\t\t\t\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\t\t\r\n\t\ttabulator.registerModuleBinding = function(mod){\r\n\t\t\ttabulator.moduleBindings[mod.moduleName] = mod;\r\n\t\t};\r\n\t\t\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\t\t\r\n\t\t//ensure that module are bound to instantiated function\r\n\t\ttabulator.prototype.bindModules = function(){\r\n\t\t\tvar orderedStartMods = [],\r\n\t\t\torderedEndMods = [],\r\n\t\t\tunOrderedMods = [];\r\n\t\t\t\r\n\t\t\tthis.modules = {};\r\n\t\t\t\r\n\t\t\tfor(var name in tabulator.moduleBindings){\r\n\t\t\t\tlet mod = tabulator.moduleBindings[name];\r\n\t\t\t\tlet module = new mod(this);\r\n\t\t\t\t\r\n\t\t\t\tthis.modules[name] = module;\r\n\t\t\t\t\r\n\t\t\t\tif(mod.prototype.moduleCore){\r\n\t\t\t\t\tthis.modulesCore.push(module);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tif(mod.moduleInitOrder){\r\n\t\t\t\t\t\tif(mod.moduleInitOrder < 0){\r\n\t\t\t\t\t\t\torderedStartMods.push(module);\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\torderedEndMods.push(module);\r\n\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\tunOrderedMods.push(module);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\torderedStartMods.sort((a, b) => a.moduleInitOrder > b.moduleInitOrder ? 1 : -1);\r\n\t\t\torderedEndMods.sort((a, b) => a.moduleInitOrder > b.moduleInitOrder ? 1 : -1);\r\n\t\t\t\r\n\t\t\tthis.modulesRegular = orderedStartMods.concat(unOrderedMods.concat(orderedEndMods));\r\n\t\t};\r\n\t}\r\n\t\r\n\tbindModules(tabulator, modules, core){\r\n\t\tvar mods = Object.values(modules);\r\n\t\t\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\t\t\r\n\t\ttabulator.registerModule(mods);\r\n\t}\r\n}","import CoreFeature from '../CoreFeature.js';\r\n\r\nexport default class Alert extends CoreFeature{\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n \r\n\t\tthis.element = this._createAlertElement();\r\n\t\tthis.msgElement = this._createMsgElement();\r\n\t\tthis.type = null;\r\n \r\n\t\tthis.element.appendChild(this.msgElement);\r\n\t}\r\n \r\n\t_createAlertElement(){\r\n\t\tvar el = document.createElement(\"div\");\r\n\t\tel.classList.add(\"tabulator-alert\");\r\n\t\treturn el;\r\n\t}\r\n \r\n\t_createMsgElement(){\r\n\t\tvar el = document.createElement(\"div\");\r\n\t\tel.classList.add(\"tabulator-alert-msg\");\r\n\t\tel.setAttribute(\"role\", \"alert\");\r\n\t\treturn el;\r\n\t}\r\n \r\n\t_typeClass(){\r\n\t\treturn \"tabulator-alert-state-\" + this.type;\r\n\t}\r\n \r\n\talert(content, type = \"msg\"){\r\n\t\tif(content){\r\n\t\t\tthis.clear();\r\n \r\n\t\t\tthis.type = type;\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.add(this._typeClass());\r\n \r\n\t\t\tif(typeof content === \"function\"){\r\n\t\t\t\tcontent = content();\r\n\t\t\t}\r\n \r\n\t\t\tif(content instanceof HTMLElement){\r\n\t\t\t\tthis.msgElement.appendChild(content);\r\n\t\t\t}else{\r\n\t\t\t\tthis.msgElement.innerHTML = content;\r\n\t\t\t}\r\n \r\n\t\t\tthis.table.element.appendChild(this.element);\r\n\t\t}\r\n\t}\r\n \r\n\tclear(){\r\n\t\tif(this.element.parentNode){\r\n\t\t\tthis.element.parentNode.removeChild(this.element);\r\n\t\t}\r\n \r\n\t\tthis.msgElement.classList.remove(this._typeClass());\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 ComponentFunctionBinder from './tools/ComponentFunctionBinder.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 DeprecationAdvisor from './tools/DeprecationAdvisor.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\nimport Alert from './tools/Alert.js';\r\n\r\nclass Tabulator {\r\n\t\r\n\tconstructor(element, options){\r\n\t\t\r\n\t\tthis.options = {};\r\n\t\t\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.alertManager = null; //hold Alert 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 mobile, prevent resize cancelling edit on keyboard appearance\r\n\t\tthis.rtl = false; //check if the table is in RTL mode\r\n\t\tthis.originalElement = null; //hold original table element if it has been replaced\r\n\t\t\r\n\t\tthis.componentFunctionBinder = new ComponentFunctionBinder(this); //bind component functions\r\n\t\tthis.dataLoader = false; //bind component functions\r\n\t\t\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\t\t\r\n\t\tthis.deprecationAdvisor = new DeprecationAdvisor(this);\r\n\t\tthis.optionsList = new OptionsList(this, \"table constructor\");\r\n\t\t\r\n\t\tthis.initialized = false;\r\n\t\tthis.destroyed = false;\r\n\t\t\r\n\t\tif(this.initializeElement(element)){\r\n\t\t\t\r\n\t\t\tthis.initializeCoreSystems(options);\r\n\t\t\t\r\n\t\t\t//delay table creation to allow event bindings immediately 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\t\t\r\n\t\tTableRegistry.register(this); //register table for inter-device communication\r\n\t}\r\n\t\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\t\t\t\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\t\r\n\tinitializeCoreSystems(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\t\tthis.alertManager = new Alert(this);\r\n\t\t\r\n\t\tthis.bindModules();\r\n\t\t\r\n\t\tthis.options = this.optionsList.generate(Tabulator.defaultOptions, options);\r\n\t\t\r\n\t\tthis._clearObjectPointers();\r\n\t\t\r\n\t\tthis._mapDeprecatedFunctionality();\r\n\t\t\r\n\t\tthis.externalEvents = new ExternalEventBus(this, this.options, this.options.debugEventsExternal);\r\n\t\tthis.eventBus = new InternalEventBus(this.options.debugEventsInternal);\r\n\t\t\r\n\t\tthis.interactionMonitor = new InteractionMonitor(this);\r\n\t\t\r\n\t\tthis.dataLoader.initialize();\r\n\t\t// this.columnManager.initialize();\r\n\t\t// this.rowManager.initialize();\r\n\t\tthis.footerManager.initialize();\r\n\t}\r\n\t\r\n\t//convert deprecated functionality to new functions\r\n\t_mapDeprecatedFunctionality(){\r\n\t\t//all previously deprecated functionality removed in the 5.0 release\r\n\t}\r\n\t\r\n\t_clearSelection(){\r\n\t\t\r\n\t\tthis.element.classList.add(\"tabulator-block-select\");\r\n\t\t\r\n\t\tif (window.getSelection) {\r\n\t\t\tif (window.getSelection().empty) { // Chrome\r\n\t\t\t\twindow.getSelection().empty();\r\n\t\t\t} else if (window.getSelection().removeAllRanges) { // Firefox\r\n\t\t\t\twindow.getSelection().removeAllRanges();\r\n\t\t\t}\r\n\t\t} else if (document.selection) { // IE?\r\n\t\t\tdocument.selection.empty();\r\n\t\t}\r\n\t\t\r\n\t\tthis.element.classList.remove(\"tabulator-block-select\");\r\n\t}\r\n\t\r\n\t//create table\r\n\t_create(){\r\n\t\tthis.externalEvents.dispatch(\"tableBuilding\");\r\n\t\tthis.eventBus.dispatch(\"table-building\");\r\n\t\t\r\n\t\tthis._rtlCheck();\r\n\t\t\r\n\t\tthis._buildElement();\r\n\t\t\r\n\t\tthis._initializeTable();\r\n\t\t\r\n\t\tthis._loadInitialData();\r\n\t\t\r\n\t\tthis.initialized = true;\r\n\t\t\r\n\t\tthis.externalEvents.dispatch(\"tableBuilt\");\r\n\t}\r\n\t\r\n\t_rtlCheck(){\r\n\t\tvar style = window.getComputedStyle(this.element);\r\n\t\t\r\n\t\tswitch(this.options.textDirection){\r\n\t\t\tcase\"auto\":\r\n\t\t\t\tif(style.direction !== \"rtl\"){\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t\r\n\t\t\tcase \"rtl\":\r\n\t\t\t\tthis.element.classList.add(\"tabulator-rtl\");\r\n\t\t\t\tthis.rtl = true;\r\n\t\t\t\tbreak;\r\n\t\t\t\r\n\t\t\tcase \"ltr\":\r\n\t\t\t\tthis.element.classList.add(\"tabulator-ltr\");\r\n\t\t\t\r\n\t\t\tdefault:\r\n\t\t\t\tthis.rtl = false;\r\n\t\t}\r\n\t}\r\n\t\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\t\t\r\n\t\tif(Array.isArray(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\t\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\t\tnewElement;\r\n\t\t\r\n\t\tif(element.tagName === \"TABLE\"){\r\n\t\t\tthis.originalElement = this.element;\r\n\t\t\tnewElement = document.createElement(\"div\");\r\n\t\t\t\r\n\t\t\t//transfer attributes to new element\r\n\t\t\tvar attributes = element.attributes;\r\n\t\t\t\r\n\t\t\t// loop through attributes and apply them on div\r\n\t\t\tfor(var i in attributes){\r\n\t\t\t\tif(typeof attributes[i] == \"object\"){\r\n\t\t\t\t\tnewElement.setAttribute(attributes[i].name, attributes[i].value);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\t// replace table with div element\r\n\t\t\telement.parentNode.replaceChild(newElement, element);\r\n\t\t\t\r\n\t\t\tthis.element = element = newElement;\r\n\t\t}\r\n\t\t\r\n\t\telement.classList.add(\"tabulator\");\r\n\t\telement.setAttribute(\"role\", \"grid\");\r\n\t\t\r\n\t\t//empty element\r\n\t\twhile(element.firstChild) element.removeChild(element.firstChild);\r\n\t\t\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\t\t\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\t\t\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\t}\r\n\t\r\n\t//initialize core systems and modules\r\n\t_initializeTable(){\r\n\t\tvar element = this.element,\r\n\t\toptions = this.options;\r\n\t\t\r\n\t\tthis.interactionMonitor.initialize();\r\n\t\t\r\n\t\tthis.columnManager.initialize();\r\n\t\tthis.rowManager.initialize();\r\n\t\t\r\n\t\tthis._detectBrowser();\r\n\t\t\r\n\t\t//initialize core modules\r\n\t\tthis.modulesCore.forEach((mod) => {\r\n\t\t\tmod.initialize();\r\n\t\t});\r\n\t\t\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\t\t\r\n\t\tif(options.footerElement){\r\n\t\t\tthis.footerManager.activate();\r\n\t\t}\r\n\t\t\r\n\t\tif(options.autoColumns && options.data){\r\n\t\t\t\r\n\t\t\tthis.columnManager.generateColumnsFromRowData(this.options.data);\r\n\t\t}\r\n\t\t\r\n\t\t//initialize regular modules\r\n\t\tthis.modulesRegular.forEach((mod) => {\r\n\t\t\tmod.initialize();\r\n\t\t});\r\n\t\t\r\n\t\tthis.columnManager.setColumns(options.columns);\r\n\t\t\r\n\t\tthis.eventBus.dispatch(\"table-built\");\r\n\t}\r\n\t\r\n\t_loadInitialData(){\r\n\t\tthis.dataLoader.load(this.options.data);\r\n\t}\r\n\t\r\n\t//deconstructor\r\n\tdestroy(){\r\n\t\tvar element = this.element;\r\n\t\t\r\n\t\tthis.destroyed = true;\r\n\t\t\r\n\t\tTableRegistry.deregister(this); //deregister table from inter-device communication\r\n\t\t\r\n\t\tthis.eventBus.dispatch(\"table-destroy\");\r\n\t\t\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\t\t\r\n\t\tthis.rowManager.rows = [];\r\n\t\tthis.rowManager.activeRows = [];\r\n\t\tthis.rowManager.displayRows = [];\r\n\t\t\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\r\n\t\tthis.externalEvents.dispatch(\"tableDestroyed\");\r\n\t}\r\n\t\r\n\t_detectBrowser(){\r\n\t\tvar ua = navigator.userAgent||navigator.vendor||window.opera;\r\n\t\t\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\t\t\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.slice(0,4));\r\n\t}\r\n\t\r\n\tinitGuard(func, msg){\r\n\t\tvar stack, line;\r\n\t\t\r\n\t\tif(this.options.debugInitialization && !this.initialized){\r\n\t\t\tif(!func){\r\n\t\t\t\tstack = new Error().stack.split(\"\\n\");\r\n\t\t\t\t\r\n\t\t\t\tline = stack[0] == \"Error\" ? stack[2] : stack[1];\r\n\t\t\t\t\r\n\t\t\t\tif(line[0] == \" \"){\r\n\t\t\t\t\tfunc = line.trim().split(\" \")[1].split(\".\")[1];\r\n\t\t\t\t}else{\r\n\t\t\t\t\tfunc = line.trim().split(\"@\")[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tconsole.warn(\"Table Not Initialized - Calling the \" + func + \" function before the table is initialized may result in inconsistent behavior, Please wait for the `tableBuilt` event before calling this function.\" + (msg ? \" \" + msg : \"\"));\r\n\t\t}\r\n\t\t\r\n\t\treturn this.initialized;\r\n\t}\r\n\t\r\n\t////////////////// Data Handling //////////////////\r\n\t//block table redrawing\r\n\tblockRedraw(){\r\n\t\tthis.initGuard();\r\n\r\n\t\tthis.eventBus.dispatch(\"redraw-blocking\");\r\n\t\t\r\n\t\tthis.rowManager.blockRedraw();\r\n\t\tthis.columnManager.blockRedraw();\r\n\r\n\t\tthis.eventBus.dispatch(\"redraw-blocked\");\r\n\t}\r\n\t\r\n\t//restore table redrawing\r\n\trestoreRedraw(){\r\n\t\tthis.initGuard();\r\n\r\n\t\tthis.eventBus.dispatch(\"redraw-restoring\");\r\n\r\n\t\tthis.rowManager.restoreRedraw();\r\n\t\tthis.columnManager.restoreRedraw();\r\n\r\n\t\tthis.eventBus.dispatch(\"redraw-restored\");\r\n\t}\r\n\t\r\n\t//load data\r\n\tsetData(data, params, config){\r\n\t\tthis.initGuard(false, \"To set initial data please use the 'data' property in the table constructor.\");\r\n\t\t\r\n\t\treturn this.dataLoader.load(data, params, config, false);\r\n\t}\r\n\t\r\n\t//clear data\r\n\tclearData(){\r\n\t\tthis.initGuard();\r\n\t\t\r\n\t\tthis.dataLoader.blockActiveLoad();\r\n\t\tthis.rowManager.clearData();\r\n\t}\r\n\t\r\n\t//get table data array\r\n\tgetData(active){\r\n\t\treturn this.rowManager.getData(active);\r\n\t}\r\n\t\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\t\r\n\t//replace data, keeping table in position with same sort\r\n\treplaceData(data, params, config){\r\n\t\tthis.initGuard();\r\n\t\t\r\n\t\treturn this.dataLoader.load(data, params, config, true, true);\r\n\t}\r\n\t\r\n\t//update table data\r\n\tupdateData(data){\r\n\t\tvar responses = 0;\r\n\t\t\r\n\t\tthis.initGuard();\r\n\t\t\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tthis.dataLoader.blockActiveLoad();\r\n\t\t\t\r\n\t\t\tif(typeof data === \"string\"){\r\n\t\t\t\tdata = JSON.parse(data);\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif(data && data.length > 0){\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\t\t\t\t\t\r\n\t\t\t\t\tif(row){\r\n\t\t\t\t\t\tresponses++;\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\trow.updateData(item)\r\n\t\t\t\t\t\t\t.then(()=>{\r\n\t\t\t\t\t\t\t\tresponses--;\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\tif(!responses){\r\n\t\t\t\t\t\t\t\t\tresolve();\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}\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\t\r\n\taddData(data, pos, index){\r\n\t\tthis.initGuard();\r\n\t\t\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tthis.dataLoader.blockActiveLoad();\r\n\t\t\t\r\n\t\t\tif(typeof data === \"string\"){\r\n\t\t\t\tdata = JSON.parse(data);\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif(data){\r\n\t\t\t\tthis.rowManager.addRows(data, pos, index)\r\n\t\t\t\t\t.then((rows) => {\r\n\t\t\t\t\t\tvar output = [];\r\n\t\t\t\t\t\r\n\t\t\t\t\t\trows.forEach(function(row){\r\n\t\t\t\t\t\t\toutput.push(row.getComponent());\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t\r\n\t\t\t\t\t\tresolve(output);\r\n\t\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\t\r\n\t//update table data\r\n\tupdateOrAddData(data){\r\n\t\tvar rows = [],\r\n\t\tresponses = 0;\r\n\t\t\r\n\t\tthis.initGuard();\r\n\t\t\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tthis.dataLoader.blockActiveLoad();\r\n\t\t\t\r\n\t\t\tif(typeof data === \"string\"){\r\n\t\t\t\tdata = JSON.parse(data);\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif(data && data.length > 0){\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\t\t\t\t\t\r\n\t\t\t\t\tresponses++;\r\n\t\t\t\t\t\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\t.then(()=>{\r\n\t\t\t\t\t\t\t\tresponses--;\r\n\t\t\t\t\t\t\t\trows.push(row.getComponent());\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\tif(!responses){\r\n\t\t\t\t\t\t\t\t\tresolve(rows);\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}else{\r\n\t\t\t\t\t\tthis.rowManager.addRows(item)\r\n\t\t\t\t\t\t\t.then((newRows)=>{\r\n\t\t\t\t\t\t\t\tresponses--;\r\n\t\t\t\t\t\t\t\trows.push(newRows[0].getComponent());\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\tif(!responses){\r\n\t\t\t\t\t\t\t\t\tresolve(rows);\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}\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\t\r\n\t//get row object\r\n\tgetRow(index){\r\n\t\tvar row = this.rowManager.findRow(index);\r\n\t\t\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\t\r\n\t//get row object\r\n\tgetRowFromPosition(position){\r\n\t\tvar row = this.rowManager.getRowFromPosition(position);\r\n\t\t\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\t\r\n\t//delete row from table\r\n\tdeleteRow(index){\r\n\t\tvar foundRows = [];\r\n\t\t\r\n\t\tthis.initGuard();\r\n\t\t\r\n\t\tif(!Array.isArray(index)){\r\n\t\t\tindex = [index];\r\n\t\t}\r\n\t\t\r\n\t\t//find matching rows\r\n\t\tfor(let item of index){\r\n\t\t\tlet row = this.rowManager.findRow(item, true);\r\n\t\t\t\r\n\t\t\tif(row){\r\n\t\t\t\tfoundRows.push(row);\r\n\t\t\t}else{\r\n\t\t\t\tconsole.error(\"Delete Error - No matching row found:\", item);\r\n\t\t\t\treturn Promise.reject(\"Delete Error - No matching row found\");\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\t//sort rows into correct order to ensure smooth delete from table\r\n\t\tfoundRows.sort((a, b) => {\r\n\t\t\treturn this.rowManager.rows.indexOf(a) > this.rowManager.rows.indexOf(b) ? 1 : -1;\r\n\t\t});\r\n\t\t\r\n\t\t//delete rows\r\n\t\tfoundRows.forEach((row) =>{\r\n\t\t\trow.delete();\r\n\t\t});\r\n\t\t\r\n\t\tthis.rowManager.reRenderInPosition();\r\n\t\t\r\n\t\treturn Promise.resolve();\r\n\t}\r\n\t\r\n\t//add row to table\r\n\taddRow(data, pos, index){\r\n\t\tthis.initGuard();\r\n\t\t\r\n\t\tif(typeof data === \"string\"){\r\n\t\t\tdata = JSON.parse(data);\r\n\t\t}\r\n\t\t\r\n\t\treturn this.rowManager.addRows(data, pos, index)\r\n\t\t\t.then((rows)=>{\r\n\t\t\t\treturn rows[0].getComponent();\r\n\t\t\t});\r\n\t}\r\n\t\r\n\t//update a row if it exists otherwise create it\r\n\tupdateOrAddRow(index, data){\r\n\t\tvar row = this.rowManager.findRow(index);\r\n\t\t\r\n\t\tthis.initGuard();\r\n\t\t\r\n\t\tif(typeof data === \"string\"){\r\n\t\t\tdata = JSON.parse(data);\r\n\t\t}\r\n\t\t\r\n\t\tif(row){\r\n\t\t\treturn row.updateData(data)\r\n\t\t\t\t.then(()=>{\r\n\t\t\t\t\treturn row.getComponent();\r\n\t\t\t\t});\r\n\t\t}else{\r\n\t\t\treturn this.rowManager.addRows(data)\r\n\t\t\t\t.then((rows)=>{\r\n\t\t\t\t\treturn rows[0].getComponent();\r\n\t\t\t\t});\r\n\t\t}\r\n\t}\r\n\t\r\n\t//update row data\r\n\tupdateRow(index, data){\r\n\t\tvar row = this.rowManager.findRow(index);\r\n\t\t\r\n\t\tthis.initGuard();\r\n\t\t\r\n\t\tif(typeof data === \"string\"){\r\n\t\t\tdata = JSON.parse(data);\r\n\t\t}\r\n\t\t\r\n\t\tif(row){\r\n\t\t\treturn row.updateData(data)\r\n\t\t\t\t.then(()=>{\r\n\t\t\t\t\treturn Promise.resolve(row.getComponent());\r\n\t\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\t\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\t\t\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\t\r\n\tmoveRow(from, to, after){\r\n\t\tvar fromRow = this.rowManager.findRow(from);\r\n\t\t\r\n\t\tthis.initGuard();\r\n\t\t\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\t\r\n\tgetRows(active){\r\n\t\treturn this.rowManager.getComponents(active);\t\r\n\t}\r\n\t\r\n\t//get position of row in table\r\n\tgetRowPosition(index){\r\n\t\tvar row = this.rowManager.findRow(index);\r\n\t\t\r\n\t\tif(row){\r\n\t\t\treturn row.getPosition();\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\t\r\n\t/////////////// Column Functions ///////////////\r\n\tsetColumns(definition){\r\n\t\tthis.initGuard(false, \"To set initial columns please use the 'columns' property in the table constructor\");\r\n\t\t\r\n\t\tthis.columnManager.setColumns(definition);\r\n\t}\r\n\t\r\n\tgetColumns(structured){\r\n\t\treturn this.columnManager.getComponents(structured);\r\n\t}\r\n\t\r\n\tgetColumn(field){\r\n\t\tvar column = this.columnManager.findColumn(field);\r\n\t\t\r\n\t\tif(column){\r\n\t\t\treturn column.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\t\r\n\tgetColumnDefinitions(){\r\n\t\treturn this.columnManager.getDefinitionTree();\r\n\t}\r\n\t\r\n\tshowColumn(field){\r\n\t\tvar column = this.columnManager.findColumn(field);\r\n\t\t\r\n\t\tthis.initGuard();\r\n\t\t\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\t\r\n\thideColumn(field){\r\n\t\tvar column = this.columnManager.findColumn(field); \r\n\t\t\r\n\t\tthis.initGuard();\r\n\t\t\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\t\r\n\ttoggleColumn(field){\r\n\t\tvar column = this.columnManager.findColumn(field);\r\n\t\t\r\n\t\tthis.initGuard();\r\n\t\t\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\t\r\n\taddColumn(definition, before, field){\r\n\t\tvar column = this.columnManager.findColumn(field);\r\n\t\t\r\n\t\tthis.initGuard();\r\n\t\t\r\n\t\treturn this.columnManager.addColumn(definition, before, column)\r\n\t\t\t.then((column) => {\r\n\t\t\t\treturn column.getComponent();\r\n\t\t\t});\r\n\t}\r\n\t\r\n\tdeleteColumn(field){\r\n\t\tvar column = this.columnManager.findColumn(field);\r\n\t\t\r\n\t\tthis.initGuard();\r\n\t\t\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\t\r\n\tupdateColumnDefinition(field, definition){\r\n\t\tvar column = this.columnManager.findColumn(field);\r\n\t\t\r\n\t\tthis.initGuard();\r\n\t\t\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\t\r\n\tmoveColumn(from, to, after){\r\n\t\tvar fromColumn = this.columnManager.findColumn(from),\r\n\t\ttoColumn = this.columnManager.findColumn(to);\r\n\t\t\r\n\t\tthis.initGuard();\r\n\t\t\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\t\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\t\t\t\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\t\r\n\t//////////// General Public Functions ////////////\r\n\t//redraw list without updating data\r\n\tredraw(force){\r\n\t\tthis.initGuard();\r\n\r\n\t\tthis.columnManager.redraw(force);\r\n\t\tthis.rowManager.redraw(force);\r\n\t}\r\n\t\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\t\r\n\t//////////////////// Event Bus ///////////////////\r\n\t\r\n\ton(key, callback){\r\n\t\tthis.externalEvents.subscribe(key, callback);\r\n\t}\r\n\t\r\n\toff(key, callback){\r\n\t\tthis.externalEvents.unsubscribe(key, callback);\r\n\t}\r\n\t\r\n\tdispatchEvent(){\r\n\t\tvar args = Array.from(arguments);\r\n\t\targs.shift();\r\n\t\t\r\n\t\tthis.externalEvents.dispatch(...arguments);\r\n\t}\r\n\r\n\t//////////////////// Alerts ///////////////////\r\n\r\n\talert(contents, type){\r\n\t\tthis.initGuard();\r\n\r\n\t\tthis.alertManager.alert(contents, type);\r\n\t}\r\n\r\n\tclearAlert(){\r\n\t\tthis.initGuard();\r\n\r\n\t\tthis.alertManager.clear();\r\n\t}\r\n\t\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\t\r\n\tmodule(key){\r\n\t\tvar mod = this.modules[key];\r\n\t\t\r\n\t\tif(!mod){\r\n\t\t\tconsole.error(\"Tabulator module not installed: \" + key);\r\n\t\t}\r\n\t\t\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;\r\n","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\tdebugInvalidComponentFuncs:true, //allow toggling of invalid component warnings\r\n\tdebugInitialization:true, //allow toggling of pre initialization function call warnings\r\n\tdebugDeprecation:true, //allow toggling of deprecation 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\tcolumnHeaderVertAlign:\"top\", //vertical alignment of column headers\r\n\r\n\tpopupContainer:false,\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:\".\", //separator for nested data\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\trowHeight:null,\r\n\r\n\tplaceholder:false,\r\n\r\n\tdataLoader:true,\r\n\tdataLoaderLoading:false,\r\n\tdataLoaderError:false,\r\n\tdataLoaderErrorTimeout:3000,\r\n\r\n\tdataSendParams:{},\r\n\r\n\tdataReceiveParams:{},\r\n};\r\n","import Module from '../../core/Module.js';\r\nimport Helpers from '../../core/tools/Helpers.js';\r\n\r\nimport defaultAccessors 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((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\t\tif(Accessor.accessors[value]){\r\n\t\t\t\t\taccessor = Accessor.accessors[value];\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.warn(\"Accessor Error - No such accessor found, ignoring: \", value);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase \"function\":\r\n\t\t\t\taccessor = value;\r\n\t\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, colComponent;\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\tcolComponent = column.getComponent();\r\n\t\t\t\t\t\tparams = typeof accessor.params === \"function\" ? accessor.params(value, data, type, colComponent, rowComponent) : accessor.params;\r\n\t\t\t\t\t\tcolumn.setFieldValue(data, accessor.accessor(value, data, type, params, colComponent, 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 = defaultAccessors;\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}","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\nexport 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\r\n\t\t\tvar output = 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\t\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\t\t\r\n\t\tthis.config = {}; //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\t\t\r\n\t\tthis.loaderPromise = false;\r\n\t\t\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\t\t\r\n\t\tthis.registerTableOption(\"ajaxRequesting\", function(){});\r\n\t\tthis.registerTableOption(\"ajaxResponse\", false);\r\n\t\t\r\n\t\tthis.contentTypeFormatters = Ajax.contentTypeFormatters;\r\n\t}\r\n\t\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\t\t\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\r\n\t\tthis.setDefaultConfig(this.table.options.ajaxConfig);\r\n\t\t\r\n\t\tthis.registerTableFunction(\"getAjaxUrl\", this.getUrl.bind(this));\r\n\t\t\r\n\t\tthis.subscribe(\"data-loading\", this.requestDataCheck.bind(this));\r\n\t\tthis.subscribe(\"data-params\", this.requestParams.bind(this));\r\n\t\tthis.subscribe(\"data-load\", this.requestData.bind(this));\r\n\t}\r\n\t\r\n\trequestParams(data, config, silent, params){\r\n\t\tvar ajaxParams = this.table.options.ajaxParams;\r\n\t\t\r\n\t\tif(ajaxParams){\r\n\t\t\tif(typeof ajaxParams === \"function\"){\r\n\t\t\t\tajaxParams = ajaxParams.call(this.table);\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tparams = Object.assign(params, ajaxParams);\r\n\t\t}\t\t\r\n\t\t\r\n\t\treturn params;\r\n\t}\r\n\t\r\n\trequestDataCheck(data, params, config, silent){\r\n\t\treturn !!((!data && this.url) || typeof data === \"string\");\r\n\t}\r\n\t\r\n\trequestData(url, params, config, silent, previousData){\r\n\t\tvar ajaxConfig;\r\n\t\t\r\n\t\tif(!previousData && this.requestDataCheck(url)){\r\n\t\t\tif(url){\r\n\t\t\t\tthis.setUrl(url);\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tajaxConfig = this.generateConfig(config);\r\n\t\t\t\r\n\t\t\treturn this.sendRequest(this.url, params, ajaxConfig);\r\n\t\t}else{\r\n\t\t\treturn previousData;\r\n\t\t}\r\n\t}\r\n\t\r\n\tsetDefaultConfig(config = {}){\r\n\t\tthis.config = Object.assign({}, Ajax.defaultConfig);\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\tObject.assign(this.config, config);\r\n\t\t}\r\n\t}\r\n\t\r\n\t//load config object\r\n\tgenerateConfig(config = {}){\r\n\t\tvar ajaxConfig = Object.assign({}, this.config);\r\n\t\t\r\n\t\tif(typeof config == \"string\"){\r\n\t\t\tajaxConfig.method = config;\r\n\t\t}else{\r\n\t\t\tObject.assign(ajaxConfig, config);\r\n\t\t}\r\n\t\t\r\n\t\treturn ajaxConfig;\r\n\t}\r\n\t\r\n\t//set request url\r\n\tsetUrl(url){\r\n\t\tthis.url = url;\r\n\t}\r\n\t\r\n\t//get request url\r\n\tgetUrl(){\r\n\t\treturn this.url;\r\n\t}\r\n\t\r\n\t//send ajax request\r\n\tsendRequest(url, params, config){\r\n\t\tif(this.table.options.ajaxRequesting.call(this.table, url, params) !== false){\r\n\t\t\treturn this.loaderPromise(url, config, params)\r\n\t\t\t\t.then((data)=>{\r\n\t\t\t\t\tif(this.table.options.ajaxResponse){\r\n\t\t\t\t\t\tdata = this.table.options.ajaxResponse.call(this.table, url, params, data);\r\n\t\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\t\treturn data;\r\n\t\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\t\t\t\tif(typeof config.headers[\"Origin\"] === \"undefined\"){\r\n\t\t\t\t\tconfig.headers[\"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\t.then((response)=>{\r\n\t\t\t\t\tif(response.ok) {\r\n\t\t\t\t\t\tresponse.json()\r\n\t\t\t\t\t\t\t.then((data)=>{\r\n\t\t\t\t\t\t\t\tresolve(data);\r\n\t\t\t\t\t\t\t}).catch((error)=>{\r\n\t\t\t\t\t\t\t\treject(error);\r\n\t\t\t\t\t\t\t\tconsole.warn(\"Ajax Load Error - Invalid JSON returned\", error);\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tconsole.error(\"Ajax Load Error - Connection Error: \" + response.status, response.statusText);\r\n\t\t\t\t\t\treject(response);\r\n\t\t\t\t\t}\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 - Connection Error: \", error);\r\n\t\t\t\t\treject(error);\r\n\t\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); //DEPRECATED - 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\tlist = 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.generateHTMLTable(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\t\tvalue = JSON.stringify(col.value);\r\n\t\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\t\tvalue = \"\";\r\n\t\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\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 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\t\tthis.pasteAction = Clipboard.pasteActions[action];\r\n\r\n\t\t\t\tif(!this.pasteAction){\r\n\t\t\t\t\tconsole.warn(\"Clipboard Error - No such paste action found:\", action);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase \"function\":\r\n\t\t\t\tthis.pasteAction = action;\r\n\t\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\t\tthis.pasteParser = Clipboard.pasteParsers[parser];\r\n\r\n\t\t\t\tif(!this.pasteParser){\r\n\t\t\t\t\tconsole.warn(\"Clipboard Error - No such paste parser found:\", parser);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase \"function\":\r\n\t\t\t\tthis.pasteParser = parser;\r\n\t\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\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\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-refreshed\", this.recalcActiveRowsRefresh.bind(this));\r\n\t\tthis.subscribe(\"table-redraw\", this.tableRedraw.bind(this));\r\n\t\tthis.subscribe(\"rows-visible\", this.visibleRows.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\tvisibleRows(viewable, rows){\r\n\t\tif(this.topRow){\r\n\t\t\trows.unshift(this.topRow);\r\n\t\t}\r\n\r\n\t\tif(this.botRow){\r\n\t\t\trows.push(this.botRow);\r\n\t\t}\r\n\t\r\n\t\treturn rows;\r\n\t}\r\n\r\n\trowsUpdated(row){\r\n\t\tif(this.table.options.groupBy){\r\n\t\t\tthis.recalcRowGroup(row);\r\n\t\t}else{\r\n\t\t\tthis.recalcActiveRows();\r\n\t\t}\r\n\t}\r\n\r\n\trecalcActiveRowsRefresh(){\r\n\t\tif(this.table.options.groupBy && this.table.options.dataTreeStartExpanded && this.table.options.dataTree){\r\n\t\t\tthis.recalcAll();\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\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\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\t\tif(ColumnCalcs.calculations[def.topCalc]){\r\n\t\t\t\t\t\tconfig.topCalc = ColumnCalcs.calculations[def.topCalc];\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tconsole.warn(\"Column Calc Error - No such calculation found, ignoring: \", def.topCalc);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"function\":\r\n\t\t\t\t\tconfig.topCalc = def.topCalc;\r\n\t\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\t\tif(ColumnCalcs.calculations[def.bottomCalc]){\r\n\t\t\t\t\t\tconfig.botCalc = ColumnCalcs.calculations[def.bottomCalc];\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tconsole.warn(\"Column Calc Error - No such calculation found, ignoring: \", def.bottomCalc);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"function\":\r\n\t\t\t\t\tconfig.botCalc = def.bottomCalc;\r\n\t\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.footerRemove(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.footerPrepend(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\tif(this.table.rtl){\r\n\t\t\t\tthis.botRow.getElement().style.marginRight = (left) + \"px\";\r\n\t\t\t}else{\r\n\t\t\t\tthis.botRow.getElement().style.marginLeft = (-left) + \"px\";\r\n\t\t\t}\t\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\", data);\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\", data);\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\t\t\t\tvar groups = this.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\t\t\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 && 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(row);\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//set field name of mock column\r\n\t\t\t\tthis.genColumn.setField(column.getField());\r\n\t\t\t\tthis.genColumn.hozAlign = column.hozAlign;\r\n\r\n\t\t\t\tif(column.definition[pos + \"CalcFormatter\"] && this.table.modExists(\"format\")){\r\n\t\t\t\t\tthis.genColumn.modules.format = {\r\n\t\t\t\t\t\tformatter: this.table.modules.format.getFormatter(column.definition[pos + \"CalcFormatter\"]),\r\n\t\t\t\t\t\tparams: column.definition[pos + \"CalcFormatterParams\"] || {},\r\n\t\t\t\t\t};\r\n\t\t\t\t}else{\r\n\t\t\t\t\tthis.genColumn.modules.format = {\r\n\t\t\t\t\t\tformatter: this.table.modules.format.getFormatter(\"plaintext\"),\r\n\t\t\t\t\t\tparams:{}\r\n\t\t\t\t\t};\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//ensure css class definition is replicated to calculation cell\r\n\t\t\t\tthis.genColumn.definition.cssClass = column.definition.cssClass;\r\n\r\n\t\t\t\t//generate cell and assign to correct column\r\n\t\t\t\tvar cell = new Cell(this.genColumn, row);\r\n\t\t\t\tcell.getElement();\r\n\t\t\t\tcell.column = column;\r\n\t\t\t\tcell.setWidth();\r\n\r\n\t\t\t\tcolumn.cells.push(cell);\r\n\t\t\t\tcells.push(cell);\r\n\r\n\t\t\t\tif(!column.visible){\r\n\t\t\t\t\tcell.hide();\r\n\t\t\t\t}\r\n\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\nimport RowComponent from '../../core/row/RowComponent.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.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);//selecting 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\tthis.registerComponentFunction(\"row\", \"isTreeExpanded\", this.isRowExpanded.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\toptions = this.table.options;\r\n\r\n\t\t\tthis.field = options.dataTreeChildField;\r\n\t\t\tthis.indent = options.dataTreeChildIndent;\r\n\r\n\t\t\tif(this.options(\"movableRows\")){\r\n\t\t\t\tconsole.warn(\"The movableRows option is not available with dataTree enabled, moving of child rows could result in unpredictable behavior\");\r\n\t\t\t}\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\t\tthis.startOpen = function(row, index){\r\n\t\t\t\t\t\treturn options.dataTreeStartExpanded;\r\n\t\t\t\t\t};\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"function\":\r\n\t\t\t\t\tthis.startOpen = options.dataTreeStartExpanded;\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tthis.startOpen = function(row, index){\r\n\t\t\t\t\t\treturn options.dataTreeStartExpanded[index];\r\n\t\t\t\t\t};\r\n\t\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-after\", 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(\"cell-value-updated\", this.cellValueChanged.bind(this));\r\n\t\t\tthis.subscribe(\"edit-cancelled\", this.cellValueChanged.bind(this));\r\n\t\t\tthis.subscribe(\"column-moving-rows\", this.columnMoving.bind(this));\r\n\t\t\tthis.subscribe(\"table-built\", this.initializeElementField.bind(this));\r\n\t\t\tthis.subscribe(\"table-redrawing\", this.tableRedrawing.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\ttableRedrawing(force){\r\n\t\tvar rows;\r\n\r\n\t\tif(force){\r\n\t\t\trows = this.table.rowManager.getRows();\r\n\t\t\t\r\n\t\t\trows.forEach((row) => {\r\n\t\t\t\tthis.reinitializeRowChildren(row);\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tinitializeElementField(){\r\n\t\tvar firstCol = this.table.columnManager.getFirstVisibleColumn();\r\n\r\n\t\tthis.elementField = this.table.options.dataTreeElementColumn || (firstCol ? firstCol.field : false);\r\n\t}\r\n\t\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\tcellValueChanged(cell){\r\n\t\tvar field = cell.column.getField();\r\n\r\n\t\tif(field === this.elementField){\r\n\t\t\tthis.layoutRow(cell.row);\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\toldControl = config.controlEl;\r\n\r\n\t\tel = el || row.getCells()[0].getElement();\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\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\", 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\tisRowExpanded(row){\r\n\t\treturn row.modules.dataTree.open;\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\tgetTreeParentRoot(row){\r\n\t\treturn row.modules.dataTree && row.modules.dataTree.parent ? this.getTreeParentRoot(row.modules.dataTree.parent) : row;\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}else if(subject === null){\r\n\t\t\t\tmatch = false;\r\n\t\t\t}\r\n\r\n\t\t}else if(typeof subject == \"undefined\"){\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\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\nimport jsonLines from './downloaders/jsonLines.js';\r\n\r\nexport default {\r\n\tcsv:csv,\r\n\tjson:json,\r\n\tjsonLines:jsonLines,\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.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\t\tconsole.warn(\"Download Warning - CSV downloader cannot process row groups\");\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase \"calc\":\r\n\t\t\t\tconsole.warn(\"Download Warning - CSV downloader cannot process column calculations\");\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase \"header\":\r\n\t\t\t\trow.columns.forEach((col, i) => {\r\n\t\t\t\t\tif(col && col.depth === 1){\r\n\t\t\t\t\t\theaders[i] = typeof col.value == \"undefined\" || col.value === null ? \"\" : ('\"' + String(col.value).split('\"').join('\"\"') + '\"');\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase \"row\":\r\n\t\t\t\trow.columns.forEach((col) => {\r\n\r\n\t\t\t\t\tif(col){\r\n\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\t\tcol.value = col.value !== null ? JSON.stringify(col.value) : \"\";\r\n\t\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\t\tcol.value = \"\";\r\n\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\titem.push('\"' + String(col.value).split('\"').join('\"\"') + '\"');\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\tfileContents.push(item.join(delimiter));\r\n\t\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}\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\t\tbreak;\r\n\r\n\t\t\tcase \"group\":\r\n\t\t\t\tconsole.warn(\"Download Warning - JSON downloader cannot process row groups\");\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase \"calc\":\r\n\t\t\t\tconsole.warn(\"Download Warning - JSON downloader cannot process column calculations\");\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase \"row\":\r\n\t\t\t\trow.columns.forEach((col) => {\r\n\t\t\t\t\tif(col){\r\n\t\t\t\t\t\titem[col.component.getTitleDownload() || col.component.getField()] = col.value;\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\tfileContents.push(item);\r\n\t\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\tconst fileContents = [];\r\n\r\n\tlist.forEach((row) => {\r\n\t\tconst item = {};\r\n\r\n\t\tswitch (row.type) {\r\n\t\t\tcase \"header\":\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase \"group\":\r\n\t\t\t\tconsole.warn(\"Download Warning - JSON downloader cannot process row groups\");\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase \"calc\":\r\n\t\t\t\tconsole.warn(\"Download Warning - JSON downloader cannot process column calculations\");\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase \"row\":\r\n\t\t\t\trow.columns.forEach((col) => {\r\n\t\t\t\t\tif (col) {\r\n\t\t\t\t\t\titem[col.component.getTitleDownload() || col.component.getField()] = col.value;\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\tfileContents.push(JSON.stringify(item));\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t});\r\n\r\n\tsetFileContents(fileContents.join(\"\\n\"), \"application/x-ndjson\");\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.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\tswitch(row.type){\r\n\t\t\tcase \"header\":\r\n\t\t\t\theader.push(parseRow(row));\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase \"group\":\r\n\t\t\t\tbody.push(parseRow(row, rowGroupStyles));\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase \"calc\":\r\n\t\t\t\tbody.push(parseRow(row, rowCalcStyles));\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase \"row\":\r\n\t\t\t\tbody.push(parseRow(row));\r\n\t\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\t\tcol.value = col.value !== null ? JSON.stringify(col.value) : \"\";\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase \"undefined\":\r\n\t\t\t\t\t\tcol.value = \"\";\r\n\t\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}\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.jsPDF(jsPDFParams); //set document to landscape, better for most tables\r\n\r\n\tif(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.didDrawPage = 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.documentProcessing){\r\n\t\toptions.documentProcessing(doc);\r\n\t}\r\n\r\n\tsetFileContents(doc.output(\"arraybuffer\"), \"application/pdf\");\r\n}\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\tif(col.height > 1 || col.width > 1){\r\n\t\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\t}\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\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\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.generateHTMLTable(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(\"downloadEncoder\", function(data, mimeType){\r\n\t\t\treturn new Blob([data],{type:mimeType});\r\n\t\t}); //function to manipulate download data\r\n\t\tthis.registerTableOption(\"downloadReady\", undefined); //warn of function deprecation\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.deprecatedOptionsCheck();\r\n\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\tdeprecatedOptionsCheck(){\r\n\t\tthis.deprecationCheck(\"downloadReady\", \"downloadEncoder\");\r\n\t}\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\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.bind(this));\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 = this.table.options.downloadEncoder(data, mime);\r\n\r\n\t\tif(blob){\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\tfilename = filename || \"Tabulator.\" + (typeof type === \"function\" ? \"txt\" : type);\r\n\t\t\t\t\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\t\tthis.download(data.type, \"\", data.options, data.active, data.intercept);\r\n\t\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\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\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\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\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\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\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\tcase maskWildcard:\r\n\t\t\t\t\t\tbreak;\r\n\r\n\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\treturn false;\r\n\t\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;\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\nimport urlBuilder from '../Ajax/defaults/urlGenerator.js';\r\n\r\nexport default class Edit{\r\n\tconstructor(editor, cell, onRendered, success, cancel, editorParams){\r\n\t\tthis.edit = editor;\r\n\t\tthis.table = editor.table;\r\n\t\tthis.cell = cell;\r\n\t\tthis.params = this._initializeParams(editorParams);\r\n\t\t\r\n\t\tthis.data = [];\r\n\t\tthis.displayItems = [];\r\n\t\tthis.currentItems = [];\r\n\t\tthis.focusedItem = null;\r\n\t\t\r\n\t\tthis.input = this._createInputElement();\r\n\t\tthis.listEl = this._createListElement();\r\n\t\t\r\n\t\tthis.initialValues = null; \r\n\t\t\r\n\t\tthis.isFilter = !cell._getSelf;\r\n\t\t\r\n\t\tthis.filterTimeout = null;\r\n\t\tthis.filtered = false;\r\n\t\tthis.typing = false;\r\n\t\t\r\n\t\tthis.values = []; \r\n\t\tthis.popup = null; \r\n\t\t\r\n\t\tthis.listIteration = 0;\r\n\t\t\r\n\t\tthis.lastAction=\"\";\r\n\t\t\r\n\t\tthis.blurable = true;\r\n\t\t\r\n\t\tthis.actions = {\r\n\t\t\tsuccess:success,\r\n\t\t\tcancel:cancel\r\n\t\t};\r\n\t\t\r\n\t\tthis._deprecatedOptionsCheck();\r\n\t\tthis._initializeValue();\r\n\t\t\r\n\t\tonRendered(this._onRendered.bind(this));\r\n\t}\r\n\t\r\n\t_deprecatedOptionsCheck(){\r\n\t\tif(this.params.listItemFormatter){\r\n\t\t\tthis.cell.getTable().deprecationAdvisor.msg(\"The listItemFormatter editor param has been deprecated, please see the latest editor documentation for updated options\");\r\n\t\t}\r\n\t\t\r\n\t\tif(this.params.sortValuesList){\r\n\t\t\tthis.cell.getTable().deprecationAdvisor.msg(\"The sortValuesList editor param has been deprecated, please see the latest editor documentation for updated options\");\r\n\t\t}\r\n\t\t\r\n\t\tif(this.params.searchFunc){\r\n\t\t\tthis.cell.getTable().deprecationAdvisor.msg(\"The searchFunc editor param has been deprecated, please see the latest editor documentation for updated options\");\r\n\t\t}\r\n\t\t\r\n\t\tif(this.params.searchingPlaceholder){\r\n\t\t\tthis.cell.getTable().deprecationAdvisor.msg(\"The searchingPlaceholder editor param has been deprecated, please see the latest editor documentation for updated options\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t_initializeValue(){\r\n\t\tvar initialValue = this.cell.getValue();\r\n\t\t\r\n\t\tif(typeof initialValue === \"undefined\" && typeof this.params.defaultValue !== \"undefined\"){\r\n\t\t\tinitialValue = this.params.defaultValue;\r\n\t\t}\r\n\t\t\r\n\t\tthis.initialValues = this.params.multiselect ? initialValue : [initialValue];\r\n\t\t\r\n\t\tif(this.isFilter){\r\n\t\t\tthis.input.value = this.initialValues ? this.initialValues.join(\",\") : \"\";\r\n\t\t\tthis.headerFilterInitialListGen(); \r\n\t\t}\r\n\t}\r\n\t\r\n\t_onRendered(){\r\n\t\tvar cellEl = this.cell.getElement();\r\n\t\t\r\n\t\tfunction clickStop(e){\r\n\t\t\te.stopPropagation();\r\n\t\t}\r\n\t\t\r\n\t\tthis.input.style.height = \"100%\";\r\n\t\tthis.input.focus({preventScroll: true});\r\n\t\t\r\n\t\t\r\n\t\tcellEl.addEventListener(\"click\", clickStop);\r\n\t\t\r\n\t\tsetTimeout(() => {\r\n\t\t\tcellEl.removeEventListener(\"click\", clickStop);\r\n\t\t}, 1000);\r\n\t\t\r\n\t\tthis.input.addEventListener(\"mousedown\", this._preventPopupBlur.bind(this));\r\n\t}\r\n\t\r\n\t_createListElement(){\r\n\t\tvar listEl = document.createElement(\"div\");\r\n\t\tlistEl.classList.add(\"tabulator-edit-list\");\r\n\t\t\r\n\t\tlistEl.addEventListener(\"mousedown\", this._preventBlur.bind(this));\r\n\t\tlistEl.addEventListener(\"keydown\", this._inputKeyDown.bind(this));\r\n\t\t\r\n\t\treturn listEl;\r\n\t}\r\n\t\r\n\t_setListWidth(){\r\n\t\tvar element = this.isFilter ? this.input : this.cell.getElement();\r\n\t\t\r\n\t\tthis.listEl.style.minWidth = element.offsetWidth + \"px\";\r\n\t\t\r\n\t\tif(this.params.maxWidth){\r\n\t\t\tif(this.params.maxWidth === true){\r\n\t\t\t\tthis.listEl.style.maxWidth = element.offsetWidth + \"px\";\r\n\t\t\t}else if(typeof this.params.maxWidth === \"number\"){\r\n\t\t\t\tthis.listEl.style.maxWidth = this.params.maxWidth + \"px\";\r\n\t\t\t}else{\r\n\t\t\t\tthis.listEl.style.maxWidth = this.params.maxWidth;\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t}\r\n\t\r\n\t_createInputElement(){\r\n\t\tvar attribs = this.params.elementAttributes;\r\n\t\tvar input = document.createElement(\"input\");\r\n\t\t\r\n\t\tinput.setAttribute(\"type\", this.params.clearable ? \"search\" : \"text\");\r\n\t\t\r\n\t\tinput.style.padding = \"4px\";\r\n\t\tinput.style.width = \"100%\";\r\n\t\tinput.style.boxSizing = \"border-box\";\r\n\t\t\r\n\t\tif(!this.params.autocomplete){\r\n\t\t\tinput.style.cursor = \"default\";\r\n\t\t\tinput.style.caretColor = \"transparent\";\r\n\t\t\t// input.readOnly = (this.edit.currentCell != false);\r\n\t\t}\r\n\t\t\r\n\t\tif(attribs && typeof attribs == \"object\"){\r\n\t\t\tfor (let key in attribs){\r\n\t\t\t\tif(key.charAt(0) == \"+\"){\r\n\t\t\t\t\tkey = key.slice(1);\r\n\t\t\t\t\tinput.setAttribute(key, input.getAttribute(key) + attribs[\"+\" + key]);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tinput.setAttribute(key, attribs[key]);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\tif(this.params.mask){\r\n\t\t\tmaskInput(input, this.params);\r\n\t\t}\r\n\t\t\r\n\t\tthis._bindInputEvents(input);\r\n\t\t\r\n\t\treturn input;\r\n\t}\r\n\t\r\n\t_initializeParams(params){\r\n\t\tvar valueKeys = [\"values\", \"valuesURL\", \"valuesLookup\"],\r\n\t\tvalueCheck;\r\n\t\t\r\n\t\tparams = Object.assign({}, params);\r\n\t\t\r\n\t\tparams.verticalNavigation = params.verticalNavigation || \"editor\";\r\n\t\tparams.placeholderLoading = typeof params.placeholderLoading === \"undefined\" ? \"Searching ...\" : params.placeholderLoading;\r\n\t\tparams.placeholderEmpty = typeof params.placeholderEmpty === \"undefined\" ? \"No Results Found\" : params.placeholderEmpty;\r\n\t\tparams.filterDelay = typeof params.filterDelay === \"undefined\" ? 300 : params.filterDelay;\r\n\t\t\r\n\t\tparams.emptyValue = Object.keys(params).includes(\"emptyValue\") ? params.emptyValue : \"\";\r\n\t\t\r\n\t\tvalueCheck = Object.keys(params).filter(key => valueKeys.includes(key)).length;\r\n\t\t\r\n\t\tif(!valueCheck){\r\n\t\t\tconsole.warn(\"list editor config error - either the values, valuesURL, or valuesLookup option must be set\");\r\n\t\t}else if(valueCheck > 1){\r\n\t\t\tconsole.warn(\"list editor config error - only one of the values, valuesURL, or valuesLookup options can be set on the same editor\");\r\n\t\t}\r\n\t\t\r\n\t\tif(params.autocomplete){\r\n\t\t\tif(params.multiselect){\r\n\t\t\t\tparams.multiselect = false;\r\n\t\t\t\tconsole.warn(\"list editor config error - multiselect option is not available when autocomplete is enabled\");\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tif(params.freetext){\r\n\t\t\t\tparams.freetext = false;\r\n\t\t\t\tconsole.warn(\"list editor config error - freetext option is only available when autocomplete is enabled\");\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif(params.filterFunc){\r\n\t\t\t\tparams.filterFunc = false;\r\n\t\t\t\tconsole.warn(\"list editor config error - filterFunc option is only available when autocomplete is enabled\");\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif(params.filterRemote){\r\n\t\t\t\tparams.filterRemote = false;\r\n\t\t\t\tconsole.warn(\"list editor config error - filterRemote option is only available when autocomplete is enabled\");\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif(params.mask){\r\n\t\t\t\tparams.mask = false;\r\n\t\t\t\tconsole.warn(\"list editor config error - mask option is only available when autocomplete is enabled\");\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif(params.allowEmpty){\r\n\t\t\t\tparams.allowEmpty = false;\r\n\t\t\t\tconsole.warn(\"list editor config error - allowEmpty option is only available when autocomplete is enabled\");\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif(params.listOnEmpty){\r\n\t\t\t\tparams.listOnEmpty = false;\r\n\t\t\t\tconsole.warn(\"list editor config error - listOnEmpty option is only available when autocomplete is enabled\");\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\tif(params.filterRemote && !(typeof params.valuesLookup === \"function\" || params.valuesURL)){\r\n\t\t\tparams.filterRemote = false;\r\n\t\t\tconsole.warn(\"list editor config error - filterRemote option should only be used when values list is populated from a remote source\");\r\n\t\t}\r\n\t\treturn params;\r\n\t}\r\n\t//////////////////////////////////////\r\n\t////////// Event Handling ////////////\r\n\t//////////////////////////////////////\r\n\t\r\n\t_bindInputEvents(input){\r\n\t\tinput.addEventListener(\"focus\", this._inputFocus.bind(this));\r\n\t\tinput.addEventListener(\"click\", this._inputClick.bind(this));\r\n\t\tinput.addEventListener(\"blur\", this._inputBlur.bind(this));\r\n\t\tinput.addEventListener(\"keydown\", this._inputKeyDown.bind(this));\r\n\t\tinput.addEventListener(\"search\", this._inputSearch.bind(this));\r\n\t\t\r\n\t\tif(this.params.autocomplete){\r\n\t\t\tinput.addEventListener(\"keyup\", this._inputKeyUp.bind(this));\r\n\t\t}\r\n\t}\r\n\t\r\n\t\r\n\t_inputFocus(e){\r\n\t\tthis.rebuildOptionsList();\r\n\t}\r\n\t\r\n\t_filter(){\r\n\t\tif(this.params.filterRemote){\r\n\t\t\tclearTimeout(this.filterTimeout);\r\n\t\t\t\r\n\t\t\tthis.filterTimeout = setTimeout(() => {\r\n\t\t\t\tthis.rebuildOptionsList();\r\n\t\t\t}, this.params.filterDelay);\r\n\t\t}else{\r\n\t\t\tthis._filterList();\r\n\t\t}\r\n\t}\r\n\t\r\n\t_inputClick(e){\r\n\t\te.stopPropagation();\r\n\t}\r\n\t\r\n\t_inputBlur(e){\r\n\t\tif(this.blurable){\r\n\t\t\tif(this.popup){\r\n\t\t\t\tthis.popup.hide();\r\n\t\t\t}else{\r\n\t\t\t\tthis._resolveValue(true);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\t_inputSearch(){\r\n\t\tthis._clearChoices();\r\n\t}\r\n\t\r\n\t_inputKeyDown(e){\r\n\t\tswitch(e.keyCode){\r\n\t\t\t\r\n\t\t\tcase 38: //up arrow\r\n\t\t\t\tthis._keyUp(e);\r\n\t\t\t\tbreak;\r\n\t\t\t\r\n\t\t\tcase 40: //down arrow\r\n\t\t\t\tthis._keyDown(e);\r\n\t\t\t\tbreak;\r\n\t\t\t\r\n\t\t\tcase 37: //left arrow\r\n\t\t\tcase 39: //right arrow\r\n\t\t\t\tthis._keySide(e);\r\n\t\t\t\tbreak;\r\n\t\t\t\r\n\t\t\tcase 13: //enter\r\n\t\t\t\tthis._keyEnter();\r\n\t\t\t\tbreak;\r\n\t\t\t\r\n\t\t\tcase 27: //escape\r\n\t\t\t\tthis._keyEsc();\r\n\t\t\t\tbreak;\r\n\t\t\t\r\n\t\t\tcase 36: //home\r\n\t\t\tcase 35: //end\r\n\t\t\t\tthis._keyHomeEnd(e);\r\n\t\t\t\tbreak;\r\n\t\t\t\r\n\t\t\tcase 9: //tab\r\n\t\t\t\tbreak;\r\n\t\t\t\r\n\t\t\tdefault:\r\n\t\t\t\tthis._keySelectLetter(e);\r\n\t\t}\r\n\t}\r\n\t\r\n\t_inputKeyUp(e){\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\t\tbreak;\r\n\t\t\t\r\n\t\t\tdefault:\r\n\t\t\t\tthis._keyAutoCompLetter(e);\r\n\t\t}\r\n\t}\r\n\t\r\n\t_preventPopupBlur(){\r\n\t\tif(this.popup){\r\n\t\t\tthis.popup.blockHide();\r\n\t\t}\r\n\t\t\r\n\t\tsetTimeout(() =>{\r\n\t\t\tif(this.popup){\r\n\t\t\t\tthis.popup.restoreHide();\r\n\t\t\t}\r\n\t\t}, 10);\r\n\t}\r\n\t\r\n\t_preventBlur(){\r\n\t\tthis.blurable = false;\r\n\t\t\r\n\t\tsetTimeout(() =>{\r\n\t\t\tthis.blurable = true;\r\n\t\t}, 10);\r\n\t}\r\n\t\r\n\t//////////////////////////////////////\r\n\t//////// Keyboard Navigation /////////\r\n\t//////////////////////////////////////\r\n\t\r\n\t_keyUp(e){\r\n\t\tvar index = this.displayItems.indexOf(this.focusedItem);\r\n\t\t\r\n\t\tif(this.params.verticalNavigation == \"editor\" || (this.params.verticalNavigation == \"hybrid\" && index)){\r\n\t\t\te.stopImmediatePropagation();\r\n\t\t\te.stopPropagation();\r\n\t\t\te.preventDefault();\r\n\t\t\t\r\n\t\t\tif(index > 0){\r\n\t\t\t\tthis._focusItem(this.displayItems[index - 1]);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\t_keyDown(e){\r\n\t\tvar index = this.displayItems.indexOf(this.focusedItem);\r\n\t\t\r\n\t\tif(this.params.verticalNavigation == \"editor\" || (this.params.verticalNavigation == \"hybrid\" && index < this.displayItems.length - 1)){\r\n\t\t\te.stopImmediatePropagation();\r\n\t\t\te.stopPropagation();\r\n\t\t\te.preventDefault();\r\n\t\t\t\r\n\t\t\tif(index < this.displayItems.length - 1){\r\n\t\t\t\tif(index == -1){\r\n\t\t\t\t\tthis._focusItem(this.displayItems[0]);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tthis._focusItem(this.displayItems[index + 1]);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\t_keySide(e){\r\n\t\te.stopImmediatePropagation();\r\n\t\te.stopPropagation();\r\n\t\te.preventDefault();\r\n\t}\r\n\t\r\n\t_keyEnter(e){\r\n\t\tif(this.params.autocomplete && this.lastAction === \"typing\"){\r\n\t\t\tthis._resolveValue(true);\r\n\t\t}else{\r\n\t\t\tif(this.focusedItem){\r\n\t\t\t\tthis._chooseItem(this.focusedItem);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\t_keyEsc(e){\r\n\t\tthis._cancel();\r\n\t}\r\n\t\r\n\t_keyHomeEnd(e){\r\n\t\tif(this.params.autocomplete){\r\n\t\t\t//prevent table navigation while using input element\r\n\t\t\te.stopImmediatePropagation();\r\n\t\t}\r\n\t}\r\n\t\r\n\t_keySelectLetter(e){\r\n\t\tif(!this.params.autocomplete){\r\n\t\t\t// if(this.edit.currentCell === false){\r\n\t\t\te.preventDefault();\r\n\t\t\t// }\r\n\t\t\t\r\n\t\t\tif(e.keyCode >= 38 && e.keyCode <= 90){\r\n\t\t\t\tthis._scrollToValue(e.keyCode);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\t_keyAutoCompLetter(e){\r\n\t\tthis._filter();\r\n\t\tthis.lastAction = \"typing\";\r\n\t\tthis.typing = true;\r\n\t}\r\n\t\r\n\t\r\n\t_scrollToValue(char){\r\n\t\tclearTimeout(this.filterTimeout);\r\n\t\t\r\n\t\tvar character = String.fromCharCode(char).toLowerCase();\r\n\t\tthis.filterTerm += character.toLowerCase();\r\n\t\t\r\n\t\tvar match = this.displayItems.find((item) => {\r\n\t\t\treturn typeof item.label !== \"undefined\" && item.label.toLowerCase().startsWith(this.filterTerm);\r\n\t\t});\r\n\t\t\r\n\t\tif(match){\r\n\t\t\tthis._focusItem(match);\r\n\t\t}\r\n\t\t\r\n\t\tthis.filterTimeout = setTimeout(() => {\r\n\t\t\tthis.filterTerm = \"\";\r\n\t\t}, 800);\r\n\t}\r\n\t\r\n\t_focusItem(item){\r\n\t\tthis.lastAction = \"focus\";\r\n\t\t\r\n\t\tif(this.focusedItem && this.focusedItem.element){\r\n\t\t\tthis.focusedItem.element.classList.remove(\"focused\");\r\n\t\t}\r\n\t\t\r\n\t\tthis.focusedItem = item;\r\n\t\t\r\n\t\tif(item && item.element){\r\n\t\t\titem.element.classList.add(\"focused\");\r\n\t\t\titem.element.scrollIntoView({behavior: 'smooth', block: 'nearest', inline: 'start'});\r\n\t\t}\r\n\t}\r\n\t\r\n\t\r\n\t//////////////////////////////////////\r\n\t/////// Data List Generation /////////\r\n\t//////////////////////////////////////\r\n\theaderFilterInitialListGen(){\r\n\t\tthis._generateOptions(true);\r\n\t}\r\n\t\r\n\trebuildOptionsList(){\r\n\t\tthis._generateOptions()\r\n\t\t\t.then(this._sortOptions.bind(this))\r\n\t\t\t.then(this._buildList.bind(this))\r\n\t\t\t.then(this._showList.bind(this))\r\n\t\t\t.catch((e) => {\r\n\t\t\t\tif(!Number.isInteger(e)){\r\n\t\t\t\t\tconsole.error(\"List generation error\", e);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t}\r\n\t\r\n\t_filterList(){\r\n\t\tthis._buildList(this._filterOptions());\r\n\t\tthis._showList();\r\n\t}\r\n\t\r\n\t_generateOptions(silent){\r\n\t\tvar values = [];\r\n\t\tvar iteration = ++ this.listIteration;\r\n\t\t\r\n\t\tthis.filtered = false;\r\n\t\t\r\n\t\tif(this.params.values){\r\n\t\t\tvalues = this.params.values;\r\n\t\t}else if (this.params.valuesURL){\r\n\t\t\tvalues = this._ajaxRequest(this.params.valuesURL, this.input.value);\r\n\t\t}else{\r\n\t\t\tif(typeof this.params.valuesLookup === \"function\"){\r\n\t\t\t\tvalues = this.params.valuesLookup(this.cell, this.input.value);\r\n\t\t\t}else if(this.params.valuesLookup){\r\n\t\t\t\tvalues = this._uniqueColumnValues(this.params.valuesLookupField);\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\tif(values instanceof Promise){\r\n\t\t\tif(!silent){\r\n\t\t\t\tthis._addPlaceholder(this.params.placeholderLoading);\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn values.then()\r\n\t\t\t\t.then((responseValues) => {\r\n\t\t\t\t\tif(this.listIteration === iteration){\r\n\t\t\t\t\t\treturn this._parseList(responseValues);\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\treturn Promise.reject(iteration);\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t}else{\r\n\t\t\treturn Promise.resolve(this._parseList(values));\r\n\t\t}\r\n\t}\r\n\t\r\n\t_addPlaceholder(contents){\r\n\t\tvar placeholder = document.createElement(\"div\");\r\n\t\t\r\n\t\tif(typeof contents === \"function\"){\r\n\t\t\tcontents = contents(this.cell.getComponent(), this.listEl);\r\n\t\t}\r\n\t\t\r\n\t\tif(contents){\r\n\t\t\tthis._clearList();\r\n\t\t\t\r\n\t\t\tif(contents instanceof HTMLElement){\r\n\t\t\t\tplaceholder = contents;\r\n\t\t\t}else{\r\n\t\t\t\tplaceholder.classList.add(\"tabulator-edit-list-placeholder\");\r\n\t\t\t\tplaceholder.innerHTML = contents;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tthis.listEl.appendChild(placeholder);\r\n\t\t\t\r\n\t\t\tthis._showList();\r\n\t\t}\r\n\t}\r\n\t\r\n\t_ajaxRequest(url, term){\r\n\t\tvar params = this.params.filterRemote ? {term:term} : {};\r\n\t\turl = urlBuilder(url, {}, params);\r\n\t\t\r\n\t\treturn fetch(url)\r\n\t\t\t.then((response)=>{\r\n\t\t\t\tif(response.ok) {\r\n\t\t\t\t\treturn response.json()\r\n\t\t\t\t\t\t.catch((error)=>{\r\n\t\t\t\t\t\t\tconsole.warn(\"List Ajax Load Error - Invalid JSON returned\", error);\r\n\t\t\t\t\t\t\treturn Promise.reject(error);\r\n\t\t\t\t\t\t});\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.error(\"List Ajax Load Error - Connection Error: \" + response.status, response.statusText);\r\n\t\t\t\t\treturn Promise.reject(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(\"List Ajax Load Error - Connection Error: \", error);\r\n\t\t\t\treturn Promise.reject(error);\r\n\t\t\t});\r\n\t}\r\n\t\r\n\t_uniqueColumnValues(field){\r\n\t\tvar output = {},\r\n\t\tdata = this.table.getData(this.params.valuesLookup),\r\n\t\tcolumn;\r\n\t\t\r\n\t\tif(field){\r\n\t\t\tcolumn = this.table.columnManager.getColumnByField(field);\r\n\t\t}else{\r\n\t\t\tcolumn = this.cell.getColumn()._getSelf();\r\n\t\t}\r\n\t\t\r\n\t\tif(column){\r\n\t\t\tdata.forEach((row) => {\r\n\t\t\t\tvar val = column.getFieldValue(row);\r\n\t\t\t\t\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\toutput = [];\r\n\t\t}\r\n\t\t\r\n\t\treturn Object.keys(output);\r\n\t}\r\n\t\r\n\t\r\n\t_parseList(inputValues){\r\n\t\tvar data = [];\r\n\t\t\r\n\t\tif(!Array.isArray(inputValues)){\r\n\t\t\tinputValues = Object.entries(inputValues).map(([key, value]) => {\r\n\t\t\t\treturn {\r\n\t\t\t\t\tlabel:value,\r\n\t\t\t\t\tvalue:key,\r\n\t\t\t\t};\r\n\t\t\t});\r\n\t\t}\r\n\t\t\r\n\t\tinputValues.forEach((value) => {\r\n\t\t\tif(typeof value !== \"object\"){\r\n\t\t\t\tvalue = {\r\n\t\t\t\t\tlabel:value,\r\n\t\t\t\t\tvalue:value,\r\n\t\t\t\t};\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tthis._parseListItem(value, data, 0);\r\n\t\t});\r\n\t\t\r\n\t\tif(!this.currentItems.length && this.params.freetext){\r\n\t\t\tthis.input.value = this.initialValues;\r\n\t\t\tthis.typing = true;\r\n\t\t\tthis.lastAction = \"typing\";\r\n\t\t}\r\n\t\t\r\n\t\tthis.data = data;\r\n\t\t\r\n\t\treturn data; \r\n\t}\r\n\t\r\n\t_parseListItem(option, data, level){\r\n\t\tvar item = {};\r\n\t\t\r\n\t\tif(option.options){\r\n\t\t\titem = this._parseListGroup(option, level + 1);\r\n\t\t}else{\r\n\t\t\titem = {\r\n\t\t\t\tlabel:option.label,\r\n\t\t\t\tvalue:option.value,\r\n\t\t\t\titemParams:option.itemParams,\r\n\t\t\t\telementAttributes: option.elementAttributes,\r\n\t\t\t\telement:false,\r\n\t\t\t\tselected:false,\r\n\t\t\t\tvisible:true,\r\n\t\t\t\tlevel:level,\r\n\t\t\t\toriginal:option,\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tif(this.initialValues && this.initialValues.indexOf(option.value) > -1){\r\n\t\t\t\tthis._chooseItem(item, true);\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\tdata.push(item);\r\n\t}\r\n\t\r\n\t_parseListGroup(option, level){\r\n\t\tvar item = {\r\n\t\t\tlabel:option.label,\r\n\t\t\tgroup:true,\r\n\t\t\titemParams:option.itemParams,\r\n\t\t\telementAttributes:option.elementAttributes,\r\n\t\t\telement:false,\r\n\t\t\tvisible:true,\r\n\t\t\tlevel:level,\r\n\t\t\toptions:[],\r\n\t\t\toriginal:option,\r\n\t\t};\r\n\t\t\r\n\t\toption.options.forEach((child) => {\r\n\t\t\tthis._parseListItem(child, item.options, level);\r\n\t\t});\r\n\t\t\r\n\t\treturn item;\r\n\t}\r\n\t\r\n\t_sortOptions(options){\r\n\t\tvar sorter;\r\n\t\t\r\n\t\tif(this.params.sort){\r\n\t\t\tsorter = typeof this.params.sort === \"function\" ? this.params.sort : this._defaultSortFunction.bind(this);\r\n\t\t\t\r\n\t\t\tthis._sortGroup(sorter, options);\r\n\t\t}\r\n\t\t\r\n\t\treturn options;\r\n\t}\r\n\t\r\n\t_sortGroup(sorter, options){\r\n\t\toptions.sort((a,b) => {\r\n\t\t\treturn sorter(a.label, b.label, a.value, b.value, a.original, b.original);\r\n\t\t});\r\n\t\t\r\n\t\toptions.forEach((option) => {\r\n\t\t\tif(option.group){\r\n\t\t\t\tthis._sortGroup(sorter, option.options);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\t\r\n\t_defaultSortFunction(as, bs){\r\n\t\tvar a, b, a1, b1, i= 0, L, rx = /(\\d+)|(\\D+)/g, rd = /\\d/;\r\n\t\tvar emptyAlign = 0;\r\n\t\t\r\n\t\tif(this.params.sort === \"desc\"){\r\n\t\t\t[as, bs] = [bs, as];\r\n\t\t}\r\n\t\t\r\n\t\t//handle empty values\r\n\t\tif(!as && as!== 0){\r\n\t\t\temptyAlign = !bs && bs!== 0 ? 0 : -1;\r\n\t\t}else if(!bs && bs!== 0){\r\n\t\t\temptyAlign = 1;\r\n\t\t}else{\r\n\t\t\tif(isFinite(as) && isFinite(bs)) return as - bs;\r\n\t\t\ta = String(as).toLowerCase();\r\n\t\t\tb = String(bs).toLowerCase();\r\n\t\t\tif(a === b) return 0;\r\n\t\t\tif(!(rd.test(a) && rd.test(b))) return a > b ? 1 : -1;\r\n\t\t\ta = a.match(rx);\r\n\t\t\tb = b.match(rx);\r\n\t\t\tL = a.length > b.length ? b.length : a.length;\r\n\t\t\twhile(i < L){\r\n\t\t\t\ta1= a[i];\r\n\t\t\t\tb1= b[i++];\r\n\t\t\t\tif(a1 !== b1){\r\n\t\t\t\t\tif(isFinite(a1) && isFinite(b1)){\r\n\t\t\t\t\t\tif(a1.charAt(0) === \"0\") a1 = \".\" + a1;\r\n\t\t\t\t\t\tif(b1.charAt(0) === \"0\") b1 = \".\" + b1;\r\n\t\t\t\t\t\treturn a1 - b1;\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse return a1 > b1 ? 1 : -1;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn a.length > b.length;\r\n\t\t}\r\n\t\t\r\n\t\treturn emptyAlign;\r\n\t}\r\n\t\r\n\t_filterOptions(){\r\n\t\tvar filterFunc = this.params.filterFunc || this._defaultFilterFunc,\r\n\t\tterm = this.input.value;\r\n\t\t\r\n\t\tif(term){\r\n\t\t\tthis.filtered = true;\r\n\t\t\t\r\n\t\t\tthis.data.forEach((item) => {\r\n\t\t\t\tthis._filterItem(filterFunc, term, item);\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tthis.filtered = false;\r\n\t\t}\r\n\t\t\r\n\t\treturn this.data;\r\n\t}\r\n\t\r\n\t_filterItem(func, term, item){\r\n\t\tvar matches = false;\r\n\t\t\r\n\t\tif(!item.group){\r\n\t\t\titem.visible = func(term, item.label, item.value, item.original);\r\n\t\t}else{\r\n\t\t\titem.options.forEach((option) => {\r\n\t\t\t\tif(this._filterItem(func, term, option)){\r\n\t\t\t\t\tmatches = true;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\t\r\n\t\t\titem.visible = matches;\r\n\t\t}\r\n\t\t\r\n\t\treturn item.visible;\r\n\t}\r\n\t\r\n\t_defaultFilterFunc(term, label, value, item){\r\n\t\tterm = String(term).toLowerCase();\r\n\t\t\r\n\t\tif(label !== null && typeof label !== \"undefined\"){\r\n\t\t\tif(String(label).toLowerCase().indexOf(term) > -1 || String(value).toLowerCase().indexOf(term) > -1){\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\treturn false;\r\n\t}\r\n\t\r\n\t//////////////////////////////////////\r\n\t/////////// Display List /////////////\r\n\t//////////////////////////////////////\r\n\t\r\n\t_clearList(){\r\n\t\twhile(this.listEl.firstChild) this.listEl.removeChild(this.listEl.firstChild);\r\n\t\t\r\n\t\tthis.displayItems = [];\r\n\t}\r\n\t\r\n\t_buildList(data){\r\n\t\tthis._clearList();\r\n\t\t\r\n\t\tdata.forEach((option) => {\r\n\t\t\tthis._buildItem(option);\r\n\t\t});\r\n\t\t\r\n\t\tif(!this.displayItems.length){\r\n\t\t\tthis._addPlaceholder(this.params.placeholderEmpty);\r\n\t\t} \r\n\t}\r\n\t\r\n\t_buildItem(item){\r\n\t\tvar el = item.element,\r\n\t\tcontents;\r\n\t\t\r\n\t\tif(!this.filtered || item.visible){\r\n\t\t\t\r\n\t\t\tif(!el){\r\n\t\t\t\tel = document.createElement(\"div\");\r\n\t\t\t\tel.tabIndex = 0;\r\n\t\t\t\t\r\n\t\t\t\tcontents = this.params.itemFormatter ? this.params.itemFormatter(item.label, item.value, item.original, el) : item.label;\r\n\t\t\t\t\r\n\t\t\t\tif(contents instanceof HTMLElement){\r\n\t\t\t\t\tel.appendChild(contents);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tel.innerHTML = contents;\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\tif(item.group){\r\n\t\t\t\t\tel.classList.add(\"tabulator-edit-list-group\");\r\n\t\t\t\t}else{\r\n\t\t\t\t\tel.classList.add(\"tabulator-edit-list-item\");\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\tel.classList.add(\"tabulator-edit-list-group-level-\" + item.level);\r\n\t\t\t\t\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, this.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\t\r\n\t\t\t\tif(item.group){\r\n\t\t\t\t\tel.addEventListener(\"click\", this._groupClick.bind(this, item));\r\n\t\t\t\t}else{\r\n\t\t\t\t\tel.addEventListener(\"click\", this._itemClick.bind(this, item));\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\tel.addEventListener(\"mousedown\", this._preventBlur.bind(this));\r\n\t\t\t\t\r\n\t\t\t\titem.element = el;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tthis._styleItem(item);\r\n\t\t\t\r\n\t\t\tthis.listEl.appendChild(el);\r\n\t\t\t\r\n\t\t\tif(item.group){\r\n\t\t\t\titem.options.forEach((option) => {\r\n\t\t\t\t\tthis._buildItem(option);\r\n\t\t\t\t});\r\n\t\t\t}else{\r\n\t\t\t\tthis.displayItems.push(item);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\t_showList(){\r\n\t\tvar startVis = this.popup && this.popup.isVisible();\r\n\t\t\r\n\t\tif(this.input.parentNode){\r\n\t\t\tif(this.params.autocomplete && this.input.value === \"\" && !this.params.listOnEmpty){\r\n\t\t\t\tif(this.popup){\r\n\t\t\t\t\tthis.popup.hide(true);\r\n\t\t\t\t}\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tthis._setListWidth();\r\n\t\t\t\r\n\t\t\tif(!this.popup){\r\n\t\t\t\tthis.popup = this.edit.popup(this.listEl);\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tthis.popup.show(this.cell.getElement(), \"bottom\");\r\n\t\t\t\r\n\t\t\tif(!startVis){\r\n\t\t\t\tsetTimeout(() => {\r\n\t\t\t\t\tthis.popup.hideOnBlur(this._resolveValue.bind(this, true));\r\n\t\t\t\t}, 10);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\t_styleItem(item){\r\n\t\tif(item && item.element){\r\n\t\t\tif(item.selected){\r\n\t\t\t\titem.element.classList.add(\"active\");\r\n\t\t\t}else{\r\n\t\t\t\titem.element.classList.remove(\"active\");\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\t//////////////////////////////////////\r\n\t///////// User Interaction ///////////\r\n\t//////////////////////////////////////\r\n\t\r\n\t_itemClick(item, e){\r\n\t\te.stopPropagation();\r\n\t\t\r\n\t\tthis._chooseItem(item);\r\n\t}\r\n\t\r\n\t_groupClick(item, e){\r\n\t\te.stopPropagation();\r\n\t}\r\n\t\r\n\t\r\n\t//////////////////////////////////////\r\n\t////// Current Item Management ///////\r\n\t//////////////////////////////////////\r\n\t\r\n\t_cancel(){\r\n\t\tthis.popup.hide(true);\r\n\t\tthis.actions.cancel();\r\n\t}\r\n\t\r\n\t_clearChoices(){\r\n\t\tthis.typing = true;\r\n\t\t\r\n\t\tthis.currentItems.forEach((item) => {\r\n\t\t\titem.selected = false;\r\n\t\t\tthis._styleItem(item);\r\n\t\t});\r\n\t\t\r\n\t\tthis.currentItems = [];\r\n\t\t\r\n\t\tthis.focusedItem = null;\r\n\t}\r\n\t\r\n\t_chooseItem(item, silent){\r\n\t\tvar index;\r\n\t\t\r\n\t\tthis.typing = false;\r\n\t\t\r\n\t\tif(this.params.multiselect){\r\n\t\t\tindex = this.currentItems.indexOf(item);\r\n\t\t\t\r\n\t\t\tif(index > -1){\r\n\t\t\t\tthis.currentItems.splice(index, 1);\r\n\t\t\t\titem.selected = false;\r\n\t\t\t}else{\r\n\t\t\t\tthis.currentItems.push(item);\r\n\t\t\t\titem.selected = true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tthis.input.value = this.currentItems.map(item => item.label).join(\",\");\r\n\t\t\t\r\n\t\t\tthis._styleItem(item);\r\n\t\t\t\r\n\t\t}else{\r\n\t\t\tthis.currentItems = [item];\r\n\t\t\titem.selected = true;\r\n\t\t\t\r\n\t\t\tthis.input.value = item.label;\r\n\t\t\t\r\n\t\t\tthis._styleItem(item);\r\n\t\t\t\r\n\t\t\tif(!silent){\r\n\t\t\t\tthis._resolveValue();\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\tthis._focusItem(item);\r\n\t}\r\n\t\r\n\t_resolveValue(blur){\r\n\t\tvar output, initialValue;\r\n\r\n\t\tif(this.popup){\r\n\t\t\tthis.popup.hide(true);\r\n\t\t}\r\n\t\t\r\n\t\tif(this.params.multiselect){\r\n\t\t\toutput = this.currentItems.map(item => item.value);\r\n\t\t}else{\r\n\t\t\tif(blur && this.params.autocomplete && this.typing){\r\n\t\t\t\tif(this.params.freetext || (this.params.allowEmpty && this.input.value === \"\")){\r\n\t\t\t\t\toutput = this.input.value;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tthis.actions.cancel();\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tif(this.currentItems[0]){\r\n\t\t\t\t\toutput = this.currentItems[0].value;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tinitialValue = this.initialValues[0];\r\n\t\t\t\t\t\r\n\t\t\t\t\tif(initialValue === null || typeof initialValue === \"undefined\" || initialValue === \"\"){\r\n\t\t\t\t\t\toutput = initialValue;\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\toutput = this.params.emptyValue;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\tif(output === \"\"){\r\n\t\t\toutput = this.params.emptyValue;\r\n\t\t}\r\n\t\t\r\n\t\tthis.actions.success(output);\r\n\t\t\r\n\t\tif(this.isFilter){\r\n\t\t\tthis.initialValues = output && !Array.isArray(output) ? [output] : output;\r\n\t\t\tthis.currentItems = [];\r\n\t\t}\r\n\t}\r\n\t\r\n}\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 date from './editors/date.js';\r\nimport time from './editors/time.js';\r\nimport datetime from './editors/datetime.js';\r\nimport select from './editors/select.js';\r\nimport list from './editors/list.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\tnumber:number,\r\n\trange:range,\r\n\tdate:date,\r\n\ttime:time,\r\n\tdatetime:datetime,\r\n\tselect:select,\r\n\tlist:list,\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\r\n\t\tif(editorParams.selectContents){\r\n\t\t\tinput.select();\r\n\t\t}\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\t\tonChange(e);\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase 27:\r\n\t\t\t\tcancel();\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase 35:\r\n\t\t\tcase 36:\r\n\t\t\t\te.stopPropagation();\r\n\t\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\tvar cellValue = cell.getValue(),\r\n\tvertNav = editorParams.verticalNavigation || \"hybrid\",\r\n\tvalue = String(cellValue !== null && typeof cellValue !== \"undefined\" ? cellValue : \"\"),\r\n\tinput = document.createElement(\"textarea\"),\r\n\tscrollHeight = 0;\r\n\r\n\t//create and style input\r\n\tinput.style.display = \"block\";\r\n\tinput.style.padding = \"2px\";\r\n\tinput.style.height = \"100%\";\r\n\tinput.style.width = \"100%\";\r\n\tinput.style.boxSizing = \"border-box\";\r\n\tinput.style.whiteSpace = \"pre-wrap\";\r\n\tinput.style.resize = \"none\";\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\tonRendered(function(){\r\n\t\tinput.focus({preventScroll: true});\r\n\t\tinput.style.height = \"100%\";\r\n\r\n\t\tinput.scrollHeight;\r\n\t\tinput.style.height = input.scrollHeight + \"px\";\r\n\t\tcell.getRow().normalizeHeight();\r\n\r\n\t\tif(editorParams.selectContents){\r\n\t\t\tinput.select();\r\n\t\t}\r\n\t});\r\n\r\n\tfunction onChange(e){\r\n\r\n\t\tif(((cellValue === null || typeof cellValue === \"undefined\") && input.value !== \"\") || input.value !== cellValue){\r\n\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\r\n\t\t\tsetTimeout(function(){\r\n\t\t\t\tcell.getRow().normalizeHeight();\r\n\t\t\t},300);\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\tinput.addEventListener(\"keyup\", function(){\r\n\r\n\t\tinput.style.height = \"\";\r\n\r\n\t\tvar heightNow = input.scrollHeight;\r\n\r\n\t\tinput.style.height = heightNow + \"px\";\r\n\r\n\t\tif(heightNow != scrollHeight){\r\n\t\t\tscrollHeight = heightNow;\r\n\t\t\tcell.getRow().normalizeHeight();\r\n\t\t}\r\n\t});\r\n\r\n\tinput.addEventListener(\"keydown\", function(e){\r\n\r\n\t\tswitch(e.keyCode){\r\n\r\n\t\t\tcase 13:\r\n\t\t\t\tif(e.shiftKey && editorParams.shiftEnterSubmit){\r\n\t\t\t\t\tonChange(e);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase 27:\r\n\t\t\t\tcancel();\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase 38: //up arrow\r\n\t\t\t\tif(vertNav == \"editor\" || (vertNav == \"hybrid\" && input.selectionStart)){\r\n\t\t\t\t\te.stopImmediatePropagation();\r\n\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t}\r\n\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase 40: //down arrow\r\n\t\t\t\tif(vertNav == \"editor\" || (vertNav == \"hybrid\" && input.selectionStart !== input.value.length)){\r\n\t\t\t\t\te.stopImmediatePropagation();\r\n\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase 35:\r\n\t\t\tcase 36:\r\n\t\t\t\te.stopPropagation();\r\n\t\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//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\r\n\t\tif(editorParams.selectContents){\r\n\t\t\tinput.select();\r\n\t\t}\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\t\tonChange();\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase 27:\r\n\t\t\t\tcancel();\r\n\t\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\t\tif(vertNav == \"editor\"){\r\n\t\t\t\t\te.stopImmediatePropagation();\r\n\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase 35:\r\n\t\t\tcase 36:\r\n\t\t\t\te.stopPropagation();\r\n\t\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\t\tonChange();\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase 27:\r\n\t\t\t\tcancel();\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t});\r\n\r\n\treturn input;\r\n}","//input element\r\nexport default function(cell, onRendered, success, cancel, editorParams){\r\n\tvar inputFormat = editorParams.format,\r\n\tDT = inputFormat ? (window.DateTime || luxon.DateTime) : null;\r\n\t\r\n\t//create and style input\r\n\tvar cellValue = cell.getValue(),\r\n\tinput = document.createElement(\"input\");\r\n\t\r\n\tfunction convertDate(value){\r\n\t\tvar newDatetime;\r\n\t\t\r\n\t\tif(DT.isDateTime(value)){\r\n\t\t\tnewDatetime = value;\r\n\t\t}else if(inputFormat === \"iso\"){\r\n\t\t\tnewDatetime = DT.fromISO(String(value));\r\n\t\t}else{\r\n\t\t\tnewDatetime = DT.fromFormat(String(value), inputFormat);\r\n\t\t}\r\n\t\t\r\n\t\treturn newDatetime.toFormat(\"yyyy-MM-dd\");\r\n\t}\r\n\t\r\n\tinput.type = \"date\";\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.max){\r\n\t\tinput.setAttribute(\"max\", inputFormat ? convertDate(editorParams.max) : editorParams.max);\r\n\t}\r\n\r\n\tif(editorParams.min){\r\n\t\tinput.setAttribute(\"min\", inputFormat ? convertDate(editorParams.min) : editorParams.min);\r\n\t}\r\n\t\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\t\r\n\tcellValue = typeof cellValue !== \"undefined\" ? cellValue : \"\";\r\n\t\r\n\tif(inputFormat){\r\n\t\tif(DT){\t\t\r\n\t\t\tcellValue = convertDate(cellValue);\t\t\t\r\n\t\t}else{\r\n\t\t\tconsole.error(\"Editor Error - 'date' editor 'inputFormat' param is dependant on luxon.js\");\r\n\t\t}\r\n\t}\r\n\t\r\n\tinput.value = cellValue;\r\n\t\r\n\tonRendered(function(){\r\n\t\tinput.focus({preventScroll: true});\r\n\t\tinput.style.height = \"100%\";\r\n\t\t\r\n\t\tif(editorParams.selectContents){\r\n\t\t\tinput.select();\r\n\t\t}\r\n\t});\r\n\t\r\n\tfunction onChange(e){\r\n\t\tvar value = input.value;\r\n\t\t\r\n\t\tif(((cellValue === null || typeof cellValue === \"undefined\") && value !== \"\") || value !== cellValue){\r\n\t\t\t\r\n\t\t\tif(value && inputFormat){\r\n\t\t\t\tvalue = DT.fromFormat(String(value), \"yyyy-MM-dd\").toFormat(inputFormat);\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif(success(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\t\r\n\t//submit new value on blur or change\r\n\tinput.addEventListener(\"change\", onChange);\r\n\tinput.addEventListener(\"blur\", onChange);\r\n\t\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\t\tonChange(e);\r\n\t\t\t\tbreak;\r\n\t\t\t\r\n\t\t\tcase 27:\r\n\t\t\t\tcancel();\r\n\t\t\t\tbreak;\r\n\t\t\t\r\n\t\t\tcase 35:\r\n\t\t\tcase 36:\r\n\t\t\t\te.stopPropagation();\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t});\r\n\t\r\n\treturn input;\r\n}","//input element\r\nexport default function(cell, onRendered, success, cancel, editorParams){\r\n\tvar inputFormat = editorParams.format,\r\n\tDT = inputFormat ? (window.DateTime || luxon.DateTime) : null, \r\n\tnewDatetime;\r\n\r\n\t//create and style input\r\n\tvar cellValue = cell.getValue(),\r\n\tinput = document.createElement(\"input\");\r\n\t\r\n\tinput.type = \"time\";\r\n\tinput.style.padding = \"4px\";\r\n\tinput.style.width = \"100%\";\r\n\tinput.style.boxSizing = \"border-box\";\r\n\t\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\t\r\n\tcellValue = typeof cellValue !== \"undefined\" ? cellValue : \"\";\r\n\t\r\n\tif(inputFormat){\r\n\t\tif(DT){\r\n\t\t\tif(DT.isDateTime(cellValue)){\r\n\t\t\t\tnewDatetime = cellValue;\r\n\t\t\t}else if(inputFormat === \"iso\"){\r\n\t\t\t\tnewDatetime = DT.fromISO(String(cellValue));\r\n\t\t\t}else{\r\n\t\t\t\tnewDatetime = DT.fromFormat(String(cellValue), inputFormat);\r\n\t\t\t}\r\n\r\n\t\t\tcellValue = newDatetime.toFormat(\"hh:mm\");\r\n\r\n\t\t}else{\r\n\t\t\tconsole.error(\"Editor Error - 'date' editor 'inputFormat' param is dependant on luxon.js\");\r\n\t\t}\r\n\t}\r\n\r\n\tinput.value = cellValue;\r\n\t\r\n\tonRendered(function(){\r\n\t\tinput.focus({preventScroll: true});\r\n\t\tinput.style.height = \"100%\";\r\n\t\t\r\n\t\tif(editorParams.selectContents){\r\n\t\t\tinput.select();\r\n\t\t}\r\n\t});\r\n\t\r\n\tfunction onChange(e){\r\n\t\tvar value = input.value;\r\n\r\n\t\tif(((cellValue === null || typeof cellValue === \"undefined\") && value !== \"\") || value !== cellValue){\r\n\r\n\t\t\tif(value && inputFormat){\r\n\t\t\t\tvalue = DT.fromFormat(String(value), \"hh:mm\").toFormat(inputFormat);\r\n\t\t\t}\r\n\r\n\t\t\tif(success(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\t\r\n\t//submit new value on blur or change\r\n\tinput.addEventListener(\"change\", onChange);\r\n\tinput.addEventListener(\"blur\", onChange);\r\n\t\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\t\tonChange(e);\r\n\t\t\t\tbreak;\r\n\t\t\t\r\n\t\t\tcase 27:\r\n\t\t\t\tcancel();\r\n\t\t\t\tbreak;\r\n\t\t\t\r\n\t\t\tcase 35:\r\n\t\t\tcase 36:\r\n\t\t\t\te.stopPropagation();\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t});\r\n\t\r\n\treturn input;\r\n}","//input element\r\nexport default function(cell, onRendered, success, cancel, editorParams){\r\n\tvar inputFormat = editorParams.format,\r\n\tDT = inputFormat ? (window.DateTime || luxon.DateTime) : null, \r\n\tnewDatetime;\r\n\r\n\t//create and style input\r\n\tvar cellValue = cell.getValue(),\r\n\tinput = document.createElement(\"input\");\r\n\t\r\n\tinput.type = \"datetime-local\";\r\n\tinput.style.padding = \"4px\";\r\n\tinput.style.width = \"100%\";\r\n\tinput.style.boxSizing = \"border-box\";\r\n\t\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\t\r\n\tcellValue = typeof cellValue !== \"undefined\" ? cellValue : \"\";\r\n\t\r\n\tif(inputFormat){\r\n\t\tif(DT){\r\n\t\t\tif(DT.isDateTime(cellValue)){\r\n\t\t\t\tnewDatetime = cellValue;\r\n\t\t\t}else if(inputFormat === \"iso\"){\r\n\t\t\t\tnewDatetime = DT.fromISO(String(cellValue));\r\n\t\t\t}else{\r\n\t\t\t\tnewDatetime = DT.fromFormat(String(cellValue), inputFormat);\r\n\t\t\t}\r\n\r\n\t\t\tcellValue = newDatetime.toFormat(\"yyyy-MM-dd\") + \"T\" + newDatetime.toFormat(\"hh:mm\");\r\n\t\t}else{\r\n\t\t\tconsole.error(\"Editor Error - 'date' editor 'inputFormat' param is dependant on luxon.js\");\r\n\t\t}\r\n\t}\r\n\r\n\tinput.value = cellValue;\r\n\t\r\n\tonRendered(function(){\r\n\t\tinput.focus({preventScroll: true});\r\n\t\tinput.style.height = \"100%\";\r\n\t\t\r\n\t\tif(editorParams.selectContents){\r\n\t\t\tinput.select();\r\n\t\t}\r\n\t});\r\n\t\r\n\tfunction onChange(e){\r\n\t\tvar value = input.value;\r\n\r\n\t\tif(((cellValue === null || typeof cellValue === \"undefined\") && value !== \"\") || value !== cellValue){\r\n\r\n\t\t\tif(value && inputFormat){\r\n\t\t\t\tvalue = DT.fromISO(String(value)).toFormat(inputFormat);\r\n\t\t\t}\r\n\r\n\t\t\tif(success(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\t\r\n\t//submit new value on blur or change\r\n\tinput.addEventListener(\"change\", onChange);\r\n\tinput.addEventListener(\"blur\", onChange);\r\n\t\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\t\tonChange(e);\r\n\t\t\t\tbreak;\r\n\t\t\t\r\n\t\t\tcase 27:\r\n\t\t\t\tcancel();\r\n\t\t\t\tbreak;\r\n\t\t\t\r\n\t\t\tcase 35:\r\n\t\t\tcase 36:\r\n\t\t\t\te.stopPropagation();\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t});\r\n\t\r\n\treturn input;\r\n}","import List from '../../List.js';\r\n\r\nexport default function(cell, onRendered, success, cancel, editorParams){\r\n\r\n\tthis.deprecationMsg(\"The select editor has been deprecated, please use the new list editor\");\r\n\r\n\tvar list = new List(this, cell, onRendered, success, cancel, editorParams);\r\n\r\n\treturn list.input;\r\n}","import List from '../../List.js';\r\n\r\nexport default function(cell, onRendered, success, cancel, editorParams){\r\n\tvar list = new List(this, cell, onRendered, success, cancel, editorParams);\r\n\r\n\treturn list.input;\r\n}","import List from '../../List.js';\r\n\r\nexport default function(cell, onRendered, success, cancel, editorParams){\r\n\r\n\tthis.deprecationMsg(\"The autocomplete editor has been deprecated, please use the new list editor with the 'autocomplete' editorParam\");\r\n\r\n\teditorParams.autocomplete = true;\r\n\r\n\tvar list = new List(this, cell, onRendered, success, cancel, editorParams);\r\n\r\n\treturn list.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\t\tchangeValue(value + 1);\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase 37: //left arrow\r\n\t\t\t\tchangeValue(value - 1);\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase 13: //enter\r\n\t\t\t\tsuccess(value);\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase 27: //escape\r\n\t\t\t\tcancel();\r\n\t\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] && element.getElementsByTagName(\"div\")[0].getAttribute(\"max\")) || 100) : editorParams.max,\r\n\tmin = typeof editorParams.min === \"undefined\" ? ((element.getElementsByTagName(\"div\")[0] && 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\t\te.preventDefault();\r\n\t\t\t\tbar.style.width = (bar.clientWidth + element.clientWidth/100) + \"px\";\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase 37: //left arrow\r\n\t\t\t\te.preventDefault();\r\n\t\t\t\tbar.style.width = (bar.clientWidth - element.clientWidth/100) + \"px\";\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase 9: //tab\r\n\t\t\tcase 13: //enter\r\n\t\t\t\tupdateValue();\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase 27: //escape\r\n\t\t\t\tcancel();\r\n\t\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\ttrueValueSet = Object.keys(editorParams).includes(\"trueValue\"),\r\n\tfalseValueSet = Object.keys(editorParams).includes(\"falseValue\");\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 = trueValueSet ? value === editorParams.trueValue : (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\tvar checkedValue = input.checked;\r\n\r\n\t\tif(trueValueSet && checkedValue){\r\n\t\t\tcheckedValue = editorParams.trueValue;\r\n\t\t}else if(falseValueSet && !checkedValue){\r\n\t\t\tcheckedValue = editorParams.falseValue;\r\n\t\t}\r\n\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 checkedValue;\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 checkedValue;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\treturn checkedValue;\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\nimport Helpers from '../../core/tools/Helpers.js';\r\n\r\nimport defaultEditors from './defaults/editors.js';\r\n\r\nclass Edit extends Module{\r\n\t\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\t\t\r\n\t\tthis.currentCell = false; //hold currently editing cell\r\n\t\tthis.mouseClick = false; //hold mousedown state to prevent click binding being overridden 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\t\r\n\t\tthis.editors = Edit.editors;\r\n\t\t\r\n\t\tthis.registerColumnOption(\"editable\");\r\n\t\tthis.registerColumnOption(\"editor\");\r\n\t\tthis.registerColumnOption(\"editorParams\");\r\n\t\t\r\n\t\tthis.registerColumnOption(\"cellEditing\");\r\n\t\tthis.registerColumnOption(\"cellEdited\");\r\n\t\tthis.registerColumnOption(\"cellEditCancelled\");\r\n\t\t\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\t\t\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\t\t\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\t\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(\"cell-value-changed\", this.updateCellClass.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-refreshing\", this.cancelEdit.bind(this));\r\n\t\t\r\n\t\tthis.subscribe(\"keybinding-nav-prev\", this.navigatePrev.bind(this, undefined));\r\n\t\tthis.subscribe(\"keybinding-nav-next\", this.keybindingNavigateNext.bind(this));\r\n\t\tthis.subscribe(\"keybinding-nav-left\", this.navigateLeft.bind(this, undefined));\r\n\t\tthis.subscribe(\"keybinding-nav-right\", this.navigateRight.bind(this, undefined));\r\n\t\tthis.subscribe(\"keybinding-nav-up\", this.navigateUp.bind(this, undefined));\r\n\t\tthis.subscribe(\"keybinding-nav-down\", this.navigateDown.bind(this, undefined));\r\n\t}\r\n\t\r\n\t\r\n\t///////////////////////////////////\r\n\t////// Keybinding Functions ///////\r\n\t///////////////////////////////////\r\n\t\r\n\tkeybindingNavigateNext(e){\r\n\t\tvar cell = this.currentCell,\r\n\t\tnewRow = this.options(\"tabEndNewRow\");\r\n\t\t\r\n\t\tif(cell){\r\n\t\t\tif(!this.navigateNext(cell, e)){\r\n\t\t\t\tif(newRow){\r\n\t\t\t\t\tcell.getElement().firstChild.blur();\r\n\t\t\t\t\t\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\t\t\t\t\t\r\n\t\t\t\t\tnewRow.then(() => {\r\n\t\t\t\t\t\tsetTimeout(() => {\r\n\t\t\t\t\t\t\tcell.getComponent().navigateNext();\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\t\r\n\t///////////////////////////////////\r\n\t///////// Cell Functions //////////\r\n\t///////////////////////////////////\r\n\t\r\n\tcellIsEdited(cell){\r\n\t\treturn !! cell.modules.edit && cell.modules.edit.edited;\r\n\t}\r\n\t\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\t\r\n\t\r\n\t///////////////////////////////////\r\n\t///////// Table Functions /////////\r\n\t///////////////////////////////////\r\n\tupdateCellClass(cell){\r\n\t\tif(this.allowEdit(cell)) {\r\n\t\t\tcell.getElement().classList.add(\"tabulator-editable\");\r\n\t\t}\r\n\t\telse {\r\n\t\t\tcell.getElement().classList.remove(\"tabulator-editable\");\r\n\t\t}\r\n\t}\r\n\t\r\n\tclearCellEdited(cells){\r\n\t\tif(!cells){\r\n\t\t\tcells = this.table.modules.edit.getEditedCells();\r\n\t\t}\r\n\t\t\r\n\t\tif(!Array.isArray(cells)){\r\n\t\t\tcells = [cells];\r\n\t\t}\r\n\t\t\r\n\t\tcells.forEach((cell) => {\r\n\t\t\tthis.table.modules.edit.clearEdited(cell._getSelf());\r\n\t\t});\r\n\t}\r\n\t\r\n\tnavigatePrev(cell = this.currentCell, e){\r\n\t\tvar nextCell, prevRow;\r\n\t\t\r\n\t\tif(cell){\r\n\t\t\t\r\n\t\t\tif(e){\r\n\t\t\t\te.preventDefault();\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tnextCell = this.navigateLeft();\r\n\t\t\t\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\t\t\t\t\r\n\t\t\t\tif(prevRow){\r\n\t\t\t\t\tnextCell = this.findNextEditableCell(prevRow, prevRow.cells.length);\r\n\t\t\t\t\t\r\n\t\t\t\t\tif(nextCell){\r\n\t\t\t\t\t\tnextCell.getComponent().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\t\t\r\n\t\treturn false;\r\n\t}\r\n\t\r\n\tnavigateNext(cell = this.currentCell, e){\r\n\t\tvar nextCell, nextRow;\r\n\t\t\r\n\t\tif(cell){\r\n\t\t\t\r\n\t\t\tif(e){\r\n\t\t\t\te.preventDefault();\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tnextCell = this.navigateRight();\r\n\t\t\t\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\t\t\t\t\r\n\t\t\t\tif(nextRow){\r\n\t\t\t\t\tnextCell = this.findNextEditableCell(nextRow, -1);\r\n\t\t\t\t\t\r\n\t\t\t\t\tif(nextCell){\r\n\t\t\t\t\t\tnextCell.getComponent().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\t\t\r\n\t\treturn false;\r\n\t}\r\n\t\r\n\tnavigateLeft(cell = this.currentCell, e){\r\n\t\tvar index, nextCell;\r\n\t\t\r\n\t\tif(cell){\r\n\t\t\t\r\n\t\t\tif(e){\r\n\t\t\t\te.preventDefault();\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tindex = cell.getIndex();\r\n\t\t\tnextCell = this.findPrevEditableCell(cell.row, index);\r\n\t\t\t\r\n\t\t\tif(nextCell){\r\n\t\t\t\tnextCell.getComponent().edit();\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\treturn false;\r\n\t}\r\n\t\r\n\tnavigateRight(cell = this.currentCell, e){\r\n\t\tvar index, nextCell;\r\n\t\t\r\n\t\tif(cell){\r\n\t\t\t\r\n\t\t\tif(e){\r\n\t\t\t\te.preventDefault();\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tindex = cell.getIndex();\r\n\t\t\tnextCell = this.findNextEditableCell(cell.row, index);\r\n\t\t\t\r\n\t\t\tif(nextCell){\r\n\t\t\t\tnextCell.getComponent().edit();\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\treturn false;\r\n\t}\r\n\t\r\n\tnavigateUp(cell = this.currentCell, e){\r\n\t\tvar index, nextRow;\r\n\t\t\r\n\t\tif(cell){\r\n\t\t\t\r\n\t\t\tif(e){\r\n\t\t\t\te.preventDefault();\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tindex = cell.getIndex();\r\n\t\t\tnextRow = this.table.rowManager.prevDisplayRow(cell.row, true);\r\n\t\t\t\r\n\t\t\tif(nextRow){\r\n\t\t\t\tnextRow.cells[index].getComponent().edit();\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\treturn false;\r\n\t}\r\n\t\r\n\tnavigateDown(cell = this.currentCell, e){\r\n\t\tvar index, nextRow;\r\n\t\t\r\n\t\tif(cell){\r\n\t\t\t\r\n\t\t\tif(e){\r\n\t\t\t\te.preventDefault();\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tindex = cell.getIndex();\r\n\t\t\tnextRow = this.table.rowManager.nextDisplayRow(cell.row, true);\r\n\t\t\t\r\n\t\t\tif(nextRow){\r\n\t\t\t\tnextRow.cells[index].getComponent().edit();\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\treturn false;\r\n\t}\r\n\t\r\n\tfindNextEditableCell(row, index){\r\n\t\tvar nextCell = false;\r\n\t\t\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\t\t\t\t\r\n\t\t\t\tif(cell.column.modules.edit && Helpers.elVisible(cell.getElement())){\r\n\t\t\t\t\tlet allowEdit = this.allowEdit(cell);\r\n\t\t\t\t\t\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\t\t\r\n\t\treturn nextCell;\r\n\t}\r\n\t\r\n\tfindPrevEditableCell(row, index){\r\n\t\tvar prevCell = false;\r\n\t\t\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\t\r\n\t\t\t\tif(cell.column.modules.edit && Helpers.elVisible(cell.getElement())){\r\n\t\t\t\t\tlet allowEdit = this.allowEdit(cell);\r\n\t\t\t\t\t\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\t\t\r\n\t\treturn prevCell;\r\n\t}\r\n\t\r\n\t///////////////////////////////////\r\n\t///////// Internal Logic //////////\r\n\t///////////////////////////////////\r\n\t\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\t\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\t\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\t\r\n\t//initialize column editor\r\n\tinitializeColumn(column){\r\n\t\tvar config = {\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\t\t\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(this.editors[column.definition.editor]){\r\n\t\t\t\t\tconfig.editor = this.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\t\tbreak;\r\n\t\t\t\r\n\t\t\tcase \"function\":\r\n\t\t\t\tconfig.editor = column.definition.editor;\r\n\t\t\t\tbreak;\r\n\t\t\t\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(this.editors[column.definition.formatter]){\r\n\t\t\t\t\t\t\tconfig.editor = this.editors[column.definition.formatter];\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\tconfig.editor = this.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\t\tbreak;\r\n\t\t}\r\n\t\t\r\n\t\tif(config.editor){\r\n\t\t\tcolumn.modules.edit = config;\r\n\t\t}\r\n\t}\r\n\t\r\n\tgetCurrentCell(){\r\n\t\treturn this.currentCell ? this.currentCell.getComponent() : false;\r\n\t}\r\n\t\r\n\tclearEditor(cancel){\r\n\t\tvar cell = this.currentCell,\r\n\t\tcellEl;\r\n\t\t\r\n\t\tthis.invalidEdit = false;\r\n\t\t\r\n\t\tif(cell){\r\n\t\t\tthis.currentCell = false;\r\n\t\t\t\r\n\t\t\tcellEl = cell.getElement();\r\n\t\t\t\r\n\t\t\tthis.dispatch(\"edit-editor-clear\", cell, cancel);\r\n\t\t\t\r\n\t\t\tcellEl.classList.remove(\"tabulator-editing\");\r\n\t\t\t\r\n\t\t\twhile(cellEl.firstChild) cellEl.removeChild(cellEl.firstChild);\r\n\t\t\t\r\n\t\t\tcell.row.getElement().classList.remove(\"tabulator-editing\");\r\n\t\t\t\r\n\t\t\tcell.table.element.classList.remove(\"tabulator-editing\");\r\n\t\t}\r\n\t}\r\n\t\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\t\t\t\r\n\t\t\tthis.clearEditor(true);\r\n\t\t\tcell.setValueActual(cell.getValue());\r\n\t\t\tcell.cellRendered();\r\n\t\t\t\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\t\t\t\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\t\t\t\r\n\t\t\tthis.dispatch(\"edit-cancelled\", cell);\r\n\t\t\tthis.dispatchExternal(\"cellEditCancelled\", component);\r\n\t\t}\r\n\t}\r\n\t\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\t\t\t\r\n\t\t\tthis.updateCellClass(cell);\r\n\t\t\telement.setAttribute(\"tabindex\", 0);\r\n\t\t\t\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\t\t\t\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\t\t\t\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\t\r\n\tfocusCellNoEvent(cell, block){\r\n\t\tthis.recursionBlock = true;\r\n\t\t\r\n\t\tif(!(block && this.table.browser === \"ie\")){\r\n\t\t\tcell.getElement().focus({preventScroll: true});\r\n\t\t}\r\n\t\t\r\n\t\tthis.recursionBlock = false;\r\n\t}\r\n\t\r\n\teditCell(cell, forceEdit){\r\n\t\tthis.focusCellNoEvent(cell);\r\n\t\tthis.edit(cell, false, forceEdit);\r\n\t}\r\n\t\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\t\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\t\t\t\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\t\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\t\t\t\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\t\t\t\r\n\t\t\tif(cellEl.offsetLeft < leftEdge){\r\n\t\t\t\t\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\t\r\n\tallowEdit(cell) {\r\n\t\tvar check = cell.column.modules.edit ? true : false;\r\n\r\n\t\tif(cell.column.modules.edit){\r\n\t\t\tswitch(typeof cell.column.modules.edit.check){\r\n\t\t\t\tcase \"function\":\r\n\t\t\t\t\tcheck = cell.column.modules.edit.check(cell.getComponent());\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"string\":\r\n\t\t\t\t\tcheck = !!cell.row.data[cell.column.modules.edit.check];\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"boolean\":\r\n\t\t\t\t\tcheck = cell.column.modules.edit.check;\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn check;\r\n\t}\r\n\t\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\t\t\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\t\t\r\n\t\t//handle successful value change\r\n\t\tfunction success(value){\r\n\t\t\tif(self.currentCell === cell){\r\n\t\t\t\tvar valid = self.chain(\"edit-success\", [cell, value], true, true);\r\n\t\t\t\t\r\n\t\t\t\tif(valid === true || self.table.options.validationMode === \"highlight\"){\r\n\t\t\t\t\tself.clearEditor();\r\n\t\t\t\t\t\r\n\t\t\t\t\t\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\t\t\t\t\t\r\n\t\t\t\t\tcell.modules.edit.edited = true;\r\n\t\t\t\t\t\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\t\t\t\t\t\r\n\t\t\t\t\tcell.setValue(value, true);\r\n\t\t\t\t\t\r\n\t\t\t\t\treturn valid === true;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tself.invalidEdit = true;\r\n\t\t\t\t\tself.focusCellNoEvent(cell, true);\r\n\t\t\t\t\trendered();\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\t\t\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\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\t\t\r\n\t\tfunction onRendered(callback){\r\n\t\t\trendered = callback;\r\n\t\t}\r\n\t\t\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\t\t\t\r\n\t\t\tallowEdit = this.allowEdit(cell);\r\n\t\t\t\r\n\t\t\tif(allowEdit || forceEdit){\r\n\t\t\t\t\r\n\t\t\t\tself.cancelEdit();\r\n\t\t\t\t\r\n\t\t\t\tself.currentCell = cell;\r\n\t\t\t\t\r\n\t\t\t\tthis.focusScrollAdjust(cell);\r\n\t\t\t\t\r\n\t\t\t\tcomponent = cell.getComponent();\r\n\t\t\t\t\r\n\t\t\t\tif(this.mouseClick){\r\n\t\t\t\t\tthis.mouseClick = false;\r\n\t\t\t\t\t\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\t\t\t\t\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\t\t\t\t\r\n\t\t\t\tthis.dispatch(\"cell-editing\", cell);\r\n\t\t\t\tthis.dispatchExternal(\"cellEditing\", component);\r\n\t\t\t\t\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\t\t\t\t\r\n\t\t\t\tcellEditor = cell.column.modules.edit.editor.call(self, component, onRendered, success, cancel, params);\r\n\t\t\t\t\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\t\t\t\t\t\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-editing\");\r\n\t\t\t\t\t\tcell.table.element.classList.add(\"tabulator-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\t\t\t\t\t\t\r\n\t\t\t\t\t\t//trigger onRendered Callback\r\n\t\t\t\t\t\trendered();\r\n\t\t\t\t\t\t\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\t\t\t\t\t\t\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\t\t\t\t\t\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\t\t\t\t\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\t\r\n\tgetEditedCells(){\r\n\t\tvar output = [];\r\n\t\t\r\n\t\tthis.editedCells.forEach((cell) => {\r\n\t\t\toutput.push(cell.getComponent());\r\n\t\t});\r\n\t\t\r\n\t\treturn output;\r\n\t}\r\n\t\r\n\tclearEdited(cell){\r\n\t\tvar editIndex;\r\n\t\t\r\n\t\tif(cell.modules.edit && cell.modules.edit.edited){\r\n\t\t\tcell.modules.edit.edited = false;\r\n\t\t\t\r\n\t\t\tthis.dispatch(\"edit-edited-clear\", cell);\r\n\t\t}\r\n\t\t\r\n\t\teditIndex = this.editedCells.indexOf(cell);\r\n\t\t\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;\r\n","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 output 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\tgenerateTable(config, style, range, colVisProp){\r\n\t\tvar list = this.generateExportList(config, style, range, colVisProp);\r\n\r\n\t\treturn this.generateTableElement(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\t\trows = this.table.rowManager.getVisibleRows(false, true);\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"all\":\r\n\t\t\t\t\trows = this.table.rowManager.rows;\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"selected\":\r\n\t\t\t\t\trows = this.table.modules.selectRow.selectedRows;\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"active\":\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tif(this.table.options.pagination){\r\n\t\t\t\t\t\trows = this.table.rowManager.getDisplayRows(this.table.rowManager.displayRows.length - 2);\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\trows = this.table.rowManager.getDisplayRows();\r\n\t\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\tvar visProp = column.definition[this.colVisProp];\r\n\r\n\t\tif(typeof visProp === \"function\"){\r\n\t\t\tvisProp = visProp.call(this.table, column.getComponent());\r\n\t\t}\r\n\r\n\t\treturn visProp !== false && (column.visible || (!column.visible && visProp));\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 depth\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\tlet title = typeof col.title === \"undefined\" ? \"\" : col.title;\r\n\t\t\t\t\tcolumns.push(new ExportColumn(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\t\treturn this.config.rowGroups !== false;\r\n\r\n\t\t\t\tcase \"calc\":\r\n\t\t\t\t\treturn this.config.columnCalcs !== false;\r\n\r\n\t\t\t\tcase \"row\":\r\n\t\t\t\t\treturn !(this.table.options.dataTree && this.config.dataTree === false && row.modules.dataTree.parent);\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\t\tindent = row.level;\r\n\t\t\t\t\texportCols.push(new ExportColumn(row.key, row.getComponent(), columns.length, 1));\r\n\t\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\t\tcolumns.forEach((col) => {\r\n\t\t\t\t\t\texportCols.push(new ExportColumn(col._column.getFieldValue(rowData), col, 1, 1));\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\tif(this.table.options.dataTree && this.config.dataTree !== false){\r\n\t\t\t\t\t\tindent = row.modules.dataTree.index;\r\n\t\t\t\t\t}\r\n\t\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\tgenerateTableElement(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\tlet rowEl;\r\n\r\n\t\t\tswitch(row.type){\r\n\t\t\t\tcase \"header\":\r\n\t\t\t\t\theaderEl.appendChild(this.generateHeaderElement(row, setup, styles));\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"group\":\r\n\t\t\t\t\tbodyEl.appendChild(this.generateGroupElement(row, setup, styles));\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"calc\":\r\n\t\t\t\t\tbodyEl.appendChild(this.generateCalcElement(row, setup, styles));\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"row\":\r\n\t\t\t\t\trowEl = this.generateRowElement(row, setup, styles);\r\n\r\n\t\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\t\tbodyEl.appendChild(rowEl);\r\n\t\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\tgenerateHeaderElement(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\tgenerateGroupElement(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 = 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\tgenerateCalcElement(row, setup, styles){\r\n\t\tvar rowEl = this.generateRowElement(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\tgenerateRowElement(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, i) => {\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\tindex = this.table.columnManager.findColumnIndex(column),\r\n\t\t\t\tvalue = col.value,\r\n\t\t\t\tcellStyle;\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\t\tvalue = value !== null ? JSON.stringify(value) : \"\";\r\n\t\t\t\t\t\t\tbreak;\r\n\r\n\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\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\tcellStyle = styles.styleCells && styles.styleCells[index] ? styles.styleCells[index] : styles.firstCell;\r\n\r\n\t\t\t\tif(cellStyle){\r\n\t\t\t\t\tthis.mapElementStyles(cellStyle, cellEl, [\"padding-top\", \"padding-left\", \"padding-right\", \"padding-bottom\", \"border-top\", \"border-left\", \"border-right\", \"border-bottom\", \"color\", \"font-weight\", \"font-family\", \"font-size\", \"text-align\"]);\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\tgenerateHTMLTable(list){\r\n\t\tvar holder = document.createElement(\"div\");\r\n\r\n\t\tholder.appendChild(this.generateTableElement(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.generateHTMLTable(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\tthis.tableInitialized = false;\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\r\n\t\tthis.tableInitialized = true;\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\r\n\t\t//handle successfully 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\t\tif(Filter.filters[column.definition.headerFilterFunc]){\r\n\t\t\t\t\t\t\t\ttype = column.definition.headerFilterFunc;\r\n\t\t\t\t\t\t\t\tfilterFunc = function(data){\r\n\t\t\t\t\t\t\t\t\tvar params = column.definition.headerFilterFuncParams || {};\r\n\t\t\t\t\t\t\t\t\tvar fieldVal = column.getFieldValue(data);\r\n\r\n\t\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\t\treturn Filter.filters[column.definition.headerFilterFunc](value, fieldVal, data, params);\r\n\t\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t\t}else{\r\n\t\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\t}\r\n\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\tcase \"function\":\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 column.definition.headerFilterFunc(value, fieldVal, data, params);\r\n\t\t\t\t\t\t\t};\r\n\r\n\t\t\t\t\t\t\ttype = filterFunc;\r\n\t\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\t\tfilterFunc = function(data){\r\n\t\t\t\t\t\t\t\t\tvar colVal = column.getFieldValue(data);\r\n\r\n\t\t\t\t\t\t\t\t\tif(typeof colVal !== 'undefined' && colVal !== null){\r\n\t\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\t}else{\r\n\t\t\t\t\t\t\t\t\t\treturn false;\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\ttype = \"like\";\r\n\t\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\t\tfilterFunc = function(data){\r\n\t\t\t\t\t\t\t\t\treturn column.getFieldValue(data) == value;\r\n\t\t\t\t\t\t\t\t};\r\n\t\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};\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\tcolumn.modules.filter.value = value;\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\tcolumn.modules.filter.value = initialValue;\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;\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\t\tif(self.table.modules.edit.editors[column.definition.headerFilter]){\r\n\t\t\t\t\t\teditor = self.table.modules.edit.editors[column.definition.headerFilter];\r\n\r\n\t\t\t\t\t\tif((column.definition.headerFilter === \"tick\" || column.definition.headerFilter === \"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\tconsole.warn(\"Filter Error - Cannot build header filter, No such editor found: \", column.definition.editor);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"function\":\r\n\t\t\t\t\teditor = column.definition.headerFilter;\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"boolean\":\r\n\t\t\t\t\tif(column.modules.edit && column.modules.edit.editor){\r\n\t\t\t\t\t\teditor = column.modules.edit.editor;\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tif(column.definition.formatter && self.table.modules.edit.editors[column.definition.formatter]){\r\n\t\t\t\t\t\t\teditor = self.table.modules.edit.editors[column.definition.formatter];\r\n\r\n\t\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\t\tcolumn.modules.filter.emptyFunc = function(value){\r\n\t\t\t\t\t\t\t\t\treturn value !== true && value !== 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}else{\r\n\t\t\t\t\t\t\teditor = self.table.modules.edit.editors[\"input\"];\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}\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\tgetTable:() => {\r\n\t\t\t\t\t\treturn this.table;\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, cellWrapper) : 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\tself.langBind(\"headerFilters|columns|\" + column.definition.field, function(value){\r\n\t\t\t\t\teditorElement.setAttribute(\"placeholder\", typeof value !== \"undefined\" && value ? value : self.langText(\"headerFilters|default\"));\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\tvar headerPos = this.table.rowManager.element.scrollLeft + parseInt(this.table.columnManager.element.style.marginLeft);\r\n\r\n\t\t\t\t\tif(left !== headerPos){\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)\r\n\t\t\t\t\t) {\r\n\t\t\t\t\t\teditorElement.addEventListener(\"keyup\", searchTrigger);\r\n\t\t\t\t\t\teditorElement.addEventListener(\"search\", searchTrigger);\r\n\r\n\r\n\t\t\t\t\t\t//update number filtered columns on change\r\n\t\t\t\t\t\tif(column.modules.filter.attrType == \"number\"){\r\n\t\t\t\t\t\t\teditorElement.addEventListener(\"change\", function(e){\r\n\t\t\t\t\t\t\t\tsuccess(editorElement.value);\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//change text inputs to search inputs to allow for clearing of field\r\n\t\t\t\t\t\tif(column.modules.filter.attrType == \"text\" && this.table.browser !== \"ie\"){\r\n\t\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\t}\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t//prevent input and select elements from propagating 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//programmatically 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.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//programmatically 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.tableInitialized){\r\n\t\t\tif(this.table.options.filterMode === \"remote\"){\r\n\t\t\t\tthis.reloadData(null, false, false);\r\n\t\t\t}else{\r\n\t\t\t\tthis.refreshData(true);\r\n\t\t\t}\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\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\tchanged = 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\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}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(true));\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(true), 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\tsign = \"\",\r\n\tnumber, integer, decimal, rgx;\r\n\r\n\tvar decimalSym = formatterParams.decimal || \".\";\r\n\tvar thousandSym = formatterParams.thousand || \",\";\r\n\tvar negativeSign = formatterParams.negativeSign || \"-\";\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\tif(floatVal < 0){\r\n\t\tfloatVal = Math.abs(floatVal);\r\n\t\tsign = negativeSign;\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\tif (formatterParams.thousand !== false) {\r\n\t\trgx = /(\\d+)(\\d{3})/;\r\n\r\n\t\twhile (rgx.test(integer)){\r\n\t\t\tinteger = integer.replace(rgx, \"$1\" + thousandSym + \"$2\");\r\n\t\t}\r\n\t}\r\n\r\n\treturn after ? sign + integer + decimal + symbol : sign + 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\tfunction labelTraverse(path, data){\r\n\t\tvar item = path.shift(),\r\n\t\tvalue = data[item];\r\n\t\t\r\n\t\tif(path.length && typeof value === \"object\"){\r\n\t\t\treturn labelTraverse(path, value);\r\n\t\t}\r\n\r\n\t\treturn value;\r\n\t}\r\n\r\n\tif(formatterParams.labelField){\r\n\t\tdata = cell.getData();\r\n\t\tlabel = labelTraverse(formatterParams.labelField.split(this.table.options.nestedFieldSeparator), data);\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\t\tlabel = formatterParams.label;\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase \"function\":\r\n\t\t\t\tlabel = formatterParams.label(cell);\r\n\t\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\t\tvalue = formatterParams.url;\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"function\":\r\n\t\t\t\t\tvalue = formatterParams.url(cell);\r\n\t\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\t\tel.style.height = formatterParams.height + \"px\";\r\n\t\t\tbreak;\r\n\r\n\t\tcase \"string\":\r\n\t\t\tel.style.height = formatterParams.height;\r\n\t\t\tbreak;\r\n\t}\r\n\r\n\tswitch(typeof formatterParams.width){\r\n\t\tcase \"number\":\r\n\t\t\tel.style.width = formatterParams.width + \"px\";\r\n\t\t\tbreak;\r\n\r\n\t\tcase \"string\":\r\n\t\t\tel.style.width = formatterParams.width;\r\n\t\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\ttrueValueSet = Object.keys(formatterParams).includes(\"trueValue\"),\r\n\ttick = typeof formatterParams.tickElement !== \"undefined\" ? formatterParams.tickElement : '',\r\n\tcross = typeof formatterParams.crossElement !== \"undefined\" ? formatterParams.crossElement : '';\r\n\r\n\tif((trueValueSet && value === formatterParams.trueValue) || (!trueValueSet && ((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 DT = window.DateTime || luxon.DateTime;\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\tif(typeof DT != \"undefined\"){\r\n\t\tvar newDatetime;\r\n\r\n\t\tif(DT.isDateTime(value)){\r\n\t\t\tnewDatetime = value;\r\n\t\t}else if(inputFormat === \"iso\"){\r\n\t\t\tnewDatetime = DT.fromISO(String(value));\r\n\t\t}else{\r\n\t\t\tnewDatetime = DT.fromFormat(String(value), inputFormat);\r\n\t\t}\r\n\r\n\t\tif(newDatetime.isValid){\r\n\t\t\tif(formatterParams.timezone){\r\n\t\t\t\tnewDatetime = newDatetime.setZone(formatterParams.timezone);\r\n\t\t\t}\r\n\r\n\t\t\treturn newDatetime.toFormat(outputFormat);\r\n\t\t}else{\r\n\t\t\tif(invalid === true || !value){\r\n\t\t\t\treturn value;\r\n\t\t\t}else if(typeof invalid === \"function\"){\r\n\t\t\t\treturn invalid(value);\r\n\t\t\t}else{\r\n\t\t\t\treturn invalid;\r\n\t\t\t}\r\n\t\t}\r\n\t}else{\r\n\t\tconsole.error(\"Format Error - 'datetime' formatter is dependant on luxon.js\");\r\n\t}\r\n}","export default function (cell, formatterParams, onRendered) {\r\n\tvar DT = window.DateTime || luxon.DateTime;\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 : \"days\";\r\n\tvar humanize = typeof formatterParams.humanize !== \"undefined\" ? formatterParams.humanize : false;\r\n\tvar date = typeof formatterParams.date !== \"undefined\" ? formatterParams.date : DT.now();\r\n\tvar value = cell.getValue();\r\n\r\n\tif(typeof DT != \"undefined\"){\r\n\t\tvar newDatetime;\r\n\r\n\t\tif(DT.isDateTime(value)){\r\n\t\t\tnewDatetime = value;\r\n\t\t}else if(inputFormat === \"iso\"){\r\n\t\t\tnewDatetime = DT.fromISO(String(value));\r\n\t\t}else{\r\n\t\t\tnewDatetime = DT.fromFormat(String(value), inputFormat);\r\n\t\t}\r\n\r\n\t\tif (newDatetime.isValid){\r\n\t\t\tif(humanize){\r\n\t\t\t\treturn newDatetime.diff(date, unit).toHuman() + (suffix ? \" \" + suffix : \"\");\r\n\t\t\t}else{\r\n\t\t\t\treturn parseInt(newDatetime.diff(date, unit)[unit]) + (suffix ? \" \" + suffix : \"\");\r\n\t\t\t}\r\n\t\t} else {\r\n\r\n\t\t\tif (invalid === true) {\r\n\t\t\t\treturn value;\r\n\t\t\t} else if (typeof invalid === \"function\") {\r\n\t\t\t\treturn invalid(value);\r\n\t\t\t} else {\r\n\t\t\t\treturn invalid;\r\n\t\t\t}\r\n\t\t}\r\n\t}else{\r\n\t\tconsole.error(\"Format Error - 'datetimediff' formatter is dependant on luxon.js\");\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\t\tcolor = colors;\r\n\t\t\tbreak;\r\n\t\tcase \"function\":\r\n\t\t\tcolor = colors(value);\r\n\t\t\tbreak;\r\n\t\tcase \"object\":\r\n\t\t\tif(Array.isArray(colors)){\r\n\t\t\t\tvar unit = 100 / colors.length;\r\n\t\t\t\tvar index = Math.floor(percentValue / unit);\r\n\r\n\t\t\t\tindex = Math.min(index, colors.length - 1);\r\n\t\t\t\tindex = Math.max(index, 0);\r\n\t\t\t\tcolor = colors[index];\r\n\t\t\t\tbreak;\r\n\t\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.max ? formatterParams.max : 100,\r\n\tmin = formatterParams.min ? formatterParams.min : 0,\r\n\tlegendAlign = formatterParams.legendAlign ? formatterParams.legendAlign : \"center\",\r\n\tpercent, percentValue, color, legend, legendColor;\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\t\tcolor = formatterParams.color;\r\n\t\t\tbreak;\r\n\t\tcase \"function\":\r\n\t\t\tcolor = formatterParams.color(value);\r\n\t\t\tbreak;\r\n\t\tcase \"object\":\r\n\t\t\tif(Array.isArray(formatterParams.color)){\r\n\t\t\t\tlet unit = 100 / formatterParams.color.length;\r\n\t\t\t\tlet index = Math.floor(percentValue / unit);\r\n\r\n\t\t\t\tindex = Math.min(index, formatterParams.color.length - 1);\r\n\t\t\t\tindex = Math.max(index, 0);\r\n\t\t\t\tcolor = formatterParams.color[index];\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\tdefault:\r\n\t\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\t\tlegend = formatterParams.legend;\r\n\t\t\tbreak;\r\n\t\tcase \"function\":\r\n\t\t\tlegend = formatterParams.legend(value);\r\n\t\t\tbreak;\r\n\t\tcase \"boolean\":\r\n\t\t\tlegend = value;\r\n\t\t\tbreak;\r\n\t\tdefault:\r\n\t\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\t\tlegendColor = formatterParams.legendColor;\r\n\t\t\tbreak;\r\n\t\tcase \"function\":\r\n\t\t\tlegendColor = formatterParams.legendColor(value);\r\n\t\t\tbreak;\r\n\t\tcase \"object\":\r\n\t\t\tif(Array.isArray(formatterParams.legendColor)){\r\n\t\t\t\tlet unit = 100 / formatterParams.legendColor.length;\r\n\t\t\t\tlet index = Math.floor(percentValue / unit);\r\n\r\n\t\t\t\tindex = Math.min(index, formatterParams.legendColor.length - 1);\r\n\t\t\t\tindex = Math.max(index, 0);\r\n\t\t\t\tlegendColor = formatterParams.legendColor[index];\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\t\tdefault:\r\n\t\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.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\tvar barContainer = document.createElement(\"div\");\r\n\tbarContainer.style.position = \"relative\";\r\n\tbarContainer.style.width = \"100%\";\r\n\tbarContainer.style.height = \"100%\";\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 = 0;\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(barContainer);\r\n\t\tbarContainer.appendChild(barEl);\r\n\r\n\t\tif(legend){\r\n\t\t\tbarContainer.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\tvar content = document.createElement(\"span\");\r\n\tvar row = cell.getRow();\r\n\r\n\trow.watchPosition((position) => {\r\n\t\tcontent.innerText = position;\r\n\t});\r\n\t\r\n\treturn content;\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 el = 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\tcell.getTable().rowManager.adjustTableSize();\r\n\t});\r\n\r\n\ttoggleList(config.open);\r\n\r\n\treturn el;\r\n}","import RowComponent from '../../../../core/row/RowComponent.js';\r\n\r\nexport default function(cell, formatterParams, onRendered){\r\n\tvar checkbox = document.createElement(\"input\");\r\n\tvar blocked = false;\r\n\r\n\tcheckbox.type = 'checkbox';\r\n\r\n\tcheckbox.setAttribute(\"aria-label\", \"Select Row\");\r\n\t\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\tif(this.table.options.selectableRangeMode === \"click\"){\r\n\t\t\t\t\t\tif(!blocked){\r\n\t\t\t\t\t\t\trow.toggleSelect();\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\tblocked = false;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\trow.toggleSelect();\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\tif(this.table.options.selectableRangeMode === \"click\"){\r\n\t\t\t\t\tcheckbox.addEventListener(\"click\", (e) => {\r\n\t\t\t\t\t\tblocked = true;\r\n\t\t\t\t\t\tthis.table.modules.selectRow.handleComplexRowClick(row._row, e);\r\n\t\t\t\t\t});\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\t\tif(Format.formatters[formatter]){\r\n\t\t\t\t\tconfig.formatter = Format.formatters[formatter];\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.warn(\"Formatter Error - No such formatter found: \", formatter);\r\n\t\t\t\t\tconfig.formatter = Format.formatters.plaintext;\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase \"function\":\r\n\t\t\t\tconfig.formatter = formatter;\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tdefault:\r\n\t\t\t\tconfig.formatter = Format.formatters.plaintext;\r\n\t\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(cell.getComponent()) : 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\tswitch(typeof formatter){\r\n\t\t\tcase \"string\":\r\n\t\t\t\tif(Format.formatters[formatter]){\r\n\t\t\t\t\tformatter = Format.formatters[formatter];\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.warn(\"Formatter Error - No such formatter found: \", formatter);\r\n\t\t\t\t\tformatter = Format.formatters.plaintext;\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase \"function\":\r\n\t\t\t\t//Custom formatter Function, do nothing\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tdefault:\r\n\t\t\t\tformatter = Format.formatters.plaintext;\r\n\t\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\t\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\t\t\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.blocked = true;\r\n\t\t\r\n\t\tthis.registerColumnOption(\"frozen\");\r\n\t}\r\n\t\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\t\t\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\t\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-after\", 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(\"scroll-horizontal\", this.scrollHorizontal.bind(this));\r\n\t\tthis.subscribe(\"columns-loading\", this.reset.bind(this));\r\n\t\t\r\n\t\tthis.subscribe(\"column-add\", this.reinitializeColumns.bind(this));\r\n\t\tthis.subscribe(\"column-delete\", this.reinitializeColumns.bind(this));\r\n\t\t\r\n\t\tthis.subscribe(\"table-redraw\", this.layout.bind(this));\r\n\t\tthis.subscribe(\"layout-refreshing\", this.blockLayout.bind(this));\r\n\t\tthis.subscribe(\"layout-refreshed\", this.unblockLayout.bind(this));\r\n\t}\r\n\t\r\n\tblockLayout(){\r\n\t\tthis.blocked = true;\r\n\t}\r\n\t\r\n\tunblockLayout(){\r\n\t\tthis.blocked = false;\r\n\t}\r\n\t\r\n\tlayoutCell(cell){\r\n\t\tthis.layoutElement(cell.element, cell.column);\r\n\t}\r\n\t\r\n\treinitializeColumns(){\r\n\t\tthis.reset();\r\n\t\t\r\n\t\tthis.table.columnManager.columnsByIndex.forEach((column) => {\r\n\t\t\tthis.initializeColumn(column);\r\n\t\t});\r\n\t}\r\n\t\r\n\t//initialize specific column\r\n\tinitializeColumn(column){\r\n\t\tvar config = {margin:0, edge:false};\r\n\t\t\r\n\t\tif(!column.isGroup){\r\n\t\t\t\r\n\t\t\tif(this.frozenCheck(column)){\r\n\t\t\t\t\r\n\t\t\t\tconfig.position = this.initializationMode;\r\n\t\t\t\t\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\t\t\t\t\r\n\t\t\t\tthis.active = true;\r\n\t\t\t\t\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\t\r\n\tfrozenCheck(column){\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\t\t\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\t}\r\n\t\r\n\t//quick layout to smooth horizontal scrolling\r\n\tscrollHorizontal(){\t\r\n\t\tif(this.active){\t\t\r\n\t\t\tthis.calcMargins(true);\r\n\t\t\t\r\n\t\t\tthis.layoutColumnPosition();\r\n\t\t\t\r\n\t\t\tthis.layoutCalcRows();\r\n\t\t\t\r\n\t\t\tthis.reinitializeRows();\r\n\t\t}\r\n\t}\r\n\t\r\n\t//calculate margins for rows\r\n\tcalcMargins(scroll){\r\n\t\t\r\n\t\tif(!scroll){\r\n\t\t\tthis.leftMargin = this._calcSpace(this.leftColumns, this.leftColumns.length) + \"px\";\t\t\t\r\n\t\t\tthis.rightMargin = this._calcSpace(this.rightColumns, this.rightColumns.length) + \"px\";\t\r\n\t\t\tthis.table.rowManager.tableElement.style.marginRight = this.rightMargin;\r\n\t\t}\r\n\t\t\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\t\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\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\t\r\n\t\t\tif(this.table.modExists(\"groupRows\")){\r\n\t\t\t\tthis.layoutGroupCalcs(this.table.modules.groupRows.getGroups());\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\tlayoutGroupCalcs(groups){\r\n\t\tgroups.forEach((group) => {\r\n\t\t\tif(group.calcs.top){\r\n\t\t\t\tthis.layoutRow(group.calcs.top);\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif(group.calcs.bottom){\r\n\t\t\t\tthis.layoutRow(group.calcs.bottom);\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif(group.groupList && group.groupList.length){\r\n\t\t\t\tthis.layoutGroupCalcs(group.groupList);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\t\r\n\t//calculate column positions and layout headers\r\n\tlayoutColumnPosition(allCells){\r\n\t\tvar leftParents = [];\r\n\t\t\r\n\t\tvar leftMargin = 0;\r\n\t\tvar rightMargin = 0;\r\n\t\t\r\n\t\tthis.table.columnManager.headersElement.style.marginLeft = this.leftMargin;\r\n\t\tthis.table.columnManager.element.style.paddingRight = this.rightMargin;\r\n\t\t\r\n\t\tthis.leftColumns.forEach((column, i) => {\t\r\n\t\t\tcolumn.modules.frozen.marginValue = leftMargin + this.table.columnManager.scrollLeft;\r\n\t\t\tcolumn.modules.frozen.margin = column.modules.frozen.marginValue + \"px\";\r\n\t\t\t\r\n\t\t\tif(column.visible){\r\n\t\t\t\tleftMargin += column.getWidth();\r\n\t\t\t}\r\n\t\t\t\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\t\t\t\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\t\t\t\t\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\t\t\t\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\t\r\n\t\tthis.rightColumns.forEach((column, i) => {\r\n\t\t\t\r\n\t\t\tif(column.visible){\r\n\t\t\t\trightMargin += column.getWidth();\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tcolumn.modules.frozen.marginValue = this.rightPadding - rightMargin;\r\n\t\t\tcolumn.modules.frozen.margin = column.modules.frozen.marginValue + \"px\";\r\n\t\t\t\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\t\t\t\r\n\t\t\t\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\t\t\t\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\t\r\n\tgetColGroupParentElement(column){\r\n\t\treturn column.parent.isGroup ? this.getColGroupParentElement(column.parent) : column.getElement();\r\n\t}\r\n\t\r\n\t//layout columns appropriately\r\n\tlayout(){\t\r\n\t\tif(this.active && !this.blocked){\r\n\t\t\t//calculate row padding\r\n\t\t\tthis.calcMargins();\r\n\t\t\t\r\n\t\t\t//calculate left columns\r\n\t\t\tthis.layoutColumnPosition();\r\n\r\n\t\t\tthis.reinitializeRows();\r\n\t\t\t\r\n\t\t\tthis.layoutCalcRows();\r\n\t\t}\r\n\t}\r\n\t\r\n\treinitializeRows(){\r\n\t\tvar visibleRows = this.table.rowManager.getVisibleRows(true);\r\n\t\tvar otherRows = this.table.rowManager.getRows().filter(row => !visibleRows.includes(row));\r\n\t\t\r\n\t\totherRows.forEach((row) =>{\r\n\t\t\trow.deinitialize();\r\n\t\t});\r\n\t\t\r\n\t\tvisibleRows.forEach((row) =>{\r\n\t\t\tif(row.type === \"row\"){\r\n\t\t\t\tthis.layoutRow(row);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\t\r\n\tlayoutRow(row){\r\n\t\t// console.trace(\"row\")\r\n\t\tvar rowEl = row.getElement();\r\n\t\t\r\n\t\trowEl.style.paddingLeft = this.leftMargin;\r\n\t\t\r\n\t\tif(this.table.options.layout === \"fitDataFill\" && this.rightColumns.length){\r\n\t\t\tthis.table.rowManager.getTableElement().style.minWidth = \"calc(100% - \" + this.rightMargin + \")\";\r\n\t\t}\r\n\t\t\r\n\t\tthis.leftColumns.forEach((column) => {\r\n\t\t\tvar cell = row.getCell(column);\r\n\t\t\t\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\t\r\n\t\tthis.rightColumns.forEach((column) => {\r\n\t\t\tvar cell = row.getCell(column);\r\n\t\t\t\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\t\r\n\tlayoutElement(element, column){\r\n\t\t\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\t\t\t\r\n\t\t\telement.classList.add(\"tabulator-frozen\");\r\n\t\t\t\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\t\r\n\t_calcSpace(columns, index){\r\n\t\tvar width = 0;\r\n\t\t\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\t\t\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\r\n\t\t//register table options\r\n\t\tthis.registerTableOption(\"frozenRowsField\", \"id\"); //field to choose frozen rows by\r\n\t\tthis.registerTableOption(\"frozenRows\", false); //holder for frozen row identifiers\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\t\tthis.subscribe(\"rows-visible\", this.visibleRows.bind(this));\r\n\r\n\t\tthis.registerDisplayHandler(this.getRows.bind(this), 10);\r\n\r\n\t\tif(this.table.options.frozenRows){\r\n\t\t\tthis.subscribe(\"data-processed\", this.initializeRows.bind(this));\r\n\t\t\tthis.subscribe(\"row-added\", this.initializeRow.bind(this));\r\n\t\t}\r\n\t}\r\n\r\n\tinitializeRows(){\r\n\t\tthis.table.rowManager.getRows().forEach((row) => {\r\n\t\t\tthis.initializeRow(row);\r\n\t\t});\r\n\t}\r\n\r\n\tinitializeRow(row){\r\n\t\tvar frozenRows = this.table.options.frozenRows,\r\n\t\trowType = typeof frozenRows;\r\n\r\n\t\tif(rowType === \"number\"){\r\n\t\t\tif(row.getPosition() && (row.getPosition() + this.rows.length) <= frozenRows){\r\n\t\t\t\tthis.freezeRow(row);\r\n\t\t\t}\r\n\t\t}else if(rowType === \"function\"){\r\n\t\t\tif(frozenRows.call(this.table, row.getComponent())){\r\n\t\t\t\tthis.freezeRow(row);\r\n\t\t\t}\r\n\t\t}else if(Array.isArray(frozenRows)){\r\n\t\t\tif(frozenRows.includes(row.data[this.options(\"frozenRowsField\")])){\r\n\t\t\t\tthis.freezeRow(row);\r\n\t\t\t}\r\n\t\t}\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\tvisibleRows(viewable, rows){\r\n\t\tthis.rows.forEach((row) => {\r\n\t\t\trows.push(row);\r\n\t\t});\r\n\r\n\t\treturn rows;\r\n\t}\r\n\r\n\t//filter frozen rows out of display data\r\n\tgetRows(rows){\r\n\t\tvar output = 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\r\n\t\t\tthis.rows.push(row);\r\n\r\n\t\t\tthis.refreshData(false, \"display\");\r\n\r\n\t\t\tthis.table.rowManager.adjustTableSize();\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\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.refreshData(false, \"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\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.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.groupManager.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\t\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.element = false;\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\t\t\r\n\t\tthis.visible = oldGroup ? oldGroup.visible : (typeof groupManager.startOpen[level] !== \"undefined\" ? groupManager.startOpen[level] : groupManager.startOpen[0]);\r\n\t\t\r\n\t\tthis.component = null;\r\n\t\t\r\n\t\tthis.createElements();\r\n\t\tthis.addBindings();\r\n\t\t\r\n\t\tthis.createValueGroups();\r\n\t}\r\n\t\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.rows.forEach((row) => {\r\n\t\t\t\tif(row.modules){\r\n\t\t\t\t\tdelete row.modules.group;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t\t\r\n\t\tthis.element = false;\r\n\t\tthis.arrowElement = false;\r\n\t\tthis.elementContents = false;\r\n\t}\r\n\t\r\n\tcreateElements(){\r\n\t\tvar arrow = document.createElement(\"div\");\r\n\t\tarrow.classList.add(\"tabulator-arrow\");\r\n\t\t\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\t\t\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\t\t\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\t\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\t\r\n\taddBindings(){\r\n\t\tvar toggleElement;\r\n\t\t\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\t\t\t\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\t\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\t\t\r\n\t\tthis.groups[groupKey] = group;\r\n\t\tthis.groupList.push(group);\r\n\t}\r\n\t\r\n\t_addRowToGroup(row){\r\n\t\t\r\n\t\tvar level = this.level + 1;\r\n\t\t\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\t\t\t\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\t\t\t\t\r\n\t\t\t\tthis.groups[groupKey].addRow(row);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\t_addRow(row){\r\n\t\tthis.rows.push(row);\r\n\t\trow.modules.group = this;\r\n\t}\r\n\t\r\n\tinsertRow(row, to, after){\r\n\t\tvar data = this.conformRowData({});\r\n\t\t\r\n\t\trow.updateData(data);\r\n\t\t\r\n\t\tvar toIndex = this.rows.indexOf(to);\r\n\t\t\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\t\t\r\n\t\trow.modules.group = this;\r\n\t\t\r\n\t\tthis.generateGroupHeaderContents();\r\n\t\t\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\t\t\r\n\t\tthis.groupManager.updateGroupRows(true);\r\n\t}\r\n\t\r\n\tscrollHeader(left){\r\n\t\tif(this.arrowElement){\r\n\t\t\tthis.arrowElement.style.marginLeft = left;\r\n\t\t\t\r\n\t\t\tthis.groupList.forEach(function(child){\r\n\t\t\t\tchild.scrollHeader(left);\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\t\r\n\tgetRowIndex(row){}\r\n\t\r\n\t//update row data to match grouping constraints\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\t\t\r\n\t\tif(this.parent){\r\n\t\t\tdata = this.parent.conformRowData(data);\r\n\t\t}\r\n\t\t\r\n\t\treturn data;\r\n\t}\r\n\t\r\n\tremoveRow(row){\r\n\t\tvar index = this.rows.indexOf(row);\r\n\t\tvar el = row.getElement();\r\n\t\t\r\n\t\t\r\n\t\tif(index > -1){\r\n\t\t\tthis.rows.splice(index, 1);\r\n\t\t}\r\n\t\t\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\t\t\t\r\n\t\t\tthis.groupManager.updateGroupRows(true);\r\n\t\t}else{\r\n\t\t\t\r\n\t\t\tif(el.parentNode){\r\n\t\t\t\tel.parentNode.removeChild(el);\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tthis.generateGroupHeaderContents();\r\n\t\t\t\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\t\t\t\r\n\t\t}\r\n\t}\r\n\t\r\n\tremoveGroup(group){\r\n\t\tvar groupKey = group.level + \"_\" + group.key,\r\n\t\tindex;\r\n\t\t\r\n\t\tif(this.groups[groupKey]){\r\n\t\t\tdelete this.groups[groupKey];\r\n\t\t\t\r\n\t\t\tindex = this.groupList.indexOf(group);\r\n\t\t\t\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\t\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\t\r\n\tgetHeadersAndRows(noCalc){\r\n\t\tvar output = [];\r\n\t\t\r\n\t\toutput.push(this);\r\n\t\t\r\n\t\tthis._visSet();\r\n\t\t\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\t\t\t\t\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\t\t\t\t\t\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\t\t\t\t\r\n\t\t\t\toutput = output.concat(this.rows);\r\n\t\t\t\t\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\t\t\t\t\t\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\t\t\t\t\r\n\t\t\t\tif(this.groupManager.table.modExists(\"columnCalcs\")){\r\n\t\t\t\t\t\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\t\t\t\t\t\t\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\t\t\t\t\t\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\t\t\t\t\t\t\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\t\t\t\r\n\t\t}\r\n\t\t\r\n\t\treturn output;\r\n\t}\r\n\t\r\n\tgetData(visible, transform){\r\n\t\tvar output = [];\r\n\t\t\r\n\t\tthis._visSet();\r\n\t\t\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\t\t\r\n\t\treturn output;\r\n\t}\r\n\t\r\n\tgetRowCount(){\r\n\t\tvar count = 0;\r\n\t\t\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\t\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\t\r\n\thide(){\r\n\t\tthis.visible = false;\r\n\t\t\r\n\t\tif(this.groupManager.table.rowManager.getRenderMode() == \"basic\" && !this.groupManager.table.options.pagination){\r\n\t\t\t\r\n\t\t\tthis.element.classList.remove(\"tabulator-group-visible\");\r\n\t\t\t\r\n\t\t\tif(this.groupList.length){\r\n\t\t\t\tthis.groupList.forEach((group) => {\r\n\t\t\t\t\t\r\n\t\t\t\t\tvar rows = group.getHeadersAndRows();\r\n\t\t\t\t\t\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\t\t\t\t\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\t\t\t\r\n\t\t\tthis.groupManager.updateGroupRows(true);\r\n\t\t\t\r\n\t\t}else{\r\n\t\t\tthis.groupManager.updateGroupRows(true);\r\n\t\t}\r\n\t\t\r\n\t\tthis.groupManager.table.externalEvents.dispatch(\"groupVisibilityChanged\", this.getComponent(), false);\r\n\t}\r\n\t\r\n\tshow(){\r\n\t\tthis.visible = true;\r\n\t\t\r\n\t\tif(this.groupManager.table.rowManager.getRenderMode() == \"basic\" && !this.groupManager.table.options.pagination){\r\n\t\t\t\r\n\t\t\tthis.element.classList.add(\"tabulator-group-visible\");\r\n\t\t\t\r\n\t\t\tvar prev = this.generateElement();\r\n\t\t\t\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\t\t\t\t\t\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\t\t\t\t\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.updateGroupRows(true);\r\n\t\t}else{\r\n\t\t\tthis.groupManager.updateGroupRows(true);\r\n\t\t}\r\n\t\t\r\n\t\tthis.groupManager.table.externalEvents.dispatch(\"groupVisibilityChanged\", this.getComponent(), true);\r\n\t}\r\n\t\r\n\t_visSet(){\r\n\t\tvar data = [];\r\n\t\t\r\n\t\tif(typeof this.visible == \"function\"){\r\n\t\t\t\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\t\t\t\r\n\t\t\tthis.visible = this.visible(this.key, this.getRowCount(), data, this.getComponent());\r\n\t\t}\r\n\t}\r\n\t\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\t\t\t\t\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\t\t\r\n\t\treturn match;\r\n\t}\r\n\t\r\n\tgetSubGroups(component){\r\n\t\tvar output = [];\r\n\t\t\r\n\t\tthis.groupList.forEach(function(child){\r\n\t\t\toutput.push(component ? child.getComponent() : child);\r\n\t\t});\r\n\t\t\r\n\t\treturn output;\r\n\t}\r\n\t\r\n\tgetRows(component){\r\n\t\tvar output = [];\r\n\t\t\r\n\t\tthis.rows.forEach(function(row){\r\n\t\t\toutput.push(component ? row.getComponent() : row);\r\n\t\t});\r\n\t\t\r\n\t\treturn output;\r\n\t}\r\n\t\r\n\tgenerateGroupHeaderContents(){\r\n\t\tvar data = [];\r\n\t\t\r\n\t\tthis.rows.forEach(function(row){\r\n\t\t\tdata.push(row.getData());\r\n\t\t});\r\n\t\t\r\n\t\tthis.elementContents = this.generator(this.key, this.getRowCount(), data, this.getComponent());\r\n\t\t\r\n\t\twhile(this.element.firstChild) this.element.removeChild(this.element.firstChild);\r\n\t\t\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\t\t\r\n\t\tthis.element.insertBefore(this.arrowElement, this.element.firstChild);\r\n\t}\r\n\t\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\t\r\n\t////////////// Standard Row Functions //////////////\r\n\t\r\n\tgetElement(){\r\n\t\treturn this.elementContents ? this.element : this.generateElement();\r\n\t}\r\n\t\r\n\tgenerateElement(){\r\n\t\tthis.addBindings = false;\r\n\t\t\r\n\t\tthis._visSet();\r\n\t\t\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\t\t\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\t\t\r\n\t\tthis.generateGroupHeaderContents();\r\n\t\t\r\n\t\t// this.addBindings();\r\n\t\t\r\n\t\treturn this.element;\r\n\t}\r\n\t\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\t\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\t\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\t\r\n\treinitialize(){\r\n\t\tthis.initialized = false;\r\n\t\tthis.height = 0;\r\n\t\t\r\n\t\tif(Helpers.elVisible(this.element)){\r\n\t\t\tthis.initialize(true);\r\n\t\t}\r\n\t}\r\n\t\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\t\r\n\t//return rows outer height\r\n\tgetHeight(){\r\n\t\treturn this.outerHeight;\r\n\t}\r\n\t\r\n\tgetGroup(){\r\n\t\treturn this;\r\n\t}\r\n\t\r\n\treinitializeHeight(){}\r\n\t\r\n\tcalcHeight(){}\r\n\t\r\n\tsetCellHeight(){}\r\n\t\r\n\tclearCellHeight(){}\r\n\t\r\n\tdeinitializeHeight(){}\r\n\t\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\t\t\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 Group from './Group.js';\r\n\r\nclass GroupRows extends Module{\r\n\t\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\t\t\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\t\r\n\t\tthis.displayHandler = this.getRows.bind(this);\r\n\t\t\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\t\t\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\t\t\r\n\t\t//register component functions\r\n\t\tthis.registerComponentFunction(\"row\", \"getGroup\", this.rowGetGroup.bind(this));\r\n\t}\r\n\t\r\n\t//initialize group configuration\r\n\tinitialize(){\r\n\t\tif(this.table.options.groupBy){\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\t\t\t\r\n\t\t\tthis.subscribe(\"table-built\", this.configureGroupSetup.bind(this));\r\n\t\t\t\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\t\t\t\r\n\t\t\tthis.subscribe(\"rows-sample\", this.rowSample.bind(this));\r\n\t\t\t\r\n\t\t\tthis.subscribe(\"render-virtual-fill\", this.virtualRenderFill.bind(this));\r\n\t\t\t\r\n\t\t\tthis.registerDisplayHandler(this.displayHandler, 20);\r\n\t\t\t\r\n\t\t\tthis.initialized = true;\r\n\t\t}\r\n\t}\r\n\t\r\n\tconfigureGroupSetup(){\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\t\t\t\r\n\t\t\tthis.allowedValues = this.table.options.groupValues;\r\n\t\t\t\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\t\t\t\r\n\t\t\tthis.headerGenerator = [function(){return \"\";}];\r\n\t\t\tthis.startOpen = [function(){return false;}]; //starting state of group\r\n\t\t\t\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\t\t\t\r\n\t\t\tthis.groupIDLookups = [];\r\n\t\t\t\r\n\t\t\tif(Array.isArray(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\t\t\t\t\t\r\n\t\t\t\t\tvar cols = this.table.columnManager.getRealColumns();\r\n\t\t\t\t\t\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\t\t\t\t\t\t\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\t\t\t\r\n\t\t\tif(!Array.isArray(groupBy)){\r\n\t\t\t\tgroupBy = [groupBy];\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tgroupBy.forEach((group, i) => {\r\n\t\t\t\tvar lookupFunc, column;\r\n\t\t\t\t\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\t\t\t\t\t\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\t\t\t\t\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\t\t\t\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\t\t\t\t\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\t\t\t\t\r\n\t\t\t\tthis.startOpen = startOpen;\r\n\t\t\t}\r\n\t\t\t\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\t\t}else{\r\n\t\t\tthis.groupList = [];\r\n\t\t\tthis.groups = {};\r\n\t\t}\r\n\t}\r\n\t\r\n\trowSample(rows, prevValue){\r\n\t\tif(this.table.options.groupBy){\r\n\t\t\tvar group = this.getGroups(false)[0];\r\n\t\t\t\r\n\t\t\tprevValue.push(group.getRows(false)[0]);\r\n\t\t}\r\n\t\t\r\n\t\treturn prevValue;\r\n\t}\r\n\t\r\n\tvirtualRenderFill(){\r\n\t\tvar el = this.table.rowManager.tableElement;\r\n\t\tvar rows = this.table.rowManager.getVisibleRows();\r\n\t\t\r\n\t\tif(this.table.options.groupBy){\r\n\t\t\trows = rows.filter((row) => {\r\n\t\t\t\treturn row.type !== \"group\";\r\n\t\t\t});\r\n\t\t\t\r\n\t\t\tel.style.minWidth = !rows.length ? this.table.columnManager.getWidth() + \"px\" : \"\";\r\n\t\t}else{\r\n\t\t\treturn rows;\r\n\t\t}\r\n\t}\r\n\t\r\n\trowAddingIndex(row, index, top){\r\n\t\tif(this.table.options.groupBy){\r\n\t\t\tthis.assignRowToGroup(row);\r\n\t\t\t\r\n\t\t\tvar groupRows = row.modules.group.rows;\r\n\t\t\t\r\n\t\t\tif(groupRows.length > 1){\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.table.rowManager.moveRowInArray(row.modules.group.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.table.rowManager.moveRowInArray(row.modules.group.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.table.rowManager.moveRowInArray(row.modules.group.rows, row, index, !top);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn index;\r\n\t\t}\r\n\t}\r\n\t\r\n\ttrackChanges(){\r\n\t\tthis.dispatch(\"group-changed\");\r\n\t}\r\n\t\r\n\t///////////////////////////////////\r\n\t///////// Table Functions /////////\r\n\t///////////////////////////////////\r\n\t\r\n\tsetGroupBy(groups){\r\n\t\tthis.table.options.groupBy = groups;\r\n\t\t\r\n\t\tif(!this.initialized){\r\n\t\t\tthis.initialize();\r\n\t\t}\r\n\t\t\r\n\t\tthis.configureGroupSetup();\r\n\t\t\r\n\t\tthis.refreshData();\r\n\t\t\r\n\t\tthis.trackChanges();\r\n\t}\r\n\t\r\n\tsetGroupValues(groupValues){\r\n\t\tthis.table.options.groupValues = groupValues;\r\n\t\tthis.configureGroupSetup();\r\n\t\tthis.refreshData();\r\n\t\t\r\n\t\tthis.trackChanges();\r\n\t}\r\n\t\r\n\tsetGroupStartOpen(values){\r\n\t\tthis.table.options.groupStartOpen = values;\r\n\t\tthis.configureGroupSetup();\r\n\t\t\r\n\t\tif(this.table.options.groupBy){\r\n\t\t\tthis.refreshData();\r\n\t\t\t\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\t\r\n\tsetGroupHeader(values){\r\n\t\tthis.table.options.groupHeader = values;\r\n\t\tthis.configureGroupSetup();\r\n\t\t\r\n\t\tif(this.table.options.groupBy){\r\n\t\t\tthis.refreshData();\r\n\t\t\t\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\t\r\n\tuserGetGroups(values){\r\n\t\treturn this.getGroups(true);\r\n\t}\r\n\t\r\n\t// get grouped table data in the same format as getData()\r\n\tuserGetGroupedData(){\r\n\t\treturn this.table.options.groupBy ? this.getGroupedData() : this.getData();\r\n\t}\r\n\t\r\n\t\r\n\t///////////////////////////////////////\r\n\t///////// Component Functions /////////\r\n\t///////////////////////////////////////\r\n\t\r\n\trowGetGroup(row){\r\n\t\treturn row.modules.group ? row.modules.group.getComponent() : false;\r\n\t}\r\n\t\r\n\t///////////////////////////////////\r\n\t///////// Internal Logic //////////\r\n\t///////////////////////////////////\r\n\t\r\n\trowMoving(from, to, after){\r\n\t\tif(this.table.options.groupBy){\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\t\t\t\r\n\t\t\tvar toGroup = to instanceof Group ? to : to.modules.group;\r\n\t\t\tvar fromGroup = from instanceof Group ? from : from.modules.group;\r\n\t\t\t\r\n\t\t\tif(toGroup === fromGroup){\r\n\t\t\t\tthis.table.rowManager.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\t\t\t\t\r\n\t\t\t\ttoGroup.insertRow(from, to, after);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\t\r\n\trowDeleting(row){\r\n\t\t//remove from group\r\n\t\tif(this.table.options.groupBy && row.modules.group){\r\n\t\t\trow.modules.group.removeRow(row);\r\n\t\t}\r\n\t}\r\n\t\r\n\trowsUpdated(row){\r\n\t\tif(this.table.options.groupBy){\r\n\t\t\tthis.updateGroupRows(true);\r\n\t\t}\t\r\n\t}\r\n\t\r\n\tcellUpdated(cell){\r\n\t\tif(this.table.options.groupBy){\r\n\t\t\tthis.reassignRowToGroup(cell.row);\r\n\t\t}\r\n\t}\r\n\t\r\n\t//return appropriate rows with group headers\r\n\tgetRows(rows){\r\n\t\tif(this.table.options.groupBy && this.groupIDLookups.length){\r\n\t\t\t\r\n\t\t\tthis.dispatchExternal(\"dataGrouping\");\r\n\t\t\t\r\n\t\t\tthis.generateGroups(rows);\r\n\t\t\t\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\t\t\t\r\n\t\t\treturn this.updateGroupRows();\r\n\t\t\t\r\n\t\t}else{\r\n\t\t\treturn rows.slice(0);\r\n\t\t}\r\n\t}\r\n\t\r\n\tgetGroups(component){\r\n\t\tvar groupComponents = [];\r\n\t\t\r\n\t\tthis.groupList.forEach(function(group){\r\n\t\t\tgroupComponents.push(component ? group.getComponent() : group);\r\n\t\t});\r\n\t\t\r\n\t\treturn groupComponents;\r\n\t}\r\n\t\r\n\tgetChildGroups(group){\r\n\t\tvar groupComponents = [];\r\n\t\t\r\n\t\tif(!group){\r\n\t\t\tgroup = this;\r\n\t\t}\r\n\t\t\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\t\t\r\n\t\treturn groupComponents;\r\n\t}\r\n\t\r\n\twipe(){\r\n\t\tif(this.table.options.groupBy){\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}\r\n\t}\r\n\t\r\n\tpullGroupListData(groupList) {\r\n\t\tvar groupListData = [];\r\n\t\t\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\t\t\t\r\n\t\t\tif (group.hasSubGroups) {\r\n\t\t\t\tchildData = this.pullGroupListData(group.groupList);\r\n\t\t\t\t\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\t\t\t\t\r\n\t\t\t\tgroupListData.push(groupHeader);\r\n\t\t\t\tgroupListData = groupListData.concat(childData);\r\n\t\t\t}\r\n\t\t\t\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\t\t\t\t\r\n\t\t\t\tgroupListData.push(groupHeader);\r\n\t\t\t\t\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\t\t\r\n\t\treturn groupListData;\r\n\t}\r\n\t\r\n\tgetGroupedData(){\r\n\t\t\r\n\t\treturn this.pullGroupListData(this.groupList);\r\n\t}\r\n\t\r\n\tgetRowGroup(row){\r\n\t\tvar match = false;\r\n\t\t\r\n\t\tif(this.options(\"dataTree\")){\r\n\t\t\trow = this.table.modules.dataTree.getTreeParentRoot(row);\r\n\t\t}\r\n\t\t\r\n\t\tthis.groupList.forEach((group) => {\r\n\t\t\tvar result = group.getRowGroup(row);\r\n\t\t\t\r\n\t\t\tif(result){\r\n\t\t\t\tmatch = result;\r\n\t\t\t}\r\n\t\t});\r\n\t\t\r\n\t\treturn match;\r\n\t}\r\n\t\r\n\tcountGroups(){\r\n\t\treturn this.groupList.length;\r\n\t}\r\n\t\r\n\tgenerateGroups(rows){\r\n\t\tvar oldGroups = this.groups;\r\n\t\t\r\n\t\tthis.groups = {};\r\n\t\tthis.groupList = [];\r\n\t\t\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\t\t\t\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\t\r\n\tcreateGroup(groupID, level, oldGroups){\r\n\t\tvar groupKey = level + \"_\" + groupID,\r\n\t\tgroup;\r\n\t\t\r\n\t\toldGroups = oldGroups || [];\r\n\t\t\r\n\t\tgroup = new Group(this, false, level, groupID, this.groupIDLookups[0].field, this.headerGenerator[0], oldGroups[groupKey]);\r\n\t\t\r\n\t\tthis.groups[groupKey] = group;\r\n\t\tthis.groupList.push(group);\r\n\t}\r\n\t\r\n\tassignRowToExistingGroup(row, oldGroups){\r\n\t\tvar groupID = this.groupIDLookups[0].func(row.getData()),\r\n\t\tgroupKey = \"0_\" + groupID;\r\n\t\t\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\t\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\t\t\r\n\t\tif(newGroupNeeded){\r\n\t\t\tthis.createGroup(groupID, 0, oldGroups);\r\n\t\t}\r\n\t\t\r\n\t\tthis.groups[\"0_\" + groupID].addRow(row);\r\n\t\t\r\n\t\treturn !newGroupNeeded;\r\n\t}\r\n\t\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;\r\n\t\t\t\r\n\t\t\t// figure out if new group path is the same as old group path\r\n\t\t\tsamePath = (oldGroupPath.length == newGroupPath.length) && oldGroupPath.every((element, index) => {\r\n\t\t\t\treturn element === newGroupPath[index];\r\n\t\t\t});\r\n\t\t\t\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\t\r\n\tgetExpectedPath(row) {\r\n\t\tvar groupPath = [], rowData = row.getData();\r\n\t\t\r\n\t\tthis.groupIDLookups.forEach((groupId) => {\r\n\t\t\tgroupPath.push(groupId.func(rowData));\r\n\t\t});\r\n\t\t\r\n\t\treturn groupPath;\r\n\t}\r\n\t\r\n\tupdateGroupRows(force){\r\n\t\tvar output = [];\r\n\t\t\r\n\t\tthis.groupList.forEach((group) => {\r\n\t\t\toutput = output.concat(group.getHeadersAndRows());\r\n\t\t});\r\n\t\t\r\n\t\tif(force){\r\n\t\t\tthis.refreshData(true, this.displayHandler);\r\n\t\t}\r\n\t\t\r\n\t\treturn output;\r\n\t}\r\n\t\r\n\tscrollHeaders(left){\r\n\t\tif(this.table.options.groupBy){\r\n\t\t\tif(this.table.options.renderHorizontal === \"virtual\"){\r\n\t\t\t\tleft -= this.table.columnManager.renderer.vDomPadLeft;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tleft = left + \"px\";\r\n\t\t\t\r\n\t\t\tthis.groupList.forEach((group) => {\r\n\t\t\t\tgroup.scrollHeader(left);\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\t\r\n\tremoveGroup(group){\r\n\t\tvar groupKey = group.level + \"_\" + group.key,\r\n\t\tindex;\r\n\t\t\r\n\t\tif(this.groups[groupKey]){\r\n\t\t\tdelete this.groups[groupKey];\r\n\t\t\t\r\n\t\t\tindex = this.groupList.indexOf(group);\r\n\t\t\t\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\t\r\n\tcheckBasicModeGroupHeaderWidth(){\r\n\t\tvar element = this.table.rowManager.tableElement,\r\n\t\tonlyGroupHeaders = true;\r\n\t\t\r\n\t\tthis.table.rowManager.getDisplayRows().forEach((row, index) =>{\r\n\t\t\tthis.table.rowManager.styleRow(row, index);\r\n\t\t\telement.appendChild(row.getElement());\r\n\t\t\trow.initialize(true);\r\n\t\t\t\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\t\t\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\t\r\n}\r\n\r\nGroupRows.moduleName = \"groupRows\";\r\n\r\nexport default GroupRows;","import Module from '../../core/Module.js';\r\nimport Row from '../../core/row/Row.js';\r\nimport Cell from '../../core/cell/Cell.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.cellUpdated.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.rowAdded.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:from.getPosition(), posTo:to.getPosition(), 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()._getSelf().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.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\taction.component.cellRendered();\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\taction.component.cellRendered();\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.tableElementCheck();\r\n\t}\r\n\r\n\ttableElementCheck(){\r\n\t\tif(this.table.originalElement && this.table.originalElement.tagName === \"TABLE\"){\r\n\t\t\tif(this.table.originalElement.childNodes.length){\r\n\t\t\t\tthis.parseTable();\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Unable to parse data from empty table tag, Tabulator should be initialized on a div tag unless importing data from a table element.\");\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tparseTable(){\r\n\t\tvar element = this.table.originalElement,\r\n\t\toptions = this.table.options,\r\n\t\theaders = element.getElementsByTagName(\"th\"),\r\n\t\trows = element.getElementsByTagName(\"tbody\")[0],\r\n\t\tdata = [];\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 Tabulator 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 don't 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\toptions.data = data;\r\n\r\n\t\tthis.dispatchExternal(\"htmlImported\");\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.keys(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;\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 Tabulator inline options\r\n\t\t\tthis._extractOptions(header, col, this.table.columnManager.optionsList.registeredDefaults);\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 csv from './importers/csv.js';\r\nimport json from './importers/json.js';\r\nimport array from './importers/array.js';\r\n\r\nexport default {\r\n\tcsv:csv,\r\n\tjson:json,\r\n\tarray:array,\r\n};","function csvImporter(input){\r\n\tvar data = [],\r\n\trow = 0, \r\n\tcol = 0,\r\n\tinQuote = false;\r\n \r\n\t//Iterate over each character\r\n\tfor (let index = 0; index < input.length; index++) {\r\n\t\tlet char = input[index], \r\n\t\tnextChar = input[index+1]; \r\n \r\n\t\t//Initialize empty row\r\n\t\tif(!data[row]){\r\n\t\t\tdata[row] = [];\r\n\t\t}\r\n\r\n\t\t//Initialize empty column\r\n\t\tif(!data[row][col]){\r\n\t\t\tdata[row][col] = \"\";\r\n\t\t}\r\n \r\n\t\t//Handle quotation mark inside string\r\n\t\tif (char == '\"' && inQuote && nextChar == '\"') { \r\n\t\t\tdata[row][col] += char; \r\n\t\t\tindex++;\r\n\t\t\tcontinue; \r\n\t\t}\r\n \r\n\t\t//Begin / End Quote\r\n\t\tif (char == '\"') { \r\n\t\t\tinQuote = !inQuote;\r\n\t\t\tcontinue;\r\n\t\t}\r\n \r\n\t\t//Next column (if not in quote)\r\n\t\tif (char == ',' && !inQuote) { \r\n\t\t\tcol++;\r\n\t\t\tcontinue; \r\n\t\t}\r\n \r\n\t\t//New row if new line and not in quote (CRLF) \r\n\t\tif (char == '\\r' && nextChar == '\\n' && !inQuote) { \r\n\t\t\tcol = 0; \r\n\t\t\trow++; \r\n\t\t\tindex++; \r\n\t\t\tcontinue; \r\n\t\t}\r\n \r\n\t\t//New row if new line and not in quote (CR or LF) \r\n\t\tif ((char == '\\r' || char == '\\n') && !inQuote) { \r\n\t\t\tcol = 0;\r\n\t\t\trow++;\r\n\t\t\tcontinue; \r\n\t\t}\r\n\r\n\t\t//Normal Character, append to column\r\n\t\tdata[row][col] += char;\r\n\t}\r\n\r\n\treturn data;\r\n}\r\n\r\nexport default csvImporter;","export default function(input){\r\n\ttry {\r\n\t\treturn JSON.parse(input);\r\n\t} catch(e) {\r\n\t\tconsole.warn(\"JSON Import Error - File contents is invalid JSON\", e);\r\n\t\treturn Promise.reject();\r\n\t}\r\n}","function arrayImporter(input){\r\n\treturn input;\r\n}\r\n\r\nexport default arrayImporter;","import Module from '../../core/Module.js';\r\n\r\nimport defaultImporters from './defaults/importers.js';\r\n\r\nclass Import extends Module{\r\n \r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n \r\n\t\tthis.registerTableOption(\"importFormat\");\r\n\t\tthis.registerTableOption(\"importReader\", \"text\");\r\n\t}\r\n \r\n\tinitialize(){\r\n\t\tthis.registerTableFunction(\"import\", this.importFromFile.bind(this));\r\n\r\n\t\tif(this.table.options.importFormat){\r\n\t\t\tthis.subscribe(\"data-loading\", this.loadDataCheck.bind(this), 10);\r\n\t\t\tthis.subscribe(\"data-load\", this.loadData.bind(this), 10);\r\n\t\t}\r\n\t}\r\n\r\n\tloadDataCheck(data){\r\n\t\treturn this.table.options.importFormat && (typeof data === \"string\" || (Array.isArray(data) && data.length && Array.isArray(data)));\r\n\t}\r\n\r\n\tloadData(data, params, config, silent, previousData){\r\n\t\treturn this.importData(this.lookupImporter(), data)\r\n\t\t\t.then(this.structureData.bind(this))\r\n\t\t\t.catch((err) => {\r\n\t\t\t\tconsole.error(\"Import Error:\", err || \"Unable to import data\");\r\n\t\t\t\treturn Promise.reject(err);\r\n\t\t\t});\r\n\t}\r\n\r\n\tlookupImporter(importFormat){\r\n\t\tvar importer;\r\n \r\n\t\tif(!importFormat){\r\n\t\t\timportFormat = this.table.options.importFormat;\r\n\t\t}\r\n \r\n\t\tif(typeof importFormat === \"string\"){\r\n\t\t\timporter = Import.importers[importFormat];\r\n\t\t}else{\r\n\t\t\timporter = importFormat;\r\n\t\t}\r\n\r\n\t\tif(!importer){\r\n\t\t\tconsole.error(\"Import Error - Importer not found:\", importFormat);\r\n\t\t}\r\n \r\n\t\treturn importer;\r\n\t}\r\n \r\n\timportFromFile(importFormat, extension){\r\n\t\tvar importer = this.lookupImporter(importFormat);\r\n \r\n\t\tif(importer){\r\n\t\t\treturn this.pickFile(extension)\r\n\t\t\t\t.then(this.importData.bind(this, importer))\r\n\t\t\t\t.then(this.structureData.bind(this))\r\n\t\t\t\t.then(this.setData.bind(this))\r\n\t\t\t\t.catch((err) => {\r\n\t\t\t\t\tconsole.error(\"Import Error:\", err || \"Unable to import file\");\r\n\t\t\t\t\treturn Promise.reject(err);\r\n\t\t\t\t});\r\n\t\t}\r\n\t}\r\n \r\n\tpickFile(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;\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 \r\n\t\t\t\tswitch(this.table.options.importReader){\r\n\t\t\t\t\tcase \"buffer\":\r\n\t\t\t\t\t\treader.readAsArrayBuffer(file);\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase \"binary\":\r\n\t\t\t\t\t\treader.readAsBinaryString(file);\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase \"url\":\r\n\t\t\t\t\t\treader.readAsDataURL(file);\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase \"text\":\r\n\t\t\t\t\tdefault:\r\n\t\t\t\t\t\treader.readAsText(file);\r\n\t\t\t\t}\r\n \r\n\t\t\t\treader.onload = (e) => {\r\n\t\t\t\t\tresolve(reader.result);\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\timportData(importer, fileContents){\r\n\t\tvar data = importer.call(this.table, fileContents);\r\n \r\n\t\tif(data instanceof Promise){\r\n\t\t\treturn data;\r\n\t\t}else{\r\n\t\t\treturn data ? Promise.resolve(data) : Promise.reject();\r\n\t\t}\r\n\t}\r\n\r\n\tstructureData(parsedData){\r\n\t\tvar data = [];\r\n \r\n\t\tif(Array.isArray(parsedData) && parsedData.length && Array.isArray(parsedData[0])){\r\n\t\t\tif(this.table.options.autoColumns){\r\n\t\t\t\tdata = this.structureArrayToObject(parsedData);\r\n\t\t\t}else{\r\n\t\t\t\tdata = this.structureArrayToColumns(parsedData);\r\n\t\t\t}\r\n\r\n\t\t\treturn data;\r\n\t\t}else{\r\n\t\t\treturn parsedData;\r\n\t\t}\r\n\t}\r\n\r\n\tstructureArrayToObject(parsedData){\r\n\t\tvar columns = parsedData.shift();\r\n\r\n\t\tvar data = parsedData.map((values) => {\r\n\t\t\tvar row = {};\r\n\r\n\t\t\tcolumns.forEach((key, i) => {\r\n\t\t\t\trow[key] = values[i];\r\n\t\t\t});\r\n\r\n\t\t\treturn row;\r\n\t\t});\r\n\r\n\t\treturn data;\r\n\t}\r\n\r\n\tstructureArrayToColumns(parsedData){\r\n\t\tvar data = [],\r\n\t\tcolumns = this.table.getColumns();\r\n\r\n\t\t//remove first row if it is the column names\r\n\t\tif(columns[0] && parsedData[0][0]){\r\n\t\t\tif(columns[0].getDefinition().title === parsedData[0][0]){\r\n\t\t\t\tparsedData.shift();\r\n\t\t\t}\r\n\t\t}\r\n \r\n\t\t//convert row arrays to objects\r\n\t\tparsedData.forEach((rowData) => {\r\n\t\t\tvar row = {};\r\n\r\n\t\t\trowData.forEach((value, index) => {\r\n\t\t\t\tvar column = columns[index];\r\n\r\n\t\t\t\tif(column){\r\n\t\t\t\t\trow[column.getField()] = value;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tdata.push(row);\r\n\t\t});\r\n\r\n\t\treturn data;\r\n\t}\r\n \r\n\tsetData(data){\r\n\t\treturn this.table.setData(data);\r\n\t}\r\n}\r\n\r\nImport.moduleName = \"import\";\r\n\r\n//load defaults\r\nImport.importers = defaultImporters;\r\n\r\nexport default Import;","import Module from '../../core/Module.js';\r\n\r\nimport Cell from '../../core/cell/Cell.js';\r\nimport Column from '../../core/column/Column.js';\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\tgroup:{\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\tvar range;\r\n\r\n\t\tif(this.table.modExists(\"edit\")){\r\n\t\t\tif (this.table.modules.edit.currentCell === cell){\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\trange = document.body.createTextRange();\r\n\t\t\t\trange.moveToElementText(cell.getElement());\r\n\t\t\t\trange.select();\r\n\t\t\t} else if (window.getSelection) {\r\n\t\t\t\trange = document.createRange();\r\n\t\t\t\trange.selectNode(cell.getElement());\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\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\t\twatchers.tap = true;\r\n\r\n\t\t\t\tclearTimeout(watchers.tapHold);\r\n\r\n\t\t\t\twatchers.tapHold = setTimeout(() => {\r\n\t\t\t\t\tclearTimeout(watchers.tapHold);\r\n\t\t\t\t\twatchers.tapHold = null;\r\n\r\n\t\t\t\t\twatchers.tap = null;\r\n\t\t\t\t\tclearTimeout(watchers.tapDbl);\r\n\t\t\t\t\twatchers.tapDbl = null;\r\n\r\n\t\t\t\t\tthis.dispatchEvent(type + \"TapHold\", e, component);\r\n\t\t\t\t}, 1000);\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase \"end\":\r\n\t\t\t\tif(watchers.tap){\r\n\r\n\t\t\t\t\twatchers.tap = null;\r\n\t\t\t\t\tthis.dispatchEvent(type + \"Tap\", e, component);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(watchers.tapDbl){\r\n\t\t\t\t\tclearTimeout(watchers.tapDbl);\r\n\t\t\t\t\twatchers.tapDbl = null;\r\n\r\n\t\t\t\t\tthis.dispatchEvent(type + \"DblTap\", e, component);\r\n\t\t\t\t}else{\r\n\t\t\t\t\twatchers.tapDbl = setTimeout(() => {\r\n\t\t\t\t\t\tclearTimeout(watchers.tapDbl);\r\n\t\t\t\t\t\twatchers.tapDbl = null;\r\n\t\t\t\t\t}, 300);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tclearTimeout(watchers.tapHold);\r\n\t\t\t\twatchers.tapHold = null;\r\n\t\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;\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\t\t\tObject.assign(mergedBindings, Keybindings.bindings);\r\n\t\t\tObject.assign(mergedBindings, bindings);\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\tvar bindingList = Array.isArray(binding) ? binding : [binding];\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\tbindingList.forEach((item) => {\r\n\t\t\t\t\t\t\tthis.mapBinding(key, item);\r\n\t\t\t\t\t\t});\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(\"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\t\tbinding.ctrl = true;\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"shift\":\r\n\t\t\t\t\tbinding.shift = true;\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"meta\":\r\n\t\t\t\t\tbinding.meta = true;\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tsymbol = isNaN(symbol) ? symbol.toUpperCase().charCodeAt(0) : parseInt(symbol);\r\n\t\t\t\t\tbinding.keys.push(symbol);\r\n\r\n\t\t\t\t\tif(!this.watchKeys[symbol]){\r\n\t\t\t\t\t\tthis.watchKeys[symbol] = [];\r\n\t\t\t\t\t}\r\n\r\n\t\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\", \"meta + 90\"],\r\n\tredo:[\"ctrl + 89\", \"meta + 89\"],\r\n\tcopyToClipboard:[\"ctrl + 67\", \"meta + 89\"],\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\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\nclass Menu extends Module{\r\n\t\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\t\t\r\n\t\tthis.menuContainer = null;\r\n\t\tthis.nestedMenuBlock = false;\r\n\t\t\r\n\t\tthis.currentComponent = null;\r\n\t\tthis.rootPopup = null;\r\n\t\t\r\n\t\tthis.columnSubscribers = {};\r\n\t\t\r\n\t\tthis.registerTableOption(\"menuContainer\", undefined); //deprecated\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\t\t\r\n\t\tthis.registerColumnOption(\"headerContextMenu\");\r\n\t\tthis.registerColumnOption(\"headerClickMenu\");\r\n\t\tthis.registerColumnOption(\"headerMenu\");\r\n\t\tthis.registerColumnOption(\"headerMenuIcon\");\r\n\t\tthis.registerColumnOption(\"contextMenu\");\r\n\t\tthis.registerColumnOption(\"clickMenu\");\r\n\t\t\r\n\t}\r\n\t\r\n\tinitialize(){\r\n\t\tthis.deprecatedOptionsCheck();\r\n\t\tthis.initializeRowWatchers();\r\n\t\tthis.initializeGroupWatchers();\r\n\t\t\r\n\t\tthis.subscribe(\"column-init\", this.initializeColumn.bind(this));\r\n\t}\r\n\r\n\tdeprecatedOptionsCheck(){\r\n\t\tif(!this.deprecationCheck(\"menuContainer\", \"popupContainer\")){\r\n\t\t\tthis.table.options.popupContainer = this.table.options.menuContainer;\r\n\t\t}\r\n\t}\t\r\n\t\r\n\tinitializeRowWatchers(){\r\n\t\tif(this.table.options.rowContextMenu){\r\n\t\t\tthis.subscribe(\"row-contextmenu\", this.loadMenuEvent.bind(this, this.table.options.rowContextMenu));\r\n\t\t\tthis.table.on(\"rowTapHold\", this.loadMenuEvent.bind(this, this.table.options.rowContextMenu));\r\n\t\t}\r\n\t\t\r\n\t\tif(this.table.options.rowClickMenu){\r\n\t\t\tthis.subscribe(\"row-click\", this.loadMenuEvent.bind(this, this.table.options.rowClickMenu));\r\n\t\t}\r\n\t}\r\n\t\r\n\tinitializeGroupWatchers(){\r\n\t\tif(this.table.options.groupContextMenu){\r\n\t\t\tthis.subscribe(\"group-contextmenu\", this.loadMenuEvent.bind(this, this.table.options.groupContextMenu));\r\n\t\t\tthis.table.on(\"groupTapHold\", this.loadMenuEvent.bind(this, this.table.options.groupContextMenu));\r\n\t\t}\r\n\t\t\r\n\t\tif(this.table.options.groupClickMenu){\r\n\t\t\tthis.subscribe(\"group-click\", this.loadMenuEvent.bind(this, this.table.options.groupClickMenu));\r\n\t\t}\r\n\t}\r\n\t\r\n\tinitializeColumn(column){\r\n\t\tvar\tdef = column.definition;\r\n\t\t\r\n\t\t//handle column events\r\n\t\tif(def.headerContextMenu && !this.columnSubscribers.headerContextMenu){\r\n\t\t\tthis.columnSubscribers.headerContextMenu = this.loadMenuTableColumnEvent.bind(this, \"headerContextMenu\");\r\n\t\t\tthis.subscribe(\"column-contextmenu\", this.columnSubscribers.headerContextMenu);\r\n\t\t\tthis.table.on(\"headerTapHold\", this.loadMenuTableColumnEvent.bind(this, \"headerContextMenu\"));\r\n\t\t}\r\n\t\t\r\n\t\tif(def.headerClickMenu && !this.columnSubscribers.headerClickMenu){\r\n\t\t\tthis.columnSubscribers.headerClickMenu = this.loadMenuTableColumnEvent.bind(this, \"headerClickMenu\");\r\n\t\t\tthis.subscribe(\"column-click\", this.columnSubscribers.headerClickMenu);\r\n\t\t}\r\n\t\t\r\n\t\tif(def.headerMenu){\r\n\t\t\tthis.initializeColumnHeaderMenu(column);\r\n\t\t}\r\n\t\t\r\n\t\t//handle cell events\r\n\t\tif(def.contextMenu && !this.columnSubscribers.contextMenu){\r\n\t\t\tthis.columnSubscribers.contextMenu = this.loadMenuTableCellEvent.bind(this, \"contextMenu\");\r\n\t\t\tthis.subscribe(\"cell-contextmenu\", this.columnSubscribers.contextMenu);\r\n\t\t\tthis.table.on(\"cellTapHold\", this.loadMenuTableCellEvent.bind(this, \"contextMenu\"));\r\n\t\t}\r\n\t\t\r\n\t\tif(def.clickMenu && !this.columnSubscribers.clickMenu){\r\n\t\t\tthis.columnSubscribers.clickMenu = this.loadMenuTableCellEvent.bind(this, \"clickMenu\");\r\n\t\t\tthis.subscribe(\"cell-click\", this.columnSubscribers.clickMenu);\r\n\t\t}\r\n\t}\r\n\t\r\n\tinitializeColumnHeaderMenu(column){\r\n\t\tvar icon = column.definition.headerMenuIcon,\r\n\t\theaderMenuEl;\r\n\t\t\r\n\t\theaderMenuEl = document.createElement(\"span\");\r\n\t\theaderMenuEl.classList.add(\"tabulator-header-popup-button\");\r\n\r\n\t\tif(icon){\r\n\t\t\tif(typeof icon === \"function\"){\r\n\t\t\t\ticon = icon(column.getComponent());\r\n\t\t\t}\r\n\r\n\t\t\tif(icon instanceof HTMLElement){\r\n\t\t\t\theaderMenuEl.appendChild(icon);\r\n\t\t\t}else{\r\n\t\t\t\theaderMenuEl.innerHTML = icon;\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\theaderMenuEl.innerHTML = \"⋮\";\r\n\t\t}\r\n\t\t\r\n\t\theaderMenuEl.addEventListener(\"click\", (e) => {\r\n\t\t\te.stopPropagation();\r\n\t\t\te.preventDefault();\r\n\t\t\t\r\n\t\t\tthis.loadMenuEvent(column.definition.headerMenu, e, column);\r\n\t\t});\r\n\t\t\r\n\t\tcolumn.titleElement.insertBefore(headerMenuEl, column.titleElement.firstChild);\r\n\t}\r\n\t\r\n\tloadMenuTableCellEvent(option, e, cell){\r\n\t\tif(cell._cell){\r\n\t\t\tcell = cell._cell;\r\n\t\t}\r\n\t\t\r\n\t\tif(cell.column.definition[option]){\r\n\t\t\tthis.loadMenuEvent(cell.column.definition[option], e, cell);\r\n\t\t}\r\n\t}\r\n\t\r\n\tloadMenuTableColumnEvent(option, e, column){\r\n\t\tif(column._column){\r\n\t\t\tcolumn = column._column;\r\n\t\t}\r\n\t\t\r\n\t\tif(column.definition[option]){\r\n\t\t\tthis.loadMenuEvent(column.definition[option], e, column);\r\n\t\t}\r\n\t}\r\n\t\r\n\tloadMenuEvent(menu, e, component){\r\n\t\tif(component._group){\r\n\t\t\tcomponent = component._group;\r\n\t\t}else if(component._row){\r\n\t\t\tcomponent = component._row;\r\n\t\t}\r\n\t\t\r\n\t\tmenu = typeof menu == \"function\" ? menu.call(this.table, e, component.getComponent()) : menu;\r\n\t\t\r\n\t\tthis.loadMenu(e, component, menu);\r\n\t}\r\n\t\r\n\tloadMenu(e, component, menu, parentEl, parentPopup){\r\n\t\tvar touch = !(e instanceof MouseEvent),\t\t\r\n\t\tmenuEl = document.createElement(\"div\"),\r\n\t\tpopup;\r\n\t\t\r\n\t\tmenuEl.classList.add(\"tabulator-menu\");\r\n\t\t\r\n\t\tif(!touch){\r\n\t\t\te.preventDefault();\r\n\t\t}\r\n\t\t\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\t\t\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.rootPopup){\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\t\t\t\r\n\t\t\tif(this.rootPopup){\r\n\t\t\t\tthis.rootPopup.hide();\t\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tthis.rootPopup = popup = this.popup(menuEl);\r\n\t\t\t\r\n\t\t}else{\r\n\t\t\tpopup = parentPopup.child(menuEl);\r\n\t\t}\r\n\t\t\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\t\t\t\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\t\t\t\t\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\t\t\t\t\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\t\t\t\t\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\t\t\t\t\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.loadMenu(e, component, item.menu, itemEl, popup);\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\t\t\t\t\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\t\t\t\r\n\t\t\tmenuEl.appendChild(itemEl);\r\n\t\t});\r\n\t\t\r\n\t\tmenuEl.addEventListener(\"click\", (e) => {\r\n\t\t\tthis.rootPopup.hide();\r\n\t\t});\r\n\t\t\r\n\t\tpopup.show(parentEl || e);\r\n\t\t\r\n\t\tif(popup === this.rootPopup){\r\n\t\t\tthis.rootPopup.hideOnBlur(() => {\r\n\t\t\t\tthis.rootPopup = null;\r\n\t\t\t\t\r\n\t\t\t\tif(this.currentComponent){\r\n\t\t\t\t\tthis.dispatchExternal(\"menuClosed\", this.currentComponent.getComponent());\r\n\t\t\t\t\tthis.currentComponent = null;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tthis.currentComponent = component;\r\n\r\n\t\t\tthis.dispatchExternal(\"menuOpened\", component.getComponent());\r\n\t\t}\r\n\t}\r\n}\r\n\r\nMenu.moduleName = \"menu\";\r\n\r\nexport default Menu;\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\t\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\t\t\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 destination 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\t\t\r\n\t\tthis.moveHover = this.moveHover.bind(this);\r\n\t\tthis.endMove = this.endMove.bind(this);\r\n\t\t\r\n\t\tthis.registerTableOption(\"movableColumns\", false); //enable movable columns\r\n\t}\r\n\t\r\n\tcreatePlaceholderElement(){\r\n\t\tvar el = document.createElement(\"div\");\r\n\t\t\r\n\t\tel.classList.add(\"tabulator-col\");\r\n\t\tel.classList.add(\"tabulator-col-placeholder\");\r\n\t\t\r\n\t\treturn el;\r\n\t}\r\n\t\r\n\tinitialize(){\r\n\t\tif(this.table.options.movableColumns){\r\n\t\t\tthis.subscribe(\"column-init\", this.initializeColumn.bind(this));\r\n\t\t}\r\n\t}\r\n\t\r\n\tinitializeColumn(column){\r\n\t\tvar self = this,\r\n\t\tconfig = {},\r\n\t\tcolEl;\r\n\t\t\r\n\t\tif(!column.modules.frozen && !column.isGroup){\r\n\t\t\tcolEl = column.getElement();\r\n\t\t\t\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\t\t\t\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\t\t\t\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\t\t\t\r\n\t\t\tself.bindTouchEvents(column);\r\n\t\t}\r\n\t\t\r\n\t\tcolumn.modules.moveColumn = config;\r\n\t}\r\n\t\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\tnextCol, prevCol, nextColWidth, prevColWidth, nextColWidthLast, prevColWidthLast;\r\n\t\t\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\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\t\t\t\t\r\n\t\t\t\tthis.startMove(e, column);\r\n\t\t\t}, this.checkPeriod);\r\n\t\t}, {passive: true});\r\n\t\t\r\n\t\tcolEl.addEventListener(\"touchmove\", (e) => {\r\n\t\t\tvar diff, moveToCol;\r\n\t\t\t\r\n\t\t\tif(this.moving){\r\n\t\t\t\tthis.moveHover(e);\r\n\t\t\t\t\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\t\t\t\t\r\n\t\t\t\tdiff = e.touches[0].pageX - startXMove;\r\n\t\t\t\t\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\t\t\t\t\t\t\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\t\t\t\t\t\t\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\t\t\t\t\r\n\t\t\t\tif(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\t\t\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\t\r\n\tstartMove(e, column){\r\n\t\tvar element = column.getElement(),\r\n\t\theaderElement = this.table.columnManager.getElement(),\r\n\t\theadersElement = this.table.columnManager.getHeadersElement();\r\n\t\t\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\t\t\r\n\t\tthis.table.element.classList.add(\"tabulator-block-select\");\r\n\t\t\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\t\t\r\n\t\telement.parentNode.insertBefore(this.placeholderElement, element);\r\n\t\telement.parentNode.removeChild(element);\r\n\t\t\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\t\t\r\n\t\tthis.table.columnManager.getElement().appendChild(this.hoverElement);\r\n\t\t\r\n\t\tthis.hoverElement.style.left = \"0\";\r\n\t\tthis.hoverElement.style.bottom = (headerElement.clientHeight - headersElement.offsetHeight) + \"px\";\r\n\t\t\r\n\t\tif(!this.touchMove){\r\n\t\t\tthis._bindMouseMove();\r\n\t\t\t\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\t\t\r\n\t\tthis.moveHover(e);\r\n\t}\r\n\t\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\t\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\t\r\n\tmoveColumn(column, after){\r\n\t\tvar movingCells = this.moving.getCells();\r\n\t\t\r\n\t\tthis.toCol = column;\r\n\t\tthis.toColAfter = after;\r\n\t\t\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\t\r\n\t\t\t\tif(cellEl.parentNode && movingCells[i]){\r\n\t\t\t\t\tcellEl.parentNode.insertBefore(movingCells[i].getElement(), cellEl.nextSibling);\r\n\t\t\t\t}\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\t\r\n\t\t\t\tif(cellEl.parentNode && movingCells[i]){\r\n\t\t\t\t\tcellEl.parentNode.insertBefore(movingCells[i].getElement(), cellEl);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\t\r\n\tendMove(e){\r\n\t\tif(e.which === 1 || this.touchMove){\r\n\t\t\tthis._unbindMouseMove();\r\n\t\t\t\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\t\t\t\r\n\t\t\tthis.table.element.classList.remove(\"tabulator-block-select\");\r\n\t\t\t\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\t\t\t\r\n\t\t\tthis.moving = false;\r\n\t\t\tthis.toCol = false;\r\n\t\t\tthis.toColAfter = false;\r\n\t\t\t\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\t\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\t\t\r\n\t\tthis.hoverElement.style.left = (xPos - this.startX) + \"px\";\r\n\t\t\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\t\t\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 destination 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\r\n\t\t//inter table drag drop\r\n\t\tconfig.mouseup = function(e){\r\n\t\t\tself.tableRowDrop(e, group);\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;\r\n\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\trowEl = 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\trowEl = 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\tnextRow, 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\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 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\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 && 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 && 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.dispatchExternal(\"rowMoving\", row.getComponent());\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}else{\r\n\t\t\t\tthis.dispatchExternal(\"rowMoveCancelled\", this.moving.getComponent());\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\t\r\n\t\tthis.hoverElement.style.top = Math.min(yPos - this.startY, this.table.rowManager.element.scrollHeight - this.hoverElement.offsetHeight) + \"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\tthis.dispatchExternal(\"movableRowsElementDrop\", e, element, row ? row.getComponent() : false);\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 incoming 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\t\tsender = this.senders[this.table.options.movableRowsSender];\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"function\":\r\n\t\t\t\t\tsender = this.table.options.movableRowsSender;\r\n\t\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 ? this.moving.getComponent() : undefined, 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\t\treceiver = this.receivers[this.table.options.movableRowsReceiver];\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase \"function\":\r\n\t\t\t\treceiver = this.table.options.movableRowsReceiver;\r\n\t\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\t\treturn this.connect(table, data.row);\r\n\r\n\t\t\tcase \"disconnect\":\r\n\t\t\t\treturn this.disconnect(table);\r\n\r\n\t\t\tcase \"dropcomplete\":\r\n\t\t\t\treturn this.dropComplete(table, data.row, data.success);\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 mutation 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\tthis.registerColumnOption(\"mutateLink\");\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(\"cell-value-changed\", this.mutateLink.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\t\tif(Mutator.mutators[value]){\r\n\t\t\t\t\tmutator = Mutator.mutators[value];\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.warn(\"Mutator Error - No such mutator found, ignoring: \", value);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase \"function\":\r\n\t\t\t\tmutator = value;\r\n\t\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\tmutateLink(cell){\r\n\t\tvar links = cell.column.definition.mutateLink;\r\n\r\n\t\tif(links){\r\n\t\t\tif(!Array.isArray(links)){\r\n\t\t\t\tlinks = [links];\r\n\t\t\t}\r\n\r\n\t\t\tlinks.forEach((link) => {\r\n\t\t\t\tvar linkCell = cell.row.getCell(link);\r\n\r\n\t\t\t\tif(linkCell){\r\n\t\t\t\t\tlinkCell.setValue(linkCell.getValue(), true, true);\r\n\t\t\t\t}\r\n\t\t\t});\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 rows from './pageCounters/rows.js';\r\nimport pages from './pageCounters/pages.js';\r\n\r\n\r\nexport default {\r\n\trows:rows,\r\n\tpages:pages,\r\n};","export default function(pageSize, currentRow, currentPage, totalRows, totalPages){\r\n\tvar el = document.createElement(\"span\"),\r\n\tshowingEl = document.createElement(\"span\"),\r\n\tvalueEl = document.createElement(\"span\"),\r\n\tofEl = document.createElement(\"span\"),\r\n\ttotalEl = document.createElement(\"span\"),\r\n\trowsEl = document.createElement(\"span\");\r\n\r\n\tthis.table.modules.localize.langBind(\"pagination|counter|showing\", (value) => {\r\n\t\tshowingEl.innerHTML = value;\r\n\t});\r\n\r\n\tthis.table.modules.localize.langBind(\"pagination|counter|of\", (value) => {\r\n\t\tofEl.innerHTML = value;\r\n\t});\r\n\r\n\tthis.table.modules.localize.langBind(\"pagination|counter|rows\", (value) => {\r\n\t\trowsEl.innerHTML = value;\r\n\t});\r\n\r\n\tif(totalRows){\r\n\t\tvalueEl.innerHTML = \" \" + currentRow + \"-\" + Math.min((currentRow + pageSize - 1), totalRows) + \" \";\r\n\t\t\r\n\t\ttotalEl.innerHTML = \" \" + totalRows + \" \";\r\n\t\t\r\n\t\tel.appendChild(showingEl);\r\n\t\tel.appendChild(valueEl);\r\n\t\tel.appendChild(ofEl);\r\n\t\tel.appendChild(totalEl);\r\n\t\tel.appendChild(rowsEl);\r\n\t}else{\r\n\t\tvalueEl.innerHTML = \" 0 \";\r\n\r\n\t\tel.appendChild(showingEl);\r\n\t\tel.appendChild(valueEl);\r\n\t\tel.appendChild(rowsEl);\r\n\t}\r\n\t\r\n\treturn el;\r\n}","export default function(pageSize, currentRow, currentPage, totalRows, totalPages){\r\n\r\n\tvar el = document.createElement(\"span\"),\r\n\tshowingEl = document.createElement(\"span\"),\r\n\tvalueEl = document.createElement(\"span\"),\r\n\tofEl = document.createElement(\"span\"),\r\n\ttotalEl = document.createElement(\"span\"),\r\n\trowsEl = document.createElement(\"span\");\r\n\t\r\n\tthis.table.modules.localize.langBind(\"pagination|counter|showing\", (value) => {\r\n\t\tshowingEl.innerHTML = value;\r\n\t});\r\n\t\r\n\tvalueEl.innerHTML = \" \" + currentPage + \" \";\r\n\t\r\n\tthis.table.modules.localize.langBind(\"pagination|counter|of\", (value) => {\r\n\t\tofEl.innerHTML = value;\r\n\t});\r\n\t\r\n\ttotalEl.innerHTML = \" \" + totalPages + \" \";\r\n\t\r\n\tthis.table.modules.localize.langBind(\"pagination|counter|pages\", (value) => {\r\n\t\trowsEl.innerHTML = value;\r\n\t});\r\n\t\r\n\tel.appendChild(showingEl);\r\n\tel.appendChild(valueEl);\r\n\tel.appendChild(ofEl);\r\n\tel.appendChild(totalEl);\r\n\tel.appendChild(rowsEl);\r\n\t\r\n\treturn el;\r\n}","import Module from '../../core/Module.js';\r\n\r\nimport defaultPageCounters from './defaults/pageCounters.js';\r\n\r\nclass Page extends Module{\r\n\t\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\t\t\r\n\t\tthis.mode = \"local\";\r\n\t\tthis.progressiveLoad = false;\r\n\t\t\r\n\t\tthis.element = null;\r\n\t\tthis.pageCounterElement = null;\r\n\t\tthis.pageCounter = null;\r\n\t\t\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.remoteRowCountEstimate = null;\r\n\t\t\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\t\t\r\n\t\tthis.pageSizes = [];\r\n\t\t\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); //initial page to show on load\r\n\t\tthis.registerTableOption(\"paginationCounter\", false); // set pagination counter\r\n\t\tthis.registerTableOption(\"paginationCounterElement\", false); // set pagination counter\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\t\t\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\t\t\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\t\t\r\n\t\t//register component functions\r\n\t\tthis.registerComponentFunction(\"row\", \"pageTo\", this.setPageToRow.bind(this));\r\n\t}\r\n\t\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-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\t\t\tthis.subscribe(\"footer-redraw\", this.footerRedraw.bind(this));\r\n\r\n\t\t\tif(this.table.options.paginationAddRow == \"page\"){\r\n\t\t\t\tthis.subscribe(\"row-adding-position\", this.rowAddingPosition.bind(this));\r\n\t\t\t}\r\n\t\t\t\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\t\t\t\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\t\t\t\r\n\t\t\tthis.registerDisplayHandler(this.restOnRenderBefore.bind(this), 40);\r\n\t\t\tthis.registerDisplayHandler(this.getRows.bind(this), 50);\r\n\t\t\t\r\n\t\t\tthis.createElements();\r\n\t\t\tthis.initializePageCounter();\r\n\t\t\tthis.initializePaginator();\r\n\t\t}else if(this.table.options.progressiveLoad){\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\t\t\tthis.subscribe(\"table-built\", this.calculatePageSizes.bind(this));\r\n\t\t\tthis.subscribe(\"data-processed\", this.initialLoadComplete.bind(this));\r\n\t\t\t\r\n\t\t\tthis.initializeProgressive(this.table.options.progressiveLoad);\r\n\t\t\t\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\t\r\n\trowAddingPosition(row, top){\r\n\t\tvar rowManager = this.table.rowManager,\r\n\t\tdisplayRows = rowManager.getDisplayRows(),\r\n\t\tindex;\r\n\t\t\r\n\t\tif(top){\r\n\t\t\tif(displayRows.length){\r\n\t\t\t\tindex = displayRows[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(displayRows.length){\r\n\t\t\t\tindex = displayRows[displayRows.length - 1];\r\n\t\t\t\ttop = displayRows.length < this.size ? false : true;\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\treturn {index, top};\r\n\t}\r\n\t\r\n\tcalculatePageSizes(){\r\n\t\tvar testElRow, testElCell;\r\n\t\t\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\t\t\t\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\t\t\t\r\n\t\t\ttestElRow.appendChild(testElCell);\r\n\t\t\t\r\n\t\t\tthis.table.rowManager.getTableElement().appendChild(testElRow);\r\n\t\t\t\r\n\t\t\tthis.size = Math.floor(this.table.rowManager.getElement().clientHeight / testElRow.offsetHeight);\r\n\t\t\t\r\n\t\t\tthis.table.rowManager.getTableElement().removeChild(testElRow);\r\n\t\t}\r\n\r\n\t\tthis.dispatchExternal(\"pageSizeChanged\", this.size);\r\n\t\t\r\n\t\tthis.generatePageSizeSelectList();\r\n\t}\r\n\t\r\n\tinitialLoadComplete(){\r\n\t\tthis.initialLoad = false;\r\n\t}\r\n\t\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\t\t\r\n\t\t//configure request params\r\n\t\tparams.page = this.page;\r\n\t\t\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\t\t\r\n\t\treturn params;\r\n\t}\r\n\t\r\n\t///////////////////////////////////\r\n\t///////// Table Functions /////////\r\n\t///////////////////////////////////\r\n\t\r\n\tuserSetPageToRow(row){\r\n\t\tif(this.table.options.pagination){\r\n\t\t\trow = this.rowManager.findRow(row);\r\n\t\t\t\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\t\t\r\n\t\treturn Promise.reject();\r\n\t}\r\n\t\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\t\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\t\t\t\r\n\t\t\tif(diff < margin){\r\n\t\t\t\tthis.nextPage()\r\n\t\t\t\t\t.catch(() => {}); //consume the exception thrown when on the last page\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\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\t\t\r\n\t\treturn rows;\r\n\t}\r\n\t\r\n\trowsUpdated(){\r\n\t\tthis.refreshData(true, \"all\");\r\n\t}\r\n\t\r\n\tcreateElements(){\r\n\t\tvar button;\r\n\t\t\r\n\t\tthis.element = document.createElement(\"span\");\r\n\t\tthis.element.classList.add(\"tabulator-paginator\");\r\n\t\t\r\n\t\tthis.pagesElement = document.createElement(\"span\");\r\n\t\tthis.pagesElement.classList.add(\"tabulator-pages\");\r\n\t\t\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\t\t\r\n\t\tthis.firstBut = button.cloneNode(true);\r\n\t\tthis.firstBut.setAttribute(\"data-page\", \"first\");\r\n\t\t\r\n\t\tthis.prevBut = button.cloneNode(true);\r\n\t\tthis.prevBut.setAttribute(\"data-page\", \"prev\");\r\n\t\t\r\n\t\tthis.nextBut = button.cloneNode(true);\r\n\t\tthis.nextBut.setAttribute(\"data-page\", \"next\");\r\n\t\t\r\n\t\tthis.lastBut = button.cloneNode(true);\r\n\t\tthis.lastBut.setAttribute(\"data-page\", \"last\");\r\n\t\t\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\t\r\n\tgeneratePageSizeSelectList(){\r\n\t\tvar pageSizes = [];\r\n\t\t\r\n\t\tif(this.pageSizeSelect){\r\n\t\t\t\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\t\t\t\t\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\t\t\t\t\r\n\t\t\t\tif(this.pageSizes.indexOf(this.size) == -1){\r\n\t\t\t\t\tpageSizes = [];\r\n\t\t\t\t\t\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\t\t\t\t\t\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\t\t\t\r\n\t\t\twhile(this.pageSizeSelect.firstChild) this.pageSizeSelect.removeChild(this.pageSizeSelect.firstChild);\r\n\t\t\t\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\t\t\t\t\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\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\tthis.pageSizeSelect.appendChild(itemEl);\r\n\t\t\t});\r\n\t\t\t\r\n\t\t\tthis.pageSizeSelect.value = this.size;\r\n\t\t}\r\n\t}\r\n\t\r\n\tinitializePageCounter(){\r\n\t\tvar counter = this.table.options.paginationCounter,\r\n\t\tpageCounter = null;\r\n\t\t\r\n\t\tif(counter){\r\n\t\t\tif(typeof counter === \"function\"){\r\n\t\t\t\tpageCounter = counter;\r\n\t\t\t}else{\r\n\t\t\t\tpageCounter = Page.pageCounters[counter];\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif(pageCounter){\r\n\t\t\t\tthis.pageCounter = pageCounter;\r\n\t\t\t\t\r\n\t\t\t\tthis.pageCounterElement = document.createElement(\"span\");\r\n\t\t\t\tthis.pageCounterElement.classList.add(\"tabulator-page-counter\");\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Pagination Error - No such page counter found: \", counter);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\t//setup pagination\r\n\tinitializePaginator(hidden){\r\n\t\tvar pageSelectLabel, paginationCounterHolder;\r\n\t\t\r\n\t\tif(!hidden){\r\n\t\t\t//build pagination element\r\n\t\t\t\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\t\t\t\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\t\t\t\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\t\t\t\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\t\t\t\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\t\t\t\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\t\t\t\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\t\t\t\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\t\t\t\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\t\t\t\r\n\t\t\tthis.prevBut.addEventListener(\"click\", () => {\r\n\t\t\t\tthis.previousPage();\r\n\t\t\t});\r\n\t\t\t\r\n\t\t\tthis.nextBut.addEventListener(\"click\", () => {\r\n\t\t\t\tthis.nextPage();\r\n\t\t\t});\r\n\t\t\t\r\n\t\t\tthis.lastBut.addEventListener(\"click\", () => {\r\n\t\t\t\tthis.setPage(this.max);\r\n\t\t\t});\r\n\t\t\t\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\t\t\t\r\n\t\t\tif(this.pageSizeSelect){\r\n\t\t\t\tpageSelectLabel = document.createElement(\"label\");\r\n\t\t\t\t\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\t\t\t\t\r\n\t\t\t\tthis.element.appendChild(pageSelectLabel);\r\n\t\t\t\tthis.element.appendChild(this.pageSizeSelect);\r\n\t\t\t\t\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\t\t\t\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\t\t\t\r\n\t\t\tif(!this.table.options.paginationElement){\r\n\t\t\t\tif(this.table.options.paginationCounter){\r\n\r\n\t\t\t\t\tpaginationCounterHolder; \r\n\r\n\t\t\t\t\tif(this.table.options.paginationCounterElement){\r\n\t\t\t\t\t\tif(this.table.options.paginationCounterElement instanceof HTMLElement){\r\n\t\t\t\t\t\t\tthis.table.options.paginationCounterElement.appendChild(this.pageCounterElement);\r\n\t\t\t\t\t\t}else if(typeof this.table.options.paginationCounterElement === \"string\"){\r\n\t\t\t\t\t\t\tpaginationCounterHolder = document.querySelector(this.table.options.paginationCounterElement);\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tif(paginationCounterHolder){\r\n\t\t\t\t\t\t\t\tpaginationCounterHolder.appendChild(this.pageCounterElement);\r\n\t\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\t\tconsole.warn(\"Pagination Error - Unable to find element matching paginationCounterElement selector:\", this.table.options.paginationCounterElement);\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.footerAppend(this.pageCounterElement);\r\n\t\t\t\t\t}\r\n\t\t\t\t\t\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\tthis.footerAppend(this.element);\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tthis.page = this.table.options.paginationInitialPage;\r\n\t\t\tthis.count = this.table.options.paginationButtonCount;\r\n\t\t}\r\n\t\t\r\n\t\t//set default values\r\n\t\tthis.mode = this.table.options.paginationMode;\r\n\t}\r\n\t\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\t\r\n\ttrackChanges(){\r\n\t\tthis.dispatch(\"page-changed\");\r\n\t}\r\n\t\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\t\t\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\t\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\t\r\n\t//set the maximum page\r\n\tsetMaxPage(max){\r\n\t\t\r\n\t\tmax = parseInt(max);\r\n\t\t\r\n\t\tthis.max = max || 1;\r\n\t\t\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\t\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\r\n\t\t\tcase \"prev\":\r\n\t\t\t\treturn this.previousPage();\r\n\t\t\t\r\n\t\t\tcase \"next\":\r\n\t\t\t\treturn this.nextPage();\r\n\t\t\t\r\n\t\t\tcase \"last\":\r\n\t\t\t\treturn this.setPage(this.max);\r\n\t\t}\r\n\t\t\r\n\t\tpage = parseInt(page);\r\n\t\t\r\n\t\tif((page > 0 && page <= this.max) || this.mode !== \"local\"){\r\n\t\t\tthis.page = page;\r\n\t\t\t\r\n\t\t\tthis.trackChanges();\r\n\t\t\t\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\t\r\n\tsetPageToRow(row){\r\n\t\tvar rows = this.displayRows(-1);\r\n\t\tvar index = rows.indexOf(row);\r\n\t\r\n\t\tif(index > -1){\r\n\t\t\tvar page = this.size === true ? 1 : Math.ceil((index + 1) / this.size);\r\n\t\t\t\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\t\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\tthis.dispatchExternal(\"pageSizeChanged\", size);\r\n\t\t}\r\n\t\t\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\t\t\r\n\t\tthis.trackChanges();\r\n\t}\r\n\t\r\n\t_setPageCounter(totalRows, size, currentRow){\r\n\t\tvar content;\r\n\t\t\r\n\t\tif(this.pageCounter){\r\n\r\n\t\t\tif(this.mode === \"remote\"){\r\n\t\t\t\tsize = this.size;\r\n\t\t\t\tcurrentRow = ((this.page - 1) * this.size) + 1;\r\n\t\t\t\ttotalRows = this.remoteRowCountEstimate;\r\n\t\t\t}\r\n\r\n\t\t\tcontent = this.pageCounter.call(this, size, currentRow, this.page, totalRows, this.max);\r\n\t\t\t\r\n\t\t\tswitch(typeof content){\r\n\t\t\t\tcase \"object\":\r\n\t\t\t\t\tif(content instanceof Node){\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t//clear previous cell contents\r\n\t\t\t\t\t\twhile(this.pageCounterElement.firstChild) this.pageCounterElement.removeChild(this.pageCounterElement.firstChild);\r\n\t\t\t\t\t\r\n\t\t\t\t\t\tthis.pageCounterElement.appendChild(content);\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tthis.pageCounterElement.innerHTML = \"\";\r\n\t\t\t\t\t\r\n\t\t\t\t\t\tif(content != null){\r\n\t\t\t\t\t\t\tconsole.warn(\"Page Counter Error - Page Counter has returned a type of object, the only valid page counter object return is an instance of Node, the page counter returned:\", content);\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\tcase \"undefined\":\r\n\t\t\t\t\tthis.pageCounterElement.innerHTML = \"\";\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tthis.pageCounterElement.innerHTML = content;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\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\t\t\r\n\t\twhile(this.pagesElement.firstChild) this.pagesElement.removeChild(this.pagesElement.firstChild);\r\n\t\t\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\t\t\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\t\t\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\t\t\r\n\t\tthis.footerRedraw();\r\n\t}\r\n\t\r\n\t_generatePageButton(page){\r\n\t\tvar button = document.createElement(\"button\");\r\n\t\t\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\t\t\r\n\t\tbutton.setAttribute(\"type\", \"button\");\r\n\t\tbutton.setAttribute(\"role\", \"button\");\r\n\t\t\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\t\t\r\n\t\tbutton.setAttribute(\"data-page\", page);\r\n\t\tbutton.textContent = page;\r\n\t\t\r\n\t\tbutton.addEventListener(\"click\", (e) => {\r\n\t\t\tthis.setPage(page);\r\n\t\t});\r\n\t\t\r\n\t\treturn button;\r\n\t}\r\n\t\r\n\t//previous page\r\n\tpreviousPage(){\r\n\t\tif(this.page > 1){\r\n\t\t\tthis.page--;\r\n\t\t\t\r\n\t\t\tthis.trackChanges();\r\n\t\t\t\r\n\t\t\treturn this.trigger();\r\n\t\t\t\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\t\r\n\t//next page\r\n\tnextPage(){\r\n\t\tif(this.page < this.max){\r\n\t\t\tthis.page++;\r\n\t\t\t\r\n\t\t\tthis.trackChanges();\r\n\t\t\t\r\n\t\t\treturn this.trigger();\r\n\t\t\t\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\t\r\n\t//return current page number\r\n\tgetPage(){\r\n\t\treturn this.page;\r\n\t}\r\n\t\r\n\t//return max page number\r\n\tgetPageMax(){\r\n\t\treturn this.max;\r\n\t}\r\n\t\r\n\tgetPageSize(size){\r\n\t\treturn this.size;\r\n\t}\r\n\t\r\n\tgetMode(){\r\n\t\treturn this.mode;\r\n\t}\r\n\t\r\n\t//return appropriate rows for current page\r\n\tgetRows(data){\r\n\t\tvar actualRowPageSize = 0,\r\n\t\toutput, start, end, actualStartRow;\r\n\r\n\t\tvar actualRows = data.filter((row) => {\r\n\t\t\treturn row.type === \"row\";\r\n\t\t});\r\n\t\t\r\n\t\tif(this.mode == \"local\"){\r\n\t\t\toutput = [];\r\n\t\t\t\r\n\t\t\tthis.setMaxRows(data.length);\r\n\t\t\t\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\t\t\t\r\n\t\t\tthis._setPageButtons();\r\n\t\t\t\r\n\t\t\tfor(let i = start; i < end; i++){\r\n\t\t\t\tlet row = data[i];\r\n\r\n\t\t\t\tif(row){\r\n\t\t\t\t\toutput.push(row);\r\n\r\n\t\t\t\t\tif(row.type === \"row\"){\r\n\t\t\t\t\t\tif(!actualStartRow){\r\n\t\t\t\t\t\t\tactualStartRow = row;\r\n\t\t\t\t\t\t}\t\r\n\r\n\t\t\t\t\t\tactualRowPageSize++;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tthis._setPageCounter(actualRows.length, actualRowPageSize, actualStartRow ? (actualRows.indexOf(actualStartRow) + 1) : 0);\r\n\t\t\t\r\n\t\t\treturn output;\r\n\t\t}else{\r\n\t\t\tthis._setPageButtons();\r\n\t\t\tthis._setPageCounter(actualRows.length);\r\n\t\t\t\r\n\t\t\treturn data.slice(0);\r\n\t\t}\r\n\t}\r\n\t\r\n\ttrigger(){\r\n\t\tvar left;\r\n\t\t\r\n\t\tswitch(this.mode){\r\n\t\t\tcase \"local\":\r\n\t\t\t\tleft = this.table.rowManager.scrollLeft;\r\n\t\t\t\r\n\t\t\t\tthis.refreshData();\r\n\t\t\t\tthis.table.rowManager.scrollHorizontal(left);\r\n\t\t\t\r\n\t\t\t\tthis.dispatchExternal(\"pageLoaded\", this.getPage());\r\n\t\t\t\r\n\t\t\t\treturn Promise.resolve();\r\n\t\t\t\r\n\t\t\tcase \"remote\":\r\n\t\t\t\tthis.dataChanging = true;\r\n\t\t\t\treturn this.reloadData(null)\r\n\t\t\t\t\t.finally(() => {\r\n\t\t\t\t\t\tthis.dataChanging = false;\r\n\t\t\t\t\t});\r\n\t\t\t\r\n\t\t\tcase \"progressive_load\":\r\n\t\t\tcase \"progressive_scroll\":\r\n\t\t\t\treturn this.reloadData(null, true);\r\n\t\t\t\r\n\t\t\tdefault:\r\n\t\t\t\tconsole.warn(\"Pagination Error - no such pagination mode:\", this.mode);\r\n\t\t\t\treturn Promise.reject();\r\n\t\t}\r\n\t}\r\n\t\r\n\t_parseRemoteData(data){\r\n\t\tvar margin;\r\n\t\t\r\n\t\tif(typeof data.last_page === \"undefined\"){\r\n\t\t\tconsole.warn(\"Remote Pagination Error - Server response missing '\" + (this.options(\"dataReceiveParams\").last_page || \"last_page\") + \"' property\");\r\n\t\t}\r\n\t\t\r\n\t\tif(data.data){\r\n\t\t\tthis.max = parseInt(data.last_page) || 1;\r\n\r\n\t\t\tthis.remoteRowCountEstimate = typeof data.last_row !== \"undefined\" ? data.last_row : (data.last_page * this.size - (this.page == data.last_page ? (this.size - data.data.length) : 0));\r\n\t\t\t\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\t\t\t\t\t\r\n\t\t\t\t\t\tif(this.page == 1){\r\n\t\t\t\t\t\t\tthis.table.rowManager.setData(data.data, false, this.page == 1);\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\tthis.table.rowManager.addRows(data.data);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\r\n\t\t\t\t\t\tif(this.page < this.max){\r\n\t\t\t\t\t\t\tsetTimeout(() => {\r\n\t\t\t\t\t\t\t\tthis.nextPage();\r\n\t\t\t\t\t\t\t}, this.table.options.progressiveLoadDelay);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\t\tcase \"progressive_scroll\":\r\n\t\t\t\t\t\tdata = this.page === 1 ? data.data : this.table.rowManager.getData().concat(data.data);\r\n\t\t\t\t\t\r\n\t\t\t\t\t\tthis.table.rowManager.setData(data, this.page !== 1, this.page == 1);\r\n\t\t\t\t\t\r\n\t\t\t\t\t\tmargin = this.table.options.progressiveLoadScrollMargin || (this.table.rowManager.element.clientHeight * 2);\r\n\t\t\t\t\t\r\n\t\t\t\t\t\tif(this.table.rowManager.element.scrollHeight <= (this.table.rowManager.element.clientHeight + margin)){\r\n\t\t\t\t\t\t\tif(this.page < this.max){\r\n\t\t\t\t\t\t\t\tsetTimeout(() => {\r\n\t\t\t\t\t\t\t\t\tthis.nextPage();\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\t\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t\t\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\t\t\t\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Remote Pagination Error - Server response missing '\" + (this.options(\"dataReceiveParams\").data || \"data\") + \"' property\");\r\n\t\t}\r\n\t\t\r\n\t\treturn data.data;\r\n\t}\r\n\t\r\n\t//handle the footer element being redrawn\r\n\tfooterRedraw(){\r\n\t\tvar footer = this.table.footerManager.containerElement;\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\t\t\t\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.pageCounters = defaultPageCounters;\r\n\r\nexport default Page;\r\n","// read persistance 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.slice(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.slice(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};\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\tretrievedData;\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\tretrievedData = this.retrieveData(\"page\");\r\n\r\n\t\t\t\tif(retrievedData){\r\n\t\t\t\t\tif(typeof retrievedData.paginationSize !== \"undefined\" && (this.config.page === true || this.config.page.size)){\r\n\t\t\t\t\t\tthis.table.options.paginationSize = retrievedData.paginationSize;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif(typeof retrievedData.paginationInitialPage !== \"undefined\" && (this.config.page === true || this.config.page.page)){\r\n\t\t\t\t\t\tthis.table.options.paginationInitialPage = retrievedData.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\tretrievedData = this.retrieveData(\"group\");\r\n\r\n\t\t\t\tif(retrievedData){\r\n\t\t\t\t\tif(typeof retrievedData.groupBy !== \"undefined\" && (this.config.group === true || this.config.group.groupBy)){\r\n\t\t\t\t\t\tthis.table.options.groupBy = retrievedData.groupBy;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif(typeof retrievedData.groupStartOpen !== \"undefined\" && (this.config.group === true || this.config.group.groupStartOpen)){\r\n\t\t\t\t\t\tthis.table.options.groupStartOpen = retrievedData.groupStartOpen;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif(typeof retrievedData.groupHeader !== \"undefined\" && (this.config.group === true || this.config.group.groupHeader)){\r\n\t\t\t\t\t\tthis.table.options.groupHeader = retrievedData.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}\r\n\r\n\t\t\tthis.subscribe(\"table-built\", this.tableBuilt.bind(this), 0);\r\n\r\n\t\t\tthis.subscribe(\"table-redraw\", this.tableRedraw.bind(this));\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 sorters, 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.options.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.options.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\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: (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:() => {\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.retrieveData(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//retrieve data from memory\r\n\tretrieveData(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\t\treturn col.title === subject.title && col.columns.length === subject.columns.length;\r\n\r\n\t\t\t\tcase \"field\":\r\n\t\t\t\t\treturn col.field === subject.field;\r\n\r\n\t\t\t\tcase \"object\":\r\n\t\t\t\t\treturn col === subject;\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\t\tdata = this.parseColumns(this.table.columnManager.getColumns());\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase \"filter\":\r\n\t\t\t\tdata = this.table.modules.filter.getFilters();\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase \"sort\":\r\n\t\t\t\tdata = this.validateSorters(this.table.modules.sort.getSort());\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase \"group\":\r\n\t\t\t\tdata = this.getGroupConfig();\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase \"page\":\r\n\t\t\t\tdata = this.getPageConfig();\r\n\t\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\tkeys.push(\"visible\");\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\t\tdefStore.width = column.getWidth();\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase \"visible\":\r\n\t\t\t\t\t\t\tdefStore.visible = column.visible;\r\n\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\tdefault:\r\n\t\t\t\t\t\t\tif(typeof colDef[key] !== \"function\" && excludedKeys.indexOf(key) === -1){\r\n\t\t\t\t\t\t\t\tdefStore[key] = colDef[key];\r\n\t\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\nPersistence.moduleInitOrder = -10;\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 Popup extends Module{\r\n\t\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\t\t\r\n\t\tthis.columnSubscribers = {};\r\n\t\t\r\n\t\tthis.registerTableOption(\"rowContextPopup\", false);\r\n\t\tthis.registerTableOption(\"rowClickPopup\", false);\r\n\t\tthis.registerTableOption(\"groupContextPopup\", false);\r\n\t\tthis.registerTableOption(\"groupClickPopup\", false);\r\n\t\t\r\n\t\tthis.registerColumnOption(\"headerContextPopup\");\r\n\t\tthis.registerColumnOption(\"headerClickPopup\");\r\n\t\tthis.registerColumnOption(\"headerPopup\");\r\n\t\tthis.registerColumnOption(\"headerPopupIcon\");\r\n\t\tthis.registerColumnOption(\"contextPopup\");\r\n\t\tthis.registerColumnOption(\"clickPopup\");\r\n\t\t\r\n\t}\r\n\t\r\n\tinitialize(){\r\n\t\tthis.initializeRowWatchers();\r\n\t\tthis.initializeGroupWatchers();\r\n\t\t\r\n\t\tthis.subscribe(\"column-init\", this.initializeColumn.bind(this));\r\n\t}\r\n\t\r\n\tinitializeRowWatchers(){\r\n\t\tif(this.table.options.rowContextPopup){\r\n\t\t\tthis.subscribe(\"row-contextmenu\", this.loadPopupEvent.bind(this, this.table.options.rowContextPopup));\r\n\t\t\tthis.table.on(\"rowTapHold\", this.loadPopupEvent.bind(this, this.table.options.rowContextPopup));\r\n\t\t}\r\n\t\t\r\n\t\tif(this.table.options.rowClickPopup){\r\n\t\t\tthis.subscribe(\"row-click\", this.loadPopupEvent.bind(this, this.table.options.rowClickPopup));\r\n\t\t}\r\n\t}\r\n\t\r\n\tinitializeGroupWatchers(){\r\n\t\tif(this.table.options.groupContextPopup){\r\n\t\t\tthis.subscribe(\"group-contextmenu\", this.loadPopupEvent.bind(this, this.table.options.groupContextPopup));\r\n\t\t\tthis.table.on(\"groupTapHold\", this.loadPopupEvent.bind(this, this.table.options.groupContextPopup));\r\n\t\t}\r\n\t\t\r\n\t\tif(this.table.options.groupClickPopup){\r\n\t\t\tthis.subscribe(\"group-click\", this.loadPopupEvent.bind(this, this.table.options.groupClickPopup));\r\n\t\t}\r\n\t}\r\n\t\r\n\tinitializeColumn(column){\r\n\t\tvar def = column.definition;\r\n\t\t\r\n\t\t//handle column events\r\n\t\tif(def.headerContextPopup && !this.columnSubscribers.headerContextPopup){\r\n\t\t\tthis.columnSubscribers.headerContextPopup = this.loadPopupTableColumnEvent.bind(this, \"headerContextPopup\");\r\n\t\t\tthis.subscribe(\"column-contextmenu\", this.columnSubscribers.headerContextPopup);\r\n\t\t\tthis.table.on(\"headerTapHold\", this.loadPopupTableColumnEvent.bind(this, \"headerContextPopup\"));\r\n\t\t}\r\n\t\t\r\n\t\tif(def.headerClickPopup && !this.columnSubscribers.headerClickPopup){\r\n\t\t\tthis.columnSubscribers.headerClickPopup = this.loadPopupTableColumnEvent.bind(this, \"headerClickPopup\");\r\n\t\t\tthis.subscribe(\"column-click\", this.columnSubscribers.headerClickPopup);\r\n\t\t}\r\n\t\t\r\n\t\tif(def.headerPopup){\r\n\t\t\tthis.initializeColumnHeaderPopup(column);\r\n\t\t}\r\n\t\t\r\n\t\t//handle cell events\r\n\t\tif(def.contextPopup && !this.columnSubscribers.contextPopup){\r\n\t\t\tthis.columnSubscribers.contextPopup = this.loadPopupTableCellEvent.bind(this, \"contextPopup\");\r\n\t\t\tthis.subscribe(\"cell-contextmenu\", this.columnSubscribers.contextPopup);\r\n\t\t\tthis.table.on(\"cellTapHold\", this.loadPopupTableCellEvent.bind(this, \"contextPopup\"));\r\n\t\t}\r\n\t\t\r\n\t\tif(def.clickPopup && !this.columnSubscribers.clickPopup){\r\n\t\t\tthis.columnSubscribers.clickPopup = this.loadPopupTableCellEvent.bind(this, \"clickPopup\");\r\n\t\t\tthis.subscribe(\"cell-click\", this.columnSubscribers.clickPopup);\r\n\t\t}\r\n\t}\r\n\t\r\n\tinitializeColumnHeaderPopup(column){\r\n\t\tvar icon = column.definition.headerPopupIcon,\r\n\t\theaderPopupEl;\r\n\t\t\r\n\t\theaderPopupEl = document.createElement(\"span\");\r\n\t\theaderPopupEl.classList.add(\"tabulator-header-popup-button\");\r\n\r\n\t\tif(icon){\r\n\t\t\tif(typeof icon === \"function\"){\r\n\t\t\t\ticon = icon(column.getComponent());\r\n\t\t\t}\r\n\r\n\t\t\tif(icon instanceof HTMLElement){\r\n\t\t\t\theaderPopupEl.appendChild(icon);\r\n\t\t\t}else{\r\n\t\t\t\theaderPopupEl.innerHTML = icon;\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\theaderPopupEl.innerHTML = \"⋮\";\r\n\t\t}\r\n\t\t\r\n\t\theaderPopupEl.addEventListener(\"click\", (e) => {\r\n\t\t\te.stopPropagation();\r\n\t\t\te.preventDefault();\r\n\t\t\t\r\n\t\t\tthis.loadPopupEvent(column.definition.headerPopup, e, column);\r\n\t\t});\r\n\t\t\r\n\t\tcolumn.titleElement.insertBefore(headerPopupEl, column.titleElement.firstChild);\r\n\t}\r\n\t\r\n\tloadPopupTableCellEvent(option, e, cell){\r\n\t\tif(cell._cell){\r\n\t\t\tcell = cell._cell;\r\n\t\t}\r\n\t\t\r\n\t\tif(cell.column.definition[option]){\r\n\t\t\tthis.loadPopupEvent(cell.column.definition[option], e, cell);\r\n\t\t}\r\n\t}\r\n\t\r\n\tloadPopupTableColumnEvent(option, e, column){\r\n\t\tif(column._column){\r\n\t\t\tcolumn = column._column;\r\n\t\t}\r\n\t\t\r\n\t\tif(column.definition[option]){\r\n\t\t\tthis.loadPopupEvent(column.definition[option], e, column);\r\n\t\t}\r\n\t}\r\n\t\r\n\tloadPopupEvent(contents, e, component){\r\n\t\tvar renderedCallback;\r\n\r\n\t\tfunction onRendered(callback){\r\n\t\t\trenderedCallback = callback;\r\n\t\t}\r\n\t\t\r\n\t\tif(component._group){\r\n\t\t\tcomponent = component._group;\r\n\t\t}else if(component._row){\r\n\t\t\tcomponent = component._row;\r\n\t\t}\r\n\t\t\r\n\t\tcontents = typeof contents == \"function\" ? contents.call(this.table, e, component.getComponent(), onRendered) : contents;\r\n\t\t\r\n\t\tthis.loadPopup(e, component, contents, renderedCallback);\r\n\t}\r\n\t\r\n\tloadPopup(e, component, contents, renderedCallback){\r\n\t\tvar touch = !(e instanceof MouseEvent),\r\n\t\tcontentsEl, popup;\r\n\t\t\r\n\t\tif(contents instanceof HTMLElement){\r\n\t\t\tcontentsEl = contents;\r\n\t\t}else{\r\n\t\t\tcontentsEl = document.createElement(\"div\");\r\n\t\t\tcontentsEl.innerHTML = contents;\r\n\t\t}\r\n\t\t\r\n\t\tcontentsEl.classList.add(\"tabulator-popup\");\r\n\r\n\t\tcontentsEl.addEventListener(\"click\", (e) =>{\r\n\t\t\te.stopPropagation();\r\n\t\t});\r\n\r\n\t\tif(!touch){\r\n\t\t\te.preventDefault();\r\n\t\t}\r\n\t\t\r\n\t\tpopup = this.popup(contentsEl);\r\n\r\n\t\tif(typeof renderedCallback === \"function\"){\r\n\t\t\tpopup.renderCallback(renderedCallback);\r\n\t\t}\r\n\t\t\r\n\t\tpopup.show(e).hideOnBlur(() => {\r\n\t\t\tthis.dispatchExternal(\"popupClosed\", component.getComponent());\r\n\t\t});\r\n\r\n\r\n\r\n\t\tthis.dispatchExternal(\"popupOpened\", component.getComponent());\r\n\t}\r\n}\r\n\r\nPopup.moduleName = \"popup\";\r\n\r\nexport default Popup;\r\n","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.generateTable(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.generateTable(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\t\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\t\t\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\t\r\n\t\tthis.registerTableOption(\"reactiveData\", false); //enable data reactivity\r\n\t}\r\n\t\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, \"cellsave\"));\r\n\t\t\tthis.subscribe(\"cell-value-save-after\", this.unblock.bind(this, \"cellsave\"));\r\n\t\t\tthis.subscribe(\"row-data-save-before\", this.block.bind(this, \"rowsave\"));\r\n\t\t\tthis.subscribe(\"row-data-save-after\", this.unblock.bind(this, \"rowsave\"));\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(\"table-destroy\", this.unwatchData.bind(this));\r\n\t\t}\r\n\t}\r\n\t\r\n\twatchData(data){\r\n\t\tvar self = this,\r\n\t\tversion;\r\n\t\t\r\n\t\tthis.currentVersion ++;\r\n\t\t\r\n\t\tversion = this.currentVersion;\r\n\t\t\r\n\t\tthis.unwatchData();\r\n\t\t\r\n\t\tthis.data = data;\r\n\t\t\r\n\t\t//override array push function\r\n\t\tthis.origFuncs.push = data.push;\r\n\t\t\r\n\t\tObject.defineProperty(this.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\t\t\t\tresult;\r\n\r\n\t\t\t\tif(!self.blocked && version === self.currentVersion){\t\r\n\t\t\t\t\tself.block(\"data-push\");\r\n\r\n\t\t\t\t\targs.forEach((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\t\r\n\t\t\t\t\tresult = self.origFuncs.push.apply(data, arguments);\r\n\t\t\t\t\t\r\n\t\t\t\t\tself.unblock(\"data-push\");\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\treturn result;\r\n\t\t\t}\r\n\t\t});\r\n\t\t\r\n\t\t//override array unshift function\r\n\t\tthis.origFuncs.unshift = data.unshift;\r\n\t\t\r\n\t\tObject.defineProperty(this.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\t\t\t\tresult;\r\n\t\t\t\t\r\n\t\t\t\tif(!self.blocked && version === self.currentVersion){\r\n\t\t\t\t\tself.block(\"data-unshift\");\r\n\t\t\t\t\t\r\n\t\t\t\t\targs.forEach((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\t\r\n\t\t\t\t\tresult = self.origFuncs.unshift.apply(data, arguments);\r\n\t\t\t\t\t\r\n\t\t\t\t\tself.unblock(\"data-unshift\");\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\treturn result;\r\n\t\t\t}\r\n\t\t});\r\n\t\t\r\n\t\t\r\n\t\t//override array shift function\r\n\t\tthis.origFuncs.shift = data.shift;\r\n\t\t\r\n\t\tObject.defineProperty(this.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, result;\r\n\t\t\t\t\r\n\t\t\t\tif(!self.blocked && version === self.currentVersion){\r\n\t\t\t\t\tself.block(\"data-shift\");\r\n\t\t\t\t\t\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\t\t\t\t\t\t\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\r\n\t\t\t\t\tresult = self.origFuncs.shift.call(data);\r\n\r\n\t\t\t\t\tself.unblock(\"data-shift\");\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\treturn result;\r\n\t\t\t}\r\n\t\t});\r\n\t\t\r\n\t\t//override array pop function\r\n\t\tthis.origFuncs.pop = data.pop;\r\n\t\t\r\n\t\tObject.defineProperty(this.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, result;\r\n\t\t\t\r\n\t\t\t\tif(!self.blocked && version === self.currentVersion){\r\n\t\t\t\t\tself.block(\"data-pop\");\r\n\t\t\t\t\t\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\t\t\t\t\t\t\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\r\n\t\t\t\t\tresult = self.origFuncs.pop.call(data);\r\n\t\t\t\t\t\r\n\t\t\t\t\tself.unblock(\"data-pop\");\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn result;\r\n\t\t\t}\r\n\t\t});\r\n\t\t\r\n\t\t\r\n\t\t//override array splice function\r\n\t\tthis.origFuncs.splice = data.splice;\r\n\t\t\r\n\t\tObject.defineProperty(this.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, result;\r\n\t\t\t\t\r\n\t\t\t\tif(!self.blocked && version === self.currentVersion){\r\n\t\t\t\t\tself.block(\"data-splice\");\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\t\t\t\t\t\t\r\n\t\t\t\t\t\tif(startRow){\r\n\t\t\t\t\t\t\tnewRows.forEach((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\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tnewRows.forEach((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\t\t\t\t\t\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\t\t\t\t\t\t\r\n\t\t\t\t\t\toldRows.forEach((rowData, i) => {\r\n\t\t\t\t\t\t\tvar row = self.table.rowManager.getRowFromDataObject(rowData);\r\n\t\t\t\t\t\t\t\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\t\t\t\t\t\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\r\n\t\t\t\t\tresult = self.origFuncs.splice.apply(data, arguments);\r\n\t\t\t\t\t\r\n\t\t\t\t\tself.unblock(\"data-splice\");\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\treturn result ;\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\t\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\t\r\n\twatchRow(row){\r\n\t\tvar data = row.getData();\r\n\t\t\r\n\t\tfor(var key in data){\r\n\t\t\tthis.watchKey(row, data, key);\r\n\t\t}\r\n\t\t\r\n\t\tif(this.table.options.dataTree){\r\n\t\t\tthis.watchTreeChildren(row);\r\n\t\t}\r\n\t}\r\n\t\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\t\t\r\n\t\tif(childField){\r\n\t\t\t\r\n\t\t\torigFuncs.push = childField.push;\r\n\t\t\t\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: () => {\r\n\t\t\t\t\tif(!self.blocked){\r\n\t\t\t\t\t\tself.block(\"tree-push\");\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\tvar result = origFuncs.push.apply(childField, arguments);\r\n\t\t\t\t\t\tthis.rebuildTree(row);\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\tself.unblock(\"tree-push\");\r\n\t\t\t\t\t}\r\n\t\t\t\t\t\r\n\t\t\t\t\treturn result;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\t\r\n\t\t\torigFuncs.unshift = childField.unshift;\r\n\t\t\t\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: () => {\r\n\t\t\t\t\tif(!self.blocked){\r\n\t\t\t\t\t\tself.block(\"tree-unshift\");\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\tvar result = origFuncs.unshift.apply(childField, arguments);\r\n\t\t\t\t\t\tthis.rebuildTree(row);\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\tself.unblock(\"tree-unshift\");\r\n\t\t\t\t\t}\r\n\t\t\t\t\t\r\n\t\t\t\t\treturn result;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\t\r\n\t\t\torigFuncs.shift = childField.shift;\r\n\t\t\t\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: () => {\r\n\t\t\t\t\tif(!self.blocked){\r\n\t\t\t\t\t\tself.block(\"tree-shift\");\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\tvar result = origFuncs.shift.call(childField);\r\n\t\t\t\t\t\tthis.rebuildTree(row);\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\tself.unblock(\"tree-shift\");\r\n\t\t\t\t\t}\r\n\t\t\t\t\t\r\n\t\t\t\t\treturn result;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\t\r\n\t\t\torigFuncs.pop = childField.pop;\r\n\t\t\t\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: () => {\r\n\t\t\t\t\tif(!self.blocked){\r\n\t\t\t\t\t\tself.block(\"tree-pop\");\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\tvar result = origFuncs.pop.call(childField);\r\n\t\t\t\t\t\tthis.rebuildTree(row);\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\tself.unblock(\"tree-pop\");\r\n\t\t\t\t\t}\r\n\t\t\t\t\t\r\n\t\t\t\t\treturn result;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\t\r\n\t\t\torigFuncs.splice = childField.splice;\r\n\t\t\t\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: () => {\r\n\t\t\t\t\tif(!self.blocked){\r\n\t\t\t\t\t\tself.block(\"tree-splice\");\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\tvar result = origFuncs.splice.apply(childField, arguments);\r\n\t\t\t\t\t\tthis.rebuildTree(row);\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\tself.unblock(\"tree-splice\");\r\n\t\t\t\t\t}\r\n\t\t\t\t\t\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\t\r\n\trebuildTree(row){\r\n\t\tthis.table.modules.dataTree.initializeRow(row);\r\n\t\tthis.table.modules.dataTree.layoutRow(row);\r\n\t\tthis.table.rowManager.refreshActiveData(\"tree\", false, true);\r\n\t}\r\n\t\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\t\t\r\n\t\tObject.defineProperty(data, key, {\r\n\t\t\tset: (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\tself.block(\"key\");\r\n\t\t\t\t\t\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\t\r\n\t\t\t\t\tself.unblock(\"key\");\r\n\t\t\t\t}\r\n\t\t\t\t\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:() => {\r\n\t\t\t\t\r\n\t\t\t\tif(props.get){\r\n\t\t\t\t\tprops.get();\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\treturn value;\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\t\r\n\tunwatchRow(row){\r\n\t\tvar data = row.getData();\r\n\t\t\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\t\r\n\tblock(key){\r\n\t\tif(!this.blocked){\r\n\t\t\tthis.blocked = key;\r\n\t\t}\r\n\t}\r\n\t\r\n\tunblock(key){\r\n\t\tif(this.blocked === key){\r\n\t\t\tthis.blocked = false;\r\n\t\t}\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\t\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\t\t\r\n\t\tthis.startColumn = false;\r\n\t\tthis.startX = false;\r\n\t\tthis.startWidth = false;\r\n\t\tthis.latestX = false;\r\n\t\tthis.handle = null;\r\n\t\tthis.initialNextColumn = null;\r\n\t\tthis.nextColumn = null;\r\n\t\t\r\n\t\tthis.initialized = false;\r\n\t\tthis.registerColumnOption(\"resizable\", true);\r\n\t\tthis.registerTableOption(\"resizableColumnFit\", false);\r\n\t}\r\n\t\r\n\tinitialize(){\r\n\t\tthis.subscribe(\"column-rendered\", this.layoutColumnHeader.bind(this));\r\n\t}\r\n\t\r\n\tinitializeEventWatchers(){\r\n\t\tif(!this.initialized){\r\n\t\t\t\r\n\t\t\tthis.subscribe(\"cell-rendered\", this.layoutCellHandles.bind(this));\r\n\t\t\tthis.subscribe(\"cell-delete\", this.deInitializeComponent.bind(this));\r\n\t\t\t\r\n\t\t\tthis.subscribe(\"cell-height\", this.resizeHandle.bind(this));\r\n\t\t\tthis.subscribe(\"column-moved\", this.columnLayoutUpdated.bind(this));\r\n\t\t\t\r\n\t\t\tthis.subscribe(\"column-hide\", this.deInitializeColumn.bind(this));\r\n\t\t\tthis.subscribe(\"column-show\", this.columnLayoutUpdated.bind(this));\r\n\t\t\tthis.subscribe(\"column-width\", this.columnWidthUpdated.bind(this));\r\n\t\t\t\r\n\t\t\tthis.subscribe(\"column-delete\", this.deInitializeComponent.bind(this));\r\n\t\t\tthis.subscribe(\"column-height\", this.resizeHandle.bind(this));\r\n\t\t\t\r\n\t\t\tthis.initialized = true;\r\n\t\t}\r\n\t}\r\n\t\r\n\t\r\n\tlayoutCellHandles(cell){\r\n\t\tif(cell.row.type === \"row\"){\r\n\t\t\tthis.deInitializeComponent(cell);\r\n\t\t\tthis.initializeColumn(\"cell\", cell, cell.column, cell.element);\r\n\t\t}\r\n\t}\r\n\t\r\n\tlayoutColumnHeader(column){\r\n\t\tif(column.definition.resizable){\r\n\t\t\tthis.initializeEventWatchers();\r\n\t\t\tthis.deInitializeComponent(column);\r\n\t\t\tthis.initializeColumn(\"header\", column, column, column.element);\r\n\t\t}\r\n\t}\r\n\t\r\n\tcolumnLayoutUpdated(column){\r\n\t\tvar prev = column.prevColumn();\r\n\t\t\r\n\t\tthis.reinitializeColumn(column);\r\n\t\t\r\n\t\tif(prev){\r\n\t\t\tthis.reinitializeColumn(prev);\r\n\t\t}\r\n\t}\r\n\t\r\n\tcolumnWidthUpdated(column){\r\n\t\tif(column.modules.frozen){\r\n\t\t\tif(this.table.modules.frozenColumns.leftColumns.includes(column)){\r\n\t\t\t\tthis.table.modules.frozenColumns.leftColumns.forEach((col) => {\r\n\t\t\t\t\tthis.reinitializeColumn(col);\r\n\t\t\t\t});\r\n\t\t\t}else if(this.table.modules.frozenColumns.rightColumns.includes(column)){\r\n\t\t\t\tthis.table.modules.frozenColumns.rightColumns.forEach((col) => {\r\n\t\t\t\t\tthis.reinitializeColumn(col);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\treinitializeColumn(column){\r\n\t\tvar frozenOffset = column.modules.frozen ? (column.modules.frozen.marginValue + column.getWidth() + \"px\") : false;\r\n\t\t\r\n\t\t\r\n\t\tcolumn.cells.forEach((cell) => {\r\n\t\t\tif(cell.modules.resize && cell.modules.resize.handleEl){\r\n\t\t\t\tif(frozenOffset){\r\n\t\t\t\t\tcell.modules.resize.handleEl.style.left = frozenOffset;\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\tcell.element.after(cell.modules.resize.handleEl);\r\n\t\t\t}\r\n\t\t});\r\n\t\t\r\n\t\tif(column.modules.resize && column.modules.resize.handleEl){\r\n\t\t\tif(frozenOffset){\r\n\t\t\t\tcolumn.modules.resize.handleEl.style.left = frozenOffset;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tcolumn.element.after(column.modules.resize.handleEl);\r\n\t\t}\r\n\t}\r\n\t\r\n\tinitializeColumn(type, component, column, element){\r\n\t\tvar self = this,\r\n\t\tvariableHeight = false,\r\n\t\tmode = column.definition.resizable,\r\n\t\tconfig = {},\r\n\t\tnearestColumn = column.getLastColumn();\r\n\t\t\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\tconfig = {variableHeight:variableHeight};\r\n\t\t}\r\n\t\t\r\n\t\tif((mode === true || mode == type) && this._checkResizability(nearestColumn)){\r\n\t\t\t\r\n\t\t\tvar handle = document.createElement('span');\r\n\t\t\thandle.className = \"tabulator-col-resize-handle\";\r\n\t\t\t\r\n\t\t\thandle.addEventListener(\"click\", function(e){\r\n\t\t\t\te.stopPropagation();\r\n\t\t\t});\r\n\t\t\t\r\n\t\t\tvar handleDown = function(e){\r\n\t\t\t\tself.startColumn = column;\r\n\t\t\t\tself.initialNextColumn = self.nextColumn = nearestColumn.nextColumn();\r\n\t\t\t\tself._mouseDown(e, nearestColumn, handle);\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\thandle.addEventListener(\"mousedown\", handleDown);\r\n\t\t\thandle.addEventListener(\"touchstart\", handleDown, {passive: true});\r\n\t\t\t\r\n\t\t\t//resize column on double click\r\n\t\t\thandle.addEventListener(\"dblclick\", (e) => {\r\n\t\t\t\tvar oldWidth = nearestColumn.getWidth();\r\n\t\t\t\t\r\n\t\t\t\te.stopPropagation();\r\n\t\t\t\tnearestColumn.reinitializeWidth(true);\r\n\t\t\t\t\r\n\t\t\t\tif(oldWidth !== nearestColumn.getWidth()){\r\n\t\t\t\t\tself.dispatch(\"column-resized\", nearestColumn);\r\n\t\t\t\t\tself.table.externalEvents.dispatch(\"columnResized\", nearestColumn.getComponent());\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\t\r\n\t\t\tif(column.modules.frozen){\r\n\t\t\t\thandle.style.position = \"absolute\";\r\n\t\t\t\thandle.style.left = column.modules.frozen.marginValue + column.getWidth() + \"px\";\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tconfig.handleEl = handle;\r\n\t\t\t\r\n\t\t\tif(element.parentNode && column.visible){\r\n\t\t\t\telement.after(handle);\t\t\t\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\tcomponent.modules.resize = config;\r\n\t}\r\n\t\r\n\tdeInitializeColumn(column){\r\n\t\tthis.deInitializeComponent(column);\r\n\t\t\r\n\t\tcolumn.cells.forEach((cell) => {\r\n\t\t\tthis.deInitializeComponent(cell);\r\n\t\t});\r\n\t}\r\n\t\r\n\tdeInitializeComponent(component){\r\n\t\tvar handleEl;\r\n\t\t\r\n\t\tif(component.modules.resize){\r\n\t\t\thandleEl = component.modules.resize.handleEl;\r\n\t\t\t\r\n\t\t\tif(handleEl && handleEl.parentElement){\r\n\t\t\t\thandleEl.parentElement.removeChild(handleEl);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\tresizeHandle(component, height){\r\n\t\tif(component.modules.resize && component.modules.resize.handleEl){\r\n\t\t\tcomponent.modules.resize.handleEl.style.height = height;\r\n\t\t}\r\n\t}\r\n\t\r\n\t_checkResizability(column){\r\n\t\treturn column.definition.resizable;\r\n\t}\r\n\t\r\n\t_mouseDown(e, column, handle){\r\n\t\tvar self = this;\r\n\t\t\r\n\t\tself.table.element.classList.add(\"tabulator-block-select\");\r\n\t\t\r\n\t\tfunction mouseMove(e){\r\n\t\t\tvar x = typeof e.screenX === \"undefined\" ? e.touches[0].screenX : e.screenX,\r\n\t\t\tstartDiff = x - self.startX,\r\n\t\t\tmoveDiff = x - self.latestX,\r\n\t\t\tblockedBefore, blockedAfter;\r\n\t\t\t\r\n\t\t\tself.latestX = x;\r\n\t\t\t\r\n\t\t\tif(self.table.rtl){\r\n\t\t\t\tstartDiff = -startDiff;\r\n\t\t\t\tmoveDiff = -moveDiff;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tblockedBefore = column.width == column.minWidth || column.width == column.maxWidth;\r\n\t\t\t\r\n\t\t\tcolumn.setWidth(self.startWidth + startDiff);\r\n\t\t\t\r\n\t\t\tblockedAfter = column.width == column.minWidth || column.width == column.maxWidth;\r\n\t\t\t\r\n\t\t\tif(moveDiff < 0){\r\n\t\t\t\tself.nextColumn = self.initialNextColumn;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif(self.table.options.resizableColumnFit && self.nextColumn && !(blockedBefore && blockedAfter)){\r\n\t\t\t\tlet colWidth = self.nextColumn.getWidth();\r\n\t\t\t\t\r\n\t\t\t\tif(moveDiff > 0){\r\n\t\t\t\t\tif(colWidth <= self.nextColumn.minWidth){\r\n\t\t\t\t\t\tself.nextColumn = self.nextColumn.nextColumn();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\tif(self.nextColumn){\r\n\t\t\t\t\tself.nextColumn.setWidth(self.nextColumn.getWidth() - moveDiff);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tself.table.columnManager.rerenderColumns(true);\r\n\t\t\t\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\t\t\r\n\t\tfunction mouseUp(e){\r\n\t\t\t\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\t\t\t\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\t\r\n\t\t\tdocument.body.removeEventListener(\"mouseup\", mouseUp);\r\n\t\t\tdocument.body.removeEventListener(\"mousemove\", mouseMove);\r\n\t\t\t\r\n\t\t\thandle.removeEventListener(\"touchmove\", mouseMove);\r\n\t\t\thandle.removeEventListener(\"touchend\", mouseUp);\r\n\t\t\t\r\n\t\t\tself.table.element.classList.remove(\"tabulator-block-select\");\r\n\t\t\t\r\n\t\t\tif(self.startWidth !== column.getWidth()){\r\n\t\t\t\tself.dispatch(\"column-resized\", column);\r\n\t\t\t\tself.table.externalEvents.dispatch(\"columnResized\", column.getComponent());\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\te.stopPropagation(); //prevent resize from interfering with movable columns\r\n\t\t\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\t\t\r\n\t\tself.startX = typeof e.screenX === \"undefined\" ? e.touches[0].screenX : e.screenX;\r\n\t\tself.latestX = self.startX;\r\n\t\tself.startWidth = column.getWidth();\r\n\t\t\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\tself.dispatchExternal(\"rowResized\", row.getComponent());\r\n\t\t}\r\n\r\n\t\te.stopPropagation(); //prevent resize from interfering 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\t\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\t\t\r\n\t\tthis.binding = false;\r\n\t\tthis.visibilityObserver = false;\r\n\t\tthis.resizeObserver = false;\r\n\t\tthis.containerObserver = false;\r\n\t\t\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\t\t\r\n\t\tthis.autoResize = false;\r\n\t\t\r\n\t\tthis.visible = false;\r\n\t\t\r\n\t\tthis.initialized = false;\r\n\t\tthis.initialRedraw = false;\r\n\t\t\r\n\t\tthis.registerTableOption(\"autoResize\", true); //auto resize table\r\n\t}\r\n\t\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\t\t\t\r\n\t\t\tthis.tableHeight = table.element.clientHeight;\r\n\t\t\tthis.tableWidth = table.element.clientWidth;\r\n\t\t\t\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\t\t\t\r\n\t\t\tif(typeof IntersectionObserver !== \"undefined\" && typeof ResizeObserver !== \"undefined\" && table.rowManager.getRenderMode() === \"virtual\"){\r\n\t\t\t\t\r\n\t\t\t\tthis.initializeVisibilityObserver();\r\n\t\t\t\t\r\n\t\t\t\tthis.autoResize = true;\r\n\t\t\t\t\r\n\t\t\t\tthis.resizeObserver = new ResizeObserver((entry) => {\r\n\t\t\t\t\tif(!table.browserMobile || (table.browserMobile &&!table.modules.edit.currentCell)){\r\n\t\t\t\t\t\t\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\t\t\t\t\t\t\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\t\t\t\t\t\t\t\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\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tthis.redrawTable();\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\t\r\n\t\t\t\tthis.resizeObserver.observe(table.element);\r\n\t\t\t\t\r\n\t\t\t\ttableStyle = window.getComputedStyle(table.element);\r\n\t\t\t\t\r\n\t\t\t\tif(this.table.element.parentNode && !this.table.rowManager.fixedHeight && (tableStyle.getPropertyValue(\"max-height\") || tableStyle.getPropertyValue(\"min-height\"))){\r\n\t\t\t\t\t\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\t\t\t\t\t\t\t\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\t\t\t\t\t\t\t\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\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tthis.redrawTable();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t\t\r\n\t\t\t\t\tthis.containerObserver.observe(this.table.element.parentNode);\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\tthis.subscribe(\"table-resize\", this.tableResized.bind(this));\r\n\t\t\t\t\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\t\t\t\t\t\ttable.columnManager.rerenderColumns(true);\r\n\t\t\t\t\t\ttable.redraw();\r\n\t\t\t\t\t}\r\n\t\t\t\t};\r\n\t\t\t\t\r\n\t\t\t\twindow.addEventListener(\"resize\", this.binding);\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tthis.subscribe(\"table-destroy\", this.clearBindings.bind(this));\r\n\t\t}\r\n\t}\r\n\t\r\n\tinitializeVisibilityObserver(){\r\n\t\tthis.visibilityObserver = new IntersectionObserver((entries) => {\r\n\t\t\tthis.visible = entries[0].isIntersecting;\r\n\r\n\t\t\tif(!this.initialized){\r\n\t\t\t\tthis.initialized = true;\r\n\t\t\t\tthis.initialRedraw = !this.visible;\r\n\t\t\t}\r\n\r\n\t\t\tif(this.visible){\r\n\t\t\t\tthis.redrawTable(this.initialRedraw);\r\n\t\t\t\tthis.initialRedraw = false;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t});\r\n\t\t\r\n\t\tthis.visibilityObserver.observe(this.table.element);\r\n\t}\r\n\t\r\n\tredrawTable(force){\r\n\t\tif(this.initialized && this.visible){\r\n\t\t\tthis.table.columnManager.rerenderColumns(true);\r\n\t\t\tthis.table.redraw(force);\r\n\t\t}\r\n\t}\r\n\t\r\n\ttableResized(){\r\n\t\tthis.table.rowManager.redraw();\r\n\t}\r\n\t\r\n\tclearBindings(){\r\n\t\tif(this.binding){\r\n\t\t\twindow.removeEventListener(\"resize\", this.binding);\r\n\t\t}\r\n\t\t\r\n\t\tif(this.resizeObserver){\r\n\t\t\tthis.resizeObserver.unobserve(this.table.element);\r\n\t\t}\r\n\t\t\r\n\t\tif(this.visibilityObserver){\r\n\t\t\tthis.visibilityObserver.unobserve(this.table.element);\r\n\t\t}\r\n\t\t\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 responsive columns list\r\n\tinitialize(){\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\t\t\t\r\n\t\t\tif(this.table.options.responsiveLayout === \"collapse\"){\r\n\t\t\t\tthis.subscribe(\"row-data-changed\", this.generateCollapsedRowContent.bind(this));\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\tvar columns = [];\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//determine level of responsivity for each column\r\n\t\tthis.table.columnManager.columnsByIndex.forEach((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 && this.mode === \"collapse\"){\r\n\t\t\t\t\t\tthis.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((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.initializeResponsivity();\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\tfunction onRendered(callback){\r\n\t\t\t\t\t\tcallback();\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, onRendered)\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.innerHTML = 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;\r\n","import Module from '../../core/Module.js';\r\n\r\nclass SelectRow extends Module{\r\n\t\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\t\t\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\t\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 whether row is selectable\r\n\t\t\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\t\t\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\t\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.rowRetrieve.bind(this));\r\n\t\t\t\r\n\t\t\tif(this.table.options.selectable && !this.table.options.selectablePersistence){\r\n\t\t\t\tthis.subscribe(\"data-refreshing\", this.deselectRows.bind(this));\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\trowRetrieve(type, prevValue){\r\n\t\treturn type === \"selected\" ? this.selectedRows : prevValue;\r\n\t}\r\n\t\r\n\trowDeleted(row){\r\n\t\tthis._deselectRow(row, true);\r\n\t}\r\n\t\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\t\t\r\n\t\tif(silent !== true){\r\n\t\t\tthis._rowSelectionChanged();\r\n\t\t}\r\n\t}\r\n\t\r\n\tinitializeRow(row){\r\n\t\tvar self = this,\r\n\t\telement = row.getElement();\r\n\t\t\r\n\t\t// trigger end of row selection\r\n\t\tvar endSelect = function(){\r\n\t\t\t\r\n\t\t\tsetTimeout(function(){\r\n\t\t\t\tself.selecting = false;\r\n\t\t\t}, 50);\r\n\t\t\t\r\n\t\t\tdocument.body.removeEventListener(\"mouseup\", endSelect);\r\n\t\t};\r\n\t\t\r\n\t\trow.modules.select = {selected:false};\r\n\t\t\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\t\t\t\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\", this.handleComplexRowClick.bind(this, row));\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\t\t\t\t\t\t\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\t\t\t\t\t\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\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tself.selecting = true;\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tself.selectPrev = [];\r\n\t\t\t\t\t\t\t\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\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tself.toggleRow(row);\r\n\t\t\t\t\t\t\t\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\t\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\t\t\t\t\t\t\t\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\t\t\t\t\t\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\t\t\t\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\t\r\n\thandleComplexRowClick(row, e){\r\n\t\tif(e.shiftKey){\r\n\t\t\tthis.table._clearSelection();\r\n\t\t\tthis.lastClickedRow = this.lastClickedRow || row;\r\n\t\t\t\r\n\t\t\tvar lastClickedRowIdx = this.table.rowManager.getDisplayRowIndex(this.lastClickedRow);\r\n\t\t\tvar rowIdx = this.table.rowManager.getDisplayRowIndex(row);\r\n\t\t\t\r\n\t\t\tvar fromRowIdx = lastClickedRowIdx <= rowIdx ? lastClickedRowIdx : rowIdx;\r\n\t\t\tvar toRowIdx = lastClickedRowIdx >= rowIdx ? lastClickedRowIdx : rowIdx;\r\n\t\t\t\r\n\t\t\tvar rows = this.table.rowManager.getDisplayRows().slice(0);\r\n\t\t\tvar toggledRows = rows.splice(fromRowIdx, toRowIdx - fromRowIdx + 1);\r\n\t\t\t\r\n\t\t\tif(e.ctrlKey || e.metaKey){\r\n\t\t\t\ttoggledRows.forEach((toggledRow)=>{\r\n\t\t\t\t\tif(toggledRow !== this.lastClickedRow){\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\tif(this.table.options.selectable !== true && !this.isRowSelected(row)){\r\n\t\t\t\t\t\t\tif(this.selectedRows.length < this.table.options.selectable){\r\n\t\t\t\t\t\t\t\tthis.toggleRow(toggledRow);\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\tthis.toggleRow(toggledRow);\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\tthis.lastClickedRow = row;\r\n\t\t\t}else{\r\n\t\t\t\tthis.deselectRows(undefined, true);\r\n\t\t\t\t\r\n\t\t\t\tif(this.table.options.selectable !== true){\r\n\t\t\t\t\tif(toggledRows.length > this.table.options.selectable){\r\n\t\t\t\t\t\ttoggledRows = toggledRows.slice(0, this.table.options.selectable);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\tthis.selectRows(toggledRows);\r\n\t\t\t}\r\n\t\t\tthis.table._clearSelection();\r\n\t\t}\r\n\t\telse if(e.ctrlKey || e.metaKey){\r\n\t\t\tthis.toggleRow(row);\r\n\t\t\tthis.lastClickedRow = row;\r\n\t\t}else{\r\n\t\t\tthis.deselectRows(undefined, true);\r\n\t\t\tthis.selectRows(row);\r\n\t\t\tthis.lastClickedRow = row;\r\n\t\t}\r\n\t}\r\n\t\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\t\r\n\t//select a number of rows\r\n\tselectRows(rows){\r\n\t\tvar rowMatch;\r\n\t\t\r\n\t\tswitch(typeof rows){\r\n\t\t\tcase \"undefined\":\r\n\t\t\t\tthis.table.rowManager.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\t\t\t\tthis._rowSelectionChanged();\r\n\t\t\t\tbreak;\r\n\t\t\t\r\n\t\t\tcase \"string\":\r\n\t\t\t\trowMatch = this.table.rowManager.findRow(rows);\r\n\t\t\t\r\n\t\t\t\tif(rowMatch){\r\n\t\t\t\t\tthis._selectRow(rowMatch, true, true);\r\n\t\t\t\t\tthis._rowSelectionChanged();\r\n\t\t\t\t}else{\r\n\t\t\t\t\trowMatch = this.table.rowManager.getRows(rows);\r\n\t\t\t\t\t\r\n\t\t\t\t\trowMatch.forEach((row) => {\r\n\t\t\t\t\t\tthis._selectRow(row, true, true);\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\tif(rowMatch.length){\r\n\t\t\t\t\t\tthis._rowSelectionChanged();\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\t\t\tdefault:\r\n\t\t\t\tif(Array.isArray(rows)){\r\n\t\t\t\t\trows.forEach((row) => {\r\n\t\t\t\t\t\tthis._selectRow(row, true, true);\r\n\t\t\t\t\t});\r\n\t\t\t\t\r\n\t\t\t\t\tthis._rowSelectionChanged();\r\n\t\t\t\t}else{\r\n\t\t\t\t\tthis._selectRow(rows, false, true);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\t\r\n\t//select an individual row\r\n\t_selectRow(rowInfo, silent, force){\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\t\t\r\n\t\tvar row = this.table.rowManager.findRow(rowInfo);\r\n\t\t\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\t\t\t\t\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\t\t\t\t\r\n\t\t\t\tthis.selectedRows.push(row);\r\n\t\t\t\t\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\t\t\t\t\r\n\t\t\t\tthis.dispatchExternal(\"rowSelected\", row.getComponent());\r\n\t\t\t\t\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\t\r\n\tisRowSelected(row){\r\n\t\treturn this.selectedRows.indexOf(row) !== -1;\r\n\t}\r\n\t\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\t\t\r\n\t\tif(typeof rows == \"undefined\"){\r\n\t\t\t\r\n\t\t\trowCount = self.selectedRows.length;\r\n\t\t\t\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\t\t\t\r\n\t\t\tif(rowCount){\r\n\t\t\t\tself._rowSelectionChanged(silent);\r\n\t\t\t}\r\n\t\t\t\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\t\t\t\t\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\t\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\t\t\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\t\t\t\r\n\t\t\tif(index > -1){\r\n\t\t\t\t\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\t\t\t\t\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\t\t\t\t\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\t\t\t\t\r\n\t\t\t\tthis.dispatchExternal(\"rowDeselected\", row.getComponent());\r\n\t\t\t\t\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\t\r\n\tgetSelectedData(){\r\n\t\tvar data = [];\r\n\t\t\r\n\t\tthis.selectedRows.forEach(function(row){\r\n\t\t\tdata.push(row.getData());\r\n\t\t});\r\n\t\t\r\n\t\treturn data;\r\n\t}\r\n\t\r\n\tgetSelectedRows(){\r\n\t\t\r\n\t\tvar rows = [];\r\n\t\t\r\n\t\tthis.selectedRows.forEach(function(row){\r\n\t\t\trows.push(row.getComponent());\r\n\t\t});\r\n\t\t\r\n\t\treturn rows;\r\n\t}\r\n\t\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\t\t\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\t\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\t\t\r\n\t\trow._row.modules.select.checkboxEl = element;\r\n\t}\r\n\t\r\n\tregisterHeaderSelectCheckbox (element) {\r\n\t\tthis.headerCheckboxElement = element;\r\n\t}\r\n\t\r\n\tchildRowSelection(row, select){\r\n\t\tvar children = this.table.modules.dataTree.getChildren(row, true);\r\n\t\t\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 DT = window.DateTime || luxon.DateTime;\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 DT != \"undefined\"){\r\n\t\tif(!DT.isDateTime(a)){\r\n\t\t\tif(format === \"iso\"){\r\n\t\t\t\ta = DT.fromISO(String(a));\r\n\t\t\t}else{\r\n\t\t\t\ta = DT.fromFormat(String(a), format);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(!DT.isDateTime(b)){\r\n\t\t\tif(format === \"iso\"){\r\n\t\t\t\tb = DT.fromISO(String(b));\r\n\t\t\t}else{\r\n\t\t\t\tb = DT.fromFormat(String(b), format);\r\n\t\t\t}\r\n\t\t}\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 luxon.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\t\tif(params.locale){\r\n\t\t\t\t\tlocale = this.langLocale();\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"string\":\r\n\t\t\t\tlocale = params.locale;\r\n\t\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 type = params.type || \"length\",\r\n\talignEmptyValues = params.alignEmptyValues,\r\n\temptyAlign = 0;\r\n\r\n\tfunction calc(value){\r\n\t\tvar result;\r\n\r\n\t\tswitch(type){\r\n\t\t\tcase \"length\":\r\n\t\t\t\tresult = value.length;\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase \"sum\":\r\n\t\t\t\tresult = value.reduce(function(c, d){\r\n\t\t\t\t\treturn c + d;\r\n\t\t\t\t});\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase \"max\":\r\n\t\t\t\tresult = Math.max.apply(null, value) ;\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase \"min\":\r\n\t\t\t\tresult = Math.min.apply(null, value) ;\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase \"avg\":\r\n\t\t\t\tresult = value.reduce(function(c, d){\r\n\t\t\t\t\treturn c + d;\r\n\t\t\t\t}) / value.length;\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\t//handle non array values\r\n\tif(!Array.isArray(a)){\r\n\t\temptyAlign = !Array.isArray(b) ? 0 : -1;\r\n\t}else if(!Array.isArray(b)){\r\n\t\temptyAlign = 1;\r\n\t}else{\r\n\t\treturn calc(b) - calc(a);\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\tinitialize(){\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\ttableBuilt(){\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\tremoteSortParams(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\t\tif(Sort.sorters[column.definition.sorter]){\r\n\t\t\t\t\tsorter = Sort.sorters[column.definition.sorter];\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.warn(\"Sort Error - No such sorter found: \", column.definition.sorter);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase \"function\":\r\n\t\t\t\tsorter = column.definition.sorter;\r\n\t\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\tswitch(this.table.options.headerSortElement){\r\n\t\t\t\tcase \"function\":\r\n\t\t\t\t\t//do nothing\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"object\":\r\n\t\t\t\t\tarrowEl.appendChild(this.table.options.headerSortElement);\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tdefault:\r\n\t\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\tthis.setColumnHeaderSortIcon(column, \"none\");\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\t\tdir = \"desc\";\r\n\t\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\t\tdir = \"asc\";\r\n\t\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\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\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\tmatch = sorters.splice(match, 1)[0];\r\n\t\t\t\t\t\t\tif(dir != \"none\"){\r\n\t\t\t\t\t\t\t\tsorters.push(match);\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(null, false, false);\r\n\t\t}else{\r\n\t\t\tthis.refreshData(true);\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\t\tsorter = \"string\";\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase \"boolean\":\r\n\t\t\t\t\t\tsorter = \"boolean\";\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tdefault:\r\n\t\t\t\t\t\tif(!isNaN(value) && value !== \"\"){\r\n\t\t\t\t\t\t\tsorter = \"number\";\r\n\t\t\t\t\t\t}else{\r\n\t\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\t\tsorter = \"alphanum\";\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\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\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;\r\n\r\n\t\t\t\tif(item.column){\r\n\t\t\t\t\tsortObj = item.column.modules.sort;\r\n\r\n\t\t\t\t\tif(sortObj){\r\n\r\n\t\t\t\t\t\t//if no sorter has been defined, take a guess\r\n\t\t\t\t\t\tif(!sortObj.sorter){\r\n\t\t\t\t\t\t\tsortObj.sorter = self.findSorter(item.column);\r\n\t\t\t\t\t\t}\r\n\r\n\t\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\t\tsortListActual.push(item);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tself.setColumnHeader(item.column, item.dir);\r\n\t\t\t\t}\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\r\n\t\treturn data;\r\n\t}\r\n\r\n\t//clear sort arrows on columns\r\n\tclearColumnHeaders(){\r\n\t\tthis.table.columnManager.getRealColumns().forEach((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\tthis.setColumnHeaderSortIcon(column, \"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 === \"asc\" ? \"ascending\" : \"descending\");\r\n\t\tthis.setColumnHeaderSortIcon(column, dir);\r\n\t}\r\n\r\n\tsetColumnHeaderSortIcon(column, dir){\r\n\t\tvar sortEl = column.modules.sort.element,\r\n\t\tarrowEl;\r\n\r\n\t\tif(column.definition.headerSort && typeof this.table.options.headerSortElement === \"function\"){\r\n\t\t\twhile(sortEl.firstChild) sortEl.removeChild(sortEl.firstChild);\r\n\r\n\t\t\tarrowEl = this.table.options.headerSortElement.call(this.table, column.getComponent(), dir);\r\n\t\t\t\r\n\t\t\tif(typeof arrowEl === \"object\"){\r\n\t\t\t\tsortEl.appendChild(arrowEl);\r\n\t\t\t}else{\r\n\t\t\t\tsortEl.innerHTML = arrowEl;\r\n\t\t\t}\r\n\t\t}\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;\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;","import Module from '../../core/Module.js';\r\nimport Cell from '../../core/cell/Cell.js';\r\n\r\nclass Tooltip extends Module{\r\n\t\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\t\t\r\n\t\tthis.tooltipSubscriber = null,\r\n\t\tthis.headerSubscriber = null,\r\n\t\t\r\n\t\tthis.timeout = null;\r\n\t\tthis.popupInstance = null;\r\n\t\t\r\n\t\tthis.registerTableOption(\"tooltipGenerationMode\", undefined); //deprecated\r\n\t\tthis.registerTableOption(\"tooltipDelay\", 300); \r\n\t\t\r\n\t\tthis.registerColumnOption(\"tooltip\");\r\n\t\tthis.registerColumnOption(\"headerTooltip\");\r\n\t}\r\n\t\r\n\tinitialize(){\r\n\t\tthis.deprecatedOptionsCheck();\r\n\t\t\r\n\t\tthis.subscribe(\"column-init\", this.initializeColumn.bind(this));\r\n\t}\r\n\t\r\n\tdeprecatedOptionsCheck(){\r\n\t\tthis.deprecationCheckMsg(\"tooltipGenerationMode\", \"This option is no longer needed as tooltips are always generated on hover now\");\r\n\t}\t\r\n\t\r\n\tinitializeColumn(column){\r\n\t\tif(column.definition.headerTooltip && !this.headerSubscriber){\r\n\t\t\tthis.headerSubscriber = true;\r\n\t\t\t\r\n\t\t\tthis.subscribe(\"column-mousemove\", this.mousemoveCheck.bind(this, \"headerTooltip\"));\r\n\t\t\tthis.subscribe(\"column-mouseout\", this.mouseoutCheck.bind(this, \"headerTooltip\"));\r\n\t\t}\r\n\t\t\r\n\t\tif(column.definition.tooltip && !this.tooltipSubscriber){\r\n\t\t\tthis.tooltipSubscriber = true;\r\n\t\t\t\r\n\t\t\tthis.subscribe(\"cell-mousemove\", this.mousemoveCheck.bind(this, \"tooltip\"));\r\n\t\t\tthis.subscribe(\"cell-mouseout\", this.mouseoutCheck.bind(this, \"tooltip\"));\r\n\t\t}\r\n\t}\r\n\t\r\n\tmousemoveCheck(action, e, component){\r\n\t\tvar tooltip = action === \"tooltip\" ? component.column.definition.tooltip : component.definition.headerTooltip;\r\n\t\t\r\n\t\tif(tooltip){\r\n\t\t\tthis.clearPopup();\r\n\t\t\tthis.timeout = setTimeout(this.loadTooltip.bind(this, e, component, tooltip), this.table.options.tooltipDelay);\r\n\t\t}\r\n\t}\r\n\r\n\tmouseoutCheck(action, e, component){\r\n\t\tif(!this.popupInstance){\r\n\t\t\tthis.clearPopup();\r\n\t\t}\r\n\t}\r\n\t\r\n\tclearPopup(action, e, component){\r\n\t\tclearTimeout(this.timeout);\r\n\t\tthis.timeout = null;\r\n\t\t\r\n\t\tif(this.popupInstance){\r\n\t\t\tthis.popupInstance.hide();\r\n\t\t}\r\n\t}\r\n\t\r\n\tloadTooltip(e, component, tooltip){\r\n\t\tvar contentsEl, renderedCallback, coords;\r\n\r\n\t\tfunction onRendered(callback){\r\n\t\t\trenderedCallback = callback;\r\n\t\t}\r\n\t\t\r\n\t\tif(typeof tooltip === \"function\"){\r\n\t\t\ttooltip = tooltip(e, component.getComponent(), onRendered);\r\n\t\t}\r\n\t\t\r\n\t\tif(tooltip instanceof HTMLElement){\r\n\t\t\tcontentsEl = tooltip;\r\n\t\t}else{\r\n\t\t\tcontentsEl = document.createElement(\"div\");\r\n\t\t\t\r\n\t\t\tif(tooltip === true){\r\n\t\t\t\tif(component instanceof Cell){\r\n\t\t\t\t\ttooltip = component.value;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tif(component.definition.field){\r\n\t\t\t\t\t\tthis.langBind(\"columns|\" + component.definition.field, (value) => {\r\n\t\t\t\t\t\t\tcontentsEl.innerHTML = tooltip = value || component.definition.title;\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\ttooltip = component.definition.title;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tcontentsEl.innerHTML = tooltip;\r\n\t\t}\r\n\t\t\r\n\t\tif(tooltip || tooltip === 0 || tooltip === false){\r\n\t\t\tcontentsEl.classList.add(\"tabulator-tooltip\");\r\n\r\n\t\t\tcontentsEl.addEventListener(\"mousemove\", e => e.preventDefault());\r\n\t\t\t\r\n\t\t\tthis.popupInstance = this.popup(contentsEl);\r\n\t\t\t\r\n\t\t\tif(typeof renderedCallback === \"function\"){\r\n\t\t\t\tthis.popupInstance.renderCallback(renderedCallback);\r\n\t\t\t}\r\n\r\n\t\t\tcoords = this.popupInstance.containerEventCoords(e);\r\n\t\t\t\r\n\t\t\tthis.popupInstance.show(coords.x + 15, coords.y + 15).hideOnBlur(() => {\r\n\t\t\t\tthis.dispatchExternal(\"TooltipClosed\", component.getComponent());\r\n\t\t\t\tthis.popupInstance = null;\r\n\t\t\t});\r\n\t\t\t\r\n\t\t\tthis.dispatchExternal(\"TooltipOpened\", component.getComponent());\r\n\t\t}\r\n\t}\r\n}\r\n\r\nTooltip.moduleName = \"tooltip\";\r\n\r\nexport default Tooltip;\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\r\n\t\tvalue = Number(value);\r\n\r\n\t\treturn !isNaN(value) && 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\t\r\n\t\tvalue = Number(value);\r\n\r\n\t\treturn !isNaN(value) && 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\r\n\t\tif(typeof parameters == \"string\"){\r\n\t\t\tparameters = parameters.split(\"|\");\r\n\t\t}\r\n\r\n\t\treturn 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\t\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\t\t\r\n\t\tthis.invalidCells = [];\r\n\t\t\r\n\t\tthis.registerTableOption(\"validationMode\", \"blocking\");\r\n\t\t\r\n\t\tthis.registerColumnOption(\"validator\");\r\n\t\t\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\t\t\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\t\t\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\t\r\n\t\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\t\r\n\t\tthis.subscribe(\"edit-success\", this.editValidate.bind(this));\r\n\t\tthis.subscribe(\"edit-editor-clear\", this.editorClear.bind(this));\r\n\t\tthis.subscribe(\"edit-edited-clear\", this.editedClear.bind(this));\r\n\t}\r\n\t\r\n\t///////////////////////////////////\r\n\t///////// Event Handling //////////\r\n\t///////////////////////////////////\r\n\t\r\n\teditValidate(cell, value, previousValue){\r\n\t\tvar valid = this.table.options.validationMode !== \"manual\" ? this.validate(cell.column.modules.validate, cell, value) : true;\r\n\t\t\r\n\t\t// allow time for editor to make render changes then style cell\r\n\t\tif(valid !== true){\r\n\t\t\tsetTimeout(() => {\r\n\t\t\t\tcell.getElement().classList.add(\"tabulator-validation-fail\");\r\n\t\t\t\tthis.dispatchExternal(\"validationFailed\", cell.getComponent(), value, valid);\r\n\t\t\t});\r\n\t\t}\r\n\t\t\r\n\t\treturn valid;\r\n\t}\r\n\t\r\n\teditorClear(cell, cancelled){\r\n\t\tif(cancelled){\r\n\t\t\tif(cell.column.modules.validate){\r\n\t\t\t\tthis.cellValidate(cell);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tcell.getElement().classList.remove(\"tabulator-validation-fail\");\r\n\t}\r\n\t\r\n\teditedClear(cell){\r\n\t\tif(cell.modules.validate){\r\n\t\t\tcell.modules.validate.invalid = false;\r\n\t\t}\r\n\t}\r\n\t\r\n\t///////////////////////////////////\r\n\t////////// Cell Functions /////////\r\n\t///////////////////////////////////\r\n\t\r\n\tcellIsValid(cell){\r\n\t\treturn cell.modules.validate ? (cell.modules.validate.invalid || true) : true;\r\n\t}\r\n\t\r\n\tcellValidate(cell){\r\n\t\treturn this.validate(cell.column.modules.validate, cell, cell.getValue());\r\n\t}\r\n\t\r\n\t///////////////////////////////////\r\n\t///////// Column Functions ////////\r\n\t///////////////////////////////////\r\n\t\r\n\tcolumnValidate(column){\r\n\t\tvar invalid = [];\r\n\t\t\r\n\t\tcolumn.cells.forEach((cell) => {\r\n\t\t\tif(this.cellValidate(cell) !== true){\r\n\t\t\t\tinvalid.push(cell.getComponent());\r\n\t\t\t}\r\n\t\t});\r\n\t\t\r\n\t\treturn invalid.length ? invalid : true;\r\n\t}\r\n\t\r\n\t///////////////////////////////////\r\n\t////////// Row Functions //////////\r\n\t///////////////////////////////////\r\n\t\r\n\trowValidate(row){\r\n\t\tvar invalid = [];\r\n\t\t\r\n\t\trow.cells.forEach((cell) => {\r\n\t\t\tif(this.cellValidate(cell) !== true){\r\n\t\t\t\tinvalid.push(cell.getComponent());\r\n\t\t\t}\r\n\t\t});\r\n\t\t\r\n\t\treturn invalid.length ? invalid : true;\r\n\t}\r\n\t\r\n\t///////////////////////////////////\r\n\t///////// Table Functions /////////\r\n\t///////////////////////////////////\r\n\t\r\n\t\r\n\tuserClearCellValidation(cells){\r\n\t\tif(!cells){\r\n\t\t\tcells = this.getInvalidCells();\r\n\t\t}\r\n\t\t\r\n\t\tif(!Array.isArray(cells)){\r\n\t\t\tcells = [cells];\r\n\t\t}\r\n\t\t\r\n\t\tcells.forEach((cell) => {\r\n\t\t\tthis.clearValidation(cell._getSelf());\r\n\t\t});\r\n\t}\r\n\t\r\n\tuserValidate(cells){\r\n\t\tvar output = [];\r\n\t\t\r\n\t\t//clear row data\r\n\t\tthis.table.rowManager.rows.forEach((row) => {\r\n\t\t\trow = row.getComponent();\r\n\t\t\t\r\n\t\t\tvar valid = row.validate();\r\n\t\t\t\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\t\t\r\n\t\treturn output.length ? output : true;\r\n\t}\r\n\t\r\n\t///////////////////////////////////\r\n\t///////// Internal Logic //////////\r\n\t///////////////////////////////////\r\n\t\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\t\r\n\t//validate\r\n\tinitializeColumn(column){\r\n\t\tvar self = this,\r\n\t\tconfig = [],\r\n\t\tvalidator;\r\n\t\t\r\n\t\tif(column.definition.validator){\r\n\t\t\t\r\n\t\t\tif(Array.isArray(column.definition.validator)){\r\n\t\t\t\tcolumn.definition.validator.forEach((item) => {\r\n\t\t\t\t\tvalidator = self._extractValidator(item);\r\n\t\t\t\t\t\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\t\t\t\t\r\n\t\t\t}else{\r\n\t\t\t\tvalidator = this._extractValidator(column.definition.validator);\r\n\t\t\t\t\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\t\t\t\r\n\t\t\tcolumn.modules.validate = config.length ? config : false;\r\n\t\t}\r\n\t}\r\n\t\r\n\t_extractValidator(value){\r\n\t\tvar type, params, pos;\r\n\t\t\r\n\t\tswitch(typeof value){\r\n\t\t\tcase \"string\":\r\n\t\t\t\tpos = value.indexOf(':');\r\n\t\t\t\r\n\t\t\t\tif(pos > -1){\r\n\t\t\t\t\ttype = value.substring(0,pos);\r\n\t\t\t\t\tparams = value.substring(pos+1);\r\n\t\t\t\t}else{\r\n\t\t\t\t\ttype = value;\r\n\t\t\t\t}\r\n\t\t\t\r\n\t\t\t\treturn this._buildValidator(type, params);\r\n\t\t\t\r\n\t\t\tcase \"function\":\r\n\t\t\t\treturn this._buildValidator(value);\r\n\t\t\t\r\n\t\t\tcase \"object\":\r\n\t\t\t\treturn this._buildValidator(value.type, value.parameters);\r\n\t\t}\r\n\t}\r\n\t\r\n\t_buildValidator(type, params){\r\n\t\t\r\n\t\tvar func = typeof type == \"function\" ? type : Validate.validators[type];\r\n\t\t\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\t\r\n\tvalidate(validators, cell, value){\r\n\t\tvar self = this,\r\n\t\tfailedValidators = [],\r\n\t\tinvalidIndex = this.invalidCells.indexOf(cell);\r\n\t\t\r\n\t\tif(validators){\r\n\t\t\tvalidators.forEach((item) => {\r\n\t\t\t\tif(!item.func.call(self, cell.getComponent(), value, item.params)){\r\n\t\t\t\t\tfailedValidators.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\t\t\r\n\t\tif(!cell.modules.validate){\r\n\t\t\tcell.modules.validate = {};\r\n\t\t}\r\n\t\t\r\n\t\tif(!failedValidators.length){\r\n\t\t\tcell.modules.validate.invalid = false;\r\n\t\t\tcell.getElement().classList.remove(\"tabulator-validation-fail\");\r\n\t\t\t\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 = failedValidators;\r\n\t\t\t\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\t\t\t\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\t\t\r\n\t\treturn failedValidators.length ? failedValidators : true;\r\n\t}\r\n\t\r\n\tgetInvalidCells(){\r\n\t\tvar output = [];\r\n\t\t\r\n\t\tthis.invalidCells.forEach((cell) => {\r\n\t\t\toutput.push(cell.getComponent());\r\n\t\t});\r\n\t\t\r\n\t\treturn output;\r\n\t}\r\n\t\r\n\tclearValidation(cell){\r\n\t\tvar invalidIndex;\r\n\t\t\r\n\t\tif(cell.modules.validate && cell.modules.validate.invalid){\r\n\t\t\t\r\n\t\t\tcell.getElement().classList.remove(\"tabulator-validation-fail\");\r\n\t\t\tcell.modules.validate.invalid = false;\r\n\t\t\t\r\n\t\t\tinvalidIndex = this.invalidCells.indexOf(cell);\r\n\t\t\t\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;\r\n","//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","columnsChanged","this","dataLoader","load","undefined","modules","localize","getText","arguments","bind","getLocale","comms","getConnections","send","layout","getMode","force","eventBus","subscribe","unsubscribe","key","subscribed","subscriptionChange","dispatch","chain","confirm","externalEvents","options","value","oldOption","newOption","deprecationAdvisor","check","msg","checkMsg","module","ColumnComponent","column","_column","type","Proxy","get","target","name","receiver","componentFunctionBinder","handle","getElement","getDefinition","getField","getTitleDownload","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","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","val","_this2","innerHTML","Node","firstChild","removeChild","appendChild","containerOnly","layoutElement","setValueProcessData","cellRendered","cellEdited","call","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","titleDownload","titleFormatterRendered","mapDefinitions","setField","maxInitialWidth","widthFixed","i","newCol","attachColumn","checkColumnVisibility","registerColumnField","_initialize","el","columnHeaderVertAlign","defaults","columnDefaults","optionsList","generate","defaultOptionList","Object","keys","indexOf","title","nestedFieldSeparator","_getNestedData","_getFlatData","_setNestedData","_setFlatData","registerColumnPosition","reRegisterPosition","headerVertical","_buildColumnHeaderContent","_buildGroupHeader","_buildColumnHeader","_this3","setMinWidth","parseInt","setMaxWidth","headerHozAlign","_buildColumnHeaderTitle","editableTitle","addEventListener","e","stopPropagation","focus","_this4","langBind","text","_formatColumnHeaderTitle","contents","_this5","dataObj","structure","columnRendered","alignment","parentHeight","getGroupElement","clientHeight","getHeadersElement","minHeight","verticalAlign","paddingTop","clearVerticalAlign","getFirstColumn","getLastColumn","traverse","concat","getColumns","getTopColumn","updateBranches","colDefs","responsiveToggle","verticalAlignHeaders","matchChildWidths","childWidth","child","index","splice","setWidthActual","isNaN","Math","floor","clientWidth","max","min","rows","heightInitialized","offsetParent","clearCellHeight","calcHeight","setCellHeight","ceil","getBoundingClientRect","Promise","resolve","reject","_this6","cellCount","deregisterColumn","findColumnIndex","_nextVisibleColumn","getColumnByIndex","_prevVisibleColumn","fitToData","clearWidth","setTo","error","assign","addColumn","then","_this7","defaultOptions","Helpers","box","window","pageYOffset","documentElement","clientTop","pageXOffset","clientLeft","obj","clone","list","objectProto","__proto__","arrayProto","Array","isArray","subject","match","copy","_typeof","findIndex","item","unshift","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","BasicHorizontal","VirtualDomHorizontal","leftCol","rightCol","scrollLeft","vDomScrollPosLeft","vDomScrollPosRight","vDomPadLeft","vDomPadRight","fitDataColAvg","windowBuffer","visibleRows","initialized","isFitData","compatibilityCheck","layoutCheck","vertScrollListen","ok","find","col","frozen","startsWith","clearVisRowCache","dataChange","scroll","buffer","columnsByIndex","old","cols","colPos","clear","calcWindowBuffer","config","leftPos","rightPos","fitDataCheck","vdomHoz","paddingLeft","paddingRight","reinitChanged","reinitializeRows","initializeRow","reinitializeRow","change","generateCells","colEnd","layoutRefresh","getVisibleRows","diff","abs","addColRight","removeColLeft","addColLeft","removeColRight","start","end","changes","working","getCell","fitDataColActualWidthCheck","prepend","_this8","ex","message","_this9","newWidth","widthDiff","colPositionAdjust","ColumnManager","blockHozScrollEvent","headersElement","columnsByField","defaultColumnOptions","redrawBlockUpdate","renderer","initializeRenderer","createHeadersElement","createHeaderElement","insertBefore","scrollHorizontal","renderClass","renderers","RendererVirtualDomHorizontal","RendererBasicHorizontal","renderHorizontal","initialize","headerVisible","hozAdjust","scrollWidth","marginLeft","scrollColumns","sorter","definitions","autoColumnsDefinitions","setColumns","_addColumn","_reIndexColumns","redraw","before","nextToColumn","colEl","topColumn","parentIndex","nextEl","nextSibling","getHeight","adjustTableSize","_getSelf","HTMLElement","root","matches","active","structured","from","moveColumnActual","reinitialize","_moveColumnInArray","getComponents","updateRows","toIndex","fromIndex","adjust","scrollToColumnPosition","scrollToColumnIfVisible","offsetLeft","generateCell","totalWidth","fixedWidth","colWidth","layoutMode","resetScroll","footerManager","RowComponent","_row","transform","getCells","getPosition","watchPosition","moveToRow","updateData","normalizeHeight","nextRow","prevRow","Row","manualHeight","outerHeight","positionWatchers","created","setData","create","deleteCells","renderRowCells","rowFormatter","rerenderRowCells","children","maxHeight","rowHeight","resizableRows","setHeight","clearHeight","updatedData","newRowData","tempData","attrname","JSON","parse","getColumnsByFieldRoot","findCell","nextDisplayRow","prevDisplayRow","toRow","findRow","moveRowActual","refreshActiveData","deleteActual","detachModules","deleteRow","includes","isDisplayed","group","BasicVertical","visibility","onlyGroupHeaders","styleRow","rowTop","VirtualDomVertical","vDomRowHeight","vDomTop","vDomBottom","vDomScrollPosTop","vDomScrollPosBottom","vDomTopPad","vDomBottomPad","vDomMaxRenderChain","vDomWindowBuffer","vDomWindowMinTotalRows","vDomWindowMinMarginRows","vDomTopNewRows","vDomBottomNewRows","paddingBottom","_virtualRenderFill","topRow","topOffset","deinitializeHeight","_showPlaceholder","topDiff","bottomDiff","margin","_addTopRow","vDomScrollHeight","_removeBottomRow","_addBottomRow","_removeTopRow","renderVerticalBuffer","topEdge","bottomEdge","topFound","bottomRow","slice","forceMove","holder","topPad","rowsHeight","heightOccupied","topPadHeight","rowsCount","containerHeight","fillableSpace","addedRows","paddingAdjust","_quickNormalizeRowHeight","removableRows","RowManager","createHolderElement","createTableElement","heightFixer","placeholder","placeholderContents","firstRender","renderMode","fixedHeight","activeRowsPipeline","activeRows","activeRowsCount","displayRows","displayRowsCount","redrawBlockRestoreConfig","redrawBlockRenderInPosition","dataPipeline","displayPipeline","initializePlaceholder","leftDir","topDir","_positionPlaceholder","scrollRows","renderInPosition","pagination","_setDataActual","reRenderInPosition","autoColumns","generateColumnsFromRowData","_wipeElements","wipe","allIndex","activeIndex","setActiveRows","displayRowIterator","displayIndex","regenerateRowPositions","pos","addRowActual","findAddRowPos","reverse","addRow","_clearPlaceholder","addRowPos","chainResult","moveRowInArray","findRowIndex","rowOnly","getDisplayRowIndex","getRows","handler","priority","sort","a","b","skipStage","stage","cascadeOrder","destroyed","refreshPipelines","renderTable","layoutColumnsOnNewData","resetDisplayRows","setDisplayRows","setPosition","viewable","RendererVirtualDomVertical","RendererBasicVertical","renderVertical","_clearTable","renderEmptyScroll","initialHeight","otherHeight","external","resize","tableWidth","browser","event","createEvent","initEvent","dispatchEvent","Event","FooterManager","containerElement","createContainerElement","initializeElement","footerElement","querySelector","activate","deactivate","InteractionManager","abortClasses","previousTargets","listeners","componentMap","pseudoTrackers","subscriber","pseudoTracking","buildListenerMap","bindSubscriptionWatchers","listenerMap","listener","components","pseudoMouseEnter","pseudoMouseLeave","leaveList","linkedKeys","filter","links","values","comp","subscriptionChanged","clearWatchers","added","bindPseudoEvents","updateEventListeners","track","removeEventListener","path","composedPath","targets","findTargets","bindComponents","triggerEvents","targetMatches","previousTarget","closest","ComponentFunctionBinder","bindings","funcName","debugInvalidComponentFuncs","DataLoader","requestOrder","loading","params","replace","requestNo","alertLoader","mapParams","dataSendParams","response","objectInvert","dataReceiveParams","rowData","clearAlert","alertError","setTimeout","dataLoaderErrorTimeout","map","alertManager","alert","dataLoaderLoading","langText","dataLoaderError","ExternalEventBus","debug","events","subscriptionNotifiers","_debugDispatch","_dispatch","_notifySubscriptionChange","notifiers","args","shift","callResult","apply","log","InternalEventBus","_debugChain","_chain","_debugConfirm","_confirm","fallback","confirmed","DeprecationAdvisor","_warnUser","TableRegistry","tables","query","results","querySelectorAll","matchElement","Tabulator","lookupTable","Popup","container","_lookupContainer","reversedX","childPopup","blurable","blurCallback","renderedCallback","hideable","blurEvent","escEvent","_escapeCheck","destroyBinding","tableDestroyed","popupContainer","_checkContainerIsParent","body","touch","MouseEvent","x","touches","pageX","y","pageY","parentOffset","containerOffset","origin","parentEl","coords","elementPositionCoords","containerEventCoords","_fitToScreen","keyCode","Module","_handler","register","func","initGuard","registerDataPipelineHandler","registerDisplayPipelineHandler","lookupIndex","append","menuEl","menuContainer","content","forced","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","dataChanged","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","bindStaticFunctionality","bindModules","coreModules","moduleBindings","extendModule","property","source","registerModule","mod","registerModuleBinding","findTable","prototype","orderedStartMods","orderedEndMods","unOrderedMods","moduleCore","modulesCore","moduleInitOrder","modulesRegular","core","mods","Alert","_createAlertElement","msgElement","_createMsgElement","_typeClass","interactionMonitor","browserSlow","browserMobile","rtl","originalElement","initializeCoreSystems","_create","_clearObjectPointers","_mapDeprecatedFunctionality","debugEventsExternal","debugEventsInternal","InteractionMonitor","getSelection","empty","removeAllRanges","selection","_rtlCheck","_buildElement","_initializeTable","_loadInitialData","getComputedStyle","textDirection","direction","reactiveData","newElement","tagName","attributes","replaceChild","_detectBrowser","deregister","ua","userAgent","vendor","opera","test","stack","line","debugInitialization","Error","trim","restoreRedraw","blockActiveLoad","clearData","getDataCount","responses","addRows","newRows","getRowFromPosition","foundRows","fromRow","getDefinitionTree","fromColumn","plugin","required","debugDeprecation","rowFormatterPrint","rowFormatterClipboard","rowFormatterHtmlOutput","Accessor","allowedTypes","initializeColumn","transformRow","accessor","charAt","toUpperCase","lookupAccessor","accessors","rowComponent","colComponent","generateParamsList","serializeParams","encoded","encodeURIComponent","join","url","method","headers","stringify","form","FormData","Ajax","urlGenerator","loaderPromise","contentTypeFormatters","ajaxRequestFunc","defaultLoaderPromise","ajaxURLGenerator","defaultURLGenerator","ajaxURL","setUrl","setDefaultConfig","ajaxConfig","getUrl","requestDataCheck","requestParams","requestData","ajaxParams","previousData","generateConfig","sendRequest","defaultConfig","ajaxRequesting","ajaxResponse","contentType","ajaxContentType","Accept","location","credentials","fetch","json","status","statusText","defaultContentTypeFormatters","Clipboard","pasteParser","pasteAction","customSelection","rowRange","blocked","clipboard","clipboardCopyRowRange","plain","html","preventDefault","clipboardCopyFormatter","generateExportList","clipboardCopyConfig","clipboardCopyStyled","generateHTMLTable","generatePlainContent","clipboardData","originalEvent","reset","paste","setPasteParser","clipboardPasteParser","setPasteAction","clipboardPasteAction","getKey","range","internal","sel","textRange","createRange","selectNodeContents","toString","addRange","createTextRange","moveToElementText","select","execCommand","pasteActions","parser","pasteParsers","checkPaseOrigin","getPasteData","mutateData","mutator","valid","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","recalcActiveRowsRefresh","tableRedraw","getResults","userRecalc","recalc","groupBy","recalcRowGroup","dataTreeStartExpanded","dataTree","recalcAll","topCalc","bottomCalc","columnCalcs","topCalcParams","botCalcParams","bottomCalcParams","calculations","initializeTopRow","botCalc","initializeBottomRow","footerRemove","footerPrepend","marginRight","rowsToData","generateRow","frozenColumns","recalcGroup","groupRows","getRowGroup","getChildGroups","generateRowData","dataTreeChildColumnCalcs","open","getFilteredTreeChildren","disable","enable","format","formatter","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","isRowExpanded","dummyEl","dataTreeChildField","dataTreeChildIndent","dataTreeBranchElement","dataTreeCollapseElement","tabIndex","dataTreeExpandElement","layoutRow","rowDelete","rowDataChanged","columnMoving","initializeElementField","tableRedrawing","registerDisplayHandler","reinitializeRowChildren","firstCol","getFirstVisibleColumn","dataTreeElementColumn","getTreeChildren","redrawNeeded","refreshData","childArray","controlEl","generateControlElement","cloneNode","getPropertyValue","oldControl","getChildren","allChildren","generateChildren","dataTreeFilter","dataTreeSort","sub","childData","childRow","getTreeParentRoot","childIndex","findChildIndex","recurse","csv","setFileContents","delimiter","fileContents","depth","bom","jsonLines","pdf","header","autoTableParams","rowGroupStyles","fontStyle","fontSize","cellPadding","fillColor","rowCalcStyles","jsPDFParams","jsPDF","parseRow","styles","colSpan","rowSpan","orientation","unit","doc","jspdf","autoTable","didDrawPage","head","documentProcessing","xlsx","sheetName","workbook","XLSX","utils","book_new","tableFeatures","generateSheet","merges","worksheet","s","c","r","j","Date","sheet_add_aoa","encode_range","SheetNames","Sheets","sheetOnly","sheets","sheet","commsSend","intercept","buf","ArrayBuffer","view","Uint8Array","charCodeAt","s2ab","write","bookType","bookSST","Download","mimeType","Blob","deprecatedOptionsCheck","download","downloadToTab","deprecationCheck","filename","interceptCallback","downloadFunc","downloaders","mime","triggerDownload","downloadConfig","downloadRowRange","groupHeader","groupHeaderDownload","_group","getRowCount","newTab","blob","downloadEncoder","URL","createObjectURL","msSaveOrOpenBlob","click","maskInput","mask","maskLetter","maskLetterChar","maskNumber","maskNumberChar","maskWildcard","maskWildcardChar","fillSymbols","symbol","char","maskAutoFill","defaultDownloaders","Edit","editor","onRendered","success","cancel","editorParams","_initializeParams","displayItems","currentItems","focusedItem","input","_createInputElement","listEl","_createListElement","initialValues","isFilter","filterTimeout","filtered","typing","popup","listIteration","lastAction","actions","_deprecatedOptionsCheck","_initializeValue","_onRendered","listItemFormatter","getTable","sortValuesList","searchFunc","searchingPlaceholder","defaultValue","multiselect","headerFilterInitialListGen","cellEl","clickStop","preventScroll","_preventPopupBlur","_preventBlur","_inputKeyDown","attribs","elementAttributes","clearable","padding","boxSizing","autocomplete","cursor","caretColor","getAttribute","_bindInputEvents","valueCheck","valueKeys","verticalNavigation","placeholderLoading","placeholderEmpty","filterDelay","emptyValue","freetext","filterFunc","filterRemote","allowEmpty","listOnEmpty","valuesLookup","valuesURL","_inputFocus","_inputClick","_inputBlur","_inputSearch","_inputKeyUp","rebuildOptionsList","clearTimeout","_filterList","_resolveValue","_clearChoices","_keyUp","_keyDown","_keySide","_keyEnter","_keyEsc","_keyHomeEnd","_keySelectLetter","_keyAutoCompLetter","blockHide","restoreHide","stopImmediatePropagation","_focusItem","_chooseItem","_cancel","_scrollToValue","_filter","character","fromCharCode","filterTerm","label","scrollIntoView","behavior","block","inline","_generateOptions","_sortOptions","_buildList","_showList","isInteger","_filterOptions","iteration","_ajaxRequest","_uniqueColumnValues","valuesLookupField","_addPlaceholder","responseValues","_parseList","_clearList","term","urlBuilder","getColumnByField","getColumn","inputValues","entries","_parseListItem","_parseListGroup","itemParams","selected","original","_defaultSortFunction","_sortGroup","as","bs","a1","b1","L","rx","rd","emptyAlign","isFinite","_defaultFilterFunc","_filterItem","_this10","_this11","_buildItem","itemFormatter","_groupClick","_itemClick","_styleItem","_this12","startVis","isVisible","_setListWidth","_this13","hideOnBlur","_this14","blur","cellValue","search","onChange","selectContents","textarea","vertNav","whiteSpace","getRow","heightNow","shiftKey","shiftEnterSubmit","selectionStart","number","step","blurFunc","date","inputFormat","DT","DateTime","luxon","convertDate","isDateTime","fromISO","fromFormat","toFormat","time","newDatetime","datetime","deprecationMsg","List","star","self","maxStars","getElementsByTagName","size","stars","starsHolder","createElementNS","starChange","buildStar","starHolder","nextStar","changeValue","overflow","textOverflow","progress","mouseDrag","mouseDragWidth","percent","bar","updateValue","calcVal","round","backgroundColor","screenX","tickCross","tristate","indetermValue","indeterminateValue","indetermState","trueValueSet","falseValueSet","marginTop","checkedValue","checked","trueValue","falseValue","indeterminate","mouseClick","recursionBlock","invalidEdit","editedCells","editors","getEditedCells","clearCellEdited","navigatePrev","navigateNext","navigateLeft","navigateRight","navigateUp","navigateDown","cellIsEdited","clearEdited","editCell","cellCancelEdit","bindEditor","updateCellClass","columnDeleteCheck","rowDeleteCheck","cancelEdit","keybindingNavigateNext","newRow","edited","allowEdit","nextCell","findNextEditableCell","getIndex","findPrevEditableCell","prevCell","editable","clearEditor","variableHeight","cellEditCancelled","contains","button","forceEdit","focusCellNoEvent","getRenderMode","leftEdge","rightEdge","leftMargin","rightMargin","cellEditor","rendered","focusScrollAdjust","cellClick","cellEditing","validationMode","editIndex","defaultEditors","ExportRow","ExportColumn","Export","cloneTableStyle","colVisProp","getHtml","columnHeaders","headersToExportRows","generateColumnGroupHeaders","bodyToExportRows","rowLookup","generateTableElement","selectRow","selectedRows","columnGroups","colData","processColumnGroup","maxDepth","groupData","subGroup","subGroupData","columnVisCheck","visProp","headerDepth","exportRows","parseColumnGroup","rowGroups","exportCols","headerEl","bodyEl","lookupTableStyles","setup","treeElementField","mapElementStyles","generateHeaderElement","generateGroupElement","generateCalcElement","generateRowElement","evenRow","oddRow","calcRow","firstRow","firstGroup","getElementsByClassName","styleCells","firstCell","lastCell","classNames","generator","cellStyle","cellWrapper","formatCells","formatExportValue","align","htmlOutputConfig","props","lookup","fromStyle","filterVal","rowVal","filterParams","RegExp","keywords","separator","keyword","matchAll","endsWith","Filter","filterList","headerFilterColumns","prevHeaderFilterChangeCheck","tableInitialized","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","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","plaintext","formatterParams","emptyToSpace","sanitizeHTML","money","integer","decimal","rgx","floatVal","sign","decimalSym","thousandSym","thousand","negativeSign","symbolAfter","link","urlPrefix","labelField","labelTraverse","urlField","image","src","urlSuffix","truthy","allowTruthy","tick","tickElement","cross","crossElement","outputFormat","invalid","invalidPlaceholder","isValid","timezone","setZone","datetimediff","suffix","humanize","now","toHuman","traffic","percentValue","colors","color","legend","legendColor","legendAlign","barEl","barContainer","legendEl","holderEl","buttonTick","buttonCross","rownum","innerText","responsiveCollapse","toggleList","isOpen","rowSelection","checkbox","selectableRangeMode","toggleSelect","handleComplexRowClick","isSelected","registerRowSelectCheckbox","deselectRow","registerHeaderSelectCheckbox","Format","formatValue","formatHeader","lookupFormatter","formatterPrint","print","formatterClipboard","formatterHtmlOutput","htmlOutput","formatters","mockCell","titleFormatter","titleFormatterParams","entityMap","defaultFormatters","FrozenColumns","leftColumns","rightColumns","rightPadding","initializationMode","layoutCell","reinitializeColumns","blockLayout","unblockLayout","edge","frozenCheck","calcMargins","layoutColumnPosition","layoutCalcRows","_calcSpace","layoutGroupCalcs","groupList","allCells","leftParents","marginValue","getColGroupParentElement","deinitialize","getTableElement","FrozenRows","freezeRow","unfreezeRow","isRowFrozen","detachRow","frozenRows","initializeRows","rowType","styleRows","GroupComponent","groupManager","_visible","toggleVisibility","Group","oldGroup","hasSubGroups","groupIDLookups","_addRowToGroup","_addRow","elementContents","arrowElement","createElements","addBindings","createValueGroups","arrow","movableRows","moveRow","initializeGroupHeader","allowedValues","_createGroup","groupToggleElement","groupID","groupKey","headerGenerator","conformRowData","generateGroupHeaderContents","updateGroupRows","scrollHeader","groupValues","removeGroup","noCalc","_visSet","getHeadersAndRows","hasTopCalcs","detachElement","generateTopRow","hasBottomCalcs","generateBottomRow","groupClosedShowCalcs","count","prev","getPath","childNodes","GroupRows","displayHandler","setGroupBy","setGroupValues","setGroupStartOpen","setGroupHeader","userGetGroups","userGetGroupedData","rowGetGroup","groupUpdateOnCellEdit","cellUpdated","reassignRowToGroup","configureGroupSetup","rowDeleting","scrollHeaders","rowMoving","rowAddingIndex","rowSample","virtualRenderFill","groupStartOpen","langValue","items","removeCalcs","getRealColumns","lookupFunc","prevValue","assignRowToGroup","getGroupedData","toGroup","fromGroup","removeRow","insertRow","generateGroups","groupComponents","groupListData","pullGroupListData","rowCount","headerContent","oldGroups","createGroup","assignRowToExistingGroup","newGroupNeeded","oldRowGroup","oldGroupPath","newGroupPath","getExpectedPath","every","groupPath","groupId","History","history","clearComponentHistory","rowDeleted","rowAdded","rowMoved","undo","redo","getHistoryUndoSize","getHistoryRedoSize","posFrom","posTo","getGroup","getRowIndex","newValue","undoers","redoers","oldRow","cellEdit","rowAdd","_rebindRow","rowMove","HtmlTableImport","fieldIndex","hasIndex","tableElementCheck","parseTable","_extractOptions","_extractHeaders","_generateBlankHeaders","optionsArr","attrib","_attribValue","exists","_findCol","textContent","inQuote","nextChar","array","Import","importFromFile","importFormat","loadDataCheck","loadData","importData","lookupImporter","structureData","err","importer","importers","extension","pickFile","extensions","accept","file","files","reader","FileReader","importReader","readAsArrayBuffer","readAsBinaryString","readAsDataURL","readAsText","onload","onerror","parsedData","structureArrayToObject","structureArrayToColumns","defaultImporters","Interaction","eventMap","rowClick","rowDblClick","rowContext","rowMouseEnter","rowMouseLeave","rowMouseOver","rowMouseOut","rowMouseMove","rowTap","rowDblTap","rowTapHold","cellDblClick","cellContext","cellMouseEnter","cellMouseLeave","cellMouseOver","cellMouseOut","cellMouseMove","cellTap","cellDblTap","cellTapHold","headerClick","headerDblClick","headerContext","headerMouseEnter","headerMouseLeave","headerMouseOver","headerMouseOut","headerMouseMove","headerTap","headerDblTap","headerTapHold","groupClick","groupDblClick","groupContext","groupMouseEnter","groupMouseLeave","groupMouseOver","groupMouseOut","groupMouseMove","groupTap","groupDblTap","groupTapHold","subscribers","touchSubscribers","columnSubscribers","touchWatchers","tap","tapDbl","tapHold","initializeExternalEvents","cellContentsSelectionFixer","selectNode","subscriptionChangeExternal","subscribeTouchEvents","unsubscribeTouchEvents","handleTouch","noTouch","watchers","componentObj","Keybindings","watchKeys","pressedKeys","keyupBinding","keydownBinding","keybindings","mergedBindings","mapBindings","bindEvents","clearBindings","mapBinding","symbolsList","ctrl","meta","code","checkBinding","ctrlKey","metaKey","navPrev","navNext","navUp","navDown","scrollPageUp","scrollPageDown","scrollToStart","scrollToEnd","copyToClipboard","keyBlock","newPos","scrollMax","navLeft","navRight","Menu","nestedMenuBlock","currentComponent","rootPopup","initializeRowWatchers","initializeGroupWatchers","rowContextMenu","loadMenuEvent","on","rowClickMenu","groupContextMenu","groupClickMenu","headerContextMenu","loadMenuTableColumnEvent","headerClickMenu","headerMenu","initializeColumnHeaderMenu","contextMenu","loadMenuTableCellEvent","clickMenu","headerMenuEl","icon","headerMenuIcon","menu","loadMenu","parentPopup","itemEl","disabled","MoveColumns","placeholderElement","createPlaceholderElement","hoverElement","checkTimeout","checkPeriod","moving","toCol","toColAfter","startX","autoScrollMargin","autoScrollStep","autoScrollTimeout","touchMove","moveHover","endMove","movableColumns","mousemove","which","startMove","bindTouchEvents","prevColWidth","nextColWidthLast","prevColWidthLast","startXMove","passive","moveToCol","_bindMouseMove","movingCells","_unbindMouseMove","scrollPos","columnHolder","xPos","MoveRows","toRowAfter","hasHandle","startY","tableRowDropEvent","connectionSelectorsTables","connectionSelectorsElements","connectionElements","connectedTable","connectedRow","movableRowsConnectedTables","movableRowsConnectedElements","initializeCell","mouseup","tableRowDrop","previousSibling","rowHandle","nextRowHeight","prevRowHeight","nextRowHeightLast","prevRowHeightLast","startYMove","setStartPosition","connectToTables","pointerEvents","disconnectFromTables","moveHoverConnections","moveHoverTable","rowHolder","yPos","connectionTables","commsConnections","dropEvent","elementRowDrop","tabulatorElementDropEvent","sender","movableRowsSender","senders","movableRowsReceiver","receivers","connect","disconnect","dropComplete","fromTable","toTable","Mutator","enabled","transformCell","mutateLink","lookupMutator","mutators","mutatorEdit","linkCell","pageSize","currentRow","currentPage","totalRows","totalPages","showingEl","valueEl","ofEl","totalEl","rowsEl","pages","Page","progressiveLoad","pageCounterElement","pageCounter","page","remoteRowCountEstimate","initialLoad","dataChanging","pageSizes","setMaxPage","setPage","userSetPageToRow","userSetPageSize","getPageSize","previousPage","nextPage","getPage","getPageMax","setPageToRow","initialLoadComplete","calculatePageSizes","footerRedraw","paginationAddRow","rowAddingPosition","paginationMode","remotePageParams","_parseRemoteData","restOnRenderBefore","initializePageCounter","initializePaginator","initializeProgressive","scrollVertical","testElRow","testElCell","paginationSize","generatePageSizeSelectList","setPageSize","progressiveLoadScrollMargin","pagesElement","firstBut","prevBut","nextBut","lastBut","paginationSizeSelector","pageSizeSelect","counter","paginationCounter","pageCounters","hidden","pageSelectLabel","paginationCounterHolder","paginationElement","paginationCounterElement","footerAppend","paginationInitialPage","paginationButtonCount","trigger","leftSize","rightSize","_generatePageButton","actualStartRow","actualRowPageSize","actualRows","setMaxRows","_setPageButtons","_setPageCounter","last_page","last_row","progressiveLoadDelay","footer","defaultPageCounters","local","id","localStorage","getItem","cookie","cookiePos","setItem","expireDate","setDate","getDate","toUTCString","Persistence","defWatcherBlock","readFunc","writeFunc","testKey","removeItem","persistence","retrievedData","persistenceMode","persistenceID","localStorageTest","persistenceReaderFunc","readers","persistenceWriterFunc","writers","retrieveData","save","eventSave","getColumnLayout","setColumnLayout","sorters","initialSort","parseColumns","mergeDefinition","getOwnPropertyDescriptor","defineProperty","set","current","oldCols","newCols","_findColumn","validateSorters","getSort","getGroupConfig","getPageConfig","excludedKeys","defStore","colDef","defaultReaders","defaultWriters","rowContextPopup","loadPopupEvent","rowClickPopup","groupContextPopup","groupClickPopup","headerContextPopup","loadPopupTableColumnEvent","headerClickPopup","headerPopup","initializeColumnHeaderPopup","contextPopup","loadPopupTableCellEvent","clickPopup","headerPopupEl","headerPopupIcon","loadPopup","contentsEl","renderCallback","Print","manualBlock","printAsHtml","replaceTable","cleanup","printFullscreen","generateTable","printConfig","printStyled","printRowRange","footerContent","scrollX","scrollY","footerEl","tableEl","printHeader","printFooter","printFormatter","scrollTo","ReactiveData","origFuncs","currentVersion","unblock","watchRow","watchData","unwatchData","version","enumerable","configurable","arg","getRowFromDataObject","pop","startRow","oldRows","writable","watchKey","watchTreeChildren","childField","rebuildTree","ResizeColumns","startColumn","startWidth","latestX","initialNextColumn","layoutColumnHeader","layoutCellHandles","deInitializeComponent","resizeHandle","columnLayoutUpdated","deInitializeColumn","columnWidthUpdated","resizable","initializeEventWatchers","reinitializeColumn","frozenOffset","handleEl","nearestColumn","_checkResizability","handleDown","_mouseDown","oldWidth","parentElement","mouseMove","blockedBefore","blockedAfter","startDiff","moveDiff","resizableColumnFit","checkCellHeights","mouseUp","ResizeRows","startHeight","prevHandle","prevHandleDown","screenY","ResizeTable","visibilityObserver","resizeObserver","containerObserver","tableHeight","containerWidth","autoResize","initialRedraw","tableStyle","IntersectionObserver","ResizeObserver","initializeVisibilityObserver","entry","nodeHeight","contentRect","nodeWidth","redrawTable","observe","tableResized","isIntersecting","unobserve","ResponsiveLayout","hiddenColumns","collapseFormatter","collapseStartOpen","collapseHandleColumn","updateColumnVisibility","initializeResponsivity","generateCollapsedRowContent","responsiveLayoutCollapseFormatter","formatCollapsedData","responsiveLayoutCollapseStartOpen","order","generateCollapsedContent","colCount","getFlexBaseWidth","hideColumn","showColumn","generateCollapsedRowData","mockCellComponent","responsiveLayoutCollapseUseFormatters","node_content","titleData","valueData","titleHighlight","SelectRow","selecting","lastClickedRow","selectPrev","headerCheckboxElement","selectRows","deselectRows","getSelectedRows","getSelectedData","isRowSelected","selectable","clearSelectionData","rowRetrieve","selectablePersistence","_deselectRow","_rowSelectionChanged","endSelect","selectableCheck","getCurrentCell","_clearSelection","lastClickedRowIdx","rowIdx","fromRowIdx","toRowIdx","toggledRows","toggledRow","_selectRow","rowMatch","rowInfo","selectableRollingSelection","checkboxEl","dataTreeSelectPropagate","childRowSelection","selectedRow","aRow","bRow","alignEmptyValues","decimalSeparator","thousandSeparator","string","langLocale","localeCompare","calc","d","alphanum","Sort","sortList","userSetSort","clearSort","sortMode","remoteSortParams","setSort","refreshSort","arrowEl","sorterParams","startingDir","headerSortStartingDir","headerSortTristate","headerSort","headerSortElement","setColumnHeaderSortIcon","columnHeaderSortMulti","newSortList","sortOrderReverse","sortListActual","rowComponents","clearColumnHeaders","sortObj","findSorter","setColumnHeader","_sortItems","sortEl","sorterCount","sortItem","_sortRow","el1Comp","el2Comp","el1","el2","defaultSorters","Tooltip","tooltipSubscriber","headerSubscriber","timeout","popupInstance","deprecationCheckMsg","headerTooltip","mousemoveCheck","mouseoutCheck","tooltip","clearPopup","loadTooltip","tooltipDelay","parameters","numeric","starts","ends","minLength","maxLength","regex","unique","cellData","Validate","invalidCells","getInvalidCells","userClearCellValidation","userValidate","cellIsValid","clearValidation","cellValidate","columnValidate","rowValidate","editValidate","editorClear","editedClear","previousValue","validate","cancelled","validator","_extractValidator","substring","_buildValidator","validators","failedValidators","invalidIndex","defaultValidators","TabulatorFull"],"mappings":"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"}