{"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/TableRegistry.js","../../src/js/core/Module.js","../../src/js/modules/Layout/defaults/modes/fitDataGeneral.js","../../src/js/modules/Layout/defaults/modes.js","../../src/js/modules/Layout/defaults/modes/fitData.js","../../src/js/modules/Layout/defaults/modes/fitDataStretch.js","../../src/js/modules/Layout/defaults/modes/fitColumns.js","../../src/js/modules/Layout/Layout.js","../../src/js/modules/Localize/Localize.js","../../src/js/modules/Localize/defaults/langs.js","../../src/js/modules/Comms/Comms.js","../../src/js/core/tools/ModuleBinder.js","../../src/js/core/Tabulator.js","../../src/js/core/defaults/options.js","../../src/js/modules/Accessor/Accessor.js","../../src/js/modules/Accessor/defaults/accessors.js","../../src/js/modules/Ajax/defaults/urlGenerator.js","../../src/js/modules/Ajax/defaults/contentTypeFormatters.js","../../src/js/modules/Ajax/Ajax.js","../../src/js/modules/Ajax/defaults/config.js","../../src/js/modules/Ajax/defaults/loaderPromise.js","../../src/js/modules/Clipboard/Clipboard.js","../../src/js/modules/Clipboard/defaults/pasteActions.js","../../src/js/modules/Clipboard/defaults/pasteParsers.js","../../src/js/modules/ColumnCalcs/CalcComponent.js","../../src/js/modules/ColumnCalcs/defaults/calculations.js","../../src/js/modules/ColumnCalcs/ColumnCalcs.js","../../src/js/modules/DataTree/DataTree.js","../../src/js/modules/Download/defaults/downloaders.js","../../src/js/modules/Download/defaults/downloaders/csv.js","../../src/js/modules/Download/defaults/downloaders/json.js","../../src/js/modules/Download/defaults/downloaders/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/defaults/editors.js","../../src/js/modules/Edit/defaults/editors/input.js","../../src/js/modules/Edit/defaults/editors/textarea.js","../../src/js/modules/Edit/defaults/editors/number.js","../../src/js/modules/Edit/defaults/editors/range.js","../../src/js/modules/Edit/defaults/editors/select.js","../../src/js/modules/Edit/defaults/editors/autocomplete.js","../../src/js/modules/Edit/defaults/editors/star.js","../../src/js/modules/Edit/defaults/editors/progress.js","../../src/js/modules/Edit/defaults/editors/tickCross.js","../../src/js/modules/Edit/Edit.js","../../src/js/modules/Export/ExportRow.js","../../src/js/modules/Export/ExportColumn.js","../../src/js/modules/Export/Export.js","../../src/js/modules/Filter/defaults/filters.js","../../src/js/modules/Filter/Filter.js","../../src/js/modules/Format/defaults/formatters.js","../../src/js/modules/Format/defaults/formatters/plaintext.js","../../src/js/modules/Format/defaults/formatters/html.js","../../src/js/modules/Format/defaults/formatters/textarea.js","../../src/js/modules/Format/defaults/formatters/money.js","../../src/js/modules/Format/defaults/formatters/link.js","../../src/js/modules/Format/defaults/formatters/image.js","../../src/js/modules/Format/defaults/formatters/tickCross.js","../../src/js/modules/Format/defaults/formatters/datetime.js","../../src/js/modules/Format/defaults/formatters/datetimediff.js","../../src/js/modules/Format/defaults/formatters/lookup.js","../../src/js/modules/Format/defaults/formatters/star.js","../../src/js/modules/Format/defaults/formatters/traffic.js","../../src/js/modules/Format/defaults/formatters/progress.js","../../src/js/modules/Format/defaults/formatters/color.js","../../src/js/modules/Format/defaults/formatters/buttonTick.js","../../src/js/modules/Format/defaults/formatters/buttonCross.js","../../src/js/modules/Format/defaults/formatters/rownum.js","../../src/js/modules/Format/defaults/formatters/handle.js","../../src/js/modules/Format/defaults/formatters/responsiveCollapse.js","../../src/js/modules/Format/defaults/formatters/rowSelection.js","../../src/js/modules/Format/Format.js","../../src/js/modules/FrozenColumns/FrozenColumns.js","../../src/js/modules/FrozenRows/FrozenRows.js","../../src/js/modules/GroupRows/GroupComponent.js","../../src/js/modules/GroupRows/Group.js","../../src/js/modules/GroupRows/GroupRows.js","../../src/js/modules/History/History.js","../../src/js/modules/History/defaults/undoers.js","../../src/js/modules/History/defaults/redoers.js","../../src/js/modules/HtmlTableImport/HtmlTableImport.js","../../src/js/modules/Import/defaults/importers.js","../../src/js/modules/Import/defaults/importers/csv.js","../../src/js/modules/Import/defaults/importers/json.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/Print/Print.js","../../src/js/modules/ReactiveData/ReactiveData.js","../../src/js/modules/ResizeColumns/ResizeColumns.js","../../src/js/modules/ResizeRows/ResizeRows.js","../../src/js/modules/ResizeTable/ResizeTable.js","../../src/js/modules/ResponsiveLayout/ResponsiveLayout.js","../../src/js/modules/SelectRow/SelectRow.js","../../src/js/modules/Sort/defaults/sorters/datetime.js","../../src/js/modules/Sort/defaults/sorters.js","../../src/js/modules/Sort/defaults/sorters/number.js","../../src/js/modules/Sort/defaults/sorters/string.js","../../src/js/modules/Sort/defaults/sorters/date.js","../../src/js/modules/Sort/defaults/sorters/time.js","../../src/js/modules/Sort/defaults/sorters/boolean.js","../../src/js/modules/Sort/defaults/sorters/array.js","../../src/js/modules/Sort/defaults/sorters/exists.js","../../src/js/modules/Sort/defaults/sorters/alphanum.js","../../src/js/modules/Sort/Sort.js","../../src/js/modules/Validate/defaults/validators.js","../../src/js/modules/Validate/Validate.js","../../src/js/core/TabulatorFull.js"],"sourcesContent":["export default class CoreFeature{\r\n\r\n\tconstructor(table){\r\n\t\tthis.table = table;\r\n\t}\r\n\r\n\t//////////////////////////////////////////\r\n\t/////////////// DataLoad /////////////////\r\n\t//////////////////////////////////////////\r\n\r\n\treloadData(data, silent){\r\n\t\treturn this.table.dataLoader.load(data, undefined, undefined, undefined, silent);\r\n\t}\r\n\r\n\t//////////////////////////////////////////\r\n\t///////////// Localization ///////////////\r\n\t//////////////////////////////////////////\r\n\r\n\tlangText(){\r\n\t\treturn this.table.modules.localize.getText(...arguments);\r\n\t}\r\n\r\n\tlangBind(){\r\n\t\treturn this.table.modules.localize.bind(...arguments);\r\n\t}\r\n\r\n\tlangLocale(){\r\n\t\treturn this.table.modules.localize.getLocale(...arguments);\r\n\t}\r\n\r\n\r\n\t//////////////////////////////////////////\r\n\t////////// Inter Table Comms /////////////\r\n\t//////////////////////////////////////////\r\n\r\n\tcommsConnections(){\r\n\t\treturn this.table.modules.comms.getConnections(...arguments);\r\n\t}\r\n\r\n\tcommsSend(){\r\n\t\treturn this.table.modules.comms.send(...arguments);\r\n\t}\r\n\r\n\t//////////////////////////////////////////\r\n\t//////////////// Layout /////////////////\r\n\t//////////////////////////////////////////\r\n\r\n\tlayoutMode(){\r\n\t\treturn this.table.modules.layout.getMode();\r\n\t}\r\n\r\n\tlayoutRefresh(){\r\n\t\treturn this.table.modules.layout.layout();\r\n\t}\r\n\r\n\r\n\t//////////////////////////////////////////\r\n\t/////////////// Event Bus ////////////////\r\n\t//////////////////////////////////////////\r\n\r\n\tsubscribe(){\r\n\t\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\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.renderer.rerenderColumns(true);\r\n\r\n\t\treturn result;\r\n\t}\r\n}","export default {\r\n\t\"title\": undefined,\r\n\t\"field\": undefined,\r\n\t\"columns\": undefined,\r\n\t\"visible\": undefined,\r\n\t\"hozAlign\": undefined,\r\n\t\"vertAlign\": undefined,\r\n\t\"width\": undefined,\r\n\t\"minWidth\": 40,\r\n\t\"maxWidth\": undefined,\r\n\t\"maxInitialWidth\": undefined,\r\n\t\"tooltip\": undefined,\r\n\t\"cssClass\": undefined,\r\n\t\"variableHeight\": undefined,\r\n\t\"headerTooltip\": undefined,\r\n\t\"headerVertical\": undefined,\r\n\t\"headerHozAlign\": undefined,\r\n\t\"editableTitle\": undefined,\r\n}","//public cell object\r\nexport default class CellComponent {\r\n\r\n\tconstructor (cell){\r\n\t\tthis._cell = cell;\r\n\r\n\t\treturn new Proxy(this, {\r\n\t\t\tget: function(target, name, receiver) {\r\n\t\t\t\tif (typeof target[name] !== \"undefined\") {\r\n\t\t\t\t\treturn target[name];\r\n\t\t\t\t}else{\r\n\t\t\t\t\treturn target._cell.table.componentFunctionBinder.handle(\"cell\", target._cell, name)\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t})\r\n\t}\r\n\r\n\tgetValue(){\r\n\t\treturn this._cell.getValue();\r\n\t}\r\n\r\n\tgetOldValue(){\r\n\t\treturn this._cell.getOldValue();\r\n\t}\r\n\r\n\tgetInitialValue(){\r\n\t\treturn this._cell.initialValue;\r\n\t}\r\n\r\n\tgetElement(){\r\n\t\treturn this._cell.getElement();\r\n\t}\r\n\r\n\tgetRow(){\r\n\t\treturn this._cell.row.getComponent();\r\n\t}\r\n\r\n\tgetData(){\r\n\t\treturn this._cell.row.getData();\r\n\t}\r\n\r\n\tgetField(){\r\n\t\treturn this._cell.column.getField();\r\n\t}\r\n\r\n\tgetColumn(){\r\n\t\treturn this._cell.column.getComponent();\r\n\t}\r\n\r\n\tsetValue(value, mutate){\r\n\t\tif(typeof mutate == \"undefined\"){\r\n\t\t\tmutate = true;\r\n\t\t}\r\n\r\n\t\tthis._cell.setValue(value, mutate);\r\n\t}\r\n\r\n\trestoreOldValue(){\r\n\t\tthis._cell.setValueActual(this._cell.getOldValue());\r\n\t}\r\n\r\n\trestoreInitialValue(){\r\n\t\tthis._cell.setValueActual(this._cell.initialValue);\r\n\t}\r\n\r\n\tcheckHeight(){\r\n\t\tthis._cell.checkHeight();\r\n\t}\r\n\r\n\tgetTable(){\r\n\t\treturn this._cell.table;\r\n\t}\r\n\r\n\t_getSelf(){\r\n\t\treturn this._cell;\r\n\t}\r\n}","import CoreFeature from '../CoreFeature.js';\r\nimport CellComponent from './CellComponent.js';\r\n\r\nexport default class Cell extends CoreFeature{\r\n\tconstructor(column, row){\r\n\t\tsuper(column.table);\r\n\r\n\t\tthis.table = column.table;\r\n\t\tthis.column = column;\r\n\t\tthis.row = row;\r\n\t\tthis.element = null;\r\n\t\tthis.value = null;\r\n\t\tthis.initialValue;\r\n\t\tthis.oldValue = null;\r\n\t\tthis.modules = {};\r\n\r\n\t\tthis.height = null;\r\n\t\tthis.width = null;\r\n\t\tthis.minWidth = null;\r\n\r\n\t\tthis.component = null;\r\n\r\n\t\tthis.loaded = false; //track if the cell has been added to the DOM yet\r\n\r\n\t\tthis.build();\r\n\t}\r\n\r\n\t//////////////// Setup Functions /////////////////\r\n\t//generate element\r\n\tbuild(){\r\n\t\tthis.generateElement();\r\n\r\n\t\tthis.setWidth();\r\n\r\n\t\tthis._configureCell();\r\n\r\n\t\tthis.setValueActual(this.column.getFieldValue(this.row.data));\r\n\r\n\t\tthis.initialValue = this.value;\r\n\t}\r\n\r\n\tgenerateElement(){\r\n\t\tthis.element = document.createElement('div');\r\n\t\tthis.element.className = \"tabulator-cell\";\r\n\t\tthis.element.setAttribute(\"role\", \"gridcell\");\r\n\t\tthis.element = this.element;\r\n\t}\r\n\r\n\t_configureCell(){\r\n\t\tvar element = this.element,\r\n\t\tfield = this.column.getField(),\r\n\t\tvertAligns = {\r\n\t\t\ttop:\"flex-start\",\r\n\t\t\tbottom:\"flex-end\",\r\n\t\t\tmiddle:\"center\",\r\n\t\t},\r\n\t\thozAligns = {\r\n\t\t\tleft:\"flex-start\",\r\n\t\t\tright:\"flex-end\",\r\n\t\t\tcenter:\"center\",\r\n\t\t};\r\n\r\n\t\t//set text alignment\r\n\t\telement.style.textAlign = this.column.hozAlign;\r\n\r\n\t\tif(this.column.vertAlign){\r\n\t\t\telement.style.display = \"inline-flex\";\r\n\r\n\t\t\telement.style.alignItems = vertAligns[this.column.vertAlign] || \"\";\r\n\r\n\t\t\tif(this.column.hozAlign){\r\n\t\t\t\telement.style.justifyContent = hozAligns[this.column.hozAlign] || \"\";\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(field){\r\n\t\t\telement.setAttribute(\"tabulator-field\", field);\r\n\t\t}\r\n\r\n\t\t//add class to cell if needed\r\n\t\tif(this.column.definition.cssClass){\r\n\t\t\tvar classNames = this.column.definition.cssClass.split(\" \")\r\n\t\t\tclassNames.forEach((className) => {\r\n\t\t\t\telement.classList.add(className)\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\t//update tooltip on mouse enter\r\n\t\tif (this.table.options.tooltipGenerationMode === \"hover\"){\r\n\t\t\telement.addEventListener(\"mouseenter\", (e) => {\r\n\t\t\t\tthis._generateTooltip();\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tthis.dispatch(\"cell-init\", this);\r\n\r\n\t\t//hide cell if not visible\r\n\t\tif(!this.column.visible){\r\n\t\t\tthis.hide();\r\n\t\t}\r\n\t}\r\n\r\n\t//generate cell contents\r\n\t_generateContents(){\r\n\t\tvar val;\r\n\r\n\t\tval = this.chain(\"cell-format\", this, null, () => {\r\n\t\t\treturn this.element.innerHTML = this.value;\r\n\t\t});\r\n\r\n\t\tswitch(typeof val){\r\n\t\t\tcase \"object\":\r\n\t\t\tif(val instanceof Node){\r\n\r\n\t\t\t\t//clear previous cell contents\r\n\t\t\t\twhile(this.element.firstChild) this.element.removeChild(this.element.firstChild);\r\n\r\n\t\t\t\tthis.element.appendChild(val);\r\n\t\t\t}else{\r\n\t\t\t\tthis.element.innerHTML = \"\";\r\n\r\n\t\t\t\tif(val != null){\r\n\t\t\t\t\tconsole.warn(\"Format Error - Formatter has returned a type of object, the only valid formatter object return is an instance of Node, the formatter returned:\", val);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\t\t\tcase \"undefined\":\r\n\t\t\tcase \"null\":\r\n\t\t\tthis.element.innerHTML = \"\";\r\n\t\t\tbreak;\r\n\t\t\tdefault:\r\n\t\t\tthis.element.innerHTML = val;\r\n\t\t}\r\n\t}\r\n\r\n\tcellRendered(){\r\n\t\tthis.dispatch(\"cell-rendered\", this);\r\n\t}\r\n\r\n\t//generate tooltip text\r\n\t_generateTooltip(){\r\n\t\tvar tooltip = this.column.tooltip;\r\n\r\n\t\tif(tooltip){\r\n\t\t\tif(tooltip === true){\r\n\t\t\t\ttooltip = this.value;\r\n\t\t\t}else if(typeof(tooltip) == \"function\"){\r\n\t\t\t\ttooltip = tooltip(this.getComponent());\r\n\r\n\t\t\t\tif(tooltip === false){\r\n\t\t\t\t\ttooltip = \"\";\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif(typeof tooltip === \"undefined\"){\r\n\t\t\t\ttooltip = \"\";\r\n\t\t\t}\r\n\r\n\t\t\tthis.element.setAttribute(\"title\", tooltip);\r\n\t\t}else{\r\n\t\t\tthis.element.setAttribute(\"title\", \"\");\r\n\t\t}\r\n\t}\r\n\r\n\t//////////////////// Getters ////////////////////\r\n\tgetElement(containerOnly){\r\n\t\tif(!this.loaded){\r\n\t\t\tthis.loaded = true;\r\n\t\t\tif(!containerOnly){\r\n\t\t\t\tthis.layoutElement();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this.element;\r\n\t}\r\n\r\n\tgetValue(){\r\n\t\treturn this.value;\r\n\t}\r\n\r\n\tgetOldValue(){\r\n\t\treturn this.oldValue;\r\n\t}\r\n\r\n\t//////////////////// Actions ////////////////////\r\n\tsetValue(value, mutate){\r\n\t\tvar changed = this.setValueProcessData(value, mutate);\r\n\r\n\t\tif(changed){\r\n\t\t\tthis.dispatch(\"cell-value-updated\", this);\r\n\r\n\t\t\tthis.cellRendered();\r\n\r\n\t\t\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){\r\n\t\tvar changed = false;\r\n\r\n\t\tif(this.value !== value){\r\n\r\n\t\t\tchanged = true;\r\n\r\n\t\t\tif(mutate){\r\n\t\t\t\tvalue = this.chain(\"cell-value-changing\", [this, value], null, value);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.setValueActual(value);\r\n\r\n\t\tif(changed){\r\n\t\t\tthis.dispatch(\"cell-value-changed\", this);\r\n\t\t}\r\n\r\n\t\treturn changed;\r\n\t}\r\n\r\n\tsetValueActual(value){\r\n\t\tthis.oldValue = this.value;\r\n\r\n\t\tthis.value = value;\r\n\r\n\t\tthis.dispatch(\"cell-value-save-before\", this);\r\n\r\n\t\tthis.column.setFieldValue(this.row.data, value);\r\n\r\n\t\tthis.dispatch(\"cell-value-save-after\", this);\r\n\r\n\t\tif(this.loaded){\r\n\t\t\tthis.layoutElement();\r\n\t\t}\r\n\t}\r\n\r\n\tlayoutElement(){\r\n\t\tthis._generateContents();\r\n\t\tthis._generateTooltip();\r\n\r\n\t\tthis.dispatch(\"cell-layout\", this);\r\n\t}\r\n\r\n\tsetWidth(){\r\n\t\tthis.width = this.column.width;\r\n\t\tthis.element.style.width = this.column.widthStyled;\r\n\t}\r\n\r\n\tclearWidth(){\r\n\t\tthis.width = \"\";\r\n\t\tthis.element.style.width = \"\";\r\n\t}\r\n\r\n\tgetWidth(){\r\n\t\treturn this.width || this.element.offsetWidth;\r\n\t}\r\n\r\n\tsetMinWidth(){\r\n\t\tthis.minWidth = this.column.minWidth;\r\n\t\tthis.element.style.minWidth = this.column.minWidthStyled;\r\n\t}\r\n\r\n\tsetMaxWidth(){\r\n\t\tthis.maxWidth = this.column.maxWidth;\r\n\t\tthis.element.style.maxWidth = this.column.maxWidthStyled;\r\n\t}\r\n\r\n\tcheckHeight(){\r\n\t\t// var height = this.element.css(\"height\");\r\n\t\tthis.row.reinitializeHeight();\r\n\t}\r\n\r\n\tclearHeight(){\r\n\t\tthis.element.style.height = \"\";\r\n\t\tthis.height = null;\r\n\t}\r\n\r\n\tsetHeight(){\r\n\t\tthis.height = this.row.height;\r\n\t\tthis.element.style.height = this.row.heightStyled;\r\n\t}\r\n\r\n\tgetHeight(){\r\n\t\treturn this.height || this.element.offsetHeight;\r\n\t}\r\n\r\n\tshow(){\r\n\t\tthis.element.style.display = this.column.vertAlign ? \"inline-flex\" : \"\";\r\n\t}\r\n\r\n\thide(){\r\n\t\tthis.element.style.display = \"none\";\r\n\t}\r\n\r\n\tdelete(){\r\n\t\tthis.dispatch(\"cell-delete\", this);\r\n\r\n\t\tif(!this.table.rowManager.redrawBlock && this.element.parentNode){\r\n\t\t\tthis.element.parentNode.removeChild(this.element);\r\n\t\t}\r\n\r\n\t\tthis.element = false;\r\n\t\tthis.column.deleteCell(this);\r\n\t\tthis.row.deleteCell(this);\r\n\t\tthis.calcs = {};\r\n\t}\r\n\r\n\tgetIndex(){\r\n\t\treturn this.row.getCellIndex(this);\r\n\t}\r\n\r\n\t//////////////// Object Generation /////////////////\r\n\tgetComponent(){\r\n\t\tif(!this.component){\r\n\t\t\tthis.component = new CellComponent(this);\r\n\t\t}\r\n\r\n\t\treturn this.component;\r\n\t}\r\n}","import CoreFeature from '../CoreFeature.js';\r\nimport ColumnComponent from './ColumnComponent.js';\r\nimport defaultOptions from './defaults/options.js';\r\n\r\nimport Cell from '../cell/Cell.js';\r\n\r\nclass Column extends CoreFeature{\r\n\r\n\tconstructor(def, parent){\r\n\t\tsuper(parent.table);\r\n\r\n\t\tthis.definition = def; //column definition\r\n\t\tthis.parent = parent; //hold parent object\r\n\t\tthis.type = \"column\"; //type of element\r\n\t\tthis.columns = []; //child columns\r\n\t\tthis.cells = []; //cells bound to this column\r\n\t\tthis.element = this.createElement(); //column header element\r\n\t\tthis.contentElement = false;\r\n\t\tthis.titleHolderElement = false;\r\n\t\tthis.titleElement = false;\r\n\t\tthis.groupElement = this.createGroupElement(); //column group holder element\r\n\t\tthis.isGroup = false;\r\n\t\tthis.tooltip = false; //hold column tooltip\r\n\t\tthis.hozAlign = \"\"; //horizontal text alignment\r\n\t\tthis.vertAlign = \"\"; //vert text alignment\r\n\r\n\t\t//multi dimensional filed handling\r\n\t\tthis.field =\"\";\r\n\t\tthis.fieldStructure = \"\";\r\n\t\tthis.getFieldValue = \"\";\r\n\t\tthis.setFieldValue = \"\";\r\n\r\n\t\tthis.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 prestyled to improve render efficiency\r\n\t\tthis.maxWidth = null; //column maximum width\r\n\t\tthis.maxWidthStyled = \"\"; //column maximum prestyled to improve render efficiency\r\n\t\tthis.maxInitialWidth = null;\r\n\t\tthis.minWidth = null; //column minimum width\r\n\t\tthis.minWidthStyled = \"\"; //column minimum prestyled to improve render efficiency\r\n\t\tthis.widthFixed = false; //user has specified a width for this column\r\n\r\n\t\tthis.visible = true; //default visible state\r\n\r\n\t\tthis.component = null;\r\n\r\n\t\t//initialize column\r\n\t\tif(this.definition.columns){\r\n\r\n\t\t\tthis.isGroup = true;\r\n\r\n\t\t\tthis.definition.columns.forEach((def, i) => {\r\n\t\t\t\tvar newCol = new Column(def, this);\r\n\t\t\t\tthis.attachColumn(newCol);\r\n\t\t\t});\r\n\r\n\t\t\tthis.checkColumnVisibility();\r\n\t\t}else{\r\n\t\t\tparent.registerColumnField(this);\r\n\t\t}\r\n\r\n\t\tthis._initialize();\r\n\r\n\t\tthis.bindModuleColumns();\r\n\t}\r\n\r\n\tcreateElement (){\r\n\t\tvar el = document.createElement(\"div\");\r\n\r\n\t\tel.classList.add(\"tabulator-col\");\r\n\t\tel.setAttribute(\"role\", \"columnheader\");\r\n\t\tel.setAttribute(\"aria-sort\", \"none\");\r\n\r\n\t\treturn el;\r\n\t}\r\n\r\n\tcreateGroupElement (){\r\n\t\tvar el = document.createElement(\"div\");\r\n\r\n\t\tel.classList.add(\"tabulator-col-group-cols\");\r\n\r\n\t\treturn el;\r\n\t}\r\n\r\n\tmapDefinitions(){\r\n\t\tvar defaults = this.table.options.columnDefaults;\r\n\r\n\t\t//map columnDefaults onto column definitions\r\n\t\tif(defaults){\r\n\t\t\tfor(let key in defaults){\r\n\t\t\t\tif(typeof this.definition[key] === \"undefined\"){\r\n\t\t\t\t\tthis.definition[key] = defaults[key];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.definition = this.table.columnManager.optionsList.generate(Column.defaultOptionList, this.definition)\r\n\t}\r\n\r\n\tcheckDefinition(){\r\n\t\tObject.keys(this.definition).forEach((key) => {\r\n\t\t\tif(Column.defaultOptionList.indexOf(key) === -1){\r\n\t\t\t\tconsole.warn(\"Invalid column definition option in '\" + (this.field || this.definition.title) + \"' column:\", key)\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tsetField(field){\r\n\t\tthis.field = field;\r\n\t\tthis.fieldStructure = field ? (this.table.options.nestedFieldSeparator ? field.split(this.table.options.nestedFieldSeparator) : [field]) : [];\r\n\t\tthis.getFieldValue = this.fieldStructure.length > 1 ? this._getNestedData : this._getFlatData;\r\n\t\tthis.setFieldValue = this.fieldStructure.length > 1 ? this._setNestedData : this._setFlatData;\r\n\t}\r\n\r\n\t//register column position with column manager\r\n\tregisterColumnPosition(column){\r\n\t\tthis.parent.registerColumnPosition(column);\r\n\t}\r\n\r\n\t//register column position with column manager\r\n\tregisterColumnField(column){\r\n\t\tthis.parent.registerColumnField(column);\r\n\t}\r\n\r\n\t//trigger position registration\r\n\treRegisterPosition(){\r\n\t\tif(this.isGroup){\r\n\t\t\tthis.columns.forEach(function(column){\r\n\t\t\t\tcolumn.reRegisterPosition();\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tthis.registerColumnPosition(this);\r\n\t\t}\r\n\t}\r\n\r\n\t_mapDepricatedFunctionality(){\r\n\t\t//all previously deprecated functionality removed in the 5.0 release\r\n\t}\r\n\r\n\tsetTooltip(){\r\n\t\tvar def = this.definition;\r\n\r\n\t\t//set header tooltips\r\n\t\tvar tooltip = def.headerTooltip;\r\n\r\n\t\tif(tooltip){\r\n\t\t\tif(tooltip === true){\r\n\t\t\t\tif(def.field){\r\n\t\t\t\t\tthis.langBind(\"columns|\" + def.field, (value) => {\r\n\t\t\t\t\t\tthis.element.setAttribute(\"title\", value || def.title);\r\n\t\t\t\t\t});\r\n\t\t\t\t}else{\r\n\t\t\t\t\tthis.element.setAttribute(\"title\", def.title);\r\n\t\t\t\t}\r\n\r\n\t\t\t}else{\r\n\t\t\t\tif(typeof(tooltip) == \"function\"){\r\n\t\t\t\t\ttooltip = tooltip(this.getComponent());\r\n\r\n\t\t\t\t\tif(tooltip === false){\r\n\t\t\t\t\t\ttooltip = \"\";\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.element.setAttribute(\"title\", tooltip);\r\n\t\t\t}\r\n\r\n\t\t}else{\r\n\t\t\tthis.element.setAttribute(\"title\", \"\");\r\n\t\t}\r\n\t}\r\n\r\n\t//build header element\r\n\t_initialize(){\r\n\t\tvar def = this.definition;\r\n\r\n\t\twhile(this.element.firstChild) this.element.removeChild(this.element.firstChild);\r\n\r\n\t\tif(def.headerVertical){\r\n\t\t\tthis.element.classList.add(\"tabulator-col-vertical\");\r\n\r\n\t\t\tif(def.headerVertical === \"flip\"){\r\n\t\t\t\tthis.element.classList.add(\"tabulator-col-vertical-flip\");\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.contentElement = this._bindEvents();\r\n\r\n\t\tthis.contentElement = this._buildColumnHeaderContent();\r\n\r\n\t\tthis.element.appendChild(this.contentElement);\r\n\r\n\t\tif(this.isGroup){\r\n\t\t\tthis._buildGroupHeader();\r\n\t\t}else{\r\n\t\t\tthis._buildColumnHeader();\r\n\t\t}\r\n\r\n\t\tthis.setTooltip();\r\n\r\n\t\tthis.dispatch(\"column-init\", this);\r\n\r\n\t\t//update header tooltip on mouse enter\r\n\t\tthis.element.addEventListener(\"mouseenter\", (e) => {\r\n\t\t\tthis.setTooltip();\r\n\t\t});\r\n\t}\r\n\r\n\t_bindEvents(){\r\n\t\tvar def = this.definition,\r\n\t\tdblTap,\ttapHold, tap;\r\n\r\n\t\t//setup header click event bindings\r\n\t\tif(typeof(def.headerClick) == \"function\"){\r\n\t\t\tthis.element.addEventListener(\"click\", (e) => {def.headerClick(e, this.getComponent());});\r\n\t\t}\r\n\r\n\t\tif(typeof(def.headerDblClick) == \"function\"){\r\n\t\t\tthis.element.addEventListener(\"dblclick\", (e) => {def.headerDblClick(e, this.getComponent());});\r\n\t\t}\r\n\r\n\t\tif(typeof(def.headerContext) == \"function\"){\r\n\t\t\tthis.element.addEventListener(\"contextmenu\", (e) => {def.headerContext(e, this.getComponent());});\r\n\t\t}\r\n\r\n\t\t//setup header tap event bindings\r\n\t\tif(typeof(def.headerTap) == \"function\"){\r\n\t\t\ttap = false;\r\n\r\n\t\t\tthis.element.addEventListener(\"touchstart\", (e) => {\r\n\t\t\t\ttap = true;\r\n\t\t\t}, {passive: true});\r\n\r\n\t\t\tthis.element.addEventListener(\"touchend\", (e) => {\r\n\t\t\t\tif(tap){\r\n\t\t\t\t\tdef.headerTap(e, this.getComponent());\r\n\t\t\t\t}\r\n\r\n\t\t\t\ttap = false;\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif(typeof(def.headerDblTap) == \"function\"){\r\n\t\t\tdblTap = null;\r\n\r\n\t\t\tthis.element.addEventListener(\"touchend\", (e) => {\r\n\r\n\t\t\t\tif(dblTap){\r\n\t\t\t\t\tclearTimeout(dblTap);\r\n\t\t\t\t\tdblTap = null;\r\n\r\n\t\t\t\t\tdef.headerDblTap(e, this.getComponent());\r\n\t\t\t\t}else{\r\n\r\n\t\t\t\t\tdblTap = setTimeout(() => {\r\n\t\t\t\t\t\tclearTimeout(dblTap);\r\n\t\t\t\t\t\tdblTap = null;\r\n\t\t\t\t\t}, 300);\r\n\t\t\t\t}\r\n\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif(typeof(def.headerTapHold) == \"function\"){\r\n\t\t\ttapHold = null;\r\n\r\n\t\t\tthis.element.addEventListener(\"touchstart\", (e) => {\r\n\t\t\t\tclearTimeout(tapHold);\r\n\r\n\t\t\t\ttapHold = setTimeout(function(){\r\n\t\t\t\t\tclearTimeout(tapHold);\r\n\t\t\t\t\ttapHold = null;\r\n\t\t\t\t\ttap = false;\r\n\t\t\t\t\tdef.headerTapHold(e, this.getComponent());\r\n\t\t\t\t}, 1000);\r\n\r\n\t\t\t}, {passive: true});\r\n\r\n\t\t\tthis.element.addEventListener(\"touchend\", (e) => {\r\n\t\t\t\tclearTimeout(tapHold);\r\n\t\t\t\ttapHold = null;\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\t//build header element for header\r\n\t_buildColumnHeader(){\r\n\t\tvar def = this.definition,\r\n\t\ttable = this.table;\r\n\r\n\t\tthis.dispatch(\"column-layout\", this);\r\n\r\n\t\t//set column visibility\r\n\t\tif(typeof def.visible != \"undefined\"){\r\n\t\t\tif(def.visible){\r\n\t\t\t\tthis.show(true);\r\n\t\t\t}else{\r\n\t\t\t\tthis.hide(true);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//asign additional css classes to column header\r\n\t\tif(def.cssClass){\r\n\t\t\tvar classeNames = def.cssClass.split(\" \");\r\n\t\t\tclasseNames.forEach((className) => {\r\n\t\t\t\tthis.element.classList.add(className);\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif(def.field){\r\n\t\t\tthis.element.setAttribute(\"tabulator-field\", def.field);\r\n\t\t}\r\n\r\n\t\t//set min width if present\r\n\t\tthis.setMinWidth(parseInt(def.minWidth));\r\n\r\n\t\tif (def.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 tooltip if present\r\n\t\tthis.tooltip = this.definition.tooltip;\r\n\r\n\t\t//set orizontal text alignment\r\n\t\tthis.hozAlign = this.definition.hozAlign;\r\n\t\tthis.vertAlign = this.definition.vertAlign;\r\n\r\n\t\tthis.titleElement.style.textAlign = this.definition.headerHozAlign;\r\n\t}\r\n\r\n\t_buildColumnHeaderContent(){\r\n\t\tvar def = this.definition,\r\n\t\ttable = this.table;\r\n\r\n\t\tvar contentElement = document.createElement(\"div\");\r\n\t\tcontentElement.classList.add(\"tabulator-col-content\");\r\n\r\n\t\tthis.titleHolderElement = document.createElement(\"div\");\r\n\t\tthis.titleHolderElement.classList.add(\"tabulator-col-title-holder\");\r\n\r\n\t\tcontentElement.appendChild(this.titleHolderElement);\r\n\r\n\t\tthis.titleElement = this._buildColumnHeaderTitle();\r\n\r\n\t\tthis.titleHolderElement.appendChild(this.titleElement);\r\n\r\n\t\treturn contentElement;\r\n\t}\r\n\r\n\t//build title element of column\r\n\t_buildColumnHeaderTitle(){\r\n\t\tvar def = this.definition,\r\n\t\ttitle;\r\n\r\n\t\tvar titleHolderElement = document.createElement(\"div\");\r\n\t\ttitleHolderElement.classList.add(\"tabulator-col-title\");\r\n\r\n\t\tif(def.editableTitle){\r\n\t\t\tvar titleElement = document.createElement(\"input\");\r\n\t\t\ttitleElement.classList.add(\"tabulator-title-editor\");\r\n\r\n\t\t\ttitleElement.addEventListener(\"click\", (e) => {\r\n\t\t\t\te.stopPropagation();\r\n\t\t\t\ttitleElement.focus();\r\n\t\t\t});\r\n\r\n\t\t\ttitleElement.addEventListener(\"change\", () => {\r\n\t\t\t\tdef.title = titleElement.value;\r\n\t\t\t\tthis.dispatchExternal(\"columnTitleChanged\", this.getComponent());\r\n\t\t\t});\r\n\r\n\t\t\ttitleHolderElement.appendChild(titleElement);\r\n\r\n\t\t\tif(def.field){\r\n\t\t\t\tthis.langBind(\"columns|\" + def.field, (text) => {\r\n\t\t\t\t\ttitleElement.value = text || (def.title || \" \");\r\n\t\t\t\t});\r\n\t\t\t}else{\r\n\t\t\t\ttitleElement.value = def.title || \" \";\r\n\t\t\t}\r\n\r\n\t\t}else{\r\n\t\t\tif(def.field){\r\n\t\t\t\tthis.langBind(\"columns|\" + def.field, (text) => {\r\n\t\t\t\t\tthis._formatColumnHeaderTitle(titleHolderElement, text || (def.title || \" \"));\r\n\t\t\t\t});\r\n\t\t\t}else{\r\n\t\t\t\tthis._formatColumnHeaderTitle(titleHolderElement, def.title || \" \");\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn titleHolderElement;\r\n\t}\r\n\r\n\t_formatColumnHeaderTitle(el, title){\r\n\t\tvar contents = this.chain(\"column-format\", [this, title, el], null, () => {\r\n\t\t\treturn title;\r\n\t\t});\r\n\r\n\t\tswitch(typeof contents){\r\n\t\t\tcase \"object\":\r\n\t\t\tif(contents instanceof Node){\r\n\t\t\t\tel.appendChild(contents);\r\n\t\t\t}else{\r\n\t\t\t\tel.innerHTML = \"\";\r\n\t\t\t\tconsole.warn(\"Format Error - Title formatter has returned a type of object, the only valid formatter object return is an instance of Node, the formatter returned:\", contents);\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\t\t\tcase \"undefined\":\r\n\t\t\tcase \"null\":\r\n\t\t\tel.innerHTML = \"\";\r\n\t\t\tbreak;\r\n\t\t\tdefault:\r\n\t\t\tel.innerHTML = contents;\r\n\t\t}\r\n\t}\r\n\r\n\t//build header element for column group\r\n\t_buildGroupHeader(){\r\n\t\tthis.element.classList.add(\"tabulator-col-group\");\r\n\t\tthis.element.setAttribute(\"role\", \"columngroup\");\r\n\t\tthis.element.setAttribute(\"aria-title\", this.definition.title);\r\n\r\n\t\t//asign additional css classes to column header\r\n\t\tif(this.definition.cssClass){\r\n\t\t\tvar classeNames = this.definition.cssClass.split(\" \");\r\n\t\t\tclasseNames.forEach((className) => {\r\n\t\t\t\tthis.element.classList.add(className);\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tthis.titleElement.style.textAlign = this.definition.headerHozAlign;\r\n\r\n\t\tthis.element.appendChild(this.groupElement);\r\n\t}\r\n\r\n\t//flat field lookup\r\n\t_getFlatData(data){\r\n\t\treturn data[this.field];\r\n\t}\r\n\r\n\t//nested field lookup\r\n\t_getNestedData(data){\r\n\t\tvar dataObj = data,\r\n\t\tstructure = this.fieldStructure,\r\n\t\tlength = structure.length,\r\n\t\toutput;\r\n\r\n\t\tfor(let i = 0; i < length; i++){\r\n\r\n\t\t\tdataObj = dataObj[structure[i]];\r\n\r\n\t\t\toutput = dataObj;\r\n\r\n\t\t\tif(!dataObj){\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\t//flat field set\r\n\t_setFlatData(data, value){\r\n\t\tif(this.field){\r\n\t\t\tdata[this.field] = value;\r\n\t\t}\r\n\t}\r\n\r\n\t//nested field set\r\n\t_setNestedData(data, value){\r\n\t\tvar dataObj = data,\r\n\t\tstructure = this.fieldStructure,\r\n\t\tlength = structure.length;\r\n\r\n\t\tfor(let i = 0; i < length; i++){\r\n\r\n\t\t\tif(i == length -1){\r\n\t\t\t\tdataObj[structure[i]] = value;\r\n\t\t\t}else{\r\n\t\t\t\tif(!dataObj[structure[i]]){\r\n\t\t\t\t\tif(typeof value !== \"undefined\"){\r\n\t\t\t\t\t\tdataObj[structure[i]] = {};\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tdataObj = dataObj[structure[i]];\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//attach column to this group\r\n\tattachColumn(column){\r\n\t\tif(this.groupElement){\r\n\t\t\tthis.columns.push(column);\r\n\t\t\tthis.groupElement.appendChild(column.getElement());\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Column Warning - Column being attached to another column instead of column group\");\r\n\t\t}\r\n\t}\r\n\r\n\t//vertically align header in column\r\n\tverticalAlign(alignment, height){\r\n\r\n\t\t//calculate height of column header and group holder element\r\n\t\tvar parentHeight = this.parent.isGroup ? this.parent.getGroupElement().clientHeight : (height || this.parent.getHeadersElement().clientHeight);\r\n\t\t// var parentHeight = this.parent.isGroup ? this.parent.getGroupElement().clientHeight : this.parent.getHeadersElement().clientHeight;\r\n\r\n\t\tthis.element.style.height = parentHeight + \"px\";\r\n\r\n\t\tif(this.isGroup){\r\n\t\t\tthis.groupElement.style.minHeight = (parentHeight - this.contentElement.offsetHeight) + \"px\";\r\n\t\t}\r\n\r\n\t\t//vertically align cell contents\r\n\t\tif(!this.isGroup && alignment !== \"top\"){\r\n\t\t\tif(alignment === \"bottom\"){\r\n\t\t\t\tthis.element.style.paddingTop = (this.element.clientHeight - this.contentElement.offsetHeight) + \"px\";\r\n\t\t\t}else{\r\n\t\t\t\tthis.element.style.paddingTop = ((this.element.clientHeight - this.contentElement.offsetHeight) / 2) + \"px\";\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.columns.forEach(function(column){\r\n\t\t\tcolumn.verticalAlign(alignment);\r\n\t\t});\r\n\t}\r\n\r\n\t//clear vertical alignmenet\r\n\tclearVerticalAlign(){\r\n\t\tthis.element.style.paddingTop = \"\";\r\n\t\tthis.element.style.height = \"\";\r\n\t\tthis.element.style.minHeight = \"\";\r\n\t\tthis.groupElement.style.minHeight = \"\";\r\n\r\n\t\tthis.columns.forEach(function(column){\r\n\t\t\tcolumn.clearVerticalAlign();\r\n\t\t});\r\n\t}\r\n\r\n\tbindModuleColumns (){\r\n\t\t//check if rownum formatter is being used on a column\r\n\t\tif(this.definition.formatter == \"rownum\"){\r\n\t\t\tthis.table.rowManager.rowNumColumn = this;\r\n\t\t}\r\n\t}\r\n\r\n\t//// Retreive Column Information ////\r\n\t//return column header element\r\n\tgetElement(){\r\n\t\treturn this.element;\r\n\t}\r\n\r\n\t//return colunm group element\r\n\tgetGroupElement(){\r\n\t\treturn this.groupElement;\r\n\t}\r\n\r\n\t//return field name\r\n\tgetField(){\r\n\t\treturn this.field;\r\n\t}\r\n\r\n\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(){\r\n\t\treturn this.columns;\r\n\t}\r\n\r\n\t//return all columns in a group\r\n\tgetCells(){\r\n\t\treturn this.cells;\r\n\t}\r\n\r\n\t//retreive the top column in a group of columns\r\n\tgetTopColumn(){\r\n\t\tif(this.parent.isGroup){\r\n\t\t\treturn this.parent.getTopColumn();\r\n\t\t}else{\r\n\t\t\treturn this;\r\n\t\t}\r\n\t}\r\n\r\n\t//return column definition object\r\n\tgetDefinition(updateBranches){\r\n\t\tvar colDefs = [];\r\n\r\n\t\tif(this.isGroup && updateBranches){\r\n\t\t\tthis.columns.forEach(function(column){\r\n\t\t\t\tcolDefs.push(column.getDefinition(true));\r\n\t\t\t});\r\n\r\n\t\t\tthis.definition.columns = colDefs;\r\n\t\t}\r\n\r\n\t\treturn this.definition;\r\n\t}\r\n\r\n\t//////////////////// Actions ////////////////////\r\n\tcheckColumnVisibility(){\r\n\t\tvar visible = false;\r\n\r\n\t\tthis.columns.forEach(function(column){\r\n\t\t\tif(column.visible){\r\n\t\t\t\tvisible = true;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tif(visible){\r\n\t\t\tthis.show();\r\n\t\t\tthis.dispatchExternal(\"columnVisibilityChanged\", this.getComponent(), false);\r\n\t\t}else{\r\n\t\t\tthis.hide();\r\n\t\t}\r\n\t}\r\n\r\n\t//show column\r\n\tshow(silent, responsiveToggle){\r\n\t\tif(!this.visible){\r\n\t\t\tthis.visible = true;\r\n\r\n\t\t\tthis.element.style.display = \"\";\r\n\r\n\t\t\tif(this.parent.isGroup){\r\n\t\t\t\tthis.parent.checkColumnVisibility();\r\n\t\t\t}\r\n\r\n\t\t\tthis.cells.forEach(function(cell){\r\n\t\t\t\tcell.show();\r\n\t\t\t});\r\n\r\n\t\t\tif(!this.isGroup && this.width === null){\r\n\t\t\t\tthis.reinitializeWidth();\r\n\t\t\t}\r\n\r\n\t\t\tthis.table.columnManager.verticalAlignHeaders();\r\n\r\n\t\t\tthis.dispatch(\"column-show\", this, responsiveToggle);\r\n\r\n\t\t\tif(!silent){\r\n\t\t\t\tthis.dispatchExternal(\"columnVisibilityChanged\", this.getComponent(), true);\r\n\t\t\t}\r\n\r\n\t\t\tif(this.parent.isGroup){\r\n\t\t\t\tthis.parent.matchChildWidths();\r\n\t\t\t}\r\n\r\n\t\t\tif(!this.silent){\r\n\t\t\t\tthis.table.columnManager.renderer.rerenderColumns();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//hide column\r\n\thide(silent, responsiveToggle){\r\n\t\tif(this.visible){\r\n\t\t\tthis.visible = false;\r\n\r\n\t\t\tthis.element.style.display = \"none\";\r\n\r\n\t\t\tthis.table.columnManager.verticalAlignHeaders();\r\n\r\n\t\t\tif(this.parent.isGroup){\r\n\t\t\t\tthis.parent.checkColumnVisibility();\r\n\t\t\t}\r\n\r\n\t\t\tthis.cells.forEach(function(cell){\r\n\t\t\t\tcell.hide();\r\n\t\t\t});\r\n\r\n\t\t\tthis.dispatch(\"column-hide\", this, 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.renderer.rerenderColumns();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tmatchChildWidths(){\r\n\t\tvar childWidth = 0;\r\n\r\n\t\tif(this.contentElement && this.columns.length){\r\n\t\t\tthis.columns.forEach(function(column){\r\n\t\t\t\tif(column.visible){\r\n\t\t\t\t\tchildWidth += column.getWidth();\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tthis.contentElement.style.maxWidth = (childWidth - 1) + \"px\";\r\n\r\n\t\t\tif(this.parent.isGroup){\r\n\t\t\t\tthis.parent.matchChildWidths();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tremoveChild(child){\r\n\t\tvar index = this.columns.indexOf(child);\r\n\r\n\t\tif(index > -1){\r\n\t\t\tthis.columns.splice(index, 1);\r\n\t\t}\r\n\r\n\t\tif(!this.columns.length){\r\n\t\t\tthis.delete();\r\n\t\t}\r\n\t}\r\n\r\n\tsetWidth(width){\r\n\t\tthis.widthFixed = true;\r\n\t\tthis.setWidthActual(width);\r\n\t}\r\n\r\n\tsetWidthActual(width){\r\n\t\tif(isNaN(width)){\r\n\t\t\twidth = Math.floor((this.table.element.clientWidth/100) * parseInt(width));\r\n\t\t}\r\n\r\n\t\twidth = Math.max(this.minWidth, width);\r\n\r\n\t\tif(this.maxWidth){\r\n\t\t\twidth = Math.min(this.maxWidth, width);\r\n\t\t}\r\n\r\n\t\tthis.width = width;\r\n\t\tthis.widthStyled = width ? width + \"px\" : \"\";\r\n\r\n\t\tthis.element.style.width = this.widthStyled;\r\n\r\n\t\tif(!this.isGroup){\r\n\t\t\tthis.cells.forEach(function(cell){\r\n\t\t\t\tcell.setWidth();\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif(this.parent.isGroup){\r\n\t\t\tthis.parent.matchChildWidths();\r\n\t\t}\r\n\r\n\t\tthis.dispatch(\"column-width\", this);\r\n\t}\r\n\r\n\tcheckCellHeights(){\r\n\t\tvar rows = [];\r\n\r\n\t\tthis.cells.forEach(function(cell){\r\n\t\t\tif(cell.row.heightInitialized){\r\n\t\t\t\tif(cell.row.getElement().offsetParent !== null){\r\n\t\t\t\t\trows.push(cell.row);\r\n\t\t\t\t\tcell.row.clearCellHeight();\r\n\t\t\t\t}else{\r\n\t\t\t\t\tcell.row.heightInitialized = false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\trows.forEach(function(row){\r\n\t\t\trow.calcHeight();\r\n\t\t});\r\n\r\n\t\trows.forEach(function(row){\r\n\t\t\trow.setCellHeight();\r\n\t\t});\r\n\t}\r\n\r\n\tgetWidth(){\r\n\t\tvar width = 0;\r\n\r\n\t\tif(this.isGroup){\r\n\t\t\tthis.columns.forEach(function(column){\r\n\t\t\t\tif(column.visible){\r\n\t\t\t\t\twidth += column.getWidth();\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\twidth = this.width;\r\n\t\t}\r\n\r\n\t\treturn width;\r\n\t}\r\n\r\n\tgetHeight(){\r\n\t\treturn Math.ceil(this.element.getBoundingClientRect().height);\r\n\t}\r\n\r\n\tsetMinWidth(minWidth){\r\n\t\tthis.minWidth = minWidth;\r\n\t\tthis.minWidthStyled = minWidth ? minWidth + \"px\" : \"\";\r\n\r\n\t\tthis.element.style.minWidth = this.minWidthStyled;\r\n\r\n\t\tthis.cells.forEach(function(cell){\r\n\t\t\tcell.setMinWidth();\r\n\t\t});\r\n\t}\r\n\r\n\tsetMaxWidth(maxWidth){\r\n\t\tthis.maxWidth = maxWidth;\r\n\t\tthis.maxWidthStyled = maxWidth ? maxWidth + \"px\" : \"\";\r\n\r\n\t\tthis.element.style.maxWidth = this.maxWidthStyled;\r\n\r\n\t\tthis.cells.forEach(function(cell){\r\n\t\t\tcell.setMaxWidth();\r\n\t\t});\r\n\t}\r\n\r\n\tdelete(){\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tvar index;\r\n\r\n\t\t\tif(this.isGroup){\r\n\t\t\t\tthis.columns.forEach(function(column){\r\n\t\t\t\t\tcolumn.delete();\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\tthis.dispatch(\"column-delete\", this);\r\n\r\n\t\t\tvar cellCount = this.cells.length;\r\n\r\n\t\t\tfor(let i = 0; i < cellCount; i++){\r\n\t\t\t\tthis.cells[0].delete();\r\n\t\t\t}\r\n\r\n\t\t\tif(this.element.parentNode){\r\n\t\t\t\tthis.element.parentNode.removeChild(this.element);\r\n\t\t\t}\r\n\r\n\t\t\tthis.element = false;\r\n\t\t\tthis.contentElement = false;\r\n\t\t\tthis.titleElement = false;\r\n\t\t\tthis.groupElement = false;\r\n\r\n\t\t\tif(this.parent.isGroup){\r\n\t\t\t\tthis.parent.removeChild(this);\r\n\t\t\t}\r\n\r\n\t\t\tthis.table.columnManager.deregisterColumn(this);\r\n\r\n\t\t\tthis.table.columnManager.renderer.rerenderColumns(true);\r\n\r\n\t\t\tresolve();\r\n\t\t});\r\n\t}\r\n\r\n\tcolumnRendered(){\r\n\t\tif(this.titleFormatterRendered){\r\n\t\t\tthis.titleFormatterRendered();\r\n\t\t}\r\n\t}\r\n\r\n\t//////////////// Cell Management /////////////////\r\n\t//generate cell for this column\r\n\tgenerateCell(row){\r\n\t\tvar cell = new Cell(this, row);\r\n\r\n\t\tthis.cells.push(cell);\r\n\r\n\t\treturn cell;\r\n\t}\r\n\r\n\tnextColumn(){\r\n\t\tvar index = this.table.columnManager.findColumnIndex(this);\r\n\t\treturn index > -1 ? this._nextVisibleColumn(index + 1) : false;\r\n\t}\r\n\r\n\t_nextVisibleColumn(index){\r\n\t\tvar column = this.table.columnManager.getColumnByIndex(index);\r\n\t\treturn !column || column.visible ? column : this._nextVisibleColumn(index + 1);\r\n\t}\r\n\r\n\tprevColumn(){\r\n\t\tvar index = this.table.columnManager.findColumnIndex(this);\r\n\t\treturn index > -1 ? this._prevVisibleColumn(index - 1) : false;\r\n\t}\r\n\r\n\t_prevVisibleColumn(index){\r\n\t\tvar column = this.table.columnManager.getColumnByIndex(index);\r\n\t\treturn !column || column.visible ? column : this._prevVisibleColumn(index - 1);\r\n\t}\r\n\r\n\treinitializeWidth(force){\r\n\t\tthis.widthFixed = false;\r\n\r\n\t\t//set width if present\r\n\t\tif(typeof this.definition.width !== \"undefined\" && !force){\r\n\t\t\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.then((column) => {\r\n\r\n\t\t\t\t\tif(definition.field == this.field){\r\n\t\t\t\t\t\tthis.field = false; //cleair field name to prevent deletion of duplicate column from arrays\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\treturn this.delete()\r\n\t\t\t\t\t.then(() => {\r\n\t\t\t\t\t\treturn column.getComponent();\r\n\t\t\t\t\t});\r\n\r\n\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;","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 (var key in userOptions){\r\n\t\t\t\tif(!output.hasOwnProperty(key)){\r\n\t\t\t\t\tconsole.warn(\"Invalid \" + this.msgType + \" option:\", key)\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfor (var key in output){\r\n\t\t\tif(key in userOptions){\r\n\t\t\t\toutput[key] = userOptions[key];\r\n\t\t\t}else{\r\n\t\t\t\tif(Array.isArray(output[key])){\r\n\t\t\t\t\toutput[key] = Object.assign([], output[key]);\r\n\t\t\t\t}else if(typeof output[key] === \"object\" && output[key] !== null){\r\n\t\t\t\t\toutput[key] = Object.assign({}, output[key]);\r\n\t\t\t\t}else if (typeof output[key] === \"undefined\"){\r\n\t\t\t\t\tdelete output[key];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn output;\r\n\t}\r\n}","import CoreFeature from '../CoreFeature.js';\r\nimport Helpers from '../tools/Helpers.js';\r\n\r\nexport default class Renderer extends CoreFeature{\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.elementVertical = table.rowManager.element;\r\n\t\tthis.elementHorizontal = table.columnManager.element;\r\n\t\tthis.tableElement = table.rowManager.tableElement;\r\n\r\n\t\tthis.verticalFillMode = \"fit\"; // used by row manager to determin how to size the render area (\"fit\" - fits container to the contents, \"fill\" - fills the contianer without resizing it)\r\n\t}\r\n\r\n\r\n\t///////////////////////////////////\r\n\t/////// Internal Bindings /////////\r\n\t///////////////////////////////////\r\n\r\n\tinitialize(){\r\n\t\t//initialize core functionality\r\n\t}\r\n\r\n\tclearRows(){\r\n\t\t//clear down existing rows layout\r\n\t}\r\n\r\n\tclearColumns(){\r\n\t\t//clear down existing columns layout\r\n\t}\r\n\r\n\r\n\treinitializeColumnWidths(columns){\r\n\t\t//resize columns to fit data\r\n\t}\r\n\r\n\r\n\trenderRows(){\r\n\t\t//render rows from a clean slate\r\n\t}\r\n\r\n\trenderColumns(){\r\n\t\t//render columns from a clean slate\r\n\t}\r\n\r\n\trerenderRows(callback){\r\n\t\t// rerender rows and keep position\r\n\t\tif(callback){\r\n\t\t\tcallback();\r\n\t\t}\r\n\t}\r\n\r\n\trerenderColumns(update, blockRedraw){\r\n\t\t//rerender columns\r\n\t}\r\n\r\n\trenderRowCells(row){\r\n\t\t//render the cells in a row\r\n\t}\r\n\r\n\trerenderRowCells(row, force){\r\n\t\t//rerender the cells in a row\r\n\t}\r\n\r\n\tscrollColumns(left, dir){\r\n\t\t//handle horizontal scrolling\r\n\t}\r\n\r\n\tscrollRows(top, dir){\r\n\t\t//handle vertical scolling\r\n\t}\r\n\r\n\tresize(){\r\n\t\t//container has rezied, carry out any needed recalculations (DO NOT RERENDER IN THIS FUNCTION)\r\n\t}\r\n\r\n\tscrollToRow(row){\r\n\t\t//scroll to a specific row\r\n\t}\r\n\r\n\tscrollToRowNearestTop(row){\r\n\t\t//determine weather the row is nearest the top or bottom of the table, retur true for top or false for bottom\r\n\t}\r\n\r\n\tvisibleRows(includingBuffer){\r\n\t\t//return the visible rows\r\n\t\treturn [];\r\n\t}\r\n\r\n\t///////////////////////////////////\r\n\t//////// Helper Functions /////////\r\n\t///////////////////////////////////\r\n\r\n\trows(){\r\n\t\treturn this.table.rowManager.getDisplayRows();\r\n\t}\r\n\r\n\tstyleRow(row, index){\r\n\t\tvar rowEl = row.getElement();\r\n\r\n\t\tif(index % 2){\r\n\t\t\trowEl.classList.add(\"tabulator-row-even\");\r\n\t\t\trowEl.classList.remove(\"tabulator-row-odd\");\r\n\t\t}else{\r\n\t\t\trowEl.classList.add(\"tabulator-row-odd\");\r\n\t\t\trowEl.classList.remove(\"tabulator-row-even\");\r\n\t\t}\r\n\t}\r\n\r\n\t///////////////////////////////////\r\n\t/////// External Triggers /////////\r\n\t/////// (DO NOT OVERRIDE) /////////\r\n\t///////////////////////////////////\r\n\r\n\tclear(){\r\n\t\t//clear down existing layout\r\n\t\tthis.clearRows();\r\n\t\tthis.clearColumns();\r\n\t}\r\n\r\n\trender(){\r\n\t\t//render from a clean slate\r\n\t\tthis.renderRows();\r\n\t\tthis.renderColumns();\r\n\t}\r\n\r\n\trerender(callback){\r\n\t\t// rerender and keep position\r\n\t\tthis.rerenderRows();\r\n\t\tthis.rerenderColumns();\r\n\t}\r\n\r\n\tscrollToRowPosition(row, position, ifVisible){\r\n\t\tvar rowIndex = this.rows().indexOf(row),\r\n\t\trowEl = row.getElement(),\r\n\t\toffset = 0;\r\n\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tif(rowIndex > -1){\r\n\r\n\t\t\t\tif(typeof ifVisible === \"undefined\"){\r\n\t\t\t\t\tifVisible = this.table.options.scrollToRowIfVisible;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//check row visibility\r\n\t\t\t\tif(!ifVisible){\r\n\t\t\t\t\tif(Helpers.elVisible(rowEl)){\r\n\t\t\t\t\t\toffset = Helpers.elOffset(rowEl).top - Helpers.elOffset(this.elementVertical).top;\r\n\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\tif(this.elementVertical.scrollHeight - this.elementVertical.scrollTop == this.elementVertical.clientHeight){\r\n\t\t\t\t\t\tthis.elementVertical.scrollTop = this.elementVertical.scrollTop + (rowEl.offsetTop - this.elementVertical.scrollTop) - ((this.elementVertical.scrollHeight - rowEl.offsetTop) / 2);\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tthis.elementVertical.scrollTop = this.elementVertical.scrollTop - (this.elementVertical.clientHeight / 2);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase \"bottom\":\r\n\r\n\t\t\t\t\tif(this.elementVertical.scrollHeight - this.elementVertical.scrollTop == this.elementVertical.clientHeight){\r\n\t\t\t\t\t\tthis.elementVertical.scrollTop = this.elementVertical.scrollTop - (this.elementVertical.scrollHeight - rowEl.offsetTop) + rowEl.offsetHeight;\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tthis.elementVertical.scrollTop = this.elementVertical.scrollTop - this.elementVertical.clientHeight + rowEl.offsetHeight;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tresolve();\r\n\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Scroll Error - Row not visible\");\r\n\t\t\t\treject(\"Scroll Error - Row not visible\");\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n}","import Renderer from '../Renderer.js';\r\nimport Helpers from '../../tools/Helpers.js';\r\n\r\nexport default class BaiscHorizontal extends Renderer{\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\t}\r\n\r\n\trenderRowCells(row){\r\n\t\trow.cells.forEach((cell) => {\r\n\t\t\trow.element.appendChild(cell.getElement());\r\n\t\t\tcell.cellRendered();\r\n\t\t});\r\n\t}\r\n\r\n\treinitializeColumnWidths(columns){\r\n\t\tcolumns.forEach(function(column){\r\n\t\t\tcolumn.reinitializeWidth();\r\n\t\t});\r\n\t}\r\n}","import Renderer from '../Renderer.js';\r\nimport Helpers from '../../tools/Helpers.js';\r\n\r\nexport default class VirtualDomHorizontal extends Renderer{\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\t\t\r\n\t\tthis.leftCol = 0;\r\n\t\tthis.rightCol = 0;\r\n\t\tthis.scrollLeft = 0;\r\n\t\t\r\n\t\tthis.vDomScrollPosLeft = 0;\r\n\t\tthis.vDomScrollPosRight = 0;\r\n\t\t\r\n\t\tthis.vDomPadLeft = 0;\r\n\t\tthis.vDomPadRight = 0;\r\n\t\t\r\n\t\tthis.fitDataColAvg = 0;\r\n\t\t\r\n\t\tthis.windowBuffer = 200; //pixel margin to make column visible before it is shown on screen\r\n\t\t\r\n\t\tthis.visibleRows = null;\r\n\r\n\t\tthis.initialized = false;\r\n\t\tthis.isFitData = false;\r\n\t\t\r\n\t\tthis.columns = [];\r\n\t}\r\n\t\r\n\tinitialize(){\r\n\t\tthis.compatibilityCheck();\r\n\t\tthis.layoutCheck();\r\n\t\tthis.vertScrollListen();\r\n\t}\r\n\t\r\n\tcompatibilityCheck(){\r\n\t\tvar columns = this.options(\"columns\"),\r\n\t\tfrozen = false,\r\n\t\tok = true;\r\n\t\t\r\n\t\tif(this.options(\"layout\") == \"fitDataTable\"){\r\n\t\t\tconsole.warn(\"Horizontal Virtual DOM is not compatible with fitDataTable layout mode\");\r\n\t\t\tok = false;\r\n\t\t}\r\n\t\t\r\n\t\tif(this.options(\"responsiveLayout\")){\r\n\t\t\tconsole.warn(\"Horizontal Virtual DOM is not compatible with responsive columns\");\r\n\t\t\tok = false;\r\n\t\t}\r\n\t\t\r\n\t\tif(this.options(\"rtl\")){\r\n\t\t\tconsole.warn(\"Horizontal Virtual DOM is not currently compatible with RTL text direction\");\r\n\t\t\tok = false;\r\n\t\t}\r\n\t\t\r\n\t\tif(columns){\r\n\t\t\tfrozen = columns.find((col) => {\r\n\t\t\t\treturn col.frozen;\r\n\t\t\t});\r\n\t\t\t\r\n\t\t\tif(frozen){\r\n\t\t\t\tconsole.warn(\"Horizontal Virtual DOM is not compatible with frozen columns\");\r\n\t\t\t\tok = false;\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\t// if(!ok){\r\n\t\t// \toptions.virtualDomHoz = false;\r\n\t\t// }\r\n\t\t\r\n\t\treturn ok;\r\n\t}\r\n\t\r\n\tlayoutCheck(){\r\n\t\tthis.isFitData = this.options(\"layout\").startsWith('fitData');\r\n\t}\r\n\r\n\tvertScrollListen(){\r\n\t\tthis.subscribe(\"scroll-vertical\", this.clearVisRowCache.bind(this));\r\n\t\tthis.subscribe(\"data-refreshed\", this.clearVisRowCache.bind(this));\r\n\t}\r\n\r\n\tclearVisRowCache(){\r\n\t\tthis.visibleRows = null;\r\n\t}\r\n\t\r\n\t//////////////////////////////////////\r\n\t///////// Public Functions ///////////\r\n\t//////////////////////////////////////\r\n\t\r\n\trenderColumns(row, force){\r\n\t\tthis.dataChange();\r\n\t}\r\n\r\n\t\r\n\tscrollColumns(left, dir){\r\n\t\tif(this.scrollLeft != left){\r\n\t\t\tthis.scrollLeft = left;\r\n\t\t\t\r\n\t\t\tthis.scroll(left - (this.vDomScrollPosLeft + this.windowBuffer));\r\n\t\t}\r\n\t}\r\n\t\r\n\tcalcWindowBuffer(){\r\n\t\tvar buffer = this.elementVertical.clientWidth;\r\n\t\t\r\n\t\tthis.table.columnManager.columnsByIndex.forEach((column) => {\r\n\t\t\tif(column.visible){\r\n\t\t\t\tvar width = column.getWidth();\r\n\t\t\t\t\r\n\t\t\t\tif(width > buffer){\r\n\t\t\t\t\tbuffer = width;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\t\t\r\n\t\tthis.windowBuffer = buffer * 2;\r\n\t}\r\n\t\r\n\trerenderColumns(update, blockRedraw){\t\t\r\n\t\tvar old = {\r\n\t\t\tcols:this.columns,\r\n\t\t\tleftCol:this.leftCol,\r\n\t\t\trightCol:this.rightCol,\r\n\t\t},\r\n\t\tcolPos = 0;\r\n\t\t\r\n\t\t\r\n\t\tif(update && !this.initialized){\r\n\t\t\treturn;\r\n\t\t}\r\n\t\t\r\n\t\tthis.clear();\r\n\t\t\r\n\t\tthis.calcWindowBuffer();\r\n\t\t\r\n\t\tthis.scrollLeft = this.elementVertical.scrollLeft;\r\n\t\t\r\n\t\tthis.vDomScrollPosLeft = this.scrollLeft - this.windowBuffer;\r\n\t\tthis.vDomScrollPosRight = this.scrollLeft + this.elementVertical.clientWidth + this.windowBuffer;\r\n\t\t\r\n\t\tthis.table.columnManager.columnsByIndex.forEach((column) => {\r\n\t\t\tvar config = {};\r\n\t\t\t\r\n\t\t\tif(column.visible){\r\n\t\t\t\tvar width = column.getWidth();\r\n\t\t\t\t\r\n\t\t\t\tconfig.leftPos = colPos;\r\n\t\t\t\tconfig.rightPos = colPos + width;\r\n\t\t\t\t\r\n\t\t\t\tconfig.width = width;\r\n\t\t\t\t\r\n\t\t\t\tif (this.isFitData) {\r\n\t\t\t\t\tconfig.fitDataCheck = column.modules.vdomHoz ? column.modules.vdomHoz.fitDataCheck : true;\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\tif((colPos + width > this.vDomScrollPosLeft) && (colPos < this.vDomScrollPosRight)){\r\n\t\t\t\t\t//column is visible\r\n\t\t\t\t\t\r\n\t\t\t\t\tif(this.leftCol == -1){\r\n\t\t\t\t\t\tthis.leftCol = this.columns.length;\r\n\t\t\t\t\t\tthis.vDomPadLeft = colPos;\r\n\t\t\t\t\t}\r\n\t\t\t\t\t\r\n\t\t\t\t\tthis.rightCol = this.columns.length;\r\n\t\t\t\t}else{\r\n\t\t\t\t\t// column is hidden\r\n\t\t\t\t\tif(this.leftCol !== -1){\r\n\t\t\t\t\t\tthis.vDomPadRight += width;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\tthis.columns.push(column);\r\n\t\t\t\t\r\n\t\t\t\tcolumn.modules.vdomHoz = config;\r\n\t\t\t\t\r\n\t\t\t\tcolPos += width;\r\n\t\t\t}\r\n\t\t});\r\n\t\t\r\n\t\tthis.tableElement.style.paddingLeft = this.vDomPadLeft + \"px\";\r\n\t\tthis.tableElement.style.paddingRight = this.vDomPadRight + \"px\";\r\n\t\t\r\n\t\tthis.initialized = true;\r\n\t\t\r\n\t\tif(!blockRedraw){\r\n\t\t\tif(!update || this.reinitChanged(old)){\r\n\t\t\t\tthis.reinitializeRows();\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\tthis.elementVertical.scrollLeft = this.scrollLeft;\r\n\t}\r\n\t\r\n\trenderRowCells(row){\r\n\t\tif(this.initialized){\r\n\t\t\tthis.initializeRow(row);\r\n\t\t}else{\r\n\t\t\trow.cells.forEach((cell) => {\r\n\t\t\t\trow.element.appendChild(cell.getElement());\r\n\t\t\t\tcell.cellRendered();\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\t\r\n\trerenderRowCells(row, force){\r\n\t\tthis.reinitializeRow(row, force);\r\n\t}\r\n\t\r\n\treinitializeColumnWidths(columns){\r\n\t\tfor(let i = this.leftCol; i <= this.rightCol; i++){\r\n\t\t\tthis.columns[i].reinitializeWidth();\r\n\t\t}\r\n\t}\r\n\t\r\n\t//////////////////////////////////////\r\n\t//////// Internal Rendering //////////\r\n\t//////////////////////////////////////\r\n\t\r\n\tdeinitialize(){\r\n\t\tthis.initialized = false;\r\n\t}\r\n\t\r\n\tclear(){\r\n\t\tthis.columns = [];\r\n\t\t\r\n\t\tthis.leftCol = -1;\r\n\t\tthis.rightCol = 0;\r\n\t\t\r\n\t\tthis.vDomScrollPosLeft = 0;\r\n\t\tthis.vDomScrollPosRight = 0;\r\n\t\tthis.vDomPadLeft = 0;\r\n\t\tthis.vDomPadRight = 0;\r\n\t}\r\n\t\r\n\tdataChange(){\r\n\t\tvar change = false,\r\n\t\tcollsWidth = 0,\r\n\t\tcolEnd = 0,\r\n\t\tgroup, row, 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){\r\n\t\t\t\tif(change && this.table.rowManager.getDisplayRows().length){\r\n\t\t\t\t\t\r\n\t\t\t\t\tthis.vDomScrollPosRight = this.scrollLeft + this.elementVertical.clientWidth + this.windowBuffer;\r\n\t\t\t\t\t\r\n\t\t\t\t\tvar row = this.chain(\"rows-sample\", [1], [], () => {\r\n\t\t\t\t\t\treturn this.table.rowManager.getDisplayRows();\r\n\t\t\t\t\t})[0];\r\n\t\t\t\t\t\r\n\t\t\t\t\tif(row){\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\trowEl = row.getElement();\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\trow.generateCells();\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\tthis.tableElement.appendChild(rowEl);\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\tfor(var colEnd = 0; colEnd < row.cells.length; colEnd++){\r\n\t\t\t\t\t\t\tlet cell = row.cells[colEnd];\r\n\t\t\t\t\t\t\trowEl.appendChild(cell.getElement());\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tcell.column.reinitializeWidth();\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tcollsWidth += cell.column.getWidth();\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t// if(collsWidth > this.vDomScrollPosRight){\r\n\t\t\t\t\t\t\t// \tbreak;\r\n\t\t\t\t\t\t\t// }\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\trowEl.parentNode.removeChild(rowEl);\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t// this.fitDataColAvg = Math.floor(collsWidth / (colEnd + 1));\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t// for(colEnd; colEnd < this.table.columnManager.columnsByIndex.length; colEnd++){\r\n\t\t\t\t\t\t// \tthis.table.columnManager.columnsByIndex[colEnd].setWidth(this.fitDataColAvg);\r\n\t\t\t\t\t\t// }\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\tthis.rerenderColumns(false, true);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tif(this.options(\"layout\") === \"fitColumns\"){\r\n\t\t\t\tthis.layoutRefresh();\r\n\t\t\t\tthis.rerenderColumns(false, true);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\treinitChanged(old){\r\n\t\tvar match = true;\r\n\t\t\r\n\t\tif(old.cols.length !== this.columns.length || old.leftCol !== this.leftCol || old.rightCol !== this.rightCol){\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\t\r\n\t\told.cols.forEach((col, i) => {\r\n\t\t\tif(col !== this.columns[i]){\r\n\t\t\t\tmatch = false;\r\n\t\t\t}\r\n\t\t});\r\n\t\t\r\n\t\treturn !match;\r\n\t}\r\n\t\r\n\treinitializeRows(){\r\n\t\tvar rows = this.getVisibleRows();\r\n\t\trows.forEach((row) => {\r\n\t\t\tthis.reinitializeRow(row, true);\r\n\t\t});\r\n\t}\r\n\t\r\n\tgetVisibleRows(){\r\n\t\tif (!this.visibleRows){\r\n\t\t\tthis.visibleRows = this.table.rowManager.getVisibleRows();\r\n\t\t}\r\n\r\n\t\treturn this.visibleRows;\t\r\n\t}\r\n\t\r\n\tscroll(diff){\r\n\t\tthis.vDomScrollPosLeft += diff;\r\n\t\tthis.vDomScrollPosRight += diff;\r\n\r\n\t\tif(Math.abs(diff) > (this.windowBuffer / 2)){\r\n\t\t\tthis.rerenderColumns();\r\n\t\t}else{\r\n\t\t\tif(diff > 0){\r\n\t\t\t\t//scroll right\r\n\t\t\t\tthis.addColRight();\r\n\t\t\t\tthis.removeColLeft();\r\n\t\t\t}else{\r\n\t\t\t\t//scroll left\r\n\t\t\t\tthis.addColLeft();\r\n\t\t\t\tthis.removeColRight();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\tcolPositionAdjust (start, end, diff){\r\n\t\tfor(let i = start; i < end; i++){\r\n\t\t\tlet column = this.columns[i];\r\n\t\t\t\r\n\t\t\tcolumn.modules.vdomHoz.leftPos += diff;\r\n\t\t\tcolumn.modules.vdomHoz.rightPos += diff;\r\n\t\t}\r\n\t}\r\n\t\r\n\taddColRight(){\r\n\t\tvar changes = false;\r\n\t\t\r\n\t\twhile(true){\r\n\t\t\t\r\n\t\t\tlet column = this.columns[this.rightCol + 1];\r\n\t\t\t\r\n\t\t\tif(column){\r\n\t\t\t\tif(column.modules.vdomHoz.leftPos <= this.vDomScrollPosRight){\r\n\t\t\t\t\tchanges = true;\r\n\t\t\t\t\t\r\n\t\t\t\t\tthis.getVisibleRows().forEach((row) => {\r\n\t\t\t\t\t\tif(row.type !== \"group\"){\r\n\t\t\t\t\t\t\tvar cell = row.getCell(column);\r\n\t\t\t\t\t\t\trow.getElement().appendChild(cell.getElement());\r\n\t\t\t\t\t\t\tcell.cellRendered();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t\t\r\n\t\t\t\t\tthis.fitDataColActualWidthCheck(column);\r\n\t\t\t\t\t\r\n\t\t\t\t\tthis.rightCol++; // Don't move this below the >= check below\r\n\t\t\t\t\t\r\n\t\t\t\t\tif(this.rightCol >= (this.columns.length - 1)){\r\n\t\t\t\t\t\tthis.vDomPadRight = 0;\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tthis.vDomPadRight -= column.getWidth();\r\n\t\t\t\t\t}\t\r\n\t\t\t\t}else{\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\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\t\r\n\t\twhile(true){\r\n\t\t\tlet column = this.columns[this.leftCol - 1];\r\n\t\t\t\r\n\t\t\tif(column){\r\n\t\t\t\tif(column.modules.vdomHoz.rightPos >= this.vDomScrollPosLeft){\r\n\t\t\t\t\tchanges = true;\r\n\t\t\t\t\t\r\n\t\t\t\t\tthis.getVisibleRows().forEach((row) => {\r\n\t\t\t\t\t\tif(row.type !== \"group\"){\r\n\t\t\t\t\t\t\tvar cell = row.getCell(column);\r\n\t\t\t\t\t\t\trow.getElement().prepend(cell.getElement());\r\n\t\t\t\t\t\t\tcell.cellRendered();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t\t\r\n\t\t\t\t\tthis.leftCol--; // don't move this below the <= check below\r\n\t\t\t\t\t\r\n\t\t\t\t\tif(this.leftCol <= 0){ // replicating logic in addColRight\r\n\t\t\t\t\t\tthis.vDomPadLeft = 0;\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tthis.vDomPadLeft -= column.getWidth();\r\n\t\t\t\t\t}\r\n\t\t\t\t\t\r\n\t\t\t\t\tlet diff = this.fitDataColActualWidthCheck(column);\r\n\t\t\t\t\t\r\n\t\t\t\t\tif(diff){\r\n\t\t\t\t\t\tthis.scrollLeft = this.elementVertical.scrollLeft = this.elementVertical.scrollLeft + diff;\r\n\t\t\t\t\t\tthis.vDomPadRight -= diff;\r\n\t\t\t\t\t}\r\n\t\t\t\t\t\r\n\t\t\t\t}else{\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\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\t\r\n\t\twhile(true){\r\n\t\t\tlet column = this.columns[this.rightCol];\r\n\t\t\t\r\n\t\t\tif(column){\r\n\t\t\t\tif(column.modules.vdomHoz.leftPos > this.vDomScrollPosRight){\r\n\t\t\t\t\tchanges = true;\r\n\t\t\t\t\t\r\n\t\t\t\t\tthis.getVisibleRows().forEach((row) => {\r\n\t\t\t\t\t\tif(row.type !== \"group\"){\r\n\t\t\t\t\t\t\tvar cell = row.getCell(column);\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\ttry {\r\n\t\t\t\t\t\t\t\trow.getElement().removeChild(cell.getElement());\r\n\t\t\t\t\t\t\t} catch (ex) {\r\n\t\t\t\t\t\t\t\tconsole.warn(\"Could not removeColRight\", ex.message)\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t\t\r\n\t\t\t\t\tthis.vDomPadRight += column.getWidth();\r\n\t\t\t\t\tthis.rightCol --;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\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\t\r\n\t\twhile(true){\r\n\t\t\tlet column = this.columns[this.leftCol];\r\n\t\t\t\r\n\t\t\tif(column){\r\n\t\t\t\tif(column.modules.vdomHoz.rightPos < this.vDomScrollPosLeft){\r\n\t\t\t\t\tchanges = true;\r\n\t\t\t\t\t\r\n\t\t\t\t\tthis.getVisibleRows().forEach((row) => {\t\t\t\t\t\r\n\t\t\t\t\t\tif(row.type !== \"group\"){\r\n\t\t\t\t\t\t\tvar cell = row.getCell(column);\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\ttry {\r\n\t\t\t\t\t\t\t\trow.getElement().removeChild(cell.getElement());\r\n\t\t\t\t\t\t\t} catch (ex) {\r\n\t\t\t\t\t\t\t\tconsole.warn(\"Could not removeColLeft\", ex.message)\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t\t\r\n\t\t\t\t\tthis.vDomPadLeft += column.getWidth();\r\n\t\t\t\t\tthis.leftCol ++;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\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\t\r\n\t}\r\n\t\r\n\tfitDataColActualWidthCheck(column){\r\n\t\tvar newWidth, widthDiff;\r\n\t\t\r\n\t\tif(column.modules.vdomHoz.fitDataCheck){\r\n\t\t\tcolumn.reinitializeWidth();\r\n\t\t\t\r\n\t\t\tnewWidth = column.getWidth();\r\n\t\t\twidthDiff = newWidth - column.modules.vdomHoz.width;\r\n\t\t\t\r\n\t\t\tif(widthDiff){\r\n\t\t\t\tcolumn.modules.vdomHoz.rightPos += widthDiff;\r\n\t\t\t\tcolumn.modules.vdomHoz.width = newWidth;\r\n\t\t\t\tthis.colPositionAdjust(this.columns.indexOf(column) + 1, this.columns.length, widthDiff);\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tcolumn.modules.vdomHoz.fitDataCheck = false;\r\n\t\t}\r\n\t\t\r\n\t\treturn widthDiff;\r\n\t}\r\n\t\r\n\tinitializeRow(row){\r\n\t\tif(row.type !== \"group\"){\r\n\t\t\trow.modules.vdomHoz = {\r\n\t\t\t\tleftCol:this.leftCol,\r\n\t\t\t\trightCol:this.rightCol,\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tfor(let i = this.leftCol; i <= this.rightCol; i++){\r\n\t\t\t\tlet column = this.columns[i];\r\n\t\t\t\t\r\n\t\t\t\tif(column && column.visible){\r\n\t\t\t\t\tlet cell = row.getCell(column);\r\n\t\t\t\t\t\r\n\t\t\t\t\trow.getElement().appendChild(cell.getElement());\r\n\t\t\t\t\tcell.cellRendered();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\treinitializeRow(row, force){\r\n\t\tif(row.type !== \"group\"){\r\n\t\t\tif(force || !row.modules.vdomHoz || row.modules.vdomHoz.leftCol !== this.leftCol || row.modules.vdomHoz.rightCol !== this.rightCol){\r\n\t\t\t\tvar rowEl = row.getElement();\r\n\t\t\t\twhile(rowEl.firstChild) rowEl.removeChild(rowEl.firstChild);\r\n\t\t\t\t\r\n\t\t\t\tthis.initializeRow(row);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}","import CoreFeature from './CoreFeature.js';\r\nimport Column from './column/Column.js';\r\nimport ColumnComponent from './column/ColumnComponent.js';\r\nimport Helpers from './tools/Helpers.js';\r\nimport OptionsList from './tools/OptionsList.js';\r\n\r\nimport RendererBasicHorizontal from './rendering/renderers/BasicHorizontal.js';\r\nimport RendererVirtualDomHorizontal from './rendering/renderers/VirtualDomHorizontal.js';\r\n\r\nimport defaultColumnOptions from './column/defaults/options.js';\r\n\r\nexport default class ColumnManager extends CoreFeature {\r\n\r\n\tconstructor (table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.blockHozScrollEvent = false;\r\n\t\tthis.headersElement = null;\r\n\t\tthis.element = null ; //containing element\r\n\t\tthis.columns = []; // column definition object\r\n\t\tthis.columnsByIndex = []; //columns by index\r\n\t\tthis.columnsByField = {}; //columns by field\r\n\t\tthis.scrollLeft = 0;\r\n\t\tthis.optionsList = new OptionsList(this.table, \"column definition\", defaultColumnOptions);\r\n\r\n\t\tthis.renderer = null;\r\n\t}\r\n\r\n\t////////////// Setup Functions /////////////////\r\n\r\n\tinitialize(){\r\n\t\tthis.initializeRenderer();\r\n\r\n\t\tthis.headersElement = this.createHeadersElement();\r\n\t\tthis.element = this.createHeaderElement();\r\n\r\n\t\tthis.element.insertBefore(this.headersElement, this.element.firstChild);\r\n\r\n\t\tthis.subscribe(\"scroll-horizontal\", this.scrollHorizontal.bind(this));\r\n\t}\r\n\r\n\tinitializeRenderer(){\r\n\t\tvar renderClass;\r\n\r\n\t\tvar renderers = {\r\n\t\t\t\"virtual\": RendererVirtualDomHorizontal,\r\n\t\t\t\"basic\": RendererBasicHorizontal,\r\n\t\t};\r\n\r\n\t\tif(typeof this.table.options.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\r\n\t\tif(renderClass){\r\n\t\t\tthis.renderer = new renderClass(this.table, this.element, this.tableElement);\r\n\t\t\tthis.renderer.initialize();\r\n\t\t}else{\r\n\t\t\tconsole.error(\"Unable to find matching renderer:\", table.options.renderHorizontal);\r\n\t\t}\r\n\t}\r\n\r\n\r\n\tcreateHeadersElement (){\r\n\t\tvar el = document.createElement(\"div\");\r\n\r\n\t\tel.classList.add(\"tabulator-headers\");\r\n\t\tel.setAttribute(\"role\", \"row\");\r\n\r\n\t\treturn el;\r\n\t}\r\n\r\n\tcreateHeaderElement (){\r\n\t\tvar el = document.createElement(\"div\");\r\n\r\n\t\tel.classList.add(\"tabulator-header\");\r\n\t\tel.setAttribute(\"role\", \"rowgroup\");\r\n\r\n\t\tif(!this.table.options.headerVisible){\r\n\t\t\tel.classList.add(\"tabulator-header-hidden\");\r\n\t\t}\r\n\r\n\t\treturn el;\r\n\t}\r\n\r\n\t//return containing element\r\n\tgetElement(){\r\n\t\treturn this.element;\r\n\t}\r\n\r\n\t//return header containing element\r\n\tgetHeadersElement(){\r\n\t\treturn this.headersElement;\r\n\t}\r\n\r\n\t//scroll horizontally to match table body\r\n\tscrollHorizontal(left){\r\n\t\tvar hozAdjust = 0,\r\n\t\tscrollWidth = this.element.scrollWidth - this.table.element.clientWidth;\r\n\r\n\t\t// this.tempScrollBlock();\r\n\t\tthis.element.scrollLeft = left;\r\n\r\n\t\t//adjust for vertical scrollbar moving table when present\r\n\t\tif(left > scrollWidth){\r\n\t\t\thozAdjust = left - scrollWidth;\r\n\t\t\tthis.element.style.marginLeft = (-(hozAdjust)) + \"px\";\r\n\t\t}else{\r\n\t\t\tthis.element.style.marginLeft = 0;\r\n\t\t}\r\n\r\n\t\tthis.scrollLeft = left;\r\n\r\n\t\tthis.renderer.scrollColumns(left);\r\n\t}\r\n\r\n\t///////////// Column Setup Functions /////////////\r\n\tgenerateColumnsFromRowData(data){\r\n\t\tvar cols = [],\r\n\t\tdefinitions = this.table.options.autoColumnsDefinitions,\r\n\t\trow, sorter;\r\n\r\n\t\tif(data && data.length){\r\n\r\n\t\t\trow = data[0];\r\n\r\n\t\t\tfor(var key in row){\r\n\t\t\t\tlet col = {\r\n\t\t\t\t\tfield:key,\r\n\t\t\t\t\ttitle:key,\r\n\t\t\t\t};\r\n\r\n\t\t\t\tlet value = row[key];\r\n\r\n\t\t\t\tswitch(typeof value){\r\n\t\t\t\t\tcase \"undefined\":\r\n\t\t\t\t\tsorter = \"string\";\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase \"boolean\":\r\n\t\t\t\t\tsorter = \"boolean\";\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase \"object\":\r\n\t\t\t\t\tif(Array.isArray(value)){\r\n\t\t\t\t\t\tsorter = \"array\";\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tsorter = \"string\";\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tdefault:\r\n\t\t\t\t\tif(!isNaN(value) && value !== \"\"){\r\n\t\t\t\t\t\tsorter = \"number\";\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tif(value.match(/((^[0-9]+[a-z]+)|(^[a-z]+[0-9]+))+$/i)){\r\n\t\t\t\t\t\t\tsorter = \"alphanum\";\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\tsorter = \"string\";\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tcol.sorter = sorter;\r\n\r\n\t\t\t\tcols.push(col);\r\n\t\t\t}\r\n\r\n\t\t\tif(definitions){\r\n\r\n\t\t\t\tswitch(typeof definitions){\r\n\t\t\t\t\tcase \"function\":\r\n\t\t\t\t\tthis.table.options.columns = definitions.call(this.table, cols);\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase \"object\":\r\n\t\t\t\t\tif(Array.isArray(definitions)){\r\n\t\t\t\t\t\tcols.forEach((col) => {\r\n\t\t\t\t\t\t\tvar match = definitions.find((def) => {\r\n\t\t\t\t\t\t\t\treturn def.field === col.field;\r\n\t\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\t\tif(match){\r\n\t\t\t\t\t\t\t\tObject.assign(col, match);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tcols.forEach((col) => {\r\n\t\t\t\t\t\t\tif(definitions[col.field]){\r\n\t\t\t\t\t\t\t\tObject.assign(col, definitions[col.field]);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tthis.table.options.columns = cols;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tthis.table.options.columns = cols;\r\n\t\t\t}\r\n\r\n\t\t\tthis.setColumns(this.table.options.columns);\r\n\t\t}\r\n\t}\r\n\r\n\tsetColumns(cols, row){\r\n\t\twhile(this.headersElement.firstChild) this.headersElement.removeChild(this.headersElement.firstChild);\r\n\r\n\t\tthis.columns = [];\r\n\t\tthis.columnsByIndex = [];\r\n\t\tthis.columnsByField = {};\r\n\r\n\t\tthis.dispatch(\"columns-loading\");\r\n\r\n\t\tcols.forEach((def, i) => {\r\n\t\t\tthis._addColumn(def);\r\n\t\t});\r\n\r\n\t\tthis._reIndexColumns();\r\n\r\n\t\tthis.dispatch(\"columns-loaded\");\r\n\r\n\t\tthis.renderer.rerenderColumns(false, true);\r\n\r\n\t\tthis.redraw(true);\r\n\t}\r\n\r\n\t_addColumn(definition, before, nextToColumn){\r\n\t\tvar column = new Column(definition, this),\r\n\t\tcolEl = column.getElement(),\r\n\t\tindex = nextToColumn ? this.findColumnIndex(nextToColumn) : nextToColumn;\r\n\r\n\t\tif(nextToColumn && index > -1){\r\n\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\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\r\n\t\tcolumn.columnRendered();\r\n\r\n\t\treturn column;\r\n\t}\r\n\r\n\tregisterColumnField(col){\r\n\t\tif(col.definition.field){\r\n\t\t\tthis.columnsByField[col.definition.field] = col;\r\n\t\t}\r\n\t}\r\n\r\n\tregisterColumnPosition(col){\r\n\t\tthis.columnsByIndex.push(col);\r\n\t}\r\n\r\n\t_reIndexColumns(){\r\n\t\tthis.columnsByIndex = [];\r\n\r\n\t\tthis.columns.forEach(function(column){\r\n\t\t\tcolumn.reRegisterPosition();\r\n\t\t});\r\n\t}\r\n\r\n\t//ensure column headers take up the correct amount of space in column groups\r\n\tverticalAlignHeaders(){\r\n\t\tvar minHeight = 0;\r\n\r\n\t\tthis.columns.forEach((column) => {\r\n\t\t\tvar height;\r\n\r\n\t\t\tcolumn.clearVerticalAlign();\r\n\r\n\t\t\theight = column.getHeight();\r\n\r\n\t\t\tif(height > minHeight){\r\n\t\t\t\tminHeight = height;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tthis.columns.forEach((column) => {\r\n\t\t\tcolumn.verticalAlign(this.table.options.columnHeaderVertAlign, minHeight);\r\n\t\t});\r\n\r\n\t\tthis.table.rowManager.adjustTableSize();\r\n\t}\r\n\r\n\t//////////////// Column Details /////////////////\r\n\tfindColumn(subject){\r\n\t\tif(typeof subject == \"object\"){\r\n\r\n\t\t\tif(subject instanceof Column){\r\n\t\t\t\t//subject is column element\r\n\t\t\t\treturn subject;\r\n\t\t\t}else if(subject instanceof ColumnComponent){\r\n\t\t\t\t//subject is public column component\r\n\t\t\t\treturn subject._getSelf() || false;\r\n\t\t\t}else if(typeof HTMLElement !== \"undefined\" && subject instanceof HTMLElement){\r\n\t\t\t\t//subject is a HTML element of the column header\r\n\t\t\t\tlet match = this.columns.find((column) => {\r\n\t\t\t\t\treturn column.element === subject;\r\n\t\t\t\t});\r\n\r\n\t\t\t\treturn match || false;\r\n\t\t\t}\r\n\r\n\t\t}else{\r\n\t\t\t//subject should be treated as the field name of the column\r\n\t\t\treturn this.columnsByField[subject] || false;\r\n\t\t}\r\n\r\n\t\t//catch all for any other type of input\r\n\t\treturn false;\r\n\t}\r\n\r\n\tgetColumnByField(field){\r\n\t\treturn this.columnsByField[field];\r\n\t}\r\n\r\n\tgetColumnsByFieldRoot(root){\r\n\t\tvar matches = [];\r\n\r\n\t\tObject.keys(this.columnsByField).forEach((field) => {\r\n\t\t\tvar fieldRoot = field.split(\".\")[0];\r\n\t\t\tif(fieldRoot === root){\r\n\t\t\t\tmatches.push(this.columnsByField[field]);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn matches;\r\n\t}\r\n\r\n\tgetColumnByIndex(index){\r\n\t\treturn this.columnsByIndex[index];\r\n\t}\r\n\r\n\tgetFirstVisibleColumn(index){\r\n\t\tvar index = this.columnsByIndex.findIndex((col) => {\r\n\t\t\treturn col.visible;\r\n\t\t});\r\n\r\n\t\treturn index > -1 ? this.columnsByIndex[index] : false;\r\n\t}\r\n\r\n\tgetColumns(){\r\n\t\treturn this.columns;\r\n\t}\r\n\r\n\tfindColumnIndex(column){\r\n\t\treturn this.columnsByIndex.findIndex((col) => {\r\n\t\t\treturn column === col;\r\n\t\t});\r\n\t}\r\n\r\n\t//return all columns that are not groups\r\n\tgetRealColumns(){\r\n\t\treturn this.columnsByIndex;\r\n\t}\r\n\r\n\t//travers across columns and call action\r\n\ttraverse(callback){\r\n\t\tthis.columnsByIndex.forEach((column,i) =>{\r\n\t\t\tcallback(column, i);\r\n\t\t});\r\n\t}\r\n\r\n\t//get defintions of actual columns\r\n\tgetDefinitions(active){\r\n\t\tvar output = [];\r\n\r\n\t\tthis.columnsByIndex.forEach((column) => {\r\n\t\t\tif(!active || (active && column.visible)){\r\n\t\t\t\toutput.push(column.getDefinition());\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\t//get full nested definition tree\r\n\tgetDefinitionTree(){\r\n\t\tvar output = [];\r\n\r\n\t\tthis.columns.forEach((column) => {\r\n\t\t\toutput.push(column.getDefinition(true));\r\n\t\t});\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tgetComponents(structured){\r\n\t\tvar output = [],\r\n\t\tcolumns = structured ? this.columns : this.columnsByIndex;\r\n\r\n\t\tcolumns.forEach((column) => {\r\n\t\t\toutput.push(column.getComponent());\r\n\t\t});\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tgetWidth(){\r\n\t\tvar width = 0;\r\n\r\n\t\tthis.columnsByIndex.forEach((column) => {\r\n\t\t\tif(column.visible){\r\n\t\t\t\twidth += column.getWidth();\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn width;\r\n\t}\r\n\r\n\tmoveColumn(from, to, after){\r\n\t\tthis.moveColumnActual(from, to, after);\r\n\r\n\t\tto.element.parentNode.insertBefore(from.element, to.element);\r\n\r\n\t\tif(after){\r\n\t\t\tto.element.parentNode.insertBefore(to.element, from.element);\r\n\t\t}\r\n\r\n\t\tthis.verticalAlignHeaders();\r\n\r\n\t\tthis.table.rowManager.reinitialize();\r\n\t}\r\n\r\n\tmoveColumnActual(from, to, after){\r\n\t\tif(from.parent.isGroup){\r\n\t\t\tthis._moveColumnInArray(from.parent.columns, from, to, after);\r\n\t\t}else{\r\n\t\t\tthis._moveColumnInArray(this.columns, from, to, after);\r\n\t\t}\r\n\r\n\t\tthis._moveColumnInArray(this.columnsByIndex, from, to, after, true);\r\n\r\n\t\tthis.renderer.rerenderColumns(true);\r\n\r\n\t\tthis.dispatch(\"column-moved\", from, to, after);\r\n\r\n\t\tif(this.subscribedExternal(\"columnMoved\")){\r\n\t\t\tthis.dispatchExternal(\"columnMoved\", from.getComponent(), this.table.columnManager.getComponents());\r\n\t\t}\r\n\t}\r\n\r\n\t_moveColumnInArray(columns, from, to, after, updateRows){\r\n\t\tvar\tfromIndex = columns.indexOf(from),\r\n\t\ttoIndex, rows = [];\r\n\r\n\t\tif (fromIndex > -1) {\r\n\r\n\t\t\tcolumns.splice(fromIndex, 1);\r\n\r\n\t\t\ttoIndex = columns.indexOf(to);\r\n\r\n\t\t\tif (toIndex > -1) {\r\n\r\n\t\t\t\tif(after){\r\n\t\t\t\t\ttoIndex = toIndex+1;\r\n\t\t\t\t}\r\n\r\n\t\t\t}else{\r\n\t\t\t\ttoIndex = fromIndex;\r\n\t\t\t}\r\n\r\n\t\t\tcolumns.splice(toIndex, 0, from);\r\n\r\n\t\t\tif(updateRows){\r\n\r\n\t\t\t\trows = this.chain(\"column-moving-rows\", [from, to, after], null, []) || [];\r\n\r\n\t\t\t\trows = rows.concat(this.table.rowManager.rows);\r\n\r\n\t\t\t\trows.forEach(function(row){\r\n\t\t\t\t\tif(row.cells.length){\r\n\t\t\t\t\t\tvar cell = row.cells.splice(fromIndex, 1)[0];\r\n\t\t\t\t\t\trow.cells.splice(toIndex, 0, cell);\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tscrollToColumn(column, position, ifVisible){\r\n\t\tvar left = 0,\r\n\t\toffset = 0,\r\n\t\tadjust = 0,\r\n\t\tcolEl = column.getElement();\r\n\r\n\t\treturn new Promise((resolve, reject) => {\r\n\r\n\t\t\tif(typeof position === \"undefined\"){\r\n\t\t\t\tposition = this.table.options.scrollToColumnPosition;\r\n\t\t\t}\r\n\r\n\t\t\tif(typeof ifVisible === \"undefined\"){\r\n\t\t\t\tifVisible = this.table.options.scrollToColumnIfVisible;\r\n\t\t\t}\r\n\r\n\t\t\tif(column.visible){\r\n\r\n\t\t\t\t//align to correct position\r\n\t\t\t\tswitch(position){\r\n\t\t\t\t\tcase \"middle\":\r\n\t\t\t\t\tcase \"center\":\r\n\t\t\t\t\tadjust = -this.element.clientWidth / 2;\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase \"right\":\r\n\t\t\t\t\tadjust = colEl.clientWidth - this.headersElement.clientWidth;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//check column visibility\r\n\t\t\t\tif(!ifVisible){\r\n\r\n\t\t\t\t\toffset = colEl.offsetLeft;\r\n\r\n\t\t\t\t\tif(offset > 0 && offset + colEl.offsetWidth < this.element.clientWidth){\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//calculate scroll position\r\n\t\t\t\tleft = colEl.offsetLeft + adjust;\r\n\r\n\t\t\t\tleft = Math.max(Math.min(left, this.table.rowManager.element.scrollWidth - this.table.rowManager.element.clientWidth),0);\r\n\r\n\t\t\t\tthis.table.rowManager.scrollHorizontal(left);\r\n\t\t\t\tthis.scrollHorizontal(left);\r\n\r\n\t\t\t\tresolve();\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Scroll Error - Column not visible\");\r\n\t\t\t\treject(\"Scroll Error - Column not visible\");\r\n\t\t\t}\r\n\r\n\t\t});\r\n\t}\r\n\r\n\t//////////////// Cell Management /////////////////\r\n\tgenerateCells(row){\r\n\t\tvar cells = [];\r\n\r\n\t\tthis.columnsByIndex.forEach((column) => {\r\n\t\t\tcells.push(column.generateCell(row));\r\n\t\t});\r\n\r\n\t\treturn cells;\r\n\t}\r\n\r\n\t//////////////// Column Management /////////////////\r\n\tgetFlexBaseWidth(){\r\n\t\tvar totalWidth = this.table.element.clientWidth, //table element width\r\n\t\tfixedWidth = 0;\r\n\r\n\t\t//adjust for vertical scrollbar if present\r\n\t\tif(this.table.rowManager.element.scrollHeight > this.table.rowManager.element.clientHeight){\r\n\t\t\ttotalWidth -= this.table.rowManager.element.offsetWidth - this.table.rowManager.element.clientWidth;\r\n\t\t}\r\n\r\n\t\tthis.columnsByIndex.forEach(function(column){\r\n\t\t\tvar width, minWidth, colWidth;\r\n\r\n\t\t\tif(column.visible){\r\n\r\n\t\t\t\twidth = column.definition.width || 0;\r\n\r\n\t\t\t\tminWidth = parseInt(column.minWidth);\r\n\r\n\t\t\t\tif(typeof(width) == \"string\"){\r\n\t\t\t\t\tif(width.indexOf(\"%\") > -1){\r\n\t\t\t\t\t\tcolWidth = (totalWidth / 100) * parseInt(width) ;\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tcolWidth = parseInt(width);\r\n\t\t\t\t\t}\r\n\t\t\t\t}else{\r\n\t\t\t\t\tcolWidth = width;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tfixedWidth += colWidth > minWidth ? colWidth : minWidth;\r\n\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn fixedWidth;\r\n\t}\r\n\r\n\taddColumn(definition, before, nextToColumn){\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tvar column = this._addColumn(definition, before, nextToColumn);\r\n\r\n\t\t\tthis._reIndexColumns();\r\n\r\n\t\t\tthis.dispatch(\"column-add\", definition, before, nextToColumn);\r\n\r\n\t\t\tif(this.layoutMode() != \"fitColumns\"){\r\n\t\t\t\tcolumn.reinitializeWidth();\r\n\t\t\t}\r\n\r\n\t\t\tthis.redraw(true);\r\n\r\n\t\t\tthis.table.rowManager.reinitialize();\r\n\r\n\t\t\tthis.renderer.rerenderColumns();\r\n\r\n\t\t\tresolve(column);\r\n\t\t});\r\n\t}\r\n\r\n\t//remove column from system\r\n\tderegisterColumn(column){\r\n\t\tvar field = column.getField(),\r\n\t\tindex;\r\n\r\n\t\t//remove from field list\r\n\t\tif(field){\r\n\t\t\tdelete this.columnsByField[field];\r\n\t\t}\r\n\r\n\t\t//remove from index list\r\n\t\tindex = this.columnsByIndex.indexOf(column);\r\n\r\n\t\tif(index > -1){\r\n\t\t\tthis.columnsByIndex.splice(index, 1);\r\n\t\t}\r\n\r\n\t\t//remove from column list\r\n\t\tindex = this.columns.indexOf(column);\r\n\r\n\t\tif(index > -1){\r\n\t\t\tthis.columns.splice(index, 1);\r\n\t\t}\r\n\r\n\t\tthis.verticalAlignHeaders();\r\n\r\n\t\tthis.redraw();\r\n\t}\r\n\r\n\t//redraw columns\r\n\tredraw(force){\r\n\t\tif(Helpers.elVisible(this.element)){\r\n\t\t\tthis.verticalAlignHeaders();\r\n\t\t}\r\n\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\r\n\t\tif(!this.confirm(\"table-redrawing\", force)){\r\n\t\t\tthis.layoutRefresh();\r\n\t\t}\r\n\r\n\t\tthis.dispatch(\"table-redraw\", force);\r\n\r\n\t\tthis.table.footerManager.redraw();\r\n\t}\r\n}","//public row object\r\nexport default class RowComponent {\r\n\r\n\tconstructor (row){\r\n\t\tthis._row = row;\r\n\r\n\t\treturn new Proxy(this, {\r\n\t\t\tget: function(target, name, receiver) {\r\n\t\t\t\tif (typeof target[name] !== \"undefined\") {\r\n\t\t\t\t\treturn target[name];\r\n\t\t\t\t}else{\r\n\t\t\t\t\treturn target._row.table.componentFunctionBinder.handle(\"row\", target._row, name)\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t})\r\n\t}\r\n\r\n\tgetData(transform){\r\n\t\treturn this._row.getData(transform);\r\n\t}\r\n\r\n\tgetElement(){\r\n\t\treturn this._row.getElement();\r\n\t}\r\n\r\n\tgetCells(){\r\n\t\tvar cells = [];\r\n\r\n\t\tthis._row.getCells().forEach(function(cell){\r\n\t\t\tcells.push(cell.getComponent());\r\n\t\t});\r\n\r\n\t\treturn cells;\r\n\t}\r\n\r\n\tgetCell(column){\r\n\t\tvar cell = this._row.getCell(column);\r\n\t\treturn cell ? cell.getComponent() : false;\r\n\t}\r\n\r\n\tgetIndex(){\r\n\t\treturn this._row.getData(\"data\")[this._row.table.options.index];\r\n\t}\r\n\r\n\tgetPosition(active){\r\n\t\treturn this._row.table.rowManager.getRowPosition(this._row, active);\r\n\t}\r\n\r\n\tdelete(){\r\n\t\treturn this._row.delete();\r\n\t}\r\n\r\n\tscrollTo(){\r\n\t\treturn this._row.table.rowManager.scrollToRow(this._row);\r\n\t}\r\n\r\n\tmove(to, after){\r\n\t\tthis._row.moveToRow(to, after);\r\n\t}\r\n\r\n\tupdate(data){\r\n\t\treturn this._row.updateData(data);\r\n\t}\r\n\r\n\tnormalizeHeight(){\r\n\t\tthis._row.normalizeHeight(true);\r\n\t}\r\n\r\n\t_getSelf(){\r\n\t\treturn this._row;\r\n\t}\r\n\r\n\treformat(){\r\n\t\treturn this._row.reinitialize();\r\n\t}\r\n\r\n\tgetTable(){\r\n\t\treturn this._row.table;\r\n\t}\r\n\r\n\tgetNextRow(){\r\n\t\tvar row = this._row.nextRow();\r\n\t\treturn row ? row.getComponent() : row;\r\n\t}\r\n\r\n\tgetPrevRow(){\r\n\t\tvar row = this._row.prevRow();\r\n\t\treturn row ? row.getComponent() : row;\r\n\t}\r\n}","import CoreFeature from '../CoreFeature.js';\r\nimport RowComponent from './RowComponent.js';\r\nimport Helpers from '../tools/Helpers.js';\r\n\r\nexport default class Row extends CoreFeature{\r\n\tconstructor (data, parent, type = \"row\"){\r\n\t\tsuper(parent.table);\r\n\r\n\t\tthis.parent = parent;\r\n\t\tthis.data = {};\r\n\t\tthis.type = type; //type of element\r\n\t\tthis.element = false;\r\n\t\tthis.modules = {}; //hold module variables;\r\n\t\tthis.cells = [];\r\n\t\tthis.height = 0; //hold element height\r\n\t\tthis.heightStyled = \"\"; //hold element height prestyled to improve render efficiency\r\n\t\tthis.manualHeight = false; //user has manually set row height\r\n\t\tthis.outerHeight = 0; //holde lements outer height\r\n\t\tthis.initialized = false; //element has been rendered\r\n\t\tthis.heightInitialized = false; //element has resized cells to fit\r\n\r\n\t\tthis.component = null;\r\n\r\n\t\tthis.created = false;\r\n\r\n\t\tthis.setData(data);\r\n\t}\r\n\r\n\tcreate(){\r\n\t\tif(!this.created){\r\n\t\t\tthis.created = true;\r\n\t\t\tthis.generateElement();\r\n\t\t}\r\n\t}\r\n\r\n\tcreateElement (){\r\n\t\tvar el = document.createElement(\"div\");\r\n\r\n\t\tel.classList.add(\"tabulator-row\");\r\n\t\tel.setAttribute(\"role\", \"row\");\r\n\r\n\t\tthis.element = el;\r\n\t}\r\n\r\n\tgetElement(){\r\n\t\tthis.create();\r\n\t\treturn this.element;\r\n\t}\r\n\r\n\tdetachElement(){\r\n\t\tif (this.element && this.element.parentNode){\r\n\t\t\tthis.element.parentNode.removeChild(this.element);\r\n\t\t}\r\n\t}\r\n\r\n\tgenerateElement(){\r\n\t\tthis.createElement();\r\n\t\tthis.dispatch(\"row-init\", this);\r\n\t}\r\n\r\n\tgenerateCells(){\r\n\t\tthis.cells = this.table.columnManager.generateCells(this);\r\n\t}\r\n\r\n\t//functions to setup on first render\r\n\tinitialize(force){\r\n\t\tthis.create();\r\n\r\n\t\tif(!this.initialized || force){\r\n\r\n\t\t\tthis.deleteCells();\r\n\r\n\t\t\twhile(this.element.firstChild) this.element.removeChild(this.element.firstChild);\r\n\r\n\t\t\tthis.dispatch(\"row-layout-before\", this);\r\n\r\n\t\t\tthis.generateCells();\r\n\r\n\t\t\tthis.initialized = true;\r\n\r\n\t\t\tthis.table.columnManager.renderer.renderRowCells(this);\r\n\r\n\t\t\tif(force){\r\n\t\t\t\tthis.normalizeHeight();\r\n\t\t\t}\r\n\r\n\t\t\tthis.dispatch(\"row-layout\", this);\r\n\r\n\t\t\tif(this.table.options.rowFormatter){\r\n\t\t\t\tthis.table.options.rowFormatter(this.getComponent());\r\n\t\t\t}\r\n\r\n\t\t\tthis.dispatch(\"row-layout-after\", this);\r\n\t\t}else{\r\n\t\t\tthis.table.columnManager.renderer.rerenderRowCells(this);\r\n\t\t}\r\n\t}\r\n\r\n\treinitializeHeight(){\r\n\t\tthis.heightInitialized = false;\r\n\r\n\t\tif(this.element && this.element.offsetParent !== null){\r\n\t\t\tthis.normalizeHeight(true);\r\n\t\t}\r\n\t}\r\n\r\n\tdeinitializeHeight(){\r\n\t\tthis.heightInitialized = false;\r\n\t}\r\n\r\n\treinitialize(children){\r\n\t\tthis.initialized = false;\r\n\t\tthis.heightInitialized = false;\r\n\r\n\t\tif(!this.manualHeight){\r\n\t\t\tthis.height = 0;\r\n\t\t\tthis.heightStyled = \"\";\r\n\t\t}\r\n\r\n\t\tif(this.element && this.element.offsetParent !== null){\r\n\t\t\tthis.initialize(true);\r\n\t\t}\r\n\r\n\t\tthis.dispatch(\"row-relayout\", this);\r\n\t}\r\n\r\n\t//get heights when doing bulk row style calcs in virtual DOM\r\n\tcalcHeight(force){\r\n\r\n\t\tvar maxHeight = 0,\r\n\t\tminHeight = this.table.options.resizableRows ? this.element.clientHeight : 0;\r\n\r\n\t\tthis.cells.forEach(function(cell){\r\n\t\t\tvar height = cell.getHeight();\r\n\t\t\tif(height > maxHeight){\r\n\t\t\t\tmaxHeight = height;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tif(force){\r\n\t\t\tthis.height = Math.max(maxHeight, minHeight);\r\n\t\t}else{\r\n\t\t\tthis.height = this.manualHeight ? this.height : Math.max(maxHeight, minHeight);\r\n\t\t}\r\n\r\n\t\tthis.heightStyled = this.height ? this.height + \"px\" : \"\";\r\n\t\tthis.outerHeight = this.element.offsetHeight;\r\n\t}\r\n\r\n\t//set of cells\r\n\tsetCellHeight(){\r\n\t\tthis.cells.forEach(function(cell){\r\n\t\t\tcell.setHeight();\r\n\t\t});\r\n\r\n\t\tthis.heightInitialized = true;\r\n\t}\r\n\r\n\tclearCellHeight(){\r\n\t\tthis.cells.forEach(function(cell){\r\n\t\t\tcell.clearHeight();\r\n\t\t});\r\n\t}\r\n\r\n\t//normalize the height of elements in the row\r\n\tnormalizeHeight(force){\r\n\t\tif(force){\r\n\t\t\tthis.clearCellHeight();\r\n\t\t}\r\n\r\n\t\tthis.calcHeight(force);\r\n\r\n\t\tthis.setCellHeight();\r\n\t}\r\n\r\n\t//set height of rows\r\n\tsetHeight(height, force){\r\n\t\tif(this.height != height || force){\r\n\r\n\t\t\tthis.manualHeight = true;\r\n\r\n\t\t\tthis.height = height;\r\n\t\t\tthis.heightStyled = height ? height + \"px\" : \"\";\r\n\r\n\t\t\tthis.setCellHeight();\r\n\r\n\t\t\t// this.outerHeight = this.element.outerHeight();\r\n\t\t\tthis.outerHeight = this.element.offsetHeight;\r\n\t\t}\r\n\t}\r\n\r\n\t//return rows outer height\r\n\tgetHeight(){\r\n\t\treturn this.outerHeight;\r\n\t}\r\n\r\n\t//return rows outer Width\r\n\tgetWidth(){\r\n\t\treturn this.element.offsetWidth;\r\n\t}\r\n\r\n\t//////////////// Cell Management /////////////////\r\n\tdeleteCell(cell){\r\n\t\tvar index = this.cells.indexOf(cell);\r\n\r\n\t\tif(index > -1){\r\n\t\t\tthis.cells.splice(index, 1);\r\n\t\t}\r\n\t}\r\n\r\n\t//////////////// Data Management /////////////////\r\n\tsetData(data){\r\n\t\tthis.data = this.chain(\"row-data-init-before\", [this, data], undefined, data);\r\n\r\n\t\tthis.dispatch(\"row-data-init-after\", this);\r\n\t}\r\n\r\n\t//update the rows data\r\n\tupdateData(updatedData){\r\n\t\tvar visible = this.element && Helpers.elVisible(this.element),\r\n\t\ttempData = {},\r\n\t\tnewRowData;\r\n\r\n\t\treturn new Promise((resolve, reject) => {\r\n\r\n\t\t\tif(typeof updatedData === \"string\"){\r\n\t\t\t\tupdatedData = JSON.parse(updatedData);\r\n\t\t\t}\r\n\r\n\t\t\tthis.dispatch(\"row-data-save-before\", this);\r\n\r\n\t\t\tif(this.subscribed(\"row-data-changing\")){\r\n\t\t\t\ttempData = Object.assign(tempData, this.data);\r\n\t\t\t\ttempData = Object.assign(tempData, updatedData);\r\n\t\t\t}\r\n\r\n\t\t\tnewRowData = this.chain(\"row-data-changing\", [this, tempData, updatedData], null, updatedData);\r\n\r\n\t\t\t//set data\r\n\t\t\tfor (var attrname in newRowData) {\r\n\t\t\t\tthis.data[attrname] = newRowData[attrname];\r\n\t\t\t}\r\n\r\n\t\t\tthis.dispatch(\"row-data-save-after\", this);\r\n\r\n\t\t\t//update affected cells only\r\n\t\t\tfor (var attrname in updatedData) {\r\n\r\n\t\t\t\tlet columns = this.table.columnManager.getColumnsByFieldRoot(attrname);\r\n\r\n\t\t\t\tcolumns.forEach((column) => {\r\n\t\t\t\t\tlet cell = this.getCell(column.getField());\r\n\r\n\t\t\t\t\tif(cell){\r\n\t\t\t\t\t\tlet value = column.getFieldValue(newRowData);\r\n\t\t\t\t\t\tif(cell.getValue() != value){\r\n\t\t\t\t\t\t\tcell.setValueProcessData(value);\r\n\r\n\t\t\t\t\t\t\tif(visible){\r\n\t\t\t\t\t\t\t\tcell.cellRendered();\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\t//Partial reinitialization if visible\r\n\t\t\tif(visible){\r\n\t\t\t\tthis.normalizeHeight(true);\r\n\r\n\t\t\t\tif(this.table.options.rowFormatter){\r\n\t\t\t\t\tthis.table.options.rowFormatter(this.getComponent());\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tthis.initialized = false;\r\n\t\t\t\tthis.height = 0;\r\n\t\t\t\tthis.heightStyled = \"\";\r\n\t\t\t}\r\n\r\n\t\t\tthis.dispatch(\"row-data-changed\", this, visible, updatedData);\r\n\r\n\t\t\t//this.reinitialize();\r\n\r\n\t\t\tthis.dispatchExternal(\"rowUpdated\", this.getComponent());\r\n\r\n\t\t\tif(this.subscribedExternal(\"dataChanged\")){\r\n\t\t\t\tthis.dispatchExternal(\"dataChanged\", this.table.rowManager.getData());\r\n\t\t\t}\r\n\r\n\t\t\tresolve();\r\n\t\t});\r\n\t}\r\n\r\n\tgetData(transform){\r\n\t\tif(transform){\r\n\t\t\treturn this.chain(\"row-data-retrieve\", [this, transform], null, this.data);\r\n\t\t}\r\n\r\n\t\treturn this.data;\r\n\t}\r\n\r\n\tgetCell(column){\r\n\t\tvar match = false;\r\n\r\n\t\tcolumn = this.table.columnManager.findColumn(column);\r\n\r\n\t\tif(!this.initialized){\r\n\t\t\tthis.generateCells();\r\n\t\t}\r\n\r\n\t\tmatch = this.cells.find(function(cell){\r\n\t\t\treturn cell.column === column;\r\n\t\t});\r\n\r\n\t\treturn match;\r\n\t}\r\n\r\n\tgetCellIndex(findCell){\r\n\t\treturn this.cells.findIndex(function(cell){\r\n\t\t\treturn cell === findCell;\r\n\t\t});\r\n\t}\r\n\r\n\tfindCell(subject){\r\n\t\treturn this.cells.find((cell) => {\r\n\t\t\treturn cell.element === subject;\r\n\t\t});\r\n\t}\r\n\r\n\tgetCells(){\r\n\t\tif(!this.initialized){\r\n\t\t\tthis.generateCells();\r\n\t\t}\r\n\r\n\t\treturn this.cells;\r\n\t}\r\n\r\n\tnextRow(){\r\n\t\tvar row = this.table.rowManager.nextDisplayRow(this, true);\r\n\t\treturn row || false;\r\n\t}\r\n\r\n\tprevRow(){\r\n\t\tvar row = this.table.rowManager.prevDisplayRow(this, true);\r\n\t\treturn row || false;\r\n\t}\r\n\r\n\tmoveToRow(to, before){\r\n\t\tvar toRow = this.table.rowManager.findRow(to);\r\n\r\n\t\tif(toRow){\r\n\t\t\tthis.table.rowManager.moveRowActual(this, toRow, !before);\r\n\t\t\tthis.table.rowManager.refreshActiveData(\"display\", false, true);\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Move Error - No matching row found:\", to);\r\n\t\t}\r\n\t}\r\n\r\n\t///////////////////// Actions /////////////////////\r\n\tdelete(){\r\n\t\tthis.dispatch(\"row-delete\", this);\r\n\r\n\t\tthis.deleteActual();\r\n\r\n\t\treturn Promise.resolve();\r\n\t}\r\n\r\n\tdeleteActual(blockRedraw){\r\n\t\tvar index = this.table.rowManager.getRowIndex(this);\r\n\r\n\t\tthis.detatchModules();\r\n\r\n\t\tthis.table.rowManager.deleteRow(this, blockRedraw);\r\n\r\n\t\tthis.deleteCells();\r\n\r\n\t\tthis.initialized = false;\r\n\t\tthis.heightInitialized = false;\r\n\t\tthis.element = false;\r\n\r\n\t\tthis.dispatch(\"row-deleted\", this);\r\n\t}\r\n\r\n\tdetatchModules(){\r\n\t\tthis.dispatch(\"row-deleting\", this);\r\n\t}\r\n\r\n\tdeleteCells(){\r\n\t\tvar cellCount = this.cells.length;\r\n\r\n\t\tfor(let i = 0; i < cellCount; i++){\r\n\t\t\tthis.cells[0].delete();\r\n\t\t}\r\n\t}\r\n\r\n\twipe(){\r\n\t\tthis.detatchModules();\r\n\t\tthis.deleteCells();\r\n\r\n\t\tif(this.element){\r\n\t\t\twhile(this.element.firstChild) this.element.removeChild(this.element.firstChild);\r\n\r\n\t\t\tif(this.element.parentNode){\r\n\t\t\t\tthis.element.parentNode.removeChild(this.element);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.element = false;\r\n\t\tthis.modules = {};\r\n\t}\r\n\r\n\tgetGroup(){\r\n\t\treturn this.modules.group || false;\r\n\t}\r\n\r\n\t//////////////// Object Generation /////////////////\r\n\tgetComponent(){\r\n\t\tif(!this.component){\r\n\t\t\tthis.component = new RowComponent(this);\r\n\t\t}\r\n\r\n\t\treturn this.component;\r\n\t}\r\n}","import Renderer from '../Renderer.js';\r\nimport Helpers from '../../tools/Helpers.js';\r\n\r\nexport default class BaiscVertical extends Renderer{\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.verticalFillMode = \"fill\";\r\n\r\n\t\tthis.scrollTop = 0;\r\n\t\tthis.scrollLeft = 0;\r\n\r\n\t\tthis.scrollTop = 0;\r\n\t\tthis.scrollLeft = 0;\r\n\t}\r\n\r\n\tclearRows(){\r\n\t\tvar element = this.tableElement;\r\n\r\n\t\t// element.children.detach();\r\n\t\twhile(element.firstChild) element.removeChild(element.firstChild);\r\n\r\n\t\telement.scrollTop = 0;\r\n\t\telement.scrollLeft = 0;\r\n\r\n\t\telement.style.minWidth = \"\";\r\n\t\telement.style.minHeight = \"\";\r\n\t\telement.style.display = \"\";\r\n\t\telement.style.visibility = \"\";\r\n\t}\r\n\r\n\trenderRows(){\r\n\t\tvar element = this.tableElement,\r\n\t\tonlyGroupHeaders = true;\r\n\r\n\t\tthis.rows().forEach((row, index) => {\r\n\t\t\tthis.styleRow(row, index);\r\n\t\t\telement.appendChild(row.getElement());\r\n\t\t\trow.initialize(true);\r\n\r\n\t\t\tif(row.type !== \"group\"){\r\n\t\t\t\tonlyGroupHeaders = false;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tif(onlyGroupHeaders){\r\n\t\t\telement.style.minWidth = this.table.columnManager.getWidth() + \"px\";\r\n\t\t}else{\r\n\t\t\telement.style.minWidth = \"\";\r\n\t\t}\r\n\t}\r\n\r\n\r\n\trerenderRows(callback){\r\n\t\tthis.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 possition for last rendered row in the virtual DOM\r\n\r\n\t\tthis.vDomScrollPosTop = 0; //last scroll position of the vDom top;\r\n\t\tthis.vDomScrollPosBottom = 0; //last scroll position of the vDom bottom;\r\n\r\n\t\tthis.vDomTopPad = 0; //hold value of padding for top of virtual DOM\r\n\t\tthis.vDomBottomPad = 0; //hold value of padding for bottom of virtual DOM\r\n\r\n\t\tthis.vDomMaxRenderChain = 90; //the maximum number of dom elements that can be rendered in 1 go\r\n\r\n\t\tthis.vDomWindowBuffer = 0; //window row buffer before removing elements, to smooth scrolling\r\n\r\n\t\tthis.vDomWindowMinTotalRows = 20; //minimum number of rows to be generated in virtual dom (prevent buffering issues on tables with tall rows)\r\n\t\tthis.vDomWindowMinMarginRows = 5; //minimum number of rows to be generated in virtual dom margin\r\n\r\n\t\tthis.vDomTopNewRows = []; //rows to normalize after appending to optimize render speed\r\n\t\tthis.vDomBottomNewRows = []; //rows to normalize after appending to optimize render speed\r\n\t}\r\n\r\n\t//////////////////////////////////////\r\n\t///////// Public Functions ///////////\r\n\t//////////////////////////////////////\r\n\r\n\tclearRows(){\r\n\t\tvar element = this.tableElement;\r\n\r\n\t\t// element.children.detach();\r\n\t\twhile(element.firstChild) element.removeChild(element.firstChild);\r\n\r\n\t\telement.style.paddingTop = \"\";\r\n\t\telement.style.paddingBottom = \"\";\r\n\t\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\tthis._virtualRenderFill((topRow === false ? this.rows.length - 1 : topRow), true, topOffset || 0);\r\n\r\n\t\tthis.scrollColumns(left);\r\n\t}\r\n\r\n\tscrollColumns(left){\r\n\t\tthis.table.rowManager.scrollHorizontal(left);\r\n\t}\r\n\r\n\tscrollRows(top, dir){\r\n\t\tvar topDiff = top - this.vDomScrollPosTop;\r\n\t\tvar bottomDiff = top - this.vDomScrollPosBottom;\r\n\t\tvar margin = this.vDomWindowBuffer * 2;\r\n\t\tvar rows = this.rows();\r\n\r\n\t\tthis.scrollTop = top;\r\n\r\n\t\tif(-topDiff > margin || bottomDiff > margin){\r\n\t\t\t//if big scroll redraw table;\r\n\t\t\tvar left = this.table.rowManager.scrollLeft;\r\n\t\t\tthis._virtualRenderFill(Math.floor((this.elementVertical.scrollTop / this.elementVertical.scrollHeight) * rows.length));\r\n\t\t\tthis.scrollColumns(left);\r\n\t\t}else{\r\n\r\n\t\t\tif(dir){\r\n\t\t\t\t//scrolling up\r\n\t\t\t\tif(topDiff < 0){\r\n\t\t\t\t\tthis._addTopRow(rows, -topDiff);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(bottomDiff < 0){\r\n\t\t\t\t\t//hide bottom row if needed\r\n\t\t\t\t\tif(this.vDomScrollHeight - this.scrollTop > this.vDomWindowBuffer){\r\n\t\t\t\t\t\tthis._removeBottomRow(rows, -bottomDiff);\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tthis.vDomScrollPosBottom = this.scrollTop;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\r\n\t\t\t\tif(bottomDiff >= 0){\r\n\t\t\t\t\tthis._addBottomRow(rows, bottomDiff);\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//scrolling down\r\n\t\t\t\tif(topDiff >= 0){\r\n\t\t\t\t\t//hide top row if needed\r\n\t\t\t\t\tif(this.scrollTop > this.vDomWindowBuffer){\r\n\t\t\t\t\t\tthis._removeTopRow(rows, topDiff);\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tthis.vDomScrollPosTop = this.scrollTop;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tresize(){\r\n\t\tthis.vDomWindowBuffer = this.table.options.renderVerticalBuffer || this.elementVertical.clientHeight;\r\n\t}\r\n\r\n\tscrollToRowNearestTop(row){\r\n\t\tvar rowIndex = this.rows().indexOf(row);\r\n\r\n\t\treturn !(Math.abs(this.vDomTop - rowIndex) > Math.abs(this.vDomBottom - rowIndex));\r\n\t}\r\n\r\n\tscrollToRow(row){\r\n\t\tvar index = this.rows().indexOf(row);\r\n\r\n\t\tif(index > -1){\r\n\t\t\tthis._virtualRenderFill(index, true);\r\n\t\t}\r\n\t}\r\n\r\n\tvisibleRows(includingBuffer){\r\n\t\tvar topEdge = this.elementVertical.scrollTop,\r\n\t\tbottomEdge = this.elementVertical.clientHeight + topEdge,\r\n\t\ttopFound = false,\r\n\t\ttopRow = 0,\r\n\t\tbottomRow = 0,\r\n\t\trows = this.rows();\r\n\r\n\t\tif(includingBuffer){\r\n\t\t\ttopRow = this.vDomTop;\r\n\t\t\tbottomRow = this.vDomBottom;\r\n\t\t}else{\r\n\t\t\tfor(var i = this.vDomTop; i <= this.vDomBottom; i++){\r\n\t\t\t\tif(rows[i]){\r\n\t\t\t\t\tif(!topFound){\r\n\t\t\t\t\t\tif((topEdge - rows[i].getElement().offsetTop) >= 0){\r\n\t\t\t\t\t\t\ttopRow = i;\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\ttopFound = true;\r\n\r\n\t\t\t\t\t\t\tif(bottomEdge - rows[i].getElement().offsetTop >= 0){\r\n\t\t\t\t\t\t\t\tbottomRow = i;\r\n\t\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tif(bottomEdge - rows[i].getElement().offsetTop >= 0){\r\n\t\t\t\t\t\t\tbottomRow = i;\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn rows.slice(topRow, bottomRow + 1);\r\n\t}\r\n\r\n\t//////////////////////////////////////\r\n\t//////// Internal Rendering //////////\r\n\t//////////////////////////////////////\r\n\r\n\t//full virtual render\r\n\t_virtualRenderFill(position, forceMove, offset){\r\n\t\tvar\telement = this.tableElement,\r\n\t\tholder = this.elementVertical,\r\n\t\ttopPad = 0,\r\n\t\trowsHeight = 0,\r\n\t\theightOccupied = 0,\r\n\t\ttopPadHeight = 0,\r\n\t\ti = 0,\r\n\t\trows = this.rows(),\r\n\t\trowsCount = rows.length,\r\n\t\tcontainerHeight = this.elementVertical.clientHeight;\r\n\r\n\t\tposition = position || 0;\r\n\r\n\t\toffset = offset || 0;\r\n\r\n\t\tif(!position){\r\n\t\t\tthis.clear();\r\n\t\t}else{\r\n\t\t\twhile(element.firstChild) element.removeChild(element.firstChild);\r\n\r\n\t\t\t//check if position is too close to bottom of table\r\n\t\t\theightOccupied = (rowsCount - position + 1) * this.vDomRowHeight;\r\n\r\n\t\t\tif(heightOccupied < containerHeight){\r\n\t\t\t\tposition -= Math.ceil((containerHeight - heightOccupied) / this.vDomRowHeight);\r\n\t\t\t\tif(position < 0){\r\n\t\t\t\t\tposition = 0;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t//calculate initial pad\r\n\t\t\ttopPad = Math.min(Math.max(Math.floor(this.vDomWindowBuffer / this.vDomRowHeight), this.vDomWindowMinMarginRows), position);\r\n\t\t\tposition -= topPad;\r\n\t\t}\r\n\r\n\t\tif(rowsCount && Helpers.elVisible(this.elementVertical)){\r\n\t\t\tthis.vDomTop = position;\r\n\r\n\t\t\tthis.vDomBottom = position -1;\r\n\r\n\t\t\twhile ((rowsHeight <= containerHeight + this.vDomWindowBuffer || i < this.vDomWindowMinTotalRows) && this.vDomBottom < rowsCount -1){\r\n\t\t\t\tvar index = this.vDomBottom + 1,\r\n\t\t\t\trow = rows[index],\r\n\t\t\t\trowHeight = 0;\r\n\r\n\t\t\t\tthis.styleRow(row, index);\r\n\r\n\t\t\t\telement.appendChild(row.getElement());\r\n\r\n\t\t\t\trow.initialize();\r\n\r\n\t\t\t\tif(!row.heightInitialized){\r\n\t\t\t\t\trow.normalizeHeight(true);\r\n\t\t\t\t}\r\n\r\n\t\t\t\trowHeight = row.getHeight();\r\n\r\n\t\t\t\tif(i < topPad){\r\n\t\t\t\t\ttopPadHeight += rowHeight;\r\n\t\t\t\t}else{\r\n\t\t\t\t\trowsHeight += rowHeight;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(rowHeight > this.vDomWindowBuffer){\r\n\t\t\t\t\tthis.vDomWindowBuffer = rowHeight * 2;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.vDomBottom ++;\r\n\t\t\t\ti++;\r\n\t\t\t}\r\n\r\n\t\t\tif(!position){\r\n\t\t\t\tthis.vDomTopPad = 0;\r\n\t\t\t\t//adjust rowheight to match average of rendered elements\r\n\t\t\t\tthis.vDomRowHeight = Math.floor((rowsHeight + topPadHeight) / i);\r\n\t\t\t\tthis.vDomBottomPad = this.vDomRowHeight * (rowsCount - this.vDomBottom -1);\r\n\r\n\t\t\t\tthis.vDomScrollHeight = topPadHeight + rowsHeight + this.vDomBottomPad - containerHeight;\r\n\t\t\t}else{\r\n\t\t\t\tthis.vDomTopPad = !forceMove ? this.scrollTop - topPadHeight : (this.vDomRowHeight * this.vDomTop) + offset;\r\n\t\t\t\tthis.vDomBottomPad = this.vDomBottom == rowsCount-1 ? 0 : Math.max(this.vDomScrollHeight - this.vDomTopPad - rowsHeight - topPadHeight, 0);\r\n\t\t\t}\r\n\r\n\t\t\telement.style.paddingTop = this.vDomTopPad + \"px\";\r\n\t\t\telement.style.paddingBottom = this.vDomBottomPad + \"px\";\r\n\r\n\t\t\tif(forceMove){\r\n\t\t\t\tthis.scrollTop = this.vDomTopPad + (topPadHeight) + offset - (this.elementVertical.scrollWidth > this.elementVertical.clientWidth ? this.elementVertical.offsetHeight - containerHeight : 0);\r\n\t\t\t}\r\n\r\n\t\t\tthis.scrollTop = Math.min(this.scrollTop, this.elementVertical.scrollHeight - containerHeight);\r\n\r\n\t\t\t//adjust for horizontal scrollbar if present (and not at top of table)\r\n\t\t\tif(this.elementVertical.scrollWidth > this.elementVertical.offsetWidth && forceMove){\r\n\t\t\t\tthis.scrollTop += this.elementVertical.offsetHeight - containerHeight;\r\n\t\t\t}\r\n\r\n\t\t\tthis.vDomScrollPosTop = this.scrollTop;\r\n\t\t\tthis.vDomScrollPosBottom = this.scrollTop;\r\n\r\n\t\t\tholder.scrollTop = this.scrollTop;\r\n\r\n\t\t\tthis.dispatch(\"render-virtual-fill\");\r\n\t\t}\r\n\t}\r\n\r\n\t_addTopRow(rows, fillableSpace){\r\n\t\tvar table = this.tableElement,\r\n\t\taddedRows = [],\r\n\t\tpaddingAdjust = 0,\r\n\t\tindex = this.vDomTop -1,\r\n\t\ti = 0;\r\n\r\n\t\twhile(true){\r\n\t\t\tif(this.vDomTop){\r\n\t\t\t\tlet row = rows[index],\r\n\t\t\t\trowHeight, initialized;\r\n\r\n\t\t\t\tif(row && i < this.vDomMaxRenderChain){\r\n\t\t\t\t\trowHeight = row.getHeight() || this.vDomRowHeight;\r\n\t\t\t\t\tinitialized = row.initialized;\r\n\r\n\t\t\t\t\tif(fillableSpace >= rowHeight){\r\n\r\n\t\t\t\t\t\tthis.styleRow(row, index);\r\n\t\t\t\t\t\ttable.insertBefore(row.getElement(), table.firstChild);\r\n\r\n\t\t\t\t\t\tif(!row.initialized || !row.heightInitialized){\r\n\t\t\t\t\t\t\taddedRows.push(row);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\trow.initialize();\r\n\r\n\t\t\t\t\t\tif(!initialized){\r\n\t\t\t\t\t\t\trowHeight = row.getElement().offsetHeight;\r\n\r\n\t\t\t\t\t\t\tif(rowHeight > this.vDomWindowBuffer){\r\n\t\t\t\t\t\t\t\tthis.vDomWindowBuffer = rowHeight * 2;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tfillableSpace -= rowHeight;\r\n\t\t\t\t\t\tpaddingAdjust += rowHeight;\r\n\r\n\t\t\t\t\t\tthis.vDomTop--;\r\n\t\t\t\t\t\tindex--;\r\n\t\t\t\t\t\ti++;\r\n\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}else{\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\r\n\t\t\t}else{\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfor (let row of addedRows){\r\n\t\t\trow.clearCellHeight();\r\n\t\t}\r\n\r\n\t\tthis._quickNormalizeRowHeight(addedRows);\r\n\r\n\t\tif(paddingAdjust){\r\n\t\t\tthis.vDomTopPad -= paddingAdjust;\r\n\r\n\t\t\tif(this.vDomTopPad < 0){\r\n\t\t\t\tthis.vDomTopPad = index * this.vDomRowHeight;\r\n\t\t\t}\r\n\r\n\t\t\tif(index < 1){\r\n\t\t\t\tthis.vDomTopPad = 0;\r\n\t\t\t}\r\n\r\n\t\t\ttable.style.paddingTop = this.vDomTopPad + \"px\";\r\n\t\t\tthis.vDomScrollPosTop -= paddingAdjust;\r\n\t\t}\r\n\t}\r\n\r\n\t_removeTopRow(rows, fillableSpace){\r\n\t\tvar removableRows = [],\r\n\t\tpaddingAdjust = 0,\r\n\t\ti = 0;\r\n\r\n\t\twhile(true){\r\n\t\t\tlet row = rows[this.vDomTop],\r\n\t\t\trowHeight, diff;\r\n\r\n\t\t\tif(row && i < this.vDomMaxRenderChain){\r\n\t\t\t\trowHeight = row.getHeight() || this.vDomRowHeight;\r\n\r\n\t\t\t\tif(fillableSpace >= rowHeight){\r\n\t\t\t\t\tthis.vDomTop++;\r\n\r\n\t\t\t\t\tfillableSpace -= rowHeight;\r\n\t\t\t\t\tpaddingAdjust += rowHeight;\r\n\r\n\t\t\t\t\tremovableRows.push(row);\r\n\t\t\t\t\ti++;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfor (let row of removableRows){\r\n\t\t\tlet rowEl = row.getElement();\r\n\r\n\t\t\tif(rowEl.parentNode){\r\n\t\t\t\trowEl.parentNode.removeChild(rowEl);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(paddingAdjust){\r\n\t\t\tthis.vDomTopPad += paddingAdjust;\r\n\t\t\tthis.tableElement.style.paddingTop = this.vDomTopPad + \"px\";\r\n\t\t\tthis.vDomScrollPosTop += this.vDomTop ? paddingAdjust : paddingAdjust + this.vDomWindowBuffer;\r\n\t\t}\r\n\t}\r\n\r\n\t_addBottomRow(rows, fillableSpace){\r\n\t\tvar table = this.tableElement,\r\n\t\taddedRows = [],\r\n\t\tpaddingAdjust = 0,\r\n\t\tindex = this.vDomBottom + 1,\r\n\t\ti = 0;\r\n\r\n\t\twhile(true){\r\n\t\t\tlet row = rows[index],\r\n\t\t\trowHeight, initialized;\r\n\r\n\t\t\tif(row && i < this.vDomMaxRenderChain){\r\n\t\t\t\trowHeight = row.getHeight() || this.vDomRowHeight;\r\n\t\t\t\tinitialized = row.initialized;\r\n\r\n\t\t\t\tif(fillableSpace >= rowHeight){\r\n\r\n\t\t\t\t\tthis.styleRow(row, index);\r\n\t\t\t\t\ttable.appendChild(row.getElement());\r\n\r\n\t\t\t\t\tif(!row.initialized || !row.heightInitialized){\r\n\t\t\t\t\t\taddedRows.push(row);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\trow.initialize();\r\n\r\n\t\t\t\t\tif(!initialized){\r\n\t\t\t\t\t\trowHeight = row.getElement().offsetHeight;\r\n\r\n\t\t\t\t\t\tif(rowHeight > this.vDomWindowBuffer){\r\n\t\t\t\t\t\t\tthis.vDomWindowBuffer = rowHeight * 2;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tfillableSpace -= rowHeight;\r\n\t\t\t\t\tpaddingAdjust += rowHeight;\r\n\r\n\t\t\t\t\tthis.vDomBottom++;\r\n\t\t\t\t\tindex++;\r\n\t\t\t\t\ti++;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfor (let row of addedRows){\r\n\t\t\trow.clearCellHeight();\r\n\t\t}\r\n\r\n\t\tthis._quickNormalizeRowHeight(addedRows);\r\n\r\n\t\tif(paddingAdjust){\r\n\t\t\tthis.vDomBottomPad -= paddingAdjust;\r\n\r\n\t\t\tif(this.vDomBottomPad < 0 || index == rows.length -1){\r\n\t\t\t\tthis.vDomBottomPad = 0;\r\n\t\t\t}\r\n\r\n\t\t\ttable.style.paddingBottom = this.vDomBottomPad + \"px\";\r\n\t\t\tthis.vDomScrollPosBottom += paddingAdjust;\r\n\t\t}\r\n\t}\r\n\r\n\t_removeBottomRow(rows, fillableSpace){\r\n\t\tvar removableRows = [],\r\n\t\tpaddingAdjust = 0,\r\n\t\ti = 0;\r\n\r\n\t\twhile(true){\r\n\t\t\tlet row = rows[this.vDomBottom],\r\n\t\t\trowHeight, diff;\r\n\r\n\t\t\tif(row && i < this.vDomMaxRenderChain){\r\n\t\t\t\trowHeight = row.getHeight() || this.vDomRowHeight;\r\n\r\n\t\t\t\tif(fillableSpace >= rowHeight){\r\n\t\t\t\t\tthis.vDomBottom --;\r\n\r\n\t\t\t\t\tfillableSpace -= rowHeight;\r\n\t\t\t\t\tpaddingAdjust += rowHeight;\r\n\r\n\t\t\t\t\tremovableRows.push(row);\r\n\t\t\t\t\ti++;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfor (let row of removableRows){\r\n\t\t\tlet rowEl = row.getElement();\r\n\r\n\t\t\tif(rowEl.parentNode){\r\n\t\t\t\trowEl.parentNode.removeChild(rowEl);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(paddingAdjust){\r\n\t\t\tthis.vDomBottomPad += paddingAdjust;\r\n\r\n\t\t\tif(this.vDomBottomPad < 0){\r\n\t\t\t\tthis.vDomBottomPad = 0;\r\n\t\t\t}\r\n\r\n\t\t\tthis.tableElement.style.paddingBottom = this.vDomBottomPad + \"px\";\r\n\t\t\tthis.vDomScrollPosBottom -= paddingAdjust;\r\n\t\t}\r\n\t}\r\n\r\n\t_quickNormalizeRowHeight(rows){\r\n\t\tfor(let row of rows){\r\n\t\t\trow.calcHeight();\r\n\t\t}\r\n\r\n\t\tfor(let row of rows){\r\n\t\t\trow.setCellHeight();\r\n\t\t}\r\n\t}\r\n}","import CoreFeature from './CoreFeature.js';\r\nimport Row from './row/Row.js';\r\nimport RowComponent from './row/RowComponent.js';\r\nimport Helpers from './tools/Helpers.js';\r\n\r\nimport RendererBasicVertical from './rendering/renderers/BasicVertical.js';\r\nimport RendererVirtualDomVertical from './rendering/renderers/VirtualDomVertical.js';\r\n\r\nexport default class RowManager extends CoreFeature{\r\n\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.rowNumColumn = false; //hold column component for row number column\r\n\t\t\r\n\t\tthis.redrawBlock = false; //prevent redraws to allow multiple data manipulations before continuing\r\n\t\tthis.redrawBlockRestoreConfig = false; //store latest redraw function calls for when redraw is needed\r\n\t\tthis.redrawBlockRenderInPosition = false; //store latest redraw function calls for when redraw is needed\r\n\t\t\r\n\t\tthis.dataPipeline = []; //hold data pipeline tasks\r\n\t\tthis.displayPipeline = []; //hold data display pipeline tasks\r\n\t\t\r\n\t\tthis.renderer = null;\r\n\t}\r\n\t\r\n\t//////////////// Setup Functions /////////////////\r\n\t\r\n\tcreateHolderElement (){\r\n\t\tvar el = document.createElement(\"div\");\r\n\t\t\r\n\t\tel.classList.add(\"tabulator-tableholder\");\r\n\t\tel.setAttribute(\"tabindex\", 0);\r\n\t\tel.setAttribute(\"role\", \"rowgroup\");\r\n\t\t\r\n\t\treturn el;\r\n\t}\r\n\t\r\n\tcreateTableElement (){\r\n\t\tvar el = document.createElement(\"div\");\r\n\t\t\r\n\t\tel.classList.add(\"tabulator-table\");\r\n\t\tel.setAttribute(\"role\", \"rowgroup\");\r\n\t\t\r\n\t\treturn el;\r\n\t}\r\n\t\r\n\tinitializePlaceholder(){\r\n\t\t//configure placeholder element\r\n\t\tif(typeof this.table.options.placeholder == \"string\"){\r\n\t\t\tlet el = document.createElement(\"div\");\r\n\t\t\tel.classList.add(\"tabulator-placeholder\");\r\n\t\t\t\r\n\t\t\tlet contents = document.createElement(\"div\");\r\n\t\t\tcontents.classList.add(\"tabulator-placeholder-contents\");\r\n\t\t\tcontents.innerHTML = this.table.options.placeholder;\r\n\t\t\t\r\n\t\t\tel.appendChild(contents);\r\n\t\t\t\r\n\t\t\tthis.placeholderContents = contents;\r\n\t\t\tthis.placeholder = el;\r\n\t\t}\r\n\t}\r\n\t\r\n\t//return containing element\r\n\tgetElement(){\r\n\t\treturn this.element;\r\n\t}\r\n\t\r\n\t//return table element\r\n\tgetTableElement(){\r\n\t\treturn this.tableElement;\r\n\t}\r\n\t\r\n\t//return position of row in table\r\n\tgetRowPosition(row, active){\r\n\t\tif(active){\r\n\t\t\treturn this.activeRows.indexOf(row);\r\n\t\t}else{\r\n\t\t\treturn this.rows.indexOf(row);\r\n\t\t}\r\n\t}\r\n\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\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}\r\n\t\t}else if(typeof subject == \"undefined\" || subject === null){\r\n\t\t\treturn false;\r\n\t\t}else{\r\n\t\t\t//subject should be treated as the index of the row\r\n\t\t\tlet match = this.rows.find((row) => {\r\n\t\t\t\treturn row.data[this.table.options.index] == subject;\r\n\t\t\t});\r\n\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, active){\r\n\t\tif(active){\r\n\t\t\treturn this.activeRows[position];\r\n\t\t}else{\r\n\t\t\treturn this.rows[position];\r\n\t\t}\r\n\t}\r\n\t\r\n\tscrollToRow(row, position, ifVisible){\r\n\t\treturn this.renderer.scrollToRowPosition(row, position, ifVisible);\r\n\t}\r\n\t\r\n\t////////////////// Data Handling //////////////////\r\n\tsetData(data, renderInPosition, columnsChanged){\r\n\t\treturn new Promise((resolve, reject)=>{\r\n\t\t\tif(renderInPosition && this.getDisplayRows().length){\r\n\t\t\t\tif(this.table.options.pagination){\r\n\t\t\t\t\tthis._setDataActual(data, true);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tthis.reRenderInPosition(() => {\r\n\t\t\t\t\t\tthis._setDataActual(data);\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tif(this.table.options.autoColumns && columnsChanged && this.table.initialized){\r\n\t\t\t\t\tthis.table.columnManager.generateColumnsFromRowData(data);\r\n\t\t\t\t}\r\n\t\t\t\tthis.resetScroll();\r\n\t\t\t\t\r\n\t\t\t\tthis._setDataActual(data);\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tresolve();\r\n\t\t});\r\n\t}\r\n\t\r\n\t_setDataActual(data, renderInPosition){\r\n\t\tthis.dispatchExternal(\"dataProcessing\", data);\r\n\t\t\r\n\t\tthis._wipeElements();\r\n\t\t\r\n\t\tif(Array.isArray(data)){\r\n\t\t\tthis.dispatch(\"data-processing\", data);\r\n\t\t\t\r\n\t\t\tdata.forEach((def, i) => {\r\n\t\t\t\tif(def && typeof def === \"object\"){\r\n\t\t\t\t\tvar row = new Row(def, this);\r\n\t\t\t\t\tthis.rows.push(row);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.warn(\"Data Loading Warning - Invalid row data detected and ignored, expecting object but received:\", def);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\t\r\n\t\t\tthis.refreshActiveData(false, false, renderInPosition);\r\n\t\t\t\r\n\t\t\tthis.dispatch(\"data-processed\", data);\r\n\t\t\tthis.dispatchExternal(\"dataProcessed\", data);\r\n\t\t}else{\r\n\t\t\tconsole.error(\"Data Loading Error - Unable to process data due to invalid data type \\nExpecting: array \\nReceived: \", typeof data, \"\\nData: \", data);\r\n\t\t}\r\n\t}\r\n\t\r\n\t_wipeElements(){\r\n\t\tthis.dispatch(\"rows-wipe\");\r\n\t\t\r\n\t\tthis.rows.forEach((row) => {\r\n\t\t\trow.wipe();\r\n\t\t});\r\n\t\t\r\n\t\tthis.rows = [];\r\n\t\tthis.activeRows = [];\r\n\t\tthis.activeRowsPipeline = [];\r\n\t\tthis.activeRowsCount = 0;\r\n\t\tthis.displayRows = [];\r\n\t\tthis.displayRowsCount = 0;\r\n\t\t\r\n\t\tthis.adjustTableSize();\r\n\t}\r\n\t\r\n\tdeleteRow(row, blockRedraw){\r\n\t\tvar allIndex = this.rows.indexOf(row),\r\n\t\tactiveIndex = this.activeRows.indexOf(row);\r\n\t\t\r\n\t\tif(activeIndex > -1){\r\n\t\t\tthis.activeRows.splice(activeIndex, 1);\r\n\t\t}\r\n\t\t\r\n\t\tif(allIndex > -1){\r\n\t\t\tthis.rows.splice(allIndex, 1);\r\n\t\t}\r\n\t\t\r\n\t\tthis.setActiveRows(this.activeRows);\r\n\t\t\r\n\t\tthis.displayRowIterator((rows) => {\r\n\t\t\tvar displayIndex = rows.indexOf(row);\r\n\t\t\t\r\n\t\t\tif(displayIndex > -1){\r\n\t\t\t\trows.splice(displayIndex, 1);\r\n\t\t\t}\r\n\t\t});\r\n\t\t\r\n\t\tif(!blockRedraw){\r\n\t\t\tthis.reRenderInPosition();\r\n\t\t}\r\n\t\t\r\n\t\tthis.regenerateRowNumbers();\r\n\t\t\r\n\t\tthis.dispatchExternal(\"rowDeleted\", row.getComponent());\r\n\t\t\r\n\t\tif(!this.displayRowsCount){\r\n\t\t\tthis._showPlaceholder();\r\n\t\t}\r\n\t\t\r\n\t\tif(this.subscribedExternal(\"dataChanged\")){\r\n\t\t\tthis.dispatchExternal(\"dataChanged\", this.getData());\r\n\t\t}\r\n\t}\r\n\t\r\n\taddRow(data, pos, index, blockRedraw){\r\n\t\tvar row = this.addRowActual(data, pos, index, blockRedraw);\r\n\t\treturn row;\r\n\t}\r\n\t\r\n\t//add multiple rows\r\n\taddRows(data, pos, index){\r\n\t\tvar length = 0,\r\n\t\trows = [];\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\tlength = data.length - 1;\r\n\t\t\t\r\n\t\t\tif((typeof index == \"undefined\" && pos) || (typeof index !== \"undefined\" && !pos)){\r\n\t\t\t\tdata.reverse();\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tdata.forEach((item, i) => {\r\n\t\t\t\tvar row = this.addRow(item, pos, index, true);\r\n\t\t\t\trows.push(row);\r\n\t\t\t\tthis.dispatch(\"row-added\", row, data, pos, index);\r\n\t\t\t});\r\n\t\t\t\r\n\t\t\tthis.refreshActiveData(false, false, true);\r\n\t\t\t\r\n\t\t\tthis.regenerateRowNumbers();\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.regenerateRowNumbers();\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\tdisplayIndex;\r\n\t\t\r\n\t\t\r\n\t\tif(typeof handler === \"function\"){\r\n\t\t\tindex = this.dataPipeline.findIndex((item) => {\r\n\t\t\t\treturn item.handler === handler;\r\n\t\t\t});\r\n\t\t\t\r\n\t\t\tif(index > -1){\r\n\t\t\t\tstage = \"dataPipeline\";\r\n\t\t\t\t\r\n\t\t\t\tif(skipStage){\r\n\t\t\t\t\tif(index == this.dataPipeline.length - 1){\r\n\t\t\t\t\t\tstage = \"display\";\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tindex++;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tindex = this.displayPipeline.findIndex((item) => {\r\n\t\t\t\t\treturn item.handler === handler;\r\n\t\t\t\t});\r\n\t\t\t\t\r\n\t\t\t\tif(index > -1){\r\n\t\t\t\t\tstage = \"displayPipeline\";\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.displayPipeline.length - 1){\r\n\t\t\t\t\t\t\tstage = \"end\";\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\tindex++;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.error(\"Unable to refresh data, invalid handler provided\", handler)\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tstage = handler || \"all\";\r\n\t\t\tindex = 0;\r\n\t\t}\r\n\t\t\r\n\t\tif(this.redrawBlock){\r\n\t\t\tif(!this.redrawBlockRestoreConfig || (this.redrawBlockRestoreConfig && ((this.redrawBlockRestoreConfig.stage === stage && index < this.redrawBlockRestoreConfig.index) || (cascadeOrder.indexOf(stage) < cascadeOrder.indexOf(this.redrawBlockRestoreConfig.stage))))){\r\n\t\t\t\tthis.redrawBlockRestoreConfig = {\r\n\t\t\t\t\thandler: handler,\r\n\t\t\t\t\tskipStage: skipStage,\r\n\t\t\t\t\trenderInPosition: renderInPosition,\r\n\t\t\t\t\tstage:stage,\r\n\t\t\t\t\tindex:index,\r\n\t\t\t\t};\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn;\r\n\t\t}else{\r\n\t\t\tif(Helpers.elVisible(this.element)){\r\n\t\t\t\tif(renderInPosition){\r\n\t\t\t\t\tthis.reRenderInPosition(this.refreshPipelines.bind(this, handler, stage, index, renderInPosition));\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\t\r\n\t\t\t\t\tif(!handler){\r\n\t\t\t\t\t\tthis.table.columnManager.renderer.renderColumns();\r\n\t\t\t\t\t}\r\n\t\t\t\t\t\r\n\t\t\t\t\tthis.renderTable();\r\n\t\t\t\t\t\r\n\t\t\t\t\tif(table.options.layoutColumnsOnNewData){\r\n\t\t\t\t\t\tthis.table.columnManager.redraw(true);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tthis.refreshPipelines(handler, stage, index, renderInPosition);\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tthis.dispatch(\"data-refreshed\");\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 alldata needs refreshing\r\n\t\t\t\r\n\t\t\tcase \"dataPipeline\":\r\n\t\t\t\r\n\t\t\tfor(let i = index; i < this.dataPipeline.length; i++){\r\n\t\t\t\tlet result = this.dataPipeline[i].handler(this.activeRowsPipeline[i].slice(0));\r\n\t\t\t\t\r\n\t\t\t\tthis.activeRowsPipeline[i + 1] = result || this.activeRowsPipeline[i].slice(0);\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tthis.setActiveRows(this.activeRowsPipeline[this.dataPipeline.length]);\r\n\t\t\t\r\n\t\t\tthis.regenerateRowNumbers();\r\n\t\t\t\r\n\t\t\tcase \"display\":\r\n\t\t\tindex = 0;\r\n\t\t\tthis.resetDisplayRows();\r\n\t\t\t\r\n\t\t\tcase \"displayPipeline\":\r\n\t\t\tfor(let i = index; i < this.displayPipeline.length; i++){\r\n\t\t\t\tlet result = this.displayPipeline[i].handler((i ? this.getDisplayRows(i - 1) : this.activeRows).slice(0), renderInPosition);\r\n\t\t\t\t\r\n\t\t\t\tthis.setDisplayRows(result || this.getDisplayRows(i - 1).slice(0), i);\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tcase \"end\":\r\n\t\t\t//case to handle scenario when trying to skip past end stage\r\n\t\t}\r\n\t}\r\n\t\r\n\t//regenerate row numbers for row number formatter if in use\r\n\tregenerateRowNumbers(){\r\n\t\tif(this.rowNumColumn){\r\n\t\t\tthis.activeRows.forEach((row) => {\r\n\t\t\t\tvar cell = row.getCell(this.rowNumColumn);\r\n\t\t\t\t\r\n\t\t\t\tif(cell){\r\n\t\t\t\t\tcell._generateContents();\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\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\tgetNextDisplayIndex(){\r\n\t\treturn this.displayRows.length;\r\n\t}\r\n\t\r\n\t//set display row pipeline data\r\n\tsetDisplayRows(displayRows, index){\r\n\t\t\r\n\t\tvar output = true;\r\n\t\t\r\n\t\tif(index && typeof this.displayRows[index] != \"undefined\"){\r\n\t\t\tthis.displayRows[index] = displayRows;\r\n\t\t\toutput = true;\r\n\t\t}else{\r\n\t\t\tthis.displayRows.push(displayRows)\r\n\t\t\toutput = index = this.displayRows.length -1;\r\n\t\t}\r\n\t\t\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\t\r\n\t\treturn output;\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 accross 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\t\t\r\n\t\tswitch(type){\r\n\t\t\tcase \"active\":\r\n\t\t\trows = this.activeRows;\r\n\t\t\tbreak;\r\n\t\t\t\r\n\t\t\tcase \"display\":\r\n\t\t\trows = this.table.rowManager.getDisplayRows();\r\n\t\t\tbreak;\r\n\t\t\t\r\n\t\t\tcase \"visible\":\r\n\t\t\trows = this.getVisibleRows(false, true);\r\n\t\t\tbreak;\r\n\t\t\t\r\n\t\t\tdefault:\r\n\t\t\trows = this.chain(\"rows-retrieve\", type, null, this.rows) || this.rows;\r\n\t\t}\r\n\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.renderer.rerenderRows(callback);\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.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:\", 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();\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tthis.renderEmptyScroll();\r\n\t\t}\r\n\t\t\r\n\t\tif(!this.fixedHeight){\r\n\t\t\tthis.adjustTableSize();\r\n\t\t}\r\n\t\t\r\n\t\tthis.dispatch(\"table-layout\");\r\n\t\t\r\n\t\tif(!this.displayRowsCount){\r\n\t\t\tthis._showPlaceholder();\r\n\t\t}\r\n\t\t\r\n\t\tthis.dispatchExternal(\"renderComplete\");\r\n\t}\r\n\t\r\n\t//show scrollbars on empty table div\r\n\trenderEmptyScroll(){\r\n\t\tif(this.placeholder){\r\n\t\t\tthis.tableElement.style.display = \"none\";\r\n\t\t}else{\r\n\t\t\tthis.tableElement.style.minWidth = this.table.columnManager.getWidth() + \"px\";\r\n\t\t\t// this.tableElement.style.minHeight = \"1px\";\r\n\t\t\t// this.tableElement.style.visibility = \"hidden\";\r\n\t\t}\r\n\t}\r\n\t\r\n\t_clearTable(){\r\n\t\tvar element = this.tableElement;\r\n\t\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\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,\r\n\t\tmodExists;\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\tthis.element.style.minHeight = \"calc(100% - \" + otherHeight + \"px)\";\r\n\t\t\t\tthis.element.style.height = \"calc(100% - \" + otherHeight + \"px)\";\r\n\t\t\t\tthis.element.style.maxHeight = \"calc(100% - \" + otherHeight + \"px)\";\r\n\t\t\t}else{\r\n\t\t\t\tthis.element.style.height = \"\";\r\n\t\t\t\tthis.element.style.height = (this.table.element.clientHeight - otherHeight) + \"px\";\r\n\t\t\t\tthis.element.scrollTop = this.scrollTop;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tthis.renderer.resize();\r\n\t\t\t\r\n\t\t\t//check if the table has changed size when dealing with variable height tables\r\n\t\t\tif(!this.fixedHeight && initialHeight != this.element.clientHeight){\r\n\t\t\t\tif(this.subscribed(\"table-resize\")){\r\n\t\t\t\t\tthis.dispatch(\"table-resize\");\r\n\t\t\t\t}else{\r\n\t\t\t\t\tthis.redraw();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis._positionPlaceholder();\r\n\t}\r\n\t\r\n\t//renitialize all rows\r\n\treinitialize(){\r\n\t\tthis.rows.forEach(function(row){\r\n\t\t\trow.reinitialize(true);\r\n\t\t});\r\n\t}\r\n\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 pos = 0,\r\n\t\tleft = 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\tthis.links = [];\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\tif(this.table.options.footerElement[0] === \"<\"){\r\n\t\t\t\t\tthis.containerElement.innerHTML = this.table.options.footerElement;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tthis.external = true;\r\n\t\t\t\t\tthis.containerElement = document.querySelector(this.table.options.footerElement);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tdefault:\r\n\t\t\t\tthis.element = this.table.options.footerElement;\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tgetElement(){\r\n\t\treturn this.element;\r\n\t}\r\n\r\n\tappend(element, parent){\r\n\t\tthis.activate(parent);\r\n\r\n\t\tthis.containerElement.appendChild(element);\r\n\t\tthis.table.rowManager.adjustTableSize();\r\n\t}\r\n\r\n\tprepend(element, parent){\r\n\t\tthis.activate(parent);\r\n\r\n\t\tthis.element.insertBefore(element, this.element.firstChild);\r\n\t\tthis.table.rowManager.adjustTableSize();\r\n\t}\r\n\r\n\tremove(element){\r\n\t\telement.parentNode.removeChild(element);\r\n\t\tthis.deactivate();\r\n\t}\r\n\r\n\tdeactivate(force){\r\n\t\tif(!this.element.firstChild || force){\r\n\t\t\tif(!this.external){\r\n\t\t\t\tthis.element.parentNode.removeChild(this.element);\r\n\t\t\t}\r\n\t\t\tthis.active = false;\r\n\t\t}\r\n\t}\r\n\r\n\tactivate(parent){\r\n\t\tif(!this.active){\r\n\t\t\tthis.active = true;\r\n\t\t\tif(!this.external){\r\n\t\t\t\tthis.table.element.appendChild(this.getElement());\r\n\t\t\t\tthis.table.element.style.display = '';\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(parent){\r\n\t\t\tthis.links.push(parent);\r\n\t\t}\r\n\t}\r\n\r\n\tredraw(){\r\n\t\tthis.links.forEach(function(link){\r\n\t\t\tlink.footerRedraw();\r\n\t\t});\r\n\t}\r\n}","import CoreFeature from '../CoreFeature.js';\r\nimport Helpers from './Helpers.js';\r\nimport Row from '../row/Row.js';\r\n\r\nexport default class InteractionManager extends CoreFeature {\r\n\t\r\n\tconstructor (table){\r\n\t\tsuper(table);\r\n\t\t\r\n\t\tthis.el = null;\r\n\t\t\r\n\t\tthis.abortClasses = [\"tabulator-headers\", \"tabulator-table\"];\r\n\t\t\r\n\t\tthis.previousTargets = {};\r\n\t\t\r\n\t\tthis.listeners = [\r\n\t\t\t\"click\",\r\n\t\t\t\"dblclick\",\r\n\t\t\t\"contextmenu\",\r\n\t\t\t\"mouseenter\",\r\n\t\t\t\"mouseleave\",\r\n\t\t\t\"mouseover\",\r\n\t\t\t\"mouseout\",\r\n\t\t\t\"mousemove\",\r\n\t\t\t\"touchstart\",\r\n\t\t\t\"touchend\",\r\n\t\t];\r\n\t\t\r\n\t\tthis.componentMap = {\r\n\t\t\t\"tabulator-cell\":\"cell\",\r\n\t\t\t\"tabulator-row\":\"row\",\r\n\t\t\t\"tabulator-group\":\"group\",\r\n\t\t\t\"tabulator-col\":\"column\",\r\n\t\t};\r\n\t\t\r\n\t\tthis.pseudoTrackers = {\r\n\t\t\t\"row\":{\r\n\t\t\t\tsubscriber:null,\r\n\t\t\t\ttarget:null,\r\n\t\t\t},\r\n\t\t\t\"cell\":{\r\n\t\t\t\tsubscriber:null,\r\n\t\t\t\ttarget:null,\r\n\t\t\t},\r\n\t\t\t\"group\":{\r\n\t\t\t\tsubscriber:null,\r\n\t\t\t\ttarget:null,\r\n\t\t\t},\r\n\t\t\t\"column\":{\r\n\t\t\t\tsubscriber:null,\r\n\t\t\t\ttarget:null,\r\n\t\t\t},\r\n\t\t}\r\n\t\t\r\n\t\tthis.pseudoTracking = false;\r\n\t}\r\n\t\r\n\tinitialize(){\r\n\t\tthis.el = this.table.element;\r\n\t\t\r\n\t\tthis.buildListenerMap();\r\n\t\tthis.bindSubscriptionWatchers();\r\n\t}\r\n\t\r\n\tbuildListenerMap(){\r\n\t\tvar listenerMap = {};\r\n\t\t\r\n\t\tthis.listeners.forEach((listener) => {\r\n\t\t\tlistenerMap[listener] = {\r\n\t\t\t\thandler:null,\r\n\t\t\t\tcomponents:[],\r\n\t\t\t}\r\n\t\t})\r\n\t\t\r\n\t\tthis.listeners = listenerMap;\r\n\t}\r\n\t\r\n\tbindPseudoEvents(){\r\n\t\tObject.keys(this.pseudoTrackers).forEach((key) => {\r\n\t\t\tthis.pseudoTrackers[key].subscriber = this.pseudoMouseEnter.bind(this, key);\r\n\t\t\tthis.subscribe(key + \"-mouseover\", this.pseudoTrackers[key].subscriber);\r\n\t\t});\r\n\t\t\r\n\t\tthis.pseudoTracking = true;\r\n\t}\r\n\t\r\n\tpseudoMouseEnter(key, e, target){\r\n\t\tif(this.pseudoTrackers[key].target !== target){\r\n\t\t\t\r\n\t\t\tif(this.pseudoTrackers[key].target){\r\n\t\t\t\tthis.dispatch(key + \"-mouseleave\", e, 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\ttargets[this.componentMap[target]] = el;\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\ttargetMatches = {};\r\n\t\t\r\n\t\tfor(let key of keys){\r\n\t\t\tlet component;\r\n\t\t\tlet target = targets[key];\r\n\t\t\tlet previousTarget = this.previousTargets[key];\r\n\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\tif(listener.components.includes(\"row\") || listener.components.includes(\"cell\") || listener.components.includes(\"group\")){\r\n\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\tcomponent = rows.find((row) => {\r\n\t\t\t\t\t\t\treturn row.getElement() === target;\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\r\n\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\ttargets[key] = false;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\t\tcase \"column\":\r\n\t\t\t\t\tif(listener.components.includes(\"column\")){\r\n\t\t\t\t\t\tcomponent = this.table.columnManager.findColumn(target);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak\r\n\t\t\t\t\t\r\n\t\t\t\t\tcase \"cell\":\r\n\t\t\t\t\tif(listener.components.includes(\"cell\")){\r\n\t\t\t\t\t\tif(targets[\"row\"] instanceof Row){\r\n\t\t\t\t\t\t\tcomponent = targets[\"row\"].findCell(target);\r\n\t\t\t\t\t\t}else{\t\r\n\t\t\t\t\t\t\tif(targets[\"row\"]){\r\n\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}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif(component){\r\n\t\t\t\ttargets[key] = component;\r\n\t\t\t\ttargetMatches[key] = {\r\n\t\t\t\t\ttarget:target,\r\n\t\t\t\t\tcomponent:component,\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\tthis.previousTargets = targetMatches;\r\n\t\t\r\n\t\treturn targets;\r\n\t}\r\n\t\r\n\ttriggerEvents(type, e, targets){\r\n\t\tvar listener = this.listeners[type];\r\n\t\t\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\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}\r\n\t\t}\r\n\t}\r\n}\r\n","import CoreFeature from '../CoreFeature.js';\r\n\r\nexport default class DataLoader extends CoreFeature{\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.loaderElement = this.createLoaderElement(); //loader message div\r\n\t\tthis.msgElement = this.createMsgElement(); //message element\r\n\t\tthis.loadingElement = null;\r\n\t\tthis.errorElement = null;\r\n\r\n\t\tthis.requestOrder = 0; //prevent requests comming out of sequence if overridden by another load request\r\n\t\tthis.loading = false;\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tvar template;\r\n\r\n\t\tthis.loaderElement.appendChild(this.msgElement);\r\n\r\n\t\tif(this.table.options.dataLoaderLoading){\r\n\t\t\tif(typeof this.table.options.dataLoaderLoading == \"string\"){\r\n\t\t\t\ttemplate = document.createElement('template');\r\n\t\t\t\ttemplate.innerHTML = this.table.options.dataLoaderLoading.trim();\r\n\t\t\t\tthis.loadingElement = template.firstElementChild;\r\n\t\t\t}else{\r\n\t\t\t\tthis.loadingElement = this.table.options.dataLoaderLoading;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(this.table.options.dataLoaderError){\r\n\t\t\tif(typeof this.table.options.dataLoaderError == \"string\"){\r\n\t\t\t\ttemplate = document.createElement('template');\r\n\t\t\t\ttemplate.innerHTML = this.table.options.dataLoaderError.trim();\r\n\t\t\t\tthis.errorElement = template.firstElementChild;\r\n\t\t\t}else{\r\n\t\t\t\tthis.errorElement = this.table.options.dataLoaderError;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tcreateLoaderElement(){\r\n\t\tvar el = document.createElement(\"div\");\r\n\t\tel.classList.add(\"tabulator-loader\");\r\n\t\treturn el;\r\n\t}\r\n\r\n\tcreateMsgElement(){\r\n\t\tvar el = document.createElement(\"div\");\r\n\r\n\t\tel.classList.add(\"tabulator-loader-msg\");\r\n\t\tel.setAttribute(\"role\", \"alert\");\r\n\r\n\t\treturn el;\r\n\t}\r\n\r\n\tload(data, params, config, replace, silent){\r\n\t\tvar requestNo = ++this.requestOrder;\r\n\r\n\t\tthis.dispatchExternal(\"dataLoading\", data);\r\n\r\n\t\t//parse json data to array\r\n\t\tif (data && (data.indexOf(\"{\") == 0 || data.indexOf(\"[\") == 0)){\r\n\t\t\tdata = JSON.parse(data);\r\n\t\t}\r\n\r\n\t\tif(this.confirm(\"data-loading\", [data, params, config, silent])){\r\n\t\t\tthis.loading = true;\r\n\r\n\t\t\tif(!silent){\r\n\t\t\t\tthis.showLoader();\r\n\t\t\t}\r\n\r\n\t\t\t//get params for request\r\n\t\t\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.hideLoader();\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, !replace);\r\n\t\t\t\t\t}\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.warn(\"Data Load Response Blocked - An active data load request was blocked by an attempt to change table data while the request was being made\");\r\n\t\t\t\t}\r\n\t\t\t}).catch((error) => {\r\n\t\t\t\tconsole.error(\"Data Load Error: \", error);\r\n\t\t\t\tthis.dispatchExternal(\"dataLoadError\", error);\r\n\r\n\t\t\t\tif(!silent){\r\n\t\t\t\t\tthis.showError();\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\tsetTimeout(() => {\r\n\t\t\t\t\tthis.hideLoader();\r\n\t\t\t\t}, this.table.options.dataLoaderErrorTimeout);\r\n\t\t\t})\r\n\t\t\t.finally(() => {\r\n\t\t\t\tthis.loading = false;\r\n\t\t\t})\r\n\t\t}else{\r\n\t\t\tthis.dispatchExternal(\"dataLoaded\", data);\r\n\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, !replace);\r\n\t\t\treturn Promise.resolve();\r\n\t\t}\r\n\t}\r\n\r\n\tmapParams(params, map){\r\n\t\tvar output = {};\r\n\r\n\t\tfor(let key in params){\r\n\t\t\toutput[map.hasOwnProperty(key) ? map[key] : key] = params[key];\r\n\t\t}\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tobjectInvert(obj){\r\n\t\tvar output = {};\r\n\r\n\t\tfor(let key in obj){\r\n\t\t\toutput[obj[key]] = key;\r\n\t\t}\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tblockActiveLoad(){\r\n\t\tthis.requestOrder++;\r\n\t}\r\n\r\n\tshowLoader(){\r\n\t\tvar shouldLoad = typeof this.table.options.dataLoader === \"function\" ? this.table.options.dataLoader() : this.table.options.dataLoader;\r\n\r\n\t\tif(shouldLoad){\r\n\t\t\tthis.hideLoader();\r\n\r\n\t\t\twhile(this.msgElement.firstChild) this.msgElement.removeChild(this.msgElement.firstChild);\r\n\r\n\t\t\tthis.msgElement.classList.remove(\"tabulator-error\");\r\n\t\t\tthis.msgElement.classList.add(\"tabulator-loading\");\r\n\r\n\t\t\tif(this.loadingElement){\r\n\t\t\t\tthis.msgElement.appendChild(this.loadingElement);\r\n\t\t\t}else{\r\n\t\t\t\tthis.msgElement.innerHTML = this.langText(\"data|loading\");\r\n\t\t\t}\r\n\r\n\t\t\tthis.table.element.appendChild(this.loaderElement);\r\n\t\t}\r\n\t}\r\n\r\n\tshowError(){\r\n\t\tthis.hideLoader();\r\n\r\n\t\twhile(this.msgElement.firstChild) this.msgElement.removeChild(this.msgElement.firstChild);\r\n\t\tthis.msgElement.classList.remove(\"tabulator-loading\");\r\n\t\tthis.msgElement.classList.add(\"tabulator-error\");\r\n\r\n\t\tif(this.errorElement){\r\n\t\t\tthis.msgElement.appendChild(this.errorElement);\r\n\t\t}else{\r\n\t\t\tthis.msgElement.innerHTML = this.langText(\"data|error\");\r\n\t\t}\r\n\r\n\t\tthis.table.element.appendChild(this.loaderElement);\r\n\t}\r\n\r\n\r\n\thideLoader(){\r\n\t\tif(this.loaderElement.parentNode){\r\n\t\t\tthis.loaderElement.parentNode.removeChild(this.loaderElement);\r\n\t\t}\r\n\t}\r\n}","export default class ExternalEventBus {\r\n\r\n\tconstructor(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._notifiySubscriptionChange(key, true);\r\n\t\t}\r\n\t}\r\n\r\n\tsubscribe(key, callback){\r\n\t\tif(!this.events[key]){\r\n\t\t\tthis.events[key] = [];\r\n\t\t}\r\n\r\n\t\tthis.events[key].push(callback);\r\n\r\n\t\tthis._notifiySubscriptionChange(key, true);\r\n\t}\r\n\r\n\tunsubscribe(key, callback){\r\n\t\tvar index;\r\n\r\n\t\tif(this.events[key]){\r\n\t\t\tif(callback){\r\n\t\t\t\tindex = this.events[key].findIndex((item) => {\r\n\t\t\t\t\treturn item === callback;\r\n\t\t\t\t});\r\n\r\n\t\t\t\tif(index > -1){\r\n\t\t\t\t\tthis.events[key].splice(index, 1);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.warn(\"Cannot remove event, no matching event found:\", key, callback);\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tdelete this.events[key];\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Cannot remove event, no events set on:\", key);\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis._notifiySubscriptionChange(key, false);\r\n\t}\r\n\r\n\tsubscribed(key){\r\n\t\treturn this.events[key] && this.events[key].length;\r\n\t}\r\n\r\n\t_notifiySubscriptionChange(key, subscribed){\r\n\t\tvar notifiers = this.subscriptionNotifiers[key];\r\n\r\n\t\tif(notifiers){\r\n\t\t\tnotifiers.forEach((callback)=>{\r\n\t\t\t\tcallback(subscribed);\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\t_dispatch(){\r\n\t\tvar args = Array.from(arguments),\r\n\t\tkey = args.shift(),\r\n\t\tresult;\r\n\r\n\t\tif(this.events[key]){\r\n\t\t\tthis.events[key].forEach((callback, i) => {\r\n\t\t\t\tlet callResult = callback.apply(this.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._notifiySubscriptionChange(key, true);\r\n\t\t}\r\n\t}\r\n\r\n\tsubscribe(key, callback, priority = 10000){\r\n\t\tif(!this.events[key]){\r\n\t\t\tthis.events[key] = [];\r\n\t\t}\r\n\r\n\t\tthis.events[key].push({callback, priority});\r\n\r\n\t\tthis.events[key].sort((a, b) => {\r\n\t\t\treturn a.priority - b.priority;\r\n\t\t});\r\n\r\n\t\tthis._notifiySubscriptionChange(key, true);\r\n\t}\r\n\r\n\tunsubscribe(key, callback){\r\n\t\tvar index;\r\n\r\n\t\tif(this.events[key]){\r\n\t\t\tif(callback){\r\n\t\t\t\tindex = this.events[key].findIndex((item) => {\r\n\t\t\t\t\treturn item.callback === callback;\r\n\t\t\t\t});\r\n\r\n\t\t\t\tif(index > -1){\r\n\t\t\t\t\tthis.events[key].splice(index, 1);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.warn(\"Cannot remove event, no matching event found:\", key, callback);\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Cannot remove event, no events set on:\", key);\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis._notifiySubscriptionChange(key, false);\r\n\t}\r\n\r\n\tsubscribed(key){\r\n\t\treturn this.events[key] && this.events[key].length;\r\n\t}\r\n\r\n\t_chain(key, args, initialValue, fallback){\r\n\t\tvar value = initialValue;\r\n\r\n\t\tif(!Array.isArray(args)){\r\n\t\t\targs = [args];\r\n\t\t}\r\n\r\n\t\tif(this.subscribed(key)){\r\n\t\t\tthis.events[key].forEach((subscriber, i) => {\r\n\t\t\t\tvalue = subscriber.callback.apply(this, args.concat([value]));\r\n\t\t\t});\r\n\r\n\t\t\treturn value;\r\n\t\t}else{\r\n\t\t\treturn typeof fallback === \"function\" ? fallback() : fallback;\r\n\t\t}\r\n\t}\r\n\r\n\t_confirm(key, args){\r\n\t\tvar confirmed = false;\r\n\r\n\t\tif(!Array.isArray(args)){\r\n\t\t\targs = [args];\r\n\t\t}\r\n\r\n\t\tif(this.subscribed(key)){\r\n\t\t\tthis.events[key].forEach((subscriber, i) => {\r\n\t\t\t\tif(subscriber.callback.apply(this, args)){\r\n\t\t\t\t\tconfirmed = true;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn confirmed;\r\n\t}\r\n\r\n\t_notifiySubscriptionChange(key, subscribed){\r\n\t\tvar notifiers = this.subscriptionNotifiers[key];\r\n\r\n\t\tif(notifiers){\r\n\t\t\tnotifiers.forEach((callback)=>{\r\n\t\t\t\tcallback(subscribed);\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\t_dispatch(){\r\n\t\tvar args = Array.from(arguments),\r\n\t\tkey = args.shift();\r\n\r\n\t\tif(this.events[key]){\r\n\t\t\tthis.events[key].forEach((subscriber) => {\r\n\t\t\t\tlet callResult = subscriber.callback.apply(this, args);\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\t_debugDispatch(){\r\n\t\tvar args = Array.from(arguments),\r\n\t\tkey = args[0];\r\n\r\n\t\targs[0] = \"InternalEvent:\" + key;\r\n\r\n\t\tif(this.debug === true || this.debug.includes(key)){\r\n\t\t\tconsole.log(...args);\r\n\t\t}\r\n\r\n\t\treturn this._dispatch(...arguments);\r\n\t}\r\n\r\n\t_debugChain(){\r\n\t\tvar args = Array.from(arguments),\r\n\t\tkey = args[0];\r\n\r\n\t\targs[0] = \"InternalEvent:\" + key;\r\n\r\n\t\tif(this.debug === true || this.debug.includes(key)){\r\n\t\t\tconsole.log(...args);\r\n\t\t}\r\n\r\n\t\treturn this._chain(...arguments);\r\n\t}\r\n\r\n\t_debugConfirm(){\r\n\t\tvar args = Array.from(arguments),\r\n\t\tkey = args[0];\r\n\r\n\t\targs[0] = \"InternalEvent:\" + key;\r\n\r\n\t\tif(this.debug === true || this.debug.includes(key)){\r\n\t\t\tconsole.log(...args);\r\n\t\t}\r\n\r\n\t\treturn this._confirm(...arguments);\r\n\t}\r\n}","import Tabulator from '../Tabulator.js';\r\n\r\nclass TableRegistry {\r\n\r\n\tstatic register(table){\r\n\t\tTableRegistry.tables.push(table);\r\n\t}\r\n\r\n\tstatic deregister(table){\r\n\t\tvar index = TableRegistry.tables.indexOf(table);\r\n\r\n\t\tif(index > -1){\r\n\t\t\tTableRegistry.tables.splice(index, 1);\r\n\t\t}\r\n\t}\r\n\r\n\tstatic lookupTable(query, silent){\r\n\t\tvar results = [],\r\n\t\tmatches, match;\r\n\r\n\t\tif(typeof query === \"string\"){\r\n\t\t\tmatches = document.querySelectorAll(query);\r\n\r\n\t\t\tif(matches.length){\r\n\t\t\t\tfor(var i = 0; i < matches.length; i++){\r\n\t\t\t\t\tmatch = TableRegistry.matchElement(matches[i]);\r\n\r\n\t\t\t\t\tif(match){\r\n\t\t\t\t\t\tresults.push(match);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t}else if((typeof HTMLElement !== \"undefined\" && query instanceof HTMLElement) || query instanceof Tabulator){\r\n\t\t\tmatch = TableRegistry.matchElement(query);\r\n\r\n\t\t\tif(match){\r\n\t\t\t\tresults.push(match);\r\n\t\t\t}\r\n\t\t}else if(Array.isArray(query)){\r\n\t\t\tquery.forEach(function(item){\r\n\t\t\t\tresults = results.concat(TableRegistry.lookupTable(item));\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tif(!silent){\r\n\t\t\t\tconsole.warn(\"Table Connection Error - Invalid Selector\", query);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn results;\r\n\t}\r\n\r\n\tstatic matchElement(element){\r\n\t\treturn TableRegistry.tables.find(function(table){\r\n\t\t\treturn element instanceof Tabulator ? table === element : table.element === element;\r\n\t\t});\r\n\t}\r\n}\r\n\r\nTableRegistry.tables = [];\r\n\r\nexport default TableRegistry;","import CoreFeature from './CoreFeature.js';\r\n\r\nclass Module extends CoreFeature{\r\n\r\n\tconstructor(table, name){\r\n\t\tsuper(table);\r\n\r\n\t\tthis._handler = null;\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\t// setup module when table is initialized, to be overriden in module\r\n\t}\r\n\r\n\r\n\t///////////////////////////////////\r\n\t////// Options Registration ///////\r\n\t///////////////////////////////////\r\n\r\n\tregisterTableOption(key, value){\r\n\t\tthis.table.optionsList.register(key, value);\r\n\t}\r\n\r\n\tregisterColumnOption(key, value){\r\n\t\tthis.table.columnManager.optionsList.register(key, value);\r\n\t}\r\n\r\n\t///////////////////////////////////\r\n\t/// Public Function Registation ///\r\n\t///////////////////////////////////\r\n\r\n\tregisterTableFunction(name, func){\r\n\t\tif(typeof this.table[name] === \"undefined\"){\r\n\t\t\tthis.table[name] = func;\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Unable to bind table function, name already in use\", name)\r\n\t\t}\r\n\t}\r\n\r\n\tregisterComponentFunction(component, func, handler){\r\n\t\treturn this.table.componentFunctionBinder.bind(component, func, handler);\r\n\t}\r\n\r\n\t///////////////////////////////////\r\n\t////////// Data Pipeline //////////\r\n\t///////////////////////////////////\r\n\r\n\tregisterDataHandler(handler, priority){\r\n\t\tthis.table.rowManager.registerDataPipelineHandler(handler, priority)\r\n\t\tthis._handler = handler;\r\n\t}\r\n\r\n\tregisterDisplayHandler(handler, priority){\r\n\t\tthis.table.rowManager.registerDisplayPipelineHandler(handler, priority)\r\n\t\tthis._handler = handler;\r\n\t}\r\n\r\n\trefreshData(renderInPosition, handler){\r\n\t\tif(!handler){\r\n\t\t\thandler = this._handler;\r\n\t\t}\r\n\r\n\t\tif(handler){\r\n\t\t\tthis.table.rowManager.refreshActiveData(handler, false, renderInPosition);\r\n\t\t}\r\n\t}\r\n}\r\n\r\nexport default Module;","//resize columns to fit data they contain and stretch row to fill table, also used for fitDataTable\r\nexport default function(columns){\r\n\tcolumns.forEach(function(column){\r\n\t\tcolumn.reinitializeWidth();\r\n\t});\r\n\r\n\tif(this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)){\r\n\t\tthis.table.modules.responsiveLayout.update();\r\n\t}\r\n};","import fitData from './modes/fitData.js';\r\nimport fitDataGeneral from './modes/fitDataGeneral.js';\r\nimport fitDataStretch from './modes/fitDataStretch.js';\r\nimport fitColumns from './modes/fitColumns.js';\r\n\r\nexport default {\r\n\tfitData:fitData,\r\n\tfitDataFill:fitDataGeneral,\r\n\tfitDataTable:fitDataGeneral,\r\n\tfitDataStretch:fitDataStretch,\r\n\tfitColumns:fitColumns ,\r\n};","//resize columns to fit data they contain\r\nexport default function(columns){\r\n\tthis.table.columnManager.renderer.reinitializeColumnWidths(columns);\r\n\r\n\tif(this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)){\r\n\t\tthis.table.modules.responsiveLayout.update();\r\n\t}\r\n};","//resize columns to fit data the contain and stretch last column to fill table\r\nexport default function(columns){\r\n\tvar colsWidth = 0,\r\n\ttableWidth = this.table.rowManager.element.clientWidth,\r\n\tgap = 0,\r\n\tlastCol = false;\r\n\r\n\tcolumns.forEach((column, i) => {\r\n\t\tif(!column.widthFixed){\r\n\t\t\tcolumn.reinitializeWidth();\r\n\t\t}\r\n\r\n\t\tif(this.table.options.responsiveLayout ? column.modules.responsive.visible : column.visible){\r\n\t\t\tlastCol = column;\r\n\t\t}\r\n\r\n\t\tif(column.visible){\r\n\t\t\tcolsWidth += column.getWidth();\r\n\t\t}\r\n\t});\r\n\r\n\tif(lastCol){\r\n\t\tgap = tableWidth - colsWidth + lastCol.getWidth();\r\n\r\n\t\tif(this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)){\r\n\t\t\tlastCol.setWidth(0);\r\n\t\t\tthis.table.modules.responsiveLayout.update();\r\n\t\t}\r\n\r\n\t\tif(gap > 0){\r\n\t\t\tlastCol.setWidth(gap);\r\n\t\t}else{\r\n\t\t\tlastCol.reinitializeWidth();\r\n\t\t}\r\n\t}else{\r\n\t\tif(this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)){\r\n\t\t\tthis.table.modules.responsiveLayout.update();\r\n\t\t}\r\n\t}\r\n};","//resize columns to fit\r\nexport default function(columns){\r\n\tvar totalWidth = this.table.element.clientWidth; //table element width\r\n\tvar fixedWidth = 0; //total width of columns with a defined width\r\n\tvar flexWidth = 0; //total width available to flexible columns\r\n\tvar flexGrowUnits = 0; //total number of widthGrow blocks accross all columns\r\n\tvar flexColWidth = 0; //desired width of flexible columns\r\n\tvar flexColumns = []; //array of flexible width columns\r\n\tvar fixedShrinkColumns = []; //array of fixed width columns that can shrink\r\n\tvar flexShrinkUnits = 0; //total number of widthShrink blocks accross all columns\r\n\tvar overflowWidth = 0; //horizontal overflow width\r\n\tvar gapFill=0; //number of pixels to be added to final column to close and half pixel gaps\r\n\r\n\tfunction calcWidth(width){\r\n\t\tvar colWidth;\r\n\r\n\t\tif(typeof(width) == \"string\"){\r\n\t\t\tif(width.indexOf(\"%\") > -1){\r\n\t\t\t\tcolWidth = (totalWidth / 100) * parseInt(width);\r\n\t\t\t}else{\r\n\t\t\t\tcolWidth = parseInt(width);\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tcolWidth = width;\r\n\t\t}\r\n\r\n\t\treturn colWidth;\r\n\t}\r\n\r\n\t//ensure columns resize to take up the correct amount of space\r\n\tfunction scaleColumns(columns, freeSpace, colWidth, shrinkCols){\r\n\r\n\t\tvar oversizeCols = [],\r\n\t\toversizeSpace = 0,\r\n\t\tremainingSpace = 0,\r\n\t\tnextColWidth = 0,\r\n\t\tremainingFlexGrowUnits = flexGrowUnits,\r\n\t\tgap = 0,\r\n\t\tchangeUnits = 0,\r\n\t\tundersizeCols = [];\r\n\r\n\t\tfunction calcGrow(col){\r\n\t\t\treturn (colWidth * (col.column.definition.widthGrow || 1));\r\n\t\t}\r\n\r\n\t\tfunction calcShrink(col){\r\n\t\t\treturn (calcWidth(col.width) - (colWidth * (col.column.definition.widthShrink || 0)))\r\n\t\t}\r\n\r\n\t\tcolumns.forEach(function(col, i){\r\n\t\t\tvar width = shrinkCols ? calcShrink(col) : calcGrow(col);\r\n\t\t\tif(col.column.minWidth >= width){\r\n\t\t\t\toversizeCols.push(col);\r\n\t\t\t}else{\r\n\t\t\t\tif(col.column.maxWidth && col.column.maxWidth < width){\r\n\t\t\t\t\tcol.width = col.column.maxWidth;\r\n\t\t\t\t\tfreeSpace -= col.column.maxWidth;\r\n\r\n\t\t\t\t\tremainingFlexGrowUnits -= shrinkCols ? (col.column.definition.widthShrink || 1) : (col.column.definition.widthGrow || 1);\r\n\r\n\t\t\t\t\tif(remainingFlexGrowUnits){\r\n\t\t\t\t\t\tcolWidth = Math.floor(freeSpace/remainingFlexGrowUnits);\r\n\t\t\t\t\t}\r\n\t\t\t\t}else{\r\n\t\t\t\t\tundersizeCols.push(col);\r\n\t\t\t\t\tchangeUnits += shrinkCols ? (col.column.definition.widthShrink || 1) : (col.column.definition.widthGrow || 1);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tif(oversizeCols.length){\r\n\t\t\toversizeCols.forEach(function(col){\r\n\t\t\t\toversizeSpace += shrinkCols ? col.width - col.column.minWidth : col.column.minWidth;\r\n\t\t\t\tcol.width = col.column.minWidth;\r\n\t\t\t});\r\n\r\n\t\t\tremainingSpace = freeSpace - oversizeSpace;\r\n\r\n\t\t\tnextColWidth = changeUnits ? Math.floor(remainingSpace/changeUnits) : remainingSpace;\r\n\r\n\t\t\tgap = remainingSpace - (nextColWidth * changeUnits);\r\n\r\n\t\t\tgap += scaleColumns(undersizeCols, remainingSpace, nextColWidth, shrinkCols);\r\n\t\t}else{\r\n\t\t\tgap = changeUnits ? freeSpace - (Math.floor(freeSpace/changeUnits) * changeUnits) : freeSpace;\r\n\r\n\t\t\tundersizeCols.forEach(function(column){\r\n\t\t\t\tcolumn.width = shrinkCols ? calcShrink(column) : calcGrow(column);\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn gap;\r\n\t}\r\n\r\n\tif(this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)){\r\n\t\tthis.table.modules.responsiveLayout.update();\r\n\t}\r\n\r\n\t//adjust for vertical scrollbar if present\r\n\tif(this.table.rowManager.element.scrollHeight > this.table.rowManager.element.clientHeight){\r\n\t\ttotalWidth -= this.table.rowManager.element.offsetWidth - this.table.rowManager.element.clientWidth;\r\n\t}\r\n\r\n\tcolumns.forEach(function(column){\r\n\t\tvar width, minWidth, colWidth;\r\n\r\n\t\tif(column.visible){\r\n\r\n\t\t\twidth = column.definition.width;\r\n\t\t\tminWidth = parseInt(column.minWidth);\r\n\r\n\t\t\tif(width){\r\n\r\n\t\t\t\tcolWidth = calcWidth(width);\r\n\r\n\t\t\t\tfixedWidth += colWidth > minWidth ? colWidth : minWidth;\r\n\r\n\t\t\t\tif(column.definition.widthShrink){\r\n\t\t\t\t\tfixedShrinkColumns.push({\r\n\t\t\t\t\t\tcolumn:column,\r\n\t\t\t\t\t\twidth:colWidth > minWidth ? colWidth : minWidth\r\n\t\t\t\t\t});\r\n\t\t\t\t\tflexShrinkUnits += column.definition.widthShrink;\r\n\t\t\t\t}\r\n\r\n\t\t\t}else{\r\n\t\t\t\tflexColumns.push({\r\n\t\t\t\t\tcolumn:column,\r\n\t\t\t\t\twidth:0,\r\n\t\t\t\t});\r\n\t\t\t\tflexGrowUnits += column.definition.widthGrow || 1;\r\n\t\t\t}\r\n\t\t}\r\n\t});\r\n\r\n\t//calculate available space\r\n\tflexWidth = totalWidth - fixedWidth;\r\n\r\n\t//calculate correct column size\r\n\tflexColWidth = Math.floor(flexWidth / flexGrowUnits)\r\n\r\n\t//generate column widths\r\n\tvar gapFill = scaleColumns(flexColumns, flexWidth, flexColWidth, false);\r\n\r\n\t//increase width of last column to account for rounding errors\r\n\tif(flexColumns.length && gapFill > 0){\r\n\t\tflexColumns[flexColumns.length-1].width += + gapFill;\r\n\t}\r\n\r\n\t//caculate space for columns to be shrunk into\r\n\tflexColumns.forEach(function(col){\r\n\t\tflexWidth -= col.width;\r\n\t});\r\n\r\n\toverflowWidth = Math.abs(gapFill) + flexWidth;\r\n\r\n\t//shrink oversize columns if there is no available space\r\n\tif(overflowWidth > 0 && flexShrinkUnits){\r\n\t\tgapFill = scaleColumns(fixedShrinkColumns, overflowWidth, Math.floor(overflowWidth / flexShrinkUnits), true);\r\n\t}\r\n\r\n\t//decrease width of last column to account for rounding errors\r\n\tif(fixedShrinkColumns.length){\r\n\t\tfixedShrinkColumns[fixedShrinkColumns.length-1].width -= gapFill;\r\n\t}\r\n\r\n\tflexColumns.forEach(function(col){\r\n\t\tcol.column.setWidth(col.width);\r\n\t});\r\n\r\n\tfixedShrinkColumns.forEach(function(col){\r\n\t\tcol.column.setWidth(col.width);\r\n\t});\r\n};","import Module from '../../core/Module.js';\r\n\r\nimport defaultModes from './defaults/modes.js';\r\n\r\nclass Layout extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table, \"layout\");\r\n\r\n\t\tthis.mode = null;\r\n\r\n\t\tthis.registerTableOption(\"layout\", \"fitData\"); //layout type\r\n\t\tthis.registerTableOption(\"layoutColumnsOnNewData\", false); //update column widths on setData\r\n\r\n\t\tthis.registerColumnOption(\"widthGrow\");\r\n\t\tthis.registerColumnOption(\"widthShrink\");\r\n\t}\r\n\r\n\t//initialize layout system\r\n\tinitialize(){\r\n\t\tvar layout = this.table.options.layout;\r\n\r\n\t\tif(Layout.modes[layout]){\r\n\t\t\tthis.mode = layout;\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Layout Error - invalid mode set, defaulting to 'fitData' : \" + layout);\r\n\t\t\tthis.mode = 'fitData';\r\n\t\t}\r\n\r\n\t\tthis.table.element.setAttribute(\"tabulator-layout\", this.mode);\r\n\t}\r\n\r\n\tgetMode(){\r\n\t\treturn this.mode;\r\n\t}\r\n\r\n\t//trigger table layout\r\n\tlayout(){\r\n\t\tthis.dispatch(\"layout-refreshing\")\r\n\t\tLayout.modes[this.mode].call(this, this.table.columnManager.columnsByIndex);\r\n\r\n\t\tthis.dispatch(\"layout-refreshed\")\r\n\t}\r\n}\r\n\r\nLayout.moduleName = \"layout\";\r\n\r\n//load defaults\r\nLayout.modes = defaultModes;\r\n\r\nexport default Layout;","import Module from '../../core/Module.js';\r\n\r\nimport Helpers from '../../core/tools/Helpers.js';\r\n\r\nimport defaultLangs from './defaults/langs.js';\r\n\r\nclass Localize extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.locale = \"default\"; //current locale\r\n\t\tthis.lang = false; //current language\r\n\t\tthis.bindings = {}; //update events to call when locale is changed\r\n\t\tthis.langList = {};\r\n\r\n\t\tthis.registerTableOption(\"locale\", false); //current system language\r\n\t\tthis.registerTableOption(\"langs\", {});\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tthis.langList = Helpers.deepClone(Localize.langs);\r\n\r\n\t\tif(this.table.options.columnDefaults.headerFilterPlaceholder !== false){\r\n\t\t\tthis.setHeaderFilterPlaceholder(this.table.options.columnDefaults.headerFilterPlaceholder);\r\n\t\t}\r\n\r\n\t\tfor(let locale in this.table.options.langs){\r\n\t\t\tthis.installLang(locale, this.table.options.langs[locale]);\r\n\t\t}\r\n\r\n\t\tthis.setLocale(this.table.options.locale);\r\n\r\n\t\tthis.registerTableFunction(\"setLocale\", this.setLocale.bind(this));\r\n\t\tthis.registerTableFunction(\"getLocale\", this.getLocale.bind(this));\r\n\t\tthis.registerTableFunction(\"getLang\", this.getLang.bind(this));\r\n\t}\r\n\r\n\t//set header placehoder\r\n\tsetHeaderFilterPlaceholder(placeholder){\r\n\t\tthis.langList.default.headerFilters.default = placeholder;\r\n\t}\r\n\r\n\t//set header filter placeholder by column\r\n\tsetHeaderFilterColumnPlaceholder(column, placeholder){\r\n\t\tthis.langList.default.headerFilters.columns[column] = placeholder;\r\n\r\n\t\tif(this.lang && !this.lang.headerFilters.columns[column]){\r\n\t\t\tthis.lang.headerFilters.columns[column] = placeholder;\r\n\t\t}\r\n\t}\r\n\r\n\t//setup a lang description object\r\n\tinstallLang(locale, lang){\r\n\t\tif(this.langList[locale]){\r\n\t\t\tthis._setLangProp(this.langList[locale], lang);\r\n\t\t}else{\r\n\t\t\tthis.langList[locale] = lang;\r\n\t\t}\r\n\t}\r\n\r\n\t_setLangProp(lang, values){\r\n\t\tfor(let key in values){\r\n\t\t\tif(lang[key] && typeof lang[key] == \"object\"){\r\n\t\t\t\tthis._setLangProp(lang[key], values[key])\r\n\t\t\t}else{\r\n\t\t\t\tlang[key] = values[key];\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//set current locale\r\n\tsetLocale(desiredLocale){\r\n\t\tdesiredLocale = desiredLocale || \"default\";\r\n\r\n\t\t//fill in any matching languge values\r\n\t\tfunction traverseLang(trans, path){\r\n\t\t\tfor(var prop in trans){\r\n\t\t\t\tif(typeof trans[prop] == \"object\"){\r\n\t\t\t\t\tif(!path[prop]){\r\n\t\t\t\t\t\tpath[prop] = {};\r\n\t\t\t\t\t}\r\n\t\t\t\t\ttraverseLang(trans[prop], path[prop]);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tpath[prop] = trans[prop];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//determing correct locale to load\r\n\t\tif(desiredLocale === true && navigator.language){\r\n\t\t\t//get local from system\r\n\t\t\tdesiredLocale = navigator.language.toLowerCase();\r\n\t\t}\r\n\r\n\t\tif(desiredLocale){\r\n\t\t\t//if locale is not set, check for matching top level locale else use default\r\n\t\t\tif(!this.langList[desiredLocale]){\r\n\t\t\t\tlet prefix = desiredLocale.split(\"-\")[0];\r\n\r\n\t\t\t\tif(this.langList[prefix]){\r\n\t\t\t\t\tconsole.warn(\"Localization Error - Exact matching locale not found, using closest match: \", desiredLocale, prefix);\r\n\t\t\t\t\tdesiredLocale = prefix;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.warn(\"Localization Error - Matching locale not found, using default: \", desiredLocale);\r\n\t\t\t\t\tdesiredLocale = \"default\";\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.locale = desiredLocale;\r\n\r\n\t\t//load default lang template\r\n\t\tthis.lang = Helpers.deepClone(this.langList.default || {});\r\n\r\n\t\tif(desiredLocale != \"default\"){\r\n\t\t\ttraverseLang(this.langList[desiredLocale], this.lang);\r\n\t\t}\r\n\r\n\t\tthis.dispatchExternal(\"localized\", this.locale, this.lang);\r\n\r\n\t\tthis._executeBindings();\r\n\t}\r\n\r\n\t//get current locale\r\n\tgetLocale(locale){\r\n\t\treturn this.locale;\r\n\t}\r\n\r\n\t//get lang object for given local or current if none provided\r\n\tgetLang(locale){\r\n\t\treturn locale ? this.langList[locale] : this.lang;\r\n\t}\r\n\r\n\t//get text for current locale\r\n\tgetText(path, value){\r\n\t\tvar path = value ? path + \"|\" + value : path,\r\n\t\tpathArray = path.split(\"|\"),\r\n\t\ttext = this._getLangElement(pathArray, this.locale);\r\n\r\n\t\t// if(text === false){\r\n\t\t// \tconsole.warn(\"Localization Error - Matching localized text not found for given path: \", path);\r\n\t\t// }\r\n\r\n\t\treturn text || \"\";\r\n\t}\r\n\r\n\t//traverse langs object and find localized copy\r\n\t_getLangElement(path, locale){\r\n\t\tvar root = this.lang;\r\n\r\n\t\tpath.forEach(function(level){\r\n\t\t\tvar rootPath;\r\n\r\n\t\t\tif(root){\r\n\t\t\t\trootPath = root[level];\r\n\r\n\t\t\t\tif(typeof rootPath != \"undefined\"){\r\n\t\t\t\t\troot = rootPath;\r\n\t\t\t\t}else{\r\n\t\t\t\t\troot = false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn root;\r\n\t}\r\n\r\n\t//set update binding\r\n\tbind(path, callback){\r\n\t\tif(!this.bindings[path]){\r\n\t\t\tthis.bindings[path] = [];\r\n\t\t}\r\n\r\n\t\tthis.bindings[path].push(callback);\r\n\r\n\t\tcallback(this.getText(path), this.lang);\r\n\t}\r\n\r\n\t//itterate through bindings and trigger updates\r\n\t_executeBindings(){\r\n\t\tfor(let path in this.bindings){\r\n\t\t\tthis.bindings[path].forEach((binding) => {\r\n\t\t\t\tbinding(this.getText(path), this.lang);\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n}\r\n\r\nLocalize.moduleName = \"localize\";\r\n\r\n//load defaults\r\nLocalize.langs = defaultLangs;\r\n\r\nexport default Localize;","export default {\r\n\t\"default\":{ //hold default locale text\r\n\t\t\"groups\":{\r\n\t\t\t\"item\":\"item\",\r\n\t\t\t\"items\":\"items\",\r\n\t\t},\r\n\t\t\"columns\":{\r\n\t\t},\r\n\t\t\"data\":{\r\n\t\t\t\"loading\":\"Loading\",\r\n\t\t\t\"error\":\"Error\",\r\n\t\t},\r\n\t\t\"pagination\":{\r\n\t\t\t\"page_size\":\"Page Size\",\r\n\t\t\t\"page_title\":\"Show Page\",\r\n\t\t\t\"first\":\"First\",\r\n\t\t\t\"first_title\":\"First Page\",\r\n\t\t\t\"last\":\"Last\",\r\n\t\t\t\"last_title\":\"Last Page\",\r\n\t\t\t\"prev\":\"Prev\",\r\n\t\t\t\"prev_title\":\"Prev Page\",\r\n\t\t\t\"next\":\"Next\",\r\n\t\t\t\"next_title\":\"Next Page\",\r\n\t\t\t\"all\":\"All\",\r\n\t\t\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\r\n\tconstructor(tabulator, modules){\r\n\t\tthis.bindStaticFuctionality(tabulator);\r\n\t\tthis.bindModules(tabulator, coreModules, true);\r\n\r\n\t\tif(modules){\r\n\t\t\tthis.bindModules(tabulator, modules);\r\n\t\t}\r\n\t}\r\n\r\n\tbindStaticFuctionality(tabulator){\r\n\t\ttabulator.moduleBindings = {};\r\n\r\n\t\ttabulator.extendModule = function(name, property, values){\r\n\t\t\tif(tabulator.moduleBindings[name]){\r\n\t\t\t\tvar source = tabulator.moduleBindings[name][property];\r\n\r\n\t\t\t\tif(source){\r\n\t\t\t\t\tif(typeof values == \"object\"){\r\n\t\t\t\t\t\tfor(let key in values){\r\n\t\t\t\t\t\t\tsource[key] = values[key];\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tconsole.warn(\"Module Error - Invalid value type, it must be an object\");\r\n\t\t\t\t\t}\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.warn(\"Module Error - property does not exist:\", property);\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Module Error - module does not exist:\", name);\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\ttabulator.registerModule = function(modules){\r\n\t\t\tif(!Array.isArray(modules)){\r\n\t\t\t\tmodules = [modules];\r\n\t\t\t}\r\n\r\n\t\t\tmodules.forEach((mod) => {\r\n\t\t\t\ttabulator.registerModuleBinding(mod)\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\ttabulator.registerModuleBinding = function(mod){\r\n\t\t\ttabulator.moduleBindings[mod.moduleName] = mod;\r\n\t\t};\r\n\r\n\t\ttabulator.findTable = function(query){\r\n\t\t\tvar results = TableRegistry.lookupTable(query, true);\r\n\t\t\treturn Array.isArray(results) && !results.length ? false : results;\r\n\t\t}\r\n\r\n\t\t//ensure that module are bound to instantiated function\r\n\t\ttabulator.prototype.bindModules = function(){\r\n\t\t\tvar orderedMods = [],\r\n\t\t\tunOrderedMods = [];\r\n\r\n\t\t\tthis.modules = {};\r\n\r\n\t\t\tfor(var name in tabulator.moduleBindings){\r\n\t\t\t\tlet mod = tabulator.moduleBindings[name];\r\n\t\t\t\tlet module = new mod(this);\r\n\r\n\t\t\t\tthis.modules[name] = module;\r\n\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\torderedMods.push(module);\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\r\n\t\t\torderedMods.sort((a, b) => a.moduleInitOrder > b.moduleInitOrder ? 1 : -1);\r\n\r\n\t\t\tthis.modulesRegular = orderedMods.concat(unOrderedMods);\r\n\t\t}\r\n\t}\r\n\r\n\tbindModules(tabulator, modules, core){\r\n\t\tvar mods = Object.values(modules);\r\n\r\n\t\tif(core){\r\n\t\t\tmods.forEach((mod) => {\r\n\t\t\t\tmod.prototype.moduleCore = true;\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\ttabulator.registerModule(mods);\r\n\t}\r\n}","'use strict';\r\n\r\nimport defaultOptions from './defaults/options.js';\r\n\r\nimport ColumnManager from './ColumnManager.js';\r\nimport RowManager from './RowManager.js';\r\nimport FooterManager from './FooterManager.js';\r\n\r\nimport InteractionMonitor from './tools/InteractionMonitor.js';\r\nimport 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 TableRegistry from './tools/TableRegistry.js';\r\nimport ModuleBinder from './tools/ModuleBinder.js';\r\n\r\nimport OptionsList from './tools/OptionsList.js';\r\n\r\nclass Tabulator {\r\n\r\n\tconstructor(element, options){\r\n\r\n\t\tthis.options = {};\r\n\r\n\t\tthis.columnManager = null; // hold Column Manager\r\n\t\tthis.rowManager = null; //hold Row Manager\r\n\t\tthis.footerManager = null; //holder Footer Manager\r\n\t\tthis.vdomHoz = null; //holder horizontal virtual dom\r\n\t\tthis.externalEvents = null; //handle external event messaging\r\n\t\tthis.eventBus = null; //handle internal event messaging\r\n\t\tthis.interactionMonitor = false; //track user interaction\r\n\t\tthis.browser = \"\"; //hold current browser type\r\n\t\tthis.browserSlow = false; //handle reduced functionality for slower browsers\r\n\t\tthis.browserMobile = false; //check if running on 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\r\n\t\tthis.componentFunctionBinder = new ComponentFunctionBinder(this); //bind component functions\r\n\t\tthis.dataLoader = false; //bind component functions\r\n\r\n\t\tthis.modules = {}; //hold all modules bound to this table\r\n\t\tthis.modulesCore = []; //hold core modules bound to this table (for initialization purposes)\r\n\t\tthis.modulesRegular = []; //hold regular modules bound to this table (for initialization purposes)\r\n\r\n\t\tthis.optionsList = new OptionsList(this, \"table constructor\");\r\n\r\n\t\tthis.initialized = false;\r\n\r\n\t\tif(this.initializeElement(element)){\r\n\r\n\t\t\tthis.initializeCoreSystems(options);\r\n\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\r\n\t\tTableRegistry.register(this); //register table for inter-device communication\r\n\t}\r\n\r\n\tinitializeElement(element){\r\n\t\tif(typeof HTMLElement !== \"undefined\" && element instanceof HTMLElement){\r\n\t\t\tthis.element = element;\r\n\t\t\treturn true;\r\n\t\t}else if(typeof element === \"string\"){\r\n\t\t\tthis.element = document.querySelector(element);\r\n\r\n\t\t\tif(this.element){\r\n\t\t\t\treturn true;\r\n\t\t\t}else{\r\n\t\t\t\tconsole.error(\"Tabulator Creation Error - no element found matching selector: \", element);\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tconsole.error(\"Tabulator Creation Error - Invalid element provided:\", element);\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\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\r\n\t\tthis.bindModules();\r\n\r\n\t\tthis.options = this.optionsList.generate(Tabulator.defaultOptions, options)\r\n\r\n\t\tthis._clearObjectPointers();\r\n\r\n\t\tthis._mapDeprecatedFunctionality();\r\n\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\r\n\t\tthis.interactionMonitor = new InteractionMonitor(this);\r\n\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\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\r\n\t_clearSelection(){\r\n\r\n\t\tthis.element.classList.add(\"tabulator-block-select\");\r\n\r\n\t\tif (window.getSelection) {\r\n\t\t if (window.getSelection().empty) { // Chrome\r\n\t\t \twindow.getSelection().empty();\r\n\t\t } else if (window.getSelection().removeAllRanges) { // Firefox\r\n\t\t \twindow.getSelection().removeAllRanges();\r\n\t\t }\r\n\t\t} else if (document.selection) { // IE?\r\n\t\t\tdocument.selection.empty();\r\n\t\t}\r\n\r\n\t\tthis.element.classList.remove(\"tabulator-block-select\");\r\n\t}\r\n\r\n\t//create table\r\n\t_create(){\r\n\t\tthis.externalEvents.dispatch(\"tableBuilding\");\r\n\t\tthis.eventBus.dispatch(\"table-building\");\r\n\r\n\t\tthis._rtlCheck();\r\n\r\n\t\tthis._buildElement();\r\n\r\n\t\tthis._initializeTable();\r\n\r\n\t\tthis._loadInitialData();\r\n\r\n\t\tthis.initialized = true;\r\n\r\n\t\tthis.externalEvents.dispatch(\"tableBuilt\");\r\n\t}\r\n\r\n\t_rtlCheck(){\r\n\t\tvar style = window.getComputedStyle(this.element);\r\n\r\n\t\tswitch(this.options.textDirection){\r\n\t\t\tcase\"auto\":\r\n\t\t\tif(style.direction !== \"rtl\"){\r\n\t\t\t\tbreak;\r\n\t\t\t};\r\n\r\n\t\t\tcase \"rtl\":\r\n\t\t\tthis.element.classList.add(\"tabulator-rtl\");\r\n\t\t\tthis.rtl = true;\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"ltr\":\r\n\t\t\tthis.element.classList.add(\"tabulator-ltr\");\r\n\r\n\t\t\tdefault:\r\n\t\t\tthis.rtl = false;\r\n\t\t}\r\n\t}\r\n\r\n\t//clear pointers to objects in default config object\r\n\t_clearObjectPointers(){\r\n\t\tthis.options.columns = this.options.columns.slice(0);\r\n\r\n\t\tif(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\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\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\r\n\t\t\t//transfer attributes to new element\r\n\t\t\tvar attributes = element.attributes;\r\n\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\r\n\t\t\t// replace table with div element\r\n\t\t\telement.parentNode.replaceChild(newElement, element);\r\n\r\n\t\t\tthis.element = element = newElement;\r\n\t\t}\r\n\r\n\t\telement.classList.add(\"tabulator\");\r\n\t\telement.setAttribute(\"role\", \"grid\");\r\n\r\n\t\t//empty element\r\n\t\twhile(element.firstChild) element.removeChild(element.firstChild);\r\n\r\n\t\t//set table height\r\n\t\tif(options.height){\r\n\t\t\toptions.height = isNaN(options.height) ? options.height : options.height + \"px\";\r\n\t\t\telement.style.height = options.height;\r\n\t\t}\r\n\r\n\t\t//set table min height\r\n\t\tif(options.minHeight !== false){\r\n\t\t\toptions.minHeight = isNaN(options.minHeight) ? options.minHeight : options.minHeight + \"px\";\r\n\t\t\telement.style.minHeight = options.minHeight;\r\n\t\t}\r\n\r\n\t\t//set table maxHeight\r\n\t\tif(options.maxHeight !== false){\r\n\t\t\toptions.maxHeight = isNaN(options.maxHeight) ? options.maxHeight : options.maxHeight + \"px\";\r\n\t\t\telement.style.maxHeight = options.maxHeight;\r\n\t\t}\r\n\t}\r\n\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\r\n\t\tthis.interactionMonitor.initialize();\r\n\r\n\t\tthis.columnManager.initialize();\r\n\t\tthis.rowManager.initialize();\r\n\r\n\t\tthis._detectBrowser();\r\n\r\n\t\t//initialize core modules\r\n\t\tthis.modulesCore.forEach((mod) => {\r\n\t\t\tmod.initialize();\r\n\t\t})\r\n\r\n\t\t//build table elements\r\n\t\telement.appendChild(this.columnManager.getElement());\r\n\t\telement.appendChild(this.rowManager.getElement());\r\n\r\n\t\tif(options.footerElement){\r\n\t\t\tthis.footerManager.activate();\r\n\t\t}\r\n\r\n\t\tif(options.autoColumns && options.data){\r\n\r\n\t\t\tthis.columnManager.generateColumnsFromRowData(this.options.data);\r\n\t\t}\r\n\r\n\t\t//initialize regular modules\r\n\t\tthis.modulesRegular.forEach((mod) => {\r\n\t\t\tmod.initialize();\r\n\t\t});\r\n\r\n\t\tthis.columnManager.setColumns(options.columns);\r\n\r\n\t\tthis.eventBus.dispatch(\"table-built\");\r\n\t}\r\n\r\n\t_loadInitialData(){\r\n\t\tthis.dataLoader.load(this.options.data);\r\n\t}\r\n\r\n\t//deconstructor\r\n\tdestroy(){\r\n\t\tvar element = this.element;\r\n\r\n\t\tTableRegistry.deregister(this); //deregister table from inter-device communication\r\n\r\n\t\tthis.eventBus.dispatch(\"table-destroy\");\r\n\r\n\t\t//clear row data\r\n\t\tthis.rowManager.rows.forEach(function(row){\r\n\t\t\trow.wipe();\r\n\t\t});\r\n\r\n\t\tthis.rowManager.rows = [];\r\n\t\tthis.rowManager.activeRows = [];\r\n\t\tthis.rowManager.displayRows = [];\r\n\r\n\t\t//clear DOM\r\n\t\twhile(element.firstChild) element.removeChild(element.firstChild);\r\n\t\telement.classList.remove(\"tabulator\");\r\n\t}\r\n\r\n\t_detectBrowser(){\r\n\t\tvar ua = navigator.userAgent||navigator.vendor||window.opera;\r\n\r\n\t\tif(ua.indexOf(\"Trident\") > -1){\r\n\t\t\tthis.browser = \"ie\";\r\n\t\t\tthis.browserSlow = true;\r\n\t\t}else if(ua.indexOf(\"Edge\") > -1){\r\n\t\t\tthis.browser = \"edge\";\r\n\t\t\tthis.browserSlow = true;\r\n\t\t}else if(ua.indexOf(\"Firefox\") > -1){\r\n\t\t\tthis.browser = \"firefox\";\r\n\t\t\tthis.browserSlow = false;\r\n\t\t}else{\r\n\t\t\tthis.browser = \"other\";\r\n\t\t\tthis.browserSlow = false;\r\n\t\t}\r\n\r\n\t\tthis.browserMobile = /(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i.test(ua)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\\-(n|u)|c55\\/|capi|ccwa|cdm\\-|cell|chtm|cldc|cmd\\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\\-s|devi|dica|dmob|do(c|p)o|ds(12|\\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\\-|_)|g1 u|g560|gene|gf\\-5|g\\-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd\\-(m|p|t)|hei\\-|hi(pt|ta)|hp( i|ip)|hs\\-c|ht(c(\\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\\-(20|go|ma)|i230|iac( |\\-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc\\-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|\\-[a-w])|libw|lynx|m1\\-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m\\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\\-2|po(ck|rt|se)|prox|psio|pt\\-g|qa\\-a|qc(07|12|21|32|60|\\-[2-7]|i\\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\\-|oo|p\\-)|sdk\\/|se(c(\\-|0|1)|47|mc|nd|ri)|sgh\\-|shar|sie(\\-|m)|sk\\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\\-|v\\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\\-|tdg\\-|tel(i|m)|tim\\-|t\\-mo|to(pl|sh)|ts(70|m\\-|m3|m5)|tx\\-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\\-|your|zeto|zte\\-/i.test(ua.slice(0,4));\r\n\t}\r\n\r\n\t////////////////// Data Handling //////////////////\r\n\t//block table redrawing\r\n\tblockRedraw(){\r\n\t\treturn this.rowManager.blockRedraw();\r\n\t}\r\n\r\n\t//restore table redrawing\r\n\trestoreRedraw(){\r\n\t\treturn this.rowManager.restoreRedraw();\r\n\t}\r\n\r\n\t//load data\r\n\tsetData(data, params, config){\r\n\t\tif(this.initialized){\r\n\t\t\treturn this.dataLoader.load(data, params, config, false);\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"setData failed - table not yet initialized. To set initial data please use the 'data' property in the table constructor.\")\r\n\t\t}\r\n\t}\r\n\r\n\t//clear data\r\n\tclearData(){\r\n\t\tthis.dataLoader.blockActiveLoad();\r\n\t\tthis.rowManager.clearData();\r\n\t}\r\n\r\n\t//get table data array\r\n\tgetData(active){\r\n\t\treturn this.rowManager.getData(active);\r\n\t}\r\n\r\n\t//get table data array count\r\n\tgetDataCount(active){\r\n\t\treturn this.rowManager.getDataCount(active);\r\n\t}\r\n\r\n\t//replace data, keeping table in position with same sort\r\n\treplaceData(data, params, config){\r\n\t\tif(this.initialized){\r\n\t\t\treturn this.dataLoader.load(data, params, config, true, true);\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"replaceData failed - table not yet initialized. Please wait for the `tableBuilt` event before calling this function.\");\r\n\t\t}\r\n\t}\r\n\r\n\t//update table data\r\n\tupdateData(data){\r\n\t\tvar responses = 0;\r\n\r\n\t\tif(this.initialized){\r\n\t\t\treturn new Promise((resolve, reject) => {\r\n\t\t\t\tthis.dataLoader.blockActiveLoad();\r\n\r\n\t\t\t\tif(typeof data === \"string\"){\r\n\t\t\t\t\tdata = JSON.parse(data);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(data){\r\n\t\t\t\t\tdata.forEach((item) => {\r\n\t\t\t\t\t\tvar row = this.rowManager.findRow(item[this.options.index]);\r\n\r\n\t\t\t\t\t\tif(row){\r\n\t\t\t\t\t\t\tresponses++;\r\n\r\n\t\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\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}\r\n\t\t\t\t\t});\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.warn(\"Update Error - No data provided\");\r\n\t\t\t\t\treject(\"Update Error - No data provided\");\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"updateData failed - table not yet initialized. Please wait for the `tableBuilt` event before calling this function.\");\r\n\t\t}\r\n\t}\r\n\r\n\taddData(data, pos, index){\r\n\t\tif(this.initialized){\r\n\t\t\treturn new Promise((resolve, reject) => {\r\n\t\t\t\tthis.dataLoader.blockActiveLoad();\r\n\r\n\t\t\t\tif(typeof data === \"string\"){\r\n\t\t\t\t\tdata = JSON.parse(data);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(data){\r\n\t\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\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\r\n\t\t\t\t\t\tresolve(output);\r\n\t\t\t\t\t});\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.warn(\"Update Error - No data provided\");\r\n\t\t\t\t\treject(\"Update Error - No data provided\");\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"addData failed - table not yet initialized. Please wait for the `tableBuilt` event before calling this function.\");\r\n\t\t}\r\n\t}\r\n\r\n\t//update table data\r\n\tupdateOrAddData(data){\r\n\t\tvar rows = [],\r\n\t\tresponses = 0;\r\n\r\n\t\tif(this.initialized){\r\n\t\t\treturn new Promise((resolve, reject) => {\r\n\t\t\t\tthis.dataLoader.blockActiveLoad();\r\n\r\n\t\t\t\tif(typeof data === \"string\"){\r\n\t\t\t\t\tdata = JSON.parse(data);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(data){\r\n\t\t\t\t\tdata.forEach((item) => {\r\n\t\t\t\t\t\tvar row = this.rowManager.findRow(item[this.options.index]);\r\n\r\n\t\t\t\t\t\tresponses++;\r\n\r\n\t\t\t\t\t\tif(row){\r\n\t\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\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\t}else{\r\n\t\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\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\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.warn(\"Update Error - No data provided\");\r\n\t\t\t\t\treject(\"Update Error - No data provided\");\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"updateOrAddData failed - table not yet initialized. Please wait for the `tableBuilt` event before calling this function.\");\r\n\t\t}\r\n\t}\r\n\r\n\t//get row object\r\n\tgetRow(index){\r\n\t\tvar row = this.rowManager.findRow(index);\r\n\r\n\t\tif(row){\r\n\t\t\treturn row.getComponent();\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Find Error - No matching row found:\", index);\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\t//get row object\r\n\tgetRowFromPosition(position, active){\r\n\t\tvar row = this.rowManager.getRowFromPosition(position, active);\r\n\r\n\t\tif(row){\r\n\t\t\treturn row.getComponent();\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Find Error - No matching row found:\", position);\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\t//delete row from table\r\n\tdeleteRow(index){\r\n\t\tvar foundRows = [];\r\n\r\n\t\tif(!Array.isArray(index)){\r\n\t\t\tindex = [index];\r\n\t\t}\r\n\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\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\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\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\r\n\t\t//delete rows\r\n\t\tfoundRows.forEach((row) =>{\r\n\t\t\trow.delete()\r\n\t\t});\r\n\r\n\t\tthis.rowManager.reRenderInPosition();\r\n\r\n\t\treturn Promise.resolve();\r\n\t}\r\n\r\n\t//add row to table\r\n\taddRow(data, pos, index){\r\n\t\tif(this.initialized){\r\n\t\t\tif(typeof data === \"string\"){\r\n\t\t\t\tdata = JSON.parse(data);\r\n\t\t\t}\r\n\r\n\t\t\treturn this.rowManager.addRows(data, pos, index)\r\n\t\t\t.then((rows)=>{\r\n\t\t\t\treturn rows[0].getComponent();\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"addRow failed - table not yet initialized. Please wait for the `tableBuilt` event before calling this function.\");\r\n\t\t}\r\n\t}\r\n\r\n\t//update a row if it exitsts otherwise create it\r\n\tupdateOrAddRow(index, data){\r\n\t\tvar row = this.rowManager.findRow(index);\r\n\r\n\t\tif(typeof data === \"string\"){\r\n\t\t\tdata = JSON.parse(data);\r\n\t\t}\r\n\r\n\t\tif(row){\r\n\t\t\treturn row.updateData(data)\r\n\t\t\t.then(()=>{\r\n\t\t\t\treturn row.getComponent();\r\n\t\t\t})\r\n\t\t}else{\r\n\t\t\treturn this.rowManager.addRows(data)\r\n\t\t\t.then((rows)=>{\r\n\t\t\t\treturn rows[0].getComponent();\r\n\t\t\t})\r\n\t\t}\r\n\t}\r\n\r\n\t//update row data\r\n\tupdateRow(index, data){\r\n\t\tvar row = this.rowManager.findRow(index);\r\n\r\n\t\tif(typeof data === \"string\"){\r\n\t\t\tdata = JSON.parse(data);\r\n\t\t}\r\n\r\n\t\tif(row){\r\n\t\t\treturn row.updateData(data)\r\n\t\t\t.then(()=>{\r\n\t\t\t\treturn Promise.resolve(row.getComponent());\r\n\t\t\t})\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Update Error - No matching row found:\", index);\r\n\t\t\treturn Promise.reject(\"Update Error - No matching row found\");\r\n\t\t}\r\n\t}\r\n\r\n\t//scroll to row in DOM\r\n\tscrollToRow(index, position, ifVisible){\r\n\t\tvar row = this.rowManager.findRow(index);\r\n\r\n\t\tif(row){\r\n\t\t\treturn this.rowManager.scrollToRow(row, position, ifVisible)\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Scroll Error - No matching row found:\", index);\r\n\t\t\treturn Promise.reject(\"Scroll Error - No matching row found\");\r\n\t\t}\r\n\t}\r\n\r\n\tmoveRow(from, to, after){\r\n\t\tvar fromRow = this.rowManager.findRow(from);\r\n\r\n\t\tif(fromRow){\r\n\t\t\tfromRow.moveToRow(to, after);\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Move Error - No matching row found:\", from);\r\n\t\t}\r\n\t}\r\n\r\n\tgetRows(active){\r\n\t\treturn this.rowManager.getComponents(active);\r\n\t}\r\n\r\n\t//get position of row in table\r\n\tgetRowPosition(index, active){\r\n\t\tvar row = this.rowManager.findRow(index);\r\n\r\n\t\tif(row){\r\n\t\t\treturn this.rowManager.getRowPosition(row, active);\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Position Error - No matching row found:\", index);\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\t/////////////// Column Functions ///////////////\r\n\tsetColumns(definition){\r\n\t\tif(this.initialized){\r\n\t\t\tthis.columnManager.setColumns(definition);\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"setColumns failed - table not yet initialized. To set initial data please use the 'columns' property in the table constructor.\")\r\n\t\t}\r\n\t}\r\n\r\n\tgetColumns(structured){\r\n\t\treturn this.columnManager.getComponents(structured);\r\n\t}\r\n\r\n\tgetColumn(field){\r\n\t\tvar col = this.columnManager.findColumn(field);\r\n\r\n\t\tif(col){\r\n\t\t\treturn col.getComponent();\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Find Error - No matching column found:\", field);\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\tgetColumnDefinitions(){\r\n\t\treturn this.columnManager.getDefinitionTree();\r\n\t}\r\n\r\n\tshowColumn(field){\r\n\t\tvar column = this.columnManager.findColumn(field);\r\n\r\n\t\tif(column){\r\n\t\t\tcolumn.show();\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Column Show Error - No matching column found:\", field);\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\thideColumn(field){\r\n\t\tvar column = this.columnManager.findColumn(field);\r\n\r\n\t\tif(column){\r\n\t\t\tcolumn.hide();\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Column Hide Error - No matching column found:\", field);\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\ttoggleColumn(field){\r\n\t\tvar column = this.columnManager.findColumn(field);\r\n\r\n\t\tif(column){\r\n\t\t\tif(column.visible){\r\n\t\t\t\tcolumn.hide();\r\n\t\t\t}else{\r\n\t\t\t\tcolumn.show();\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Column Visibility Toggle Error - No matching column found:\", field);\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\taddColumn(definition, before, field){\r\n\t\tvar column = this.columnManager.findColumn(field);\r\n\r\n\t\treturn this.columnManager.addColumn(definition, before, column)\r\n\t\t.then((column) => {\r\n\t\t\treturn column.getComponent();\r\n\t\t});\r\n\t}\r\n\r\n\tdeleteColumn(field){\r\n\t\tvar column = this.columnManager.findColumn(field);\r\n\r\n\t\tif(column){\r\n\t\t\treturn column.delete();\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Column Delete Error - No matching column found:\", field);\r\n\t\t\treturn Promise.reject();\r\n\t\t}\r\n\t}\r\n\r\n\tupdateColumnDefinition(field, definition){\r\n\t\tvar column = this.columnManager.findColumn(field);\r\n\r\n\t\tif(column){\r\n\t\t\treturn column.updateDefinition(definition)\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Column Update Error - No matching column found:\", field);\r\n\t\t\treturn Promise.reject();\r\n\t\t}\r\n\t}\r\n\r\n\tmoveColumn(from, to, after){\r\n\t\tvar fromColumn = this.columnManager.findColumn(from);\r\n\t\tvar toColumn = this.columnManager.findColumn(to);\r\n\r\n\t\tif(fromColumn){\r\n\t\t\tif(toColumn){\r\n\t\t\t\tthis.columnManager.moveColumn(fromColumn, toColumn, after)\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Move Error - No matching column found:\", toColumn);\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Move Error - No matching column found:\", from);\r\n\t\t}\r\n\t}\r\n\r\n\t//scroll to column in DOM\r\n\tscrollToColumn(field, position, ifVisible){\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tvar column = this.columnManager.findColumn(field);\r\n\r\n\t\t\tif(column){\r\n\t\t\t\treturn this.columnManager.scrollToColumn(column, position, ifVisible)\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Scroll Error - No matching column found:\", field);\r\n\t\t\t\treturn Promise.reject(\"Scroll Error - No matching column found\");\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t//////////// General Public Functions ////////////\r\n\t//redraw list without updating data\r\n\tredraw(force){\r\n\t\tif(this.initialized){\r\n\t\t\tthis.columnManager.redraw(force);\r\n\t\t\tthis.rowManager.redraw(force);\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"redraw failed - table not yet initialized. Please wait for the `tableBuilt` event before calling this function.\");\r\n\t\t}\r\n\t}\r\n\r\n\tsetHeight(height){\r\n\t\tthis.options.height = isNaN(height) ? height : height + \"px\";\r\n\t\tthis.element.style.height = this.options.height;\r\n\t\tthis.rowManager.initializeRenderer();\r\n\t\tthis.rowManager.redraw();\r\n\t}\r\n\r\n\t//////////////////// Event Bus ///////////////////\r\n\r\n\ton(key, callback){\r\n\t\tthis.externalEvents.subscribe(key, callback);\r\n\t}\r\n\r\n\toff(key, callback){\r\n\t\tthis.externalEvents.unsubscribe(key, callback);\r\n\t}\r\n\r\n\tdispatchEvent(){\r\n\t\tvar args = Array.from(arguments),\r\n\t\tkey = args.shift();\r\n\r\n\t\tthis.externalEvents.dispatch(...arguments)\r\n\t}\r\n\r\n\t////////////// Extension Management //////////////\r\n\tmodExists(plugin, required){\r\n\t\tif(this.modules[plugin]){\r\n\t\t\treturn true;\r\n\t\t}else{\r\n\t\t\tif(required){\r\n\t\t\t\tconsole.error(\"Tabulator Module Not Installed: \" + plugin);\r\n\t\t\t}\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\tmodule(key){\r\n\t\tvar mod = this.modules[key];\r\n\r\n\t\tif(!mod){\r\n\t\t\tconsole.error(\"Tabulator module not installed: \" + key);\r\n\t\t}\r\n\r\n\t\treturn mod;\r\n\t}\r\n}\r\n\r\n//default setup options\r\nTabulator.defaultOptions = defaultOptions;\r\n\r\n//bind modules and static functionality\r\nnew ModuleBinder(Tabulator);\r\n\r\nexport default Tabulator;\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\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\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\ttooltipGenerationMode:\"load\", //when to generate tooltips\r\n\r\n\tfooterElement:false, //hold footer element\r\n\r\n\tindex:\"id\", //filed for row index\r\n\r\n\ttextDirection:\"auto\",\r\n\r\n\taddRowPos:\"bottom\", //position to insert blank rows, top|bottom\r\n\r\n\theaderVisible:true, //hide header\r\n\r\n\trenderVertical:\"virtual\",\r\n\trenderHorizontal:\"basic\",\r\n\trenderVerticalBuffer:0, // set virtual DOM buffer size\r\n\r\n\tscrollToRowPosition:\"top\",\r\n\tscrollToRowIfVisible:true,\r\n\r\n\tscrollToColumnPosition:\"left\",\r\n\tscrollToColumnIfVisible:true,\r\n\r\n\trowFormatter:false,\r\n\trowFormatterPrint:null,\r\n\trowFormatterClipboard:null,\r\n\trowFormatterHtmlOutput:null,\r\n\r\n\tplaceholder:false,\r\n\r\n\tdataLoader:true,\r\n\tdataLoaderLoading:false,\r\n\tdataLoaderError:false,\r\n\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 defautlAccessors from './defaults/accessors.js';\r\n\r\nclass Accessor extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.allowedTypes = [\"\", \"data\", \"download\", \"clipboard\", \"print\", \"htmlOutput\"] //list of accessor types\r\n\r\n\t\tthis.registerColumnOption(\"accessor\");\r\n\t\tthis.registerColumnOption(\"accessorParams\");\r\n\t\tthis.registerColumnOption(\"accessorData\");\r\n\t\tthis.registerColumnOption(\"accessorDataParams\");\r\n\t\tthis.registerColumnOption(\"accessorDownload\");\r\n\t\tthis.registerColumnOption(\"accessorDownloadParams\");\r\n\t\tthis.registerColumnOption(\"accessorClipboard\");\r\n\t\tthis.registerColumnOption(\"accessorClipboardParams\");\r\n\t\tthis.registerColumnOption(\"accessorPrint\");\r\n\t\tthis.registerColumnOption(\"accessorPrintParams\");\r\n\t\tthis.registerColumnOption(\"accessorHtmlOutput\");\r\n\t\tthis.registerColumnOption(\"accessorHtmlOutputParams\");\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tthis.subscribe(\"column-layout\", this.initializeColumn.bind(this));\r\n\t\tthis.subscribe(\"row-data-retrieve\", this.transformRow.bind(this));\r\n\t}\r\n\r\n\t//initialize column accessor\r\n\tinitializeColumn(column){\r\n\t\tvar match = false,\r\n\t\tconfig = {};\r\n\r\n\t\tthis.allowedTypes.forEach((type) => {\r\n\t\t\tvar key = \"accessor\" + (type.charAt(0).toUpperCase() + type.slice(1)),\r\n\t\t\taccessor;\r\n\r\n\t\t\tif(column.definition[key]){\r\n\t\t\t\taccessor = this.lookupAccessor(column.definition[key]);\r\n\r\n\t\t\t\tif(accessor){\r\n\t\t\t\t\tmatch = true;\r\n\r\n\t\t\t\t\tconfig[key] = {\r\n\t\t\t\t\t\taccessor:accessor,\r\n\t\t\t\t\t\tparams: column.definition[key + \"Params\"] || {},\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tif(match){\r\n\t\t\tcolumn.modules.accessor = config;\r\n\t\t}\r\n\t}\r\n\r\n\tlookupAccessor(value){\r\n\t\tvar accessor = false;\r\n\r\n\t\t//set column accessor\r\n\t\tswitch(typeof value){\r\n\t\t\tcase \"string\":\r\n\t\t\tif(Accessor.accessors[value]){\r\n\t\t\t\taccessor = Accessor.accessors[value]\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Accessor Error - No such accessor found, ignoring: \", value);\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"function\":\r\n\t\t\taccessor = value;\r\n\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\treturn accessor;\r\n\t}\r\n\r\n\t//apply accessor to row\r\n\ttransformRow(row, type){\r\n\t\tvar key = \"accessor\" + (type.charAt(0).toUpperCase() + type.slice(1)),\r\n\t\trowComponent = row.getComponent();\r\n\r\n\t\t//clone data object with deep copy to isolate internal data from returned result\r\n\t\tvar data = Helpers.deepClone(row.data || {});\r\n\r\n\t\tthis.table.columnManager.traverse(function(column){\r\n\t\t\tvar value, accessor, params, colCompnent;\r\n\r\n\t\t\tif(column.modules.accessor){\r\n\r\n\t\t\t\taccessor = column.modules.accessor[key] || column.modules.accessor.accessor || false;\r\n\r\n\t\t\t\tif(accessor){\r\n\t\t\t\t\tvalue = column.getFieldValue(data);\r\n\r\n\t\t\t\t\tif(value != \"undefined\"){\r\n\t\t\t\t\t\tcolCompnent = column.getComponent();\r\n\t\t\t\t\t\tparams = typeof accessor.params === \"function\" ? accessor.params(value, data, type, colCompnent, rowComponent) : accessor.params;\r\n\t\t\t\t\t\tcolumn.setFieldValue(data, accessor.accessor(value, data, type, params, colCompnent, rowComponent));\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn data;\r\n\t}\r\n}\r\n\r\n//load defaults\r\nAccessor.moduleName = \"accessor\";\r\nAccessor.accessors = defautlAccessors;\r\n\r\nexport default Accessor;","export default {}","function generateParamsList(data, prefix){\r\n\tvar output = [];\r\n\r\n\tprefix = prefix || \"\";\r\n\r\n\tif(Array.isArray(data)){\r\n\t\tdata.forEach((item, i) => {\r\n\t\t\toutput = output.concat(generateParamsList(item, prefix ? prefix + \"[\" + i + \"]\" : i));\r\n\t\t});\r\n\t}else if (typeof data === \"object\"){\r\n\t\tfor (var key in data){\r\n\t\t\toutput = output.concat(generateParamsList(data[key], prefix ? prefix + \"[\" + key + \"]\" : key));\r\n\t\t}\r\n\t}else{\r\n\t\toutput.push({key:prefix, value:data});\r\n\t}\r\n\r\n\treturn output;\r\n}\r\n\r\nfunction serializeParams(params){\r\n\tvar output = generateParamsList(params),\r\n\tencoded = [];\r\n\r\n\toutput.forEach(function(item){\r\n\t\tencoded.push(encodeURIComponent(item.key) + \"=\" + encodeURIComponent(item.value));\r\n\t});\r\n\r\n\treturn encoded.join(\"&\");\r\n}\r\n\r\nexport default function(url, config, params){\r\n\tif(url){\r\n\t\tif(params && Object.keys(params).length){\r\n\t\t\tif(!config.method || config.method.toLowerCase() == \"get\"){\r\n\t\t\t\tconfig.method = \"get\";\r\n\r\n\t\t\t\turl += (url.includes(\"?\") ? \"&\" : \"?\") + serializeParams(params);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\treturn url;\r\n};","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.then((data)=>{\r\n\t\t\t\tif(this.table.options.ajaxResponse){\r\n\t\t\t\t\tdata = this.table.options.ajaxResponse.call(this.table, url, params, data);\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\treturn data;\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\treturn Promise.reject();\r\n\t\t}\r\n\t}\r\n}\r\n\r\nAjax.moduleName = \"ajax\";\r\n\r\n//load defaults\r\nAjax.defaultConfig = defaultConfig;\r\nAjax.defaultURLGenerator = defaultURLGenerator;\r\nAjax.defaultLoaderPromise = defaultLoaderPromise;\r\nAjax.contentTypeFormatters = defaultContentTypeFormatters;\r\n\r\nexport default Ajax;","export default {\r\n\tmethod: \"GET\",\r\n};","export default function(url, config, params){\r\n\tvar contentType;\r\n\r\n\treturn new Promise((resolve, reject) => {\r\n\t\t//set url\r\n\t\turl = this.urlGenerator.call(this.table, url, config, params);\r\n\r\n\t\t//set body content if not GET request\r\n\t\tif(config.method.toUpperCase() != \"GET\"){\r\n\t\t\tcontentType = typeof this.table.options.ajaxContentType === \"object\" ? this.table.options.ajaxContentType : this.contentTypeFormatters[this.table.options.ajaxContentType];\r\n\t\t\tif(contentType){\r\n\r\n\t\t\t\tfor(var key in contentType.headers){\r\n\t\t\t\t\tif(!config.headers){\r\n\t\t\t\t\t\tconfig.headers = {};\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif(typeof config.headers[key] === \"undefined\"){\r\n\t\t\t\t\t\tconfig.headers[key] = contentType.headers[key];\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tconfig.body = contentType.body.call(this, url, config, params);\r\n\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Ajax Error - Invalid ajaxContentType value:\", this.table.options.ajaxContentType);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(url){\r\n\t\t\t//configure headers\r\n\t\t\tif(typeof config.headers === \"undefined\"){\r\n\t\t\t\tconfig.headers = {};\r\n\t\t\t}\r\n\r\n\t\t\tif(typeof config.headers.Accept === \"undefined\"){\r\n\t\t\t\tconfig.headers.Accept = \"application/json\";\r\n\t\t\t}\r\n\r\n\t\t\tif(typeof config.headers[\"X-Requested-With\"] === \"undefined\"){\r\n\t\t\t\tconfig.headers[\"X-Requested-With\"] = \"XMLHttpRequest\";\r\n\t\t\t}\r\n\r\n\t\t\tif(typeof config.mode === \"undefined\"){\r\n\t\t\t\tconfig.mode = \"cors\";\r\n\t\t\t}\r\n\r\n\t\t\tif(config.mode == \"cors\"){\r\n\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.then((response)=>{\r\n\t\t\t\tif(response.ok) {\r\n\t\t\t\t\tresponse.json()\r\n\t\t\t\t\t.then((data)=>{\r\n\t\t\t\t\t\tresolve(data);\r\n\t\t\t\t\t}).catch((error)=>{\r\n\t\t\t\t\t\treject(error);\r\n\t\t\t\t\t\tconsole.warn(\"Ajax Load Error - Invalid JSON returned\", error);\r\n\t\t\t\t\t});\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.error(\"Ajax Load Error - Connection Error: \" + response.status, response.statusText);\r\n\t\t\t\t\treject(response);\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t\t.catch((error)=>{\r\n\t\t\t\tconsole.error(\"Ajax Load Error - Connection Error: \", error);\r\n\t\t\t\treject(error);\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Ajax Load Error - No URL Set\");\r\n\t\t\tresolve([]);\r\n\t\t}\r\n\t});\r\n};","import Module from '../../core/Module.js';\r\n\r\nimport defaultPasteActions from './defaults/pasteActions.js';\r\nimport defaultPasteParsers from './defaults/pasteParsers.js';\r\n\r\nclass Clipboard extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.mode = true;\r\n\t\tthis.pasteParser = function(){};\r\n\t\tthis.pasteAction = function(){};\r\n\t\tthis.customSelection = false;\r\n\t\tthis.rowRange = false;\r\n\t\tthis.blocked = true; //block copy actions not originating from this command\r\n\r\n\t\tthis.registerTableOption(\"clipboard\", false); //enable clipboard\r\n\t\tthis.registerTableOption(\"clipboardCopyStyled\", true); //formatted table data\r\n\t\tthis.registerTableOption(\"clipboardCopyConfig\", false); //clipboard config\r\n\t\tthis.registerTableOption(\"clipboardCopyFormatter\", false); //DEPRICATED - REMOVE in 5.0\r\n\t\tthis.registerTableOption(\"clipboardCopyRowRange\", \"active\"); //restrict clipboard to visible rows only\r\n\t\tthis.registerTableOption(\"clipboardPasteParser\", \"table\"); //convert pasted clipboard data to rows\r\n\t\tthis.registerTableOption(\"clipboardPasteAction\", \"insert\"); //how to insert pasted data into the table\r\n\r\n\t\tthis.registerColumnOption(\"clipboard\");\r\n\t\tthis.registerColumnOption(\"titleClipboard\");\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tthis.mode = this.table.options.clipboard;\r\n\r\n\t\tthis.rowRange = this.table.options.clipboardCopyRowRange;\r\n\r\n\t\tif(this.mode === true || this.mode === \"copy\"){\r\n\t\t\tthis.table.element.addEventListener(\"copy\", (e) => {\r\n\t\t\t\tvar plain, html, list;\r\n\r\n\t\t\t\tif(!this.blocked){\r\n\t\t\t\t\te.preventDefault();\r\n\r\n\t\t\t\t\tif(this.customSelection){\r\n\t\t\t\t\t\tplain = this.customSelection;\r\n\r\n\t\t\t\t\t\tif(this.table.options.clipboardCopyFormatter){\r\n\t\t\t\t\t\t\tplain = this.table.options.clipboardCopyFormatter(\"plain\", plain);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}else{\r\n\r\n\t\t\t\t\t\tvar list = this.table.modules.export.generateExportList(this.table.options.clipboardCopyConfig, this.table.options.clipboardCopyStyled, this.rowRange, \"clipboard\");\r\n\r\n\t\t\t\t\t\thtml = this.table.modules.export.genereateHTMLTable(list);\r\n\t\t\t\t\t\tplain = html ? this.generatePlainContent(list) : \"\";\r\n\r\n\t\t\t\t\t\tif(this.table.options.clipboardCopyFormatter){\r\n\t\t\t\t\t\t\tplain = this.table.options.clipboardCopyFormatter(\"plain\", plain);\r\n\t\t\t\t\t\t\thtml = this.table.options.clipboardCopyFormatter(\"html\", html);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (window.clipboardData && window.clipboardData.setData) {\r\n\t\t\t\t\t\twindow.clipboardData.setData('Text', plain);\r\n\t\t\t\t\t} else if (e.clipboardData && e.clipboardData.setData) {\r\n\t\t\t\t\t\te.clipboardData.setData('text/plain', plain);\r\n\t\t\t\t\t\tif(html){\r\n\t\t\t\t\t\t\te.clipboardData.setData('text/html', html);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} else if (e.originalEvent && e.originalEvent.clipboardData.setData) {\r\n\t\t\t\t\t\te.originalEvent.clipboardData.setData('text/plain', plain);\r\n\t\t\t\t\t\tif(html){\r\n\t\t\t\t\t\t\te.originalEvent.clipboardData.setData('text/html', html);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tthis.dispatchExternal(\"clipboardCopied\", plain, html);\r\n\r\n\t\t\t\t\tthis.reset();\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif(this.mode === true || this.mode === \"paste\"){\r\n\t\t\tthis.table.element.addEventListener(\"paste\", (e) => {\r\n\t\t\t\tthis.paste(e);\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tthis.setPasteParser(this.table.options.clipboardPasteParser);\r\n\t\tthis.setPasteAction(this.table.options.clipboardPasteAction);\r\n\r\n\t\tthis.registerTableFunction(\"copyToClipboard\", this.copy.bind(this));\r\n\t}\r\n\r\n\treset(){\r\n\t\tthis.blocked = true;\r\n\t\tthis.customSelection = false;\r\n\t}\r\n\r\n\tgeneratePlainContent (list) {\r\n\t\tvar output = [];\r\n\r\n\t\tlist.forEach((row) => {\r\n\t\t\tvar rowData = [];\r\n\r\n\t\t\trow.columns.forEach((col) => {\r\n\t\t\t\tvar value = \"\";\r\n\r\n\t\t\t\tif(col){\r\n\r\n\t\t\t\t\tif(row.type === \"group\"){\r\n\t\t\t\t\t\tcol.value = col.component.getKey();\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif(col.value === null){\r\n\t\t\t\t\t\tvalue = \"\";\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tswitch(typeof col.value){\r\n\t\t\t\t\t\t\tcase \"object\":\r\n\t\t\t\t\t\t\tvalue = JSON.stringify(col.value);\r\n\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\t\tcase \"undefined\":\r\n\t\t\t\t\t\t\tvalue = \"\";\r\n\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\t\tdefault:\r\n\t\t\t\t\t\t\tvalue = col.value;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\trowData.push(value);\r\n\t\t\t});\r\n\r\n\t\t\toutput.push(rowData.join(\"\\t\"));\r\n\t\t});\r\n\r\n\t\treturn output.join(\"\\n\");\r\n\t}\r\n\r\n\tcopy (range, internal) {\r\n\t\tvar range, sel, textRange;\r\n\t\tthis.blocked = false;\r\n\t\tthis.customSelection = false;\r\n\r\n\t\tif (this.mode === true || this.mode === \"copy\") {\r\n\r\n\t\t\tthis.rowRange = range || this.table.options.clipboardCopyRowRange;\r\n\r\n\t\t\tif (typeof window.getSelection != \"undefined\" && typeof document.createRange != \"undefined\") {\r\n\t\t\t\trange = document.createRange();\r\n\t\t\t\trange.selectNodeContents(this.table.element);\r\n\t\t\t\tsel = window.getSelection();\r\n\r\n\t\t\t\tif (sel.toString() && internal) {\r\n\t\t\t\t\tthis.customSelection = sel.toString();\r\n\t\t\t\t}\r\n\r\n\t\t\t\tsel.removeAllRanges();\r\n\t\t\t\tsel.addRange(range);\r\n\t\t\t} else if (typeof document.selection != \"undefined\" && typeof document.body.createTextRange != \"undefined\") {\r\n\t\t\t\ttextRange = document.body.createTextRange();\r\n\t\t\t\ttextRange.moveToElementText(this.table.element);\r\n\t\t\t\ttextRange.select();\r\n\t\t\t}\r\n\r\n\t\t\tdocument.execCommand('copy');\r\n\r\n\t\t\tif (sel) {\r\n\t\t\t\tsel.removeAllRanges();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//PASTE EVENT HANDLING\r\n\tsetPasteAction(action){\r\n\r\n\t\tswitch(typeof action){\r\n\t\t\tcase \"string\":\r\n\t\t\tthis.pasteAction = Clipboard.pasteActions[action];\r\n\r\n\t\t\tif(!this.pasteAction){\r\n\t\t\t\tconsole.warn(\"Clipboard Error - No such paste action found:\", action);\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"function\":\r\n\t\t\tthis.pasteAction = action;\r\n\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\tsetPasteParser(parser){\r\n\t\tswitch(typeof parser){\r\n\t\t\tcase \"string\":\r\n\t\t\tthis.pasteParser = Clipboard.pasteParsers[parser];\r\n\r\n\t\t\tif(!this.pasteParser){\r\n\t\t\t\tconsole.warn(\"Clipboard Error - No such paste parser found:\", parser);\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"function\":\r\n\t\t\tthis.pasteParser = parser;\r\n\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\tpaste(e){\r\n\t\tvar data, rowData, rows;\r\n\r\n\t\tif(this.checkPaseOrigin(e)){\r\n\r\n\t\t\tdata = this.getPasteData(e);\r\n\r\n\t\t\trowData = this.pasteParser.call(this, data);\r\n\r\n\t\t\tif(rowData){\r\n\t\t\t\te.preventDefault();\r\n\r\n\t\t\t\tif(this.table.modExists(\"mutator\")){\r\n\t\t\t\t\trowData = this.mutateData(rowData);\r\n\t\t\t\t}\r\n\r\n\t\t\t\trows = this.pasteAction.call(this, rowData);\r\n\r\n\t\t\t\tthis.dispatchExternal(\"clipboardPasted\", data, rowData, rows);\r\n\t\t\t}else{\r\n\t\t\t\tthis.dispatchExternal(\"clipboardPasteError\", data);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tmutateData(data){\r\n\t\tvar output = [];\r\n\r\n\t\tif(Array.isArray(data)){\r\n\t\t\tdata.forEach((row) => {\r\n\t\t\t\toutput.push(this.table.modules.mutator.transformRow(row, \"clipboard\"));\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\toutput = data;\r\n\t\t}\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\r\n\tcheckPaseOrigin(e){\r\n\t\tvar valid = true;\r\n\r\n\t\tif(e.target.tagName != \"DIV\" || this.table.modules.edit.currentCell){\r\n\t\t\tvalid = false;\r\n\t\t}\r\n\r\n\t\treturn valid;\r\n\t}\r\n\r\n\tgetPasteData(e){\r\n\t\tvar data;\r\n\r\n\t\tif (window.clipboardData && window.clipboardData.getData) {\r\n\t\t\tdata = window.clipboardData.getData('Text');\r\n\t\t} else if (e.clipboardData && e.clipboardData.getData) {\r\n\t\t\tdata = e.clipboardData.getData('text/plain');\r\n\t\t} else if (e.originalEvent && e.originalEvent.clipboardData.getData) {\r\n\t\t\tdata = e.originalEvent.clipboardData.getData('text/plain');\r\n\t\t}\r\n\r\n\t\treturn data;\r\n\t}\r\n}\r\n\r\nClipboard.moduleName = \"clipboard\";\r\n\r\n//load defaults\r\nClipboard.pasteActions = defaultPasteActions;\r\nClipboard.pasteParsers = defaultPasteParsers;\r\n\r\nexport default Clipboard;","export default {\r\n\treplace:function(rows){\r\n\t\treturn this.table.setData(rows);\r\n\t},\r\n\tupdate:function(rows){\r\n\t\treturn this.table.updateOrAddData(rows);\r\n\t},\r\n\tinsert:function(rows){\r\n\t\treturn this.table.addData(rows);\r\n\t},\r\n};","export default {\r\n\ttable:function(clipboard){\r\n\t\tvar data = [],\r\n\t\tsuccess = false,\r\n\t\theaderFindSuccess = true,\r\n\t\tcolumns = this.table.columnManager.columns,\r\n\t\tcolumnMap = [],\r\n\t\trows = [];\r\n\r\n\t\t//get data from clipboard into array of columns and rows.\r\n\t\tclipboard = clipboard.split(\"\\n\");\r\n\r\n\t\tclipboard.forEach(function(row){\r\n\t\t\tdata.push(row.split(\"\\t\"));\r\n\t\t});\r\n\r\n\t\tif(data.length && !(data.length === 1 && data[0].length < 2)){\r\n\t\t\tsuccess = true;\r\n\r\n\t\t\t//check if headers are present by title\r\n\t\t\tdata[0].forEach(function(value){\r\n\t\t\t\tvar column = columns.find(function(column){\r\n\t\t\t\t\treturn value && column.definition.title && value.trim() && column.definition.title.trim() === value.trim();\r\n\t\t\t\t});\r\n\r\n\t\t\t\tif(column){\r\n\t\t\t\t\tcolumnMap.push(column);\r\n\t\t\t\t}else{\r\n\t\t\t\t\theaderFindSuccess = false;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\t//check if column headers are present by field\r\n\t\t\tif(!headerFindSuccess){\r\n\t\t\t\theaderFindSuccess = true;\r\n\t\t\t\tcolumnMap = [];\r\n\r\n\t\t\t\tdata[0].forEach(function(value){\r\n\t\t\t\t\tvar column = columns.find(function(column){\r\n\t\t\t\t\t\treturn value && column.field && value.trim() && column.field.trim() === value.trim();\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\tif(column){\r\n\t\t\t\t\t\tcolumnMap.push(column);\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\theaderFindSuccess = false;\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\tif(!headerFindSuccess){\r\n\t\t\t\t\tcolumnMap = this.table.columnManager.columnsByIndex;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t//remove header row if found\r\n\t\t\tif(headerFindSuccess){\r\n\t\t\t\tdata.shift();\r\n\t\t\t}\r\n\r\n\t\t\tdata.forEach(function(item){\r\n\t\t\t\tvar row = {};\r\n\r\n\t\t\t\titem.forEach(function(value, i){\r\n\t\t\t\t\tif(columnMap[i]){\r\n\t\t\t\t\t\trow[columnMap[i].field] = value;\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\trows.push(row);\r\n\t\t\t});\r\n\r\n\t\t\treturn rows;\r\n\t\t}else{\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n};","class CalcComponent{\r\n\tconstructor (row){\r\n\t\tthis._row = row;\r\n\r\n\t\treturn new Proxy(this, {\r\n\t\t\tget: function(target, name, receiver) {\r\n\t\t\t\tif (typeof target[name] !== \"undefined\") {\r\n\t\t\t\t\treturn target[name];\r\n\t\t\t\t}else{\r\n\t\t\t\t\treturn target._row.table.componentFunctionBinder.handle(\"row\", target._row, name)\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t})\r\n\t}\r\n\r\n\tgetData(transform){\r\n\t\treturn this._row.getData(transform);\r\n\t}\r\n\r\n\tgetElement(){\r\n\t\treturn this._row.getElement();\r\n\t}\r\n\r\n\tgetTable(){\r\n\t\treturn this._row.table;\r\n\t}\r\n\r\n\tgetCells(){\r\n\t\tvar cells = [];\r\n\r\n\t\tthis._row.getCells().forEach(function(cell){\r\n\t\t\tcells.push(cell.getComponent());\r\n\t\t});\r\n\r\n\t\treturn cells;\r\n\t}\r\n\r\n\tgetCell(column){\r\n\t\tvar cell = this._row.getCell(column);\r\n\t\treturn cell ? cell.getComponent() : false;\r\n\t}\r\n\r\n\t_getSelf(){\r\n\t\treturn this._row;\r\n\t}\r\n}\r\n\r\nexport default CalcComponent;","export default {\r\n\t\"avg\":function(values, data, calcParams){\r\n\t\tvar output = 0,\r\n\t\tprecision = typeof calcParams.precision !== \"undefined\" ? calcParams.precision : 2\r\n\r\n\t\tif(values.length){\r\n\t\t\toutput = values.reduce(function(sum, value){\r\n\t\t\t\treturn Number(sum) + Number(value);\r\n\t\t\t});\r\n\r\n\t\t\toutput = output / values.length;\r\n\r\n\t\t\toutput = precision !== false ? output.toFixed(precision) : output;\r\n\t\t}\r\n\r\n\t\treturn parseFloat(output).toString();\r\n\t},\r\n\t\"max\":function(values, data, calcParams){\r\n\t\tvar output = null,\r\n\t\tprecision = typeof calcParams.precision !== \"undefined\" ? calcParams.precision : false;\r\n\r\n\t\tvalues.forEach(function(value){\r\n\r\n\t\t\tvalue = Number(value);\r\n\r\n\t\t\tif(value > output || output === null){\r\n\t\t\t\toutput = value;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn output !== null ? (precision !== false ? output.toFixed(precision) : output) : \"\";\r\n\t},\r\n\t\"min\":function(values, data, calcParams){\r\n\t\tvar output = null,\r\n\t\tprecision = typeof calcParams.precision !== \"undefined\" ? calcParams.precision : false;\r\n\r\n\t\tvalues.forEach(function(value){\r\n\r\n\t\t\tvalue = Number(value);\r\n\r\n\t\t\tif(value < output || output === null){\r\n\t\t\t\toutput = value;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn output !== null ? (precision !== false ? output.toFixed(precision) : output) : \"\";\r\n\t},\r\n\t\"sum\":function(values, data, calcParams){\r\n\t\tvar output = 0,\r\n\t\tprecision = typeof calcParams.precision !== \"undefined\" ? calcParams.precision : false;\r\n\r\n\t\tif(values.length){\r\n\t\t\tvalues.forEach(function(value){\r\n\t\t\t\tvalue = Number(value);\r\n\r\n\t\t\t\toutput += !isNaN(value) ? Number(value) : 0;\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn precision !== false ? output.toFixed(precision) : output;\r\n\t},\r\n\t\"concat\":function(values, data, calcParams){\r\n\t\tvar output = 0;\r\n\r\n\t\tif(values.length){\r\n\t\t\toutput = values.reduce(function(sum, value){\r\n\t\t\t\treturn String(sum) + String(value);\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn output;\r\n\t},\r\n\t\"count\":function(values, data, calcParams){\r\n\t\tvar output = 0;\r\n\r\n\t\tif(values.length){\r\n\t\t\tvalues.forEach(function(value){\r\n\t\t\t\tif(value){\r\n\t\t\t\t\toutput ++;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn output;\r\n\t},\r\n};","import Module from '../../core/Module.js';\r\n\r\nimport CalcComponent from './CalcComponent.js';\r\n\r\nimport Cell from '../../core/cell/Cell.js';\r\nimport Column from '../../core/column/Column.js';\r\nimport Row from '../../core/row/Row.js';\r\n\r\nimport defaultCalculations from './defaults/calculations.js';\r\n\r\nclass ColumnCalcs extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.topCalcs = [];\r\n\t\tthis.botCalcs = [];\r\n\t\tthis.genColumn = false;\r\n\t\tthis.topElement = this.createElement();\r\n\t\tthis.botElement = this.createElement();\r\n\t\tthis.topRow = false;\r\n\t\tthis.botRow = false;\r\n\t\tthis.topInitialized = false;\r\n\t\tthis.botInitialized = false;\r\n\r\n\t\tthis.registerTableOption(\"columnCalcs\", true);\r\n\r\n\t\tthis.registerColumnOption(\"topCalc\");\r\n\t\tthis.registerColumnOption(\"topCalcParams\");\r\n\t\tthis.registerColumnOption(\"topCalcFormatter\");\r\n\t\tthis.registerColumnOption(\"topCalcFormatterParams\");\r\n\t\tthis.registerColumnOption(\"bottomCalc\");\r\n\t\tthis.registerColumnOption(\"bottomCalcParams\");\r\n\t\tthis.registerColumnOption(\"bottomCalcFormatter\");\r\n\t\tthis.registerColumnOption(\"bottomCalcFormatterParams\");\r\n\t}\r\n\r\n\tcreateElement (){\r\n\t\tvar el = document.createElement(\"div\");\r\n\t\tel.classList.add(\"tabulator-calcs-holder\");\r\n\t\treturn el;\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tthis.genColumn = new Column({field:\"value\"}, this);\r\n\r\n\t\tthis.subscribe(\"cell-value-changed\", this.cellValueChanged.bind(this));\r\n\t\tthis.subscribe(\"column-init\", this.initializeColumnCheck.bind(this));\r\n\t\tthis.subscribe(\"row-deleted\", this.rowsUpdated.bind(this));\r\n\t\tthis.subscribe(\"scroll-horizontal\", this.scrollHorizontal.bind(this));\r\n\t\tthis.subscribe(\"row-added\", this.rowsUpdated.bind(this));\r\n\t\tthis.subscribe(\"column-moved\", this.recalcActiveRows.bind(this));\r\n\t\tthis.subscribe(\"column-add\", this.recalcActiveRows.bind(this));\r\n\t\tthis.subscribe(\"data-refreshed\", this.recalcActiveRowsRefresh.bind(this));\r\n\t\tthis.subscribe(\"table-redraw\", this.tableRedraw.bind(this));\r\n\t\tthis.subscribe(\"rows-visible\", this.visibleRows.bind(this));\r\n\r\n\t\tthis.registerTableFunction(\"getCalcResults\", this.getResults.bind(this));\r\n\t\tthis.registerTableFunction(\"recalc\", this.userRecalc.bind(this));\r\n\t}\r\n\r\n\ttableRedraw(force){\r\n\t\tthis.recalc(this.table.rowManager.activeRows);\r\n\r\n\t\tif(force){\r\n\t\t\tthis.redraw();\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t///////////////////////////////////\r\n\t///////// Table Functions /////////\r\n\t///////////////////////////////////\r\n\tuserRecalc(){\r\n\t\tthis.recalc(this.table.rowManager.activeRows);\r\n\t}\r\n\r\n\t///////////////////////////////////\r\n\t///////// Internal Logic //////////\r\n\t///////////////////////////////////\r\n\r\n\tvisibleRows(viewable, rows){\r\n\t\tif(this.topRow){\r\n\t\t\trows.unshift(this.topRow);\r\n\t\t}\r\n\r\n\t\tif(this.botRow){\r\n\t\t\trows.push(this.botRow);\r\n\t\t}\r\n\t\r\n\t\treturn rows;\r\n\t}\r\n\r\n\trowsUpdated(row){\r\n\t\tif(this.table.options.groupBy){\r\n\t\t\tthis.recalcRowGroup(this);\r\n\t\t}else{\r\n\t\t\tthis.recalcActiveRows();\r\n\t\t}\r\n\t}\r\n\r\n\trecalcActiveRowsRefresh(){\r\n\t\tif(this.table.options.groupBy && this.table.options.dataTreeStartExpanded && this.table.options.dataTree){\r\n\t\t\tthis.recalcAll();\r\n\t\t}else{\r\n\t\t\tthis.recalcActiveRows();\r\n\t\t}\r\n\t}\r\n\r\n\trecalcActiveRows(){\r\n\t\tthis.recalc(this.table.rowManager.activeRows);\r\n\t}\r\n\r\n\tcellValueChanged(cell){\r\n\t\tif(cell.column.definition.topCalc || cell.column.definition.bottomCalc){\r\n\t\t\tif(this.table.options.groupBy){\r\n\t\t\t\tif(this.table.options.columnCalcs == \"table\" || this.table.options.columnCalcs == \"both\"){\r\n\t\t\t\t\tthis.recalcActiveRows();\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(this.table.options.columnCalcs != \"table\"){\r\n\t\t\t\t\tthis.recalcRowGroup(cell.row);\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tthis.recalcActiveRows();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tinitializeColumnCheck(column){\r\n\t\tif(column.definition.topCalc || column.definition.bottomCalc){\r\n\t\t\tthis.initializeColumn(column);\r\n\t\t}\r\n\t}\r\n\r\n\t//initialize column calcs\r\n\tinitializeColumn(column){\r\n\t\tvar def = column.definition\r\n\r\n\t\tvar config = {\r\n\t\t\ttopCalcParams:def.topCalcParams || {},\r\n\t\t\tbotCalcParams:def.bottomCalcParams || {},\r\n\t\t};\r\n\r\n\t\tif(def.topCalc){\r\n\r\n\t\t\tswitch(typeof def.topCalc){\r\n\t\t\t\tcase \"string\":\r\n\t\t\t\tif(ColumnCalcs.calculations[def.topCalc]){\r\n\t\t\t\t\tconfig.topCalc = ColumnCalcs.calculations[def.topCalc]\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.warn(\"Column Calc Error - No such calculation found, ignoring: \", def.topCalc);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"function\":\r\n\t\t\t\tconfig.topCalc = def.topCalc;\r\n\t\t\t\tbreak\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif(config.topCalc){\r\n\t\t\t\tcolumn.modules.columnCalcs = config;\r\n\t\t\t\tthis.topCalcs.push(column);\r\n\r\n\t\t\t\tif(this.table.options.columnCalcs != \"group\"){\r\n\t\t\t\t\tthis.initializeTopRow();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tif(def.bottomCalc){\r\n\t\t\tswitch(typeof def.bottomCalc){\r\n\t\t\t\tcase \"string\":\r\n\t\t\t\tif(ColumnCalcs.calculations[def.bottomCalc]){\r\n\t\t\t\t\tconfig.botCalc = ColumnCalcs.calculations[def.bottomCalc]\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.warn(\"Column Calc Error - No such calculation found, ignoring: \", def.bottomCalc);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"function\":\r\n\t\t\t\tconfig.botCalc = def.bottomCalc;\r\n\t\t\t\tbreak\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif(config.botCalc){\r\n\t\t\t\tcolumn.modules.columnCalcs = config;\r\n\t\t\t\tthis.botCalcs.push(column);\r\n\r\n\t\t\t\tif(this.table.options.columnCalcs != \"group\"){\r\n\t\t\t\t\tthis.initializeBottomRow();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t//dummy functions to handle being mock column manager\r\n\tregisterColumnField(){};\r\n\r\n\tremoveCalcs(){\r\n\t\tvar changed = false;\r\n\r\n\t\tif(this.topInitialized){\r\n\t\t\tthis.topInitialized = false;\r\n\t\t\tthis.topElement.parentNode.removeChild(this.topElement);\r\n\t\t\tchanged = true;\r\n\t\t}\r\n\r\n\t\tif(this.botInitialized){\r\n\t\t\tthis.botInitialized = false;\r\n\t\t\tthis.table.footerManager.remove(this.botElement);\r\n\t\t\tchanged = true;\r\n\t\t}\r\n\r\n\t\tif(changed){\r\n\t\t\tthis.table.rowManager.adjustTableSize();\r\n\t\t}\r\n\t}\r\n\r\n\tinitializeTopRow(){\r\n\t\tif(!this.topInitialized){\r\n\t\t\tthis.table.columnManager.getElement().insertBefore(this.topElement, this.table.columnManager.headersElement.nextSibling);\r\n\t\t\tthis.topInitialized = true;\r\n\t\t}\r\n\t}\r\n\r\n\tinitializeBottomRow(){\r\n\t\tif(!this.botInitialized){\r\n\t\t\tthis.table.footerManager.prepend(this.botElement);\r\n\t\t\tthis.botInitialized = true;\r\n\t\t}\r\n\t}\r\n\r\n\tscrollHorizontal(left){\r\n\t\tif(this.botInitialized && this.botRow){\r\n\t\t\tthis.botRow.getElement().style.marginLeft = (-left) + \"px\";\r\n\t\t}\r\n\t}\r\n\r\n\trecalc(rows){\r\n\t\tvar data, row;\r\n\r\n\t\tif(this.topInitialized || this.botInitialized){\r\n\t\t\tdata = this.rowsToData(rows);\r\n\r\n\t\t\tif(this.topInitialized){\r\n\t\t\t\tif(this.topRow){\r\n\t\t\t\t\tthis.topRow.deleteCells();\r\n\t\t\t\t}\r\n\r\n\t\t\t\trow = this.generateRow(\"top\", this.rowsToData(rows))\r\n\t\t\t\tthis.topRow = row;\r\n\t\t\t\twhile(this.topElement.firstChild) this.topElement.removeChild(this.topElement.firstChild);\r\n\t\t\t\tthis.topElement.appendChild(row.getElement());\r\n\t\t\t\trow.initialize(true);\r\n\t\t\t}\r\n\r\n\t\t\tif(this.botInitialized){\r\n\t\t\t\tif(this.botRow){\r\n\t\t\t\t\tthis.botRow.deleteCells();\r\n\t\t\t\t}\r\n\r\n\t\t\t\trow = this.generateRow(\"bottom\", this.rowsToData(rows))\r\n\t\t\t\tthis.botRow = row;\r\n\t\t\t\twhile(this.botElement.firstChild) this.botElement.removeChild(this.botElement.firstChild);\r\n\t\t\t\tthis.botElement.appendChild(row.getElement());\r\n\t\t\t\trow.initialize(true);\r\n\t\t\t}\r\n\r\n\t\t\tthis.table.rowManager.adjustTableSize();\r\n\r\n\t\t\t//set resizable handles\r\n\t\t\tif(this.table.modExists(\"frozenColumns\")){\r\n\t\t\t\tthis.table.modules.frozenColumns.layout();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\trecalcRowGroup(row){\r\n\t\tthis.recalcGroup(this.table.modules.groupRows.getRowGroup(row));\r\n\t}\r\n\r\n\trecalcAll(){\r\n\t\tif(this.topCalcs.length || this.botCalcs.length){\r\n\t\t\tif(this.table.options.columnCalcs !== \"group\"){\r\n\t\t\t\tthis.recalcActiveRows();\r\n\t\t\t}\r\n\r\n\t\t\tif(this.table.options.groupBy && this.table.options.columnCalcs !== \"table\"){\r\n\r\n\t\t\t\tvar groups = this.table.modules.groupRows.getChildGroups();\r\n\r\n\t\t\t\tgroups.forEach((group) => {\r\n\t\t\t\t\tthis.recalcGroup(group);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\trecalcGroup(group){\r\n\t\tvar data, rowData;\r\n\r\n\t\tif(group){\r\n\t\t\tif(group.calcs){\r\n\t\t\t\tif(group.calcs.bottom){\r\n\t\t\t\t\tdata = this.rowsToData(group.rows);\r\n\t\t\t\t\trowData = this.generateRowData(\"bottom\", data);\r\n\r\n\t\t\t\t\tgroup.calcs.bottom.updateData(rowData);\r\n\t\t\t\t\tgroup.calcs.bottom.reinitialize();\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(group.calcs.top){\r\n\t\t\t\t\tdata = this.rowsToData(group.rows);\r\n\t\t\t\t\trowData = this.generateRowData(\"top\", data);\r\n\r\n\t\t\t\t\tgroup.calcs.top.updateData(rowData);\r\n\t\t\t\t\tgroup.calcs.top.reinitialize();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//generate top stats row\r\n\tgenerateTopRow(rows){\r\n\t\treturn this.generateRow(\"top\", this.rowsToData(rows));\r\n\t}\r\n\t//generate bottom stats row\r\n\tgenerateBottomRow(rows){\r\n\t\treturn this.generateRow(\"bottom\", this.rowsToData(rows));\r\n\t}\r\n\r\n\trowsToData(rows){\r\n\t\tvar data = [];\r\n\t\t\r\n\t\trows.forEach((row) => {\r\n\t\t\tdata.push(row.getData());\r\n\r\n\t\t\tif(this.table.options.dataTree && this.table.options.dataTreeChildColumnCalcs){\r\n\t\t\t\tif(row.modules.dataTree && row.modules.dataTree.open){\r\n\t\t\t\t\tvar children = this.rowsToData(this.table.modules.dataTree.getFilteredTreeChildren(row));\r\n\t\t\t\t\tdata = data.concat(children);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn data;\r\n\t}\r\n\r\n\t//generate stats row\r\n\tgenerateRow(pos, data){\r\n\t\tvar rowData = this.generateRowData(pos, data),\r\n\t\trow;\r\n\r\n\t\tif(this.table.modExists(\"mutator\")){\r\n\t\t\tthis.table.modules.mutator.disable();\r\n\t\t}\r\n\r\n\t\trow = new Row(rowData, this, \"calc\");\r\n\r\n\t\tif(this.table.modExists(\"mutator\")){\r\n\t\t\tthis.table.modules.mutator.enable();\r\n\t\t}\r\n\r\n\t\trow.getElement().classList.add(\"tabulator-calcs\", \"tabulator-calcs-\" + pos);\r\n\r\n\t\trow.component = false;\r\n\r\n\t\trow.getComponent = () => {\r\n\t\t\tif(!row.component){\r\n\t\t\t\trow.component = new CalcComponent(row);\r\n\t\t\t}\r\n\r\n\t\t\treturn row.component;\r\n\t\t};\r\n\r\n\t\trow.generateCells = () => {\r\n\r\n\t\t\tvar cells = [];\r\n\r\n\t\t\tthis.table.columnManager.columnsByIndex.forEach((column) => {\r\n\r\n\t\t\t\t\t//set field name of mock column\r\n\t\t\t\t\tthis.genColumn.setField(column.getField());\r\n\t\t\t\t\tthis.genColumn.hozAlign = column.hozAlign;\r\n\r\n\t\t\t\t\tif(column.definition[pos + \"CalcFormatter\"] && this.table.modExists(\"format\")){\r\n\t\t\t\t\t\tthis.genColumn.modules.format = {\r\n\t\t\t\t\t\t\tformatter: this.table.modules.format.getFormatter(column.definition[pos + \"CalcFormatter\"]),\r\n\t\t\t\t\t\t\tparams: column.definition[pos + \"CalcFormatterParams\"] || {},\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tthis.genColumn.modules.format = {\r\n\t\t\t\t\t\t\tformatter: this.table.modules.format.getFormatter(\"plaintext\"),\r\n\t\t\t\t\t\t\tparams:{}\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t//ensure css class defintion is replicated to calculation cell\r\n\t\t\t\t\tthis.genColumn.definition.cssClass = column.definition.cssClass;\r\n\r\n\t\t\t\t\t//generate cell and assign to correct column\r\n\t\t\t\t\tvar cell = new Cell(this.genColumn, row);\r\n\t\t\t\t\tcell.getElement();\r\n\t\t\t\t\tcell.column = column;\r\n\t\t\t\t\tcell.setWidth();\r\n\r\n\t\t\t\t\tcolumn.cells.push(cell);\r\n\t\t\t\t\tcells.push(cell);\r\n\r\n\t\t\t\t\tif(!column.visible){\r\n\t\t\t\t\t\tcell.hide();\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\trow.cells = cells;\r\n\t\t};\r\n\r\n\t\treturn row;\r\n\t}\r\n\r\n\t//generate stats row\r\n\tgenerateRowData(pos, data){\r\n\t\tvar rowData = {},\r\n\t\tcalcs = pos == \"top\" ? this.topCalcs : this.botCalcs,\r\n\t\ttype = pos == \"top\" ? \"topCalc\" : \"botCalc\",\r\n\t\tparams, paramKey;\r\n\r\n\t\tcalcs.forEach(function(column){\r\n\t\t\tvar values = [];\r\n\r\n\t\t\tif(column.modules.columnCalcs && column.modules.columnCalcs[type]){\r\n\t\t\t\tdata.forEach(function(item){\r\n\t\t\t\t\tvalues.push(column.getFieldValue(item));\r\n\t\t\t\t});\r\n\r\n\t\t\t\tparamKey = type + \"Params\";\r\n\t\t\t\tparams = typeof column.modules.columnCalcs[paramKey] === \"function\" ? column.modules.columnCalcs[paramKey](values, data) : column.modules.columnCalcs[paramKey];\r\n\r\n\t\t\t\tcolumn.setFieldValue(rowData, column.modules.columnCalcs[type](values, data, params));\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn rowData;\r\n\t}\r\n\r\n\thasTopCalcs(){\r\n\t\treturn\t!!(this.topCalcs.length);\r\n\t}\r\n\r\n\thasBottomCalcs(){\r\n\t\treturn\t!!(this.botCalcs.length);\r\n\t}\r\n\r\n\t//handle table redraw\r\n\tredraw(){\r\n\t\tif(this.topRow){\r\n\t\t\tthis.topRow.normalizeHeight(true);\r\n\t\t}\r\n\t\tif(this.botRow){\r\n\t\t\tthis.botRow.normalizeHeight(true);\r\n\t\t}\r\n\t}\r\n\r\n\t//return the calculated\r\n\tgetResults(){\r\n\t\tvar results = {},\r\n\t\tgroups;\r\n\r\n\t\tif(this.table.options.groupBy && this.table.modExists(\"groupRows\")){\r\n\t\t\tgroups = this.table.modules.groupRows.getGroups(true);\r\n\r\n\t\t\tgroups.forEach((group) => {\r\n\t\t\t\tresults[group.getKey()] = this.getGroupResults(group);\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tresults = {\r\n\t\t\t\ttop: this.topRow ? this.topRow.getData() : {},\r\n\t\t\t\tbottom: this.botRow ? this.botRow.getData() : {},\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn results;\r\n\t}\r\n\r\n\t//get results from a group\r\n\tgetGroupResults(group){\r\n\t\tvar groupObj = group._getSelf(),\r\n\t\tsubGroups = group.getSubGroups(),\r\n\t\tsubGroupResults = {},\r\n\t\tresults = {};\r\n\r\n\t\tsubGroups.forEach((subgroup) => {\r\n\t\t\tsubGroupResults[subgroup.getKey()] = this.getGroupResults(subgroup);\r\n\t\t});\r\n\r\n\t\tresults = {\r\n\t\t\ttop: groupObj.calcs.top ? groupObj.calcs.top.getData() : {},\r\n\t\t\tbottom: groupObj.calcs.bottom ? groupObj.calcs.bottom.getData() : {},\r\n\t\t\tgroups: subGroupResults,\r\n\t\t}\r\n\r\n\t\treturn results;\r\n\t}\r\n}\r\n\r\nColumnCalcs.moduleName = \"columnCalcs\";\r\n\r\n//load defaults\r\nColumnCalcs.calculations = defaultCalculations;\r\n\r\nexport default ColumnCalcs;","import Module from '../../core/Module.js';\r\n\r\nimport Row from '../../core/row/Row.js';\r\n\r\nclass DataTree extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.indent = 10;\r\n\t\tthis.field = \"\";\r\n\t\tthis.collapseEl = null;\r\n\t\tthis.expandEl = null;\r\n\t\tthis.branchEl = null;\r\n\t\tthis.elementField = false;\r\n\r\n\t\tthis.startOpen = function(){};\r\n\r\n\t\tthis.displayIndex = 0;\r\n\r\n\t\tthis.registerTableOption(\"dataTree\", false); //enable data tree\r\n\t\tthis.registerTableOption(\"dataTreeFilter\", true); //filter child rows\r\n\t\tthis.registerTableOption(\"dataTreeSort\", true); //sort child rows\r\n\t\tthis.registerTableOption(\"dataTreeElementColumn\", false);\r\n\t\tthis.registerTableOption(\"dataTreeBranchElement\", true);//show data tree branch element\r\n\t\tthis.registerTableOption(\"dataTreeChildIndent\", 9); //data tree child indent in px\r\n\t\tthis.registerTableOption(\"dataTreeChildField\", \"_children\");//data tre column field to look for child rows\r\n\t\tthis.registerTableOption(\"dataTreeCollapseElement\", false);//data tree row collapse element\r\n\t\tthis.registerTableOption(\"dataTreeExpandElement\", false);//data tree row expand element\r\n\t\tthis.registerTableOption(\"dataTreeStartExpanded\", false);\r\n\t\tthis.registerTableOption(\"dataTreeChildColumnCalcs\", false);//include visible data tree rows in column calculations\r\n\t\tthis.registerTableOption(\"dataTreeSelectPropagate\", false);//seleccting a parent row selects its children\r\n\r\n\t\t//register component functions\r\n\t\tthis.registerComponentFunction(\"row\", \"treeCollapse\", this.collapseRow.bind(this));\r\n\t\tthis.registerComponentFunction(\"row\", \"treeExpand\", this.expandRow.bind(this));\r\n\t\tthis.registerComponentFunction(\"row\", \"treeToggle\", this.toggleRow.bind(this));\r\n\t\tthis.registerComponentFunction(\"row\", \"getTreeParent\", this.getTreeParent.bind(this));\r\n\t\tthis.registerComponentFunction(\"row\", \"getTreeChildren\", this.getRowChildren.bind(this));\r\n\t\tthis.registerComponentFunction(\"row\", \"addTreeChild\", this.addTreeChildRow.bind(this));\r\n\t\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(options.dataTreeBranchElement){\r\n\r\n\t\t\t\tif(options.dataTreeBranchElement === true){\r\n\t\t\t\t\tthis.branchEl = document.createElement(\"div\");\r\n\t\t\t\t\tthis.branchEl.classList.add(\"tabulator-data-tree-branch\");\r\n\t\t\t\t}else{\r\n\t\t\t\t\tif(typeof options.dataTreeBranchElement === \"string\"){\r\n\t\t\t\t\t\tdummyEl = document.createElement(\"div\");\r\n\t\t\t\t\t\tdummyEl.innerHTML = options.dataTreeBranchElement;\r\n\t\t\t\t\t\tthis.branchEl = dummyEl.firstChild;\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tthis.branchEl = options.dataTreeBranchElement;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif(options.dataTreeCollapseElement){\r\n\t\t\t\tif(typeof options.dataTreeCollapseElement === \"string\"){\r\n\t\t\t\t\tdummyEl = document.createElement(\"div\");\r\n\t\t\t\t\tdummyEl.innerHTML = options.dataTreeCollapseElement;\r\n\t\t\t\t\tthis.collapseEl = dummyEl.firstChild;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tthis.collapseEl = options.dataTreeCollapseElement;\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tthis.collapseEl = document.createElement(\"div\");\r\n\t\t\t\tthis.collapseEl.classList.add(\"tabulator-data-tree-control\");\r\n\t\t\t\tthis.collapseEl.tabIndex = 0;\r\n\t\t\t\tthis.collapseEl.innerHTML = \"
\";\r\n\t\t\t}\r\n\r\n\t\t\tif(options.dataTreeExpandElement){\r\n\t\t\t\tif(typeof options.dataTreeExpandElement === \"string\"){\r\n\t\t\t\t\tdummyEl = document.createElement(\"div\");\r\n\t\t\t\t\tdummyEl.innerHTML = options.dataTreeExpandElement;\r\n\t\t\t\t\tthis.expandEl = dummyEl.firstChild;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tthis.expandEl = options.dataTreeExpandElement;\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tthis.expandEl = document.createElement(\"div\");\r\n\t\t\t\tthis.expandEl.classList.add(\"tabulator-data-tree-control\");\r\n\t\t\t\tthis.expandEl.tabIndex = 0;\r\n\t\t\t\tthis.expandEl.innerHTML = \"
\";\r\n\t\t\t}\r\n\r\n\r\n\t\t\tswitch(typeof options.dataTreeStartExpanded){\r\n\t\t\t\tcase \"boolean\":\r\n\t\t\t\tthis.startOpen = function(row, index){\r\n\t\t\t\t\treturn options.dataTreeStartExpanded;\r\n\t\t\t\t};\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"function\":\r\n\t\t\t\tthis.startOpen = options.dataTreeStartExpanded;\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tdefault:\r\n\t\t\t\tthis.startOpen = function(row, index){\r\n\t\t\t\t\treturn options.dataTreeStartExpanded[index];\r\n\t\t\t\t};\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\r\n\t\t\tthis.subscribe(\"row-init\", this.initializeRow.bind(this));\r\n\t\t\tthis.subscribe(\"row-layout-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\r\n\t\t\tthis.registerDisplayHandler(this.getRows.bind(this), 30);\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\tel = el || row.getCells()[0].getElement(),\r\n\t\toldControl = config.controlEl;\r\n\r\n\t\tif(config.children !== false){\r\n\r\n\t\t\tif(config.open){\r\n\t\t\t\tconfig.controlEl = this.collapseEl.cloneNode(true);\r\n\t\t\t\tconfig.controlEl.addEventListener(\"click\", (e) => {\r\n\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\tthis.collapseRow(row);\r\n\t\t\t\t});\r\n\t\t\t}else{\r\n\t\t\t\tconfig.controlEl = this.expandEl.cloneNode(true);\r\n\t\t\t\tconfig.controlEl.addEventListener(\"click\", (e) => {\r\n\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\tthis.expandRow(row);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\tconfig.controlEl.addEventListener(\"mousedown\", (e) => {\r\n\t\t\t\te.stopPropagation();\r\n\t\t\t});\r\n\r\n\t\t\tif(oldControl && oldControl.parentNode === el){\r\n\t\t\t\toldControl.parentNode.replaceChild(config.controlEl,oldControl);\r\n\t\t\t}else{\r\n\t\t\t\tel.insertBefore(config.controlEl, el.firstChild);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tsetDisplayIndex (index) {\r\n\t\tthis.displayIndex = index;\r\n\t}\r\n\r\n\tgetDisplayIndex () {\r\n\t\treturn this.displayIndex;\r\n\t}\r\n\r\n\tgetRows(rows){\r\n\t\tvar output = [];\r\n\r\n\t\trows.forEach((row, i) => {\r\n\t\t\tvar config, children;\r\n\r\n\t\t\toutput.push(row);\r\n\r\n\t\t\tif(row instanceof Row){\r\n\r\n\t\t\t\trow.create();\r\n\r\n\t\t\t\tconfig = row.modules.dataTree.children;\r\n\r\n\t\t\t\tif(!config.index && config.children !== false){\r\n\t\t\t\t\tchildren = this.getChildren(row);\r\n\r\n\t\t\t\t\tchildren.forEach((child) => {\r\n\t\t\t\t\t\tchild.create();\r\n\t\t\t\t\t\toutput.push(child);\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tgetChildren(row, allChildren){\r\n\t\tvar config = row.modules.dataTree,\r\n\t\tchildren = [],\r\n\t\toutput = [];\r\n\r\n\t\tif(config.children !== false && (config.open || allChildren)){\r\n\t\t\tif(!Array.isArray(config.children)){\r\n\t\t\t\tconfig.children = this.generateChildren(row);\r\n\t\t\t}\r\n\r\n\t\t\tif(this.table.modExists(\"filter\") && this.table.options.dataTreeFilter){\r\n\t\t\t\tchildren = this.table.modules.filter.filter(config.children);\r\n\t\t\t}else{\r\n\t\t\t\tchildren = config.children;\r\n\t\t\t}\r\n\r\n\t\t\tif(this.table.modExists(\"sort\") && this.table.options.dataTreeSort){\r\n\t\t\t\tthis.table.modules.sort.sort(children);\r\n\t\t\t}\r\n\r\n\t\t\tchildren.forEach((child) => {\r\n\t\t\t\toutput.push(child);\r\n\r\n\t\t\t\tvar subChildren = this.getChildren(child);\r\n\r\n\t\t\t\tsubChildren.forEach((sub) => {\r\n\t\t\t\t\toutput.push(sub);\r\n\t\t\t\t});\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tgenerateChildren(row){\r\n\t\tvar children = [];\r\n\r\n\t\tvar childArray = row.getData()[this.field];\r\n\r\n\t\tif(!Array.isArray(childArray)){\r\n\t\t\tchildArray = [childArray];\r\n\t\t}\r\n\r\n\t\tchildArray.forEach((childData) => {\r\n\t\t\tvar childRow = new Row(childData || {}, this.table.rowManager);\r\n\r\n\t\t\tchildRow.create();\r\n\r\n\t\t\tchildRow.modules.dataTree.index = row.modules.dataTree.index + 1;\r\n\t\t\tchildRow.modules.dataTree.parent = row;\r\n\r\n\t\t\tif(childRow.modules.dataTree.children){\r\n\t\t\t\tchildRow.modules.dataTree.open = this.startOpen(childRow.getComponent(), childRow.modules.dataTree.index);\r\n\t\t\t}\r\n\t\t\tchildren.push(childRow);\r\n\t\t});\r\n\r\n\t\treturn children;\r\n\t}\r\n\r\n\texpandRow(row, silent){\r\n\t\tvar config = row.modules.dataTree;\r\n\r\n\t\tif(config.children !== false){\r\n\t\t\tconfig.open = true;\r\n\r\n\t\t\trow.reinitialize();\r\n\r\n\t\t\tthis.refreshData(true);\r\n\r\n\t\t\tthis.dispatchExternal(\"dataTreeRowExpanded\", row.getComponent(), row.modules.dataTree.index);\r\n\t\t}\r\n\t}\r\n\r\n\tcollapseRow(row){\r\n\t\tvar config = row.modules.dataTree;\r\n\r\n\t\tif(config.children !== false){\r\n\t\t\tconfig.open = false;\r\n\r\n\t\t\trow.reinitialize();\r\n\r\n\t\t\tthis.refreshData(true);\r\n\r\n\t\t\tthis.dispatchExternal(\"dataTreeRowCollapsed\", 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\tgetFilteredTreeChildren(row){\r\n\t\tvar config = row.modules.dataTree,\r\n\t\toutput = [], children;\r\n\r\n\t\tif(config.children){\r\n\r\n\t\t\tif(!Array.isArray(config.children)){\r\n\t\t\t\tconfig.children = this.generateChildren(row);\r\n\t\t\t}\r\n\r\n\t\t\tif(this.table.modExists(\"filter\") && this.table.options.dataTreeFilter){\r\n\t\t\t\tchildren = this.table.modules.filter.filter(config.children);\r\n\t\t\t}else{\r\n\t\t\t\tchildren = config.children;\r\n\t\t\t}\r\n\r\n\t\t\tchildren.forEach((childRow) => {\r\n\t\t\t\tif(childRow instanceof Row){\r\n\t\t\t\t\toutput.push(childRow);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\trowDelete(row){\r\n\t\tvar parent = row.modules.dataTree.parent,\r\n\t\tchildIndex;\r\n\r\n\t\tif(parent){\r\n\t\t\tchildIndex = this.findChildIndex(row, parent);\r\n\r\n\t\t\tif(childIndex !== false){\r\n\t\t\t\tparent.data[this.field].splice(childIndex, 1);\r\n\t\t\t}\r\n\r\n\t\t\tif(!parent.data[this.field].length){\r\n\t\t\t\tdelete parent.data[this.field];\r\n\t\t\t}\r\n\r\n\t\t\tthis.initializeRow(parent);\r\n\t\t\tthis.layoutRow(parent);\r\n\t\t}\r\n\r\n\t\tthis.refreshData(true);\r\n\t}\r\n\r\n\taddTreeChildRow(row, data, top, index){\r\n\t\tvar childIndex = false;\r\n\r\n\t\tif(typeof data === \"string\"){\r\n\t\t\tdata = JSON.parse(data);\r\n\t\t}\r\n\r\n\t\tif(!Array.isArray(row.data[this.field])){\r\n\t\t\trow.data[this.field] = [];\r\n\r\n\t\t\trow.modules.dataTree.open = this.startOpen(row.getComponent(), row.modules.dataTree.index);\r\n\t\t}\r\n\r\n\t\tif(typeof index !== \"undefined\"){\r\n\t\t\tchildIndex = this.findChildIndex(index, row);\r\n\r\n\t\t\tif(childIndex !== false){\r\n\t\t\t\trow.data[this.field].splice((top ? childIndex : childIndex + 1), 0, data);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(childIndex === false){\r\n\t\t\tif(top){\r\n\t\t\t\trow.data[this.field].unshift(data);\r\n\t\t\t}else{\r\n\t\t\t\trow.data[this.field].push(data);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.initializeRow(row);\r\n\t\tthis.layoutRow(row);\r\n\r\n\t\tthis.refreshData(true);\r\n\t}\r\n\r\n\tfindChildIndex(subject, parent){\r\n\t\tvar match = false;\r\n\r\n\t\tif(typeof subject == \"object\"){\r\n\r\n\t\t\tif(subject instanceof Row){\r\n\t\t\t\t//subject is row element\r\n\t\t\t\tmatch = subject.data;\r\n\t\t\t}else if(subject instanceof RowComponent){\r\n\t\t\t\t//subject is public row component\r\n\t\t\t\tmatch = subject._getSelf().data;\r\n\t\t\t}else if(typeof HTMLElement !== \"undefined\" && subject instanceof HTMLElement){\r\n\t\t\t\tif(parent.modules.dataTree){\r\n\t\t\t\t\tmatch = parent.modules.dataTree.children.find((childRow) => {\r\n\t\t\t\t\t\treturn childRow instanceof Row ? childRow.element === subject : false;\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\tif(match){\r\n\t\t\t\t\t\tmatch = match.data;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t}else if(typeof subject == \"undefined\" || subject === null){\r\n\t\t\tmatch = false\r\n\t\t}else{\r\n\t\t\t//subject should be treated as the index of the row\r\n\t\t\tmatch = parent.data[this.field].find((row) => {\r\n\t\t\t\treturn row.data[this.table.options.index] == subject;\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif(match){\r\n\r\n\t\t\tif(Array.isArray(parent.data[this.field])){\r\n\t\t\t\tmatch = parent.data[this.field].indexOf(match);\r\n\t\t\t}\r\n\r\n\t\t\tif(match == -1){\r\n\t\t\t\tmatch = false;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//catch all for any other type of input\r\n\r\n\t\treturn match;\r\n\t}\r\n\r\n\tgetTreeChildren(row, component, recurse){\r\n\t\tvar config = row.modules.dataTree,\r\n\t\toutput = [];\r\n\r\n\t\tif(config.children){\r\n\r\n\t\t\tif(!Array.isArray(config.children)){\r\n\t\t\t\tconfig.children = this.generateChildren(row);\r\n\t\t\t}\r\n\r\n\t\t\tconfig.children.forEach((childRow) => {\r\n\t\t\t\tif(childRow instanceof Row){\r\n\t\t\t\t\toutput.push(component ? childRow.getComponent() : childRow);\r\n\r\n\t\t\t\t\tif(recurse){\r\n\t\t\t\t\t\toutput = output.concat(this.getTreeChildren(childRow, component, recurse));\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\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 && options.delimiter ? options.delimiter : \",\",\r\n\tfileContents = [],\r\n\theaders = [];\r\n\r\n\tlist.forEach((row) => {\r\n\t\tvar item = [];\r\n\r\n\t\tswitch(row.type){\r\n\t\t\tcase \"group\":\r\n\t\t\tconsole.warn(\"Download Warning - CSV downloader cannot process row groups\");\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"calc\":\r\n\t\t\tconsole.warn(\"Download Warning - CSV downloader cannot process column calculations\");\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"header\":\r\n\t\t\trow.columns.forEach((col, i) => {\r\n\t\t\t\tif(col && col.depth === 1){\r\n\t\t\t\t\theaders[i] = typeof col.value == \"undefined\" || col.value === null ? \"\" : ('\"' + String(col.value).split('\"').join('\"\"') + '\"');\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"row\":\r\n\t\t\trow.columns.forEach((col) => {\r\n\r\n\t\t\t\tif(col){\r\n\r\n\t\t\t\t\tswitch(typeof col.value){\r\n\t\t\t\t\t\tcase \"object\":\r\n\t\t\t\t\t\tcol.value = JSON.stringify(col.value);\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\tcase \"undefined\":\r\n\t\t\t\t\t\tcase \"null\":\r\n\t\t\t\t\t\tcol.value = \"\";\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\titem.push('\"' + String(col.value).split('\"').join('\"\"') + '\"');\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tfileContents.push(item.join(delimiter));\r\n\t\t\tbreak;\r\n\t\t}\r\n\t});\r\n\r\n\tif(headers.length){\r\n\t\tfileContents.unshift(headers.join(delimiter));\r\n\t}\r\n\r\n\tfileContents = fileContents.join(\"\\n\");\r\n\r\n\tif(options.bom){\r\n\t\tfileContents = \"\\ufeff\" + fileContents;\r\n\t}\r\n\r\n\tsetFileContents(fileContents, \"text/csv\");\r\n};","export default function(list, options, setFileContents){\r\n\tvar fileContents = [];\r\n\r\n\tlist.forEach((row) => {\r\n\t\tvar item = {};\r\n\r\n\t\tswitch(row.type){\r\n\t\t\tcase \"header\":\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"group\":\r\n\t\t\tconsole.warn(\"Download Warning - JSON downloader cannot process row groups\");\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"calc\":\r\n\t\t\tconsole.warn(\"Download Warning - JSON downloader cannot process column calculations\");\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"row\":\r\n\t\t\trow.columns.forEach((col) => {\r\n\t\t\t\tif(col){\r\n\t\t\t\t\titem[col.component.getTitleDownload() || col.component.getField()] = col.value;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tfileContents.push(item);\r\n\t\t\tbreak;\r\n\t\t}\r\n\t});\r\n\r\n\tfileContents = JSON.stringify(fileContents, null, '\\t');\r\n\r\n\tsetFileContents(fileContents, \"application/json\");\r\n};","export default function (list, options, setFileContents) {\r\n\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 && options.title ? options.title : \"\";\r\n\r\n\tif(!jsPDFParams.orientation){\r\n\t\tjsPDFParams.orientation = options.orientation || \"landscape\";\r\n\t}\r\n\r\n\tif(!jsPDFParams.unit){\r\n\t\tjsPDFParams.unit = \"pt\";\r\n\t}\r\n\r\n\t//parse row list\r\n\tlist.forEach((row) => {\r\n\t\tvar item = {};\r\n\r\n\t\tswitch(row.type){\r\n\t\t\tcase \"header\":\r\n\t\t\theader.push(parseRow(row));\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"group\":\r\n\t\t\tbody.push(parseRow(row, rowGroupStyles));\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"calc\":\r\n\t\t\tbody.push(parseRow(row, rowCalcStyles));\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"row\":\r\n\t\t\tbody.push(parseRow(row));\r\n\t\t\tbreak;\r\n\t\t}\r\n\t});\r\n\r\n\tfunction parseRow(row, styles){\r\n\t\tvar rowData = [];\r\n\r\n\t\trow.columns.forEach((col) =>{\r\n\t\t\tvar cell;\r\n\r\n\t\t\tif(col){\r\n\t\t\t\tswitch(typeof col.value){\r\n\t\t\t\t\tcase \"object\":\r\n\t\t\t\t\tcol.value = JSON.stringify(col.value);\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase \"undefined\":\r\n\t\t\t\t\tcase \"null\":\r\n\t\t\t\t\tcol.value = \"\";\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tcell = {\r\n\t\t\t\t\tcontent:col.value,\r\n\t\t\t\t\tcolSpan:col.width,\r\n\t\t\t\t\trowSpan:col.height,\r\n\t\t\t\t};\r\n\r\n\t\t\t\tif(styles){\r\n\t\t\t\t\tcell.styles = styles;\r\n\t\t\t\t}\r\n\r\n\t\t\t\trowData.push(cell);\r\n\t\t\t}\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 && 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 && options.documentProcessing){\r\n\t\toptions.documentProcessing(doc);\r\n\t}\r\n\r\n\tsetFileContents(doc.output(\"arraybuffer\"), \"application/pdf\");\r\n};","import CoreFeature from '../../../../core/CoreFeature.js';\r\n\r\nexport default function(list, options, setFileContents){\r\n\tvar self = this,\r\n\tsheetName = options.sheetName || \"Sheet1\",\r\n\tworkbook = XLSX.utils.book_new(),\r\n\ttableFeatures = new CoreFeature(this),\r\n\toutput;\r\n\r\n\tworkbook.SheetNames = [];\r\n\tworkbook.Sheets = {};\r\n\r\n\tfunction generateSheet(){\r\n\t\tvar rows = [],\r\n\t\tmerges = [],\r\n\t\tworksheet = {},\r\n\t\trange = {s: {c:0, r:0}, e: {c:(list[0] ? list[0].columns.reduce((a, b) => a + (b && b.width ? b.width : 1), 0) : 0), r:list.length }};\r\n\r\n\t\t//parse row list\r\n\t\tlist.forEach((row, i) => {\r\n\t\t\tvar rowData = [];\r\n\r\n\t\t\trow.columns.forEach(function(col, j){\r\n\r\n\t\t\t\tif(col){\r\n\t\t\t\t\trowData.push(!(col.value instanceof Date) && typeof col.value === \"object\" ? JSON.stringify(col.value) : col.value);\r\n\r\n\t\t\t\t\tif(col.width > 1 || col.height > -1){\r\n\t\t\t\t\t\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\t\treturn buf;\r\n\t}\r\n\r\n\toutput = XLSX.write(workbook, {bookType:'xlsx', bookSST:true, type: 'binary'});\r\n\r\n\tsetFileContents(s2ab(output), \"application/octet-stream\");\r\n};","export default function(list, options, setFileContents){\r\n\tif(this.modExists(\"export\", true)){\r\n\t\tsetFileContents(this.modules.export.genereateHTMLTable(list), \"text/html\");\r\n\t}\r\n};","import Module from '../../core/Module.js';\r\n\r\nimport defaultDownloaders from './defaults/downloaders.js';\r\n\r\nclass Download extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.registerTableOption(\"downloadReady\", function(data, blob){return blob;}); //function to manipulate download data\r\n\t\tthis.registerTableOption(\"downloadConfig\", {}); //download config\r\n\t\tthis.registerTableOption(\"downloadRowRange\", \"active\"); //restrict download to active rows only\r\n\r\n\t\tthis.registerColumnOption(\"download\");\r\n\t\tthis.registerColumnOption(\"titleDownload\");\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tthis.registerTableFunction(\"download\", this.download.bind(this));\r\n\t\tthis.registerTableFunction(\"downloadToTab\", this.downloadToTab.bind(this));\r\n\t}\r\n\r\n\t///////////////////////////////////\r\n\t///////// Table Functions /////////\r\n\t///////////////////////////////////\r\n\r\n\tdownloadToTab(type, filename, options, active){\r\n\t\tthis.download(type, filename, options, active, true);\r\n\t}\r\n\r\n\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 = new Blob([data],{type:mime}),\r\n\t\tfilename = filename || \"Tabulator.\" + (typeof type === \"function\" ? \"txt\" : type);\r\n\r\n\t\tblob = this.table.options.downloadReady(data, blob);\r\n\r\n\t\tif(blob){\r\n\r\n\t\t\tif(newTab){\r\n\t\t\t\twindow.open(window.URL.createObjectURL(blob));\r\n\t\t\t}else{\r\n\t\t\t\tif(navigator.msSaveOrOpenBlob){\r\n\t\t\t\t\tnavigator.msSaveOrOpenBlob(blob, filename);\r\n\t\t\t\t}else{\r\n\t\t\t\t\telement.setAttribute('href', window.URL.createObjectURL(blob));\r\n\r\n\t\t\t\t\t//set file title\r\n\t\t\t\t\telement.setAttribute('download', filename);\r\n\r\n\t\t\t\t\t//trigger download\r\n\t\t\t\t\telement.style.display = 'none';\r\n\t\t\t\t\tdocument.body.appendChild(element);\r\n\t\t\t\t\telement.click();\r\n\r\n\t\t\t\t\t//remove temporary link element\r\n\t\t\t\t\tdocument.body.removeChild(element);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tthis.dispatchExternal(\"downloadComplete\");\r\n\t\t}\r\n\t}\r\n\r\n\tcommsReceived(table, action, data){\r\n\t\tswitch(action){\r\n\t\t\tcase \"intercept\":\r\n\t\t\tthis.download(data.type, \"\", data.options, data.active, data.intercept);\r\n\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n}\r\n\r\nDownload.moduleName = \"download\";\r\n\r\n//load defaults\r\nDownload.downloaders = defaultDownloaders;\r\n\r\nexport default Download;","export default function maskInput(el, options){\r\n\tvar mask = options.mask,\r\n\tmaskLetter = typeof options.maskLetterChar !== \"undefined\" ? options.maskLetterChar : \"A\",\r\n\tmaskNumber = typeof options.maskNumberChar !== \"undefined\" ? options.maskNumberChar : \"9\",\r\n\tmaskWildcard = typeof options.maskWildcardChar !== \"undefined\" ? options.maskWildcardChar : \"*\",\r\n\tsuccess = false;\r\n\r\n\tfunction fillSymbols(index){\r\n\t\tvar symbol = mask[index];\r\n\t\tif(typeof symbol !== \"undefined\" && symbol !== maskWildcard && symbol !== maskLetter && symbol !== maskNumber){\r\n\t\t\tel.value = el.value + \"\" + symbol;\r\n\t\t\tfillSymbols(index+1);\r\n\t\t}\r\n\t}\r\n\r\n\tel.addEventListener(\"keydown\", (e) => {\r\n\t\tvar index = el.value.length,\r\n\t\tchar = e.key;\r\n\r\n\t\tif(e.keyCode > 46){\r\n\t\t\tif(index >= mask.length){\r\n\t\t\t\te.preventDefault();\r\n\t\t\t\te.stopPropagation();\r\n\t\t\t\tsuccess = false;\r\n\t\t\t\treturn false;\r\n\t\t\t}else{\r\n\t\t\t\tswitch(mask[index]){\r\n\t\t\t\t\tcase maskLetter:\r\n\t\t\t\t\tif(char.toUpperCase() == char.toLowerCase()){\r\n\t\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\t\tsuccess = false;\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase maskNumber:\r\n\t\t\t\t\tif(isNaN(char)){\r\n\t\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\t\tsuccess = false;\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase maskWildcard:\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tdefault:\r\n\t\t\t\t\tif(char !== mask[index]){\r\n\t\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\t\tsuccess = false;\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tsuccess = true;\r\n\t\t}\r\n\r\n\t\treturn;\r\n\t});\r\n\r\n\tel.addEventListener(\"keyup\", (e) => {\r\n\t\tif(e.keyCode > 46){\r\n\t\t\tif(options.maskAutoFill){\r\n\t\t\t\tfillSymbols(el.value.length);\r\n\t\t\t}\r\n\t\t}\r\n\t});\r\n\r\n\r\n\tif(!el.placeholder){\r\n\t\tel.placeholder = mask;\r\n\t}\r\n\r\n\tif(options.maskAutoFill){\r\n\t\tfillSymbols(el.value.length);\r\n\t}\r\n}","import input from './editors/input.js';\r\nimport textarea from './editors/textarea.js';\r\nimport number from './editors/number.js';\r\nimport range from './editors/range.js';\r\nimport select from './editors/select.js';\r\nimport autocomplete from './editors/autocomplete.js';\r\nimport star from './editors/star.js';\r\nimport progress from './editors/progress.js';\r\nimport tickCross from './editors/tickCross.js';\r\n\r\nexport default {\r\n\tinput:input,\r\n\ttextarea:textarea,\r\n number:number,\r\n range:range,\r\n\tselect:select,\r\n\tautocomplete:autocomplete,\r\n\tstar:star,\r\n\tprogress:progress,\r\n\ttickCross:tickCross,\r\n};","import maskInput from '../../inputMask.js';\r\n\r\n//input element\r\nexport default function(cell, onRendered, success, cancel, editorParams){\r\n\t//create and style input\r\n\tvar cellValue = cell.getValue(),\r\n\tinput = document.createElement(\"input\");\r\n\r\n\tinput.setAttribute(\"type\", editorParams.search ? \"search\" : \"text\");\r\n\r\n\tinput.style.padding = \"4px\";\r\n\tinput.style.width = \"100%\";\r\n\tinput.style.boxSizing = \"border-box\";\r\n\r\n\tif(editorParams.elementAttributes && typeof editorParams.elementAttributes == \"object\"){\r\n\t\tfor (let key in editorParams.elementAttributes){\r\n\t\t\tif(key.charAt(0) == \"+\"){\r\n\t\t\t\tkey = key.slice(1);\r\n\t\t\t\tinput.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\r\n\t\t\t}else{\r\n\t\t\t\tinput.setAttribute(key, editorParams.elementAttributes[key]);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tinput.value = typeof cellValue !== \"undefined\" ? cellValue : \"\";\r\n\r\n\tonRendered(function(){\r\n\t\tinput.focus({preventScroll: true});\r\n\t\tinput.style.height = \"100%\";\r\n\t});\r\n\r\n\tfunction onChange(e){\r\n\t\tif(((cellValue === null || typeof cellValue === \"undefined\") && input.value !== \"\") || input.value !== cellValue){\r\n\t\t\tif(success(input.value)){\r\n\t\t\t\tcellValue = input.value; //persist value if successfully validated incase editor is used as header filter\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tcancel();\r\n\t\t}\r\n\t}\r\n\r\n\t//submit new value on blur or change\r\n\tinput.addEventListener(\"change\", onChange);\r\n\tinput.addEventListener(\"blur\", onChange);\r\n\r\n\t//submit new value on enter\r\n\tinput.addEventListener(\"keydown\", function(e){\r\n\t\tswitch(e.keyCode){\r\n\t\t\t// case 9:\r\n\t\t\tcase 13:\r\n\t\t\tonChange(e);\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 27:\r\n\t\t\tcancel();\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 35:\r\n\t\t\tcase 36:\r\n\t\t\te.stopPropagation();\r\n\t\t\tbreak;\r\n\t\t}\r\n\t});\r\n\r\n\tif(editorParams.mask){\r\n\t\tmaskInput(input, editorParams);\r\n\t}\r\n\r\n\treturn input;\r\n};","import maskInput from '../../inputMask.js';\r\n\r\n//resizable text area element\r\nexport default function(cell, onRendered, success, cancel, editorParams){\r\n var self = this,\r\n cellValue = cell.getValue(),\r\n vertNav = editorParams.verticalNavigation || \"hybrid\",\r\n value = String(cellValue !== null && typeof cellValue !== \"undefined\" ? cellValue : \"\"),\r\n count = (value.match(/(?:\\r\\n|\\r|\\n)/g) || []).length + 1,\r\n input = document.createElement(\"textarea\"),\r\n scrollHeight = 0;\r\n\r\n //create and style input\r\n input.style.display = \"block\";\r\n input.style.padding = \"2px\";\r\n input.style.height = \"100%\";\r\n input.style.width = \"100%\";\r\n input.style.boxSizing = \"border-box\";\r\n input.style.whiteSpace = \"pre-wrap\";\r\n input.style.resize = \"none\";\r\n\r\n if(editorParams.elementAttributes && typeof editorParams.elementAttributes == \"object\"){\r\n for (let key in editorParams.elementAttributes){\r\n if(key.charAt(0) == \"+\"){\r\n key = key.slice(1);\r\n input.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\r\n }else{\r\n input.setAttribute(key, editorParams.elementAttributes[key]);\r\n }\r\n }\r\n }\r\n\r\n input.value = value;\r\n\r\n onRendered(function(){\r\n input.focus({preventScroll: true});\r\n input.style.height = \"100%\";\r\n\r\n input.scrollHeight;\r\n input.style.height = input.scrollHeight + \"px\";\r\n cell.getRow().normalizeHeight();\r\n });\r\n\r\n function onChange(e){\r\n\r\n if(((cellValue === null || typeof cellValue === \"undefined\") && input.value !== \"\") || input.value !== cellValue){\r\n\r\n if(success(input.value)){\r\n cellValue = input.value; //persist value if successfully validated incase editor is used as header filter\r\n }\r\n\r\n setTimeout(function(){\r\n cell.getRow().normalizeHeight();\r\n },300)\r\n }else{\r\n cancel();\r\n }\r\n }\r\n\r\n //submit new value on blur or change\r\n input.addEventListener(\"change\", onChange);\r\n input.addEventListener(\"blur\", onChange);\r\n\r\n input.addEventListener(\"keyup\", function(){\r\n\r\n input.style.height = \"\";\r\n\r\n var heightNow = input.scrollHeight;\r\n\r\n input.style.height = heightNow + \"px\";\r\n\r\n if(heightNow != scrollHeight){\r\n scrollHeight = heightNow;\r\n cell.getRow().normalizeHeight();\r\n }\r\n });\r\n\r\n input.addEventListener(\"keydown\", function(e){\r\n\r\n switch(e.keyCode){\r\n case 27:\r\n cancel();\r\n break;\r\n\r\n case 38: //up arrow\r\n if(vertNav == \"editor\" || (vertNav == \"hybrid\" && input.selectionStart)){\r\n e.stopImmediatePropagation();\r\n e.stopPropagation();\r\n }\r\n\r\n break;\r\n\r\n case 40: //down arrow\r\n if(vertNav == \"editor\" || (vertNav == \"hybrid\" && input.selectionStart !== input.value.length)){\r\n e.stopImmediatePropagation();\r\n e.stopPropagation();\r\n }\r\n break;\r\n\r\n case 35:\r\n case 36:\r\n e.stopPropagation();\r\n break;\r\n }\r\n });\r\n\r\n if(editorParams.mask){\r\n maskInput(input, editorParams);\r\n }\r\n\r\n return input;\r\n};","import maskInput from '../../inputMask.js';\r\n\r\n//input element with type of number\r\nexport default function(cell, onRendered, success, cancel, editorParams){\r\n\tvar cellValue = cell.getValue(),\r\n\tvertNav = editorParams.verticalNavigation || \"editor\",\r\n\tinput = document.createElement(\"input\");\r\n\r\n\tinput.setAttribute(\"type\", \"number\");\r\n\r\n\tif(typeof editorParams.max != \"undefined\"){\r\n\t\tinput.setAttribute(\"max\", editorParams.max);\r\n\t}\r\n\r\n\tif(typeof editorParams.min != \"undefined\"){\r\n\t\tinput.setAttribute(\"min\", editorParams.min);\r\n\t}\r\n\r\n\tif(typeof editorParams.step != \"undefined\"){\r\n\t\tinput.setAttribute(\"step\", editorParams.step);\r\n\t}\r\n\r\n\t//create and style input\r\n\tinput.style.padding = \"4px\";\r\n\tinput.style.width = \"100%\";\r\n\tinput.style.boxSizing = \"border-box\";\r\n\r\n\tif(editorParams.elementAttributes && typeof editorParams.elementAttributes == \"object\"){\r\n\t\tfor (let key in editorParams.elementAttributes){\r\n\t\t\tif(key.charAt(0) == \"+\"){\r\n\t\t\t\tkey = key.slice(1);\r\n\t\t\t\tinput.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\r\n\t\t\t}else{\r\n\t\t\t\tinput.setAttribute(key, editorParams.elementAttributes[key]);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tinput.value = cellValue;\r\n\r\n\tvar blurFunc = function(e){\r\n\t\tonChange();\r\n\t};\r\n\r\n\tonRendered(function () {\r\n\t\t//submit new value on blur\r\n\t\tinput.removeEventListener(\"blur\", blurFunc);\r\n\r\n\t\tinput.focus({preventScroll: true});\r\n\t\tinput.style.height = \"100%\";\r\n\r\n\t\t//submit new value on blur\r\n\t\tinput.addEventListener(\"blur\", blurFunc);\r\n\t});\r\n\r\n\tfunction onChange(){\r\n\t\tvar value = input.value;\r\n\r\n\t\tif(!isNaN(value) && value !==\"\"){\r\n\t\t\tvalue = Number(value);\r\n\t\t}\r\n\r\n\t\tif(value !== cellValue){\r\n\t\t\tif(success(value)){\r\n\t\t\t\tcellValue = value; //persist value if successfully validated incase editor is used as header filter\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tcancel();\r\n\t\t}\r\n\t}\r\n\r\n\t//submit new value on enter\r\n\tinput.addEventListener(\"keydown\", function(e){\r\n\t\tswitch(e.keyCode){\r\n\t\t\tcase 13:\r\n\t\t\t// case 9:\r\n\t\t\tonChange();\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 27:\r\n\t\t\tcancel();\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 38: //up arrow\r\n\t\t\tcase 40: //down arrow\r\n\t\t\tif(vertNav == \"editor\"){\r\n\t\t\t\te.stopImmediatePropagation();\r\n\t\t\t\te.stopPropagation();\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 35:\r\n\t\t\tcase 36:\r\n\t\t\te.stopPropagation();\r\n\t\t\tbreak;\r\n\t\t}\r\n\t});\r\n\r\n\tif(editorParams.mask){\r\n\t\tmaskInput(input, editorParams);\r\n\t}\r\n\r\n\treturn input;\r\n};","//input element with type of number\r\nexport default function(cell, onRendered, success, cancel, editorParams){\r\n\tvar cellValue = cell.getValue(),\r\n\tinput = document.createElement(\"input\");\r\n\r\n\tinput.setAttribute(\"type\", \"range\");\r\n\r\n\tif (typeof editorParams.max != \"undefined\") {\r\n\t\tinput.setAttribute(\"max\", editorParams.max);\r\n\t}\r\n\r\n\tif (typeof editorParams.min != \"undefined\") {\r\n\t\tinput.setAttribute(\"min\", editorParams.min);\r\n\t}\r\n\r\n\tif (typeof editorParams.step != \"undefined\") {\r\n\t\tinput.setAttribute(\"step\", editorParams.step);\r\n\t}\r\n\r\n\t//create and style input\r\n\tinput.style.padding = \"4px\";\r\n\tinput.style.width = \"100%\";\r\n\tinput.style.boxSizing = \"border-box\";\r\n\r\n\tif(editorParams.elementAttributes && typeof editorParams.elementAttributes == \"object\"){\r\n\t\tfor (let key in editorParams.elementAttributes){\r\n\t\t\tif(key.charAt(0) == \"+\"){\r\n\t\t\t\tkey = key.slice(1);\r\n\t\t\t\tinput.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\r\n\t\t\t}else{\r\n\t\t\t\tinput.setAttribute(key, editorParams.elementAttributes[key]);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tinput.value = cellValue;\r\n\r\n\tonRendered(function () {\r\n\t\tinput.focus({preventScroll: true});\r\n\t\tinput.style.height = \"100%\";\r\n\t});\r\n\r\n\tfunction onChange(){\r\n\t\tvar value = input.value;\r\n\r\n\t\tif(!isNaN(value) && value !==\"\"){\r\n\t\t\tvalue = Number(value);\r\n\t\t}\r\n\r\n\t\tif(value != cellValue){\r\n\t\t\tif(success(value)){\r\n\t\t\t\tcellValue = value; //persist value if successfully validated incase editor is used as header filter\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tcancel();\r\n\t\t}\r\n\t}\r\n\r\n\t//submit new value on blur\r\n\tinput.addEventListener(\"blur\", function(e){\r\n\t\tonChange();\r\n\t});\r\n\r\n\t//submit new value on enter\r\n\tinput.addEventListener(\"keydown\", function(e){\r\n\t\tswitch(e.keyCode){\r\n\t\t\tcase 13:\r\n\t\t\t// case 9:\r\n\t\t\tonChange();\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 27:\r\n\t\t\tcancel();\r\n\t\t\tbreak;\r\n\t\t}\r\n\t});\r\n\r\n\treturn input;\r\n};","import Helpers from '../../../../core/tools/Helpers.js';\r\n\r\n//dropdown select editor\r\nexport default function(cell, onRendered, success, cancel, editorParams){\r\n\tvar self = this,\r\n\tcellEl = cell.getElement(),\r\n\tinitialValue = cell.getValue(),\r\n\tvertNav = editorParams.verticalNavigation || \"editor\",\r\n\tinitialDisplayValue = typeof initialValue !== \"undefined\" || initialValue === null ? (Array.isArray(initialValue) ? initialValue : [initialValue]) : (typeof editorParams.defaultValue !== \"undefined\" ? editorParams.defaultValue : []),\r\n\tinput = document.createElement(\"input\"),\r\n\tlistEl = document.createElement(\"div\"),\r\n\tmultiselect = editorParams.multiselect,\r\n\tdataItems = [],\r\n\tcurrentItem = {},\r\n\tdisplayItems = [],\r\n\tcurrentItems = [],\r\n\tblurable = true,\r\n\tblockListShow = false,\r\n\tsearchWord = \"\",\r\n\tsearchWordTimeout = null;\r\n\r\n\tif(Array.isArray(editorParams) || (!Array.isArray(editorParams) && typeof editorParams === \"object\" && !editorParams.values)){\r\n\t\tconsole.warn(\"DEPRECATION WARNING - values for the select editor must now be passed into the values property of the editorParams object, not as the editorParams object\");\r\n\t\teditorParams = {values:editorParams};\r\n\t}\r\n\r\n\tfunction getUniqueColumnValues(field){\r\n\t\tvar output = {},\r\n\t\tdata = self.table.getData(),\r\n\t\tcolumn;\r\n\r\n\t\tif(field){\r\n\t\t\tcolumn = self.table.columnManager.getColumnByField(field);\r\n\t\t}else{\r\n\t\t\tcolumn = cell.getColumn()._getSelf();\r\n\t\t}\r\n\r\n\t\tif(column){\r\n\t\t\tdata.forEach(function(row){\r\n\t\t\t\tvar val = column.getFieldValue(row);\r\n\r\n\t\t\t\tif(val !== null && typeof val !== \"undefined\" && val !== \"\"){\r\n\t\t\t\t\toutput[val] = true;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"unable to find matching column to create select lookup list:\", field);\r\n\t\t}\r\n\r\n\t\treturn Object.keys(output);\r\n\t}\r\n\r\n\tfunction parseItems(inputValues, curentValues){\r\n\t\tvar dataList = [];\r\n\t\tvar displayList = [];\r\n\r\n\t\tfunction processComplexListItem(item){\r\n\t\t\tvar item = {\r\n\t\t\t\tlabel:item.label,\r\n\t\t\t\tvalue:item.value,\r\n\t\t\t\titemParams:item.itemParams,\r\n\t\t\t\telementAttributes: item.elementAttributes,\r\n\t\t\t\telement:false,\r\n\t\t\t};\r\n\r\n\t\t\t// if(item.value === curentValue || (!isNaN(parseFloat(item.value)) && !isNaN(parseFloat(item.value)) && parseFloat(item.value) === parseFloat(curentValue))){\r\n\t\t\t// \tsetCurrentItem(item);\r\n\t\t\t// }\r\n\r\n\t\t\tif(curentValues.indexOf(item.value) > -1){\r\n\t\t\t\tsetItem(item);\r\n\t\t\t}\r\n\r\n\t\t\tdataList.push(item);\r\n\t\t\tdisplayList.push(item);\r\n\r\n\t\t\treturn item;\r\n\t\t}\r\n\r\n\t\tif(typeof inputValues == \"function\"){\r\n\t\t\tinputValues = inputValues(cell);\r\n\t\t}\r\n\r\n\t\tif(Array.isArray(inputValues)){\r\n\t\t\tinputValues.forEach(function(value){\r\n\t\t\t\tvar item;\r\n\r\n\t\t\t\tif(typeof value === \"object\"){\r\n\r\n\t\t\t\t\tif(value.options){\r\n\t\t\t\t\t\titem = {\r\n\t\t\t\t\t\t\tlabel:value.label,\r\n\t\t\t\t\t\t\tgroup:true,\r\n\t\t\t\t\t\t\titemParams:value.itemParams,\r\n\t\t\t\t\t\t\telementAttributes:value.elementAttributes,\r\n\t\t\t\t\t\t\telement:false,\r\n\t\t\t\t\t\t};\r\n\r\n\t\t\t\t\t\tdisplayList.push(item);\r\n\r\n\t\t\t\t\t\tvalue.options.forEach(function(item){\r\n\t\t\t\t\t\t\tprocessComplexListItem(item);\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tprocessComplexListItem(value);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}else{\r\n\r\n\t\t\t\t\titem = {\r\n\t\t\t\t\t\tlabel:value,\r\n\t\t\t\t\t\tvalue:value,\r\n\t\t\t\t\t\telement:false,\r\n\t\t\t\t\t};\r\n\r\n\t\t\t\t\t// if(item.value === curentValue || (!isNaN(parseFloat(item.value)) && !isNaN(parseFloat(item.value)) && parseFloat(item.value) === parseFloat(curentValue))){\r\n\t\t\t\t\t// \tsetCurrentItem(item);\r\n\t\t\t\t\t// }\r\n\r\n\t\t\t\t\tif(curentValues.indexOf(item.value) > -1){\r\n\t\t\t\t\t\tsetItem(item);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tdataList.push(item);\r\n\t\t\t\t\tdisplayList.push(item);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tfor(var key in inputValues){\r\n\t\t\t\tvar item = {\r\n\t\t\t\t\tlabel:inputValues[key],\r\n\t\t\t\t\tvalue:key,\r\n\t\t\t\t\telement:false,\r\n\t\t\t\t};\r\n\r\n\t\t\t\t// if(item.value === curentValue || (!isNaN(parseFloat(item.value)) && !isNaN(parseFloat(item.value)) && parseFloat(item.value) === parseFloat(curentValue))){\r\n\t\t\t\t// \tsetCurrentItem(item);\r\n\t\t\t\t// }\r\n\r\n\t\t\t\tif(curentValues.indexOf(item.value) > -1){\r\n\t\t\t\t\tsetItem(item);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tdataList.push(item);\r\n\t\t\t\tdisplayList.push(item);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(editorParams.sortValuesList){\r\n\t\t\tdataList.sort((a, b) => {\r\n\t\t\t\treturn a.label < b.label ? -1 : (a.label > b.label ? 1 : 0);\r\n\t\t\t});\r\n\r\n\t\t\tdisplayList.sort((a, b) => {\r\n\t\t\t\treturn a.label < b.label ? -1 : (a.label > b.label ? 1 : 0);\r\n\t\t\t});\r\n\r\n\t\t\tif(editorParams.sortValuesList !== \"asc\"){\r\n\t\t\t\tdataList.reverse();\r\n\t\t\t\tdisplayList.reverse();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tdataItems = dataList;\r\n\t\tdisplayItems = displayList;\r\n\r\n\t\tfillList();\r\n\t}\r\n\r\n\tfunction fillList(){\r\n\t\twhile(listEl.firstChild) listEl.removeChild(listEl.firstChild);\r\n\r\n\t\tdisplayItems.forEach(function(item){\r\n\r\n\t\t\tvar el = item.element;\r\n\r\n\t\t\tif(!el){\r\n\t\t\t\tel = document.createElement(\"div\");\r\n\t\t\t\titem.label = editorParams.listItemFormatter ? editorParams.listItemFormatter(item.value, item.label, cell, el, item.itemParams) : item.label;\r\n\t\t\t\tif(item.group){\r\n\t\t\t\t\tel.classList.add(\"tabulator-edit-select-list-group\");\r\n\t\t\t\t\tel.tabIndex = 0;\r\n\t\t\t\t\tel.innerHTML = item.label === \"\" ? \" \" : item.label;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tel.classList.add(\"tabulator-edit-select-list-item\");\r\n\t\t\t\t\tel.tabIndex = 0;\r\n\t\t\t\t\tel.innerHTML = item.label === \"\" ? \" \" : item.label;\r\n\r\n\t\t\t\t\tel.addEventListener(\"click\", function(){\r\n\t\t\t\t\t\tblockListShow = true;\r\n\r\n\t\t\t\t\t\tsetTimeout(() => {\r\n\t\t\t\t\t\t\tblockListShow = false;\r\n\t\t\t\t\t\t}, 10);\r\n\r\n\t\t\t\t\t\t// setCurrentItem(item);\r\n\t\t\t\t\t\t// chooseItem();\r\n\t\t\t\t\t\tif(multiselect){\r\n\t\t\t\t\t\t\ttoggleItem(item);\r\n\t\t\t\t\t\t\tinput.focus();\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\tchooseItem(item);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\t// if(item === currentItem){\r\n\t\t\t\t\t// \tel.classList.add(\"active\");\r\n\t\t\t\t\t// }\r\n\r\n\t\t\t\t\tif(currentItems.indexOf(item) > -1){\r\n\t\t\t\t\t\tel.classList.add(\"active\");\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(item.elementAttributes && typeof item.elementAttributes == \"object\"){\r\n\t\t\t\t\tfor (let key in item.elementAttributes){\r\n\t\t\t\t\t\tif(key.charAt(0) == \"+\"){\r\n\t\t\t\t\t\t\tkey = key.slice(1);\r\n\t\t\t\t\t\t\tel.setAttribute(key, input.getAttribute(key) + item.elementAttributes[\"+\" + key]);\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\tel.setAttribute(key, item.elementAttributes[key]);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tel.addEventListener(\"mousedown\", function(){\r\n\t\t\t\t\tblurable = false;\r\n\r\n\t\t\t\t\tsetTimeout(function(){\r\n\t\t\t\t\t\tblurable = true;\r\n\t\t\t\t\t}, 10);\r\n\t\t\t\t});\r\n\r\n\t\t\t\titem.element = el;\r\n\r\n\r\n\t\t\t}\r\n\r\n\t\t\tlistEl.appendChild(el);\r\n\t\t});\r\n\t}\r\n\r\n\r\n\tfunction setCurrentItem(item, active){\r\n\r\n\t\tif(!multiselect && currentItem && currentItem.element){\r\n\t\t\tcurrentItem.element.classList.remove(\"active\");\r\n\t\t}\r\n\r\n\t\tif(currentItem && currentItem.element){\r\n\t\t\tcurrentItem.element.classList.remove(\"focused\");\r\n\t\t}\r\n\r\n\t\tcurrentItem = item;\r\n\r\n\t\tif(item.element){\r\n\t\t\titem.element.classList.add(\"focused\");\r\n\t\t\tif(active){\r\n\t\t\t\titem.element.classList.add(\"active\");\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(item && item.element && item.element.scrollIntoView){\r\n\t\t\titem.element.scrollIntoView({behavior: 'smooth', block: 'nearest', inline: 'start'});\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t// function chooseItem(){\r\n\t// \thideList();\r\n\r\n\t// \tif(initialValue !== currentItem.value){\r\n\t// \t\tinitialValue = currentItem.value;\r\n\t// \t\tsuccess(currentItem.value);\r\n\t// \t}else{\r\n\t// \t\tcancel();\r\n\t// \t}\r\n\t// }\r\n\r\n\tfunction setItem(item) {\r\n\t\tvar index = currentItems.indexOf(item);\r\n\r\n\t\tif(index == -1){\r\n\t\t\tcurrentItems.push(item);\r\n\t\t\tsetCurrentItem(item, true);\r\n\t\t}\r\n\r\n\t\tfillInput();\r\n\t}\r\n\r\n\tfunction unsetItem(index) {\r\n\t\tvar item = currentItems[index];\r\n\r\n\t\tif(index > -1){\r\n\t\t\tcurrentItems.splice(index, 1);\r\n\t\t\tif(item.element){\r\n\t\t\t\titem.element.classList.remove(\"active\");\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tfunction toggleItem(item) {\r\n\t\tif(!item){\r\n\t\t\titem = currentItem;\r\n\t\t}\r\n\r\n\t\tvar index = currentItems.indexOf(item);\r\n\r\n\t\tif(index > -1){\r\n\t\t\tunsetItem(index);\r\n\t\t}else{\r\n\t\t\tif(multiselect !== true && currentItems.length >= multiselect){\r\n\t\t\t\tunsetItem(0);\r\n\t\t\t}\r\n\r\n\t\t\tsetItem(item);\r\n\t\t}\r\n\r\n\t\tfillInput();\r\n\r\n\t}\r\n\r\n\tfunction chooseItem(item){\r\n\t\thideList();\r\n\r\n\t\tif(!item){\r\n\t\t\titem = currentItem;\r\n\t\t}\r\n\r\n\t\tif(item){\r\n\t\t\tinput.value = item.label;\r\n\t\t\tsuccess(item.value);\r\n\t\t}\r\n\r\n\t\tinitialDisplayValue = [item.value];\r\n\t}\r\n\r\n\r\n\tfunction chooseItems(silent){\r\n\t\tif(!silent){\r\n\t\t\thideList();\r\n\t\t}\r\n\r\n\t\tvar output = [];\r\n\r\n\t\tcurrentItems.forEach((item) => {\r\n\t\t\toutput.push(item.value);\r\n\t\t});\r\n\r\n\t\tinitialDisplayValue = output;\r\n\r\n\t\tsuccess(output);\r\n\t}\r\n\r\n\tfunction fillInput(){\r\n\t\tvar output = [];\r\n\r\n\t\tcurrentItems.forEach((item) => {\r\n\t\t\toutput.push(item.label);\r\n\t\t});\r\n\r\n\t\tinput.value = output.join(\", \");\r\n\r\n\t\tif(self.currentCell === false){\r\n\t\t\tchooseItems(true);\r\n\t\t}\r\n\t}\r\n\r\n\r\n\tfunction unsetItems() {\r\n\r\n\t\tvar len = currentItems.length;\r\n\r\n\t\tfor(let i = 0; i < len; i++){\r\n\t\t\tunsetItem(0);\r\n\t\t}\r\n\t}\r\n\r\n\tfunction cancelItem(){\r\n\t\thideList();\r\n\t\tcancel();\r\n\t}\r\n\r\n\tfunction showList(){\r\n\t\tcurrentItems = [];\r\n\r\n\t\tif(!listEl.parentNode){\r\n\t\t\tif(editorParams.values === true){\r\n\t\t\t\tparseItems(getUniqueColumnValues(), initialDisplayValue);\r\n\t\t\t}else if(typeof editorParams.values === \"string\"){\r\n\t\t\t\tparseItems(getUniqueColumnValues(editorParams.values), initialDisplayValue);\r\n\t\t\t}else{\r\n\t\t\t\tparseItems(editorParams.values || [], initialDisplayValue);\r\n\t\t\t}\r\n\r\n\r\n\t\t\tvar offset = Helpers.elOffset(cellEl);\r\n\r\n\t\t\tlistEl.style.minWidth = cellEl.offsetWidth + \"px\";\r\n\r\n\t\t\tlistEl.style.top = (offset.top + cellEl.offsetHeight) + \"px\";\r\n\t\t\tlistEl.style.left = offset.left + \"px\";\r\n\r\n\r\n\t\t\tlistEl.addEventListener(\"mousedown\", function(e){\r\n\t\t\t\tblurable = false;\r\n\r\n\t\t\t\tsetTimeout(function(){\r\n\t\t\t\t\tblurable = true;\r\n\t\t\t\t}, 10);\r\n\t\t\t});\r\n\r\n\t\t\tdocument.body.appendChild(listEl);\r\n\t\t}\r\n\t}\r\n\r\n\tfunction hideList(){\r\n\t\tif(listEl.parentNode){\r\n\t\t\tlistEl.parentNode.removeChild(listEl);\r\n\t\t}\r\n\r\n\t\tremoveScrollListener();\r\n\t}\r\n\r\n\tfunction removeScrollListener() {\r\n\t\tself.table.rowManager.element.removeEventListener(\"scroll\", cancelItem);\r\n\t}\r\n\r\n\tfunction scrollTovalue(char){\r\n\r\n\t\tclearTimeout(searchWordTimeout);\r\n\r\n\t\tvar character = String.fromCharCode(event.keyCode).toLowerCase();\r\n\t\tsearchWord += character.toLowerCase();\r\n\r\n\t\tvar match = dataItems.find((item) => {\r\n\t\t\treturn typeof item.label !== \"undefined\" && item.label.toLowerCase().startsWith(searchWord);\r\n\t\t});\r\n\r\n\t\tif(match){\r\n\t\t\tsetCurrentItem(match, !multiselect);\r\n\t\t}\r\n\r\n\t\tsearchWordTimeout = setTimeout(() => {\r\n\t\t\tsearchWord = \"\";\r\n\t\t}, 800)\r\n\t}\r\n\r\n\t//style input\r\n\tinput.setAttribute(\"type\", \"text\");\r\n\r\n\tinput.style.padding = \"4px\";\r\n\tinput.style.width = \"100%\";\r\n\tinput.style.boxSizing = \"border-box\";\r\n\tinput.style.cursor = \"default\";\r\n\tinput.readOnly = (this.currentCell != false);\r\n\r\n\tif(editorParams.elementAttributes && typeof editorParams.elementAttributes == \"object\"){\r\n\t\tfor (let key in editorParams.elementAttributes){\r\n\t\t\tif(key.charAt(0) == \"+\"){\r\n\t\t\t\tkey = key.slice(1);\r\n\t\t\t\tinput.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\r\n\t\t\t}else{\r\n\t\t\t\tinput.setAttribute(key, editorParams.elementAttributes[key]);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tinput.value = typeof initialValue !== \"undefined\" || initialValue === null ? initialValue : \"\";\r\n\r\n\t// if(editorParams.values === true){\r\n\t// \tparseItems(getUniqueColumnValues(), initialValue);\r\n\t// }else if(typeof editorParams.values === \"string\"){\r\n\t// \tparseItems(getUniqueColumnValues(editorParams.values), initialValue);\r\n\t// }else{\r\n\t// \tparseItems(editorParams.values || [], initialValue);\r\n\t// }\r\n\r\n\tinput.addEventListener(\"search\", function(e){\r\n\t\tif(!input.value){\r\n\t\t\tunsetItems();\r\n\t\t\tchooseItems();\r\n\t\t}\r\n\t});\r\n\r\n\t//allow key based navigation\r\n\tinput.addEventListener(\"keydown\", function(e){\r\n\t\tvar index;\r\n\r\n\t\tswitch(e.keyCode){\r\n\t\t\tcase 38: //up arrow\r\n\t\t\tindex = dataItems.indexOf(currentItem);\r\n\r\n\t\t\tif(vertNav == \"editor\" || (vertNav == \"hybrid\" && index)){\r\n\t\t\t\te.stopImmediatePropagation();\r\n\t\t\t\te.stopPropagation();\r\n\t\t\t\te.preventDefault();\r\n\r\n\t\t\t\tif(index > 0){\r\n\t\t\t\t\tsetCurrentItem(dataItems[index - 1], !multiselect);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 40: //down arrow\r\n\t\t\tindex = dataItems.indexOf(currentItem);\r\n\r\n\t\t\tif(vertNav == \"editor\" || (vertNav == \"hybrid\" && index < dataItems.length - 1)){\r\n\t\t\t\te.stopImmediatePropagation();\r\n\t\t\t\te.stopPropagation();\r\n\t\t\t\te.preventDefault();\r\n\r\n\t\t\t\tif(index < dataItems.length - 1){\r\n\t\t\t\t\tif(index == -1){\r\n\t\t\t\t\t\tsetCurrentItem(dataItems[0], !multiselect);\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tsetCurrentItem(dataItems[index + 1], !multiselect);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 37: //left arrow\r\n\t\t\tcase 39: //right arrow\r\n\t\t\te.stopImmediatePropagation();\r\n\t\t\te.stopPropagation();\r\n\t\t\te.preventDefault();\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 13: //enter\r\n\t\t\t// chooseItem();\r\n\r\n\t\t\tif(multiselect){\r\n\t\t\t\ttoggleItem();\r\n\t\t\t}else{\r\n\t\t\t\tchooseItem();\r\n\t\t\t}\r\n\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 27: //escape\r\n\t\t\tcancelItem();\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 9: //tab\r\n\t\t\tbreak;\r\n\r\n\t\t\tdefault:\r\n\t\t\tif(self.currentCell === false){\r\n\t\t\t\te.preventDefault();\r\n\t\t\t}\r\n\r\n\t\t\tif(e.keyCode >= 38 && e.keyCode <= 90){\r\n\t\t\t\tscrollTovalue(e.keyCode);\r\n\t\t\t}\r\n\t\t}\r\n\t});\r\n\r\n\tinput.addEventListener(\"blur\", function(e){\r\n\t\tif(blurable){\r\n\t\t\tif(multiselect){\r\n\t\t\t\tchooseItems();\r\n\t\t\t}else{\r\n\t\t\t\tcancelItem();\r\n\t\t\t}\r\n\t\t}\r\n\t});\r\n\r\n\tinput.addEventListener(\"focus\", function(e){\r\n\t\tif(!blockListShow){\r\n\t\t\tshowList();\r\n\t\t}\r\n\t});\r\n\r\n\t//style list element\r\n\tlistEl = document.createElement(\"div\");\r\n\tlistEl.classList.add(\"tabulator-edit-select-list\");\r\n\r\n\tonRendered(function(){\r\n\t\tinput.style.height = \"100%\";\r\n\t\tinput.focus({preventScroll: true});\r\n\t});\r\n\r\n\tsetTimeout(() => {\r\n\t\tthis.table.rowManager.element.addEventListener(\"scroll\", cancelItem);\r\n\t}, 10);\r\n\r\n\treturn input;\r\n};","import Helpers from '../../../../core/tools/Helpers.js';\r\nimport maskInput from '../../inputMask.js';\r\n\r\n//autocomplete\r\nexport default function(cell, onRendered, success, cancel, editorParams){\r\n\tvar self = this,\r\n\tcellEl = cell.getElement(),\r\n\tinitialValue = cell.getValue(),\r\n\tvertNav = editorParams.verticalNavigation || \"editor\",\r\n\tinitialDisplayValue = typeof initialValue !== \"undefined\" || initialValue === null ? initialValue : (typeof editorParams.defaultValue !== \"undefined\" ? editorParams.defaultValue : \"\"),\r\n\tinput = document.createElement(\"input\"),\r\n\tlistEl = document.createElement(\"div\"),\r\n\tallItems = [],\r\n\tdisplayItems = [],\r\n\tvalues = [],\r\n\tcurrentItem = false,\r\n\tblurable = true,\r\n\tuniqueColumnValues = false;\r\n\r\n\t//style input\r\n\tinput.setAttribute(\"type\", \"search\");\r\n\r\n\tinput.style.padding = \"4px\";\r\n\tinput.style.width = \"100%\";\r\n\tinput.style.boxSizing = \"border-box\";\r\n\r\n\tif(editorParams.elementAttributes && typeof editorParams.elementAttributes == \"object\"){\r\n\t\tfor (let key in editorParams.elementAttributes){\r\n\t\t\tif(key.charAt(0) == \"+\"){\r\n\t\t\t\tkey = key.slice(1);\r\n\t\t\t\tinput.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\r\n\t\t\t}else{\r\n\t\t\t\tinput.setAttribute(key, editorParams.elementAttributes[key]);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//style list element\r\n\tlistEl.classList.add(\"tabulator-edit-select-list\");\r\n\r\n\tlistEl.addEventListener(\"mousedown\", function(e){\r\n\t\tblurable = false;\r\n\r\n\t\tsetTimeout(function(){\r\n\t\t\tblurable = true;\r\n\t\t}, 10);\r\n\t});\r\n\r\n\r\n\tfunction genUniqueColumnValues(){\r\n\t\tif(editorParams.values === true){\r\n\t\t\tuniqueColumnValues = getUniqueColumnValues();\r\n\t\t}else if(typeof editorParams.values === \"string\"){\r\n\t\t\tuniqueColumnValues = getUniqueColumnValues(editorParams.values);\r\n\t\t}\r\n\t}\r\n\r\n\tfunction getUniqueColumnValues(field){\r\n\t\tvar output = {},\r\n\t\tdata = self.table.getData(),\r\n\t\tcolumn;\r\n\r\n\t\tif(field){\r\n\t\t\tcolumn = self.table.columnManager.getColumnByField(field);\r\n\t\t}else{\r\n\t\t\tcolumn = cell.getColumn()._getSelf();\r\n\t\t}\r\n\r\n\t\tif(column){\r\n\t\t\tdata.forEach(function(row){\r\n\t\t\t\tvar val = column.getFieldValue(row);\r\n\r\n\t\t\t\tif(val !== null && typeof val !== \"undefined\" && val !== \"\"){\r\n\t\t\t\t\toutput[val] = true;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tif(editorParams.sortValuesList){\r\n\t\t\t\tif(editorParams.sortValuesList == \"asc\"){\r\n\t\t\t\t\toutput = Object.keys(output).sort();\r\n\t\t\t\t}else{\r\n\t\t\t\t\toutput = Object.keys(output).sort().reverse();\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\toutput = Object.keys(output);\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"unable to find matching column to create autocomplete lookup list:\", field);\r\n\t\t}\r\n\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tfunction filterList(term, intialLoad){\r\n\t\tvar matches = [],\r\n\t\tvalues, items, searchEl;\r\n\r\n\t\t//lookup base values list\r\n\t\tif(uniqueColumnValues){\r\n\t\t\tvalues = uniqueColumnValues;\r\n\t\t}else{\r\n\t\t\tvalues = editorParams.values || [];\r\n\t\t}\r\n\r\n\t\tif(editorParams.searchFunc){\r\n\t\t\tmatches = editorParams.searchFunc(term, values);\r\n\r\n\t\t\tif(matches instanceof Promise){\r\n\r\n\t\t\t\taddNotice(typeof editorParams.searchingPlaceholder !== \"undefined\" ? editorParams.searchingPlaceholder : \"Searching...\");\r\n\r\n\t\t\t\tmatches.then((result) => {\r\n\t\t\t\t\tfillListIfNotEmpty(parseItems(result), intialLoad);\r\n\t\t\t\t}).catch((err) => {\r\n\t\t\t\t\tconsole.err(\"error in autocomplete search promise:\", err);\r\n\t\t\t\t});\r\n\r\n\t\t\t}else{\r\n\t\t\t\tfillListIfNotEmpty(parseItems(matches), intialLoad);\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\titems = parseItems(values);\r\n\r\n\t\t\tif(term === \"\"){\r\n\t\t\t\tif(editorParams.showListOnEmpty){\r\n\t\t\t\t\tmatches = items;\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\titems.forEach(function(item){\r\n\t\t\t\t\tif(item.value !== null || typeof item.value !== \"undefined\"){\r\n\t\t\t\t\t\tif(String(item.value).toLowerCase().indexOf(String(term).toLowerCase()) > -1 || String(item.title).toLowerCase().indexOf(String(term).toLowerCase()) > -1){\r\n\t\t\t\t\t\t\tmatches.push(item);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\tfillListIfNotEmpty(matches, intialLoad);\r\n\t\t}\r\n\t}\r\n\r\n\tfunction addNotice(notice){\r\n\t\tvar searchEl = document.createElement(\"div\");\r\n\r\n\t\tclearList();\r\n\r\n\t\tif(notice !== false){\r\n\t\t\tsearchEl.classList.add(\"tabulator-edit-select-list-notice\");\r\n\t\t\tsearchEl.tabIndex = 0;\r\n\r\n\t\t\tif(notice instanceof Node){\r\n\t\t\t\tsearchEl.appendChild(notice);\r\n\t\t\t}else{\r\n\t\t\t\tsearchEl.innerHTML = notice;\r\n\t\t\t}\r\n\r\n\t\t\tlistEl.appendChild(searchEl);\r\n\t\t}\r\n\t}\r\n\r\n\tfunction parseItems(inputValues){\r\n\t\tvar itemList = [];\r\n\r\n\t\tif(Array.isArray(inputValues)){\r\n\t\t\tinputValues.forEach(function(value){\r\n\r\n\t\t\t\tvar item = {};\r\n\r\n\t\t\t\tif(typeof value === \"object\"){\r\n\t\t\t\t\titem.title = editorParams.listItemFormatter ? editorParams.listItemFormatter(value.value, value.label) : value.label;\r\n\t\t\t\t\titem.value = value.value;\r\n\t\t\t\t}else{\r\n\t\t\t\t\titem.title = editorParams.listItemFormatter ? editorParams.listItemFormatter(value, value) : value;\r\n\t\t\t\t\titem.value = value;\r\n\t\t\t\t}\r\n\r\n\t\t\t\titemList.push(item);\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tfor(var key in inputValues){\r\n\t\t\t\tvar item = {\r\n\t\t\t\t\ttitle:editorParams.listItemFormatter ? editorParams.listItemFormatter(key, inputValues[key]) : inputValues[key],\r\n\t\t\t\t\tvalue:key,\r\n\t\t\t\t};\r\n\r\n\t\t\t\titemList.push(item);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn itemList;\r\n\t}\r\n\r\n\tfunction clearList(){\r\n\t\twhile(listEl.firstChild) listEl.removeChild(listEl.firstChild);\r\n\t}\r\n\r\n\tfunction fillListIfNotEmpty(items, intialLoad){\r\n\t\tif(items.length){\r\n\t\t\tfillList(items, intialLoad);\r\n\t\t}else{\r\n\t\t\tif(editorParams.emptyPlaceholder){\r\n\t\t\t\taddNotice(editorParams.emptyPlaceholder);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tfunction fillList(items, intialLoad){\r\n\t\tvar current = false;\r\n\r\n\t\tclearList();\r\n\r\n\t\tdisplayItems = items;\r\n\r\n\t\tdisplayItems.forEach(function(item){\r\n\t\t\tvar el = item.element;\r\n\r\n\t\t\tif(!el){\r\n\t\t\t\tel = document.createElement(\"div\");\r\n\t\t\t\tel.classList.add(\"tabulator-edit-select-list-item\");\r\n\t\t\t\tel.tabIndex = 0;\r\n\t\t\t\tel.innerHTML = item.title;\r\n\r\n\t\t\t\tel.addEventListener(\"click\", function(e){\r\n\t\t\t\t\tsetCurrentItem(item);\r\n\t\t\t\t\tchooseItem();\r\n\t\t\t\t});\r\n\r\n\t\t\t\tel.addEventListener(\"mousedown\", function(e){\r\n\t\t\t\t\tblurable = false;\r\n\r\n\t\t\t\t\tsetTimeout(function(){\r\n\t\t\t\t\t\tblurable = true;\r\n\t\t\t\t\t}, 10);\r\n\t\t\t\t});\r\n\r\n\t\t\t\titem.element = el;\r\n\r\n\t\t\t\tif(intialLoad && item.value == initialValue){\r\n\t\t\t\t\tinput.value = item.title;\r\n\t\t\t\t\titem.element.classList.add(\"active\");\r\n\t\t\t\t\tcurrent = true;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(item === currentItem){\r\n\t\t\t\t\titem.element.classList.add(\"active\");\r\n\t\t\t\t\tcurrent = true;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tlistEl.appendChild(el);\r\n\t\t});\r\n\r\n\t\tif(!current){\r\n\t\t\tsetCurrentItem(false);\r\n\t\t}\r\n\t}\r\n\r\n\tfunction chooseItem(){\r\n\t\thideList();\r\n\r\n\t\tif(currentItem){\r\n\t\t\tif(initialValue !== currentItem.value){\r\n\t\t\t\tinitialValue = currentItem.value;\r\n\t\t\t\tinput.value = currentItem.title;\r\n\t\t\t\tsuccess(currentItem.value);\r\n\t\t\t}else{\r\n\t\t\t\tcancel();\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tif(editorParams.freetext){\r\n\t\t\t\tinitialValue = input.value;\r\n\t\t\t\tsuccess(input.value);\r\n\t\t\t}else{\r\n\t\t\t\tif(editorParams.allowEmpty && input.value === \"\"){\r\n\t\t\t\t\tinitialValue = input.value;\r\n\t\t\t\t\tsuccess(input.value);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tcancel();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tfunction showList(){\r\n\t\tif(!listEl.parentNode){\r\n\t\t\twhile(listEl.firstChild) listEl.removeChild(listEl.firstChild);\r\n\r\n\t\t\tvar offset = Helpers.elOffset(cellEl);\r\n\r\n\t\t\tlistEl.style.minWidth = cellEl.offsetWidth + \"px\";\r\n\r\n\t\t\tlistEl.style.top = (offset.top + cellEl.offsetHeight) + \"px\";\r\n\t\t\tlistEl.style.left = offset.left + \"px\";\r\n\t\t\tdocument.body.appendChild(listEl);\r\n\t\t}\r\n\t}\r\n\r\n\tfunction setCurrentItem(item, showInputValue){\r\n\t\tif(currentItem && currentItem.element){\r\n\t\t\tcurrentItem.element.classList.remove(\"active\");\r\n\t\t}\r\n\r\n\t\tcurrentItem = item;\r\n\r\n\t\tif(item && item.element){\r\n\t\t\titem.element.classList.add(\"active\");\r\n\t\t}\r\n\r\n\t\tif(item && item.element && item.element.scrollIntoView){\r\n\t\t\titem.element.scrollIntoView({behavior: 'smooth', block: 'nearest', inline: 'start'});\r\n\t\t}\r\n\t}\r\n\r\n\tfunction hideList(){\r\n\t\tif(listEl.parentNode){\r\n\t\t\tlistEl.parentNode.removeChild(listEl);\r\n\t\t}\r\n\r\n\t\tremoveScrollListener();\r\n\t}\r\n\r\n\r\n\tfunction cancelItem(){\r\n\t\thideList();\r\n\t\tcancel();\r\n\t}\r\n\r\n\tfunction removeScrollListener() {\r\n\t\tself.table.rowManager.element.removeEventListener(\"scroll\", cancelItem);\r\n\t}\r\n\r\n\t//allow key based navigation\r\n\tinput.addEventListener(\"keydown\", function(e){\r\n\t\tvar index;\r\n\r\n\t\tswitch(e.keyCode){\r\n\t\t\tcase 38: //up arrow\r\n\t\t\tindex = displayItems.indexOf(currentItem);\r\n\r\n\t\t\tif(vertNav == \"editor\" || (vertNav == \"hybrid\" && index)){\r\n\t\t\t\te.stopImmediatePropagation();\r\n\t\t\t\te.stopPropagation();\r\n\t\t\t\te.preventDefault();\r\n\r\n\t\t\t\tif(index > 0){\r\n\t\t\t\t\tsetCurrentItem(displayItems[index - 1]);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tsetCurrentItem(false);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 40: //down arrow\r\n\r\n\t\t\tindex = displayItems.indexOf(currentItem);\r\n\r\n\t\t\tif(vertNav == \"editor\" || (vertNav == \"hybrid\" && index < displayItems.length - 1)){\r\n\r\n\t\t\t\te.stopImmediatePropagation();\r\n\t\t\t\te.stopPropagation();\r\n\t\t\t\te.preventDefault();\r\n\r\n\t\t\t\tif(index < displayItems.length - 1){\r\n\t\t\t\t\tif(index == -1){\r\n\t\t\t\t\t\tsetCurrentItem(displayItems[0]);\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tsetCurrentItem(displayItems[index + 1]);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\r\n\r\n\t\t\tcase 37: //left arrow\r\n\t\t\tcase 39: //right arrow\r\n\t\t\te.stopImmediatePropagation();\r\n\t\t\te.stopPropagation();\r\n\t\t\t// e.preventDefault();\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 13: //enter\r\n\t\t\tchooseItem();\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 27: //escape\r\n\t\t\tcancelItem();\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 36: //home\r\n\t\t\tcase 35: //end\r\n\t\t\t//prevent table navigation while using input element\r\n\t\t\te.stopImmediatePropagation();\r\n\t\t\tbreak;\r\n\t\t}\r\n\t});\r\n\r\n\tinput.addEventListener(\"keyup\", function(e){\r\n\r\n\t\tswitch(e.keyCode){\r\n\t\t\tcase 38: //up arrow\r\n\t\t\tcase 37: //left arrow\r\n\t\t\tcase 39: //up arrow\r\n\t\t\tcase 40: //right arrow\r\n\t\t\tcase 13: //enter\r\n\t\t\tcase 27: //escape\r\n\t\t\tbreak;\r\n\r\n\t\t\tdefault:\r\n\t\t\tfilterList(input.value);\r\n\t\t}\r\n\r\n\t});\r\n\r\n\tinput.addEventListener(\"search\", function(e){\r\n\t\tfilterList(input.value);\r\n\t});\r\n\r\n\tinput.addEventListener(\"blur\", function(e){\r\n\t\tif(blurable){\r\n\t\t\tchooseItem();\r\n\t\t}\r\n\t});\r\n\r\n\tinput.addEventListener(\"focus\", function(e){\r\n\t\tvar value = initialDisplayValue;\r\n\t\tgenUniqueColumnValues();\r\n\t\tshowList();\r\n\t\tinput.value = value;\r\n\t\tfilterList(value, true);\r\n\t});\r\n\r\n\r\n\tonRendered(function(){\r\n\t\tinput.style.height = \"100%\";\r\n\t\tinput.focus({preventScroll: true});\r\n\t});\r\n\r\n\tif(editorParams.mask){\r\n\t\tmaskInput(input, editorParams);\r\n\t}\r\n\r\n\tsetTimeout(() => {\r\n\t\tthis.table.rowManager.element.addEventListener(\"scroll\", cancelItem);\r\n\t}, 10);\r\n\r\n\tgenUniqueColumnValues();\r\n\tinput.value = initialDisplayValue;\r\n\tfilterList(initialDisplayValue, true);\r\n\r\n\treturn input;\r\n};","//star rating\r\nexport default function(cell, onRendered, success, cancel, editorParams){\r\n\tvar self = this,\r\n\telement = cell.getElement(),\r\n\tvalue = cell.getValue(),\r\n\tmaxStars = element.getElementsByTagName(\"svg\").length || 5,\r\n\tsize = element.getElementsByTagName(\"svg\")[0] ? element.getElementsByTagName(\"svg\")[0].getAttribute(\"width\") : 14,\r\n\tstars = [],\r\n\tstarsHolder = document.createElement(\"div\"),\r\n\tstar = document.createElementNS('http://www.w3.org/2000/svg', \"svg\");\r\n\r\n\r\n\t//change star type\r\n\tfunction starChange(val){\r\n\t\tstars.forEach(function(star, i){\r\n\t\t\tif(i < val){\r\n\t\t\t\tif(self.table.browser == \"ie\"){\r\n\t\t\t\t\tstar.setAttribute(\"class\", \"tabulator-star-active\");\r\n\t\t\t\t}else{\r\n\t\t\t\t\tstar.classList.replace(\"tabulator-star-inactive\", \"tabulator-star-active\");\r\n\t\t\t\t}\r\n\r\n\t\t\t\tstar.innerHTML = '';\r\n\t\t\t}else{\r\n\t\t\t\tif(self.table.browser == \"ie\"){\r\n\t\t\t\t\tstar.setAttribute(\"class\", \"tabulator-star-inactive\");\r\n\t\t\t\t}else{\r\n\t\t\t\t\tstar.classList.replace(\"tabulator-star-active\", \"tabulator-star-inactive\");\r\n\t\t\t\t}\r\n\r\n\t\t\t\tstar.innerHTML = '';\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t//build stars\r\n\tfunction buildStar(i){\r\n\r\n\t\tvar starHolder = document.createElement(\"span\");\r\n\t\tvar nextStar = star.cloneNode(true);\r\n\r\n\t\tstars.push(nextStar);\r\n\r\n\t\tstarHolder.addEventListener(\"mouseenter\", function(e){\r\n\t\t\te.stopPropagation();\r\n\t\t\te.stopImmediatePropagation();\r\n\t\t\tstarChange(i);\r\n\t\t});\r\n\r\n\t\tstarHolder.addEventListener(\"mousemove\", function(e){\r\n\t\t\te.stopPropagation();\r\n\t\t\te.stopImmediatePropagation();\r\n\t\t});\r\n\r\n\t\tstarHolder.addEventListener(\"click\", function(e){\r\n\t\t\te.stopPropagation();\r\n\t\t\te.stopImmediatePropagation();\r\n\t\t\tsuccess(i);\r\n\t\t\telement.blur();\r\n\t\t});\r\n\r\n\t\tstarHolder.appendChild(nextStar);\r\n\t\tstarsHolder.appendChild(starHolder);\r\n\r\n\t}\r\n\r\n\t//handle keyboard navigation value change\r\n\tfunction changeValue(val){\r\n\t\tvalue = val;\r\n\t\tstarChange(val);\r\n\t}\r\n\r\n\t//style cell\r\n\telement.style.whiteSpace = \"nowrap\";\r\n\telement.style.overflow = \"hidden\";\r\n\telement.style.textOverflow = \"ellipsis\";\r\n\r\n\t//style holding element\r\n\tstarsHolder.style.verticalAlign = \"middle\";\r\n\tstarsHolder.style.display = \"inline-block\";\r\n\tstarsHolder.style.padding = \"4px\";\r\n\r\n\t//style star\r\n\tstar.setAttribute(\"width\", size);\r\n\tstar.setAttribute(\"height\", size);\r\n\tstar.setAttribute(\"viewBox\", \"0 0 512 512\");\r\n\tstar.setAttribute(\"xml:space\", \"preserve\");\r\n\tstar.style.padding = \"0 1px\";\r\n\r\n\tif(editorParams.elementAttributes && typeof editorParams.elementAttributes == \"object\"){\r\n\t\tfor (let key in editorParams.elementAttributes){\r\n\t\t\tif(key.charAt(0) == \"+\"){\r\n\t\t\t\tkey = key.slice(1);\r\n\t\t\t\tstarsHolder.setAttribute(key, starsHolder.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\r\n\t\t\t}else{\r\n\t\t\t\tstarsHolder.setAttribute(key, editorParams.elementAttributes[key]);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//create correct number of stars\r\n\tfor(var i=1;i<= maxStars;i++){\r\n\t\tbuildStar(i);\r\n\t}\r\n\r\n\t//ensure value does not exceed number of stars\r\n\tvalue = Math.min(parseInt(value), maxStars);\r\n\r\n\t// set initial styling of stars\r\n\tstarChange(value);\r\n\r\n\tstarsHolder.addEventListener(\"mousemove\", function(e){\r\n\t\tstarChange(0);\r\n\t});\r\n\r\n\tstarsHolder.addEventListener(\"click\", function(e){\r\n\t\tsuccess(0);\r\n\t});\r\n\r\n\telement.addEventListener(\"blur\", function(e){\r\n\t\tcancel();\r\n\t});\r\n\r\n\t//allow key based navigation\r\n\telement.addEventListener(\"keydown\", function(e){\r\n\t\tswitch(e.keyCode){\r\n\t\t\tcase 39: //right arrow\r\n\t\t\tchangeValue(value + 1);\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 37: //left arrow\r\n\t\t\tchangeValue(value - 1);\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 13: //enter\r\n\t\t\tsuccess(value);\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 27: //escape\r\n\t\t\tcancel();\r\n\t\t\tbreak;\r\n\t\t}\r\n\t});\r\n\r\n\treturn starsHolder;\r\n};","//draggable progress bar\r\nexport default function(cell, onRendered, success, cancel, editorParams){\r\n\tvar element = cell.getElement(),\r\n\tmax = typeof editorParams.max === \"undefined\" ? ((element.getElementsByTagName(\"div\")[0] && 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\te.preventDefault();\r\n\t\t\tbar.style.width = (bar.clientWidth + element.clientWidth/100) + \"px\";\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 37: //left arrow\r\n\t\t\te.preventDefault();\r\n\t\t\tbar.style.width = (bar.clientWidth - element.clientWidth/100) + \"px\";\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 9: //tab\r\n\t\t\tcase 13: //enter\r\n\t\t\tupdateValue();\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 27: //escape\r\n\t\t\tcancel();\r\n\t\t\tbreak;\r\n\r\n\t\t}\r\n\t});\r\n\r\n\telement.addEventListener(\"blur\", function(){\r\n\t\tcancel();\r\n\t});\r\n\r\n\treturn bar;\r\n};","//checkbox\r\nexport default function(cell, onRendered, success, cancel, editorParams){\r\n\tvar value = cell.getValue(),\r\n\tinput = document.createElement(\"input\"),\r\n\ttristate = editorParams.tristate,\r\n\tindetermValue = typeof editorParams.indeterminateValue === \"undefined\" ? null : editorParams.indeterminateValue,\r\n\tindetermState = false;\r\n\r\n\tinput.setAttribute(\"type\", \"checkbox\");\r\n\tinput.style.marginTop = \"5px\";\r\n\tinput.style.boxSizing = \"border-box\";\r\n\r\n\tif(editorParams.elementAttributes && typeof editorParams.elementAttributes == \"object\"){\r\n\t\tfor (let key in editorParams.elementAttributes){\r\n\t\t\tif(key.charAt(0) == \"+\"){\r\n\t\t\t\tkey = key.slice(1);\r\n\t\t\t\tinput.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\r\n\t\t\t}else{\r\n\t\t\t\tinput.setAttribute(key, editorParams.elementAttributes[key]);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tinput.value = value;\r\n\r\n\tif(tristate && (typeof value === \"undefined\" || value === indetermValue || value === \"\")){\r\n\t\tindetermState = true;\r\n\t\tinput.indeterminate = true;\r\n\t}\r\n\r\n\tif(this.table.browser != \"firefox\"){ //prevent blur issue on mac firefox\r\n\t\tonRendered(function(){\r\n\t\t\tinput.focus({preventScroll: true});\r\n\t\t});\r\n\t}\r\n\r\n\tinput.checked = value === true || value === \"true\" || value === \"True\" || value === 1;\r\n\r\n\tonRendered(function(){\r\n\t\tinput.focus();\r\n\t});\r\n\r\n\tfunction setValue(blur){\r\n\t\tif(tristate){\r\n\t\t\tif(!blur){\r\n\t\t\t\tif(input.checked && !indetermState){\r\n\t\t\t\t\tinput.checked = false;\r\n\t\t\t\t\tinput.indeterminate = true;\r\n\t\t\t\t\tindetermState = true;\r\n\t\t\t\t\treturn indetermValue;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tindetermState = false;\r\n\t\t\t\t\treturn input.checked;\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tif(indetermState){\r\n\t\t\t\t\treturn indetermValue;\r\n\t\t\t\t}else{\r\n\t\t\t\t\treturn input.checked;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\treturn input.checked;\r\n\t\t}\r\n\t}\r\n\r\n\t//submit new value on blur\r\n\tinput.addEventListener(\"change\", function(e){\r\n\t\tsuccess(setValue());\r\n\t});\r\n\r\n\tinput.addEventListener(\"blur\", function(e){\r\n\t\tsuccess(setValue(true));\r\n\t});\r\n\r\n\t//submit new value on enter\r\n\tinput.addEventListener(\"keydown\", function(e){\r\n\t\tif(e.keyCode == 13){\r\n\t\t\tsuccess(setValue());\r\n\t\t}\r\n\t\tif(e.keyCode == 27){\r\n\t\t\tcancel();\r\n\t\t}\r\n\t});\r\n\r\n\treturn input;\r\n};","import Module from '../../core/Module.js';\r\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\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.currentCell = false; //hold currently editing cell\r\n\t\tthis.mouseClick = false; //hold mousedown state to prevent click binding being overriden by editor opening\r\n\t\tthis.recursionBlock = false; //prevent focus recursion\r\n\t\tthis.invalidEdit = false;\r\n\t\tthis.editedCells = [];\r\n\r\n\t\tthis.editors = Edit.editors;\r\n\r\n\t\tthis.registerColumnOption(\"editable\");\r\n\t\tthis.registerColumnOption(\"editor\");\r\n\t\tthis.registerColumnOption(\"editorParams\");\r\n\r\n\t\tthis.registerColumnOption(\"cellEditing\");\r\n\t\tthis.registerColumnOption(\"cellEdited\");\r\n\t\tthis.registerColumnOption(\"cellEditCancelled\");\r\n\r\n\t\tthis.registerTableFunction(\"getEditedCells\", this.getEditedCells.bind(this));\r\n\t\tthis.registerTableFunction(\"clearCellEdited\", this.clearCellEdited.bind(this));\r\n\t\tthis.registerTableFunction(\"navigatePrev\", this.navigatePrev.bind(this));\r\n\t\tthis.registerTableFunction(\"navigateNext\", this.navigateNext.bind(this));\r\n\t\tthis.registerTableFunction(\"navigateLeft\", this.navigateLeft.bind(this));\r\n\t\tthis.registerTableFunction(\"navigateRight\", this.navigateRight.bind(this));\r\n\t\tthis.registerTableFunction(\"navigateUp\", this.navigateUp.bind(this));\r\n\t\tthis.registerTableFunction(\"navigateDown\", this.navigateDown.bind(this));\r\n\r\n\t\tthis.registerComponentFunction(\"cell\", \"isEdited\", this.cellisEdited.bind(this));\r\n\t\tthis.registerComponentFunction(\"cell\", \"clearEdited\", this.clearEdited.bind(this));\r\n\t\tthis.registerComponentFunction(\"cell\", \"edit\", this.editCell.bind(this));\r\n\t\tthis.registerComponentFunction(\"cell\", \"cancelEdit\", this.cellCancelEdit.bind(this));\r\n\r\n\t\tthis.registerComponentFunction(\"cell\", \"navigatePrev\", this.navigatePrev.bind(this));\r\n\t\tthis.registerComponentFunction(\"cell\", \"navigateNext\", this.navigateNext.bind(this));\r\n\t\tthis.registerComponentFunction(\"cell\", \"navigateLeft\", this.navigateLeft.bind(this));\r\n\t\tthis.registerComponentFunction(\"cell\", \"navigateRight\", this.navigateRight.bind(this));\r\n\t\tthis.registerComponentFunction(\"cell\", \"navigateUp\", this.navigateUp.bind(this));\r\n\t\tthis.registerComponentFunction(\"cell\", \"navigateDown\", this.navigateDown.bind(this));\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tthis.subscribe(\"cell-init\", this.bindEditor.bind(this));\r\n\t\tthis.subscribe(\"cell-delete\", this.clearEdited.bind(this));\r\n\t\tthis.subscribe(\"column-layout\", this.initializeColumnCheck.bind(this));\r\n\t\tthis.subscribe(\"column-delete\", this.columnDeleteCheck.bind(this));\r\n\t\tthis.subscribe(\"row-deleting\", this.rowDeleteCheck.bind(this));\r\n\t\tthis.subscribe(\"data-refreshing\", this.cancelEdit.bind(this));\r\n\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\r\n\r\n\t///////////////////////////////////\r\n\t////// Keybinding Functions ///////\r\n\t///////////////////////////////////\r\n\r\n\tkeybindingNavigateNext(e){\r\n\t\tvar cell = this.currentCell,\r\n\t\tnewRow = this.options(\"tabEndNewRow\");\r\n\r\n\t\tif(cell){\r\n\t\t\tif(!this.navigateNext(cell, e)){\r\n\t\t\t\tif(newRow){\r\n\t\t\t\t\tcell.getElement().firstChild.blur();\r\n\r\n\t\t\t\t\tif(newRow === true){\r\n\t\t\t\t\t\tnewRow = this.table.addRow({})\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tif(typeof newRow == \"function\"){\r\n\t\t\t\t\t\t\tnewRow = this.table.addRow(newRow(cell.row.getComponent()))\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\tnewRow = this.table.addRow(Object.assign({}, newRow));\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tnewRow.then(() => {\r\n\t\t\t\t\t\tsetTimeout(() => {\r\n\t\t\t\t\t\t\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\r\n\t///////////////////////////////////\r\n\t///////// Cell Functions //////////\r\n\t///////////////////////////////////\r\n\r\n\tcellisEdited(cell){\r\n\t\treturn !! cell.modules.edit && cell.modules.edit.edited;\r\n\t}\r\n\r\n\tcellCancelEdit(cell){\r\n\t\tif(cell === this.currentCell){\r\n\t\t\tthis.table.modules.edit.cancelEdit();\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Cancel Editor Error - This cell is not currently being edited \");\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t///////////////////////////////////\r\n\t///////// Table Functions /////////\r\n\t///////////////////////////////////\r\n\tclearCellEdited(cells){\r\n\t\tif(!cells){\r\n\t\t\tcells = this.table.modules.edit.getEditedCells();\r\n\t\t}\r\n\r\n\t\tif(!Array.isArray(cells)){\r\n\t\t\tcells = [cells];\r\n\t\t}\r\n\r\n\t\tcells.forEach((cell) => {\r\n\t\t\tthis.table.modules.edit.clearEdited(cell._getSelf());\r\n\t\t});\r\n\t}\r\n\r\n\tnavigatePrev(cell = this.currentCell, e){\r\n\t\tvar nextCell, prevRow;\r\n\r\n\t\tif(cell){\r\n\r\n\t\t\tif(e){\r\n\t\t\t\te.preventDefault();\r\n\t\t\t}\r\n\r\n\t\t\tnextCell = this.navigateLeft();\r\n\r\n\t\t\tif(nextCell){\r\n\t\t\t\treturn true;\r\n\t\t\t}else{\r\n\t\t\t\tprevRow = this.table.rowManager.prevDisplayRow(cell.row, true);\r\n\r\n\t\t\t\tif(prevRow){\r\n\t\t\t\t\tnextCell = this.findNextEditableCell(prevRow, prevRow.cells.length);\r\n\r\n\t\t\t\t\tif(nextCell){\r\n\t\t\t\t\t\tnextCell.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\r\n\t\treturn false;\r\n\t}\r\n\r\n\tnavigateNext(cell = this.currentCell, e){\r\n\t\tvar nextCell, nextRow;\r\n\r\n\t\tif(cell){\r\n\r\n\t\t\tif(e){\r\n\t\t\t\te.preventDefault();\r\n\t\t\t}\r\n\r\n\t\t\tnextCell = this.navigateRight();\r\n\r\n\t\t\tif(nextCell){\r\n\t\t\t\treturn true;\r\n\t\t\t}else{\r\n\t\t\t\tnextRow = this.table.rowManager.nextDisplayRow(cell.row, true);\r\n\r\n\t\t\t\tif(nextRow){\r\n\t\t\t\t\tnextCell = this.findNextEditableCell(nextRow, -1);\r\n\r\n\t\t\t\t\tif(nextCell){\r\n\t\t\t\t\t\tnextCell.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\r\n\t\treturn false;\r\n\t}\r\n\r\n\tnavigateLeft(cell = this.currentCell, e){\r\n\t\tvar index, nextCell;\r\n\r\n\t\tif(cell){\r\n\r\n\t\t\tif(e){\r\n\t\t\t\te.preventDefault();\r\n\t\t\t}\r\n\r\n\t\t\tindex = cell.getIndex();\r\n\t\t\tnextCell = this.findPrevEditableCell(cell.row, index);\r\n\r\n\t\t\tif(nextCell){\r\n\t\t\t\tnextCell.getComponent().edit();\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t}\r\n\r\n\tnavigateRight(cell = this.currentCell, e){\r\n\t\tvar index, nextCell;\r\n\r\n\t\tif(cell){\r\n\r\n\t\t\tif(e){\r\n\t\t\t\te.preventDefault();\r\n\t\t\t}\r\n\r\n\t\t\tindex = cell.getIndex();\r\n\t\t\tnextCell = this.findNextEditableCell(cell.row, index);\r\n\r\n\t\t\tif(nextCell){\r\n\t\t\t\tnextCell.getComponent().edit();\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t}\r\n\r\n\tnavigateUp(cell = this.currentCell, e){\r\n\t\tvar index, nextRow;\r\n\r\n\t\tif(cell){\r\n\r\n\t\t\tif(e){\r\n\t\t\t\te.preventDefault();\r\n\t\t\t}\r\n\r\n\t\t\tindex = cell.getIndex();\r\n\t\t\tnextRow = this.table.rowManager.prevDisplayRow(cell.row, true);\r\n\r\n\t\t\tif(nextRow){\r\n\t\t\t\tnextRow.cells[index].getComponent().edit();\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t}\r\n\r\n\tnavigateDown(cell = this.currentCell, e){\r\n\t\tvar index, nextRow;\r\n\r\n\t\tif(cell){\r\n\r\n\t\t\tif(e){\r\n\t\t\t\te.preventDefault();\r\n\t\t\t}\r\n\r\n\t\t\tindex = cell.getIndex();\r\n\t\t\tnextRow = this.table.rowManager.nextDisplayRow(cell.row, true);\r\n\r\n\t\t\tif(nextRow){\r\n\t\t\t\tnextRow.cells[index].getComponent().edit();\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t}\r\n\r\n\tfindNextEditableCell(row, index){\r\n\t\tvar nextCell = false;\r\n\r\n\t\tif(index < row.cells.length-1){\r\n\t\t\tfor(var i = index+1; i < row.cells.length; i++){\r\n\t\t\t\tlet cell = row.cells[i];\r\n\r\n\t\t\t\tif(cell.column.modules.edit && Helpers.elVisible(cell.getElement())){\r\n\t\t\t\t\tlet allowEdit = true;\r\n\r\n\t\t\t\t\tif(typeof cell.column.modules.edit.check == \"function\"){\r\n\t\t\t\t\t\tallowEdit = cell.column.modules.edit.check(cell.getComponent());\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif(allowEdit){\r\n\t\t\t\t\t\tnextCell = cell;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn nextCell;\r\n\t}\r\n\r\n\tfindPrevEditableCell(row, index){\r\n\t\tvar prevCell = false;\r\n\r\n\t\tif(index > 0){\r\n\t\t\tfor(var i = index-1; i >= 0; i--){\r\n\t\t\t\tlet cell = row.cells[i],\r\n\t\t\t\tallowEdit = true;\r\n\r\n\t\t\t\tif(cell.column.modules.edit && Helpers.elVisible(cell.getElement())){\r\n\t\t\t\t\tif(typeof cell.column.modules.edit.check == \"function\"){\r\n\t\t\t\t\t\tallowEdit = cell.column.modules.edit.check(cell.getComponent());\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif(allowEdit){\r\n\t\t\t\t\t\tprevCell = cell;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn prevCell;\r\n\t}\r\n\r\n\t///////////////////////////////////\r\n\t///////// Internal Logic //////////\r\n\t///////////////////////////////////\r\n\r\n\tinitializeColumnCheck(column){\r\n\t\tif(typeof column.definition.editor !== \"undefined\"){\r\n\t\t\tthis.initializeColumn(column);\r\n\t\t}\r\n\t}\r\n\r\n\tcolumnDeleteCheck(column){\r\n\t\tif(this.currentCell && this.currentCell.column === column){\r\n\t\t\tthis.cancelEdit();\r\n\t\t}\r\n\t}\r\n\r\n\trowDeleteCheck(row){\r\n\t\tif(this.currentCell && this.currentCell.row === row){\r\n\t\t\tthis.cancelEdit();\r\n\t\t}\r\n\t}\r\n\r\n\t//initialize column editor\r\n\tinitializeColumn(column){\r\n\t\tvar self = this,\r\n\t\tconfig = {\r\n\t\t\teditor:false,\r\n\t\t\tblocked:false,\r\n\t\t\tcheck:column.definition.editable,\r\n\t\t\tparams:column.definition.editorParams || {}\r\n\t\t};\r\n\r\n\t\t//set column editor\r\n\t\tswitch(typeof column.definition.editor){\r\n\t\t\tcase \"string\":\r\n\t\t\tif(this.editors[column.definition.editor]){\r\n\t\t\t\tconfig.editor = this.editors[column.definition.editor];\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Editor Error - No such editor found: \", column.definition.editor);\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"function\":\r\n\t\t\tconfig.editor = column.definition.editor;\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"boolean\":\r\n\t\t\tif(column.definition.editor === true){\r\n\t\t\t\tif(typeof column.definition.formatter !== \"function\"){\r\n\t\t\t\t\tif(this.editors[column.definition.formatter]){\r\n\t\t\t\t\t\tconfig.editor = this.editors[column.definition.formatter];\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tconfig.editor = this.editors[\"input\"];\r\n\t\t\t\t\t}\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.warn(\"Editor Error - Cannot auto lookup editor for a custom formatter: \", column.definition.formatter);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\tif(config.editor){\r\n\t\t\tcolumn.modules.edit = config;\r\n\t\t}\r\n\t}\r\n\r\n\tgetCurrentCell(){\r\n\t\treturn this.currentCell ? this.currentCell.getComponent() : false;\r\n\t}\r\n\r\n\tclearEditor(cancel){\r\n\t\tvar cell = this.currentCell,\r\n\t\tcellEl;\r\n\r\n\t\tthis.invalidEdit = false;\r\n\r\n\t\tif(cell){\r\n\t\t\tthis.currentCell = false;\r\n\r\n\t\t\tcellEl = cell.getElement();\r\n\r\n\t\t\tif(cancel){\r\n\t\t\t\tif(cell.column.modules.validate && this.table.modExists(\"validate\")){\r\n\t\t\t\t\tthis.table.modules.validate.cellValidate(cell);\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tcellEl.classList.remove(\"tabulator-validation-fail\");\r\n\t\t\t}\r\n\r\n\t\t\tcellEl.classList.remove(\"tabulator-editing\");\r\n\r\n\t\t\twhile(cellEl.firstChild) cellEl.removeChild(cellEl.firstChild);\r\n\r\n\t\t\tcell.row.getElement().classList.remove(\"tabulator-row-editing\");\r\n\t\t}\r\n\t}\r\n\r\n\tcancelEdit(){\r\n\t\tif(this.currentCell){\r\n\t\t\tvar cell = this.currentCell;\r\n\t\t\tvar component = this.currentCell.getComponent();\r\n\r\n\t\t\tthis.clearEditor(true);\r\n\t\t\tcell.setValueActual(cell.getValue());\r\n\t\t\tcell.cellRendered();\r\n\r\n\t\t\tif(cell.column.definition.editor == \"textarea\" || cell.column.definition.variableHeight){\r\n\t\t\t\tcell.row.normalizeHeight(true);\r\n\t\t\t}\r\n\r\n\t\t\tif(cell.column.definition.cellEditCancelled){\r\n\t\t\t\tcell.column.definition.cellEditCancelled.call(this.table, component);\r\n\t\t\t}\r\n\r\n\t\t\tthis.dispatch(\"edit-cancelled\", cell);\r\n\t\t\tthis.dispatchExternal(\"cellEditCancelled\", component);\r\n\t\t}\r\n\t}\r\n\r\n\t//return a formatted value for a cell\r\n\tbindEditor(cell){\r\n\t\tif(cell.column.modules.edit){\r\n\t\t\tvar self = this,\r\n\t\t\telement = cell.getElement(true);\r\n\r\n\t\t\telement.setAttribute(\"tabindex\", 0);\r\n\r\n\t\t\telement.addEventListener(\"click\", function(e){\r\n\t\t\t\tif(!element.classList.contains(\"tabulator-editing\")){\r\n\t\t\t\t\telement.focus({preventScroll: true});\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\telement.addEventListener(\"mousedown\", function(e){\r\n\t\t\t\tif (e.button === 2) {\r\n\t\t\t\t\te.preventDefault();\r\n\t\t\t\t}else{\r\n\t\t\t\t\tself.mouseClick = true;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\telement.addEventListener(\"focus\", function(e){\r\n\t\t\t\tif(!self.recursionBlock){\r\n\t\t\t\t\tself.edit(cell, e, false);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tfocusCellNoEvent(cell, block){\r\n\t\tthis.recursionBlock = true;\r\n\r\n\t\tif(!(block && this.table.browser === \"ie\")){\r\n\t\t\tcell.getElement().focus({preventScroll: true});\r\n\t\t}\r\n\r\n\t\tthis.recursionBlock = false;\r\n\t}\r\n\r\n\teditCell(cell, forceEdit){\r\n\t\tthis.focusCellNoEvent(cell);\r\n\t\tthis.edit(cell, false, forceEdit);\r\n\t}\r\n\r\n\tfocusScrollAdjust(cell){\r\n\t\tif(this.table.rowManager.getRenderMode() == \"virtual\"){\r\n\t\t\tvar topEdge = this.table.rowManager.element.scrollTop,\r\n\t\t\tbottomEdge = this.table.rowManager.element.clientHeight + this.table.rowManager.element.scrollTop,\r\n\t\t\trowEl = cell.row.getElement(),\r\n\t\t\toffset = rowEl.offsetTop;\r\n\r\n\t\t\tif(rowEl.offsetTop < topEdge){\r\n\t\t\t\tthis.table.rowManager.element.scrollTop -= (topEdge - rowEl.offsetTop);\r\n\t\t\t}else{\r\n\t\t\t\tif(rowEl.offsetTop + rowEl.offsetHeight > bottomEdge){\r\n\t\t\t\t\tthis.table.rowManager.element.scrollTop += (rowEl.offsetTop + rowEl.offsetHeight - bottomEdge);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tvar leftEdge = this.table.rowManager.element.scrollLeft,\r\n\t\t\trightEdge = this.table.rowManager.element.clientWidth + this.table.rowManager.element.scrollLeft,\r\n\t\t\tcellEl = cell.getElement(),\r\n\t\t\toffset = cellEl.offsetLeft;\r\n\r\n\t\t\tif(this.table.modExists(\"frozenColumns\")){\r\n\t\t\t\tleftEdge += parseInt(this.table.modules.frozenColumns.leftMargin);\r\n\t\t\t\trightEdge -= parseInt(this.table.modules.frozenColumns.rightMargin);\r\n\t\t\t}\r\n\r\n\t\t\tif(this.table.options.renderHorizontal === \"virtual\"){\r\n\t\t\t\tleftEdge -= parseInt(this.table.columnManager.renderer.vDomPadLeft);\r\n\t\t\t\trightEdge -= parseInt(this.table.columnManager.renderer.vDomPadLeft);\r\n\t\t\t}\r\n\r\n\t\t\tif(cellEl.offsetLeft < leftEdge){\r\n\r\n\t\t\t\tthis.table.rowManager.element.scrollLeft -= (leftEdge - cellEl.offsetLeft);\r\n\t\t\t}else{\r\n\t\t\t\tif(cellEl.offsetLeft + cellEl.offsetWidth > rightEdge){\r\n\t\t\t\t\tthis.table.rowManager.element.scrollLeft += (cellEl.offsetLeft + cellEl.offsetWidth - rightEdge);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tedit(cell, e, forceEdit){\r\n\t\tvar self = this,\r\n\t\tallowEdit = true,\r\n\t\trendered = function(){},\r\n\t\telement = cell.getElement(),\r\n\t\tcellEditor, component, params;\r\n\r\n\t\t//prevent editing if another cell is refusing to leave focus (eg. validation fail)\r\n\t\tif(this.currentCell){\r\n\t\t\tif(!this.invalidEdit){\r\n\t\t\t\tthis.cancelEdit();\r\n\t\t\t}\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t//handle successfull value change\r\n\t\tfunction success(value){\r\n\t\t\tif(self.currentCell === cell){\r\n\t\t\t\tvar valid = true;\r\n\r\n\t\t\t\tif(cell.column.modules.validate && self.table.modExists(\"validate\") && self.table.options.validationMode != \"manual\"){\r\n\t\t\t\t\tvalid = self.table.modules.validate.validate(cell.column.modules.validate, cell, value);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(valid === true || self.table.options.validationMode === \"highlight\"){\r\n\t\t\t\t\tself.clearEditor();\r\n\r\n\r\n\t\t\t\t\tif(!cell.modules.edit){\r\n\t\t\t\t\t\tcell.modules.edit = {};\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tcell.modules.edit.edited = true;\r\n\r\n\t\t\t\t\tif(self.editedCells.indexOf(cell) == -1){\r\n\t\t\t\t\t\tself.editedCells.push(cell);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tcell.setValue(value, true);\r\n\r\n\t\t\t\t\tif(valid !== true){\r\n\t\t\t\t\t\telement.classList.add(\"tabulator-validation-fail\");\r\n\t\t\t\t\t\tself.table.externalEvents.dispatch(\"validationFailed\", cell.getComponent(), value, valid);\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tself.invalidEdit = true;\r\n\t\t\t\t\telement.classList.add(\"tabulator-validation-fail\");\r\n\t\t\t\t\tself.focusCellNoEvent(cell, true);\r\n\t\t\t\t\trendered();\r\n\t\t\t\t\tself.table.externalEvents.dispatch(\"validationFailed\", cell.getComponent(), value, valid);\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\t// console.warn(\"Edit Success Error - cannot call success on a cell that is no longer being edited\");\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//handle aborted edit\r\n\t\tfunction cancel(){\r\n\t\t\tif(self.currentCell === cell){\r\n\t\t\t\tself.cancelEdit();\r\n\t\t\t}else{\r\n\t\t\t\t// console.warn(\"Edit Success Error - cannot call cancel on a cell that is no longer being edited\");\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction onRendered(callback){\r\n\t\t\trendered = callback;\r\n\t\t}\r\n\r\n\t\tif(!cell.column.modules.edit.blocked){\r\n\t\t\tif(e){\r\n\t\t\t\te.stopPropagation();\r\n\t\t\t}\r\n\r\n\t\t\tswitch(typeof cell.column.modules.edit.check){\r\n\t\t\t\tcase \"function\":\r\n\t\t\t\tallowEdit = cell.column.modules.edit.check(cell.getComponent());\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"boolean\":\r\n\t\t\t\tallowEdit = cell.column.modules.edit.check;\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\r\n\t\t\tif(allowEdit || forceEdit){\r\n\r\n\t\t\t\tself.cancelEdit();\r\n\r\n\t\t\t\tself.currentCell = cell;\r\n\r\n\t\t\t\tthis.focusScrollAdjust(cell);\r\n\r\n\t\t\t\tcomponent = cell.getComponent();\r\n\r\n\t\t\t\tif(this.mouseClick){\r\n\t\t\t\t\tthis.mouseClick = false;\r\n\r\n\t\t\t\t\tif(cell.column.definition.cellClick){\r\n\t\t\t\t\t\tcell.column.definition.cellClick.call(this.table, e, component);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(cell.column.definition.cellEditing){\r\n\t\t\t\t\tcell.column.definition.cellEditing.call(this.table, component);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.dispatch(\"cell-editing\", cell);\r\n\t\t\t\tthis.dispatchExternal(\"cellEditing\", component);\r\n\r\n\t\t\t\tparams = typeof cell.column.modules.edit.params === \"function\" ? cell.column.modules.edit.params(component) : cell.column.modules.edit.params;\r\n\r\n\t\t\t\tcellEditor = cell.column.modules.edit.editor.call(self, component, onRendered, success, cancel, params);\r\n\r\n\t\t\t\t//if editor returned, add to DOM, if false, abort edit\r\n\t\t\t\tif(cellEditor !== false){\r\n\r\n\t\t\t\t\tif(cellEditor instanceof Node){\r\n\t\t\t\t\t\telement.classList.add(\"tabulator-editing\");\r\n\t\t\t\t\t\tcell.row.getElement().classList.add(\"tabulator-row-editing\");\r\n\t\t\t\t\t\twhile(element.firstChild) element.removeChild(element.firstChild);\r\n\t\t\t\t\t\telement.appendChild(cellEditor);\r\n\r\n\t\t\t\t\t\t//trigger onRendered Callback\r\n\t\t\t\t\t\trendered();\r\n\r\n\t\t\t\t\t\t//prevent editing from triggering rowClick event\r\n\t\t\t\t\t\tvar children = element.children;\r\n\r\n\t\t\t\t\t\tfor (var i = 0; i < children.length; i++) {\r\n\t\t\t\t\t\t\tchildren[i].addEventListener(\"click\", function(e){\r\n\t\t\t\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tconsole.warn(\"Edit Error - Editor should return an instance of Node, the editor returned:\", cellEditor);\r\n\t\t\t\t\t\telement.blur();\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}else{\r\n\t\t\t\t\telement.blur();\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn true;\r\n\t\t\t}else{\r\n\t\t\t\tthis.mouseClick = false;\r\n\t\t\t\telement.blur();\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tthis.mouseClick = false;\r\n\t\t\telement.blur();\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\tgetEditedCells(){\r\n\t\tvar output = [];\r\n\r\n\t\tthis.editedCells.forEach((cell) => {\r\n\t\t\toutput.push(cell.getComponent());\r\n\t\t});\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tclearEdited(cell){\r\n\t\tvar editIndex;\r\n\r\n\t\tif(cell.modules.edit && cell.modules.edit.edited){\r\n\t\t\tcell.modules.edit.edited = false;\r\n\r\n\t\t\tif(cell.modules.validate){\r\n\t\t\t\tcell.modules.validate.invalid = false;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\teditIndex = this.editedCells.indexOf(cell);\r\n\r\n\t\tif(editIndex > -1){\r\n\t\t\tthis.editedCells.splice(editIndex, 1);\r\n\t\t}\r\n\t}\r\n}\r\n\r\nEdit.moduleName = \"edit\";\r\n\r\n//load defaults\r\nEdit.editors = defaultEditors;\r\n\r\n\r\nexport default Edit;\r\n","class ExportRow{\r\n\tconstructor(type, columns, component, indent){\r\n\t\tthis.type = type;\r\n\t\tthis.columns = columns;\r\n\t\tthis.component = component || false;\r\n\t\tthis.indent = indent || 0;\r\n\t}\r\n}\r\n\r\nexport default ExportRow;","class ExportColumn{\r\n\tconstructor(value, component, width, height, depth){\r\n\t\tthis.value = value;\r\n\t\tthis.component = component || false;\r\n\t\tthis.width = width;\r\n\t\tthis.height = height;\r\n\t\tthis.depth = depth;\r\n\t}\r\n}\r\n\r\nexport default ExportColumn;","import Module from '../../core/Module.js';\r\n\r\nimport ExportRow from './ExportRow.js';\r\nimport ExportColumn from './ExportColumn.js';\r\n\r\nclass Export extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.config = {};\r\n\t\tthis.cloneTableStyle = true;\r\n\t\tthis.colVisProp = \"\";\r\n\r\n\t\tthis.registerTableOption(\"htmlOutputConfig\", false); //html outypu config\r\n\r\n\t\tthis.registerColumnOption(\"htmlOutput\");\r\n\t\tthis.registerColumnOption(\"titleHtmlOutput\");\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tthis.registerTableFunction(\"getHtml\", this.getHtml.bind(this));\r\n\t}\r\n\r\n\t///////////////////////////////////\r\n\t///////// Table Functions /////////\r\n\t///////////////////////////////////\r\n\r\n\r\n\t///////////////////////////////////\r\n\t///////// Internal Logic //////////\r\n\t///////////////////////////////////\r\n\r\n\tgenerateExportList(config, style, range, colVisProp){\r\n\t\tthis.cloneTableStyle = style;\r\n\t\tthis.config = config || {};\r\n\t\tthis.colVisProp = colVisProp;\r\n\r\n\t\tvar headers = this.config.columnHeaders !== false ? this.headersToExportRows(this.generateColumnGroupHeaders()) : [];\r\n\t\tvar body = this.bodyToExportRows(this.rowLookup(range));\r\n\r\n\t\treturn headers.concat(body);\r\n\t}\r\n\r\n\tgenereateTable(config, style, range, colVisProp){\r\n\t\tvar list = this.generateExportList(config, style, range, colVisProp);\r\n\r\n\t\treturn this.genereateTableElement(list);\r\n\t}\r\n\r\n\trowLookup(range){\r\n\t\tvar rows = [];\r\n\r\n\t\tif(typeof range == \"function\"){\r\n\t\t\trange.call(this.table).forEach((row) =>{\r\n\t\t\t\trow = this.table.rowManager.findRow(row);\r\n\r\n\t\t\t\tif(row){\r\n\t\t\t\t\trows.push(row);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tswitch(range){\r\n\t\t\t\tcase true:\r\n\t\t\t\tcase \"visible\":\r\n\t\t\t\trows = this.table.rowManager.getVisibleRows(false, true);\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"all\":\r\n\t\t\t\trows = this.table.rowManager.rows;\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"selected\":\r\n\t\t\t\trows = this.table.modules.selectRow.selectedRows;\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"active\":\r\n\t\t\t\tdefault:\r\n\t\t\t\tif(this.table.options.pagination){\r\n\t\t\t\t\trows = this.table.rowManager.getDisplayRows(this.table.rowManager.displayRows.length - 2);\r\n\t\t\t\t}else{\r\n\t\t\t\t\trows = this.table.rowManager.getDisplayRows();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn Object.assign([], rows);\r\n\t}\r\n\r\n\tgenerateColumnGroupHeaders(){\r\n\t\tvar output = [];\r\n\r\n\t\tvar columns = this.config.columnGroups !== false ? this.table.columnManager.columns : this.table.columnManager.columnsByIndex;\r\n\r\n\t\tcolumns.forEach((column) => {\r\n\t\t\tvar colData = this.processColumnGroup(column);\r\n\r\n\t\t\tif(colData){\r\n\t\t\t\toutput.push(colData);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tprocessColumnGroup(column){\r\n\t\tvar subGroups = column.columns,\r\n\t\tmaxDepth = 0,\r\n\t\ttitle = column.definition[\"title\" + (this.colVisProp.charAt(0).toUpperCase() + this.colVisProp.slice(1))] || column.definition.title;\r\n\r\n\t\tvar groupData = {\r\n\t\t\ttitle:title,\r\n\t\t\tcolumn:column,\r\n\t\t\tdepth:1,\r\n\t\t};\r\n\r\n\t\tif(subGroups.length){\r\n\t\t\tgroupData.subGroups = [];\r\n\t\t\tgroupData.width = 0;\r\n\r\n\t\t\tsubGroups.forEach((subGroup) => {\r\n\t\t\t\tvar subGroupData = this.processColumnGroup(subGroup);\r\n\r\n\t\t\t\tif(subGroupData){\r\n\t\t\t\t\tgroupData.width += subGroupData.width;\r\n\t\t\t\t\tgroupData.subGroups.push(subGroupData);\r\n\r\n\t\t\t\t\tif(subGroupData.depth > maxDepth){\r\n\t\t\t\t\t\tmaxDepth = subGroupData.depth;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tgroupData.depth += maxDepth;\r\n\r\n\t\t\tif(!groupData.width){\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tif(this.columnVisCheck(column)){\r\n\t\t\t\tgroupData.width = 1;\r\n\t\t\t}else{\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn groupData;\r\n\t}\r\n\r\n\tcolumnVisCheck(column){\r\n\t\treturn column.definition[this.colVisProp] !== false && (column.visible || (!column.visible && column.definition[this.colVisProp]));\r\n\t}\r\n\r\n\theadersToExportRows(columns){\r\n\t\tvar headers = [],\r\n\t\theaderDepth = 0,\r\n\t\texportRows = [];\r\n\r\n\t\tfunction parseColumnGroup(column, level){\r\n\r\n\t\t\tvar depth = headerDepth - level;\r\n\r\n\t\t\tif(typeof headers[level] === \"undefined\"){\r\n\t\t\t\theaders[level] = [];\r\n\t\t\t}\r\n\r\n\t\t\tcolumn.height = column.subGroups ? 1 : (depth - column.depth) + 1;\r\n\r\n\t\t\theaders[level].push(column);\r\n\r\n\t\t\tif(column.height > 1){\r\n\t\t\t\tfor(let i = 1; i < column.height; i ++){\r\n\r\n\t\t\t\t\tif(typeof headers[level + i] === \"undefined\"){\r\n\t\t\t\t\t\theaders[level + i] = [];\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\theaders[level + i].push(false);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif(column.width > 1){\r\n\t\t\t\tfor(let i = 1; i < column.width; i ++){\r\n\t\t\t\t\theaders[level].push(false);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif(column.subGroups){\r\n\t\t\t\tcolumn.subGroups.forEach(function(subGroup){\r\n\t\t\t\t\tparseColumnGroup(subGroup, level+1);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//calculate maximum header debth\r\n\t\tcolumns.forEach(function(column){\r\n\t\t\tif(column.depth > headerDepth){\r\n\t\t\t\theaderDepth = column.depth;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tcolumns.forEach(function(column){\r\n\t\t\tparseColumnGroup(column,0);\r\n\t\t});\r\n\r\n\t\theaders.forEach((header) => {\r\n\t\t\tvar columns = [];\r\n\r\n\t\t\theader.forEach((col) => {\r\n\t\t\t\tif(col){\r\n\t\t\t\t\tlet title = typeof col.title === \"undefined\" ? \"\" : col.title;\r\n\t\t\t\t\tcolumns.push(new ExportColumn(title, col.column.getComponent(), col.width, col.height, col.depth));\r\n\t\t\t\t}else{\r\n\t\t\t\t\tcolumns.push(null);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\texportRows.push(new ExportRow(\"header\", columns));\r\n\t\t});\r\n\r\n\t\treturn exportRows;\r\n\t}\r\n\r\n\tbodyToExportRows(rows){\r\n\r\n\t\tvar columns = [];\r\n\t\tvar exportRows = [];\r\n\r\n\t\tthis.table.columnManager.columnsByIndex.forEach((column) => {\r\n\t\t\tif (this.columnVisCheck(column)) {\r\n\t\t\t\tcolumns.push(column.getComponent());\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tif(this.config.columnCalcs !== false && this.table.modExists(\"columnCalcs\")){\r\n\t\t\tif(this.table.modules.columnCalcs.topInitialized){\r\n\t\t\t\trows.unshift(this.table.modules.columnCalcs.topRow);\r\n\t\t\t}\r\n\r\n\t\t\tif(this.table.modules.columnCalcs.botInitialized){\r\n\t\t\t\trows.push(this.table.modules.columnCalcs.botRow);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\trows = rows.filter((row) => {\r\n\t\t\tswitch(row.type){\r\n\t\t\t\tcase \"group\":\r\n\t\t\t\treturn this.config.rowGroups !== false;\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"calc\":\r\n\t\t\t\treturn this.config.columnCalcs !== false;\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"row\":\r\n\t\t\t\treturn !(this.table.options.dataTree && this.config.dataTree === false && row.modules.dataTree.parent);\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\r\n\t\t\treturn true;\r\n\t\t});\r\n\r\n\t\trows.forEach((row, i) => {\r\n\t\t\tvar rowData = row.getData(this.colVisProp);\r\n\t\t\tvar exportCols = [];\r\n\t\t\tvar indent = 0;\r\n\r\n\t\t\tswitch(row.type){\r\n\t\t\t\tcase \"group\":\r\n\t\t\t\tindent = row.level;\r\n\t\t\t\texportCols.push(new ExportColumn(row.key, row.getComponent(), columns.length, 1));\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"calc\" :\r\n\t\t\t\tcase \"row\" :\r\n\t\t\t\tcolumns.forEach((col) => {\r\n\t\t\t\t\texportCols.push(new ExportColumn(col._column.getFieldValue(rowData), col, 1, 1));\r\n\t\t\t\t});\r\n\r\n\t\t\t\tif(this.table.options.dataTree && this.config.dataTree !== false){\r\n\t\t\t\t\tindent = row.modules.dataTree.index;\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\r\n\t\t\texportRows.push(new ExportRow(row.type, exportCols, row.getComponent(), indent));\r\n\t\t});\r\n\r\n\t\treturn exportRows;\r\n\t}\r\n\r\n\tgenereateTableElement(list){\r\n\t\tvar table = document.createElement(\"table\"),\r\n\t\theaderEl = document.createElement(\"thead\"),\r\n\t\tbodyEl = document.createElement(\"tbody\"),\r\n\t\tstyles = this.lookupTableStyles(),\r\n\t\trowFormatter = this.table.options[\"rowFormatter\" + (this.colVisProp.charAt(0).toUpperCase() + this.colVisProp.slice(1))],\r\n\t\tsetup = {};\r\n\r\n\t\tsetup.rowFormatter = rowFormatter !== null ? rowFormatter : this.table.options.rowFormatter;\r\n\r\n\t\tif(this.table.options.dataTree &&this.config.dataTree !== false && this.table.modExists(\"columnCalcs\")){\r\n\t\t\tsetup.treeElementField = this.table.modules.dataTree.elementField;\r\n\t\t}\r\n\r\n\t\t//assign group header formatter\r\n\t\tsetup.groupHeader = this.table.options[\"groupHeader\" + (this.colVisProp.charAt(0).toUpperCase() + this.colVisProp.slice(1))];\r\n\r\n\t\tif(setup.groupHeader && !Array.isArray(setup.groupHeader)){\r\n\t\t\tsetup.groupHeader = [setup.groupHeader];\r\n\t\t}\r\n\r\n\t\ttable.classList.add(\"tabulator-print-table\");\r\n\r\n\t\tthis.mapElementStyles(this.table.columnManager.getHeadersElement(), headerEl, [\"border-top\", \"border-left\", \"border-right\", \"border-bottom\", \"background-color\", \"color\", \"font-weight\", \"font-family\", \"font-size\"]);\r\n\r\n\r\n\t\tif(list.length > 1000){\r\n\t\t\tconsole.warn(\"It may take a long time to render an HTML table with more than 1000 rows\");\r\n\t\t}\r\n\r\n\t\tlist.forEach((row, i) => {\r\n\t\t\tswitch(row.type){\r\n\t\t\t\tcase \"header\":\r\n\t\t\t\theaderEl.appendChild(this.genereateHeaderElement(row, setup, styles));\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"group\":\r\n\t\t\t\tbodyEl.appendChild(this.genereateGroupElement(row, setup, styles));\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"calc\":\r\n\t\t\t\tbodyEl.appendChild(this.genereateCalcElement(row, setup, styles));\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"row\":\r\n\t\t\t\tlet rowEl = this.genereateRowElement(row, setup, styles);\r\n\t\t\t\tthis.mapElementStyles(((i % 2) && styles.evenRow) ? styles.evenRow : styles.oddRow, rowEl, [\"border-top\", \"border-left\", \"border-right\", \"border-bottom\", \"color\", \"font-weight\", \"font-family\", \"font-size\", \"background-color\"]);\r\n\t\t\t\tbodyEl.appendChild(rowEl);\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tif(headerEl.innerHTML){\r\n\t\t\ttable.appendChild(headerEl);\r\n\t\t}\r\n\r\n\t\ttable.appendChild(bodyEl);\r\n\r\n\r\n\t\tthis.mapElementStyles(this.table.element, table, [\"border-top\", \"border-left\", \"border-right\", \"border-bottom\"]);\r\n\t\treturn table;\r\n\t}\r\n\r\n\tlookupTableStyles(){\r\n\t\tvar styles = {};\r\n\r\n\t\t//lookup row styles\r\n\t\tif(this.cloneTableStyle && window.getComputedStyle){\r\n\t\t\tstyles.oddRow = this.table.element.querySelector(\".tabulator-row-odd:not(.tabulator-group):not(.tabulator-calcs)\");\r\n\t\t\tstyles.evenRow = this.table.element.querySelector(\".tabulator-row-even:not(.tabulator-group):not(.tabulator-calcs)\");\r\n\t\t\tstyles.calcRow = this.table.element.querySelector(\".tabulator-row.tabulator-calcs\");\r\n\t\t\tstyles.firstRow = this.table.element.querySelector(\".tabulator-row:not(.tabulator-group):not(.tabulator-calcs)\");\r\n\t\t\tstyles.firstGroup = this.table.element.getElementsByClassName(\"tabulator-group\")[0];\r\n\r\n\t\t\tif(styles.firstRow){\r\n\t\t\t\tstyles.styleCells = styles.firstRow.getElementsByClassName(\"tabulator-cell\");\r\n\t\t\t\tstyles.firstCell = styles.styleCells[0];\r\n\t\t\t\tstyles.lastCell = styles.styleCells[styles.styleCells.length - 1];\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn styles;\r\n\t}\r\n\r\n\tgenereateHeaderElement(row, setup, styles){\r\n\t\tvar rowEl = document.createElement(\"tr\");\r\n\r\n\t\trow.columns.forEach((column) => {\r\n\t\t\tif(column){\r\n\t\t\t\tvar cellEl = document.createElement(\"th\");\r\n\t\t\t\tvar classNames = column.component._column.definition.cssClass ? column.component._column.definition.cssClass.split(\" \") : [];\r\n\r\n\t\t\t\tcellEl.colSpan = column.width;\r\n\t\t\t\tcellEl.rowSpan = column.height;\r\n\r\n\t\t\t\tcellEl.innerHTML = column.value;\r\n\r\n\t\t\t\tif(this.cloneTableStyle){\r\n\t\t\t\t\tcellEl.style.boxSizing = \"border-box\";\r\n\t\t\t\t}\r\n\r\n\t\t\t\tclassNames.forEach(function(className) {\r\n\t\t\t\t\tcellEl.classList.add(className);\r\n\t\t\t\t});\r\n\r\n\t\t\t\tthis.mapElementStyles(column.component.getElement(), cellEl, [\"text-align\", \"border-top\", \"border-left\", \"border-right\", \"border-bottom\", \"background-color\", \"color\", \"font-weight\", \"font-family\", \"font-size\"]);\r\n\t\t\t\tthis.mapElementStyles(column.component._column.contentElement, cellEl, [\"padding-top\", \"padding-left\", \"padding-right\", \"padding-bottom\"]);\r\n\r\n\t\t\t\tif(column.component._column.visible){\r\n\t\t\t\t\tthis.mapElementStyles(column.component.getElement(), cellEl, [\"width\"]);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tif(column.component._column.definition.width){\r\n\t\t\t\t\t\tcellEl.style.width = column.component._column.definition.width + \"px\";\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(column.component._column.parent){\r\n\t\t\t\t\tthis.mapElementStyles(column.component._column.parent.groupElement, cellEl, [\"border-top\"]);\r\n\t\t\t\t}\r\n\r\n\t\t\t\trowEl.appendChild(cellEl);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn rowEl;\r\n\t}\r\n\r\n\tgenereateGroupElement(row, setup, styles){\r\n\r\n\t\tvar rowEl = document.createElement(\"tr\"),\r\n\t\tcellEl = document.createElement(\"td\"),\r\n\t\tgroup = row.columns[0];\r\n\r\n\t\trowEl.classList.add(\"tabulator-print-table-row\");\r\n\r\n\t\tif(setup.groupHeader && setup.groupHeader[row.indent]){\r\n\t\t\tgroup.value = setup.groupHeader[row.indent](group.value, row.component._group.getRowCount(), row.component._group.getData(), row.component);\r\n\t\t}else{\r\n\t\t\tif(setup.groupHeader === false){\r\n\t\t\t\tgroup.value = group.value;\r\n\t\t\t}else{\r\n\t\t\t\tgroup.value = row.component._group.generator(group.value, row.component._group.getRowCount(), row.component._group.getData(), row.component);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tcellEl.colSpan = group.width;\r\n\t\tcellEl.innerHTML = group.value;\r\n\r\n\t\trowEl.classList.add(\"tabulator-print-table-group\");\r\n\t\trowEl.classList.add(\"tabulator-group-level-\" + row.indent);\r\n\r\n\t\tif(group.component.isVisible()){\r\n\t\t\trowEl.classList.add(\"tabulator-group-visible\");\r\n\t\t}\r\n\r\n\t\tthis.mapElementStyles(styles.firstGroup, rowEl, [\"border-top\", \"border-left\", \"border-right\", \"border-bottom\", \"color\", \"font-weight\", \"font-family\", \"font-size\", \"background-color\"]);\r\n\t\tthis.mapElementStyles(styles.firstGroup, cellEl, [\"padding-top\", \"padding-left\", \"padding-right\", \"padding-bottom\"]);\r\n\r\n\t\trowEl.appendChild(cellEl);\r\n\r\n\t\treturn rowEl;\r\n\t}\r\n\r\n\tgenereateCalcElement(row, setup, styles){\r\n\t\tvar rowEl = this.genereateRowElement(row, setup, styles);\r\n\r\n\t\trowEl.classList.add(\"tabulator-print-table-calcs\");\r\n\t\tthis.mapElementStyles(styles.calcRow, rowEl, [\"border-top\", \"border-left\", \"border-right\", \"border-bottom\", \"color\", \"font-weight\", \"font-family\", \"font-size\", \"background-color\"]);\r\n\r\n\t\treturn rowEl;\r\n\t}\r\n\r\n\tgenereateRowElement(row, setup, styles){\r\n\t\tvar rowEl = document.createElement(\"tr\");\r\n\r\n\t\trowEl.classList.add(\"tabulator-print-table-row\");\r\n\r\n\t\trow.columns.forEach((col) => {\r\n\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\r\n\t\t\t\tvar cellWrapper = {\r\n\t\t\t\t\tmodules:{},\r\n\t\t\t\t\tgetValue:function(){\r\n\t\t\t\t\t\treturn value;\r\n\t\t\t\t\t},\r\n\t\t\t\t\tgetField:function(){\r\n\t\t\t\t\t\treturn column.definition.field;\r\n\t\t\t\t\t},\r\n\t\t\t\t\tgetElement:function(){\r\n\t\t\t\t\t\treturn cellEl;\r\n\t\t\t\t\t},\r\n\t\t\t\t\tgetColumn:function(){\r\n\t\t\t\t\t\treturn column.getComponent();\r\n\t\t\t\t\t},\r\n\t\t\t\t\tgetData:function(){\r\n\t\t\t\t\t\treturn row.component.getData();\r\n\t\t\t\t\t},\r\n\t\t\t\t\tgetRow:function(){\r\n\t\t\t\t\t\treturn row.component;\r\n\t\t\t\t\t},\r\n\t\t\t\t\tgetComponent:function(){\r\n\t\t\t\t\t\treturn cellWrapper;\r\n\t\t\t\t\t},\r\n\t\t\t\t\tcolumn:column,\r\n\t\t\t\t};\r\n\r\n\t\t\t\tvar classNames = column.definition.cssClass ? column.definition.cssClass.split(\" \") : [];\r\n\r\n\t\t\t\tclassNames.forEach(function(className) {\r\n\t\t\t\t\tcellEl.classList.add(className);\r\n\t\t\t\t});\r\n\r\n\t\t\t\tif(this.table.modExists(\"format\") && this.config.formatCells !== false){\r\n\t\t\t\t\tvalue = this.table.modules.format.formatExportValue(cellWrapper, this.colVisProp);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tswitch(typeof value){\r\n\t\t\t\t\t\tcase \"object\":\r\n\t\t\t\t\t\tvalue = JSON.stringify(value);\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\tcase \"undefined\":\r\n\t\t\t\t\t\tcase \"null\":\r\n\t\t\t\t\t\tvalue = \"\";\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\tdefault:\r\n\t\t\t\t\t\tvalue = value;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(value instanceof Node){\r\n\t\t\t\t\tcellEl.appendChild(value);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tcellEl.innerHTML = value;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(styles.styleCells[index] || styles.firstCell){\r\n\t\t\t\t\tthis.mapElementStyles(styles.styleCells[index] || styles.firstCell, cellEl, [\"padding-top\", \"padding-left\", \"padding-right\", \"padding-bottom\", \"border-top\", \"border-left\", \"border-right\", \"border-bottom\", \"color\", \"font-weight\", \"font-family\", \"font-size\", \"text-align\"]);\r\n\r\n\t\t\t\t\tif(column.definition.align){\r\n\t\t\t\t\t\tcellEl.style.textAlign = column.definition.align;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(this.table.options.dataTree && this.config.dataTree !== false){\r\n\t\t\t\t\tif((setup.treeElementField && setup.treeElementField == column.field) || (!setup.treeElementField && i == 0)){\r\n\t\t\t\t\t\tif(row.component._row.modules.dataTree.controlEl){\r\n\t\t\t\t\t\t\tcellEl.insertBefore(row.component._row.modules.dataTree.controlEl.cloneNode(true), cellEl.firstChild);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif(row.component._row.modules.dataTree.branchEl){\r\n\t\t\t\t\t\t\tcellEl.insertBefore(row.component._row.modules.dataTree.branchEl.cloneNode(true), cellEl.firstChild);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\trowEl.appendChild(cellEl);\r\n\r\n\t\t\t\tif(cellWrapper.modules.format && cellWrapper.modules.format.renderedCallback){\r\n\t\t\t\t\tcellWrapper.modules.format.renderedCallback();\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(setup.rowFormatter && this.config.formatCells !== false){\r\n\t\t\t\t\tsetup.rowFormatter(row.component);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn rowEl;\r\n\t}\r\n\r\n\tgenereateHTMLTable(list){\r\n\t\tvar holder = document.createElement(\"div\");\r\n\r\n\t\tholder.appendChild(this.genereateTableElement(list));\r\n\r\n\t\treturn holder.innerHTML;\r\n\t}\r\n\r\n\tgetHtml(visible, style, config, colVisProp){\r\n\t\tvar list = this.generateExportList(config || this.table.options.htmlOutputConfig, style, visible, colVisProp || \"htmlOutput\");\r\n\r\n\t\treturn this.genereateHTMLTable(list);\r\n\t}\r\n\r\n\tmapElementStyles(from, to, props){\r\n\t\tif(this.cloneTableStyle && from && to){\r\n\r\n\t\t\tvar lookup = {\r\n\t\t\t\t\"background-color\" : \"backgroundColor\",\r\n\t\t\t\t\"color\" : \"fontColor\",\r\n\t\t\t\t\"width\" : \"width\",\r\n\t\t\t\t\"font-weight\" : \"fontWeight\",\r\n\t\t\t\t\"font-family\" : \"fontFamily\",\r\n\t\t\t\t\"font-size\" : \"fontSize\",\r\n\t\t\t\t\"text-align\" : \"textAlign\",\r\n\t\t\t\t\"border-top\" : \"borderTop\",\r\n\t\t\t\t\"border-left\" : \"borderLeft\",\r\n\t\t\t\t\"border-right\" : \"borderRight\",\r\n\t\t\t\t\"border-bottom\" : \"borderBottom\",\r\n\t\t\t\t\"padding-top\" : \"paddingTop\",\r\n\t\t\t\t\"padding-left\" : \"paddingLeft\",\r\n\t\t\t\t\"padding-right\" : \"paddingRight\",\r\n\t\t\t\t\"padding-bottom\" : \"paddingBottom\",\r\n\t\t\t};\r\n\r\n\t\t\tif(window.getComputedStyle){\r\n\t\t\t\tvar fromStyle = window.getComputedStyle(from);\r\n\r\n\t\t\t\tprops.forEach(function(prop){\r\n\t\t\t\t\tto.style[lookup[prop]] = fromStyle.getPropertyValue(prop);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n\r\nExport.moduleName = \"export\";\r\n\r\nexport default Export;\r\n","export default {\r\n\r\n\t//equal to\r\n\t\"=\":function(filterVal, rowVal, rowData, filterParams){\r\n\t\treturn rowVal == filterVal ? true : false;\r\n\t},\r\n\r\n\t//less than\r\n\t\"<\":function(filterVal, rowVal, rowData, filterParams){\r\n\t\treturn rowVal < filterVal ? true : false;\r\n\t},\r\n\r\n\t//less than or equal to\r\n\t\"<=\":function(filterVal, rowVal, rowData, filterParams){\r\n\t\treturn rowVal <= filterVal ? true : false;\r\n\t},\r\n\r\n\t//greater than\r\n\t\">\":function(filterVal, rowVal, rowData, filterParams){\r\n\t\treturn rowVal > filterVal ? true : false;\r\n\t},\r\n\r\n\t//greater than or equal to\r\n\t\">=\":function(filterVal, rowVal, rowData, filterParams){\r\n\t\treturn rowVal >= filterVal ? true : false;\r\n\t},\r\n\r\n\t//not equal to\r\n\t\"!=\":function(filterVal, rowVal, rowData, filterParams){\r\n\t\treturn rowVal != filterVal ? true : false;\r\n\t},\r\n\r\n\t\"regex\":function(filterVal, rowVal, rowData, filterParams){\r\n\r\n\t\tif(typeof filterVal == \"string\"){\r\n\t\t\tfilterVal = new RegExp(filterVal);\r\n\t\t}\r\n\r\n\t\treturn filterVal.test(rowVal);\r\n\t},\r\n\r\n\t//contains the string\r\n\t\"like\":function(filterVal, rowVal, rowData, filterParams){\r\n\t\tif(filterVal === null || typeof filterVal === \"undefined\"){\r\n\t\t\treturn rowVal === filterVal ? true : false;\r\n\t\t}else{\r\n\t\t\tif(typeof rowVal !== 'undefined' && rowVal !== null){\r\n\t\t\t\treturn String(rowVal).toLowerCase().indexOf(filterVal.toLowerCase()) > -1;\r\n\t\t\t}\r\n\t\t\telse{\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\t//contains the keywords\r\n\t\"keywords\":function(filterVal, rowVal, rowData, filterParams){\r\n\t\tvar keywords = filterVal.toLowerCase().split(typeof filterParams.separator === \"undefined\" ? \" \" : filterParams.separator),\r\n\t\tvalue = String(rowVal === null || typeof rowVal === \"undefined\" ? \"\" : rowVal).toLowerCase(),\r\n\t\tmatches = [];\r\n\r\n\t\tkeywords.forEach((keyword) =>{\r\n\t\t\tif(value.includes(keyword)){\r\n\t\t\t\tmatches.push(true);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn filterParams.matchAll ? matches.length === keywords.length : !!matches.length;\r\n\t},\r\n\r\n\t//starts with the string\r\n\t\"starts\":function(filterVal, rowVal, rowData, filterParams){\r\n\t\tif(filterVal === null || typeof filterVal === \"undefined\"){\r\n\t\t\treturn rowVal === filterVal ? true : false;\r\n\t\t}else{\r\n\t\t\tif(typeof rowVal !== 'undefined' && rowVal !== null){\r\n\t\t\t\treturn String(rowVal).toLowerCase().startsWith(filterVal.toLowerCase());\r\n\t\t\t}\r\n\t\t\telse{\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\t//ends with the string\r\n\t\"ends\":function(filterVal, rowVal, rowData, filterParams){\r\n\t\tif(filterVal === null || typeof filterVal === \"undefined\"){\r\n\t\t\treturn rowVal === filterVal ? true : false;\r\n\t\t}else{\r\n\t\t\tif(typeof rowVal !== 'undefined' && rowVal !== null){\r\n\t\t\t\treturn String(rowVal).toLowerCase().endsWith(filterVal.toLowerCase());\r\n\t\t\t}\r\n\t\t\telse{\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\t//in array\r\n\t\"in\":function(filterVal, rowVal, rowData, filterParams){\r\n\t\tif(Array.isArray(filterVal)){\r\n\t\t\treturn filterVal.length ? filterVal.indexOf(rowVal) > -1 : true;\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Filter Error - filter value is not an array:\", filterVal);\r\n\t\t\treturn false;\r\n\t\t}\r\n\t},\r\n};","import Module from '../../core/Module.js';\r\n\r\nimport defaultFilters from './defaults/filters.js';\r\n\r\nclass Filter extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.filterList = []; //hold filter list\r\n\t\tthis.headerFilters = {}; //hold column filters\r\n\t\tthis.headerFilterColumns = []; //hold columns that use header filters\r\n\r\n\t\tthis.prevHeaderFilterChangeCheck = \"\";\r\n\t\tthis.prevHeaderFilterChangeCheck = \"{}\";\r\n\r\n\t\tthis.changed = false; //has filtering changed since last render\r\n\t\tthis.tableInitialized = false;\r\n\r\n\t\tthis.registerTableOption(\"filterMode\", \"local\"); //local or remote filtering\r\n\r\n\t\tthis.registerTableOption(\"initialFilter\", false); //initial filtering criteria\r\n\t\tthis.registerTableOption(\"initialHeaderFilter\", false); //initial header filtering criteria\r\n\t\tthis.registerTableOption(\"headerFilterLiveFilterDelay\", 300); //delay before updating column after user types in header filter\r\n\r\n\t\tthis.registerColumnOption(\"headerFilter\");\r\n\t\tthis.registerColumnOption(\"headerFilterPlaceholder\");\r\n\t\tthis.registerColumnOption(\"headerFilterParams\");\r\n\t\tthis.registerColumnOption(\"headerFilterEmptyCheck\");\r\n\t\tthis.registerColumnOption(\"headerFilterFunc\");\r\n\t\tthis.registerColumnOption(\"headerFilterFuncParams\");\r\n\t\tthis.registerColumnOption(\"headerFilterLiveFilter\");\r\n\r\n\t\tthis.registerTableFunction(\"searchRows\", this.searchRows.bind(this));\r\n\t\tthis.registerTableFunction(\"searchData\", this.searchData.bind(this));\r\n\r\n\t\tthis.registerTableFunction(\"setFilter\", this.userSetFilter.bind(this));\r\n\t\tthis.registerTableFunction(\"refreshFilter\", this.userRefreshFilter.bind(this));\r\n\t\tthis.registerTableFunction(\"addFilter\", this.userAddFilter.bind(this));\r\n\t\tthis.registerTableFunction(\"getFilters\", this.getFilters.bind(this));\r\n\t\tthis.registerTableFunction(\"setHeaderFilterFocus\", this.userSetHeaderFilterFocus.bind(this));\r\n\t\tthis.registerTableFunction(\"getHeaderFilterValue\", this.userGetHeaderFilterValue.bind(this));\r\n\t\tthis.registerTableFunction(\"setHeaderFilterValue\", this.userSetHeaderFilterValue.bind(this));\r\n\t\tthis.registerTableFunction(\"getHeaderFilters\", this.getHeaderFilters.bind(this));\r\n\t\tthis.registerTableFunction(\"removeFilter\", this.userRemoveFilter.bind(this));\r\n\t\tthis.registerTableFunction(\"clearFilter\", this.userClearFilter.bind(this));\r\n\t\tthis.registerTableFunction(\"clearHeaderFilter\", this.userClearHeaderFilter.bind(this));\r\n\r\n\t\tthis.registerComponentFunction(\"column\", \"headerFilterFocus\", this.setHeaderFilterFocus.bind(this));\r\n\t\tthis.registerComponentFunction(\"column\", \"reloadHeaderFilter\", this.reloadHeaderFilter.bind(this));\r\n\t\tthis.registerComponentFunction(\"column\", \"getHeaderFilterValue\", this.getHeaderFilterValue.bind(this));\r\n\t\tthis.registerComponentFunction(\"column\", \"setHeaderFilterValue\", this.setHeaderFilterValue.bind(this));\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tthis.subscribe(\"column-init\", this.initializeColumnHeaderFilter.bind(this));\r\n\t\tthis.subscribe(\"column-width-fit-before\", this.hideHeaderFilterElements.bind(this));\r\n\t\tthis.subscribe(\"column-width-fit-after\", this.showHeaderFilterElements.bind(this));\r\n\t\tthis.subscribe(\"table-built\", this.tableBuilt.bind(this));\r\n\r\n\t\tif(this.table.options.filterMode === \"remote\"){\r\n\t\t\tthis.subscribe(\"data-params\", this.remoteFilterParams.bind(this));\r\n\t\t}\r\n\r\n\t\tthis.registerDataHandler(this.filter.bind(this), 10);\r\n\t}\r\n\r\n\ttableBuilt(){\r\n\t\tif(this.table.options.initialFilter){\r\n\t\t\tthis.setFilter(this.table.options.initialFilter);\r\n\t\t}\r\n\r\n\t\tif(this.table.options.initialHeaderFilter){\r\n\t\t\tthis.table.options.initialHeaderFilter.forEach((item) => {\r\n\r\n\t\t\t\tvar column = this.table.columnManager.findColumn(item.field);\r\n\r\n\t\t\t\tif(column){\r\n\t\t\t\t\tthis.setHeaderFilterValue(column, item.value);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.warn(\"Column Filter Error - No matching column found:\", item.field);\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tthis.tableInitialized = true;\r\n\t}\r\n\r\n\tremoteFilterParams(data, config, silent, params){\r\n\t\tparams.filter = this.getFilters(true, true);\r\n\t\treturn params;\r\n\t}\r\n\r\n\t///////////////////////////////////\r\n\t///////// Table Functions /////////\r\n\t///////////////////////////////////\r\n\r\n\t//set standard filters\r\n\tuserSetFilter(field, type, value, params){\r\n\t\tthis.setFilter(field, type, value, params);\r\n\t\tthis.refreshFilter();\r\n\t}\r\n\r\n\t//set standard filters\r\n\tuserRefreshFilter(){\r\n\t\tthis.refreshFilter();\r\n\t}\r\n\r\n\t//add filter to array\r\n\tuserAddFilter(field, type, value, params){\r\n\t\tthis.addFilter(field, type, value, params);\r\n\t\tthis.refreshFilter();\r\n\t}\r\n\r\n\tuserSetHeaderFilterFocus(field){\r\n\t\tvar column = this.table.columnManager.findColumn(field);\r\n\r\n\t\tif(column){\r\n\t\t\tthis.setHeaderFilterFocus(column);\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Column Filter Focus Error - No matching column found:\", field);\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\tuserGetHeaderFilterValue(field) {\r\n\t\tvar column = this.table.columnManager.findColumn(field);\r\n\r\n\t\tif(column){\r\n\t\t\treturn this.getHeaderFilterValue(column);\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Column Filter Error - No matching column found:\", field);\r\n\t\t}\r\n\t}\r\n\r\n\tuserSetHeaderFilterValue(field, value){\r\n\t\tvar column = this.table.columnManager.findColumn(field);\r\n\r\n\t\tif(column){\r\n\t\t\tthis.setHeaderFilterValue(column, value);\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Column Filter Error - No matching column found:\", field);\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\t//remove filter from array\r\n\tuserRemoveFilter(field, type, value){\r\n\t\tthis.removeFilter(field, type, value);\r\n\t\tthis.refreshFilter();\r\n\t}\r\n\r\n\t//clear filters\r\n\tuserClearFilter(all){\r\n\t\tthis.clearFilter(all);\r\n\t\tthis.refreshFilter();\r\n\t}\r\n\r\n\t//clear header filters\r\n\tuserClearHeaderFilter(){\r\n\t\tthis.clearHeaderFilter();\r\n\t\tthis.refreshFilter();\r\n\t}\r\n\r\n\r\n\t//search for specific row components\r\n\tsearchRows(field, type, value){\r\n\t\treturn this.search(\"rows\", field, type, value);\r\n\t}\r\n\r\n\t//search for specific data\r\n\tsearchData(field, type, value){\r\n\t\treturn this.search(\"data\", field, type, value);\r\n\t}\r\n\r\n\t///////////////////////////////////\r\n\t///////// Internal Logic //////////\r\n\t///////////////////////////////////\r\n\r\n\tinitializeColumnHeaderFilter(column){\r\n\t\tvar def = column.definition;\r\n\r\n\t\tif(def.headerFilter){\r\n\r\n\t\t\tif(typeof def.headerFilterPlaceholder !== \"undefined\" && def.field){\r\n\t\t\t\tthis.module(\"localize\").setHeaderFilterColumnPlaceholder(def.field, def.headerFilterPlaceholder);\r\n\t\t\t}\r\n\r\n\t\t\tthis.initializeColumn(column);\r\n\t\t}\r\n\t}\r\n\r\n\t//initialize column header filter\r\n\tinitializeColumn(column, value){\r\n\t\tvar self = this,\r\n\t\tfield = column.getField(),\r\n\t\tparams;\r\n\r\n\t\t//handle successfull value change\r\n\t\tfunction success(value){\r\n\t\t\tvar filterType = (column.modules.filter.tagType == \"input\" && column.modules.filter.attrType == \"text\") || column.modules.filter.tagType == \"textarea\" ? \"partial\" : \"match\",\r\n\t\t\ttype = \"\",\r\n\t\t\tfilterChangeCheck = \"\",\r\n\t\t\tfilterFunc;\r\n\r\n\t\t\tif(typeof column.modules.filter.prevSuccess === \"undefined\" || column.modules.filter.prevSuccess !== value){\r\n\r\n\t\t\t\tcolumn.modules.filter.prevSuccess = value;\r\n\r\n\t\t\t\tif(!column.modules.filter.emptyFunc(value)){\r\n\t\t\t\t\tcolumn.modules.filter.value = value;\r\n\r\n\t\t\t\t\tswitch(typeof column.definition.headerFilterFunc){\r\n\t\t\t\t\t\tcase \"string\":\r\n\t\t\t\t\t\tif(Filter.filters[column.definition.headerFilterFunc]){\r\n\t\t\t\t\t\t\ttype = column.definition.headerFilterFunc;\r\n\t\t\t\t\t\t\tfilterFunc = function(data){\r\n\t\t\t\t\t\t\t\tvar params = column.definition.headerFilterFuncParams || {};\r\n\t\t\t\t\t\t\t\tvar fieldVal = column.getFieldValue(data);\r\n\r\n\t\t\t\t\t\t\t\tparams = typeof params === \"function\" ? params(value, fieldVal, data) : params;\r\n\r\n\t\t\t\t\t\t\t\treturn Filter.filters[column.definition.headerFilterFunc](value, fieldVal, data, params);\r\n\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\tconsole.warn(\"Header Filter Error - Matching filter function not found: \", column.definition.headerFilterFunc);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\tcase \"function\":\r\n\t\t\t\t\t\tfilterFunc = function(data){\r\n\t\t\t\t\t\t\tvar params = column.definition.headerFilterFuncParams || {};\r\n\t\t\t\t\t\t\tvar fieldVal = column.getFieldValue(data);\r\n\r\n\t\t\t\t\t\t\tparams = typeof params === \"function\" ? params(value, fieldVal, data) : params;\r\n\r\n\t\t\t\t\t\t\treturn column.definition.headerFilterFunc(value, fieldVal, data, params);\r\n\t\t\t\t\t\t};\r\n\r\n\t\t\t\t\t\ttype = filterFunc;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif(!filterFunc){\r\n\t\t\t\t\t\tswitch(filterType){\r\n\t\t\t\t\t\t\tcase \"partial\":\r\n\t\t\t\t\t\t\tfilterFunc = function(data){\r\n\t\t\t\t\t\t\t\tvar colVal = column.getFieldValue(data);\r\n\r\n\t\t\t\t\t\t\t\tif(typeof colVal !== 'undefined' && colVal !== null){\r\n\t\t\t\t\t\t\t\t\treturn String(colVal).toLowerCase().indexOf(String(value).toLowerCase()) > -1;\r\n\t\t\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t\ttype = \"like\";\r\n\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\t\tdefault:\r\n\t\t\t\t\t\t\tfilterFunc = function(data){\r\n\t\t\t\t\t\t\t\treturn column.getFieldValue(data) == value;\r\n\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t\ttype = \"=\";\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tself.headerFilters[field] = {value:value, func:filterFunc, type:type, params:params || {}};\r\n\r\n\t\t\t\t}else{\r\n\t\t\t\t\tdelete self.headerFilters[field];\r\n\t\t\t\t}\r\n\r\n\t\t\t\tfilterChangeCheck = JSON.stringify(self.headerFilters);\r\n\r\n\t\t\t\tif(self.prevHeaderFilterChangeCheck !== filterChangeCheck){\r\n\t\t\t\t\tself.prevHeaderFilterChangeCheck = filterChangeCheck;\r\n\r\n\t\t\t\t\tself.trackChanges();\r\n\t\t\t\t\tself.refreshFilter();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\tcolumn.modules.filter = {\r\n\t\t\tsuccess:success,\r\n\t\t\tattrType:false,\r\n\t\t\ttagType:false,\r\n\t\t\temptyFunc:false,\r\n\t\t};\r\n\r\n\t\tthis.generateHeaderFilterElement(column);\r\n\t}\r\n\r\n\tgenerateHeaderFilterElement(column, initialValue, reinitialize){\r\n\t\tvar self = this,\r\n\t\tsuccess = column.modules.filter.success,\r\n\t\tfield = column.getField(),\r\n\t\tfilterElement, editor, editorElement, cellWrapper, typingTimer, searchTrigger, params;\r\n\r\n\t\t//handle aborted edit\r\n\t\tfunction cancel(){}\r\n\r\n\t\tif(column.modules.filter.headerElement && column.modules.filter.headerElement.parentNode){\r\n\t\t\tcolumn.contentElement.removeChild(column.modules.filter.headerElement.parentNode);\r\n\t\t}\r\n\r\n\t\tif(field){\r\n\r\n\t\t\t//set empty value function\r\n\t\t\tcolumn.modules.filter.emptyFunc = column.definition.headerFilterEmptyCheck || function(value){\r\n\t\t\t\treturn !value && value !== \"0\" && value !== 0;\r\n\t\t\t};\r\n\r\n\t\t\tfilterElement = document.createElement(\"div\");\r\n\t\t\tfilterElement.classList.add(\"tabulator-header-filter\");\r\n\r\n\t\t\t//set column editor\r\n\t\t\tswitch(typeof column.definition.headerFilter){\r\n\t\t\t\tcase \"string\":\r\n\t\t\t\tif(self.table.modules.edit.editors[column.definition.headerFilter]){\r\n\t\t\t\t\teditor = self.table.modules.edit.editors[column.definition.headerFilter];\r\n\r\n\t\t\t\t\tif((column.definition.headerFilter === \"tick\" || column.definition.headerFilter === \"tickCross\") && !column.definition.headerFilterEmptyCheck){\r\n\t\t\t\t\t\tcolumn.modules.filter.emptyFunc = function(value){\r\n\t\t\t\t\t\t\treturn value !== true && value !== false;\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t}\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.warn(\"Filter Error - Cannot build header filter, No such editor found: \", column.definition.editor);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"function\":\r\n\t\t\t\teditor = column.definition.headerFilter;\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"boolean\":\r\n\t\t\t\tif(column.modules.edit && column.modules.edit.editor){\r\n\t\t\t\t\teditor = column.modules.edit.editor;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tif(column.definition.formatter && self.table.modules.edit.editors[column.definition.formatter]){\r\n\t\t\t\t\t\teditor = self.table.modules.edit.editors[column.definition.formatter];\r\n\r\n\t\t\t\t\t\tif((column.definition.formatter === \"tick\" || column.definition.formatter === \"tickCross\") && !column.definition.headerFilterEmptyCheck){\r\n\t\t\t\t\t\t\tcolumn.modules.filter.emptyFunc = function(value){\r\n\t\t\t\t\t\t\t\treturn value !== true && value !== false;\r\n\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\teditor = self.table.modules.edit.editors[\"input\"];\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\r\n\t\t\tif(editor){\r\n\r\n\t\t\t\tcellWrapper = {\r\n\t\t\t\t\tgetValue:function(){\r\n\t\t\t\t\t\treturn typeof initialValue !== \"undefined\" ? initialValue : \"\";\r\n\t\t\t\t\t},\r\n\t\t\t\t\tgetField:function(){\r\n\t\t\t\t\t\treturn column.definition.field;\r\n\t\t\t\t\t},\r\n\t\t\t\t\tgetElement:function(){\r\n\t\t\t\t\t\treturn filterElement;\r\n\t\t\t\t\t},\r\n\t\t\t\t\tgetColumn:function(){\r\n\t\t\t\t\t\treturn column.getComponent();\r\n\t\t\t\t\t},\r\n\t\t\t\t\tgetRow:function(){\r\n\t\t\t\t\t\treturn {\r\n\t\t\t\t\t\t\tnormalizeHeight:function(){\r\n\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t}\r\n\t\t\t\t};\r\n\r\n\t\t\t\tparams = column.definition.headerFilterParams || {};\r\n\r\n\t\t\t\tparams = typeof params === \"function\" ? params.call(self.table, cellWrapper) : params;\r\n\r\n\t\t\t\teditorElement = editor.call(this.table.modules.edit, cellWrapper, function(){}, success, cancel, params);\r\n\r\n\t\t\t\tif(!editorElement){\r\n\t\t\t\t\tconsole.warn(\"Filter Error - Cannot add filter to \" + field + \" column, editor returned a value of false\");\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(!(editorElement instanceof Node)){\r\n\t\t\t\t\tconsole.warn(\"Filter Error - Cannot add filter to \" + field + \" column, editor should return an instance of Node, the editor returned:\", editorElement);\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//set Placeholder Text\r\n\t\t\t\tif(field){\r\n\t\t\t\t\tself.langBind(\"headerFilters|columns|\" + column.definition.field, function(value){\r\n\t\t\t\t\t\teditorElement.setAttribute(\"placeholder\", typeof value !== \"undefined\" && value ? value : self.langText(\"headerFilters|default\"));\r\n\t\t\t\t\t});\r\n\t\t\t\t}else{\r\n\t\t\t\t\tself.langBind(\"headerFilters|default\", function(value){\r\n\t\t\t\t\t\teditorElement.setAttribute(\"placeholder\", value);\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//focus on element on click\r\n\t\t\t\teditorElement.addEventListener(\"click\", function(e){\r\n\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\teditorElement.focus();\r\n\t\t\t\t});\r\n\r\n\t\t\t\teditorElement.addEventListener(\"focus\", (e) => {\r\n\t\t\t\t\tvar left = this.table.columnManager.element.scrollLeft;\r\n\r\n\t\t\t\t\tvar headerPos = this.table.rowManager.element.scrollLeft + parseInt(this.table.columnManager.element.style.marginLeft);\r\n\r\n\t\t\t\t\tif(left !== headerPos){\r\n\t\t\t\t\t\tthis.table.rowManager.scrollHorizontal(left);\r\n\t\t\t\t\t\tthis.table.columnManager.scrollHorizontal(left);\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\t//live update filters as user types\r\n\t\t\t\ttypingTimer = false;\r\n\r\n\t\t\t\tsearchTrigger = function(e){\r\n\t\t\t\t\tif(typingTimer){\r\n\t\t\t\t\t\tclearTimeout(typingTimer);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\ttypingTimer = setTimeout(function(){\r\n\t\t\t\t\t\tsuccess(editorElement.value);\r\n\t\t\t\t\t},self.table.options.headerFilterLiveFilterDelay);\r\n\t\t\t\t};\r\n\r\n\t\t\t\tcolumn.modules.filter.headerElement = editorElement;\r\n\t\t\t\tcolumn.modules.filter.attrType = editorElement.hasAttribute(\"type\") ? editorElement.getAttribute(\"type\").toLowerCase() : \"\" ;\r\n\t\t\t\tcolumn.modules.filter.tagType = editorElement.tagName.toLowerCase();\r\n\r\n\t\t\t\tif(column.definition.headerFilterLiveFilter !== false){\r\n\r\n\t\t\t\t\tif (\r\n\t\t\t\t\t\t!(\r\n\t\t\t\t\t\t\tcolumn.definition.headerFilter === 'autocomplete' ||\r\n\t\t\t\t\t\t\tcolumn.definition.headerFilter === 'tickCross' ||\r\n\t\t\t\t\t\t\t((column.definition.editor === 'autocomplete' ||\r\n\t\t\t\t\t\t\t\tcolumn.definition.editor === 'tickCross') &&\r\n\t\t\t\t\t\t\tcolumn.definition.headerFilter === true)\r\n\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t) {\r\n\t\t\t\t\t\teditorElement.addEventListener(\"keyup\", searchTrigger);\r\n\t\t\t\t\teditorElement.addEventListener(\"search\", searchTrigger);\r\n\r\n\r\n\t\t\t\t\t//update number filtered columns on change\r\n\t\t\t\t\tif(column.modules.filter.attrType == \"number\"){\r\n\t\t\t\t\t\teditorElement.addEventListener(\"change\", function(e){\r\n\t\t\t\t\t\t\tsuccess(editorElement.value);\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t//change text inputs to search inputs to allow for clearing of field\r\n\t\t\t\t\tif(column.modules.filter.attrType == \"text\" && this.table.browser !== \"ie\"){\r\n\t\t\t\t\t\teditorElement.setAttribute(\"type\", \"search\");\r\n\t\t\t\t\t\t// editorElement.off(\"change blur\"); //prevent blur from triggering filter and preventing selection click\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\t\t//prevent input and select elements from propegating click to column sorters etc\r\n\t\t\t\t\tif(column.modules.filter.tagType == \"input\" || column.modules.filter.tagType == \"select\" || column.modules.filter.tagType == \"textarea\"){\r\n\t\t\t\t\t\teditorElement.addEventListener(\"mousedown\",function(e){\r\n\t\t\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tfilterElement.appendChild(editorElement);\r\n\r\n\t\t\t\tcolumn.contentElement.appendChild(filterElement);\r\n\r\n\t\t\t\tif(!reinitialize){\r\n\t\t\t\t\tself.headerFilterColumns.push(column);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Filter Error - Cannot add header filter, column has no field set:\", column.definition.title);\r\n\t\t}\r\n\t}\r\n\r\n\t//hide all header filter elements (used to ensure correct column widths in \"fitData\" layout mode)\r\n\thideHeaderFilterElements(){\r\n\t\tthis.headerFilterColumns.forEach(function(column){\r\n\t\t\tif(column.modules.filter && column.modules.filter.headerElement){\r\n\t\t\t\tcolumn.modules.filter.headerElement.style.display = 'none';\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t//show all header filter elements (used to ensure correct column widths in \"fitData\" layout mode)\r\n\tshowHeaderFilterElements(){\r\n\t\tthis.headerFilterColumns.forEach(function(column){\r\n\t\t\tif(column.modules.filter && column.modules.filter.headerElement){\r\n\t\t\t\tcolumn.modules.filter.headerElement.style.display = '';\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t//programatically set focus of header filter\r\n\tsetHeaderFilterFocus(column){\r\n\t\tif(column.modules.filter && column.modules.filter.headerElement){\r\n\t\t\tcolumn.modules.filter.headerElement.focus();\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Column Filter Focus Error - No header filter set on column:\", column.getField());\r\n\t\t}\r\n\t}\r\n\r\n\t//programmatically get value of header filter\r\n\tgetHeaderFilterValue(column){\r\n\t\tif(column.modules.filter && column.modules.filter.headerElement){\r\n\t\t\treturn column.modules.filter.headerElement.value;\r\n\t\t} else {\r\n\t\t\tconsole.warn(\"Column Filter Error - No header filter set on column:\", column.getField());\r\n\t\t}\r\n\t}\r\n\r\n\t//programatically set value of header filter\r\n\tsetHeaderFilterValue(column, value){\r\n\t\tif (column){\r\n\t\t\tif(column.modules.filter && column.modules.filter.headerElement){\r\n\t\t\t\tthis.generateHeaderFilterElement(column, value, true);\r\n\t\t\t\tcolumn.modules.filter.success(value);\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Column Filter Error - No header filter set on column:\", column.getField());\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\treloadHeaderFilter(column){\r\n\t\tif (column){\r\n\t\t\tif(column.modules.filter && column.modules.filter.headerElement){\r\n\t\t\t\tthis.generateHeaderFilterElement(column, column.modules.filter.value, true);\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Column Filter Error - No header filter set on column:\", column.getField());\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\trefreshFilter(){\r\n\t\tif(this.tableInitialized){\r\n\t\t\tif(this.table.options.filterMode === \"remote\"){\r\n\t\t\t\tthis.reloadData();\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\tvar changed = false;\r\n\r\n\t\tif(!Array.isArray(field)){\r\n\t\t\tfield = [{field:field, type:type, value:value}];\r\n\t\t}\r\n\r\n\t\tfield.forEach((filter) => {\r\n\t\t\tvar index = -1;\r\n\r\n\t\t\tif(typeof filter.field == \"object\"){\r\n\t\t\t\tindex = this.filterList.findIndex((element) => {\r\n\t\t\t\t\treturn filter === element;\r\n\t\t\t\t});\r\n\t\t\t}else{\r\n\t\t\t\tindex = this.filterList.findIndex((element) => {\r\n\t\t\t\t\treturn filter.field === element.field && filter.type === element.type && filter.value === element.value;\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\tif(index > -1){\r\n\t\t\t\tthis.filterList.splice(index, 1);\r\n\t\t\t\tchanged = true;\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Filter Error - No matching filter type found, ignoring: \", filter.type);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tthis.trackChanges();\r\n\t}\r\n\r\n\t//clear filters\r\n\tclearFilter(all){\r\n\t\tthis.filterList = [];\r\n\r\n\t\tif(all){\r\n\t\t\tthis.clearHeaderFilter();\r\n\t\t}\r\n\r\n\t\tthis.trackChanges();\r\n\t}\r\n\r\n\t//clear header filters\r\n\tclearHeaderFilter(){\r\n\t\tthis.headerFilters = {};\r\n\t\tthis.prevHeaderFilterChangeCheck = \"{}\";\r\n\r\n\t\tthis.headerFilterColumns.forEach((column) => {\r\n\t\t\tif(typeof column.modules.filter.value !== \"undefined\"){\r\n\t\t\t\tdelete column.modules.filter.value;\r\n\t\t\t}\r\n\t\t\tcolumn.modules.filter.prevSuccess = undefined;\r\n\t\t\tthis.reloadHeaderFilter(column);\r\n\t\t});\r\n\r\n\t\tthis.trackChanges();\r\n\t}\r\n\r\n\t//search data and return matching rows\r\n\tsearch (searchType, field, type, value){\r\n\t\tvar activeRows = [],\r\n\t\tfilterList = [];\r\n\r\n\t\tif(!Array.isArray(field)){\r\n\t\t\tfield = [{field:field, type:type, value:value}];\r\n\t\t}\r\n\r\n\t\tfield.forEach((filter) => {\r\n\t\t\tfilter = this.findFilter(filter);\r\n\r\n\t\t\tif(filter){\r\n\t\t\t\tfilterList.push(filter);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tthis.table.rowManager.rows.forEach((row) => {\r\n\t\t\tvar match = true;\r\n\r\n\t\t\tfilterList.forEach((filter) => {\r\n\t\t\t\tif(!this.filterRecurse(filter, row.getData())){\r\n\t\t\t\t\tmatch = false;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tif(match){\r\n\t\t\t\tactiveRows.push(searchType === \"data\" ? row.getData(\"data\") : row.getComponent());\r\n\t\t\t}\r\n\r\n\t\t});\r\n\r\n\t\treturn activeRows;\r\n\t}\r\n\r\n\t//filter row array\r\n\tfilter(rowList, filters){\r\n\t\tvar activeRows = [],\r\n\t\tactiveRowComponents = [];\r\n\r\n\t\tif(this.subscribedExternal(\"dataFiltering\")){\r\n\t\t\tthis.dispatchExternal(\"dataFiltering\", this.getFilters());\r\n\t\t}\r\n\r\n\t\tif(this.table.options.filterMode !== \"remote\" && (this.filterList.length || Object.keys(this.headerFilters).length)){\r\n\r\n\t\t\trowList.forEach((row) => {\r\n\t\t\t\tif(this.filterRow(row)){\r\n\t\t\t\t\tactiveRows.push(row);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t}else{\r\n\t\t\tactiveRows = rowList.slice(0);\r\n\t\t}\r\n\r\n\t\tif(this.subscribedExternal(\"dataFiltered\")){\r\n\r\n\t\t\tactiveRows.forEach((row) => {\r\n\t\t\t\tactiveRowComponents.push(row.getComponent());\r\n\t\t\t});\r\n\r\n\t\t\tthis.dispatchExternal(\"dataFiltered\", this.getFilters(), activeRowComponents);\r\n\t\t}\r\n\r\n\t\treturn activeRows;\r\n\t}\r\n\r\n\t//filter individual row\r\n\tfilterRow(row, filters){\r\n\t\tvar match = true,\r\n\t\tdata = row.getData();\r\n\r\n\t\tthis.filterList.forEach((filter) => {\r\n\t\t\tif(!this.filterRecurse(filter, data)){\r\n\t\t\t\tmatch = false;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\r\n\t\tfor(var field in this.headerFilters){\r\n\t\t\tif(!this.headerFilters[field].func(data)){\r\n\t\t\t\tmatch = false;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn match;\r\n\t}\r\n\r\n\tfilterRecurse(filter, data){\r\n\t\tvar match = false;\r\n\r\n\t\tif(Array.isArray(filter)){\r\n\t\t\tfilter.forEach((subFilter) => {\r\n\t\t\t\tif(this.filterRecurse(subFilter, data)){\r\n\t\t\t\t\tmatch = true;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tmatch = filter.func(data);\r\n\t\t}\r\n\r\n\t\treturn match;\r\n\t}\r\n}\r\n\r\nFilter.moduleName = \"filter\";\r\n\r\n//load defaults\r\nFilter.filters = defaultFilters;\r\n\r\nexport default Filter;","import plaintext from './formatters/plaintext.js';\r\nimport html from './formatters/html.js';\r\nimport textarea from './formatters/textarea.js';\r\nimport money from './formatters/money.js';\r\nimport link from './formatters/link.js';\r\nimport image from './formatters/image.js';\r\nimport tickCross from './formatters/tickCross.js';\r\nimport datetime from './formatters/datetime.js';\r\nimport datetimediff from './formatters/datetimediff.js';\r\nimport lookup from './formatters/lookup.js';\r\nimport star from './formatters/star.js';\r\nimport traffic from './formatters/traffic.js';\r\nimport progress from './formatters/progress.js';\r\nimport color from './formatters/color.js';\r\nimport buttonTick from './formatters/buttonTick.js';\r\nimport buttonCross from './formatters/buttonCross.js';\r\nimport rownum from './formatters/rownum.js';\r\nimport handle from './formatters/handle.js';\r\nimport responsiveCollapse from './formatters/responsiveCollapse.js';\r\nimport rowSelection from './formatters/rowSelection.js';\r\n\r\nexport default {\r\n\tplaintext:plaintext,\r\n\thtml:html,\r\n\ttextarea:textarea,\r\n\tmoney:money,\r\n\tlink:link,\r\n\timage:image,\r\n\ttickCross:tickCross,\r\n\tdatetime:datetime,\r\n\tdatetimediff:datetimediff,\r\n\tlookup:lookup,\r\n\tstar:star,\r\n\ttraffic:traffic,\r\n\tprogress:progress,\r\n\tcolor:color,\r\n\tbuttonTick:buttonTick,\r\n\tbuttonCross:buttonCross,\r\n\trownum:rownum,\r\n\thandle:handle,\r\n\tresponsiveCollapse:responsiveCollapse,\r\n\trowSelection:rowSelection,\r\n};","export default function(cell, formatterParams, onRendered){\r\n\treturn this.emptyToSpace(this.sanitizeHTML(cell.getValue()));\r\n};","export default function(cell, formatterParams, onRendered){\r\n\treturn cell.getValue();\r\n};","export default function(cell, formatterParams, onRendered){\r\n\tcell.getElement().style.whiteSpace = \"pre-wrap\";\r\n\treturn this.emptyToSpace(this.sanitizeHTML(cell.getValue()));\r\n};","export default function(cell, formatterParams, onRendered){\r\n\tvar floatVal = parseFloat(cell.getValue()),\r\n\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\trgx = /(\\d+)(\\d{3})/;\r\n\r\n\twhile (rgx.test(integer)){\r\n\t\tinteger = integer.replace(rgx, \"$1\" + thousandSym + \"$2\");\r\n\t}\r\n\r\n\treturn after ? 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\tif(formatterParams.labelField){\r\n\t\tdata = cell.getData();\r\n\t\tlabel = data[formatterParams.labelField];\r\n\t}\r\n\r\n\tif(formatterParams.label){\r\n\t\tswitch(typeof formatterParams.label){\r\n\t\t\tcase \"string\":\r\n\t\t\tlabel = formatterParams.label;\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"function\":\r\n\t\t\tlabel = formatterParams.label(cell);\r\n\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\tif(label){\r\n\t\tif(formatterParams.urlField){\r\n\t\t\tdata = cell.getData();\r\n\t\t\tvalue = data[formatterParams.urlField];\r\n\t\t}\r\n\r\n\t\tif(formatterParams.url){\r\n\t\t\tswitch(typeof formatterParams.url){\r\n\t\t\t\tcase \"string\":\r\n\t\t\t\tvalue = formatterParams.url;\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"function\":\r\n\t\t\t\tvalue = formatterParams.url(cell);\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tel.setAttribute(\"href\", urlPrefix + value);\r\n\r\n\t\tif(formatterParams.target){\r\n\t\t\tel.setAttribute(\"target\", formatterParams.target);\r\n\t\t}\r\n\r\n\t\tif(formatterParams.download){\r\n\r\n\t\t\tif(typeof download == \"function\"){\r\n\t\t\t\tdownload = download(cell);\r\n\t\t\t}else{\r\n\t\t\t\tdownload = download === true ? \"\" : download;\r\n\t\t\t}\r\n\r\n\t\t\tel.setAttribute(\"download\", download);\r\n\t\t}\r\n\r\n\t\tel.innerHTML = this.emptyToSpace(this.sanitizeHTML(label));\r\n\r\n\t\treturn el;\r\n\t}else{\r\n\t\treturn \" \";\r\n\t}\r\n};","export default function(cell, formatterParams, onRendered){\r\n\tvar el = document.createElement(\"img\"),\r\n\tsrc = cell.getValue();\r\n\r\n\tif(formatterParams.urlPrefix){\r\n\t\tsrc = formatterParams.urlPrefix + cell.getValue();\r\n\t}\r\n\r\n\tif(formatterParams.urlSuffix){\r\n\t\tsrc = src + formatterParams.urlSuffix;\r\n\t}\r\n\r\n\tel.setAttribute(\"src\", src);\r\n\r\n\tswitch(typeof formatterParams.height){\r\n\t\tcase \"number\":\r\n\t\tel.style.height = formatterParams.height + \"px\";\r\n\t\tbreak;\r\n\r\n\t\tcase \"string\":\r\n\t\tel.style.height = formatterParams.height;\r\n\t\tbreak;\r\n\t}\r\n\r\n\tswitch(typeof formatterParams.width){\r\n\t\tcase \"number\":\r\n\t\tel.style.width = formatterParams.width + \"px\";\r\n\t\tbreak;\r\n\r\n\t\tcase \"string\":\r\n\t\tel.style.width = formatterParams.width;\r\n\t\tbreak;\r\n\t}\r\n\r\n\tel.addEventListener(\"load\", function(){\r\n\t\tcell.getRow().normalizeHeight();\r\n\t});\r\n\r\n\treturn el;\r\n};","export default function(cell, formatterParams, onRendered){\r\n\tvar value = cell.getValue(),\r\n\telement = cell.getElement(),\r\n\tempty = formatterParams.allowEmpty,\r\n\ttruthy = formatterParams.allowTruthy,\r\n\ttick = typeof formatterParams.tickElement !== \"undefined\" ? formatterParams.tickElement : '',\r\n\tcross = typeof formatterParams.crossElement !== \"undefined\" ? formatterParams.crossElement : '';\r\n\r\n\tif((truthy && value) || (value === true || value === \"true\" || value === \"True\" || value === 1 || value === \"1\")){\r\n\t\telement.setAttribute(\"aria-checked\", true);\r\n\t\treturn tick || \"\";\r\n\t}else{\r\n\t\tif(empty && (value === \"null\" || value === \"\" || value === null || typeof value === \"undefined\")){\r\n\t\t\telement.setAttribute(\"aria-checked\", \"mixed\");\r\n\t\t\treturn \"\";\r\n\t\t}else{\r\n\t\t\telement.setAttribute(\"aria-checked\", false);\r\n\t\t\treturn cross || \"\";\r\n\t\t}\r\n\t}\r\n};","export default function(cell, formatterParams, onRendered){\r\n\tvar 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 = inputFormat === \"iso\" ? DT.fromISO(String(value)) : DT.fromFormat(String(value), inputFormat);\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\t\r\n\t\tvar newDatetime = inputFormat === \"iso\" ? DT.fromISO(String(value)) : DT.fromFormat(String(value), inputFormat);\r\n\r\n\t\tif (newDatetime.isValid){\r\n\t\t\tif(humanize){\r\n\t\t\t\t// return moment.duration(newDatetime.diff(date)).humanize(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\tcolor = colors;\r\n\t\tbreak;\r\n\t\tcase \"function\":\r\n\t\tcolor = colors(value);\r\n\t\tbreak;\r\n\t\tcase \"object\":\r\n\t\tif(Array.isArray(colors)){\r\n\t\t\tvar unit = 100 / colors.length;\r\n\t\t\tvar index = Math.floor(percentValue / unit);\r\n\r\n\t\t\tindex = Math.min(index, colors.length - 1);\r\n\t\t\tindex = Math.max(index, 0);\r\n\t\t\tcolor = colors[index];\r\n\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\tel.style.backgroundColor = color;\r\n\r\n\treturn el;\r\n};","import CellComponent from '../../../../core/cell/CellComponent.js';\r\n\r\nexport default function(cell, formatterParams, onRendered){ //progress bar\r\n\tvar value = this.sanitizeHTML(cell.getValue()) || 0,\r\n\telement = cell.getElement(),\r\n\tmax = formatterParams && formatterParams.max ? formatterParams.max : 100,\r\n\tmin = formatterParams && formatterParams.min ? formatterParams.min : 0,\r\n\tlegendAlign = formatterParams && formatterParams.legendAlign ? formatterParams.legendAlign : \"center\",\r\n\tpercent, percentValue, color, legend, legendColor, top, left, right, bottom;\r\n\r\n\t//make sure value is in range\r\n\tpercentValue = parseFloat(value) <= max ? parseFloat(value) : max;\r\n\tpercentValue = parseFloat(percentValue) >= min ? parseFloat(percentValue) : min;\r\n\r\n\t//workout percentage\r\n\tpercent = (max - min) / 100;\r\n\tpercentValue = Math.round((percentValue - min) / percent);\r\n\r\n\t//set bar color\r\n\tswitch(typeof formatterParams.color){\r\n\t\tcase \"string\":\r\n\t\tcolor = formatterParams.color;\r\n\t\tbreak;\r\n\t\tcase \"function\":\r\n\t\tcolor = formatterParams.color(value);\r\n\t\tbreak;\r\n\t\tcase \"object\":\r\n\t\tif(Array.isArray(formatterParams.color)){\r\n\t\t\tvar unit = 100 / formatterParams.color.length;\r\n\t\t\tvar index = Math.floor(percentValue / unit);\r\n\r\n\t\t\tindex = Math.min(index, formatterParams.color.length - 1);\r\n\t\t\tindex = Math.max(index, 0);\r\n\t\t\tcolor = formatterParams.color[index];\r\n\t\t\tbreak;\r\n\t\t}\r\n\t\tdefault:\r\n\t\tcolor = \"#2DC214\";\r\n\t}\r\n\r\n\t//generate legend\r\n\tswitch(typeof formatterParams.legend){\r\n\t\tcase \"string\":\r\n\t\tlegend = formatterParams.legend;\r\n\t\tbreak;\r\n\t\tcase \"function\":\r\n\t\tlegend = formatterParams.legend(value);\r\n\t\tbreak;\r\n\t\tcase \"boolean\":\r\n\t\tlegend = value;\r\n\t\tbreak;\r\n\t\tdefault:\r\n\t\tlegend = false;\r\n\t}\r\n\r\n\t//set legend color\r\n\tswitch(typeof formatterParams.legendColor){\r\n\t\tcase \"string\":\r\n\t\tlegendColor = formatterParams.legendColor;\r\n\t\tbreak;\r\n\t\tcase \"function\":\r\n\t\tlegendColor = formatterParams.legendColor(value);\r\n\t\tbreak;\r\n\t\tcase \"object\":\r\n\t\tif(Array.isArray(formatterParams.legendColor)){\r\n\t\t\tvar unit = 100 / formatterParams.legendColor.length;\r\n\t\t\tvar index = Math.floor(percentValue / unit);\r\n\r\n\t\t\tindex = Math.min(index, formatterParams.legendColor.length - 1);\r\n\t\t\tindex = Math.max(index, 0);\r\n\t\t\tlegendColor = formatterParams.legendColor[index];\r\n\t\t}\r\n\t\tbreak;\r\n\t\tdefault:\r\n\t\tlegendColor = \"#000\";\r\n\t}\r\n\r\n\telement.style.minWidth = \"30px\";\r\n\telement.style.position = \"relative\";\r\n\r\n\telement.setAttribute(\"aria-label\", percentValue);\r\n\r\n\tvar barEl = document.createElement(\"div\");\r\n\tbarEl.style.display = \"inline-block\";\r\n\tbarEl.style.position = \"absolute\";\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\treturn this.table.rowManager.activeRows.indexOf(cell.getRow()._getSelf()) + 1 || \"\";\r\n};","export default function(cell, formatterParams, onRendered){\r\n\tcell.getElement().classList.add(\"tabulator-row-handle\");\r\n\treturn \"
\";\r\n};","export default function(cell, formatterParams, onRendered){\r\n\tvar open = false,\r\n\tel = document.createElement(\"div\"),\r\n\tconfig = cell.getRow()._row.modules.responsiveLayout;\r\n\r\n\tel.classList.add(\"tabulator-responsive-collapse-toggle\");\r\n\tel.innerHTML = \"+-\";\r\n\r\n\tcell.getElement().classList.add(\"tabulator-row-handle\");\r\n\r\n\tfunction toggleList(isOpen){\r\n\t\tvar collapseEl = config.element;\r\n\r\n\t\tconfig.open = isOpen;\r\n\r\n\t\tif(collapseEl){\r\n\r\n\t\t\tif(config.open){\r\n\t\t\t\tel.classList.add(\"open\");\r\n\t\t\t\tcollapseEl.style.display = '';\r\n\t\t\t}else{\r\n\t\t\t\tel.classList.remove(\"open\");\r\n\t\t\t\tcollapseEl.style.display = 'none';\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tel.addEventListener(\"click\", function(e){\r\n\t\te.stopImmediatePropagation();\r\n\t\ttoggleList(!config.open);\r\n\t});\r\n\r\n\ttoggleList(config.open);\r\n\r\n\treturn el;\r\n};","import RowComponent from '../../../../core/row/RowComponent.js';\r\n\r\nexport default function(cell, formatterParams, onRendered){\r\n\tvar checkbox = document.createElement(\"input\");\r\n\tvar blocked = false;\r\n\r\n\tcheckbox.type = 'checkbox';\r\n\r\n\tcheckbox.setAttribute(\"aria-label\", \"Select Row\");\r\n\t\r\n\tif(this.table.modExists(\"selectRow\", true)){\r\n\r\n\t\tcheckbox.addEventListener(\"click\", (e) => {\r\n\t\t\te.stopPropagation();\r\n\t\t});\r\n\r\n\t\tif(typeof cell.getRow == 'function'){\r\n\t\t\tvar row = cell.getRow();\r\n\r\n\t\t\tif(row instanceof RowComponent){\r\n\r\n\t\t\t\tcheckbox.addEventListener(\"change\", (e) => {\r\n\t\t\t\t\tif(this.table.options.selectableRangeMode === \"click\"){\r\n\t\t\t\t\t\tif(!blocked){\r\n\t\t\t\t\t\t\trow.toggleSelect();\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\tblocked = false;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\trow.toggleSelect();\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\tif(this.table.options.selectableRangeMode === \"click\"){\r\n\t\t\t\t\tcheckbox.addEventListener(\"click\", (e) => {\r\n\t\t\t\t\t\tblocked = true;\r\n\t\t\t\t\t\tthis.table.modules.selectRow.handleComplexRowClick(row._row, e);\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\r\n\t\t\t\tcheckbox.checked = row.isSelected && row.isSelected();\r\n\t\t\t\tthis.table.modules.selectRow.registerRowSelectCheckbox(row, checkbox);\r\n\t\t\t}else{\r\n\t\t\t\tcheckbox = \"\";\r\n\t\t\t}\r\n\t\t}else {\r\n\t\t\tcheckbox.addEventListener(\"change\", (e) => {\r\n\t\t\t\tif(this.table.modules.selectRow.selectedRows.length){\r\n\t\t\t\t\tthis.table.deselectRow();\r\n\t\t\t\t}else {\r\n\t\t\t\t\tthis.table.selectRow(formatterParams.rowRange);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tthis.table.modules.selectRow.registerHeaderSelectCheckbox(checkbox);\r\n\t\t}\r\n\t}\r\n\r\n\treturn checkbox;\r\n};","import Module from '../../core/Module.js';\r\n\r\nimport defaultFormatters from './defaults/formatters.js';\r\n\r\nclass Format extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.registerColumnOption(\"formatter\");\r\n\t\tthis.registerColumnOption(\"formatterParams\");\r\n\r\n\t\tthis.registerColumnOption(\"formatterPrint\");\r\n\t\tthis.registerColumnOption(\"formatterPrintParams\");\r\n\t\tthis.registerColumnOption(\"formatterClipboard\");\r\n\t\tthis.registerColumnOption(\"formatterClipboardParams\");\r\n\t\tthis.registerColumnOption(\"formatterHtmlOutput\");\r\n\t\tthis.registerColumnOption(\"formatterHtmlOutputParams\");\r\n\t\tthis.registerColumnOption(\"titleFormatter\");\r\n\t\tthis.registerColumnOption(\"titleFormatterParams\");\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tthis.subscribe(\"cell-format\", this.formatValue.bind(this));\r\n\t\tthis.subscribe(\"cell-rendered\", this.cellRendered.bind(this));\r\n\t\tthis.subscribe(\"column-layout\", this.initializeColumn.bind(this));\r\n\t\tthis.subscribe(\"column-format\", this.formatHeader.bind(this));\r\n\t}\r\n\r\n\t//initialize column formatter\r\n\tinitializeColumn(column){\r\n\t\tcolumn.modules.format = this.lookupFormatter(column, \"\");\r\n\r\n\t\tif(typeof column.definition.formatterPrint !== \"undefined\"){\r\n\t\t\tcolumn.modules.format.print = this.lookupFormatter(column, \"Print\");\r\n\t\t}\r\n\r\n\t\tif(typeof column.definition.formatterClipboard !== \"undefined\"){\r\n\t\t\tcolumn.modules.format.clipboard = this.lookupFormatter(column, \"Clipboard\");\r\n\t\t}\r\n\r\n\t\tif(typeof column.definition.formatterHtmlOutput !== \"undefined\"){\r\n\t\t\tcolumn.modules.format.htmlOutput = this.lookupFormatter(column, \"HtmlOutput\");\r\n\t\t}\r\n\t}\r\n\r\n\tlookupFormatter(column, type){\r\n\t\tvar config = {params:column.definition[\"formatter\" + type + \"Params\"] || {}},\r\n\t\tformatter = column.definition[\"formatter\" + type];\r\n\r\n\t\t//set column formatter\r\n\t\tswitch(typeof formatter){\r\n\t\t\tcase \"string\":\r\n\t\t\tif(Format.formatters[formatter]){\r\n\t\t\t\tconfig.formatter = Format.formatters[formatter];\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Formatter Error - No such formatter found: \", formatter);\r\n\t\t\t\tconfig.formatter = Format.formatters.plaintext;\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"function\":\r\n\t\t\tconfig.formatter = formatter;\r\n\t\t\tbreak;\r\n\r\n\t\t\tdefault:\r\n\t\t\tconfig.formatter = Format.formatters.plaintext;\r\n\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\treturn config;\r\n\t}\r\n\r\n\tcellRendered(cell){\r\n\t\tif(cell.modules.format && cell.modules.format.renderedCallback && !cell.modules.format.rendered){\r\n\t\t\tcell.modules.format.renderedCallback();\r\n\t\t\tcell.modules.format.rendered = true;\r\n\t\t}\r\n\t}\r\n\r\n\t//return a formatted value for a column header\r\n\tformatHeader(column, title, el){\r\n\t\tvar formatter, params, onRendered, mockCell;\r\n\r\n\t\tif(column.definition.titleFormatter){\r\n\t\t\tformatter = this.getFormatter(column.definition.titleFormatter);\r\n\r\n\t\t\tonRendered = (callback) => {\r\n\t\t\t\tcolumn.titleFormatterRendered = callback;\r\n\t\t\t};\r\n\r\n\t\t\tmockCell = {\r\n\t\t\t\tgetValue:function(){\r\n\t\t\t\t\treturn title;\r\n\t\t\t\t},\r\n\t\t\t\tgetElement:function(){\r\n\t\t\t\t\treturn el;\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\tparams = column.definition.titleFormatterParams || {};\r\n\r\n\t\t\tparams = typeof params === \"function\" ? params() : params;\r\n\r\n\t\t\treturn formatter.call(this, mockCell, params, onRendered);\r\n\t\t}else{\r\n\t\t\treturn title;\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t//return a formatted value for a cell\r\n\tformatValue(cell){\r\n\t\tvar component = cell.getComponent(),\r\n\t\tparams = typeof cell.column.modules.format.params === \"function\" ? cell.column.modules.format.params(component) : cell.column.modules.format.params;\r\n\r\n\t\tfunction onRendered(callback){\r\n\t\t\tif(!cell.modules.format){\r\n\t\t\t\tcell.modules.format = {};\r\n\t\t\t}\r\n\r\n\t\t\tcell.modules.format.renderedCallback = callback;\r\n\t\t\tcell.modules.format.rendered = false;\r\n\t\t}\r\n\r\n\t\treturn cell.column.modules.format.formatter.call(this, component, params, onRendered);\r\n\t}\r\n\r\n\tformatExportValue(cell, type){\r\n\t\tvar formatter = cell.column.modules.format[type],\r\n\t\tparams;\r\n\r\n\t\tif(formatter){\r\n\t\t\tparams = typeof formatter.params === \"function\" ? formatter.params(component) : formatter.params;\r\n\r\n\t\t\tfunction onRendered(callback){\r\n\t\t\t\tif(!cell.modules.format){\r\n\t\t\t\t\tcell.modules.format = {};\r\n\t\t\t\t}\r\n\r\n\t\t\t\tcell.modules.format.renderedCallback = callback;\r\n\t\t\t\tcell.modules.format.rendered = false;\r\n\t\t\t}\r\n\r\n\t\t\treturn formatter.formatter.call(this, cell.getComponent(), params, onRendered);\r\n\r\n\t\t}else{\r\n\t\t\treturn this.formatValue(cell);\r\n\t\t}\r\n\t}\r\n\r\n\tsanitizeHTML(value){\r\n\t\tif(value){\r\n\t\t\tvar entityMap = {\r\n\t\t\t\t'&': '&',\r\n\t\t\t\t'<': '<',\r\n\t\t\t\t'>': '>',\r\n\t\t\t\t'\"': '"',\r\n\t\t\t\t\"'\": ''',\r\n\t\t\t\t'/': '/',\r\n\t\t\t\t'`': '`',\r\n\t\t\t\t'=': '='\r\n\t\t\t};\r\n\r\n\t\t\treturn String(value).replace(/[&<>\"'`=\\/]/g, function (s) {\r\n\t\t\t\treturn entityMap[s];\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\treturn value;\r\n\t\t}\r\n\t}\r\n\r\n\temptyToSpace(value){\r\n\t\treturn value === null || typeof value === \"undefined\" || value === \"\" ? \" \" : value;\r\n\t}\r\n\r\n\t//get formatter for cell\r\n\tgetFormatter(formatter){\r\n\t\tvar formatter;\r\n\r\n\t\tswitch(typeof formatter){\r\n\t\t\tcase \"string\":\r\n\t\t\tif(Format.formatters[formatter]){\r\n\t\t\t\tformatter = Format.formatters[formatter]\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Formatter Error - No such formatter found: \", formatter);\r\n\t\t\t\tformatter = Format.formatters.plaintext;\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"function\":\r\n\t\t\tformatter = formatter;\r\n\t\t\tbreak;\r\n\r\n\t\t\tdefault:\r\n\t\t\tformatter = Format.formatters.plaintext;\r\n\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\treturn formatter;\r\n\t}\r\n}\r\n\r\nFormat.moduleName = \"format\";\r\n\r\n//load defaults\r\nFormat.formatters = defaultFormatters;\r\n\r\nexport default Format;","import Module from '../../core/Module.js';\r\n\r\nclass FrozenColumns extends Module{\r\n\t\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\t\t\r\n\t\tthis.leftColumns = [];\r\n\t\tthis.rightColumns = [];\r\n\t\tthis.leftMargin = 0;\r\n\t\tthis.rightMargin = 0;\r\n\t\tthis.rightPadding = 0;\r\n\t\tthis.initializationMode = \"left\";\r\n\t\tthis.active = false;\r\n\t\tthis.scrollEndTimer = false;\r\n\t\tthis.blocked = true;\r\n\t\t\r\n\t\tthis.registerColumnOption(\"frozen\");\r\n\t}\r\n\t\r\n\t//reset initial state\r\n\treset(){\r\n\t\tthis.initializationMode = \"left\";\r\n\t\tthis.leftColumns = [];\r\n\t\tthis.rightColumns = [];\r\n\t\tthis.leftMargin = 0;\r\n\t\tthis.rightMargin = 0;\r\n\t\tthis.rightMargin = 0;\r\n\t\tthis.active = false;\r\n\t\t\r\n\t\tthis.table.columnManager.headersElement.style.marginLeft = 0;\r\n\t\tthis.table.columnManager.element.style.paddingRight = 0;\r\n\t}\r\n\t\r\n\tinitialize(){\r\n\t\tthis.subscribe(\"cell-layout\", this.layoutCell.bind(this));\r\n\t\tthis.subscribe(\"column-init\", this.initializeColumn.bind(this));\r\n\t\tthis.subscribe(\"column-width\", this.layout.bind(this));\r\n\t\tthis.subscribe(\"row-layout-after\", this.layoutRow.bind(this));\r\n\t\tthis.subscribe(\"table-layout\", this.layout.bind(this));\r\n\t\tthis.subscribe(\"scroll-horizontal\", this.scrollHorizontal.bind(this));\r\n\t\tthis.subscribe(\"columns-loading\", this.reset.bind(this));\r\n\t\tthis.subscribe(\"table-redraw\", this.layout.bind(this));\r\n\t\tthis.subscribe(\"layout-refreshing\", this.blockLayout.bind(this));\r\n\t\tthis.subscribe(\"layout-refreshed\", this.unblockLayout.bind(this));\r\n\t}\r\n\t\r\n\tblockLayout(){\r\n\t\tthis.blocked = true;\r\n\t}\r\n\t\r\n\tunblockLayout(){\r\n\t\tthis.blocked = false;\r\n\t}\r\n\t\r\n\tlayoutCell(cell){\r\n\t\tthis.layoutElement(cell.element, cell.column)\r\n\t}\r\n\t\r\n\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\tvar frozen = false;\r\n\t\t\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\t\r\n\t\treturn frozen;\r\n\t}\r\n\t\r\n\t//quick layout to smooth horizontal scrolling\r\n\tscrollHorizontal(){\r\n\t\tvar rows;\r\n\t\t\r\n\t\tif(this.active){\r\n\t\t\tclearTimeout(this.scrollEndTimer);\r\n\r\n\t\t\trows = this.table.rowManager.getVisibleRows();\r\n\t\t\t\r\n\t\t\tthis.calcMargins(true);\r\n\t\t\t\r\n\t\t\tthis.layoutColumnPosition();\r\n\t\t\t\r\n\t\t\tthis.layoutCalcRows();\r\n\t\t\t\r\n\t\t\trows.forEach((row) => {\r\n\t\t\t\tif(row.type === \"row\"){\r\n\t\t\t\t\tthis.layoutRow(row);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\t\r\n\t//calculate margins for rows\r\n\tcalcMargins(scroll){\r\n\t\t\r\n\t\tif(!scroll){\r\n\t\t\tthis.leftMargin = this._calcSpace(this.leftColumns, this.leftColumns.length) + \"px\";\t\t\t\r\n\t\t\tthis.rightMargin = this._calcSpace(this.rightColumns, this.rightColumns.length) + \"px\";\t\r\n\t\t\tthis.table.rowManager.tableElement.style.marginRight = this.rightMargin;\r\n\t\t}\r\n\t\r\n\t\t//calculate right frozen columns\r\n\t\tthis.rightPadding = this.table.rowManager.element.clientWidth + this.table.columnManager.scrollLeft;\r\n\t}\r\n\t\r\n\t//layout calculation rows\r\n\tlayoutCalcRows(){\r\n\t\tif(this.table.modExists(\"columnCalcs\")){\r\n\t\t\tif(this.table.modules.columnCalcs.topInitialized && this.table.modules.columnCalcs.topRow){\r\n\t\t\t\tthis.layoutRow(this.table.modules.columnCalcs.topRow);\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif(this.table.modules.columnCalcs.botInitialized && this.table.modules.columnCalcs.botRow){\r\n\t\t\t\tthis.layoutRow(this.table.modules.columnCalcs.botRow);\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif(this.table.modExists(\"groupRows\")){\r\n\t\t\t\tthis.layoutGroupCalcs(this.table.modules.groupRows.getGroups())\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\tlayoutGroupCalcs(groups){\r\n\t\tgroups.forEach((group) => {\r\n\t\t\tif(group.calcs.top){\r\n\t\t\t\tthis.layoutRow(group.calcs.top);\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif(group.calcs.bottom){\r\n\t\t\t\tthis.layoutRow(group.calcs.bottom);\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif(group.groupList && group.groupList.length){\r\n\t\t\t\tthis.layoutGroupCalcs(group.groupList && group.groupList);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\t\r\n\t//calculate column positions and layout headers\r\n\tlayoutColumnPosition(allCells){\r\n\t\tvar leftParents = [];\r\n\t\t\r\n\t\tvar leftMargin = 0;\r\n\t\tvar rightMargin = 0;\r\n\t\t\r\n\t\tthis.table.columnManager.headersElement.style.marginLeft = this.leftMargin;\r\n\t\tthis.table.columnManager.element.style.paddingRight = this.rightMargin;\r\n\r\n\t\tthis.leftColumns.forEach((column, i) => {\t\r\n\t\t\tcolumn.modules.frozen.margin = (leftMargin + this.table.columnManager.scrollLeft) + \"px\";\r\n\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\r\n\t\t\tif(column.visible){\r\n\t\t\t\trightMargin += column.getWidth();\r\n\t\t\t}\r\n\r\n\t\t\tcolumn.modules.frozen.margin = (this.rightPadding - rightMargin) + \"px\";\r\n\t\t\t\r\n\t\t\tif(i == this.rightColumns.length - 1){\r\n\t\t\t\tcolumn.modules.frozen.edge = true;\r\n\t\t\t}else{\r\n\t\t\t\tcolumn.modules.frozen.edge = false;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\t\r\n\t\t\tif(column.parent.isGroup){\r\n\t\t\t\tthis.layoutElement(this.getColGroupParentElement(column), column);\r\n\t\t\t}else{\r\n\t\t\t\tthis.layoutElement(column.getElement(), column);\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif(allCells){\r\n\t\t\t\tcolumn.cells.forEach((cell) => {\r\n\t\t\t\t\tthis.layoutElement(cell.getElement(true), column);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\t\r\n\tgetColGroupParentElement(column){\r\n\t\treturn column.parent.isGroup ? this.getColGroupParentElement(column.parent) : column.getElement();\r\n\t}\r\n\t\r\n\t//layout columns appropriately\r\n\tlayout(){\r\n\t\tif(this.active && !this.blocked){\r\n\t\t\t//calculate row padding\r\n\t\t\tthis.calcMargins();\r\n\t\t\t\r\n\t\t\tthis.table.rowManager.getDisplayRows().forEach((row) =>{\r\n\t\t\t\tif(row.type === \"row\"){\r\n\t\t\t\t\tthis.layoutRow(row);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\t\r\n\t\t\tthis.layoutCalcRows();\r\n\t\t\t\r\n\t\t\t//calculate left columns\r\n\t\t\tthis.layoutColumnPosition(true);\r\n\t\t}\r\n\t}\r\n\t\r\n\tlayoutRow(row){\r\n\t\tvar rowEl = row.getElement();\r\n\t\t\r\n\t\trowEl.style.paddingLeft = this.leftMargin;\r\n\t\t\r\n\t\tif(this.table.options.layout === \"fitDataFill\" && this.rightColumns.length){\r\n\t\t\tthis.table.rowManager.getTableElement().style.minWidth = \"calc(100% - \" + this.rightMargin + \")\";\r\n\t\t}\r\n\t\t\r\n\t\tthis.leftColumns.forEach((column) => {\r\n\t\t\tvar cell = row.getCell(column);\r\n\t\t\t\r\n\t\t\tif(cell){\r\n\t\t\t\tthis.layoutElement(cell.getElement(true), column);\r\n\t\t\t}\r\n\t\t});\r\n\t\t\r\n\t\tthis.rightColumns.forEach((column) => {\r\n\t\t\tvar cell = row.getCell(column);\r\n\t\t\t\r\n\t\t\tif(cell){\r\n\t\t\t\tthis.layoutElement(cell.getElement(true), column);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\t\r\n\tlayoutElement(element, column){\r\n\t\t\r\n\t\tif(column.modules.frozen){\r\n\t\t\telement.style.position = \"absolute\";\r\n\t\t\telement.style.left = column.modules.frozen.margin;\r\n\t\t\t\r\n\t\t\telement.classList.add(\"tabulator-frozen\");\r\n\t\t\t\r\n\t\t\tif(column.modules.frozen.edge){\r\n\t\t\t\telement.classList.add(\"tabulator-frozen-\" + column.modules.frozen.position);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\t_calcSpace(columns, index){\r\n\t\tvar width = 0;\r\n\t\t\r\n\t\tfor (let i = 0; i < index; i++){\r\n\t\t\tif(columns[i].visible){\r\n\t\t\t\twidth += columns[i].getWidth();\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\treturn width;\r\n\t}\r\n}\r\n\r\nFrozenColumns.moduleName = \"frozenColumns\";\r\n\r\nexport default FrozenColumns;","import Module from '../../core/Module.js';\r\n\r\nclass FrozenRows extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.topElement = document.createElement(\"div\");\r\n\t\tthis.rows = [];\r\n\r\n\t\t//register component functions\r\n\t\tthis.registerComponentFunction(\"row\", \"freeze\", this.freezeRow.bind(this));\r\n\t\tthis.registerComponentFunction(\"row\", \"unfreeze\", this.unfreezeRow.bind(this));\r\n\t\tthis.registerComponentFunction(\"row\", \"isFrozen\", this.isRowFrozen.bind(this));\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tthis.rows = [];\r\n\r\n\t\tthis.topElement.classList.add(\"tabulator-frozen-rows-holder\");\r\n\r\n\t\t// this.table.columnManager.element.append(this.topElement);\r\n\t\tthis.table.columnManager.getElement().insertBefore(this.topElement, this.table.columnManager.headersElement.nextSibling);\r\n\r\n\t\tthis.subscribe(\"row-deleting\", this.detachRow.bind(this));\r\n\t\tthis.subscribe(\"rows-visible\", this.visibleRows.bind(this));\r\n\r\n\t\tthis.registerDisplayHandler(this.getRows.bind(this), 10);\r\n\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 self = this,\r\n\t\tfrozen = [],\r\n\t\toutput = rows.slice(0);\r\n\r\n\t\tthis.rows.forEach(function(row){\r\n\t\t\tvar index = output.indexOf(row);\r\n\r\n\t\t\tif(index > -1){\r\n\t\t\t\toutput.splice(index, 1);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tfreezeRow(row){\r\n\t\tif(!row.modules.frozen){\r\n\t\t\trow.modules.frozen = true;\r\n\t\t\tthis.topElement.appendChild(row.getElement());\r\n\t\t\trow.initialize();\r\n\t\t\trow.normalizeHeight();\r\n\t\t\tthis.table.rowManager.adjustTableSize();\r\n\r\n\t\t\tthis.rows.push(row);\r\n\r\n\t\t\tthis.refreshData(false, \"display\")\r\n\r\n\t\t\tthis.styleRows();\r\n\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Freeze Error - Row is already frozen\");\r\n\t\t}\r\n\t}\r\n\r\n\tunfreezeRow(row){\r\n\t\tvar index = this.rows.indexOf(row);\r\n\r\n\t\tif(row.modules.frozen){\r\n\r\n\t\t\trow.modules.frozen = false;\r\n\r\n\t\t\tthis.detachRow(row);\r\n\r\n\t\t\tthis.table.rowManager.adjustTableSize();\r\n\r\n\t\t\tthis.refreshData(false, \"display\")\r\n\r\n\t\t\tif(this.rows.length){\r\n\t\t\t\tthis.styleRows();\r\n\t\t\t}\r\n\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Freeze Error - Row is already unfrozen\");\r\n\t\t}\r\n\t}\r\n\r\n\tdetachRow(row){\r\n\t\tvar index = this.rows.indexOf(row);\r\n\r\n\t\tif(index > -1){\r\n\t\t\tvar rowEl = row.getElement();\r\n\r\n\t\t\tif(rowEl.parentNode){\r\n\t\t\t\trowEl.parentNode.removeChild(rowEl);\r\n\t\t\t}\r\n\r\n\t\t\tthis.rows.splice(index, 1);\r\n\t\t}\r\n\t}\r\n\r\n\tstyleRows(row){\r\n\t\tthis.rows.forEach((row, i) => {\r\n\t\t\tthis.table.rowManager.styleRow(row, i);\r\n\t\t});\r\n\t}\r\n}\r\n\r\nFrozenRows.moduleName = \"frozenRows\";\r\n\r\nexport default FrozenRows;","//public group object\r\nclass GroupComponent {\r\n\tconstructor (group){\r\n\t\tthis._group = group;\r\n\t\tthis.type = \"GroupComponent\";\r\n\r\n\t\treturn new Proxy(this, {\r\n\t\t\tget: function(target, name, receiver) {\r\n\t\t\t\tif (typeof target[name] !== \"undefined\") {\r\n\t\t\t\t\treturn target[name];\r\n\t\t\t\t}else{\r\n\t\t\t\t\treturn target._group.groupManager.table.componentFunctionBinder.handle(\"row\", target._group, name)\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t})\r\n\t}\r\n\r\n\tgetKey(){\r\n\t\treturn this._group.key;\r\n\t}\r\n\r\n\tgetField(){\r\n\t\treturn this._group.field;\r\n\t}\r\n\r\n\tgetElement(){\r\n\t\treturn this._group.element;\r\n\t}\r\n\r\n\tgetRows(){\r\n\t\treturn this._group.getRows(true);\r\n\t}\r\n\r\n\tgetSubGroups(){\r\n\t\treturn this._group.getSubGroups(true);\r\n\t}\r\n\r\n\tgetParentGroup(){\r\n\t\treturn this._group.parent ? this._group.parent.getComponent() : false;\r\n\t}\r\n\r\n\tisVisible(){\r\n\t\treturn this._group.visible;\r\n\t}\r\n\r\n\tshow(){\r\n\t\tthis._group.show();\r\n\t}\r\n\r\n\thide(){\r\n\t\tthis._group.hide();\r\n\t}\r\n\r\n\ttoggle(){\r\n\t\tthis._group.toggleVisibility();\r\n\t}\r\n\r\n\t_getSelf(){\r\n\t\treturn this._group;\r\n\t}\r\n\r\n\tgetTable(){\r\n\t\treturn this._group.groupManager.table;\r\n\t}\r\n}\r\n\r\nexport default GroupComponent;","import Helpers from '../../core/tools/Helpers.js';\r\nimport GroupComponent from './GroupComponent.js';\r\n\r\n//Group functions\r\nclass Group{\r\n\t\r\n\tconstructor(groupManager, parent, level, key, field, generator, oldGroup){\r\n\t\tthis.groupManager = groupManager;\r\n\t\tthis.parent = parent;\r\n\t\tthis.key = key;\r\n\t\tthis.level = level;\r\n\t\tthis.field = field;\r\n\t\tthis.hasSubGroups = level < (groupManager.groupIDLookups.length - 1);\r\n\t\tthis.addRow = this.hasSubGroups ? this._addRowToGroup : this._addRow;\r\n\t\tthis.type = \"group\"; //type of element\r\n\t\tthis.old = oldGroup;\r\n\t\tthis.rows = [];\r\n\t\tthis.groups = [];\r\n\t\tthis.groupList = [];\r\n\t\tthis.generator = generator;\r\n\t\tthis.element = false;\r\n\t\tthis.elementContents = false;\r\n\t\tthis.height = 0;\r\n\t\tthis.outerHeight = 0;\r\n\t\tthis.initialized = false;\r\n\t\tthis.calcs = {};\r\n\t\tthis.initialized = false;\r\n\t\tthis.modules = {};\r\n\t\tthis.arrowElement = false;\r\n\t\t\r\n\t\tthis.visible = oldGroup ? oldGroup.visible : (typeof groupManager.startOpen[level] !== \"undefined\" ? groupManager.startOpen[level] : groupManager.startOpen[0]);\r\n\t\t\r\n\t\tthis.component = null;\r\n\t\t\r\n\t\tthis.createElements();\r\n\t\tthis.addBindings();\r\n\t\t\r\n\t\tthis.createValueGroups();\r\n\t}\r\n\t\r\n\twipe(){\r\n\t\tif(this.groupList.length){\r\n\t\t\tthis.groupList.forEach(function(group){\r\n\t\t\t\tgroup.wipe();\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tthis.rows.forEach((row) => {\r\n\t\t\t\tif(row.modules){\r\n\t\t\t\t\tdelete row.modules.group;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t\t\r\n\t\tthis.element = false;\r\n\t\tthis.arrowElement = false;\r\n\t\tthis.elementContents = false;\r\n\t}\r\n\t\r\n\tcreateElements(){\r\n\t\tvar arrow = document.createElement(\"div\");\r\n\t\tarrow.classList.add(\"tabulator-arrow\");\r\n\t\t\r\n\t\tthis.element = document.createElement(\"div\");\r\n\t\tthis.element.classList.add(\"tabulator-row\");\r\n\t\tthis.element.classList.add(\"tabulator-group\");\r\n\t\tthis.element.classList.add(\"tabulator-group-level-\" + this.level);\r\n\t\tthis.element.setAttribute(\"role\", \"rowgroup\");\r\n\t\t\r\n\t\tthis.arrowElement = document.createElement(\"div\");\r\n\t\tthis.arrowElement.classList.add(\"tabulator-group-toggle\");\r\n\t\tthis.arrowElement.appendChild(arrow);\r\n\t\t\r\n\t\t//setup movable rows\r\n\t\tif(this.groupManager.table.options.movableRows !== false && this.groupManager.table.modExists(\"moveRow\")){\r\n\t\t\tthis.groupManager.table.modules.moveRow.initializeGroupHeader(this);\r\n\t\t}\r\n\t}\r\n\t\r\n\tcreateValueGroups(){\r\n\t\tvar level = this.level + 1;\r\n\t\tif(this.groupManager.allowedValues && this.groupManager.allowedValues[level]){\r\n\t\t\tthis.groupManager.allowedValues[level].forEach((value) => {\r\n\t\t\t\tthis._createGroup(value, level);\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\t\r\n\taddBindings(){\r\n\t\tvar toggleElement;\r\n\t\t\r\n\t\tif(this.groupManager.table.options.groupToggleElement){\r\n\t\t\ttoggleElement = this.groupManager.table.options.groupToggleElement == \"arrow\" ? this.arrowElement : this.element;\r\n\t\t\t\r\n\t\t\ttoggleElement.addEventListener(\"click\", (e) => {\r\n\t\t\t\te.stopPropagation();\r\n\t\t\t\te.stopImmediatePropagation();\r\n\t\t\t\tthis.toggleVisibility();\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\t\r\n\t_createGroup(groupID, level){\r\n\t\tvar groupKey = level + \"_\" + groupID;\r\n\t\tvar group = new Group(this.groupManager, this, level, groupID, this.groupManager.groupIDLookups[level].field, this.groupManager.headerGenerator[level] || this.groupManager.headerGenerator[0], this.old ? this.old.groups[groupKey] : false);\r\n\t\t\r\n\t\tthis.groups[groupKey] = group;\r\n\t\tthis.groupList.push(group);\r\n\t}\r\n\t\r\n\t_addRowToGroup(row){\r\n\t\t\r\n\t\tvar level = this.level + 1;\r\n\t\t\r\n\t\tif(this.hasSubGroups){\r\n\t\t\tvar groupID = this.groupManager.groupIDLookups[level].func(row.getData()),\r\n\t\t\tgroupKey = level + \"_\" + groupID;\r\n\t\t\t\r\n\t\t\tif(this.groupManager.allowedValues && this.groupManager.allowedValues[level]){\r\n\t\t\t\tif(this.groups[groupKey]){\r\n\t\t\t\t\tthis.groups[groupKey].addRow(row);\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tif(!this.groups[groupKey]){\r\n\t\t\t\t\tthis._createGroup(groupID, level);\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\tthis.groups[groupKey].addRow(row);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\t_addRow(row){\r\n\t\tthis.rows.push(row);\r\n\t\trow.modules.group = this;\r\n\t}\r\n\t\r\n\tinsertRow(row, to, after){\r\n\t\tvar data = this.conformRowData({});\r\n\t\t\r\n\t\trow.updateData(data);\r\n\t\t\r\n\t\tvar toIndex = this.rows.indexOf(to);\r\n\t\t\r\n\t\tif(toIndex > -1){\r\n\t\t\tif(after){\r\n\t\t\t\tthis.rows.splice(toIndex+1, 0, row);\r\n\t\t\t}else{\r\n\t\t\t\tthis.rows.splice(toIndex, 0, row);\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tif(after){\r\n\t\t\t\tthis.rows.push(row);\r\n\t\t\t}else{\r\n\t\t\t\tthis.rows.unshift(row);\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\trow.modules.group = this;\r\n\t\t\r\n\t\tthis.generateGroupHeaderContents();\r\n\t\t\r\n\t\tif(this.groupManager.table.modExists(\"columnCalcs\") && this.groupManager.table.options.columnCalcs != \"table\"){\r\n\t\t\tthis.groupManager.table.modules.columnCalcs.recalcGroup(this);\r\n\t\t}\r\n\t\t\r\n\t\tthis.groupManager.updateGroupRows(true);\r\n\t}\r\n\t\r\n\tscrollHeader(left){\r\n\t\tif(this.arrowElement){\r\n\t\t\tthis.arrowElement.style.marginLeft = left;\r\n\t\t\t\r\n\t\t\tthis.groupList.forEach(function(child){\r\n\t\t\t\tchild.scrollHeader(left);\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\t\r\n\tgetRowIndex(row){}\r\n\t\r\n\t//update row data to match grouping contraints\r\n\tconformRowData(data){\r\n\t\tif(this.field){\r\n\t\t\tdata[this.field] = this.key;\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Data Conforming Error - Cannot conform row data to match new group as groupBy is a function\");\r\n\t\t}\r\n\t\t\r\n\t\tif(this.parent){\r\n\t\t\tdata = this.parent.conformRowData(data);\r\n\t\t}\r\n\t\t\r\n\t\treturn data;\r\n\t}\r\n\t\r\n\tremoveRow(row){\r\n\t\tvar index = this.rows.indexOf(row);\r\n\t\tvar el = row.getElement();\r\n\t\t\r\n\t\t\r\n\t\tif(index > -1){\r\n\t\t\tthis.rows.splice(index, 1);\r\n\t\t}\r\n\t\t\r\n\t\tif(!this.groupManager.table.options.groupValues && !this.rows.length){\r\n\t\t\tif(this.parent){\r\n\t\t\t\tthis.parent.removeGroup(this);\r\n\t\t\t}else{\r\n\t\t\t\tthis.groupManager.removeGroup(this);\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tthis.groupManager.updateGroupRows(true);\r\n\t\t}else{\r\n\t\t\t\r\n\t\t\tif(el.parentNode){\r\n\t\t\t\tel.parentNode.removeChild(el);\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tthis.generateGroupHeaderContents();\r\n\t\t\t\r\n\t\t\tif(this.groupManager.table.modExists(\"columnCalcs\") && this.groupManager.table.options.columnCalcs != \"table\"){\r\n\t\t\t\tthis.groupManager.table.modules.columnCalcs.recalcGroup(this);\r\n\t\t\t}\r\n\t\t\t\r\n\t\t}\r\n\t}\r\n\t\r\n\tremoveGroup(group){\r\n\t\tvar groupKey = group.level + \"_\" + group.key,\r\n\t\tindex;\r\n\t\t\r\n\t\tif(this.groups[groupKey]){\r\n\t\t\tdelete this.groups[groupKey];\r\n\t\t\t\r\n\t\t\tindex = this.groupList.indexOf(group);\r\n\t\t\t\r\n\t\t\tif(index > -1){\r\n\t\t\t\tthis.groupList.splice(index, 1);\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif(!this.groupList.length){\r\n\t\t\t\tif(this.parent){\r\n\t\t\t\t\tthis.parent.removeGroup(this);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tthis.groupManager.removeGroup(this);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\tgetHeadersAndRows(noCalc){\r\n\t\tvar output = [];\r\n\t\t\r\n\t\toutput.push(this);\r\n\t\t\r\n\t\tthis._visSet();\r\n\t\t\r\n\t\tif(this.visible){\r\n\t\t\tif(this.groupList.length){\r\n\t\t\t\tthis.groupList.forEach(function(group){\r\n\t\t\t\t\toutput = output.concat(group.getHeadersAndRows(noCalc));\r\n\t\t\t\t});\r\n\t\t\t\t\r\n\t\t\t}else{\r\n\t\t\t\tif(!noCalc && this.groupManager.table.options.columnCalcs != \"table\" && this.groupManager.table.modExists(\"columnCalcs\") && this.groupManager.table.modules.columnCalcs.hasTopCalcs()){\r\n\t\t\t\t\tif(this.calcs.top){\r\n\t\t\t\t\t\tthis.calcs.top.detachElement();\r\n\t\t\t\t\t\tthis.calcs.top.deleteCells();\r\n\t\t\t\t\t}\r\n\t\t\t\t\t\r\n\t\t\t\t\tthis.calcs.top = this.groupManager.table.modules.columnCalcs.generateTopRow(this.rows);\r\n\t\t\t\t\toutput.push(this.calcs.top);\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\toutput = output.concat(this.rows);\r\n\t\t\t\t\r\n\t\t\t\tif(!noCalc && this.groupManager.table.options.columnCalcs != \"table\" && this.groupManager.table.modExists(\"columnCalcs\") && this.groupManager.table.modules.columnCalcs.hasBottomCalcs()){\r\n\t\t\t\t\tif(this.calcs.bottom){\r\n\t\t\t\t\t\tthis.calcs.bottom.detachElement();\r\n\t\t\t\t\t\tthis.calcs.bottom.deleteCells();\r\n\t\t\t\t\t}\r\n\t\t\t\t\t\r\n\t\t\t\t\tthis.calcs.bottom = this.groupManager.table.modules.columnCalcs.generateBottomRow(this.rows);\r\n\t\t\t\t\toutput.push(this.calcs.bottom);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tif(!this.groupList.length && this.groupManager.table.options.columnCalcs != \"table\"){\r\n\t\t\t\t\r\n\t\t\t\tif(this.groupManager.table.modExists(\"columnCalcs\")){\r\n\t\t\t\t\t\r\n\t\t\t\t\tif(!noCalc && this.groupManager.table.modules.columnCalcs.hasTopCalcs()){\r\n\t\t\t\t\t\tif(this.calcs.top){\r\n\t\t\t\t\t\t\tthis.calcs.top.detachElement();\r\n\t\t\t\t\t\t\tthis.calcs.top.deleteCells();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\tif(this.groupManager.table.options.groupClosedShowCalcs){\r\n\t\t\t\t\t\t\tthis.calcs.top = this.groupManager.table.modules.columnCalcs.generateTopRow(this.rows);\r\n\t\t\t\t\t\t\toutput.push(this.calcs.top);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\t\r\n\t\t\t\t\tif(!noCalc && this.groupManager.table.modules.columnCalcs.hasBottomCalcs()){\r\n\t\t\t\t\t\tif(this.calcs.bottom){\r\n\t\t\t\t\t\t\tthis.calcs.bottom.detachElement();\r\n\t\t\t\t\t\t\tthis.calcs.bottom.deleteCells();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\tif(this.groupManager.table.options.groupClosedShowCalcs){\r\n\t\t\t\t\t\t\tthis.calcs.bottom = this.groupManager.table.modules.columnCalcs.generateBottomRow(this.rows);\r\n\t\t\t\t\t\t\toutput.push(this.calcs.bottom);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t\r\n\t\t}\r\n\t\t\r\n\t\treturn output;\r\n\t}\r\n\t\r\n\tgetData(visible, transform){\r\n\t\tvar output = [];\r\n\t\t\r\n\t\tthis._visSet();\r\n\t\t\r\n\t\tif(!visible || (visible && this.visible)){\r\n\t\t\tthis.rows.forEach((row) => {\r\n\t\t\t\toutput.push(row.getData(transform || \"data\"));\r\n\t\t\t});\r\n\t\t}\r\n\t\t\r\n\t\treturn output;\r\n\t}\r\n\t\r\n\tgetRowCount(){\r\n\t\tvar count = 0;\r\n\t\t\r\n\t\tif(this.groupList.length){\r\n\t\t\tthis.groupList.forEach((group) => {\r\n\t\t\t\tcount += group.getRowCount();\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tcount = this.rows.length;\r\n\t\t}\r\n\t\treturn count;\r\n\t}\r\n\t\r\n\ttoggleVisibility(){\r\n\t\tif(this.visible){\r\n\t\t\tthis.hide();\r\n\t\t}else{\r\n\t\t\tthis.show();\r\n\t\t}\r\n\t}\r\n\t\r\n\thide(){\r\n\t\tthis.visible = false;\r\n\t\t\r\n\t\tif(this.groupManager.table.rowManager.getRenderMode() == \"classic\" && !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.table.rowManager.setDisplayRows(this.groupManager.updateGroupRows(), this.groupManager.getDisplayIndex());\r\n\t\t\t\r\n\t\t\tthis.groupManager.table.rowManager.checkClassicModeGroupHeaderWidth();\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() == \"classic\" && !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.table.rowManager.setDisplayRows(this.groupManager.updateGroupRows(), this.groupManager.getDisplayIndex());\r\n\t\t\t\r\n\t\t\tthis.groupManager.table.rowManager.checkClassicModeGroupHeaderWidth();\r\n\t\t}else{\r\n\t\t\tthis.groupManager.updateGroupRows(true);\r\n\t\t}\r\n\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(compoment){\r\n\t\tvar output = [];\r\n\t\t\r\n\t\tthis.rows.forEach(function(row){\r\n\t\t\toutput.push(compoment ? 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 GroupComponent from './GroupComponent.js';\r\nimport Group from './Group.js';\r\n\r\nclass GroupRows extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.groupIDLookups = false; //enable table grouping and set field to group by\r\n\t\tthis.startOpen = [function(){return false;}]; //starting state of group\r\n\t\tthis.headerGenerator = [function(){return \"\";}];\r\n\t\tthis.groupList = []; //ordered list of groups\r\n\t\tthis.allowedValues = false;\r\n\t\tthis.groups = {}; //hold row groups\r\n\t\tthis.displayIndex = 0; //index in display pipeline\r\n\r\n\t\tthis.displayHandler = this.getRows.bind(this);\r\n\r\n\t\t//register table options\r\n\t\tthis.registerTableOption(\"groupBy\", false); //enable table grouping and set field to group by\r\n\t\tthis.registerTableOption(\"groupStartOpen\", true); //starting state of group\r\n\t\tthis.registerTableOption(\"groupValues\", false);\r\n\t\tthis.registerTableOption(\"groupUpdateOnCellEdit\", false);\r\n\t\tthis.registerTableOption(\"groupHeader\", false); //header generation function\r\n\t\tthis.registerTableOption(\"groupHeaderPrint\", null);\r\n\t\tthis.registerTableOption(\"groupHeaderClipboard\", null);\r\n\t\tthis.registerTableOption(\"groupHeaderHtmlOutput\", null);\r\n\t\tthis.registerTableOption(\"groupHeaderDownload\", null);\r\n\t\tthis.registerTableOption(\"groupToggleElement\", \"arrow\");\r\n\t\tthis.registerTableOption(\"groupClosedShowCalcs\", false);\r\n\r\n\t\t//register table functions\r\n\t\tthis.registerTableFunction(\"setGroupBy\", this.setGroupBy.bind(this));\r\n\t\tthis.registerTableFunction(\"setGroupValues\", this.setGroupValues.bind(this));\r\n\t\tthis.registerTableFunction(\"setGroupStartOpen\", this.setGroupStartOpen.bind(this));\r\n\t\tthis.registerTableFunction(\"setGroupHeader\", this.setGroupHeader.bind(this));\r\n\t\tthis.registerTableFunction(\"getGroups\", this.userGetGroups.bind(this));\r\n\t\tthis.registerTableFunction(\"getGroupedData\", this.userGetGroupedData.bind(this));\r\n\r\n\t\t//register component functions\r\n\t\tthis.registerComponentFunction(\"row\", \"getGroup\", this.rowGetGroup.bind(this));\r\n\t}\r\n\r\n\t//initialize group configuration\r\n\tinitialize(){\r\n\t\tif(this.table.options.groupBy){\r\n\r\n\t\t\tif(this.table.options.groupUpdateOnCellEdit){\r\n\t\t\t\tthis.subscribe(\"cell-value-updated\", this.cellUpdated.bind(this));\r\n\t\t\t\tthis.subscribe(\"row-data-changed\", this.reassignRowToGroup.bind(this), 0);\r\n\t\t\t}\r\n\r\n\t\t\tthis.subscribe(\"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\r\n\t\t\tthis.subscribe(\"rows-sample\", this.rowSample.bind(this));\r\n\r\n\t\t\tthis.subscribe(\"render-virtual-fill\", this.virtualRenderFill.bind(this));\r\n\r\n\t\t\tthis.registerDisplayHandler(this.displayHandler, 20);\r\n\r\n\t\t\tthis.initialized = true;\r\n\t\t}\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\r\n\t\t\tthis.allowedValues = this.table.options.groupValues;\r\n\r\n\t\t\tif(Array.isArray(groupBy) && Array.isArray(groupHeader) && groupBy.length > groupHeader.length){\r\n\t\t\t\tconsole.warn(\"Error creating group headers, groupHeader array is shorter than groupBy array\");\r\n\t\t\t}\r\n\r\n\t\t\tthis.headerGenerator = [function(){return \"\";}];\r\n\t\t\tthis.startOpen = [function(){return false;}]; //starting state of group\r\n\r\n\t\t\tthis.langBind(\"groups|item\", (langValue, lang) => {\r\n\t\t\t\tthis.headerGenerator[0] = (value, count, data) => { //header layout function\r\n\t\t\t\t\treturn (typeof value === \"undefined\" ? \"\" : value) + \"(\" + count + \" \" + ((count === 1) ? langValue : lang.groups.items) + \")\";\r\n\t\t\t\t};\r\n\t\t\t});\r\n\r\n\t\t\tthis.groupIDLookups = [];\r\n\r\n\t\t\tif(Array.isArray(groupBy) || groupBy){\r\n\t\t\t\tif(this.table.modExists(\"columnCalcs\") && this.table.options.columnCalcs != \"table\" && this.table.options.columnCalcs != \"both\"){\r\n\t\t\t\t\tthis.table.modules.columnCalcs.removeCalcs();\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tif(this.table.modExists(\"columnCalcs\") && this.table.options.columnCalcs != \"group\"){\r\n\r\n\t\t\t\t\tvar cols = this.table.columnManager.getRealColumns();\r\n\r\n\t\t\t\t\tcols.forEach((col) => {\r\n\t\t\t\t\t\tif(col.definition.topCalc){\r\n\t\t\t\t\t\t\tthis.table.modules.columnCalcs.initializeTopRow();\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif(col.definition.bottomCalc){\r\n\t\t\t\t\t\t\tthis.table.modules.columnCalcs.initializeBottomRow();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif(!Array.isArray(groupBy)){\r\n\t\t\t\tgroupBy = [groupBy];\r\n\t\t\t}\r\n\r\n\t\t\tgroupBy.forEach((group, i) => {\r\n\t\t\t\tvar lookupFunc, column;\r\n\r\n\t\t\t\tif(typeof group == \"function\"){\r\n\t\t\t\t\tlookupFunc = group;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tcolumn = this.table.columnManager.getColumnByField(group);\r\n\r\n\t\t\t\t\tif(column){\r\n\t\t\t\t\t\tlookupFunc = function(data){\r\n\t\t\t\t\t\t\treturn column.getFieldValue(data);\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tlookupFunc = function(data){\r\n\t\t\t\t\t\t\treturn data[group];\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.groupIDLookups.push({\r\n\t\t\t\t\tfield: typeof group === \"function\" ? false : group,\r\n\t\t\t\t\tfunc:lookupFunc,\r\n\t\t\t\t\tvalues:this.allowedValues ? this.allowedValues[i] : false,\r\n\t\t\t\t});\r\n\t\t\t});\r\n\r\n\t\t\tif(startOpen){\r\n\t\t\t\tif(!Array.isArray(startOpen)){\r\n\t\t\t\t\tstartOpen = [startOpen];\r\n\t\t\t\t}\r\n\r\n\t\t\t\tstartOpen.forEach((level) => {\r\n\t\t\t\t\tlevel = typeof level == \"function\" ? level : function(){return true;};\r\n\t\t\t\t});\r\n\r\n\t\t\t\tthis.startOpen = startOpen;\r\n\t\t\t}\r\n\r\n\t\t\tif(groupHeader){\r\n\t\t\t\tthis.headerGenerator = Array.isArray(groupHeader) ? groupHeader : [groupHeader];\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\trowSample(rows, prevValue){\r\n\t\tvar group = this.getGroups(false)[0];\r\n\r\n\t\tprevValue.push(group.getRows(false)[0]);\r\n\r\n\t\treturn prevValue;\r\n\t}\r\n\r\n\tvirtualRenderFill(){\r\n\t\tvar el = this.table.rowManager.tableElement;\r\n\t\tvar rows = this.table.rowManager.getVisibleRows();\r\n\r\n\t\trows = rows.filter((row) => {\r\n\t\t\treturn row.type !== \"group\";\r\n\t\t});\r\n\r\n\t\tel.style.minWidth = !rows.length ? this.table.columnManager.getWidth() + \"px\" : \"\";\r\n\r\n\t\t// if(this.table.options.groupBy){\r\n\t\t// \tif(this.layoutMode() != \"fitDataFill\" && rowsCount == this.table.modules.groupRows.countGroups()){\r\n\t\t// \t\tel.style.minWidth = this.table.columnManager.getWidth() + \"px\";\r\n\t\t// \t}\r\n\t\t// }\r\n\t}\r\n\r\n\trowAddingIndex(row, index, top){\r\n\t\tthis.assignRowToGroup(row);\r\n\r\n\t\tvar groupRows = row.modules.group.rows;\r\n\r\n\t\tif(groupRows.length > 1){\r\n\t\t\tif(!index || (index && groupRows.indexOf(index) == -1)){\r\n\t\t\t\tif(top){\r\n\t\t\t\t\tif(groupRows[0] !== row){\r\n\t\t\t\t\t\tindex = groupRows[0];\r\n\t\t\t\t\t\tthis.table.rowManager.moveRowInArray(row.modules.group.rows, row, index, !top);\r\n\t\t\t\t\t}\r\n\t\t\t\t}else{\r\n\t\t\t\t\tif(groupRows[groupRows.length -1] !== row){\r\n\t\t\t\t\t\tindex = groupRows[groupRows.length -1];\r\n\t\t\t\t\t\tthis.table.rowManager.moveRowInArray(row.modules.group.rows, row, index, !top);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tthis.table.rowManager.moveRowInArray(row.modules.group.rows, row, index, !top);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn index;\r\n\t}\r\n\r\n\ttrackChanges(){\r\n\t\tthis.dispatch(\"group-changed\");\r\n\t}\r\n\r\n\t///////////////////////////////////\r\n\t///////// Table Functions /////////\r\n\t///////////////////////////////////\r\n\r\n\tsetGroupBy(groups){\r\n\t\tthis.table.options.groupBy = groups;\r\n\t\tif(!this.initialized){\r\n\t\t\tthis.initialize();\r\n\t\t}else{\r\n\t\t\tthis.configureGroupSetup();\r\n\t\t}\r\n\r\n\t\tthis.refreshData();\r\n\r\n\t\tthis.trackChanges();\r\n\t}\r\n\r\n\tsetGroupValues(groupValues){\r\n\t\tthis.table.options.groupValues = groupValues;\r\n\t\tthis.configureGroupSetup();\r\n\t\tthis.refreshData();\r\n\r\n\t\tthis.trackChanges();\r\n\t}\r\n\r\n\tsetGroupStartOpen(values){\r\n\t\tthis.table.options.groupStartOpen = values;\r\n\t\tthis.configureGroupSetup();\r\n\r\n\t\tif(this.table.options.groupBy){\r\n\t\t\tthis.refreshData();\r\n\r\n\t\t\tthis.trackChanges();\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Grouping Update - cant refresh view, no groups have been set\");\r\n\t\t}\r\n\t}\r\n\r\n\tsetGroupHeader(values){\r\n\t\tthis.table.options.groupHeader = values;\r\n\t\tthis.configureGroupSetup();\r\n\r\n\t\tif(this.table.options.groupBy){\r\n\t\t\tthis.refreshData();\r\n\r\n\t\t\tthis.trackChanges();\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Grouping Update - cant refresh view, no groups have been set\");\r\n\t\t}\r\n\t}\r\n\r\n\tuserGetGroups(values){\r\n\t\treturn this.getGroups(true);\r\n\t}\r\n\r\n\t// get grouped table data in the same format as getData()\r\n\tuserGetGroupedData(){\r\n\t\treturn this.table.options.groupBy ?\r\n\t\tthis.getGroupedData() : this.getData()\r\n\t}\r\n\r\n\r\n\t///////////////////////////////////////\r\n\t///////// Component Functions /////////\r\n\t///////////////////////////////////////\r\n\r\n\trowGetGroup(row){\r\n\t\treturn row.modules.group ? row.modules.group.getComponent() : false;\r\n\t}\r\n\r\n\t///////////////////////////////////\r\n\t///////// Internal Logic //////////\r\n\t///////////////////////////////////\r\n\r\n\trowMoving(from, to, after){\r\n\t\tif(!after && to instanceof Group){\r\n\t\t\tto = this.table.rowManager.prevDisplayRow(from) || to;\r\n\t\t}\r\n\r\n\t\tvar toGroup = to instanceof Group ? to : to.modules.group;\r\n\t\tvar fromGroup = from instanceof Group ? from : from.modules.group;\r\n\r\n\t\tif(toGroup === fromGroup){\r\n\t\t\tthis.table.rowManager.moveRowInArray(toGroup.rows, from, to, after);\r\n\t\t}else{\r\n\t\t\tif(fromGroup){\r\n\t\t\t\tfromGroup.removeRow(from);\r\n\t\t\t}\r\n\r\n\t\t\ttoGroup.insertRow(from, to, after);\r\n\t\t}\r\n\t}\r\n\r\n\r\n\trowDeleting(row){\r\n\t\t//remove from group\r\n\t\tif(row.modules.group){\r\n\t\t\trow.modules.group.removeRow(row);\r\n\t\t}\r\n\t}\r\n\r\n\r\n\trowsUpdated(row){\r\n\t\tthis.updateGroupRows(true);\r\n\t}\r\n\r\n\tcellUpdated(cell){\r\n\t\tthis.reassignRowToGroup(cell.row);\r\n\t}\r\n\r\n\r\n\tsetDisplayIndex(index){\r\n\t\tthis.displayIndex = index;\r\n\t}\r\n\r\n\tgetDisplayIndex(){\r\n\t\treturn this.displayIndex;\r\n\t}\r\n\r\n\t//return appropriate rows with group headers\r\n\tgetRows(rows){\r\n\t\tif(this.table.options.groupBy && this.groupIDLookups.length){\r\n\r\n\t\t\tthis.dispatchExternal(\"dataGrouping\");\r\n\r\n\t\t\tthis.generateGroups(rows);\r\n\r\n\t\t\tif(this.subscribedExternal(\"dataGrouped\")){\r\n\t\t\t\tthis.dispatchExternal(\"dataGrouped\", this.getGroups(true));\r\n\t\t\t}\r\n\r\n\t\t\treturn this.updateGroupRows();\r\n\r\n\t\t}else{\r\n\t\t\treturn rows.slice(0);\r\n\t\t}\r\n\t}\r\n\r\n\tgetGroups(component){\r\n\t\tvar groupComponents = [];\r\n\r\n\t\tthis.groupList.forEach(function(group){\r\n\t\t\tgroupComponents.push(component ? group.getComponent() : group);\r\n\t\t});\r\n\r\n\t\treturn groupComponents;\r\n\t}\r\n\r\n\tgetChildGroups(group){\r\n\t\tvar groupComponents = [];\r\n\r\n\t\tif(!group){\r\n\t\t\tgroup = this;\r\n\t\t}\r\n\r\n\t\tgroup.groupList.forEach((child) => {\r\n\t\t\tif(child.groupList.length){\r\n\t\t\t\tgroupComponents = groupComponents.concat(this.getChildGroups(child));\r\n\t\t\t}else{\r\n\t\t\t\tgroupComponents.push(child);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn groupComponents;\r\n\t}\r\n\r\n\twipe(){\r\n\t\tthis.groupList.forEach(function(group){\r\n\t\t\tgroup.wipe();\r\n\t\t});\r\n\t}\r\n\r\n\tpullGroupListData(groupList) {\r\n\t\tvar groupListData = [];\r\n\r\n\t\tgroupList.forEach((group) => {\r\n\t\t\tvar groupHeader = {};\r\n\t\t\tgroupHeader.level = 0;\r\n\t\t\tgroupHeader.rowCount = 0;\r\n\t\t\tgroupHeader.headerContent = \"\";\r\n\t\t\tvar childData = [];\r\n\r\n\t\t\tif (group.hasSubGroups) {\r\n\t\t\t\tchildData = this.pullGroupListData(group.groupList);\r\n\r\n\t\t\t\tgroupHeader.level = group.level;\r\n\t\t\t\tgroupHeader.rowCount = childData.length - group.groupList.length; // data length minus number of sub-headers\r\n\t\t\t\tgroupHeader.headerContent = group.generator(group.key, groupHeader.rowCount, group.rows, group);\r\n\r\n\t\t\t\tgroupListData.push(groupHeader);\r\n\t\t\t\tgroupListData = groupListData.concat(childData);\r\n\t\t\t}\r\n\r\n\t\t\telse {\r\n\t\t\t\tgroupHeader.level = group.level;\r\n\t\t\t\tgroupHeader.headerContent = group.generator(group.key, group.rows.length, group.rows, group);\r\n\t\t\t\tgroupHeader.rowCount = group.getRows().length;\r\n\r\n\t\t\t\tgroupListData.push(groupHeader);\r\n\r\n\t\t\t\tgroup.getRows().forEach((row) => {\r\n\t\t\t\t\tgroupListData.push(row.getData(\"data\"));\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn groupListData\r\n\t}\r\n\r\n\tgetGroupedData(){\r\n\r\n\t\treturn this.pullGroupListData(this.groupList);\r\n\t}\r\n\r\n\tgetRowGroup(row){\r\n\t\tvar match = false;\r\n\r\n\t\tthis.groupList.forEach((group) => {\r\n\t\t\tvar result = group.getRowGroup(row);\r\n\r\n\t\t\tif(result){\r\n\t\t\t\tmatch = result;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn match;\r\n\t}\r\n\r\n\tcountGroups(){\r\n\t\treturn this.groupList.length;\r\n\t}\r\n\r\n\tgenerateGroups(rows){\r\n\t\tvar oldGroups = this.groups;\r\n\r\n\t\tthis.groups = {};\r\n\t\tthis.groupList = [];\r\n\r\n\t\tif(this.allowedValues && this.allowedValues[0]){\r\n\t\t\tthis.allowedValues[0].forEach((value) => {\r\n\t\t\t\tthis.createGroup(value, 0, oldGroups);\r\n\t\t\t});\r\n\r\n\t\t\trows.forEach((row) => {\r\n\t\t\t\tthis.assignRowToExistingGroup(row, oldGroups);\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\trows.forEach((row) => {\r\n\t\t\t\tthis.assignRowToGroup(row, oldGroups);\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tcreateGroup(groupID, level, oldGroups){\r\n\t\tvar groupKey = level + \"_\" + groupID,\r\n\t\tgroup;\r\n\r\n\t\toldGroups = oldGroups || [];\r\n\r\n\t\tgroup = new Group(this, false, level, groupID, this.groupIDLookups[0].field, this.headerGenerator[0], oldGroups[groupKey]);\r\n\r\n\t\tthis.groups[groupKey] = group;\r\n\t\tthis.groupList.push(group);\r\n\t}\r\n\r\n\tassignRowToExistingGroup(row, oldGroups){\r\n\t\tvar groupID = this.groupIDLookups[0].func(row.getData()),\r\n\t\tgroupKey = \"0_\" + groupID;\r\n\r\n\t\tif(this.groups[groupKey]){\r\n\t\t\tthis.groups[groupKey].addRow(row);\r\n\t\t}\r\n\t}\r\n\r\n\tassignRowToGroup(row, oldGroups){\r\n\t\tvar groupID = this.groupIDLookups[0].func(row.getData()),\r\n\t\tnewGroupNeeded = !this.groups[\"0_\" + groupID];\r\n\r\n\t\tif(newGroupNeeded){\r\n\t\t\tthis.createGroup(groupID, 0, oldGroups);\r\n\t\t}\r\n\r\n\t\tthis.groups[\"0_\" + groupID].addRow(row);\r\n\r\n\t\treturn !newGroupNeeded;\r\n\t}\r\n\r\n\treassignRowToGroup(row){\r\n\t\tif(row.type === \"row\"){\r\n\t\t\tvar oldRowGroup = row.modules.group,\r\n\t\t\toldGroupPath = oldRowGroup.getPath(),\r\n\t\t\tnewGroupPath = this.getExpectedPath(row),\r\n\t\t\tsamePath = true;\r\n\r\n\t\t\t// figure out if new group path is the same as old group path\r\n\t\t\tvar samePath = (oldGroupPath.length == newGroupPath.length) && oldGroupPath.every((element, index) => {\r\n\t\t\t\treturn element === newGroupPath[index];\r\n\t\t\t});\r\n\r\n\t\t\t// refresh if they new path and old path aren't the same (aka the row's groupings have changed)\r\n\t\t\tif(!samePath) {\r\n\t\t\t\toldRowGroup.removeRow(row);\r\n\t\t\t\tthis.assignRowToGroup(row, this.groups);\r\n\t\t\t\tthis.refreshData(true);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tgetExpectedPath(row) {\r\n\t\tvar groupPath = [], rowData = row.getData();\r\n\r\n\t\tthis.groupIDLookups.forEach((groupId) => {\r\n\t\t\tgroupPath.push(groupId.func(rowData));\r\n\t\t});\r\n\r\n\t\treturn groupPath;\r\n\t}\r\n\r\n\tupdateGroupRows(force){\r\n\t\tvar output = [],\r\n\t\toldRowCount;\r\n\r\n\t\tthis.groupList.forEach((group) => {\r\n\t\t\toutput = output.concat(group.getHeadersAndRows());\r\n\t\t});\r\n\r\n\t\tif(force){\r\n\t\t\tthis.refreshData(true, this.displayHandler);\r\n\t\t}\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tscrollHeaders(left){\r\n\t\tif(this.table.options.renderHorizontal === \"virtual\"){\r\n\t\t\tleft -= this.table.columnManager.renderer.vDomPadLeft;\r\n\t\t}\r\n\r\n\t\tleft = left + \"px\";\r\n\r\n\t\tthis.groupList.forEach((group) => {\r\n\t\t\tgroup.scrollHeader(left);\r\n\t\t});\r\n\t}\r\n\r\n\tremoveGroup(group){\r\n\t\tvar groupKey = group.level + \"_\" + group.key,\r\n\t\tindex;\r\n\r\n\t\tif(this.groups[groupKey]){\r\n\t\t\tdelete this.groups[groupKey];\r\n\r\n\t\t\tindex = this.groupList.indexOf(group);\r\n\r\n\t\t\tif(index > -1){\r\n\t\t\t\tthis.groupList.splice(index, 1);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n\r\nGroupRows.moduleName = \"groupRows\";\r\n\r\nexport default GroupRows;","import Module from '../../core/Module.js';\r\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:this.table.rowManager.getRowPosition(from), posTo:this.table.rowManager.getRowPosition(to), to:to, after:after});\r\n\t}\r\n\r\n\trowAdded(row, data, pos, index){\r\n\t\tthis.action(\"rowAdd\", row, {data:data, pos:pos, index:index});\r\n\t}\r\n\r\n\trowDeleted(row){\r\n\t\tvar index, rows;\r\n\r\n\t\tif(this.table.options.groupBy){\r\n\r\n\t\t\trows = row.getComponent().getGroup().rows\r\n\t\t\tindex = rows.indexOf(row);\r\n\r\n\t\t\tif(index){\r\n\t\t\t\tindex = rows[index-1];\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tindex = row.table.rowManager.getRowIndex(row);\r\n\r\n\t\t\tif(index){\r\n\t\t\t\tindex = row.table.rowManager.rows[index-1];\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.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\nimport Column from '../../core/column/Column.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\tthis.parseTable();\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\tcolumns = options.columns,\r\n\t\theaders = element.getElementsByTagName(\"th\"),\r\n\t\trows = element.getElementsByTagName(\"tbody\")[0],\r\n\t\tdata = [],\r\n\t\tnewTable;\r\n\r\n\t\tthis.hasIndex = false;\r\n\r\n\t\tthis.dispatchExternal(\"htmlImporting\");\r\n\r\n\t\trows = rows ? rows.getElementsByTagName(\"tr\") : [];\r\n\r\n\t\t//check for 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 dont exist in table\r\n\t\t\tif(!this.hasIndex){\r\n\t\t\t\titem[options.index] = index;\r\n\t\t\t}\r\n\r\n\t\t\tfor(var i = 0; i < cells.length; i++){\r\n\t\t\t\tvar cell = cells[i];\r\n\t\t\t\tif(typeof this.fieldIndex[i] !== \"undefined\"){\r\n\t\t\t\t\titem[this.fieldIndex[i]] = cell.innerHTML;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t//add row data to item\r\n\t\t\tdata.push(item);\r\n\t\t}\r\n\r\n\t\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, attributes;\r\n\r\n\t\t\tif(col){\r\n\t\t\t\texists = true;\r\n\t\t\t}else{\r\n\t\t\t\tcol = {title:header.textContent.trim()};\r\n\t\t\t}\r\n\r\n\t\t\tif(!col.field) {\r\n\t\t\t\tcol.field = header.textContent.trim().toLowerCase().replace(\" \", \"_\");\r\n\t\t\t}\r\n\r\n\t\t\twidth = header.getAttribute(\"width\");\r\n\r\n\t\t\tif(width && !col.width)\t{\r\n\t\t\t\tcol.width = width;\r\n\t\t\t}\r\n\r\n\t\t\t//check for 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\n\r\nexport default {\r\n\tcsv:csv,\r\n\tjson:json,\r\n};","function csvImporter(input){\r\n var data = [],\r\n row = 0, \r\n col = 0,\r\n inQuote = false;\r\n \r\n //Iterate over each character\r\n for (let index = 0; index < input.length; index++) {\r\n let char = input[index], \r\n nextChar = input[index+1]; \r\n \r\n //Initialize empty row\r\n if(!data[row]){\r\n data[row] = [];\r\n }\r\n\r\n //Initialize empty column\r\n if(!data[row][col]){\r\n data[row][col] = \"\";\r\n }\r\n \r\n //Handle quotation mark inside string\r\n if (char == '\"' && inQuote && nextChar == '\"') { \r\n data[row][col] += char; \r\n index++;\r\n continue; \r\n }\r\n \r\n //Begin / End Quote\r\n if (char == '\"') { \r\n inQuote = !inQuote;\r\n continue;\r\n }\r\n \r\n //Next column (if not in quote)\r\n if (char == ',' && !inQuote) { \r\n col++;\r\n continue; \r\n }\r\n \r\n //New row if new line and not in quote (CRLF) \r\n if (char == '\\r' && nextChar == '\\n' && !inQuote) { \r\n col = 0; \r\n row++; \r\n index++; \r\n continue; \r\n }\r\n \r\n //New row if new line and not in quote (CR or LF) \r\n if ((char == '\\r' || char == '\\n') && !inQuote) { \r\n col = 0;\r\n row++;\r\n continue; \r\n }\r\n\r\n //Normal Character, append to column\r\n data[row][col] += char;\r\n }\r\n\r\n return data;\r\n}\r\n\r\nexport default csvImporter;","export default function(input){\r\n try {\r\n return JSON.parse(input);\r\n } catch(e) {\r\n console.warn(\"JSON Import Error - File contents is invalid JSON\", e);\r\n return Promise.reject();\r\n }\r\n}","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 constructor(table){\r\n super(table);\r\n \r\n this.registerTableOption(\"importFormat\");\r\n this.registerTableOption(\"importReader\", \"text\");\r\n }\r\n \r\n initialize(){\r\n this.registerTableFunction(\"import\", this.importFromFile.bind(this));\r\n\r\n if(this.table.options.importFormat){\r\n this.subscribe(\"data-loading\", this.loadDataCheck.bind(this), 10);\r\n this.subscribe(\"data-load\", this.loadData.bind(this), 10);\r\n }\r\n }\r\n\r\n loadDataCheck(data){\r\n return typeof data === \"string\";\r\n }\r\n\r\n loadData(data, params, config, silent, previousData){\r\n return this.importData(this.lookupImporter(), data)\r\n .then(this.structureData.bind(this))\r\n .catch((err) => {\r\n console.error(\"Import Error:\", err || \"Unable to import data\")\r\n return Promise.reject(err);\r\n })\r\n }\r\n\r\n lookupImporter(importFormat){\r\n var importer;\r\n \r\n if(!importFormat){\r\n importFormat = this.table.options.importFormat;\r\n }\r\n \r\n if(typeof importFormat === \"string\"){\r\n importer = Import.importers[importFormat];\r\n }else{\r\n importer = importFormat;\r\n }\r\n\r\n if(!importer){\r\n console.error(\"Import Error - Importer not found:\", importFormat);\r\n }\r\n \r\n return importer;\r\n }\r\n \r\n importFromFile(importFormat, extension){\r\n var importer = this.lookupImporter(importFormat);\r\n \r\n if(importer){\r\n return this.pickFile(extension)\r\n .then(this.importData.bind(this, importer))\r\n .then(this.structureData.bind(this))\r\n .then(this.setData.bind(this))\r\n .catch((err) => {\r\n console.error(\"Import Error:\", err || \"Unable to import file\")\r\n return Promise.reject(err);\r\n })\r\n }\r\n }\r\n \r\n pickFile(extensions){\r\n return new Promise((resolve, reject) => {\r\n var input = document.createElement(\"input\");\r\n input.type = \"file\";\r\n input.accept = extensions;\r\n \r\n input.addEventListener(\"change\", (e) => {\r\n var file = input.files[0],\r\n reader = new FileReader(),\r\n data;\r\n \r\n switch(this.table.options.importReader){\r\n case \"buffer\":\r\n reader.readAsArrayBuffer(file);\r\n break;\r\n\r\n case \"binary\":\r\n reader.readAsBinaryString(file);\r\n break;\r\n\r\n case \"url\":\r\n reader.readAsDataURL(file);\r\n break;\r\n\r\n case \"text\":\r\n default:\r\n reader.readAsText(file);\r\n }\r\n \r\n reader.onload = (e) => {\r\n resolve(reader.result)\r\n };\r\n \r\n reader.onerror = (e) => {\r\n console.warn(\"File Load Error - Unable to read file\");\r\n reject();\r\n };\r\n });\r\n \r\n input.click();\r\n });\r\n }\r\n \r\n importData(importer, fileContents){\r\n var data = importer.call(this.table, fileContents);\r\n \r\n if(data instanceof Promise){\r\n return data;\r\n }else{\r\n return data ? Promise.resolve(data) : Promise.reject();\r\n }\r\n }\r\n\r\n structureData(parsedData){\r\n var data = [];\r\n \r\n if(Array.isArray(parsedData) && parsedData.length && Array.isArray(parsedData[0])){\r\n if(this.table.options.autoColumns){\r\n data = this.structureArrayToObject(parsedData);\r\n }else{\r\n data = this.structureArrayToColumns(parsedData);\r\n }\r\n\r\n return data;\r\n }else{\r\n return parsedData;\r\n }\r\n }\r\n\r\n structureArrayToObject(parsedData){\r\n var columns = parsedData.shift();\r\n\r\n var data = parsedData.map((values) => {\r\n var row = {};\r\n\r\n columns.forEach((key, i) => {\r\n row[key] = values[i];\r\n })\r\n\r\n return row;\r\n })\r\n\r\n return data;\r\n }\r\n\r\n structureArrayToColumns(parsedData){\r\n var data = [],\r\n columns = this.table.getColumns();\r\n\r\n //remove first row if it is the column names\r\n if(columns[0] && parsedData[0][0]){\r\n if(columns[0].getDefinition().title === parsedData[0][0]){\r\n parsedData.shift();\r\n }\r\n }\r\n \r\n //convert row arrays to objects\r\n parsedData.forEach((rowData) => {\r\n var row = {};\r\n\r\n rowData.forEach((value, index) => {\r\n var column = columns[index];\r\n\r\n if(column){\r\n row[column.getField()] = value;\r\n }\r\n })\r\n\r\n data.push(row);\r\n });\r\n\r\n return data;\r\n }\r\n \r\n setData(data){\r\n return this.table.setData(data);\r\n }\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\nimport Helpers from '../../core/tools/Helpers.js';\r\n\r\nimport Cell from '../../core/cell/Cell';\r\nimport Column from '../../core/column/Column';\r\n\r\nclass Interaction extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.eventMap = {\r\n\t\t\t//row events\r\n\t\t\trowClick:\"row-click\",\r\n\t\t\trowDblClick:\"row-dblclick\",\r\n\t\t\trowContext:\"row-contextmenu\",\r\n\t\t\trowMouseEnter:\"row-mouseenter\",\r\n\t\t\trowMouseLeave:\"row-mouseleave\",\r\n\t\t\trowMouseOver:\"row-mouseover\",\r\n\t\t\trowMouseOut:\"row-mouseout\",\r\n\t\t\trowMouseMove:\"row-mousemove\",\r\n\t\t\trowTap:\"row\",\r\n\t\t\trowDblTap:\"row\",\r\n\t\t\trowTapHold:\"row\",\r\n\r\n\t\t\t//cell events\r\n\t\t\tcellClick:\"cell-click\",\r\n\t\t\tcellDblClick:\"cell-dblclick\",\r\n\t\t\tcellContext:\"cell-contextmenu\",\r\n\t\t\tcellMouseEnter:\"cell-mouseenter\",\r\n\t\t\tcellMouseLeave:\"cell-mouseleave\",\r\n\t\t\tcellMouseOver:\"cell-mouseover\",\r\n\t\t\tcellMouseOut:\"cell-mouseout\",\r\n\t\t\tcellMouseMove:\"cell-mousemove\",\r\n\t\t\tcellTap:\"cell\",\r\n\t\t\tcellDblTap:\"cell\",\r\n\t\t\tcellTapHold:\"cell\",\r\n\r\n\t\t\t//column header events\r\n\t\t\theaderClick:\"column-click\",\r\n\t\t\theaderDblClick:\"column-dblclick\",\r\n\t\t\theaderContext:\"column-contextmenu\",\r\n\t\t\theaderMouseEnter:\"column-mouseenter\",\r\n\t\t\theaderMouseLeave:\"column-mouseleave\",\r\n\t\t\theaderMouseOver:\"column-mouseover\",\r\n\t\t\theaderMouseOut:\"column-mouseout\",\r\n\t\t\theaderMouseMove:\"column-mousemove\",\r\n\t\t\theaderTap:\"column\",\r\n\t\t\theaderDblTap:\"column\",\r\n\t\t\theaderTapHold:\"column\",\r\n\r\n\t\t\t//group header\r\n\t\t\tgroupClick:\"group-click\",\r\n\t\t\tgroupDblClick:\"group-dblclick\",\r\n\t\t\tgroupContext:\"group-contextmenu\",\r\n\t\t\tgroupMouseEnter:\"group-mouseenter\",\r\n\t\t\tgroupMouseLeave:\"group-mouseleave\",\r\n\t\t\tgroupMouseOver:\"group-mouseover\",\r\n\t\t\tgroupMouseOut:\"group-mouseout\",\r\n\t\t\tgroupMouseMove:\"group-mousemove\",\r\n\t\t\tgroupTap:\"group\",\r\n\t\t\tgroupDblTap:\"group\",\r\n\t\t\tgroupTapHold:\"group\",\r\n\t\t}\r\n\r\n\t\tthis.subscribers = {};\r\n\r\n\t\tthis.touchSubscribers = {};\r\n\r\n\t\tthis.columnSubscribers = {};\r\n\r\n\t\tthis.touchWatchers = {\r\n\t\t\trow:{\r\n\t\t\t\ttap:null,\r\n\t\t\t\ttapDbl:null,\r\n\t\t\t\ttapHold:null,\r\n\t\t\t},\r\n\t\t\tcell:{\r\n\t\t\t\ttap:null,\r\n\t\t\t\ttapDbl:null,\r\n\t\t\t\ttapHold:null,\r\n\t\t\t},\r\n\t\t\tcolumn:{\r\n\t\t\t\ttap:null,\r\n\t\t\t\ttapDbl:null,\r\n\t\t\t\ttapHold:null,\r\n\t\t\t},\r\n\t\t\tgroup:{\r\n\t\t\t\ttap:null,\r\n\t\t\t\ttapDbl:null,\r\n\t\t\t\ttapHold:null,\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.registerColumnOption(\"headerClick\");\r\n\t\tthis.registerColumnOption(\"headerDblClick\");\r\n\t\tthis.registerColumnOption(\"headerContext\");\r\n\t\tthis.registerColumnOption(\"headerMouseEnter\");\r\n\t\tthis.registerColumnOption(\"headerMouseLeave\");\r\n\t\tthis.registerColumnOption(\"headerMouseOver\");\r\n\t\tthis.registerColumnOption(\"headerMouseOut\");\r\n\t\tthis.registerColumnOption(\"headerMouseMove\");\r\n\t\tthis.registerColumnOption(\"headerTap\");\r\n\t\tthis.registerColumnOption(\"headerDblTap\");\r\n\t\tthis.registerColumnOption(\"headerTapHold\");\r\n\r\n\t\tthis.registerColumnOption(\"cellClick\");\r\n\t\tthis.registerColumnOption(\"cellDblClick\");\r\n\t\tthis.registerColumnOption(\"cellContext\");\r\n\t\tthis.registerColumnOption(\"cellMouseEnter\");\r\n\t\tthis.registerColumnOption(\"cellMouseLeave\");\r\n\t\tthis.registerColumnOption(\"cellMouseOver\");\r\n\t\tthis.registerColumnOption(\"cellMouseOut\");\r\n\t\tthis.registerColumnOption(\"cellMouseMove\");\r\n\t\tthis.registerColumnOption(\"cellTap\");\r\n\t\tthis.registerColumnOption(\"cellDblTap\");\r\n\t\tthis.registerColumnOption(\"cellTapHold\");\r\n\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tthis.initializeExternalEvents();\r\n\r\n\t\tthis.subscribe(\"column-init\", this.initializeColumn.bind(this))\r\n\t\tthis.subscribe(\"cell-dblclick\", this.cellContentsSelectionFixer.bind(this))\r\n\t}\r\n\r\n\tcellContentsSelectionFixer(e, cell){\r\n\t\tif(this.table.modExists(\"edit\")){\r\n\t\t\tif (this.table.modules.edit.currentCell === this){\r\n\t\t\t\treturn; //prevent instant selection of editor content\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\te.preventDefault();\r\n\r\n\t\ttry{\r\n\t\t\tif (document.selection) { // IE\r\n\t\t\t\tvar range = document.body.createTextRange();\r\n\t\t\t\trange.moveToElementText(this.element);\r\n\t\t\t\trange.select();\r\n\t\t\t} else if (window.getSelection) {\r\n\t\t\t\tvar range = document.createRange();\r\n\t\t\t\trange.selectNode(this.element);\r\n\t\t\t\twindow.getSelection().removeAllRanges();\r\n\t\t\t\twindow.getSelection().addRange(range);\r\n\t\t\t}\r\n\t\t}catch(e){}\r\n\t}\r\n\r\n\tinitializeExternalEvents(){\r\n\t\tfor(let key in this.eventMap){\r\n\t\t\tthis.subscriptionChangeExternal(key, this.subscriptionChanged.bind(this, key))\r\n\t\t}\r\n\t}\r\n\r\n\tsubscriptionChanged(key, added){\r\n\t\tvar index;\r\n\r\n\t\tif(added){\r\n\t\t\tif(!this.subscribers[key]){\r\n\t\t\t\tif(this.eventMap[key].includes(\"-\")){\r\n\t\t\t\t\tthis.subscribers[key] = this.handle.bind(this, key);\r\n\t\t\t\t\tthis.subscribe(this.eventMap[key], this.subscribers[key]);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tthis.subscribeTouchEvents(key);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tif(this.eventMap[key].includes(\"-\")){\r\n\t\t\t\tif(this.subscribers[key] && !this.columnSubscribers[key] && !this.subscribedExternal(key)){\r\n\t\t\t\t\tthis.unsubscribe(this.eventMap[key], this.subscribers[key]);\r\n\t\t\t\t\tdelete this.subscribers[key];\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tthis.unsubscribeTouchEvents(key);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\r\n\tsubscribeTouchEvents(key){\r\n\t\tvar type = this.eventMap[key];\r\n\r\n\t\tif(!this.touchSubscribers[type + \"-touchstart\"]){\r\n\t\t\tthis.touchSubscribers[type + \"-touchstart\"] = this.handleTouch.bind(this, type, \"start\");\r\n\t\t\tthis.touchSubscribers[type + \"-touchend\"] = this.handleTouch.bind(this, type, \"end\");\r\n\r\n\t\t\tthis.subscribe(type + \"-touchstart\", this.touchSubscribers[type + \"-touchstart\"]);\r\n\t\t\tthis.subscribe(type + \"-touchend\", this.touchSubscribers[type + \"-touchend\"]);\r\n\t\t}\r\n\r\n\t\tthis.subscribers[key] = true;\r\n\t}\r\n\r\n\tunsubscribeTouchEvents(key){\r\n\t\tvar notouch = true,\r\n\t\ttype = this.eventMap[key];\r\n\r\n\t\tif(this.subscribers[key] && !this.subscribedExternal(key)){\r\n\t\t\tdelete this.subscribers[key];\r\n\r\n\t\t\tfor(let i in this.eventMap){\r\n\t\t\t\tif(this.eventMap[i] === type){\r\n\t\t\t\t\tif(this.subscribers[i]){\r\n\t\t\t\t\t\tnotouch = false;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif(notouch){\r\n\t\t\t\tthis.unsubscribe(type + \"-touchstart\", this.touchSubscribers[type + \"-touchstart\"]);\r\n\t\t\t\tthis.unsubscribe(type + \"-touchend\", this.touchSubscribers[type + \"-touchend\"]);\r\n\r\n\t\t\t\tdelete this.touchSubscribers[type + \"-touchstart\"];\r\n\t\t\t\tdelete this.touchSubscribers[type + \"-touchend\"];\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tinitializeColumn(column){\r\n\t\tvar def = column.definition;\r\n\r\n\t\tfor(let key in this.eventMap){\r\n\t\t\tif(def[key]){\r\n\t\t\t\tthis.subscriptionChanged(key, true);\r\n\r\n\t\t\t\tif(!this.columnSubscribers[key]){\r\n\t\t\t\t\tthis.columnSubscribers[key] = [];\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.columnSubscribers[key].push(column);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\thandle(action, e, component){\r\n\t\tthis.dispatchEvent(action, e, component);\r\n\t}\r\n\r\n\thandleTouch(type, action, e, component){\r\n\t\tvar watchers = this.touchWatchers[type];\r\n\r\n\t\tif(type === \"column\"){\r\n\t\t\ttype = \"header\";\r\n\t\t}\r\n\r\n\t\tswitch(action){\r\n\t\t\tcase \"start\":\r\n\t\t\twatchers.tap = true;\r\n\r\n\t\t\tclearTimeout(watchers.tapHold);\r\n\r\n\t\t\twatchers.tapHold = setTimeout(() => {\r\n\t\t\t\tclearTimeout(watchers.tapHold);\r\n\t\t\t\twatchers.tapHold = null;\r\n\r\n\t\t\t\twatchers.tap = null;\r\n\t\t\t\tclearTimeout(watchers.tapDbl);\r\n\t\t\t\twatchers.tapDbl = null;\r\n\r\n\t\t\t\tthis.dispatchEvent(type + \"TapHold\", e, component);\r\n\t\t\t}, 1000);\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"end\":\r\n\t\t\tif(watchers.tap){\r\n\r\n\t\t\t\twatchers.tap = null;\r\n\t\t\t\tthis.dispatchEvent(type + \"Tap\", e, component);\r\n\t\t\t}\r\n\r\n\t\t\tif(watchers.tapDbl){\r\n\t\t\t\tclearTimeout(watchers.tapDbl);\r\n\t\t\t\twatchers.tapDbl = null;\r\n\r\n\t\t\t\tthis.dispatchEvent(type + \"DblTap\", e, component);\r\n\t\t\t}else{\r\n\t\t\t\twatchers.tapDbl = setTimeout(() => {\r\n\t\t\t\t\tclearTimeout(watchers.tapDbl);\r\n\t\t\t\t\twatchers.tapDbl = null;\r\n\t\t\t\t}, 300);\r\n\t\t\t}\r\n\r\n\t\t\tclearTimeout(watchers.tapHold);\r\n\t\t\twatchers.tapHold = null;\r\n\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\tdispatchEvent(action, e, component){\r\n\t\tvar componentObj = component.getComponent(),\r\n\t\tcallback;\r\n\r\n\t\tif(this.columnSubscribers[action]){\r\n\r\n\t\t\tif(component instanceof Cell){\r\n\t\t\t\tcallback = component.column.definition[action];\r\n\t\t\t}else if(component instanceof Column){\r\n\t\t\t\tcallback = component.definition[action];\r\n\t\t\t}\r\n\r\n\t\t\tif(callback){\r\n\t\t\t\tcallback(e, componentObj);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.dispatchExternal(action, e, componentObj);\r\n\t}\r\n}\r\n\r\nInteraction.moduleName = \"interaction\";\r\n\r\nexport default Interaction;","import Module from '../../core/Module.js';\r\n\r\nimport defaultBindings from './defaults/bindings.js';\r\nimport defaultActions from './defaults/actions.js';\r\n\r\nclass Keybindings extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.watchKeys = null;\r\n\t\tthis.pressedKeys = null;\r\n\t\tthis.keyupBinding = false;\r\n\t\tthis.keydownBinding = false;\r\n\r\n\t\tthis.registerTableOption(\"keybindings\", {}); //array for keybindings\r\n\t\tthis.registerTableOption(\"tabEndNewRow\", false); //create new row when tab to end of table\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tvar bindings = this.table.options.keybindings,\r\n\t\tmergedBindings = {};\r\n\r\n\t\tthis.watchKeys = {};\r\n\t\tthis.pressedKeys = [];\r\n\r\n\t\tif(bindings !== false){\r\n\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\tbinding.ctrl = true;\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"shift\":\r\n\t\t\t\tbinding.shift = true;\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"meta\":\r\n\t\t\t\tbinding.meta = true;\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tdefault:\r\n\t\t\t\tsymbol = isNaN(symbol) ? symbol.toUpperCase().charCodeAt(0) : parseInt(symbol);\r\n\t\t\t\tbinding.keys.push(symbol);\r\n\r\n\t\t\t\tif(!this.watchKeys[symbol]){\r\n\t\t\t\t\tthis.watchKeys[symbol] = [];\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.watchKeys[symbol].push(binding);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tbindEvents(){\r\n\t\tvar self = this;\r\n\r\n\t\tthis.keyupBinding = function(e){\r\n\t\t\tvar code = e.keyCode;\r\n\t\t\tvar bindings = self.watchKeys[code];\r\n\r\n\t\t\tif(bindings){\r\n\r\n\t\t\t\tself.pressedKeys.push(code);\r\n\r\n\t\t\t\tbindings.forEach(function(binding){\r\n\t\t\t\t\tself.checkBinding(e, binding);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tthis.keydownBinding = function(e){\r\n\t\t\tvar code = e.keyCode;\r\n\t\t\tvar bindings = self.watchKeys[code];\r\n\r\n\t\t\tif(bindings){\r\n\r\n\t\t\t\tvar index = self.pressedKeys.indexOf(code);\r\n\r\n\t\t\t\tif(index > -1){\r\n\t\t\t\t\tself.pressedKeys.splice(index, 1);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tthis.table.element.addEventListener(\"keydown\", this.keyupBinding);\r\n\r\n\t\tthis.table.element.addEventListener(\"keyup\", this.keydownBinding);\r\n\t}\r\n\r\n\tclearBindings(){\r\n\t\tif(this.keyupBinding){\r\n\t\t\tthis.table.element.removeEventListener(\"keydown\", this.keyupBinding);\r\n\t\t}\r\n\r\n\t\tif(this.keydownBinding){\r\n\t\t\tthis.table.element.removeEventListener(\"keyup\", this.keydownBinding);\r\n\t\t}\r\n\t}\r\n\r\n\tcheckBinding(e, binding){\r\n\t\tvar match = true;\r\n\r\n\t\tif(e.ctrlKey == binding.ctrl && e.shiftKey == binding.shift && e.metaKey == binding.meta){\r\n\t\t\tbinding.keys.forEach((key) => {\r\n\t\t\t\tvar index = this.pressedKeys.indexOf(key);\r\n\r\n\t\t\t\tif(index == -1){\r\n\t\t\t\t\tmatch = false;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tif(match){\r\n\t\t\t\tbinding.action.call(this, e);\r\n\t\t\t}\r\n\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t}\r\n}\r\n\r\nKeybindings.moduleName = \"keybindings\";\r\n\r\n//load defaults\r\nKeybindings.bindings = defaultBindings;\r\nKeybindings.actions = defaultActions;\r\n\r\nexport default Keybindings;","export default {\r\n\tnavPrev:\"shift + 9\",\r\n\tnavNext:9,\r\n\tnavUp:38,\r\n\tnavDown:40,\r\n\tscrollPageUp:33,\r\n\tscrollPageDown:34,\r\n\tscrollToStart:36,\r\n\tscrollToEnd:35,\r\n\tundo:[\"ctrl + 90\", \"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\t\tscrollMax = rowManager.element.scrollHeight;\r\n\r\n\t\te.preventDefault();\r\n\r\n\t\tif(rowManager.displayRowsCount){\r\n\t\t\tif(newPos >= 0){\r\n\t\t\t\trowManager.element.scrollTop = newPos;\r\n\t\t\t}else{\r\n\t\t\t\trowManager.scrollToRow(rowManager.getDisplayRows()[0]);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.table.element.focus();\r\n\t},\r\n\tscrollPageDown:function(e){\r\n\t\tvar rowManager = this.table.rowManager,\r\n\t\tnewPos = rowManager.scrollTop + rowManager.element.clientHeight,\r\n\t\tscrollMax = rowManager.element.scrollHeight;\r\n\r\n\t\te.preventDefault();\r\n\r\n\t\tif(rowManager.displayRowsCount){\r\n\t\t\tif(newPos <= scrollMax){\r\n\t\t\t\trowManager.element.scrollTop = newPos;\r\n\t\t\t}else{\r\n\t\t\t\trowManager.scrollToRow(rowManager.getDisplayRows()[rowManager.displayRowsCount - 1]);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.table.element.focus();\r\n\r\n\t},\r\n\tscrollToStart:function(e){\r\n\t\tvar rowManager = this.table.rowManager;\r\n\r\n\t\te.preventDefault();\r\n\r\n\t\tif(rowManager.displayRowsCount){\r\n\t\t\trowManager.scrollToRow(rowManager.getDisplayRows()[0]);\r\n\t\t}\r\n\r\n\t\tthis.table.element.focus();\r\n\t},\r\n\tscrollToEnd:function(e){\r\n\t\tvar rowManager = this.table.rowManager;\r\n\r\n\t\te.preventDefault();\r\n\r\n\t\tif(rowManager.displayRowsCount){\r\n\t\t\trowManager.scrollToRow(rowManager.getDisplayRows()[rowManager.displayRowsCount - 1]);\r\n\t\t}\r\n\r\n\t\tthis.table.element.focus();\r\n\t},\r\n\tnavPrev:function(e){\r\n\t\tthis.dispatch(\"keybinding-nav-prev\", e);\r\n\t},\r\n\r\n\tnavNext:function(e){\r\n\t\tthis.dispatch(\"keybinding-nav-next\", e);\r\n\t},\r\n\r\n\tnavLeft:function(e){\r\n\t\tthis.dispatch(\"keybinding-nav-left\", e);\r\n\t},\r\n\r\n\tnavRight:function(e){\r\n\t\tthis.dispatch(\"keybinding-nav-right\", e);\r\n\t},\r\n\r\n\tnavUp:function(e){\r\n\t\tthis.dispatch(\"keybinding-nav-up\", e);\r\n\t},\r\n\r\n\tnavDown:function(e){\r\n\t\tthis.dispatch(\"keybinding-nav-down\", e);\r\n\t},\r\n\r\n\tundo:function(e){\r\n\t\tvar cell = false;\r\n\t\tif(this.table.options.history && this.table.modExists(\"history\") && this.table.modExists(\"edit\")){\r\n\r\n\t\t\tcell = this.table.modules.edit.currentCell;\r\n\r\n\t\t\tif(!cell){\r\n\t\t\t\te.preventDefault();\r\n\t\t\t\tthis.table.modules.history.undo();\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\tredo:function(e){\r\n\t\tvar cell = false;\r\n\t\tif(this.table.options.history && this.table.modExists(\"history\") && this.table.modExists(\"edit\")){\r\n\r\n\t\t\tcell = this.table.modules.edit.currentCell;\r\n\r\n\t\t\tif(!cell){\r\n\t\t\t\te.preventDefault();\r\n\t\t\t\tthis.table.modules.history.redo();\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\tcopyToClipboard:function(e){\r\n\t\tif(!this.table.modules.edit.currentCell){\r\n\t\t\tif(this.table.modExists(\"clipboard\", true)){\r\n\t\t\t\tthis.table.modules.clipboard.copy(false, true);\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n};","import Module from '../../core/Module.js';\r\nimport Helpers from '../../core/tools/Helpers.js';\r\n\r\nclass Menu extends Module{\r\n\t\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\t\t\r\n\t\tthis.menuContainer = null;\r\n\t\tthis.menuElements = [];\r\n\t\tthis.blurEvent = this.hideMenu.bind(this);\r\n\t\tthis.escEvent = this.escMenu.bind(this);\r\n\t\tthis.nestedMenuBlock = false;\r\n\t\tthis.positionReversedX = false;\r\n\t\t\r\n\t\tthis.currentComponent = null;\r\n\t\t\r\n\t\tthis.columnSubscribers = {};\r\n\t\t\r\n\t\tthis.registerTableOption(\"rowContextMenu\", false);\r\n\t\tthis.registerTableOption(\"rowClickMenu\", false);\r\n\t\tthis.registerTableOption(\"groupContextMenu\", false);\r\n\t\tthis.registerTableOption(\"groupClickMenu\", false);\r\n\t\tthis.registerTableOption(\"menuContainer\", false);\r\n\t\t\r\n\t\tthis.registerColumnOption(\"headerContextMenu\");\r\n\t\tthis.registerColumnOption(\"headerClickMenu\");\r\n\t\tthis.registerColumnOption(\"headerMenu\");\r\n\t\tthis.registerColumnOption(\"contextMenu\");\r\n\t\tthis.registerColumnOption(\"clickMenu\");\r\n\t}\r\n\t\r\n\tinitialize(){\r\n\t\tthis.lookupMenuContainer();\r\n\t\t\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\tlookupMenuContainer(){\r\n\t\t\r\n\t\tthis.menuContainer = this.table.options.menuContainer;\r\n\t\t\r\n\t\tif(typeof this.menuContainer === \"string\"){\r\n\t\t\tthis.menuContainer = document.querySelector(this.menuContainer);\r\n\t\t\t\r\n\t\t\tif(!this.menuContainer){\r\n\t\t\t\tconsole.warn(\"Menu Error - no container element found matching selector:\", this.table.options.menuContainer , \"(defaulting to document body)\");\r\n\t\t\t}\r\n\t\t}else if (this.menuContainer === true){\r\n\t\t\tthis.menuContainer = this.table.element;\r\n\t\t}\r\n\t\t\r\n\t\tif(this.menuContainer && !this.checkMenuContainerIsParent(this.menuContainer)){\r\n\t\t\tthis.menuContainer = false;\r\n\t\t\tconsole.warn(\"Menu Error - container element does not contain this table:\", this.table.options.menuContainer , \"(defaulting to document body)\");\r\n\t\t}\r\n\t\t\r\n\t\tif(!this.menuContainer){\r\n\t\t\tthis.menuContainer = document.body;\r\n\t\t}\r\n\t}\r\n\t\r\n\tcheckMenuContainerIsParent(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.checkMenuContainerIsParent(container, element.parentNode) : false;\r\n\t\t}\r\n\t}\r\n\t\r\n\tinitializeRowWatchers(){\r\n\t\tif(this.table.options.rowContextMenu){\r\n\t\t\tthis.subscribe(\"row-contextmenu\", this.loadMenuEvent.bind(this, this.table.options.rowContextMenu));\r\n\t\t\tthis.table.on(\"rowTapHold\", this.loadMenuEvent.bind(this, this.table.options.rowContextMenu));\r\n\t\t}\r\n\t\t\r\n\t\tif(this.table.options.rowClickMenu){\r\n\t\t\tthis.subscribe(\"row-click\", this.loadMenuEvent.bind(this, this.table.options.rowClickMenu));\r\n\t\t}\r\n\t}\r\n\t\r\n\tinitializeGroupWatchers(){\r\n\t\tif(this.table.options.groupContextMenu){\r\n\t\t\tthis.subscribe(\"group-contextmenu\", this.loadMenuEvent.bind(this, this.table.options.groupContextMenu));\r\n\t\t\tthis.table.on(\"groupTapHold\", this.loadMenuEvent.bind(this, this.table.options.groupContextMenu));\r\n\t\t}\r\n\t\t\r\n\t\tif(this.table.options.groupClickMenu){\r\n\t\t\tthis.subscribe(\"group-click\", this.loadMenuEvent.bind(this, this.table.options.groupClickMenu));\r\n\t\t}\r\n\t}\r\n\t\r\n\tinitializeColumn(column){\r\n\t\tvar options = [\"headerContextMenu\", \"headerClickMenu\"],\r\n\t\tdef = column.definition;\r\n\t\t\r\n\t\t//handle column events\r\n\t\tif(def.headerContextMenu && !this.columnSubscribers.headerContextMenu){\r\n\t\t\tthis.columnSubscribers.headerContextMenu = this.loadMenuTableColumnEvent.bind(this, \"headerContextMenu\");\r\n\t\t\tthis.subscribe(\"column-contextmenu\", this.columnSubscribers.headerContextMenu);\r\n\t\t\tthis.table.on(\"headerTapHold\", this.loadMenuTableColumnEvent.bind(this, \"headerContextMenu\"))\r\n\t\t}\r\n\t\t\r\n\t\tif(def.headerClickMenu && !this.columnSubscribers.headerClickMenu){\r\n\t\t\tthis.columnSubscribers.headerClickMenu = this.loadMenuTableColumnEvent.bind(this, \"headerClickMenu\");\r\n\t\t\tthis.subscribe(\"column-click\", this.columnSubscribers.headerClickMenu);\r\n\t\t}\r\n\t\t\r\n\t\tif(def.headerMenu){\r\n\t\t\tthis.initializeColumnHeaderMenu(column);\r\n\t\t}\r\n\t\t\r\n\t\t//handle cell events\r\n\t\tif(def.contextMenu && !this.columnSubscribers.contextMenu){\r\n\t\t\tthis.columnSubscribers.contextMenu = this.loadMenuTableCellEvent.bind(this, \"contextMenu\");\r\n\t\t\tthis.subscribe(\"cell-contextmenu\", this.columnSubscribers.contextMenu);\r\n\t\t\tthis.table.on(\"cellTapHold\", this.loadMenuTableCellEvent.bind(this, \"contextMenu\"))\r\n\t\t}\r\n\t\t\r\n\t\tif(def.clickMenu && !this.columnSubscribers.clickMenu){\r\n\t\t\tthis.columnSubscribers.clickMenu = this.loadMenuTableCellEvent.bind(this, \"clickMenu\");\r\n\t\t\tthis.subscribe(\"cell-click\", this.columnSubscribers.clickMenu);\r\n\t\t}\r\n\t}\r\n\t\r\n\tinitializeColumnHeaderMenu(column){\r\n\t\tvar headerMenuEl;\r\n\t\t\r\n\t\theaderMenuEl = document.createElement(\"span\");\r\n\t\theaderMenuEl.classList.add(\"tabulator-header-menu-button\");\r\n\t\theaderMenuEl.innerHTML = \"⋮\";\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, component.getComponent(), e) : 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){\r\n\t\tvar touch = !(e instanceof MouseEvent);\r\n\t\t\r\n\t\tvar menuEl = document.createElement(\"div\");\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.isOpen()){\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tthis.nestedMenuBlock = setTimeout(() => {\r\n\t\t\t\t\tthis.nestedMenuBlock = false;\r\n\t\t\t\t}, 100)\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tthis.hideMenu();\r\n\t\t\tthis.menuElements = [];\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.hideOldSubMenus(menuEl);\r\n\t\t\t\t\t\t\tthis.loadMenu(e, component, item.menu, itemEl);\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tif(item.action){\r\n\t\t\t\t\t\t\titemEl.addEventListener(\"click\", (e) => {\r\n\t\t\t\t\t\t\t\titem.action(e, component.getComponent());\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\tif(item.menu && item.menu.length){\r\n\t\t\t\t\titemEl.classList.add(\"tabulator-menu-item-submenu\");\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tmenuEl.appendChild(itemEl);\r\n\t\t});\r\n\t\t\r\n\t\tmenuEl.addEventListener(\"click\", (e) => {\r\n\t\t\tthis.hideMenu();\r\n\t\t});\r\n\t\t\r\n\t\tthis.menuElements.push(menuEl);\r\n\t\tthis.positionMenu(menuEl, parentEl, touch, e);\r\n\t\t\r\n\t\tthis.currentComponent = component\r\n\t\t\r\n\t\tthis.dispatchExternal(\"menuOpened\", component.getComponent())\r\n\t}\r\n\t\r\n\thideOldSubMenus(menuEl){\r\n\t\tvar index = this.menuElements.indexOf(menuEl);\r\n\t\t\r\n\t\tif(index > -1){\r\n\t\t\tfor(let i = this.menuElements.length - 1; i > index; i--){\r\n\t\t\t\tvar el = this.menuElements[i];\r\n\t\t\t\t\r\n\t\t\t\tif(el.parentNode){\r\n\t\t\t\t\tel.parentNode.removeChild(el);\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\tthis.menuElements.pop();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\tpositionMenu(element, parentEl, touch, e){\r\n\t\tvar x, y, parentOffset;\r\n\t\t\r\n\t\tif(!parentEl){\r\n\t\t\tx = touch ? e.touches[0].pageX : e.pageX;\r\n\t\t\ty = touch ? e.touches[0].pageY : e.pageY;\r\n\t\t\t\r\n\t\t\tif(this.menuContainer !== document.body){\r\n\t\t\t\tparentOffset = Helpers.elOffset(this.menuContainer);\r\n\t\t\t\t\r\n\t\t\t\tx -= parentOffset.left;\r\n\t\t\t\ty -= parentOffset.top;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tthis.positionReversedX = false;\r\n\t\t}else{\r\n\t\t\tparentOffset = Helpers.elOffset(parentEl);\r\n\t\t\tx = parentOffset.left + parentEl.offsetWidth;\r\n\t\t\ty = parentOffset.top - 1;\r\n\t\t}\r\n\t\t\r\n\t\telement.style.top = y + \"px\";\r\n\t\telement.style.left = x + \"px\";\r\n\t\t\r\n\t\tsetTimeout(() => {\r\n\t\t\tthis.table.rowManager.element.addEventListener(\"scroll\", this.blurEvent);\r\n\t\t\tthis.subscribe(\"cell-editing\", this.blurEvent);\r\n\t\t\tdocument.body.addEventListener(\"click\", this.blurEvent);\r\n\t\t\tdocument.body.addEventListener(\"contextmenu\", this.blurEvent);\r\n\t\t\twindow.addEventListener(\"resize\", this.blurEvent);\r\n\t\t\tdocument.body.addEventListener(\"keydown\", this.escEvent);\r\n\t\t}, 100);\r\n\t\t\r\n\t\tthis.menuContainer.appendChild(element);\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 + element.offsetWidth) >= this.menuContainer.offsetWidth || this.positionReversedX){\r\n\t\t\telement.style.left = \"\";\r\n\t\t\t\r\n\t\t\tif(parentEl){\r\n\t\t\t\telement.style.right = (this.menuContainer.offsetWidth - parentOffset.left) + \"px\";\r\n\t\t\t}else{\r\n\t\t\t\telement.style.right = (this.menuContainer.offsetWidth - x) + \"px\";\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tthis.positionReversedX = 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 + element.offsetHeight) > this.menuContainer.offsetHeight) {\r\n\t\t\tif(parentEl){\r\n\t\t\t\telement.style.top = (parseInt(element.style.top) - element.offsetHeight + parentEl.offsetHeight + 1) + \"px\";\r\n\t\t\t}else{\r\n\t\t\t\telement.style.top = (parseInt(element.style.top) - element.offsetHeight) + \"px\";\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\tisOpen(){\r\n\t\treturn !!this.menuElements.length;\r\n\t}\r\n\t\r\n\tescMenu(e){\r\n\t\tif(e.keyCode == 27){\r\n\t\t\tthis.hideMenu();\r\n\t\t}\r\n\t}\r\n\t\r\n\thideMenu(){\t\r\n\t\tthis.menuElements.forEach((menuEl) => {\r\n\t\t\tif(menuEl.parentNode){\r\n\t\t\t\tmenuEl.parentNode.removeChild(menuEl);\r\n\t\t\t}\r\n\t\t});\r\n\t\t\r\n\t\tdocument.body.removeEventListener(\"keydown\", this.escEvent);\r\n\t\tdocument.body.removeEventListener(\"click\", this.blurEvent);\r\n\t\tdocument.body.removeEventListener(\"contextmenu\", this.blurEvent);\r\n\t\twindow.removeEventListener(\"resize\", this.blurEvent);\r\n\t\tthis.table.rowManager.element.removeEventListener(\"scroll\", this.blurEvent);\r\n\t\tthis.unsubscribe(\"cell-editing\", this.blurEvent);\r\n\t\t\r\n\t\tif(this.currentComponent){\r\n\t\t\tthis.dispatchExternal(\"menuClosed\", this.currentComponent.getComponent());\r\n\t\t\tthis.currentComponent = null;\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 desitnation column\r\n\t\tthis.startX = 0; //starting position within header element\r\n\t\tthis.autoScrollMargin = 40; //auto scroll on edge when within margin\r\n\t\tthis.autoScrollStep = 5; //auto scroll distance in pixels\r\n\t\tthis.autoScrollTimeout = false; //auto scroll timeout\r\n\t\tthis.touchMove = false;\r\n\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){\r\n\t\t\tcolEl = column.getElement();\r\n\t\t\t\r\n\t\t\tconfig.mousemove = function(e){\r\n\t\t\t\tif(column.parent === self.moving.parent){\r\n\t\t\t\t\tif((((self.touchMove ? e.touches[0].pageX : e.pageX) - Helpers.elOffset(colEl).left) + self.table.columnManager.element.scrollLeft) > (column.getWidth() / 2)){\r\n\t\t\t\t\t\tif(self.toCol !== column || !self.toColAfter){\r\n\t\t\t\t\t\t\tcolEl.parentNode.insertBefore(self.placeholderElement, colEl.nextSibling);\r\n\t\t\t\t\t\t\tself.moveColumn(column, true);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tif(self.toCol !== column || self.toColAfter){\r\n\t\t\t\t\t\t\tcolEl.parentNode.insertBefore(self.placeholderElement, colEl);\r\n\t\t\t\t\t\t\tself.moveColumn(column, false);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}.bind(self);\r\n\t\t\t\r\n\t\t\tcolEl.addEventListener(\"mousedown\", function(e){\r\n\t\t\t\tself.touchMove = false;\r\n\t\t\t\tif(e.which === 1){\r\n\t\t\t\t\tself.checkTimeout = setTimeout(function(){\r\n\t\t\t\t\t\tself.startMove(e, column);\r\n\t\t\t\t\t}, self.checkPeriod);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\t\r\n\t\t\tcolEl.addEventListener(\"mouseup\", function(e){\r\n\t\t\t\tif(e.which === 1){\r\n\t\t\t\t\tif(self.checkTimeout){\r\n\t\t\t\t\t\tclearTimeout(self.checkTimeout);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\t\r\n\t\t\tself.bindTouchEvents(column);\r\n\t\t}\r\n\t\t\r\n\t\tcolumn.modules.moveColumn = config;\r\n\t}\r\n\t\r\n\tbindTouchEvents(column){\r\n\t\tvar colEl = column.getElement(),\r\n\t\tstartXMove = false, //shifting center position of the cell\r\n\t\tdir = false,\r\n\t\tcurrentCol, nextCol, 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\tcurrentCol = column;\r\n\t\t\t\tnextCol = column.nextColumn();\r\n\t\t\t\tnextColWidth = nextCol ? nextCol.getWidth()/2 : 0;\r\n\t\t\t\tprevCol = column.prevColumn();\r\n\t\t\t\tprevColWidth = prevCol ? prevCol.getWidth()/2 : 0;\r\n\t\t\t\tnextColWidthLast = 0;\r\n\t\t\t\tprevColWidthLast = 0;\r\n\t\t\t\tstartXMove = false;\r\n\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 halfCol, 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\tcurrentCol = moveToCol;\r\n\t\t\t\t\tnextCol = moveToCol.nextColumn();\r\n\t\t\t\t\tnextColWidthLast = nextColWidth;\r\n\t\t\t\t\tnextColWidth = nextCol ? nextCol.getWidth() / 2 : 0;\r\n\t\t\t\t\tprevCol = moveToCol.prevColumn();\r\n\t\t\t\t\tprevColWidthLast = prevColWidth;\r\n\t\t\t\t\tprevColWidth = prevCol ? prevCol.getWidth() / 2 : 0;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}, {passive: true});\r\n\t\t\r\n\t\tcolEl.addEventListener(\"touchend\", (e) => {\r\n\t\t\tif(this.checkTimeout){\r\n\t\t\t\tclearTimeout(this.checkTimeout);\r\n\t\t\t}\r\n\t\t\tif(this.moving){\r\n\t\t\t\tthis.endMove(e);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\t\r\n\tstartMove(e, column){\r\n\t\tvar element = column.getElement(),\r\n\t\theaderElement = this.table.columnManager.getElement(),\r\n\t\theadersElement = this.table.columnManager.getHeadersElement();\r\n\t\t\r\n\t\tthis.moving = column;\r\n\t\tthis.startX = (this.touchMove ? e.touches[0].pageX : e.pageX) - Helpers.elOffset(element).left;\r\n\t\t\r\n\t\tthis.table.element.classList.add(\"tabulator-block-select\");\r\n\t\t\r\n\t\t//create placeholder\r\n\t\tthis.placeholderElement.style.width = column.getWidth() + \"px\";\r\n\t\tthis.placeholderElement.style.height = column.getHeight() + \"px\";\r\n\t\t\r\n\t\telement.parentNode.insertBefore(this.placeholderElement, element);\r\n\t\telement.parentNode.removeChild(element);\r\n\t\t\r\n\t\t//create hover element\r\n\t\tthis.hoverElement = element.cloneNode(true);\r\n\t\tthis.hoverElement.classList.add(\"tabulator-moving\");\r\n\t\t\r\n\t\tthis.table.columnManager.getElement().appendChild(this.hoverElement);\r\n\t\t\r\n\t\tthis.hoverElement.style.left = \"0\";\r\n\t\tthis.hoverElement.style.bottom = (headerElement.clientHeight - headersElement.offsetHeight) + \"px\";\r\n\t\t\r\n\t\tif(!this.touchMove){\r\n\t\t\tthis._bindMouseMove();\r\n\t\t\t\r\n\t\t\tdocument.body.addEventListener(\"mousemove\", this.moveHover);\r\n\t\t\tdocument.body.addEventListener(\"mouseup\", this.endMove);\r\n\t\t}\r\n\t\t\r\n\t\tthis.moveHover(e);\r\n\t}\r\n\t\r\n\t_bindMouseMove(){\r\n\t\tthis.table.columnManager.columnsByIndex.forEach(function(column){\r\n\t\t\tif(column.modules.moveColumn.mousemove){\r\n\t\t\t\tcolumn.getElement().addEventListener(\"mousemove\", column.modules.moveColumn.mousemove);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\t\r\n\t_unbindMouseMove(){\r\n\t\tthis.table.columnManager.columnsByIndex.forEach(function(column){\r\n\t\t\tif(column.modules.moveColumn.mousemove){\r\n\t\t\t\tcolumn.getElement().removeEventListener(\"mousemove\", column.modules.moveColumn.mousemove);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\t\r\n\tmoveColumn(column, after){\r\n\t\tvar movingCells = this.moving.getCells();\r\n\t\t\r\n\t\tthis.toCol = column;\r\n\t\tthis.toColAfter = after;\r\n\t\t\r\n\t\tif(after){\r\n\t\t\tcolumn.getCells().forEach(function(cell, i){\r\n\t\t\t\tvar cellEl = cell.getElement(true);\r\n\t\t\t\t\r\n\t\t\t\tif(cellEl.parentNode && movingCells[i]){\r\n\t\t\t\t\tcellEl.parentNode.insertBefore(movingCells[i].getElement(), cellEl.nextSibling);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tcolumn.getCells().forEach(function(cell, i){\r\n\t\t\t\tvar cellEl = cell.getElement(true);\r\n\t\t\t\t\r\n\t\t\t\tif(cellEl.parentNode && movingCells[i]){\r\n\t\t\t\t\tcellEl.parentNode.insertBefore(movingCells[i].getElement(), cellEl);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\t\r\n\tendMove(e){\r\n\t\tif(e.which === 1 || this.touchMove){\r\n\t\t\tthis._unbindMouseMove();\r\n\t\t\t\r\n\t\t\tthis.placeholderElement.parentNode.insertBefore(this.moving.getElement(), this.placeholderElement.nextSibling);\r\n\t\t\tthis.placeholderElement.parentNode.removeChild(this.placeholderElement);\r\n\t\t\tthis.hoverElement.parentNode.removeChild(this.hoverElement);\r\n\t\t\t\r\n\t\t\tthis.table.element.classList.remove(\"tabulator-block-select\");\r\n\t\t\t\r\n\t\t\tif(this.toCol){\r\n\t\t\t\tthis.table.columnManager.moveColumnActual(this.moving, this.toCol, this.toColAfter);\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tthis.moving = false;\r\n\t\t\tthis.toCol = false;\r\n\t\t\tthis.toColAfter = false;\r\n\t\t\t\r\n\t\t\tif(!this.touchMove){\r\n\t\t\t\tdocument.body.removeEventListener(\"mousemove\", this.moveHover);\r\n\t\t\t\tdocument.body.removeEventListener(\"mouseup\", this.endMove);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\tmoveHover(e){\r\n\t\tvar columnHolder = this.table.columnManager.getElement(),\r\n\t\tscrollLeft = columnHolder.scrollLeft,\r\n\t\txPos = ((this.touchMove ? e.touches[0].pageX : e.pageX) - Helpers.elOffset(columnHolder).left) + scrollLeft,\r\n\t\tscrollPos;\r\n\t\t\r\n\t\tthis.hoverElement.style.left = (xPos - this.startX) + \"px\";\r\n\t\t\r\n\t\tif(xPos - scrollLeft < this.autoScrollMargin){\r\n\t\t\tif(!this.autoScrollTimeout){\r\n\t\t\t\tthis.autoScrollTimeout = setTimeout(() => {\r\n\t\t\t\t\tscrollPos = Math.max(0,scrollLeft-5);\r\n\t\t\t\t\tthis.table.rowManager.getElement().scrollLeft = scrollPos;\r\n\t\t\t\t\tthis.autoScrollTimeout = false;\r\n\t\t\t\t}, 1);\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\tif(scrollLeft + columnHolder.clientWidth - xPos < this.autoScrollMargin){\r\n\t\t\tif(!this.autoScrollTimeout){\r\n\t\t\t\tthis.autoScrollTimeout = setTimeout(() => {\r\n\t\t\t\t\tscrollPos = Math.min(columnHolder.clientWidth, scrollLeft+5);\r\n\t\t\t\t\tthis.table.rowManager.getElement().scrollLeft = scrollPos;\r\n\t\t\t\t\tthis.autoScrollTimeout = false;\r\n\t\t\t\t}, 1);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n\r\nMoveColumns.moduleName = \"moveColumn\";\r\n\r\nexport default MoveColumns;\r\n","import Module from '../../core/Module.js';\r\nimport Helpers from '../../core/tools/Helpers.js';\r\n\r\nclass MoveRows extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.placeholderElement = this.createPlaceholderElement();\r\n\t\tthis.hoverElement = false; //floating row header element\r\n\t\tthis.checkTimeout = false; //click check timeout holder\r\n\t\tthis.checkPeriod = 150; //period to wait on mousedown to consider this a move and not a click\r\n\t\tthis.moving = false; //currently moving row\r\n\t\tthis.toRow = false; //destination row\r\n\t\tthis.toRowAfter = false; //position of moving row relative to the desitnation row\r\n\t\tthis.hasHandle = false; //row has handle instead of fully movable row\r\n\t\tthis.startY = 0; //starting Y position within header element\r\n\t\tthis.startX = 0; //starting X position within header element\r\n\r\n\t\tthis.moveHover = this.moveHover.bind(this);\r\n\t\tthis.endMove = this.endMove.bind(this);\r\n\t\tthis.tableRowDropEvent = false;\r\n\r\n\t\tthis.touchMove = false;\r\n\r\n\t\tthis.connection = false;\r\n\t\tthis.connectionSelectorsTables = false;\r\n\t\tthis.connectionSelectorsElements = false;\r\n\t\tthis.connectionElements = [];\r\n\t\tthis.connections = [];\r\n\r\n\t\tthis.connectedTable = false;\r\n\t\tthis.connectedRow = false;\r\n\r\n\t\tthis.registerTableOption(\"movableRows\", false); //enable movable rows\r\n\t\tthis.registerTableOption(\"movableRowsConnectedTables\", false); //tables for movable rows to be connected to\r\n\t\tthis.registerTableOption(\"movableRowsConnectedElements\", false); //other elements for movable rows to be connected to\r\n\t\tthis.registerTableOption(\"movableRowsSender\", false);\r\n\t\tthis.registerTableOption(\"movableRowsReceiver\", \"insert\");\r\n\r\n\t\tthis.registerColumnOption(\"rowHandle\");\r\n\t}\r\n\r\n\tcreatePlaceholderElement(){\r\n\t\tvar el = document.createElement(\"div\");\r\n\r\n\t\tel.classList.add(\"tabulator-row\");\r\n\t\tel.classList.add(\"tabulator-row-placeholder\");\r\n\r\n\t\treturn el;\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tif(this.table.options.movableRows){\r\n\t\t\tthis.connectionSelectorsTables = this.table.options.movableRowsConnectedTables;\r\n\t\t\tthis.connectionSelectorsElements = this.table.options.movableRowsConnectedElements;\r\n\r\n\t\t\tthis.connection = this.connectionSelectorsTables || this.connectionSelectorsElements;\r\n\r\n\t\t\tthis.subscribe(\"cell-init\", this.initializeCell.bind(this));\r\n\t\t\tthis.subscribe(\"column-init\", this.initializeColumn.bind(this));\r\n\t\t\tthis.subscribe(\"row-init\", this.initializeRow.bind(this));\r\n\t\t}\r\n\t}\r\n\r\n\tinitializeGroupHeader(group){\r\n\t\tvar self = this,\r\n\t\tconfig = {},\r\n\t\trowEl;\r\n\r\n\t\t//inter table drag drop\r\n\t\tconfig.mouseup = function(e){\r\n\t\t\tself.tableRowDrop(e, row);\r\n\t\t}.bind(self);\r\n\r\n\t\t//same table drag drop\r\n\t\tconfig.mousemove = function(e){\r\n\t\t\tif(((e.pageY - Helpers.elOffset(group.element).top) + self.table.rowManager.element.scrollTop) > (group.getHeight() / 2)){\r\n\t\t\t\tif(self.toRow !== group || !self.toRowAfter){\r\n\t\t\t\t\tvar rowEl = group.getElement();\r\n\t\t\t\t\trowEl.parentNode.insertBefore(self.placeholderElement, rowEl.nextSibling);\r\n\t\t\t\t\tself.moveRow(group, true);\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tif(self.toRow !== group || self.toRowAfter){\r\n\t\t\t\t\tvar rowEl = group.getElement();\r\n\t\t\t\t\tif(rowEl.previousSibling){\r\n\t\t\t\t\t\trowEl.parentNode.insertBefore(self.placeholderElement, rowEl);\r\n\t\t\t\t\t\tself.moveRow(group, false);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}.bind(self);\r\n\r\n\t\tgroup.modules.moveRow = config;\r\n\t}\r\n\r\n\tinitializeRow(row){\r\n\t\tvar self = this,\r\n\t\tconfig = {},\r\n\t\trowEl;\r\n\r\n\t\t//inter table drag drop\r\n\t\tconfig.mouseup = function(e){\r\n\t\t\tself.tableRowDrop(e, row);\r\n\t\t}.bind(self);\r\n\r\n\t\t//same table drag drop\r\n\t\tconfig.mousemove = function(e){\r\n\t\t\tvar rowEl = row.getElement();\r\n\r\n\t\t\tif(((e.pageY - Helpers.elOffset(rowEl).top) + self.table.rowManager.element.scrollTop) > (row.getHeight() / 2)){\r\n\t\t\t\tif(self.toRow !== row || !self.toRowAfter){\r\n\t\t\t\t\trowEl.parentNode.insertBefore(self.placeholderElement, rowEl.nextSibling);\r\n\t\t\t\t\tself.moveRow(row, true);\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tif(self.toRow !== row || self.toRowAfter){\r\n\t\t\t\t\trowEl.parentNode.insertBefore(self.placeholderElement, rowEl);\r\n\t\t\t\t\tself.moveRow(row, false);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}.bind(self);\r\n\r\n\r\n\t\tif(!this.hasHandle){\r\n\r\n\t\t\trowEl = row.getElement();\r\n\r\n\t\t\trowEl.addEventListener(\"mousedown\", function(e){\r\n\t\t\t\tif(e.which === 1){\r\n\t\t\t\t\tself.checkTimeout = setTimeout(function(){\r\n\t\t\t\t\t\tself.startMove(e, row);\r\n\t\t\t\t\t}, self.checkPeriod);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\trowEl.addEventListener(\"mouseup\", function(e){\r\n\t\t\t\tif(e.which === 1){\r\n\t\t\t\t\tif(self.checkTimeout){\r\n\t\t\t\t\t\tclearTimeout(self.checkTimeout);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tthis.bindTouchEvents(row, row.getElement());\r\n\t\t}\r\n\r\n\t\trow.modules.moveRow = config;\r\n\t}\r\n\r\n\tinitializeColumn(column){\r\n\t\tif(column.definition.rowHandle && this.table.options.movableRows !== false){\r\n\t\t\tthis.hasHandle = true;\r\n\t\t}\r\n\t}\r\n\r\n\tinitializeCell(cell){\r\n\t\tif(cell.column.definition.rowHandle && this.table.options.movableRows !== false){\r\n\t\t\tvar self = this,\r\n\t\t\tcellEl = cell.getElement(true);\r\n\r\n\t\t\tcellEl.addEventListener(\"mousedown\", function(e){\r\n\t\t\t\tif(e.which === 1){\r\n\t\t\t\t\tself.checkTimeout = setTimeout(function(){\r\n\t\t\t\t\t\tself.startMove(e, cell.row);\r\n\t\t\t\t\t}, self.checkPeriod);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tcellEl.addEventListener(\"mouseup\", function(e){\r\n\t\t\t\tif(e.which === 1){\r\n\t\t\t\t\tif(self.checkTimeout){\r\n\t\t\t\t\t\tclearTimeout(self.checkTimeout);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tthis.bindTouchEvents(cell.row, cellEl);\r\n\t\t}\r\n\t}\r\n\r\n\tbindTouchEvents(row, element){\r\n\t\tvar startYMove = false, //shifting center position of the cell\r\n\t\tdir = false,\r\n\t\tcurrentRow, nextRow, prevRow, nextRowHeight, prevRowHeight, nextRowHeightLast, prevRowHeightLast;\r\n\r\n\t\telement.addEventListener(\"touchstart\", (e) => {\r\n\t\t\tthis.checkTimeout = setTimeout(() => {\r\n\t\t\t\tthis.touchMove = true;\r\n\t\t\t\tcurrentRow = row;\r\n\t\t\t\tnextRow = row.nextRow();\r\n\t\t\t\tnextRowHeight = nextRow ? nextRow.getHeight()/2 : 0;\r\n\t\t\t\tprevRow = row.prevRow();\r\n\t\t\t\tprevRowHeight = prevRow ? prevRow.getHeight()/2 : 0;\r\n\t\t\t\tnextRowHeightLast = 0;\r\n\t\t\t\tprevRowHeightLast = 0;\r\n\t\t\t\tstartYMove = false;\r\n\r\n\t\t\t\tthis.startMove(e, row);\r\n\t\t\t}, this.checkPeriod);\r\n\t\t}, {passive: true});\r\n\t\tthis.moving, this.toRow, this.toRowAfter\r\n\t\telement.addEventListener(\"touchmove\", (e) => {\r\n\r\n\t\t\tvar halfCol, diff, moveToRow;\r\n\r\n\t\t\tif(this.moving){\r\n\t\t\t\te.preventDefault();\r\n\r\n\t\t\t\tthis.moveHover(e);\r\n\r\n\t\t\t\tif(!startYMove){\r\n\t\t\t\t\tstartYMove = e.touches[0].pageY;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tdiff = e.touches[0].pageY - startYMove;\r\n\r\n\t\t\t\tif(diff > 0){\r\n\t\t\t\t\tif(nextRow && diff - nextRowHeightLast > nextRowHeight){\r\n\t\t\t\t\t\tmoveToRow = nextRow;\r\n\r\n\t\t\t\t\t\tif(moveToRow !== row){\r\n\t\t\t\t\t\t\tstartYMove = e.touches[0].pageY\r\n\t\t\t\t\t\t\tmoveToRow.getElement().parentNode.insertBefore(this.placeholderElement, moveToRow.getElement().nextSibling);\r\n\t\t\t\t\t\t\tthis.moveRow(moveToRow, true);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}else{\r\n\t\t\t\t\tif(prevRow && -diff - prevRowHeightLast > prevRowHeight){\r\n\t\t\t\t\t\tmoveToRow = prevRow;\r\n\r\n\t\t\t\t\t\tif(moveToRow !== row){\r\n\t\t\t\t\t\t\tstartYMove = e.touches[0].pageY;\r\n\t\t\t\t\t\t\tmoveToRow.getElement().parentNode.insertBefore(this.placeholderElement, moveToRow.getElement());\r\n\t\t\t\t\t\t\tthis.moveRow(moveToRow, false);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(moveToRow){\r\n\t\t\t\t\tcurrentRow = moveToRow;\r\n\t\t\t\t\tnextRow = moveToRow.nextRow();\r\n\t\t\t\t\tnextRowHeightLast = nextRowHeight;\r\n\t\t\t\t\tnextRowHeight = nextRow ? nextRow.getHeight() / 2 : 0;\r\n\t\t\t\t\tprevRow = moveToRow.prevRow();\r\n\t\t\t\t\tprevRowHeightLast = prevRowHeight;\r\n\t\t\t\t\tprevRowHeight = prevRow ? prevRow.getHeight() / 2 : 0;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\telement.addEventListener(\"touchend\", (e) => {\r\n\t\t\tif(this.checkTimeout){\r\n\t\t\t\tclearTimeout(this.checkTimeout);\r\n\t\t\t}\r\n\t\t\tif(this.moving){\r\n\t\t\t\tthis.endMove(e);\r\n\t\t\t\tthis.touchMove = false;\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t_bindMouseMove(){\r\n\t\tthis.table.rowManager.getDisplayRows().forEach((row) => {\r\n\t\t\tif((row.type === \"row\" || row.type === \"group\") && row.modules.moveRow && 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\tscrollPos;\r\n\r\n\t\tthis.hoverElement.style.top = (yPos - this.startY) + \"px\";\r\n\t}\r\n\r\n\tmoveHoverConnections(e){\r\n\t\tthis.hoverElement.style.left = (this.startX + (this.touchMove ? e.touches[0].pageX : e.pageX)) + \"px\";\r\n\t\tthis.hoverElement.style.top = (this.startY + (this.touchMove ? e.touches[0].pageY : e.pageY)) + \"px\";\r\n\t}\r\n\r\n\telementRowDrop(e, element, row){\r\n\t\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 incomming connection\r\n\tdisconnect(table){\r\n\t\tif(table === this.connectedTable){\r\n\t\t\tthis.connectedTable = false;\r\n\t\t\tthis.connectedRow = false;\r\n\r\n\t\t\tthis.table.element.classList.remove(\"tabulator-movingrow-receiving\");\r\n\r\n\t\t\tthis.table.rowManager.getDisplayRows().forEach((row) =>{\r\n\t\t\t\tif(row.type === \"row\" && row.modules.moveRow && row.modules.moveRow.mouseup){\r\n\t\t\t\t\trow.getElement().removeEventListener(\"mouseup\", row.modules.moveRow.mouseup);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tthis.table.element.removeEventListener(\"mouseup\", this.tableRowDropEvent);\r\n\r\n\t\t\tthis.dispatchExternal(\"movableRowsReceivingStop\", table);\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Move Row Error - trying to disconnect from non connected table\")\r\n\t\t}\r\n\t}\r\n\r\n\tdropComplete(table, row, success){\r\n\t\tvar sender = false;\r\n\r\n\t\tif(success){\r\n\r\n\t\t\tswitch(typeof this.table.options.movableRowsSender){\r\n\t\t\t\tcase \"string\":\r\n\t\t\t\tsender = this.senders[this.table.options.movableRowsSender];\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"function\":\r\n\t\t\t\tsender = this.table.options.movableRowsSender;\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\r\n\t\t\tif(sender){\r\n\t\t\t\tsender.call(this, this.moving.getComponent(), row ? row.getComponent() : undefined, table)\r\n\t\t\t}else{\r\n\t\t\t\tif(this.table.options.movableRowsSender){\r\n\t\t\t\t\tconsole.warn(\"Mover Row Error - no matching sender found:\", this.table.options.movableRowsSender);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tthis.dispatchExternal(\"movableRowsSent\", this.moving.getComponent(), row ? row.getComponent() : undefined, table);\r\n\t\t}else{\r\n\t\t\tthis.dispatchExternal(\"movableRowsSentFailed\", this.moving.getComponent(), row ? row.getComponent() : undefined, table);\r\n\t\t}\r\n\r\n\t\tthis.endMove();\r\n\t}\r\n\r\n\ttableRowDrop(e, row){\r\n\t\tvar receiver = false,\r\n\t\tsuccess = false;\r\n\r\n\t\te.stopImmediatePropagation();\r\n\r\n\t\tswitch(typeof this.table.options.movableRowsReceiver){\r\n\t\t\tcase \"string\":\r\n\t\t\treceiver = this.receivers[this.table.options.movableRowsReceiver];\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"function\":\r\n\t\t\treceiver = this.table.options.movableRowsReceiver;\r\n\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\tif(receiver){\r\n\t\t\tsuccess = receiver.call(this, this.connectedRow.getComponent(), row ? row.getComponent() : undefined, this.connectedTable)\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Mover Row Error - no matching receiver found:\", this.table.options.movableRowsReceiver)\r\n\t\t}\r\n\r\n\t\tif(success){\r\n\t\t\tthis.dispatchExternal(\"movableRowsReceived\", this.connectedRow.getComponent(), row ? row.getComponent() : undefined, this.connectedTable);\r\n\t\t}else{\r\n\t\t\tthis.dispatchExternal(\"movableRowsReceivedFailed\", this.connectedRow.getComponent(), row ? row.getComponent() : undefined, this.connectedTable);\r\n\t\t}\r\n\r\n\t\tthis.commsSend(this.connectedTable, \"moveRow\", \"dropcomplete\", {\r\n\t\t\trow:row,\r\n\t\t\tsuccess:success,\r\n\t\t});\r\n\t}\r\n\r\n\tcommsReceived(table, action, data){\r\n\t\tswitch(action){\r\n\t\t\tcase \"connect\":\r\n\t\t\treturn this.connect(table, data.row);\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"disconnect\":\r\n\t\t\treturn this.disconnect(table);\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"dropcomplete\":\r\n\t\t\treturn this.dropComplete(table, data.row, data.success);\r\n\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n}\r\n\r\nMoveRows.prototype.receivers = {\r\n\tinsert:function(fromRow, toRow, fromTable){\r\n\t\tthis.table.addRow(fromRow.getData(), undefined, toRow);\r\n\t\treturn true;\r\n\t},\r\n\r\n\tadd:function(fromRow, toRow, fromTable){\r\n\t\tthis.table.addRow(fromRow.getData());\r\n\t\treturn true;\r\n\t},\r\n\r\n\tupdate:function(fromRow, toRow, fromTable){\r\n\t\tif(toRow){\r\n\t\t\ttoRow.update(fromRow.getData());\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t},\r\n\r\n\treplace:function(fromRow, toRow, fromTable){\r\n\t\tif(toRow){\r\n\t\t\tthis.table.addRow(fromRow.getData(), undefined, toRow);\r\n\t\t\ttoRow.delete();\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t},\r\n};\r\n\r\nMoveRows.prototype.senders = {\r\n\tdelete:function(fromRow, toRow, toTable){\r\n\t\tfromRow.delete();\r\n\t}\r\n};\r\n\r\nMoveRows.moduleName = \"moveRow\";\r\n\r\nexport default MoveRows;","import Module from '../../core/Module.js';\r\n\r\nimport defaultMutators from './defaults/mutators.js';\r\n\r\nclass Mutator extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.allowedTypes = [\"\", \"data\", \"edit\", \"clipboard\"]; //list of muatation types\r\n\t\tthis.enabled = true;\r\n\r\n\t\tthis.registerColumnOption(\"mutator\");\r\n\t\tthis.registerColumnOption(\"mutatorParams\");\r\n\t\tthis.registerColumnOption(\"mutatorData\");\r\n\t\tthis.registerColumnOption(\"mutatorDataParams\");\r\n\t\tthis.registerColumnOption(\"mutatorEdit\");\r\n\t\tthis.registerColumnOption(\"mutatorEditParams\");\r\n\t\tthis.registerColumnOption(\"mutatorClipboard\");\r\n\t\tthis.registerColumnOption(\"mutatorClipboardParams\");\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tthis.subscribe(\"cell-value-changing\", this.transformCell.bind(this));\r\n\t\tthis.subscribe(\"column-layout\", this.initializeColumn.bind(this));\r\n\t\tthis.subscribe(\"row-data-init-before\", this.rowDataChanged.bind(this));\r\n\t\tthis.subscribe(\"row-data-changing\", this.rowDataChanged.bind(this));\r\n\t}\r\n\r\n\trowDataChanged(row, tempData, updatedData){\r\n\t\treturn this.transformRow(tempData, \"data\", updatedData);\r\n\t}\r\n\r\n\t//initialize column mutator\r\n\tinitializeColumn(column){\r\n\t\tvar match = false,\r\n\t\tconfig = {};\r\n\r\n\t\tthis.allowedTypes.forEach((type) => {\r\n\t\t\tvar key = \"mutator\" + (type.charAt(0).toUpperCase() + type.slice(1)),\r\n\t\t\tmutator;\r\n\r\n\t\t\tif(column.definition[key]){\r\n\t\t\t\tmutator = this.lookupMutator(column.definition[key]);\r\n\r\n\t\t\t\tif(mutator){\r\n\t\t\t\t\tmatch = true;\r\n\r\n\t\t\t\t\tconfig[key] = {\r\n\t\t\t\t\t\tmutator:mutator,\r\n\t\t\t\t\t\tparams: column.definition[key + \"Params\"] || {},\r\n\t\t\t\t\t};\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tif(match){\r\n\t\t\tcolumn.modules.mutate = config;\r\n\t\t}\r\n\t}\r\n\r\n\tlookupMutator(value){\r\n\t\tvar mutator = false;\r\n\r\n\t\t//set column mutator\r\n\t\tswitch(typeof value){\r\n\t\t\tcase \"string\":\r\n\t\t\tif(Mutator.mutators[value]){\r\n\t\t\t\tmutator = Mutator.mutators[value];\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Mutator Error - No such mutator found, ignoring: \", value);\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"function\":\r\n\t\t\tmutator = value;\r\n\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\treturn mutator;\r\n\t}\r\n\r\n\t//apply mutator to row\r\n\ttransformRow(data, type, updatedData){\r\n\t\tvar key = \"mutator\" + (type.charAt(0).toUpperCase() + type.slice(1)),\r\n\t\tvalue;\r\n\r\n\t\tif(this.enabled){\r\n\r\n\t\t\tthis.table.columnManager.traverse((column) => {\r\n\t\t\t\tvar mutator, params, component;\r\n\r\n\t\t\t\tif(column.modules.mutate){\r\n\t\t\t\t\tmutator = column.modules.mutate[key] || column.modules.mutate.mutator || false;\r\n\r\n\t\t\t\t\tif(mutator){\r\n\t\t\t\t\t\tvalue = column.getFieldValue(typeof updatedData !== \"undefined\" ? updatedData : data);\r\n\r\n\t\t\t\t\t\tif(type == \"data\" || typeof value !== \"undefined\"){\r\n\t\t\t\t\t\t\tcomponent = column.getComponent();\r\n\t\t\t\t\t\t\tparams = typeof mutator.params === \"function\" ? mutator.params(value, data, type, component) : mutator.params;\r\n\t\t\t\t\t\t\tcolumn.setFieldValue(data, mutator.mutator(value, data, type, params, component));\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn data;\r\n\t}\r\n\r\n\t//apply mutator to new cell value\r\n\ttransformCell(cell, value){\r\n\t\tif(cell.column.modules.mutate){\r\n\t\t\tvar mutator = cell.column.modules.mutate.mutatorEdit || cell.column.modules.mutate.mutator || false,\r\n\t\t\ttempData = {};\r\n\r\n\t\t\tif(mutator){\r\n\t\t\t\ttempData = Object.assign(tempData, cell.row.getData());\r\n\t\t\t\tcell.column.setFieldValue(tempData, value);\r\n\t\t\t\treturn mutator.mutator(value, tempData, \"edit\", mutator.params, cell.getComponent());\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn value;\r\n\t}\r\n\r\n\tenable(){\r\n\t\tthis.enabled = true;\r\n\t}\r\n\r\n\tdisable(){\r\n\t\tthis.enabled = false;\r\n\t}\r\n}\r\n\r\nMutator.moduleName = \"mutator\";\r\n\r\n//load defaults\r\nMutator.mutators = defaultMutators;\r\n\r\nexport default Mutator;","export default {};","import 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 var 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.displayIndex = 0; //index in display pipeline\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\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\tdispRows = rowManager.getDisplayRows(),\r\n\t\tindex;\r\n\t\t\r\n\t\tif(top){\r\n\t\t\tif(dispRows.length){\r\n\t\t\t\tindex = dispRows[0];\r\n\t\t\t}else{\r\n\t\t\t\tif(rowManager.activeRows.length){\r\n\t\t\t\t\tindex = rowManager.activeRows[rowManager.activeRows.length-1];\r\n\t\t\t\t\ttop = false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tif(dispRows.length){\r\n\t\t\t\tindex = dispRows[dispRows.length - 1];\r\n\t\t\t\ttop = dispRows.length < this.size ? false : true;\r\n\t\t\t}\r\n\t\t}\r\n\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\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.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 && !hidden){\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.table.footerManager.append(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.table.footerManager.append(this.element, this);\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\tsetDisplayIndex(index){\r\n\t\tthis.displayIndex = index;\r\n\t}\r\n\t\r\n\tgetDisplayIndex(){\r\n\t\treturn this.displayIndex;\r\n\t}\r\n\t\r\n\t//calculate maximum page from number of rows\r\n\tsetMaxRows(rowCount){\r\n\t\tif(!rowCount){\r\n\t\t\tthis.max = 1;\r\n\t\t}else{\r\n\t\t\tthis.max = this.size === true ? 1 : Math.ceil(rowCount/this.size);\r\n\t\t}\r\n\t\t\r\n\t\tif(this.page > this.max){\r\n\t\t\tthis.page = this.max;\r\n\t\t}\r\n\t}\r\n\t\r\n\t//reset to first page without triggering action\r\n\treset(force){\r\n\t\tif(!this.initialLoad){\r\n\t\t\tif(this.mode == \"local\" || force){\r\n\t\t\t\tthis.page = 1;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\t//set the maximum page\r\n\tsetMaxPage(max){\r\n\t\t\r\n\t\tmax = parseInt(max);\r\n\t\t\r\n\t\tthis.max = max || 1;\r\n\t\t\r\n\t\tif(this.page > this.max){\r\n\t\t\tthis.page = this.max;\r\n\t\t\tthis.trigger();\r\n\t\t}\r\n\t}\r\n\t\r\n\t//set current page number\r\n\tsetPage(page){\r\n\t\tswitch(page){\r\n\t\t\tcase \"first\":\r\n\t\t\treturn this.setPage(1);\r\n\t\t\tbreak;\r\n\t\t\t\r\n\t\t\tcase \"prev\":\r\n\t\t\treturn this.previousPage();\r\n\t\t\tbreak;\r\n\t\t\t\r\n\t\t\tcase \"next\":\r\n\t\t\treturn this.nextPage();\r\n\t\t\tbreak;\r\n\t\t\t\r\n\t\t\tcase \"last\":\r\n\t\t\treturn this.setPage(this.max);\r\n\t\t\tbreak;\r\n\t\t}\r\n\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.table.rowManager.getDisplayRows(this.displayIndex - 1);\r\n\t\tvar index = rows.indexOf(row);\r\n\t\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\t\t\r\n\t\tif(size > 0){\r\n\t\t\tthis.size = 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\tif(content instanceof Node){\r\n\t\t\t\t\t\r\n\t\t\t\t\t//clear previous cell contents\r\n\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\tthis.pageCounterElement.appendChild(content);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tthis.pageCounterElement.innerHTML = \"\";\r\n\t\t\t\t\t\r\n\t\t\t\t\tif(content != null){\r\n\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}\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\t\tcase \"undefined\":\r\n\t\t\t\tcase \"null\":\r\n\t\t\t\tthis.pageCounterElement.innerHTML = \"\";\r\n\t\t\t\tbreak;\r\n\t\t\t\tdefault:\r\n\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\tleft = this.table.rowManager.scrollLeft;\r\n\t\t\t\r\n\t\t\tthis.refreshData();\r\n\t\t\tthis.table.rowManager.scrollHorizontal(left);\r\n\t\t\t\r\n\t\t\tthis.dispatchExternal(\"pageLoaded\", this.getPage());\r\n\t\t\t\r\n\t\t\treturn Promise.resolve();\r\n\t\t\tbreak;\r\n\t\t\t\r\n\t\t\tcase \"remote\":\r\n\t\t\tthis.dataChanging = true;\r\n\t\t\treturn this.reloadData(null)\r\n\t\t\t.finally(() => {\r\n\t\t\t\tthis.dataChanging = false;\r\n\t\t\t})\r\n\t\t\tbreak;\r\n\t\t\t\r\n\t\t\tcase \"progressive_load\":\r\n\t\t\tcase \"progressive_scroll\":\r\n\t\t\treturn this.reloadData(null, true);\r\n\t\t\tbreak;\r\n\t\t\t\r\n\t\t\tdefault:\r\n\t\t\tconsole.warn(\"Pagination Error - no such pagination mode:\", this.mode);\r\n\t\t\treturn Promise.reject();\r\n\t\t}\r\n\t}\r\n\t\r\n\t_parseRemoteData(data){\r\n\t\tvar left, data, 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\tif(this.page == 1){\r\n\t\t\t\t\t\tthis.table.rowManager.setData(data.data, false, this.page == 1)\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tthis.table.rowManager.addRows(data.data);\r\n\t\t\t\t\t}\r\n\t\t\t\t\t\r\n\t\t\t\t\tif(this.page < this.max){\r\n\t\t\t\t\t\tsetTimeout(() => {\r\n\t\t\t\t\t\t\tthis.nextPage();\r\n\t\t\t\t\t\t}, this.table.options.progressiveLoadDelay);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\t\tcase \"progressive_scroll\":\r\n\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\tthis.table.rowManager.setData(data, this.page !== 1, this.page == 1);\r\n\t\t\t\t\t\r\n\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\tif(this.table.rowManager.element.scrollHeight <= (this.table.rowManager.element.clientHeight + margin)){\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});\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t\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;","// read peristence information from storage\r\nexport default {\r\n\tlocal:function(id, type){\r\n\t\tvar data = localStorage.getItem(id + \"-\" + type);\r\n\r\n\t\treturn data ? JSON.parse(data) : false;\r\n\t},\r\n\tcookie:function(id, type){\r\n\t\tvar cookie = document.cookie,\r\n\t\tkey = id + \"-\" + type,\r\n\t\tcookiePos = cookie.indexOf(key + \"=\"),\r\n\t\tend, data;\r\n\r\n\t\t//if cookie exists, decode and load column data into tabulator\r\n\t\tif(cookiePos > -1){\r\n\t\t\tcookie = cookie.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\tretreivedData;\r\n\r\n\t\t\tthis.mode = mode !== true ? mode : (this.localStorageTest() ? \"local\" : \"cookie\");\r\n\r\n\t\t\tif(this.table.options.persistenceReaderFunc){\r\n\t\t\t\tif(typeof this.table.options.persistenceReaderFunc === \"function\"){\r\n\t\t\t\t\tthis.readFunc = this.table.options.persistenceReaderFunc;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tif(Persistence.readers[this.table.options.persistenceReaderFunc]){\r\n\t\t\t\t\t\tthis.readFunc = Persistence.readers[this.table.options.persistenceReaderFunc];\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tconsole.warn(\"Persistence Read Error - invalid reader set\", this.table.options.persistenceReaderFunc);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tif(Persistence.readers[this.mode]){\r\n\t\t\t\t\tthis.readFunc = Persistence.readers[this.mode];\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.warn(\"Persistence Read Error - invalid reader set\", this.mode);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif(this.table.options.persistenceWriterFunc){\r\n\t\t\t\tif(typeof this.table.options.persistenceWriterFunc === \"function\"){\r\n\t\t\t\t\tthis.writeFunc = this.table.options.persistenceWriterFunc;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tif(Persistence.writers[this.table.options.persistenceWriterFunc]){\r\n\t\t\t\t\t\tthis.writeFunc = Persistence.writers[this.table.options.persistenceWriterFunc];\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tconsole.warn(\"Persistence Write Error - invalid reader set\", this.table.options.persistenceWriterFunc);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tif(Persistence.writers[this.mode]){\r\n\t\t\t\t\tthis.writeFunc = Persistence.writers[this.mode];\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.warn(\"Persistence Write Error - invalid writer set\", this.mode);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t//set storage tag\r\n\t\t\tthis.id = \"tabulator-\" + (id || (this.table.element.getAttribute(\"id\") || \"\"));\r\n\r\n\t\t\tthis.config = {\r\n\t\t\t\tsort:this.table.options.persistence === true || this.table.options.persistence.sort,\r\n\t\t\t\tfilter:this.table.options.persistence === true || this.table.options.persistence.filter,\r\n\t\t\t\tgroup:this.table.options.persistence === true || this.table.options.persistence.group,\r\n\t\t\t\tpage:this.table.options.persistence === true || this.table.options.persistence.page,\r\n\t\t\t\tcolumns:this.table.options.persistence === true ? [\"title\", \"width\", \"visible\"] : this.table.options.persistence.columns,\r\n\t\t\t};\r\n\r\n\t\t\t//load pagination data if needed\r\n\t\t\tif(this.config.page){\r\n\t\t\t\tretreivedData = this.retreiveData(\"page\");\r\n\r\n\t\t\t\tif(retreivedData){\r\n\t\t\t\t\tif(typeof retreivedData.paginationSize !== \"undefined\" && (this.config.page === true || this.config.page.size)){\r\n\t\t\t\t\t\tthis.table.options.paginationSize = retreivedData.paginationSize;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif(typeof retreivedData.paginationInitialPage !== \"undefined\" && (this.config.page === true || this.config.page.page)){\r\n\t\t\t\t\t\tthis.table.options.paginationInitialPage = retreivedData.paginationInitialPage;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t//load group data if needed\r\n\t\t\tif(this.config.group){\r\n\t\t\t\tretreivedData = this.retreiveData(\"group\");\r\n\r\n\t\t\t\tif(retreivedData){\r\n\t\t\t\t\tif(typeof retreivedData.groupBy !== \"undefined\" && (this.config.group === true || this.config.group.groupBy)){\r\n\t\t\t\t\t\tthis.table.options.groupBy = retreivedData.groupBy;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif(typeof retreivedData.groupStartOpen !== \"undefined\" && (this.config.group === true || this.config.group.groupStartOpen)){\r\n\t\t\t\t\t\tthis.table.options.groupStartOpen = retreivedData.groupStartOpen;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif(typeof retreivedData.groupHeader !== \"undefined\" && (this.config.group === true || this.config.group.groupHeader)){\r\n\t\t\t\t\t\tthis.table.options.groupHeader = retreivedData.groupHeader;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif(this.config.columns){\r\n\t\t\t\tthis.table.options.columns = this.load(\"columns\", this.table.options.columns);\r\n\t\t\t\tthis.subscribe(\"column-init\", this.initializeColumn.bind(this));\r\n\t\t\t\tthis.subscribe(\"column-show\", this.save.bind(this, \"columns\"));\r\n\t\t\t\tthis.subscribe(\"column-hide\", this.save.bind(this, \"columns\"));\r\n\t\t\t\tthis.subscribe(\"column-moved\", this.save.bind(this, \"columns\"));\r\n\t\t\t}\r\n\r\n\t\t\tthis.subscribe(\"table-built\", this.tableBuilt.bind(this), 0);\r\n\r\n\t\t\tthis.subscribe(\"table-redraw\", this.tableRedraw.bind(this));\r\n\r\n\t\t\tthis.subscribe(\"filter-changed\", this.eventSave.bind(this, \"filter\"));\r\n\t\t\tthis.subscribe(\"sort-changed\", this.eventSave.bind(this, \"sort\"));\r\n\t\t\tthis.subscribe(\"group-changed\", this.eventSave.bind(this, \"group\"));\r\n\t\t\tthis.subscribe(\"page-changed\", this.eventSave.bind(this, \"page\"));\r\n\t\t\tthis.subscribe(\"column-resized\", this.eventSave.bind(this, \"columns\"));\r\n\t\t\tthis.subscribe(\"layout-refreshed\", this.eventSave.bind(this, \"columns\"));\r\n\t\t}\r\n\r\n\t\tthis.registerTableFunction(\"getColumnLayout\", this.getColumnLayout.bind(this));\r\n\t\tthis.registerTableFunction(\"setColumnLayout\", this.setColumnLayout.bind(this));\r\n\t}\r\n\r\n\teventSave(type){\r\n\t\tif(this.config[type]){\r\n\t\t\tthis.save(type);\r\n\t\t}\r\n\t}\r\n\r\n\ttableBuilt(){\r\n\t\tvar options = this.table.options,\r\n\t\tsorters, filters;\r\n\r\n\t\tif(this.config.sort){\r\n\t\t\tsorters = this.load(\"sort\");\r\n\r\n\t\t\tif(!sorters === false){\r\n\t\t\t\tthis.table.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\t\t\t\tif(props){\r\n\t\t\t\t\tObject.defineProperty(def, key, {\r\n\t\t\t\t\t\tset: function(newValue){\r\n\t\t\t\t\t\t\tvalue = newValue;\r\n\r\n\t\t\t\t\t\t\tif(!this.defWatcherBlock){\r\n\t\t\t\t\t\t\t\tthis.save(\"columns\");\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\tif(props.set){\r\n\t\t\t\t\t\t\t\tprops.set(newValue);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tget:function(){\r\n\t\t\t\t\t\t\tif(props.get){\r\n\t\t\t\t\t\t\t\tprops.get();\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\treturn value;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tthis.defWatcherBlock = false;\r\n\t\t}\r\n\t}\r\n\r\n\t//load saved definitions\r\n\tload(type, current){\r\n\t\tvar data = this.retreiveData(type);\r\n\r\n\t\tif(current){\r\n\t\t\tdata = data ? this.mergeDefinition(current, data) : current;\r\n\t\t}\r\n\r\n\t\treturn data;\r\n\t}\r\n\r\n\t//retreive data from memory\r\n\tretreiveData(type){\r\n\t\treturn this.readFunc ? this.readFunc(this.id, type) : false;\r\n\t}\r\n\r\n\t//merge old and new column definitions\r\n\tmergeDefinition(oldCols, newCols){\r\n\t\tvar output = [];\r\n\r\n\t\tnewCols = newCols || [];\r\n\r\n\t\tnewCols.forEach((column, to) => {\r\n\t\t\tvar from = this._findColumn(oldCols, column),\r\n\t\t\tkeys;\r\n\r\n\t\t\tif(from){\r\n\t\t\t\tif(this.config.columns === true || this.config.columns == undefined){\r\n\t\t\t\t\tkeys = Object.keys(from);\r\n\t\t\t\t\tkeys.push(\"width\");\r\n\t\t\t\t}else{\r\n\t\t\t\t\tkeys = this.config.columns;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tkeys.forEach((key)=>{\r\n\t\t\t\t\tif(key !== \"columns\" && typeof column[key] !== \"undefined\"){\r\n\t\t\t\t\t\tfrom[key] = column[key];\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\tif(from.columns){\r\n\t\t\t\t\tfrom.columns = this.mergeDefinition(from.columns, column.columns);\r\n\t\t\t\t}\r\n\r\n\t\t\t\toutput.push(from);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\toldCols.forEach((column, i) => {\r\n\t\t\tvar from = this._findColumn(newCols, column);\r\n\r\n\t\t\tif (!from) {\r\n\t\t\t\tif(output.length>i){\r\n\t\t\t\t\toutput.splice(i, 0, column);\r\n\t\t\t\t}else{\r\n\t\t\t\t\toutput.push(column);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\t//find matching columns\r\n\t_findColumn(columns, subject){\r\n\t\tvar type = subject.columns ? \"group\" : (subject.field ? \"field\" : \"object\");\r\n\r\n\t\treturn columns.find(function(col){\r\n\t\t\tswitch(type){\r\n\t\t\t\tcase \"group\":\r\n\t\t\t\treturn col.title === subject.title && col.columns.length === subject.columns.length;\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"field\":\r\n\t\t\t\treturn col.field === subject.field;\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"object\":\r\n\t\t\t\treturn col === subject;\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t//save data\r\n\tsave(type){\r\n\t\tvar data = {};\r\n\r\n\t\tswitch(type){\r\n\t\t\tcase \"columns\":\r\n\t\t\tdata = this.parseColumns(this.table.columnManager.getColumns())\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"filter\":\r\n\t\t\tdata = this.table.modules.filter.getFilters();\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"sort\":\r\n\t\t\tdata = this.validateSorters(this.table.modules.sort.getSort());\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"group\":\r\n\t\t\tdata = this.getGroupConfig();\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"page\":\r\n\t\t\tdata = this.getPageConfig();\r\n\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\tif(this.writeFunc){\r\n\t\t\tthis.writeFunc(this.id, type, data);\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t//ensure sorters contain no function data\r\n\tvalidateSorters(data){\r\n\t\tdata.forEach(function(item){\r\n\t\t\titem.column = item.field;\r\n\t\t\tdelete item.field;\r\n\t\t});\r\n\r\n\t\treturn data;\r\n\t}\r\n\r\n\tgetGroupConfig(){\r\n\t\tvar data = {};\r\n\r\n\t\tif(this.config.group){\r\n\t\t\tif(this.config.group === true || this.config.group.groupBy){\r\n\t\t\t\tdata.groupBy = this.table.options.groupBy;\r\n\t\t\t}\r\n\r\n\t\t\tif(this.config.group === true || this.config.group.groupStartOpen){\r\n\t\t\t\tdata.groupStartOpen = this.table.options.groupStartOpen;\r\n\t\t\t}\r\n\r\n\t\t\tif(this.config.group === true || this.config.group.groupHeader){\r\n\t\t\t\tdata.groupHeader = this.table.options.groupHeader;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn data;\r\n\t}\r\n\r\n\tgetPageConfig(){\r\n\t\tvar data = {};\r\n\r\n\t\tif(this.config.page){\r\n\t\t\tif(this.config.page === true || this.config.page.size){\r\n\t\t\t\tdata.paginationSize = this.table.modules.page.getPageSize();\r\n\t\t\t}\r\n\r\n\t\t\tif(this.config.page === true || this.config.page.page){\r\n\t\t\t\tdata.paginationInitialPage = this.table.modules.page.getPage();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn data;\r\n\t}\r\n\r\n\r\n\t//parse columns for data to store\r\n\tparseColumns(columns){\r\n\t\tvar definitions = [],\r\n\t\texcludedKeys = [\"headerContextMenu\", \"headerMenu\", \"contextMenu\", \"clickMenu\"];\r\n\r\n\t\tcolumns.forEach((column) => {\r\n\t\t\tvar defStore = {},\r\n\t\t\tcolDef = column.getDefinition(),\r\n\t\t\tkeys;\r\n\r\n\t\t\tif(column.isGroup){\r\n\t\t\t\tdefStore.title = colDef.title;\r\n\t\t\t\tdefStore.columns = this.parseColumns(column.getColumns());\r\n\t\t\t}else{\r\n\t\t\t\tdefStore.field = column.getField();\r\n\r\n\t\t\t\tif(this.config.columns === true || this.config.columns == undefined){\r\n\t\t\t\t\tkeys = Object.keys(colDef);\r\n\t\t\t\t\tkeys.push(\"width\");\r\n\t\t\t\t}else{\r\n\t\t\t\t\tkeys = this.config.columns;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tkeys.forEach((key)=>{\r\n\t\t\t\t\tswitch(key){\r\n\t\t\t\t\t\tcase \"width\":\r\n\t\t\t\t\t\tdefStore.width = column.getWidth();\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase \"visible\":\r\n\t\t\t\t\t\tdefStore.visible = column.visible;\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\tdefault:\r\n\t\t\t\t\t\tif(typeof colDef[key] !== \"function\" && excludedKeys.indexOf(key) === -1){\r\n\t\t\t\t\t\t\tdefStore[key] = colDef[key];\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\tdefinitions.push(defStore);\r\n\t\t});\r\n\r\n\t\treturn definitions;\r\n\t}\r\n}\r\n\r\nPersistence.moduleName = \"persistence\";\r\n\r\nPersistence.moduleInitOrder = 1;\r\n\r\n//load defaults\r\nPersistence.readers = defaultReaders;\r\nPersistence.writers = defaultWriters;\r\n\r\nexport default Persistence;","import Module from '../../core/Module.js';\r\n\r\nclass Print extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.element = false;\r\n\t\tthis.manualBlock = false;\r\n\r\n\t\tthis.registerTableOption(\"printAsHtml\", false); //enable print as html\r\n\t\tthis.registerTableOption(\"printFormatter\", false); //printing page formatter\r\n\t\tthis.registerTableOption(\"printHeader\", false); //page header contents\r\n\t\tthis.registerTableOption(\"printFooter\", false); //page footer contents\r\n\t\tthis.registerTableOption(\"printStyled\", true); //enable print as html styling\r\n\t\tthis.registerTableOption(\"printRowRange\", \"visible\"); //restrict print to visible rows only\r\n\t\tthis.registerTableOption(\"printConfig\", {}); //print config options\r\n\r\n\t\tthis.registerColumnOption(\"print\");\r\n\t\tthis.registerColumnOption(\"titlePrint\");\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tif(this.table.options.printAsHtml){\r\n\t\t\twindow.addEventListener(\"beforeprint\", this.replaceTable.bind(this));\r\n\t\t\twindow.addEventListener(\"afterprint\", this.cleanup.bind(this));\r\n\t\t}\r\n\r\n\t\tthis.registerTableFunction(\"print\", this.printFullscreen.bind(this));\r\n\t}\r\n\r\n\t///////////////////////////////////\r\n\t///////// Table Functions /////////\r\n\t///////////////////////////////////\r\n\r\n\t///////////////////////////////////\r\n\t///////// Internal Logic //////////\r\n\t///////////////////////////////////\r\n\r\n\treplaceTable(){\r\n\t\tif(!this.manualBlock){\r\n\t\t\tthis.element = document.createElement(\"div\");\r\n\t\t\tthis.element.classList.add(\"tabulator-print-table\");\r\n\r\n\t\t\tthis.element.appendChild(this.table.modules.export.genereateTable(this.table.options.printConfig, this.table.options.printStyled, this.table.options.printRowRange, \"print\"));\r\n\r\n\t\t\tthis.table.element.style.display = \"none\";\r\n\r\n\t\t\tthis.table.element.parentNode.insertBefore(this.element, this.table.element);\r\n\t\t}\r\n\t}\r\n\r\n\tcleanup(){\r\n\t\tdocument.body.classList.remove(\"tabulator-print-fullscreen-hide\");\r\n\r\n\t\tif(this.element && this.element.parentNode){\r\n\t\t\tthis.element.parentNode.removeChild(this.element);\r\n\t\t\tthis.table.element.style.display = \"\";\r\n\t\t}\r\n\t}\r\n\r\n\tprintFullscreen(visible, style, config){\r\n\t\tvar scrollX = window.scrollX,\r\n\t\tscrollY = window.scrollY,\r\n\t\theaderEl = document.createElement(\"div\"),\r\n\t\tfooterEl = document.createElement(\"div\"),\r\n\t\ttableEl = this.table.modules.export.genereateTable(typeof config != \"undefined\" ? config : this.table.options.printConfig, typeof style != \"undefined\" ? style : this.table.options.printStyled, visible || this.table.options.printRowRange, \"print\"),\r\n\t\theaderContent, footerContent;\r\n\r\n\t\tthis.manualBlock = true;\r\n\r\n\t\tthis.element = document.createElement(\"div\");\r\n\t\tthis.element.classList.add(\"tabulator-print-fullscreen\");\r\n\r\n\t\tif(this.table.options.printHeader){\r\n\t\t\theaderEl.classList.add(\"tabulator-print-header\");\r\n\r\n\t\t\theaderContent = typeof this.table.options.printHeader == \"function\" ? this.table.options.printHeader.call(this.table) : this.table.options.printHeader;\r\n\r\n\t\t\tif(typeof headerContent == \"string\"){\r\n\t\t\t\theaderEl.innerHTML = headerContent;\r\n\t\t\t}else{\r\n\t\t\t\theaderEl.appendChild(headerContent);\r\n\t\t\t}\r\n\r\n\t\t\tthis.element.appendChild(headerEl);\r\n\t\t}\r\n\r\n\t\tthis.element.appendChild(tableEl);\r\n\r\n\t\tif(this.table.options.printFooter){\r\n\t\t\tfooterEl.classList.add(\"tabulator-print-footer\");\r\n\r\n\t\t\tfooterContent = typeof this.table.options.printFooter == \"function\" ? this.table.options.printFooter.call(this.table) : this.table.options.printFooter;\r\n\r\n\r\n\t\t\tif(typeof footerContent == \"string\"){\r\n\t\t\t\tfooterEl.innerHTML = footerContent;\r\n\t\t\t}else{\r\n\t\t\t\tfooterEl.appendChild(footerContent);\r\n\t\t\t}\r\n\r\n\t\t\tthis.element.appendChild(footerEl);\r\n\t\t}\r\n\r\n\t\tdocument.body.classList.add(\"tabulator-print-fullscreen-hide\");\r\n\t\tdocument.body.appendChild(this.element);\r\n\r\n\t\tif(this.table.options.printFormatter){\r\n\t\t\tthis.table.options.printFormatter(this.element, tableEl);\r\n\t\t}\r\n\r\n\t\twindow.print();\r\n\r\n\t\tthis.cleanup();\r\n\r\n\t\twindow.scrollTo(scrollX, scrollY);\r\n\r\n\t\tthis.manualBlock = false;\r\n\t}\r\n}\r\n\r\nPrint.moduleName = \"print\";\r\n\r\nexport default Print;","import Module from '../../core/Module.js';\r\n\r\nclass ReactiveData extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.data = false;\r\n\t\tthis.blocked = false; //block reactivity while performing update\r\n\t\tthis.origFuncs = {}; // hold original data array functions to allow replacement after data is done with\r\n\t\tthis.currentVersion = 0;\r\n\r\n\t\tthis.registerTableOption(\"reactiveData\", false); //enable data reactivity\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tif(this.table.options.reactiveData){\r\n\t\t\tthis.subscribe(\"cell-value-save-before\", this.block.bind(this));\r\n\t\t\tthis.subscribe(\"cell-value-save-after\", this.unblock.bind(this));\r\n\t\t\tthis.subscribe(\"row-data-save-before\", this.block.bind(this));\r\n\t\t\tthis.subscribe(\"row-data-save-after\", this.unblock.bind(this));\r\n\t\t\tthis.subscribe(\"row-data-init-after\", this.watchRow.bind(this));\r\n\t\t\tthis.subscribe(\"data-processing\", this.watchData.bind(this));\r\n\t\t\tthis.subscribe(\"table-destroy\", this.unwatchData.bind(this));\r\n\t\t}\r\n\t}\r\n\r\n\twatchData(data){\r\n\t\tvar self = this,\r\n\t\tpushFunc, version;\r\n\r\n\t\tthis.currentVersion ++;\r\n\r\n\t\tversion = this.currentVersion;\r\n\r\n\t\tthis.unwatchData();\r\n\r\n\t\tthis.data = data;\r\n\r\n\t\t//override array push function\r\n\t\tthis.origFuncs.push = data.push;\r\n\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\r\n\t\t\t\tif(!self.blocked && version === self.currentVersion){\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}\r\n\r\n\t\t\t\treturn self.origFuncs.push.apply(data, arguments);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\t//override array unshift function\r\n\t\tthis.origFuncs.unshift = data.unshift;\r\n\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\r\n\t\t\t\tif(!self.blocked && version === self.currentVersion){\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}\r\n\r\n\t\t\t\treturn self.origFuncs.unshift.apply(data, arguments);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\r\n\t\t//override array shift function\r\n\t\tthis.origFuncs.shift = data.shift;\r\n\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;\r\n\r\n\t\t\t\tif(!self.blocked && version === self.currentVersion){\r\n\t\t\t\t\tif(self.data.length){\r\n\t\t\t\t\t\trow = self.table.rowManager.getRowFromDataObject(self.data[0]);\r\n\r\n\t\t\t\t\t\tif(row){\r\n\t\t\t\t\t\t\trow.deleteActual();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn self.origFuncs.shift.call(data);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\t//override array pop function\r\n\t\tthis.origFuncs.pop = data.pop;\r\n\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;\r\n\t\t\t\tif(!self.blocked && version === self.currentVersion){\r\n\t\t\t\t\tif(self.data.length){\r\n\t\t\t\t\t\trow = self.table.rowManager.getRowFromDataObject(self.data[self.data.length - 1]);\r\n\r\n\t\t\t\t\t\tif(row){\r\n\t\t\t\t\t\t\trow.deleteActual();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn self.origFuncs.pop.call(data);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\r\n\t\t//override array splice function\r\n\t\tthis.origFuncs.splice = data.splice;\r\n\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;\r\n\r\n\t\t\t\tif(!self.blocked && version === self.currentVersion){\r\n\r\n\t\t\t\t\t//add new rows\r\n\t\t\t\t\tif(newRows){\r\n\t\t\t\t\t\tstartRow = data[start] ? self.table.rowManager.getRowFromDataObject(data[start]) : false;\r\n\r\n\t\t\t\t\t\tif(startRow){\r\n\t\t\t\t\t\t\tnewRows.forEach((rowData) => {\r\n\t\t\t\t\t\t\t\tself.table.rowManager.addRowActual(rowData, true, startRow, true);\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\tnewRows = newRows.slice().reverse();\r\n\r\n\t\t\t\t\t\t\tnewRows.forEach((rowData) => {\r\n\t\t\t\t\t\t\t\tself.table.rowManager.addRowActual(rowData, true, false, true);\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t//delete removed rows\r\n\t\t\t\t\tif(end !== 0){\r\n\t\t\t\t\t\tvar oldRows = data.slice(start, typeof args[1] === \"undefined\" ? args[1] : start + end);\r\n\r\n\t\t\t\t\t\toldRows.forEach((rowData, i) => {\r\n\t\t\t\t\t\t\tvar row = self.table.rowManager.getRowFromDataObject(rowData);\r\n\r\n\t\t\t\t\t\t\tif(row){\r\n\t\t\t\t\t\t\t\trow.deleteActual(i !== oldRows.length - 1);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif(newRows || end !== 0){\r\n\t\t\t\t\t\tself.table.rowManager.reRenderInPosition();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn self.origFuncs.splice.apply(data, arguments);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tunwatchData(){\r\n\t\tif(this.data !== false){\r\n\t\t\tfor(var key in this.origFuncs){\r\n\t\t\t\tObject.defineProperty(this.data, key, {\r\n\t\t\t\t\tenumerable: true,\r\n\t\t\t\t\tconfigurable:true,\r\n\t\t\t\t\twritable:true,\r\n\t\t\t\t\tvalue: this.origFuncs.key,\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\twatchRow(row){\r\n\t\tvar data = row.getData();\r\n\r\n\t\tthis.blocked = true;\r\n\r\n\t\tfor(var key in data){\r\n\t\t\tthis.watchKey(row, data, key);\r\n\t\t}\r\n\r\n\t\tif(this.table.options.dataTree){\r\n\t\t\tthis.watchTreeChildren(row);\r\n\t\t}\r\n\r\n\t\tthis.blocked = false;\r\n\t}\r\n\r\n\twatchTreeChildren (row){\r\n\t\tvar childField = row.getData()[this.table.options.dataTreeChildField],\r\n\t\torigFuncs = {};\r\n\r\n\t\tfunction rebuildTree(){\r\n\t\t\tthis.table.modules.dataTree.initializeRow(row);\r\n\t\t\tthis.table.modules.dataTree.layoutRow(row);\r\n\t\t\tthis.table.rowManager.refreshActiveData(\"tree\", false, true);\r\n\t\t}\r\n\r\n\t\tif(childField){\r\n\r\n\t\t\torigFuncs.push = childField.push;\r\n\r\n\t\t\tObject.defineProperty(childField, \"push\", {\r\n\t\t\t\tenumerable: false,\r\n\t\t\t\tconfigurable: true,\r\n\t\t\t\tvalue: () => {\r\n\t\t\t\t\tvar result = origFuncs.push.apply(childField, arguments);\r\n\r\n\t\t\t\t\trebuildTree();\r\n\r\n\t\t\t\t\treturn result;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\torigFuncs.unshift = childField.unshift;\r\n\r\n\t\t\tObject.defineProperty(childField, \"unshift\", {\r\n\t\t\t\tenumerable: false,\r\n\t\t\t\tconfigurable: true,\r\n\t\t\t\tvalue: () => {\r\n\t\t\t\t\tvar result = origFuncs.unshift.apply(childField, arguments);\r\n\r\n\t\t\t\t\trebuildTree();\r\n\r\n\t\t\t\t\treturn result;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\torigFuncs.shift = childField.shift;\r\n\r\n\t\t\tObject.defineProperty(childField, \"shift\", {\r\n\t\t\t\tenumerable: false,\r\n\t\t\t\tconfigurable: true,\r\n\t\t\t\tvalue: () => {\r\n\t\t\t\t\tvar result = origFuncs.shift.call(childField);\r\n\r\n\t\t\t\t\trebuildTree();\r\n\r\n\t\t\t\t\treturn result;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\torigFuncs.pop = childField.pop;\r\n\r\n\t\t\tObject.defineProperty(childField, \"pop\", {\r\n\t\t\t\tenumerable: false,\r\n\t\t\t\tconfigurable: true,\r\n\t\t\t\tvalue: () => {\r\n\t\t\t\t\tvar result = origFuncs.pop.call(childField);\r\n\r\n\t\t\t\t\trebuildTree();\r\n\r\n\t\t\t\t\treturn result;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\torigFuncs.splice = childField.splice;\r\n\r\n\t\t\tObject.defineProperty(childField, \"splice\", {\r\n\t\t\t\tenumerable: false,\r\n\t\t\t\tconfigurable: true,\r\n\t\t\t\tvalue: () => {\r\n\t\t\t\t\tvar result = origFuncs.splice.apply(childField, arguments);\r\n\r\n\t\t\t\t\trebuildTree();\r\n\r\n\t\t\t\t\treturn result;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\twatchKey(row, data, key){\r\n\t\tvar props = Object.getOwnPropertyDescriptor(data, key),\r\n\t\tvalue = data[key],\r\n\t\tversion = this.currentVersion;\r\n\r\n\t\tObject.defineProperty(data, key, {\r\n\t\t\tset: (newValue) => {\r\n\t\t\t\tvalue = newValue;\r\n\t\t\t\tif(!this.blocked && version === this.currentVersion){\r\n\t\t\t\t\tvar update = {};\r\n\t\t\t\t\tupdate[key] = newValue;\r\n\t\t\t\t\trow.updateData(update);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(props.set){\r\n\t\t\t\t\tprops.set(newValue);\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tget:() => {\r\n\r\n\t\t\t\tif(props.get){\r\n\t\t\t\t\tprops.get();\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn value;\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tunwatchRow(row){\r\n\t\tvar data = row.getData();\r\n\r\n\t\tfor(var key in data){\r\n\t\t\tObject.defineProperty(data, key, {\r\n\t\t\t\tvalue:data[key],\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tblock(){\r\n\t\tthis.blocked = true;\r\n\t}\r\n\r\n\tunblock(){\r\n\t\tthis.blocked = false;\r\n\t}\r\n}\r\n\r\nReactiveData.moduleName = \"reactiveData\";\r\n\r\nexport default ReactiveData;\r\n\r\n\r\n\r\n","import Module from '../../core/Module.js';\r\n\r\nclass ResizeColumns extends Module{\r\n\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.handle = null;\r\n\t\tthis.prevHandle = null;\r\n\t\t\r\n\t\tthis.registerColumnOption(\"resizable\", true);\r\n\t}\r\n\t\r\n\tinitialize(){\r\n\t\t// if(this.table.options.resizableColumns){\r\n\t\tthis.subscribe(\"cell-layout\", this.layoutCellHandles.bind(this));\r\n\t\tthis.subscribe(\"column-init\", this.layoutColumnHeader.bind(this));\r\n\t\t// }\r\n\t}\r\n\t\r\n\tlayoutCellHandles(cell){\r\n\t\tif(cell.row.type === \"row\"){\r\n\t\t\tthis.initializeColumn(\"cell\", cell.column, cell.element);\r\n\t\t}\r\n\t}\r\n\t\r\n\tlayoutColumnHeader(column){\r\n\t\tthis.initializeColumn(\"header\", column, column.element);\r\n\t}\r\n\t\r\n\tinitializeColumn(type, column, element){\r\n\t\tvar self = this,\r\n\t\tvariableHeight = false,\r\n\t\tmode = column.definition.resizable;\r\n\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\tcolumn.modules.resize = {variableHeight:variableHeight};\r\n\t\t}\r\n\t\t\r\n\t\tif(mode === true || mode == type){\r\n\t\t\t\r\n\t\t\tvar handle = document.createElement('div');\r\n\t\t\thandle.className = \"tabulator-col-resize-handle\";\r\n\t\t\t\r\n\t\t\t\r\n\t\t\tvar prevHandle = document.createElement('div');\r\n\t\t\tprevHandle.className = \"tabulator-col-resize-handle prev\";\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\tvar nearestColumn = column.getLastColumn();\r\n\t\t\t\t\r\n\t\t\t\tif(nearestColumn && self._checkResizability(nearestColumn)){\r\n\t\t\t\t\tself.startColumn = column;\r\n\t\t\t\t\tself._mouseDown(e, nearestColumn, handle);\r\n\t\t\t\t}\r\n\t\t\t};\r\n\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//reszie column on double click\r\n\t\t\thandle.addEventListener(\"dblclick\", function(e){\r\n\t\t\t\tvar col = column.getLastColumn(),\r\n\t\t\t\toldWidth;\r\n\t\t\t\t\r\n\t\t\t\tif(col && self._checkResizability(col)){\r\n\t\t\t\t\toldWidth = col.getWidth();\r\n\r\n\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\tcol.reinitializeWidth(true);\r\n\r\n\t\t\t\t\tif(oldWidth !== col.getWidth()){\r\n\t\t\t\t\t\tself.dispatch(\"column-resized\", col);\r\n\t\t\t\t\t\tself.table.externalEvents.dispatch(\"columnResized\", col.getComponent());\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\r\n\t\t\tprevHandle.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 prevHandleDown = function(e){\r\n\t\t\t\tvar nearestColumn, colIndex, prevColumn;\r\n\t\t\t\t\r\n\t\t\t\tnearestColumn = column.getFirstColumn();\r\n\t\t\t\t\r\n\t\t\t\tif(nearestColumn){\r\n\t\t\t\t\tcolIndex = self.table.columnManager.findColumnIndex(nearestColumn);\r\n\t\t\t\t\tprevColumn = colIndex > 0 ? self.table.columnManager.getColumnByIndex(colIndex - 1) : false;\r\n\t\t\t\t\t\r\n\t\t\t\t\tif(prevColumn && self._checkResizability(prevColumn)){\r\n\t\t\t\t\t\tself.startColumn = column;\r\n\t\t\t\t\t\tself._mouseDown(e, prevColumn, prevHandle);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tprevHandle.addEventListener(\"mousedown\", prevHandleDown);\r\n\t\t\tprevHandle.addEventListener(\"touchstart\", prevHandleDown, {passive: true});\r\n\t\t\t\r\n\t\t\t//resize column on double click\r\n\t\t\tprevHandle.addEventListener(\"dblclick\", function(e){\r\n\t\t\t\tvar nearestColumn, colIndex, prevColumn;\r\n\t\t\t\t\r\n\t\t\t\tnearestColumn = column.getFirstColumn();\r\n\t\t\t\t\r\n\t\t\t\tif(nearestColumn){\r\n\t\t\t\t\tcolIndex = self.table.columnManager.findColumnIndex(nearestColumn);\r\n\t\t\t\t\tprevColumn = colIndex > 0 ? self.table.columnManager.getColumnByIndex(colIndex - 1) : false;\r\n\t\t\t\t\t\r\n\t\t\t\t\tif(prevColumn && self._checkResizability(prevColumn)){\r\n\t\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\t\tprevColumn.reinitializeWidth(true);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\t\r\n\t\t\telement.appendChild(handle);\r\n\t\t\telement.appendChild(prevHandle);\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\r\n\t\tfunction mouseMove(e){\r\n\t\t\t// self.table.columnManager.tempScrollBlock();\r\n\t\t\t\r\n\t\t\tif(self.table.rtl){\r\n\t\t\t\tcolumn.setWidth(self.startWidth - ((typeof e.screenX === \"undefined\" ? e.touches[0].screenX : e.screenX) - self.startX));\r\n\t\t\t}else{\r\n\t\t\t\tcolumn.setWidth(self.startWidth + ((typeof e.screenX === \"undefined\" ? e.touches[0].screenX : e.screenX) - self.startX));\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tself.table.columnManager.renderer.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\r\n\t\t\tif(self.startWidth !== column.getWidth()){\r\n\t\t\t\tself.dispatch(\"column-resized\", column);\r\n\t\t\t\tself.table.externalEvents.dispatch(\"columnResized\", column.getComponent());\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\te.stopPropagation(); //prevent resize from interfereing 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.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 interfereing with movable columns\r\n\r\n\t\t//block editor from taking action while resizing is taking place\r\n\t\t// if(self.startColumn.modules.edit){\r\n\t\t// \tself.startColumn.modules.edit.blocked = true;\r\n\t\t// }\r\n\r\n\t\tself.startY = typeof e.screenY === \"undefined\" ? e.touches[0].screenY : e.screenY;\r\n\t\tself.startHeight = row.getHeight();\r\n\r\n\t\tdocument.body.addEventListener(\"mousemove\", mouseMove);\r\n\t\tdocument.body.addEventListener(\"mouseup\", mouseUp);\r\n\r\n\t\thandle.addEventListener(\"touchmove\", mouseMove, {passive: true});\r\n\t\thandle.addEventListener(\"touchend\", mouseUp);\r\n\t}\r\n}\r\n\r\nResizeRows.moduleName = \"resizeRows\";\r\n\r\nexport default ResizeRows;","import Module from '../../core/Module.js';\r\n\r\nclass ResizeTable extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.binding = false;\r\n\t\tthis.observer = false;\r\n\t\tthis.containerObserver = false;\r\n\r\n\t\tthis.tableHeight = 0;\r\n\t\tthis.tableWidth = 0;\r\n\t\tthis.containerHeight = 0;\r\n\t\tthis.containerWidth = 0;\r\n\r\n\t\tthis.autoResize = false;\r\n\r\n\t\tthis.registerTableOption(\"autoResize\", true); //auto resize table\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tif(this.table.options.autoResize){\r\n\t\t\tvar table = this.table,\r\n\t\t\ttableStyle;\r\n\r\n\t\t\tthis.tableHeight = table.element.clientHeight;\r\n\t\t\tthis.tableWidth = table.element.clientWidth;\r\n\r\n\t\t\tif(table.element.parentNode){\r\n\t\t\t\tthis.containerHeight = table.element.parentNode.clientHeight;\r\n\t\t\t\tthis.containerWidth = table.element.parentNode.clientWidth;\r\n\t\t\t}\r\n\r\n\t\t\tif(typeof ResizeObserver !== \"undefined\" && table.rowManager.getRenderMode() === \"virtual\"){\r\n\r\n\t\t\t\tthis.autoResize = true;\r\n\r\n\t\t\t\tthis.observer = new ResizeObserver((entry) => {\r\n\t\t\t\t\tif(!table.browserMobile || (table.browserMobile &&!table.modules.edit.currentCell)){\r\n\r\n\t\t\t\t\t\tvar nodeHeight = Math.floor(entry[0].contentRect.height);\r\n\t\t\t\t\t\tvar nodeWidth = Math.floor(entry[0].contentRect.width);\r\n\r\n\t\t\t\t\t\tif(this.tableHeight != nodeHeight || this.tableWidth != nodeWidth){\r\n\t\t\t\t\t\t\tthis.tableHeight = nodeHeight;\r\n\t\t\t\t\t\t\tthis.tableWidth = nodeWidth;\r\n\r\n\t\t\t\t\t\t\tif(table.element.parentNode){\r\n\t\t\t\t\t\t\t\tthis.containerHeight = table.element.parentNode.clientHeight;\r\n\t\t\t\t\t\t\t\tthis.containerWidth = table.element.parentNode.clientWidth;\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\tthis.table.columnManager.renderer.rerenderColumns(true);\r\n\r\n\t\t\t\t\t\t\ttable.redraw();\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\tthis.observer.observe(table.element);\r\n\r\n\t\t\t\ttableStyle = window.getComputedStyle(table.element);\r\n\r\n\t\t\t\tif(this.table.element.parentNode && !this.table.rowManager.fixedHeight && (tableStyle.getPropertyValue(\"max-height\") || tableStyle.getPropertyValue(\"min-height\"))){\r\n\r\n\t\t\t\t\tthis.containerObserver = new ResizeObserver((entry) => {\r\n\t\t\t\t\t\tif(!table.browserMobile || (table.browserMobile &&!table.modules.edit.currentCell)){\r\n\r\n\t\t\t\t\t\t\tvar nodeHeight = Math.floor(entry[0].contentRect.height);\r\n\t\t\t\t\t\t\tvar nodeWidth = Math.floor(entry[0].contentRect.width);\r\n\r\n\t\t\t\t\t\t\tif(this.containerHeight != nodeHeight || this.containerWidth != nodeWidth){\r\n\t\t\t\t\t\t\t\tthis.containerHeight = nodeHeight;\r\n\t\t\t\t\t\t\t\tthis.containerWidth = nodeWidth;\r\n\t\t\t\t\t\t\t\tthis.tableHeight = table.element.clientHeight;\r\n\t\t\t\t\t\t\t\tthis.tableWidth = table.element.clientWidth;\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\ttable.columnManager.renderer.rerenderColumns(true);\r\n\r\n\t\t\t\t\t\t\ttable.redraw();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\tthis.containerObserver.observe(this.table.element.parentNode);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.subscribe(\"table-resize\", this.tableResized.bind(this));\r\n\r\n\t\t\t}else{\r\n\t\t\t\tthis.binding = function(){\r\n\t\t\t\t\tif(!table.browserMobile || (table.browserMobile && !table.modules.edit.currentCell)){\r\n\r\n\t\t\t\t\t\ttable.columnManager.renderer.rerenderColumns(true);\r\n\r\n\t\t\t\t\t\ttable.redraw();\r\n\t\t\t\t\t}\r\n\t\t\t\t};\r\n\r\n\t\t\t\twindow.addEventListener(\"resize\", this.binding);\r\n\t\t\t}\r\n\r\n\t\t\tthis.subscribe(\"table-destroy\", this.clearBindings.bind(this));\r\n\t\t}\r\n\t}\r\n\r\n\ttableResized(){\r\n\t\tthis.table.rowManager.redraw();\r\n\t}\r\n\r\n\tclearBindings(){\r\n\t\tif(this.binding){\r\n\t\t\twindow.removeEventListener(\"resize\", this.binding);\r\n\t\t}\r\n\r\n\t\tif(this.observer){\r\n\t\t\tthis.observer.unobserve(this.table.element);\r\n\t\t}\r\n\r\n\t\tif(this.containerObserver){\r\n\t\t\tthis.containerObserver.unobserve(this.table.element.parentNode);\r\n\t\t}\r\n\t}\r\n}\r\n\r\nResizeTable.moduleName = \"resizeTable\";\r\n\r\nexport default ResizeTable;","import Module from '../../core/Module.js';\r\n\r\nclass ResponsiveLayout extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.columns = [];\r\n\t\tthis.hiddenColumns = [];\r\n\t\tthis.mode = \"\";\r\n\t\tthis.index = 0;\r\n\t\tthis.collapseFormatter = [];\r\n\t\tthis.collapseStartOpen = true;\r\n\t\tthis.collapseHandleColumn = false;\r\n\r\n\t\tthis.registerTableOption(\"responsiveLayout\", false); //responsive layout flags\r\n\t\tthis.registerTableOption(\"responsiveLayoutCollapseStartOpen\", true); //start showing collapsed data\r\n\t\tthis.registerTableOption(\"responsiveLayoutCollapseUseFormatters\", true); //responsive layout collapse formatter\r\n\t\tthis.registerTableOption(\"responsiveLayoutCollapseFormatter\", false); //responsive layout collapse formatter\r\n\r\n\t\tthis.registerColumnOption(\"responsive\");\r\n\t}\r\n\r\n\t//generate responsive columns list\r\n\tinitialize(){\r\n\t\tvar self = this,\r\n\t\tcolumns = [];\r\n\r\n\t\tif(this.table.options.responsiveLayout){\r\n\t\t\tthis.subscribe(\"column-layout\", this.initializeColumn.bind(this));\r\n\t\t\tthis.subscribe(\"column-show\", this.updateColumnVisibility.bind(this));\r\n\t\t\tthis.subscribe(\"column-hide\", this.updateColumnVisibility.bind(this));\r\n\t\t\tthis.subscribe(\"columns-loaded\", this.initializeResponsivity.bind(this));\r\n\t\t\tthis.subscribe(\"column-moved\", this.initializeResponsivity.bind(this));\r\n\t\t\tthis.subscribe(\"column-add\", this.initializeResponsivity.bind(this));\r\n\t\t\tthis.subscribe(\"column-delete\", this.initializeResponsivity.bind(this));\r\n\r\n\t\t\tthis.subscribe(\"table-redrawing\", this.tableRedraw.bind(this));\r\n\r\n\t\t\tif(this.table.options.responsiveLayout === \"collapse\"){\r\n\t\t\t\tthis.subscribe(\"row-init\", this.initializeRow.bind(this));\r\n\t\t\t\tthis.subscribe(\"row-layout\", this.layoutRow.bind(this));\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\ttableRedraw(force){\r\n\t\tif([\"fitColumns\", \"fitDataStretch\"].indexOf(this.layoutMode()) === -1){\r\n\t\t\tif(!force){\r\n\t\t\t\tthis.update();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tinitializeResponsivity(){\r\n\t\tvar columns = [];\r\n\r\n\t\tthis.mode = this.table.options.responsiveLayout;\r\n\t\tthis.collapseFormatter = this.table.options.responsiveLayoutCollapseFormatter || this.formatCollapsedData;\r\n\t\tthis.collapseStartOpen = this.table.options.responsiveLayoutCollapseStartOpen;\r\n\t\tthis.hiddenColumns = [];\r\n\r\n\t\t//determine level of responsivity for each column\r\n\t\tthis.table.columnManager.columnsByIndex.forEach((column, i) => {\r\n\t\t\tif(column.modules.responsive){\r\n\t\t\t\tif(column.modules.responsive.order && column.modules.responsive.visible){\r\n\t\t\t\t\tcolumn.modules.responsive.index = i;\r\n\t\t\t\t\tcolumns.push(column);\r\n\r\n\t\t\t\t\tif(!column.visible && this.mode === \"collapse\"){\r\n\t\t\t\t\t\tthis.hiddenColumns.push(column);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\t//sort list by responsivity\r\n\t\tcolumns = columns.reverse();\r\n\t\tcolumns = columns.sort((a, b) => {\r\n\t\t\tvar diff = b.modules.responsive.order - a.modules.responsive.order;\r\n\t\t\treturn diff || (b.modules.responsive.index - a.modules.responsive.index);\r\n\t\t});\r\n\r\n\t\tthis.columns = columns;\r\n\r\n\t\tif(this.mode === \"collapse\"){\r\n\t\t\tthis.generateCollapsedContent();\r\n\t\t}\r\n\r\n\t\t//assign collapse column\r\n\t\tfor (let col of this.table.columnManager.columnsByIndex){\r\n\t\t\tif(col.definition.formatter == \"responsiveCollapse\"){\r\n\t\t\t\tthis.collapseHandleColumn = col;\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(this.collapseHandleColumn){\r\n\t\t\tif(this.hiddenColumns.length){\r\n\t\t\t\tthis.collapseHandleColumn.show();\r\n\t\t\t}else{\r\n\t\t\t\tthis.collapseHandleColumn.hide();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//define layout information\r\n\tinitializeColumn(column){\r\n\t\tvar def = column.getDefinition();\r\n\r\n\t\tcolumn.modules.responsive = {order: typeof def.responsive === \"undefined\" ? 1 : def.responsive, visible:def.visible === false ? false : true};\r\n\t}\r\n\r\n\tinitializeRow(row){\r\n\t\tvar el;\r\n\r\n\t\tif(row.type !== \"calc\"){\r\n\t\t\tel = document.createElement(\"div\");\r\n\t\t\tel.classList.add(\"tabulator-responsive-collapse\");\r\n\r\n\t\t\trow.modules.responsiveLayout = {\r\n\t\t\t\telement:el,\r\n\t\t\t\topen:this.collapseStartOpen,\r\n\t\t\t};\r\n\r\n\t\t\tif(!this.collapseStartOpen){\r\n\t\t\t\tel.style.display = 'none';\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tlayoutRow(row){\r\n\t\tvar rowEl = row.getElement();\r\n\r\n\t\tif(row.modules.responsiveLayout){\r\n\t\t\trowEl.appendChild(row.modules.responsiveLayout.element);\r\n\t\t\tthis.generateCollapsedRowContent(row);\r\n\t\t}\r\n\t}\r\n\r\n\t//update column visibility\r\n\tupdateColumnVisibility(column, responsiveToggle){\r\n\t\tif(!responsiveToggle && column.modules.responsive){\r\n\t\t\tcolumn.modules.responsive.visible = column.visible;\r\n\t\t\tthis.initializeResponsivity();\r\n\t\t}\r\n\t}\r\n\r\n\thideColumn(column){\r\n\t\tvar colCount = this.hiddenColumns.length;\r\n\r\n\t\tcolumn.hide(false, true);\r\n\r\n\t\tif(this.mode === \"collapse\"){\r\n\t\t\tthis.hiddenColumns.unshift(column);\r\n\t\t\tthis.generateCollapsedContent();\r\n\r\n\t\t\tif(this.collapseHandleColumn && !colCount){\r\n\t\t\t\tthis.collapseHandleColumn.show();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tshowColumn(column){\r\n\t\tvar index;\r\n\r\n\t\tcolumn.show(false, true);\r\n\t\t//set column width to prevent calculation loops on uninitialized columns\r\n\t\tcolumn.setWidth(column.getWidth());\r\n\r\n\t\tif(this.mode === \"collapse\"){\r\n\t\t\tindex = this.hiddenColumns.indexOf(column);\r\n\r\n\t\t\tif(index > -1){\r\n\t\t\t\tthis.hiddenColumns.splice(index, 1);\r\n\t\t\t}\r\n\r\n\t\t\tthis.generateCollapsedContent();\r\n\r\n\t\t\tif(this.collapseHandleColumn && !this.hiddenColumns.length){\r\n\t\t\t\tthis.collapseHandleColumn.hide();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//redraw columns to fit space\r\n\tupdate(){\r\n\t\tvar self = this,\r\n\t\tworking = true;\r\n\r\n\t\twhile(working){\r\n\r\n\t\t\tlet width = self.table.modules.layout.getMode() == \"fitColumns\" ? self.table.columnManager.getFlexBaseWidth() : self.table.columnManager.getWidth();\r\n\r\n\t\t\tlet diff = (self.table.options.headerVisible ? self.table.columnManager.element.clientWidth : self.table.element.clientWidth) - width;\r\n\r\n\t\t\tif(diff < 0){\r\n\t\t\t\t//table is too wide\r\n\t\t\t\tlet column = self.columns[self.index];\r\n\r\n\t\t\t\tif(column){\r\n\t\t\t\t\tself.hideColumn(column);\r\n\t\t\t\t\tself.index ++;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tworking = false;\r\n\t\t\t\t}\r\n\r\n\t\t\t}else{\r\n\r\n\t\t\t\t//table has spare space\r\n\t\t\t\tlet column = self.columns[self.index -1];\r\n\r\n\t\t\t\tif(column){\r\n\t\t\t\t\tif(diff > 0){\r\n\t\t\t\t\t\tif(diff >= column.getWidth()){\r\n\t\t\t\t\t\t\tself.showColumn(column);\r\n\t\t\t\t\t\t\tself.index --;\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\tworking = false;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tworking = false;\r\n\t\t\t\t\t}\r\n\t\t\t\t}else{\r\n\t\t\t\t\tworking = false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif(!self.table.rowManager.activeRowsCount){\r\n\t\t\t\tself.table.rowManager.renderEmptyScroll();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tgenerateCollapsedContent(){\r\n\t\tvar self = this,\r\n\t\trows = this.table.rowManager.getDisplayRows();\r\n\r\n\t\trows.forEach(function(row){\r\n\t\t\tself.generateCollapsedRowContent(row);\r\n\t\t});\r\n\t}\r\n\r\n\tgenerateCollapsedRowContent(row){\r\n\t\tvar el, contents;\r\n\r\n\t\tif(row.modules.responsiveLayout){\r\n\t\t\tel = row.modules.responsiveLayout.element;\r\n\r\n\t\t\twhile(el.firstChild) el.removeChild(el.firstChild);\r\n\r\n\t\t\tcontents = this.collapseFormatter(this.generateCollapsedRowData(row));\r\n\t\t\tif(contents){\r\n\t\t\t\tel.appendChild(contents);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tgenerateCollapsedRowData(row){\r\n\t\tvar self = this,\r\n\t\tdata = row.getData(),\r\n\t\toutput = [],\r\n\t\tmockCellComponent;\r\n\r\n\t\tthis.hiddenColumns.forEach(function(column){\r\n\t\t\tvar value = column.getFieldValue(data);\r\n\r\n\t\t\tif(column.definition.title && column.field){\r\n\t\t\t\tif(column.modules.format && self.table.options.responsiveLayoutCollapseUseFormatters){\r\n\r\n\t\t\t\t\tmockCellComponent = {\r\n\t\t\t\t\t\tvalue:false,\r\n\t\t\t\t\t\tdata:{},\r\n\t\t\t\t\t\tgetValue:function(){\r\n\t\t\t\t\t\t\treturn value;\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tgetData:function(){\r\n\t\t\t\t\t\t\treturn data;\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tgetElement:function(){\r\n\t\t\t\t\t\t\treturn document.createElement(\"div\");\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tgetRow:function(){\r\n\t\t\t\t\t\t\treturn row.getComponent();\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tgetColumn:function(){\r\n\t\t\t\t\t\t\treturn column.getComponent();\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t};\r\n\r\n\t\t\t\t\tfunction onRendered(callback){\r\n\t\t\t\t\t\tcallback();\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\toutput.push({\r\n\t\t\t\t\t\tfield: column.field,\r\n\t\t\t\t\t\ttitle: column.definition.title,\r\n\t\t\t\t\t\tvalue: column.modules.format.formatter.call(self.table.modules.format, mockCellComponent, column.modules.format.params, onRendered)\r\n\t\t\t\t\t});\r\n\t\t\t\t}else{\r\n\t\t\t\t\toutput.push({\r\n\t\t\t\t\t\tfield: column.field,\r\n\t\t\t\t\t\ttitle: column.definition.title,\r\n\t\t\t\t\t\tvalue: value\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tformatCollapsedData(data){\r\n\t\tvar list = document.createElement(\"table\");\r\n\r\n\t\tdata.forEach(function(item){\r\n\t\t\tvar row = document.createElement(\"tr\");\r\n\t\t\tvar titleData = document.createElement(\"td\");\r\n\t\t\tvar valueData = document.createElement(\"td\");\r\n\t\t\tvar node_content;\r\n\r\n\t\t\tvar titleHighlight = document.createElement(\"strong\");\r\n\t\t\ttitleData.appendChild(titleHighlight);\r\n\t\t\tthis.langBind(\"columns|\" + item.field, function(text){\r\n\t\t\t\ttitleHighlight.innerHTML = text || item.title;\r\n\t\t\t});\r\n\r\n\t\t\tif(item.value instanceof Node){\r\n\t\t\t\tnode_content = document.createElement(\"div\");\r\n\t\t\t\tnode_content.appendChild(item.value);\r\n\t\t\t\tvalueData.appendChild(node_content);\r\n\t\t\t}else{\r\n\t\t\t\tvalueData.innerHTML = item.value;\r\n\t\t\t}\r\n\r\n\t\t\trow.appendChild(titleData);\r\n\t\t\trow.appendChild(valueData);\r\n\t\t\tlist.appendChild(row);\r\n\t\t}, this);\r\n\r\n\t\treturn Object.keys(data).length ? list : \"\";\r\n\t}\r\n}\r\n\r\nResponsiveLayout.moduleName = \"responsiveLayout\";\r\n\r\nexport default ResponsiveLayout;","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 wheather row is selectable\r\n\t\t\r\n\t\tthis.registerTableFunction(\"selectRow\", this.selectRows.bind(this));\r\n\t\tthis.registerTableFunction(\"deselectRow\", this.deselectRows.bind(this));\r\n\t\tthis.registerTableFunction(\"toggleSelectRow\", this.toggleRow.bind(this));\r\n\t\tthis.registerTableFunction(\"getSelectedRows\", this.getSelectedRows.bind(this));\r\n\t\tthis.registerTableFunction(\"getSelectedData\", this.getSelectedData.bind(this));\r\n\t\t\r\n\t\t//register component functions\r\n\t\tthis.registerComponentFunction(\"row\", \"select\", this.selectRows.bind(this));\r\n\t\tthis.registerComponentFunction(\"row\", \"deselect\", this.deselectRows.bind(this));\r\n\t\tthis.registerComponentFunction(\"row\", \"toggleSelect\", this.toggleRow.bind(this));\r\n\t\tthis.registerComponentFunction(\"row\", \"isSelected\", this.isRowSelected.bind(this));\r\n\t}\r\n\t\r\n\tinitialize(){\r\n\t\tif(this.table.options.selectable !== false){\r\n\t\t\tthis.subscribe(\"row-init\", this.initializeRow.bind(this));\r\n\t\t\tthis.subscribe(\"row-deleting\", this.rowDeleted.bind(this));\r\n\t\t\tthis.subscribe(\"rows-wipe\", this.clearSelectionData.bind(this));\r\n\t\t\tthis.subscribe(\"rows-retrieve\", this.rowRetrieve.bind(this));\r\n\t\t\t\r\n\t\t\tif(this.table.options.selectable && !this.table.options.selectablePersistence){\r\n\t\t\t\tthis.subscribe(\"data-refreshing\", this.deselectRows.bind(this));\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\trowRetrieve(type, prevValue){\r\n\t\treturn type === \"selected\" ? this.selectedRows : prevValue;\r\n\t}\r\n\t\r\n\trowDeleted(row){\r\n\t\tthis._deselectRow(row, true);\r\n\t}\r\n\t\r\n\tclearSelectionData(silent){\r\n\t\tthis.selecting = false;\r\n\t\tthis.lastClickedRow = false;\r\n\t\tthis.selectPrev = [];\r\n\t\tthis.selectedRows = [];\r\n\t\t\r\n\t\tif(silent !== true){\r\n\t\t\tthis._rowSelectionChanged();\r\n\t\t}\r\n\t}\r\n\t\r\n\tinitializeRow(row){\r\n\t\tvar self = this,\r\n\t\telement = row.getElement();\r\n\t\t\r\n\t\t// trigger end of row selection\r\n\t\tvar endSelect = function(){\r\n\t\t\t\r\n\t\t\tsetTimeout(function(){\r\n\t\t\t\tself.selecting = false;\r\n\t\t\t}, 50);\r\n\t\t\t\r\n\t\t\tdocument.body.removeEventListener(\"mouseup\", endSelect);\r\n\t\t};\r\n\t\t\r\n\t\trow.modules.select = {selected:false};\r\n\t\t\r\n\t\t//set row selection class\r\n\t\tif(self.table.options.selectableCheck.call(this.table, row.getComponent())){\r\n\t\t\telement.classList.add(\"tabulator-selectable\");\r\n\t\t\telement.classList.remove(\"tabulator-unselectable\");\r\n\t\t\t\r\n\t\t\tif(self.table.options.selectable && self.table.options.selectable != \"highlight\"){\r\n\t\t\t\tif(self.table.options.selectableRangeMode === \"click\"){\r\n\t\t\t\t\telement.addEventListener(\"click\", this.handleComplexRowClick.bind(this, row));\r\n\t\t\t\t}else{\r\n\t\t\t\t\telement.addEventListener(\"click\", function(e){\r\n\t\t\t\t\t\tif(!self.table.modExists(\"edit\") || !self.table.modules.edit.getCurrentCell()){\r\n\t\t\t\t\t\t\tself.table._clearSelection();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\tif(!self.selecting){\r\n\t\t\t\t\t\t\tself.toggleRow(row);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t\t\r\n\t\t\t\t\telement.addEventListener(\"mousedown\", function(e){\r\n\t\t\t\t\t\tif(e.shiftKey){\r\n\t\t\t\t\t\t\tself.table._clearSelection();\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tself.selecting = true;\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tself.selectPrev = [];\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tdocument.body.addEventListener(\"mouseup\", endSelect);\r\n\t\t\t\t\t\t\tdocument.body.addEventListener(\"keyup\", endSelect);\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tself.toggleRow(row);\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t\t\r\n\t\t\t\t\telement.addEventListener(\"mouseenter\", function(e){\r\n\t\t\t\t\t\tif(self.selecting){\r\n\t\t\t\t\t\t\tself.table._clearSelection();\r\n\t\t\t\t\t\t\tself.toggleRow(row);\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tif(self.selectPrev[1] == row){\r\n\t\t\t\t\t\t\t\tself.toggleRow(self.selectPrev[0]);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t\t\r\n\t\t\t\t\telement.addEventListener(\"mouseout\", function(e){\r\n\t\t\t\t\t\tif(self.selecting){\r\n\t\t\t\t\t\t\tself.table._clearSelection();\r\n\t\t\t\t\t\t\tself.selectPrev.unshift(row);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t\r\n\t\t}else{\r\n\t\t\telement.classList.add(\"tabulator-unselectable\");\r\n\t\t\telement.classList.remove(\"tabulator-selectable\");\r\n\t\t}\r\n\t}\r\n\t\r\n\thandleComplexRowClick(row, e){\r\n\t\tif(e.shiftKey){\r\n\t\t\tthis.table._clearSelection();\r\n\t\t\tthis.lastClickedRow = this.lastClickedRow || row;\r\n\t\t\t\r\n\t\t\tvar lastClickedRowIdx = this.table.rowManager.getDisplayRowIndex(this.lastClickedRow);\r\n\t\t\tvar rowIdx = this.table.rowManager.getDisplayRowIndex(row);\r\n\t\t\t\r\n\t\t\tvar fromRowIdx = lastClickedRowIdx <= rowIdx ? lastClickedRowIdx : rowIdx;\r\n\t\t\tvar toRowIdx = lastClickedRowIdx >= rowIdx ? lastClickedRowIdx : rowIdx;\r\n\t\t\t\r\n\t\t\tvar rows = this.table.rowManager.getDisplayRows().slice(0);\r\n\t\t\tvar toggledRows = rows.splice(fromRowIdx, toRowIdx - fromRowIdx + 1);\r\n\t\t\t\r\n\t\t\tif(e.ctrlKey || e.metaKey){\r\n\t\t\t\ttoggledRows.forEach((toggledRow)=>{\r\n\t\t\t\t\tif(toggledRow !== this.lastClickedRow){\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\tif(this.table.options.selectable !== true && !this.isRowSelected(row)){\r\n\t\t\t\t\t\t\tif(this.selectedRows.length < this.table.options.selectable){\r\n\t\t\t\t\t\t\t\tthis.toggleRow(toggledRow);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\tthis.toggleRow(toggledRow);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t\tthis.lastClickedRow = row;\r\n\t\t\t}else{\r\n\t\t\t\tthis.deselectRows(undefined, true);\r\n\t\t\t\t\r\n\t\t\t\tif(this.table.options.selectable !== true){\r\n\t\t\t\t\tif(toggledRows.length > this.table.options.selectable){\r\n\t\t\t\t\t\ttoggledRows = toggledRows.slice(0, this.table.options.selectable)\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\tthis.selectRows(toggledRows);\r\n\t\t\t}\r\n\t\t\tthis.table._clearSelection();\r\n\t\t}\r\n\t\telse if(e.ctrlKey || e.metaKey){\r\n\t\t\tthis.toggleRow(row);\r\n\t\t\tthis.lastClickedRow = row;\r\n\t\t}else{\r\n\t\t\tthis.deselectRows(undefined, true);\r\n\t\t\tthis.selectRows(row);\r\n\t\t\tthis.lastClickedRow = row;\r\n\t\t}\r\n\t}\r\n\t\r\n\t//toggle row selection\r\n\ttoggleRow(row){\r\n\t\tif(this.table.options.selectableCheck.call(this.table, row.getComponent())){\r\n\t\t\tif(row.modules.select && row.modules.select.selected){\r\n\t\t\t\tthis._deselectRow(row);\r\n\t\t\t}else{\r\n\t\t\t\tthis._selectRow(row);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\t//select a number of rows\r\n\tselectRows(rows){\r\n\t\tvar rowMatch;\r\n\t\t\r\n\t\tswitch(typeof rows){\r\n\t\t\tcase \"undefined\":\r\n\t\t\tthis.table.rowManager.rows.forEach((row) => {\r\n\t\t\t\tthis._selectRow(row, true, true);\r\n\t\t\t});\r\n\t\t\t\r\n\t\t\tthis._rowSelectionChanged();\r\n\t\t\tbreak;\r\n\t\t\t\r\n\t\t\tcase \"string\":\r\n\t\t\t\r\n\t\t\trowMatch = this.table.rowManager.findRow(rows);\r\n\t\t\t\r\n\t\t\tif(rowMatch){\r\n\t\t\t\tthis._selectRow(rowMatch, true, true);\r\n\t\t\t}else{\r\n\t\t\t\tthis.table.rowManager.getRows(rows).forEach((row) => {\r\n\t\t\t\t\tthis._selectRow(row, true, true);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tthis._rowSelectionChanged();\r\n\t\t\tbreak;\r\n\t\t\t\r\n\t\t\tdefault:\r\n\t\t\tif(Array.isArray(rows)){\r\n\t\t\t\trows.forEach((row) => {\r\n\t\t\t\t\tthis._selectRow(row, true, true);\r\n\t\t\t\t});\r\n\t\t\t\t\r\n\t\t\t\tthis._rowSelectionChanged();\r\n\t\t\t}else{\r\n\t\t\t\tthis._selectRow(rows, false, true);\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\t\r\n\t//select an individual row\r\n\t_selectRow(rowInfo, silent, force){\r\n\t\tvar index;\r\n\t\t\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\ta = format === \"iso\" ? DT.fromISO(String(a)) : DT.fromFormat(String(a), format);\r\n\t\tb = format === \"iso\" ? DT.fromISO(String(b)) : DT.fromFormat(String(b), format);\r\n\r\n\t\tif(!a.isValid){\r\n\t\t\temptyAlign = !b.isValid ? 0 : -1;\r\n\t\t}else if(!b.isValid){\r\n\t\t\temptyAlign = 1;\r\n\t\t}else{\r\n\t\t\t//compare valid values\r\n\t\t\treturn a - b;\r\n\t\t}\r\n\r\n\t\t//fix empty values in position\r\n\t\tif((alignEmptyValues === \"top\" && dir === \"desc\") || (alignEmptyValues === \"bottom\" && dir === \"asc\")){\r\n\t\t\temptyAlign *= -1;\r\n\t\t}\r\n\r\n\t\treturn emptyAlign;\r\n\r\n\t}else{\r\n\t\tconsole.error(\"Sort Error - 'datetime' sorter is dependant on 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\tif(params.locale){\r\n\t\t\t\tlocale = this.langLocale();\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\t\t\tcase \"string\":\r\n\t\t\tlocale = params.locale;\r\n\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\treturn String(a).toLowerCase().localeCompare(String(b).toLowerCase(), locale);\r\n\t}\r\n\r\n\t//fix empty values in position\r\n\tif((alignEmptyValues === \"top\" && dir === \"desc\") || (alignEmptyValues === \"bottom\" && dir === \"asc\")){\r\n\t\temptyAlign *= -1;\r\n\t}\r\n\r\n\treturn emptyAlign;\r\n};","import datetime from './datetime.js';\r\n\r\n//sort date\r\nexport default function(a, b, aRow, bRow, column, dir, params){\r\n\tif(!params.format){\r\n\t\tparams.format = \"dd/MM/yyyy\";\r\n\t}\r\n\r\n\treturn datetime.call(this, a, b, aRow, bRow, column, dir, params);\r\n};","import datetime from './datetime.js';\r\n\r\n//sort times\r\nexport default function(a, b, aRow, bRow, column, dir, params){\r\n\tif(!params.format){\r\n\t\tparams.format = \"HH:mm\";\r\n\t}\r\n\r\n\treturn datetime.call(this, a, b, aRow, bRow, column, dir, params);\r\n};","//sort booleans\r\nexport default function(a, b, aRow, bRow, column, dir, params){\r\n\tvar el1 = a === true || a === \"true\" || a === \"True\" || a === 1 ? 1 : 0;\r\n\tvar el2 = b === true || b === \"true\" || b === \"True\" || b === 1 ? 1 : 0;\r\n\r\n\treturn el1 - el2;\r\n};","//sort if element contains any data\r\nexport default function(a, b, aRow, bRow, column, dir, params){\r\n\tvar el1 = 0;\r\n\tvar el2 = 0;\r\n\tvar type = params.type || \"length\";\r\n\tvar alignEmptyValues = params.alignEmptyValues;\r\n\tvar emptyAlign = 0;\r\n\r\n\tfunction calc(value){\r\n\r\n\t\tswitch(type){\r\n\t\t\tcase \"length\":\r\n\t\t\treturn value.length;\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"sum\":\r\n\t\t\treturn value.reduce(function(c, d){\r\n\t\t\t\treturn c + d;\r\n\t\t\t});\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"max\":\r\n\t\t\treturn Math.max.apply(null, value) ;\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"min\":\r\n\t\t\treturn Math.min.apply(null, value) ;\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"avg\":\r\n\t\t\treturn value.reduce(function(c, d){\r\n\t\t\t\treturn c + d;\r\n\t\t\t}) / value.length;\r\n\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\t//handle non array values\r\n\tif(!Array.isArray(a)){\r\n\t\talignEmptyValues = !Array.isArray(b) ? 0 : -1;\r\n\t}else if(!Array.isArray(b)){\r\n\t\talignEmptyValues = 1;\r\n\t}else{\r\n\r\n\t\t//compare valid values\r\n\t\tel1 = a ? calc(a) : 0;\r\n\t\tel2 = b ? calc(b) : 0;\r\n\r\n\t\treturn el1 - el2;\r\n\t}\r\n\r\n\t//fix empty values in position\r\n\tif((alignEmptyValues === \"top\" && dir === \"desc\") || (alignEmptyValues === \"bottom\" && dir === \"asc\")){\r\n\t\temptyAlign *= -1;\r\n\t}\r\n\r\n\treturn emptyAlign;\r\n};","//sort if element contains any data\r\nexport default function(a, b, aRow, bRow, column, dir, params){\r\n\tvar el1 = typeof a == \"undefined\" ? 0 : 1;\r\n\tvar el2 = typeof b == \"undefined\" ? 0 : 1;\r\n\r\n\treturn el1 - el2;\r\n};","//sort alpha numeric strings\r\nexport default function(as, bs, aRow, bRow, column, dir, params){\r\n\tvar a, b, a1, b1, i= 0, L, rx = /(\\d+)|(\\D+)/g, rd = /\\d/;\r\n\tvar alignEmptyValues = params.alignEmptyValues;\r\n\tvar emptyAlign = 0;\r\n\r\n\t//handle empty values\r\n\tif(!as && as!== 0){\r\n\t\temptyAlign = !bs && bs!== 0 ? 0 : -1;\r\n\t}else if(!bs && bs!== 0){\r\n\t\temptyAlign = 1;\r\n\t}else{\r\n\r\n\t\tif(isFinite(as) && isFinite(bs)) return as - bs;\r\n\t\ta = String(as).toLowerCase();\r\n\t\tb = String(bs).toLowerCase();\r\n\t\tif(a === b) return 0;\r\n\t\tif(!(rd.test(a) && rd.test(b))) return a > b ? 1 : -1;\r\n\t\ta = a.match(rx);\r\n\t\tb = b.match(rx);\r\n\t\tL = a.length > b.length ? b.length : a.length;\r\n\t\twhile(i < L){\r\n\t\t\ta1= a[i];\r\n\t\t\tb1= b[i++];\r\n\t\t\tif(a1 !== b1){\r\n\t\t\t\tif(isFinite(a1) && isFinite(b1)){\r\n\t\t\t\t\tif(a1.charAt(0) === \"0\") a1 = \".\" + a1;\r\n\t\t\t\t\tif(b1.charAt(0) === \"0\") b1 = \".\" + b1;\r\n\t\t\t\t\treturn a1 - b1;\r\n\t\t\t\t}\r\n\t\t\t\telse return a1 > b1 ? 1 : -1;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn a.length > b.length;\r\n\t}\r\n\r\n\t//fix empty values in position\r\n\tif((alignEmptyValues === \"top\" && dir === \"desc\") || (alignEmptyValues === \"bottom\" && dir === \"asc\")){\r\n\t\temptyAlign *= -1;\r\n\t}\r\n\r\n\treturn emptyAlign;\r\n};","import Module from '../../core/Module.js';\r\n\r\nimport defaultSorters from './defaults/sorters.js';\r\n\r\nclass Sort extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t \tthis.sortList = []; //holder current sort\r\n\t \tthis.changed = false; //has the sort changed since last render\r\n\r\n\t \tthis.registerTableOption(\"sortMode\", \"local\"); //local or remote sorting\r\n\r\n\t \tthis.registerTableOption(\"initialSort\", false); //initial sorting criteria\r\n\t \tthis.registerTableOption(\"columnHeaderSortMulti\", true); //multiple or single column sorting\r\n\t \tthis.registerTableOption(\"sortOrderReverse\", false); //reverse internal sort ordering\r\n\t \tthis.registerTableOption(\"headerSortElement\", \"
\"); //header sort element\r\n\r\n\t \tthis.registerColumnOption(\"sorter\");\r\n\t \tthis.registerColumnOption(\"sorterParams\");\r\n\r\n\t \tthis.registerColumnOption(\"headerSort\", true);\r\n\t \tthis.registerColumnOption(\"headerSortStartingDir\");\r\n\t \tthis.registerColumnOption(\"headerSortTristate\");\r\n\r\n\t }\r\n\r\n\t initialize(){\r\n\t \tthis.subscribe(\"column-layout\", this.initializeColumn.bind(this));\r\n\t \tthis.subscribe(\"table-built\", this.tableBuilt.bind(this));\r\n\t \tthis.registerDataHandler(this.sort.bind(this), 20);\r\n\r\n\t \tthis.registerTableFunction(\"setSort\", this.userSetSort.bind(this));\r\n\t \tthis.registerTableFunction(\"getSorters\", this.getSort.bind(this));\r\n\t \tthis.registerTableFunction(\"clearSort\", this.clearSort.bind(this));\r\n\r\n\t \tif(this.table.options.sortMode === \"remote\"){\r\n\t \t\tthis.subscribe(\"data-params\", this.remoteSortParams.bind(this));\r\n\t \t}\r\n\t }\r\n\r\n\t tableBuilt(){\r\n\t \tif(this.table.options.initialSort){\r\n\t \t\tthis.setSort(this.table.options.initialSort);\r\n\t \t}\r\n\t }\r\n\r\n\t remoteSortParams(data, config, silent, params){\r\n\t \tvar sorters = this.getSort();\r\n\r\n\t \tsorters.forEach((item) => {\r\n\t \t\tdelete item.column;\r\n\t \t});\r\n\r\n\t \tparams.sort = sorters;\r\n\r\n\t \treturn params;\r\n\t }\r\n\r\n\r\n\t///////////////////////////////////\r\n\t///////// Table Functions /////////\r\n\t///////////////////////////////////\r\n\r\n\tuserSetSort(sortList, dir){\r\n\t\tthis.setSort(sortList, dir);\r\n\t\t// this.table.rowManager.sorterRefresh();\r\n\t\tthis.refreshSort();\r\n\t}\r\n\r\n\tclearSort(){\r\n\t\tthis.clear();\r\n\t\t// this.table.rowManager.sorterRefresh();\r\n\t\tthis.refreshSort();\r\n\t}\r\n\r\n\r\n\t///////////////////////////////////\r\n\t///////// Internal Logic //////////\r\n\t///////////////////////////////////\r\n\r\n\t//initialize column header for sorting\r\n\tinitializeColumn(column){\r\n\t\tvar sorter = false,\r\n\t\tcolEl,\r\n\t\tarrowEl;\r\n\r\n\t\tswitch(typeof column.definition.sorter){\r\n\t\t\tcase \"string\":\r\n\t\t\tif(Sort.sorters[column.definition.sorter]){\r\n\t\t\t\tsorter = Sort.sorters[column.definition.sorter];\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Sort Error - No such sorter found: \", column.definition.sorter);\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"function\":\r\n\t\t\tsorter = column.definition.sorter;\r\n\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\tcolumn.modules.sort = {\r\n\t\t\tsorter:sorter, dir:\"none\",\r\n\t\t\tparams:column.definition.sorterParams || {},\r\n\t\t\tstartingDir:column.definition.headerSortStartingDir || \"asc\",\r\n\t\t\ttristate: column.definition.headerSortTristate,\r\n\t\t};\r\n\r\n\t\tif(column.definition.headerSort !== false){\r\n\r\n\t\t\tcolEl = column.getElement();\r\n\r\n\t\t\tcolEl.classList.add(\"tabulator-sortable\");\r\n\r\n\r\n\t\t\tarrowEl = document.createElement(\"div\");\r\n\t\t\tarrowEl.classList.add(\"tabulator-col-sorter\");\r\n\r\n\t\t\tif(typeof this.table.options.headerSortElement == \"object\"){\r\n\t\t\t\tarrowEl.appendChild(this.table.options.headerSortElement);\r\n\t\t\t}else{\r\n\t\t\t\tarrowEl.innerHTML = this.table.options.headerSortElement;\r\n\t\t\t}\r\n\r\n\t\t\t//create sorter arrow\r\n\t\t\tcolumn.titleHolderElement.appendChild(arrowEl);\r\n\r\n\t\t\tcolumn.modules.sort.element = arrowEl;\r\n\r\n\t\t\t//sort on click\r\n\t\t\tcolEl.addEventListener(\"click\", (e) => {\r\n\t\t\t\tvar dir = \"\",\r\n\t\t\t\tsorters=[],\r\n\t\t\t\tmatch = false;\r\n\r\n\t\t\t\tif(column.modules.sort){\r\n\t\t\t\t\tif(column.modules.sort.tristate){\r\n\t\t\t\t\t\tif(column.modules.sort.dir == \"none\"){\r\n\t\t\t\t\t\t\tdir = column.modules.sort.startingDir;\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\tif(column.modules.sort.dir == column.modules.sort.startingDir){\r\n\t\t\t\t\t\t\t\tdir = column.modules.sort.dir == \"asc\" ? \"desc\" : \"asc\";\r\n\t\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\t\tdir = \"none\";\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tswitch(column.modules.sort.dir){\r\n\t\t\t\t\t\t\tcase \"asc\":\r\n\t\t\t\t\t\t\tdir = \"desc\";\r\n\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\t\tcase \"desc\":\r\n\t\t\t\t\t\t\tdir = \"asc\";\r\n\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\t\tdefault:\r\n\t\t\t\t\t\t\tdir = column.modules.sort.startingDir;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\r\n\t\t\t\t\tif (this.table.options.columnHeaderSortMulti && (e.shiftKey || e.ctrlKey)) {\r\n\t\t\t\t\t\tsorters = this.getSort();\r\n\r\n\t\t\t\t\t\tmatch = sorters.findIndex((sorter) => {\r\n\t\t\t\t\t\t\treturn sorter.field === column.getField();\r\n\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\tif(match > -1){\r\n\t\t\t\t\t\t\tsorters[match].dir = dir;\r\n\r\n\t\t\t\t\t\t\tif(match != sorters.length -1){\r\n\t\t\t\t\t\t\t\tmatch = sorters.splice(match, 1)[0];\r\n\t\t\t\t\t\t\t\tif(dir != \"none\"){\r\n\t\t\t\t\t\t\t\t\tsorters.push(match);\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\tif(dir != \"none\"){\r\n\t\t\t\t\t\t\t\tsorters.push({column:column, dir:dir});\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t//add to existing sort\r\n\t\t\t\t\t\tthis.setSort(sorters);\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tif(dir == \"none\"){\r\n\t\t\t\t\t\t\tthis.clear();\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\t//sort by column only\r\n\t\t\t\t\t\t\tthis.setSort(column, dir);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// this.table.rowManager.sorterRefresh(!this.sortList.length);\r\n\t\t\t\t\tthis.refreshSort();\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\trefreshSort(){\r\n\t\tif(this.table.options.sortMode === \"remote\"){\r\n\t\t\tthis.reloadData();\r\n\t\t}else{\r\n\t\t\tthis.refreshData(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\tsorter = \"string\";\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase \"boolean\":\r\n\t\t\t\t\tsorter = \"boolean\";\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tdefault:\r\n\t\t\t\t\tif(!isNaN(value) && value !== \"\"){\r\n\t\t\t\t\t\tsorter = \"number\";\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tif(value.match(/((^[0-9]+[a-z]+)|(^[a-z]+[0-9]+))+$/i)){\r\n\t\t\t\t\t\t\tsorter = \"alphanum\";\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn Sort.sorters[sorter];\r\n\t}\r\n\r\n\t//work through sort list sorting data\r\n\tsort(data){\r\n\t\tvar self = this,\r\n\t\tsortList = this.table.options.sortOrderReverse ? self.sortList.slice().reverse() : self.sortList,\r\n\t\tsortListActual = [],\r\n\t\trowComponents = [],\r\n\t\tlastSort;\r\n\r\n\t\tif(this.subscribedExternal(\"dataSorting\")){\r\n\t\t\tthis.dispatchExternal(\"dataSorting\", self.getSort());\r\n\t\t}\r\n\r\n\t\tself.clearColumnHeaders();\r\n\r\n\t\tif(this.table.options.sortMode !== \"remote\"){\r\n\r\n\t\t\t//build list of valid sorters and trigger column specific callbacks before sort begins\r\n\t\t\tsortList.forEach(function(item, i){\r\n\t\t\t\tvar sortObj = item.column.modules.sort;\r\n\r\n\t\t\t\tif(item.column && sortObj){\r\n\r\n\t\t\t\t\t//if no sorter has been defined, take a guess\r\n\t\t\t\t\tif(!sortObj.sorter){\r\n\t\t\t\t\t\tsortObj.sorter = self.findSorter(item.column);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\titem.params = typeof sortObj.params === \"function\" ? sortObj.params(item.column.getComponent(), item.dir) : sortObj.params;\r\n\r\n\t\t\t\t\tsortListActual.push(item);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tself.setColumnHeader(item.column, item.dir);\r\n\t\t\t});\r\n\r\n\t\t\t//sort data\r\n\t\t\tif (sortListActual.length) {\r\n\t\t\t\tself._sortItems(data, sortListActual);\r\n\t\t\t}\r\n\r\n\t\t}else{\r\n\t\t\tsortList.forEach(function(item, i){\r\n\t\t\t\tself.setColumnHeader(item.column, item.dir);\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif(this.subscribedExternal(\"dataSorted\")){\r\n\t\t\tdata.forEach((row) => {\r\n\t\t\t\trowComponents.push(row.getComponent());\r\n\t\t\t});\r\n\r\n\t\t\tthis.dispatchExternal(\"dataSorted\", self.getSort(), rowComponents);\r\n\t\t}\r\n\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(function(column){\r\n\t\t\tif(column.modules.sort){\r\n\t\t\t\tcolumn.modules.sort.dir = \"none\";\r\n\t\t\t\tcolumn.getElement().setAttribute(\"aria-sort\", \"none\");\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t//set the column header sort direction\r\n\tsetColumnHeader(column, dir){\r\n\t\tcolumn.modules.sort.dir = dir;\r\n\t\tcolumn.getElement().setAttribute(\"aria-sort\", dir);\r\n\t}\r\n\r\n\t//sort each item in sort list\r\n\t_sortItems(data, sortList){\r\n\t\tvar sorterCount = sortList.length - 1;\r\n\r\n\t\tdata.sort((a, b) => {\r\n\t\t\tvar result;\r\n\r\n\t\t\tfor(var i = sorterCount; i>= 0; i--){\r\n\t\t\t\tlet sortItem = sortList[i];\r\n\r\n\t\t\t\tresult = this._sortRow(a, b, sortItem.column, sortItem.dir, sortItem.params);\r\n\r\n\t\t\t\tif(result !== 0){\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn result;\r\n\t\t});\r\n\t}\r\n\r\n\t//process individual rows for a sort function on active data\r\n\t_sortRow(a, b, column, dir, params){\r\n\t\tvar el1Comp, el2Comp, colComp;\r\n\r\n\t\t//switch elements depending on search direction\r\n\t\tvar el1 = dir == \"asc\" ? a : b;\r\n\t\tvar el2 = dir == \"asc\" ? b : a;\r\n\r\n\t\ta = column.getFieldValue(el1.getData());\r\n\t\tb = column.getFieldValue(el2.getData());\r\n\r\n\t\ta = typeof a !== \"undefined\" ? a : \"\";\r\n\t\tb = typeof b !== \"undefined\" ? b : \"\";\r\n\r\n\t\tel1Comp = el1.getComponent();\r\n\t\tel2Comp = el2.getComponent();\r\n\r\n\t\treturn column.modules.sort.sorter.call(this, a, b, el1Comp, el2Comp, column.getComponent(), dir, params);\r\n\t}\r\n}\r\n\r\nSort.moduleName = \"sort\";\r\n\r\n//load defaults\r\nSort.sorters = defaultSorters;\r\n\r\nexport default Sort;","export default {\r\n\t//is integer\r\n\tinteger: function(cell, value, parameters){\r\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\tvalue = Number(value);\r\n\t\treturn typeof value === 'number' && isFinite(value) && Math.floor(value) === value;\r\n\t},\r\n\r\n\t//is float\r\n\tfloat: function(cell, value, parameters){\r\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\tvalue = Number(value);\r\n\t\treturn typeof value === 'number' && isFinite(value) && value % 1 !== 0;\r\n\t},\r\n\r\n\t//must be a number\r\n\tnumeric: function(cell, value, parameters){\r\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn !isNaN(value);\r\n\t},\r\n\r\n\t//must be a string\r\n\tstring: function(cell, value, parameters){\r\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn isNaN(value);\r\n\t},\r\n\r\n\t//maximum value\r\n\tmax: function(cell, value, parameters){\r\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn parseFloat(value) <= parameters;\r\n\t},\r\n\r\n\t//minimum value\r\n\tmin: function(cell, value, parameters){\r\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn parseFloat(value) >= parameters;\r\n\t},\r\n\r\n\t//starts with value\r\n\tstarts: function(cell, value, parameters){\r\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn String(value).toLowerCase().startsWith(String(parameters).toLowerCase());\r\n\t},\r\n\r\n\t//ends with value\r\n\tends: function(cell, value, parameters){\r\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn String(value).toLowerCase().endsWith(String(parameters).toLowerCase());\r\n\t},\r\n\r\n\r\n\t//minimum string length\r\n\tminLength: function(cell, value, parameters){\r\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn String(value).length >= parameters;\r\n\t},\r\n\r\n\t//maximum string length\r\n\tmaxLength: function(cell, value, parameters){\r\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn String(value).length <= parameters;\r\n\t},\r\n\r\n\t//in provided value list\r\n\tin: function(cell, value, parameters){\r\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\tif(typeof parameters == \"string\"){\r\n\t\t\tparameters = parameters.split(\"|\");\r\n\t\t}\r\n\r\n\t\treturn value === \"\" || parameters.indexOf(value) > -1;\r\n\t},\r\n\r\n\t//must match provided regex\r\n\tregex: function(cell, value, parameters){\r\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\tvar reg = new RegExp(parameters);\r\n\r\n\t\treturn reg.test(value);\r\n\t},\r\n\r\n\t//value must be unique in this column\r\n\tunique: function(cell, value, parameters){\r\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\tvar unique = true;\r\n\r\n\t\tvar cellData = cell.getData();\r\n\t\tvar column = cell.getColumn()._getSelf();\r\n\r\n\t\tthis.table.rowManager.rows.forEach(function(row){\r\n\t\t\tvar data = row.getData();\r\n\r\n\t\t\tif(data !== cellData){\r\n\t\t\t\tif(value == column.getFieldValue(data)){\r\n\t\t\t\t\tunique = false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn unique;\r\n\t},\r\n\r\n\t//must have a value\r\n\trequired:function(cell, value, parameters){\r\n\t\treturn value !== \"\" && value !== null && typeof value !== \"undefined\";\r\n\t},\r\n};","import Module from '../../core/Module.js';\r\n\r\nimport defaultValidators from './defaults/validators.js';\r\n\r\nclass Validate extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.invalidCells = [];\r\n\r\n\t\tthis.registerTableOption(\"validationMode\", \"blocking\");\r\n\r\n\t\tthis.registerColumnOption(\"validator\");\r\n\r\n\t\tthis.registerTableFunction(\"getInvalidCells\", this.getInvalidCells.bind(this));\r\n\t\tthis.registerTableFunction(\"clearCellValidation\", this.userClearCellValidation.bind(this));\r\n\t\tthis.registerTableFunction(\"validate\", this.userValidate.bind(this));\r\n\r\n\t\tthis.registerComponentFunction(\"cell\", \"isValid\", this.cellIsValid.bind(this));\r\n\t\tthis.registerComponentFunction(\"cell\", \"clearValidation\", this.clearValidation.bind(this));\r\n\t\tthis.registerComponentFunction(\"cell\", \"validate\", this.cellValidate.bind(this));\r\n\r\n\t\tthis.registerComponentFunction(\"column\", \"validate\", this.columnValidate.bind(this));\r\n\t\tthis.registerComponentFunction(\"row\", \"validate\", this.rowValidate.bind(this));\r\n\t}\r\n\r\n\r\n\tinitialize(){\r\n\t\tthis.subscribe(\"cell-delete\", this.clearValidation.bind(this));\r\n\t\tthis.subscribe(\"column-layout\", this.initializeColumnCheck.bind(this));\r\n\t}\r\n\r\n\t///////////////////////////////////\r\n\t////////// Cell Functions /////////\r\n\t///////////////////////////////////\r\n\r\n\tcellIsValid(cell){\r\n\t\treturn cell.modules.validate ? !cell.modules.validate.invalid : true;\r\n\t}\r\n\r\n\tcellValidate(cell){\r\n\t\treturn this.validate(cell.column.modules.validate, cell, cell.getValue());\r\n\t}\r\n\r\n\t///////////////////////////////////\r\n\t///////// Column Functions ////////\r\n\t///////////////////////////////////\r\n\r\n\tcolumnValidate(column){\r\n\t\tvar invalid = [];\r\n\r\n\t\tcolumn.cells.forEach((cell) => {\r\n\t\t\tif(!this.cellValidate(cell)){\r\n\t\t\t\tinvalid.push(cell.getComponent());\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn invalid.length ? invalid : true;\r\n\t}\r\n\r\n\t///////////////////////////////////\r\n\t////////// Row Functions //////////\r\n\t///////////////////////////////////\r\n\r\n\trowValidate(row){\r\n\t\tvar invalid = [];\r\n\r\n\t\trow.cells.forEach((cell) => {\r\n\t\t\tif(!this.cellValidate(cell)){\r\n\t\t\t\tinvalid.push(cell.getComponent());\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn invalid.length ? invalid : true;\r\n\t}\r\n\r\n\t///////////////////////////////////\r\n\t///////// Table Functions /////////\r\n\t///////////////////////////////////\r\n\r\n\r\n\tuserClearCellValidation(cells){\r\n\t\tif(!cells){\r\n\t\t\tcells = this.getInvalidCells();\r\n\t\t}\r\n\r\n\t\tif(!Array.isArray(cells)){\r\n\t\t\tcells = [cells];\r\n\t\t}\r\n\r\n\t\tcells.forEach((cell) => {\r\n\t\t\tthis.clearValidation(cell._getSelf());\r\n\t\t});\r\n\t}\r\n\r\n\tuserValidate(cells){\r\n\t\tvar output = [];\r\n\r\n\t\t//clear row data\r\n\t\tthis.table.rowManager.rows.forEach((row) => {\r\n\t\t\trow = row.getComponent();\r\n\r\n\t\t\tvar valid = row.validate();\r\n\r\n\t\t\tif(valid !== true){\r\n\t\t\t\toutput = output.concat(valid);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn output.length ? output : true;\r\n\t}\r\n\r\n\t///////////////////////////////////\r\n\t///////// Internal Logic //////////\r\n\t///////////////////////////////////\r\n\r\n\tinitializeColumnCheck(column){\r\n\t\tif(typeof column.definition.validator !== \"undefined\"){\r\n\t\t\tthis.initializeColumn(column);\r\n\t\t}\r\n\t}\r\n\r\n\t//validate\r\n\tinitializeColumn(column){\r\n\t\tvar self = this,\r\n\t\tconfig = [],\r\n\t\tvalidator;\r\n\r\n\t\tif(column.definition.validator){\r\n\r\n\t\t\tif(Array.isArray(column.definition.validator)){\r\n\t\t\t\tcolumn.definition.validator.forEach((item) => {\r\n\t\t\t\t\tvalidator = self._extractValidator(item);\r\n\r\n\t\t\t\t\tif(validator){\r\n\t\t\t\t\t\tconfig.push(validator);\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t}else{\r\n\t\t\t\tvalidator = this._extractValidator(column.definition.validator);\r\n\r\n\t\t\t\tif(validator){\r\n\t\t\t\t\tconfig.push(validator);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tcolumn.modules.validate = config.length ? config : false;\r\n\t\t}\r\n\t}\r\n\r\n\t_extractValidator(value){\r\n\t\tvar type, params, pos;\r\n\r\n\t\tswitch(typeof value){\r\n\t\t\tcase \"string\":\r\n\t\t\tpos = value.indexOf(':');\r\n\r\n\t\t\tif(pos > -1){\r\n\t\t\t\ttype = value.substring(0,pos);\r\n\t\t\t\tparams = value.substring(pos+1);\r\n\t\t\t}else{\r\n\t\t\t\ttype = value;\r\n\t\t\t}\r\n\r\n\t\t\treturn this._buildValidator(type, params);\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"function\":\r\n\t\t\treturn this._buildValidator(value);\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"object\":\r\n\t\t\treturn this._buildValidator(value.type, value.parameters);\r\n\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\t_buildValidator(type, params){\r\n\r\n\t\tvar func = typeof type == \"function\" ? type : Validate.validators[type];\r\n\r\n\t\tif(!func){\r\n\t\t\tconsole.warn(\"Validator Setup Error - No matching validator found:\", type);\r\n\t\t\treturn false;\r\n\t\t}else{\r\n\t\t\treturn {\r\n\t\t\t\ttype:typeof type == \"function\" ? \"function\" : type,\r\n\t\t\t\tfunc:func,\r\n\t\t\t\tparams:params,\r\n\t\t\t};\r\n\t\t}\r\n\t}\r\n\r\n\tvalidate(validators, cell, value){\r\n\t\tvar self = this,\r\n\t\tvalid = [],\r\n\t\tinvalidIndex = this.invalidCells.indexOf(cell);\r\n\r\n\t\tif(validators){\r\n\t\t\tvalidators.forEach((item) => {\r\n\t\t\t\tif(!item.func.call(self, cell.getComponent(), value, item.params)){\r\n\t\t\t\t\tvalid.push({\r\n\t\t\t\t\t\ttype:item.type,\r\n\t\t\t\t\t\tparameters:item.params\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tvalid = valid.length ? valid : true;\r\n\r\n\t\tif(!cell.modules.validate){\r\n\t\t\tcell.modules.validate = {};\r\n\t\t}\r\n\r\n\t\tif(valid === true){\r\n\t\t\tcell.modules.validate.invalid = false;\r\n\t\t\tcell.getElement().classList.remove(\"tabulator-validation-fail\");\r\n\r\n\t\t\tif(invalidIndex > -1){\r\n\t\t\t\tthis.invalidCells.splice(invalidIndex, 1);\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tcell.modules.validate.invalid = true;\r\n\r\n\t\t\tif(this.table.options.validationMode !== \"manual\"){\r\n\t\t\t\tcell.getElement().classList.add(\"tabulator-validation-fail\");\r\n\t\t\t}\r\n\r\n\t\t\tif(invalidIndex == -1){\r\n\t\t\t\tthis.invalidCells.push(cell);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn valid;\r\n\t}\r\n\r\n\tgetInvalidCells(){\r\n\t\tvar output = [];\r\n\r\n\t\tthis.invalidCells.forEach((cell) => {\r\n\t\t\toutput.push(cell.getComponent());\r\n\t\t});\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tclearValidation(cell){\r\n\t\tvar invalidIndex;\r\n\r\n\t\tif(cell.modules.validate && cell.modules.validate.invalid){\r\n\r\n\t\t\tcell.getElement().classList.remove(\"tabulator-validation-fail\");\r\n\t\t\tcell.modules.validate.invalid = false;\r\n\r\n\t\t\tinvalidIndex = this.invalidCells.indexOf(cell);\r\n\r\n\t\t\tif(invalidIndex > -1){\r\n\t\t\t\tthis.invalidCells.splice(invalidIndex, 1);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n\r\nValidate.moduleName = \"validate\";\r\n\r\n//load defaults\r\nValidate.validators = defaultValidators;\r\n\r\nexport default Validate;","//tabulator with all modules installed\r\nimport {default as Tabulator} from './Tabulator.js';\r\nimport * as modules from '../core/modules/optional.js';\r\nimport ModuleBinder from './tools/ModuleBinder.js';\r\n\r\nclass TabulatorFull extends Tabulator {};\r\n\r\n//bind modules and static functionality\r\nnew ModuleBinder(TabulatorFull, modules);\r\n\r\nexport default TabulatorFull;"],"names":["CoreFeature","table","data","silent","this","dataLoader","load","undefined","modules","localize","getText","arguments","bind","getLocale","comms","getConnections","send","layout","getMode","eventBus","subscribe","unsubscribe","key","subscribed","subscriptionChange","dispatch","chain","confirm","externalEvents","options","value","module","ColumnComponent","column","_column","type","Proxy","get","target","name","receiver","componentFunctionBinder","handle","getElement","getDefinition","getField","getTitleDownload","cells","forEach","cell","push","getComponent","visible","isGroup","columns","show","hide","output","length","parent","Column","columnManager","scrollToColumn","to","after","toColumn","findColumn","moveColumn","console","warn","nextCol","nextColumn","prevCol","prevColumn","updates","updateDefinition","getWidth","width","result","reinitializeWidth","setWidth","renderer","rerenderColumns","CellComponent","_cell","getValue","getOldValue","initialValue","row","getData","mutate","setValue","setValueActual","checkHeight","Cell","element","oldValue","height","minWidth","component","loaded","build","generateElement","_configureCell","getFieldValue","document","createElement","className","setAttribute","field","style","textAlign","hozAlign","vertAlign","display","alignItems","top","bottom","middle","justifyContent","left","right","center","definition","cssClass","split","classList","add","tooltipGenerationMode","addEventListener","e","_this2","_generateTooltip","val","_this3","innerHTML","Node","firstChild","removeChild","appendChild","tooltip","containerOnly","layoutElement","setValueProcessData","cellRendered","cellEdited","call","dispatchExternal","subscribedExternal","rowManager","changed","setFieldValue","_generateContents","widthStyled","offsetWidth","minWidthStyled","maxWidth","maxWidthStyled","reinitializeHeight","heightStyled","offsetHeight","redrawBlock","parentNode","deleteCell","calcs","getCellIndex","def","_this","contentElement","titleHolderElement","titleElement","groupElement","createGroupElement","fieldStructure","titleDownload","titleFormatterRendered","mapDefinitions","setField","maxInitialWidth","widthFixed","i","newCol","attachColumn","checkColumnVisibility","registerColumnField","_initialize","bindModuleColumns","el","defaults","columnDefaults","optionsList","generate","defaultOptionList","Object","keys","indexOf","title","nestedFieldSeparator","_getNestedData","_getFlatData","_setNestedData","_setFlatData","registerColumnPosition","reRegisterPosition","headerTooltip","langBind","headerVertical","_bindEvents","_buildColumnHeaderContent","_buildGroupHeader","_buildColumnHeader","setTooltip","_this4","dblTap","tapHold","tap","headerClick","_this5","headerDblClick","headerContext","headerTap","passive","headerDblTap","clearTimeout","setTimeout","headerTapHold","_this6","setMinWidth","parseInt","setMaxWidth","headerHozAlign","_buildColumnHeaderTitle","editableTitle","stopPropagation","focus","_this7","text","_formatColumnHeaderTitle","contents","_this8","dataObj","structure","alignment","parentHeight","getGroupElement","clientHeight","getHeadersElement","minHeight","paddingTop","verticalAlign","clearVerticalAlign","formatter","rowNumColumn","getFirstColumn","getLastColumn","getTopColumn","updateBranches","colDefs","responsiveToggle","verticalAlignHeaders","matchChildWidths","childWidth","child","index","splice","setWidthActual","isNaN","Math","floor","clientWidth","max","min","rows","heightInitialized","offsetParent","clearCellHeight","calcHeight","setCellHeight","ceil","getBoundingClientRect","Promise","resolve","reject","_this9","cellCount","deregisterColumn","findColumnIndex","_nextVisibleColumn","getColumnByIndex","_prevVisibleColumn","force","fitToData","clearWidth","setTo","error","assign","addColumn","then","_this10","defaultOptions","Helpers","box","window","pageYOffset","documentElement","clientTop","pageXOffset","clientLeft","obj","clone","list","objectProto","__proto__","arrayProto","Array","isArray","subject","match","copy","_typeof","findIndex","item","unshift","deepClone","OptionsList","msgType","registeredDefaults","option","userOptions","debugInvalidOptions","hasOwnProperty","Renderer","elementVertical","elementHorizontal","tableElement","verticalFillMode","callback","update","blockRedraw","dir","includingBuffer","getDisplayRows","rowEl","remove","clearRows","clearColumns","renderRows","renderColumns","rerenderRows","position","ifVisible","rowIndex","offset","scrollToRowIfVisible","elVisible","elOffset","scrollToRowPosition","scrollToRowNearestTop","scrollToRow","scrollHeight","scrollTop","offsetTop","BaiscHorizontal","VirtualDomHorizontal","leftCol","rightCol","scrollLeft","vDomScrollPosLeft","vDomScrollPosRight","vDomPadLeft","vDomPadRight","fitDataColAvg","windowBuffer","visibleRows","initialized","isFitData","compatibilityCheck","layoutCheck","vertScrollListen","ok","find","col","frozen","startsWith","clearVisRowCache","dataChange","scroll","buffer","columnsByIndex","old","cols","colPos","clear","calcWindowBuffer","config","leftPos","rightPos","fitDataCheck","vdomHoz","paddingLeft","paddingRight","reinitChanged","reinitializeRows","initializeRow","reinitializeRow","change","colEnd","generateCells","layoutRefresh","getVisibleRows","diff","abs","addColRight","removeColLeft","addColLeft","removeColRight","start","end","changes","getCell","fitDataColActualWidthCheck","prepend","ex","message","newWidth","widthDiff","colPositionAdjust","ColumnManager","blockHozScrollEvent","headersElement","columnsByField","defaultColumnOptions","initializeRenderer","createHeadersElement","createHeaderElement","insertBefore","scrollHorizontal","renderClass","renderers","RendererVirtualDomHorizontal","RendererBasicHorizontal","renderHorizontal","initialize","headerVisible","hozAdjust","scrollWidth","marginLeft","scrollColumns","sorter","definitions","autoColumnsDefinitions","setColumns","_addColumn","_reIndexColumns","redraw","before","nextToColumn","colEl","topColumn","parentIndex","nextEl","nextSibling","columnRendered","getHeight","columnHeaderVertAlign","adjustTableSize","_getSelf","HTMLElement","root","matches","active","structured","from","moveColumnActual","reinitialize","_moveColumnInArray","getComponents","updateRows","toIndex","fromIndex","concat","adjust","scrollToColumnPosition","scrollToColumnIfVisible","offsetLeft","generateCell","totalWidth","fixedWidth","colWidth","layoutMode","resetScroll","footerManager","RowComponent","_row","transform","getCells","getRowPosition","moveToRow","updateData","normalizeHeight","nextRow","prevRow","Row","manualHeight","outerHeight","created","setData","create","deleteCells","renderRowCells","rowFormatter","rerenderRowCells","children","maxHeight","resizableRows","setHeight","clearHeight","updatedData","newRowData","tempData","attrname","JSON","parse","getColumnsByFieldRoot","findCell","nextDisplayRow","prevDisplayRow","toRow","findRow","moveRowActual","refreshActiveData","deleteActual","getRowIndex","detatchModules","deleteRow","group","BaiscVertical","visibility","onlyGroupHeaders","styleRow","rowTop","VirtualDomVertical","vDomRowHeight","vDomTop","vDomBottom","vDomScrollPosTop","vDomScrollPosBottom","vDomTopPad","vDomBottomPad","vDomMaxRenderChain","vDomWindowBuffer","vDomWindowMinTotalRows","vDomWindowMinMarginRows","vDomTopNewRows","vDomBottomNewRows","paddingBottom","_virtualRenderFill","topRow","topOffset","deinitializeHeight","topDiff","bottomDiff","margin","_addTopRow","vDomScrollHeight","_removeBottomRow","_addBottomRow","_removeTopRow","renderVerticalBuffer","topEdge","bottomEdge","topFound","bottomRow","slice","forceMove","holder","topPad","rowsHeight","heightOccupied","topPadHeight","rowsCount","containerHeight","rowHeight","fillableSpace","addedRows","paddingAdjust","_quickNormalizeRowHeight","removableRows","RowManager","createHolderElement","createTableElement","heightFixer","placeholder","placeholderContents","firstRender","renderMode","fixedHeight","activeRowsPipeline","activeRows","activeRowsCount","displayRows","displayRowsCount","redrawBlockRestoreConfig","redrawBlockRenderInPosition","dataPipeline","displayPipeline","initializePlaceholder","leftDir","topDir","_positionPlaceholder","scrollRows","renderInPosition","columnsChanged","pagination","_setDataActual","reRenderInPosition","autoColumns","generateColumnsFromRowData","_wipeElements","wipe","allIndex","activeIndex","setActiveRows","displayRowIterator","displayIndex","regenerateRowNumbers","_showPlaceholder","pos","addRowActual","findAddRowPos","reverse","addRow","_clearPlaceholder","addRowPos","chainResult","moveRowInArray","findRowIndex","rowOnly","getDisplayRowIndex","getRows","handler","priority","sort","a","b","skipStage","stage","cascadeOrder","refreshPipelines","renderTable","layoutColumnsOnNewData","resetDisplayRows","setDisplayRows","viewable","RendererVirtualDomVertical","RendererBasicVertical","renderVertical","_clearTable","renderEmptyScroll","initialHeight","otherHeight","external","resize","tableWidth","browser","event","createEvent","initEvent","dispatchEvent","Event","FooterManager","containerElement","createContainerElement","links","initializeElement","footerElement","querySelector","activate","deactivate","link","footerRedraw","InteractionManager","abortClasses","previousTargets","listeners","componentMap","pseudoTrackers","subscriber","pseudoTracking","buildListenerMap","bindSubscriptionWatchers","listenerMap","listener","components","pseudoMouseEnter","pseudoMouseLeave","leaveList","linkedKeys","filter","includes","values","comp","subscriptionChanged","clearWatchers","added","bindPseudoEvents","updateEventListeners","track","removeEventListener","path","composedPath","targets","findTargets","bindComponents","triggerEvents","targetMatches","previousTarget","closest","ComponentFunctionBinder","bindings","funcName","DataLoader","loaderElement","createLoaderElement","msgElement","createMsgElement","loadingElement","errorElement","requestOrder","loading","template","dataLoaderLoading","trim","firstElementChild","dataLoaderError","params","replace","requestNo","showLoader","mapParams","dataSendParams","response","objectInvert","dataReceiveParams","rowData","hideLoader","showError","dataLoaderErrorTimeout","map","langText","ExternalEventBus","debug","events","subscriptionNotifiers","_debugDispatch","_dispatch","_notifiySubscriptionChange","notifiers","args","shift","callResult","apply","log","InternalEventBus","_debugChain","_chain","_debugConfirm","_confirm","fallback","confirmed","TableRegistry","tables","query","results","querySelectorAll","matchElement","Tabulator","lookupTable","Module","_handler","register","func","registerDataPipelineHandler","registerDisplayPipelineHandler","responsiveLayout","modExists","fitData","reinitializeColumnWidths","fitDataFill","fitDataGeneral","fitDataTable","fitDataStretch","colsWidth","gap","lastCol","responsive","fitColumns","flexColWidth","overflowWidth","flexWidth","flexGrowUnits","flexColumns","fixedShrinkColumns","flexShrinkUnits","gapFill","calcWidth","scaleColumns","freeSpace","shrinkCols","oversizeCols","oversizeSpace","remainingSpace","nextColWidth","remainingFlexGrowUnits","changeUnits","undersizeCols","calcGrow","widthGrow","calcShrink","widthShrink","Layout","mode","registerTableOption","registerColumnOption","modes","moduleName","defaultModes","Localize","locale","lang","langList","langs","headerFilterPlaceholder","setHeaderFilterPlaceholder","installLang","setLocale","registerTableFunction","getLang","headerFilters","_setLangProp","desiredLocale","navigator","language","toLowerCase","prefix","traverseLang","trans","prop","_executeBindings","pathArray","_getLangElement","level","rootPath","binding","Comms","receive","selectors","connections","con","action","connection","tableComms","commsReceived","ModuleBinder","tabulator","bindStaticFuctionality","bindModules","coreModules","moduleBindings","extendModule","property","source","registerModule","mod","registerModuleBinding","findTable","prototype","orderedMods","unOrderedMods","moduleCore","modulesCore","moduleInitOrder","modulesRegular","core","mods","interactionMonitor","browserSlow","browserMobile","rtl","originalElement","initializeCoreSystems","_create","_clearObjectPointers","_mapDeprecatedFunctionality","debugEventsExternal","debugEventsInternal","InteractionMonitor","getSelection","empty","removeAllRanges","selection","_rtlCheck","_buildElement","_initializeTable","_loadInitialData","getComputedStyle","textDirection","direction","reactiveData","newElement","tagName","attributes","replaceChild","_detectBrowser","deregister","ua","userAgent","vendor","opera","test","restoreRedraw","blockActiveLoad","clearData","getDataCount","responses","addRows","newRows","getRowFromPosition","foundRows","fromRow","getDefinitionTree","fromColumn","plugin","required","rowFormatterPrint","rowFormatterClipboard","rowFormatterHtmlOutput","Accessor","allowedTypes","initializeColumn","transformRow","accessor","charAt","toUpperCase","lookupAccessor","accessors","rowComponent","traverse","colCompnent","generateParamsList","serializeParams","encoded","encodeURIComponent","join","headers","body","url","stringify","form","FormData","append","Ajax","urlGenerator","loaderPromise","contentTypeFormatters","ajaxRequestFunc","defaultLoaderPromise","ajaxURLGenerator","defaultURLGenerator","ajaxURL","setUrl","setDefaultConfig","ajaxConfig","getUrl","requestDataCheck","requestParams","requestData","ajaxParams","previousData","generateConfig","sendRequest","defaultConfig","method","ajaxRequesting","ajaxResponse","contentType","ajaxContentType","Accept","location","origin","credentials","fetch","json","status","statusText","defaultContentTypeFormatters","Clipboard","pasteParser","pasteAction","customSelection","rowRange","blocked","clipboard","clipboardCopyRowRange","plain","html","preventDefault","clipboardCopyFormatter","generateExportList","clipboardCopyConfig","clipboardCopyStyled","genereateHTMLTable","generatePlainContent","clipboardData","originalEvent","reset","paste","setPasteParser","clipboardPasteParser","setPasteAction","clipboardPasteAction","getKey","range","internal","sel","textRange","createRange","selectNodeContents","toString","addRange","createTextRange","moveToElementText","select","execCommand","pasteActions","parser","pasteParsers","checkPaseOrigin","getPasteData","mutateData","mutator","valid","edit","currentCell","updateOrAddData","insert","addData","headerFindSuccess","columnMap","CalcComponent","calcParams","precision","reduce","sum","Number","toFixed","parseFloat","String","ColumnCalcs","topCalcs","botCalcs","genColumn","topElement","botElement","botRow","topInitialized","botInitialized","cellValueChanged","initializeColumnCheck","rowsUpdated","recalcActiveRows","recalcActiveRowsRefresh","tableRedraw","getResults","userRecalc","recalc","groupBy","recalcRowGroup","dataTreeStartExpanded","dataTree","recalcAll","topCalc","bottomCalc","columnCalcs","topCalcParams","botCalcParams","bottomCalcParams","calculations","initializeTopRow","botCalc","initializeBottomRow","rowsToData","generateRow","frozenColumns","recalcGroup","groupRows","getRowGroup","getChildGroups","generateRowData","dataTreeChildColumnCalcs","open","getFilteredTreeChildren","disable","enable","format","getFormatter","paramKey","getGroups","getGroupResults","groupObj","subGroups","getSubGroups","subGroupResults","subgroup","groups","defaultCalculations","DataTree","indent","collapseEl","expandEl","branchEl","elementField","startOpen","registerComponentFunction","collapseRow","expandRow","toggleRow","getTreeParent","getRowChildren","addTreeChildRow","isRowExpanded","dummyEl","dataTreeChildField","dataTreeChildIndent","dataTreeBranchElement","dataTreeCollapseElement","tabIndex","dataTreeExpandElement","layoutRow","rowDelete","rowDataChanged","columnMoving","initializeElementField","registerDisplayHandler","firstCol","getFirstVisibleColumn","dataTreeElementColumn","getTreeChildren","redrawNeeded","refreshData","childArray","controlEl","generateControlElement","cloneNode","marginRight","getPropertyValue","oldControl","getChildren","allChildren","generateChildren","dataTreeFilter","dataTreeSort","sub","childData","childRow","childIndex","findChildIndex","recurse","csv","setFileContents","delimiter","fileContents","depth","bom","jsonLines","pdf","header","autoTableParams","rowGroupStyles","fontStyle","fontSize","cellPadding","fillColor","rowCalcStyles","jsPDFParams","jsPDF","parseRow","styles","content","colSpan","rowSpan","orientation","unit","doc","jspdf","autoTable","didDrawPage","head","documentProcessing","xlsx","sheetName","workbook","XLSX","utils","book_new","tableFeatures","generateSheet","merges","worksheet","s","c","r","j","Date","sheet_add_aoa","encode_range","SheetNames","Sheets","sheetOnly","sheets","sheet","commsSend","intercept","buf","ArrayBuffer","view","Uint8Array","charCodeAt","s2ab","write","bookType","bookSST","Download","blob","download","downloadToTab","filename","interceptCallback","downloadFunc","downloaders","mime","triggerDownload","downloadConfig","downloadRowRange","groupHeader","groupHeaderDownload","_group","getRowCount","newTab","Blob","downloadReady","URL","createObjectURL","msSaveOrOpenBlob","click","maskInput","mask","maskLetter","maskLetterChar","maskNumber","maskNumberChar","maskWildcard","maskWildcardChar","fillSymbols","symbol","char","keyCode","maskAutoFill","defaultDownloaders","input","onRendered","success","cancel","editorParams","cellValue","search","padding","boxSizing","elementAttributes","getAttribute","onChange","preventScroll","textarea","vertNav","verticalNavigation","whiteSpace","getRow","heightNow","selectionStart","stopImmediatePropagation","number","step","blurFunc","self","cellEl","initialDisplayValue","defaultValue","listEl","multiselect","dataItems","currentItem","displayItems","currentItems","blurable","blockListShow","searchWord","searchWordTimeout","getUniqueColumnValues","getColumnByField","getColumn","parseItems","inputValues","curentValues","dataList","displayList","processComplexListItem","label","itemParams","setItem","sortValuesList","listItemFormatter","toggleItem","chooseItem","fillList","setCurrentItem","scrollIntoView","behavior","block","inline","fillInput","unsetItem","hideList","chooseItems","cancelItem","cursor","readOnly","len","unsetItems","character","fromCharCode","scrollTovalue","showList","autocomplete","uniqueColumnValues","genUniqueColumnValues","filterList","term","intialLoad","items","searchFunc","addNotice","searchingPlaceholder","fillListIfNotEmpty","err","showListOnEmpty","notice","searchEl","clearList","itemList","current","emptyPlaceholder","freetext","allowEmpty","showInputValue","star","maxStars","getElementsByTagName","size","stars","starsHolder","createElementNS","starChange","buildStar","starHolder","nextStar","blur","changeValue","overflow","textOverflow","progress","mouseDrag","mouseDragWidth","percent","bar","updateValue","calcVal","round","backgroundColor","screenX","tickCross","tristate","indetermValue","indeterminateValue","indetermState","marginTop","checked","indeterminate","Edit","mouseClick","recursionBlock","invalidEdit","editedCells","editors","getEditedCells","clearCellEdited","navigatePrev","navigateNext","navigateLeft","navigateRight","navigateUp","navigateDown","cellisEdited","clearEdited","editCell","cellCancelEdit","bindEditor","columnDeleteCheck","rowDeleteCheck","cancelEdit","keybindingNavigateNext","newRow","edited","nextCell","findNextEditableCell","getIndex","findPrevEditableCell","allowEdit","check","prevCell","editor","editable","validate","cellValidate","clearEditor","variableHeight","cellEditCancelled","contains","button","forceEdit","focusCellNoEvent","getRenderMode","leftEdge","rightEdge","leftMargin","rightMargin","cellEditor","rendered","focusScrollAdjust","cellClick","cellEditing","validationMode","editIndex","invalid","defaultEditors","ExportRow","ExportColumn","Export","cloneTableStyle","colVisProp","getHtml","columnHeaders","headersToExportRows","generateColumnGroupHeaders","bodyToExportRows","rowLookup","genereateTableElement","selectRow","selectedRows","columnGroups","colData","processColumnGroup","maxDepth","groupData","subGroup","subGroupData","columnVisCheck","headerDepth","exportRows","parseColumnGroup","rowGroups","exportCols","headerEl","bodyEl","lookupTableStyles","setup","treeElementField","mapElementStyles","genereateHeaderElement","genereateGroupElement","genereateCalcElement","genereateRowElement","evenRow","oddRow","calcRow","firstRow","firstGroup","getElementsByClassName","styleCells","firstCell","lastCell","classNames","generator","isVisible","cellWrapper","formatCells","formatExportValue","align","renderedCallback","htmlOutputConfig","props","lookup","fromStyle","filterVal","rowVal","filterParams","RegExp","keywords","separator","keyword","matchAll","endsWith","Filter","headerFilterColumns","prevHeaderFilterChangeCheck","tableInitialized","searchRows","searchData","userSetFilter","userRefreshFilter","userAddFilter","getFilters","userSetHeaderFilterFocus","userGetHeaderFilterValue","userSetHeaderFilterValue","getHeaderFilters","userRemoveFilter","userClearFilter","userClearHeaderFilter","setHeaderFilterFocus","reloadHeaderFilter","getHeaderFilterValue","setHeaderFilterValue","initializeColumnHeaderFilter","hideHeaderFilterElements","showHeaderFilterElements","tableBuilt","filterMode","remoteFilterParams","registerDataHandler","initialFilter","setFilter","initialHeaderFilter","refreshFilter","addFilter","removeFilter","all","clearFilter","clearHeaderFilter","headerFilter","setHeaderFilterColumnPlaceholder","filterFunc","filterType","tagType","attrType","filterChangeCheck","prevSuccess","emptyFunc","headerFilterFunc","filters","headerFilterFuncParams","fieldVal","colVal","trackChanges","generateHeaderFilterElement","filterElement","editorElement","typingTimer","searchTrigger","headerElement","headerFilterEmptyCheck","headerFilterParams","headerFilterLiveFilterDelay","hasAttribute","headerFilterLiveFilter","reloadData","findFilter","findSubFilters","ajax","filtersToArray","searchType","filterRecurse","rowList","activeRowComponents","filterRow","_this11","subFilter","_this12","defaultFilters","plaintext","formatterParams","emptyToSpace","sanitizeHTML","money","integer","decimal","rgx","floatVal","sign","decimalSym","thousandSym","thousand","negativeSign","symbolAfter","urlPrefix","labelField","urlField","image","src","urlSuffix","truthy","allowTruthy","tick","tickElement","cross","crossElement","datetime","DT","DateTime","luxon","inputFormat","outputFormat","invalidPlaceholder","newDatetime","fromISO","fromFormat","isValid","timezone","setZone","toFormat","datetimediff","suffix","humanize","date","now","traffic","percentValue","colors","color","legend","legendColor","legendAlign","barEl","barContainer","legendEl","holderEl","buttonTick","buttonCross","rownum","responsiveCollapse","toggleList","isOpen","rowSelection","checkbox","selectableRangeMode","toggleSelect","handleComplexRowClick","isSelected","registerRowSelectCheckbox","deselectRow","registerHeaderSelectCheckbox","Format","formatValue","formatHeader","lookupFormatter","formatterPrint","print","formatterClipboard","formatterHtmlOutput","htmlOutput","formatters","mockCell","titleFormatter","titleFormatterParams","entityMap","defaultFormatters","FrozenColumns","leftColumns","rightColumns","rightPadding","initializationMode","scrollEndTimer","layoutCell","blockLayout","unblockLayout","edge","frozenCheck","calcMargins","layoutColumnPosition","layoutCalcRows","_calcSpace","layoutGroupCalcs","groupList","allCells","leftParents","parentEl","getColGroupParentElement","getTableElement","FrozenRows","freezeRow","unfreezeRow","isRowFrozen","detachRow","styleRows","GroupComponent","groupManager","toggleVisibility","Group","oldGroup","hasSubGroups","groupIDLookups","_addRowToGroup","_addRow","elementContents","arrowElement","createElements","addBindings","createValueGroups","arrow","movableRows","moveRow","initializeGroupHeader","allowedValues","_createGroup","groupToggleElement","groupID","groupKey","headerGenerator","conformRowData","generateGroupHeaderContents","updateGroupRows","scrollHeader","groupValues","removeGroup","noCalc","_visSet","getHeadersAndRows","hasTopCalcs","detachElement","generateTopRow","hasBottomCalcs","generateBottomRow","groupClosedShowCalcs","count","getDisplayIndex","checkClassicModeGroupHeaderWidth","prev","compoment","getPath","childNodes","GroupRows","displayHandler","setGroupBy","setGroupValues","setGroupStartOpen","setGroupHeader","userGetGroups","userGetGroupedData","rowGetGroup","groupUpdateOnCellEdit","cellUpdated","reassignRowToGroup","configureGroupSetup","rowDeleting","scrollHeaders","rowMoving","rowAddingIndex","rowSample","virtualRenderFill","groupStartOpen","langValue","removeCalcs","getRealColumns","lookupFunc","prevValue","assignRowToGroup","getGroupedData","toGroup","fromGroup","removeRow","insertRow","generateGroups","groupComponents","groupListData","pullGroupListData","rowCount","headerContent","oldGroups","createGroup","assignRowToExistingGroup","newGroupNeeded","oldRowGroup","oldGroupPath","newGroupPath","getExpectedPath","every","groupPath","groupId","History","history","clearComponentHistory","rowDeleted","rowAdded","rowMoved","undo","redo","getHistoryUndoSize","getHistoryRedoSize","posFrom","posTo","getGroup","newValue","undoers","redoers","oldRow","cellEdit","rowAdd","_rebindRow","rowMove","HtmlTableImport","fieldIndex","hasIndex","tableElementCheck","parseTable","_extractOptions","_extractHeaders","_generateBlankHeaders","optionsArr","attrib","_attribValue","exists","_findCol","textContent","inQuote","nextChar","Import","importFromFile","importFormat","loadDataCheck","loadData","importData","lookupImporter","structureData","importer","importers","extension","pickFile","extensions","accept","file","files","reader","FileReader","importReader","readAsArrayBuffer","readAsBinaryString","readAsDataURL","readAsText","onload","onerror","parsedData","structureArrayToObject","structureArrayToColumns","getColumns","defaultImporters","Interaction","eventMap","rowClick","rowDblClick","rowContext","rowMouseEnter","rowMouseLeave","rowMouseOver","rowMouseOut","rowMouseMove","rowTap","rowDblTap","rowTapHold","cellDblClick","cellContext","cellMouseEnter","cellMouseLeave","cellMouseOver","cellMouseOut","cellMouseMove","cellTap","cellDblTap","cellTapHold","headerMouseEnter","headerMouseLeave","headerMouseOver","headerMouseOut","headerMouseMove","groupClick","groupDblClick","groupContext","groupMouseEnter","groupMouseLeave","groupMouseOver","groupMouseOut","groupMouseMove","groupTap","groupDblTap","groupTapHold","subscribers","touchSubscribers","columnSubscribers","touchWatchers","tapDbl","initializeExternalEvents","cellContentsSelectionFixer","selectNode","subscriptionChangeExternal","subscribeTouchEvents","unsubscribeTouchEvents","handleTouch","notouch","watchers","componentObj","Keybindings","watchKeys","pressedKeys","keyupBinding","keydownBinding","keybindings","mergedBindings","mapBindings","bindEvents","clearBindings","actions","mapBinding","symbolsList","ctrl","meta","code","checkBinding","ctrlKey","shiftKey","metaKey","navPrev","navNext","navUp","navDown","scrollPageUp","scrollPageDown","scrollToStart","scrollToEnd","copyToClipboard","keyBlock","newPos","scrollMax","navLeft","navRight","Menu","menuContainer","menuElements","blurEvent","hideMenu","escEvent","escMenu","nestedMenuBlock","positionReversedX","currentComponent","lookupMenuContainer","initializeRowWatchers","initializeGroupWatchers","checkMenuContainerIsParent","container","rowContextMenu","loadMenuEvent","on","rowClickMenu","groupContextMenu","groupClickMenu","headerContextMenu","loadMenuTableColumnEvent","headerClickMenu","headerMenu","initializeColumnHeaderMenu","contextMenu","loadMenuTableCellEvent","clickMenu","headerMenuEl","menu","loadMenu","touch","MouseEvent","menuEl","itemEl","disabled","hideOldSubMenus","positionMenu","pop","x","y","parentOffset","touches","pageX","pageY","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","moveToCol","_bindMouseMove","movingCells","_unbindMouseMove","scrollPos","columnHolder","xPos","MoveRows","toRowAfter","hasHandle","startY","tableRowDropEvent","connectionSelectorsTables","connectionSelectorsElements","connectionElements","connectedTable","connectedRow","movableRowsConnectedTables","movableRowsConnectedElements","initializeCell","mouseup","tableRowDrop","previousSibling","rowHandle","nextRowHeight","prevRowHeight","nextRowHeightLast","prevRowHeightLast","startYMove","setStartPosition","connectToTables","pointerEvents","disconnectFromTables","moveHoverConnections","moveHoverTable","rowHolder","yPos","connectionTables","commsConnections","dropEvent","elementRowDrop","tabulatorElementDropEvent","sender","movableRowsSender","senders","movableRowsReceiver","receivers","connect","disconnect","dropComplete","fromTable","toTable","Mutator","enabled","transformCell","lookupMutator","mutators","mutatorEdit","pageSize","currentRow","currentPage","totalRows","totalPages","showingEl","valueEl","ofEl","totalEl","rowsEl","pages","Page","progressiveLoad","pageCounterElement","pageCounter","page","remoteRowCountEstimate","initialLoad","dataChanging","pageSizes","setMaxPage","setPage","userSetPageToRow","userSetPageSize","getPageSize","previousPage","nextPage","getPage","getPageMax","setPageToRow","initialLoadComplete","calculatePageSizes","paginationAddRow","rowAddingPosition","paginationMode","remotePageParams","_parseRemoteData","restOnRenderBefore","initializePageCounter","initializePaginator","initializeProgressive","scrollVertical","dispRows","testElRow","testElCell","paginationSize","generatePageSizeSelectList","setPageSize","progressiveLoadScrollMargin","pagesElement","firstBut","prevBut","nextBut","lastBut","paginationSizeSelector","pageSizeSelect","counter","paginationCounter","pageCounters","hidden","pageSelectLabel","paginationCounterHolder","paginationElement","paginationCounterElement","paginationInitialPage","paginationButtonCount","trigger","leftSize","rightSize","_generatePageButton","actualStartRow","actualRowPageSize","actualRows","setMaxRows","_setPageButtons","_setPageCounter","last_page","last_row","progressiveLoadDelay","footer","defaultPageCounters","local","id","localStorage","getItem","cookie","cookiePos","expireDate","setDate","getDate","toUTCString","Persistence","defWatcherBlock","readFunc","writeFunc","testKey","removeItem","persistence","retreivedData","persistenceMode","persistenceID","localStorageTest","persistenceReaderFunc","readers","persistenceWriterFunc","writers","retreiveData","save","eventSave","getColumnLayout","setColumnLayout","sorters","initialSort","parseColumns","mergeDefinition","getOwnPropertyDescriptor","defineProperty","set","oldCols","newCols","_findColumn","validateSorters","getSort","getGroupConfig","getPageConfig","excludedKeys","defStore","colDef","defaultReaders","defaultWriters","Print","manualBlock","printAsHtml","replaceTable","cleanup","printFullscreen","genereateTable","printConfig","printStyled","printRowRange","footerContent","scrollX","scrollY","footerEl","tableEl","printHeader","printFooter","printFormatter","scrollTo","ReactiveData","origFuncs","currentVersion","unblock","watchRow","watchData","unwatchData","version","enumerable","configurable","arg","getRowFromDataObject","startRow","oldRows","writable","watchKey","watchTreeChildren","childField","rebuildTree","ResizeColumns","startColumn","startWidth","prevHandle","layoutCellHandles","layoutColumnHeader","resizable","handleDown","nearestColumn","_checkResizability","_mouseDown","oldWidth","prevHandleDown","colIndex","mouseMove","checkCellHeights","mouseUp","ResizeRows","startHeight","screenY","ResizeTable","observer","containerObserver","tableHeight","containerWidth","autoResize","tableStyle","ResizeObserver","entry","nodeHeight","contentRect","nodeWidth","observe","tableResized","unobserve","ResponsiveLayout","hiddenColumns","collapseFormatter","collapseStartOpen","collapseHandleColumn","updateColumnVisibility","initializeResponsivity","responsiveLayoutCollapseFormatter","formatCollapsedData","responsiveLayoutCollapseStartOpen","order","generateCollapsedContent","generateCollapsedRowContent","colCount","working","getFlexBaseWidth","hideColumn","showColumn","generateCollapsedRowData","mockCellComponent","responsiveLayoutCollapseUseFormatters","node_content","titleData","valueData","titleHighlight","SelectRow","selecting","lastClickedRow","selectPrev","headerCheckboxElement","selectRows","deselectRows","getSelectedRows","getSelectedData","isRowSelected","selectable","clearSelectionData","rowRetrieve","selectablePersistence","_deselectRow","_rowSelectionChanged","endSelect","selected","selectableCheck","getCurrentCell","_clearSelection","lastClickedRowIdx","rowIdx","fromRowIdx","toRowIdx","toggledRows","toggledRow","_selectRow","rowMatch","rowInfo","selectableRollingSelection","checkboxEl","dataTreeSelectPropagate","childRowSelection","selectedRow","aRow","bRow","alignEmptyValues","emptyAlign","decimalSeparator","thousandSeparator","string","langLocale","localeCompare","time","array","calc","d","alphanum","as","bs","a1","b1","L","rx","rd","isFinite","Sort","sortList","userSetSort","clearSort","sortMode","remoteSortParams","setSort","refreshSort","arrowEl","sorterParams","startingDir","headerSortStartingDir","headerSortTristate","headerSort","headerSortElement","columnHeaderSortMulti","newSortList","sortOrderReverse","sortListActual","rowComponents","clearColumnHeaders","sortObj","findSorter","setColumnHeader","_sortItems","sorterCount","sortItem","_sortRow","el1Comp","el2Comp","el1","el2","defaultSorters","parameters","numeric","starts","ends","minLength","maxLength","regex","unique","cellData","Validate","invalidCells","getInvalidCells","userClearCellValidation","userValidate","cellIsValid","clearValidation","columnValidate","rowValidate","validator","_extractValidator","substring","_buildValidator","validators","invalidIndex","defaultValidators","TabulatorFull"],"mappings":"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"}