{"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.window = 200; //pixel margin to make column visible before it is shown on screen\r\n\t\t\r\n\t\tthis.initialized = 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}\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\t//////////////////////////////////////\r\n\t///////// Public Functions ///////////\r\n\t//////////////////////////////////////\r\n\t\r\n\trenderColumns(row, force){\r\n\t\tthis.dataChange();\r\n\t}\r\n\t\r\n\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.window));\r\n\t\t}\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\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.scrollLeft = this.elementVertical.scrollLeft;\r\n\t\t\r\n\t\tthis.vDomScrollPosLeft = this.scrollLeft - this.window;\r\n\t\tthis.vDomScrollPosRight = this.scrollLeft + this.elementVertical.clientWidth + this.window;\r\n\t\t\r\n\t\tvar colPos = 0;\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.options(\"layout\") === \"fitData\") {\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.options(\"layout\") === \"fitData\"){\r\n\t\t\tthis.table.columnManager.columnsByIndex.forEach((column) => {\r\n\t\t\t\tif(!column.definition.width && column.visible){\r\n\t\t\t\t\tchange = true;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\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.window;\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()[0];\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\tif(collsWidth > this.vDomScrollPosRight){\r\n\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\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\tthis.fitDataColAvg = Math.floor(collsWidth / (colEnd + 1));\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\tfor(colEnd; colEnd < this.table.columnManager.columnsByIndex.length; colEnd++){\r\n\t\t\t\t\t\t\tthis.table.columnManager.columnsByIndex[colEnd].setWidth(this.fitDataColAvg);\r\n\t\t\t\t\t\t}\r\n\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.table.rowManager.getVisibleRows();\r\n\t\trows.forEach((row) => {\r\n\t\t\tthis.reinitializeRow(row, true);\r\n\t\t});\r\n\t}\r\n\t\r\n\tscroll(diff){\r\n\t\tthis.vDomScrollPosLeft += diff;\r\n\t\tthis.vDomScrollPosRight += diff;\r\n\t\t\r\n\t\tif(diff > (this.elementVertical.clientWidth * .8)){\r\n\t\t\tthis.rerenderColumns();\r\n\t\t}else{\r\n\t\t\tif(diff > 0){\r\n\t\t\t\t//scroll right\r\n\t\t\t\tthis.addColRight();\r\n\t\t\t\tthis.removeColLeft();\r\n\t\t\t}else{\r\n\t\t\t\t//scroll left\r\n\t\t\t\tthis.addColLeft();\r\n\t\t\t\tthis.removeColRight();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\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 column = this.columns[this.rightCol + 1],\r\n\t\trows, newWidth, widthDiff;\r\n\t\t\r\n\t\tif(column && column.modules.vdomHoz.leftPos <= this.vDomScrollPosRight){\r\n\t\t\trows = this.table.rowManager.getVisibleRows();\r\n\t\t\t\r\n\t\t\trows.forEach((row) => {\r\n\t\t\t\tif(row.type !== \"group\"){\r\n\t\t\t\t\tvar cell = row.getCell(column);\r\n\t\t\t\t\trow.getElement().appendChild(cell.getElement());\r\n\t\t\t\t\tcell.cellRendered();\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\t\r\n\t\t\tthis.fitDataColActualWidthCheck(column);\r\n\t\t\t\r\n\t\t\tthis.rightCol++; // Don't move this below the >= check below\r\n\t\t\t\r\n\t\t\tif(this.rightCol >= (this.columns.length - 1)){\r\n\t\t\t\tthis.vDomPadRight = 0;\r\n\t\t\t}else{\r\n\t\t\t\tthis.vDomPadRight -= column.getWidth();\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tthis.tableElement.style.paddingRight = this.vDomPadRight + \"px\";\r\n\t\t\t\r\n\t\t\tthis.addColRight();\r\n\t\t}\r\n\t}\r\n\t\r\n\taddColLeft(){\r\n\t\tvar column = this.columns[this.leftCol - 1],\r\n\t\trows;\r\n\t\t\r\n\t\tif(column && column.modules.vdomHoz.rightPos >= this.vDomScrollPosLeft){\r\n\t\t\tvar rows = this.table.rowManager.getVisibleRows();\r\n\t\t\t\r\n\t\t\trows.forEach((row) => {\r\n\t\t\t\tif(row.type !== \"group\"){\r\n\t\t\t\t\tvar cell = row.getCell(column);\r\n\t\t\t\t\trow.getElement().prepend(cell.getElement());\r\n\t\t\t\t\tcell.cellRendered();\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\t\r\n\t\t\tthis.fitDataColActualWidthCheck(column);\r\n\t\t\t\r\n\t\t\tthis.leftCol--; // don't move this below the <= check below\r\n\r\n\t\t\tif(this.leftCol <= 0){ // replicating logic in addColRight\r\n\t\t\t\tthis.vDomPadLeft = 0;\r\n\t\t\t}else{\r\n\t\t\t\tthis.vDomPadLeft -= column.getWidth();\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tthis.tableElement.style.paddingLeft = this.vDomPadLeft + \"px\";\r\n\t\t\t\r\n\t\t\t\r\n\t\t\tthis.addColLeft();\r\n\t\t}\r\n\t}\r\n\t\r\n\tremoveColRight(column){\r\n\t\tvar column = this.columns[this.rightCol],\r\n\t\trows;\r\n\t\t\r\n\t\tif(column && column.modules.vdomHoz.leftPos > this.vDomScrollPosRight){\r\n\t\t\trows = this.table.rowManager.getVisibleRows();\r\n\t\t\t\r\n\t\t\tcolumn.modules.vdomHoz.visible = false;\r\n\t\t\t\r\n\t\t\trows.forEach((row) => {\r\n\t\t\t\tif(row.type !== \"group\"){\r\n\t\t\t\t\tvar cell = row.getCell(column);\r\n\t\t\t\t\ttry {\r\n\t\t\t\t\t\trow.getElement().removeChild(cell.getElement());\r\n\t\t\t\t\t} catch (ex) {\r\n\t\t\t\t\t\tconsole.warn(\"Could not removeColRight\", ex.message)\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.vDomPadRight += column.getWidth();\r\n\t\t\tthis.tableElement.style.paddingRight = this.vDomPadRight + \"px\";\r\n\t\t\t\r\n\t\t\tthis.rightCol --;\r\n\t\t\t\r\n\t\t\tthis.removeColRight();\r\n\t\t}\r\n\t}\r\n\t\r\n\tremoveColLeft(){\r\n\t\tvar column = this.columns[this.leftCol],\r\n\t\trows;\r\n\t\t\r\n\t\tif(column && column.modules.vdomHoz.rightPos < this.vDomScrollPosLeft){\t\r\n\t\t\trows = this.table.rowManager.getVisibleRows();\r\n\t\t\t\r\n\t\t\trows.forEach((row) => {\r\n\t\t\t\tvar cell, el;\r\n\r\n\t\t\t\tif(row.type !== \"group\"){\r\n\t\t\t\t\tcell = row.getCell(column);\r\n\r\n\t\t\t\t\tif(cell){\r\n\t\t\t\t\t\tel = cell.getElement();\r\n\r\n\t\t\t\t\t\tif(el.parentNode){\r\n\t\t\t\t\t\t\ttry {\r\n\t\t\t\t\t\t\t\trow.getElement().removeChild(el);\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}\r\n\t\t\t});\r\n\t\t\t\r\n\t\t\tthis.vDomPadLeft += column.getWidth();\r\n\t\t\tthis.tableElement.style.paddingLeft = this.vDomPadLeft + \"px\";\r\n\t\t\t\r\n\t\t\tthis.leftCol ++;\r\n\t\t\t\r\n\t\t\tthis.removeColLeft();\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.rightCol + 2, 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};\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.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\tthis.initialized = true;\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.element = document.querySelector(this.table.options.footerElement);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tdefault:\r\n\t\t\t\tthis.element = this.table.options.footerElement;\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tgetElement(){\r\n\t\treturn this.element;\r\n\t}\r\n\r\n\tappend(element, parent){\r\n\t\tthis.activate(parent);\r\n\r\n\t\tthis.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\"].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, hanlder)\r\n\t\t}else{\r\n\t\t\tthis.bindings[type][funcName] = handler;\r\n\t\t}\r\n\t}\r\n\r\n\thandle(type, component, name){\r\n\t\tif(this.bindings[type] && this.bindings[type][name]){\r\n\t\t\treturn this.bindings[type][name].bind(null, component);\r\n\t\t}else{\r\n\t\t\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}","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(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.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\r\n\t\t\tif(col){\r\n\t\t\t\tvar cellEl = document.createElement(\"td\"),\r\n\t\t\t\tcolumn = col.component._column,\r\n\t\t\t\tvalue = col.value;\r\n\r\n\t\t\t\tvar cellWrapper = {\r\n\t\t\t\t\tmodules:{},\r\n\t\t\t\t\tgetValue:function(){\r\n\t\t\t\t\t\treturn value;\r\n\t\t\t\t\t},\r\n\t\t\t\t\tgetField:function(){\r\n\t\t\t\t\t\treturn column.definition.field;\r\n\t\t\t\t\t},\r\n\t\t\t\t\tgetElement:function(){\r\n\t\t\t\t\t\treturn cellEl;\r\n\t\t\t\t\t},\r\n\t\t\t\t\tgetColumn:function(){\r\n\t\t\t\t\t\treturn column.getComponent();\r\n\t\t\t\t\t},\r\n\t\t\t\t\tgetData:function(){\r\n\t\t\t\t\t\treturn row.component.getData();\r\n\t\t\t\t\t},\r\n\t\t\t\t\tgetRow:function(){\r\n\t\t\t\t\t\treturn row.component;\r\n\t\t\t\t\t},\r\n\t\t\t\t\tgetComponent:function(){\r\n\t\t\t\t\t\treturn cellWrapper;\r\n\t\t\t\t\t},\r\n\t\t\t\t\tcolumn:column,\r\n\t\t\t\t};\r\n\r\n\t\t\t\tvar classNames = column.definition.cssClass ? column.definition.cssClass.split(\" \") : [];\r\n\r\n\t\t\t\tclassNames.forEach(function(className) {\r\n\t\t\t\t\tcellEl.classList.add(className);\r\n\t\t\t\t});\r\n\r\n\t\t\t\tif(this.table.modExists(\"format\") && this.config.formatCells !== false){\r\n\t\t\t\t\tvalue = this.table.modules.format.formatExportValue(cellWrapper, this.colVisProp);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tswitch(typeof value){\r\n\t\t\t\t\t\tcase \"object\":\r\n\t\t\t\t\t\tvalue = JSON.stringify(value);\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\tcase \"undefined\":\r\n\t\t\t\t\t\tcase \"null\":\r\n\t\t\t\t\t\tvalue = \"\";\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\tdefault:\r\n\t\t\t\t\t\tvalue = value;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(value instanceof Node){\r\n\t\t\t\t\tcellEl.appendChild(value);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tcellEl.innerHTML = value;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(styles.firstCell){\r\n\t\t\t\t\tthis.mapElementStyles(styles.firstCell, cellEl, [\"padding-top\", \"padding-left\", \"padding-right\", \"padding-bottom\", \"border-top\", \"border-left\", \"border-right\", \"border-bottom\", \"color\", \"font-weight\", \"font-family\", \"font-size\"]);\r\n\r\n\t\t\t\t\tif(column.definition.align){\r\n\t\t\t\t\t\tcellEl.style.textAlign = column.definition.align;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(this.table.options.dataTree && this.config.dataTree !== false){\r\n\t\t\t\t\tif((setup.treeElementField && setup.treeElementField == column.field) || (!setup.treeElementField && i == 0)){\r\n\t\t\t\t\t\tif(row.component._row.modules.dataTree.controlEl){\r\n\t\t\t\t\t\t\tcellEl.insertBefore(row.component._row.modules.dataTree.controlEl.cloneNode(true), cellEl.firstChild);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif(row.component._row.modules.dataTree.branchEl){\r\n\t\t\t\t\t\t\tcellEl.insertBefore(row.component._row.modules.dataTree.branchEl.cloneNode(true), cellEl.firstChild);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\trowEl.appendChild(cellEl);\r\n\r\n\t\t\t\tif(cellWrapper.modules.format && cellWrapper.modules.format.renderedCallback){\r\n\t\t\t\t\tcellWrapper.modules.format.renderedCallback();\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(setup.rowFormatter && this.config.formatCells !== false){\r\n\t\t\t\t\tsetup.rowFormatter(row.component);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn rowEl;\r\n\t}\r\n\r\n\tgenereateHTMLTable(list){\r\n\t\tvar holder = document.createElement(\"div\");\r\n\r\n\t\tholder.appendChild(this.genereateTableElement(list));\r\n\r\n\t\treturn holder.innerHTML;\r\n\t}\r\n\r\n\tgetHtml(visible, style, config, colVisProp){\r\n\t\tvar list = this.generateExportList(config || this.table.options.htmlOutputConfig, style, visible, colVisProp || \"htmlOutput\");\r\n\r\n\t\treturn this.genereateHTMLTable(list);\r\n\t}\r\n\r\n\tmapElementStyles(from, to, props){\r\n\t\tif(this.cloneTableStyle && from && to){\r\n\r\n\t\t\tvar lookup = {\r\n\t\t\t\t\"background-color\" : \"backgroundColor\",\r\n\t\t\t\t\"color\" : \"fontColor\",\r\n\t\t\t\t\"width\" : \"width\",\r\n\t\t\t\t\"font-weight\" : \"fontWeight\",\r\n\t\t\t\t\"font-family\" : \"fontFamily\",\r\n\t\t\t\t\"font-size\" : \"fontSize\",\r\n\t\t\t\t\"text-align\" : \"textAlign\",\r\n\t\t\t\t\"border-top\" : \"borderTop\",\r\n\t\t\t\t\"border-left\" : \"borderLeft\",\r\n\t\t\t\t\"border-right\" : \"borderRight\",\r\n\t\t\t\t\"border-bottom\" : \"borderBottom\",\r\n\t\t\t\t\"padding-top\" : \"paddingTop\",\r\n\t\t\t\t\"padding-left\" : \"paddingLeft\",\r\n\t\t\t\t\"padding-right\" : \"paddingRight\",\r\n\t\t\t\t\"padding-bottom\" : \"paddingBottom\",\r\n\t\t\t};\r\n\r\n\t\t\tif(window.getComputedStyle){\r\n\t\t\t\tvar fromStyle = window.getComputedStyle(from);\r\n\r\n\t\t\t\tprops.forEach(function(prop){\r\n\t\t\t\t\tto.style[lookup[prop]] = fromStyle.getPropertyValue(prop);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n\r\nExport.moduleName = \"export\";\r\n\r\nexport default Export;\r\n","export default {\r\n\r\n\t//equal to\r\n\t\"=\":function(filterVal, rowVal, rowData, filterParams){\r\n\t\treturn rowVal == filterVal ? true : false;\r\n\t},\r\n\r\n\t//less than\r\n\t\"<\":function(filterVal, rowVal, rowData, filterParams){\r\n\t\treturn rowVal < filterVal ? true : false;\r\n\t},\r\n\r\n\t//less than or equal to\r\n\t\"<=\":function(filterVal, rowVal, rowData, filterParams){\r\n\t\treturn rowVal <= filterVal ? true : false;\r\n\t},\r\n\r\n\t//greater than\r\n\t\">\":function(filterVal, rowVal, rowData, filterParams){\r\n\t\treturn rowVal > filterVal ? true : false;\r\n\t},\r\n\r\n\t//greater than or equal to\r\n\t\">=\":function(filterVal, rowVal, rowData, filterParams){\r\n\t\treturn rowVal >= filterVal ? true : false;\r\n\t},\r\n\r\n\t//not equal to\r\n\t\"!=\":function(filterVal, rowVal, rowData, filterParams){\r\n\t\treturn rowVal != filterVal ? true : false;\r\n\t},\r\n\r\n\t\"regex\":function(filterVal, rowVal, rowData, filterParams){\r\n\r\n\t\tif(typeof filterVal == \"string\"){\r\n\t\t\tfilterVal = new RegExp(filterVal);\r\n\t\t}\r\n\r\n\t\treturn filterVal.test(rowVal);\r\n\t},\r\n\r\n\t//contains the string\r\n\t\"like\":function(filterVal, rowVal, rowData, filterParams){\r\n\t\tif(filterVal === null || typeof filterVal === \"undefined\"){\r\n\t\t\treturn rowVal === filterVal ? true : false;\r\n\t\t}else{\r\n\t\t\tif(typeof rowVal !== 'undefined' && rowVal !== null){\r\n\t\t\t\treturn String(rowVal).toLowerCase().indexOf(filterVal.toLowerCase()) > -1;\r\n\t\t\t}\r\n\t\t\telse{\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\t//contains the keywords\r\n\t\"keywords\":function(filterVal, rowVal, rowData, filterParams){\r\n\t\tvar keywords = filterVal.toLowerCase().split(typeof filterParams.separator === \"undefined\" ? \" \" : filterParams.separator),\r\n\t\tvalue = String(rowVal === null || typeof rowVal === \"undefined\" ? \"\" : rowVal).toLowerCase(),\r\n\t\tmatches = [];\r\n\r\n\t\tkeywords.forEach((keyword) =>{\r\n\t\t\tif(value.includes(keyword)){\r\n\t\t\t\tmatches.push(true);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn filterParams.matchAll ? matches.length === keywords.length : !!matches.length;\r\n\t},\r\n\r\n\t//starts with the string\r\n\t\"starts\":function(filterVal, rowVal, rowData, filterParams){\r\n\t\tif(filterVal === null || typeof filterVal === \"undefined\"){\r\n\t\t\treturn rowVal === filterVal ? true : false;\r\n\t\t}else{\r\n\t\t\tif(typeof rowVal !== 'undefined' && rowVal !== null){\r\n\t\t\t\treturn String(rowVal).toLowerCase().startsWith(filterVal.toLowerCase());\r\n\t\t\t}\r\n\t\t\telse{\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\t//ends with the string\r\n\t\"ends\":function(filterVal, rowVal, rowData, filterParams){\r\n\t\tif(filterVal === null || typeof filterVal === \"undefined\"){\r\n\t\t\treturn rowVal === filterVal ? true : false;\r\n\t\t}else{\r\n\t\t\tif(typeof rowVal !== 'undefined' && rowVal !== null){\r\n\t\t\t\treturn String(rowVal).toLowerCase().endsWith(filterVal.toLowerCase());\r\n\t\t\t}\r\n\t\t\telse{\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\t//in array\r\n\t\"in\":function(filterVal, rowVal, rowData, filterParams){\r\n\t\tif(Array.isArray(filterVal)){\r\n\t\t\treturn filterVal.length ? filterVal.indexOf(rowVal) > -1 : true;\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Filter Error - filter value is not an array:\", filterVal);\r\n\t\t\treturn false;\r\n\t\t}\r\n\t},\r\n};","import Module from '../../core/Module.js';\r\n\r\nimport defaultFilters from './defaults/filters.js';\r\n\r\nclass Filter extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.filterList = []; //hold filter list\r\n\t\tthis.headerFilters = {}; //hold column filters\r\n\t\tthis.headerFilterColumns = []; //hold columns that use header filters\r\n\r\n\t\tthis.prevHeaderFilterChangeCheck = \"\";\r\n\t\tthis.prevHeaderFilterChangeCheck = \"{}\";\r\n\r\n\t\tthis.changed = false; //has filtering changed since last render\r\n\t\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\tif(left !== this.table.rowManager.element.scrollLeft){\r\n\t\t\t\t\t\tthis.table.rowManager.scrollHorizontal(left);\r\n\t\t\t\t\t\tthis.table.columnManager.scrollHorizontal(left);\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\t//live update filters as user types\r\n\t\t\t\ttypingTimer = false;\r\n\r\n\t\t\t\tsearchTrigger = function(e){\r\n\t\t\t\t\tif(typingTimer){\r\n\t\t\t\t\t\tclearTimeout(typingTimer);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\ttypingTimer = setTimeout(function(){\r\n\t\t\t\t\t\tsuccess(editorElement.value);\r\n\t\t\t\t\t},self.table.options.headerFilterLiveFilterDelay);\r\n\t\t\t\t};\r\n\r\n\t\t\t\tcolumn.modules.filter.headerElement = editorElement;\r\n\t\t\t\tcolumn.modules.filter.attrType = editorElement.hasAttribute(\"type\") ? editorElement.getAttribute(\"type\").toLowerCase() : \"\" ;\r\n\t\t\t\tcolumn.modules.filter.tagType = editorElement.tagName.toLowerCase();\r\n\r\n\t\t\t\tif(column.definition.headerFilterLiveFilter !== false){\r\n\r\n\t\t\t\t\tif (\r\n\t\t\t\t\t\t!(\r\n\t\t\t\t\t\t\tcolumn.definition.headerFilter === 'autocomplete' ||\r\n\t\t\t\t\t\t\tcolumn.definition.headerFilter === 'tickCross' ||\r\n\t\t\t\t\t\t\t((column.definition.editor === 'autocomplete' ||\r\n\t\t\t\t\t\t\t\tcolumn.definition.editor === 'tickCross') &&\r\n\t\t\t\t\t\t\tcolumn.definition.headerFilter === true)\r\n\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t) {\r\n\t\t\t\t\t\teditorElement.addEventListener(\"keyup\", searchTrigger);\r\n\t\t\t\t\teditorElement.addEventListener(\"search\", searchTrigger);\r\n\r\n\r\n\t\t\t\t\t//update number filtered columns on change\r\n\t\t\t\t\tif(column.modules.filter.attrType == \"number\"){\r\n\t\t\t\t\t\teditorElement.addEventListener(\"change\", function(e){\r\n\t\t\t\t\t\t\tsuccess(editorElement.value);\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t//change text inputs to search inputs to allow for clearing of field\r\n\t\t\t\t\tif(column.modules.filter.attrType == \"text\" && this.table.browser !== \"ie\"){\r\n\t\t\t\t\t\teditorElement.setAttribute(\"type\", \"search\");\r\n\t\t\t\t\t\t// editorElement.off(\"change blur\"); //prevent blur from triggering filter and preventing selection click\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\t\t//prevent input and select elements from propegating click to column sorters etc\r\n\t\t\t\t\tif(column.modules.filter.tagType == \"input\" || column.modules.filter.tagType == \"select\" || column.modules.filter.tagType == \"textarea\"){\r\n\t\t\t\t\t\teditorElement.addEventListener(\"mousedown\",function(e){\r\n\t\t\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tfilterElement.appendChild(editorElement);\r\n\r\n\t\t\t\tcolumn.contentElement.appendChild(filterElement);\r\n\r\n\t\t\t\tif(!reinitialize){\r\n\t\t\t\t\tself.headerFilterColumns.push(column);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Filter Error - Cannot add header filter, column has no field set:\", column.definition.title);\r\n\t\t}\r\n\t}\r\n\r\n\t//hide all header filter elements (used to ensure correct column widths in \"fitData\" layout mode)\r\n\thideHeaderFilterElements(){\r\n\t\tthis.headerFilterColumns.forEach(function(column){\r\n\t\t\tif(column.modules.filter && column.modules.filter.headerElement){\r\n\t\t\t\tcolumn.modules.filter.headerElement.style.display = 'none';\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t//show all header filter elements (used to ensure correct column widths in \"fitData\" layout mode)\r\n\tshowHeaderFilterElements(){\r\n\t\tthis.headerFilterColumns.forEach(function(column){\r\n\t\t\tif(column.modules.filter && column.modules.filter.headerElement){\r\n\t\t\t\tcolumn.modules.filter.headerElement.style.display = '';\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t//programatically set focus of header filter\r\n\tsetHeaderFilterFocus(column){\r\n\t\tif(column.modules.filter && column.modules.filter.headerElement){\r\n\t\t\tcolumn.modules.filter.headerElement.focus();\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Column Filter Focus Error - No header filter set on column:\", column.getField());\r\n\t\t}\r\n\t}\r\n\r\n\t//programmatically get value of header filter\r\n\tgetHeaderFilterValue(column){\r\n\t\tif(column.modules.filter && column.modules.filter.headerElement){\r\n\t\t\treturn column.modules.filter.headerElement.value;\r\n\t\t} else {\r\n\t\t\tconsole.warn(\"Column Filter Error - No header filter set on column:\", column.getField());\r\n\t\t}\r\n\t}\r\n\r\n\t//programatically set value of header filter\r\n\tsetHeaderFilterValue(column, value){\r\n\t\tif (column){\r\n\t\t\tif(column.modules.filter && column.modules.filter.headerElement){\r\n\t\t\t\tthis.generateHeaderFilterElement(column, value, true);\r\n\t\t\t\tcolumn.modules.filter.success(value);\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Column Filter Error - No header filter set on column:\", column.getField());\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\treloadHeaderFilter(column){\r\n\t\tif (column){\r\n\t\t\tif(column.modules.filter && column.modules.filter.headerElement){\r\n\t\t\t\tthis.generateHeaderFilterElement(column, column.modules.filter.value, true);\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Column Filter Error - No header filter set on column:\", column.getField());\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\trefreshFilter(){\r\n\t\tif(this.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\r\n\t\t\tif(formatterParams.timezone){\r\n\t\t\t\tnewDatetime = newDatetime.shiftTimezone(formatterParams.timezone);\r\n\t\t\t}\r\n\r\n\t\t\treturn newDatetime.toFormat(outputFormat);\r\n\t\t}else{\r\n\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\t\r\n\r\n\tif(this.table.modExists(\"selectRow\", true)){\r\n\r\n\t\tcheckbox.addEventListener(\"click\", (e) => {\r\n\t\t\te.stopPropagation();\r\n\t\t});\r\n\r\n\t\tif(typeof cell.getRow == 'function'){\r\n\t\t\tvar row = cell.getRow();\r\n\r\n\t\t\tif(row instanceof RowComponent){\r\n\r\n\t\t\t\tcheckbox.addEventListener(\"change\", (e) => {\r\n\t\t\t\t\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\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.leftColumns = [];\r\n\t\tthis.rightColumns = [];\r\n\t\tthis.leftMargin = 0;\r\n\t\tthis.rightMargin = 0;\r\n\t\tthis.rightPadding = 0;\r\n\t\tthis.initializationMode = \"left\";\r\n\t\tthis.active = false;\r\n\t\tthis.scrollEndTimer = false;\r\n\t\tthis.blocked = true;\r\n\r\n\t\tthis.registerColumnOption(\"frozen\");\r\n\t}\r\n\r\n\t//reset initial state\r\n\treset(){\r\n\t\tthis.initializationMode = \"left\";\r\n\t\tthis.leftColumns = [];\r\n\t\tthis.rightColumns = [];\r\n\t\tthis.leftMargin = 0;\r\n\t\tthis.rightMargin = 0;\r\n\t\tthis.rightMargin = 0;\r\n\t\tthis.active = false;\r\n\r\n\t\tthis.table.columnManager.headersElement.style.marginLeft = 0;\r\n\t\tthis.table.columnManager.element.style.paddingRight = 0;\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tthis.subscribe(\"cell-layout\", this.layoutCell.bind(this));\r\n\t\tthis.subscribe(\"column-init\", this.initializeColumn.bind(this));\r\n\t\tthis.subscribe(\"column-width\", this.layout.bind(this));\r\n\t\tthis.subscribe(\"row-layout-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\r\n\tblockLayout(){\r\n\t\tthis.blocked = true;\r\n\t}\r\n\r\n\tunblockLayout(){\r\n\t\tthis.blocked = false;\r\n\t}\r\n\r\n\tlayoutCell(cell){\r\n\t\tthis.layoutElement(cell.element, cell.column)\r\n\t}\r\n\r\n\t//initialize specific column\r\n\tinitializeColumn(column){\r\n\t\tvar config = {margin:0, edge:false};\r\n\r\n\t\tif(!column.isGroup){\r\n\r\n\t\t\tif(this.frozenCheck(column)){\r\n\r\n\t\t\t\tconfig.position = this.initializationMode;\r\n\r\n\t\t\t\tif(this.initializationMode == \"left\"){\r\n\t\t\t\t\tthis.leftColumns.push(column);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tthis.rightColumns.unshift(column);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.active = true;\r\n\r\n\t\t\t\tcolumn.modules.frozen = config;\r\n\t\t\t}else{\r\n\t\t\t\tthis.initializationMode = \"right\";\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tfrozenCheck(column){\r\n\t\tvar frozen = false;\r\n\r\n\t\tif(column.parent.isGroup && column.definition.frozen){\r\n\t\t\tconsole.warn(\"Frozen Column Error - Parent column group must be frozen, not individual columns or sub column groups\");\r\n\t\t}\r\n\r\n\t\tif(column.parent.isGroup){\r\n\t\t\treturn this.frozenCheck(column.parent);\r\n\t\t}else{\r\n\t\t\treturn column.definition.frozen;\r\n\t\t}\r\n\r\n\t\treturn frozen;\r\n\t}\r\n\r\n\t//quick layout to smooth horizontal scrolling\r\n\tscrollHorizontal(){\r\n\t\tvar rows;\r\n\r\n\t\tif(this.active){\r\n\t\t\tclearTimeout(this.scrollEndTimer);\r\n\r\n\t\t\t//layout all rows after scroll is complete\r\n\t\t\tthis.scrollEndTimer = setTimeout(() => {\r\n\t\t\t\tthis.layout();\r\n\t\t\t}, 100);\r\n\r\n\t\t\trows = this.table.rowManager.getVisibleRows();\r\n\r\n\t\t\tthis.calcMargins();\r\n\r\n\t\t\tthis.layoutColumnPosition();\r\n\r\n\t\t\tthis.layoutCalcRows();\r\n\r\n\t\t\trows.forEach((row) => {\r\n\t\t\t\tif(row.type === \"row\"){\r\n\t\t\t\t\tthis.layoutRow(row);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tthis.table.rowManager.tableElement.style.marginRight = this.rightMargin;\r\n\t\t}\r\n\t}\r\n\r\n\t//calculate margins for rows\r\n\tcalcMargins(){\r\n\t\tthis.leftMargin = this._calcSpace(this.leftColumns, this.leftColumns.length) + \"px\";\r\n\t\tthis.table.columnManager.headersElement.style.marginLeft = this.leftMargin;\r\n\r\n\t\tthis.rightMargin = this._calcSpace(this.rightColumns, this.rightColumns.length) + \"px\";\r\n\t\tthis.table.columnManager.element.style.paddingRight = this.rightMargin;\r\n\r\n\t\t//calculate right frozen columns\r\n\t\tthis.rightPadding = this.table.rowManager.element.clientWidth + this.table.columnManager.scrollLeft;\r\n\t}\r\n\r\n\t//layout calculation rows\r\n\tlayoutCalcRows(){\r\n\t\tif(this.table.modExists(\"columnCalcs\")){\r\n\t\t\tif(this.table.modules.columnCalcs.topInitialized && this.table.modules.columnCalcs.topRow){\r\n\t\t\t\tthis.layoutRow(this.table.modules.columnCalcs.topRow);\r\n\t\t\t}\r\n\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\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\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\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\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\r\n\t//calculate column positions and layout headers\r\n\tlayoutColumnPosition(allCells){\r\n\r\n\t\tvar leftParents = [];\r\n\r\n\t\tthis.leftColumns.forEach((column, i) => {\r\n\t\t\tcolumn.modules.frozen.margin = (this._calcSpace(this.leftColumns, i) + this.table.columnManager.scrollLeft) + \"px\";\r\n\r\n\t\t\tif(i == this.leftColumns.length - 1){\r\n\t\t\t\tcolumn.modules.frozen.edge = true;\r\n\t\t\t}else{\r\n\t\t\t\tcolumn.modules.frozen.edge = false;\r\n\t\t\t}\r\n\r\n\t\t\tif(column.parent.isGroup){\r\n\t\t\t\tvar parentEl = this.getColGroupParentElement(column);\r\n\t\t\t\tif(!leftParents.includes(parentEl)){\r\n\t\t\t\t\tthis.layoutElement(parentEl, column);\r\n\t\t\t\t\tleftParents.push(parentEl);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(column.modules.frozen.edge){\r\n\t\t\t\t\tparentEl.classList.add(\"tabulator-frozen-\" + column.modules.frozen.position);\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tthis.layoutElement(column.getElement(), column);\r\n\t\t\t}\r\n\r\n\t\t\tif(allCells){\r\n\t\t\t\tcolumn.cells.forEach((cell) => {\r\n\t\t\t\t\tthis.layoutElement(cell.getElement(true), column);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tthis.rightColumns.forEach((column, i) => {\r\n\t\t\tcolumn.modules.frozen.margin = (this.rightPadding - this._calcSpace(this.rightColumns, i + 1)) + \"px\";\r\n\r\n\t\t\tif(i == this.rightColumns.length - 1){\r\n\t\t\t\tcolumn.modules.frozen.edge = true;\r\n\t\t\t}else{\r\n\t\t\t\tcolumn.modules.frozen.edge = false;\r\n\t\t\t}\r\n\r\n\r\n\t\t\tif(column.parent.isGroup){\r\n\t\t\t\tthis.layoutElement(this.getColGroupParentElement(column), column);\r\n\t\t\t}else{\r\n\t\t\t\tthis.layoutElement(column.getElement(), column);\r\n\t\t\t}\r\n\r\n\t\t\tif(allCells){\r\n\t\t\t\tcolumn.cells.forEach((cell) => {\r\n\t\t\t\t\tthis.layoutElement(cell.getElement(true), column);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tgetColGroupParentElement(column){\r\n\t\treturn column.parent.isGroup ? this.getColGroupParentElement(column.parent) : column.getElement();\r\n\t}\r\n\r\n\t//layout columns appropriately\r\n\tlayout(){\r\n\t\tvar rightMargin = 0;\r\n\r\n\t\tif(this.active && !this.blocked){\r\n\t\t\t//calculate row padding\r\n\t\t\tthis.calcMargins();\r\n\r\n\t\t\tthis.table.rowManager.getDisplayRows().forEach((row) =>{\r\n\t\t\t\tif(row.type === \"row\"){\r\n\t\t\t\t\tthis.layoutRow(row);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tthis.layoutCalcRows();\r\n\r\n\t\t\t//calculate left columns\r\n\t\t\tthis.layoutColumnPosition(true);\r\n\r\n\t\t\tthis.table.rowManager.tableElement.style.marginRight = this.rightMargin;\r\n\t\t}\r\n\t}\r\n\r\n\tlayoutRow(row){\r\n\t\tvar rowEl = row.getElement();\r\n\r\n\t\trowEl.style.paddingLeft = this.leftMargin;\r\n\r\n\t\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\r\n\t\tthis.leftColumns.forEach((column) => {\r\n\t\t\tvar cell = row.getCell(column);\r\n\r\n\t\t\tif(cell){\r\n\t\t\t\tthis.layoutElement(cell.getElement(true), column);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tthis.rightColumns.forEach((column) => {\r\n\t\t\tvar cell = row.getCell(column);\r\n\r\n\t\t\tif(cell){\r\n\t\t\t\tthis.layoutElement(cell.getElement(true), column);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tlayoutElement(element, column){\r\n\r\n\t\tif(column.modules.frozen){\r\n\t\t\telement.style.position = \"absolute\";\r\n\t\t\telement.style.left = column.modules.frozen.margin;\r\n\r\n\t\t\telement.classList.add(\"tabulator-frozen\");\r\n\r\n\t\t\tif(column.modules.frozen.edge){\r\n\t\t\t\telement.classList.add(\"tabulator-frozen-\" + column.modules.frozen.position);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t_calcSpace(columns, index){\r\n\t\tvar width = 0;\r\n\r\n\t\tfor (let i = 0; i < index; i++){\r\n\t\t\tif(columns[i].visible){\r\n\t\t\t\twidth += columns[i].getWidth();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn width;\r\n\t}\r\n}\r\n\r\nFrozenColumns.moduleName = \"frozenColumns\";\r\n\r\nexport default FrozenColumns;","import Module from '../../core/Module.js';\r\n\r\nclass FrozenRows extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.topElement = document.createElement(\"div\");\r\n\t\tthis.rows = [];\r\n\r\n\t\t//register component functions\r\n\t\tthis.registerComponentFunction(\"row\", \"freeze\", this.freezeRow.bind(this));\r\n\t\tthis.registerComponentFunction(\"row\", \"unfreeze\", this.unfreezeRow.bind(this));\r\n\t\tthis.registerComponentFunction(\"row\", \"isFrozen\", this.isRowFrozen.bind(this));\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tthis.rows = [];\r\n\r\n\t\tthis.topElement.classList.add(\"tabulator-frozen-rows-holder\");\r\n\r\n\t\t// this.table.columnManager.element.append(this.topElement);\r\n\t\tthis.table.columnManager.getElement().insertBefore(this.topElement, this.table.columnManager.headersElement.nextSibling);\r\n\r\n\t\tthis.subscribe(\"row-deleting\", this.detachRow.bind(this));\r\n\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\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\telement.style.top = \"\";\r\n\t\t\t\r\n\t\t\tif(parentEl){\r\n\t\t\t\telement.style.bottom = (this.menuContainer.offsetHeight - parentOffset.top - parentEl.offsetHeight - 1) + \"px\";\r\n\t\t\t}else{\r\n\t\t\t\telement.style.bottom = (this.menuContainer.offsetHeight - y) + \"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\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;","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\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 = \" \" + currentRow + \"-\" + Math.min((currentRow + pageSize - 1), totalRows) + \" \";\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 = \" \" + totalRows + \" \";\r\n\t\r\n\tthis.table.modules.localize.langBind(\"pagination|counter|rows\", (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};","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){\r\n\t\tvar content, currentRow;\r\n\t\t\r\n\t\tif(this.pageCounter){\r\n\t\t\tcurrentRow = ((this.page - 1) * this.size) + 1;\r\n\r\n\t\t\tif(this.mode === \"remote\"){\r\n\t\t\t\ttotalRows = this.remoteRowCountEstimate;\r\n\t\t\t}\r\n\r\n\t\t\tcontent = this.pageCounter.call(this, 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 output, start, end;\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\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\tif(data[i]){\r\n\t\t\t\t\toutput.push(data[i]);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tthis._setPageCounter(data.length);\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(data.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.element;\r\n\t\t\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\tself._rowSelectionChanged(silent);\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","initialized","compatibilityCheck","ok","find","col","frozen","dataChange","scroll","old","cols","clear","colPos","columnsByIndex","config","leftPos","rightPos","fitDataCheck","vdomHoz","paddingLeft","paddingRight","reinitChanged","reinitializeRows","initializeRow","reinitializeRow","change","collsWidth","colEnd","generateCells","layoutRefresh","getVisibleRows","diff","addColRight","removeColLeft","addColLeft","removeColRight","start","end","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","abs","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","visibleRows","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","hanlder","startsWith","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","shiftTimezone","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","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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"}