{"version":3,"file":"tabulator.min.js","sources":["../../src/js/core/CoreFeature.js","../../src/js/core/column/ColumnComponent.js","../../src/js/core/column/defaults/options.js","../../src/js/core/cell/CellComponent.js","../../src/js/core/cell/Cell.js","../../src/js/core/column/Column.js","../../src/js/core/tools/Helpers.js","../../src/js/core/tools/OptionsList.js","../../src/js/core/rendering/Renderer.js","../../src/js/core/rendering/renderers/BasicHorizontal.js","../../src/js/core/rendering/renderers/VirtualDomHorizontal.js","../../src/js/core/ColumnManager.js","../../src/js/core/row/RowComponent.js","../../src/js/core/row/Row.js","../../src/js/core/rendering/renderers/BasicVertical.js","../../src/js/core/rendering/renderers/VirtualDomVertical.js","../../src/js/core/RowManager.js","../../src/js/core/FooterManager.js","../../src/js/core/tools/InteractionMonitor.js","../../src/js/core/tools/ComponentFunctionBinder.js","../../src/js/core/tools/DataLoader.js","../../src/js/core/tools/ExternalEventBus.js","../../src/js/core/tools/InternalEventBus.js","../../src/js/core/tools/DeprecationAdvisor.js","../../src/js/core/tools/TableRegistry.js","../../src/js/core/tools/Popup.js","../../src/js/core/Module.js","../../src/js/modules/Layout/defaults/modes/fitDataGeneral.js","../../src/js/modules/Layout/defaults/modes.js","../../src/js/modules/Layout/defaults/modes/fitData.js","../../src/js/modules/Layout/defaults/modes/fitDataStretch.js","../../src/js/modules/Layout/defaults/modes/fitColumns.js","../../src/js/modules/Layout/Layout.js","../../src/js/modules/Localize/Localize.js","../../src/js/modules/Localize/defaults/langs.js","../../src/js/modules/Comms/Comms.js","../../src/js/core/tools/ModuleBinder.js","../../src/js/core/tools/Alert.js","../../src/js/core/Tabulator.js","../../src/js/core/defaults/options.js","../../src/js/modules/Accessor/Accessor.js","../../src/js/modules/Accessor/defaults/accessors.js","../../src/js/modules/Ajax/defaults/urlGenerator.js","../../src/js/modules/Ajax/defaults/contentTypeFormatters.js","../../src/js/modules/Ajax/Ajax.js","../../src/js/modules/Ajax/defaults/config.js","../../src/js/modules/Ajax/defaults/loaderPromise.js","../../src/js/modules/Clipboard/Clipboard.js","../../src/js/modules/Clipboard/defaults/pasteActions.js","../../src/js/modules/Clipboard/defaults/pasteParsers.js","../../src/js/modules/ColumnCalcs/CalcComponent.js","../../src/js/modules/ColumnCalcs/defaults/calculations.js","../../src/js/modules/ColumnCalcs/ColumnCalcs.js","../../src/js/modules/DataTree/DataTree.js","../../src/js/modules/Download/defaults/downloaders.js","../../src/js/modules/Download/defaults/downloaders/csv.js","../../src/js/modules/Download/defaults/downloaders/json.js","../../src/js/modules/Download/defaults/downloaders/jsonLines.js","../../src/js/modules/Download/defaults/downloaders/pdf.js","../../src/js/modules/Download/defaults/downloaders/xlsx.js","../../src/js/modules/Download/defaults/downloaders/html.js","../../src/js/modules/Download/Download.js","../../src/js/modules/Edit/inputMask.js","../../src/js/modules/Edit/List.js","../../src/js/modules/Edit/defaults/editors.js","../../src/js/modules/Edit/defaults/editors/input.js","../../src/js/modules/Edit/defaults/editors/textarea.js","../../src/js/modules/Edit/defaults/editors/number.js","../../src/js/modules/Edit/defaults/editors/range.js","../../src/js/modules/Edit/defaults/editors/date.js","../../src/js/modules/Edit/defaults/editors/time.js","../../src/js/modules/Edit/defaults/editors/datetime.js","../../src/js/modules/Edit/defaults/editors/select.js","../../src/js/modules/Edit/defaults/editors/list.js","../../src/js/modules/Edit/defaults/editors/autocomplete.js","../../src/js/modules/Edit/defaults/editors/star.js","../../src/js/modules/Edit/defaults/editors/progress.js","../../src/js/modules/Edit/defaults/editors/tickCross.js","../../src/js/modules/Edit/Edit.js","../../src/js/modules/Export/ExportRow.js","../../src/js/modules/Export/ExportColumn.js","../../src/js/modules/Export/Export.js","../../src/js/modules/Filter/defaults/filters.js","../../src/js/modules/Filter/Filter.js","../../src/js/modules/Format/defaults/formatters.js","../../src/js/modules/Format/defaults/formatters/plaintext.js","../../src/js/modules/Format/defaults/formatters/html.js","../../src/js/modules/Format/defaults/formatters/textarea.js","../../src/js/modules/Format/defaults/formatters/money.js","../../src/js/modules/Format/defaults/formatters/link.js","../../src/js/modules/Format/defaults/formatters/image.js","../../src/js/modules/Format/defaults/formatters/tickCross.js","../../src/js/modules/Format/defaults/formatters/datetime.js","../../src/js/modules/Format/defaults/formatters/datetimediff.js","../../src/js/modules/Format/defaults/formatters/lookup.js","../../src/js/modules/Format/defaults/formatters/star.js","../../src/js/modules/Format/defaults/formatters/traffic.js","../../src/js/modules/Format/defaults/formatters/progress.js","../../src/js/modules/Format/defaults/formatters/color.js","../../src/js/modules/Format/defaults/formatters/buttonTick.js","../../src/js/modules/Format/defaults/formatters/buttonCross.js","../../src/js/modules/Format/defaults/formatters/rownum.js","../../src/js/modules/Format/defaults/formatters/handle.js","../../src/js/modules/Format/defaults/formatters/responsiveCollapse.js","../../src/js/modules/Format/defaults/formatters/rowSelection.js","../../src/js/modules/Format/Format.js","../../src/js/modules/FrozenColumns/FrozenColumns.js","../../src/js/modules/FrozenRows/FrozenRows.js","../../src/js/modules/GroupRows/GroupComponent.js","../../src/js/modules/GroupRows/Group.js","../../src/js/modules/GroupRows/GroupRows.js","../../src/js/modules/History/History.js","../../src/js/modules/History/defaults/undoers.js","../../src/js/modules/History/defaults/redoers.js","../../src/js/modules/HtmlTableImport/HtmlTableImport.js","../../src/js/modules/Import/defaults/importers.js","../../src/js/modules/Import/defaults/importers/csv.js","../../src/js/modules/Import/defaults/importers/json.js","../../src/js/modules/Import/defaults/importers/array.js","../../src/js/modules/Import/Import.js","../../src/js/modules/Interaction/Interaction.js","../../src/js/modules/Keybindings/Keybindings.js","../../src/js/modules/Keybindings/defaults/bindings.js","../../src/js/modules/Keybindings/defaults/actions.js","../../src/js/modules/Menu/Menu.js","../../src/js/modules/MoveColumns/MoveColumns.js","../../src/js/modules/MoveRows/MoveRows.js","../../src/js/modules/Mutator/Mutator.js","../../src/js/modules/Mutator/defaults/mutators.js","../../src/js/modules/Page/defaults/pageCounters.js","../../src/js/modules/Page/defaults/pageCounters/rows.js","../../src/js/modules/Page/defaults/pageCounters/pages.js","../../src/js/modules/Page/Page.js","../../src/js/modules/Persistence/defaults/readers.js","../../src/js/modules/Persistence/defaults/writers.js","../../src/js/modules/Persistence/Persistence.js","../../src/js/modules/Popup/Popup.js","../../src/js/modules/Print/Print.js","../../src/js/modules/ReactiveData/ReactiveData.js","../../src/js/modules/ResizeColumns/ResizeColumns.js","../../src/js/modules/ResizeRows/ResizeRows.js","../../src/js/modules/ResizeTable/ResizeTable.js","../../src/js/modules/ResponsiveLayout/ResponsiveLayout.js","../../src/js/modules/SelectRow/SelectRow.js","../../src/js/modules/Sort/defaults/sorters/datetime.js","../../src/js/modules/Sort/defaults/sorters.js","../../src/js/modules/Sort/defaults/sorters/number.js","../../src/js/modules/Sort/defaults/sorters/string.js","../../src/js/modules/Sort/defaults/sorters/date.js","../../src/js/modules/Sort/defaults/sorters/time.js","../../src/js/modules/Sort/defaults/sorters/boolean.js","../../src/js/modules/Sort/defaults/sorters/array.js","../../src/js/modules/Sort/defaults/sorters/exists.js","../../src/js/modules/Sort/defaults/sorters/alphanum.js","../../src/js/modules/Sort/Sort.js","../../src/js/modules/Tooltip/Tooltip.js","../../src/js/modules/Validate/defaults/validators.js","../../src/js/modules/Validate/Validate.js","../../src/js/core/TabulatorFull.js"],"sourcesContent":["export default class CoreFeature{\r\n\r\n\tconstructor(table){\r\n\t\tthis.table = table;\r\n\t}\r\n\r\n\t//////////////////////////////////////////\r\n\t/////////////// DataLoad /////////////////\r\n\t//////////////////////////////////////////\r\n\r\n\treloadData(data, silent, columnsChanged){\r\n\t\treturn this.table.dataLoader.load(data, undefined, undefined, undefined, silent, columnsChanged);\r\n\t}\r\n\r\n\t//////////////////////////////////////////\r\n\t///////////// Localization ///////////////\r\n\t//////////////////////////////////////////\r\n\r\n\tlangText(){\r\n\t\treturn this.table.modules.localize.getText(...arguments);\r\n\t}\r\n\r\n\tlangBind(){\r\n\t\treturn this.table.modules.localize.bind(...arguments);\r\n\t}\r\n\r\n\tlangLocale(){\r\n\t\treturn this.table.modules.localize.getLocale(...arguments);\r\n\t}\r\n\r\n\r\n\t//////////////////////////////////////////\r\n\t////////// Inter Table Comms /////////////\r\n\t//////////////////////////////////////////\r\n\r\n\tcommsConnections(){\r\n\t\treturn this.table.modules.comms.getConnections(...arguments);\r\n\t}\r\n\r\n\tcommsSend(){\r\n\t\treturn this.table.modules.comms.send(...arguments);\r\n\t}\r\n\r\n\t//////////////////////////////////////////\r\n\t//////////////// Layout /////////////////\r\n\t//////////////////////////////////////////\r\n\r\n\tlayoutMode(){\r\n\t\treturn this.table.modules.layout.getMode();\r\n\t}\r\n\r\n\tlayoutRefresh(force){\r\n\t\treturn this.table.modules.layout.layout(force);\r\n\t}\r\n\r\n\r\n\t//////////////////////////////////////////\r\n\t/////////////// Event Bus ////////////////\r\n\t//////////////////////////////////////////\r\n\r\n\tsubscribe(){\r\n\t\treturn this.table.eventBus.subscribe(...arguments);\r\n\t}\r\n\r\n\tunsubscribe(){\r\n\t\treturn this.table.eventBus.unsubscribe(...arguments);\r\n\t}\r\n\r\n\tsubscribed(key){\r\n\t\treturn this.table.eventBus.subscribed(key);\r\n\t}\r\n\r\n\tsubscriptionChange(){\r\n\t\treturn this.table.eventBus.subscriptionChange(...arguments);\r\n\t}\r\n\r\n\tdispatch(){\r\n\t\treturn this.table.eventBus.dispatch(...arguments);\r\n\t}\r\n\r\n\tchain(){\r\n\t\treturn this.table.eventBus.chain(...arguments);\r\n\t}\r\n\r\n\tconfirm(){\r\n\t\treturn this.table.eventBus.confirm(...arguments);\r\n\t}\r\n\r\n\tdispatchExternal(){\r\n\t\treturn this.table.externalEvents.dispatch(...arguments);\r\n\t}\r\n\r\n\tsubscribedExternal(key){\r\n\t\treturn this.table.externalEvents.subscribed(key);\r\n\t}\r\n\r\n\tsubscriptionChangeExternal(){\r\n\t\treturn this.table.externalEvents.subscriptionChange(...arguments);\r\n\t}\r\n\r\n\t//////////////////////////////////////////\r\n\t//////////////// Options /////////////////\r\n\t//////////////////////////////////////////\r\n\r\n\toptions(key){\r\n\t\treturn this.table.options[key];\r\n\t}\r\n\r\n\tsetOption(key, value){\r\n\t\tif(typeof value !== \"undefined\"){\r\n\t\t\tthis.table.options[key] = value;\r\n\t\t}\r\n\r\n\t\treturn this.table.options[key];\r\n\t}\r\n\r\n\t//////////////////////////////////////////\r\n\t/////////// Deprecation Checks ///////////\r\n\t//////////////////////////////////////////\r\n\r\n\tdeprecationCheck(oldOption, newOption){\r\n\t\treturn this.table.deprecationAdvisor.check(oldOption, newOption);\r\n\t}\r\n\r\n\tdeprecationCheckMsg(oldOption, msg){\r\n\t\treturn this.table.deprecationAdvisor.checkMsg(oldOption, msg);\r\n\t}\r\n\r\n\tdeprecationMsg(msg){\r\n\t\treturn this.table.deprecationAdvisor.msg(msg);\r\n\t}\r\n\t//////////////////////////////////////////\r\n\t//////////////// Modules /////////////////\r\n\t//////////////////////////////////////////\r\n\r\n\tmodule(key){\r\n\t\treturn this.table.module(key);\r\n\t}\r\n}","import Column from './Column.js';\r\n\r\n//public column object\r\nexport default class ColumnComponent {\r\n\tconstructor (column){\r\n\t\tthis._column = column;\r\n\t\tthis.type = \"ColumnComponent\";\r\n\r\n\t\treturn new Proxy(this, {\r\n\t\t\tget: function(target, name, receiver) {\r\n\t\t\t\tif (typeof target[name] !== \"undefined\") {\r\n\t\t\t\t\treturn target[name];\r\n\t\t\t\t}else{\r\n\t\t\t\t\treturn target._column.table.componentFunctionBinder.handle(\"column\", target._column, name);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tgetElement(){\r\n\t\treturn this._column.getElement();\r\n\t}\r\n\r\n\tgetDefinition(){\r\n\t\treturn this._column.getDefinition();\r\n\t}\r\n\r\n\tgetField(){\r\n\t\treturn this._column.getField();\r\n\t}\r\n\r\n\tgetTitleDownload() {\r\n\t\treturn this._column.getTitleDownload();\r\n\t}\r\n\r\n\tgetCells(){\r\n\t\tvar cells = [];\r\n\r\n\t\tthis._column.cells.forEach(function(cell){\r\n\t\t\tcells.push(cell.getComponent());\r\n\t\t});\r\n\r\n\t\treturn cells;\r\n\t}\r\n\r\n\tisVisible(){\r\n\t\treturn this._column.visible;\r\n\t}\r\n\r\n\tshow(){\r\n\t\tif(this._column.isGroup){\r\n\t\t\tthis._column.columns.forEach(function(column){\r\n\t\t\t\tcolumn.show();\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tthis._column.show();\r\n\t\t}\r\n\t}\r\n\r\n\thide(){\r\n\t\tif(this._column.isGroup){\r\n\t\t\tthis._column.columns.forEach(function(column){\r\n\t\t\t\tcolumn.hide();\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tthis._column.hide();\r\n\t\t}\r\n\t}\r\n\r\n\ttoggle(){\r\n\t\tif(this._column.visible){\r\n\t\t\tthis.hide();\r\n\t\t}else{\r\n\t\t\tthis.show();\r\n\t\t}\r\n\t}\r\n\r\n\tdelete(){\r\n\t\treturn this._column.delete();\r\n\t}\r\n\r\n\tgetSubColumns(){\r\n\t\tvar output = [];\r\n\r\n\t\tif(this._column.columns.length){\r\n\t\t\tthis._column.columns.forEach(function(column){\r\n\t\t\t\toutput.push(column.getComponent());\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tgetParentColumn(){\r\n\t\treturn this._column.parent instanceof Column ? this._column.parent.getComponent() : false;\r\n\t}\r\n\r\n\t_getSelf(){\r\n\t\treturn this._column;\r\n\t}\r\n\r\n\tscrollTo(){\r\n\t\treturn this._column.table.columnManager.scrollToColumn(this._column);\r\n\t}\r\n\r\n\tgetTable(){\r\n\t\treturn this._column.table;\r\n\t}\r\n\r\n\tmove(to, after){\r\n\t\tvar toColumn = this._column.table.columnManager.findColumn(to);\r\n\r\n\t\tif(toColumn){\r\n\t\t\tthis._column.table.columnManager.moveColumn(this._column, toColumn, after);\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Move Error - No matching column found:\", toColumn);\r\n\t\t}\r\n\t}\r\n\r\n\tgetNextColumn(){\r\n\t\tvar nextCol = this._column.nextColumn();\r\n\r\n\t\treturn nextCol ? nextCol.getComponent() : false;\r\n\t}\r\n\r\n\tgetPrevColumn(){\r\n\t\tvar prevCol = this._column.prevColumn();\r\n\r\n\t\treturn prevCol ? prevCol.getComponent() : false;\r\n\t}\r\n\r\n\tupdateDefinition(updates){\r\n\t\treturn this._column.updateDefinition(updates);\r\n\t}\r\n\r\n\tgetWidth(){\r\n\t\treturn this._column.getWidth();\r\n\t}\r\n\r\n\tsetWidth(width){\r\n\t\tvar result;\r\n\r\n\t\tif(width === true){\r\n\t\t\tresult = this._column.reinitializeWidth(true);\r\n\t\t}else{\r\n\t\t\tresult = this._column.setWidth(width);\r\n\t\t}\r\n\r\n\t\tthis._column.table.columnManager.rerenderColumns(true);\r\n\r\n\t\treturn result;\r\n\t}\r\n}","export default {\r\n\t\"title\": undefined,\r\n\t\"field\": undefined,\r\n\t\"columns\": undefined,\r\n\t\"visible\": undefined,\r\n\t\"hozAlign\": undefined,\r\n\t\"vertAlign\": undefined,\r\n\t\"width\": undefined,\r\n\t\"minWidth\": 40,\r\n\t\"maxWidth\": undefined,\r\n\t\"maxInitialWidth\": undefined,\r\n\t\"cssClass\": undefined,\r\n\t\"variableHeight\": undefined,\r\n\t\"headerVertical\": undefined,\r\n\t\"headerHozAlign\": undefined,\r\n\t\"editableTitle\": undefined,\r\n};","//public cell object\r\nexport default class CellComponent {\r\n\r\n\tconstructor (cell){\r\n\t\tthis._cell = cell;\r\n\r\n\t\treturn new Proxy(this, {\r\n\t\t\tget: function(target, name, receiver) {\r\n\t\t\t\tif (typeof target[name] !== \"undefined\") {\r\n\t\t\t\t\treturn target[name];\r\n\t\t\t\t}else{\r\n\t\t\t\t\treturn target._cell.table.componentFunctionBinder.handle(\"cell\", target._cell, name);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tgetValue(){\r\n\t\treturn this._cell.getValue();\r\n\t}\r\n\r\n\tgetOldValue(){\r\n\t\treturn this._cell.getOldValue();\r\n\t}\r\n\r\n\tgetInitialValue(){\r\n\t\treturn this._cell.initialValue;\r\n\t}\r\n\r\n\tgetElement(){\r\n\t\treturn this._cell.getElement();\r\n\t}\r\n\r\n\tgetRow(){\r\n\t\treturn this._cell.row.getComponent();\r\n\t}\r\n\r\n\tgetData(){\r\n\t\treturn this._cell.row.getData();\r\n\t}\r\n\r\n\tgetField(){\r\n\t\treturn this._cell.column.getField();\r\n\t}\r\n\r\n\tgetColumn(){\r\n\t\treturn this._cell.column.getComponent();\r\n\t}\r\n\r\n\tsetValue(value, mutate){\r\n\t\tif(typeof mutate == \"undefined\"){\r\n\t\t\tmutate = true;\r\n\t\t}\r\n\r\n\t\tthis._cell.setValue(value, mutate);\r\n\t}\r\n\r\n\trestoreOldValue(){\r\n\t\tthis._cell.setValueActual(this._cell.getOldValue());\r\n\t}\r\n\r\n\trestoreInitialValue(){\r\n\t\tthis._cell.setValueActual(this._cell.initialValue);\r\n\t}\r\n\r\n\tcheckHeight(){\r\n\t\tthis._cell.checkHeight();\r\n\t}\r\n\r\n\tgetTable(){\r\n\t\treturn this._cell.table;\r\n\t}\r\n\r\n\t_getSelf(){\r\n\t\treturn this._cell;\r\n\t}\r\n}","import CoreFeature from '../CoreFeature.js';\r\nimport CellComponent from './CellComponent.js';\r\n\r\nexport default class Cell extends CoreFeature{\r\n\tconstructor(column, row){\r\n\t\tsuper(column.table);\r\n\r\n\t\tthis.table = column.table;\r\n\t\tthis.column = column;\r\n\t\tthis.row = row;\r\n\t\tthis.element = null;\r\n\t\tthis.value = null;\r\n\t\tthis.initialValue;\r\n\t\tthis.oldValue = null;\r\n\t\tthis.modules = {};\r\n\r\n\t\tthis.height = null;\r\n\t\tthis.width = null;\r\n\t\tthis.minWidth = null;\r\n\r\n\t\tthis.component = null;\r\n\r\n\t\tthis.loaded = false; //track if the cell has been added to the DOM yet\r\n\r\n\t\tthis.build();\r\n\t}\r\n\r\n\t//////////////// Setup Functions /////////////////\r\n\t//generate element\r\n\tbuild(){\r\n\t\tthis.generateElement();\r\n\r\n\t\tthis.setWidth();\r\n\r\n\t\tthis._configureCell();\r\n\r\n\t\tthis.setValueActual(this.column.getFieldValue(this.row.data));\r\n\r\n\t\tthis.initialValue = this.value;\r\n\t}\r\n\r\n\tgenerateElement(){\r\n\t\tthis.element = document.createElement('div');\r\n\t\tthis.element.className = \"tabulator-cell\";\r\n\t\tthis.element.setAttribute(\"role\", \"gridcell\");\r\n\t}\r\n\r\n\t_configureCell(){\r\n\t\tvar element = this.element,\r\n\t\tfield = this.column.getField(),\r\n\t\tvertAligns = {\r\n\t\t\ttop:\"flex-start\",\r\n\t\t\tbottom:\"flex-end\",\r\n\t\t\tmiddle:\"center\",\r\n\t\t},\r\n\t\thozAligns = {\r\n\t\t\tleft:\"flex-start\",\r\n\t\t\tright:\"flex-end\",\r\n\t\t\tcenter:\"center\",\r\n\t\t};\r\n\r\n\t\t//set text alignment\r\n\t\telement.style.textAlign = this.column.hozAlign;\r\n\r\n\t\tif(this.column.vertAlign){\r\n\t\t\telement.style.display = \"inline-flex\";\r\n\r\n\t\t\telement.style.alignItems = vertAligns[this.column.vertAlign] || \"\";\r\n\r\n\t\t\tif(this.column.hozAlign){\r\n\t\t\t\telement.style.justifyContent = hozAligns[this.column.hozAlign] || \"\";\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(field){\r\n\t\t\telement.setAttribute(\"tabulator-field\", field);\r\n\t\t}\r\n\r\n\t\t//add class to cell if needed\r\n\t\tif(this.column.definition.cssClass){\r\n\t\t\tvar classNames = this.column.definition.cssClass.split(\" \");\r\n\t\t\tclassNames.forEach((className) => {\r\n\t\t\t\telement.classList.add(className);\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tthis.dispatch(\"cell-init\", this);\r\n\r\n\t\t//hide cell if not visible\r\n\t\tif(!this.column.visible){\r\n\t\t\tthis.hide();\r\n\t\t}\r\n\t}\r\n\r\n\t//generate cell contents\r\n\t_generateContents(){\r\n\t\tvar val;\r\n\r\n\t\tval = this.chain(\"cell-format\", this, null, () => {\r\n\t\t\treturn this.element.innerHTML = this.value;\r\n\t\t});\r\n\r\n\t\tswitch(typeof val){\r\n\t\t\tcase \"object\":\r\n\t\t\t\tif(val instanceof Node){\r\n\r\n\t\t\t\t\t//clear previous cell contents\r\n\t\t\t\t\twhile(this.element.firstChild) this.element.removeChild(this.element.firstChild);\r\n\r\n\t\t\t\t\tthis.element.appendChild(val);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tthis.element.innerHTML = \"\";\r\n\r\n\t\t\t\t\tif(val != null){\r\n\t\t\t\t\t\tconsole.warn(\"Format Error - Formatter has returned a type of object, the only valid formatter object return is an instance of Node, the formatter returned:\", val);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"undefined\":\r\n\t\t\t\tthis.element.innerHTML = \"\";\r\n\t\t\t\tbreak;\r\n\t\t\tdefault:\r\n\t\t\t\tthis.element.innerHTML = val;\r\n\t\t}\r\n\t}\r\n\r\n\tcellRendered(){\r\n\t\tthis.dispatch(\"cell-rendered\", this);\r\n\t}\r\n\r\n\t//////////////////// Getters ////////////////////\r\n\tgetElement(containerOnly){\r\n\t\tif(!this.loaded){\r\n\t\t\tthis.loaded = true;\r\n\t\t\tif(!containerOnly){\r\n\t\t\t\tthis.layoutElement();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this.element;\r\n\t}\r\n\r\n\tgetValue(){\r\n\t\treturn this.value;\r\n\t}\r\n\r\n\tgetOldValue(){\r\n\t\treturn this.oldValue;\r\n\t}\r\n\r\n\t//////////////////// Actions ////////////////////\r\n\tsetValue(value, mutate, force){\r\n\t\tvar changed = this.setValueProcessData(value, mutate, force);\r\n\r\n\t\tif(changed){\r\n\t\t\tthis.dispatch(\"cell-value-updated\", this);\r\n\r\n\t\t\tthis.cellRendered();\r\n\r\n\t\t\tif(this.column.definition.cellEdited){\r\n\t\t\t\tthis.column.definition.cellEdited.call(this.table, this.getComponent());\r\n\t\t\t}\r\n\r\n\t\t\tthis.dispatchExternal(\"cellEdited\", this.getComponent());\r\n\r\n\t\t\tif(this.subscribedExternal(\"dataChanged\")){\r\n\t\t\t\tthis.dispatchExternal(\"dataChanged\", this.table.rowManager.getData());\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tsetValueProcessData(value, mutate, force){\r\n\t\tvar changed = false;\r\n\r\n\t\tif(this.value !== value || force){\r\n\r\n\t\t\tchanged = true;\r\n\r\n\t\t\tif(mutate){\r\n\t\t\t\tvalue = this.chain(\"cell-value-changing\", [this, value], null, value);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.setValueActual(value);\r\n\r\n\t\tif(changed){\r\n\t\t\tthis.dispatch(\"cell-value-changed\", this);\r\n\t\t}\r\n\r\n\t\treturn changed;\r\n\t}\r\n\r\n\tsetValueActual(value){\r\n\t\tthis.oldValue = this.value;\r\n\r\n\t\tthis.value = value;\r\n\r\n\t\tthis.dispatch(\"cell-value-save-before\", this);\r\n\r\n\t\tthis.column.setFieldValue(this.row.data, value);\r\n\r\n\t\tthis.dispatch(\"cell-value-save-after\", this);\r\n\r\n\t\tif(this.loaded){\r\n\t\t\tthis.layoutElement();\r\n\t\t}\r\n\t}\r\n\r\n\tlayoutElement(){\r\n\t\tthis._generateContents();\r\n\r\n\t\tthis.dispatch(\"cell-layout\", this);\r\n\t}\r\n\r\n\tsetWidth(){\r\n\t\tthis.width = this.column.width;\r\n\t\tthis.element.style.width = this.column.widthStyled;\r\n\t}\r\n\r\n\tclearWidth(){\r\n\t\tthis.width = \"\";\r\n\t\tthis.element.style.width = \"\";\r\n\t}\r\n\r\n\tgetWidth(){\r\n\t\treturn this.width || this.element.offsetWidth;\r\n\t}\r\n\r\n\tsetMinWidth(){\r\n\t\tthis.minWidth = this.column.minWidth;\r\n\t\tthis.element.style.minWidth = this.column.minWidthStyled;\r\n\t}\r\n\r\n\tsetMaxWidth(){\r\n\t\tthis.maxWidth = this.column.maxWidth;\r\n\t\tthis.element.style.maxWidth = this.column.maxWidthStyled;\r\n\t}\r\n\r\n\tcheckHeight(){\r\n\t\t// var height = this.element.css(\"height\");\r\n\t\tthis.row.reinitializeHeight();\r\n\t}\r\n\r\n\tclearHeight(){\r\n\t\tthis.element.style.height = \"\";\r\n\t\tthis.height = null;\r\n\r\n\t\tthis.dispatch(\"cell-height\", this, \"\");\r\n\t}\r\n\r\n\tsetHeight(){\r\n\t\tthis.height = this.row.height;\r\n\t\tthis.element.style.height = this.row.heightStyled;\r\n\r\n\t\tthis.dispatch(\"cell-height\", this, this.row.heightStyled);\r\n\t}\r\n\r\n\tgetHeight(){\r\n\t\treturn this.height || this.element.offsetHeight;\r\n\t}\r\n\r\n\tshow(){\r\n\t\tthis.element.style.display = this.column.vertAlign ? \"inline-flex\" : \"\";\r\n\t}\r\n\r\n\thide(){\r\n\t\tthis.element.style.display = \"none\";\r\n\t}\r\n\r\n\tdelete(){\r\n\t\tthis.dispatch(\"cell-delete\", this);\r\n\r\n\t\tif(!this.table.rowManager.redrawBlock && this.element.parentNode){\r\n\t\t\tthis.element.parentNode.removeChild(this.element);\r\n\t\t}\r\n\r\n\t\tthis.element = false;\r\n\t\tthis.column.deleteCell(this);\r\n\t\tthis.row.deleteCell(this);\r\n\t\tthis.calcs = {};\r\n\t}\r\n\r\n\tgetIndex(){\r\n\t\treturn this.row.getCellIndex(this);\r\n\t}\r\n\r\n\t//////////////// Object Generation /////////////////\r\n\tgetComponent(){\r\n\t\tif(!this.component){\r\n\t\t\tthis.component = new CellComponent(this);\r\n\t\t}\r\n\r\n\t\treturn this.component;\r\n\t}\r\n}\r\n","import CoreFeature from '../CoreFeature.js';\r\nimport ColumnComponent from './ColumnComponent.js';\r\nimport defaultOptions from './defaults/options.js';\r\n\r\nimport Cell from '../cell/Cell.js';\r\n\r\nclass Column extends CoreFeature{\r\n\r\n\tconstructor(def, parent){\r\n\t\tsuper(parent.table);\r\n\r\n\t\tthis.definition = def; //column definition\r\n\t\tthis.parent = parent; //hold parent object\r\n\t\tthis.type = \"column\"; //type of element\r\n\t\tthis.columns = []; //child columns\r\n\t\tthis.cells = []; //cells bound to this column\r\n\t\tthis.element = this.createElement(); //column header element\r\n\t\tthis.contentElement = false;\r\n\t\tthis.titleHolderElement = false;\r\n\t\tthis.titleElement = false;\r\n\t\tthis.groupElement = this.createGroupElement(); //column group holder element\r\n\t\tthis.isGroup = false;\r\n\t\tthis.hozAlign = \"\"; //horizontal text alignment\r\n\t\tthis.vertAlign = \"\"; //vert text alignment\r\n\r\n\t\t//multi dimensional filed handling\r\n\t\tthis.field =\"\";\r\n\t\tthis.fieldStructure = \"\";\r\n\t\tthis.getFieldValue = \"\";\r\n\t\tthis.setFieldValue = \"\";\r\n\r\n\t\tthis.titleDownload = null;\r\n\t\tthis.titleFormatterRendered = false;\r\n\r\n\t\tthis.mapDefinitions();\r\n\r\n\t\tthis.setField(this.definition.field);\r\n\r\n\t\tthis.modules = {}; //hold module variables;\r\n\r\n\t\tthis.width = null; //column width\r\n\t\tthis.widthStyled = \"\"; //column width pre-styled to improve render efficiency\r\n\t\tthis.maxWidth = null; //column maximum width\r\n\t\tthis.maxWidthStyled = \"\"; //column maximum pre-styled to improve render efficiency\r\n\t\tthis.maxInitialWidth = null;\r\n\t\tthis.minWidth = null; //column minimum width\r\n\t\tthis.minWidthStyled = \"\"; //column minimum pre-styled to improve render efficiency\r\n\t\tthis.widthFixed = false; //user has specified a width for this column\r\n\r\n\t\tthis.visible = true; //default visible state\r\n\r\n\t\tthis.component = null;\r\n\r\n\t\t//initialize column\r\n\t\tif(this.definition.columns){\r\n\r\n\t\t\tthis.isGroup = true;\r\n\r\n\t\t\tthis.definition.columns.forEach((def, i) => {\r\n\t\t\t\tvar newCol = new Column(def, this);\r\n\t\t\t\tthis.attachColumn(newCol);\r\n\t\t\t});\r\n\r\n\t\t\tthis.checkColumnVisibility();\r\n\t\t}else{\r\n\t\t\tparent.registerColumnField(this);\r\n\t\t}\r\n\r\n\t\tthis._initialize();\r\n\t}\r\n\r\n\tcreateElement (){\r\n\t\tvar el = document.createElement(\"div\");\r\n\r\n\t\tel.classList.add(\"tabulator-col\");\r\n\t\tel.setAttribute(\"role\", \"columnheader\");\r\n\t\tel.setAttribute(\"aria-sort\", \"none\");\r\n\r\n\t\tswitch(this.table.options.columnHeaderVertAlign){\r\n\t\t\tcase \"middle\":\r\n\t\t\t\tel.style.justifyContent = \"center\";\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"bottom\":\r\n\t\t\t\tel.style.justifyContent = \"flex-end\";\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\treturn el;\r\n\t}\r\n\r\n\tcreateGroupElement (){\r\n\t\tvar el = document.createElement(\"div\");\r\n\r\n\t\tel.classList.add(\"tabulator-col-group-cols\");\r\n\r\n\t\treturn el;\r\n\t}\r\n\r\n\tmapDefinitions(){\r\n\t\tvar defaults = this.table.options.columnDefaults;\r\n\r\n\t\t//map columnDefaults onto column definitions\r\n\t\tif(defaults){\r\n\t\t\tfor(let key in defaults){\r\n\t\t\t\tif(typeof this.definition[key] === \"undefined\"){\r\n\t\t\t\t\tthis.definition[key] = defaults[key];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.definition = this.table.columnManager.optionsList.generate(Column.defaultOptionList, this.definition);\r\n\t}\r\n\r\n\tcheckDefinition(){\r\n\t\tObject.keys(this.definition).forEach((key) => {\r\n\t\t\tif(Column.defaultOptionList.indexOf(key) === -1){\r\n\t\t\t\tconsole.warn(\"Invalid column definition option in '\" + (this.field || this.definition.title) + \"' column:\", key);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tsetField(field){\r\n\t\tthis.field = field;\r\n\t\tthis.fieldStructure = field ? (this.table.options.nestedFieldSeparator ? field.split(this.table.options.nestedFieldSeparator) : [field]) : [];\r\n\t\tthis.getFieldValue = this.fieldStructure.length > 1 ? this._getNestedData : this._getFlatData;\r\n\t\tthis.setFieldValue = this.fieldStructure.length > 1 ? this._setNestedData : this._setFlatData;\r\n\t}\r\n\r\n\t//register column position with column manager\r\n\tregisterColumnPosition(column){\r\n\t\tthis.parent.registerColumnPosition(column);\r\n\t}\r\n\r\n\t//register column position with column manager\r\n\tregisterColumnField(column){\r\n\t\tthis.parent.registerColumnField(column);\r\n\t}\r\n\r\n\t//trigger position registration\r\n\treRegisterPosition(){\r\n\t\tif(this.isGroup){\r\n\t\t\tthis.columns.forEach(function(column){\r\n\t\t\t\tcolumn.reRegisterPosition();\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tthis.registerColumnPosition(this);\r\n\t\t}\r\n\t}\r\n\r\n\t//build header element\r\n\t_initialize(){\r\n\t\tvar def = this.definition;\r\n\r\n\t\twhile(this.element.firstChild) this.element.removeChild(this.element.firstChild);\r\n\r\n\t\tif(def.headerVertical){\r\n\t\t\tthis.element.classList.add(\"tabulator-col-vertical\");\r\n\r\n\t\t\tif(def.headerVertical === \"flip\"){\r\n\t\t\t\tthis.element.classList.add(\"tabulator-col-vertical-flip\");\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.contentElement = this._buildColumnHeaderContent();\r\n\r\n\t\tthis.element.appendChild(this.contentElement);\r\n\r\n\t\tif(this.isGroup){\r\n\t\t\tthis._buildGroupHeader();\r\n\t\t}else{\r\n\t\t\tthis._buildColumnHeader();\r\n\t\t}\r\n\r\n\t\tthis.dispatch(\"column-init\", this);\r\n\t}\r\n\r\n\t//build header element for header\r\n\t_buildColumnHeader(){\r\n\t\tvar def = this.definition;\r\n\r\n\t\tthis.dispatch(\"column-layout\", this);\r\n\r\n\t\t//set column visibility\r\n\t\tif(typeof def.visible != \"undefined\"){\r\n\t\t\tif(def.visible){\r\n\t\t\t\tthis.show(true);\r\n\t\t\t}else{\r\n\t\t\t\tthis.hide(true);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//assign additional css classes to column header\r\n\t\tif(def.cssClass){\r\n\t\t\tvar classNames = def.cssClass.split(\" \");\r\n\t\t\tclassNames.forEach((className) => {\r\n\t\t\t\tthis.element.classList.add(className);\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif(def.field){\r\n\t\t\tthis.element.setAttribute(\"tabulator-field\", def.field);\r\n\t\t}\r\n\r\n\t\t//set min width if present\r\n\t\tthis.setMinWidth(parseInt(def.minWidth));\r\n\r\n\t\tif (def.maxInitialWidth) {\r\n\t\t\tthis.maxInitialWidth = parseInt(def.maxInitialWidth);\r\n\t\t}\r\n\t\t\r\n\t\tif(def.maxWidth){\r\n\t\t\tthis.setMaxWidth(parseInt(def.maxWidth));\r\n\t\t}\r\n\r\n\t\tthis.reinitializeWidth();\r\n\r\n\t\t//set horizontal text alignment\r\n\t\tthis.hozAlign = this.definition.hozAlign;\r\n\t\tthis.vertAlign = this.definition.vertAlign;\r\n\r\n\t\tthis.titleElement.style.textAlign = this.definition.headerHozAlign;\r\n\t}\r\n\r\n\t_buildColumnHeaderContent(){\r\n\t\tvar contentElement = document.createElement(\"div\");\r\n\t\tcontentElement.classList.add(\"tabulator-col-content\");\r\n\r\n\t\tthis.titleHolderElement = document.createElement(\"div\");\r\n\t\tthis.titleHolderElement.classList.add(\"tabulator-col-title-holder\");\r\n\r\n\t\tcontentElement.appendChild(this.titleHolderElement);\r\n\r\n\t\tthis.titleElement = this._buildColumnHeaderTitle();\r\n\r\n\t\tthis.titleHolderElement.appendChild(this.titleElement);\r\n\r\n\t\treturn contentElement;\r\n\t}\r\n\r\n\t//build title element of column\r\n\t_buildColumnHeaderTitle(){\r\n\t\tvar def = this.definition;\r\n\r\n\t\tvar titleHolderElement = document.createElement(\"div\");\r\n\t\ttitleHolderElement.classList.add(\"tabulator-col-title\");\r\n\r\n\t\tif(def.editableTitle){\r\n\t\t\tvar titleElement = document.createElement(\"input\");\r\n\t\t\ttitleElement.classList.add(\"tabulator-title-editor\");\r\n\r\n\t\t\ttitleElement.addEventListener(\"click\", (e) => {\r\n\t\t\t\te.stopPropagation();\r\n\t\t\t\ttitleElement.focus();\r\n\t\t\t});\r\n\r\n\t\t\ttitleElement.addEventListener(\"change\", () => {\r\n\t\t\t\tdef.title = titleElement.value;\r\n\t\t\t\tthis.dispatchExternal(\"columnTitleChanged\", this.getComponent());\r\n\t\t\t});\r\n\r\n\t\t\ttitleHolderElement.appendChild(titleElement);\r\n\r\n\t\t\tif(def.field){\r\n\t\t\t\tthis.langBind(\"columns|\" + def.field, (text) => {\r\n\t\t\t\t\ttitleElement.value = text || (def.title || \" \");\r\n\t\t\t\t});\r\n\t\t\t}else{\r\n\t\t\t\ttitleElement.value = def.title || \" \";\r\n\t\t\t}\r\n\r\n\t\t}else{\r\n\t\t\tif(def.field){\r\n\t\t\t\tthis.langBind(\"columns|\" + def.field, (text) => {\r\n\t\t\t\t\tthis._formatColumnHeaderTitle(titleHolderElement, text || (def.title || \" \"));\r\n\t\t\t\t});\r\n\t\t\t}else{\r\n\t\t\t\tthis._formatColumnHeaderTitle(titleHolderElement, def.title || \" \");\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn titleHolderElement;\r\n\t}\r\n\r\n\t_formatColumnHeaderTitle(el, title){\r\n\t\tvar contents = this.chain(\"column-format\", [this, title, el], null, () => {\r\n\t\t\treturn title;\r\n\t\t});\r\n\r\n\t\tswitch(typeof contents){\r\n\t\t\tcase \"object\":\r\n\t\t\t\tif(contents instanceof Node){\r\n\t\t\t\t\tel.appendChild(contents);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tel.innerHTML = \"\";\r\n\t\t\t\t\tconsole.warn(\"Format Error - Title formatter has returned a type of object, the only valid formatter object return is an instance of Node, the formatter returned:\", contents);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"undefined\":\r\n\t\t\t\tel.innerHTML = \"\";\r\n\t\t\t\tbreak;\r\n\t\t\tdefault:\r\n\t\t\t\tel.innerHTML = contents;\r\n\t\t}\r\n\t}\r\n\r\n\t//build header element for column group\r\n\t_buildGroupHeader(){\r\n\t\tthis.element.classList.add(\"tabulator-col-group\");\r\n\t\tthis.element.setAttribute(\"role\", \"columngroup\");\r\n\t\tthis.element.setAttribute(\"aria-title\", this.definition.title);\r\n\r\n\t\t//asign additional css classes to column header\r\n\t\tif(this.definition.cssClass){\r\n\t\t\tvar classNames = this.definition.cssClass.split(\" \");\r\n\t\t\tclassNames.forEach((className) => {\r\n\t\t\t\tthis.element.classList.add(className);\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tthis.titleElement.style.textAlign = this.definition.headerHozAlign;\r\n\r\n\t\tthis.element.appendChild(this.groupElement);\r\n\t}\r\n\r\n\t//flat field lookup\r\n\t_getFlatData(data){\r\n\t\treturn data[this.field];\r\n\t}\r\n\r\n\t//nested field lookup\r\n\t_getNestedData(data){\r\n\t\tvar dataObj = data,\r\n\t\tstructure = this.fieldStructure,\r\n\t\tlength = structure.length,\r\n\t\toutput;\r\n\r\n\t\tfor(let i = 0; i < length; i++){\r\n\r\n\t\t\tdataObj = dataObj[structure[i]];\r\n\r\n\t\t\toutput = dataObj;\r\n\r\n\t\t\tif(!dataObj){\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\t//flat field set\r\n\t_setFlatData(data, value){\r\n\t\tif(this.field){\r\n\t\t\tdata[this.field] = value;\r\n\t\t}\r\n\t}\r\n\r\n\t//nested field set\r\n\t_setNestedData(data, value){\r\n\t\tvar dataObj = data,\r\n\t\tstructure = this.fieldStructure,\r\n\t\tlength = structure.length;\r\n\r\n\t\tfor(let i = 0; i < length; i++){\r\n\r\n\t\t\tif(i == length -1){\r\n\t\t\t\tdataObj[structure[i]] = value;\r\n\t\t\t}else{\r\n\t\t\t\tif(!dataObj[structure[i]]){\r\n\t\t\t\t\tif(typeof value !== \"undefined\"){\r\n\t\t\t\t\t\tdataObj[structure[i]] = {};\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tdataObj = dataObj[structure[i]];\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//attach column to this group\r\n\tattachColumn(column){\r\n\t\tif(this.groupElement){\r\n\t\t\tthis.columns.push(column);\r\n\t\t\tthis.groupElement.appendChild(column.getElement());\r\n\r\n\t\t\tcolumn.columnRendered();\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Column Warning - Column being attached to another column instead of column group\");\r\n\t\t}\r\n\t}\r\n\r\n\t//vertically align header in column\r\n\tverticalAlign(alignment, height){\r\n\r\n\t\t//calculate height of column header and group holder element\r\n\t\tvar parentHeight = this.parent.isGroup ? this.parent.getGroupElement().clientHeight : (height || this.parent.getHeadersElement().clientHeight);\r\n\t\t// var parentHeight = this.parent.isGroup ? this.parent.getGroupElement().clientHeight : this.parent.getHeadersElement().clientHeight;\r\n\r\n\t\tthis.element.style.height = parentHeight + \"px\";\r\n\r\n\t\tthis.dispatch(\"column-height\", this, this.element.style.height);\r\n\r\n\t\tif(this.isGroup){\r\n\t\t\tthis.groupElement.style.minHeight = (parentHeight - this.contentElement.offsetHeight) + \"px\";\r\n\t\t}\r\n\r\n\t\t//vertically align cell contents\r\n\t\t// if(!this.isGroup && alignment !== \"top\"){\r\n\t\t// \tif(alignment === \"bottom\"){\r\n\t\t// \t\tthis.element.style.paddingTop = (this.element.clientHeight - this.contentElement.offsetHeight) + \"px\";\r\n\t\t// \t}else{\r\n\t\t// \t\tthis.element.style.paddingTop = ((this.element.clientHeight - this.contentElement.offsetHeight) / 2) + \"px\";\r\n\t\t// \t}\r\n\t\t// }\r\n\r\n\t\tthis.columns.forEach(function(column){\r\n\t\t\tcolumn.verticalAlign(alignment);\r\n\t\t});\r\n\t}\r\n\r\n\t//clear vertical alignment\r\n\tclearVerticalAlign(){\r\n\t\tthis.element.style.paddingTop = \"\";\r\n\t\tthis.element.style.height = \"\";\r\n\t\tthis.element.style.minHeight = \"\";\r\n\t\tthis.groupElement.style.minHeight = \"\";\r\n\r\n\t\tthis.columns.forEach(function(column){\r\n\t\t\tcolumn.clearVerticalAlign();\r\n\t\t});\r\n\r\n\t\tthis.dispatch(\"column-height\", this, \"\");\r\n\t}\r\n\r\n\t//// Retrieve Column Information ////\r\n\t//return column header element\r\n\tgetElement(){\r\n\t\treturn this.element;\r\n\t}\r\n\r\n\t//return column group element\r\n\tgetGroupElement(){\r\n\t\treturn this.groupElement;\r\n\t}\r\n\r\n\t//return field name\r\n\tgetField(){\r\n\t\treturn this.field;\r\n\t}\r\n\r\n\tgetTitleDownload() {\r\n\t\treturn this.titleDownload;\r\n\t}\r\n\r\n\t//return the first column in a group\r\n\tgetFirstColumn(){\r\n\t\tif(!this.isGroup){\r\n\t\t\treturn this;\r\n\t\t}else{\r\n\t\t\tif(this.columns.length){\r\n\t\t\t\treturn this.columns[0].getFirstColumn();\r\n\t\t\t}else{\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//return the last column in a group\r\n\tgetLastColumn(){\r\n\t\tif(!this.isGroup){\r\n\t\t\treturn this;\r\n\t\t}else{\r\n\t\t\tif(this.columns.length){\r\n\t\t\t\treturn this.columns[this.columns.length -1].getLastColumn();\r\n\t\t\t}else{\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//return all columns in a group\r\n\tgetColumns(){\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//retrieve the top column in a group of columns\r\n\tgetTopColumn(){\r\n\t\tif(this.parent.isGroup){\r\n\t\t\treturn this.parent.getTopColumn();\r\n\t\t}else{\r\n\t\t\treturn this;\r\n\t\t}\r\n\t}\r\n\r\n\t//return column definition object\r\n\tgetDefinition(updateBranches){\r\n\t\tvar colDefs = [];\r\n\r\n\t\tif(this.isGroup && updateBranches){\r\n\t\t\tthis.columns.forEach(function(column){\r\n\t\t\t\tcolDefs.push(column.getDefinition(true));\r\n\t\t\t});\r\n\r\n\t\t\tthis.definition.columns = colDefs;\r\n\t\t}\r\n\r\n\t\treturn this.definition;\r\n\t}\r\n\r\n\t//////////////////// Actions ////////////////////\r\n\tcheckColumnVisibility(){\r\n\t\tvar visible = false;\r\n\r\n\t\tthis.columns.forEach(function(column){\r\n\t\t\tif(column.visible){\r\n\t\t\t\tvisible = true;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tif(visible){\r\n\t\t\tthis.show();\r\n\t\t\tthis.dispatchExternal(\"columnVisibilityChanged\", this.getComponent(), false);\r\n\t\t}else{\r\n\t\t\tthis.hide();\r\n\t\t}\r\n\t}\r\n\r\n\t//show column\r\n\tshow(silent, responsiveToggle){\r\n\t\tif(!this.visible){\r\n\t\t\tthis.visible = true;\r\n\r\n\t\t\tthis.element.style.display = \"\";\r\n\r\n\t\t\tif(this.parent.isGroup){\r\n\t\t\t\tthis.parent.checkColumnVisibility();\r\n\t\t\t}\r\n\r\n\t\t\tthis.cells.forEach(function(cell){\r\n\t\t\t\tcell.show();\r\n\t\t\t});\r\n\r\n\t\t\tif(!this.isGroup && this.width === null){\r\n\t\t\t\tthis.reinitializeWidth();\r\n\t\t\t}\r\n\r\n\t\t\tthis.table.columnManager.verticalAlignHeaders();\r\n\r\n\t\t\tthis.dispatch(\"column-show\", this, responsiveToggle);\r\n\r\n\t\t\tif(!silent){\r\n\t\t\t\tthis.dispatchExternal(\"columnVisibilityChanged\", this.getComponent(), true);\r\n\t\t\t}\r\n\r\n\t\t\tif(this.parent.isGroup){\r\n\t\t\t\tthis.parent.matchChildWidths();\r\n\t\t\t}\r\n\r\n\t\t\tif(!this.silent){\r\n\t\t\t\tthis.table.columnManager.rerenderColumns();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//hide column\r\n\thide(silent, responsiveToggle){\r\n\t\tif(this.visible){\r\n\t\t\tthis.visible = false;\r\n\r\n\t\t\tthis.element.style.display = \"none\";\r\n\r\n\t\t\tthis.table.columnManager.verticalAlignHeaders();\r\n\r\n\t\t\tif(this.parent.isGroup){\r\n\t\t\t\tthis.parent.checkColumnVisibility();\r\n\t\t\t}\r\n\r\n\t\t\tthis.cells.forEach(function(cell){\r\n\t\t\t\tcell.hide();\r\n\t\t\t});\r\n\r\n\t\t\tthis.dispatch(\"column-hide\", this, responsiveToggle);\r\n\r\n\t\t\tif(!silent){\r\n\t\t\t\tthis.dispatchExternal(\"columnVisibilityChanged\", this.getComponent(), false);\r\n\t\t\t}\r\n\r\n\t\t\tif(this.parent.isGroup){\r\n\t\t\t\tthis.parent.matchChildWidths();\r\n\t\t\t}\r\n\r\n\t\t\tif(!this.silent){\r\n\t\t\t\tthis.table.columnManager.rerenderColumns();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tmatchChildWidths(){\r\n\t\tvar childWidth = 0;\r\n\r\n\t\tif(this.contentElement && this.columns.length){\r\n\t\t\tthis.columns.forEach(function(column){\r\n\t\t\t\tif(column.visible){\r\n\t\t\t\t\tchildWidth += column.getWidth();\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tthis.contentElement.style.maxWidth = (childWidth - 1) + \"px\";\r\n\r\n\t\t\tif(this.parent.isGroup){\r\n\t\t\t\tthis.parent.matchChildWidths();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tremoveChild(child){\r\n\t\tvar index = this.columns.indexOf(child);\r\n\r\n\t\tif(index > -1){\r\n\t\t\tthis.columns.splice(index, 1);\r\n\t\t}\r\n\r\n\t\tif(!this.columns.length){\r\n\t\t\tthis.delete();\r\n\t\t}\r\n\t}\r\n\r\n\tsetWidth(width){\r\n\t\tthis.widthFixed = true;\r\n\t\tthis.setWidthActual(width);\r\n\t}\r\n\r\n\tsetWidthActual(width){\r\n\t\tif(isNaN(width)){\r\n\t\t\twidth = Math.floor((this.table.element.clientWidth/100) * parseInt(width));\r\n\t\t}\r\n\r\n\t\twidth = Math.max(this.minWidth, width);\r\n\r\n\t\tif(this.maxWidth){\r\n\t\t\twidth = Math.min(this.maxWidth, width);\r\n\t\t}\r\n\r\n\t\tthis.width = width;\r\n\t\tthis.widthStyled = width ? width + \"px\" : \"\";\r\n\r\n\t\tthis.element.style.width = this.widthStyled;\r\n\r\n\t\tif(!this.isGroup){\r\n\t\t\tthis.cells.forEach(function(cell){\r\n\t\t\t\tcell.setWidth();\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif(this.parent.isGroup){\r\n\t\t\tthis.parent.matchChildWidths();\r\n\t\t}\r\n\r\n\t\tthis.dispatch(\"column-width\", this);\r\n\t}\r\n\r\n\tcheckCellHeights(){\r\n\t\tvar rows = [];\r\n\r\n\t\tthis.cells.forEach(function(cell){\r\n\t\t\tif(cell.row.heightInitialized){\r\n\t\t\t\tif(cell.row.getElement().offsetParent !== null){\r\n\t\t\t\t\trows.push(cell.row);\r\n\t\t\t\t\tcell.row.clearCellHeight();\r\n\t\t\t\t}else{\r\n\t\t\t\t\tcell.row.heightInitialized = false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\trows.forEach(function(row){\r\n\t\t\trow.calcHeight();\r\n\t\t});\r\n\r\n\t\trows.forEach(function(row){\r\n\t\t\trow.setCellHeight();\r\n\t\t});\r\n\t}\r\n\r\n\tgetWidth(){\r\n\t\tvar width = 0;\r\n\r\n\t\tif(this.isGroup){\r\n\t\t\tthis.columns.forEach(function(column){\r\n\t\t\t\tif(column.visible){\r\n\t\t\t\t\twidth += column.getWidth();\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\twidth = this.width;\r\n\t\t}\r\n\r\n\t\treturn width;\r\n\t}\r\n\r\n\tgetHeight(){\r\n\t\treturn Math.ceil(this.element.getBoundingClientRect().height);\r\n\t}\r\n\r\n\tsetMinWidth(minWidth){\r\n\t\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\tif(this.isGroup){\r\n\t\t\t\tthis.columns.forEach(function(column){\r\n\t\t\t\t\tcolumn.delete();\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\tthis.dispatch(\"column-delete\", this);\r\n\r\n\t\t\tvar cellCount = this.cells.length;\r\n\r\n\t\t\tfor(let i = 0; i < cellCount; i++){\r\n\t\t\t\tthis.cells[0].delete();\r\n\t\t\t}\r\n\r\n\t\t\tif(this.element.parentNode){\r\n\t\t\t\tthis.element.parentNode.removeChild(this.element);\r\n\t\t\t}\r\n\r\n\t\t\tthis.element = false;\r\n\t\t\tthis.contentElement = false;\r\n\t\t\tthis.titleElement = false;\r\n\t\t\tthis.groupElement = false;\r\n\r\n\t\t\tif(this.parent.isGroup){\r\n\t\t\t\tthis.parent.removeChild(this);\r\n\t\t\t}\r\n\r\n\t\t\tthis.table.columnManager.deregisterColumn(this);\r\n\r\n\t\t\tthis.table.columnManager.rerenderColumns(true);\r\n\r\n\t\t\tresolve();\r\n\t\t});\r\n\t}\r\n\r\n\tcolumnRendered(){\r\n\t\tif(this.titleFormatterRendered){\r\n\t\t\tthis.titleFormatterRendered();\r\n\t\t}\r\n\r\n\t\tthis.dispatch(\"column-rendered\", this);\r\n\t}\r\n\r\n\t//////////////// Cell Management /////////////////\r\n\t//generate cell for this column\r\n\tgenerateCell(row){\r\n\t\tvar cell = new Cell(this, row);\r\n\r\n\t\tthis.cells.push(cell);\r\n\r\n\t\treturn cell;\r\n\t}\r\n\r\n\tnextColumn(){\r\n\t\tvar index = this.table.columnManager.findColumnIndex(this);\r\n\t\treturn index > -1 ? this._nextVisibleColumn(index + 1) : false;\r\n\t}\r\n\r\n\t_nextVisibleColumn(index){\r\n\t\tvar column = this.table.columnManager.getColumnByIndex(index);\r\n\t\treturn !column || column.visible ? column : this._nextVisibleColumn(index + 1);\r\n\t}\r\n\r\n\tprevColumn(){\r\n\t\tvar index = this.table.columnManager.findColumnIndex(this);\r\n\t\treturn index > -1 ? this._prevVisibleColumn(index - 1) : false;\r\n\t}\r\n\r\n\t_prevVisibleColumn(index){\r\n\t\tvar column = this.table.columnManager.getColumnByIndex(index);\r\n\t\treturn !column || column.visible ? column : this._prevVisibleColumn(index - 1);\r\n\t}\r\n\r\n\treinitializeWidth(force){\r\n\t\tthis.widthFixed = false;\r\n\r\n\t\t//set width if present\r\n\t\tif(typeof this.definition.width !== \"undefined\" && !force){\r\n\t\t\t// maxInitialWidth ignored here as width specified\r\n\t\t\tthis.setWidth(this.definition.width);\r\n\t\t}\r\n\r\n\t\tthis.dispatch(\"column-width-fit-before\", this);\r\n\r\n\t\tthis.fitToData(force);\r\n\r\n\t\tthis.dispatch(\"column-width-fit-after\", this);\r\n\t}\r\n\r\n\t//set column width to maximum cell width for non group columns\r\n\tfitToData(force){\r\n\t\tif(this.isGroup){\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif(!this.widthFixed){\r\n\t\t\tthis.element.style.width = \"\";\r\n\r\n\t\t\tthis.cells.forEach((cell) => {\r\n\t\t\t\tcell.clearWidth();\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tvar maxWidth = this.element.offsetWidth;\r\n\r\n\t\tif(!this.width || !this.widthFixed){\r\n\t\t\tthis.cells.forEach((cell) => {\r\n\t\t\t\tvar width = cell.getWidth();\r\n\r\n\t\t\t\tif(width > maxWidth){\r\n\t\t\t\t\tmaxWidth = width;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tif(maxWidth){\r\n\t\t\t\tvar setTo = maxWidth + 1;\r\n\t\t\t\tif (this.maxInitialWidth && !force) {\r\n\t\t\t\t\tsetTo = Math.min(setTo, this.maxInitialWidth);\r\n\t\t\t\t}\r\n\t\t\t\tthis.setWidthActual(setTo);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tupdateDefinition(updates){\r\n\t\tvar definition;\r\n\r\n\t\tif(!this.isGroup){\r\n\t\t\tif(!this.parent.isGroup){\r\n\t\t\t\tdefinition = Object.assign({}, this.getDefinition());\r\n\t\t\t\tdefinition = Object.assign(definition, updates);\r\n\r\n\t\t\t\treturn this.table.columnManager.addColumn(definition, false, this)\r\n\t\t\t\t\t.then((column) => {\r\n\r\n\t\t\t\t\t\tif(definition.field == this.field){\r\n\t\t\t\t\t\t\tthis.field = false; //clear field name to prevent deletion of duplicate column from arrays\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\treturn this.delete()\r\n\t\t\t\t\t\t\t.then(() => {\r\n\t\t\t\t\t\t\t\treturn column.getComponent();\r\n\t\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t});\r\n\t\t\t}else{\r\n\t\t\t\tconsole.error(\"Column Update Error - The updateDefinition function is only available on ungrouped columns\");\r\n\t\t\t\treturn Promise.reject(\"Column Update Error - The updateDefinition function is only available on columns, not column groups\");\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tconsole.error(\"Column Update Error - The updateDefinition function is only available on ungrouped columns\");\r\n\t\t\treturn Promise.reject(\"Column Update Error - The updateDefinition function is only available on columns, not column groups\");\r\n\t\t}\r\n\t}\r\n\r\n\tdeleteCell(cell){\r\n\t\tvar index = this.cells.indexOf(cell);\r\n\r\n\t\tif(index > -1){\r\n\t\t\tthis.cells.splice(index, 1);\r\n\t\t}\r\n\t}\r\n\r\n\t//////////////// Object Generation /////////////////\r\n\tgetComponent(){\r\n\t\tif(!this.component){\r\n\t\t\tthis.component = new ColumnComponent(this);\r\n\t\t}\r\n\r\n\t\treturn this.component;\r\n\t}\r\n}\r\n\r\nColumn.defaultOptionList = defaultOptions;\r\n\r\nexport default Column;\r\n","export default class Helpers{\r\n\r\n\tstatic elVisible(el){\r\n\t\treturn !(el.offsetWidth <= 0 && el.offsetHeight <= 0);\r\n\t}\r\n\r\n\tstatic elOffset(el){\r\n\t\tvar box = el.getBoundingClientRect();\r\n\r\n\t\treturn {\r\n\t\t\ttop: box.top + window.pageYOffset - document.documentElement.clientTop,\r\n\t\t\tleft: box.left + window.pageXOffset - document.documentElement.clientLeft\r\n\t\t};\r\n\t}\r\n\r\n\tstatic deepClone(obj, clone, list = []){\r\n\t\tvar objectProto = {}.__proto__,\r\n\t\tarrayProto = [].__proto__;\r\n\r\n\t\tif (!clone){\r\n\t\t\tclone = Object.assign(Array.isArray(obj) ? [] : {}, obj);\r\n\t\t}\r\n\r\n\t\tfor(var i in obj) {\r\n\t\t\tlet subject = obj[i],\r\n\t\t\tmatch, copy;\r\n\r\n\t\t\tif(subject != null && typeof subject === \"object\" && (subject.__proto__ === objectProto || subject.__proto__ === arrayProto)){\r\n\t\t\t\tmatch = list.findIndex((item) => {\r\n\t\t\t\t\treturn item.subject === subject;\r\n\t\t\t\t});\r\n\r\n\t\t\t\tif(match > -1){\r\n\t\t\t\t\tclone[i] = list[match].copy;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tcopy = Object.assign(Array.isArray(subject) ? [] : {}, subject);\r\n\r\n\t\t\t\t\tlist.unshift({subject, copy});\r\n\r\n\t\t\t\t\tclone[i] = this.deepClone(subject, copy, list);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn clone;\r\n\t}\r\n}","export default class OptionsList {\r\n\tconstructor(table, msgType, defaults = {}){\r\n\t\tthis.table = table;\r\n\t\tthis.msgType = msgType;\r\n\t\tthis.registeredDefaults = Object.assign({}, defaults);\r\n\t}\r\n\r\n\tregister(option, value){\r\n\t\tthis.registeredDefaults[option] = value;\r\n\t}\r\n\r\n\tgenerate(defaultOptions, userOptions = {}){\r\n\t\tvar output = Object.assign({}, this.registeredDefaults);\r\n\r\n\t\tObject.assign(output, defaultOptions);\r\n\r\n\t\tif(userOptions.debugInvalidOptions !== false || this.table.options.debugInvalidOptions){\r\n\t\t\tfor (let key in userOptions){\r\n\t\t\t\tif(!output.hasOwnProperty(key)){\r\n\t\t\t\t\tconsole.warn(\"Invalid \" + this.msgType + \" option:\", key);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfor (let key in output){\r\n\t\t\tif(key in userOptions){\r\n\t\t\t\toutput[key] = userOptions[key];\r\n\t\t\t}else{\r\n\t\t\t\tif(Array.isArray(output[key])){\r\n\t\t\t\t\toutput[key] = Object.assign([], output[key]);\r\n\t\t\t\t}else if(typeof output[key] === \"object\" && output[key] !== null){\r\n\t\t\t\t\toutput[key] = Object.assign({}, output[key]);\r\n\t\t\t\t}else if (typeof output[key] === \"undefined\"){\r\n\t\t\t\t\tdelete output[key];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn output;\r\n\t}\r\n}","import CoreFeature from '../CoreFeature.js';\r\nimport Helpers from '../tools/Helpers.js';\r\n\r\nexport default class Renderer extends CoreFeature{\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.elementVertical = table.rowManager.element;\r\n\t\tthis.elementHorizontal = table.columnManager.element;\r\n\t\tthis.tableElement = table.rowManager.tableElement;\r\n\r\n\t\tthis.verticalFillMode = \"fit\"; // used by row manager to determine how to size the render area (\"fit\" - fits container to the contents, \"fill\" - fills the container without resizing it)\r\n\t}\r\n\r\n\r\n\t///////////////////////////////////\r\n\t/////// Internal Bindings /////////\r\n\t///////////////////////////////////\r\n\r\n\tinitialize(){\r\n\t\t//initialize core functionality\r\n\t}\r\n\r\n\tclearRows(){\r\n\t\t//clear down existing rows layout\r\n\t}\r\n\r\n\tclearColumns(){\r\n\t\t//clear down existing columns layout\r\n\t}\r\n\r\n\r\n\treinitializeColumnWidths(columns){\r\n\t\t//resize columns to fit data\r\n\t}\r\n\r\n\r\n\trenderRows(){\r\n\t\t//render rows from a clean slate\r\n\t}\r\n\r\n\trenderColumns(){\r\n\t\t//render columns from a clean slate\r\n\t}\r\n\r\n\trerenderRows(callback){\r\n\t\t// rerender rows and keep position\r\n\t\tif(callback){\r\n\t\t\tcallback();\r\n\t\t}\r\n\t}\r\n\r\n\trerenderColumns(update, blockRedraw){\r\n\t\t//rerender columns\r\n\t}\r\n\r\n\trenderRowCells(row){\r\n\t\t//render the cells in a row\r\n\t}\r\n\r\n\trerenderRowCells(row, force){\r\n\t\t//rerender the cells in a row\r\n\t}\r\n\r\n\tscrollColumns(left, dir){\r\n\t\t//handle horizontal scrolling\r\n\t}\r\n\r\n\tscrollRows(top, dir){\r\n\t\t//handle vertical scrolling\r\n\t}\r\n\r\n\tresize(){\r\n\t\t//container has resized, carry out any needed recalculations (DO NOT RERENDER IN THIS FUNCTION)\r\n\t}\r\n\r\n\tscrollToRow(row){\r\n\t\t//scroll to a specific row\r\n\t}\r\n\r\n\tscrollToRowNearestTop(row){\r\n\t\t//determine weather the row is nearest the top or bottom of the table, return true for top or false for bottom\r\n\t}\r\n\r\n\tvisibleRows(includingBuffer){\r\n\t\t//return the visible rows\r\n\t\treturn [];\r\n\t}\r\n\r\n\t///////////////////////////////////\r\n\t//////// Helper Functions /////////\r\n\t///////////////////////////////////\r\n\r\n\trows(){\r\n\t\treturn this.table.rowManager.getDisplayRows();\r\n\t}\r\n\r\n\tstyleRow(row, index){\r\n\t\tvar rowEl = row.getElement();\r\n\r\n\t\tif(index % 2){\r\n\t\t\trowEl.classList.add(\"tabulator-row-even\");\r\n\t\t\trowEl.classList.remove(\"tabulator-row-odd\");\r\n\t\t}else{\r\n\t\t\trowEl.classList.add(\"tabulator-row-odd\");\r\n\t\t\trowEl.classList.remove(\"tabulator-row-even\");\r\n\t\t}\r\n\t}\r\n\r\n\t///////////////////////////////////\r\n\t/////// External Triggers /////////\r\n\t/////// (DO NOT OVERRIDE) /////////\r\n\t///////////////////////////////////\r\n\r\n\tclear(){\r\n\t\t//clear down existing layout\r\n\t\tthis.clearRows();\r\n\t\tthis.clearColumns();\r\n\t}\r\n\r\n\trender(){\r\n\t\t//render from a clean slate\r\n\t\tthis.renderRows();\r\n\t\tthis.renderColumns();\r\n\t}\r\n\r\n\trerender(callback){\r\n\t\t// rerender and keep position\r\n\t\tthis.rerenderRows();\r\n\t\tthis.rerenderColumns();\r\n\t}\r\n\r\n\tscrollToRowPosition(row, position, ifVisible){\r\n\t\tvar rowIndex = this.rows().indexOf(row),\r\n\t\trowEl = row.getElement(),\r\n\t\toffset = 0;\r\n\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tif(rowIndex > -1){\r\n\r\n\t\t\t\tif(typeof ifVisible === \"undefined\"){\r\n\t\t\t\t\tifVisible = this.table.options.scrollToRowIfVisible;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//check row visibility\r\n\t\t\t\tif(!ifVisible){\r\n\t\t\t\t\tif(Helpers.elVisible(rowEl)){\r\n\t\t\t\t\t\toffset = Helpers.elOffset(rowEl).top - Helpers.elOffset(this.elementVertical).top;\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\tif(offset > 0 && offset < this.elementVertical.clientHeight - rowEl.offsetHeight){\r\n\t\t\t\t\t\t\tresolve();\r\n\t\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(typeof position === \"undefined\"){\r\n\t\t\t\t\tposition = this.table.options.scrollToRowPosition;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(position === \"nearest\"){\r\n\t\t\t\t\tposition = this.scrollToRowNearestTop(row) ? \"top\" : \"bottom\";\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//scroll to row\r\n\t\t\t\tthis.scrollToRow(row);\r\n\r\n\t\t\t\t//align to correct position\r\n\t\t\t\tswitch(position){\r\n\t\t\t\t\tcase \"middle\":\r\n\t\t\t\t\tcase \"center\":\r\n\r\n\t\t\t\t\t\tif(this.elementVertical.scrollHeight - this.elementVertical.scrollTop == this.elementVertical.clientHeight){\r\n\t\t\t\t\t\t\tthis.elementVertical.scrollTop = this.elementVertical.scrollTop + (rowEl.offsetTop - this.elementVertical.scrollTop) - ((this.elementVertical.scrollHeight - rowEl.offsetTop) / 2);\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\tthis.elementVertical.scrollTop = this.elementVertical.scrollTop - (this.elementVertical.clientHeight / 2);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase \"bottom\":\r\n\r\n\t\t\t\t\t\tif(this.elementVertical.scrollHeight - this.elementVertical.scrollTop == this.elementVertical.clientHeight){\r\n\t\t\t\t\t\t\tthis.elementVertical.scrollTop = this.elementVertical.scrollTop - (this.elementVertical.scrollHeight - rowEl.offsetTop) + rowEl.offsetHeight;\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\tthis.elementVertical.scrollTop = this.elementVertical.scrollTop - this.elementVertical.clientHeight + rowEl.offsetHeight;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase \"top\":\r\n\t\t\t\t\t\tthis.elementVertical.scrollTop = rowEl.offsetTop;\t\t\t\t\t\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tresolve();\r\n\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Scroll Error - Row not visible\");\r\n\t\t\t\treject(\"Scroll Error - Row not visible\");\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n}","import Renderer from '../Renderer.js';\r\n\r\nexport default class BasicHorizontal extends Renderer{\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\t}\r\n\r\n\trenderRowCells(row){\r\n\t\trow.cells.forEach((cell) => {\r\n\t\t\trow.element.appendChild(cell.getElement());\r\n\t\t\tcell.cellRendered();\r\n\t\t});\r\n\t}\r\n\r\n\treinitializeColumnWidths(columns){\r\n\t\tcolumns.forEach(function(column){\r\n\t\t\tcolumn.reinitializeWidth();\r\n\t\t});\r\n\t}\r\n}","import Renderer from '../Renderer.js';\r\n\r\nexport default class VirtualDomHorizontal extends Renderer{\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\t\t\r\n\t\tthis.leftCol = 0;\r\n\t\tthis.rightCol = 0;\r\n\t\tthis.scrollLeft = 0;\r\n\t\t\r\n\t\tthis.vDomScrollPosLeft = 0;\r\n\t\tthis.vDomScrollPosRight = 0;\r\n\t\t\r\n\t\tthis.vDomPadLeft = 0;\r\n\t\tthis.vDomPadRight = 0;\r\n\t\t\r\n\t\tthis.fitDataColAvg = 0;\r\n\t\t\r\n\t\tthis.windowBuffer = 200; //pixel margin to make column visible before it is shown on screen\r\n\t\t\r\n\t\tthis.visibleRows = null;\r\n\r\n\t\tthis.initialized = false;\r\n\t\tthis.isFitData = false;\r\n\t\t\r\n\t\tthis.columns = [];\r\n\t}\r\n\t\r\n\tinitialize(){\r\n\t\tthis.compatibilityCheck();\r\n\t\tthis.layoutCheck();\r\n\t\tthis.vertScrollListen();\r\n\t}\r\n\t\r\n\tcompatibilityCheck(){\r\n\t\tvar columns = this.options(\"columns\"),\r\n\t\tfrozen = false,\r\n\t\tok = true;\r\n\t\t\r\n\t\tif(this.options(\"layout\") == \"fitDataTable\"){\r\n\t\t\tconsole.warn(\"Horizontal Virtual DOM is not compatible with fitDataTable layout mode\");\r\n\t\t\tok = false;\r\n\t\t}\r\n\t\t\r\n\t\tif(this.options(\"responsiveLayout\")){\r\n\t\t\tconsole.warn(\"Horizontal Virtual DOM is not compatible with responsive columns\");\r\n\t\t\tok = false;\r\n\t\t}\r\n\t\t\r\n\t\tif(this.options(\"rtl\")){\r\n\t\t\tconsole.warn(\"Horizontal Virtual DOM is not currently compatible with RTL text direction\");\r\n\t\t\tok = false;\r\n\t\t}\r\n\t\t\r\n\t\tif(columns){\r\n\t\t\tfrozen = columns.find((col) => {\r\n\t\t\t\treturn col.frozen;\r\n\t\t\t});\r\n\t\t\t\r\n\t\t\tif(frozen){\r\n\t\t\t\tconsole.warn(\"Horizontal Virtual DOM is not compatible with frozen columns\");\r\n\t\t\t\tok = false;\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\t// if(!ok){\r\n\t\t// \toptions.virtualDomHoz = false;\r\n\t\t// }\r\n\t\t\r\n\t\treturn ok;\r\n\t}\r\n\t\r\n\tlayoutCheck(){\r\n\t\tthis.isFitData = this.options(\"layout\").startsWith('fitData');\r\n\t}\r\n\r\n\tvertScrollListen(){\r\n\t\tthis.subscribe(\"scroll-vertical\", this.clearVisRowCache.bind(this));\r\n\t\tthis.subscribe(\"data-refreshed\", this.clearVisRowCache.bind(this));\r\n\t}\r\n\r\n\tclearVisRowCache(){\r\n\t\tthis.visibleRows = null;\r\n\t}\r\n\t\r\n\t//////////////////////////////////////\r\n\t///////// Public Functions ///////////\r\n\t//////////////////////////////////////\r\n\t\r\n\trenderColumns(row, force){\r\n\t\tthis.dataChange();\r\n\t}\r\n\r\n\t\r\n\tscrollColumns(left, dir){\r\n\t\tif(this.scrollLeft != left){\r\n\t\t\tthis.scrollLeft = left;\r\n\t\t\t\r\n\t\t\tthis.scroll(left - (this.vDomScrollPosLeft + this.windowBuffer));\r\n\t\t}\r\n\t}\r\n\t\r\n\tcalcWindowBuffer(){\r\n\t\tvar buffer = this.elementVertical.clientWidth;\r\n\t\t\r\n\t\tthis.table.columnManager.columnsByIndex.forEach((column) => {\r\n\t\t\tif(column.visible){\r\n\t\t\t\tvar width = column.getWidth();\r\n\t\t\t\t\r\n\t\t\t\tif(width > buffer){\r\n\t\t\t\t\tbuffer = width;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\t\t\r\n\t\tthis.windowBuffer = buffer * 2;\r\n\t}\r\n\t\r\n\trerenderColumns(update, blockRedraw){\t\t\r\n\t\tvar old = {\r\n\t\t\tcols:this.columns,\r\n\t\t\tleftCol:this.leftCol,\r\n\t\t\trightCol:this.rightCol,\r\n\t\t},\r\n\t\tcolPos = 0;\r\n\t\t\r\n\t\t\r\n\t\tif(update && !this.initialized){\r\n\t\t\treturn;\r\n\t\t}\r\n\t\t\r\n\t\tthis.clear();\r\n\t\t\r\n\t\tthis.calcWindowBuffer();\r\n\t\t\r\n\t\tthis.scrollLeft = this.elementVertical.scrollLeft;\r\n\t\t\r\n\t\tthis.vDomScrollPosLeft = this.scrollLeft - this.windowBuffer;\r\n\t\tthis.vDomScrollPosRight = this.scrollLeft + this.elementVertical.clientWidth + this.windowBuffer;\r\n\t\t\r\n\t\tthis.table.columnManager.columnsByIndex.forEach((column) => {\r\n\t\t\tvar config = {};\r\n\t\t\t\r\n\t\t\tif(column.visible){\r\n\t\t\t\tvar width = column.getWidth();\r\n\t\t\t\t\r\n\t\t\t\tconfig.leftPos = colPos;\r\n\t\t\t\tconfig.rightPos = colPos + width;\r\n\t\t\t\t\r\n\t\t\t\tconfig.width = width;\r\n\t\t\t\t\r\n\t\t\t\tif (this.isFitData) {\r\n\t\t\t\t\tconfig.fitDataCheck = column.modules.vdomHoz ? column.modules.vdomHoz.fitDataCheck : true;\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\tif((colPos + width > this.vDomScrollPosLeft) && (colPos < this.vDomScrollPosRight)){\r\n\t\t\t\t\t//column is visible\r\n\t\t\t\t\t\r\n\t\t\t\t\tif(this.leftCol == -1){\r\n\t\t\t\t\t\tthis.leftCol = this.columns.length;\r\n\t\t\t\t\t\tthis.vDomPadLeft = colPos;\r\n\t\t\t\t\t}\r\n\t\t\t\t\t\r\n\t\t\t\t\tthis.rightCol = this.columns.length;\r\n\t\t\t\t}else{\r\n\t\t\t\t\t// column is hidden\r\n\t\t\t\t\tif(this.leftCol !== -1){\r\n\t\t\t\t\t\tthis.vDomPadRight += width;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\tthis.columns.push(column);\r\n\t\t\t\t\r\n\t\t\t\tcolumn.modules.vdomHoz = config;\r\n\t\t\t\t\r\n\t\t\t\tcolPos += width;\r\n\t\t\t}\r\n\t\t});\r\n\t\t\r\n\t\tthis.tableElement.style.paddingLeft = this.vDomPadLeft + \"px\";\r\n\t\tthis.tableElement.style.paddingRight = this.vDomPadRight + \"px\";\r\n\t\t\r\n\t\tthis.initialized = true;\r\n\t\t\r\n\t\tif(!blockRedraw){\r\n\t\t\tif(!update || this.reinitChanged(old)){\r\n\t\t\t\tthis.reinitializeRows();\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\tthis.elementVertical.scrollLeft = this.scrollLeft;\r\n\t}\r\n\t\r\n\trenderRowCells(row){\r\n\t\tif(this.initialized){\r\n\t\t\tthis.initializeRow(row);\r\n\t\t}else{\r\n\t\t\trow.cells.forEach((cell) => {\r\n\t\t\t\trow.element.appendChild(cell.getElement());\r\n\t\t\t\tcell.cellRendered();\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\t\r\n\trerenderRowCells(row, force){\r\n\t\tthis.reinitializeRow(row, force);\r\n\t}\r\n\t\r\n\treinitializeColumnWidths(columns){\r\n\t\tfor(let i = this.leftCol; i <= this.rightCol; i++){\r\n\t\t\tthis.columns[i].reinitializeWidth();\r\n\t\t}\r\n\t}\r\n\t\r\n\t//////////////////////////////////////\r\n\t//////// Internal Rendering //////////\r\n\t//////////////////////////////////////\r\n\t\r\n\tdeinitialize(){\r\n\t\tthis.initialized = false;\r\n\t}\r\n\t\r\n\tclear(){\r\n\t\tthis.columns = [];\r\n\t\t\r\n\t\tthis.leftCol = -1;\r\n\t\tthis.rightCol = 0;\r\n\t\t\r\n\t\tthis.vDomScrollPosLeft = 0;\r\n\t\tthis.vDomScrollPosRight = 0;\r\n\t\tthis.vDomPadLeft = 0;\r\n\t\tthis.vDomPadRight = 0;\r\n\t}\r\n\t\r\n\tdataChange(){\r\n\t\tvar change = false,\r\n\t\trow, rowEl;\r\n\t\t\r\n\t\tif(this.isFitData){\r\n\t\t\tthis.table.columnManager.columnsByIndex.forEach((column) => {\r\n\t\t\t\tif(!column.definition.width && column.visible){\r\n\t\t\t\t\tchange = true;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\t\r\n\t\t\tif(change && this.table.rowManager.getDisplayRows().length){\r\n\t\t\t\tthis.vDomScrollPosRight = this.scrollLeft + this.elementVertical.clientWidth + this.windowBuffer;\r\n\t\t\t\t\r\n\t\t\t\trow = this.chain(\"rows-sample\", [1], [], () => {\r\n\t\t\t\t\treturn this.table.rowManager.getDisplayRows();\r\n\t\t\t\t})[0];\r\n\t\t\t\t\r\n\t\t\t\tif(row){\r\n\t\t\t\t\trowEl = row.getElement();\r\n\t\t\t\t\t\r\n\t\t\t\t\trow.generateCells();\r\n\t\t\t\t\t\r\n\t\t\t\t\tthis.tableElement.appendChild(rowEl);\r\n\t\t\t\t\t\r\n\t\t\t\t\tfor(let colEnd = 0; colEnd < row.cells.length; colEnd++){\r\n\t\t\t\t\t\tlet cell = row.cells[colEnd];\r\n\t\t\t\t\t\trowEl.appendChild(cell.getElement());\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\tcell.column.reinitializeWidth();\r\n\t\t\t\t\t}\r\n\t\t\t\t\t\r\n\t\t\t\t\trowEl.parentNode.removeChild(rowEl);\r\n\r\n\t\t\t\t\tthis.rerenderColumns(false, true);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tif(this.options(\"layout\") === \"fitColumns\"){\r\n\t\t\t\tthis.layoutRefresh();\r\n\t\t\t\tthis.rerenderColumns(false, true);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\treinitChanged(old){\r\n\t\tvar match = true;\r\n\t\t\r\n\t\tif(old.cols.length !== this.columns.length || old.leftCol !== this.leftCol || old.rightCol !== this.rightCol){\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\t\r\n\t\told.cols.forEach((col, i) => {\r\n\t\t\tif(col !== this.columns[i]){\r\n\t\t\t\tmatch = false;\r\n\t\t\t}\r\n\t\t});\r\n\t\t\r\n\t\treturn !match;\r\n\t}\r\n\t\r\n\treinitializeRows(){\r\n\t\tvar rows = this.getVisibleRows();\r\n\t\trows.forEach((row) => {\r\n\t\t\tthis.reinitializeRow(row, true);\r\n\t\t});\r\n\t}\r\n\t\r\n\tgetVisibleRows(){\r\n\t\tif (!this.visibleRows){\r\n\t\t\tthis.visibleRows = this.table.rowManager.getVisibleRows();\r\n\t\t}\r\n\r\n\t\treturn this.visibleRows;\t\r\n\t}\r\n\t\r\n\tscroll(diff){\r\n\t\tthis.vDomScrollPosLeft += diff;\r\n\t\tthis.vDomScrollPosRight += diff;\r\n\r\n\t\tif(Math.abs(diff) > (this.windowBuffer / 2)){\r\n\t\t\tthis.rerenderColumns();\r\n\t\t}else{\r\n\t\t\tif(diff > 0){\r\n\t\t\t\t//scroll right\r\n\t\t\t\tthis.addColRight();\r\n\t\t\t\tthis.removeColLeft();\r\n\t\t\t}else{\r\n\t\t\t\t//scroll left\r\n\t\t\t\tthis.addColLeft();\r\n\t\t\t\tthis.removeColRight();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\tcolPositionAdjust (start, end, diff){\r\n\t\tfor(let i = start; i < end; i++){\r\n\t\t\tlet column = this.columns[i];\r\n\t\t\t\r\n\t\t\tcolumn.modules.vdomHoz.leftPos += diff;\r\n\t\t\tcolumn.modules.vdomHoz.rightPos += diff;\r\n\t\t}\r\n\t}\r\n\t\r\n\taddColRight(){\r\n\t\tvar changes = false,\r\n\t\tworking = true;\r\n\t\t\r\n\t\twhile(working){\r\n\t\t\t\r\n\t\t\tlet column = this.columns[this.rightCol + 1];\r\n\t\t\t\r\n\t\t\tif(column){\r\n\t\t\t\tif(column.modules.vdomHoz.leftPos <= this.vDomScrollPosRight){\r\n\t\t\t\t\tchanges = true;\r\n\t\t\t\t\t\r\n\t\t\t\t\tthis.getVisibleRows().forEach((row) => {\r\n\t\t\t\t\t\tif(row.type !== \"group\"){\r\n\t\t\t\t\t\t\tvar cell = row.getCell(column);\r\n\t\t\t\t\t\t\trow.getElement().appendChild(cell.getElement());\r\n\t\t\t\t\t\t\tcell.cellRendered();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t\t\r\n\t\t\t\t\tthis.fitDataColActualWidthCheck(column);\r\n\t\t\t\t\t\r\n\t\t\t\t\tthis.rightCol++; // Don't move this below the >= check below\r\n\t\t\t\t\t\r\n\t\t\t\t\tif(this.rightCol >= (this.columns.length - 1)){\r\n\t\t\t\t\t\tthis.vDomPadRight = 0;\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tthis.vDomPadRight -= column.getWidth();\r\n\t\t\t\t\t}\t\r\n\t\t\t\t}else{\r\n\t\t\t\t\tworking = false;\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tworking = false;\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\tif(changes){\r\n\t\t\tthis.tableElement.style.paddingRight = this.vDomPadRight + \"px\";\r\n\t\t}\r\n\t}\r\n\t\r\n\taddColLeft(){\r\n\t\tvar changes = false,\r\n\t\tworking = true;\r\n\t\t\r\n\t\twhile(working){\r\n\t\t\tlet column = this.columns[this.leftCol - 1];\r\n\t\t\t\r\n\t\t\tif(column){\r\n\t\t\t\tif(column.modules.vdomHoz.rightPos >= this.vDomScrollPosLeft){\r\n\t\t\t\t\tchanges = true;\r\n\t\t\t\t\t\r\n\t\t\t\t\tthis.getVisibleRows().forEach((row) => {\r\n\t\t\t\t\t\tif(row.type !== \"group\"){\r\n\t\t\t\t\t\t\tvar cell = row.getCell(column);\r\n\t\t\t\t\t\t\trow.getElement().prepend(cell.getElement());\r\n\t\t\t\t\t\t\tcell.cellRendered();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t\t\r\n\t\t\t\t\tthis.leftCol--; // don't move this below the <= check below\r\n\t\t\t\t\t\r\n\t\t\t\t\tif(this.leftCol <= 0){ // replicating logic in addColRight\r\n\t\t\t\t\t\tthis.vDomPadLeft = 0;\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tthis.vDomPadLeft -= column.getWidth();\r\n\t\t\t\t\t}\r\n\t\t\t\t\t\r\n\t\t\t\t\tlet diff = this.fitDataColActualWidthCheck(column);\r\n\t\t\t\t\t\r\n\t\t\t\t\tif(diff){\r\n\t\t\t\t\t\tthis.scrollLeft = this.elementVertical.scrollLeft = this.elementVertical.scrollLeft + diff;\r\n\t\t\t\t\t\tthis.vDomPadRight -= diff;\r\n\t\t\t\t\t}\r\n\t\t\t\t\t\r\n\t\t\t\t}else{\r\n\t\t\t\t\tworking = false;\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tworking = false;\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\tif(changes){\r\n\t\t\tthis.tableElement.style.paddingLeft = this.vDomPadLeft + \"px\";\r\n\t\t}\r\n\t}\r\n\t\r\n\tremoveColRight(){\r\n\t\tvar changes = false,\r\n\t\tworking = true;\r\n\t\t\r\n\t\twhile(working){\r\n\t\t\tlet column = this.columns[this.rightCol];\r\n\t\t\t\r\n\t\t\tif(column){\r\n\t\t\t\tif(column.modules.vdomHoz.leftPos > this.vDomScrollPosRight){\r\n\t\t\t\t\tchanges = true;\r\n\t\t\t\t\t\r\n\t\t\t\t\tthis.getVisibleRows().forEach((row) => {\r\n\t\t\t\t\t\tif(row.type !== \"group\"){\r\n\t\t\t\t\t\t\tvar cell = row.getCell(column);\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\ttry {\r\n\t\t\t\t\t\t\t\trow.getElement().removeChild(cell.getElement());\r\n\t\t\t\t\t\t\t} catch (ex) {\r\n\t\t\t\t\t\t\t\tconsole.warn(\"Could not removeColRight\", ex.message);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t\t\r\n\t\t\t\t\tthis.vDomPadRight += column.getWidth();\r\n\t\t\t\t\tthis.rightCol --;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tworking = false;\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tworking = false;\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\tif(changes){\r\n\t\t\tthis.tableElement.style.paddingRight = this.vDomPadRight + \"px\";\r\n\t\t}\r\n\t}\r\n\t\r\n\tremoveColLeft(){\r\n\t\tvar changes = false,\r\n\t\tworking = true;\r\n\t\t\r\n\t\twhile(working){\r\n\t\t\tlet column = this.columns[this.leftCol];\r\n\t\t\t\r\n\t\t\tif(column){\r\n\t\t\t\tif(column.modules.vdomHoz.rightPos < this.vDomScrollPosLeft){\r\n\t\t\t\t\tchanges = true;\r\n\t\t\t\t\t\r\n\t\t\t\t\tthis.getVisibleRows().forEach((row) => {\t\t\t\t\t\r\n\t\t\t\t\t\tif(row.type !== \"group\"){\r\n\t\t\t\t\t\t\tvar cell = row.getCell(column);\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\ttry {\r\n\t\t\t\t\t\t\t\trow.getElement().removeChild(cell.getElement());\r\n\t\t\t\t\t\t\t} catch (ex) {\r\n\t\t\t\t\t\t\t\tconsole.warn(\"Could not removeColLeft\", ex.message);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t\t\r\n\t\t\t\t\tthis.vDomPadLeft += column.getWidth();\r\n\t\t\t\t\tthis.leftCol ++;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tworking = false;\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tworking = false;\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\tif(changes){\r\n\t\t\tthis.tableElement.style.paddingLeft = this.vDomPadLeft + \"px\";\r\n\t\t}\r\n\t}\r\n\t\r\n\tfitDataColActualWidthCheck(column){\r\n\t\tvar newWidth, widthDiff;\r\n\t\t\r\n\t\tif(column.modules.vdomHoz.fitDataCheck){\r\n\t\t\tcolumn.reinitializeWidth();\r\n\t\t\t\r\n\t\t\tnewWidth = column.getWidth();\r\n\t\t\twidthDiff = newWidth - column.modules.vdomHoz.width;\r\n\t\t\t\r\n\t\t\tif(widthDiff){\r\n\t\t\t\tcolumn.modules.vdomHoz.rightPos += widthDiff;\r\n\t\t\t\tcolumn.modules.vdomHoz.width = newWidth;\r\n\t\t\t\tthis.colPositionAdjust(this.columns.indexOf(column) + 1, this.columns.length, widthDiff);\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tcolumn.modules.vdomHoz.fitDataCheck = false;\r\n\t\t}\r\n\t\t\r\n\t\treturn widthDiff;\r\n\t}\r\n\t\r\n\tinitializeRow(row){\r\n\t\tif(row.type !== \"group\"){\r\n\t\t\trow.modules.vdomHoz = {\r\n\t\t\t\tleftCol:this.leftCol,\r\n\t\t\t\trightCol:this.rightCol,\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tfor(let i = this.leftCol; i <= this.rightCol; i++){\r\n\t\t\t\tlet column = this.columns[i];\r\n\t\t\t\t\r\n\t\t\t\tif(column && column.visible){\r\n\t\t\t\t\tlet cell = row.getCell(column);\r\n\t\t\t\t\t\r\n\t\t\t\t\trow.getElement().appendChild(cell.getElement());\r\n\t\t\t\t\tcell.cellRendered();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\treinitializeRow(row, force){\r\n\t\tif(row.type !== \"group\"){\r\n\t\t\tif(force || !row.modules.vdomHoz || row.modules.vdomHoz.leftCol !== this.leftCol || row.modules.vdomHoz.rightCol !== this.rightCol){\r\n\t\t\t\tvar rowEl = row.getElement();\r\n\t\t\t\twhile(rowEl.firstChild) rowEl.removeChild(rowEl.firstChild);\r\n\t\t\t\t\r\n\t\t\t\tthis.initializeRow(row);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}","import CoreFeature from './CoreFeature.js';\r\nimport Column from './column/Column.js';\r\nimport ColumnComponent from './column/ColumnComponent.js';\r\nimport Helpers from './tools/Helpers.js';\r\nimport OptionsList from './tools/OptionsList.js';\r\n\r\nimport RendererBasicHorizontal from './rendering/renderers/BasicHorizontal.js';\r\nimport RendererVirtualDomHorizontal from './rendering/renderers/VirtualDomHorizontal.js';\r\n\r\nimport defaultColumnOptions from './column/defaults/options.js';\r\n\r\nexport default class ColumnManager extends CoreFeature {\r\n\t\r\n\tconstructor (table){\r\n\t\tsuper(table);\r\n\t\t\r\n\t\tthis.blockHozScrollEvent = false;\r\n\t\tthis.headersElement = null;\r\n\t\tthis.element = null ; //containing element\r\n\t\tthis.columns = []; // column definition object\r\n\t\tthis.columnsByIndex = []; //columns by index\r\n\t\tthis.columnsByField = {}; //columns by field\r\n\t\tthis.scrollLeft = 0;\r\n\t\tthis.optionsList = new OptionsList(this.table, \"column definition\", defaultColumnOptions);\r\n\t\t\r\n\t\tthis.redrawBlock = false; //prevent redraws to allow multiple data manipulations before continuing\r\n\t\tthis.redrawBlockUpdate = null; //store latest redraw update only status\r\n\t\t\r\n\t\tthis.renderer = null;\r\n\t}\r\n\t\r\n\t////////////// Setup Functions /////////////////\r\n\t\r\n\tinitialize(){\r\n\t\tthis.initializeRenderer();\r\n\t\t\r\n\t\tthis.headersElement = this.createHeadersElement();\r\n\t\tthis.element = this.createHeaderElement();\r\n\t\t\r\n\t\tthis.element.insertBefore(this.headersElement, this.element.firstChild);\r\n\t\t\r\n\t\tthis.subscribe(\"scroll-horizontal\", this.scrollHorizontal.bind(this));\r\n\t}\r\n\t\r\n\tinitializeRenderer(){\r\n\t\tvar renderClass;\r\n\t\t\r\n\t\tvar renderers = {\r\n\t\t\t\"virtual\": RendererVirtualDomHorizontal,\r\n\t\t\t\"basic\": RendererBasicHorizontal,\r\n\t\t};\r\n\t\t\r\n\t\tif(typeof this.table.options.renderHorizontal === \"string\"){\r\n\t\t\trenderClass = renderers[this.table.options.renderHorizontal];\r\n\t\t}else{\r\n\t\t\trenderClass = this.table.options.renderHorizontal;\r\n\t\t}\r\n\t\t\r\n\t\tif(renderClass){\r\n\t\t\tthis.renderer = new renderClass(this.table, this.element, this.tableElement);\r\n\t\t\tthis.renderer.initialize();\r\n\t\t}else{\r\n\t\t\tconsole.error(\"Unable to find matching renderer:\", this.table.options.renderHorizontal);\r\n\t\t}\r\n\t}\r\n\t\r\n\t\r\n\tcreateHeadersElement (){\r\n\t\tvar el = document.createElement(\"div\");\r\n\t\t\r\n\t\tel.classList.add(\"tabulator-headers\");\r\n\t\tel.setAttribute(\"role\", \"row\");\r\n\t\t\r\n\t\treturn el;\r\n\t}\r\n\t\r\n\tcreateHeaderElement (){\r\n\t\tvar el = document.createElement(\"div\");\r\n\t\t\r\n\t\tel.classList.add(\"tabulator-header\");\r\n\t\tel.setAttribute(\"role\", \"rowgroup\");\r\n\t\t\r\n\t\tif(!this.table.options.headerVisible){\r\n\t\t\tel.classList.add(\"tabulator-header-hidden\");\r\n\t\t}\r\n\t\t\r\n\t\treturn el;\r\n\t}\r\n\t\r\n\t//return containing element\r\n\tgetElement(){\r\n\t\treturn this.element;\r\n\t}\r\n\t\r\n\t//return header containing element\r\n\tgetHeadersElement(){\r\n\t\treturn this.headersElement;\r\n\t}\r\n\t\r\n\t//scroll horizontally to match table body\r\n\tscrollHorizontal(left){\r\n\t\tvar hozAdjust = 0,\r\n\t\tscrollWidth = this.element.scrollWidth - this.table.element.clientWidth;\r\n\t\t\r\n\t\t// this.tempScrollBlock();\r\n\t\tthis.element.scrollLeft = left;\r\n\t\t\r\n\t\t//adjust for vertical scrollbar moving table when present\r\n\t\tif(left > scrollWidth){\r\n\t\t\thozAdjust = left - scrollWidth;\r\n\t\t\tthis.element.style.marginLeft = (-(hozAdjust)) + \"px\";\r\n\t\t}else{\r\n\t\t\tthis.element.style.marginLeft = 0;\r\n\t\t}\r\n\t\t\r\n\t\tthis.scrollLeft = left;\r\n\t\t\r\n\t\tthis.renderer.scrollColumns(left);\r\n\t}\r\n\t\r\n\t///////////// Column Setup Functions /////////////\r\n\tgenerateColumnsFromRowData(data){\r\n\t\tvar cols = [],\r\n\t\tdefinitions = this.table.options.autoColumnsDefinitions,\r\n\t\trow, sorter;\r\n\t\t\r\n\t\tif(data && data.length){\r\n\t\t\t\r\n\t\t\trow = data[0];\r\n\t\t\t\r\n\t\t\tfor(var key in row){\r\n\t\t\t\tlet col = {\r\n\t\t\t\t\tfield:key,\r\n\t\t\t\t\ttitle:key,\r\n\t\t\t\t};\r\n\t\t\t\t\r\n\t\t\t\tlet value = row[key];\r\n\t\t\t\t\r\n\t\t\t\tswitch(typeof value){\r\n\t\t\t\t\tcase \"undefined\":\r\n\t\t\t\t\t\tsorter = \"string\";\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\t\tcase \"boolean\":\r\n\t\t\t\t\t\tsorter = \"boolean\";\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\t\tcase \"object\":\r\n\t\t\t\t\t\tif(Array.isArray(value)){\r\n\t\t\t\t\t\t\tsorter = \"array\";\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\tsorter = \"string\";\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\t\tdefault:\r\n\t\t\t\t\t\tif(!isNaN(value) && value !== \"\"){\r\n\t\t\t\t\t\t\tsorter = \"number\";\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\tif(value.match(/((^[0-9]+[a-z]+)|(^[a-z]+[0-9]+))+$/i)){\r\n\t\t\t\t\t\t\t\tsorter = \"alphanum\";\r\n\t\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\t\tsorter = \"string\";\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\tcol.sorter = sorter;\r\n\t\t\t\t\r\n\t\t\t\tcols.push(col);\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif(definitions){\r\n\t\t\t\t\r\n\t\t\t\tswitch(typeof definitions){\r\n\t\t\t\t\tcase \"function\":\r\n\t\t\t\t\t\tthis.table.options.columns = definitions.call(this.table, cols);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\t\tcase \"object\":\r\n\t\t\t\t\t\tif(Array.isArray(definitions)){\r\n\t\t\t\t\t\t\tcols.forEach((col) => {\r\n\t\t\t\t\t\t\t\tvar match = definitions.find((def) => {\r\n\t\t\t\t\t\t\t\t\treturn def.field === col.field;\r\n\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\tif(match){\r\n\t\t\t\t\t\t\t\t\tObject.assign(col, match);\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\tcols.forEach((col) => {\r\n\t\t\t\t\t\t\t\tif(definitions[col.field]){\r\n\t\t\t\t\t\t\t\t\tObject.assign(col, definitions[col.field]);\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\tthis.table.options.columns = cols;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tthis.table.options.columns = cols;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tthis.setColumns(this.table.options.columns);\r\n\t\t}\r\n\t}\r\n\t\r\n\tsetColumns(cols, row){\r\n\t\twhile(this.headersElement.firstChild) this.headersElement.removeChild(this.headersElement.firstChild);\r\n\t\t\r\n\t\tthis.columns = [];\r\n\t\tthis.columnsByIndex = [];\r\n\t\tthis.columnsByField = {};\r\n\t\t\r\n\t\tthis.dispatch(\"columns-loading\");\r\n\t\t\r\n\t\tcols.forEach((def, i) => {\r\n\t\t\tthis._addColumn(def);\r\n\t\t});\r\n\t\t\r\n\t\tthis._reIndexColumns();\r\n\t\t\r\n\t\tthis.dispatch(\"columns-loaded\");\r\n\t\t\r\n\t\tthis.rerenderColumns(false, true);\r\n\t\t\r\n\t\tthis.redraw(true);\r\n\t}\r\n\t\r\n\t_addColumn(definition, before, nextToColumn){\r\n\t\tvar column = new Column(definition, this),\r\n\t\tcolEl = column.getElement(),\r\n\t\tindex = nextToColumn ? this.findColumnIndex(nextToColumn) : nextToColumn;\r\n\t\t\r\n\t\tif(nextToColumn && index > -1){\r\n\t\t\tvar topColumn = nextToColumn.getTopColumn();\r\n\t\t\tvar parentIndex = this.columns.indexOf(topColumn);\r\n\t\t\tvar nextEl = topColumn.getElement();\r\n\t\t\t\r\n\t\t\tif(before){\r\n\t\t\t\tthis.columns.splice(parentIndex, 0, column);\r\n\t\t\t\tnextEl.parentNode.insertBefore(colEl, nextEl);\r\n\t\t\t}else{\r\n\t\t\t\tthis.columns.splice(parentIndex + 1, 0, column);\r\n\t\t\t\tnextEl.parentNode.insertBefore(colEl, nextEl.nextSibling);\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tif(before){\r\n\t\t\t\tthis.columns.unshift(column);\r\n\t\t\t\tthis.headersElement.insertBefore(column.getElement(), this.headersElement.firstChild);\r\n\t\t\t}else{\r\n\t\t\t\tthis.columns.push(column);\r\n\t\t\t\tthis.headersElement.appendChild(column.getElement());\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\tcolumn.columnRendered();\r\n\t\t\r\n\t\treturn column;\r\n\t}\r\n\t\r\n\tregisterColumnField(col){\r\n\t\tif(col.definition.field){\r\n\t\t\tthis.columnsByField[col.definition.field] = col;\r\n\t\t}\r\n\t}\r\n\t\r\n\tregisterColumnPosition(col){\r\n\t\tthis.columnsByIndex.push(col);\r\n\t}\r\n\t\r\n\t_reIndexColumns(){\r\n\t\tthis.columnsByIndex = [];\r\n\t\t\r\n\t\tthis.columns.forEach(function(column){\r\n\t\t\tcolumn.reRegisterPosition();\r\n\t\t});\r\n\t}\r\n\t\r\n\t//ensure column headers take up the correct amount of space in column groups\r\n\tverticalAlignHeaders(){\r\n\t\tvar minHeight = 0;\r\n\t\t\r\n\t\tif(!this.redrawBlock){\r\n\t\t\t\r\n\t\t\tthis.columns.forEach((column) => {\r\n\t\t\t\tcolumn.clearVerticalAlign();\r\n\t\t\t});\r\n\t\t\t\r\n\t\t\tthis.columns.forEach((column) => {\r\n\t\t\t\tvar height = column.getHeight();\r\n\t\t\t\t\r\n\t\t\t\tif(height > minHeight){\r\n\t\t\t\t\tminHeight = height;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\t\r\n\t\t\tthis.columns.forEach((column) => {\r\n\t\t\t\tcolumn.verticalAlign(this.table.options.columnHeaderVertAlign, minHeight);\r\n\t\t\t});\r\n\t\t\t\r\n\t\t\tthis.table.rowManager.adjustTableSize();\r\n\t\t}\r\n\t}\r\n\t\r\n\t//////////////// Column Details /////////////////\r\n\tfindColumn(subject){\r\n\t\tif(typeof subject == \"object\"){\r\n\t\t\t\r\n\t\t\tif(subject instanceof Column){\r\n\t\t\t\t//subject is column element\r\n\t\t\t\treturn subject;\r\n\t\t\t}else if(subject instanceof ColumnComponent){\r\n\t\t\t\t//subject is public column component\r\n\t\t\t\treturn subject._getSelf() || false;\r\n\t\t\t}else if(typeof HTMLElement !== \"undefined\" && subject instanceof HTMLElement){\r\n\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\t\t\t\t\r\n\t\t\t\treturn match || false;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t}else{\r\n\t\t\t//subject should be treated as the field name of the column\r\n\t\t\treturn this.columnsByField[subject] || false;\r\n\t\t}\r\n\t\t\r\n\t\t//catch all for any other type of input\r\n\t\treturn false;\r\n\t}\r\n\t\r\n\tgetColumnByField(field){\r\n\t\treturn this.columnsByField[field];\r\n\t}\r\n\t\r\n\tgetColumnsByFieldRoot(root){\r\n\t\tvar matches = [];\r\n\t\t\r\n\t\tObject.keys(this.columnsByField).forEach((field) => {\r\n\t\t\tvar fieldRoot = field.split(\".\")[0];\r\n\t\t\tif(fieldRoot === root){\r\n\t\t\t\tmatches.push(this.columnsByField[field]);\r\n\t\t\t}\r\n\t\t});\r\n\t\t\r\n\t\treturn matches;\r\n\t}\r\n\t\r\n\tgetColumnByIndex(index){\r\n\t\treturn this.columnsByIndex[index];\r\n\t}\r\n\t\r\n\tgetFirstVisibleColumn(){\r\n\t\tvar index = this.columnsByIndex.findIndex((col) => {\r\n\t\t\treturn col.visible;\r\n\t\t});\r\n\t\t\r\n\t\treturn index > -1 ? this.columnsByIndex[index] : false;\r\n\t}\r\n\t\r\n\tgetColumns(){\r\n\t\treturn this.columns;\r\n\t}\r\n\t\r\n\tfindColumnIndex(column){\r\n\t\treturn this.columnsByIndex.findIndex((col) => {\r\n\t\t\treturn column === col;\r\n\t\t});\r\n\t}\r\n\t\r\n\t//return all columns that are not groups\r\n\tgetRealColumns(){\r\n\t\treturn this.columnsByIndex;\r\n\t}\r\n\t\r\n\t//traverse across columns and call action\r\n\ttraverse(callback){\r\n\t\tthis.columnsByIndex.forEach((column,i) =>{\r\n\t\t\tcallback(column, i);\r\n\t\t});\r\n\t}\r\n\t\r\n\t//get definitions of actual columns\r\n\tgetDefinitions(active){\r\n\t\tvar output = [];\r\n\t\t\r\n\t\tthis.columnsByIndex.forEach((column) => {\r\n\t\t\tif(!active || (active && column.visible)){\r\n\t\t\t\toutput.push(column.getDefinition());\r\n\t\t\t}\r\n\t\t});\r\n\t\t\r\n\t\treturn output;\r\n\t}\r\n\t\r\n\t//get full nested definition tree\r\n\tgetDefinitionTree(){\r\n\t\tvar output = [];\r\n\t\t\r\n\t\tthis.columns.forEach((column) => {\r\n\t\t\toutput.push(column.getDefinition(true));\r\n\t\t});\r\n\t\t\r\n\t\treturn output;\r\n\t}\r\n\t\r\n\tgetComponents(structured){\r\n\t\tvar output = [],\r\n\t\tcolumns = structured ? this.columns : this.columnsByIndex;\r\n\t\t\r\n\t\tcolumns.forEach((column) => {\r\n\t\t\toutput.push(column.getComponent());\r\n\t\t});\r\n\t\t\r\n\t\treturn output;\r\n\t}\r\n\t\r\n\tgetWidth(){\r\n\t\tvar width = 0;\r\n\t\t\r\n\t\tthis.columnsByIndex.forEach((column) => {\r\n\t\t\tif(column.visible){\r\n\t\t\t\twidth += column.getWidth();\r\n\t\t\t}\r\n\t\t});\r\n\t\t\r\n\t\treturn width;\r\n\t}\r\n\t\r\n\tmoveColumn(from, to, after){\r\n\t\tthis.moveColumnActual(from, to, after);\r\n\t\t\r\n\t\tto.element.parentNode.insertBefore(from.element, to.element);\r\n\t\t\r\n\t\tif(after){\r\n\t\t\tto.element.parentNode.insertBefore(to.element, from.element);\r\n\t\t}\r\n\t\t\r\n\t\tthis.verticalAlignHeaders();\r\n\t\t\r\n\t\tthis.table.rowManager.reinitialize();\r\n\t}\r\n\t\r\n\tmoveColumnActual(from, to, after){\r\n\t\tif(from.parent.isGroup){\r\n\t\t\tthis._moveColumnInArray(from.parent.columns, from, to, after);\r\n\t\t}else{\r\n\t\t\tthis._moveColumnInArray(this.columns, from, to, after);\r\n\t\t}\r\n\t\t\r\n\t\tthis._moveColumnInArray(this.columnsByIndex, from, to, after, true);\r\n\t\t\r\n\t\tthis.rerenderColumns(true);\r\n\t\t\r\n\t\tthis.dispatch(\"column-moved\", from, to, after);\r\n\t\t\r\n\t\tif(this.subscribedExternal(\"columnMoved\")){\r\n\t\t\tthis.dispatchExternal(\"columnMoved\", from.getComponent(), this.table.columnManager.getComponents());\r\n\t\t}\r\n\t}\r\n\t\r\n\t_moveColumnInArray(columns, from, to, after, updateRows){\r\n\t\tvar\tfromIndex = columns.indexOf(from),\r\n\t\ttoIndex, rows = [];\r\n\t\t\r\n\t\tif (fromIndex > -1) {\r\n\t\t\t\r\n\t\t\tcolumns.splice(fromIndex, 1);\r\n\t\t\t\r\n\t\t\ttoIndex = columns.indexOf(to);\r\n\t\t\t\r\n\t\t\tif (toIndex > -1) {\r\n\t\t\t\t\r\n\t\t\t\tif(after){\r\n\t\t\t\t\ttoIndex = toIndex+1;\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t}else{\r\n\t\t\t\ttoIndex = fromIndex;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tcolumns.splice(toIndex, 0, from);\r\n\t\t\t\r\n\t\t\tif(updateRows){\r\n\t\t\t\t\r\n\t\t\t\trows = this.chain(\"column-moving-rows\", [from, to, after], null, []) || [];\r\n\t\t\t\t\r\n\t\t\t\trows = rows.concat(this.table.rowManager.rows);\r\n\t\t\t\t\r\n\t\t\t\trows.forEach(function(row){\r\n\t\t\t\t\tif(row.cells.length){\r\n\t\t\t\t\t\tvar cell = row.cells.splice(fromIndex, 1)[0];\r\n\t\t\t\t\t\trow.cells.splice(toIndex, 0, cell);\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t\t\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\tscrollToColumn(column, position, ifVisible){\r\n\t\tvar left = 0,\r\n\t\toffset = 0,\r\n\t\tadjust = 0,\r\n\t\tcolEl = column.getElement();\r\n\t\t\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\t\r\n\t\t\tif(typeof position === \"undefined\"){\r\n\t\t\t\tposition = this.table.options.scrollToColumnPosition;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif(typeof ifVisible === \"undefined\"){\r\n\t\t\t\tifVisible = this.table.options.scrollToColumnIfVisible;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif(column.visible){\r\n\t\t\t\t\r\n\t\t\t\t//align to correct position\r\n\t\t\t\tswitch(position){\r\n\t\t\t\t\tcase \"middle\":\r\n\t\t\t\t\tcase \"center\":\r\n\t\t\t\t\t\tadjust = -this.element.clientWidth / 2;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\t\tcase \"right\":\r\n\t\t\t\t\t\tadjust = colEl.clientWidth - this.headersElement.clientWidth;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\t//check column visibility\r\n\t\t\t\tif(!ifVisible){\r\n\t\t\t\t\t\r\n\t\t\t\t\toffset = colEl.offsetLeft;\r\n\t\t\t\t\t\r\n\t\t\t\t\tif(offset > 0 && offset + colEl.offsetWidth < this.element.clientWidth){\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\t//calculate scroll position\r\n\t\t\t\tleft = colEl.offsetLeft + adjust;\r\n\t\t\t\t\r\n\t\t\t\tleft = Math.max(Math.min(left, this.table.rowManager.element.scrollWidth - this.table.rowManager.element.clientWidth),0);\r\n\t\t\t\t\r\n\t\t\t\tthis.table.rowManager.scrollHorizontal(left);\r\n\t\t\t\tthis.scrollHorizontal(left);\r\n\t\t\t\t\r\n\t\t\t\tresolve();\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Scroll Error - Column not visible\");\r\n\t\t\t\treject(\"Scroll Error - Column not visible\");\r\n\t\t\t}\r\n\t\t\t\r\n\t\t});\r\n\t}\r\n\t\r\n\t//////////////// Cell Management /////////////////\r\n\tgenerateCells(row){\r\n\t\tvar cells = [];\r\n\t\t\r\n\t\tthis.columnsByIndex.forEach((column) => {\r\n\t\t\tcells.push(column.generateCell(row));\r\n\t\t});\r\n\t\t\r\n\t\treturn cells;\r\n\t}\r\n\t\r\n\t//////////////// Column Management /////////////////\r\n\tgetFlexBaseWidth(){\r\n\t\tvar totalWidth = this.table.element.clientWidth, //table element width\r\n\t\tfixedWidth = 0;\r\n\t\t\r\n\t\t//adjust for vertical scrollbar if present\r\n\t\tif(this.table.rowManager.element.scrollHeight > this.table.rowManager.element.clientHeight){\r\n\t\t\ttotalWidth -= this.table.rowManager.element.offsetWidth - this.table.rowManager.element.clientWidth;\r\n\t\t}\r\n\t\t\r\n\t\tthis.columnsByIndex.forEach(function(column){\r\n\t\t\tvar width, minWidth, colWidth;\r\n\t\t\t\r\n\t\t\tif(column.visible){\r\n\t\t\t\t\r\n\t\t\t\twidth = column.definition.width || 0;\r\n\t\t\t\t\r\n\t\t\t\tminWidth = parseInt(column.minWidth);\r\n\t\t\t\t\r\n\t\t\t\tif(typeof(width) == \"string\"){\r\n\t\t\t\t\tif(width.indexOf(\"%\") > -1){\r\n\t\t\t\t\t\tcolWidth = (totalWidth / 100) * parseInt(width) ;\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tcolWidth = parseInt(width);\r\n\t\t\t\t\t}\r\n\t\t\t\t}else{\r\n\t\t\t\t\tcolWidth = width;\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\tfixedWidth += colWidth > minWidth ? colWidth : minWidth;\r\n\t\t\t\t\r\n\t\t\t}\r\n\t\t});\r\n\t\t\r\n\t\treturn fixedWidth;\r\n\t}\r\n\t\r\n\taddColumn(definition, before, nextToColumn){\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tvar column = this._addColumn(definition, before, nextToColumn);\r\n\t\t\t\r\n\t\t\tthis._reIndexColumns();\r\n\t\t\t\r\n\t\t\tthis.dispatch(\"column-add\", definition, before, nextToColumn);\r\n\t\t\t\r\n\t\t\tif(this.layoutMode() != \"fitColumns\"){\r\n\t\t\t\tcolumn.reinitializeWidth();\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tthis.redraw(true);\r\n\t\t\t\r\n\t\t\tthis.table.rowManager.reinitialize();\r\n\t\t\t\r\n\t\t\tthis.rerenderColumns();\r\n\t\t\t\r\n\t\t\tresolve(column);\r\n\t\t});\r\n\t}\r\n\t\r\n\t//remove column from system\r\n\tderegisterColumn(column){\r\n\t\tvar field = column.getField(),\r\n\t\tindex;\r\n\t\t\r\n\t\t//remove from field list\r\n\t\tif(field){\r\n\t\t\tdelete this.columnsByField[field];\r\n\t\t}\r\n\t\t\r\n\t\t//remove from index list\r\n\t\tindex = this.columnsByIndex.indexOf(column);\r\n\t\t\r\n\t\tif(index > -1){\r\n\t\t\tthis.columnsByIndex.splice(index, 1);\r\n\t\t}\r\n\t\t\r\n\t\t//remove from column list\r\n\t\tindex = this.columns.indexOf(column);\r\n\t\t\r\n\t\tif(index > -1){\r\n\t\t\tthis.columns.splice(index, 1);\r\n\t\t}\r\n\t\t\r\n\t\tthis.verticalAlignHeaders();\r\n\t\t\r\n\t\tthis.redraw();\r\n\t}\r\n\t\r\n\trerenderColumns(update, silent){\r\n\t\tif(!this.redrawBlock){\r\n\t\t\tthis.renderer.rerenderColumns(update, silent);\r\n\t\t}else{\r\n\t\t\tif(update === false || (update === true && this.redrawBlockUpdate === null)){\r\n\t\t\t\tthis.redrawBlockUpdate = update;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\tblockRedraw(){\r\n\t\tthis.redrawBlock = true;\r\n\t\tthis.redrawBlockUpdate = null;\r\n\t}\r\n\t\r\n\trestoreRedraw(){\r\n\t\tthis.redrawBlock = false;\r\n\t\tthis.verticalAlignHeaders();\r\n\t\tthis.renderer.rerenderColumns(this.redrawBlockUpdate);\r\n\t\t\r\n\t}\r\n\t\r\n\t//redraw columns\r\n\tredraw(force){\r\n\t\tif(Helpers.elVisible(this.element)){\r\n\t\t\tthis.verticalAlignHeaders();\r\n\t\t}\r\n\t\t\r\n\t\tif(force){\r\n\t\t\tthis.table.rowManager.resetScroll();\r\n\t\t\tthis.table.rowManager.reinitialize();\r\n\t\t}\r\n\t\t\r\n\t\tif(!this.confirm(\"table-redrawing\", force)){\r\n\t\t\tthis.layoutRefresh(force);\r\n\t\t}\r\n\t\t\r\n\t\tthis.dispatch(\"table-redraw\", force);\r\n\t\t\r\n\t\tthis.table.footerManager.redraw();\r\n\t}\r\n}","//public row object\r\nexport default class RowComponent {\r\n\r\n\tconstructor (row){\r\n\t\tthis._row = row;\r\n\r\n\t\treturn new Proxy(this, {\r\n\t\t\tget: function(target, name, receiver) {\r\n\t\t\t\tif (typeof target[name] !== \"undefined\") {\r\n\t\t\t\t\treturn target[name];\r\n\t\t\t\t}else{\r\n\t\t\t\t\treturn target._row.table.componentFunctionBinder.handle(\"row\", target._row, name);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tgetData(transform){\r\n\t\treturn this._row.getData(transform);\r\n\t}\r\n\r\n\tgetElement(){\r\n\t\treturn this._row.getElement();\r\n\t}\r\n\r\n\tgetCells(){\r\n\t\tvar cells = [];\r\n\r\n\t\tthis._row.getCells().forEach(function(cell){\r\n\t\t\tcells.push(cell.getComponent());\r\n\t\t});\r\n\r\n\t\treturn cells;\r\n\t}\r\n\r\n\tgetCell(column){\r\n\t\tvar cell = this._row.getCell(column);\r\n\t\treturn cell ? cell.getComponent() : false;\r\n\t}\r\n\r\n\tgetIndex(){\r\n\t\treturn this._row.getData(\"data\")[this._row.table.options.index];\r\n\t}\r\n\r\n\tgetPosition(){\r\n\t\treturn this._row.getPosition();\r\n\t}\r\n\r\n\twatchPosition(callback){\r\n\t\treturn this._row.watchPosition(callback);\r\n\t}\r\n\r\n\tdelete(){\r\n\t\treturn this._row.delete();\r\n\t}\r\n\r\n\tscrollTo(){\r\n\t\treturn this._row.table.rowManager.scrollToRow(this._row);\r\n\t}\r\n\r\n\tmove(to, after){\r\n\t\tthis._row.moveToRow(to, after);\r\n\t}\r\n\r\n\tupdate(data){\r\n\t\treturn this._row.updateData(data);\r\n\t}\r\n\r\n\tnormalizeHeight(){\r\n\t\tthis._row.normalizeHeight(true);\r\n\t}\r\n\r\n\t_getSelf(){\r\n\t\treturn this._row;\r\n\t}\r\n\r\n\treformat(){\r\n\t\treturn this._row.reinitialize();\r\n\t}\r\n\r\n\tgetTable(){\r\n\t\treturn this._row.table;\r\n\t}\r\n\r\n\tgetNextRow(){\r\n\t\tvar row = this._row.nextRow();\r\n\t\treturn row ? row.getComponent() : row;\r\n\t}\r\n\r\n\tgetPrevRow(){\r\n\t\tvar row = this._row.prevRow();\r\n\t\treturn row ? row.getComponent() : row;\r\n\t}\r\n}","import CoreFeature from '../CoreFeature.js';\r\nimport RowComponent from './RowComponent.js';\r\nimport Helpers from '../tools/Helpers.js';\r\n\r\nexport default class Row extends CoreFeature{\r\n\tconstructor (data, parent, type = \"row\"){\r\n\t\tsuper(parent.table);\r\n\t\t\r\n\t\tthis.parent = parent;\r\n\t\tthis.data = {};\r\n\t\tthis.type = type; //type of element\r\n\t\tthis.element = false;\r\n\t\tthis.modules = {}; //hold module variables;\r\n\t\tthis.cells = [];\r\n\t\tthis.height = 0; //hold element height\r\n\t\tthis.heightStyled = \"\"; //hold element height pre-styled to improve render efficiency\r\n\t\tthis.manualHeight = false; //user has manually set row height\r\n\t\tthis.outerHeight = 0; //hold elements outer height\r\n\t\tthis.initialized = false; //element has been rendered\r\n\t\tthis.heightInitialized = false; //element has resized cells to fit\r\n\t\tthis.position = 0; //store position of element in row list\r\n\t\tthis.positionWatchers = [];\r\n\t\t\r\n\t\tthis.component = null;\r\n\t\t\r\n\t\tthis.created = false;\r\n\t\t\r\n\t\tthis.setData(data);\r\n\t}\r\n\t\r\n\tcreate(){\r\n\t\tif(!this.created){\r\n\t\t\tthis.created = true;\r\n\t\t\tthis.generateElement();\r\n\t\t}\r\n\t}\r\n\t\r\n\tcreateElement (){\r\n\t\tvar el = document.createElement(\"div\");\r\n\t\t\r\n\t\tel.classList.add(\"tabulator-row\");\r\n\t\tel.setAttribute(\"role\", \"row\");\r\n\t\t\r\n\t\tthis.element = el;\r\n\t}\r\n\t\r\n\tgetElement(){\r\n\t\tthis.create();\r\n\t\treturn this.element;\r\n\t}\r\n\t\r\n\tdetachElement(){\r\n\t\tif (this.element && this.element.parentNode){\r\n\t\t\tthis.element.parentNode.removeChild(this.element);\r\n\t\t}\r\n\t}\r\n\t\r\n\tgenerateElement(){\r\n\t\tthis.createElement();\r\n\t\tthis.dispatch(\"row-init\", this);\r\n\t}\r\n\t\r\n\tgenerateCells(){\r\n\t\tthis.cells = this.table.columnManager.generateCells(this);\r\n\t}\r\n\t\r\n\t//functions to setup on first render\r\n\tinitialize(force){\r\n\t\tthis.create();\r\n\t\t\r\n\t\tif(!this.initialized || force){\r\n\t\t\t\r\n\t\t\tthis.deleteCells();\r\n\t\t\t\r\n\t\t\twhile(this.element.firstChild) this.element.removeChild(this.element.firstChild);\r\n\t\t\t\r\n\t\t\tthis.dispatch(\"row-layout-before\", this);\r\n\t\t\t\r\n\t\t\tthis.generateCells();\r\n\t\t\t\r\n\t\t\tthis.initialized = true;\r\n\t\t\t\r\n\t\t\tthis.table.columnManager.renderer.renderRowCells(this);\r\n\t\t\t\r\n\t\t\tif(force){\r\n\t\t\t\tthis.normalizeHeight();\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tthis.dispatch(\"row-layout\", this);\r\n\t\t\t\r\n\t\t\tif(this.table.options.rowFormatter){\r\n\t\t\t\tthis.table.options.rowFormatter(this.getComponent());\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tthis.dispatch(\"row-layout-after\", this);\r\n\t\t}else{\r\n\t\t\tthis.table.columnManager.renderer.rerenderRowCells(this);\r\n\t\t}\r\n\t}\r\n\t\r\n\treinitializeHeight(){\r\n\t\tthis.heightInitialized = false;\r\n\t\t\r\n\t\tif(this.element && this.element.offsetParent !== null){\r\n\t\t\tthis.normalizeHeight(true);\r\n\t\t}\r\n\t}\r\n\r\n\tdeinitialize(){\r\n\t\tthis.initialized = false;\r\n\t}\r\n\t\r\n\tdeinitializeHeight(){\r\n\t\tthis.heightInitialized = false;\r\n\t}\r\n\t\r\n\treinitialize(children){\r\n\t\tthis.initialized = false;\r\n\t\tthis.heightInitialized = false;\r\n\t\t\r\n\t\tif(!this.manualHeight){\r\n\t\t\tthis.height = 0;\r\n\t\t\tthis.heightStyled = \"\";\r\n\t\t}\r\n\t\t\r\n\t\tif(this.element && this.element.offsetParent !== null){\r\n\t\t\tthis.initialize(true);\r\n\t\t}\r\n\t\t\r\n\t\tthis.dispatch(\"row-relayout\", this);\r\n\t}\r\n\t\r\n\t//get heights when doing bulk row style calcs in virtual DOM\r\n\tcalcHeight(force){\r\n\t\tvar maxHeight = 0,\r\n\t\tminHeight;\r\n\t\t\r\n\t\tif(this.table.options.rowHeight){\r\n\t\t\tthis.height = this.table.options.rowHeight;\r\n\t\t}else{\r\n\t\t\tminHeight = this.table.options.resizableRows ? this.element.clientHeight : 0;\r\n\t\t\t\r\n\t\t\tthis.cells.forEach(function(cell){\r\n\t\t\t\tvar height = cell.getHeight();\r\n\t\t\t\tif(height > maxHeight){\r\n\t\t\t\t\tmaxHeight = height;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\t\r\n\t\t\tif(force){\r\n\t\t\t\tthis.height = Math.max(maxHeight, minHeight);\r\n\t\t\t}else{\r\n\t\t\t\tthis.height = this.manualHeight ? this.height : Math.max(maxHeight, minHeight);\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\tthis.heightStyled = this.height ? this.height + \"px\" : \"\";\r\n\t\tthis.outerHeight = this.element.offsetHeight;\r\n\t}\r\n\t\r\n\t//set of cells\r\n\tsetCellHeight(){\r\n\t\tthis.cells.forEach(function(cell){\r\n\t\t\tcell.setHeight();\r\n\t\t});\r\n\t\t\r\n\t\tthis.heightInitialized = true;\r\n\t}\r\n\t\r\n\tclearCellHeight(){\r\n\t\tthis.cells.forEach(function(cell){\r\n\t\t\tcell.clearHeight();\r\n\t\t});\r\n\t}\r\n\t\r\n\t//normalize the height of elements in the row\r\n\tnormalizeHeight(force){\r\n\t\tif(force && !this.table.options.rowHeight){\r\n\t\t\tthis.clearCellHeight();\r\n\t\t}\r\n\t\t\r\n\t\tthis.calcHeight(force);\r\n\t\t\r\n\t\tthis.setCellHeight();\r\n\t}\r\n\t\r\n\t//set height of rows\r\n\tsetHeight(height, force){\r\n\t\tif(this.height != height || force){\r\n\t\t\t\r\n\t\t\tthis.manualHeight = true;\r\n\t\t\t\r\n\t\t\tthis.height = height;\r\n\t\t\tthis.heightStyled = height ? height + \"px\" : \"\";\r\n\t\t\t\r\n\t\t\tthis.setCellHeight();\r\n\t\t\t\r\n\t\t\t// this.outerHeight = this.element.outerHeight();\r\n\t\t\tthis.outerHeight = this.element.offsetHeight;\r\n\t\t}\r\n\t}\r\n\t\r\n\t//return rows outer height\r\n\tgetHeight(){\r\n\t\treturn this.outerHeight;\r\n\t}\r\n\t\r\n\t//return rows outer Width\r\n\tgetWidth(){\r\n\t\treturn this.element.offsetWidth;\r\n\t}\r\n\t\r\n\t//////////////// Cell Management /////////////////\r\n\tdeleteCell(cell){\r\n\t\tvar index = this.cells.indexOf(cell);\r\n\t\t\r\n\t\tif(index > -1){\r\n\t\t\tthis.cells.splice(index, 1);\r\n\t\t}\r\n\t}\r\n\t\r\n\t//////////////// Data Management /////////////////\r\n\tsetData(data){\r\n\t\tthis.data = this.chain(\"row-data-init-before\", [this, data], undefined, data);\r\n\t\t\r\n\t\tthis.dispatch(\"row-data-init-after\", this);\r\n\t}\r\n\t\r\n\t//update the rows data\r\n\tupdateData(updatedData){\r\n\t\tvar visible = this.element && Helpers.elVisible(this.element),\r\n\t\ttempData = {},\r\n\t\tnewRowData;\r\n\t\t\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\t\r\n\t\t\tif(typeof updatedData === \"string\"){\r\n\t\t\t\tupdatedData = JSON.parse(updatedData);\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tthis.dispatch(\"row-data-save-before\", this);\r\n\t\t\t\r\n\t\t\tif(this.subscribed(\"row-data-changing\")){\r\n\t\t\t\ttempData = Object.assign(tempData, this.data);\r\n\t\t\t\ttempData = Object.assign(tempData, updatedData);\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tnewRowData = this.chain(\"row-data-changing\", [this, tempData, updatedData], null, updatedData);\r\n\t\t\t\r\n\t\t\t//set data\r\n\t\t\tfor (let attrname in newRowData) {\r\n\t\t\t\tthis.data[attrname] = newRowData[attrname];\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tthis.dispatch(\"row-data-save-after\", this);\r\n\t\t\t\r\n\t\t\t//update affected cells only\r\n\t\t\tfor (let attrname in updatedData) {\r\n\t\t\t\t\r\n\t\t\t\tlet columns = this.table.columnManager.getColumnsByFieldRoot(attrname);\r\n\t\t\t\t\r\n\t\t\t\tcolumns.forEach((column) => {\r\n\t\t\t\t\tlet cell = this.getCell(column.getField());\r\n\t\t\t\t\t\r\n\t\t\t\t\tif(cell){\r\n\t\t\t\t\t\tlet value = column.getFieldValue(newRowData);\r\n\t\t\t\t\t\tif(cell.getValue() != value){\r\n\t\t\t\t\t\t\tcell.setValueProcessData(value);\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tif(visible){\r\n\t\t\t\t\t\t\t\tcell.cellRendered();\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\t//Partial reinitialization if visible\r\n\t\t\tif(visible){\r\n\t\t\t\tthis.normalizeHeight(true);\r\n\t\t\t\t\r\n\t\t\t\tif(this.table.options.rowFormatter){\r\n\t\t\t\t\tthis.table.options.rowFormatter(this.getComponent());\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tthis.initialized = false;\r\n\t\t\t\tthis.height = 0;\r\n\t\t\t\tthis.heightStyled = \"\";\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tthis.dispatch(\"row-data-changed\", this, visible, updatedData);\r\n\t\t\t\r\n\t\t\t//this.reinitialize();\r\n\t\t\t\r\n\t\t\tthis.dispatchExternal(\"rowUpdated\", this.getComponent());\r\n\t\t\t\r\n\t\t\tif(this.subscribedExternal(\"dataChanged\")){\r\n\t\t\t\tthis.dispatchExternal(\"dataChanged\", this.table.rowManager.getData());\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tresolve();\r\n\t\t});\r\n\t}\r\n\t\r\n\tgetData(transform){\r\n\t\tif(transform){\r\n\t\t\treturn this.chain(\"row-data-retrieve\", [this, transform], null, this.data);\r\n\t\t}\r\n\t\t\r\n\t\treturn this.data;\r\n\t}\r\n\t\r\n\tgetCell(column){\r\n\t\tvar match = false;\r\n\t\t\r\n\t\tcolumn = this.table.columnManager.findColumn(column);\r\n\t\t\r\n\t\tif(!this.initialized){\r\n\t\t\tthis.generateCells();\r\n\t\t}\r\n\t\t\r\n\t\tmatch = this.cells.find(function(cell){\r\n\t\t\treturn cell.column === column;\r\n\t\t});\r\n\t\t\r\n\t\treturn match;\r\n\t}\r\n\t\r\n\tgetCellIndex(findCell){\r\n\t\treturn this.cells.findIndex(function(cell){\r\n\t\t\treturn cell === findCell;\r\n\t\t});\r\n\t}\r\n\t\r\n\tfindCell(subject){\r\n\t\treturn this.cells.find((cell) => {\r\n\t\t\treturn cell.element === subject;\r\n\t\t});\r\n\t}\r\n\t\r\n\tgetCells(){\r\n\t\tif(!this.initialized){\r\n\t\t\tthis.generateCells();\r\n\t\t}\r\n\t\t\r\n\t\treturn this.cells;\r\n\t}\r\n\t\r\n\tnextRow(){\r\n\t\tvar row = this.table.rowManager.nextDisplayRow(this, true);\r\n\t\treturn row || false;\r\n\t}\r\n\t\r\n\tprevRow(){\r\n\t\tvar row = this.table.rowManager.prevDisplayRow(this, true);\r\n\t\treturn row || false;\r\n\t}\r\n\t\r\n\tmoveToRow(to, before){\r\n\t\tvar toRow = this.table.rowManager.findRow(to);\r\n\t\t\r\n\t\tif(toRow){\r\n\t\t\tthis.table.rowManager.moveRowActual(this, toRow, !before);\r\n\t\t\tthis.table.rowManager.refreshActiveData(\"display\", false, true);\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Move Error - No matching row found:\", to);\r\n\t\t}\r\n\t}\r\n\t\r\n\t///////////////////// Actions /////////////////////\r\n\tdelete(){\r\n\t\tthis.dispatch(\"row-delete\", this);\r\n\t\t\r\n\t\tthis.deleteActual();\r\n\t\t\r\n\t\treturn Promise.resolve();\r\n\t}\r\n\t\r\n\tdeleteActual(blockRedraw){\r\n\t\tthis.detachModules();\r\n\t\t\r\n\t\tthis.table.rowManager.deleteRow(this, blockRedraw);\r\n\t\t\r\n\t\tthis.deleteCells();\r\n\t\t\r\n\t\tthis.initialized = false;\r\n\t\tthis.heightInitialized = false;\r\n\t\tthis.element = false;\r\n\t\t\r\n\t\tthis.dispatch(\"row-deleted\", this);\r\n\t}\r\n\t\r\n\tdetachModules(){\r\n\t\tthis.dispatch(\"row-deleting\", this);\r\n\t}\r\n\t\r\n\tdeleteCells(){\r\n\t\tvar cellCount = this.cells.length;\r\n\t\t\r\n\t\tfor(let i = 0; i < cellCount; i++){\r\n\t\t\tthis.cells[0].delete();\r\n\t\t}\r\n\t}\r\n\t\r\n\twipe(){\r\n\t\tthis.detachModules();\r\n\t\tthis.deleteCells();\r\n\t\t\r\n\t\tif(this.element){\r\n\t\t\twhile(this.element.firstChild) this.element.removeChild(this.element.firstChild);\r\n\t\t\t\r\n\t\t\tif(this.element.parentNode){\r\n\t\t\t\tthis.element.parentNode.removeChild(this.element);\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\tthis.element = false;\r\n\t\tthis.modules = {};\r\n\t}\r\n\r\n\tisDisplayed(){\r\n\t\treturn this.table.rowManager.getDisplayRows().includes(this);\r\n\t}\r\n\r\n\tgetPosition(){\r\n\t\treturn this.isDisplayed() ? this.position : false;\r\n\t}\r\n\r\n\tsetPosition(position){\r\n\t\tif(position != this.position){\r\n\t\t\tthis.position = position;\r\n\r\n\t\t\tthis.positionWatchers.forEach((callback) => {\r\n\t\t\t\tcallback(this.position);\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\twatchPosition(callback){\r\n\t\tthis.positionWatchers.push(callback);\r\n\r\n\t\tcallback(this.position);\r\n\t}\r\n\t\r\n\tgetGroup(){\r\n\t\treturn this.modules.group || false;\r\n\t}\r\n\t\r\n\t//////////////// Object Generation /////////////////\r\n\tgetComponent(){\r\n\t\tif(!this.component){\r\n\t\t\tthis.component = new RowComponent(this);\r\n\t\t}\r\n\t\t\r\n\t\treturn this.component;\r\n\t}\r\n}","import Renderer from '../Renderer.js';\r\nimport Helpers from '../../tools/Helpers.js';\r\n\r\nexport default class BasicVertical extends Renderer{\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.verticalFillMode = \"fill\";\r\n\r\n\t\tthis.scrollTop = 0;\r\n\t\tthis.scrollLeft = 0;\r\n\r\n\t\tthis.scrollTop = 0;\r\n\t\tthis.scrollLeft = 0;\r\n\t}\r\n\r\n\tclearRows(){\r\n\t\tvar element = this.tableElement;\r\n\r\n\t\t// element.children.detach();\r\n\t\twhile(element.firstChild) element.removeChild(element.firstChild);\r\n\r\n\t\telement.scrollTop = 0;\r\n\t\telement.scrollLeft = 0;\r\n\r\n\t\telement.style.minWidth = \"\";\r\n\t\telement.style.minHeight = \"\";\r\n\t\telement.style.display = \"\";\r\n\t\telement.style.visibility = \"\";\r\n\t}\r\n\r\n\trenderRows(){\r\n\t\tvar element = this.tableElement,\r\n\t\tonlyGroupHeaders = true;\r\n\r\n\t\tthis.rows().forEach((row, index) => {\r\n\t\t\tthis.styleRow(row, index);\r\n\t\t\telement.appendChild(row.getElement());\r\n\t\t\trow.initialize(true);\r\n\r\n\t\t\tif(row.type !== \"group\"){\r\n\t\t\t\tonlyGroupHeaders = false;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tif(onlyGroupHeaders){\r\n\t\t\telement.style.minWidth = this.table.columnManager.getWidth() + \"px\";\r\n\t\t}else{\r\n\t\t\telement.style.minWidth = \"\";\r\n\t\t}\r\n\t}\r\n\r\n\r\n\trerenderRows(callback){\r\n\t\tthis.clearRows();\r\n\t\tthis.renderRows();\r\n\r\n\t\tif(callback){\r\n\t\t\tcallback();\r\n\t\t}\r\n\t}\r\n\r\n\tscrollToRowNearestTop(row){\r\n\t\tvar rowTop = Helpers.elOffset(row.getElement()).top;\r\n\r\n\t\treturn !(Math.abs(this.elementVertical.scrollTop - rowTop) > Math.abs(this.elementVertical.scrollTop + this.elementVertical.clientHeight - rowTop));\r\n\t}\r\n\r\n\tscrollToRow(row){\r\n\t\tvar rowEl = row.getElement();\r\n\r\n\t\tthis.elementVertical.scrollTop = Helpers.elOffset(rowEl).top - Helpers.elOffset(this.elementVertical).top + this.elementVertical.scrollTop;\r\n\t}\r\n\r\n\tvisibleRows(includingBuffer){\r\n\t\treturn this.rows();\r\n\t}\r\n\r\n}","import Renderer from '../Renderer.js';\r\nimport Helpers from '../../tools/Helpers.js';\r\n\r\nexport default class VirtualDomVertical extends Renderer{\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.verticalFillMode = \"fill\";\r\n\r\n\t\tthis.scrollTop = 0;\r\n\t\tthis.scrollLeft = 0;\r\n\r\n\t\tthis.vDomRowHeight = 20; //approximation of row heights for padding\r\n\r\n\t\tthis.vDomTop = 0; //hold position for first rendered row in the virtual DOM\r\n\t\tthis.vDomBottom = 0; //hold position for last rendered row in the virtual DOM\r\n\r\n\t\tthis.vDomScrollPosTop = 0; //last scroll position of the vDom top;\r\n\t\tthis.vDomScrollPosBottom = 0; //last scroll position of the vDom bottom;\r\n\r\n\t\tthis.vDomTopPad = 0; //hold value of padding for top of virtual DOM\r\n\t\tthis.vDomBottomPad = 0; //hold value of padding for bottom of virtual DOM\r\n\r\n\t\tthis.vDomMaxRenderChain = 90; //the maximum number of dom elements that can be rendered in 1 go\r\n\r\n\t\tthis.vDomWindowBuffer = 0; //window row buffer before removing elements, to smooth scrolling\r\n\r\n\t\tthis.vDomWindowMinTotalRows = 20; //minimum number of rows to be generated in virtual dom (prevent buffering issues on tables with tall rows)\r\n\t\tthis.vDomWindowMinMarginRows = 5; //minimum number of rows to be generated in virtual dom margin\r\n\r\n\t\tthis.vDomTopNewRows = []; //rows to normalize after appending to optimize render speed\r\n\t\tthis.vDomBottomNewRows = []; //rows to normalize after appending to optimize render speed\r\n\t}\r\n\r\n\t//////////////////////////////////////\r\n\t///////// Public Functions ///////////\r\n\t//////////////////////////////////////\r\n\r\n\tclearRows(){\r\n\t\tvar element = this.tableElement;\r\n\r\n\t\t// element.children.detach();\r\n\t\twhile(element.firstChild) element.removeChild(element.firstChild);\r\n\r\n\t\telement.style.paddingTop = \"\";\r\n\t\telement.style.paddingBottom = \"\";\r\n\t\t// element.style.minWidth = \"\";\r\n\t\telement.style.minHeight = \"\";\r\n\t\telement.style.display = \"\";\r\n\t\telement.style.visibility = \"\";\r\n\r\n\t\tthis.elementVertical.scrollTop = 0;\r\n\t\tthis.elementVertical.scrollLeft = 0;\r\n\r\n\t\tthis.scrollTop = 0;\r\n\t\tthis.scrollLeft = 0;\r\n\r\n\t\tthis.vDomTop = 0;\r\n\t\tthis.vDomBottom = 0;\r\n\t\tthis.vDomTopPad = 0;\r\n\t\tthis.vDomBottomPad = 0;\r\n\t\tthis.vDomScrollPosTop = 0;\r\n\t\tthis.vDomScrollPosBottom = 0;\r\n\t}\r\n\r\n\trenderRows(){\r\n\t\tthis._virtualRenderFill();\r\n\t}\r\n\r\n\trerenderRows(callback){\r\n\t\tvar scrollTop = this.elementVertical.scrollTop;\r\n\t\tvar topRow = false;\r\n\t\tvar topOffset = false;\r\n\r\n\t\tvar left = this.table.rowManager.scrollLeft;\r\n\r\n\t\tvar rows = this.rows();\r\n\r\n\t\tfor(var i = this.vDomTop; i <= this.vDomBottom; i++){\r\n\r\n\t\t\tif(rows[i]){\r\n\t\t\t\tvar diff = scrollTop - rows[i].getElement().offsetTop;\r\n\r\n\t\t\t\tif(topOffset === false || Math.abs(diff) < topOffset){\r\n\t\t\t\t\ttopOffset = diff;\r\n\t\t\t\t\ttopRow = i;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\trows.forEach((row) => {\r\n\t\t\trow.deinitializeHeight();\r\n\t\t});\r\n\r\n\t\tif(callback){\r\n\t\t\tcallback();\r\n\t\t}\r\n\r\n\t\tif(this.rows().length){\r\n\t\t\tthis._virtualRenderFill((topRow === false ? this.rows.length - 1 : topRow), true, topOffset || 0);\r\n\t\t}else{\r\n\t\t\tthis.clear();\r\n\t\t\tthis.table.rowManager._showPlaceholder();\r\n\t\t}\r\n\r\n\t\tthis.scrollColumns(left);\r\n\t}\r\n\r\n\tscrollColumns(left){\r\n\t\tthis.table.rowManager.scrollHorizontal(left);\r\n\t}\r\n\r\n\tscrollRows(top, dir){\r\n\t\tvar topDiff = top - this.vDomScrollPosTop;\r\n\t\tvar bottomDiff = top - this.vDomScrollPosBottom;\r\n\t\tvar margin = this.vDomWindowBuffer * 2;\r\n\t\tvar rows = this.rows();\r\n\r\n\t\tthis.scrollTop = top;\r\n\r\n\t\tif(-topDiff > margin || bottomDiff > margin){\r\n\t\t\t//if big scroll redraw table;\r\n\t\t\tvar left = this.table.rowManager.scrollLeft;\r\n\t\t\tthis._virtualRenderFill(Math.floor((this.elementVertical.scrollTop / this.elementVertical.scrollHeight) * rows.length));\r\n\t\t\tthis.scrollColumns(left);\r\n\t\t}else{\r\n\r\n\t\t\tif(dir){\r\n\t\t\t\t//scrolling up\r\n\t\t\t\tif(topDiff < 0){\r\n\t\t\t\t\tthis._addTopRow(rows, -topDiff);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(bottomDiff < 0){\r\n\t\t\t\t\t//hide bottom row if needed\r\n\t\t\t\t\tif(this.vDomScrollHeight - this.scrollTop > this.vDomWindowBuffer){\r\n\t\t\t\t\t\tthis._removeBottomRow(rows, -bottomDiff);\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tthis.vDomScrollPosBottom = this.scrollTop;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\r\n\t\t\t\tif(bottomDiff >= 0){\r\n\t\t\t\t\tthis._addBottomRow(rows, bottomDiff);\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//scrolling down\r\n\t\t\t\tif(topDiff >= 0){\r\n\t\t\t\t\t//hide top row if needed\r\n\t\t\t\t\tif(this.scrollTop > this.vDomWindowBuffer){\r\n\t\t\t\t\t\tthis._removeTopRow(rows, topDiff);\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tthis.vDomScrollPosTop = this.scrollTop;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tresize(){\r\n\t\tthis.vDomWindowBuffer = this.table.options.renderVerticalBuffer || this.elementVertical.clientHeight;\r\n\t}\r\n\r\n\tscrollToRowNearestTop(row){\r\n\t\tvar rowIndex = this.rows().indexOf(row);\r\n\r\n\t\treturn !(Math.abs(this.vDomTop - rowIndex) > Math.abs(this.vDomBottom - rowIndex));\r\n\t}\r\n\r\n\tscrollToRow(row){\r\n\t\tvar index = this.rows().indexOf(row);\r\n\r\n\t\tif(index > -1){\r\n\t\t\tthis._virtualRenderFill(index, true);\r\n\t\t}\r\n\t}\r\n\r\n\tvisibleRows(includingBuffer){\r\n\t\tvar topEdge = this.elementVertical.scrollTop,\r\n\t\tbottomEdge = this.elementVertical.clientHeight + topEdge,\r\n\t\ttopFound = false,\r\n\t\ttopRow = 0,\r\n\t\tbottomRow = 0,\r\n\t\trows = this.rows();\r\n\r\n\t\tif(includingBuffer){\r\n\t\t\ttopRow = this.vDomTop;\r\n\t\t\tbottomRow = this.vDomBottom;\r\n\t\t}else{\r\n\t\t\tfor(var i = this.vDomTop; i <= this.vDomBottom; i++){\r\n\t\t\t\tif(rows[i]){\r\n\t\t\t\t\tif(!topFound){\r\n\t\t\t\t\t\tif((topEdge - rows[i].getElement().offsetTop) >= 0){\r\n\t\t\t\t\t\t\ttopRow = i;\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\ttopFound = true;\r\n\r\n\t\t\t\t\t\t\tif(bottomEdge - rows[i].getElement().offsetTop >= 0){\r\n\t\t\t\t\t\t\t\tbottomRow = i;\r\n\t\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tif(bottomEdge - rows[i].getElement().offsetTop >= 0){\r\n\t\t\t\t\t\t\tbottomRow = i;\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn rows.slice(topRow, bottomRow + 1);\r\n\t}\r\n\r\n\t//////////////////////////////////////\r\n\t//////// Internal Rendering //////////\r\n\t//////////////////////////////////////\r\n\r\n\t//full virtual render\r\n\t_virtualRenderFill(position, forceMove, offset){\r\n\t\tvar\telement = this.tableElement,\r\n\t\tholder = this.elementVertical,\r\n\t\ttopPad = 0,\r\n\t\trowsHeight = 0,\r\n\t\theightOccupied = 0,\r\n\t\ttopPadHeight = 0,\r\n\t\ti = 0,\r\n\t\trows = this.rows(),\r\n\t\trowsCount = rows.length,\r\n\t\tcontainerHeight = this.elementVertical.clientHeight;\r\n\r\n\t\tposition = position || 0;\r\n\r\n\t\toffset = offset || 0;\r\n\r\n\t\tif(!position){\r\n\t\t\tthis.clear();\r\n\t\t}else{\r\n\t\t\twhile(element.firstChild) element.removeChild(element.firstChild);\r\n\r\n\t\t\t//check if position is too close to bottom of table\r\n\t\t\theightOccupied = (rowsCount - position + 1) * this.vDomRowHeight;\r\n\r\n\t\t\tif(heightOccupied < containerHeight){\r\n\t\t\t\tposition -= Math.ceil((containerHeight - heightOccupied) / this.vDomRowHeight);\r\n\t\t\t\tif(position < 0){\r\n\t\t\t\t\tposition = 0;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t//calculate initial pad\r\n\t\t\ttopPad = Math.min(Math.max(Math.floor(this.vDomWindowBuffer / this.vDomRowHeight), this.vDomWindowMinMarginRows), position);\r\n\t\t\tposition -= topPad;\r\n\t\t}\r\n\r\n\t\tif(rowsCount && Helpers.elVisible(this.elementVertical)){\r\n\t\t\tthis.vDomTop = position;\r\n\r\n\t\t\tthis.vDomBottom = position -1;\r\n\r\n\t\t\twhile ((rowsHeight <= containerHeight + this.vDomWindowBuffer || i < this.vDomWindowMinTotalRows) && this.vDomBottom < rowsCount -1){\r\n\t\t\t\tvar index = this.vDomBottom + 1,\r\n\t\t\t\trow = rows[index],\r\n\t\t\t\trowHeight = 0;\r\n\r\n\t\t\t\tthis.styleRow(row, index);\r\n\r\n\t\t\t\telement.appendChild(row.getElement());\r\n\r\n\t\t\t\trow.initialize();\r\n\r\n\t\t\t\tif(!row.heightInitialized){\r\n\t\t\t\t\trow.normalizeHeight(true);\r\n\t\t\t\t}\r\n\r\n\t\t\t\trowHeight = row.getHeight();\r\n\r\n\t\t\t\tif(i < topPad){\r\n\t\t\t\t\ttopPadHeight += rowHeight;\r\n\t\t\t\t}else{\r\n\t\t\t\t\trowsHeight += rowHeight;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(rowHeight > this.vDomWindowBuffer){\r\n\t\t\t\t\tthis.vDomWindowBuffer = rowHeight * 2;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.vDomBottom ++;\r\n\t\t\t\ti++;\r\n\t\t\t}\r\n\r\n\t\t\tif(!position){\r\n\t\t\t\tthis.vDomTopPad = 0;\r\n\t\t\t\t//adjust row height to match average of rendered elements\r\n\t\t\t\tthis.vDomRowHeight = Math.floor((rowsHeight + topPadHeight) / i);\r\n\t\t\t\tthis.vDomBottomPad = this.vDomRowHeight * (rowsCount - this.vDomBottom -1);\r\n\r\n\t\t\t\tthis.vDomScrollHeight = topPadHeight + rowsHeight + this.vDomBottomPad - containerHeight;\r\n\t\t\t}else{\r\n\t\t\t\tthis.vDomTopPad = !forceMove ? this.scrollTop - topPadHeight : (this.vDomRowHeight * this.vDomTop) + offset;\r\n\t\t\t\tthis.vDomBottomPad = this.vDomBottom == rowsCount-1 ? 0 : Math.max(this.vDomScrollHeight - this.vDomTopPad - rowsHeight - topPadHeight, 0);\r\n\t\t\t}\r\n\r\n\t\t\telement.style.paddingTop = this.vDomTopPad + \"px\";\r\n\t\t\telement.style.paddingBottom = this.vDomBottomPad + \"px\";\r\n\r\n\t\t\tif(forceMove){\r\n\t\t\t\tthis.scrollTop = this.vDomTopPad + (topPadHeight) + offset - (this.elementVertical.scrollWidth > this.elementVertical.clientWidth ? this.elementVertical.offsetHeight - containerHeight : 0);\r\n\t\t\t}\r\n\r\n\t\t\tthis.scrollTop = Math.min(this.scrollTop, this.elementVertical.scrollHeight - containerHeight);\r\n\r\n\t\t\t//adjust for horizontal scrollbar if present (and not at top of table)\r\n\t\t\tif(this.elementVertical.scrollWidth > this.elementVertical.offsetWidth && forceMove){\r\n\t\t\t\tthis.scrollTop += this.elementVertical.offsetHeight - containerHeight;\r\n\t\t\t}\r\n\r\n\t\t\tthis.vDomScrollPosTop = this.scrollTop;\r\n\t\t\tthis.vDomScrollPosBottom = this.scrollTop;\r\n\r\n\t\t\tholder.scrollTop = this.scrollTop;\r\n\r\n\t\t\tthis.dispatch(\"render-virtual-fill\");\r\n\t\t}\r\n\t}\r\n\r\n\t_addTopRow(rows, fillableSpace){\r\n\t\tvar table = this.tableElement,\r\n\t\taddedRows = [],\r\n\t\tpaddingAdjust = 0,\r\n\t\tindex = this.vDomTop -1,\r\n\t\ti = 0,\r\n\t\tworking = true;\r\n\r\n\t\twhile(working){\r\n\t\t\tif(this.vDomTop){\r\n\t\t\t\tlet row = rows[index],\r\n\t\t\t\trowHeight, initialized;\r\n\r\n\t\t\t\tif(row && i < this.vDomMaxRenderChain){\r\n\t\t\t\t\trowHeight = row.getHeight() || this.vDomRowHeight;\r\n\t\t\t\t\tinitialized = row.initialized;\r\n\r\n\t\t\t\t\tif(fillableSpace >= rowHeight){\r\n\r\n\t\t\t\t\t\tthis.styleRow(row, index);\r\n\t\t\t\t\t\ttable.insertBefore(row.getElement(), table.firstChild);\r\n\r\n\t\t\t\t\t\tif(!row.initialized || !row.heightInitialized){\r\n\t\t\t\t\t\t\taddedRows.push(row);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\trow.initialize();\r\n\r\n\t\t\t\t\t\tif(!initialized){\r\n\t\t\t\t\t\t\trowHeight = row.getElement().offsetHeight;\r\n\r\n\t\t\t\t\t\t\tif(rowHeight > this.vDomWindowBuffer){\r\n\t\t\t\t\t\t\t\tthis.vDomWindowBuffer = rowHeight * 2;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tfillableSpace -= rowHeight;\r\n\t\t\t\t\t\tpaddingAdjust += rowHeight;\r\n\r\n\t\t\t\t\t\tthis.vDomTop--;\r\n\t\t\t\t\t\tindex--;\r\n\t\t\t\t\t\ti++;\r\n\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tworking = false;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}else{\r\n\t\t\t\t\tworking = false;\r\n\t\t\t\t}\r\n\r\n\t\t\t}else{\r\n\t\t\t\tworking = false;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfor (let row of addedRows){\r\n\t\t\trow.clearCellHeight();\r\n\t\t}\r\n\r\n\t\tthis._quickNormalizeRowHeight(addedRows);\r\n\r\n\t\tif(paddingAdjust){\r\n\t\t\tthis.vDomTopPad -= paddingAdjust;\r\n\r\n\t\t\tif(this.vDomTopPad < 0){\r\n\t\t\t\tthis.vDomTopPad = index * this.vDomRowHeight;\r\n\t\t\t}\r\n\r\n\t\t\tif(index < 1){\r\n\t\t\t\tthis.vDomTopPad = 0;\r\n\t\t\t}\r\n\r\n\t\t\ttable.style.paddingTop = this.vDomTopPad + \"px\";\r\n\t\t\tthis.vDomScrollPosTop -= paddingAdjust;\r\n\t\t}\r\n\t}\r\n\r\n\t_removeTopRow(rows, fillableSpace){\r\n\t\tvar removableRows = [],\r\n\t\tpaddingAdjust = 0,\r\n\t\ti = 0,\r\n\t\tworking = true;\r\n\r\n\t\twhile(working){\r\n\t\t\tlet row = rows[this.vDomTop],\r\n\t\t\trowHeight;\r\n\r\n\t\t\tif(row && i < this.vDomMaxRenderChain){\r\n\t\t\t\trowHeight = row.getHeight() || this.vDomRowHeight;\r\n\r\n\t\t\t\tif(fillableSpace >= rowHeight){\r\n\t\t\t\t\tthis.vDomTop++;\r\n\r\n\t\t\t\t\tfillableSpace -= rowHeight;\r\n\t\t\t\t\tpaddingAdjust += rowHeight;\r\n\r\n\t\t\t\t\tremovableRows.push(row);\r\n\t\t\t\t\ti++;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tworking = false;\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tworking = false;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfor (let row of removableRows){\r\n\t\t\tlet rowEl = row.getElement();\r\n\r\n\t\t\tif(rowEl.parentNode){\r\n\t\t\t\trowEl.parentNode.removeChild(rowEl);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(paddingAdjust){\r\n\t\t\tthis.vDomTopPad += paddingAdjust;\r\n\t\t\tthis.tableElement.style.paddingTop = this.vDomTopPad + \"px\";\r\n\t\t\tthis.vDomScrollPosTop += this.vDomTop ? paddingAdjust : paddingAdjust + this.vDomWindowBuffer;\r\n\t\t}\r\n\t}\r\n\r\n\t_addBottomRow(rows, fillableSpace){\r\n\t\tvar table = this.tableElement,\r\n\t\taddedRows = [],\r\n\t\tpaddingAdjust = 0,\r\n\t\tindex = this.vDomBottom + 1,\r\n\t\ti = 0,\r\n\t\tworking = true;\r\n\r\n\t\twhile(working){\r\n\t\t\tlet row = rows[index],\r\n\t\t\trowHeight, initialized;\r\n\r\n\t\t\tif(row && i < this.vDomMaxRenderChain){\r\n\t\t\t\trowHeight = row.getHeight() || this.vDomRowHeight;\r\n\t\t\t\tinitialized = row.initialized;\r\n\r\n\t\t\t\tif(fillableSpace >= rowHeight){\r\n\r\n\t\t\t\t\tthis.styleRow(row, index);\r\n\t\t\t\t\ttable.appendChild(row.getElement());\r\n\r\n\t\t\t\t\tif(!row.initialized || !row.heightInitialized){\r\n\t\t\t\t\t\taddedRows.push(row);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\trow.initialize();\r\n\r\n\t\t\t\t\tif(!initialized){\r\n\t\t\t\t\t\trowHeight = row.getElement().offsetHeight;\r\n\r\n\t\t\t\t\t\tif(rowHeight > this.vDomWindowBuffer){\r\n\t\t\t\t\t\t\tthis.vDomWindowBuffer = rowHeight * 2;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tfillableSpace -= rowHeight;\r\n\t\t\t\t\tpaddingAdjust += rowHeight;\r\n\r\n\t\t\t\t\tthis.vDomBottom++;\r\n\t\t\t\t\tindex++;\r\n\t\t\t\t\ti++;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tworking = false;\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tworking = false;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfor (let row of addedRows){\r\n\t\t\trow.clearCellHeight();\r\n\t\t}\r\n\r\n\t\tthis._quickNormalizeRowHeight(addedRows);\r\n\r\n\t\tif(paddingAdjust){\r\n\t\t\tthis.vDomBottomPad -= paddingAdjust;\r\n\r\n\t\t\tif(this.vDomBottomPad < 0 || index == rows.length -1){\r\n\t\t\t\tthis.vDomBottomPad = 0;\r\n\t\t\t}\r\n\r\n\t\t\ttable.style.paddingBottom = this.vDomBottomPad + \"px\";\r\n\t\t\tthis.vDomScrollPosBottom += paddingAdjust;\r\n\t\t}\r\n\t}\r\n\r\n\t_removeBottomRow(rows, fillableSpace){\r\n\t\tvar removableRows = [],\r\n\t\tpaddingAdjust = 0,\r\n\t\ti = 0,\r\n\t\tworking = true;\r\n\r\n\t\twhile(working){\r\n\t\t\tlet row = rows[this.vDomBottom],\r\n\t\t\trowHeight;\r\n\r\n\t\t\tif(row && i < this.vDomMaxRenderChain){\r\n\t\t\t\trowHeight = row.getHeight() || this.vDomRowHeight;\r\n\r\n\t\t\t\tif(fillableSpace >= rowHeight){\r\n\t\t\t\t\tthis.vDomBottom --;\r\n\r\n\t\t\t\t\tfillableSpace -= rowHeight;\r\n\t\t\t\t\tpaddingAdjust += rowHeight;\r\n\r\n\t\t\t\t\tremovableRows.push(row);\r\n\t\t\t\t\ti++;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tworking = false;\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tworking = false;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfor (let row of removableRows){\r\n\t\t\tlet rowEl = row.getElement();\r\n\r\n\t\t\tif(rowEl.parentNode){\r\n\t\t\t\trowEl.parentNode.removeChild(rowEl);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(paddingAdjust){\r\n\t\t\tthis.vDomBottomPad += paddingAdjust;\r\n\r\n\t\t\tif(this.vDomBottomPad < 0){\r\n\t\t\t\tthis.vDomBottomPad = 0;\r\n\t\t\t}\r\n\r\n\t\t\tthis.tableElement.style.paddingBottom = this.vDomBottomPad + \"px\";\r\n\t\t\tthis.vDomScrollPosBottom -= paddingAdjust;\r\n\t\t}\r\n\t}\r\n\r\n\t_quickNormalizeRowHeight(rows){\r\n\t\tfor(let row of rows){\r\n\t\t\trow.calcHeight();\r\n\t\t}\r\n\r\n\t\tfor(let row of rows){\r\n\t\t\trow.setCellHeight();\r\n\t\t}\r\n\t}\r\n}","import CoreFeature from './CoreFeature.js';\r\nimport Row from './row/Row.js';\r\nimport RowComponent from './row/RowComponent.js';\r\nimport Helpers from './tools/Helpers.js';\r\n\r\nimport RendererBasicVertical from './rendering/renderers/BasicVertical.js';\r\nimport RendererVirtualDomVertical from './rendering/renderers/VirtualDomVertical.js';\r\n\r\nexport default class RowManager extends CoreFeature{\r\n\t\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\t\t\r\n\t\tthis.element = this.createHolderElement(); //containing element\r\n\t\tthis.tableElement = this.createTableElement(); //table element\r\n\t\tthis.heightFixer = this.createTableElement(); //table element\r\n\t\tthis.placeholder = null; //placeholder element\r\n\t\tthis.placeholderContents = null; //placeholder element\r\n\t\t\r\n\t\tthis.firstRender = false; //handle first render\r\n\t\tthis.renderMode = \"virtual\"; //current rendering mode\r\n\t\tthis.fixedHeight = false; //current rendering mode\r\n\t\t\r\n\t\tthis.rows = []; //hold row data objects\r\n\t\tthis.activeRowsPipeline = []; //hold calculation of active rows\r\n\t\tthis.activeRows = []; //rows currently available to on display in the table\r\n\t\tthis.activeRowsCount = 0; //count of active rows\r\n\t\t\r\n\t\tthis.displayRows = []; //rows currently on display in the table\r\n\t\tthis.displayRowsCount = 0; //count of display rows\r\n\t\t\r\n\t\tthis.scrollTop = 0;\r\n\t\tthis.scrollLeft = 0;\r\n\t\t\r\n\t\tthis.redrawBlock = false; //prevent redraws to allow multiple data manipulations before continuing\r\n\t\tthis.redrawBlockRestoreConfig = false; //store latest redraw function calls for when redraw is needed\r\n\t\tthis.redrawBlockRenderInPosition = false; //store latest redraw function calls for when redraw is needed\r\n\t\t\r\n\t\tthis.dataPipeline = []; //hold data pipeline tasks\r\n\t\tthis.displayPipeline = []; //hold data display pipeline tasks\r\n\t\t\r\n\t\tthis.renderer = null;\r\n\t}\r\n\t\r\n\t//////////////// Setup Functions /////////////////\r\n\t\r\n\tcreateHolderElement (){\r\n\t\tvar el = document.createElement(\"div\");\r\n\t\t\r\n\t\tel.classList.add(\"tabulator-tableholder\");\r\n\t\tel.setAttribute(\"tabindex\", 0);\r\n\t\t// el.setAttribute(\"role\", \"rowgroup\");\r\n\t\t\r\n\t\treturn el;\r\n\t}\r\n\t\r\n\tcreateTableElement (){\r\n\t\tvar el = document.createElement(\"div\");\r\n\t\t\r\n\t\tel.classList.add(\"tabulator-table\");\r\n\t\tel.setAttribute(\"role\", \"rowgroup\");\r\n\t\t\r\n\t\treturn el;\r\n\t}\r\n\t\r\n\tinitializePlaceholder(){\r\n\t\t//configure placeholder element\r\n\t\tif(typeof this.table.options.placeholder == \"string\"){\r\n\t\t\tlet el = document.createElement(\"div\");\r\n\t\t\tel.classList.add(\"tabulator-placeholder\");\r\n\t\t\t\r\n\t\t\tlet contents = document.createElement(\"div\");\r\n\t\t\tcontents.classList.add(\"tabulator-placeholder-contents\");\r\n\t\t\tcontents.innerHTML = this.table.options.placeholder;\r\n\t\t\t\r\n\t\t\tel.appendChild(contents);\r\n\t\t\t\r\n\t\t\tthis.placeholderContents = contents;\r\n\t\t\tthis.placeholder = el;\r\n\t\t}\r\n\t}\r\n\t\r\n\t//return containing element\r\n\tgetElement(){\r\n\t\treturn this.element;\r\n\t}\r\n\t\r\n\t//return table element\r\n\tgetTableElement(){\r\n\t\treturn this.tableElement;\r\n\t}\r\n\t\r\n\tinitialize(){\r\n\t\tthis.initializePlaceholder();\r\n\t\tthis.initializeRenderer();\r\n\t\t\r\n\t\t//initialize manager\r\n\t\tthis.element.appendChild(this.tableElement);\r\n\t\t\r\n\t\tthis.firstRender = true;\r\n\t\t\r\n\t\t//scroll header along with table body\r\n\t\tthis.element.addEventListener(\"scroll\", () => {\r\n\t\t\tvar left = this.element.scrollLeft,\r\n\t\t\tleftDir = this.scrollLeft > left,\r\n\t\t\ttop = this.element.scrollTop,\r\n\t\t\ttopDir = this.scrollTop > top;\r\n\t\t\t\r\n\t\t\t//handle horizontal scrolling\r\n\t\t\tif(this.scrollLeft != left){\r\n\t\t\t\tthis.scrollLeft = left;\r\n\t\t\t\t\r\n\t\t\t\tthis.dispatch(\"scroll-horizontal\", left, leftDir);\r\n\t\t\t\tthis.dispatchExternal(\"scrollHorizontal\", left, leftDir);\r\n\t\t\t\t\r\n\t\t\t\tthis._positionPlaceholder();\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\t//handle vertical scrolling\r\n\t\t\tif(this.scrollTop != top){\r\n\t\t\t\tthis.scrollTop = top;\r\n\t\t\t\t\r\n\t\t\t\tthis.renderer.scrollRows(top, topDir);\r\n\t\t\t\t\r\n\t\t\t\tthis.dispatch(\"scroll-vertical\", top, topDir);\r\n\t\t\t\tthis.dispatchExternal(\"scrollVertical\", top, topDir);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\t\r\n\t////////////////// Row Manipulation //////////////////\r\n\tfindRow(subject){\r\n\t\tif(typeof subject == \"object\"){\r\n\t\t\tif(subject instanceof Row){\r\n\t\t\t\t//subject is row element\r\n\t\t\t\treturn subject;\r\n\t\t\t}else if(subject instanceof RowComponent){\r\n\t\t\t\t//subject is public row component\r\n\t\t\t\treturn subject._getSelf() || false;\r\n\t\t\t}else if(typeof HTMLElement !== \"undefined\" && subject instanceof HTMLElement){\r\n\t\t\t\t//subject is a HTML element of the row\r\n\t\t\t\tlet match = this.rows.find((row) => {\r\n\t\t\t\t\treturn row.getElement() === subject;\r\n\t\t\t\t});\r\n\t\t\t\t\r\n\t\t\t\treturn match || false;\r\n\t\t\t}else if(subject === null){\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}else if(typeof subject == \"undefined\"){\r\n\t\t\treturn false;\r\n\t\t}else{\r\n\t\t\t//subject should be treated as the index of the row\r\n\t\t\tlet match = this.rows.find((row) => {\r\n\t\t\t\treturn row.data[this.table.options.index] == subject;\r\n\t\t\t});\r\n\t\t\t\r\n\t\t\treturn match || false;\r\n\t\t}\r\n\t\t\r\n\t\t//catch all for any other type of input\r\n\t\treturn false;\r\n\t}\r\n\t\r\n\tgetRowFromDataObject(data){\r\n\t\tvar match = this.rows.find((row) => {\r\n\t\t\treturn row.data === data;\r\n\t\t});\r\n\t\t\r\n\t\treturn match || false;\r\n\t}\r\n\t\r\n\tgetRowFromPosition(position){\r\n\t\treturn this.getDisplayRows().find((row) => {\r\n\t\t\treturn row.getPosition() === position && row.isDisplayed();\r\n\t\t});\r\n\t}\r\n\t\r\n\tscrollToRow(row, position, ifVisible){\r\n\t\treturn this.renderer.scrollToRowPosition(row, position, ifVisible);\r\n\t}\r\n\t\r\n\t////////////////// Data Handling //////////////////\r\n\tsetData(data, renderInPosition, columnsChanged){\r\n\t\treturn new Promise((resolve, reject)=>{\r\n\t\t\tif(renderInPosition && this.getDisplayRows().length){\r\n\t\t\t\tif(this.table.options.pagination){\r\n\t\t\t\t\tthis._setDataActual(data, true);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tthis.reRenderInPosition(() => {\r\n\t\t\t\t\t\tthis._setDataActual(data);\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tif(this.table.options.autoColumns && columnsChanged && this.table.initialized){\r\n\t\t\t\t\tthis.table.columnManager.generateColumnsFromRowData(data);\r\n\t\t\t\t}\r\n\t\t\t\tthis.resetScroll();\r\n\t\t\t\t\r\n\t\t\t\tthis._setDataActual(data);\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tresolve();\r\n\t\t});\r\n\t}\r\n\t\r\n\t_setDataActual(data, renderInPosition){\r\n\t\tthis.dispatchExternal(\"dataProcessing\", data);\r\n\t\t\r\n\t\tthis._wipeElements();\r\n\t\t\r\n\t\tif(Array.isArray(data)){\r\n\t\t\tthis.dispatch(\"data-processing\", data);\r\n\t\t\t\r\n\t\t\tdata.forEach((def, i) => {\r\n\t\t\t\tif(def && typeof def === \"object\"){\r\n\t\t\t\t\tvar row = new Row(def, this);\r\n\t\t\t\t\tthis.rows.push(row);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.warn(\"Data Loading Warning - Invalid row data detected and ignored, expecting object but received:\", def);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\t\r\n\t\t\tthis.refreshActiveData(false, false, renderInPosition);\r\n\t\t\t\r\n\t\t\tthis.dispatch(\"data-processed\", data);\r\n\t\t\tthis.dispatchExternal(\"dataProcessed\", data);\r\n\t\t}else{\r\n\t\t\tconsole.error(\"Data Loading Error - Unable to process data due to invalid data type \\nExpecting: array \\nReceived: \", typeof data, \"\\nData: \", data);\r\n\t\t}\r\n\t}\r\n\t\r\n\t_wipeElements(){\r\n\t\tthis.dispatch(\"rows-wipe\");\r\n\t\t\r\n\t\tthis.rows.forEach((row) => {\r\n\t\t\trow.wipe();\r\n\t\t});\r\n\t\t\r\n\t\tthis.rows = [];\r\n\t\tthis.activeRows = [];\r\n\t\tthis.activeRowsPipeline = [];\r\n\t\tthis.activeRowsCount = 0;\r\n\t\tthis.displayRows = [];\r\n\t\tthis.displayRowsCount = 0;\r\n\t\t\r\n\t\tthis.adjustTableSize();\r\n\t}\r\n\t\r\n\tdeleteRow(row, blockRedraw){\r\n\t\tvar allIndex = this.rows.indexOf(row),\r\n\t\tactiveIndex = this.activeRows.indexOf(row);\r\n\t\t\r\n\t\tif(activeIndex > -1){\r\n\t\t\tthis.activeRows.splice(activeIndex, 1);\r\n\t\t}\r\n\t\t\r\n\t\tif(allIndex > -1){\r\n\t\t\tthis.rows.splice(allIndex, 1);\r\n\t\t}\r\n\t\t\r\n\t\tthis.setActiveRows(this.activeRows);\r\n\t\t\r\n\t\tthis.displayRowIterator((rows) => {\r\n\t\t\tvar displayIndex = rows.indexOf(row);\r\n\t\t\t\r\n\t\t\tif(displayIndex > -1){\r\n\t\t\t\trows.splice(displayIndex, 1);\r\n\t\t\t}\r\n\t\t});\r\n\t\t\r\n\t\tif(!blockRedraw){\r\n\t\t\tthis.reRenderInPosition();\r\n\t\t}\r\n\t\t\r\n\t\tthis.regenerateRowPositions();\r\n\t\t\r\n\t\tthis.dispatchExternal(\"rowDeleted\", row.getComponent());\r\n\t\t\r\n\t\tif(!this.displayRowsCount){\r\n\t\t\tthis._showPlaceholder();\r\n\t\t}\r\n\t\t\r\n\t\tif(this.subscribedExternal(\"dataChanged\")){\r\n\t\t\tthis.dispatchExternal(\"dataChanged\", this.getData());\r\n\t\t}\r\n\t}\r\n\t\r\n\taddRow(data, pos, index, blockRedraw){\r\n\t\tvar row = this.addRowActual(data, pos, index, blockRedraw);\r\n\t\treturn row;\r\n\t}\r\n\t\r\n\t//add multiple rows\r\n\taddRows(data, pos, index){\r\n\t\tvar rows = [];\r\n\t\t\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tpos = this.findAddRowPos(pos);\r\n\t\t\t\r\n\t\t\tif(!Array.isArray(data)){\r\n\t\t\t\tdata = [data];\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif((typeof index == \"undefined\" && pos) || (typeof index !== \"undefined\" && !pos)){\r\n\t\t\t\tdata.reverse();\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tdata.forEach((item, i) => {\r\n\t\t\t\tvar row = this.addRow(item, pos, index, true);\r\n\t\t\t\trows.push(row);\r\n\t\t\t\tthis.dispatch(\"row-added\", row, data, pos, index);\r\n\t\t\t});\r\n\t\t\t\r\n\t\t\tthis.refreshActiveData(false, false, true);\r\n\t\t\t\r\n\t\t\tthis.regenerateRowPositions();\r\n\t\t\t\r\n\t\t\tif(rows.length){\r\n\t\t\t\tthis._clearPlaceholder();\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tresolve(rows);\r\n\t\t});\r\n\t}\r\n\t\r\n\tfindAddRowPos(pos){\r\n\t\tif(typeof pos === \"undefined\"){\r\n\t\t\tpos = this.table.options.addRowPos;\r\n\t\t}\r\n\t\t\r\n\t\tif(pos === \"pos\"){\r\n\t\t\tpos = true;\r\n\t\t}\r\n\t\t\r\n\t\tif(pos === \"bottom\"){\r\n\t\t\tpos = false;\r\n\t\t}\r\n\t\t\r\n\t\treturn pos;\r\n\t}\r\n\t\r\n\taddRowActual(data, pos, index, blockRedraw){\r\n\t\tvar row = data instanceof Row ? data : new Row(data || {}, this),\r\n\t\ttop = this.findAddRowPos(pos),\r\n\t\tallIndex = -1,\r\n\t\tactiveIndex, chainResult;\r\n\t\t\r\n\t\tif(!index){\r\n\t\t\tchainResult = this.chain(\"row-adding-position\", [row, top], null, {index, top});\r\n\t\t\t\r\n\t\t\tindex = chainResult.index;\r\n\t\t\ttop = chainResult.top;\r\n\t\t}\r\n\t\t\r\n\t\tif(typeof index !== \"undefined\"){\r\n\t\t\tindex = this.findRow(index);\r\n\t\t}\r\n\t\t\r\n\t\tindex = this.chain(\"row-adding-index\", [row, index, top], null, index);\r\n\t\t\r\n\t\tif(index){\r\n\t\t\tallIndex = this.rows.indexOf(index);\r\n\t\t}\r\n\t\t\r\n\t\tif(index && allIndex > -1){\r\n\t\t\tactiveIndex = this.activeRows.indexOf(index);\r\n\t\t\t\r\n\t\t\tthis.displayRowIterator(function(rows){\r\n\t\t\t\tvar displayIndex = rows.indexOf(index);\r\n\t\t\t\t\r\n\t\t\t\tif(displayIndex > -1){\r\n\t\t\t\t\trows.splice((top ? displayIndex : displayIndex + 1), 0, row);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\t\r\n\t\t\tif(activeIndex > -1){\r\n\t\t\t\tthis.activeRows.splice((top ? activeIndex : activeIndex + 1), 0, row);\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tthis.rows.splice((top ? allIndex : allIndex + 1), 0, row);\r\n\t\t\t\r\n\t\t}else{\r\n\t\t\t\r\n\t\t\tif(top){\r\n\t\t\t\t\r\n\t\t\t\tthis.displayRowIterator(function(rows){\r\n\t\t\t\t\trows.unshift(row);\r\n\t\t\t\t});\r\n\t\t\t\t\r\n\t\t\t\tthis.activeRows.unshift(row);\r\n\t\t\t\tthis.rows.unshift(row);\r\n\t\t\t}else{\r\n\t\t\t\tthis.displayRowIterator(function(rows){\r\n\t\t\t\t\trows.push(row);\r\n\t\t\t\t});\r\n\t\t\t\t\r\n\t\t\t\tthis.activeRows.push(row);\r\n\t\t\t\tthis.rows.push(row);\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\tthis.setActiveRows(this.activeRows);\r\n\t\t\r\n\t\tthis.dispatchExternal(\"rowAdded\", row.getComponent());\r\n\t\t\r\n\t\tif(this.subscribedExternal(\"dataChanged\")){\r\n\t\t\tthis.dispatchExternal(\"dataChanged\", this.table.rowManager.getData());\r\n\t\t}\r\n\t\t\r\n\t\tif(!blockRedraw){\r\n\t\t\tthis.reRenderInPosition();\r\n\t\t}\r\n\t\t\r\n\t\treturn row;\r\n\t}\r\n\t\r\n\tmoveRow(from, to, after){\r\n\t\tthis.dispatch(\"row-move\", from, to, after);\r\n\t\t\r\n\t\tthis.moveRowActual(from, to, after);\r\n\t\t\r\n\t\tthis.regenerateRowPositions();\r\n\t\t\r\n\t\tthis.dispatch(\"row-moved\", from, to, after);\r\n\t\tthis.dispatchExternal(\"rowMoved\", from.getComponent());\r\n\t}\r\n\t\r\n\tmoveRowActual(from, to, after){\r\n\t\tthis.moveRowInArray(this.rows, from, to, after);\r\n\t\tthis.moveRowInArray(this.activeRows, from, to, after);\r\n\t\t\r\n\t\tthis.displayRowIterator((rows) => {\r\n\t\t\tthis.moveRowInArray(rows, from, to, after);\r\n\t\t});\r\n\t\t\r\n\t\tthis.dispatch(\"row-moving\", from, to, after);\r\n\t}\r\n\t\r\n\tmoveRowInArray(rows, from, to, after){\r\n\t\tvar\tfromIndex, toIndex, start, end;\r\n\t\t\r\n\t\tif(from !== to){\r\n\t\t\t\r\n\t\t\tfromIndex = rows.indexOf(from);\r\n\t\t\t\r\n\t\t\tif (fromIndex > -1) {\r\n\t\t\t\t\r\n\t\t\t\trows.splice(fromIndex, 1);\r\n\t\t\t\t\r\n\t\t\t\ttoIndex = rows.indexOf(to);\r\n\t\t\t\t\r\n\t\t\t\tif (toIndex > -1) {\r\n\t\t\t\t\t\r\n\t\t\t\t\tif(after){\r\n\t\t\t\t\t\trows.splice(toIndex+1, 0, from);\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\trows.splice(toIndex, 0, from);\r\n\t\t\t\t\t}\r\n\t\t\t\t\t\r\n\t\t\t\t}else{\r\n\t\t\t\t\trows.splice(fromIndex, 0, from);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\t//restyle rows\r\n\t\t\tif(rows === this.getDisplayRows()){\r\n\t\t\t\t\r\n\t\t\t\tstart = fromIndex < toIndex ? fromIndex : toIndex;\r\n\t\t\t\tend = toIndex > fromIndex ? toIndex : fromIndex +1;\r\n\t\t\t\t\r\n\t\t\t\tfor(let i = start; i <= end; i++){\r\n\t\t\t\t\tif(rows[i]){\r\n\t\t\t\t\t\tthis.styleRow(rows[i], i);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\tclearData(){\r\n\t\tthis.setData([]);\r\n\t}\r\n\t\r\n\tgetRowIndex(row){\r\n\t\treturn this.findRowIndex(row, this.rows);\r\n\t}\r\n\t\r\n\tgetDisplayRowIndex(row){\r\n\t\tvar index = this.getDisplayRows().indexOf(row);\r\n\t\treturn index > -1 ? index : false;\r\n\t}\r\n\t\r\n\tnextDisplayRow(row, rowOnly){\r\n\t\tvar index = this.getDisplayRowIndex(row),\r\n\t\tnextRow = false;\r\n\t\t\r\n\t\t\r\n\t\tif(index !== false && index < this.displayRowsCount -1){\r\n\t\t\tnextRow = this.getDisplayRows()[index+1];\r\n\t\t}\r\n\t\t\r\n\t\tif(nextRow && (!(nextRow instanceof Row) || nextRow.type != \"row\")){\r\n\t\t\treturn this.nextDisplayRow(nextRow, rowOnly);\r\n\t\t}\r\n\t\t\r\n\t\treturn nextRow;\r\n\t}\r\n\t\r\n\tprevDisplayRow(row, rowOnly){\r\n\t\tvar index = this.getDisplayRowIndex(row),\r\n\t\tprevRow = false;\r\n\t\t\r\n\t\tif(index){\r\n\t\t\tprevRow = this.getDisplayRows()[index-1];\r\n\t\t}\r\n\t\t\r\n\t\tif(rowOnly && prevRow && (!(prevRow instanceof Row) || prevRow.type != \"row\")){\r\n\t\t\treturn this.prevDisplayRow(prevRow, rowOnly);\r\n\t\t}\r\n\t\t\r\n\t\treturn prevRow;\r\n\t}\r\n\t\r\n\tfindRowIndex(row, list){\r\n\t\tvar rowIndex;\r\n\t\t\r\n\t\trow = this.findRow(row);\r\n\t\t\r\n\t\tif(row){\r\n\t\t\trowIndex = list.indexOf(row);\r\n\t\t\t\r\n\t\t\tif(rowIndex > -1){\r\n\t\t\t\treturn rowIndex;\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\treturn false;\r\n\t}\r\n\t\r\n\tgetData(active, transform){\r\n\t\tvar output = [],\r\n\t\trows = this.getRows(active);\r\n\t\t\r\n\t\trows.forEach(function(row){\r\n\t\t\tif(row.type == \"row\"){\r\n\t\t\t\toutput.push(row.getData(transform || \"data\"));\r\n\t\t\t}\r\n\t\t});\r\n\t\t\r\n\t\treturn output;\r\n\t}\r\n\t\r\n\tgetComponents(active){\r\n\t\tvar\toutput = [],\r\n\t\trows = this.getRows(active);\r\n\t\t\r\n\t\trows.forEach(function(row){\r\n\t\t\toutput.push(row.getComponent());\r\n\t\t});\r\n\t\t\r\n\t\treturn output;\r\n\t}\r\n\t\r\n\tgetDataCount(active){\r\n\t\tvar rows = this.getRows(active);\r\n\t\t\r\n\t\treturn rows.length;\r\n\t}\r\n\t\r\n\tscrollHorizontal(left){\r\n\t\tthis.scrollLeft = left;\r\n\t\tthis.element.scrollLeft = left;\r\n\t\t\r\n\t\tthis.dispatch(\"scroll-horizontal\", left);\r\n\t}\r\n\t\r\n\tregisterDataPipelineHandler(handler, priority){\r\n\t\tif(typeof priority !== \"undefined\"){\r\n\t\t\tthis.dataPipeline.push({handler, priority});\r\n\t\t\tthis.dataPipeline.sort((a, b) => {\r\n\t\t\t\treturn a.priority - b.priority;\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tconsole.error(\"Data pipeline handlers must have a priority in order to be registered\");\r\n\t\t}\r\n\t}\r\n\t\r\n\tregisterDisplayPipelineHandler(handler, priority){\r\n\t\tif(typeof priority !== \"undefined\"){\r\n\t\t\tthis.displayPipeline.push({handler, priority});\r\n\t\t\tthis.displayPipeline.sort((a, b) => {\r\n\t\t\t\treturn a.priority - b.priority;\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tconsole.error(\"Display pipeline handlers must have a priority in order to be registered\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t//set active data set\r\n\trefreshActiveData(handler, skipStage, renderInPosition){\r\n\t\tvar table = this.table,\r\n\t\tstage = \"\",\r\n\t\tindex = 0,\r\n\t\tcascadeOrder = [\"all\", \"dataPipeline\", \"display\", \"displayPipeline\", \"end\"];\r\n\t\t\r\n\t\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 all data needs refreshing\r\n\t\t\t\r\n\t\t\tcase \"dataPipeline\":\r\n\t\t\t\r\n\t\t\t\tfor(let i = index; i < this.dataPipeline.length; i++){\r\n\t\t\t\t\tlet result = this.dataPipeline[i].handler(this.activeRowsPipeline[i].slice(0));\r\n\t\t\t\t\t\r\n\t\t\t\t\tthis.activeRowsPipeline[i + 1] = result || this.activeRowsPipeline[i].slice(0);\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\tthis.setActiveRows(this.activeRowsPipeline[this.dataPipeline.length]);\r\n\t\t\t\t\r\n\t\t\tcase \"display\":\r\n\t\t\t\tindex = 0;\r\n\t\t\t\tthis.resetDisplayRows();\r\n\t\t\t\t\r\n\t\t\tcase \"displayPipeline\":\r\n\t\t\t\tfor(let i = index; i < this.displayPipeline.length; i++){\r\n\t\t\t\t\tlet result = this.displayPipeline[i].handler((i ? this.getDisplayRows(i - 1) : this.activeRows).slice(0), renderInPosition);\r\n\t\t\t\t\t\r\n\t\t\t\t\tthis.setDisplayRows(result || this.getDisplayRows(i - 1).slice(0), i);\r\n\t\t\t\t}\r\n\t\t\t\r\n\t\t\tcase \"end\":\r\n\t\t\t\t//case to handle scenario when trying to skip past end stage\r\n\t\t\t\tthis.regenerateRowPositions();\r\n\t\t}\r\n\t}\r\n\t\r\n\t//regenerate row positions\r\n\tregenerateRowPositions(){\r\n\t\tvar rows = this.getDisplayRows();\r\n\t\tvar index = 1;\r\n\t\t\r\n\t\trows.forEach((row) => {\r\n\t\t\tif (row.type === \"row\"){\r\n\t\t\t\trow.setPosition(index);\r\n\t\t\t\tindex++;\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\t\r\n\tsetActiveRows(activeRows){\r\n\t\tthis.activeRows = activeRows;\r\n\t\tthis.activeRowsCount = this.activeRows.length;\r\n\t}\r\n\t\r\n\t//reset display rows array\r\n\tresetDisplayRows(){\r\n\t\tthis.displayRows = [];\r\n\t\t\r\n\t\tthis.displayRows.push(this.activeRows.slice(0));\r\n\t\t\r\n\t\tthis.displayRowsCount = this.displayRows[0].length;\r\n\t}\r\n\t\r\n\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 across display rows\r\n\tdisplayRowIterator(callback){\r\n\t\tthis.activeRowsPipeline.forEach(callback);\r\n\t\tthis.displayRows.forEach(callback);\r\n\t\t\r\n\t\tthis.displayRowsCount = this.displayRows[this.displayRows.length -1].length;\r\n\t}\r\n\t\r\n\t//return only actual rows (not group headers etc)\r\n\tgetRows(type){\r\n\t\tvar rows;\r\n\t\t\r\n\t\tswitch(type){\r\n\t\t\tcase \"active\":\r\n\t\t\t\trows = this.activeRows;\r\n\t\t\t\tbreak;\r\n\t\t\t\r\n\t\t\tcase \"display\":\r\n\t\t\t\trows = this.table.rowManager.getDisplayRows();\r\n\t\t\t\tbreak;\r\n\t\t\t\t\r\n\t\t\tcase \"visible\":\r\n\t\t\t\trows = this.getVisibleRows(false, true);\r\n\t\t\t\tbreak;\r\n\t\t\t\t\r\n\t\t\tdefault:\r\n\t\t\t\trows = this.chain(\"rows-retrieve\", type, null, this.rows) || this.rows;\r\n\t\t}\r\n\t\t\r\n\t\treturn rows;\r\n\t}\r\n\t\r\n\t///////////////// Table Rendering /////////////////\r\n\t//trigger rerender of table in current position\r\n\treRenderInPosition(callback){\r\n\t\tif(this.redrawBlock){\r\n\t\t\tif(callback){\r\n\t\t\t\tcallback();\r\n\t\t\t}else{\r\n\t\t\t\tthis.redrawBlockRenderInPosition = true;\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tthis.dispatchExternal(\"renderStarted\");\r\n\t\t\t\r\n\t\t\tthis.renderer.rerenderRows(callback);\r\n\r\n\t\t\tif(!this.fixedHeight){\r\n\t\t\t\tthis.adjustTableSize();\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tthis.dispatchExternal(\"renderComplete\");\r\n\t\t}\r\n\t}\r\n\t\r\n\tinitializeRenderer(){\r\n\t\tvar renderClass;\r\n\t\t\r\n\t\tvar renderers = {\r\n\t\t\t\"virtual\": RendererVirtualDomVertical,\r\n\t\t\t\"basic\": RendererBasicVertical,\r\n\t\t};\r\n\t\t\r\n\t\tif(typeof this.table.options.renderVertical === \"string\"){\r\n\t\t\trenderClass = renderers[this.table.options.renderVertical];\r\n\t\t}else{\r\n\t\t\trenderClass = this.table.options.renderVertical;\r\n\t\t}\r\n\t\t\r\n\t\tif(renderClass){\r\n\t\t\tthis.renderer = new renderClass(this.table, this.element, this.tableElement);\r\n\t\t\tthis.renderer.initialize();\r\n\t\t\t\r\n\t\t\tif((this.table.element.clientHeight || this.table.options.height)){\r\n\t\t\t\tthis.fixedHeight = true;\r\n\t\t\t}else{\r\n\t\t\t\tthis.fixedHeight = false;\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tconsole.error(\"Unable to find matching renderer:\", this.table.options.renderVertical);\r\n\t\t}\r\n\t}\r\n\t\r\n\tgetRenderMode(){\r\n\t\treturn this.renderMode;\r\n\t}\r\n\t\r\n\trenderTable(){\r\n\t\tthis.dispatchExternal(\"renderStarted\");\r\n\t\t\r\n\t\tthis.element.scrollTop = 0;\r\n\t\t\r\n\t\tthis._clearTable();\r\n\t\t\r\n\t\tif(this.displayRowsCount){\r\n\t\t\tthis.renderer.renderRows();\r\n\t\t\t\r\n\t\t\tif(this.firstRender){\r\n\t\t\t\tthis.firstRender = false;\r\n\t\t\t\tthis.layoutRefresh(true);\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tthis.renderEmptyScroll();\r\n\t\t}\r\n\t\t\r\n\t\tif(!this.fixedHeight){\r\n\t\t\tthis.adjustTableSize();\r\n\t\t}\r\n\t\t\r\n\t\tthis.dispatch(\"table-layout\");\r\n\t\t\r\n\t\tif(!this.displayRowsCount){\r\n\t\t\tthis._showPlaceholder();\r\n\t\t}\r\n\t\t\r\n\t\tthis.dispatchExternal(\"renderComplete\");\r\n\t}\r\n\t\r\n\t//show scrollbars on empty table div\r\n\trenderEmptyScroll(){\r\n\t\tif(this.placeholder){\r\n\t\t\tthis.tableElement.style.display = \"none\";\r\n\t\t}else{\r\n\t\t\tthis.tableElement.style.minWidth = this.table.columnManager.getWidth() + \"px\";\r\n\t\t\t// this.tableElement.style.minHeight = \"1px\";\r\n\t\t\t// this.tableElement.style.visibility = \"hidden\";\r\n\t\t}\r\n\t}\r\n\t\r\n\t_clearTable(){\t\r\n\t\tthis._clearPlaceholder();\r\n\t\t\r\n\t\tthis.scrollTop = 0;\r\n\t\tthis.scrollLeft = 0;\r\n\r\n\t\t// clear empty table placeholder min\r\n\t\tthis.tableElement.style.minWidth = \"\";\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, minHeight;\r\n\t\t\r\n\t\tif(this.renderer.verticalFillMode === \"fill\"){\r\n\t\t\tlet otherHeight = Math.floor(this.table.columnManager.getElement().getBoundingClientRect().height + (this.table.footerManager && this.table.footerManager.active && !this.table.footerManager.external ? this.table.footerManager.getElement().getBoundingClientRect().height : 0));\r\n\t\t\t\r\n\t\t\tif(this.fixedHeight){\r\n\t\t\t\tminHeight = isNaN(this.table.options.minHeight) ? this.table.options.minHeight : this.table.options.minHeight + \"px\";\r\n\t\t\t\t\r\n\t\t\t\tthis.element.style.minHeight = minHeight || \"calc(100% - \" + otherHeight + \"px)\";\r\n\t\t\t\tthis.element.style.height = \"calc(100% - \" + otherHeight + \"px)\";\r\n\t\t\t\tthis.element.style.maxHeight = \"calc(100% - \" + otherHeight + \"px)\";\r\n\t\t\t}else{\r\n\t\t\t\tthis.element.style.height = \"\";\r\n\t\t\t\tthis.element.style.height = (this.table.element.clientHeight - otherHeight) + \"px\";\r\n\t\t\t\tthis.element.scrollTop = this.scrollTop;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tthis.renderer.resize();\r\n\t\t\t\r\n\t\t\t//check if the table has changed size when dealing with variable height tables\r\n\t\t\tif(!this.fixedHeight && initialHeight != this.element.clientHeight){\r\n\t\t\t\tif(this.subscribed(\"table-resize\")){\r\n\t\t\t\t\tthis.dispatch(\"table-resize\");\r\n\t\t\t\t}else{\r\n\t\t\t\t\tthis.redraw();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\tthis._positionPlaceholder();\r\n\t}\r\n\t\r\n\t//reinitialize all rows\r\n\treinitialize(){\r\n\t\tthis.rows.forEach(function(row){\r\n\t\t\trow.reinitialize(true);\r\n\t\t});\r\n\t}\r\n\t\r\n\t//prevent table from being redrawn\r\n\tblockRedraw (){\r\n\t\tthis.redrawBlock = true;\r\n\t\tthis.redrawBlockRestoreConfig = false;\r\n\t}\r\n\t\r\n\t//restore table redrawing\r\n\trestoreRedraw (){\r\n\t\tthis.redrawBlock = false;\r\n\t\t\r\n\t\tif(this.redrawBlockRestoreConfig){\r\n\t\t\tthis.refreshActiveData(this.redrawBlockRestoreConfig.handler, this.redrawBlockRestoreConfig.skipStage, this.redrawBlockRestoreConfig.renderInPosition);\r\n\t\t\t\r\n\t\t\tthis.redrawBlockRestoreConfig = false;\r\n\t\t}else{\r\n\t\t\tif(this.redrawBlockRenderInPosition){\r\n\t\t\t\tthis.reRenderInPosition();\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\tthis.redrawBlockRenderInPosition = false;\r\n\t}\r\n\t\r\n\t//redraw table\r\n\tredraw (force){\r\n\t\tvar left = this.scrollLeft;\r\n\t\t\r\n\t\tthis.adjustTableSize();\r\n\t\t\r\n\t\tthis.table.tableWidth = this.table.element.clientWidth;\r\n\t\t\r\n\t\tif(!force){\r\n\t\t\tthis.reRenderInPosition();\r\n\t\t\tthis.scrollHorizontal(left);\r\n\t\t}else{\r\n\t\t\tthis.renderTable();\r\n\t\t}\r\n\t}\r\n\t\r\n\tresetScroll(){\r\n\t\tthis.element.scrollLeft = 0;\r\n\t\tthis.element.scrollTop = 0;\r\n\t\t\r\n\t\tif(this.table.browser === \"ie\"){\r\n\t\t\tvar event = document.createEvent(\"Event\");\r\n\t\t\tevent.initEvent(\"scroll\", false, true);\r\n\t\t\tthis.element.dispatchEvent(event);\r\n\t\t}else{\r\n\t\t\tthis.element.dispatchEvent(new Event('scroll'));\r\n\t\t}\r\n\t}\r\n}","import CoreFeature from './CoreFeature.js';\r\n\r\nexport default class FooterManager extends CoreFeature{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.active = false;\r\n\t\tthis.element = this.createElement(); //containing element\r\n\t\tthis.containerElement = this.createContainerElement(); //containing element\r\n\t\tthis.external = false;\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tthis.initializeElement();\r\n\t}\r\n\r\n\tcreateElement(){\r\n\t\tvar el = document.createElement(\"div\");\r\n\r\n\t\tel.classList.add(\"tabulator-footer\");\r\n\r\n\t\treturn el;\r\n\t}\r\n\r\n\t\r\n\tcreateContainerElement(){\r\n\t\tvar el = document.createElement(\"div\");\r\n\r\n\t\tel.classList.add(\"tabulator-footer-contents\");\r\n\r\n\t\tthis.element.appendChild(el);\r\n\r\n\t\treturn el;\r\n\t}\r\n\r\n\tinitializeElement(){\r\n\t\tif(this.table.options.footerElement){\r\n\r\n\t\t\tswitch(typeof this.table.options.footerElement){\r\n\t\t\t\tcase \"string\":\r\n\t\t\t\t\tif(this.table.options.footerElement[0] === \"<\"){\r\n\t\t\t\t\t\tthis.containerElement.innerHTML = this.table.options.footerElement;\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tthis.external = true;\r\n\t\t\t\t\t\tthis.containerElement = document.querySelector(this.table.options.footerElement);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tthis.element = this.table.options.footerElement;\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tgetElement(){\r\n\t\treturn this.element;\r\n\t}\r\n\r\n\tappend(element){\r\n\t\tthis.activate();\r\n\r\n\t\tthis.containerElement.appendChild(element);\r\n\t\tthis.table.rowManager.adjustTableSize();\r\n\t}\r\n\r\n\tprepend(element){\r\n\t\tthis.activate();\r\n\r\n\t\tthis.element.insertBefore(element, this.element.firstChild);\r\n\t\tthis.table.rowManager.adjustTableSize();\r\n\t}\r\n\r\n\tremove(element){\r\n\t\telement.parentNode.removeChild(element);\r\n\t\tthis.deactivate();\r\n\t}\r\n\r\n\tdeactivate(force){\r\n\t\tif(!this.element.firstChild || force){\r\n\t\t\tif(!this.external){\r\n\t\t\t\tthis.element.parentNode.removeChild(this.element);\r\n\t\t\t}\r\n\t\t\tthis.active = false;\r\n\t\t}\r\n\t}\r\n\r\n\tactivate(){\r\n\t\tif(!this.active){\r\n\t\t\tthis.active = true;\r\n\t\t\tif(!this.external){\r\n\t\t\t\tthis.table.element.appendChild(this.getElement());\r\n\t\t\t\tthis.table.element.style.display = '';\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tredraw(){\r\n\t\tthis.dispatch(\"footer-redraw\");\r\n\t}\r\n}","import CoreFeature from '../CoreFeature.js';\r\nimport Row from '../row/Row.js';\r\n\r\nexport default class InteractionManager extends CoreFeature {\r\n\t\r\n\tconstructor (table){\r\n\t\tsuper(table);\r\n\t\t\r\n\t\tthis.el = null;\r\n\t\t\r\n\t\tthis.abortClasses = [\"tabulator-headers\", \"tabulator-table\"];\r\n\t\t\r\n\t\tthis.previousTargets = {};\r\n\t\t\r\n\t\tthis.listeners = [\r\n\t\t\t\"click\",\r\n\t\t\t\"dblclick\",\r\n\t\t\t\"contextmenu\",\r\n\t\t\t\"mouseenter\",\r\n\t\t\t\"mouseleave\",\r\n\t\t\t\"mouseover\",\r\n\t\t\t\"mouseout\",\r\n\t\t\t\"mousemove\",\r\n\t\t\t\"touchstart\",\r\n\t\t\t\"touchend\",\r\n\t\t];\r\n\t\t\r\n\t\tthis.componentMap = {\r\n\t\t\t\"tabulator-cell\":\"cell\",\r\n\t\t\t\"tabulator-row\":\"row\",\r\n\t\t\t\"tabulator-group\":\"group\",\r\n\t\t\t\"tabulator-col\":\"column\",\r\n\t\t};\r\n\t\t\r\n\t\tthis.pseudoTrackers = {\r\n\t\t\t\"row\":{\r\n\t\t\t\tsubscriber:null,\r\n\t\t\t\ttarget:null,\r\n\t\t\t},\r\n\t\t\t\"cell\":{\r\n\t\t\t\tsubscriber:null,\r\n\t\t\t\ttarget:null,\r\n\t\t\t},\r\n\t\t\t\"group\":{\r\n\t\t\t\tsubscriber:null,\r\n\t\t\t\ttarget:null,\r\n\t\t\t},\r\n\t\t\t\"column\":{\r\n\t\t\t\tsubscriber:null,\r\n\t\t\t\ttarget:null,\r\n\t\t\t},\r\n\t\t};\r\n\t\t\r\n\t\tthis.pseudoTracking = false;\r\n\t}\r\n\t\r\n\tinitialize(){\r\n\t\tthis.el = this.table.element;\r\n\t\t\r\n\t\tthis.buildListenerMap();\r\n\t\tthis.bindSubscriptionWatchers();\r\n\t}\r\n\t\r\n\tbuildListenerMap(){\r\n\t\tvar listenerMap = {};\r\n\t\t\r\n\t\tthis.listeners.forEach((listener) => {\r\n\t\t\tlistenerMap[listener] = {\r\n\t\t\t\thandler:null,\r\n\t\t\t\tcomponents:[],\r\n\t\t\t};\r\n\t\t});\r\n\t\t\r\n\t\tthis.listeners = listenerMap;\r\n\t}\r\n\t\r\n\tbindPseudoEvents(){\r\n\t\tObject.keys(this.pseudoTrackers).forEach((key) => {\r\n\t\t\tthis.pseudoTrackers[key].subscriber = this.pseudoMouseEnter.bind(this, key);\r\n\t\t\tthis.subscribe(key + \"-mouseover\", this.pseudoTrackers[key].subscriber);\r\n\t\t});\r\n\t\t\r\n\t\tthis.pseudoTracking = true;\r\n\t}\r\n\t\r\n\tpseudoMouseEnter(key, e, target){\r\n\t\tif(this.pseudoTrackers[key].target !== target){\r\n\t\t\t\r\n\t\t\tif(this.pseudoTrackers[key].target){\r\n\t\t\t\tthis.dispatch(key + \"-mouseleave\", e, this.pseudoTrackers[key].target);\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tthis.pseudoMouseLeave(key, e);\r\n\t\t\t\r\n\t\t\tthis.pseudoTrackers[key].target = target;\r\n\t\t\t\r\n\t\t\tthis.dispatch(key + \"-mouseenter\", e, target);\r\n\t\t}\r\n\t}\r\n\t\r\n\tpseudoMouseLeave(key, e){\r\n\t\tvar leaveList = Object.keys(this.pseudoTrackers),\r\n\t\tlinkedKeys = {\r\n\t\t\t\"row\":[\"cell\"],\r\n\t\t\t\"cell\":[\"row\"],\r\n\t\t};\r\n\t\t\r\n\t\tleaveList = leaveList.filter((item) => {\r\n\t\t\tvar links = linkedKeys[key];\r\n\t\t\treturn item !== key && (!links || (links && !links.includes(item)));\r\n\t\t});\r\n\t\t\r\n\t\t\r\n\t\tleaveList.forEach((key) => {\r\n\t\t\tvar target = this.pseudoTrackers[key].target;\r\n\t\t\t\r\n\t\t\tif(this.pseudoTrackers[key].target){\r\n\t\t\t\tthis.dispatch(key + \"-mouseleave\", e, target);\r\n\t\t\t\t\r\n\t\t\t\tthis.pseudoTrackers[key].target = null;\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\t\r\n\t\r\n\tbindSubscriptionWatchers(){\r\n\t\tvar listeners = Object.keys(this.listeners),\r\n\t\tcomponents = Object.values(this.componentMap);\r\n\t\t\r\n\t\tfor(let comp of components){\r\n\t\t\tfor(let listener of listeners){\r\n\t\t\t\tlet key = comp + \"-\" + listener;\r\n\t\t\t\t\r\n\t\t\t\tthis.subscriptionChange(key, this.subscriptionChanged.bind(this, comp, listener));\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\tthis.subscribe(\"table-destroy\", this.clearWatchers.bind(this));\r\n\t}\r\n\t\r\n\tsubscriptionChanged(component, key, added){\r\n\t\tvar listener = this.listeners[key].components,\r\n\t\tindex = listener.indexOf(component),\r\n\t\tchanged = false;\r\n\t\t\r\n\t\tif(added){\r\n\t\t\tif(index === -1){\r\n\t\t\t\tlistener.push(component);\r\n\t\t\t\tchanged = true;\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tif(!this.subscribed(component + \"-\" + key)){\r\n\t\t\t\tif(index > -1){\r\n\t\t\t\t\tlistener.splice(index, 1);\r\n\t\t\t\t\tchanged = true;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\tif((key === \"mouseenter\" || key === \"mouseleave\") && !this.pseudoTracking){\r\n\t\t\tthis.bindPseudoEvents();\r\n\t\t}\r\n\t\t\r\n\t\tif(changed){\r\n\t\t\tthis.updateEventListeners();\r\n\t\t}\r\n\t}\r\n\t\r\n\tupdateEventListeners(){\r\n\t\tfor(let key in this.listeners){\r\n\t\t\tlet listener = this.listeners[key];\r\n\t\t\t\r\n\t\t\tif(listener.components.length){\r\n\t\t\t\tif(!listener.handler){\r\n\t\t\t\t\tlistener.handler = this.track.bind(this, key);\r\n\t\t\t\t\tthis.el.addEventListener(key, listener.handler);\r\n\t\t\t\t\t// this.el.addEventListener(key, listener.handler, {passive: true})\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tif(listener.handler){\r\n\t\t\t\t\tthis.el.removeEventListener(key, listener.handler);\r\n\t\t\t\t\tlistener.handler = null;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\ttrack(type, e){\r\n\t\tvar path = (e.composedPath && e.composedPath()) || e.path;\r\n\t\t\r\n\t\tvar targets = this.findTargets(path);\r\n\t\ttargets = this.bindComponents(type, targets);\r\n\t\t\r\n\t\tthis.triggerEvents(type, e, targets);\r\n\t\t\r\n\t\tif(this.pseudoTracking && (type == \"mouseover\" || type == \"mouseleave\") && !Object.keys(targets).length){\r\n\t\t\tthis.pseudoMouseLeave(\"none\", e);\r\n\t\t}\r\n\t}\r\n\t\r\n\tfindTargets(path){\r\n\t\tvar targets = {};\r\n\t\t\r\n\t\tlet componentMap = Object.keys(this.componentMap);\r\n\t\t\r\n\t\tfor (let el of path) {\r\n\t\t\tlet classList = el.classList ? [...el.classList] : [];\r\n\t\t\t\r\n\t\t\tlet abort = classList.filter((item) => {\r\n\t\t\t\treturn this.abortClasses.includes(item);\r\n\t\t\t});\r\n\t\t\t\r\n\t\t\tif(abort.length){\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tlet elTargets = classList.filter((item) => {\r\n\t\t\t\treturn componentMap.includes(item);\r\n\t\t\t});\r\n\t\t\t\r\n\t\t\tfor (let target of elTargets) {\r\n\t\t\t\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\t\tif(listener.components.includes(\"row\") || listener.components.includes(\"cell\") || listener.components.includes(\"group\")){\r\n\t\t\t\t\t\t\tlet rows = this.table.rowManager.getVisibleRows(true);\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tcomponent = rows.find((row) => {\r\n\t\t\t\t\t\t\t\treturn row.getElement() === target;\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tif(targets[\"row\"] && targets[\"row\"].parentNode && targets[\"row\"].parentNode.closest(\".tabulator-row\")){\r\n\t\t\t\t\t\t\t\ttargets[key] = false;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\t\tcase \"column\":\r\n\t\t\t\t\t\tif(listener.components.includes(\"column\")){\r\n\t\t\t\t\t\t\tcomponent = this.table.columnManager.findColumn(target);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\t\tcase \"cell\":\r\n\t\t\t\t\t\tif(listener.components.includes(\"cell\")){\r\n\t\t\t\t\t\t\tif(targets[\"row\"] instanceof Row){\r\n\t\t\t\t\t\t\t\tcomponent = targets[\"row\"].findCell(target);\r\n\t\t\t\t\t\t\t}else{\t\r\n\t\t\t\t\t\t\t\tif(targets[\"row\"]){\r\n\t\t\t\t\t\t\t\t\tconsole.warn(\"Event Target Lookup Error - The row this cell is attached to cannot be found, has the table been reinitialized without being destroyed first?\");\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif(component){\r\n\t\t\t\ttargets[key] = component;\r\n\t\t\t\ttargetMatches[key] = {\r\n\t\t\t\t\ttarget:target,\r\n\t\t\t\t\tcomponent:component,\r\n\t\t\t\t};\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\tthis.previousTargets = targetMatches;\r\n\t\t\r\n\t\treturn targets;\r\n\t}\r\n\t\r\n\ttriggerEvents(type, e, targets){\r\n\t\tvar listener = this.listeners[type];\r\n\t\t\r\n\t\tfor(let key in targets){\r\n\t\t\tif(targets[key] && listener.components.includes(key)){\r\n\t\t\t\tthis.dispatch(key + \"-\" + type, e, targets[key]);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\tclearWatchers(){\r\n\t\tfor(let key in this.listeners){\r\n\t\t\tlet listener = this.listeners[key];\r\n\t\t\t\r\n\t\t\tif(listener.handler){\r\n\t\t\t\tthis.el.removeEventListener(key, listener.handler);\r\n\t\t\t\tlistener.handler = null;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}","export default class ComponentFunctionBinder{\r\n\r\n\tconstructor(table){\r\n\t\tthis.table = table;\r\n\r\n\t\tthis.bindings = {};\r\n\t}\r\n\r\n\tbind(type, funcName, handler){\r\n\t\tif(!this.bindings[type]){\r\n\t\t\tthis.bindings[type] = {};\r\n\t\t}\r\n\r\n\t\tif(this.bindings[type][funcName]){\r\n\t\t\tconsole.warn(\"Unable to bind component handler, a matching function name is already bound\", type, funcName, handler);\r\n\t\t}else{\r\n\t\t\tthis.bindings[type][funcName] = handler;\r\n\t\t}\r\n\t}\r\n\r\n\thandle(type, component, name){\r\n\t\tif(this.bindings[type] && this.bindings[type][name] && typeof this.bindings[type][name].bind === 'function'){\r\n\t\t\treturn this.bindings[type][name].bind(null, component);\r\n\t\t}else{\r\n\t\t\tif(name !== \"then\" && typeof name === \"string\" && !name.startsWith(\"_\")){\r\n\t\t\t\tif(this.table.options.debugInvalidComponentFuncs){\r\n\t\t\t\t\tconsole.error(\"The \" + type + \" component does not have a \" + name + \" function, have you checked that you have the correct Tabulator module installed?\");\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n","import CoreFeature from '../CoreFeature.js';\r\n\r\nexport default class DataLoader extends CoreFeature{\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.requestOrder = 0; //prevent requests coming out of sequence if overridden by another load request\r\n\t\tthis.loading = false;\r\n\t}\r\n\r\n\tinitialize(){}\r\n\r\n\tload(data, params, config, replace, silent, columnsChanged){\r\n\t\tvar requestNo = ++this.requestOrder;\r\n\r\n\t\tthis.dispatchExternal(\"dataLoading\", data);\r\n\r\n\t\t//parse json data to array\r\n\t\tif (data && (data.indexOf(\"{\") == 0 || data.indexOf(\"[\") == 0)){\r\n\t\t\tdata = JSON.parse(data);\r\n\t\t}\r\n\r\n\t\tif(this.confirm(\"data-loading\", [data, params, config, silent])){\r\n\t\t\tthis.loading = true;\r\n\r\n\t\t\tif(!silent){\r\n\t\t\t\tthis.alertLoader();\r\n\t\t\t}\r\n\r\n\t\t\t//get params for request\r\n\t\t\tparams = this.chain(\"data-params\", [data, config, silent], params || {}, params || {});\r\n\r\n\t\t\tparams = this.mapParams(params, this.table.options.dataSendParams);\r\n\r\n\t\t\tvar result = this.chain(\"data-load\", [data, params, config, silent], false, Promise.resolve([]));\r\n\t\t\t\r\n\t\t\treturn result.then((response) => {\r\n\t\t\t\tif(!Array.isArray(response) && typeof response == \"object\"){\r\n\t\t\t\t\tresponse = this.mapParams(response, this.objectInvert(this.table.options.dataReceiveParams));\r\n\t\t\t\t}\r\n\r\n\t\t\t\tvar rowData = this.chain(\"data-loaded\", response, null, response);\r\n\r\n\t\t\t\tif(requestNo == this.requestOrder){\r\n\t\t\t\t\tthis.clearAlert();\r\n\r\n\t\t\t\t\tif(rowData !== false){\r\n\t\t\t\t\t\tthis.dispatchExternal(\"dataLoaded\", rowData);\r\n\t\t\t\t\t\tthis.table.rowManager.setData(rowData, replace, typeof columnsChanged === \"undefined\" ? !replace : columnsChanged);\r\n\t\t\t\t\t}\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.warn(\"Data Load Response Blocked - An active data load request was blocked by an attempt to change table data while the request was being made\");\r\n\t\t\t\t}\r\n\t\t\t}).catch((error) => {\r\n\t\t\t\tconsole.error(\"Data Load Error: \", error);\r\n\t\t\t\tthis.dispatchExternal(\"dataLoadError\", error);\r\n\r\n\t\t\t\tif(!silent){\r\n\t\t\t\t\tthis.alertError();\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\tsetTimeout(() => {\r\n\t\t\t\t\tthis.clearAlert();\r\n\t\t\t\t}, this.table.options.dataLoaderErrorTimeout);\r\n\t\t\t})\r\n\t\t\t\t.finally(() => {\r\n\t\t\t\t\tthis.loading = false;\r\n\t\t\t\t});\r\n\t\t}else{\r\n\t\t\tthis.dispatchExternal(\"dataLoaded\", data);\r\n\r\n\t\t\tif(!data){\r\n\t\t\t\tdata = [];\r\n\t\t\t}\r\n\r\n\t\t\tthis.table.rowManager.setData(data, replace, typeof columnsChanged === \"undefined\" ? !replace : columnsChanged);\r\n\t\t\treturn Promise.resolve();\r\n\t\t}\r\n\t}\r\n\r\n\tmapParams(params, map){\r\n\t\tvar output = {};\r\n\r\n\t\tfor(let key in params){\r\n\t\t\toutput[map.hasOwnProperty(key) ? map[key] : key] = params[key];\r\n\t\t}\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tobjectInvert(obj){\r\n\t\tvar output = {};\r\n\r\n\t\tfor(let key in obj){\r\n\t\t\toutput[obj[key]] = key;\r\n\t\t}\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tblockActiveLoad(){\r\n\t\tthis.requestOrder++;\r\n\t}\r\n\r\n\talertLoader(){\r\n\t\tvar shouldLoad = typeof this.table.options.dataLoader === \"function\" ? this.table.options.dataLoader() : this.table.options.dataLoader;\r\n\r\n\t\tif(shouldLoad){\r\n\t\t\tthis.table.alertManager.alert(this.table.options.dataLoaderLoading || this.langText(\"data|loading\"));\r\n\t\t}\r\n\t}\r\n\r\n\talertError(){\r\n\t\tthis.table.alertManager.alert(this.table.options.dataLoaderError || this.langText(\"data|error\"), \"error\");\r\n\t}\r\n\r\n\tclearAlert(){\r\n\t\tthis.table.alertManager.clear();\r\n\t}\r\n}","export default class ExternalEventBus {\r\n\r\n\tconstructor(table, optionsList, debug){\r\n\t\tthis.table = table;\r\n\t\tthis.events = {};\r\n\t\tthis.optionsList = optionsList || {};\r\n\t\tthis.subscriptionNotifiers = {};\r\n\r\n\t\tthis.dispatch = debug ? this._debugDispatch.bind(this) : this._dispatch.bind(this);\r\n\t\tthis.debug = debug;\r\n\t}\r\n\r\n\tsubscriptionChange(key, callback){\r\n\t\tif(!this.subscriptionNotifiers[key]){\r\n\t\t\tthis.subscriptionNotifiers[key] = [];\r\n\t\t}\r\n\r\n\t\tthis.subscriptionNotifiers[key].push(callback);\r\n\r\n\t\tif(this.subscribed(key)){\r\n\t\t\tthis._notifySubscriptionChange(key, true);\r\n\t\t}\r\n\t}\r\n\r\n\tsubscribe(key, callback){\r\n\t\tif(!this.events[key]){\r\n\t\t\tthis.events[key] = [];\r\n\t\t}\r\n\r\n\t\tthis.events[key].push(callback);\r\n\r\n\t\tthis._notifySubscriptionChange(key, true);\r\n\t}\r\n\r\n\tunsubscribe(key, callback){\r\n\t\tvar index;\r\n\r\n\t\tif(this.events[key]){\r\n\t\t\tif(callback){\r\n\t\t\t\tindex = this.events[key].findIndex((item) => {\r\n\t\t\t\t\treturn item === callback;\r\n\t\t\t\t});\r\n\r\n\t\t\t\tif(index > -1){\r\n\t\t\t\t\tthis.events[key].splice(index, 1);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.warn(\"Cannot remove event, no matching event found:\", key, callback);\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tdelete this.events[key];\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Cannot remove event, no events set on:\", key);\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis._notifySubscriptionChange(key, false);\r\n\t}\r\n\r\n\tsubscribed(key){\r\n\t\treturn this.events[key] && this.events[key].length;\r\n\t}\r\n\r\n\t_notifySubscriptionChange(key, subscribed){\r\n\t\tvar notifiers = this.subscriptionNotifiers[key];\r\n\r\n\t\tif(notifiers){\r\n\t\t\tnotifiers.forEach((callback)=>{\r\n\t\t\t\tcallback(subscribed);\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\t_dispatch(){\r\n\t\tvar args = Array.from(arguments),\r\n\t\tkey = args.shift(),\r\n\t\tresult;\r\n\r\n\t\tif(this.events[key]){\r\n\t\t\tthis.events[key].forEach((callback, i) => {\r\n\t\t\t\tlet callResult = callback.apply(this.table, args);\r\n\r\n\t\t\t\tif(!i){\r\n\t\t\t\t\tresult = callResult;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\t_debugDispatch(){\r\n\t\tvar args = Array.from(arguments),\r\n\t\tkey = args[0];\r\n\r\n\t\targs[0] = \"ExternalEvent:\" + args[0];\r\n\r\n\t\tif(this.debug === true || this.debug.includes(key)){\r\n\t\t\tconsole.log(...args);\r\n\t\t}\r\n\r\n\t\treturn this._dispatch(...arguments);\r\n\t}\r\n}","export default class InternalEventBus {\r\n\r\n\tconstructor(debug){\r\n\t\tthis.events = {};\r\n\t\tthis.subscriptionNotifiers = {};\r\n\r\n\t\tthis.dispatch = debug ? this._debugDispatch.bind(this) : this._dispatch.bind(this);\r\n\t\tthis.chain = debug ? this._debugChain.bind(this) : this._chain.bind(this);\r\n\t\tthis.confirm = debug ? this._debugConfirm.bind(this) : this._confirm.bind(this);\r\n\t\tthis.debug = debug;\r\n\t}\r\n\r\n\tsubscriptionChange(key, callback){\r\n\t\tif(!this.subscriptionNotifiers[key]){\r\n\t\t\tthis.subscriptionNotifiers[key] = [];\r\n\t\t}\r\n\r\n\t\tthis.subscriptionNotifiers[key].push(callback);\r\n\r\n\t\tif(this.subscribed(key)){\r\n\t\t\tthis._notifySubscriptionChange(key, true);\r\n\t\t}\r\n\t}\r\n\r\n\tsubscribe(key, callback, priority = 10000){\r\n\t\tif(!this.events[key]){\r\n\t\t\tthis.events[key] = [];\r\n\t\t}\r\n\r\n\t\tthis.events[key].push({callback, priority});\r\n\r\n\t\tthis.events[key].sort((a, b) => {\r\n\t\t\treturn a.priority - b.priority;\r\n\t\t});\r\n\r\n\t\tthis._notifySubscriptionChange(key, true);\r\n\t}\r\n\r\n\tunsubscribe(key, callback){\r\n\t\tvar index;\r\n\r\n\t\tif(this.events[key]){\r\n\t\t\tif(callback){\r\n\t\t\t\tindex = this.events[key].findIndex((item) => {\r\n\t\t\t\t\treturn item.callback === callback;\r\n\t\t\t\t});\r\n\r\n\t\t\t\tif(index > -1){\r\n\t\t\t\t\tthis.events[key].splice(index, 1);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.warn(\"Cannot remove event, no matching event found:\", key, callback);\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Cannot remove event, no events set on:\", key);\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis._notifySubscriptionChange(key, false);\r\n\t}\r\n\r\n\tsubscribed(key){\r\n\t\treturn this.events[key] && this.events[key].length;\r\n\t}\r\n\r\n\t_chain(key, args, initialValue, fallback){\r\n\t\tvar value = initialValue;\r\n\r\n\t\tif(!Array.isArray(args)){\r\n\t\t\targs = [args];\r\n\t\t}\r\n\r\n\t\tif(this.subscribed(key)){\r\n\t\t\tthis.events[key].forEach((subscriber, i) => {\r\n\t\t\t\tvalue = subscriber.callback.apply(this, args.concat([value]));\r\n\t\t\t});\r\n\r\n\t\t\treturn value;\r\n\t\t}else{\r\n\t\t\treturn typeof fallback === \"function\" ? fallback() : fallback;\r\n\t\t}\r\n\t}\r\n\r\n\t_confirm(key, args){\r\n\t\tvar confirmed = false;\r\n\r\n\t\tif(!Array.isArray(args)){\r\n\t\t\targs = [args];\r\n\t\t}\r\n\r\n\t\tif(this.subscribed(key)){\r\n\t\t\tthis.events[key].forEach((subscriber, i) => {\r\n\t\t\t\tif(subscriber.callback.apply(this, args)){\r\n\t\t\t\t\tconfirmed = true;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn confirmed;\r\n\t}\r\n\r\n\t_notifySubscriptionChange(key, subscribed){\r\n\t\tvar notifiers = this.subscriptionNotifiers[key];\r\n\r\n\t\tif(notifiers){\r\n\t\t\tnotifiers.forEach((callback)=>{\r\n\t\t\t\tcallback(subscribed);\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\t_dispatch(){\r\n\t\tvar args = Array.from(arguments),\r\n\t\tkey = args.shift();\r\n\r\n\t\tif(this.events[key]){\r\n\t\t\tthis.events[key].forEach((subscriber) => {\r\n\t\t\t\tsubscriber.callback.apply(this, args);\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\t_debugDispatch(){\r\n\t\tvar args = Array.from(arguments),\r\n\t\tkey = args[0];\r\n\r\n\t\targs[0] = \"InternalEvent:\" + key;\r\n\r\n\t\tif(this.debug === true || this.debug.includes(key)){\r\n\t\t\tconsole.log(...args);\r\n\t\t}\r\n\r\n\t\treturn this._dispatch(...arguments);\r\n\t}\r\n\r\n\t_debugChain(){\r\n\t\tvar args = Array.from(arguments),\r\n\t\tkey = args[0];\r\n\r\n\t\targs[0] = \"InternalEvent:\" + key;\r\n\r\n\t\tif(this.debug === true || this.debug.includes(key)){\r\n\t\t\tconsole.log(...args);\r\n\t\t}\r\n\r\n\t\treturn this._chain(...arguments);\r\n\t}\r\n\r\n\t_debugConfirm(){\r\n\t\tvar args = Array.from(arguments),\r\n\t\tkey = args[0];\r\n\r\n\t\targs[0] = \"InternalEvent:\" + key;\r\n\r\n\t\tif(this.debug === true || this.debug.includes(key)){\r\n\t\t\tconsole.log(...args);\r\n\t\t}\r\n\r\n\t\treturn this._confirm(...arguments);\r\n\t}\r\n}","import CoreFeature from '../CoreFeature.js';\r\n\r\nexport default class DeprecationAdvisor extends CoreFeature{\r\n\t\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\t}\r\n\t\r\n\t_warnUser(){\r\n\t\tif(this.options(\"debugDeprecation\")){\r\n\t\t\tconsole.warn(...arguments);\r\n\t\t}\r\n\t}\r\n\t\r\n\tcheck(oldOption, newOption){\r\n\t\tvar msg = \"\";\r\n\t\t\r\n\t\tif(typeof this.options(oldOption) !== \"undefined\"){\r\n\t\t\tmsg = \"Deprecated Setup Option - Use of the %c\" + oldOption + \"%c option is now deprecated\";\r\n\t\t\t\r\n\t\t\tif(newOption){\r\n\t\t\t\tmsg = msg + \", Please use the %c\" + newOption + \"%c option instead\";\r\n\t\t\t\tthis._warnUser(msg, 'font-weight: bold;', 'font-weight: normal;', 'font-weight: bold;', 'font-weight: normal;');\r\n\t\t\t}else{\r\n\t\t\t\tthis._warnUser(msg, 'font-weight: bold;', 'font-weight: normal;');\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn false;\r\n\t\t}else{\r\n\t\t\treturn true;\r\n\t\t}\r\n\t}\r\n\t\r\n\tcheckMsg(oldOption, msg){\r\n\t\tif(typeof this.options(oldOption) !== \"undefined\"){\r\n\t\t\tthis._warnUser(\"%cDeprecated Setup Option - Use of the %c\" + oldOption + \" %c option is now deprecated, \" + msg, 'font-weight: normal;', 'font-weight: bold;', 'font-weight: normal;');\r\n\t\t\t\r\n\t\t\treturn false;\r\n\t\t}else{\r\n\t\t\treturn true;\r\n\t\t}\r\n\t}\r\n\t\r\n\tmsg(msg){\r\n\t\tthis._warnUser(msg);\r\n\t}\r\n}","import Tabulator from '../Tabulator.js';\r\n\r\nclass TableRegistry {\r\n\r\n\tstatic register(table){\r\n\t\tTableRegistry.tables.push(table);\r\n\t}\r\n\r\n\tstatic deregister(table){\r\n\t\tvar index = TableRegistry.tables.indexOf(table);\r\n\r\n\t\tif(index > -1){\r\n\t\t\tTableRegistry.tables.splice(index, 1);\r\n\t\t}\r\n\t}\r\n\r\n\tstatic lookupTable(query, silent){\r\n\t\tvar results = [],\r\n\t\tmatches, match;\r\n\r\n\t\tif(typeof query === \"string\"){\r\n\t\t\tmatches = document.querySelectorAll(query);\r\n\r\n\t\t\tif(matches.length){\r\n\t\t\t\tfor(var i = 0; i < matches.length; i++){\r\n\t\t\t\t\tmatch = TableRegistry.matchElement(matches[i]);\r\n\r\n\t\t\t\t\tif(match){\r\n\t\t\t\t\t\tresults.push(match);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t}else if((typeof HTMLElement !== \"undefined\" && query instanceof HTMLElement) || query instanceof Tabulator){\r\n\t\t\tmatch = TableRegistry.matchElement(query);\r\n\r\n\t\t\tif(match){\r\n\t\t\t\tresults.push(match);\r\n\t\t\t}\r\n\t\t}else if(Array.isArray(query)){\r\n\t\t\tquery.forEach(function(item){\r\n\t\t\t\tresults = results.concat(TableRegistry.lookupTable(item));\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tif(!silent){\r\n\t\t\t\tconsole.warn(\"Table Connection Error - Invalid Selector\", query);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn results;\r\n\t}\r\n\r\n\tstatic matchElement(element){\r\n\t\treturn TableRegistry.tables.find(function(table){\r\n\t\t\treturn element instanceof Tabulator ? table === element : table.element === element;\r\n\t\t});\r\n\t}\r\n}\r\n\r\nTableRegistry.tables = [];\r\n\r\nexport default TableRegistry;","import CoreFeature from '../CoreFeature.js';\r\nimport Helpers from './Helpers.js';\r\n\r\nexport default class Popup extends CoreFeature{\r\n\tconstructor(table, element, parent){\r\n\t\tsuper(table);\r\n \r\n\t\tthis.element = element;\r\n\t\tthis.container = this._lookupContainer();\r\n \r\n\t\tthis.parent = parent;\r\n \r\n\t\tthis.reversedX = false;\r\n\t\tthis.childPopup = null;\r\n\t\tthis.blurable = false;\r\n\t\tthis.blurCallback = null;\r\n\t\tthis.renderedCallback = null;\r\n \r\n\t\tthis.visible = false;\r\n\t\tthis.hideable = true;\r\n \r\n\t\tthis.element.classList.add(\"tabulator-popup-container\");\r\n \r\n\t\tthis.blurEvent = this.hide.bind(this, false);\r\n\t\tthis.escEvent = this._escapeCheck.bind(this);\r\n\r\n\t\tthis.destroyBinding = this.tableDestroyed;\r\n\t\tthis.destroyed = false;\r\n\t}\r\n\r\n\ttableDestroyed(){\r\n\t\tthis.destroyed = true;\r\n\t\tthis.hide(true);\r\n\t}\r\n \r\n\t_lookupContainer(){\r\n\t\tvar container = this.table.options.popupContainer;\r\n \r\n\t\tif(typeof container === \"string\"){\r\n\t\t\tcontainer = document.querySelector(container);\r\n \r\n\t\t\tif(!container){\r\n\t\t\t\tconsole.warn(\"Menu Error - no container element found matching selector:\", this.table.options.popupContainer , \"(defaulting to document body)\");\r\n\t\t\t}\r\n\t\t}else if (container === true){\r\n\t\t\tcontainer = this.table.element;\r\n\t\t}\r\n \r\n\t\tif(container && !this._checkContainerIsParent(container)){\r\n\t\t\tcontainer = false;\r\n\t\t\tconsole.warn(\"Menu Error - container element does not contain this table:\", this.table.options.popupContainer , \"(defaulting to document body)\");\r\n\t\t}\r\n \r\n\t\tif(!container){\r\n\t\t\tcontainer = document.body;\r\n\t\t}\r\n \r\n\t\treturn container;\r\n\t}\r\n \r\n\t_checkContainerIsParent(container, element = this.table.element){\r\n\t\tif(container === element){\r\n\t\t\treturn true;\r\n\t\t}else{\r\n\t\t\treturn element.parentNode ? this._checkContainerIsParent(container, element.parentNode) : false;\r\n\t\t}\r\n\t}\r\n \r\n\trenderCallback(callback){\r\n\t\tthis.renderedCallback = callback;\r\n\t}\r\n \r\n\tcontainerEventCoords(e){\r\n\t\tvar touch = !(e instanceof MouseEvent);\r\n \r\n\t\tvar x = touch ? e.touches[0].pageX : e.pageX;\r\n\t\tvar y = touch ? e.touches[0].pageY : e.pageY;\r\n \r\n\t\tif(this.container !== document.body){\r\n\t\t\tlet parentOffset = Helpers.elOffset(this.container);\r\n \r\n\t\t\tx -= parentOffset.left;\r\n\t\t\ty -= parentOffset.top;\r\n\t\t}\r\n \r\n\t\treturn {x, y};\r\n\t}\r\n \r\n\telementPositionCoords(element, position = \"right\"){\r\n\t\tvar offset = Helpers.elOffset(element),\r\n\t\tcontainerOffset, x, y;\r\n \r\n\t\tif(this.container !== document.body){\r\n\t\t\tcontainerOffset = Helpers.elOffset(this.container);\r\n \r\n\t\t\toffset.left -= containerOffset.left;\r\n\t\t\toffset.top -= containerOffset.top;\r\n\t\t}\r\n \r\n\t\tswitch(position){\r\n\t\t\tcase \"right\":\r\n\t\t\t\tx = offset.left + element.offsetWidth;\r\n\t\t\t\ty = offset.top - 1;\r\n\t\t\t\tbreak;\r\n \r\n\t\t\tcase \"bottom\":\r\n\t\t\t\tx = offset.left;\r\n\t\t\t\ty = offset.top + element.offsetHeight;\r\n\t\t\t\tbreak;\r\n\t\t}\r\n \r\n\t\treturn {x, y, offset};\r\n\t}\r\n \r\n\tshow(origin, position){\r\n\t\tvar x, y, parentEl, parentOffset, coords;\r\n\r\n\t\tif(this.destroyed || this.table.destroyed){\r\n\t\t\treturn this;\r\n\t\t}\r\n \r\n\t\tif(origin instanceof HTMLElement){\r\n\t\t\tparentEl = origin;\r\n\t\t\tcoords = this.elementPositionCoords(origin, position);\r\n \r\n\t\t\tparentOffset = coords.offset;\r\n\t\t\tx = coords.x;\r\n\t\t\ty = coords.y;\r\n \r\n\t\t}else if(typeof origin === \"number\"){\r\n\t\t\tparentOffset = {top:0, left:0};\r\n\t\t\tx = origin;\r\n\t\t\ty = position;\r\n\t\t}else{\r\n\t\t\tcoords = this.containerEventCoords(origin);\r\n \r\n\t\t\tx = coords.x;\r\n\t\t\ty = coords.y;\r\n \r\n\t\t\tthis.reversedX = false;\r\n\t\t}\r\n \r\n\t\tthis.element.style.top = y + \"px\";\r\n\t\tthis.element.style.left = x + \"px\";\r\n \r\n\t\tthis.container.appendChild(this.element);\r\n \r\n\t\tif(typeof this.renderedCallback === \"function\"){\r\n\t\t\tthis.renderedCallback();\r\n\t\t}\r\n \r\n\t\tthis._fitToScreen(x, y, parentEl, parentOffset, position);\r\n \r\n\t\tthis.visible = true;\r\n\r\n\t\tthis.subscribe(\"table-destroy\", this.destroyBinding);\r\n\r\n\t\tthis.element.addEventListener(\"mousedown\", (e) => {\r\n\t\t\te.stopPropagation();\r\n\t\t});\r\n \r\n\t\treturn this;\r\n\t}\r\n \r\n\t_fitToScreen(x, y, parentEl, parentOffset, position){\r\n\t\tvar scrollTop = this.container === document.body ? document.documentElement.scrollTop : this.container.scrollTop;\r\n\r\n\t\t//move menu to start on right edge if it is too close to the edge of the screen\r\n\t\tif((x + this.element.offsetWidth) >= this.container.offsetWidth || this.reversedX){\r\n\t\t\tthis.element.style.left = \"\";\r\n \r\n\t\t\tif(parentEl){\r\n\t\t\t\tthis.element.style.right = (this.container.offsetWidth - parentOffset.left) + \"px\";\r\n\t\t\t}else{\r\n\t\t\t\tthis.element.style.right = (this.container.offsetWidth - x) + \"px\";\r\n\t\t\t}\r\n \r\n\t\t\tthis.reversedX = true;\r\n\t\t}\r\n\r\n\t\t//move menu to start on bottom edge if it is too close to the edge of the screen\r\n\t\tif((y + this.element.offsetHeight) > Math.max(this.container.offsetHeight, scrollTop ? this.container.scrollHeight : 0)) {\r\n\t\t\tif(parentEl){\r\n\t\t\t\tswitch(position){\r\n\t\t\t\t\tcase \"bottom\":\r\n\t\t\t\t\t\tthis.element.style.top = (parseInt(this.element.style.top) - this.element.offsetHeight - parentEl.offsetHeight - 1) + \"px\";\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tdefault:\r\n\t\t\t\t\t\tthis.element.style.top = (parseInt(this.element.style.top) - this.element.offsetHeight + parentEl.offsetHeight + 1) + \"px\";\r\n\t\t\t\t}\r\n \r\n\t\t\t}else{\r\n\t\t\t\tthis.element.style.top = (parseInt(this.element.style.top) - this.element.offsetHeight) + \"px\";\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n \r\n\tisVisible(){\r\n\t\treturn this.visible;\r\n\t}\r\n \r\n\thideOnBlur(callback){\r\n\t\tthis.blurable = true;\r\n \r\n\t\tif(this.visible){\r\n\t\t\tsetTimeout(() => {\r\n\t\t\t\tthis.table.rowManager.element.addEventListener(\"scroll\", this.blurEvent);\r\n\t\t\t\tthis.subscribe(\"cell-editing\", this.blurEvent);\r\n\t\t\t\tdocument.body.addEventListener(\"click\", this.blurEvent);\r\n\t\t\t\tdocument.body.addEventListener(\"contextmenu\", this.blurEvent);\r\n\t\t\t\tdocument.body.addEventListener(\"mousedown\", this.blurEvent);\r\n\t\t\t\twindow.addEventListener(\"resize\", this.blurEvent);\r\n\t\t\t\tdocument.body.addEventListener(\"keydown\", this.escEvent);\r\n\r\n\t\t\t}, 100);\r\n \r\n\t\t\tthis.blurCallback = callback;\r\n\t\t}\r\n \r\n\t\treturn this;\r\n\t}\r\n \r\n\t_escapeCheck(e){\r\n\t\tif(e.keyCode == 27){\r\n\t\t\tthis.hide();\r\n\t\t}\r\n\t}\r\n\r\n\tblockHide(){\r\n\t\tthis.hideable = false;\r\n\t}\r\n\r\n\trestoreHide(){\r\n\t\tthis.hideable = true;\r\n\t}\r\n \r\n\thide(silent = false){\r\n\t\tif(this.visible && this.hideable){\r\n\t\t\tif(this.blurable){\r\n\t\t\t\tdocument.body.removeEventListener(\"keydown\", this.escEvent);\r\n\t\t\t\tdocument.body.removeEventListener(\"click\", this.blurEvent);\r\n\t\t\t\tdocument.body.removeEventListener(\"contextmenu\", this.blurEvent);\r\n\t\t\t\tdocument.body.removeEventListener(\"mousedown\", this.blurEvent);\r\n\t\t\t\twindow.removeEventListener(\"resize\", this.blurEvent);\r\n\t\t\t\tthis.table.rowManager.element.removeEventListener(\"scroll\", this.blurEvent);\r\n\t\t\t\tthis.unsubscribe(\"cell-editing\", this.blurEvent);\r\n\t\t\t}\r\n \r\n\t\t\tif(this.childPopup){\r\n\t\t\t\tthis.childPopup.hide();\r\n\t\t\t}\r\n \r\n\t\t\tif(this.parent){\r\n\t\t\t\tthis.parent.childPopup = null;\r\n\t\t\t}\r\n \r\n\t\t\tif(this.element.parentNode){\r\n\t\t\t\tthis.element.parentNode.removeChild(this.element);\r\n\t\t\t}\r\n\r\n\t\t\tthis.visible = false;\r\n\r\n\t\t\tif(this.blurCallback && !silent){\r\n\t\t\t\tthis.blurCallback();\r\n\t\t\t}\r\n\r\n\t\t\tthis.unsubscribe(\"table-destroy\", this.destroyBinding);\r\n\t\t}\r\n \r\n\t\treturn this;\r\n\t}\r\n \r\n\tchild(element){\r\n\t\tif(this.childPopup){\r\n\t\t\tthis.childPopup.hide();\r\n\t\t}\r\n \r\n\t\tthis.childPopup = new Popup(this.table, element, this);\r\n \r\n\t\treturn this.childPopup;\r\n\t}\r\n}","import CoreFeature from './CoreFeature.js';\r\nimport Popup from './tools/Popup.js';\r\n\r\nclass Module extends CoreFeature{\r\n\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 overridden 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 Registration ///\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] = (...args) => {\r\n\t\t\t\tthis.table.initGuard(name);\r\n\r\n\t\t\t\treturn func(...args);\r\n\t\t\t};\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Unable to bind table function, name already in use\", name);\r\n\t\t}\r\n\t}\r\n\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\t///////////////////////////////////\r\n\t//////// Footer Management ////////\r\n\t///////////////////////////////////\r\n\r\n\tfooterAppend(element){\r\n\t\treturn this.table.footerManager.append(element);\r\n\t}\r\n\r\n\tfooterPrepend(element){\r\n\t\treturn this.table.footerManager.prepend(element);\r\n\t}\r\n\r\n\tfooterRemove(element){\r\n\t\treturn this.table.footerManager.remove(element);\r\n\t} \r\n\r\n\t///////////////////////////////////\r\n\t//////// Popups Management ////////\r\n\t///////////////////////////////////\r\n\t\r\n\tpopup(menuEl, menuContainer){\r\n\t\treturn new Popup(this.table, menuEl, menuContainer);\r\n\t}\r\n\r\n\t///////////////////////////////////\r\n\t//////// Alert Management ////////\r\n\t///////////////////////////////////\r\n\r\n\talert(content, type){\r\n\t\treturn this.table.alertManager.alert(content, type);\r\n\t}\r\n\r\n\tclearAlert(){\r\n\t\treturn this.table.alertManager.clear();\r\n\t}\r\n\t\r\n}\r\n\r\nexport default Module;","//resize columns to fit data they contain and stretch row to fill table, also used for fitDataTable\r\nexport default function(columns, forced){\r\n\tcolumns.forEach(function(column){\r\n\t\tcolumn.reinitializeWidth();\r\n\t});\r\n\r\n\tif(this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)){\r\n\t\tthis.table.modules.responsiveLayout.update();\r\n\t}\r\n}","import fitData from './modes/fitData.js';\r\nimport fitDataGeneral from './modes/fitDataGeneral.js';\r\nimport fitDataStretch from './modes/fitDataStretch.js';\r\nimport fitColumns from './modes/fitColumns.js';\r\n\r\nexport default {\r\n\tfitData:fitData,\r\n\tfitDataFill:fitDataGeneral,\r\n\tfitDataTable:fitDataGeneral,\r\n\tfitDataStretch:fitDataStretch,\r\n\tfitColumns:fitColumns ,\r\n};","//resize columns to fit data they contain\r\nexport default function(columns, forced){\r\n\tif(forced){\r\n\t\tthis.table.columnManager.renderer.reinitializeColumnWidths(columns);\r\n\t}\r\n\t\r\n\tif(this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)){\r\n\t\tthis.table.modules.responsiveLayout.update();\r\n\t}\r\n}","//resize columns to fit data the contain and stretch last column to fill table\r\nexport default function(columns, forced){\r\n\tvar colsWidth = 0,\r\n\ttableWidth = this.table.rowManager.element.clientWidth,\r\n\tgap = 0,\r\n\tlastCol = false;\r\n\r\n\tcolumns.forEach((column, i) => {\r\n\t\tif(!column.widthFixed){\r\n\t\t\tcolumn.reinitializeWidth();\r\n\t\t}\r\n\r\n\t\tif(this.table.options.responsiveLayout ? column.modules.responsive.visible : column.visible){\r\n\t\t\tlastCol = column;\r\n\t\t}\r\n\r\n\t\tif(column.visible){\r\n\t\t\tcolsWidth += column.getWidth();\r\n\t\t}\r\n\t});\r\n\r\n\tif(lastCol){\r\n\t\tgap = tableWidth - colsWidth + lastCol.getWidth();\r\n\r\n\t\tif(this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)){\r\n\t\t\tlastCol.setWidth(0);\r\n\t\t\tthis.table.modules.responsiveLayout.update();\r\n\t\t}\r\n\r\n\t\tif(gap > 0){\r\n\t\t\tlastCol.setWidth(gap);\r\n\t\t}else{\r\n\t\t\tlastCol.reinitializeWidth();\r\n\t\t}\r\n\t}else{\r\n\t\tif(this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)){\r\n\t\t\tthis.table.modules.responsiveLayout.update();\r\n\t\t}\r\n\t}\r\n}","//resize columns to fit\r\nexport default function(columns, forced){\r\n\tvar totalWidth = this.table.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 across all columns\r\n\tvar flexColWidth = 0; //desired width of flexible columns\r\n\tvar flexColumns = []; //array of flexible width columns\r\n\tvar fixedShrinkColumns = []; //array of fixed width columns that can shrink\r\n\tvar flexShrinkUnits = 0; //total number of widthShrink blocks across all columns\r\n\tvar overflowWidth = 0; //horizontal overflow width\r\n\tvar gapFill = 0; //number of pixels to be added to final column to close and half pixel gaps\r\n\r\n\tfunction calcWidth(width){\r\n\t\tvar colWidth;\r\n\r\n\t\tif(typeof(width) == \"string\"){\r\n\t\t\tif(width.indexOf(\"%\") > -1){\r\n\t\t\t\tcolWidth = (totalWidth / 100) * parseInt(width);\r\n\t\t\t}else{\r\n\t\t\t\tcolWidth = parseInt(width);\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tcolWidth = width;\r\n\t\t}\r\n\r\n\t\treturn colWidth;\r\n\t}\r\n\r\n\t//ensure columns resize to take up the correct amount of space\r\n\tfunction scaleColumns(columns, freeSpace, colWidth, shrinkCols){\r\n\t\tvar oversizeCols = [],\r\n\t\toversizeSpace = 0,\r\n\t\tremainingSpace = 0,\r\n\t\tnextColWidth = 0,\r\n\t\tremainingFlexGrowUnits = flexGrowUnits,\r\n\t\tgap = 0,\r\n\t\tchangeUnits = 0,\r\n\t\tundersizeCols = [];\r\n\r\n\t\tfunction calcGrow(col){\r\n\t\t\treturn (colWidth * (col.column.definition.widthGrow || 1));\r\n\t\t}\r\n\r\n\t\tfunction calcShrink(col){\r\n\t\t\treturn (calcWidth(col.width) - (colWidth * (col.column.definition.widthShrink || 0)));\r\n\t\t}\r\n\r\n\t\tcolumns.forEach(function(col, i){\r\n\t\t\tvar width = shrinkCols ? calcShrink(col) : calcGrow(col);\r\n\t\t\tif(col.column.minWidth >= width){\r\n\t\t\t\toversizeCols.push(col);\r\n\t\t\t}else{\r\n\t\t\t\tif(col.column.maxWidth && col.column.maxWidth < width){\r\n\t\t\t\t\tcol.width = col.column.maxWidth;\r\n\t\t\t\t\tfreeSpace -= col.column.maxWidth;\r\n\r\n\t\t\t\t\tremainingFlexGrowUnits -= shrinkCols ? (col.column.definition.widthShrink || 1) : (col.column.definition.widthGrow || 1);\r\n\r\n\t\t\t\t\tif(remainingFlexGrowUnits){\r\n\t\t\t\t\t\tcolWidth = Math.floor(freeSpace/remainingFlexGrowUnits);\r\n\t\t\t\t\t}\r\n\t\t\t\t}else{\r\n\t\t\t\t\tundersizeCols.push(col);\r\n\t\t\t\t\tchangeUnits += shrinkCols ? (col.column.definition.widthShrink || 1) : (col.column.definition.widthGrow || 1);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tif(oversizeCols.length){\r\n\t\t\toversizeCols.forEach(function(col){\r\n\t\t\t\toversizeSpace += shrinkCols ? col.width - col.column.minWidth : col.column.minWidth;\r\n\t\t\t\tcol.width = col.column.minWidth;\r\n\t\t\t});\r\n\r\n\t\t\tremainingSpace = freeSpace - oversizeSpace;\r\n\r\n\t\t\tnextColWidth = changeUnits ? Math.floor(remainingSpace/changeUnits) : remainingSpace;\r\n\r\n\t\t\tgap = 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\tgapFill = scaleColumns(flexColumns, flexWidth, flexColWidth, false);\r\n\r\n\t//increase width of last column to account for rounding errors\r\n\tif(flexColumns.length && gapFill > 0){\r\n\t\tflexColumns[flexColumns.length-1].width += + gapFill;\r\n\t}\r\n\r\n\t//calculate space for columns to be shrunk into\r\n\tflexColumns.forEach(function(col){\r\n\t\tflexWidth -= col.width;\r\n\t});\r\n\r\n\toverflowWidth = Math.abs(gapFill) + flexWidth;\r\n\r\n\t//shrink oversize columns if there is no available space\r\n\tif(overflowWidth > 0 && flexShrinkUnits){\r\n\t\tgapFill = scaleColumns(fixedShrinkColumns, overflowWidth, Math.floor(overflowWidth / flexShrinkUnits), true);\r\n\t}\r\n\r\n\t//decrease width of last column to account for rounding errors\r\n\tif(fixedShrinkColumns.length){\r\n\t\tfixedShrinkColumns[fixedShrinkColumns.length-1].width -= gapFill;\r\n\t}\r\n\r\n\tflexColumns.forEach(function(col){\r\n\t\tcol.column.setWidth(col.width);\r\n\t});\r\n\r\n\tfixedShrinkColumns.forEach(function(col){\r\n\t\tcol.column.setWidth(col.width);\r\n\t});\r\n}","import Module from '../../core/Module.js';\r\n\r\nimport defaultModes from './defaults/modes.js';\r\n\r\nclass Layout extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table, \"layout\");\r\n\r\n\t\tthis.mode = null;\r\n\r\n\t\tthis.registerTableOption(\"layout\", \"fitData\"); //layout type\r\n\t\tthis.registerTableOption(\"layoutColumnsOnNewData\", false); //update column widths on setData\r\n\r\n\t\tthis.registerColumnOption(\"widthGrow\");\r\n\t\tthis.registerColumnOption(\"widthShrink\");\r\n\t}\r\n\r\n\t//initialize layout system\r\n\tinitialize(){\r\n\t\tvar layout = this.table.options.layout;\r\n\r\n\t\tif(Layout.modes[layout]){\r\n\t\t\tthis.mode = layout;\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Layout Error - invalid mode set, defaulting to 'fitData' : \" + layout);\r\n\t\t\tthis.mode = 'fitData';\r\n\t\t}\r\n\r\n\t\tthis.table.element.setAttribute(\"tabulator-layout\", this.mode);\r\n\t}\r\n\r\n\tgetMode(){\r\n\t\treturn this.mode;\r\n\t}\r\n\r\n\t//trigger table layout\r\n\tlayout(dataChanged){\r\n\t\tthis.dispatch(\"layout-refreshing\");\r\n\t\tLayout.modes[this.mode].call(this, this.table.columnManager.columnsByIndex, dataChanged);\r\n\t\tthis.dispatch(\"layout-refreshed\");\r\n\t}\r\n}\r\n\r\nLayout.moduleName = \"layout\";\r\n\r\n//load defaults\r\nLayout.modes = defaultModes;\r\n\r\nexport default Layout;","import Module from '../../core/Module.js';\r\n\r\nimport Helpers from '../../core/tools/Helpers.js';\r\n\r\nimport defaultLangs from './defaults/langs.js';\r\n\r\nclass Localize extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.locale = \"default\"; //current locale\r\n\t\tthis.lang = false; //current language\r\n\t\tthis.bindings = {}; //update events to call when locale is changed\r\n\t\tthis.langList = {};\r\n\r\n\t\tthis.registerTableOption(\"locale\", false); //current system language\r\n\t\tthis.registerTableOption(\"langs\", {});\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tthis.langList = Helpers.deepClone(Localize.langs);\r\n\r\n\t\tif(this.table.options.columnDefaults.headerFilterPlaceholder !== false){\r\n\t\t\tthis.setHeaderFilterPlaceholder(this.table.options.columnDefaults.headerFilterPlaceholder);\r\n\t\t}\r\n\r\n\t\tfor(let locale in this.table.options.langs){\r\n\t\t\tthis.installLang(locale, this.table.options.langs[locale]);\r\n\t\t}\r\n\r\n\t\tthis.setLocale(this.table.options.locale);\r\n\r\n\t\tthis.registerTableFunction(\"setLocale\", this.setLocale.bind(this));\r\n\t\tthis.registerTableFunction(\"getLocale\", this.getLocale.bind(this));\r\n\t\tthis.registerTableFunction(\"getLang\", this.getLang.bind(this));\r\n\t}\r\n\r\n\t//set header placeholder\r\n\tsetHeaderFilterPlaceholder(placeholder){\r\n\t\tthis.langList.default.headerFilters.default = placeholder;\r\n\t}\r\n\r\n\t//set header filter placeholder by column\r\n\tsetHeaderFilterColumnPlaceholder(column, placeholder){\r\n\t\tthis.langList.default.headerFilters.columns[column] = placeholder;\r\n\r\n\t\tif(this.lang && !this.lang.headerFilters.columns[column]){\r\n\t\t\tthis.lang.headerFilters.columns[column] = placeholder;\r\n\t\t}\r\n\t}\r\n\r\n\t//setup a lang description object\r\n\tinstallLang(locale, lang){\r\n\t\tif(this.langList[locale]){\r\n\t\t\tthis._setLangProp(this.langList[locale], lang);\r\n\t\t}else{\r\n\t\t\tthis.langList[locale] = lang;\r\n\t\t}\r\n\t}\r\n\r\n\t_setLangProp(lang, values){\r\n\t\tfor(let key in values){\r\n\t\t\tif(lang[key] && typeof lang[key] == \"object\"){\r\n\t\t\t\tthis._setLangProp(lang[key], values[key]);\r\n\t\t\t}else{\r\n\t\t\t\tlang[key] = values[key];\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//set current locale\r\n\tsetLocale(desiredLocale){\r\n\t\tdesiredLocale = desiredLocale || \"default\";\r\n\r\n\t\t//fill in any matching language values\r\n\t\tfunction traverseLang(trans, path){\r\n\t\t\tfor(var prop in trans){\r\n\t\t\t\tif(typeof trans[prop] == \"object\"){\r\n\t\t\t\t\tif(!path[prop]){\r\n\t\t\t\t\t\tpath[prop] = {};\r\n\t\t\t\t\t}\r\n\t\t\t\t\ttraverseLang(trans[prop], path[prop]);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tpath[prop] = trans[prop];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//determining correct locale to load\r\n\t\tif(desiredLocale === true && navigator.language){\r\n\t\t\t//get local from system\r\n\t\t\tdesiredLocale = navigator.language.toLowerCase();\r\n\t\t}\r\n\r\n\t\tif(desiredLocale){\r\n\t\t\t//if locale is not set, check for matching top level locale else use default\r\n\t\t\tif(!this.langList[desiredLocale]){\r\n\t\t\t\tlet prefix = desiredLocale.split(\"-\")[0];\r\n\r\n\t\t\t\tif(this.langList[prefix]){\r\n\t\t\t\t\tconsole.warn(\"Localization Error - Exact matching locale not found, using closest match: \", desiredLocale, prefix);\r\n\t\t\t\t\tdesiredLocale = prefix;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.warn(\"Localization Error - Matching locale not found, using default: \", desiredLocale);\r\n\t\t\t\t\tdesiredLocale = \"default\";\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.locale = desiredLocale;\r\n\r\n\t\t//load default lang template\r\n\t\tthis.lang = Helpers.deepClone(this.langList.default || {});\r\n\r\n\t\tif(desiredLocale != \"default\"){\r\n\t\t\ttraverseLang(this.langList[desiredLocale], this.lang);\r\n\t\t}\r\n\r\n\t\tthis.dispatchExternal(\"localized\", this.locale, this.lang);\r\n\r\n\t\tthis._executeBindings();\r\n\t}\r\n\r\n\t//get current locale\r\n\tgetLocale(locale){\r\n\t\treturn this.locale;\r\n\t}\r\n\r\n\t//get lang object for given local or current if none provided\r\n\tgetLang(locale){\r\n\t\treturn locale ? this.langList[locale] : this.lang;\r\n\t}\r\n\r\n\t//get text for current locale\r\n\tgetText(path, value){\r\n\t\tvar fillPath = value ? path + \"|\" + value : path,\r\n\t\tpathArray = fillPath.split(\"|\"),\r\n\t\ttext = this._getLangElement(pathArray, this.locale);\r\n\r\n\t\t// if(text === false){\r\n\t\t// \tconsole.warn(\"Localization Error - Matching localized text not found for given path: \", path);\r\n\t\t// }\r\n\r\n\t\treturn text || \"\";\r\n\t}\r\n\r\n\t//traverse langs object and find localized copy\r\n\t_getLangElement(path, locale){\r\n\t\tvar root = this.lang;\r\n\r\n\t\tpath.forEach(function(level){\r\n\t\t\tvar rootPath;\r\n\r\n\t\t\tif(root){\r\n\t\t\t\trootPath = root[level];\r\n\r\n\t\t\t\tif(typeof rootPath != \"undefined\"){\r\n\t\t\t\t\troot = rootPath;\r\n\t\t\t\t}else{\r\n\t\t\t\t\troot = false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn root;\r\n\t}\r\n\r\n\t//set update binding\r\n\tbind(path, callback){\r\n\t\tif(!this.bindings[path]){\r\n\t\t\tthis.bindings[path] = [];\r\n\t\t}\r\n\r\n\t\tthis.bindings[path].push(callback);\r\n\r\n\t\tcallback(this.getText(path), this.lang);\r\n\t}\r\n\r\n\t//iterate through bindings and trigger updates\r\n\t_executeBindings(){\r\n\t\tfor(let path in this.bindings){\r\n\t\t\tthis.bindings[path].forEach((binding) => {\r\n\t\t\t\tbinding(this.getText(path), this.lang);\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n}\r\n\r\nLocalize.moduleName = \"localize\";\r\n\r\n//load defaults\r\nLocalize.langs = defaultLangs;\r\n\r\nexport default Localize;","export default {\r\n\t\"default\":{ //hold default locale text\r\n\t\t\"groups\":{\r\n\t\t\t\"item\":\"item\",\r\n\t\t\t\"items\":\"items\",\r\n\t\t},\r\n\t\t\"columns\":{\r\n\t\t},\r\n\t\t\"data\":{\r\n\t\t\t\"loading\":\"Loading\",\r\n\t\t\t\"error\":\"Error\",\r\n\t\t},\r\n\t\t\"pagination\":{\r\n\t\t\t\"page_size\":\"Page Size\",\r\n\t\t\t\"page_title\":\"Show Page\",\r\n\t\t\t\"first\":\"First\",\r\n\t\t\t\"first_title\":\"First Page\",\r\n\t\t\t\"last\":\"Last\",\r\n\t\t\t\"last_title\":\"Last Page\",\r\n\t\t\t\"prev\":\"Prev\",\r\n\t\t\t\"prev_title\":\"Prev Page\",\r\n\t\t\t\"next\":\"Next\",\r\n\t\t\t\"next_title\":\"Next Page\",\r\n\t\t\t\"all\":\"All\",\r\n\t\t\t\"counter\":{\r\n\t\t\t\t\"showing\": \"Showing\",\r\n\t\t\t\t\"of\": \"of\",\r\n\t\t\t\t\"rows\": \"rows\",\r\n\t\t\t\t\"pages\": \"pages\",\r\n\t\t\t}\r\n\t\t},\r\n\t\t\"headerFilters\":{\r\n\t\t\t\"default\":\"filter column...\",\r\n\t\t\t\"columns\":{}\r\n\t\t}\r\n\t},\r\n};","import Module from '../../core/Module.js';\r\nimport TableRegistry from '../../core/tools/TableRegistry.js';\r\n\r\nclass Comms extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tthis.registerTableFunction(\"tableComms\", this.receive.bind(this));\r\n\t}\r\n\r\n\tgetConnections(selectors){\r\n\t\tvar connections = [],\r\n\t\tconnection;\r\n\r\n\t\tconnection = TableRegistry.lookupTable(selectors);\r\n\r\n\t\tconnection.forEach((con) =>{\r\n\t\t\tif(this.table !== con){\r\n\t\t\t\tconnections.push(con);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn connections;\r\n\t}\r\n\r\n\tsend(selectors, module, action, data){\r\n\t\tvar connections = this.getConnections(selectors);\r\n\r\n\t\tconnections.forEach((connection) => {\r\n\t\t\tconnection.tableComms(this.table.element, module, action, data);\r\n\t\t});\r\n\r\n\t\tif(!connections.length && selectors){\r\n\t\t\tconsole.warn(\"Table Connection Error - No tables matching selector found\", selectors);\r\n\t\t}\r\n\t}\r\n\r\n\treceive(table, module, action, data){\r\n\t\tif(this.table.modExists(module)){\r\n\t\t\treturn this.table.modules[module].commsReceived(table, action, data);\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Inter-table Comms Error - no such module:\", module);\r\n\t\t}\r\n\t}\r\n}\r\n\r\nComms.moduleName = \"comms\";\r\n\r\nexport default Comms;","import * as coreModules from '../modules/core.js';\r\nimport TableRegistry from './TableRegistry.js';\r\n\r\nexport default class ModuleBinder {\r\n\t\r\n\tconstructor(tabulator, modules){\r\n\t\tthis.bindStaticFunctionality(tabulator);\r\n\t\tthis.bindModules(tabulator, coreModules, true);\r\n\t\t\r\n\t\tif(modules){\r\n\t\t\tthis.bindModules(tabulator, modules);\r\n\t\t}\r\n\t}\r\n\t\r\n\tbindStaticFunctionality(tabulator){\r\n\t\ttabulator.moduleBindings = {};\r\n\t\t\r\n\t\ttabulator.extendModule = function(name, property, values){\r\n\t\t\tif(tabulator.moduleBindings[name]){\r\n\t\t\t\tvar source = tabulator.moduleBindings[name][property];\r\n\t\t\t\t\r\n\t\t\t\tif(source){\r\n\t\t\t\t\tif(typeof values == \"object\"){\r\n\t\t\t\t\t\tfor(let key in values){\r\n\t\t\t\t\t\t\tsource[key] = values[key];\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tconsole.warn(\"Module Error - Invalid value type, it must be an object\");\r\n\t\t\t\t\t}\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.warn(\"Module Error - property does not exist:\", property);\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Module Error - module does not exist:\", name);\r\n\t\t\t}\r\n\t\t};\r\n\t\t\r\n\t\ttabulator.registerModule = function(modules){\r\n\t\t\tif(!Array.isArray(modules)){\r\n\t\t\t\tmodules = [modules];\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tmodules.forEach((mod) => {\r\n\t\t\t\ttabulator.registerModuleBinding(mod);\r\n\t\t\t});\r\n\t\t};\r\n\t\t\r\n\t\ttabulator.registerModuleBinding = function(mod){\r\n\t\t\ttabulator.moduleBindings[mod.moduleName] = mod;\r\n\t\t};\r\n\t\t\r\n\t\ttabulator.findTable = function(query){\r\n\t\t\tvar results = TableRegistry.lookupTable(query, true);\r\n\t\t\treturn Array.isArray(results) && !results.length ? false : results;\r\n\t\t};\r\n\t\t\r\n\t\t//ensure that module are bound to instantiated function\r\n\t\ttabulator.prototype.bindModules = function(){\r\n\t\t\tvar orderedStartMods = [],\r\n\t\t\torderedEndMods = [],\r\n\t\t\tunOrderedMods = [];\r\n\t\t\t\r\n\t\t\tthis.modules = {};\r\n\t\t\t\r\n\t\t\tfor(var name in tabulator.moduleBindings){\r\n\t\t\t\tlet mod = tabulator.moduleBindings[name];\r\n\t\t\t\tlet module = new mod(this);\r\n\t\t\t\t\r\n\t\t\t\tthis.modules[name] = module;\r\n\t\t\t\t\r\n\t\t\t\tif(mod.prototype.moduleCore){\r\n\t\t\t\t\tthis.modulesCore.push(module);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tif(mod.moduleInitOrder){\r\n\t\t\t\t\t\tif(mod.moduleInitOrder < 0){\r\n\t\t\t\t\t\t\torderedStartMods.push(module);\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\torderedEndMods.push(module);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tunOrderedMods.push(module);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\torderedStartMods.sort((a, b) => a.moduleInitOrder > b.moduleInitOrder ? 1 : -1);\r\n\t\t\torderedEndMods.sort((a, b) => a.moduleInitOrder > b.moduleInitOrder ? 1 : -1);\r\n\t\t\t\r\n\t\t\tthis.modulesRegular = orderedStartMods.concat(unOrderedMods.concat(orderedEndMods));\r\n\t\t};\r\n\t}\r\n\t\r\n\tbindModules(tabulator, modules, core){\r\n\t\tvar mods = Object.values(modules);\r\n\t\t\r\n\t\tif(core){\r\n\t\t\tmods.forEach((mod) => {\r\n\t\t\t\tmod.prototype.moduleCore = true;\r\n\t\t\t});\r\n\t\t}\r\n\t\t\r\n\t\ttabulator.registerModule(mods);\r\n\t}\r\n}","import CoreFeature from '../CoreFeature.js';\r\n\r\nexport default class Alert extends CoreFeature{\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n \r\n\t\tthis.element = this._createAlertElement();\r\n\t\tthis.msgElement = this._createMsgElement();\r\n\t\tthis.type = null;\r\n \r\n\t\tthis.element.appendChild(this.msgElement);\r\n\t}\r\n \r\n\t_createAlertElement(){\r\n\t\tvar el = document.createElement(\"div\");\r\n\t\tel.classList.add(\"tabulator-alert\");\r\n\t\treturn el;\r\n\t}\r\n \r\n\t_createMsgElement(){\r\n\t\tvar el = document.createElement(\"div\");\r\n\t\tel.classList.add(\"tabulator-alert-msg\");\r\n\t\tel.setAttribute(\"role\", \"alert\");\r\n\t\treturn el;\r\n\t}\r\n \r\n\t_typeClass(){\r\n\t\treturn \"tabulator-alert-state-\" + this.type;\r\n\t}\r\n \r\n\talert(content, type = \"msg\"){\r\n\t\tif(content){\r\n\t\t\tthis.clear();\r\n \r\n\t\t\tthis.type = type;\r\n \r\n\t\t\twhile(this.msgElement.firstChild) this.msgElement.removeChild(this.msgElement.firstChild);\r\n \r\n\t\t\tthis.msgElement.classList.add(this._typeClass());\r\n \r\n\t\t\tif(typeof content === \"function\"){\r\n\t\t\t\tcontent = content();\r\n\t\t\t}\r\n \r\n\t\t\tif(content instanceof HTMLElement){\r\n\t\t\t\tthis.msgElement.appendChild(content);\r\n\t\t\t}else{\r\n\t\t\t\tthis.msgElement.innerHTML = content;\r\n\t\t\t}\r\n \r\n\t\t\tthis.table.element.appendChild(this.element);\r\n\t\t}\r\n\t}\r\n \r\n\tclear(){\r\n\t\tif(this.element.parentNode){\r\n\t\t\tthis.element.parentNode.removeChild(this.element);\r\n\t\t}\r\n \r\n\t\tthis.msgElement.classList.remove(this._typeClass());\r\n\t}\r\n}","'use strict';\r\n\r\nimport defaultOptions from './defaults/options.js';\r\n\r\nimport ColumnManager from './ColumnManager.js';\r\nimport RowManager from './RowManager.js';\r\nimport FooterManager from './FooterManager.js';\r\n\r\nimport InteractionMonitor from './tools/InteractionMonitor.js';\r\nimport ComponentFunctionBinder from './tools/ComponentFunctionBinder.js';\r\nimport DataLoader from './tools/DataLoader.js';\r\n\r\nimport ExternalEventBus from './tools/ExternalEventBus.js';\r\nimport InternalEventBus from './tools/InternalEventBus.js';\r\n\r\nimport DeprecationAdvisor from './tools/DeprecationAdvisor.js';\r\n\r\nimport TableRegistry from './tools/TableRegistry.js';\r\nimport ModuleBinder from './tools/ModuleBinder.js';\r\n\r\nimport OptionsList from './tools/OptionsList.js';\r\n\r\nimport Alert from './tools/Alert.js';\r\n\r\nclass Tabulator {\r\n\t\r\n\tconstructor(element, options){\r\n\t\t\r\n\t\tthis.options = {};\r\n\t\t\r\n\t\tthis.columnManager = null; // hold Column Manager\r\n\t\tthis.rowManager = null; //hold Row Manager\r\n\t\tthis.footerManager = null; //holder Footer Manager\r\n\t\tthis.alertManager = null; //hold Alert Manager\r\n\t\tthis.vdomHoz = null; //holder horizontal virtual dom\r\n\t\tthis.externalEvents = null; //handle external event messaging\r\n\t\tthis.eventBus = null; //handle internal event messaging\r\n\t\tthis.interactionMonitor = false; //track user interaction\r\n\t\tthis.browser = \"\"; //hold current browser type\r\n\t\tthis.browserSlow = false; //handle reduced functionality for slower browsers\r\n\t\tthis.browserMobile = false; //check if running on mobile, prevent resize cancelling edit on keyboard appearance\r\n\t\tthis.rtl = false; //check if the table is in RTL mode\r\n\t\tthis.originalElement = null; //hold original table element if it has been replaced\r\n\t\t\r\n\t\tthis.componentFunctionBinder = new ComponentFunctionBinder(this); //bind component functions\r\n\t\tthis.dataLoader = false; //bind component functions\r\n\t\t\r\n\t\tthis.modules = {}; //hold all modules bound to this table\r\n\t\tthis.modulesCore = []; //hold core modules bound to this table (for initialization purposes)\r\n\t\tthis.modulesRegular = []; //hold regular modules bound to this table (for initialization purposes)\r\n\t\t\r\n\t\tthis.deprecationAdvisor = new DeprecationAdvisor(this);\r\n\t\tthis.optionsList = new OptionsList(this, \"table constructor\");\r\n\t\t\r\n\t\tthis.initialized = false;\r\n\t\tthis.destroyed = false;\r\n\t\t\r\n\t\tif(this.initializeElement(element)){\r\n\t\t\t\r\n\t\t\tthis.initializeCoreSystems(options);\r\n\t\t\t\r\n\t\t\t//delay table creation to allow event bindings immediately after the constructor\r\n\t\t\tsetTimeout(() => {\r\n\t\t\t\tthis._create();\r\n\t\t\t});\r\n\t\t}\r\n\t\t\r\n\t\tTableRegistry.register(this); //register table for inter-device communication\r\n\t}\r\n\t\r\n\tinitializeElement(element){\r\n\t\tif(typeof HTMLElement !== \"undefined\" && element instanceof HTMLElement){\r\n\t\t\tthis.element = element;\r\n\t\t\treturn true;\r\n\t\t}else if(typeof element === \"string\"){\r\n\t\t\tthis.element = document.querySelector(element);\r\n\t\t\t\r\n\t\t\tif(this.element){\r\n\t\t\t\treturn true;\r\n\t\t\t}else{\r\n\t\t\t\tconsole.error(\"Tabulator Creation Error - no element found matching selector: \", element);\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tconsole.error(\"Tabulator Creation Error - Invalid element provided:\", element);\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\t\r\n\tinitializeCoreSystems(options){\r\n\t\tthis.columnManager = new ColumnManager(this);\r\n\t\tthis.rowManager = new RowManager(this);\r\n\t\tthis.footerManager = new FooterManager(this);\r\n\t\tthis.dataLoader = new DataLoader(this);\r\n\t\tthis.alertManager = new Alert(this);\r\n\t\t\r\n\t\tthis.bindModules();\r\n\t\t\r\n\t\tthis.options = this.optionsList.generate(Tabulator.defaultOptions, options);\r\n\t\t\r\n\t\tthis._clearObjectPointers();\r\n\t\t\r\n\t\tthis._mapDeprecatedFunctionality();\r\n\t\t\r\n\t\tthis.externalEvents = new ExternalEventBus(this, this.options, this.options.debugEventsExternal);\r\n\t\tthis.eventBus = new InternalEventBus(this.options.debugEventsInternal);\r\n\t\t\r\n\t\tthis.interactionMonitor = new InteractionMonitor(this);\r\n\t\t\r\n\t\tthis.dataLoader.initialize();\r\n\t\t// this.columnManager.initialize();\r\n\t\t// this.rowManager.initialize();\r\n\t\tthis.footerManager.initialize();\r\n\t}\r\n\t\r\n\t//convert deprecated functionality to new functions\r\n\t_mapDeprecatedFunctionality(){\r\n\t\t//all previously deprecated functionality removed in the 5.0 release\r\n\t}\r\n\t\r\n\t_clearSelection(){\r\n\t\t\r\n\t\tthis.element.classList.add(\"tabulator-block-select\");\r\n\t\t\r\n\t\tif (window.getSelection) {\r\n\t\t\tif (window.getSelection().empty) { // Chrome\r\n\t\t\t\twindow.getSelection().empty();\r\n\t\t\t} else if (window.getSelection().removeAllRanges) { // Firefox\r\n\t\t\t\twindow.getSelection().removeAllRanges();\r\n\t\t\t}\r\n\t\t} else if (document.selection) { // IE?\r\n\t\t\tdocument.selection.empty();\r\n\t\t}\r\n\t\t\r\n\t\tthis.element.classList.remove(\"tabulator-block-select\");\r\n\t}\r\n\t\r\n\t//create table\r\n\t_create(){\r\n\t\tthis.externalEvents.dispatch(\"tableBuilding\");\r\n\t\tthis.eventBus.dispatch(\"table-building\");\r\n\t\t\r\n\t\tthis._rtlCheck();\r\n\t\t\r\n\t\tthis._buildElement();\r\n\t\t\r\n\t\tthis._initializeTable();\r\n\t\t\r\n\t\tthis._loadInitialData();\r\n\t\t\r\n\t\tthis.initialized = true;\r\n\t\t\r\n\t\tthis.externalEvents.dispatch(\"tableBuilt\");\r\n\t}\r\n\t\r\n\t_rtlCheck(){\r\n\t\tvar style = window.getComputedStyle(this.element);\r\n\t\t\r\n\t\tswitch(this.options.textDirection){\r\n\t\t\tcase\"auto\":\r\n\t\t\t\tif(style.direction !== \"rtl\"){\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t\r\n\t\t\tcase \"rtl\":\r\n\t\t\t\tthis.element.classList.add(\"tabulator-rtl\");\r\n\t\t\t\tthis.rtl = true;\r\n\t\t\t\tbreak;\r\n\t\t\t\r\n\t\t\tcase \"ltr\":\r\n\t\t\t\tthis.element.classList.add(\"tabulator-ltr\");\r\n\t\t\t\r\n\t\t\tdefault:\r\n\t\t\t\tthis.rtl = false;\r\n\t\t}\r\n\t}\r\n\t\r\n\t//clear pointers to objects in default config object\r\n\t_clearObjectPointers(){\r\n\t\tthis.options.columns = this.options.columns.slice(0);\r\n\t\t\r\n\t\tif(Array.isArray(this.options.data) && !this.options.reactiveData){\r\n\t\t\tthis.options.data = this.options.data.slice(0);\r\n\t\t}\r\n\t}\r\n\t\r\n\t//build tabulator element\r\n\t_buildElement(){\r\n\t\tvar element = this.element,\r\n\t\toptions = this.options,\r\n\t\tnewElement;\r\n\t\t\r\n\t\tif(element.tagName === \"TABLE\"){\r\n\t\t\tthis.originalElement = this.element;\r\n\t\t\tnewElement = document.createElement(\"div\");\r\n\t\t\t\r\n\t\t\t//transfer attributes to new element\r\n\t\t\tvar attributes = element.attributes;\r\n\t\t\t\r\n\t\t\t// loop through attributes and apply them on div\r\n\t\t\tfor(var i in attributes){\r\n\t\t\t\tif(typeof attributes[i] == \"object\"){\r\n\t\t\t\t\tnewElement.setAttribute(attributes[i].name, attributes[i].value);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\t// replace table with div element\r\n\t\t\telement.parentNode.replaceChild(newElement, element);\r\n\t\t\t\r\n\t\t\tthis.element = element = newElement;\r\n\t\t}\r\n\t\t\r\n\t\telement.classList.add(\"tabulator\");\r\n\t\telement.setAttribute(\"role\", \"grid\");\r\n\t\t\r\n\t\t//empty element\r\n\t\twhile(element.firstChild) element.removeChild(element.firstChild);\r\n\t\t\r\n\t\t//set table height\r\n\t\tif(options.height){\r\n\t\t\toptions.height = isNaN(options.height) ? options.height : options.height + \"px\";\r\n\t\t\telement.style.height = options.height;\r\n\t\t}\r\n\t\t\r\n\t\t//set table min height\r\n\t\tif(options.minHeight !== false){\r\n\t\t\toptions.minHeight = isNaN(options.minHeight) ? options.minHeight : options.minHeight + \"px\";\r\n\t\t\telement.style.minHeight = options.minHeight;\r\n\t\t}\r\n\t\t\r\n\t\t//set table maxHeight\r\n\t\tif(options.maxHeight !== false){\r\n\t\t\toptions.maxHeight = isNaN(options.maxHeight) ? options.maxHeight : options.maxHeight + \"px\";\r\n\t\t\telement.style.maxHeight = options.maxHeight;\r\n\t\t}\r\n\t}\r\n\t\r\n\t//initialize core systems and modules\r\n\t_initializeTable(){\r\n\t\tvar element = this.element,\r\n\t\toptions = this.options;\r\n\t\t\r\n\t\tthis.interactionMonitor.initialize();\r\n\t\t\r\n\t\tthis.columnManager.initialize();\r\n\t\tthis.rowManager.initialize();\r\n\t\t\r\n\t\tthis._detectBrowser();\r\n\t\t\r\n\t\t//initialize core modules\r\n\t\tthis.modulesCore.forEach((mod) => {\r\n\t\t\tmod.initialize();\r\n\t\t});\r\n\t\t\r\n\t\t//build table elements\r\n\t\telement.appendChild(this.columnManager.getElement());\r\n\t\telement.appendChild(this.rowManager.getElement());\r\n\t\t\r\n\t\tif(options.footerElement){\r\n\t\t\tthis.footerManager.activate();\r\n\t\t}\r\n\t\t\r\n\t\tif(options.autoColumns && options.data){\r\n\t\t\t\r\n\t\t\tthis.columnManager.generateColumnsFromRowData(this.options.data);\r\n\t\t}\r\n\t\t\r\n\t\t//initialize regular modules\r\n\t\tthis.modulesRegular.forEach((mod) => {\r\n\t\t\tmod.initialize();\r\n\t\t});\r\n\t\t\r\n\t\tthis.columnManager.setColumns(options.columns);\r\n\t\t\r\n\t\tthis.eventBus.dispatch(\"table-built\");\r\n\t}\r\n\t\r\n\t_loadInitialData(){\r\n\t\tthis.dataLoader.load(this.options.data);\r\n\t}\r\n\t\r\n\t//deconstructor\r\n\tdestroy(){\r\n\t\tvar element = this.element;\r\n\t\t\r\n\t\tthis.destroyed = true;\r\n\t\t\r\n\t\tTableRegistry.deregister(this); //deregister table from inter-device communication\r\n\t\t\r\n\t\tthis.eventBus.dispatch(\"table-destroy\");\r\n\t\t\r\n\t\t//clear row data\r\n\t\tthis.rowManager.rows.forEach(function(row){\r\n\t\t\trow.wipe();\r\n\t\t});\r\n\t\t\r\n\t\tthis.rowManager.rows = [];\r\n\t\tthis.rowManager.activeRows = [];\r\n\t\tthis.rowManager.displayRows = [];\r\n\t\t\r\n\t\t//clear DOM\r\n\t\twhile(element.firstChild) element.removeChild(element.firstChild);\r\n\t\telement.classList.remove(\"tabulator\");\r\n\r\n\t\tthis.externalEvents.dispatch(\"tableDestroyed\");\r\n\t}\r\n\t\r\n\t_detectBrowser(){\r\n\t\tvar ua = navigator.userAgent||navigator.vendor||window.opera;\r\n\t\t\r\n\t\tif(ua.indexOf(\"Trident\") > -1){\r\n\t\t\tthis.browser = \"ie\";\r\n\t\t\tthis.browserSlow = true;\r\n\t\t}else if(ua.indexOf(\"Edge\") > -1){\r\n\t\t\tthis.browser = \"edge\";\r\n\t\t\tthis.browserSlow = true;\r\n\t\t}else if(ua.indexOf(\"Firefox\") > -1){\r\n\t\t\tthis.browser = \"firefox\";\r\n\t\t\tthis.browserSlow = false;\r\n\t\t}else{\r\n\t\t\tthis.browser = \"other\";\r\n\t\t\tthis.browserSlow = false;\r\n\t\t}\r\n\t\t\r\n\t\tthis.browserMobile = /(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i.test(ua)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw-(n|u)|c55\\/|capi|ccwa|cdm-|cell|chtm|cldc|cmd-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc-s|devi|dica|dmob|do(c|p)o|ds(12|-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(-|_)|g1 u|g560|gene|gf-5|g-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd-(m|p|t)|hei-|hi(pt|ta)|hp( i|ip)|hs-c|ht(c(-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i-(20|go|ma)|i230|iac( |-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|-[a-w])|libw|lynx|m1-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|-([1-8]|c))|phil|pire|pl(ay|uc)|pn-2|po(ck|rt|se)|prox|psio|pt-g|qa-a|qc(07|12|21|32|60|-[2-7]|i-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h-|oo|p-)|sdk\\/|se(c(-|0|1)|47|mc|nd|ri)|sgh-|shar|sie(-|m)|sk-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h-|v-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl-|tdg-|tel(i|m)|tim-|t-mo|to(pl|sh)|ts(70|m-|m3|m5)|tx-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas-|your|zeto|zte-/i.test(ua.slice(0,4));\r\n\t}\r\n\t\r\n\tinitGuard(func, msg){\r\n\t\tvar stack, line;\r\n\t\t\r\n\t\tif(this.options.debugInitialization && !this.initialized){\r\n\t\t\tif(!func){\r\n\t\t\t\tstack = new Error().stack.split(\"\\n\");\r\n\t\t\t\t\r\n\t\t\t\tline = stack[0] == \"Error\" ? stack[2] : stack[1];\r\n\t\t\t\t\r\n\t\t\t\tif(line[0] == \" \"){\r\n\t\t\t\t\tfunc = line.trim().split(\" \")[1].split(\".\")[1];\r\n\t\t\t\t}else{\r\n\t\t\t\t\tfunc = line.trim().split(\"@\")[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tconsole.warn(\"Table Not Initialized - Calling the \" + func + \" function before the table is initialized may result in inconsistent behavior, Please wait for the `tableBuilt` event before calling this function.\" + (msg ? \" \" + msg : \"\"));\r\n\t\t}\r\n\t\t\r\n\t\treturn this.initialized;\r\n\t}\r\n\t\r\n\t////////////////// Data Handling //////////////////\r\n\t//block table redrawing\r\n\tblockRedraw(){\r\n\t\tthis.initGuard();\r\n\r\n\t\tthis.eventBus.dispatch(\"redraw-blocking\");\r\n\t\t\r\n\t\tthis.rowManager.blockRedraw();\r\n\t\tthis.columnManager.blockRedraw();\r\n\r\n\t\tthis.eventBus.dispatch(\"redraw-blocked\");\r\n\t}\r\n\t\r\n\t//restore table redrawing\r\n\trestoreRedraw(){\r\n\t\tthis.initGuard();\r\n\r\n\t\tthis.eventBus.dispatch(\"redraw-restoring\");\r\n\r\n\t\tthis.rowManager.restoreRedraw();\r\n\t\tthis.columnManager.restoreRedraw();\r\n\r\n\t\tthis.eventBus.dispatch(\"redraw-restored\");\r\n\t}\r\n\t\r\n\t//load data\r\n\tsetData(data, params, config){\r\n\t\tthis.initGuard(false, \"To set initial data please use the 'data' property in the table constructor.\");\r\n\t\t\r\n\t\treturn this.dataLoader.load(data, params, config, false);\r\n\t}\r\n\t\r\n\t//clear data\r\n\tclearData(){\r\n\t\tthis.initGuard();\r\n\t\t\r\n\t\tthis.dataLoader.blockActiveLoad();\r\n\t\tthis.rowManager.clearData();\r\n\t}\r\n\t\r\n\t//get table data array\r\n\tgetData(active){\r\n\t\treturn this.rowManager.getData(active);\r\n\t}\r\n\t\r\n\t//get table data array count\r\n\tgetDataCount(active){\r\n\t\treturn this.rowManager.getDataCount(active);\r\n\t}\r\n\t\r\n\t//replace data, keeping table in position with same sort\r\n\treplaceData(data, params, config){\r\n\t\tthis.initGuard();\r\n\t\t\r\n\t\treturn this.dataLoader.load(data, params, config, true, true);\r\n\t}\r\n\t\r\n\t//update table data\r\n\tupdateData(data){\r\n\t\tvar responses = 0;\r\n\t\t\r\n\t\tthis.initGuard();\r\n\t\t\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tthis.dataLoader.blockActiveLoad();\r\n\t\t\t\r\n\t\t\tif(typeof data === \"string\"){\r\n\t\t\t\tdata = JSON.parse(data);\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif(data){\r\n\t\t\t\tdata.forEach((item) => {\r\n\t\t\t\t\tvar row = this.rowManager.findRow(item[this.options.index]);\r\n\t\t\t\t\t\r\n\t\t\t\t\tif(row){\r\n\t\t\t\t\t\tresponses++;\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\trow.updateData(item)\r\n\t\t\t\t\t\t\t.then(()=>{\r\n\t\t\t\t\t\t\t\tresponses--;\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\tif(!responses){\r\n\t\t\t\t\t\t\t\t\tresolve();\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Update Error - No data provided\");\r\n\t\t\t\treject(\"Update Error - No data provided\");\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\t\r\n\taddData(data, pos, index){\r\n\t\tthis.initGuard();\r\n\t\t\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tthis.dataLoader.blockActiveLoad();\r\n\t\t\t\r\n\t\t\tif(typeof data === \"string\"){\r\n\t\t\t\tdata = JSON.parse(data);\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif(data){\r\n\t\t\t\tthis.rowManager.addRows(data, pos, index)\r\n\t\t\t\t\t.then((rows) => {\r\n\t\t\t\t\t\tvar output = [];\r\n\t\t\t\t\t\r\n\t\t\t\t\t\trows.forEach(function(row){\r\n\t\t\t\t\t\t\toutput.push(row.getComponent());\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t\r\n\t\t\t\t\t\tresolve(output);\r\n\t\t\t\t\t});\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Update Error - No data provided\");\r\n\t\t\t\treject(\"Update Error - No data provided\");\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\t\r\n\t//update table data\r\n\tupdateOrAddData(data){\r\n\t\tvar rows = [],\r\n\t\tresponses = 0;\r\n\t\t\r\n\t\tthis.initGuard();\r\n\t\t\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tthis.dataLoader.blockActiveLoad();\r\n\t\t\t\r\n\t\t\tif(typeof data === \"string\"){\r\n\t\t\t\tdata = JSON.parse(data);\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif(data){\r\n\t\t\t\tdata.forEach((item) => {\r\n\t\t\t\t\tvar row = this.rowManager.findRow(item[this.options.index]);\r\n\t\t\t\t\t\r\n\t\t\t\t\tresponses++;\r\n\t\t\t\t\t\r\n\t\t\t\t\tif(row){\r\n\t\t\t\t\t\trow.updateData(item)\r\n\t\t\t\t\t\t\t.then(()=>{\r\n\t\t\t\t\t\t\t\tresponses--;\r\n\t\t\t\t\t\t\t\trows.push(row.getComponent());\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\tif(!responses){\r\n\t\t\t\t\t\t\t\t\tresolve(rows);\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tthis.rowManager.addRows(item)\r\n\t\t\t\t\t\t\t.then((newRows)=>{\r\n\t\t\t\t\t\t\t\tresponses--;\r\n\t\t\t\t\t\t\t\trows.push(newRows[0].getComponent());\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\tif(!responses){\r\n\t\t\t\t\t\t\t\t\tresolve(rows);\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Update Error - No data provided\");\r\n\t\t\t\treject(\"Update Error - No data provided\");\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\t\r\n\t//get row object\r\n\tgetRow(index){\r\n\t\tvar row = this.rowManager.findRow(index);\r\n\t\t\r\n\t\tif(row){\r\n\t\t\treturn row.getComponent();\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Find Error - No matching row found:\", index);\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\t\r\n\t//get row object\r\n\tgetRowFromPosition(position){\r\n\t\tvar row = this.rowManager.getRowFromPosition(position);\r\n\t\t\r\n\t\tif(row){\r\n\t\t\treturn row.getComponent();\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Find Error - No matching row found:\", position);\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\t\r\n\t//delete row from table\r\n\tdeleteRow(index){\r\n\t\tvar foundRows = [];\r\n\t\t\r\n\t\tthis.initGuard();\r\n\t\t\r\n\t\tif(!Array.isArray(index)){\r\n\t\t\tindex = [index];\r\n\t\t}\r\n\t\t\r\n\t\t//find matching rows\r\n\t\tfor(let item of index){\r\n\t\t\tlet row = this.rowManager.findRow(item, true);\r\n\t\t\t\r\n\t\t\tif(row){\r\n\t\t\t\tfoundRows.push(row);\r\n\t\t\t}else{\r\n\t\t\t\tconsole.error(\"Delete Error - No matching row found:\", item);\r\n\t\t\t\treturn Promise.reject(\"Delete Error - No matching row found\");\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\t//sort rows into correct order to ensure smooth delete from table\r\n\t\tfoundRows.sort((a, b) => {\r\n\t\t\treturn this.rowManager.rows.indexOf(a) > this.rowManager.rows.indexOf(b) ? 1 : -1;\r\n\t\t});\r\n\t\t\r\n\t\t//delete rows\r\n\t\tfoundRows.forEach((row) =>{\r\n\t\t\trow.delete();\r\n\t\t});\r\n\t\t\r\n\t\tthis.rowManager.reRenderInPosition();\r\n\t\t\r\n\t\treturn Promise.resolve();\r\n\t}\r\n\t\r\n\t//add row to table\r\n\taddRow(data, pos, index){\r\n\t\tthis.initGuard();\r\n\t\t\r\n\t\tif(typeof data === \"string\"){\r\n\t\t\tdata = JSON.parse(data);\r\n\t\t}\r\n\t\t\r\n\t\treturn this.rowManager.addRows(data, pos, index)\r\n\t\t\t.then((rows)=>{\r\n\t\t\t\treturn rows[0].getComponent();\r\n\t\t\t});\r\n\t}\r\n\t\r\n\t//update a row if it exists otherwise create it\r\n\tupdateOrAddRow(index, data){\r\n\t\tvar row = this.rowManager.findRow(index);\r\n\t\t\r\n\t\tthis.initGuard();\r\n\t\t\r\n\t\tif(typeof data === \"string\"){\r\n\t\t\tdata = JSON.parse(data);\r\n\t\t}\r\n\t\t\r\n\t\tif(row){\r\n\t\t\treturn row.updateData(data)\r\n\t\t\t\t.then(()=>{\r\n\t\t\t\t\treturn row.getComponent();\r\n\t\t\t\t});\r\n\t\t}else{\r\n\t\t\treturn this.rowManager.addRows(data)\r\n\t\t\t\t.then((rows)=>{\r\n\t\t\t\t\treturn rows[0].getComponent();\r\n\t\t\t\t});\r\n\t\t}\r\n\t}\r\n\t\r\n\t//update row data\r\n\tupdateRow(index, data){\r\n\t\tvar row = this.rowManager.findRow(index);\r\n\t\t\r\n\t\tthis.initGuard();\r\n\t\t\r\n\t\tif(typeof data === \"string\"){\r\n\t\t\tdata = JSON.parse(data);\r\n\t\t}\r\n\t\t\r\n\t\tif(row){\r\n\t\t\treturn row.updateData(data)\r\n\t\t\t\t.then(()=>{\r\n\t\t\t\t\treturn Promise.resolve(row.getComponent());\r\n\t\t\t\t});\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Update Error - No matching row found:\", index);\r\n\t\t\treturn Promise.reject(\"Update Error - No matching row found\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t//scroll to row in DOM\r\n\tscrollToRow(index, position, ifVisible){\r\n\t\tvar row = this.rowManager.findRow(index);\r\n\t\t\r\n\t\tif(row){\r\n\t\t\treturn this.rowManager.scrollToRow(row, position, ifVisible);\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Scroll Error - No matching row found:\", index);\r\n\t\t\treturn Promise.reject(\"Scroll Error - No matching row found\");\r\n\t\t}\r\n\t}\r\n\t\r\n\tmoveRow(from, to, after){\r\n\t\tvar fromRow = this.rowManager.findRow(from);\r\n\t\t\r\n\t\tthis.initGuard();\r\n\t\t\r\n\t\tif(fromRow){\r\n\t\t\tfromRow.moveToRow(to, after);\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Move Error - No matching row found:\", from);\r\n\t\t}\r\n\t}\r\n\t\r\n\tgetRows(active){\r\n\t\treturn this.rowManager.getComponents(active);\t\r\n\t}\r\n\t\r\n\t//get position of row in table\r\n\tgetRowPosition(index){\r\n\t\tvar row = this.rowManager.findRow(index);\r\n\t\t\r\n\t\tif(row){\r\n\t\t\treturn row.getPosition();\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Position Error - No matching row found:\", index);\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\t\r\n\t/////////////// Column Functions ///////////////\r\n\tsetColumns(definition){\r\n\t\tthis.initGuard(false, \"To set initial columns please use the 'columns' property in the table constructor\");\r\n\t\t\r\n\t\tthis.columnManager.setColumns(definition);\r\n\t}\r\n\t\r\n\tgetColumns(structured){\r\n\t\treturn this.columnManager.getComponents(structured);\r\n\t}\r\n\t\r\n\tgetColumn(field){\r\n\t\tvar column = this.columnManager.findColumn(field);\r\n\t\t\r\n\t\tif(column){\r\n\t\t\treturn column.getComponent();\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Find Error - No matching column found:\", field);\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\t\r\n\tgetColumnDefinitions(){\r\n\t\treturn this.columnManager.getDefinitionTree();\r\n\t}\r\n\t\r\n\tshowColumn(field){\r\n\t\tvar column = this.columnManager.findColumn(field);\r\n\t\t\r\n\t\tthis.initGuard();\r\n\t\t\r\n\t\tif(column){\r\n\t\t\tcolumn.show();\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Column Show Error - No matching column found:\", field);\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\t\r\n\thideColumn(field){\r\n\t\tvar column = this.columnManager.findColumn(field); \r\n\t\t\r\n\t\tthis.initGuard();\r\n\t\t\r\n\t\tif(column){\r\n\t\t\tcolumn.hide();\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Column Hide Error - No matching column found:\", field);\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\t\r\n\ttoggleColumn(field){\r\n\t\tvar column = this.columnManager.findColumn(field);\r\n\t\t\r\n\t\tthis.initGuard();\r\n\t\t\r\n\t\tif(column){\r\n\t\t\tif(column.visible){\r\n\t\t\t\tcolumn.hide();\r\n\t\t\t}else{\r\n\t\t\t\tcolumn.show();\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Column Visibility Toggle Error - No matching column found:\", field);\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\t\r\n\taddColumn(definition, before, field){\r\n\t\tvar column = this.columnManager.findColumn(field);\r\n\t\t\r\n\t\tthis.initGuard();\r\n\t\t\r\n\t\treturn this.columnManager.addColumn(definition, before, column)\r\n\t\t\t.then((column) => {\r\n\t\t\t\treturn column.getComponent();\r\n\t\t\t});\r\n\t}\r\n\t\r\n\tdeleteColumn(field){\r\n\t\tvar column = this.columnManager.findColumn(field);\r\n\t\t\r\n\t\tthis.initGuard();\r\n\t\t\r\n\t\tif(column){\r\n\t\t\treturn column.delete();\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Column Delete Error - No matching column found:\", field);\r\n\t\t\treturn Promise.reject();\r\n\t\t}\r\n\t}\r\n\t\r\n\tupdateColumnDefinition(field, definition){\r\n\t\tvar column = this.columnManager.findColumn(field);\r\n\t\t\r\n\t\tthis.initGuard();\r\n\t\t\r\n\t\tif(column){\r\n\t\t\treturn column.updateDefinition(definition);\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Column Update Error - No matching column found:\", field);\r\n\t\t\treturn Promise.reject();\r\n\t\t}\r\n\t}\r\n\t\r\n\tmoveColumn(from, to, after){\r\n\t\tvar fromColumn = this.columnManager.findColumn(from),\r\n\t\ttoColumn = this.columnManager.findColumn(to);\r\n\t\t\r\n\t\tthis.initGuard();\r\n\t\t\r\n\t\tif(fromColumn){\r\n\t\t\tif(toColumn){\r\n\t\t\t\tthis.columnManager.moveColumn(fromColumn, toColumn, after);\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Move Error - No matching column found:\", toColumn);\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Move Error - No matching column found:\", from);\r\n\t\t}\r\n\t}\r\n\t\r\n\t//scroll to column in DOM\r\n\tscrollToColumn(field, position, ifVisible){\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tvar column = this.columnManager.findColumn(field);\r\n\t\t\t\r\n\t\t\tif(column){\r\n\t\t\t\treturn this.columnManager.scrollToColumn(column, position, ifVisible);\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Scroll Error - No matching column found:\", field);\r\n\t\t\t\treturn Promise.reject(\"Scroll Error - No matching column found\");\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\t\r\n\t//////////// General Public Functions ////////////\r\n\t//redraw list without updating data\r\n\tredraw(force){\r\n\t\tthis.initGuard();\r\n\r\n\t\tthis.columnManager.redraw(force);\r\n\t\tthis.rowManager.redraw(force);\r\n\t}\r\n\t\r\n\tsetHeight(height){\r\n\t\tthis.options.height = isNaN(height) ? height : height + \"px\";\r\n\t\tthis.element.style.height = this.options.height;\r\n\t\tthis.rowManager.initializeRenderer();\r\n\t\tthis.rowManager.redraw();\r\n\t}\r\n\t\r\n\t//////////////////// Event Bus ///////////////////\r\n\t\r\n\ton(key, callback){\r\n\t\tthis.externalEvents.subscribe(key, callback);\r\n\t}\r\n\t\r\n\toff(key, callback){\r\n\t\tthis.externalEvents.unsubscribe(key, callback);\r\n\t}\r\n\t\r\n\tdispatchEvent(){\r\n\t\tvar args = Array.from(arguments);\r\n\t\targs.shift();\r\n\t\t\r\n\t\tthis.externalEvents.dispatch(...arguments);\r\n\t}\r\n\r\n\t//////////////////// Alerts ///////////////////\r\n\r\n\talert(contents, type){\r\n\t\tthis.initGuard();\r\n\r\n\t\tthis.alertManager.alert(contents, type);\r\n\t}\r\n\r\n\tclearAlert(){\r\n\t\tthis.initGuard();\r\n\r\n\t\tthis.alertManager.clear();\r\n\t}\r\n\t\r\n\t////////////// Extension Management //////////////\r\n\tmodExists(plugin, required){\r\n\t\tif(this.modules[plugin]){\r\n\t\t\treturn true;\r\n\t\t}else{\r\n\t\t\tif(required){\r\n\t\t\t\tconsole.error(\"Tabulator Module Not Installed: \" + plugin);\r\n\t\t\t}\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\t\r\n\tmodule(key){\r\n\t\tvar mod = this.modules[key];\r\n\t\t\r\n\t\tif(!mod){\r\n\t\t\tconsole.error(\"Tabulator module not installed: \" + key);\r\n\t\t}\r\n\t\t\r\n\t\treturn mod;\r\n\t}\r\n}\r\n\r\n//default setup options\r\nTabulator.defaultOptions = defaultOptions;\r\n\r\n//bind modules and static functionality\r\nnew ModuleBinder(Tabulator);\r\n\r\nexport default Tabulator;\r\n","export default {\r\n\r\n\tdebugEventsExternal:false, //flag to console log events\r\n\tdebugEventsInternal:false, //flag to console log events\r\n\tdebugInvalidOptions:true, //allow toggling of invalid option warnings\r\n\tdebugInvalidComponentFuncs:true, //allow toggling of invalid component warnings\r\n\tdebugInitialization:true, //allow toggling of pre initialization function call warnings\r\n\tdebugDeprecation:true, //allow toggling of deprecation warnings\r\n\r\n\theight:false, //height of tabulator\r\n\tminHeight:false, //minimum height of tabulator\r\n\tmaxHeight:false, //maximum height of tabulator\r\n\r\n\tcolumnHeaderVertAlign:\"top\", //vertical alignment of column headers\r\n\r\n\tpopupContainer:false,\r\n\r\n\tcolumns:[],//store for colum header info\r\n\tcolumnDefaults:{}, //store column default props\r\n\r\n\tdata:false, //default starting data\r\n\r\n\tautoColumns:false, //build columns from data row structure\r\n\tautoColumnsDefinitions:false,\r\n\r\n\tnestedFieldSeparator:\".\", //separator for nested data\r\n\r\n\tfooterElement:false, //hold footer element\r\n\r\n\tindex:\"id\", //filed for row index\r\n\r\n\ttextDirection:\"auto\",\r\n\r\n\taddRowPos:\"bottom\", //position to insert blank rows, top|bottom\r\n\r\n\theaderVisible:true, //hide header\r\n\r\n\trenderVertical:\"virtual\",\r\n\trenderHorizontal:\"basic\",\r\n\trenderVerticalBuffer:0, // set virtual DOM buffer size\r\n\r\n\tscrollToRowPosition:\"top\",\r\n\tscrollToRowIfVisible:true,\r\n\r\n\tscrollToColumnPosition:\"left\",\r\n\tscrollToColumnIfVisible:true,\r\n\r\n\trowFormatter:false,\r\n\trowFormatterPrint:null,\r\n\trowFormatterClipboard:null,\r\n\trowFormatterHtmlOutput:null,\r\n\r\n\trowHeight:null,\r\n\r\n\tplaceholder:false,\r\n\r\n\tdataLoader:true,\r\n\tdataLoaderLoading:false,\r\n\tdataLoaderError:false,\r\n\tdataLoaderErrorTimeout:3000,\r\n\r\n\tdataSendParams:{},\r\n\r\n\tdataReceiveParams:{},\r\n};\r\n","import Module from '../../core/Module.js';\r\nimport Helpers from '../../core/tools/Helpers.js';\r\n\r\nimport defaultAccessors from './defaults/accessors.js';\r\n\r\nclass Accessor extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.allowedTypes = [\"\", \"data\", \"download\", \"clipboard\", \"print\", \"htmlOutput\"]; //list of accessor types\r\n\r\n\t\tthis.registerColumnOption(\"accessor\");\r\n\t\tthis.registerColumnOption(\"accessorParams\");\r\n\t\tthis.registerColumnOption(\"accessorData\");\r\n\t\tthis.registerColumnOption(\"accessorDataParams\");\r\n\t\tthis.registerColumnOption(\"accessorDownload\");\r\n\t\tthis.registerColumnOption(\"accessorDownloadParams\");\r\n\t\tthis.registerColumnOption(\"accessorClipboard\");\r\n\t\tthis.registerColumnOption(\"accessorClipboardParams\");\r\n\t\tthis.registerColumnOption(\"accessorPrint\");\r\n\t\tthis.registerColumnOption(\"accessorPrintParams\");\r\n\t\tthis.registerColumnOption(\"accessorHtmlOutput\");\r\n\t\tthis.registerColumnOption(\"accessorHtmlOutputParams\");\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tthis.subscribe(\"column-layout\", this.initializeColumn.bind(this));\r\n\t\tthis.subscribe(\"row-data-retrieve\", this.transformRow.bind(this));\r\n\t}\r\n\r\n\t//initialize column accessor\r\n\tinitializeColumn(column){\r\n\t\tvar match = false,\r\n\t\tconfig = {};\r\n\r\n\t\tthis.allowedTypes.forEach((type) => {\r\n\t\t\tvar key = \"accessor\" + (type.charAt(0).toUpperCase() + type.slice(1)),\r\n\t\t\taccessor;\r\n\r\n\t\t\tif(column.definition[key]){\r\n\t\t\t\taccessor = this.lookupAccessor(column.definition[key]);\r\n\r\n\t\t\t\tif(accessor){\r\n\t\t\t\t\tmatch = true;\r\n\r\n\t\t\t\t\tconfig[key] = {\r\n\t\t\t\t\t\taccessor:accessor,\r\n\t\t\t\t\t\tparams: column.definition[key + \"Params\"] || {},\r\n\t\t\t\t\t};\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tif(match){\r\n\t\t\tcolumn.modules.accessor = config;\r\n\t\t}\r\n\t}\r\n\r\n\tlookupAccessor(value){\r\n\t\tvar accessor = false;\r\n\r\n\t\t//set column accessor\r\n\t\tswitch(typeof value){\r\n\t\t\tcase \"string\":\r\n\t\t\t\tif(Accessor.accessors[value]){\r\n\t\t\t\t\taccessor = Accessor.accessors[value];\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.warn(\"Accessor Error - No such accessor found, ignoring: \", value);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase \"function\":\r\n\t\t\t\taccessor = value;\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\treturn accessor;\r\n\t}\r\n\r\n\t//apply accessor to row\r\n\ttransformRow(row, type){\r\n\t\tvar key = \"accessor\" + (type.charAt(0).toUpperCase() + type.slice(1)),\r\n\t\trowComponent = row.getComponent();\r\n\r\n\t\t//clone data object with deep copy to isolate internal data from returned result\r\n\t\tvar data = Helpers.deepClone(row.data || {});\r\n\r\n\t\tthis.table.columnManager.traverse(function(column){\r\n\t\t\tvar value, accessor, params, colComponent;\r\n\r\n\t\t\tif(column.modules.accessor){\r\n\r\n\t\t\t\taccessor = column.modules.accessor[key] || column.modules.accessor.accessor || false;\r\n\r\n\t\t\t\tif(accessor){\r\n\t\t\t\t\tvalue = column.getFieldValue(data);\r\n\r\n\t\t\t\t\tif(value != \"undefined\"){\r\n\t\t\t\t\t\tcolComponent = column.getComponent();\r\n\t\t\t\t\t\tparams = typeof accessor.params === \"function\" ? accessor.params(value, data, type, colComponent, rowComponent) : accessor.params;\r\n\t\t\t\t\t\tcolumn.setFieldValue(data, accessor.accessor(value, data, type, params, colComponent, rowComponent));\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn data;\r\n\t}\r\n}\r\n\r\n//load defaults\r\nAccessor.moduleName = \"accessor\";\r\nAccessor.accessors = defaultAccessors;\r\n\r\nexport default Accessor;","export default {};","function generateParamsList(data, prefix){\r\n\tvar output = [];\r\n\r\n\tprefix = prefix || \"\";\r\n\r\n\tif(Array.isArray(data)){\r\n\t\tdata.forEach((item, i) => {\r\n\t\t\toutput = output.concat(generateParamsList(item, prefix ? prefix + \"[\" + i + \"]\" : i));\r\n\t\t});\r\n\t}else if (typeof data === \"object\"){\r\n\t\tfor (var key in data){\r\n\t\t\toutput = output.concat(generateParamsList(data[key], prefix ? prefix + \"[\" + key + \"]\" : key));\r\n\t\t}\r\n\t}else{\r\n\t\toutput.push({key:prefix, value:data});\r\n\t}\r\n\r\n\treturn output;\r\n}\r\n\r\nfunction serializeParams(params){\r\n\tvar output = generateParamsList(params),\r\n\tencoded = [];\r\n\r\n\toutput.forEach(function(item){\r\n\t\tencoded.push(encodeURIComponent(item.key) + \"=\" + encodeURIComponent(item.value));\r\n\t});\r\n\r\n\treturn encoded.join(\"&\");\r\n}\r\n\r\nexport default function(url, config, params){\r\n\tif(url){\r\n\t\tif(params && Object.keys(params).length){\r\n\t\t\tif(!config.method || config.method.toLowerCase() == \"get\"){\r\n\t\t\t\tconfig.method = \"get\";\r\n\r\n\t\t\t\turl += (url.includes(\"?\") ? \"&\" : \"?\") + serializeParams(params);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\treturn url;\r\n}","function generateParamsList(data, prefix){\r\n\tvar output = [];\r\n\r\n\tprefix = prefix || \"\";\r\n\r\n\tif(Array.isArray(data)){\r\n\t\tdata.forEach((item, i) => {\r\n\t\t\toutput = output.concat(generateParamsList(item, prefix ? prefix + \"[\" + i + \"]\" : i));\r\n\t\t});\r\n\t}else if (typeof data === \"object\"){\r\n\t\tfor (var key in data){\r\n\t\t\toutput = output.concat(generateParamsList(data[key], prefix ? prefix + \"[\" + key + \"]\" : key));\r\n\t\t}\r\n\t}else{\r\n\t\toutput.push({key:prefix, value:data});\r\n\t}\r\n\r\n\treturn output;\r\n}\r\n\r\nexport default {\r\n\t\"json\":{\r\n\t\theaders:{\r\n\t\t\t'Content-Type': 'application/json',\r\n\t\t},\r\n\t\tbody:function(url, config, params){\r\n\t\t\treturn JSON.stringify(params);\r\n\t\t},\r\n\t},\r\n\t\"form\":{\r\n\t\theaders:{\r\n\t\t},\r\n\t\tbody:function(url, config, params){\r\n\r\n\t\t\tvar output = generateParamsList(params),\r\n\t\t\tform = new FormData();\r\n\r\n\t\t\toutput.forEach(function(item){\r\n\t\t\t\tform.append(item.key, item.value);\r\n\t\t\t});\r\n\r\n\t\t\treturn form;\r\n\t\t},\r\n\t},\r\n};","import Module from '../../core/Module.js';\r\n\r\nimport defaultConfig from './defaults/config.js';\r\nimport defaultURLGenerator from './defaults/urlGenerator.js';\r\nimport defaultLoaderPromise from './defaults/loaderPromise.js';\r\nimport defaultContentTypeFormatters from './defaults/contentTypeFormatters.js';\r\n\r\nclass Ajax extends Module{\r\n\t\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\t\t\r\n\t\tthis.config = {}; //hold config object for ajax request\r\n\t\tthis.url = \"\"; //request URL\r\n\t\tthis.urlGenerator = false;\r\n\t\tthis.params = false; //request parameters\r\n\t\t\r\n\t\tthis.loaderPromise = false;\r\n\t\t\r\n\t\tthis.registerTableOption(\"ajaxURL\", false); //url for ajax loading\r\n\t\tthis.registerTableOption(\"ajaxURLGenerator\", false);\r\n\t\tthis.registerTableOption(\"ajaxParams\", {}); //params for ajax loading\r\n\t\tthis.registerTableOption(\"ajaxConfig\", \"get\"); //ajax request type\r\n\t\tthis.registerTableOption(\"ajaxContentType\", \"form\"); //ajax request type\r\n\t\tthis.registerTableOption(\"ajaxRequestFunc\", false); //promise function\r\n\t\t\r\n\t\tthis.registerTableOption(\"ajaxRequesting\", function(){});\r\n\t\tthis.registerTableOption(\"ajaxResponse\", false);\r\n\t\t\r\n\t\tthis.contentTypeFormatters = Ajax.contentTypeFormatters;\r\n\t}\r\n\t\r\n\t//initialize setup options\r\n\tinitialize(){\r\n\t\tthis.loaderPromise = this.table.options.ajaxRequestFunc || Ajax.defaultLoaderPromise;\r\n\t\tthis.urlGenerator = this.table.options.ajaxURLGenerator || Ajax.defaultURLGenerator;\r\n\t\t\r\n\t\tif(this.table.options.ajaxURL){\r\n\t\t\tthis.setUrl(this.table.options.ajaxURL);\r\n\t\t}\r\n\r\n\r\n\t\tthis.setDefaultConfig(this.table.options.ajaxConfig);\r\n\t\t\r\n\t\tthis.registerTableFunction(\"getAjaxUrl\", this.getUrl.bind(this));\r\n\t\t\r\n\t\tthis.subscribe(\"data-loading\", this.requestDataCheck.bind(this));\r\n\t\tthis.subscribe(\"data-params\", this.requestParams.bind(this));\r\n\t\tthis.subscribe(\"data-load\", this.requestData.bind(this));\r\n\t}\r\n\t\r\n\trequestParams(data, config, silent, params){\r\n\t\tvar ajaxParams = this.table.options.ajaxParams;\r\n\t\t\r\n\t\tif(ajaxParams){\r\n\t\t\tif(typeof ajaxParams === \"function\"){\r\n\t\t\t\tajaxParams = ajaxParams.call(this.table);\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tparams = Object.assign(params, ajaxParams);\r\n\t\t}\t\t\r\n\t\t\r\n\t\treturn params;\r\n\t}\r\n\t\r\n\trequestDataCheck(data, params, config, silent){\r\n\t\treturn !!((!data && this.url) || typeof data === \"string\");\r\n\t}\r\n\t\r\n\trequestData(url, params, config, silent, previousData){\r\n\t\tvar ajaxConfig;\r\n\t\t\r\n\t\tif(!previousData && this.requestDataCheck(url)){\r\n\t\t\tif(url){\r\n\t\t\t\tthis.setUrl(url);\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tajaxConfig = this.generateConfig(config);\r\n\t\t\t\r\n\t\t\treturn this.sendRequest(this.url, params, ajaxConfig);\r\n\t\t}else{\r\n\t\t\treturn previousData;\r\n\t\t}\r\n\t}\r\n\t\r\n\tsetDefaultConfig(config = {}){\r\n\t\tthis.config = Object.assign({}, Ajax.defaultConfig);\r\n\r\n\t\tif(typeof config == \"string\"){\r\n\t\t\tthis.config.method = config;\r\n\t\t}else{\r\n\t\t\tObject.assign(this.config, config);\r\n\t\t}\r\n\t}\r\n\t\r\n\t//load config object\r\n\tgenerateConfig(config = {}){\r\n\t\tvar ajaxConfig = Object.assign({}, this.config);\r\n\t\t\r\n\t\tif(typeof config == \"string\"){\r\n\t\t\tajaxConfig.method = config;\r\n\t\t}else{\r\n\t\t\tObject.assign(ajaxConfig, config);\r\n\t\t}\r\n\t\t\r\n\t\treturn ajaxConfig;\r\n\t}\r\n\t\r\n\t//set request url\r\n\tsetUrl(url){\r\n\t\tthis.url = url;\r\n\t}\r\n\t\r\n\t//get request url\r\n\tgetUrl(){\r\n\t\treturn this.url;\r\n\t}\r\n\t\r\n\t//send ajax request\r\n\tsendRequest(url, params, config){\r\n\t\tif(this.table.options.ajaxRequesting.call(this.table, url, params) !== false){\r\n\t\t\treturn this.loaderPromise(url, config, params)\r\n\t\t\t\t.then((data)=>{\r\n\t\t\t\t\tif(this.table.options.ajaxResponse){\r\n\t\t\t\t\t\tdata = this.table.options.ajaxResponse.call(this.table, url, params, data);\r\n\t\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\t\treturn data;\r\n\t\t\t\t});\r\n\t\t}else{\r\n\t\t\treturn Promise.reject();\r\n\t\t}\r\n\t}\r\n}\r\n\r\nAjax.moduleName = \"ajax\";\r\n\r\n//load defaults\r\nAjax.defaultConfig = defaultConfig;\r\nAjax.defaultURLGenerator = defaultURLGenerator;\r\nAjax.defaultLoaderPromise = defaultLoaderPromise;\r\nAjax.contentTypeFormatters = defaultContentTypeFormatters;\r\n\r\nexport default Ajax;","export default {\r\n\tmethod: \"GET\",\r\n};","export default function(url, config, params){\r\n\tvar contentType;\r\n\r\n\treturn new Promise((resolve, reject) => {\r\n\t\t//set url\r\n\t\turl = this.urlGenerator.call(this.table, url, config, params);\r\n\r\n\t\t//set body content if not GET request\r\n\t\tif(config.method.toUpperCase() != \"GET\"){\r\n\t\t\tcontentType = typeof this.table.options.ajaxContentType === \"object\" ? this.table.options.ajaxContentType : this.contentTypeFormatters[this.table.options.ajaxContentType];\r\n\t\t\tif(contentType){\r\n\r\n\t\t\t\tfor(var key in contentType.headers){\r\n\t\t\t\t\tif(!config.headers){\r\n\t\t\t\t\t\tconfig.headers = {};\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif(typeof config.headers[key] === \"undefined\"){\r\n\t\t\t\t\t\tconfig.headers[key] = contentType.headers[key];\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tconfig.body = contentType.body.call(this, url, config, params);\r\n\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Ajax Error - Invalid ajaxContentType value:\", this.table.options.ajaxContentType);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(url){\r\n\t\t\t//configure headers\r\n\t\t\tif(typeof config.headers === \"undefined\"){\r\n\t\t\t\tconfig.headers = {};\r\n\t\t\t}\r\n\r\n\t\t\tif(typeof config.headers.Accept === \"undefined\"){\r\n\t\t\t\tconfig.headers.Accept = \"application/json\";\r\n\t\t\t}\r\n\r\n\t\t\tif(typeof config.headers[\"X-Requested-With\"] === \"undefined\"){\r\n\t\t\t\tconfig.headers[\"X-Requested-With\"] = \"XMLHttpRequest\";\r\n\t\t\t}\r\n\r\n\t\t\tif(typeof config.mode === \"undefined\"){\r\n\t\t\t\tconfig.mode = \"cors\";\r\n\t\t\t}\r\n\r\n\t\t\tif(config.mode == \"cors\"){\r\n\t\t\t\tif(typeof config.headers[\"Origin\"] === \"undefined\"){\r\n\t\t\t\t\tconfig.headers[\"Origin\"] = window.location.origin;\r\n\t\t\t\t}\r\n \r\n\t\t\t\tif(typeof config.credentials === \"undefined\"){\r\n\t\t\t\t\tconfig.credentials = 'same-origin';\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tif(typeof config.credentials === \"undefined\"){\r\n\t\t\t\t\tconfig.credentials = 'include';\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t//send request\r\n\t\t\tfetch(url, config)\r\n\t\t\t\t.then((response)=>{\r\n\t\t\t\t\tif(response.ok) {\r\n\t\t\t\t\t\tresponse.json()\r\n\t\t\t\t\t\t\t.then((data)=>{\r\n\t\t\t\t\t\t\t\tresolve(data);\r\n\t\t\t\t\t\t\t}).catch((error)=>{\r\n\t\t\t\t\t\t\t\treject(error);\r\n\t\t\t\t\t\t\t\tconsole.warn(\"Ajax Load Error - Invalid JSON returned\", error);\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tconsole.error(\"Ajax Load Error - Connection Error: \" + response.status, response.statusText);\r\n\t\t\t\t\t\treject(response);\r\n\t\t\t\t\t}\r\n\t\t\t\t})\r\n\t\t\t\t.catch((error)=>{\r\n\t\t\t\t\tconsole.error(\"Ajax Load Error - Connection Error: \", error);\r\n\t\t\t\t\treject(error);\r\n\t\t\t\t});\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Ajax Load Error - No URL Set\");\r\n\t\t\tresolve([]);\r\n\t\t}\r\n\t});\r\n}","import Module from '../../core/Module.js';\r\n\r\nimport defaultPasteActions from './defaults/pasteActions.js';\r\nimport defaultPasteParsers from './defaults/pasteParsers.js';\r\n\r\nclass Clipboard extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.mode = true;\r\n\t\tthis.pasteParser = function(){};\r\n\t\tthis.pasteAction = function(){};\r\n\t\tthis.customSelection = false;\r\n\t\tthis.rowRange = false;\r\n\t\tthis.blocked = true; //block copy actions not originating from this command\r\n\r\n\t\tthis.registerTableOption(\"clipboard\", false); //enable clipboard\r\n\t\tthis.registerTableOption(\"clipboardCopyStyled\", true); //formatted table data\r\n\t\tthis.registerTableOption(\"clipboardCopyConfig\", false); //clipboard config\r\n\t\tthis.registerTableOption(\"clipboardCopyFormatter\", false); //DEPRECATED - REMOVE in 5.0\r\n\t\tthis.registerTableOption(\"clipboardCopyRowRange\", \"active\"); //restrict clipboard to visible rows only\r\n\t\tthis.registerTableOption(\"clipboardPasteParser\", \"table\"); //convert pasted clipboard data to rows\r\n\t\tthis.registerTableOption(\"clipboardPasteAction\", \"insert\"); //how to insert pasted data into the table\r\n\r\n\t\tthis.registerColumnOption(\"clipboard\");\r\n\t\tthis.registerColumnOption(\"titleClipboard\");\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tthis.mode = this.table.options.clipboard;\r\n\r\n\t\tthis.rowRange = this.table.options.clipboardCopyRowRange;\r\n\r\n\t\tif(this.mode === true || this.mode === \"copy\"){\r\n\t\t\tthis.table.element.addEventListener(\"copy\", (e) => {\r\n\t\t\t\tvar plain, html, list;\r\n\r\n\t\t\t\tif(!this.blocked){\r\n\t\t\t\t\te.preventDefault();\r\n\r\n\t\t\t\t\tif(this.customSelection){\r\n\t\t\t\t\t\tplain = this.customSelection;\r\n\r\n\t\t\t\t\t\tif(this.table.options.clipboardCopyFormatter){\r\n\t\t\t\t\t\t\tplain = this.table.options.clipboardCopyFormatter(\"plain\", plain);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}else{\r\n\r\n\t\t\t\t\t\tlist = this.table.modules.export.generateExportList(this.table.options.clipboardCopyConfig, this.table.options.clipboardCopyStyled, this.rowRange, \"clipboard\");\r\n\r\n\t\t\t\t\t\thtml = this.table.modules.export.generateHTMLTable(list);\r\n\t\t\t\t\t\tplain = html ? this.generatePlainContent(list) : \"\";\r\n\r\n\t\t\t\t\t\tif(this.table.options.clipboardCopyFormatter){\r\n\t\t\t\t\t\t\tplain = this.table.options.clipboardCopyFormatter(\"plain\", plain);\r\n\t\t\t\t\t\t\thtml = this.table.options.clipboardCopyFormatter(\"html\", html);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (window.clipboardData && window.clipboardData.setData) {\r\n\t\t\t\t\t\twindow.clipboardData.setData('Text', plain);\r\n\t\t\t\t\t} else if (e.clipboardData && e.clipboardData.setData) {\r\n\t\t\t\t\t\te.clipboardData.setData('text/plain', plain);\r\n\t\t\t\t\t\tif(html){\r\n\t\t\t\t\t\t\te.clipboardData.setData('text/html', html);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} else if (e.originalEvent && e.originalEvent.clipboardData.setData) {\r\n\t\t\t\t\t\te.originalEvent.clipboardData.setData('text/plain', plain);\r\n\t\t\t\t\t\tif(html){\r\n\t\t\t\t\t\t\te.originalEvent.clipboardData.setData('text/html', html);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tthis.dispatchExternal(\"clipboardCopied\", plain, html);\r\n\r\n\t\t\t\t\tthis.reset();\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif(this.mode === true || this.mode === \"paste\"){\r\n\t\t\tthis.table.element.addEventListener(\"paste\", (e) => {\r\n\t\t\t\tthis.paste(e);\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tthis.setPasteParser(this.table.options.clipboardPasteParser);\r\n\t\tthis.setPasteAction(this.table.options.clipboardPasteAction);\r\n\r\n\t\tthis.registerTableFunction(\"copyToClipboard\", this.copy.bind(this));\r\n\t}\r\n\r\n\treset(){\r\n\t\tthis.blocked = true;\r\n\t\tthis.customSelection = false;\r\n\t}\r\n\r\n\tgeneratePlainContent (list) {\r\n\t\tvar output = [];\r\n\r\n\t\tlist.forEach((row) => {\r\n\t\t\tvar rowData = [];\r\n\r\n\t\t\trow.columns.forEach((col) => {\r\n\t\t\t\tvar value = \"\";\r\n\r\n\t\t\t\tif(col){\r\n\r\n\t\t\t\t\tif(row.type === \"group\"){\r\n\t\t\t\t\t\tcol.value = col.component.getKey();\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif(col.value === null){\r\n\t\t\t\t\t\tvalue = \"\";\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tswitch(typeof col.value){\r\n\t\t\t\t\t\t\tcase \"object\":\r\n\t\t\t\t\t\t\t\tvalue = JSON.stringify(col.value);\r\n\t\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\t\tcase \"undefined\":\r\n\t\t\t\t\t\t\t\tvalue = \"\";\r\n\t\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\t\tdefault:\r\n\t\t\t\t\t\t\t\tvalue = col.value;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\trowData.push(value);\r\n\t\t\t});\r\n\r\n\t\t\toutput.push(rowData.join(\"\\t\"));\r\n\t\t});\r\n\r\n\t\treturn output.join(\"\\n\");\r\n\t}\r\n\r\n\tcopy (range, internal) {\r\n\t\tvar sel, textRange;\r\n\t\tthis.blocked = false;\r\n\t\tthis.customSelection = false;\r\n\r\n\t\tif (this.mode === true || this.mode === \"copy\") {\r\n\r\n\t\t\tthis.rowRange = range || this.table.options.clipboardCopyRowRange;\r\n\r\n\t\t\tif (typeof window.getSelection != \"undefined\" && typeof document.createRange != \"undefined\") {\r\n\t\t\t\trange = document.createRange();\r\n\t\t\t\trange.selectNodeContents(this.table.element);\r\n\t\t\t\tsel = window.getSelection();\r\n\r\n\t\t\t\tif (sel.toString() && internal) {\r\n\t\t\t\t\tthis.customSelection = sel.toString();\r\n\t\t\t\t}\r\n\r\n\t\t\t\tsel.removeAllRanges();\r\n\t\t\t\tsel.addRange(range);\r\n\t\t\t} else if (typeof document.selection != \"undefined\" && typeof document.body.createTextRange != \"undefined\") {\r\n\t\t\t\ttextRange = document.body.createTextRange();\r\n\t\t\t\ttextRange.moveToElementText(this.table.element);\r\n\t\t\t\ttextRange.select();\r\n\t\t\t}\r\n\r\n\t\t\tdocument.execCommand('copy');\r\n\r\n\t\t\tif (sel) {\r\n\t\t\t\tsel.removeAllRanges();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//PASTE EVENT HANDLING\r\n\tsetPasteAction(action){\r\n\r\n\t\tswitch(typeof action){\r\n\t\t\tcase \"string\":\r\n\t\t\t\tthis.pasteAction = Clipboard.pasteActions[action];\r\n\r\n\t\t\t\tif(!this.pasteAction){\r\n\t\t\t\t\tconsole.warn(\"Clipboard Error - No such paste action found:\", action);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase \"function\":\r\n\t\t\t\tthis.pasteAction = action;\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\tsetPasteParser(parser){\r\n\t\tswitch(typeof parser){\r\n\t\t\tcase \"string\":\r\n\t\t\t\tthis.pasteParser = Clipboard.pasteParsers[parser];\r\n\r\n\t\t\t\tif(!this.pasteParser){\r\n\t\t\t\t\tconsole.warn(\"Clipboard Error - No such paste parser found:\", parser);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase \"function\":\r\n\t\t\t\tthis.pasteParser = parser;\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\tpaste(e){\r\n\t\tvar data, rowData, rows;\r\n\r\n\t\tif(this.checkPaseOrigin(e)){\r\n\r\n\t\t\tdata = this.getPasteData(e);\r\n\r\n\t\t\trowData = this.pasteParser.call(this, data);\r\n\r\n\t\t\tif(rowData){\r\n\t\t\t\te.preventDefault();\r\n\r\n\t\t\t\tif(this.table.modExists(\"mutator\")){\r\n\t\t\t\t\trowData = this.mutateData(rowData);\r\n\t\t\t\t}\r\n\r\n\t\t\t\trows = this.pasteAction.call(this, rowData);\r\n\r\n\t\t\t\tthis.dispatchExternal(\"clipboardPasted\", data, rowData, rows);\r\n\t\t\t}else{\r\n\t\t\t\tthis.dispatchExternal(\"clipboardPasteError\", data);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tmutateData(data){\r\n\t\tvar output = [];\r\n\r\n\t\tif(Array.isArray(data)){\r\n\t\t\tdata.forEach((row) => {\r\n\t\t\t\toutput.push(this.table.modules.mutator.transformRow(row, \"clipboard\"));\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\toutput = data;\r\n\t\t}\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\r\n\tcheckPaseOrigin(e){\r\n\t\tvar valid = true;\r\n\r\n\t\tif(e.target.tagName != \"DIV\" || this.table.modules.edit.currentCell){\r\n\t\t\tvalid = false;\r\n\t\t}\r\n\r\n\t\treturn valid;\r\n\t}\r\n\r\n\tgetPasteData(e){\r\n\t\tvar data;\r\n\r\n\t\tif (window.clipboardData && window.clipboardData.getData) {\r\n\t\t\tdata = window.clipboardData.getData('Text');\r\n\t\t} else if (e.clipboardData && e.clipboardData.getData) {\r\n\t\t\tdata = e.clipboardData.getData('text/plain');\r\n\t\t} else if (e.originalEvent && e.originalEvent.clipboardData.getData) {\r\n\t\t\tdata = e.originalEvent.clipboardData.getData('text/plain');\r\n\t\t}\r\n\r\n\t\treturn data;\r\n\t}\r\n}\r\n\r\nClipboard.moduleName = \"clipboard\";\r\n\r\n//load defaults\r\nClipboard.pasteActions = defaultPasteActions;\r\nClipboard.pasteParsers = defaultPasteParsers;\r\n\r\nexport default Clipboard;","export default {\r\n\treplace:function(rows){\r\n\t\treturn this.table.setData(rows);\r\n\t},\r\n\tupdate:function(rows){\r\n\t\treturn this.table.updateOrAddData(rows);\r\n\t},\r\n\tinsert:function(rows){\r\n\t\treturn this.table.addData(rows);\r\n\t},\r\n};","export default {\r\n\ttable:function(clipboard){\r\n\t\tvar data = [],\r\n\t\theaderFindSuccess = true,\r\n\t\tcolumns = this.table.columnManager.columns,\r\n\t\tcolumnMap = [],\r\n\t\trows = [];\r\n\r\n\t\t//get data from clipboard into array of columns and rows.\r\n\t\tclipboard = clipboard.split(\"\\n\");\r\n\r\n\t\tclipboard.forEach(function(row){\r\n\t\t\tdata.push(row.split(\"\\t\"));\r\n\t\t});\r\n\r\n\t\tif(data.length && !(data.length === 1 && data[0].length < 2)){\r\n\r\n\t\t\t//check if headers are present by title\r\n\t\t\tdata[0].forEach(function(value){\r\n\t\t\t\tvar column = columns.find(function(column){\r\n\t\t\t\t\treturn value && column.definition.title && value.trim() && column.definition.title.trim() === value.trim();\r\n\t\t\t\t});\r\n\r\n\t\t\t\tif(column){\r\n\t\t\t\t\tcolumnMap.push(column);\r\n\t\t\t\t}else{\r\n\t\t\t\t\theaderFindSuccess = false;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\t//check if column headers are present by field\r\n\t\t\tif(!headerFindSuccess){\r\n\t\t\t\theaderFindSuccess = true;\r\n\t\t\t\tcolumnMap = [];\r\n\r\n\t\t\t\tdata[0].forEach(function(value){\r\n\t\t\t\t\tvar column = columns.find(function(column){\r\n\t\t\t\t\t\treturn value && column.field && value.trim() && column.field.trim() === value.trim();\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\tif(column){\r\n\t\t\t\t\t\tcolumnMap.push(column);\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\theaderFindSuccess = false;\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\tif(!headerFindSuccess){\r\n\t\t\t\t\tcolumnMap = this.table.columnManager.columnsByIndex;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t//remove header row if found\r\n\t\t\tif(headerFindSuccess){\r\n\t\t\t\tdata.shift();\r\n\t\t\t}\r\n\r\n\t\t\tdata.forEach(function(item){\r\n\t\t\t\tvar row = {};\r\n\r\n\t\t\t\titem.forEach(function(value, i){\r\n\t\t\t\t\tif(columnMap[i]){\r\n\t\t\t\t\t\trow[columnMap[i].field] = value;\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\trows.push(row);\r\n\t\t\t});\r\n\r\n\t\t\treturn rows;\r\n\t\t}else{\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n};","class CalcComponent{\r\n\tconstructor (row){\r\n\t\tthis._row = row;\r\n\r\n\t\treturn new Proxy(this, {\r\n\t\t\tget: function(target, name, receiver) {\r\n\t\t\t\tif (typeof target[name] !== \"undefined\") {\r\n\t\t\t\t\treturn target[name];\r\n\t\t\t\t}else{\r\n\t\t\t\t\treturn target._row.table.componentFunctionBinder.handle(\"row\", target._row, name);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tgetData(transform){\r\n\t\treturn this._row.getData(transform);\r\n\t}\r\n\r\n\tgetElement(){\r\n\t\treturn this._row.getElement();\r\n\t}\r\n\r\n\tgetTable(){\r\n\t\treturn this._row.table;\r\n\t}\r\n\r\n\tgetCells(){\r\n\t\tvar cells = [];\r\n\r\n\t\tthis._row.getCells().forEach(function(cell){\r\n\t\t\tcells.push(cell.getComponent());\r\n\t\t});\r\n\r\n\t\treturn cells;\r\n\t}\r\n\r\n\tgetCell(column){\r\n\t\tvar cell = this._row.getCell(column);\r\n\t\treturn cell ? cell.getComponent() : false;\r\n\t}\r\n\r\n\t_getSelf(){\r\n\t\treturn this._row;\r\n\t}\r\n}\r\n\r\nexport default CalcComponent;","export default {\r\n\t\"avg\":function(values, data, calcParams){\r\n\t\tvar output = 0,\r\n\t\tprecision = typeof calcParams.precision !== \"undefined\" ? calcParams.precision : 2;\r\n\r\n\t\tif(values.length){\r\n\t\t\toutput = values.reduce(function(sum, value){\r\n\t\t\t\treturn Number(sum) + Number(value);\r\n\t\t\t});\r\n\r\n\t\t\toutput = output / values.length;\r\n\r\n\t\t\toutput = precision !== false ? output.toFixed(precision) : output;\r\n\t\t}\r\n\r\n\t\treturn parseFloat(output).toString();\r\n\t},\r\n\t\"max\":function(values, data, calcParams){\r\n\t\tvar output = null,\r\n\t\tprecision = typeof calcParams.precision !== \"undefined\" ? calcParams.precision : false;\r\n\r\n\t\tvalues.forEach(function(value){\r\n\r\n\t\t\tvalue = Number(value);\r\n\r\n\t\t\tif(value > output || output === null){\r\n\t\t\t\toutput = value;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn output !== null ? (precision !== false ? output.toFixed(precision) : output) : \"\";\r\n\t},\r\n\t\"min\":function(values, data, calcParams){\r\n\t\tvar output = null,\r\n\t\tprecision = typeof calcParams.precision !== \"undefined\" ? calcParams.precision : false;\r\n\r\n\t\tvalues.forEach(function(value){\r\n\r\n\t\t\tvalue = Number(value);\r\n\r\n\t\t\tif(value < output || output === null){\r\n\t\t\t\toutput = value;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn output !== null ? (precision !== false ? output.toFixed(precision) : output) : \"\";\r\n\t},\r\n\t\"sum\":function(values, data, calcParams){\r\n\t\tvar output = 0,\r\n\t\tprecision = typeof calcParams.precision !== \"undefined\" ? calcParams.precision : false;\r\n\r\n\t\tif(values.length){\r\n\t\t\tvalues.forEach(function(value){\r\n\t\t\t\tvalue = Number(value);\r\n\r\n\t\t\t\toutput += !isNaN(value) ? Number(value) : 0;\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn precision !== false ? output.toFixed(precision) : output;\r\n\t},\r\n\t\"concat\":function(values, data, calcParams){\r\n\t\tvar output = 0;\r\n\r\n\t\tif(values.length){\r\n\t\t\toutput = values.reduce(function(sum, value){\r\n\t\t\t\treturn String(sum) + String(value);\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn output;\r\n\t},\r\n\t\"count\":function(values, data, calcParams){\r\n\t\tvar output = 0;\r\n\r\n\t\tif(values.length){\r\n\t\t\tvalues.forEach(function(value){\r\n\t\t\t\tif(value){\r\n\t\t\t\t\toutput ++;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn output;\r\n\t},\r\n};","import Module from '../../core/Module.js';\r\n\r\nimport CalcComponent from './CalcComponent.js';\r\n\r\nimport Cell from '../../core/cell/Cell.js';\r\nimport Column from '../../core/column/Column.js';\r\nimport Row from '../../core/row/Row.js';\r\n\r\nimport defaultCalculations from './defaults/calculations.js';\r\n\r\nclass ColumnCalcs extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.topCalcs = [];\r\n\t\tthis.botCalcs = [];\r\n\t\tthis.genColumn = false;\r\n\t\tthis.topElement = this.createElement();\r\n\t\tthis.botElement = this.createElement();\r\n\t\tthis.topRow = false;\r\n\t\tthis.botRow = false;\r\n\t\tthis.topInitialized = false;\r\n\t\tthis.botInitialized = false;\r\n\r\n\t\tthis.registerTableOption(\"columnCalcs\", true);\r\n\r\n\t\tthis.registerColumnOption(\"topCalc\");\r\n\t\tthis.registerColumnOption(\"topCalcParams\");\r\n\t\tthis.registerColumnOption(\"topCalcFormatter\");\r\n\t\tthis.registerColumnOption(\"topCalcFormatterParams\");\r\n\t\tthis.registerColumnOption(\"bottomCalc\");\r\n\t\tthis.registerColumnOption(\"bottomCalcParams\");\r\n\t\tthis.registerColumnOption(\"bottomCalcFormatter\");\r\n\t\tthis.registerColumnOption(\"bottomCalcFormatterParams\");\r\n\t}\r\n\r\n\tcreateElement (){\r\n\t\tvar el = document.createElement(\"div\");\r\n\t\tel.classList.add(\"tabulator-calcs-holder\");\r\n\t\treturn el;\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tthis.genColumn = new Column({field:\"value\"}, this);\r\n\r\n\t\tthis.subscribe(\"cell-value-changed\", this.cellValueChanged.bind(this));\r\n\t\tthis.subscribe(\"column-init\", this.initializeColumnCheck.bind(this));\r\n\t\tthis.subscribe(\"row-deleted\", this.rowsUpdated.bind(this));\r\n\t\tthis.subscribe(\"scroll-horizontal\", this.scrollHorizontal.bind(this));\r\n\t\tthis.subscribe(\"row-added\", this.rowsUpdated.bind(this));\r\n\t\tthis.subscribe(\"column-moved\", this.recalcActiveRows.bind(this));\r\n\t\tthis.subscribe(\"column-add\", this.recalcActiveRows.bind(this));\r\n\t\tthis.subscribe(\"data-refreshed\", this.recalcActiveRowsRefresh.bind(this));\r\n\t\tthis.subscribe(\"table-redraw\", this.tableRedraw.bind(this));\r\n\t\tthis.subscribe(\"rows-visible\", this.visibleRows.bind(this));\r\n\r\n\t\tthis.registerTableFunction(\"getCalcResults\", this.getResults.bind(this));\r\n\t\tthis.registerTableFunction(\"recalc\", this.userRecalc.bind(this));\r\n\t}\r\n\r\n\ttableRedraw(force){\r\n\t\tthis.recalc(this.table.rowManager.activeRows);\r\n\r\n\t\tif(force){\r\n\t\t\tthis.redraw();\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t///////////////////////////////////\r\n\t///////// Table Functions /////////\r\n\t///////////////////////////////////\r\n\tuserRecalc(){\r\n\t\tthis.recalc(this.table.rowManager.activeRows);\r\n\t}\r\n\r\n\t///////////////////////////////////\r\n\t///////// Internal Logic //////////\r\n\t///////////////////////////////////\r\n\r\n\tvisibleRows(viewable, rows){\r\n\t\tif(this.topRow){\r\n\t\t\trows.unshift(this.topRow);\r\n\t\t}\r\n\r\n\t\tif(this.botRow){\r\n\t\t\trows.push(this.botRow);\r\n\t\t}\r\n\t\r\n\t\treturn rows;\r\n\t}\r\n\r\n\trowsUpdated(row){\r\n\t\tif(this.table.options.groupBy){\r\n\t\t\tthis.recalcRowGroup(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\t\tif(ColumnCalcs.calculations[def.topCalc]){\r\n\t\t\t\t\t\tconfig.topCalc = ColumnCalcs.calculations[def.topCalc];\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tconsole.warn(\"Column Calc Error - No such calculation found, ignoring: \", def.topCalc);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"function\":\r\n\t\t\t\t\tconfig.topCalc = def.topCalc;\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif(config.topCalc){\r\n\t\t\t\tcolumn.modules.columnCalcs = config;\r\n\t\t\t\tthis.topCalcs.push(column);\r\n\r\n\t\t\t\tif(this.table.options.columnCalcs != \"group\"){\r\n\t\t\t\t\tthis.initializeTopRow();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tif(def.bottomCalc){\r\n\t\t\tswitch(typeof def.bottomCalc){\r\n\t\t\t\tcase \"string\":\r\n\t\t\t\t\tif(ColumnCalcs.calculations[def.bottomCalc]){\r\n\t\t\t\t\t\tconfig.botCalc = ColumnCalcs.calculations[def.bottomCalc];\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tconsole.warn(\"Column Calc Error - No such calculation found, ignoring: \", def.bottomCalc);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"function\":\r\n\t\t\t\t\tconfig.botCalc = def.bottomCalc;\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif(config.botCalc){\r\n\t\t\t\tcolumn.modules.columnCalcs = config;\r\n\t\t\t\tthis.botCalcs.push(column);\r\n\r\n\t\t\t\tif(this.table.options.columnCalcs != \"group\"){\r\n\t\t\t\t\tthis.initializeBottomRow();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t//dummy functions to handle being mock column manager\r\n\tregisterColumnField(){}\r\n\r\n\tremoveCalcs(){\r\n\t\tvar changed = false;\r\n\r\n\t\tif(this.topInitialized){\r\n\t\t\tthis.topInitialized = false;\r\n\t\t\tthis.topElement.parentNode.removeChild(this.topElement);\r\n\t\t\tchanged = true;\r\n\t\t}\r\n\r\n\t\tif(this.botInitialized){\r\n\t\t\tthis.botInitialized = false;\r\n\t\t\tthis.footerRemove(this.botElement);\r\n\t\t\tchanged = true;\r\n\t\t}\r\n\r\n\t\tif(changed){\r\n\t\t\tthis.table.rowManager.adjustTableSize();\r\n\t\t}\r\n\t}\r\n\r\n\tinitializeTopRow(){\r\n\t\tif(!this.topInitialized){\r\n\t\t\tthis.table.columnManager.getElement().insertBefore(this.topElement, this.table.columnManager.headersElement.nextSibling);\r\n\t\t\tthis.topInitialized = true;\r\n\t\t}\r\n\t}\r\n\r\n\tinitializeBottomRow(){\r\n\t\tif(!this.botInitialized){\r\n\t\t\tthis.footerPrepend(this.botElement);\r\n\t\t\tthis.botInitialized = true;\r\n\t\t}\r\n\t}\r\n\r\n\tscrollHorizontal(left){\r\n\t\tif(this.botInitialized && this.botRow){\r\n\t\t\tif(this.table.rtl){\r\n\t\t\t\tthis.botRow.getElement().style.marginRight = (left) + \"px\";\r\n\t\t\t}else{\r\n\t\t\t\tthis.botRow.getElement().style.marginLeft = (-left) + \"px\";\r\n\t\t\t}\t\r\n\t\t}\r\n\t}\r\n\r\n\trecalc(rows){\r\n\t\tvar data, row;\r\n\r\n\t\tif(this.topInitialized || this.botInitialized){\r\n\t\t\tdata = this.rowsToData(rows);\r\n\r\n\t\t\tif(this.topInitialized){\r\n\t\t\t\tif(this.topRow){\r\n\t\t\t\t\tthis.topRow.deleteCells();\r\n\t\t\t\t}\r\n\r\n\t\t\t\trow = this.generateRow(\"top\", data);\r\n\t\t\t\tthis.topRow = row;\r\n\t\t\t\twhile(this.topElement.firstChild) this.topElement.removeChild(this.topElement.firstChild);\r\n\t\t\t\tthis.topElement.appendChild(row.getElement());\r\n\t\t\t\trow.initialize(true);\r\n\t\t\t}\r\n\r\n\t\t\tif(this.botInitialized){\r\n\t\t\t\tif(this.botRow){\r\n\t\t\t\t\tthis.botRow.deleteCells();\r\n\t\t\t\t}\r\n\r\n\t\t\t\trow = this.generateRow(\"bottom\", data);\r\n\t\t\t\tthis.botRow = row;\r\n\t\t\t\twhile(this.botElement.firstChild) this.botElement.removeChild(this.botElement.firstChild);\r\n\t\t\t\tthis.botElement.appendChild(row.getElement());\r\n\t\t\t\trow.initialize(true);\r\n\t\t\t}\r\n\r\n\t\t\tthis.table.rowManager.adjustTableSize();\r\n\r\n\t\t\t//set resizable handles\r\n\t\t\tif(this.table.modExists(\"frozenColumns\")){\r\n\t\t\t\tthis.table.modules.frozenColumns.layout();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\trecalcRowGroup(row){\r\n\t\tthis.recalcGroup(this.table.modules.groupRows.getRowGroup(row));\r\n\t}\r\n\r\n\trecalcAll(){\r\n\t\tif(this.topCalcs.length || this.botCalcs.length){\r\n\t\t\tif(this.table.options.columnCalcs !== \"group\"){\r\n\t\t\t\tthis.recalcActiveRows();\r\n\t\t\t}\r\n\r\n\t\t\tif(this.table.options.groupBy && this.table.options.columnCalcs !== \"table\"){\r\n\r\n\t\t\t\tvar groups = this.table.modules.groupRows.getChildGroups();\r\n\r\n\t\t\t\tgroups.forEach((group) => {\r\n\t\t\t\t\tthis.recalcGroup(group);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\trecalcGroup(group){\r\n\t\tvar data, rowData;\r\n\r\n\t\tif(group){\r\n\t\t\tif(group.calcs){\r\n\t\t\t\tif(group.calcs.bottom){\r\n\t\t\t\t\tdata = this.rowsToData(group.rows);\r\n\t\t\t\t\trowData = this.generateRowData(\"bottom\", data);\r\n\r\n\t\t\t\t\tgroup.calcs.bottom.updateData(rowData);\r\n\t\t\t\t\tgroup.calcs.bottom.reinitialize();\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(group.calcs.top){\r\n\t\t\t\t\tdata = this.rowsToData(group.rows);\r\n\t\t\t\t\trowData = this.generateRowData(\"top\", data);\r\n\r\n\t\t\t\t\tgroup.calcs.top.updateData(rowData);\r\n\t\t\t\t\tgroup.calcs.top.reinitialize();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//generate top stats row\r\n\tgenerateTopRow(rows){\r\n\t\treturn this.generateRow(\"top\", this.rowsToData(rows));\r\n\t}\r\n\t//generate bottom stats row\r\n\tgenerateBottomRow(rows){\r\n\t\treturn this.generateRow(\"bottom\", this.rowsToData(rows));\r\n\t}\r\n\r\n\trowsToData(rows){\r\n\t\tvar data = [];\r\n\t\t\r\n\t\trows.forEach((row) => {\r\n\t\t\tdata.push(row.getData());\r\n\r\n\t\t\tif(this.table.options.dataTree && this.table.options.dataTreeChildColumnCalcs){\r\n\t\t\t\tif(row.modules.dataTree && row.modules.dataTree.open){\r\n\t\t\t\t\tvar children = this.rowsToData(this.table.modules.dataTree.getFilteredTreeChildren(row));\r\n\t\t\t\t\tdata = data.concat(children);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn data;\r\n\t}\r\n\r\n\t//generate stats row\r\n\tgenerateRow(pos, data){\r\n\t\tvar rowData = this.generateRowData(pos, data),\r\n\t\trow;\r\n\r\n\t\tif(this.table.modExists(\"mutator\")){\r\n\t\t\tthis.table.modules.mutator.disable();\r\n\t\t}\r\n\r\n\t\trow = new Row(rowData, this, \"calc\");\r\n\r\n\t\tif(this.table.modExists(\"mutator\")){\r\n\t\t\tthis.table.modules.mutator.enable();\r\n\t\t}\r\n\r\n\t\trow.getElement().classList.add(\"tabulator-calcs\", \"tabulator-calcs-\" + pos);\r\n\r\n\t\trow.component = false;\r\n\r\n\t\trow.getComponent = () => {\r\n\t\t\tif(!row.component){\r\n\t\t\t\trow.component = new CalcComponent(row);\r\n\t\t\t}\r\n\r\n\t\t\treturn row.component;\r\n\t\t};\r\n\r\n\t\trow.generateCells = () => {\r\n\r\n\t\t\tvar cells = [];\r\n\r\n\t\t\tthis.table.columnManager.columnsByIndex.forEach((column) => {\r\n\r\n\t\t\t\t//set field name of mock column\r\n\t\t\t\tthis.genColumn.setField(column.getField());\r\n\t\t\t\tthis.genColumn.hozAlign = column.hozAlign;\r\n\r\n\t\t\t\tif(column.definition[pos + \"CalcFormatter\"] && this.table.modExists(\"format\")){\r\n\t\t\t\t\tthis.genColumn.modules.format = {\r\n\t\t\t\t\t\tformatter: this.table.modules.format.getFormatter(column.definition[pos + \"CalcFormatter\"]),\r\n\t\t\t\t\t\tparams: column.definition[pos + \"CalcFormatterParams\"] || {},\r\n\t\t\t\t\t};\r\n\t\t\t\t}else{\r\n\t\t\t\t\tthis.genColumn.modules.format = {\r\n\t\t\t\t\t\tformatter: this.table.modules.format.getFormatter(\"plaintext\"),\r\n\t\t\t\t\t\tparams:{}\r\n\t\t\t\t\t};\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//ensure css class definition is replicated to calculation cell\r\n\t\t\t\tthis.genColumn.definition.cssClass = column.definition.cssClass;\r\n\r\n\t\t\t\t//generate cell and assign to correct column\r\n\t\t\t\tvar cell = new Cell(this.genColumn, row);\r\n\t\t\t\tcell.getElement();\r\n\t\t\t\tcell.column = column;\r\n\t\t\t\tcell.setWidth();\r\n\r\n\t\t\t\tcolumn.cells.push(cell);\r\n\t\t\t\tcells.push(cell);\r\n\r\n\t\t\t\tif(!column.visible){\r\n\t\t\t\t\tcell.hide();\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\trow.cells = cells;\r\n\t\t};\r\n\r\n\t\treturn row;\r\n\t}\r\n\r\n\t//generate stats row\r\n\tgenerateRowData(pos, data){\r\n\t\tvar rowData = {},\r\n\t\tcalcs = pos == \"top\" ? this.topCalcs : this.botCalcs,\r\n\t\ttype = pos == \"top\" ? \"topCalc\" : \"botCalc\",\r\n\t\tparams, paramKey;\r\n\r\n\t\tcalcs.forEach(function(column){\r\n\t\t\tvar values = [];\r\n\r\n\t\t\tif(column.modules.columnCalcs && column.modules.columnCalcs[type]){\r\n\t\t\t\tdata.forEach(function(item){\r\n\t\t\t\t\tvalues.push(column.getFieldValue(item));\r\n\t\t\t\t});\r\n\r\n\t\t\t\tparamKey = type + \"Params\";\r\n\t\t\t\tparams = typeof column.modules.columnCalcs[paramKey] === \"function\" ? column.modules.columnCalcs[paramKey](values, data) : column.modules.columnCalcs[paramKey];\r\n\r\n\t\t\t\tcolumn.setFieldValue(rowData, column.modules.columnCalcs[type](values, data, params));\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn rowData;\r\n\t}\r\n\r\n\thasTopCalcs(){\r\n\t\treturn\t!!(this.topCalcs.length);\r\n\t}\r\n\r\n\thasBottomCalcs(){\r\n\t\treturn\t!!(this.botCalcs.length);\r\n\t}\r\n\r\n\t//handle table redraw\r\n\tredraw(){\r\n\t\tif(this.topRow){\r\n\t\t\tthis.topRow.normalizeHeight(true);\r\n\t\t}\r\n\t\tif(this.botRow){\r\n\t\t\tthis.botRow.normalizeHeight(true);\r\n\t\t}\r\n\t}\r\n\r\n\t//return the calculated\r\n\tgetResults(){\r\n\t\tvar results = {},\r\n\t\tgroups;\r\n\r\n\t\tif(this.table.options.groupBy && this.table.modExists(\"groupRows\")){\r\n\t\t\tgroups = this.table.modules.groupRows.getGroups(true);\r\n\r\n\t\t\tgroups.forEach((group) => {\r\n\t\t\t\tresults[group.getKey()] = this.getGroupResults(group);\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tresults = {\r\n\t\t\t\ttop: this.topRow ? this.topRow.getData() : {},\r\n\t\t\t\tbottom: this.botRow ? this.botRow.getData() : {},\r\n\t\t\t};\r\n\t\t}\r\n\r\n\t\treturn results;\r\n\t}\r\n\r\n\t//get results from a group\r\n\tgetGroupResults(group){\r\n\t\tvar groupObj = group._getSelf(),\r\n\t\tsubGroups = group.getSubGroups(),\r\n\t\tsubGroupResults = {},\r\n\t\tresults = {};\r\n\r\n\t\tsubGroups.forEach((subgroup) => {\r\n\t\t\tsubGroupResults[subgroup.getKey()] = this.getGroupResults(subgroup);\r\n\t\t});\r\n\r\n\t\tresults = {\r\n\t\t\ttop: groupObj.calcs.top ? groupObj.calcs.top.getData() : {},\r\n\t\t\tbottom: groupObj.calcs.bottom ? groupObj.calcs.bottom.getData() : {},\r\n\t\t\tgroups: subGroupResults,\r\n\t\t};\r\n\r\n\t\treturn results;\r\n\t}\r\n}\r\n\r\nColumnCalcs.moduleName = \"columnCalcs\";\r\n\r\n//load defaults\r\nColumnCalcs.calculations = defaultCalculations;\r\n\r\nexport default ColumnCalcs;","import Module from '../../core/Module.js';\r\n\r\nimport Row from '../../core/row/Row.js';\r\n\r\nimport RowComponent from '../../core/row/RowComponent.js';\r\n\r\nclass DataTree extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.indent = 10;\r\n\t\tthis.field = \"\";\r\n\t\tthis.collapseEl = null;\r\n\t\tthis.expandEl = null;\r\n\t\tthis.branchEl = null;\r\n\t\tthis.elementField = false;\r\n\r\n\t\tthis.startOpen = function(){};\r\n\r\n\t\tthis.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);//selecting a parent row selects its children\r\n\r\n\t\t//register component functions\r\n\t\tthis.registerComponentFunction(\"row\", \"treeCollapse\", this.collapseRow.bind(this));\r\n\t\tthis.registerComponentFunction(\"row\", \"treeExpand\", this.expandRow.bind(this));\r\n\t\tthis.registerComponentFunction(\"row\", \"treeToggle\", this.toggleRow.bind(this));\r\n\t\tthis.registerComponentFunction(\"row\", \"getTreeParent\", this.getTreeParent.bind(this));\r\n\t\tthis.registerComponentFunction(\"row\", \"getTreeChildren\", this.getRowChildren.bind(this));\r\n\t\tthis.registerComponentFunction(\"row\", \"addTreeChild\", this.addTreeChildRow.bind(this));\r\n\t\tthis.registerComponentFunction(\"row\", \"isTreeExpanded\", this.isRowExpanded.bind(this));\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tif(this.table.options.dataTree){\r\n\t\t\tvar dummyEl = null,\r\n\t\t\toptions = this.table.options;\r\n\r\n\t\t\tthis.field = options.dataTreeChildField;\r\n\t\t\tthis.indent = options.dataTreeChildIndent;\r\n\r\n\t\t\tif(options.dataTreeBranchElement){\r\n\r\n\t\t\t\tif(options.dataTreeBranchElement === true){\r\n\t\t\t\t\tthis.branchEl = document.createElement(\"div\");\r\n\t\t\t\t\tthis.branchEl.classList.add(\"tabulator-data-tree-branch\");\r\n\t\t\t\t}else{\r\n\t\t\t\t\tif(typeof options.dataTreeBranchElement === \"string\"){\r\n\t\t\t\t\t\tdummyEl = document.createElement(\"div\");\r\n\t\t\t\t\t\tdummyEl.innerHTML = options.dataTreeBranchElement;\r\n\t\t\t\t\t\tthis.branchEl = dummyEl.firstChild;\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tthis.branchEl = options.dataTreeBranchElement;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif(options.dataTreeCollapseElement){\r\n\t\t\t\tif(typeof options.dataTreeCollapseElement === \"string\"){\r\n\t\t\t\t\tdummyEl = document.createElement(\"div\");\r\n\t\t\t\t\tdummyEl.innerHTML = options.dataTreeCollapseElement;\r\n\t\t\t\t\tthis.collapseEl = dummyEl.firstChild;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tthis.collapseEl = options.dataTreeCollapseElement;\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tthis.collapseEl = document.createElement(\"div\");\r\n\t\t\t\tthis.collapseEl.classList.add(\"tabulator-data-tree-control\");\r\n\t\t\t\tthis.collapseEl.tabIndex = 0;\r\n\t\t\t\tthis.collapseEl.innerHTML = \"
\";\r\n\t\t\t}\r\n\r\n\t\t\tif(options.dataTreeExpandElement){\r\n\t\t\t\tif(typeof options.dataTreeExpandElement === \"string\"){\r\n\t\t\t\t\tdummyEl = document.createElement(\"div\");\r\n\t\t\t\t\tdummyEl.innerHTML = options.dataTreeExpandElement;\r\n\t\t\t\t\tthis.expandEl = dummyEl.firstChild;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tthis.expandEl = options.dataTreeExpandElement;\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tthis.expandEl = document.createElement(\"div\");\r\n\t\t\t\tthis.expandEl.classList.add(\"tabulator-data-tree-control\");\r\n\t\t\t\tthis.expandEl.tabIndex = 0;\r\n\t\t\t\tthis.expandEl.innerHTML = \"
\";\r\n\t\t\t}\r\n\r\n\r\n\t\t\tswitch(typeof options.dataTreeStartExpanded){\r\n\t\t\t\tcase \"boolean\":\r\n\t\t\t\t\tthis.startOpen = function(row, index){\r\n\t\t\t\t\t\treturn options.dataTreeStartExpanded;\r\n\t\t\t\t\t};\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"function\":\r\n\t\t\t\t\tthis.startOpen = options.dataTreeStartExpanded;\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tthis.startOpen = function(row, index){\r\n\t\t\t\t\t\treturn options.dataTreeStartExpanded[index];\r\n\t\t\t\t\t};\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\r\n\t\t\tthis.subscribe(\"row-init\", this.initializeRow.bind(this));\r\n\t\t\tthis.subscribe(\"row-layout-after\", this.layoutRow.bind(this));\r\n\t\t\tthis.subscribe(\"row-deleted\", this.rowDelete.bind(this),0);\r\n\t\t\tthis.subscribe(\"row-data-changed\", this.rowDataChanged.bind(this), 10);\r\n\t\t\tthis.subscribe(\"cell-value-updated\", this.cellValueChanged.bind(this));\r\n\t\t\tthis.subscribe(\"edit-cancelled\", this.cellValueChanged.bind(this));\r\n\t\t\tthis.subscribe(\"column-moving-rows\", this.columnMoving.bind(this));\r\n\t\t\tthis.subscribe(\"table-built\", this.initializeElementField.bind(this));\r\n\t\t\tthis.subscribe(\"table-redrawing\", this.tableRedrawing.bind(this));\r\n\r\n\t\t\tthis.registerDisplayHandler(this.getRows.bind(this), 30);\r\n\t\t}\r\n\t}\r\n\r\n\ttableRedrawing(force){\r\n\t\tvar rows;\r\n\r\n\t\tif(force){\r\n\t\t\trows = this.table.rowManager.getRows();\r\n\t\t\t\r\n\t\t\trows.forEach((row) => {\r\n\t\t\t\tthis.reinitializeRowChildren(row);\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tinitializeElementField(){\r\n\t\tvar firstCol = this.table.columnManager.getFirstVisibleColumn();\r\n\r\n\t\tthis.elementField = this.table.options.dataTreeElementColumn || (firstCol ? firstCol.field : false);\r\n\t}\r\n\t\r\n\tgetRowChildren(row){\r\n\t\treturn this.getTreeChildren(row, true);\r\n\t}\r\n\r\n\tcolumnMoving(){\r\n\t\tvar rows = [];\r\n\r\n\t\tthis.table.rowManager.rows.forEach((row) => {\r\n\t\t\trows = rows.concat(this.getTreeChildren(row, false, true));\r\n\t\t});\r\n\r\n\t\treturn rows;\r\n\t}\r\n\r\n\trowDataChanged(row, visible, updatedData){\r\n\t\tif(this.redrawNeeded(updatedData)){\r\n\t\t\tthis.initializeRow(row);\r\n\r\n\t\t\tif(visible){\r\n\t\t\t\tthis.layoutRow(row);\r\n\t\t\t\tthis.refreshData(true);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tcellValueChanged(cell){\r\n\t\tvar field = cell.column.getField();\r\n\r\n\t\tif(field === this.elementField){\r\n\t\t\tthis.layoutRow(cell.row);\r\n\t\t}\r\n\t}\r\n\r\n\tinitializeRow(row){\r\n\t\tvar childArray = row.getData()[this.field];\r\n\t\tvar isArray = Array.isArray(childArray);\r\n\r\n\t\tvar children = isArray || (!isArray && typeof childArray === \"object\" && childArray !== null);\r\n\r\n\t\tif(!children && row.modules.dataTree && row.modules.dataTree.branchEl){\r\n\t\t\trow.modules.dataTree.branchEl.parentNode.removeChild(row.modules.dataTree.branchEl);\r\n\t\t}\r\n\r\n\t\tif(!children && row.modules.dataTree && row.modules.dataTree.controlEl){\r\n\t\t\trow.modules.dataTree.controlEl.parentNode.removeChild(row.modules.dataTree.controlEl);\r\n\t\t}\r\n\r\n\t\trow.modules.dataTree = {\r\n\t\t\tindex: row.modules.dataTree ? row.modules.dataTree.index : 0,\r\n\t\t\topen: children ? (row.modules.dataTree ? row.modules.dataTree.open : this.startOpen(row.getComponent(), 0)) : false,\r\n\t\t\tcontrolEl: row.modules.dataTree && children ? row.modules.dataTree.controlEl : false,\r\n\t\t\tbranchEl: row.modules.dataTree && children ? row.modules.dataTree.branchEl : false,\r\n\t\t\tparent: row.modules.dataTree ? row.modules.dataTree.parent : false,\r\n\t\t\tchildren:children,\r\n\t\t};\r\n\t}\r\n\r\n\treinitializeRowChildren(row){\r\n\t\tvar children = this.getTreeChildren(row, false, true);\r\n\r\n\t\tchildren.forEach(function(child){\r\n\t\t\tchild.reinitialize(true);\r\n\t\t});\r\n\t}\r\n\r\n\tlayoutRow(row){\r\n\t\tvar cell = this.elementField ? row.getCell(this.elementField) : row.getCells()[0],\r\n\t\tel = cell.getElement(),\r\n\t\tconfig = row.modules.dataTree;\r\n\r\n\t\tif(config.branchEl){\r\n\t\t\tif(config.branchEl.parentNode){\r\n\t\t\t\tconfig.branchEl.parentNode.removeChild(config.branchEl);\r\n\t\t\t}\r\n\t\t\tconfig.branchEl = false;\r\n\t\t}\r\n\r\n\t\tif(config.controlEl){\r\n\t\t\tif(config.controlEl.parentNode){\r\n\t\t\t\tconfig.controlEl.parentNode.removeChild(config.controlEl);\r\n\t\t\t}\r\n\t\t\tconfig.controlEl = false;\r\n\t\t}\r\n\r\n\t\tthis.generateControlElement(row, el);\r\n\r\n\t\trow.getElement().classList.add(\"tabulator-tree-level-\" + config.index);\r\n\r\n\t\tif(config.index){\r\n\t\t\tif(this.branchEl){\r\n\t\t\t\tconfig.branchEl = this.branchEl.cloneNode(true);\r\n\t\t\t\tel.insertBefore(config.branchEl, el.firstChild);\r\n\r\n\t\t\t\tif(this.table.rtl){\r\n\t\t\t\t\tconfig.branchEl.style.marginRight = (((config.branchEl.offsetWidth + config.branchEl.style.marginLeft) * (config.index - 1)) + (config.index * this.indent)) + \"px\";\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconfig.branchEl.style.marginLeft = (((config.branchEl.offsetWidth + config.branchEl.style.marginRight) * (config.index - 1)) + (config.index * this.indent)) + \"px\";\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\r\n\t\t\t\tif(this.table.rtl){\r\n\t\t\t\t\tel.style.paddingRight = parseInt(window.getComputedStyle(el, null).getPropertyValue('padding-right')) + (config.index * this.indent) + \"px\";\r\n\t\t\t\t}else{\r\n\t\t\t\t\tel.style.paddingLeft = parseInt(window.getComputedStyle(el, null).getPropertyValue('padding-left')) + (config.index * this.indent) + \"px\";\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tgenerateControlElement(row, el){\r\n\t\tvar config = row.modules.dataTree,\r\n\t\toldControl = config.controlEl;\r\n\r\n\t\tel = el || row.getCells()[0].getElement();\r\n\r\n\t\tif(config.children !== false){\r\n\r\n\t\t\tif(config.open){\r\n\t\t\t\tconfig.controlEl = this.collapseEl.cloneNode(true);\r\n\t\t\t\tconfig.controlEl.addEventListener(\"click\", (e) => {\r\n\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\tthis.collapseRow(row);\r\n\t\t\t\t});\r\n\t\t\t}else{\r\n\t\t\t\tconfig.controlEl = this.expandEl.cloneNode(true);\r\n\t\t\t\tconfig.controlEl.addEventListener(\"click\", (e) => {\r\n\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\tthis.expandRow(row);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\tconfig.controlEl.addEventListener(\"mousedown\", (e) => {\r\n\t\t\t\te.stopPropagation();\r\n\t\t\t});\r\n\r\n\t\t\tif(oldControl && oldControl.parentNode === el){\r\n\t\t\t\toldControl.parentNode.replaceChild(config.controlEl,oldControl);\r\n\t\t\t}else{\r\n\t\t\t\tel.insertBefore(config.controlEl, el.firstChild);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\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\tgetTreeParentRoot(row){\r\n\t\treturn row.modules.dataTree.parent ? this.getTreeParentRoot(row.modules.dataTree.parent) : row;\r\n\t}\r\n\r\n\tgetFilteredTreeChildren(row){\r\n\t\tvar config = row.modules.dataTree,\r\n\t\toutput = [], children;\r\n\r\n\t\tif(config.children){\r\n\r\n\t\t\tif(!Array.isArray(config.children)){\r\n\t\t\t\tconfig.children = this.generateChildren(row);\r\n\t\t\t}\r\n\r\n\t\t\tif(this.table.modExists(\"filter\") && this.table.options.dataTreeFilter){\r\n\t\t\t\tchildren = this.table.modules.filter.filter(config.children);\r\n\t\t\t}else{\r\n\t\t\t\tchildren = config.children;\r\n\t\t\t}\r\n\r\n\t\t\tchildren.forEach((childRow) => {\r\n\t\t\t\tif(childRow instanceof Row){\r\n\t\t\t\t\toutput.push(childRow);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\trowDelete(row){\r\n\t\tvar parent = row.modules.dataTree.parent,\r\n\t\tchildIndex;\r\n\r\n\t\tif(parent){\r\n\t\t\tchildIndex = this.findChildIndex(row, parent);\r\n\r\n\t\t\tif(childIndex !== false){\r\n\t\t\t\tparent.data[this.field].splice(childIndex, 1);\r\n\t\t\t}\r\n\r\n\t\t\tif(!parent.data[this.field].length){\r\n\t\t\t\tdelete parent.data[this.field];\r\n\t\t\t}\r\n\r\n\t\t\tthis.initializeRow(parent);\r\n\t\t\tthis.layoutRow(parent);\r\n\t\t}\r\n\r\n\t\tthis.refreshData(true);\r\n\t}\r\n\r\n\taddTreeChildRow(row, data, top, index){\r\n\t\tvar childIndex = false;\r\n\r\n\t\tif(typeof data === \"string\"){\r\n\t\t\tdata = JSON.parse(data);\r\n\t\t}\r\n\r\n\t\tif(!Array.isArray(row.data[this.field])){\r\n\t\t\trow.data[this.field] = [];\r\n\r\n\t\t\trow.modules.dataTree.open = this.startOpen(row.getComponent(), row.modules.dataTree.index);\r\n\t\t}\r\n\r\n\t\tif(typeof index !== \"undefined\"){\r\n\t\t\tchildIndex = this.findChildIndex(index, row);\r\n\r\n\t\t\tif(childIndex !== false){\r\n\t\t\t\trow.data[this.field].splice((top ? childIndex : childIndex + 1), 0, data);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(childIndex === false){\r\n\t\t\tif(top){\r\n\t\t\t\trow.data[this.field].unshift(data);\r\n\t\t\t}else{\r\n\t\t\t\trow.data[this.field].push(data);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.initializeRow(row);\r\n\t\tthis.layoutRow(row);\r\n\r\n\t\tthis.refreshData(true);\r\n\t}\r\n\r\n\tfindChildIndex(subject, parent){\r\n\t\tvar match = false;\r\n\r\n\t\tif(typeof subject == \"object\"){\r\n\r\n\t\t\tif(subject instanceof Row){\r\n\t\t\t\t//subject is row element\r\n\t\t\t\tmatch = subject.data;\r\n\t\t\t}else if(subject instanceof RowComponent){\r\n\t\t\t\t//subject is public row component\r\n\t\t\t\tmatch = subject._getSelf().data;\r\n\t\t\t}else if(typeof HTMLElement !== \"undefined\" && subject instanceof HTMLElement){\r\n\t\t\t\tif(parent.modules.dataTree){\r\n\t\t\t\t\tmatch = parent.modules.dataTree.children.find((childRow) => {\r\n\t\t\t\t\t\treturn childRow instanceof Row ? childRow.element === subject : false;\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\tif(match){\r\n\t\t\t\t\t\tmatch = match.data;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}else if(subject === null){\r\n\t\t\t\tmatch = false;\r\n\t\t\t}\r\n\r\n\t\t}else if(typeof subject == \"undefined\"){\r\n\t\t\tmatch = false;\r\n\t\t}else{\r\n\t\t\t//subject should be treated as the index of the row\r\n\t\t\tmatch = parent.data[this.field].find((row) => {\r\n\t\t\t\treturn row.data[this.table.options.index] == subject;\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif(match){\r\n\r\n\t\t\tif(Array.isArray(parent.data[this.field])){\r\n\t\t\t\tmatch = parent.data[this.field].indexOf(match);\r\n\t\t\t}\r\n\r\n\t\t\tif(match == -1){\r\n\t\t\t\tmatch = false;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//catch all for any other type of input\r\n\r\n\t\treturn match;\r\n\t}\r\n\r\n\tgetTreeChildren(row, component, recurse){\r\n\t\tvar config = row.modules.dataTree,\r\n\t\toutput = [];\r\n\r\n\t\tif(config.children){\r\n\r\n\t\t\tif(!Array.isArray(config.children)){\r\n\t\t\t\tconfig.children = this.generateChildren(row);\r\n\t\t\t}\r\n\r\n\t\t\tconfig.children.forEach((childRow) => {\r\n\t\t\t\tif(childRow instanceof Row){\r\n\t\t\t\t\toutput.push(component ? childRow.getComponent() : childRow);\r\n\r\n\t\t\t\t\tif(recurse){\r\n\t\t\t\t\t\toutput = output.concat(this.getTreeChildren(childRow, component, recurse));\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tgetChildField(){\r\n\t\treturn this.field;\r\n\t}\r\n\r\n\tredrawNeeded(data){\r\n\t\treturn (this.field ? typeof data[this.field] !== \"undefined\" : false) || (this.elementField ? typeof data[this.elementField] !== \"undefined\" : false);\r\n\t}\r\n}\r\n\r\nDataTree.moduleName = \"dataTree\";\r\n\r\nexport default DataTree;","import csv from './downloaders/csv.js';\r\nimport json from './downloaders/json.js';\r\nimport pdf from './downloaders/pdf.js';\r\nimport xlsx from './downloaders/xlsx.js';\r\nimport html from './downloaders/html.js';\r\nimport jsonLines from './downloaders/jsonLines.js';\r\n\r\nexport default {\r\n\tcsv:csv,\r\n\tjson:json,\r\n\tjsonLines:jsonLines,\r\n\tpdf:pdf,\r\n\txlsx:xlsx,\r\n\thtml:html,\r\n};","export default function(list, options = {}, setFileContents){\r\n\tvar delimiter = options.delimiter ? options.delimiter : \",\",\r\n\tfileContents = [],\r\n\theaders = [];\r\n\r\n\tlist.forEach((row) => {\r\n\t\tvar item = [];\r\n\r\n\t\tswitch(row.type){\r\n\t\t\tcase \"group\":\r\n\t\t\t\tconsole.warn(\"Download Warning - CSV downloader cannot process row groups\");\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase \"calc\":\r\n\t\t\t\tconsole.warn(\"Download Warning - CSV downloader cannot process column calculations\");\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase \"header\":\r\n\t\t\t\trow.columns.forEach((col, i) => {\r\n\t\t\t\t\tif(col && col.depth === 1){\r\n\t\t\t\t\t\theaders[i] = typeof col.value == \"undefined\" || col.value === null ? \"\" : ('\"' + String(col.value).split('\"').join('\"\"') + '\"');\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase \"row\":\r\n\t\t\t\trow.columns.forEach((col) => {\r\n\r\n\t\t\t\t\tif(col){\r\n\r\n\t\t\t\t\t\tswitch(typeof col.value){\r\n\t\t\t\t\t\t\tcase \"object\":\r\n\t\t\t\t\t\t\t\tcol.value = col.value !== null ? JSON.stringify(col.value) : \"\";\r\n\t\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\t\tcase \"undefined\":\r\n\t\t\t\t\t\t\t\tcol.value = \"\";\r\n\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\titem.push('\"' + String(col.value).split('\"').join('\"\"') + '\"');\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\tfileContents.push(item.join(delimiter));\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t});\r\n\r\n\tif(headers.length){\r\n\t\tfileContents.unshift(headers.join(delimiter));\r\n\t}\r\n\r\n\tfileContents = fileContents.join(\"\\n\");\r\n\r\n\tif(options.bom){\r\n\t\tfileContents = \"\\ufeff\" + fileContents;\r\n\t}\r\n\r\n\tsetFileContents(fileContents, \"text/csv\");\r\n}\r\n","export default function(list, options, setFileContents){\r\n\tvar fileContents = [];\r\n\r\n\tlist.forEach((row) => {\r\n\t\tvar item = {};\r\n\r\n\t\tswitch(row.type){\r\n\t\t\tcase \"header\":\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase \"group\":\r\n\t\t\t\tconsole.warn(\"Download Warning - JSON downloader cannot process row groups\");\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase \"calc\":\r\n\t\t\t\tconsole.warn(\"Download Warning - JSON downloader cannot process column calculations\");\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase \"row\":\r\n\t\t\t\trow.columns.forEach((col) => {\r\n\t\t\t\t\tif(col){\r\n\t\t\t\t\t\titem[col.component.getTitleDownload() || col.component.getField()] = col.value;\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\tfileContents.push(item);\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t});\r\n\r\n\tfileContents = JSON.stringify(fileContents, null, '\\t');\r\n\r\n\tsetFileContents(fileContents, \"application/json\");\r\n}","export default function (list, options, setFileContents) {\r\n\tconst fileContents = [];\r\n\r\n\tlist.forEach((row) => {\r\n\t\tconst item = {};\r\n\r\n\t\tswitch (row.type) {\r\n\t\t\tcase \"header\":\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase \"group\":\r\n\t\t\t\tconsole.warn(\"Download Warning - JSON downloader cannot process row groups\");\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase \"calc\":\r\n\t\t\t\tconsole.warn(\"Download Warning - JSON downloader cannot process column calculations\");\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase \"row\":\r\n\t\t\t\trow.columns.forEach((col) => {\r\n\t\t\t\t\tif (col) {\r\n\t\t\t\t\t\titem[col.component.getTitleDownload() || col.component.getField()] = col.value;\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\tfileContents.push(JSON.stringify(item));\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t});\r\n\r\n\tsetFileContents(fileContents.join(\"\\n\"), \"application/x-ndjson\");\r\n}","export default function(list, options = {}, setFileContents){\r\n\tvar header = [],\r\n\tbody = [],\r\n\tautoTableParams = {},\r\n\trowGroupStyles = options.rowGroupStyles || {\r\n\t\tfontStyle: \"bold\",\r\n\t\tfontSize: 12,\r\n\t\tcellPadding: 6,\r\n\t\tfillColor: 220,\r\n\t},\r\n\trowCalcStyles = options.rowCalcStyles || {\r\n\t\tfontStyle: \"bold\",\r\n\t\tfontSize: 10,\r\n\t\tcellPadding: 4,\r\n\t\tfillColor: 232,\r\n\t},\r\n\tjsPDFParams = options.jsPDF || {},\r\n\ttitle = options.title ? options.title : \"\";\r\n\r\n\tif(!jsPDFParams.orientation){\r\n\t\tjsPDFParams.orientation = options.orientation || \"landscape\";\r\n\t}\r\n\r\n\tif(!jsPDFParams.unit){\r\n\t\tjsPDFParams.unit = \"pt\";\r\n\t}\r\n\r\n\t//parse row list\r\n\tlist.forEach((row) => {\r\n\t\tswitch(row.type){\r\n\t\t\tcase \"header\":\r\n\t\t\t\theader.push(parseRow(row));\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase \"group\":\r\n\t\t\t\tbody.push(parseRow(row, rowGroupStyles));\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase \"calc\":\r\n\t\t\t\tbody.push(parseRow(row, rowCalcStyles));\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase \"row\":\r\n\t\t\t\tbody.push(parseRow(row));\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t});\r\n\r\n\tfunction parseRow(row, styles){\r\n\t\tvar rowData = [];\r\n\r\n\t\trow.columns.forEach((col) =>{\r\n\t\t\tvar cell;\r\n\r\n\t\t\tif(col){\r\n\t\t\t\tswitch(typeof col.value){\r\n\t\t\t\t\tcase \"object\":\r\n\t\t\t\t\t\tcol.value = col.value !== null ? JSON.stringify(col.value) : \"\";\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase \"undefined\":\r\n\t\t\t\t\t\tcol.value = \"\";\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tcell = {\r\n\t\t\t\t\tcontent:col.value,\r\n\t\t\t\t\tcolSpan:col.width,\r\n\t\t\t\t\trowSpan:col.height,\r\n\t\t\t\t};\r\n\r\n\t\t\t\tif(styles){\r\n\t\t\t\t\tcell.styles = styles;\r\n\t\t\t\t}\r\n\r\n\t\t\t\trowData.push(cell);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn rowData;\r\n\t}\r\n\r\n\r\n\t//configure PDF\r\n\tvar doc = new jspdf.jsPDF(jsPDFParams); //set document to landscape, better for most tables\r\n\r\n\tif(options.autoTable){\r\n\t\tif(typeof options.autoTable === \"function\"){\r\n\t\t\tautoTableParams = options.autoTable(doc) || {};\r\n\t\t}else{\r\n\t\t\tautoTableParams = options.autoTable;\r\n\t\t}\r\n\t}\r\n\r\n\tif(title){\r\n\t\tautoTableParams.didDrawPage = function(data) {\r\n\t\t\tdoc.text(title, 40, 30);\r\n\t\t};\r\n\t}\r\n\r\n\tautoTableParams.head = header;\r\n\tautoTableParams.body = body;\r\n\r\n\tdoc.autoTable(autoTableParams);\r\n\r\n\tif(options.documentProcessing){\r\n\t\toptions.documentProcessing(doc);\r\n\t}\r\n\r\n\tsetFileContents(doc.output(\"arraybuffer\"), \"application/pdf\");\r\n}\r\n","import CoreFeature from '../../../../core/CoreFeature.js';\r\n\r\nexport default function(list, options, setFileContents){\r\n\tvar self = this,\r\n\tsheetName = options.sheetName || \"Sheet1\",\r\n\tworkbook = XLSX.utils.book_new(),\r\n\ttableFeatures = new CoreFeature(this),\r\n\toutput;\r\n\r\n\tworkbook.SheetNames = [];\r\n\tworkbook.Sheets = {};\r\n\r\n\tfunction generateSheet(){\r\n\t\tvar rows = [],\r\n\t\tmerges = [],\r\n\t\tworksheet = {},\r\n\t\trange = {s: {c:0, r:0}, e: {c:(list[0] ? list[0].columns.reduce((a, b) => a + (b && b.width ? b.width : 1), 0) : 0), r:list.length }};\r\n\r\n\t\t//parse row list\r\n\t\tlist.forEach((row, i) => {\r\n\t\t\tvar rowData = [];\r\n\r\n\t\t\trow.columns.forEach(function(col, j){\r\n\r\n\t\t\t\tif(col){\r\n\t\t\t\t\trowData.push(!(col.value instanceof Date) && typeof col.value === \"object\" ? JSON.stringify(col.value) : col.value);\r\n\r\n\t\t\t\t\tif(col.width > 1 || col.height > -1){\r\n\t\t\t\t\t\tif(col.height > 1 || col.width > 1){\r\n\t\t\t\t\t\t\tmerges.push({s:{r:i,c:j},e:{r:i + col.height - 1,c:j + col.width - 1}});\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}else{\r\n\t\t\t\t\trowData.push(\"\");\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\trows.push(rowData);\r\n\t\t});\r\n\r\n\t\t//convert rows to worksheet\r\n\t\tXLSX.utils.sheet_add_aoa(worksheet, rows);\r\n\r\n\t\tworksheet['!ref'] = XLSX.utils.encode_range(range);\r\n\r\n\t\tif(merges.length){\r\n\t\t\tworksheet[\"!merges\"] = merges;\r\n\t\t}\r\n\r\n\t\treturn worksheet;\r\n\t}\r\n\r\n\tif(options.sheetOnly){\r\n\t\tsetFileContents(generateSheet());\r\n\t\treturn;\r\n\t}\r\n\r\n\tif(options.sheets){\r\n\t\tfor(var sheet in options.sheets){\r\n\r\n\t\t\tif(options.sheets[sheet] === true){\r\n\t\t\t\tworkbook.SheetNames.push(sheet);\r\n\t\t\t\tworkbook.Sheets[sheet] = generateSheet();\r\n\t\t\t}else{\r\n\r\n\t\t\t\tworkbook.SheetNames.push(sheet);\r\n\r\n\t\t\t\ttableFeatures.commsSend(options.sheets[sheet], \"download\", \"intercept\",{\r\n\t\t\t\t\ttype:\"xlsx\",\r\n\t\t\t\t\toptions:{sheetOnly:true},\r\n\t\t\t\t\tactive:self.active,\r\n\t\t\t\t\tintercept:function(data){\r\n\t\t\t\t\t\tworkbook.Sheets[sheet] = data;\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\t}else{\r\n\t\tworkbook.SheetNames.push(sheetName);\r\n\t\tworkbook.Sheets[sheetName] = generateSheet();\r\n\t}\r\n\r\n\tif(options.documentProcessing){\r\n\t\tworkbook = options.documentProcessing(workbook);\r\n\t}\r\n\r\n\t//convert workbook to binary array\r\n\tfunction s2ab(s) {\r\n\t\tvar buf = new ArrayBuffer(s.length);\r\n\t\tvar view = new Uint8Array(buf);\r\n\t\tfor (var i=0; i!=s.length; ++i) view[i] = s.charCodeAt(i) & 0xFF;\r\n\t\treturn buf;\r\n\t}\r\n\r\n\toutput = XLSX.write(workbook, {bookType:'xlsx', bookSST:true, type: 'binary'});\r\n\r\n\tsetFileContents(s2ab(output), \"application/octet-stream\");\r\n}","export default function(list, options, setFileContents){\r\n\tif(this.modExists(\"export\", true)){\r\n\t\tsetFileContents(this.modules.export.generateHTMLTable(list), \"text/html\");\r\n\t}\r\n}","import Module from '../../core/Module.js';\r\n\r\nimport defaultDownloaders from './defaults/downloaders.js';\r\n\r\nclass Download extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.registerTableOption(\"downloadEncoder\", function(data, mimeType){\r\n\t\t\treturn new Blob([data],{type:mimeType});\r\n\t\t}); //function to manipulate download data\r\n\t\tthis.registerTableOption(\"downloadReady\", undefined); //warn of function deprecation\r\n\t\tthis.registerTableOption(\"downloadConfig\", {}); //download config\r\n\t\tthis.registerTableOption(\"downloadRowRange\", \"active\"); //restrict download to active rows only\r\n\r\n\t\tthis.registerColumnOption(\"download\");\r\n\t\tthis.registerColumnOption(\"titleDownload\");\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tthis.deprecatedOptionsCheck();\r\n\r\n\t\tthis.registerTableFunction(\"download\", this.download.bind(this));\r\n\t\tthis.registerTableFunction(\"downloadToTab\", this.downloadToTab.bind(this));\r\n\t}\r\n\r\n\tdeprecatedOptionsCheck(){\r\n\t\tthis.deprecationCheck(\"downloadReady\", \"downloadEncoder\");\r\n\t}\t\r\n\r\n\t///////////////////////////////////\r\n\t///////// Table Functions /////////\r\n\t///////////////////////////////////\r\n\r\n\tdownloadToTab(type, filename, options, active){\r\n\t\tthis.download(type, filename, options, active, true);\r\n\t}\r\n\r\n\t///////////////////////////////////\r\n\t///////// Internal Logic //////////\r\n\t///////////////////////////////////\r\n\r\n\t//trigger file download\r\n\tdownload(type, filename, options, range, interceptCallback){\r\n\t\tvar downloadFunc = false;\r\n\r\n\t\tfunction buildLink(data, mime){\r\n\t\t\tif(interceptCallback){\r\n\t\t\t\tif(interceptCallback === true){\r\n\t\t\t\t\tthis.triggerDownload(data, mime, type, filename, true);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tinterceptCallback(data);\r\n\t\t\t\t}\r\n\r\n\t\t\t}else{\r\n\t\t\t\tthis.triggerDownload(data, mime, type, filename);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(typeof type == \"function\"){\r\n\t\t\tdownloadFunc = type;\r\n\t\t}else{\r\n\t\t\tif(Download.downloaders[type]){\r\n\t\t\t\tdownloadFunc = Download.downloaders[type];\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Download Error - No such download type found: \", type);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(downloadFunc){\r\n\t\t\tvar list = this.generateExportList(range);\r\n\r\n\t\t\tdownloadFunc.call(this.table, list , options || {}, buildLink.bind(this));\r\n\t\t}\r\n\t}\r\n\r\n\tgenerateExportList(range){\r\n\t\tvar list = this.table.modules.export.generateExportList(this.table.options.downloadConfig, false, range || this.table.options.downloadRowRange, \"download\");\r\n\r\n\t\t//assign group header formatter\r\n\t\tvar groupHeader = this.table.options.groupHeaderDownload;\r\n\r\n\t\tif(groupHeader && !Array.isArray(groupHeader)){\r\n\t\t\tgroupHeader = [groupHeader];\r\n\t\t}\r\n\r\n\t\tlist.forEach((row) => {\r\n\t\t\tvar group;\r\n\r\n\t\t\tif(row.type === \"group\"){\r\n\t\t\t\tgroup = row.columns[0];\r\n\r\n\t\t\t\tif(groupHeader && groupHeader[row.indent]){\r\n\t\t\t\t\tgroup.value = groupHeader[row.indent](group.value, row.component._group.getRowCount(), row.component._group.getData(), row.component);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn list;\r\n\t}\r\n\r\n\ttriggerDownload(data, mime, type, filename, newTab){\r\n\t\tvar element = document.createElement('a'),\r\n\t\tblob = this.table.options.downloadEncoder(data, mime);\r\n\r\n\t\tif(blob){\r\n\t\t\tif(newTab){\r\n\t\t\t\twindow.open(window.URL.createObjectURL(blob));\r\n\t\t\t}else{\r\n\t\t\t\tfilename = filename || \"Tabulator.\" + (typeof type === \"function\" ? \"txt\" : type);\r\n\t\t\t\t\r\n\t\t\t\tif(navigator.msSaveOrOpenBlob){\r\n\t\t\t\t\tnavigator.msSaveOrOpenBlob(blob, filename);\r\n\t\t\t\t}else{\r\n\t\t\t\t\telement.setAttribute('href', window.URL.createObjectURL(blob));\r\n\r\n\t\t\t\t\t//set file title\r\n\t\t\t\t\telement.setAttribute('download', filename);\r\n\r\n\t\t\t\t\t//trigger download\r\n\t\t\t\t\telement.style.display = 'none';\r\n\t\t\t\t\tdocument.body.appendChild(element);\r\n\t\t\t\t\telement.click();\r\n\r\n\t\t\t\t\t//remove temporary link element\r\n\t\t\t\t\tdocument.body.removeChild(element);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tthis.dispatchExternal(\"downloadComplete\");\r\n\t\t}\r\n\t}\r\n\r\n\tcommsReceived(table, action, data){\r\n\t\tswitch(action){\r\n\t\t\tcase \"intercept\":\r\n\t\t\t\tthis.download(data.type, \"\", data.options, data.active, data.intercept);\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n}\r\n\r\nDownload.moduleName = \"download\";\r\n\r\n//load defaults\r\nDownload.downloaders = defaultDownloaders;\r\n\r\nexport default Download;","export default function maskInput(el, options){\r\n\tvar mask = options.mask,\r\n\tmaskLetter = typeof options.maskLetterChar !== \"undefined\" ? options.maskLetterChar : \"A\",\r\n\tmaskNumber = typeof options.maskNumberChar !== \"undefined\" ? options.maskNumberChar : \"9\",\r\n\tmaskWildcard = typeof options.maskWildcardChar !== \"undefined\" ? options.maskWildcardChar : \"*\";\r\n\r\n\tfunction fillSymbols(index){\r\n\t\tvar symbol = mask[index];\r\n\t\tif(typeof symbol !== \"undefined\" && symbol !== maskWildcard && symbol !== maskLetter && symbol !== maskNumber){\r\n\t\t\tel.value = el.value + \"\" + symbol;\r\n\t\t\tfillSymbols(index+1);\r\n\t\t}\r\n\t}\r\n\r\n\tel.addEventListener(\"keydown\", (e) => {\r\n\t\tvar index = el.value.length,\r\n\t\tchar = e.key;\r\n\r\n\t\tif(e.keyCode > 46){\r\n\t\t\tif(index >= mask.length){\r\n\t\t\t\te.preventDefault();\r\n\t\t\t\te.stopPropagation();\r\n\t\t\t\treturn false;\r\n\t\t\t}else{\r\n\t\t\t\tswitch(mask[index]){\r\n\t\t\t\t\tcase maskLetter:\r\n\t\t\t\t\t\tif(char.toUpperCase() == char.toLowerCase()){\r\n\t\t\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase maskNumber:\r\n\t\t\t\t\t\tif(isNaN(char)){\r\n\t\t\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase maskWildcard:\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tdefault:\r\n\t\t\t\t\t\tif(char !== mask[index]){\r\n\t\t\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn;\r\n\t});\r\n\r\n\tel.addEventListener(\"keyup\", (e) => {\r\n\t\tif(e.keyCode > 46){\r\n\t\t\tif(options.maskAutoFill){\r\n\t\t\t\tfillSymbols(el.value.length);\r\n\t\t\t}\r\n\t\t}\r\n\t});\r\n\r\n\r\n\tif(!el.placeholder){\r\n\t\tel.placeholder = mask;\r\n\t}\r\n\r\n\tif(options.maskAutoFill){\r\n\t\tfillSymbols(el.value.length);\r\n\t}\r\n}","import maskInput from './inputMask.js';\r\nimport urlBuilder from '../Ajax/defaults/urlGenerator.js';\r\n\r\nexport default class Edit{\r\n\tconstructor(editor, cell, onRendered, success, cancel, editorParams){\r\n\t\tthis.edit = editor;\r\n\t\tthis.table = editor.table;\r\n\t\tthis.cell = cell;\r\n\t\tthis.params = this._initializeParams(editorParams);\r\n\t\t\r\n\t\tthis.data = [];\r\n\t\tthis.displayItems = [];\r\n\t\tthis.currentItems = [];\r\n\t\tthis.focusedItem = null;\r\n\t\t\r\n\t\tthis.input = this._createInputElement();\r\n\t\tthis.listEl = this._createListElement();\r\n\t\t\r\n\t\tthis.initialValues = null; \r\n\t\t\r\n\t\tthis.isFilter = !cell._getSelf;\r\n\t\t\r\n\t\tthis.filterTimeout = null;\r\n\t\tthis.filtered = false;\r\n\t\tthis.typing = false;\r\n\t\t\r\n\t\tthis.values = []; \r\n\t\tthis.popup = null; \r\n\t\t\r\n\t\tthis.listIteration = 0;\r\n\t\t\r\n\t\tthis.lastAction=\"\";\r\n\t\t\r\n\t\tthis.blurable = true;\r\n\t\t\r\n\t\tthis.actions = {\r\n\t\t\tsuccess:success,\r\n\t\t\tcancel:cancel\r\n\t\t};\r\n\t\t\r\n\t\tthis._deprecatedOptionsCheck();\r\n\t\tthis._initializeValue();\r\n\t\t\r\n\t\tonRendered(this._onRendered.bind(this));\r\n\t}\r\n\t\r\n\t_deprecatedOptionsCheck(){\r\n\t\tif(this.params.listItemFormatter){\r\n\t\t\tthis.cell.getTable().deprecationAdvisor.msg(\"The listItemFormatter editor param has been deprecated, please see the latest editor documentation for updated options\");\r\n\t\t}\r\n\t\t\r\n\t\tif(this.params.sortValuesList){\r\n\t\t\tthis.cell.getTable().deprecationAdvisor.msg(\"The sortValuesList editor param has been deprecated, please see the latest editor documentation for updated options\");\r\n\t\t}\r\n\t\t\r\n\t\tif(this.params.searchFunc){\r\n\t\t\tthis.cell.getTable().deprecationAdvisor.msg(\"The searchFunc editor param has been deprecated, please see the latest editor documentation for updated options\");\r\n\t\t}\r\n\t\t\r\n\t\tif(this.params.searchingPlaceholder){\r\n\t\t\tthis.cell.getTable().deprecationAdvisor.msg(\"The searchingPlaceholder editor param has been deprecated, please see the latest editor documentation for updated options\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t_initializeValue(){\r\n\t\tvar initialValue = this.cell.getValue();\r\n\t\t\r\n\t\tif(typeof initialValue === \"undefined\" && typeof this.params.defaultValue !== \"undefined\"){\r\n\t\t\tinitialValue = this.params.defaultValue;\r\n\t\t}\r\n\t\t\r\n\t\tthis.initialValues = this.params.multiselect ? initialValue : [initialValue];\r\n\t\t\r\n\t\tif(this.isFilter){\r\n\t\t\tthis.input.value = this.initialValues ? this.initialValues.join(\",\") : \"\";\r\n\t\t\tthis.headerFilterInitialListGen(); \r\n\t\t}\r\n\t}\r\n\t\r\n\t_onRendered(){\r\n\t\tvar cellEl = this.cell.getElement();\r\n\t\t\r\n\t\tfunction clickStop(e){\r\n\t\t\te.stopPropagation();\r\n\t\t}\r\n\t\t\r\n\t\tthis.input.style.height = \"100%\";\r\n\t\tthis.input.focus({preventScroll: true});\r\n\t\t\r\n\t\t\r\n\t\tcellEl.addEventListener(\"click\", clickStop);\r\n\t\t\r\n\t\tsetTimeout(() => {\r\n\t\t\tcellEl.removeEventListener(\"click\", clickStop);\r\n\t\t}, 1000);\r\n\t\t\r\n\t\tthis.input.addEventListener(\"mousedown\", this._preventPopupBlur.bind(this));\r\n\t}\r\n\t\r\n\t_createListElement(){\r\n\t\tvar listEl = document.createElement(\"div\");\r\n\t\tlistEl.classList.add(\"tabulator-edit-list\");\r\n\t\t\r\n\t\tlistEl.addEventListener(\"mousedown\", this._preventBlur.bind(this));\r\n\t\tlistEl.addEventListener(\"keydown\", this._inputKeyDown.bind(this));\r\n\t\t\r\n\t\treturn listEl;\r\n\t}\r\n\t\r\n\t_setListWidth(){\r\n\t\tvar element = this.isFilter ? this.input : this.cell.getElement();\r\n\t\t\r\n\t\tthis.listEl.style.minWidth = element.offsetWidth + \"px\";\r\n\t\t\r\n\t\tif(this.params.maxWidth){\r\n\t\t\tif(this.params.maxWidth === true){\r\n\t\t\t\tthis.listEl.style.maxWidth = element.offsetWidth + \"px\";\r\n\t\t\t}else if(typeof this.params.maxWidth === \"number\"){\r\n\t\t\t\tthis.listEl.style.maxWidth = this.params.maxWidth + \"px\";\r\n\t\t\t}else{\r\n\t\t\t\tthis.listEl.style.maxWidth = this.params.maxWidth;\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t}\r\n\t\r\n\t_createInputElement(){\r\n\t\tvar attribs = this.params.elementAttributes;\r\n\t\tvar input = document.createElement(\"input\");\r\n\t\t\r\n\t\tinput.setAttribute(\"type\", this.params.clearable ? \"search\" : \"text\");\r\n\t\t\r\n\t\tinput.style.padding = \"4px\";\r\n\t\tinput.style.width = \"100%\";\r\n\t\tinput.style.boxSizing = \"border-box\";\r\n\t\t\r\n\t\tif(!this.params.autocomplete){\r\n\t\t\tinput.style.cursor = \"default\";\r\n\t\t\tinput.style.caretColor = \"transparent\";\r\n\t\t\t// input.readOnly = (this.edit.currentCell != false);\r\n\t\t}\r\n\t\t\r\n\t\tif(attribs && typeof attribs == \"object\"){\r\n\t\t\tfor (let key in attribs){\r\n\t\t\t\tif(key.charAt(0) == \"+\"){\r\n\t\t\t\t\tkey = key.slice(1);\r\n\t\t\t\t\tinput.setAttribute(key, input.getAttribute(key) + attribs[\"+\" + key]);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tinput.setAttribute(key, attribs[key]);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\tif(this.params.mask){\r\n\t\t\tmaskInput(input, this.params);\r\n\t\t}\r\n\t\t\r\n\t\tthis._bindInputEvents(input);\r\n\t\t\r\n\t\treturn input;\r\n\t}\r\n\t\r\n\t_initializeParams(params){\r\n\t\tvar valueKeys = [\"values\", \"valuesURL\", \"valuesLookup\"],\r\n\t\tvalueCheck;\r\n\t\t\r\n\t\tparams = Object.assign({}, params);\r\n\t\t\r\n\t\tparams.verticalNavigation = params.verticalNavigation || \"editor\";\r\n\t\tparams.placeholderLoading = typeof params.placeholderLoading === \"undefined\" ? \"Searching ...\" : params.placeholderLoading;\r\n\t\tparams.placeholderEmpty = typeof params.placeholderEmpty === \"undefined\" ? \"No Results Found\" : params.placeholderEmpty;\r\n\t\tparams.filterDelay = typeof params.filterDelay === \"undefined\" ? 300 : params.filterDelay;\r\n\t\t\r\n\t\tparams.emptyValue = Object.keys(params).includes(\"emptyValue\") ? params.emptyValue : \"\";\r\n\t\t\r\n\t\tvalueCheck = Object.keys(params).filter(key => valueKeys.includes(key)).length;\r\n\t\t\r\n\t\tif(!valueCheck){\r\n\t\t\tconsole.warn(\"list editor config error - either the values, valuesURL, or valuesLookup option must be set\");\r\n\t\t}else if(valueCheck > 1){\r\n\t\t\tconsole.warn(\"list editor config error - only one of the values, valuesURL, or valuesLookup options can be set on the same editor\");\r\n\t\t}\r\n\t\t\r\n\t\tif(params.autocomplete){\r\n\t\t\tif(params.multiselect){\r\n\t\t\t\tparams.multiselect = false;\r\n\t\t\t\tconsole.warn(\"list editor config error - multiselect option is not available when autocomplete is enabled\");\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tif(params.freetext){\r\n\t\t\t\tparams.freetext = false;\r\n\t\t\t\tconsole.warn(\"list editor config error - freetext option is only available when autocomplete is enabled\");\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif(params.filterFunc){\r\n\t\t\t\tparams.filterFunc = false;\r\n\t\t\t\tconsole.warn(\"list editor config error - filterFunc option is only available when autocomplete is enabled\");\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif(params.filterRemote){\r\n\t\t\t\tparams.filterRemote = false;\r\n\t\t\t\tconsole.warn(\"list editor config error - filterRemote option is only available when autocomplete is enabled\");\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif(params.mask){\r\n\t\t\t\tparams.mask = false;\r\n\t\t\t\tconsole.warn(\"list editor config error - mask option is only available when autocomplete is enabled\");\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif(params.allowEmpty){\r\n\t\t\t\tparams.allowEmpty = false;\r\n\t\t\t\tconsole.warn(\"list editor config error - allowEmpty option is only available when autocomplete is enabled\");\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif(params.listOnEmpty){\r\n\t\t\t\tparams.listOnEmpty = false;\r\n\t\t\t\tconsole.warn(\"list editor config error - listOnEmpty option is only available when autocomplete is enabled\");\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\tif(params.filterRemote && !(typeof params.valuesLookup === \"function\" || params.valuesURL)){\r\n\t\t\tparams.filterRemote = false;\r\n\t\t\tconsole.warn(\"list editor config error - filterRemote option should only be used when values list is populated from a remote source\");\r\n\t\t}\r\n\t\treturn params;\r\n\t}\r\n\t//////////////////////////////////////\r\n\t////////// Event Handling ////////////\r\n\t//////////////////////////////////////\r\n\t\r\n\t_bindInputEvents(input){\r\n\t\tinput.addEventListener(\"focus\", this._inputFocus.bind(this));\r\n\t\tinput.addEventListener(\"click\", this._inputClick.bind(this));\r\n\t\tinput.addEventListener(\"blur\", this._inputBlur.bind(this));\r\n\t\tinput.addEventListener(\"keydown\", this._inputKeyDown.bind(this));\r\n\t\tinput.addEventListener(\"search\", this._inputSearch.bind(this));\r\n\t\t\r\n\t\tif(this.params.autocomplete){\r\n\t\t\tinput.addEventListener(\"keyup\", this._inputKeyUp.bind(this));\r\n\t\t}\r\n\t}\r\n\t\r\n\t\r\n\t_inputFocus(e){\r\n\t\tthis.rebuildOptionsList();\r\n\t}\r\n\t\r\n\t_filter(){\r\n\t\tif(this.params.filterRemote){\r\n\t\t\tclearTimeout(this.filterTimeout);\r\n\t\t\t\r\n\t\t\tthis.filterTimeout = setTimeout(() => {\r\n\t\t\t\tthis.rebuildOptionsList();\r\n\t\t\t}, this.params.filterDelay);\r\n\t\t}else{\r\n\t\t\tthis._filterList();\r\n\t\t}\r\n\t}\r\n\t\r\n\t_inputClick(e){\r\n\t\te.stopPropagation();\r\n\t}\r\n\t\r\n\t_inputBlur(e){\r\n\t\tif(this.blurable){\r\n\t\t\tif(this.popup){\r\n\t\t\t\tthis.popup.hide();\r\n\t\t\t}else{\r\n\t\t\t\tthis._resolveValue(true);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\t_inputSearch(){\r\n\t\tthis._clearChoices();\r\n\t}\r\n\t\r\n\t_inputKeyDown(e){\r\n\t\tswitch(e.keyCode){\r\n\t\t\t\r\n\t\t\tcase 38: //up arrow\r\n\t\t\t\tthis._keyUp(e);\r\n\t\t\t\tbreak;\r\n\t\t\t\r\n\t\t\tcase 40: //down arrow\r\n\t\t\t\tthis._keyDown(e);\r\n\t\t\t\tbreak;\r\n\t\t\t\r\n\t\t\tcase 37: //left arrow\r\n\t\t\tcase 39: //right arrow\r\n\t\t\t\tthis._keySide(e);\r\n\t\t\t\tbreak;\r\n\t\t\t\r\n\t\t\tcase 13: //enter\r\n\t\t\t\tthis._keyEnter();\r\n\t\t\t\tbreak;\r\n\t\t\t\r\n\t\t\tcase 27: //escape\r\n\t\t\t\tthis._keyEsc();\r\n\t\t\t\tbreak;\r\n\t\t\t\r\n\t\t\tcase 36: //home\r\n\t\t\tcase 35: //end\r\n\t\t\t\tthis._keyHomeEnd(e);\r\n\t\t\t\tbreak;\r\n\t\t\t\r\n\t\t\tcase 9: //tab\r\n\t\t\t\tbreak;\r\n\t\t\t\r\n\t\t\tdefault:\r\n\t\t\t\tthis._keySelectLetter(e);\r\n\t\t}\r\n\t}\r\n\t\r\n\t_inputKeyUp(e){\r\n\t\tswitch(e.keyCode){\r\n\t\t\tcase 38: //up arrow\r\n\t\t\tcase 37: //left arrow\r\n\t\t\tcase 39: //up arrow\r\n\t\t\tcase 40: //right arrow\r\n\t\t\tcase 13: //enter\r\n\t\t\tcase 27: //escape\r\n\t\t\t\tbreak;\r\n\t\t\t\r\n\t\t\tdefault:\r\n\t\t\t\tthis._keyAutoCompLetter(e);\r\n\t\t}\r\n\t}\r\n\t\r\n\t_preventPopupBlur(){\r\n\t\tif(this.popup){\r\n\t\t\tthis.popup.blockHide();\r\n\t\t}\r\n\t\t\r\n\t\tsetTimeout(() =>{\r\n\t\t\tif(this.popup){\r\n\t\t\t\tthis.popup.restoreHide();\r\n\t\t\t}\r\n\t\t}, 10);\r\n\t}\r\n\t\r\n\t_preventBlur(){\r\n\t\tthis.blurable = false;\r\n\t\t\r\n\t\tsetTimeout(() =>{\r\n\t\t\tthis.blurable = true;\r\n\t\t}, 10);\r\n\t}\r\n\t\r\n\t//////////////////////////////////////\r\n\t//////// Keyboard Navigation /////////\r\n\t//////////////////////////////////////\r\n\t\r\n\t_keyUp(e){\r\n\t\tvar index = this.displayItems.indexOf(this.focusedItem);\r\n\t\t\r\n\t\tif(this.params.verticalNavigation == \"editor\" || (this.params.verticalNavigation == \"hybrid\" && index)){\r\n\t\t\te.stopImmediatePropagation();\r\n\t\t\te.stopPropagation();\r\n\t\t\te.preventDefault();\r\n\t\t\t\r\n\t\t\tif(index > 0){\r\n\t\t\t\tthis._focusItem(this.displayItems[index - 1]);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\t_keyDown(e){\r\n\t\tvar index = this.displayItems.indexOf(this.focusedItem);\r\n\t\t\r\n\t\tif(this.params.verticalNavigation == \"editor\" || (this.params.verticalNavigation == \"hybrid\" && index < this.displayItems.length - 1)){\r\n\t\t\te.stopImmediatePropagation();\r\n\t\t\te.stopPropagation();\r\n\t\t\te.preventDefault();\r\n\t\t\t\r\n\t\t\tif(index < this.displayItems.length - 1){\r\n\t\t\t\tif(index == -1){\r\n\t\t\t\t\tthis._focusItem(this.displayItems[0]);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tthis._focusItem(this.displayItems[index + 1]);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\t_keySide(e){\r\n\t\te.stopImmediatePropagation();\r\n\t\te.stopPropagation();\r\n\t\te.preventDefault();\r\n\t}\r\n\t\r\n\t_keyEnter(e){\r\n\t\tif(this.params.autocomplete && this.lastAction === \"typing\"){\r\n\t\t\tthis._resolveValue(true);\r\n\t\t}else{\r\n\t\t\tif(this.focusedItem){\r\n\t\t\t\tthis._chooseItem(this.focusedItem);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\t_keyEsc(e){\r\n\t\tthis._cancel();\r\n\t}\r\n\t\r\n\t_keyHomeEnd(e){\r\n\t\tif(this.params.autocomplete){\r\n\t\t\t//prevent table navigation while using input element\r\n\t\t\te.stopImmediatePropagation();\r\n\t\t}\r\n\t}\r\n\t\r\n\t_keySelectLetter(e){\r\n\t\tif(!this.params.autocomplete){\r\n\t\t\t// if(this.edit.currentCell === false){\r\n\t\t\te.preventDefault();\r\n\t\t\t// }\r\n\t\t\t\r\n\t\t\tif(e.keyCode >= 38 && e.keyCode <= 90){\r\n\t\t\t\tthis._scrollToValue(e.keyCode);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\t_keyAutoCompLetter(e){\r\n\t\tthis._filter();\r\n\t\tthis.lastAction = \"typing\";\r\n\t\tthis.typing = true;\r\n\t}\r\n\t\r\n\t\r\n\t_scrollToValue(char){\r\n\t\tclearTimeout(this.filterTimeout);\r\n\t\t\r\n\t\tvar character = String.fromCharCode(char).toLowerCase();\r\n\t\tthis.filterTerm += character.toLowerCase();\r\n\t\t\r\n\t\tvar match = this.displayItems.find((item) => {\r\n\t\t\treturn typeof item.label !== \"undefined\" && item.label.toLowerCase().startsWith(this.filterTerm);\r\n\t\t});\r\n\t\t\r\n\t\tif(match){\r\n\t\t\tthis._focusItem(match);\r\n\t\t}\r\n\t\t\r\n\t\tthis.filterTimeout = setTimeout(() => {\r\n\t\t\tthis.filterTerm = \"\";\r\n\t\t}, 800);\r\n\t}\r\n\t\r\n\t_focusItem(item){\r\n\t\tthis.lastAction = \"focus\";\r\n\t\t\r\n\t\tif(this.focusedItem && this.focusedItem.element){\r\n\t\t\tthis.focusedItem.element.classList.remove(\"focused\");\r\n\t\t}\r\n\t\t\r\n\t\tthis.focusedItem = item;\r\n\t\t\r\n\t\tif(item && item.element){\r\n\t\t\titem.element.classList.add(\"focused\");\r\n\t\t\titem.element.scrollIntoView({behavior: 'smooth', block: 'nearest', inline: 'start'});\r\n\t\t}\r\n\t}\r\n\t\r\n\t\r\n\t//////////////////////////////////////\r\n\t/////// Data List Generation /////////\r\n\t//////////////////////////////////////\r\n\theaderFilterInitialListGen(){\r\n\t\tthis._generateOptions(true);\r\n\t}\r\n\t\r\n\trebuildOptionsList(){\r\n\t\tthis._generateOptions()\r\n\t\t\t.then(this._sortOptions.bind(this))\r\n\t\t\t.then(this._buildList.bind(this))\r\n\t\t\t.then(this._showList.bind(this))\r\n\t\t\t.catch((e) => {\r\n\t\t\t\tif(!Number.isInteger(e)){\r\n\t\t\t\t\tconsole.error(\"List generation error\", e);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t}\r\n\t\r\n\t_filterList(){\r\n\t\tthis._buildList(this._filterOptions());\r\n\t\tthis._showList();\r\n\t}\r\n\t\r\n\t_generateOptions(silent){\r\n\t\tvar values = [];\r\n\t\tvar iteration = ++ this.listIteration;\r\n\t\t\r\n\t\tthis.filtered = false;\r\n\t\t\r\n\t\tif(this.params.values){\r\n\t\t\tvalues = this.params.values;\r\n\t\t}else if (this.params.valuesURL){\r\n\t\t\tvalues = this._ajaxRequest(this.params.valuesURL, this.input.value);\r\n\t\t}else{\r\n\t\t\tif(typeof this.params.valuesLookup === \"function\"){\r\n\t\t\t\tvalues = this.params.valuesLookup(this.cell, this.input.value);\r\n\t\t\t}else if(this.params.valuesLookup){\r\n\t\t\t\tvalues = this._uniqueColumnValues(this.params.valuesLookupField);\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\tif(values instanceof Promise){\r\n\t\t\tif(!silent){\r\n\t\t\t\tthis._addPlaceholder(this.params.placeholderLoading);\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn values.then()\r\n\t\t\t\t.then((responseValues) => {\r\n\t\t\t\t\tif(this.listIteration === iteration){\r\n\t\t\t\t\t\treturn this._parseList(responseValues);\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\treturn Promise.reject(iteration);\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t}else{\r\n\t\t\treturn Promise.resolve(this._parseList(values));\r\n\t\t}\r\n\t}\r\n\t\r\n\t_addPlaceholder(contents){\r\n\t\tvar placeholder = document.createElement(\"div\");\r\n\t\t\r\n\t\tif(typeof contents === \"function\"){\r\n\t\t\tcontents = contents(this.cell.getComponent(), this.listEl);\r\n\t\t}\r\n\t\t\r\n\t\tif(contents){\r\n\t\t\tthis._clearList();\r\n\t\t\t\r\n\t\t\tif(contents instanceof HTMLElement){\r\n\t\t\t\tplaceholder = contents;\r\n\t\t\t}else{\r\n\t\t\t\tplaceholder.classList.add(\"tabulator-edit-list-placeholder\");\r\n\t\t\t\tplaceholder.innerHTML = contents;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tthis.listEl.appendChild(placeholder);\r\n\t\t\t\r\n\t\t\tthis._showList();\r\n\t\t}\r\n\t}\r\n\t\r\n\t_ajaxRequest(url, term){\r\n\t\tvar params = this.params.filterRemote ? {term:term} : {};\r\n\t\turl = urlBuilder(url, {}, params);\r\n\t\t\r\n\t\treturn fetch(url)\r\n\t\t\t.then((response)=>{\r\n\t\t\t\tif(response.ok) {\r\n\t\t\t\t\treturn response.json()\r\n\t\t\t\t\t\t.catch((error)=>{\r\n\t\t\t\t\t\t\tconsole.warn(\"List Ajax Load Error - Invalid JSON returned\", error);\r\n\t\t\t\t\t\t\treturn Promise.reject(error);\r\n\t\t\t\t\t\t});\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.error(\"List Ajax Load Error - Connection Error: \" + response.status, response.statusText);\r\n\t\t\t\t\treturn Promise.reject(response);\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t\t.catch((error)=>{\r\n\t\t\t\tconsole.error(\"List Ajax Load Error - Connection Error: \", error);\r\n\t\t\t\treturn Promise.reject(error);\r\n\t\t\t});\r\n\t}\r\n\t\r\n\t_uniqueColumnValues(field){\r\n\t\tvar output = {},\r\n\t\tdata = this.table.getData(this.params.valuesLookup),\r\n\t\tcolumn;\r\n\t\t\r\n\t\tif(field){\r\n\t\t\tcolumn = this.table.columnManager.getColumnByField(field);\r\n\t\t}else{\r\n\t\t\tcolumn = this.cell.getColumn()._getSelf();\r\n\t\t}\r\n\t\t\r\n\t\tif(column){\r\n\t\t\tdata.forEach((row) => {\r\n\t\t\t\tvar val = column.getFieldValue(row);\r\n\t\t\t\t\r\n\t\t\t\tif(val !== null && typeof val !== \"undefined\" && val !== \"\"){\r\n\t\t\t\t\toutput[val] = true;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"unable to find matching column to create select lookup list:\", field);\r\n\t\t\toutput = [];\r\n\t\t}\r\n\t\t\r\n\t\treturn Object.keys(output);\r\n\t}\r\n\t\r\n\t\r\n\t_parseList(inputValues){\r\n\t\tvar data = [];\r\n\t\t\r\n\t\tif(!Array.isArray(inputValues)){\r\n\t\t\tinputValues = Object.entries(inputValues).map(([key, value]) => {\r\n\t\t\t\treturn {\r\n\t\t\t\t\tlabel:value,\r\n\t\t\t\t\tvalue:key,\r\n\t\t\t\t};\r\n\t\t\t});\r\n\t\t}\r\n\t\t\r\n\t\tinputValues.forEach((value) => {\r\n\t\t\tif(typeof value !== \"object\"){\r\n\t\t\t\tvalue = {\r\n\t\t\t\t\tlabel:value,\r\n\t\t\t\t\tvalue:value,\r\n\t\t\t\t};\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tthis._parseListItem(value, data, 0);\r\n\t\t});\r\n\t\t\r\n\t\tif(!this.currentItems.length && this.params.freetext){\r\n\t\t\tthis.input.value = this.initialValues;\r\n\t\t\tthis.typing = true;\r\n\t\t\tthis.lastAction = \"typing\";\r\n\t\t}\r\n\t\t\r\n\t\tthis.data = data;\r\n\t\t\r\n\t\treturn data; \r\n\t}\r\n\t\r\n\t_parseListItem(option, data, level){\r\n\t\tvar item = {};\r\n\t\t\r\n\t\tif(option.options){\r\n\t\t\titem = this._parseListGroup(option, level + 1);\r\n\t\t}else{\r\n\t\t\titem = {\r\n\t\t\t\tlabel:option.label,\r\n\t\t\t\tvalue:option.value,\r\n\t\t\t\titemParams:option.itemParams,\r\n\t\t\t\telementAttributes: option.elementAttributes,\r\n\t\t\t\telement:false,\r\n\t\t\t\tselected:false,\r\n\t\t\t\tvisible:true,\r\n\t\t\t\tlevel:level,\r\n\t\t\t\toriginal:option,\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tif(this.initialValues && this.initialValues.indexOf(option.value) > -1){\r\n\t\t\t\tthis._chooseItem(item, true);\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\tdata.push(item);\r\n\t}\r\n\t\r\n\t_parseListGroup(option, level){\r\n\t\tvar item = {\r\n\t\t\tlabel:option.label,\r\n\t\t\tgroup:true,\r\n\t\t\titemParams:option.itemParams,\r\n\t\t\telementAttributes:option.elementAttributes,\r\n\t\t\telement:false,\r\n\t\t\tvisible:true,\r\n\t\t\tlevel:level,\r\n\t\t\toptions:[],\r\n\t\t\toriginal:option,\r\n\t\t};\r\n\t\t\r\n\t\toption.options.forEach((child) => {\r\n\t\t\tthis._parseListItem(child, item.options, level);\r\n\t\t});\r\n\t\t\r\n\t\treturn item;\r\n\t}\r\n\t\r\n\t_sortOptions(options){\r\n\t\tvar sorter;\r\n\t\t\r\n\t\tif(this.params.sort){\r\n\t\t\tsorter = typeof this.params.sort === \"function\" ? this.params.sort : this._defaultSortFunction.bind(this);\r\n\t\t\t\r\n\t\t\tthis._sortGroup(sorter, options);\r\n\t\t}\r\n\t\t\r\n\t\treturn options;\r\n\t}\r\n\t\r\n\t_sortGroup(sorter, options){\r\n\t\toptions.sort((a,b) => {\r\n\t\t\treturn sorter(a.label, b.label, a.value, b.value, a.original, b.original);\r\n\t\t});\r\n\t\t\r\n\t\toptions.forEach((option) => {\r\n\t\t\tif(option.group){\r\n\t\t\t\tthis._sortGroup(sorter, option.options);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\t\r\n\t_defaultSortFunction(as, bs){\r\n\t\tvar a, b, a1, b1, i= 0, L, rx = /(\\d+)|(\\D+)/g, rd = /\\d/;\r\n\t\tvar emptyAlign = 0;\r\n\t\t\r\n\t\tif(this.params.sort === \"desc\"){\r\n\t\t\t[as, bs] = [bs, as];\r\n\t\t}\r\n\t\t\r\n\t\t//handle empty values\r\n\t\tif(!as && as!== 0){\r\n\t\t\temptyAlign = !bs && bs!== 0 ? 0 : -1;\r\n\t\t}else if(!bs && bs!== 0){\r\n\t\t\temptyAlign = 1;\r\n\t\t}else{\r\n\t\t\tif(isFinite(as) && isFinite(bs)) return as - bs;\r\n\t\t\ta = String(as).toLowerCase();\r\n\t\t\tb = String(bs).toLowerCase();\r\n\t\t\tif(a === b) return 0;\r\n\t\t\tif(!(rd.test(a) && rd.test(b))) return a > b ? 1 : -1;\r\n\t\t\ta = a.match(rx);\r\n\t\t\tb = b.match(rx);\r\n\t\t\tL = a.length > b.length ? b.length : a.length;\r\n\t\t\twhile(i < L){\r\n\t\t\t\ta1= a[i];\r\n\t\t\t\tb1= b[i++];\r\n\t\t\t\tif(a1 !== b1){\r\n\t\t\t\t\tif(isFinite(a1) && isFinite(b1)){\r\n\t\t\t\t\t\tif(a1.charAt(0) === \"0\") a1 = \".\" + a1;\r\n\t\t\t\t\t\tif(b1.charAt(0) === \"0\") b1 = \".\" + b1;\r\n\t\t\t\t\t\treturn a1 - b1;\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse return a1 > b1 ? 1 : -1;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn a.length > b.length;\r\n\t\t}\r\n\t\t\r\n\t\treturn emptyAlign;\r\n\t}\r\n\t\r\n\t_filterOptions(){\r\n\t\tvar filterFunc = this.params.filterFunc || this._defaultFilterFunc,\r\n\t\tterm = this.input.value;\r\n\t\t\r\n\t\tif(term){\r\n\t\t\tthis.filtered = true;\r\n\t\t\t\r\n\t\t\tthis.data.forEach((item) => {\r\n\t\t\t\tthis._filterItem(filterFunc, term, item);\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tthis.filtered = false;\r\n\t\t}\r\n\t\t\r\n\t\treturn this.data;\r\n\t}\r\n\t\r\n\t_filterItem(func, term, item){\r\n\t\tvar matches = false;\r\n\t\t\r\n\t\tif(!item.group){\r\n\t\t\titem.visible = func(term, item.label, item.value, item.original);\r\n\t\t}else{\r\n\t\t\titem.options.forEach((option) => {\r\n\t\t\t\tif(this._filterItem(func, term, option)){\r\n\t\t\t\t\tmatches = true;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\t\r\n\t\t\titem.visible = matches;\r\n\t\t}\r\n\t\t\r\n\t\treturn item.visible;\r\n\t}\r\n\t\r\n\t_defaultFilterFunc(term, label, value, item){\r\n\t\tterm = String(term).toLowerCase();\r\n\t\t\r\n\t\tif(label !== null && typeof label !== \"undefined\"){\r\n\t\t\tif(String(label).toLowerCase().indexOf(term) > -1 || String(value).toLowerCase().indexOf(term) > -1){\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\treturn false;\r\n\t}\r\n\t\r\n\t//////////////////////////////////////\r\n\t/////////// Display List /////////////\r\n\t//////////////////////////////////////\r\n\t\r\n\t_clearList(){\r\n\t\twhile(this.listEl.firstChild) this.listEl.removeChild(this.listEl.firstChild);\r\n\t\t\r\n\t\tthis.displayItems = [];\r\n\t}\r\n\t\r\n\t_buildList(data){\r\n\t\tthis._clearList();\r\n\t\t\r\n\t\tdata.forEach((option) => {\r\n\t\t\tthis._buildItem(option);\r\n\t\t});\r\n\t\t\r\n\t\tif(!this.displayItems.length){\r\n\t\t\tthis._addPlaceholder(this.params.placeholderEmpty);\r\n\t\t} \r\n\t}\r\n\t\r\n\t_buildItem(item){\r\n\t\tvar el = item.element,\r\n\t\tcontents;\r\n\t\t\r\n\t\tif(!this.filtered || item.visible){\r\n\t\t\t\r\n\t\t\tif(!el){\r\n\t\t\t\tel = document.createElement(\"div\");\r\n\t\t\t\tel.tabIndex = 0;\r\n\t\t\t\t\r\n\t\t\t\tcontents = this.params.itemFormatter ? this.params.itemFormatter(item.label, item.value, item.original, el) : item.label;\r\n\t\t\t\t\r\n\t\t\t\tif(contents instanceof HTMLElement){\r\n\t\t\t\t\tel.appendChild(contents);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tel.innerHTML = contents;\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\tif(item.group){\r\n\t\t\t\t\tel.classList.add(\"tabulator-edit-list-group\");\r\n\t\t\t\t}else{\r\n\t\t\t\t\tel.classList.add(\"tabulator-edit-list-item\");\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\tel.classList.add(\"tabulator-edit-list-group-level-\" + item.level);\r\n\t\t\t\t\r\n\t\t\t\tif(item.elementAttributes && typeof item.elementAttributes == \"object\"){\r\n\t\t\t\t\tfor (let key in item.elementAttributes){\r\n\t\t\t\t\t\tif(key.charAt(0) == \"+\"){\r\n\t\t\t\t\t\t\tkey = key.slice(1);\r\n\t\t\t\t\t\t\tel.setAttribute(key, this.input.getAttribute(key) + item.elementAttributes[\"+\" + key]);\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\tel.setAttribute(key, item.elementAttributes[key]);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\tif(item.group){\r\n\t\t\t\t\tel.addEventListener(\"click\", this._groupClick.bind(this, item));\r\n\t\t\t\t}else{\r\n\t\t\t\t\tel.addEventListener(\"click\", this._itemClick.bind(this, item));\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\tel.addEventListener(\"mousedown\", this._preventBlur.bind(this));\r\n\t\t\t\t\r\n\t\t\t\titem.element = el;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tthis._styleItem(item);\r\n\t\t\t\r\n\t\t\tthis.listEl.appendChild(el);\r\n\t\t\t\r\n\t\t\tif(item.group){\r\n\t\t\t\titem.options.forEach((option) => {\r\n\t\t\t\t\tthis._buildItem(option);\r\n\t\t\t\t});\r\n\t\t\t}else{\r\n\t\t\t\tthis.displayItems.push(item);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\t_showList(){\r\n\t\tvar startVis = this.popup && this.popup.isVisible();\r\n\t\t\r\n\t\tif(this.input.parentNode){\r\n\t\t\tif(this.params.autocomplete && this.input.value === \"\" && !this.params.listOnEmpty){\r\n\t\t\t\tif(this.popup){\r\n\t\t\t\t\tthis.popup.hide(true);\r\n\t\t\t\t}\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tthis._setListWidth();\r\n\t\t\t\r\n\t\t\tif(!this.popup){\r\n\t\t\t\tthis.popup = this.edit.popup(this.listEl);\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tthis.popup.show(this.cell.getElement(), \"bottom\");\r\n\t\t\t\r\n\t\t\tif(!startVis){\r\n\t\t\t\tsetTimeout(() => {\r\n\t\t\t\t\tthis.popup.hideOnBlur(this._resolveValue.bind(this, true));\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\t_styleItem(item){\r\n\t\tif(item && item.element){\r\n\t\t\tif(item.selected){\r\n\t\t\t\titem.element.classList.add(\"active\");\r\n\t\t\t}else{\r\n\t\t\t\titem.element.classList.remove(\"active\");\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\t//////////////////////////////////////\r\n\t///////// User Interaction ///////////\r\n\t//////////////////////////////////////\r\n\t\r\n\t_itemClick(item, e){\r\n\t\te.stopPropagation();\r\n\t\t\r\n\t\tthis._chooseItem(item);\r\n\t}\r\n\t\r\n\t_groupClick(item, e){\r\n\t\te.stopPropagation();\r\n\t}\r\n\t\r\n\t\r\n\t//////////////////////////////////////\r\n\t////// Current Item Management ///////\r\n\t//////////////////////////////////////\r\n\t\r\n\t_cancel(){\r\n\t\tthis.popup.hide(true);\r\n\t\tthis.actions.cancel();\r\n\t}\r\n\t\r\n\t_clearChoices(){\r\n\t\tthis.typing = true;\r\n\t\t\r\n\t\tthis.currentItems.forEach((item) => {\r\n\t\t\titem.selected = false;\r\n\t\t\tthis._styleItem(item);\r\n\t\t});\r\n\t\t\r\n\t\tthis.currentItems = [];\r\n\t\t\r\n\t\tthis.focusedItem = null;\r\n\t}\r\n\t\r\n\t_chooseItem(item, silent){\r\n\t\tvar index;\r\n\t\t\r\n\t\tthis.typing = false;\r\n\t\t\r\n\t\tif(this.params.multiselect){\r\n\t\t\tindex = this.currentItems.indexOf(item);\r\n\t\t\t\r\n\t\t\tif(index > -1){\r\n\t\t\t\tthis.currentItems.splice(index, 1);\r\n\t\t\t\titem.selected = false;\r\n\t\t\t}else{\r\n\t\t\t\tthis.currentItems.push(item);\r\n\t\t\t\titem.selected = true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tthis.input.value = this.currentItems.map(item => item.label).join(\",\");\r\n\t\t\t\r\n\t\t\tthis._styleItem(item);\r\n\t\t\t\r\n\t\t}else{\r\n\t\t\tthis.currentItems = [item];\r\n\t\t\titem.selected = true;\r\n\t\t\t\r\n\t\t\tthis.input.value = item.label;\r\n\t\t\t\r\n\t\t\tthis._styleItem(item);\r\n\t\t\t\r\n\t\t\tif(!silent){\r\n\t\t\t\tthis._resolveValue();\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\tthis._focusItem(item);\r\n\t}\r\n\t\r\n\t_resolveValue(blur){\r\n\t\tvar output, initialValue;\r\n\r\n\t\tif(this.popup){\r\n\t\t\tthis.popup.hide(true);\r\n\t\t}\r\n\t\t\r\n\t\tif(this.params.multiselect){\r\n\t\t\toutput = this.currentItems.map(item => item.value);\r\n\t\t}else{\r\n\t\t\tif(blur && this.params.autocomplete && this.typing){\r\n\t\t\t\tif(this.params.freetext || (this.params.allowEmpty && this.input.value === \"\")){\r\n\t\t\t\t\toutput = this.input.value;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tthis.actions.cancel();\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tif(this.currentItems[0]){\r\n\t\t\t\t\toutput = this.currentItems[0].value;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tinitialValue = this.initialValues[0];\r\n\t\t\t\t\t\r\n\t\t\t\t\tif(initialValue === null || typeof initialValue === \"undefined\" || initialValue === \"\"){\r\n\t\t\t\t\t\toutput = initialValue;\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\toutput = this.params.emptyValue;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\tif(output === \"\"){\r\n\t\t\toutput = this.params.emptyValue;\r\n\t\t}\r\n\t\t\r\n\t\tthis.actions.success(output);\r\n\t\t\r\n\t\tif(this.isFilter){\r\n\t\t\tthis.initialValues = output && !Array.isArray(output) ? [output] : output;\r\n\t\t\tthis.currentItems = [];\r\n\t\t}\r\n\t}\r\n\t\r\n}\r\n","import input from './editors/input.js';\r\nimport textarea from './editors/textarea.js';\r\nimport number from './editors/number.js';\r\nimport range from './editors/range.js';\r\nimport date from './editors/date.js';\r\nimport time from './editors/time.js';\r\nimport datetime from './editors/datetime.js';\r\nimport select from './editors/select.js';\r\nimport list from './editors/list.js';\r\nimport autocomplete from './editors/autocomplete.js';\r\nimport star from './editors/star.js';\r\nimport progress from './editors/progress.js';\r\nimport tickCross from './editors/tickCross.js';\r\n\r\nexport default {\r\n\tinput:input,\r\n\ttextarea:textarea,\r\n\tnumber:number,\r\n\trange:range,\r\n\tdate:date,\r\n\ttime:time,\r\n\tdatetime:datetime,\r\n\tselect:select,\r\n\tlist:list,\r\n\tautocomplete:autocomplete,\r\n\tstar:star,\r\n\tprogress:progress,\r\n\ttickCross:tickCross,\r\n};","import maskInput from '../../inputMask.js';\r\n\r\n//input element\r\nexport default function(cell, onRendered, success, cancel, editorParams){\r\n\t//create and style input\r\n\tvar cellValue = cell.getValue(),\r\n\tinput = document.createElement(\"input\");\r\n\r\n\tinput.setAttribute(\"type\", editorParams.search ? \"search\" : \"text\");\r\n\r\n\tinput.style.padding = \"4px\";\r\n\tinput.style.width = \"100%\";\r\n\tinput.style.boxSizing = \"border-box\";\r\n\r\n\tif(editorParams.elementAttributes && typeof editorParams.elementAttributes == \"object\"){\r\n\t\tfor (let key in editorParams.elementAttributes){\r\n\t\t\tif(key.charAt(0) == \"+\"){\r\n\t\t\t\tkey = key.slice(1);\r\n\t\t\t\tinput.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\r\n\t\t\t}else{\r\n\t\t\t\tinput.setAttribute(key, editorParams.elementAttributes[key]);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tinput.value = typeof cellValue !== \"undefined\" ? cellValue : \"\";\r\n\r\n\tonRendered(function(){\r\n\t\tinput.focus({preventScroll: true});\r\n\t\tinput.style.height = \"100%\";\r\n\r\n\t\tif(editorParams.selectContents){\r\n\t\t\tinput.select();\r\n\t\t}\r\n\t});\r\n\r\n\tfunction onChange(e){\r\n\t\tif(((cellValue === null || typeof cellValue === \"undefined\") && input.value !== \"\") || input.value !== cellValue){\r\n\t\t\tif(success(input.value)){\r\n\t\t\t\tcellValue = input.value; //persist value if successfully validated incase editor is used as header filter\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tcancel();\r\n\t\t}\r\n\t}\r\n\r\n\t//submit new value on blur or change\r\n\tinput.addEventListener(\"change\", onChange);\r\n\tinput.addEventListener(\"blur\", onChange);\r\n\r\n\t//submit new value on enter\r\n\tinput.addEventListener(\"keydown\", function(e){\r\n\t\tswitch(e.keyCode){\r\n\t\t\t// case 9:\r\n\t\t\tcase 13:\r\n\t\t\t\tonChange(e);\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase 27:\r\n\t\t\t\tcancel();\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase 35:\r\n\t\t\tcase 36:\r\n\t\t\t\te.stopPropagation();\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t});\r\n\r\n\tif(editorParams.mask){\r\n\t\tmaskInput(input, editorParams);\r\n\t}\r\n\r\n\treturn input;\r\n}","import maskInput from '../../inputMask.js';\r\n\r\n//resizable text area element\r\nexport default function(cell, onRendered, success, cancel, editorParams){\r\n\tvar cellValue = cell.getValue(),\r\n\tvertNav = editorParams.verticalNavigation || \"hybrid\",\r\n\tvalue = String(cellValue !== null && typeof cellValue !== \"undefined\" ? cellValue : \"\"),\r\n\tinput = document.createElement(\"textarea\"),\r\n\tscrollHeight = 0;\r\n\r\n\t//create and style input\r\n\tinput.style.display = \"block\";\r\n\tinput.style.padding = \"2px\";\r\n\tinput.style.height = \"100%\";\r\n\tinput.style.width = \"100%\";\r\n\tinput.style.boxSizing = \"border-box\";\r\n\tinput.style.whiteSpace = \"pre-wrap\";\r\n\tinput.style.resize = \"none\";\r\n\r\n\tif(editorParams.elementAttributes && typeof editorParams.elementAttributes == \"object\"){\r\n\t\tfor (let key in editorParams.elementAttributes){\r\n\t\t\tif(key.charAt(0) == \"+\"){\r\n\t\t\t\tkey = key.slice(1);\r\n\t\t\t\tinput.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\r\n\t\t\t}else{\r\n\t\t\t\tinput.setAttribute(key, editorParams.elementAttributes[key]);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tinput.value = value;\r\n\r\n\tonRendered(function(){\r\n\t\tinput.focus({preventScroll: true});\r\n\t\tinput.style.height = \"100%\";\r\n\r\n\t\tinput.scrollHeight;\r\n\t\tinput.style.height = input.scrollHeight + \"px\";\r\n\t\tcell.getRow().normalizeHeight();\r\n\r\n\t\tif(editorParams.selectContents){\r\n\t\t\tinput.select();\r\n\t\t}\r\n\t});\r\n\r\n\tfunction onChange(e){\r\n\r\n\t\tif(((cellValue === null || typeof cellValue === \"undefined\") && input.value !== \"\") || input.value !== cellValue){\r\n\r\n\t\t\tif(success(input.value)){\r\n\t\t\t\tcellValue = input.value; //persist value if successfully validated incase editor is used as header filter\r\n\t\t\t}\r\n\r\n\t\t\tsetTimeout(function(){\r\n\t\t\t\tcell.getRow().normalizeHeight();\r\n\t\t\t},300);\r\n\t\t}else{\r\n\t\t\tcancel();\r\n\t\t}\r\n\t}\r\n\r\n\t//submit new value on blur or change\r\n\tinput.addEventListener(\"change\", onChange);\r\n\tinput.addEventListener(\"blur\", onChange);\r\n\r\n\tinput.addEventListener(\"keyup\", function(){\r\n\r\n\t\tinput.style.height = \"\";\r\n\r\n\t\tvar heightNow = input.scrollHeight;\r\n\r\n\t\tinput.style.height = heightNow + \"px\";\r\n\r\n\t\tif(heightNow != scrollHeight){\r\n\t\t\tscrollHeight = heightNow;\r\n\t\t\tcell.getRow().normalizeHeight();\r\n\t\t}\r\n\t});\r\n\r\n\tinput.addEventListener(\"keydown\", function(e){\r\n\r\n\t\tswitch(e.keyCode){\r\n\r\n\t\t\tcase 13:\r\n\t\t\t\tif(e.shiftKey && editorParams.shiftEnterSubmit){\r\n\t\t\t\t\tonChange(e);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase 27:\r\n\t\t\t\tcancel();\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase 38: //up arrow\r\n\t\t\t\tif(vertNav == \"editor\" || (vertNav == \"hybrid\" && input.selectionStart)){\r\n\t\t\t\t\te.stopImmediatePropagation();\r\n\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t}\r\n\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase 40: //down arrow\r\n\t\t\t\tif(vertNav == \"editor\" || (vertNav == \"hybrid\" && input.selectionStart !== input.value.length)){\r\n\t\t\t\t\te.stopImmediatePropagation();\r\n\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase 35:\r\n\t\t\tcase 36:\r\n\t\t\t\te.stopPropagation();\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t});\r\n\r\n\tif(editorParams.mask){\r\n\t\tmaskInput(input, editorParams);\r\n\t}\r\n\r\n\treturn input;\r\n}","import maskInput from '../../inputMask.js';\r\n\r\n//input element with type of number\r\nexport default function(cell, onRendered, success, cancel, editorParams){\r\n\tvar cellValue = cell.getValue(),\r\n\tvertNav = editorParams.verticalNavigation || \"editor\",\r\n\tinput = document.createElement(\"input\");\r\n\r\n\tinput.setAttribute(\"type\", \"number\");\r\n\r\n\tif(typeof editorParams.max != \"undefined\"){\r\n\t\tinput.setAttribute(\"max\", editorParams.max);\r\n\t}\r\n\r\n\tif(typeof editorParams.min != \"undefined\"){\r\n\t\tinput.setAttribute(\"min\", editorParams.min);\r\n\t}\r\n\r\n\tif(typeof editorParams.step != \"undefined\"){\r\n\t\tinput.setAttribute(\"step\", editorParams.step);\r\n\t}\r\n\r\n\t//create and style input\r\n\tinput.style.padding = \"4px\";\r\n\tinput.style.width = \"100%\";\r\n\tinput.style.boxSizing = \"border-box\";\r\n\r\n\tif(editorParams.elementAttributes && typeof editorParams.elementAttributes == \"object\"){\r\n\t\tfor (let key in editorParams.elementAttributes){\r\n\t\t\tif(key.charAt(0) == \"+\"){\r\n\t\t\t\tkey = key.slice(1);\r\n\t\t\t\tinput.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\r\n\t\t\t}else{\r\n\t\t\t\tinput.setAttribute(key, editorParams.elementAttributes[key]);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tinput.value = cellValue;\r\n\r\n\tvar blurFunc = function(e){\r\n\t\tonChange();\r\n\t};\r\n\r\n\tonRendered(function () {\r\n\t\t//submit new value on blur\r\n\t\tinput.removeEventListener(\"blur\", blurFunc);\r\n\r\n\t\tinput.focus({preventScroll: true});\r\n\t\tinput.style.height = \"100%\";\r\n\r\n\t\t//submit new value on blur\r\n\t\tinput.addEventListener(\"blur\", blurFunc);\r\n\r\n\t\tif(editorParams.selectContents){\r\n\t\t\tinput.select();\r\n\t\t}\r\n\t});\r\n\r\n\tfunction onChange(){\r\n\t\tvar value = input.value;\r\n\r\n\t\tif(!isNaN(value) && value !==\"\"){\r\n\t\t\tvalue = Number(value);\r\n\t\t}\r\n\r\n\t\tif(value !== cellValue){\r\n\t\t\tif(success(value)){\r\n\t\t\t\tcellValue = value; //persist value if successfully validated incase editor is used as header filter\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tcancel();\r\n\t\t}\r\n\t}\r\n\r\n\t//submit new value on enter\r\n\tinput.addEventListener(\"keydown\", function(e){\r\n\t\tswitch(e.keyCode){\r\n\t\t\tcase 13:\r\n\t\t\t// case 9:\r\n\t\t\t\tonChange();\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase 27:\r\n\t\t\t\tcancel();\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase 38: //up arrow\r\n\t\t\tcase 40: //down arrow\r\n\t\t\t\tif(vertNav == \"editor\"){\r\n\t\t\t\t\te.stopImmediatePropagation();\r\n\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase 35:\r\n\t\t\tcase 36:\r\n\t\t\t\te.stopPropagation();\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t});\r\n\r\n\tif(editorParams.mask){\r\n\t\tmaskInput(input, editorParams);\r\n\t}\r\n\r\n\treturn input;\r\n}","//input element with type of number\r\nexport default function(cell, onRendered, success, cancel, editorParams){\r\n\tvar cellValue = cell.getValue(),\r\n\tinput = document.createElement(\"input\");\r\n\r\n\tinput.setAttribute(\"type\", \"range\");\r\n\r\n\tif (typeof editorParams.max != \"undefined\") {\r\n\t\tinput.setAttribute(\"max\", editorParams.max);\r\n\t}\r\n\r\n\tif (typeof editorParams.min != \"undefined\") {\r\n\t\tinput.setAttribute(\"min\", editorParams.min);\r\n\t}\r\n\r\n\tif (typeof editorParams.step != \"undefined\") {\r\n\t\tinput.setAttribute(\"step\", editorParams.step);\r\n\t}\r\n\r\n\t//create and style input\r\n\tinput.style.padding = \"4px\";\r\n\tinput.style.width = \"100%\";\r\n\tinput.style.boxSizing = \"border-box\";\r\n\r\n\tif(editorParams.elementAttributes && typeof editorParams.elementAttributes == \"object\"){\r\n\t\tfor (let key in editorParams.elementAttributes){\r\n\t\t\tif(key.charAt(0) == \"+\"){\r\n\t\t\t\tkey = key.slice(1);\r\n\t\t\t\tinput.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\r\n\t\t\t}else{\r\n\t\t\t\tinput.setAttribute(key, editorParams.elementAttributes[key]);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tinput.value = cellValue;\r\n\r\n\tonRendered(function () {\r\n\t\tinput.focus({preventScroll: true});\r\n\t\tinput.style.height = \"100%\";\r\n\t});\r\n\r\n\tfunction onChange(){\r\n\t\tvar value = input.value;\r\n\r\n\t\tif(!isNaN(value) && value !==\"\"){\r\n\t\t\tvalue = Number(value);\r\n\t\t}\r\n\r\n\t\tif(value != cellValue){\r\n\t\t\tif(success(value)){\r\n\t\t\t\tcellValue = value; //persist value if successfully validated incase editor is used as header filter\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tcancel();\r\n\t\t}\r\n\t}\r\n\r\n\t//submit new value on blur\r\n\tinput.addEventListener(\"blur\", function(e){\r\n\t\tonChange();\r\n\t});\r\n\r\n\t//submit new value on enter\r\n\tinput.addEventListener(\"keydown\", function(e){\r\n\t\tswitch(e.keyCode){\r\n\t\t\tcase 13:\r\n\t\t\t// case 9:\r\n\t\t\t\tonChange();\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase 27:\r\n\t\t\t\tcancel();\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t});\r\n\r\n\treturn input;\r\n}","//input element\r\nexport default function(cell, onRendered, success, cancel, editorParams){\r\n\tvar inputFormat = editorParams.format,\r\n\tDT = inputFormat ? (window.DateTime || luxon.DateTime) : null;\r\n\t\r\n\t//create and style input\r\n\tvar cellValue = cell.getValue(),\r\n\tinput = document.createElement(\"input\");\r\n\t\r\n\tfunction convertDate(value){\r\n\t\tvar newDatetime;\r\n\t\t\r\n\t\tif(DT.isDateTime(value)){\r\n\t\t\tnewDatetime = value;\r\n\t\t}else if(inputFormat === \"iso\"){\r\n\t\t\tnewDatetime = DT.fromISO(String(value));\r\n\t\t}else{\r\n\t\t\tnewDatetime = DT.fromFormat(String(value), inputFormat);\r\n\t\t}\r\n\t\t\r\n\t\treturn newDatetime.toFormat(\"yyyy-MM-dd\");\r\n\t}\r\n\t\r\n\tinput.type = \"date\";\r\n\tinput.style.padding = \"4px\";\r\n\tinput.style.width = \"100%\";\r\n\tinput.style.boxSizing = \"border-box\";\r\n\r\n\tif(editorParams.max){\r\n\t\tinput.setAttribute(\"max\", inputFormat ? convertDate(editorParams.max) : editorParams.max);\r\n\t}\r\n\r\n\tif(editorParams.min){\r\n\t\tinput.setAttribute(\"min\", inputFormat ? convertDate(editorParams.min) : editorParams.min);\r\n\t}\r\n\t\r\n\tif(editorParams.elementAttributes && typeof editorParams.elementAttributes == \"object\"){\r\n\t\tfor (let key in editorParams.elementAttributes){\r\n\t\t\tif(key.charAt(0) == \"+\"){\r\n\t\t\t\tkey = key.slice(1);\r\n\t\t\t\tinput.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\r\n\t\t\t}else{\r\n\t\t\t\tinput.setAttribute(key, editorParams.elementAttributes[key]);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\tcellValue = typeof cellValue !== \"undefined\" ? cellValue : \"\";\r\n\t\r\n\tif(inputFormat){\r\n\t\tif(DT){\t\t\r\n\t\t\tcellValue = convertDate(cellValue);\t\t\t\r\n\t\t}else{\r\n\t\t\tconsole.error(\"Editor Error - 'date' editor 'inputFormat' param is dependant on luxon.js\");\r\n\t\t}\r\n\t}\r\n\t\r\n\tinput.value = cellValue;\r\n\t\r\n\tonRendered(function(){\r\n\t\tinput.focus({preventScroll: true});\r\n\t\tinput.style.height = \"100%\";\r\n\t\t\r\n\t\tif(editorParams.selectContents){\r\n\t\t\tinput.select();\r\n\t\t}\r\n\t});\r\n\t\r\n\tfunction onChange(e){\r\n\t\tvar value = input.value;\r\n\t\t\r\n\t\tif(((cellValue === null || typeof cellValue === \"undefined\") && value !== \"\") || value !== cellValue){\r\n\t\t\t\r\n\t\t\tif(value && inputFormat){\r\n\t\t\t\tvalue = DT.fromFormat(String(value), \"yyyy-MM-dd\").toFormat(inputFormat);\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif(success(value)){\r\n\t\t\t\tcellValue = input.value; //persist value if successfully validated incase editor is used as header filter\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tcancel();\r\n\t\t}\r\n\t}\r\n\t\r\n\t//submit new value on blur or change\r\n\tinput.addEventListener(\"change\", onChange);\r\n\tinput.addEventListener(\"blur\", onChange);\r\n\t\r\n\t//submit new value on enter\r\n\tinput.addEventListener(\"keydown\", function(e){\r\n\t\tswitch(e.keyCode){\r\n\t\t\t// case 9:\r\n\t\t\tcase 13:\r\n\t\t\t\tonChange(e);\r\n\t\t\t\tbreak;\r\n\t\t\t\r\n\t\t\tcase 27:\r\n\t\t\t\tcancel();\r\n\t\t\t\tbreak;\r\n\t\t\t\r\n\t\t\tcase 35:\r\n\t\t\tcase 36:\r\n\t\t\t\te.stopPropagation();\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t});\r\n\t\r\n\treturn input;\r\n}","//input element\r\nexport default function(cell, onRendered, success, cancel, editorParams){\r\n\tvar inputFormat = editorParams.format,\r\n\tDT = inputFormat ? (window.DateTime || luxon.DateTime) : null, \r\n\tnewDatetime;\r\n\r\n\t//create and style input\r\n\tvar cellValue = cell.getValue(),\r\n\tinput = document.createElement(\"input\");\r\n\t\r\n\tinput.type = \"time\";\r\n\tinput.style.padding = \"4px\";\r\n\tinput.style.width = \"100%\";\r\n\tinput.style.boxSizing = \"border-box\";\r\n\t\r\n\tif(editorParams.elementAttributes && typeof editorParams.elementAttributes == \"object\"){\r\n\t\tfor (let key in editorParams.elementAttributes){\r\n\t\t\tif(key.charAt(0) == \"+\"){\r\n\t\t\t\tkey = key.slice(1);\r\n\t\t\t\tinput.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\r\n\t\t\t}else{\r\n\t\t\t\tinput.setAttribute(key, editorParams.elementAttributes[key]);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\tcellValue = typeof cellValue !== \"undefined\" ? cellValue : \"\";\r\n\t\r\n\tif(inputFormat){\r\n\t\tif(DT){\r\n\t\t\tif(DT.isDateTime(cellValue)){\r\n\t\t\t\tnewDatetime = cellValue;\r\n\t\t\t}else if(inputFormat === \"iso\"){\r\n\t\t\t\tnewDatetime = DT.fromISO(String(cellValue));\r\n\t\t\t}else{\r\n\t\t\t\tnewDatetime = DT.fromFormat(String(cellValue), inputFormat);\r\n\t\t\t}\r\n\r\n\t\t\tcellValue = newDatetime.toFormat(\"hh:mm\");\r\n\r\n\t\t}else{\r\n\t\t\tconsole.error(\"Editor Error - 'date' editor 'inputFormat' param is dependant on luxon.js\");\r\n\t\t}\r\n\t}\r\n\r\n\tinput.value = cellValue;\r\n\t\r\n\tonRendered(function(){\r\n\t\tinput.focus({preventScroll: true});\r\n\t\tinput.style.height = \"100%\";\r\n\t\t\r\n\t\tif(editorParams.selectContents){\r\n\t\t\tinput.select();\r\n\t\t}\r\n\t});\r\n\t\r\n\tfunction onChange(e){\r\n\t\tvar value = input.value;\r\n\r\n\t\tif(((cellValue === null || typeof cellValue === \"undefined\") && value !== \"\") || value !== cellValue){\r\n\r\n\t\t\tif(value && inputFormat){\r\n\t\t\t\tvalue = DT.fromFormat(String(value), \"hh:mm\").toFormat(inputFormat);\r\n\t\t\t}\r\n\r\n\t\t\tif(success(value)){\r\n\t\t\t\tcellValue = input.value; //persist value if successfully validated incase editor is used as header filter\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tcancel();\r\n\t\t}\r\n\t}\r\n\t\r\n\t//submit new value on blur or change\r\n\tinput.addEventListener(\"change\", onChange);\r\n\tinput.addEventListener(\"blur\", onChange);\r\n\t\r\n\t//submit new value on enter\r\n\tinput.addEventListener(\"keydown\", function(e){\r\n\t\tswitch(e.keyCode){\r\n\t\t\t// case 9:\r\n\t\t\tcase 13:\r\n\t\t\t\tonChange(e);\r\n\t\t\t\tbreak;\r\n\t\t\t\r\n\t\t\tcase 27:\r\n\t\t\t\tcancel();\r\n\t\t\t\tbreak;\r\n\t\t\t\r\n\t\t\tcase 35:\r\n\t\t\tcase 36:\r\n\t\t\t\te.stopPropagation();\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t});\r\n\t\r\n\treturn input;\r\n}","//input element\r\nexport default function(cell, onRendered, success, cancel, editorParams){\r\n\tvar inputFormat = editorParams.format,\r\n\tDT = inputFormat ? (window.DateTime || luxon.DateTime) : null, \r\n\tnewDatetime;\r\n\r\n\t//create and style input\r\n\tvar cellValue = cell.getValue(),\r\n\tinput = document.createElement(\"input\");\r\n\t\r\n\tinput.type = \"datetime-local\";\r\n\tinput.style.padding = \"4px\";\r\n\tinput.style.width = \"100%\";\r\n\tinput.style.boxSizing = \"border-box\";\r\n\t\r\n\tif(editorParams.elementAttributes && typeof editorParams.elementAttributes == \"object\"){\r\n\t\tfor (let key in editorParams.elementAttributes){\r\n\t\t\tif(key.charAt(0) == \"+\"){\r\n\t\t\t\tkey = key.slice(1);\r\n\t\t\t\tinput.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\r\n\t\t\t}else{\r\n\t\t\t\tinput.setAttribute(key, editorParams.elementAttributes[key]);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\tcellValue = typeof cellValue !== \"undefined\" ? cellValue : \"\";\r\n\t\r\n\tif(inputFormat){\r\n\t\tif(DT){\r\n\t\t\tif(DT.isDateTime(cellValue)){\r\n\t\t\t\tnewDatetime = cellValue;\r\n\t\t\t}else if(inputFormat === \"iso\"){\r\n\t\t\t\tnewDatetime = DT.fromISO(String(cellValue));\r\n\t\t\t}else{\r\n\t\t\t\tnewDatetime = DT.fromFormat(String(cellValue), inputFormat);\r\n\t\t\t}\r\n\r\n\t\t\tcellValue = newDatetime.toFormat(\"yyyy-MM-dd\") + \"T\" + newDatetime.toFormat(\"hh:mm\");\r\n\t\t}else{\r\n\t\t\tconsole.error(\"Editor Error - 'date' editor 'inputFormat' param is dependant on luxon.js\");\r\n\t\t}\r\n\t}\r\n\r\n\tinput.value = cellValue;\r\n\t\r\n\tonRendered(function(){\r\n\t\tinput.focus({preventScroll: true});\r\n\t\tinput.style.height = \"100%\";\r\n\t\t\r\n\t\tif(editorParams.selectContents){\r\n\t\t\tinput.select();\r\n\t\t}\r\n\t});\r\n\t\r\n\tfunction onChange(e){\r\n\t\tvar value = input.value;\r\n\r\n\t\tif(((cellValue === null || typeof cellValue === \"undefined\") && value !== \"\") || value !== cellValue){\r\n\r\n\t\t\tif(value && inputFormat){\r\n\t\t\t\tvalue = DT.fromISO(String(value)).toFormat(inputFormat);\r\n\t\t\t}\r\n\r\n\t\t\tif(success(value)){\r\n\t\t\t\tcellValue = input.value; //persist value if successfully validated incase editor is used as header filter\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tcancel();\r\n\t\t}\r\n\t}\r\n\t\r\n\t//submit new value on blur or change\r\n\tinput.addEventListener(\"change\", onChange);\r\n\tinput.addEventListener(\"blur\", onChange);\r\n\t\r\n\t//submit new value on enter\r\n\tinput.addEventListener(\"keydown\", function(e){\r\n\t\tswitch(e.keyCode){\r\n\t\t\t// case 9:\r\n\t\t\tcase 13:\r\n\t\t\t\tonChange(e);\r\n\t\t\t\tbreak;\r\n\t\t\t\r\n\t\t\tcase 27:\r\n\t\t\t\tcancel();\r\n\t\t\t\tbreak;\r\n\t\t\t\r\n\t\t\tcase 35:\r\n\t\t\tcase 36:\r\n\t\t\t\te.stopPropagation();\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t});\r\n\t\r\n\treturn input;\r\n}","import List from '../../List.js';\r\n\r\nexport default function(cell, onRendered, success, cancel, editorParams){\r\n\r\n\tthis.deprecationMsg(\"The select editor has been deprecated, please use the new list editor\");\r\n\r\n\tvar list = new List(this, cell, onRendered, success, cancel, editorParams);\r\n\r\n\treturn list.input;\r\n}","import List from '../../List.js';\r\n\r\nexport default function(cell, onRendered, success, cancel, editorParams){\r\n\tvar list = new List(this, cell, onRendered, success, cancel, editorParams);\r\n\r\n\treturn list.input;\r\n}","import List from '../../List.js';\r\n\r\nexport default function(cell, onRendered, success, cancel, editorParams){\r\n\r\n\tthis.deprecationMsg(\"The autocomplete editor has been deprecated, please use the new list editor with the 'autocomplete' editorParam\");\r\n\r\n\teditorParams.autocomplete = true;\r\n\r\n\tvar list = new List(this, cell, onRendered, success, cancel, editorParams);\r\n\r\n\treturn list.input;\r\n}","//star rating\r\nexport default function(cell, onRendered, success, cancel, editorParams){\r\n\tvar self = this,\r\n\telement = cell.getElement(),\r\n\tvalue = cell.getValue(),\r\n\tmaxStars = element.getElementsByTagName(\"svg\").length || 5,\r\n\tsize = element.getElementsByTagName(\"svg\")[0] ? element.getElementsByTagName(\"svg\")[0].getAttribute(\"width\") : 14,\r\n\tstars = [],\r\n\tstarsHolder = document.createElement(\"div\"),\r\n\tstar = document.createElementNS('http://www.w3.org/2000/svg', \"svg\");\r\n\r\n\r\n\t//change star type\r\n\tfunction starChange(val){\r\n\t\tstars.forEach(function(star, i){\r\n\t\t\tif(i < val){\r\n\t\t\t\tif(self.table.browser == \"ie\"){\r\n\t\t\t\t\tstar.setAttribute(\"class\", \"tabulator-star-active\");\r\n\t\t\t\t}else{\r\n\t\t\t\t\tstar.classList.replace(\"tabulator-star-inactive\", \"tabulator-star-active\");\r\n\t\t\t\t}\r\n\r\n\t\t\t\tstar.innerHTML = '';\r\n\t\t\t}else{\r\n\t\t\t\tif(self.table.browser == \"ie\"){\r\n\t\t\t\t\tstar.setAttribute(\"class\", \"tabulator-star-inactive\");\r\n\t\t\t\t}else{\r\n\t\t\t\t\tstar.classList.replace(\"tabulator-star-active\", \"tabulator-star-inactive\");\r\n\t\t\t\t}\r\n\r\n\t\t\t\tstar.innerHTML = '';\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t//build stars\r\n\tfunction buildStar(i){\r\n\r\n\t\tvar starHolder = document.createElement(\"span\");\r\n\t\tvar nextStar = star.cloneNode(true);\r\n\r\n\t\tstars.push(nextStar);\r\n\r\n\t\tstarHolder.addEventListener(\"mouseenter\", function(e){\r\n\t\t\te.stopPropagation();\r\n\t\t\te.stopImmediatePropagation();\r\n\t\t\tstarChange(i);\r\n\t\t});\r\n\r\n\t\tstarHolder.addEventListener(\"mousemove\", function(e){\r\n\t\t\te.stopPropagation();\r\n\t\t\te.stopImmediatePropagation();\r\n\t\t});\r\n\r\n\t\tstarHolder.addEventListener(\"click\", function(e){\r\n\t\t\te.stopPropagation();\r\n\t\t\te.stopImmediatePropagation();\r\n\t\t\tsuccess(i);\r\n\t\t\telement.blur();\r\n\t\t});\r\n\r\n\t\tstarHolder.appendChild(nextStar);\r\n\t\tstarsHolder.appendChild(starHolder);\r\n\r\n\t}\r\n\r\n\t//handle keyboard navigation value change\r\n\tfunction changeValue(val){\r\n\t\tvalue = val;\r\n\t\tstarChange(val);\r\n\t}\r\n\r\n\t//style cell\r\n\telement.style.whiteSpace = \"nowrap\";\r\n\telement.style.overflow = \"hidden\";\r\n\telement.style.textOverflow = \"ellipsis\";\r\n\r\n\t//style holding element\r\n\tstarsHolder.style.verticalAlign = \"middle\";\r\n\tstarsHolder.style.display = \"inline-block\";\r\n\tstarsHolder.style.padding = \"4px\";\r\n\r\n\t//style star\r\n\tstar.setAttribute(\"width\", size);\r\n\tstar.setAttribute(\"height\", size);\r\n\tstar.setAttribute(\"viewBox\", \"0 0 512 512\");\r\n\tstar.setAttribute(\"xml:space\", \"preserve\");\r\n\tstar.style.padding = \"0 1px\";\r\n\r\n\tif(editorParams.elementAttributes && typeof editorParams.elementAttributes == \"object\"){\r\n\t\tfor (let key in editorParams.elementAttributes){\r\n\t\t\tif(key.charAt(0) == \"+\"){\r\n\t\t\t\tkey = key.slice(1);\r\n\t\t\t\tstarsHolder.setAttribute(key, starsHolder.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\r\n\t\t\t}else{\r\n\t\t\t\tstarsHolder.setAttribute(key, editorParams.elementAttributes[key]);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//create correct number of stars\r\n\tfor(var i=1;i<= maxStars;i++){\r\n\t\tbuildStar(i);\r\n\t}\r\n\r\n\t//ensure value does not exceed number of stars\r\n\tvalue = Math.min(parseInt(value), maxStars);\r\n\r\n\t// set initial styling of stars\r\n\tstarChange(value);\r\n\r\n\tstarsHolder.addEventListener(\"mousemove\", function(e){\r\n\t\tstarChange(0);\r\n\t});\r\n\r\n\tstarsHolder.addEventListener(\"click\", function(e){\r\n\t\tsuccess(0);\r\n\t});\r\n\r\n\telement.addEventListener(\"blur\", function(e){\r\n\t\tcancel();\r\n\t});\r\n\r\n\t//allow key based navigation\r\n\telement.addEventListener(\"keydown\", function(e){\r\n\t\tswitch(e.keyCode){\r\n\t\t\tcase 39: //right arrow\r\n\t\t\t\tchangeValue(value + 1);\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase 37: //left arrow\r\n\t\t\t\tchangeValue(value - 1);\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase 13: //enter\r\n\t\t\t\tsuccess(value);\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase 27: //escape\r\n\t\t\t\tcancel();\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t});\r\n\r\n\treturn starsHolder;\r\n}","//draggable progress bar\r\nexport default function(cell, onRendered, success, cancel, editorParams){\r\n\tvar element = cell.getElement(),\r\n\tmax = typeof editorParams.max === \"undefined\" ? ((element.getElementsByTagName(\"div\")[0] && element.getElementsByTagName(\"div\")[0].getAttribute(\"max\")) || 100) : editorParams.max,\r\n\tmin = typeof editorParams.min === \"undefined\" ? ((element.getElementsByTagName(\"div\")[0] && element.getElementsByTagName(\"div\")[0].getAttribute(\"min\")) || 0) : editorParams.min,\r\n\tpercent = (max - min) / 100,\r\n\tvalue = cell.getValue() || 0,\r\n\thandle = document.createElement(\"div\"),\r\n\tbar = document.createElement(\"div\"),\r\n\tmouseDrag, mouseDragWidth;\r\n\r\n\t//set new value\r\n\tfunction updateValue(){\r\n\t\tvar style = window.getComputedStyle(element, null);\r\n\r\n\t\tvar calcVal = (percent * Math.round(bar.offsetWidth / ((element.clientWidth - parseInt(style.getPropertyValue(\"padding-left\")) - parseInt(style.getPropertyValue(\"padding-right\")))/100))) + min;\r\n\t\tsuccess(calcVal);\r\n\t\telement.setAttribute(\"aria-valuenow\", calcVal);\r\n\t\telement.setAttribute(\"aria-label\", value);\r\n\t}\r\n\r\n\t//style handle\r\n\thandle.style.position = \"absolute\";\r\n\thandle.style.right = \"0\";\r\n\thandle.style.top = \"0\";\r\n\thandle.style.bottom = \"0\";\r\n\thandle.style.width = \"5px\";\r\n\thandle.classList.add(\"tabulator-progress-handle\");\r\n\r\n\t//style bar\r\n\tbar.style.display = \"inline-block\";\r\n\tbar.style.position = \"relative\";\r\n\t// bar.style.top = \"8px\";\r\n\t// bar.style.bottom = \"8px\";\r\n\t// bar.style.left = \"4px\";\r\n\t// bar.style.marginRight = \"4px\";\r\n\tbar.style.height = \"100%\";\r\n\tbar.style.backgroundColor = \"#488CE9\";\r\n\tbar.style.maxWidth = \"100%\";\r\n\tbar.style.minWidth = \"0%\";\r\n\r\n\tif(editorParams.elementAttributes && typeof editorParams.elementAttributes == \"object\"){\r\n\t\tfor (let key in editorParams.elementAttributes){\r\n\t\t\tif(key.charAt(0) == \"+\"){\r\n\t\t\t\tkey = key.slice(1);\r\n\t\t\t\tbar.setAttribute(key, bar.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\r\n\t\t\t}else{\r\n\t\t\t\tbar.setAttribute(key, editorParams.elementAttributes[key]);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//style cell\r\n\telement.style.padding = \"4px 4px\";\r\n\r\n\t//make sure value is in range\r\n\tvalue = Math.min(parseFloat(value), max);\r\n\tvalue = Math.max(parseFloat(value), min);\r\n\r\n\t//workout percentage\r\n\tvalue = Math.round((value - min) / percent);\r\n\t// bar.style.right = value + \"%\";\r\n\tbar.style.width = value + \"%\";\r\n\r\n\telement.setAttribute(\"aria-valuemin\", min);\r\n\telement.setAttribute(\"aria-valuemax\", max);\r\n\r\n\tbar.appendChild(handle);\r\n\r\n\thandle.addEventListener(\"mousedown\", function(e){\r\n\t\tmouseDrag = e.screenX;\r\n\t\tmouseDragWidth = bar.offsetWidth;\r\n\t});\r\n\r\n\thandle.addEventListener(\"mouseover\", function(){\r\n\t\thandle.style.cursor = \"ew-resize\";\r\n\t});\r\n\r\n\telement.addEventListener(\"mousemove\", function(e){\r\n\t\tif(mouseDrag){\r\n\t\t\tbar.style.width = (mouseDragWidth + e.screenX - mouseDrag) + \"px\";\r\n\t\t}\r\n\t});\r\n\r\n\telement.addEventListener(\"mouseup\", function(e){\r\n\t\tif(mouseDrag){\r\n\t\t\te.stopPropagation();\r\n\t\t\te.stopImmediatePropagation();\r\n\r\n\t\t\tmouseDrag = false;\r\n\t\t\tmouseDragWidth = false;\r\n\r\n\t\t\tupdateValue();\r\n\t\t}\r\n\t});\r\n\r\n\t//allow key based navigation\r\n\telement.addEventListener(\"keydown\", function(e){\r\n\t\tswitch(e.keyCode){\r\n\t\t\tcase 39: //right arrow\r\n\t\t\t\te.preventDefault();\r\n\t\t\t\tbar.style.width = (bar.clientWidth + element.clientWidth/100) + \"px\";\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase 37: //left arrow\r\n\t\t\t\te.preventDefault();\r\n\t\t\t\tbar.style.width = (bar.clientWidth - element.clientWidth/100) + \"px\";\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase 9: //tab\r\n\t\t\tcase 13: //enter\r\n\t\t\t\tupdateValue();\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase 27: //escape\r\n\t\t\t\tcancel();\r\n\t\t\t\tbreak;\r\n\r\n\t\t}\r\n\t});\r\n\r\n\telement.addEventListener(\"blur\", function(){\r\n\t\tcancel();\r\n\t});\r\n\r\n\treturn bar;\r\n}","//checkbox\r\nexport default function(cell, onRendered, success, cancel, editorParams){\r\n\tvar value = cell.getValue(),\r\n\tinput = document.createElement(\"input\"),\r\n\ttristate = editorParams.tristate,\r\n\tindetermValue = typeof editorParams.indeterminateValue === \"undefined\" ? null : editorParams.indeterminateValue,\r\n\tindetermState = false,\r\n\ttrueValueSet = Object.keys(editorParams).includes(\"trueValue\"),\r\n\tfalseValueSet = Object.keys(editorParams).includes(\"falseValue\");\r\n\r\n\tinput.setAttribute(\"type\", \"checkbox\");\r\n\tinput.style.marginTop = \"5px\";\r\n\tinput.style.boxSizing = \"border-box\";\r\n\r\n\tif(editorParams.elementAttributes && typeof editorParams.elementAttributes == \"object\"){\r\n\t\tfor (let key in editorParams.elementAttributes){\r\n\t\t\tif(key.charAt(0) == \"+\"){\r\n\t\t\t\tkey = key.slice(1);\r\n\t\t\t\tinput.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\r\n\t\t\t}else{\r\n\t\t\t\tinput.setAttribute(key, editorParams.elementAttributes[key]);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tinput.value = value;\r\n\r\n\tif(tristate && (typeof value === \"undefined\" || value === indetermValue || value === \"\")){\r\n\t\tindetermState = true;\r\n\t\tinput.indeterminate = true;\r\n\t}\r\n\r\n\tif(this.table.browser != \"firefox\"){ //prevent blur issue on mac firefox\r\n\t\tonRendered(function(){\r\n\t\t\tinput.focus({preventScroll: true});\r\n\t\t});\r\n\t}\r\n\r\n\tinput.checked = trueValueSet ? value === editorParams.trueValue : (value === true || value === \"true\" || value === \"True\" || value === 1);\r\n\r\n\tonRendered(function(){\r\n\t\tinput.focus();\r\n\t});\r\n\r\n\tfunction setValue(blur){\r\n\t\tvar checkedValue = input.checked;\r\n\r\n\t\tif(trueValueSet && checkedValue){\r\n\t\t\tcheckedValue = editorParams.trueValue;\r\n\t\t}else if(falseValueSet && !checkedValue){\r\n\t\t\tcheckedValue = editorParams.falseValue;\r\n\t\t}\r\n\r\n\t\tif(tristate){\r\n\t\t\tif(!blur){\r\n\t\t\t\tif(input.checked && !indetermState){\r\n\t\t\t\t\tinput.checked = false;\r\n\t\t\t\t\tinput.indeterminate = true;\r\n\t\t\t\t\tindetermState = true;\r\n\t\t\t\t\treturn indetermValue;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tindetermState = false;\r\n\t\t\t\t\treturn checkedValue;\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tif(indetermState){\r\n\t\t\t\t\treturn indetermValue;\r\n\t\t\t\t}else{\r\n\t\t\t\t\treturn checkedValue;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\treturn checkedValue;\r\n\t\t}\r\n\t}\r\n\r\n\t//submit new value on blur\r\n\tinput.addEventListener(\"change\", function(e){\r\n\t\tsuccess(setValue());\r\n\t});\r\n\r\n\tinput.addEventListener(\"blur\", function(e){\r\n\t\tsuccess(setValue(true));\r\n\t});\r\n\r\n\t//submit new value on enter\r\n\tinput.addEventListener(\"keydown\", function(e){\r\n\t\tif(e.keyCode == 13){\r\n\t\t\tsuccess(setValue());\r\n\t\t}\r\n\t\tif(e.keyCode == 27){\r\n\t\t\tcancel();\r\n\t\t}\r\n\t});\r\n\r\n\treturn input;\r\n}","import Module from '../../core/Module.js';\r\nimport Helpers from '../../core/tools/Helpers.js';\r\n\r\nimport defaultEditors from './defaults/editors.js';\r\n\r\nclass Edit extends Module{\r\n\t\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\t\t\r\n\t\tthis.currentCell = false; //hold currently editing cell\r\n\t\tthis.mouseClick = false; //hold mousedown state to prevent click binding being overridden by editor opening\r\n\t\tthis.recursionBlock = false; //prevent focus recursion\r\n\t\tthis.invalidEdit = false;\r\n\t\tthis.editedCells = [];\r\n\t\t\r\n\t\tthis.editors = Edit.editors;\r\n\t\t\r\n\t\tthis.registerColumnOption(\"editable\");\r\n\t\tthis.registerColumnOption(\"editor\");\r\n\t\tthis.registerColumnOption(\"editorParams\");\r\n\t\t\r\n\t\tthis.registerColumnOption(\"cellEditing\");\r\n\t\tthis.registerColumnOption(\"cellEdited\");\r\n\t\tthis.registerColumnOption(\"cellEditCancelled\");\r\n\t\t\r\n\t\tthis.registerTableFunction(\"getEditedCells\", this.getEditedCells.bind(this));\r\n\t\tthis.registerTableFunction(\"clearCellEdited\", this.clearCellEdited.bind(this));\r\n\t\tthis.registerTableFunction(\"navigatePrev\", this.navigatePrev.bind(this));\r\n\t\tthis.registerTableFunction(\"navigateNext\", this.navigateNext.bind(this));\r\n\t\tthis.registerTableFunction(\"navigateLeft\", this.navigateLeft.bind(this));\r\n\t\tthis.registerTableFunction(\"navigateRight\", this.navigateRight.bind(this));\r\n\t\tthis.registerTableFunction(\"navigateUp\", this.navigateUp.bind(this));\r\n\t\tthis.registerTableFunction(\"navigateDown\", this.navigateDown.bind(this));\r\n\t\t\r\n\t\tthis.registerComponentFunction(\"cell\", \"isEdited\", this.cellIsEdited.bind(this));\r\n\t\tthis.registerComponentFunction(\"cell\", \"clearEdited\", this.clearEdited.bind(this));\r\n\t\tthis.registerComponentFunction(\"cell\", \"edit\", this.editCell.bind(this));\r\n\t\tthis.registerComponentFunction(\"cell\", \"cancelEdit\", this.cellCancelEdit.bind(this));\r\n\t\t\r\n\t\tthis.registerComponentFunction(\"cell\", \"navigatePrev\", this.navigatePrev.bind(this));\r\n\t\tthis.registerComponentFunction(\"cell\", \"navigateNext\", this.navigateNext.bind(this));\r\n\t\tthis.registerComponentFunction(\"cell\", \"navigateLeft\", this.navigateLeft.bind(this));\r\n\t\tthis.registerComponentFunction(\"cell\", \"navigateRight\", this.navigateRight.bind(this));\r\n\t\tthis.registerComponentFunction(\"cell\", \"navigateUp\", this.navigateUp.bind(this));\r\n\t\tthis.registerComponentFunction(\"cell\", \"navigateDown\", this.navigateDown.bind(this));\r\n\t}\r\n\t\r\n\tinitialize(){\r\n\t\tthis.subscribe(\"cell-init\", this.bindEditor.bind(this));\r\n\t\tthis.subscribe(\"cell-delete\", this.clearEdited.bind(this));\r\n\t\tthis.subscribe(\"cell-value-changed\", this.updateCellClass.bind(this));\r\n\t\tthis.subscribe(\"column-layout\", this.initializeColumnCheck.bind(this));\r\n\t\tthis.subscribe(\"column-delete\", this.columnDeleteCheck.bind(this));\r\n\t\tthis.subscribe(\"row-deleting\", this.rowDeleteCheck.bind(this));\r\n\t\tthis.subscribe(\"data-refreshing\", this.cancelEdit.bind(this));\r\n\t\t\r\n\t\tthis.subscribe(\"keybinding-nav-prev\", this.navigatePrev.bind(this, undefined));\r\n\t\tthis.subscribe(\"keybinding-nav-next\", this.keybindingNavigateNext.bind(this));\r\n\t\tthis.subscribe(\"keybinding-nav-left\", this.navigateLeft.bind(this, undefined));\r\n\t\tthis.subscribe(\"keybinding-nav-right\", this.navigateRight.bind(this, undefined));\r\n\t\tthis.subscribe(\"keybinding-nav-up\", this.navigateUp.bind(this, undefined));\r\n\t\tthis.subscribe(\"keybinding-nav-down\", this.navigateDown.bind(this, undefined));\r\n\t}\r\n\t\r\n\t\r\n\t///////////////////////////////////\r\n\t////// Keybinding Functions ///////\r\n\t///////////////////////////////////\r\n\t\r\n\tkeybindingNavigateNext(e){\r\n\t\tvar cell = this.currentCell,\r\n\t\tnewRow = this.options(\"tabEndNewRow\");\r\n\t\t\r\n\t\tif(cell){\r\n\t\t\tif(!this.navigateNext(cell, e)){\r\n\t\t\t\tif(newRow){\r\n\t\t\t\t\tcell.getElement().firstChild.blur();\r\n\t\t\t\t\t\r\n\t\t\t\t\tif(newRow === true){\r\n\t\t\t\t\t\tnewRow = this.table.addRow({});\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tif(typeof newRow == \"function\"){\r\n\t\t\t\t\t\t\tnewRow = this.table.addRow(newRow(cell.row.getComponent()));\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\tnewRow = this.table.addRow(Object.assign({}, newRow));\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\t\r\n\t\t\t\t\tnewRow.then(() => {\r\n\t\t\t\t\t\tsetTimeout(() => {\r\n\t\t\t\t\t\t\tcell.getComponent().navigateNext();\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\t///////////////////////////////////\r\n\t///////// Cell Functions //////////\r\n\t///////////////////////////////////\r\n\t\r\n\tcellIsEdited(cell){\r\n\t\treturn !! cell.modules.edit && cell.modules.edit.edited;\r\n\t}\r\n\t\r\n\tcellCancelEdit(cell){\r\n\t\tif(cell === this.currentCell){\r\n\t\t\tthis.table.modules.edit.cancelEdit();\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Cancel Editor Error - This cell is not currently being edited \");\r\n\t\t}\r\n\t}\r\n\t\r\n\t\r\n\t///////////////////////////////////\r\n\t///////// Table Functions /////////\r\n\t///////////////////////////////////\r\n\tupdateCellClass(cell){\r\n\t\tif(this.allowEdit(cell)) {\r\n\t\t\tcell.getElement().classList.add(\"tabulator-editable\");\r\n\t\t}\r\n\t\telse {\r\n\t\t\tcell.getElement().classList.remove(\"tabulator-editable\");\r\n\t\t}\r\n\t}\r\n\t\r\n\tclearCellEdited(cells){\r\n\t\tif(!cells){\r\n\t\t\tcells = this.table.modules.edit.getEditedCells();\r\n\t\t}\r\n\t\t\r\n\t\tif(!Array.isArray(cells)){\r\n\t\t\tcells = [cells];\r\n\t\t}\r\n\t\t\r\n\t\tcells.forEach((cell) => {\r\n\t\t\tthis.table.modules.edit.clearEdited(cell._getSelf());\r\n\t\t});\r\n\t}\r\n\t\r\n\tnavigatePrev(cell = this.currentCell, e){\r\n\t\tvar nextCell, prevRow;\r\n\t\t\r\n\t\tif(cell){\r\n\t\t\t\r\n\t\t\tif(e){\r\n\t\t\t\te.preventDefault();\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tnextCell = this.navigateLeft();\r\n\t\t\t\r\n\t\t\tif(nextCell){\r\n\t\t\t\treturn true;\r\n\t\t\t}else{\r\n\t\t\t\tprevRow = this.table.rowManager.prevDisplayRow(cell.row, true);\r\n\t\t\t\t\r\n\t\t\t\tif(prevRow){\r\n\t\t\t\t\tnextCell = this.findNextEditableCell(prevRow, prevRow.cells.length);\r\n\t\t\t\t\t\r\n\t\t\t\t\tif(nextCell){\r\n\t\t\t\t\t\tnextCell.getComponent().edit();\r\n\t\t\t\t\t\treturn true;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\treturn false;\r\n\t}\r\n\t\r\n\tnavigateNext(cell = this.currentCell, e){\r\n\t\tvar nextCell, nextRow;\r\n\t\t\r\n\t\tif(cell){\r\n\t\t\t\r\n\t\t\tif(e){\r\n\t\t\t\te.preventDefault();\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tnextCell = this.navigateRight();\r\n\t\t\t\r\n\t\t\tif(nextCell){\r\n\t\t\t\treturn true;\r\n\t\t\t}else{\r\n\t\t\t\tnextRow = this.table.rowManager.nextDisplayRow(cell.row, true);\r\n\t\t\t\t\r\n\t\t\t\tif(nextRow){\r\n\t\t\t\t\tnextCell = this.findNextEditableCell(nextRow, -1);\r\n\t\t\t\t\t\r\n\t\t\t\t\tif(nextCell){\r\n\t\t\t\t\t\tnextCell.getComponent().edit();\r\n\t\t\t\t\t\treturn true;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\treturn false;\r\n\t}\r\n\t\r\n\tnavigateLeft(cell = this.currentCell, e){\r\n\t\tvar index, nextCell;\r\n\t\t\r\n\t\tif(cell){\r\n\t\t\t\r\n\t\t\tif(e){\r\n\t\t\t\te.preventDefault();\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tindex = cell.getIndex();\r\n\t\t\tnextCell = this.findPrevEditableCell(cell.row, index);\r\n\t\t\t\r\n\t\t\tif(nextCell){\r\n\t\t\t\tnextCell.getComponent().edit();\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\treturn false;\r\n\t}\r\n\t\r\n\tnavigateRight(cell = this.currentCell, e){\r\n\t\tvar index, nextCell;\r\n\t\t\r\n\t\tif(cell){\r\n\t\t\t\r\n\t\t\tif(e){\r\n\t\t\t\te.preventDefault();\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tindex = cell.getIndex();\r\n\t\t\tnextCell = this.findNextEditableCell(cell.row, index);\r\n\t\t\t\r\n\t\t\tif(nextCell){\r\n\t\t\t\tnextCell.getComponent().edit();\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\treturn false;\r\n\t}\r\n\t\r\n\tnavigateUp(cell = this.currentCell, e){\r\n\t\tvar index, nextRow;\r\n\t\t\r\n\t\tif(cell){\r\n\t\t\t\r\n\t\t\tif(e){\r\n\t\t\t\te.preventDefault();\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tindex = cell.getIndex();\r\n\t\t\tnextRow = this.table.rowManager.prevDisplayRow(cell.row, true);\r\n\t\t\t\r\n\t\t\tif(nextRow){\r\n\t\t\t\tnextRow.cells[index].getComponent().edit();\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\treturn false;\r\n\t}\r\n\t\r\n\tnavigateDown(cell = this.currentCell, e){\r\n\t\tvar index, nextRow;\r\n\t\t\r\n\t\tif(cell){\r\n\t\t\t\r\n\t\t\tif(e){\r\n\t\t\t\te.preventDefault();\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tindex = cell.getIndex();\r\n\t\t\tnextRow = this.table.rowManager.nextDisplayRow(cell.row, true);\r\n\t\t\t\r\n\t\t\tif(nextRow){\r\n\t\t\t\tnextRow.cells[index].getComponent().edit();\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\treturn false;\r\n\t}\r\n\t\r\n\tfindNextEditableCell(row, index){\r\n\t\tvar nextCell = false;\r\n\t\t\r\n\t\tif(index < row.cells.length-1){\r\n\t\t\tfor(var i = index+1; i < row.cells.length; i++){\r\n\t\t\t\tlet cell = row.cells[i];\r\n\t\t\t\t\r\n\t\t\t\tif(cell.column.modules.edit && Helpers.elVisible(cell.getElement())){\r\n\t\t\t\t\tlet allowEdit = this.allowEdit(cell);\r\n\t\t\t\t\t\r\n\t\t\t\t\tif(allowEdit){\r\n\t\t\t\t\t\tnextCell = cell;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\treturn nextCell;\r\n\t}\r\n\t\r\n\tfindPrevEditableCell(row, index){\r\n\t\tvar prevCell = false;\r\n\t\t\r\n\t\tif(index > 0){\r\n\t\t\tfor(var i = index-1; i >= 0; i--){\r\n\t\t\t\tlet cell = row.cells[i];\r\n\t\t\t\t\r\n\t\t\t\tif(cell.column.modules.edit && Helpers.elVisible(cell.getElement())){\r\n\t\t\t\t\tlet allowEdit = this.allowEdit(cell);\r\n\t\t\t\t\t\r\n\t\t\t\t\tif(allowEdit){\r\n\t\t\t\t\t\tprevCell = cell;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\treturn prevCell;\r\n\t}\r\n\t\r\n\t///////////////////////////////////\r\n\t///////// Internal Logic //////////\r\n\t///////////////////////////////////\r\n\t\r\n\tinitializeColumnCheck(column){\r\n\t\tif(typeof column.definition.editor !== \"undefined\"){\r\n\t\t\tthis.initializeColumn(column);\r\n\t\t}\r\n\t}\r\n\t\r\n\tcolumnDeleteCheck(column){\r\n\t\tif(this.currentCell && this.currentCell.column === column){\r\n\t\t\tthis.cancelEdit();\r\n\t\t}\r\n\t}\r\n\t\r\n\trowDeleteCheck(row){\r\n\t\tif(this.currentCell && this.currentCell.row === row){\r\n\t\t\tthis.cancelEdit();\r\n\t\t}\r\n\t}\r\n\t\r\n\t//initialize column editor\r\n\tinitializeColumn(column){\r\n\t\tvar config = {\r\n\t\t\teditor:false,\r\n\t\t\tblocked:false,\r\n\t\t\tcheck:column.definition.editable,\r\n\t\t\tparams:column.definition.editorParams || {}\r\n\t\t};\r\n\t\t\r\n\t\t//set column editor\r\n\t\tswitch(typeof column.definition.editor){\r\n\t\t\tcase \"string\":\r\n\t\t\t\tif(this.editors[column.definition.editor]){\r\n\t\t\t\t\tconfig.editor = this.editors[column.definition.editor];\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.warn(\"Editor Error - No such editor found: \", column.definition.editor);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\t\r\n\t\t\tcase \"function\":\r\n\t\t\t\tconfig.editor = column.definition.editor;\r\n\t\t\t\tbreak;\r\n\t\t\t\r\n\t\t\tcase \"boolean\":\r\n\t\t\t\tif(column.definition.editor === true){\r\n\t\t\t\t\tif(typeof column.definition.formatter !== \"function\"){\r\n\t\t\t\t\t\tif(this.editors[column.definition.formatter]){\r\n\t\t\t\t\t\t\tconfig.editor = this.editors[column.definition.formatter];\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\tconfig.editor = this.editors[\"input\"];\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tconsole.warn(\"Editor Error - Cannot auto lookup editor for a custom formatter: \", column.definition.formatter);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t\t\r\n\t\tif(config.editor){\r\n\t\t\tcolumn.modules.edit = config;\r\n\t\t}\r\n\t}\r\n\t\r\n\tgetCurrentCell(){\r\n\t\treturn this.currentCell ? this.currentCell.getComponent() : false;\r\n\t}\r\n\t\r\n\tclearEditor(cancel){\r\n\t\tvar cell = this.currentCell,\r\n\t\tcellEl;\r\n\t\t\r\n\t\tthis.invalidEdit = false;\r\n\t\t\r\n\t\tif(cell){\r\n\t\t\tthis.currentCell = false;\r\n\t\t\t\r\n\t\t\tcellEl = cell.getElement();\r\n\t\t\t\r\n\t\t\tthis.dispatch(\"edit-editor-clear\", cell, cancel);\r\n\t\t\t\r\n\t\t\tcellEl.classList.remove(\"tabulator-editing\");\r\n\t\t\t\r\n\t\t\twhile(cellEl.firstChild) cellEl.removeChild(cellEl.firstChild);\r\n\t\t\t\r\n\t\t\tcell.row.getElement().classList.remove(\"tabulator-editing\");\r\n\t\t\t\r\n\t\t\tcell.table.element.classList.remove(\"tabulator-editing\");\r\n\t\t}\r\n\t}\r\n\t\r\n\tcancelEdit(){\r\n\t\tif(this.currentCell){\r\n\t\t\tvar cell = this.currentCell;\r\n\t\t\tvar component = this.currentCell.getComponent();\r\n\t\t\t\r\n\t\t\tthis.clearEditor(true);\r\n\t\t\tcell.setValueActual(cell.getValue());\r\n\t\t\tcell.cellRendered();\r\n\t\t\t\r\n\t\t\tif(cell.column.definition.editor == \"textarea\" || cell.column.definition.variableHeight){\r\n\t\t\t\tcell.row.normalizeHeight(true);\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif(cell.column.definition.cellEditCancelled){\r\n\t\t\t\tcell.column.definition.cellEditCancelled.call(this.table, component);\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tthis.dispatch(\"edit-cancelled\", cell);\r\n\t\t\tthis.dispatchExternal(\"cellEditCancelled\", component);\r\n\t\t}\r\n\t}\r\n\t\r\n\t//return a formatted value for a cell\r\n\tbindEditor(cell){\r\n\t\tif(cell.column.modules.edit){\r\n\t\t\tvar self = this,\r\n\t\t\telement = cell.getElement(true);\r\n\t\t\t\r\n\t\t\tthis.updateCellClass(cell);\r\n\t\t\telement.setAttribute(\"tabindex\", 0);\r\n\t\t\t\r\n\t\t\telement.addEventListener(\"click\", function(e){\r\n\t\t\t\tif(!element.classList.contains(\"tabulator-editing\")){\r\n\t\t\t\t\telement.focus({preventScroll: true});\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\t\r\n\t\t\telement.addEventListener(\"mousedown\", function(e){\r\n\t\t\t\tif (e.button === 2) {\r\n\t\t\t\t\te.preventDefault();\r\n\t\t\t\t}else{\r\n\t\t\t\t\tself.mouseClick = true;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\t\r\n\t\t\telement.addEventListener(\"focus\", function(e){\r\n\t\t\t\tif(!self.recursionBlock){\r\n\t\t\t\t\tself.edit(cell, e, false);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\t\r\n\tfocusCellNoEvent(cell, block){\r\n\t\tthis.recursionBlock = true;\r\n\t\t\r\n\t\tif(!(block && this.table.browser === \"ie\")){\r\n\t\t\tcell.getElement().focus({preventScroll: true});\r\n\t\t}\r\n\t\t\r\n\t\tthis.recursionBlock = false;\r\n\t}\r\n\t\r\n\teditCell(cell, forceEdit){\r\n\t\tthis.focusCellNoEvent(cell);\r\n\t\tthis.edit(cell, false, forceEdit);\r\n\t}\r\n\t\r\n\tfocusScrollAdjust(cell){\r\n\t\tif(this.table.rowManager.getRenderMode() == \"virtual\"){\r\n\t\t\tvar topEdge = this.table.rowManager.element.scrollTop,\r\n\t\t\tbottomEdge = this.table.rowManager.element.clientHeight + this.table.rowManager.element.scrollTop,\r\n\t\t\trowEl = cell.row.getElement();\r\n\t\t\t\r\n\t\t\tif(rowEl.offsetTop < topEdge){\r\n\t\t\t\tthis.table.rowManager.element.scrollTop -= (topEdge - rowEl.offsetTop);\r\n\t\t\t}else{\r\n\t\t\t\tif(rowEl.offsetTop + rowEl.offsetHeight > bottomEdge){\r\n\t\t\t\t\tthis.table.rowManager.element.scrollTop += (rowEl.offsetTop + rowEl.offsetHeight - bottomEdge);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tvar leftEdge = this.table.rowManager.element.scrollLeft,\r\n\t\t\trightEdge = this.table.rowManager.element.clientWidth + this.table.rowManager.element.scrollLeft,\r\n\t\t\tcellEl = cell.getElement();\r\n\t\t\t\r\n\t\t\tif(this.table.modExists(\"frozenColumns\")){\r\n\t\t\t\tleftEdge += parseInt(this.table.modules.frozenColumns.leftMargin);\r\n\t\t\t\trightEdge -= parseInt(this.table.modules.frozenColumns.rightMargin);\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif(this.table.options.renderHorizontal === \"virtual\"){\r\n\t\t\t\tleftEdge -= parseInt(this.table.columnManager.renderer.vDomPadLeft);\r\n\t\t\t\trightEdge -= parseInt(this.table.columnManager.renderer.vDomPadLeft);\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif(cellEl.offsetLeft < leftEdge){\r\n\t\t\t\t\r\n\t\t\t\tthis.table.rowManager.element.scrollLeft -= (leftEdge - cellEl.offsetLeft);\r\n\t\t\t}else{\r\n\t\t\t\tif(cellEl.offsetLeft + cellEl.offsetWidth > rightEdge){\r\n\t\t\t\t\tthis.table.rowManager.element.scrollLeft += (cellEl.offsetLeft + cellEl.offsetWidth - rightEdge);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\tallowEdit(cell) {\r\n\t\tvar check = cell.column.modules.edit ? true : false;\r\n\r\n\t\tif(cell.column.modules.edit){\r\n\t\t\tswitch(typeof cell.column.modules.edit.check){\r\n\t\t\t\tcase \"function\":\r\n\t\t\t\t\tcheck = cell.column.modules.edit.check(cell.getComponent());\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"string\":\r\n\t\t\t\t\tcheck = !!cell.row.data[cell.column.modules.edit.check];\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"boolean\":\r\n\t\t\t\t\tcheck = cell.column.modules.edit.check;\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn check;\r\n\t}\r\n\t\r\n\tedit(cell, e, forceEdit){\r\n\t\tvar self = this,\r\n\t\tallowEdit = true,\r\n\t\trendered = function(){},\r\n\t\telement = cell.getElement(),\r\n\t\tcellEditor, component, params;\r\n\t\t\r\n\t\t//prevent editing if another cell is refusing to leave focus (eg. validation fail)\r\n\t\tif(this.currentCell){\r\n\t\t\tif(!this.invalidEdit){\r\n\t\t\t\tthis.cancelEdit();\r\n\t\t\t}\r\n\t\t\treturn;\r\n\t\t}\r\n\t\t\r\n\t\t//handle successful value change\r\n\t\tfunction success(value){\r\n\t\t\tif(self.currentCell === cell){\r\n\t\t\t\tvar valid = self.chain(\"edit-success\", [cell, value], true, true);\r\n\t\t\t\t\r\n\t\t\t\tif(valid === true || self.table.options.validationMode === \"highlight\"){\r\n\t\t\t\t\tself.clearEditor();\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\tif(!cell.modules.edit){\r\n\t\t\t\t\t\tcell.modules.edit = {};\r\n\t\t\t\t\t}\r\n\t\t\t\t\t\r\n\t\t\t\t\tcell.modules.edit.edited = true;\r\n\t\t\t\t\t\r\n\t\t\t\t\tif(self.editedCells.indexOf(cell) == -1){\r\n\t\t\t\t\t\tself.editedCells.push(cell);\r\n\t\t\t\t\t}\r\n\t\t\t\t\t\r\n\t\t\t\t\tcell.setValue(value, true);\r\n\t\t\t\t\t\r\n\t\t\t\t\treturn valid === true;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tself.invalidEdit = true;\r\n\t\t\t\t\tself.focusCellNoEvent(cell, true);\r\n\t\t\t\t\trendered();\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\t// console.warn(\"Edit Success Error - cannot call success on a cell that is no longer being edited\");\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\t//handle aborted edit\r\n\t\tfunction cancel(){\r\n\t\t\tif(self.currentCell === cell){\r\n\t\t\t\tself.cancelEdit();\r\n\t\t\t}else{\r\n\t\t\t\t// console.warn(\"Edit Success Error - cannot call cancel on a cell that is no longer being edited\");\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\tfunction onRendered(callback){\r\n\t\t\trendered = callback;\r\n\t\t}\r\n\t\t\r\n\t\tif(!cell.column.modules.edit.blocked){\r\n\t\t\tif(e){\r\n\t\t\t\te.stopPropagation();\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tallowEdit = this.allowEdit(cell);\r\n\t\t\t\r\n\t\t\tif(allowEdit || forceEdit){\r\n\t\t\t\t\r\n\t\t\t\tself.cancelEdit();\r\n\t\t\t\t\r\n\t\t\t\tself.currentCell = cell;\r\n\t\t\t\t\r\n\t\t\t\tthis.focusScrollAdjust(cell);\r\n\t\t\t\t\r\n\t\t\t\tcomponent = cell.getComponent();\r\n\t\t\t\t\r\n\t\t\t\tif(this.mouseClick){\r\n\t\t\t\t\tthis.mouseClick = false;\r\n\t\t\t\t\t\r\n\t\t\t\t\tif(cell.column.definition.cellClick){\r\n\t\t\t\t\t\tcell.column.definition.cellClick.call(this.table, e, component);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\tif(cell.column.definition.cellEditing){\r\n\t\t\t\t\tcell.column.definition.cellEditing.call(this.table, component);\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\tthis.dispatch(\"cell-editing\", cell);\r\n\t\t\t\tthis.dispatchExternal(\"cellEditing\", component);\r\n\t\t\t\t\r\n\t\t\t\tparams = typeof cell.column.modules.edit.params === \"function\" ? cell.column.modules.edit.params(component) : cell.column.modules.edit.params;\r\n\t\t\t\t\r\n\t\t\t\tcellEditor = cell.column.modules.edit.editor.call(self, component, onRendered, success, cancel, params);\r\n\t\t\t\t\r\n\t\t\t\t//if editor returned, add to DOM, if false, abort edit\r\n\t\t\t\tif(cellEditor !== false){\r\n\t\t\t\t\t\r\n\t\t\t\t\tif(cellEditor instanceof Node){\r\n\t\t\t\t\t\telement.classList.add(\"tabulator-editing\");\r\n\t\t\t\t\t\tcell.row.getElement().classList.add(\"tabulator-editing\");\r\n\t\t\t\t\t\tcell.table.element.classList.add(\"tabulator-editing\");\r\n\t\t\t\t\t\twhile(element.firstChild) element.removeChild(element.firstChild);\r\n\t\t\t\t\t\telement.appendChild(cellEditor);\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t//trigger onRendered Callback\r\n\t\t\t\t\t\trendered();\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t//prevent editing from triggering rowClick event\r\n\t\t\t\t\t\tvar children = element.children;\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\tfor (var i = 0; i < children.length; i++) {\r\n\t\t\t\t\t\t\tchildren[i].addEventListener(\"click\", function(e){\r\n\t\t\t\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tconsole.warn(\"Edit Error - Editor should return an instance of Node, the editor returned:\", cellEditor);\r\n\t\t\t\t\t\telement.blur();\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\t\r\n\t\t\t\t}else{\r\n\t\t\t\t\telement.blur();\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\treturn true;\r\n\t\t\t}else{\r\n\t\t\t\tthis.mouseClick = false;\r\n\t\t\t\telement.blur();\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tthis.mouseClick = false;\r\n\t\t\telement.blur();\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\t\r\n\tgetEditedCells(){\r\n\t\tvar output = [];\r\n\t\t\r\n\t\tthis.editedCells.forEach((cell) => {\r\n\t\t\toutput.push(cell.getComponent());\r\n\t\t});\r\n\t\t\r\n\t\treturn output;\r\n\t}\r\n\t\r\n\tclearEdited(cell){\r\n\t\tvar editIndex;\r\n\t\t\r\n\t\tif(cell.modules.edit && cell.modules.edit.edited){\r\n\t\t\tcell.modules.edit.edited = false;\r\n\t\t\t\r\n\t\t\tthis.dispatch(\"edit-edited-clear\", cell);\r\n\t\t}\r\n\t\t\r\n\t\teditIndex = this.editedCells.indexOf(cell);\r\n\t\t\r\n\t\tif(editIndex > -1){\r\n\t\t\tthis.editedCells.splice(editIndex, 1);\r\n\t\t}\r\n\t}\r\n}\r\n\r\nEdit.moduleName = \"edit\";\r\n\r\n//load defaults\r\nEdit.editors = defaultEditors;\r\n\r\n\r\nexport default Edit;\r\n","class ExportRow{\r\n\tconstructor(type, columns, component, indent){\r\n\t\tthis.type = type;\r\n\t\tthis.columns = columns;\r\n\t\tthis.component = component || false;\r\n\t\tthis.indent = indent || 0;\r\n\t}\r\n}\r\n\r\nexport default ExportRow;","class ExportColumn{\r\n\tconstructor(value, component, width, height, depth){\r\n\t\tthis.value = value;\r\n\t\tthis.component = component || false;\r\n\t\tthis.width = width;\r\n\t\tthis.height = height;\r\n\t\tthis.depth = depth;\r\n\t}\r\n}\r\n\r\nexport default ExportColumn;","import Module from '../../core/Module.js';\r\n\r\nimport ExportRow from './ExportRow.js';\r\nimport ExportColumn from './ExportColumn.js';\r\n\r\nclass Export extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.config = {};\r\n\t\tthis.cloneTableStyle = true;\r\n\t\tthis.colVisProp = \"\";\r\n\r\n\t\tthis.registerTableOption(\"htmlOutputConfig\", false); //html output config\r\n\r\n\t\tthis.registerColumnOption(\"htmlOutput\");\r\n\t\tthis.registerColumnOption(\"titleHtmlOutput\");\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tthis.registerTableFunction(\"getHtml\", this.getHtml.bind(this));\r\n\t}\r\n\r\n\t///////////////////////////////////\r\n\t///////// Table Functions /////////\r\n\t///////////////////////////////////\r\n\r\n\r\n\t///////////////////////////////////\r\n\t///////// Internal Logic //////////\r\n\t///////////////////////////////////\r\n\r\n\tgenerateExportList(config, style, range, colVisProp){\r\n\t\tthis.cloneTableStyle = style;\r\n\t\tthis.config = config || {};\r\n\t\tthis.colVisProp = colVisProp;\r\n\r\n\t\tvar headers = this.config.columnHeaders !== false ? this.headersToExportRows(this.generateColumnGroupHeaders()) : [];\r\n\t\tvar body = this.bodyToExportRows(this.rowLookup(range));\r\n\r\n\t\treturn headers.concat(body);\r\n\t}\r\n\r\n\tgenerateTable(config, style, range, colVisProp){\r\n\t\tvar list = this.generateExportList(config, style, range, colVisProp);\r\n\r\n\t\treturn this.generateTableElement(list);\r\n\t}\r\n\r\n\trowLookup(range){\r\n\t\tvar rows = [];\r\n\r\n\t\tif(typeof range == \"function\"){\r\n\t\t\trange.call(this.table).forEach((row) =>{\r\n\t\t\t\trow = this.table.rowManager.findRow(row);\r\n\r\n\t\t\t\tif(row){\r\n\t\t\t\t\trows.push(row);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tswitch(range){\r\n\t\t\t\tcase true:\r\n\t\t\t\tcase \"visible\":\r\n\t\t\t\t\trows = this.table.rowManager.getVisibleRows(false, true);\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"all\":\r\n\t\t\t\t\trows = this.table.rowManager.rows;\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"selected\":\r\n\t\t\t\t\trows = this.table.modules.selectRow.selectedRows;\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"active\":\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tif(this.table.options.pagination){\r\n\t\t\t\t\t\trows = this.table.rowManager.getDisplayRows(this.table.rowManager.displayRows.length - 2);\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\trows = this.table.rowManager.getDisplayRows();\r\n\t\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn Object.assign([], rows);\r\n\t}\r\n\r\n\tgenerateColumnGroupHeaders(){\r\n\t\tvar output = [];\r\n\r\n\t\tvar columns = this.config.columnGroups !== false ? this.table.columnManager.columns : this.table.columnManager.columnsByIndex;\r\n\r\n\t\tcolumns.forEach((column) => {\r\n\t\t\tvar colData = this.processColumnGroup(column);\r\n\r\n\t\t\tif(colData){\r\n\t\t\t\toutput.push(colData);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tprocessColumnGroup(column){\r\n\t\tvar subGroups = column.columns,\r\n\t\tmaxDepth = 0,\r\n\t\ttitle = column.definition[\"title\" + (this.colVisProp.charAt(0).toUpperCase() + this.colVisProp.slice(1))] || column.definition.title;\r\n\r\n\t\tvar groupData = {\r\n\t\t\ttitle:title,\r\n\t\t\tcolumn:column,\r\n\t\t\tdepth:1,\r\n\t\t};\r\n\r\n\t\tif(subGroups.length){\r\n\t\t\tgroupData.subGroups = [];\r\n\t\t\tgroupData.width = 0;\r\n\r\n\t\t\tsubGroups.forEach((subGroup) => {\r\n\t\t\t\tvar subGroupData = this.processColumnGroup(subGroup);\r\n\r\n\t\t\t\tif(subGroupData){\r\n\t\t\t\t\tgroupData.width += subGroupData.width;\r\n\t\t\t\t\tgroupData.subGroups.push(subGroupData);\r\n\r\n\t\t\t\t\tif(subGroupData.depth > maxDepth){\r\n\t\t\t\t\t\tmaxDepth = subGroupData.depth;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tgroupData.depth += maxDepth;\r\n\r\n\t\t\tif(!groupData.width){\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tif(this.columnVisCheck(column)){\r\n\t\t\t\tgroupData.width = 1;\r\n\t\t\t}else{\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn groupData;\r\n\t}\r\n\r\n\tcolumnVisCheck(column){\r\n\t\tvar visProp = column.definition[this.colVisProp];\r\n\r\n\t\tif(typeof visProp === \"function\"){\r\n\t\t\tvisProp = visProp.call(this.table, column.getComponent());\r\n\t\t}\r\n\r\n\t\treturn visProp !== false && (column.visible || (!column.visible && visProp));\r\n\t}\r\n\r\n\theadersToExportRows(columns){\r\n\t\tvar headers = [],\r\n\t\theaderDepth = 0,\r\n\t\texportRows = [];\r\n\r\n\t\tfunction parseColumnGroup(column, level){\r\n\r\n\t\t\tvar depth = headerDepth - level;\r\n\r\n\t\t\tif(typeof headers[level] === \"undefined\"){\r\n\t\t\t\theaders[level] = [];\r\n\t\t\t}\r\n\r\n\t\t\tcolumn.height = column.subGroups ? 1 : (depth - column.depth) + 1;\r\n\r\n\t\t\theaders[level].push(column);\r\n\r\n\t\t\tif(column.height > 1){\r\n\t\t\t\tfor(let i = 1; i < column.height; i ++){\r\n\r\n\t\t\t\t\tif(typeof headers[level + i] === \"undefined\"){\r\n\t\t\t\t\t\theaders[level + i] = [];\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\theaders[level + i].push(false);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif(column.width > 1){\r\n\t\t\t\tfor(let i = 1; i < column.width; i ++){\r\n\t\t\t\t\theaders[level].push(false);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif(column.subGroups){\r\n\t\t\t\tcolumn.subGroups.forEach(function(subGroup){\r\n\t\t\t\t\tparseColumnGroup(subGroup, level+1);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//calculate maximum header depth\r\n\t\tcolumns.forEach(function(column){\r\n\t\t\tif(column.depth > headerDepth){\r\n\t\t\t\theaderDepth = column.depth;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tcolumns.forEach(function(column){\r\n\t\t\tparseColumnGroup(column,0);\r\n\t\t});\r\n\r\n\t\theaders.forEach((header) => {\r\n\t\t\tvar columns = [];\r\n\r\n\t\t\theader.forEach((col) => {\r\n\t\t\t\tif(col){\r\n\t\t\t\t\tlet title = typeof col.title === \"undefined\" ? \"\" : col.title;\r\n\t\t\t\t\tcolumns.push(new ExportColumn(title, col.column.getComponent(), col.width, col.height, col.depth));\r\n\t\t\t\t}else{\r\n\t\t\t\t\tcolumns.push(null);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\texportRows.push(new ExportRow(\"header\", columns));\r\n\t\t});\r\n\r\n\t\treturn exportRows;\r\n\t}\r\n\r\n\tbodyToExportRows(rows){\r\n\r\n\t\tvar columns = [];\r\n\t\tvar exportRows = [];\r\n\r\n\t\tthis.table.columnManager.columnsByIndex.forEach((column) => {\r\n\t\t\tif (this.columnVisCheck(column)) {\r\n\t\t\t\tcolumns.push(column.getComponent());\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tif(this.config.columnCalcs !== false && this.table.modExists(\"columnCalcs\")){\r\n\t\t\tif(this.table.modules.columnCalcs.topInitialized){\r\n\t\t\t\trows.unshift(this.table.modules.columnCalcs.topRow);\r\n\t\t\t}\r\n\r\n\t\t\tif(this.table.modules.columnCalcs.botInitialized){\r\n\t\t\t\trows.push(this.table.modules.columnCalcs.botRow);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\trows = rows.filter((row) => {\r\n\t\t\tswitch(row.type){\r\n\t\t\t\tcase \"group\":\r\n\t\t\t\t\treturn this.config.rowGroups !== false;\r\n\r\n\t\t\t\tcase \"calc\":\r\n\t\t\t\t\treturn this.config.columnCalcs !== false;\r\n\r\n\t\t\t\tcase \"row\":\r\n\t\t\t\t\treturn !(this.table.options.dataTree && this.config.dataTree === false && row.modules.dataTree.parent);\r\n\t\t\t}\r\n\r\n\t\t\treturn true;\r\n\t\t});\r\n\r\n\t\trows.forEach((row, i) => {\r\n\t\t\tvar rowData = row.getData(this.colVisProp);\r\n\t\t\tvar exportCols = [];\r\n\t\t\tvar indent = 0;\r\n\r\n\t\t\tswitch(row.type){\r\n\t\t\t\tcase \"group\":\r\n\t\t\t\t\tindent = row.level;\r\n\t\t\t\t\texportCols.push(new ExportColumn(row.key, row.getComponent(), columns.length, 1));\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"calc\" :\r\n\t\t\t\tcase \"row\" :\r\n\t\t\t\t\tcolumns.forEach((col) => {\r\n\t\t\t\t\t\texportCols.push(new ExportColumn(col._column.getFieldValue(rowData), col, 1, 1));\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\tif(this.table.options.dataTree && this.config.dataTree !== false){\r\n\t\t\t\t\t\tindent = row.modules.dataTree.index;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\r\n\t\t\texportRows.push(new ExportRow(row.type, exportCols, row.getComponent(), indent));\r\n\t\t});\r\n\r\n\t\treturn exportRows;\r\n\t}\r\n\r\n\tgenerateTableElement(list){\r\n\t\tvar table = document.createElement(\"table\"),\r\n\t\theaderEl = document.createElement(\"thead\"),\r\n\t\tbodyEl = document.createElement(\"tbody\"),\r\n\t\tstyles = this.lookupTableStyles(),\r\n\t\trowFormatter = this.table.options[\"rowFormatter\" + (this.colVisProp.charAt(0).toUpperCase() + this.colVisProp.slice(1))],\r\n\t\tsetup = {};\r\n\r\n\t\tsetup.rowFormatter = rowFormatter !== null ? rowFormatter : this.table.options.rowFormatter;\r\n\r\n\t\tif(this.table.options.dataTree &&this.config.dataTree !== false && this.table.modExists(\"columnCalcs\")){\r\n\t\t\tsetup.treeElementField = this.table.modules.dataTree.elementField;\r\n\t\t}\r\n\r\n\t\t//assign group header formatter\r\n\t\tsetup.groupHeader = this.table.options[\"groupHeader\" + (this.colVisProp.charAt(0).toUpperCase() + this.colVisProp.slice(1))];\r\n\r\n\t\tif(setup.groupHeader && !Array.isArray(setup.groupHeader)){\r\n\t\t\tsetup.groupHeader = [setup.groupHeader];\r\n\t\t}\r\n\r\n\t\ttable.classList.add(\"tabulator-print-table\");\r\n\r\n\t\tthis.mapElementStyles(this.table.columnManager.getHeadersElement(), headerEl, [\"border-top\", \"border-left\", \"border-right\", \"border-bottom\", \"background-color\", \"color\", \"font-weight\", \"font-family\", \"font-size\"]);\r\n\r\n\r\n\t\tif(list.length > 1000){\r\n\t\t\tconsole.warn(\"It may take a long time to render an HTML table with more than 1000 rows\");\r\n\t\t}\r\n\r\n\t\tlist.forEach((row, i) => {\r\n\t\t\tlet rowEl;\r\n\r\n\t\t\tswitch(row.type){\r\n\t\t\t\tcase \"header\":\r\n\t\t\t\t\theaderEl.appendChild(this.generateHeaderElement(row, setup, styles));\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"group\":\r\n\t\t\t\t\tbodyEl.appendChild(this.generateGroupElement(row, setup, styles));\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"calc\":\r\n\t\t\t\t\tbodyEl.appendChild(this.generateCalcElement(row, setup, styles));\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"row\":\r\n\t\t\t\t\trowEl = this.generateRowElement(row, setup, styles);\r\n\r\n\t\t\t\t\tthis.mapElementStyles(((i % 2) && styles.evenRow) ? styles.evenRow : styles.oddRow, rowEl, [\"border-top\", \"border-left\", \"border-right\", \"border-bottom\", \"color\", \"font-weight\", \"font-family\", \"font-size\", \"background-color\"]);\r\n\t\t\t\t\tbodyEl.appendChild(rowEl);\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tif(headerEl.innerHTML){\r\n\t\t\ttable.appendChild(headerEl);\r\n\t\t}\r\n\r\n\t\ttable.appendChild(bodyEl);\r\n\r\n\r\n\t\tthis.mapElementStyles(this.table.element, table, [\"border-top\", \"border-left\", \"border-right\", \"border-bottom\"]);\r\n\t\treturn table;\r\n\t}\r\n\r\n\tlookupTableStyles(){\r\n\t\tvar styles = {};\r\n\r\n\t\t//lookup row styles\r\n\t\tif(this.cloneTableStyle && window.getComputedStyle){\r\n\t\t\tstyles.oddRow = this.table.element.querySelector(\".tabulator-row-odd:not(.tabulator-group):not(.tabulator-calcs)\");\r\n\t\t\tstyles.evenRow = this.table.element.querySelector(\".tabulator-row-even:not(.tabulator-group):not(.tabulator-calcs)\");\r\n\t\t\tstyles.calcRow = this.table.element.querySelector(\".tabulator-row.tabulator-calcs\");\r\n\t\t\tstyles.firstRow = this.table.element.querySelector(\".tabulator-row:not(.tabulator-group):not(.tabulator-calcs)\");\r\n\t\t\tstyles.firstGroup = this.table.element.getElementsByClassName(\"tabulator-group\")[0];\r\n\r\n\t\t\tif(styles.firstRow){\r\n\t\t\t\tstyles.styleCells = styles.firstRow.getElementsByClassName(\"tabulator-cell\");\r\n\t\t\t\tstyles.firstCell = styles.styleCells[0];\r\n\t\t\t\tstyles.lastCell = styles.styleCells[styles.styleCells.length - 1];\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn styles;\r\n\t}\r\n\r\n\tgenerateHeaderElement(row, setup, styles){\r\n\t\tvar rowEl = document.createElement(\"tr\");\r\n\r\n\t\trow.columns.forEach((column) => {\r\n\t\t\tif(column){\r\n\t\t\t\tvar cellEl = document.createElement(\"th\");\r\n\t\t\t\tvar classNames = column.component._column.definition.cssClass ? column.component._column.definition.cssClass.split(\" \") : [];\r\n\r\n\t\t\t\tcellEl.colSpan = column.width;\r\n\t\t\t\tcellEl.rowSpan = column.height;\r\n\r\n\t\t\t\tcellEl.innerHTML = column.value;\r\n\r\n\t\t\t\tif(this.cloneTableStyle){\r\n\t\t\t\t\tcellEl.style.boxSizing = \"border-box\";\r\n\t\t\t\t}\r\n\r\n\t\t\t\tclassNames.forEach(function(className) {\r\n\t\t\t\t\tcellEl.classList.add(className);\r\n\t\t\t\t});\r\n\r\n\t\t\t\tthis.mapElementStyles(column.component.getElement(), cellEl, [\"text-align\", \"border-top\", \"border-left\", \"border-right\", \"border-bottom\", \"background-color\", \"color\", \"font-weight\", \"font-family\", \"font-size\"]);\r\n\t\t\t\tthis.mapElementStyles(column.component._column.contentElement, cellEl, [\"padding-top\", \"padding-left\", \"padding-right\", \"padding-bottom\"]);\r\n\r\n\t\t\t\tif(column.component._column.visible){\r\n\t\t\t\t\tthis.mapElementStyles(column.component.getElement(), cellEl, [\"width\"]);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tif(column.component._column.definition.width){\r\n\t\t\t\t\t\tcellEl.style.width = column.component._column.definition.width + \"px\";\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(column.component._column.parent){\r\n\t\t\t\t\tthis.mapElementStyles(column.component._column.parent.groupElement, cellEl, [\"border-top\"]);\r\n\t\t\t\t}\r\n\r\n\t\t\t\trowEl.appendChild(cellEl);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn rowEl;\r\n\t}\r\n\r\n\tgenerateGroupElement(row, setup, styles){\r\n\r\n\t\tvar rowEl = document.createElement(\"tr\"),\r\n\t\tcellEl = document.createElement(\"td\"),\r\n\t\tgroup = row.columns[0];\r\n\r\n\t\trowEl.classList.add(\"tabulator-print-table-row\");\r\n\r\n\t\tif(setup.groupHeader && setup.groupHeader[row.indent]){\r\n\t\t\tgroup.value = setup.groupHeader[row.indent](group.value, row.component._group.getRowCount(), row.component._group.getData(), row.component);\r\n\t\t}else{\r\n\t\t\tif(setup.groupHeader !== false){\r\n\t\t\t\tgroup.value = row.component._group.generator(group.value, row.component._group.getRowCount(), row.component._group.getData(), row.component);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tcellEl.colSpan = group.width;\r\n\t\tcellEl.innerHTML = group.value;\r\n\r\n\t\trowEl.classList.add(\"tabulator-print-table-group\");\r\n\t\trowEl.classList.add(\"tabulator-group-level-\" + row.indent);\r\n\r\n\t\tif(group.component.isVisible()){\r\n\t\t\trowEl.classList.add(\"tabulator-group-visible\");\r\n\t\t}\r\n\r\n\t\tthis.mapElementStyles(styles.firstGroup, rowEl, [\"border-top\", \"border-left\", \"border-right\", \"border-bottom\", \"color\", \"font-weight\", \"font-family\", \"font-size\", \"background-color\"]);\r\n\t\tthis.mapElementStyles(styles.firstGroup, cellEl, [\"padding-top\", \"padding-left\", \"padding-right\", \"padding-bottom\"]);\r\n\r\n\t\trowEl.appendChild(cellEl);\r\n\r\n\t\treturn rowEl;\r\n\t}\r\n\r\n\tgenerateCalcElement(row, setup, styles){\r\n\t\tvar rowEl = this.generateRowElement(row, setup, styles);\r\n\r\n\t\trowEl.classList.add(\"tabulator-print-table-calcs\");\r\n\t\tthis.mapElementStyles(styles.calcRow, rowEl, [\"border-top\", \"border-left\", \"border-right\", \"border-bottom\", \"color\", \"font-weight\", \"font-family\", \"font-size\", \"background-color\"]);\r\n\r\n\t\treturn rowEl;\r\n\t}\r\n\r\n\tgenerateRowElement(row, setup, styles){\r\n\t\tvar rowEl = document.createElement(\"tr\");\r\n\r\n\t\trowEl.classList.add(\"tabulator-print-table-row\");\r\n\r\n\t\trow.columns.forEach((col, i) => {\r\n\t\t\tif(col){\r\n\t\t\t\tvar cellEl = document.createElement(\"td\"),\r\n\t\t\t\tcolumn = col.component._column,\r\n\t\t\t\tindex = this.table.columnManager.findColumnIndex(column),\r\n\t\t\t\tvalue = col.value,\r\n\t\t\t\tcellStyle;\r\n\r\n\t\t\t\tvar cellWrapper = {\r\n\t\t\t\t\tmodules:{},\r\n\t\t\t\t\tgetValue:function(){\r\n\t\t\t\t\t\treturn value;\r\n\t\t\t\t\t},\r\n\t\t\t\t\tgetField:function(){\r\n\t\t\t\t\t\treturn column.definition.field;\r\n\t\t\t\t\t},\r\n\t\t\t\t\tgetElement:function(){\r\n\t\t\t\t\t\treturn cellEl;\r\n\t\t\t\t\t},\r\n\t\t\t\t\tgetColumn:function(){\r\n\t\t\t\t\t\treturn column.getComponent();\r\n\t\t\t\t\t},\r\n\t\t\t\t\tgetData:function(){\r\n\t\t\t\t\t\treturn row.component.getData();\r\n\t\t\t\t\t},\r\n\t\t\t\t\tgetRow:function(){\r\n\t\t\t\t\t\treturn row.component;\r\n\t\t\t\t\t},\r\n\t\t\t\t\tgetComponent:function(){\r\n\t\t\t\t\t\treturn cellWrapper;\r\n\t\t\t\t\t},\r\n\t\t\t\t\tcolumn:column,\r\n\t\t\t\t};\r\n\r\n\t\t\t\tvar classNames = column.definition.cssClass ? column.definition.cssClass.split(\" \") : [];\r\n\r\n\t\t\t\tclassNames.forEach(function(className) {\r\n\t\t\t\t\tcellEl.classList.add(className);\r\n\t\t\t\t});\r\n\r\n\t\t\t\tif(this.table.modExists(\"format\") && this.config.formatCells !== false){\r\n\t\t\t\t\tvalue = this.table.modules.format.formatExportValue(cellWrapper, this.colVisProp);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tswitch(typeof value){\r\n\t\t\t\t\t\tcase \"object\":\r\n\t\t\t\t\t\t\tvalue = value !== null ? JSON.stringify(value) : \"\";\r\n\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\tcase \"undefined\":\r\n\t\t\t\t\t\t\tvalue = \"\";\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(value instanceof Node){\r\n\t\t\t\t\tcellEl.appendChild(value);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tcellEl.innerHTML = value;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tcellStyle = styles.styleCells && styles.styleCells[index] ? styles.styleCells[index] : styles.firstCell;\r\n\r\n\t\t\t\tif(cellStyle){\r\n\t\t\t\t\tthis.mapElementStyles(cellStyle, cellEl, [\"padding-top\", \"padding-left\", \"padding-right\", \"padding-bottom\", \"border-top\", \"border-left\", \"border-right\", \"border-bottom\", \"color\", \"font-weight\", \"font-family\", \"font-size\", \"text-align\"]);\r\n\r\n\t\t\t\t\tif(column.definition.align){\r\n\t\t\t\t\t\tcellEl.style.textAlign = column.definition.align;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(this.table.options.dataTree && this.config.dataTree !== false){\r\n\t\t\t\t\tif((setup.treeElementField && setup.treeElementField == column.field) || (!setup.treeElementField && i == 0)){\r\n\t\t\t\t\t\tif(row.component._row.modules.dataTree.controlEl){\r\n\t\t\t\t\t\t\tcellEl.insertBefore(row.component._row.modules.dataTree.controlEl.cloneNode(true), cellEl.firstChild);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif(row.component._row.modules.dataTree.branchEl){\r\n\t\t\t\t\t\t\tcellEl.insertBefore(row.component._row.modules.dataTree.branchEl.cloneNode(true), cellEl.firstChild);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\trowEl.appendChild(cellEl);\r\n\r\n\t\t\t\tif(cellWrapper.modules.format && cellWrapper.modules.format.renderedCallback){\r\n\t\t\t\t\tcellWrapper.modules.format.renderedCallback();\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(setup.rowFormatter && this.config.formatCells !== false){\r\n\t\t\t\t\tsetup.rowFormatter(row.component);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn rowEl;\r\n\t}\r\n\r\n\tgenerateHTMLTable(list){\r\n\t\tvar holder = document.createElement(\"div\");\r\n\r\n\t\tholder.appendChild(this.generateTableElement(list));\r\n\r\n\t\treturn holder.innerHTML;\r\n\t}\r\n\r\n\tgetHtml(visible, style, config, colVisProp){\r\n\t\tvar list = this.generateExportList(config || this.table.options.htmlOutputConfig, style, visible, colVisProp || \"htmlOutput\");\r\n\r\n\t\treturn this.generateHTMLTable(list);\r\n\t}\r\n\r\n\tmapElementStyles(from, to, props){\r\n\t\tif(this.cloneTableStyle && from && to){\r\n\r\n\t\t\tvar lookup = {\r\n\t\t\t\t\"background-color\" : \"backgroundColor\",\r\n\t\t\t\t\"color\" : \"fontColor\",\r\n\t\t\t\t\"width\" : \"width\",\r\n\t\t\t\t\"font-weight\" : \"fontWeight\",\r\n\t\t\t\t\"font-family\" : \"fontFamily\",\r\n\t\t\t\t\"font-size\" : \"fontSize\",\r\n\t\t\t\t\"text-align\" : \"textAlign\",\r\n\t\t\t\t\"border-top\" : \"borderTop\",\r\n\t\t\t\t\"border-left\" : \"borderLeft\",\r\n\t\t\t\t\"border-right\" : \"borderRight\",\r\n\t\t\t\t\"border-bottom\" : \"borderBottom\",\r\n\t\t\t\t\"padding-top\" : \"paddingTop\",\r\n\t\t\t\t\"padding-left\" : \"paddingLeft\",\r\n\t\t\t\t\"padding-right\" : \"paddingRight\",\r\n\t\t\t\t\"padding-bottom\" : \"paddingBottom\",\r\n\t\t\t};\r\n\r\n\t\t\tif(window.getComputedStyle){\r\n\t\t\t\tvar fromStyle = window.getComputedStyle(from);\r\n\r\n\t\t\t\tprops.forEach(function(prop){\r\n\t\t\t\t\tto.style[lookup[prop]] = fromStyle.getPropertyValue(prop);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n\r\nExport.moduleName = \"export\";\r\n\r\nexport default Export;\r\n","export default {\r\n\r\n\t//equal to\r\n\t\"=\":function(filterVal, rowVal, rowData, filterParams){\r\n\t\treturn rowVal == filterVal ? true : false;\r\n\t},\r\n\r\n\t//less than\r\n\t\"<\":function(filterVal, rowVal, rowData, filterParams){\r\n\t\treturn rowVal < filterVal ? true : false;\r\n\t},\r\n\r\n\t//less than or equal to\r\n\t\"<=\":function(filterVal, rowVal, rowData, filterParams){\r\n\t\treturn rowVal <= filterVal ? true : false;\r\n\t},\r\n\r\n\t//greater than\r\n\t\">\":function(filterVal, rowVal, rowData, filterParams){\r\n\t\treturn rowVal > filterVal ? true : false;\r\n\t},\r\n\r\n\t//greater than or equal to\r\n\t\">=\":function(filterVal, rowVal, rowData, filterParams){\r\n\t\treturn rowVal >= filterVal ? true : false;\r\n\t},\r\n\r\n\t//not equal to\r\n\t\"!=\":function(filterVal, rowVal, rowData, filterParams){\r\n\t\treturn rowVal != filterVal ? true : false;\r\n\t},\r\n\r\n\t\"regex\":function(filterVal, rowVal, rowData, filterParams){\r\n\r\n\t\tif(typeof filterVal == \"string\"){\r\n\t\t\tfilterVal = new RegExp(filterVal);\r\n\t\t}\r\n\r\n\t\treturn filterVal.test(rowVal);\r\n\t},\r\n\r\n\t//contains the string\r\n\t\"like\":function(filterVal, rowVal, rowData, filterParams){\r\n\t\tif(filterVal === null || typeof filterVal === \"undefined\"){\r\n\t\t\treturn rowVal === filterVal ? true : false;\r\n\t\t}else{\r\n\t\t\tif(typeof rowVal !== 'undefined' && rowVal !== null){\r\n\t\t\t\treturn String(rowVal).toLowerCase().indexOf(filterVal.toLowerCase()) > -1;\r\n\t\t\t}\r\n\t\t\telse{\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\t//contains the keywords\r\n\t\"keywords\":function(filterVal, rowVal, rowData, filterParams){\r\n\t\tvar keywords = filterVal.toLowerCase().split(typeof filterParams.separator === \"undefined\" ? \" \" : filterParams.separator),\r\n\t\tvalue = String(rowVal === null || typeof rowVal === \"undefined\" ? \"\" : rowVal).toLowerCase(),\r\n\t\tmatches = [];\r\n\r\n\t\tkeywords.forEach((keyword) =>{\r\n\t\t\tif(value.includes(keyword)){\r\n\t\t\t\tmatches.push(true);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn filterParams.matchAll ? matches.length === keywords.length : !!matches.length;\r\n\t},\r\n\r\n\t//starts with the string\r\n\t\"starts\":function(filterVal, rowVal, rowData, filterParams){\r\n\t\tif(filterVal === null || typeof filterVal === \"undefined\"){\r\n\t\t\treturn rowVal === filterVal ? true : false;\r\n\t\t}else{\r\n\t\t\tif(typeof rowVal !== 'undefined' && rowVal !== null){\r\n\t\t\t\treturn String(rowVal).toLowerCase().startsWith(filterVal.toLowerCase());\r\n\t\t\t}\r\n\t\t\telse{\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\t//ends with the string\r\n\t\"ends\":function(filterVal, rowVal, rowData, filterParams){\r\n\t\tif(filterVal === null || typeof filterVal === \"undefined\"){\r\n\t\t\treturn rowVal === filterVal ? true : false;\r\n\t\t}else{\r\n\t\t\tif(typeof rowVal !== 'undefined' && rowVal !== null){\r\n\t\t\t\treturn String(rowVal).toLowerCase().endsWith(filterVal.toLowerCase());\r\n\t\t\t}\r\n\t\t\telse{\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\t//in array\r\n\t\"in\":function(filterVal, rowVal, rowData, filterParams){\r\n\t\tif(Array.isArray(filterVal)){\r\n\t\t\treturn filterVal.length ? filterVal.indexOf(rowVal) > -1 : true;\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Filter Error - filter value is not an array:\", filterVal);\r\n\t\t\treturn false;\r\n\t\t}\r\n\t},\r\n};","import Module from '../../core/Module.js';\r\n\r\nimport defaultFilters from './defaults/filters.js';\r\n\r\nclass Filter extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.filterList = []; //hold filter list\r\n\t\tthis.headerFilters = {}; //hold column filters\r\n\t\tthis.headerFilterColumns = []; //hold columns that use header filters\r\n\r\n\t\tthis.prevHeaderFilterChangeCheck = \"\";\r\n\t\tthis.prevHeaderFilterChangeCheck = \"{}\";\r\n\r\n\t\tthis.changed = false; //has filtering changed since last render\r\n\t\tthis.tableInitialized = false;\r\n\r\n\t\tthis.registerTableOption(\"filterMode\", \"local\"); //local or remote filtering\r\n\r\n\t\tthis.registerTableOption(\"initialFilter\", false); //initial filtering criteria\r\n\t\tthis.registerTableOption(\"initialHeaderFilter\", false); //initial header filtering criteria\r\n\t\tthis.registerTableOption(\"headerFilterLiveFilterDelay\", 300); //delay before updating column after user types in header filter\r\n\r\n\t\tthis.registerColumnOption(\"headerFilter\");\r\n\t\tthis.registerColumnOption(\"headerFilterPlaceholder\");\r\n\t\tthis.registerColumnOption(\"headerFilterParams\");\r\n\t\tthis.registerColumnOption(\"headerFilterEmptyCheck\");\r\n\t\tthis.registerColumnOption(\"headerFilterFunc\");\r\n\t\tthis.registerColumnOption(\"headerFilterFuncParams\");\r\n\t\tthis.registerColumnOption(\"headerFilterLiveFilter\");\r\n\r\n\t\tthis.registerTableFunction(\"searchRows\", this.searchRows.bind(this));\r\n\t\tthis.registerTableFunction(\"searchData\", this.searchData.bind(this));\r\n\r\n\t\tthis.registerTableFunction(\"setFilter\", this.userSetFilter.bind(this));\r\n\t\tthis.registerTableFunction(\"refreshFilter\", this.userRefreshFilter.bind(this));\r\n\t\tthis.registerTableFunction(\"addFilter\", this.userAddFilter.bind(this));\r\n\t\tthis.registerTableFunction(\"getFilters\", this.getFilters.bind(this));\r\n\t\tthis.registerTableFunction(\"setHeaderFilterFocus\", this.userSetHeaderFilterFocus.bind(this));\r\n\t\tthis.registerTableFunction(\"getHeaderFilterValue\", this.userGetHeaderFilterValue.bind(this));\r\n\t\tthis.registerTableFunction(\"setHeaderFilterValue\", this.userSetHeaderFilterValue.bind(this));\r\n\t\tthis.registerTableFunction(\"getHeaderFilters\", this.getHeaderFilters.bind(this));\r\n\t\tthis.registerTableFunction(\"removeFilter\", this.userRemoveFilter.bind(this));\r\n\t\tthis.registerTableFunction(\"clearFilter\", this.userClearFilter.bind(this));\r\n\t\tthis.registerTableFunction(\"clearHeaderFilter\", this.userClearHeaderFilter.bind(this));\r\n\r\n\t\tthis.registerComponentFunction(\"column\", \"headerFilterFocus\", this.setHeaderFilterFocus.bind(this));\r\n\t\tthis.registerComponentFunction(\"column\", \"reloadHeaderFilter\", this.reloadHeaderFilter.bind(this));\r\n\t\tthis.registerComponentFunction(\"column\", \"getHeaderFilterValue\", this.getHeaderFilterValue.bind(this));\r\n\t\tthis.registerComponentFunction(\"column\", \"setHeaderFilterValue\", this.setHeaderFilterValue.bind(this));\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tthis.subscribe(\"column-init\", this.initializeColumnHeaderFilter.bind(this));\r\n\t\tthis.subscribe(\"column-width-fit-before\", this.hideHeaderFilterElements.bind(this));\r\n\t\tthis.subscribe(\"column-width-fit-after\", this.showHeaderFilterElements.bind(this));\r\n\t\tthis.subscribe(\"table-built\", this.tableBuilt.bind(this));\r\n\r\n\t\tif(this.table.options.filterMode === \"remote\"){\r\n\t\t\tthis.subscribe(\"data-params\", this.remoteFilterParams.bind(this));\r\n\t\t}\r\n\r\n\t\tthis.registerDataHandler(this.filter.bind(this), 10);\r\n\t}\r\n\r\n\ttableBuilt(){\r\n\t\tif(this.table.options.initialFilter){\r\n\t\t\tthis.setFilter(this.table.options.initialFilter);\r\n\t\t}\r\n\r\n\t\tif(this.table.options.initialHeaderFilter){\r\n\t\t\tthis.table.options.initialHeaderFilter.forEach((item) => {\r\n\r\n\t\t\t\tvar column = this.table.columnManager.findColumn(item.field);\r\n\r\n\t\t\t\tif(column){\r\n\t\t\t\t\tthis.setHeaderFilterValue(column, item.value);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.warn(\"Column Filter Error - No matching column found:\", item.field);\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tthis.tableInitialized = true;\r\n\t}\r\n\r\n\tremoteFilterParams(data, config, silent, params){\r\n\t\tparams.filter = this.getFilters(true, true);\r\n\t\treturn params;\r\n\t}\r\n\r\n\t///////////////////////////////////\r\n\t///////// Table Functions /////////\r\n\t///////////////////////////////////\r\n\r\n\t//set standard filters\r\n\tuserSetFilter(field, type, value, params){\r\n\t\tthis.setFilter(field, type, value, params);\r\n\t\tthis.refreshFilter();\r\n\t}\r\n\r\n\t//set standard filters\r\n\tuserRefreshFilter(){\r\n\t\tthis.refreshFilter();\r\n\t}\r\n\r\n\t//add filter to array\r\n\tuserAddFilter(field, type, value, params){\r\n\t\tthis.addFilter(field, type, value, params);\r\n\t\tthis.refreshFilter();\r\n\t}\r\n\r\n\tuserSetHeaderFilterFocus(field){\r\n\t\tvar column = this.table.columnManager.findColumn(field);\r\n\r\n\t\tif(column){\r\n\t\t\tthis.setHeaderFilterFocus(column);\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Column Filter Focus Error - No matching column found:\", field);\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\tuserGetHeaderFilterValue(field) {\r\n\t\tvar column = this.table.columnManager.findColumn(field);\r\n\r\n\t\tif(column){\r\n\t\t\treturn this.getHeaderFilterValue(column);\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Column Filter Error - No matching column found:\", field);\r\n\t\t}\r\n\t}\r\n\r\n\tuserSetHeaderFilterValue(field, value){\r\n\t\tvar column = this.table.columnManager.findColumn(field);\r\n\r\n\t\tif(column){\r\n\t\t\tthis.setHeaderFilterValue(column, value);\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Column Filter Error - No matching column found:\", field);\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\t//remove filter from array\r\n\tuserRemoveFilter(field, type, value){\r\n\t\tthis.removeFilter(field, type, value);\r\n\t\tthis.refreshFilter();\r\n\t}\r\n\r\n\t//clear filters\r\n\tuserClearFilter(all){\r\n\t\tthis.clearFilter(all);\r\n\t\tthis.refreshFilter();\r\n\t}\r\n\r\n\t//clear header filters\r\n\tuserClearHeaderFilter(){\r\n\t\tthis.clearHeaderFilter();\r\n\t\tthis.refreshFilter();\r\n\t}\r\n\r\n\r\n\t//search for specific row components\r\n\tsearchRows(field, type, value){\r\n\t\treturn this.search(\"rows\", field, type, value);\r\n\t}\r\n\r\n\t//search for specific data\r\n\tsearchData(field, type, value){\r\n\t\treturn this.search(\"data\", field, type, value);\r\n\t}\r\n\r\n\t///////////////////////////////////\r\n\t///////// Internal Logic //////////\r\n\t///////////////////////////////////\r\n\r\n\tinitializeColumnHeaderFilter(column){\r\n\t\tvar def = column.definition;\r\n\r\n\t\tif(def.headerFilter){\r\n\r\n\t\t\tif(typeof def.headerFilterPlaceholder !== \"undefined\" && def.field){\r\n\t\t\t\tthis.module(\"localize\").setHeaderFilterColumnPlaceholder(def.field, def.headerFilterPlaceholder);\r\n\t\t\t}\r\n\r\n\t\t\tthis.initializeColumn(column);\r\n\t\t}\r\n\t}\r\n\r\n\t//initialize column header filter\r\n\tinitializeColumn(column, value){\r\n\t\tvar self = this,\r\n\t\tfield = column.getField();\r\n\r\n\t\t//handle successfully value change\r\n\t\tfunction success(value){\r\n\t\t\tvar filterType = (column.modules.filter.tagType == \"input\" && column.modules.filter.attrType == \"text\") || column.modules.filter.tagType == \"textarea\" ? \"partial\" : \"match\",\r\n\t\t\ttype = \"\",\r\n\t\t\tfilterChangeCheck = \"\",\r\n\t\t\tfilterFunc;\r\n\r\n\t\t\tif(typeof column.modules.filter.prevSuccess === \"undefined\" || column.modules.filter.prevSuccess !== value){\r\n\r\n\t\t\t\tcolumn.modules.filter.prevSuccess = value;\r\n\r\n\t\t\t\tif(!column.modules.filter.emptyFunc(value)){\r\n\t\t\t\t\tcolumn.modules.filter.value = value;\r\n\r\n\t\t\t\t\tswitch(typeof column.definition.headerFilterFunc){\r\n\t\t\t\t\t\tcase \"string\":\r\n\t\t\t\t\t\t\tif(Filter.filters[column.definition.headerFilterFunc]){\r\n\t\t\t\t\t\t\t\ttype = column.definition.headerFilterFunc;\r\n\t\t\t\t\t\t\t\tfilterFunc = function(data){\r\n\t\t\t\t\t\t\t\t\tvar params = column.definition.headerFilterFuncParams || {};\r\n\t\t\t\t\t\t\t\t\tvar fieldVal = column.getFieldValue(data);\r\n\r\n\t\t\t\t\t\t\t\t\tparams = typeof params === \"function\" ? params(value, fieldVal, data) : params;\r\n\r\n\t\t\t\t\t\t\t\t\treturn Filter.filters[column.definition.headerFilterFunc](value, fieldVal, data, params);\r\n\t\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\t\tconsole.warn(\"Header Filter Error - Matching filter function not found: \", column.definition.headerFilterFunc);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\tcase \"function\":\r\n\t\t\t\t\t\t\tfilterFunc = function(data){\r\n\t\t\t\t\t\t\t\tvar params = column.definition.headerFilterFuncParams || {};\r\n\t\t\t\t\t\t\t\tvar fieldVal = column.getFieldValue(data);\r\n\r\n\t\t\t\t\t\t\t\tparams = typeof params === \"function\" ? params(value, fieldVal, data) : params;\r\n\r\n\t\t\t\t\t\t\t\treturn column.definition.headerFilterFunc(value, fieldVal, data, params);\r\n\t\t\t\t\t\t\t};\r\n\r\n\t\t\t\t\t\t\ttype = filterFunc;\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif(!filterFunc){\r\n\t\t\t\t\t\tswitch(filterType){\r\n\t\t\t\t\t\t\tcase \"partial\":\r\n\t\t\t\t\t\t\t\tfilterFunc = function(data){\r\n\t\t\t\t\t\t\t\t\tvar colVal = column.getFieldValue(data);\r\n\r\n\t\t\t\t\t\t\t\t\tif(typeof colVal !== 'undefined' && colVal !== null){\r\n\t\t\t\t\t\t\t\t\t\treturn String(colVal).toLowerCase().indexOf(String(value).toLowerCase()) > -1;\r\n\t\t\t\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t\t\ttype = \"like\";\r\n\t\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\t\tdefault:\r\n\t\t\t\t\t\t\t\tfilterFunc = function(data){\r\n\t\t\t\t\t\t\t\t\treturn column.getFieldValue(data) == value;\r\n\t\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t\t\ttype = \"=\";\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tself.headerFilters[field] = {value:value, func:filterFunc, type:type};\r\n\t\t\t\t}else{\r\n\t\t\t\t\tdelete self.headerFilters[field];\r\n\t\t\t\t}\r\n\r\n\t\t\t\tcolumn.modules.filter.value = value;\r\n\r\n\t\t\t\tfilterChangeCheck = JSON.stringify(self.headerFilters);\r\n\r\n\t\t\t\tif(self.prevHeaderFilterChangeCheck !== filterChangeCheck){\r\n\t\t\t\t\tself.prevHeaderFilterChangeCheck = filterChangeCheck;\r\n\r\n\t\t\t\t\tself.trackChanges();\r\n\t\t\t\t\tself.refreshFilter();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\tcolumn.modules.filter = {\r\n\t\t\tsuccess:success,\r\n\t\t\tattrType:false,\r\n\t\t\ttagType:false,\r\n\t\t\temptyFunc:false,\r\n\t\t};\r\n\r\n\t\tthis.generateHeaderFilterElement(column);\r\n\t}\r\n\r\n\tgenerateHeaderFilterElement(column, initialValue, reinitialize){\r\n\t\tvar self = this,\r\n\t\tsuccess = column.modules.filter.success,\r\n\t\tfield = column.getField(),\r\n\t\tfilterElement, editor, editorElement, cellWrapper, typingTimer, searchTrigger, params;\r\n\r\n\t\tcolumn.modules.filter.value = initialValue;\r\n\r\n\t\t//handle aborted edit\r\n\t\tfunction cancel(){}\r\n\r\n\t\tif(column.modules.filter.headerElement && column.modules.filter.headerElement.parentNode){\r\n\t\t\tcolumn.contentElement.removeChild(column.modules.filter.headerElement.parentNode);\r\n\t\t}\r\n\r\n\t\tif(field){\r\n\r\n\t\t\t//set empty value function\r\n\t\t\tcolumn.modules.filter.emptyFunc = column.definition.headerFilterEmptyCheck || function(value){\r\n\t\t\t\treturn !value && value !== 0;\r\n\t\t\t};\r\n\r\n\t\t\tfilterElement = document.createElement(\"div\");\r\n\t\t\tfilterElement.classList.add(\"tabulator-header-filter\");\r\n\r\n\t\t\t//set column editor\r\n\t\t\tswitch(typeof column.definition.headerFilter){\r\n\t\t\t\tcase \"string\":\r\n\t\t\t\t\tif(self.table.modules.edit.editors[column.definition.headerFilter]){\r\n\t\t\t\t\t\teditor = self.table.modules.edit.editors[column.definition.headerFilter];\r\n\r\n\t\t\t\t\t\tif((column.definition.headerFilter === \"tick\" || column.definition.headerFilter === \"tickCross\") && !column.definition.headerFilterEmptyCheck){\r\n\t\t\t\t\t\t\tcolumn.modules.filter.emptyFunc = function(value){\r\n\t\t\t\t\t\t\t\treturn value !== true && value !== false;\r\n\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tconsole.warn(\"Filter Error - Cannot build header filter, No such editor found: \", column.definition.editor);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"function\":\r\n\t\t\t\t\teditor = column.definition.headerFilter;\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"boolean\":\r\n\t\t\t\t\tif(column.modules.edit && column.modules.edit.editor){\r\n\t\t\t\t\t\teditor = column.modules.edit.editor;\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tif(column.definition.formatter && self.table.modules.edit.editors[column.definition.formatter]){\r\n\t\t\t\t\t\t\teditor = self.table.modules.edit.editors[column.definition.formatter];\r\n\r\n\t\t\t\t\t\t\tif((column.definition.formatter === \"tick\" || column.definition.formatter === \"tickCross\") && !column.definition.headerFilterEmptyCheck){\r\n\t\t\t\t\t\t\t\tcolumn.modules.filter.emptyFunc = function(value){\r\n\t\t\t\t\t\t\t\t\treturn value !== true && value !== false;\r\n\t\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\teditor = self.table.modules.edit.editors[\"input\"];\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\r\n\t\t\tif(editor){\r\n\r\n\t\t\t\tcellWrapper = {\r\n\t\t\t\t\tgetValue:function(){\r\n\t\t\t\t\t\treturn typeof initialValue !== \"undefined\" ? initialValue : \"\";\r\n\t\t\t\t\t},\r\n\t\t\t\t\tgetField:function(){\r\n\t\t\t\t\t\treturn column.definition.field;\r\n\t\t\t\t\t},\r\n\t\t\t\t\tgetElement:function(){\r\n\t\t\t\t\t\treturn filterElement;\r\n\t\t\t\t\t},\r\n\t\t\t\t\tgetColumn:function(){\r\n\t\t\t\t\t\treturn column.getComponent();\r\n\t\t\t\t\t},\r\n\t\t\t\t\tgetRow:function(){\r\n\t\t\t\t\t\treturn {\r\n\t\t\t\t\t\t\tnormalizeHeight:function(){\r\n\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t}\r\n\t\t\t\t};\r\n\r\n\t\t\t\tparams = column.definition.headerFilterParams || {};\r\n\r\n\t\t\t\tparams = typeof params === \"function\" ? params.call(self.table, cellWrapper) : params;\r\n\r\n\t\t\t\teditorElement = editor.call(this.table.modules.edit, cellWrapper, function(){}, success, cancel, params);\r\n\r\n\t\t\t\tif(!editorElement){\r\n\t\t\t\t\tconsole.warn(\"Filter Error - Cannot add filter to \" + field + \" column, editor returned a value of false\");\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(!(editorElement instanceof Node)){\r\n\t\t\t\t\tconsole.warn(\"Filter Error - Cannot add filter to \" + field + \" column, editor should return an instance of Node, the editor returned:\", editorElement);\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//set Placeholder Text\r\n\t\t\t\tself.langBind(\"headerFilters|columns|\" + column.definition.field, function(value){\r\n\t\t\t\t\teditorElement.setAttribute(\"placeholder\", typeof value !== \"undefined\" && value ? value : self.langText(\"headerFilters|default\"));\r\n\t\t\t\t});\r\n\r\n\t\t\t\t//focus on element on click\r\n\t\t\t\teditorElement.addEventListener(\"click\", function(e){\r\n\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\teditorElement.focus();\r\n\t\t\t\t});\r\n\r\n\t\t\t\teditorElement.addEventListener(\"focus\", (e) => {\r\n\t\t\t\t\tvar left = this.table.columnManager.element.scrollLeft;\r\n\r\n\t\t\t\t\tvar headerPos = this.table.rowManager.element.scrollLeft + parseInt(this.table.columnManager.element.style.marginLeft);\r\n\r\n\t\t\t\t\tif(left !== headerPos){\r\n\t\t\t\t\t\tthis.table.rowManager.scrollHorizontal(left);\r\n\t\t\t\t\t\tthis.table.columnManager.scrollHorizontal(left);\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\t//live update filters as user types\r\n\t\t\t\ttypingTimer = false;\r\n\r\n\t\t\t\tsearchTrigger = function(e){\r\n\t\t\t\t\tif(typingTimer){\r\n\t\t\t\t\t\tclearTimeout(typingTimer);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\ttypingTimer = setTimeout(function(){\r\n\t\t\t\t\t\tsuccess(editorElement.value);\r\n\t\t\t\t\t},self.table.options.headerFilterLiveFilterDelay);\r\n\t\t\t\t};\r\n\r\n\t\t\t\tcolumn.modules.filter.headerElement = editorElement;\r\n\t\t\t\tcolumn.modules.filter.attrType = editorElement.hasAttribute(\"type\") ? editorElement.getAttribute(\"type\").toLowerCase() : \"\" ;\r\n\t\t\t\tcolumn.modules.filter.tagType = editorElement.tagName.toLowerCase();\r\n\r\n\t\t\t\tif(column.definition.headerFilterLiveFilter !== false){\r\n\r\n\t\t\t\t\tif (\r\n\t\t\t\t\t\t!(\r\n\t\t\t\t\t\t\tcolumn.definition.headerFilter === 'autocomplete' ||\r\n\t\t\t\t\t\t\tcolumn.definition.headerFilter === 'tickCross' ||\r\n\t\t\t\t\t\t\t((column.definition.editor === 'autocomplete' ||\r\n\t\t\t\t\t\t\t\tcolumn.definition.editor === 'tickCross') &&\r\n\t\t\t\t\t\t\tcolumn.definition.headerFilter === true)\r\n\t\t\t\t\t\t)\r\n\t\t\t\t\t) {\r\n\t\t\t\t\t\teditorElement.addEventListener(\"keyup\", searchTrigger);\r\n\t\t\t\t\t\teditorElement.addEventListener(\"search\", searchTrigger);\r\n\r\n\r\n\t\t\t\t\t\t//update number filtered columns on change\r\n\t\t\t\t\t\tif(column.modules.filter.attrType == \"number\"){\r\n\t\t\t\t\t\t\teditorElement.addEventListener(\"change\", function(e){\r\n\t\t\t\t\t\t\t\tsuccess(editorElement.value);\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t//change text inputs to search inputs to allow for clearing of field\r\n\t\t\t\t\t\tif(column.modules.filter.attrType == \"text\" && this.table.browser !== \"ie\"){\r\n\t\t\t\t\t\t\teditorElement.setAttribute(\"type\", \"search\");\r\n\t\t\t\t\t\t// editorElement.off(\"change blur\"); //prevent blur from triggering filter and preventing selection click\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t//prevent input and select elements from propagating click to column sorters etc\r\n\t\t\t\t\tif(column.modules.filter.tagType == \"input\" || column.modules.filter.tagType == \"select\" || column.modules.filter.tagType == \"textarea\"){\r\n\t\t\t\t\t\teditorElement.addEventListener(\"mousedown\",function(e){\r\n\t\t\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tfilterElement.appendChild(editorElement);\r\n\r\n\t\t\t\tcolumn.contentElement.appendChild(filterElement);\r\n\r\n\t\t\t\tif(!reinitialize){\r\n\t\t\t\t\tself.headerFilterColumns.push(column);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Filter Error - Cannot add header filter, column has no field set:\", column.definition.title);\r\n\t\t}\r\n\t}\r\n\r\n\t//hide all header filter elements (used to ensure correct column widths in \"fitData\" layout mode)\r\n\thideHeaderFilterElements(){\r\n\t\tthis.headerFilterColumns.forEach(function(column){\r\n\t\t\tif(column.modules.filter && column.modules.filter.headerElement){\r\n\t\t\t\tcolumn.modules.filter.headerElement.style.display = 'none';\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t//show all header filter elements (used to ensure correct column widths in \"fitData\" layout mode)\r\n\tshowHeaderFilterElements(){\r\n\t\tthis.headerFilterColumns.forEach(function(column){\r\n\t\t\tif(column.modules.filter && column.modules.filter.headerElement){\r\n\t\t\t\tcolumn.modules.filter.headerElement.style.display = '';\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t//programmatically set focus of header filter\r\n\tsetHeaderFilterFocus(column){\r\n\t\tif(column.modules.filter && column.modules.filter.headerElement){\r\n\t\t\tcolumn.modules.filter.headerElement.focus();\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Column Filter Focus Error - No header filter set on column:\", column.getField());\r\n\t\t}\r\n\t}\r\n\r\n\t//programmatically get value of header filter\r\n\tgetHeaderFilterValue(column){\r\n\t\tif(column.modules.filter && column.modules.filter.headerElement){\r\n\t\t\treturn column.modules.filter.value;\r\n\t\t} else {\r\n\t\t\tconsole.warn(\"Column Filter Error - No header filter set on column:\", column.getField());\r\n\t\t}\r\n\t}\r\n\r\n\t//programmatically set value of header filter\r\n\tsetHeaderFilterValue(column, value){\r\n\t\tif (column){\r\n\t\t\tif(column.modules.filter && column.modules.filter.headerElement){\r\n\t\t\t\tthis.generateHeaderFilterElement(column, value, true);\r\n\t\t\t\tcolumn.modules.filter.success(value);\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Column Filter Error - No header filter set on column:\", column.getField());\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\treloadHeaderFilter(column){\r\n\t\tif (column){\r\n\t\t\tif(column.modules.filter && column.modules.filter.headerElement){\r\n\t\t\t\tthis.generateHeaderFilterElement(column, column.modules.filter.value, true);\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Column Filter Error - No header filter set on column:\", column.getField());\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\trefreshFilter(){\r\n\t\tif(this.tableInitialized){\r\n\t\t\tif(this.table.options.filterMode === \"remote\"){\r\n\t\t\t\tthis.reloadData(null, false, false);\r\n\t\t\t}else{\r\n\t\t\t\tthis.refreshData(true);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//TODO - Persist left position of row manager\r\n\t\t// left = this.scrollLeft;\r\n\t\t// this.scrollHorizontal(left);\r\n\t}\r\n\r\n\t//check if the filters has changed since last use\r\n\ttrackChanges(){\r\n\t\tthis.changed = true;\r\n\t\tthis.dispatch(\"filter-changed\");\r\n\t}\r\n\r\n\t//check if the filters has changed since last use\r\n\thasChanged(){\r\n\t\tvar changed = this.changed;\r\n\t\tthis.changed = false;\r\n\t\treturn changed;\r\n\t}\r\n\r\n\t//set standard filters\r\n\tsetFilter(field, type, value, params){\r\n\t\tthis.filterList = [];\r\n\r\n\t\tif(!Array.isArray(field)){\r\n\t\t\tfield = [{field:field, type:type, value:value, params:params}];\r\n\t\t}\r\n\r\n\t\tthis.addFilter(field);\r\n\t}\r\n\r\n\t//add filter to array\r\n\taddFilter(field, type, value, params){\r\n\t\tvar changed = false;\r\n\r\n\t\tif(!Array.isArray(field)){\r\n\t\t\tfield = [{field:field, type:type, value:value, params:params}];\r\n\t\t}\r\n\r\n\t\tfield.forEach((filter) => {\r\n\t\t\tfilter = this.findFilter(filter);\r\n\r\n\t\t\tif(filter){\r\n\t\t\t\tthis.filterList.push(filter);\r\n\t\t\t\tchanged = true;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tif(changed){\r\n\t\t\tthis.trackChanges();\r\n\t\t}\r\n\t}\r\n\r\n\tfindFilter(filter){\r\n\t\tvar column;\r\n\r\n\t\tif(Array.isArray(filter)){\r\n\t\t\treturn this.findSubFilters(filter);\r\n\t\t}\r\n\r\n\t\tvar filterFunc = false;\r\n\r\n\t\tif(typeof filter.field == \"function\"){\r\n\t\t\tfilterFunc = function(data){\r\n\t\t\t\treturn filter.field(data, filter.type || {});// pass params to custom filter function\r\n\t\t\t};\r\n\t\t}else{\r\n\r\n\t\t\tif(Filter.filters[filter.type]){\r\n\r\n\t\t\t\tcolumn = this.table.columnManager.getColumnByField(filter.field);\r\n\r\n\t\t\t\tif(column){\r\n\t\t\t\t\tfilterFunc = function(data){\r\n\t\t\t\t\t\treturn Filter.filters[filter.type](filter.value, column.getFieldValue(data), data, filter.params || {});\r\n\t\t\t\t\t};\r\n\t\t\t\t}else{\r\n\t\t\t\t\tfilterFunc = function(data){\r\n\t\t\t\t\t\treturn Filter.filters[filter.type](filter.value, data[filter.field], data, filter.params || {});\r\n\t\t\t\t\t};\r\n\t\t\t\t}\r\n\r\n\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Filter Error - No such filter type found, ignoring: \", filter.type);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfilter.func = filterFunc;\r\n\r\n\t\treturn filter.func ? filter : false;\r\n\t}\r\n\r\n\tfindSubFilters(filters){\r\n\t\tvar output = [];\r\n\r\n\t\tfilters.forEach((filter) => {\r\n\t\t\tfilter = this.findFilter(filter);\r\n\r\n\t\t\tif(filter){\r\n\t\t\t\toutput.push(filter);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn output.length ? output : false;\r\n\t}\r\n\r\n\t//get all filters\r\n\tgetFilters(all, ajax){\r\n\t\tvar output = [];\r\n\r\n\t\tif(all){\r\n\t\t\toutput = this.getHeaderFilters();\r\n\t\t}\r\n\r\n\t\tif(ajax){\r\n\t\t\toutput.forEach(function(item){\r\n\t\t\t\tif(typeof item.type == \"function\"){\r\n\t\t\t\t\titem.type = \"function\";\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\toutput = output.concat(this.filtersToArray(this.filterList, ajax));\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\t//filter to Object\r\n\tfiltersToArray(filterList, ajax){\r\n\t\tvar output = [];\r\n\r\n\t\tfilterList.forEach((filter) => {\r\n\t\t\tvar item;\r\n\r\n\t\t\tif(Array.isArray(filter)){\r\n\t\t\t\toutput.push(this.filtersToArray(filter, ajax));\r\n\t\t\t}else{\r\n\t\t\t\titem = {field:filter.field, type:filter.type, value:filter.value};\r\n\r\n\t\t\t\tif(ajax){\r\n\t\t\t\t\tif(typeof item.type == \"function\"){\r\n\t\t\t\t\t\titem.type = \"function\";\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\toutput.push(item);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\t//get all filters\r\n\tgetHeaderFilters(){\r\n\t\tvar output = [];\r\n\r\n\t\tfor(var key in this.headerFilters){\r\n\t\t\toutput.push({field:key, type:this.headerFilters[key].type, value:this.headerFilters[key].value});\r\n\t\t}\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\t//remove filter from array\r\n\tremoveFilter(field, type, value){\r\n\t\tif(!Array.isArray(field)){\r\n\t\t\tfield = [{field:field, type:type, value:value}];\r\n\t\t}\r\n\r\n\t\tfield.forEach((filter) => {\r\n\t\t\tvar index = -1;\r\n\r\n\t\t\tif(typeof filter.field == \"object\"){\r\n\t\t\t\tindex = this.filterList.findIndex((element) => {\r\n\t\t\t\t\treturn filter === element;\r\n\t\t\t\t});\r\n\t\t\t}else{\r\n\t\t\t\tindex = this.filterList.findIndex((element) => {\r\n\t\t\t\t\treturn filter.field === element.field && filter.type === element.type && filter.value === element.value;\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\tif(index > -1){\r\n\t\t\t\tthis.filterList.splice(index, 1);\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Filter Error - No matching filter type found, ignoring: \", filter.type);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tthis.trackChanges();\r\n\t}\r\n\r\n\t//clear filters\r\n\tclearFilter(all){\r\n\t\tthis.filterList = [];\r\n\r\n\t\tif(all){\r\n\t\t\tthis.clearHeaderFilter();\r\n\t\t}\r\n\r\n\t\tthis.trackChanges();\r\n\t}\r\n\r\n\t//clear header filters\r\n\tclearHeaderFilter(){\r\n\t\tthis.headerFilters = {};\r\n\t\tthis.prevHeaderFilterChangeCheck = \"{}\";\r\n\r\n\t\tthis.headerFilterColumns.forEach((column) => {\r\n\t\t\tif(typeof column.modules.filter.value !== \"undefined\"){\r\n\t\t\t\tdelete column.modules.filter.value;\r\n\t\t\t}\r\n\t\t\tcolumn.modules.filter.prevSuccess = undefined;\r\n\t\t\tthis.reloadHeaderFilter(column);\r\n\t\t});\r\n\r\n\t\tthis.trackChanges();\r\n\t}\r\n\r\n\t//search data and return matching rows\r\n\tsearch (searchType, field, type, value){\r\n\t\tvar activeRows = [],\r\n\t\tfilterList = [];\r\n\r\n\t\tif(!Array.isArray(field)){\r\n\t\t\tfield = [{field:field, type:type, value:value}];\r\n\t\t}\r\n\r\n\t\tfield.forEach((filter) => {\r\n\t\t\tfilter = this.findFilter(filter);\r\n\r\n\t\t\tif(filter){\r\n\t\t\t\tfilterList.push(filter);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tthis.table.rowManager.rows.forEach((row) => {\r\n\t\t\tvar match = true;\r\n\r\n\t\t\tfilterList.forEach((filter) => {\r\n\t\t\t\tif(!this.filterRecurse(filter, row.getData())){\r\n\t\t\t\t\tmatch = false;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tif(match){\r\n\t\t\t\tactiveRows.push(searchType === \"data\" ? row.getData(\"data\") : row.getComponent());\r\n\t\t\t}\r\n\r\n\t\t});\r\n\r\n\t\treturn activeRows;\r\n\t}\r\n\r\n\t//filter row array\r\n\tfilter(rowList, filters){\r\n\t\tvar activeRows = [],\r\n\t\tactiveRowComponents = [];\r\n\r\n\t\tif(this.subscribedExternal(\"dataFiltering\")){\r\n\t\t\tthis.dispatchExternal(\"dataFiltering\", this.getFilters(true));\r\n\t\t}\r\n\r\n\t\tif(this.table.options.filterMode !== \"remote\" && (this.filterList.length || Object.keys(this.headerFilters).length)){\r\n\r\n\t\t\trowList.forEach((row) => {\r\n\t\t\t\tif(this.filterRow(row)){\r\n\t\t\t\t\tactiveRows.push(row);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t}else{\r\n\t\t\tactiveRows = rowList.slice(0);\r\n\t\t}\r\n\r\n\t\tif(this.subscribedExternal(\"dataFiltered\")){\r\n\r\n\t\t\tactiveRows.forEach((row) => {\r\n\t\t\t\tactiveRowComponents.push(row.getComponent());\r\n\t\t\t});\r\n\r\n\t\t\tthis.dispatchExternal(\"dataFiltered\", this.getFilters(true), activeRowComponents);\r\n\t\t}\r\n\r\n\t\treturn activeRows;\r\n\t}\r\n\r\n\t//filter individual row\r\n\tfilterRow(row, filters){\r\n\t\tvar match = true,\r\n\t\tdata = row.getData();\r\n\r\n\t\tthis.filterList.forEach((filter) => {\r\n\t\t\tif(!this.filterRecurse(filter, data)){\r\n\t\t\t\tmatch = false;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\r\n\t\tfor(var field in this.headerFilters){\r\n\t\t\tif(!this.headerFilters[field].func(data)){\r\n\t\t\t\tmatch = false;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn match;\r\n\t}\r\n\r\n\tfilterRecurse(filter, data){\r\n\t\tvar match = false;\r\n\r\n\t\tif(Array.isArray(filter)){\r\n\t\t\tfilter.forEach((subFilter) => {\r\n\t\t\t\tif(this.filterRecurse(subFilter, data)){\r\n\t\t\t\t\tmatch = true;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tmatch = filter.func(data);\r\n\t\t}\r\n\r\n\t\treturn match;\r\n\t}\r\n}\r\n\r\nFilter.moduleName = \"filter\";\r\n\r\n//load defaults\r\nFilter.filters = defaultFilters;\r\n\r\nexport default Filter;","import plaintext from './formatters/plaintext.js';\r\nimport html from './formatters/html.js';\r\nimport textarea from './formatters/textarea.js';\r\nimport money from './formatters/money.js';\r\nimport link from './formatters/link.js';\r\nimport image from './formatters/image.js';\r\nimport tickCross from './formatters/tickCross.js';\r\nimport datetime from './formatters/datetime.js';\r\nimport datetimediff from './formatters/datetimediff.js';\r\nimport lookup from './formatters/lookup.js';\r\nimport star from './formatters/star.js';\r\nimport traffic from './formatters/traffic.js';\r\nimport progress from './formatters/progress.js';\r\nimport color from './formatters/color.js';\r\nimport buttonTick from './formatters/buttonTick.js';\r\nimport buttonCross from './formatters/buttonCross.js';\r\nimport rownum from './formatters/rownum.js';\r\nimport handle from './formatters/handle.js';\r\nimport responsiveCollapse from './formatters/responsiveCollapse.js';\r\nimport rowSelection from './formatters/rowSelection.js';\r\n\r\nexport default {\r\n\tplaintext:plaintext,\r\n\thtml:html,\r\n\ttextarea:textarea,\r\n\tmoney:money,\r\n\tlink:link,\r\n\timage:image,\r\n\ttickCross:tickCross,\r\n\tdatetime:datetime,\r\n\tdatetimediff:datetimediff,\r\n\tlookup:lookup,\r\n\tstar:star,\r\n\ttraffic:traffic,\r\n\tprogress:progress,\r\n\tcolor:color,\r\n\tbuttonTick:buttonTick,\r\n\tbuttonCross:buttonCross,\r\n\trownum:rownum,\r\n\thandle:handle,\r\n\tresponsiveCollapse:responsiveCollapse,\r\n\trowSelection:rowSelection,\r\n};","export default function(cell, formatterParams, onRendered){\r\n\treturn this.emptyToSpace(this.sanitizeHTML(cell.getValue()));\r\n}","export default function(cell, formatterParams, onRendered){\r\n\treturn cell.getValue();\r\n}","export default function(cell, formatterParams, onRendered){\r\n\tcell.getElement().style.whiteSpace = \"pre-wrap\";\r\n\treturn this.emptyToSpace(this.sanitizeHTML(cell.getValue()));\r\n}","export default function(cell, formatterParams, onRendered){\r\n\tvar floatVal = parseFloat(cell.getValue()),\r\n\tsign = \"\",\r\n\tnumber, integer, decimal, rgx;\r\n\r\n\tvar decimalSym = formatterParams.decimal || \".\";\r\n\tvar thousandSym = formatterParams.thousand || \",\";\r\n\tvar negativeSign = formatterParams.negativeSign || \"-\";\r\n\tvar symbol = formatterParams.symbol || \"\";\r\n\tvar after = !!formatterParams.symbolAfter;\r\n\tvar precision = typeof formatterParams.precision !== \"undefined\" ? formatterParams.precision : 2;\r\n\r\n\tif(isNaN(floatVal)){\r\n\t\treturn this.emptyToSpace(this.sanitizeHTML(cell.getValue()));\r\n\t}\r\n\r\n\tif(floatVal < 0){\r\n\t\tfloatVal = Math.abs(floatVal);\r\n\t\tsign = negativeSign;\r\n\t}\r\n\r\n\tnumber = precision !== false ? floatVal.toFixed(precision) : floatVal;\r\n\tnumber = String(number).split(\".\");\r\n\r\n\tinteger = number[0];\r\n\tdecimal = number.length > 1 ? decimalSym + number[1] : \"\";\r\n\r\n\tif (formatterParams.thousand !== false) {\r\n\t\trgx = /(\\d+)(\\d{3})/;\r\n\r\n\t\twhile (rgx.test(integer)){\r\n\t\t\tinteger = integer.replace(rgx, \"$1\" + thousandSym + \"$2\");\r\n\t\t}\r\n\t}\r\n\r\n\treturn after ? sign + integer + decimal + symbol : sign + symbol + integer + decimal;\r\n}","export default function(cell, formatterParams, onRendered){\r\n\tvar value = cell.getValue(),\r\n\turlPrefix = formatterParams.urlPrefix || \"\",\r\n\tdownload = formatterParams.download,\r\n\tlabel = value,\r\n\tel = document.createElement(\"a\"),\r\n\tdata;\r\n\r\n\tfunction labelTraverse(path, data){\r\n\t\tvar item = path.shift(),\r\n\t\tvalue = data[item];\r\n\t\t\r\n\t\tif(path.length && typeof value === \"object\"){\r\n\t\t\treturn labelTraverse(path, value);\r\n\t\t}\r\n\r\n\t\treturn value;\r\n\t}\r\n\r\n\tif(formatterParams.labelField){\r\n\t\tdata = cell.getData();\r\n\t\tlabel = labelTraverse(formatterParams.labelField.split(this.table.options.nestedFieldSeparator), data);\r\n\t}\r\n\r\n\tif(formatterParams.label){\r\n\t\tswitch(typeof formatterParams.label){\r\n\t\t\tcase \"string\":\r\n\t\t\t\tlabel = formatterParams.label;\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase \"function\":\r\n\t\t\t\tlabel = formatterParams.label(cell);\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\tif(label){\r\n\t\tif(formatterParams.urlField){\r\n\t\t\tdata = cell.getData();\r\n\t\t\tvalue = data[formatterParams.urlField];\r\n\t\t}\r\n\r\n\t\tif(formatterParams.url){\r\n\t\t\tswitch(typeof formatterParams.url){\r\n\t\t\t\tcase \"string\":\r\n\t\t\t\t\tvalue = formatterParams.url;\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"function\":\r\n\t\t\t\t\tvalue = formatterParams.url(cell);\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tel.setAttribute(\"href\", urlPrefix + value);\r\n\r\n\t\tif(formatterParams.target){\r\n\t\t\tel.setAttribute(\"target\", formatterParams.target);\r\n\t\t}\r\n\r\n\t\tif(formatterParams.download){\r\n\r\n\t\t\tif(typeof download == \"function\"){\r\n\t\t\t\tdownload = download(cell);\r\n\t\t\t}else{\r\n\t\t\t\tdownload = download === true ? \"\" : download;\r\n\t\t\t}\r\n\r\n\t\t\tel.setAttribute(\"download\", download);\r\n\t\t}\r\n\r\n\t\tel.innerHTML = this.emptyToSpace(this.sanitizeHTML(label));\r\n\r\n\t\treturn el;\r\n\t}else{\r\n\t\treturn \" \";\r\n\t}\r\n}","export default function(cell, formatterParams, onRendered){\r\n\tvar el = document.createElement(\"img\"),\r\n\tsrc = cell.getValue();\r\n\r\n\tif(formatterParams.urlPrefix){\r\n\t\tsrc = formatterParams.urlPrefix + cell.getValue();\r\n\t}\r\n\r\n\tif(formatterParams.urlSuffix){\r\n\t\tsrc = src + formatterParams.urlSuffix;\r\n\t}\r\n\r\n\tel.setAttribute(\"src\", src);\r\n\r\n\tswitch(typeof formatterParams.height){\r\n\t\tcase \"number\":\r\n\t\t\tel.style.height = formatterParams.height + \"px\";\r\n\t\t\tbreak;\r\n\r\n\t\tcase \"string\":\r\n\t\t\tel.style.height = formatterParams.height;\r\n\t\t\tbreak;\r\n\t}\r\n\r\n\tswitch(typeof formatterParams.width){\r\n\t\tcase \"number\":\r\n\t\t\tel.style.width = formatterParams.width + \"px\";\r\n\t\t\tbreak;\r\n\r\n\t\tcase \"string\":\r\n\t\t\tel.style.width = formatterParams.width;\r\n\t\t\tbreak;\r\n\t}\r\n\r\n\tel.addEventListener(\"load\", function(){\r\n\t\tcell.getRow().normalizeHeight();\r\n\t});\r\n\r\n\treturn el;\r\n}","export default function(cell, formatterParams, onRendered){\r\n\tvar value = cell.getValue(),\r\n\telement = cell.getElement(),\r\n\tempty = formatterParams.allowEmpty,\r\n\ttruthy = formatterParams.allowTruthy,\r\n\ttrueValueSet = Object.keys(formatterParams).includes(\"trueValue\"),\r\n\ttick = typeof formatterParams.tickElement !== \"undefined\" ? formatterParams.tickElement : '',\r\n\tcross = typeof formatterParams.crossElement !== \"undefined\" ? formatterParams.crossElement : '';\r\n\r\n\tif((trueValueSet && value === formatterParams.trueValue) || (!trueValueSet && ((truthy && value) || (value === true || value === \"true\" || value === \"True\" || value === 1 || value === \"1\")))){\r\n\t\telement.setAttribute(\"aria-checked\", true);\r\n\t\treturn tick || \"\";\r\n\t}else{\r\n\t\tif(empty && (value === \"null\" || value === \"\" || value === null || typeof value === \"undefined\")){\r\n\t\t\telement.setAttribute(\"aria-checked\", \"mixed\");\r\n\t\t\treturn \"\";\r\n\t\t}else{\r\n\t\t\telement.setAttribute(\"aria-checked\", false);\r\n\t\t\treturn cross || \"\";\r\n\t\t}\r\n\t}\r\n}","export default function(cell, formatterParams, onRendered){\r\n\tvar DT = window.DateTime || luxon.DateTime;\r\n\tvar inputFormat = formatterParams.inputFormat || \"yyyy-MM-dd HH:mm:ss\";\r\n\tvar\toutputFormat = formatterParams.outputFormat || \"dd/MM/yyyy HH:mm:ss\";\r\n\tvar\tinvalid = typeof formatterParams.invalidPlaceholder !== \"undefined\" ? formatterParams.invalidPlaceholder : \"\";\r\n\tvar value = cell.getValue();\r\n\r\n\tif(typeof DT != \"undefined\"){\r\n\t\tvar newDatetime;\r\n\r\n\t\tif(DT.isDateTime(value)){\r\n\t\t\tnewDatetime = value;\r\n\t\t}else if(inputFormat === \"iso\"){\r\n\t\t\tnewDatetime = DT.fromISO(String(value));\r\n\t\t}else{\r\n\t\t\tnewDatetime = DT.fromFormat(String(value), inputFormat);\r\n\t\t}\r\n\r\n\t\tif(newDatetime.isValid){\r\n\t\t\tif(formatterParams.timezone){\r\n\t\t\t\tnewDatetime = newDatetime.setZone(formatterParams.timezone);\r\n\t\t\t}\r\n\r\n\t\t\treturn newDatetime.toFormat(outputFormat);\r\n\t\t}else{\r\n\t\t\tif(invalid === true || !value){\r\n\t\t\t\treturn value;\r\n\t\t\t}else if(typeof invalid === \"function\"){\r\n\t\t\t\treturn invalid(value);\r\n\t\t\t}else{\r\n\t\t\t\treturn invalid;\r\n\t\t\t}\r\n\t\t}\r\n\t}else{\r\n\t\tconsole.error(\"Format Error - 'datetime' formatter is dependant on luxon.js\");\r\n\t}\r\n}","export default function (cell, formatterParams, onRendered) {\r\n\tvar DT = window.DateTime || luxon.DateTime;\r\n\tvar inputFormat = formatterParams.inputFormat || \"yyyy-MM-dd HH:mm:ss\";\r\n\tvar invalid = typeof formatterParams.invalidPlaceholder !== \"undefined\" ? formatterParams.invalidPlaceholder : \"\";\r\n\tvar suffix = typeof formatterParams.suffix !== \"undefined\" ? formatterParams.suffix : false;\r\n\tvar unit = typeof formatterParams.unit !== \"undefined\" ? formatterParams.unit : \"days\";\r\n\tvar humanize = typeof formatterParams.humanize !== \"undefined\" ? formatterParams.humanize : false;\r\n\tvar date = typeof formatterParams.date !== \"undefined\" ? formatterParams.date : DT.now();\r\n\tvar value = cell.getValue();\r\n\r\n\tif(typeof DT != \"undefined\"){\r\n\t\tvar newDatetime;\r\n\r\n\t\tif(DT.isDateTime(value)){\r\n\t\t\tnewDatetime = value;\r\n\t\t}else if(inputFormat === \"iso\"){\r\n\t\t\tnewDatetime = DT.fromISO(String(value));\r\n\t\t}else{\r\n\t\t\tnewDatetime = DT.fromFormat(String(value), inputFormat);\r\n\t\t}\r\n\r\n\t\tif (newDatetime.isValid){\r\n\t\t\tif(humanize){\r\n\t\t\t\treturn newDatetime.diff(date, unit).toHuman() + (suffix ? \" \" + suffix : \"\");\r\n\t\t\t}else{\r\n\t\t\t\treturn parseInt(newDatetime.diff(date, unit)[unit]) + (suffix ? \" \" + suffix : \"\");\r\n\t\t\t}\r\n\t\t} else {\r\n\r\n\t\t\tif (invalid === true) {\r\n\t\t\t\treturn value;\r\n\t\t\t} else if (typeof invalid === \"function\") {\r\n\t\t\t\treturn invalid(value);\r\n\t\t\t} else {\r\n\t\t\t\treturn invalid;\r\n\t\t\t}\r\n\t\t}\r\n\t}else{\r\n\t\tconsole.error(\"Format Error - 'datetimediff' formatter is dependant on luxon.js\");\r\n\t}\r\n}","export default function (cell, formatterParams, onRendered) {\r\n\tvar value = cell.getValue();\r\n\r\n\tif (typeof formatterParams[value] === \"undefined\") {\r\n\t\tconsole.warn('Missing display value for ' + value);\r\n\t\treturn value;\r\n\t}\r\n\r\n\treturn formatterParams[value];\r\n}","export default function(cell, formatterParams, onRendered){\r\n\tvar value = cell.getValue(),\r\n\telement = cell.getElement(),\r\n\tmaxStars = formatterParams && formatterParams.stars ? formatterParams.stars : 5,\r\n\tstars = document.createElement(\"span\"),\r\n\tstar = document.createElementNS('http://www.w3.org/2000/svg', \"svg\"),\r\n\tstarActive = '',\r\n\tstarInactive = '';\r\n\r\n\t//style stars holder\r\n\tstars.style.verticalAlign = \"middle\";\r\n\r\n\t//style star\r\n\tstar.setAttribute(\"width\", \"14\");\r\n\tstar.setAttribute(\"height\", \"14\");\r\n\tstar.setAttribute(\"viewBox\", \"0 0 512 512\");\r\n\tstar.setAttribute(\"xml:space\", \"preserve\");\r\n\tstar.style.padding = \"0 1px\";\r\n\r\n\tvalue = value && !isNaN(value) ? parseInt(value) : 0;\r\n\r\n\tvalue = Math.max(0, Math.min(value, maxStars));\r\n\r\n\tfor(var i=1;i<= maxStars;i++){\r\n\t\tvar nextStar = star.cloneNode(true);\r\n\t\tnextStar.innerHTML = i <= value ? starActive : starInactive;\r\n\r\n\t\tstars.appendChild(nextStar);\r\n\t}\r\n\r\n\telement.style.whiteSpace = \"nowrap\";\r\n\telement.style.overflow = \"hidden\";\r\n\telement.style.textOverflow = \"ellipsis\";\r\n\r\n\telement.setAttribute(\"aria-label\", value);\r\n\r\n\treturn stars;\r\n}","export default function(cell, formatterParams, onRendered){\r\n\tvar value = this.sanitizeHTML(cell.getValue()) || 0,\r\n\tel = document.createElement(\"span\"),\r\n\tmax = formatterParams && formatterParams.max ? formatterParams.max : 100,\r\n\tmin = formatterParams && formatterParams.min ? formatterParams.min : 0,\r\n\tcolors = formatterParams && typeof formatterParams.color !== \"undefined\" ? formatterParams.color : [\"red\", \"orange\", \"green\"],\r\n\tcolor = \"#666666\",\r\n\tpercent, percentValue;\r\n\r\n\tif(isNaN(value) || typeof cell.getValue() === \"undefined\"){\r\n\t\treturn;\r\n\t}\r\n\r\n\tel.classList.add(\"tabulator-traffic-light\");\r\n\r\n\t//make sure value is in range\r\n\tpercentValue = parseFloat(value) <= max ? parseFloat(value) : max;\r\n\tpercentValue = parseFloat(percentValue) >= min ? parseFloat(percentValue) : min;\r\n\r\n\t//workout percentage\r\n\tpercent = (max - min) / 100;\r\n\tpercentValue = Math.round((percentValue - min) / percent);\r\n\r\n\t//set color\r\n\tswitch(typeof colors){\r\n\t\tcase \"string\":\r\n\t\t\tcolor = colors;\r\n\t\t\tbreak;\r\n\t\tcase \"function\":\r\n\t\t\tcolor = colors(value);\r\n\t\t\tbreak;\r\n\t\tcase \"object\":\r\n\t\t\tif(Array.isArray(colors)){\r\n\t\t\t\tvar unit = 100 / colors.length;\r\n\t\t\t\tvar index = Math.floor(percentValue / unit);\r\n\r\n\t\t\t\tindex = Math.min(index, colors.length - 1);\r\n\t\t\t\tindex = Math.max(index, 0);\r\n\t\t\t\tcolor = colors[index];\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t}\r\n\r\n\tel.style.backgroundColor = color;\r\n\r\n\treturn el;\r\n}","import CellComponent from '../../../../core/cell/CellComponent.js';\r\n\r\nexport default function(cell, formatterParams = {}, onRendered){ //progress bar\r\n\tvar value = this.sanitizeHTML(cell.getValue()) || 0,\r\n\telement = cell.getElement(),\r\n\tmax = formatterParams.max ? formatterParams.max : 100,\r\n\tmin = formatterParams.min ? formatterParams.min : 0,\r\n\tlegendAlign = formatterParams.legendAlign ? formatterParams.legendAlign : \"center\",\r\n\tpercent, percentValue, color, legend, legendColor;\r\n\r\n\t//make sure value is in range\r\n\tpercentValue = parseFloat(value) <= max ? parseFloat(value) : max;\r\n\tpercentValue = parseFloat(percentValue) >= min ? parseFloat(percentValue) : min;\r\n\r\n\t//workout percentage\r\n\tpercent = (max - min) / 100;\r\n\tpercentValue = Math.round((percentValue - min) / percent);\r\n\r\n\t//set bar color\r\n\tswitch(typeof formatterParams.color){\r\n\t\tcase \"string\":\r\n\t\t\tcolor = formatterParams.color;\r\n\t\t\tbreak;\r\n\t\tcase \"function\":\r\n\t\t\tcolor = formatterParams.color(value);\r\n\t\t\tbreak;\r\n\t\tcase \"object\":\r\n\t\t\tif(Array.isArray(formatterParams.color)){\r\n\t\t\t\tlet unit = 100 / formatterParams.color.length;\r\n\t\t\t\tlet index = Math.floor(percentValue / unit);\r\n\r\n\t\t\t\tindex = Math.min(index, formatterParams.color.length - 1);\r\n\t\t\t\tindex = Math.max(index, 0);\r\n\t\t\t\tcolor = formatterParams.color[index];\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\tdefault:\r\n\t\t\tcolor = \"#2DC214\";\r\n\t}\r\n\r\n\t//generate legend\r\n\tswitch(typeof formatterParams.legend){\r\n\t\tcase \"string\":\r\n\t\t\tlegend = formatterParams.legend;\r\n\t\t\tbreak;\r\n\t\tcase \"function\":\r\n\t\t\tlegend = formatterParams.legend(value);\r\n\t\t\tbreak;\r\n\t\tcase \"boolean\":\r\n\t\t\tlegend = value;\r\n\t\t\tbreak;\r\n\t\tdefault:\r\n\t\t\tlegend = false;\r\n\t}\r\n\r\n\t//set legend color\r\n\tswitch(typeof formatterParams.legendColor){\r\n\t\tcase \"string\":\r\n\t\t\tlegendColor = formatterParams.legendColor;\r\n\t\t\tbreak;\r\n\t\tcase \"function\":\r\n\t\t\tlegendColor = formatterParams.legendColor(value);\r\n\t\t\tbreak;\r\n\t\tcase \"object\":\r\n\t\t\tif(Array.isArray(formatterParams.legendColor)){\r\n\t\t\t\tlet unit = 100 / formatterParams.legendColor.length;\r\n\t\t\t\tlet index = Math.floor(percentValue / unit);\r\n\r\n\t\t\t\tindex = Math.min(index, formatterParams.legendColor.length - 1);\r\n\t\t\t\tindex = Math.max(index, 0);\r\n\t\t\t\tlegendColor = formatterParams.legendColor[index];\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\t\tdefault:\r\n\t\t\tlegendColor = \"#000\";\r\n\t}\r\n\r\n\telement.style.minWidth = \"30px\";\r\n\telement.style.position = \"relative\";\r\n\r\n\telement.setAttribute(\"aria-label\", percentValue);\r\n\r\n\tvar barEl = document.createElement(\"div\");\r\n\tbarEl.style.display = \"inline-block\";\r\n\tbarEl.style.width = percentValue + \"%\";\r\n\tbarEl.style.backgroundColor = color;\r\n\tbarEl.style.height = \"100%\";\r\n\r\n\tbarEl.setAttribute('data-max', max);\r\n\tbarEl.setAttribute('data-min', min);\r\n\r\n\tvar barContainer = document.createElement(\"div\");\r\n\tbarContainer.style.position = \"relative\";\r\n\tbarContainer.style.width = \"100%\";\r\n\tbarContainer.style.height = \"100%\";\r\n\r\n\tif(legend){\r\n\t\tvar legendEl = document.createElement(\"div\");\r\n\t\tlegendEl.style.position = \"absolute\";\r\n\t\tlegendEl.style.top = 0;\r\n\t\tlegendEl.style.left = 0;\r\n\t\tlegendEl.style.textAlign = legendAlign;\r\n\t\tlegendEl.style.width = \"100%\";\r\n\t\tlegendEl.style.color = legendColor;\r\n\t\tlegendEl.innerHTML = legend;\r\n\t}\r\n\r\n\tonRendered(function(){\r\n\r\n\t\t//handle custom element needed if formatter is to be included in printed/downloaded output\r\n\t\tif(!(cell instanceof CellComponent)){\r\n\t\t\tvar holderEl = document.createElement(\"div\");\r\n\t\t\tholderEl.style.position = \"absolute\";\r\n\t\t\tholderEl.style.top = \"4px\";\r\n\t\t\tholderEl.style.bottom = \"4px\";\r\n\t\t\tholderEl.style.left = \"4px\";\r\n\t\t\tholderEl.style.right = \"4px\";\r\n\r\n\t\t\telement.appendChild(holderEl);\r\n\r\n\t\t\telement = holderEl;\r\n\t\t}\r\n\r\n\t\telement.appendChild(barContainer);\r\n\t\tbarContainer.appendChild(barEl);\r\n\r\n\t\tif(legend){\r\n\t\t\tbarContainer.appendChild(legendEl);\r\n\t\t}\r\n\t});\r\n\r\n\treturn \"\";\r\n}","export default function(cell, formatterParams, onRendered){\r\n\tcell.getElement().style.backgroundColor = this.sanitizeHTML(cell.getValue());\r\n\treturn \"\";\r\n}","export default function(cell, formatterParams, onRendered){\r\n\treturn '';\r\n}","export default function(cell, formatterParams, onRendered){\r\n\treturn '';\r\n}","export default function(cell, formatterParams, onRendered){\r\n\tvar content = document.createElement(\"span\");\r\n\tvar row = cell.getRow();\r\n\r\n\trow.watchPosition((position) => {\r\n\t\tcontent.innerText = position;\r\n\t});\r\n\t\r\n\treturn content;\r\n}","export default function(cell, formatterParams, onRendered){\r\n\tcell.getElement().classList.add(\"tabulator-row-handle\");\r\n\treturn \"
\";\r\n}","export default function(cell, formatterParams, onRendered){\r\n\tvar el = document.createElement(\"div\"),\r\n\tconfig = cell.getRow()._row.modules.responsiveLayout;\r\n\r\n\tel.classList.add(\"tabulator-responsive-collapse-toggle\");\r\n\tel.innerHTML = \"+-\";\r\n\r\n\tcell.getElement().classList.add(\"tabulator-row-handle\");\r\n\r\n\tfunction toggleList(isOpen){\r\n\t\tvar collapseEl = config.element;\r\n\r\n\t\tconfig.open = isOpen;\r\n\r\n\t\tif(collapseEl){\r\n\r\n\t\t\tif(config.open){\r\n\t\t\t\tel.classList.add(\"open\");\r\n\t\t\t\tcollapseEl.style.display = '';\r\n\t\t\t}else{\r\n\t\t\t\tel.classList.remove(\"open\");\r\n\t\t\t\tcollapseEl.style.display = 'none';\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tel.addEventListener(\"click\", function(e){\r\n\t\te.stopImmediatePropagation();\r\n\t\ttoggleList(!config.open);\r\n\t\tcell.getTable().rowManager.adjustTableSize();\r\n\t});\r\n\r\n\ttoggleList(config.open);\r\n\r\n\treturn el;\r\n}","import RowComponent from '../../../../core/row/RowComponent.js';\r\n\r\nexport default function(cell, formatterParams, onRendered){\r\n\tvar checkbox = document.createElement(\"input\");\r\n\tvar blocked = false;\r\n\r\n\tcheckbox.type = 'checkbox';\r\n\r\n\tcheckbox.setAttribute(\"aria-label\", \"Select Row\");\r\n\t\r\n\tif(this.table.modExists(\"selectRow\", true)){\r\n\r\n\t\tcheckbox.addEventListener(\"click\", (e) => {\r\n\t\t\te.stopPropagation();\r\n\t\t});\r\n\r\n\t\tif(typeof cell.getRow == 'function'){\r\n\t\t\tvar row = cell.getRow();\r\n\r\n\t\t\tif(row instanceof RowComponent){\r\n\r\n\t\t\t\tcheckbox.addEventListener(\"change\", (e) => {\r\n\t\t\t\t\tif(this.table.options.selectableRangeMode === \"click\"){\r\n\t\t\t\t\t\tif(!blocked){\r\n\t\t\t\t\t\t\trow.toggleSelect();\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\tblocked = false;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\trow.toggleSelect();\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\tif(this.table.options.selectableRangeMode === \"click\"){\r\n\t\t\t\t\tcheckbox.addEventListener(\"click\", (e) => {\r\n\t\t\t\t\t\tblocked = true;\r\n\t\t\t\t\t\tthis.table.modules.selectRow.handleComplexRowClick(row._row, e);\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\r\n\t\t\t\tcheckbox.checked = row.isSelected && row.isSelected();\r\n\t\t\t\tthis.table.modules.selectRow.registerRowSelectCheckbox(row, checkbox);\r\n\t\t\t}else{\r\n\t\t\t\tcheckbox = \"\";\r\n\t\t\t}\r\n\t\t}else {\r\n\t\t\tcheckbox.addEventListener(\"change\", (e) => {\r\n\t\t\t\tif(this.table.modules.selectRow.selectedRows.length){\r\n\t\t\t\t\tthis.table.deselectRow();\r\n\t\t\t\t}else {\r\n\t\t\t\t\tthis.table.selectRow(formatterParams.rowRange);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tthis.table.modules.selectRow.registerHeaderSelectCheckbox(checkbox);\r\n\t\t}\r\n\t}\r\n\r\n\treturn checkbox;\r\n}","import Module from '../../core/Module.js';\r\n\r\nimport defaultFormatters from './defaults/formatters.js';\r\n\r\nclass Format extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.registerColumnOption(\"formatter\");\r\n\t\tthis.registerColumnOption(\"formatterParams\");\r\n\r\n\t\tthis.registerColumnOption(\"formatterPrint\");\r\n\t\tthis.registerColumnOption(\"formatterPrintParams\");\r\n\t\tthis.registerColumnOption(\"formatterClipboard\");\r\n\t\tthis.registerColumnOption(\"formatterClipboardParams\");\r\n\t\tthis.registerColumnOption(\"formatterHtmlOutput\");\r\n\t\tthis.registerColumnOption(\"formatterHtmlOutputParams\");\r\n\t\tthis.registerColumnOption(\"titleFormatter\");\r\n\t\tthis.registerColumnOption(\"titleFormatterParams\");\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tthis.subscribe(\"cell-format\", this.formatValue.bind(this));\r\n\t\tthis.subscribe(\"cell-rendered\", this.cellRendered.bind(this));\r\n\t\tthis.subscribe(\"column-layout\", this.initializeColumn.bind(this));\r\n\t\tthis.subscribe(\"column-format\", this.formatHeader.bind(this));\r\n\t}\r\n\r\n\t//initialize column formatter\r\n\tinitializeColumn(column){\r\n\t\tcolumn.modules.format = this.lookupFormatter(column, \"\");\r\n\r\n\t\tif(typeof column.definition.formatterPrint !== \"undefined\"){\r\n\t\t\tcolumn.modules.format.print = this.lookupFormatter(column, \"Print\");\r\n\t\t}\r\n\r\n\t\tif(typeof column.definition.formatterClipboard !== \"undefined\"){\r\n\t\t\tcolumn.modules.format.clipboard = this.lookupFormatter(column, \"Clipboard\");\r\n\t\t}\r\n\r\n\t\tif(typeof column.definition.formatterHtmlOutput !== \"undefined\"){\r\n\t\t\tcolumn.modules.format.htmlOutput = this.lookupFormatter(column, \"HtmlOutput\");\r\n\t\t}\r\n\t}\r\n\r\n\tlookupFormatter(column, type){\r\n\t\tvar config = {params:column.definition[\"formatter\" + type + \"Params\"] || {}},\r\n\t\tformatter = column.definition[\"formatter\" + type];\r\n\r\n\t\t//set column formatter\r\n\t\tswitch(typeof formatter){\r\n\t\t\tcase \"string\":\r\n\t\t\t\tif(Format.formatters[formatter]){\r\n\t\t\t\t\tconfig.formatter = Format.formatters[formatter];\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.warn(\"Formatter Error - No such formatter found: \", formatter);\r\n\t\t\t\t\tconfig.formatter = Format.formatters.plaintext;\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase \"function\":\r\n\t\t\t\tconfig.formatter = formatter;\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tdefault:\r\n\t\t\t\tconfig.formatter = Format.formatters.plaintext;\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\treturn config;\r\n\t}\r\n\r\n\tcellRendered(cell){\r\n\t\tif(cell.modules.format && cell.modules.format.renderedCallback && !cell.modules.format.rendered){\r\n\t\t\tcell.modules.format.renderedCallback();\r\n\t\t\tcell.modules.format.rendered = true;\r\n\t\t}\r\n\t}\r\n\r\n\t//return a formatted value for a column header\r\n\tformatHeader(column, title, el){\r\n\t\tvar formatter, params, onRendered, mockCell;\r\n\r\n\t\tif(column.definition.titleFormatter){\r\n\t\t\tformatter = this.getFormatter(column.definition.titleFormatter);\r\n\r\n\t\t\tonRendered = (callback) => {\r\n\t\t\t\tcolumn.titleFormatterRendered = callback;\r\n\t\t\t};\r\n\r\n\t\t\tmockCell = {\r\n\t\t\t\tgetValue:function(){\r\n\t\t\t\t\treturn title;\r\n\t\t\t\t},\r\n\t\t\t\tgetElement:function(){\r\n\t\t\t\t\treturn el;\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\tparams = column.definition.titleFormatterParams || {};\r\n\r\n\t\t\tparams = typeof params === \"function\" ? params() : params;\r\n\r\n\t\t\treturn formatter.call(this, mockCell, params, onRendered);\r\n\t\t}else{\r\n\t\t\treturn title;\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t//return a formatted value for a cell\r\n\tformatValue(cell){\r\n\t\tvar component = cell.getComponent(),\r\n\t\tparams = typeof cell.column.modules.format.params === \"function\" ? cell.column.modules.format.params(component) : cell.column.modules.format.params;\r\n\r\n\t\tfunction onRendered(callback){\r\n\t\t\tif(!cell.modules.format){\r\n\t\t\t\tcell.modules.format = {};\r\n\t\t\t}\r\n\r\n\t\t\tcell.modules.format.renderedCallback = callback;\r\n\t\t\tcell.modules.format.rendered = false;\r\n\t\t}\r\n\r\n\t\treturn cell.column.modules.format.formatter.call(this, component, params, onRendered);\r\n\t}\r\n\r\n\tformatExportValue(cell, type){\r\n\t\tvar formatter = cell.column.modules.format[type],\r\n\t\tparams;\r\n\r\n\t\tif(formatter){\r\n\t\t\tparams = typeof formatter.params === \"function\" ? formatter.params(cell.getComponent()) : formatter.params;\r\n\r\n\t\t\tfunction onRendered(callback){\r\n\t\t\t\tif(!cell.modules.format){\r\n\t\t\t\t\tcell.modules.format = {};\r\n\t\t\t\t}\r\n\r\n\t\t\t\tcell.modules.format.renderedCallback = callback;\r\n\t\t\t\tcell.modules.format.rendered = false;\r\n\t\t\t}\r\n\r\n\t\t\treturn formatter.formatter.call(this, cell.getComponent(), params, onRendered);\r\n\r\n\t\t}else{\r\n\t\t\treturn this.formatValue(cell);\r\n\t\t}\r\n\t}\r\n\r\n\tsanitizeHTML(value){\r\n\t\tif(value){\r\n\t\t\tvar entityMap = {\r\n\t\t\t\t'&': '&',\r\n\t\t\t\t'<': '<',\r\n\t\t\t\t'>': '>',\r\n\t\t\t\t'\"': '"',\r\n\t\t\t\t\"'\": ''',\r\n\t\t\t\t'/': '/',\r\n\t\t\t\t'`': '`',\r\n\t\t\t\t'=': '='\r\n\t\t\t};\r\n\r\n\t\t\treturn String(value).replace(/[&<>\"'`=/]/g, function (s) {\r\n\t\t\t\treturn entityMap[s];\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\treturn value;\r\n\t\t}\r\n\t}\r\n\r\n\temptyToSpace(value){\r\n\t\treturn value === null || typeof value === \"undefined\" || value === \"\" ? \" \" : value;\r\n\t}\r\n\r\n\t//get formatter for cell\r\n\tgetFormatter(formatter){\r\n\t\tswitch(typeof formatter){\r\n\t\t\tcase \"string\":\r\n\t\t\t\tif(Format.formatters[formatter]){\r\n\t\t\t\t\tformatter = Format.formatters[formatter];\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.warn(\"Formatter Error - No such formatter found: \", formatter);\r\n\t\t\t\t\tformatter = Format.formatters.plaintext;\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase \"function\":\r\n\t\t\t\t//Custom formatter Function, do nothing\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tdefault:\r\n\t\t\t\tformatter = Format.formatters.plaintext;\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\treturn formatter;\r\n\t}\r\n}\r\n\r\nFormat.moduleName = \"format\";\r\n\r\n//load defaults\r\nFormat.formatters = defaultFormatters;\r\n\r\nexport default Format;","import Module from '../../core/Module.js';\r\n\r\nclass FrozenColumns extends Module{\r\n\t\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\t\t\r\n\t\tthis.leftColumns = [];\r\n\t\tthis.rightColumns = [];\r\n\t\tthis.leftMargin = 0;\r\n\t\tthis.rightMargin = 0;\r\n\t\tthis.rightPadding = 0;\r\n\t\tthis.initializationMode = \"left\";\r\n\t\tthis.active = false;\r\n\t\tthis.blocked = true;\r\n\t\t\r\n\t\tthis.registerColumnOption(\"frozen\");\r\n\t}\r\n\t\r\n\t//reset initial state\r\n\treset(){\r\n\t\tthis.initializationMode = \"left\";\r\n\t\tthis.leftColumns = [];\r\n\t\tthis.rightColumns = [];\r\n\t\tthis.leftMargin = 0;\r\n\t\tthis.rightMargin = 0;\r\n\t\tthis.rightMargin = 0;\r\n\t\tthis.active = false;\r\n\t\t\r\n\t\tthis.table.columnManager.headersElement.style.marginLeft = 0;\r\n\t\tthis.table.columnManager.element.style.paddingRight = 0;\r\n\t}\r\n\t\r\n\tinitialize(){\r\n\t\tthis.subscribe(\"cell-layout\", this.layoutCell.bind(this));\r\n\t\tthis.subscribe(\"column-init\", this.initializeColumn.bind(this));\r\n\t\tthis.subscribe(\"column-width\", this.layout.bind(this));\r\n\t\tthis.subscribe(\"row-layout-after\", this.layoutRow.bind(this));\r\n\t\tthis.subscribe(\"table-layout\", this.layout.bind(this));\r\n\t\tthis.subscribe(\"scroll-horizontal\", this.scrollHorizontal.bind(this));\r\n\t\tthis.subscribe(\"scroll-horizontal\", this.scrollHorizontal.bind(this));\r\n\t\tthis.subscribe(\"columns-loading\", this.reset.bind(this));\r\n\t\t\r\n\t\tthis.subscribe(\"column-add\", this.reinitializeColumns.bind(this));\r\n\t\tthis.subscribe(\"column-delete\", this.reinitializeColumns.bind(this));\r\n\t\t\r\n\t\tthis.subscribe(\"table-redraw\", this.layout.bind(this));\r\n\t\tthis.subscribe(\"layout-refreshing\", this.blockLayout.bind(this));\r\n\t\tthis.subscribe(\"layout-refreshed\", this.unblockLayout.bind(this));\r\n\t}\r\n\t\r\n\tblockLayout(){\r\n\t\tthis.blocked = true;\r\n\t}\r\n\t\r\n\tunblockLayout(){\r\n\t\tthis.blocked = false;\r\n\t}\r\n\t\r\n\tlayoutCell(cell){\r\n\t\tthis.layoutElement(cell.element, cell.column);\r\n\t}\r\n\t\r\n\treinitializeColumns(){\r\n\t\tthis.reset();\r\n\t\t\r\n\t\tthis.table.columnManager.columnsByIndex.forEach((column) => {\r\n\t\t\tthis.initializeColumn(column);\r\n\t\t});\r\n\t}\r\n\t\r\n\t//initialize specific column\r\n\tinitializeColumn(column){\r\n\t\tvar config = {margin:0, edge:false};\r\n\t\t\r\n\t\tif(!column.isGroup){\r\n\t\t\t\r\n\t\t\tif(this.frozenCheck(column)){\r\n\t\t\t\t\r\n\t\t\t\tconfig.position = this.initializationMode;\r\n\t\t\t\t\r\n\t\t\t\tif(this.initializationMode == \"left\"){\r\n\t\t\t\t\tthis.leftColumns.push(column);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tthis.rightColumns.unshift(column);\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\tthis.active = true;\r\n\t\t\t\t\r\n\t\t\t\tcolumn.modules.frozen = config;\r\n\t\t\t}else{\r\n\t\t\t\tthis.initializationMode = \"right\";\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\tfrozenCheck(column){\r\n\t\tif(column.parent.isGroup && column.definition.frozen){\r\n\t\t\tconsole.warn(\"Frozen Column Error - Parent column group must be frozen, not individual columns or sub column groups\");\r\n\t\t}\r\n\t\t\r\n\t\tif(column.parent.isGroup){\r\n\t\t\treturn this.frozenCheck(column.parent);\r\n\t\t}else{\r\n\t\t\treturn column.definition.frozen;\r\n\t\t}\r\n\t}\r\n\t\r\n\t//quick layout to smooth horizontal scrolling\r\n\tscrollHorizontal(){\t\r\n\t\tif(this.active){\t\t\r\n\t\t\tthis.calcMargins(true);\r\n\t\t\t\r\n\t\t\tthis.layoutColumnPosition();\r\n\t\t\t\r\n\t\t\tthis.layoutCalcRows();\r\n\t\t\t\r\n\t\t\tthis.reinitializeRows();\r\n\t\t}\r\n\t}\r\n\t\r\n\t//calculate margins for rows\r\n\tcalcMargins(scroll){\r\n\t\t\r\n\t\tif(!scroll){\r\n\t\t\tthis.leftMargin = this._calcSpace(this.leftColumns, this.leftColumns.length) + \"px\";\t\t\t\r\n\t\t\tthis.rightMargin = this._calcSpace(this.rightColumns, this.rightColumns.length) + \"px\";\t\r\n\t\t\tthis.table.rowManager.tableElement.style.marginRight = this.rightMargin;\r\n\t\t}\r\n\t\t\r\n\t\t//calculate right frozen columns\r\n\t\tthis.rightPadding = this.table.rowManager.element.clientWidth + this.table.columnManager.scrollLeft;\r\n\t}\r\n\t\r\n\t//layout calculation rows\r\n\tlayoutCalcRows(){\r\n\t\tif(this.table.modExists(\"columnCalcs\")){\r\n\t\t\tif(this.table.modules.columnCalcs.topInitialized && this.table.modules.columnCalcs.topRow){\r\n\t\t\t\tthis.layoutRow(this.table.modules.columnCalcs.topRow);\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif(this.table.modules.columnCalcs.botInitialized && this.table.modules.columnCalcs.botRow){\r\n\t\t\t\tthis.layoutRow(this.table.modules.columnCalcs.botRow);\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif(this.table.modExists(\"groupRows\")){\r\n\t\t\t\tthis.layoutGroupCalcs(this.table.modules.groupRows.getGroups());\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\tlayoutGroupCalcs(groups){\r\n\t\tgroups.forEach((group) => {\r\n\t\t\tif(group.calcs.top){\r\n\t\t\t\tthis.layoutRow(group.calcs.top);\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif(group.calcs.bottom){\r\n\t\t\t\tthis.layoutRow(group.calcs.bottom);\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif(group.groupList && group.groupList.length){\r\n\t\t\t\tthis.layoutGroupCalcs(group.groupList);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\t\r\n\t//calculate column positions and layout headers\r\n\tlayoutColumnPosition(allCells){\r\n\t\tvar leftParents = [];\r\n\t\t\r\n\t\tvar leftMargin = 0;\r\n\t\tvar rightMargin = 0;\r\n\t\t\r\n\t\tthis.table.columnManager.headersElement.style.marginLeft = this.leftMargin;\r\n\t\tthis.table.columnManager.element.style.paddingRight = this.rightMargin;\r\n\t\t\r\n\t\tthis.leftColumns.forEach((column, i) => {\t\r\n\t\t\tcolumn.modules.frozen.marginValue = leftMargin + this.table.columnManager.scrollLeft;\r\n\t\t\tcolumn.modules.frozen.margin = column.modules.frozen.marginValue + \"px\";\r\n\t\t\t\r\n\t\t\tif(column.visible){\r\n\t\t\t\tleftMargin += column.getWidth();\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif(i == this.leftColumns.length - 1){\r\n\t\t\t\tcolumn.modules.frozen.edge = true;\r\n\t\t\t}else{\r\n\t\t\t\tcolumn.modules.frozen.edge = false;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif(column.parent.isGroup){\r\n\t\t\t\tvar parentEl = this.getColGroupParentElement(column);\r\n\t\t\t\tif(!leftParents.includes(parentEl)){\r\n\t\t\t\t\tthis.layoutElement(parentEl, column);\r\n\t\t\t\t\tleftParents.push(parentEl);\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\tif(column.modules.frozen.edge){\r\n\t\t\t\t\tparentEl.classList.add(\"tabulator-frozen-\" + column.modules.frozen.position);\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tthis.layoutElement(column.getElement(), column);\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif(allCells){\r\n\t\t\t\tcolumn.cells.forEach((cell) => {\r\n\t\t\t\t\tthis.layoutElement(cell.getElement(true), column);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t});\r\n\t\t\r\n\t\tthis.rightColumns.forEach((column, i) => {\r\n\t\t\t\r\n\t\t\tif(column.visible){\r\n\t\t\t\trightMargin += column.getWidth();\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tcolumn.modules.frozen.marginValue = this.rightPadding - rightMargin;\r\n\t\t\tcolumn.modules.frozen.margin = column.modules.frozen.marginValue + \"px\";\r\n\t\t\t\r\n\t\t\tif(i == this.rightColumns.length - 1){\r\n\t\t\t\tcolumn.modules.frozen.edge = true;\r\n\t\t\t}else{\r\n\t\t\t\tcolumn.modules.frozen.edge = false;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\t\r\n\t\t\tif(column.parent.isGroup){\r\n\t\t\t\tthis.layoutElement(this.getColGroupParentElement(column), column);\r\n\t\t\t}else{\r\n\t\t\t\tthis.layoutElement(column.getElement(), column);\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif(allCells){\r\n\t\t\t\tcolumn.cells.forEach((cell) => {\r\n\t\t\t\t\tthis.layoutElement(cell.getElement(true), column);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\t\r\n\tgetColGroupParentElement(column){\r\n\t\treturn column.parent.isGroup ? this.getColGroupParentElement(column.parent) : column.getElement();\r\n\t}\r\n\t\r\n\t//layout columns appropriately\r\n\tlayout(){\t\r\n\t\tif(this.active && !this.blocked){\r\n\t\t\t//calculate row padding\r\n\t\t\tthis.calcMargins();\r\n\t\t\t\r\n\t\t\t//calculate left columns\r\n\t\t\tthis.layoutColumnPosition();\r\n\r\n\t\t\tthis.reinitializeRows();\r\n\t\t\t\r\n\t\t\tthis.layoutCalcRows();\r\n\t\t}\r\n\t}\r\n\t\r\n\treinitializeRows(){\r\n\t\tvar visibleRows = this.table.rowManager.getVisibleRows(true);\r\n\t\tvar otherRows = this.table.rowManager.getRows().filter(row => !visibleRows.includes(row));\r\n\t\t\r\n\t\totherRows.forEach((row) =>{\r\n\t\t\trow.deinitialize();\r\n\t\t});\r\n\t\t\r\n\t\tvisibleRows.forEach((row) =>{\r\n\t\t\tif(row.type === \"row\"){\r\n\t\t\t\tthis.layoutRow(row);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\t\r\n\tlayoutRow(row){\r\n\t\t// console.trace(\"row\")\r\n\t\tvar rowEl = row.getElement();\r\n\t\t\r\n\t\trowEl.style.paddingLeft = this.leftMargin;\r\n\t\t\r\n\t\tif(this.table.options.layout === \"fitDataFill\" && this.rightColumns.length){\r\n\t\t\tthis.table.rowManager.getTableElement().style.minWidth = \"calc(100% - \" + this.rightMargin + \")\";\r\n\t\t}\r\n\t\t\r\n\t\tthis.leftColumns.forEach((column) => {\r\n\t\t\tvar cell = row.getCell(column);\r\n\t\t\t\r\n\t\t\tif(cell){\r\n\t\t\t\tthis.layoutElement(cell.getElement(true), column);\r\n\t\t\t}\r\n\t\t});\r\n\t\t\r\n\t\tthis.rightColumns.forEach((column) => {\r\n\t\t\tvar cell = row.getCell(column);\r\n\t\t\t\r\n\t\t\tif(cell){\r\n\t\t\t\tthis.layoutElement(cell.getElement(true), column);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\t\r\n\tlayoutElement(element, column){\r\n\t\t\r\n\t\tif(column.modules.frozen){\r\n\t\t\telement.style.position = \"absolute\";\r\n\t\t\telement.style.left = column.modules.frozen.margin;\r\n\t\t\t\r\n\t\t\telement.classList.add(\"tabulator-frozen\");\r\n\t\t\t\r\n\t\t\tif(column.modules.frozen.edge){\r\n\t\t\t\telement.classList.add(\"tabulator-frozen-\" + column.modules.frozen.position);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\t_calcSpace(columns, index){\r\n\t\tvar width = 0;\r\n\t\t\r\n\t\tfor (let i = 0; i < index; i++){\r\n\t\t\tif(columns[i].visible){\r\n\t\t\t\twidth += columns[i].getWidth();\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\treturn width;\r\n\t}\r\n}\r\n\r\nFrozenColumns.moduleName = \"frozenColumns\";\r\n\r\nexport default FrozenColumns;","import Module from '../../core/Module.js';\r\n\r\nclass FrozenRows extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.topElement = document.createElement(\"div\");\r\n\t\tthis.rows = [];\r\n\r\n\t\t//register component functions\r\n\t\tthis.registerComponentFunction(\"row\", \"freeze\", this.freezeRow.bind(this));\r\n\t\tthis.registerComponentFunction(\"row\", \"unfreeze\", this.unfreezeRow.bind(this));\r\n\t\tthis.registerComponentFunction(\"row\", \"isFrozen\", this.isRowFrozen.bind(this));\r\n\r\n\t\t//register table options\r\n\t\tthis.registerTableOption(\"frozenRowsField\", \"id\"); //field to choose frozen rows by\r\n\t\tthis.registerTableOption(\"frozenRows\", false); //holder for frozen row identifiers\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tthis.rows = [];\r\n\r\n\t\tthis.topElement.classList.add(\"tabulator-frozen-rows-holder\");\r\n\r\n\t\t// this.table.columnManager.element.append(this.topElement);\r\n\t\tthis.table.columnManager.getElement().insertBefore(this.topElement, this.table.columnManager.headersElement.nextSibling);\r\n\r\n\t\tthis.subscribe(\"row-deleting\", this.detachRow.bind(this));\r\n\t\tthis.subscribe(\"rows-visible\", this.visibleRows.bind(this));\r\n\r\n\t\tthis.registerDisplayHandler(this.getRows.bind(this), 10);\r\n\r\n\t\tif(this.table.options.frozenRows){\r\n\t\t\tthis.subscribe(\"data-processed\", this.initializeRows.bind(this));\r\n\t\t\tthis.subscribe(\"row-added\", this.initializeRow.bind(this));\r\n\t\t}\r\n\t}\r\n\r\n\tinitializeRows(){\r\n\t\tthis.table.rowManager.getRows().forEach((row) => {\r\n\t\t\tthis.initializeRow(row);\r\n\t\t});\r\n\t}\r\n\r\n\tinitializeRow(row){\r\n\t\tvar frozenRows = this.table.options.frozenRows,\r\n\t\trowType = typeof frozenRows;\r\n\r\n\t\tif(rowType === \"number\"){\r\n\t\t\tif(row.getPosition() && (row.getPosition() + this.rows.length) <= frozenRows){\r\n\t\t\t\tthis.freezeRow(row);\r\n\t\t\t}\r\n\t\t}else if(rowType === \"function\"){\r\n\t\t\tif(frozenRows.call(this.table, row.getComponent())){\r\n\t\t\t\tthis.freezeRow(row);\r\n\t\t\t}\r\n\t\t}else if(Array.isArray(frozenRows)){\r\n\t\t\tif(frozenRows.includes(row.data[this.options(\"frozenRowsField\")])){\r\n\t\t\t\tthis.freezeRow(row);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tisRowFrozen(row){\r\n\t\tvar index = this.rows.indexOf(row);\r\n\t\treturn index > -1;\r\n\t}\r\n\r\n\tisFrozen(){\r\n\t\treturn !!this.rows.length;\r\n\t}\r\n\r\n\tvisibleRows(viewable, rows){\r\n\t\tthis.rows.forEach((row) => {\r\n\t\t\trows.push(row);\r\n\t\t});\r\n\r\n\t\treturn rows;\r\n\t}\r\n\r\n\t//filter frozen rows out of display data\r\n\tgetRows(rows){\r\n\t\tvar output = rows.slice(0);\r\n\r\n\t\tthis.rows.forEach(function(row){\r\n\t\t\tvar index = output.indexOf(row);\r\n\r\n\t\t\tif(index > -1){\r\n\t\t\t\toutput.splice(index, 1);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tfreezeRow(row){\r\n\t\tif(!row.modules.frozen){\r\n\t\t\trow.modules.frozen = true;\r\n\t\t\tthis.topElement.appendChild(row.getElement());\r\n\t\t\trow.initialize();\r\n\t\t\trow.normalizeHeight();\r\n\t\t\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\tif(row.modules.frozen){\r\n\r\n\t\t\trow.modules.frozen = false;\r\n\r\n\t\t\tthis.detachRow(row);\r\n\r\n\t\t\tthis.table.rowManager.adjustTableSize();\r\n\r\n\t\t\tthis.refreshData(false, \"display\");\r\n\r\n\t\t\tif(this.rows.length){\r\n\t\t\t\tthis.styleRows();\r\n\t\t\t}\r\n\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Freeze Error - Row is already unfrozen\");\r\n\t\t}\r\n\t}\r\n\r\n\tdetachRow(row){\r\n\t\tvar index = this.rows.indexOf(row);\r\n\r\n\t\tif(index > -1){\r\n\t\t\tvar rowEl = row.getElement();\r\n\r\n\t\t\tif(rowEl.parentNode){\r\n\t\t\t\trowEl.parentNode.removeChild(rowEl);\r\n\t\t\t}\r\n\r\n\t\t\tthis.rows.splice(index, 1);\r\n\t\t}\r\n\t}\r\n\r\n\tstyleRows(row){\r\n\t\tthis.rows.forEach((row, i) => {\r\n\t\t\tthis.table.rowManager.styleRow(row, i);\r\n\t\t});\r\n\t}\r\n}\r\n\r\nFrozenRows.moduleName = \"frozenRows\";\r\n\r\nexport default FrozenRows;","//public group object\r\nclass GroupComponent {\r\n\tconstructor (group){\r\n\t\tthis._group = group;\r\n\t\tthis.type = \"GroupComponent\";\r\n\r\n\t\treturn new Proxy(this, {\r\n\t\t\tget: function(target, name, receiver) {\r\n\t\t\t\tif (typeof target[name] !== \"undefined\") {\r\n\t\t\t\t\treturn target[name];\r\n\t\t\t\t}else{\r\n\t\t\t\t\treturn target._group.groupManager.table.componentFunctionBinder.handle(\"row\", target._group, name);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tgetKey(){\r\n\t\treturn this._group.key;\r\n\t}\r\n\r\n\tgetField(){\r\n\t\treturn this._group.field;\r\n\t}\r\n\r\n\tgetElement(){\r\n\t\treturn this._group.element;\r\n\t}\r\n\r\n\tgetRows(){\r\n\t\treturn this._group.getRows(true);\r\n\t}\r\n\r\n\tgetSubGroups(){\r\n\t\treturn this._group.getSubGroups(true);\r\n\t}\r\n\r\n\tgetParentGroup(){\r\n\t\treturn this._group.parent ? this._group.parent.getComponent() : false;\r\n\t}\r\n\r\n\tisVisible(){\r\n\t\treturn this._group.visible;\r\n\t}\r\n\r\n\tshow(){\r\n\t\tthis._group.show();\r\n\t}\r\n\r\n\thide(){\r\n\t\tthis._group.hide();\r\n\t}\r\n\r\n\ttoggle(){\r\n\t\tthis._group.toggleVisibility();\r\n\t}\r\n\r\n\t_getSelf(){\r\n\t\treturn this._group;\r\n\t}\r\n\r\n\tgetTable(){\r\n\t\treturn this._group.groupManager.table;\r\n\t}\r\n}\r\n\r\nexport default GroupComponent;","import Helpers from '../../core/tools/Helpers.js';\r\nimport GroupComponent from './GroupComponent.js';\r\n\r\n//Group functions\r\nclass Group{\r\n\t\r\n\tconstructor(groupManager, parent, level, key, field, generator, oldGroup){\r\n\t\tthis.groupManager = groupManager;\r\n\t\tthis.parent = parent;\r\n\t\tthis.key = key;\r\n\t\tthis.level = level;\r\n\t\tthis.field = field;\r\n\t\tthis.hasSubGroups = level < (groupManager.groupIDLookups.length - 1);\r\n\t\tthis.addRow = this.hasSubGroups ? this._addRowToGroup : this._addRow;\r\n\t\tthis.type = \"group\"; //type of element\r\n\t\tthis.old = oldGroup;\r\n\t\tthis.rows = [];\r\n\t\tthis.groups = [];\r\n\t\tthis.groupList = [];\r\n\t\tthis.generator = generator;\r\n\t\tthis.element = false;\r\n\t\tthis.elementContents = false;\r\n\t\tthis.height = 0;\r\n\t\tthis.outerHeight = 0;\r\n\t\tthis.initialized = false;\r\n\t\tthis.calcs = {};\r\n\t\tthis.initialized = false;\r\n\t\tthis.modules = {};\r\n\t\tthis.arrowElement = false;\r\n\t\t\r\n\t\tthis.visible = oldGroup ? oldGroup.visible : (typeof groupManager.startOpen[level] !== \"undefined\" ? groupManager.startOpen[level] : groupManager.startOpen[0]);\r\n\t\t\r\n\t\tthis.component = null;\r\n\t\t\r\n\t\tthis.createElements();\r\n\t\tthis.addBindings();\r\n\t\t\r\n\t\tthis.createValueGroups();\r\n\t}\r\n\t\r\n\twipe(){\r\n\t\tif(this.groupList.length){\r\n\t\t\tthis.groupList.forEach(function(group){\r\n\t\t\t\tgroup.wipe();\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tthis.rows.forEach((row) => {\r\n\t\t\t\tif(row.modules){\r\n\t\t\t\t\tdelete row.modules.group;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t\t\r\n\t\tthis.element = false;\r\n\t\tthis.arrowElement = false;\r\n\t\tthis.elementContents = false;\r\n\t}\r\n\t\r\n\tcreateElements(){\r\n\t\tvar arrow = document.createElement(\"div\");\r\n\t\tarrow.classList.add(\"tabulator-arrow\");\r\n\t\t\r\n\t\tthis.element = document.createElement(\"div\");\r\n\t\tthis.element.classList.add(\"tabulator-row\");\r\n\t\tthis.element.classList.add(\"tabulator-group\");\r\n\t\tthis.element.classList.add(\"tabulator-group-level-\" + this.level);\r\n\t\tthis.element.setAttribute(\"role\", \"rowgroup\");\r\n\t\t\r\n\t\tthis.arrowElement = document.createElement(\"div\");\r\n\t\tthis.arrowElement.classList.add(\"tabulator-group-toggle\");\r\n\t\tthis.arrowElement.appendChild(arrow);\r\n\t\t\r\n\t\t//setup movable rows\r\n\t\tif(this.groupManager.table.options.movableRows !== false && this.groupManager.table.modExists(\"moveRow\")){\r\n\t\t\tthis.groupManager.table.modules.moveRow.initializeGroupHeader(this);\r\n\t\t}\r\n\t}\r\n\t\r\n\tcreateValueGroups(){\r\n\t\tvar level = this.level + 1;\r\n\t\tif(this.groupManager.allowedValues && this.groupManager.allowedValues[level]){\r\n\t\t\tthis.groupManager.allowedValues[level].forEach((value) => {\r\n\t\t\t\tthis._createGroup(value, level);\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\t\r\n\taddBindings(){\r\n\t\tvar toggleElement;\r\n\t\t\r\n\t\tif(this.groupManager.table.options.groupToggleElement){\r\n\t\t\ttoggleElement = this.groupManager.table.options.groupToggleElement == \"arrow\" ? this.arrowElement : this.element;\r\n\t\t\t\r\n\t\t\ttoggleElement.addEventListener(\"click\", (e) => {\r\n\t\t\t\te.stopPropagation();\r\n\t\t\t\te.stopImmediatePropagation();\r\n\t\t\t\tthis.toggleVisibility();\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\t\r\n\t_createGroup(groupID, level){\r\n\t\tvar groupKey = level + \"_\" + groupID;\r\n\t\tvar group = new Group(this.groupManager, this, level, groupID, this.groupManager.groupIDLookups[level].field, this.groupManager.headerGenerator[level] || this.groupManager.headerGenerator[0], this.old ? this.old.groups[groupKey] : false);\r\n\t\t\r\n\t\tthis.groups[groupKey] = group;\r\n\t\tthis.groupList.push(group);\r\n\t}\r\n\t\r\n\t_addRowToGroup(row){\r\n\t\t\r\n\t\tvar level = this.level + 1;\r\n\t\t\r\n\t\tif(this.hasSubGroups){\r\n\t\t\tvar groupID = this.groupManager.groupIDLookups[level].func(row.getData()),\r\n\t\t\tgroupKey = level + \"_\" + groupID;\r\n\t\t\t\r\n\t\t\tif(this.groupManager.allowedValues && this.groupManager.allowedValues[level]){\r\n\t\t\t\tif(this.groups[groupKey]){\r\n\t\t\t\t\tthis.groups[groupKey].addRow(row);\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tif(!this.groups[groupKey]){\r\n\t\t\t\t\tthis._createGroup(groupID, level);\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\tthis.groups[groupKey].addRow(row);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\t_addRow(row){\r\n\t\tthis.rows.push(row);\r\n\t\trow.modules.group = this;\r\n\t}\r\n\t\r\n\tinsertRow(row, to, after){\r\n\t\tvar data = this.conformRowData({});\r\n\t\t\r\n\t\trow.updateData(data);\r\n\t\t\r\n\t\tvar toIndex = this.rows.indexOf(to);\r\n\t\t\r\n\t\tif(toIndex > -1){\r\n\t\t\tif(after){\r\n\t\t\t\tthis.rows.splice(toIndex+1, 0, row);\r\n\t\t\t}else{\r\n\t\t\t\tthis.rows.splice(toIndex, 0, row);\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tif(after){\r\n\t\t\t\tthis.rows.push(row);\r\n\t\t\t}else{\r\n\t\t\t\tthis.rows.unshift(row);\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\trow.modules.group = this;\r\n\t\t\r\n\t\tthis.generateGroupHeaderContents();\r\n\t\t\r\n\t\tif(this.groupManager.table.modExists(\"columnCalcs\") && this.groupManager.table.options.columnCalcs != \"table\"){\r\n\t\t\tthis.groupManager.table.modules.columnCalcs.recalcGroup(this);\r\n\t\t}\r\n\t\t\r\n\t\tthis.groupManager.updateGroupRows(true);\r\n\t}\r\n\t\r\n\tscrollHeader(left){\r\n\t\tif(this.arrowElement){\r\n\t\t\tthis.arrowElement.style.marginLeft = left;\r\n\t\t\t\r\n\t\t\tthis.groupList.forEach(function(child){\r\n\t\t\t\tchild.scrollHeader(left);\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\t\r\n\tgetRowIndex(row){}\r\n\t\r\n\t//update row data to match grouping constraints\r\n\tconformRowData(data){\r\n\t\tif(this.field){\r\n\t\t\tdata[this.field] = this.key;\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Data Conforming Error - Cannot conform row data to match new group as groupBy is a function\");\r\n\t\t}\r\n\t\t\r\n\t\tif(this.parent){\r\n\t\t\tdata = this.parent.conformRowData(data);\r\n\t\t}\r\n\t\t\r\n\t\treturn data;\r\n\t}\r\n\t\r\n\tremoveRow(row){\r\n\t\tvar index = this.rows.indexOf(row);\r\n\t\tvar el = row.getElement();\r\n\t\t\r\n\t\t\r\n\t\tif(index > -1){\r\n\t\t\tthis.rows.splice(index, 1);\r\n\t\t}\r\n\t\t\r\n\t\tif(!this.groupManager.table.options.groupValues && !this.rows.length){\r\n\t\t\tif(this.parent){\r\n\t\t\t\tthis.parent.removeGroup(this);\r\n\t\t\t}else{\r\n\t\t\t\tthis.groupManager.removeGroup(this);\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tthis.groupManager.updateGroupRows(true);\r\n\t\t}else{\r\n\t\t\t\r\n\t\t\tif(el.parentNode){\r\n\t\t\t\tel.parentNode.removeChild(el);\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tthis.generateGroupHeaderContents();\r\n\t\t\t\r\n\t\t\tif(this.groupManager.table.modExists(\"columnCalcs\") && this.groupManager.table.options.columnCalcs != \"table\"){\r\n\t\t\t\tthis.groupManager.table.modules.columnCalcs.recalcGroup(this);\r\n\t\t\t}\r\n\t\t\t\r\n\t\t}\r\n\t}\r\n\t\r\n\tremoveGroup(group){\r\n\t\tvar groupKey = group.level + \"_\" + group.key,\r\n\t\tindex;\r\n\t\t\r\n\t\tif(this.groups[groupKey]){\r\n\t\t\tdelete this.groups[groupKey];\r\n\t\t\t\r\n\t\t\tindex = this.groupList.indexOf(group);\r\n\t\t\t\r\n\t\t\tif(index > -1){\r\n\t\t\t\tthis.groupList.splice(index, 1);\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif(!this.groupList.length){\r\n\t\t\t\tif(this.parent){\r\n\t\t\t\t\tthis.parent.removeGroup(this);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tthis.groupManager.removeGroup(this);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\tgetHeadersAndRows(noCalc){\r\n\t\tvar output = [];\r\n\t\t\r\n\t\toutput.push(this);\r\n\t\t\r\n\t\tthis._visSet();\r\n\t\t\r\n\t\tif(this.visible){\r\n\t\t\tif(this.groupList.length){\r\n\t\t\t\tthis.groupList.forEach(function(group){\r\n\t\t\t\t\toutput = output.concat(group.getHeadersAndRows(noCalc));\r\n\t\t\t\t});\r\n\t\t\t\t\r\n\t\t\t}else{\r\n\t\t\t\tif(!noCalc && this.groupManager.table.options.columnCalcs != \"table\" && this.groupManager.table.modExists(\"columnCalcs\") && this.groupManager.table.modules.columnCalcs.hasTopCalcs()){\r\n\t\t\t\t\tif(this.calcs.top){\r\n\t\t\t\t\t\tthis.calcs.top.detachElement();\r\n\t\t\t\t\t\tthis.calcs.top.deleteCells();\r\n\t\t\t\t\t}\r\n\t\t\t\t\t\r\n\t\t\t\t\tthis.calcs.top = this.groupManager.table.modules.columnCalcs.generateTopRow(this.rows);\r\n\t\t\t\t\toutput.push(this.calcs.top);\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\toutput = output.concat(this.rows);\r\n\t\t\t\t\r\n\t\t\t\tif(!noCalc && this.groupManager.table.options.columnCalcs != \"table\" && this.groupManager.table.modExists(\"columnCalcs\") && this.groupManager.table.modules.columnCalcs.hasBottomCalcs()){\r\n\t\t\t\t\tif(this.calcs.bottom){\r\n\t\t\t\t\t\tthis.calcs.bottom.detachElement();\r\n\t\t\t\t\t\tthis.calcs.bottom.deleteCells();\r\n\t\t\t\t\t}\r\n\t\t\t\t\t\r\n\t\t\t\t\tthis.calcs.bottom = this.groupManager.table.modules.columnCalcs.generateBottomRow(this.rows);\r\n\t\t\t\t\toutput.push(this.calcs.bottom);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tif(!this.groupList.length && this.groupManager.table.options.columnCalcs != \"table\"){\r\n\t\t\t\t\r\n\t\t\t\tif(this.groupManager.table.modExists(\"columnCalcs\")){\r\n\t\t\t\t\t\r\n\t\t\t\t\tif(!noCalc && this.groupManager.table.modules.columnCalcs.hasTopCalcs()){\r\n\t\t\t\t\t\tif(this.calcs.top){\r\n\t\t\t\t\t\t\tthis.calcs.top.detachElement();\r\n\t\t\t\t\t\t\tthis.calcs.top.deleteCells();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\tif(this.groupManager.table.options.groupClosedShowCalcs){\r\n\t\t\t\t\t\t\tthis.calcs.top = this.groupManager.table.modules.columnCalcs.generateTopRow(this.rows);\r\n\t\t\t\t\t\t\toutput.push(this.calcs.top);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\t\r\n\t\t\t\t\tif(!noCalc && this.groupManager.table.modules.columnCalcs.hasBottomCalcs()){\r\n\t\t\t\t\t\tif(this.calcs.bottom){\r\n\t\t\t\t\t\t\tthis.calcs.bottom.detachElement();\r\n\t\t\t\t\t\t\tthis.calcs.bottom.deleteCells();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\tif(this.groupManager.table.options.groupClosedShowCalcs){\r\n\t\t\t\t\t\t\tthis.calcs.bottom = this.groupManager.table.modules.columnCalcs.generateBottomRow(this.rows);\r\n\t\t\t\t\t\t\toutput.push(this.calcs.bottom);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t\r\n\t\t}\r\n\t\t\r\n\t\treturn output;\r\n\t}\r\n\t\r\n\tgetData(visible, transform){\r\n\t\tvar output = [];\r\n\t\t\r\n\t\tthis._visSet();\r\n\t\t\r\n\t\tif(!visible || (visible && this.visible)){\r\n\t\t\tthis.rows.forEach((row) => {\r\n\t\t\t\toutput.push(row.getData(transform || \"data\"));\r\n\t\t\t});\r\n\t\t}\r\n\t\t\r\n\t\treturn output;\r\n\t}\r\n\t\r\n\tgetRowCount(){\r\n\t\tvar count = 0;\r\n\t\t\r\n\t\tif(this.groupList.length){\r\n\t\t\tthis.groupList.forEach((group) => {\r\n\t\t\t\tcount += group.getRowCount();\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tcount = this.rows.length;\r\n\t\t}\r\n\t\treturn count;\r\n\t}\r\n\t\r\n\ttoggleVisibility(){\r\n\t\tif(this.visible){\r\n\t\t\tthis.hide();\r\n\t\t}else{\r\n\t\t\tthis.show();\r\n\t\t}\r\n\t}\r\n\t\r\n\thide(){\r\n\t\tthis.visible = false;\r\n\t\t\r\n\t\tif(this.groupManager.table.rowManager.getRenderMode() == \"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(component){\r\n\t\tvar output = [];\r\n\t\t\r\n\t\tthis.rows.forEach(function(row){\r\n\t\t\toutput.push(component ? row.getComponent() : row);\r\n\t\t});\r\n\t\t\r\n\t\treturn output;\r\n\t}\r\n\t\r\n\tgenerateGroupHeaderContents(){\r\n\t\tvar data = [];\r\n\t\t\r\n\t\tthis.rows.forEach(function(row){\r\n\t\t\tdata.push(row.getData());\r\n\t\t});\r\n\t\t\r\n\t\tthis.elementContents = this.generator(this.key, this.getRowCount(), data, this.getComponent());\r\n\t\t\r\n\t\twhile(this.element.firstChild) this.element.removeChild(this.element.firstChild);\r\n\t\t\r\n\t\tif(typeof this.elementContents === \"string\"){\r\n\t\t\tthis.element.innerHTML = this.elementContents;\r\n\t\t}else{\r\n\t\t\tthis.element.appendChild(this.elementContents);\r\n\t\t}\r\n\t\t\r\n\t\tthis.element.insertBefore(this.arrowElement, this.element.firstChild);\r\n\t}\r\n\t\r\n\tgetPath(path = []) {\r\n\t\tpath.unshift(this.key);\r\n\t\tif(this.parent) {\r\n\t\t\tthis.parent.getPath(path);\r\n\t\t}\r\n\t\treturn path;\r\n\t}\r\n\t\r\n\t////////////// Standard Row Functions //////////////\r\n\t\r\n\tgetElement(){\r\n\t\treturn this.elementContents ? this.element : this.generateElement();\r\n\t}\r\n\t\r\n\tgenerateElement(){\r\n\t\tthis.addBindings = false;\r\n\t\t\r\n\t\tthis._visSet();\r\n\t\t\r\n\t\tif(this.visible){\r\n\t\t\tthis.element.classList.add(\"tabulator-group-visible\");\r\n\t\t}else{\r\n\t\t\tthis.element.classList.remove(\"tabulator-group-visible\");\r\n\t\t}\r\n\t\t\r\n\t\tfor(var i = 0; i < this.element.childNodes.length; ++i){\r\n\t\t\tthis.element.childNodes[i].parentNode.removeChild(this.element.childNodes[i]);\r\n\t\t}\r\n\t\t\r\n\t\tthis.generateGroupHeaderContents();\r\n\t\t\r\n\t\t// this.addBindings();\r\n\t\t\r\n\t\treturn this.element;\r\n\t}\r\n\t\r\n\tdetachElement(){\r\n\t\tif (this.element && this.element.parentNode){\r\n\t\t\tthis.element.parentNode.removeChild(this.element);\r\n\t\t}\r\n\t}\r\n\t\r\n\t//normalize the height of elements in the row\r\n\tnormalizeHeight(){\r\n\t\tthis.setHeight(this.element.clientHeight);\r\n\t}\r\n\t\r\n\tinitialize(force){\r\n\t\tif(!this.initialized || force){\r\n\t\t\tthis.normalizeHeight();\r\n\t\t\tthis.initialized = true;\r\n\t\t}\r\n\t}\r\n\t\r\n\treinitialize(){\r\n\t\tthis.initialized = false;\r\n\t\tthis.height = 0;\r\n\t\t\r\n\t\tif(Helpers.elVisible(this.element)){\r\n\t\t\tthis.initialize(true);\r\n\t\t}\r\n\t}\r\n\t\r\n\tsetHeight(height){\r\n\t\tif(this.height != height){\r\n\t\t\tthis.height = height;\r\n\t\t\tthis.outerHeight = this.element.offsetHeight;\r\n\t\t}\r\n\t}\r\n\t\r\n\t//return rows outer height\r\n\tgetHeight(){\r\n\t\treturn this.outerHeight;\r\n\t}\r\n\t\r\n\tgetGroup(){\r\n\t\treturn this;\r\n\t}\r\n\t\r\n\treinitializeHeight(){}\r\n\t\r\n\tcalcHeight(){}\r\n\t\r\n\tsetCellHeight(){}\r\n\t\r\n\tclearCellHeight(){}\r\n\t\r\n\tdeinitializeHeight(){}\r\n\t\r\n\t//////////////// Object Generation /////////////////\r\n\tgetComponent(){\r\n\t\tif(!this.component){\r\n\t\t\tthis.component = new GroupComponent(this);\r\n\t\t}\r\n\t\t\r\n\t\treturn this.component;\r\n\t}\r\n}\r\n\r\nexport default Group;","import Module from '../../core/Module.js';\r\n\r\nimport Group from './Group.js';\r\n\r\nclass GroupRows extends Module{\r\n\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\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)){\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}else{\r\n\t\t\tthis.groupList = [];\r\n\t\t\tthis.groups = {};\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\r\n\t\tif(!this.initialized){\r\n\t\t\tthis.initialize();\r\n\t\t}\r\n\r\n\t\tthis.configureGroupSetup();\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\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\tif(this.options(\"dataTree\")){\r\n\t\t\trow = this.table.modules.dataTree.getTreeParentRoot(row);\r\n\t\t}\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;\r\n\r\n\t\t\t// figure out if new group path is the same as old group path\r\n\t\t\tsamePath = (oldGroupPath.length == newGroupPath.length) && oldGroupPath.every((element, index) => {\r\n\t\t\t\treturn element === newGroupPath[index];\r\n\t\t\t});\r\n\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\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:from.getPosition(), posTo:to.getPosition(), to:to, after:after});\r\n\t}\r\n\r\n\trowAdded(row, data, pos, index){\r\n\t\tthis.action(\"rowAdd\", row, {data:data, pos:pos, index:index});\r\n\t}\r\n\r\n\trowDeleted(row){\r\n\t\tvar index, rows;\r\n\r\n\t\tif(this.table.options.groupBy){\r\n\r\n\t\t\trows = row.getComponent().getGroup().rows;\r\n\t\t\tindex = rows.indexOf(row);\r\n\r\n\t\t\tif(index){\r\n\t\t\t\tindex = rows[index-1];\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tindex = row.table.rowManager.getRowIndex(row);\r\n\r\n\t\t\tif(index){\r\n\t\t\t\tindex = row.table.rowManager.rows[index-1];\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.action(\"rowDelete\", row, {data:row.getData(), pos:!index, index:index});\r\n\t}\r\n\r\n\tcellUpdated(cell){\r\n\t\tthis.action(\"cellEdit\", cell, {oldValue:cell.oldValue, newValue:cell.value});\r\n\t}\r\n\r\n\tclear(){\r\n\t\tthis.history = [];\r\n\t\tthis.index = -1;\r\n\t}\r\n\r\n\taction(type, component, data){\r\n\t\tthis.history = this.history.slice(0, this.index + 1);\r\n\r\n\t\tthis.history.push({\r\n\t\t\ttype:type,\r\n\t\t\tcomponent:component,\r\n\t\t\tdata:data,\r\n\t\t});\r\n\r\n\t\tthis.index ++;\r\n\t}\r\n\r\n\tgetHistoryUndoSize(){\r\n\t\treturn this.index + 1;\r\n\t}\r\n\r\n\tgetHistoryRedoSize(){\r\n\t\treturn this.history.length - (this.index + 1);\r\n\t}\r\n\r\n\tclearComponentHistory(component){\r\n\t\tvar index = this.history.findIndex(function(item){\r\n\t\t\treturn item.component === component;\r\n\t\t});\r\n\r\n\t\tif(index > -1){\r\n\t\t\tthis.history.splice(index, 1);\r\n\t\t\tif(index <= this.index){\r\n\t\t\t\tthis.index--;\r\n\t\t\t}\r\n\r\n\t\t\tthis.clearComponentHistory(component);\r\n\t\t}\r\n\t}\r\n\r\n\tundo(){\r\n\t\tif(this.index > -1){\r\n\t\t\tlet action = this.history[this.index];\r\n\r\n\t\t\tHistory.undoers[action.type].call(this, action);\r\n\r\n\t\t\tthis.index--;\r\n\r\n\t\t\tthis.dispatchExternal(\"historyUndo\", action.type, action.component.getComponent(), action.data);\r\n\r\n\t\t\treturn true;\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"History Undo Error - No more history to undo\");\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\tredo(){\r\n\t\tif(this.history.length-1 > this.index){\r\n\r\n\t\t\tthis.index++;\r\n\r\n\t\t\tlet action = this.history[this.index];\r\n\r\n\t\t\tHistory.redoers[action.type].call(this, action);\r\n\r\n\t\t\tthis.dispatchExternal(\"historyRedo\", action.type, action.component.getComponent(), action.data);\r\n\r\n\t\t\treturn true;\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"History Redo Error - No more history to redo\");\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\t//rebind rows to new element after deletion\r\n\t_rebindRow(oldRow, newRow){\r\n\t\tthis.history.forEach(function(action){\r\n\t\t\tif(action.component instanceof Row){\r\n\t\t\t\tif(action.component === oldRow){\r\n\t\t\t\t\taction.component = newRow;\r\n\t\t\t\t}\r\n\t\t\t}else if(action.component instanceof Cell){\r\n\t\t\t\tif(action.component.row === oldRow){\r\n\t\t\t\t\tvar field = action.component.column.getField();\r\n\r\n\t\t\t\t\tif(field){\r\n\t\t\t\t\t\taction.component = newRow.getCell(field);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n}\r\n\r\nHistory.moduleName = \"history\";\r\n\r\n//load defaults\r\nHistory.undoers = defaultUndoers;\r\nHistory.redoers = defaultRedoers;\r\n\r\nexport default History;","export default {\r\n\tcellEdit: function(action){\r\n\t\taction.component.setValueProcessData(action.data.oldValue);\r\n\t\taction.component.cellRendered();\r\n\t},\r\n\r\n\trowAdd: function(action){\r\n\t\taction.component.deleteActual();\r\n\t},\r\n\r\n\trowDelete: function(action){\r\n\t\tvar newRow = this.table.rowManager.addRowActual(action.data.data, action.data.pos, action.data.index);\r\n\r\n\t\tif(this.table.options.groupBy && this.table.modExists(\"groupRows\")){\r\n\t\t\tthis.table.modules.groupRows.updateGroupRows(true);\r\n\t\t}\r\n\r\n\t\tthis._rebindRow(action.component, newRow);\r\n\t},\r\n\r\n\trowMove: function(action){\r\n\t\tthis.table.rowManager.moveRowActual(action.component, this.table.rowManager.rows[action.data.posFrom], !action.data.after);\r\n\t\tthis.table.rowManager.redraw();\r\n\t},\r\n};","export default {\r\n\tcellEdit: function(action){\r\n\t\taction.component.setValueProcessData(action.data.newValue);\r\n\t\taction.component.cellRendered();\r\n\t},\r\n\r\n\trowAdd: function(action){\r\n\t\tvar newRow = this.table.rowManager.addRowActual(action.data.data, action.data.pos, action.data.index);\r\n\r\n\t\tif(this.table.options.groupBy && this.table.modExists(\"groupRows\")){\r\n\t\t\tthis.table.modules.groupRows.updateGroupRows(true);\r\n\t\t}\r\n\r\n\t\tthis._rebindRow(action.component, newRow);\r\n\t},\r\n\r\n\trowDelete:function(action){\r\n\t\taction.component.deleteActual();\r\n\t},\r\n\r\n\trowMove: function(action){\r\n\t\tthis.table.rowManager.moveRowActual(action.component, this.table.rowManager.rows[action.data.posTo], action.data.after);\r\n\t\tthis.table.rowManager.redraw();\r\n\t},\r\n};","import Module from '../../core/Module.js';\r\n\r\nclass HtmlTableImport extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.fieldIndex = [];\r\n\t\tthis.hasIndex = false;\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tthis.tableElementCheck();\r\n\t}\r\n\r\n\ttableElementCheck(){\r\n\t\tif(this.table.originalElement && this.table.originalElement.tagName === \"TABLE\"){\r\n\t\t\tif(this.table.originalElement.childNodes.length){\r\n\t\t\t\tthis.parseTable();\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Unable to parse data from empty table tag, Tabulator should be initialized on a div tag unless importing data from a table element.\");\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tparseTable(){\r\n\t\tvar element = this.table.originalElement,\r\n\t\toptions = this.table.options,\r\n\t\theaders = element.getElementsByTagName(\"th\"),\r\n\t\trows = element.getElementsByTagName(\"tbody\")[0],\r\n\t\tdata = [];\r\n\r\n\t\tthis.hasIndex = false;\r\n\r\n\t\tthis.dispatchExternal(\"htmlImporting\");\r\n\r\n\t\trows = rows ? rows.getElementsByTagName(\"tr\") : [];\r\n\r\n\t\t//check for Tabulator inline options\r\n\t\tthis._extractOptions(element, options);\r\n\r\n\t\tif(headers.length){\r\n\t\t\tthis._extractHeaders(headers, rows);\r\n\t\t}else{\r\n\t\t\tthis._generateBlankHeaders(headers, rows);\r\n\t\t}\r\n\r\n\t\t//iterate through table rows and build data set\r\n\t\tfor(var index = 0; index < rows.length; index++){\r\n\t\t\tvar row = rows[index],\r\n\t\t\tcells = row.getElementsByTagName(\"td\"),\r\n\t\t\titem = {};\r\n\r\n\t\t\t//create index if the don't exist in table\r\n\t\t\tif(!this.hasIndex){\r\n\t\t\t\titem[options.index] = index;\r\n\t\t\t}\r\n\r\n\t\t\tfor(var i = 0; i < cells.length; i++){\r\n\t\t\t\tvar cell = cells[i];\r\n\t\t\t\tif(typeof this.fieldIndex[i] !== \"undefined\"){\r\n\t\t\t\t\titem[this.fieldIndex[i]] = cell.innerHTML;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t//add row data to item\r\n\t\t\tdata.push(item);\r\n\t\t}\r\n\r\n\t\toptions.data = data;\r\n\r\n\t\tthis.dispatchExternal(\"htmlImported\");\r\n\t}\r\n\r\n\t//extract tabulator attribute options\r\n\t_extractOptions(element, options, defaultOptions){\r\n\t\tvar attributes = element.attributes;\r\n\t\tvar optionsArr = defaultOptions ? Object.keys(defaultOptions) : Object.keys(options);\r\n\t\tvar optionsList = {};\r\n\r\n\t\toptionsArr.forEach((item) => {\r\n\t\t\toptionsList[item.toLowerCase()] = item;\r\n\t\t});\r\n\r\n\t\tfor(var index in attributes){\r\n\t\t\tvar attrib = attributes[index];\r\n\t\t\tvar name;\r\n\r\n\t\t\tif(attrib && typeof attrib == \"object\" && attrib.name && attrib.name.indexOf(\"tabulator-\") === 0){\r\n\t\t\t\tname = attrib.name.replace(\"tabulator-\", \"\");\r\n\r\n\t\t\t\tif(typeof optionsList[name] !== \"undefined\"){\r\n\t\t\t\t\toptions[optionsList[name]] = this._attribValue(attrib.value);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//get value of attribute\r\n\t_attribValue(value){\r\n\t\tif(value === \"true\"){\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\tif(value === \"false\"){\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\treturn value;\r\n\t}\r\n\r\n\t//find column if it has already been defined\r\n\t_findCol(title){\r\n\t\tvar match = this.table.options.columns.find((column) => {\r\n\t\t\treturn column.title === title;\r\n\t\t});\r\n\r\n\t\treturn match || false;\r\n\t}\r\n\r\n\t//extract column from headers\r\n\t_extractHeaders(headers, rows){\r\n\t\tfor(var index = 0; index < headers.length; index++){\r\n\t\t\tvar header = headers[index],\r\n\t\t\texists = false,\r\n\t\t\tcol = this._findCol(header.textContent),\r\n\t\t\twidth;\r\n\r\n\t\t\tif(col){\r\n\t\t\t\texists = true;\r\n\t\t\t}else{\r\n\t\t\t\tcol = {title:header.textContent.trim()};\r\n\t\t\t}\r\n\r\n\t\t\tif(!col.field) {\r\n\t\t\t\tcol.field = header.textContent.trim().toLowerCase().replace(\" \", \"_\");\r\n\t\t\t}\r\n\r\n\t\t\twidth = header.getAttribute(\"width\");\r\n\r\n\t\t\tif(width && !col.width)\t{\r\n\t\t\t\tcol.width = width;\r\n\t\t\t}\r\n\r\n\t\t\t//check for Tabulator inline options\r\n\t\t\tthis._extractOptions(header, col, this.table.columnManager.optionsList.registeredDefaults);\r\n\r\n\t\t\tthis.fieldIndex[index] = col.field;\r\n\r\n\t\t\tif(col.field == this.table.options.index){\r\n\t\t\t\tthis.hasIndex = true;\r\n\t\t\t}\r\n\r\n\t\t\tif(!exists){\r\n\t\t\t\tthis.table.options.columns.push(col);\r\n\t\t\t}\r\n\r\n\t\t}\r\n\t}\r\n\r\n\t//generate blank headers\r\n\t_generateBlankHeaders(headers, rows){\r\n\t\tfor(var index = 0; index < headers.length; index++){\r\n\t\t\tvar header = headers[index],\r\n\t\t\tcol = {title:\"\", field:\"col\" + index};\r\n\r\n\t\t\tthis.fieldIndex[index] = col.field;\r\n\r\n\t\t\tvar width = header.getAttribute(\"width\");\r\n\r\n\t\t\tif(width){\r\n\t\t\t\tcol.width = width;\r\n\t\t\t}\r\n\r\n\t\t\tthis.table.options.columns.push(col);\r\n\t\t}\r\n\t}\r\n}\r\n\r\nHtmlTableImport.moduleName = \"htmlTableImport\";\r\n\r\nexport default HtmlTableImport;","import csv from './importers/csv.js';\r\nimport json from './importers/json.js';\r\nimport array from './importers/array.js';\r\n\r\nexport default {\r\n\tcsv:csv,\r\n\tjson:json,\r\n\tarray:array,\r\n};","function csvImporter(input){\r\n\tvar data = [],\r\n\trow = 0, \r\n\tcol = 0,\r\n\tinQuote = false;\r\n \r\n\t//Iterate over each character\r\n\tfor (let index = 0; index < input.length; index++) {\r\n\t\tlet char = input[index], \r\n\t\tnextChar = input[index+1]; \r\n \r\n\t\t//Initialize empty row\r\n\t\tif(!data[row]){\r\n\t\t\tdata[row] = [];\r\n\t\t}\r\n\r\n\t\t//Initialize empty column\r\n\t\tif(!data[row][col]){\r\n\t\t\tdata[row][col] = \"\";\r\n\t\t}\r\n \r\n\t\t//Handle quotation mark inside string\r\n\t\tif (char == '\"' && inQuote && nextChar == '\"') { \r\n\t\t\tdata[row][col] += char; \r\n\t\t\tindex++;\r\n\t\t\tcontinue; \r\n\t\t}\r\n \r\n\t\t//Begin / End Quote\r\n\t\tif (char == '\"') { \r\n\t\t\tinQuote = !inQuote;\r\n\t\t\tcontinue;\r\n\t\t}\r\n \r\n\t\t//Next column (if not in quote)\r\n\t\tif (char == ',' && !inQuote) { \r\n\t\t\tcol++;\r\n\t\t\tcontinue; \r\n\t\t}\r\n \r\n\t\t//New row if new line and not in quote (CRLF) \r\n\t\tif (char == '\\r' && nextChar == '\\n' && !inQuote) { \r\n\t\t\tcol = 0; \r\n\t\t\trow++; \r\n\t\t\tindex++; \r\n\t\t\tcontinue; \r\n\t\t}\r\n \r\n\t\t//New row if new line and not in quote (CR or LF) \r\n\t\tif ((char == '\\r' || char == '\\n') && !inQuote) { \r\n\t\t\tcol = 0;\r\n\t\t\trow++;\r\n\t\t\tcontinue; \r\n\t\t}\r\n\r\n\t\t//Normal Character, append to column\r\n\t\tdata[row][col] += char;\r\n\t}\r\n\r\n\treturn data;\r\n}\r\n\r\nexport default csvImporter;","export default function(input){\r\n\ttry {\r\n\t\treturn JSON.parse(input);\r\n\t} catch(e) {\r\n\t\tconsole.warn(\"JSON Import Error - File contents is invalid JSON\", e);\r\n\t\treturn Promise.reject();\r\n\t}\r\n}","function arrayImporter(input){\r\n\treturn input;\r\n}\r\n\r\nexport default arrayImporter;","import Module from '../../core/Module.js';\r\n\r\nimport defaultImporters from './defaults/importers.js';\r\n\r\nclass Import extends Module{\r\n \r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n \r\n\t\tthis.registerTableOption(\"importFormat\");\r\n\t\tthis.registerTableOption(\"importReader\", \"text\");\r\n\t}\r\n \r\n\tinitialize(){\r\n\t\tthis.registerTableFunction(\"import\", this.importFromFile.bind(this));\r\n\r\n\t\tif(this.table.options.importFormat){\r\n\t\t\tthis.subscribe(\"data-loading\", this.loadDataCheck.bind(this), 10);\r\n\t\t\tthis.subscribe(\"data-load\", this.loadData.bind(this), 10);\r\n\t\t}\r\n\t}\r\n\r\n\tloadDataCheck(data){\r\n\t\treturn this.table.options.importFormat && (typeof data === \"string\" || (Array.isArray(data) && data.length && Array.isArray(data)));\r\n\t}\r\n\r\n\tloadData(data, params, config, silent, previousData){\r\n\t\treturn this.importData(this.lookupImporter(), data)\r\n\t\t\t.then(this.structureData.bind(this))\r\n\t\t\t.catch((err) => {\r\n\t\t\t\tconsole.error(\"Import Error:\", err || \"Unable to import data\");\r\n\t\t\t\treturn Promise.reject(err);\r\n\t\t\t});\r\n\t}\r\n\r\n\tlookupImporter(importFormat){\r\n\t\tvar importer;\r\n \r\n\t\tif(!importFormat){\r\n\t\t\timportFormat = this.table.options.importFormat;\r\n\t\t}\r\n \r\n\t\tif(typeof importFormat === \"string\"){\r\n\t\t\timporter = Import.importers[importFormat];\r\n\t\t}else{\r\n\t\t\timporter = importFormat;\r\n\t\t}\r\n\r\n\t\tif(!importer){\r\n\t\t\tconsole.error(\"Import Error - Importer not found:\", importFormat);\r\n\t\t}\r\n \r\n\t\treturn importer;\r\n\t}\r\n \r\n\timportFromFile(importFormat, extension){\r\n\t\tvar importer = this.lookupImporter(importFormat);\r\n \r\n\t\tif(importer){\r\n\t\t\treturn this.pickFile(extension)\r\n\t\t\t\t.then(this.importData.bind(this, importer))\r\n\t\t\t\t.then(this.structureData.bind(this))\r\n\t\t\t\t.then(this.setData.bind(this))\r\n\t\t\t\t.catch((err) => {\r\n\t\t\t\t\tconsole.error(\"Import Error:\", err || \"Unable to import file\");\r\n\t\t\t\t\treturn Promise.reject(err);\r\n\t\t\t\t});\r\n\t\t}\r\n\t}\r\n \r\n\tpickFile(extensions){\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tvar input = document.createElement(\"input\");\r\n\t\t\tinput.type = \"file\";\r\n\t\t\tinput.accept = extensions;\r\n \r\n\t\t\tinput.addEventListener(\"change\", (e) => {\r\n\t\t\t\tvar file = input.files[0],\r\n\t\t\t\treader = new FileReader();\r\n \r\n\t\t\t\tswitch(this.table.options.importReader){\r\n\t\t\t\t\tcase \"buffer\":\r\n\t\t\t\t\t\treader.readAsArrayBuffer(file);\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase \"binary\":\r\n\t\t\t\t\t\treader.readAsBinaryString(file);\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase \"url\":\r\n\t\t\t\t\t\treader.readAsDataURL(file);\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase \"text\":\r\n\t\t\t\t\tdefault:\r\n\t\t\t\t\t\treader.readAsText(file);\r\n\t\t\t\t}\r\n \r\n\t\t\t\treader.onload = (e) => {\r\n\t\t\t\t\tresolve(reader.result);\r\n\t\t\t\t};\r\n \r\n\t\t\t\treader.onerror = (e) => {\r\n\t\t\t\t\tconsole.warn(\"File Load Error - Unable to read file\");\r\n\t\t\t\t\treject();\r\n\t\t\t\t};\r\n\t\t\t});\r\n \r\n\t\t\tinput.click();\r\n\t\t});\r\n\t}\r\n \r\n\timportData(importer, fileContents){\r\n\t\tvar data = importer.call(this.table, fileContents);\r\n \r\n\t\tif(data instanceof Promise){\r\n\t\t\treturn data;\r\n\t\t}else{\r\n\t\t\treturn data ? Promise.resolve(data) : Promise.reject();\r\n\t\t}\r\n\t}\r\n\r\n\tstructureData(parsedData){\r\n\t\tvar data = [];\r\n \r\n\t\tif(Array.isArray(parsedData) && parsedData.length && Array.isArray(parsedData[0])){\r\n\t\t\tif(this.table.options.autoColumns){\r\n\t\t\t\tdata = this.structureArrayToObject(parsedData);\r\n\t\t\t}else{\r\n\t\t\t\tdata = this.structureArrayToColumns(parsedData);\r\n\t\t\t}\r\n\r\n\t\t\treturn data;\r\n\t\t}else{\r\n\t\t\treturn parsedData;\r\n\t\t}\r\n\t}\r\n\r\n\tstructureArrayToObject(parsedData){\r\n\t\tvar columns = parsedData.shift();\r\n\r\n\t\tvar data = parsedData.map((values) => {\r\n\t\t\tvar row = {};\r\n\r\n\t\t\tcolumns.forEach((key, i) => {\r\n\t\t\t\trow[key] = values[i];\r\n\t\t\t});\r\n\r\n\t\t\treturn row;\r\n\t\t});\r\n\r\n\t\treturn data;\r\n\t}\r\n\r\n\tstructureArrayToColumns(parsedData){\r\n\t\tvar data = [],\r\n\t\tcolumns = this.table.getColumns();\r\n\r\n\t\t//remove first row if it is the column names\r\n\t\tif(columns[0] && parsedData[0][0]){\r\n\t\t\tif(columns[0].getDefinition().title === parsedData[0][0]){\r\n\t\t\t\tparsedData.shift();\r\n\t\t\t}\r\n\t\t}\r\n \r\n\t\t//convert row arrays to objects\r\n\t\tparsedData.forEach((rowData) => {\r\n\t\t\tvar row = {};\r\n\r\n\t\t\trowData.forEach((value, index) => {\r\n\t\t\t\tvar column = columns[index];\r\n\r\n\t\t\t\tif(column){\r\n\t\t\t\t\trow[column.getField()] = value;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tdata.push(row);\r\n\t\t});\r\n\r\n\t\treturn data;\r\n\t}\r\n \r\n\tsetData(data){\r\n\t\treturn this.table.setData(data);\r\n\t}\r\n}\r\n\r\nImport.moduleName = \"import\";\r\n\r\n//load defaults\r\nImport.importers = defaultImporters;\r\n\r\nexport default Import;","import Module from '../../core/Module.js';\r\n\r\nimport Cell from '../../core/cell/Cell.js';\r\nimport Column from '../../core/column/Column.js';\r\n\r\nclass Interaction extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.eventMap = {\r\n\t\t\t//row events\r\n\t\t\trowClick:\"row-click\",\r\n\t\t\trowDblClick:\"row-dblclick\",\r\n\t\t\trowContext:\"row-contextmenu\",\r\n\t\t\trowMouseEnter:\"row-mouseenter\",\r\n\t\t\trowMouseLeave:\"row-mouseleave\",\r\n\t\t\trowMouseOver:\"row-mouseover\",\r\n\t\t\trowMouseOut:\"row-mouseout\",\r\n\t\t\trowMouseMove:\"row-mousemove\",\r\n\t\t\trowTap:\"row\",\r\n\t\t\trowDblTap:\"row\",\r\n\t\t\trowTapHold:\"row\",\r\n\r\n\t\t\t//cell events\r\n\t\t\tcellClick:\"cell-click\",\r\n\t\t\tcellDblClick:\"cell-dblclick\",\r\n\t\t\tcellContext:\"cell-contextmenu\",\r\n\t\t\tcellMouseEnter:\"cell-mouseenter\",\r\n\t\t\tcellMouseLeave:\"cell-mouseleave\",\r\n\t\t\tcellMouseOver:\"cell-mouseover\",\r\n\t\t\tcellMouseOut:\"cell-mouseout\",\r\n\t\t\tcellMouseMove:\"cell-mousemove\",\r\n\t\t\tcellTap:\"cell\",\r\n\t\t\tcellDblTap:\"cell\",\r\n\t\t\tcellTapHold:\"cell\",\r\n\r\n\t\t\t//column header events\r\n\t\t\theaderClick:\"column-click\",\r\n\t\t\theaderDblClick:\"column-dblclick\",\r\n\t\t\theaderContext:\"column-contextmenu\",\r\n\t\t\theaderMouseEnter:\"column-mouseenter\",\r\n\t\t\theaderMouseLeave:\"column-mouseleave\",\r\n\t\t\theaderMouseOver:\"column-mouseover\",\r\n\t\t\theaderMouseOut:\"column-mouseout\",\r\n\t\t\theaderMouseMove:\"column-mousemove\",\r\n\t\t\theaderTap:\"column\",\r\n\t\t\theaderDblTap:\"column\",\r\n\t\t\theaderTapHold:\"column\",\r\n\r\n\t\t\t//group header\r\n\t\t\tgroupClick:\"group-click\",\r\n\t\t\tgroupDblClick:\"group-dblclick\",\r\n\t\t\tgroupContext:\"group-contextmenu\",\r\n\t\t\tgroupMouseEnter:\"group-mouseenter\",\r\n\t\t\tgroupMouseLeave:\"group-mouseleave\",\r\n\t\t\tgroupMouseOver:\"group-mouseover\",\r\n\t\t\tgroupMouseOut:\"group-mouseout\",\r\n\t\t\tgroupMouseMove:\"group-mousemove\",\r\n\t\t\tgroupTap:\"group\",\r\n\t\t\tgroupDblTap:\"group\",\r\n\t\t\tgroupTapHold:\"group\",\r\n\t\t};\r\n\r\n\t\tthis.subscribers = {};\r\n\r\n\t\tthis.touchSubscribers = {};\r\n\r\n\t\tthis.columnSubscribers = {};\r\n\r\n\t\tthis.touchWatchers = {\r\n\t\t\trow:{\r\n\t\t\t\ttap:null,\r\n\t\t\t\ttapDbl:null,\r\n\t\t\t\ttapHold:null,\r\n\t\t\t},\r\n\t\t\tcell:{\r\n\t\t\t\ttap:null,\r\n\t\t\t\ttapDbl:null,\r\n\t\t\t\ttapHold:null,\r\n\t\t\t},\r\n\t\t\tcolumn:{\r\n\t\t\t\ttap:null,\r\n\t\t\t\ttapDbl:null,\r\n\t\t\t\ttapHold:null,\r\n\t\t\t},\r\n\t\t\tgroup:{\r\n\t\t\t\ttap:null,\r\n\t\t\t\ttapDbl:null,\r\n\t\t\t\ttapHold:null,\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tthis.registerColumnOption(\"headerClick\");\r\n\t\tthis.registerColumnOption(\"headerDblClick\");\r\n\t\tthis.registerColumnOption(\"headerContext\");\r\n\t\tthis.registerColumnOption(\"headerMouseEnter\");\r\n\t\tthis.registerColumnOption(\"headerMouseLeave\");\r\n\t\tthis.registerColumnOption(\"headerMouseOver\");\r\n\t\tthis.registerColumnOption(\"headerMouseOut\");\r\n\t\tthis.registerColumnOption(\"headerMouseMove\");\r\n\t\tthis.registerColumnOption(\"headerTap\");\r\n\t\tthis.registerColumnOption(\"headerDblTap\");\r\n\t\tthis.registerColumnOption(\"headerTapHold\");\r\n\r\n\t\tthis.registerColumnOption(\"cellClick\");\r\n\t\tthis.registerColumnOption(\"cellDblClick\");\r\n\t\tthis.registerColumnOption(\"cellContext\");\r\n\t\tthis.registerColumnOption(\"cellMouseEnter\");\r\n\t\tthis.registerColumnOption(\"cellMouseLeave\");\r\n\t\tthis.registerColumnOption(\"cellMouseOver\");\r\n\t\tthis.registerColumnOption(\"cellMouseOut\");\r\n\t\tthis.registerColumnOption(\"cellMouseMove\");\r\n\t\tthis.registerColumnOption(\"cellTap\");\r\n\t\tthis.registerColumnOption(\"cellDblTap\");\r\n\t\tthis.registerColumnOption(\"cellTapHold\");\r\n\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tthis.initializeExternalEvents();\r\n\r\n\t\tthis.subscribe(\"column-init\", this.initializeColumn.bind(this));\r\n\t\tthis.subscribe(\"cell-dblclick\", this.cellContentsSelectionFixer.bind(this));\r\n\t}\r\n\r\n\tcellContentsSelectionFixer(e, cell){\r\n\t\tvar range;\r\n\r\n\t\tif(this.table.modExists(\"edit\")){\r\n\t\t\tif (this.table.modules.edit.currentCell === 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\trange = 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\trange = 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\tif(added){\r\n\t\t\tif(!this.subscribers[key]){\r\n\t\t\t\tif(this.eventMap[key].includes(\"-\")){\r\n\t\t\t\t\tthis.subscribers[key] = this.handle.bind(this, key);\r\n\t\t\t\t\tthis.subscribe(this.eventMap[key], this.subscribers[key]);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tthis.subscribeTouchEvents(key);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tif(this.eventMap[key].includes(\"-\")){\r\n\t\t\t\tif(this.subscribers[key] && !this.columnSubscribers[key] && !this.subscribedExternal(key)){\r\n\t\t\t\t\tthis.unsubscribe(this.eventMap[key], this.subscribers[key]);\r\n\t\t\t\t\tdelete this.subscribers[key];\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tthis.unsubscribeTouchEvents(key);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\r\n\tsubscribeTouchEvents(key){\r\n\t\tvar type = this.eventMap[key];\r\n\r\n\t\tif(!this.touchSubscribers[type + \"-touchstart\"]){\r\n\t\t\tthis.touchSubscribers[type + \"-touchstart\"] = this.handleTouch.bind(this, type, \"start\");\r\n\t\t\tthis.touchSubscribers[type + \"-touchend\"] = this.handleTouch.bind(this, type, \"end\");\r\n\r\n\t\t\tthis.subscribe(type + \"-touchstart\", this.touchSubscribers[type + \"-touchstart\"]);\r\n\t\t\tthis.subscribe(type + \"-touchend\", this.touchSubscribers[type + \"-touchend\"]);\r\n\t\t}\r\n\r\n\t\tthis.subscribers[key] = true;\r\n\t}\r\n\r\n\tunsubscribeTouchEvents(key){\r\n\t\tvar noTouch = true,\r\n\t\ttype = this.eventMap[key];\r\n\r\n\t\tif(this.subscribers[key] && !this.subscribedExternal(key)){\r\n\t\t\tdelete this.subscribers[key];\r\n\r\n\t\t\tfor(let i in this.eventMap){\r\n\t\t\t\tif(this.eventMap[i] === type){\r\n\t\t\t\t\tif(this.subscribers[i]){\r\n\t\t\t\t\t\tnoTouch = false;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif(noTouch){\r\n\t\t\t\tthis.unsubscribe(type + \"-touchstart\", this.touchSubscribers[type + \"-touchstart\"]);\r\n\t\t\t\tthis.unsubscribe(type + \"-touchend\", this.touchSubscribers[type + \"-touchend\"]);\r\n\r\n\t\t\t\tdelete this.touchSubscribers[type + \"-touchstart\"];\r\n\t\t\t\tdelete this.touchSubscribers[type + \"-touchend\"];\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tinitializeColumn(column){\r\n\t\tvar def = column.definition;\r\n\r\n\t\tfor(let key in this.eventMap){\r\n\t\t\tif(def[key]){\r\n\t\t\t\tthis.subscriptionChanged(key, true);\r\n\r\n\t\t\t\tif(!this.columnSubscribers[key]){\r\n\t\t\t\t\tthis.columnSubscribers[key] = [];\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.columnSubscribers[key].push(column);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\thandle(action, e, component){\r\n\t\tthis.dispatchEvent(action, e, component);\r\n\t}\r\n\r\n\thandleTouch(type, action, e, component){\r\n\t\tvar watchers = this.touchWatchers[type];\r\n\r\n\t\tif(type === \"column\"){\r\n\t\t\ttype = \"header\";\r\n\t\t}\r\n\r\n\t\tswitch(action){\r\n\t\t\tcase \"start\":\r\n\t\t\t\twatchers.tap = true;\r\n\r\n\t\t\t\tclearTimeout(watchers.tapHold);\r\n\r\n\t\t\t\twatchers.tapHold = setTimeout(() => {\r\n\t\t\t\t\tclearTimeout(watchers.tapHold);\r\n\t\t\t\t\twatchers.tapHold = null;\r\n\r\n\t\t\t\t\twatchers.tap = null;\r\n\t\t\t\t\tclearTimeout(watchers.tapDbl);\r\n\t\t\t\t\twatchers.tapDbl = null;\r\n\r\n\t\t\t\t\tthis.dispatchEvent(type + \"TapHold\", e, component);\r\n\t\t\t\t}, 1000);\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase \"end\":\r\n\t\t\t\tif(watchers.tap){\r\n\r\n\t\t\t\t\twatchers.tap = null;\r\n\t\t\t\t\tthis.dispatchEvent(type + \"Tap\", e, component);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(watchers.tapDbl){\r\n\t\t\t\t\tclearTimeout(watchers.tapDbl);\r\n\t\t\t\t\twatchers.tapDbl = null;\r\n\r\n\t\t\t\t\tthis.dispatchEvent(type + \"DblTap\", e, component);\r\n\t\t\t\t}else{\r\n\t\t\t\t\twatchers.tapDbl = setTimeout(() => {\r\n\t\t\t\t\t\tclearTimeout(watchers.tapDbl);\r\n\t\t\t\t\t\twatchers.tapDbl = null;\r\n\t\t\t\t\t}, 300);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tclearTimeout(watchers.tapHold);\r\n\t\t\t\twatchers.tapHold = null;\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\tdispatchEvent(action, e, component){\r\n\t\tvar componentObj = component.getComponent(),\r\n\t\tcallback;\r\n\r\n\t\tif(this.columnSubscribers[action]){\r\n\r\n\t\t\tif(component instanceof Cell){\r\n\t\t\t\tcallback = component.column.definition[action];\r\n\t\t\t}else if(component instanceof Column){\r\n\t\t\t\tcallback = component.definition[action];\r\n\t\t\t}\r\n\r\n\t\t\tif(callback){\r\n\t\t\t\tcallback(e, componentObj);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.dispatchExternal(action, e, componentObj);\r\n\t}\r\n}\r\n\r\nInteraction.moduleName = \"interaction\";\r\n\r\nexport default Interaction;\r\n","import Module from '../../core/Module.js';\r\n\r\nimport defaultBindings from './defaults/bindings.js';\r\nimport defaultActions from './defaults/actions.js';\r\n\r\nclass Keybindings extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.watchKeys = null;\r\n\t\tthis.pressedKeys = null;\r\n\t\tthis.keyupBinding = false;\r\n\t\tthis.keydownBinding = false;\r\n\r\n\t\tthis.registerTableOption(\"keybindings\", {}); //array for keybindings\r\n\t\tthis.registerTableOption(\"tabEndNewRow\", false); //create new row when tab to end of table\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tvar bindings = this.table.options.keybindings,\r\n\t\tmergedBindings = {};\r\n\r\n\t\tthis.watchKeys = {};\r\n\t\tthis.pressedKeys = [];\r\n\r\n\t\tif(bindings !== false){\r\n\t\t\tObject.assign(mergedBindings, Keybindings.bindings);\r\n\t\t\tObject.assign(mergedBindings, bindings);\r\n\r\n\t\t\tthis.mapBindings(mergedBindings);\r\n\t\t\tthis.bindEvents();\r\n\t\t}\r\n\r\n\t\tthis.subscribe(\"table-destroy\", this.clearBindings.bind(this));\r\n\t}\r\n\r\n\tmapBindings(bindings){\r\n\t\tfor(let key in bindings){\r\n\t\t\tif(Keybindings.actions[key]){\r\n\t\t\t\tif(bindings[key]){\r\n\t\t\t\t\tif(typeof bindings[key] !== \"object\"){\r\n\t\t\t\t\t\tbindings[key] = [bindings[key]];\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tbindings[key].forEach((binding) => {\r\n\t\t\t\t\t\tvar bindingList = Array.isArray(binding) ? binding : [binding];\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\tbindingList.forEach((item) => {\r\n\t\t\t\t\t\t\tthis.mapBinding(key, item);\r\n\t\t\t\t\t\t});\t\t\t\t\t\t\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Key Binding Error - no such action:\", key);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tmapBinding(action, symbolsList){\r\n\t\tvar binding = {\r\n\t\t\taction: Keybindings.actions[action],\r\n\t\t\tkeys: [],\r\n\t\t\tctrl: false,\r\n\t\t\tshift: false,\r\n\t\t\tmeta: false,\r\n\t\t};\r\n\r\n\t\tvar symbols = symbolsList.toString().toLowerCase().split(\" \").join(\"\").split(\"+\");\r\n\r\n\t\tsymbols.forEach((symbol) => {\r\n\t\t\tswitch(symbol){\r\n\t\t\t\tcase \"ctrl\":\r\n\t\t\t\t\tbinding.ctrl = true;\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"shift\":\r\n\t\t\t\t\tbinding.shift = true;\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"meta\":\r\n\t\t\t\t\tbinding.meta = true;\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tsymbol = isNaN(symbol) ? symbol.toUpperCase().charCodeAt(0) : parseInt(symbol);\r\n\t\t\t\t\tbinding.keys.push(symbol);\r\n\r\n\t\t\t\t\tif(!this.watchKeys[symbol]){\r\n\t\t\t\t\t\tthis.watchKeys[symbol] = [];\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tthis.watchKeys[symbol].push(binding);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tbindEvents(){\r\n\t\tvar self = this;\r\n\r\n\t\tthis.keyupBinding = function(e){\r\n\t\t\tvar code = e.keyCode;\r\n\t\t\tvar bindings = self.watchKeys[code];\r\n\r\n\t\t\tif(bindings){\r\n\r\n\t\t\t\tself.pressedKeys.push(code);\r\n\r\n\t\t\t\tbindings.forEach(function(binding){\r\n\t\t\t\t\tself.checkBinding(e, binding);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tthis.keydownBinding = function(e){\r\n\t\t\tvar code = e.keyCode;\r\n\t\t\tvar bindings = self.watchKeys[code];\r\n\r\n\t\t\tif(bindings){\r\n\r\n\t\t\t\tvar index = self.pressedKeys.indexOf(code);\r\n\r\n\t\t\t\tif(index > -1){\r\n\t\t\t\t\tself.pressedKeys.splice(index, 1);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tthis.table.element.addEventListener(\"keydown\", this.keyupBinding);\r\n\r\n\t\tthis.table.element.addEventListener(\"keyup\", this.keydownBinding);\r\n\t}\r\n\r\n\tclearBindings(){\r\n\t\tif(this.keyupBinding){\r\n\t\t\tthis.table.element.removeEventListener(\"keydown\", this.keyupBinding);\r\n\t\t}\r\n\r\n\t\tif(this.keydownBinding){\r\n\t\t\tthis.table.element.removeEventListener(\"keyup\", this.keydownBinding);\r\n\t\t}\r\n\t}\r\n\r\n\tcheckBinding(e, binding){\r\n\t\tvar match = true;\r\n\r\n\t\tif(e.ctrlKey == binding.ctrl && e.shiftKey == binding.shift && e.metaKey == binding.meta){\r\n\t\t\tbinding.keys.forEach((key) => {\r\n\t\t\t\tvar index = this.pressedKeys.indexOf(key);\r\n\r\n\t\t\t\tif(index == -1){\r\n\t\t\t\t\tmatch = false;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tif(match){\r\n\t\t\t\tbinding.action.call(this, e);\r\n\t\t\t}\r\n\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t}\r\n}\r\n\r\nKeybindings.moduleName = \"keybindings\";\r\n\r\n//load defaults\r\nKeybindings.bindings = defaultBindings;\r\nKeybindings.actions = defaultActions;\r\n\r\nexport default Keybindings;","export default {\r\n\tnavPrev:\"shift + 9\",\r\n\tnavNext:9,\r\n\tnavUp:38,\r\n\tnavDown:40,\r\n\tscrollPageUp:33,\r\n\tscrollPageDown:34,\r\n\tscrollToStart:36,\r\n\tscrollToEnd:35,\r\n\tundo:[\"ctrl + 90\", \"meta + 90\"],\r\n\tredo:[\"ctrl + 89\", \"meta + 89\"],\r\n\tcopyToClipboard:[\"ctrl + 67\", \"meta + 89\"],\r\n};","export default {\r\n\tkeyBlock:function(e){\r\n\t\te.stopPropagation();\r\n\t\te.preventDefault();\r\n\t},\r\n\tscrollPageUp:function(e){\r\n\t\tvar rowManager = this.table.rowManager,\r\n\t\tnewPos = rowManager.scrollTop - rowManager.element.clientHeight;\r\n\r\n\t\te.preventDefault();\r\n\r\n\t\tif(rowManager.displayRowsCount){\r\n\t\t\tif(newPos >= 0){\r\n\t\t\t\trowManager.element.scrollTop = newPos;\r\n\t\t\t}else{\r\n\t\t\t\trowManager.scrollToRow(rowManager.getDisplayRows()[0]);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.table.element.focus();\r\n\t},\r\n\tscrollPageDown:function(e){\r\n\t\tvar rowManager = this.table.rowManager,\r\n\t\tnewPos = rowManager.scrollTop + rowManager.element.clientHeight,\r\n\t\tscrollMax = rowManager.element.scrollHeight;\r\n\r\n\t\te.preventDefault();\r\n\r\n\t\tif(rowManager.displayRowsCount){\r\n\t\t\tif(newPos <= scrollMax){\r\n\t\t\t\trowManager.element.scrollTop = newPos;\r\n\t\t\t}else{\r\n\t\t\t\trowManager.scrollToRow(rowManager.getDisplayRows()[rowManager.displayRowsCount - 1]);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.table.element.focus();\r\n\r\n\t},\r\n\tscrollToStart:function(e){\r\n\t\tvar rowManager = this.table.rowManager;\r\n\r\n\t\te.preventDefault();\r\n\r\n\t\tif(rowManager.displayRowsCount){\r\n\t\t\trowManager.scrollToRow(rowManager.getDisplayRows()[0]);\r\n\t\t}\r\n\r\n\t\tthis.table.element.focus();\r\n\t},\r\n\tscrollToEnd:function(e){\r\n\t\tvar rowManager = this.table.rowManager;\r\n\r\n\t\te.preventDefault();\r\n\r\n\t\tif(rowManager.displayRowsCount){\r\n\t\t\trowManager.scrollToRow(rowManager.getDisplayRows()[rowManager.displayRowsCount - 1]);\r\n\t\t}\r\n\r\n\t\tthis.table.element.focus();\r\n\t},\r\n\tnavPrev:function(e){\r\n\t\tthis.dispatch(\"keybinding-nav-prev\", e);\r\n\t},\r\n\r\n\tnavNext:function(e){\r\n\t\tthis.dispatch(\"keybinding-nav-next\", e);\r\n\t},\r\n\r\n\tnavLeft:function(e){\r\n\t\tthis.dispatch(\"keybinding-nav-left\", e);\r\n\t},\r\n\r\n\tnavRight:function(e){\r\n\t\tthis.dispatch(\"keybinding-nav-right\", e);\r\n\t},\r\n\r\n\tnavUp:function(e){\r\n\t\tthis.dispatch(\"keybinding-nav-up\", e);\r\n\t},\r\n\r\n\tnavDown:function(e){\r\n\t\tthis.dispatch(\"keybinding-nav-down\", e);\r\n\t},\r\n\r\n\tundo:function(e){\r\n\t\tvar cell = false;\r\n\t\tif(this.table.options.history && this.table.modExists(\"history\") && this.table.modExists(\"edit\")){\r\n\r\n\t\t\tcell = this.table.modules.edit.currentCell;\r\n\r\n\t\t\tif(!cell){\r\n\t\t\t\te.preventDefault();\r\n\t\t\t\tthis.table.modules.history.undo();\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\tredo:function(e){\r\n\t\tvar cell = false;\r\n\t\tif(this.table.options.history && this.table.modExists(\"history\") && this.table.modExists(\"edit\")){\r\n\r\n\t\t\tcell = this.table.modules.edit.currentCell;\r\n\r\n\t\t\tif(!cell){\r\n\t\t\t\te.preventDefault();\r\n\t\t\t\tthis.table.modules.history.redo();\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\tcopyToClipboard:function(e){\r\n\t\tif(!this.table.modules.edit.currentCell){\r\n\t\t\tif(this.table.modExists(\"clipboard\", true)){\r\n\t\t\t\tthis.table.modules.clipboard.copy(false, true);\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n};","import Module from '../../core/Module.js';\r\n\r\nclass Menu extends Module{\r\n\t\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\t\t\r\n\t\tthis.menuContainer = null;\r\n\t\tthis.nestedMenuBlock = false;\r\n\t\t\r\n\t\tthis.currentComponent = null;\r\n\t\tthis.rootPopup = null;\r\n\t\t\r\n\t\tthis.columnSubscribers = {};\r\n\t\t\r\n\t\tthis.registerTableOption(\"menuContainer\", undefined); //deprecated\r\n\r\n\t\tthis.registerTableOption(\"rowContextMenu\", false);\r\n\t\tthis.registerTableOption(\"rowClickMenu\", false);\r\n\t\tthis.registerTableOption(\"groupContextMenu\", false);\r\n\t\tthis.registerTableOption(\"groupClickMenu\", false);\r\n\t\t\r\n\t\tthis.registerColumnOption(\"headerContextMenu\");\r\n\t\tthis.registerColumnOption(\"headerClickMenu\");\r\n\t\tthis.registerColumnOption(\"headerMenu\");\r\n\t\tthis.registerColumnOption(\"headerMenuIcon\");\r\n\t\tthis.registerColumnOption(\"contextMenu\");\r\n\t\tthis.registerColumnOption(\"clickMenu\");\r\n\t\t\r\n\t}\r\n\t\r\n\tinitialize(){\r\n\t\tthis.deprecatedOptionsCheck();\r\n\t\tthis.initializeRowWatchers();\r\n\t\tthis.initializeGroupWatchers();\r\n\t\t\r\n\t\tthis.subscribe(\"column-init\", this.initializeColumn.bind(this));\r\n\t}\r\n\r\n\tdeprecatedOptionsCheck(){\r\n\t\tif(!this.deprecationCheck(\"menuContainer\", \"popupContainer\")){\r\n\t\t\tthis.table.options.popupContainer = this.table.options.menuContainer;\r\n\t\t}\r\n\t}\t\r\n\t\r\n\tinitializeRowWatchers(){\r\n\t\tif(this.table.options.rowContextMenu){\r\n\t\t\tthis.subscribe(\"row-contextmenu\", this.loadMenuEvent.bind(this, this.table.options.rowContextMenu));\r\n\t\t\tthis.table.on(\"rowTapHold\", this.loadMenuEvent.bind(this, this.table.options.rowContextMenu));\r\n\t\t}\r\n\t\t\r\n\t\tif(this.table.options.rowClickMenu){\r\n\t\t\tthis.subscribe(\"row-click\", this.loadMenuEvent.bind(this, this.table.options.rowClickMenu));\r\n\t\t}\r\n\t}\r\n\t\r\n\tinitializeGroupWatchers(){\r\n\t\tif(this.table.options.groupContextMenu){\r\n\t\t\tthis.subscribe(\"group-contextmenu\", this.loadMenuEvent.bind(this, this.table.options.groupContextMenu));\r\n\t\t\tthis.table.on(\"groupTapHold\", this.loadMenuEvent.bind(this, this.table.options.groupContextMenu));\r\n\t\t}\r\n\t\t\r\n\t\tif(this.table.options.groupClickMenu){\r\n\t\t\tthis.subscribe(\"group-click\", this.loadMenuEvent.bind(this, this.table.options.groupClickMenu));\r\n\t\t}\r\n\t}\r\n\t\r\n\tinitializeColumn(column){\r\n\t\tvar\tdef = column.definition;\r\n\t\t\r\n\t\t//handle column events\r\n\t\tif(def.headerContextMenu && !this.columnSubscribers.headerContextMenu){\r\n\t\t\tthis.columnSubscribers.headerContextMenu = this.loadMenuTableColumnEvent.bind(this, \"headerContextMenu\");\r\n\t\t\tthis.subscribe(\"column-contextmenu\", this.columnSubscribers.headerContextMenu);\r\n\t\t\tthis.table.on(\"headerTapHold\", this.loadMenuTableColumnEvent.bind(this, \"headerContextMenu\"));\r\n\t\t}\r\n\t\t\r\n\t\tif(def.headerClickMenu && !this.columnSubscribers.headerClickMenu){\r\n\t\t\tthis.columnSubscribers.headerClickMenu = this.loadMenuTableColumnEvent.bind(this, \"headerClickMenu\");\r\n\t\t\tthis.subscribe(\"column-click\", this.columnSubscribers.headerClickMenu);\r\n\t\t}\r\n\t\t\r\n\t\tif(def.headerMenu){\r\n\t\t\tthis.initializeColumnHeaderMenu(column);\r\n\t\t}\r\n\t\t\r\n\t\t//handle cell events\r\n\t\tif(def.contextMenu && !this.columnSubscribers.contextMenu){\r\n\t\t\tthis.columnSubscribers.contextMenu = this.loadMenuTableCellEvent.bind(this, \"contextMenu\");\r\n\t\t\tthis.subscribe(\"cell-contextmenu\", this.columnSubscribers.contextMenu);\r\n\t\t\tthis.table.on(\"cellTapHold\", this.loadMenuTableCellEvent.bind(this, \"contextMenu\"));\r\n\t\t}\r\n\t\t\r\n\t\tif(def.clickMenu && !this.columnSubscribers.clickMenu){\r\n\t\t\tthis.columnSubscribers.clickMenu = this.loadMenuTableCellEvent.bind(this, \"clickMenu\");\r\n\t\t\tthis.subscribe(\"cell-click\", this.columnSubscribers.clickMenu);\r\n\t\t}\r\n\t}\r\n\t\r\n\tinitializeColumnHeaderMenu(column){\r\n\t\tvar icon = column.definition.headerMenuIcon,\r\n\t\theaderMenuEl;\r\n\t\t\r\n\t\theaderMenuEl = document.createElement(\"span\");\r\n\t\theaderMenuEl.classList.add(\"tabulator-header-popup-button\");\r\n\r\n\t\tif(icon){\r\n\t\t\tif(typeof icon === \"function\"){\r\n\t\t\t\ticon = icon(column.getComponent());\r\n\t\t\t}\r\n\r\n\t\t\tif(icon instanceof HTMLElement){\r\n\t\t\t\theaderMenuEl.appendChild(icon);\r\n\t\t\t}else{\r\n\t\t\t\theaderMenuEl.innerHTML = icon;\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\theaderMenuEl.innerHTML = \"⋮\";\r\n\t\t}\r\n\t\t\r\n\t\theaderMenuEl.addEventListener(\"click\", (e) => {\r\n\t\t\te.stopPropagation();\r\n\t\t\te.preventDefault();\r\n\t\t\t\r\n\t\t\tthis.loadMenuEvent(column.definition.headerMenu, e, column);\r\n\t\t});\r\n\t\t\r\n\t\tcolumn.titleElement.insertBefore(headerMenuEl, column.titleElement.firstChild);\r\n\t}\r\n\t\r\n\tloadMenuTableCellEvent(option, e, cell){\r\n\t\tif(cell._cell){\r\n\t\t\tcell = cell._cell;\r\n\t\t}\r\n\t\t\r\n\t\tif(cell.column.definition[option]){\r\n\t\t\tthis.loadMenuEvent(cell.column.definition[option], e, cell);\r\n\t\t}\r\n\t}\r\n\t\r\n\tloadMenuTableColumnEvent(option, e, column){\r\n\t\tif(column._column){\r\n\t\t\tcolumn = column._column;\r\n\t\t}\r\n\t\t\r\n\t\tif(column.definition[option]){\r\n\t\t\tthis.loadMenuEvent(column.definition[option], e, column);\r\n\t\t}\r\n\t}\r\n\t\r\n\tloadMenuEvent(menu, e, component){\r\n\t\tif(component._group){\r\n\t\t\tcomponent = component._group;\r\n\t\t}else if(component._row){\r\n\t\t\tcomponent = component._row;\r\n\t\t}\r\n\t\t\r\n\t\tmenu = typeof menu == \"function\" ? menu.call(this.table, e, component.getComponent()) : menu;\r\n\t\t\r\n\t\tthis.loadMenu(e, component, menu);\r\n\t}\r\n\t\r\n\tloadMenu(e, component, menu, parentEl, parentPopup){\r\n\t\tvar touch = !(e instanceof MouseEvent),\t\t\r\n\t\tmenuEl = document.createElement(\"div\"),\r\n\t\tpopup;\r\n\t\t\r\n\t\tmenuEl.classList.add(\"tabulator-menu\");\r\n\t\t\r\n\t\tif(!touch){\r\n\t\t\te.preventDefault();\r\n\t\t}\r\n\t\t\r\n\t\t//abort if no menu set\r\n\t\tif(!menu || !menu.length){\r\n\t\t\treturn;\r\n\t\t}\r\n\t\t\r\n\t\tif(!parentEl){\r\n\t\t\tif(this.nestedMenuBlock){\r\n\t\t\t\t//abort if child menu already open\r\n\t\t\t\tif(this.rootPopup){\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tthis.nestedMenuBlock = setTimeout(() => {\r\n\t\t\t\t\tthis.nestedMenuBlock = false;\r\n\t\t\t\t}, 100);\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif(this.rootPopup){\r\n\t\t\t\tthis.rootPopup.hide();\t\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tthis.rootPopup = popup = this.popup(menuEl);\r\n\t\t\t\r\n\t\t}else{\r\n\t\t\tpopup = parentPopup.child(menuEl);\r\n\t\t}\r\n\t\t\r\n\t\tmenu.forEach((item) => {\r\n\t\t\tvar itemEl = document.createElement(\"div\"),\r\n\t\t\tlabel = item.label,\r\n\t\t\tdisabled = item.disabled;\r\n\t\t\t\r\n\t\t\tif(item.separator){\r\n\t\t\t\titemEl.classList.add(\"tabulator-menu-separator\");\r\n\t\t\t}else{\r\n\t\t\t\titemEl.classList.add(\"tabulator-menu-item\");\r\n\t\t\t\t\r\n\t\t\t\tif(typeof label == \"function\"){\r\n\t\t\t\t\tlabel = label.call(this.table, component.getComponent());\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\tif(label instanceof Node){\r\n\t\t\t\t\titemEl.appendChild(label);\r\n\t\t\t\t}else{\r\n\t\t\t\t\titemEl.innerHTML = label;\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\tif(typeof disabled == \"function\"){\r\n\t\t\t\t\tdisabled = disabled.call(this.table, component.getComponent());\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\tif(disabled){\r\n\t\t\t\t\titemEl.classList.add(\"tabulator-menu-item-disabled\");\r\n\t\t\t\t\titemEl.addEventListener(\"click\", (e) => {\r\n\t\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\t});\r\n\t\t\t\t}else{\r\n\t\t\t\t\tif(item.menu && item.menu.length){\r\n\t\t\t\t\t\titemEl.addEventListener(\"click\", (e) => {\r\n\t\t\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\t\t\tthis.loadMenu(e, component, item.menu, itemEl, popup);\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tif(item.action){\r\n\t\t\t\t\t\t\titemEl.addEventListener(\"click\", (e) => {\r\n\t\t\t\t\t\t\t\titem.action(e, component.getComponent());\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\tif(item.menu && item.menu.length){\r\n\t\t\t\t\titemEl.classList.add(\"tabulator-menu-item-submenu\");\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tmenuEl.appendChild(itemEl);\r\n\t\t});\r\n\t\t\r\n\t\tmenuEl.addEventListener(\"click\", (e) => {\r\n\t\t\tthis.rootPopup.hide();\r\n\t\t});\r\n\t\t\r\n\t\tpopup.show(parentEl || e);\r\n\t\t\r\n\t\tif(popup === this.rootPopup){\r\n\t\t\tthis.rootPopup.hideOnBlur(() => {\r\n\t\t\t\tthis.rootPopup = null;\r\n\t\t\t\t\r\n\t\t\t\tif(this.currentComponent){\r\n\t\t\t\t\tthis.dispatchExternal(\"menuClosed\", this.currentComponent.getComponent());\r\n\t\t\t\t\tthis.currentComponent = null;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tthis.currentComponent = component;\r\n\r\n\t\t\tthis.dispatchExternal(\"menuOpened\", component.getComponent());\r\n\t\t}\r\n\t}\r\n}\r\n\r\nMenu.moduleName = \"menu\";\r\n\r\nexport default Menu;\r\n","import Module from '../../core/Module.js';\r\nimport Helpers from '../../core/tools/Helpers.js';\r\n\r\nclass MoveColumns extends Module{\r\n\t\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\t\t\r\n\t\tthis.placeholderElement = this.createPlaceholderElement();\r\n\t\tthis.hoverElement = false; //floating column header element\r\n\t\tthis.checkTimeout = false; //click check timeout holder\r\n\t\tthis.checkPeriod = 250; //period to wait on mousedown to consider this a move and not a click\r\n\t\tthis.moving = false; //currently moving column\r\n\t\tthis.toCol = false; //destination column\r\n\t\tthis.toColAfter = false; //position of moving column relative to the destination column\r\n\t\tthis.startX = 0; //starting position within header element\r\n\t\tthis.autoScrollMargin = 40; //auto scroll on edge when within margin\r\n\t\tthis.autoScrollStep = 5; //auto scroll distance in pixels\r\n\t\tthis.autoScrollTimeout = false; //auto scroll timeout\r\n\t\tthis.touchMove = false;\r\n\t\t\r\n\t\tthis.moveHover = this.moveHover.bind(this);\r\n\t\tthis.endMove = this.endMove.bind(this);\r\n\t\t\r\n\t\tthis.registerTableOption(\"movableColumns\", false); //enable movable columns\r\n\t}\r\n\t\r\n\tcreatePlaceholderElement(){\r\n\t\tvar el = document.createElement(\"div\");\r\n\t\t\r\n\t\tel.classList.add(\"tabulator-col\");\r\n\t\tel.classList.add(\"tabulator-col-placeholder\");\r\n\t\t\r\n\t\treturn el;\r\n\t}\r\n\t\r\n\tinitialize(){\r\n\t\tif(this.table.options.movableColumns){\r\n\t\t\tthis.subscribe(\"column-init\", this.initializeColumn.bind(this));\r\n\t\t}\r\n\t}\r\n\t\r\n\tinitializeColumn(column){\r\n\t\tvar self = this,\r\n\t\tconfig = {},\r\n\t\tcolEl;\r\n\t\t\r\n\t\tif(!column.modules.frozen && !column.isGroup){\r\n\t\t\tcolEl = column.getElement();\r\n\t\t\t\r\n\t\t\tconfig.mousemove = function(e){\r\n\t\t\t\tif(column.parent === self.moving.parent){\r\n\t\t\t\t\tif((((self.touchMove ? e.touches[0].pageX : e.pageX) - Helpers.elOffset(colEl).left) + self.table.columnManager.element.scrollLeft) > (column.getWidth() / 2)){\r\n\t\t\t\t\t\tif(self.toCol !== column || !self.toColAfter){\r\n\t\t\t\t\t\t\tcolEl.parentNode.insertBefore(self.placeholderElement, colEl.nextSibling);\r\n\t\t\t\t\t\t\tself.moveColumn(column, true);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tif(self.toCol !== column || self.toColAfter){\r\n\t\t\t\t\t\t\tcolEl.parentNode.insertBefore(self.placeholderElement, colEl);\r\n\t\t\t\t\t\t\tself.moveColumn(column, false);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}.bind(self);\r\n\t\t\t\r\n\t\t\tcolEl.addEventListener(\"mousedown\", function(e){\r\n\t\t\t\tself.touchMove = false;\r\n\t\t\t\tif(e.which === 1){\r\n\t\t\t\t\tself.checkTimeout = setTimeout(function(){\r\n\t\t\t\t\t\tself.startMove(e, column);\r\n\t\t\t\t\t}, self.checkPeriod);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\t\r\n\t\t\tcolEl.addEventListener(\"mouseup\", function(e){\r\n\t\t\t\tif(e.which === 1){\r\n\t\t\t\t\tif(self.checkTimeout){\r\n\t\t\t\t\t\tclearTimeout(self.checkTimeout);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\t\r\n\t\t\tself.bindTouchEvents(column);\r\n\t\t}\r\n\t\t\r\n\t\tcolumn.modules.moveColumn = config;\r\n\t}\r\n\t\r\n\tbindTouchEvents(column){\r\n\t\tvar colEl = column.getElement(),\r\n\t\tstartXMove = false, //shifting center position of the cell\r\n\t\tnextCol, prevCol, nextColWidth, prevColWidth, nextColWidthLast, prevColWidthLast;\r\n\t\t\r\n\t\tcolEl.addEventListener(\"touchstart\", (e) => {\r\n\t\t\tthis.checkTimeout = setTimeout(() => {\r\n\t\t\t\tthis.touchMove = true;\r\n\t\t\t\tnextCol = column.nextColumn();\r\n\t\t\t\tnextColWidth = nextCol ? nextCol.getWidth()/2 : 0;\r\n\t\t\t\tprevCol = column.prevColumn();\r\n\t\t\t\tprevColWidth = prevCol ? prevCol.getWidth()/2 : 0;\r\n\t\t\t\tnextColWidthLast = 0;\r\n\t\t\t\tprevColWidthLast = 0;\r\n\t\t\t\tstartXMove = false;\r\n\t\t\t\t\r\n\t\t\t\tthis.startMove(e, column);\r\n\t\t\t}, this.checkPeriod);\r\n\t\t}, {passive: true});\r\n\t\t\r\n\t\tcolEl.addEventListener(\"touchmove\", (e) => {\r\n\t\t\tvar diff, moveToCol;\r\n\t\t\t\r\n\t\t\tif(this.moving){\r\n\t\t\t\tthis.moveHover(e);\r\n\t\t\t\t\r\n\t\t\t\tif(!startXMove){\r\n\t\t\t\t\tstartXMove = e.touches[0].pageX;\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\tdiff = e.touches[0].pageX - startXMove;\r\n\t\t\t\t\r\n\t\t\t\tif(diff > 0){\r\n\t\t\t\t\tif(nextCol && diff - nextColWidthLast > nextColWidth){\r\n\t\t\t\t\t\tmoveToCol = nextCol;\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\tif(moveToCol !== column){\r\n\t\t\t\t\t\t\tstartXMove = e.touches[0].pageX;\r\n\t\t\t\t\t\t\tmoveToCol.getElement().parentNode.insertBefore(this.placeholderElement, moveToCol.getElement().nextSibling);\r\n\t\t\t\t\t\t\tthis.moveColumn(moveToCol, true);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}else{\r\n\t\t\t\t\tif(prevCol && -diff - prevColWidthLast > prevColWidth){\r\n\t\t\t\t\t\tmoveToCol = prevCol;\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\tif(moveToCol !== column){\r\n\t\t\t\t\t\t\tstartXMove = e.touches[0].pageX;\r\n\t\t\t\t\t\t\tmoveToCol.getElement().parentNode.insertBefore(this.placeholderElement, moveToCol.getElement());\r\n\t\t\t\t\t\t\tthis.moveColumn(moveToCol, false);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\tif(moveToCol){\r\n\t\t\t\t\tnextCol = moveToCol.nextColumn();\r\n\t\t\t\t\tnextColWidthLast = nextColWidth;\r\n\t\t\t\t\tnextColWidth = nextCol ? nextCol.getWidth() / 2 : 0;\r\n\t\t\t\t\tprevCol = moveToCol.prevColumn();\r\n\t\t\t\t\tprevColWidthLast = prevColWidth;\r\n\t\t\t\t\tprevColWidth = prevCol ? prevCol.getWidth() / 2 : 0;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}, {passive: true});\r\n\t\t\r\n\t\tcolEl.addEventListener(\"touchend\", (e) => {\r\n\t\t\tif(this.checkTimeout){\r\n\t\t\t\tclearTimeout(this.checkTimeout);\r\n\t\t\t}\r\n\t\t\tif(this.moving){\r\n\t\t\t\tthis.endMove(e);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\t\r\n\tstartMove(e, column){\r\n\t\tvar element = column.getElement(),\r\n\t\theaderElement = this.table.columnManager.getElement(),\r\n\t\theadersElement = this.table.columnManager.getHeadersElement();\r\n\t\t\r\n\t\tthis.moving = column;\r\n\t\tthis.startX = (this.touchMove ? e.touches[0].pageX : e.pageX) - Helpers.elOffset(element).left;\r\n\t\t\r\n\t\tthis.table.element.classList.add(\"tabulator-block-select\");\r\n\t\t\r\n\t\t//create placeholder\r\n\t\tthis.placeholderElement.style.width = column.getWidth() + \"px\";\r\n\t\tthis.placeholderElement.style.height = column.getHeight() + \"px\";\r\n\t\t\r\n\t\telement.parentNode.insertBefore(this.placeholderElement, element);\r\n\t\telement.parentNode.removeChild(element);\r\n\t\t\r\n\t\t//create hover element\r\n\t\tthis.hoverElement = element.cloneNode(true);\r\n\t\tthis.hoverElement.classList.add(\"tabulator-moving\");\r\n\t\t\r\n\t\tthis.table.columnManager.getElement().appendChild(this.hoverElement);\r\n\t\t\r\n\t\tthis.hoverElement.style.left = \"0\";\r\n\t\tthis.hoverElement.style.bottom = (headerElement.clientHeight - headersElement.offsetHeight) + \"px\";\r\n\t\t\r\n\t\tif(!this.touchMove){\r\n\t\t\tthis._bindMouseMove();\r\n\t\t\t\r\n\t\t\tdocument.body.addEventListener(\"mousemove\", this.moveHover);\r\n\t\t\tdocument.body.addEventListener(\"mouseup\", this.endMove);\r\n\t\t}\r\n\t\t\r\n\t\tthis.moveHover(e);\r\n\t}\r\n\t\r\n\t_bindMouseMove(){\r\n\t\tthis.table.columnManager.columnsByIndex.forEach(function(column){\r\n\t\t\tif(column.modules.moveColumn.mousemove){\r\n\t\t\t\tcolumn.getElement().addEventListener(\"mousemove\", column.modules.moveColumn.mousemove);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\t\r\n\t_unbindMouseMove(){\r\n\t\tthis.table.columnManager.columnsByIndex.forEach(function(column){\r\n\t\t\tif(column.modules.moveColumn.mousemove){\r\n\t\t\t\tcolumn.getElement().removeEventListener(\"mousemove\", column.modules.moveColumn.mousemove);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\t\r\n\tmoveColumn(column, after){\r\n\t\tvar movingCells = this.moving.getCells();\r\n\t\t\r\n\t\tthis.toCol = column;\r\n\t\tthis.toColAfter = after;\r\n\t\t\r\n\t\tif(after){\r\n\t\t\tcolumn.getCells().forEach(function(cell, i){\r\n\t\t\t\tvar cellEl = cell.getElement(true);\r\n\t\t\t\t\r\n\t\t\t\tif(cellEl.parentNode && movingCells[i]){\r\n\t\t\t\t\tcellEl.parentNode.insertBefore(movingCells[i].getElement(), cellEl.nextSibling);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tcolumn.getCells().forEach(function(cell, i){\r\n\t\t\t\tvar cellEl = cell.getElement(true);\r\n\t\t\t\t\r\n\t\t\t\tif(cellEl.parentNode && movingCells[i]){\r\n\t\t\t\t\tcellEl.parentNode.insertBefore(movingCells[i].getElement(), cellEl);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\t\r\n\tendMove(e){\r\n\t\tif(e.which === 1 || this.touchMove){\r\n\t\t\tthis._unbindMouseMove();\r\n\t\t\t\r\n\t\t\tthis.placeholderElement.parentNode.insertBefore(this.moving.getElement(), this.placeholderElement.nextSibling);\r\n\t\t\tthis.placeholderElement.parentNode.removeChild(this.placeholderElement);\r\n\t\t\tthis.hoverElement.parentNode.removeChild(this.hoverElement);\r\n\t\t\t\r\n\t\t\tthis.table.element.classList.remove(\"tabulator-block-select\");\r\n\t\t\t\r\n\t\t\tif(this.toCol){\r\n\t\t\t\tthis.table.columnManager.moveColumnActual(this.moving, this.toCol, this.toColAfter);\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tthis.moving = false;\r\n\t\t\tthis.toCol = false;\r\n\t\t\tthis.toColAfter = false;\r\n\t\t\t\r\n\t\t\tif(!this.touchMove){\r\n\t\t\t\tdocument.body.removeEventListener(\"mousemove\", this.moveHover);\r\n\t\t\t\tdocument.body.removeEventListener(\"mouseup\", this.endMove);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\tmoveHover(e){\r\n\t\tvar columnHolder = this.table.columnManager.getElement(),\r\n\t\tscrollLeft = columnHolder.scrollLeft,\r\n\t\txPos = ((this.touchMove ? e.touches[0].pageX : e.pageX) - Helpers.elOffset(columnHolder).left) + scrollLeft,\r\n\t\tscrollPos;\r\n\t\t\r\n\t\tthis.hoverElement.style.left = (xPos - this.startX) + \"px\";\r\n\t\t\r\n\t\tif(xPos - scrollLeft < this.autoScrollMargin){\r\n\t\t\tif(!this.autoScrollTimeout){\r\n\t\t\t\tthis.autoScrollTimeout = setTimeout(() => {\r\n\t\t\t\t\tscrollPos = Math.max(0,scrollLeft-5);\r\n\t\t\t\t\tthis.table.rowManager.getElement().scrollLeft = scrollPos;\r\n\t\t\t\t\tthis.autoScrollTimeout = false;\r\n\t\t\t\t}, 1);\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\tif(scrollLeft + columnHolder.clientWidth - xPos < this.autoScrollMargin){\r\n\t\t\tif(!this.autoScrollTimeout){\r\n\t\t\t\tthis.autoScrollTimeout = setTimeout(() => {\r\n\t\t\t\t\tscrollPos = Math.min(columnHolder.clientWidth, scrollLeft+5);\r\n\t\t\t\t\tthis.table.rowManager.getElement().scrollLeft = scrollPos;\r\n\t\t\t\t\tthis.autoScrollTimeout = false;\r\n\t\t\t\t}, 1);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n\r\nMoveColumns.moduleName = \"moveColumn\";\r\n\r\nexport default MoveColumns;\r\n","import Module from '../../core/Module.js';\r\nimport Helpers from '../../core/tools/Helpers.js';\r\n\r\nclass MoveRows extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.placeholderElement = this.createPlaceholderElement();\r\n\t\tthis.hoverElement = false; //floating row header element\r\n\t\tthis.checkTimeout = false; //click check timeout holder\r\n\t\tthis.checkPeriod = 150; //period to wait on mousedown to consider this a move and not a click\r\n\t\tthis.moving = false; //currently moving row\r\n\t\tthis.toRow = false; //destination row\r\n\t\tthis.toRowAfter = false; //position of moving row relative to the destination row\r\n\t\tthis.hasHandle = false; //row has handle instead of fully movable row\r\n\t\tthis.startY = 0; //starting Y position within header element\r\n\t\tthis.startX = 0; //starting X position within header element\r\n\r\n\t\tthis.moveHover = this.moveHover.bind(this);\r\n\t\tthis.endMove = this.endMove.bind(this);\r\n\t\tthis.tableRowDropEvent = false;\r\n\r\n\t\tthis.touchMove = false;\r\n\r\n\t\tthis.connection = false;\r\n\t\tthis.connectionSelectorsTables = false;\r\n\t\tthis.connectionSelectorsElements = false;\r\n\t\tthis.connectionElements = [];\r\n\t\tthis.connections = [];\r\n\r\n\t\tthis.connectedTable = false;\r\n\t\tthis.connectedRow = false;\r\n\r\n\t\tthis.registerTableOption(\"movableRows\", false); //enable movable rows\r\n\t\tthis.registerTableOption(\"movableRowsConnectedTables\", false); //tables for movable rows to be connected to\r\n\t\tthis.registerTableOption(\"movableRowsConnectedElements\", false); //other elements for movable rows to be connected to\r\n\t\tthis.registerTableOption(\"movableRowsSender\", false);\r\n\t\tthis.registerTableOption(\"movableRowsReceiver\", \"insert\");\r\n\r\n\t\tthis.registerColumnOption(\"rowHandle\");\r\n\t}\r\n\r\n\tcreatePlaceholderElement(){\r\n\t\tvar el = document.createElement(\"div\");\r\n\r\n\t\tel.classList.add(\"tabulator-row\");\r\n\t\tel.classList.add(\"tabulator-row-placeholder\");\r\n\r\n\t\treturn el;\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tif(this.table.options.movableRows){\r\n\t\t\tthis.connectionSelectorsTables = this.table.options.movableRowsConnectedTables;\r\n\t\t\tthis.connectionSelectorsElements = this.table.options.movableRowsConnectedElements;\r\n\r\n\t\t\tthis.connection = this.connectionSelectorsTables || this.connectionSelectorsElements;\r\n\r\n\t\t\tthis.subscribe(\"cell-init\", this.initializeCell.bind(this));\r\n\t\t\tthis.subscribe(\"column-init\", this.initializeColumn.bind(this));\r\n\t\t\tthis.subscribe(\"row-init\", this.initializeRow.bind(this));\r\n\t\t}\r\n\t}\r\n\r\n\tinitializeGroupHeader(group){\r\n\t\tvar self = this,\r\n\t\tconfig = {};\r\n\r\n\t\t//inter table drag drop\r\n\t\tconfig.mouseup = function(e){\r\n\t\t\tself.tableRowDrop(e, group);\r\n\t\t}.bind(self);\r\n\r\n\t\t//same table drag drop\r\n\t\tconfig.mousemove = function(e){\r\n\t\t\tvar rowEl;\r\n\r\n\t\t\tif(((e.pageY - Helpers.elOffset(group.element).top) + self.table.rowManager.element.scrollTop) > (group.getHeight() / 2)){\r\n\t\t\t\tif(self.toRow !== group || !self.toRowAfter){\r\n\t\t\t\t\trowEl = group.getElement();\r\n\t\t\t\t\trowEl.parentNode.insertBefore(self.placeholderElement, rowEl.nextSibling);\r\n\t\t\t\t\tself.moveRow(group, true);\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tif(self.toRow !== group || self.toRowAfter){\r\n\t\t\t\t\trowEl = group.getElement();\r\n\t\t\t\t\tif(rowEl.previousSibling){\r\n\t\t\t\t\t\trowEl.parentNode.insertBefore(self.placeholderElement, rowEl);\r\n\t\t\t\t\t\tself.moveRow(group, false);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}.bind(self);\r\n\r\n\t\tgroup.modules.moveRow = config;\r\n\t}\r\n\r\n\tinitializeRow(row){\r\n\t\tvar self = this,\r\n\t\tconfig = {},\r\n\t\trowEl;\r\n\r\n\t\t//inter table drag drop\r\n\t\tconfig.mouseup = function(e){\r\n\t\t\tself.tableRowDrop(e, row);\r\n\t\t}.bind(self);\r\n\r\n\t\t//same table drag drop\r\n\t\tconfig.mousemove = function(e){\r\n\t\t\tvar rowEl = row.getElement();\r\n\r\n\t\t\tif(((e.pageY - Helpers.elOffset(rowEl).top) + self.table.rowManager.element.scrollTop) > (row.getHeight() / 2)){\r\n\t\t\t\tif(self.toRow !== row || !self.toRowAfter){\r\n\t\t\t\t\trowEl.parentNode.insertBefore(self.placeholderElement, rowEl.nextSibling);\r\n\t\t\t\t\tself.moveRow(row, true);\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tif(self.toRow !== row || self.toRowAfter){\r\n\t\t\t\t\trowEl.parentNode.insertBefore(self.placeholderElement, rowEl);\r\n\t\t\t\t\tself.moveRow(row, false);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}.bind(self);\r\n\r\n\r\n\t\tif(!this.hasHandle){\r\n\r\n\t\t\trowEl = row.getElement();\r\n\r\n\t\t\trowEl.addEventListener(\"mousedown\", function(e){\r\n\t\t\t\tif(e.which === 1){\r\n\t\t\t\t\tself.checkTimeout = setTimeout(function(){\r\n\t\t\t\t\t\tself.startMove(e, row);\r\n\t\t\t\t\t}, self.checkPeriod);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\trowEl.addEventListener(\"mouseup\", function(e){\r\n\t\t\t\tif(e.which === 1){\r\n\t\t\t\t\tif(self.checkTimeout){\r\n\t\t\t\t\t\tclearTimeout(self.checkTimeout);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tthis.bindTouchEvents(row, row.getElement());\r\n\t\t}\r\n\r\n\t\trow.modules.moveRow = config;\r\n\t}\r\n\r\n\tinitializeColumn(column){\r\n\t\tif(column.definition.rowHandle && this.table.options.movableRows !== false){\r\n\t\t\tthis.hasHandle = true;\r\n\t\t}\r\n\t}\r\n\r\n\tinitializeCell(cell){\r\n\t\tif(cell.column.definition.rowHandle && this.table.options.movableRows !== false){\r\n\t\t\tvar self = this,\r\n\t\t\tcellEl = cell.getElement(true);\r\n\r\n\t\t\tcellEl.addEventListener(\"mousedown\", function(e){\r\n\t\t\t\tif(e.which === 1){\r\n\t\t\t\t\tself.checkTimeout = setTimeout(function(){\r\n\t\t\t\t\t\tself.startMove(e, cell.row);\r\n\t\t\t\t\t}, self.checkPeriod);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tcellEl.addEventListener(\"mouseup\", function(e){\r\n\t\t\t\tif(e.which === 1){\r\n\t\t\t\t\tif(self.checkTimeout){\r\n\t\t\t\t\t\tclearTimeout(self.checkTimeout);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tthis.bindTouchEvents(cell.row, cellEl);\r\n\t\t}\r\n\t}\r\n\r\n\tbindTouchEvents(row, element){\r\n\t\tvar startYMove = false, //shifting center position of the cell\r\n\t\tnextRow, prevRow, nextRowHeight, prevRowHeight, nextRowHeightLast, prevRowHeightLast;\r\n\r\n\t\telement.addEventListener(\"touchstart\", (e) => {\r\n\t\t\tthis.checkTimeout = setTimeout(() => {\r\n\t\t\t\tthis.touchMove = true;\r\n\t\t\t\tnextRow = row.nextRow();\r\n\t\t\t\tnextRowHeight = nextRow ? nextRow.getHeight()/2 : 0;\r\n\t\t\t\tprevRow = row.prevRow();\r\n\t\t\t\tprevRowHeight = prevRow ? prevRow.getHeight()/2 : 0;\r\n\t\t\t\tnextRowHeightLast = 0;\r\n\t\t\t\tprevRowHeightLast = 0;\r\n\t\t\t\tstartYMove = false;\r\n\r\n\t\t\t\tthis.startMove(e, row);\r\n\t\t\t}, this.checkPeriod);\r\n\t\t}, {passive: true});\r\n\t\tthis.moving, this.toRow, this.toRowAfter;\r\n\t\telement.addEventListener(\"touchmove\", (e) => {\r\n\r\n\t\t\tvar diff, moveToRow;\r\n\r\n\t\t\tif(this.moving){\r\n\t\t\t\te.preventDefault();\r\n\r\n\t\t\t\tthis.moveHover(e);\r\n\r\n\t\t\t\tif(!startYMove){\r\n\t\t\t\t\tstartYMove = e.touches[0].pageY;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tdiff = e.touches[0].pageY - startYMove;\r\n\r\n\t\t\t\tif(diff > 0){\r\n\t\t\t\t\tif(nextRow && diff - nextRowHeightLast > nextRowHeight){\r\n\t\t\t\t\t\tmoveToRow = nextRow;\r\n\r\n\t\t\t\t\t\tif(moveToRow !== row){\r\n\t\t\t\t\t\t\tstartYMove = e.touches[0].pageY;\r\n\t\t\t\t\t\t\tmoveToRow.getElement().parentNode.insertBefore(this.placeholderElement, moveToRow.getElement().nextSibling);\r\n\t\t\t\t\t\t\tthis.moveRow(moveToRow, true);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}else{\r\n\t\t\t\t\tif(prevRow && -diff - prevRowHeightLast > prevRowHeight){\r\n\t\t\t\t\t\tmoveToRow = prevRow;\r\n\r\n\t\t\t\t\t\tif(moveToRow !== row){\r\n\t\t\t\t\t\t\tstartYMove = e.touches[0].pageY;\r\n\t\t\t\t\t\t\tmoveToRow.getElement().parentNode.insertBefore(this.placeholderElement, moveToRow.getElement());\r\n\t\t\t\t\t\t\tthis.moveRow(moveToRow, false);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(moveToRow){\r\n\t\t\t\t\tnextRow = moveToRow.nextRow();\r\n\t\t\t\t\tnextRowHeightLast = nextRowHeight;\r\n\t\t\t\t\tnextRowHeight = nextRow ? nextRow.getHeight() / 2 : 0;\r\n\t\t\t\t\tprevRow = moveToRow.prevRow();\r\n\t\t\t\t\tprevRowHeightLast = prevRowHeight;\r\n\t\t\t\t\tprevRowHeight = prevRow ? prevRow.getHeight() / 2 : 0;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\telement.addEventListener(\"touchend\", (e) => {\r\n\t\t\tif(this.checkTimeout){\r\n\t\t\t\tclearTimeout(this.checkTimeout);\r\n\t\t\t}\r\n\t\t\tif(this.moving){\r\n\t\t\t\tthis.endMove(e);\r\n\t\t\t\tthis.touchMove = false;\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t_bindMouseMove(){\r\n\t\tthis.table.rowManager.getDisplayRows().forEach((row) => {\r\n\t\t\tif((row.type === \"row\" || row.type === \"group\") && row.modules.moveRow && row.modules.moveRow.mousemove){\r\n\t\t\t\trow.getElement().addEventListener(\"mousemove\", row.modules.moveRow.mousemove);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t_unbindMouseMove(){\r\n\t\tthis.table.rowManager.getDisplayRows().forEach((row) => {\r\n\t\t\tif((row.type === \"row\" || row.type === \"group\") && row.modules.moveRow && row.modules.moveRow.mousemove){\r\n\t\t\t\trow.getElement().removeEventListener(\"mousemove\", row.modules.moveRow.mousemove);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tstartMove(e, row){\r\n\t\tvar element = row.getElement();\r\n\r\n\t\tthis.setStartPosition(e, row);\r\n\r\n\t\tthis.moving = row;\r\n\r\n\t\tthis.table.element.classList.add(\"tabulator-block-select\");\r\n\r\n\t\t//create placeholder\r\n\t\tthis.placeholderElement.style.width = row.getWidth() + \"px\";\r\n\t\tthis.placeholderElement.style.height = row.getHeight() + \"px\";\r\n\r\n\t\tif(!this.connection){\r\n\t\t\telement.parentNode.insertBefore(this.placeholderElement, element);\r\n\t\t\telement.parentNode.removeChild(element);\r\n\t\t}else{\r\n\t\t\tthis.table.element.classList.add(\"tabulator-movingrow-sending\");\r\n\t\t\tthis.connectToTables(row);\r\n\t\t}\r\n\r\n\t\t//create hover element\r\n\t\tthis.hoverElement = element.cloneNode(true);\r\n\t\tthis.hoverElement.classList.add(\"tabulator-moving\");\r\n\r\n\t\tif(this.connection){\r\n\t\t\tdocument.body.appendChild(this.hoverElement);\r\n\t\t\tthis.hoverElement.style.left = \"0\";\r\n\t\t\tthis.hoverElement.style.top = \"0\";\r\n\t\t\tthis.hoverElement.style.width = this.table.element.clientWidth + \"px\";\r\n\t\t\tthis.hoverElement.style.whiteSpace = \"nowrap\";\r\n\t\t\tthis.hoverElement.style.overflow = \"hidden\";\r\n\t\t\tthis.hoverElement.style.pointerEvents = \"none\";\r\n\t\t}else{\r\n\t\t\tthis.table.rowManager.getTableElement().appendChild(this.hoverElement);\r\n\r\n\t\t\tthis.hoverElement.style.left = \"0\";\r\n\t\t\tthis.hoverElement.style.top = \"0\";\r\n\r\n\t\t\tthis._bindMouseMove();\r\n\t\t}\r\n\r\n\t\tdocument.body.addEventListener(\"mousemove\", this.moveHover);\r\n\t\tdocument.body.addEventListener(\"mouseup\", this.endMove);\r\n\r\n\t\tthis.dispatchExternal(\"rowMoving\", row.getComponent());\r\n\r\n\t\tthis.moveHover(e);\r\n\t}\r\n\r\n\tsetStartPosition(e, row){\r\n\t\tvar pageX = this.touchMove ? e.touches[0].pageX : e.pageX,\r\n\t\tpageY = this.touchMove ? e.touches[0].pageY : e.pageY,\r\n\t\telement, position;\r\n\r\n\t\telement = row.getElement();\r\n\t\tif(this.connection){\r\n\t\t\tposition = element.getBoundingClientRect();\r\n\r\n\t\t\tthis.startX = position.left - pageX + window.pageXOffset;\r\n\t\t\tthis.startY = position.top - pageY + window.pageYOffset;\r\n\t\t}else{\r\n\t\t\tthis.startY = (pageY - element.getBoundingClientRect().top);\r\n\t\t}\r\n\t}\r\n\r\n\tendMove(e){\r\n\t\tif(!e || e.which === 1 || this.touchMove){\r\n\t\t\tthis._unbindMouseMove();\r\n\r\n\t\t\tif(!this.connection){\r\n\t\t\t\tthis.placeholderElement.parentNode.insertBefore(this.moving.getElement(), this.placeholderElement.nextSibling);\r\n\t\t\t\tthis.placeholderElement.parentNode.removeChild(this.placeholderElement);\r\n\t\t\t}\r\n\r\n\t\t\tthis.hoverElement.parentNode.removeChild(this.hoverElement);\r\n\r\n\t\t\tthis.table.element.classList.remove(\"tabulator-block-select\");\r\n\r\n\t\t\tif(this.toRow){\r\n\t\t\t\tthis.table.rowManager.moveRow(this.moving, this.toRow, this.toRowAfter);\r\n\t\t\t}else{\r\n\t\t\t\tthis.dispatchExternal(\"rowMoveCancelled\", this.moving.getComponent());\r\n\t\t\t}\r\n\r\n\t\t\tthis.moving = false;\r\n\t\t\tthis.toRow = false;\r\n\t\t\tthis.toRowAfter = false;\r\n\r\n\t\t\tdocument.body.removeEventListener(\"mousemove\", this.moveHover);\r\n\t\t\tdocument.body.removeEventListener(\"mouseup\", this.endMove);\r\n\r\n\t\t\tif(this.connection){\r\n\t\t\t\tthis.table.element.classList.remove(\"tabulator-movingrow-sending\");\r\n\t\t\t\tthis.disconnectFromTables();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tmoveRow(row, after){\r\n\t\tthis.toRow = row;\r\n\t\tthis.toRowAfter = after;\r\n\t}\r\n\r\n\tmoveHover(e){\r\n\t\tif(this.connection){\r\n\t\t\tthis.moveHoverConnections.call(this, e);\r\n\t\t}else{\r\n\t\t\tthis.moveHoverTable.call(this, e);\r\n\t\t}\r\n\t}\r\n\r\n\tmoveHoverTable(e){\r\n\t\tvar rowHolder = this.table.rowManager.getElement(),\r\n\t\tscrollTop = rowHolder.scrollTop,\r\n\t\tyPos = ((this.touchMove ? e.touches[0].pageY : e.pageY) - rowHolder.getBoundingClientRect().top) + scrollTop;\r\n\t\t\r\n\t\tthis.hoverElement.style.top = Math.min(yPos - this.startY, this.table.rowManager.element.scrollHeight - this.hoverElement.offsetHeight) + \"px\";\r\n\t}\r\n\r\n\tmoveHoverConnections(e){\r\n\t\tthis.hoverElement.style.left = (this.startX + (this.touchMove ? e.touches[0].pageX : e.pageX)) + \"px\";\r\n\t\tthis.hoverElement.style.top = (this.startY + (this.touchMove ? e.touches[0].pageY : e.pageY)) + \"px\";\r\n\t}\r\n\r\n\telementRowDrop(e, element, row){\r\n\t\tthis.dispatchExternal(\"movableRowsElementDrop\", e, element, row ? row.getComponent() : false);\r\n\t}\r\n\r\n\t//establish connection with other tables\r\n\tconnectToTables(row){\r\n\t\tvar connectionTables;\r\n\r\n\t\tif(this.connectionSelectorsTables){\r\n\t\t\tconnectionTables = this.commsConnections(this.connectionSelectorsTables);\r\n\r\n\t\t\tthis.dispatchExternal(\"movableRowsSendingStart\", connectionTables);\r\n\r\n\t\t\tthis.commsSend(this.connectionSelectorsTables, \"moveRow\", \"connect\", {\r\n\t\t\t\trow:row,\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif(this.connectionSelectorsElements){\r\n\r\n\t\t\tthis.connectionElements = [];\r\n\r\n\t\t\tif(!Array.isArray(this.connectionSelectorsElements)){\r\n\t\t\t\tthis.connectionSelectorsElements = [this.connectionSelectorsElements];\r\n\t\t\t}\r\n\r\n\t\t\tthis.connectionSelectorsElements.forEach((query) => {\r\n\t\t\t\tif(typeof query === \"string\"){\r\n\t\t\t\t\tthis.connectionElements = this.connectionElements.concat(Array.prototype.slice.call(document.querySelectorAll(query)));\r\n\t\t\t\t}else{\r\n\t\t\t\t\tthis.connectionElements.push(query);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tthis.connectionElements.forEach((element) => {\r\n\t\t\t\tvar dropEvent = (e) => {\r\n\t\t\t\t\tthis.elementRowDrop(e, element, this.moving);\r\n\t\t\t\t};\r\n\r\n\t\t\t\telement.addEventListener(\"mouseup\", dropEvent);\r\n\t\t\t\telement.tabulatorElementDropEvent = dropEvent;\r\n\r\n\t\t\t\telement.classList.add(\"tabulator-movingrow-receiving\");\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\t//disconnect from other tables\r\n\tdisconnectFromTables(){\r\n\t\tvar connectionTables;\r\n\r\n\t\tif(this.connectionSelectorsTables){\r\n\t\t\tconnectionTables = this.commsConnections(this.connectionSelectorsTables);\r\n\r\n\t\t\tthis.dispatchExternal(\"movableRowsSendingStop\", connectionTables);\r\n\r\n\t\t\tthis.commsSend(this.connectionSelectorsTables, \"moveRow\", \"disconnect\");\r\n\t\t}\r\n\r\n\t\tthis.connectionElements.forEach((element) => {\r\n\t\t\telement.classList.remove(\"tabulator-movingrow-receiving\");\r\n\t\t\telement.removeEventListener(\"mouseup\", element.tabulatorElementDropEvent);\r\n\t\t\tdelete element.tabulatorElementDropEvent;\r\n\t\t});\r\n\t}\r\n\r\n\t//accept incomming connection\r\n\tconnect(table, row){\r\n\t\tif(!this.connectedTable){\r\n\t\t\tthis.connectedTable = table;\r\n\t\t\tthis.connectedRow = row;\r\n\r\n\t\t\tthis.table.element.classList.add(\"tabulator-movingrow-receiving\");\r\n\r\n\t\t\tthis.table.rowManager.getDisplayRows().forEach((row) => {\r\n\t\t\t\tif(row.type === \"row\" && row.modules.moveRow && row.modules.moveRow.mouseup){\r\n\t\t\t\t\trow.getElement().addEventListener(\"mouseup\", row.modules.moveRow.mouseup);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tthis.tableRowDropEvent = this.tableRowDrop.bind(this);\r\n\r\n\t\t\tthis.table.element.addEventListener(\"mouseup\", this.tableRowDropEvent);\r\n\r\n\t\t\tthis.dispatchExternal(\"movableRowsReceivingStart\", row, table);\r\n\r\n\t\t\treturn true;\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Move Row Error - Table cannot accept connection, already connected to table:\", this.connectedTable);\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\t//close incoming connection\r\n\tdisconnect(table){\r\n\t\tif(table === this.connectedTable){\r\n\t\t\tthis.connectedTable = false;\r\n\t\t\tthis.connectedRow = false;\r\n\r\n\t\t\tthis.table.element.classList.remove(\"tabulator-movingrow-receiving\");\r\n\r\n\t\t\tthis.table.rowManager.getDisplayRows().forEach((row) =>{\r\n\t\t\t\tif(row.type === \"row\" && row.modules.moveRow && row.modules.moveRow.mouseup){\r\n\t\t\t\t\trow.getElement().removeEventListener(\"mouseup\", row.modules.moveRow.mouseup);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tthis.table.element.removeEventListener(\"mouseup\", this.tableRowDropEvent);\r\n\r\n\t\t\tthis.dispatchExternal(\"movableRowsReceivingStop\", table);\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Move Row Error - trying to disconnect from non connected table\");\r\n\t\t}\r\n\t}\r\n\r\n\tdropComplete(table, row, success){\r\n\t\tvar sender = false;\r\n\r\n\t\tif(success){\r\n\r\n\t\t\tswitch(typeof this.table.options.movableRowsSender){\r\n\t\t\t\tcase \"string\":\r\n\t\t\t\t\tsender = this.senders[this.table.options.movableRowsSender];\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"function\":\r\n\t\t\t\t\tsender = this.table.options.movableRowsSender;\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\r\n\t\t\tif(sender){\r\n\t\t\t\tsender.call(this, this.moving ? this.moving.getComponent() : undefined, row ? row.getComponent() : undefined, table);\r\n\t\t\t}else{\r\n\t\t\t\tif(this.table.options.movableRowsSender){\r\n\t\t\t\t\tconsole.warn(\"Mover Row Error - no matching sender found:\", this.table.options.movableRowsSender);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tthis.dispatchExternal(\"movableRowsSent\", this.moving.getComponent(), row ? row.getComponent() : undefined, table);\r\n\t\t}else{\r\n\t\t\tthis.dispatchExternal(\"movableRowsSentFailed\", this.moving.getComponent(), row ? row.getComponent() : undefined, table);\r\n\t\t}\r\n\r\n\t\tthis.endMove();\r\n\t}\r\n\r\n\ttableRowDrop(e, row){\r\n\t\tvar receiver = false,\r\n\t\tsuccess = false;\r\n\r\n\t\te.stopImmediatePropagation();\r\n\r\n\t\tswitch(typeof this.table.options.movableRowsReceiver){\r\n\t\t\tcase \"string\":\r\n\t\t\t\treceiver = this.receivers[this.table.options.movableRowsReceiver];\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase \"function\":\r\n\t\t\t\treceiver = this.table.options.movableRowsReceiver;\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\tif(receiver){\r\n\t\t\tsuccess = receiver.call(this, this.connectedRow.getComponent(), row ? row.getComponent() : undefined, this.connectedTable);\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Mover Row Error - no matching receiver found:\", this.table.options.movableRowsReceiver);\r\n\t\t}\r\n\r\n\t\tif(success){\r\n\t\t\tthis.dispatchExternal(\"movableRowsReceived\", this.connectedRow.getComponent(), row ? row.getComponent() : undefined, this.connectedTable);\r\n\t\t}else{\r\n\t\t\tthis.dispatchExternal(\"movableRowsReceivedFailed\", this.connectedRow.getComponent(), row ? row.getComponent() : undefined, this.connectedTable);\r\n\t\t}\r\n\r\n\t\tthis.commsSend(this.connectedTable, \"moveRow\", \"dropcomplete\", {\r\n\t\t\trow:row,\r\n\t\t\tsuccess:success,\r\n\t\t});\r\n\t}\r\n\r\n\tcommsReceived(table, action, data){\r\n\t\tswitch(action){\r\n\t\t\tcase \"connect\":\r\n\t\t\t\treturn this.connect(table, data.row);\r\n\r\n\t\t\tcase \"disconnect\":\r\n\t\t\t\treturn this.disconnect(table);\r\n\r\n\t\t\tcase \"dropcomplete\":\r\n\t\t\t\treturn this.dropComplete(table, data.row, data.success);\r\n\t\t}\r\n\t}\r\n}\r\n\r\nMoveRows.prototype.receivers = {\r\n\tinsert:function(fromRow, toRow, fromTable){\r\n\t\tthis.table.addRow(fromRow.getData(), undefined, toRow);\r\n\t\treturn true;\r\n\t},\r\n\r\n\tadd:function(fromRow, toRow, fromTable){\r\n\t\tthis.table.addRow(fromRow.getData());\r\n\t\treturn true;\r\n\t},\r\n\r\n\tupdate:function(fromRow, toRow, fromTable){\r\n\t\tif(toRow){\r\n\t\t\ttoRow.update(fromRow.getData());\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t},\r\n\r\n\treplace:function(fromRow, toRow, fromTable){\r\n\t\tif(toRow){\r\n\t\t\tthis.table.addRow(fromRow.getData(), undefined, toRow);\r\n\t\t\ttoRow.delete();\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t},\r\n};\r\n\r\nMoveRows.prototype.senders = {\r\n\tdelete:function(fromRow, toRow, toTable){\r\n\t\tfromRow.delete();\r\n\t}\r\n};\r\n\r\nMoveRows.moduleName = \"moveRow\";\r\n\r\nexport default MoveRows;","import Module from '../../core/Module.js';\r\n\r\nimport defaultMutators from './defaults/mutators.js';\r\n\r\nclass Mutator extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.allowedTypes = [\"\", \"data\", \"edit\", \"clipboard\"]; //list of mutation types\r\n\t\tthis.enabled = true;\r\n\r\n\t\tthis.registerColumnOption(\"mutator\");\r\n\t\tthis.registerColumnOption(\"mutatorParams\");\r\n\t\tthis.registerColumnOption(\"mutatorData\");\r\n\t\tthis.registerColumnOption(\"mutatorDataParams\");\r\n\t\tthis.registerColumnOption(\"mutatorEdit\");\r\n\t\tthis.registerColumnOption(\"mutatorEditParams\");\r\n\t\tthis.registerColumnOption(\"mutatorClipboard\");\r\n\t\tthis.registerColumnOption(\"mutatorClipboardParams\");\r\n\t\tthis.registerColumnOption(\"mutateLink\");\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tthis.subscribe(\"cell-value-changing\", this.transformCell.bind(this));\r\n\t\tthis.subscribe(\"cell-value-changed\", this.mutateLink.bind(this));\r\n\t\tthis.subscribe(\"column-layout\", this.initializeColumn.bind(this));\r\n\t\tthis.subscribe(\"row-data-init-before\", this.rowDataChanged.bind(this));\r\n\t\tthis.subscribe(\"row-data-changing\", this.rowDataChanged.bind(this));\r\n\t}\r\n\r\n\trowDataChanged(row, tempData, updatedData){\r\n\t\treturn this.transformRow(tempData, \"data\", updatedData);\r\n\t}\r\n\r\n\t//initialize column mutator\r\n\tinitializeColumn(column){\r\n\t\tvar match = false,\r\n\t\tconfig = {};\r\n\r\n\t\tthis.allowedTypes.forEach((type) => {\r\n\t\t\tvar key = \"mutator\" + (type.charAt(0).toUpperCase() + type.slice(1)),\r\n\t\t\tmutator;\r\n\r\n\t\t\tif(column.definition[key]){\r\n\t\t\t\tmutator = this.lookupMutator(column.definition[key]);\r\n\r\n\t\t\t\tif(mutator){\r\n\t\t\t\t\tmatch = true;\r\n\r\n\t\t\t\t\tconfig[key] = {\r\n\t\t\t\t\t\tmutator:mutator,\r\n\t\t\t\t\t\tparams: column.definition[key + \"Params\"] || {},\r\n\t\t\t\t\t};\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tif(match){\r\n\t\t\tcolumn.modules.mutate = config;\r\n\t\t}\r\n\t}\r\n\r\n\tlookupMutator(value){\r\n\t\tvar mutator = false;\r\n\r\n\t\t//set column mutator\r\n\t\tswitch(typeof value){\r\n\t\t\tcase \"string\":\r\n\t\t\t\tif(Mutator.mutators[value]){\r\n\t\t\t\t\tmutator = Mutator.mutators[value];\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.warn(\"Mutator Error - No such mutator found, ignoring: \", value);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase \"function\":\r\n\t\t\t\tmutator = value;\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\treturn mutator;\r\n\t}\r\n\r\n\t//apply mutator to row\r\n\ttransformRow(data, type, updatedData){\r\n\t\tvar key = \"mutator\" + (type.charAt(0).toUpperCase() + type.slice(1)),\r\n\t\tvalue;\r\n\r\n\t\tif(this.enabled){\r\n\r\n\t\t\tthis.table.columnManager.traverse((column) => {\r\n\t\t\t\tvar mutator, params, component;\r\n\r\n\t\t\t\tif(column.modules.mutate){\r\n\t\t\t\t\tmutator = column.modules.mutate[key] || column.modules.mutate.mutator || false;\r\n\r\n\t\t\t\t\tif(mutator){\r\n\t\t\t\t\t\tvalue = column.getFieldValue(typeof updatedData !== \"undefined\" ? updatedData : data);\r\n\r\n\t\t\t\t\t\tif(type == \"data\" || typeof value !== \"undefined\"){\r\n\t\t\t\t\t\t\tcomponent = column.getComponent();\r\n\t\t\t\t\t\t\tparams = typeof mutator.params === \"function\" ? mutator.params(value, data, type, component) : mutator.params;\r\n\t\t\t\t\t\t\tcolumn.setFieldValue(data, mutator.mutator(value, data, type, params, component));\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn data;\r\n\t}\r\n\r\n\t//apply mutator to new cell value\r\n\ttransformCell(cell, value){\r\n\t\tif(cell.column.modules.mutate){\r\n\t\t\tvar mutator = cell.column.modules.mutate.mutatorEdit || cell.column.modules.mutate.mutator || false,\r\n\t\t\ttempData = {};\r\n\r\n\t\t\tif(mutator){\r\n\t\t\t\ttempData = Object.assign(tempData, cell.row.getData());\r\n\t\t\t\tcell.column.setFieldValue(tempData, value);\r\n\t\t\t\treturn mutator.mutator(value, tempData, \"edit\", mutator.params, cell.getComponent());\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn value;\r\n\t}\r\n\r\n\tmutateLink(cell){\r\n\t\tvar links = cell.column.definition.mutateLink;\r\n\r\n\t\tif(links){\r\n\t\t\tif(!Array.isArray(links)){\r\n\t\t\t\tlinks = [links];\r\n\t\t\t}\r\n\r\n\t\t\tlinks.forEach((link) => {\r\n\t\t\t\tvar linkCell = cell.row.getCell(link);\r\n\r\n\t\t\t\tif(linkCell){\r\n\t\t\t\t\tlinkCell.setValue(linkCell.getValue(), true, true);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tenable(){\r\n\t\tthis.enabled = true;\r\n\t}\r\n\r\n\tdisable(){\r\n\t\tthis.enabled = false;\r\n\t}\r\n}\r\n\r\nMutator.moduleName = \"mutator\";\r\n\r\n//load defaults\r\nMutator.mutators = defaultMutators;\r\n\r\nexport default Mutator;","export default {};","import rows from './pageCounters/rows.js';\r\nimport pages from './pageCounters/pages.js';\r\n\r\n\r\nexport default {\r\n\trows:rows,\r\n\tpages:pages,\r\n};","export default function(pageSize, currentRow, currentPage, totalRows, totalPages){\r\n\tvar el = document.createElement(\"span\"),\r\n\tshowingEl = document.createElement(\"span\"),\r\n\tvalueEl = document.createElement(\"span\"),\r\n\tofEl = document.createElement(\"span\"),\r\n\ttotalEl = document.createElement(\"span\"),\r\n\trowsEl = document.createElement(\"span\");\r\n\r\n\tthis.table.modules.localize.langBind(\"pagination|counter|showing\", (value) => {\r\n\t\tshowingEl.innerHTML = value;\r\n\t});\r\n\r\n\tthis.table.modules.localize.langBind(\"pagination|counter|of\", (value) => {\r\n\t\tofEl.innerHTML = value;\r\n\t});\r\n\r\n\tthis.table.modules.localize.langBind(\"pagination|counter|rows\", (value) => {\r\n\t\trowsEl.innerHTML = value;\r\n\t});\r\n\r\n\tif(totalRows){\r\n\t\tvalueEl.innerHTML = \" \" + currentRow + \"-\" + Math.min((currentRow + pageSize - 1), totalRows) + \" \";\r\n\t\t\r\n\t\ttotalEl.innerHTML = \" \" + totalRows + \" \";\r\n\t\t\r\n\t\tel.appendChild(showingEl);\r\n\t\tel.appendChild(valueEl);\r\n\t\tel.appendChild(ofEl);\r\n\t\tel.appendChild(totalEl);\r\n\t\tel.appendChild(rowsEl);\r\n\t}else{\r\n\t\tvalueEl.innerHTML = \" 0 \";\r\n\r\n\t\tel.appendChild(showingEl);\r\n\t\tel.appendChild(valueEl);\r\n\t\tel.appendChild(rowsEl);\r\n\t}\r\n\t\r\n\treturn el;\r\n}","export default function(pageSize, currentRow, currentPage, totalRows, totalPages){\r\n\r\n\tvar el = document.createElement(\"span\"),\r\n\tshowingEl = document.createElement(\"span\"),\r\n\tvalueEl = document.createElement(\"span\"),\r\n\tofEl = document.createElement(\"span\"),\r\n\ttotalEl = document.createElement(\"span\"),\r\n\trowsEl = document.createElement(\"span\");\r\n\t\r\n\tthis.table.modules.localize.langBind(\"pagination|counter|showing\", (value) => {\r\n\t\tshowingEl.innerHTML = value;\r\n\t});\r\n\t\r\n\tvalueEl.innerHTML = \" \" + currentPage + \" \";\r\n\t\r\n\tthis.table.modules.localize.langBind(\"pagination|counter|of\", (value) => {\r\n\t\tofEl.innerHTML = value;\r\n\t});\r\n\t\r\n\ttotalEl.innerHTML = \" \" + totalPages + \" \";\r\n\t\r\n\tthis.table.modules.localize.langBind(\"pagination|counter|pages\", (value) => {\r\n\t\trowsEl.innerHTML = value;\r\n\t});\r\n\t\r\n\tel.appendChild(showingEl);\r\n\tel.appendChild(valueEl);\r\n\tel.appendChild(ofEl);\r\n\tel.appendChild(totalEl);\r\n\tel.appendChild(rowsEl);\r\n\t\r\n\treturn el;\r\n}","import Module from '../../core/Module.js';\r\n\r\nimport defaultPageCounters from './defaults/pageCounters.js';\r\n\r\nclass Page extends Module{\r\n\t\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\t\t\r\n\t\tthis.mode = \"local\";\r\n\t\tthis.progressiveLoad = false;\r\n\t\t\r\n\t\tthis.element = null;\r\n\t\tthis.pageCounterElement = null;\r\n\t\tthis.pageCounter = null;\r\n\t\t\r\n\t\tthis.size = 0;\r\n\t\tthis.page = 1;\r\n\t\tthis.count = 5;\r\n\t\tthis.max = 1;\r\n\r\n\t\tthis.remoteRowCountEstimate = null;\r\n\t\t\r\n\t\tthis.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\t\t\tthis.subscribe(\"footer-redraw\", this.footerRedraw.bind(this));\r\n\r\n\t\t\tif(this.table.options.paginationAddRow == \"page\"){\r\n\t\t\t\tthis.subscribe(\"row-adding-position\", this.rowAddingPosition.bind(this));\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif(this.table.options.paginationMode === \"remote\"){\r\n\t\t\t\tthis.subscribe(\"data-params\", this.remotePageParams.bind(this));\r\n\t\t\t\tthis.subscribe(\"data-loaded\", this._parseRemoteData.bind(this));\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif(this.table.options.progressiveLoad){\r\n\t\t\t\tconsole.error(\"Progressive Load Error - Pagination and progressive load cannot be used at the same time\");\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tthis.registerDisplayHandler(this.restOnRenderBefore.bind(this), 40);\r\n\t\t\tthis.registerDisplayHandler(this.getRows.bind(this), 50);\r\n\t\t\t\r\n\t\t\tthis.createElements();\r\n\t\t\tthis.initializePageCounter();\r\n\t\t\tthis.initializePaginator();\r\n\t\t}else if(this.table.options.progressiveLoad){\r\n\t\t\tthis.subscribe(\"data-params\", this.remotePageParams.bind(this));\r\n\t\t\tthis.subscribe(\"data-loaded\", this._parseRemoteData.bind(this));\r\n\t\t\tthis.subscribe(\"table-built\", this.calculatePageSizes.bind(this));\r\n\t\t\tthis.subscribe(\"data-processed\", this.initialLoadComplete.bind(this));\r\n\t\t\t\r\n\t\t\tthis.initializeProgressive(this.table.options.progressiveLoad);\r\n\t\t\t\r\n\t\t\tif(this.table.options.progressiveLoad === \"scroll\"){\r\n\t\t\t\tthis.subscribe(\"scroll-vertical\", this.scrollVertical.bind(this));\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\trowAddingPosition(row, top){\r\n\t\tvar rowManager = this.table.rowManager,\r\n\t\tdisplayRows = rowManager.getDisplayRows(),\r\n\t\tindex;\r\n\t\t\r\n\t\tif(top){\r\n\t\t\tif(displayRows.length){\r\n\t\t\t\tindex = displayRows[0];\r\n\t\t\t}else{\r\n\t\t\t\tif(rowManager.activeRows.length){\r\n\t\t\t\t\tindex = rowManager.activeRows[rowManager.activeRows.length-1];\r\n\t\t\t\t\ttop = false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tif(displayRows.length){\r\n\t\t\t\tindex = displayRows[displayRows.length - 1];\r\n\t\t\t\ttop = displayRows.length < this.size ? false : true;\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\treturn {index, top};\r\n\t}\r\n\t\r\n\tcalculatePageSizes(){\r\n\t\tvar testElRow, testElCell;\r\n\t\t\r\n\t\tif(this.table.options.paginationSize){\r\n\t\t\tthis.size = this.table.options.paginationSize;\r\n\t\t}else{\r\n\t\t\ttestElRow = document.createElement(\"div\");\r\n\t\t\ttestElRow.classList.add(\"tabulator-row\");\r\n\t\t\ttestElRow.style.visibility = \"hidden\";\r\n\t\t\t\r\n\t\t\ttestElCell = document.createElement(\"div\");\r\n\t\t\ttestElCell.classList.add(\"tabulator-cell\");\r\n\t\t\ttestElCell.innerHTML = \"Page Row Test\";\r\n\t\t\t\r\n\t\t\ttestElRow.appendChild(testElCell);\r\n\t\t\t\r\n\t\t\tthis.table.rowManager.getTableElement().appendChild(testElRow);\r\n\t\t\t\r\n\t\t\tthis.size = Math.floor(this.table.rowManager.getElement().clientHeight / testElRow.offsetHeight);\r\n\t\t\t\r\n\t\t\tthis.table.rowManager.getTableElement().removeChild(testElRow);\r\n\t\t}\r\n\r\n\t\tthis.dispatchExternal(\"pageSizeChanged\", this.size);\r\n\t\t\r\n\t\tthis.generatePageSizeSelectList();\r\n\t}\r\n\t\r\n\tinitialLoadComplete(){\r\n\t\tthis.initialLoad = false;\r\n\t}\r\n\t\r\n\tremotePageParams(data, config, silent, params){\r\n\t\tif(!this.initialLoad){\r\n\t\t\tif((this.progressiveLoad && !silent) || (!this.progressiveLoad && !this.dataChanging)){\r\n\t\t\t\tthis.reset(true);\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\t//configure request params\r\n\t\tparams.page = this.page;\r\n\t\t\r\n\t\t//set page size if defined\r\n\t\tif(this.size){\r\n\t\t\tparams.size = this.size;\r\n\t\t}\r\n\t\t\r\n\t\treturn params;\r\n\t}\r\n\t\r\n\t///////////////////////////////////\r\n\t///////// Table Functions /////////\r\n\t///////////////////////////////////\r\n\t\r\n\tuserSetPageToRow(row){\r\n\t\tif(this.table.options.pagination){\r\n\t\t\trow = this.rowManager.findRow(row);\r\n\t\t\t\r\n\t\t\tif(row){\r\n\t\t\t\treturn this.setPageToRow(row);\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\treturn Promise.reject();\r\n\t}\r\n\t\r\n\tuserSetPageSize(size){\r\n\t\tif(this.table.options.pagination){\r\n\t\t\tthis.setPageSize(size);\r\n\t\t\treturn this.setPage(1);\r\n\t\t}else{\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\t///////////////////////////////////\r\n\t///////// Internal Logic //////////\r\n\t///////////////////////////////////\r\n\t\r\n\tscrollVertical(top, dir){\r\n\t\tvar element, diff, margin;\r\n\t\tif(!dir && !this.table.dataLoader.loading){\r\n\t\t\telement = this.table.rowManager.getElement();\r\n\t\t\tdiff = element.scrollHeight - element.clientHeight - top;\r\n\t\t\tmargin = this.table.options.progressiveLoadScrollMargin || (element.clientHeight * 2);\r\n\t\t\t\r\n\t\t\tif(diff < margin){\r\n\t\t\t\tthis.nextPage()\r\n\t\t\t\t\t.catch(() => {}); //consume the exception thrown when on the last page\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\trestOnRenderBefore(rows, renderInPosition){\r\n\t\tif(!renderInPosition){\r\n\t\t\tif(this.mode === \"local\"){\r\n\t\t\t\tthis.reset();\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\treturn rows;\r\n\t}\r\n\t\r\n\trowsUpdated(){\r\n\t\tthis.refreshData(true, \"all\");\r\n\t}\r\n\t\r\n\tcreateElements(){\r\n\t\tvar button;\r\n\t\t\r\n\t\tthis.element = document.createElement(\"span\");\r\n\t\tthis.element.classList.add(\"tabulator-paginator\");\r\n\t\t\r\n\t\tthis.pagesElement = document.createElement(\"span\");\r\n\t\tthis.pagesElement.classList.add(\"tabulator-pages\");\r\n\t\t\r\n\t\tbutton = document.createElement(\"button\");\r\n\t\tbutton.classList.add(\"tabulator-page\");\r\n\t\tbutton.setAttribute(\"type\", \"button\");\r\n\t\tbutton.setAttribute(\"role\", \"button\");\r\n\t\tbutton.setAttribute(\"aria-label\", \"\");\r\n\t\tbutton.setAttribute(\"title\", \"\");\r\n\t\t\r\n\t\tthis.firstBut = button.cloneNode(true);\r\n\t\tthis.firstBut.setAttribute(\"data-page\", \"first\");\r\n\t\t\r\n\t\tthis.prevBut = button.cloneNode(true);\r\n\t\tthis.prevBut.setAttribute(\"data-page\", \"prev\");\r\n\t\t\r\n\t\tthis.nextBut = button.cloneNode(true);\r\n\t\tthis.nextBut.setAttribute(\"data-page\", \"next\");\r\n\t\t\r\n\t\tthis.lastBut = button.cloneNode(true);\r\n\t\tthis.lastBut.setAttribute(\"data-page\", \"last\");\r\n\t\t\r\n\t\tif(this.table.options.paginationSizeSelector){\r\n\t\t\tthis.pageSizeSelect = document.createElement(\"select\");\r\n\t\t\tthis.pageSizeSelect.classList.add(\"tabulator-page-size\");\r\n\t\t}\r\n\t}\r\n\t\r\n\tgeneratePageSizeSelectList(){\r\n\t\tvar pageSizes = [];\r\n\t\t\r\n\t\tif(this.pageSizeSelect){\r\n\t\t\t\r\n\t\t\tif(Array.isArray(this.table.options.paginationSizeSelector)){\r\n\t\t\t\tpageSizes = this.table.options.paginationSizeSelector;\r\n\t\t\t\tthis.pageSizes = pageSizes;\r\n\t\t\t\t\r\n\t\t\t\tif(this.pageSizes.indexOf(this.size) == -1){\r\n\t\t\t\t\tpageSizes.unshift(this.size);\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\t\r\n\t\t\t\tif(this.pageSizes.indexOf(this.size) == -1){\r\n\t\t\t\t\tpageSizes = [];\r\n\t\t\t\t\t\r\n\t\t\t\t\tfor (let i = 1; i < 5; i++){\r\n\t\t\t\t\t\tpageSizes.push(this.size * i);\r\n\t\t\t\t\t}\r\n\t\t\t\t\t\r\n\t\t\t\t\tthis.pageSizes = pageSizes;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tpageSizes = this.pageSizes;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\twhile(this.pageSizeSelect.firstChild) this.pageSizeSelect.removeChild(this.pageSizeSelect.firstChild);\r\n\t\t\t\r\n\t\t\tpageSizes.forEach((item) => {\r\n\t\t\t\tvar itemEl = document.createElement(\"option\");\r\n\t\t\t\titemEl.value = item;\r\n\t\t\t\t\r\n\t\t\t\tif(item === true){\r\n\t\t\t\t\tthis.langBind(\"pagination|all\", function(value){\r\n\t\t\t\t\t\titemEl.innerHTML = value;\r\n\t\t\t\t\t});\r\n\t\t\t\t}else{\r\n\t\t\t\t\titemEl.innerHTML = item;\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\tthis.pageSizeSelect.appendChild(itemEl);\r\n\t\t\t});\r\n\t\t\t\r\n\t\t\tthis.pageSizeSelect.value = this.size;\r\n\t\t}\r\n\t}\r\n\t\r\n\tinitializePageCounter(){\r\n\t\tvar counter = this.table.options.paginationCounter,\r\n\t\tpageCounter = null;\r\n\t\t\r\n\t\tif(counter){\r\n\t\t\tif(typeof counter === \"function\"){\r\n\t\t\t\tpageCounter = counter;\r\n\t\t\t}else{\r\n\t\t\t\tpageCounter = Page.pageCounters[counter];\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif(pageCounter){\r\n\t\t\t\tthis.pageCounter = pageCounter;\r\n\t\t\t\t\r\n\t\t\t\tthis.pageCounterElement = document.createElement(\"span\");\r\n\t\t\t\tthis.pageCounterElement.classList.add(\"tabulator-page-counter\");\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Pagination Error - No such page counter found: \", counter);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\t//setup pagination\r\n\tinitializePaginator(hidden){\r\n\t\tvar pageSelectLabel, paginationCounterHolder;\r\n\t\t\r\n\t\tif(!hidden){\r\n\t\t\t//build pagination element\r\n\t\t\t\r\n\t\t\t//bind localizations\r\n\t\t\tthis.langBind(\"pagination|first\", (value) => {\r\n\t\t\t\tthis.firstBut.innerHTML = value;\r\n\t\t\t});\r\n\t\t\t\r\n\t\t\tthis.langBind(\"pagination|first_title\", (value) => {\r\n\t\t\t\tthis.firstBut.setAttribute(\"aria-label\", value);\r\n\t\t\t\tthis.firstBut.setAttribute(\"title\", value);\r\n\t\t\t});\r\n\t\t\t\r\n\t\t\tthis.langBind(\"pagination|prev\", (value) => {\r\n\t\t\t\tthis.prevBut.innerHTML = value;\r\n\t\t\t});\r\n\t\t\t\r\n\t\t\tthis.langBind(\"pagination|prev_title\", (value) => {\r\n\t\t\t\tthis.prevBut.setAttribute(\"aria-label\", value);\r\n\t\t\t\tthis.prevBut.setAttribute(\"title\", value);\r\n\t\t\t});\r\n\t\t\t\r\n\t\t\tthis.langBind(\"pagination|next\", (value) => {\r\n\t\t\t\tthis.nextBut.innerHTML = value;\r\n\t\t\t});\r\n\t\t\t\r\n\t\t\tthis.langBind(\"pagination|next_title\", (value) => {\r\n\t\t\t\tthis.nextBut.setAttribute(\"aria-label\", value);\r\n\t\t\t\tthis.nextBut.setAttribute(\"title\", value);\r\n\t\t\t});\r\n\t\t\t\r\n\t\t\tthis.langBind(\"pagination|last\", (value) => {\r\n\t\t\t\tthis.lastBut.innerHTML = value;\r\n\t\t\t});\r\n\t\t\t\r\n\t\t\tthis.langBind(\"pagination|last_title\", (value) => {\r\n\t\t\t\tthis.lastBut.setAttribute(\"aria-label\", value);\r\n\t\t\t\tthis.lastBut.setAttribute(\"title\", value);\r\n\t\t\t});\r\n\t\t\t\r\n\t\t\t//click bindings\r\n\t\t\tthis.firstBut.addEventListener(\"click\", () => {\r\n\t\t\t\tthis.setPage(1);\r\n\t\t\t});\r\n\t\t\t\r\n\t\t\tthis.prevBut.addEventListener(\"click\", () => {\r\n\t\t\t\tthis.previousPage();\r\n\t\t\t});\r\n\t\t\t\r\n\t\t\tthis.nextBut.addEventListener(\"click\", () => {\r\n\t\t\t\tthis.nextPage();\r\n\t\t\t});\r\n\t\t\t\r\n\t\t\tthis.lastBut.addEventListener(\"click\", () => {\r\n\t\t\t\tthis.setPage(this.max);\r\n\t\t\t});\r\n\t\t\t\r\n\t\t\tif(this.table.options.paginationElement){\r\n\t\t\t\tthis.element = this.table.options.paginationElement;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif(this.pageSizeSelect){\r\n\t\t\t\tpageSelectLabel = document.createElement(\"label\");\r\n\t\t\t\t\r\n\t\t\t\tthis.langBind(\"pagination|page_size\", (value) => {\r\n\t\t\t\t\tthis.pageSizeSelect.setAttribute(\"aria-label\", value);\r\n\t\t\t\t\tthis.pageSizeSelect.setAttribute(\"title\", value);\r\n\t\t\t\t\tpageSelectLabel.innerHTML = value;\r\n\t\t\t\t});\r\n\t\t\t\t\r\n\t\t\t\tthis.element.appendChild(pageSelectLabel);\r\n\t\t\t\tthis.element.appendChild(this.pageSizeSelect);\r\n\t\t\t\t\r\n\t\t\t\tthis.pageSizeSelect.addEventListener(\"change\", (e) => {\r\n\t\t\t\t\tthis.setPageSize(this.pageSizeSelect.value == \"true\" ? true : this.pageSizeSelect.value);\r\n\t\t\t\t\tthis.setPage(1);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\t//append to DOM\r\n\t\t\tthis.element.appendChild(this.firstBut);\r\n\t\t\tthis.element.appendChild(this.prevBut);\r\n\t\t\tthis.element.appendChild(this.pagesElement);\r\n\t\t\tthis.element.appendChild(this.nextBut);\r\n\t\t\tthis.element.appendChild(this.lastBut);\r\n\t\t\t\r\n\t\t\tif(!this.table.options.paginationElement){\r\n\t\t\t\tif(this.table.options.paginationCounter){\r\n\r\n\t\t\t\t\tpaginationCounterHolder; \r\n\r\n\t\t\t\t\tif(this.table.options.paginationCounterElement){\r\n\t\t\t\t\t\tif(this.table.options.paginationCounterElement instanceof HTMLElement){\r\n\t\t\t\t\t\t\tthis.table.options.paginationCounterElement.appendChild(this.pageCounterElement);\r\n\t\t\t\t\t\t}else if(typeof this.table.options.paginationCounterElement === \"string\"){\r\n\t\t\t\t\t\t\tpaginationCounterHolder = document.querySelector(this.table.options.paginationCounterElement);\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tif(paginationCounterHolder){\r\n\t\t\t\t\t\t\t\tpaginationCounterHolder.appendChild(this.pageCounterElement);\r\n\t\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\t\tconsole.warn(\"Pagination Error - Unable to find element matching paginationCounterElement selector:\", this.table.options.paginationCounterElement);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tthis.footerAppend(this.pageCounterElement);\r\n\t\t\t\t\t}\r\n\t\t\t\t\t\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\tthis.footerAppend(this.element);\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tthis.page = this.table.options.paginationInitialPage;\r\n\t\t\tthis.count = this.table.options.paginationButtonCount;\r\n\t\t}\r\n\t\t\r\n\t\t//set default values\r\n\t\tthis.mode = this.table.options.paginationMode;\r\n\t}\r\n\t\r\n\tinitializeProgressive(mode){\r\n\t\tthis.initializePaginator(true);\r\n\t\tthis.mode = \"progressive_\" + mode;\r\n\t\tthis.progressiveLoad = true;\r\n\t}\r\n\t\r\n\ttrackChanges(){\r\n\t\tthis.dispatch(\"page-changed\");\r\n\t}\r\n\t\r\n\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\t\treturn this.setPage(1);\r\n\t\r\n\t\t\tcase \"prev\":\r\n\t\t\t\treturn this.previousPage();\r\n\t\t\t\r\n\t\t\tcase \"next\":\r\n\t\t\t\treturn this.nextPage();\r\n\t\t\t\r\n\t\t\tcase \"last\":\r\n\t\t\t\treturn this.setPage(this.max);\r\n\t\t}\r\n\t\t\r\n\t\tpage = parseInt(page);\r\n\t\t\r\n\t\tif((page > 0 && page <= this.max) || this.mode !== \"local\"){\r\n\t\t\tthis.page = page;\r\n\t\t\t\r\n\t\t\tthis.trackChanges();\r\n\t\t\t\r\n\t\t\treturn this.trigger();\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Pagination Error - Requested page is out of range of 1 - \" + this.max + \":\", page);\r\n\t\t\treturn Promise.reject();\r\n\t\t}\r\n\t}\r\n\t\r\n\tsetPageToRow(row){\r\n\t\tvar rows = this.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\r\n\t\tif(size > 0){\r\n\t\t\tthis.size = size;\r\n\t\t\tthis.dispatchExternal(\"pageSizeChanged\", size);\r\n\t\t}\r\n\t\t\r\n\t\tif(this.pageSizeSelect){\r\n\t\t\t// this.pageSizeSelect.value = size;\r\n\t\t\tthis.generatePageSizeSelectList();\r\n\t\t}\r\n\t\t\r\n\t\tthis.trackChanges();\r\n\t}\r\n\t\r\n\t_setPageCounter(totalRows, size, currentRow){\r\n\t\tvar content;\r\n\t\t\r\n\t\tif(this.pageCounter){\r\n\r\n\t\t\tif(this.mode === \"remote\"){\r\n\t\t\t\tsize = this.size;\r\n\t\t\t\tcurrentRow = ((this.page - 1) * this.size) + 1;\r\n\t\t\t\ttotalRows = this.remoteRowCountEstimate;\r\n\t\t\t}\r\n\r\n\t\t\tcontent = this.pageCounter.call(this, size, currentRow, this.page, totalRows, this.max);\r\n\t\t\t\r\n\t\t\tswitch(typeof content){\r\n\t\t\t\tcase \"object\":\r\n\t\t\t\t\tif(content instanceof Node){\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t//clear previous cell contents\r\n\t\t\t\t\t\twhile(this.pageCounterElement.firstChild) this.pageCounterElement.removeChild(this.pageCounterElement.firstChild);\r\n\t\t\t\t\t\r\n\t\t\t\t\t\tthis.pageCounterElement.appendChild(content);\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tthis.pageCounterElement.innerHTML = \"\";\r\n\t\t\t\t\t\r\n\t\t\t\t\t\tif(content != null){\r\n\t\t\t\t\t\t\tconsole.warn(\"Page Counter Error - Page Counter has returned a type of object, the only valid page counter object return is an instance of Node, the page counter returned:\", content);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase \"undefined\":\r\n\t\t\t\t\tthis.pageCounterElement.innerHTML = \"\";\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tthis.pageCounterElement.innerHTML = content;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\t//setup the pagination buttons\r\n\t_setPageButtons(){\r\n\t\tlet leftSize = Math.floor((this.count-1) / 2);\r\n\t\tlet rightSize = Math.ceil((this.count-1) / 2);\r\n\t\tlet min = this.max - this.page + leftSize + 1 < this.count ? this.max-this.count+1: Math.max(this.page-leftSize,1);\r\n\t\tlet max = this.page <= rightSize? Math.min(this.count, this.max) :Math.min(this.page+rightSize, this.max);\r\n\t\t\r\n\t\twhile(this.pagesElement.firstChild) this.pagesElement.removeChild(this.pagesElement.firstChild);\r\n\t\t\r\n\t\tif(this.page == 1){\r\n\t\t\tthis.firstBut.disabled = true;\r\n\t\t\tthis.prevBut.disabled = true;\r\n\t\t}else{\r\n\t\t\tthis.firstBut.disabled = false;\r\n\t\t\tthis.prevBut.disabled = false;\r\n\t\t}\r\n\t\t\r\n\t\tif(this.page == this.max){\r\n\t\t\tthis.lastBut.disabled = true;\r\n\t\t\tthis.nextBut.disabled = true;\r\n\t\t}else{\r\n\t\t\tthis.lastBut.disabled = false;\r\n\t\t\tthis.nextBut.disabled = false;\r\n\t\t}\r\n\t\t\r\n\t\tfor(let i = min; i <= max; i++){\r\n\t\t\tif(i>0 && i <= this.max){\r\n\t\t\t\tthis.pagesElement.appendChild(this._generatePageButton(i));\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\tthis.footerRedraw();\r\n\t}\r\n\t\r\n\t_generatePageButton(page){\r\n\t\tvar button = document.createElement(\"button\");\r\n\t\t\r\n\t\tbutton.classList.add(\"tabulator-page\");\r\n\t\tif(page == this.page){\r\n\t\t\tbutton.classList.add(\"active\");\r\n\t\t}\r\n\t\t\r\n\t\tbutton.setAttribute(\"type\", \"button\");\r\n\t\tbutton.setAttribute(\"role\", \"button\");\r\n\t\t\r\n\t\tthis.langBind(\"pagination|page_title\", (value) => {\r\n\t\t\tbutton.setAttribute(\"aria-label\", value + \" \" + page);\r\n\t\t\tbutton.setAttribute(\"title\", value + \" \" + page);\r\n\t\t});\r\n\t\t\r\n\t\tbutton.setAttribute(\"data-page\", page);\r\n\t\tbutton.textContent = page;\r\n\t\t\r\n\t\tbutton.addEventListener(\"click\", (e) => {\r\n\t\t\tthis.setPage(page);\r\n\t\t});\r\n\t\t\r\n\t\treturn button;\r\n\t}\r\n\t\r\n\t//previous page\r\n\tpreviousPage(){\r\n\t\tif(this.page > 1){\r\n\t\t\tthis.page--;\r\n\t\t\t\r\n\t\t\tthis.trackChanges();\r\n\t\t\t\r\n\t\t\treturn this.trigger();\r\n\t\t\t\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Pagination Error - Previous page would be less than page 1:\", 0);\r\n\t\t\treturn Promise.reject();\r\n\t\t}\r\n\t}\r\n\t\r\n\t//next page\r\n\tnextPage(){\r\n\t\tif(this.page < this.max){\r\n\t\t\tthis.page++;\r\n\t\t\t\r\n\t\t\tthis.trackChanges();\r\n\t\t\t\r\n\t\t\treturn this.trigger();\r\n\t\t\t\r\n\t\t}else{\r\n\t\t\tif(!this.progressiveLoad){\r\n\t\t\t\tconsole.warn(\"Pagination Error - Next page would be greater than maximum page of \" + this.max + \":\", this.max + 1);\r\n\t\t\t}\r\n\t\t\treturn Promise.reject();\r\n\t\t}\r\n\t}\r\n\t\r\n\t//return current page number\r\n\tgetPage(){\r\n\t\treturn this.page;\r\n\t}\r\n\t\r\n\t//return max page number\r\n\tgetPageMax(){\r\n\t\treturn this.max;\r\n\t}\r\n\t\r\n\tgetPageSize(size){\r\n\t\treturn this.size;\r\n\t}\r\n\t\r\n\tgetMode(){\r\n\t\treturn this.mode;\r\n\t}\r\n\t\r\n\t//return appropriate rows for current page\r\n\tgetRows(data){\r\n\t\tvar actualRowPageSize = 0,\r\n\t\toutput, start, end, actualStartRow;\r\n\r\n\t\tvar actualRows = data.filter((row) => {\r\n\t\t\treturn row.type === \"row\";\r\n\t\t});\r\n\t\t\r\n\t\tif(this.mode == \"local\"){\r\n\t\t\toutput = [];\r\n\t\t\t\r\n\t\t\tthis.setMaxRows(data.length);\r\n\t\t\t\r\n\t\t\tif(this.size === true){\r\n\t\t\t\tstart = 0;\r\n\t\t\t\tend = data.length;\r\n\t\t\t}else{\r\n\t\t\t\tstart = this.size * (this.page - 1);\r\n\t\t\t\tend = start + parseInt(this.size);\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tthis._setPageButtons();\r\n\t\t\t\r\n\t\t\tfor(let i = start; i < end; i++){\r\n\t\t\t\tlet row = data[i];\r\n\r\n\t\t\t\tif(row){\r\n\t\t\t\t\toutput.push(row);\r\n\r\n\t\t\t\t\tif(row.type === \"row\"){\r\n\t\t\t\t\t\tif(!actualStartRow){\r\n\t\t\t\t\t\t\tactualStartRow = row;\r\n\t\t\t\t\t\t}\t\r\n\r\n\t\t\t\t\t\tactualRowPageSize++;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tthis._setPageCounter(actualRows.length, actualRowPageSize, actualStartRow ? (actualRows.indexOf(actualStartRow) + 1) : 0);\r\n\t\t\t\r\n\t\t\treturn output;\r\n\t\t}else{\r\n\t\t\tthis._setPageButtons();\r\n\t\t\tthis._setPageCounter(actualRows.length);\r\n\t\t\t\r\n\t\t\treturn data.slice(0);\r\n\t\t}\r\n\t}\r\n\t\r\n\ttrigger(){\r\n\t\tvar left;\r\n\t\t\r\n\t\tswitch(this.mode){\r\n\t\t\tcase \"local\":\r\n\t\t\t\tleft = this.table.rowManager.scrollLeft;\r\n\t\t\t\r\n\t\t\t\tthis.refreshData();\r\n\t\t\t\tthis.table.rowManager.scrollHorizontal(left);\r\n\t\t\t\r\n\t\t\t\tthis.dispatchExternal(\"pageLoaded\", this.getPage());\r\n\t\t\t\r\n\t\t\t\treturn Promise.resolve();\r\n\t\t\t\r\n\t\t\tcase \"remote\":\r\n\t\t\t\tthis.dataChanging = true;\r\n\t\t\t\treturn this.reloadData(null)\r\n\t\t\t\t\t.finally(() => {\r\n\t\t\t\t\t\tthis.dataChanging = false;\r\n\t\t\t\t\t});\r\n\t\t\t\r\n\t\t\tcase \"progressive_load\":\r\n\t\t\tcase \"progressive_scroll\":\r\n\t\t\t\treturn this.reloadData(null, true);\r\n\t\t\t\r\n\t\t\tdefault:\r\n\t\t\t\tconsole.warn(\"Pagination Error - no such pagination mode:\", this.mode);\r\n\t\t\t\treturn Promise.reject();\r\n\t\t}\r\n\t}\r\n\t\r\n\t_parseRemoteData(data){\r\n\t\tvar margin;\r\n\t\t\r\n\t\tif(typeof data.last_page === \"undefined\"){\r\n\t\t\tconsole.warn(\"Remote Pagination Error - Server response missing '\" + (this.options(\"dataReceiveParams\").last_page || \"last_page\") + \"' property\");\r\n\t\t}\r\n\t\t\r\n\t\tif(data.data){\r\n\t\t\tthis.max = parseInt(data.last_page) || 1;\r\n\r\n\t\t\tthis.remoteRowCountEstimate = typeof data.last_row !== \"undefined\" ? data.last_row : (data.last_page * this.size - (this.page == data.last_page ? (this.size - data.data.length) : 0));\r\n\t\t\t\r\n\t\t\tif(this.progressiveLoad){\r\n\t\t\t\tswitch(this.mode){\r\n\t\t\t\t\tcase \"progressive_load\":\r\n\t\t\t\t\t\r\n\t\t\t\t\t\tif(this.page == 1){\r\n\t\t\t\t\t\t\tthis.table.rowManager.setData(data.data, false, this.page == 1);\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\tthis.table.rowManager.addRows(data.data);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\r\n\t\t\t\t\t\tif(this.page < this.max){\r\n\t\t\t\t\t\t\tsetTimeout(() => {\r\n\t\t\t\t\t\t\t\tthis.nextPage();\r\n\t\t\t\t\t\t\t}, this.table.options.progressiveLoadDelay);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\t\tcase \"progressive_scroll\":\r\n\t\t\t\t\t\tdata = this.page === 1 ? data.data : this.table.rowManager.getData().concat(data.data);\r\n\t\t\t\t\t\r\n\t\t\t\t\t\tthis.table.rowManager.setData(data, this.page !== 1, this.page == 1);\r\n\t\t\t\t\t\r\n\t\t\t\t\t\tmargin = this.table.options.progressiveLoadScrollMargin || (this.table.rowManager.element.clientHeight * 2);\r\n\t\t\t\t\t\r\n\t\t\t\t\t\tif(this.table.rowManager.element.scrollHeight <= (this.table.rowManager.element.clientHeight + margin)){\r\n\t\t\t\t\t\t\tif(this.page < this.max){\r\n\t\t\t\t\t\t\t\tsetTimeout(() => {\r\n\t\t\t\t\t\t\t\t\tthis.nextPage();\r\n\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\treturn false;\r\n\t\t\t}else{\r\n\t\t\t\t// left = this.table.rowManager.scrollLeft;\r\n\t\t\t\tthis.dispatchExternal(\"pageLoaded\", this.getPage());\r\n\t\t\t\t// this.table.rowManager.scrollHorizontal(left);\r\n\t\t\t\t// this.table.columnManager.scrollHorizontal(left);\r\n\t\t\t}\r\n\t\t\t\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Remote Pagination Error - Server response missing '\" + (this.options(\"dataReceiveParams\").data || \"data\") + \"' property\");\r\n\t\t}\r\n\t\t\r\n\t\treturn data.data;\r\n\t}\r\n\t\r\n\t//handle the footer element being redrawn\r\n\tfooterRedraw(){\r\n\t\tvar footer = this.table.footerManager.containerElement;\r\n\r\n\t\tif((Math.ceil(footer.clientWidth) - footer.scrollWidth) < 0){\r\n\t\t\tthis.pagesElement.style.display = 'none';\r\n\t\t}else{\r\n\t\t\tthis.pagesElement.style.display = '';\r\n\t\t\t\r\n\t\t\tif((Math.ceil(footer.clientWidth) - footer.scrollWidth) < 0){\r\n\t\t\t\tthis.pagesElement.style.display = 'none';\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n\r\nPage.moduleName = \"page\";\r\n\r\n//load defaults\r\nPage.pageCounters = defaultPageCounters;\r\n\r\nexport default Page;\r\n","// read persistance information from storage\r\nexport default {\r\n\tlocal:function(id, type){\r\n\t\tvar data = localStorage.getItem(id + \"-\" + type);\r\n\r\n\t\treturn data ? JSON.parse(data) : false;\r\n\t},\r\n\tcookie:function(id, type){\r\n\t\tvar cookie = document.cookie,\r\n\t\tkey = id + \"-\" + type,\r\n\t\tcookiePos = cookie.indexOf(key + \"=\"),\r\n\t\tend, data;\r\n\r\n\t\t//if cookie exists, decode and load column data into tabulator\r\n\t\tif(cookiePos > -1){\r\n\t\t\tcookie = cookie.slice(cookiePos);\r\n\r\n\t\t\tend = cookie.indexOf(\";\");\r\n\r\n\t\t\tif(end > -1){\r\n\t\t\t\tcookie = cookie.slice(0, end);\r\n\t\t\t}\r\n\r\n\t\t\tdata = cookie.replace(key + \"=\", \"\");\r\n\t\t}\r\n\r\n\t\treturn data ? JSON.parse(data) : false;\r\n\t}\r\n};\r\n","//write persistence information to storage\r\nexport default {\r\n\tlocal:function(id, type, data){\r\n\t\tlocalStorage.setItem(id + \"-\" + type, JSON.stringify(data));\r\n\t},\r\n\tcookie:function(id, type, data){\r\n\t\tvar expireDate = new Date();\r\n\r\n\t\texpireDate.setDate(expireDate.getDate() + 10000);\r\n\r\n\t\tdocument.cookie = id + \"-\" + type + \"=\" + JSON.stringify(data) + \"; expires=\" + expireDate.toUTCString();\r\n\t}\r\n};","import Module from '../../core/Module.js';\r\n\r\nimport defaultReaders from './defaults/readers.js';\r\nimport defaultWriters from './defaults/writers.js';\r\n\r\nclass Persistence extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.mode = \"\";\r\n\t\tthis.id = \"\";\r\n\t\t// this.persistProps = [\"field\", \"width\", \"visible\"];\r\n\t\tthis.defWatcherBlock = false;\r\n\t\tthis.config = {};\r\n\t\tthis.readFunc = false;\r\n\t\tthis.writeFunc = false;\r\n\r\n\t\tthis.registerTableOption(\"persistence\", false);\r\n\t\tthis.registerTableOption(\"persistenceID\", \"\"); //key for persistent storage\r\n\t\tthis.registerTableOption(\"persistenceMode\", true); //mode for storing persistence information\r\n\t\tthis.registerTableOption(\"persistenceReaderFunc\", false); //function for handling persistence data reading\r\n\t\tthis.registerTableOption(\"persistenceWriterFunc\", false); //function for handling persistence data writing\r\n\t}\r\n\r\n\t// Test for whether localStorage is available for use.\r\n\tlocalStorageTest() {\r\n\t\tvar testKey = \"_tabulator_test\";\r\n\r\n\t\ttry {\r\n\t\t\twindow.localStorage.setItem( testKey, testKey);\r\n\t\t\twindow.localStorage.removeItem( testKey );\r\n\t\t\treturn true;\r\n\t\t} catch(e) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\t//setup parameters\r\n\tinitialize(){\r\n\t\tif(this.table.options.persistence){\r\n\t\t\t//determine persistent layout storage type\r\n\t\t\tvar mode = this.table.options.persistenceMode,\r\n\t\t\tid = this.table.options.persistenceID,\r\n\t\t\tretrievedData;\r\n\r\n\t\t\tthis.mode = mode !== true ? mode : (this.localStorageTest() ? \"local\" : \"cookie\");\r\n\r\n\t\t\tif(this.table.options.persistenceReaderFunc){\r\n\t\t\t\tif(typeof this.table.options.persistenceReaderFunc === \"function\"){\r\n\t\t\t\t\tthis.readFunc = this.table.options.persistenceReaderFunc;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tif(Persistence.readers[this.table.options.persistenceReaderFunc]){\r\n\t\t\t\t\t\tthis.readFunc = Persistence.readers[this.table.options.persistenceReaderFunc];\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tconsole.warn(\"Persistence Read Error - invalid reader set\", this.table.options.persistenceReaderFunc);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tif(Persistence.readers[this.mode]){\r\n\t\t\t\t\tthis.readFunc = Persistence.readers[this.mode];\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.warn(\"Persistence Read Error - invalid reader set\", this.mode);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif(this.table.options.persistenceWriterFunc){\r\n\t\t\t\tif(typeof this.table.options.persistenceWriterFunc === \"function\"){\r\n\t\t\t\t\tthis.writeFunc = this.table.options.persistenceWriterFunc;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tif(Persistence.writers[this.table.options.persistenceWriterFunc]){\r\n\t\t\t\t\t\tthis.writeFunc = Persistence.writers[this.table.options.persistenceWriterFunc];\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tconsole.warn(\"Persistence Write Error - invalid reader set\", this.table.options.persistenceWriterFunc);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tif(Persistence.writers[this.mode]){\r\n\t\t\t\t\tthis.writeFunc = Persistence.writers[this.mode];\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.warn(\"Persistence Write Error - invalid writer set\", this.mode);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t//set storage tag\r\n\t\t\tthis.id = \"tabulator-\" + (id || (this.table.element.getAttribute(\"id\") || \"\"));\r\n\r\n\t\t\tthis.config = {\r\n\t\t\t\tsort:this.table.options.persistence === true || this.table.options.persistence.sort,\r\n\t\t\t\tfilter:this.table.options.persistence === true || this.table.options.persistence.filter,\r\n\t\t\t\tgroup:this.table.options.persistence === true || this.table.options.persistence.group,\r\n\t\t\t\tpage:this.table.options.persistence === true || this.table.options.persistence.page,\r\n\t\t\t\tcolumns:this.table.options.persistence === true ? [\"title\", \"width\", \"visible\"] : this.table.options.persistence.columns,\r\n\t\t\t};\r\n\r\n\t\t\t//load pagination data if needed\r\n\t\t\tif(this.config.page){\r\n\t\t\t\tretrievedData = this.retrieveData(\"page\");\r\n\r\n\t\t\t\tif(retrievedData){\r\n\t\t\t\t\tif(typeof retrievedData.paginationSize !== \"undefined\" && (this.config.page === true || this.config.page.size)){\r\n\t\t\t\t\t\tthis.table.options.paginationSize = retrievedData.paginationSize;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif(typeof retrievedData.paginationInitialPage !== \"undefined\" && (this.config.page === true || this.config.page.page)){\r\n\t\t\t\t\t\tthis.table.options.paginationInitialPage = retrievedData.paginationInitialPage;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t//load group data if needed\r\n\t\t\tif(this.config.group){\r\n\t\t\t\tretrievedData = this.retrieveData(\"group\");\r\n\r\n\t\t\t\tif(retrievedData){\r\n\t\t\t\t\tif(typeof retrievedData.groupBy !== \"undefined\" && (this.config.group === true || this.config.group.groupBy)){\r\n\t\t\t\t\t\tthis.table.options.groupBy = retrievedData.groupBy;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif(typeof retrievedData.groupStartOpen !== \"undefined\" && (this.config.group === true || this.config.group.groupStartOpen)){\r\n\t\t\t\t\t\tthis.table.options.groupStartOpen = retrievedData.groupStartOpen;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif(typeof retrievedData.groupHeader !== \"undefined\" && (this.config.group === true || this.config.group.groupHeader)){\r\n\t\t\t\t\t\tthis.table.options.groupHeader = retrievedData.groupHeader;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif(this.config.columns){\r\n\t\t\t\tthis.table.options.columns = this.load(\"columns\", this.table.options.columns);\r\n\t\t\t\tthis.subscribe(\"column-init\", this.initializeColumn.bind(this));\r\n\t\t\t\tthis.subscribe(\"column-show\", this.save.bind(this, \"columns\"));\r\n\t\t\t\tthis.subscribe(\"column-hide\", this.save.bind(this, \"columns\"));\r\n\t\t\t\tthis.subscribe(\"column-moved\", this.save.bind(this, \"columns\"));\r\n\t\t\t}\r\n\r\n\t\t\tthis.subscribe(\"table-built\", this.tableBuilt.bind(this), 0);\r\n\r\n\t\t\tthis.subscribe(\"table-redraw\", this.tableRedraw.bind(this));\r\n\r\n\t\t\tthis.subscribe(\"filter-changed\", this.eventSave.bind(this, \"filter\"));\r\n\t\t\tthis.subscribe(\"sort-changed\", this.eventSave.bind(this, \"sort\"));\r\n\t\t\tthis.subscribe(\"group-changed\", this.eventSave.bind(this, \"group\"));\r\n\t\t\tthis.subscribe(\"page-changed\", this.eventSave.bind(this, \"page\"));\r\n\t\t\tthis.subscribe(\"column-resized\", this.eventSave.bind(this, \"columns\"));\r\n\t\t\tthis.subscribe(\"layout-refreshed\", this.eventSave.bind(this, \"columns\"));\r\n\t\t}\r\n\r\n\t\tthis.registerTableFunction(\"getColumnLayout\", this.getColumnLayout.bind(this));\r\n\t\tthis.registerTableFunction(\"setColumnLayout\", this.setColumnLayout.bind(this));\r\n\t}\r\n\r\n\teventSave(type){\r\n\t\tif(this.config[type]){\r\n\t\t\tthis.save(type);\r\n\t\t}\r\n\t}\r\n\r\n\ttableBuilt(){\r\n\t\tvar sorters, filters;\r\n\r\n\t\tif(this.config.sort){\r\n\t\t\tsorters = this.load(\"sort\");\r\n\r\n\t\t\tif(!sorters === false){\r\n\t\t\t\tthis.table.options.initialSort = sorters;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(this.config.filter){\r\n\t\t\tfilters = this.load(\"filter\");\r\n\r\n\t\t\tif(!filters === false){\r\n\t\t\t\tthis.table.options.initialFilter = filters;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\ttableRedraw(force){\r\n\t\tif(force && this.config.columns){\r\n\t\t\tthis.save(\"columns\");\r\n\t\t}\r\n\t}\r\n\r\n\t///////////////////////////////////\r\n\t///////// Table Functions /////////\r\n\t///////////////////////////////////\r\n\r\n\tgetColumnLayout(){\r\n\t\treturn this.parseColumns(this.table.columnManager.getColumns());\r\n\t}\r\n\r\n\tsetColumnLayout(layout){\r\n\t\tthis.table.columnManager.setColumns(this.mergeDefinition(this.table.options.columns, layout));\r\n\t\treturn true;\r\n\t}\r\n\r\n\t///////////////////////////////////\r\n\t///////// Internal Logic //////////\r\n\t///////////////////////////////////\r\n\r\n\tinitializeColumn(column){\r\n\t\tvar def, keys;\r\n\r\n\t\tif(this.config.columns){\r\n\t\t\tthis.defWatcherBlock = true;\r\n\r\n\t\t\tdef = column.getDefinition();\r\n\r\n\t\t\tkeys = this.config.columns === true ? Object.keys(def) : this.config.columns;\r\n\r\n\t\t\tkeys.forEach((key)=>{\r\n\t\t\t\tvar props = Object.getOwnPropertyDescriptor(def, key);\r\n\t\t\t\tvar value = def[key];\r\n\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.retrieveData(type);\r\n\r\n\t\tif(current){\r\n\t\t\tdata = data ? this.mergeDefinition(current, data) : current;\r\n\t\t}\r\n\r\n\t\treturn data;\r\n\t}\r\n\r\n\t//retrieve data from memory\r\n\tretrieveData(type){\r\n\t\treturn this.readFunc ? this.readFunc(this.id, type) : false;\r\n\t}\r\n\r\n\t//merge old and new column definitions\r\n\tmergeDefinition(oldCols, newCols){\r\n\t\tvar output = [];\r\n\r\n\t\tnewCols = newCols || [];\r\n\r\n\t\tnewCols.forEach((column, to) => {\r\n\t\t\tvar from = this._findColumn(oldCols, column),\r\n\t\t\tkeys;\r\n\r\n\t\t\tif(from){\r\n\t\t\t\tif(this.config.columns === true || this.config.columns == undefined){\r\n\t\t\t\t\tkeys = Object.keys(from);\r\n\t\t\t\t\tkeys.push(\"width\");\r\n\t\t\t\t}else{\r\n\t\t\t\t\tkeys = this.config.columns;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tkeys.forEach((key)=>{\r\n\t\t\t\t\tif(key !== \"columns\" && typeof column[key] !== \"undefined\"){\r\n\t\t\t\t\t\tfrom[key] = column[key];\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\tif(from.columns){\r\n\t\t\t\t\tfrom.columns = this.mergeDefinition(from.columns, column.columns);\r\n\t\t\t\t}\r\n\r\n\t\t\t\toutput.push(from);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\toldCols.forEach((column, i) => {\r\n\t\t\tvar from = this._findColumn(newCols, column);\r\n\r\n\t\t\tif (!from) {\r\n\t\t\t\tif(output.length>i){\r\n\t\t\t\t\toutput.splice(i, 0, column);\r\n\t\t\t\t}else{\r\n\t\t\t\t\toutput.push(column);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\t//find matching columns\r\n\t_findColumn(columns, subject){\r\n\t\tvar type = subject.columns ? \"group\" : (subject.field ? \"field\" : \"object\");\r\n\r\n\t\treturn columns.find(function(col){\r\n\t\t\tswitch(type){\r\n\t\t\t\tcase \"group\":\r\n\t\t\t\t\treturn col.title === subject.title && col.columns.length === subject.columns.length;\r\n\r\n\t\t\t\tcase \"field\":\r\n\t\t\t\t\treturn col.field === subject.field;\r\n\r\n\t\t\t\tcase \"object\":\r\n\t\t\t\t\treturn col === subject;\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t//save data\r\n\tsave(type){\r\n\t\tvar data = {};\r\n\r\n\t\tswitch(type){\r\n\t\t\tcase \"columns\":\r\n\t\t\t\tdata = this.parseColumns(this.table.columnManager.getColumns());\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase \"filter\":\r\n\t\t\t\tdata = this.table.modules.filter.getFilters();\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase \"sort\":\r\n\t\t\t\tdata = this.validateSorters(this.table.modules.sort.getSort());\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase \"group\":\r\n\t\t\t\tdata = this.getGroupConfig();\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase \"page\":\r\n\t\t\t\tdata = this.getPageConfig();\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\tif(this.writeFunc){\r\n\t\t\tthis.writeFunc(this.id, type, data);\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t//ensure sorters contain no function data\r\n\tvalidateSorters(data){\r\n\t\tdata.forEach(function(item){\r\n\t\t\titem.column = item.field;\r\n\t\t\tdelete item.field;\r\n\t\t});\r\n\r\n\t\treturn data;\r\n\t}\r\n\r\n\tgetGroupConfig(){\r\n\t\tvar data = {};\r\n\r\n\t\tif(this.config.group){\r\n\t\t\tif(this.config.group === true || this.config.group.groupBy){\r\n\t\t\t\tdata.groupBy = this.table.options.groupBy;\r\n\t\t\t}\r\n\r\n\t\t\tif(this.config.group === true || this.config.group.groupStartOpen){\r\n\t\t\t\tdata.groupStartOpen = this.table.options.groupStartOpen;\r\n\t\t\t}\r\n\r\n\t\t\tif(this.config.group === true || this.config.group.groupHeader){\r\n\t\t\t\tdata.groupHeader = this.table.options.groupHeader;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn data;\r\n\t}\r\n\r\n\tgetPageConfig(){\r\n\t\tvar data = {};\r\n\r\n\t\tif(this.config.page){\r\n\t\t\tif(this.config.page === true || this.config.page.size){\r\n\t\t\t\tdata.paginationSize = this.table.modules.page.getPageSize();\r\n\t\t\t}\r\n\r\n\t\t\tif(this.config.page === true || this.config.page.page){\r\n\t\t\t\tdata.paginationInitialPage = this.table.modules.page.getPage();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn data;\r\n\t}\r\n\r\n\r\n\t//parse columns for data to store\r\n\tparseColumns(columns){\r\n\t\tvar definitions = [],\r\n\t\texcludedKeys = [\"headerContextMenu\", \"headerMenu\", \"contextMenu\", \"clickMenu\"];\r\n\r\n\t\tcolumns.forEach((column) => {\r\n\t\t\tvar defStore = {},\r\n\t\t\tcolDef = column.getDefinition(),\r\n\t\t\tkeys;\r\n\r\n\t\t\tif(column.isGroup){\r\n\t\t\t\tdefStore.title = colDef.title;\r\n\t\t\t\tdefStore.columns = this.parseColumns(column.getColumns());\r\n\t\t\t}else{\r\n\t\t\t\tdefStore.field = column.getField();\r\n\r\n\t\t\t\tif(this.config.columns === true || this.config.columns == undefined){\r\n\t\t\t\t\tkeys = Object.keys(colDef);\r\n\t\t\t\t\tkeys.push(\"width\");\r\n\t\t\t\t\tkeys.push(\"visible\");\r\n\t\t\t\t}else{\r\n\t\t\t\t\tkeys = this.config.columns;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tkeys.forEach((key)=>{\r\n\t\t\t\t\tswitch(key){\r\n\t\t\t\t\t\tcase \"width\":\r\n\t\t\t\t\t\t\tdefStore.width = column.getWidth();\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase \"visible\":\r\n\t\t\t\t\t\t\tdefStore.visible = column.visible;\r\n\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\tdefault:\r\n\t\t\t\t\t\t\tif(typeof colDef[key] !== \"function\" && excludedKeys.indexOf(key) === -1){\r\n\t\t\t\t\t\t\t\tdefStore[key] = colDef[key];\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\tdefinitions.push(defStore);\r\n\t\t});\r\n\r\n\t\treturn definitions;\r\n\t}\r\n}\r\n\r\nPersistence.moduleName = \"persistence\";\r\n\r\nPersistence.moduleInitOrder = -10;\r\n\r\n//load defaults\r\nPersistence.readers = defaultReaders;\r\nPersistence.writers = defaultWriters;\r\n\r\nexport default Persistence;","import Module from '../../core/Module.js';\r\n\r\nclass Popup extends Module{\r\n\t\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\t\t\r\n\t\tthis.columnSubscribers = {};\r\n\t\t\r\n\t\tthis.registerTableOption(\"rowContextPopup\", false);\r\n\t\tthis.registerTableOption(\"rowClickPopup\", false);\r\n\t\tthis.registerTableOption(\"groupContextPopup\", false);\r\n\t\tthis.registerTableOption(\"groupClickPopup\", false);\r\n\t\t\r\n\t\tthis.registerColumnOption(\"headerContextPopup\");\r\n\t\tthis.registerColumnOption(\"headerClickPopup\");\r\n\t\tthis.registerColumnOption(\"headerPopup\");\r\n\t\tthis.registerColumnOption(\"headerPopupIcon\");\r\n\t\tthis.registerColumnOption(\"contextPopup\");\r\n\t\tthis.registerColumnOption(\"clickPopup\");\r\n\t\t\r\n\t}\r\n\t\r\n\tinitialize(){\r\n\t\tthis.initializeRowWatchers();\r\n\t\tthis.initializeGroupWatchers();\r\n\t\t\r\n\t\tthis.subscribe(\"column-init\", this.initializeColumn.bind(this));\r\n\t}\r\n\t\r\n\tinitializeRowWatchers(){\r\n\t\tif(this.table.options.rowContextPopup){\r\n\t\t\tthis.subscribe(\"row-contextmenu\", this.loadPopupEvent.bind(this, this.table.options.rowContextPopup));\r\n\t\t\tthis.table.on(\"rowTapHold\", this.loadPopupEvent.bind(this, this.table.options.rowContextPopup));\r\n\t\t}\r\n\t\t\r\n\t\tif(this.table.options.rowClickPopup){\r\n\t\t\tthis.subscribe(\"row-click\", this.loadPopupEvent.bind(this, this.table.options.rowClickPopup));\r\n\t\t}\r\n\t}\r\n\t\r\n\tinitializeGroupWatchers(){\r\n\t\tif(this.table.options.groupContextPopup){\r\n\t\t\tthis.subscribe(\"group-contextmenu\", this.loadPopupEvent.bind(this, this.table.options.groupContextPopup));\r\n\t\t\tthis.table.on(\"groupTapHold\", this.loadPopupEvent.bind(this, this.table.options.groupContextPopup));\r\n\t\t}\r\n\t\t\r\n\t\tif(this.table.options.groupClickPopup){\r\n\t\t\tthis.subscribe(\"group-click\", this.loadPopupEvent.bind(this, this.table.options.groupClickPopup));\r\n\t\t}\r\n\t}\r\n\t\r\n\tinitializeColumn(column){\r\n\t\tvar def = column.definition;\r\n\t\t\r\n\t\t//handle column events\r\n\t\tif(def.headerContextPopup && !this.columnSubscribers.headerContextPopup){\r\n\t\t\tthis.columnSubscribers.headerContextPopup = this.loadPopupTableColumnEvent.bind(this, \"headerContextPopup\");\r\n\t\t\tthis.subscribe(\"column-contextmenu\", this.columnSubscribers.headerContextPopup);\r\n\t\t\tthis.table.on(\"headerTapHold\", this.loadPopupTableColumnEvent.bind(this, \"headerContextPopup\"));\r\n\t\t}\r\n\t\t\r\n\t\tif(def.headerClickPopup && !this.columnSubscribers.headerClickPopup){\r\n\t\t\tthis.columnSubscribers.headerClickPopup = this.loadPopupTableColumnEvent.bind(this, \"headerClickPopup\");\r\n\t\t\tthis.subscribe(\"column-click\", this.columnSubscribers.headerClickPopup);\r\n\t\t}\r\n\t\t\r\n\t\tif(def.headerPopup){\r\n\t\t\tthis.initializeColumnHeaderPopup(column);\r\n\t\t}\r\n\t\t\r\n\t\t//handle cell events\r\n\t\tif(def.contextPopup && !this.columnSubscribers.contextPopup){\r\n\t\t\tthis.columnSubscribers.contextPopup = this.loadPopupTableCellEvent.bind(this, \"contextPopup\");\r\n\t\t\tthis.subscribe(\"cell-contextmenu\", this.columnSubscribers.contextPopup);\r\n\t\t\tthis.table.on(\"cellTapHold\", this.loadPopupTableCellEvent.bind(this, \"contextPopup\"));\r\n\t\t}\r\n\t\t\r\n\t\tif(def.clickPopup && !this.columnSubscribers.clickPopup){\r\n\t\t\tthis.columnSubscribers.clickPopup = this.loadPopupTableCellEvent.bind(this, \"clickPopup\");\r\n\t\t\tthis.subscribe(\"cell-click\", this.columnSubscribers.clickPopup);\r\n\t\t}\r\n\t}\r\n\t\r\n\tinitializeColumnHeaderPopup(column){\r\n\t\tvar icon = column.definition.headerPopupIcon,\r\n\t\theaderPopupEl;\r\n\t\t\r\n\t\theaderPopupEl = document.createElement(\"span\");\r\n\t\theaderPopupEl.classList.add(\"tabulator-header-popup-button\");\r\n\r\n\t\tif(icon){\r\n\t\t\tif(typeof icon === \"function\"){\r\n\t\t\t\ticon = icon(column.getComponent());\r\n\t\t\t}\r\n\r\n\t\t\tif(icon instanceof HTMLElement){\r\n\t\t\t\theaderPopupEl.appendChild(icon);\r\n\t\t\t}else{\r\n\t\t\t\theaderPopupEl.innerHTML = icon;\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\theaderPopupEl.innerHTML = \"⋮\";\r\n\t\t}\r\n\t\t\r\n\t\theaderPopupEl.addEventListener(\"click\", (e) => {\r\n\t\t\te.stopPropagation();\r\n\t\t\te.preventDefault();\r\n\t\t\t\r\n\t\t\tthis.loadPopupEvent(column.definition.headerPopup, e, column);\r\n\t\t});\r\n\t\t\r\n\t\tcolumn.titleElement.insertBefore(headerPopupEl, column.titleElement.firstChild);\r\n\t}\r\n\t\r\n\tloadPopupTableCellEvent(option, e, cell){\r\n\t\tif(cell._cell){\r\n\t\t\tcell = cell._cell;\r\n\t\t}\r\n\t\t\r\n\t\tif(cell.column.definition[option]){\r\n\t\t\tthis.loadPopupEvent(cell.column.definition[option], e, cell);\r\n\t\t}\r\n\t}\r\n\t\r\n\tloadPopupTableColumnEvent(option, e, column){\r\n\t\tif(column._column){\r\n\t\t\tcolumn = column._column;\r\n\t\t}\r\n\t\t\r\n\t\tif(column.definition[option]){\r\n\t\t\tthis.loadPopupEvent(column.definition[option], e, column);\r\n\t\t}\r\n\t}\r\n\t\r\n\tloadPopupEvent(contents, e, component){\r\n\t\tvar renderedCallback;\r\n\r\n\t\tfunction onRendered(callback){\r\n\t\t\trenderedCallback = callback;\r\n\t\t}\r\n\t\t\r\n\t\tif(component._group){\r\n\t\t\tcomponent = component._group;\r\n\t\t}else if(component._row){\r\n\t\t\tcomponent = component._row;\r\n\t\t}\r\n\t\t\r\n\t\tcontents = typeof contents == \"function\" ? contents.call(this.table, e, component.getComponent(), onRendered) : contents;\r\n\t\t\r\n\t\tthis.loadPopup(e, component, contents, renderedCallback);\r\n\t}\r\n\t\r\n\tloadPopup(e, component, contents, renderedCallback){\r\n\t\tvar touch = !(e instanceof MouseEvent),\r\n\t\tcontentsEl, popup;\r\n\t\t\r\n\t\tif(contents instanceof HTMLElement){\r\n\t\t\tcontentsEl = contents;\r\n\t\t}else{\r\n\t\t\tcontentsEl = document.createElement(\"div\");\r\n\t\t\tcontentsEl.innerHTML = contents;\r\n\t\t}\r\n\t\t\r\n\t\tcontentsEl.classList.add(\"tabulator-popup\");\r\n\r\n\t\tcontentsEl.addEventListener(\"click\", (e) =>{\r\n\t\t\te.stopPropagation();\r\n\t\t});\r\n\r\n\t\tif(!touch){\r\n\t\t\te.preventDefault();\r\n\t\t}\r\n\t\t\r\n\t\tpopup = this.popup(contentsEl);\r\n\r\n\t\tif(typeof renderedCallback === \"function\"){\r\n\t\t\tpopup.renderCallback(renderedCallback);\r\n\t\t}\r\n\t\t\r\n\t\tpopup.show(e).hideOnBlur(() => {\r\n\t\t\tthis.dispatchExternal(\"popupClosed\", component.getComponent());\r\n\t\t});\r\n\r\n\r\n\r\n\t\tthis.dispatchExternal(\"popupOpened\", component.getComponent());\r\n\t}\r\n}\r\n\r\nPopup.moduleName = \"popup\";\r\n\r\nexport default Popup;\r\n","import Module from '../../core/Module.js';\r\n\r\nclass Print extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.element = false;\r\n\t\tthis.manualBlock = false;\r\n\r\n\t\tthis.registerTableOption(\"printAsHtml\", false); //enable print as html\r\n\t\tthis.registerTableOption(\"printFormatter\", false); //printing page formatter\r\n\t\tthis.registerTableOption(\"printHeader\", false); //page header contents\r\n\t\tthis.registerTableOption(\"printFooter\", false); //page footer contents\r\n\t\tthis.registerTableOption(\"printStyled\", true); //enable print as html styling\r\n\t\tthis.registerTableOption(\"printRowRange\", \"visible\"); //restrict print to visible rows only\r\n\t\tthis.registerTableOption(\"printConfig\", {}); //print config options\r\n\r\n\t\tthis.registerColumnOption(\"print\");\r\n\t\tthis.registerColumnOption(\"titlePrint\");\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tif(this.table.options.printAsHtml){\r\n\t\t\twindow.addEventListener(\"beforeprint\", this.replaceTable.bind(this));\r\n\t\t\twindow.addEventListener(\"afterprint\", this.cleanup.bind(this));\r\n\t\t}\r\n\r\n\t\tthis.registerTableFunction(\"print\", this.printFullscreen.bind(this));\r\n\t}\r\n\r\n\t///////////////////////////////////\r\n\t///////// Table Functions /////////\r\n\t///////////////////////////////////\r\n\r\n\t///////////////////////////////////\r\n\t///////// Internal Logic //////////\r\n\t///////////////////////////////////\r\n\r\n\treplaceTable(){\r\n\t\tif(!this.manualBlock){\r\n\t\t\tthis.element = document.createElement(\"div\");\r\n\t\t\tthis.element.classList.add(\"tabulator-print-table\");\r\n\r\n\t\t\tthis.element.appendChild(this.table.modules.export.generateTable(this.table.options.printConfig, this.table.options.printStyled, this.table.options.printRowRange, \"print\"));\r\n\r\n\t\t\tthis.table.element.style.display = \"none\";\r\n\r\n\t\t\tthis.table.element.parentNode.insertBefore(this.element, this.table.element);\r\n\t\t}\r\n\t}\r\n\r\n\tcleanup(){\r\n\t\tdocument.body.classList.remove(\"tabulator-print-fullscreen-hide\");\r\n\r\n\t\tif(this.element && this.element.parentNode){\r\n\t\t\tthis.element.parentNode.removeChild(this.element);\r\n\t\t\tthis.table.element.style.display = \"\";\r\n\t\t}\r\n\t}\r\n\r\n\tprintFullscreen(visible, style, config){\r\n\t\tvar scrollX = window.scrollX,\r\n\t\tscrollY = window.scrollY,\r\n\t\theaderEl = document.createElement(\"div\"),\r\n\t\tfooterEl = document.createElement(\"div\"),\r\n\t\ttableEl = this.table.modules.export.generateTable(typeof config != \"undefined\" ? config : this.table.options.printConfig, typeof style != \"undefined\" ? style : this.table.options.printStyled, visible || this.table.options.printRowRange, \"print\"),\r\n\t\theaderContent, footerContent;\r\n\r\n\t\tthis.manualBlock = true;\r\n\r\n\t\tthis.element = document.createElement(\"div\");\r\n\t\tthis.element.classList.add(\"tabulator-print-fullscreen\");\r\n\r\n\t\tif(this.table.options.printHeader){\r\n\t\t\theaderEl.classList.add(\"tabulator-print-header\");\r\n\r\n\t\t\theaderContent = typeof this.table.options.printHeader == \"function\" ? this.table.options.printHeader.call(this.table) : this.table.options.printHeader;\r\n\r\n\t\t\tif(typeof headerContent == \"string\"){\r\n\t\t\t\theaderEl.innerHTML = headerContent;\r\n\t\t\t}else{\r\n\t\t\t\theaderEl.appendChild(headerContent);\r\n\t\t\t}\r\n\r\n\t\t\tthis.element.appendChild(headerEl);\r\n\t\t}\r\n\r\n\t\tthis.element.appendChild(tableEl);\r\n\r\n\t\tif(this.table.options.printFooter){\r\n\t\t\tfooterEl.classList.add(\"tabulator-print-footer\");\r\n\r\n\t\t\tfooterContent = typeof this.table.options.printFooter == \"function\" ? this.table.options.printFooter.call(this.table) : this.table.options.printFooter;\r\n\r\n\r\n\t\t\tif(typeof footerContent == \"string\"){\r\n\t\t\t\tfooterEl.innerHTML = footerContent;\r\n\t\t\t}else{\r\n\t\t\t\tfooterEl.appendChild(footerContent);\r\n\t\t\t}\r\n\r\n\t\t\tthis.element.appendChild(footerEl);\r\n\t\t}\r\n\r\n\t\tdocument.body.classList.add(\"tabulator-print-fullscreen-hide\");\r\n\t\tdocument.body.appendChild(this.element);\r\n\r\n\t\tif(this.table.options.printFormatter){\r\n\t\t\tthis.table.options.printFormatter(this.element, tableEl);\r\n\t\t}\r\n\r\n\t\twindow.print();\r\n\r\n\t\tthis.cleanup();\r\n\r\n\t\twindow.scrollTo(scrollX, scrollY);\r\n\r\n\t\tthis.manualBlock = false;\r\n\t}\r\n}\r\n\r\nPrint.moduleName = \"print\";\r\n\r\nexport default Print;","import Module from '../../core/Module.js';\r\n\r\nclass ReactiveData extends Module{\r\n\t\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\t\t\r\n\t\tthis.data = false;\r\n\t\tthis.blocked = false; //block reactivity while performing update\r\n\t\tthis.origFuncs = {}; // hold original data array functions to allow replacement after data is done with\r\n\t\tthis.currentVersion = 0;\r\n\t\t\r\n\t\tthis.registerTableOption(\"reactiveData\", false); //enable data reactivity\r\n\t}\r\n\t\r\n\tinitialize(){\r\n\t\tif(this.table.options.reactiveData){\r\n\t\t\tthis.subscribe(\"cell-value-save-before\", this.block.bind(this, \"cellsave\"));\r\n\t\t\tthis.subscribe(\"cell-value-save-after\", this.unblock.bind(this, \"cellsave\"));\r\n\t\t\tthis.subscribe(\"row-data-save-before\", this.block.bind(this, \"rowsave\"));\r\n\t\t\tthis.subscribe(\"row-data-save-after\", this.unblock.bind(this, \"rowsave\"));\r\n\t\t\tthis.subscribe(\"row-data-init-after\", this.watchRow.bind(this));\r\n\t\t\tthis.subscribe(\"data-processing\", this.watchData.bind(this));\r\n\t\t\tthis.subscribe(\"table-destroy\", this.unwatchData.bind(this));\r\n\t\t}\r\n\t}\r\n\t\r\n\twatchData(data){\r\n\t\tvar self = this,\r\n\t\tversion;\r\n\t\t\r\n\t\tthis.currentVersion ++;\r\n\t\t\r\n\t\tversion = this.currentVersion;\r\n\t\t\r\n\t\tthis.unwatchData();\r\n\t\t\r\n\t\tthis.data = data;\r\n\t\t\r\n\t\t//override array push function\r\n\t\tthis.origFuncs.push = data.push;\r\n\t\t\r\n\t\tObject.defineProperty(this.data, \"push\", {\r\n\t\t\tenumerable: false,\r\n\t\t\tconfigurable: true,\r\n\t\t\tvalue: function(){\r\n\t\t\t\tvar args = Array.from(arguments),\r\n\t\t\t\tresult;\r\n\r\n\t\t\t\tif(!self.blocked && version === self.currentVersion){\t\r\n\t\t\t\t\tself.block(\"data-push\");\r\n\r\n\t\t\t\t\targs.forEach((arg) => {\r\n\t\t\t\t\t\tself.table.rowManager.addRowActual(arg, false);\r\n\t\t\t\t\t});\r\n\t\t\t\t\t\r\n\t\t\t\t\tresult = self.origFuncs.push.apply(data, arguments);\r\n\t\t\t\t\t\r\n\t\t\t\t\tself.unblock(\"data-push\");\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\treturn result;\r\n\t\t\t}\r\n\t\t});\r\n\t\t\r\n\t\t//override array unshift function\r\n\t\tthis.origFuncs.unshift = data.unshift;\r\n\t\t\r\n\t\tObject.defineProperty(this.data, \"unshift\", {\r\n\t\t\tenumerable: false,\r\n\t\t\tconfigurable: true,\r\n\t\t\tvalue: function(){\r\n\t\t\t\tvar args = Array.from(arguments),\r\n\t\t\t\tresult;\r\n\t\t\t\t\r\n\t\t\t\tif(!self.blocked && version === self.currentVersion){\r\n\t\t\t\t\tself.block(\"data-unshift\");\r\n\t\t\t\t\t\r\n\t\t\t\t\targs.forEach((arg) => {\r\n\t\t\t\t\t\tself.table.rowManager.addRowActual(arg, true);\r\n\t\t\t\t\t});\r\n\t\t\t\t\t\r\n\t\t\t\t\tresult = self.origFuncs.unshift.apply(data, arguments);\r\n\t\t\t\t\t\r\n\t\t\t\t\tself.unblock(\"data-unshift\");\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\treturn result;\r\n\t\t\t}\r\n\t\t});\r\n\t\t\r\n\t\t\r\n\t\t//override array shift function\r\n\t\tthis.origFuncs.shift = data.shift;\r\n\t\t\r\n\t\tObject.defineProperty(this.data, \"shift\", {\r\n\t\t\tenumerable: false,\r\n\t\t\tconfigurable: true,\r\n\t\t\tvalue: function(){\r\n\t\t\t\tvar row, result;\r\n\t\t\t\t\r\n\t\t\t\tif(!self.blocked && version === self.currentVersion){\r\n\t\t\t\t\tself.block(\"data-shift\");\r\n\t\t\t\t\t\r\n\t\t\t\t\tif(self.data.length){\r\n\t\t\t\t\t\trow = self.table.rowManager.getRowFromDataObject(self.data[0]);\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\tif(row){\r\n\t\t\t\t\t\t\trow.deleteActual();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tresult = self.origFuncs.shift.call(data);\r\n\r\n\t\t\t\t\tself.unblock(\"data-shift\");\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\treturn result;\r\n\t\t\t}\r\n\t\t});\r\n\t\t\r\n\t\t//override array pop function\r\n\t\tthis.origFuncs.pop = data.pop;\r\n\t\t\r\n\t\tObject.defineProperty(this.data, \"pop\", {\r\n\t\t\tenumerable: false,\r\n\t\t\tconfigurable: true,\r\n\t\t\tvalue: function(){\r\n\t\t\t\tvar row, result;\r\n\t\t\t\r\n\t\t\t\tif(!self.blocked && version === self.currentVersion){\r\n\t\t\t\t\tself.block(\"data-pop\");\r\n\t\t\t\t\t\r\n\t\t\t\t\tif(self.data.length){\r\n\t\t\t\t\t\trow = self.table.rowManager.getRowFromDataObject(self.data[self.data.length - 1]);\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\tif(row){\r\n\t\t\t\t\t\t\trow.deleteActual();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tresult = self.origFuncs.pop.call(data);\r\n\t\t\t\t\t\r\n\t\t\t\t\tself.unblock(\"data-pop\");\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn result;\r\n\t\t\t}\r\n\t\t});\r\n\t\t\r\n\t\t\r\n\t\t//override array splice function\r\n\t\tthis.origFuncs.splice = data.splice;\r\n\t\t\r\n\t\tObject.defineProperty(this.data, \"splice\", {\r\n\t\t\tenumerable: false,\r\n\t\t\tconfigurable: true,\r\n\t\t\tvalue: function(){\r\n\t\t\t\tvar args = Array.from(arguments),\r\n\t\t\t\tstart = args[0] < 0 ? data.length + args[0] : args[0],\r\n\t\t\t\tend = args[1],\r\n\t\t\t\tnewRows = args[2] ? args.slice(2) : false,\r\n\t\t\t\tstartRow, result;\r\n\t\t\t\t\r\n\t\t\t\tif(!self.blocked && version === self.currentVersion){\r\n\t\t\t\t\tself.block(\"data-splice\");\r\n\t\t\t\t\t//add new rows\r\n\t\t\t\t\tif(newRows){\r\n\t\t\t\t\t\tstartRow = data[start] ? self.table.rowManager.getRowFromDataObject(data[start]) : false;\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\tif(startRow){\r\n\t\t\t\t\t\t\tnewRows.forEach((rowData) => {\r\n\t\t\t\t\t\t\t\tself.table.rowManager.addRowActual(rowData, true, startRow, true);\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\tnewRows = newRows.slice().reverse();\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tnewRows.forEach((rowData) => {\r\n\t\t\t\t\t\t\t\tself.table.rowManager.addRowActual(rowData, true, false, true);\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\t\r\n\t\t\t\t\t//delete removed rows\r\n\t\t\t\t\tif(end !== 0){\r\n\t\t\t\t\t\tvar oldRows = data.slice(start, typeof args[1] === \"undefined\" ? args[1] : start + end);\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\toldRows.forEach((rowData, i) => {\r\n\t\t\t\t\t\t\tvar row = self.table.rowManager.getRowFromDataObject(rowData);\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tif(row){\r\n\t\t\t\t\t\t\t\trow.deleteActual(i !== oldRows.length - 1);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\t\t\t\t\t\r\n\t\t\t\t\tif(newRows || end !== 0){\r\n\t\t\t\t\t\tself.table.rowManager.reRenderInPosition();\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tresult = self.origFuncs.splice.apply(data, arguments);\r\n\t\t\t\t\t\r\n\t\t\t\t\tself.unblock(\"data-splice\");\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\treturn result ;\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\t\r\n\tunwatchData(){\r\n\t\tif(this.data !== false){\r\n\t\t\tfor(var key in this.origFuncs){\r\n\t\t\t\tObject.defineProperty(this.data, key, {\r\n\t\t\t\t\tenumerable: true,\r\n\t\t\t\t\tconfigurable:true,\r\n\t\t\t\t\twritable:true,\r\n\t\t\t\t\tvalue: this.origFuncs.key,\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\twatchRow(row){\r\n\t\tvar data = row.getData();\r\n\t\t\r\n\t\tfor(var key in data){\r\n\t\t\tthis.watchKey(row, data, key);\r\n\t\t}\r\n\t\t\r\n\t\tif(this.table.options.dataTree){\r\n\t\t\tthis.watchTreeChildren(row);\r\n\t\t}\r\n\t}\r\n\t\r\n\twatchTreeChildren (row){\r\n\t\tvar self = this,\r\n\t\tchildField = row.getData()[this.table.options.dataTreeChildField],\r\n\t\torigFuncs = {};\r\n\t\t\r\n\t\tif(childField){\r\n\t\t\t\r\n\t\t\torigFuncs.push = childField.push;\r\n\t\t\t\r\n\t\t\tObject.defineProperty(childField, \"push\", {\r\n\t\t\t\tenumerable: false,\r\n\t\t\t\tconfigurable: true,\r\n\t\t\t\tvalue: () => {\r\n\t\t\t\t\tif(!self.blocked){\r\n\t\t\t\t\t\tself.block(\"tree-push\");\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\tvar result = origFuncs.push.apply(childField, arguments);\r\n\t\t\t\t\t\tthis.rebuildTree(row);\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\tself.unblock(\"tree-push\");\r\n\t\t\t\t\t}\r\n\t\t\t\t\t\r\n\t\t\t\t\treturn result;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\t\r\n\t\t\torigFuncs.unshift = childField.unshift;\r\n\t\t\t\r\n\t\t\tObject.defineProperty(childField, \"unshift\", {\r\n\t\t\t\tenumerable: false,\r\n\t\t\t\tconfigurable: true,\r\n\t\t\t\tvalue: () => {\r\n\t\t\t\t\tif(!self.blocked){\r\n\t\t\t\t\t\tself.block(\"tree-unshift\");\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\tvar result = origFuncs.unshift.apply(childField, arguments);\r\n\t\t\t\t\t\tthis.rebuildTree(row);\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\tself.unblock(\"tree-unshift\");\r\n\t\t\t\t\t}\r\n\t\t\t\t\t\r\n\t\t\t\t\treturn result;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\t\r\n\t\t\torigFuncs.shift = childField.shift;\r\n\t\t\t\r\n\t\t\tObject.defineProperty(childField, \"shift\", {\r\n\t\t\t\tenumerable: false,\r\n\t\t\t\tconfigurable: true,\r\n\t\t\t\tvalue: () => {\r\n\t\t\t\t\tif(!self.blocked){\r\n\t\t\t\t\t\tself.block(\"tree-shift\");\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\tvar result = origFuncs.shift.call(childField);\r\n\t\t\t\t\t\tthis.rebuildTree(row);\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\tself.unblock(\"tree-shift\");\r\n\t\t\t\t\t}\r\n\t\t\t\t\t\r\n\t\t\t\t\treturn result;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\t\r\n\t\t\torigFuncs.pop = childField.pop;\r\n\t\t\t\r\n\t\t\tObject.defineProperty(childField, \"pop\", {\r\n\t\t\t\tenumerable: false,\r\n\t\t\t\tconfigurable: true,\r\n\t\t\t\tvalue: () => {\r\n\t\t\t\t\tif(!self.blocked){\r\n\t\t\t\t\t\tself.block(\"tree-pop\");\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\tvar result = origFuncs.pop.call(childField);\r\n\t\t\t\t\t\tthis.rebuildTree(row);\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\tself.unblock(\"tree-pop\");\r\n\t\t\t\t\t}\r\n\t\t\t\t\t\r\n\t\t\t\t\treturn result;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\t\r\n\t\t\torigFuncs.splice = childField.splice;\r\n\t\t\t\r\n\t\t\tObject.defineProperty(childField, \"splice\", {\r\n\t\t\t\tenumerable: false,\r\n\t\t\t\tconfigurable: true,\r\n\t\t\t\tvalue: () => {\r\n\t\t\t\t\tif(!self.blocked){\r\n\t\t\t\t\t\tself.block(\"tree-splice\");\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\tvar result = origFuncs.splice.apply(childField, arguments);\r\n\t\t\t\t\t\tthis.rebuildTree(row);\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\tself.unblock(\"tree-splice\");\r\n\t\t\t\t\t}\r\n\t\t\t\t\t\r\n\t\t\t\t\treturn result;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\t\r\n\trebuildTree(row){\r\n\t\tthis.table.modules.dataTree.initializeRow(row);\r\n\t\tthis.table.modules.dataTree.layoutRow(row);\r\n\t\tthis.table.rowManager.refreshActiveData(\"tree\", false, true);\r\n\t}\r\n\t\r\n\twatchKey(row, data, key){\r\n\t\tvar self = this,\r\n\t\tprops = Object.getOwnPropertyDescriptor(data, key),\r\n\t\tvalue = data[key],\r\n\t\tversion = this.currentVersion;\r\n\t\t\r\n\t\tObject.defineProperty(data, key, {\r\n\t\t\tset: (newValue) => {\r\n\t\t\t\tvalue = newValue;\r\n\t\t\t\tif(!self.blocked && version === self.currentVersion){\r\n\t\t\t\t\tself.block(\"key\");\r\n\t\t\t\t\t\r\n\t\t\t\t\tvar update = {};\r\n\t\t\t\t\tupdate[key] = newValue;\r\n\t\t\t\t\trow.updateData(update);\r\n\t\t\t\t\t\r\n\t\t\t\t\tself.unblock(\"key\");\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\tif(props.set){\r\n\t\t\t\t\tprops.set(newValue);\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tget:() => {\r\n\t\t\t\t\r\n\t\t\t\tif(props.get){\r\n\t\t\t\t\tprops.get();\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\treturn value;\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\t\r\n\tunwatchRow(row){\r\n\t\tvar data = row.getData();\r\n\t\t\r\n\t\tfor(var key in data){\r\n\t\t\tObject.defineProperty(data, key, {\r\n\t\t\t\tvalue:data[key],\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\t\r\n\tblock(key){\r\n\t\tif(!this.blocked){\r\n\t\t\tthis.blocked = key;\r\n\t\t}\r\n\t}\r\n\t\r\n\tunblock(key){\r\n\t\tif(this.blocked === key){\r\n\t\t\tthis.blocked = false;\r\n\t\t}\r\n\t}\r\n}\r\n\r\nReactiveData.moduleName = \"reactiveData\";\r\n\r\nexport default ReactiveData;\r\n\r\n\r\n\r\n","import Module from '../../core/Module.js';\r\n\r\nclass ResizeColumns extends Module{\r\n\t\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\t\t\r\n\t\tthis.startColumn = false;\r\n\t\tthis.startX = false;\r\n\t\tthis.startWidth = false;\r\n\t\tthis.latestX = false;\r\n\t\tthis.handle = null;\r\n\t\tthis.initialNextColumn = null;\r\n\t\tthis.nextColumn = null;\r\n\t\t\r\n\t\tthis.initialized = false;\r\n\t\tthis.registerColumnOption(\"resizable\", true);\r\n\t\tthis.registerTableOption(\"resizableColumnFit\", false);\r\n\t}\r\n\t\r\n\tinitialize(){\r\n\t\tthis.subscribe(\"column-rendered\", this.layoutColumnHeader.bind(this));\r\n\t}\r\n\t\r\n\tinitializeEventWatchers(){\r\n\t\tif(!this.initialized){\r\n\t\t\t\r\n\t\t\tthis.subscribe(\"cell-rendered\", this.layoutCellHandles.bind(this));\r\n\t\t\tthis.subscribe(\"cell-delete\", this.deInitializeComponent.bind(this));\r\n\t\t\t\r\n\t\t\tthis.subscribe(\"cell-height\", this.resizeHandle.bind(this));\r\n\t\t\tthis.subscribe(\"column-moved\", this.columnLayoutUpdated.bind(this));\r\n\t\t\t\r\n\t\t\tthis.subscribe(\"column-hide\", this.deInitializeColumn.bind(this));\r\n\t\t\tthis.subscribe(\"column-show\", this.columnLayoutUpdated.bind(this));\r\n\t\t\tthis.subscribe(\"column-width\", this.columnWidthUpdated.bind(this));\r\n\t\t\t\r\n\t\t\tthis.subscribe(\"column-delete\", this.deInitializeComponent.bind(this));\r\n\t\t\tthis.subscribe(\"column-height\", this.resizeHandle.bind(this));\r\n\t\t\t\r\n\t\t\tthis.initialized = true;\r\n\t\t}\r\n\t}\r\n\t\r\n\t\r\n\tlayoutCellHandles(cell){\r\n\t\tif(cell.row.type === \"row\"){\r\n\t\t\tthis.deInitializeComponent(cell);\r\n\t\t\tthis.initializeColumn(\"cell\", cell, cell.column, cell.element);\r\n\t\t}\r\n\t}\r\n\t\r\n\tlayoutColumnHeader(column){\r\n\t\tif(column.definition.resizable){\r\n\t\t\tthis.initializeEventWatchers();\r\n\t\t\tthis.deInitializeComponent(column);\r\n\t\t\tthis.initializeColumn(\"header\", column, column, column.element);\r\n\t\t}\r\n\t}\r\n\t\r\n\tcolumnLayoutUpdated(column){\r\n\t\tvar prev = column.prevColumn();\r\n\t\t\r\n\t\tthis.reinitializeColumn(column);\r\n\t\t\r\n\t\tif(prev){\r\n\t\t\tthis.reinitializeColumn(prev);\r\n\t\t}\r\n\t}\r\n\t\r\n\tcolumnWidthUpdated(column){\r\n\t\tif(column.modules.frozen){\r\n\t\t\tif(this.table.modules.frozenColumns.leftColumns.includes(column)){\r\n\t\t\t\tthis.table.modules.frozenColumns.leftColumns.forEach((col) => {\r\n\t\t\t\t\tthis.reinitializeColumn(col);\r\n\t\t\t\t});\r\n\t\t\t}else if(this.table.modules.frozenColumns.rightColumns.includes(column)){\r\n\t\t\t\tthis.table.modules.frozenColumns.rightColumns.forEach((col) => {\r\n\t\t\t\t\tthis.reinitializeColumn(col);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\treinitializeColumn(column){\r\n\t\tvar frozenOffset = column.modules.frozen ? (column.modules.frozen.marginValue + column.getWidth() + \"px\") : false;\r\n\t\t\r\n\t\t\r\n\t\tcolumn.cells.forEach((cell) => {\r\n\t\t\tif(cell.modules.resize && cell.modules.resize.handleEl){\r\n\t\t\t\tif(frozenOffset){\r\n\t\t\t\t\tcell.modules.resize.handleEl.style.left = frozenOffset;\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\tcell.element.after(cell.modules.resize.handleEl);\r\n\t\t\t}\r\n\t\t});\r\n\t\t\r\n\t\tif(column.modules.resize && column.modules.resize.handleEl){\r\n\t\t\tif(frozenOffset){\r\n\t\t\t\tcolumn.modules.resize.handleEl.style.left = frozenOffset;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tcolumn.element.after(column.modules.resize.handleEl);\r\n\t\t}\r\n\t}\r\n\t\r\n\tinitializeColumn(type, component, column, element){\r\n\t\tvar self = this,\r\n\t\tvariableHeight = false,\r\n\t\tmode = column.definition.resizable,\r\n\t\tconfig = {},\r\n\t\tnearestColumn = column.getLastColumn();\r\n\t\t\r\n\t\t//set column resize mode\r\n\t\tif(type === \"header\"){\r\n\t\t\tvariableHeight = column.definition.formatter == \"textarea\" || column.definition.variableHeight;\r\n\t\t\tconfig = {variableHeight:variableHeight};\r\n\t\t}\r\n\t\t\r\n\t\tif((mode === true || mode == type) && this._checkResizability(nearestColumn)){\r\n\t\t\t\r\n\t\t\tvar handle = document.createElement('span');\r\n\t\t\thandle.className = \"tabulator-col-resize-handle\";\r\n\t\t\t\r\n\t\t\thandle.addEventListener(\"click\", function(e){\r\n\t\t\t\te.stopPropagation();\r\n\t\t\t});\r\n\t\t\t\r\n\t\t\tvar handleDown = function(e){\r\n\t\t\t\tself.startColumn = column;\r\n\t\t\t\tself.initialNextColumn = self.nextColumn = nearestColumn.nextColumn();\r\n\t\t\t\tself._mouseDown(e, nearestColumn, handle);\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\thandle.addEventListener(\"mousedown\", handleDown);\r\n\t\t\thandle.addEventListener(\"touchstart\", handleDown, {passive: true});\r\n\t\t\t\r\n\t\t\t//resize column on double click\r\n\t\t\thandle.addEventListener(\"dblclick\", (e) => {\r\n\t\t\t\tvar oldWidth = nearestColumn.getWidth();\r\n\t\t\t\t\r\n\t\t\t\te.stopPropagation();\r\n\t\t\t\tnearestColumn.reinitializeWidth(true);\r\n\t\t\t\t\r\n\t\t\t\tif(oldWidth !== nearestColumn.getWidth()){\r\n\t\t\t\t\tself.dispatch(\"column-resized\", nearestColumn);\r\n\t\t\t\t\tself.table.externalEvents.dispatch(\"columnResized\", nearestColumn.getComponent());\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\t\r\n\t\t\tif(column.modules.frozen){\r\n\t\t\t\thandle.style.position = \"absolute\";\r\n\t\t\t\thandle.style.left = column.modules.frozen.marginValue + column.getWidth() + \"px\";\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tconfig.handleEl = handle;\r\n\t\t\t\r\n\t\t\tif(element.parentNode && column.visible){\r\n\t\t\t\telement.after(handle);\t\t\t\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\tcomponent.modules.resize = config;\r\n\t}\r\n\t\r\n\tdeInitializeColumn(column){\r\n\t\tthis.deInitializeComponent(column);\r\n\t\t\r\n\t\tcolumn.cells.forEach((cell) => {\r\n\t\t\tthis.deInitializeComponent(cell);\r\n\t\t});\r\n\t}\r\n\t\r\n\tdeInitializeComponent(component){\r\n\t\tvar handleEl;\r\n\t\t\r\n\t\tif(component.modules.resize){\r\n\t\t\thandleEl = component.modules.resize.handleEl;\r\n\t\t\t\r\n\t\t\tif(handleEl && handleEl.parentElement){\r\n\t\t\t\thandleEl.parentElement.removeChild(handleEl);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\tresizeHandle(component, height){\r\n\t\tif(component.modules.resize && component.modules.resize.handleEl){\r\n\t\t\tcomponent.modules.resize.handleEl.style.height = height;\r\n\t\t}\r\n\t}\r\n\t\r\n\t_checkResizability(column){\r\n\t\treturn column.definition.resizable;\r\n\t}\r\n\t\r\n\t_mouseDown(e, column, handle){\r\n\t\tvar self = this;\r\n\t\t\r\n\t\tself.table.element.classList.add(\"tabulator-block-select\");\r\n\t\t\r\n\t\tfunction mouseMove(e){\r\n\t\t\tvar x = typeof e.screenX === \"undefined\" ? e.touches[0].screenX : e.screenX,\r\n\t\t\tstartDiff = x - self.startX,\r\n\t\t\tmoveDiff = x - self.latestX,\r\n\t\t\tblockedBefore, blockedAfter;\r\n\t\t\t\r\n\t\t\tself.latestX = x;\r\n\t\t\t\r\n\t\t\tif(self.table.rtl){\r\n\t\t\t\tstartDiff = -startDiff;\r\n\t\t\t\tmoveDiff = -moveDiff;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tblockedBefore = column.width == column.minWidth || column.width == column.maxWidth;\r\n\t\t\t\r\n\t\t\tcolumn.setWidth(self.startWidth + startDiff);\r\n\t\t\t\r\n\t\t\tblockedAfter = column.width == column.minWidth || column.width == column.maxWidth;\r\n\t\t\t\r\n\t\t\tif(moveDiff < 0){\r\n\t\t\t\tself.nextColumn = self.initialNextColumn;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif(self.table.options.resizableColumnFit && self.nextColumn && !(blockedBefore && blockedAfter)){\r\n\t\t\t\tlet colWidth = self.nextColumn.getWidth();\r\n\t\t\t\t\r\n\t\t\t\tif(moveDiff > 0){\r\n\t\t\t\t\tif(colWidth <= self.nextColumn.minWidth){\r\n\t\t\t\t\t\tself.nextColumn = self.nextColumn.nextColumn();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\tif(self.nextColumn){\r\n\t\t\t\t\tself.nextColumn.setWidth(self.nextColumn.getWidth() - moveDiff);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tself.table.columnManager.rerenderColumns(true);\r\n\t\t\t\r\n\t\t\tif(!self.table.browserSlow && column.modules.resize && column.modules.resize.variableHeight){\r\n\t\t\t\tcolumn.checkCellHeights();\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\tfunction mouseUp(e){\r\n\t\t\t\r\n\t\t\t//block editor from taking action while resizing is taking place\r\n\t\t\tif(self.startColumn.modules.edit){\r\n\t\t\t\tself.startColumn.modules.edit.blocked = false;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif(self.table.browserSlow && column.modules.resize && column.modules.resize.variableHeight){\r\n\t\t\t\tcolumn.checkCellHeights();\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tdocument.body.removeEventListener(\"mouseup\", mouseUp);\r\n\t\t\tdocument.body.removeEventListener(\"mousemove\", mouseMove);\r\n\t\t\t\r\n\t\t\thandle.removeEventListener(\"touchmove\", mouseMove);\r\n\t\t\thandle.removeEventListener(\"touchend\", mouseUp);\r\n\t\t\t\r\n\t\t\tself.table.element.classList.remove(\"tabulator-block-select\");\r\n\t\t\t\r\n\t\t\tif(self.startWidth !== column.getWidth()){\r\n\t\t\t\tself.dispatch(\"column-resized\", column);\r\n\t\t\t\tself.table.externalEvents.dispatch(\"columnResized\", column.getComponent());\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\te.stopPropagation(); //prevent resize from interfering with movable columns\r\n\t\t\r\n\t\t//block editor from taking action while resizing is taking place\r\n\t\tif(self.startColumn.modules.edit){\r\n\t\t\tself.startColumn.modules.edit.blocked = true;\r\n\t\t}\r\n\t\t\r\n\t\tself.startX = typeof e.screenX === \"undefined\" ? e.touches[0].screenX : e.screenX;\r\n\t\tself.latestX = self.startX;\r\n\t\tself.startWidth = column.getWidth();\r\n\t\t\r\n\t\tdocument.body.addEventListener(\"mousemove\", mouseMove);\r\n\t\tdocument.body.addEventListener(\"mouseup\", mouseUp);\r\n\t\thandle.addEventListener(\"touchmove\", mouseMove, {passive: true});\r\n\t\thandle.addEventListener(\"touchend\", mouseUp);\r\n\t}\r\n}\r\n\r\nResizeColumns.moduleName = \"resizeColumns\";\r\n\r\nexport default ResizeColumns;","import Module from '../../core/Module.js';\r\n\r\nclass ResizeRows extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.startColumn = false;\r\n\t\tthis.startY = false;\r\n\t\tthis.startHeight = false;\r\n\t\tthis.handle = null;\r\n\t\tthis.prevHandle = null;\r\n\r\n\t\tthis.registerTableOption(\"resizableRows\", false); //resizable rows\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tif(this.table.options.resizableRows){\r\n\t\t\tthis.subscribe(\"row-layout-after\", this.initializeRow.bind(this));\r\n\t\t}\r\n\t}\r\n\r\n\tinitializeRow(row){\r\n\t\tvar self = this,\r\n\t\trowEl = row.getElement();\r\n\r\n\t\tvar handle = document.createElement('div');\r\n\t\thandle.className = \"tabulator-row-resize-handle\";\r\n\r\n\t\tvar prevHandle = document.createElement('div');\r\n\t\tprevHandle.className = \"tabulator-row-resize-handle prev\";\r\n\r\n\t\thandle.addEventListener(\"click\", function(e){\r\n\t\t\te.stopPropagation();\r\n\t\t});\r\n\r\n\t\tvar handleDown = function(e){\r\n\t\t\tself.startRow = row;\r\n\t\t\tself._mouseDown(e, row, handle);\r\n\t\t};\r\n\r\n\t\thandle.addEventListener(\"mousedown\", handleDown);\r\n\t\thandle.addEventListener(\"touchstart\", handleDown, {passive: true});\r\n\r\n\t\tprevHandle.addEventListener(\"click\", function(e){\r\n\t\t\te.stopPropagation();\r\n\t\t});\r\n\r\n\t\tvar prevHandleDown = function(e){\r\n\t\t\tvar prevRow = self.table.rowManager.prevDisplayRow(row);\r\n\r\n\t\t\tif(prevRow){\r\n\t\t\t\tself.startRow = prevRow;\r\n\t\t\t\tself._mouseDown(e, prevRow, prevHandle);\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tprevHandle.addEventListener(\"mousedown\",prevHandleDown);\r\n\t\tprevHandle.addEventListener(\"touchstart\",prevHandleDown, {passive: true});\r\n\r\n\t\trowEl.appendChild(handle);\r\n\t\trowEl.appendChild(prevHandle);\r\n\t}\r\n\r\n\t_mouseDown(e, row, handle){\r\n\t\tvar self = this;\r\n\r\n\t\tself.table.element.classList.add(\"tabulator-block-select\");\r\n\r\n\t\tfunction mouseMove(e){\r\n\t\t\trow.setHeight(self.startHeight + ((typeof e.screenY === \"undefined\" ? e.touches[0].screenY : e.screenY) - self.startY));\r\n\t\t}\r\n\r\n\t\tfunction mouseUp(e){\r\n\r\n\t\t\t// //block editor from taking action while resizing is taking place\r\n\t\t\t// if(self.startColumn.modules.edit){\r\n\t\t\t// \tself.startColumn.modules.edit.blocked = false;\r\n\t\t\t// }\r\n\r\n\t\t\tdocument.body.removeEventListener(\"mouseup\", mouseMove);\r\n\t\t\tdocument.body.removeEventListener(\"mousemove\", mouseMove);\r\n\r\n\t\t\thandle.removeEventListener(\"touchmove\", mouseMove);\r\n\t\t\thandle.removeEventListener(\"touchend\", mouseUp);\r\n\r\n\t\t\tself.table.element.classList.remove(\"tabulator-block-select\");\r\n\r\n\t\t\tself.dispatchExternal(\"rowResized\", row.getComponent());\r\n\t\t}\r\n\r\n\t\te.stopPropagation(); //prevent resize from interfering with movable columns\r\n\r\n\t\t//block editor from taking action while resizing is taking place\r\n\t\t// if(self.startColumn.modules.edit){\r\n\t\t// \tself.startColumn.modules.edit.blocked = true;\r\n\t\t// }\r\n\r\n\t\tself.startY = typeof e.screenY === \"undefined\" ? e.touches[0].screenY : e.screenY;\r\n\t\tself.startHeight = row.getHeight();\r\n\r\n\t\tdocument.body.addEventListener(\"mousemove\", mouseMove);\r\n\t\tdocument.body.addEventListener(\"mouseup\", mouseUp);\r\n\r\n\t\thandle.addEventListener(\"touchmove\", mouseMove, {passive: true});\r\n\t\thandle.addEventListener(\"touchend\", mouseUp);\r\n\t}\r\n}\r\n\r\nResizeRows.moduleName = \"resizeRows\";\r\n\r\nexport default ResizeRows;","import Module from '../../core/Module.js';\r\n\r\nclass ResizeTable extends Module{\r\n\t\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\t\t\r\n\t\tthis.binding = false;\r\n\t\tthis.visibilityObserver = false;\r\n\t\tthis.resizeObserver = false;\r\n\t\tthis.containerObserver = false;\r\n\t\t\r\n\t\tthis.tableHeight = 0;\r\n\t\tthis.tableWidth = 0;\r\n\t\tthis.containerHeight = 0;\r\n\t\tthis.containerWidth = 0;\r\n\t\t\r\n\t\tthis.autoResize = false;\r\n\t\t\r\n\t\tthis.visible = false;\r\n\t\t\r\n\t\tthis.initialized = false;\r\n\t\tthis.initialRedraw = false;\r\n\t\t\r\n\t\tthis.registerTableOption(\"autoResize\", true); //auto resize table\r\n\t}\r\n\t\r\n\tinitialize(){\r\n\t\tif(this.table.options.autoResize){\r\n\t\t\tvar table = this.table,\r\n\t\t\ttableStyle;\r\n\t\t\t\r\n\t\t\tthis.tableHeight = table.element.clientHeight;\r\n\t\t\tthis.tableWidth = table.element.clientWidth;\r\n\t\t\t\r\n\t\t\tif(table.element.parentNode){\r\n\t\t\t\tthis.containerHeight = table.element.parentNode.clientHeight;\r\n\t\t\t\tthis.containerWidth = table.element.parentNode.clientWidth;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif(typeof IntersectionObserver !== \"undefined\" && typeof ResizeObserver !== \"undefined\" && table.rowManager.getRenderMode() === \"virtual\"){\r\n\t\t\t\t\r\n\t\t\t\tthis.initializeVisibilityObserver();\r\n\t\t\t\t\r\n\t\t\t\tthis.autoResize = true;\r\n\t\t\t\t\r\n\t\t\t\tthis.resizeObserver = new ResizeObserver((entry) => {\r\n\t\t\t\t\tif(!table.browserMobile || (table.browserMobile &&!table.modules.edit.currentCell)){\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\tvar nodeHeight = Math.floor(entry[0].contentRect.height);\r\n\t\t\t\t\t\tvar nodeWidth = Math.floor(entry[0].contentRect.width);\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\tif(this.tableHeight != nodeHeight || this.tableWidth != nodeWidth){\r\n\t\t\t\t\t\t\tthis.tableHeight = nodeHeight;\r\n\t\t\t\t\t\t\tthis.tableWidth = nodeWidth;\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tif(table.element.parentNode){\r\n\t\t\t\t\t\t\t\tthis.containerHeight = table.element.parentNode.clientHeight;\r\n\t\t\t\t\t\t\t\tthis.containerWidth = table.element.parentNode.clientWidth;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tthis.redrawTable();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t\t\r\n\t\t\t\tthis.resizeObserver.observe(table.element);\r\n\t\t\t\t\r\n\t\t\t\ttableStyle = window.getComputedStyle(table.element);\r\n\t\t\t\t\r\n\t\t\t\tif(this.table.element.parentNode && !this.table.rowManager.fixedHeight && (tableStyle.getPropertyValue(\"max-height\") || tableStyle.getPropertyValue(\"min-height\"))){\r\n\t\t\t\t\t\r\n\t\t\t\t\tthis.containerObserver = new ResizeObserver((entry) => {\r\n\t\t\t\t\t\tif(!table.browserMobile || (table.browserMobile &&!table.modules.edit.currentCell)){\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tvar nodeHeight = Math.floor(entry[0].contentRect.height);\r\n\t\t\t\t\t\t\tvar nodeWidth = Math.floor(entry[0].contentRect.width);\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tif(this.containerHeight != nodeHeight || this.containerWidth != nodeWidth){\r\n\t\t\t\t\t\t\t\tthis.containerHeight = nodeHeight;\r\n\t\t\t\t\t\t\t\tthis.containerWidth = nodeWidth;\r\n\t\t\t\t\t\t\t\tthis.tableHeight = table.element.clientHeight;\r\n\t\t\t\t\t\t\t\tthis.tableWidth = table.element.clientWidth;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tthis.redrawTable();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t\t\r\n\t\t\t\t\tthis.containerObserver.observe(this.table.element.parentNode);\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\tthis.subscribe(\"table-resize\", this.tableResized.bind(this));\r\n\t\t\t\t\r\n\t\t\t}else{\r\n\t\t\t\tthis.binding = function(){\r\n\t\t\t\t\tif(!table.browserMobile || (table.browserMobile && !table.modules.edit.currentCell)){\r\n\t\t\t\t\t\ttable.columnManager.rerenderColumns(true);\r\n\t\t\t\t\t\ttable.redraw();\r\n\t\t\t\t\t}\r\n\t\t\t\t};\r\n\t\t\t\t\r\n\t\t\t\twindow.addEventListener(\"resize\", this.binding);\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tthis.subscribe(\"table-destroy\", this.clearBindings.bind(this));\r\n\t\t}\r\n\t}\r\n\t\r\n\tinitializeVisibilityObserver(){\r\n\t\tthis.visibilityObserver = new IntersectionObserver((entries) => {\r\n\t\t\tthis.visible = entries[0].isIntersecting;\r\n\r\n\t\t\tif(!this.initialized){\r\n\t\t\t\tthis.initialized = true;\r\n\t\t\t\tthis.initialRedraw = !this.visible;\r\n\t\t\t}\r\n\r\n\t\t\tif(this.visible){\r\n\t\t\t\tthis.redrawTable(this.initialRedraw);\r\n\t\t\t\tthis.initialRedraw = false;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t});\r\n\t\t\r\n\t\tthis.visibilityObserver.observe(this.table.element);\r\n\t}\r\n\t\r\n\tredrawTable(force){\r\n\t\tif(this.initialized && this.visible){\r\n\t\t\tthis.table.columnManager.rerenderColumns(true);\r\n\t\t\tthis.table.redraw(force);\r\n\t\t}\r\n\t}\r\n\t\r\n\ttableResized(){\r\n\t\tthis.table.rowManager.redraw();\r\n\t}\r\n\t\r\n\tclearBindings(){\r\n\t\tif(this.binding){\r\n\t\t\twindow.removeEventListener(\"resize\", this.binding);\r\n\t\t}\r\n\t\t\r\n\t\tif(this.resizeObserver){\r\n\t\t\tthis.resizeObserver.unobserve(this.table.element);\r\n\t\t}\r\n\t\t\r\n\t\tif(this.visibilityObserver){\r\n\t\t\tthis.visibilityObserver.unobserve(this.table.element);\r\n\t\t}\r\n\t\t\r\n\t\tif(this.containerObserver){\r\n\t\t\tthis.containerObserver.unobserve(this.table.element.parentNode);\r\n\t\t}\r\n\t}\r\n}\r\n\r\nResizeTable.moduleName = \"resizeTable\";\r\n\r\nexport default ResizeTable;","import Module from '../../core/Module.js';\r\n\r\nclass ResponsiveLayout extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.columns = [];\r\n\t\tthis.hiddenColumns = [];\r\n\t\tthis.mode = \"\";\r\n\t\tthis.index = 0;\r\n\t\tthis.collapseFormatter = [];\r\n\t\tthis.collapseStartOpen = true;\r\n\t\tthis.collapseHandleColumn = false;\r\n\r\n\t\tthis.registerTableOption(\"responsiveLayout\", false); //responsive layout flags\r\n\t\tthis.registerTableOption(\"responsiveLayoutCollapseStartOpen\", true); //start showing collapsed data\r\n\t\tthis.registerTableOption(\"responsiveLayoutCollapseUseFormatters\", true); //responsive layout collapse formatter\r\n\t\tthis.registerTableOption(\"responsiveLayoutCollapseFormatter\", false); //responsive layout collapse formatter\r\n\r\n\t\tthis.registerColumnOption(\"responsive\");\r\n\t}\r\n\r\n\t//generate responsive columns list\r\n\tinitialize(){\r\n\t\tif(this.table.options.responsiveLayout){\r\n\t\t\tthis.subscribe(\"column-layout\", this.initializeColumn.bind(this));\r\n\t\t\tthis.subscribe(\"column-show\", this.updateColumnVisibility.bind(this));\r\n\t\t\tthis.subscribe(\"column-hide\", this.updateColumnVisibility.bind(this));\r\n\t\t\tthis.subscribe(\"columns-loaded\", this.initializeResponsivity.bind(this));\r\n\t\t\tthis.subscribe(\"column-moved\", this.initializeResponsivity.bind(this));\r\n\t\t\tthis.subscribe(\"column-add\", this.initializeResponsivity.bind(this));\r\n\t\t\tthis.subscribe(\"column-delete\", this.initializeResponsivity.bind(this));\r\n\r\n\t\t\tthis.subscribe(\"table-redrawing\", this.tableRedraw.bind(this));\r\n\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 whether row is selectable\r\n\t\t\r\n\t\tthis.registerTableFunction(\"selectRow\", this.selectRows.bind(this));\r\n\t\tthis.registerTableFunction(\"deselectRow\", this.deselectRows.bind(this));\r\n\t\tthis.registerTableFunction(\"toggleSelectRow\", this.toggleRow.bind(this));\r\n\t\tthis.registerTableFunction(\"getSelectedRows\", this.getSelectedRows.bind(this));\r\n\t\tthis.registerTableFunction(\"getSelectedData\", this.getSelectedData.bind(this));\r\n\t\t\r\n\t\t//register component functions\r\n\t\tthis.registerComponentFunction(\"row\", \"select\", this.selectRows.bind(this));\r\n\t\tthis.registerComponentFunction(\"row\", \"deselect\", this.deselectRows.bind(this));\r\n\t\tthis.registerComponentFunction(\"row\", \"toggleSelect\", this.toggleRow.bind(this));\r\n\t\tthis.registerComponentFunction(\"row\", \"isSelected\", this.isRowSelected.bind(this));\r\n\t}\r\n\t\r\n\tinitialize(){\r\n\t\tif(this.table.options.selectable !== false){\r\n\t\t\tthis.subscribe(\"row-init\", this.initializeRow.bind(this));\r\n\t\t\tthis.subscribe(\"row-deleting\", this.rowDeleted.bind(this));\r\n\t\t\tthis.subscribe(\"rows-wipe\", this.clearSelectionData.bind(this));\r\n\t\t\tthis.subscribe(\"rows-retrieve\", this.rowRetrieve.bind(this));\r\n\t\t\t\r\n\t\t\tif(this.table.options.selectable && !this.table.options.selectablePersistence){\r\n\t\t\t\tthis.subscribe(\"data-refreshing\", this.deselectRows.bind(this));\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\trowRetrieve(type, prevValue){\r\n\t\treturn type === \"selected\" ? this.selectedRows : prevValue;\r\n\t}\r\n\t\r\n\trowDeleted(row){\r\n\t\tthis._deselectRow(row, true);\r\n\t}\r\n\t\r\n\tclearSelectionData(silent){\r\n\t\tthis.selecting = false;\r\n\t\tthis.lastClickedRow = false;\r\n\t\tthis.selectPrev = [];\r\n\t\tthis.selectedRows = [];\r\n\t\t\r\n\t\tif(silent !== true){\r\n\t\t\tthis._rowSelectionChanged();\r\n\t\t}\r\n\t}\r\n\t\r\n\tinitializeRow(row){\r\n\t\tvar self = this,\r\n\t\telement = row.getElement();\r\n\t\t\r\n\t\t// trigger end of row selection\r\n\t\tvar endSelect = function(){\r\n\t\t\t\r\n\t\t\tsetTimeout(function(){\r\n\t\t\t\tself.selecting = false;\r\n\t\t\t}, 50);\r\n\t\t\t\r\n\t\t\tdocument.body.removeEventListener(\"mouseup\", endSelect);\r\n\t\t};\r\n\t\t\r\n\t\trow.modules.select = {selected:false};\r\n\t\t\r\n\t\t//set row selection class\r\n\t\tif(self.table.options.selectableCheck.call(this.table, row.getComponent())){\r\n\t\t\telement.classList.add(\"tabulator-selectable\");\r\n\t\t\telement.classList.remove(\"tabulator-unselectable\");\r\n\t\t\t\r\n\t\t\tif(self.table.options.selectable && self.table.options.selectable != \"highlight\"){\r\n\t\t\t\tif(self.table.options.selectableRangeMode === \"click\"){\r\n\t\t\t\t\telement.addEventListener(\"click\", this.handleComplexRowClick.bind(this, row));\r\n\t\t\t\t}else{\r\n\t\t\t\t\telement.addEventListener(\"click\", function(e){\r\n\t\t\t\t\t\tif(!self.table.modExists(\"edit\") || !self.table.modules.edit.getCurrentCell()){\r\n\t\t\t\t\t\t\tself.table._clearSelection();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\tif(!self.selecting){\r\n\t\t\t\t\t\t\tself.toggleRow(row);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t\t\r\n\t\t\t\t\telement.addEventListener(\"mousedown\", function(e){\r\n\t\t\t\t\t\tif(e.shiftKey){\r\n\t\t\t\t\t\t\tself.table._clearSelection();\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tself.selecting = true;\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tself.selectPrev = [];\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tdocument.body.addEventListener(\"mouseup\", endSelect);\r\n\t\t\t\t\t\t\tdocument.body.addEventListener(\"keyup\", endSelect);\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tself.toggleRow(row);\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t\t\r\n\t\t\t\t\telement.addEventListener(\"mouseenter\", function(e){\r\n\t\t\t\t\t\tif(self.selecting){\r\n\t\t\t\t\t\t\tself.table._clearSelection();\r\n\t\t\t\t\t\t\tself.toggleRow(row);\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tif(self.selectPrev[1] == row){\r\n\t\t\t\t\t\t\t\tself.toggleRow(self.selectPrev[0]);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t\t\r\n\t\t\t\t\telement.addEventListener(\"mouseout\", function(e){\r\n\t\t\t\t\t\tif(self.selecting){\r\n\t\t\t\t\t\t\tself.table._clearSelection();\r\n\t\t\t\t\t\t\tself.selectPrev.unshift(row);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t\r\n\t\t}else{\r\n\t\t\telement.classList.add(\"tabulator-unselectable\");\r\n\t\t\telement.classList.remove(\"tabulator-selectable\");\r\n\t\t}\r\n\t}\r\n\t\r\n\thandleComplexRowClick(row, e){\r\n\t\tif(e.shiftKey){\r\n\t\t\tthis.table._clearSelection();\r\n\t\t\tthis.lastClickedRow = this.lastClickedRow || row;\r\n\t\t\t\r\n\t\t\tvar lastClickedRowIdx = this.table.rowManager.getDisplayRowIndex(this.lastClickedRow);\r\n\t\t\tvar rowIdx = this.table.rowManager.getDisplayRowIndex(row);\r\n\t\t\t\r\n\t\t\tvar fromRowIdx = lastClickedRowIdx <= rowIdx ? lastClickedRowIdx : rowIdx;\r\n\t\t\tvar toRowIdx = lastClickedRowIdx >= rowIdx ? lastClickedRowIdx : rowIdx;\r\n\t\t\t\r\n\t\t\tvar rows = this.table.rowManager.getDisplayRows().slice(0);\r\n\t\t\tvar toggledRows = rows.splice(fromRowIdx, toRowIdx - fromRowIdx + 1);\r\n\t\t\t\r\n\t\t\tif(e.ctrlKey || e.metaKey){\r\n\t\t\t\ttoggledRows.forEach((toggledRow)=>{\r\n\t\t\t\t\tif(toggledRow !== this.lastClickedRow){\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\tif(this.table.options.selectable !== true && !this.isRowSelected(row)){\r\n\t\t\t\t\t\t\tif(this.selectedRows.length < this.table.options.selectable){\r\n\t\t\t\t\t\t\t\tthis.toggleRow(toggledRow);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\tthis.toggleRow(toggledRow);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t\tthis.lastClickedRow = row;\r\n\t\t\t}else{\r\n\t\t\t\tthis.deselectRows(undefined, true);\r\n\t\t\t\t\r\n\t\t\t\tif(this.table.options.selectable !== true){\r\n\t\t\t\t\tif(toggledRows.length > this.table.options.selectable){\r\n\t\t\t\t\t\ttoggledRows = toggledRows.slice(0, this.table.options.selectable);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\tthis.selectRows(toggledRows);\r\n\t\t\t}\r\n\t\t\tthis.table._clearSelection();\r\n\t\t}\r\n\t\telse if(e.ctrlKey || e.metaKey){\r\n\t\t\tthis.toggleRow(row);\r\n\t\t\tthis.lastClickedRow = row;\r\n\t\t}else{\r\n\t\t\tthis.deselectRows(undefined, true);\r\n\t\t\tthis.selectRows(row);\r\n\t\t\tthis.lastClickedRow = row;\r\n\t\t}\r\n\t}\r\n\t\r\n\t//toggle row selection\r\n\ttoggleRow(row){\r\n\t\tif(this.table.options.selectableCheck.call(this.table, row.getComponent())){\r\n\t\t\tif(row.modules.select && row.modules.select.selected){\r\n\t\t\t\tthis._deselectRow(row);\r\n\t\t\t}else{\r\n\t\t\t\tthis._selectRow(row);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\t//select a number of rows\r\n\tselectRows(rows){\r\n\t\tvar rowMatch;\r\n\t\t\r\n\t\tswitch(typeof rows){\r\n\t\t\tcase \"undefined\":\r\n\t\t\t\tthis.table.rowManager.rows.forEach((row) => {\r\n\t\t\t\t\tthis._selectRow(row, true, true);\r\n\t\t\t\t});\r\n\t\t\t\r\n\t\t\t\tthis._rowSelectionChanged();\r\n\t\t\t\tbreak;\r\n\t\t\t\r\n\t\t\tcase \"string\":\r\n\t\t\t\r\n\t\t\t\trowMatch = this.table.rowManager.findRow(rows);\r\n\t\t\t\r\n\t\t\t\tif(rowMatch){\r\n\t\t\t\t\tthis._selectRow(rowMatch, true, true);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tthis.table.rowManager.getRows(rows).forEach((row) => {\r\n\t\t\t\t\t\tthis._selectRow(row, true, true);\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t\r\n\t\t\t\tthis._rowSelectionChanged();\r\n\t\t\t\tbreak;\r\n\t\t\t\r\n\t\t\tdefault:\r\n\t\t\t\tif(Array.isArray(rows)){\r\n\t\t\t\t\trows.forEach((row) => {\r\n\t\t\t\t\t\tthis._selectRow(row, true, true);\r\n\t\t\t\t\t});\r\n\t\t\t\t\r\n\t\t\t\t\tthis._rowSelectionChanged();\r\n\t\t\t\t}else{\r\n\t\t\t\t\tthis._selectRow(rows, false, true);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\t\r\n\t//select an individual row\r\n\t_selectRow(rowInfo, silent, force){\r\n\t\t//handle max row count\r\n\t\tif(!isNaN(this.table.options.selectable) && this.table.options.selectable !== true && !force){\r\n\t\t\tif(this.selectedRows.length >= this.table.options.selectable){\r\n\t\t\t\tif(this.table.options.selectableRollingSelection){\r\n\t\t\t\t\tthis._deselectRow(this.selectedRows[0]);\r\n\t\t\t\t}else{\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\tvar row = this.table.rowManager.findRow(rowInfo);\r\n\t\t\r\n\t\tif(row){\r\n\t\t\tif(this.selectedRows.indexOf(row) == -1){\r\n\t\t\t\trow.getElement().classList.add(\"tabulator-selected\");\r\n\t\t\t\tif(!row.modules.select){\r\n\t\t\t\t\trow.modules.select = {};\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\trow.modules.select.selected = true;\r\n\t\t\t\tif(row.modules.select.checkboxEl){\r\n\t\t\t\t\trow.modules.select.checkboxEl.checked = true;\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\tthis.selectedRows.push(row);\r\n\t\t\t\t\r\n\t\t\t\tif(this.table.options.dataTreeSelectPropagate){\r\n\t\t\t\t\tthis.childRowSelection(row, true);\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\tthis.dispatchExternal(\"rowSelected\", row.getComponent());\r\n\t\t\t\t\r\n\t\t\t\tthis._rowSelectionChanged(silent);\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tif(!silent){\r\n\t\t\t\tconsole.warn(\"Selection Error - No such row found, ignoring selection:\" + rowInfo);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\tisRowSelected(row){\r\n\t\treturn this.selectedRows.indexOf(row) !== -1;\r\n\t}\r\n\t\r\n\t//deselect a number of rows\r\n\tdeselectRows(rows, silent){\r\n\t\tvar self = this,\r\n\t\trowCount;\r\n\t\t\r\n\t\tif(typeof rows == \"undefined\"){\r\n\t\t\t\r\n\t\t\trowCount = self.selectedRows.length;\r\n\t\t\t\r\n\t\t\tfor(let i = 0; i < rowCount; i++){\r\n\t\t\t\tself._deselectRow(self.selectedRows[0], true);\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif(rowCount){\r\n\t\t\t\tself._rowSelectionChanged(silent);\r\n\t\t\t}\r\n\t\t\t\r\n\t\t}else{\r\n\t\t\tif(Array.isArray(rows)){\r\n\t\t\t\trows.forEach(function(row){\r\n\t\t\t\t\tself._deselectRow(row, true);\r\n\t\t\t\t});\r\n\t\t\t\t\r\n\t\t\t\tself._rowSelectionChanged(silent);\r\n\t\t\t}else{\r\n\t\t\t\tself._deselectRow(rows, silent);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\t//deselect an individual row\r\n\t_deselectRow(rowInfo, silent){\r\n\t\tvar self = this,\r\n\t\trow = self.table.rowManager.findRow(rowInfo),\r\n\t\tindex;\r\n\t\t\r\n\t\tif(row){\r\n\t\t\tindex = self.selectedRows.findIndex(function(selectedRow){\r\n\t\t\t\treturn selectedRow == row;\r\n\t\t\t});\r\n\t\t\t\r\n\t\t\tif(index > -1){\r\n\t\t\t\t\r\n\t\t\t\trow.getElement().classList.remove(\"tabulator-selected\");\r\n\t\t\t\tif(!row.modules.select){\r\n\t\t\t\t\trow.modules.select = {};\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\trow.modules.select.selected = false;\r\n\t\t\t\tif(row.modules.select.checkboxEl){\r\n\t\t\t\t\trow.modules.select.checkboxEl.checked = false;\r\n\t\t\t\t}\r\n\t\t\t\tself.selectedRows.splice(index, 1);\r\n\t\t\t\t\r\n\t\t\t\tif(this.table.options.dataTreeSelectPropagate){\r\n\t\t\t\t\tthis.childRowSelection(row, false);\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\tthis.dispatchExternal(\"rowDeselected\", row.getComponent());\r\n\t\t\t\t\r\n\t\t\t\tself._rowSelectionChanged(silent);\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tif(!silent){\r\n\t\t\t\tconsole.warn(\"Deselection Error - No such row found, ignoring selection:\" + rowInfo);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\tgetSelectedData(){\r\n\t\tvar data = [];\r\n\t\t\r\n\t\tthis.selectedRows.forEach(function(row){\r\n\t\t\tdata.push(row.getData());\r\n\t\t});\r\n\t\t\r\n\t\treturn data;\r\n\t}\r\n\t\r\n\tgetSelectedRows(){\r\n\t\t\r\n\t\tvar rows = [];\r\n\t\t\r\n\t\tthis.selectedRows.forEach(function(row){\r\n\t\t\trows.push(row.getComponent());\r\n\t\t});\r\n\t\t\r\n\t\treturn rows;\r\n\t}\r\n\t\r\n\t_rowSelectionChanged(silent){\r\n\t\tif(this.headerCheckboxElement){\r\n\t\t\tif(this.selectedRows.length === 0){\r\n\t\t\t\tthis.headerCheckboxElement.checked = false;\r\n\t\t\t\tthis.headerCheckboxElement.indeterminate = false;\r\n\t\t\t} else if(this.table.rowManager.rows.length === this.selectedRows.length){\r\n\t\t\t\tthis.headerCheckboxElement.checked = true;\r\n\t\t\t\tthis.headerCheckboxElement.indeterminate = false;\r\n\t\t\t} else {\r\n\t\t\t\tthis.headerCheckboxElement.indeterminate = true;\r\n\t\t\t\tthis.headerCheckboxElement.checked = false;\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\tif(!silent){\r\n\t\t\tthis.dispatchExternal(\"rowSelectionChanged\", this.getSelectedData(), this.getSelectedRows());\r\n\t\t}\r\n\t}\r\n\t\r\n\tregisterRowSelectCheckbox (row, element) {\r\n\t\tif(!row._row.modules.select){\r\n\t\t\trow._row.modules.select = {};\r\n\t\t}\r\n\t\t\r\n\t\trow._row.modules.select.checkboxEl = element;\r\n\t}\r\n\t\r\n\tregisterHeaderSelectCheckbox (element) {\r\n\t\tthis.headerCheckboxElement = element;\r\n\t}\r\n\t\r\n\tchildRowSelection(row, select){\r\n\t\tvar children = this.table.modules.dataTree.getChildren(row, true);\r\n\t\t\r\n\t\tif(select){\r\n\t\t\tfor(let child of children){\r\n\t\t\t\tthis._selectRow(child, true);\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tfor(let child of children){\r\n\t\t\t\tthis._deselectRow(child, true);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n\r\nSelectRow.moduleName = \"selectRow\";\r\n\r\nexport default SelectRow;","//sort datetime\r\nexport default function(a, b, aRow, bRow, column, dir, params){\r\n\tvar DT = window.DateTime || luxon.DateTime;\r\n\tvar format = params.format || \"dd/MM/yyyy HH:mm:ss\",\r\n\talignEmptyValues = params.alignEmptyValues,\r\n\temptyAlign = 0;\r\n\r\n\tif(typeof DT != \"undefined\"){\r\n\t\tif(!DT.isDateTime(a)){\r\n\t\t\tif(format === \"iso\"){\r\n\t\t\t\ta = DT.fromISO(String(a));\r\n\t\t\t}else{\r\n\t\t\t\ta = DT.fromFormat(String(a), format);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(!DT.isDateTime(b)){\r\n\t\t\tif(format === \"iso\"){\r\n\t\t\t\tb = DT.fromISO(String(b));\r\n\t\t\t}else{\r\n\t\t\t\tb = DT.fromFormat(String(b), format);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(!a.isValid){\r\n\t\t\temptyAlign = !b.isValid ? 0 : -1;\r\n\t\t}else if(!b.isValid){\r\n\t\t\temptyAlign = 1;\r\n\t\t}else{\r\n\t\t\t//compare valid values\r\n\t\t\treturn a - b;\r\n\t\t}\r\n\r\n\t\t//fix empty values in position\r\n\t\tif((alignEmptyValues === \"top\" && dir === \"desc\") || (alignEmptyValues === \"bottom\" && dir === \"asc\")){\r\n\t\t\temptyAlign *= -1;\r\n\t\t}\r\n\r\n\t\treturn emptyAlign;\r\n\r\n\t}else{\r\n\t\tconsole.error(\"Sort Error - 'datetime' sorter is dependant on luxon.js\");\r\n\t}\r\n}","import number from './sorters/number.js';\r\nimport string from './sorters/string.js';\r\nimport date from './sorters/date.js';\r\nimport time from './sorters/time.js';\r\nimport datetime from './sorters/datetime.js';\r\nimport boolean from './sorters/boolean.js';\r\nimport array from './sorters/array.js';\r\nimport exists from './sorters/exists.js';\r\nimport alphanum from './sorters/alphanum.js';\r\n\r\nexport default {\r\n\tnumber:number,\r\n\tstring:string,\r\n\tdate:date,\r\n\ttime:time,\r\n\tdatetime:datetime,\r\n\tboolean:boolean,\r\n\tarray:array,\r\n\texists:exists,\r\n\talphanum:alphanum\r\n};","//sort numbers\r\nexport default function(a, b, aRow, bRow, column, dir, params){\r\n\tvar alignEmptyValues = params.alignEmptyValues;\r\n\tvar decimal = params.decimalSeparator;\r\n\tvar thousand = params.thousandSeparator;\r\n\tvar emptyAlign = 0;\r\n\r\n\ta = String(a);\r\n\tb = String(b);\r\n\r\n\tif(thousand){\r\n\t\ta = a.split(thousand).join(\"\");\r\n\t\tb = b.split(thousand).join(\"\");\r\n\t}\r\n\r\n\tif(decimal){\r\n\t\ta = a.split(decimal).join(\".\");\r\n\t\tb = b.split(decimal).join(\".\");\r\n\t}\r\n\r\n\ta = parseFloat(a);\r\n\tb = parseFloat(b);\r\n\r\n\t//handle non numeric values\r\n\tif(isNaN(a)){\r\n\t\temptyAlign = isNaN(b) ? 0 : -1;\r\n\t}else if(isNaN(b)){\r\n\t\temptyAlign = 1;\r\n\t}else{\r\n\t\t//compare valid values\r\n\t\treturn a - b;\r\n\t}\r\n\r\n\t//fix empty values in position\r\n\tif((alignEmptyValues === \"top\" && dir === \"desc\") || (alignEmptyValues === \"bottom\" && dir === \"asc\")){\r\n\t\temptyAlign *= -1;\r\n\t}\r\n\r\n\treturn emptyAlign;\r\n}","//sort strings\r\nexport default function(a, b, aRow, bRow, column, dir, params){\r\n\tvar alignEmptyValues = params.alignEmptyValues;\r\n\tvar emptyAlign = 0;\r\n\tvar locale;\r\n\r\n\t//handle empty values\r\n\tif(!a){\r\n\t\temptyAlign = !b ? 0 : -1;\r\n\t}else if(!b){\r\n\t\temptyAlign = 1;\r\n\t}else{\r\n\t\t//compare valid values\r\n\t\tswitch(typeof params.locale){\r\n\t\t\tcase \"boolean\":\r\n\t\t\t\tif(params.locale){\r\n\t\t\t\t\tlocale = this.langLocale();\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"string\":\r\n\t\t\t\tlocale = params.locale;\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\treturn String(a).toLowerCase().localeCompare(String(b).toLowerCase(), locale);\r\n\t}\r\n\r\n\t//fix empty values in position\r\n\tif((alignEmptyValues === \"top\" && dir === \"desc\") || (alignEmptyValues === \"bottom\" && dir === \"asc\")){\r\n\t\temptyAlign *= -1;\r\n\t}\r\n\r\n\treturn emptyAlign;\r\n}","import datetime from './datetime.js';\r\n\r\n//sort date\r\nexport default function(a, b, aRow, bRow, column, dir, params){\r\n\tif(!params.format){\r\n\t\tparams.format = \"dd/MM/yyyy\";\r\n\t}\r\n\r\n\treturn datetime.call(this, a, b, aRow, bRow, column, dir, params);\r\n}","import datetime from './datetime.js';\r\n\r\n//sort times\r\nexport default function(a, b, aRow, bRow, column, dir, params){\r\n\tif(!params.format){\r\n\t\tparams.format = \"HH:mm\";\r\n\t}\r\n\r\n\treturn datetime.call(this, a, b, aRow, bRow, column, dir, params);\r\n}","//sort booleans\r\nexport default function(a, b, aRow, bRow, column, dir, params){\r\n\tvar el1 = a === true || a === \"true\" || a === \"True\" || a === 1 ? 1 : 0;\r\n\tvar el2 = b === true || b === \"true\" || b === \"True\" || b === 1 ? 1 : 0;\r\n\r\n\treturn el1 - el2;\r\n}","//sort if element contains any data\r\nexport default function(a, b, aRow, bRow, column, dir, params){\r\n\tvar type = params.type || \"length\",\r\n\talignEmptyValues = params.alignEmptyValues,\r\n\temptyAlign = 0;\r\n\r\n\tfunction calc(value){\r\n\t\tvar result;\r\n\r\n\t\tswitch(type){\r\n\t\t\tcase \"length\":\r\n\t\t\t\tresult = value.length;\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase \"sum\":\r\n\t\t\t\tresult = value.reduce(function(c, d){\r\n\t\t\t\t\treturn c + d;\r\n\t\t\t\t});\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase \"max\":\r\n\t\t\t\tresult = Math.max.apply(null, value) ;\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase \"min\":\r\n\t\t\t\tresult = Math.min.apply(null, value) ;\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase \"avg\":\r\n\t\t\t\tresult = value.reduce(function(c, d){\r\n\t\t\t\t\treturn c + d;\r\n\t\t\t\t}) / value.length;\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\t//handle non array values\r\n\tif(!Array.isArray(a)){\r\n\t\temptyAlign = !Array.isArray(b) ? 0 : -1;\r\n\t}else if(!Array.isArray(b)){\r\n\t\temptyAlign = 1;\r\n\t}else{\r\n\t\treturn calc(b) - calc(a);\r\n\t}\r\n\r\n\t//fix empty values in position\r\n\tif((alignEmptyValues === \"top\" && dir === \"desc\") || (alignEmptyValues === \"bottom\" && dir === \"asc\")){\r\n\t\temptyAlign *= -1;\r\n\t}\r\n\r\n\treturn emptyAlign;\r\n}","//sort if element contains any data\r\nexport default function(a, b, aRow, bRow, column, dir, params){\r\n\tvar el1 = typeof a == \"undefined\" ? 0 : 1;\r\n\tvar el2 = typeof b == \"undefined\" ? 0 : 1;\r\n\r\n\treturn el1 - el2;\r\n}","//sort alpha numeric strings\r\nexport default function(as, bs, aRow, bRow, column, dir, params){\r\n\tvar a, b, a1, b1, i= 0, L, rx = /(\\d+)|(\\D+)/g, rd = /\\d/;\r\n\tvar alignEmptyValues = params.alignEmptyValues;\r\n\tvar emptyAlign = 0;\r\n\r\n\t//handle empty values\r\n\tif(!as && as!== 0){\r\n\t\temptyAlign = !bs && bs!== 0 ? 0 : -1;\r\n\t}else if(!bs && bs!== 0){\r\n\t\temptyAlign = 1;\r\n\t}else{\r\n\r\n\t\tif(isFinite(as) && isFinite(bs)) return as - bs;\r\n\t\ta = String(as).toLowerCase();\r\n\t\tb = String(bs).toLowerCase();\r\n\t\tif(a === b) return 0;\r\n\t\tif(!(rd.test(a) && rd.test(b))) return a > b ? 1 : -1;\r\n\t\ta = a.match(rx);\r\n\t\tb = b.match(rx);\r\n\t\tL = a.length > b.length ? b.length : a.length;\r\n\t\twhile(i < L){\r\n\t\t\ta1= a[i];\r\n\t\t\tb1= b[i++];\r\n\t\t\tif(a1 !== b1){\r\n\t\t\t\tif(isFinite(a1) && isFinite(b1)){\r\n\t\t\t\t\tif(a1.charAt(0) === \"0\") a1 = \".\" + a1;\r\n\t\t\t\t\tif(b1.charAt(0) === \"0\") b1 = \".\" + b1;\r\n\t\t\t\t\treturn a1 - b1;\r\n\t\t\t\t}\r\n\t\t\t\telse return a1 > b1 ? 1 : -1;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn a.length > b.length;\r\n\t}\r\n\r\n\t//fix empty values in position\r\n\tif((alignEmptyValues === \"top\" && dir === \"desc\") || (alignEmptyValues === \"bottom\" && dir === \"asc\")){\r\n\t\temptyAlign *= -1;\r\n\t}\r\n\r\n\treturn emptyAlign;\r\n}","import Module from '../../core/Module.js';\r\n\r\nimport defaultSorters from './defaults/sorters.js';\r\n\r\nclass Sort extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.sortList = []; //holder current sort\r\n\t\tthis.changed = false; //has the sort changed since last render\r\n\r\n\t\tthis.registerTableOption(\"sortMode\", \"local\"); //local or remote sorting\r\n\r\n\t\tthis.registerTableOption(\"initialSort\", false); //initial sorting criteria\r\n\t\tthis.registerTableOption(\"columnHeaderSortMulti\", true); //multiple or single column sorting\r\n\t\tthis.registerTableOption(\"sortOrderReverse\", false); //reverse internal sort ordering\r\n\t\tthis.registerTableOption(\"headerSortElement\", \"
\"); //header sort element\r\n\r\n\t\tthis.registerColumnOption(\"sorter\");\r\n\t\tthis.registerColumnOption(\"sorterParams\");\r\n\r\n\t\tthis.registerColumnOption(\"headerSort\", true);\r\n\t\tthis.registerColumnOption(\"headerSortStartingDir\");\r\n\t\tthis.registerColumnOption(\"headerSortTristate\");\r\n\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tthis.subscribe(\"column-layout\", this.initializeColumn.bind(this));\r\n\t\tthis.subscribe(\"table-built\", this.tableBuilt.bind(this));\r\n\t\tthis.registerDataHandler(this.sort.bind(this), 20);\r\n\r\n\t\tthis.registerTableFunction(\"setSort\", this.userSetSort.bind(this));\r\n\t\tthis.registerTableFunction(\"getSorters\", this.getSort.bind(this));\r\n\t\tthis.registerTableFunction(\"clearSort\", this.clearSort.bind(this));\r\n\r\n\t\tif(this.table.options.sortMode === \"remote\"){\r\n\t\t\tthis.subscribe(\"data-params\", this.remoteSortParams.bind(this));\r\n\t\t}\r\n\t}\r\n\r\n\ttableBuilt(){\r\n\t\tif(this.table.options.initialSort){\r\n\t\t\tthis.setSort(this.table.options.initialSort);\r\n\t\t}\r\n\t}\r\n\r\n\tremoteSortParams(data, config, silent, params){\r\n\t\tvar sorters = this.getSort();\r\n\r\n\t\tsorters.forEach((item) => {\r\n\t\t\tdelete item.column;\r\n\t\t});\r\n\r\n\t\tparams.sort = sorters;\r\n\r\n\t\treturn params;\r\n\t}\r\n\r\n\r\n\t///////////////////////////////////\r\n\t///////// Table Functions /////////\r\n\t///////////////////////////////////\r\n\r\n\tuserSetSort(sortList, dir){\r\n\t\tthis.setSort(sortList, dir);\r\n\t\t// this.table.rowManager.sorterRefresh();\r\n\t\tthis.refreshSort();\r\n\t}\r\n\r\n\tclearSort(){\r\n\t\tthis.clear();\r\n\t\t// this.table.rowManager.sorterRefresh();\r\n\t\tthis.refreshSort();\r\n\t}\r\n\r\n\r\n\t///////////////////////////////////\r\n\t///////// Internal Logic //////////\r\n\t///////////////////////////////////\r\n\r\n\t//initialize column header for sorting\r\n\tinitializeColumn(column){\r\n\t\tvar sorter = false,\r\n\t\tcolEl,\r\n\t\tarrowEl;\r\n\r\n\t\tswitch(typeof column.definition.sorter){\r\n\t\t\tcase \"string\":\r\n\t\t\t\tif(Sort.sorters[column.definition.sorter]){\r\n\t\t\t\t\tsorter = Sort.sorters[column.definition.sorter];\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.warn(\"Sort Error - No such sorter found: \", column.definition.sorter);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase \"function\":\r\n\t\t\t\tsorter = column.definition.sorter;\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\tcolumn.modules.sort = {\r\n\t\t\tsorter:sorter, dir:\"none\",\r\n\t\t\tparams:column.definition.sorterParams || {},\r\n\t\t\tstartingDir:column.definition.headerSortStartingDir || \"asc\",\r\n\t\t\ttristate: column.definition.headerSortTristate,\r\n\t\t};\r\n\r\n\t\tif(column.definition.headerSort !== false){\r\n\r\n\t\t\tcolEl = column.getElement();\r\n\r\n\t\t\tcolEl.classList.add(\"tabulator-sortable\");\r\n\r\n\r\n\t\t\tarrowEl = document.createElement(\"div\");\r\n\t\t\tarrowEl.classList.add(\"tabulator-col-sorter\");\r\n\r\n\t\t\tswitch(this.table.options.headerSortElement){\r\n\t\t\t\tcase \"function\":\r\n\t\t\t\t\t//do nothing\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"object\":\r\n\t\t\t\t\tarrowEl.appendChild(this.table.options.headerSortElement);\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tarrowEl.innerHTML = this.table.options.headerSortElement;\r\n\t\t\t}\r\n\r\n\t\t\t//create sorter arrow\r\n\t\t\tcolumn.titleHolderElement.appendChild(arrowEl);\r\n\r\n\t\t\tcolumn.modules.sort.element = arrowEl;\r\n\r\n\t\t\tthis.setColumnHeaderSortIcon(column, \"none\");\r\n\r\n\t\t\t//sort on click\r\n\t\t\tcolEl.addEventListener(\"click\", (e) => {\r\n\t\t\t\tvar dir = \"\",\r\n\t\t\t\tsorters=[],\r\n\t\t\t\tmatch = false;\r\n\r\n\t\t\t\tif(column.modules.sort){\r\n\t\t\t\t\tif(column.modules.sort.tristate){\r\n\t\t\t\t\t\tif(column.modules.sort.dir == \"none\"){\r\n\t\t\t\t\t\t\tdir = column.modules.sort.startingDir;\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\tif(column.modules.sort.dir == column.modules.sort.startingDir){\r\n\t\t\t\t\t\t\t\tdir = column.modules.sort.dir == \"asc\" ? \"desc\" : \"asc\";\r\n\t\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\t\tdir = \"none\";\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tswitch(column.modules.sort.dir){\r\n\t\t\t\t\t\t\tcase \"asc\":\r\n\t\t\t\t\t\t\t\tdir = \"desc\";\r\n\t\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\t\tcase \"desc\":\r\n\t\t\t\t\t\t\t\tdir = \"asc\";\r\n\t\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\t\tdefault:\r\n\t\t\t\t\t\t\t\tdir = column.modules.sort.startingDir;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\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(null, false, false);\r\n\t\t}else{\r\n\t\t\tthis.refreshData(true);\r\n\t\t}\r\n\r\n\t\t//TODO - Persist left position of row manager\r\n\t\t// left = this.scrollLeft;\r\n\t\t// this.scrollHorizontal(left);\r\n\t}\r\n\r\n\t//check if the sorters have changed since last use\r\n\thasChanged(){\r\n\t\tvar changed = this.changed;\r\n\t\tthis.changed = false;\r\n\t\treturn changed;\r\n\t}\r\n\r\n\t//return current sorters\r\n\tgetSort(){\r\n\t\tvar self = this,\r\n\t\tsorters = [];\r\n\r\n\t\tself.sortList.forEach(function(item){\r\n\t\t\tif(item.column){\r\n\t\t\t\tsorters.push({column:item.column.getComponent(), field:item.column.getField(), dir:item.dir});\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn sorters;\r\n\t}\r\n\r\n\t//change sort list and trigger sort\r\n\tsetSort(sortList, dir){\r\n\t\tvar self = this,\r\n\t\tnewSortList = [];\r\n\r\n\t\tif(!Array.isArray(sortList)){\r\n\t\t\tsortList = [{column: sortList, dir:dir}];\r\n\t\t}\r\n\r\n\t\tsortList.forEach(function(item){\r\n\t\t\tvar column;\r\n\r\n\t\t\tcolumn = self.table.columnManager.findColumn(item.column);\r\n\r\n\t\t\tif(column){\r\n\t\t\t\titem.column = column;\r\n\t\t\t\tnewSortList.push(item);\r\n\t\t\t\tself.changed = true;\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Sort Warning - Sort field does not exist and is being ignored: \", item.column);\r\n\t\t\t}\r\n\r\n\t\t});\r\n\r\n\t\tself.sortList = newSortList;\r\n\r\n\t\tthis.dispatch(\"sort-changed\");\r\n\t}\r\n\r\n\t//clear sorters\r\n\tclear(){\r\n\t\tthis.setSort([]);\r\n\t}\r\n\r\n\t//find appropriate sorter for column\r\n\tfindSorter(column){\r\n\t\tvar row = this.table.rowManager.activeRows[0],\r\n\t\tsorter = \"string\",\r\n\t\tfield, value;\r\n\r\n\t\tif(row){\r\n\t\t\trow = row.getData();\r\n\t\t\tfield = column.getField();\r\n\r\n\t\t\tif(field){\r\n\r\n\t\t\t\tvalue = column.getFieldValue(row);\r\n\r\n\t\t\t\tswitch(typeof value){\r\n\t\t\t\t\tcase \"undefined\":\r\n\t\t\t\t\t\tsorter = \"string\";\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase \"boolean\":\r\n\t\t\t\t\t\tsorter = \"boolean\";\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tdefault:\r\n\t\t\t\t\t\tif(!isNaN(value) && value !== \"\"){\r\n\t\t\t\t\t\t\tsorter = \"number\";\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\tif(value.match(/((^[0-9]+[a-z]+)|(^[a-z]+[0-9]+))+$/i)){\r\n\t\t\t\t\t\t\t\tsorter = \"alphanum\";\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn Sort.sorters[sorter];\r\n\t}\r\n\r\n\t//work through sort list sorting data\r\n\tsort(data){\r\n\t\tvar self = this,\r\n\t\tsortList = this.table.options.sortOrderReverse ? self.sortList.slice().reverse() : self.sortList,\r\n\t\tsortListActual = [],\r\n\t\trowComponents = [];\r\n\r\n\t\tif(this.subscribedExternal(\"dataSorting\")){\r\n\t\t\tthis.dispatchExternal(\"dataSorting\", self.getSort());\r\n\t\t}\r\n\r\n\t\tself.clearColumnHeaders();\r\n\r\n\t\tif(this.table.options.sortMode !== \"remote\"){\r\n\r\n\t\t\t//build list of valid sorters and trigger column specific callbacks before sort begins\r\n\t\t\tsortList.forEach(function(item, i){\r\n\t\t\t\tvar sortObj;\r\n\r\n\t\t\t\tif(item.column){\r\n\t\t\t\t\tsortObj = item.column.modules.sort;\r\n\r\n\t\t\t\t\tif(sortObj){\r\n\r\n\t\t\t\t\t\t//if no sorter has been defined, take a guess\r\n\t\t\t\t\t\tif(!sortObj.sorter){\r\n\t\t\t\t\t\t\tsortObj.sorter = self.findSorter(item.column);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\titem.params = typeof sortObj.params === \"function\" ? sortObj.params(item.column.getComponent(), item.dir) : sortObj.params;\r\n\r\n\t\t\t\t\t\tsortListActual.push(item);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tself.setColumnHeader(item.column, item.dir);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\t//sort data\r\n\t\t\tif (sortListActual.length) {\r\n\t\t\t\tself._sortItems(data, sortListActual);\r\n\t\t\t}\r\n\r\n\t\t}else{\r\n\t\t\tsortList.forEach(function(item, i){\r\n\t\t\t\tself.setColumnHeader(item.column, item.dir);\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif(this.subscribedExternal(\"dataSorted\")){\r\n\t\t\tdata.forEach((row) => {\r\n\t\t\t\trowComponents.push(row.getComponent());\r\n\t\t\t});\r\n\r\n\t\t\tthis.dispatchExternal(\"dataSorted\", self.getSort(), rowComponents);\r\n\t\t}\r\n\r\n\t\treturn data;\r\n\t}\r\n\r\n\t//clear sort arrows on columns\r\n\tclearColumnHeaders(){\r\n\t\tthis.table.columnManager.getRealColumns().forEach((column) => {\r\n\t\t\tif(column.modules.sort){\r\n\t\t\t\tcolumn.modules.sort.dir = \"none\";\r\n\t\t\t\tcolumn.getElement().setAttribute(\"aria-sort\", \"none\");\r\n\t\t\t\tthis.setColumnHeaderSortIcon(column, \"none\");\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t//set the column header sort direction\r\n\tsetColumnHeader(column, dir){\r\n\t\tcolumn.modules.sort.dir = dir;\r\n\t\tcolumn.getElement().setAttribute(\"aria-sort\", dir === \"asc\" ? \"ascending\" : \"descending\");\r\n\t\tthis.setColumnHeaderSortIcon(column, dir);\r\n\t}\r\n\r\n\tsetColumnHeaderSortIcon(column, dir){\r\n\t\tvar sortEl = column.modules.sort.element,\r\n\t\tarrowEl;\r\n\r\n\t\tif(typeof this.table.options.headerSortElement === \"function\"){\r\n\t\t\twhile(sortEl.firstChild) sortEl.removeChild(sortEl.firstChild);\r\n\r\n\t\t\tarrowEl = this.table.options.headerSortElement.call(this.table, column.getComponent(), dir);\r\n\t\t\t\r\n\t\t\tif(typeof arrowEl === \"object\"){\r\n\t\t\t\tsortEl.appendChild(arrowEl);\r\n\t\t\t}else{\r\n\t\t\t\tsortEl.innerHTML = arrowEl;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//sort each item in sort list\r\n\t_sortItems(data, sortList){\r\n\t\tvar sorterCount = sortList.length - 1;\r\n\r\n\t\tdata.sort((a, b) => {\r\n\t\t\tvar result;\r\n\r\n\t\t\tfor(var i = sorterCount; i>= 0; i--){\r\n\t\t\t\tlet sortItem = sortList[i];\r\n\r\n\t\t\t\tresult = this._sortRow(a, b, sortItem.column, sortItem.dir, sortItem.params);\r\n\r\n\t\t\t\tif(result !== 0){\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn result;\r\n\t\t});\r\n\t}\r\n\r\n\t//process individual rows for a sort function on active data\r\n\t_sortRow(a, b, column, dir, params){\r\n\t\tvar el1Comp, el2Comp;\r\n\r\n\t\t//switch elements depending on search direction\r\n\t\tvar el1 = dir == \"asc\" ? a : b;\r\n\t\tvar el2 = dir == \"asc\" ? b : a;\r\n\r\n\t\ta = column.getFieldValue(el1.getData());\r\n\t\tb = column.getFieldValue(el2.getData());\r\n\r\n\t\ta = typeof a !== \"undefined\" ? a : \"\";\r\n\t\tb = typeof b !== \"undefined\" ? b : \"\";\r\n\r\n\t\tel1Comp = el1.getComponent();\r\n\t\tel2Comp = el2.getComponent();\r\n\r\n\t\treturn column.modules.sort.sorter.call(this, a, b, el1Comp, el2Comp, column.getComponent(), dir, params);\r\n\t}\r\n}\r\n\r\nSort.moduleName = \"sort\";\r\n\r\n//load defaults\r\nSort.sorters = defaultSorters;\r\n\r\nexport default Sort;","import Module from '../../core/Module.js';\r\nimport Cell from '../../core/cell/Cell.js';\r\n\r\nclass Tooltip extends Module{\r\n\t\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\t\t\r\n\t\tthis.tooltipSubscriber = null,\r\n\t\tthis.headerSubscriber = null,\r\n\t\t\r\n\t\tthis.timeout = null;\r\n\t\tthis.popupInstance = null;\r\n\t\t\r\n\t\tthis.registerTableOption(\"tooltipGenerationMode\", undefined); //deprecated\r\n\t\tthis.registerTableOption(\"tooltipDelay\", 300); \r\n\t\t\r\n\t\tthis.registerColumnOption(\"tooltip\");\r\n\t\tthis.registerColumnOption(\"headerTooltip\");\r\n\t}\r\n\t\r\n\tinitialize(){\r\n\t\tthis.deprecatedOptionsCheck();\r\n\t\t\r\n\t\tthis.subscribe(\"column-init\", this.initializeColumn.bind(this));\r\n\t}\r\n\t\r\n\tdeprecatedOptionsCheck(){\r\n\t\tthis.deprecationCheckMsg(\"tooltipGenerationMode\", \"This option is no longer needed as tooltips are always generated on hover now\");\r\n\t}\t\r\n\t\r\n\tinitializeColumn(column){\r\n\t\tif(column.definition.headerTooltip && !this.headerSubscriber){\r\n\t\t\tthis.headerSubscriber = true;\r\n\t\t\t\r\n\t\t\tthis.subscribe(\"column-mousemove\", this.mousemoveCheck.bind(this, \"headerTooltip\"));\r\n\t\t\tthis.subscribe(\"column-mouseout\", this.mouseoutCheck.bind(this, \"headerTooltip\"));\r\n\t\t}\r\n\t\t\r\n\t\tif(column.definition.tooltip && !this.tooltipSubscriber){\r\n\t\t\tthis.tooltipSubscriber = true;\r\n\t\t\t\r\n\t\t\tthis.subscribe(\"cell-mousemove\", this.mousemoveCheck.bind(this, \"tooltip\"));\r\n\t\t\tthis.subscribe(\"cell-mouseout\", this.mouseoutCheck.bind(this, \"tooltip\"));\r\n\t\t}\r\n\t}\r\n\t\r\n\tmousemoveCheck(action, e, component){\r\n\t\tvar tooltip = action === \"tooltip\" ? component.column.definition.tooltip : component.definition.headerTooltip;\r\n\t\t\r\n\t\tif(tooltip){\r\n\t\t\tthis.clearPopup();\r\n\t\t\tthis.timeout = setTimeout(this.loadTooltip.bind(this, e, component, tooltip), this.table.options.tooltipDelay);\r\n\t\t}\r\n\t}\r\n\r\n\tmouseoutCheck(action, e, component){\r\n\t\tif(!this.popupInstance){\r\n\t\t\tthis.clearPopup();\r\n\t\t}\r\n\t}\r\n\t\r\n\tclearPopup(action, e, component){\r\n\t\tclearTimeout(this.timeout);\r\n\t\tthis.timeout = null;\r\n\t\t\r\n\t\tif(this.popupInstance){\r\n\t\t\tthis.popupInstance.hide();\r\n\t\t}\r\n\t}\r\n\t\r\n\tloadTooltip(e, component, tooltip){\r\n\t\tvar contentsEl, renderedCallback, coords;\r\n\r\n\t\tfunction onRendered(callback){\r\n\t\t\trenderedCallback = callback;\r\n\t\t}\r\n\t\t\r\n\t\tif(typeof tooltip === \"function\"){\r\n\t\t\ttooltip = tooltip(e, component.getComponent(), onRendered);\r\n\t\t}\r\n\t\t\r\n\t\tif(tooltip instanceof HTMLElement){\r\n\t\t\tcontentsEl = tooltip;\r\n\t\t}else{\r\n\t\t\tcontentsEl = document.createElement(\"div\");\r\n\t\t\t\r\n\t\t\tif(tooltip === true){\r\n\t\t\t\tif(component instanceof Cell){\r\n\t\t\t\t\ttooltip = component.value;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tif(component.definition.field){\r\n\t\t\t\t\t\tthis.langBind(\"columns|\" + component.definition.field, (value) => {\r\n\t\t\t\t\t\t\tcontentsEl.innerHTML = tooltip = value || component.definition.title;\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\ttooltip = component.definition.title;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tcontentsEl.innerHTML = tooltip;\r\n\t\t}\r\n\t\t\r\n\t\tif(tooltip || tooltip === 0 || tooltip === false){\r\n\t\t\tcontentsEl.classList.add(\"tabulator-tooltip\");\r\n\r\n\t\t\tcontentsEl.addEventListener(\"mousemove\", e => e.preventDefault());\r\n\t\t\t\r\n\t\t\tthis.popupInstance = this.popup(contentsEl);\r\n\t\t\t\r\n\t\t\tif(typeof renderedCallback === \"function\"){\r\n\t\t\t\tthis.popupInstance.renderCallback(renderedCallback);\r\n\t\t\t}\r\n\r\n\t\t\tcoords = this.popupInstance.containerEventCoords(e);\r\n\t\t\t\r\n\t\t\tthis.popupInstance.show(coords.x + 15, coords.y + 15).hideOnBlur(() => {\r\n\t\t\t\tthis.dispatchExternal(\"TooltipClosed\", component.getComponent());\r\n\t\t\t\tthis.popupInstance = null;\r\n\t\t\t});\r\n\t\t\t\r\n\t\t\tthis.dispatchExternal(\"TooltipOpened\", component.getComponent());\r\n\t\t}\r\n\t}\r\n}\r\n\r\nTooltip.moduleName = \"tooltip\";\r\n\r\nexport default Tooltip;\r\n","export default {\r\n\t//is integer\r\n\tinteger: function(cell, value, parameters){\r\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\tvalue = Number(value);\r\n\r\n\t\treturn !isNaN(value) && isFinite(value) && Math.floor(value) === value;\r\n\t},\r\n\r\n\t//is float\r\n\tfloat: function(cell, value, parameters){\r\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\t\r\n\t\tvalue = Number(value);\r\n\r\n\t\treturn !isNaN(value) && isFinite(value) && value % 1 !== 0;\r\n\t},\r\n\r\n\t//must be a number\r\n\tnumeric: function(cell, value, parameters){\r\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn !isNaN(value);\r\n\t},\r\n\r\n\t//must be a string\r\n\tstring: function(cell, value, parameters){\r\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn isNaN(value);\r\n\t},\r\n\r\n\t//maximum value\r\n\tmax: function(cell, value, parameters){\r\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn parseFloat(value) <= parameters;\r\n\t},\r\n\r\n\t//minimum value\r\n\tmin: function(cell, value, parameters){\r\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn parseFloat(value) >= parameters;\r\n\t},\r\n\r\n\t//starts with value\r\n\tstarts: function(cell, value, parameters){\r\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn String(value).toLowerCase().startsWith(String(parameters).toLowerCase());\r\n\t},\r\n\r\n\t//ends with value\r\n\tends: function(cell, value, parameters){\r\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn String(value).toLowerCase().endsWith(String(parameters).toLowerCase());\r\n\t},\r\n\r\n\r\n\t//minimum string length\r\n\tminLength: function(cell, value, parameters){\r\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn String(value).length >= parameters;\r\n\t},\r\n\r\n\t//maximum string length\r\n\tmaxLength: function(cell, value, parameters){\r\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn String(value).length <= parameters;\r\n\t},\r\n\r\n\t//in provided value list\r\n\tin: function(cell, value, parameters){\r\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\tif(typeof parameters == \"string\"){\r\n\t\t\tparameters = parameters.split(\"|\");\r\n\t\t}\r\n\r\n\t\treturn parameters.indexOf(value) > -1;\r\n\t},\r\n\r\n\t//must match provided regex\r\n\tregex: function(cell, value, parameters){\r\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\tvar reg = new RegExp(parameters);\r\n\r\n\t\treturn reg.test(value);\r\n\t},\r\n\r\n\t//value must be unique in this column\r\n\tunique: function(cell, value, parameters){\r\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\tvar unique = true;\r\n\r\n\t\tvar cellData = cell.getData();\r\n\t\tvar column = cell.getColumn()._getSelf();\r\n\r\n\t\tthis.table.rowManager.rows.forEach(function(row){\r\n\t\t\tvar data = row.getData();\r\n\r\n\t\t\tif(data !== cellData){\r\n\t\t\t\tif(value == column.getFieldValue(data)){\r\n\t\t\t\t\tunique = false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn unique;\r\n\t},\r\n\r\n\t//must have a value\r\n\trequired:function(cell, value, parameters){\r\n\t\treturn value !== \"\" && value !== null && typeof value !== \"undefined\";\r\n\t},\r\n};","import Module from '../../core/Module.js';\r\n\r\nimport defaultValidators from './defaults/validators.js';\r\n\r\nclass Validate extends Module{\r\n\t\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\t\t\r\n\t\tthis.invalidCells = [];\r\n\t\t\r\n\t\tthis.registerTableOption(\"validationMode\", \"blocking\");\r\n\t\t\r\n\t\tthis.registerColumnOption(\"validator\");\r\n\t\t\r\n\t\tthis.registerTableFunction(\"getInvalidCells\", this.getInvalidCells.bind(this));\r\n\t\tthis.registerTableFunction(\"clearCellValidation\", this.userClearCellValidation.bind(this));\r\n\t\tthis.registerTableFunction(\"validate\", this.userValidate.bind(this));\r\n\t\t\r\n\t\tthis.registerComponentFunction(\"cell\", \"isValid\", this.cellIsValid.bind(this));\r\n\t\tthis.registerComponentFunction(\"cell\", \"clearValidation\", this.clearValidation.bind(this));\r\n\t\tthis.registerComponentFunction(\"cell\", \"validate\", this.cellValidate.bind(this));\r\n\t\t\r\n\t\tthis.registerComponentFunction(\"column\", \"validate\", this.columnValidate.bind(this));\r\n\t\tthis.registerComponentFunction(\"row\", \"validate\", this.rowValidate.bind(this));\r\n\t}\r\n\t\r\n\t\r\n\tinitialize(){\r\n\t\tthis.subscribe(\"cell-delete\", this.clearValidation.bind(this));\r\n\t\tthis.subscribe(\"column-layout\", this.initializeColumnCheck.bind(this));\r\n\t\t\r\n\t\tthis.subscribe(\"edit-success\", this.editValidate.bind(this));\r\n\t\tthis.subscribe(\"edit-editor-clear\", this.editorClear.bind(this));\r\n\t\tthis.subscribe(\"edit-edited-clear\", this.editedClear.bind(this));\r\n\t}\r\n\t\r\n\t///////////////////////////////////\r\n\t///////// Event Handling //////////\r\n\t///////////////////////////////////\r\n\t\r\n\teditValidate(cell, value, previousValue){\r\n\t\tvar valid = this.table.options.validationMode !== \"manual\" ? this.validate(cell.column.modules.validate, cell, value) : true;\r\n\t\t\r\n\t\t// allow time for editor to make render changes then style cell\r\n\t\tif(valid !== true){\r\n\t\t\tsetTimeout(() => {\r\n\t\t\t\tcell.getElement().classList.add(\"tabulator-validation-fail\");\r\n\t\t\t\tthis.dispatchExternal(\"validationFailed\", cell.getComponent(), value, valid);\r\n\t\t\t});\r\n\t\t}\r\n\t\t\r\n\t\treturn valid;\r\n\t}\r\n\t\r\n\teditorClear(cell, cancelled){\r\n\t\tif(cancelled){\r\n\t\t\tif(cell.column.modules.validate){\r\n\t\t\t\tthis.cellValidate(cell);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tcell.getElement().classList.remove(\"tabulator-validation-fail\");\r\n\t}\r\n\t\r\n\teditedClear(cell){\r\n\t\tif(cell.modules.validate){\r\n\t\t\tcell.modules.validate.invalid = false;\r\n\t\t}\r\n\t}\r\n\t\r\n\t///////////////////////////////////\r\n\t////////// Cell Functions /////////\r\n\t///////////////////////////////////\r\n\t\r\n\tcellIsValid(cell){\r\n\t\treturn cell.modules.validate ? (cell.modules.validate.invalid || true) : true;\r\n\t}\r\n\t\r\n\tcellValidate(cell){\r\n\t\treturn this.validate(cell.column.modules.validate, cell, cell.getValue());\r\n\t}\r\n\t\r\n\t///////////////////////////////////\r\n\t///////// Column Functions ////////\r\n\t///////////////////////////////////\r\n\t\r\n\tcolumnValidate(column){\r\n\t\tvar invalid = [];\r\n\t\t\r\n\t\tcolumn.cells.forEach((cell) => {\r\n\t\t\tif(this.cellValidate(cell) !== true){\r\n\t\t\t\tinvalid.push(cell.getComponent());\r\n\t\t\t}\r\n\t\t});\r\n\t\t\r\n\t\treturn invalid.length ? invalid : true;\r\n\t}\r\n\t\r\n\t///////////////////////////////////\r\n\t////////// Row Functions //////////\r\n\t///////////////////////////////////\r\n\t\r\n\trowValidate(row){\r\n\t\tvar invalid = [];\r\n\t\t\r\n\t\trow.cells.forEach((cell) => {\r\n\t\t\tif(this.cellValidate(cell) !== true){\r\n\t\t\t\tinvalid.push(cell.getComponent());\r\n\t\t\t}\r\n\t\t});\r\n\t\t\r\n\t\treturn invalid.length ? invalid : true;\r\n\t}\r\n\t\r\n\t///////////////////////////////////\r\n\t///////// Table Functions /////////\r\n\t///////////////////////////////////\r\n\t\r\n\t\r\n\tuserClearCellValidation(cells){\r\n\t\tif(!cells){\r\n\t\t\tcells = this.getInvalidCells();\r\n\t\t}\r\n\t\t\r\n\t\tif(!Array.isArray(cells)){\r\n\t\t\tcells = [cells];\r\n\t\t}\r\n\t\t\r\n\t\tcells.forEach((cell) => {\r\n\t\t\tthis.clearValidation(cell._getSelf());\r\n\t\t});\r\n\t}\r\n\t\r\n\tuserValidate(cells){\r\n\t\tvar output = [];\r\n\t\t\r\n\t\t//clear row data\r\n\t\tthis.table.rowManager.rows.forEach((row) => {\r\n\t\t\trow = row.getComponent();\r\n\t\t\t\r\n\t\t\tvar valid = row.validate();\r\n\t\t\t\r\n\t\t\tif(valid !== true){\r\n\t\t\t\toutput = output.concat(valid);\r\n\t\t\t}\r\n\t\t});\r\n\t\t\r\n\t\treturn output.length ? output : true;\r\n\t}\r\n\t\r\n\t///////////////////////////////////\r\n\t///////// Internal Logic //////////\r\n\t///////////////////////////////////\r\n\t\r\n\tinitializeColumnCheck(column){\r\n\t\tif(typeof column.definition.validator !== \"undefined\"){\r\n\t\t\tthis.initializeColumn(column);\r\n\t\t}\r\n\t}\r\n\t\r\n\t//validate\r\n\tinitializeColumn(column){\r\n\t\tvar self = this,\r\n\t\tconfig = [],\r\n\t\tvalidator;\r\n\t\t\r\n\t\tif(column.definition.validator){\r\n\t\t\t\r\n\t\t\tif(Array.isArray(column.definition.validator)){\r\n\t\t\t\tcolumn.definition.validator.forEach((item) => {\r\n\t\t\t\t\tvalidator = self._extractValidator(item);\r\n\t\t\t\t\t\r\n\t\t\t\t\tif(validator){\r\n\t\t\t\t\t\tconfig.push(validator);\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t\t\r\n\t\t\t}else{\r\n\t\t\t\tvalidator = this._extractValidator(column.definition.validator);\r\n\t\t\t\t\r\n\t\t\t\tif(validator){\r\n\t\t\t\t\tconfig.push(validator);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tcolumn.modules.validate = config.length ? config : false;\r\n\t\t}\r\n\t}\r\n\t\r\n\t_extractValidator(value){\r\n\t\tvar type, params, pos;\r\n\t\t\r\n\t\tswitch(typeof value){\r\n\t\t\tcase \"string\":\r\n\t\t\t\tpos = value.indexOf(':');\r\n\t\t\t\r\n\t\t\t\tif(pos > -1){\r\n\t\t\t\t\ttype = value.substring(0,pos);\r\n\t\t\t\t\tparams = value.substring(pos+1);\r\n\t\t\t\t}else{\r\n\t\t\t\t\ttype = value;\r\n\t\t\t\t}\r\n\t\t\t\r\n\t\t\t\treturn this._buildValidator(type, params);\r\n\t\t\t\r\n\t\t\tcase \"function\":\r\n\t\t\t\treturn this._buildValidator(value);\r\n\t\t\t\r\n\t\t\tcase \"object\":\r\n\t\t\t\treturn this._buildValidator(value.type, value.parameters);\r\n\t\t}\r\n\t}\r\n\t\r\n\t_buildValidator(type, params){\r\n\t\t\r\n\t\tvar func = typeof type == \"function\" ? type : Validate.validators[type];\r\n\t\t\r\n\t\tif(!func){\r\n\t\t\tconsole.warn(\"Validator Setup Error - No matching validator found:\", type);\r\n\t\t\treturn false;\r\n\t\t}else{\r\n\t\t\treturn {\r\n\t\t\t\ttype:typeof type == \"function\" ? \"function\" : type,\r\n\t\t\t\tfunc:func,\r\n\t\t\t\tparams:params,\r\n\t\t\t};\r\n\t\t}\r\n\t}\r\n\t\r\n\tvalidate(validators, cell, value){\r\n\t\tvar self = this,\r\n\t\tfailedValidators = [],\r\n\t\tinvalidIndex = this.invalidCells.indexOf(cell);\r\n\t\t\r\n\t\tif(validators){\r\n\t\t\tvalidators.forEach((item) => {\r\n\t\t\t\tif(!item.func.call(self, cell.getComponent(), value, item.params)){\r\n\t\t\t\t\tfailedValidators.push({\r\n\t\t\t\t\t\ttype:item.type,\r\n\t\t\t\t\t\tparameters:item.params\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t\t\r\n\t\tif(!cell.modules.validate){\r\n\t\t\tcell.modules.validate = {};\r\n\t\t}\r\n\t\t\r\n\t\tif(!failedValidators.length){\r\n\t\t\tcell.modules.validate.invalid = false;\r\n\t\t\tcell.getElement().classList.remove(\"tabulator-validation-fail\");\r\n\t\t\t\r\n\t\t\tif(invalidIndex > -1){\r\n\t\t\t\tthis.invalidCells.splice(invalidIndex, 1);\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tcell.modules.validate.invalid = failedValidators;\r\n\t\t\t\r\n\t\t\tif(this.table.options.validationMode !== \"manual\"){\r\n\t\t\t\tcell.getElement().classList.add(\"tabulator-validation-fail\");\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif(invalidIndex == -1){\r\n\t\t\t\tthis.invalidCells.push(cell);\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\treturn failedValidators.length ? failedValidators : true;\r\n\t}\r\n\t\r\n\tgetInvalidCells(){\r\n\t\tvar output = [];\r\n\t\t\r\n\t\tthis.invalidCells.forEach((cell) => {\r\n\t\t\toutput.push(cell.getComponent());\r\n\t\t});\r\n\t\t\r\n\t\treturn output;\r\n\t}\r\n\t\r\n\tclearValidation(cell){\r\n\t\tvar invalidIndex;\r\n\t\t\r\n\t\tif(cell.modules.validate && cell.modules.validate.invalid){\r\n\t\t\t\r\n\t\t\tcell.getElement().classList.remove(\"tabulator-validation-fail\");\r\n\t\t\tcell.modules.validate.invalid = false;\r\n\t\t\t\r\n\t\t\tinvalidIndex = this.invalidCells.indexOf(cell);\r\n\t\t\t\r\n\t\t\tif(invalidIndex > -1){\r\n\t\t\t\tthis.invalidCells.splice(invalidIndex, 1);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n\r\nValidate.moduleName = \"validate\";\r\n\r\n//load defaults\r\nValidate.validators = defaultValidators;\r\n\r\nexport default Validate;\r\n","//tabulator with all modules installed\r\nimport {default as Tabulator} from './Tabulator.js';\r\nimport * as modules from '../core/modules/optional.js';\r\nimport ModuleBinder from './tools/ModuleBinder.js';\r\n\r\nclass TabulatorFull extends Tabulator {}\r\n\r\n//bind modules and static functionality\r\nnew ModuleBinder(TabulatorFull, modules);\r\n\r\nexport default TabulatorFull;"],"names":["CoreFeature","table","data","silent","columnsChanged","this","dataLoader","load","undefined","modules","localize","getText","arguments","bind","getLocale","comms","getConnections","send","layout","getMode","force","eventBus","subscribe","unsubscribe","key","subscribed","subscriptionChange","dispatch","chain","confirm","externalEvents","options","value","oldOption","newOption","deprecationAdvisor","check","msg","checkMsg","module","ColumnComponent","column","_column","type","Proxy","get","target","name","receiver","componentFunctionBinder","handle","getElement","getDefinition","getField","getTitleDownload","cells","forEach","cell","push","getComponent","visible","isGroup","columns","show","hide","output","length","parent","Column","columnManager","scrollToColumn","to","after","toColumn","findColumn","moveColumn","console","warn","nextCol","nextColumn","prevCol","prevColumn","updates","updateDefinition","getWidth","width","result","reinitializeWidth","setWidth","rerenderColumns","CellComponent","_cell","getValue","getOldValue","initialValue","row","getData","mutate","setValue","setValueActual","checkHeight","Cell","element","oldValue","height","minWidth","component","loaded","build","generateElement","_configureCell","getFieldValue","document","createElement","className","setAttribute","field","style","textAlign","hozAlign","vertAlign","display","alignItems","top","bottom","middle","justifyContent","left","right","center","definition","cssClass","split","classList","add","val","_this2","innerHTML","Node","firstChild","removeChild","appendChild","containerOnly","layoutElement","setValueProcessData","cellRendered","cellEdited","call","dispatchExternal","subscribedExternal","rowManager","changed","setFieldValue","_generateContents","widthStyled","offsetWidth","minWidthStyled","maxWidth","maxWidthStyled","reinitializeHeight","heightStyled","offsetHeight","redrawBlock","parentNode","deleteCell","calcs","getCellIndex","def","_this","contentElement","titleHolderElement","titleElement","groupElement","createGroupElement","fieldStructure","titleDownload","titleFormatterRendered","mapDefinitions","setField","maxInitialWidth","widthFixed","i","newCol","attachColumn","checkColumnVisibility","registerColumnField","_initialize","el","columnHeaderVertAlign","defaults","columnDefaults","optionsList","generate","defaultOptionList","Object","keys","indexOf","title","nestedFieldSeparator","_getNestedData","_getFlatData","_setNestedData","_setFlatData","registerColumnPosition","reRegisterPosition","headerVertical","_buildColumnHeaderContent","_buildGroupHeader","_buildColumnHeader","_this3","setMinWidth","parseInt","setMaxWidth","headerHozAlign","_buildColumnHeaderTitle","editableTitle","addEventListener","e","stopPropagation","focus","_this4","langBind","text","_formatColumnHeaderTitle","contents","_this5","dataObj","structure","columnRendered","alignment","parentHeight","getGroupElement","clientHeight","getHeadersElement","minHeight","verticalAlign","paddingTop","clearVerticalAlign","getFirstColumn","getLastColumn","getTopColumn","updateBranches","colDefs","responsiveToggle","verticalAlignHeaders","matchChildWidths","childWidth","child","index","splice","setWidthActual","isNaN","Math","floor","clientWidth","max","min","rows","heightInitialized","offsetParent","clearCellHeight","calcHeight","setCellHeight","ceil","getBoundingClientRect","Promise","resolve","reject","_this6","cellCount","deregisterColumn","findColumnIndex","_nextVisibleColumn","getColumnByIndex","_prevVisibleColumn","fitToData","clearWidth","setTo","error","assign","addColumn","then","_this7","defaultOptions","Helpers","box","window","pageYOffset","documentElement","clientTop","pageXOffset","clientLeft","obj","clone","list","objectProto","__proto__","arrayProto","Array","isArray","subject","match","copy","_typeof","findIndex","item","unshift","deepClone","OptionsList","msgType","registeredDefaults","option","userOptions","debugInvalidOptions","hasOwnProperty","Renderer","elementVertical","elementHorizontal","tableElement","verticalFillMode","callback","update","blockRedraw","dir","includingBuffer","getDisplayRows","rowEl","remove","clearRows","clearColumns","renderRows","renderColumns","rerenderRows","position","ifVisible","rowIndex","offset","scrollToRowIfVisible","elVisible","elOffset","scrollToRowPosition","scrollToRowNearestTop","scrollToRow","scrollHeight","scrollTop","offsetTop","BasicHorizontal","VirtualDomHorizontal","leftCol","rightCol","scrollLeft","vDomScrollPosLeft","vDomScrollPosRight","vDomPadLeft","vDomPadRight","fitDataColAvg","windowBuffer","visibleRows","initialized","isFitData","compatibilityCheck","layoutCheck","vertScrollListen","ok","find","col","frozen","startsWith","clearVisRowCache","dataChange","scroll","buffer","columnsByIndex","old","cols","colPos","clear","calcWindowBuffer","config","leftPos","rightPos","fitDataCheck","vdomHoz","paddingLeft","paddingRight","reinitChanged","reinitializeRows","initializeRow","reinitializeRow","change","generateCells","colEnd","layoutRefresh","getVisibleRows","diff","abs","addColRight","removeColLeft","addColLeft","removeColRight","start","end","changes","working","getCell","fitDataColActualWidthCheck","prepend","_this8","ex","message","_this9","newWidth","widthDiff","colPositionAdjust","ColumnManager","blockHozScrollEvent","headersElement","columnsByField","defaultColumnOptions","redrawBlockUpdate","renderer","initializeRenderer","createHeadersElement","createHeaderElement","insertBefore","scrollHorizontal","renderClass","renderers","RendererVirtualDomHorizontal","RendererBasicHorizontal","renderHorizontal","initialize","headerVisible","hozAdjust","scrollWidth","marginLeft","scrollColumns","sorter","definitions","autoColumnsDefinitions","setColumns","_addColumn","_reIndexColumns","redraw","before","nextToColumn","colEl","topColumn","parentIndex","nextEl","nextSibling","getHeight","adjustTableSize","_getSelf","HTMLElement","root","matches","active","structured","from","moveColumnActual","reinitialize","_moveColumnInArray","getComponents","updateRows","toIndex","fromIndex","concat","adjust","scrollToColumnPosition","scrollToColumnIfVisible","offsetLeft","generateCell","totalWidth","fixedWidth","colWidth","layoutMode","resetScroll","footerManager","RowComponent","_row","transform","getCells","getPosition","watchPosition","moveToRow","updateData","normalizeHeight","nextRow","prevRow","Row","manualHeight","outerHeight","positionWatchers","created","setData","create","deleteCells","renderRowCells","rowFormatter","rerenderRowCells","children","maxHeight","rowHeight","resizableRows","setHeight","clearHeight","updatedData","newRowData","tempData","attrname","JSON","parse","getColumnsByFieldRoot","findCell","nextDisplayRow","prevDisplayRow","toRow","findRow","moveRowActual","refreshActiveData","deleteActual","detachModules","deleteRow","includes","isDisplayed","group","BasicVertical","visibility","onlyGroupHeaders","styleRow","rowTop","VirtualDomVertical","vDomRowHeight","vDomTop","vDomBottom","vDomScrollPosTop","vDomScrollPosBottom","vDomTopPad","vDomBottomPad","vDomMaxRenderChain","vDomWindowBuffer","vDomWindowMinTotalRows","vDomWindowMinMarginRows","vDomTopNewRows","vDomBottomNewRows","paddingBottom","_virtualRenderFill","topRow","topOffset","deinitializeHeight","_showPlaceholder","topDiff","bottomDiff","margin","_addTopRow","vDomScrollHeight","_removeBottomRow","_addBottomRow","_removeTopRow","renderVerticalBuffer","topEdge","bottomEdge","topFound","bottomRow","slice","forceMove","holder","topPad","rowsHeight","heightOccupied","topPadHeight","rowsCount","containerHeight","fillableSpace","addedRows","paddingAdjust","_quickNormalizeRowHeight","removableRows","RowManager","createHolderElement","createTableElement","heightFixer","placeholder","placeholderContents","firstRender","renderMode","fixedHeight","activeRowsPipeline","activeRows","activeRowsCount","displayRows","displayRowsCount","redrawBlockRestoreConfig","redrawBlockRenderInPosition","dataPipeline","displayPipeline","initializePlaceholder","leftDir","topDir","_positionPlaceholder","scrollRows","renderInPosition","pagination","_setDataActual","reRenderInPosition","autoColumns","generateColumnsFromRowData","_wipeElements","wipe","allIndex","activeIndex","setActiveRows","displayRowIterator","displayIndex","regenerateRowPositions","pos","addRowActual","findAddRowPos","reverse","addRow","_clearPlaceholder","addRowPos","chainResult","moveRowInArray","findRowIndex","rowOnly","getDisplayRowIndex","getRows","handler","priority","sort","a","b","skipStage","stage","cascadeOrder","refreshPipelines","renderTable","layoutColumnsOnNewData","resetDisplayRows","setDisplayRows","setPosition","viewable","RendererVirtualDomVertical","RendererBasicVertical","renderVertical","_clearTable","renderEmptyScroll","initialHeight","otherHeight","external","resize","tableWidth","browser","event","createEvent","initEvent","dispatchEvent","Event","FooterManager","containerElement","createContainerElement","initializeElement","footerElement","querySelector","activate","deactivate","InteractionManager","abortClasses","previousTargets","listeners","componentMap","pseudoTrackers","subscriber","pseudoTracking","buildListenerMap","bindSubscriptionWatchers","listenerMap","listener","components","pseudoMouseEnter","pseudoMouseLeave","leaveList","linkedKeys","filter","links","values","comp","subscriptionChanged","clearWatchers","added","bindPseudoEvents","updateEventListeners","track","removeEventListener","path","composedPath","targets","findTargets","bindComponents","triggerEvents","targetMatches","previousTarget","closest","ComponentFunctionBinder","bindings","funcName","debugInvalidComponentFuncs","DataLoader","requestOrder","loading","params","replace","requestNo","alertLoader","mapParams","dataSendParams","response","objectInvert","dataReceiveParams","rowData","clearAlert","alertError","setTimeout","dataLoaderErrorTimeout","map","alertManager","alert","dataLoaderLoading","langText","dataLoaderError","ExternalEventBus","debug","events","subscriptionNotifiers","_debugDispatch","_dispatch","_notifySubscriptionChange","notifiers","args","shift","callResult","apply","log","InternalEventBus","_debugChain","_chain","_debugConfirm","_confirm","fallback","confirmed","DeprecationAdvisor","_warnUser","TableRegistry","tables","query","results","querySelectorAll","matchElement","Tabulator","lookupTable","Popup","container","_lookupContainer","reversedX","childPopup","blurable","blurCallback","renderedCallback","hideable","blurEvent","escEvent","_escapeCheck","destroyBinding","tableDestroyed","destroyed","popupContainer","_checkContainerIsParent","body","touch","MouseEvent","x","touches","pageX","y","pageY","parentOffset","containerOffset","origin","parentEl","coords","elementPositionCoords","containerEventCoords","_fitToScreen","keyCode","Module","_handler","register","func","initGuard","registerDataPipelineHandler","registerDisplayPipelineHandler","append","menuEl","menuContainer","content","forced","responsiveLayout","modExists","fitData","reinitializeColumnWidths","fitDataFill","fitDataGeneral","fitDataTable","fitDataStretch","colsWidth","gap","lastCol","responsive","fitColumns","flexColWidth","overflowWidth","flexWidth","flexGrowUnits","flexColumns","fixedShrinkColumns","flexShrinkUnits","gapFill","calcWidth","scaleColumns","freeSpace","shrinkCols","oversizeCols","oversizeSpace","remainingSpace","nextColWidth","remainingFlexGrowUnits","changeUnits","undersizeCols","calcGrow","widthGrow","calcShrink","widthShrink","Layout","mode","registerTableOption","registerColumnOption","modes","dataChanged","moduleName","defaultModes","Localize","locale","lang","langList","langs","headerFilterPlaceholder","setHeaderFilterPlaceholder","installLang","setLocale","registerTableFunction","getLang","headerFilters","_setLangProp","desiredLocale","navigator","language","toLowerCase","prefix","traverseLang","trans","prop","_executeBindings","pathArray","_getLangElement","level","rootPath","binding","Comms","receive","selectors","connections","con","action","connection","tableComms","commsReceived","ModuleBinder","tabulator","bindStaticFunctionality","bindModules","coreModules","moduleBindings","extendModule","property","source","registerModule","mod","registerModuleBinding","findTable","prototype","orderedStartMods","orderedEndMods","unOrderedMods","moduleCore","modulesCore","moduleInitOrder","modulesRegular","core","mods","Alert","_createAlertElement","msgElement","_createMsgElement","_typeClass","interactionMonitor","browserSlow","browserMobile","rtl","originalElement","initializeCoreSystems","_create","_clearObjectPointers","_mapDeprecatedFunctionality","debugEventsExternal","debugEventsInternal","InteractionMonitor","getSelection","empty","removeAllRanges","selection","_rtlCheck","_buildElement","_initializeTable","_loadInitialData","getComputedStyle","textDirection","direction","reactiveData","newElement","tagName","attributes","replaceChild","_detectBrowser","deregister","ua","userAgent","vendor","opera","test","stack","line","debugInitialization","Error","trim","restoreRedraw","blockActiveLoad","clearData","getDataCount","responses","addRows","newRows","getRowFromPosition","foundRows","fromRow","getDefinitionTree","fromColumn","plugin","required","debugDeprecation","rowFormatterPrint","rowFormatterClipboard","rowFormatterHtmlOutput","Accessor","allowedTypes","initializeColumn","transformRow","accessor","charAt","toUpperCase","lookupAccessor","accessors","rowComponent","traverse","colComponent","generateParamsList","serializeParams","encoded","encodeURIComponent","join","url","method","headers","stringify","form","FormData","Ajax","urlGenerator","loaderPromise","contentTypeFormatters","ajaxRequestFunc","defaultLoaderPromise","ajaxURLGenerator","defaultURLGenerator","ajaxURL","setUrl","setDefaultConfig","ajaxConfig","getUrl","requestDataCheck","requestParams","requestData","ajaxParams","previousData","generateConfig","sendRequest","defaultConfig","ajaxRequesting","ajaxResponse","contentType","ajaxContentType","Accept","location","credentials","fetch","json","status","statusText","defaultContentTypeFormatters","Clipboard","pasteParser","pasteAction","customSelection","rowRange","blocked","clipboard","clipboardCopyRowRange","plain","html","preventDefault","clipboardCopyFormatter","generateExportList","clipboardCopyConfig","clipboardCopyStyled","generateHTMLTable","generatePlainContent","clipboardData","originalEvent","reset","paste","setPasteParser","clipboardPasteParser","setPasteAction","clipboardPasteAction","getKey","range","internal","sel","textRange","createRange","selectNodeContents","toString","addRange","createTextRange","moveToElementText","select","execCommand","pasteActions","parser","pasteParsers","checkPaseOrigin","getPasteData","mutateData","mutator","valid","edit","currentCell","updateOrAddData","insert","addData","headerFindSuccess","columnMap","CalcComponent","calcParams","precision","reduce","sum","Number","toFixed","parseFloat","String","ColumnCalcs","topCalcs","botCalcs","genColumn","topElement","botElement","botRow","topInitialized","botInitialized","cellValueChanged","initializeColumnCheck","rowsUpdated","recalcActiveRows","recalcActiveRowsRefresh","tableRedraw","getResults","userRecalc","recalc","groupBy","recalcRowGroup","dataTreeStartExpanded","dataTree","recalcAll","topCalc","bottomCalc","columnCalcs","topCalcParams","botCalcParams","bottomCalcParams","calculations","initializeTopRow","botCalc","initializeBottomRow","footerRemove","footerPrepend","marginRight","rowsToData","generateRow","frozenColumns","recalcGroup","groupRows","getRowGroup","getChildGroups","generateRowData","dataTreeChildColumnCalcs","open","getFilteredTreeChildren","disable","enable","format","formatter","getFormatter","paramKey","getGroups","getGroupResults","groupObj","subGroups","getSubGroups","subGroupResults","subgroup","groups","defaultCalculations","DataTree","indent","collapseEl","expandEl","branchEl","elementField","startOpen","registerComponentFunction","collapseRow","expandRow","toggleRow","getTreeParent","getRowChildren","addTreeChildRow","isRowExpanded","dummyEl","dataTreeChildField","dataTreeChildIndent","dataTreeBranchElement","dataTreeCollapseElement","tabIndex","dataTreeExpandElement","layoutRow","rowDelete","rowDataChanged","columnMoving","initializeElementField","tableRedrawing","registerDisplayHandler","reinitializeRowChildren","firstCol","getFirstVisibleColumn","dataTreeElementColumn","getTreeChildren","redrawNeeded","refreshData","childArray","controlEl","generateControlElement","cloneNode","getPropertyValue","oldControl","getChildren","allChildren","generateChildren","dataTreeFilter","dataTreeSort","sub","childData","childRow","getTreeParentRoot","childIndex","findChildIndex","recurse","csv","setFileContents","delimiter","fileContents","depth","bom","jsonLines","pdf","header","autoTableParams","rowGroupStyles","fontStyle","fontSize","cellPadding","fillColor","rowCalcStyles","jsPDFParams","jsPDF","parseRow","styles","colSpan","rowSpan","orientation","unit","doc","jspdf","autoTable","didDrawPage","head","documentProcessing","xlsx","sheetName","workbook","XLSX","utils","book_new","tableFeatures","generateSheet","merges","worksheet","s","c","r","j","Date","sheet_add_aoa","encode_range","SheetNames","Sheets","sheetOnly","sheets","sheet","commsSend","intercept","buf","ArrayBuffer","view","Uint8Array","charCodeAt","s2ab","write","bookType","bookSST","Download","mimeType","Blob","deprecatedOptionsCheck","download","downloadToTab","deprecationCheck","filename","interceptCallback","downloadFunc","downloaders","mime","triggerDownload","downloadConfig","downloadRowRange","groupHeader","groupHeaderDownload","_group","getRowCount","newTab","blob","downloadEncoder","URL","createObjectURL","msSaveOrOpenBlob","click","maskInput","mask","maskLetter","maskLetterChar","maskNumber","maskNumberChar","maskWildcard","maskWildcardChar","fillSymbols","symbol","char","maskAutoFill","defaultDownloaders","Edit","editor","onRendered","success","cancel","editorParams","_initializeParams","displayItems","currentItems","focusedItem","input","_createInputElement","listEl","_createListElement","initialValues","isFilter","filterTimeout","filtered","typing","popup","listIteration","lastAction","actions","_deprecatedOptionsCheck","_initializeValue","_onRendered","listItemFormatter","getTable","sortValuesList","searchFunc","searchingPlaceholder","defaultValue","multiselect","headerFilterInitialListGen","cellEl","clickStop","preventScroll","_preventPopupBlur","_preventBlur","_inputKeyDown","attribs","elementAttributes","clearable","padding","boxSizing","autocomplete","cursor","caretColor","getAttribute","_bindInputEvents","valueCheck","valueKeys","verticalNavigation","placeholderLoading","placeholderEmpty","filterDelay","emptyValue","freetext","filterFunc","filterRemote","allowEmpty","listOnEmpty","valuesLookup","valuesURL","_inputFocus","_inputClick","_inputBlur","_inputSearch","_inputKeyUp","rebuildOptionsList","clearTimeout","_filterList","_resolveValue","_clearChoices","_keyUp","_keyDown","_keySide","_keyEnter","_keyEsc","_keyHomeEnd","_keySelectLetter","_keyAutoCompLetter","blockHide","restoreHide","stopImmediatePropagation","_focusItem","_chooseItem","_cancel","_scrollToValue","_filter","character","fromCharCode","filterTerm","label","scrollIntoView","behavior","block","inline","_generateOptions","_sortOptions","_buildList","_showList","isInteger","_filterOptions","iteration","_ajaxRequest","_uniqueColumnValues","valuesLookupField","_addPlaceholder","responseValues","_parseList","_clearList","term","urlBuilder","getColumnByField","getColumn","inputValues","entries","_parseListItem","_parseListGroup","itemParams","selected","original","_defaultSortFunction","_sortGroup","as","bs","a1","b1","L","rx","rd","emptyAlign","isFinite","_defaultFilterFunc","_filterItem","_this10","_this11","_buildItem","itemFormatter","_groupClick","_itemClick","_styleItem","_this12","startVis","isVisible","_setListWidth","_this13","hideOnBlur","_this14","blur","cellValue","search","onChange","selectContents","textarea","vertNav","whiteSpace","getRow","heightNow","shiftKey","shiftEnterSubmit","selectionStart","number","step","blurFunc","date","inputFormat","DT","DateTime","luxon","convertDate","isDateTime","fromISO","fromFormat","toFormat","time","newDatetime","datetime","deprecationMsg","List","star","self","maxStars","getElementsByTagName","size","stars","starsHolder","createElementNS","starChange","buildStar","starHolder","nextStar","changeValue","overflow","textOverflow","progress","mouseDrag","mouseDragWidth","percent","bar","updateValue","calcVal","round","backgroundColor","screenX","tickCross","tristate","indetermValue","indeterminateValue","indetermState","trueValueSet","falseValueSet","marginTop","checkedValue","checked","trueValue","falseValue","indeterminate","mouseClick","recursionBlock","invalidEdit","editedCells","editors","getEditedCells","clearCellEdited","navigatePrev","navigateNext","navigateLeft","navigateRight","navigateUp","navigateDown","cellIsEdited","clearEdited","editCell","cellCancelEdit","bindEditor","updateCellClass","columnDeleteCheck","rowDeleteCheck","cancelEdit","keybindingNavigateNext","newRow","edited","allowEdit","nextCell","findNextEditableCell","getIndex","findPrevEditableCell","prevCell","editable","clearEditor","variableHeight","cellEditCancelled","contains","button","forceEdit","focusCellNoEvent","getRenderMode","leftEdge","rightEdge","leftMargin","rightMargin","cellEditor","rendered","focusScrollAdjust","cellClick","cellEditing","validationMode","editIndex","defaultEditors","ExportRow","ExportColumn","Export","cloneTableStyle","colVisProp","getHtml","columnHeaders","headersToExportRows","generateColumnGroupHeaders","bodyToExportRows","rowLookup","generateTableElement","selectRow","selectedRows","columnGroups","colData","processColumnGroup","maxDepth","groupData","subGroup","subGroupData","columnVisCheck","visProp","headerDepth","exportRows","parseColumnGroup","rowGroups","exportCols","headerEl","bodyEl","lookupTableStyles","setup","treeElementField","mapElementStyles","generateHeaderElement","generateGroupElement","generateCalcElement","generateRowElement","evenRow","oddRow","calcRow","firstRow","firstGroup","getElementsByClassName","styleCells","firstCell","lastCell","classNames","generator","cellStyle","cellWrapper","formatCells","formatExportValue","align","htmlOutputConfig","props","lookup","fromStyle","filterVal","rowVal","filterParams","RegExp","keywords","separator","keyword","matchAll","endsWith","Filter","filterList","headerFilterColumns","prevHeaderFilterChangeCheck","tableInitialized","searchRows","searchData","userSetFilter","userRefreshFilter","userAddFilter","getFilters","userSetHeaderFilterFocus","userGetHeaderFilterValue","userSetHeaderFilterValue","getHeaderFilters","userRemoveFilter","userClearFilter","userClearHeaderFilter","setHeaderFilterFocus","reloadHeaderFilter","getHeaderFilterValue","setHeaderFilterValue","initializeColumnHeaderFilter","hideHeaderFilterElements","showHeaderFilterElements","tableBuilt","filterMode","remoteFilterParams","registerDataHandler","initialFilter","setFilter","initialHeaderFilter","refreshFilter","addFilter","removeFilter","all","clearFilter","clearHeaderFilter","headerFilter","setHeaderFilterColumnPlaceholder","filterType","tagType","attrType","filterChangeCheck","prevSuccess","emptyFunc","headerFilterFunc","filters","headerFilterFuncParams","fieldVal","colVal","trackChanges","generateHeaderFilterElement","filterElement","editorElement","typingTimer","searchTrigger","headerElement","headerFilterEmptyCheck","headerFilterParams","headerFilterLiveFilterDelay","hasAttribute","headerFilterLiveFilter","reloadData","findFilter","findSubFilters","ajax","filtersToArray","searchType","filterRecurse","rowList","activeRowComponents","filterRow","subFilter","defaultFilters","plaintext","formatterParams","emptyToSpace","sanitizeHTML","money","integer","decimal","rgx","floatVal","sign","decimalSym","thousandSym","thousand","negativeSign","symbolAfter","link","urlPrefix","labelField","labelTraverse","urlField","image","src","urlSuffix","truthy","allowTruthy","tick","tickElement","cross","crossElement","outputFormat","invalid","invalidPlaceholder","isValid","timezone","setZone","datetimediff","suffix","humanize","now","toHuman","traffic","percentValue","colors","color","legend","legendColor","legendAlign","barEl","barContainer","legendEl","holderEl","buttonTick","buttonCross","rownum","innerText","responsiveCollapse","toggleList","isOpen","rowSelection","checkbox","selectableRangeMode","toggleSelect","handleComplexRowClick","isSelected","registerRowSelectCheckbox","deselectRow","registerHeaderSelectCheckbox","Format","formatValue","formatHeader","lookupFormatter","formatterPrint","print","formatterClipboard","formatterHtmlOutput","htmlOutput","formatters","mockCell","titleFormatter","titleFormatterParams","entityMap","defaultFormatters","FrozenColumns","leftColumns","rightColumns","rightPadding","initializationMode","layoutCell","reinitializeColumns","blockLayout","unblockLayout","edge","frozenCheck","calcMargins","layoutColumnPosition","layoutCalcRows","_calcSpace","layoutGroupCalcs","groupList","allCells","leftParents","marginValue","getColGroupParentElement","deinitialize","getTableElement","FrozenRows","freezeRow","unfreezeRow","isRowFrozen","detachRow","frozenRows","initializeRows","rowType","styleRows","GroupComponent","groupManager","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","getPath","childNodes","GroupRows","displayHandler","setGroupBy","setGroupValues","setGroupStartOpen","setGroupHeader","userGetGroups","userGetGroupedData","rowGetGroup","groupUpdateOnCellEdit","cellUpdated","reassignRowToGroup","configureGroupSetup","rowDeleting","scrollHeaders","rowMoving","rowAddingIndex","rowSample","virtualRenderFill","groupStartOpen","langValue","items","removeCalcs","getRealColumns","lookupFunc","prevValue","assignRowToGroup","getGroupedData","toGroup","fromGroup","removeRow","insertRow","generateGroups","groupComponents","groupListData","pullGroupListData","rowCount","headerContent","oldGroups","createGroup","assignRowToExistingGroup","newGroupNeeded","oldRowGroup","oldGroupPath","newGroupPath","getExpectedPath","every","groupPath","groupId","History","history","clearComponentHistory","rowDeleted","rowAdded","rowMoved","undo","redo","getHistoryUndoSize","getHistoryRedoSize","posFrom","posTo","getGroup","getRowIndex","newValue","undoers","redoers","oldRow","cellEdit","rowAdd","_rebindRow","rowMove","HtmlTableImport","fieldIndex","hasIndex","tableElementCheck","parseTable","_extractOptions","_extractHeaders","_generateBlankHeaders","optionsArr","attrib","_attribValue","exists","_findCol","textContent","inQuote","nextChar","array","Import","importFromFile","importFormat","loadDataCheck","loadData","importData","lookupImporter","structureData","err","importer","importers","extension","pickFile","extensions","accept","file","files","reader","FileReader","importReader","readAsArrayBuffer","readAsBinaryString","readAsDataURL","readAsText","onload","onerror","parsedData","structureArrayToObject","structureArrayToColumns","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","headerClick","headerDblClick","headerContext","headerMouseEnter","headerMouseLeave","headerMouseOver","headerMouseOut","headerMouseMove","headerTap","headerDblTap","headerTapHold","groupClick","groupDblClick","groupContext","groupMouseEnter","groupMouseLeave","groupMouseOver","groupMouseOut","groupMouseMove","groupTap","groupDblTap","groupTapHold","subscribers","touchSubscribers","columnSubscribers","touchWatchers","tap","tapDbl","tapHold","initializeExternalEvents","cellContentsSelectionFixer","selectNode","subscriptionChangeExternal","subscribeTouchEvents","unsubscribeTouchEvents","handleTouch","noTouch","watchers","componentObj","Keybindings","watchKeys","pressedKeys","keyupBinding","keydownBinding","keybindings","mergedBindings","mapBindings","bindEvents","clearBindings","mapBinding","symbolsList","ctrl","meta","code","checkBinding","ctrlKey","metaKey","navPrev","navNext","navUp","navDown","scrollPageUp","scrollPageDown","scrollToStart","scrollToEnd","copyToClipboard","keyBlock","newPos","scrollMax","navLeft","navRight","Menu","nestedMenuBlock","currentComponent","rootPopup","initializeRowWatchers","initializeGroupWatchers","rowContextMenu","loadMenuEvent","on","rowClickMenu","groupContextMenu","groupClickMenu","headerContextMenu","loadMenuTableColumnEvent","headerClickMenu","headerMenu","initializeColumnHeaderMenu","contextMenu","loadMenuTableCellEvent","clickMenu","headerMenuEl","icon","headerMenuIcon","menu","loadMenu","parentPopup","itemEl","disabled","MoveColumns","placeholderElement","createPlaceholderElement","hoverElement","checkTimeout","checkPeriod","moving","toCol","toColAfter","startX","autoScrollMargin","autoScrollStep","autoScrollTimeout","touchMove","moveHover","endMove","movableColumns","mousemove","which","startMove","bindTouchEvents","prevColWidth","nextColWidthLast","prevColWidthLast","startXMove","passive","moveToCol","_bindMouseMove","movingCells","_unbindMouseMove","scrollPos","columnHolder","xPos","MoveRows","toRowAfter","hasHandle","startY","tableRowDropEvent","connectionSelectorsTables","connectionSelectorsElements","connectionElements","connectedTable","connectedRow","movableRowsConnectedTables","movableRowsConnectedElements","initializeCell","mouseup","tableRowDrop","previousSibling","rowHandle","nextRowHeight","prevRowHeight","nextRowHeightLast","prevRowHeightLast","startYMove","setStartPosition","connectToTables","pointerEvents","disconnectFromTables","moveHoverConnections","moveHoverTable","rowHolder","yPos","connectionTables","commsConnections","dropEvent","elementRowDrop","tabulatorElementDropEvent","sender","movableRowsSender","senders","movableRowsReceiver","receivers","connect","disconnect","dropComplete","fromTable","toTable","Mutator","enabled","transformCell","mutateLink","lookupMutator","mutators","mutatorEdit","linkCell","pageSize","currentRow","currentPage","totalRows","totalPages","showingEl","valueEl","ofEl","totalEl","rowsEl","pages","Page","progressiveLoad","pageCounterElement","pageCounter","page","remoteRowCountEstimate","initialLoad","dataChanging","pageSizes","setMaxPage","setPage","userSetPageToRow","userSetPageSize","getPageSize","previousPage","nextPage","getPage","getPageMax","setPageToRow","initialLoadComplete","calculatePageSizes","footerRedraw","paginationAddRow","rowAddingPosition","paginationMode","remotePageParams","_parseRemoteData","restOnRenderBefore","initializePageCounter","initializePaginator","initializeProgressive","scrollVertical","testElRow","testElCell","paginationSize","generatePageSizeSelectList","setPageSize","progressiveLoadScrollMargin","pagesElement","firstBut","prevBut","nextBut","lastBut","paginationSizeSelector","pageSizeSelect","counter","paginationCounter","pageCounters","hidden","pageSelectLabel","paginationCounterHolder","paginationElement","paginationCounterElement","footerAppend","paginationInitialPage","paginationButtonCount","trigger","leftSize","rightSize","_generatePageButton","actualStartRow","actualRowPageSize","actualRows","setMaxRows","_setPageButtons","_setPageCounter","last_page","last_row","progressiveLoadDelay","footer","defaultPageCounters","local","id","localStorage","getItem","cookie","cookiePos","setItem","expireDate","setDate","getDate","toUTCString","Persistence","defWatcherBlock","readFunc","writeFunc","testKey","removeItem","persistence","retrievedData","persistenceMode","persistenceID","localStorageTest","persistenceReaderFunc","readers","persistenceWriterFunc","writers","retrieveData","save","eventSave","getColumnLayout","setColumnLayout","sorters","initialSort","parseColumns","mergeDefinition","getOwnPropertyDescriptor","defineProperty","set","current","oldCols","newCols","_findColumn","validateSorters","getSort","getGroupConfig","getPageConfig","excludedKeys","defStore","colDef","defaultReaders","defaultWriters","rowContextPopup","loadPopupEvent","rowClickPopup","groupContextPopup","groupClickPopup","headerContextPopup","loadPopupTableColumnEvent","headerClickPopup","headerPopup","initializeColumnHeaderPopup","contextPopup","loadPopupTableCellEvent","clickPopup","headerPopupEl","headerPopupIcon","loadPopup","contentsEl","renderCallback","Print","manualBlock","printAsHtml","replaceTable","cleanup","printFullscreen","generateTable","printConfig","printStyled","printRowRange","footerContent","scrollX","scrollY","footerEl","tableEl","printHeader","printFooter","printFormatter","scrollTo","ReactiveData","origFuncs","currentVersion","unblock","watchRow","watchData","unwatchData","version","enumerable","configurable","arg","getRowFromDataObject","pop","startRow","oldRows","writable","watchKey","watchTreeChildren","childField","rebuildTree","ResizeColumns","startColumn","startWidth","latestX","initialNextColumn","layoutColumnHeader","layoutCellHandles","deInitializeComponent","resizeHandle","columnLayoutUpdated","deInitializeColumn","columnWidthUpdated","resizable","initializeEventWatchers","reinitializeColumn","frozenOffset","handleEl","nearestColumn","_checkResizability","handleDown","_mouseDown","oldWidth","parentElement","mouseMove","blockedBefore","blockedAfter","startDiff","moveDiff","resizableColumnFit","checkCellHeights","mouseUp","ResizeRows","startHeight","prevHandle","prevHandleDown","screenY","ResizeTable","visibilityObserver","resizeObserver","containerObserver","tableHeight","containerWidth","autoResize","initialRedraw","tableStyle","IntersectionObserver","ResizeObserver","initializeVisibilityObserver","entry","nodeHeight","contentRect","nodeWidth","redrawTable","observe","tableResized","isIntersecting","unobserve","ResponsiveLayout","hiddenColumns","collapseFormatter","collapseStartOpen","collapseHandleColumn","updateColumnVisibility","initializeResponsivity","responsiveLayoutCollapseFormatter","formatCollapsedData","responsiveLayoutCollapseStartOpen","order","generateCollapsedContent","generateCollapsedRowContent","colCount","getFlexBaseWidth","hideColumn","showColumn","generateCollapsedRowData","mockCellComponent","responsiveLayoutCollapseUseFormatters","node_content","titleData","valueData","titleHighlight","SelectRow","selecting","lastClickedRow","selectPrev","headerCheckboxElement","selectRows","deselectRows","getSelectedRows","getSelectedData","isRowSelected","selectable","clearSelectionData","rowRetrieve","selectablePersistence","_deselectRow","_rowSelectionChanged","endSelect","selectableCheck","getCurrentCell","_clearSelection","lastClickedRowIdx","rowIdx","fromRowIdx","toRowIdx","toggledRows","toggledRow","_selectRow","rowMatch","rowInfo","selectableRollingSelection","checkboxEl","dataTreeSelectPropagate","childRowSelection","selectedRow","aRow","bRow","alignEmptyValues","decimalSeparator","thousandSeparator","string","langLocale","localeCompare","calc","d","alphanum","Sort","sortList","userSetSort","clearSort","sortMode","remoteSortParams","setSort","refreshSort","arrowEl","sorterParams","startingDir","headerSortStartingDir","headerSortTristate","headerSort","headerSortElement","setColumnHeaderSortIcon","columnHeaderSortMulti","newSortList","sortOrderReverse","sortListActual","rowComponents","clearColumnHeaders","sortObj","findSorter","setColumnHeader","_sortItems","sortEl","sorterCount","sortItem","_sortRow","el1Comp","el2Comp","el1","el2","defaultSorters","Tooltip","tooltipSubscriber","headerSubscriber","timeout","popupInstance","deprecationCheckMsg","headerTooltip","mousemoveCheck","mouseoutCheck","tooltip","clearPopup","loadTooltip","tooltipDelay","parameters","numeric","starts","ends","minLength","maxLength","regex","unique","cellData","Validate","invalidCells","getInvalidCells","userClearCellValidation","userValidate","cellIsValid","clearValidation","cellValidate","columnValidate","rowValidate","editValidate","editorClear","editedClear","previousValue","validate","cancelled","validator","_extractValidator","substring","_buildValidator","validators","failedValidators","invalidIndex","defaultValidators","TabulatorFull"],"mappings":"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"}