{"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\"headerWordWrap\": false,\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\t\t\r\n\t\tif(def.headerWordWrap){\r\n\t\t\ttitleHolderElement.classList.add(\"tabulator-col-title-wrap\");\r\n\t\t}\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\tgetLeftOffset(){\r\n\t\tvar offset = this.element.offsetLeft;\r\n\r\n\t\tif(this.parent.isGroup){\r\n\t\t\toffset += this.parent.getLeftOffset();\r\n\t\t}\r\n\r\n\t\treturn offset;\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\t\t\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(){\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}\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}\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}\r\n\t}\r\n\t\r\n\tlayoutCheck(){\r\n\t\tthis.isFitData = this.options(\"layout\").startsWith('fitData');\r\n\t}\r\n\t\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\t\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\t\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\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\twidth;\r\n\t\t\t\r\n\t\t\tif(column.visible){\r\n\t\t\t\tif(!column.modules.frozen){\t\t\t\r\n\t\t\t\t\twidth = column.getWidth();\r\n\r\n\t\t\t\t\tconfig.leftPos = colPos;\r\n\t\t\t\t\tconfig.rightPos = colPos + width;\r\n\t\t\t\t\t\r\n\t\t\t\t\tconfig.width = width;\r\n\t\t\t\t\t\r\n\t\t\t\t\tif (this.isFitData) {\r\n\t\t\t\t\t\tconfig.fitDataCheck = column.modules.vdomHoz ? column.modules.vdomHoz.fitDataCheck : true;\r\n\t\t\t\t\t}\r\n\t\t\t\t\t\r\n\t\t\t\t\tif((colPos + width > this.vDomScrollPosLeft) && (colPos < this.vDomScrollPosRight)){\r\n\t\t\t\t\t\t//column is visible\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\tif(this.leftCol == -1){\r\n\t\t\t\t\t\t\tthis.leftCol = this.columns.length;\r\n\t\t\t\t\t\t\tthis.vDomPadLeft = colPos;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\tthis.rightCol = this.columns.length;\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\t// column is hidden\r\n\t\t\t\t\t\tif(this.leftCol !== -1){\r\n\t\t\t\t\t\t\tthis.vDomPadRight += width;\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.columns.push(column);\r\n\t\t\t\t\t\r\n\t\t\t\t\tcolumn.modules.vdomHoz = config;\r\n\t\t\t\t\t\r\n\t\t\t\t\tcolPos += width;\r\n\t\t\t\t}\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\t\t\t\t\t\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 visibleRows = this.getVisibleRows(),\r\n\t\totherRows = this.table.rowManager.getRows().filter(row => !visibleRows.includes(row));\r\n\r\n\t\tvisibleRows.forEach((row) => {\r\n\t\t\tthis.reinitializeRow(row, true);\r\n\t\t});\r\n\r\n\t\totherRows.forEach((row) =>{\r\n\t\t\trow.deinitialize();\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\t\t\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\t\t\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\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().insertBefore(cell.getElement(), row.getCell(this.columns[this.rightCol]).getElement().nextSibling);\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\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\trow.modules.vdomHoz.rightCol = this.rightCol;\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(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().insertBefore(cell.getElement(), row.getCell(this.columns[this.leftCol]).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\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\trow.modules.vdomHoz.leftCol = this.leftCol;\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(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\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\trow.modules.vdomHoz.rightCol = this.rightCol;\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\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\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\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\trow.modules.vdomHoz.leftCol = this.leftCol;\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\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\r\n\t\t\tif(this.table.modules.frozenColumns){\r\n\t\t\t\tthis.table.modules.frozenColumns.leftColumns.forEach((column) => {\r\n\t\t\t\t\tthis.appendCell(row, column);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\tfor(let i = this.leftCol; i <= this.rightCol; i++){\r\n\t\t\t\tthis.appendCell(row, this.columns[i]);\r\n\t\t\t}\r\n\r\n\t\t\tif(this.table.modules.frozenColumns){\r\n\t\t\t\tthis.table.modules.frozenColumns.rightColumns.forEach((column) => {\r\n\t\t\t\t\tthis.appendCell(row, column);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\tappendCell(row, column){\r\n\t\tif(column && column.visible){\r\n\t\t\tlet cell = row.getCell(column);\r\n\t\t\t\r\n\t\t\trow.getElement().appendChild(cell.getElement());\r\n\t\t\tcell.cellRendered();\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\t\r\n\t\t\t\tvar rowEl = row.getElement();\r\n\t\t\t\twhile(rowEl.firstChild) rowEl.removeChild(rowEl.firstChild);\r\n\r\n\t\t\t\tthis.initializeRow(row);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}","import CoreFeature from './CoreFeature.js';\r\nimport Column from './column/Column.js';\r\nimport ColumnComponent from './column/ColumnComponent.js';\r\nimport Helpers from './tools/Helpers.js';\r\nimport OptionsList from './tools/OptionsList.js';\r\n\r\nimport RendererBasicHorizontal from './rendering/renderers/BasicHorizontal.js';\r\nimport RendererVirtualDomHorizontal from './rendering/renderers/VirtualDomHorizontal.js';\r\n\r\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.contentsElement = 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.contentsElement = this.createHeaderContentsElement();\r\n\t\tthis.element = this.createHeaderElement();\r\n\t\t\r\n\t\tthis.contentsElement.insertBefore(this.headersElement, this.contentsElement.firstChild);\r\n\t\tthis.element.insertBefore(this.contentsElement, this.element.firstChild);\r\n\t\t\r\n\t\tthis.subscribe(\"scroll-horizontal\", this.scrollHorizontal.bind(this));\r\n\t\tthis.subscribe(\"scrollbar-vertical\", this.padVerticalScrollbar.bind(this));\r\n\t}\r\n\r\n\tpadVerticalScrollbar(width){\r\n\t\tif(this.table.rtl){\r\n\t\t\tthis.headersElement.style.marginLeft = width + \"px\";\r\n\t\t}else{\r\n\t\t\tthis.headersElement.style.marginRight = width + \"px\";\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\": 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\r\n\tcreateHeaderContentsElement (){\r\n\t\tvar el = document.createElement(\"div\");\r\n\t\t\r\n\t\tel.classList.add(\"tabulator-header-contents\");\r\n\t\tel.setAttribute(\"role\", \"rowgroup\");\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\r\n\t//return containing contents element\r\n\tgetContentsElement(){\r\n\t\treturn this.contentsElement;\r\n\t}\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\tthis.contentsElement.scrollLeft = left;\r\n\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 = column.getLeftOffset(),\r\n\t\tadjust = 0,\r\n\t\tcolEl = column.getElement();\r\n\t\t\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\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 = offset + 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\r\n\t\tthis.scrollbarWidth = 0;\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\tvar placeholder = this.table.options.placeholder;\r\n\r\n\t\t//configure placeholder element\r\n\t\tif(placeholder){\t\r\n\t\t\tlet el = document.createElement(\"div\");\r\n\t\t\tel.classList.add(\"tabulator-placeholder\");\r\n\r\n\t\t\tif(typeof placeholder == \"string\"){\r\n\t\t\t\tlet contents = document.createElement(\"div\");\r\n\t\t\t\tcontents.classList.add(\"tabulator-placeholder-contents\");\r\n\t\t\t\tcontents.innerHTML = placeholder;\r\n\t\t\t\t\r\n\t\t\t\tel.appendChild(contents);\r\n\t\t\t\t\r\n\t\t\t\tthis.placeholderContents = contents;\r\n\t\t\t\t\r\n\t\t\t}else if(typeof HTMLElement !== \"undefined\" && placeholder instanceof HTMLElement){\r\n\t\t\t\t\r\n\t\t\t\tel.appendChild(placeholder);\r\n\t\t\t\tthis.placeholderContents = placeholder;\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Invalid placeholder provided, must be string or HTML Element\", placeholder);\r\n\r\n\t\t\t\tthis.el = null;\r\n\t\t\t}\r\n\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.destroy();\r\n\t\t\r\n\t\tthis.adjustTableSize();\r\n\r\n\t\tthis.dispatch(\"rows-wiped\");\r\n\t}\r\n\r\n\tdestroy(){\r\n\t\tthis.rows.forEach((row) => {\r\n\t\t\trow.wipe();\r\n\t\t});\r\n\r\n\t\tthis.rows = [];\r\n\t\tthis.activeRows = [];\r\n\t\tthis.activeRowsPipeline = [];\r\n\t\tthis.activeRowsCount = 0;\r\n\t\tthis.displayRows = [];\r\n\t\tthis.displayRowsCount = 0;\r\n\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, refreshDisplayOnly){\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\r\n\t\t\tthis.refreshActiveData(refreshDisplayOnly ? \"displayPipeline\" : 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\r\n\t\tif(this.getDisplayRows().length){\r\n\t\t\tthis._clearPlaceholder();\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\tswitch(type){\r\n\t\t\tcase \"active\":\r\n\t\t\t\trows = this.activeRows;\r\n\t\t\t\tbreak;\r\n\t\t\t\r\n\t\t\tcase \"display\":\r\n\t\t\t\trows = this.table.rowManager.getDisplayRows();\r\n\t\t\t\tbreak;\r\n\t\t\t\t\r\n\t\t\tcase \"visible\":\r\n\t\t\t\trows = this.getVisibleRows(false, true);\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tdefault:\r\n\t\t\t\trows = this.chain(\"rows-retrieve\", type, null, this.rows) || this.rows;\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\r\n\t\t\tthis.scrollBarCheck();\r\n\t\t\t\r\n\t\t\tthis.dispatchExternal(\"renderComplete\");\r\n\t\t}\r\n\t}\r\n\r\n\tscrollBarCheck(){\r\n\t\tvar scrollbarWidth = 0;\r\n\r\n\t\t//adjust for vertical scrollbar moving table when present\r\n\t\tif(this.element.scrollHeight > this.element.clientHeight){\r\n\t\t\tscrollbarWidth = this.element.offsetWidth - this.element.clientWidth;\r\n\t\t}\r\n\r\n\t\tif(scrollbarWidth !== this.scrollbarWidth){\r\n\t\t\tthis.scrollbarWidth = scrollbarWidth;\r\n\t\t\tthis.dispatch(\"scrollbar-vertical\", scrollbarWidth);\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\r\n\t\tthis.scrollBarCheck();\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\r\n\t\t\tthis.scrollBarCheck();\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\"mouseup\",\r\n\t\t\t\"mousedown\",\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\t\t\r\n\t\tthis.element = element;\r\n\t\tthis.container = this._lookupContainer();\r\n\t\t\r\n\t\tthis.parent = parent;\r\n\t\t\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.blurEventsBound = false;\r\n\t\tthis.renderedCallback = null;\r\n\t\t\r\n\t\tthis.visible = false;\r\n\t\tthis.hideable = true;\r\n\t\t\r\n\t\tthis.element.classList.add(\"tabulator-popup-container\");\r\n\t\t\r\n\t\tthis.blurEvent = this.hide.bind(this, false);\r\n\t\tthis.escEvent = this._escapeCheck.bind(this);\r\n\t\t\r\n\t\tthis.destroyBinding = this.tableDestroyed.bind(this);\r\n\t\tthis.destroyed = false;\r\n\t}\r\n\t\r\n\ttableDestroyed(){\r\n\t\tthis.destroyed = true;\r\n\t\tthis.hide(true);\r\n\t}\r\n\t\r\n\t_lookupContainer(){\r\n\t\tvar container = this.table.options.popupContainer;\r\n\t\t\r\n\t\tif(typeof container === \"string\"){\r\n\t\t\tcontainer = document.querySelector(container);\r\n\t\t\t\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\t\t\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\t\t\r\n\t\tif(!container){\r\n\t\t\tcontainer = document.body;\r\n\t\t}\r\n\t\t\r\n\t\treturn container;\r\n\t}\r\n\t\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\t\r\n\trenderCallback(callback){\r\n\t\tthis.renderedCallback = callback;\r\n\t}\r\n\t\r\n\tcontainerEventCoords(e){\r\n\t\tvar touch = !(e instanceof MouseEvent);\r\n\t\t\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\t\t\r\n\t\tif(this.container !== document.body){\r\n\t\t\tlet parentOffset = Helpers.elOffset(this.container);\r\n\t\t\t\r\n\t\t\tx -= parentOffset.left;\r\n\t\t\ty -= parentOffset.top;\r\n\t\t}\r\n\t\t\r\n\t\treturn {x, y};\r\n\t}\r\n\t\r\n\telementPositionCoords(element, position = \"right\"){\r\n\t\tvar offset = Helpers.elOffset(element),\r\n\t\tcontainerOffset, x, y;\r\n\t\t\r\n\t\tif(this.container !== document.body){\r\n\t\t\tcontainerOffset = Helpers.elOffset(this.container);\r\n\t\t\t\r\n\t\t\toffset.left -= containerOffset.left;\r\n\t\t\toffset.top -= containerOffset.top;\r\n\t\t}\r\n\t\t\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\t\t\t\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\t\r\n\t\t\tcase \"left\":\r\n\t\t\t\tx = offset.left;\r\n\t\t\t\ty = offset.top - 1;\r\n\t\t\t\tbreak;\r\n\t\t\t\r\n\t\t\tcase \"top\":\r\n\t\t\t\tx = offset.left;\r\n\t\t\t\ty = offset.top;\r\n\t\t\t\tbreak;\r\n\t\t\t\r\n\t\t\tcase \"center\":\r\n\t\t\t\tx = offset.left + (element.offsetWidth / 2);\r\n\t\t\t\ty = offset.top + (element.offsetHeight / 2);\r\n\t\t\t\tbreak;\r\n\t\t\t\r\n\t\t}\r\n\t\t\r\n\t\treturn {x, y, offset};\r\n\t}\r\n\t\r\n\tshow(origin, position){\r\n\t\tvar x, y, parentEl, parentOffset, coords;\r\n\t\t\r\n\t\tif(this.destroyed || this.table.destroyed){\r\n\t\t\treturn this;\r\n\t\t}\r\n\t\t\r\n\t\tif(origin instanceof HTMLElement){\r\n\t\t\tparentEl = origin;\r\n\t\t\tcoords = this.elementPositionCoords(origin, position);\r\n\t\t\t\r\n\t\t\tparentOffset = coords.offset;\r\n\t\t\tx = coords.x;\r\n\t\t\ty = coords.y;\r\n\t\t\t\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\t\t\t\r\n\t\t\tx = coords.x;\r\n\t\t\ty = coords.y;\r\n\t\t\t\r\n\t\t\tthis.reversedX = false;\r\n\t\t}\r\n\t\t\r\n\t\tthis.element.style.top = y + \"px\";\r\n\t\tthis.element.style.left = x + \"px\";\r\n\t\t\r\n\t\tthis.container.appendChild(this.element);\r\n\t\t\r\n\t\tif(typeof this.renderedCallback === \"function\"){\r\n\t\t\tthis.renderedCallback();\r\n\t\t}\r\n\t\t\r\n\t\tthis._fitToScreen(x, y, parentEl, parentOffset, position);\r\n\t\t\r\n\t\tthis.visible = true;\r\n\t\t\r\n\t\tthis.subscribe(\"table-destroy\", this.destroyBinding);\r\n\t\t\r\n\t\tthis.element.addEventListener(\"mousedown\", (e) => {\r\n\t\t\te.stopPropagation();\r\n\t\t});\r\n\t\t\r\n\t\treturn this;\r\n\t}\r\n\t\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\t\t\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\t\t\t\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\t\t\t\r\n\t\t\tthis.reversedX = true;\r\n\t\t}\r\n\t\t\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\t\t\t\t\t\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\t\t\t\t\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\t\r\n\tisVisible(){\r\n\t\treturn this.visible;\r\n\t}\r\n\t\r\n\thideOnBlur(callback){\r\n\t\tthis.blurable = true;\r\n\t\t\r\n\t\tif(this.visible){\r\n\t\t\tsetTimeout(() => {\r\n\t\t\t\tif(this.visible){\r\n\t\t\t\t\tthis.table.rowManager.element.addEventListener(\"scroll\", this.blurEvent);\r\n\t\t\t\t\tthis.subscribe(\"cell-editing\", this.blurEvent);\r\n\t\t\t\t\tdocument.body.addEventListener(\"click\", this.blurEvent);\r\n\t\t\t\t\tdocument.body.addEventListener(\"contextmenu\", this.blurEvent);\r\n\t\t\t\t\tdocument.body.addEventListener(\"mousedown\", this.blurEvent);\r\n\t\t\t\t\twindow.addEventListener(\"resize\", this.blurEvent);\r\n\t\t\t\t\tdocument.body.addEventListener(\"keydown\", this.escEvent);\r\n\r\n\t\t\t\t\tthis.blurEventsBound = true;\r\n\t\t\t\t}\r\n\t\t\t}, 100);\r\n\t\t\t\r\n\t\t\tthis.blurCallback = callback;\r\n\t\t}\r\n\t\t\r\n\t\treturn this;\r\n\t}\r\n\t\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\t\r\n\tblockHide(){\r\n\t\tthis.hideable = false;\r\n\t}\r\n\t\r\n\trestoreHide(){\r\n\t\tthis.hideable = true;\r\n\t}\r\n\t\r\n\thide(silent = false){\r\n\t\tif(this.visible && this.hideable){\r\n\t\t\tif(this.blurable && this.blurEventsBound){\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\r\n\t\t\t\tthis.blurEventsBound = false;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif(this.childPopup){\r\n\t\t\t\tthis.childPopup.hide();\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif(this.parent){\r\n\t\t\t\tthis.parent.childPopup = null;\r\n\t\t\t}\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\t\r\n\t\t\tthis.visible = false;\r\n\t\t\t\r\n\t\t\tif(this.blurCallback && !silent){\r\n\t\t\t\tthis.blurCallback();\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tthis.unsubscribe(\"table-destroy\", this.destroyBinding);\r\n\t\t}\r\n\t\t\r\n\t\treturn this;\r\n\t}\r\n\t\r\n\tchild(element){\r\n\t\tif(this.childPopup){\r\n\t\t\tthis.childPopup.hide();\r\n\t\t}\r\n\t\t\r\n\t\tthis.childPopup = new Popup(this.table, element, this);\r\n\t\t\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//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.destroy();\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\t\t.catch((e) => {\r\n\t\t\t\t\t\t\t\treject(\"Update Error - Unable to update row\", item, e);\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\treject(\"Update Error - Unable to find row\", item);\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, true)\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\t\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\t\t\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\t\t\r\n\t\tthis.blocked = false;\r\n\t\tthis.recalcAfterBlock = false;\r\n\t\t\r\n\t\tthis.registerTableOption(\"columnCalcs\", true);\r\n\t\t\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\t\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\t\r\n\tinitialize(){\r\n\t\tthis.genColumn = new Column({field:\"value\"}, this);\r\n\t\t\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\t\tthis.subscribe(\"scrollbar-vertical\", this.adjustForScrollbar.bind(this));\r\n\t\t\r\n\t\tthis.subscribe(\"redraw-blocked\", this.blockRedraw.bind(this));\r\n\t\tthis.subscribe(\"redraw-restored\", this.restoreRedraw.bind(this));\r\n\t\t\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\t\r\n\ttableRedraw(force){\r\n\t\tthis.recalc(this.table.rowManager.activeRows);\r\n\t\t\r\n\t\tif(force){\r\n\t\t\tthis.redraw();\r\n\t\t}\r\n\t}\r\n\t\r\n\tblockRedraw(){\r\n\t\tthis.blocked = true;\r\n\t\tthis.recalcAfterBlock = false;\r\n\t}\r\n\t\r\n\t\r\n\trestoreRedraw(){\r\n\t\tthis.blocked = false;\r\n\t\t\r\n\t\tif(this.recalcAfterBlock){\r\n\t\t\tthis.recalcAfterBlock = false;\r\n\t\t\tthis.recalcActiveRowsRefresh();\r\n\t\t}\r\n\t}\r\n\t\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\t\r\n\t///////////////////////////////////\r\n\t///////// Internal Logic //////////\r\n\t///////////////////////////////////\r\n\t\r\n\tblockCheck(){\r\n\t\tif(this.blocked){\r\n\t\t\tthis.recalcAfterBlock = true;\r\n\t\t}\r\n\t\t\r\n\t\treturn this.blocked;\r\n\t}\r\n\t\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\t\t\r\n\t\tif(this.botRow){\r\n\t\t\trows.push(this.botRow);\r\n\t\t}\r\n\t\t\r\n\t\treturn rows;\r\n\t}\r\n\t\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\t\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\t\r\n\trecalcActiveRows(){\r\n\t\tthis.recalc(this.table.rowManager.activeRows);\r\n\t}\r\n\t\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\t\t\t\t\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\t\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\t\r\n\t//initialize column calcs\r\n\tinitializeColumn(column){\r\n\t\tvar def = column.definition;\r\n\t\t\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\t\t\r\n\t\tif(def.topCalc){\r\n\t\t\t\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\t\t\t\t\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\t\t\t\t\r\n\t\t\t}\r\n\t\t\t\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\t\t\t\t\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\t\t\t\r\n\t\t}\r\n\t\t\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\t\t\t\t\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\t\t\t\t\r\n\t\t\t}\r\n\t\t\t\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\t\t\t\t\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\t\t\r\n\t}\r\n\t\r\n\t//dummy functions to handle being mock column manager\r\n\tregisterColumnField(){}\r\n\t\r\n\tremoveCalcs(){\r\n\t\tvar changed = false;\r\n\t\t\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\t\t\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\t\t\r\n\t\tif(changed){\r\n\t\t\tthis.table.rowManager.adjustTableSize();\r\n\t\t}\r\n\t}\r\n\t\r\n\treinitializeCalcs(){\r\n\t\tif(this.topCalcs.length){\r\n\t\t\tthis.initializeTopRow();\r\n\t\t}\r\n\r\n\t\tif(this.botCalcs.length){\r\n\t\t\tthis.initializeBottomRow();\r\n\t\t}\r\n\t}\r\n\t\r\n\tinitializeTopRow(){\r\n\t\tif(!this.topInitialized){\r\n\t\t\tthis.table.columnManager.getContentsElement().insertBefore(this.topElement, this.table.columnManager.headersElement.nextSibling);\r\n\t\t\tthis.topInitialized = true;\r\n\t\t}\r\n\t}\r\n\t\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\t\r\n\tscrollHorizontal(left){\r\n\t\tif(this.botInitialized && this.botRow){\r\n\t\t\tthis.botElement.scrollLeft = left;\r\n\t\t}\r\n\t}\r\n\t\r\n\trecalc(rows){\r\n\t\tvar data, row;\r\n\t\t\r\n\t\tif(!this.blockCheck()){\r\n\t\t\tif(this.topInitialized || this.botInitialized){\r\n\t\t\t\tdata = this.rowsToData(rows);\r\n\t\t\t\t\r\n\t\t\t\tif(this.topInitialized){\r\n\t\t\t\t\tif(this.topRow){\r\n\t\t\t\t\t\tthis.topRow.deleteCells();\r\n\t\t\t\t\t}\r\n\t\t\t\t\t\r\n\t\t\t\t\trow = this.generateRow(\"top\", data);\r\n\t\t\t\t\tthis.topRow = row;\r\n\t\t\t\t\twhile(this.topElement.firstChild) this.topElement.removeChild(this.topElement.firstChild);\r\n\t\t\t\t\tthis.topElement.appendChild(row.getElement());\r\n\t\t\t\t\trow.initialize(true);\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\tif(this.botInitialized){\r\n\t\t\t\t\tif(this.botRow){\r\n\t\t\t\t\t\tthis.botRow.deleteCells();\r\n\t\t\t\t\t}\r\n\t\t\t\t\t\r\n\t\t\t\t\trow = this.generateRow(\"bottom\", data);\r\n\t\t\t\t\tthis.botRow = row;\r\n\t\t\t\t\twhile(this.botElement.firstChild) this.botElement.removeChild(this.botElement.firstChild);\r\n\t\t\t\t\tthis.botElement.appendChild(row.getElement());\r\n\t\t\t\t\trow.initialize(true);\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\tthis.table.rowManager.adjustTableSize();\r\n\t\t\t\t\r\n\t\t\t\t//set resizable handles\r\n\t\t\t\tif(this.table.modExists(\"frozenColumns\")){\r\n\t\t\t\t\tthis.table.modules.frozenColumns.layout();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\trecalcRowGroup(row){\r\n\t\tthis.recalcGroup(this.table.modules.groupRows.getRowGroup(row));\r\n\t}\r\n\t\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\t\t\t\r\n\t\t\tif(this.table.options.groupBy && this.table.options.columnCalcs !== \"table\"){\r\n\t\t\t\t\r\n\t\t\t\tvar groups = this.table.modules.groupRows.getChildGroups();\r\n\t\t\t\t\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\t\r\n\trecalcGroup(group){\r\n\t\tvar data, rowData;\r\n\t\t\r\n\t\tif(!this.blockCheck()){\r\n\t\t\tif(group){\r\n\t\t\t\tif(group.calcs){\r\n\t\t\t\t\tif(group.calcs.bottom){\r\n\t\t\t\t\t\tdata = this.rowsToData(group.rows);\r\n\t\t\t\t\t\trowData = this.generateRowData(\"bottom\", data);\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\tgroup.calcs.bottom.updateData(rowData);\r\n\t\t\t\t\t\tgroup.calcs.bottom.reinitialize();\r\n\t\t\t\t\t}\r\n\t\t\t\t\t\r\n\t\t\t\t\tif(group.calcs.top){\r\n\t\t\t\t\t\tdata = this.rowsToData(group.rows);\r\n\t\t\t\t\t\trowData = this.generateRowData(\"top\", data);\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\tgroup.calcs.top.updateData(rowData);\r\n\t\t\t\t\t\tgroup.calcs.top.reinitialize();\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//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\t\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\t\t\t\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\t\t\r\n\t\treturn data;\r\n\t}\r\n\t\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\t\t\r\n\t\tif(this.table.modExists(\"mutator\")){\r\n\t\t\tthis.table.modules.mutator.disable();\r\n\t\t}\r\n\t\t\r\n\t\trow = new Row(rowData, this, \"calc\");\r\n\t\t\r\n\t\tif(this.table.modExists(\"mutator\")){\r\n\t\t\tthis.table.modules.mutator.enable();\r\n\t\t}\r\n\t\t\r\n\t\trow.getElement().classList.add(\"tabulator-calcs\", \"tabulator-calcs-\" + pos);\r\n\t\t\r\n\t\trow.component = false;\r\n\t\t\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\t\t\t\r\n\t\t\treturn row.component;\r\n\t\t};\r\n\t\t\r\n\t\trow.generateCells = () => {\r\n\t\t\t\r\n\t\t\tvar cells = [];\r\n\t\t\t\r\n\t\t\tthis.table.columnManager.columnsByIndex.forEach((column) => {\r\n\t\t\t\t\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\t\t\t\t\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\t\t\t\t\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\t\t\t\t\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\t\t\t\t\r\n\t\t\t\tcolumn.cells.push(cell);\r\n\t\t\t\tcells.push(cell);\r\n\t\t\t\t\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\t\t\t\r\n\t\t\trow.cells = cells;\r\n\t\t};\r\n\t\t\r\n\t\treturn row;\r\n\t}\r\n\t\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\t\t\r\n\t\tcalcs.forEach(function(column){\r\n\t\t\tvar values = [];\r\n\t\t\t\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\t\t\t\t\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\t\t\t\t\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\t\t\r\n\t\treturn rowData;\r\n\t}\r\n\t\r\n\thasTopCalcs(){\r\n\t\treturn\t!!(this.topCalcs.length);\r\n\t}\r\n\t\r\n\thasBottomCalcs(){\r\n\t\treturn\t!!(this.botCalcs.length);\r\n\t}\r\n\t\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\t\r\n\t//return the calculated\r\n\tgetResults(){\r\n\t\tvar results = {},\r\n\t\tgroups;\r\n\t\t\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\t\t\t\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\t\t\r\n\t\treturn results;\r\n\t}\r\n\t\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\t\t\r\n\t\tsubGroups.forEach((subgroup) => {\r\n\t\t\tsubGroupResults[subgroup.getKey()] = this.getGroupResults(subgroup);\r\n\t\t});\r\n\t\t\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\t\t\r\n\t\treturn results;\r\n\t}\r\n\t\r\n\tadjustForScrollbar(width){\r\n\t\tif(this.botRow){\r\n\t\t\tif(this.table.rtl){\r\n\t\t\t\tthis.botElement.style.paddingLeft = width + \"px\";\r\n\t\t\t}else{\r\n\t\t\t\tthis.botElement.style.paddingRight = width + \"px\";\r\n\t\t\t}\r\n\t\t}\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\tcompression = 'compress' in options ? options.compress : true,\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', compression });\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 && !e.ctrlKey && !e.metaKey){\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\tthis.filterTerm=\"\";\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 = Array.isArray(this.initialValues) ? this.initialValues[0] : this.initialValues;\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(\"row-layout\", this.rowEditableCheck.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.findPrevEditableCell(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\r\n\trowEditableCheck(row){\r\n\t\trow.getCells().forEach((cell) => {\r\n\t\t\tif(cell.column.modules.edit && typeof cell.column.modules.edit.check === \"function\"){\r\n\t\t\t\tthis.updateCellClass(cell);\r\n\t\t\t}\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\tif(cell.row.initialized){\r\n\t\t\t\t\t\tcheck = cell.column.modules.edit.check(cell.getComponent());\r\n\t\t\t\t\t}\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\t\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\t\t\r\n\t\tthis.config = {};\r\n\t\tthis.cloneTableStyle = true;\r\n\t\tthis.colVisProp = \"\";\r\n\t\t\r\n\t\tthis.registerTableOption(\"htmlOutputConfig\", false); //html output config\r\n\t\t\r\n\t\tthis.registerColumnOption(\"htmlOutput\");\r\n\t\tthis.registerColumnOption(\"titleHtmlOutput\");\r\n\t}\r\n\t\r\n\tinitialize(){\r\n\t\tthis.registerTableFunction(\"getHtml\", this.getHtml.bind(this));\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\t///////////////////////////////////\r\n\t///////// Internal Logic //////////\r\n\t///////////////////////////////////\r\n\t\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\t\t\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\t\t\r\n\t\treturn headers.concat(body);\r\n\t}\r\n\t\r\n\tgenerateTable(config, style, range, colVisProp){\r\n\t\tvar list = this.generateExportList(config, style, range, colVisProp);\r\n\t\t\r\n\t\treturn this.generateTableElement(list);\r\n\t}\r\n\t\r\n\trowLookup(range){\r\n\t\tvar rows = [];\r\n\t\t\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\t\t\t\t\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\t\t\t\t\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\t\t\t\t\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\t\t\t\t\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\t\t\r\n\t\treturn Object.assign([], rows);\r\n\t}\r\n\t\r\n\tgenerateColumnGroupHeaders(){\r\n\t\tvar output = [];\r\n\t\t\r\n\t\tvar columns = this.config.columnGroups !== false ? this.table.columnManager.columns : this.table.columnManager.columnsByIndex;\r\n\t\t\r\n\t\tcolumns.forEach((column) => {\r\n\t\t\tvar colData = this.processColumnGroup(column);\r\n\t\t\t\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\t\t\r\n\t\treturn output;\r\n\t}\r\n\t\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\t\t\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\t\t\r\n\t\tif(subGroups.length){\r\n\t\t\tgroupData.subGroups = [];\r\n\t\t\tgroupData.width = 0;\r\n\t\t\t\r\n\t\t\tsubGroups.forEach((subGroup) => {\r\n\t\t\t\tvar subGroupData = this.processColumnGroup(subGroup);\r\n\t\t\t\t\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\t\t\t\t\t\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\t\t\t\r\n\t\t\tgroupData.depth += maxDepth;\r\n\t\t\t\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\t\t\r\n\t\treturn groupData;\r\n\t}\r\n\t\r\n\tcolumnVisCheck(column){\r\n\t\tvar visProp = column.definition[this.colVisProp];\r\n\t\t\r\n\t\tif(typeof visProp === \"function\"){\r\n\t\t\tvisProp = visProp.call(this.table, column.getComponent());\r\n\t\t}\r\n\t\t\r\n\t\treturn visProp !== false && (column.visible || (!column.visible && visProp));\r\n\t}\r\n\t\r\n\theadersToExportRows(columns){\r\n\t\tvar headers = [],\r\n\t\theaderDepth = 0,\r\n\t\texportRows = [];\r\n\t\t\r\n\t\tfunction parseColumnGroup(column, level){\r\n\t\t\t\r\n\t\t\tvar depth = headerDepth - level;\r\n\t\t\t\r\n\t\t\tif(typeof headers[level] === \"undefined\"){\r\n\t\t\t\theaders[level] = [];\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tcolumn.height = column.subGroups ? 1 : (depth - column.depth) + 1;\r\n\t\t\t\r\n\t\t\theaders[level].push(column);\r\n\t\t\t\r\n\t\t\tif(column.height > 1){\r\n\t\t\t\tfor(let i = 1; i < column.height; i ++){\r\n\t\t\t\t\t\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\t\t\t\t\t\r\n\t\t\t\t\theaders[level + i].push(false);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t\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\t\t\t\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\t\t\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\t\t\r\n\t\tcolumns.forEach(function(column){\r\n\t\t\tparseColumnGroup(column,0);\r\n\t\t});\r\n\t\t\r\n\t\theaders.forEach((header) => {\r\n\t\t\tvar columns = [];\r\n\t\t\t\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\t\t\t\r\n\t\t\texportRows.push(new ExportRow(\"header\", columns));\r\n\t\t});\r\n\t\t\r\n\t\treturn exportRows;\r\n\t}\r\n\t\r\n\tbodyToExportRows(rows){\r\n\t\t\r\n\t\tvar columns = [];\r\n\t\tvar exportRows = [];\r\n\t\t\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\t\t\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\t\t\t\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\t\t\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\t\t\t\t\r\n\t\t\t\tcase \"calc\":\r\n\t\t\t\t\treturn this.config.columnCalcs !== false;\r\n\t\t\t\t\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\t\t\t\r\n\t\t\treturn true;\r\n\t\t});\r\n\t\t\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\t\t\t\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\t\t\t\t\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\t\t\t\t\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\t\t\t\r\n\t\t\texportRows.push(new ExportRow(row.type, exportCols, row.getComponent(), indent));\r\n\t\t});\r\n\t\t\r\n\t\treturn exportRows;\r\n\t}\r\n\t\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\t\t\r\n\t\tsetup.rowFormatter = rowFormatter !== null ? rowFormatter : this.table.options.rowFormatter;\r\n\t\t\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\t\t\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\t\t\r\n\t\tif(setup.groupHeader && !Array.isArray(setup.groupHeader)){\r\n\t\t\tsetup.groupHeader = [setup.groupHeader];\r\n\t\t}\r\n\t\t\r\n\t\ttable.classList.add(\"tabulator-print-table\");\r\n\t\t\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\t\t\r\n\t\t\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\t\t\r\n\t\tlist.forEach((row, i) => {\r\n\t\t\tlet rowEl;\r\n\t\t\t\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\t\t\t\t\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\t\t\t\t\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\t\t\t\t\r\n\t\t\t\tcase \"row\":\r\n\t\t\t\t\trowEl = this.generateRowElement(row, setup, styles);\r\n\t\t\t\t\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\t\t\r\n\t\tif(headerEl.innerHTML){\r\n\t\t\ttable.appendChild(headerEl);\r\n\t\t}\r\n\t\t\r\n\t\ttable.appendChild(bodyEl);\r\n\t\t\r\n\t\t\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\t\r\n\tlookupTableStyles(){\r\n\t\tvar styles = {};\r\n\t\t\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\t\t\t\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\t\t\r\n\t\treturn styles;\r\n\t}\r\n\t\r\n\tgenerateHeaderElement(row, setup, styles){\r\n\t\tvar rowEl = document.createElement(\"tr\");\r\n\t\t\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\t\t\t\t\r\n\t\t\t\tcellEl.colSpan = column.width;\r\n\t\t\t\tcellEl.rowSpan = column.height;\r\n\t\t\t\t\r\n\t\t\t\tcellEl.innerHTML = column.value;\r\n\t\t\t\t\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\t\t\t\t\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\t\t\t\t\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\t\t\t\t\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\t\t\t\t\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\t\t\t\t\r\n\t\t\t\trowEl.appendChild(cellEl);\r\n\t\t\t}\r\n\t\t});\r\n\t\t\r\n\t\treturn rowEl;\r\n\t}\r\n\t\r\n\tgenerateGroupElement(row, setup, styles){\r\n\t\t\r\n\t\tvar rowEl = document.createElement(\"tr\"),\r\n\t\tcellEl = document.createElement(\"td\"),\r\n\t\tgroup = row.columns[0];\r\n\t\t\r\n\t\trowEl.classList.add(\"tabulator-print-table-row\");\r\n\t\t\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\t\t\r\n\t\tcellEl.colSpan = group.width;\r\n\t\tcellEl.innerHTML = group.value;\r\n\t\t\r\n\t\trowEl.classList.add(\"tabulator-print-table-group\");\r\n\t\trowEl.classList.add(\"tabulator-group-level-\" + row.indent);\r\n\t\t\r\n\t\tif(group.component.isVisible()){\r\n\t\t\trowEl.classList.add(\"tabulator-group-visible\");\r\n\t\t}\r\n\t\t\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\t\t\r\n\t\trowEl.appendChild(cellEl);\r\n\t\t\r\n\t\treturn rowEl;\r\n\t}\r\n\t\r\n\tgenerateCalcElement(row, setup, styles){\r\n\t\tvar rowEl = this.generateRowElement(row, setup, styles);\r\n\t\t\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\t\t\r\n\t\treturn rowEl;\r\n\t}\r\n\t\r\n\tgenerateRowElement(row, setup, styles){\r\n\t\tvar rowEl = document.createElement(\"tr\");\r\n\t\t\r\n\t\trowEl.classList.add(\"tabulator-print-table-row\");\r\n\t\t\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\t\t\t\t\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\t\t\t\t\r\n\t\t\t\tvar classNames = column.definition.cssClass ? column.definition.cssClass.split(\" \") : [];\r\n\t\t\t\t\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\t\t\t\t\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\t\t\t\t\t\t\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\t\t\t\t\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\t\t\t\t\r\n\t\t\t\tcellStyle = styles.styleCells && styles.styleCells[index] ? styles.styleCells[index] : styles.firstCell;\r\n\t\t\t\t\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\t\t\t\t\t\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\t\t\t\t\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\t\t\t\t\r\n\t\t\t\trowEl.appendChild(cellEl);\r\n\t\t\t\t\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\t\t\t}\r\n\t\t});\r\n\t\t\r\n\t\tif(setup.rowFormatter && row.type === \"row\" && this.config.formatCells !== false){\r\n\t\t\tlet formatComponent = Object.assign(row.component);\r\n\r\n\t\t\tformatComponent.getElement = function(){return rowEl;};\r\n\r\n\t\t\tsetup.rowFormatter(row.component);\r\n\t\t}\r\n\t\t\r\n\t\treturn rowEl;\r\n\t}\r\n\t\r\n\tgenerateHTMLTable(list){\r\n\t\tvar holder = document.createElement(\"div\");\r\n\t\t\r\n\t\tholder.appendChild(this.generateTableElement(list));\r\n\t\t\r\n\t\treturn holder.innerHTML;\r\n\t}\r\n\t\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\t\t\r\n\t\treturn this.generateHTMLTable(list);\r\n\t}\r\n\t\r\n\tmapElementStyles(from, to, props){\r\n\t\tif(this.cloneTableStyle && from && to){\r\n\t\t\t\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\t\t\t\r\n\t\t\tif(window.getComputedStyle){\r\n\t\t\t\tvar fromStyle = window.getComputedStyle(from);\r\n\t\t\t\t\r\n\t\t\t\tprops.forEach(function(prop){\r\n\t\t\t\t\tif(!to.style[lookup[prop]]){\r\n\t\t\t\t\t\tto.style[lookup[prop]] = fromStyle.getPropertyValue(prop);\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\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\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, onRenderedCallback;\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\tfunction onRendered(callback){\r\n\t\t\tonRenderedCallback = callback;\r\n\t\t}\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, onRendered, 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 : (column.definition.headerFilterPlaceholder || 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.contentsElement.scrollLeft;\r\n\r\n\t\t\t\t\tvar headerPos = this.table.rowManager.element.scrollLeft;\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\r\n\t\t\t\tif(onRenderedCallback){\r\n\t\t\t\t\tonRenderedCallback();\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\t\r\n\tel.innerHTML = `\r\n \r\n \r\n\r\n\r\n\r\n \r\n`;\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\t\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\t\t\r\n\t\tthis.registerColumnOption(\"formatter\");\r\n\t\tthis.registerColumnOption(\"formatterParams\");\r\n\t\t\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\t\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\t\r\n\t//initialize column formatter\r\n\tinitializeColumn(column){\r\n\t\tcolumn.modules.format = this.lookupFormatter(column, \"\");\r\n\t\t\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\t\t\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\t\t\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\t\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\t\t\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\t\t\t\r\n\t\t\tcase \"function\":\r\n\t\t\t\tconfig.formatter = formatter;\r\n\t\t\t\tbreak;\r\n\t\t\t\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\t\t\r\n\t\treturn config;\r\n\t}\r\n\t\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\t\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\t\t\r\n\t\tif(column.definition.titleFormatter){\r\n\t\t\tformatter = this.getFormatter(column.definition.titleFormatter);\r\n\t\t\t\r\n\t\t\tonRendered = (callback) => {\r\n\t\t\t\tcolumn.titleFormatterRendered = callback;\r\n\t\t\t};\r\n\t\t\t\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\tgetColumn:function(){\r\n\t\t\t\t\treturn column.getComponent();\r\n\t\t\t\t},\r\n\t\t\t\tgetTable:() => {\r\n\t\t\t\t\treturn this.table;\r\n\t\t\t\t}\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tparams = column.definition.titleFormatterParams || {};\r\n\t\t\t\r\n\t\t\tparams = typeof params === \"function\" ? params() : params;\r\n\t\t\t\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\t\r\n\t\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\t\t\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\t\t\t\r\n\t\t\tcell.modules.format.renderedCallback = callback;\r\n\t\t\tcell.modules.format.rendered = false;\r\n\t\t}\r\n\t\t\r\n\t\treturn cell.column.modules.format.formatter.call(this, component, params, onRendered);\r\n\t}\r\n\t\r\n\tformatExportValue(cell, type){\r\n\t\tvar formatter = cell.column.modules.format[type],\r\n\t\tparams;\r\n\t\t\r\n\t\tif(formatter){\r\n\t\t\tparams = typeof formatter.params === \"function\" ? formatter.params(cell.getComponent()) : formatter.params;\r\n\t\t\t\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\t\t\t\t\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\t\t\t\r\n\t\t\treturn formatter.formatter.call(this, cell.getComponent(), params, onRendered);\r\n\t\t\t\r\n\t\t}else{\r\n\t\t\treturn this.formatValue(cell);\r\n\t\t}\r\n\t}\r\n\t\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\t\t\t\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\t\r\n\temptyToSpace(value){\r\n\t\treturn value === null || typeof value === \"undefined\" || value === \"\" ? \" \" : value;\r\n\t}\r\n\t\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\t\t\t\r\n\t\t\tcase \"function\":\r\n\t\t\t//Custom formatter Function, do nothing\r\n\t\t\t\tbreak;\r\n\t\t\t\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\t\t\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.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.active = false;\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(\"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\tthis.subscribe(\"scrollbar-vertical\", this.adjustForScrollbar.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//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.leftColumns.forEach((column, i) => {\t\r\n\t\t\tcolumn.modules.frozen.marginValue = leftMargin;\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\tcolumn.modules.frozen.marginValue = rightMargin;\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\trightMargin += column.getWidth();\r\n\t\t\t}\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\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\r\n\t\t\t//calculate left columns\r\n\t\t\tthis.layoutColumnPosition();\r\n\t\t\t\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\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\tvar position;\r\n\t\t\r\n\t\tif(column.modules.frozen){\r\n\t\t\telement.style.position = \"sticky\";\r\n\r\n\t\t\tif(this.table.rtl){\r\n\t\t\t\tposition = column.modules.frozen.position === \"left\" ? \"right\" : \"left\";\r\n\t\t\t}else{\r\n\t\t\t\tposition = column.modules.frozen.position;\r\n\t\t\t}\r\n\t\t\r\n\t\t\telement.style[position] = column.modules.frozen.margin;\r\n\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\r\n\tadjustForScrollbar(width){\r\n\t\tif(this.rightColumns.length){\r\n\t\t\tthis.table.columnManager.getContentsElement().style.width = \"calc(100% - \" + width + \"px)\";\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.getContentsElement().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(elementsOnly){\r\n\t\tif(!elementsOnly){\r\n\t\t\tif(this.groupList.length){\r\n\t\t\t\tthis.groupList.forEach(function(group){\r\n\t\t\t\t\tgroup.wipe();\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\tif(row.modules){\r\n\t\t\t\t\t\tdelete row.modules.group;\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\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\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}\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\t\r\n\t\t\tif(el.parentNode){\r\n\t\t\t\tel.parentNode.removeChild(el);\r\n\t\t\t}\r\n\r\n\t\t\tif(!this.groupManager.blockRedraw){\r\n\t\t\t\tthis.generateGroupHeaderContents();\r\n\t\t\t\t\r\n\t\t\t\tif(this.groupManager.table.modExists(\"columnCalcs\") && this.groupManager.table.options.columnCalcs != \"table\"){\r\n\t\t\t\t\tthis.groupManager.table.modules.columnCalcs.recalcGroup(this);\r\n\t\t\t\t}\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(){\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\t\r\n\t\tif(this.calcs.top){\r\n\t\t\tthis.calcs.top.detachElement();\r\n\t\t\tthis.calcs.top.deleteCells();\r\n\t\t}\r\n\t\t\r\n\t\tif(this.calcs.bottom){\r\n\t\t\tthis.calcs.bottom.detachElement();\r\n\t\t\tthis.calcs.bottom.deleteCells();\r\n\t\t}\r\n\t\t\r\n\t\t\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());\r\n\t\t\t\t});\r\n\t\t\t\t\r\n\t\t\t}else{\r\n\t\t\t\tif(this.groupManager.table.options.columnCalcs != \"table\" && this.groupManager.table.modExists(\"columnCalcs\") && this.groupManager.table.modules.columnCalcs.hasTopCalcs()){\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(this.groupManager.table.options.columnCalcs != \"table\" && this.groupManager.table.modExists(\"columnCalcs\") && this.groupManager.table.modules.columnCalcs.hasBottomCalcs()){\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\tif(this.groupManager.table.modules.columnCalcs.hasTopCalcs()){\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(this.groupManager.table.modules.columnCalcs.hasBottomCalcs()){\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\t\t\t\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\r\n\t\tthis.blockRedraw = false;\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\tthis.subscribe(\"table-destroy\", this._blockRedrawing.bind(this));\r\n\t\tthis.subscribe(\"rows-wipe\", this._blockRedrawing.bind(this));\r\n\t\tthis.subscribe(\"rows-wiped\", this._restore_redrawing.bind(this));\r\n\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\t_blockRedrawing(){\r\n\t\tthis.blockRedraw = true;\r\n\t}\r\n\r\n\t_restore_redrawing(){\r\n\t\tthis.blockRedraw = false;\r\n\t}\r\n\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(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\r\n\t\tif(!groups && this.table.modExists(\"columnCalcs\") && this.table.options.columnCalcs === true){\r\n\t\t\tthis.table.modules.columnCalcs.reinitializeCalcs();\r\n\t\t}\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\t\r\n\t\t\tthis.groupList = [];\r\n\t\t\tthis.groups = {};\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\t\r\n\t\tObject.values(oldGroups).forEach((group) => {\r\n\t\t\tgroup.wipe(true);\r\n\t\t});\t\r\n\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\r\n\t\tif(!this.blockRedraw){\r\n\t\t\tthis.groupList.forEach((group) => {\r\n\t\t\t\toutput = output.concat(group.getHeadersAndRows());\r\n\t\t\t});\r\n\t\t\t\r\n\t\t\tif(force){\r\n\t\t\t\tthis.refreshData(true);\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\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\trowMouseDown:\"row-mousedown\",\r\n\t\t\trowMouseUp:\"row-mouseup\",\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\tcellMouseDown:\"cell-mousedown\",\r\n\t\t\tcellMouseUp:\"cell-mouseup\",\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\theaderMouseDown:\"column-mousedown\",\r\n\t\t\theaderMouseUp:\"column-mouseup\",\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\tgroupMouseDown:\"group-mousedown\",\r\n\t\t\tgroupMouseUp:\"group-mouseup\",\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(\"headerMouseDown\");\r\n\t\tthis.registerColumnOption(\"headerMouseUp\");\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(\"cellMouseDown\");\r\n\t\tthis.registerColumnOption(\"cellMouseUp\");\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\t\t\r\n\t\tthis.registerTableOption(\"rowContextMenu\", false);\r\n\t\tthis.registerTableOption(\"rowClickMenu\", false);\r\n\t\tthis.registerTableOption(\"rowDblClickMenu\", false);\r\n\t\tthis.registerTableOption(\"groupContextMenu\", false);\r\n\t\tthis.registerTableOption(\"groupClickMenu\", false);\r\n\t\tthis.registerTableOption(\"groupDblClickMenu\", false);\r\n\t\t\r\n\t\tthis.registerColumnOption(\"headerContextMenu\");\r\n\t\tthis.registerColumnOption(\"headerClickMenu\");\r\n\t\tthis.registerColumnOption(\"headerDblClickMenu\");\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\tthis.registerColumnOption(\"dblClickMenu\");\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\t\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\t\r\n\t\tif(this.table.options.rowDblClickMenu){\r\n\t\t\tthis.subscribe(\"row-dblclick\", this.loadMenuEvent.bind(this, this.table.options.rowDblClickMenu));\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\t\r\n\t\tif(this.table.options.groupDblClickMenu){\r\n\t\t\tthis.subscribe(\"group-dblclick\", this.loadMenuEvent.bind(this, this.table.options.groupDblClickMenu));\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.headerDblClickMenu && !this.columnSubscribers.headerDblClickMenu){\r\n\t\t\tthis.columnSubscribers.headerDblClickMenu = this.loadMenuTableColumnEvent.bind(this, \"headerDblClickMenu\");\r\n\t\t\tthis.subscribe(\"column-dblclick\", this.columnSubscribers.headerDblClickMenu);\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\t\r\n\t\tif(def.dblClickMenu && !this.columnSubscribers.dblClickMenu){\r\n\t\t\tthis.columnSubscribers.dblClickMenu = this.loadMenuTableCellEvent.bind(this, \"dblClickMenu\");\r\n\t\t\tthis.subscribe(\"cell-dblclick\", this.columnSubscribers.dblClickMenu);\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\t\t\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\t\t\t\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\tif(this.rootPopup){\r\n\t\t\t\tthis.rootPopup.hide();\r\n\t\t\t}\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\t\t\t\r\n\t\t\tthis.currentComponent = component;\r\n\t\t\t\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.contentsElement.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.getContentsElement(),\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\theaderElement.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.getContentsElement(),\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\tthis.trackChanges();\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(\"column-width\", 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(\"rowDblClickPopup\", false);\r\n\t\tthis.registerTableOption(\"groupContextPopup\", false);\r\n\t\tthis.registerTableOption(\"groupClickPopup\", false);\r\n\t\tthis.registerTableOption(\"groupDblClickPopup\", false);\r\n\t\t\r\n\t\tthis.registerColumnOption(\"headerContextPopup\");\r\n\t\tthis.registerColumnOption(\"headerClickPopup\");\r\n\t\tthis.registerColumnOption(\"headerDblClickPopup\");\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\tthis.registerColumnOption(\"dblClickPopup\");\r\n\r\n\t\tthis.registerComponentFunction(\"cell\", \"popup\", this._componentPopupCall.bind(this));\r\n\t\tthis.registerComponentFunction(\"column\", \"popup\", this._componentPopupCall.bind(this));\r\n\t\tthis.registerComponentFunction(\"row\", \"popup\", this._componentPopupCall.bind(this));\r\n\t\tthis.registerComponentFunction(\"group\", \"popup\", this._componentPopupCall.bind(this));\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\r\n\t_componentPopupCall(component, contents, position){\r\n\t\tthis.loadPopupEvent(contents, null, component, position);\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\r\n\t\tif(this.table.options.rowDblClickPopup){\r\n\t\t\tthis.subscribe(\"row-dblclick\", this.loadPopupEvent.bind(this, this.table.options.rowDblClickPopup));\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\r\n\t\tif(this.table.options.groupDblClickPopup){\r\n\t\t\tthis.subscribe(\"group-dblclick\", this.loadPopupEvent.bind(this, this.table.options.groupDblClickPopup));\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\t}if(def.headerDblClickPopup && !this.columnSubscribers.headerDblClickPopup){\r\n\t\t\tthis.columnSubscribers.headerDblClickPopup = this.loadPopupTableColumnEvent.bind(this, \"headerDblClickPopup\");\r\n\t\t\tthis.subscribe(\"column-dblclick\", this.columnSubscribers.headerDblClickPopup);\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\r\n\t\tif(def.dblClickPopup && !this.columnSubscribers.dblClickPopup){\r\n\t\t\tthis.columnSubscribers.dblClickPopup = this.loadPopupTableCellEvent.bind(this, \"dblClickPopup\");\r\n\t\t\tthis.subscribe(\"cell-click\", this.columnSubscribers.dblClickPopup);\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, position){\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, position);\r\n\t}\r\n\t\r\n\tloadPopup(e, component, contents, renderedCallback, position){\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\r\n\t\tif(e){\r\n\t\t\tpopup.show(e);\r\n\t\t}else{\r\n\t\t\tpopup.show(component.getElement(), position || \"center\");\r\n\t\t}\r\n\r\n\t\t\r\n\t\tpopup.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\t\tthis.beforeprintEventHandler = null;\r\n\t\tthis.afterprintEventHandler = null;\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\tthis.beforeprintEventHandler = this.replaceTable.bind(this);\r\n\t\t\tthis.afterprintEventHandler = this.cleanup.bind(this);\r\n\r\n\t\t\twindow.addEventListener(\"beforeprint\", this.beforeprintEventHandler );\r\n\t\t\twindow.addEventListener(\"afterprint\", this.afterprintEventHandler);\r\n\t\t\tthis.subscribe(\"table-destroy\", this.destroy.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\tdestroy(){\r\n\t\tif(this.table.options.printAsHtml){\r\n\t\t\twindow.removeEventListener( \"beforeprint\", this.beforeprintEventHandler );\r\n\t\t\twindow.removeEventListener( \"afterprint\", this.afterprintEventHandler );\r\n\t\t}\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\r\n\tfrozenColumnOffset(column){\r\n\t\tvar offset = false;\r\n\r\n\t\tif(column.modules.frozen){\r\n\t\t\toffset = column.modules.frozen.marginValue; \r\n\r\n\t\t\tif(column.modules.frozen.position === \"left\"){\r\n\t\t\t\toffset += column.getWidth() - 3;\r\n\t\t\t}else{\r\n\t\t\t\tif(offset){\r\n\t\t\t\t\toffset -= 3;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn offset !== false ? offset + \"px\" : false;\r\n\t}\r\n\t\r\n\treinitializeColumn(column){\r\n\t\tvar frozenOffset = this.frozenColumnOffset(column);\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[column.modules.frozen.position] = 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[column.modules.frozen.position] = 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 = \"sticky\";\r\n\t\t\t\thandle.style[column.modules.frozen.position] = this.frozenColumnOffset(column);\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.table.columnManager.verticalAlignHeaders();\r\n\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\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\t\t\t\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}else{\r\n\t\t\t\tif(this.visible){\r\n\t\t\t\t\tthis.redrawTable(this.initialRedraw);\r\n\t\t\t\t\tthis.initialRedraw = false;\r\n\t\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 working = true;\r\n\r\n\t\twhile(working){\r\n\r\n\t\t\tlet width = this.table.modules.layout.getMode() == \"fitColumns\" ? this.table.columnManager.getFlexBaseWidth() : this.table.columnManager.getWidth();\r\n\r\n\t\t\tlet diff = (this.table.options.headerVisible ? this.table.columnManager.element.clientWidth : this.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 = this.columns[this.index];\r\n\r\n\t\t\t\tif(column){\r\n\t\t\t\t\tthis.hideColumn(column);\r\n\t\t\t\t\tthis.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 = this.columns[this.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\tthis.showColumn(column);\r\n\t\t\t\t\t\t\tthis.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(!this.table.rowManager.activeRowsCount){\r\n\t\t\t\tthis.table.rowManager.renderEmptyScroll();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tgenerateCollapsedContent(){\r\n\t\tvar rows = this.table.rowManager.getDisplayRows();\r\n\r\n\t\trows.forEach((row) => {\r\n\t\t\tthis.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 data = row.getData(),\r\n\t\toutput = [],\r\n\t\tmockCellComponent;\r\n\r\n\t\tthis.hiddenColumns.forEach((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 && this.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\tgetTable:() => {\r\n\t\t\t\t\t\t\treturn this.table;\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(this.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.checkRowSelectability(row)){\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\r\n\tcheckRowSelectability(row){\r\n\t\tif(row.type === \"row\"){\r\n\t\t\treturn this.table.options.selectableCheck.call(this.table, row.getComponent());\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t}\r\n\t\r\n\t//toggle row selection\r\n\ttoggleRow(row){\r\n\t\tif(this.checkRowSelectability(row)){\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\t\tthis.registerTableOption(\"headerSortClickElement\", \"header\"); //element which triggers sort when clicked\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\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.headerSortClickElement){\r\n\t\t\t\tcase \"icon\":\r\n\t\t\t\t\tarrowEl.classList.add(\"tabulator-col-sorter-element\");\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase \"header\":\r\n\t\t\t\t\tcolEl.classList.add(\"tabulator-col-sorter-element\");\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tcolEl.classList.add(\"tabulator-col-sorter-element\");\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\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\t(this.table.options.headerSortClickElement === \"icon\" ? arrowEl : colEl).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","constructor","table","this","reloadData","data","silent","columnsChanged","dataLoader","load","undefined","langText","modules","localize","getText","arguments","langBind","bind","langLocale","getLocale","commsConnections","comms","getConnections","commsSend","send","layoutMode","layout","getMode","layoutRefresh","force","subscribe","eventBus","unsubscribe","subscribed","key","subscriptionChange","dispatch","chain","confirm","dispatchExternal","externalEvents","subscribedExternal","subscriptionChangeExternal","options","setOption","value","deprecationCheck","oldOption","newOption","deprecationAdvisor","check","deprecationCheckMsg","msg","checkMsg","deprecationMsg","module","ColumnComponent","column","_column","type","Proxy","get","target","name","receiver","componentFunctionBinder","handle","getElement","getDefinition","getField","getTitleDownload","getCells","cells","forEach","cell","push","getComponent","isVisible","visible","show","isGroup","columns","hide","toggle","delete","getSubColumns","output","length","getParentColumn","parent","Column","_getSelf","scrollTo","columnManager","scrollToColumn","getTable","move","to","after","toColumn","findColumn","moveColumn","console","warn","getNextColumn","nextCol","nextColumn","getPrevColumn","prevCol","prevColumn","updateDefinition","updates","getWidth","setWidth","width","result","reinitializeWidth","rerenderColumns","title","field","hozAlign","vertAlign","minWidth","maxWidth","maxInitialWidth","cssClass","variableHeight","headerVertical","headerHozAlign","headerWordWrap","editableTitle","CellComponent","_cell","getValue","getOldValue","getInitialValue","initialValue","getRow","row","getData","getColumn","setValue","mutate","restoreOldValue","setValueActual","restoreInitialValue","checkHeight","Cell","super","element","oldValue","height","component","loaded","build","generateElement","_configureCell","getFieldValue","document","createElement","className","setAttribute","style","textAlign","display","alignItems","top","bottom","middle","justifyContent","left","right","center","definition","split","classList","add","_generateContents","val","innerHTML","Node","firstChild","removeChild","appendChild","cellRendered","containerOnly","layoutElement","setValueProcessData","cellEdited","call","rowManager","changed","setFieldValue","widthStyled","clearWidth","offsetWidth","setMinWidth","minWidthStyled","setMaxWidth","maxWidthStyled","reinitializeHeight","clearHeight","setHeight","heightStyled","getHeight","offsetHeight","redrawBlock","parentNode","deleteCell","calcs","getIndex","getCellIndex","def","contentElement","titleHolderElement","titleElement","groupElement","createGroupElement","fieldStructure","titleDownload","titleFormatterRendered","mapDefinitions","setField","widthFixed","i","newCol","attachColumn","checkColumnVisibility","registerColumnField","_initialize","el","columnHeaderVertAlign","defaults","columnDefaults","optionsList","generate","defaultOptionList","checkDefinition","Object","keys","indexOf","nestedFieldSeparator","_getNestedData","_getFlatData","_setNestedData","_setFlatData","registerColumnPosition","reRegisterPosition","_buildColumnHeaderContent","_buildGroupHeader","_buildColumnHeader","parseInt","_buildColumnHeaderTitle","addEventListener","e","stopPropagation","focus","text","_formatColumnHeaderTitle","contents","dataObj","structure","columnRendered","verticalAlign","alignment","parentHeight","getGroupElement","clientHeight","getHeadersElement","minHeight","clearVerticalAlign","paddingTop","getFirstColumn","getLastColumn","getColumns","traverse","concat","getTopColumn","updateBranches","colDefs","responsiveToggle","verticalAlignHeaders","matchChildWidths","childWidth","child","index","splice","setWidthActual","isNaN","Math","floor","clientWidth","max","min","checkCellHeights","rows","heightInitialized","offsetParent","clearCellHeight","calcHeight","setCellHeight","getLeftOffset","offset","offsetLeft","ceil","getBoundingClientRect","Promise","resolve","reject","cellCount","deregisterColumn","generateCell","findColumnIndex","_nextVisibleColumn","getColumnByIndex","_prevVisibleColumn","fitToData","setTo","error","assign","addColumn","then","defaultOptions","Helpers","static","box","window","pageYOffset","documentElement","clientTop","pageXOffset","clientLeft","obj","clone","list","objectProto","__proto__","arrayProto","Array","isArray","match","copy","subject","findIndex","item","unshift","deepClone","OptionsList","msgType","registeredDefaults","register","option","userOptions","debugInvalidOptions","hasOwnProperty","Renderer","elementVertical","elementHorizontal","tableElement","verticalFillMode","initialize","clearRows","clearColumns","reinitializeColumnWidths","renderRows","renderColumns","rerenderRows","callback","update","blockRedraw","renderRowCells","rerenderRowCells","scrollColumns","dir","scrollRows","resize","scrollToRow","scrollToRowNearestTop","visibleRows","includingBuffer","getDisplayRows","styleRow","rowEl","remove","clear","render","rerender","scrollToRowPosition","position","ifVisible","rowIndex","scrollToRowIfVisible","elVisible","elOffset","scrollHeight","scrollTop","offsetTop","BasicHorizontal","VirtualDomHorizontal","leftCol","rightCol","scrollLeft","vDomScrollPosLeft","vDomScrollPosRight","vDomPadLeft","vDomPadRight","fitDataColAvg","windowBuffer","initialized","isFitData","compatibilityCheck","layoutCheck","vertScrollListen","startsWith","clearVisRowCache","dataChange","scroll","calcWindowBuffer","buffer","columnsByIndex","old","cols","colPos","config","frozen","leftPos","rightPos","fitDataCheck","vdomHoz","paddingLeft","paddingRight","reinitChanged","reinitializeRows","initializeRow","reinitializeRow","deinitialize","change","generateCells","colEnd","col","getVisibleRows","otherRows","getRows","filter","includes","diff","abs","addColRight","removeColLeft","addColLeft","removeColRight","colPositionAdjust","start","end","changes","working","getCell","insertBefore","nextSibling","fitDataColActualWidthCheck","ex","message","newWidth","widthDiff","frozenColumns","leftColumns","appendCell","rightColumns","ColumnManager","blockHozScrollEvent","headersElement","contentsElement","columnsByField","defaultColumnOptions","redrawBlockUpdate","renderer","initializeRenderer","createHeadersElement","createHeaderContentsElement","createHeaderElement","scrollHorizontal","padVerticalScrollbar","rtl","marginLeft","marginRight","renderClass","renderers","virtual","RendererVirtualDomHorizontal","basic","RendererBasicHorizontal","renderHorizontal","headerVisible","getContentsElement","generateColumnsFromRowData","sorter","definitions","autoColumnsDefinitions","find","setColumns","_addColumn","_reIndexColumns","redraw","before","nextToColumn","colEl","topColumn","parentIndex","nextEl","adjustTableSize","HTMLElement","getColumnByField","getColumnsByFieldRoot","root","matches","getFirstVisibleColumn","getRealColumns","getDefinitions","active","getDefinitionTree","getComponents","structured","from","moveColumnActual","reinitialize","_moveColumnInArray","updateRows","toIndex","fromIndex","adjust","scrollToColumnPosition","scrollToColumnIfVisible","scrollWidth","getFlexBaseWidth","totalWidth","fixedWidth","colWidth","restoreRedraw","resetScroll","footerManager","RowComponent","_row","transform","getPosition","watchPosition","moveToRow","updateData","normalizeHeight","reformat","getNextRow","nextRow","getPrevRow","prevRow","Row","manualHeight","outerHeight","positionWatchers","created","setData","create","detachElement","deleteCells","rowFormatter","deinitializeHeight","children","maxHeight","rowHeight","resizableRows","updatedData","newRowData","tempData","JSON","parse","attrname","findCell","nextDisplayRow","prevDisplayRow","toRow","findRow","moveRowActual","refreshActiveData","deleteActual","detachModules","deleteRow","wipe","isDisplayed","setPosition","getGroup","group","BasicVertical","visibility","onlyGroupHeaders","rowTop","VirtualDomVertical","vDomRowHeight","vDomTop","vDomBottom","vDomScrollPosTop","vDomScrollPosBottom","vDomTopPad","vDomBottomPad","vDomMaxRenderChain","vDomWindowBuffer","vDomWindowMinTotalRows","vDomWindowMinMarginRows","vDomTopNewRows","vDomBottomNewRows","paddingBottom","_virtualRenderFill","topRow","topOffset","_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","scrollbarWidth","initializePlaceholder","getTableElement","leftDir","topDir","_positionPlaceholder","getRowFromDataObject","getRowFromPosition","renderInPosition","pagination","_setDataActual","reRenderInPosition","autoColumns","_wipeElements","destroy","allIndex","activeIndex","setActiveRows","displayRowIterator","displayIndex","regenerateRowPositions","addRow","pos","addRowActual","addRows","refreshDisplayOnly","findAddRowPos","reverse","_clearPlaceholder","addRowPos","chainResult","moveRow","moveRowInArray","clearData","getRowIndex","findRowIndex","getDisplayRowIndex","rowOnly","getDataCount","registerDataPipelineHandler","handler","priority","sort","a","b","registerDisplayPipelineHandler","skipStage","stage","cascadeOrder","destroyed","refreshPipelines","renderTable","layoutColumnsOnNewData","resetDisplayRows","setDisplayRows","viewable","scrollBarCheck","RendererVirtualDomVertical","RendererBasicVertical","renderVertical","getRenderMode","_clearTable","renderEmptyScroll","initialHeight","otherHeight","external","tableWidth","browser","event","createEvent","initEvent","dispatchEvent","Event","FooterManager","containerElement","createContainerElement","initializeElement","footerElement","querySelector","append","activate","prepend","deactivate","InteractionManager","abortClasses","previousTargets","listeners","componentMap","pseudoTrackers","subscriber","pseudoTracking","buildListenerMap","bindSubscriptionWatchers","listenerMap","listener","components","bindPseudoEvents","pseudoMouseEnter","pseudoMouseLeave","leaveList","linkedKeys","links","values","comp","subscriptionChanged","clearWatchers","added","updateEventListeners","track","removeEventListener","path","composedPath","targets","findTargets","bindComponents","triggerEvents","elTargets","targetMatches","previousTarget","closest","ComponentFunctionBinder","bindings","funcName","debugInvalidComponentFuncs","DataLoader","requestOrder","loading","params","replace","requestNo","alertLoader","mapParams","dataSendParams","response","objectInvert","dataReceiveParams","rowData","clearAlert","catch","alertError","setTimeout","dataLoaderErrorTimeout","finally","map","blockActiveLoad","alertManager","alert","dataLoaderLoading","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","blurEventsBound","renderedCallback","hideable","blurEvent","escEvent","_escapeCheck","destroyBinding","tableDestroyed","popupContainer","_checkContainerIsParent","body","renderCallback","containerEventCoords","touch","MouseEvent","x","touches","pageX","y","pageY","parentOffset","elementPositionCoords","containerOffset","origin","parentEl","coords","_fitToScreen","hideOnBlur","keyCode","blockHide","restoreHide","Module","_handler","registerTableOption","registerColumnOption","registerTableFunction","func","initGuard","registerComponentFunction","registerDataHandler","registerDisplayHandler","lookupIndex","refreshData","footerAppend","footerPrepend","footerRemove","popup","menuEl","menuContainer","content","forced","responsiveLayout","modExists","fitData","fitDataFill","fitDataGeneral","fitDataTable","fitDataStretch","colsWidth","gap","lastCol","responsive","fitColumns","flexColWidth","overflowWidth","flexWidth","flexGrowUnits","flexColumns","fixedShrinkColumns","flexShrinkUnits","gapFill","calcWidth","scaleColumns","freeSpace","shrinkCols","oversizeCols","oversizeSpace","remainingSpace","nextColWidth","remainingFlexGrowUnits","changeUnits","undersizeCols","calcGrow","widthGrow","calcShrink","widthShrink","Layout","mode","modes","dataChanged","moduleName","defaultModes","Localize","locale","lang","langList","langs","headerFilterPlaceholder","setHeaderFilterPlaceholder","installLang","setLocale","getLang","default","headerFilters","_setLangProp","desiredLocale","navigator","language","toLowerCase","prefix","traverseLang","trans","prop","_executeBindings","pathArray","_getLangElement","level","rootPath","binding","groups","items","page_size","page_title","first","first_title","last","last_title","prev","prev_title","next","next_title","all","counter","showing","of","pages","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","originalElement","initializeCoreSystems","_create","_clearObjectPointers","_mapDeprecatedFunctionality","debugEventsExternal","debugEventsInternal","InteractionMonitor","_clearSelection","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","replaceData","responses","addData","updateOrAddData","newRows","foundRows","updateOrAddRow","updateRow","fromRow","getRowPosition","getColumnDefinitions","showColumn","hideColumn","toggleColumn","deleteColumn","updateColumnDefinition","fromColumn","on","off","plugin","required","debugDeprecation","rowFormatterPrint","rowFormatterClipboard","rowFormatterHtmlOutput","Accessor","allowedTypes","initializeColumn","transformRow","accessor","charAt","toUpperCase","lookupAccessor","accessors","rowComponent","colComponent","generateParamsList","serializeParams","encoded","encodeURIComponent","join","url","method","json","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","ok","status","statusText","defaultContentTypeFormatters","Clipboard","pasteParser","pasteAction","customSelection","rowRange","blocked","clipboard","clipboardCopyRowRange","plain","html","preventDefault","clipboardCopyFormatter","export","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","insert","headerFindSuccess","columnMap","CalcComponent","avg","calcParams","precision","reduce","sum","Number","toFixed","parseFloat","String","count","ColumnCalcs","topCalcs","botCalcs","genColumn","topElement","botElement","botRow","topInitialized","botInitialized","recalcAfterBlock","cellValueChanged","initializeColumnCheck","rowsUpdated","recalcActiveRows","recalcActiveRowsRefresh","tableRedraw","adjustForScrollbar","getResults","userRecalc","recalc","blockCheck","groupBy","recalcRowGroup","dataTreeStartExpanded","dataTree","recalcAll","topCalc","bottomCalc","columnCalcs","topCalcParams","botCalcParams","bottomCalcParams","calculations","initializeTopRow","botCalc","initializeBottomRow","removeCalcs","reinitializeCalcs","rowsToData","generateRow","recalcGroup","groupRows","getRowGroup","getChildGroups","generateRowData","generateTopRow","generateBottomRow","dataTreeChildColumnCalcs","open","getFilteredTreeChildren","disable","enable","format","formatter","getFormatter","paramKey","hasTopCalcs","hasBottomCalcs","getGroups","getGroupResults","groupObj","subGroups","getSubGroups","subGroupResults","subgroup","defaultCalculations","DataTree","indent","collapseEl","expandEl","branchEl","elementField","startOpen","collapseRow","expandRow","toggleRow","getTreeParent","getRowChildren","addTreeChildRow","isRowExpanded","dummyEl","dataTreeChildField","dataTreeChildIndent","dataTreeBranchElement","dataTreeCollapseElement","tabIndex","dataTreeExpandElement","layoutRow","rowDelete","rowDataChanged","columnMoving","initializeElementField","tableRedrawing","reinitializeRowChildren","firstCol","dataTreeElementColumn","getTreeChildren","redrawNeeded","childArray","controlEl","generateControlElement","cloneNode","getPropertyValue","oldControl","getChildren","allChildren","generateChildren","dataTreeFilter","dataTreeSort","sub","childData","childRow","getTreeParentRoot","childIndex","findChildIndex","recurse","getChildField","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","compression","compress","generateSheet","merges","worksheet","s","c","r","j","Date","sheet_add_aoa","encode_range","SheetNames","Sheets","sheetOnly","sheets","sheet","intercept","buf","ArrayBuffer","view","Uint8Array","charCodeAt","s2ab","write","bookType","bookSST","Download","mimeType","Blob","deprecatedOptionsCheck","download","downloadToTab","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","ctrlKey","metaKey","maskAutoFill","defaultDownloaders","Edit","editor","onRendered","success","cancel","editorParams","_initializeParams","displayItems","currentItems","focusedItem","input","_createInputElement","listEl","_createListElement","initialValues","isFilter","filterTimeout","filtered","typing","listIteration","lastAction","filterTerm","actions","_deprecatedOptionsCheck","_initializeValue","_onRendered","listItemFormatter","sortValuesList","searchFunc","searchingPlaceholder","defaultValue","multiselect","headerFilterInitialListGen","cellEl","clickStop","preventScroll","_preventPopupBlur","_preventBlur","_inputKeyDown","_setListWidth","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","_filter","clearTimeout","_filterList","_resolveValue","_clearChoices","_keyUp","_keyDown","_keySide","_keyEnter","_keyEsc","_keyHomeEnd","_keySelectLetter","_keyAutoCompLetter","stopImmediatePropagation","_focusItem","_chooseItem","_cancel","_scrollToValue","character","fromCharCode","label","scrollIntoView","behavior","block","inline","_generateOptions","_sortOptions","_buildList","_showList","isInteger","_filterOptions","iteration","_ajaxRequest","_uniqueColumnValues","valuesLookupField","_addPlaceholder","responseValues","_parseList","_clearList","term","urlBuilder","inputValues","entries","_parseListItem","_parseListGroup","itemParams","selected","original","_defaultSortFunction","_sortGroup","as","bs","a1","b1","L","rx","rd","emptyAlign","isFinite","_defaultFilterFunc","_filterItem","_buildItem","itemFormatter","_groupClick","_itemClick","_styleItem","startVis","blur","cellValue","search","onChange","selectContents","textarea","vertNav","whiteSpace","heightNow","shiftKey","shiftEnterSubmit","selectionStart","number","step","blurFunc","date","inputFormat","DT","DateTime","luxon","convertDate","isDateTime","fromISO","fromFormat","toFormat","time","newDatetime","datetime","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","rowEditableCheck","cancelEdit","keybindingNavigateNext","newRow","edited","allowEdit","nextCell","findPrevEditableCell","findNextEditableCell","prevCell","editable","getCurrentCell","clearEditor","cellEditCancelled","contains","button","focusCellNoEvent","forceEdit","focusScrollAdjust","leftEdge","rightEdge","leftMargin","rightMargin","cellEditor","rendered","cellClick","cellEditing","validationMode","editIndex","defaultEditors","ExportRow","ExportColumn","Export","cloneTableStyle","colVisProp","getHtml","columnHeaders","headersToExportRows","generateColumnGroupHeaders","bodyToExportRows","rowLookup","generateTable","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","color","fromStyle","filterVal","rowVal","filterParams","regex","RegExp","like","keywords","separator","keyword","matchAll","starts","ends","endsWith","in","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","initialFilter","setFilter","initialHeaderFilter","refreshFilter","addFilter","removeFilter","clearFilter","clearHeaderFilter","headerFilter","filterType","tagType","attrType","filterChangeCheck","prevSuccess","emptyFunc","headerFilterFunc","filters","headerFilterFuncParams","fieldVal","colVal","trackChanges","generateHeaderFilterElement","filterElement","editorElement","typingTimer","searchTrigger","onRenderedCallback","headerElement","headerFilterEmptyCheck","headerFilterParams","headerFilterLiveFilterDelay","hasAttribute","headerFilterLiveFilter","hasChanged","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","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","initializationMode","layoutCell","reinitializeColumns","blockLayout","unblockLayout","edge","frozenCheck","layoutCalcRows","layoutGroupCalcs","groupList","layoutColumnPosition","allCells","leftParents","marginValue","getColGroupParentElement","_calcSpace","FrozenRows","freezeRow","unfreezeRow","isRowFrozen","detachRow","frozenRows","initializeRows","rowType","isFrozen","styleRows","GroupComponent","groupManager","getParentGroup","toggleVisibility","Group","oldGroup","hasSubGroups","groupIDLookups","_addRowToGroup","_addRow","elementContents","arrowElement","createElements","addBindings","createValueGroups","elementsOnly","arrow","movableRows","initializeGroupHeader","allowedValues","_createGroup","groupToggleElement","groupID","groupKey","headerGenerator","insertRow","conformRowData","generateGroupHeaderContents","updateGroupRows","scrollHeader","removeRow","groupValues","removeGroup","getHeadersAndRows","_visSet","groupClosedShowCalcs","getPath","childNodes","GroupRows","displayHandler","setGroupBy","setGroupValues","setGroupStartOpen","setGroupHeader","userGetGroups","userGetGroupedData","rowGetGroup","_blockRedrawing","_restore_redrawing","groupUpdateOnCellEdit","cellUpdated","reassignRowToGroup","configureGroupSetup","rowDeleting","scrollHeaders","rowMoving","rowAddingIndex","rowSample","virtualRenderFill","groupStartOpen","langValue","lookupFunc","prevValue","assignRowToGroup","getGroupedData","toGroup","fromGroup","generateGroups","groupComponents","pullGroupListData","groupListData","rowCount","headerContent","countGroups","oldGroups","createGroup","assignRowToExistingGroup","newGroupNeeded","oldRowGroup","oldGroupPath","newGroupPath","getExpectedPath","every","groupPath","groupId","checkBasicModeGroupHeaderWidth","History","history","clearComponentHistory","rowDeleted","rowAdded","rowMoved","undo","redo","getHistoryUndoSize","getHistoryRedoSize","posFrom","posTo","newValue","undoers","redoers","_rebindRow","oldRow","cellEdit","rowAdd","rowMove","HtmlTableImport","fieldIndex","hasIndex","tableElementCheck","parseTable","_extractOptions","_extractHeaders","_generateBlankHeaders","optionsArr","attrib","_attribValue","_findCol","exists","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","rowMouseDown","rowMouseUp","rowTap","rowDblTap","rowTapHold","cellDblClick","cellContext","cellMouseEnter","cellMouseLeave","cellMouseOver","cellMouseOut","cellMouseMove","cellMouseDown","cellMouseUp","cellTap","cellDblTap","cellTapHold","headerClick","headerDblClick","headerContext","headerMouseEnter","headerMouseLeave","headerMouseOver","headerMouseOut","headerMouseMove","headerMouseDown","headerMouseUp","headerTap","headerDblTap","headerTapHold","groupClick","groupDblClick","groupContext","groupMouseEnter","groupMouseLeave","groupMouseOver","groupMouseOut","groupMouseMove","groupMouseDown","groupMouseUp","groupTap","groupDblTap","groupTapHold","subscribers","touchSubscribers","columnSubscribers","touchWatchers","tap","tapDbl","tapHold","initializeExternalEvents","cellContentsSelectionFixer","selectNode","subscribeTouchEvents","unsubscribeTouchEvents","handleTouch","noTouch","watchers","componentObj","Keybindings","watchKeys","pressedKeys","keyupBinding","keydownBinding","keybindings","mergedBindings","mapBindings","bindEvents","clearBindings","mapBinding","symbolsList","ctrl","meta","code","checkBinding","navPrev","navNext","navUp","navDown","scrollPageUp","scrollPageDown","scrollToStart","scrollToEnd","copyToClipboard","keyBlock","newPos","scrollMax","navLeft","navRight","Menu","nestedMenuBlock","currentComponent","rootPopup","initializeRowWatchers","initializeGroupWatchers","rowContextMenu","loadMenuEvent","rowClickMenu","rowDblClickMenu","groupContextMenu","groupClickMenu","groupDblClickMenu","headerContextMenu","loadMenuTableColumnEvent","headerClickMenu","headerDblClickMenu","headerMenu","initializeColumnHeaderMenu","contextMenu","loadMenuTableCellEvent","clickMenu","dblClickMenu","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","_unbindMouseMove","movingCells","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","elementRowDrop","connectionTables","dropEvent","tabulatorElementDropEvent","connect","disconnect","dropComplete","sender","movableRowsSender","senders","movableRowsReceiver","receivers","fromTable","toTable","Mutator","enabled","transformCell","mutateLink","lookupMutator","mutators","mutatorEdit","linkCell","pageSize","currentRow","currentPage","totalRows","totalPages","showingEl","valueEl","ofEl","totalEl","rowsEl","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","paginationCounter","pageCounters","hidden","pageSelectLabel","paginationCounterHolder","paginationElement","paginationCounterElement","paginationInitialPage","paginationButtonCount","setMaxRows","trigger","_setPageCounter","_setPageButtons","leftSize","rightSize","_generatePageButton","actualStartRow","actualRowPageSize","actualRows","last_page","last_row","progressiveLoadDelay","footer","defaultPageCounters","local","id","localStorage","getItem","cookie","cookiePos","setItem","expireDate","setDate","getDate","toUTCString","Persistence","defWatcherBlock","readFunc","writeFunc","localStorageTest","testKey","removeItem","persistence","retrievedData","persistenceMode","persistenceID","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","_componentPopupCall","loadPopupEvent","rowContextPopup","rowClickPopup","rowDblClickPopup","groupContextPopup","groupClickPopup","groupDblClickPopup","headerContextPopup","loadPopupTableColumnEvent","headerClickPopup","headerDblClickPopup","headerPopup","initializeColumnHeaderPopup","contextPopup","loadPopupTableCellEvent","clickPopup","dblClickPopup","headerPopupEl","headerPopupIcon","loadPopup","contentsEl","Print","manualBlock","beforeprintEventHandler","afterprintEventHandler","printAsHtml","replaceTable","cleanup","printFullscreen","printConfig","printStyled","printRowRange","footerContent","scrollX","scrollY","footerEl","tableEl","printHeader","printFooter","printFormatter","ReactiveData","origFuncs","currentVersion","unblock","watchRow","watchData","unwatchData","version","enumerable","configurable","arg","pop","startRow","oldRows","writable","watchKey","watchTreeChildren","childField","rebuildTree","unwatchRow","ResizeColumns","startColumn","startWidth","latestX","initialNextColumn","layoutColumnHeader","initializeEventWatchers","layoutCellHandles","deInitializeComponent","resizeHandle","columnLayoutUpdated","deInitializeColumn","columnWidthUpdated","resizable","reinitializeColumn","frozenColumnOffset","frozenOffset","handleEl","nearestColumn","_checkResizability","handleDown","_mouseDown","oldWidth","parentElement","mouseMove","blockedBefore","blockedAfter","startDiff","moveDiff","resizableColumnFit","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","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","checkRowSelectability","lastClickedRowIdx","rowIdx","fromRowIdx","toRowIdx","toggledRows","toggledRow","selectableCheck","_selectRow","rowMatch","rowInfo","selectableRollingSelection","checkboxEl","dataTreeSelectPropagate","childRowSelection","selectedRow","aRow","bRow","alignEmptyValues","decimalSeparator","thousandSeparator","string","localeCompare","boolean","calc","d","alphanum","Sort","sortList","userSetSort","clearSort","sortMode","remoteSortParams","setSort","refreshSort","arrowEl","sorterParams","startingDir","headerSortStartingDir","headerSortTristate","headerSort","headerSortClickElement","headerSortElement","setColumnHeaderSortIcon","columnHeaderSortMulti","newSortList","findSorter","sortOrderReverse","sortListActual","rowComponents","clearColumnHeaders","sortObj","setColumnHeader","_sortItems","sortEl","sorterCount","sortItem","_sortRow","el1Comp","el2Comp","el1","el2","defaultSorters","Tooltip","tooltipSubscriber","headerSubscriber","timeout","popupInstance","headerTooltip","mousemoveCheck","mouseoutCheck","tooltip","clearPopup","loadTooltip","tooltipDelay","parameters","float","numeric","minLength","maxLength","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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"}